#undef pipe typedef struct Document Document; struct Document { char *docname; int npage; int fwdonly; char* (*pagename)(Document*, int); Image* (*drawpage)(Document*, int); int (*addpage)(Document*, char*); int (*rmpage)(Document*, int); Biobuf *b; void *extra; int type; }; typedef struct Graphic Graphic; struct Graphic { int type; int fd; char *name; }; enum { Ipic, Itiff, Ijpeg, Igif, Iinferno, Ifax, Icvt2pic, Iplan9bm, Ippm, Ipng, Iyuv, Ibmp, }; enum { Tgfx, Tpdf, Tps, } ; void *emalloc(int); void *erealloc(void*, int); char *estrdup(char*); int spawncmd(char*, char **, int, int, int); int spooltodisk(uchar*, int, char**); int stdinpipe(uchar*, int); Document *initps(Biobuf*, int, char**, uchar*, int); Document *initpdf(Biobuf*, int, char**, uchar*, int); Document *initgfx(Biobuf*, int, char**, uchar*, int); Document *inittroff(Biobuf*, int, char**, uchar*, int); Document *initdvi(Biobuf*, int, char**, uchar*, int); Document *initmsdoc(Biobuf*, int, char**, uchar*, int); void viewer(Document*); extern Cursor reading; extern int chatty; extern int goodps; extern int textbits, gfxbits; extern int reverse; extern int clean; extern int ppi; extern int teegs; extern int truetoboundingbox; extern int wctlfd; extern int resizing; extern int mknewwindow; extern int fitwin; void rot180(Image*); Image *rot90(Image*); Image *rot270(Image*); Image *resample(Image*, Image*); /* ghostscript interface shared by ps, pdf */ typedef struct GSInfo GSInfo; typedef struct PDFInfo PDFInfo; typedef struct Page Page; typedef struct PSInfo PSInfo; struct GSInfo { Graphic g; int gsfd; Biobuf gsrd; int gspid; int ppi; }; struct PDFInfo { GSInfo gs; Rectangle *pagebbox; }; struct Page { char *name; int offset; /* offset of page beginning within file */ }; struct PSInfo { GSInfo gs; Rectangle bbox; /* default bounding box */ Page *page; int npage; int clueless; /* don't know where page boundaries are */ long psoff; /* location of %! in file */ char ctm[256]; }; void waitgs(GSInfo*); int gscmd(GSInfo*, char*, ...); int spawngs(GSInfo*, char*); void setdim(GSInfo*, Rectangle, int, int); int spawnwriter(GSInfo*, Biobuf*); Rectangle screenrect(void); void newwin(void); void zerox(void); Rectangle winrect(void); void resize(int, int); int max(int, int); int min(int, int); void wexits(char*); Image* xallocimage(Display*, Rectangle, ulong, int, ulong); int bell(void*, char*); Image* convert(Graphic *g); Image* cachedpage(Document*, int, int); void cacheflush(void); void fit(void); extern char tempfile[40]; extern int stdinfd; extern int truecolor; /* BUG BUG BUG BUG BUG: cannot use new draw operations in drawterm, * or in vncs, and there is a bug in the kernel for copying images * from cpu memory -> video memory (memmove is not being used). * until all that is settled, ignore the draw operators. */ #define drawop(a,b,c,d,e,f) draw(a,b,c,d,e) #define gendrawop(a,b,c,d,e,f,g) gendraw(a,b,c,d,e,f)