void start_aktion(char *str, bool inter, long max) { int d; GRECT r1, r2; if (aktion == NULL) { rsrc_gaddr(R_TREE, AKTION, &aktion); fix_dial(aktion); } max_value = max(max, 1); set_string(aktion, ATEXT, str); aktion[ABOX2].ob_width = 1; set_flag(aktion, AESC, HIDETREE, !inter); interupt = inter; /* Zentrieren, nur beim ersten Mal */ if (aktion[0].ob_x == 0 && aktion[0].ob_y == 0) form_center(aktion, &d, &d, &d, &d); r1.g_x = aktion[0].ob_x; r1.g_y = aktion[0].ob_y; r1.g_w = aktion[0].ob_width; r1.g_h = aktion[0].ob_height; wind_calc_grect(WC_BORDER, (NAME|MOVER|BACKDROP), &r1, &r2); akt_handle = wind_create_grect((NAME|MOVER|BACKDROP), &r1); if (akt_handle > 0) { /* Men� abschalten */ disable_menu(); wind_set_str(akt_handle, WF_NAME, " qed "); wind_open_grect(akt_handle, &r2); } }
void nag_about(int time) { OBJECT *dlog; short x,y,w,h; #ifdef DEMO Crsrc_gaddr(R_TREE,NAG_SCREEN,&dlog); set_tedinfo(dlog,Please_Wait_Butt,"Please Wait"); form_center(dlog,&x,&y,&w,&h); form_dial(FMD_START,0,0,0,0,x,y,w,h); objc_draw(dlog,0,10,x,y,w,h); /*pause for supplied time_value*/ set_tedinfo(dlog,Please_Wait_Butt," OK "); objc_draw(dlog,0,10,x,y,w,h); /* handle form */ handle_dialog(dlog,0,0); set_tedinfo(dlog,Please_Wait_Butt,"Please Wait"); form_dial(FMD_FINISH,0,0,0,0,x,y,w,h); #endif }
open_dial(int flag) { static int x,y,w,h; if ((!_AccFlag) || (para.multi==MULTINE)){ if(flag) { strcpy((char *)transfer[BLOCKNUM].ob_spec,"0001"); strcpy((char *)transfer[STATUS].ob_spec,"---"); strcpy((char *)transfer[RETRIES].ob_spec,"0001"); form_center(transfer,&x,&y,&w,&h); form_dial(0,0,0,0,0,x,y,w,h); objc_draw(transfer,0,8,x,y,w,h); } else form_dial(3,0,0,0,0,x,y,w,h); } else { if (flag) { wind_up(0); strcpy(msg,"0001 01 ---"); v_gtext(handle,640-12*8,13,msg); } else wind_up(1); was_full=0;Bconout(2,7); } }
/* ** Description ** Show information about oAESis ** ** 1999-01-10 CG ** 1999-01-11 CG */ static void show_information (void) { OBJECT * information; int x; int y; int w; int h; /* Get address if information resource */ rsrc_gaddr (R_TREE, INFORM, &information); /* Fix version number :-) */ sprintf(information[INFOVERSION].ob_spec.tedinfo->te_ptext, OAESIS_VERSION); /* Calculate area of resource */ form_center (information, &x, &y, &w, &h); /* Reserve area for dialog */ form_dial (FMD_START, x, y, w, h, x, y, w, h); /* Draw dialog */ objc_draw (information, 0, 9, x, y, w, h); /* Let the user handle the dialog */ form_do (information, 0); /* Free area used by dialog */ form_dial (FMD_FINISH, x, y, w, h, x, y, w, h); /* Restore ok button */ information[INFOOK].ob_state &= ~SELECTED; }
/*************************** * restore ttf-gdos to its previous config */ static void tidy_up( void ) { register uint16 n = pInfo->nr_wkstns; register WORKSTN_RECORD *pw = pInfo->workstn_table; char *const gempath = ((void**)pInfo)[-1]; register int i = gem_font_count; int xdial,ydial,wdial,hdial; /* co-ords for dialog box */ int x,y,w,h; form_center (&rs_object,&xdial,&ydial,&wdial,&hdial); x=y=w=h=0; form_dial (FMD_START,x,y,w,h,xdial,ydial,wdial,hdial); /* reserve room */ sprintf( usr_msg, "please wait ..." ); objc_draw( &rs_object, 0, 2, xdial, ydial, wdial, hdial ); /* draw the dialog box */ for( ; n>0; n--, pw++ ) { /* printf( "wkstn %d, %s, 1st font is %d, nr is %d\n", pw->id, &pw->driver_name, pw->nr_gemfonts, pw->first_font ); */ pw->nr_gemfonts = save[pw->id].nr_gemfonts; pw->first_font = save[pw->id].first_font; } /* for */ for( ; i>=0; i-- ) { FONT_FILE_NAME( gempath+pInfo->len_gem_path, i ); remove( gempath ); } /* for */ form_dial( FMD_FINISH, x, y, w, h, xdial, ydial, wdial, hdial ); /* release its room */ } /* tidy_up() */
void gem_prgm() { OBJECT *tree; int box_x, box_y, box_w, box_h, button, end = FALSE; int work_in[11], work_out[57], count, dummy; for (count = 0; count < 10; count++) work_in[count] = 1; work_in[10] = 2; vdi_handle = graf_handle (& dummy, & dummy, & dummy, & dummy); v_opnvwk (work_in, & vdi_handle, work_out); vq_extnd (vdi_handle, 1, work_out); planes = work_out[4]; rsrc_gaddr (R_TREE, LOGCTRL, & tree); form_center (tree, & box_x, & box_y, & box_w, & box_h); form_dial (FMD_START, 0,0,0,0, box_x, box_y, box_w, box_h); objc_draw (tree, ROOT, MAX_DEPTH, box_x, box_y, box_w, box_h); do { button = form_do (tree, 0) & 0x7fffu; evnt_timer (60, 0); tree[button].ob_state &= ~SELECTED; objc_draw (tree, button, 1, box_x, box_y, box_w, box_h); switch (button) { case FILENAM : modify_fname(); objc_draw (tree, ROOT, MAX_DEPTH, box_x, box_y, box_w, box_h); break; case CLIENT : case MODULE : form_dial (FMD_FINISH, 0,0,0,0, box_x, box_y, box_w, box_h); do_dialog ((button == CLIENT) ? CLI_API : MOD_API); form_dial (FMD_START, 0,0,0,0, box_x, box_y, box_w, box_h); objc_draw (tree, ROOT, MAX_DEPTH, box_x, box_y, box_w, box_h); break; case TERM : if (form_alert (1, "[2][ | Remove LogSTinG and | leave LogCTRL ?][ Yes | No ]") == 1) { if ((long) (*sting_drivers->get_dftab) ("LOGSTING : REMOVE") == 'OkOk') end = TRUE; else form_alert (1, "[1][ | Could not remove LogSTinG ! ][ Hmmm ]"); } break; case FIX : if (form_alert (1, "[2][ | Activate new settings ? ][ Yes | No ]") == 1) do_settings(); break; case CANCEL : if (form_alert (1, "[2][ | Leave LogCTRL ? ][ Yes | No ]") == 1) end = TRUE; break; } } while (! end); form_dial (FMD_FINISH, 0,0,0,0, box_x, box_y, box_w, box_h); v_clsvwk (vdi_handle); }
/* ------------------------------------------------------------------ */ static void choose_font(void) { OBJECT *loading; int cx, cy, cw, ch; bool is_prn; is_prn = (form_alert( 1, "[0][select device][screen|printer]" )==2); dprintf(( "\033Hselected %s workstation\n", is_prn? "printer": "screen" )); if( init_wkstn( is_prn ) ) { graf_mouse(BUSY_BEE, 0); dprintf(( "ready to load fonts ... " )); dgetchar(); rsrc_gaddr( R_TREE, LDGFONTS, &loading ); form_center( loading, &cx, &cy, &cw, &ch); form_dial(FMD_START, 0, 0, 0, 0, cx, cy, cw, ch); objc_draw( loading, ROOT, MAX_DEPTH, cx, cy, cw, ch); (void)vst_load_fonts(handle, 0); form_dial( FMD_FINISH, 0, 0, 0, 0, cx, cy, cw, ch ); dprintf(( "\033Hdone\nnow getting font names ..." )); dgetchar(); if( get_fontnames( *(tGemFont **)(&_contrl[10]) ) ) { dprintf(( "done\n" )); dgetchar(); graf_mouse(ARROW, 0); while( select_font( is_prn ) ) { if( iSelected == NO_INDEX ) { form_alert( 1, "[1][You must choose|a font to dump][Try Again]" ); } else if( gem_file_name[0] == '\0' ) { form_alert( 1, "[1][You must choose a|" "gem font file name][Try Again]" ); } else { dump_font(); gem_file_name[0] = '\0'; /* reset entries for next round */ iSelected = NO_INDEX; } /* if */ } /* while */ } /* if */ vst_unload_fonts(handle, 0); free(name_table); dprintf(( "\033Hclosing %s workstation ...", is_prn? "printer": "screen" )); if( is_prn ) v_clswk(handle); else v_clsvwk(handle); } else form_alert(1, "[3][Can't open workstation][OK]"); } /* choose_font() */
/* ***Fenster anmelden + Dialog zeichnen*** */ int wdial_init(OBJECT *tree, char *title) { short wx, wy, ww, wh; int dwhndl; form_center(tree, &wx, &wy, &ww, &wh); /* Gr��e holen */ wind_calc(WC_BORDER, NAME|MOVER, wx, wy, ww, wh, &wx, &wy, &ww, &wh); dwhndl=wind_create(NAME|MOVER, wx, wy, ww, wh); /* Fenster anmelden */ if(dwhndl<0) return(NULL); wind_set(dwhndl, WF_NAME, title); /* Name setzen */ wind_open(dwhndl, wx, wy, ww, wh); /* Fenster �ffnen */ objc_draw(tree, ROOT, MAX_DEPTH, wx, wy, ww, wh); /* Dialog zeichnen */ return(dwhndl); }
void init_infowin(void) { short dummy; rsrc_gaddr(R_TREE,INFORMATION,&info_win.dialog); strncpy(info_win.w_name,"FireMail information",MAXWINSTRING); info_win.attr=NAME|MOVE|CLOSE; info_win.icondata=NULL; info_win.status=WINDOW_CLOSED; form_center(info_win.dialog, &dummy, &dummy, &dummy, &dummy); str2ted(info_win.dialog,INFO_VERSION,alerts[VERSION]); rsrc_gaddr(R_TREE,REGISTER,®ister_win.dialog); strncpy(register_win.w_name,"FireMail Registration",MAXWINSTRING); register_win.attr=NAME|MOVE|CLOSE; register_win.icondata=NULL; register_win.status=WINDOW_CLOSED; form_center(register_win.dialog, &dummy, &dummy, &dummy, &dummy); str2ted(register_win.dialog,REG_NAME,"Unregistered"); str2ted(register_win.dialog,REG_ADR1,""); str2ted(register_win.dialog,REG_ADR2,""); str2ted(register_win.dialog,REG_ADR3,""); str2ted(register_win.dialog,REG_KEY,""); }
void init_registerwin(void) { short dummy; rsrc_gaddr(R_TREE,REGISTER,®ister_win.dialog); strncpy(register_win.w_name,"Registration",MAXWINSTRING); register_win.attr=NAME|CLOSE|SMALLER|MOVE; register_win.icondata=&icons[ICON_INFO]; register_win.status=WINDOW_CLOSED; str2ted(register_win.dialog,REG_NAME,""); str2ted(register_win.dialog,REG_ADR1,""); str2ted(register_win.dialog,REG_ADR2,""); str2ted(register_win.dialog,REG_ADR3,""); str2ted(register_win.dialog,REG_KEY,""); form_center(register_win.dialog, &dummy, &dummy, &dummy, &dummy); }
void init_path_win(void) { #ifdef LOGGING Log(LOG_FUNCTION,"init_path_win(void)\n"); Log(LOG_INIT,"Path Window Init\n"); #endif rsrc_gaddr(R_TREE,PATH,&path_win.dialog); strncpy(path_win.w_name,alerts[WN_PATH],MAXWINSTRING); path_win.attr=NAME|MOVE|CLOSE; path_win.icondata=NULL; /* &icons[ICON_FIRESTORM]; */ path_win.i_x=100; path_win.i_y=100; path_win.status=WINDOW_CLOSED; path_win.type=TYPE_DIALOG; form_center(path_win.dialog, (short *)&tempvar.tempcounter, (short *)&tempvar.tempcounter, (short *)&tempvar.tempcounter, (short *)&tempvar.tempcounter); Return; }
void init_user_win(void) { #ifdef LOGGING Log(LOG_FUNCTION,"init_user_win(void)\n"); Log(LOG_INIT,"User Window Init\n"); #endif rsrc_gaddr(R_TREE,USER,&user_win.dialog); strncpy(user_win.w_name,alerts[WN_PATH],MAXWINSTRING); user_win.attr=NAME|MOVE|CLOSE|SMALLER; user_win.icondata=&icons[ICON_FIRESTORM]; user_win.i_x=100; user_win.i_y=100; user_win.status=WINDOW_CLOSED; user_win.type=TYPE_DIALOG; form_center(user_win.dialog, (short *)&tempvar.tempcounter, (short *)&tempvar.tempcounter, (short *)&tempvar.tempcounter, (short *)&tempvar.tempcounter); Return; }
void init_switch_win(void) { #ifdef LOGGING Log(LOG_FUNCTION,"init_switch_win(void)\n"); Log(LOG_INIT,"Switches window Init\n"); #endif rsrc_gaddr(R_TREE,SWITCHES,&switch_win.dialog); strncpy(switch_win.w_name,alerts[WN_SWITCH],MAXWINSTRING); switch_win.attr=NAME|MOVE|CLOSE; switch_win.icondata=&icons[ICON_FIRESTORM]; switch_win.i_x=100; switch_win.i_y=100; switch_win.status=WINDOW_CLOSED; switch_win.type=TYPE_DIALOG; form_center(switch_win.dialog, (short *)&tempvar.tempcounter, (short *)&tempvar.tempcounter, (short *)&tempvar.tempcounter, (short *)&tempvar.tempcounter); Return; }
void std_input(char *title, char *text, char *txt_cancel) { int x, y, w, h ; int button ; if ( stdinput == NULL ) stdinput_fix() ; if ( txt_cancel != NULL ) strcpy( stdinput[INPUT_CANCEL].ob_spec.free_string, txt_cancel ) ; write_text(stdinput, INPUT_TEXT, "") ; write_text(stdinput, INPUT_TITLE, title) ; form_center(stdinput, &x, &y, &w, &h) ; form_dial(0, x, y, w, h, x, y, w, h) ; objc_draw(stdinput, 0, 200, x, y, w, h) ; button = form_do(stdinput, INPUT_TEXT) ; deselect(stdinput, button) ; form_dial(3, x, y, w, h, x, y, w, h) ; if (button == INPUT_OK) read_text(stdinput, INPUT_TEXT, text) ; else text[0] = 0 ; }
int main(void) { int x,y,w,h; int vid; int work_in[] = {1,7,1,1,1,1,1,1,1,1,2}; int work_out[57]; OBJECT * dial; appl_init(); vid = graf_handle(&vid,&vid,&vid,&vid); v_opnvwk(work_in,&vid,work_out); if(rsrc_load("test2rsc.rsc")) { rsrc_gaddr(R_TREE,TESTDIAL,&dial); form_center(dial,&x,&y,&w,&h); form_dial(FMD_START,0,0,0,0,x,y,w,h); objc_draw(dial,0,9,x,y,w,h); own_form_do(dial,0); form_dial(FMD_FINISH,0,0,0,0,x,y,w,h); rsrc_free(); } else { form_alert(1,"[1][Couldn't load resource file!][Bummer!]"); } v_clsvwk(vid); appl_exit(); return 0; }
void fg_init(WINDFORM *wind) { form_center(wind->formtree,&wind->form.x,&wind->form.y, &wind->form.w,&wind->form.h); wind_calc(WC_BORDER,wind->windkind,wind->form.x,wind->form.y, wind->form.w,wind->form.h,&wind->wind.x,&wind->wind.y, &wind->wind.w,&wind->wind.h); wind->whandle=wind_create(wind->windkind,wind->wind.x,wind->wind.y, wind->wind.w,wind->wind.h); wind_set(wind->whandle,WF_NAME,wind->wind_title); if(wind == &windforms[WIND_CTRL]) wind_set(wind->whandle,WF_BEVENT,1,0,0,0); /* untoppable */ wind_calc(WC_WORK,wind->windkind,wind->wind.x,wind->wind.y, wind->wind.w,wind->wind.h,&wind->form.x,&wind->form.y, &wind->form.w,&wind->form.h); wind->formtree[wind->firstobj].ob_x=wind->form.x; wind->formtree[wind->firstobj].ob_y=wind->form.y; wind->formtree[wind->firstobj].ob_width=wind->form.w; wind->formtree[wind->firstobj].ob_height=wind->form.h; }
void init_exportwin(void) { short dummy; rsrc_gaddr(R_TREE,EXPORT,&export_win.dialog); strncpy(export_win.w_name,alerts[WN_EXPORT],MAXWINSTRING); export_win.attr=NAME|MOVE|CLOSE; export_win.icondata=NULL; export_win.status=WINDOW_CLOSED; export_win.type=TYPE_DIALOG; form_center(export_win.dialog, &dummy, &dummy, &dummy, &dummy); button(&export_win,EXPORT_TYPE_0,CLEAR_STATE,SELECTED,FALSE); button(&export_win,EXPORT_TYPE_1,CLEAR_STATE,SELECTED,FALSE); button(&export_win,EXPORT_TYPE_2,CLEAR_STATE,SELECTED,FALSE); button(&export_win,EXPORT_TYPE_3,CLEAR_STATE,SELECTED,FALSE); button(&export_win,EXPORT_TYPE_4,CLEAR_STATE,SELECTED,FALSE); button(&export_win,EXPORT_TYPE_5,CLEAR_STATE,SELECTED,FALSE); button(&export_win,EXPORT_TYPE_6,CLEAR_STATE,SELECTED,FALSE); button(&export_win,EXPORT_TYPE_7,CLEAR_STATE,SELECTED,FALSE); button(&export_win,EXPORT_TYPE_8,CLEAR_STATE,SELECTED,FALSE); button(&export_win,EXPORT_TYPE_9,CLEAR_STATE,SELECTED,FALSE); }
/* ------------------------- | Dialog window handler | ------------------------- */ int dialog_window(int wind_id, OBJECT *dialog, int action, int ext) { int x, y, w, h, s; int w_x, w_y, w_w, w_h; int hndl, sel; switch(action) { case CLS_DIA: wind_close(wind_id); wind_delete(wind_id); break; case OPN_DIA: form_center(dialog, &x, &y, &w, &h); wind_calc(WC_BORDER, MOVER|NAME, x, y, w, h, &w_x, &w_y, &w_w, &w_h); hndl = open_window(MOVER|NAME, w_x, w_y, w_w, w_h, ""); return hndl; case RDW_DIA: s = first_rect(wind_id, 0); while(s) { objc_draw(dialog, ext, MAX_DEPTH, r_xy[0], r_xy[1], r_xy[2], r_xy[3]); s = next_rect(wind_id, 0); } break; case ACT_DIA: sel = win_formdo(dialog, ext, wind_id); if (dialog[sel].ob_flags & EXIT) dialog[sel].ob_state &= ~SELECTED; return sel; } return 0; }
/* ----------------- */ show_font() { int off, key, w, h, ww, wh, dummy; register int i, hg, eo; OBJECT *show_form; int sx, sy, sw, sh, c_xy[4], eff = NORMAL, f_sld; int sk = 0; menu_bar(menu_adr, FALSE); store_char(); inst_font(&show_head); vsf_interior(vdi_handle, 0); for (i = 0; i < 14 && show_head.skewmask != skew[i]; i++); if (i < 14) sk = i; else sk = 6; rsrc_gaddr(ROOT, SHW_FLD, &show_form); form_center(show_form, &sx, &sy, &sw, &sh); strcpy(show_form[SHW_NAM].ob_spec, font_back[FONTNAME].ob_spec); strcpy(show_form[SHW_DEF].ob_spec, font_back[CHAR_DEF].ob_spec); show_form[BOLD].ob_state &= ~SELECTED; show_form[ITALIC].ob_state &= ~SELECTED; show_form[LIGHT].ob_state &= ~SELECTED; show_form[OUTL].ob_state &= ~SELECTED; show_form[UNDERL].ob_state &= ~SELECTED; show_form[KR_UP].ob_state |= DISABLED; show_form[KR_DWN].ob_state |= DISABLED; show_form[UL_UP].ob_state |= DISABLED; show_form[UL_DWN].ob_state |= DISABLED; hg = show_head.top * 2; make_rasc((long)hg, 100L, ((TEDINFO *)show_form[SHW_TG].ob_spec)->te_ptext); off = akt_char; set_aktshw(&f_sld, off, show_form); make_rasc((long)show_head.formheight, 10L, show_form[SHW_HGHT].ob_spec); objc_draw(show_form, ROOT, MAX_DEPTH, sx, sy, sw, sh); objc_offset(show_form, SHW_WIND, &c_xy[0], &c_xy[1]); c_xy[2] = c_xy[0] + show_form[SHW_WIND].ob_width - 1; c_xy[3] = c_xy[1] + show_form[SHW_WIND].ob_height - 1; do { make_fontscreen(off, hg, c_xy, eff); eo = form_do(show_form, 0) & 0x7FFF; if (!(show_form[eo].ob_state & DISABLED)) switch(eo) { case BOLD: if (show_form[BOLD].ob_state & SELECTED) eff |= 1; else eff &= ~1; break; case LIGHT: if (show_form[LIGHT].ob_state & SELECTED) eff |= 2; else eff &= ~2; break; case ITALIC: if (show_form[ITALIC].ob_state & SELECTED) { eff |= 4; show_form[KR_UP].ob_state &= ~DISABLED; show_form[KR_DWN].ob_state &= ~DISABLED; } else { eff &= ~4; show_form[KR_UP].ob_state |= DISABLED; show_form[KR_DWN].ob_state |= DISABLED; } objc_draw(show_form, SHW_PARA, MAX_DEPTH, sx, sy, sw, sh); break; case UNDERL: if (show_form[UNDERL].ob_state & SELECTED) { eff |= 8; show_form[UL_UP].ob_state &= ~DISABLED; show_form[UL_DWN].ob_state &= ~DISABLED; } else { eff &= ~8; show_form[UL_UP].ob_state |= DISABLED; show_form[UL_DWN].ob_state |= DISABLED; } objc_draw(show_form, SHW_PARA, MAX_DEPTH, sx, sy, sw, sh); break; case OUTL: if (show_form[OUTL].ob_state & SELECTED) eff |= 16; else eff &= ~16; break; case TG_UP: if (hg < show_head.top * 2) do { hg++; }while(hg == show_head.top); make_rasc((long)hg, 100L, ((TEDINFO *)show_form[SHW_TG].ob_spec)->te_ptext); objc_draw(show_form, SHW_TG, MAX_DEPTH, sx, sy, sw, sh); break; case TG_DWN: if (hg > 3) do { hg--; }while(hg == show_head.top); make_rasc((long)hg, 100L, ((TEDINFO *)show_form[SHW_TG].ob_spec)->te_ptext); objc_draw(show_form, SHW_TG, MAX_DEPTH, sx, sy, sw, sh); break; case UL_DWN: if (show_head.underlinemask < 10) show_head.underlinemask++; break; case UL_UP: if (show_head.underlinemask > 0) show_head.underlinemask--; break; case KR_DWN: if (sk < 13) show_head.skewmask = skew[++sk]; break; case KR_UP: if (sk > 0) show_head.skewmask = skew[--sk]; break; case SHW_UP: if (off > 0) off--; set_aktshw(&f_sld, off, show_form); objc_draw(show_form, SHW_CBKG, MAX_DEPTH, sx, sy, sw, sh); objc_draw(show_form, SHW_INFO, MAX_DEPTH, sx, sy, sw, sh); break; case SHW_DWN: if (off < 255) off++; set_aktshw(&f_sld, off, show_form); objc_draw(show_form, SHW_CBKG, MAX_DEPTH, sx, sy, sw, sh); objc_draw(show_form, SHW_INFO, MAX_DEPTH, sx, sy, sw, sh); break; default: show_form[eo].ob_state &= ~SELECTED; } }while(eo != SHW_END); deinst_font(); menu_bar(menu_adr, TRUE); objc_change(font_back, MARKER, 0, fx, fy, fw, fh, NORMAL, TRUE); form_dial(FMD_FINISH, 0, 0, 0, 0, sx, sy, sw, sh); show_character(); show_ccharacter(); draw_edit(); objc_change(font_back, MARKER, 0, fx, fy, fw, fh, SELECTED, TRUE); }
static bool select_font( bool is_prn ) { int button, cx, cy, cw, ch, mousey, slidey, dum; int index, i, double_click; long pos; static int top = 0; /* first name set to the top */ wind_update(BEG_UPDATE); set_slider_size(); /* set slider size and position, like a GEM window */ set_slider_pos(top); ((TEDINFO *)chooser[CHACTION].ob_spec)->te_ptext = " Choose GDOS font "; ((TEDINFO *)chooser[CHTITLE].ob_spec)->te_ptext = is_prn? " Printer font list: ": " Screen font list: "; ((TEDINFO *)chooser[GEMFNAME].ob_spec)->te_ptext = gem_file_name; ((TEDINFO *)chooser[GEMFNAME].ob_spec)->te_txtlen = sizeof(gem_file_name); form_center(chooser, &cx, &cy, &cw, &ch); form_dial(FMD_START, 0, 0, 0, 0, cx, cy, cw, ch); objc_draw(chooser, ROOT, MAX_DEPTH, cx, cy, cw, ch); /* ** the chooser can show up to MAX_NAMES names. If there are fewer than this, ** the empty slots are disabled by clearing the TOUCHEXIT flags */ for( i=0; i<MAX_NAMES; i++ ) { if( i<nr_names ) { chooser[NAME1+i].ob_flags |= TOUCHEXIT; } else { chooser[NAME1+i].ob_flags &= ~TOUCHEXIT; } /* if */ } /* for */ show_names( top ); /* display the font names */ /** the main loop **/ do { button =form_do( chooser, GEMFNAME ); dprintf(( "\033Hbutton is %x\n", button)); dgetchar(); if(button&0x8000) { /* double click */ double_click = TRUE; button &= 0x7fff; } else double_click = FALSE; if(button ==DNARR) { if((top+MAX_NAMES)<nr_names) { top++; /* next name in the list */ show_names( top ); set_slider_pos(top); objc_draw(chooser, SLIDEBAR, MAX_DEPTH, cx, cy, cw, ch); } } else if(button ==UPARR) { if(top>0) { top--; show_names( top ); set_slider_pos(top); objc_draw(chooser, SLIDEBAR, MAX_DEPTH, cx, cy, cw, ch); } } else if(button ==SLIDEBAR && nr_names>MAX_NAMES) { /* handle clicks on the slidebar */ graf_mkstate(&dum, &mousey, &dum, &dum); /* where is the mouse - above or below the slider? */ objc_offset(chooser, SLIDER, &dum, &slidey); if(mousey<slidey) { /* mouse is above the slider */ top-=MAX_NAMES; /* move up one page of names */ if(top<0) top =0; } else { top+=MAX_NAMES; if(top>(nr_names-MAX_NAMES)) top =nr_names-MAX_NAMES; } /* if */ show_names( top ); set_slider_pos(top); objc_draw(chooser, SLIDEBAR, MAX_DEPTH, cx, cy, cw, ch); } else if(button ==SLIDER && nr_names>MAX_NAMES) { /* handle the slider */ pos =graf_slidebox(chooser, SLIDEBAR, SLIDER, 1); /* the position the user wants */ chooser[SLIDER].ob_y =pos*(long)(chooser[SLIDEBAR].ob_height-chooser[SLIDER].ob_height)/1000; top =pos*(nr_names-MAX_NAMES)/1000; if(top<0) top =0; if(top>(nr_names-MAX_NAMES)) top =nr_names-MAX_NAMES; show_names( top ); objc_draw(chooser, SLIDEBAR, MAX_DEPTH, cx, cy, cw, ch); } else if(button>=NAME1 && button<=NAME8) { /*** the user has clicked on a font name ***/ index = top+button-NAME1; dprintf(( "\033Hindex is %d\n", index)); dgetchar(); if( iSelected == index ) { /* the name is already selected */ assert( iSelected >=0 ); assert( iSelected < nr_names ); iSelected = NO_INDEX; /* deselect it */ highlight(button); /* remove the highlight from the name */ } else { /* is the currently selected font name displayed in the box? */ if( iSelected!=NO_INDEX && (iSelected+NAME1-top)>=NAME1 && (iSelected+NAME1-top)<=NAME8 ) { highlight( iSelected+NAME1-top ); /* remove highlight */ } /* if */ iSelected = index; /* set the index for the new selection */ highlight(button); /* and highlight it */ } /* if */ if(double_click) button =CHOOSEOK; /* if double clicked on a name, exit immediately */ } /* if */ assert( iSelected == NO_INDEX || iSelected >=0 ); assert( iSelected == NO_INDEX || iSelected < nr_names ); } while(button!=CHOOSEOK && button!=CHOOSECA); /** returned from form, process user actions **/ dprintf(( "\033HiSelected is %d\n", iSelected)); dgetchar(); dprintf(( "selected name is %s\n", name_table[iSelected].name )); dprintf(( "gem file name is %s\n", ((TEDINFO *)chooser[GEMFNAME].ob_spec)->te_ptext )); dprintf(( "%s format%s\n", chooser[MOT].ob_state&SELECTED ? "motorola" : "intel", chooser[WIDONLY].ob_state&SELECTED ? ", width tables only" : "" )); dgetchar(); assert( (chooser[MOT].ob_state & SELECTED) != (chooser[INTEL].ob_state&SELECTED) ); fMot = (chooser[MOT].ob_state & SELECTED) != 0; fWidOnly = (chooser[WIDONLY].ob_state & SELECTED) != 0; chooser[button].ob_state &= ~SELECTED; form_dial( FMD_FINISH, 0, 0, 0, 0, cx, cy, cw, ch ); wind_update( END_UPDATE ); return button==CHOOSEOK; } /* select_font() */
/* show configuration dial, return 1 to cancel installation */ int configure( void ) { OBJECT *tree = rs_object; int quit = 0; int x, y, w, h, ox, oy; MRETS mk; int savelinear, saveudset, savetime, saveptime; if( ma_info == &start ) /* ma_info points at our start */ ObString(OK) = (char *)(rs_frstr[INSTRING]); /* set accel buttons */ savelinear = ma_info->linear; set_accelbox( savelinear ); /* set screensave buttons */ saveudset = ma_info->udset; set_screenbox( saveudset ); savetime = (ma_info->timeout)/3600; sl_x( SAVEBOX, savetime, SAVE_MIN, SAVE_MAX ); /* set modem switch */ if( ma_info->watch ) { Select(MODEM); } else { Deselect(MODEM); } /* set stacy options box */ if( ma_info->stacy ) { ObFlags( SWITCH ) = ObFlags( LITE ) = TOUCHEXIT; if( ma_info->stacmask & SH_SCREEN ) Select( SWITCH ); if( ma_info->stacmask & SH_LIGHT ) Select( LITE ); } else { ObFlags(SWITCH) = ObFlags(LITE) = NONE; ObState(SWITCH) = ObState(LITE) = DISABLED; /* deselects */ } /* set up park box */ Supexec((long(*)())get_parktime); if( parktime >= 0 ) parktime = ma_info->savepark; saveptime = parktime; if( saveptime == 0 ) saveptime = 1; set_parkbox(); if( parktime >= 0 ) sl_x( PARKBOX, parktime, PARK_MIN, PARK_MAX ); /* set appropriate icons */ graf_handle( &x, &y, &w, &h ); if( y < 16 ) { /* if char cell is < 16 pixels high, use 8 pixel icons */ ObSpec(IACCOFF).bitblk = (BITBLK *)(rs_frimg[ACCOFF8]); ObSpec(IACCSLOW).bitblk = (BITBLK *)(rs_frimg[ACCSLOW8]); ObSpec(IACCFAST).bitblk = (BITBLK *)(rs_frimg[ACCFAST8]); ObSpec(ISCREEN).bitblk = (BITBLK *)(rs_frimg[SCREEN8]); ObSpec(SAVEUP).bitblk = (BITBLK *)(rs_frimg[TIMEHI8]); ObSpec(SAVEDOWN).bitblk = (BITBLK *)(rs_frimg[TIMELO8]); ObSpec(IMODEM).bitblk = (BITBLK *)(rs_frimg[MODEM8]); ObSpec(IPARK).bitblk = (BITBLK *)(rs_frimg[PARK8]); ObSpec(PARKUP).bitblk = (BITBLK *)(rs_frimg[TIMEHI8]); ObSpec(PARKDOWN).bitblk = (BITBLK *)(rs_frimg[TIMELO8]); ObSpec(ILITE).bitblk = (BITBLK *)(rs_frimg[LITE8]); ObSpec(ISWITCH).bitblk = (BITBLK *)(rs_frimg[SCREEN8]); } form_center( rs_object, &x, &y, &w, &h ); form_dial( FMD_START, 0, 0, 0, 0, x, y, w, h ); form_dial( FMD_GROW, 0, 0, 0, 0, x, y, w, h ); objc_draw( tree, 0, MAX_DEPTH, x, y, w, h ); graf_mouse( ARROW, 0L ); do { switch( form_do( rs_object, 0 ) & 0x7fff ) { case LITE: if( IsSelected(LITE) ) { /* deselecting */ /* don't allow user to select screensave without litesave */ Deselect(SWITCH); Deselect(LITE); } else { Select(LITE); } Objc_draw( tree, STACOPTS, MAX_DEPTH, NULL ); break; case SWITCH: if( IsSelected(SWITCH) ) { /* deselecting */ Deselect(SWITCH); } else { /* don't allow user to select screensave without litesave */ Select(LITE); Select(SWITCH); } Objc_draw( tree, STACOPTS, MAX_DEPTH, NULL ); break; case SCREEN: /* floggle the bit */ ma_info->udset ^= 1; ma_info->updown = ma_info->udset; set_screenbox( ma_info->udset ); Objc_draw( tree, SCRNSECT, MAX_DEPTH, NULL); break; case ACCOFF: ma_info->linear = -1; break; case ACCSLOW: ma_info->linear = 1; break; case ACCFAST: ma_info->linear = 0; break; case SAVEUP: sl_arrow( SAVEBOX, SAVEUP, 1, SAVE_MIN, SAVE_MAX, &savetime ); break; case SAVEDOWN: sl_arrow( SAVEBOX, SAVEDOWN, -1, SAVE_MIN, SAVE_MAX, &savetime ); break; case SAVESLID: sl_drag( SAVEBOX, SAVE_MIN, SAVE_MAX, &savetime ); break; case SAVEBOX: Graf_mkstate( &mk ); objc_offset( tree, SAVESLID, &ox, &oy ); if( mk.x < ox ) oy = -SAVE_PAGE; else oy = SAVE_PAGE; sl_arrow( SAVEBOX, -1, oy, SAVE_MIN, SAVE_MAX, &savetime ); break; case PARK: if( IsSelected( PARK ) ) { /* deselecting */ saveptime = parktime; parktime = 0; } else { parktime = saveptime; sl_x( PARKBOX, parktime, PARK_MIN, PARK_MAX ); } set_parkbox(); Objc_draw( tree, PARKSECT, MAX_DEPTH, NULL ); break; case PARKUP: sl_arrow( PARKBOX, PARKUP, 1, PARK_MIN, PARK_MAX, &parktime ); break; case PARKDOWN: sl_arrow( PARKBOX, PARKDOWN, -1, PARK_MIN, PARK_MAX, &parktime ); break; case PARKSLID: sl_drag( PARKBOX, PARK_MIN, PARK_MAX, &parktime ); break; case PARKBOX: Graf_mkstate( &mk ); objc_offset( tree, PARKSLID, &ox, &oy ); if( mk.x < ox ) oy = -PARK_PAGE; else oy = PARK_PAGE; sl_arrow( PARKBOX, -1, oy, PARK_MIN, PARK_MAX, &parktime ); break; case SAVE: save_conf( savetime ); rs_object[SAVE].ob_state = NORMAL; Objc_draw( tree, ROOT, MAX_DEPTH, NULL ); break; case OK: quit = OK; break; case CANCEL: quit = CANCEL; break; } /* delay after touchexit objects */ wait_bup(); } while (!quit); form_dial( FMD_SHRINK, 0, 0, 0, 0, x, y, w, h ); form_dial( FMD_FINISH, 0, 0, 0, 0, x, y, w, h ); if( quit == CANCEL ) { ma_info->updown = ma_info->udset = saveudset; ma_info->linear = savelinear; } else { if( IsSelected(MODEM) ) ma_info->watch = 1; else ma_info->watch = 0; if( ma_info->stacy ) { if( IsSelected(SWITCH) ) { ma_info->stacmask |= SH_SCREEN; } else { ma_info->stacmask &= ~SH_SCREEN; } if( IsSelected(LITE) ) { ma_info->stacmask |= SH_LIGHT; } else { ma_info->stacmask &= ~SH_LIGHT; } } ma_info->timeout = savetime * 3600; ma_info->savepark = parktime; Supexec((long(*)())set_ptime); } return (quit == CANCEL); }
void main(void) { WORD x,y,w,h; WORD mx,my,button,kstate,clicks; MFDB mfdbs,mfdbd; WORD xyarray[8],vid; WORD work_in[] = {1,7,1,1,1,1,1,1,1,1,2}; WORD work_out[57]; OBJECT *dial; char path[200],file[30]; appl_init(); strcpy(path,"C:\\*"); strcpy(file,"noname.inf"); vid = graf_handle(&vid,&vid,&vid,&vid); v_opnvwk(work_in,&vid,work_out); /* for(x = 0; x < 25; x++) form_error(x); */ /* fsel_input(path,file,&button); */ form_alert(3,"[2][Test av|form_alert.|Windoze rulez...|...___NOOOT!___][Ja|Kanske|Nej]"); if(rsrc_load("test2rsc.rsc")) { int co; int i; rsrc_gaddr(R_TREE,TESTDIAL,&dial); form_center(dial,&x,&y,&w,&h); form_dial(FMD_START,0,0,0,0,x,y,w,h); objc_draw(dial,0,9,x,y,w,h); form_do(dial,0); form_dial(FMD_FINISH,0,0,0,0,x,y,w,h); i = 0; objc_delete(dial,11); while(1) { fprintf(stderr,"%3d next=%3d head=%3d tail=%3d\r\n", i,dial[i].ob_next,dial[i].ob_head,dial[i].ob_tail); if(dial[i].ob_flags & LASTOB) { break; }; i++; }; getchar(); rsrc_free(); } else { form_alert(1,"[1][Couldn't load resource file!][Bummer!]"); }; v_clsvwk(vid); fprintf(stderr,"environ size=%d",shel_write(SWM_ENVIRON,ENVIRON_SIZE,0,NULL,NULL)); appl_exit(); }
static void dump_font() { const tGemFont *const pgf = name_table[iSelected].pFont; const uint16 nr_entries = pgf->last_ade - pgf->first_ade + 1; const uint32 size_wid = (nr_entries+1) * sizeof(uint16); uint32 size_hor; register tGemFont *phdr; FILE *fp; int16 dummy; int16 clip_array[4] = { 0, 0, 100, 100 }; OBJECT *generating; int cx, cy, cw, ch; char *err_str; dprintf(( "\033Hgenerating fonts ... " )); dgetchar(); rsrc_gaddr( R_TREE, GENFONTS, &generating ); form_center( generating, &cx, &cy, &cw, &ch); form_dial(FMD_START, 0, 0, 0, 0, cx, cy, cw, ch); objc_draw( generating, ROOT, MAX_DEPTH, cx, cy, cw, ch); vst_font( handle, pgf->font_id ); vst_point( handle, pgf->size, &dummy, &dummy, &dummy, &dummy ); assert( (pgf->flags&MOT_FLAG) != 0 ); size_hor = pgf->flags&HOR_FLAG ? nr_entries : 0; phdr = (tGemFont*)malloc( sizeof(tGemFont) + size_wid ); if( phdr == NULL ) { err_str = "[3][Not enough memory|to convert font][OK]"; goto error0; } /* if */ *phdr = *pgf; /* copy header data */ phdr->h_table = (int8*)sizeof(tGemFont); phdr->off_table = (int16*)((uint32)phdr->h_table + size_hor); phdr->dat_table = (int8*)((uint32)phdr->off_table + size_wid); memcpy( phdr+1, pgf->off_table, size_wid ); if( !fMot ) { register int16 *char_tbl = (int16*)(phdr+1); register uint16 i; for (i = nr_entries+1; i > 0; i--) { Swapw(*char_tbl); char_tbl++; } /* for */ /* swap header words and longs */ phdr->flags &= ~MOT_FLAG; Swapw(phdr->font_id); Swapw(phdr->size); Swapw(phdr->first_ade); Swapw(phdr->last_ade); Swapw(phdr->top); Swapw(phdr->ascent); Swapw(phdr->half); Swapw(phdr->descent); Swapw(phdr->bottom); Swapw(phdr->max_char_width); Swapw(phdr->max_cell_width); Swapw(phdr->left_offset); Swapw(phdr->right_offset); Swapw(phdr->thicken); Swapw(phdr->ul_size); Swapw(phdr->lighten); Swapw(phdr->skew); Swapw(phdr->flags); Swapl(phdr->h_table); Swapl(phdr->off_table); Swapl(phdr->dat_table); Swapw(phdr->form_width); Swapw(phdr->form_height); } /* if */ fp = fopen( gem_file_name, "wb" ); if( fp == NULL ) { err_str = "[3][can't open gem font file][OK]"; goto error1; } /* if */ /** write the font header **/ assert( phdr != NULL ); if( fwrite( phdr, sizeof( *phdr), 1, fp ) != 1 ) { goto error2; } /* if */ if( size_hor != 0 ) { /** write horizontal offset table **/ assert( pgf->h_table != NULL ); if( fwrite( pgf->h_table, nr_entries, 1, fp ) != 1 ) { goto error2; } /* if */ } /* if */ /** write the character offset table **/ if( fwrite( phdr+1, size_wid, 1, fp ) != 1 ) { goto error2; } /* if */ if( !fWidOnly ) { /** write the character data table **/ int q; unsigned char char_array[2] = { '\0', '\0' }; dprintf(( "\033Hgenerating character data\n" )); dgetchar(); vs_clip( handle, 1, clip_array ); for( q=nr_entries, *char_array=pgf->first_ade; q>0; q--, (*char_array)++ ) { v_gtext( handle, 200, 200, char_array ); } /* for */ vs_clip( handle, 0, clip_array ); assert( pgf->dat_table != NULL ); if( fwrite( pgf->dat_table, pgf->form_width, pgf->form_height, fp ) != pgf->form_height ) { goto error2; } /* if */ } /* if */ fclose( fp ); free( phdr ); form_dial( FMD_FINISH, 0, 0, 0, 0, cx, cy, cw, ch ); return; error2: fclose( fp ); err_str = "[3][can't write to|gem font file][OK]"; error1: free( phdr ); error0: form_dial( FMD_FINISH, 0, 0, 0, 0, cx, cy, cw, ch ); form_alert(1, err_str ); } /* dump_font() */
/******************************************************* * load fonts for device * get font chain and dump fonts (width table only) in current directory */ static void dump_gem_fonts( int16 dev_nr ) { const tGemFont *pgf; /* pointer to the font chain */ int16 handle; char *err_msg; register tGemFont *phdr; /* pointer to font we are making */ char *const gempath = ((void**)pInfo)[-1]; FILE *fp; int xdial,ydial,wdial,hdial; /* co-ords for dialog box */ int x,y,w,h; handle = init_wkstn( dev_nr ); /* open the workstation */ if( handle == 0 ) { sprintf( err_string, "[3][can't connect to %s][skip]", dev_nr>10? "printer": "screen" ); form_alert(1, err_string ); return; } /* if */ if( vst_load_fonts( handle, 0 ) == 0 ) { sprintf( err_string, "[3][can't find fonts for %s][skip]", dev_nr>10? "printer": "screen" ); goto error0; } /* if */ pgf = *(tGemFont **)(&_contrl[10]); /* get pointer to font chain */ save[dev_nr].pw->first_font = gem_font_count; /****************** * loop thru font chain, * writing a new font file for each font found in the chain * count the fonts so we can assign them to the workstations * this can take quite a while, so report progress as we go */ form_center (&rs_object,&xdial,&ydial,&wdial,&hdial); x=y=w=h=0; form_dial (FMD_START,x,y,w,h,xdial,ydial,wdial,hdial); /* reserve room */ for( ; pgf!=NULL; pgf=pgf->next_font ) { const uint16 nr_entries = pgf->last_ade - pgf->first_ade + 1; const uint32 size_wid = (nr_entries+1) * sizeof(int16); /* sizeof(*(tGemFont*)->off_table) */ register int16 *char_tbl; register uint16 i; /* printf( "line %d, %.32s, %d points\n", (int)__LINE__, pgf->name, pgf->size ); */ sprintf( usr_msg, "storing gem fonts: %d", gem_font_count ); objc_draw( &rs_object, 0, 2, xdial, ydial, wdial, hdial ); /* draw the dialog box */ phdr = (tGemFont*)malloc( sizeof(tGemFont) + size_wid ); if( phdr == NULL ) { err_msg = "[3][Not enough memory|to dump font][OK]"; goto error1; } /* if */ *phdr = *pgf; /* copy header data */ phdr->off_table = (int16*)sizeof(tGemFont); memcpy( phdr+1, pgf->off_table, size_wid ); phdr->dat_table = 0L; /** convert font to intel format before dumping **/ for( i = nr_entries+1, char_tbl = (int16*)(phdr+1); i > 0; i--, char_tbl++ ) { Swapw(*char_tbl); } /* for */ /* swap header words and longs */ phdr->flags &= ~MOT_FLAG; Swapw(phdr->font_id); Swapw(phdr->size); Swapw(phdr->first_ade); Swapw(phdr->last_ade); Swapw(phdr->top); Swapw(phdr->ascent); Swapw(phdr->half); Swapw(phdr->descent); Swapw(phdr->bottom); Swapw(phdr->max_char_width); Swapw(phdr->max_cell_width); Swapw(phdr->left_offset); Swapw(phdr->right_offset); Swapw(phdr->thicken); Swapw(phdr->ul_size); Swapw(phdr->lighten); Swapw(phdr->skew); Swapw(phdr->flags); Swapl(phdr->h_table); Swapl(phdr->off_table); Swapl(phdr->dat_table); Swapw(phdr->form_width); Swapw(phdr->form_height); /* printf( "line %dn", (int)__LINE__); getchar(); */ FONT_FILE_NAME( gempath+pInfo->len_gem_path, gem_font_count ); fp = fopen( gempath, "wb" ); if( fp == NULL ) { err_msg = "[3][can't open gem font file|%s][OK]"; goto error2; } /* if */ /** write the font header **/ if( fwrite( phdr, sizeof( *phdr), 1, fp ) != 1 ) { goto error3; } /* if */ /** write the character offset table **/ if( fwrite( phdr+1, size_wid, 1, fp ) != 1 ) { goto error3; } /* if */ fclose( fp ); free( phdr ); gem_font_count++; } /* for */ save[dev_nr].pw->nr_gemfonts = gem_font_count - save[dev_nr].pw->first_font; (void)vst_unload_fonts( handle, 0 ); if( dev_nr>10 ) v_clswk(handle); else v_clsvwk(handle); form_dial( FMD_FINISH, x, y, w, h, xdial, ydial, wdial, hdial ); /* release its room */ return; error3: fclose(fp); err_msg = "[3][can't write to gem font file|%s][OK]"; error2: sprintf( err_string, err_msg, strerror(errno) ); free( phdr ); error1: form_dial( FMD_FINISH, x, y, w, h, xdial, ydial, wdial, hdial ); /* release its room */ error0: (void)vst_unload_fonts( handle, 0 ); if( dev_nr>10 ) v_clswk(handle); else v_clsvwk(handle); form_alert(1, err_string ); } /* dump_gem_fonts() */
void autre_type(WINDFORM_VAR wind,int pop) { int x,y,w,h; int retour,a,n; int n_case,pos=0,select=-1; int k,ys,ys1,pos1=0,yob,dummy; char s[10]; C_OBJ **liste=NULL,*sel=NULL; n_case=AUT_END-AUT_START; n=liste_type(&liste); if(n>0) { for(a=0; a<n; a++) adr_autre_type[AUT_START+a].ob_state &=~SELECTED; /* d‚selectionne tous les items */ strcpy(((TEDINFO *)((adr_autre_type[AUT_NOM]).ob_spec))->te_ptext,""); /* efface le nom de l'object selectionn‚e */ if(n<n_case) /* Remplit les lignes */ { for(a=0; a<n; a++) strcpy(((TEDINFO *)((adr_autre_type[AUT_START+a]).ob_spec))->te_ptext,(*(liste+a))->spec.type.tt_nom); adr_autre_type[AUT_SLID].ob_height=adr_autre_type[AUT_LIFT].ob_height; } else { for(a=0; a<=n_case; a++) strcpy(((TEDINFO *)((adr_autre_type[AUT_START+a]).ob_spec))->te_ptext,(*(liste+a))->spec.type.tt_nom); adr_autre_type[AUT_SLID].ob_height=(int)((long)(n_case*adr_autre_type[AUT_LIFT].ob_height)/n); } adr_autre_type[AUT_SLID].ob_y=0; form_center (adr_autre_type, &x, &y, &w, &h); form_dial (FMD_START, 0, 0, 0, 0, x, y, w, h); objc_draw (adr_autre_type, 0, MAX_DEPTH, x, y, w, h); do { retour = form_do (adr_autre_type, 0); if (retour>=AUT_START && retour<=AUT_END) /* si on a cliquer sur une ligne */ { if(retour-AUT_START<n) { strcpy(((TEDINFO *)((adr_autre_type[AUT_NOM]).ob_spec))->te_ptext, ((TEDINFO *)((adr_autre_type[retour]).ob_spec))->te_ptext); sel=(*(liste+pos+(retour-AUT_START))); /* Object selectionn‚e */ objc_draw (adr_autre_type, AUT_NOM, 1, x, y, w, h); select=pos+retour-AUT_START; } } else if(retour==AUT_DOWN) /* Fleche ver le bas */ { pos++; if(pos>=n-n_case) pos--; else autre_type_affiche(liste,n,n_case,pos,x,y,w,h,select); } else if(retour==AUT_UP) /* FlŠche vers le haut */ { pos--; if(pos<0) pos++; else autre_type_affiche(liste,n,n_case,pos,x,y,w,h,select); } else if (retour==AUT_SLID) /* Sliders */ { graf_mkstate ( &dummy, &ys1,&k,&dummy ); yob=adr_autre_type[AUT_SLID].ob_y; do { graf_mkstate ( &dummy, &ys,&k,&dummy ); /* coord de la souris */ adr_autre_type[AUT_SLID].ob_y =yob+(ys-ys1); pos=adr_autre_type[AUT_SLID].ob_y*(n-n_case)/(adr_autre_type[AUT_LIFT].ob_height-adr_autre_type[AUT_SLID].ob_height); if (pos>=n-n_case) pos=n-n_case-1; if (pos<0) pos=0; if(pos!=pos1) { autre_type_affiche(liste,n,n_case,pos,x,y,w,h,select); pos1=pos; } }while(k==1); } else if (retour==AUT_LIFT) /* Ascenseur */ { objc_offset(adr_autre_type,AUT_LIFT,&dummy,&ys); graf_mkstate ( &dummy, &ys1,&dummy,&dummy ); if (ys1-ys>adr_autre_type[AUT_SLID].ob_y) { pos+=n_case; if(pos>=n-n_case) pos=n-n_case-1; autre_type_affiche(liste,n,n_case,pos,x,y,w,h,select); } else { pos-=n_case; if(pos<0) pos=0; autre_type_affiche(liste,n,n_case,pos,x,y,w,h,select); } } else if (retour & 0x8000) { retour &= ~0x8000; if (retour>=AUT_START && retour<=AUT_END) /* si on a cliquer sur une ligne */ { if(retour-AUT_START<n) { strcpy(((TEDINFO *)((adr_autre_type[AUT_NOM]).ob_spec))->te_ptext, ((TEDINFO *)((adr_autre_type[retour]).ob_spec))->te_ptext); sel=(*(liste+pos+(retour-AUT_START))); /* Object selectionn‚e */ objc_draw (adr_autre_type, AUT_NOM, 1, x, y, w, h); retour=-1; } } } }while (retour!=AUT_CON && retour!=-1); form_dial (FMD_FINISH, 0, 0, 0, 0, x, y, w, h); objc_change (adr_autre_type, retour, 0, x, y, w, h, 0, 0); FREE(liste); } strcpy(s," "); strncat(s,((TEDINFO *)((adr_autre_type[AUT_NOM]).ob_spec))->te_ptext,6); strcpy(((TEDINFO *)((wind.adr_form[pop]).ob_spec))->te_ptext ,s); ((TEDINFO *)((wind.adr_form[pop]).ob_spec))->te_ptmplt=sel; /* Sauve l'objet s‚lectionne directement dans la ressource ==> laisser au moins 4 caractŠres dans le masque du pop up */ /* printf(">>%s\n",((C_OBJ*)(((TEDINFO *)((wind.adr_form[pop]).ob_spec))->te_ptmplt))->spec.type.tt_nom );*/ }
/* 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(); }