IMD 1.18: 20/07/2019 14:26:32   é™MINDSET pÐý  Disk boot error Non-System disk or disk error... Replace and press any key when ready.io sysmsdos sysß%*ÿPöúŒÈŽÐ¼|ŽØŽÀÇx‘|Œzû3ÀÍsé8¡||P‹6|»€èà_茸`ŽÀ3Û‹.~èS‹.:~èXê`Æ|S‹Å‹ØS‹6 |Ñèè�Å€‹FöÃtÁè%ÿ‹è=øs‹È+Ë€ùw6 |‹ØëÒè ëà ötèÃYX[QW-Š |2í÷áÇèa_ì$t ´»Íëòà|˜÷&|ÇP¾»~è<_¸ ÷.|ÿ÷6 |ÇP¿~¾{|¹ € Še €Ì :d u¦uâí_þ1|è§ÿ´ÍÍ‹ø™÷6|ŠÊþÁ™÷6|ŠèÀä ÌŠòŠ|¡|¢•|þÀ*Á;Æv‹ÆP´ÍrXP÷& |ØX+ðtÇë»Ã¾|èUÿëþUªýÿÿ@`ÿ�   À à @`€ ÿÏàÿ! #ðÿ%`'€) +À-à/1ðÿÿO5`7ðÿ9ðÿ;ðÿ=à?ðÿAðÿÿOE`Gðÿÿ¯Kðÿÿÿÿÿÿÿÿ/^@U`W€Y [À]ðÿÿ¿a n@e`g€i kÀmðÿÿq s@u`w€y ÿÏ}ðÿðÿƒðÿ…`ÿýÿÿ@`ÿ�   À à @`€ ÿÏàÿ! #ðÿ%`'€) +À-à/1ðÿÿO5`7ðÿ9ðÿ;ðÿ=à?ðÿAðÿÿOE`Gðÿÿ¯Kðÿÿÿÿÿÿÿÿ/^@U`W€Y [À]ðÿÿ¿a n@e`g€i kÀmðÿÿq s@u`w€y ÿÏ}ðÿðÿƒðÿ…`ÿMSBIOSEEC W„X €MSBIOSEFC +“X ODOS C Š€X IBMBIOS C ›}X €BIOS LIB zUY $6C BAT �9C2CUSER INC "sF3COPYRT PAS F!8'COPYRT ASM b!:CALLBIOSASM ¼Š-<ÙCALLDOS ASM uñ@¤BLTCHAR OBJ ‰R¢BMBLTCHAR ASM ·F“C€EVB OBJ &mX H"EVB ASM òU°I€SETBLOCKASM c]HLÉSETBLOCKOBJ hM¢M˜CC BAT j{ÕNIDOEXAMPLBAT ›¤¯OPOINT C #g²PCOLOR0 C (}ÕQ DC C çzÌ_POINT EXE -‰ÖSô)COLOR1 C •VY `COLOR0 EXE R}Õc *COLOR1 EXE ÉUY oø-åC H ÍR[~ EXAMPLE H ÍR[ åREE H { €)STDIO H Yv‚gCTYPE H :Yv„–ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö  öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö/* ----------------------------------------------------------------- These are the Mindset bios call routines for interrupt 0eeh. ----------------------------------------------------------------- */ #include /* --------------------- INTERRUPT EE ------------------------ */ /* ---------------------- set_display_device -----------------------------*/ set_display_device(device) char device; /* bit 0 = mon if 1, bit 1 = black&white */ { struct regs myregs; myregs.ax = 0x0200 + device; callbios(ms_i_int, &myregs); return; } /* ----------------------- set_sync_mode --------------------------------*/ set_sync_mode(sync_mode) char sync_mode; /* set/clear: genlock, interlace, fixed phase*/ { struct regs myregs; myregs.ax = 0x0600 + sync_mode; callbios(ms_i_int, &myregs); return; } /* ----------------------- set_display_int ------------------------------*/ set_display_int(linenum) char linenum; /* display pixel line generating interrupt */ { struct regs myregs; myregs.ax = 0x0700 + linenum; myregs.bx = 0; /* no diagnostic marker displayed */ callbios(ms_i_int, &myregs); return; } /* ------------------------ joystick -------------------------------------*/ joystick(a_switch, b_switch, a_x, a_y, b_x, b_y) int *a_x, *a_y, *b_x, *b_y; /* changes to x and y coordinates */ char *a_switch, *b_switch; /* switch status */ /* bit 0 = up switch, bit 1 = down switch */ /* bit 2 = left switch, bit 3 = right */ /* bit 4 = button 1, bit 5 = button 2 */ /* 1 means switch is closed */ { struct regs myregs; myregs.ax = 0x1f00; callbios(ms_i_int, &myregs); *a_switch = ~(myregs.ax); /* reverse the sense so that */ *b_switch = ~(myregs.ax) >> 8; /* 1 means switch closed */ *a_x = myregs.bx; *a_y = myregs.cx; *b_x = myregs.dx; *b_y = myregs.si; return; } /* ----------------------------- set_led -------------------------------*/ set_led(on_off) char on_off; /* 0 = off, 1 = on */ /* bit 0 = green led, bit 1 = yellow led */ { struct regs myregs; myregs.ax = 0x2200 + on_off; callbios(ms_i_int, &myregs); return; } /* -------------------------- sound_mode ---------------------------------*/ sound_mode(mode, module_bits) char mode; /* mode 0, 1, 2, or 3 */ /* mode 0 = music */ /* mode 1 = sound effects / music */ /* mode 2 = max voice music */ /* mode 3 = direct data */ char module_bits; /* bit 0 = on board, bit 1 = stereo */ { struct regs myregs; myregs.ax = 0x2400 + module_bits; myregs.bx = (1 << (mode)); callbios(ms_i_int, &myregs); return; } /* -------------------------- sound_regs ---------------------------------*/ sound_regs(module_bits, mask1, mask2, soundtable) char module_bits; /* bit 0 = on board, bit 1 = stereo */ int mask1, mask2; /* mask saying which sound regs to write */ /* mask 1 for on board, ma  sk 2 for stereo */ int soundtable; /* offset of table of values for output */ { struct regs myregs; myregs.ax = 0x2500 + module_bits; myregs.bx = mask1; myregs.cx = mask2; myregs.si = soundtable; myregs.es = data_seg(); callbios(ms_i_int, &myregs); return; } /* ------------------------- sound_data --------------------------------*/ sound_data(module_bits, data1, data2) char module_bits; /* bit 0 = on board, bit 1 = stereo */ char data1, data2; /* data for on board, data2 for stereo */ { struct regs myregs; myregs.ax = 0x2600; myregs.bx = (data2 << 8) + data1; callbios(ms_i_int, &myregs); return; } /* -------------------------- stereo_check -----------------------------*/ char stereo_check() { struct regs myregs; myregs.ax = 0x2700; callbios(ms_i_int, &myregs); return(myregs.ax); /* 2 if stereo module present */ } /* ---------------------------- enable_beeper --------------------------*/ enable_beeper(on_off) char on_off; /* 1 to enable beeper, 0 to disable */ { struct regs myregs; myregs.ax = 0x3600 + on_off; callbios(ms_i_int, &myregs); return; } /* ---------------------------- test_beeper --------------------------*/ test_beeper() { struct regs myregs; myregs.ax = 0x3700; callbios(ms_i_int, &myregs); return(myregs.ax); } /* --------------------------- set_beeper --------------------------------*/ set_beeper(on_off) char on_off; /* 1 to turn beeper on, 0 to turn off */ { struct regs myregs; myregs.ax = 0x3800 + on_off; callbios(ms_i_int, &myregs); return; } CALLBIOSASM ¼Š-wÙEVB OBJ &mX x"EVB ASM òU°y€CALLDOS ASM uñz¤CALLDOS OBJ !mX {€CALLBIOSOBJ 2mX |éDOC BAT ÁzX }€BIOS XRF zUY ‚DOS OBJ Ø€X éMSBIOSEEOBJ o„X €�IBMBIOS OBJ ·€X �–MSBIOSEFOBJ \“X …|/* ----------------------------------------------------------------- These are the Mindset bios call routines for interrupt 0efh. ----------------------------------------------------------------- */ #include /* --------------------- INTERRUPT EF ------------------------ */ /* ---------------------- set_screen_mode ------------------------------*/ set_screen_mode(mode) char mode; /* 0 = 320 x 200, 2 colors */ /* 1 = 320 x 200, 4 colors */ /* 2 = 320 x 200, 16 colors */ /* 3 = 640 x 200, 2 colors */ /* 4 = 640 x 200, 4 colors */ /* 5 = 320 x 400, 4 colors */ /* 6 = 320 x 400, 2 colors */ { struct regs myregs; myregs.ax = mode; callbios(ms_v_int, &myregs); return; } /* -------------------------- get_screen_mode -----------------------------*/ char get_screen_mode(flags, bitspix) char *bitspix; /* number of bits per pixel */ int *flags; /* system video flags */ { struct regs myregs; myregs.ax = 0x100; callbios(ms_v_int, &myregs); *flags = myregs.bx; *bitspix = myregs.ax; return(myregs.ax); } /* ---------------------------- set_transfer_mode ----------------------------*/ set_transfer_mode(mode) int mode; /* bit 8 = 1 for transparency + other bits */ /* lower byte = 0 straight replace 1 and source into dest 2 or source into dest 3 xor source into dest 4 not source and replace dest 5 and (not source) into dest 6 or (not source) into dest 7 xor (not source into dest */ { struct regs myregs; myregs.ax = 0x200; myregs.bx = mode; callbios(ms_v_int, &myregs); return; } /* ------------------------ get_transfer_mode ------------------------------*/ int get_transfer_mode() { struct regs myregs; myregs.ax = 0x300; callbios(ms_v_int, &myregs); return(myregs.bx); /* return what transfer mode was set */ } /* ------------------------- set_dest_buffer ---------------------------------*/ set_dest_buffer(offset, segment, width, lines) int offset, segment; /* offset and seg of dest buffer */ int width; /* width in bytes of one scan line */ int lines; /* number of scan lines */ { struct regs myregs; myregs.ax = 0x400; myregs.cx = width; myregs.dx = lines; myregs.es = segment; myregs.bx = offset; callbios(ms_v_int, &myregs); return; } /* ------------------------ get_dest_buffer ------------------------------*/ get  _dest_buffer(offset, segment, width, lines) int *offset, *segment; /* offset and seg of dest buffer */ int *width; /* width in bytes of one scan line */ int *lines; /* number of scan lines in buffer */ { struct regs myregs; myregs.ax = 0x500; callbios(ms_v_int, &myregs); *offset = myregs.bx; *segment = myregs.es; *lines = myregs.dx; *width = myregs.cx; return; } /* -------------------- set_write_mask --------------------------------*/ set_write_mask(mask) int mask; /* 16 bit write mask */ { struct regs myregs; myregs.ax = 0x600; myregs.bx = mask; callbios(ms_v_int, &myregs); return; } /* ------------------------- get_write_mask ------------------------------*/ int get_write_mask() { struct regs myregs; myregs.ax = 0x700; callbios(ms_v_int, &myregs); return(myregs.bx); /* write mask returned */ } /* ---------------------- blt_copy ----------------------------------------*/ blt_copy(id, count, mode, xorg, yorg, offset, segment) char id; /* id of blt */ int count; /* number of blts to do */ int mode; /* 0 = top to bottom, source and dest */ /* bit 0 = 0 -> read from top to bottom */ /* bit 0 = 1 -> read from bottom to top */ /* bit 1 = 0 -> write from top to bottom */ /* bit 1 = 1 -> write from bottom to top */ /* bit 2 and 3 (same) */ /* bits = 0 -> read and write from left to right */ /* bits = 1 -> read and write from right to left */  /* bit 4 = 1 -> fast blt (conditions to meet) */ int xorg, yorg; /* x and y origin for destination */ int offset; /* offset of blt descriptor */ int segment; /* segment of blt descriptor */ { struct regs myregs; myregs.ax = 0x800 + id; myregs.bx = offset; myregs.cx = count; myregs.dx = mode; myregs.es = segment; myregs.si = xorg; myregs.di = yorg; callbios(ms_v_int, &myregs); return; } /* ------------------------- blt_copy_word -------------------------------*/ blt_copy_word(id, count, xorg, yorg, offset, segment) char id; /* id of blt */ int count; /* number of blts to do */ int xorg, yorg; /* x and y origin for destination */ int offset; /* offset of blt descriptor */ int segment; /* segment of blt descriptor */ { struct regs myregs; myregs.ax = 0x900 + id; myregs.bx = offset; myregs.cx = count; myregs.si = xorg; myregs.di = yorg; myregs.es = segment; callbios(ms_v_int, &myregs); return; } /* -------------------------- set_palette --------------------------------*/ set_palette(border, index, count, offset, segment) char border; /* which table color is border color */ int index; /* first of colors to set */ int count; /* number of colors to set */ int offset; /* offset of pointer to palette table */ int segment; /* segment of pointer to palette table */ { struct regs myregs; myregs.ax = 0xa00 + border; myregs.bx = offset; myregs.cx = count; myregs.dx = index; myregs.es = segment; callbios(ms_v_int, &myregs); return; } /* ------------------------ get_palette ---------------------------------*/ get_palette(border, index, count, offset, segment) char *border; /* border color */ int index; /* first of colors to get */ int count; /* number of colors to get */ int offset; /* offset of pointer to palette table */ int segment; /* segment of pointer to palette table */ { struct regs myregs; myregs.ax = 0xb00; myregs.cx = count; myregs.dx = index; myregs.es = segment; myregs.bx = offset; callbios(ms_v_int, &myregs); *border = myregs.ax; return; } /* --------------------------- blt_polypoint -----------------------------*/ blt_polypoint(id, count, color, xorg, yorg, offset, segment) char id; /* id number for blts */ int count; /* number of points */ char color; /* color for these points */ int xorg, yorg; /* x and y origin for destination */ int offset; /* offset of pointer to coordinates table */ int segment; /* segment of pointer to coordinates table */ { struct regs myregs; myregs.ax = 0xc00 + id; myregs.cx = count; myregs.dx = color << 8; myregs.si = xorg; myregs.di = yorg; myregs.bx = offset; myregs.es = segment; callbios(ms_v_int, &myregs); return; } /* --------------------------- blt_polyline -------------------------------*/ blt_polyline(id, mode  , count, color, xorg, yorg, offset, segment) char id; /* id number for blts */ char mode; /* 0 = chained, 1 = seperated */ int count; /* number of points */ char color; /* color for these points */ int xorg, yorg; /* x and y origin for destination */ int offset; /* offset of pointer to coordinates table */ int segment; /* segment of pointer to coordinates table */ { struct regs myregs; myregs.ax = 0xd00 + id; myregs.cx = count; myregs.dx = (color << 8) + mode; myregs.si = xorg; myregs.di = yorg; myregs.bx = offset; myregs.es = segment; callbios(ms_v_int, &myregs); return; } /* ----------------------- get_buffer_info ---------------------------------*/ get_buffer_info(fb1_segment, fb2_segment, size) int *fb1_segment, *fb2_segment; /* paragraphs of each half */ int *size; /* number of bytes in each half */ { struct regs myregs; myregs.ax = 0xe00; callbios(ms_v_int, &myregs); *fb1_segment = myregs.bx; *fb2_segment = myregs.dx; *size = myregs.cx; return; } /* ------------------------- set_disp_int_addr ------------------------------*/ set_disp_int_addr(offset, segment) int offset; /* offset of pointer to routine */ int segment; /* segment of pointer to routine */ { struct regs myregs; myregs.ax = 0xf00; myregs.bx = offset; myregs.es = segment; callbios(ms_v_int,&myregs); return; } /* ------------------------- get_disp_int_addr ----------------------------*/ get_disp_int_addr(offset, segment) int *offset; /* offset of pointer to routine */ int *segment; /* segment of pointer to routine */ { struct regs myregs; myregs.ax = 0x1000; callbios(ms_v_int,&myregs); *segment = myregs.es; *offset = myregs.bx; return; } /* --------------------------- switch_active_buffer ----------------------*/ switch_active_buffer() /* no params, just switch */ { struct regs myregs; myregs.ax = 0x1100; callbios(ms_v_int, &myregs); return; } /* --------------------------- set_collision_pattern ----------------------*/ set_collision_pattern(polarity, bit_pattern, mask) int polarity; /* 0 - disable all_except mode, 1 - enable mode */ int bit_pattern; /* bit pattern for collision detection */ int mask; /* define bitmask of pixel don't care bits */ { struct regs myregs; myregs.ax = 0x1200 + polarity; myregs.bx = (mask << 8) + bit_pattern; callbios(ms_v_int,&myregs); return; } /* ----------------------- get_collision_pattern ----------------------------*/ get_collision_pattern(polarity, pattern, mask) int *polarity; /* 0 - all_except mode disabled, 1 - mode enabled*/ int *pattern; /* bit pattern for collision detection */ int *mask; /* define bitmask of pixel don't care bits */ { struct regs myregs; myregs.ax = 0x1300; callbios(ms_v_int,&myregs); *polarity = myregs.ax && 0x00ff; *pattern = myregs.bx && 0x00ff; *mask = myregs.bx && 0xff00; return; } /* -------------------------- set_clip_rectangle --------------------------*/ set_clip_rectangle(x_left, x_right, y_top, y_bottom) int x_left, x_right; /* left and right x values */ int y_top, y_bottom; /* top and bottom y values */ { struct regs myregs; myregs.ax = 0x1400; myregs.si = x_left; myregs.di = x_right; myregs.cx = y_top;  myregs.dx = y_bottom; callbios(ms_v_int, &myregs); return; } /* ----------------------------- get_clip_rectangle -----------------------*/ get_clip_rectangle(x_left, x_right, y_top, y_bottom) int *x_left, *x_right; /* left and right x values */ int *y_top, *y_bottom; /* top and bottom y values */ { struct regs myregs; myregs.ax = 0x1500; callbios(ms_v_int, &myregs); *x_left = myregs.si; *x_right = myregs.di; *y_top = myregs.cx; *y_bottom = myregs.dx; return; }  /* -------------------------- set_collclip_detect -------------------------*/ set_collclip_detect(mode, offset, segment) int mode; /* bit #0 (clipping): 0 - disable, 1 - enable */ /* bit #1 (collision): 0 - disable, 1 - enable */ /* bit #2 (task done int): 0 - disable, 1 -enable */ int offset; /* offset of service routine */ int segment; /* segment of service routine */ { struct regs myregs; myregs.ax = 0x1600 + mode;    myregs.bx = offset; myregs.es = segment; callbios(ms_v_int,&myregs); return; } /* ------------------------ get_collclip_detect ---------------------------*/ get_collclip_detect(mode, offset, segment) int *mode; /* bit #0 (clipping): 0 - disable, 1 - enable */ /* bit #1 (collision): 0 - disable, 1 - enable */ /* bit #2 (task done int): 0 - disabled, 1 - enabled */ int *offset; /* offset of service routine */ int *segment; /* segment of service routine */ { struct regs myregs; myregs.ax = 0x1700; callbios(ms_v_int,&myregs); *mode = myregs.ax && 0x0007; *offset = myregs.bx; *segment = myregs.es; return; } /* -------------------------- blt_wait -----------------------------------*/ blt_wait(id, coll_status, clip_status) char *id; /* id of blt that finished */ int *coll_status; /* collision status */ int *clip_status; /* clip status */ { struct regs myregs; myregs.ax = 0x1800; callbios(ms_v_int, &myregs); *id = myregs.ax; *coll_status = myregs.bx; *clip_status = myregs.cx; return; } /* ------------------------ blt_polygon ----------------------------------*/ blt_polygon(id, count, even_color, odd_color, xorg, yorg, offset, segment) char id; /* id number for blts */ int count; /* number of points */ char even_color, odd_color; /* color for even and odd pixels */  int xorg, yorg; /* x and y origin for destination */ int offset; /* offset of pointer to coordinates table */ int segment; /* segment of pointer to coordinates table */ { struct regs myregs; myregs.ax = 0x1900 + id; myregs.cx = count; myregs.dx = (even_color << 8) + odd_color; myregs.si = xorg; myregs.di = yorg; myregs.bx = offset; myregs.es = segment; callbios(ms_v_int, &myregs); return; } /* -------------------------- blt_fellipse ------------------------------*/ blt_fellipse(id, count, even_color, odd_color, xorg, yorg, offset, segment) char id; /* id number for blts */ int count; /* number of points */ char even_color, odd_color; /* color for even and odd pixels */ int xorg, yorg; /* x and y origin for destination */ int offset; /* offset of pointer to coordinates table */ int segment; /* segment of pointer to coordinates table */ { struct regs myregs; myregs.ax = 0x1a00 + id; myregs.cx = count; myregs.dx = (even_color << 8) + odd_color; myregs.si = xorg; myregs.di = yorg; myregs.bx = offset; myregs.es = segment; callbios(ms_v_int, &myregs); return; } /* ----------------------- blt_hellipse ------------------------------------*/ blt_hellipse(id, count, color, xorg, yorg, offset, segment) char id; /* id number for blts */ int count; /* number of points */ char color; /* color for even and odd pixels */ int xorg, yorg; /* x and y origin for destination */ int offset; /* offset of pointer to coordinates table */ int segment; /* segment of pointer to coordinates table */ { struct regs myregs; myregs.ax = 0x1b00 + id; myregs.cx = count; myregs.dx = color << 8; myregs.si = xorg; myregs.di = yorg; myregs.bx = offset; myregs.es = segment; callbios(ms_v_int, &myregs); return; } /* ---------------------------- save_GCP --------------------------------*/ int save_GCP(mode, offset, segment, data_size) char mode; /* 0 = no save, just size; 1 = save GCP */ int offset; /* offset of memory to store GCP status */ int segment; /* segment of memory to store GCP status*/ { struct regs myregs; myregs.ax = 0x1c00 + mode; myregs.bx = offset; myregs.es = segment; callbios(ms_v_int, &myregs); return(myregs.ax); /* return number of bytes needed to save */ } /* ---------------------------- restore_GCP ----------------------------*/ restore_GCP(offset, segment) int offset; /* offset of memory containing GCP status */ int segment; /* segment of memory containing GCP status */ { struct regs myregs; myregs.ax = 0x1d00; myregs.bx = offset; myregs.es = segment; callbios(ms_v_int, &myregs); return; } /* ------------------------ fill_dest_buffer -------------------------------*/ fill_dest_buffer(pattern) int pattern; { struct regs myregs;   myregs.ax = 0x1e00; myregs.bx = pattern; callbios(ms_v_int, &myregs); return; } /* ---------------------- set_font_pointer -------------------------------*/ set_font_pointer(offset, segment) int offset; /* offset of font description */ int segment; /* segment of font description */ { struct regs myregs; myregs.ax = 0x1f00; myregs.bx = offset; myregs.es = segment; callbios(ms_v_int, &myregs); return; } /* ----------------------- get_font_pointer --------------------------------*/ get_font_pointer(offset, segment) int *offset; /* offset of font descriptor storage */ int *segment; /* segment of font descriptor storage */ { struct regs myregs; myregs.ax = 0x2000; callbios(ms_v_int, &myregs); *offset = myregs.bx; *segment = myregs.es; return; } /* ---------------------------- blt_string --------------------------------*/ blt_string(id, count, ignore, direction, color, xorg, yorg, offset, segment) char id; /* id for the blt */ char count; /* number of strings */ char ignore; /* number of characters to ignore */ char direction; /* 0=l to r, 1=r to l, 2=t to b, 3=b to t */ char color; /* one byte color mask */ int xorg, yorg; /* x and y origin in destination */ int offset; /* offset of pointer to descriptor */ int segment; /* segment of pointer to descriptor */ { struct regs myregs; myregs.ax = 0x2100 + id; myregs.bx = offset; myregs.cx = (count << 8) + ignore; myregs.dx = (direction << 8) + color; myregs.si = xorg; myregs.di = yorg; myregs.es = segment; callbios(ms_v_int, &myregs); return; } /* -------------------------- set_link_mode --------------------------------*/ set_link_mode(mode) char mode; /* 0 for contiguous lists, 1 for linked */ { struct regs myregs; myregs.ax = 0x2200 + mode; callbios(ms_v_int, &myregs); return; } /* -------------------------- get_link_mode -------------------------------*/ char get_link_mode() { struct regs myregs; myregs.ax = 0x2300; callbios(ms_v_int, &myregs); return(myregs.ax); /* return value set with set_link_mode */ } /* --------------------------- get_GCP_status -------------------------------*/ get_GCP_status(gcp_idle, system_fly, collision_detected) int *gcp_idle; /* task is done */ int *system_fly; int *collision_detected; /* collision was detected on last task */ { struct regs myregs; myregs.ax = 0x2400; callbios(ms_v_int,&myregs); *gcp_idle = myregs.bx && 0x0001; *system_fly = myregs.bx && 0x0002; *collision_detected = myregs.bx && 0x0004; return; } /* ----------------------- get_char_bitmap --------------------------------*/ get_char_bitmap(normal, extras, segment)/*standard bios font, non-blt format */ int *normal, *extras; /* offset for normal char font, extra font */ int *segment; /* segment for both fonts */ { struct regs myregs; myregs.ax = 0x2500; callbios(ms_v_int, &myregs); *normal = myregs.si; *extras = myregs.di; *segment = myregs.es; return; } /* --------------------------- get_GCP_memory ------------------------------*/ get_GCP_memory(memory_flag, first_segment, last_segment) int *memory_flag; /* 0 - all memory avail. to blter, 1 - part only */ int *first_segment; /* segment address of first 64KB avail. to blter */ int *last_segment; /* segment address of last 64KB avail. to blter */ { struct regs myregs; myregs.ax = 0x2600;  callbios(ms_v_int,&myregs); *memory_flag = myregs.ax && 0x0001; *first_segment = myregs.si; *last_segment = myregs.di; return; } CALLDOS OBJ !mX {€CALLBIOSOBJ 2mX |éDOC BAT ÁzX }€BIOS XRF zUY ‚DOS OBJ Ø€X éMSBIOSEEOBJ o„X €�IBMBIOS OBJ ·€X �–MSBIOSEFOBJ \“X …|#include /*----------------------- dos_file_create -----------------------------*/ int dos_file_create(offset, segment, attrib) int offset; /* offset of pointer to name */ int segment; /* segment of pointer to name */ int attrib; /* attribute of file */ { struct regs myregs; myregs.dx = offset; myregs.cx = attrib; myregs.ax = 0x3c00; myregs.ds = segment; /* seg for file name pointer */ callbios(dos_int, &myregs); if (myregs.flags & carryfl)   return(0); /* return failed */ else return(-1 * myregs.ax); /* return the handle */ } /*----------------------- dos_file_open ------------------------------*/ int dos_file_open(offset, segment, access) int offset; /* ofset of pointer to name */ int segment; /* segment of pointer to name */ int access; /* 0=read, 1=write, 2=both */ { struct regs myregs; myregs.dx = offset; myregs.ax = 0x3d00 + access; myregs.ds = segment; callbios(dos_int, &myregs); if (myregs.flags & carryfl) return(0); /* return failed */ else return(-1 * myregs.ax); /* return the handle */ } /*----------------------- dos_file_close -------------------------------*/ dos_file_close(handle) int handle; /* file handle returned from open */ { struct regs myregs; myregs.bx = handle; myregs.ax = 0x3e00; callbios(dos_int, &myregs); return(-1 * myregs.ax); } /*----------------------- dos_file_read -------------------------------*/ dos_file_read(handle, offset, segment, nbytes) int handle; /* file handle returned from open */ int offset; /* offset of where to read data to */ int segment; /* segment of where to read data to */ int nbytes; /* number of bytes to read */ { struct regs myregs; myregs.ax = 0x3f00; myregs.bx = handle; myregs.dx = offset; myregs.ds = segment; myregs.cx = nbytes; callbios(dos_int, &myregs); return(-1 * myregs.ax); /* return number of bytes read */ } /*----------------------- dos_file_write -----------------------------*/ dos_file_write(handle, offset, segment, nbytes) int handle; /* file handle returned from open */ int offset; /* offset of where to write data from */ int segment; /* segment of where to write data from */ int nbytes; /* number of bytes to write */ { struct regs myregs; myregs.ax = 0x4000; myregs.bx = handle; myregs.dx = offset; myregs.ds = segment; myregs.cx = nbytes; callbios(dos_int, &myregs); return(-1 * myregs.ax); /* return number of bytes written */ } /*----------------------- dos_file_delete -----------------------------*/ dos_file_delete(offset, segment) int offset; /* offset of where to write data from */ int segment; /* segment of where to write data from */ { struct regs myregs; myregs.ax = 0x4100; myregs.dx = offset; myregs.ds = segment; callbios(dos_int, &myregs); return(-1 * myregs.ax); /* return number of bytes written */ } /*----------------------- dos_file_lseek -----------------------------*/ dos_file_lseek(handle, method, lo_offset, hi_offset) int handle; /* file handle of file to position pointer */ int method; /* typew of positioning: 0=abs, 1=rel, 2=end+off*/ int lo_offset; /* low 16 bits of 32 bit integer for number */ /* of bytes to move pointer */ int hi_offset; /* high 16 bits of 32 bit integer to move pointer*/ { struct regs myregs; myregs.ax = 0x4200 + method;  myregs.bx = handle; myregs.cx = hi_offset; myregs.dx = lo_offset; callbios(dos_int, &myregs); return(-1 * myregs.ax); /* return number of bytes written */ } 5Wƒ5Y£5[Ã5]ã5ÿ6a#6cC6ec6gƒ6i£6kÃ6mã6o7q#7ÿÿÿuã7ÿÿÿÿÿÿÿÿÿÿÿÿƒóÿÿÿÿÿÿÿ‡c8ÿ�8‰£8‹Ã8�ã8�9‘#9“C9•óÿÿÿÿ™³9ÿÿÿÿŸóÿÿ/:ÿO:¥c:§óÿ/* ------------------------------------------ These are the IBM bios call routines. ------------------------------------------ */ #include /* ---------------------- set_ibm_mode ----------------------------------*/ set_ibm_mode(video_mode) /* set IBM video display mode */ int video_mode; /* mode argument for BIOS call*/ { struct regs myregs; /* structure from CUSER.INC */ myregs.ax = 0x0000 + video_mode; /* set 80186 register AX */ callbios(i_io_int, &myregs); return; /* return after setting mode */ } /* ----------------------- set_cursor_position -------------------------*/ set_cursor_position(page, row, column) char page; /* page for character to go to */ char row; /* character row */ char column; /* character column */ { struct regs myregs; myregs.ax = 0x200; myregs.bx = (page << 8); myregs.cx = column; myregs.dx = (row << 8) + column; callbios(i_io_int, &myregs); return; }    /* ------------------------ get_cursor_position ------------------------*/ get_cursor_position(page, row, column) char page; /* page for character to go to */ char *row; /* character row */ char *column; /* character column */ { struct regs myregs; myregs.ax = 0x300; myregs.bx = (page << 8); callbios(i_io_int, &myregs); *row = (myregs.dx & 0xff00) >> 8; *column = myregs.dx & 0xff; return; } /* ------------------------ write_char_only ----------------------------*/ write_char_only(page, chr, color, count) char page; /* page for character to go to */ char chr; /* character to write */ char color; /* character color */ int count; /* number of duplicates */ { struct regs myregs; myregs.ax = 0x900 + chr; myregs.bx = (page << 8) + color; myregs.cx = count; callbios(i_io_int, &myregs); return; } /* ----------------------- write_char_cursor --------------------------*/ write_char_cursor(page, chr, color, count) char page; /* page for character to go to */ char chr; /* character to write */ char color; /* character color */ int count; /* number of duplicates */ { struct regs myregs; myregs.ax = 0xa00 + chr; myregs.bx = (page << 8) + color; myregs.cx = count; callbios(i_io_int, &myregs); return; } /* ------------------------ write_dot --------------------------------*/ write_dot(row, column, color) int row; /* pixel row */ int column; /* pixel column */ char color; /* what color */ { struct regs myregs; myregs.ax = 0xc00 + color; myregs.cx = column; myregs.dx = row; callbios(i_io_int, &myregs); return; } /* -------------------------- read_dot --------------------------------*/ char read_dot(row, column, color) int row; /* pixel row */ int column; /* pixel column */ { struct regs myregs; myregs.ax = 0xd00; myregs.cx = column; myregs.dx = row; callbios(i_io_int, &myregs); return(myregs.ax & 0xf); } /* -------------------------- write_teletype --------------------------*/ write_teletype(page, chr, color) char page; /* page for character to go to */ char chr; /* character to write */ char color; /* character color */ { struct regs myregs; myregs.ax = 0xe00 + chr; myregs.bx = (page << 8) + color; callbios(i_io_int, &myregs); return; } /* ---------------------------- get_kb_char -----------------------------*/ char get_kb_char(scancode) char *scancode; /* scan code for character typed */ { struct regs myregs; myregs.ax = 0; callbios(i_kb_int, &myregs); *scancode = (myregs.ax & 0xff00) >> 8; return(myregs.ax & 0xff); /* return the ascii of the key */ } /* --------------------------- test_kb_buffer ---------------------------*/ char test_kb_buffer() { struct regs myregs; myregs.ax = 0x100; callbios(i_kb_int, &myregs); if (myregs.flags & zerofl) return(0); /* return 0 if no char */ else return(1); /* return 1 otherwise */ } /* -------------------------- get_kb_shift_status ----------------------*/ char get_kb_shift_status() /* return bit: 0 = right shift key 1 = left shift key 2 = control key 3 = alternate key 4 = scroll lock key 5 = numeric lock key 6 = caps lock key 7 = insert */ { struct regs myregs; myregs.ax = 0x200; callbios(i_kb_int, &myregs); return(myregs.ax & 0xff); /* return shift status */ } DOS OBJ Ø€X éMSBIOSEEOBJ o„X €�IBMBIOS OBJ ·€X �–MSBIOSEFOBJ \“X …|öðý,  € callbios%–PGROUPPROG=˜(eÍšÿ` iU‹ì‹FhË˴͆àP‹ÄP‹n‹F‹^‹N‹V‹v‹~ Ž^ ŽFU‹ìÿ^]PœX‰FXƒÄ‰F‰^‰N‰V‰v‰~ Œ^ ŒF]ÃŒØÃŒÈÃŒÀÇ�CALLBIOS�CODE_SEG_Ÿ�DATA_SEG\£� EXTRA_SEGb1Št€ calldosn–PGROUPPROG=˜(5ýšÿ` 9U‹ì‹n‹F‹^‹N‹V‹v‹~ Í!PœX‰F X‰F‰^‰N‰V‰v‰~ ]ì�CALLDOSWŠt€ ibmbiosk–PROGDATAPGROUPDGROUP<˜(™™˜HŽ€îšÿ^šÿ\� SET_IBM_MODE§Œ _MNEXTyŒXCOVFàŒ CALLBIOS +Uƒì;&wé‹ì‹F�^S»S‰Fè‹åƒÄ]Ã@œÄ&lœ„ &¥œ„&��SET_CURSOR_POSITION' R'Uƒì;&wé‹ìÇFŠF0ä±ÓàŠ^0ÿŠN0í‰N±‹VÓâÓ�NQ¹Q‰F‰V ‰^è‹åƒÄ]ÃBœÄ&lœ„ &¥œ„E&i�GET_CURSOR_POSITIONuÚ PuUƒì;&wé‹ìÇFŠF0ä±Óà�^S»S‰Fè‹å‹F%ÿ±Óø‹vˆ‹F%ÿ‹vˆƒÄ]Ã;œÄ&lœ„ &¥œ„)&…�WRITE_CHAR_ONLYÁÞ IÁUƒì;&wé‹ìŠF0ä Š^0ÿ±ÓãŠN0íÙ‹N �VRºR‰F‰N‰^è‹åƒÄ]ÃáœÄ&lœ„ &¥œ„<&r�WRITE_CHAR_CURSORø IUƒì;&wé‹ìŠF0ä Š^0ÿ±ÓãŠN0íÙ‹N �VRºR‰F‰N‰^è‹åƒÄ]ÚœÄ&lœ„ &¥œ„<&r� WRITE_DOTK7 <KUƒì;&wé‹ìŠF0ä ‹^‹N�VRºR‰F‰N‰^è‹åƒÄ]ÃüœÄ&lœ„ &¥œ„/&�READ_DOTƒp <ƒUƒì;&wé‹ìÇF ‹F‹^�NQ¹Q‰F‰^è‹å‹F%ƒÄ]ÞœÄ&lœ„ &¥œ„)&…�WRITE_TELETYPE»8 C»Uƒì;&wé‹ìŠF0äŠ^0ÿ±ÓãŠN0íÙ�NQ¹Q‰F‰^è‹åƒÄ]ÃÊœÄ&lœ„ &¥œ„6&x� GET_KB_CHARú  ?úUƒì;&wé‹ìÇF�FP¸Pè‹å‹F%ÿ±Óø‹vˆ‹F%ÿƒÄ]ÃÖœÄ&lœ„ &¥œ„&‘�TEST_KB_BUFFER5Π<5Uƒì;&wé‹ìÇF�FP¸Pè‹å‹F%@t3ÀƒÄ]øƒÄ]ÃÉœÄ&lœ„ &¥œ„&‘�GET_KB_SHIFT_STATUSmå 0mUƒì;&wé‹ìÇF�FP¸Pè‹å‹F%ÿƒÄ]Ã�œÄ&lœ„ &¥œ„&‘Št€dos’–PROGDATAPGROUPDGROUP<˜(ÛX˜HŽ€îšÿ^šÿ\�DOS_FILE_CREATEÐŒ _MNEXTyŒXCOVFàŒ CALLBIOS SUƒì;&wé‹ì‹F‹^ÇF<‹N�VRº!R‰F‰N‰^è‹å‹F%t3ÀƒÄ]ËF»ÿÿ÷ëƒÄ]Ã�œÄ&lœ„ &¥œ„/&� DOS_FILE_OPENO ROUƒì;&wé‹ì‹F‹^�Ã=‹N�VRº!R‰F‰N‰^è‹å‹F%t3ÀƒÄ]ËF»ÿÿ÷ëƒÄ]à œÄ&lœ„ &¥œ„.&€�DOS_FILE_CLOSE�s 8�Uƒì;&wé‹ì‹FÇF>�^S»!S‰Fè‹å‹F»ÿÿ÷ëƒÄ]þœÄ&lœ„ &¥œ„#&‹� DOS_FILE_READÑ› JÑUƒì;&wé‹ìÇF?‹F‹^‹N‹V‰F�FP¸!P‰N‰V‰^è‹å‹F»ÿÿ÷ëƒÄ]ÃèœÄ&lœ„ &¥œ„5&y�DOS_FILE_WRITEã JUƒì;&wé‹ìÇF@‹F‹^‹N‹V‰F�FP¸!P‰N‰V‰^è‹å‹F»ÿÿ÷ëƒÄ]àœÄ&lœ„ &¥œ„5&y�DOS_FILE_DELETE]s >]Uƒì;&wé‹ìÇFA‹F‹^�NQ¹!Q‰F‰^è‹å‹F»ÿÿ÷ëƒÄ]ÜÄ&lœ„ &¥œ„)&…�DOS_FILE_LSEEK—z H—Uƒì;&wé‹ì‹FB‹^‹N‹V‰F�FP¸!P‰N‰V‰^è‹å‹F»ÿÿ÷ëƒÄ]Ã6œÄ&lœ„ &¥œ„3&{Št€ msbiosee–PROGDATAPGROUPDGROUP<˜(p˜HŽ€îšÿ^šÿ\�SET_DISPLAY_DEVICEÒŒ _MNEXTyŒXCOVFàŒ CALLBIOS 0Uƒì;&wé‹ìŠF0ä�^S»îS‰Fè‹åƒÄ]Ã9œÄ&lœ„ &¥œ„#&‹� SET_SYNC_MODE, 0,Uƒì;&wé‹ìŠF0ä�^S»îS‰Fè‹åƒÄ]à œÄ&lœ„ &¥œ„#&‹�SET_DISPLAY_INTXE 5XUƒì;&wé‹ìŠF0äÇF�^S»îS‰Fè‹åƒÄ]ÃÆœÄ&lœ„ &¥œ„(&†�JOYSTICK‰] ]‰Uƒì;&wé‹ìÇF�FP¸îPè‹å‹F÷Ћvˆ±Óø‹vˆ‹F‹v‰‹F‹v ‰‹F ‹v"‰‹F ‹v$‰ƒÄ]îœÄ&lœ„ &¥œ„&‘�SET_LEDâV 0âUƒì;&wé‹ìŠF0ä"�^S»îS‰Fè‹åƒÄ]Ã7œÄ&lœ„ &¥œ„#&‹� SOUND_MODE6 ?Uƒì;&wé‹ìŠF0ä$Š^0ÿ‹ËºÓâ�^S»îS‰F‰Vè‹åƒÄ]ÜÄ&lœ„ &¥œ„2&|� SOUND_REGSIïŒ DATA_SEG HIUƒì;&wé‹ìŠF0ä%‹^‹N‹V‰F‰N‰V ‰^è�^S»îS‰Fè‹åƒÄ]ÃEœÄ&lœ„ &¥œ„-&œ„;&s� SOUND_DATA� =�Uƒì;&wé‹ìÇF&ŠF0ä±ÓàŠ^0ÿÃ�^S»îS‰Fè‹åƒÄ]ÃùœÄ&lœ  „ &¥œ„0&~� STEREO_CHECKÆø -ÆUƒì;&wé‹ìÇF'�FP¸îPè‹å‹FƒÄ]ÃkœÄ&lœ„ &¥œ„&‘� ENABLE_BEEPER0ïUƒì;&wé‹ìŠF0ä6�^S»îS‰Fè‹åƒÄ]ÜÄ&lœ„ &¥œ„#&‹� TEST_BEEPERá -Uƒì;&wé‹ìÇF7�FP¸îPè‹å‹FƒÄ]ÜÄ&lœ„ &¥œ„&‘� SET_BEEPERD 0DUƒì;&wé‹ìŠF0ä8�^S»îS‰Fè‹åƒÄ]ýœÄ&lœ„ &¥œ„#&‹Št€ msbiosef–PROGDATAPGROUPDGROUP<˜( ˜HŽ€îšÿ^šÿ\�SET_SCREEN_MODE¹Œ _MNEXTyŒXCOVFàŒ CALLBIOS -Uƒì;&wé‹ìŠF0ä�^S»ïS‰Fè‹åƒÄ]ÃBœÄ&lœ„ &¥œ„ &Ž�GET_SCREEN_MODE)œ :)Uƒì;&wé‹ìÇF�FP¸ïPè‹å‹F‹v‰‹F‹vˆƒÄ]ÃõœÄ&lœ„ &¥œ„&‘�SET_TRANSFER_MODE_± 0_Uƒì;&wé‹ìÇF‹F�^S»ïS‰Fè‹åƒÄ]ÃìœÄ&lœ„ &¥œ„#&‹�GET_TRANSFER_MODE‹‘ -‹Uƒì;&wé‹ìÇF�FP¸ïPè‹å‹FƒÄ]ÃÈœÄ&lœ„ &¥œ„&‘�SET_DEST_BUFFER´ B´Uƒì;&wé‹ìÇF‹F‹^‹N‹V‰F�FP¸ïP‰N‰V‰^è‹åƒÄ]ÃþœÄ&lœ„ &¥œ„5&y�GET_DEST_BUFFERòΠJòUƒì;&wé‹ìÇF�FP¸ïPè‹å‹F‹v‰‹F‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÜÄ&lœ„ &¥œ„&‘�SET_WRITE_MASK8° 08Uƒì;&wé‹ìÇF‹F�^S»ïS‰Fè‹åƒÄ]ÜÄ&lœ„ &¥œ„#&‹�GET_WRITE_MASKd� -dUƒì;&wé‹ìÇF�FP¸ïPè‹å‹FƒÄ]ÃêœÄ&lœ„ &¥œ„&‘�BLT_COPY�L T�Uƒì;&wé‹ìŠF0ä‹^"‹N‹V‰F‹F$‰F‹F‰F ‹F ‰F �FP¸ïP‰N‰V‰^è‹åƒÄ]Ã�œÄ&lœ„ &¥œ„G&g� BLT_COPY_WORDÝW NÝUƒì;&wé‹ìŠF0ä ‹^ ‹N‹V‰F‹F‰F ‹F"‰F�FP¸ïP‰N‰V ‰^è‹åƒÄ]ÜÄ&lœ„ &¥œ„A&m� SET_PALETTE'Í H'Uƒì;&wé‹ìŠF0ä ‹^‹N‹V‰F‹F ‰F�FP¸ïP‰N‰V‰^è‹åƒÄ]ÚœÄ&lœ„ &¥œ„;&s� GET_PALETTEk• JkUƒì;&wé‹ìÇF ‹F‹^‹N ‹V‰F�FP¸ïP‰N‰V‰^è‹å‹F‹vˆƒÄ]ÞœÄ&lœ„ &¥œ„5&y� BLT_POLYPOINT±Š `±Uƒì;&wé‹ìŠF0ä ‹^ŠN0í‰N±‹VÓâ‹N‰F‹F ‰F ‹F"‰F‹F$‰F�FP¸ïP‰N ‰V‰^è‹åƒÄ]à œÄ&lœ„ &¥œ„S&[� BLT_POLYLINE ‘ g Uƒì;&wé‹ìŠF0ä ‹^ŠN 0í‰N±‹VÓâŠN0íÑ‹N"‰F‹F$‰F‹F&‰F‹F(‰F�FP¸ïP‰N ‰V ‰^è‹åƒÄ]èœÄ&lœ„ &¥œ„Z&T�GET_BUFFER_INFOpQ BpUƒì;&wé‹ìÇF�FP¸ïPè‹å‹F‹v‰‹F‹v‰‹F‹v‰ƒÄ]Ã"œÄ&lœ„ &¥œ„&‘�SET_DISP_INT_ADDR®T 6®Uƒì;&wé‹ìÇF‹F‹^�NQ¹ïQ‰F‰^è‹åƒÄ]çœÄ&lœ„ &¥œ„)&…�GET_DISP_INT_ADDRà. :àUƒì;&wé‹ìÇF�FP¸ïPè‹å‹F‹v‰‹F‹v‰ƒÄ]Ã-œÄ&lœ„ &¥œ„&‘�SWITCH_ACTIVE_BUFFER *Uƒì;&wé‹ìÇF�FP¸ïPè‹åƒÄ]ÜÄ&lœ„ &¥œ„&‘�SET_COLLISION_PATTERN<ˆ ;<Uƒì;&wé‹ì‹F±‹^Óã^�NQ¹ïQ‰F‰^è‹åƒÄ]Ã,œÄ&lœ„ &¥œ„.&€�GET_COLLISION_PATTERNs] usUƒì;&wé‹ìÇF�FP¸ïPè‹åƒ~t ¸ÿ…Àt3À@ë3À‹v‰ƒ~t ¸ÿ…Àt3À@ë3À‹v‰ƒ~t ¸ÿ…Àt3À@ë3À‹v‰ƒÄ]Ã2œÄ&lœ„ &¥œ„&‘�SET_CLIP_RECTANGLEäó BäUƒì;&wé‹ìÇF‹F‹^‹N‹V‰F�FP¸ïP‰N‰V‰^ è‹åƒÄ]øœÄ&lœ„ &¥œ„5&y�GET_CLIP_RECTANGLE"À J"Uƒì;&wé‹ìÇF�FP¸ïPè‹å‹F‹v‰‹F ‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÃÔœÄ&lœ„ &¥œ„&‘�SET_COLLCLIP_DETECTh :hUƒì;&wé‹ì‹F‹^‹N�VRºïR‰F‰N‰^è‹åƒÄ]ÜÄ&lœ„ &¥œ„-&��GET_COLLCLIP_DETECTžô SžUƒì;&wé‹ìÇF�FP¸ïPè‹åƒ~t ¸…Àt3À@ë3À‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÀœÄ&lœ„ &¥œ„&‘�BLT_WAITíî BíUƒì;&wé‹ìÇF�FP¸ïPè‹å‹F‹vˆ‹F‹v‰‹F‹v‰ƒÄ]ÃŒœÄ&lœ„ &¥œ„&‘� BLT_POLYGON+¶ g+Uƒì;&wé‹ìŠF0ä‹^ŠN0í‰N±‹VÓâŠN 0íÑ‹N"‰F‹F$‰F‹F&‰F‹F(‰F�FP¸ïP‰N ‰V ‰^è‹åƒÄ]Ã{œÄ&lœ„ &¥œ„Z&T� BLT_FELLIPSEŽ% gŽUƒì;&wé‹ìŠF0ä‹^ŠN0í‰N±‹VÓâŠN 0íÑ‹N"‰F‹F$‰F‹F&‰F‹F(‰F�FP¸ïP‰N ‰V ‰^è‹åƒÄ]ÜÄ&lœ„ &¥œ„Z&T� BLT_HELLIPSEñÀ `ñUƒì;&wé‹ìŠF0ä‹^ŠN0í‰N±‹VÓâ‹N‰F‹F ‰F ‹F"‰F‹F$‰F�FP¸ïP‰N ‰V‰^è‹åƒÄ]ÃÍœÄ&lœ„ &¥œ„S&[�SAVE_GCPMš ?MUƒì;&wé‹ìŠF0ä‹^‹N�VRºïR‰F‰N‰^è‹å‹FƒÄ]Ã)œÄ&lœ„ &¥œ„/&� RESTORE_GCPˆd 6ˆUƒì;&wé‹ìÇF‹F‹^�NQ¹ïQ‰F‰^è‹åƒÄ]ûœÄ&lœ„ &¥œ„)&…�FILL_DEST_BUFFERº¶ 0ºUƒì;&wé‹ìÇF‹F�^S»ïS‰Fè‹åƒÄ]ÃnœÄ&lœ„ &¥œ„#&‹�SET_FONT_POINTERæW 6æUƒì;&wé‹ìÇF‹F‹^�NQ¹ïQ‰F‰^è‹åƒÄ]Ã[œÄ&lœ„ &¥œ„)&…�GET_FONT_POINTER0   :Uƒì;&wé‹ìÇF �FP¸ïPè‹å‹F‹v‰‹F‹v‰ƒÄ]ÃàœÄ&lœ„ &¥œ„&‘� BLT_STRINGNä zNUƒì;&wé‹ìŠF0ä!‹^(ŠN0í‰N±‹VÓâŠN0íÑŠN 0í‰N±‰F‹FÓàŠN"0íÁ‹N$‰F ‹F&‰F‹F*‰F�FP¸ïP‰N ‰V‰^è‹åƒÄ]à œÄ&lœ„ &¥œ„m&A� SET_LINK_MODEă 0ÄUƒì;&wé‹ìŠF0ä"�^S»ïS‰Fè‹åƒÄ]ÃLœÄ&lœ„ &¥œ„#&‹� GET_LINK_MODEðc -ðUƒì;&wé‹ìÇF#�FP¸ïPè‹å‹FƒÄ]Ã=œÄ&lœ„ &¥œ„&‘�GET_GCP_STATUS Ì u Uƒì;&wé‹ìÇF$�FP¸ïPè‹åƒ~t ¸…Àt3À@ë3À‹v‰ƒ~t ¸…Àt3À@ë3À‹v‰ƒ~t ¸…Àt3À@ë3À‹v‰ƒÄ]ÃjœÄ&lœ„ &¥œ„&‘�GET_CHAR_BITMAPŠ < BŠ Uƒì;&wé‹ìÇF%�FP¸ïPè‹å‹F‹v‰‹F ‹v‰‹F‹v‰ƒÄ]ÃלÄ&lœ„ &¥œ„&‘�GET_GCP_MEMORYÈ ( SÈ Uƒì;&wé‹ìÇF&�FP¸ïPè‹åƒ~t ¸…Àt3À@ë3À‹v‰‹F ‹v‰‹F ‹v‰ƒÄ]ÃGœÄ&lœ„ &¥œ„&‘ŠtñýZHvk“~`?$‡-6Qœ BLT_FELLIPSE DOS_FILE_CLOSEDOS_FILE_DELETEDOS_FILE_LSEEKGET_BUFFER_INFO GET_CHAR_BITMAP GET_DEST_BUFFER GET_SCREEN_MODE READ_DOTSET_COLLCLIP_DETECT SET_DISPLAY_DEVICE SET_IBM_MODESET_SCREEN_MODE SWITCH_ACTIVE_BUFFER WRITE_CHAR_ONLY^Mz‹j'T-„!Cdq=5•BLT_COPY BLT_HELLIPSE CALLBIOScalldos! DOS_FILE_READ ENABLE_BEEPER EXTRA_SEGGET_FONT_POINTER GET_KB_CHARGET_TRANSFER_MODE ibmbios!JOYSTICK SET_BEEPERSET_DISPLAY_INTSET_FONT_POINTER SOUND_DATAWRITE_CHAR_CURSOR!?\ƒJr~4‹“+S'g™ BLT_POLYPOINT callbios!CODE_SEGdos!DOS_FILE_CREATEGET_CLIP_RECTANGLE GET_COLLCLIP_DETECT GET_GCP_MEMORY GET_GCP_STATUS GET_KB_SHIFT_STATUSSET_CLIP_RECTANGLE SET_COLLISION_PATTERN SET_LED SET_SYNC_MODE STEREO_CHECK WRITE_DOT‚"^“0šxC(9oXŒNd¡ BLT_POLYLINE BLT_STRING BLT_WAIT DOS_FILE_OPENDOS_FILE_WRITEFILL_DEST_BUFFER GET_CURSOR_POSITIONGET_DISP_INT_ADDR msbiosee!SAVE_GCP SET_CURSOR_POSITIONSET_DEST_BUFFER SET_DISP_INT_ADDR SET_TRANSFER_MODE SOUND_MODE SOUND_REGS TEST_BEEPER'mvAH9-Qf^W"ˆ BLT_COPY_WORD BLT_POLYGON CALLDOSDATA_SEGGET_COLLISION_PATTERN GET_LINK_MODE GET_PALETTE GET_WRITE_MASK msbiosef! RESTORE_GCP SET_LINK_MODE SET_PALETTE SET_WRITE_MASK TEST_KB_BUFFERWRITE_TELETYPEö  lc1 %1 -n lc2 %1 ù¬vNLCS LIB `«v_6CS OBJ dvsëBIOS LIB zUY t6CALLBIOSASM ¼Š-wÙEVB OBJ &mX x"EVB ASM òU°y€CALLDOS ASM uñz¤CALLDOS OBJ !mX {€CALLBIOSOBJ 2mX |éDOC BAT ÁzX }€BIOS XRF zUY ‚DOS OBJ Ø€X éMSBIOSEEOBJ o„X €�IBMBIOS OBJ ·€X �–MSBIOSEFOBJ \“X …|ö/*-------------------------- structures ---------------------------*/ /* registers for callbios */ struct regs { int ax; int bx; int cx; int dx; int si; int di; int ds; int es; int flags; }; struct xypair { /* x and y coordinate pair */ int x; int y; }; struct xyzpoints { /* x y and z coordinates */ int x; int y; int z; }; /* ida file prefix */ struct ida_p { int version; /* file version */ int video_mode; /* display mode */ int raster_width; /* width of raster in bytes */ struct xypair size; /* x and y size */ struct xypair pos; /* x and y position */ }; /* blt descriptor */ struct blt_d { int source_off; /* source raster address */ int source_seg; int source_width; /* source raster width */ struct xypair from_pos; /* position within source raster */ struct xypair to_pos; /* position within dest raster */ struct xypair size; /* x and y size */ int mask; /* color mask */ }; /* blt word descriptor */ struct bltw_d { int color; /* color mask */ struct xypair to_pos; /* position within dest raster */ struct xypair size; /* x and y size */ }; /* ellipse descriptor */ struct ell_par { struct xypair center; /* center of ellipse */ struct xypair radius; /* radii of ellipse */ struct xypair begin; /* points on line connected to center which */ struct xypair end; /* point toward start and end of arc */ }; struct ell_d { char even_color; /* color for the ellipses */ char odd_color; /* (odd color ignored for hollow) */ char count; /* number of parameter sets */ struct ell_par *coords; /* pointer to ellipse parameter sets */ }; /* lines descriptor */ struct line_d { char color; /* color for the lines */ char count; /* number of points to connect */ char mode; /* 0 = chained, 1 = separated */ struct xypair *coords; /* list of points */ }; /* points descriptor */ struct pnt_d { char color; /* color for the points */ char count; /* number of points */ struct xypair *coords; /* list of points */ }; /* polygon descriptor */ struct pgon_d { char even_color; /* even pixel color */ char odd_color; /* odd pixel color */ char count; /* number of points to connect */ struct xypair *coords; /* coordinates of corners */ }; struct move_d { /* movement descriptor - posn, speed, accel */ struct xypair speed; /* current speec */ struct xypair maxspeed; /* maximum speed allowed */ struct xypair minspeed; /* minimum speed allowed */ struct xypair accel; /* accelleration (change of speed) */ struct xypair current; /* current position */ struct xypair previous; /* previous position */ }; struct time_d { /* timing descriptor - when to show & move */ int firstshow; /* first frame object shows */ int firstmove; /* first frame object moves */ int lastshow; /* last frame object shows */ char posn_frame; /* whether last detector is frame or posn */ struct xypair lastmove; /* last frame or last position */ }; struct parts_d{ /* describes pieces of object of one type */ char ptype; /* type - (line, etc) - see equates below */ int count; /* # of parts of this type */ int *point; /* ptr to data for these parts */ }; struct object_d { /* whole object descriptor */ struct move_d *moveptr; /* movement of this whole object */ struct time_d *timeptr; /* timing of this object */ int partscount; /* number of parts lists (ptr to follow) */ struct parts_d *partsptr; /* pointer to dat  a about what makes object */ }; /* equates for partsptr.ptype */ #define copy 1 /* copy rectangle data */ #define rect 2 /* fill rectangle data */ #define pgon 3 /* polygon data */ #define line 4 /* line data */ #define fell 5 /* filled ellipse data */ #define hell 6 /* hollow ellipse data */ #define pnt 7 /* points data */ /*------------------- equates for flags on stack ----------------------*/ #define carryfl 1 #define zerofl 0x40 #define dirfl 0x400 #define signfl 0x80 /************************************************************************ interrupt equates * ************************************************************************/ #define dos_int 0x21 /* interrupt for most dos functions */ #define i_io_int 0x10 /* ibm compatible video io interrupt */ #define i_kb_int 0x16 /* ibm compatible keyboard interrupt */ #define ms_i_int 0xee /* mindset unique io interrupt */ #define ms_v_int 0xef /* mindset graphics */ ·‚+ÿ¯+»òÿ½â+¿,ÁòÿÃB,Åb,ÿ�,É¢,ËòÿÍâ,ÏòÿÑ"-ÓB-ÿo-ׂ-Ù¢-ÿÿÿÿï-ß.á".ÿO.åòÿçòÿÿ¯.ëÂ.ÿï.ÿÿÿÿ//ÿÿÿÿo/ÿÿÿù¢/ÿÿÿýâ/ÿòÿóÿóÿÿo0óÿÿÿÿÿÿÿÿÿÿ1#1ÿÿÿÿÿÿóÿÿ¯1Ã1ã12!óÿ#C2ÿo2ÿ�2ÿÿÿÿÿÿÿÿÿ/3ÿÿÿ3óÿÿÿÿÿÿÿÿÿÿ;Ã3=óÿ?4A#4CC4Ec4Gƒ4I£4KÃ4MóÿO5Q#5SC5Uc5Wƒ5Y£5[Ã5]ã5ÿ6a#6cC6ec6gƒ6i£6kÃ6mã6o7q#7ÿÿÿuã7ÿÿÿÿÿÿÿÿÿÿÿÿƒóÿÿÿÿÿÿÿ‡c8ÿ�8‰£8‹Ã8�ã8�9‘#9“C9•óÿÿÿÿ™³9ÿÿÿÿŸóÿÿ/:ÿO:¥c:§óÿ { ********************************************************* * Copyright 1983 Mindset Corp. This program * * is an unpublished work of authorship protected * * by the copyright laws of the United States. * * This program is also the confidential, * * proprietary information of Mindset Corp. and * * is not to be copied, used or altered in any * * way without the express permission of Mindset * * Corp. * ********************************************************* ********************************************************* * This program is designated a Mindset Utility as * * defined in the Mindset Corp. Development Software * * License Agreement. * ********************************************************* }  DOC w*ÞJPAS1 EXE Re nPAS2 EXE »e q€mPAS3 EXE Üe Í€VLINK EXE «r�ãZ¥UDI EXE Oy 8ALTER 86 g!ökALTER MAC Ö!6öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö ; ********************************************************* ; * Copyright 1983 Mindset Corp. This program * ; * is an unpublished work of authorship protected * ; * by the copyright laws of the United States. * ; * This program is also the confidential, * ; * proprietary information of Mindset Corp. and * ; * is not to be copied, used or altered in any * ; * way without the express permission of Mindset * ; * Corp. * ; ********************************************************* ; ********************************************************* ; * This program is designated a Mindset Utility as * ; * defined in the Mindset Corp. Development Software * ; * License Agreement. * ; ********************************************  ************* w�ªBIOS0 EXT "x™í6PASIFC OBJ !ÚBIOS0 TYP !”BIOS0 OBJ äx™P*BIOS0 PAS sw™�ASM PRF ƒ!B9PASIFC ASM À!CcBIOS0 CST ç!K4"COPYRT PAS F!T'COPYRT ASM b!VBIOS CST ÒcÓX€"åIOS BAK WcÓ|9BIOS PAS fmÓf—BIOS EXT ¡mÓa€9åIOS LST ämÓ­ötitle Bios to C interface routines name callbios pgroup group prog prog segment byte public 'prog' assume cs:pgroup public callbios, data_seg, code_seg, extra_seg include macro186.inc ;------------------------------------------------------------------------------ ; ; callbios ; ; as called from a c program: ; callbios(int_number, ®_structure); ; reg_structure struct { ; int ax_reg; ; int bx_reg; ; int cx_reg; ; int dx_reg; ; int si_reg; ; int di_reg; ; int ds_reg;  ; int es_reg; ; int flags; ; } ; ; passed: ; int_number = where to interrupt to ; ®_structure = offset of registers to pass, return. ; returned: ; bios or dos call done, ; reg_structure updated. ; flags format: ; bit 0 = carry ; bit 2 = parity ; bit 4 = aux carry ; bit 6 = zero flag ; bit 7 = sign flag ; bit 8 = single step trap flag ; bit 9 = interrupt enable ; bit 10 = direction flag ; bit 11 = overflow flag ; ; destroys ax, bx, cx, dx, si, di ; ;------------------------------------------------------------------------------ callbios proc near push bp ;save old bp mov bp, sp push ds push es ; set up the interrupt instructions on the stack mov ax, ss:[bp + 4] ;get interrupt type pushw 0cbcbh ;push two return instructions to be safe mov ah, 0cdh ;interrupt instruction xchg ah, al ;make it int nn push ax ;put interrupt on stack ; set up the routine address to call mov ax, sp ;save that address push ss ;segment to call push ax ;offset ; now get the registers set up mov bp, ss:[bp + 6] ;get register structure pointer mov ax, ss:[bp + 0] ;register ax mov bx, ss:[bp + 2] ;register bx mov cx, ss:[bp + 4] ;register cx mov dx, ss:[bp + 6] ;register dx mov si, ss:[bp + 8] ;register si mov di, ss:[bp + 10] ;register di mov ds, ss:[bp + 12] ;register ds mov es, ss:[bp + 14] ;register es ; call the routine, through the stack push bp mov bp, sp ;sp was pointing to pushed routine call dword ptr ss:[bp + 2] pop bp push ax pushf pop ax mov ss:[bp + 16], ax ;flags pop ax add sp, 8 ;take routine off stack ; put in changed registers. mov ss:[bp + 0], ax ;register ax mov ss:[bp + 2], bx ;register bx mov ss:[bp + 4], cx ;register cx mov ss:[bp + 6], dx ;register dx mov ss:[bp + 8], si ;register si mov ss:[bp + 10], di ;register di mov ss:[bp + 12], ds ;register ds mov ss:[bp + 14], es ;register es pop es pop ds pop bp ret callbios endp ;------------------------------------------------------------------------------ ; ; data_seg ; ; as called from a c program: ; int_variable = data_seg(); ; int int_variable; ; ; passed: ; nothing ; returned: ; function value is current data segment (in AX) ; ;------------------------------------------------------------------------------ data_seg proc near mov ax, ds ret data_seg endp ;------------------------------------------------------------------------------ ; code_seg ; ; as called from a c program: ; int_variable = code_seg(); ; int int_variable; ; ; passed: ; nothing ; returned: ; function value is current code segment (in AX) ; ;------------------------------------------------------------------------------ code_seg proc near mov ax, cs ret code_seg endp ;------------------------------------------------------------------------------ ; ; extra_seg ; ; as called from a c program: ; int_variable = extra_seg(); ; int int_variable; ; ; passed: ; nothing ; retu  rned: ; function value is current extra segment (in AX) ; ;------------------------------------------------------------------------------ extra_seg proc near mov ax, es ret extra_seg endp prog ends end 1–CUSER INC "sF2MACRO186INC nƒ*4ûEXTERNS INC xJ¢5FONTS INC l;™6€IBMBIOS BAK òtK 7DOS C Š€X 8MSBIOSEEBAK ótG9Ÿ MSBIOSEFBAK ”½:€:LC1 EXE F!>€ûtitle C to DOS interface routine name calldos pgroup group prog prog segment byte public 'prog' assume cs:pgroup public calldos ;------------------------------------------------------------------------------ ; ; calldos ; ; as called from a c program: ; calldoss(®_structure); ; reg_structure struct { ; int ax_reg; ; int bx_reg; ; int cx_reg; ; int dx_reg; ; int si_reg; ; int di_reg; ; int flags; ; } ; ; passed: ; ®_structure = offset of registers to pass, return. ; returned: ; dos call done, ; reg_structure updated. ; flags format: ; bit 0 = carry ; bit 2 = parity ; bit 4 = aux carry ; bit 6 = zero flag ; bit 7 = sign flag ; bit 8 = single step trap flag ; bit 9 = interrupt enable ; bit 10 = direction flag ; bit 11 = overflow flag ; ; destroys ax, bx, cx, dx, si, di ; ;------------------------------------------------------------------------------ calldos proc near push bp ;save old bp mov bp, sp ;get the registers set up mov bp, ss:[bp + 4] ;get register structure pointer mov ax, ss:[bp + 0] ;register ax mov bx, ss:[bp + 2] ;register bx mov cx, ss:[bp + 4] ;register cx mov dx, ss:[bp + 6] ;register dx mov si, ss:[bp + 8] ;register si mov di, ss:[bp + 10] ;register di ; call the routine int 21h push ax pushf pop ax mov ss:[bp + 12], ax ;flags pop ax ; put in changed registers. mov ss:[bp + 0], ax ;register ax mov ss:[bp + 2], bx ;register bx mov ss:[bp + 4], cx ;register cx mov ss:[bp + 6], dx ;register dx mov ss:[bp + 8], si ;register si mov ss:[bp + 10], di ;register di pop bp ret calldos endp prog ends end OBJ &mX x"EVB ASM òU°y€CALLDOS ASM uñz¤CALLDOS OBJ !mX {€CALLBIOSOBJ 2mX |éDOC BAT ÁzX }€BIOS XRF zUY ‚DOS OBJ Ø€X éMSBIOSEEOBJ o„X €�IBMBIOS OBJ ·€X �–MSBIOSEFOBJ \“X …|€ BLTCHARp–PGROUPPROG=˜(Ó_šÿ` ÍU‹ì‹V.‰.‰‹F.£‹v ‹~ ‹^‹FŠO :Ár:G v ŠG2äðé*Á2äÑàÑàÃŽG ‹o“ŠO“VPS‹Ø2íSöÅu'‹=ÿÿu[[X^ëJ�ÑèÑèÑèŠÝ2ÿÑëÑëÑëÃÅ‹Ø&ŠÐàsPSQŒÈŽÀ»¹´ ÍïY[XòþÅ[:ou¯ú[X^oþÉuœ2öŠWò‹ØŠWò‹Æ]ÃTœ$Ä ÏÄÑÄÉ„8ÄÄ“Ér¢É|�BLTCHARYŠtßá ã@å`ç€éðÿëÀÿïïÿ/óðÿõðÿ÷€ùðûÀýàÿÿ/Aa� ¡ ñÿ á!Añÿ�¡ÿÏÿïÿÿÿÿO%a'�)¡ÿÿÿÿï/ñÿÿ/ÿO5a7ñÿ9ñÿ;ñÿ=ñÿ?ÿÿÿÿ_ÿoG�IAKÁMáOÿ/SñÿUaötitle Character expansion routines name bltchar pgroup group prog prog segment byte public 'prog' assume cs:pgroup public bltchar include macro186.inc ;------------------------------------------------------------------------------ ; ; bltchar ; ; as called from a c program: ; xpos = bltchar(chr, size, color, xorigin, yorigin, &font_desc); ; passed: ; ; chr - Ascii character ; size - pixel duplication multiplier ; color - color mask of character (word wide) ; xorigin - x position of character (top left corner) ; yorigin - y position of character ; font_desc - descriptor of 1 bit per pixel font ; returned: ; xpos - x origin beyond character ; ; destroys ax, bx, cx, dx, si, di ; ;------------------------------------------------------------------------------ ; equates for offsets into font descriptor extra_white equ 1; raster_height equ 4; raster_width equ 6; raster_offset equ 8; raster_seg equ 10; first_char equ 12; last_char equ 13; ; equates for offsets   into char part of font descriptor char_xpos equ 0; char_xsize equ 2; char_ysize equ 3; bltchar proc near push bp ;save old bp mov bp, sp push es ;blt the character point by point mov dx,[bp + 6] ;Get x and y size mov cs:bltword + 6,dx mov cs:bltword + 8,dx mov ax,[bp + 8] ;get color mov cs:bltword,ax mov si,[bp + 10] ;Get x position mov di,[bp + 12] ;get y position mov bx, [bp + 14] ;get font descriptor pointer ; get ax as offset of char info for this char  mov ax, ss:[bp + 4] ;get ASCII of character mov cl, [bx + first_char] ;first char in font cmp al, cl jb char_out_of_range cmp al, [bx + last_char] jbe char_in_range char_out_of_range: mov al, [bx + extra_white] xor ah, ah add si, ax ;skip for white space jmp finish_no_change char_in_range: sub al, cl ;ax is index xor ah, ah shl ax, 1 ;4 bytes per char shl ax, 1 ;4 bytes per char add ax, 14 ;beyond the font stuff add ax, bx ;into the table mov es, [bx + raster_seg] ;es is the raster segment assume es:nothing mov bp, [bx + raster_offset] ;es:[bp] is the font ;blt character loop xchg ax, bx mov cl, [bx + char_ysize] ;number of scan lines tall xchg ax, bx loop_1: push si ;save x origin push ax ;save char info pointer push bx ;save font info pointer ; get x size of char for pixel count, and get xpos and byte of char mov bx, ax ;bx is now index to char info xor ch, ch ;Set bit count to zero. loop_2: push bx  ;save the char info index test ch, 7 ;time for a new byte ? jnz old_byte ;not yet. ; get next byte in the raster mov ax, [bx + char_xpos] ;ax is offset of char in raster cmp ax, 0ffffh ;is there a char in the raster? jnz char_in_font ;yes. ok ; no char in the font - just compute next position no_char: pop bx pop bx pop ax pop si jmp finish_anyway ; Char is in font - get the data char_in_font: shr ax, 1 ;change x into byte offset shr ax, 1 ;(x must be multiple of 8) shr ax, 1 mov bl, ch ;x pixel count so far xor bh, bh ;add 1 byte for each 8 pixels shr bx, 1 shr bx, 1 shr bx, 1 add ax, bx ;get byte n of this character add ax, bp ;add start of raster mov bx, ax ;pointer must be in bx mov al, es:[bx] ;get the byte old_byte: shl al,1 ;Get bit jnc no_blt ;If 0 no blt push ax ;Perform the BLt push bx push cx push es mov ax,cs ;set up pointer to blt mov es,ax assume es:prog mov bx,offset bltword mov cx,1 ;one blt mov ah,9 ;blt copy word int 0efh pop es pop cx pop bx pop ax no_blt: add si,dx ;add size to x origin inc ch ;Next bit pop bx cmp ch, [bx + char_xsize] ;enough bits ? jnz loop_2 add di,dx ;add size to scan line pop bx ;recover font info pointer pop ax ;recover char info pointer pop si ;recover x origin add bp, [bx + raster_width] ;move to next line of raster dec cl ;one more scan line done jnz loop_1 finish_anyway:  xor dh, dh mov dl, [bx + extra_white] ;skip for white space add si, dx mov bx, ax ;get char info pointer mov dl, [bx + char_xsize] add si, dx ;add x size to x origin finish_no_change: mov ax, si ;return the value pop es pop bp ret bltchar endp ; blt copy word descriptor bltword dw 5 dup (0) prog ends end EVB OBJ �U°Ö"EVB ASM òU°×€SETBLOCKASM c]HÙÉSETBLOCKOBJ hM¢Ú˜ö€EVB›–DATADGROUPPGROUPPROG<˜H˜(Nàšÿ_šÿ]Œ FRAME_COUNT Y RP¸ŽØÿ¡ tÿXË¸ŽØ´ÍɌˎû´ÍïûŽÃ´ÍïÃ#œ2ÈÄ Ä ÄÄÈ Ä*Ä0Ä7š�EVBINIT)�STOPEVB@ô� VBLANK›Št ÃðÿÅ` ÿ� ɰ ÿÿÿÑðÿÏ ¦! Ó@ Õ` ×ðÿÙ  ÛÀ Ýà ßá ã@å`ç€é ÿÿÿÿÿÿïñ ó@õðÿ÷€ù ûÀýàÿðÿ!ÿOa� ¡ Á áñÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÁáÿ/#ñÿ%a'�ÿÏ+ñÿ-á/ñÿÿÿÿÿOÿÿÿ7�9¡;Á=á?A!CAEaG�I¡KÁMáOQñÿSAUa  ötitle EVB routine name evb dgroup group data data segment word public 'data' extrn frame_count: word old_addr dd ? data ends pgroup group prog prog segment byte public 'prog' assume cs:pgroup public vblank, evbinit, stopevb include macro186.inc ;-------------------------------------------------------------------------- ; ; Vblank routine - ; ;-------------------------------------------------------------------------- vblank proc far push ax push ds push es mov ax, dgroup mov ds, ax assume ds:dgroup inc frame_count ;increment frame count ; call old interrupt address if not 0 mov ax, word ptr old_addr or ax, word ptr old_addr + 2 jz vb_end1 call old_addr vb_end1: pop es pop ds pop ax ret vblank endp ;-------------------------------------------------------------------------- ; ; Early vblank initialization ; ;-------------------------------------------------------------------------- assume ds:nothing evbinit proc near  push ds push es mov ax,dgroup mov ds,ax assume ds:dgroup ; save existing vblank address mov ah,10h ;ms get display int addr int 0efh ;mindset video int mov word ptr old_addr,bx ;store offset mov bx,es mov word ptr old_addr+2, bx ;store segment ; store new interrupt address mov bx,cs mov es,bx ;code seg in es mov bx,offset vblank ;routine addr in bx mov ah,0fh ;ms set display int addr int 0efh ;mindset video int pop es pop ds ret evbinit endp  ;-------------------------------------------------------------------------- ; ; Turn off early vblank for clean exit to system. ; ;-------------------------------------------------------------------------- assume ds:nothing stopevb proc near push ds push es ; store zeroes to interrupt address ES:[BX] mov bx,0000H ;store 0 to [bx] mov es,bx ;store 0 to es: mov ah,0fh ;ms set display int addr int 0efh ;mindset video int pop es pop ds ret stopevb endp prog ends end TREE H { )STDIO H Yv gCTYPE H :Yv1–CUSER INC "sF2MACRO186INC nƒ*4ûEXTERNS INC xJ¢5FONTS INC l;™6€IBMBIOS BAK òtK 7DOS C Š€X 8MSBIOSEEBAK ótG9Ÿ MSBIOSEFBAK ”½:€:LC1 EXE F!>€ûötitle Set memory block name setblock dgroup group data data segment word public 'DATA' extrn _psp: word ;prog seg prefix ptr data ends pgroup group prog prog segment byte public 'prog' assume cs:pgroup public setblock include macro186.inc ;-------------------------------------------------------------------------- ; ; setblock - called from c - does dos setblock to 128 k for program ; ; as called from c: ; intvar = setblock(); ; ; returned value = 0 if failed, 1 if successful. ; ;-------------------------------------------------------------------------- assume ds:dgroup setblock proc near push es mov bx, 8192 ;64k code + 64k data mov ax, _psp + 2 ;c stored the pointer for returning. mov es, ax ;es = block segment mov ax, 4a00h ;function = set block int 21h jc failed mov ax, 1 ;success. pop es ret failed: xor ax, ax ;failure. pop es ret setblock endp prog ends end YM T!£PDI C Ó!¨Õ  € SETBLOCK–DATADGROUPPGROUPPROG<˜H˜(šÿ_šÿ]Œ_PSP » ¡ŽÀ¸JÍ!r¸Ã3ÀÃÊœÄ}�SETBLOCKþŠt«O`MSTEXT MAP ås«bæMSTEXT EXE Ùs«PFBLTCHAR OBJ ‰R¢dMFC C «T[e‘FC H ÍR[g FC OBJ ŠU[h›FC EXE cZ[j��EXAMPLE C «T[Ž‘FC MAP cZ[�eJFC SYM T!£PDI C Ó!¨Õölc1 %1 -n lc2 %1 link cs %1,%1,,lcs bios; del %1.map del %1.lst %1 oiÎ%*MINDSETCLIB餯COLOR0 C (}Õ/ EXAMPLE H j°*COLOR0 BAK t|Õ+ COLOR2 C åhÈ,€EXAMPLE C ©\˳€BIOS LIB ÷uG2*LCS LIB `«v=6CURSOR OBJ ’lÇ‹ÊTEXT OBJ ØiÎaTEXT EXE jÎdž<IDA_FRUT !Í}FRUIT C Krͧ€öREM This is an example of how to use the C compiler and LINKER to REM create a C program using MINDSET BIOS interface routines. REM LC1 example -n LC2 example LINK cs example cursor evb,example,example,lcs+bios EXAMPLE C ©\˳€BIOS LIB ÷uG2*LCS LIB `«v=6CURSOR OBJ ’lÇ‹ÊTEXT OBJ ØiÎaTEXT EXE jÎdž<IDA_FRUT !Í}FRUIT C Krͧ€ö#include main() { int point[2]; int x_cursor,y_cursor; int curscolr,dummy; point[0] = 0; point[1] = 0; x_cursor = 100; y_cursor = 100; curscolr = 1; setmode(2); /* MINDSET mode=2 --> 320x200x16 colors */ points(0,1,curscolr,x_cursor,y_cursor,point); getkey(&dummy); setmode(3); setibmmode(2); exit(); } setibmmode(video_mode) /* set IBM video display mode */ int video_mode; /* argument for BIOS call */ { struct regs myregs; /* structure from CUSER.INC */ myregs.ax = video_mode; /* set 80186 register AX = mode*/ callbios(i_io_int, &myregs); /* actual call to BIOS */ return; } COLOR OBJ ¢[ÕÌCOLOR1 BAK 5Õß DOEXAMPLBAT ›¤¯»SETBLOCKOBJ hM¢ó˜POINT C #g²ÌCURSOR C v\Ëú BLTCHAR OBJ ‰R¢ MCC BAT j{Õ�I/* CURSOR0.C - program to display MINDSET basic palette of 16 colors */ /* Pressing any key with the palette displayed will exit. */ #include /* define RGB/composite color bits */ #define black 0x0000 + 0000 #define dkblue 0x1000 + 0500 #define dkgreen 0x2000 + 0050 #define dkcyan 0x3000 + 0550 #define dkred 0x4000 + 0005 #define dkmagent 0x5000 + 0505 #define dkyellow 0x6000 + 0055 #define dkwhite 0x7000 + 0555 #define dkgray 0x8000 + 0222 #define blue 0x90   00 + 0700 #define green 0xa000 + 0070 #define cyan 0xb000 + 0770 #define red 0xc000 + 0007 #define magenta 0xd000 + 0707 #define yellow 0xe000 + 0077 #define white 0xf000 + 0777 /***************************** C O L O R 0 . C ******************************/ main() { int dummy, x_org, y_org,ecolor,ocolor; /* integer variable declarations */ static int palette[16] = { black, dkblue, dkgreen, dkcyan, dkred, dkmagent, dkyellow, dkwhite, dkgray, blue, green,  cyan, red, magenta, yellow, white }; /* define palette order for display */ static struct xypair square[] = { { 0, 0}, { 40, 0}, { 40, 50}, { 0, 50}, }; /* define outlines of color boxes */ static struct xypair outlines[] = { { 0, 0}, { 319, 0}, { 319, 100}, { 0, 100}, { 0, 0}, { 0, 50}, { 319, 50} }; /* define point pairs for outline */ setmode(2); /* MINDSET mode=2 320x200x16 colors*/ filldest(0); /* erase displayr with black pixels */ setpalette(0, 16, 0, &palette); /* set up 16 color palette */ ecolor = 0; /* set both dither colors to BLACK */ ocolor = 0; /* draw 2 rows of 8 colors each */ for(y_org = 0; y_org < 100; y_org += 50) for(x_org = 0; x_org < 320; x_org += 40) { /* draw 40x50 pixel color block */ polygons(0,4,ecolor,ecolor,x_org,y_org,&square); /* id, count, evencolor, oddcolor, x0, y0, data */ ecolor += 1; /* incremMZô ÿÿ€) Ô  ú¸0ŽØ¸€ŽÐ¼û¸£ŒV&¡,£b¾€&Š 2íãF&Š<=t< t< uIí3ÉëD�3ÛIt.F&Š< t&< t",0|(< $Ûr ‹ÓÛrÛrÚr2äØr ëÏ Ût‰Â뻺d馋ÂÑëÛ�ûw»‰Â&‹ŒØ+Ð÷Âðu ÑâÑâÑâÑâë�ºðÿ¡Ãr;Ðwº“ëd�‰úŒØŽÐ‹âû‹Ñ¡£X£Z‹+Ø+Âr׉\3ÀP‹ì‹Ú‹ÊƒÃ�ãþÿ+ã‹ü6ÆcGã6Æ G&Š6ˆFGâö6Æ‹ÄPè¸LÍ!´ Í!¸LÍ!¡-‹àº©´ Í!¸LÍ!‹ì‹F´LÍ!Uƒì ‹ì3À»dÇF¹Q‰F‰F‰^‰^è•‹å�FPÿvÿvÿv¸P3ÀPèì‹å�F PèÀ ‹å¸Pèj‹å¸Pè ‹åè#ƒÄ ]ÃUƒì‹ì‹F�^S»S‰FèÛ‹åƒÄ]ÃUƒì;&ZwéWÿ‹ìÇF‹F=}»÷ë Pè‹åÿFëåÇFƒ~} ÿvè ‹åÿFëíÿv ÿvèí‹åƒÄ]ÃUƒì;&Zwéÿ‹ìÇă>Ä }n‹v Š0ä@‹øŠ…0ä%tÿF ëæ‹v Š0ä…ÀtI¡ÄÿÄÑà‹ð‹F ‰„Æ‹v Š0ä…À‰Ft@‹øŠ…0ä%uÿF ëß‹v ŠÿF ƈF0ä…Àu�ëÆ°³Æ.Æ"ÀÇ(± Ç,ºR¢!¢ˆ*ˆ&ˆ/ˆ è‹å%€t   0ä ¢ ¸ÆPÿ6ÄèEþ‹å3ÀPè¼þ‹åƒÄ]ÃU‹ìÇ‹V‹N´<Í!s£]ÃU‹ìÇ‹V‹F´=Í!s£]ÃU‹ìÇ‹^´>Í!s£]ÃU‹ìÇ‹^‹N‹V´?Í!s£3À]ÃU‹ìÇ‹^‹N‹V´@Í!s£3À]ÃU‹ìÇ‹F ´B‹^‹N‹VÍ!s£‹Ø‹Â]ÃU‹ìÇ‹V´AÍ!s£]ÃU‹ìÇ‹V‹F´C‹NÍ!s£‹Á]ÃU‹ì‹^¸DÍ!‹Â]ÃU‹ìÿvÿvè/ý‹å]ÃUƒì;&Zwé ý‹ì¸ ‰F¸"‹^;ØsŠG0ä…ÀtƒFëç‹F="u3ÀƒÄ]Ãÿvÿv ÿv è‹åƒÄ]ÃUƒì ;&Zwéºü‹ì‹vŠD„Àt0ä%t V¸ÿÿPè ‹å‹vŠD 0äPèv ‹å‹vŠD0ä=+t3Ûë3ÛCŠ0äˆ^ éì¡ð ‰F‚~ t¸ë¸‹^ Ø�˸¤PSÿvèÔ‹å‰F@u3ÀƒÄ ]øP3ÀP3ÛSÿvè‘‹å‚~ t¸€ë¸‰F飂~ t¸ë3À‹ð ØSÿvè…‹å‰F@u3ÀƒÄ ]Â~ t¸€ë¸‰Fëg‚~ t¸ë¸‹ð Ø�Ë�˸¤PSÿvè<‹å‰F@u3ÀƒÄ ]Â~ t¸€ë¸‰Fë3ÀƒÄ ]Ã=wt«=ruégÿ=auéÿþëâ‹FÑàÑà‹ð‚¼#t�N‹F ‹v‰Dë‹vÇD‹F‹vˆD ‹D‰3À‰D‰D‰D ‹FˆD‹ÆƒÄ ]ÃUƒì;&Zwéû‹ì‹vŠD0ä%t V¸ÿÿPèd ‹å‹vŠD0ä% uƒ| t ÿt ÿtèâ‹å3À‹v‰D‰D ÆDŠD 0äP見åƒÄ]ÃUƒì;&Zwé­ú‹ì‹F…Àx=}ÑàÑà‹ðŠ„"0ä%€u Çä 3ÀƒÄ]ËFÑàÑà"ƒÄ]ÃUƒì ;&Zwéeú‹ìÇF‹F=}ÑàÑà‹ðŠ„"0ä…ÀtÿFëãƒ~uÇä¸ÿÿƒÄ ]ËFÑàÑà"‹ð¡æ%€‹^3ÉF%€‰vt¸ë3À €‹vˆ‹F%ëO‹vŠ0ä @ˆëR‹F%t¸ë3À ‹vŠ0ÿ ؈ë3‹vŠ0ä `ˆë%‹vÆÇä¸ÿÿƒÄ ]Ã=tÙ=tµ=t¢ëÛ‹vŠ0ä…Àu‹vÆD‹FƒÄ ]ÃÇF‹F=}7» ÷ër@Pÿvèø‹å…Àu‹F» ÷ë‹ðŠ„r‹~ˆE‹FƒÄ ]ÃÿFëÁ‹vÆD‹F%tÿvèµû‹å‹F%Pÿvèû‹å‹v‰Dƒ>t4‹F%t3ÀPÿvèÙú‹å‹v‰Dƒ>t>Çä‹vƸÿÿƒÄ ]ËF%=u‹vÿtèÖú‹åÇä‹vƸÿÿƒÄ ]ËFƒÄ ]ÃUƒì;&Zwé�ø‹ì‹F %€ ‹^ �ãÿSPÿv èþ‹åƒÄ]ÃUƒì;&Zwébø‹ì‹F…ÀyÇä¸ÿÿƒÄ]Ãÿvè‹ý‹å…À‰Fu¸ÿÿƒÄ]ËvŠD0äé ‹F=é†=€~¸€ë‹F»bS¢bè ‹åÇFÇF b0ä‹^;Ã~F‹FÿF‹ðŠ„bˆF0ä= u ÿF‹vóÆ ë#ŠF0ä=uÇFë‹FÿF‹vðŠFˆ뮸 Pèc‹å‹FƒÄ]ø�»÷‰F‰^ë ¸»<‰F‰^‹vŠ0ä%t-ÇF‹F;F}‹FÿF‹^؉^ÿV‹vˆëà‹FƒÄ]ÃÇF‹F;F|éÖ  ÿVˆF0ä鵸 PÿV‹å¸ PÿV‹å‹F‰F@‹vvÆ ‰FƒÄ]Ã~tº¸PÿV‹å¸ PÿV‹å¸PÿV‹åë�¸ PÿV‹å¸ PÿV‹å3ÀƒÄ]ËFÿF‹vðŠFˆ0ä= }¸^PÿV‹åŠF0ä@PÿV‹åéSÿŠF0äPÿV‹åéEÿY 6 ¾ .;„± u.ÿ¤³ ƒîyï뛋FƒÄ]Ã3ÀƒÄ]Ãÿvÿv‹vÿtèsø‹å‰Fƒ>t¸ÿÿƒÄ]ËvŠ0ä%t‹FƒÄ]Ã3À‰F‰F ‹F‹^;Ø~UÿF‹vðŠˆF0äë8‹F+FH3Û…ÀyK¹QSPÿvèF‹å‹F ƒÄ]Ãë¿‹F ÿF ‹vðŠFˆë­= t¨=t¾ëâƒ~ u ƒ~téSÿ‹F ƒÄ]øÿÿƒÄ]Ãæ ß ¬ ß ‹ðƒþsÑæ.ÿ¤£ ëÞUƒì;&Zwélõ‹ì‹F…ÀyÇä¸ÿÿƒÄ]Ãÿvè•ú‹å…À‰Fu¸ÿÿƒÄ]ËvŠD0äé�¸÷‰Fë¸d‰Fë¸<‰FÇF‹F‹^;Ø~6ÿF‹vðŠˆF0ä= u‹vŠ0ä%u ¸ PÿV‹åŠF0äPÿV‹åëÀ‹FƒÄ]ËvŠ0ä%t¸P3ÀP3ÛSÿvè‹å‹vŠ0ä%t(ÿvÿvÿtèëö‹å‰Fƒ>t¸ÿÿƒÄ]ËFƒÄ]ÃÆF3À‰F‰F‰F ‹F‹^;Ø~pÿF‹vðŠˆF0ä= uŠF0ä= tÆF ÿN‹F‰F@‹vŠ^ˆœb=€‰Fˆ^|µP¸bP‹vÿtègö‹å‰F ƒ>t‹FƒÄ]ËF F ÇF놃~t!ÿv¸bP‹vÿtè0ö‹å‰F ƒ>tÇF ‹FƒÄ]ËFƒÄ]ÃÇä¸ÿÿƒÄ]Ãf   p ‹ðƒþsÑæ.ÿ¤† ëØUƒì ;&Zwé‰ó‹ìÿvèÇø‹å…À‰Fu ¸ÿÿ»ÿÿƒÄ ]ËvŠD0ä…Àt 3À3ÛƒÄ ]Ãÿvÿvÿv‹vÿtè¶õ‹å‰F‰^ƒ>tÇä¸ÿÿ»ÿÿƒÄ ]ËF‹^ƒÄ ]ÃUƒì;&Zwéó‹ìÿv èLø‹å…À‰Fu¸ÿÿƒÄ]Ã3À‹vŠ\0ÿ…Û‰Fuÿtèùô‹åƒ>tÇFÿÿ‹vÆ‹FƒÄ]ÃU‹ìÿvèMõ‹åƒ>t¸ÿÿ]Ã3À]ÃUƒì;&Zwéšò‹ì¸Pè{‹åˆF„Àt0äƒÄ]øPèd‹åƒÄ]ÃUƒì;&Zwéfò‹ì¸PèG‹åˆF„Àt0äƒÄ]øPè0‹åƒÄ]ÃUƒì;&Zwé2ò‹ìŠF0äP¸Pè ‹åŠF0äƒÄ]ÃUƒì;&Zwé ò‹ì¸Pèë‹åƒÄ]ÃUƒì;&Zwéíñ‹ìŠF0äP¸PèÈ‹åŠF0äƒÄ]ÃUƒì;&ZwéÅñ‹ìŠF0äP¸Pè ‹åŠF0äƒÄ]ÃUƒì;&Zwé�ñ‹ì‹v ŠD0ä%0t¸ÿÿƒÄ]Ëv ƒ| uŠD0ä%uV轋å…Àt¸ÿÿƒÄ]Ëv ŠD0ä%tÇFë)‹v ŠD0ä%t¸ÿÿƒÄ]Ëv ŠD0ä ˆD‹D ‰F‹v ŠD 0äÿvÿtPè£ø‹å…À‰Fy‹v ŠD0ä ˆDƒ~u‹v ŠD0ä ˆD‹F…À~ ‹v ‰D‹D‰‹v ŠD0ä%0t¸ÿÿƒÄ]Ëv ‹DH‰D…Àx ‹ÿ‹øŠ0ÿë ÿv èöþ‹å‹Ø‹ÃƒÄ]ÃUƒì ;&Zwéˆð‹ì‹F‹vŠ\0ÿ�ã0‰Ft¸ÿÿƒÄ ]Ëvƒ| u[ŠD0ä%uQVè¡‹å…Àt¸ÿÿƒÄ ]ËvŠD0ä ˆD‹D ‰DH‰D…Àx‹ÿ‹^‹øˆ0ÿë ÿvÿvè|ÿ‹å‹Ø‹ÃƒÄ ]ËvŠD0ä%t8ƒ~ÿu3ÀƒÄ ]ËF‹vŠ\ 0ÿÇF ÿv �NQSˆFèUú‹åÇFÿÿ‰F郋vŠD0ä%t¸ÿÿƒÄ ]ËvŠD0ä ˆDƒ~ÿt2ƒ|~,‹DH‰D…Àx‹ÿ‹^‹øˆ0ÿë ÿvÿvèÚþ‹å‹ØÇFÿÿ‹v‹+D‰F tŠD 0äÿv ÿtPèÑù‹å‰FëÇFƒ~ÿu‹vŠD0ä ˆDë‹F;F t‹vŠD0ä ˆD‹v‹D ‰D‹D‰‹F=ÿÿt ‹\K‰\…Ûx ‹ÿˆ0äë ÿvÿvèIþ‹å‹vŠD0ä%0t¸ÿÿƒÄ ]Ã~ÿu3ÀƒÄ ]ËFƒÄ ]ÃUƒì;&Zwé¥î‹ì‹vƒ| tŠD0ä%u3ÀƒÄ]Ãÿ6òèF‹å‹v‰‰D…ÀuÇä ¸ÿÿƒÄ]áò‹v‰D ŠD0ä%óÿˆD3À‰D‰DƒÄ]ÃU‹ì‹V´ Í!]ÃUƒì;&Zwé,î‹ì¡è‹ê…Û£ì‰îu¸ÿÿƒÄ]Ë6ì3À‰¡î‰D3ÀƒÄ]ÃUƒì;&Zwéîí‹ì3ÀPè‹åƒÄ]ÃUƒì;&ZwéÒí‹ì‹F …Ày¸ÿÿƒÄ]ÃÇèÇêÇF3ÀP»S袋å…À‰Fu¸ÿÿƒÄ]ËF‹^£è‰ê‹F H‰F …Àt3ÀP»Sèo‹å…Àt ‹FêëÜè(ÿ3ÀƒÄ]ÃUƒì;&ZwéMí‹ì¡îÑàÑà3Û“ƒÄ]ÃUƒì;&Zwé/í‹ì‹F 3ÛSP‰F‰^è‹åƒÄ]ÃUƒì;&Zwé í‹ì‹F‹^3É3ÒèM3ÀƒÄ]ËF‹^ƒÓ-ƒÛ‰F‹Ã‹^3ɺèo¾ì‹ ‰F‰N‰^ ‰vƒ~tb‹v‹D3Û‰F‹Ã‰^‹^‹N‹V èï|5;Áu;Úu ‹‹v‰ë‹F ‹v‹\+؉\ÑãÑã^‹F )î‹FƒÄ]ËF‹ð‹‰F‰^똹‹F‹^ ÑãÑÐâúPSè>‹å‰F …Àt9ƒ>êu ‹^ £è‰êë¡êÑàÑà‹èØ‹F ;É^u‹F ê‹F ƒÄ]Ã3ÀƒÄ]ÃUƒì;&Zwéìë‹ì‹F3ÛSPÿv ‰F‰^è‹åƒÄ]ÃUƒì;&ZwéÃë‹ì‹F‹^3É3Òè¸ÿÿƒÄ]ËF‹^ƒÃ‹NƒÑƒëƒÙ‰F ‹Á3ɺè(‰^ÑãÑã‹N Ë‹^î¾ì‹‰F‰N‰^‰v‹F…ÀuéÚ‹ð‹\ÑãÑãØ‹N;ȉ^s‹v ‰‹F‰D‹Æ‹v‰3ÀƒÄ]ËF;Fu)‹ð‹‹~ ‰‹D3Û‹NÈ‹VÓ‰M‹Ç‹v‰3ÀƒÄ]ËF ;Fs‹F)î¸ÿÿƒÄ]ËF ;FuF‹v‹…Àt‹^;Øv‹F)î¸ÿÿƒÄ]ËF‹vD‹…Àt‹^;Øu ‹GD‹‰3ÀƒÄ]ËF‹^‹ð‹ ‰F‰N‰^ éÿ‹F ‹v‰3Û‹ð‰‹F‰D‹ÃƒÄ]ÃUƒì;&ZwéXê‹ì‹v Š0ä‹vŠ0ÿ;ØuŠ0ä…Àu3ÀƒÄ]ÃÿFÿF ë׋v Š0ä‹vŠ0ÿ+؋ÃÄ]ÃU‹ìŠfŠF‹VÍ!´]ÃUƒì;&Zwé÷é‹ì‹F ‹^‹^‹\è7~3ÀƒÄ]áZ‹^Z)\‹N ^‰FƒÄ]ÃUƒì;&Zwé±é‹ì‹F 3ÛSPè¡ÿ‹å‰F…ÀtƒÄ]øÿÿƒÄ]ÃUƒì;&Zwé‚é‹ì¡X‹Z+Ø3É…ÛyI\^£ZƒÄ]ÃUƒì‹ì‰N Êu3À3Û隉F Ãu3É3Ò錋N‹F‹ð…öy÷Ð÷Ûÿÿy 3À3É3Òëo�3ñ‰v3ö…Éy÷Ñ÷ÚƒÙÿu…Òx¿ ÑãÑÐÑÖ;òr+òCOuð3É‹Öë!¿ÑãÑÐÑÖ;ñr u;Âr+ÂñCOuè‹Î‹Ð3À÷F€t÷Ð÷Ûÿÿ÷F€t÷Ñ÷ÚƒÙÿƒÄ]ÃP3ÁXPx+Áu3À;ÚtwHë ÿ…ÀXÃU‹ì‹FhË˴͆àP‹ÄP‹n‹F‹^‹N‹V‹v‹~ Ž^ ŽFU‹ìÿ^]PœX‰FXƒÄ‰F‰^‰N‰V‰v‰~ Œ^ ŒF]ÃŒØÃŒÈÃŒÀÃUƒì;&Zwéè‹ìŠF0ä�^S»ïS‰Fèyÿ‹åƒÄ]ÃUƒì;&Zwéõç‹ìÇF�FP¸ïPèSÿ‹å‹F‹v‰‹F‹vˆƒÄ]ÃUƒì;&Zwé¿ç‹ìÇF�FP¸ïPèÿ‹å‹F‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zwé�ç‹ìÇF�FP¸ïPèßþ‹åƒÄ]ÃUƒì;&Zwé[ç‹ìÇF‹F�^S»ïS‰Fè³þ‹åƒÄ]ÃUƒì;&Zwé/ç‹ìÇF�FP¸ïPè�þ‹å‹FƒÄ]ÃUƒì;&Zwéç‹ìÇF‹F‹^‹N‹V‰F�FP¸ïP‰N‰V‰^èLþ‹åƒÄ]ÃUƒì;&ZwéÈæ‹ìÇF�FP¸ïPè&þ‹å‹F‹v‰‹F‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zw邿‹ìÇF‹F‹^‹N‹V‰F�FP¸ïP‰N‰V‰^ èÈý‹åƒÄ]ÃUƒì;&ZwéDæ‹ìÇF�FP¸ïPè¢ý‹å‹F‹v‰‹F ‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zwéþå‹ìÇF‹F�^S»ïS‰FèVý‹åƒÄ]ÃUƒì;&ZwéÒå‹ìÇF�FP¸ïPè0ý‹å‹FƒÄ]ÃUƒì;&Zwé©å‹ìÇF�FP¸ïPèý‹å‹F‹vˆ‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zwékå‹ìŠF0ä‹^‰F‰^è!ý�^S»ïS‰Fè·ü‹å‹FƒÄ]ÃUƒì;&Z   wé0å‹ìÇF‹F‰Fèìü�^S»ïS‰Fè‚ü‹åƒÄ]ÃUƒì;&Zwéþä‹ìŠF0ä‹^"‹N‹V‰F‰N‰V‰^è¨ü‹^‹N �VRºïR‰F‰N ‰^ è2ü‹åƒÄ]ÃUƒì;&Zwé®ä‹ìŠF0ä ‹^ ‹N‹V‰F‹F‰F ‰N‰V ‰^èRü�^S»ïS‰Fèèû‹åƒÄ]ÃUƒì;&Zwédä‹ìÇF‹F�^S»ïS‰Fè¼û‹åƒÄ]ÃUƒì;&Zwé8ä‹ìŠF0ä ‹^‹N‹V‰F‰N‰V‰^èâû�^S»ïS‰Fèxû‹åƒÄ]ÃUƒì;&Zwéôã‹ìÇF ‹F‹^‰F‰^èªû‹^�NQ¹ïQ‰F‰^è:û‹å‹F‹vˆƒÄ]ÃUƒì;&Zwé®ã‹ìŠF0ä ‹^ŠN0í‰N±‹VÓâ‹N‰F‹F ‰F ‹F"‰F‰N ‰V‰^è@û�^S»ïS‰FèÖú‹åƒÄ]ÃUƒì;&ZwéRã‹ìŠF0ä ‹^ŠN0í‰N±‹VÓâŠN&0íÑ‹N ‰F‹F"‰F‹F$‰F‰N ‰V ‰^èÝú�^S»ïS‰Fèsú‹åƒÄ]ÃUƒì;&Zwéïâ‹ìŠF0ä‹^ŠN0í‰N±‹VÓâŠN 0íÑ‹N"‰F‹F$‰F‹F&‰F‰N ‰V ‰^èzú�^S»ïS‰Fèú‹åƒÄ]ÃUƒì;&ZwéŒâ‹ìŠF0ä‹^ŠN0í‰N±‹VÓâŠN 0íÑ‹N"‰F‹F$‰F‹F&‰F‰N ‰V ‰^èú�^S»ïS‰Fè­ù‹åƒÄ]ÃUƒì;&Zwé)â‹ìŠF0ä‹^ŠN0í‰N±‹VÓâ‹N‰F‹F ‰F ‹F"‰F‰N ‰V‰^è»ù�^S»ïS‰FèQù‹åƒÄ]ÃUƒì;&ZwéÍá‹ìÇF‹F‰Fè‰ù�^S»ïS‰Fèù‹åƒÄ]ÃUƒì;&Zwé›á‹ìÇF �FP¸ïPèùø‹å‹F‹v‰‹F‰ƒÄ]ÃUƒì;&Zwéhá‹ìŠF0ä!‹^(ŠN0í‰N±‹VÓâŠN0íÑŠN 0í‰N±‰F‹FÓàŠN"0íÁ‹N$‰F ‹F&‰F‰N ‰V‰^èàø�^S»ïS‰Fèvø‹åƒÄ]ÃUƒì;&Zwéòà‹ìŠF0ä"�^S»ïS‰FèJø‹åƒÄ]ÃUƒì;&ZwéÆà‹ìÇF#�FP¸ïPè$ø‹å‹FƒÄ]ÃUƒì;&Zwé�à‹ìÇF%�FP¸ïPèû÷‹å‹F‹v‰‹F ‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zwé_à‹ìÇFŠF0ä±ÓàŠ^0ÿŠN0í‰N±‹VÓâÓ�NQ¹Q‰F‰V ‰^è•÷‹åƒÄ]ÃUƒì;&Zwéà‹ìÇFŠF0ä±Óà�^S»S‰Fèc÷‹å‹F%ÿ±Óø‹vˆ‹F%ÿ‹vˆƒÄ]ÃUƒì;&ZwéÅß‹ìŠF0ä ‹^‹N�VRºR‰F‰N‰^è÷‹åƒÄ]ÃUƒì;&Zwé�ß‹ìÇF ‹F‹^�NQ¹Q‰F‰^èßö‹å‹F%ƒÄ]ÃUƒì;&ZwéUß‹ìŠF0äŠ^0ÿ±ÓãŠN0íÙ�NQ¹Q‰F‰^èšö‹åƒÄ]ÃUƒì;&Zwéß‹ìŠF0ä Š^0ÿ±ÓãŠN0íÙ‹N �VRºR‰F‰N‰^èUö‹åƒÄ]ÃUƒì;&ZwéÑÞ‹ìÇF�FP¸Pè/ö‹å‹F%ÿ±Óø‹vˆ‹F%ÿƒÄ]ÃUƒì;&Zwé–Þ‹ìÇF�FP¸Pèôõ‹å‹F%@t3ÀƒÄ]øƒÄ]ÃUƒì;&Zwé^Þ‹ìÇF�FP¸Pè¼õ‹å‹F%ÿƒÄ]ÃLattice C 2.00Invalid stack size $Invalid I/O redirection $Insufficient memory $*** STACK OVERFLOW *** $ ((((( H„„„„„„„„„„������‚‚‚‚‚‚ ((((( H„„„„„„„„„„������‚‚‚‚‚‚ con:CON:prn:PRN:lst:LST:lpt:LPT:lpt1:LPT1:aux:AUX:com:COM:com1:COM1:rdr:RDR:pun:PUN:nul:NUL:null:NULL:OQñÿöent color index */ } x_org = 0; /* set display origin to (0,0) */ y_org = 0; lines(0,7,15,x_org,y_org,&outlines,0); /* draw white outline around colors */ getkey(&dummy); /* wait for user to press any key */ setmode(3); /* set MINDSET mode 640x200x4 color */ setibmmode(2); /* set IBM character mode w/ cursor */ exit(); } /* end of COLOR0.C */ setibmmode(video_mode) /* set IBM video display mode */ int video_mode;  /* argument for BIOS call */ { struct regs myregs; /* structure from CUSER.INC */ myregs.ax = video_mode; /* set 80186 register AX = mode*/ callbios(i_io_int, &myregs); /* actual call to BIOS */ return; } COPYRT ASM b!:CALLBIOSASM ¼Š-<ÙCALLDOS ASM uñ@¤BLTCHAR OBJ ‰R¢BMBLTCHAR ASM ·F“C€EVB OBJ &mX H"EVB ASM òU°I€SETBLOCKASM c]HLÉ  /* dc.c - changes foreground/background colors of screen display use: Invoking dc will result in display of white characters on a black background. To adjust foreground(character) and background colors, use cursor arrow keys (up/down, left/right). When the desired foreground/background color combination is displayed, press the key to exit dc, and set these colors. cursor keys: up/down - depressing one of these keys causes color index to increase/decrease index in 16 color palette. Selected color will be displayed as foreground/ background color (see left/right keys). left/right - depressing one of these keys causes background/ foreground(character) colors to be affected by up/down keys. These keys act as toggles, pressing the key causes all subsequent up/down colors to display as background/foreground. */ #include #define black 0x0000 + 0000 /* 16 color palette */ #defin/* COLOR1.C - program to display 16x16 combinations of 2-colors dithered */ /* Pressing any key when colors displayed exits program. */ #include /* define RGB/composite color bits */ #define black 0x0000 + 0000 #define dkblue 0x1000 + 0500 #define dkgreen 0x2000 + 0050 #define dkcyan 0x3000 + 0550 #define dkred 0x4000 + 0005 #define dkmagent 0x5000 + 0505 #define dkyellow 0x6000 + 0055 #define dkwhite 0x7000 + 0555 #define dkgray 0x8000 + 0222 #define blue 0x9000 + 0700 #define green 0xa000 + 0070 #define cyan 0xb000 + 0770 #define red 0xc000 + 0007 #define magenta 0xd000 + 0707 #define yellow 0xe000 + 0077 #define white 0xf000 + 0777 /******************************** C O L O R 1 . C ***************************/ main() { /* define integer variables */ int dummy, x_org, y_org,x_inc,y_inc,ecolor,ocolor; static int palette[16] = { black, dkgray, dkwhite, white, dkblue, blue, dkcyan, cyan, dkgreen, green, dkmagent, magenta, dkred, red, dkyellow, yellow }; /* define MINDSET color palette */ static struct xypair square[] = { { 0, 0}, { 18, 0}, { 18, 11}, { 0, 11}, }; /* define color block size */ static struct xypair outlines[] = { { 18, 11}, { 306, 11}, { 306, 187}, { 18, 187}, { 18, 11} }; /* define outline points */ set_screen_mode(2); /* MINDSET mode=2 320x200x16 colors */ fill_dest_buffer(0); /* erase display with black pixels */  set_palette(0, 0, 16, &palette, data_seg()); /* set up 16 color palette */ x_org = 0; /* origin = (0,0), upper left screen*/ y_org = 0; x_inc = 18; /* incremental step sizes for x,y */ y_inc = 11; x_org = x_inc; /* draw ecolor bar at top of screen */ for(ecolor = 0; ecolor < 16; ecolor++) { blt_polygon(0,4,ecolor,ecolor,x_org+(x_inc*ecolor),y_org, &square, data_seg()); /* id, count, evencolor, oddcolor, x0, y0, data */ } x_org = 0; y_org = y_inc; /* draw ocolor bar on left side */ for(ocolor = 0; ocolor < 16; ocolor++) { blt_polygon(0,4,ocolor,ocolor,x_org,y_org+(y_inc*ocolor), &square, data_seg()); /* id, count, evencolor, oddcolor, x0, y0, data */ } x_org = x_inc; /* draw 2-color dithered blocks */ for(ecolor = 0; ecolor < 16; ecolor++) { for(ocolor = 0; ocolor < 16; ocolor++) { blt_polygon(0,4,ecolor,ocolor,x_org+(x_inc*ecolor), y_org+(y_inc*ocolor),&square,data_seg()); /* id, count, evencolor, oddcolor, x0, y0, data */ } } x_org = 0; /* set display origin to (0,0) */ y_org = 0; blt_polyline(0,0,7,3,x_org,y_org,&outlines,data_seg()); /* draw white outline around colors */ get_kb_char(&dummy); /* wait for user to press a key */ set_screen_mode(3); /* set MINDSET mode 640x200x4 colors*/ set_ibm_mode(2); /* set IMZ  ÿÿŠ w Û     ú¸6ŽØ¸ŠŽÐ¼û¸@£ŒV&¡,£b¾€&Š 2íãF&Š<=t< t< uIí3ÉëD�3ÛIt.F&Š< t&< t",0|(< $Ûr ‹ÓÛrÛrÚr2äØr ëÏ Ût‰뻺d馋ÑëÛ�ûw»‰&‹ŒØ+Ð÷Âðu ÑâÑâÑâÑâë�ºðÿ¡Ãr;Ðwº“ëd�‰úŒØŽÐ‹âû‹Ñ¡£X£Z‹+Ø+r׉\3ÀP‹ì‹Ú‹ÊƒÃ�ãþÿ+ã‹ü6ÆcGã6Æ G&Š6ˆFGâö6Æ‹ÄPèd¸LÍ!´ Í!¸LÍ!¡-‹àº©´ Í!¸LÍ!‹ì‹F´LÍ!Uƒì ;&ZwéÖÿ‹ì¸Pè ‹å3ÀPèR‹å¸ÂP3ÀP¸P3ÀPèk‹å3À‰F‰F ‰Fƒ~d}7ÇF�~@}%¸âPÿvÿvÿvÿv¸P3ÀPè{‹åÿFƒF(ëÔƒF2ëÃ3ÀP»òSPP»S»SP‰F‰Fèì‹å�FPèÉ ‹å¸Pè‹å¸Pè ‹åè,ƒÄ ]ÃUƒì;&Zwéÿ‹ì‹F�^S»S‰Fèš‹åƒÄ]ÃUƒì;&Zwéôþ‹ìÇF‹F=}»÷ëVPè‹åÿFëåÇFƒ~} ÿvè ‹åÿFëíÿv ÿvèí‹åƒÄ]ÃUƒì;&Zwé�þ‹ìǃ> }n‹v Š0ä@‹øŠ…T0ä%tÿF ëæ‹v Š0ä…ÀtI¡ÿÑà‹ð‹F ‰„‹v Š0ä…À‰Ft@‹øŠ…T0ä%uÿF ëß‹v ŠÿF ƈF0ä…Àu�ëÆ_°³ÆzÆnÀÇt± ÇxºR¢m¢^ˆvˆrˆ{ˆlè‹å%€t  l0ä ¢l¸Pÿ6èâý‹å3ÀPè¼þ‹åƒÄ]ÃU‹ìÇR‹V‹N´<Í!s£R]ÃU‹ìÇR‹V‹F´=Í!s£R]ÃU‹ìÇR‹^´>Í!s£R]ÃU‹ìÇR‹^‹N‹V´?Í!s£R3À]ÃU‹ìÇR‹^‹N‹V´@Í!s£R3À]ÃU‹ìÇR‹F ´B‹^‹N‹VÍ!s£R‹Ø‹Â]ÃU‹ìÇR‹V´AÍ!s£R]ÃU‹ìÇR‹V‹F´C‹NÍ!s£R‹Á]ÃU‹ì‹^¸DÍ!‹Â]ÃU‹ìÿvÿvèÌü‹å]ÃUƒì;&Zwé§ü‹ì¸V‰F¸n‹^;ØsŠG0ä…ÀtƒFëç‹F=nu3ÀƒÄ]Ãÿvÿv ÿv è‹åƒÄ]ÃUƒì ;&ZwéWü‹ì‹vŠD„Àt0ä%t V¸ÿÿPè ‹å‹vŠD 0äPèv ‹å‹vŠD0ä=+t3Ûë3ÛCŠ0äˆ^ éì¡< ‰F‚~ t¸ë¸‹^ Ø�˸¤PSÿvèÔ‹å‰F@u3ÀƒÄ ]øP3ÀP3ÛSÿvè‘‹å‚~ t¸€ë¸‰F飂~ t¸ë3À‹< ØSÿvè…‹å‰F@u3ÀƒÄ ]Â~ t¸€ë¸‰Fëg‚~ t¸ë¸‹< Ø�Ë�˸¤PSÿvè<‹å‰F@u3ÀƒÄ ]Â~ t¸€ë¸‰Fë3ÀƒÄ ]Ã=wt«=ruégÿ=auéÿþëâ‹FÑàÑà‹ð‚¼ot�N‹F ‹v‰Dë‹vÇD‹F‹vˆD ‹D‰3À‰D‰D‰D ‹FˆD‹ÆƒÄ ]ÃUƒì;&Zwé­ú‹ì‹vŠD0ä%t V¸ÿÿPèd ‹å‹vŠD0ä% uƒ| t ÿt ÿtèâ‹å3À‹v‰D‰D ÆDŠD 0äP見åƒÄ]ÃUƒì;&ZwéJú‹ì‹F…Àx=}ÑàÑà‹ðŠ„n0ä%€u Ç0 3ÀƒÄ]ËFÑàÑànƒÄ]ÃUƒì ;&Zwéú‹ìÇF‹F=}ÑàÑà‹ðŠ„n0ä…ÀtÿFëãƒ~uÇ0¸ÿÿƒÄ ]ËFÑàÑàn‹ð¡2%€‹^3ÉF%€‰vt¸ë3À €‹vˆ‹F%ëO‹vŠ0ä @ˆëR‹F%t¸ë3À ‹vŠ0ÿ ؈ë3‹vŠ0ä `ˆë%‹vÆÇ0¸ÿÿƒÄ ]Ã=tÙ=tµ=t¢ëÛ‹vŠ0ä…Àu‹vÆD‹FƒÄ ]ÃÇF‹F=}7» ÷ë¾@Pÿvèø‹å…Àu‹F» ÷ë‹ðŠ„¾‹~ˆE‹FƒÄ ]ÃÿFëÁ‹vÆD‹F%tÿvèµû‹å‹F%Pÿvèû‹å‹v‰Dƒ>Rt4‹F%t3ÀPÿvèÙú‹å‹v‰Dƒ>Rt>Ç0‹vƸÿÿƒÄ ]ËF%=u‹vÿtèÖú‹åÇ0‹vƸÿÿƒÄ ]ËFƒÄ ]ÃUƒì;&Zwé-ø‹ì‹F %€ ‹^ �ãÿSPÿv èþ‹åƒÄ]ÃUƒì;&Zwéÿ÷‹ì‹F…ÀyÇ0¸ÿÿƒÄ]Ãÿvè‹ý‹å…À‰Fu¸ÿÿƒÄ]ËvŠD0äé ‹F=é†=€~¸€ë‹F»®S¢®è ‹åÇFÇF ®0ä‹^;Ã~F‹FÿF‹ðŠ„®ˆF0ä= u ÿF‹vóÆ ë#ŠF0ä=uÇFë‹FÿF‹vðŠFˆ뮸 Pèc‹å‹FƒÄ]øò»Z‰F‰^ë ¸‚»Ÿ‰F‰^‹vŠ0ä%t-ÇF‹F;F}‹FÿF‹^؉^ÿV‹vˆëà‹FƒÄ]ÃÇF‹F;F|éÖÿVˆF0ä鵸 PÿV‹å¸ PÿV‹å‹F‰F@‹vvÆ ‰FƒÄ]Ã~tº¸PÿV‹å¸ PÿV‹å¸PÿV‹åë�¸ PÿV‹å¸ PÿV‹å3ÀƒÄ]ËFÿF‹vðŠFˆ0ä= }¸^PÿV‹åŠF0ä@PÿV‹åéSÿŠF0äPÿV‹åéEÿ¼ ™ o o ¾ .;„ u.ÿ¤ ƒîyï뛋FƒÄ]Ã3ÀƒÄ]Ãÿvÿv‹vÿtèsø‹å‰Fƒ>Rt¸ÿÿƒÄ]ËvŠ0ä%t‹FƒÄ]Ã3À‰F‰F ‹F‹^;Ø~UÿF‹vðŠˆF0äë8‹F+FH3Û…ÀyK¹QSPÿvèF‹å‹F ƒÄ]Ãë¿‹F ÿF ‹vðŠFˆë­= t¨=t¾ëâƒ~ u ƒ~téSÿ‹F ƒÄ]øÿÿƒÄ]ÃI p B  B ‹ðƒþsÑæ.ÿ¤ ëÞUƒì;&Zwé õ‹ì‹F…ÀyÇ0¸ÿÿƒÄ]Ãÿvè•ú‹å…À‰Fu¸ÿÿƒÄ]ËvŠD0äé�¸Z‰Fë¸Ç‰F븟‰FÇF‹F‹^;Ø~6ÿF‹vðŠˆF0ä= u‹vŠ0ä%u ¸ PÿV‹åŠF0äPÿV‹åëÀ‹FƒÄ]ËvŠ0ä%t¸P3ÀP3ÛSÿvè‹å‹vŠ0ä%t(ÿvÿvÿtèëö‹å‰Fƒ>Rt¸ÿÿƒÄ]ËFƒÄ]ÃÆF3À‰F‰F‰F ‹F‹^;Ø~pÿF‹vðŠˆF0ä= uŠF0ä= tÆF ÿN‹F‰F@‹vŠ^ˆœ®=€‰Fˆ^|µP¸®P‹vÿtègö‹å‰F ƒ>Rt‹FƒÄ]ËF F ÇF놃~t!ÿv¸®P‹vÿtè0ö‹å‰F ƒ>RtÇF ‹FƒÄ]ËFƒÄ]ÃÇ0¸ÿÿƒÄ]ÃÉ f n v Ó ‹ðƒþsÑæ.ÿ¤é ëØUƒì ;&Zwé&ó‹ìÿvèÇø‹å…À‰Fu ¸ÿÿ»ÿÿƒÄ ]ËvŠD0ä…Àt 3À3ÛƒÄ ]Ãÿvÿvÿv‹vÿtè¶õ‹å‰F‰^ƒ>RtÇ0¸ÿÿ»ÿÿƒÄ ]ËF‹^ƒÄ ]ÃUƒì;&Zwé«ò‹ìÿv èLø‹å…À‰Fu¸ÿÿƒÄ]Ã3À‹vŠ\0ÿ…Û‰Fuÿtèùô‹åƒ>RtÇFÿÿ‹vÆ‹FƒÄ]ÃU‹ìÿvèMõ‹åƒ>Rt¸ÿÿ]Ã3À]ÃUƒì;&Zwé7ò‹ì¸Pè{‹åˆF„Àt0äƒÄ]øPèd‹åƒÄ]ÃUƒì;&Zwéò‹ì¸PèG‹åˆF„Àt0äƒÄ]øPè0‹åƒÄ]ÃUƒì;&ZwéÏñ‹ìŠF0äP¸Pè ‹åŠF0äƒÄ]ÃUƒì;&Zwé§ñ‹ì¸Pèë‹åƒÄ]ÃUƒì;&ZwéŠñ‹ìŠF0äP¸PèÈ‹åŠF0äƒÄ]ÃUƒì;&Zwébñ‹ìŠF0äP¸Pè ‹åŠF0äƒÄ]ÃUƒì;&Zwé:ñ‹ì‹v ŠD0ä%0t¸ÿÿƒÄ]Ëv ƒ| uŠD0ä%uV轋å…Àt¸ÿÿƒÄ]Ëv ŠD0ä%tÇFë)‹v ŠD0ä%t¸ÿÿƒÄ]Ëv ŠD0ä ˆD‹D ‰F‹v ŠD 0äÿvÿtPè£ø‹å…À‰Fy‹v ŠD0ä ˆDƒ~u‹v ŠD0ä ˆD‹F…À~ ‹v ‰D‹D‰‹v ŠD0ä%0t¸ÿÿƒÄ]Ëv ‹DH‰D…Àx ‹ÿ‹øŠ0ÿë ÿv èöþ‹å‹Ø‹ÃƒÄ]ÃUƒì ;&Zwé%ð‹ì‹F‹vŠ\0ÿ�ã0‰Ft¸ÿÿƒÄ ]Ëvƒ| u[ŠD0ä%uQVè¡‹å…Àt¸ÿÿƒÄ ]ËvŠD0ä ˆD‹D ‰DH‰D…Àx‹ÿ‹^‹øˆ0ÿë ÿvÿvè|ÿ‹å‹Ø‹ÃƒÄ ]ËvŠD0ä%t8ƒ~ÿu3ÀƒÄ ]ËF‹vŠ\ 0ÿÇF ÿv �NQSˆFèUú‹åÇFÿÿ‰F郋vŠD0ä%t¸ÿÿƒÄ ]ËvŠD0ä ˆDƒ~ÿt  2ƒ|~,‹DH‰D…Àx‹ÿ‹^‹øˆ0ÿë ÿvÿvèÚþ‹å‹ØÇFÿÿ‹v‹+D‰F tŠD 0äÿv ÿtPèÑù‹å‰FëÇFƒ~ÿu‹vŠD0ä ˆDë‹F;F t‹vŠD0ä ˆD‹v‹D ‰D‹D‰‹F=ÿÿt ‹\K‰\…Ûx ‹ÿˆ0äë ÿvÿvèIþ‹å‹vŠD0ä%0t¸ÿÿƒÄ ]Ã~ÿu3ÀƒÄ ]ËFƒÄ ]ÃUƒì;&ZwéBî‹ì‹vƒ| tŠD0ä%u3ÀƒÄ]Ãÿ6>èF‹å‹v‰‰D…ÀuÇ0 ¸ÿÿƒÄ]á>‹v‰D ŠD0ä%óÿˆD3À‰D‰DƒÄ]ÃU‹ì‹V´ Í!]ÃUƒì;&ZwéÉí‹ì¡4‹6…Û£8‰:u¸ÿÿƒÄ]Ë683À‰¡:‰D3ÀƒÄ]ÃUƒì;&Zwé‹í‹ì3ÀPè‹åƒÄ]ÃUƒì;&Zwéoí‹ì‹F …Ày¸ÿÿƒÄ]ÃÇ4Ç6ÇF3ÀP»S袋å…À‰Fu¸ÿÿƒÄ]ËF‹^£4‰6‹F H‰F …Àt3ÀP»Sèo‹å…Àt ‹F6ëÜè(ÿ3ÀƒÄ]ÃUƒì;&Zwéêì‹ì¡:ÑàÑà3Û“ƒÄ]ÃUƒì;&ZwéÌì‹ì‹F 3ÛSP‰F‰^è‹åƒÄ]ÃUƒì;&Zwé¦ì‹ì‹F‹^3É3ÒèM3ÀƒÄ]ËF‹^ƒÓ-ƒÛ‰F‹Ã‹^3ɺèo¾8‹ ‰F‰N‰^ ‰vƒ~tb‹v‹D3Û‰F‹Ã‰^‹^‹N‹V èï|5;Áu;Úu ‹‹v‰ë‹F ‹v‹\+؉\ÑãÑã^‹F ):‹FƒÄ]ËF‹ð‹‰F‰^똹‹F‹^ ÑãÑÐâúPSè>‹å‰F …Àt9ƒ>6u ‹^ £4‰6ë¡6ÑàÑà‹4Ø‹F ;É^u‹F 6‹F ƒÄ]Ã3ÀƒÄ]ÃUƒì;&Zwé‰ë‹ì‹F3ÛSPÿv ‰F‰^è‹åƒÄ]ÃUƒì;&Zwé`ë‹ì‹F‹^3É3Òè¸ÿÿƒÄ]ËF‹^ƒÃ‹NƒÑƒëƒÙ‰F ‹Á3ɺè(‰^ÑãÑã‹N Ë‹^:¾8‹‰F‰N‰^‰v‹F…ÀuéÚ‹ð‹\ÑãÑãØ‹N;ȉ^s‹v ‰‹F‰D‹Æ‹v‰3ÀƒÄ]ËF;Fu)‹ð‹‹~ ‰‹D3Û‹NÈ‹VÓ‰M‹Ç‹v‰3ÀƒÄ]ËF ;Fs‹F):¸ÿÿƒÄ]ËF ;FuF‹v‹…Àt‹^;Øv‹F):¸ÿÿƒÄ]ËF‹vD‹…Àt‹^;Øu ‹GD‹‰3ÀƒÄ]ËF‹^‹ð‹ ‰F‰N‰^ éÿ‹F ‹v‰3Û‹ð‰‹F‰D‹ÃƒÄ]ÃUƒì;&Zwéõé‹ì‹v Š0ä‹vŠ0ÿ;ØuŠ0ä…Àu3ÀƒÄ]ÃÿFÿF ë׋v Š0ä‹vŠ0ÿ+؋ÃÄ]ÃU‹ìŠfŠF‹VÍ!´]ÃUƒì;&Zwé”é‹ì‹F ‹^‹^‹\è7~3ÀƒÄ]áZ‹^Z)\‹N ^‰FƒÄ]ÃUƒì;&ZwéNé‹ì‹F 3ÛSPè¡ÿ‹å‰F…ÀtƒÄ]øÿÿƒÄ]ÃUƒì;&Zwéé‹ì¡X‹Z+Ø3É…ÛyI\^£ZƒÄ]ÃUƒì‹ì‰N Êu3À3Û隉F Ãu3É3Ò錋N‹F‹ð…öy÷Ð÷Ûÿÿy 3À3É3Òëo�3ñ‰v3ö…Éy÷Ñ÷ÚƒÙÿu…Òx¿ ÑãÑÐÑÖ;òr+òCOuð3É‹Öë!¿ÑãÑÐÑÖ;ñr u;Âr+ÂñCOuè‹Î‹Ð3À÷F€t÷Ð÷Ûÿÿ÷F€t÷Ñ÷ÚƒÙÿƒÄ]ÃP3ÁXPx+Áu3À;ÚtwHë ÿ…ÀXÃUƒì;&Zwé è‹ìŠF0ä�^S»ïS‰Fè�‹åƒÄ]ÃUƒì;&Zwé÷ç‹ìÇF�FP¸ïPèw‹å‹F‹v‰‹F‹vˆƒÄ]ÃUƒì;&ZwéÁç‹ìÇF�FP¸ïPèA‹å‹F‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zwéƒç‹ìÇF�FP¸ïPè‹åƒÄ]ÃUƒì;&Zwé]ç‹ìÇF‹F�^S»ïS‰Fè׋åƒÄ]ÃUƒì;&Zwé1ç‹ìÇF�FP¸ïP豋å‹FƒÄ]ÃUƒì;&Zwéç‹ìÇF‹F‹^‹N‹V‰F�FP¸ïP‰N‰V‰^èp‹åƒÄ]ÃUƒì;&ZwéÊæ‹ìÇF�FP¸ïPèJ‹å‹F‹v‰‹F‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zw鄿‹ìÇF‹F‹^‹N‹V‰F�FP¸ïP‰N‰V‰^ èì‹åƒÄ]ÃUƒì;&ZwéFæ‹ìÇF�FP¸ïPèÆ‹å‹F‹v‰‹F ‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zwéæ‹ìÇF‹F�^S»ïS‰Fèz‹åƒÄ]ÃUƒì;&ZwéÔå‹ìÇF�FP¸ïPèT‹å‹FƒÄ]ÃUƒì;&Zwé«å‹ìÇF�FP¸ïPè+‹å‹F‹vˆ‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zwémå‹ìŠF0ä‹^‰F‰^èE�^S»ïS‰FèÛ‹å‹FƒÄ]ÃUƒì;&Zwé2å‹ìÇF‹F‰Fè�^S»ïS‰F見åƒÄ]ÃUƒì;&Zwéå‹ìŠF0ä‹^"‹N‹V‰F‰N‰V‰^èÌ‹^‹N �VRºïR‰F‰N ‰^ èV‹åƒÄ]ÃUƒì;&Zwé°ä‹ìŠF0ä ‹^ ‹N‹V‰F‹F‰F ‰N‰V ‰^èv�^S»ïS‰Fè ‹åƒÄ]ÃUƒì;&Zwéfä‹ìÇF‹F�^S»ïS‰Fèà‹åƒÄ]ÃUƒì;&Zwé:ä‹ìŠF0ä ‹^‹N‹V‰F‰N‰V‰^è�^S»ïS‰F蜋åƒÄ]ÃUƒì;&Zwéöã‹ìÇF ‹F‹^‰F‰^è΋^�NQ¹ïQ‰F‰^è^‹å‹F‹vˆƒÄ]ÃUƒì;&Zwé°ã‹ìŠF0ä ‹^ŠN0í‰N±‹VÓâ‹N‰F‹F ‰F ‹F"‰F‰N ‰V‰^èd�^S»ïS‰Fèú‹åƒÄ]ÃUƒì;&ZwéTã‹ìŠF0ä ‹^ŠN0í‰N±‹VÓâŠN&0íÑ‹N ‰F‹F"‰F‹F$‰F‰N ‰V ‰^è�^S»ïS‰Fè—‹åƒÄ]ÃUƒì;&Zwéñâ‹ìŠF0ä‹^ŠN0í‰N±‹VÓâŠN 0íÑ‹N"‰F‹F$‰F‹F&‰F‰N ‰V ‰^èž�^S»ïS‰Fè4‹åƒÄ]ÃUƒì;&ZwéŽâ‹ìŠF0ä‹^ŠN0í‰N±‹VÓâŠN 0íÑ‹N"‰F‹F$‰F‹F&‰F‰N ‰V ‰^è;�^S»ïS‰FèÑ‹åƒÄ]ÃUƒì;&Zwé+â‹ìŠF0ä‹^ŠN0í‰N±‹VÓâ‹N‰F‹F ‰F ‹F"‰F‰N ‰V‰^èß�^S»ïS‰Fèu‹åƒÄ]ÃUƒì;&ZwéÏá‹ìÇF‹F‰Fè­�^S»ïS‰FèC‹åƒÄ]ÃUƒì;&Zwé�á‹ìÇF �FP¸ïPè‹å‹F‹v‰‹F‰ƒÄ]ÃUƒì;&Zwéjá‹ìŠF0ä!‹^(ŠN0í‰N±‹VÓâŠN0íÑŠN 0í‰N±‰F‹FÓàŠN"0íÁ‹N$‰F ‹F&‰F‰N ‰V‰^è�^S»ïS‰Fèš‹åƒÄ]ÃUƒì;&Zwéôà‹ìŠF0ä"�^S»ïS‰Fèn‹åƒÄ]ÃUƒì;&ZwéÈà‹ìÇF#�FP¸ïPèH‹å‹FƒÄ]ÃUƒì;&ZwéŸà‹ìÇF%�FP¸ïPè‹å‹F‹v‰‹F ‹v‰‹F‹v‰ƒÄ]ÃU‹ì‹FhË˴͆àP‹ÄP‹n‹F‹^‹N‹V‹v‹~ Ž^ ŽFU‹ìÿ^]PœX‰FXƒÄ‰F‰^‰N‰V‰v‰~ Œ^ ŒF]ÃŒØÃŒÈÃŒÀÃUƒì;&Zwéüß‹ìÇFŠF0ä±ÓàŠ^0ÿŠN0í‰N±‹VÓâÓ�NQ¹Q‰F‰V ‰^èTÿ‹åƒÄ]ÃUƒì;&Zwé®ß‹ìÇFŠF0ä±Óà�^S»S‰Fè"ÿ‹å‹F%ÿ±Óø‹vˆ‹F%ÿ‹vˆƒÄ]ÃUƒì;&Zwébß‹ìŠF0ä ‹^‹N�VRºR‰F‰N‰^èÐþ‹åƒÄ]ÃUƒì;&Zwé*ß‹ìÇF ‹F‹^�NQ¹Q‰F‰^èžþ‹å‹F%ƒÄ]ÃUƒì;&ZwéòÞ‹ìŠF0äŠ^0ÿ±ÓãŠN0íÙ�NQ¹Q‰F‰^èYþ‹åƒÄ]ÃUƒì;&Zwé³Þ‹ìŠF0ä Š^0ÿ±ÓãŠN0íÙ‹N �VRºR‰F‰N‰^èþ‹åƒÄ]ÃUƒì;&ZwénÞ‹ìÇF�FP¸Pèîý‹å‹F%ÿ±Óø‹vˆ‹F%ÿƒÄ]ÃUƒì;&Zwé3Þ‹ìÇF�FP¸Pè³ý‹å‹F%@t3ÀƒÄ]øƒÄ]ÃUƒì;&ZwéûÝ‹ìÇF�FP¸Pè{ý‹å‹F%ÿƒÄ]ÃLattice C 2.00Invalid stack size $Invalid I/O redirection $Insufficient    memory $*** STACK OVERFLOW *** $@( h1@EQ-`mq’€À‘8 ø±ÀÇÑ?àÿñ((22??dd2?2 ((((( H„„„„„„„„„„������‚‚‚‚‚‚ ((((( H„„„„„„„„„„������‚‚‚‚‚‚ con:CON:prn:PRN:lst:LST:lpt:LPT:lpt1:LPT1:aux:AUX:com:COM:com1:COM1:rdr:RDR:pun:PUN:nul:NUL:null:NULL:Àmàoq s@u`w€y {À}à� ƒ@…`‡€‰ ÿŸ ªàÿÿÿ‘� “@ •ðÿ—€ ™  ›À �à Ÿ ¡ðÿ£@ ¥` ÿo ÿÿÿ«À ­à ¯ ± ÿ¯ ÿ¯ ·€ ÿ� ¼ðÿ½à ¿ Á Ã@ Å` ÿ¯ ËðÿÎ� ÿÿ é Ñ Ó@ Õ` ×€ ç° âÀ Ýà ÿÿ?æ€å`ÿŸÿÏÿÿÿîöðÿñPÿÿÿÿ¯÷€üpû þð!Aa� ÿÏñÿ!ÿOaAÿ¿Ááÿ!!#Q+ñÿ'ñÿ*ñÿ,Q-á/1!3Aÿo71ÿ¯>ñÿ?ñÿA!ÿ_ÿoG‘ÿ¯KÁMáOQñÿBM character mode w/cursor */ exit(); } /* exit COLOR1.C */ setibmmode(video_mode) /* set IBM video display mode */ int video_mode; /* argument for BIOS call */ { struct regs myregs; /* structure from CUSER.INC */ myregs.ax = video_mode; /* set 80186 register AX = mode*/ callbios(i_io_int, &myregs); /* actual call to BIOS */ return; } öMZø ÿÿÀ{ñ ú¸lŽØ¸ÀŽÐ¼û¸@£ŒV&¡,£b¾€&Š 2íãF&Š<=t< t< uIí3ÉëD�3ÛIt.F&Š< t&< t",0|(< $Ûr ‹ÓÛrÛrÚr2äØr ëÏ Ût‰뻺d馋ÑëÛ�ûw»‰&‹ŒØ+Ð÷Âðu ÑâÑâÑâÑâë�ºðÿ¡Ãr;Ðwº“ëd�‰úŒØŽÐ‹âû‹Ñ¡£X£Z‹+Ø+r׉\3ÀP‹ì‹Ú‹ÊƒÃ�ãþÿ+ã‹ü6ÆcGã6Æ G&Š6ˆFGâö6Æ‹ÄPèø¸LÍ!´ Í!¸LÍ!¡-‹àº©´ Í!¸LÍ!‹ì‹F´LÍ!Uƒì;&ZwéÖÿ‹ì¸PèÍ‹å3ÀPè"‹å¸ÂP¸P3ÀPPèÛ‹å3À»ÇF ‰F‰F‰^‰^ ‹F=}*‹F ÷n‹^ظâPÿvSÿvÿv¸P3ÀPèœ ‹åÿFëÎ3À‹^ ‰F‰F‰^‹F=}*‹F ÷n‹^ظâPSÿvÿvÿv¸P3ÀPè\ ‹åÿFë΋F ÇF‰Fƒ~}EÇF‹F=}3‹F ÷n‹^Ø‹F ÷n‹NȸâPQSÿvÿv¸P3ÀPè ‹åÿFëÅÿFëµ3À»òSPP»S»SPP‰F‰FèÆ‹å�FPè‹å¸Pè§‹å¸Pè‹åè,ƒÄ]ÃUƒì;&Zwé‡þ‹ì‹F�^S»S‰Fè‹#‹åƒÄ]ÃUƒì;&Zwé`þ‹ìÇF‹F=}»÷ëJPè‹åÿFëåÇFƒ~} ÿvè ‹åÿFëíÿv ÿvè] ‹åƒÄ]ÃUƒì;&Zwé þ‹ìǃ> }n‹v Š0ä@‹øŠ…b0ä%tÿF ëæ‹v Š0ä…ÀtI¡ÿÑà‹ð‹F ‰„ ‹v Š0ä…À‰Ft@‹øŠ…b0ä%uÿF ëß‹v ŠÿF ƈF0ä…Àu�ëÆS°³ÆnÆdÀÇj± ÇnºR¢a¢Rˆlˆhˆoˆ`è ‹å%€t  `0ä ¢`¸ Pÿ6èNý‹å3ÀPè¼þ‹åƒÄ]ÃUƒì;&Zwéý‹ì¸J‰F¸b‹^;ØsŠG0ä…ÀtƒFëç‹F=bu3ÀƒÄ]Ãÿvÿv ÿv è‹åƒÄ]ÃUƒì ;&ZwéÅü‹ì‹vŠD„Àt0ä%t V¸ÿÿPè ‹å‹vŠD 0äPèv ‹å‹vŠD0ä=+t3Ûë3ÛCŠ0äˆ^ éì¡* ‰F‚~ t¸ë¸‹^ Ø�˸¤PSÿvèÔ‹å‰F@u3ÀƒÄ ]øP3ÀP3ÛSÿvè‘‹å‚~ t¸€ë¸‰F飂~ t¸ë3À‹* ØSÿvè…‹å‰F@u3ÀƒÄ ]Â~ t¸€ë¸‰Fëg‚~ t¸ë¸‹* Ø�Ë�˸¤PSÿvè<‹å‰F@u3ÀƒÄ ]Â~ t¸€ë¸‰Fë3ÀƒÄ ]Ã=wt«=ruégÿ=auéÿþëâ‹FÑàÑà‹ð‚¼et�N‹F ‹v‰Dë‹vÇD‹F‹vˆD ‹D‰3À‰D‰D‰D   ‹FˆD‹ÆƒÄ ]ÃUƒì;&Zwéû‹ì‹vŠD0ä%t V¸ÿÿPèi ‹å‹vŠD0ä% uƒ| t ÿt ÿtèÛ‹å3À‹v‰D‰D ÆDŠD 0äP見åƒÄ]ÃUƒì;&Zwé¸ú‹ì‹F…Àx=}ÑàÑà‹ðŠ„d0ä%€u Ç4 3ÀƒÄ]ËFÑàÑàdƒÄ]ÃUƒì ;&Zwépú‹ìÇF‹F=}ÑàÑà‹ðŠ„d0ä…ÀtÿFëãƒ~uÇ4¸ÿÿƒÄ ]ËFÑàÑàd‹ð¡(%€‹^3ÉF%€‰vt¸ë3À €‹vˆ‹F%ëO‹vŠ0ä @ˆëR‹F%t¸ë3À ‹vŠ0ÿ ؈ë3‹vŠ0ä `ˆë%‹vÆÇ4¸ÿÿƒÄ ]Ã=tÙ=tµ=t¢ëÛ‹vŠ0ä…Àu‹vÆD‹FƒÄ ]ÃÇF‹F=}7» ÷ë´@Pÿvèý‹å…Àu‹F» ÷ë‹ðŠ„´‹~ˆE‹FƒÄ ]ÃÿFëÁ‹vÆD‹F%tÿvè'‹å‹F%Pÿvè…‹å‹v‰Dƒ>&t4‹F%t3ÀPÿvèK‹å‹v‰Dƒ>&t>Ç4‹vƸÿÿƒÄ ]ËF%=u‹vÿtèH‹åÇ4‹vƸÿÿƒÄ ]ËFƒÄ ]ÃUƒì;&Zw雸‹ì‹F %€ ‹^ �ãÿSPÿv èþ‹åƒÄ]ÃUƒì;&Zwémø‹ì‹F…ÀyÇ4¸ÿÿƒÄ]Ãÿvè‹ý‹å…À‰Fu¸ÿÿƒÄ]ËvŠD0äé ‹F=é†=€~¸€ë‹F»¤S¢¤è› ‹åÇFÇF ¤0ä‹^;Ã~F‹FÿF‹ðŠ„¤ˆF0ä= u ÿF‹vóÆ ë#ŠF0ä=uÇFë‹FÿF‹vðŠFˆ뮸 Pèù ‹å‹FƒÄ]ø»‚‰F‰^ë ¸ª»Ç‰F‰^‹vŠ0ä%t-ÇF‹F;F}‹FÿF‹^؉^ÿV‹vˆëà‹FƒÄ]ÃÇF‹F;F|éÖÿVˆF0ä鵸 PÿV‹å¸ PÿV‹å‹F‰F@‹vvÆ ‰FƒÄ]Ã~tº¸PÿV‹å¸ PÿV‹å¸PÿV‹åë�¸ PÿV‹å¸ PÿV‹å3ÀƒÄ]ËFÿF‹vðŠFˆ0ä= }¸^PÿV‹åŠF0ä@PÿV‹åéSÿŠF0äPÿV‹åéEÿN +   ¾ .;„¦ u.ÿ¤¨ ƒîyï뛋FƒÄ]Ã3ÀƒÄ]Ãÿvÿv‹vÿtèå‹å‰Fƒ>&t¸ÿÿƒÄ]ËvŠ0ä%t‹FƒÄ]Ã3À‰F‰F ‹F‹^;Ø~UÿF‹vðŠˆF0äë8‹F+FH3Û…ÀyK¹QSPÿvèF‹å‹F ƒÄ]Ãë¿‹F ÿF ‹vðŠFˆë­= t¨=t¾ëâƒ~ u ƒ~téSÿ‹F ƒÄ]øÿÿƒÄ]ÃÛ  Ô ¡ Ô ‹ðƒþsÑæ.ÿ¤˜ ëÞUƒì;&Zwéwõ‹ì‹F…ÀyÇ4¸ÿÿƒÄ]Ãÿvè•ú‹å…À‰Fu¸ÿÿƒÄ]ËvŠD0äé�¸‚‰Fë¸ï‰Fë¸Ç‰FÇF‹F‹^;Ø~6ÿF‹vðŠˆF0ä= u‹vŠ0ä%u ¸ PÿV‹åŠF0äPÿV‹åëÀ‹FƒÄ]ËvŠ0ä%t¸P3ÀP3ÛSÿvè‹å‹vŠ0ä%t(ÿvÿvÿtè]‹å‰Fƒ>&t¸ÿÿƒÄ]ËFƒÄ]ÃÆF3À‰F‰F‰F ‹F‹^;Ø~pÿF‹vðŠˆF0ä= uŠF0ä= tÆF ÿN‹F‰F@‹vŠ^ˆœ¤=€‰Fˆ^|µP¸¤P‹vÿtèÙ‹å‰F ƒ>&t‹FƒÄ]ËF F ÇF놃~t!ÿv¸¤P‹vÿt袋å‰F ƒ>&tÇF ‹FƒÄ]ËFƒÄ]ÃÇ4¸ÿÿƒÄ]Ã[ ø  e ‹ðƒþsÑæ.ÿ¤{ ëØUƒì ;&Zwé”ó‹ìÿvèÇø‹å…À‰Fu ¸ÿÿ»ÿÿƒÄ ]ËvŠD0ä…Àt 3À3ÛƒÄ ]Ãÿvÿvÿv‹vÿtè(‹å‰F‰^ƒ>&tÇ4¸ÿÿ»ÿÿƒÄ ]ËF‹^ƒÄ ]ÃUƒì;&Zwéó‹ìÿv èLø‹å…À‰Fu¸ÿÿƒÄ]Ã3À‹vŠ\0ÿ…Û‰Fuÿtèk‹åƒ>&tÇFÿÿ‹vÆ‹FƒÄ]ÃU‹ìÿvè¿‹åƒ>&t¸ÿÿ]Ã3À]ÃU‹ìÇ&‹V‹N´<Í!s£&]ÃU‹ìÇ&‹V‹F´=Í!s£&]ÃU‹ìÇ&‹^´>Í!s£&]ÃU‹ìÇ&‹^‹N‹V´?Í!s£&3À]ÃU‹ìÇ&‹^‹N‹V´@Í!s£&3À]ÃU‹ìÇ&‹F ´B‹^‹N‹VÍ!s£&‹Ø‹Â]ÃU‹ìÇ&‹V´AÍ!s£&]ÃU‹ìÇ&‹V‹F´C‹NÍ!s£&‹Á]ÃU‹ì‹^¸DÍ!‹Â]ÃU‹ìÿvÿvèÈñ‹å]ÃUƒì;&Zwé£ñ‹ì‹v ŠD0ä%0t¸ÿÿƒÄ]Ëv ƒ| uŠD0ä%uV轋å…Àt¸ÿÿƒÄ]Ëv ŠD0ä%tÇFë)‹v ŠD0ä%t¸ÿÿƒÄ]Ëv ŠD0ä ˆD‹D ‰F‹v ŠD 0äÿvÿtPèžø‹å…À‰Fy‹v ŠD0ä ˆDƒ~u‹v ŠD0ä ˆD‹F…À~ ‹v ‰D‹D‰‹v ŠD0ä%0t¸ÿÿƒÄ]Ëv ‹DH‰D…Àx ‹ÿ‹øŠ0ÿë ÿv èöþ‹å‹Ø‹ÃƒÄ]ÃUƒì ;&ZwéŽð‹ì‹F‹vŠ\0ÿ�ã0‰Ft¸ÿÿƒÄ ]Ëvƒ| u[ŠD0ä%uQVè¡‹å…Àt¸ÿÿƒÄ ]ËvŠD0ä ˆD‹D ‰DH‰D…Àx‹ÿ‹^‹øˆ0ÿë ÿvÿvè|ÿ‹å‹Ø‹ÃƒÄ ]ËvŠD0ä%t8ƒ~ÿu3ÀƒÄ ]ËF‹vŠ\ 0ÿÇF ÿv �NQSˆFèPú‹åÇFÿÿ‰F郋vŠD0ä%t¸ÿÿƒÄ ]ËvŠD0ä ˆDƒ~ÿt2ƒ|~,‹DH‰D…Àx‹ÿ‹^‹øˆ0ÿë ÿvÿvèÚþ‹å‹ØÇFÿÿ‹v‹+D‰F tŠD 0äÿv ÿtPèÌù‹å‰FëÇFƒ~ÿu‹vŠD0ä ˆDë‹F;F t‹vŠD0ä ˆD‹v‹D ‰D‹D‰‹F=ÿÿt ‹\K‰\…Ûx ‹ÿˆ0äë ÿvÿvèIþ‹å‹vŠD0ä%0t¸ÿÿƒÄ ]Ã~ÿu3ÀƒÄ ]ËFƒÄ ]ÃUƒì;&Zwé«î‹ì‹vƒ| tŠD0ä%u3ÀƒÄ]Ãÿ66è:‹å‹v‰‰D…ÀuÇ4 ¸ÿÿƒÄ]á6‹v‰D ŠD0ä%óÿˆD3À‰D‰DƒÄ]ÃUƒì;&Zwé>î‹ì¡,‹.…Û£0‰2u¸ÿÿƒÄ]Ë603À‰¡2‰D3ÀƒÄ]ÃUƒì;&Zwéî‹ì3ÀPè‹åƒÄ]ÃUƒì;&Zwéäí‹ì‹F …Ày¸ÿÿƒÄ]ÃÇ,Ç.ÇF3ÀP»Sè{‹å…À‰Fu¸ÿÿƒÄ]ËF‹^£,‰.‹F H‰F …Àt3ÀP»SèH‹å…Àt ‹F.ëÜè(ÿ3ÀƒÄ]ÃUƒì;&Zwé_í‹ì¡2ÑàÑà3Û“ƒÄ]ÃUƒì;&ZwéAí‹ì‹F 3ÛSP‰F‰^è‹åƒÄ]ÃUƒì;&Zwéí‹ì‹F‹^3É3Òè²3ÀƒÄ]ËF‹^ƒÓ-ƒÛ‰F‹Ã‹^3ɺèÔ¾0‹ ‰F‰N‰^ ‰vƒ~tb‹v‹D3Û‰F‹Ã‰^‹^‹N‹V èT|5;Áu;Úu ‹‹v‰ë‹F ‹v‹\+؉\ÑãÑã^‹F )2‹FƒÄ]ËF‹ð‹‰F‰^똹‹F‹^ ÑãÑÐâúPSè‹å‰F …Àt9ƒ>.u ‹^ £,‰.ë¡.ÑàÑà‹,Ø‹F ;É^u‹F .‹F ƒÄ]Ã3ÀƒÄ]ÃUƒì;&Zwéþë‹ì‹F3ÛSPÿv ‰F‰^è‹åƒÄ]ÃUƒì;&ZwéÕë‹ì‹F‹^3É3Òèl¸ÿÿƒÄ]ËF‹^ƒÃ‹NƒÑƒëƒÙ‰F ‹Á3ɺè�‰^ÑãÑã‹N Ë‹^2¾0‹‰F‰N‰^‰v‹F…ÀuéÚ‹ð‹\ÑãÑãØ‹N;ȉ^s‹v ‰‹F‰D‹Æ‹v‰3ÀƒÄ]ËF;Fu)‹ð‹‹~ ‰‹D3Û‹NÈ‹VÓ‰M‹Ç‹v‰3ÀƒÄ]ËF ;Fs‹F)2¸ÿÿƒÄ]ËF ;FuF‹v‹…Àt‹^;Øv‹F)2¸ÿÿƒÄ]ËF‹vD‹…Àt‹^;Øu ‹GD‹‰3ÀƒÄ]ËF‹^‹ð‹ ‰F‰N‰^ éÿ‹F ‹v‰3Û‹ð‰‹F‰D‹ÃƒÄ]ÃU‹ì‹V´ Í!]ÃUƒì;&Zwé^ê‹ì‹v Š0ä‹vŠ0ÿ;ØuŠ0ä…Àu3ÀƒÄ]ÃÿFÿF ë׋v Š0ä‹vŠ0ÿ+؋ÃÄ]ÃUƒì;&Zwéê‹ì¸Pèç‹åˆF„Àt0äƒÄ]øPèЋåƒÄ]ÃUƒì;&ZwéÛé‹ì¸P賋åˆF„Àt0äƒÄ]øP蜋åƒÄ]ÃUƒì;&Zwé§é‹ìŠF0äP¸Pèy‹åŠF0äƒÄ]ÃUƒì;&Zwéé‹ì¸PèW‹åƒÄ]ÃUƒì;&Zwébé‹ìŠF0äP¸Pè4‹åŠF0äƒÄ]ÃUƒì;&Zwé:é‹ìŠF   0äP¸Pè ‹åŠF0äƒÄ]ÃU‹ìŠfŠF‹VÍ!´]ÃUƒì‹ì‰N Êu3À3Û隉F Ãu3É3Ò錋N‹F‹ð…öy÷Ð÷Ûÿÿy 3À3É3Òëo�3ñ‰v3ö…Éy÷Ñ÷ÚƒÙÿu…Òx¿ ÑãÑÐÑÖ;òr+òCOuð3É‹Öë!¿ÑãÑÐÑÖ;ñr u;Âr+ÂñCOuè‹Î‹Ð3À÷F€t÷Ð÷Ûÿÿ÷F€t÷Ñ÷ÚƒÙÿƒÄ]ÃP3ÁXPx+Áu3À;ÚtwHë ÿ…ÀXÃUƒì;&Zwé0è‹ì‹F ‹^‹^‹\èÃÿ~3ÀƒÄ]áZ‹^Z)\‹N ^‰FƒÄ]ÃUƒì;&Zwéêç‹ì‹F 3ÛSPè¡ÿ‹å‰F…ÀtƒÄ]øÿÿƒÄ]ÃUƒì;&Zwé»ç‹ì¡X‹Z+Ø3É…ÛyI\^£ZƒÄ]ÃUƒì;&ZwéŒç‹ì‹F�^S»S‰Fè� ‹åƒÄ]ÃUƒì;&Zwéeç‹ìÇFŠF0ä±ÓàŠ^0ÿŠN0í‰N±‹VÓâÓ�NQ¹Q‰F‰V ‰^èB ‹åƒÄ]ÃUƒì;&Zwéç‹ìÇFŠF0ä±Óà�^S»S‰Fè ‹å‹F%ÿ±Óø‹vˆ‹F%ÿ‹vˆƒÄ]ÃUƒì;&ZwéËæ‹ìŠF0ä Š^0ÿ±ÓãŠN0íÙ‹N �VRºR‰F‰N‰^è± ‹åƒÄ]ÃUƒì;&Zw醿‹ìŠF0ä Š^0ÿ±ÓãŠN0íÙ‹N �VRºR‰F‰N‰^èl ‹åƒÄ]ÃUƒì;&ZwéAæ‹ìŠF0ä ‹^‹N�VRºR‰F‰N‰^è4 ‹åƒÄ]ÃUƒì;&Zwé æ‹ìÇF ‹F‹^�NQ¹Q‰F‰^è ‹å‹F%ƒÄ]ÃUƒì;&ZwéÑå‹ìŠF0äŠ^0ÿ±ÓãŠN0íÙ�NQ¹Q‰F‰^è½ ‹åƒÄ]ÃUƒì;&Zwé’å‹ìÇF�FP¸Pè— ‹å‹F%ÿ±Óø‹vˆ‹F%ÿƒÄ]ÃUƒì;&ZwéWå‹ìÇF�FP¸Pè\ ‹å‹F%@t3ÀƒÄ]øƒÄ]ÃUƒì;&Zwéå‹ìÇF�FP¸Pè$ ‹å‹F%ÿƒÄ]ÃUƒì;&Zwéóä‹ìŠF0ä�^S»ïS‰Fèõ ‹åƒÄ]ÃUƒì;&ZwéÊä‹ìÇF�FP¸ïPèÏ ‹å‹F‹v‰‹F‹vˆƒÄ]ÃUƒì;&Zwé”ä‹ìÇF‹F�^S»ïS‰Fè“ ‹åƒÄ]ÃUƒì;&Zwéhä‹ìÇF�FP¸ïPèm ‹å‹FƒÄ]ÃUƒì;&Zwé?ä‹ìÇF‹F‹^‹N‹V‰F�FP¸ïP‰N‰V‰^è, ‹åƒÄ]ÃUƒì;&Zwéä‹ìÇF�FP¸ïPè ‹å‹F‹v‰‹F‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zwé»ã‹ìÇF‹F�^S»ïS‰F躋åƒÄ]ÃUƒì;&Zwé�ã‹ìÇF�FP¸ïP蔋å‹FƒÄ]ÃUƒì;&Zwéfã‹ìŠF0ä‹^"‹N‹V‰F‹F$‰F‹F‰F ‹F ‰F �FP¸ïP‰N‰V‰^èA‹åƒÄ]ÃUƒì;&Zwéã‹ìŠF0ä ‹^ ‹N‹V‰F‹F‰F ‹F"‰F�FP¸ïP‰N‰V ‰^è÷‹åƒÄ]ÃUƒì;&ZwéÌâ‹ìŠF0ä ‹^‹N‹V‰F‹F ‰F�FP¸ïP‰N‰V‰^賋åƒÄ]ÃUƒì;&Zwéˆâ‹ìÇF ‹F‹^‹N ‹V‰F�FP¸ïP‰N‰V‰^èu‹å‹F‹vˆƒÄ]ÃUƒì;&ZwéBâ‹ìŠF0ä ‹^ŠN0í‰N±‹VÓâ‹N‰F‹F ‰F ‹F"‰F‹F$‰F�FP¸ïP‰N ‰V‰^è‹åƒÄ]ÃUƒì;&Zwéæá‹ìŠF0ä ‹^ŠN 0í‰N±‹VÓâŠN0íÑ‹N"‰F‹F$‰F‹F&‰F‹F(‰F�FP¸ïP‰N ‰V ‰^讋åƒÄ]ÃUƒì;&Zwéƒá‹ìÇF�FP¸ïP舋å‹F‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&ZwéEá‹ìÇF‹F‹^�NQ¹ïQ‰F‰^è>‹åƒÄ]ÃUƒì;&Zwéá‹ìÇF�FP¸ïPè‹å‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&ZwéÝà‹ìÇF�FP¸ïPèâ‹åƒÄ]ÃUƒì;&Zwé·à‹ì‹F±‹^Óã^�NQ¹ïQ‰F‰^è«‹åƒÄ]ÃUƒì;&Zwé€à‹ìÇF�FP¸ïPè…‹åƒ~t ¸ÿ…Àt3À@ë3À‹v‰ƒ~t ¸ÿ…Àt3À@ë3À‹v‰ƒ~t ¸ÿ…Àt3À@ë3À‹v‰ƒÄ]ÃUƒì;&Zwéà‹ìÇF‹F‹^‹N‹V‰F�FP¸ïP‰N‰V‰^ èü‹åƒÄ]ÃUƒì;&ZwéÑß‹ìÇF�FP¸ïPèÖ‹å‹F‹v‰‹F ‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zwé‹ß‹ì‹F‹^‹N�VRºïR‰F‰N‰^耋åƒÄ]ÃUƒì;&ZwéUß‹ìÇF�FP¸ïPèZ‹åƒ~t ¸…Àt3À@ë3À‹v‰‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zwéß‹ìÇF�FP¸ïPè ‹å‹F‹vˆ‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&ZwéÈÞ‹ìŠF0ä‹^ŠN0í‰N±‹VÓâŠN 0íÑ‹N"‰F‹F$‰F‹F&‰F‹F(‰F�FP¸ïP‰N ‰V ‰^è�‹åƒÄ]ÃUƒì;&ZwéeÞ‹ìŠF0ä‹^ŠN0í‰N±‹VÓâŠN 0íÑ‹N"‰F‹F$‰F‹F&‰F‹F(‰F�FP¸ïP‰N ‰V ‰^è-‹åƒÄ]ÃUƒì;&ZwéÞ‹ìŠF0ä‹^ŠN0í‰N±‹VÓâ‹N‰F‹F ‰F ‹F"‰F‹F$‰F�FP¸ïP‰N ‰V‰^èÑ‹åƒÄ]ÃUƒì;&Zwé¦Ý‹ìŠF0ä‹^‹N�VRºïR‰F‰N‰^虋å‹FƒÄ]ÃUƒì;&ZwékÝ‹ìÇF‹F‹^�NQ¹ïQ‰F‰^èd‹åƒÄ]ÃUƒì;&Zwé9Ý‹ìÇF‹F�^S»ïS‰Fè8‹åƒÄ]ÃUƒì;&Zwé Ý‹ìÇF‹F‹^�NQ¹ïQ‰F‰^è‹åƒÄ]ÃUƒì;&ZwéÛÜ‹ìÇF �FP¸ïPèà‹å‹F‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zwé¥Ü‹ìŠF0ä!‹^(ŠN0í‰N±‹VÓâŠN0íÑŠN 0í‰N±‰F‹FÓàŠN"0íÁ‹N$‰F ‹F&‰F‹F*‰F�FP¸ïP‰N ‰V‰^èZ‹åƒÄ]ÃUƒì;&Zwé/Ü‹ìŠF0ä"�^S»ïS‰Fè.‹åƒÄ]ÃUƒì;&ZwéÜ‹ìÇF#�FP¸ïPè‹å‹FƒÄ]ÃUƒì;&ZwéÚÛ‹ìÇF$�FP¸ïPèß‹åƒ~t ¸…Àt3À@ë3À‹v‰ƒ~t ¸…Àt3À@ë3À‹v‰ƒ~t ¸…Àt3À@ë3À‹v‰ƒÄ]ÃUƒì;&ZwéiÛ‹ìÇF%�FP¸ïPèn‹å‹F‹v‰‹F ‹v‰‹F‹v‰ƒÄ]ÃUƒì;&Zwé+Û‹ìÇF&�FP¸ïPè0‹åƒ~t ¸…Àt3À@ë3À‹v‰‹F ‹v‰‹F ‹v‰ƒÄ]ÃU‹ì‹FhË˴͆àP‹ÄP‹n‹F‹^‹N‹V‹v‹~ Ž^ ŽFU‹ìÿ^]PœX‰FXƒÄ‰F‰^‰N‰V‰v‰~ Œ^ ŒF]ÃŒØÃŒÈÃŒÀÃLattice C 2.00Invalid stack size $Invalid I/O redirection $Insufficient memory $*** STACK OVERFLOW *** $’€mqÿñ@À‘h1ø±( 8 EQÇÑ@À-`?à  2 2»»  ((((( H„„„„„„„„„„������‚‚‚‚‚‚ ((((( H„„„„„„„„„„������  ‚‚‚‚‚‚ con:CON:prn:PRN:lst:LST:lpt:LPT:lpt1:LPT1:aux:AUX:com:COM:com1:COM1:rdr:RDR:pun:PUN:nul:NUL:null:NULL:öe dkblue 0x1000 + 0500 /* MINDSET RGB + COMPOSITE bitmasks */ #define dkgreen 0x2000 + 0050 #define dkcyan 0x3000 + 0550 #define dkred 0x4000 + 0005 #define dkmagent 0x5000 + 0505 #define dkyellow 0x6000 + 0055 #define dkwhite 0x7000 + 0555 #define dkgray 0x8000 + 0222 #define blue 0x9000 + 0700 #define green 0xa000 + 0070 #define cyan 0xb000 + 0770 #define red 0xc000 + 0007 #define magenta 0xd000 + 0707 #define yellow 0xe000 + 0077 #define white 0xf000 + 0777 #define FALSE 0 /* left cursor key selected background */ #define TRUE 1 /* right cursor key selected foreground */ main() { int key; /* scan code of key pressed */ int index; /* current index into 16 color palette */ int front; /* if TRUE, then foreground color, else background */ /* palette is original 16 color palette */ static int palette[16] = { black, white, dkblue,dkgreen, dkcyan, dkred, dkmagent, dkyellow, dkwhite,dkgray, blue, green, cyan, red, magenta, yellow }; /* newpalette has user selected first two entries */ /* first entry (newplatte[0]) is background color */ /* second entry (newpalette[1]) is foreground color */ static int newpalette[16] = { black, white, dkblue,dkgreen, dkcyan, dkred, dkmagent, dkyellow, dkwhite,dkgray, blue, green, cyan, red, magenta, yellow }; /* display program banner and instructions */ printf(" *** DC - Display Color selection program ***\n\n"); printf("Use arrow keys: up/down - select color\n"); printf(" left/right - select background/foreground\n\n"); printf("Press key to exit and retain displayed colors\n"); setpalette(0, 16, 0, &palette); /* set up 16 color palette */ key = 0; /* initialize key to 0 */ index = 0; /* initialize color index */ front = TRUE; /* initialize to foreground */ while(key != 28) /* if key = 28, then user has pressed */ { getkey(&key); /* get key scan code from keyboard */ key = key & 0x0ff; switch(key) { case 72: /* UP arrow, so increment color index */ index = (index + 1) & 0x000f; break; case 80: /* DOWN arrow, so decrement color index */ index = (index - 1) & 0x000f; break; case 75: /* LEFT arrow, so set background color */ front = FALSE; break; case 77: /* RIGHT arrow, so set foreground color */ front = TRUE; break; default: } /* set foreground/background color from palette */ newpalette[front] = palette[index]; /* write new palette to display */ setpalette(0, 16, 0, &newpalette); } exit(); /* exit with user selected foreground/background */ } åC MAP 6{ÌC`DODC BAT ,zÌD2åEADME DOC 9�ÌE DOCOLOR0BAT 6WÈH€öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö/* Definitions for Frame Creation Software */ #define TRUE 1 #define FALSE 0 #define LBUTTON 0x10 #define RBUTTON 0x20 /* Command codes for CURSOR function */ #define C_INIT 1 #define C_WRITE 2 #define C_ERASE 3 #define C_MOVE 4 /* Screen Limits */ #define XMIN 0 #define XMAX 319 #define YMIN 0 #define YMAX 199 /* PDI Data */ #define PNTPDI 0xa6 #define LINEPDI 0xaa #define RECTPDI 0xb2 #define POLYPDI 0xb6 #define ARCPDI 0xae /* BLTer Chip Constan  ts */ #define FASTBLT 0x10 nt] = palette[index]; /* write new palette to display */ setpalette(0, 16, 0, &newpalette); } exit(); /* exit with user selected foreground/background */ } åC MAP 6{ÌC`DODC BAT ,zÌD2åEADME DOC 9�ÌE DOCOLOR0BAT 6WÈH€öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö/* Definitions for Frame Creation Software */ #define TRUE 1 #define FALSE 0 #define LBUTTON 0x10 #define RBUTTON 0x20 /* Command codes for CURSOR function */ #define C_INIT 1 #define C_WRITE 2 #define C_ERASE 3 #define C_MOVE 4 /* Screen Limits */ #define XMIN 0 #define XMAX 319 #define YMIN 0 #define YMAX 199 /* PDI Data */ #define PNTPDI 0xa6 #define LINEPDI 0xaa #define RECTPDI 0xb2 #define POLYPDI 0xb6 #define ARCPDI 0xae /* BLTer Chip Constants */ #define FASTBLT 0x10 .. AiX FC H ÍR[ì EXAMPLE H ÍR[ú TREE H { )STDIO H Yv gCTYPE H :Yv1–CUSER INC "sF2MACRO186INC nƒ*4ûEXTERNS INC xJ¢5FONTS INC l;™6€IBMBIOS BAK òtK 7DOS C Š€X 8MSBIOSEEBAK ótG9Ÿ MSBIOSEFBAK ”½:€:LC1 EXE F!>€ûstruct file_h_template { /* Template of file header */ char eof; /* Last file marker */ int number; /* File number marker */ char drive[2]; /* Drive specification */ char pathname[78]; /* path and file name */ int name_length; /* length of filename */ char dummy[43]; /* 43 bytes 0 */ }; struct disk_h_template { /* Template of file header */ char eof; /* Last disk marker */ int number; /* Disk number marker */ int year;  /* Year of backup */ int date; /* Month and day of backup */ char dummy[121]; /* 121 bytes 0 */ }; struct DTA_template { char dos_reserved[21]; char attribute; int time; int date; long file_size; char filename[14]; }; struct FCB_template { char drive; char filename[8]; char filename_ext[3]; int current_block; int record_size; long file_size; int date; char reserved[10]; char current_record; long relative_record; }; struct alt_FCB_template { char flag; /* set to 0ffh */ char dos_reserved[5]; char attribute; char drive; char filename[8]; char filename_ext[3]; int current_block; int record_size; long file_size; int date; char reserved[10]; char current_record; long relative_record; }; NC xJ¢5FONTS INC l;™6€IBMBIOS BAK òtK 7DOS C Š€X 8MSBIOSEEBAK ótG9Ÿ MSBIOSEFBAK ”½:€:LC1 EXE F!>€ûö/** * * This header file defines the information used by the standard I/O * package. * **/ #define _BUFSIZ 512 /* standard buffer size */ #define BUFSIZ 512 /* standard buffer size */ #define _NFILE 20 /* maximum number of files */ struct _iobuf { char *_ptr; /* current buffer pointer */ int _rcnt; /* current byte count for reading */ int _wcnt; /* current byte count for writing */ char *_base; /* base address of I/O buffer */ char _flag; /* control flags */ char _file; /* file number */ int _size; /* size of buffer */ char _cbuff; /* single char buffer */ char _pad; /* (pad to even number of bytes) */ }; extern struct _iobuf _iob[_NFILE]; #define _IOREAD 1 /* read flag */ #define _IOWRT 2 /* write flag */ #define _IONBF 4 /* non-buffered flag */ #define _IOMYBUF 8 /* private buffer flag */ #define _IOEOF 16 /* end-of-file flag */ #define _IOERR 32 /* error flag */ #define _IOSTRG 64 #define _IORW 128 /* read-write (update) flag */ #define NUL  L 0 /* null pointer value */ #define FILE struct _iobuf /* shorthand */ #define EOF (-1) /* end-of-file code */ #define stdin (&_iob[0]) /* standard input file pointer */ #define stdout (&_iob[1]) /* standard output file pointer */ #define stderr (&_iob[2]) /* standard error file pointer */ #define getc(p) (--(p)->_rcnt>=0? *(p)->_ptr++:_filbf(p)) #define getchar() getc(stdin) #define putc(c,p) (--(p)->_wcnt>=0? ((int)(*(p)->_ptr++=(c))):_flsbf((c),p)) #define putchar(c) putc(c,stdout) #define feof(p) (((p)->_flag&_IOEOF)!=0) #define ferror(p) (((p)->_flag&_IOERR)!=0) #define fileno(p) (p)->_file #define rewind(fp) fseek(fp,0L,0) #define fflush(fp) _flsbf(-1,fp) FILE *fopen(); FILE *freopen(); long ftell(); char *fgets(); #define abs(x) ((x)<0?-(x):(x)) #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<=(b)?(a):(b))  BAK òtK 7DOS C Š€X 8MSBIOSEEBAK ótG9Ÿ MSBIOSEFBAK ”½:€:LC1 EXE F!>€û/** * * This header file defines various ASCII character manipulation macros, * as follows: * * isalpha(c) non-zero if c is alpha * isupper(c) non-zero if c is upper case * islower(c) non-zero if c is lower case * isdigit(c) non-zero if c is a digit (0 to 9) * isxdigit(c) non-zero if c is a hexadecimal digit (0 to 9, A to F, * a to f) * isspace(c) non-zero if c is white space * ispunct(c) non-zero if c is punctuation * isalnum(c) non-zero if c is alpha or digit * isprint(c) non-zero if c is printable (including blank) * isgraph(c) non-zero if c is graphic (excluding blank) * iscntrl(c) non-zero if c is control character * isascii(c) non-zero if c is ASCII * iscsym(c) non-zero if valid character for C symbols * iscsymf(c) non-zero if valid first character for C symbols * **/ #define _U 1 /* upper case flag */ #define _L 2 /* lower case flag */ #define _N 4 /* number flag */ #define _S 8 /* space flag */ #define _P 16 /* punctuation flag */ #define _C 32 /* control character flag */ #define _B 64 /* blank flag */ #define _X 128 /* hexadecimal flag */ extern char _ctype[]; /* character type table */ #define isalpha(c) (_ctype[(c)+1]&(_U|_L)) #define isupper(c) (_ctype[(c)+1]&_U) #define islower(c) (_ctype[(c)+1]&_L) #define isdigit(c) (_ctype[(c)+1]&_N) #define isxdigit(c) (_ctype[(c)+1]&_X) #define isspace(c) (_ctype[(c)+1]&_S) #define ispunct(c) (_ctype[(c)+1]&_P) #define isalnum(c) (_ctype[(c)+1]&(_U|_L|_N)) #define isprint(c) (_ctype[(c)+1]&(_P|_U|_L|_N|_B)) #define isgraph(c) (_ctype[(c)+1]&(_P|_U|_L|_N)) #define iscntrl(c) (_ctype[(c)+1]&_C) #define isascii(c) ((unsigned)(c)<=127) #define iscsym(c) (isalnum(c)||(((c)&127)==0x5f)) #define iscsymf(c) (isalpha(c)||(((c)&127)==0x5f)) #define toupper(c) (islower(c)?((c)-('a'-'A')):(c)) #define tolower(c) (isupper(c)?((c)+('a'-'A')):(c)) #define toascii(c) ((c)&127)  { )STDIO H Yv gCTYPE H :Yv1–CUSER INC "sF2MACRO186INC nƒ*4ûEXTERNS INC xJ¢5FONTS INC l;™6€IBMBIOS BAK òtK 7DOS C Š€X 8MSBIOSEEBAK ótG9Ÿ MSBIOSEFBAK ”½:€:LC1 EXE F!>€ûöö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö  ööööööööö   ööööööööö!  ööööööööö!  ööööööööö"  ööööööööö"  ööööööööö#  ööööööööö#  ööööööööö$  ööööööööö$  ööööööööö%  ööööööööö%  ööööööööö&  ööööööööö&  ööööööööö'  ööööööööö'  ööööööööö