source: trunk/dll/avv.c@ 304

Last change on this file since 304 was 304, checked in by root, 19 years ago

EditArchiverData: rework

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 29.0 KB
Line 
1
2/***********************************************************************
3
4 $Id: avv.c 304 2006-06-27 00:23:12Z root $
5
6 archiver.bb2 editor
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2004, 2006 Steven H.Levine
10
11 31 Jul 04 SHL ArcReviewDlgProc: correct nameis... decodes
12 01 Aug 04 SHL Localize functions
13 01 Aug 04 SHL Rework fixup usage
14 06 Jun 05 SHL Drop unused
15 14 Aug 05 SHL rewrite_archiverbb2: avoid dereferencing null signature
16 14 Aug 05 SHL ArcReviewDlgProc: ensure signature allocated
17 29 May 06 SHL EditArchiverData: rework
18
19***********************************************************************/
20
21#define INCL_DOS
22#define INCL_WIN
23#include <os2.h>
24
25#include <stdlib.h>
26#include <stdio.h>
27#include <stdarg.h>
28#include <string.h>
29#include <ctype.h>
30#include <time.h>
31
32#include "fm3dll.h"
33#include "fm3dlg.h"
34#include "version.h"
35#include "fm3str.h"
36
37#pragma data_seg(DATA1)
38#pragma alloc_text(AVV,EditArchiverData,xstrdup,xstrdup_from_window)
39#pragma alloc_text(AVV,get_int_from_window,get_int2_from_window)
40#pragma alloc_text(AVV,get_long_from_window,get_int3_from_window)
41#pragma alloc_text(AVV,get_int4_from_window)
42
43static PSZ checkfile(PSZ file,INT *error);
44static BOOL check_archiver (HWND hwnd,ARC_TYPE *info);
45static INT get_int_from_window (HWND hwnd,USHORT id);
46static LONG get_long_from_window (HWND hwnd,USHORT id);
47static PSZ nonull(PSZ a);
48static PSZ xstrdup(PSZ pszDest,PSZ pszSrc);
49static PSZ xstrdup_from_window(HWND hwnd,USHORT id,PSZ pszDest);
50
51//=== EditArchiverData() Select archiver to edit ===
52
53VOID EditArchiverData(HWND hwnd)
54{
55 ARCDUMP ad;
56 FILE *fp;
57 ARC_TYPE *pat;
58
59 // Allow multiple edits
60 for (;;) {
61 pat = NULL; // Do not hide dups
62 if (!WinDlgBox(HWND_DESKTOP,
63 hwnd,
64 SBoxDlgProc,
65 FM3ModHandle,
66 ASEL_EDIT_FRAME,
67 (PVOID)&pat) ||
68 !pat)
69 {
70 break; // we are done
71 }
72
73 memset(&ad,0,sizeof(ARCDUMP));
74 ad.info = pat;
75 WinDlgBox(HWND_DESKTOP,
76 hwnd,
77 ArcReviewDlgProc,
78 FM3ModHandle,
79 AD_FRAME,
80 MPFROMP(&ad));
81 } // for
82}
83
84static PSZ xstrdup(PSZ a,PSZ b)
85{
86 if (a)
87 free(a);
88 if (b && *b)
89 a = strdup(b);
90 else
91 a = NULL;
92 return a;
93}
94
95static PSZ xstrdup_from_window(HWND hwnd,USHORT id,PSZ pszDest)
96{
97 char sz[257] = "";
98
99 WinQueryDlgItemText(hwnd,
100 id,
101 255,
102 sz);
103 pszDest = xstrdup(pszDest,sz);
104 return pszDest;
105}
106
107static INT get_int_from_window(HWND hwnd,USHORT id)
108{
109 char s[257] = "";
110
111 WinQueryDlgItemText(hwnd,id,255,s);
112 return atoi(s);
113}
114
115static INT get_int2_from_window(HWND hwnd,USHORT id)
116{
117 char s[257] = "",*p;
118
119 WinQueryDlgItemText(hwnd,id,255,s);
120 p = strchr(s,',');
121 if(p)
122 p++;
123 return (p) ? atoi(p) : 0;
124}
125
126INT get_int3_from_window (HWND hwnd,USHORT id)
127{
128 char s[257] = "",*p;
129
130 WinQueryDlgItemText(hwnd,id,255,s);
131 p = strchr(s,',');
132 if(p) {
133 p++;
134 p = strchr(p,',');
135 if(p)
136 p++;
137 }
138 return (p) ? atoi(p) : 0;
139}
140
141INT get_int4_from_window (HWND hwnd,USHORT id)
142{
143 char s[257] = "",*p;
144
145 WinQueryDlgItemText(hwnd,id,255,s);
146 p = strchr(s,',');
147 if(p) {
148 p++;
149 p = strchr(p,',');
150 if(p) {
151 p++;
152 p = strchr(p,',');
153 if(p)
154 p++;
155 }
156 }
157 return (p) ? atoi(p) : 0;
158}
159
160LONG get_long_from_window (HWND hwnd,USHORT id)
161{
162 char s[257] = "";
163
164 WinQueryDlgItemText(hwnd,id,255,s);
165 return atol(s);
166}
167
168#pragma alloc_text (AVV2,nonull,rewrite_archiverbb2,checkfile)
169
170// nonull - convert NULL pointer to empty string
171
172static PSZ nonull(PSZ psz)
173{
174 if(!psz)
175 psz = NullStr;
176 return psz;
177}
178
179//=== rewrite_archiverbb2() rewrite archiver.bb2, prompt if arg NULL ===
180
181VOID rewrite_archiverbb2 (PSZ archiverbb2)
182{
183 FILE *fp;
184 INT counter = 0;
185 ARC_TYPE *info;
186 CHAR s[258];
187 CHAR *p;
188
189 arcsigsmodified = FALSE;
190
191 if (!arcsighead) {
192 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
193 HWND_DESKTOP,
194 GetPString(IDS_SAYWHATTEXT),
195 GetPString(IDS_NOINFOTOSAVETEXT));
196 return;
197 }
198 // Alert unless file name passed
199 if (!archiverbb2 || !*archiverbb2) {
200 saymsg(MB_ENTER | MB_ICONASTERISK,
201 HWND_DESKTOP,
202 GetPString(IDS_NOTETEXT),
203 GetPString(IDS_SAVEARCBB2TEXT));
204 archiverbb2 = GetPString(IDS_ARCHIVERBB2);
205 }
206 p = strrchr(archiverbb2,'.'); /* save a backup */
207 if (p && !stricmp(p,".BB2")) {
208 strcpy(p,".BAK");
209 DosDelete(archiverbb2);
210 strcpy(s,archiverbb2);
211 strcpy(p,".BB2");
212 DosMove(archiverbb2,s);
213 }
214 fp = fopen(archiverbb2,"w");
215 if (fp) {
216 fprintf(fp,"%u\n",NUMLINES);
217 fprintf(fp,
218 ";\n; %s file written by FM/2 v%d.%02d\n;\n",
219 GetPString(IDS_ARCHIVERBB2),
220 VERMAJOR,
221 VERMINOR);
222 fputs(GetPString(IDS_ARCHIVERBB2TEXT),fp);
223 info = arcsighead;
224 while(info) {
225 fprintf(fp,
226 GetPString(IDS_ENTRYCNTRTEXT),
227 ++counter);
228 if(info->id)
229 fprintf(fp,
230 " (%s)\n;\n",
231 info->id);
232 fprintf(fp,
233 "%s\n%s\n%ld\n%s\n",
234 nonull(info->id),
235 nonull(info->ext),
236 info->file_offset,
237 nonull(info->list));
238 fprintf(fp,
239 "%s\n%s\n%s\n%s\n%s\n%s\n",
240 nonull(info->extract),
241 nonull(info->exwdirs),
242 nonull(info->test),
243 nonull(info->create),
244 nonull(info->createwdirs),
245 nonull(info->createrecurse));
246 fprintf(fp,
247 "%s\n%s\n%s\n",
248 nonull(info->move),
249 nonull(info->movewdirs),
250 nonull(info->delete));
251 fprintf(fp,
252 "%s\n%s\n%s\n%d\n%d\n%d,%d\n%d\n%d,%lu,%lu,%lu\n",
253 fixup(info->signature,
254 s,
255 sizeof(s),
256 info->siglen),
257 nonull(info->startlist),
258 nonull(info->endlist),
259 info->osizepos,
260 info->nsizepos,
261 info->fdpos,
262 info->datetype,
263 info->fdflds,
264 info->fnpos,
265 info->nameislast,
266 info->nameisnext,
267 info->nameisfirst);
268 fprintf(fp,";\n");
269 info = info->next;
270 }
271 fclose(fp);
272 }
273}
274
275static PSZ checkfile(PSZ file,INT *error)
276{
277 CHAR *p,*pp = NULL;
278 INT ret;
279 ULONG apptype;
280
281 if(!file || !*file) {
282 *error = 3;
283 return NULL;
284 }
285 pp = strchr(file,' ');
286 if(pp)
287 *pp = 0;
288 p = searchpath(file);
289 if(!p || !*p)
290 *error = 1;
291 else {
292 ret = (INT)DosQAppType(p,&apptype);
293 if(ret)
294 *error = -1;
295 else {
296 apptype &= (~FAPPTYP_32BIT);
297 if(!apptype ||
298 (apptype == FAPPTYP_NOTWINDOWCOMPAT) ||
299 (apptype == FAPPTYP_WINDOWCOMPAT) ||
300 (apptype & FAPPTYP_BOUND) ||
301 (apptype & FAPPTYP_WINDOWAPI) ||
302 (apptype & FAPPTYP_DOS)) {
303 *error = 0;
304 }
305 else
306 *error = 2;
307 }
308 }
309 if(pp)
310 *pp = ' ';
311 return p;
312}
313
314#pragma alloc_text (AVV3,check_archiver,ArcReviewDlgProc)
315
316static BOOL check_archiver(HWND hwnd,ARC_TYPE *info)
317{
318 BOOL noStart = FALSE,noEnd = FALSE,badPos = FALSE;
319 INT badList = 0,badCreate = 0,badExtract = 0;
320 static PSZ aerrors[3];
321
322 aerrors[0] = GetPString(IDS_STARTLISTEMPTYTEXT);
323 aerrors[1] = GetPString(IDS_ENDLISTEMPTYTEXT);
324 aerrors[2] = GetPString(IDS_BOGUSNAMETEXT);
325 if(!info->startlist || !*info->startlist)
326 noStart = TRUE;
327 if(!info->endlist || !*info->endlist)
328 noEnd = TRUE;
329 if(info->fnpos > 50 || info->fnpos < -1)
330 badPos = TRUE;
331 checkfile(info->list,&badList);
332 checkfile(info->create,&badCreate);
333 checkfile(info->extract,&badExtract);
334 if(!noStart && !noEnd && !badPos && !badList && !badCreate && !badExtract)
335 return TRUE; // OK
336 saymsg(MB_ENTER | MB_ICONASTERISK,
337 hwnd,
338 GetPString(IDS_WARNINGSTEXT),
339 GetPString(IDS_AVVCHK1TEXT),
340 noStart ? aerrors[0] : NullStr,
341 noEnd ? aerrors[1] : NullStr,
342 badPos ? aerrors[2] : NullStr,
343 badList == 1 ?
344 GetPString(IDS_AVVCHK2TEXT) :
345 badList == -1 ?
346 GetPString(IDS_AVVCHK3TEXT) :
347 badList == 2 ?
348 GetPString(IDS_AVVCHK4TEXT) :
349 badList == 3 ?
350 GetPString(IDS_AVVCHK5TEXT) :
351 NullStr,
352 badCreate == 1 ?
353 GetPString(IDS_AVVCHK6TEXT) :
354 badCreate == -1 ?
355 GetPString(IDS_AVVCHK7TEXT) :
356 badCreate == 2 ?
357 GetPString(IDS_AVVCHK8TEXT) :
358 badCreate == 3 ?
359 GetPString(IDS_AVVCHK9TEXT) :
360 NullStr,
361 badExtract == 1 ?
362 GetPString(IDS_AVVCHK10TEXT) :
363 badExtract == -1 ?
364 GetPString(IDS_AVVCHK11TEXT) :
365 badExtract == 2 ?
366 GetPString(IDS_AVVCHK12TEXT) :
367 badExtract == 3 ?
368 GetPString(IDS_AVVCHK13TEXT) :
369 NullStr);
370 if(badList || badExtract)
371 return FALSE; // Problems
372 return TRUE; // OK
373}
374
375//=== ArcReviewDlgProc() View/edit single archiver.bb2 setup ===
376
377MRESULT EXPENTRY ArcReviewDlgProc(HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
378{
379 ARCDUMP *admp;
380 CHAR s[256];
381 SHORT sSelect;
382
383 if(msg != WM_INITDLG)
384 admp = (ARCDUMP *)WinQueryWindowPtr(hwnd,0);
385
386 switch(msg) {
387 case WM_INITDLG:
388 admp = (ARCDUMP *)mp2;
389 if(!admp || !admp->info) {
390 WinDismissDlg(hwnd,0);
391 return 0;
392 }
393
394 WinSetWindowPtr(hwnd,QWL_USER,mp2);
395
396 WinSendDlgItemMsg(hwnd,
397 AD_LISTBOX,
398 LM_DELETEALL,
399 MPVOID,
400 MPVOID);
401 for(sSelect = AD_ID;sSelect < AD_ADDWPATHS + 1;sSelect++)
402 {
403 WinSendDlgItemMsg(hwnd,
404 sSelect,
405 EM_SETTEXTLIMIT,
406 MPFROM2SHORT(sizeof(s) - 1,0),
407 MPVOID);
408 }
409 if (admp->info->id) {
410 WinSetDlgItemText(hwnd,
411 AD_ID,
412 admp->info->id);
413 }
414 if (admp->info->ext) {
415 WinSetDlgItemText(hwnd,
416 AD_EXT,
417 admp->info->ext);
418 }
419 sprintf(s,
420 "%ld",
421 admp->info->file_offset);
422 WinSetDlgItemText(hwnd,
423 AD_SIGPOS,
424 s);
425 if (admp->info->siglen) {
426 WinSetDlgItemText(hwnd,
427 AD_SIG,
428 fixup(admp->info->signature,
429 s,
430 sizeof(s),
431 admp->info->siglen));
432 }
433 if (admp->info->startlist) {
434 WinSetDlgItemText(hwnd,
435 AD_STARTLIST,
436 admp->info->startlist);
437 }
438 if (admp->info->endlist) {
439 WinSetDlgItemText(hwnd,
440 AD_ENDLIST,
441 admp->info->endlist);
442 }
443 if (admp->info->list) {
444 WinSetDlgItemText(hwnd,
445 AD_LIST,
446 admp->info->list);
447 }
448 sprintf(s,
449 "%d,%d,%d,%d",
450 admp->info->fnpos,
451 admp->info->nameislast,
452 admp->info->nameisnext,
453 admp->info->nameisfirst);
454 WinSetDlgItemText(hwnd,AD_FNAMEPOS,s);
455 sprintf(s,"%d",admp->info->osizepos);
456 WinSetDlgItemText(hwnd,AD_OLDSZ,s);
457 sprintf(s,"%d",admp->info->nsizepos);
458 WinSetDlgItemText(hwnd,AD_NEWSZ,s);
459 sprintf(s,"%d,%d",admp->info->fdpos,admp->info->datetype);
460 WinSetDlgItemText(hwnd,AD_DATEPOS,s);
461 sprintf(s,"%d",admp->info->fdflds);
462 WinSetDlgItemText(hwnd,AD_NUMDATEFLDS,s);
463 if(admp->info->extract)
464 WinSetDlgItemText(hwnd,AD_EXTRACT,admp->info->extract);
465 if(admp->info->exwdirs)
466 WinSetDlgItemText(hwnd,AD_WDIRS,admp->info->exwdirs);
467 if(admp->info->test)
468 WinSetDlgItemText(hwnd,AD_TEST,admp->info->test);
469 if(admp->info->create)
470 WinSetDlgItemText(hwnd,AD_ADD,admp->info->create);
471 if(admp->info->move)
472 WinSetDlgItemText(hwnd,AD_MOVE,admp->info->move);
473 if(admp->info->delete)
474 WinSetDlgItemText(hwnd,AD_DELETE,admp->info->delete);
475 if(admp->info->createrecurse)
476 WinSetDlgItemText(hwnd,AD_ADDRECURSE,admp->info->createrecurse);
477 if(admp->info->createwdirs)
478 WinSetDlgItemText(hwnd,AD_ADDWPATHS,admp->info->createwdirs);
479 if(admp->info->movewdirs)
480 WinSetDlgItemText(hwnd,AD_MOVEWPATHS,admp->info->movewdirs);
481
482 PostMsg(hwnd,
483 UM_SETUP,
484 MPVOID,
485 MPVOID);
486 break; // WM_INITDLG
487
488 case UM_SETUP:
489 if(admp->listname && *admp->listname) {
490
491 FILE *fp;
492
493 fp = fopen(admp->listname,"r");
494 if(!fp) {
495 WinSendDlgItemMsg(hwnd,
496 AD_LISTBOX,
497 LM_INSERTITEM,
498 MPFROM2SHORT(LIT_END,0),
499 MPFROMP(GetPString(IDS_CANTOPENFILETEXT)));
500 }
501 else {
502 while(!feof(fp)) {
503 if(!fgets(s,sizeof(s),fp)) break;
504 stripcr(s);
505 WinSendDlgItemMsg(hwnd,
506 AD_LISTBOX,
507 LM_INSERTITEM,
508 MPFROM2SHORT(LIT_END,0),
509 MPFROMP(s));
510 }
511 fclose(fp);
512 }
513 }
514 else {
515 WinSendDlgItemMsg(hwnd,
516 AD_LISTBOX,
517 LM_INSERTITEM,
518 MPFROM2SHORT(LIT_END,0),
519 MPFROMP(GetPString(IDS_NOTAPPLICABLETEXT)));
520 }
521 check_archiver(hwnd,admp->info);
522 return 0;
523
524 case WM_ADJUSTWINDOWPOS:
525 PostMsg(hwnd,
526 UM_SETDIR,
527 MPVOID,
528 MPVOID);
529 break;
530
531 case UM_SETDIR:
532 PaintRecessedWindow(WinWindowFromID(hwnd,AD_HELP),
533 (HPS)0,
534 FALSE,
535 TRUE);
536 return 0;
537
538 case WM_CONTROL:
539 switch(SHORT1FROMMP(mp1)) {
540 case AD_LISTBOX:
541 switch(SHORT2FROMMP(mp1)) {
542 case LN_ENTER:
543 for(sSelect = 0;sSelect < 10;sSelect++)
544 WinSetDlgItemText(hwnd,AD_FLD1 + sSelect,NullStr);
545 if(admp->listname) {
546 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
547 AD_LISTBOX,
548 LM_QUERYSELECTION,
549 MPVOID,
550 MPVOID);
551 WinSendDlgItemMsg(hwnd,
552 AD_LISTBOX,
553 LM_QUERYITEMTEXT,
554 MPFROM2SHORT(sSelect,255),
555 MPFROMP(s));
556 if(*s) {
557
558 PSZ p;
559 PSZ pp;
560
561 p = s;
562 for(sSelect = 0;sSelect < 10;sSelect++) {
563 pp = p;
564 while(*pp == ' ' || *pp == '\t')
565 pp++;
566 if(!*pp)
567 break;
568 p = pp;
569 while(*p && (*p != ' ' && *p != '\t'))
570 p++;
571 if(*p)
572 *p++ = 0;
573 WinSetDlgItemText(hwnd,
574 AD_FLD1 + sSelect,
575 pp);
576 }
577 }
578 else
579 DosBeep(50,100);
580 }
581 else
582 DosBeep(50,100);
583 break;
584
585 case LN_KILLFOCUS:
586 WinSetDlgItemText(hwnd,
587 AD_HELP,
588 NullStr);
589 break;
590
591 case LN_SETFOCUS:
592 WinSetDlgItemText(hwnd,
593 AD_HELP,
594 GetPString(IDS_TEXTARCPRODUCEDTEXT));
595 break;
596 }
597 break;
598
599 case AD_ID:
600 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
601 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
602 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
603 WinSetDlgItemText(hwnd,AD_HELP,
604 GetPString(IDS_ADIDTEXT));
605 break;
606
607 case AD_ADD:
608 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
609 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
610 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
611 WinSetDlgItemText(hwnd,AD_HELP,
612 GetPString(IDS_ADADDTEXT));
613 break;
614
615 case AD_MOVE:
616 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
617 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
618 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
619 WinSetDlgItemText(hwnd,AD_HELP,
620 GetPString(IDS_ADMOVETEXT));
621 break;
622
623 case AD_EXT:
624 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
625 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
626 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
627 WinSetDlgItemText(hwnd,AD_HELP,
628 GetPString(IDS_ADEXTTEXT));
629 break;
630
631 case AD_EXTRACT:
632 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
633 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
634 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
635 WinSetDlgItemText(hwnd,AD_HELP,
636 GetPString(IDS_ADEXTRACTTEXT));
637 break;
638
639 case AD_WDIRS:
640 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
641 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
642 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
643 WinSetDlgItemText(hwnd,AD_HELP,
644 GetPString(IDS_ADWDIRSTEXT));
645 break;
646
647 case AD_SIG:
648 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
649 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
650 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
651 WinSetDlgItemText(hwnd,AD_HELP,
652 GetPString(IDS_ADSIGTEXT));
653 break;
654
655 case AD_LIST:
656 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
657 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
658 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
659 WinSetDlgItemText(hwnd,AD_HELP,
660 GetPString(IDS_ADLISTTEXT));
661 break;
662
663 case AD_TEST:
664 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
665 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
666 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
667 WinSetDlgItemText(hwnd,AD_HELP,
668 GetPString(IDS_ADTESTTEXT));
669 break;
670
671 case AD_ADDWPATHS:
672 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
673 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
674 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
675 WinSetDlgItemText(hwnd,AD_HELP,
676 GetPString(IDS_ADADDWPATHSTEXT));
677 break;
678
679 case AD_MOVEWPATHS:
680 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
681 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
682 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
683 WinSetDlgItemText(hwnd,AD_HELP,
684 GetPString(IDS_ADMOVEWPATHSTEXT));
685 break;
686
687 case AD_ADDRECURSE:
688 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
689 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
690 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
691 WinSetDlgItemText(hwnd,AD_HELP,
692 GetPString(IDS_ADADDRECURSETEXT));
693 break;
694
695 case AD_DELETE:
696 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
697 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
698 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
699 WinSetDlgItemText(hwnd,AD_HELP,
700 GetPString(IDS_ADDELETETEXT));
701 break;
702
703 case AD_SIGPOS:
704 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
705 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
706 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
707 WinSetDlgItemText(hwnd,AD_HELP,
708 GetPString(IDS_ADSIGPOSTEXT));
709 break;
710
711 case AD_FNAMEPOS:
712 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
713 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
714 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
715 WinSetDlgItemText(hwnd,AD_HELP,
716 GetPString(IDS_ADFNAMEPOSTEXT));
717 break;
718
719 case AD_OLDSZ:
720 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
721 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
722 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
723 WinSetDlgItemText(hwnd,AD_HELP,
724 GetPString(IDS_ADOLDSZTEXT));
725 break;
726
727 case AD_NUMDATEFLDS:
728 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
729 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
730 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
731 WinSetDlgItemText(hwnd,AD_HELP,
732 GetPString(IDS_ADNUMDATEFLDSTEXT));
733 break;
734
735 case AD_DATEPOS:
736 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
737 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
738 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
739 WinSetDlgItemText(hwnd,AD_HELP,
740 GetPString(IDS_ADDATEPOSTEXT));
741 break;
742
743 case AD_NEWSZ:
744 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
745 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
746 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
747 WinSetDlgItemText(hwnd,AD_HELP,
748 GetPString(IDS_ADNEWSZTEXT));
749 break;
750
751 case AD_STARTLIST:
752 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
753 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
754 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
755 WinSetDlgItemText(hwnd,AD_HELP,
756 GetPString(IDS_ADSTARTLISTTEXT));
757 break;
758
759 case AD_ENDLIST:
760 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
761 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
762 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
763 WinSetDlgItemText(hwnd,AD_HELP,
764 GetPString(IDS_ADENDLISTTEXT));
765 break;
766
767 }
768 return 0;
769
770 case WM_COMMAND:
771 switch(SHORT1FROMMP(mp1)) {
772 case AD_SEEEXTRACTOR:
773 case AD_SEEADDER:
774 {
775 static CHAR tempargs[1026];
776
777 *tempargs = 0;
778 if(SHORT1FROMMP(mp1) == AD_SEEADDER)
779 WinQueryDlgItemText(hwnd,
780 AD_ADD,
781 255,
782 tempargs);
783 else
784 WinQueryDlgItemText(hwnd,
785 AD_EXTRACT,
786 255,
787 tempargs);
788 if(!*tempargs)
789 saymsg(MB_CANCEL,
790 hwnd,
791 GetPString(IDS_BZZZTTEXT),
792 GetPString(IDS_NEEDENTRYTEXT));
793 else {
794
795 PSZ p;
796
797 lstrip(tempargs);
798 p = strchr(tempargs,' ');
799 if(p)
800 *p = 0;
801 {
802 EXECARGS ex;
803
804 ex.flags = SEPARATEKEEP | WINDOWED | MAXIMIZED;
805 ex.commandline = tempargs;
806 *ex.path = 0;
807 *ex.environment = 0;
808 if(WinDlgBox(HWND_DESKTOP,
809 hwnd,
810 CmdLineDlgProc,
811 FM3ModHandle,
812 EXEC_FRAME,
813 &ex) == 1)
814 runemf2(ex.flags,
815 hwnd,
816 NULL,
817 (*ex.environment) ? ex.environment : NULL,
818 "%s",
819 tempargs);
820 }
821 }
822 }
823 return 0;
824
825 case DID_OK:
826 // fixme to avoid creating empty strings for startlist and endlist
827 admp->info->startlist = xstrdup_from_window(hwnd,AD_STARTLIST,admp->info->startlist);
828 admp->info->endlist = xstrdup_from_window(hwnd,AD_ENDLIST,admp->info->endlist);
829 admp->info->id = xstrdup_from_window(hwnd,AD_ID,admp->info->id);
830 admp->info->create = xstrdup_from_window(hwnd,AD_ADD,admp->info->create);
831 admp->info->createwdirs = xstrdup_from_window(hwnd,AD_ADDWPATHS,admp->info->createwdirs);
832 admp->info->createrecurse = xstrdup_from_window(hwnd,AD_ADDRECURSE,admp->info->createrecurse);
833 admp->info->movewdirs = xstrdup_from_window(hwnd,AD_MOVEWPATHS,admp->info->movewdirs);
834 admp->info->move = xstrdup_from_window(hwnd,AD_MOVE,admp->info->move);
835 admp->info->delete = xstrdup_from_window(hwnd,AD_DELETE,admp->info->delete);
836 admp->info->test = xstrdup_from_window(hwnd,AD_TEST,admp->info->test);
837 admp->info->extract = xstrdup_from_window(hwnd,AD_EXTRACT,admp->info->extract);
838 admp->info->exwdirs = xstrdup_from_window(hwnd,AD_WDIRS,admp->info->exwdirs);
839 admp->info->ext = xstrdup_from_window(hwnd,AD_EXT,admp->info->ext);
840 admp->info->signature = xstrdup_from_window(hwnd,
841 AD_SIG,
842 admp->info->signature);
843 admp->info->siglen = literal(admp->info->signature);
844 admp->info->list = xstrdup_from_window(hwnd,
845 AD_LIST,
846 admp->info->list);
847 admp->info->file_offset = get_long_from_window(hwnd,AD_SIGPOS);
848 admp->info->osizepos = get_int_from_window(hwnd,AD_OLDSZ);
849 admp->info->nsizepos = get_int_from_window(hwnd,AD_NEWSZ);
850 admp->info->fdpos = get_int_from_window(hwnd,AD_DATEPOS);
851 admp->info->datetype = get_int2_from_window(hwnd,AD_DATEPOS);
852 admp->info->fdflds = get_int_from_window(hwnd,AD_NUMDATEFLDS);
853 admp->info->fnpos = get_int_from_window(hwnd,AD_FNAMEPOS);
854 admp->info->nameislast = (get_int2_from_window(hwnd,AD_FNAMEPOS)) ? TRUE : FALSE;
855 admp->info->nameisnext = (get_int3_from_window(hwnd,AD_FNAMEPOS)) ? TRUE : FALSE;
856 admp->info->nameisfirst = (get_int4_from_window(hwnd,AD_FNAMEPOS)) ? TRUE : FALSE;
857 {
858 INT ok = check_archiver(hwnd,admp->info);
859 if(saymsg(MB_YESNO,
860 hwnd,
861 GetPString(IDS_ADCHANGESINMEMTEXT),
862 GetPString(IDS_ADREWRITETEXT),
863 !ok ? GetPString(IDS_NOTRECOMMENDTEXT) : NullStr) ==
864 MBID_YES) {
865
866 PSZ ab2;
867
868 ab2 = searchpath(GetPString(IDS_ARCHIVERBB2)); // Rewrite without alerting
869 rewrite_archiverbb2(ab2);
870 }
871 }
872 WinDismissDlg(hwnd,TRUE);
873 return 0;
874
875 case IDM_HELP:
876 if(hwndHelp)
877 WinSendMsg(hwndHelp,
878 HM_DISPLAY_HELP,
879 MPFROM2SHORT(HELP_EDITARC,0),
880 MPFROMSHORT(HM_RESOURCEID));
881 break;
882
883 case DID_CANCEL:
884 WinDismissDlg(hwnd,FALSE);
885 return 0;
886
887 case AD_TOSTART:
888 if(admp->listname) {
889 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
890 AD_LISTBOX,
891 LM_QUERYSELECTION,
892 MPVOID,
893 MPVOID);
894 WinSendDlgItemMsg(hwnd,
895 AD_LISTBOX,
896 LM_QUERYITEMTEXT,
897 MPFROM2SHORT(sSelect,255),
898 MPFROMP(s));
899 if(*s)
900 WinSetDlgItemText(hwnd,
901 AD_STARTLIST,
902 s);
903 else
904BooBoo:
905 saymsg(MB_ENTER,
906 hwnd,
907 GetPString(IDS_OOPSTEXT),
908 GetPString(IDS_SELECTFROMLISTTEXT));
909 }
910 else
911 DosBeep(50,100);
912 return 0;
913
914 case AD_TOEND:
915 if(admp->listname) {
916 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
917 AD_LISTBOX,
918 LM_QUERYSELECTION,
919 MPVOID,
920 MPVOID);
921 WinSendDlgItemMsg(hwnd,
922 AD_LISTBOX,
923 LM_QUERYITEMTEXT,
924 MPFROM2SHORT(sSelect,255),
925 MPFROMP(s));
926 if(*s)
927 WinSetDlgItemText(hwnd,
928 AD_ENDLIST,
929 s);
930 else
931 goto BooBoo;
932 }
933 else
934 DosBeep(50,100);
935 return 0;
936 }
937 return 0;
938 }
939 return WinDefDlgProc(hwnd,msg,mp1,mp2);
940}
941
Note: See TracBrowser for help on using the repository browser.