/* DISPAT.C - ¤¨á¯¥âç¥p § ¤ ç */ #include "complex.h" #include "screen.h" #include "graf.h" void color_b(byte); #pragma aux color_b = "mov bh,ah "\ "mov ah,10h"\ "mov al,1 "\ "int 10h "\ parm [ah] ; extern word_s help (word_s kc,word_s nscr); extern word_s sv_tab(word_s nscr); extern word_s protok(word_s nscr); extern word_s view_n(word_s nscr); extern word_s Graf(word_s kodgr,word_s nscr); extern word_s conturs(word_s kc,word_s nscr); extern word_s mnemos(word_s kc,word_s nscr); extern void list_task(void); extern void ptr_pool(); //extern void light(byte); extern void prnt_scr(void); extern void copy_arc(void); word_s var_func(word_s ck,word_s nscr); word_s var_obj(word nokey,word_s nscr); word_s list_func(word_s cdkey); void leg_off(void); extern byte curr_color_t[]; //extern byte indication[]; word_s sond=1; /*extern word_s key_bl;*/ extern struct sp_sk *speak_s; extern word_s c_fonT; extern void tr_date(); extern char time_nr[9]; extern char date_nr[9]; word_s cod; word_s contr[4]; char text_k[]="Š‚ˆ’€–ˆŸ"; /*--------------------------------------------------------------------*/ void dispat(word *scrn) { word_s cod,nscr; nscr=*scrn; while(!endrun) { cod=read_wpipe(scr_chn[nscr],1*HZ); if(var_obj(cod,nscr)) continue; /* ¥á«¨ ᬥ­  ®¡ê¥ªâ  */ while(cod=var_func(cod,nscr)) bar_(0,1,336,XL_ER-2,348); /* ¯®ª  ᬥ­  § ¤ ç */ } } /*-------------------------------------------------------------------*/ word_s var_func(word_s ck,word_s nscr) { #if (VIEW) if(ck==View1){tip_ekr="obz"; contr[nscr] = 0; return(cod = view_n(nscr));} #endif #if (SVTAB) if(ck==Kadr) {tip_ekr="svt"; contr[nscr] = 0; return(cod = sv_tab(nscr));} #endif #if (METR) if(ck==Metr) {tip_ekr="cnt"; return(cod = metr(ck,nscr));} #endif #if (MNEMOC) if(ck==Mnemo){tip_ekr="mn"; cod = mnemos(ck,nscr); c_fonT = 0; return cod;} #endif #if (PROTOC) if(ck==Prot) {tip_ekr="prt"; return(cod = protok(nscr));} #endif #if (KONTUR) if(ck==Kont) {tip_ekr="cnt"; contr[nscr] = 1; return(cod = conturs(ck,nscr));} #endif #if (GRAFIK) if(ck==K_MGN || ck==K_CUT || ck==K_MEC){tip_ekr="gr"; return(cod = Graf(ck,nscr));} #endif if(ck==Menu){tip_ekr="hlp"; return(cod = help(ck,nscr));} return 0; } /*-------------------------------------------------------------------*/ word_s var_obj(word nokey,word_s nscr) { word_s x, y, nob; if(nokey==O1){nob = 0; goto m1;} if(nokey==O2){nob = 1; goto m1;} if(nokey==O3){nob = 2; goto m1;} if(nokey==O4){nob = 3; goto m1;} if(nokey==O5){nob = 4; goto m1;} if(nokey==O6){nob = 5; goto m1;} if(nokey==O7){nob = 6; goto m1;} if(nokey==O8){nob = 7; goto m1;} if(nokey==O9){nob = 8; goto m1;} if(nokey==O10){nob = 9; goto m1;} if(nokey==O11){nob = 10; goto m1;} if(nokey==O12){nob = 11; goto m1;} if(nokey==O13){nob = 12; goto m1;} if(nokey==O14){nob = 13; goto m1;} if(nokey==O15){nob = 14; goto m1;} if(nokey==O16){nob = 15; goto m1;} return 0; m1:; if(nob == o_curr[nscr] || nob >= o_num) return 0; request_resource(ekran,0*HZ); eprintf(BLACK_,""); x = o_curr[nscr]%N_obj*72; y = o_curr[nscr]/N_obj*(L_obj+1); bar_(BLACK_,x,y+1,x+69,y+L_obj-1); fgtext(curr_color_t[o_curr[nscr]],x+1,y+2,(o_ptr+o_curr[nscr])->cipher); o_curr[nscr] = nob; x = o_curr[nscr]%N_obj*72; y = o_curr[nscr]/N_obj*(L_obj+1); bar_(WHITE_,x,y+1,x+69,y+L_obj-1); if(curr_color_t[o_curr[nscr]]==GREEN_) nob=GREEN_BR_; else nob=curr_color_t[o_curr[nscr]]; fgtext(nob,x+1,y+2,(o_ptr+o_curr[nscr])->cipher); release_resource(ekran); return 1; } /*-------------------------------------------------------------------*/ word_s list_func(word_s cdkey) { schedule(); #if (VIEW) if(cdkey==View1) return cdkey; #endif #if (SVTAB) if(cdkey==Kadr) return cdkey; #endif #if (METR) if(cdkey==Metr) return cdkey; #endif #if (MNEMOC) if(cdkey==Mnemo) return cdkey; #endif #if (PROTOC) if(cdkey==Prot) return cdkey; #endif #if (KONTUR) if(cdkey==Kont) return cdkey; #endif #if (GRAFIK) if(cdkey==K_MGN || cdkey==K_CUT || cdkey==K_MEC) return cdkey; #endif if(cdkey==Menu) return cdkey; if(cdkey==Quit_Sen) { if(sond) sond=0; else sond=1; return(0); } // if(cdkey==TST_INF){ grab_pcx(tip_ekr); return 0;} if(cdkey==TST_INF) {//if((t_wait_key(20L)>>8) != ENTER) return 0; ptr_pool(); list_task(); #if (COPY_ARH) copy_arc(); #endif } return 0; } /*-------------------------------------------------------------------*/ void leg_off(void) { byte k; for (k=0;k> 8)==0xff); /*c_write_wpipe(scr_chn[screen],cod);*/ if(0x02 & *(char *)0x417) cod |=0x80; if(cod==SEC1) {if(screen!=0 && disp_amount>1) { request_resource(ekran, 0L); color_b(0); screen=set_screen(0); color_b(7); release_resource(ekran); } continue; } if(cod==SEC2) {if(screen!=1 && disp_amount>1) { request_resource(ekran, 0L); color_b(0); screen=set_screen(1); color_b(7); release_resource(ekran); } continue; } if(cod==SEC3) {if(screen!=2 && disp_amount>2) { request_resource(ekran, 0L); color_b(0); screen=set_screen(2); color_b(7); release_resource(ekran); } continue; } if(cod==SEC4) {if(screen!=3 && disp_amount>3) { request_resource(ekran, 0L); color_b(0); screen=set_screen(3); color_b(7); release_resource(ekran); } continue; } if(cod==Quit_S) {tsk_cli(); tsk_outp(0x61,(byte)(tsk_inp(0x61) & 0xfc)); tsk_sti(); if(sond==2) { sond=1; #if (AL_PR) if(!take_printer(2L)) { tr_date(); prt_byte(18); for(k=0;k<9;k++){ prt_byte(*(date_nr+k)); } prt_byte(' '); for(k=0;k<9;k++){ prt_byte(*(time_nr+k)); } prt_byte(' '); for(k=0;k<9;k++){ prt_byte(*(text_k+k)); } prt_byte('\n'); free_printer(); } #endif } continue; } if(cod==Quit_B) { if(t_kbd)leg_off(); for(i=0; i < c_num; i++) for(ii=0; ii < (c_ptr+i)->num_ap; ii++) ((c_ptr+i)->a_ptr+ii)->glimmer=0; for(i=0;i < o_num;i++) (o_ptr+i)->glimmer=0; } #if (SPEAK) if(cod==Quit_SP){speak_s->quit=1; continue;} #endif #if (PRINTER) if(cod==PR_SCR) prnt_scr(); #endif if(cod==PR_SCR1) grab_pcx(tip_ekr); if(cod==SWITH_ON) { if(t_kbd){t_kbd=0; Kbd_AllLight_OFF(); /*light(55);*/} else{ t_kbd=1; for(i=0;i>8) != ENTER) continue; if(t_kbd) Kbd_AllLight_OFF();/*light(55);*/ return;} c_write_wpipe(scr_chn[screen],cod); } } /*-------------------------------------------------------------------*/