ftp.nice.ch/pub/next/tools/printer/lj2ps.s.tar.gz#/lj2ps/lj.h

This is lj.h in view mode; [Download] [Up]

/*
** Project:        lj2ps
** File:	   lj.h
**
** Author:	   Christopher Lishka
** Organization:   Wisconsin State Laboratory of Hygiene
**		   Data Processing Dept.
**
** Copyright (C) 1990 by Christopher Lishka.
**
** This program 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 1, or (at your option)
** any later version.
**
** This program 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 this program; if not, write to the Free Software
** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#ifndef LJ_H
#define LJ_H

  /* Global constants
  */
  /* Implementation constraints */
#define LJ_STRING_SIZE  256
#define LJ_ERROR  0.00001	/* Accuracy of floating point numbers */
  /* Default scaling constants */
#define LJ_DEFAULT_SCALE_X   1.0000
#if defined (NeXT)
	#define	LJ_DEFAULT_SCALE_Y 1.0000
#else
	#define LJ_DEFAULT_SCALE_Y   0.99
#endif
  /* Default offset constants */
#define LJ_DEFAULT_OFFSET_X  0.2500
#define LJ_DEFAULT_OFFSET_Y  0.0000
  /* Measurements */
#define in   1			/* Inches (base unit of measurement) */
#define dt 300			/* Dots per inch */
#define dp 720			/* Decipoints */
#define hi 120			/* Horizontal Index Unit */
#define vi  48			/* Vertical Index Unit */
#define pt  72			/* Points */
  /* Tab stops */
#define LJ_TAB_WIDTH 8		/* Tabs occur every eight characters */
  /* Internal codes */
#define LJ_UL_OFF             100 /* Underline codes */
#define LJ_UL_ON              101
#define LJ_UL_FLOAT           102
#define LJ_FI_RULE            200 /* Fill codes      Rule */
#define LJ_FI_2               201 /*              2% gray */
#define LJ_FI_10              202 /*             10% gray */
#define LJ_FI_15              203 /*             15% gray */
#define LJ_FI_30              204 /*             30% gray */
#define LJ_FI_45              205 /*             45% gray */
#define LJ_FI_70              206 /*             70% gray */
#define LJ_FI_90              207 /*             90% gray */
#define LJ_FI_100             208 /*            100% gray */
#define LJ_FI_LINE_H          209 /*     Horizontal lines */
#define LJ_FI_LINE_V          210 /*     Vertical lines */
#define LJ_FI_DIAG_1          211 /*     Diagonals 1 */
#define LJ_FI_DIAG_2          212 /*     Diagonals 2 */
#define LJ_FI_GRID_SQ         213 /*     Square grid */
#define LJ_FI_GRID_DIAG       214 /*     Diagonal grid */
#define LJ_LT_NORM            301 /* Line termination    normal */
#define LJ_LT_CR              302 /* cr=cr+lf lf=lf ff=ff */
#define LJ_LT_LF_FF           303 /* cr=cr lf=cr+lf ff=cr+ff */
#define LJ_LT_CR_LF_FF        304 /* cr=cr+lf lf=cr+lf ff=cr+ff */
#define LJ_PS_TRAY_1          301 /* Paper source */
#define LJ_PS_TRAY_2          302
#define LJ_PS_MANUAL          303
#define LJ_PS_MANUAL_ENVELOPE 304
#define LJ_OR_PORTRAIT        401 /* Orientation */
#define LJ_OR_LANDSCAPE       402
#define LJ_SS_0B              501 /* Symbol set: bit vector entries */
#define LJ_SS_0N              502
#define LJ_SS_0U              503
#define LJ_SS_1U              504
#define LJ_SS_8U              505
#define LJ_SS_10U             506
#define LJ_SS_11U             507
#define LJ_TF_HELV            601 /* Typefaces */
#define LJ_TF_TIMES           602
#define LJ_TF_PRES            603
#define LJ_TF_LP              604
#define LJ_TF_COUR            605
#define LJ_SP_PROPORTIONAL    701 /* Spacing */
#define LJ_SP_FIXED           702
#define LJ_ST_UPRIGHT         801 /* Font style */
#define LJ_ST_ITALIC          802
#define LJ_FT_PRIMARY         901 /* Primary/secondary current font */
#define LJ_FT_SECONDARY       902
#define LJ_PS_EXECUTIVE       1001 /* Page size codes */
#define LJ_PS_LETTER          1002
#define LJ_PS_LEGAL           1003
#define LJ_PS_A4              1004
#define LJ_PS_MONARCH         1005
#define LJ_PS_COMMERCIAL10    1006
#define LJ_PS_INTERNATIONALDL 1007
#define LJ_PS_INTERNATIONALC5 1008
#define LJ_FS_INTERNAL        1101 /* Font sources */
#define LJ_FS_LEFT            1102
#define LJ_FS_RIGHT           1103
#define LJ_FS_SOFT            1104

  /* Global structure and type definitions
  */

  /* Data required for a laserjet font */
