ftp.nice.ch/pub/next/unix/developer/plplot.3.0.s.tar.gz#/plplot/drivers/tektronix.c

This is tektronix.c in view mode; [Download] [Up]

#include "plplot.h"
#include <stdio.h>
/*debug#include <limits.h>*/

/* This file contains the tektronix dependent routines for use with plplot. */

#define TEKX   1023
#define TEKY    779

/* Define graphics control characters. */
#define FF   12
#define CAN  24
#define ESC  27
#define GS   29
#define US   31

static FILE *OutFile=NULL;
static int porient=0;
static int fileopen=0;

void tektsetup(xdpi,ydpi,xwid,ywid)
double xdpi, ydpi;
int xwid, ywid;
{
   /* ignore */
}

void tekfsetup(xdpi,ydpi,xwid,ywid)
double xdpi, ydpi;
int xwid, ywid;
{
}

void tektinit()
{
      smod(1);   /* an interactive device */
      OutFile = stdout;
      teksetup(0);
}

void tekfinit()
{
      char response[80];

      smod(0);  /* not an interactive terminal */
      
      while(!OutFile) {
         printf("Enter graphics command storage file name. ");
         fgets(response,sizeof(response),stdin);
         response[strlen(response)-1] = '\0';
         if ((OutFile = fopen(response,"w")) == NULL) 
             fprintf(stderr,"Can't open %s.\n",response);
         else
             fileopen=1;
      }
      teksetup(porient);
}

teksetup(portrait)
int portrait;
{
      /* set default pen color*/
      scol(1);

      if(!portrait) {
         /* set device resolution in dots/mm */
         setpxl(4.771*16,4.653*16);
         /* set page size */
         setphy(0,TEKX*16,0,TEKY*16);
      }
      else {
         /* set device resolution in dots/mm */
         setpxl(4.653*16,4.771*16);
         /* set page size */
         setphy(0,TEKY*16,0,TEKX*16);
      }
      fprintf(OutFile,"%c",GS);
}

/* Sets the tektronix to text mode */
void tektext()
{
    fprintf(OutFile,"%c",US);
}

/* Sets the tektronix to graphics mode */
void tekgraph()
{
    /* Nothing has to be done here */
}

/* Clears the tektronix screen */
void tektclear()
{
     fprintf(OutFile,"%c%c",ESC,FF);
}

void tekfclear()
{
     fprintf(OutFile,"%c%c",ESC,FF);
}

void tektorient(ori)
int ori;
{
}

void tektselect(file)
FILE *file;
{
}

void tekforient(ori)
int ori;
{
   porient = ori;
}

void tekfselect(file)
FILE *file;
{
   OutFile = file;
   fileopen=0;
}

/* Change color */
void tekcolor(colour)
int colour;
{
}

static int xold, yold;

void tekpage()
{
   xold = -100000;
   yold = -100000;
   fprintf(OutFile,"%c%c",ESC,FF);
}

void tekeop()
{
   fflush(OutFile);
}

/* Change pen width */
void tekwidth(width)
int width;
{
}

/* Draws a line in the current colour from (x1,y1) to (x2,y2) */
void tekline(x1a,y1a,x2a,y2a)
int x1a,y1a,x2a,y2a;
{
    int x1,y1,x2,y2,hy,ly,hx,lx;

    x1a >>= 4;
    y1a >>= 4;
    x2a >>= 4;
    y2a >>= 4;

    if(!porient) {
       x1 = x1a;
       y1 = y1a;
       x2 = x2a;
       y2 = y2a;
    }
    else {
       x1 = TEKX - y1a;
       y1 = x1a;
       x2 = TEKX - y2a;
       y2 = x2a;
    }

    /* If continuation of previous line just send new point */
    if(x1 == xold && y1 == yold) {
       hy = y2/32 + 32;
       ly = y2 - (y2/32)*32 + 96;
       hx = x2/32 + 32;
       lx = x2 - (x2/32)*32 + 64;
       fprintf(OutFile,"%c%c%c%c",hy,ly,hx,lx);
    }
    else {
       fprintf(OutFile,"%c",GS);
       hy = y1/32 + 32;
       ly = y1 - (y1/32)*32 + 96;
       hx = x1/32 + 32;
       lx = x1 - (x1/32)*32 + 64;
       fprintf(OutFile,"%c%c%c%c",hy,ly,hx,lx);
       hy = y2/32 + 32;
       ly = y2 - (y2/32)*32 + 96;
       hx = x2/32 + 32;
       lx = x2 - (x2/32)*32 + 64;
       fprintf(OutFile,"%c%c%c%c",hy,ly,hx,lx);
    }
    xold = x2;
    yold = y2;
}

/* Close file */
void tekftidy()
{
   if(fileopen)
      fclose(OutFile);
}

void tekttidy()
{
   tektclear();
   fprintf(OutFile,"%c%c",US,CAN);
   fflush(OutFile);
}

void tekfcwin()
{
}

void tekcwin()
{
   fprintf(OutFile,"%c%c",US,CAN);
   fflush(OutFile);
}

void tekfgwin()
{
}

void tekgwin()
{
   fprintf(OutFile,"%c",GS);
   fflush(OutFile);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Marcel Waldvogel and Netfuture.ch.