Changeset 304


Ignore:
Timestamp:
Jun 27, 2006, 2:23:12 AM (19 years ago)
Author:
root
Message:

EditArchiverData: rework

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/dll/avv.c

    r250 r304  
    77
    88  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
    1210
    1311  31 Jul 04 SHL ArcReviewDlgProc: correct nameis... decodes
     
    1715  14 Aug 05 SHL rewrite_archiverbb2: avoid dereferencing null signature
    1816  14 Aug 05 SHL ArcReviewDlgProc: ensure signature allocated
     17  29 May 06 SHL EditArchiverData: rework
    1918
    2019***********************************************************************/
     
    4342
    4443static PSZ checkfile(PSZ file,INT *error);
    45 static INT check_archiver (HWND hwnd,ARC_TYPE *info);
     44static BOOL check_archiver (HWND hwnd,ARC_TYPE *info);
    4645static INT get_int_from_window (HWND hwnd,USHORT id);
    4746static LONG get_long_from_window (HWND hwnd,USHORT id);
     
    5049static PSZ xstrdup_from_window(HWND hwnd,USHORT id,PSZ pszDest);
    5150
    52 APIRET EditArchiverData(HWND hwnd,DIRCNRDATA *arc)
     51//=== EditArchiverData() Select archiver to edit ===
     52
     53VOID EditArchiverData(HWND hwnd)
    5354{
    5455  ARCDUMP ad;
    5556  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
    9871    }
    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}
    11783
    11884static PSZ xstrdup(PSZ a,PSZ b)
    11985{
    120   if(a)
     86  if (a)
    12187    free(a);
    122   if(b &&
    123      *b)
     88  if (b && *b)
    12489    a = strdup(b);
    12590  else
     
    12792  return a;
    12893}
    129 
    13094
    13195static PSZ xstrdup_from_window(HWND hwnd,USHORT id,PSZ pszDest)
     
    141105}
    142106
    143 
    144107static INT get_int_from_window(HWND hwnd,USHORT id)
    145108{
     
    149112  return atoi(s);
    150113}
    151 
    152114
    153115static INT get_int2_from_window(HWND hwnd,USHORT id)
     
    161123  return (p) ? atoi(p) : 0;
    162124}
    163 
    164125
    165126INT get_int3_from_window (HWND hwnd,USHORT id)
     
    177138  return (p) ? atoi(p) : 0;
    178139}
    179 
    180140
    181141INT get_int4_from_window (HWND hwnd,USHORT id)
     
    198158}
    199159
    200 
    201160LONG get_long_from_window (HWND hwnd,USHORT id)
    202161{
     
    206165  return atol(s);
    207166}
    208 
    209167
    210168#pragma alloc_text (AVV2,nonull,rewrite_archiverbb2,checkfile)
     
    219177}
    220178
     179//=== rewrite_archiverbb2() rewrite archiver.bb2, prompt if arg NULL ===
    221180
    222181VOID rewrite_archiverbb2 (PSZ archiverbb2)
     
    228187  CHAR        *p;
    229188
    230   if(!arcsighead) {
     189  arcsigsmodified = FALSE;
     190
     191  if (!arcsighead) {
    231192    saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
    232193           HWND_DESKTOP,
     
    235196    return;
    236197  }
    237   if(!archiverbb2 || !*archiverbb2) {
     198  // Alert unless file name passed
     199  if (!archiverbb2 || !*archiverbb2) {
    238200    saymsg(MB_ENTER | MB_ICONASTERISK,
    239201           HWND_DESKTOP,
     
    243205  }
    244206  p = strrchr(archiverbb2,'.');   /* save a backup */
    245   if(p && !stricmp(p,".BB2")) {
     207  if (p && !stricmp(p,".BB2")) {
    246208    strcpy(p,".BAK");
    247209    DosDelete(archiverbb2);
     
    251213  }
    252214  fp = fopen(archiverbb2,"w");
    253   if(fp) {
     215  if (fp) {
    254216    fprintf(fp,"%u\n",NUMLINES);
    255217    fprintf(fp,
     
    292254                    s,
    293255                    sizeof(s),
    294                     info->signature ? strlen(info->signature) : 0),
     256                    info->siglen),
    295257              nonull(info->startlist),
    296258              nonull(info->endlist),
     
    310272  }
    311273}
    312 
    313274
    314275static PSZ  checkfile(PSZ file,INT *error)
     
    353314#pragma alloc_text (AVV3,check_archiver,ArcReviewDlgProc)
    354315
    355 static INT check_archiver(HWND hwnd,ARC_TYPE *info)
    356 {
    357   BOOL fStart = FALSE,fEnd = FALSE,fNpos = FALSE;
    358   INT  List = 0,Create = 0,Extract = 0;
     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;
    359320  static PSZ aerrors[3];
    360321
     
    363324  aerrors[2] = GetPString(IDS_BOGUSNAMETEXT);
    364325  if(!info->startlist || !*info->startlist)
    365     fStart = TRUE;
     326    noStart = TRUE;
    366327  if(!info->endlist || !*info->endlist)
    367     fEnd = TRUE;
     328    noEnd = TRUE;
    368329  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
    375336  saymsg(MB_ENTER | MB_ICONASTERISK,
    376337         hwnd,
    377338         GetPString(IDS_WARNINGSTEXT),
    378339         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 ?
    383344          GetPString(IDS_AVVCHK2TEXT) :
    384           (List == -1) ?
     345          badList == -1 ?
    385346           GetPString(IDS_AVVCHK3TEXT) :
    386            (List == 2) ?
     347           badList == 2 ?
    387348            GetPString(IDS_AVVCHK4TEXT) :
    388             (List == 3) ?
     349            badList == 3 ?
    389350             GetPString(IDS_AVVCHK5TEXT) :
    390351             NullStr,
    391             (Create == 1) ?
     352            badCreate == 1 ?
    392353             GetPString(IDS_AVVCHK6TEXT) :
    393              (Create == -1) ?
     354             badCreate == -1 ?
    394355              GetPString(IDS_AVVCHK7TEXT) :
    395               (Create == 2) ?
     356              badCreate == 2 ?
    396357               GetPString(IDS_AVVCHK8TEXT) :
    397                (Create == 3) ?
     358               badCreate == 3 ?
    398359                GetPString(IDS_AVVCHK9TEXT) :
    399360                NullStr,
    400                (Extract == 1) ?
     361               badExtract == 1 ?
    401362                GetPString(IDS_AVVCHK10TEXT) :
    402                 (Extract == -1) ?
     363                badExtract == -1 ?
    403364                 GetPString(IDS_AVVCHK11TEXT) :
    404                  (Extract == 2) ?
     365                 badExtract == 2 ?
    405366                  GetPString(IDS_AVVCHK12TEXT) :
    406                   (Extract == 3) ?
     367                  badExtract == 3 ?
    407368                   GetPString(IDS_AVVCHK13TEXT) :
    408369                   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 ===
    414376
    415377MRESULT EXPENTRY ArcReviewDlgProc(HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
     
    430392      }
    431393
    432       WinSetWindowPtr(hwnd,0,mp2);
     394      WinSetWindowPtr(hwnd,QWL_USER,mp2);
    433395
    434396      WinSendDlgItemMsg(hwnd,
     
    461423                        AD_SIGPOS,
    462424                        s);
    463       if (admp->info->signature) {
     425      if (admp->info->siglen) {
    464426        WinSetDlgItemText(hwnd,
    465427                          AD_SIG,
     
    467429                                s,
    468430                                sizeof(s),
    469                                 strlen(admp->info->signature)));
     431                                admp->info->siglen));
    470432      }
    471433      if (admp->info->startlist) {
     
    524486      break;                            // WM_INITDLG
    525487
    526 
    527488    case UM_SETUP:
    528489      if(admp->listname && *admp->listname) {
     
    863824
    864825        case DID_OK:
     826          // fixme to avoid creating empty strings for startlist and endlist
    865827          admp->info->startlist = xstrdup_from_window(hwnd,AD_STARTLIST,admp->info->startlist);
    866828          admp->info->endlist = xstrdup_from_window(hwnd,AD_ENDLIST,admp->info->endlist);
     
    879841                                                      AD_SIG,
    880842                                                      admp->info->signature);
    881           literal(admp->info->signature);
     843          admp->info->siglen = literal(admp->info->signature);
    882844          admp->info->list = xstrdup_from_window(hwnd,
    883845                                                  AD_LIST,
     
    894856          admp->info->nameisfirst = (get_int4_from_window(hwnd,AD_FNAMEPOS)) ? TRUE : FALSE;
    895857          {
    896             INT ret;
    897 
    898             ret = check_archiver(hwnd,admp->info);
     858            INT ok = check_archiver(hwnd,admp->info);
    899859            if(saymsg(MB_YESNO,
    900860                      hwnd,
    901861                      GetPString(IDS_ADCHANGESINMEMTEXT),
    902862                      GetPString(IDS_ADREWRITETEXT),
    903                       (!ret) ?
    904                        GetPString(IDS_NOTRECOMMENDTEXT) :
    905                        NullStr) ==
     863                      !ok ? GetPString(IDS_NOTRECOMMENDTEXT) : NullStr) ==
    906864               MBID_YES) {
    907865
    908866              PSZ ab2;
    909867
    910               ab2 = searchpath(GetPString(IDS_ARCHIVERBB2));
     868              ab2 = searchpath(GetPString(IDS_ARCHIVERBB2));    // Rewrite without alerting
    911869              rewrite_archiverbb2(ab2);
    912870            }
Note: See TracChangeset for help on using the changeset viewer.