Thread View: net.micro.atari16
1 messages
1 total messages
Started by Jwahar R. Bammi
Sat, 22 Mar 1986 04:30
ProGEM part 5 of 6
Author: Jwahar R. Bammi
Date: Sat, 22 Mar 1986 04:30
Date: Sat, 22 Mar 1986 04:30
600 lines
19643 bytes
19643 bytes
#!/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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads