source: trunk/dll/avv.c@ 107

Last change on this file since 107 was 107, checked in by root, 21 years ago

ArcReviewDlgProc: correct nameis... decodes

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