home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dr. CD ROM (Annual Premium Edition)
/
premium.zip
/
premium
/
WINUTIL2
/
WZUN11SR.ZIP
/
ACTION.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-01-23
|
6KB
|
182 lines
#include <windows.h> /* required for all Windows applications */
#include <assert.h> /* required for all Windows applications */
#include "wizunzip.h" /* specific to this program */
#include "unzip.h"
/* Action.c module of WizUnzip.
* Author: Robert A. Heath, 1992
* I, Robert Heath, place this source code module in the public domain.
*/
char NoMemoryMsg[] =
"Insufficient memory for this operation!";
int MsWinDoAll;
BOOL bIconSwitched = FALSE; /* set true after 1st valid action */
/* Get Selection Count returns a count of the selected
* list box items. If the count is greater than zero, it also returns
* a pointer to a locked list in local memory of the item nos.
* and their local memory handle.
* A value of -1 indicates an error.
*/
int GetLBSelCount(HWND hListBox, int **ppnSelItems)
{
int nSelCount = (int)SendMessage(hListBox, LB_GETSELCOUNT, 0, 0L);
int nRetrieved;
if (nSelCount)
{
*ppnSelItems = (int *)LocalAlloc(LMEM_FIXED, nSelCount * sizeof(int));
assert(*ppnSelItems); /* DEBUG */
if (!*ppnSelItems)
{
return(-1);
}
nRetrieved = (int)SendMessage(hWndList, LB_GETSELITEMS, nSelCount, (LONG)(LPSTR)*ppnSelItems);
assert(nRetrieved == nSelCount);
if (nRetrieved != nSelCount)
{
LocalFree((HANDLE)*ppnSelItems);
return(-1);
}
}
return(nSelCount);
}
/* Re-select listbox contents from given list. The pnSelItems is a
* list containing the indices of those items selected in the listbox.
* This list was probably created by GetLBSelCount() above.
*/
void ReselectLB(HWND hListBox, int nSelCount, int *pnSelItems)
{
int i;
for (i = 0; i < nSelCount; i++)
{
SendMessage(hListBox, LB_SETSEL, TRUE, MAKELONG(pnSelItems[i],0));
}
}
/* Action is called on double-clicking, or selecting one of the 3
* main action buttons. The action code is the action
* relative to the listbox or the button ID.
*/
void Action(WORD wActionCode)
{
int i;
int nLength;
int *pnSelItems; /* pointer to list of selected items */
int nSelCount = GetLBSelCount(hWndList, &pnSelItems);
char szBuffer[100]; /* scratch buffer */
if (nSelCount < 1) /* if no items were selected */
return;
/* Note: this global value can be overriden in replace.c
*/
MsWinDoAll = (bOverwrite) ? 1 : 0;
hSaveCursor = SetCursor(hHourGlass);
ShowCursor(TRUE); /* show it */
/* march through list box checking what's selected
* and what is not.
*/
for (i = 0; i < nSelCount ; i++)
{
/* extract item from list box... */
if ((nLength = (int)SendMessage(hWndList, LB_GETTEXT,
pnSelItems[i], (LONG)(LPSTR)szBuffer)) > 0)
{
WORD wIndex = !wFormat ? /* index of filename in buffer */
SHORT_FORM_FNAME_INX:LONG_FORM_FNAME_INX;
PSTR pfn = &szBuffer[wIndex]; /* points to filename */
/* fake arg list for process_zipfile() */
static char *FileNameVector[] = { "", "" };
WinAssert(nLength < (sizeof(szBuffer)-1)); /* DEBUG */
FileNameVector[0] = pfn; /* pass desired filename */
switch (wActionCode) {
case 0: /* extract */
if (SetUpToProcessZipFile(0, 0, 0, 1, 0,
(int)(bRecreateDirs ? 1 : 0),
MsWinDoAll, (int)(bTranslate ? 1 : 0),
1, szFileName, FileNameVector))
process_zipfile(); /* call into unzip.c */
else
MessageBox(hMainWnd, NoMemoryMsg, NULL,
MB_OK|MB_ICONEXCLAMATION);
TakeDownFromProcessZipFile(); /* clean house */
break;
case 1: /* display to message window */
bRealTimeMsgUpdate = FALSE;
if (SetUpToProcessZipFile(1, 0, 0, 1, 0, 0, 0, 0,
1, szFileName, FileNameVector))
process_zipfile(); /* call into unzip.c */
else
MessageBox(hMainWnd, NoMemoryMsg, NULL,
MB_OK|MB_ICONEXCLAMATION);
TakeDownFromProcessZipFile(); /* clean house */
bRealTimeMsgUpdate = TRUE;
UpdateMsgWndPos(); /* update window now */
break;
case 2: /* test */
if (SetUpToProcessZipFile(0, 1, 0, 1, 0, 0, 0, 0,
1, szFileName, FileNameVector))
process_zipfile(); /* call into unzip.c */
else
MessageBox(hMainWnd, NoMemoryMsg, NULL,
MB_OK|MB_ICONEXCLAMATION);
TakeDownFromProcessZipFile(); /* clean house */
break;
}
}
}
pnSelItems = (int *)LocalFree((HANDLE)pnSelItems); /* Returns it to Windows */
assert(!pnSelItems); /* DEBUG */
ShowCursor(FALSE); /* turn off cursor */
SetCursor(hSaveCursor); /* restore the cursor */
if (!bIconSwitched) /* if haven't already, switch icons */
{
HANDLE hIcon;
hIcon = LoadIcon(hInst,"UNZIPPED"); /* load final icon */
assert(hIcon); /* DEBUG */
SetClassWord(hMainWnd, GCW_HICON, hIcon);
bIconSwitched = TRUE; /* flag that we've switched it */
}
}
/* Display the archive comment using the Info-ZIP engine.
*/
void DisplayComment(void)
{
hSaveCursor = SetCursor(hHourGlass);
ShowCursor(TRUE); /* show it */
bRealTimeMsgUpdate = FALSE;
if (SetUpToProcessZipFile(0, 0, 0, 1, 1, 0, 0, 0,
0, szFileName, NULL))
process_zipfile(); /* call into unzip.c */
else
MessageBox(hMainWnd, NoMemoryMsg, NULL,
MB_OK|MB_ICONEXCLAMATION);
TakeDownFromProcessZipFile(); /* clean house */
ShowCursor(FALSE); /* turn off cursor */
SetCursor(hSaveCursor); /* restore the cursor */
bRealTimeMsgUpdate = TRUE;
UpdateMsgWndPos(); /* update window now */
}