source: trunk/dll/uudecode.c@ 204

Last change on this file since 204 was 204, checked in by root, 20 years ago

Drop unused code

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.0 KB
Line 
1
2/***********************************************************************
3
4 $Id: uudecode.c 204 2005-06-08 05:57:53Z root $
5
6 uudecode
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2005 Steven H. Levine
10
11 06 Jun 05 SHL Indent -i2
12 06 Jun 05 SHL Drop unused code
13
14***********************************************************************/
15
16#define INCL_DOS
17#define INCL_WIN
18
19#include <os2.h>
20#include <stdlib.h>
21#include <stdio.h>
22#include <string.h>
23#include <share.h>
24#include "fm3dll.h"
25#include "fm3dlg.h"
26#include "fm3str.h"
27
28/* prototypes */
29static BOOL decode(FILE * in, FILE * out);
30static void outdec(char *p, FILE * f, int n);
31
32/* single character decode */
33#define DEC(c) (((c) - ' ') & 077)
34
35#pragma alloc_text(UUD,UUD,decode,outdec)
36#pragma alloc_text(MERGE,MergeDlgProc)
37
38int UUD(char *filename, CHAR * dest)
39{
40 FILE *in, *out;
41 int mode, ret = 0;
42 char buf[80];
43 char fakedest[CCHMAXPATH];
44
45 if (!dest)
46 dest = fakedest;
47 in = _fsopen(filename, "r", SH_DENYWR);
48 if (!in)
49 {
50 saymsg(MB_CANCEL,
51 HWND_DESKTOP,
52 GetPString(IDS_ERRORTEXT),
53 GetPString(IDS_COMPCANTOPENTEXT),
54 filename);
55 return ret;
56 }
57
58 /* search for header line */
59 for (;;)
60 {
61 if (!fgets(buf, sizeof(buf), in))
62 {
63 fclose(in);
64 saymsg(MB_CANCEL,
65 HWND_DESKTOP,
66 GetPString(IDS_ERRORTEXT),
67 GetPString(IDS_UUDNOBEGINTEXT),
68 filename);
69 return ret;
70 }
71 buf[sizeof(buf) - 1] = 0;
72 if (!strncmp(buf, "begin ", 6))
73 break;
74 }
75 *dest = 0;
76 sscanf(buf, "begin %o %259s", &mode, dest);
77 dest[CCHMAXPATH - 1] = 0;
78 { /* place dest in same directory as filename by default... */
79 char build[CCHMAXPATH], *p;
80
81 strcpy(build, filename);
82 p = strrchr(build, '\\');
83 if (p)
84 {
85 p++;
86 *p = 0;
87 }
88 else
89 strcat(build, "\\");
90 strncat(build, dest, CCHMAXPATH - strlen(dest));
91 strcpy(dest, build);
92 }
93
94 if (!export_filename(HWND_DESKTOP, dest, FALSE))
95 {
96 fclose(in);
97 return ret;
98 }
99
100 /* create output file */
101 out = _fsopen(dest, "ab+", SH_DENYWR);
102 if (!out)
103 {
104 fclose(in);
105 saymsg(MB_CANCEL,
106 HWND_DESKTOP,
107 GetPString(IDS_ERRORTEXT),
108 GetPString(IDS_UUDCANTOPENFORTEXT),
109 dest,
110 filename);
111 return ret;
112 }
113
114 ret = 1;
115 decode(in, out);
116
117 fgets(buf, sizeof(buf), in);
118
119 fclose(in);
120 fclose(out);
121 return ret;
122}
123
124/*
125 * copy from in to out, decoding as you go along.
126 */
127static BOOL decode(FILE * in, FILE * out)
128{
129 char buf[80];
130 char *bp;
131 int n;
132
133 for (;;)
134 {
135 /* for each input line */
136 if (!fgets(buf, sizeof(buf), in))
137 return FALSE;
138 buf[sizeof(buf) - 1] = 0;
139 n = DEC(buf[0]);
140 if (n <= 0)
141 break;
142 bp = &buf[1];
143 while (n > 0)
144 {
145 outdec(bp, out, n);
146 bp += 4;
147 n -= 3;
148 }
149 }
150 return TRUE;
151}
152
153/*
154 * output a group of 3 bytes (4 input characters).
155 * the input chars are pointed to by p, they are to
156 * be output to file f. n is used to tell us not to
157 * output all of them at the end of the file.
158 */
159static void outdec(char *p, FILE * f, int n)
160{
161 INT c1, c2, c3;
162
163 c1 = DEC(*p) << 2 | (UINT)DEC(p[1]) >> 4;
164 c2 = DEC(p[1]) << 4 | (UINT)DEC(p[2]) >> 2;
165 c3 = DEC(p[2]) << 6 | DEC(p[3]);
166 if (n >= 1)
167 putc(c1, f);
168 if (n >= 2)
169 putc(c2, f);
170 if (n >= 3)
171 putc(c3, f);
172}
173
174MRESULT EXPENTRY MergeDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
175{
176 WORKER *wk;
177
178 switch (msg)
179 {
180 case WM_INITDLG:
181 if (mp2)
182 {
183 WinSetWindowPtr(hwnd, 0, mp2);
184 wk = (WORKER *) mp2;
185 if (wk -> li && wk -> li -> list && wk -> li -> list[0])
186 {
187 WinSendDlgItemMsg(hwnd, MRG_TARGETNAME, EM_SETTEXTLIMIT,
188 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
189 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
190 }
191 else
192 WinDismissDlg(hwnd, 0);
193 }
194 else
195 WinDismissDlg(hwnd, 0);
196 break;
197
198 case UM_UNDO:
199 WinSendDlgItemMsg(hwnd, MRG_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
200 wk = WinQueryWindowPtr(hwnd, 0);
201 if (wk)
202 {
203
204 INT x, numfiles = 0;
205 SHORT start;
206 CHAR *p;
207
208 WinSetDlgItemText(hwnd, MRG_TARGETNAME, wk -> li -> targetpath);
209 start = 0;
210 p = strrchr(wk -> li -> targetpath, '\\');
211 if (p)
212 start = (p + 1) - wk -> li -> targetpath;
213 WinSendDlgItemMsg(hwnd, MRG_TARGETNAME, EM_SETSEL,
214 MPFROM2SHORT(start, CCHMAXPATH), MPVOID);
215 for (x = 0; wk -> li -> list[x]; x++)
216 {
217 if (IsFile(wk -> li -> list[x]) == 1)
218 {
219 numfiles++;
220 WinSendDlgItemMsg(hwnd, MRG_LISTBOX, LM_INSERTITEM,
221 MPFROM2SHORT(LIT_END, 0),
222 MPFROMP(wk -> li -> list[x]));
223 }
224 }
225 WinCheckButton(hwnd, MRG_BINARY, (wk -> li -> type == IDM_MERGEBINARY));
226 if (!numfiles)
227 {
228 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
229 hwnd,
230 GetPString(IDS_SILLYERRORTEXT),
231 GetPString(IDS_MERGEWASTETEXT));
232 WinDismissDlg(hwnd, 0);
233 }
234 }
235 return 0;
236
237 case WM_CONTROL:
238 switch (SHORT1FROMMP(mp1))
239 {
240 case MRG_LISTBOX:
241 switch (SHORT2FROMMP(mp1))
242 {
243 case LN_ENTER:
244 {
245 SHORT x;
246 CHAR szBuffer[CCHMAXPATH];
247
248 x = (SHORT) WinSendDlgItemMsg(hwnd, MRG_LISTBOX, LM_QUERYSELECTION,
249 MPFROMSHORT(LIT_FIRST), MPVOID);
250 if (x >= 0)
251 {
252 *szBuffer = 0;
253 WinSendDlgItemMsg(hwnd, MRG_LISTBOX, LM_QUERYITEMTEXT,
254 MPFROM2SHORT(x, CCHMAXPATH),
255 MPFROMP(szBuffer));
256 if (*szBuffer)
257 QuickEdit(hwnd, szBuffer);
258 }
259 }
260 break;
261 }
262 break;
263 }
264 break;
265
266 case WM_ADJUSTWINDOWPOS:
267 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
268 break;
269
270 case UM_SETDIR:
271 PaintRecessedWindow(WinWindowFromID(hwnd, MRG_HELP), (HPS) 0, FALSE, TRUE);
272 return 0;
273
274 case WM_COMMAND:
275 switch (SHORT1FROMMP(mp1))
276 {
277 case IDM_UNDO:
278 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
279 break;
280
281 case MRG_CHANGETARGET:
282 wk = WinQueryWindowPtr(hwnd, 0);
283 if (wk)
284 {
285
286 CHAR filename[CCHMAXPATH];
287
288 strcpy(filename, wk -> li -> targetpath);
289 if (export_filename(HWND_DESKTOP, filename, FALSE) && *filename)
290 {
291 strcpy(wk -> li -> targetpath, filename);
292 WinSetDlgItemText(hwnd, MRG_TARGETNAME, wk -> li -> targetpath);
293 }
294 }
295 break;
296
297 case MRG_REMOVE:
298 {
299 SHORT x;
300
301 x = (SHORT) WinSendDlgItemMsg(hwnd, MRG_LISTBOX, LM_QUERYSELECTION,
302 MPFROMSHORT(LIT_FIRST), MPVOID);
303 if (x >= 0)
304 WinSendDlgItemMsg(hwnd, MRG_LISTBOX, LM_DELETEITEM,
305 MPFROMSHORT(x), MPVOID);
306 }
307 break;
308
309 case MRG_BOTTOM:
310 case MRG_TOP:
311 {
312 SHORT x;
313 CHAR szBuffer[CCHMAXPATH];
314
315 x = (SHORT) WinSendDlgItemMsg(hwnd, MRG_LISTBOX, LM_QUERYSELECTION,
316 MPFROMSHORT(LIT_FIRST), MPVOID);
317 if (x >= 0)
318 {
319 *szBuffer = 0;
320 WinSendDlgItemMsg(hwnd, MRG_LISTBOX, LM_QUERYITEMTEXT,
321 MPFROM2SHORT(x, CCHMAXPATH),
322 MPFROMP(szBuffer));
323 if (*szBuffer)
324 {
325 WinSendDlgItemMsg(hwnd, MRG_LISTBOX, LM_DELETEITEM,
326 MPFROMSHORT(x), MPVOID);
327 if (SHORT1FROMMP(mp1) == MRG_TOP)
328 WinSendDlgItemMsg(hwnd, MRG_LISTBOX, LM_INSERTITEM,
329 MPFROM2SHORT(0, 0),
330 MPFROMP(szBuffer));
331 else
332 WinSendDlgItemMsg(hwnd, MRG_LISTBOX, LM_INSERTITEM,
333 MPFROM2SHORT(LIT_END, 0),
334 MPFROMP(szBuffer));
335 }
336 }
337 }
338 break;
339
340 case DID_CANCEL:
341 WinDismissDlg(hwnd, 0);
342 break;
343
344 case IDM_HELP:
345 if (hwndHelp)
346 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
347 MPFROM2SHORT(HELP_MERGE, 0),
348 MPFROMSHORT(HM_RESOURCEID));
349 break;
350
351 case DID_OK:
352 wk = WinQueryWindowPtr(hwnd, 0);
353 if (wk)
354 {
355
356 BOOL append, binary;
357 CHAR **list = NULL, **test, szBuffer[CCHMAXPATH];
358 INT numfiles = 0, numalloc = 0, error;
359 SHORT x, y;
360
361 *szBuffer = 0;
362 WinQueryDlgItemText(hwnd,
363 MRG_TARGETNAME,
364 CCHMAXPATH,
365 szBuffer);
366 if (!*szBuffer)
367 {
368 DosBeep(50, 100);
369 WinSetFocus(HWND_DESKTOP,
370 WinWindowFromID(hwnd, MRG_TARGETNAME));
371 break;
372 }
373 if (DosQueryPathInfo(szBuffer,
374 FIL_QUERYFULLNAME,
375 wk -> li -> targetpath,
376 CCHMAXPATH))
377 {
378 DosBeep(50, 100);
379 WinSetFocus(HWND_DESKTOP,
380 WinWindowFromID(hwnd, MRG_TARGETNAME));
381 break;
382 }
383 WinSetDlgItemText(hwnd,
384 MRG_TARGETNAME,
385 szBuffer);
386 append = WinQueryButtonCheckstate(hwnd, MRG_APPEND);
387 binary = WinQueryButtonCheckstate(hwnd, MRG_BINARY);
388 wk -> li -> type = (append && binary) ? IDM_MERGEBINARYAPPEND :
389 (append) ? IDM_MERGETEXTAPPEND :
390 (binary) ? IDM_MERGEBINARY :
391 IDM_MERGETEXT;
392 x = (SHORT) WinSendDlgItemMsg(hwnd,
393 MRG_LISTBOX,
394 LM_QUERYITEMCOUNT,
395 MPVOID,
396 MPVOID);
397 for (y = 0; y < x; y++)
398 {
399 *szBuffer = 0;
400 WinSendDlgItemMsg(hwnd,
401 MRG_LISTBOX,
402 LM_QUERYITEMTEXT,
403 MPFROM2SHORT(y, CCHMAXPATH),
404 MPFROMP(szBuffer));
405 if (*szBuffer)
406 {
407 error = AddToList(szBuffer,
408 &list,
409 &numfiles,
410 &numalloc);
411 if (error)
412 {
413 DosBeep(250, 100);
414 break;
415 }
416 }
417 }
418 if (numfiles && list && numfiles + 1 < numalloc)
419 {
420 test = realloc(list, sizeof(CHAR *) * (numfiles + 1));
421 if (test)
422 list = test;
423 }
424 if (list && list[0])
425 {
426 FreeList(wk -> li -> list);
427 wk -> li -> list = list;
428 }
429 else
430 {
431 DosBeep(50, 100);
432 break;
433 }
434 }
435 WinDismissDlg(hwnd, 1);
436 break;
437 }
438 return 0;
439 }
440 return WinDefDlgProc(hwnd, msg, mp1, mp2);
441}
Note: See TracBrowser for help on using the repository browser.