/* Copyright (C) 1993-2000 Justin Frankel ** Should be compiled with Turbo C++ 3.x */ #ifndef __COMPACT__ #error I NEED COMPACT MEMORY MODEL #endif #include #include #include extern unsigned _heaplen = 0; extern unsigned _stklen = 512; unsigned short int *scrmem; struct text_info ti; unsigned char record_buffer[80*49]; unsigned short int screen_buffer[80*50]; int key; char ckey; short int x; char pop_upped = 0; char record = 1; char clear = 0; unsigned short int record_position; void dispchar(char y, char x, char ch, char attr) { register short int a = attr; register short int yy = y; scrmem[x + (yy*80)] = (ch | (a << 8)); } void bottom_line() { char x; for (x=0;x<80;x++) dispchar(49,x,0,0); dispchar(49,0,'A',0xA); dispchar(49,1,'l',0xA); dispchar(49,2,'t',0xA); dispchar(49,4,'C',0xA); dispchar(49,5,'l',0x7); dispchar(49,6,'e',0x7); dispchar(49,7,'a',0x7); dispchar(49,8,'r',0x7); dispchar(49,11,'E',0xA); dispchar(49,12,'n',0x7); dispchar(49,13,'a',0x7); dispchar(49,14,'b',0x7); dispchar(49,15,'l',0x7); dispchar(49,16,'e',0x7); dispchar(49,19,'D',0xA); dispchar(49,20,'i',0x7); dispchar(49,21,'s',0x7); dispchar(49,22,'a',0x7); dispchar(49,23,'b',0x7); dispchar(49,24,'l',0x7); dispchar(49,25,'e',0x7); dispchar(49,28,'P',0xA); dispchar(49,29,'r',0x7); dispchar(49,30,'i',0x7); dispchar(49,31,'n',0x7); dispchar(49,32,'t',0x7); if (record) { dispchar(49,72,'E',0x3); dispchar(49,73,'n',0x3); dispchar(49,74,'a',0x3); dispchar(49,75,'b',0x3); dispchar(49,76,'l',0x3); dispchar(49,77,'e',0x3); dispchar(49,78,'d',0x3); } else { dispchar(49,72,'D',0x3); dispchar(49,73,'i',0x3); dispchar(49,74,'s',0x3); dispchar(49,75,'a',0x3); dispchar(49,76,'b',0x3); dispchar(49,77,'l',0x3); dispchar(49,78,'e',0x3); dispchar(49,79,'d',0x3); } dispchar(49,60,'H',0x5); dispchar(49,61,'a',0x5); dispchar(49,62,'p',0xC); dispchar(49,63,'p',0xC); dispchar(49,64,'y',0xF); dispchar(49,66,'B',0xF); dispchar(49,67,'u',0x7); dispchar(49,68,'g',0x9); } void interrupt ( *oldhandler)(); void interrupt handler() { oldhandler(); ckey = bioskey(1); if (ckey && record && !pop_upped) record_buffer[record_position++] = ckey; if (record_position > (80*49)) record_position = 0; key = bioskey(1); if (pop_upped && key) { bioskey(0); if (key == 46<<8) { pop_upped = 1; clear = 1; } else if (key == 18<<8) { record = 1; pop_upped = 0; } else if (key == 32<<8) { record = 0; pop_upped = 0; } else if (key == 25<<8) { asm int 5; pop_upped = 0; } textmode(ti.currmode); gotoxy(ti.curx,ti.cury); memcpy(scrmem,screen_buffer,80*50*sizeof(short int)); if (clear) { memset(record_buffer,0,80*49); record_position = 0; } pop_upped = 0; clear = 0; } else if (key == 44<<8 && bioskey(2) & 2) { int aytr; char k; bioskey(0); memcpy(screen_buffer,scrmem,80*50*sizeof(short int)); gettextinfo(&ti); textmode(64); for (x=0;x<(80*49);x++) { aytr = 0x0F00; k = record_buffer[x]; if (k == 13) { k = '|'; aytr = 0x0300; } else if (k == 8) { k = '<'; aytr = 0x0300; } scrmem[x] = k | aytr; } bottom_line(); pop_upped = 1; gotoxy(1,50); } } void main(void) { directvideo = 1; record_buffer[0] = 0; record_position = 0; cprintf("\n\r"); textcolor(0x5); cprintf("Ha"); textcolor(0xC); cprintf("pp"); textcolor(0xF); cprintf("y "); textcolor(0xF); cprintf("B"); textcolor(7); cprintf("u"); textcolor(9); cprintf("g"); textcolor(7); cprintf(" pre2.0\r\nCopyright (c) 1993-1996 Nullsoft.\r\n" " Hit Leftshift-Alt-Z to activate...\r\n"); scrmem = (unsigned short int *) 0xB8000000L; oldhandler = getvect(0x9); setvect(0x9, handler); keep(0, (_SS + (_SP/16) - _psp)); }