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|z3s8||P6|_`3ۋ.~S.:~X`|SŋS6 |Ft%=s+ˀw6 | tYX[QW- |2a_ì$t à|&|P~<_ .|6 |P~{| e :d uu_þ1|6|6| ̊|||*;vPrXP& |X+tþ|UU@`  @`! #%`')+-/1O5`79;=?AOE`GK/^@U`WY[]a n@e`gikmq s@u`wy}`@`  @`! #%`')+-/1O5`79;=?AOE`GK/^@U`WY[]a n@e`gikmq s@u`wy}`MSBIOSEEC WX 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 RBMBLTCHAR ASM FCEVB OBJ &mX H"EVB ASM UISETBLOCKASM c]HLSETBLOCKOBJ hMMCC BAT j{NIDOEXAMPLBAT OPOINT C #gPCOLOR0 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 YvgCTYPE 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 -wEVB OBJ &mX x"EVB ASM UyCALLDOS ASM uzCALLDOS OBJ !mX {CALLBIOSOBJ 2mX |DOC BAT zX }BIOS XRF zUY DOS OBJ ؀X MSBIOSEEOBJ oX 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 oX 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 */ } 5W5Y5[5]56a#6cC6ec6g6i6k6m6o7q#7u7c888889#9C99/: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 oX IBMBIOS OBJ X MSBIOSEFOBJ \X |,   callbios%PGROUPPROG=(e͚`iUFh˴͆PPnF^NVv~ ^ FU^]PXFXF^NVv~ ^ F]ÌÌÌÇCALLBIOSCODE_SEG_DATA_SEG\ EXTRA_SEGb1t calldosnPGROUPPROG=(5`9UnF^NVv~ !PXF XF^NVv~ ]ìCALLDOSWt ibmbioskPROGDATAPGROUPDGROUP<(H^\ SET_IBM_MODE _MNEXTyXCOVF CALLBIOS+U;&wF^SSF]@&l &&SET_CURSOR_POSITION'R'U;&wFF0^0N0NVӍNQQFV ^]B&l &E&iGET_CURSOR_POSITIONuڠPuU;&wFF0^SSFF%vF%v];&l &)&WRITE_CHAR_ONLYޠIU;&wF0 ^0N0ًN VRRFN^]&l &<&rWRITE_CHAR_CURSORIU;&wF0 ^0N0ًN VRRFN^]Ú&l &<&r WRITE_DOTK7<KU;&wF0 ^NVRRFN^]&l &/&READ_DOTp<U;&wF F^NQQF^F%]Þ&l &)&WRITE_TELETYPE8CU;&wF0^0N0ٍNQQF^]ʜ&l &6&x GET_KB_CHAR ?U;&wFFPPF%vF%]֜&l &&TEST_KB_BUFFER5Π<5U;&wFFPPF%@t3]ø]ɜ&l &&GET_KB_SHIFT_STATUSm0mU;&wFFPPF%]Ï&l &&tdosPROGDATAPGROUPDGROUP<(XH^\DOS_FILE_CREATEЌ _MNEXTyXCOVF CALLBIOSSU;&wF^F^S!SFF]þ&l &#& DOS_FILE_READJU;&wF?F^NVFFP!PNV^F]&l &5&yDOS_FILE_WRITEJU;&wF@F^NVFFP!PNV^F]à&l &5&yDOS_FILE_DELETE]s>]U;&wFAF^NQ!QF^F]&l &)&DOS_FILE_LSEEKzHU;&wFB^NVFFP!PNV^F]6&l &3&{t msbioseePROGDATAPGROUPDGROUP<(p˜H^\SET_DISPLAY_DEVICEҌ _MNEXTyXCOVF CALLBIOS0U;&wF0^SSF]9&l &#& SET_SYNC_MODE,0,U;&wF0^SSF] &l &#&SET_DISPLAY_INTXE5XU;&wF0F^SSF]Ɯ&l &(&JOYSTICK]]U;&wFFPPFЋvvFvFv F v"F v$]î&l &&SET_LEDV0U;&wF0"^SSF]7&l &#& SOUND_MODE6?U;&wF0$^0˺^SSFV]&l &2&| SOUND_REGSI DATA_SEGHIU;&wF0%^NVFNV ^^SSF]E&l &-&;&s SOUND_DATA =U;&wF&F0^0Í^SSF]&l   &0&~ STEREO_CHECK-U;&wF'FPPF]k&l && ENABLE_BEEPER0U;&wF06^SSF]&l &#& TEST_BEEPER-U;&wF7FPPF]&l && SET_BEEPERD0DU;&wF08^SSF]ý&l &#&t msbiosefPROGDATAPGROUPDGROUP<( H^\SET_SCREEN_MODE _MNEXTyXCOVF CALLBIOS-U;&wF0^SSF]B&l & &GET_SCREEN_MODE):)U;&wFFPPFvFv]&l &&SET_TRANSFER_MODE_0_U;&wFF^SSF]&l &#&GET_TRANSFER_MODE-U;&wFFPPF]Ȝ&l &&SET_DEST_BUFFERBU;&wFF^NVFFPPNV^]&l &5&yGET_DEST_BUFFERΠJU;&wFFPPFvFvFvFv]&l &&SET_WRITE_MASK808U;&wFF^SSF]&l &#&GET_WRITE_MASKd-dU;&wFFPPF]&l &&BLT_COPYLTU;&wF0^"NVFF$FFF F F FPPNV^]Ï&l &G&g BLT_COPY_WORDWNU;&wF0 ^ NVFFF F"FFPPNV ^]&l &A&m SET_PALETTE'͠H'U;&wF0 ^NVFF FFPPNV^]Ú&l &;&s GET_PALETTEkJkU;&wF F^N VFFPPNV^Fv]Þ&l &5&y BLT_POLYPOINT`U;&wF0 ^N0NVNFF F F"FF$FFPPN V^] &l &S&[ BLT_POLYLINE g U;&wF0 ^N 0NVN0ыN"FF$FF&FF(FFPPN V ^]è&l &Z&TGET_BUFFER_INFOpQBpU;&wFFPPFvFvFv]"&l &&SET_DISP_INT_ADDRT6U;&wFF^NQQF^]ç&l &)&GET_DISP_INT_ADDR.:U;&wFFPPFvFv]-&l &&SWITCH_ACTIVE_BUFFER*U;&wFFPP]&l &&SET_COLLISION_PATTERN<;<U;&wF^^NQQF^],&l &.&GET_COLLISION_PATTERNs]usU;&wFFPP~t t3@3v~t t3@3v~t t3@3v]2&l &&SET_CLIP_RECTANGLEBU;&wFF^NVFFPPNV^ ]ø&l &5&yGET_CLIP_RECTANGLE"J"U;&wFFPPFvF vFvFv]Ԝ&l &&SET_COLLCLIP_DETECTh:hU;&wF^NVRRFN^]&l &-&GET_COLLCLIP_DETECTSU;&wFFPP~t t3@3vFvFv]À&l &&BLT_WAITBU;&wFFPPFvFvFv]Ì&l && BLT_POLYGON+g+U;&wF0^N0NVN 0ыN"FF$FF&FF(FFPPN V ^]{&l &Z&T BLT_FELLIPSE%gU;&wF0^N0NVN 0ыN"FF$FF&FF(FFPPN V ^]&l &Z&T BLT_HELLIPSE`U;&wF0^N0NVNFF F F"FF$FFPPN V^]͜&l &S&[SAVE_GCPM?MU;&wF0^NVRRFN^F])&l &/& RESTORE_GCPd6U;&wFF^NQQF^]û&l &)&FILL_DEST_BUFFER0U;&wFF^SSF]n&l &#&SET_FONT_POINTERW6U;&wFF^NQQF^][&l &)&GET_FONT_POINTER0  :U;&wF FPPFvFv]&l && BLT_STRINGNzNU;&wF0!^(N0NVN0ъN 0NFFN"0N$F F&FF*FFPPN V^] &l &m&A SET_LINK_MODE0U;&wF0"^SSF]L&l &#& GET_LINK_MODEc-U;&wF#FPPF]=&l &&GET_GCP_STATUS ̠u U;&wF$FPP~t t3@3v~t t3@3v~t t3@3v]j&l &&GET_CHAR_BITMAP 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 UyCALLDOS ASM uzCALLDOS OBJ !mX {CALLBIOSOBJ 2mX |DOC BAT zX }BIOS XRF zUY DOS OBJ ؀X MSBIOSEEOBJ oX IBMBIOS OBJ X MSBIOSEFOBJ \X | BLTCHARpPGROUPPROG=(_`UV..F.v ~ ^FO :r:G v G2*2ÎG oOVPS2Su'=u[[X^J2ŋ&sPSQȎ Y[X[:ou[X^ou2W؊W]T$ 8ēr|BLTCHARYt @`//Aa  !AO%a')//O5a79;=?_oGIAKMO/SUatitle 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 USETBLOCKASM c]HSETBLOCKOBJ hMEVBDATADGROUPPGROUPPROG<H(N_] FRAME_COUNTYRP tXشÉˎûô#2   *07EVBINIT)STOPEVB@ VBLANKt ` ɰ ! @ ` ٠  @` @!Oa   !/#%a'+-/O79;=?A!CAEaGIKMOQSAUa  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 :Yv1CUSER INC "sF2MACRO186INC n*4EXTERNS INC xJ5FONTS INC l;6IBMBIOS 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 !   SETBLOCKDATADGROUPPGROUPPROG<H(_]_PSP J!r3ʜ}SETBLOCKtO`MSTEXT MAP sbMSTEXT EXE sPFBLTCHAR OBJ RdMFC C T[eFC H R[g FC OBJ U[hFC EXE cZ[jEXAMPLE 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 lTEXT OBJ iaTEXT EXE j<IDA_FRUT !}FRUIT C KrREM 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 lTEXT OBJ iaTEXT EXE j<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 hMPOINT C #gCURSOR 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& 2F&<=t< t< uI3D3It.F&< t&< t",0|(< $r rrr2r t뻺dہw&+u r;wd؎ЋѡXZ++r׉\3Pڋʃ+6cG6 G&6FG6PL! !L!-ຩ !L!FL!U 3dFQFF^^FPvvvP3PF P PjP # ]UF^SSF]U;&ZwWFF=} PFF~} v Fv v]U;&Zw> }nv 0@0%tF v 0tIF v 0Ft@0%uF ߋv F F0u."(,R!*&/ %t 0  P6E3P]UVN!s]U^NV?!s3]U^NV@!s3]UF B^NV!s؋]UVA!s]UVFCN!s]U^D!]Uvv/]U;&Zw F"^;sG0tFF="u3]vv v ]U ;&ZwvDt0%t VP vD 0Pv vD0=+t33C0^  F~ t^ ؁PSvF@u3 ]øP3P3Sv~ tF~ t3 SvF@u3 ]Â~ tFg~ t ؁PSv<F@u3 ]Â~ tF3 ]=wt=rug=auF#tNF vDvDFvD D3DDD FDƃ ]U;&ZwvD0%t VPd vD0% u| t t t3vDD DD 0P]U;&ZwFx=}"0%u  3]ËF"]U ;&ZweFF=}"0tF~u ]ËF"%^3ÉF%vt3 vF%Ov0 @RF%t3 v0 ؈3v0 `%v ]=t=t=tۋv0uvDF ]FF=}7 r@PvuF r~EF ]FvDF%tvF%PvvD>t4F%t3PvvD>t>v ]ËF%=uvtv ]ËF ]U;&ZwF % ^ SPv ]U;&ZwbFy]vFu]ËvD0F==~FbSb FFb0^;~FFFbF0= u Fv #F0=uFFFvF뮸 PcF]øF^ <F^v0%t-FF;F}FF^؉^VvF]FF;F|  VF0 PV PVFF@vv F]Ã~tPV PVPV띸 PV PV3]ËFFvF0= }^PVF0@PVSF0PVEY 6 .; u. y뛋F]3]vvvtsF>t]Ëv0%tF]3FF F^;~UFvF08F+FH3ۅyKQSPvFF ]뿋F F vF= t=t~ u ~tSF ]ø] s. U;&ZwlFy]vFu]ËvD0FdF<FFF^;~6FvF0= uv0%u PVF0PVF]Ëv0%tP3P3Svv0%t(vvtF>t]ËF]F3FFF F^;~pFvF0= uF0= tF NFF@v^b=F^|PbPvtgF >tF]ËF F F놃~t!vbPvt0F >tF F]ËF]]f   p s. U ;&ZwvFu ]ËvD0t 33ۃ ]vvvvtF^>t ]ËF^ ]U;&Zwv LFu]3v\0ۉFut>tFvF]UvM>t]3]U;&ZwP{Ft0]øPd]U;&ZwfPGFt0]øP0]U;&Zw2F0PP F0]U;&Zw P]U;&ZwF0PPF0]U;&ZwF0PPF0]U;&Zwv D0%0t]Ëv | uD0%uVt]Ëv D0%tF)v D0%t]Ëv D0 DD Fv D 0vtPFyv D0 D~uv D0 DF~ v DDv D0%0t]Ëv DHDx 0 v ؋Ã]U ;&ZwFv\00Ft ]Ëv| u[D0%uQVt ]ËvD0 DD DHDx^0 vv|؋à ]ËvD0%t8~u3 ]ËFv\ 0F v NQSFUFFvD0%t ]ËvD0 D~t2|~,DHDx^0 vvFv+DF tD 0v tPFF~uvD0 DF;F tvD0 DvD DDF=t \K\x 0 vvIvD0%0t ]Ã~u3 ]ËF ]U;&Zwv| tD0%u3]6FvDu ]ávD D0%D3DD]UV !]U;&Zw,ۣu]Ë63D3]U;&Zw3P]U;&ZwF y]F3PSFu]ËF^F HF t3PSot F(3]U;&ZwM3ۓ]U;&Zw/F 3SPF^]U;&Zw F^33M3]ËF^-FË^3ɺo FN^ v~tbvD3ۉFÉ^^NV |5;u;u vF v\+؉\^F )F]ËFF^똹F^ PS>F t9>u ^ ؋F ;É^uF F ]3]U;&ZwF3SPv F^]U;&ZwF^33]ËF^NF 3ɺ(^N ˋ^FN^vFu\؋N;ȉ^sv FDƋv3]ËF;Fu)~ D3ۋNȋVӉMNjv3]ËF ;FsF)]ËF ;FuFvt^;vF)]ËFvDt^;u GD3]ËF^ FN^ F v3ۋFDÃ]U;&ZwXv 0v0;u0u3]FF ׋v 0v0+؋Ã]UfFV!]U;&ZwF ^^\7~3]áZ^Z)\N ^F]U;&ZwF 3SPFt]ø]U;&ZwXZ+3ɅyI\^Z]UN u33F u33NFyy 333o3v3yڃux ;r+COu3ɋ!;r u;r+COu΋3FtFtڃ]P3XPx+u3;twH XUFh˴͆PPnF^NVv~ ^ FU^]PXFXF^NVv~ ^ F]ÌÌÌU;&ZwF0^SSFy]U;&ZwFFPPSFvFv]U;&ZwFFPPFvFvFv]U;&ZwFFPP]U;&Zw[FF^SSF]U;&Zw/FFPPF]U;&ZwFF^NVFFPPNV^L]U;&ZwFFPP&FvFvFvFv]U;&ZwFF^NVFFPPNV^ ]U;&ZwDFFPPFvF vFvFv]U;&ZwFF^SSFV]U;&ZwFFPP0F]U;&ZwFFPPFvFvFv]U;&ZwkF0^F^!^SSFF]U;&Z   w0FFF^SSF]U;&ZwF0^"NVFNV^^N VRRFN ^ 2]U;&ZwF0 ^ NVFFF NV ^R^SSF]U;&ZwdFF^SSF]U;&Zw8F0 ^NVFNV^^SSFx]U;&ZwF F^F^^NQQF^:Fv]U;&ZwF0 ^N0NVNFF F F"FN V^@^SSF]U;&ZwRF0 ^N0NVN&0ыN FF"FF$FN V ^^SSFs]U;&ZwF0^N0NVN 0ыN"FF$FF&FN V ^z^SSF]U;&ZwF0^N0NVN 0ыN"FF$FF&FN V ^^SSF]U;&Zw)F0^N0NVNFF F F"FN V^^SSFQ]U;&ZwFFF^SSF]U;&ZwF FPPFvF]U;&ZwhF0!^(N0NVN0ъN 0NFFN"0N$F F&FN V^^SSFv]U;&ZwF0"^SSFJ]U;&ZwF#FPP$F]U;&ZwF%FPPFvF vFv]U;&Zw_FF0^0N0NVӍNQQFV ^]U;&ZwFF0^SSFcF%vF%v]U;&ZwߋF0 ^NVRRFN^]U;&ZwߋF F^NQQF^F%]U;&ZwUߋF0^0N0ٍNQQF^]U;&ZwߋF0 ^0N0ًN VRRFN^U]U;&ZwދFFPP/F%vF%]U;&ZwދFFPPF%@t3]ø]U;&Zw^ދFFPPF%]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:OQent 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 RBMBLTCHAR ASM FCEVB OBJ &mX H"EVB ASM UISETBLOCKASM 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& 2F&<=t< t< uI3D3It.F&< t&< t",0|(< $r rrr2r t뻺dہw&+u r;wd؎ЋѡXZ++r׉\3Pڋʃ+6cG6 G&6FG6PdL! !L!-ຩ !L!FL!U ;&ZwP3PRP3PP3Pk3FF F~d}7F~@}%PvvvvP3P{FF(ԃF23PSPPSSPFFFP PP , ]U;&ZwF^SSF]U;&ZwFF=}VPFF~} v Fv v]U;&Zw> }nv 0@T0%tF v 0tIF v 0Ft@T0%uF ߋv F F0u_zntxRm^vr{l%t l0 lP63P]URVN!sR]UR^NV?!sR3]UR^NV@!sR3]URF B^NV!sR؋]URVA!sR]URVFCN!sR]U^D!]Uvv]U;&ZwVFn^;sG0tFF=nu3]vv v ]U ;&ZwWvDt0%t VP vD 0Pv vD0=+t33C0^ < F~ t^ ؁PSvF@u3 ]øP3P3Sv~ tF~ t3< SvF@u3 ]Â~ tFg~ t< ؁PSv<F@u3 ]Â~ tF3 ]=wt=rug=auFotNF vDvDFvD D3DDD FDƃ ]U;&ZwvD0%t VPd vD0% u| t t t3vDD DD 0P]U;&ZwJFx=}n0%u 0 3]ËFn]U ;&ZwFF=}n0tF~u0 ]ËFn2%^3ÉF%vt3 vF%Ov0 @RF%t3 v0 ؈3v0 `%v0 ]=t=t=tۋv0uvDF ]FF=}7 @PvuF ~EF ]FvDF%tvF%PvvD>Rt4F%t3PvvD>Rt>0v ]ËF%=uvt0v ]ËF ]U;&Zw-F % ^ SPv ]U;&ZwFy0]vFu]ËvD0F==~FS FF0^;~FFFF0= u Fv #F0=uFFFvF뮸 PcF]øZF^ F^v0%t-FF;F}FF^؉^VvF]FF;F|VF0 PV PVFF@vv F]Ã~tPV PVPV띸 PV PV3]ËFFvF0= }^PVF0@PVSF0PVE  o o .; u. y뛋F]3]vvvtsF>Rt]Ëv0%tF]3FF F^;~UFvF08F+FH3ۅyKQSPvFF ]뿋F F vF= t=t~ u ~tSF ]ø]I p B  B s. U;&Zw Fy0]vFu]ËvD0ZFFFFF^;~6FvF0= uv0%u PVF0PVF]Ëv0%tP3P3Svv0%t(vvtF>Rt]ËF]F3FFF F^;~pFvF0= uF0= tF NFF@v^=F^|PPvtgF >RtF]ËF F F놃~t!vPvt0F >RtF F]ËF]0] f n v s. U ;&Zw&vFu ]ËvD0t 33ۃ ]vvvvtF^>Rt0 ]ËF^ ]U;&Zwv LFu]3v\0ۉFut>RtFvF]UvM>Rt]3]U;&Zw7P{Ft0]øPd]U;&ZwPGFt0]øP0]U;&ZwF0PP F0]U;&ZwP]U;&ZwF0PPF0]U;&ZwbF0PPF0]U;&Zw:v D0%0t]Ëv | uD0%uVt]Ëv D0%tF)v D0%t]Ëv D0 DD Fv D 0vtPFyv D0 D~uv D0 DF~ v DDv D0%0t]Ëv DHDx 0 v ؋Ã]U ;&Zw%Fv\00Ft ]Ëv| u[D0%uQVt ]ËvD0 DD DHDx^0 vv|؋à ]ËvD0%t8~u3 ]ËFv\ 0F v NQSFUFFvD0%t ]ËvD0 D~t  2|~,DHDx^0 vvFv+DF tD 0v tPFF~uvD0 DF;F tvD0 DvD DDF=t \K\x 0 vvIvD0%0t ]Ã~u3 ]ËF ]U;&ZwBv| tD0%u3]6>FvDu0 ]á>vD D0%D3DD]UV !]U;&Zw46ۣ8:u]Ë683:D3]U;&Zw3P]U;&ZwoF y]46F3PSFu]ËF^46F HF t3PSot F6(3]U;&Zw:3ۓ]U;&ZwF 3SPF^]U;&ZwF^33M3]ËF^-FË^3ɺo8 FN^ v~tbvD3ۉFÉ^^NV |5;u;u vF v\+؉\^F ):F]ËFF^똹F^ PS>F t9>6u ^ 4664؋F ;É^uF 6F ]3]U;&ZwF3SPv F^]U;&Zw`F^33]ËF^NF 3ɺ(^N ˋ^:8FN^vFu\؋N;ȉ^sv FDƋv3]ËF;Fu)~ D3ۋNȋVӉMNjv3]ËF ;FsF):]ËF ;FuFvt^;vF):]ËFvDt^;u GD3]ËF^ FN^ F v3ۋFDÃ]U;&Zwv 0v0;u0u3]FF ׋v 0v0+؋Ã]UfFV!]U;&ZwF ^^\7~3]áZ^Z)\N ^F]U;&ZwNF 3SPFt]ø]U;&ZwXZ+3ɅyI\^Z]UN u33F u33NFyy 333o3v3yڃux ;r+COu3ɋ!;r u;r+COu΋3FtFtڃ]P3XPx+u3;twH XU;&Zw F0^SSF]U;&ZwFFPPwFvFv]U;&ZwFFPPAFvFvFv]U;&ZwFFPP]U;&Zw]FF^SSF]U;&Zw1FFPPF]U;&ZwFF^NVFFPPNV^p]U;&ZwFFPPJFvFvFvFv]U;&ZwFF^NVFFPPNV^ ]U;&ZwFFFPPFvF vFvFv]U;&ZwFF^SSFz]U;&ZwFFPPTF]U;&ZwFFPP+FvFvFv]U;&ZwmF0^F^E^SSFF]U;&Zw2FFF^SSF]U;&ZwF0^"NVFNV^^N VRRFN ^ V]U;&ZwF0 ^ NVFFF NV ^v^SSF ]U;&ZwfFF^SSF]U;&Zw:F0 ^NVFNV^^SSF]U;&ZwF F^F^^NQQF^^Fv]U;&ZwF0 ^N0NVNFF F F"FN V^d^SSF]U;&ZwTF0 ^N0NVN&0ыN FF"FF$FN V ^^SSF]U;&ZwF0^N0NVN 0ыN"FF$FF&FN V ^^SSF4]U;&ZwF0^N0NVN 0ыN"FF$FF&FN V ^;^SSF]U;&Zw+F0^N0NVNFF F F"FN V^^SSFu]U;&ZwFFF^SSFC]U;&ZwF FPPFvF]U;&ZwjF0!^(N0NVN0ъN 0NFFN"0N$F F&FN V^^SSF]U;&ZwF0"^SSFn]U;&ZwF#FPPHF]U;&ZwF%FPPFvF vFv]UFh˴͆PPnF^NVv~ ^ FU^]PXFXF^NVv~ ^ F]ÌÌÌU;&ZwߋFF0^0N0NVӍNQQFV ^T]U;&ZwߋFF0^SSF"F%vF%v]U;&ZwbߋF0 ^NVRRFN^]U;&Zw*ߋF F^NQQF^F%]U;&ZwދF0^0N0ٍNQQF^Y]U;&ZwދF0 ^0N0ًN VRRFN^]U;&ZwnދFFPPF%vF%]U;&Zw3ދFFPPF%@t3]ø]U;&Zw݋FFPP{F%]Lattice C 2.00Invalid stack size $Invalid I/O redirection $Insufficient    memory $*** STACK OVERFLOW *** $@( h1@EQ-`mq8?((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:moq s@u`wy{} @`  @ @ ` o @ ` ΐ @ ` ׀ ?`Pp!Aa !OaA!!#Q+'*,Q-/1!3Ao71>?A!_oGKMOQBM 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& 2F&<=t< t< uI3D3It.F&< t&< t",0|(< $r rrr2r t뻺dہw&+u r;wd؎ЋѡXZ++r׉\3Pڋʃ+6cG6 G&6FG6PL! !L!-ຩ !L!FL!U;&ZwP3P"PP3PP3F FF^^ F=}*F n^ظPvSvvP3P F3^ FF^F=}*F n^ظPSvvvP3P\ F΋F FF~}EFF=}3F n^؋F nNȸPQSvvP3P FF3SPPSSPPFFFPPP,]U;&ZwF^SSF#]U;&Zw`FF=}JPFF~} v Fv v] ]U;&Zw > }nv 0@b0%tF v 0tIF v 0Ft@b0%uF ߋv F F0uSndjnRaRlho` %t `0 ` P6N3P]U;&ZwJFb^;sG0tFF=bu3]vv v ]U ;&ZwvDt0%t VP vD 0Pv vD0=+t33C0^ * F~ t^ ؁PSvF@u3 ]øP3P3Sv~ tF~ t3* SvF@u3 ]Â~ tFg~ t* ؁PSv<F@u3 ]Â~ tF3 ]=wt=rug=auFetNF vDvDFvD D3DDD   FDƃ ]U;&ZwvD0%t VPi vD0% u| t t t3vDD DD 0P]U;&ZwFx=}d0%u 4 3]ËFd]U ;&ZwpFF=}d0tF~u4 ]ËFd(%^3ÉF%vt3 vF%Ov0 @RF%t3 v0 ؈3v0 `%v4 ]=t=t=tۋv0uvDF ]FF=}7 @PvuF ~EF ]FvDF%tv'F%PvvD>&t4F%t3PvKvD>&t>4v ]ËF%=uvtH4v ]ËF ]U;&ZwF % ^ SPv ]U;&ZwmFy4]vFu]ËvD0F==~FS FF0^;~FFFF0= u Fv #F0=uFFFvF뮸 P F]øF^ F^v0%t-FF;F}FF^؉^VvF]FF;F|VF0 PV PVFF@vv F]Ã~tPV PVPV띸 PV PV3]ËFFvF0= }^PVF0@PVSF0PVEN +   .; u. y뛋F]3]vvvtF>&t]Ëv0%tF]3FF F^;~UFvF08F+FH3ۅyKQSPvFF ]뿋F F vF= t=t~ u ~tSF ]ø]  s. U;&ZwwFy4]vFu]ËvD0FFFFF^;~6FvF0= uv0%u PVF0PVF]Ëv0%tP3P3Svv0%t(vvt]F>&t]ËF]F3FFF F^;~pFvF0= uF0= tF NFF@v^=F^|PPvtF >&tF]ËF F F놃~t!vPvtF >&tF F]ËF]4][  e s.{ U ;&ZwvFu ]ËvD0t 33ۃ ]vvvvt(F^>&t4 ]ËF^ ]U;&Zwv LFu]3v\0ۉFutk>&tFvF]Uv>&t]3]U&VN!s&]U&^NV?!s&3]U&^NV@!s&3]U&F B^NV!s&؋]U&VA!s&]U&VFCN!s&]U^D!]Uvv]U;&Zwv D0%0t]Ëv | uD0%uVt]Ëv D0%tF)v D0%t]Ëv D0 DD Fv D 0vtPFyv D0 D~uv D0 DF~ v DDv D0%0t]Ëv DHDx 0 v ؋Ã]U ;&ZwFv\00Ft ]Ëv| u[D0%uQVt ]ËvD0 DD DHDx^0 vv|؋à ]ËvD0%t8~u3 ]ËFv\ 0F v NQSFPFFvD0%t ]ËvD0 D~t2|~,DHDx^0 vvFv+DF tD 0v tPFF~uvD0 DF;F tvD0 DvD DDF=t \K\x 0 vvIvD0%0t ]Ã~u3 ]ËF ]U;&Zwv| tD0%u3]66:vDu4 ]á6vD D0%D3DD]U;&Zw>,.ۣ02u]Ë6032D3]U;&Zw3P]U;&ZwF y],.F3PS{Fu]ËF^,.F HF t3PSHt F.(3]U;&Zw_23ۓ]U;&ZwAF 3SPF^]U;&ZwF^333]ËF^-FË^3ɺ0 FN^ v~tbvD3ۉFÉ^^NV T|5;u;u vF v\+؉\^F )2F]ËFF^똹F^ PSF t9>.u ^ ,..,؋F ;É^uF .F ]3]U;&ZwF3SPv F^]U;&ZwF^33l]ËF^NF 3ɺ^N ˋ^20FN^vFu\؋N;ȉ^sv FDƋv3]ËF;Fu)~ D3ۋNȋVӉMNjv3]ËF ;FsF)2]ËF ;FuFvt^;vF)2]ËFvDt^;u GD3]ËF^ FN^ F v3ۋFDÃ]UV !]U;&Zw^v 0v0;u0u3]FF ׋v 0v0+؋Ã]U;&ZwPFt0]øP]U;&ZwPFt0]øP]U;&ZwF0PPyF0]U;&ZwPW]U;&ZwbF0PP4F0]U;&Zw:F   0PP F0]UfFV!]UN u33F u33NFyy 333o3v3yڃux ;r+COu3ɋ!;r u;r+COu΋3FtFtڃ]P3XPx+u3;twH XU;&Zw0F ^^\~3]áZ^Z)\N ^F]U;&ZwF 3SPFt]ø]U;&ZwXZ+3ɅyI\^Z]U;&ZwF^SSF ]U;&ZweFF0^0N0NVӍNQQFV ^B ]U;&ZwFF0^SSF F%vF%v]U;&ZwF0 ^0N0ًN VRRFN^ ]U;&ZwF0 ^0N0ًN VRRFN^l ]U;&ZwAF0 ^NVRRFN^4 ]U;&Zw F F^NQQF^ F%]U;&ZwF0^0N0ٍNQQF^ ]U;&ZwFFPP F%vF%]U;&ZwWFFPP\ F%@t3]ø]U;&ZwFFPP$ F%]U;&ZwF0^SSF ]U;&ZwFFPP FvFv]U;&ZwFF^SSF ]U;&ZwhFFPPm F]U;&Zw?FF^NVFFPPNV^, ]U;&ZwFFPP FvFvFvFv]U;&ZwFF^SSF]U;&ZwFFPPF]U;&ZwfF0^"NVFF$FFF F F FPPNV^A]U;&ZwF0 ^ NVFFF F"FFPPNV ^]U;&ZwF0 ^NVFF FFPPNV^]U;&ZwF F^N VFFPPNV^uFv]U;&ZwBF0 ^N0NVNFF F F"FF$FFPPN V^]U;&ZwF0 ^N 0NVN0ыN"FF$FF&FF(FFPPN V ^]U;&ZwFFPPFvFvFv]U;&ZwEFF^NQQF^>]U;&ZwFFPPFvFv]U;&ZwFFPP]U;&ZwF^^NQQF^]U;&ZwFFPP~t t3@3v~t t3@3v~t t3@3v]U;&ZwFF^NVFFPPNV^ ]U;&ZwߋFFPPFvF vFvFv]U;&ZwߋF^NVRRFN^]U;&ZwUߋFFPPZ~t t3@3vFvFv]U;&ZwߋFFPP FvFvFv]U;&ZwދF0^N0NVN 0ыN"FF$FF&FF(FFPPN V ^]U;&ZweދF0^N0NVN 0ыN"FF$FF&FF(FFPPN V ^-]U;&ZwދF0^N0NVNFF F F"FF$FFPPN V^]U;&Zw݋F0^NVRRFN^F]U;&Zwk݋FF^NQQF^d]U;&Zw9݋FF^SSF8]U;&Zw ݋FF^NQQF^]U;&Zw܋F FPPFvFv]U;&Zw܋F0!^(N0NVN0ъN 0NFFN"0N$F F&FF*FFPPN V^Z]U;&Zw/܋F0"^SSF.]U;&Zw܋F#FPPF]U;&ZwۋF$FPP~t t3@3v~t t3@3v~t t3@3v]U;&ZwiۋF%FPPnFvF vFv]U;&Zw+ۋF&FPP0~t t3@3vF vF v]UFh˴͆PPnF^NVv~ ^ FU^]PXFXF^NVv~ ^ F]ÌÌÌLattice C 2.00Invalid stack size $Invalid I/O redirection $Insufficient memory $*** STACK OVERFLOW *** $mq@h1( 8EQ@-`?  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 ,zD2EADME DOC 9E DOCOLOR0BAT 6WH/* 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 ,zD2EADME DOC 9E DOCOLOR0BAT 6WH/* 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 :Yv1CUSER INC "sF2MACRO186INC n*4EXTERNS INC xJ5FONTS INC l;6IBMBIOS 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 xJ5FONTS INC l;6IBMBIOS 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 :Yv1CUSER INC "sF2MACRO186INC n*4EXTERNS INC xJ5FONTS INC l;6IBMBIOS BAK tK 7DOS C X 8MSBIOSEEBAK tG9 MSBIOSEFBAK ::LC1 EXE F!>                                                                       !  !  "  "  #  #  $  $  %  %  &  &  '  '