1 /*****************************************************************************\
2 globals.cpp : Global functions for APDK
4 Copyright (c) 1996 - 2001, Hewlett-Packard Co.
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions
10 1. Redistributions of source code must retain the above copyright
11 notice, this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15 3. Neither the name of Hewlett-Packard nor the names of its
16 contributors may be used to endorse or promote products derived
17 from this software without specific prior written permission.
19 THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
20 WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
22 NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
24 TO, PATENT INFRINGEMENT; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
25 OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26 ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 \*****************************************************************************/
33 // Functions used in Translator
37 /////////////////////////////////////////////////////////////////////////
38 int stringlen(const char*s)
39 // may not be in some systems
44 // utilities to save overhead for copying escape sequences
46 // notice that the input is assumed to be zero-terminated, but the results
47 // generated are not, in keeping with PCL
49 BYTE EscCopy(BYTE *dest, const char *s,int num, char end)
51 dest[0]=ESC; strcpy((char*)&dest[1],s);
52 BYTE k = stringlen(s)+1;
53 BYTE i = sprintf((char *)&dest[k],"%d",num);
57 BYTE EscAmplCopy(BYTE *dest, int num, char end)
59 dest[0]=ESC; dest[1]='&';dest[2]='l';
60 BYTE i = sprintf((char *)&dest[3],"%d",num);
65 MediaSize PaperToMediaSize(PAPER_SIZE psize)
69 case LETTER: return sizeUSLetter; break;
70 case LEGAL: return sizeUSLegal; break;
71 case A4: return sizeA4; break;
72 case PHOTO_SIZE: return sizePhoto; break;
73 case CARD_4x6: return sizePhoto;
74 case A6: return sizeA6; break;
75 case A6_WITH_TEAR_OFF_TAB: return sizeA6;
76 case B4: return sizeB4; break;
77 case B5: return sizeB5; break;
78 case OUFUKU: return sizeOUFUKU; break;
79 case HAGAKI: return sizeHAGAKI; break;
80 #ifdef APDK_EXTENDED_MEDIASIZE
81 case A3: return sizeA3; break;
82 case A5: return sizeA5; break;
83 case LEDGER: return sizeLedger; break;
84 case SUPERB_SIZE: return sizeSuperB; break;
85 case EXECUTIVE: return sizeExecutive; break;
86 case FLSA: return sizeFLSA; break;
87 case CUSTOM_SIZE: return sizeCustom; break;
88 case ENVELOPE_NO_10: return sizeNum10Env; break;
89 case ENVELOPE_A2: return sizeA2Env; break;
90 case ENVELOPE_C6: return sizeC6Env; break;
91 case ENVELOPE_DL: return sizeDLEnv; break;
92 case ENVELOPE_JPN3: return size3JPNEnv; break;
93 case ENVELOPE_JPN4: return size4JPNEnv; break;
95 case PHOTO_5x7: return size5x7; break;
96 case CDDVD_80: return sizeCDDVD80; break;
97 case CDDVD_120: return sizeCDDVD120; break;
98 default: return sizeUSLetter; break;
102 PAPER_SIZE MediaSizeToPaper(MediaSize msize)
106 case sizeUSLetter: return LETTER; break;
107 case sizeUSLegal: return LEGAL; break;
108 case sizeA4: return A4; break;
109 case sizePhoto: return PHOTO_SIZE; break;
110 case sizeA6: return A6; break;
111 case sizeB4: return B4; break;
112 case sizeB5: return B5; break;
113 case sizeOUFUKU: return OUFUKU; break;
114 case sizeHAGAKI: return HAGAKI; break;
115 #ifdef APDK_EXTENDED_MEDIASIZE
116 case sizeA3: return A3; break;
117 case sizeA5: return A5; break;
118 case sizeLedger: return LEDGER; break;
119 case sizeSuperB: return SUPERB_SIZE; break;
120 case sizeExecutive: return EXECUTIVE; break;
121 case sizeFLSA: return FLSA; break;
122 case sizeCustom: return CUSTOM_SIZE; break;
123 case sizeNum10Env: return ENVELOPE_NO_10; break;
124 case sizeA2Env: return ENVELOPE_A2; break;
125 case sizeC6Env: return ENVELOPE_C6; break;
126 case sizeDLEnv: return ENVELOPE_DL; break;
127 case size3JPNEnv: return ENVELOPE_JPN3; break;
128 case size4JPNEnv: return ENVELOPE_JPN4; break;
130 case size5x7: return PHOTO_5x7; break;
131 case sizeCDDVD80: return CDDVD_80; break;
132 case sizeCDDVD120: return CDDVD_120; break;
133 default: return UNSUPPORTED_SIZE; break;
137 MediaType MediaTypeToPcl (MEDIATYPE eMediaType)
\r
139 switch (eMediaType)
\r
143 case MEDIA_PREMIUM:
\r
144 return mediaSpecial;
\r
146 case MEDIA_ADVANCED_PHOTO:
\r
147 return mediaGlossy;
\r
148 case MEDIA_TRANSPARENCY:
\r
149 return mediaTransparency;
\r
150 case MEDIA_HIGHRES_PHOTO:
\r
151 return mediaHighresPhoto;
\r
156 case MEDIA_BROCHURE:
\r
157 return mediaBrochure;
\r
163 void AsciiHexToBinary(BYTE* dest, char* src, int count)
167 for (i=0; i<count ; i++)
226 // default case should never happen so abort during debugging
234 dest[i/2] = bitPattern << 4;
238 dest[i/2] |= bitPattern;
246 void *LoadPlugin (const char *szPluginName)
254 if ((fp = fopen ("/etc/hp/hplip.conf", "r")) == NULL)
260 if (!fgets (szLine, 256, fp))
264 if (!bFound && strncmp (szLine, "[dirs]", 6))
269 if (!strncmp (szLine, "home", 4))
272 while (i > 0 && szLine[i] < ' ')
275 while (*p && *p != '/')
277 i = sizeof(szLine) - (strlen (p) + (p - szLine));
278 snprintf (p+strlen (p), i, "/prnt/plugins/%s", szPluginName);
279 ptemp = dlopen (p, RTLD_LAZY);