/* ** 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; }
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 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 ; }
static WORD do_deskmenu(WORD item) { WORD done, touchob; OBJECT *tree, *obj; done = FALSE; switch(item) { case ABOUITEM: display_free_stack(); tree = G.a_trees[ADDINFO]; /* draw the form */ show_hide(FMD_START, tree); while(!done) { touchob = form_do(tree, 0); touchob &= 0x7fff; if (touchob == DEICON) { #if CONF_WITH_EASTER_EGG int i; for (i = 0; i < 23; i++) { sound(TRUE, freq[i], dura[i]); evnt_timer(dura[i]*64, 0); } #endif } else done = TRUE; } obj = tree + DEOK; obj->ob_state = NORMAL; show_hide(FMD_FINISH, tree); done = FALSE; break; } return done; }
/* * Double clicked on an RGB slider */ void do_rgb( int slider, int base, int index ) { int CurValue; GRECT orect; MRETS mk; ActiveTree( ad_tree ); orect = ObRect( slider ); objc_offset( ad_tree, slider, &orect.g_x, &orect.g_y ); ActiveTree( ad_slide2 ); ObX( CSLIDERS ) = ObX( EXIT2 ) = orect.g_x -= 2; ObY( CSLIDERS ) = ObY( EXIT2 ) = orect.g_y -= 2; ObW( CSLIDERS ) = orect.g_w += 3; ObH( CSLIDERS ) = orect.g_h += 4; myitoa( curscrn[ index ], &PenNum[0] ); TedText( CSLIDERS ) = PenNum; ObjcDraw( ad_slide2, CSLIDERS, 0, NULL ); form_do( ad_slide2, CSLIDERS ); if( strlen( TedText( CSLIDERS ) ) ) { CurValue = atoi( TedText( CSLIDERS ) ); CurValue = min( CurValue, 1000 ); CurValue = max( CurValue, 0 ); curscrn[ index ] = CurValue; } Deselect( CSLIDERS ); Deselect( EXIT2 ); ActiveTree( ad_tree ); adjcol(); update_slid( base, slider, curscrn[index], 0, 1000, 1 ); EvntButton( 1, 1, 0, &mk ); }
WORD insa_dial(LONG tree, WORD nicon, WORD numics) { WORD firstslot, nstate, ystate, i; WORD touchob, oicon, value; WORD mx, my, kret, bret, cont; BYTE *pstr, doctype[4]; GRECT pt; /* draw the form */ show_hide(FMD_START, tree); /* init for while loop by forcing initial fs_newdir call */ cont = TRUE; while ( cont ) { firstslot = 6; for (i = 0; i < firstslot; i++) { pstr = &doctype[0]; inf_sget(tree, APDFTYPE+i, pstr); if (*pstr == '\0') firstslot = i; } touchob = form_do((OBJECT FAR *)tree, APDFTYPE+firstslot); graf_mkstate(&mx, &my, &kret, &bret); value = nstate = ystate = 0; touchob &= 0x7fff; switch ( touchob ) { case APINST: case APREMV: case APCNCL: cont = FALSE; break; case APFUPARO: value = -1; break; case APFDNARO: value = 1; break; case APGEM: nstate = SELECTED; ystate = DISABLED; break; case APDOS: case APPARMS: nstate = LWGET(OB_STATE(APNMEM)); ystate = LWGET(OB_STATE(APYMEM)); if ( ystate == DISABLED ) { nstate = SELECTED; ystate = NORMAL; } break; case APFSVSLI: ob_actxywh(tree, APFSVELE, &pt); pt.g_x -= 3; pt.g_w += 6; if ( rc_inside(&pt, mx, my) ) goto dofelev; value = (my <= pt.g_y) ? -1 : 1; break; case APFSVELE: dofelev: wind_update(3); ob_relxywh(tree, APFSVSLI, &pt); pt.g_x += 3; pt.g_w -= 6; LWSET(OB_X(APFSVSLI), pt.g_x); LWSET(OB_WIDTH(APFSVSLI), pt.g_w); value = graf_slidebox((OBJECT FAR *)tree, APFSVSLI, APFSVELE, TRUE); pt.g_x -= 3; pt.g_w += 6; LWSET(OB_X(APFSVSLI), pt.g_x); LWSET(OB_WIDTH(APFSVSLI), pt.g_w); wind_update(2); #if M68000 value = (WORD)((LONG)value * (LONG)(numics-1) / 1000) - nicon; #else value = mul_div(value, numics-1, 1000) - nicon; #endif break; } if (nstate != ystate) { LWSET(OB_STATE(APNMEM), nstate); LWSET(OB_STATE(APYMEM), ystate); draw_fld(tree, APMEMBOX); } if (value) { oicon = nicon; nicon += value; if (nicon < 0) nicon = 0; if (nicon >= numics) nicon = numics - 1; if (oicon != nicon) { insa_elev(tree, nicon, numics); draw_fld(tree, APFTITLE); draw_fld(tree, APFSVSLI); draw_fld(tree, APFILEBO); } } } /* undraw the form */ show_hide(FMD_FINISH, tree); return(nicon); }
/* cpx_call() * ====================================================================== * Called ONLY when the CPX is being executed. Note that it is CPX_INIT() * that returned the ptr to cpx_call(). * CPX_CALL() is the entry point to displaying and manipulating the * dialog box. * * IN: GRECT *rect: Ptr to a GRECT that describes the current work * area of the XControl window. * * OUT: * FALSE: The CPX has exited and no more messages are * needed. XControl will either return to its * main menu or close its windows. * This is used by XForm_do() type CPXs. * * TRUE: The CPX requests that XCONTROL continue to * send AES messages. This is used by Call-type CPXs. */ BOOLEAN cpx_call( GRECT *rect ) { int button; int quit = 0; WORD msg[8], clip[4]; MRETS mk; int ox, oy; BOOLEAN dclick; int CurPen; GRECT orect; ActiveTree( ad_tree ); WindGet(0, WF_WORKXYWH, &desk ); /* set clipping to */ rc_2xy( &desk, clip ); /* Desktop space */ open_vwork(); vs_clip( vhandle, 1, ( int *)clip ); ObX( ROOT ) = rect->g_x; ObY( ROOT ) = rect->g_y; ObjcDraw( tree, ROOT, MAX_DEPTH, NULL ); draw_boxes(); /* draw the color boxes */ outline( curbox, HILITE ); /* show selected box */ close_vwork(); do { dclick = FALSE; button = (*xcpb->Xform_do)( tree, 0, msg ); if(( button != -1 ) && ( button & 0x8000 ) ) { dclick = TRUE; button &= 0x7fff; } switch( button ) { case CCANCEL: cnclchgs(); /* cancel all changes made */ case C*K: quit = TRUE; Deselect( button ); break; case CRELOAD: /* reload saved user-preference */ if( saved ) init(&usr_vals); else init(&def_vals); update_rgb(1); /* update RGB on screen */ /* Redraw the boxes deliberately */ open_vwork(); rc_2xy( &desk, clip ); /* Desktop space */ vs_clip( vhandle, 1, ( int *)clip ); draw_boxes(); /* draw the color boxes */ close_vwork(); XDeselect( tree, button ); break; case CSAVE: /* save current values */ if ((*xcpb->XGen_Alert)(SAVE_DEFAULTS) == TRUE) { (*xcpb->MFsave)(MFSAVE, &orig_mf); if( AES_Version >= 0x0320 ) graf_mouse( BUSYBEE, 0L ); savergb(); /* save color info */ /* update RGBs */ cpyrgb((RGB *)&oldrgb, (RGB *)&newrgb, numcol ); /* save current data to file */ saved = 1; (*xcpb->CPX_Save)((void *)&saved, sizeof(DEFAULTS)+2); (*xcpb->MFsave)(MFRESTORE, &orig_mf); } XDeselect( tree, button ); break; case CUP: (*xcpb->Sl_arrow)(tree, CBASE, CSLIDE, CUP, -1, col_max, col_min, &curcol, VERTICAL, nxtrow); break; case CDOWN: (*xcpb->Sl_arrow)(tree, CBASE, CSLIDE, CDOWN, 1, col_max, col_min, &curcol, VERTICAL, nxtrow); break; case CSLIDE: if( dclick ) /* if double-click */ { ActiveTree( ad_tree ); orect = ObRect( CSLIDE ); objc_offset( ad_tree, CSLIDE, &orect.g_x, &orect.g_y ); ActiveTree( ad_slide1 ); ObX( CTSLIDE ) = ObX( EXIT1 ) = ( orect.g_x - 2 ); ObY( CTSLIDE ) = ObY( EXIT1 ) = ( orect.g_y - 2 ); ObW( CTSLIDE ) = ( orect.g_w + 3 ); ObH( CTSLIDE ) = ( orect.g_h + 4 ); myitoa( curcol, &PenNum[0] ); TedText( CTSLIDE ) = PenNum; ObjcDraw( ad_slide1, CTSLIDE, 0, NULL ); form_do( ad_slide1, CTSLIDE ); if( strlen( TedText( CTSLIDE ) ) ) { CurPen = atoi( TedText( CTSLIDE ) ); CurPen = min( CurPen, col_max ); CurPen = max( CurPen, col_min ); curcol = CurPen; Deselect( CTSLIDE ); Deselect( EXIT1 ); ActiveTree( ad_tree ); ObjcDraw( ad_tree, CSLIDE, MAX_DEPTH, NULL ); headcol = ( curcol / COL_PER_BNK )* COL_PER_BNK; open_vwork(); rc_2xy( &desk, clip ); vs_clip( vhandle, 1, ( int *)clip ); draw_boxes(); close_vwork(); nxtgrp(); update_slid( CBASE, CSLIDE, curcol, col_max, col_min, 1 ); } else { Deselect( CTSLIDE ); Deselect( EXIT1 ); ActiveTree( ad_tree ); ObjcDraw( ad_tree, CSLIDE, MAX_DEPTH, NULL ); } EvntButton( 1, 1, 0, &mk ); } else { (*xcpb->MFsave)(MFSAVE, &orig_mf); if( AES_Version >= 0x0320 ) graf_mouse( FLAT_HAND, 0L ); if(( AES_Version >= 0x0330 ) && ( numcol > LWHITE ) ) XSelect( tree, CSLIDE ); (*xcpb->Sl_dragy)(tree, CBASE, CSLIDE, col_max, col_min, &curcol, nxtgrp); if(( AES_Version >= 0x0330 ) && ( numcol > LWHITE ) ) XDeselect( tree, CSLIDE ); (*xcpb->MFsave)(MFRESTORE, &orig_mf); } break; case CBASE: Graf_mkstate(&mk); objc_offset(tree, CSLIDE, &ox, &oy); if(mk.y < oy) oy = -col_page; else oy = col_page; curslid = CSLIDE; (*xcpb->Sl_arrow)(tree, CBASE, CSLIDE, -1, oy, col_max, col_min, &curcol, VERTICAL, nxtpage); break; case RUP: Do_Up( RBASE, RSLIDE, RUP, R ); break; case RDOWN: Do_Down( RBASE, RSLIDE, RDOWN, R ); break; case RSLIDE: Do_Slider( RBASE, RSLIDE, R, dclick ); break; case RBASE: Do_Base( RBASE, RSLIDE, R ); break; case GUP: Do_Up( GBASE, GSLIDE, GUP, G ); break; case GDOWN: Do_Down( GBASE, GSLIDE, GDOWN, G ); break; case GSLIDE: Do_Slider( GBASE, GSLIDE, G, dclick ); break; case GBASE: Do_Base( GBASE, GSLIDE, G ); break; case BUP: Do_Up( BBASE, BSLIDE, BUP, B ); break; case BDOWN: Do_Down( BBASE, BSLIDE, BDOWN, B ); break; case BSLIDE: Do_Slider( BBASE, BSLIDE, B, dclick ); break; case BBASE: Do_Base( BBASE, BSLIDE, B ); break; case TWO01: /* for ST High rez */ case TWO02: case FOUR01: /* for ST Medium rez */ case FOUR02: case FOUR03: case FOUR04: case BOX0: /* for all other rez */ case BOX1: case BOX2: case BOX3: case BOX4: case BOX5: case BOX6: case BOX7: case BOX8: case BOX9: case BOX10: case BOX11: case BOX12: case BOX13: case BOX14: case BOX15: if( button != curbox) /* select requested color */ { curcol = button - headbox + headcol; nxt_to_show(0); update_slid( CBASE, CSLIDE, curcol, col_max, col_min, 1 ); } break; default: if( button == -1 ) { switch( msg[0] ) { case WM_REDRAW: /* redraw the cpx */ do_redraw((GRECT *)&msg[4], (int *)clip); break; case AC_CLOSE: /* treated like a cancel */ cnclchgs(); /* cancel changes made */ case WM_CLOSED: quit = TRUE; /* treated like an OK */ break; case CT_KEY: switch( msg[3] ) /* check which key is returned */ { case UNDO: /* if Undo key */ cnclbnk(); /* cancel color changes */ update_rgb(1); /* update RGB on screen */ /* Redraw the boxes deliberately */ open_vwork(); rc_2xy( &desk, clip ); /* Desktop space */ vs_clip( vhandle, 1, ( int *)clip ); draw_boxes(); /* draw the color boxes */ close_vwork(); break; case HOME: /* if Clr Home key */ init(&def_vals); /* init to system defs */ update_rgb(1); /* update RGB on screen */ setup_bnk = CLEAN;/*cjg*/ visit_bnk(); /*cjg*/ /* Redraw the boxes deliberately */ open_vwork(); rc_2xy( &desk, clip ); /* Desktop space */ vs_clip( vhandle, 1, ( int *)clip ); draw_boxes(); /* draw the color boxes */ close_vwork(); break; } break; default: break; } } break; } }while( !quit); return( FALSE ); }
/* 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 set_font(void) { register int eo, i, font_nr, font_height; int tst_x, tst_y, xy[4], dummy; int minADE, maxADE, distance[5], effects[3], maxw; char font_names[4][34]; set_eline(); font_nr = akt_font; font_height = akt_fheight; rsrc_gaddr(ROOT, SET_FONT, &form_adr); for (i = 0; i < 4; i++) form_adr[FONT_1B + i].ob_spec.tedinfo->te_ptext = font_names[i]; form_adr[FONT_S].ob_state &= ~SELECTED; for (i = 0; i < 4; i++) { form_adr[FONT_1B + i].ob_state &= ~SELECTED; if (tfont_names[akt_id][i][0]) { strcpy(font_names[i], tfont_names[akt_id][i]); form_adr[FONT_1B + i].ob_state &= ~DISABLED; } else { strcpy(font_names[i], "-- Unbelegt --"); form_adr[FONT_1B + i].ob_state |= DISABLED; } } form_adr[FONT_S + font_nr - 1].ob_state |= SELECTED; form_draw(); objc_offset(form_adr, TST_FLD, &tst_x, &tst_y); xy[0] = tst_x; xy[1] = tst_y; xy[2] = xy[0] + form_adr[TST_FLD].ob_width - 2; xy[3] = xy[1] + form_adr[TST_FLD].ob_height - 2; vs_clip(vdi_handle, TRUE, xy); vswr_mode(vdi_handle, 1); vst_effects(vdi_handle, NORMAL); vst_alignment(vdi_handle, 0, 5, &dummy, &dummy); do { show_testtext(tst_x, tst_y, font_nr, font_height); vqt_fontinfo(vdi_handle, &minADE, &maxADE, distance, &maxw, effects); if (distance[4] < font_height) font_height = distance[4]; eo = form_do(form_adr, 0); switch(eo & 0x7FFF) { case FONT_S: case FONT_1B: case FONT_2B: case FONT_3B: case FONT_4B: if ((form_adr[eo & 0x7FFF].ob_state & DISABLED) || ((eo & 0x8000) && (eo & 0x7FFF) != FONT_S)) { eo &= 0x7FFF; if (load_font(eo - FONT_S + 1)) { font_nr = eo - FONT_S + 1; vqt_name(vdi_handle, 2, tfont_names[akt_id][eo - FONT_1B]); strcpy(font_names[eo - FONT_1B], tfont_names[akt_id][eo - FONT_1B]); form_adr[eo].ob_state &= ~DISABLED; for (i = 0; i < 5; i++) form_adr[FONT_S + i].ob_state &= ~SELECTED; form_adr[eo].ob_state |= SELECTED; strcpy(txt_fonts[akt_id][font_nr - 2], rindex(font_path, '\\') + 1); } objc_draw(form_adr, ROOT, MAX_DEPTH, fx, fy, fw, fh); } else font_nr = eo - FONT_S + 1; break; case GRT_UP: if (font_height > distance[4] - distance[2]) font_height--; break; case GRT_DWN: font_height++; break; } eo &= 0x7FFF; }while(eo != FONT_OK && eo != FONT_CNC); form_adr[eo & 0x7FFF].ob_state &= ~SELECTED; f_dial(FMD_SHRINK); f_dial(FMD_FINISH); get_eline(); if (eo == FONT_OK) { set_fontd(font_nr, font_height); akt_font = font_nr; akt_fheight = font_height; } vst_alignment(vdi_handle, 0, 3, &dummy, &dummy); }
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() */
/* 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(); }
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(); }
/* ----------------- */ 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); }
/* * Routine that creates a new directory in the specified window/path */ WORD fun_mkdir(WNODE *pw_node) { PNODE *pp_node; OBJECT *tree; WORD i, len, err; BYTE fnew_name[LEN_ZFNAME], unew_name[LEN_ZFNAME], *ptmp; BYTE path[MAXPATHLEN]; tree = G.a_trees[ADMKDBOX]; pp_node = pw_node->w_path; ptmp = path; strcpy(ptmp, pp_node->p_spec); i = 0; while (*ptmp++) { if (*ptmp == '\\') i++; } if (i > MAX_LEVEL) { fun_alert(1, STFO8DEE); return FALSE; } while(1) { fnew_name[0] = '\0'; inf_sset(tree, MKNAME, fnew_name); show_hide(FMD_START, tree); form_do(tree, 0); if (inf_what(tree, MKOK, MKCNCL) == 0) break; inf_sget(tree, MKNAME, fnew_name); unfmt_str(fnew_name, unew_name); if (unew_name[0] == '\0') break; ptmp = add_fname(path, unew_name); err = dos_mkdir(path); if (err == 0) /* mkdir succeeded */ { fun_rebld(pw_node); break; } /* * if we're getting a BIOS (rather than GEMDOS) error, the * critical error handler has already issued a message, so * just quit */ if (IS_BIOS_ERROR(err)) break; len = strlen(path); /* before we restore old path */ restore_path(ptmp); /* restore original path */ if (len >= LEN_ZPATH-3) { fun_alert(1,STDEEPPA); break; } /* * mkdir failed with a recoverable error: * prompt for Cancel or Retry */ if (fun_alert(2,STFOFAIL) == 1) /* Cancel */ break; } show_hide(FMD_FINISH, tree); return TRUE; }
xamdeflst() { long mul; int botptr, bret, value; int xoff, yoff, mx, my; int i, ret, cont; int np, xam; int k1, k2; /* Allocate memory to hold defects */ if ((xampaddr = mymalloc(npndefs*(sizeof(PADDR)))) <= 0) { return err(nomemory); } for (np = 0; np < npndefs; np++) { xampaddr[np].exist = nppaddr[np].exist; xampaddr[np].head = nppaddr[np].head; xampaddr[np].cylndr = nppaddr[np].cylndr; xampaddr[np].btoffst = nppaddr[np].btoffst; } r_items(); /* read items */ totcnt = npndefs; if (npndefs > NM_ITEMS) /* bigger than one window */ botptr = npndefs - NM_ITEMS; else botptr = 0; cont = TRUE; /* control flag */ while(cont) { bret = form_do(xamform, -1); graf_mkstate(&mx, &my, &k1, &k2); /* graf mkstate */ ret = bret & 0x7FFF; /* mask off double click */ LWSET(OB_STATE(xamform, ret), 0); value = 1; /* scroll factor */ switch (ret) { /* Big Switch */ case FSVSLID: objc_offset(xamform, FSVELEV, &xoff, &yoff); value = NM_ITEMS; /* one full window size */ if (my <= yoff) goto up; goto down; case FSVELEV: value = graf_slidebox(xamform, FSVSLID, FSVELEV, TRUE); mul = (npndefs - NM_ITEMS) * value; mul /= 1000; value = (int)mul; value = (topptr - value); if (value >= 0) goto up; /* go up */ else value = -value; /* go down */ down: case FDNAROW: /* scroll down */ if (topptr == botptr) break; if ((topptr + value) <= botptr) topptr += value; else topptr = botptr; goto sfiles; up: case FUPAROW: /* scroll up */ if (!topptr) break; if ((topptr - value) >= 0) topptr -= value; else topptr = 0; sfiles: r_show(topptr); /* redisplay the file */ break; case FCLSBOX: cont = FALSE; break; default: if (ret >= ENTRY0 && ret <= ENTRY7) { erasemsg(); /* erase EXAMINING box */ want2edt(ret); /* let user edit entry */ dsplymsg(xamform); /* redraw EXAMINING box */ } break; } /* end of switch */ } /* while */ erasemsg(); /* New inputted list = Examined list */ for (xam = 0, np = 0; xam < npndefs; xam++) { if (xampaddr[xam].exist) { nppaddr[np].head = xampaddr[xam].head; nppaddr[np].cylndr = xampaddr[xam].cylndr; nppaddr[np].btoffst = xampaddr[xam].btoffst; np++; } } npndefs = np; /* current number of input entries */ free(xampaddr); return (TRUE); }
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 );*/ }