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;
}
Exemple #2
0
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;
}