home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / TOOLS / MPAGE / MPAGE.ZIP / mp_head.h < prev    next >
Text File  |  1997-09-25  |  6KB  |  188 lines

  1. /* $Header: mp_head.h,v 2.8 89/05/25 10:42:07 mark Exp $ */
  2.  
  3. /*
  4.  * mpage:    A program to reduce pages of print so that several pages
  5.  *           of output appear on one sheet of paper.
  6.  *
  7.  * Written by:
  8.  *   ...!uunet!\                       Mark Hahn, Sr Systems Engineer
  9.  *              >pyrdc!mark            Pyramid Technology Corporation
  10.  * ...!pyramid!/                       Vienna, Va    (703)848-2050
  11.  *
  12.  *
  13.  * Copyright (c) 1988 Mark P. Hahn, Herndon, Virginia
  14.  *  
  15.  *     Permission is granted to anyone to make or distribute verbatim
  16.  *     copies of this document as received, in any medium, provided
  17.  *     that this copyright notice notice is preserved, and that the
  18.  *     distributor grants the recipient permission for further
  19.  *     redistribution as permitted by this notice.
  20.  *
  21.  */
  22.  
  23. /* $Log:    mp_head.h,v $
  24.  * Revision 2.8  89/05/25  10:42:07  mark
  25.  * changes to print a page count on stderr after the print job is queued.
  26.  * 
  27.  * Revision 2.7  89/05/25  10:25:13  mark
  28.  * add new debugging keyword for tracking the processing of postscript
  29.  * documents.
  30.  * 
  31.  * Revision 2.6  89/05/25  10:23:17  mark
  32.  * fixed typo in rcs keyword
  33.  *  */
  34.  
  35. /*
  36.  * Through-out the program comments I have tried to refer to pages a the
  37.  * logical printed page of text that gets reduced.  Sheets refer to physical
  38.  * pieces of paper.  Hence, mulitple pages appear on a sheet.  "page" is a
  39.  * logical or virtual entity, and "sheet" is physical entity.
  40.  */
  41.  
  42. char *ctime();
  43. FILE *popen();
  44. char *strcpy();
  45. char *mktemp();
  46. time_t time();
  47.  
  48. # define    TRUE        1
  49. # define    FALSE        0
  50.  
  51. # define    LINESIZE    1024
  52.  
  53. # define    FILE_EOF    1
  54. # define    FILE_MORE    2
  55.  
  56. # define    LINE_MORE    5
  57. # define    LINE_EOF_NOW    4
  58. # define    LINE_EOF    3
  59. # define    LINE_OVERPRINT    2
  60. # define    LINE_BLANK    1
  61.  
  62.  
  63. /*
  64.  * to turn on debugging, define the preprocessor macro DEBUG and set
  65.  * the variable Debug_flag to the sum of the sections to debug.
  66.  */
  67. # ifdef DEBUG
  68. # define Debug(f,s,a)    if (Debug_flag & f) printf(s,a)
  69. # define DB_GETLINE    0x0000001
  70. # define DB_ONEPAGE    0x0000002
  71. # define DB_STDIN    0x0000004
  72. # define DB_PSDOC    0x0000008
  73. # define DB_PSPAGE    0x0000010
  74. # define DB_PSCHECK    0x0000020
  75. # define DB_PSROFF    0x0000040
  76. # define DB_PSMPAGE    0x0000080
  77. # define DB_POINTS    0x0000100
  78. # define DB_POST    0x0000200
  79. # define DB_UNUSED    0x0000400
  80. extern int Debug_flag;
  81. extern int errno;
  82. # else DEBUG
  83. # define Debug(f,s,a)
  84. # endif DEBUG
  85.  
  86. /*
  87.  * defintions for sorting out types of postscript input
  88.  */
  89. # define    PS_NONE        0
  90. # define    PS_PSROFF    1
  91. # define    PS_MPAGE    2
  92. # define    PS_CONFORM    3
  93. # define    PS_OTHER    4
  94.  
  95. /*
  96.  * "Conforming" postscript flag string  (remember ps_check strips
  97.  * the "%!" flag from PS files
  98.  */
  99. # define    PS_FLAG        "PS-Adobe-"
  100.  
  101. /*
  102.  * some basic PS parameters
  103.  */
  104. extern int ps_width;    /* number of points in the X direction (8.5 inches) */
  105. extern int ps_height;    /* number of points in the Y direction (11 inches) */
  106.  
  107. /*
  108.  * a sheet describes the measurements and orientatation of a page for
  109.  * use in constructing a sheet preabmles.
  110.  */
  111. struct sheet {
  112.     int sh_cwidth;        /* number of characters across a page */
  113.     int sh_plength;        /* number of lines down a page */
  114.     int (*sh_width)();    /* postscript width across a printed page */
  115.     int (*sh_height)();    /* postscript height of a printed page */
  116.     int sh_rotate;        /* angle to rotate the page */
  117.     int (*sh_outline)();    /* text to print as outline for */
  118.                 /*    the printed sheet*/
  119.     struct    pagepoints *sh_pagepoints; /* where to put pages on */
  120.                          /*    the printed sheet */
  121. };
  122.  
  123. /*
  124.  * simple x and y coordinates for putting pages of output on printed sheet
  125.  */
  126. struct pagepoints {
  127.     int (*pp_origin_x)();
  128.     int (*pp_origin_y)();
  129. };
  130.  
  131. /* array of sheets where pages are ordered for left to right reading */
  132. extern struct sheet *left_right[];
  133.  
  134. /* arrays for sheets where pages are ordered for top to bottom reading  */
  135. extern struct sheet *up_down[];
  136.  
  137. /* definitions for aspect and reading directions */
  138. # define NORMAL        0
  139. # define LANDSCAPE    1
  140. # define UPDOWN        0
  141. # define LEFTRIGHT    1
  142.  
  143. /*
  144.  * Variables for holding the chosen options,  The defaults are set here.
  145.  * the sheetlist pointer is set to point to the array for either up/down
  146.  * or left/right reading.  This array is index by sheetorder, and then
  147.  * sheetindex.  sheetindex encodes the number of reduced pages per printed
  148.  * sheet and indexes into the sheet list (0 = 1 page, 1 = two pages, 2 =
  149.  * four pages, 3 = eight pages).
  150.  */
  151. extern struct sheet **sheetlist;/* array of sheet lists (up/down or left/right) */
  152. extern int sheetaspect;        /* either normal or landscape */
  153. extern int sheetorder;        /* up/down or left/right flag */
  154. extern int sheetindex;        /* index to number of pages of sheet */
  155. extern int pg_sheetmargin;    /* non-printable border on sheet */
  156. extern int pg_pagemargin;    /* border for pages */
  157. extern int fsize;        /* font scale size */
  158. extern int opt_pr;        /* boolean, if true use pr to format output */
  159. extern int opt_lines;        /* number of lines to fit on an reduced page */
  160. extern int opt_width;        /* number of columns to fit on reduced page */
  161. extern int opt_doheader;    /* have a head for pr's -h option */
  162. extern int opt_a4;        /* sheets are A4 sized, european paper */
  163. extern int opt_outline;        /* print a nice outline around pages */
  164. extern int opt_verbose;        /* print a count of pages sent to printer */
  165. extern char opt_header[LINESIZE]; /* the header for pr's -h option */
  166. extern char outcommand[LINESIZE]; /* the command which is the output filter */
  167. extern char printer[LINESIZE];    /* the printer (argument to lpr -P??) */
  168.  
  169. /*
  170.  * various global information
  171.  */
  172. extern char MPAGE[];        /* program name */
  173. extern int ps_pagenum;        /* current page count */
  174. extern char usage[];        /* usage string */
  175.  
  176. /*
  177.  * function declarations for the page point computation functions
  178.  */
  179. int xbase1(), xbase2();
  180. int ybase1(), ybase2(), ybase3(), ybase4();
  181. int ytop1(), ytop2(), ytop3(), ytop4();
  182. int xwid1(), xwid2(), xwid4(), xwid8();
  183. int yht1(), yht2(), yht4(), yht8();
  184.  
  185. static char *rcs_header_id =
  186.     "@(#)    $Header: mp_head.h,v 2.8 89/05/25 10:42:07 mark Exp $";
  187.  
  188.