int menu_session() { int key; int run_flag = -1; int rowField = 1; // Draw main part of interface draw_main_menu(); // Save terminal settings, change mode, hide cursor rk_mytermsave(); rk_mytermregime(0, 0, 1, 0, 1); mt_setcursor(0); // Setup color palete mt_setbgcolor(clBlack); mt_setfgcolor(clGreen); while (rk_readkey(&key) == 0 && key != K_ESC) { switch (key) { case K_UP: if (rowField != 0) { rowField--; draw_main_menu_field(rowField); } break; case K_DOWN: if (rowField != 2) { rowField++; draw_main_menu_field(rowField); } break; case K_ENTER: if (rowField == 0) { run_flag = 0; } else if (rowField == 1) { run_flag = 1; } else { run_flag = 2; } break; } if (key == K_ENTER) { break; } } rk_mytermrestore(); mt_setcursor(1); mt_setstdcolor(); mt_gotoXY(39, 1); mt_clrscr(); return run_flag; }
int main(int argc, char **argv) { if (signal(SIGINT, sig_handler) == SIG_ERR) printf("\ncan't catch SIGINT\n"); if (signal(SIGUSR1, sig_handler) == SIG_ERR) printf("\ncan't catch SIGUSR1\n"); setlocale(LC_ALL, ""); uint8_t RAMVPointer = 3; // Позиция отображаемого участка памяти uint8_t PROVPointer = 0; int ActiveWindow = WIN_REG; // Активное окно int EditMode = False; // Режим редактора int cx, cy; // Координаты курсора Memory = sc_memoryInit(MaxMemory); if (NULL == Memory) { perror("Память не выделена\n"); goto TERMINATE; } WINDOW *winRAM; WINDOW *winREG; WINDOW *winTerminal; WINDOW *winProgram; initscr(); start_color(); init_pair(1, COLOR_WHITE, COLOR_BLUE); init_pair(2, COLOR_BLUE, COLOR_CYAN); init_pair(3, COLOR_WHITE, COLOR_BLACK); keypad(stdscr, TRUE); refresh(); noecho(); //curs_set(1); curs_set(0);//FIXME winREG = create_win(0, 0, 11, 15); winTerminal = create_win(0, 15, 11, 65); winRAM = create_win(18, 0, 6, 80); winProgram = create_win(11, 0, 7, 19); mvwprintw(winREG, 0, 1, "РЕГИСТРЫ"); mvwprintw(winTerminal, 0, 1, "ТЕРМИНАЛ"); mvwprintw(winRAM, 0, 1, "ПАМЯТЬ"); mvwprintw(winProgram, 0, 1, "ПРОГРАММА"); wbkgd(winREG, COLOR_PAIR(3)); wbkgd(winTerminal, COLOR_PAIR(3)); mvwprintw(winREG, 1, 1, "A: 0x0000"); mvwprintw(winREG, 2, 1, "IC: 0x00"); // mvwprintw(winREG, 3, 1, " FLAGS: 0x00"); // mvwprintw(winREG, 4, 1, " V Z E P C"); // mvwprintw(winREG, 5, 1, " 0 0 0 0 0"); mvwprintw(winREG, 3, 1, "F: 0b00000000"); mvwprintw(winREG, 4, 1, " VZEPC"); loadbios(Memory); viewprog(winProgram, Memory, 0, 0); //sc_memorySet(Memory, 17, 5); // sc_memorySave(Memory, (char*)"caca"); sc_memoryLoad(Memory, (char*)"caca"); viewram(winRAM, RAMVPointer, 0);//fixme wrefresh(winREG); wrefresh(winTerminal); wrefresh(winRAM); wrefresh(winProgram); refresh(); move(1, 1); paintbox(winREG, 1); int ch; while (1) { ch = getch(); switch (ActiveWindow) { case WIN_MEM: { if (ch == KEY_F(3)) { if (EditMode) { EditMode = False; curs_set(0); } else { EditMode = True; curs_set(1); move(19, 8); cx = 8; cy = 1; } } if (!(EditMode)) { switch (ch) { case KEY_DOWN: RAMVPointer = viewram(winRAM, RAMVPointer, 1); wrefresh(winRAM); break; case KEY_UP: RAMVPointer = viewram(winRAM, RAMVPointer, -1); wrefresh(winRAM); break; case KEY_TAB: //goto TERMINATE; ActiveWindow = WIN_REG; paintbox(winRAM, 3); paintbox(winREG, 1); ActiveWindow = WIN_REG; break; } } else { int dig = 0, t; switch (ch) { // MAXIMUM MAGIC! case 'a' ... 'f': //case 97 ... 102: dig -= 'a' - 'A'; // dig -= 32; case 'A' ... 'F': //case 65 ... 70: --dig; case '0' ... '9': //case 48 ... 57: dig += ch - '0'; // dig += ch - 48 if ('9' < ch) // if (57 < ch) dig -= 1 + 'f' - 'a'; // dig -= 6; if (cx < 31) t = (cx - 8) % 3; else t = ((cx - 8) % 3) - 1; Memory[16 * (RAMVPointer - (4 - cy)) + ((cx - 8) / 3)] = ((dig * 0x10 | (Memory[16 * (RAMVPointer - (4 - cy)) + ((cx - 8) / 3)] & 0x0f)) & (!t * 0xff)) + ((dig | (Memory[16 * (RAMVPointer - (4 - cy)) + ((cx - 8) / 3)] & 0xf0)) & (t * 0xff)); viewram(winRAM, RAMVPointer, 0); case KEY_RIGHT: { if (cx < 31) { if (cx % 3) ++cx; else cx += 2; if (cx == 32) ++cx; } else { if (cx % 3) cx += 2; else ++cx; } wmove(winRAM, cy, cx); wrefresh (winRAM);//fixme if (cx < 57) break; else cx = 8;//FIXME В самом конце } case KEY_DOWN: { if (cy > 3) RAMVPointer = viewram(winRAM, RAMVPointer, 1); else ++cy; wmove(winRAM, cy, cx); wrefresh (winRAM);//fixme } break; case KEY_LEFT: { if (cx > 31) { if (cx % 3) --cx; else cx -= 2; if (cx == 31) --cx; } else { if (cx % 3) cx -= 2; else --cx; } wmove(winRAM, cy,cx); wrefresh (winRAM);//fixme if (cx > 7) break; else if (RAMVPointer == 3) cx = 8; else cx = 55; } case KEY_UP: { if (cy <= 1) RAMVPointer = viewram(winRAM, RAMVPointer, -1); else --cy; wmove(winRAM, cy, cx); wrefresh (winRAM);//fixme } break; } } } break; case WIN_PRO: { switch (ch) { case KEY_UP: PROVPointer = viewprog(winProgram, Memory, PROVPointer, -1); wrefresh(winProgram); break; case KEY_DOWN: PROVPointer = viewprog(winProgram, Memory, PROVPointer, 1); wrefresh(winProgram); break; case KEY_TAB://FIXME смена активного окна //goto TERMINATE; ActiveWindow = WIN_MEM; paintbox(winProgram, 3); paintbox(winRAM, 1); ActiveWindow = WIN_MEM; break; } } break; case WIN_REG: { switch (ch) { case KEY_TAB: paintbox(winREG, 3); paintbox(winTerminal, 1); ActiveWindow = WIN_TER; goto TERMINATE; break; } } break; case WIN_TER: { switch (ch) { case KEY_TAB: paintbox(winTerminal, 3); paintbox(winProgram, 1); ActiveWindow = WIN_PRO; break; } } break; } } TERMINATE: free(Memory); delwin(winRAM); delwin(winREG); delwin(winTerminal); // refresh(); endwin(); // sc_regSet(4,1); // sc_regSet(1,1); mt_clrscr(); //bc_printA("\n"); //bc_setbigcharpos(r[3],0,0,0b10000001); int bcint0 [2] = {1717976064, 3958374}; //0b01100110011001100011110000000000, 0b00000000001111000110011001100110 int bcint1 [2] = {1010315264, 3158064}; //0b00111100001110000011000000000000, 0b00000000001100000011000000110000 int bcint2 [2] = {1010842624, 8258050}; //0b00111100010000000011110000000000, 0b00000000011111100000001000000010 int bcint3 [2] = {2120252928, 8282238}; //0b01111110011000000111111000000000, 0b00000000011111100110000001111110 int bcint4 [2] = {2120640000, 6316158}; //0b01111110011001100110011000000000, 0b00000000011000000110000001111110 int bcint5 [2] = {1040350720, 4079680}; //0b00111110000000100111111000000000, 0b00000000001111100100000001000000 int bcint6 [2] = {35789824, 1974814}; //0b00000010001000100001110000000000, 0b00000000000111100010001000011110 int bcint7 [2] = {811630080, 396312}; //0b00110000011000000111111000000000, 0b00000000000001100000110000011000 int bcint8 [2] = {1013332992, 3958374}; //0b00111100011001100011110000000000, 0b00000000001111000110011001100110; int bcint9 [2] = {2087074816, 3956832}; //0b01111100011001100011110000000000, 0b00000000001111000110000001100000 int bcintA [2] = {2118269952, 4342338}; //0b01111110010000100011110000000000, 0b00000000010000100100001001000010 int bcintB [2] = {1044528640, 4080194}; //0b00111110010000100011111000000000, 0b00000000001111100100001001000010 int bcintC [2] = {37895168, 3949058}; //0b00000010010000100011110000000000, 0b00000000001111000100001000000010 int bcintD [2] = {1111637504, 4080194}; //0b01000010010000100011111000000000, 0b00000000001111100100001001000010 int bcintE [2] = {2114092544, 8258050}; //0b01111110000000100111111000000000, 0b00000000011111100000001000000010 int bcintF [2] = {33717760, 131646}; //0b00000010000000100111111000000000, 0b00000000000000100000001000111110 int bcintp [2] = {2115508224, 1579134}; //0b01111110000110000001100000000000, 0b00000000000110000001100001111110 /* bc_printbigchar(bcintp, 5, 5, cl_blue, cl_red); bc_box(2, 1, 50, 20); */ int a; rk_readkey(&a); printf("%d\n", a); return 0; }
// main single player game routine int single_game_session() { int key; int chPlayer = ZERO; pthread_t ai_player; int rowField = 0; int colField = 0; char msgChat[250] = ""; int len; // Draw main part of interface mi_drawMainInterface(); drawGameField(0, 0); // Save terminal settings, change mode, hide cursor rk_mytermsave(); rk_mytermregime(0, 0, 1, 0, 1); mt_setcursor(0); // Setup color palete mt_setbgcolor(clBlack); mt_setfgcolor(clGreen); int unused; pthread_create(&ai_player, 0, ctlAiInteraction, (void*)&unused); int whoWin; char msgSign[250]; if (chPlayer == 1) { mi_writeMessage("You are playing ZEROS"); } else if (chPlayer == 2) { mi_writeMessage("You are playing CROSSES"); } while (is_finished_game == 0 && rk_readkey(&key) == 0 && key != K_ESC) { switch (key) { case K_R: // not supproted break; case K_T: // not supproted break; case K_UP: if (rowField != 0) { rowField--; drawGameField(rowField, colField); } break; case K_DOWN: if (rowField < 2) { rowField++; drawGameField(rowField, colField); } break; case K_LEFT: if (colField != 0) { colField--; drawGameField(rowField, colField); } break; case K_RIGHT: if (colField < 2) { colField++; drawGameField(rowField, colField); } break; case K_ENTER: break; case K_F5: // place ZERO try_to_make_move(rowField, colField, chPlayer); break; case K_F6: // place CROSS try_to_make_move(rowField, colField, chPlayer); break; } } pthread_cancel(ai_player); rk_mytermrestore(); mt_setcursor(1); mt_setstdcolor(); mt_gotoXY(39, 1); return 0; }