typedef struct {
    /* Identifier fields */
  int     source;		/* Font source: where the font is located */
  int     number;		/* Font number */
     /* Scaling fields */
  int     scale;		/* True if scaling should be performed */
  double  scale_x;		/* % to scale in x direction */
  double  scale_y;		/* % to scale in y direction */
    /* LaserJet font ID fields */
  int     symbol_set;		/* The symbol set of the font */
  int     spacing;		/* Proportional/fixed */
  double  pitch;		/* (Only valid for fixed width fonts!) */
  double  point_size;		/* Height of the character */
  int     style;		/* Upright/italic */
  int     weight;		/* Stroke weight: -3 to +3 */
  int     typeface;		/* Which typeface to use */
  char    ps_name[LJ_STRING_SIZE]; /* The postscript font used for emulation */
  double  width;		/* Width of a character */
} ljfont;
  /* Data required to determine paper size */
typedef struct {
  int     code;			/* Type of paper: letter, legal, A4, etc. */
  double  width;		/* How wide (inches) */
  double  height;		/* How high (inches) */
  int     default_form;		/* Default value for form variable */
  double  unprint_top;		/* Unprintable region - top */
  double  unprint_bottom;	/* Unprintable region - bottom */
  double  unprint_left;		/* Unprintable region - left */
  double  unprint_right;	/* Unprintable region - right */
} psize;

  /* Global variables
  */
  /* Front panel variables */
extern int    panel_copies;	/*  Front panel: Copies */
extern int    panel_manual_feed; /* Front panel: Manual Feed */
extern int    panel_font_source; /* Front panel: Font Source */
extern int    panel_font_number; /* Front panel: Font Number */
extern int    panel_orientation; /* Front panel: Font Source, Font Number */
extern int    panel_form;	/*  Front panel: Form (i.e. lpi) */
  /* Postscript specific variables */
extern double ps_scale_x;	/* PS: scale in x direction */
extern double ps_scale_y;	/* PS: scale in y direction */
extern double ps_offset_x;	/* PS: offset in x direction */
extern double ps_offset_y;	/* PS: offset in y direction */
  /* Job control */
extern int     copies;		/* Number of copies */

#if defined (NeXT)
	extern int	allow_page_reversing;
#endif

  /* Page control */
extern int     paper_source;	/* Where the paper is coming from */
extern int     orientation;	/* Portrait/landscape	      (code)	  */
extern psize   page_size;	/* Type of paper being used   (structure) */
extern double  page_height;	/* Height of physical page    (inches)	  */
extern double  page_width;	/* Width of physical page     (inches)	  */
extern double  char_height;	/* Char height (~= VMI)	      (inches)	  */
extern double  char_width;	/* Char width  (~= HMI)	      (inches)	  */
extern double  margin_top;	/* Top margin                 (inches)	  */
extern int     text_length;	/* Text length		      (lines)	  */
extern double  text_height;	/* Text height                (inches)	  */
extern double  margin_left;	/* Left margin                (inches)    */
extern double  text_width;	/* Text width                 (inches)	  */
extern int     perf_skip;	/* 1 if perforation skip is on */
extern int     line_term;	/* Current line termination mode */

  /* Fonts */
extern ljfont  font_p;		/* Primary font */
extern ljfont  font_s;		/* Secondary font */
extern int     underline;	/* Underline mode */
  /* Font management */
extern int     font_ID;		/* Current font ID */
extern int     char_code;	/* Current character code */
  /* Raster graphics */
extern int     resolution;	/* Current graphics resolution */
extern int     margin_graphics;	/* Graphics left margin, in dots? */
  /* Rectangular area fill */
extern int     rect_size_h;	/* Horizontal rectangle size */
extern int     rect_size_v;	/* Vertical rectangle size */
extern int     fill_ID;		/* Current area fill ID */
  /* Macro */
extern int     macro_ID;	/* Current macro ID */
  /* Troubleshooting commands */
extern int     eol_wrap;	/* End-of-line wrap on/off */
extern int     display_func;	/* Display functions on/off */
  /* Implementation variables */
extern double  current_x;	/* Current X position         (inches)	  */
extern double  current_y;	/* Current Y position         (inches)	  */
extern int     current_line;	/* Current line being printed (lines)     */
extern int     current_font;	/* Primary or secondary	      (code)	  */
extern int     empty_line;	/* True if line is empty      (boolean)   */
extern int     empty_text;	/* True if text is empty      (boolean)   */
extern int     empty_page;	/* True if page is empty      (boolean)	  */
extern double  compress_width;	/* Compression in x axis      (%)	  */
extern double  compress_height;	/* Compression in y axis      (%)	  */
extern double  offset_width;	/* Offset of x axis           (inches)    */
extern double  offset_height;	/* Offset of y axis           (inches)    */

  /* Global macro definitions
  */
  /* Conversion macros */
