home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume10 / tek / tekpts.c < prev   
C/C++ Source or Header  |  1990-02-20  |  2KB  |  90 lines

  1. /*
  2.  *  tekpts.c
  3.  *  copyright 1988 Ronald Florence 
  4.  */
  5.  
  6. #include <stdio.h>
  7.  
  8. #define     Tekx      4096.0
  9. #define     Teky      3120.0
  10.  
  11. vt_tek (infile, weather)
  12.      FILE    *infile;
  13.      int    weather;
  14. {
  15.      register    c, escape = 0;
  16.  
  17.      while ((c = getc(infile)) != EOF)
  18.        {
  19.      if (weather)
  20.        switch (escape)
  21.          {
  22.          case 0 :
  23.            if (c == 0x1b)    /* escape */
  24.          escape = 1;
  25.            break;
  26.          case 1 :
  27.            escape = (c >= '8' && c <= ';') ? 2 : 0;
  28.            break;
  29.          case 2 :
  30.            if (c == 'P')
  31.          return;
  32.            escape = 0;
  33.            break;
  34.          }
  35.      putchar(c);
  36.        }
  37.    }
  38.  
  39.  
  40. tekpts (infile, scaled)
  41.      FILE  *infile;
  42.      int   scaled;
  43. {
  44.   register tx, ty;
  45.   double  xscale = 1.0, yscale = 1.0, ix, iy, sxlo, sxhi, sylo, syhi;
  46.   int        xadd = 0, yadd = 0;
  47.  
  48.   if (scaled)
  49.     {
  50.                 /* read and check the scaling points */
  51.       if ( fscanf(infile, "%lf%lf%lf%lf", &sxlo, &sylo, &sxhi, &syhi ) == EOF 
  52.       || sxlo >= sxhi
  53.       || sylo >= syhi )
  54.     err ("data");
  55.                 /* rescale */
  56.       xscale = Tekx / (sxhi - sxlo);
  57.       yscale = Teky / (syhi - sylo);
  58.       xadd = -sxlo * xscale;
  59.       yadd = -sylo * yscale;
  60.     }
  61.  
  62.   putchar(0x1d);        /* tek vector mode */
  63.   while ( fscanf(infile, "%lf%lf", &ix, &iy) != EOF )
  64.     {
  65.       tx = ix * xscale + xadd;
  66.       ty = iy * yscale + yadd;
  67.                 /* clip */
  68.       if (tx >= Tekx)
  69.     tx = Tekx - 1;
  70.       if (tx < 0)
  71.     tx = 0;
  72.       if (ty >= Teky)
  73.     ty = Teky -1;
  74.       if (ty < 0)
  75.     ty = 0;
  76.                 /* The fancy way is to send hiy, */
  77.                 /* loy, and hix only when they change. */
  78.                 /* This works.   We shift the high */
  79.                 /* part by 7 instead of 5 and shift */
  80.                 /* the low part by 2 because we scale */
  81.                 /* the Tek at 4096 x 3120 */
  82.       putchar(0x20 | ((ty >> 7) & 0x1f)); /* hi y */
  83.       putchar(0x60 | ((ty >> 2) & 0x1f)); /* low y */
  84.       putchar(0x20 | ((tx >> 7) & 0x1f)); /* hi x */
  85.       putchar(0x40 | ((tx >> 2) & 0x1f)); /* low x */
  86.     }
  87.   putchar(0x1f);        /* end tek vector mode */
  88. }
  89.  
  90.