/* include file to provide grafics
   AMIGA SPECIAL VERSION TO SUPPLY RASTPORTS ! */
/* functions supported:
   tekopen();
   vectoa(x,y) int x,y;
   posita(x,y) int x,y;
   dperas();
   gfxfont(number,size) int number,size;
   gfxtext(s,a) char s[]; float a;
   textlen(s) char s[];
   getxy(x,y) int *x,*y;
   gfxflush();
   textparam(sx,sy,tx,ty,w,namw) int sx,sy,tx,ty,w; char *name;
   rmtek();
   setcolour(n) int n;
*/

#define TMPGCURSOR   "t:gcursor"
#define ASHBDRY      "t:ashbdry" 

#define _TEKXMAX 1024
#define _TEKYMAX 780

#ifndef _SPECHDR
#include <spec.h>
#include <auxcfg.h>
#include <libraries/dos.h>
#endif

int  _tek4014,
     _tek4014_flg = 0,
     _gfxbufp = 0,
     _gfxfontnr=1,
     _gfxfontsz=1;

int   (*positax)(),
      (*vectoax)(),
      (*gfxtextx)(),
      (*dperasx)(),
      (*getxyx)(),
      (*setcolourx)(),
      (*rmtekx)(),
      (*textparamx)(),
      (*hcox)();

cvtxy(xx,yy,x,y)
int xx,yy,*x,*y;
{

   switch(_win_flg){
   case 0:
      *x=xx ; *y=yy; break;
   case 1:
      *x=xx ; *y=yy/2; break;
   case 2:
      *x=xx ; *y=yy/2 + (_TEKYMAX/2); break;
   case 3:
      *x=xx/2 ; *y=yy/2 + (_TEKYMAX/2); break;
   case 4:
      *x=xx/2 + (_TEKXMAX/2) ; *y=yy/2 + (_TEKYMAX/2); break;
   case 5:
      *x=xx/2 ; *y=yy/2; break;
   case 6:
      *x=xx/2 + (_TEKXMAX/2) ; *y=yy/2; break;
   }
}

vectoa(x,y)
int x,y;
{
int xx,yy;
cvtxy(x,y,&xx,&yy);
(*vectoax)(xx,yy);
}

posita(x,y)
int x,y;
{
int xx,yy;
cvtxy(x,y,&xx,&yy);
(*positax)(xx,yy);
}

gfxtext(s,a)
char s[];
float a;
{
int n;
char z[256];
if(_win_flg==0) {
   strcpy(z,"\x1b"); /* normal text size */
   strcat(z,"9");
} else {
   strcpy(z,"\x1b;"); /* small text size */
}
strcat(z,s);
(*gfxtextx)(z);
}

dperas()
{
(*dperasx)();
}

getxy(x,y) 
int *x,*y;
{
int xx,yy;
(*getxyx)(&xx,&yy);
cvtxy(xx,yy,x,y);
}

setcolour(n)
int n;
{
(*setcolourx)(n);
}

rmtek()
{
(*rmtekx)();
}

textparam(sx,sy,tx,ty,w,name)
int sx,sy,tx,ty,w;
char name[];
{
(*textparamx)(sx,sy,tx,ty,w,name);
}


hco(str)
char str[];
{
(*hcox)(str);
}



tekopen()
{
char c,s[80],z[80],str[80];
int i,n,m;
struct FileHandle *input, *output;

   strcpy(s,"gfx");
   c=_tekpipe+48;
   z[0]=c; z[1]=0;
   strcat(s,z);
   _tek4014=auxopen(s); /* _tekpipe is defined in spec.h */
   if(_tek4014 <= 0) {
      strcpy(str,"c:RUNBACK lise:tekamiga -p "); strcat(str,z);
      input = (struct FileHandle *) Open("nil:",MODE_OLDFILE);
      output = (struct FileHandle *) Open("nil:",MODE_NEWFILE);
      Execute(str,input,output);
      n = 0;
      while(n < 60) {
         Delay(50L);
         _tek4014=auxopen(s); /* _tekpipe is defined in spec.h */
         if(_tek4014 > 0) {Delay(25L); break;}
      }
   }
   if(_tek4014 < 0) {
      fprintf(stderr,"failed to open graphic file\n");
      exit(-1);
   }
   n=read(_tek4014,&positax,4);
   n=read(_tek4014,&vectoax,4);
   n=read(_tek4014,&dperasx,4);
   n=read(_tek4014,&gfxtextx,4);
   n=read(_tek4014,&getxyx,4);
   n=read(_tek4014,&setcolourx,4);
   n=read(_tek4014,&rmtekx,4);
   n=read(_tek4014,&textparamx,4);
   n=read(_tek4014,&hcox,4);
   _tek4014_flg=1;
   close(_tek4014); /* open handle makes no sense on the Amiga */
   return(_tek4014);
}

gfxflush()
{
int n;

   if(_tek4014_flg==0) tekopen();
}

textlen(s)
char s[];
{
int n;

n= 8*_gfxfontsz*strlen(s);
return(n);
}

gfxfont(number,size)
int number,size;
{
_gfxfontnr=number;
_gfxfontsz=size;
}
