This is xdvi.h in view mode; [Download] [Up]
/* * Written by Eric C. Cooper, CMU */ /******************************** * The C environment * *******************************/ /* Avoid name clashes with kpathsea. */ #define xmalloc xdvi_xmalloc #define xfopen xdvi_xfopen /* For wchar_t et al., that the X files might want. */ #include <kpathsea/systypes.h> /* See kpathsea/INSTALL for the purpose of the FOIL... */ #ifdef FOIL_X_WCHAR_T #define wchar_t foil_x_defining_wchar_t #define X_WCHAR #endif #include <X11/Xlib.h> /* include Xfuncs.h, if available */ #include <X11/Xutil.h> /* needed for XDestroyImage */ #include <X11/Xos.h> #undef wchar_t #ifndef XlibSpecificationRelease #define XlibSpecificationRelease 0 #endif #if XlibSpecificationRelease >= 5 #include <X11/Xfuncs.h> #endif #ifndef NOTOOL #include <X11/Intrinsic.h> #define TOOLKIT #else #define XtNumber(arr) (sizeof(arr)/sizeof(arr[0])) typedef unsigned long Pixel; typedef char Boolean; typedef unsigned int Dimension; #undef TOOLKIT #undef BUTTONS #endif #define True 1 #define False 0 #ifdef VMS #include <string.h> #define index strchr #define rindex strrchr #define bzero(a, b) (void) memset ((void *) (a), 0, (size_t) (b)) #define bcopy(a, b, c) (void) memmove ((void *) (b), (void *) (a), (size_t) (c)) #endif #if defined(_SVR4) || defined(_SVR4_SOURCE) || defined(_SYSTYPE_SVR4) #undef SVR4 #define SVR4 #endif #if defined(SVR3) || defined(SVR4) #undef SYSV #define SYSV #endif #ifndef BSD #if defined(SYSV) || defined(VMS) || defined(linux) #define BSD 0 #else #define BSD 1 #endif #endif #ifndef OPEN_MODE #define OPEN_MODE FOPEN_R_MODE #endif /* OPEN_MODE */ #ifndef VMS #define OPEN_MODE_ARGS _Xconst char * #else #define OPEN_MODE_ARGS _Xconst char *, _Xconst char * #endif #ifndef NeedFunctionPrototypes #ifdef __STDC__ #define NeedFunctionPrototypes 1 #else /* STDC */ #define NeedFunctionPrototypes 0 #endif /* STDC */ #endif /* NeedFunctionPrototypes */ #if NeedFunctionPrototypes #define ARGS(x) x #else #define ARGS(x) () #endif #ifndef NeedWidePrototypes #define NeedWidePrototypes NeedFunctionPrototypes #endif #ifndef NeedVarargsPrototypes #define NeedVarargsPrototypes NeedFunctionPrototypes #endif #ifndef _XFUNCPROTOBEGIN #define _XFUNCPROTOBEGIN #define _XFUNCPROTOEND #endif #ifndef _Xconst #ifdef __STDC__ #define _Xconst const #else /* STDC */ #define _Xconst #endif /* STDC */ #endif /* _Xconst */ #ifndef VOLATILE #if defined(__STDC__) || (defined(__stdc__) && defined(__convex__)) #define VOLATILE volatile #else #define VOLATILE /* nothing */ #endif #endif #ifndef NORETURN #ifdef __GNUC__ #define NORETURN volatile #else #define NORETURN /* nothing */ #endif #endif #define Printf (void) printf #define Puts (void) puts #define Fprintf (void) fprintf #define Sprintf (void) sprintf #define Fseek (void) fseek #define Fread (void) fread #define Fputs (void) fputs #define Putc (void) putc #define Putchar (void) putchar #define Fclose (void) fclose #define Fflush (void) fflush #define Strcpy (void) strcpy /******************************** * Types and data * *******************************/ #ifndef EXTERN #define EXTERN extern #define INIT(x) #endif #define MAXDIM 32767 typedef unsigned char ubyte; #if NeedWidePrototypes typedef unsigned int wide_ubyte; typedef int wide_bool; #define WIDENINT (int) #else typedef ubyte wide_ubyte; typedef Boolean wide_bool; #define WIDENINT #endif /* * pixel_conv is currently used only for converting absolute positions * to pixel values; although normally it should be * ((int) ((x) / shrink_factor + (1 << 15) >> 16)), * the rounding is achieved instead by moving the constant 1 << 15 to * PAGE_OFFSET in dvi_draw.c. */ #define pixel_conv(x) ((int) ((x) / shrink_factor >> 16)) #define pixel_round(x) ((int) ROUNDUP(x, shrink_factor << 16)) #define spell_conv0(n, f) ((long) (n * f)) #define spell_conv(n) spell_conv0(n, dimconv) #ifdef BMBYTE #define BMUNIT unsigned char #define BITS_PER_BMUNIT 8 #define BYTES_PER_BMUNIT 1 #else /* !BMBYTE */ #ifdef BMSHORT #define BMUNIT unsigned short #define BITS_PER_BMUNIT 16 #define BYTES_PER_BMUNIT 2 #else /* !BMSHORT */ #define BMLONG #ifdef __alpha #define BMUNIT unsigned int #else #define BMUNIT unsigned long #endif /* if __alpha */ #define BITS_PER_BMUNIT 32 #define BYTES_PER_BMUNIT 4 #endif /* !BMSHORT */ #endif /* !BMBYTE */ #define ADD(a, b) ((BMUNIT *) (((char *) a) + b)) #define SUB(a, b) ((BMUNIT *) (((char *) a) - b)) extern BMUNIT bit_masks[BITS_PER_BMUNIT + 1]; struct frame { struct framedata { long dvi_h, dvi_v, w, x, y, z; int pxl_v; } data; struct frame *next, *prev; }; #if NeedFunctionPrototypes #ifndef TEXXET typedef long (*set_char_proc)(wide_ubyte); #else /* TEXXET */ typedef void (*set_char_proc)(wide_ubyte, wide_ubyte); #endif /* TEXXET */ #else /* NeedFunctionPrototypes */ #ifndef TEXXET typedef long (*set_char_proc)(); #else /* TEXXET */ typedef void (*set_char_proc)(); #endif /* TEXXET */ #endif /* NeedFunctionPrototypes */ struct drawinf { /* this information is saved when using virtual fonts */ struct framedata data; struct font *fontp; set_char_proc set_char_p; int tn_table_len; struct font **tn_table; struct tn *tn_head; ubyte *pos, *end; struct font *virtual; #ifdef TEXXET int dir; #endif }; EXTERN struct drawinf currinf; /* entries below with the characters 'dvi' in them are actually stored in scaled pixel units */ #define DVI_H currinf.data.dvi_h #define PXL_H pixel_conv(currinf.data.dvi_h) #define DVI_V currinf.data.dvi_v #define PXL_V currinf.data.pxl_v #define WW currinf.data.w #define XX currinf.data.x #define YY currinf.data.y #define ZZ currinf.data.z #define ROUNDUP(x,y) (((x)+(y)-1)/(y)) EXTERN int current_page; EXTERN int total_pages; EXTERN long magnification; EXTERN double dimconv; EXTERN double tpic_conv; EXTERN int n_files_left; /* for LRU closing of fonts */ EXTERN time_t dvi_time; /* last mod. time for dvi file */ EXTERN unsigned int page_w, page_h; #if defined(PS_DPS) || defined(PS_NEWS) || defined(PS_GS) #define PS 1 #else #define PS 0 #endif /* * Table of page offsets in DVI file, indexed by page number - 1. * Initialized in prepare_pages(). */ EXTERN long *page_offset; /* * Mechanism for reducing repeated warning about specials, lost characters, etc. */ EXTERN Boolean hush_spec_now; /* * Bitmap structure for raster ops. */ struct bitmap { unsigned short w, h; /* width and height in pixels */ short bytes_wide; /* scan-line width in bytes */ char *bits; /* pointer to the bits */ }; /* * Per-character information. * There is one of these for each character in a font (raster fonts only). * All fields are filled in at font definition time, * except for the bitmap, which is "faulted in" * when the character is first referenced. */ struct glyph { long addr; /* address of bitmap in font file */ long dvi_adv; /* DVI units to move reference point */ short x, y; /* x and y offset in pixels */ struct bitmap bitmap; /* bitmap for character */ short x2, y2; /* x and y offset in pixels (shrunken bitmap) */ #ifdef GREY XImage *image2; char *pixmap2; #endif struct bitmap bitmap2; /* shrunken bitmap for character */ }; /* * Per character information for virtual fonts */ struct macro { ubyte *pos; /* address of first byte of macro */ ubyte *end; /* address of last+1 byte */ long dvi_adv; /* DVI units to move reference point */ Boolean free_me; /* if free(pos) should be called when */ /* freeing space */ }; /* * The layout of a font information block. * There is one of these for every loaded font or magnification thereof. * Duplicates are eliminated: this is necessary because of possible recursion * in virtual fonts. * * Also note the strange units. The design size is in 1/2^20 point * units (also called micro-points), and the individual character widths * are in the TFM file in 1/2^20 ems units, i.e., relative to the design size. * * We then change the sizes to SPELL units (unshrunk pixel / 2^16). */ #define NOMAGSTP (-29999) #if NeedFunctionPrototypes typedef void (*read_char_proc)(register struct font *, wide_ubyte); #else typedef void (*read_char_proc)(); #endif struct font { struct font *next; /* link to next font info block */ char *fontname; /* name of font */ float fsize; /* size information (dots per inch) */ int magstepval; /* magstep number * two, or NOMAGSTP */ FILE *file; /* open font file or NULL */ char *filename; /* name of font file */ long checksum; /* checksum */ unsigned short timestamp; /* for LRU management of fonts */ ubyte flags; /* flags byte (see values below) */ ubyte maxchar; /* largest character code */ double dimconv; /* size conversion factor */ set_char_proc set_char_p; /* proc used to set char */ /* these fields are used by (loaded) raster fonts */ read_char_proc read_char; /* function to read bitmap */ struct glyph *glyph; /* these fields are used by (loaded) virtual fonts */ struct font **vf_table; /* list of fonts used by this vf */ struct tn *vf_chain; /* ditto, if TeXnumber >= VFTABLELEN */ struct font *first_font; /* first font defined */ struct macro *macro; /* I suppose the above could be put into a union, but we */ /* wouldn't save all that much space. */ }; #define FONT_IN_USE 1 /* used for housekeeping */ #define FONT_LOADED 2 /* if font file has been read */ #define FONT_VIRTUAL 4 /* if font is virtual */ #define TNTABLELEN 30 /* length of TeXnumber array (dvi file) */ #define VFTABLELEN 5 /* length of TeXnumber array (virtual fonts) */ struct tn { struct tn *next; /* link to next TeXnumber info block */ int TeXnumber; /* font number (in DVI file) */ struct font *fontp; /* pointer to the rest of the info */ }; EXTERN struct font *tn_table[TNTABLELEN]; EXTERN struct font *font_head INIT(NULL); EXTERN struct tn *tn_head INIT(NULL); EXTERN ubyte maxchar; EXTERN unsigned short current_timestamp INIT(0); /* * Command line flags. */ extern struct _resource { char *debug_arg; #ifdef TOOLKIT int shrinkfactor; #endif int _density; #ifdef GREY float _gamma; #endif int _pixels_per_inch; char *sidemargin; char *topmargin; char *xoffset; char *yoffset; _Xconst char *paper; char *_alt_font; Boolean _list_fonts; Boolean reverse; Boolean _hush_spec; Boolean _hush_chars; Boolean _hush_chk; char *fore_color; char *back_color; char *brdr_color; char *high_color; char *curs_color; Pixel _fore_Pixel; Pixel _back_Pixel; #ifdef TOOLKIT Pixel _brdr_Pixel; Pixel _hl_Pixel; Pixel _cr_Pixel; #endif char *icon_geometry; Boolean keep_flag; #ifdef TOOLKIT char *copy_arg; #endif Boolean copy; Boolean thorough; #if PS /* default is to use DPS, then NEWS, then GhostScript; * we will figure out later on which one we will use */ Boolean _postscript; #ifdef PS_DPS Boolean useDPS; #endif #ifdef PS_NEWS Boolean useNeWS; #endif #ifdef PS_GS Boolean useGS; #endif #endif /* PS */ Boolean version_flag; #ifdef BUTTONS Boolean expert; #endif char *mg_arg[5]; #ifdef GREY Boolean _use_grey; #endif Boolean _use_makepk; char *_mf_mode; } resource; /* As a convenience, we define the field names without leading underscores * to point to the field of the above record. Here are the global ones; * the local ones are defined in each module. */ #define density resource._density #define pixels_per_inch resource._pixels_per_inch #define alt_font resource._alt_font #define list_fonts resource._list_fonts #define hush_spec resource._hush_spec #define hush_chars resource._hush_chars #define hush_chk resource._hush_chk #ifdef GREY #define use_grey resource._use_grey #endif #define use_makepk resource._use_makepk #define mf_mode resource._mf_mode #ifndef TOOLKIT EXTERN Pixel brdr_Pixel; #endif extern struct mg_size_rec { int w; int h; } mg_size[5]; EXTERN int debug INIT(0); #define DBG_BITMAP 0x1 #define DBG_DVI 0x2 #define DBG_PK 0x4 #define DBG_BATCH 0x8 #define DBG_EVENT 0x10 /* 16 */ #define DBG_OPEN 0x20 /* 32 */ #define DBG_PS 0x40 /* 64 */ #define DBG_STAT 0x80 /* 128 */ #define DBG_HASH 0x100 /* 256 */ #define DBG_PATHS 0x200 /* 512 */ #define DBG_EXPAND 0x400 /* 1024 */ #define DBG_SEARCH 0x800 /* 2048 */ #define DBG_ALL (0xffff & ~DBG_BATCH) #ifndef BDPI #define BDPI 300 #endif EXTERN int offset_x, offset_y; EXTERN unsigned int unshrunk_paper_w, unshrunk_paper_h; EXTERN unsigned int unshrunk_page_w, unshrunk_page_h; EXTERN char *dvi_name INIT(NULL); EXTERN FILE *dvi_file; /* user's file */ EXTERN char *prog; EXTERN int bak_shrink; /* last shrink factor != 1 */ EXTERN Dimension window_w, window_h; EXTERN XImage *image; EXTERN int backing_store; EXTERN int home_x, home_y; EXTERN Display *DISP; EXTERN Screen *SCRN; EXTERN GC ruleGC; EXTERN GC foreGC, highGC; EXTERN GC foreGC2; EXTERN Cursor redraw_cursor, ready_cursor; #ifdef GREY EXTERN unsigned long palette[17]; EXTERN unsigned long *pixeltbl; #endif /* GREY */ EXTERN Boolean canit INIT(False); EXTERN jmp_buf canit_env; EXTERN VOLATILE short event_counter INIT(0); #if PS EXTERN Boolean allow_can INIT(True); #else #define allow_can 0xff #endif struct WindowRec { Window win; int shrinkfactor; int base_x, base_y; unsigned int width, height; int min_x, max_x, min_y, max_y; /* for pending expose events */ }; extern struct WindowRec mane, alt, currwin; EXTERN int min_x, max_x, min_y, max_y; #define shrink_factor currwin.shrinkfactor #ifdef TOOLKIT EXTERN Widget top_level, vport_widget, draw_widget, clip_widget; #ifdef BUTTONS #define XTRA_WID 79 EXTERN Widget form_widget; #endif #else /* !TOOLKIT */ EXTERN Window top_level; #define BAR_WID 12 /* width of darkened area */ #define BAR_THICK 15 /* gross amount removed */ #endif /* TOOLKIT */ EXTERN jmp_buf dvi_env; /* mechanism to communicate dvi file errors */ EXTERN char *dvi_oops_msg; /* error message */ #if PS extern struct psprocs { void (*toggle) ARGS((void)); void (*destroy) ARGS((void)); void (*interrupt) ARGS((void)); void (*endpage) ARGS((void)); void (*drawbegin) ARGS((int, int, char *)); void (*drawraw) ARGS((char *)); void (*drawfile) ARGS((char *)); void (*drawend) ARGS((char *)); } psp, no_ps_procs; #endif /* PS */ /******************************** * Procedures * *******************************/ _XFUNCPROTOBEGIN #ifdef BUTTONS extern void create_buttons ARGS((XtArgVal)); #endif #ifdef GREY extern void init_pix ARGS((wide_bool)); #endif extern void reconfig ARGS((void)); #ifdef TOOLKIT extern void handle_key ARGS((Widget, XtPointer, XEvent *, Boolean *)); extern void handle_resize ARGS((Widget, XtPointer, XEvent *, Boolean *)); extern void handle_button ARGS((Widget, XtPointer, XEvent *, Boolean *)); extern void handle_motion ARGS((Widget, XtPointer, XEvent *, Boolean *)); extern void handle_release ARGS((Widget, XtPointer, XEvent *, Boolean *)); extern void handle_exp ARGS((Widget, XtPointer, XEvent *, Boolean *)); #endif extern void read_events ARGS((wide_bool)); extern void redraw_page ARGS((void)); extern void do_pages ARGS((void)); extern void reset_fonts ARGS((void)); extern void realloc_font ARGS((struct font *, wide_ubyte)); extern void realloc_virtual_font ARGS((struct font *, wide_ubyte)); extern Boolean load_font ARGS((struct font *)); extern struct font *define_font ARGS((FILE *, wide_ubyte, struct font *, struct font **, unsigned int, struct tn **)); extern void init_page ARGS((void)); extern void open_dvi_file ARGS((void)); extern Boolean check_dvi_file ARGS((void)); extern void put_border ARGS((int, int, unsigned int, unsigned int, GC)); #ifndef TEXXET extern long set_char ARGS((wide_ubyte)); extern long load_n_set_char ARGS((wide_ubyte)); extern long set_vf_char ARGS((wide_ubyte)); #else extern void set_char ARGS((wide_ubyte, wide_ubyte)); extern void load_n_set_char ARGS((wide_ubyte, wide_ubyte)); extern void set_vf_char ARGS((wide_ubyte, wide_ubyte)); #endif extern void draw_page ARGS((void)); extern void init_font_open ARGS((void)); extern FILE *font_open ARGS((_Xconst char *, char **, double, int *, int, char **)); extern void applicationDoSpecial ARGS((char *)); #if NeedVarargsPrototypes extern NORETURN void oops(_Xconst char *, ...); #else extern NORETURN void oops(); #endif extern char *xmalloc ARGS((unsigned, _Xconst char *)); extern void alloc_bitmap ARGS((struct bitmap *)); extern FILE *xfopen ARGS((_Xconst char *, OPEN_MODE_ARGS)); #ifdef PS_GS extern int xpipe ARGS((int *)); #endif extern unsigned long num ARGS((FILE *, int)); extern long snum ARGS((FILE *, int)); extern void read_PK_index ARGS((struct font *, wide_bool)); extern void read_GF_index ARGS((struct font *, wide_bool)); extern void read_VF_index ARGS((struct font *, wide_bool)); #if PS extern void drawbegin_none ARGS((int, int, char *)); extern void draw_bbox ARGS((void)); extern void NullProc ARGS((void)); #ifdef PS_DPS extern Boolean initDPS ARGS((void)); #endif #ifdef PS_NEWS extern Boolean initNeWS ARGS((void)); #endif #ifdef PS_GS extern Boolean initGS ARGS((void)); #endif #endif /* PS */ _XFUNCPROTOEND #define one(fp) ((unsigned char) getc(fp)) #define sone(fp) ((long) one(fp)) #define two(fp) num (fp, 2) #define stwo(fp) snum(fp, 2) #define four(fp) num (fp, 4) #define sfour(fp) snum(fp, 4)
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.