//------------------------------------------------------------------- // roomview.cpp // // This program uses some Line Graphics character-glyphs from // the terminal's Alternate Character Set in order to display // the layout of the Kudlick Classroom's thirty workstations. // // compile using: $ g++ roomview.cpp -lncurses -o roomview // // programmer: ALLAN CRUSE // written on: 19 APR 2005 //------------------------------------------------------------------- #include // for printf() #include // for system() #include // for strchr() #include // for STDOUT_FILENO #include // for setupterm() void setup_interface( void ); void reset_interface( void ); void draw_box( int x, int y, int h, int w ); int rows, cols; char *acsc, *cup, *smacs, *rmacs, UL, UR, LL, LR, HZ, VT; int main( int argc, char **argv ) { setup_interface(); // draw the thirty unnumbered workstations for (int k = 0; k < 16; k++) { if (( k == 0 )||( k == 15 )) continue; if (( k == 4 )||( k == 11 )) continue; draw_box( 5*k, 5, 4, 3 ); } for (int k = 0; k < 16; k++) { if (( k == 0 )||( k == 15 )) continue; if (( k == 5 )||( k == 10 )) continue; draw_box( 5*k, 10, 4, 3 ); } for (int k = 0; k < 16; k++) { if (( k == 0 )||( k == 15 )) continue; if (( k == 1 )||( k == 14 )) continue; if (( k == 5 )||( k == 10 )) continue; if (( k == 6 )||( k == 9 )) continue; if (( k == 7 )||( k == 8 )) continue; draw_box( 5*k, 15, 4, 3 ); } // draw the thirty station-numbers putp( tparm( cup, 16, 11 ) ); printf( "%2d", 1 ); putp( tparm( cup, 16, 16 ) ); printf( "%2d", 2 ); putp( tparm( cup, 16, 21 ) ); printf( "%2d", 3 ); putp( tparm( cup, 11, 6 ) ); printf( "%2d", 4 ); putp( tparm( cup, 11, 11 ) ); printf( "%2d", 5 ); putp( tparm( cup, 11, 16 ) ); printf( "%2d", 6 ); putp( tparm( cup, 11, 21 ) ); printf( "%2d", 7 ); putp( tparm( cup, 6, 6 ) ); printf( "%2d", 8 ); putp( tparm( cup, 6, 11 ) ); printf( "%2d", 9 ); putp( tparm( cup, 6, 16 ) ); printf( "%2d", 10 ); putp( tparm( cup, 11, 31 ) ); printf( "%2d", 11 ); putp( tparm( cup, 11, 36 ) ); printf( "%2d", 12 ); putp( tparm( cup, 11, 41 ) ); printf( "%2d", 13 ); putp( tparm( cup, 11, 46 ) ); printf( "%2d", 14 ); putp( tparm( cup, 6, 26 ) ); printf( "%2d", 15 ); putp( tparm( cup, 6, 31 ) ); printf( "%2d", 16 ); putp( tparm( cup, 6, 36 ) ); printf( "%2d", 17 ); putp( tparm( cup, 6, 41 ) ); printf( "%2d", 18 ); putp( tparm( cup, 6, 46 ) ); printf( "%2d", 19 ); putp( tparm( cup, 6, 51 ) ); printf( "%2d", 20 ); putp( tparm( cup, 16, 56 ) ); printf( "%2d", 21 ); putp( tparm( cup, 16, 61 ) ); printf( "%2d", 22 ); putp( tparm( cup, 16, 66 ) ); printf( "%2d", 23 ); putp( tparm( cup, 11, 56 ) ); printf( "%2d", 24 ); putp( tparm( cup, 11, 61 ) ); printf( "%2d", 25 ); putp( tparm( cup, 11, 66 ) ); printf( "%2d", 26 ); putp( tparm( cup, 11, 71 ) ); printf( "%2d", 27 ); putp( tparm( cup, 6, 61 ) ); printf( "%2d", 28 ); putp( tparm( cup, 6, 66 ) ); printf( "%2d", 29 ); putp( tparm( cup, 6, 71 ) ); printf( "%2d", 30 ); reset_interface(); getchar(); } void setup_interface( void ) { system( "reset" ); setupterm( NULL, STDOUT_FILENO, NULL ); rows = tigetnum( "lines" ); cols = tigetnum( "cols" ); acsc = tigetstr( "acsc" ); LR = strchr( acsc, 'j')[1]; UR = strchr( acsc, 'k')[1]; UL = strchr( acsc, 'l')[1]; LL = strchr( acsc, 'm')[1]; HZ = strchr( acsc, 'q')[1]; VT = strchr( acsc, 'x')[1]; smacs = tigetstr( "smacs" ); rmacs = tigetstr( "rmacs" ); cup = tigetstr( "cup" ); } void draw_box( int x, int y, int w, int h ) { int minx = x, miny = y, maxx = x+w-1, maxy = y+h-1; // sanity check: to insure screen boundaries are obserced if (( minx < 0 )||( maxx >= cols )) return; if (( miny < 0 )||( maxy >= rows )) return; putp( smacs ); // starting alternate character set mode // draw upper-left corner putp( tparm( cup, y, x ) ); printf( "%c", UL ); ++x; // draw upper border do { putp( tparm( cup, y, x ) ); printf( "%c", HZ ); ++x; } while( x < maxx ); // draw upper-right corner putp( tparm( cup, y, x ) ); printf( "%c", UR ); ++y; // draw right border do { putp( tparm( cup, y, x ) ); printf( "%c", VT ); ++y; } while( y < maxy ); // draw lower-right corner putp( tparm( cup, y, x ) ); printf( "%c", LR ); --x; // draw lower border do { putp( tparm( cup, y, x ) ); printf( "%c", HZ ); --x; } while( x > minx ); // draw lower-left corner putp( tparm( cup, y, x ) ); printf( "%c", LL ); --y; // draw left border do { putp( tparm( cup, y, x ) ); printf( "%c", VT ); --y; } while( y > miny ); putp( rmacs ); // ending alternate character set mode } void reset_interface( void ) { putp( tparm( cup, lines-2, 0 ) ); }