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