1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 23 /* All Rights Reserved */ 24 25 26 #ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.9 */ 27 /* EMACS_MODES: !fill, lnumb, !overwrite, !nodelete, !picture */ 28 29 #include "string.h" 30 #include "stdlib.h" 31 32 #include "lp.h" 33 #include "lp.set.h" 34 35 extern char *tparm(); 36 37 short output_res_char = -1, 38 output_res_line = -1, 39 output_res_horz_inch = -1, 40 output_res_vert_inch = -1; 41 42 /** 43 ** set_pitch() 44 **/ 45 46 int 47 #if defined(__STDC__) 48 set_pitch ( 49 char * str, 50 int which, 51 int putout 52 ) 53 #else 54 set_pitch (str, which, putout) 55 char *str; 56 int which, 57 putout; 58 #endif 59 { 60 double xpi; 61 62 int ixpi; 63 64 short *output_res_p, 65 *output_res_inch_p; 66 67 unsigned short xpi_changes_res; 68 69 char *rest, 70 *change_pitch, 71 *change_res, 72 *p; 73 74 75 if (which == 'H') { 76 77 tidbit ((char *)0, "cpi", &change_pitch); 78 tidbit ((char *)0, "chr", &change_res); 79 80 output_res_inch_p = &output_res_horz_inch; 81 if (output_res_horz_inch == -1) 82 tidbit ((char *)0, "orhi", output_res_inch_p); 83 84 output_res_p = &output_res_char; 85 if (output_res_char == -1) 86 tidbit ((char *)0, "orc", output_res_p); 87 88 tidbit ((char *)0, "cpix", &xpi_changes_res); 89 90 } else { 91 92 tidbit ((char *)0, "lpi", &change_pitch);; 93 tidbit ((char *)0, "cvr", &change_res);; 94 95 output_res_inch_p = &output_res_vert_inch; 96 if (output_res_vert_inch == -1) 97 tidbit ((char *)0, "orvi", output_res_inch_p); 98 99 output_res_p = &output_res_line; 100 if (output_res_line == -1) 101 tidbit ((char *)0, "orl", output_res_p); 102 103 tidbit ((char *)0, "lpix", &xpi_changes_res);; 104 105 } 106 107 xpi = strtod(str, &rest); 108 if (which == 'H' && STREQU(str, NAME_PICA)) 109 ixpi = R(xpi = 10); 110 111 else if (which == 'H' && STREQU(str, NAME_ELITE)) 112 ixpi = R(xpi = 12); 113 114 else if ( 115 which == 'H' 116 && ( 117 STREQU(str, NAME_COMPRESSED) 118 || xpi >= N_COMPRESSED 119 ) 120 ) { 121 if (change_pitch) { 122 123 for (ixpi = MAX_COMPRESSED; ixpi; ixpi--) 124 if ((p = tparm(change_pitch, ixpi)) && *p) 125 break; 126 if (!ixpi) 127 ixpi = 10; 128 xpi = (double)ixpi; 129 130 } else if (change_res && *output_res_inch_p != -1) { 131 132 for (xpi = MAX_COMPRESSED; xpi >= 1.; xpi -= 1.) 133 if ( 134 (p = tparm(change_res, R(*output_res_inch_p / xpi))) 135 && *p 136 ) 137 break; 138 if (xpi < 1.) 139 xpi = 10.; 140 ixpi = R(xpi); 141 142 } else 143 return (E_FAILURE); 144 145 } else { 146 147 if (xpi <= 0) 148 return (E_BAD_ARGS); 149 150 switch (*rest) { 151 case ' ': 152 case 0: 153 break; 154 case 'c': 155 /* 156 * Convert to [lines|chars] per inch. 157 */ 158 xpi *= 2.54; 159 /* fall through */ 160 case 'i': 161 break; 162 default: 163 return (E_BAD_ARGS); 164 } 165 166 ixpi = R(xpi); 167 168 } 169 170 if ( 171 *output_res_inch_p != -1 172 && *output_res_p != -1 173 && R(*output_res_inch_p / (double)*output_res_p) == ixpi 174 ) 175 return (E_SUCCESS); 176 177 else if ( 178 change_pitch 179 && (p = tparm(change_pitch, ixpi)) 180 && *p 181 ) { 182 183 if (putout) 184 putp (p); 185 if (xpi_changes_res) { 186 if (*output_res_inch_p != -1) 187 *output_res_inch_p = R(*output_res_p * xpi); 188 } else { 189 if (*output_res_p != -1) 190 *output_res_p = R(*output_res_inch_p / xpi); 191 } 192 return (E_SUCCESS); 193 194 } else if ( 195 change_res 196 && *output_res_inch_p != -1 197 && (p = tparm(change_res, R(*output_res_inch_p / xpi))) 198 && *p 199 ) { 200 201 if (putout) 202 putp (p); 203 if (*output_res_p != -1) 204 *output_res_p = R(*output_res_inch_p / xpi); 205 return (E_SUCCESS); 206 207 } else 208 209 return (E_FAILURE); 210 } 211