int cmd_sleep(char param[]) { int delay; if (!strlen(param)) { #if LANG_ENG printf(" sleep <time in the 1/100 of second>\n\r"); #elif LANG_RUS printf(" sleep <интервал в сотых доляx секунды>\n\r"); #endif return TRUE; } delay = _atoi(param); kol_sleep((unsigned)delay); return TRUE; }
int program_console(int pid) { char name[32]; char *buffer; int result; int i; char command; int size; int is_end; itoa(pid, name); strcat(name, "-SHELL"); buffer = NULL; for (i = 0; i < 30; i++) { result = kol_buffer_open(name, SHM_OPEN | SHM_WRITE, 0, &buffer); if (buffer != NULL) break; kol_sleep(2); } if (buffer == NULL) return 0; else size = result; is_end = 0; for (;;) { command = *(buffer); switch (command) { case SC_EXIT: *buffer = SC_OK; is_end = 1; break; case SC_OK: kol_sleep(5); break; case SC_CLS: con_cls(); *buffer = SC_OK; break; case SC_PUTC: printf("%c", *(buffer+1)); *buffer = SC_OK; break; case SC_PUTS: printf("%s", buffer+1 ); *buffer = SC_OK; break; case SC_GETC: *(buffer+1) = (char) getch() ; *buffer = SC_OK; break; case SC_GETS: gets(buffer+1, size-2); *buffer = SC_OK; break; default: #if LANG_ENG printf (" Error in console application.\n\r"); #elif LANG_RUS printf (" Ошибка в консольном приложении.\n\r"); #endif return 0; }; if (is_end) { printf("\n\r"); return 1; } } return 9; }
void kol_main() { BoardPuts("Hello, Heliothryx!\n"); int err; int version =-1; if((err = InitSound(&version)) !=0 ){ BoardPuts("Sound Error 1\n"); }; if( (SOUND_VERSION>(version&0xFFFF)) || (SOUND_VERSION<(version >> 16))){ BoardPuts("Sound Error 2\n"); } unsigned event; unsigned key; unsigned key_up; unsigned btn, btn_state; unsigned pos, x, y; int gx, gy; //srand(kol_system_time_get()); kol_event_mask(0xC0000027); // mouse and keyboard kol_key_mode_set(1); area_width = 512; area_height = 512; // Initializing variables window_width = FIX_MENUETOS_LEGACY_ONE_PIXEL_BORDER_GAP_BUG + area_width + 10; // 2 x 5px border window_height = FIX_MENUETOS_LEGACY_ONE_PIXEL_BORDER_GAP_BUG + kol_skin_height() + area_height + 5; // bottom 5px border //rs_main_init(); GameInit(); wnd_draw(); fps = 0; unsigned int tick_start = kol_time_tick(); unsigned int tick_current = tick_start; unsigned int tick_last = tick_start; unsigned int fps_counter = 0; int wait_time; int already_drawn = 0; float xf; float xfs; int xfs_i; while (1) { tick_last = tick_current; tick_current = kol_time_tick(); dt = tick_current - tick_last; tick_last = tick_current; already_drawn = 0; while (( event = kol_event_wait_time(1) )) { //while (( event = kol_event_wait() )) { switch (event) { case 1: wnd_draw(); // <--- need to clear event! already_drawn = 1; break; case 2: key = kol_key_get(); key = (key & 0xff00)>>8; key_up = key & 0x80; key = key & 0x7F; if (key_up) { GameKeyUp(key); //rs_app.OnKeyUp(key); } else { GameKeyDown(key); //rs_app.OnKeyDown(key, 1); }; break; case 3: switch ((kol_btn_get() & 0xff00)>>8) { case 1: // close button kol_exit(); case 2: // 'new' button //init_board(); //wnd_draw(); break; } break; case 6: btn = kol_mouse_btn() & 1; // read mouse button (only left) pos = kol_mouse_posw(); // read mouse position x = pos / 65536; y = pos % 65536; /*if (x > window_width) x=0; if (y > window_height) y=0;*/ if (btn && (!btn_state)) { //rs_app.OnMouseDown(x,y); GameMouseDown(x, y); BoardPuts("MouseDown!\n"); } else if ( (!btn) && btn_state ) { //rs_app.OnMouseUp(x,y); GameMouseUp(x, y); } else { //GameMouseMove(x, y); }; btn_state = btn; break; } }; if (!already_drawn) { wnd_draw(); }; fps_counter++; tick_current = kol_time_tick(); if (tick_current > tick_start+100) { fps = fps_counter; fps_counter = 0; tick_start += 100; }; draw_dt = tick_current - tick_last; wait_time = (100/GAME_REQUIRED_FPS) - draw_dt; if (wait_time <= 0) { wait_time = 1; }; kol_sleep(wait_time); } GameTerm(); kol_exit(); }