diff options
Diffstat (limited to 'contrib/groff/grolbp/lbp.h')
-rw-r--r-- | contrib/groff/grolbp/lbp.h | 512 |
1 files changed, 0 insertions, 512 deletions
diff --git a/contrib/groff/grolbp/lbp.h b/contrib/groff/grolbp/lbp.h deleted file mode 100644 index 04e6cecb7f14..000000000000 --- a/contrib/groff/grolbp/lbp.h +++ /dev/null @@ -1,512 +0,0 @@ - -// -*- C -*- -/* Copyright (C) 1994 Free Software Foundation, Inc. - Written by Francisco Andrés Verdú <pandres@dragonet.es> - -groff is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. - -groff is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* This file contains a set of utility functions to use canon CAPSL printers - * (lbp-4 and lbp-8 series printers) */ - -#ifndef LBP_H -#define LBP_H - -#include <stdio.h> -#include <stdarg.h> - -static FILE *lbpoutput = NULL; -static FILE *vdmoutput = NULL; - -static inline void -lbpinit(FILE *outfile) -{ - lbpoutput = outfile; -}; - - -static inline void -lbpprintf(char *format, ... ) -{ /* Taken from cjet */ - va_list stuff; - - va_start(stuff, format); - vfprintf(lbpoutput, format, stuff); - va_end(stuff); -}; - -static inline void -lbpputs(char *data) -{ - fputs(data,lbpoutput); -}; - -static inline void -lbpputc(char c) -{ - fputc(c,lbpoutput); -}; - - -static inline void -lbpsavestatus(int index ) -{ - fprintf(lbpoutput,"\033[%d%%y",index); -}; - -static inline void -lbprestorestatus(int index ) -{ - fprintf(lbpoutput,"\033[%d%cz",index ,'%'); -}; - -static inline void -lbpsavepos(int index) -{ - fprintf(lbpoutput,"\033[1;%d;0x",index); -}; - -static inline void -lbprestorepos(int index) -{ - fprintf(lbpoutput,"\033[0;%d;0x",index); -}; - -static inline void -lbprestoreposx(int index) -{ - fprintf(lbpoutput,"\033[0;%d;1x",index); -}; - -static inline void -lbpmoverel(int despl, char direction) -{ - fprintf(lbpoutput,"\033[%d%c",despl,direction); -}; - -static inline void -lbplinerel(int width,int despl,char direction ) -{ - fprintf(lbpoutput,"\033[%d;0;9{\033[%d%c\033[9}",width,despl,direction); -}; - -static inline void -lbpmoveabs(int x, int y) -{ - fprintf(lbpoutput,"\033[%d;%df",y,x); -}; - -static inline void -lbplineto(int x,int y, int width ) -{ - fprintf(lbpoutput,"\033[%d;0;9{",width); - lbpmoveabs(x,y); - fprintf(lbpoutput,"\033[9}\n"); -}; - -static inline void -lbpruleabs(int x, int y, int hsize, int vsize) -{ - lbpmoveabs(x,y); - fprintf(lbpoutput,"\033[0;9;000s"); - lbpmoveabs(x+hsize,y+vsize); - fprintf(lbpoutput,"\033[9r"); -}; - -static inline void vdmprintf(char *format, ... ); - -static inline char * -vdmnum(int num,char *result) -{ - char b1,b2,b3; - char *p = result; - int nm; - - nm = abs(num); - /* First byte 1024 - 32768 */ - b1 = ((nm >> 10) & 0x3F); - if (b1) *p++ = b1 | 0x40; - - /* Second Byte 16 - 1024 */ - b2 = ((nm >> 4) & 0x3F); - if ( b1 || b2) *p++= b2 | 0x40; - - /* Third byte 0 - 15 */ - b3 = ((nm & 0x0F) | 32); - if (num >= 0) b3 |= 16; - *p++ = b3; - *p = 0x00; /* End of the resulting string */ - return result; -}; - -static inline void -vdmorigin(int newx, int newy) -{ - char nx[4],ny[4]; - - vdmprintf("}\"%s%s\x1e",vdmnum(newx,nx),vdmnum(newy,ny)); -}; /* vdmorigin */ - - -static inline FILE * -vdminit(FILE *vdmfile) -{ - char scale[4],size[4],lineend[4]; - -/* vdmoutput = tmpfile();*/ - vdmoutput = vdmfile; - /* Initialize the VDM mode */ - vdmprintf("\033[0&}#GROLBP\x1e!0%s%s\x1e$\x1e}F%s\x1e",\ - vdmnum(-3,scale),vdmnum(1,size),vdmnum(1,lineend)); - return vdmoutput; - -}; - -static inline void -vdmend() -{ - vdmprintf("}p\x1e"); -}; - -static inline void -vdmprintf(char *format, ... ) -{ /* Taken from cjet */ - va_list stuff; - - if (vdmoutput == NULL) vdminit(tmpfile()); - va_start(stuff, format); - vfprintf(vdmoutput, format, stuff); - va_end(stuff); -}; - -static inline void -vdmsetfillmode(int pattern,int perimeter, int inverted) -{ - char patt[4],perim[4], - rot[4], /* rotation */ - espejo[4], /* espejo */ - inv[4]; /* Inverted */ - - vdmprintf("I%s%s%s%s%s\x1e",vdmnum(pattern,patt),\ - vdmnum(perimeter,perim),vdmnum(0,rot), - vdmnum(0,espejo),vdmnum(inverted,inv)); -}; - -static inline void -vdmcircle(int centerx, int centery, int radius) -{ - char x[4],y[4],rad[4]; - - vdmprintf("5%s%s%s\x1e",vdmnum(centerx,x),vdmnum(centery,y),\ - vdmnum(radius,rad)); -}; - -static inline void -vdmaarc(int centerx, int centery, int radius,int startangle,int angle,int style,int arcopen) -{ - char x[4],y[4],rad[4],stx[4],sty[4],styl[4],op[4]; - - vdmprintf("}6%s%s%s%s%s%s%s\x1e",vdmnum(arcopen,op),\ - vdmnum(centerx,x),vdmnum(centery,y),\ - vdmnum(radius,rad),vdmnum(startangle,stx),vdmnum(angle,sty),\ - vdmnum(style,styl)); -}; - -static inline void -vdmvarc(int centerx, int centery,int radius, int startx, int starty, int endx, int endy,\ - int style,int arcopen) -{ - char x[4],y[4],rad[4],stx[4],sty[4],enx[4],eny[4],styl[4],op[4]; - - vdmprintf("}6%s%s%s%s%s%s%s%s\x1e",vdmnum(arcopen,op),\ - vdmnum(centerx,x),vdmnum(centery,y),\ - vdmnum(radius,rad),vdmnum(startx,stx),vdmnum(starty,sty),\ - vdmnum(endx,enx),vdmnum(endy,eny),vdmnum(style,styl)); -}; - -static inline void -vdmellipse(int centerx, int centery, int radiusx, int radiusy,int rotation) -{ - char x[4],y[4],radx[4],rady[4],rotat[4]; - - vdmprintf("}7%s%s%s%s%s\x1e\n",vdmnum(centerx,x),vdmnum(centery,y),\ - vdmnum(radiusx,radx),vdmnum(radiusy,rady),\ - vdmnum(rotation,rotat)); -}; - -static inline void -vdmsetlinetype(int lintype) -{ - char ltyp[4], expfact[4]; - - vdmprintf("E1%s%s\x1e",vdmnum(lintype,ltyp),vdmnum(1,expfact)); - -}; - -static inline void -vdmsetlinestyle(int lintype, int pattern,int unionstyle) -{ - char patt[4],ltip[4], - rot[4], /* rotation */ - espejo[4], /* espejo */ - in[4]; /* Inverted */ - - vdmprintf("}G%s%s%s%s%s\x1e",vdmnum(lintype,ltip),\ - vdmnum(pattern,patt),vdmnum(0,rot), - vdmnum(0,espejo),vdmnum(0,in)); - vdmprintf("}F%s",vdmnum(unionstyle,rot)); -}; - -static inline void -vdmlinewidth(int width) -{ - char wh[4]; - - vdmprintf("F1%s\x1e",vdmnum(width,wh)); -}; - -static inline void -vdmrectangle(int origx, int origy,int dstx, int dsty) -{ - char xcoord[4],ycoord[4],sdstx[4],sdsty[4]; - - vdmprintf("}:%s%s%s%s\x1e\n",vdmnum(origx,xcoord),vdmnum(dstx,sdstx),\ - vdmnum(origy,ycoord),vdmnum(dsty,sdsty)); -}; /* polyline */ - -static inline void -vdmpolyline(int numpoints, int *points) -{ - int i,*p = points; - char xcoord[4],ycoord[4]; - - if (numpoints < 2) return; - vdmprintf("1%s%s",vdmnum(*p,xcoord),vdmnum(*(p+1),ycoord)); - p += 2; - for (i = 1; i < numpoints ; i++) { - vdmprintf("%s%s",vdmnum(*p,xcoord),vdmnum(*(p+1),ycoord)); - p += 2; - }; /* for */ - vdmprintf("\x1e\n"); -}; /* polyline */ - -static inline void -vdmpolygon(int numpoints, int *points) -{ - int i,*p = points; - char xcoord[4],ycoord[4]; - - if (numpoints < 2) return; - vdmprintf("2%s%s",vdmnum(*p,xcoord),vdmnum(*(p+1),ycoord)); - p += 2; - for (i = 1; i < numpoints ; i++) { - vdmprintf("%s%s",vdmnum(*p,xcoord),vdmnum(*(p+1),ycoord)); - p += 2; - }; /* for */ - vdmprintf("\x1e\n"); - -}; /* vdmpolygon */ - - -/************************************************************************ - * Highter level auxiliary functions * - ************************************************************************/ -static inline int -vdminited() -{ - return (vdmoutput != NULL); -}; /* vdminited */ - - -static inline void -vdmline(int startx, int starty, int sizex, int sizey) -{ - int points[4]; - - points[0] = startx; - points[1] = starty; - points[2] = sizex; - points[3] = sizey; - - vdmpolyline(2,points); - -}; - -/*#define THRESHOLD .05 */ /* inch */ -#define THRESHOLD 1 /* points (1/300 inch) */ -static inline void -splinerel(double px,double py,int flush) -{ - static int lx = 0 ,ly = 0; - static float pend = 0.0; - static int dy = 0, despx = 0, despy = 0, sigpend = 0; - int dxnew ,dynew, sg; - char xcoord[4],ycoord[4]; - float npend ; - - if (flush == -1) {lx = (int)px; ly = (int)py; return;}; - - if (flush == 0) { - dxnew = (int)px -lx; - dynew = (int)py -ly; - if ((dxnew == 0) && (dynew == 0)) return; - sg = (dxnew < 0)? -1 : 0; -/* fprintf(stderr,"s (%d,%d) (%d,%d)\n",dxnew,dynew,despx,despy);*/ - if (dynew == 0) { - despx = dxnew; - if ((sg == sigpend) && (dy == 0)){ - return; - }; - dy = 0; - } - else { - dy = 1; - npend = (1.0*dxnew)/dynew; - if (( npend == pend) && (sigpend == sg)) - { despy = dynew; despx = dxnew; return; } - else - { sigpend = sg; - pend = npend; - }; /* else (( npend == pend) && ... */ - }; /* else (if (dynew == 0)) */ - }; /* if (!flush ) */ - - /* if we've changed direction we must draw the line */ -/* fprintf(stderr," (%d) %.2f,%.2f\n",flush,(float)px,(float)py);*/ - if ((despx != 0) || (despy != 0)) vdmprintf("%s%s",vdmnum(despx,xcoord),\ - vdmnum(despy,ycoord)); - /*if ((despx != 0) || (despy != 0)) fprintf(stderr,"2 - *%d,%d\n",despx,despy);*/ - if (flush) { - dxnew = dy = despx = despy = 0; - return; - }; /* if (flush) */ - dxnew -= despx; - dynew -= despy; - if ((dxnew != 0) || (dynew != 0)) vdmprintf("%s%s",vdmnum(dxnew,xcoord),\ - vdmnum(dynew,ycoord)); - -/* if ((dxnew != 0) || (dynew != 0)) fprintf(stderr,"3 - * %d,%d\n",dxnew,dynew);*/ - lx = (int)px; ly = (int)py; - dxnew = dy = despx = despy = 0; - -}; /* splinerel */ - -/********************************************************************** - * The following code to draw splines is adapted from the transfig package - */ -static void -quadratic_spline(double a1,double b1, double a2, double b2, \ - double a3, double b3, double a4, double b4) -{ - double x1, y1, x4, y4; - double xmid, ymid; - - x1 = a1; y1 = b1; - x4 = a4; y4 = b4; - xmid = (a2 + a3)/2.0; - ymid = (b2 + b3)/2.0; - if ((fabs(x1 - xmid) < THRESHOLD) && (fabs(y1 - ymid) < THRESHOLD)) { - splinerel(xmid,ymid,0); -/* fprintf(tfp, "PA%.4f,%.4f;\n", xmid, ymid);*/ - } - else { - quadratic_spline(x1, y1, ((x1+a2)/2.0), ((y1+b2)/2.0), - ((3.0*a2+a3)/4.0), ((3.0*b2+b3)/4.0), xmid, ymid); - } - - if ((fabs(xmid - x4) < THRESHOLD) && (fabs(ymid - y4) < THRESHOLD)) { - splinerel(x4,y4,0); -/* fprintf(tfp, "PA%.4f,%.4f;\n", x4, y4);*/ - } - else { - quadratic_spline(xmid, ymid, ((a2+3.0*a3)/4.0), ((b2+3.0*b3)/4.0), - ((a3+x4)/2.0), ((b3+y4)/2.0), x4, y4); - }; -}; /* quadratic_spline */ - -#define XCOORD(i) numbers[(2*i)] -#define YCOORD(i) numbers[(2*i)+1] -static void -vdmspline(int numpoints, int ox,int oy, int *numbers) -{ - double cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4; - double x1, y1, x2, y2; - char xcoord[4],ycoord[4]; - int i; - - /*p = s->points; - x1 = p->x/ppi;*/ - x1 = ox; - y1 = oy; -/* p = p->next; - x2 = p->x/ppi; - y2 = p->y/ppi;*/ - x2 = ox + XCOORD(0); - y2 = oy + YCOORD(0); - cx1 = (x1 + x2)/2.0; - cy1 = (y1 + y2)/2.0; - cx2 = (x1 + 3.0*x2)/4.0; - cy2 = (y1 + 3.0*y2)/4.0; - -/* fprintf(stderr,"Spline %d (%d,%d)\n",numpoints,(int)x1,(int)y1);*/ - vdmprintf("1%s%s",vdmnum((int)x1,xcoord),vdmnum((int)y1,ycoord)); - splinerel(x1,y1,-1); - splinerel(cx1,cy1,0); -/* fprintf(tfp, "PA%.4f,%.4f;PD%.4f,%.4f;\n", - x1, y1, cx1, cy1);*/ - - /*for (p = p->next; p != NULL; p = p->next) {*/ - for (i = 1; i < (numpoints); i++) { - x1 = x2; - y1 = y2; -/* x2 = p->x/ppi; - y2 = p->y/ppi;*/ - x2 = x1 + XCOORD(i); - y2 = y1 + YCOORD(i); - cx3 = (3.0*x1 + x2)/4.0; - cy3 = (3.0*y1 + y2)/4.0; - cx4 = (x1 + x2)/2.0; - cy4 = (y1 + y2)/2.0; - /* fprintf(stderr,"Point (%d,%d) - (%d,%d)\n",(int)x1,(int)(y1),(int)x2,(int)y2);*/ - quadratic_spline(cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4); - cx1 = cx4; - cy1 = cy4; - cx2 = (x1 + 3.0*x2)/4.0; - cy2 = (y1 + 3.0*y2)/4.0; - } - x1 = x2; - y1 = y2; -/* p = s->points->next; - x2 = p->x/ppi; - y2 = p->y/ppi;*/ - x2 = ox + XCOORD(0); - y2 = oy + YCOORD(0); - cx3 = (3.0*x1 + x2)/4.0; - cy3 = (3.0*y1 + y2)/4.0; - cx4 = (x1 + x2)/2.0; - cy4 = (y1 + y2)/2.0; - splinerel(x1,y1,0); - splinerel(x1,y1,1); - /*vdmprintf("%s%s",vdmnum((int)(x1-lx),xcoord),\ - vdmnum((int)(y1-ly),ycoord));*/ - vdmprintf("\x1e\n"); -/* fprintf(tfp, "PA%.4f,%.4f;PU;\n", x1, y1);*/ - - -}; /* vdmspline */ - - -#endif |