/* Dialog-Beispielprogramm zur EnhancedGEM-Library Version 2.10 (c) 1994 C. Grunenberg (l„uft nur als Programm) */ #include #include #include #include "scroller.c" #include "dialdemo.h" /* Makro zum einfacheren Ermitteln der X_TEXT-Struktur */ #define get_xtext(tree,obj) ((X_TEXT *) tree[obj].ob_spec.userblk->ub_parm) char *rsc = "dialdemo.rsc"; char *entry = " DialDemo"; char *xacc_name = "DialogDemo"; char *av_name = "DIALDEMO"; char *title = "DialogDemo"; /* Fenstertitel */ char *chg_title = "* DialogDemo"; /* - " - nach Ver„nderung */ char *small_title = "DialDemo"; /* - " - im ikonifizierten Zustand */ /* Text fr die Beispiel-Alert-Box */ char *alert_text = "_ Erweiterte Alertboxen: ||"\ " Diese k”nnen bis zu 16 Zeilen Text sowie|"\ " 5 Buttons, welche ber Hotkeys bedient|"\ " werden k”nnen, enthalten.|"\ " Neben 18 vordefinierten Icons k”nnen auch|"\ " benutzerdefinierte Icons beliebiger Gr”že|"\ " verwendet werden.||"\ "!@ Zus„tzlich kann jede Zeile mit|"\ "~ Textattributen versehen werden!"; /* ben”tigte Prototypen */ void HandleDialog(void); void do_alert(OBJECT *,int,int,int,int); void do_help(OBJECT *,int,int,int,int); void val_2_str(char *dest,long val); /* Hilfetext und ben”tigte Variablen/Strukturen */ extern char *help[]; extern int help_lines,line_help_h,view_help_lines; extern int old_line,first_line,scroll_help; extern USERBLK helpblk; /* Zeiger auf Objektb„ume sowie DIAINFO-Strukturen fr Dialoge */ DIAINFO *ex_info; /* aktueller Dialog nach X_Form_Do */ OBJECT *icon_tree; /* benutzer-definiertes Alert-Box-Icon */ OBJECT *menu; /* Drop-Down-Men */ OBJECT *dialog_tree, *help_tree, *text_tree, *demo_tree; OBJECT *alerts_tree, *frames_tree, *edit_tree, *xacc_tree; DIAINFO dialog_info, help_info, text_info, demo_info; DIAINFO alerts_info, frames_info, edit_info, xacc_info; /* Struktur fr Popup-Funktion initialisieren */ POPUP pop = { &dialog_info,0l,POPINFO,POPBTN,POPCYCLE,TRUE,TRUE }; /* System-Zeit bei Programmstart (in Milisekunden) */ long start_time; /* Zeitpunkt des letzten Timer-Events (- " -) */ long last_timer2,last_timer3,last_timer4; /* Buffer fr Text-Scroller */ char scroller[] = " "; int scroll_pos = 0; /* Position des Text-Scrollers */ /* Hotkeys fr Slider */ SLKEY sl_help_keys[] = { { sl_key(SCANUP,0), 0, SL_UP }, { sl_key(SCANDOWN,0), 0, SL_DOWN }, { sl_key(SCANUP,0), K_RSHIFT|K_LSHIFT, SL_PG_UP }, { sl_key(SCANDOWN,0), K_RSHIFT|K_LSHIFT , SL_PG_DN }, { sl_key(SCANUP,0), K_CTRL, SL_START }, { sl_key(SCANDOWN,0), K_CTRL, SL_END }, { sl_key(SCANHOME,0), 0, SL_START }, { sl_key(SCANHOME,0), K_RSHIFT|K_LSHIFT, SL_END} }; SLKEY sl_alert_keys[] = { { sl_key(SCANLEFT,0), 0, SL_UP }, { sl_key(SCANRIGHT,0), 0, SL_DOWN }, { sl_key(CTRLLEFT,0), K_CTRL, SL_START }, { sl_key(CTRLRIGHT,0), K_CTRL, SL_END }}; /* Strukturen fr Slider im Hilfe-Dialog */ SLINFO sl_help = {&help_info,HELPPAR,HELPSLID,HELPUP,HELPDOWN,0,0,0,VERT_SLIDER,SL_LINEAR,100,0,do_help,&sl_help_keys[0],8}, *sl_help_list[] = {&sl_help,NULL}; /* Strukturen fr Slider im Alert-Dialog */ SLINFO sl_alert = {&alerts_info,PARENT,SLIDE,LEFT,RIGHT,0,0,X_ICN_MAX+2,HOR_SLIDER,SL_LINEAR,100,0,do_alert,&sl_alert_keys[0],4}, *sl_alert_list[] = {&sl_alert,NULL}; /*********************************************************************** Funktionen werden von graf_rt_slider() aufgerufen, sobald sich die Sliderposition ge„ndert hat. Dadurch k”nnen entsprechende Objekte neu gezeichnet oder gesetzt werden ************************************************************************/ void do_alert(OBJECT *obj,int pos,int prev,int max_pos,int top) { reg char *text=ob_get_text(obj,0,0); reg int val=pos; /* Slider-Wert in String umrechnen */ if (val==0) strcpy(text,"None"); else if (val==(X_ICN_MAX+2)) strcpy(text,"User"); else val_2_str(text,val); } void do_help(OBJECT *obj,int pos,int prev,int max_pos,int top) { old_line = prev; first_line = pos; scroll_help = TRUE; ob_draw_chg(&help_info,HELPVIEW,NULL,FAIL,top); scroll_help = 0; } /*********************************************************************** Long-Wert in Dezimal-String konvertieren ***********************************************************************/ long digits[] = {10000,1000,100,10}; void val_2_str(char *dest,long val) { reg long *d = digits,x; reg int i,all = FALSE; for (i=0;i<4;i++) { x = *d++; if (all || val>=x) { *dest++ = val/x + '0'; val %= x; all = TRUE; } } *dest++ = val + '0'; *dest++ = '\0'; } /*********************************************************************** Objekte des Xacc/AV-Dialoges setzen und neuzeichnen ***********************************************************************/ void set_xacc_av(void) { reg XAcc *xacc; reg int first,xacc_cnt=0,av_cnt=0; static int list[] = {XACCCNT,AVCNT,AVSERVER,0}; /* erste Applikation suchen */ first = 1; while ((xacc=find_app(first))!=NULL) { /* XAcc-Applikation? */ if (xacc->flag & XACC) xacc_cnt++; /* AV-Applikation? */ if (xacc->flag & AV) av_cnt++; /* n„chste Applikation suchen */ first=0; } val_2_str(ob_get_text(xacc_tree,XACCCNT,0),xacc_cnt); val_2_str(ob_get_text(xacc_tree,AVCNT,0),av_cnt); ob_set_text(xacc_tree,AVSERVER,(AvServer>=0) ? "AV-Server vorhanden" : "Kein AV-Server"); /* ...und Objekte neuzeichnen, sofern Dialog ge”ffnet */ ob_draw_list(&xacc_info,list,NULL); } /*********************************************************************** Alle Dialoge schliežen sowie optional Beenden der Applikation (Menleiste l”schen, Resource freigeben, Abmeldung bei AES und VDI) ***********************************************************************/ void ExitExample(int all) { /* alle ge”ffneten Dialoge schliežen */ close_all_dialogs(); if (all) /* Menleiste entfernen, Resource freigeben, Abmeldung bei AES, VDI und Protokollen und Programm beenden */ close_rsc(0); } /*********************************************************************** Resource und Objektb„ume initialsieren ***********************************************************************/ void init_resource(void) { X_TEXT *text; OBJECT *obj; int i; /* Adressen der Objektb„ume (Dialoge,Mens,Popups) ermitteln */ rsrc_gaddr(R_TREE, POP, &pop.p_menu); /* Popup-Men */ rsrc_gaddr(R_TREE, MENU, &menu); /* Pull-Down-Men */ rsrc_gaddr(R_TREE, EGEMICON, &iconified); /* ikonifizierte Darstellung */ rsrc_gaddr(R_TREE, INFODIAL, &demo_tree); rsrc_gaddr(R_TREE, DIALOG, &dialog_tree); rsrc_gaddr(R_TREE, TEXTDIAL, &text_tree); rsrc_gaddr(R_TREE, ALERTS, &alerts_tree); rsrc_gaddr(R_TREE, RAHMEN, &frames_tree); rsrc_gaddr(R_TREE, EDITDEMO, &edit_tree); rsrc_gaddr(R_TREE, HELPDIAL, &help_tree); rsrc_gaddr(R_TREE, ALERTICN, &icon_tree); rsrc_gaddr(R_TREE, XACCDEMO, &xacc_tree); /* erweiterte Objekte sowie Images/Icons anpassen */ for (i=0;i<=XACCDEMO;i++) { rsrc_gaddr(R_TREE, i, &obj); fix_objects(obj,TEST_SCALING|DARK_SCALING,8,16); } /* Zeichensatz und Gr”že des GDOS-Attribut-Texts setzen */ text = get_xtext(text_tree,GDOSTEXT); text->font_id = 0; text->font_size = -9; /* VDI-Schreibmodus des XOR-Textes setzen */ get_xtext(text_tree,XORTEXT)->mode = MD_XOR; /* Text-Scroller setzen */ ob_set_text(demo_tree,SCROLLER,scroller); /* Erstellungsdatum und Versionsnummer im Informationsdialog setzen */ ob_set_text(demo_tree,DATE,__DATE__); strcpy(ob_get_text(demo_tree,VERS,FALSE)+8,E_GEM_VERSION); /* Hilfe-Dialog auf benutzerdefiniertes Objekt setzen */ obj = &help_tree[HELPVIEW]; obj->ob_type = G_USERDEF; obj->ob_spec.userblk = &helpblk; /* Slider-Struktur und ben”tigte Variablen zur Darstellung setzen */ i = obj->ob_height; line_help_h = gr_sh+2; sl_help.sl_page = view_help_lines = (i/line_help_h)-1; sl_help.sl_max = help_lines; /* Koordinaten des Fenster-Objektes anpassen */ obj->ob_y += (i - (obj->ob_height = view_help_lines*line_help_h))>>1; /* Koordinaten der Slider-Objekte anpassen */ help_tree[HELPUP].ob_x -= 2; help_tree[HELPUP].ob_y += 2; help_tree[HELPDOWN].ob_x -= 2; help_tree[HELPDOWN].ob_y -= 2; obj = &help_tree[HELPPAR]; obj->ob_x -= 2; obj->ob_y = help_tree[HELPUP].ob_y + help_tree[HELPUP].ob_height + 1; obj->ob_height = help_tree[HELPDOWN].ob_y - obj->ob_y; /* Help-Slider-Objekte initialisieren */ graf_set_slider(&sl_help,help_tree,GRAF_SET); /* Alertbox-Slider-Objekte initialisieren */ graf_set_slider(&sl_alert,alerts_tree,GRAF_SET); do_alert(&alerts_tree[SLIDE],sl_alert.sl_pos,0,0,0); /* XAcc/AV-Dialogobjekte initialisieren */ set_xacc_av(); /* (Eingabe-) Felder in verschiedenen Dialogen zurcksetzen */ ob_clear_edit(dialog_tree); ob_clear_edit(edit_tree); ob_get_text(xacc_tree,TIMEDEMO,TRUE); } /*********************************************************************** Dialog ”ffnen und in Liste der ge”ffneten Dialoge eintragen bzw. falls der Dialog schon ge”ffnet ist, diesen in den Vordergrund bringen. ***********************************************************************/ void OpenDialog(DIAINFO *info,OBJECT *tree,int dial_mode) { reg SLINFO **slider = NULL; reg char *name = title,*icon_name = small_title; reg int center = TRUE; switch (info->di_flag) { /* Fensterdialog bereits ge”ffnet ? */ case WINDOW: case WIN_MODAL: /* Dialog in den Vordergrund holen */ window_top(info->di_win); break; /* Dialog geschlossen ? */ case CLOSED: /* Dialog ”ffnen (zur Mausposition, keine Grow-Boxen) */ if (info==&help_info) { icon_name = name = "Hilfe"; slider = sl_help_list; } else if (info==&xacc_info) { /* XAcc/AV-Info-Dialog in linker, oberer Desktop-Ecke ”ffnen */ xacc_tree->ob_x = desk.g_x+2; xacc_tree->ob_y = desk.g_y+2; center = FAIL; } else if (info==&alerts_info) slider = sl_alert_list; if (open_dialog(tree,info,name,icon_name,NULL,center,FALSE,dial_mode,0,slider)==FALSE) /* Dialog konnte nicht ge”ffnet werden (z.B. keine Fenster mehr ver- fgbar */ xalert(1,1,X_ICN_ERROR,NULL,SYS_MODAL,BUTTONS_CENTERED,TRUE,title,"Keine freien Fenster mehr!","[Ok"); else if (info==&help_info) /* ansonsten Info-Zeile des Hilfe-Dialogs setzen */ window_info(help_info.di_win," Ein Fensterdialog mit Infozeile und Echtzeitschieber..."); } /* Verwaltung der ge”ffneten Dialoge u. Auswertung der Benutzeraktionen */ HandleDialog(); } /*********************************************************************** Menauswertungsroutine, welche bei Bedarf den zu einem Hotkey geh”renden Menpunkt ermittelt und die zu diesem Menpunkt geh”rende Funktion aus- fhrt ***********************************************************************/ /* Struktur, welche die vorhandenen Menpunkte (bzw. Buttons im Haupt- dialog) sowie die dazugeh”rigen Dialoge definiert */ typedef struct { int object,shortcut,state; /* Meneintrag, Hotkeytaste, -status */ DIAINFO *info; /* Zeiger auf DIAINFO-Struktur des Dialogs */ OBJECT **tree; /* Zeiger auf Objektbaum */ int mode; /* Art des Dialogs */ } MENUITEM; MENUITEM items[] = { {INFOBOX, 'I', K_CTRL, &demo_info, &demo_tree, AUTO_DIAL}, {QUIT, 'Q', K_CTRL, NULL, NULL, FAIL}, {ATTRMENU, 'T', K_CTRL, &text_info, &text_tree, AUTO_DIAL}, {EDITMENU, 'E', K_CTRL, &edit_info, &edit_tree, AUTO_DIAL}, {ALRTMENU, 'A', K_CTRL, &alerts_info, &alerts_tree, AUTO_DIAL}, {XACCMENU, 'X', K_CTRL, &xacc_info, &xacc_tree, WIN_DIAL}, {TITLMENU, 'R', K_CTRL, &frames_info, &frames_tree, AUTO_DIAL}, {FLYMENU, 'F', K_CTRL, &dialog_info, &dialog_tree, FLY_DIAL}, {WINMENU, 'D', K_CTRL, &dialog_info, &dialog_tree, WIN_DIAL}, {MODMENU, 'M', K_CTRL, &dialog_info, &dialog_tree, WIN_DIAL|MODAL}, {HELPMENU, 'H', K_CTRL, &help_info, &help_tree, WIN_DIAL|WD_INFO} }; #define ITEMS sizeof(items) int MenuSelect(int object,int scan,int state) { reg MENUITEM *item=items; reg int index,key; if (object<0) { /* Eintrag zu Tastatur-Ereignis ermitteln */ key = scan_2_ascii(scan,state); for (index=0;indexshortcut==key && item->state==state) break; } else { /* Eintrag zu Menpunkt ermitteln */ for (index=0;indexobject==object) break; } if (index>=ITEMS) return (FALSE); /* kein entsprechender Eintrag gefunden */ /* Menpunkte 'Fenster wechseln' und 'Fenster schliežen' werden inklusive der dazugeh”rigen Hotkeys automatisch verwaltet */ if (item->object==QUIT) ExitExample(1); /* Applikation beenden */ else OpenDialog(item->info,*item->tree,item->mode); /* Dialog ”ffnen */ return (TRUE); } /*********************************************************************** Verwaltung der ge”ffneten Dialoge und Auswertung der Benutzeraktionen ***********************************************************************/ static int already_handling = FALSE; void HandleDialog(void) { reg int double_click,exit; /* Wird die Verwaltung bereits bernommen? */ if (already_handling) return; else already_handling = TRUE; for (;;) { /* Auf Benutzeraktionen warten exit -> angew„hltes Objekt (Bit 15 = Doppelklick) ex_info -> Zeiger auf DIAINFO-Struktur des angew„hlten Dialogs */ exit = X_Form_Do(&ex_info); if (exit==W_CLOSED) /* Fenster-Closer -> Dialog schliežen */ close_dialog(ex_info,FALSE); else if (exit==W_ABANDON) /* Dialog wurde geschlossen, aber kein Objekt angew„hlt (z.B. AP_TERM), oder es waren keine Dialoge mehr ge”ffnet */ break; else { /* Doppelklick erfassen und aus Wert fr Exit-Objekt ausmaskieren */ exit ^= (double_click = exit & 0x8000); /* angew„hltes Objekt deselektieren und neu zeichnen */ ob_select(ex_info,ex_info->di_tree,exit,CLEAR_STATE,TRUE); /* Demonstrations-Dialog */ if (ex_info==&dialog_info) { switch (exit) { /* Popup-Infotext/-button/-cycleobjekt angew„hlt */ case POPINFO: case POPBTN: case POPCYCLE: /* Falls Cycle-Objekt angew„hlt wurde oder das Popup-Men mit Alternate-Shift-Hotkey aufgerufen wurde, n„chsten Eintrag ermitteln, ansonsten Popup aufrufen */ Popup(&pop,(exit==POPCYCLE || double_click) ? POPUP_CYCLE_CHK : POPUP_BTN_CHK, OBJPOS,0,0,NULL,FAIL); if (dialog_info.di_flag==WINDOW && dialog_info.di_win->name==title) /* neue Titelzeile des unmodalen Dialogs setzen */ window_name(dialog_info.di_win,chg_title,small_title); break; /* Hilfe-Button -> Hilfe-Dialog ”ffnen */ case HELP: OpenDialog(&help_info,help_tree,WIN_DIAL|WD_INFO); break; /* Suchen-Button -> Warnung (Disketten-Fehler) ausgeben */ case SEARCH: xalert(1,1,X_ICN_DISC_ERR,NULL,SYS_MODAL,BUTTONS_CENTERED,TRUE,title,"Keine Datei gefunden!","[Ok"); break; /* Ansonsten Dialog schliežen */ default: close_dialog(ex_info,FALSE); } } /* Alert-Boxen-Dialog */ else if (ex_info==&alerts_info && exit==DOALERT) { /* Alertbox entsprechend den Einstellungen darstellen */ BITBLK *user = NULL; int align,center,icon,modal; /* einheitliche Button-Breite? */ align = ob_isstate(alerts_tree,BTNWIDTH,SELECTED); /* System-modale Alert-Box ? */ modal = ob_isstate(alerts_tree,SYSMODAL,SELECTED) ? SYS_MODAL : APPL_MODAL; /* Ausrichtung der Buttons */ center = ob_radio(alerts_tree,ALERTOPT,FAIL); /* gewnschtes Icon */ icon = sl_alert.sl_pos; if (icon==0) icon = FAIL; /* kein Icon */ else if (icon==X_ICN_MAX+2) { /* benutzerdefiniertes Icon */ icon = FAIL; user = icon_tree[USERICON].ob_spec.bitblk; } else icon--; xalert(2,1,icon,user,modal,center,align,(modal==SYS_MODAL) ? NULL : title,alert_text,"[Huh-Huh|[This sucks!"); if (user) xalert(1,1,X_ICN_ERROR,NULL,SYS_MODAL,BUTTONS_CENTERED,TRUE,title,"That was cool!","[Yeah!"); } /* ansonsten Dialog schliežen */ else close_dialog(ex_info,FALSE); } } already_handling = FALSE; } /*********************************************************************** Initialisierungs-Routine, welche von X_Form_Do bzw. Event_Multi aufge- rufen wird und die Event-Struktur setzt sowie die Ereignisse, die von der Applikation ben”tigt werden, zurckgibt ***********************************************************************/ int InitMsg(XEVENT *evt,int events_available) { /* auf Nachrichten und Tastendrcke warten */ reg int flags = MU_MESAG|MU_KEYBD; /* Protokoll-Dialog ge”ffnet und 2. Timer verfgbar? */ if (xacc_info.di_flag>CLOSED && (events_available & MU_TIMER2)) { evt->ev_mt2count = 1000; /* ein Event pro Sekunde */ evt->ev_mt2last = last_timer2; flags |= MU_TIMER2; /* auf 2. Timer-Event warten */ } /* Informations-Dialog ge”ffnet und 3/4. Timer verfgbar? */ if (demo_info.di_flag>CLOSED) { /* Farbe vorhanden? */ if ((events_available & MU_TIMER3) && colors>2) { evt->ev_mt3count = 1000/3; /* 3 Events pro Sekunde */ evt->ev_mt3last = last_timer3; flags |= MU_TIMER3; /* auf 3. Timer-Event warten */ } if (events_available & MU_TIMER4) { evt->ev_mt4count = 1000/12; /* 12 Events pro Sekunde */ evt->ev_mt4last = last_timer4; flags |= MU_TIMER4; /* auf 4. Timer-Event warten */ } } /* ben”tigte und verfgbare Events zurckgeben */ return (flags & events_available); } /*********************************************************************** Ereignisauswertung (AES-Nachrichten, Tastendrcke, Timer ), welche sowohl von Event_Multi() als auch von X_Form_Do() aufgerufen wird ***********************************************************************/ int Messag(XEVENT *event) { reg X_TEXT *text; reg DIAINFO *info; reg int ev = event->ev_mwich,*msg = event->ev_mmgpbuf; reg int used = 0; /* 2. Timer-Event auswerten */ if (ev & MU_TIMER2) { last_timer2 = event->ev_mt2last; val_2_str(ob_get_text(xacc_tree,TIMEDEMO,0),(last_timer2-start_time)/1000); ob_draw(&xacc_info,TIMEDEMO); used |= MU_TIMER2; /* Timer ausgewertet */ } /* 3. Timer-Event auswerten */ if (ev & MU_TIMER3) { last_timer3 = event->ev_mt3last; text = get_xtext(demo_tree,DEDICATE); if (++text->color>=colors) text->color = 1; ob_draw(&demo_info,DEDICATE); used |= MU_TIMER3; /* Timer ausgewertet */ } /* 4. Timer-Event auswerten */ if (ev & MU_TIMER4) { last_timer4 = event->ev_mt4last; strcpy(&scroller[0],&scroller[1]); scroller[sizeof(scroller)-2] = scroll_text[scroll_pos++]; if (scroll_pos>=sizeof(scroll_text)) scroll_pos = 0; ob_draw(&demo_info,SCROLLER); used |= MU_TIMER4; /* Timer ausgewertet */ } /* Nachricht vom AES ? */ if (ev & MU_MESAG) { /* Nachrichtenereignis wurde ausgewertet */ used |= MU_MESAG; switch (*msg) { /* Meneintrag angeklickt ? */ case MN_SELECTED: /* Meneintrag deselektieren */ menu_select(msg[3],0); /* gewnschte Funktion ausfhren */ if (MenuSelect(msg[4],0,0)==FALSE) /* Nachricht konnte nicht ausgewertet werden (sollte NIE vorkommen) */ used &= ~MU_MESAG; break; /* Applikation beenden/rcksetzen */ case AP_TERM: ExitExample(1); break; /* Applikation hat sich an- oder abgemeldet */ case XACC_AV_INIT: case XACC_AV_EXIT: set_xacc_av(); break; /* Wurde eine Eingabe in einem Dialog vorgenommen oder ein Objekt (de-) selektiert? */ case OBJC_CHANGED: case OBJC_EDITED: info = *(DIAINFO **) &msg[4]; if (info!=&help_info && info->di_flag==WINDOW && info->di_win->name==title) /* neue Titelzeile des unmodalen Dialogs setzen */ window_name(info->di_win,chg_title,small_title); break; default: /* unbekannte Nachricht konnte nicht ausgewertet werden */ used &= ~MU_MESAG; } } /* Tastatur-Ereignis auswerten */ if ((ev & MU_KEYBD) && MenuSelect(FAIL,event->ev_mkreturn,event->ev_mmokstate)) used |= MU_KEYBD; /* Tastaturereignis wurde ausgewertet */ return (used); } void main() { /* Wurde die Demo als Accessory gestartet? */ if (!_app) exit(-1); /* Ja -> Demo beenden */ /* Start-Zeit setzen */ last_timer2 = last_timer3 = last_timer4 = start_time = clock()*5; /* Resource-File laden und Bibliothek sowie AES und VDI initialisieren (keine anwendungspezifische AV/VA/XAcc-Nachrichtenauswertung) */ if (open_rsc(rsc,entry,xacc_name,av_name,0,0,0)==TRUE) { /* Resource-Datei bzw. Objektb„ume initialisieren */ init_resource(); /* Routinen zur Ereignisauswertung anmelden */ Event_Handler(InitMsg,Messag); /* Hotkeys und Menpunkte fr Fenster wechseln/schliežen setzen */ CycleCloseWindows('W','U',CYCLE,CLOSE); /* Dialog-Optionen setzen, u.a. Hintergrundbedienung von Fensterdialogen u. Tastendrcke an Dialog unter Mauszeiger, Return selektiert DEFAULT-Objekt bei letztem Eingabefeld */ dial_options(TRUE,TRUE,FALSE,TRUE,FAIL,TRUE,FALSE,FALSE,TRUE); /* Dialog-Farben und Fllmuster setzen */ dial_colors(7,(colors>=16) ? YELLOW : WHITE,GREEN,RED,MAGENTA,BLUE,CYAN,RED); title_options(FALSE,RED,FALSE); /* Titel-Optionen setzen */ check_image(5,NULL); /* H„kchen als Image fr Check-Boxen */ menu_install(menu,TRUE); /* Pull-Down-Men anmelden */ /* XAcc/AV-Info-Dialog ”ffnen */ OpenDialog(&xacc_info,xacc_tree,WIN_DIAL); /* Auf Ereignis (Nachrichten/Tastendrcke) warten und dieses auswerten. In diesem Fall werden die ben”tigten Events be- reits durch die Funktionen InitMsg() und Messag() gesetzt und ausgewertet. Zus„tzlich k”nnte man natrlich hier noch wei- tere Events angeben, die speziell ausgewertet werden, oder den Event_Handler abmelden und alle Ereignisse hier auswerten. Dann mžte man allerdings die Funktion Event_Multi in eine Endlosschleife integrieren */ Event_Multi(NULL); /* und los geht's */ } }