1 #include "hpscat.h"
2 #include "paper.h"
3 #include <string.h>
4 #include <stdlib.h>
5
6 #define MIN(a,b) ( ((a) > (b)) ? (b) : (a) )
7 #define MAX(a,b) ( ((a) < (b)) ? (b) : (a) )
8
9 /* names and dimensions(width and height) of paper types defined in paper.h
10 unit is in standard Postscript point(1 PS point = 1/72 inch.
11 */
12
13 PAPERSIZE papersize[user+1]= { {"a3",842,1190}, {"a4",595,842}, {"a5",420,595},
14 {"b4",729,1032},{"b5",516,729},
15 {"letter",612,792},{"10x14",720,1008},
16 {"legal",612,1008},{"executive",540,720},
17 {"folio",612,936},{"quarto",610,780},
18 {"statement",396,612},{"ledger",1224,792},
19 {"tabloid",792,1224}, {"c5",459,649},
20 {"user",0,0} };
21
22
23
24 /* symbol and conversion factor to standard PS point(1 PS point = 1/72 inch)
25 of length units defined in paper.h */
26 UNITDEF unit[null+1]={ {"mm",2.835}, {"cm",28.35},{"in",72.0},
27 {"pt",1.0},{"",1.0} };
28
29 int s_width;
30 int l_width,l_height,l_lm1,l_lm2,l_bm,l_tm;
31 int l3_width,l3_height,l3_lm1,l3_lm2,l3_lm3,l3_bm,l3_tm;
32 int p_width,p_height,p_lm,p_bm,p_tm;
33 int p2_width,p2_height,p2_lm1,p2_lm2,p2_bm,p2_tm;
34
35
36
37
a2point(char * token)38 int a2point(char *token)
39 {
40
41 char *a;
42 int n = strlen(token);
43
44 UNIT i;
45
46 for ( i = milimeter ; i< null; i++)
47 if ( !strcmp(token+(strlen(token)- strlen(unit[i].sym)), unit[i].sym)){
48 n -= strlen(unit[i].sym);
49 break;
50 }
51
52 a = (char *) malloc( n + 1);
53 strncpy (a,token, n);
54 a[n]='\0';
55 return (int) ( (float) atof( a ) * unit[i].ratio ) ;
56 }
57
setmargin()58 void setmargin()
59 {
60
61
62 /*
63 l_lm1 = (int) (papersize[paper].height * LLM1_ratio);
64 l_width = (int) (papersize[paper].height * LW_ratio);
65 l_lm2 = l_lm1 + l_width;
66 */
67
68 l_lm1 = MAX ( (int) (papersize[paper].height * LLM1_ratio), min_lm);
69 l_width = ( papersize[paper].height - l_lm1 * 2 ) / 2 ;
70 l_lm2 = l_lm1 + l_width;
71
72 /* See hpscat.h for HOR_SCALE_FAC */
73
74 l_lm1 = (int) (l_lm1 * 1.0 / HOR_SCALE_FAC);
75 l_width = (int) (l_width * 1.0 / HOR_SCALE_FAC);
76 l_lm2 = (int) ( l_lm2 * 1.0 / HOR_SCALE_FAC);
77
78
79 l_bm = MAX ( (int) (papersize[paper].width * LBM_ratio), min_bm) ;
80 l_bm = (int) (l_bm - ((noheader && notitle) * HEAD_height +
81 nofooter * FOOT_height) / 2. / 1.3 );
82 l_height = papersize[paper].width - (int) (l_bm * ( 1. + TMBM_ratio)+0.5) ;
83 l_tm = l_bm + l_height;
84
85
86 /*
87 l_bm = (int) (papersize[paper].width * LBM_ratio);
88 l_height = (int) (papersize[paper].width * LH_ratio) ;
89 l_tm = l_bm + l_height;
90 */
91
92
93
94 l3_width = (int) (l_width * 2.0/3.0);
95 l3_height = l_height;
96
97 l3_lm1 = l_lm1;
98 l3_lm2 = l3_lm1 + l3_width;
99 l3_lm3 = l3_lm2 + l3_width;
100 l3_bm = l_bm;
101 l3_tm = l_tm;
102
103 p_lm = MAX( (int) (papersize[paper].width * PLM_ratio), min_lm);
104 p_width = papersize[paper].width - p_lm * 2;
105 p_lm = (int) (p_lm * 1.0 / HOR_SCALE_FAC);
106 p_width = (int) (p_width * 1.0 / HOR_SCALE_FAC);
107
108 /*
109 p_width = (int) (papersize[paper].width * PW_ratio);
110 p_lm = (int) (papersize[paper].width * PLM_ratio);
111 */
112
113 p_bm = MAX( (int) (papersize[paper].height * PBM_ratio), min_bm) ;
114 p_bm = p_bm - ((noheader && notitle) * HEAD_height
115 + nofooter * FOOT_height) / 2;
116 p_height = papersize[paper].height - (int) (p_bm * ( 1. + TMBM_ratio)+ 0.5) ;
117 p_tm = p_height + p_bm;
118
119 /*
120 p_height = (int) (papersize[paper].height * PH_ratio);
121 p_bm = (int) (papersize[paper].height * PBM_ratio);
122 p_tm = p_bm + p_height;
123 */
124
125 p2_width = (int) (p_width/2.0);
126 p2_height = p_height;
127
128 p2_lm1 = p_lm;
129 p2_lm2 = p2_lm1+p2_width;
130 p2_bm = p_bm;
131 p2_tm = p_tm;
132
133 }
134