home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / bbs / jet_conf / program.c < prev    next >
C/C++ Source or Header  |  1993-05-09  |  4KB  |  145 lines

  1. /*
  2.  * PROGRAM.C
  3.  *
  4.  * main-loop-module of jet_conf.prg;
  5.  *
  6.  */
  7.  
  8. /*--- includes              ---*/
  9.  
  10. #include "import.h"
  11. #include <MGLOBAL.H>
  12. #include <MYDIAL.H>
  13. #include <NKCC.H>
  14. #include "misc.h"
  15. #include "jet_conf.h"
  16. #include "resource.h"
  17. #include "hndlmenu.h"
  18.  
  19. #include "export.h"
  20. #include "program.h"
  21.  
  22. /*--- defines               ---*/
  23.  
  24. /*--- types                 ---*/
  25.  
  26. /*--- variables             ---*/
  27.  
  28. /*--- prototypes            ---*/
  29.  
  30. LOCAL    VOID    hdle_keybd        ( MKINFO *mk, WORD buffer[], WORD * );
  31. LOCAL    BOOLEAN hdle_mesag        ( WORD msgbuffer[] );
  32.  
  33. /*--- functions             ---*/
  34.  
  35. /**-----------------------------------------------------------------------------
  36.  ** Funktionsname:    GLOBAL WORD program( VOID )
  37.  **        ->    nichts
  38.  **        <-    Exitcode für das Programm.
  39.  **
  40.  ** Bei der Funktion handelt es sich um die Hauptschleife des Programms
  41.  ** SEMPER.PRG.
  42.  **/
  43. GLOBAL WORD program( VOID )
  44. {
  45.     BOOLEAN    done = FALSE;
  46.     WORD    events;
  47.     EVENT    EvntStruct;    /* für EvntMulti, PureC special! */
  48.     MKINFO    mk;                /* für diverse Dinge ... */
  49.  
  50.     /* Erst einmal das Menü darstellen und Zeit korrigieren: */
  51.     hide_mouse( );
  52.     wind_update( BEG_UPDATE );
  53.     menu_bar( menutree, 1 );
  54.     wind_update( END_UPDATE );
  55.     show_mouse( );
  56.  
  57.     /* Mauszeiger sollte Pfeil sein: */
  58.     graf_mouse( 0, 0 );
  59.  
  60.     /* EvntStruct initialisieren: */
  61.     EvntStruct.ev_mflags    = MU_MESAG|MU_KEYBD;
  62.     EvntStruct.ev_mbclicks  = EvntStruct.ev_bmask     = EvntStruct.ev_mbstate = 0;
  63.     EvntStruct.ev_mm1flags  = EvntStruct.ev_mm1x      = EvntStruct.ev_mm1y    = EvntStruct.ev_mm1width = EvntStruct.ev_mm1height = 0;
  64.     EvntStruct.ev_mm2flags  = EvntStruct.ev_mm2x      = EvntStruct.ev_mm2y    = EvntStruct.ev_mm2width = EvntStruct.ev_mm2height = 0;
  65.     EvntStruct.ev_mtlocount = EvntStruct.ev_mthicount = 0;
  66.  
  67.     while( !done )
  68.     {
  69.         events = EvntMulti( &EvntStruct );
  70.  
  71.         /* Rückgabewerte in MKINFO-Struktur sichern: */
  72.         mk.mox       = EvntStruct.ev_mmox;
  73.         mk.moy       = EvntStruct.ev_mmoy;
  74.         mk.mobutton  = EvntStruct.ev_mmobutton;
  75.         mk.kstate    = EvntStruct.ev_mmokstate;
  76.         mk.scan_code = EvntStruct.ev_mkreturn;
  77.         mk.breturn   = EvntStruct.ev_mbreturn;
  78.         mk.shift     = mk.ctrl = mk.alt = 0;
  79.         /* normieren ... */
  80.         mk.kreturn   = normkey( mk.kstate, EvntStruct.ev_mkreturn );
  81.         if( mk.kreturn & NKF_SHIFT )
  82.             mk.kreturn |= NKF_SHIFT;
  83.         mk.kreturn  &= ~NKF_CAPS;
  84.         mk.shift     = ( mk.kstate & ( K_RSHIFT | K_LSHIFT ) ) != 0;
  85.         mk.ctrl      = ( mk.kstate & K_CTRL ) != 0;
  86.         mk.alt       = ( mk.kstate & K_ALT ) != 0;
  87.  
  88.         /* aufgetretenes Ereignis abarbeiten: */
  89.         if( events & MU_KEYBD )
  90.             hdle_keybd( &mk, &EvntStruct.ev_mmgpbuf[0], &events );
  91.         if( events & MU_MESAG )
  92.             done = hdle_mesag( &EvntStruct.ev_mmgpbuf[0] );
  93.     }
  94.  
  95.     /* Menü wieder löschen: */
  96.     hide_mouse( );
  97.     wind_update( BEG_UPDATE );
  98.     menu_bar( menutree, 0 );
  99.     wind_update( END_UPDATE );
  100.     show_mouse( );
  101.  
  102.     return( 0 );
  103. }
  104.  
  105. /**-----------------------------------------------------------------------------
  106.  ** Funktionsname:    VOID hdle_keybd( MKINFO *mk, WORD buffer, WORD *evnt );
  107.  **        ->    nichts
  108.  **        <-    nichts
  109.  **
  110.  ** Abarbeiten von MU_KEYBD-Ereignissen.
  111.  **/
  112. LOCAL VOID hdle_keybd( MKINFO *mk, WORD buffer[], WORD *evnt )
  113. {
  114.     WORD item, title;
  115.  
  116.     if( my_menu_key( menutree, mk, &title, &item ) != 0 )
  117.     {
  118.         *evnt     |= MU_MESAG;
  119.         buffer[0]  = 10;
  120.         buffer[3]  = title;
  121.         buffer[4]  = item;
  122.  
  123.         menu_tnormal( menutree, title, 0 );
  124.     }
  125.  
  126.     return;
  127. }
  128.  
  129. /**-----------------------------------------------------------------------------
  130.  ** Funktionsname:    LOCAL BOOLEAN hdle_mesag( VOID )
  131.  **        ->    nichts
  132.  **        <-    TRUE, wenn das Programm beendet werden soll, sonst FALSE.
  133.  **
  134.  ** Abarbeiten von MU_MESAG-Ereignissen.
  135.  **/
  136. LOCAL BOOLEAN hdle_mesag( WORD buffer[] )
  137. {
  138.     WORD Ret=0;
  139.  
  140.     if( buffer[0] == MN_SELECTED )
  141.         Ret = mn_selected( buffer[3], buffer[4] );
  142.     
  143.     return( Ret == -1 );
  144. }
  145.