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 }
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); }
void select_progeny( short prog_num, GRECT box ) { int prog ; /* progeny reference */ char names[IDX_NAM_MAX*2 + DATE_LENGTH + 2] ; char alert_str[200], *alert_ptr ; prog = -1 ; if( prog_array[prog_num + prog_oset] ) /* If child there already, */ /* does it want deleting. */ { rsrc_gaddr( R_STRING, PROG_DEL, &alert_ptr ) ; names_only( prog_array[prog_num + prog_oset] , names, 30, FALSE ) ; sprintf( alert_str, alert_ptr, names ) ; if( form_alert( 1, alert_str ) == 2 ) prog = 0 ; } else prog = get_person_reference( people[male].family_name, FALSE ) ; if( prog != -1 ) { prog_array[prog_num + prog_oset] = prog ; names_date( prog, names, 40, FALSE ) ; strcpy( c_form_addrs.child[prog_num], names ) ; objc_draw( coup_form.fm_ptr, PROGENY, MAX_DEPTH, (int) box.g_x,(int) box.g_y, (int) box.g_w, (int) box.g_h ) ; } }
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); } }
draw_dial(int bnr, int ret, int st) { char bbb[5]; switch(st) { case ACK: strcpy((char *)transfer[STATUS].ob_spec,"ACK"); break; case NAK: strcpy((char *)transfer[STATUS].ob_spec,"NAK"); break; case CHK: strcpy((char *)transfer[STATUS].ob_spec,"CHK"); break; case -1: strcpy((char *)transfer[STATUS].ob_spec,"TIMOUT"); break; default: strcpy((char *)transfer[STATUS].ob_spec,"???"); } if ((!_AccFlag) || (para.multi==MULTINE)) { strcpy((char *)transfer[BLOCKNUM].ob_spec,itoas(bnr,4,bbb,0)); strcpy((char *)transfer[RETRIES].ob_spec,itoas(ret,4,bbb,0)); objc_draw(transfer,REDRAWTF,2,x,y,w,h); } else { itoas(bnr,4,msg,1); itoas(ret,2,&msg[5],1); strcpy(&msg[8],(char *)transfer[STATUS].ob_spec); msg[12]=0; v_gtext(handle,640-12*8,13,msg); } }
/* ** 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() */
static void autre_type_affiche(C_OBJ **liste,int n,int n_case,int pos, int x,int y,int w,int h,int select) { int a; adr_autre_type[AUT_SLID].ob_y=pos*(adr_autre_type[AUT_LIFT].ob_height-adr_autre_type[AUT_SLID].ob_height)/(n-n_case); objc_draw (adr_autre_type, AUT_LIFT, 2, x, y, w, h); for(a=n_case; a>=0; a--) { if(select==pos+a) /* si l'object selectionne */ adr_autre_type[AUT_START+a].ob_state |=SELECTED; /* d‚place le l'item SELECTED */ else adr_autre_type[AUT_START+a].ob_state &=~SELECTED; strcpy(((TEDINFO *)((adr_autre_type[AUT_START+a]).ob_spec))->te_ptext,(*(liste+a+pos))->spec.type.tt_nom); objc_draw (adr_autre_type, AUT_START+a, 1, x, y, w, h); } }
/* --------------------------- */ void redraw_w0(int ind) { int w0x, w0y, w0w, w0h; wind_get(0, WF_FIRSTXYWH, &w0x, &w0y, &w0w, &w0h); while (w0w > 0 && w0h > 0) { objc_draw(back, ind, 1, w0x, w0y, w0w, w0h); wind_get(0, WF_NEXTXYWH, &w0x, &w0y, &w0w, &w0h); } }
void redraw( GRECT *clip, WORD obj, WORD depth ) { GRECT *win; wind_update(BEG_UPDATE); win = cpxGetFirstRect(xcpb,clip); while (win) { objc_draw(dog,obj,depth,win->g_x,win->g_y,win->g_w,win->g_h); win = cpxGetNextRect(xcpb); } wind_update(END_UPDATE); }
/* Display the font names in the dialog box */ static void show_names( int top ) { int i, j; graf_mouse(M_OFF, 0); for(i=NAME1, j=top; i<=NAME8; i++, j++ ) { ((TEDINFO *)chooser[i].ob_spec)->te_ptext = name_table[j].name; ((TEDINFO *)chooser[i].ob_spec)->te_txtlen = strlen( name_table[j].name ); if( j == iSelected ) chooser[i].ob_state |= SELECTED; /* highlight if selected */ else chooser[i].ob_state &= ~SELECTED; } objc_draw(chooser, NAMEBOX, MAX_DEPTH, chooser[ROOT].ob_x, chooser[ROOT].ob_y, chooser[ROOT].ob_width, chooser[ROOT].ob_height ); graf_mouse(M_ON, 0); } /* show_names() */
void set_footers( void ) { BOOLEAN done = FALSE ; short button ; short old_footer_lines = footer_lines() ; copy_footers_to_form() ; app_modal_init( footers_ptr, footer_help, TITLED ) ; while( !done ) { button = app_modal_do() ; button &= ~DOUBLE_CLICK ; if( button && button != APP_MODAL_TERM ) { footers_ptr[button].ob_state &= ~SELECTED ; objc_draw( footers_ptr, button, 0, PTRS( app_modal_box() ) ) ; } switch( button ) { case FOOTER_OK : copy_form_to_footers() ; done = TRUE ; break ; case FOOTER_CANCEL : case APP_MODAL_TERM : done = TRUE ; break ; case FOOTER_SAVE : copy_form_to_footers() ; saved_footers = footers ; save_defaults() ; done = TRUE ; break ; case FOOTER_HELP : help( footer_help ) ; break ; default : break ; } } if( footer_lines() != old_footer_lines ) gdos_params_valid = FALSE ; /* This will force draw_custom_pages */ /* to get a correct value */ app_modal_end() ; }
static void xw_redraw_menu(WINDOW *w, int object, RECT *r) { RECT r1, r2, in; OBJECT *menu = w->xw_menu; int pxy[4]; if (menu != NULL) { /* xw_bar_rect(w,&r1);*/ xd_objrect(w->xw_menu, object, &r1); if (object == w->xw_bar) r1.h += 1; /* Begin en eind coordinaten van lijn onder de menubalk. */ pxy[0] = w->xw_work.x; pxy[1] = pxy[3] = w->xw_work.y + r1.h - 1; pxy[2] = w->xw_work.x + w->xw_work.w - 1; if (xd_rcintersect(r, &r1, &r1) == TRUE) { xd_wdupdate(BEG_UPDATE); xd_mouse_off(); vswr_mode(xd_vhandle, MD_REPLACE); vsl_color(xd_vhandle, 1); vsl_ends(xd_vhandle, 0, 0); vsl_type(xd_vhandle, 1); vsl_width(xd_vhandle, 1); xw_get(w, WF_FIRSTXYWH, &r2); while ((r2.w != 0) && (r2.h != 0)) { if (xd_rcintersect(&r1, &r2, &in) == TRUE) { objc_draw(menu, w->xw_bar, MAX_DEPTH, in.x, in.y, in.w, in.h); xd_clip_on(&in); v_pline(xd_vhandle, 2, pxy); xd_clip_off(); } xw_get(w, WF_NEXTXYWH, &r2); } xd_mouse_on(); xd_wdupdate(END_UPDATE); } } }
/* ------------------------------------------------------------------ */ 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 progress_display_object( int obj ) { int x, y; objc_offset( progress_tree, obj, &x, &y ); if( preferences.pref_flags.multitask ) { ApplWrite( app.id, WM_REDRAW, progress_win->handle, x, y, progress_tree[obj].ob_width, progress_tree[obj].ob_height ); /* yield(); */ } else objc_draw( progress_tree, 0, MAX_DEPTH, x, y, progress_tree[obj].ob_width, progress_tree[obj].ob_height ); }
/* ***Dialog neu zeichnen, Rechteckliste beachten*** */ void wdial_redraw(int dwhndl, OBJECT *tree, GRECT *redrwrect) { GRECT clip; /* F�r Rechtecksliste */ wind_update(BEG_UPDATE); graf_mouse(M_OFF, 0L); wind_get(dwhndl, WF_FIRSTXYWH, &clip.g_x, &clip.g_y, &clip.g_w, &clip.g_h); while(clip.g_w!=0 && clip.g_h!=0) { if( rc_intersect(redrwrect, &clip) ) objc_draw(tree, ROOT, MAX_DEPTH, clip.g_x, clip.g_y, clip.g_w, clip.g_h); wind_get(dwhndl, WF_NEXTXYWH, &clip.g_x, &clip.g_y, &clip.g_w, &clip.g_h); } graf_mouse(M_ON, 0L); wind_update(END_UPDATE); }
static void redraw(int start, int depth, int x, int y, int w, int h) { GRECT r, r1; r.g_x = x; r.g_y = y; r.g_w = w; r.g_h = h; wind_update(BEG_UPDATE); hide_mouse_if_needed(&r); wind_get_grect(akt_handle, WF_FIRSTXYWH, &r1); while (r1.g_w != 0 && r1.g_h != 0) { if (rc_intersect(&r, &r1)) objc_draw(aktion, start, depth, r1.g_x, r1.g_y, r1.g_w, r1.g_h); wind_get_grect(akt_handle, WF_NEXTXYWH, &r1); } show_mouse(); wind_update(END_UPDATE); }
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 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 ; }
void progress_display( void ) { int x, y, w; int anc_width; if( progress_info ) { progress_prct = progress_calc_prct(); anc_width = progress_tree[PB_PROGBAR].ob_width; w = (int)((long)progress_tree[PB_PROGBACK].ob_width * progress_prct / 100); progress_tree[PB_PROGBAR].ob_width = w; objc_offset( progress_tree, PB_PROGBACK, &x, &y ); x += anc_width; w -= anc_width; if( preferences.pref_flags.multitask ) ObjcWindDraw( progress_win, progress_tree, PB_PROGBACK, MAX_DEPTH, x, y-3, w+3, progress_tree[PB_PROGBACK].ob_height+6 ); else objc_draw( progress_tree, PB_PROGBACK, MAX_DEPTH, x, y-3, w+3, progress_tree[PB_PROGBACK].ob_height+6 ); } }
void update_objects(WINDFORM *wind,int obj_id,int depth, int pipe[8]) { CORDS2 r,u,o; CORDS t; if(pipe) { o.x1=pipe[4]; o.y1=pipe[5]; o.x2=pipe[4]+pipe[6]-1; o.y2=pipe[5]+pipe[7]-1; } graf_mouse(M_OFF,0); wind_update(BEG_UPDATE); wind_get(wind->whandle,WF_FIRSTXYWH,&t.x,&t.y,&t.w,&t.h); while(t.w || t.h) { if(pipe) { r.x1=t.x; r.y1=t.y; r.x2=t.x+t.w-1; r.y2=t.y+t.h-1; u.x1=max(r.x1,o.x1); u.y1=max(r.y1,o.y1); u.x2=min(r.x2,o.x2); u.y2=min(r.y2,o.y2); } else { u.x1=t.x; u.y1=t.y; u.x2=t.x+t.w-1; u.y2=t.y+t.h-1; } if((u.x2>=u.x1) && (u.y2>=u.y1)) objc_draw(wind->formtree,obj_id,depth, u.x1, u.y1, u.x2-u.x1+1, u.y2-u.y1+1); wind_get(wind->whandle,WF_NEXTXYWH,&t.x,&t.y,&t.w,&t.h); } wind_update(END_UPDATE); graf_mouse(M_ON,0); }
int *ezpstart() { register int i, *adr; int *save_globl(); setup_page(); setup_strings(); liney = (SYSDOM*)scrsave; staffy = (int*)&liney[MAXLIN]; measnum = &staffy[MAXSYS]; systems = (SYSDOM*)&measnum[MAXSYS]; brackets = (LBRACK*)&systems[MAXSYS]; braces = (LBRACE*)&brackets[MAXCON]; for (i = 0; i < MAXCON; i++) { braces[i].top = 0; braces[i].psym = (PSYM*)0L; braces[i].size = 0; brackets[i].top = 0; brackets[i].size = 0; } abortp = voff = FALSE; init_symb_structs(); adr = (int*)&braces[MAXCON]; s_image = (short*)save_globl( adr ); calc_bufsize(); graf_mouse( ARROW ); wind_get( DESKTOP, WF_WORKXYWH, &desk.g_x, &desk.g_y, &desk.g_w, &desk.g_h ); prinaddr->ob_x = (desk.g_x + desk.g_w - prinaddr->ob_width) >> 1; prinaddr->ob_y = (desk.g_y + desk.g_h - prinaddr->ob_height) >> 1; ((TEDINFO*)(prinaddr[PRNTYPE].ob_spec))->te_ptext = prname; objc_draw( prinaddr, ROOT, MAX_DEPTH, prinaddr->ob_x - 3, prinaddr->ob_y - 3, prinaddr->ob_width + 6, prinaddr->ob_height + 6 ); objc_offset( prinaddr, ABORT, &abort.g_x, &abort.g_y ); abort.g_w = prinaddr[ABORT].ob_width; abort.g_h = prinaddr[ABORT].ob_height; set_interrupt(); return adr; }
/* ***PopUp-Knopf behandeln*** */ int wdial_popupbutn(OBJECT *buttree, int butnr, OBJECT *ptree, int *pitem) { int oldchoice=*pitem; int butnx, butny; int mpopret; objc_offset(buttree, butnr, &butnx, &butny); mpopret=wdial_popup(ptree, pitem, butnx, butny, NULL, 0, NULL); if(mpopret) { ptree[oldchoice].ob_state=NORMAL; ptree[*pitem].ob_state=CHECKED; strcpy(buttree[butnr].ob_spec.tedinfo->te_ptext, ptree[*pitem].ob_spec.free_string+2); } buttree[butnr].ob_state&=~SELECTED; objc_draw(buttree, butnr, 1, butnx-2, butny-2, buttree[butnr].ob_width+4, buttree[butnr].ob_height+4); return(mpopret); }
/* ------------------------- | 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; }
/*---------------------------------------------------*/ void redraw(int obn) { int x[4],xs[4], /* xw[4], xy[4],*/ xc[4]; (void)wind_get(wid,WF_WORKXYWH,&xs[0],&xs[1],&xs[2],&xs[3]); (void)wind_get(wid,WF_FIRSTXYWH,&x[0],&x[1],&x[2],&x[3]); (void)wind_get(wid,WF_CURRXYWH,&xc[0],&xc[1],&xc[2],&xc[3]); rs_object[TREE1].ob_x=xs[0]; rs_object[TREE1].ob_y=xs[1]; /* objc_offset(rs_object,obn,&xw[0],&xw[1]); xw[2]=rs_object[obn].ob_width; xw[3]=rs_object[obn].ob_height; */ /* Warum???????????? Funktioniert nicht mit 3D-Objs (da wird zu wenig neu gezeichnet, weil die Objekte gr”žer sind, als ob_width und ob_height angeben...! In Wirklichkeit muž man mit dem Redraw-Rechteck clippen, welches man mit der Redraw-Message bekommt! Bei der komischen (aber effizienten!) Methode, die Du verwendest (nicht Koordinaten, sonder Objekte werden neu gezeichnet, sehr interessant!) lass ich am besten das intersect-ionieren weg. objc_draw selber weiž schliesslich am besten, wie grož seine Objekte sind, oder?!? */ wind_update(BEG_UPDATE); while((x[2]!=0)||(x[3]!=0)) { /* if ((intersect(xw,x,xs))) */ objc_draw(rs_object,obn,42,x[0],x[1],x[2],x[3]); (void)wind_get(wid,WF_NEXTXYWH,&x[0],&x[1],&x[2],&x[3]); } wind_update(END_UPDATE); }
void update(int how) { calc_paras(ww,hh,xres,yres); change_rsc(); set_vcdata(pl_idx,1); if (how) { schreib_regs(vcreg,ccreg,xcreg,mcreg); #if VERSION==PLL_VERSION if (tree1[MONM2].ob_state&SELECTED) {old_ww=ww;old_hh=hh; c_frequ=pll_calc(clock_Mhz,old_ww,old_hh); } #endif } if (how<2){ /*R objc_draw(tree1,ROOTSCR,10,cx,cy,cw,ch);*/ objc_draw(tree1,HFREQU,10,cx,cy,cw,ch); objc_draw(tree1,VFREQU,10,cx,cy,cw,ch); objc_draw(tree1,FESLIDER,10,cx,cy,cw,ch); objc_draw(tree1,LESLIDER,10,cx,cy,cw,ch); objc_draw(tree1,WIDTH,10,cx,cy,cw,ch); objc_draw(tree1,HEIGHT,10,cx,cy,cw,ch); } }
/******************************************************* * 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() */
/*----------------------------------------------------------------------------------------*/ int16 objc_scroll( OBJECT *tree, int16 vdihandle, int16 obj, int16 whdl, int32 yscroll, int16 xscroll, int16 ydraw ) { MFDB s, d; GRECT r, w, obr; int16 xy[8]; int16 ca[8]; int16 dy; boolean draw; draw = FALSE; wind_get_grect( whdl, WF_FIRSTXYWH, &r ); wind_get_grect( whdl, WF_WORKXYWH, &w ); objc_rect( tree, obj, &obr ); if( !rc_intersect( &obr, &r ) || !rc_intersect( &gl_desk, &r ) ) return 0; if( r.g_w != obr.g_w || r.g_h != obr.g_h ) draw = TRUE; if( labs(yscroll) >= (int32)obr.g_h || abs(xscroll) >= obr.g_w ) draw = TRUE; if( !draw ) { grect_to_array( &r, xy ); /* Quelle f�r vro_cpyfm */ grect_to_array( &w, ca ); /* Array f�r clipping */ xy[4] = xy[0]; /* Ziel f�r vro_cpyfm */ xy[5] = xy[1]; xy[6] = xy[2]; xy[7] = xy[3]; if( xscroll ) /* Horizontales Scrolling */ { if( xscroll > 0 ) /* Links Scrolling */ { xy[0] += (int16) xscroll; xy[6] -= (int16) xscroll; r.g_x += r.g_w - (int16)xscroll; /* Rechter Bereich nicht gescrollt, */ r.g_w = (int16)xscroll; /* mu� neu gezeichnet werden */ } else /* Rechts Scrolling */ { xy[2] += (int16)xscroll; xy[4] -= (int16)xscroll; r.g_w = (int16)(-xscroll); /* Linken Bereich noch neu zeichnen */ } } dy = (int16)yscroll; dy = -dy; if( dy ) /* Vertikales Scrolling */ { if( dy > 0 ) /* Aufw�rts Scrolling */ { xy[1] += (int16)dy; /* Werte f�r vro_cpyfm */ xy[7] -= (int16)dy; r.g_y += r.g_h - (int16)dy - ydraw; /* Unterer Bereich nicht gescrollt, */ r.g_h = (int16)dy + ydraw; /* mu� neu gezeichnet werden */ } else /* Abw�rts Scrolling */ { xy[3] += (int16)dy; /* Werte f�r vro_cpyfm */ xy[5] -= (int16)dy; r.g_h = (int)(-dy) + ydraw; /* Oberen Bereich noch neu zeichnen */ } } s.fd_addr = d.fd_addr = NULL; /* Erzwinge Bildschirmadresse */ vs_clip( vdihandle, 1, ca ); hide_mouse(); vro_cpyfm(vdihandle, S_ONLY, xy, &s, &d); show_mouse(); objc_draw( tree, 0, MAX_DEPTH, &r ); } return !draw; }
WORD col_pa_pref( ) { REG OBJECT *obj; REG WORD ret; REG WINDOW *win; LONG newwin; LONG newdesk; LONG *outpat; WORD last,i,j; obj = get_tree( SSCREEN ); newdesk = background[0].ob_spec; newwin = (UWORD)windspec; /* set the background pattern */ last = ret = obj[DESKPREF].ob_state & SELECTED ? DESKPREF : WINPREF; for ( j = COLOR0,i = d_maxcolor; i < 16; i++ ) obj[j+i].ob_flags |= HIDETREE; fm_draw( SSCREEN ); goto c_1; while( TRUE ) { ret = xform_do( obj, 0 ); c_1: if ( ret == SOK ) break; if ( ret == SCANCEL ) { do_finish( SSCREEN ); return; } if ( ret == DESKPREF ) { outpat = &newdesk; obj[DESKPREF].ob_state = SELECTED; obj[WINPREF].ob_state = NORMAL; goto c_2; } if ( ret == WINPREF ) { outpat = &newwin; obj[WINPREF].ob_state = SELECTED; obj[DESKPREF].ob_state = NORMAL; c_2: draw_fld( obj, DESKPREF ); draw_fld( obj, WINPREF ); obj[PATTERN].ob_spec = *outpat; } if ( ( ret >= PAT0 ) && ( ret <= PAT7 ) ) { obj[PATTERN].ob_spec &= 0xFFFFFF0FL; obj[PATTERN].ob_spec |= obj[ret].ob_spec & 0x000000F0L; } else /* color changed */ if ( ( ret >= COLOR0 ) && ( ret <= COLOR15 ) ) { obj[PATTERN].ob_spec &= 0xFFFFFFF0L; obj[PATTERN].ob_spec |= obj[ret].ob_spec & 0x0000000FL; } objc_draw( obj, OUTBOX, 2, 0, 0, full.w, full.h ); *outpat = obj[PATTERN].ob_spec; }/* while */ do_finish( SSCREEN ); if ( background[0].ob_spec != newdesk ) { background[0].ob_spec = newdesk; do_redraw( 0, &full, 0 ); } win = winhead; if ( windspec != (UWORD)newwin ) { windspec = (UWORD)newwin; while( win ) { if ( win->w_obj ) /* fixed 7/7/92 */ win->w_obj[0].ob_spec = windspec; win = win->w_next; } win = w_gfirst(); while( win ) { do_redraw( win->w_id, &full, 0 ); win = w_gnext(); } } }