source: buchla-68k/orig/LATTICE/EGAES.C@ 7bf3856

Last change on this file since 7bf3856 was 3ae31e9, checked in by Thomas Lopatic <thomas@…>, 8 years ago

Imported original source code.

  • Property mode set to 100755
File size: 2.5 KB
Line 
1/*
2 =============================================================================
3 egaes.c -- An example GEM application program in C
4 Version 2 -- 1989-01-24 -- Metacomco / Lattice
5 =============================================================================
6*/
7
8#include "portab.h"
9
10/* a very useful macro */
11
12#define ADDR(a) ((long)a)>>16,((long)a)&0xffff
13
14char wind_name[] = "Example";
15
16main()
17{
18 WORD work_in[12], work_out[57];
19 WORD handle, i, j, k, l,xstart,ystart,xwidth,ywidth,xcen,ycen;
20 WORD gr_1,gr_2,gr_3,gr_4;
21 WORD wi_1,wi_2,wi_3,wi_4;
22 WORD w_handle;
23 WORD clip[4];
24 WORD mgbuf[8];
25 WORD wind_type;
26 WORD dflag,xt;
27
28/* Set the system up to do GEM calls*/
29
30 appl_init();
31
32/* Get the handle of the desktop */
33
34 handle=graf_handle(&gr_1,&gr_2,&gr_3,&gr_4);
35
36/* Open the workstation. */
37
38 for(i=0; i<10; i++)
39 work_in[i] = 1;
40 work_in[10] = 2;
41
42 v_opnvwk(work_in, &handle, work_out);
43
44 graf_mouse(0,1);
45 wind_type=0x002b;
46
47/*
48
49*/
50
51/* request size of desktop window */
52
53 wind_get(0,4,&wi_1,&wi_2,&wi_3,&wi_4);
54
55/* calculate size of work area */
56
57 wind_calc(1,wind_type,wi_1,wi_2,wi_3,wi_4,&i,&j,&k,&l);
58
59/* make window of the max size */
60
61 w_handle=wind_create(wind_type,wi_1,wi_2,wi_3,wi_4);
62 wind_set(w_handle,2,ADDR( wind_name ),0,0);
63 wind_open(w_handle,wi_1,wi_2,wi_3,wi_4);
64 xstart=i;
65 ystart=j;
66 xwidth=k;
67 ywidth=l;
68
69 do {
70
71 if (mgbuf[0]!=20) { /* ignore redraw */
72
73 v_hide_c(handle);
74 clip[0]=xstart; clip[1]=ystart;
75 clip[2]=xstart+xwidth-1; clip[3]=ystart+ywidth-1;
76 vs_clip(handle,1,clip);
77 xcen=xstart+xwidth/2;
78 ycen=ystart+ywidth/2;
79 vsf_interior(handle,2);
80 vsf_style(handle,8);
81 vsf_color(handle,0);
82 v_bar(handle,clip);
83 vsf_interior(handle,4);
84 vsf_color(handle,1);
85 v_ellipse(handle,xcen,ycen,xwidth/2,ywidth/2);
86 v_show_c(handle);
87 }
88
89 evnt_mesag(&mgbuf);
90/*
91
92*/
93 if( mgbuf[0]==28 || mgbuf[0]==27 ) {
94
95 wind_calc(1,wind_type,mgbuf[4],mgbuf[5],
96 mgbuf[6],mgbuf[7],&xstart,&ystart,
97 &xwidth,&ywidth);
98
99 if ((xt=xwidth)<gr_3) {
100
101 xwidth=gr_3;
102 mgbuf[6]+=gr_3-xt;
103 }
104
105 if((xt=ywidth)<gr_4) {
106
107 ywidth=gr_4;
108 mgbuf[7]+=gr_4-xt;
109 }
110
111 dflag=0;
112
113 wind_set(w_handle,5,
114 mgbuf[4],mgbuf[5],
115 mgbuf[6],mgbuf[7]);
116 }
117
118 } while(mgbuf[0]!=22);
119
120/* Close the workstation. */
121
122 wind_close(w_handle);
123 wind_delete(w_handle);
124 v_clsvwk(handle);
125
126/* Release GEM application */
127
128 appl_exit();
129
130/* and quit */
131
132 _exit(0);
133}
134
Note: See TracBrowser for help on using the repository browser.