/* sketchpad.c - Interactively draw on the Apple II high resolution display, * demonstrating the library hr_apple2.lib. Print a menu of valid commands * which will remain in the text page and can be redisplayed by returning to * text mode. Until the QUIT command is received, execute the command then * wait for the next valid command. The user specifies the color and then * uses the cursor control keys to draw in that color. */ #include #include #include #include main() { int x = 0; /* column number - initially 0 */ int y = 0; /* row number - initially 0 */ int clr = HR_BLACK; /* color - initially black */ int sop = HR_PG1BGN; /* start of page - initially page 1 */ int eop = HR_PG1END; /* end of page - initially page 1 */ char cmd; /* user command */ cmd = ioctl( stdin , KB_CLEAR ); /* clear the screen */ cmd = ioctl( stdin , KB_ECHO , 0 ); /* disable keyboard echo */ /* Print the 'help' menu */ printf( "DRAW ON THE HIGH RESOLUTION DISPLAY\n" ); printf( "\nUSE THE CURSOR KEYS TO DRAW AND THE FOLLOWING KEYS:\n" ); printf( "\nH = DISPLAY THIS HELP MENU\n" ); printf( "Q = QUIT\n" ); printf( "C = CLEAR PAGE TO CURRENT COLOR\n" ); printf( "0 = BLACK\n" ); printf( "1 = PURPLE\n" ); printf( "2 = BLUE\n" ); printf( "3 = GREEN\n" ); printf( "4 = ORANGE\n" ); printf( "5 = WHITE\n" ); printf( "\nPRESS ANY KEY TO CONTINUE (Q=QUIT)\n" ); cmd = getc( stdin ); /* get first command */ hr_init(); /* switch to graphics */ hr_clear( sop , eop , HR_BLACK ); /* clear page to black */ /* until QUIT, execute the command and get next command. Each command is identified as its ASCII decimal value */ while ( cmd != 81 ) /* quit on ASCII Q */ { switch ( cmd ) { case 72: /* ASCII H - help */ { hr_quit(); /* switch to text */ cmd = getc( stdin ); /* wait for key press */ hr_init(); /* switch to graphics */ break; } case 8: /* ASCII left arrow */ { x = ( x > 0 ) ? --x : x; /* decrement column, not < 0 */ hr_pixel( x , y , clr , sop , eop ); /* set pixel */ break; } case 21: /* ASCII right arrow */ { x = ( x < 279 ) ? ++x : x; /* increment col, not > 279 */ hr_pixel( x , y , clr , sop , eop ); /* set pixel */ break; } case 10: /* ASCII down arrow */ { y = ( y < 191 ) ? ++y : y; /* incrment row, not > 191 */ hr_pixel( x , y , clr , sop , eop ); /* set pixel */ break; } case 11: /* ASCII up arrow */ { y = ( y > 0 ) ? --y : y; /* decrement row, not < 0 */ hr_pixel( x , y , clr , sop , eop ); /* set pixel */ break; } case 67: /* ASCII C - clear page */ { hr_clear( sop , eop , clr ); /* current page and color */ break; } case 48: /* ASCII zero */ { clr = HR_BLACK; /* set color to black */ break; } case 49: /* ASCII one */ { clr = HR_PURPLE; /* set color to purple */ break; } case 50: /* ASCII two */ { clr = HR_BLUE; /* set color to blue */ break; } case 51: /* ASCII three */ { clr = HR_GREEN; /* set color to green */ break; } case 52: /* ASCII four */ { clr = HR_ORANGE; /* set color to orange */ break; } case 53: /* ASCII five */ { clr = HR_WHITE; /* set color to white */ break; } default: break; /* disregard other values */ } /* end switch( cmd ) */ cmd = getc( stdin ); /* get next command */ } /* end while */ hr_quit(); /* make sure we will exit the program in text mode */ cmd = ioctl( stdin , KB_CLEAR ); /* clear the screen */ cmd = ioctl( stdin , KB_ECHO , 1 ); /* enable keyboard echo */ exit(); }