#define dt2in(x)  (x/dt)	/* Dots to inches */
#define in2dt(x)  (x*dt)	/* Inches to dots */
#define dp2in(x)  (x/dp)	/* Decipoints to inches */
#define in2dp(x)  (x*dp)	/* Inches to decipoints */
#define hi2in(x)  (x/hi)	/* Horizontal index units to inches */
#define in2hi(x)  (x*hi)	/* Inches to horizontal index units */
#define vi2in(x)  (x/vi)	/* Vertical index units to inches */
#define in2vi(x)  (x*vi)	/* Inches to vertical index units */
#define pt2in(x)  (x/pt)	/* Points to inches */
#define in2pt(x)  (x*pt)	/* Inches to points */
#define co2in(x)  (x*char_width) /* Columns to inches */
#define in2co(x)  (x/char_width) /* Inches to columns */
#define ro2in(x)  (x*char_height) /* Rows to inches */
#define in2ro(x)  (x/char_height) /* Inches to rows */
  /* Emulation macros */
  /* Text buffer macros */
#define lj_text_begin()   \
  ( empty_text = 1 )
#define lj_text_add(F, X) \
  ( (empty_text?fprintf((F),"(%s",X):fputs((X),(F))), \
   empty_text = 0, empty_line = 0, empty_page = 0 )
#define lj_text_end(F) \
  ( (!empty_text) \
   ? fputs(")S ",F) \
   : 0)
  /* Cursor positioning macros */
#define lj_cursor_abs(F, X, Y) \
  (current_x = (X), current_y = (Y), \
   fprintf(F, "%.4f %.4f M ", current_x, current_y))
#define lj_cursor_hor_abs(F, X) \
  (current_x = (X), fprintf(F, "%.4f %.4f M ", current_x, current_y))
#define lj_cursor_hor_rel(F, dX) \
  (fprintf(F, "%.4f HRM ", (dX)))
#define lj_cursor_ver_abs(F, Y) \
  (current_y = (Y), fprintf(F, "%.4f VM ", current_y))
#define lj_cursor_ver_rel(F, dY) \
  (current_y -= (dY), fprintf(F, "%.4f VM ", current_y))
  /* Font macros */
#define lj_set_font(Z, X) \
  ( char_width = (X).width, \
   ( (X).scale \
   ? fprintf((Z), "/%s %.4f %.4f FS ", (X).ps_name, \
	     pt2in((X).point_size) * (X).scale_x, \
	     pt2in((X).point_size) * (X).scale_y) \
   : fprintf((Z), "/%s %.4f F ", \
	     (X).ps_name, \
	     pt2in((X).point_size)) ) )
  /* Underlining macros */
#define lj_undl_begin(F)  (underline = LJ_UL_ON,  fputs("US ", (F)))
#define lj_undl_mark(F) \
  ( (underline == LJ_UL_ON) \
   ? (fputs("US ", (F))) \
   : 0 )
#define lj_undl_flush(F) \
  ( (underline == LJ_UL_ON) \
   ? (fputs("UE ", (F))) \
   : 0 )
#define lj_undl_end(F)    (underline = LJ_UL_OFF, fputs("UE ", (F)))
  /* Number of copies */
#define lj_copies(F, C) \
  ( fprintf((F), "/#copies %d def ", (C)) )

  /* Global functions
  */
extern void  lj_factory_setup(); /* Reset to factory defaults */
extern void  lj_startup();	/* Do before the virtual LJ is ready... */
extern void  lj_shutdown();	/* Do after the virtual LJ is shutdown... */
extern void  lj_page_begin();	/* Start a new page */
extern void  lj_page_end();	/* End the current page */
/*     macro lj_text_begin();*/ /* Start text */
/*     macro lj_text_add(); */  /* Add text to the buffer */
/*     macro lj_text_end(); */  /* End text */
/*     macro lj_cursor_abs();*/ /* Absolute X,Y cursor positioning */
/*     macro lj_cursor_hor_abs(); */ /* Absolute X cursor positioning */
/*     macro lj_cursor_hor_rel(); */ /* Relative X cursor positioning */
/*     macro lj_cursor_ver_abs(); */ /* Absolute Y cursor positioning */
/*     macro lj_cursor_ver_rel(); */ /* Relative Y cursor positioning */
/*     macro lj_set_font(); */  /* Use a new font to print the text */
/*     macro lj_undl_begin();*/	/* Start underlining */
/*     macro lj_undl_mark();*/  /* Mark the start of a new underline */
/*     macro lj_undl_flush();*/	/* Flush the current underline buffer */
/*     macro lj_undl_end(); */	/* End underlining */
/*     macro lj_copies(); */    /* Set the number of copies */
extern void  lj_nl();		/* Print a newline */
extern void  lj_reset();	/* Reset the printer to default state */
extern int   lj_paper_size();	/* Get the dimensions of paper and envelopes */

#endif

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