This is impress.c in view mode; [Download] [Up]
/* This file contains the IMPRESS device dependent subroutines for */
/* use with plplot. */
#include "plplot.h"
#include <stdio.h>
#define SET_HV_SYSTEM 0315
#define OPBYTE1 031
#define OPBYTE2 0140
#define SET_ABS_H 0207
#define SET_ABS_V 0211
#define OPWORDH1 0
#define OPWORDH2 150
#define OPWORDV1 0
#define OPWORDV2 150
#define ENDPAGE 0333
#define BUFFPTS 50
#define BUFFLENG 2*BUFFPTS
#define IMPX 2999
#define IMPY 2249
static FILE *OutFile=NULL;
static int porient=0;
static int fileopen=0;
static short *LineBuff;
void flushline();
void impsetup(xdpi,ydpi,xwid,ywid)
int xwid, ywid;
double xdpi, ydpi;
{
}
/* Open file. Set up for graphics. */
void impinit()
{
char response[80];
int ori;
smod(0); /* not an interactive terminal */
scol(1);
swid(1);
setpxl(11.81,11.81);
if(!porient)
setphy(0,IMPX,0,IMPY);
else
setphy(0,IMPY,0,IMPX);
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;
}
LineBuff = (short *)malloc(BUFFLENG*sizeof(short));
if(LineBuff == NULL) {
printf("\nError in memory alloc in impini().\n");
exit(1);
}
fprintf(OutFile,"@Document(Language ImPress, jobheader off)");
fprintf(OutFile,"%c%c",SET_HV_SYSTEM,OPBYTE1);
fprintf(OutFile,"%c%c%c",SET_ABS_H,OPWORDH1,OPWORDH2);
fprintf(OutFile,"%c%c%c",SET_ABS_V,OPWORDV1,OPWORDV2);
fprintf(OutFile,"%c%c",SET_HV_SYSTEM,OPBYTE2);
}
void imporient(ori)
int ori;
{
porient = ori;
}
void impselect(file)
FILE *file;
{
OutFile = file;
fileopen = 0;
}
/* Sets the IMPRESS to text mode */
void imptext()
{
}
/* Sets the IMPRESS to graphics mode */
void impgraph()
{
}
/* Form feed */
void impclear()
{
flushline();
fprintf(OutFile,"%c",ENDPAGE);
}
static short FirstLine;
void imppage()
{
FirstLine = 1;
}
void impeop()
{
}
/* May put something here someday */
void impcolor(colour)
int colour;
{
}
#define SET_PEN 0350
static int penchange=0, penwidth;
void impwidth(width)
int width;
{
if(width>0 && width <= 20) {
penwidth = width;
penchange = 1;
}
}
#define CREATE_PATH 0346
#define DRAW_PATH 0352
#define OPTYPE 017
static short count;
void impline(x1a,y1a,x2a,y2a)
int x1a,y1a,x2a,y2a;
{
static int xold, yold;
int x1, y1, x2, y2;
if(!porient) {
x1 = x1a;
y1 = y1a;
x2 = x2a;
y2 = y2a;
}
else {
x1 = IMPX - y1a;
y1 = x1a;
x2 = IMPX - y2a;
y2 = x2a;
}
if(FirstLine) {
if(penchange) {
fprintf(OutFile,"%c%c",SET_PEN,(char)penwidth);
penchange = 0;
}
/* Add both points to path */
count = 0;
FirstLine = 0;
*(LineBuff+count++) = (short)x1;
*(LineBuff+count++) = (short)y1;
*(LineBuff+count++) = (short)x2;
*(LineBuff+count++) = (short)y2;
}
else if((count+2) < BUFFLENG && x1 == xold && y1 == yold) {
/* Add new point to path */
*(LineBuff+count++) = (short)x2;
*(LineBuff+count++) = (short)y2;
}
else {
/* Write out old path */
count /= 2;
fprintf(OutFile,"%c%c%c",CREATE_PATH,(char)count/256,(char)count%256);
fwrite((char *)LineBuff,sizeof(short),2*count,OutFile);
fprintf(OutFile,"%c%c",DRAW_PATH,OPTYPE);
/* And start a new path */
if(penchange) {
fprintf(OutFile,"%c%c",SET_PEN,(char)penwidth);
penchange = 0;
}
count = 0;
*(LineBuff+count++) = (short)x1;
*(LineBuff+count++) = (short)y1;
*(LineBuff+count++) = (short)x2;
*(LineBuff+count++) = (short)y2;
}
xold = x2;
yold = y2;
}
void flushline()
{
count /= 2;
fprintf(OutFile,"%c%c%c",CREATE_PATH,(char)count/256,(char)count%256);
fwrite((char *)LineBuff,sizeof(short),2*count,OutFile);
fprintf(OutFile,"%c%c",DRAW_PATH,OPTYPE);
FirstLine = 1;
}
/* Close graphics file */
void imptidy()
{
flushline();
fprintf(OutFile,"%c",ENDPAGE);
free((char *)LineBuff);
if(fileopen)
fclose(OutFile);
}
void impcwin()
{
}
void impgwin()
{
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.