Changeset 304
- Timestamp:
- Jun 27, 2006, 2:23:12 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/dll/avv.c ¶
r250 r304 7 7 8 8 Copyright (c) 1993-98 M. Kimes 9 Copyright (c) 2004, 2005 Steven H.Levine 10 11 Archive containers 9 Copyright (c) 2004, 2006 Steven H.Levine 12 10 13 11 31 Jul 04 SHL ArcReviewDlgProc: correct nameis... decodes … … 17 15 14 Aug 05 SHL rewrite_archiverbb2: avoid dereferencing null signature 18 16 14 Aug 05 SHL ArcReviewDlgProc: ensure signature allocated 17 29 May 06 SHL EditArchiverData: rework 19 18 20 19 ***********************************************************************/ … … 43 42 44 43 static PSZ checkfile(PSZ file,INT *error); 45 static INTcheck_archiver (HWND hwnd,ARC_TYPE *info);44 static BOOL check_archiver (HWND hwnd,ARC_TYPE *info); 46 45 static INT get_int_from_window (HWND hwnd,USHORT id); 47 46 static LONG get_long_from_window (HWND hwnd,USHORT id); … … 50 49 static PSZ xstrdup_from_window(HWND hwnd,USHORT id,PSZ pszDest); 51 50 52 APIRET EditArchiverData(HWND hwnd,DIRCNRDATA *arc) 51 //=== EditArchiverData() Select archiver to edit === 52 53 VOID EditArchiverData(HWND hwnd) 53 54 { 54 55 ARCDUMP ad; 55 56 FILE *fp; 56 HFILE oldstdout,newstdout; 57 APIRET ret; 58 CHAR arctemp[33]; 59 60 if(!arc) 61 return 0; 62 if(!arc->info) { 63 if(!WinDlgBox(HWND_DESKTOP, 64 hwnd, 65 SBoxDlgProc, 66 FM3ModHandle, 67 ASEL_FRAME, 68 (PVOID)&arc->info) || 69 !arc->info) /* we blew it */ 70 return 0; 71 } 72 if(*arc->arcname) { 73 sprintf(arctemp, 74 "%s.%03x", 75 ArcTempRoot, 76 (clock() & 4095L)); 77 DosForceDelete(arctemp); 78 fp = fopen(arctemp,"w"); 79 if(fp) { 80 newstdout = -1; 81 if(DosDupHandle(fileno(stdout),&newstdout)) 82 DosBeep(50,100); 83 oldstdout = fileno(stdout); 84 DosDupHandle(fileno(fp),&oldstdout); 85 runemf2(SEPARATE | INVISIBLE | FULLSCREEN | BACKGROUND | WAIT, 86 HWND_DESKTOP, 87 NullStr, 88 NULL, 89 "%s %s%s%s", 90 arc->info->list, 91 (strchr(arc->arcname,' ')) ? "\"" : NullStr, 92 arc->arcname, 93 (strchr(arc->arcname,' ')) ? "\"" : NullStr); 94 oldstdout = fileno(stdout); 95 DosDupHandle(newstdout,&oldstdout); 96 DosClose(newstdout); 97 fclose(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 98 71 } 99 } 100 memset(&ad,0,sizeof(ARCDUMP)); 101 ad.info = arc->info; 102 if(*arc->arcname) { 103 strcpy(ad.listname,arctemp); 104 strcpy(ad.arcname,arc->arcname); 105 } 106 ret = WinDlgBox(HWND_DESKTOP, 107 hwnd, 108 ArcReviewDlgProc, 109 FM3ModHandle, 110 AD_FRAME, 111 MPFROMP(&ad)); 112 if(*arc->arcname) 113 DosForceDelete(arctemp); 114 return ret; 115 } 116 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 } 117 83 118 84 static PSZ xstrdup(PSZ a,PSZ b) 119 85 { 120 if (a)86 if (a) 121 87 free(a); 122 if(b && 123 *b) 88 if (b && *b) 124 89 a = strdup(b); 125 90 else … … 127 92 return a; 128 93 } 129 130 94 131 95 static PSZ xstrdup_from_window(HWND hwnd,USHORT id,PSZ pszDest) … … 141 105 } 142 106 143 144 107 static INT get_int_from_window(HWND hwnd,USHORT id) 145 108 { … … 149 112 return atoi(s); 150 113 } 151 152 114 153 115 static INT get_int2_from_window(HWND hwnd,USHORT id) … … 161 123 return (p) ? atoi(p) : 0; 162 124 } 163 164 125 165 126 INT get_int3_from_window (HWND hwnd,USHORT id) … … 177 138 return (p) ? atoi(p) : 0; 178 139 } 179 180 140 181 141 INT get_int4_from_window (HWND hwnd,USHORT id) … … 198 158 } 199 159 200 201 160 LONG get_long_from_window (HWND hwnd,USHORT id) 202 161 { … … 206 165 return atol(s); 207 166 } 208 209 167 210 168 #pragma alloc_text (AVV2,nonull,rewrite_archiverbb2,checkfile) … … 219 177 } 220 178 179 //=== rewrite_archiverbb2() rewrite archiver.bb2, prompt if arg NULL === 221 180 222 181 VOID rewrite_archiverbb2 (PSZ archiverbb2) … … 228 187 CHAR *p; 229 188 230 if(!arcsighead) { 189 arcsigsmodified = FALSE; 190 191 if (!arcsighead) { 231 192 saymsg(MB_CANCEL | MB_ICONEXCLAMATION, 232 193 HWND_DESKTOP, … … 235 196 return; 236 197 } 237 if(!archiverbb2 || !*archiverbb2) { 198 // Alert unless file name passed 199 if (!archiverbb2 || !*archiverbb2) { 238 200 saymsg(MB_ENTER | MB_ICONASTERISK, 239 201 HWND_DESKTOP, … … 243 205 } 244 206 p = strrchr(archiverbb2,'.'); /* save a backup */ 245 if (p && !stricmp(p,".BB2")) {207 if (p && !stricmp(p,".BB2")) { 246 208 strcpy(p,".BAK"); 247 209 DosDelete(archiverbb2); … … 251 213 } 252 214 fp = fopen(archiverbb2,"w"); 253 if (fp) {215 if (fp) { 254 216 fprintf(fp,"%u\n",NUMLINES); 255 217 fprintf(fp, … … 292 254 s, 293 255 sizeof(s), 294 info->sig nature ? strlen(info->signature) : 0),256 info->siglen), 295 257 nonull(info->startlist), 296 258 nonull(info->endlist), … … 310 272 } 311 273 } 312 313 274 314 275 static PSZ checkfile(PSZ file,INT *error) … … 353 314 #pragma alloc_text (AVV3,check_archiver,ArcReviewDlgProc) 354 315 355 static INTcheck_archiver(HWND hwnd,ARC_TYPE *info)356 { 357 BOOL fStart = FALSE,fEnd = FALSE,fNpos = FALSE;358 INT List = 0,Create = 0,Extract = 0;316 static 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; 359 320 static PSZ aerrors[3]; 360 321 … … 363 324 aerrors[2] = GetPString(IDS_BOGUSNAMETEXT); 364 325 if(!info->startlist || !*info->startlist) 365 fStart = TRUE;326 noStart = TRUE; 366 327 if(!info->endlist || !*info->endlist) 367 fEnd = TRUE;328 noEnd = TRUE; 368 329 if(info->fnpos > 50 || info->fnpos < -1) 369 fNpos = TRUE;370 checkfile(info->list,& List);371 checkfile(info->create,& Create);372 checkfile(info->extract,& Extract);373 if(! fStart && !fEnd && !fNpos && !List && !Create && !Extract)374 return 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 375 336 saymsg(MB_ENTER | MB_ICONASTERISK, 376 337 hwnd, 377 338 GetPString(IDS_WARNINGSTEXT), 378 339 GetPString(IDS_AVVCHK1TEXT), 379 (fStart)? aerrors[0] : NullStr,380 (fEnd)? aerrors[1] : NullStr,381 (fNpos)? aerrors[2] : NullStr,382 (List == 1)?340 noStart ? aerrors[0] : NullStr, 341 noEnd ? aerrors[1] : NullStr, 342 badPos ? aerrors[2] : NullStr, 343 badList == 1 ? 383 344 GetPString(IDS_AVVCHK2TEXT) : 384 (List == -1)?345 badList == -1 ? 385 346 GetPString(IDS_AVVCHK3TEXT) : 386 (List == 2)?347 badList == 2 ? 387 348 GetPString(IDS_AVVCHK4TEXT) : 388 (List == 3)?349 badList == 3 ? 389 350 GetPString(IDS_AVVCHK5TEXT) : 390 351 NullStr, 391 (Create == 1)?352 badCreate == 1 ? 392 353 GetPString(IDS_AVVCHK6TEXT) : 393 (Create == -1)?354 badCreate == -1 ? 394 355 GetPString(IDS_AVVCHK7TEXT) : 395 (Create == 2)?356 badCreate == 2 ? 396 357 GetPString(IDS_AVVCHK8TEXT) : 397 (Create == 3)?358 badCreate == 3 ? 398 359 GetPString(IDS_AVVCHK9TEXT) : 399 360 NullStr, 400 (Extract == 1)?361 badExtract == 1 ? 401 362 GetPString(IDS_AVVCHK10TEXT) : 402 (Extract == -1)?363 badExtract == -1 ? 403 364 GetPString(IDS_AVVCHK11TEXT) : 404 (Extract == 2)?365 badExtract == 2 ? 405 366 GetPString(IDS_AVVCHK12TEXT) : 406 (Extract == 3)?367 badExtract == 3 ? 407 368 GetPString(IDS_AVVCHK13TEXT) : 408 369 NullStr); 409 if(List || Extract) 410 return 0; 411 return 1; 412 } 413 370 if(badList || badExtract) 371 return FALSE; // Problems 372 return TRUE; // OK 373 } 374 375 //=== ArcReviewDlgProc() View/edit single archiver.bb2 setup === 414 376 415 377 MRESULT EXPENTRY ArcReviewDlgProc(HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) … … 430 392 } 431 393 432 WinSetWindowPtr(hwnd, 0,mp2);394 WinSetWindowPtr(hwnd,QWL_USER,mp2); 433 395 434 396 WinSendDlgItemMsg(hwnd, … … 461 423 AD_SIGPOS, 462 424 s); 463 if (admp->info->sig nature) {425 if (admp->info->siglen) { 464 426 WinSetDlgItemText(hwnd, 465 427 AD_SIG, … … 467 429 s, 468 430 sizeof(s), 469 strlen(admp->info->signature)));431 admp->info->siglen)); 470 432 } 471 433 if (admp->info->startlist) { … … 524 486 break; // WM_INITDLG 525 487 526 527 488 case UM_SETUP: 528 489 if(admp->listname && *admp->listname) { … … 863 824 864 825 case DID_OK: 826 // fixme to avoid creating empty strings for startlist and endlist 865 827 admp->info->startlist = xstrdup_from_window(hwnd,AD_STARTLIST,admp->info->startlist); 866 828 admp->info->endlist = xstrdup_from_window(hwnd,AD_ENDLIST,admp->info->endlist); … … 879 841 AD_SIG, 880 842 admp->info->signature); 881 literal(admp->info->signature);843 admp->info->siglen = literal(admp->info->signature); 882 844 admp->info->list = xstrdup_from_window(hwnd, 883 845 AD_LIST, … … 894 856 admp->info->nameisfirst = (get_int4_from_window(hwnd,AD_FNAMEPOS)) ? TRUE : FALSE; 895 857 { 896 INT ret; 897 898 ret = check_archiver(hwnd,admp->info); 858 INT ok = check_archiver(hwnd,admp->info); 899 859 if(saymsg(MB_YESNO, 900 860 hwnd, 901 861 GetPString(IDS_ADCHANGESINMEMTEXT), 902 862 GetPString(IDS_ADREWRITETEXT), 903 (!ret) ? 904 GetPString(IDS_NOTRECOMMENDTEXT) : 905 NullStr) == 863 !ok ? GetPString(IDS_NOTRECOMMENDTEXT) : NullStr) == 906 864 MBID_YES) { 907 865 908 866 PSZ ab2; 909 867 910 ab2 = searchpath(GetPString(IDS_ARCHIVERBB2)); 868 ab2 = searchpath(GetPString(IDS_ARCHIVERBB2)); // Rewrite without alerting 911 869 rewrite_archiverbb2(ab2); 912 870 }
Note:
See TracChangeset
for help on using the changeset viewer.