home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 1
/
crawlyvol1.bin
/
bbs
/
jet_conf
/
program.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-05-09
|
4KB
|
145 lines
/*
* PROGRAM.C
*
* main-loop-module of jet_conf.prg;
*
*/
/*--- includes ---*/
#include "import.h"
#include <MGLOBAL.H>
#include <MYDIAL.H>
#include <NKCC.H>
#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 für 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; /* für EvntMulti, PureC special! */
MKINFO mk; /* für 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 );
/* Rückgabewerte 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 );
}