home *** CD-ROM | disk | FTP | other *** search
- /*
- * the GEM library
- * contains both AES and VDI stuff, though not all of it
- */
-
- #include "gem.h"
-
- extern short ct0, ct1, ct2, ct3, ct4, ct5, ct6, ct7;
- extern short ii0, ii1, ii2, ii3, ii4, ii5, ii6, ii7, ii8, ii9,
- ii10, ii11, ii12, ii13, ii14, ii15;
- extern short io0, io1, io2, io3, io4, io5, io6, iox[40];
- extern short pi0, pi1, pi2, pi3, pi4, pi5, pi6, pi7, pix[6];
- extern short po0, po1, po2, po3, pox[12];
- extern short *ai0, *ai1;
- extern short *ao0;
- extern short *vdi0, *vdi1, *vdi2, *vdi3, *vdi4, *vdi5;
- extern short *aes0, *aes1, *aes2, *aes3, *aes4, *aes5;
- extern short global[16];
-
- /*
- * the c runtime start up routine for GEM processes
- * no argv argc stuff, no stdio (use TOS routines for file access)
- *
- * assumes a startup prg.s of
- * . _bstk 2048
- * . _estk 4
- * taa 7 6
- * lll 4 0
- * sgl _estk
- * lag _estk 7
- * jsr _cprg
- * plus definitions for all the above externs
- */
-
- #define SETBLK 0x4A
- #define TERM 0x4C
-
- _cprg(tpa) long tpa; {
- int i;
- long x, *lp;
-
- /* compute size of program, give memory back to TOS */
- lp = tpa;
- x = lp[3] + lp[5] + lp[7] + 0x100;
- if (trap(1, SETBLK, 0, tpa, x))
- appl_exit(-1);
-
- /* set up the aespb and vdipb arrays */
- aes0 = &ct0;
- aes1 = global;
- aes2 = &ii0;
- aes3 = &io0;
- aes4 = &ai0;
- aes5 = &ao0;
- vdi0 = &ct0;
- vdi1 = &ii0;
- vdi2 = &pi0;
- vdi3 = &io0;
- vdi4 = &po0;
-
- /* run the program */
- i = main();
-
- /* close up shop */
- appl_exit(i);
- }
-
- #define vdc(op,pi,ii,xx,yy) ct0=op;ct1=pi;ct2=ct4=0;ct3=ii;ct5=xx;ct6=yy;vdi()
-
-
- /* open virtual workstation */
-
- v_opnvwk(in, h, out)
- struct vdi_openin *in;
- short *h;
- struct vdi_openout *out; {
- vdi0 = &ct0;
- vdi1 = in;
- vdi2 = &pi0;
- vdi3 = out;
- vdi4 = &(out->devicetyp);
- vdc(100, 0, 11, 0, 1);
- *h = ct6;
- vdi0 = &ct0;
- vdi1 = &ii0;
- vdi2 = &pi0;
- vdi3 = &io0;
- vdi4 = &po0;
- }
-
- /* close virtual workstation */
-
- v_clsvwk(h) short h; {
- vdc(101, 0, 0, 0, h);
- }
-
- v_clrwk(h) short h; {
- vdc(3, 0, 0, 0, h);
- }
-
- /* cursor control */
-
- v_enter_cur(h) short h; { /* enter cursor mode - shows cursor */
- vdc(5, 0, 0, 3, h);
- }
-
- v_exit_cur(h) short h; { /* exit cursor mode - removes cursor */
- vdc(5, 0, 0, 2, h);
- }
-
- v_rvon(h) { /* reverse video on - cursor text */
- vdc(5, 0, 0, 13, h);
- }
-
- v_rvoff(h) { /* reverse video off - cursor text */
- vdc(5, 0, 0, 14, h);
- }
-
- v_curhome(h) { /* home cursor */
- vdc(5, 0, 0, 8, h);
- }
-
- vs_curaddress(h, r, c) { /* put cursor on row r (0-24) and col. c (0-79) */
- ii0 = c;
- ii1 = r;
- vdc(5, 0, 2, 11, h);
- }
-
- /* screen operations */
-
- v_eeos(h) { /* erase from cursor to end of screen */
- vdc(5, 0, 0, 9, h);
- }
-
- /* polymarkers */
-
- v_pmarker(h, count, xy) short xy[]; { /* plot markers at xy coords. passed */
- vdi2 = xy;
- vdc(7, count, 0, 0, h);
- vdi2 = &pi0;
- }
-
- vsm_color(h, color) { /* sets the color that marker is plotted with */
- return vdi_attr(h, 20, color); /* color: 0 - numcolors */
- }
-
- vsm_height(h, height) { /* set the height of plotted markers (not of type 1) */
- pi0 = 0;
- pi1 = height; /* height: in pels, 1 - maxy */
- vdc(19, 1, 0, 0, h);
- return po1;
- }
-
- vsm_type(h, type) { /* set marker type - returns type selected */
- return vdi_attr(h, 18, type); /* type: 1 - nummarktyp */
- }
-
- vqm_attributes(h, at) struct vdi_mattr *at; { /* query marker attributes */
- vdi3 = at;
- vdi4 = &(at->markwid);
- vdc(36, 0, 0, 0, h);
- vdi3 = &io0;
- vdi4 = &po0;
- }
-
- /* polylines */
-
- v_pline(h, count, xy) short xy[]; { /* draw multi-segment line */
- vdi2 = xy;
- vdc(6, count, 0, 0, h); /* count >= 2 */
- vdi2 = &pi0;
- }
-
- vsl_color(h, color) { /* set line color - returns color selected */
- return vdi_attr(h, 17, color);
- }
-
- vsl_ends(h, begin, end) { /* set line end styles */
- ii0 = begin;
- ii1 = end;
- vdc(108, 0, 2, 0, h);
- }
-
- vsl_type(h, type) { /* set line type - returns type selected */
- return vdi_attr(h, 15, type);
- }
-
- vsl_udsty(h, pat) { /* set user defined line type pattern */
- vdi_attr(h, 113, pat); /* e.g. dash line type is: 0xFF00 */
- }
-
- vsl_width(h, w) { /* set line width - returns actual width */
- pi0 = w;
- vdc(16, 1, 0, 0, h);
- return po0;
- }
-
- vql_attributes(h, at) struct vdi_lattr *at; { /* query line attributes */
- vdi3 = at;
- vdi4 = &(at->linewid);
- vdc(35, 0, 0, 0, h);
- vdi3 = &io0;
- vdi4 = &po0;
- }
-
- /* text */
-
- vst_alignment(h, hin, vin, hout, vout)
- short *hout, *vout; { /* set text alignment */
- ii0 = hin;
- ii1 = vin;
- vdc(39, 0, 2, 0, h);
- *hout = io0;
- *vout = io1;
- }
-
- vst_color(h, color) { /* set text color - color selected returned */
- return vdi_attr(h, 22, color);
- }
-
- vst_effects(h, effects) { /* set text effects - effects selected returned */
- return vdi_attr(h, 106, effects);
- }
-
- vst_height(h, height) { /* set text height - absolute mode */
- pi0 = 0;
- pi1 = height; /* height: distance from baseline to top of char. cell */
- vdc(12, 1, 0, 0, h);
- }
-
- vst_point(h, height) { /* set text height - points mode, height returned */
- /* distance between baselines of two consecutive lines */
- return vdi_attr(h, 107, height);
- }
-
- vst_rotation(h, angle) { /* set baseline vector - angle selected returned */
- return vdi_attr(h, 13, angle); /* angle expressed in .1s of a degree */
- }
-
- vst_font(h, font) { /* set font - returns font selected */
- return vdi_attr(h, 21, font);
- }
-
- vswr_mode(h, mode) { /* set writing mode - mode selected returned */
- return vdi_attr(h, 32, mode);
- }
-
- v_curtext(h, s) char *s; {
- _vdi_tcpy(5, 0, 12, h, s);
- }
-
- v_gtext(h, x, y, s) char *s; {
- pi0 = x;
- pi1 = y;
- _vdi_tcpy(8, 2, 0, h, s);
- }
-
- _vdi_tcpy(op, pin, p5, h, s) char *s; {
- short *ip, tbuf[140];
- int i;
-
- vdi1 = tbuf;
- for (ip = tbuf, i = 0; (i < 140) && (*s != '\0'); ++i) {
- *ip++ = *s++;
- }
- vdc(op, pin, i, p5, h);
- vdi1 = &ii0;
- }
-
- vqt_attributes(h, at) struct vdi_tattr *at; { /* query text attributes */
- vdi3 = at;
- vdi4 = &(at->charwid);
- vdc(38, 0, 0, 0, h);
- vdi3 = &io0;
- vdi4 = &po0;
- }
-
- /* graphic primitives */
-
- v_arc(h, x, y, r, sa, ea) { /* draw arc - portion of a circle */
- ii0 = sa; /* start angle - .1s of degree */
- ii1 = ea; /* end angle */
- pi0 = x; /* center - x coord. */
- pi1 = y; /* center - y coord. */
- pi6 = r; /* radius */
- vdc(11, 4, 2, 2, h);
- }
-
- v_bar(h, xy) int *xy; { /* draw a bar (box) */
- pi0 = *xy;
- pi1 = *++xy;
- pi2 = *++xy;
- pi3 = *++xy;
- vdc(11, 2, 0, 1, h);
- }
-
- v_circle(h, x, y, r) { /* draw a circle */
- pi0 = x;
- pi1 = y;
- pi4 = r;
- vdc(11, 3, 0, 4, h);
- }
-
- v_contourfill(h, x, y, color) { /* fill area enclosing x,y */
- pi0 = x;
- pi1 = y;
- ii0 = color; /* color < 0: boundry of any color other than xy's */
- vdc(103, 1, 1, 0, h);
- }
-
- v_ellarc(h, x, y, xr, yr, sa, ea) { /* draw an elliptical arc */
- ii0 = sa; /* start angle */
- ii1 = ea; /* end angle */
- pi0 = x; /* center point x */
- pi1 = y; /* center point y */
- pi2 = xr; /* x radius */
- pi3 = yr; /* y radius */
- vdc(11, 2, 2, 6, h);
- }
-
- v_ellpie(h, x, y, xr, yr, sa, ea) { /* draw an elliptical pie slice */
- ii0 = sa;
- ii1 = ea;
- pi0 = x;
- pi1 = y;
- pi2 = xr;
- pi3 = yr;
- vdc(11, 2, 2, 7, h);
- }
-
- v_ellipse(h, x, y, xr, yr) { /* draw an ellipse */
- pi0 = x;
- pi1 = y;
- pi2 = xr;
- pi3 = yr;
- vdc(11, 2, 0, 5, h);
- }
-
- v_rbox(h, xy) short *xy; { /* draw a rounded box */
- pi0 = *xy; /* xy coordinates of lower left and upper right corners */
- pi1 = *++xy;
- pi2 = *++xy;
- pi3 = *++xy;
- vdc(11, 2, 0, 8, h);
- }
-
- v_rfbox(h, xy) short *xy; { /* draw a rounded filled box */
- pi0 = *xy; /* xy coordinates of lower left and upper right corners */
- pi1 = *++xy;
- pi2 = *++xy;
- pi3 = *++xy;
- vdc(11, 2, 0, 9, h);
- }
-
- v_recfl(h, xy) short *xy; { /* draw a filled rectangle */
- pi0 = *xy; /* xy coordinates of diagonally opposite corners */
- pi1 = *++xy;
- pi2 = *++xy;
- pi3 = *++xy;
- vdc(114, 2, 0, 0, h);
- }
-
- /* area fill and attributes */
-
- v_fillarea(h, count, xy) short xy[]; {
- vdi2 = xy; /* fill area defined by a multi-segment line */
- vdc(9, count, 0, 0, h); /* count >= 2 */
- vdi2 = &pi0;
- }
-
- vsf_color(h, color) { /* set fill color */
- return vdi_attr(h, 25, color);
- }
-
- vsf_perimeter(h, v_flag) { /* set fill perimeter visibility */
- return vdi_attr(h, 104, v_flag); /* 0 = invisible, 1 = visible */
- }
-
- vsf_interior(h, style) { /* set fill interior style */
- return vdi_attr(h, 23, style);
- }
-
- vsf_style(h, style) { /* set fill style */
- /* interior pattern: 0-23, interior hatch: 0-11 */
- return vdi_attr(h, 24, style);
- }
-
- vqf_attributes (h, at) struct vdi_fattr *at; {
- /* inquire current fill area attributes */
- vdi4 = at;
- vdc(37, 0, 0, 0, h);
- vdi4 = &po0;
- }
-
- /* pixel operation */
-
- v_get_pixel(h, x, y, pel, color) short *pel, *color; { /* get pixel value */
- pi0 = x;
- pi1 = y;
- vdc(105, 1, 0, 0, h);
- *pel = io0;
- *color = io1;
- }
-
- vro_cpyfm(h, mode, xy, src, des) short xy[]; struct mfdb *src, *des; {
- struct mfdb **p;
-
- p = (struct mfdb **) &ct7;
- *p = src;
- *++p = des;
- ii0 = mode;
- vdi2 = xy;
- vdc(109, 4, 1, 0, h);
- vdi2 = &pi0;
- }
-
- vq_color(h, index, set_flag, rgb) short rgb[]; {
- /* inquire color representation */
- ii0 = index; /* color to enquire about */
- ii1 = set_flag; /* 0 = values set; 1 = values realized */
- vdc(26, 0, 2, 0, h);
- rgb[0] = io1; /* red intensity - .1% */
- rgb[1] = io2; /* green intensity */
- rgb[2] = io3; /* blue intensity */
- }
-
- vs_color(h, index, rgb) short rgb[]; { /* set color representation */
- ii0 = index;
- ii1 = rgb[0]; /* red */
- ii2 = rgb[1]; /* green */
- ii3 = rgb[2]; /* blue */
- vdc(14, 0, 4, 0, h);
- }
-
- /* mouse functions */
-
- v_show_c(h, mstyle) { /* show mouse */
- ii0 = mstyle;
- vdc(122, 0, 1, 0, h);
- }
-
- v_hide_c(h) { /* hide mouse */
- vdc(123, 0, 0, 0, h);
- }
-
- vsc_form(h, form) struct vdi_form *form; { /* define mouse shape */
- vdi1 = form;
- vdc(111, 0, 37, 0, h);
- vdi1 = &ii0;
- }
-
- vq_mouse(h, pstatus, px, py) short *pstatus, *px, *py; {
- /* get mouse's status */
- vdc(124, 0, 0, 0, h);
- *pstatus = io0;
- *px = po0;
- *py = po1;
- }
-
- vdi_attr(h, op, attr) { /* implements many common routines */
- ii0 = attr;
- vdc(op, 0, 1, 0, h);
- return io0;
- }
-
- /* GEM application init and exit */
-
- appl_init() {
- ct0 = 10;
- ct2 = 1;
- ct1 = ct3 = ct4 = 0;
- aes();
- return io0;
- }
-
- appl_exit(i) { trap(1, TERM, i); }
-
- /* VDI routines for the GEM library */
-
- vq_extnd(handle, owflag, out) int *out; {
- int i, j, *intout, *ptsout;
- ct0 = 102;
- ct1 = 0;
- ct3 = 1;
- ct6 = handle;
- ii0 = owflag;
- vdi();
- intout = &io0;
- for (i = 0; i < 45; i++) out[i] = intout[i];
- ptsout = &po0;
- for (j = 0; j < 12; j++) out[i++] = ptsout[j];
- }
-
- /*
- * GEM:VDI set clipping rectangle
- * flag = 0 no clipping
- * flag = 1 clipping on
- * pxy[] should contain the upper left and bottom right coords
- */
-
- vs_clip(handle, flag, pxy) int *pxy; {
- ct0 = 129;
- ct1 = 2;
- ct3 = 1;
- ct6 = handle;
- ii0 = flag;
- vdi2 = pxy;
- vdi();
- vdi2 = &pi0;
- }
-
- /* GEM:VDI put justified text on the screen */
-
- v_justified(handle, x, y, string, len, wspace, cspace) char *string; {
- int *ip;
- ct0 = 11;
- ct1 = 2;
- ct6 = handle;
- ii0 = wspace;
- ii1 = cspace;
- ip = &ii2;
- for (ct3 = 2; *ip++ = *string++; ct3++)
- ;
- pi0 = x;
- pi1 = y;
- pi2 = len;
- vdi();
- }
-
- /* AES: resource handling */
-
- rsrc_gaddr(type, index, addr) long **addr; {
- ct0 = 112;
- ct1 = 2;
- ct2 = ct4 = 1;
- ct3 = 0;
- ii0 = type;
- ii1 = index;
- aes();
- *addr = ao0;
- return io0;
- }
-
- rsrc_saddr(type, index, addr) long *addr; {
- ct0 = 113;
- ct1 = 2;
- ct2 = ct3 = 1;
- ct4 = 0;
- ii0 = type;
- ii1 = index;
- ai0 = addr;
- aes();
- return io0;
- }
-
- /* graphics handling */
-
- graf_handle(wchar, hchar, wbox, hbox) int *wchar, *hchar, *wbox, *hbox; {
- ct0 = 77;
- ct2 = 5;
- ct1 = ct3 = ct4 = 0;
- aes();
- *wchar = io1;
- *hchar = io2;
- *wbox = io3;
- *hbox = io4;
- return io0;
- }
-
- graf_rubberbox(x, y, minw, minh, lastw, lasth) int *lastw, *lasth; {
- ct0 = 70;
- ct1 = 4;
- ct2 = 3;
- ct3 = ct4 = 0;
- ii0 = x;
- ii1 = y;
- ii2 = minw;
- ii3 = minh;
- aes();
- *lastw = io1;
- *lasth = io2;
- return io0;
- }
-
- graf_dragbox(dw, dh, sx, sy, bx, by, bw, bh, endx, endy) int *endx, *endy; {
- ct0 = 71;
- ct1 = 8;
- ct2 = 3;
- ct3 = ct4 = 0;
- ii0 = dw;
- ii1 = dh;
- ii2 = sx;
- ii3 = sy;
- ii4 = bx;
- ii5 = by;
- ii6 = bw;
- ii7 = bh;
- aes();
- *endx = io1;
- *endy = io2;
- return io0;
- }
-
- graf_movebox(w, h, sx, sy, dx, dy) {
- ct0 = 72;
- ct1 = 6;
- ct2 = 1;
- ct3 = ct4 = 0;
- ii0 = w;
- ii1 = h;
- ii2 = sx;
- ii3 = sy;
- ii4 = dx;
- ii5 = dy;
- aes();
- return io0;
- }
-
- graf_growbox(bx, by, bw, bh, ex, ey, ew, eh) {
- ct0 = 73;
- ct1 = 8;
- ct2 = 1;
- ct3 = ct4 = 0;
- aes2 = &bx;
- aes();
- aes2 = &ii0;
- return io0;
- }
-
- graf_shrinkbox(ex, ey, ew, eh, bx, by, bw, bh) {
- ct0 = 73;
- ct1 = 8;
- ct2 = 1;
- ct3 = ct4 = 0;
- aes2 = &ex;
- aes();
- aes2 = &ii0;
- return io0;
- }
-
- graf_watchbox(tree, obj, instate, outstate) int *tree; {
- ct0 = 75;
- ct1 = 4;
- ct2 = ct3 = 1;
- ct4 = 0;
- ii1 = obj;
- ii2 = instate;
- ii3 = outstate;
- ai0 = tree;
- aes();
- return io0;
- }
-
- graf_slidebox(tree, parent, obj, vh) int *tree; {
- ct0 = 76;
- ct1 = 3;
- ct2 = ct3 = 1;
- ct4 = 0;
- ii0 = parent;
- ii1 = obj;
- ii2 = vh;
- ai0 = tree;
- aes();
- return io0;
- }
-
- graf_mouse(type, shape) int *shape; {
- ct0 = 78;
- ct1 = ct2 = ct3 = 1;
- ct4 = 0;
- ii0 = type;
- ai0 = shape;
- aes();
- return io0;
- }
-
- graf_mkstate(x, y, mstate, kstate) int *x, *y, *mstate, *kstate; {
- ct0 = 79;
- ct1 = ct3 = ct4 = 0;
- ct2 = 5;
- aes();
- *x = io1;
- *y = io2;
- *mstate = io3;
- *kstate = io4;
- return io0;
- }
-
- /* window handling */
-
- wind_get(handle, gfld, gw1, gw2, gw3, gw4) int *gw1, *gw2, *gw3, *gw4; {
- ct0 = 104;
- ct1 = 2;
- ct2 = 5;
- ct3 = ct4 = 0;
- ii0 = handle;
- ii1 = gfld;
- aes();
- *gw1 = io1;
- *gw2 = io2;
- *gw3 = io3;
- *gw4 = io4;
- return io0;
- }
-
- wind_create(kind, x, y, w, h) {
- ct0 = 100;
- ct1 = 5;
- ct2 = 1;
- ct3 = ct4 = 0;
- ii0 = kind;
- ii1 = x;
- ii2 = y;
- ii3 = w;
- ii4 = h;
- aes();
- return io0;
- }
-
- wind_set(handle, field, s1, s2, s3, s4) {
- ct0 = 105;
- ct1 = 6;
- ct2 = 1;
- ct3 = ct4 = 0;
- ii0 = handle;
- ii1 = field;
- ii2 = s1;
- ii3 = s2;
- ii4 = s3;
- ii5 = s4;
- aes();
- return io0;
- }
-
- wind_open(handle, x, y, w, h) {
- ct0 = 101;
- ct1 = ct2 = 5;
- ct3 = ct4 = 0;
- ii0 = handle;
- ii1 = x;
- ii2 = y;
- ii3 = w;
- ii4 = h;
- aes();
- return io0;
- }
-
- wind_close(handle) {
- ct0 = 102;
- ct1 = ct2 = 1;
- ct3 = ct4 = 0;
- ii0 = handle;
- aes();
- return io0;
- }
-
- wind_delete(handle) {
- ct0 = 103;
- ct1 = ct2 = 1;
- ct3 = ct4 = 0;
- ii0 = handle;
- aes();
- return io0;
- }
-
- wind_find(x, y) {
- ct0 = 106;
- ct1 = 2;
- ct2 = 1;
- ct3 = ct4 = 0;
- ii0 = x;
- ii1 = y;
- aes();
- return io0;
- }
-
- wind_update(n) {
- ct0 = 107;
- ct1 = ct2 = 1;
- ct3 = ct4 = 0;
- ii0 = n;
- aes();
- return io0;
- }
-
- wind_calc(
- type, kind, xi, yi, wi, hi,
- xo, yo, wo, ho) int *xo, *yo, *wo, *ho; {
- ct0 = 108;
- ct1 = 6;
- ct2 = 5;
- ct3 = ct4 = 0;
- ii0 = type;
- ii1 = kind;
- ii2 = xi;
- ii3 = yi;
- ii4 = wi;
- ii5 = hi;
- aes();
- *xo = io1;
- *yo = io2;
- *wo = io3;
- *ho = io4;
- return io0;
- }
-
- /* event handling */
-
- event_multi(
- flags, clicks, mask, state,
- af, ax, ay, aw, ah,
- bf, bx, by, bw, bh,
- buff, lo, hi,
- ox, oy, obut, ostate, okret, obret)
- int *ox, *oy, *obut, *ostate, *okret, *obret;
- {
- ct0 = 25;
- ct1 = 16;
- ct2 = 7;
- ct3 = 1;
- ct4 = 0;
- ii0 = flags;
- ii1 = clicks;
- ii2 = mask;
- ii3 = state;
- ii4 = af;
- ii5 = ax;
- ii6 = ay;
- ii7 = aw;
- ii8 = ah;
- ii9 = bf;
- ii10 = bx;
- ii11 = by;
- ii12 = bw;
- ii13 = bh;
- ii14 = lo;
- ii15 = hi;
- ai0 = buff;
- aes();
- *ox = io1;
- *oy = io2;
- *obut = io3;
- *ostate = io4;
- *okret = io5;
- *obret = io6;
- return io0;
- }
-
- /* object handling */
-
- objc_draw(tree, start, depth, xclip, yclip, wclip, hclip) int *tree; {
- ct0 = 42;
- ct1 = 6;
- ct2 = ct3 = 1;
- ct4 = 0;
- ii0 = start;
- ii1 = depth;
- ii2 = xclip;
- ii3 = yclip;
- ii4 = wclip;
- ii5 = hclip;
- ai0 = tree;
- aes();
- return io0;
- }
-
- objc_find(tree, start, depth, x, y) int *tree; {
- ct0 = 43;
- ct1 = 4;
- ct2 = ct3 = 1;
- ct4 = 0;
- ii0 = start;
- ii1 = depth;
- ii2 = x;
- ii3 = y;
- ai0 = tree;
- aes();
- return io0;
- }
-
- objc_offset(tree, object, xoff, yoff) int *tree, *xoff, *yoff; {
- ct0 = 43;
- ct1 = 1;
- ct2 = 3;
- ct3 = 1;
- ct4 = 0;
- ii0 = object;
- ai0 = tree;
- aes();
- *xoff = io1;
- *yoff = io2;
- return io0;
- }
-
- objc_edit(tree, object, ch, idx, kind, newidx) int *tree, *newidx; {
- ct0 = 46;
- ct1 = 4;
- ct2 = 2;
- ct3 = 1;
- ct4 = 0;
- ii0 = object;
- ii1 = ch;
- ii2 = idx;
- ii3 = kind;
- ai0 = tree;
- aes();
- *newidx = io1;
- return io0;
- }
-
- objc_change(tree, object, resvd, x, y, w, h, state, redraw) int *tree; {
- ct0 = 47;
- ct1 = 8;
- ct2 = ct3 = 1;
- ct4 = 0;
- ii0 = object;
- ii1 = resvd;
- ii2 = x;
- ii3 = y;
- ii4 = w;
- ii5 = h;
- ii6 = state;
- ii7 = redraw;
- ai0 = tree;
- aes();
- return io0;
- }
-
- /* menu handling */
-
- menu_bar(tree, show) int *tree; {
- ct0 = 30;
- ct1 = ct2 = ct3 = 1;
- ct4 = 0;
- ii0 = show;
- ai0= tree;
- aes();
- return io0;
- }
-
- menu_icheck(tree, item, check) int *tree; {
- ct0 = 31;
- ct1 = 2;
- ct2 = ct3 = 1;
- ct4 = 0;
- ii0 = item;
- ii1 = check;
- ai0 = tree;
- aes();
- return io0;
- }
-
- menu_enable(tree, item, enable) int *tree; {
- ct0 = 32;
- ct1 = 2;
- ct2 = ct3 = 1;
- ct4 = 0;
- ii0 = item;
- ii1 = enable;
- ai0 = tree;
- aes();
- return io0;
- }
-
- menu_tnormal(tree, title, normal) int *tree; {
- ct0 = 33;
- ct1 = 2;
- ct2 = ct3 = 1;
- ct4 = 0;
- ii0 = title;
- ii1 = normal;
- ai0 = tree;
- aes();
- return io0;
- }
-
- menu_text(tree, item, text) int *tree; char *text; {
- ct0 = 34;
- ct1 = ct2 = 1;
- ct3 = 2;
- ct4 = 0;
- ii0 = item;
- ai0 = tree;
- ai1 = text;
- aes();
- return io0;
- }
-
- menu_register(id, string) char *string; {
- ct0 = 35;
- ct1 = ct2 = ct3 = 1;
- ct4 = 0;
- ii0 = id;
- ai0 = string;
- aes();
- return io0;
- }
-
- /* form handling */
-
- form_pf(fmt, args) char *fmt; int args; {
- extern char _pfb[1];
- _dopf(_pfb, fmt, &args);
- form_alert(0, _pfb);
- }
-
- form_do(tree, start) int *tree; {
- ct0 = 50;
- ct1 = ct3 = 1;
- ct2 = 2;
- ct4 = 0;
- ii0 = start;
- ai0 = tree;
- aes();
- return io0;
- }
-
- form_dial(flag, sx, sy, sw, sh, bx, by, bw, bh) {
- ct0 = 51;
- ct1 = 9;
- ct3 = ct2 = 1;
- ct4 = 0;
- ii0 = flag;
- ii1 = sx;
- ii2 = sy;
- ii3 = sw;
- ii4 = sh;
- ii5 = bx;
- ii6 = by;
- ii7 = bw;
- ii8 = bh;
- aes();
- return io0;
- }
-
- form_center(tree, x, y, w, h) int *tree, *x, *y, *w, *h; {
- ct0 = 54;
- ct1 = 0;
- ct3 = 5;
- ct2 = 1;
- ct4 = 0;
- ai0 = tree;
- aes();
- *x = io1;
- *y = io2;
- *w = io3;
- *h = io4;
- return io0;
- }
-
- form_error(num) {
- ct0 = 53;
- ct1 = ct2 = 1;
- ct3 = ct4 = 0;
- ii0 = num;
- aes();
- return io0;
- }
-
- form_alert(button, string) char *string; {
- ct0 = 52;
- ct1 = ct2 = ct3 = 1;
- ct4 = 0;
- ii0 = button;
- ai0 = string;
- aes();
- return io0;
- }
-
-
- /* AES and VDI support routines */
-
- aes() {
- /*
- * load address of aes parameter block into a0
- * transfer a0 to d1
- * load 200 into d0
- * trap #2
- */
- asm( lag aes0 0 tad 0 1 ldw 200 0 trp 2 );
- }
-
- vdi() {
- /*
- * load address of vdi parameter block into a0
- * transfer a0 to d1
- * load 115 into d0
- * trap #2
- */
- asm( lag vdi0 0 tad 0 1 ldw 115 0 trp 2 );
- }
-