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:
# apndx5.prf
# apndx6.prf
# apndx7.prf
# apndx8.prf
# This archive created: Fri Mar 21 22:40:59 1986
# By: Jwahar R. Bammi ()
export PATH; PATH=/bin:$PATH
echo shar: extracting "'apndx5.prf'" '(5475 characters)'
if test -f 'apndx5.prf'
then
echo shar: over-writing existing file "'apndx5.prf'"
fi
sed 's/^X//' << \SHAR_EOF > 'apndx5.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 5
X.!
X.!***************************************************************************
X.!
X.!
X.AP V Sample Code for Part VI
X/* >>>>>>>>>>>>>>>>>>>>>>>>>>> MFDB Structure <<<<<<<<<<<<<<<<<<<<<<<<<< */
X /* Memory Form Definition Block */
Xtypedef struct fdbstr
X{
X long fd_addr; /* Form address */
X int fd_w; /* Form width in pixels */
X int fd_h; /* Form height in pixels */
X int fd_wdwidth; /* Form width in memory words */
X int fd_stand; /* Standard form flag */
X int fd_nplanes; /* Number of color planes */
X int fd_r1; /* Dummy locations: */
X int fd_r2; /* Reserved for future use */
X int fd_r3;
X} MFDB;
X.bp
X/* >>>>>>>>>>>>>>>>>>>> Resource Transform Utilities <<<<<<<<<<<<<<<<<< */
X/*------------------------------*/
X/* vdi_fix */
X/*------------------------------*/
XVOID
Xvdi_fix(pfd, theaddr, wb, h) /* This routine loads the MFDB */
X MFDB *pfd; /* Input values are the MFDB's */
X LONG theaddr; /* address, the form's address,*/
X WORD wb, h; /* the form's width in bytes, */
X { /* and the height in pixels */
X pfd->fww = wb >> 1;
X pfd->fwp = wb << 3;
X pfd->fh = h;
X pfd->np = 1; /* Monochrome assumed */
X pfd->mp = theaddr;
X }
X
X/*------------------------------*/
X/* vdi_trans */
X/*------------------------------*/
XWORD
Xvdi_trans(saddr, swb, daddr, dwb, h) /* Transform the standard form */
X LONG saddr; /* pointed at by saddr and */
X UWORD swb; /* store in the form at daddr */
X LONG daddr; /* Byte widths and pixel height*/
X UWORD dwb; /* are given */
X UWORD h;
X {
X MFDB src, dst; /* These are on-the-fly MFDBs */
X
X vdi_fix(&src, saddr, swb, h); /* Load the source MFDB */
X src.ff = TRUE; /* Set it's std form flag */
X
X vdi_fix(&dst, daddr, dwb, h); /* Load the destination MFDB */
X dst.ff = FALSE; /* Clear the std flag */
X vr_trnfm(vdi_handle, &src, &dst ); /* Call the VDI */
X }
X
X/*------------------------------*/
X/* trans_bitblk */
X/*------------------------------*/
XVOID
Xtrans_bitblk(obspec) /* Transform the image belonging */
X LONG obspec; /* to the bitblk pointed to by */
X { /* obspec. This routine may also*/
X LONG taddr; /* be used with free images */
X WORD wb, hl;
X
X if ( (taddr = LLGET(BI_PDATA(obspec))) == -1L)
X return; /* Get and validate image address */
X wb = LWGET(BI_WB(obspec)); /* Extract image dimensions */
X hl = LWGET(BI_HL(obspec));
X vdi_trans(taddr, wb, taddr, wb, hl); /* Perform a transform */
X } /* in place */
X
X/*------------------------------*/
X/* trans_obj */
X/*------------------------------*/
XVOID
Xtrans_obj(tree, obj) /* Examine the input object. If */
X LONG tree; /* it is an icon or image, trans- */
X WORD obj; /* form the associated raster */
X { /* forms in place. */
X WORD type, wb, hl; /* This routine may be used with */
X LONG taddr, obspec; /* map_tree() to transform an */
X /* entire resource tree */
X
X type = LLOBT(LWGET(OB_TYPE(obj))); /* Load object type */
X if ( (obspec = LLGET(OB_SPEC(obj))) == -1L) /* Load and check */
X return (TRUE); /* ob_spec pointer */
X switch (type) {
X case G_IMAGE:
X trans_bitblk(obspec); /* Transform image */
X return (TRUE);
X case G_ICON: /* Load icon size */
X hl = LWGET(IB_HICON(obspec));
X wb = (LWGET(IB_WICON(obspec)) + 7) >> 3;
X /* Transform data */
X if ( (taddr = LLGET(IB_PDATA(obspec))) != -1L)
X vdi_trans(taddr, wb, taddr, wb, hl);
X /* Transform mask */
X if ( (taddr = LLGET(IB_PMASK(obspec))) != -1L)
X vdi_trans(taddr, wb, taddr, wb, hl);
X return (TRUE);
X default:
X return (TRUE);
X }
X }
X.bp
X/* >>>>>>>>>>>>>>>> Macro definitions for the code above <<<<<<<<<<<<<<< */
X
X#define BI_PDATA(x) (x)
X#define BI_WB(x) (x + 4)
X#define BI_HL(x) (x + 6)
X#define OB_TYPE(x) (tree + (x) * sizeof(OBJECT) + 6)
X#define OB_SPEC(x) (tree + (x) * sizeof(OBJECT) + 12)
X#define IB_PMASK(x) (x)
X#define IB_PDATA(x) (x + 4)
X#define IB_WICON(x) (x + 22)
X#define IB_HICON(x) (x + 24)
X.bp
X/* >>>>>>>>>>>>>>>>>>>>>>>> VDI Copy Mode Table <<<<<<<<<<<<<<<<<<<<<<<<< */
X
XSymbols: N = new destination pixel value (0 or 1)
X D = old destination pixel value (0 or 1)
X S = source pixel value (0 or 1)
X ~ = Boolean not (inversion)
X & = Boolean and
X | = Boolean or
X ^ = Boolean xor (exclusive-or)
X
XMode Number Action
X---------- ------
X 0 N = 0 (USE V_BAR INSTEAD)
X 1 N = S & D
X 2 N = S & ~D
X 3 N = S (REPLACE)
X 4 N = ~S & D (ERASE)
X 5 N = D (USELESS)
X 6 N = S ^ D (XOR)
X 7 N = S | D (TRANSPARENT)
X 8 N = ~ (S | D)
X 9 N = ~ (S ^ D)
X 10 N = ~D (USE V_BAR INSTEAD)
X 11 N = S | ~D
X 12 N = ~S
X 13 N = ~S | D (REVERSE TRANSPARENT)
X 14 N = ~ (S & D)
X 15 N = 1 (USE V_BAR INSTEAD)
X
X/* >>>>>>>>>>>>>>>>>>>>>>>> END OF DOWNLOAD <<<<<<<<<<<<<<<<<<<<<<<<<< */
X.!
X.!****************************************************************************
X.!
X.! End Appendix 5
X.!
X.!****************************************************************************
SHAR_EOF
if test 5475 -ne "`wc -c 'apndx5.prf'`"
then
echo shar: error transmitting "'apndx5.prf'" '(should have been 5475 characters)'
fi
echo shar: extracting "'apndx6.prf'" '(5246 characters)'
if test -f 'apndx6.prf'
then
echo shar: over-writing existing file "'apndx6.prf'"
fi
sed 's/^X//' << \SHAR_EOF > 'apndx6.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 6
X.!
X.!***************************************************************************
X.!
X.!
X.AP VI Sample Code for Part VII
X/*
X>>>>>>>>>>>>>>>>>>>>>> Download file for GEM column #7 <<<<<<<<<<<<<<<<<<<<<
X>>>>>>>>>>>>>>>>>>>>>>>>>>>> Sample Menu Tree <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
X*/
X
X-1, 1, 6, G_IBOX, NONE, NORMAL, 0x0L, 0,0, 80,25, /* ROOT */
X6, 2, 2, G_BOX, NONE, NORMAL, 0x1100L, 0,0, 80,513, /* THE BAR */
X1, 3, 5, G_IBOX, NONE, NORMAL, 0x0L, 2,0, 20,769, /* THE ACTIVE */
X4, -1, -1, G_TITLE, NONE, NORMAL, 0x0L, 0,0, 6,769, /* Title #1 */
X5, -1, -1, G_TITLE, NONE, NORMAL, 0x1L, 6,0, 6,769, /* Title #2 */
X2, -1, -1, G_TITLE, NONE, NORMAL, 0x2L, 12,0, 8,769, /* Title #3 */
X0, 7, 22, G_IBOX, NONE, NORMAL, 0x0L, 0,769, 80,19, /* THE SCREEN */
X16, 8, 15, G_BOX, NONE, NORMAL, 0xFF1100L, 2,0, 20,8, /* Drop-down #1 */
X9, -1, -1, G_STRING, NONE, NORMAL, 0x3L, 0,0, 19,1, /* About... entry */
X10, -1, -1, G_STRING, NONE, DISABLED, 0x4L, 0,1, 20,1,
X11, -1, -1, G_STRING, NONE, NORMAL, 0x5L, 0,2, 20,1, /* Desk acc entries */
X12, -1, -1, G_STRING, NONE, NORMAL, 0x6L, 0,3, 20,1,
X13, -1, -1, G_STRING, NONE, NORMAL, 0x7L, 0,4, 20,1,
X14, -1, -1, G_STRING, NONE, NORMAL, 0x8L, 0,5, 20,1,
X15, -1, -1, G_STRING, NONE, NORMAL, 0x9L, 0,6, 20,1,
X7, -1, -1, G_STRING, NONE, NORMAL, 0xAL, 0,7, 20,1,
X22, 17, 21, G_BOX, NONE, NORMAL, 0xFF1100L, 8,0, 13,5, /* Drop-down #2 */
X18, -1, -1, G_STRING, NONE, NORMAL, 0xBL, 0,0, 13,1,
X19, -1, -1, G_STRING, NONE, DISABLED, 0xCL, 0,1, 13,1,
X20, -1, -1, G_STRING, NONE, NORMAL, 0xDL, 0,4, 13,1,
X21, -1, -1, G_STRING, NONE, NORMAL, 0xEL, 0,2, 13,1,
X16, -1, -1, G_STRING, NONE, DISABLED, 0xFL, 0,3, 13,1,
X6, 23, 25, G_BOX, NONE, NORMAL, 0xFF1100L, 14,0, 26,3, /* Drop down #3 */
X24, -1, -1, G_STRING, NONE, NORMAL, 0x10L, 0,2, 26,1,
X25, -1, -1, G_STRING, NONE, NORMAL, 0x11L, 0,0, 26,1,
X22, -1, -1, G_STRING, LASTOB, DISABLED, 0x12L, 0,1, 26,1
X.bp
X/*
X>>>>>>>>>>>>>>>>>>>>>>>> Menu enable/disable utility <<<<<<<<<<<<<<<<<<<<<<
X*/
X
X/*------------------------------*/
X/* undo_obj */
X/*------------------------------*/
X VOID
Xundo_obj(tree, which, bit)
X LONG tree;
X WORD which;
X UWORD bit;
X {
X WORD state;
X
X state = LWGET(OB_STATE(which));
X LWSET(OB_STATE(which), state & ~bit);
X }
X
X/*------------------------------*/
X/* enab_obj */
X/*------------------------------*/
X WORD
Xenab_obj(tree, which)
X LONG tree;
X WORD which;
X {
X undo_obj(tree, which, (UWORD) DISABLED);
X return (TRUE);
X }
X
X/*------------------------------*/
X/* do_obj */
X/*------------------------------*/
X VOID
Xdo_obj(tree, which, bit)
X LONG tree;
X WORD which;
X UWORD bit;
X {
X WORD state;
X
X state = LWGET(OB_STATE(which));
X LWSET(OB_STATE(which), state | bit);
X }
X
X/*------------------------------*/
X/* disab_obj */
X/*------------------------------*/
X WORD
Xdisab_obj(tree, which)
X LONG tree;
X WORD which;
X {
X do_obj(tree, which, (UWORD) DISABLED);
X return (TRUE);
X }
X
X/*------------------------------*/
X/* set_menu */
X/*------------------------------*/
X VOID
Xset_menu(tree, change) /* change[0] TRUE selects all entries*/
X LONG tree; /* FALSE deselects all. Change list */
X WORD *change; /* of items is then toggled. */
X {
X WORD dflt, screen, drop, obj;
X
X dflt = *change++; /* What is default? */
X screen = LWGET(OB_TAIL(ROOT)); /* Get SCREEN */
X drop = LWGET(OB_HEAD(screen)); /* Get DESK drop-down */
X /* and skip it */
X for (; (drop = LWGET(OB_NEXT(drop))) != screen; )
X {
X obj = LWGET(OB_HEAD(drop));
X if (obj != NIL)
X if (dflt)
X map_tree(tree, obj, drop, enab_obj);
X else
X map_tree(tree, obj, drop, disab_obj);
X }
X
X for (; *change; change++)
X if (dflt)
X disab_obj(tree, *change);
X else
X enab_obj(tree, *change);
X }
X.bp
X/*
X>>>>>>>>>>>>>>>>>>>>> Definitions used in this article <<<<<<<<<<<<<<<<<<<<<<
X*/
X
X#define ROOT 0
X
X#define G_IBOX 25
X#define G_STRING 28
X#define G_TITLE 32
X
X#define R_TREE 0
X
X#define MN_SELECTED 10
X
X#define CHECKED 0x4
X#define DISABLED 0x8
X
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 M_OFF 256
X#define M_ON 257
X.!
X.!****************************************************************************
X.!
X.! End Appendix 6
X.!
X.!****************************************************************************
SHAR_EOF
if test 5246 -ne "`wc -c 'apndx6.prf'`"
then
echo shar: error transmitting "'apndx6.prf'" '(should have been 5246 characters)'
fi
echo shar: extracting "'apndx7.prf'" '(3278 characters)'
if test -f 'apndx7.prf'
then
echo shar: over-writing existing file "'apndx7.prf'"
fi
sed 's/^X//' << \SHAR_EOF > 'apndx7.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 7
X.!
X.!***************************************************************************
X.!
X.!
X.AP VII Sample Code for Part IX
X/*
X>>>>>>>>>>>>>>>> Routines to set clip to a GRECT <<<<<<<<<<<<<<<<
X*/
X
X VOID
Xgrect_to_array(area, array) /* convert x,y,w,h to upr lt x,y and */
X GRECT *area; /* lwr rt x,y */
X WORD *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
X VOID
Xset_clip(clip_flag, s_area) /* set clip to specified area */
X WORD clip_flag;
X GRECT *s_area;
X {
X WORD pxy[4];
X
X grect_to_array(s_area, pxy);
X vs_clip(vdi_handle, clip_flag, pxy);
X }
X.bp
X/*
X>>>>>>>>>> Routines to set attributes before output <<<<<<<<<<<<
X*/
X VOID
Xrr_perim(mode, color, type, width, pxy) /* Draw a rounded */
X WORD mode, color, width, *pxy; /* rectangle outline */
X {
X vswr_mode(vdi_handle, mode);
X vsl_color(vdi_handle, color);
X vsl_type(vdi_handle, type);
X vsl_width(vdi_handle, width);
X v_rbox(vdi_handle, pxy);
X vswr_mode(vdi_handle, MD_REPLACE);
X }
X
X VOID
Xpl_perim(mode, type, color, width, npts, pxy) /* Draw a polygonal */
X /* figure */
X WORD mode, type, color, width, npts, *pxy;
X {
X vswr_mode(vdi_handle, mode);
X vsl_type(vdi_handle, type);
X vsl_color(vdi_handle, color);
X vsl_width(vdi_handle, width);
X v_pline(vdi_handle, npts, pxy);
X }
X
X VOID /* Draw a filled polygonal area */
Xpl_fill(mode, perim, color, interior, style, npts, pxy)
X WORD mode, perim, color, interior, style, npts, *pxy;
X {
X vswr_mode(vdi_handle, mode);
X vsf_color(vdi_handle, color);
X vsf_style(vdi_handle, style);
X vsf_interior(vdi_handle, interior);
X vsf_perimeter(vdi_handle, perim);
X v_fillarea(vdi_handle, npts, pxy);
X }
X
X VOID /* Draw a filled rectangle */
Xrect_fill(mode, perim, color, interior, style, pxy)
X WORD mode, perim, color, style, interior, *pxy;
X {
X vswr_mode(vdi_handle, mode);
X vsf_color(vdi_handle, color);
X vsf_style(vdi_handle, style);
X vsf_interior(vdi_handle, interior);
X vsf_perimeter(vdi_handle, perim);
X vr_recfl(vdi_handle, pxy);
X }
X.!
X.!****************************************************************************
X.!
X.! End Appendix 7
X.!
X.!****************************************************************************
SHAR_EOF
if test 3278 -ne "`wc -c 'apndx7.prf'`"
then
echo shar: error transmitting "'apndx7.prf'" '(should have been 3278 characters)'
fi
echo shar: extracting "'apndx8.prf'" '(2151 characters)'
if test -f 'apndx8.prf'
then
echo shar: over-writing existing file "'apndx8.prf'"
fi
sed 's/^X//' << \SHAR_EOF > 'apndx8.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 8
X.!
X.!***************************************************************************
X.!
X.!
X.AP VIII Sample Code for Part X
X/*
X>>>>>>>>>>> Demonstration of byte alignment of window interior <<<<<<<<<<<
X*/
X
X#define FEATURES 0x0fef /* what border features are used */
XWORD msg[8]; /* message from evnt_multi */
XGRECT work_area; /* defines working area */
XWORD w_hndl; /* handle for window being changed */
X
X wind_calc(1, FEATURES, msg[4], msg[5], msg[6], msg[7],
X &work_area.g_x, &work_area.g_y, &work_area.g_w,
X &work_area.g_h);
X work_area.g_x = align_x(work_area.g_x);
X work_area.g_w = align_x(work_area.g_w);
X wind_calc(0, FEATURES, work_area.g_x, work_area.g_y,
X work_area.g_w, work_area.g_h, &msg[4], &msg[5],
X &msg[6], &msg[7]);
X wind_set(w_hndl, WF_CXYWH, msg[4], msg[5], msg[6], msg[7]);
X.bp
X/*
X>>>>>>>>>>>>>>>>>>>>> Subroutine for above <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
X*/
X WORD
Xalign_x(x) /* forces word alignment for column position */
X WORD x; /* rounding to nearest word */
X {
X return((x & 0xfff0) + ((x & 0x0008) ? 0x0010 : 0));
X }
X.bp
X/*
X>>>>>>>>>>>>>>>>>>>>> Standard v_gtext binding <<<<<<<<<<<<<<<<<<<<<<<<<
X*/
X WORD
Xv_gtext( handle, x, y, string)
X WORD handle, x, y;
X BYTE *string;
X {
X WORD i;
X ptsin[0] = x;
X ptsin[1] = y;
X i = 0;
X while (intin[i++] = *string++) /* Copy characters to intin */
X ; /* There is NO error checking! */
X contrl[0] = 8;
X contrl[1] = 1;
X contrl[3] = --i;
X contrl[6] = handle;
X vdi();
X }
X.!
X.!****************************************************************************
X.!
X.! End Appendix 8
X.!
X.!****************************************************************************
SHAR_EOF
if test 2151 -ne "`wc -c 'apndx8.prf'`"
then
echo shar: error transmitting "'apndx8.prf'" '(should have been 2151 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