/* compile with: * gcc d.c -o d -lncurses -ansi -pedantic -Wall */ #include #include #include int main(void) { const char table[] = " .|-<>#$%!&*_[]:/\?@abcdefghijklmnopqrstuvwxyz0123456789"; const char TitleStr[] = "press X to exit"; int mX,mY,cX,cY,ch; int color=0; char *Map; const int sizeX=80,sizeY=25; /* make these fit the map */ int maxcolor; /* */ Map=(char*)calloc(sizeof(char),sizeX*sizeY); initscr(); start_color(); init_pair(0,COLOR_WHITE,COLOR_BLACK); init_pair(1,COLOR_RED,COLOR_BLACK); init_pair(2,COLOR_GREEN,COLOR_BLACK); init_pair(3,COLOR_YELLOW,COLOR_BLACK); init_pair(4,COLOR_BLUE,COLOR_BLACK); init_pair(5,COLOR_MAGENTA,COLOR_BLACK); init_pair(6,COLOR_CYAN,COLOR_BLACK); init_pair(maxcolor=7,COLOR_BLACK,COLOR_BLACK); attrset(COLOR_PAIR(0)); cbreak(); noecho(); keypad(stdscr,TRUE); /* nodelay(stdscr,TRUE); */ /* start us in the middle of the display */ mY=cY=LINES/2; mX=cX=COLS/2; mvaddstr(LINES-1,(COLS-strlen(TitleStr))/2,TitleStr); refresh(); while(mvaddch(cY,cX,'@'),refresh(),ch=getch(),ch!='x') { mvaddch(cY,cX,table[(int)Map[mX+(sizeX*mY)]]); refresh(); switch (ch) { case KEY_UP: mvaddch(LINES-1,COLS-1,ACS_UARROW); mY=cY+= (cY > 0) ? -1 : 0; break; case KEY_DOWN: mvaddch(LINES-1,COLS-1,ACS_DARROW); mY=cY+= (cY < LINES-2) ? 1 : 0; break; case KEY_LEFT: mvaddch(LINES-1,COLS-1,ACS_LARROW); mX=cX+= (cX > 0) ? -1 : 0; break; case KEY_RIGHT: mvaddch(LINES-1,COLS-1,ACS_RARROW); mX=cX+= (cX < COLS-1) ? 1 : 0; break; case 'b': flash(); beep(); break; case KEY_F(1): if(color < maxcolor) attrset(COLOR_PAIR(++color)); break; case KEY_F(2): if (color > 0) attrset(COLOR_PAIR(--color)); break; case KEY_F(3): { char *T=Map+(mX+(sizeX*mY)); if (*T) (*T)--; } break; case KEY_F(4): { char *T=Map+(mX+(sizeX*mY)); if (*T < (sizeof table-2)) (*T)++; } break; } } endwin(); /* */ return EXIT_SUCCESS; }