Changeset 551 for trunk/dll/extract.c


Ignore:
Timestamp:
Feb 28, 2007, 2:33:51 AM (19 years ago)
Author:
Gregg Young
Message:

Indentation cleanup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/extract.c

    r549 r551  
    3434static PSZ pszSrcFile = __FILE__;
    3535
    36 MRESULT EXPENTRY ExtractTextProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
     36MRESULT EXPENTRY ExtractTextProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
    3737{
    38   PFNWP        oldproc = (PFNWP)WinQueryWindowPtr(hwnd,0);
    39   static BOOL  emphasized = FALSE;
    40 
    41   switch(msg) {
    42     case DM_DRAGOVER:
    43       if(!emphasized) {
    44         emphasized = TRUE;
    45         DrawTargetEmphasis(hwnd,emphasized);
    46       }
    47       if(AcceptOneDrop(mp1,mp2))
    48         return MRFROM2SHORT(DOR_DROP,
    49                             DO_MOVE);
    50       return MRFROM2SHORT(DOR_NEVERDROP,0);
    51 
    52     case DM_DRAGLEAVE:
    53       if(emphasized) {
    54         emphasized = FALSE;
    55         DrawTargetEmphasis(hwnd,emphasized);
    56       }
    57       break;
    58 
    59     case DM_DROPHELP:
    60       DropHelp(mp1,mp2,hwnd,
    61                GetPString(IDS_EXTDROPHELPTEXT));
    62       return 0;
    63 
    64     case DM_DROP:
     38  PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, 0);
     39  static BOOL emphasized = FALSE;
     40
     41  switch (msg) {
     42  case DM_DRAGOVER:
     43    if (!emphasized) {
     44      emphasized = TRUE;
     45      DrawTargetEmphasis(hwnd, emphasized);
     46    }
     47    if (AcceptOneDrop(mp1, mp2))
     48      return MRFROM2SHORT(DOR_DROP, DO_MOVE);
     49    return MRFROM2SHORT(DOR_NEVERDROP, 0);
     50
     51  case DM_DRAGLEAVE:
     52    if (emphasized) {
     53      emphasized = FALSE;
     54      DrawTargetEmphasis(hwnd, emphasized);
     55    }
     56    break;
     57
     58  case DM_DROPHELP:
     59    DropHelp(mp1, mp2, hwnd, GetPString(IDS_EXTDROPHELPTEXT));
     60    return 0;
     61
     62  case DM_DROP:
     63    {
     64      char szFrom[CCHMAXPATH + 2];
     65
     66      if (emphasized) {
     67        emphasized = FALSE;
     68        DrawTargetEmphasis(hwnd, emphasized);
     69      }
     70      if (GetOneDrop(mp1, mp2, szFrom, sizeof(szFrom)))
     71        WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
     72                   MPFROM2SHORT(IDM_SWITCH, 0), MPFROMP(szFrom));
     73    }
     74    return 0;
     75  }
     76  return (oldproc) ? oldproc(hwnd, msg, mp1, mp2) :
     77    WinDefWindowProc(hwnd, msg, mp1, mp2);
     78}
     79
     80MRESULT EXPENTRY ExtractDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
     81{
     82  EXTRDATA *arcdata = NULL;
     83
     84  switch (msg) {
     85  case WM_INITDLG:
     86    WinSetWindowPtr(hwnd, 0, mp2);
     87    arcdata = (EXTRDATA *) mp2;
     88    {
     89      ULONG size = sizeof(BOOL);
     90      BOOL fRemember = FALSE;
     91      BOOL fDirectory = FALSE;
     92      PFNWP oldproc;
     93
     94      oldproc = WinSubclassWindow(WinWindowFromID(hwnd, EXT_DIRECTORY),
     95                                  (PFNWP) ExtractTextProc);
     96      if (oldproc)
     97        WinSetWindowPtr(WinWindowFromID(hwnd, EXT_DIRECTORY),
     98                        QWL_USER, (PVOID) oldproc);
     99      PrfQueryProfileData(fmprof, FM3Str, "RememberExt",
     100                          (PVOID) & fRemember, &size);
     101      PrfQueryProfileData(fmprof, FM3Str, "DirectoryExt",
     102                          (PVOID) & fDirectory, &size);
     103      WinCheckButton(hwnd, EXT_REMEMBER, fRemember);
     104      WinCheckButton(hwnd, EXT_AWDIRS, fDirectory);
     105      WinSendDlgItemMsg(hwnd, EXT_DIRECTORY, EM_SETTEXTLIMIT,
     106                        MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     107      WinSendDlgItemMsg(hwnd, EXT_COMMAND, EM_SETTEXTLIMIT,
     108                        MPFROM2SHORT(256, 0), MPVOID);
     109      WinSendDlgItemMsg(hwnd, EXT_MASK, EM_SETTEXTLIMIT,
     110                        MPFROM2SHORT(256, 0), MPVOID);
     111      WinSendDlgItemMsg(hwnd, EXT_FILENAME, EM_SETTEXTLIMIT,
     112                        MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     113      if (arcdata->arcname && *arcdata->arcname)
     114        WinSetDlgItemText(hwnd, EXT_FILENAME, arcdata->arcname);
     115      else
     116        WinSetDlgItemText(hwnd, EXT_FILENAME, GetPString(IDS_EXTVARIOUSTEXT));
     117      if (fDirectory) {
     118        WinSendDlgItemMsg(hwnd, EXT_WDIRS, BM_SETCHECK,
     119                          MPFROM2SHORT(TRUE, 0), MPVOID);
     120        WinSetDlgItemText(hwnd, EXT_COMMAND, arcdata->info->exwdirs);
     121      }
     122      else {
     123        WinSendDlgItemMsg(hwnd, EXT_NORMAL, BM_SETCHECK,
     124                          MPFROM2SHORT(TRUE, 0), MPVOID);
     125        WinSetDlgItemText(hwnd, EXT_COMMAND, arcdata->info->extract);
     126
     127      }
     128      if (fRemember) {
     129
     130        CHAR textdir[CCHMAXPATH];
     131
     132        size = sizeof(textdir);
     133        *textdir = 0;
     134        PrfQueryProfileData(fmprof, FM3Str, "Ext_ExtractDir",
     135                            (PVOID) textdir, &size);
     136        if (*textdir && !IsFile(textdir))
     137          strcpy(arcdata->extractdir, textdir);
     138        size = sizeof(textdir);
     139        *textdir = 0;
     140        PrfQueryProfileData(fmprof, FM3Str, "Ext_Mask", (PVOID) textdir,
     141                            &size);
     142        WinSetDlgItemText(hwnd, EXT_MASK, textdir);
     143      }
     144      if (*extractpath && (!fRemember || !*arcdata->extractdir)) {
     145        if (arcdata->arcname && *arcdata->arcname &&
     146            !strcmp(extractpath, "*")) {
     147
     148          CHAR *p;
     149
     150          strcpy(arcdata->extractdir, arcdata->arcname);
     151          p = strrchr(arcdata->extractdir, '\\');
     152          if (p) {
     153            if (p < arcdata->extractdir + 3)
     154              p++;
     155            *p = 0;
     156          }
     157        }
     158        else
     159          strcpy(arcdata->extractdir, extractpath);
     160      }
     161      if (!*arcdata->extractdir) {
     162        if (*lastextractpath)
     163          strcpy(arcdata->extractdir, lastextractpath);
     164        else if (arcdata->arcname && *arcdata->arcname) {
     165
     166          CHAR *p;
     167
     168          strcpy(arcdata->extractdir, arcdata->arcname);
     169          p = strrchr(arcdata->extractdir, '\\');
     170          if (p) {
     171            if (p < arcdata->extractdir + 3)
     172              p++;
     173            *p = 0;
     174          }
     175        }
     176        if (!*arcdata->extractdir)
     177          save_dir2(arcdata->extractdir);
     178      }
     179      WinSetDlgItemText(hwnd, EXT_DIRECTORY, arcdata->extractdir);
     180      if (!arcdata->info->exwdirs)
     181        WinEnableWindow(WinWindowFromID(hwnd, EXT_WDIRS), FALSE);
     182      else if (fRemember) {
     183        size = sizeof(BOOL);
     184        fRemember = FALSE;
     185        PrfQueryProfileData(fmprof, FM3Str, "Ext_WDirs",
     186                            (PVOID) & fRemember, &size);
     187        if (fRemember)
     188          PostMsg(WinWindowFromID(hwnd, EXT_WDIRS), BM_CLICK, MPVOID, MPVOID);
     189      }
     190    }
     191    *arcdata->command = 0;
     192    PosOverOkay(hwnd);
     193    break;
     194
     195  case WM_ADJUSTWINDOWPOS:
     196    PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     197    break;
     198
     199  case UM_SETDIR:
     200    PaintRecessedWindow(WinWindowFromID(hwnd, EXT_HELP), (HPS) 0, FALSE,
     201                        TRUE);
     202    return 0;
     203
     204  case WM_CONTROL:
     205    arcdata = (EXTRDATA *) WinQueryWindowPtr(hwnd, 0);
     206    switch (SHORT1FROMMP(mp1)) {
     207    case EXT_REMEMBER:
    65208      {
    66         char szFrom[CCHMAXPATH + 2];
    67 
    68         if(emphasized) {
    69           emphasized = FALSE;
    70           DrawTargetEmphasis(hwnd,emphasized);
    71         }
    72         if(GetOneDrop(mp1,mp2,szFrom,sizeof(szFrom)))
    73           WinSendMsg(WinQueryWindow(hwnd,QW_PARENT),WM_COMMAND,
    74                      MPFROM2SHORT(IDM_SWITCH,0),MPFROMP(szFrom));
    75       }
    76       return 0;
     209        BOOL fRemember = WinQueryButtonCheckstate(hwnd, EXT_REMEMBER);
     210
     211        PrfWriteProfileData(fmprof, FM3Str, "RememberExt",
     212                            (PVOID) & fRemember, sizeof(BOOL));
     213      }
     214      break;
     215
     216    case EXT_AWDIRS:
     217      {
     218        BOOL fDirectory = WinQueryButtonCheckstate(hwnd, EXT_AWDIRS);
     219
     220        PrfWriteProfileData(fmprof, FM3Str, "DirectoryExt",
     221                            (PVOID) & fDirectory, sizeof(BOOL));
     222
     223        if (fDirectory) {
     224          WinSendDlgItemMsg(hwnd, EXT_WDIRS, BM_SETCHECK,
     225                            MPFROM2SHORT(TRUE, 0), MPVOID);
     226          WinSetDlgItemText(hwnd, EXT_COMMAND, arcdata->info->exwdirs);
     227        }
     228        else {
     229          WinSendDlgItemMsg(hwnd, EXT_NORMAL, BM_SETCHECK,
     230                            MPFROM2SHORT(TRUE, 0), MPVOID);
     231          WinSetDlgItemText(hwnd, EXT_COMMAND, arcdata->info->extract);
     232        }
     233      }
     234      break;
     235
     236    case EXT_FILENAME:
     237      if (SHORT2FROMMP(mp1) == EN_KILLFOCUS)
     238        WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCDEFAULTHELPTEXT));
     239      if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
     240        WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCARCNAMEHELPTEXT));
     241      break;
     242
     243    case EXT_DIRECTORY:
     244      if (SHORT2FROMMP(mp1) == EN_KILLFOCUS)
     245        WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCDEFAULTHELPTEXT));
     246      if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
     247        WinSetDlgItemText(hwnd, EXT_HELP,
     248                          GetPString(IDS_EXTEXTRACTDIRHELPTEXT));
     249      break;
     250
     251    case EXT_COMMAND:
     252      if (SHORT2FROMMP(mp1) == EN_KILLFOCUS)
     253        WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCDEFAULTHELPTEXT));
     254      if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
     255        WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCCMDHELPTEXT));
     256      break;
     257
     258    case EXT_MASK:
     259      if (SHORT2FROMMP(mp1) == EN_KILLFOCUS)
     260        WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCDEFAULTHELPTEXT));
     261      if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
     262        WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCMASKHELPTEXT));
     263      break;
     264
     265    case EXT_NORMAL:
     266      if ((BOOL) WinSendDlgItemMsg(hwnd, EXT_NORMAL, BM_QUERYCHECK,
     267                                   MPVOID, MPVOID))
     268        WinSetDlgItemText(hwnd, EXT_COMMAND, arcdata->info->extract);
     269      break;
     270
     271    case EXT_WDIRS:
     272      if (arcdata->info->exwdirs) {
     273        if ((BOOL) WinSendDlgItemMsg(hwnd, EXT_WDIRS, BM_QUERYCHECK,
     274                                     MPVOID, MPVOID))
     275          WinSetDlgItemText(hwnd, EXT_COMMAND, arcdata->info->exwdirs);
     276      }
     277      break;
     278    }
     279    return 0;
     280
     281  case WM_COMMAND:
     282    arcdata = (EXTRDATA *) WinQueryWindowPtr(hwnd, 0);
     283    switch (SHORT1FROMMP(mp1)) {
     284    case IDM_SWITCH:
     285      if (mp2) {
     286
     287        CHAR tdir[CCHMAXPATH];
     288
     289        strcpy(tdir, (CHAR *) mp2);
     290        MakeValidDir(tdir);
     291        WinSetDlgItemText(hwnd, EXT_DIRECTORY, tdir);
     292      }
     293      break;
     294
     295    case DID_CANCEL:
     296      arcdata->ret = 0;
     297      WinDismissDlg(hwnd, 0);
     298      break;
     299    case DID_OK:
     300      {
     301        CHAR s[CCHMAXPATH + 1];
     302        BOOL fRemember;
     303
     304        fRemember = WinQueryButtonCheckstate(hwnd, EXT_REMEMBER);
     305        *s = 0;
     306        WinQueryDlgItemText(hwnd, EXT_DIRECTORY, CCHMAXPATH, s);
     307        bstrip(s);
     308        if (*s) {
     309          if (!SetDir(WinQueryWindow(WinQueryWindow(hwnd, QW_PARENT),
     310                                     QW_OWNER), hwnd, s, 0)) {
     311            strcpy(arcdata->extractdir, s);
     312            WinSetDlgItemText(hwnd, EXT_DIRECTORY, s);
     313            if ((!isalpha(*s) || s[1] != ':') && *s != '.')
     314              saymsg(MB_ENTER, hwnd,
     315                     GetPString(IDS_WARNINGTEXT),
     316                     GetPString(IDS_SPECIFYDRIVETEXT));
     317          }
     318          else
     319            break;
     320          strcpy(lastextractpath, s);
     321          if (fRemember) {
     322            PrfWriteProfileString(fmprof, FM3Str, "Ext_ExtractDir", s);
     323            fRemember = WinQueryButtonCheckstate(hwnd, EXT_WDIRS);
     324            PrfWriteProfileData(fmprof, FM3Str, "Ext_WDirs",
     325                                (PVOID) & fRemember, sizeof(BOOL));
     326            fRemember = TRUE;
     327          }
     328          *s = 0;
     329          WinQueryDlgItemText(hwnd, EXT_COMMAND, 256, s);
     330          if (*s) {
     331            strcpy(arcdata->command, s);
     332            *s = 0;
     333            WinQueryDlgItemText(hwnd, EXT_MASK, 256, s);
     334            *arcdata->masks = 0;
     335            strcpy(arcdata->masks, s);
     336            if (fRemember)
     337              PrfWriteProfileString(fmprof, FM3Str, "Ext_Mask", s);
     338            arcdata->ret = 1;
     339            WinDismissDlg(hwnd, 1);
     340            break;
     341          }
     342        }
     343      }
     344      DosBeep(50, 100);                 // Complain a refuse to quit
     345      break;
     346
     347    case IDM_HELP:
     348      if (hwndHelp)
     349        WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
     350                   MPFROM2SHORT(HELP_EXTRACT, 0), MPFROMSHORT(HM_RESOURCEID));
     351      break;
     352
     353    case EXT_WALK:
     354      {
     355        CHAR temp[CCHMAXPATH + 1];
     356
     357        strcpy(temp, arcdata->extractdir);
     358        if (WinDlgBox(HWND_DESKTOP, WinQueryWindow(WinQueryWindow(hwnd,
     359                                                                  QW_PARENT),
     360                                                   QW_OWNER),
     361                      WalkExtractDlgProc, FM3ModHandle, WALK_FRAME,
     362                      (PVOID) temp)) {
     363          if (*temp && stricmp(temp, arcdata->extractdir)) {
     364            strcpy(arcdata->extractdir, temp);
     365          }
     366        }
     367        WinSetDlgItemText(hwnd, EXT_DIRECTORY, arcdata->extractdir);
     368      }
     369      break;
     370
     371    case EXT_SEE:
     372      {
     373        CHAR s[1001], *p;
     374        EXECARGS ex;
     375
     376        WinQueryDlgItemText(hwnd, EXT_COMMAND, 256, s);
     377        lstrip(s);
     378        if (!*s)
     379          Runtime_Error(pszSrcFile, __LINE__, "no command");
     380        else {
     381          p = strchr(s, ' ');
     382          if (p)
     383            *p = 0;                     // Drop options
     384          memset(&ex, 0, sizeof(EXECARGS));
     385          ex.commandline = s;
     386          ex.flags = WINDOWED | SEPARATEKEEP | MAXIMIZED;
     387          *ex.path = 0;
     388          *ex.environment = 0;
     389          if (WinDlgBox(HWND_DESKTOP,
     390                        hwnd,
     391                        CmdLineDlgProc,
     392                        FM3ModHandle, EXEC_FRAME, MPFROMP(&ex)) && *s) {
     393            runemf2(ex.flags,
     394                    hwnd,
     395                    NULL, (*ex.environment) ? ex.environment : NULL, "%s", s);
     396          }
     397        }
     398      }
     399      break;
     400    }
     401    return 0;
     402
     403  case WM_CLOSE:
     404    break;
    77405  }
    78   return (oldproc) ? oldproc(hwnd,msg,mp1,mp2) :
    79                      WinDefWindowProc(hwnd,msg,mp1,mp2);
     406  return WinDefDlgProc(hwnd, msg, mp1, mp2);
    80407}
    81 
    82 
    83 MRESULT EXPENTRY ExtractDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
    84 {
    85   EXTRDATA    *arcdata = NULL;
    86 
    87   switch(msg) {
    88     case WM_INITDLG:
    89       WinSetWindowPtr(hwnd,0,mp2);
    90       arcdata = (EXTRDATA *)mp2;
    91       {
    92         ULONG size = sizeof(BOOL);
    93         BOOL  fRemember = FALSE;
    94         BOOL  fDirectory = FALSE;
    95         PFNWP oldproc;
    96 
    97         oldproc = WinSubclassWindow(WinWindowFromID(hwnd,EXT_DIRECTORY),
    98                                     (PFNWP)ExtractTextProc);
    99         if(oldproc)
    100           WinSetWindowPtr(WinWindowFromID(hwnd,EXT_DIRECTORY),
    101                           QWL_USER,
    102                           (PVOID)oldproc);
    103         PrfQueryProfileData(fmprof,FM3Str,"RememberExt",
    104                             (PVOID)&fRemember,&size);
    105         PrfQueryProfileData(fmprof,FM3Str,"DirectoryExt",
    106                             (PVOID)&fDirectory,&size);
    107         WinCheckButton(hwnd,EXT_REMEMBER,fRemember);
    108         WinCheckButton(hwnd,EXT_AWDIRS,fDirectory);
    109         WinSendDlgItemMsg(hwnd,EXT_DIRECTORY,EM_SETTEXTLIMIT,
    110                           MPFROM2SHORT(CCHMAXPATH,0),MPVOID);
    111         WinSendDlgItemMsg(hwnd,EXT_COMMAND,EM_SETTEXTLIMIT,
    112                           MPFROM2SHORT(256,0),MPVOID);
    113         WinSendDlgItemMsg(hwnd,EXT_MASK,EM_SETTEXTLIMIT,
    114                           MPFROM2SHORT(256,0),MPVOID);
    115         WinSendDlgItemMsg(hwnd,EXT_FILENAME,EM_SETTEXTLIMIT,
    116                           MPFROM2SHORT(CCHMAXPATH,0),MPVOID);
    117         if(arcdata->arcname && *arcdata->arcname)
    118           WinSetDlgItemText(hwnd,EXT_FILENAME,arcdata->arcname);
    119         else
    120           WinSetDlgItemText(hwnd,EXT_FILENAME,
    121                             GetPString(IDS_EXTVARIOUSTEXT));
    122         if(fDirectory){
    123         WinSendDlgItemMsg(hwnd,EXT_WDIRS,BM_SETCHECK,
    124                           MPFROM2SHORT(TRUE,0),MPVOID);
    125         WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->exwdirs);
    126         }
    127         else {
    128         WinSendDlgItemMsg(hwnd,EXT_NORMAL,BM_SETCHECK,
    129                           MPFROM2SHORT(TRUE,0),MPVOID);
    130         WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->extract);
    131 
    132         }
    133         if(fRemember) {
    134 
    135           CHAR textdir[CCHMAXPATH];
    136 
    137           size = sizeof(textdir);
    138           *textdir = 0;
    139           PrfQueryProfileData(fmprof,FM3Str,"Ext_ExtractDir",
    140                               (PVOID)textdir,&size);
    141           if(*textdir && !IsFile(textdir))
    142             strcpy(arcdata->extractdir,textdir);
    143           size = sizeof(textdir);
    144           *textdir = 0;
    145           PrfQueryProfileData(fmprof,FM3Str,"Ext_Mask",(PVOID)textdir,&size);
    146           WinSetDlgItemText(hwnd,EXT_MASK,textdir);
    147         }
    148         if(*extractpath && (!fRemember || !*arcdata->extractdir)) {
    149           if(arcdata->arcname && *arcdata->arcname &&
    150              !strcmp(extractpath,"*")) {
    151 
    152             CHAR *p;
    153 
    154             strcpy(arcdata->extractdir,arcdata->arcname);
    155             p = strrchr(arcdata->extractdir,'\\');
    156             if(p) {
    157               if(p < arcdata->extractdir + 3)
    158                 p++;
    159               *p = 0;
    160             }
    161           }
    162           else
    163             strcpy(arcdata->extractdir,extractpath);
    164         }
    165         if(!*arcdata->extractdir) {
    166           if(*lastextractpath)
    167             strcpy(arcdata->extractdir,lastextractpath);
    168           else if(arcdata->arcname && *arcdata->arcname) {
    169 
    170             CHAR *p;
    171 
    172             strcpy(arcdata->extractdir,arcdata->arcname);
    173             p = strrchr(arcdata->extractdir,'\\');
    174             if(p) {
    175               if(p < arcdata->extractdir + 3)
    176                 p++;
    177               *p = 0;
    178             }
    179           }
    180           if(!*arcdata->extractdir)
    181             save_dir2(arcdata->extractdir);
    182         }
    183         WinSetDlgItemText(hwnd,EXT_DIRECTORY,arcdata->extractdir);
    184         if(!arcdata->info->exwdirs)
    185           WinEnableWindow(WinWindowFromID(hwnd,EXT_WDIRS),FALSE);
    186         else if(fRemember) {
    187           size = sizeof(BOOL);
    188           fRemember = FALSE;
    189           PrfQueryProfileData(fmprof,FM3Str,"Ext_WDirs",
    190                               (PVOID)&fRemember,&size);
    191           if(fRemember)
    192             PostMsg(WinWindowFromID(hwnd,EXT_WDIRS),BM_CLICK,MPVOID,MPVOID);
    193         }
    194       }
    195       *arcdata->command = 0;
    196       PosOverOkay(hwnd);
    197       break;
    198 
    199     case WM_ADJUSTWINDOWPOS:
    200       PostMsg(hwnd,UM_SETDIR,MPVOID,MPVOID);
    201       break;
    202 
    203     case UM_SETDIR:
    204       PaintRecessedWindow(WinWindowFromID(hwnd,EXT_HELP),(HPS)0,FALSE,TRUE);
    205       return 0;
    206 
    207     case WM_CONTROL:
    208       arcdata = (EXTRDATA *)WinQueryWindowPtr(hwnd,0);
    209       switch(SHORT1FROMMP(mp1)) {
    210         case EXT_REMEMBER:
    211           {
    212             BOOL fRemember = WinQueryButtonCheckstate(hwnd,EXT_REMEMBER);
    213 
    214             PrfWriteProfileData(fmprof,FM3Str,"RememberExt",
    215                                 (PVOID)&fRemember,sizeof(BOOL));
    216           }
    217           break;
    218 
    219         case EXT_AWDIRS:
    220           {
    221             BOOL fDirectory = WinQueryButtonCheckstate(hwnd,EXT_AWDIRS);
    222 
    223             PrfWriteProfileData(fmprof,FM3Str,"DirectoryExt",
    224                                 (PVOID)&fDirectory,sizeof(BOOL));
    225 
    226             if(fDirectory){
    227             WinSendDlgItemMsg(hwnd,EXT_WDIRS,BM_SETCHECK,
    228                               MPFROM2SHORT(TRUE,0),MPVOID);
    229             WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->exwdirs);
    230             }
    231             else  {
    232             WinSendDlgItemMsg(hwnd,EXT_NORMAL,BM_SETCHECK,
    233                           MPFROM2SHORT(TRUE,0),MPVOID);
    234             WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->extract);
    235             }
    236           }
    237           break;
    238 
    239         case EXT_FILENAME:
    240           if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
    241             WinSetDlgItemText(hwnd,EXT_HELP,
    242                               GetPString(IDS_ARCDEFAULTHELPTEXT));
    243           if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
    244             WinSetDlgItemText(hwnd,EXT_HELP,
    245                               GetPString(IDS_ARCARCNAMEHELPTEXT));
    246           break;
    247 
    248         case EXT_DIRECTORY:
    249           if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
    250             WinSetDlgItemText(hwnd,EXT_HELP,GetPString(IDS_ARCDEFAULTHELPTEXT));
    251           if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
    252             WinSetDlgItemText(hwnd,EXT_HELP,
    253                               GetPString(IDS_EXTEXTRACTDIRHELPTEXT));
    254           break;
    255 
    256         case EXT_COMMAND:
    257           if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
    258             WinSetDlgItemText(hwnd,EXT_HELP,
    259                               GetPString(IDS_ARCDEFAULTHELPTEXT));
    260           if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
    261             WinSetDlgItemText(hwnd,EXT_HELP,
    262                               GetPString(IDS_ARCCMDHELPTEXT));
    263           break;
    264 
    265         case EXT_MASK:
    266           if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
    267             WinSetDlgItemText(hwnd,EXT_HELP,
    268                               GetPString(IDS_ARCDEFAULTHELPTEXT));
    269           if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
    270             WinSetDlgItemText(hwnd,EXT_HELP,
    271                               GetPString(IDS_ARCMASKHELPTEXT));
    272           break;
    273 
    274         case EXT_NORMAL:
    275           if((BOOL)WinSendDlgItemMsg(hwnd,EXT_NORMAL,BM_QUERYCHECK,
    276                                      MPVOID,MPVOID))
    277             WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->extract);
    278           break;
    279 
    280         case EXT_WDIRS:
    281           if(arcdata->info->exwdirs) {
    282             if((BOOL)WinSendDlgItemMsg(hwnd,EXT_WDIRS,BM_QUERYCHECK,
    283                                        MPVOID,MPVOID))
    284               WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->exwdirs);
    285           }
    286           break;
    287       }
    288       return 0;
    289 
    290     case WM_COMMAND:
    291       arcdata = (EXTRDATA *)WinQueryWindowPtr(hwnd,0);
    292       switch(SHORT1FROMMP(mp1)) {
    293         case IDM_SWITCH:
    294           if(mp2) {
    295 
    296             CHAR tdir[CCHMAXPATH];
    297 
    298             strcpy(tdir,(CHAR *)mp2);
    299             MakeValidDir(tdir);
    300             WinSetDlgItemText(hwnd,EXT_DIRECTORY,tdir);
    301           }
    302           break;
    303 
    304         case DID_CANCEL:
    305           arcdata->ret = 0;
    306           WinDismissDlg(hwnd,0);
    307           break;
    308         case DID_OK:
    309           {
    310             CHAR s[CCHMAXPATH + 1];
    311             BOOL fRemember;
    312 
    313             fRemember = WinQueryButtonCheckstate(hwnd,EXT_REMEMBER);
    314             *s = 0;
    315             WinQueryDlgItemText(hwnd,EXT_DIRECTORY,CCHMAXPATH,s);
    316             bstrip(s);
    317             if(*s) {
    318               if(!SetDir(WinQueryWindow(WinQueryWindow(hwnd,QW_PARENT),
    319                          QW_OWNER),hwnd,s,0)) {
    320                 strcpy(arcdata->extractdir,s);
    321                 WinSetDlgItemText(hwnd,EXT_DIRECTORY,s);
    322                 if((!isalpha(*s) || s[1] != ':') && *s != '.')
    323                   saymsg(MB_ENTER,hwnd,
    324                          GetPString(IDS_WARNINGTEXT),
    325                          GetPString(IDS_SPECIFYDRIVETEXT));
    326               }
    327               else
    328                 break;
    329               strcpy(lastextractpath,s);
    330               if(fRemember) {
    331                 PrfWriteProfileString(fmprof,FM3Str,"Ext_ExtractDir",s);
    332                 fRemember = WinQueryButtonCheckstate(hwnd,EXT_WDIRS);
    333                 PrfWriteProfileData(fmprof,FM3Str,"Ext_WDirs",
    334                                     (PVOID)&fRemember,sizeof(BOOL));
    335                 fRemember = TRUE;
    336               }
    337               *s = 0;
    338               WinQueryDlgItemText(hwnd,EXT_COMMAND,256,s);
    339               if(*s) {
    340                 strcpy(arcdata->command,s);
    341                 *s = 0;
    342                 WinQueryDlgItemText(hwnd,EXT_MASK,256,s);
    343                 *arcdata->masks = 0;
    344                 strcpy(arcdata->masks,s);
    345                 if(fRemember)
    346                   PrfWriteProfileString(fmprof,FM3Str,"Ext_Mask",s);
    347                 arcdata->ret = 1;
    348                 WinDismissDlg(hwnd,1);
    349                 break;
    350               }
    351             }
    352           }
    353           DosBeep(50,100);              // Complain a refuse to quit
    354           break;
    355 
    356         case IDM_HELP:
    357           if(hwndHelp)
    358             WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
    359                        MPFROM2SHORT(HELP_EXTRACT,0),
    360                        MPFROMSHORT(HM_RESOURCEID));
    361           break;
    362 
    363         case EXT_WALK:
    364           {
    365             CHAR temp[CCHMAXPATH + 1];
    366 
    367             strcpy(temp,arcdata->extractdir);
    368             if(WinDlgBox(HWND_DESKTOP,WinQueryWindow(WinQueryWindow(hwnd,
    369                          QW_PARENT),QW_OWNER),WalkExtractDlgProc,FM3ModHandle,
    370                          WALK_FRAME,(PVOID)temp)) {
    371               if(*temp && stricmp(temp,arcdata->extractdir)) {
    372                 strcpy(arcdata->extractdir,temp);
    373               }
    374             }
    375             WinSetDlgItemText(hwnd,EXT_DIRECTORY,arcdata->extractdir);
    376           }
    377           break;
    378 
    379         case EXT_SEE:
    380           {
    381             CHAR     s[1001],*p;
    382             EXECARGS ex;
    383 
    384             WinQueryDlgItemText(hwnd,EXT_COMMAND,256,s);
    385             lstrip(s);
    386             if (!*s)
    387               Runtime_Error(pszSrcFile, __LINE__, "no command");
    388             else {
    389               p = strchr(s,' ');
    390               if (p)
    391                 *p = 0;                 // Drop options
    392               memset(&ex,0,sizeof(EXECARGS));
    393               ex.commandline = s;
    394               ex.flags = WINDOWED | SEPARATEKEEP | MAXIMIZED;
    395               *ex.path = 0;
    396               *ex.environment = 0;
    397               if(WinDlgBox(HWND_DESKTOP,
    398                            hwnd,
    399                            CmdLineDlgProc,
    400                            FM3ModHandle,
    401                            EXEC_FRAME,
    402                            MPFROMP(&ex)) &&
    403                  *s)
    404               {
    405                 runemf2(ex.flags,
    406                         hwnd,
    407                         NULL,
    408                         (*ex.environment) ? ex.environment : NULL ,
    409                         "%s",
    410                         s);
    411               }
    412             }
    413           }
    414           break;
    415       }
    416       return 0;
    417 
    418     case WM_CLOSE:
    419       break;
    420   }
    421   return WinDefDlgProc(hwnd,msg,mp1,mp2);
    422 }
Note: See TracChangeset for help on using the changeset viewer.