source: trunk/dll/avv.c@ 2

Last change on this file since 2 was 2, checked in by root, 23 years ago

Initial revision

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