/* * PROGRAM.C * * main-loop-module of jet_conf.prg; * */ /*--- includes ---*/ #include "import.h" #include #include #include #include "misc.h" #include "jet_conf.h" #include "resource.h" #include "hndlmenu.h" #include "export.h" #include "program.h" /*--- defines ---*/ /*--- types ---*/ /*--- variables ---*/ /*--- prototypes ---*/ LOCAL VOID hdle_keybd ( MKINFO *mk, WORD buffer[], WORD * ); LOCAL BOOLEAN hdle_mesag ( WORD msgbuffer[] ); /*--- functions ---*/ /**----------------------------------------------------------------------------- ** Funktionsname: GLOBAL WORD program( VOID ) ** -> nichts ** <- Exitcode fr das Programm. ** ** Bei der Funktion handelt es sich um die Hauptschleife des Programms ** SEMPER.PRG. **/ GLOBAL WORD program( VOID ) { BOOLEAN done = FALSE; WORD events; EVENT EvntStruct; /* fr EvntMulti, PureC special! */ MKINFO mk; /* fr diverse Dinge ... */ /* Erst einmal das Men darstellen und Zeit korrigieren: */ hide_mouse( ); wind_update( BEG_UPDATE ); menu_bar( menutree, 1 ); wind_update( END_UPDATE ); show_mouse( ); /* Mauszeiger sollte Pfeil sein: */ graf_mouse( 0, 0 ); /* EvntStruct initialisieren: */ EvntStruct.ev_mflags = MU_MESAG|MU_KEYBD; EvntStruct.ev_mbclicks = EvntStruct.ev_bmask = EvntStruct.ev_mbstate = 0; EvntStruct.ev_mm1flags = EvntStruct.ev_mm1x = EvntStruct.ev_mm1y = EvntStruct.ev_mm1width = EvntStruct.ev_mm1height = 0; EvntStruct.ev_mm2flags = EvntStruct.ev_mm2x = EvntStruct.ev_mm2y = EvntStruct.ev_mm2width = EvntStruct.ev_mm2height = 0; EvntStruct.ev_mtlocount = EvntStruct.ev_mthicount = 0; while( !done ) { events = EvntMulti( &EvntStruct ); /* Rckgabewerte in MKINFO-Struktur sichern: */ mk.mox = EvntStruct.ev_mmox; mk.moy = EvntStruct.ev_mmoy; mk.mobutton = EvntStruct.ev_mmobutton; mk.kstate = EvntStruct.ev_mmokstate; mk.scan_code = EvntStruct.ev_mkreturn; mk.breturn = EvntStruct.ev_mbreturn; mk.shift = mk.ctrl = mk.alt = 0; /* normieren ... */ mk.kreturn = normkey( mk.kstate, EvntStruct.ev_mkreturn ); if( mk.kreturn & NKF_SHIFT ) mk.kreturn |= NKF_SHIFT; mk.kreturn &= ~NKF_CAPS; mk.shift = ( mk.kstate & ( K_RSHIFT | K_LSHIFT ) ) != 0; mk.ctrl = ( mk.kstate & K_CTRL ) != 0; mk.alt = ( mk.kstate & K_ALT ) != 0; /* aufgetretenes Ereignis abarbeiten: */ if( events & MU_KEYBD ) hdle_keybd( &mk, &EvntStruct.ev_mmgpbuf[0], &events ); if( events & MU_MESAG ) done = hdle_mesag( &EvntStruct.ev_mmgpbuf[0] ); } /* Men wieder l”schen: */ hide_mouse( ); wind_update( BEG_UPDATE ); menu_bar( menutree, 0 ); wind_update( END_UPDATE ); show_mouse( ); return( 0 ); } /**----------------------------------------------------------------------------- ** Funktionsname: VOID hdle_keybd( MKINFO *mk, WORD buffer, WORD *evnt ); ** -> nichts ** <- nichts ** ** Abarbeiten von MU_KEYBD-Ereignissen. **/ LOCAL VOID hdle_keybd( MKINFO *mk, WORD buffer[], WORD *evnt ) { WORD item, title; if( my_menu_key( menutree, mk, &title, &item ) != 0 ) { *evnt |= MU_MESAG; buffer[0] = 10; buffer[3] = title; buffer[4] = item; menu_tnormal( menutree, title, 0 ); } return; } /**----------------------------------------------------------------------------- ** Funktionsname: LOCAL BOOLEAN hdle_mesag( VOID ) ** -> nichts ** <- TRUE, wenn das Programm beendet werden soll, sonst FALSE. ** ** Abarbeiten von MU_MESAG-Ereignissen. **/ LOCAL BOOLEAN hdle_mesag( WORD buffer[] ) { WORD Ret=0; if( buffer[0] == MN_SELECTED ) Ret = mn_selected( buffer[3], buffer[4] ); return( Ret == -1 ); }