wizwproc.c
上传用户:jlteech
上传日期:2007-01-06
资源大小:349k
文件大小:17k
源码类别:

压缩解压

开发平台:

Visual C++

  1. /*
  2.  Copyright (C) 1996 Mike White
  3.  Permission is granted to any individual or institution to use, copy, or
  4.  redistribute this software so long as all of the original files are included,
  5.  that it is not sold for profit, and that this copyright notice is retained.
  6. */
  7. #include <windows.h>
  8. #include <stdio.h>
  9. #include "wiz.h"
  10. #include "helpids.h"
  11. #ifdef ZE_MEM
  12. #undef ZE_MEM
  13. #define ZE_MEM 4
  14. #endif
  15. #include "ziperr.h"
  16. RECT MainRc;  /* Used solely to remember WiZ window position/size */
  17. int ZipRetCode;
  18. BOOL fSaveZipToDir;
  19. BOOL fSaveUnZipFromDir;
  20. char szFilesToAdd[80];
  21. HWND hGetFilesDlg;
  22. /* Forward references */
  23. void WriteZipOptionsProfile(void);
  24. void ReadZipOptionsProfile(void);
  25. void GetWizOptions()
  26. {
  27. ReadZipOptionsProfile();
  28. }
  29. void ReadZipOptionsProfile()
  30. {
  31. int width, height, top;
  32. RECT rectT, re;
  33. HWND hWndDesktop;
  34. char szZipOptions[80];
  35. /* NOTE: ZpOpt.fLevel defaults to 6 unless specified otherwise */
  36. char szZipOptionsDefault[] = "6000000000000000000010100110111001001";
  37. int i=0;
  38. BOOL flag = FALSE;
  39. GetPrivateProfileString(szAppName, szZipOptionKey, szZipOptionsDefault,
  40.    szZipOptions, 80, szWiZIniFile);
  41. if (lstrlen(szZipOptions) != lstrlen(szZipOptionsDefault))
  42.    {
  43.    lstrcpy(szZipOptions, szZipOptionsDefault);
  44.    flag = TRUE;
  45.    }
  46. ZpOpt.fLevel         = szZipOptions[i++];
  47. ZpOpt.fSuffix        = szZipOptions[i++]-'0';
  48. ZpOpt.fEncrypt       = szZipOptions[i++]-'0';
  49. ZpOpt.fSystem        = szZipOptions[i++]-'0';
  50. ZpOpt.fVolume        = szZipOptions[i++]-'0';
  51. ZpOpt.fExtra         = szZipOptions[i++]-'0';
  52. ZpOpt.fNoDirEntries  = szZipOptions[i++]-'0';
  53. ZpOpt.fVerbose       = szZipOptions[i++]-'0';
  54. ZpOpt.fQuiet         = szZipOptions[i++]-'0';
  55. ZpOpt.fCRLF_LF       = szZipOptions[i++]-'0';
  56. ZpOpt.fLF_CRLF       = szZipOptions[i++]-'0';
  57. ZpOpt.fJunkDir       = szZipOptions[i++]-'0';
  58. ZpOpt.fRecurse       = szZipOptions[i++]-'0';
  59. ZpOpt.fGrow          = szZipOptions[i++]-'0';
  60. ZpOpt.fForce         = szZipOptions[i++]-'0';
  61. ZpOpt.fMove          = szZipOptions[i++]-'0';
  62. ZpOpt.fUpdate        = szZipOptions[i++]-'0';
  63. ZpOpt.fFreshen       = szZipOptions[i++]-'0';
  64. ZpOpt.fLatestTime    = szZipOptions[i++]-'0';
  65. ZpOpt.fComment       = szZipOptions[i++]-'0';
  66. fSaveZipToDir      = szZipOptions[i++]-'0';
  67. lpDCL->noflag      = szZipOptions[i++]-'0';
  68. lpDCL->PromptToOverwrite = szZipOptions[i++]-'0';
  69. lpDCL->ExtractOnlyNewer = szZipOptions[i++]-'0';
  70. lpDCL->SpaceToUnderscore = szZipOptions[i++]-'0';
  71. uf.fSaveUnZipToDir     = szZipOptions[i++]-'0';
  72. uf.fSaveUnZipFromDir   = szZipOptions[i++]-'0';
  73. uf.fTranslate          = szZipOptions[i++]-'0';
  74. uf.fRecreateDirs       = szZipOptions[i++]-'0';
  75. uf.fFormatLong         = szZipOptions[i++]-'0';
  76. uf.fShowBubbleHelp     = szZipOptions[i++]-'0';
  77. uf.fUnzipToZipDir      = szZipOptions[i++]-'0';
  78. fMakeSFX               = szZipOptions[i++]-'0';
  79. fLB_Selection          = szZipOptions[i++]-'0';
  80. lpDCL->fPrivilege      = szZipOptions[i++]-'0';
  81. ZpOpt.fPrivilege      = szZipOptions[i++]-'0';
  82. fMakeDosSFX            = szZipOptions[i]  -'0';
  83. /* If this is a 16 bit version, or if we are not running on NT, force
  84.    disabling of privilege/acl stuff
  85.  */
  86. #ifdef WIN32
  87. if (!dwPlatformId)
  88. #endif
  89.    {
  90.    lpDCL->fPrivilege = FALSE;
  91.    ZpOpt.fPrivilege = FALSE;
  92.    }
  93. /* Verify that all entries are valid */
  94. if ((ZpOpt.fLevel < '0') || (ZpOpt.fLevel > '9'))
  95.    {
  96.    ZpOpt.fLevel = '6'; /* Set compression level to default */
  97.    flag = TRUE;
  98.    }
  99. if ((ZpOpt.fPrivilege < 0) || (ZpOpt.fPrivilege > 3))
  100.    {
  101.    ZpOpt.fPrivilege = 0; /* Turn off privilege */
  102.    flag = TRUE;
  103.    }
  104. if ((lpDCL->fPrivilege < 0) || (lpDCL->fPrivilege > 3))
  105.    {
  106.    lpDCL->fPrivilege = 0; /* Turn off privilege */
  107.    flag = TRUE;
  108.    }
  109. if ((ZpOpt.fSuffix != 0) && (ZpOpt.fSuffix != 1))
  110.    {
  111.    ZpOpt.fSuffix = 0;
  112.    flag = TRUE;
  113.    }
  114. if ((ZpOpt.fEncrypt!= 0) && (ZpOpt.fEncrypt!= 1))
  115.    {
  116.    ZpOpt.fEncrypt= 0;
  117.    flag = TRUE;
  118.    }
  119. if ((ZpOpt.fSystem!= 0) && (ZpOpt.fSystem!= 1))
  120.    {
  121.    ZpOpt.fSystem= 0;
  122.    flag = TRUE;
  123.    }
  124. if ((ZpOpt.fVolume!= 0) && (ZpOpt.fVolume!= 1))
  125.    {
  126.    ZpOpt.fVolume= 0;
  127.    flag = TRUE;
  128.    }
  129. if ((ZpOpt.fExtra!= 0) && (ZpOpt.fExtra!= 1))
  130.    {
  131.    ZpOpt.fExtra= 0;
  132.    flag = TRUE;
  133.    }
  134. if ((ZpOpt.fNoDirEntries!= 0) && (ZpOpt.fNoDirEntries!= 1))
  135.    {
  136.    ZpOpt.fNoDirEntries= 0;
  137.    flag = TRUE;
  138.    }
  139. if ((ZpOpt.fVerbose!= 0) && (ZpOpt.fVerbose!= 1))
  140.    {
  141.    ZpOpt.fVerbose= 0;
  142.    flag = TRUE;
  143.    }
  144. if ((ZpOpt.fQuiet!= 0) && (ZpOpt.fQuiet!= 1))
  145.    {
  146.    ZpOpt.fQuiet= 0;
  147.    flag = TRUE;
  148.    }
  149. if ((ZpOpt.fCRLF_LF!= 0) && (ZpOpt.fCRLF_LF!= 1))
  150.    {
  151.    ZpOpt.fCRLF_LF= 0;
  152.    flag = TRUE;
  153.    }
  154. if ((ZpOpt.fLF_CRLF!= 0) && (ZpOpt.fLF_CRLF!= 1))
  155.    {
  156.    ZpOpt.fLF_CRLF= 0;
  157.    flag = TRUE;
  158.    }
  159. if ((ZpOpt.fJunkDir!= 0) && (ZpOpt.fJunkDir!= 1))
  160.    {
  161.    ZpOpt.fJunkDir= 0;
  162.    flag = TRUE;
  163.    }
  164. if ((ZpOpt.fRecurse!= 0) && (ZpOpt.fRecurse!= 1))
  165.    {
  166.    ZpOpt.fRecurse= 0;
  167.    flag = TRUE;
  168.    }
  169. if ((ZpOpt.fGrow!= 0) && (ZpOpt.fGrow!= 1))
  170.    {
  171.    ZpOpt.fGrow= 0;
  172.    flag = TRUE;
  173.    }
  174. if ((ZpOpt.fForce!= 0) && (ZpOpt.fForce!= 1))
  175.    {
  176.    ZpOpt.fForce= 0;
  177.    flag = TRUE;
  178.    }
  179. if ((ZpOpt.fMove!= 0) && (ZpOpt.fMove!= 1))
  180.    {
  181.    ZpOpt.fMove= 0;
  182.    flag = TRUE;
  183.    }
  184. if ((ZpOpt.fUpdate!= 0) && (ZpOpt.fUpdate!= 1))
  185.    {
  186.    ZpOpt.fUpdate= 0;
  187.    flag = TRUE;
  188.    }
  189. if ((ZpOpt.fFreshen!= 0) && (ZpOpt.fFreshen!= 1))
  190.    {
  191.    ZpOpt.fFreshen= 0;
  192.    flag = TRUE;
  193.    }
  194. ZpOpt.fJunkSFX = 0;
  195. if ((ZpOpt.fLatestTime != 0) && (ZpOpt.fLatestTime != 1))
  196.    {
  197.    ZpOpt.fLatestTime = 0;
  198.    flag = TRUE;
  199.    }
  200. if ((ZpOpt.fComment != 0) && (ZpOpt.fComment != 1))
  201.    {
  202.    ZpOpt.fComment = 0;
  203.    flag = TRUE;
  204.    }
  205. if ((fSaveZipToDir != 0) && (fSaveZipToDir != 1))
  206.    {
  207.    fSaveZipToDir = 0;
  208.    flag = TRUE;
  209.    }
  210. if ((lpDCL->noflag != 0) && (lpDCL->noflag != 1))
  211.    {
  212.    lpDCL->noflag = 0;
  213.    flag = TRUE;
  214.    }
  215. if ((lpDCL->PromptToOverwrite != 0) && (lpDCL->PromptToOverwrite != 1))
  216.    {
  217.    lpDCL->PromptToOverwrite = 0;
  218.    flag = TRUE;
  219.    }
  220. if ((lpDCL->ExtractOnlyNewer != 0) && (lpDCL->ExtractOnlyNewer != 1))
  221.    {
  222.    lpDCL->ExtractOnlyNewer = 0;
  223.    flag = TRUE;
  224.    }
  225. if ((lpDCL->SpaceToUnderscore != 0) && (lpDCL->SpaceToUnderscore != 1))
  226.    {
  227.    lpDCL->SpaceToUnderscore = 0;
  228.    flag = TRUE;
  229.    }
  230. if ((uf.fSaveUnZipToDir != 0) && (uf.fSaveUnZipToDir != 1))
  231.    {
  232.    uf.fSaveUnZipToDir = 0;
  233.    flag = TRUE;
  234.    }
  235. if ((uf.fSaveUnZipFromDir != 0) && (uf.fSaveUnZipFromDir != 1))
  236.    {
  237.    uf.fSaveUnZipFromDir = 0;
  238.    flag = TRUE;
  239.    }
  240. if ((uf.fTranslate != 0) && (uf.fTranslate != 1))
  241.    {
  242.    uf.fTranslate = 0;
  243.    flag = TRUE;
  244.    }
  245. if ((uf.fRecreateDirs != 0) && (uf.fRecreateDirs != 1))
  246.    {
  247.    uf.fRecreateDirs = 0;
  248.    flag = TRUE;
  249.    }
  250. if ((uf.fFormatLong != 0) && (uf.fFormatLong != 1))
  251.    {
  252.    uf.fFormatLong = 0;
  253.    flag = TRUE;
  254.    }
  255. if ((uf.fShowBubbleHelp != 0) && (uf.fShowBubbleHelp != 1))
  256.    {
  257.    uf.fShowBubbleHelp = 0;
  258.    flag = TRUE;
  259.    }
  260. if ((uf.fUnzipToZipDir != 0) && (uf.fUnzipToZipDir != 1))
  261.    {
  262.    uf.fUnzipToZipDir = 0;
  263.    flag = TRUE;
  264.    }
  265. if ((fMakeSFX != 0) && (fMakeSFX != 1))
  266.    {
  267.    fMakeSFX = 0;
  268.    flag = TRUE;
  269.    }
  270. /* If 16 bit version, then this will always be true */
  271. #ifdef WIN32
  272. if ((fMakeDosSFX != 0) && (fMakeDosSFX != 1))
  273.    {
  274.    fMakeDosSFX = 1;
  275.    flag = TRUE;
  276.    }
  277. #endif
  278. if ((fLB_Selection < 0) || (fLB_Selection > 2))
  279.    {
  280.    fLB_Selection = 1;
  281.    wLBSelection = IDM_LB_DISPLAY; /* default listbox selection action */
  282.    flag = TRUE;
  283.    }
  284. else
  285.    {
  286.    switch (fLB_Selection)
  287.       {
  288.       case 0:
  289.               wLBSelection = IDM_LB_EXTRACT;
  290.               break;
  291.       case 1:
  292.               wLBSelection = IDM_LB_DISPLAY;
  293.               break;
  294.       case 2:
  295.               wLBSelection = IDM_LB_TEST;
  296.               break;
  297.       }
  298.    }
  299.    /* We never want these options to be saved, or restored */
  300. ZpOpt.fExcludeDate = FALSE;     /* Date option */
  301. ZpOpt.fIncludeDate = FALSE;
  302. ZpOpt.fOffsets = FALSE; /* Adjust offsets option */
  303. ZpOpt.fRepair = FALSE;  /* Fix archive options */
  304. /* Under WIN32 only long format is supported */
  305. #ifdef WIN32
  306. uf.fFormatLong = TRUE;
  307. #endif
  308. /* All entries have now been validated. */
  309. CheckMenuItem(hMenu, IDM_SHOW_BUBBLE_HELP, MF_BYCOMMAND|
  310.    (WORD)(uf.fShowBubbleHelp ? MF_CHECKED : MF_UNCHECKED));
  311. CheckMenuItem(hMenu, IDM_SHORT, MF_BYCOMMAND|
  312.    (WORD)(uf.fFormatLong ? MF_UNCHECKED : MF_CHECKED));
  313. CheckMenuItem(hMenu, IDM_LONG, MF_BYCOMMAND|
  314.    (WORD)(uf.fFormatLong ? MF_CHECKED : MF_UNCHECKED));
  315. CheckMenuItem(hMenu, IDM_RECR_DIR_STRUCT, MF_BYCOMMAND |
  316.              (uf.fRecreateDirs ? MF_CHECKED : MF_UNCHECKED));
  317. CheckMenuItem(hMenu, IDM_SAVE_UNZIP_TO_DIR, MF_BYCOMMAND |
  318.              (uf.fSaveUnZipToDir ? MF_CHECKED : MF_UNCHECKED));
  319. CheckMenuItem(hMenu, IDM_SAVE_UNZIP_FROM_DIR, MF_BYCOMMAND |
  320.              (uf.fSaveUnZipFromDir ? MF_CHECKED : MF_UNCHECKED));
  321. CheckMenuItem(hMenu, wLBSelection, MF_BYCOMMAND | MF_CHECKED);
  322. CheckMenuItem(hMenu, IDM_UNZIP_TO_ZIP_DIR, MF_BYCOMMAND |
  323.              (uf.fUnzipToZipDir ? MF_CHECKED : MF_UNCHECKED));
  324. EnableMenuItem(hMenu, IDM_CHDIR, MF_BYCOMMAND |
  325.              (uf.fUnzipToZipDir ? MF_GRAYED : MF_ENABLED));
  326. CheckMenuItem(hMenu, IDM_SAVE_ZIP_TO_DIR, MF_BYCOMMAND |
  327.    (fSaveZipToDir ? MF_CHECKED : MF_UNCHECKED));
  328. /* Get default "Zip To" directory */
  329. GetPrivateProfileString(szAppName, szZipToDirKey, "", szTargetZipDir,
  330.    PATH_MAX, szWiZIniFile);
  331. /* Get default "unzip-to" directory */
  332. GetPrivateProfileString(szAppName, szDefaultUnzipToDir, "",
  333.    szUnzipToDirName, PATH_MAX, szWiZIniFile);
  334. /* Get default "unzip-from" directory */
  335. GetPrivateProfileString(szAppName, szDefaultUnzipFromDir, "",
  336.    lpumb->szUnzipFromDirName, PATH_MAX, szWiZIniFile);
  337. /* Set up default values for position and size */
  338. hWndDesktop = GetDesktopWindow();
  339. GetClientRect(hWndDesktop, &rectT);
  340. rectT.top =  2 * dyChar;
  341. /*
  342.  * Adjust for 640 x 480 displays
  343.  */
  344. width = GetSystemMetrics(SM_CXSCREEN);
  345. height = GetSystemMetrics(SM_CYSCREEN);
  346. if ((width == 640) || (height == 480))
  347.    {
  348.    /* If we are on a 640 x 480 display, take up two thirds of the
  349.       real estate top to bottom, and three fourths of the screen
  350.       display left to right.
  351.     */
  352.    rectT.bottom = ((rectT.bottom/3) * 2) +
  353.       (2 * GetSystemMetrics(SM_CYDLGFRAME));
  354.    rectT.right =  ((rectT.right/4) * 3) +
  355.       (4 * GetSystemMetrics(SM_CXFRAME) +
  356.       (2 * GetSystemMetrics(SM_CXVSCROLL)));
  357.    }
  358. else
  359.    {
  360.    /* If we are not on a 640 x 480 display, take up one half of the
  361.       real estate top to bottom, and one half of the screen display
  362.       from left to right.
  363.     */
  364.    rectT.bottom = (rectT.bottom/2) +
  365.       (2 * GetSystemMetrics(SM_CYDLGFRAME));
  366.    rectT.right =  (rectT.right/2) +
  367.       (4 * GetSystemMetrics(SM_CXFRAME) +
  368.       (2 * GetSystemMetrics(SM_CXVSCROLL)));
  369.    }
  370. rectT.left = 0;
  371. MainRc.left =   GetPrivateProfileInt(szAppName, "left",
  372.                                      rectT.left,   szWiZIniFile);
  373. MainRc.right =  GetPrivateProfileInt(szAppName, "right",
  374.                                      rectT.right,  szWiZIniFile);
  375. MainRc.top =    GetPrivateProfileInt(szAppName, "top",
  376.                                      rectT.top,    szWiZIniFile);
  377. MainRc.bottom = GetPrivateProfileInt(szAppName, "bottom",
  378.                                      rectT.bottom, szWiZIniFile);
  379. MoveWindow(hWndMain,
  380.            MainRc.left,
  381.            MainRc.top,
  382.            MainRc.right,
  383.            MainRc.bottom,
  384.            TRUE);
  385. /* Pre-position the status/edit window to the default */
  386. /* Make the Edit/Status Window 1/3 the size of the client area of
  387.  * hWndMain.
  388.  */
  389. GetWindowRect(hWndMain, &rectT);
  390. top = rectT.bottom;
  391. rectT.bottom = (rectT.bottom - rectT.top)/3;
  392. rectT.top = top;
  393. rectT.right = rectT.right - rectT.left;
  394. WinAssert(hWndStatic);
  395. /* Now get the saved values, if any */
  396. re.left =   GetPrivateProfileInt(szAppName, "Edit left",
  397.                                      rectT.left,   szWiZIniFile);
  398. re.right =  GetPrivateProfileInt(szAppName, "Edit right",
  399.                                      rectT.right,  szWiZIniFile);
  400. re.top =    GetPrivateProfileInt(szAppName, "Edit top",
  401.                                      rectT.top,    szWiZIniFile);
  402. re.bottom = GetPrivateProfileInt(szAppName, "Edit bottom",
  403.                                      rectT.bottom, szWiZIniFile);
  404. MoveWindow(hWndStatic,
  405.            re.left,
  406.            re.top,
  407.            re.right,
  408.            re.bottom,
  409.            TRUE);
  410. GetClientRect(hWndStatic, &re);
  411. MoveWindow(hWndEdit,
  412.            re.left, re.top,
  413.            re.right, re.bottom,
  414.            FALSE);
  415. if (flag) /* Something was wrong with the options string, re-write it */
  416.    WriteZipOptionsProfile();
  417. }
  418. /* WriteZipOptionsProfile simply writes the WiZ options out to one string,
  419.    rather than having an entire series of profile strings in the .ini file
  420. */
  421. void WriteZipOptionsProfile()
  422. {
  423. POINT pt;
  424. char szZipOptions[80];
  425. sprintf(szZipOptions,
  426.    "%c%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u",
  427.    ZpOpt.fLevel,
  428.    ZpOpt.fSuffix,
  429.    ZpOpt.fEncrypt,
  430.    ZpOpt.fSystem,
  431.    ZpOpt.fVolume,
  432.    ZpOpt.fExtra,
  433.    ZpOpt.fNoDirEntries,
  434.    ZpOpt.fVerbose,
  435.    ZpOpt.fQuiet,
  436.    ZpOpt.fCRLF_LF,
  437.    ZpOpt.fLF_CRLF,
  438.    ZpOpt.fJunkDir,
  439.    ZpOpt.fRecurse,
  440.    ZpOpt.fGrow,
  441.    ZpOpt.fForce,
  442.    ZpOpt.fMove,
  443.    ZpOpt.fUpdate,
  444.    ZpOpt.fFreshen,
  445.    ZpOpt.fLatestTime,
  446.    ZpOpt.fComment,
  447.    fSaveZipToDir,
  448.    lpDCL->noflag,
  449.    lpDCL->PromptToOverwrite,
  450.    lpDCL->ExtractOnlyNewer,
  451.    lpDCL->SpaceToUnderscore,
  452.    uf.fSaveUnZipToDir,
  453.    uf.fSaveUnZipFromDir,
  454.    uf.fTranslate,
  455.    uf.fRecreateDirs,
  456.    uf.fFormatLong,
  457.    uf.fShowBubbleHelp,
  458.    uf.fUnzipToZipDir,
  459.    fMakeSFX,
  460.    fLB_Selection,
  461.    lpDCL->fPrivilege,
  462.    ZpOpt.fPrivilege,
  463.    fMakeDosSFX);
  464. WritePrivateProfileString(szAppName, szZipOptionKey,
  465.    szZipOptions, szWiZIniFile);
  466. if (fSaveZipToDir)
  467.    WritePrivateProfileString(szAppName, szZipToDirKey, szTargetZipDir,
  468.       szWiZIniFile);
  469. else
  470.    WritePrivateProfileString(szAppName, szZipToDirKey, "",
  471.       szWiZIniFile);
  472. GetWindowRect(hWndMain, &MainRc);
  473. pt.x = MainRc.left;
  474. pt.y = MainRc.top;
  475. ScreenToClient(GetDesktopWindow(), &pt);
  476. MainRc.left = pt.x;
  477. MainRc.top = pt.y;
  478. pt.x = MainRc.right;
  479. pt.y = MainRc.bottom;
  480. ScreenToClient(GetDesktopWindow(), &pt);
  481. MainRc.right = pt.x - MainRc.left;
  482. MainRc.bottom = pt.y - MainRc.top;
  483. /* Save off the current window position/size */
  484. WritePrivateProfileString(szAppName, "left",
  485.    itoa(MainRc.left,   szZipOptions, 10),
  486.    szWiZIniFile);
  487. WritePrivateProfileString(szAppName, "right",
  488.    itoa(MainRc.right,  szZipOptions, 10),
  489.    szWiZIniFile);
  490. WritePrivateProfileString(szAppName, "top",
  491.    itoa(MainRc.top,    szZipOptions, 10),
  492.    szWiZIniFile);
  493. WritePrivateProfileString(szAppName, "bottom",
  494.    itoa(MainRc.bottom, szZipOptions, 10),
  495.    szWiZIniFile);
  496. /* Now let's save off the edit window position */
  497. GetWindowRect(hWndStatic, &MainRc);
  498. pt.x = MainRc.left;
  499. pt.y = MainRc.top;
  500. ScreenToClient(GetDesktopWindow(), &pt);
  501. MainRc.left = pt.x;
  502. MainRc.top = pt.y;
  503. pt.x = MainRc.right;
  504. pt.y = MainRc.bottom;
  505. ScreenToClient(GetDesktopWindow(), &pt);
  506. MainRc.right = pt.x - MainRc.left;
  507. MainRc.bottom = pt.y - MainRc.top;
  508. /* Save off the current window position/size */
  509. WritePrivateProfileString(szAppName, "Edit left",
  510.    itoa(MainRc.left,   szZipOptions, 10),
  511.    szWiZIniFile);
  512. WritePrivateProfileString(szAppName, "Edit right",
  513.    itoa(MainRc.right,  szZipOptions, 10),
  514.    szWiZIniFile);
  515. WritePrivateProfileString(szAppName, "Edit top",
  516.    itoa(MainRc.top,    szZipOptions, 10),
  517.    szWiZIniFile);
  518. WritePrivateProfileString(szAppName, "Edit bottom",
  519.    itoa(MainRc.bottom, szZipOptions, 10),
  520.    szWiZIniFile);
  521. }
  522. #ifdef __BORLANDC__
  523. #pragma warn -par
  524. #endif
  525. void ZipWndProc(HWND hWnd, WORD wMessage, WPARAM wParam, LPARAM lParam)
  526. {
  527. RECT  rClient;
  528. #ifndef WIN32
  529. FARPROC lpfnPrefs;
  530. #endif
  531. switch (LOWORD(wParam))
  532.    {
  533.    case IDM_ZIP_TARGET:
  534.          ZipRetCode = FALSE;
  535.          MakeArchive(hWnd);
  536.          lstrcpy(lpumb->szZipFileName, ZpZCL.lpszZipFN);
  537.          if (ZipRetCode == ZE_OK)
  538.             {
  539.             lstrcpy(lpumb->szFileName, lpumb->szZipFileName);
  540.             UpdateListBox();
  541.             WinAssert(hWndList);
  542.             GetClientRect( hWndList, &rClient );
  543.             OffsetRect( &rClient, 0, dyChar );
  544.             rClient.top = rClient.bottom;
  545.             rClient.bottom = rClient.top + (6*dyChar);
  546. #ifndef WIN32
  547.             SendMessage(hWndList, LB_SETSEL, 1, 0L);
  548. #else
  549.             ListViewSetSel(0, TRUE);
  550. #endif
  551.             UpdateButtons(); /* update state of buttons */
  552.             SetCaption(hWnd);
  553.             InvalidateRect( hWnd, &rClient, TRUE);
  554.             }
  555.          break;
  556.    case IDM_ZIP_PREFERENCES:
  557.          {
  558. #ifndef WIN32
  559.          lpfnPrefs = MakeProcInstance((FARPROC)ZipPreferencesProc, hInst);
  560.          DialogBox(hInst, "ZIP_PREFS", hWnd, lpfnPrefs);
  561.          FreeProcInstance(lpfnPrefs);
  562. #else
  563.          DialogBox(hInst, "ZIP_PREFS", hWnd, (DLGPROC)ZipPreferencesProc);
  564. #endif
  565.          }
  566.          break;
  567.    case IDM_UNZIP_PREFERENCES:
  568.          {
  569. #ifndef WIN32
  570.          lpfnPrefs = MakeProcInstance((FARPROC)UnZipPreferencesProc, hInst);
  571.          DialogBox(hInst, "UNZIP_PREFS", hWnd, lpfnPrefs);
  572.          FreeProcInstance(lpfnPrefs);
  573. #else
  574.          DialogBox(hInst, "UNZIP_PREFS", hWnd, (DLGPROC)UnZipPreferencesProc);
  575. #endif
  576.          }
  577.          break;
  578.    }
  579. return;
  580. }
  581. #ifdef __BORLANDC__
  582. #pragma warn .par
  583. #endif