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
RevLine 
[195]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
[204]12 06 Jun 05 SHL Drop unused code
[195]13
14***********************************************************************/
15
[2]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 */
[195]29static BOOL decode(FILE * in, FILE * out);
30static void outdec(char *p, FILE * f, int n);
[2]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
[195]38int UUD(char *filename, CHAR * dest)
39{
40 FILE *in, *out;
41 int mode, ret = 0;
42 char buf[80];
43 char fakedest[CCHMAXPATH];
[2]44
[195]45 if (!dest)
[2]46 dest = fakedest;
[195]47 in = _fsopen(filename, "r", SH_DENYWR);
48 if (!in)
49 {
[2]50 saymsg(MB_CANCEL,
[195]51 HWND_DESKTOP,
52 GetPString(IDS_ERRORTEXT),
53 GetPString(IDS_COMPCANTOPENTEXT),
54 filename);
[2]55 return ret;
56 }
57
[195]58 /* search for header line */
59 for (;;)
60 {
61 if (!fgets(buf, sizeof(buf), in))
62 {
[2]63 fclose(in);
64 saymsg(MB_CANCEL,
[195]65 HWND_DESKTOP,
66 GetPString(IDS_ERRORTEXT),
67 GetPString(IDS_UUDNOBEGINTEXT),
68 filename);
[2]69 return ret;
[195]70 }
[2]71 buf[sizeof(buf) - 1] = 0;
[195]72 if (!strncmp(buf, "begin ", 6))
73 break;
74 }
[2]75 *dest = 0;
[195]76 sscanf(buf, "begin %o %259s", &mode, dest);
[2]77 dest[CCHMAXPATH - 1] = 0;
[195]78 { /* place dest in same directory as filename by default... */
79 char build[CCHMAXPATH], *p;
[2]80
[195]81 strcpy(build, filename);
82 p = strrchr(build, '\\');
83 if (p)
84 {
[2]85 p++;
86 *p = 0;
87 }
88 else
[195]89 strcat(build, "\\");
90 strncat(build, dest, CCHMAXPATH - strlen(dest));
91 strcpy(dest, build);
[2]92 }
93
[195]94 if (!export_filename(HWND_DESKTOP, dest, FALSE))
95 {
[2]96 fclose(in);
97 return ret;
98 }
99
[195]100 /* create output file */
101 out = _fsopen(dest, "ab+", SH_DENYWR);
102 if (!out)
103 {
[2]104 fclose(in);
105 saymsg(MB_CANCEL,
[195]106 HWND_DESKTOP,
107 GetPString(IDS_ERRORTEXT),
108 GetPString(IDS_UUDCANTOPENFORTEXT),
109 dest,
110 filename);
[2]111 return ret;
[195]112 }
[2]113
[204]114 ret = 1;
115 decode(in, out);
[2]116
[204]117 fgets(buf, sizeof(buf), in);
118
[2]119 fclose(in);
120 fclose(out);
121 return ret;
122}
123
124/*
125 * copy from in to out, decoding as you go along.
126 */
[195]127static BOOL decode(FILE * in, FILE * out)
128{
129 char buf[80];
130 char *bp;
131 int n;
[2]132
[195]133 for (;;)
134 {
135 /* for each input line */
136 if (!fgets(buf, sizeof(buf), in))
[2]137 return FALSE;
138 buf[sizeof(buf) - 1] = 0;
139 n = DEC(buf[0]);
[195]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 }
[2]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 */
[195]159static void outdec(char *p, FILE * f, int n)
160{
[204]161 INT c1, c2, c3;
[2]162
[204]163 c1 = DEC(*p) << 2 | (UINT)DEC(p[1]) >> 4;
164 c2 = DEC(p[1]) << 4 | (UINT)DEC(p[2]) >> 2;
[195]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);
[2]172}
173
[195]174MRESULT EXPENTRY MergeDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
175{
[2]176 WORKER *wk;
177
[195]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);
[2]190 }
191 else
[195]192 WinDismissDlg(hwnd, 0);
193 }
194 else
195 WinDismissDlg(hwnd, 0);
196 break;
[2]197
[195]198 case UM_UNDO:
199 WinSendDlgItemMsg(hwnd, MRG_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
200 wk = WinQueryWindowPtr(hwnd, 0);
201 if (wk)
202 {
[2]203
[195]204 INT x, numfiles = 0;
205 SHORT start;
206 CHAR *p;
[2]207
[195]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 }
[2]224 }
[195]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;
[2]236
[195]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];
[2]247
[195]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;
[2]261 }
262 break;
[195]263 }
264 break;
[2]265
[195]266 case WM_ADJUSTWINDOWPOS:
267 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
268 break;
[2]269
[195]270 case UM_SETDIR:
271 PaintRecessedWindow(WinWindowFromID(hwnd, MRG_HELP), (HPS) 0, FALSE, TRUE);
272 return 0;
[2]273
[195]274 case WM_COMMAND:
275 switch (SHORT1FROMMP(mp1))
276 {
277 case IDM_UNDO:
278 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
279 break;
[2]280
[195]281 case MRG_CHANGETARGET:
282 wk = WinQueryWindowPtr(hwnd, 0);
283 if (wk)
284 {
[2]285
[195]286 CHAR filename[CCHMAXPATH];
[2]287
[195]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;
[2]296
[195]297 case MRG_REMOVE:
298 {
299 SHORT x;
[2]300
[195]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;
[2]308
[195]309 case MRG_BOTTOM:
310 case MRG_TOP:
311 {
312 SHORT x;
313 CHAR szBuffer[CCHMAXPATH];
[2]314
[195]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;
[2]339
[195]340 case DID_CANCEL:
341 WinDismissDlg(hwnd, 0);
342 break;
[2]343
[195]344 case IDM_HELP:
345 if (hwndHelp)
346 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
347 MPFROM2SHORT(HELP_MERGE, 0),
348 MPFROMSHORT(HM_RESOURCEID));
349 break;
[2]350
[195]351 case DID_OK:
352 wk = WinQueryWindowPtr(hwnd, 0);
353 if (wk)
354 {
[2]355
[195]356 BOOL append, binary;
357 CHAR **list = NULL, **test, szBuffer[CCHMAXPATH];
358 INT numfiles = 0, numalloc = 0, error;
359 SHORT x, y;
[2]360
[195]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 }
[2]434 }
[195]435 WinDismissDlg(hwnd, 1);
436 break;
437 }
438 return 0;
[2]439 }
[195]440 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]441}
Note: See TracBrowser for help on using the repository browser.