/* Program: ANIM.C Author : Kim Moser Date : 30 July, 1990 System : IBM PC / Borland Turbo C 2.0 Descrip: CGA low-res drawing and animation package */ #include #include "anim.h" static int old_vid_mode; /************************************************************************/ void usage(void) { fputs("ANIM v1.0 (07/30/90) Copyright (C) 1990 Kim Moser All Rights Reserved\n", stderr); fputs("Usage: ANIM\n", stderr); return (-1); } /************************************************************************/ int getvidmode(void); int getvidmode(void) /* Returns current video mode */ { struct REGPACK r; r.r_ax = 0x0F00; /* 00001111 00000000 */ intr(0x10, &r); return (r.r_ax & 0x00FF); /* Returns LOW byte */ } void setvidmode(int n); void setvidmode(int n) /* Sets video mode to 'n' */ { struct REGPACK r; r.r_ax = n; /* 00000000 nnnnnnnn */ intr(0x10, &r); } void draw_mode(void) { setmode(0x0F); } void text_mode(void) { setmode(old_vid_mode); } /*************************************************************************/ void plot(int x, int y, int c) { if ((x >= MAX_PIX_X) || (x < 0) || (y >= MAX_PIX_Y) || (y < 0)) { writewarn("etvid.etplot(): x (%d) or y (%d) is out of range.\n", x, y); } else { if (c) { CGA[((y%2) ? 0x02000 : 0)+(y/2)*80 + x/8] |= (128>>(x%8)); } else { CGA[((y%2) ? 0x02000 : 0)+(y/2)*80 + x/8] &= ((~0) - (128>>(x%8))); } } } int bit(int x, int y) { if ((x >= MAX_PIX_X) || (x < 0) || (y >= MAX_PIX_Y) || (y < 0)) { writewarn("etvid.etbit(): x (%d) or y (%d) is out of range.\n", x, y); return 0; } else { return CGA[((y%2) ? 0x02000 : 0)+(y/2)*80 + x/8] & (128>>(x%8)); } } /************************************************************************/ void main(int argc, char **argv) { if (argc > 1) { usage(); } old_vid_mode = getvidmode(); edit(); exit(0); }