bammi@cwruecmp.UUCP (Jwahar R. Bammi) (03/22/86)
#!/bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #!/bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # apndx1.prf # apndx2.prf # apndx3.prf # apndx4.prf # This archive created: Fri Mar 21 22:40:57 1986 # By: Jwahar R. Bammi () export PATH; PATH=/bin:$PATH echo shar: extracting "'apndx1.prf'" '(5146 characters)' if test -f 'apndx1.prf' then echo shar: over-writing existing file "'apndx1.prf'" fi sed 's/^X//' << \SHAR_EOF > 'apndx1.prf' X.!**************************************************************************** X.! X.! ANTIC PUBLISHING INC., COPYRIGHT 1985. REPRINTED BY PERMISSION. X.! X.! ** Professional GEM ** by Tim Oren X.! X.! Proff File by ST enthusiasts at X.! Case Western Reserve University X.! Cleveland, Ohio X.! uucp : decvax!cwruecmp!bammi X.! csnet: bammi@case X.! arpa : bammi%case@csnet-relay X.! compuserve: 71515,155 X.! X.!**************************************************************************** X.! X.! Begin Appendix 1 X.! X.!*************************************************************************** X.! X.! X.AP I Sample Code for Part II X/* >>>>>>>>>>>>>>>>>>>>>>>>> Sample Redraw Code <<<<<<<<<<<<<<<<<<<<<<<<<<< */ X XVOID Xdo_redraw(wh, area) /* wh = window handle from msg[3] */ XWORD wh; /* area = pointer to redraw rect- */ XGRECT *area; /* tangle in msg[4] thru msg[7] */ X{ X GRECT box; X X graf_mouse(M_OFF, 0x0L); X wind_update(BEG_UPDATE); X X wind_get(wh, WF_FIRSTXYWH, &box.g_x, &box.g_y, &box.g_w, &box.g_h); X while ( box.g_w && box.g_h ) X { X if (rc_intersect(full, &box)) /* Full is entire screen */ X if (rc_intersect(area, &box)) X { X if (wh == w1_handle) /* Test for window 1 handle */ X { /* AES redraw example */ X objc_draw(w1_tree, ROOT, MAX_DEPTH, box.g_x, X box.g_y, box.g_w, box.g_h); X } X else if (wh == w2_handle) /* Test for window 2 handle */ X { /* VDI redraw example */ X set_clip(TRUE, &box); X /* Put VDI drawing calls here */ X } X /* add more windows here */ X } X wind_get(wh, WF_NEXTXYWH, &box.g_x, &box.g_y, &box.g_w, X &box.g_h); X } X X wind_update(END_UPDATE); X graf_mouse(M_ON, 0x0L); X} X.bp X/* >>>>>>>>>>>>>>>>>>>>>>>> Utilities used in do_redraw <<<<<<<<<<<<<<<<<<<< */ X XVOID Xset_clip(clip_flag, area) /* set clip to specified area */ XWORD clip_flag; XGRECT *area; X{ X WORD pxy[4]; X X grect_to_array(area, pxy); X vs_clip(vdi_handle, clip_flag, pxy); X} X XVOID Xgrect_to_array(area, array) /* convert x,y,w,h to upr lt x,y and */ XGRECT *area; /* lwr rt x,y */ XWORD *array; X{ X *array++ = area->g_x; X *array++ = area->g_y; X *array++ = area->g_x + area->g_w - 1; X *array = area->g_y + area->g_h - 1; X} X XWORD Xrc_intersect(p1, p2) /* compute intersect of two rectangles */ XGRECT *p1, *p2; X{ X WORD tx, ty, tw, th; X X tw = min(p2->g_x + p2->g_w, p1->g_x + p1->g_w); X th = min(p2->g_y + p2->g_h, p1->g_y + p1->g_h); X tx = max(p2->g_x, p1->g_x); X ty = max(p2->g_y, p1->g_y); X p2->g_x = tx; X p2->g_y = ty; X p2->g_w = tw - tx; X p2->g_h = th - ty; X return( (tw > tx) && (th > ty) ); X} X.bp X/* >>>>>>>>>>>>>>>>>>>>>>> "Self-redraw" Utility <<<<<<<<<<<<<<<<<<<<<<<<< */ X XVOID Xsend_redraw(wh, p) XWORD wh; XGRECT *p; X{ X WORD msg[8]; X X msg[0] = WM_REDRAW; /* Defined in GEMBIND.H */ X msg[1] = gl_apid; /* As returned by appl_init */ X msg[2] = 0; X msg[3] = wh; /* Handle of window to redraw */ X msg[4] = p->g_x; X msg[5] = p->g_y; X msg[6] = p->g_w; X msg[7] = p->g_h; X appl_write(gl_apid, 16, &msg); /* Use ADDR(msg) for portability */ X} X.bp X/* >>>>>>>>>>>>>>>>>>>> Utilities for Window Requests <<<<<<<<<<<<<<<<<< */ X XVOID Xrc_constrain(pc, pt) XGRECT *pc; XGRECT *pt; X{ X if (pt->g_x < pc->g_x) X pt->g_x = pc->g_x; X if (pt->g_y < pc->g_y) X pt->g_y = pc->g_y; X if ((pt->g_x + pt->g_w) > (pc->g_x + pc->g_w)) X pt->g_x = (pc->g_x + pc->g_w) - pt->g_w; X if ((pt->g_y + pt->g_h) > (pc->g_y + pc->g_h)) X pt->g_y = (pc->g_y + pc->g_h) - pt->g_h; X} X XWORD Xalign(x,n) /* Snap position x to an n-bit grid */ XWORD x, n; /* Use n = 16 for horizontal word alignment */ X{ X x += (n >> 2) - 1; /* Round and... */ X x = n * (x / n); /* remove residue */ X return (x); X} X.bp X/* >>>>>>>>>>>>>>>>>>>>>>> Window full utility <<<<<<<<<<<<<<<<<<<<<<< */ X XVOID Xhndl_full(wh) /* depending on current window state, make window */ XWORD wh; /* full size -or- return to previous shrunken size */ X{ /* graf_ calls are optional special effects. */ X GRECT prev; X GRECT curr; X GRECT full; X X wind_get(wh, WF_CXYWH, &curr.g_x, &curr.g_y, &curr.g_w, &curr.g_h); X wind_get(wh, WF_PXYWH, &prev.g_x, &prev.g_y, &prev.g_w, &prev.g_h); X wind_get(wh, WF_FXYWH, &full.g_x, &full.g_y, &full.g_w, &full.g_h); X if ( rc_equal(&curr, &full) ) X { /* Is full, change to previous */ X graf_shrinkbox(prev.g_x, prev.g_y, prev.g_w, prev.g_h, X full.g_x, full.g_y, full.g_w, full.g_h); X wind_set(wh, WF_CXYWH, prev.g_x, prev.g_y, prev.g_w, prev.g_h); X /* put send_redraw here if you need it */ X } X else X { /* is not full, so set to full */ X graf_growbox(curr.g_x, curr.g_y, curr.g_w, curr.g_h, X full.g_x, full.g_y, full.g_w, full.g_h); X wind_set(wh, WF_CXYWH, full.g_x, full.g_y, full.g_w, full.g_h); X } X} X XWORD Xrc_equal(p1, p2) /* tests for two rectangles equal */ XGRECT *p1, *p2; X{ X if ((p1->g_x != p2->g_x) || X (p1->g_y != p2->g_y) || X (p1->g_w != p2->g_w) || X (p1->g_h != p2->g_h)) X return(FALSE); X return(TRUE); X} X.! X.!**************************************************************************** X.! X.! End Appendix 1 X.! X.!**************************************************************************** SHAR_EOF if test 5146 -ne "`wc -c 'apndx1.prf'`" then echo shar: error transmitting "'apndx1.prf'" '(should have been 5146 characters)' fi echo shar: extracting "'apndx2.prf'" '(2869 characters)' if test -f 'apndx2.prf' then echo shar: over-writing existing file "'apndx2.prf'" fi sed 's/^X//' << \SHAR_EOF > 'apndx2.prf' X.!**************************************************************************** X.! X.! ANTIC PUBLISHING INC., COPYRIGHT 1985. REPRINTED BY PERMISSION. X.! X.! ** Professional GEM ** by Tim Oren X.! X.! Proff File by ST enthusiasts at X.! Case Western Reserve University X.! Cleveland, Ohio X.! uucp : decvax!cwruecmp!bammi X.! csnet: bammi@case X.! arpa : bammi%case@csnet-relay X.! compuserve: 71515,155 X.! X.!**************************************************************************** X.! X.! Begin Appendix 2 X.! X.!*************************************************************************** X.! X.! X.AP II Sample Code for Part III X/* X>>>>>>>>>>>>>>>>>>>>>>> Basic Dialog Handler <<<<<<<<<<<<<<<<<<<<<<< X*/ X XWORD Xhndl_dial(tree, def, x, y, w, h) XLONG tree; XWORD def; XWORD x, y, w, h; X{ X WORD xdial, ydial, wdial, hdial, exitobj; X X form_center(tree, &xdial, &ydial, &wdial, &hdial); X form_dial(0, x, y, w, h, xdial, ydial, wdial, hdial); X form_dial(1, x, y, w, h, xdial, ydial, wdial, hdial); X objc_draw(tree, ROOT, MAX_DEPTH, xdial, ydial, wdial, hdial); X exitobj = form_do(tree, def) & 0x7FFF; X form_dial(2, x, y, w, h, xdial, ydial, wdial, hdial); X form_dial(3, x, y, w, h, xdial, ydial, wdial, hdial); X return (exitobj); X} X.bp X/* X>>>>>>>>>>>>>>>>>>>>>>> Object rectangle utility <<<<<<<<<<<<<<<<<<<<<<<<< X*/ X XVOID Xobjc_xywh(tree, obj, p) /* get x,y,w,h for specified object */ XLONG tree; XWORD obj; XGRECT *p; X{ X objc_offset(tree, obj, &p->g_x, &p->g_y); X p->g_w = LWGET(OB_WIDTH(obj)); X p->g_h = LWGET(OB_HEIGHT(obj)); X} X.bp X/* X>>>>>>>>>>>>>>>>>>>>>>> Object flag utilities <<<<<<<<<<<<<<<<<<<<<<<<<<< X*/ X XVOID Xundo_obj(tree, which, bit) /* clear specified bit in object state */ XLONG tree; XWORD which, bit; X{ X WORD state; X X state = LWGET(OB_STATE(which)); X LWSET(OB_STATE(which), state & ~bit); X} X XVOID Xdesel_obj(tree, which) /* turn off selected bit of spcfd object*/ XLONG tree; XWORD which; X{ X undo_obj(tree, which, SELECTED); X} X XVOID Xdo_obj(tree, which, bit) /* set specified bit in object state */ XLONG tree; XWORD which, bit; X{ X WORD state; X X state = LWGET(OB_STATE(which)); X LWSET(OB_STATE(which), state | bit); X} X XVOID Xsel_obj(tree, which) /* turn on selected bit of spcfd object */ XLONG tree; XWORD which; X{ X do_obj(tree, which, SELECTED); X} X XBOOLEAN Xstatep(tree, which, bit) XLONG tree; XWORD which; XWORD bit; X{ X return ( (LWGET(OB_STATE(which)) & bit) != 0); X} X XBOOLEAN Xselectp(tree, which) XLONG tree; XWORD which; X{ X return statep(tree, which, SELECTED); X} X.bp X/* X>>>>>>>>>>>>>>>>>>>>>> Sample radio buttons after dialog <<<<<<<<<<<<<<<<<<<< X*/ X X XWORD Xencode(tree, ob1st, num) XLONG tree; XWORD ob1st, num; X{ X for (; num--; ) X if (selectp(ob1st+num)) X return(num); X return (-1); X} X.! X.!**************************************************************************** X.! X.! End Appendix 3 X.! X.!**************************************************************************** SHAR_EOF if test 2869 -ne "`wc -c 'apndx2.prf'`" then echo shar: error transmitting "'apndx2.prf'" '(should have been 2869 characters)' fi echo shar: extracting "'apndx3.prf'" '(11344 characters)' if test -f 'apndx3.prf' then echo shar: over-writing existing file "'apndx3.prf'" fi sed 's/^X//' << \SHAR_EOF > 'apndx3.prf' X.!**************************************************************************** X.! X.! ANTIC PUBLISHING INC., COPYRIGHT 1985. REPRINTED BY PERMISSION. X.! X.! ** Professional GEM ** by Tim Oren X.! X.! Proff File by ST enthusiasts at X.! Case Western Reserve University X.! Cleveland, Ohio X.! uucp : decvax!cwruecmp!bammi X.! csnet: bammi@case X.! arpa : bammi%case@csnet-relay X.! compuserve: 71515,155 X.! X.!**************************************************************************** X.! X.! Begin Appendix 3 X.! X.!*************************************************************************** X.! X.! X.AP III Sample Code for Part IV X/* X>>>>>>>>>>>>>>>>>>>>>>>>>> Sample C output file from RCS <<<<<<<<<<<<<<<<<<<< X*/ X /* (Comments added) */ XBYTE *rs_strings[] = { /* ASCII data */ X"Title String", X"Exit", X"Centered Text", X"", X"", X"Butt", X"Tokyo", X"", X"Time: __:__:__", X"999999", X"", X"Time: __:__:__ ", X"999999", X"New York"}; X XWORD IMAG0[] = { /* Bitmap for G_IMAGE */ X0x7FF, 0xFFFF, 0xFF80, 0xC00, X0x0, 0xC0, 0x183F, 0xF03F, X0xF060, 0x187F, 0xF860, 0x1860, X0x187F, 0xF860, 0x1860, 0x187F, X0xF860, 0x1860, 0x187F, 0xF860, X0x1860, 0x187F, 0xF860, 0x1860, X0x187F, 0xF860, 0x1860, 0x187F, X0xF860, 0x1860, 0x187F, 0xF860, X0x1860, 0x187F, 0xF860, 0x1860, X0x187F, 0xF860, 0x1860, 0x187F, X0xF860, 0x1860, 0x183F, 0xF03F, X0xF060, 0xC00, 0x0, 0xC0, X0x7FF, 0xFFFF, 0xFF80, 0x0, X0x0, 0x0, 0x3F30, 0xC787, X0x8FE0, 0xC39, 0xCCCC, 0xCC00, X0xC36, 0xCFCC, 0xF80, 0xC30, X0xCCCD, 0xCC00, 0x3F30, 0xCCC7, X0xCFE0, 0x0, 0x0, 0x0}; X XWORD IMAG1[] = { /* Mask for first icon */ X0x0, 0x0, 0x0, 0x0, X0x7FFE, 0x0, 0x1F, 0xFFFF, X0xFC00, 0xFF, 0xFFFF, 0xFF00, X0x3FF, 0xFFFF, 0xFFC0, 0xFFF, X0xFFFF, 0xFFF0, 0x3FFF, 0xFFFF, X0xFFFC, 0x7FFF, 0xFFFF, 0xFFFE, X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X0xFFFF, 0xFFFF, 0xFFFF, 0x7FFF, X0xFFFF, 0xFFFE, 0x3FFF, 0xFFFF, X0xFFFC, 0xFFF, 0xFFFF, 0xFFF0, X0x3FF, 0xFFFF, 0xFFC0, 0xFF, X0xFFFF, 0xFF00, 0x1F, 0xFFFF, X0xF800, 0x0, 0x7FFE, 0x0}; X XWORD IMAG2[] = { /* Data for first icon */ X0x0, 0x0, 0x0, 0x0, X0x3FFC, 0x0, 0xF, 0xC003, X0xF000, 0x78, 0x180, 0x1E00, X0x180, 0x180, 0x180, 0x603, X0x180, 0xC060, 0x1C00, 0x6, X0x38, 0x3000, 0x18C, 0xC, X0x60C0, 0x198, 0x306, 0x6000, X0x1B0, 0x6, 0x4000, 0x1E0, X0x2, 0xC000, 0x1C0, 0x3, X0xCFC0, 0x180, 0x3F3, 0xC000, X0x0, 0x3, 0x4000, 0x0, X0x2, 0x6000, 0x0, 0x6, X0x60C0, 0x0, 0x306, 0x3000, X0x0, 0xC, 0x1C00, 0x0, X0x38, 0x603, 0x180, 0xC060, X0x180, 0x180, 0x180, 0x78, X0x180, 0x1E00, 0xF, 0xC003, X0xF000, 0x0, 0x3FFC, 0x0}; X XWORD IMAG3[] = { /* Mask for second icon */ X0x0, 0x0, 0x0, 0x0, X0x7FFE, 0x0, 0x1F, 0xFFFF, X0xFC00, 0xFF, 0xFFFF, 0xFF00, X0x3FF, 0xFFFF, 0xFFC0, 0xFFF, X0xFFFF, 0xFFF0, 0x3FFF, 0xFFFF, X0xFFFC, 0x7FFF, 0xFFFF, 0xFFFE, X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X0xFFFF, 0xFFFF, 0xFFFF, 0x7FFF, X0xFFFF, 0xFFFE, 0x3FFF, 0xFFFF, X0xFFFC, 0xFFF, 0xFFFF, 0xFFF0, X0x3FF, 0xFFFF, 0xFFC0, 0xFF, X0xFFFF, 0xFF00, 0x1F, 0xFFFF, X0xF800, 0x0, 0x7FFE, 0x0}; X XWORD IMAG4[] = { /* Data for second icon */ X0x0, 0x0, 0x0, 0x0, X0x3FFC, 0x0, 0xF, 0xC003, X0xF000, 0x78, 0x180, 0x1E00, X0x180, 0x180, 0x180, 0x603, X0x180, 0xC060, 0x1C00, 0x6, X0x38, 0x3000, 0x18C, 0xC, X0x60C0, 0x198, 0x306, 0x6000, X0x1B0, 0x6, 0x4000, 0x1E0, X0x2, 0xC000, 0x1C0, 0x3, X0xCFC0, 0x180, 0x3F3, 0xC000, X0x0, 0x3, 0x4000, 0x0, X0x2, 0x6000, 0x0, 0x6, X0x60C0, 0x0, 0x306, 0x3000, X0x0, 0xC, 0x1C00, 0x0, X0x38, 0x603, 0x180, 0xC060, X0x180, 0x180, 0x180, 0x78, X0x180, 0x1E00, 0xF, 0xC003, X0xF000, 0x0, 0x3FFC, 0x0}; X XLONG rs_frstr[] = { /* Free string index - unused */ X0}; X XBITBLK rs_bitblk[] = { /* First entry is index to image data */ X0L, 6, 24, 0, 0, 0}; X XLONG rs_frimg[] = { /* Free image index - unused */ X0}; X XICONBLK rs_iconblk[] = { X1L, 2L, 10L, 4096,0,0, 0,0,48,24, 9,24,30,8, /* First pointer is mask */ X3L, 4L, 17L, 4864,0,0, 0,0,48,24, 0,24,48,8}; /* Second is data, third */ X /* is to title string */ XTEDINFO rs_tedinfo[] = { X2L, 3L, 4L, 3, 6, 2, 0x1180, 0x0, -1, 14,1, /* First pointer is text */ X7L, 8L, 9L, 3, 6, 2, 0x2072, 0x0, -3, 11,1, /* Second is template */ X11L, 12L, 13L, 3, 6, 0, 0x1180, 0x0, -1, 1,15, /* Third is validation */ X14L, 15L, 16L, 3, 6, 1, 0x1173, 0x0, 0, 1,17}; X XOBJECT rs_object[] = { X-1, 1, 3, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 18,12, /* Pointers are to: */ X2, -1, -1, G_STRING, NONE, NORMAL, 0x0L, 3,1, 12,1, /* rs_strings */ X3, -1, -1, G_BUTTON, 0x7, NORMAL, 0x1L, 5,9, 8,1, /* rs_strings */ X0, 4, 4, G_BOX, NONE, NORMAL, 0xFF1172L, 3,3, 12,5, X3, -1, -1, G_IMAGE, LASTOB, NORMAL, 0x0L, 3,1, 6,3, /* rs_bitblk */ X-1, 1, 6, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 23,12, X2, -1, -1, G_TEXT, NONE, NORMAL, 0x0L, 0,1, 23,1, /* rs_tedinfo */ X6, 3, 5, G_IBOX, NONE, NORMAL, 0x1100L, 6,3, 11,5, X4, -1, -1, G_BUTTON, 0x11, NORMAL, 0x5L, 0,0, 11,1, /* rs_strings */ X5, -1, -1, G_BUTTON, 0x11, NORMAL, 0x6L, 0,2, 11,1, /* rs_strings */ X2, -1, -1, G_BOXCHAR, 0x11, NORMAL, 0x43FF1400L, 0,4, 11,1, X0, -1, -1, G_BOXTEXT, 0x27, NORMAL, 0x1L, 5,9, 13,1, /* rs_tedinfo */ X-1, 1, 3, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 32,11, X2, -1, -1, G_ICON, NONE, NORMAL, 0x0L, 4,1, 6,4, /* rs_iconblk */ X3, -1, -1, G_FTEXT, EDITABLE, NORMAL, 0x2L, 12,2, 14,1, /* rs_tedinfo */ X0, 4, 4, G_FBOXTEXT, 0xE, NORMAL, 0x3L, 3,5, 25,4, /* rs_tedinfo */ X3, -1, -1, G_ICON, LASTOB, NORMAL, 0x1L, 1,0, 6,4}; /* rs_iconblk */ X XLONG rs_trindex[] = { /* Points to start of trees in */ X0L, /* rs_object */ X5L, X12L}; X Xstruct foobar { /* Temporary structure used by */ X WORD dummy; /* RSCREATE when setting up image */ X WORD *image; /* pointers. */ X } rs_imdope[] = { X0, &IMAG0[0], X0, &IMAG1[0], X0, &IMAG2[0], X0, &IMAG3[0], X0, &IMAG4[0]}; X /* Counts of structures defined */ X#define NUM_STRINGS 18 X#define NUM_FRSTR 0 X#define NUM_IMAGES 5 X#define NUM_BB 1 X#define NUM_FRIMG 0 X#define NUM_IB 2 X#define NUM_TI 4 X#define NUM_OBS 17 X#define NUM_TREE 3 X XBYTE pname[] = "DEMO.RSC"; X.bp X/* X>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Title change utility <<<<<<<<<<<<<<<<<<<<< X*/ X VOID Xset_text(tree, obj, str) X LONG tree, str; X WORD obj; X { X LONG obspec; X X obspec = LLGET(OB_SPEC(obj)); /* Get TEDINFO address */ X LLSET(TE_PTEXT(obspec), str); /* Set new text pointer */ X LWSET(TE_TXTLEN(obspec), LSTRLEN(str)); /* Set new length */ X } X.bp X/* X>>>>>>>>>>>>>>>>>>>>>> Text edit code segment <<<<<<<<<<<<<<<<<<<<<<<<<< X*/ X LONG tree, obspec; X BYTE text[41]; X X rsrc_gaddr(R_TREE, DIALOG, &tree); /* Get tree address */ X obspec = LLGET(OB_SPEC(EDITOBJ)); /* Get TEDINFO address */ X LLSET(TE_PTEXT(obspec), ADDR(str)); /* Set new text pointer */ X LWSET(TE_TXTLEN(obspec), 41); /* Set max length */ X text[0] = '\0'; /* Make empty string */ X.bp X/* X>>>>>>>>>>>>>>>>>>>> Sample 68K only source code <<<<<<<<<<<<<<<<<<<<<< X*/ X VOID Xset_text(tree, obj, str) X OBJECT *tree; X WORD obj; X BYTE *str; X { X TEDINFO *obspec; X X obspec = (TEDINFO *) (tree + obj)->ob_spec; X /* Get TEDINFO address */ X obspec->te_ptext = str; /* Set new text pointer */ X obspec->te_txtlen = strlen(str); /* Set new length */ X } X.bp X/* X>>>>>>>>>>>>>>>>>>>>>>>>>>>> Symbol definitions <<<<<<<<<<<<<<<<<<<<<<<<< X*/ X /* Window parts */ X#define NAME 0x0001 X#define CLOSER 0x0002 X#define FULLER 0x0004 X#define MOVER 0x0008 X#define INFO 0x0010 X#define SIZER 0x0020 X#define UPARROW 0x0040 X#define DNARROW 0x0080 X#define VSLIDE 0x0100 X#define LFARROW 0x0200 X#define RTARROW 0x0400 X#define HSLIDE 0x0800 X X#define WF_KIND 1 /* wind_get/set parameters */ X#define WF_NAME 2 X#define WF_INFO 3 X#define WF_WXYWH 4 X#define WF_CXYWH 5 X#define WF_PXYWH 6 X#define WF_FXYWH 7 X#define WF_HSLIDE 8 X#define WF_VSLIDE 9 X#define WF_TOP 10 X#define WF_FIRSTXYWH 11 X#define WF_NEXTXYWH 12 X#define WF_NEWDESK 14 X#define WF_HSLSIZ 15 X#define WF_VSLSIZ 16 X /* window messages */ X#define WM_REDRAW 20 X#define WM_TOPPED 21 X#define WM_CLOSED 22 X#define WM_FULLED 23 X#define WM_ARROWED 24 X#define WM_HSLID 25 X#define WM_VSLID 26 X#define WM_SIZED 27 X#define WM_MOVED 28 X#define WM_NEWTOP 29 X /* arrow messages */ X#define WA_UPPAGE 0 X#define WA_DNPAGE 1 X#define WA_UPLINE 2 X#define WA_DNLINE 3 X#define WA_LFPAGE 4 X#define WA_RTPAGE 5 X#define WA_LFLINE 6 X#define WA_RTLINE 7 X X#define R_TREE 0 /* Redraw definitions */ X#define ROOT 0 X#define MAX_DEPTH 8 X /* update flags */ X#define END_UPDATE 0 X#define BEG_UPDATE 1 X#define END_MCTRL 2 X#define BEG_MCTRL 3 X /* Mouse state changes */ X#define M_OFF 256 X#define M_ON 257 X /* Object flags */ X#define NONE 0x0 X#define SELECTABLE 0x1 X#define DEFAULT 0x2 X#define EXIT 0x4 X#define EDITABLE 0x8 X#define RBUTTON 0x10 X /* Object states */ X#define SELECTED 0x1 X#define CROSSED 0x2 X#define CHECKED 0x4 X#define DISABLED 0x8 X#define OUTLINED 0x10 X#define SHADOWED 0x20 X X#define G_BOX 20 X#define G_TEXT 21 X#define G_BOXTEXT 22 X#define G_IMAGE 23 X#define G_IBOX 25 X#define G_BUTTON 26 X#define G_BOXCHAR 27 X#define G_STRING 28 X#define G_FTEXT 29 X#define G_FBOXTEXT 30 X#define G_ICON 31 X#define G_TITLE 32 X /* Data structures */ Xtypedef struct grect X { X int g_x; X int g_y; X int g_w; X int g_h; X } GRECT; X Xtypedef struct object X { X int ob_next; /* -> object's next sibling */ X int ob_head; /* -> head of object's children */ X int ob_tail; /* -> tail of object's children */ X unsigned int ob_type; /* type of object- BOX, CHAR,...*/ X unsigned int ob_flags; /* flags */ X unsigned int ob_state; /* state- SELECTED, OPEN, ... */ X long ob_spec; /* "out"- -> anything else */ X int ob_x; /* upper left corner of object */ X int ob_y; /* upper left corner of object */ X int ob_width; /* width of obj */ X int ob_height; /* height of obj */ X } OBJECT; X Xtypedef struct text_edinfo X { X long te_ptext; /* ptr to text (must be 1st) */ X long te_ptmplt; /* ptr to template */ X long te_pvalid; /* ptr to validation chrs. */ X int te_font; /* font */ X int te_junk1; /* junk word */ X int te_just; /* justification- left, right...*/ X int te_color; /* color information word */ X int te_junk2; /* junk word */ X int te_thickness; /* border thickness */ X int te_txtlen; /* length of text string */ X int te_tmplen; /* length of template string */ X } TEDINFO; X X /* "Portable" data definitions */ X#define OB_NEXT(x) (tree + (x) * sizeof(OBJECT) + 0) X#define OB_HEAD(x) (tree + (x) * sizeof(OBJECT) + 2) X#define OB_TAIL(x) (tree + (x) * sizeof(OBJECT) + 4) X#define OB_TYPE(x) (tree + (x) * sizeof(OBJECT) + 6) X#define OB_FLAGS(x) (tree + (x) * sizeof(OBJECT) + 8) X#define OB_STATE(x) (tree + (x) * sizeof(OBJECT) + 10) X#define OB_SPEC(x) (tree + (x) * sizeof(OBJECT) + 12) X#define OB_X(x) (tree + (x) * sizeof(OBJECT) + 16) X#define OB_Y(x) (tree + (x) * sizeof(OBJECT) + 18) X#define OB_WIDTH(x) (tree + (x) * sizeof(OBJECT) + 20) X#define OB_HEIGHT(x) (tree + (x) * sizeof(OBJECT) + 22) X X#define TE_PTEXT(x) (x) X#define TE_TXTLEN(x) (x + 24) X.! X.!**************************************************************************** X.! X.! End Appendix 3 X.! X.!**************************************************************************** SHAR_EOF if test 11344 -ne "`wc -c 'apndx3.prf'`" then echo shar: error transmitting "'apndx3.prf'" '(should have been 11344 characters)' fi echo shar: extracting "'apndx4.prf'" '(5968 characters)' if test -f 'apndx4.prf' then echo shar: over-writing existing file "'apndx4.prf'" fi sed 's/^X//' << \SHAR_EOF > 'apndx4.prf' X.!**************************************************************************** X.! X.! ANTIC PUBLISHING INC., COPYRIGHT 1985. REPRINTED BY PERMISSION. X.! X.! ** Professional GEM ** by Tim Oren X.! X.! Proff File by ST enthusiasts at X.! Case Western Reserve University X.! Cleveland, Ohio X.! uucp : decvax!cwruecmp!bammi X.! csnet: bammi@case X.! arpa : bammi%case@csnet-relay X.! compuserve: 71515,155 X.! X.!**************************************************************************** X.! X.! Begin Appendix 4 X.! X.!*************************************************************************** X.! X.! X.AP IV Sample Code for Part V X/* X>>>>>>>>>>>>>>>>>>>>>>>>>>> Sample object trees <<<<<<<<<<<<<<<<<<<<<<<< X*/ X XOBJECT rs_object[] = { X-1, 1, 3, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 18,12, /* Tree # 1 */ X2, -1, -1, G_STRING, NONE, NORMAL, 0x0L, 3,1, 12,1, X3, -1, -1, G_BUTTON, 0x7, NORMAL, 0x1L, 5,9, 8,1, X0, 4, 4, G_BOX, NONE, NORMAL, 0xFF1172L, 3,3, 12,5, X3, -1, -1, G_IMAGE, LASTOB, NORMAL, 0x0L, 3,1, 6,3, X-1, 1, 6, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 23,12, /* Tree # 2 */ X2, -1, -1, G_TEXT, NONE, NORMAL, 0x0L, 0,1, 23,1, X6, 3, 5, G_IBOX, NONE, NORMAL, 0x1100L, 6,3, 11,5, X4, -1, -1, G_BUTTON, 0x11, NORMAL, 0x5L, 0,0, 11,1, X5, -1, -1, G_BUTTON, 0x11, NORMAL, 0x6L, 0,2, 11,1, X2, -1, -1, G_BOXCHAR, 0x11, NORMAL, 0x43FF1400L, 0,4, 11,1, X0, -1, -1, G_BOXTEXT, 0x27, NORMAL, 0x1L, 5,9, 13,1, X-1, 1, 3, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 32,11, /* Tree # 3 */ X2, -1, -1, G_ICON, NONE, NORMAL, 0x0L, 4,1, 6,4, X3, -1, -1, G_FTEXT, EDITABLE, NORMAL, 0x2L, 12,2, 14,1, X0, 4, 4, G_FBOXTEXT, 0xE, NORMAL, 0x3L, 3,5, 25,4, X3, -1, -1, G_ICON, LASTOB, NORMAL, 0x1L, 1,0, 6,4}; X.bp X/* X>>>>>>>>>>>>>>>>>>>>>>>>>> Object tree walk utility <<<<<<<<<<<<<<<<<<<<<< X*/ X VOID Xmap_tree(tree, this, last, routine) X LONG tree; X WORD this, last; X WORD (*routine)(); X { X WORD tmp1; X X tmp1 = this; /* Initialize to impossible value: */ X /* TAIL won't point to self! */ X /* Look until final node, or off */ X /* the end of tree */ X while (this != last && this != NIL) X /* Did we 'pop' into this node */ X /* for the second time? */ X if (LWGET(OB_TAIL(this)) != tmp1) X { X tmp1 = this; /* This is a new node */ X this = NIL; X /* Apply operation, testing */ X /* for rejection of sub-tree */ X if ((*routine)(tree, tmp1)) X this = LWGET(OB_HEAD(tmp1)); X /* Subtree path not taken, */ X /* so traverse right */ X if (this == NIL) X this = LWGET(OB_NEXT(tmp1)); X } X else /* Revisiting parent: */ X /* No operation, move right */ X { X tmp1 = this; X this = LWGET(OB_NEXT(tmp1)); X } X } X.bp X/* X>>>>>>>>>>>>>>>>>> Sample routine to use with map_tree() <<<<<<<<<<<<<<< X*/ X VOID Xundo_obj(tree, which, bit) /* clear specified bit in object state */ X LONG tree; X WORD which, bit; X { X WORD state; X X state = LWGET(OB_STATE(which)); X LWSET(OB_STATE(which), state & ~bit); X } X X VOID Xdesel_obj(tree, which) /* turn off selected bit of spcfd object*/ X LONG tree; X WORD which; X { X undo_obj(tree, which, SELECTED); X return (TRUE); X } X.bp X/* X>>>>>>>>>>>>>>>>>>>>>>>>>> Sample .ICN Files <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< X>>>>>>>>>> Save everything between >>><<< lines as CLOCK.ICN <<<<<<<<<<<<<< X*/ X X/* GEM Icon Definition: */ X#define ICON_W 0x0030 X#define ICON_H 0x0018 X#define DATASIZE 0x0048 XUWORD clock[DATASIZE] = X{ 0x0000, 0x0000, 0x0000, 0x0000, X 0x3FFC, 0x0000, 0x000F, 0xC003, X 0xF000, 0x0078, 0x0180, 0x1E00, X 0x0180, 0x0180, 0x0180, 0x0603, X 0x0180, 0xC060, 0x1C00, 0x0006, X 0x0038, 0x3000, 0x018C, 0x000C, X 0x60C0, 0x0198, 0x0306, 0x6000, X 0x01B0, 0x0006, 0x4000, 0x01E0, X 0x0002, 0xC000, 0x01C0, 0x0003, X 0xCFC0, 0x0180, 0x03F3, 0xC000, X 0x0000, 0x0003, 0x4000, 0x0000, X 0x0002, 0x6000, 0x0000, 0x0006, X 0x60C0, 0x0000, 0x0306, 0x3000, X 0x0000, 0x000C, 0x1C00, 0x0000, X 0x0038, 0x0603, 0x0180, 0xC060, X 0x0180, 0x0180, 0x0180, 0x0078, X 0x0180, 0x1E00, 0x000F, 0xC003, X 0xF000, 0x0000, 0x3FFC, 0x0000 X}; X/* X>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> End of CLOCK.ICN <<<<<<<<<<<<<<<<<<<<<<<<<< X*/ X.bp X/* X>>>>>>>>> Save everything between >>>><<<<< lines as CLOCKM.ICN <<<<<<<<<< X*/ X X/* GEM Icon Definition: */ X#define ICON_W 0x0030 X#define ICON_H 0x0018 X#define DATASIZE 0x0048 XUWORD clockm[DATASIZE] = X{ 0x0000, 0x0000, 0x0000, 0x0000, X 0x7FFE, 0x0000, 0x001F, 0xFFFF, X 0xFC00, 0x00FF, 0xFFFF, 0xFF00, X 0x03FF, 0xFFFF, 0xFFC0, 0x0FFF, X 0xFFFF, 0xFFF0, 0x3FFF, 0xFFFF, X 0xFFFC, 0x7FFF, 0xFFFF, 0xFFFE, X 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, X 0xFFFF, 0xFFFF, 0xFFFF, 0x7FFF, X 0xFFFF, 0xFFFE, 0x3FFF, 0xFFFF, X 0xFFFC, 0x0FFF, 0xFFFF, 0xFFF0, X 0x03FF, 0xFFFF, 0xFFC0, 0x00FF, X 0xFFFF, 0xFF00, 0x001F, 0xFFFF, X 0xF800, 0x0000, 0x7FFE, 0x0000 X}; X/* X>>>>>>>>>>>>>>>>>>>>>>>>> End of CLOCKM.ICN <<<<<<<<<<<<<<<<<<<<<<<<<<<<< X*/ X.! X.!**************************************************************************** X.! X.! End Appendix 4 X.! X.!**************************************************************************** SHAR_EOF if test 5968 -ne "`wc -c 'apndx4.prf'`" then echo shar: error transmitting "'apndx4.prf'" '(should have been 5968 characters)' fi # End of shell archive exit 0 -- Jwahar R. Bammi Usenet: .....!decvax!cwruecmp!bammi CSnet: bammi@case Arpa: bammi%case@csnet-relay CompuServe: 71515,155