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