/*! event in main menu */ void event_pmenu(int *quit) { int i; switch(buf[4]) { case M_ALERTE : big_alert(2, ALERT, "", TRUE); menu_tnormal(adr_menu, T_FICHIER, 1); break; case M_WMENU : win[WINDMENU].w_pal =(Palette *)malloc(work_display.n_color *sizeof(Palette)); for(i = 0 ; i < work_display.n_color ; i++) { win[WINDMENU].w_pal[i][0] = work_display.palette[i][0]; win[WINDMENU].w_pal[i][1] = work_display.palette[i][1]; win[WINDMENU].w_pal[i][2] = work_display.palette[i][2]; } open_window(WINDMENU, WTYP_PICT, WATR_CURRB, bureau.xd +(bureau.wd / 5), bureau.yd +(bureau.hd / 5), 320, 150, 100, 100, 200, 200, 16, 16, WFARROW, THIN_CROSS, winicn, ZERO, close_wmenu, get_string(TIT_MENU), "", (long) bureau.wd,(long) bureau.hd, TRUE, FALSE, W_MENU, 10, BLACK); menu_tnormal(adr_menu, T_FENETRES, 1); break; case M_QUITTER : *quit = TRUE; menu_tnormal(adr_menu, T_FICHIER, 1); break; } /* switch case */ } /* endof event_pmenu */
/** * Handle an menu item event */ int deskmenu_dispatch_item(short title, short item) { int i=0; int retval = 0; OBJECT * menu_root = deskmenu_get_obj_tree(); menu_tnormal(menu_root, item, 1); menu_tnormal(menu_root, title, 1); menu_bar(menu_root, 1); // legacy code, is this sensible?: /* while( gw ) { window_set_focus( gw, WIDGET_NONE, NULL ); gw = gw->next; } */ while (menu_evnt_tbl[i].rid != -1) { if (menu_evnt_tbl[i].rid == item) { if (menu_evnt_tbl[i].menu_func != NULL) { menu_evnt_tbl[i].menu_func(item, title, NULL); } break; } i++; } return(retval); }
/*! Display info about BIG */ void aff_infos(void) { OBJECT *adr; int quit = FALSE, index, tit, menuf = FALSE; MFDB img; if(buf[0] == BEV_WMENU) { index = buf[5]; tit = buf[3]; menuf = TRUE; } if(_app) menu_tnormal(adr_menu, T_BUREAU, 0); /* Inverser titre */ wind_update(BEG_MCTRL); /* Bloquer menu */ adr = ir_trindex[INFOS]; if(work_display.n_color >= 16) { adr->ob_spec.obspec.interiorcol = 8; adr->ob_spec.obspec.fillpattern = 7; } formm_draw(adr, BLANK, FALSE, &img); do { dialog(DLG_FORM, adr, FALSE, FALSE, BLANK, &img, FALSE); if(object == INF_SORTIE) quit = TRUE; } while(NOT quit); formm_undraw(adr, &img); wind_update(END_MCTRL); /* Débloquer menu */ if(_app) menu_tnormal(adr_menu, T_BUREAU, 1); /* Inverser titre */ if(menuf) { win[index].w_bar[tit].ob_state &= ~SELECTED; draw_object(tit, index); } } /* endof aff_infos() */
/*! free popup event */ void event_freepu(void) { int i; switch(buf[4]) { case PUL_ALERT : if(_app) menu_tnormal(adr_menu, T_FICHIER, 0); else { win[WINDACC].w_bar[T_FICHIER + 3].ob_state |= SELECTED; draw_object(T_FICHIER + 3, WINDACC); } big_alert(2, ALERT, "", TRUE); if(_app) menu_tnormal(adr_menu, T_FICHIER, 1); else { win[WINDACC].w_bar[T_FICHIER + 3].ob_state &= ~SELECTED; draw_object(T_FICHIER + 3, WINDACC); } break; case PUL_WMENU : if(_app) menu_tnormal(adr_menu, T_FENETRES, 0); else { win[WINDACC].w_bar[T_FENETRES + 3].ob_state |= SELECTED; draw_object(T_FENETRES + 3, WINDACC); } if(win[WINDMENU].w_hg <= ZERO) { win[WINDMENU].w_pal =(Palette *)malloc(work_display.n_color * sizeof(Palette)); for(i = 0 ; i < work_display.n_color ; i++) { win[WINDMENU].w_pal[i][0] = work_display.palette[i][0]; win[WINDMENU].w_pal[i][1] = work_display.palette[i][1]; win[WINDMENU].w_pal[i][2] = work_display.palette[i][2]; } open_window(WINDMENU, WTYP_PICT, WATR_CURRB, bureau.xd +(bureau.wd / 5), bureau.yd +(bureau.hd / 5), 320, 150, 100, 100, 200, 200, 16, 16, WFARROW, THIN_CROSS, winicn, ZERO, close_wmenu, get_string(TIT_MENU), "", (long) bureau.wd,(long) bureau.hd, TRUE, FALSE, W_MENU, 10, BLACK); } else { buf[3] = win[WINDMENU].w_hg; (*win[WINDMENU].w_top)(); } if(_app) menu_tnormal(adr_menu, T_FENETRES, 1); else { win[WINDACC].w_bar[T_FENETRES + 3].ob_state &= ~SELECTED; draw_object(T_FENETRES + 3, WINDACC); } break; } /* end switch case */ } /* event_freepu */
/*! Free form */ void formulaire(void) { OBJECT *adr; int quit = FALSE; char *adr_bakrsc = 0L; /* ptr form state */ MFDB img; img.fd_addr = NULL; if(_app) menu_tnormal(adr_menu, T_FICHIER, 0); /* Inverser titre */ else { win[WINDACC].w_bar[T_FICHIER + 3].ob_state |= SELECTED; draw_object(T_FICHIER + 3, WINDACC); } wind_update(BEG_MCTRL); /* Bloquer menu */ adr = ir_trindex[FORMULAIRE]; if(work_display.n_color >= 16) { adr->ob_spec.obspec.interiorcol = 8; adr->ob_spec.obspec.fillpattern = 7; adr[TXT1].ob_spec.tedinfo->te_color = 8; adr[TXT1].ob_spec.tedinfo->te_color |= 7 << 4; adr[TXT1].ob_spec.tedinfo->te_color |=(1 << 8); adr[TXT2].ob_spec.tedinfo->te_color = 8; adr[TXT2].ob_spec.tedinfo->te_color |= 7 << 4; adr[TXT2].ob_spec.tedinfo->te_color |=(1 << 8); } bak_rsc(adr, &adr_bakrsc); formm_draw(adr, TXT1, TRUE, &img); do { if(dialog(DLG_FORM, adr, FALSE, FALSE, BLANK, &img, TRUE)) { switch(object) { case P_CONFIRME : quit = TRUE; break; case P_ANNULE : quit = TRUE; res_rsc(adr, &adr_bakrsc); break; } } } while(NOT quit); formm_undraw(adr, &img); if(adr_bakrsc) /* Si état formulaire sauvegardé */ free(adr_bakrsc); wind_update(END_MCTRL); /* Débloquer menu */ if(_app) menu_tnormal(adr_menu, T_FICHIER, 1); /* Inverser titre */ else { win[WINDACC].w_bar[T_FICHIER + 3].ob_state &= ~SELECTED; draw_object(T_FICHIER + 3, WINDACC); } } /* end of formulaire() */
static WORD hndl_menu(WORD title, WORD item) { WORD done, rc; done = FALSE; switch(title) { case DESKMENU: done = do_deskmenu(item); break; case FILEMENU: done = do_filemenu(item); break; case VIEWMENU: done = FALSE; rc = do_viewmenu(item); if (rc) /* if sort and/or view has changed, */ desk_all(rc); /* rebuild all windows appropriately */ break; case OPTNMENU: done = do_optnmenu(item); break; } menu_tnormal(G.a_trees[ADMENU], title, 1); return done; }
/* ------------------ */ void mn_action(void) { register int i, l; register char *m_entry; mouse_on(); i = 0; while (i < M_POINTS && msg[4] != menu_id[i]) i++; m_entry = menu_adr[msg[4]].ob_spec.free_string; l = strlen(m_entry); if (m_entry[l - 3] == 'F') if (m_entry[l - 1] == '0') funk_blink(9); else funk_blink(m_entry[l - 2] - '1'); if (i < M_POINTS) (*rout[i])(); menu_tnormal(menu_adr, msg[3], TRUE); }
/*! Display small form in window */ void pform_wind(void) { OBJECT *adr; adr = ir_trindex[PETITFORM]; if(work_display.n_color >= 16) { adr->ob_spec.obspec.interiorcol = 8; adr->ob_spec.obspec.fillpattern = 7; adr[PF_CHAMP1].ob_spec.tedinfo->te_color = 8; adr[PF_CHAMP1].ob_spec.tedinfo->te_color |= 7 << 4; adr[PF_CHAMP1].ob_spec.tedinfo->te_color |=(1 << 8); adr[PF_CHAMP2].ob_spec.tedinfo->te_color = 8; adr[PF_CHAMP2].ob_spec.tedinfo->te_color |= 7 << 4; adr[PF_CHAMP2].ob_spec.tedinfo->te_color |=(1 << 8); adr[PF_CHAMP3].ob_spec.tedinfo->te_color = 8; adr[PF_CHAMP3].ob_spec.tedinfo->te_color |= 7 << 4; adr[PF_CHAMP3].ob_spec.tedinfo->te_color |=(1 << 8); adr[PF_CHAMP4].ob_spec.tedinfo->te_color = 8; adr[PF_CHAMP4].ob_spec.tedinfo->te_color |= 7 << 4; adr[PF_CHAMP4].ob_spec.tedinfo->te_color |=(1 << 8); } if(_app) { adr[PF_TRAME].ob_spec.obspec.fillpattern = adr_desk->ob_spec.obspec.fillpattern; adr[PF_COLOR].ob_spec.obspec.interiorcol = adr_desk->ob_spec.obspec.interiorcol; } formw_draw(adr, PETIT_FORM, TITRE_PF, BLANK, PF_CHAMP1, WATR_FORMB, winicn); if(_app) menu_tnormal(adr_menu, T_FENETRES, 1); } /* endof pform_wind() */
/* * Get a single event, process it, and return. * */ domulti(){ int event; event = evnt_multi(MU_MESAG, 1,1,butdown, 0,0,0,0,0, 0,0,0,0,0, msgbuff,0,0,&mx,&my,&ret,&ret,&keycode,&ret); if (event & MU_MESAG) switch (msgbuff[0]) { case WM_REDRAW: do_redraw(msgbuff[4],msgbuff[5],msgbuff[6],msgbuff[7]); break; case WM_NEWTOP: case WM_TOPPED: wind_set(wi_handle, WF_TOP, 0, 0, 0, 0); break; case WM_CLOSED: running = FALSE; break; case MN_SELECTED: graf_mouse(HOURGLASS, 0L); switch(msgbuff[3]) { case MNDESK: if(msgbuff[4] == DEABOUT) { strcpy((about[ABVERSN].ob_spec)->te_ptext, "6.00"); about[ABOK].ob_state = NORMAL; execform(about); } break; /* "cannot happen" */ case MNFILE: switch (msgbuff[4]) { case FIQUIT: /* [QUIT] item */ running = 0; break; case FIINST: /* [INSTALL] item */ install(); break; case FIUNINST: /* [UNINSTALL] item */ uninstall(); break; } break; } menu_tnormal(menubar, msgbuff[3], 1); /* back to normal */ graf_mouse(ARROW, 0L); /* restore mouse */ break; } }
/*! Display large form in window */ void gform_wind(void) { OBJECT *adr; adr = ir_trindex[GRANDFORM]; if(work_display.n_color >= 16) { adr->ob_spec.obspec.interiorcol = 8; adr->ob_spec.obspec.fillpattern = 7; } formw_draw(adr, GRAND_FORM, TITRE_GF, BLANK, BLANK, WATR_CURRB, winicn); if(_app) menu_tnormal(adr_menu, T_FENETRES, 1); } /* endof gform_wind() */
/*! message events */ void event_mesag(int *flacc, int *quit) { if(buf[0] == MN_SELECTED) event_pmenu(quit); else if(buf[0] == BEV_HIERM) { if(buf [6] == MH_HISTO) { cree_histo(); menu_tnormal(adr_menu, T_FENETRES, TRUE); } } /* hier menu event */ else if(buf[0] == AC_CLOSE) { clos_acc(); *flacc = FALSE; } else if((buf[0] == WM_CLOSED) &&(buf[3] == win[WINDACC].w_hg)) *flacc = FALSE; } /* endof event_mesag */
void handle_menu(int16 title, int16 item) { switch (item) { case MENDE : quit = TRUE; break; case MOPEN : open_wdial( wdial, -1, -1 ); break; case MABOUT : simple_mdial( about, 0 ); break; default: break; } menu_tnormal(menu, title, 1); }
/*! hierarchical menu in windows events */ void event_whier(void) { if(buf[7] == WINDMENU) { switch(buf[6]) { case MWH_ICN0 : buf[6] = MWH_ICN0; icone(); break; case MWH_ICN1 : buf[6] = MWH_ICN1; icone(); break; } } else if(buf[7] == WINDACC) { if(buf[6] == MH_HISTO) { cree_histo(); menu_tnormal(win[WINDACC].w_bar, T_FENETRES + 3, TRUE); } } } /* end of event_whier */
void do_menu( const int *msg, int *event ) { WORD ret; WORD puntmsg[8]; WINFO *w; menu_tnormal( menu, MnTitle(msg), TRUE ); switch( MnItem(msg) ) { case TEST: ret = new_window( &w, tree ); if( ret == (int)ENHNDL ) { form_alert( 1, "[1][Sorry, no more windows| are available.|Please close one| you aren't using.][ OK ]" ); } else if( ret == (int)ENSMEM ) { form_alert( 1, "[1][Sorry, not enough| free memory for| another window.][ OK ]" ); } else { ++nwindows; ObX(ROOT) = w->work.g_x; ObY(ROOT) = w->work.g_y; redraw( w, &w->work ); do { ret = xform_do( w, 0, puntmsg ); if( ret == -1 ) { switch( MsgType(puntmsg) ) { case MN_SELECTED: do_menu( (int *)puntmsg, event ); if( *event == 0 ) { ret = 0; } else { wind_get( 0, WF_TOP, &ret ); w = id_2winfo( ret ); if( w == NULL ) { form_alert( 1, "[3][Error topping window][ OK ]" ); ret = *event = 0; } else { ObX(ROOT) = w->work.g_x; ObY(ROOT) = w->work.g_y; ret = -1; } } break; case WM_TOPPED: case WM_NEWTOP: w = id_2winfo( WmId(puntmsg) ); if( w == NULL ) { form_alert( 1, "[3][Error topping window][ OK ]" ); ret = *event = 0; } wind_set( w->id, WF_TOP ); ObX(ROOT) = w->work.g_x; ObY(ROOT) = w->work.g_y; break; case WM_CLOSED: wind_close( w->id ); wind_unlink( w ); wind_delete( w->id ); free( w ); --nwindows; ret = 0; break; } } else { wind_close( w->id ); wind_unlink( w ); wind_delete( w->id ); free( w ); } } while( ret == -1 ); Deselect(ret & 0x7fff); } break; case QUIT: *event = 0; break; } }
static void hndlkey(int key, int kstate) { int i = 0, k; APPLINFO *appl; int title; /* DjV 019 110103 rsc index of current menu title */ if ( (unsigned int)key == HELP ) showhelp(); /* DjV 007 251202 */ k = key & ~XD_CTRL; if ((((unsigned int) k >= 0x803B) && ((unsigned int) k <= 0x8044)) || (((unsigned int) k >= 0x8154) && ((unsigned int) k <= 0x815D))) { k &= 0xFF; k = (k >= 0x54) ? (k - 0x54 + 11) : (k - 0x3B + 1); if ((appl = find_fkey(k)) != NULL) app_exec(NULL, appl, NULL, NULL, 0, kstate, FALSE); } else { /* k = key & ~XD_ALT; DjV 019 100103 */ k = scansh ( key, kstate ); /* DjV 019 100103 */ /* DjV 019 110103 ---vvv--- */ /* while ((keys[i].scancode != k) && (i < (NKEYS - 1))) i++; if (keys[i].scancode == k) */ title = TFIRST; while ( (options.V2_2.kbshort[i] != k) && (i <= ( MLAST - MFIRST)) ) { if ( (options.V2_2.kbshort[i] & XD_ALT) != 0 ) title++; i++; } if ( options.V2_2.kbshort[i] == k ) { /* menu_tnormal(menu, keys[i].title, 0); hndlmenu(keys[i].title, keys[i].item, kstate); */ menu_tnormal(menu, title, 0 ); hndlmenu( title, i + MFIRST, kstate ); } /* DjV 019 110103 ---^^^--- */ else { i = 0; if ((key >= ALT_A) && (key <= ALT_Z)) { i = key - (XD_ALT | 'A'); if (check_drive(i)) { char *path; if ((path = strdup("A:\\")) != NULL) { path[0] = (char) i + 'A'; /* dir_add_window(path); DjV 017 280103 */ dir_add_window(path, NULL); /* DjV 017 280103 */ itm_set_menu(xw_top()); /* DjV 029 160203 */ } else xform_error(ENSMEM); } } } } }
static void hndlmenu(int title, int item, int kstate) { int qbutton; /* DjV 013 291202 */ if ((menu[item].ob_state & DISABLED) == 0) { switch (item) { case MINFO: info(); break; case MQUIT: /* DjV 013 291202 ---vvv--- */ qbutton = alert_printf(3,QUITALRT); /* DjV 013 090203 shutdown revived */ switch (qbutton) { case 3: break; case 2: shutdown=TRUE; /* no effect yet */ /* break;DjV 013 090203 only without shutdown */ case 1: /* DjV 013 291202 ---^^^--- */ menu_tnormal(menu, title, 1); quit = TRUE; break; } /* DjV 013 291202 */ break; case MOPTIONS: setpreferences(); break; case MPRGOPT: prg_setprefs(); break; case MSAVESET: save_options(); break; case MLOADOPT: load_settings(); break; case MSAVEAS: save_options_as(); break; case MAPPLIK: app_install(); break; case MIDSKICN: dsk_insticon(); break; case MIWDICN: icnt_settypes(); break; case MCHNGICN: dsk_chngicon(); break; case MREMICON: dsk_remicon(); break; case MEDITOR: set_editor(); break; /* DjV 016 050103 ---vvv--- */ case MCOPTS: copyprefs(); break; /* DjV 016 050103 ---^^^--- */ case MWDOPT: dsk_options(); break; /* DjV 007 250102 ---vvv--- */ case MVOPTS: chrez=voptions(); if ( chrez ) quit=TRUE; break; /* DjV 007 250102 ---^^^--- */ default: wd_hndlmenu(item, kstate); /* handle all the rest in window.c */ break; } } menu_tnormal(menu, title, 1); }
/* MAIN() * ================================================================ */ VOID main( VOID ) { OBJECT *tree; WORD i; WORD button; GRECT box; GRECT xrect; WORD tempx; GRECT rect; MRETS mk; WORD ptitle, pitem, pmenu; OBJECT *ptree; BOOLEAN flag; BOOLEAN done; WORD dummy; WORD xvalue; appl_init(); phys_handle = graf_handle( &gl_wchar, &gl_hchar, &gl_wbox, &gl_hbox ); graf_mouse( ARROW, 0L ); rsrc_load( "TEST.RSC" ); rsrc_gaddr( 0, MENU1, &ad_tree ); rsrc_gaddr( 0, BIGBOX, &ad_box ); rsrc_gaddr( 0, COUNTRY, &ad_country ); rsrc_gaddr( 0, OTHER, &ad_other ); rsrc_gaddr( 0, MENUBAR, &ad_menubar ); rsrc_gaddr( 0, TREE6, &ad_extra ); ad_other[ ROOT ].ob_x = ad_other[ ROOT ].ob_y = 0; #if 0 /* test setting delay and height variables */ TData.Delay = 100L; TData.Drag = 10000L; TData.Delay = 250L; TData.Speed = 0L; TData.Height = 16; menu_settings( 1, &TData ); #endif /* test attaching submenus */ Menu.mn_tree = ad_country; Menu.mn_menu = ROOT; Menu.mn_item = Cur2; Menu.mn_scroll = TRUE; menu_attach( 1, ad_tree, DELETE, &Menu ); Menu.mn_tree = ad_other; Menu.mn_menu = DISNEY; Menu.mn_item = MICKEY; Menu.mn_scroll = FALSE; menu_attach( 1, ad_tree, FLOPPY, &Menu ); Menu.mn_tree = ad_other; Menu.mn_menu = MODEM; Menu.mn_item = Cur3; Menu.mn_scroll = FALSE; menu_attach( 1, ad_country, 5, &Menu ); Menu.mn_tree = ad_other; Menu.mn_menu = DISNEY; Menu.mn_item = MICKEY; Menu.mn_scroll = FALSE; menu_attach( 1, ad_country, 1, &Menu ); Menu.mn_tree = ad_other; Menu.mn_menu = DISNEY; Menu.mn_item = MICKEY; Menu.mn_scroll = FALSE; menu_attach( 1, ad_country, ARKANSAS, &Menu ); Menu.mn_tree = ad_other; Menu.mn_menu = QUOTES; Menu.mn_item = Cur4; Menu.mn_scroll = FALSE; menu_attach( 1, ad_other, 5, &Menu ); Menu.mn_tree = ad_country; Menu.mn_menu = ROOT; Menu.mn_item = Cur2; Menu.mn_scroll = TRUE; menu_attach( 1, ad_menubar, PASTE, &Menu ); Menu.mn_tree = ad_country; Menu.mn_menu = ROOT; Menu.mn_item = Cur2; Menu.mn_scroll = TRUE; menu_attach( 1, ad_menubar, FNEW, &Menu ); menu_icheck( ad_tree, Cur1, 1 ); menu_icheck( ad_country, Cur2, 1 ); menu_icheck( ad_other, Cur3, 1 ); menu_icheck( ad_other, Cur4, 1 ); menu_icheck( ad_other, Cur5, 1 ); ActiveTree( ad_box ); form_center( ad_box, &rect.g_x, &rect.g_y, &rect.g_w, &rect.g_h ); ObX( ROOT ) = rect.g_x; xrect = ObRect( TITLE1 ); objc_offset( ad_box, TITLE1, &xrect.g_x, &xrect.g_y ); tempx = xrect.g_x; xrect.g_x = (( xrect.g_x + 7 )/8 ) * 8; rect.g_x = rect.g_x + ( xrect.g_x - tempx ); ObX( ROOT ) = rect.g_x; rect.g_x -= 3; form_dial( FMD_START, rect.g_x, rect.g_y, rect.g_w, rect.g_h, rect.g_x, rect.g_y, rect.g_w, rect.g_h ); objc_draw( ad_box, ROOT, MAX_DEPTH, rect.g_x, rect.g_y, rect.g_w, rect.g_h ); do { ActiveTree( ad_box ); button = form_do( ad_box, 0L ); switch( button ) { case TITLE1: box = ObRect( TITLE1 ); objc_offset( ad_box, TITLE1, &box.g_x, &box.g_y ); Menu.mn_tree = ad_tree; Menu.mn_menu = ROOT; Menu.mn_item = Cur1; Menu.mn_scroll = FALSE; flag = menu_popup( &Menu, box.g_x, box.g_y, &MData ); if( flag ) MenuCheck( MData.mn_tree, MData.mn_menu, MData.mn_item ); break; case TITLE2: box = ObRect( TITLE2 ); objc_offset( ad_box, TITLE2, &box.g_x, &box.g_y ); Menu.mn_tree = ad_country; Menu.mn_menu = ROOT; Menu.mn_item = Cur2; Menu.mn_scroll = TRUE; flag = menu_popup( &Menu, box.g_x, box.g_y, &MData ); if( flag ) MenuCheck( MData.mn_tree, MData.mn_menu, MData.mn_item ); break; case TITLE3: box = ObRect( TITLE3 ); objc_offset( ad_box, TITLE3, &box.g_x, &box.g_y ); Menu.mn_tree = ad_other; Menu.mn_menu = MODEM; Menu.mn_item = Cur3; Menu.mn_scroll = FALSE; flag = menu_popup( &Menu, box.g_x, box.g_y, &MData ); if( flag ) MenuCheck( MData.mn_tree, MData.mn_menu, MData.mn_item ); break; case TITLE4: box = ObRect( TITLE4 ); objc_offset( ad_box, TITLE4, &box.g_x, &box.g_y ); Menu.mn_tree = ad_other; Menu.mn_menu = QUOTES; Menu.mn_item = Cur4; Menu.mn_scroll = FALSE; flag = menu_popup( &Menu, box.g_x, box.g_y, &MData ); if( flag ) MenuCheck( MData.mn_tree, MData.mn_menu, MData.mn_item ); break; default: break; } }while( button != XEXIT ); form_dial( FMD_FINISH, rect.g_x, rect.g_y, rect.g_w, rect.g_h, rect.g_x, rect.g_y, rect.g_w, rect.g_h ); evnt_button( 1, 1, 0, &dummy, &dummy, &dummy, &dummy ); /* display menubar stuff here */ ActiveTree( ad_menubar ); menu_bar( ad_menubar, TRUE ); do { evnt_mesag( msg ); if( msg[0] == MN_SELECTED ) { /* msg[7] is the parent of FQUIT - which the user can't know */ ptr = &msg[5]; if( ( *ptr == ad_menubar ) && ( msg[4] == FQUIT ) ) { button = form_alert( 1, "[1][ | EXIT PROGRAM? ][OK|Cancel]"); if( button == 1 ) done = TRUE; } else MenuCheck( *ptr, msg[7], msg[4] ); menu_tnormal( ad_menubar, msg[3], TRUE ); } }while( !done ); menu_bar( ad_menubar, FALSE ); rsrc_free(); graf_mouse( ARROW, 0L ); appl_exit(); }
/*********************************************************************** Ereignisauswertung (AES-Nachrichten, Tastendr�cke, Timer ), welche sowohl von Event_Multi() als auch von X_Form_Do() aufgerufen wird ***********************************************************************/ int Messag(XEVENT *event) { reg int ev = event -> ev_mwich, *msg = event -> ev_mmgpbuf; reg int used = 0; reg windowptr thewin = Thefrontwin; /* Nachricht vom AES ? */ if (ev & MU_MESAG) { /* Nachrichtenereignis wurde ausgewertet */ used |= MU_MESAG; switch (*msg) { /* Men�eintrag angeklickt ? */ case MN_SELECTED: /* Men�eintrag deselektieren */ menu_tnormal(Menu, msg[3], 1); /* gew�nschte Funktion ausf�hren */ if (MenuSelect(msg[4], 0, 0, FAIL) == FALSE) /* Nachricht konnte nicht ausgewertet werden (sollte NIE vorkommen) */ used &= ~MU_MESAG; break; case WM_REDRAW: case WM_TOPPED: case WM_CLOSED: case WM_FULLED: case WM_ARROWED: case WM_HSLID: case WM_VSLID: case WM_SIZED: case WM_MOVED: case WM_NEWTOP: case WM_UNTOPPED: case WM_ONTOP: case WM_BOTTOM: do_window(msg); break; /* Applikation beenden/r�cksetzen */ case AP_TERM: case AC_CLOSE: shutdown(Reset); break; /* Accessory �ffnen (Hauptdialog �ffnen) */ case AC_OPEN: break; /* Applikation hat sich an- oder abgemeldet */ case XACC_AV_INIT: case XACC_AV_EXIT: break; default: /* unbekannte Nachricht konnte nicht ausgewertet werden */ used &= ~MU_MESAG; } } /* Tastatur-Ereignis auswerten */ if (ev & MU_KEYBD && !ob_isstate(Menu, MENU_ETAT, DISABLED)) { int key = event -> ev_mkreturn & 0xFF; int maj = key & ~0x20; int top; wind_get(0, WF_TOP, &top); if (Dialog[CONFIG_MENU].info != NULL && Dialog[CONFIG_MENU].info -> di_flag > CLOSED && top == Dialog[CONFIG_MENU].info -> di_win -> handle) { /* la configuration des raccourcis est ouverte */ ((raccourcis_var *)Dialog[CONFIG_MENU].var) -> state = event -> ev_mmokstate; ((raccourcis_var *)Dialog[CONFIG_MENU].var) -> key = event -> ev_mkreturn; (*Dialog[CONFIG_MENU].proc)(&Dialog[CONFIG_MENU], FAIL); } else { /* gew�nschte Funktion ausf�hren */ if (MenuSelect(FAIL, event -> ev_mkreturn, event -> ev_mmokstate, FAIL)) used |= MU_KEYBD; /* Tastaturereignis wurde ausgewertet */ else if (scantoascii(event -> ev_mkreturn) == 0) { /* touches sp�ciales */ key = event -> ev_mkreturn >> 8; switch (event -> ev_mmokstate) { case K_RSHIFT: case K_LSHIFT: switch (key) { case SCANUP: if (thewin -> type >= TAMPON) { if (thewin -> fonction.fichier.curseur_x < 0) { if (thewin -> type != TAMPON) MenuSelect(BLOC_PRECEDENT, 0, 0, FAIL); else { msg[4] = PAGE_UP; msg[0] = WM_ARROWED; msg[3] = thewin -> win -> handle; do_window(msg); } } else curseur_up(thewin, TRUE); } else { msg[4] = PAGE_UP; msg[0] = WM_ARROWED; msg[3] = thewin -> win -> handle; do_window(msg); } break; case SCANDOWN: if (thewin -> type >= TAMPON) { if (thewin -> fonction.fichier.curseur_x < 0) { if (thewin -> type != TAMPON) MenuSelect(BLOC_SUIVANT, 0, 0, FAIL); else { msg[4] = PAGE_DOWN; msg[0] = WM_ARROWED; msg[3] = thewin -> win -> handle; do_window(msg); } } else curseur_down(thewin, TRUE); } else { msg[4] = PAGE_DOWN; msg[0] = WM_ARROWED; msg[3] = thewin -> win -> handle; do_window(msg); } break; case SCANLEFT: if (thewin -> type >= TAMPON && thewin -> fonction.fichier.curseur_x >= 0) curseur_left(thewin, FALSE, TRUE); else { msg[4] = PAGE_LEFT; msg[0] = WM_ARROWED; msg[3] = thewin -> win -> handle; do_window(msg); } break; case SCANRIGHT: if (thewin -> type >= TAMPON && thewin -> fonction.fichier.curseur_x >= 0) curseur_right(thewin, FALSE, TRUE); else { msg[4] = PAGE_RIGHT; msg[0] = WM_ARROWED; msg[3] = thewin -> win -> handle; do_window(msg); } break; case SCANHOME: if (thewin -> type >= TAMPON && thewin -> fonction.fichier.curseur_x >= 0) curseur_home(thewin, TRUE); break; } break; case K_CTRL: switch (key) { case CTRLLEFT: if (thewin -> type >= TAMPON && thewin -> fonction.fichier.curseur_x >= 0 && !thewin -> fonction.secteur.ascii) curseur_left(thewin, FALSE, FALSE); break; case CTRLRIGHT: if (thewin -> type >= TAMPON && thewin -> fonction.fichier.curseur_x >= 0 && !thewin -> fonction.secteur.ascii) curseur_right(thewin, FALSE, FALSE); break; case SCANUP: if (thewin -> type >= SECTEUR) MenuSelect(SECTEUR_PRECEDEN, 0, 0, FAIL); break; case SCANDOWN: if (thewin -> type >= SECTEUR) MenuSelect(SECTEUR_SUIVANT, 0, 0, FAIL); break; } break; case 0: switch (key) { case SCANHOME: if (thewin -> type >= TAMPON && thewin -> fonction.fichier.curseur_x >= 0) curseur_home(thewin, FALSE); break; case SCANUP: if (thewin -> type >= TAMPON) { if (thewin -> fonction.fichier.curseur_x < 0) { if (thewin -> type != TAMPON) MenuSelect(SECTEUR_PRECEDEN, 0, 0, FAIL); else { msg[4] = LINE_UP; msg[0] = WM_ARROWED; msg[3] = thewin -> win -> handle; do_window(msg); } } else curseur_up(thewin, FALSE); } else { msg[4] = LINE_UP; msg[0] = WM_ARROWED; msg[3] = thewin -> win -> handle; do_window(msg); } break; case SCANDOWN: if (thewin -> type >= TAMPON) { if (thewin -> fonction.fichier.curseur_x < 0) { if (thewin -> type != TAMPON) MenuSelect(SECTEUR_SUIVANT, 0, 0, FAIL); else { msg[4] = LINE_DOWN; msg[0] = WM_ARROWED; msg[3] = thewin -> win -> handle; do_window(msg); } } else curseur_down(thewin, FALSE); } else { msg[4] = LINE_DOWN; msg[0] = WM_ARROWED; msg[3] = thewin -> win -> handle; do_window(msg); } break; case SCANLEFT: if (thewin -> type >= TAMPON && thewin -> fonction.fichier.curseur_x >= 0) curseur_left(thewin, TRUE, FALSE); else { msg[4] = LINE_LEFT; msg[0] = WM_ARROWED; msg[3] = thewin -> win -> handle; do_window(msg); } break; case SCANRIGHT: if (thewin -> type >= TAMPON && thewin -> fonction.fichier.curseur_x >= 0) curseur_right(thewin, TRUE, FALSE); else { msg[4] = LINE_RIGHT; msg[0] = WM_ARROWED; msg[3] = thewin -> win -> handle; do_window(msg); } break; } break; } } else if (thewin -> type >= TAMPON && thewin -> fonction.secteur.curseur_x >= 0)
/* ------------ */ main() { register int which; /* Ausgel�ste Aktion */ register int i; /* Schleifenindex */ int msg[8]; /* Message-Buffer */ int dummy; /* f�r unwichtige Werte */ appl_init(); open_vwork(); fnt_path[0] = Dgetdrv() + 'A'; /* Aktuellen Pfad ermitteln*/ fnt_path[1] = ':'; Dgetpath(fnt_path + 2, 0); strcat(fnt_path, "\\*.FNT"); rsrc_load("VDI_FONT.RSC"); /* RSC laden */ graf_mouse(ARROW, 0L); /* Mauspfeil */ set_workarea(); /* Hintergrund anlegen */ count_defined(); set_marker(); /* Marker positionieren */ restore_char(); /* Erstes Zeichen holen */ show_ccharacter(); do { which = evnt_multi(MU_BUTTON|MU_KEYBD|MU_MESAG, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, msg, 0, 0, &mousex, &mousey, &dummy, &dummy, &key, &clicks); switch(which) { case MU_KEYBD: /* Tastendruck ? */ if ((char)key >= 'a' && (char)key <= 'z') key &= 0xDF; if (!(char)key) /* Kontrolltaste ?*/ { key >>= 8; key |= 0x80; } for (i = 0; i < KEY_NUM; i++) /* Passenden Men�eintrag suchen */ if (m_keys[i] == (char)key) { which = MU_MESAG; msg[0] = MN_SELECTED; msg[4] = m_entry[i]; menu_action(msg); /* Men�eintrag ausf�hren */ break; } break; case MU_MESAG: if (msg[0] == MN_SELECTED) /* Men�eintrag ? */ { menu_action(msg); menu_tnormal(menu_adr, msg[3], TRUE); } break; case MU_BUTTON: button_click(); /* Mausklick */ break; } }while(which != MU_MESAG || msg[0] != MN_SELECTED || msg[4] != F_OK); cls_vwork(); appl_exit(); }
/* * Get a single event, process it, and return. * */ domulti(){ int event; event = evnt_multi(MU_MESAG, 1,1,butdown, 0,0,0,0,0, 0,0,0,0,0, msgbuff,0,0,&mx,&my,&ret,&ret,&keycode,&ret); if (event & MU_MESAG) { wind_update(TRUE); switch (msgbuff[0]) { case WM_REDRAW: do_redraw(msgbuff[4],msgbuff[5],msgbuff[6],msgbuff[7]); break; case MN_SELECTED: BEE_MOUSE; switch(msgbuff[3]) { case MNDISK: switch (msgbuff[4]) { case DIFORM: if ((needscan) && (rescan(0,0) == ERROR)) { break; /* don't report medium changed */ } tformat = TRUE; needscan = FALSE; dodiform(); tformat = FALSE; break; case DIPART: if ((needscan)&&(rescan(0,0) == ERROR)) { break; /* don't report medium changed */ } needscan = FALSE; dodipart(-1, NULL, NULL); break; case DIZERO: if (pnf) { err(needboot); } else { if ((needscan)&&(rescan(0,1) == ERROR)) { break; /* don't report medium changed */ } needscan = FALSE; dodizero(); } break; case DIMARK: if (pnf) { err(needboot); } else { if ((needscan)&&(rescan(0,1) == ERROR)) { break; /* don't report medium changed */ } needscan = FALSE; dodimark(); } break; case DISHIP: if ((needscan)&&(rescan(0,0) == ERROR)) { break; /* don't report medium changed */ } needscan = FALSE; dodiship(); break; default: break; } break; case MNFILE: switch (msgbuff[4]) { case FIQUIT: running = 0; break; default: break; } break; case MNDESK: if(msgbuff[4] == DEABOUT) { strcpy(abtdial[ABVERSN].ob_spec, "Version 3.5"); abtdial[ABOK].ob_state = NORMAL; execform(abtdial); } break; /* "cannot happen" */ } menu_tnormal(menuobj, msgbuff[3], 1); /* back to normal */ ARROW_MOUSE; break; case WM_NEWTOP: case WM_TOPPED: wind_set(wi_handle, WF_TOP, 0, 0, 0, 0); break; case WM_CLOSED: running = FALSE; break; default: break; } wind_update(FALSE); } }
/* MAIN() * ================================================================ */ VOID main( VOID ) { WORD button; BOOLEAN done; OBJECT *tree; appl_init(); phys_handle = graf_handle( &gl_wchar, &gl_hchar, &gl_wbox, &gl_hbox ); open_vwork(); graf_mouse( ARROW, 0L ); rsrc_load( "DEMO.RSC" ); rsrc_gaddr( 0, MENUBAR, &ad_menubar ); rsrc_gaddr( 0, ATREE, &ad_tree ); rsrc_gaddr( 0, FONTTREE, &ad_fonts ); rsrc_gaddr( 0, STREE, &ad_style ); rsrc_gaddr( 0, POSTREE, &ad_position ); rsrc_gaddr( 0, CTREE, &ad_color ); rsrc_gaddr( 0, PTREE, &ad_pattern ); rsrc_gaddr( 0, MTREE, &ad_modem ); rsrc_gaddr( 0, BAUDRATE, &ad_baudrate ); rsrc_gaddr( 0, PARTREE, &ad_parity ); rsrc_gaddr( 0, BITTREE, &ad_bittree ); rsrc_gaddr( 0, STOPTREE, &ad_stoptree ); rsrc_gaddr( 0, PORTTREE, &ad_porttree ); rsrc_gaddr( 0, FLOWTREE, &ad_flowtree ); rsrc_gaddr( 0, LTREE, &ad_list ); rsrc_gaddr( 0, TOOLBOX, &ad_tools ); rsrc_gaddr( 0, BLANK, &ad_blank ); rsrc_gaddr( 0, TOOLBOX2, &ad_box2 ); rsrc_gaddr( 0, TOOLBAR, &ad_box3 ); rsrc_gaddr( 0, FONT2, &ad_font2 ); /* Attach all Submenus that are being attached */ AttachMenus(); /* CheckMark the Current Menu Items in their respective menus */ menu_icheck( ad_baudrate, CurBaudRate, 1 ); menu_icheck( ad_parity, CurParity, 1 ); menu_icheck( ad_bittree, CurBits, 1 ); menu_icheck( ad_stoptree, CurStopBits, 1 ); menu_icheck( ad_porttree, CurPort, 1 ); menu_icheck( ad_flowtree, CurFlow, 1 ); menu_icheck( ad_style, CurStyle, 1 ); menu_icheck( ad_position, CurPos, 1 ); menu_icheck( ad_fonts, CurFonts, 1 ); menu_icheck( ad_font2, CurFont2, 1 ); /* display menubar stuff here */ menu_bar( ad_menubar, TRUE ); /* initialize windows */ wind_get( 0, WF_FULLXYWH, &desk.g_x, &desk.g_y, &desk.g_w, &desk.g_h ); cur_tree = ad_tools; menu_flag = TRUE; /* Set Toggle Flags */ SubFlag = TRUE; ToolFlag = TRUE; CurRect.g_x = desk.g_x; CurRect.g_y = desk.g_y; CurRect.g_w = 320; CurRect.g_h = 200; InitObjects(); InitWindow(); menu_ienable( ad_menubar, FOPEN, 0 ); menu_ienable( ad_menubar, FCLOSE, 1 ); done = FALSE; do { evnt_mesag( msg ); wind_update( BEG_UPDATE ); if( msg[0] == MN_SELECTED ) { /* msg[7] is the parent of FQUIT - which the user can't know */ ptr = ( OBJECT **)&msg[5]; if( *ptr == ad_menubar ) { switch( msg[4] ) { case FQUIT: button = form_alert( 1, "[1][ | EXIT PROGRAM? ][OK|Cancel]"); if( button == 1 ) done = TRUE; break; case ABOUTX: execform( ad_tree, 0 ); break; case PHONE: do_modem(); break; case TABOUT: /* Enable, Disable About PLUS change TEXT */ menu_flag ^= 1; menu_ienable( ad_menubar, ABOUTX, menu_flag ); menu_text( ad_menubar, TABOUT, TextAbout[ menu_flag ] ); if( menu_flag ) menu_text( ad_menubar, ABOUTX, " About Demo... " ); else menu_text( ad_menubar, ABOUTX, " Disabled... " ); break; case TSUB: /* Enable/Disable all Submenus */ SubFlag ^= 1; menu_text( ad_menubar, TSUB, TextSubMenu[ SubFlag ] ); if( SubFlag ) AttachMenus(); else DetachMenus(); break; case SLISTS: DoList(); /* Do A Drop Down List Dialog */ break; case TOOLFLAG: /* Enable/Disable ToolBox */ ToolFlag ^= 1; menu_text( ad_menubar, TOOLFLAG, TextToolBox[ ToolFlag ] ); if( ToolFlag ) { *( (LONG *)&tree_data[0] ) = ( LONG )cur_tree; wind_set( wid, WF_TOOLBAR, tree_data[0], tree_data[1], dummy, dummy ); } else wind_set( wid, WF_TOOLBAR, 0, 0, dummy, dummy ); break; case SWITCH: /* Switch ToolBoxes */ if( cur_tree == ad_tools ) cur_tree = ad_box2; else if( cur_tree == ad_box2 ) { cur_tree = ad_box3; ActiveTree( ad_fonts ); textptr = ObString( CurFonts ); strncpy( &tbuff[0], &textptr[1], 28 ); ActiveTree( ad_box3 ); TedText( FBUTT1 ) = &tbuff[0]; } else cur_tree = ad_tools; *( (LONG *)&tree_data[0] ) = ( LONG )cur_tree; ToolFlag = TRUE; menu_text( ad_menubar, TOOLFLAG, TextToolBox[ ToolFlag ] ); wind_set( wid, WF_TOOLBAR, tree_data[0], tree_data[1], dummy, dummy ); break; case FCLOSE: /* close Window */ if( wid ) { wind_get( wid, WF_CURRXYWH, &CurRect.g_x, &CurRect.g_y, &CurRect.g_w, &CurRect.g_h ); wind_close( wid ); wind_delete( wid ); wid = 0; menu_ienable( ad_menubar, FCLOSE, 0 ); menu_ienable( ad_menubar, FOPEN, 1 ); } break; case FOPEN: /* open Window */ if( !wid ) { InitWindow(); menu_ienable( ad_menubar, FOPEN, 0 ); menu_ienable( ad_menubar, FCLOSE, 1 ); } break; default: break; } } /* MENU SELECTED -> Font Style Menu Clicked on as a SUBMENU from the Menubar*/ if( *ptr == ad_style ) { menu_icheck( ad_style, CurStyle, 0 ); /* Turn OFF Old Checkmark */ menu_icheck( ad_style, msg[4], 1 ); /* Turn ON New CheckMark */ CurStyle = msg[4]; /* Update Current Var */ menu_istart( 1, ad_style, ROOT, CurStyle ); /* Reset Starting Position*/ } /* MENU SELECTED -> Font Position Clicked on as a SUBMENU from the menubar */ if( *ptr == ad_position ) { menu_icheck( ad_position, CurPos, 0 ); menu_icheck( ad_position, msg[4], 1 ); CurPos = msg[4]; menu_istart( 1, ad_position, ROOT, CurPos ); } /* MENU SELECTED -> Fonts Menu Clicked on as a SUBMENU from the menubar */ if( *ptr == ad_fonts ) { menu_icheck( ad_fonts, CurFonts, 0 ); menu_icheck( ad_fonts, msg[4], 1 ); CurFonts = msg[4]; menu_istart( 1, ad_fonts, ROOT, CurFonts ); } menu_tnormal( ad_menubar, msg[3], TRUE ); } if( msg[0] != MN_SELECTED ) { switch( msg[0] ) { case WM_FULLED: DoFull( msg[3] ); break; case WM_REDRAW: DoRedraw( msg ); break; case WM_ARROWED: case WM_HSLID: case WM_VSLID: break; case WM_MOVED: if( msg[3] == wid ) { wind_set( wid, WF_CURRXYWH, msg[4], msg[5], msg[6], msg[7] ); } break; case WM_TOPPED: if( msg[3] == wid ) { wind_set( wid, WF_TOP ); } break; case WM_CLOSED: if( msg[3] == wid ) { wind_get( wid, WF_CURRXYWH, &CurRect.g_x, &CurRect.g_y, &CurRect.g_w, &CurRect.g_h ); wind_close( wid ); wind_delete( wid ); wid = 0; menu_ienable( ad_menubar, FCLOSE, 0 ); menu_ienable( ad_menubar, FOPEN, 1 ); } break; case WM_SIZED: DoSizer( msg ); break; case WM_TOOLBAR: if( msg[3] == wid ) { /* Button Handling for ToolBox #1 */ if( cur_tree == ad_tools ) { switch( msg[4] ) { case T1B1: button = B1B1; break; case T1B2: button = B1B2; break; case T1B3: button = B1B3; break; case T1B4: button = B1B4; break; case T1B5: button = B1B5; break; } } /* Button Handling for TOOLBOX 2 */ if( cur_tree == ad_box2 ) { switch( msg[4] ) { case T2I1: button = T2B1; break; case T2I2: button = T2B2; break; case T2I3: button = T2B3; break; case T2I4: button = T2B4; break; case T2I5: button = T2B5; break; } } /* Word Processing Tree */ if( cur_tree == ad_box3 ) { switch( msg[4] ) { case FBUTT1: case FBUTT2: DoFonts(); break; default: break; } } if( cur_tree != ad_box3 ) { if( cur_tree[ button ].ob_state & SELECTED ) cur_tree[ button ].ob_state &= ~SELECTED; else cur_tree[ button ].ob_state |= SELECTED; objc_offset( cur_tree, button, &r.g_x, &r.g_y ); r.g_x -= 2; r.g_y -= 2; r.g_w = cur_tree[ button ].ob_width + 4; r.g_h = cur_tree[ button ].ob_height + 4; do_redraw( cur_tree, button, &r ); } } /* end of msg[3] == wid */ break; case WM_ICONIFY: if( msg[3] == wid ) wind_set( msg[3], WF_ICONIFY, msg[4], msg[5], msg[6], msg[7] ); break; case WM_UNICONIFY: if( msg[3] == wid ) wind_set( msg[3], WF_UNICONIFY, msg[4], msg[5], msg[6], msg[7] ); break; default: break; } /* end of switch */ } wind_update( END_UPDATE ); }while( !done ); if( wid > 0 ) wind_delete( wid ); menu_bar( ad_menubar, FALSE ); graf_mouse( ARROW, 0L ); rsrc_free(); close_vwork(); appl_exit(); }