Tizen 2.1 base
[platform/upstream/hplip.git] / prnt / hpijs / globals.cpp
1 /*****************************************************************************\
2   globals.cpp : Global functions for APDK
3
4   Copyright (c) 1996 - 2001, Hewlett-Packard Co.
5   All rights reserved.
6
7   Redistribution and use in source and binary forms, with or without
8   modification, are permitted provided that the following conditions
9   are met:
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.
18
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 \*****************************************************************************/
30
31
32 #include "header.h"
33 // Functions used in Translator
34
35 APDK_BEGIN_NAMESPACE
36
37 /////////////////////////////////////////////////////////////////////////
38 int stringlen(const char*s)
39 // may not be in some systems
40 { int c=0;
41   while (s[c++]) ;
42   return c-1;
43 }
44 // utilities to save overhead for copying escape sequences
45
46 // notice that the input is assumed to be zero-terminated, but the results
47 // generated are not, in keeping with PCL
48
49 BYTE EscCopy(BYTE *dest, const char *s,int num, char end)
50 {
51   dest[0]=ESC; strcpy((char*)&dest[1],s);
52   BYTE k = stringlen(s)+1;
53   BYTE i = sprintf((char *)&dest[k],"%d",num);
54   dest[k+i] = end;
55   return (k+i+1);
56 }
57 BYTE EscAmplCopy(BYTE *dest, int num, char end)
58 {
59   dest[0]=ESC; dest[1]='&';dest[2]='l';
60   BYTE i = sprintf((char *)&dest[3],"%d",num);
61   dest[3+i] = end;
62   return (4+i);
63 }
64
65 MediaSize PaperToMediaSize(PAPER_SIZE psize)
66 {
67     switch(psize)
68     {
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;
94 #endif
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;
99     }
100 }
101
102 PAPER_SIZE MediaSizeToPaper(MediaSize msize)
103 {
104     switch(msize)
105     {
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;
129 #endif
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;
134     }
135 }
136 \r
137 MediaType MediaTypeToPcl (MEDIATYPE eMediaType)\r
138 {\r
139     switch (eMediaType)\r
140     {\r
141         case MEDIA_PLAIN:\r
142                 return mediaPlain;\r
143             case MEDIA_PREMIUM:\r
144                 return mediaSpecial;\r
145             case MEDIA_PHOTO:\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
152             case MEDIA_AUTO:\r
153                 return mediaAuto;\r
154             case MEDIA_CDDVD:\r
155                 return mediaCDDVD;\r
156         case MEDIA_BROCHURE:\r
157             return mediaBrochure;\r
158             default:\r
159                 return mediaPlain;\r
160     }\r
161 }\r
162
163 void AsciiHexToBinary(BYTE* dest, char* src, int count)
164 {
165     int i;
166     BYTE bitPattern;
167     for (i=0; i<count ; i++)
168     {
169         switch (src[i])
170         {
171             case '0':
172                 bitPattern = 0x00;
173                 break;
174             case '1':
175                 bitPattern = 0x01;
176                 break;
177             case '2':
178                 bitPattern = 0x02;
179                 break;
180             case '3':
181                 bitPattern = 0x03;
182                 break;
183             case '4':
184                 bitPattern = 0x04;
185                 break;
186             case '5':
187                 bitPattern = 0x05;
188                 break;
189             case '6':
190                 bitPattern = 0x06;
191                 break;
192             case '7':
193                 bitPattern = 0x07;
194                 break;
195             case '8':
196                 bitPattern = 0x08;
197                 break;
198             case '9':
199                 bitPattern = 0x09;
200                 break;
201             case 'a':
202             case 'A':
203                 bitPattern = 0x0a;
204                 break;
205             case 'b':
206             case 'B':
207                 bitPattern = 0x0b;
208                 break;
209             case 'c':
210             case 'C':
211                 bitPattern = 0x0c;
212                 break;
213             case 'd':
214             case 'D':
215                 bitPattern = 0x0d;
216                 break;
217             case 'e':
218             case 'E':
219                 bitPattern = 0x0e;
220                 break;
221             case 'f':
222             case 'F':
223                 bitPattern = 0x0f;
224                 break;
225             default:
226                 // default case should never happen so abort during debugging
227                 ASSERT(0);
228                 bitPattern = 0;
229                 break;
230         }
231
232         if ((i%2) == 0)
233         {
234             dest[i/2] = bitPattern << 4;
235         }
236         else
237         {
238             dest[i/2] |= bitPattern;
239         }
240     }
241 } //AsciiHexToBinary
242
243 #ifdef HAVE_LIBDL
244 #include <dlfcn.h>
245
246 void *LoadPlugin (const char *szPluginName)
247 {
248     FILE    *fp;
249     char    szLine[256];
250     int     i;
251     void    *ptemp = NULL;
252     char    *p = NULL;
253     int     bFound = 0;
254     if ((fp = fopen ("/etc/hp/hplip.conf", "r")) == NULL)
255     {
256         return NULL;
257     }
258     while (!feof (fp))
259     {
260         if (!fgets (szLine, 256, fp))
261         {
262             break;
263         }
264         if (!bFound && strncmp (szLine, "[dirs]", 6))
265             continue;
266         bFound = 1;
267         if (szLine[0] < ' ')
268             break;
269         if (!strncmp (szLine, "home", 4))
270         {
271             i = strlen (szLine);
272             while (i > 0 && szLine[i] < ' ')
273                 szLine[i--] = '\0';
274             p = szLine + 4;
275             while (*p && *p != '/')
276                 p++;\r
277             i = sizeof(szLine) - (strlen (p) + (p - szLine));
278             snprintf (p+strlen (p), i, "/prnt/plugins/%s", szPluginName);
279             ptemp = dlopen (p, RTLD_LAZY);
280         }
281     }
282     fclose (fp);
283     return ptemp;
284 }
285 #endif // HAVE_LIBDL
286
287 APDK_END_NAMESPACE
288