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

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

#include "plplot.h"
#include <stdio.h>

/* This file contains the xterm 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
#define ETX  003

void xtesetup(xdpi, ydpi, xwid, ywid)
int xwid, ywid;
double xdpi, ydpi;
{
   /* the user doesn't know what he's talking about. ignore this stuff */
}

void xteorient(ori)
int ori;
{
}

void xteselect(file)
FILE *file;
{
}

void xteinit()
{
      /* tell plplot that this is an interactive device (so pause after */
      /* drawing graph).  use if smod(0) if sending grphx to a file. */
      smod(1);   /* interactive device */

      /* set default pen color (this should be the desired pen number) */
      /* plplot will actually tell the device to use this pen by */
      /* making a call to plcolor. */
      scol(1);

      swid(1);

      /* Use factor of 16 for resolution and page size. This allows the
         area fill stuff to work on low resolution devices. (slower) */
      /* set device resolution in dots/mm */
      setpxl(4.771*16,4.653*16);

      /* set page size using setphy(xmin,xmax,ymin,ymax) */
      /* plplot assumes that the min coordinates are in the lower left */
      setphy(0,16*TEKX,0,16*TEKY);

      printf("%c[?38h",ESC); /* open graphics window */
      printf("%c",GS);       /* set to vector mode */
      printf("%c%c",ESC,FF);
}

/* Sets to text mode */
void xtetext()
{
   printf("%c",US);
}

/* Sets to graphics mode */
void xtegraph()
{
   printf("%c",GS);       /* set to vector mode */
}

/* Clears the screen */
void xteclear()
{
     printf("%c%c",ESC,FF);
     fflush(stdout);
}

static int xold, yold;

void xtepage()
{
   xold = -100000;
   yold = -100000;
}

void xteeop()
{
   fflush(stdout);
}

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

void xtewidth(width)
int width;
{
}

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

    x1 >>= 4;
    y1 >>= 4;
    x2 >>= 4;
    y2 >>= 4;
    /* 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;
       printf("%c%c%c%c",hy,ly,hx,lx);
    }
    else {
       printf("%c",GS);
       hy = y1/32 + 32;
       ly = y1 - (y1/32)*32 + 96;
       hx = x1/32 + 32;
       lx = x1 - (x1/32)*32 + 64;
       printf("%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;
       printf("%c%c%c%c",hy,ly,hx,lx);
    }
    xold = x2;
    yold = y2;
}

void xtetidy()
{
   printf("%c%c",US,CAN);
   printf("%c%c",ESC,ETX);
   fflush(stdout);
}

void xtecwin()
{
   printf("%c%c",US,CAN);
   printf("%c%c",ESC,ETX);
   fflush(stdout);       /* flush graphics to window */
}

void xtegwin()
{
   printf("%c[?38h",ESC); /* go to graphics window */
   printf("%c",GS);       /* set to vector mode */
   fflush(stdout);
}

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