home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GRIPS 2: Government Rast…rocessing Software & Data
/
GRIPS_2.cdr
/
dos
/
ncsa_tel
/
contribu
/
byu_tel2.hqx
/
tek
/
rgmac.c
< prev
next >
Wrap
Text File
|
1989-11-10
|
8KB
|
512 lines
#ifdef lint
static char *SCCSid = "%W% (NCSA) %G%";
#endif
/*
rgmac.c by Gaige B. Paulsen
spawned from rgp.c by Aaron Contorer for NCSA
Copyright 1987, board of trustees, University of Illinois
Routines for Macintosh Window output.
*/
/*
* Include files
*/
#include <stdio.h>
#include <Controls.h>
#include <Events.h>
#include <OSutils.h>
#include <Packages.h>
#include <Quickdraw.h>
#include <Windows.h>
#ifdef MPW
#include "::main:mpw.h"
#endif MPW
#define TRUE 1
#define FALSE 0
#define MAXWIND 20
#define WINXMAX 4095
#define WINYMAX 3139
#define INXMAX 4096
#define INYMAX 4096
#define SPLASH_SQUARED 4
char *malloc();
/*
* display structure....
*/
struct RGMwindows {
GrafPtr
wind;
int
xorigin,
yorigin,
xscale,
yscale,
vg,
vs,
inuse,
ingin;
unsigned char
*name;
int
width,
height;
ControlHandle
zoom,
vert,
horiz;
} *RGMwind[ MAXWIND ]; /* BYU mod - changed from an array of structure to an array of pointers */
long RGMlastclick;
int RGMcolor[]=
{ 30, /* black */
33, /* white */
205, /* red */
341, /* green */
409, /* blue */
273, /* cyan */
137, /* magenta */
69 /* yellow */
};
char *macname = "Macintosh Windows";
RGMgin(w)
{
if (RGsetwind(w)) return(-1);
setgraphcurs();
RGMwind[w]->ingin=1;
}
RGMoutfunc(f)
int (*f)();
{}
RGMpencolor(w, color)
{
if (RGsetwind(w) ) return(-1);
ForeColor((long) RGMcolor[color] );
}
RGMclrscr(w)
{
if (RGsetwind(w) ) return(-1);
ForeColor((long) RGMcolor[0] );
EraseRect( &RGMwind[w]->wind->portRect);
}
RGMclose(w)
{
if (RGsetwind(w) ) return(-1);
DisposeWindow(RGMwind[w]->wind);
RGMwind[w]->inuse = FALSE;
}
RGMpoint(w,x,y)
{
if (RGsetwind(w) ) return(-1);
MoveTo(x,y);
LineTo(x,y);
}
RGMdrawline(w,x0,y0,x1,y1)
int w,x0,y0,x1,y1;
{
if (RGsetwind(w) ) return(-1);
x0 = (int) ((long) (x0 * RGMwind[w]->width) / INXMAX);
y0 = RGMwind[w]->height - (int) ((long) (y0 * RGMwind[w]->height) / INYMAX);
x1 = (int) ((long) (x1 * RGMwind[w]->width)/INXMAX);
y1 = RGMwind[w]->height - (int) ((long) (y1 * RGMwind[w]->height) / INYMAX);
MoveTo(x0,y0);
LineTo(x1,y1);
}
RGMpagedone(w)
{
}
RGMdataline(w,data,count)
{}
RGMcharmode(w,rotation,size)
{}
RGMshowcur()
{}
RGMlockcur()
{}
RGMhidecur()
{}
RGMbell(w)
{}
RGMuncover(w)
{}
char *RGMdevname() {
return(macname);
}
RGMalloc() /* BYU mod - allocate this structure to save global space */
{ /* BYU mod */
int i; /* BYU mod */
for(i=0; i<MAXWIND; i++) /* BYU mod */
RGMwind[i] = (struct RGMwindows *) malloc(sizeof(struct RGMwindows)); /* BYU mod */
} /* BYU mod */
RGMinit()
{
int i;
for(i=0; i<20; i++) RGMwind[i]->inuse=0;
}
RGMinfo(w,v,a,b,c,d)
int w,a,b,c,d,v;
{
RGMwind[w]->vg=v;
}
RGMgmode()
{}
RGMtmode()
{}
RGMnewwin()
{
int i=0;
while ( (i< MAXWIND) && (RGMwind[i]->inuse) ) i++;
if (i>= MAXWIND) return(-1);
RGMwind[i]->wind = GetNewWindow(256,(Ptr) 0L,(Ptr) -1L);
if (RGMwind[i]->wind==0L) {
return(-1);
}
RGMwind[i]->xorigin= 0;
RGMwind[i]->yorigin= 0;
RGMwind[i]->xscale = WINXMAX;
RGMwind[i]->yscale = WINYMAX;
RGMwind[i]->width = 400;
RGMwind[i]->height = 300;
RGMwind[i]->inuse = TRUE;
RGMwind[i]->ingin = 0;
ValidRect( &RGMwind[i]->wind->portRect);
return(i);
}
RGattach(vg,virt,name)
int vg,virt;
char *name;
{
int i,dnum;
long time;
char ts[50];
if ( (dnum=RGfindbyVG( vg) ) <0) return(-1);
RGMwind[dnum]->vs=virt;
RGMwind[dnum]->name=(char *)malloc(256);
if (RGMwind[dnum]->name==0L) return(-2);
RGMwind[dnum]->name[0]=165;
strncpy( &RGMwind[dnum]->name[1], name,255);
GetDateTime(&time);
IUTimeString(time,FALSE, ts); /* Put time in the temp string */
strncat( RGMwind[dnum]->name, " ",255); /* Space, please */
strncat( RGMwind[dnum]->name, ts,255); /* Place the time string at the end */
SetWTitle(RGMwind[dnum]->wind,RGMwind[dnum]->name);
return(0);
}
RGdetach(dnum)
int dnum;
{
int i;
if (dnum<0 || dnum>=MAXWIND) return(-1);
strncpy( RGMwind[dnum]->name, &RGMwind[dnum]->name[1], 255);
SetWTitle(RGMwind[dnum]->wind,RGMwind[dnum]->name);
RGMwind[dnum]->vs=-1;
}
RGsetwind(dnum)
int dnum;
{
if (dnum<0 || dnum>=MAXWIND) return(-1);
if (!RGMwind[dnum]->inuse) return(-1);
SetPort( RGMwind[dnum]->wind);
return(0);
}
RGupdate(wind)
GrafPtr wind;
{
int i=0,done;
if ( (i=RGfindbywind(wind)) <0)
return(-1);
SetPort(wind);
BeginUpdate(wind);
VGstopred( RGMwind[i]->vg);
VGpage( RGMwind[i]->vg);
done = VGpred( RGMwind[i]->vg, RGMwind[i]->vg);
EndUpdate(wind);
if (!done)
netputevent(1,128,RGMwind[i]->vg);
return(done);
}
RGsupdate(i)
{
int rg;
rg=RGfindbyVG( i);
if (rg<0) return(0);
SetPort( RGMwind[rg]->wind);
if (!VGpred( RGMwind[rg]->vg, RGMwind[rg]->vg) ) {
netputevent( 1, 128, i);
}
else return(1);
return(0);
}
RGgetVG(wind)
GrafPtr wind;
{
int i;
i=RGfindbywind(wind);
return( RGMwind[i]->vg);
}
RGgetdnum(wind)
GrafPtr wind;
{
return(RGfindbywind(wind) );
}
RGfindbyVG( vg)
int vg;
{
int i=0;
while ((i<MAXWIND) && ((!RGMwind[i]->inuse) || (RGMwind[i]->vg!=vg)))
i++;
if (i>=MAXWIND) return(-1);
return(i);
}
RGgetVS( dnum)
int dnum;
{
return( RGMwind[dnum]->vs);
}
RGfindbywind(wind)
GrafPtr wind;
{
int i=0;
while ((i<MAXWIND) && ((!RGMwind[i]->inuse) || (RGMwind[i]->wind!=wind)))
i++;
if (i>=MAXWIND) return(-1);
return(i);
}
inSplash( p1, p2)
Point *p1,*p2;
{
if (p1->h-p2->h>3 || p2->h-p1->h >3)
return(0);
if (p1->v-p2->v>3 || p2->v-p1->v >3)
return(0);
return(1);
}
RGmousedown( wind, wherein, pnum)
GrafPtr wind;
Point *wherein;
{
long lx,ly;
char thispaceforent[6];
int i;
Point where;
where = *wherein;
if ( (i=RGfindbywind(wind)) <0)
return(-1);
if (!RGMwind[i]->ingin) {
Point anchor, current,last;
#ifndef MPW
long TickCount();
#endif MPW
long GetDblTime(),tc;
int x0,y0,x1,y1;
Rect rect;
char dum[50];
SetPort(wind);
last = where;
current = where;
anchor = where;
PenPat(qd.gray);
PenMode( patXor);
SetRect( &rect, 0,0,0,0);
while (StillDown()) {
GetMouse( ¤t);
if ( inSplash( ¤t, &anchor) ) continue;
tc=TickCount();
while(TickCount()==tc);
VidSync();
FrameRect(&rect);
if (anchor.v < current.v) {
rect.top=anchor.v;
rect.bottom=current.v;
}
else {
rect.top=current.v;
rect.bottom=anchor.v;
}
if (anchor.h < current.h) {
rect.left=anchor.h;
rect.right=current.h;
}
else {
rect.right=anchor.h;
rect.left =current.h;
}
FrameRect(&rect);
last=current;
}
FrameRect(&rect);
PenPat(qd.black);
PenMode( patCopy);
if ( !inSplash( &anchor, ¤t)) {
x0 = (int) ((long) rect.left * RGMwind[i]->xscale / RGMwind[i]->width );
y0 = (int) RGMwind[i]->yscale -
((long) rect.top * RGMwind[i]->yscale / RGMwind[i]->height);
x1 = (int) ((long) rect.right * RGMwind[i]->xscale / RGMwind[i]->width);
y1 = (int) RGMwind[i]->yscale -
((long) rect.bottom * RGMwind[i]->yscale / RGMwind[i]->height);
VGzoom( i,
x0 +RGMwind[i]->xorigin,
y1 +RGMwind[i]->yorigin,
x1 +RGMwind[i]->xorigin,
y0 +RGMwind[i]->yorigin);
VGpage( RGMwind[i]->vg);
RGMwind[i]->xscale= x1-x0;
RGMwind[i]->yscale= y0-y1;
RGMwind[i]->xorigin= x0+ RGMwind[i]->xorigin;
RGMwind[i]->yorigin= y1+ RGMwind[i]->yorigin;
sprintf(dum,"VGzoom [%d,%d] -[%d,%d]", x0,y1,x1,y0);
putln(dum);
while( !VGpred( RGMwind[i]->vg, RGMwind[i]->vg) )
Stask();
RGMlastclick=0L;
}
else {
if (RGMlastclick && ((RGMlastclick +GetDblTime() ) > TickCount()) ) {
RGMwind[i]->xscale = WINXMAX;
RGMwind[i]->yscale = WINYMAX;
RGMwind[i]->xorigin= 0;
RGMwind[i]->yorigin= 0;
VGzoom(i,0,0,WINXMAX,WINYMAX);
VGpage( RGMwind[i]->vg);
while( !VGpred( RGMwind[i]->vg, RGMwind[i]->vg) )
Stask();
RGMlastclick=0L;
}
else RGMlastclick=TickCount();
}
return(0);
}
lx= (RGMwind[i]->xscale * where.h) / ((long)RGMwind[i]->width);
ly= RGMwind[i]->yscale - ((RGMwind[i]->yscale * where.v) / ((long)RGMwind[i]->height));
VGgindata( RGMwind[i]->vg, (int) lx, (int) ly, ' ', thispaceforent);
RSsendstring( RGMwind[i]->vs, thispaceforent, 5);
RGMwind[i]->ingin=0;
unsetgraphcurs();
RGMlastclick=TickCount();
}
long *Ticks= (long *)0x16a;
VidSync()
{
long a;
a= *Ticks;
while (a ==*Ticks);
}