2020-09-30 17:12:29 +02:00

685 lines
23 KiB
C

#include "windows.h"
#include <port1632.h>
#include "global.h"
#include "dumpdlg.h"
#include "parse.h"
#include "msg.h"
#include "error.h"
#include <stdio.h> /* for remove() */
extern CHAR ScreenSpec[13];
/*NAMECHANGE*/
CHAR ScreenSpec[13] = "*.SCN";
extern CHAR ScreenPath[128];
CHAR ScreenPath[128];
extern INT iScreenId;
CHAR FAR ErrorMessage[50];
POINT Prev;
BOOL fOptions = FALSE;
BOOL fDumpWhere = DUMP_APPEND;
BOOL fFileLoc = DUMP_FILE;
BOOL fFileFormat = DUMP_SNAPSHOT;
BOOL APIENTRY Dump(hDlg, message, wParam, lParam)
register HWND hDlg;
register UINT message;
WPARAM wParam;
LPARAM lParam;
{
static BOOL bCapturing, bBlocking, fView;
static POINT org, len;
static POINT temp1,temp2;
static BOOL bPrevWhereDump,bPrevOptions,bPrevFileFormat,bPrevFileLoc;
static INT iPrevScreen;
HWND hWndNextApp;
INT iGetXY;
CHAR tempStr[96];
BOOL bFlag;
switch (message) {
case WM_INITDIALOG:
Prev.x = 0;
Prev.y = 0;
org.x = 0;
org.y = 0;
len.x = 0;
len.y = 0;
bCapturing = bBlocking = fView = FALSE ;
bPrevWhereDump = fDumpWhere;
bPrevOptions = fOptions;
bPrevFileFormat = fFileFormat;
bPrevFileLoc = fFileLoc;
iPrevScreen = iScreenId;
SetDlgItemInt(hDlg,DUMP_SCRNUM,iScreenId,FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_VIEW),FALSE);
SendDlgItemMessage(hDlg,fDumpWhere,BM_SETCHECK,1,0l);
SendDlgItemMessage(hDlg,fFileFormat,BM_SETCHECK,1,0l);
SendDlgItemMessage(hDlg,fFileLoc,BM_SETCHECK,1,0l);
if (fOptions) {
SetDialogSize(hDlg,TRUE); // Expanded Dialog
} else {
SetDialogSize(hDlg,FALSE); // Contracted Dialog
}
#ifdef WIN32
// Since SetCapture is scrwey in NT, don't do it.
EnableWindow (GetDlgItem (hDlg, DUMP_SELECT), FALSE);
#endif
SendDlgItemMessage(hDlg,
DUMP_SCRNUM,
EM_LIMITTEXT,
LEN_SCRBOX,
MAKELONG(0, 0x7fff));
SendDlgItemMessage(hDlg,
DUMP_FLNAME,
EM_LIMITTEXT,
LEN_EDITBOX,
MAKELONG(0, 0x7fff));
UpdateListBoxes(hDlg,DUMP_FILELB,DUMP_DIRLB,
DUMP_DIRNAME,DUMP_FLNAME,ScreenPath,ScreenSpec);
return (FALSE);
break;
case WM_CLOSE:
case WM_DESTROY:
iScreenId = GetDlgItemInt(hDlg,DUMP_SCRNUM,&bFlag,FALSE);
if (!bFlag) iScreenId = 1;
EndDialog(hDlg, TRUE);
return (TRUE);
case WM_KEYDOWN:
case WM_KEYUP:
case WM_CHAR:
case WM_DEADCHAR:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
case WM_SYSCHAR:
case WM_SYSDEADCHAR:
case WM_LBUTTONDBLCLK:
if (fView) {
ClearBlock(hDlg, temp1, temp2);
ShowWindow(hwnd,SW_SHOW);
ShowWindow(hDlg,SW_SHOW);
ReleaseCapture();
fView = FALSE;
return(TRUE);
}
return(FALSE);
break;
case WM_LBUTTONDOWN:
if (bCapturing) {
SetCursor (LoadCursor (NULL, IDC_CROSS)) ;
bBlocking = TRUE;
// erase previous rectangle
// ClearBlock (hDlg, org, len) ;
LONG2POINT(lParam, org);
ClientToScreen (hDlg, &org) ;
Prev.x = org.x;
Prev.y = org.y;
len.x = org.x;
len.y = org.y;
SetDlgItemInt(hDlg,DUMP_X1,org.x,FALSE);
SetDlgItemInt(hDlg,DUMP_Y1,org.y,FALSE);
return(TRUE);
}
return(FALSE);
break ;
case WM_MOUSEMOVE:
if (bBlocking) {
SetCursor (LoadCursor (NULL, IDC_CROSS)) ;
LONG2POINT(lParam, len);
ClientToScreen (hDlg, &len) ;
SetDlgItemInt(hDlg,DUMP_X2,len.x,FALSE);
SetDlgItemInt(hDlg,DUMP_Y2,len.y,FALSE);
InvertBlock (hDlg, org, len) ;
return(TRUE);
}
return(FALSE);
break ;
case WM_LBUTTONUP:
if (bBlocking) {
bCapturing = bBlocking = FALSE ;
ReleaseCapture();
ClearBlock (hDlg, org, len) ;
SetCursor (LoadCursor (NULL, IDC_ARROW)) ;
ShowWindow(hwnd,SW_SHOW);
ShowWindow(hDlg,SW_SHOW);
return(TRUE);
}
return(FALSE);
break;
case WM_VSCROLL:
AdjustScreenNumber (hDlg,DUMP_SCRNUM,
GET_WM_VSCROLL_CODE (wParam, lParam),
&iScreenId);
return(TRUE);
break;
case WM_COMMAND:
#ifndef WIN32
if (!(GetXY(hDlg,&temp1,&temp2))) {
EnableWindow(GetDlgItem(hDlg,DUMP_VIEW),TRUE);
} else {
EnableWindow(GetDlgItem(hDlg,DUMP_VIEW),FALSE);
}
#endif
// [ptr65] added or case on the following if to handle the fact
// that the capture button should be enabled if the clipboard
// is selected. - nancyba 5/10/90
if ((GetDlgItemText(hDlg,DUMP_FLNAME,tempStr,4)) || (SendDlgItemMessage(hDlg,DUMP_CLIP,BM_GETCHECK,0,0L))) {
EnableWindow(GetDlgItem(hDlg,DUMP_DUMP),TRUE);
} else {
EnableWindow(GetDlgItem(hDlg,DUMP_DUMP),FALSE);
}
switch (GET_WM_COMMAND_ID (wParam, lParam)) {
case DUMP_SELECT:
SetCursor (LoadCursor (NULL, IDC_CROSS)) ;
SetCapture (hDlg) ;
bCapturing=TRUE;
ShowWindow(hDlg,SW_HIDE);
ShowWindow(hwnd,SW_HIDE);
return(TRUE);
break;
case DUMP_FILE:
if (GET_WM_COMMAND_CMD (wParam, lParam) == BN_CLICKED) {
fFileLoc = DUMP_FILE;
SetDumpFileOptions(hDlg);
}
return(TRUE);
break;
case DUMP_CLIP:
if (GET_WM_COMMAND_CMD (wParam, lParam) == BN_CLICKED) {
fFileLoc = DUMP_CLIP;
fFileFormat = DUMP_BITMAP;
SetDumpFileOptions(hDlg);
}
return(TRUE);
break;
case DUMP_SNAPSHOT:
if (GET_WM_COMMAND_CMD (wParam, lParam) == BN_CLICKED) {
fFileFormat = DUMP_SNAPSHOT;
SetDumpFileOptions(hDlg);
}
return(TRUE);
break;
case DUMP_BITMAP:
if (GET_WM_COMMAND_CMD (wParam, lParam) == BN_CLICKED) {
fFileFormat = DUMP_BITMAP;
SetDumpFileOptions(hDlg);
}
return(TRUE);
break;
case DUMP_APPEND:
if (GET_WM_COMMAND_CMD (wParam, lParam) == BN_CLICKED) {
fDumpWhere = DUMP_APPEND;
EnableWindow(GetDlgItem(hDlg,DUMP_SCRSNM),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_SCRNUM),FALSE);
EnableWindow(GetDlgItem(hDlg,ALL_SCROLLBAR),FALSE);
}
return(TRUE);
break;
case DUMP_REPLACE:
if (GET_WM_COMMAND_CMD (wParam, lParam) == BN_CLICKED) {
fDumpWhere = DUMP_REPLACE;
EnableWindow(GetDlgItem(hDlg,DUMP_SCRSNM),TRUE);
EnableWindow(GetDlgItem(hDlg,DUMP_SCRNUM),TRUE);
EnableWindow(GetDlgItem(hDlg,ALL_SCROLLBAR),TRUE);
}
return(TRUE);
break;
case DUMP_INSERT:
if (GET_WM_COMMAND_CMD (wParam, lParam) == BN_CLICKED) {
fDumpWhere = DUMP_INSERT;
EnableWindow(GetDlgItem(hDlg,DUMP_SCRSNM),TRUE);
EnableWindow(GetDlgItem(hDlg,DUMP_SCRNUM),TRUE);
EnableWindow(GetDlgItem(hDlg,ALL_SCROLLBAR),TRUE);
}
return(TRUE);
break;
case DUMP_OPTIONS:
if (!fOptions) {
fOptions = TRUE;
SetDialogSize(hDlg,TRUE); // Big
} else {
fOptions = FALSE;
SetDialogSize(hDlg,FALSE); // Little
}
SetFocus(GetDlgItem(hDlg,DUMP_OPTIONS));
return(TRUE);
break;
case DUMP_VIEW:
if (!(iGetXY=GetXY(hDlg,&temp1,&temp2))) {
SetCapture (hDlg) ;
ShowWindow(hDlg,SW_HIDE);
ShowWindow(hwnd,SW_HIDE);
hWndNextApp = GetWindow(GetDesktopWindow(),GW_CHILD);
do {
InvalidateRect(hWndNextApp,NULL,TRUE);
UpdateWindow(hWndNextApp);
} while (hWndNextApp = GetWindow(hWndNextApp,GW_HWNDNEXT));
ClearBlock(hDlg, temp1, temp2);
fView = TRUE;
} else {
SendDlgItemMessage(hDlg,
iGetXY,
EM_SETSEL,
GET_EM_SETSEL_MPS (0, 0x7fff));
SetFocus(GetDlgItem(hDlg,iGetXY));
}
return(TRUE);
break;
case DUMP_DIRLB:
switch (GET_WM_COMMAND_CMD (wParam, lParam)) {
case LBN_DBLCLK:
if (MDlgDirSelect(hDlg, ScreenPath, 128, DUMP_DIRLB))
UpdateListBoxes(hDlg,DUMP_FILELB,DUMP_DIRLB,
DUMP_DIRNAME,DUMP_FLNAME,ScreenPath,ScreenSpec);
case LBN_SELCHANGE:
if (MDlgDirSelect(hDlg, tempStr, 96, DUMP_DIRLB)) {
lstrcat(tempStr,ScreenSpec);
SetDlgItemText(hDlg,DUMP_FLNAME,tempStr);
}
}
return (TRUE);
break;
case DUMP_FILELB:
switch (GET_WM_COMMAND_CMD (wParam, lParam)) {
case LBN_DBLCLK:
return(Dump_Button(hDlg,fDumpWhere,&temp1,&temp2));
break;
case LBN_SELCHANGE:
if (!MDlgDirSelect(hDlg, tempStr, 96, DUMP_FILELB)) {
SetDlgItemText(hDlg,DUMP_FLNAME,tempStr);
}
}
return (TRUE);
break;
case DUMP_CANCEL:
case IDCANCEL:
fDumpWhere = bPrevWhereDump;
fOptions = bPrevOptions;
iScreenId = iPrevScreen;
fFileFormat = bPrevFileFormat;
fFileLoc = bPrevFileLoc;
EndDialog(hDlg, TRUE);
return (TRUE);
break;
case DUMP_DUMP:
return(Dump_Button(hDlg,fDumpWhere,&temp1,&temp2));
break;
}
return (TRUE);
break;
}
return (FALSE);
}
VOID APIENTRY InvertBlock (hWnd, org, len)
HWND hWnd ;
POINT org, len ;
{
HDC hDC ;
if ((len.x != Prev.x) || (len.y != Prev.y)) {
hDC = GetDC(NULL);
SetROP2(hDC, R2_NOT); /* Erases the previous box */
MMoveTo(hDC, org.x, org.y);
LineTo(hDC, org.x, Prev.y);
LineTo(hDC, Prev.x, Prev.y);
LineTo(hDC, Prev.x, org.y);
LineTo(hDC, org.x, org.y);
/* Get the current mouse position */
Prev.x = len.x;
Prev.y = len.y;
MMoveTo(hDC, org.x, org.y); /* Draws the new box */
LineTo(hDC, org.x, Prev.y);
LineTo(hDC, Prev.x, Prev.y);
LineTo(hDC, Prev.x, org.y);
LineTo(hDC, org.x, org.y);
ReleaseDC (NULL,hDC) ;
}
}
VOID APIENTRY ClearBlock (hWnd, org, len)
HWND hWnd ;
POINT org, len ;
{
HDC hDC ;
hDC = GetDC(NULL);
SetROP2(hDC, R2_NOT); /* Erases the previous box */
MMoveTo(hDC, org.x, org.y);
LineTo(hDC, org.x, len.y);
LineTo(hDC, len.x, len.y);
LineTo(hDC, len.x, org.y);
LineTo(hDC, org.x, org.y);
ReleaseDC (NULL,hDC) ;
}
INT APIENTRY GetXY (hDlg,xy1,xy2)
HWND hDlg;
POINT * xy1;
POINT * xy2;
{
BOOL bFlag;
INT iErrorFlag=FALSE;
xy1->x = (INT) GetDlgItemInt(hDlg,DUMP_X1,&bFlag,FALSE);
if (!bFlag) {
lstrcpy(ErrorMessage,"Error in X1");
iErrorFlag = DUMP_X1;
}
xy1->y = (INT) GetDlgItemInt(hDlg,DUMP_Y1,&bFlag,FALSE);
if (!bFlag) {
if (iErrorFlag) {
lstrcat(ErrorMessage,", Y1 ");
} else {
lstrcpy(ErrorMessage,"Error in Y1");
iErrorFlag = DUMP_Y1;
}
}
xy2->x = (INT) GetDlgItemInt(hDlg,DUMP_X2,&bFlag,FALSE);
if (!bFlag) {
if (iErrorFlag) {
lstrcat(ErrorMessage,", X2 ");
} else {
lstrcpy(ErrorMessage,"Error in X2");
iErrorFlag = DUMP_X2;
}
}
xy2->y = (INT) GetDlgItemInt(hDlg,DUMP_Y2,&bFlag,FALSE);
if (!bFlag) {
if (iErrorFlag) {
lstrcat(ErrorMessage,", Y2 ");
} else {
lstrcpy(ErrorMessage,"Error in Y2");
iErrorFlag = DUMP_Y2;
}
}
return(iErrorFlag);
}
VOID SetDialogSize(hDlg,fBigSize)
HWND hDlg;
BOOL fBigSize; // TRUE == BIG, FALSE = SMALL
{
LONG lDlgBaseUnits;
INT newx,newy;
lDlgBaseUnits = GetDialogBaseUnits();
if (fBigSize) {
newx = (225 * LOWORD(lDlgBaseUnits)) / 4;
newy = (186 * HIWORD(lDlgBaseUnits)) / 8;
SetDumpFileOptions(hDlg);
SetWindowPos(hDlg,NULL,0,0,newx,newy,SWP_NOZORDER | SWP_NOMOVE) ;
} else {
newx = (225 * LOWORD(lDlgBaseUnits)) / 4;
newy = (118 * HIWORD(lDlgBaseUnits)) / 8;
SetWindowPos(hDlg,NULL,0,0,newx,newy,SWP_NOZORDER | SWP_NOMOVE) ;
EnableWindow(GetDlgItem(hDlg,DUMP_APPEND),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_INSERT),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_REPLACE),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_SCRSNM),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_SCRNUM),FALSE);
EnableWindow(GetDlgItem(hDlg,ALL_SCROLLBAR),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_FILE),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_CLIP),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_BITMAP),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_SNAPSHOT),FALSE);
}
}
BOOL APIENTRY Dump_Button(hDlg,fDumpWhere,temp1,temp2)
HWND hDlg;
BOOL fDumpWhere;
POINT * temp1;
POINT * temp2;
{
INT iGetXY;
INT retCode;
INT errCode;
BOOL bFlag;
HWND hWndNextApp;
RECT Point2;
CHAR pszCapBuff[cbMsgBuff+1];
INT FocusControl;
// If we don't have the clipboard selected, Parse the filename
if (fFileLoc != DUMP_CLIP) {
retCode = ParseFileName(hDlg,DUMP_FLNAME,ScreenPath,ScreenSpec);
} else {
retCode = EXIST_FILESPEC; //This value is set so we can switch
}
switch (retCode) {
case VALID_FILENAME:
case EXIST_FILESPEC:
UpdateListBoxes(hDlg,DUMP_FILELB,DUMP_DIRLB,
DUMP_DIRNAME,DUMP_FLNAME,ScreenPath,ScreenSpec);
if ((retCode == EXIST_FILESPEC) && (fFileFormat == DUMP_BITMAP) && (fFileLoc == DUMP_FILE)) {
if (DisplayMessageRet(hDlg,retCode,MSG_ERRORCAPTION) == IDCANCEL) {
SendDlgItemMessage(hDlg,
DUMP_FLNAME,
EM_SETSEL,
GET_EM_SETSEL_MPS (0, 0x7fff));
SetFocus(GetDlgItem(hDlg, DUMP_FLNAME));
return(FALSE);
}
/* was asked overwrite, didn't answer cancel */
/* get rid of the file */
MDeleteFile(ScreenSpec);
}
if (!(iGetXY=GetXY(hDlg,temp1,temp2))) {
Point2.left = temp1->x;
Point2.top = temp1->y;
Point2.right = temp2->x;
Point2.bottom = temp2->y;
if (fDumpWhere != DUMP_APPEND) {
iScreenId = GetDlgItemInt(hDlg,DUMP_SCRNUM,&bFlag,FALSE);
if (!bFlag) {
return(DisplayErrSetFocus(hDlg,ERR_BADSCREENNUMBER,DUMP_SCRNUM));
}
} else {
iScreenId = 0;
}
ShowWindow(hDlg,SW_HIDE);
ShowWindow(hwnd,SW_HIDE);
hWndNextApp = GetWindow(GetDesktopWindow(),GW_CHILD);
do {
InvalidateRect(hWndNextApp,NULL,TRUE);
UpdateWindow(hWndNextApp);
} while (hWndNextApp = GetWindow(hWndNextApp,GW_HWNDNEXT));
SetCursor(LoadCursor(NULL, IDC_WAIT));
if (fFileLoc == DUMP_FILE) {
if (fFileFormat == DUMP_SNAPSHOT) {
errCode = fDumpScreen(ScreenSpec,&Point2,(fDumpWhere - DUMP_APPEND),iScreenId,FALSE);
} else {
errCode = fSaveSrnToDIB(ScreenSpec,&Point2,FALSE);
}
} else {
errCode = fDumpSrnToClip(&Point2,FALSE);
}
SetCursor(LoadCursor(NULL, IDC_ARROW));
ShowWindow(hwnd,SW_SHOW);
if (errCode) {
ShowWindow(hDlg, TRUE);
switch (errCode) {
case ERR_SCREENID:
FocusControl = DUMP_SCRNUM;
break;
default:
FocusControl = DUMP_FLNAME;
break;
}
return(DisplayErrSetFocus(hDlg,errCode,FocusControl));
} else {
EndDialog(hDlg, TRUE);
}
return (TRUE);
} else {
LoadString(hInst,MSG_ERRORCAPTION,pszCapBuff,cbMsgBuff);
MessageBox(hDlg,ErrorMessage,pszCapBuff,MB_ICONSTOP);
ErrorMessage[0]=0;
SendDlgItemMessage(hDlg,
iGetXY,
EM_SETSEL,
GET_EM_SETSEL_MPS (0, 0x7fff));
SetFocus(GetDlgItem(hDlg,iGetXY));
return(TRUE);
}
break;
case VALID_FILESPEC:
UpdateListBoxes(hDlg,DUMP_FILELB,DUMP_DIRLB,
DUMP_DIRNAME,DUMP_FLNAME,ScreenPath,ScreenSpec);
return (FALSE);
break;
case INVALID_FILESPEC:
return(DisplayErrSetFocus(hDlg,ERR_BADPATH,DUMP_FLNAME));
break;
};
};
BOOL SetDumpFileOptions(hDlg)
HWND hDlg;
{
EnableWindow(GetDlgItem(hDlg,DUMP_FILE),TRUE);
EnableWindow(GetDlgItem(hDlg,DUMP_CLIP),TRUE);
if (fFileLoc == DUMP_CLIP) {
EnableWindow(GetDlgItem(hDlg,DUMP_BITMAP),TRUE);
SendDlgItemMessage(hDlg,DUMP_SNAPSHOT,BM_SETCHECK,0,0l);
SendDlgItemMessage(hDlg,DUMP_BITMAP,BM_SETCHECK,1,0l);
EnableWindow(GetDlgItem(hDlg,DUMP_SNAPSHOT),FALSE);
// Disable Other File Options.
EnableWindow(GetDlgItem(hDlg,DUMP_APPEND),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_INSERT),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_REPLACE),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_SCRSNM),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_SCRNUM),FALSE);
EnableWindow(GetDlgItem(hDlg,ALL_SCROLLBAR),FALSE);
return(TRUE);
}
if (fFileLoc == DUMP_FILE) {
EnableWindow(GetDlgItem(hDlg,DUMP_BITMAP),TRUE);
EnableWindow(GetDlgItem(hDlg,DUMP_SNAPSHOT),TRUE);
// Enable File Options.
if (fFileFormat == DUMP_SNAPSHOT) {
// Enable the file options if snapshot format
EnableWindow(GetDlgItem(hDlg,DUMP_APPEND),TRUE);
EnableWindow(GetDlgItem(hDlg,DUMP_INSERT),TRUE);
EnableWindow(GetDlgItem(hDlg,DUMP_REPLACE),TRUE);
if (fDumpWhere != DUMP_APPEND) {
EnableWindow(GetDlgItem(hDlg,DUMP_SCRSNM),TRUE);
EnableWindow(GetDlgItem(hDlg,DUMP_SCRNUM),TRUE);
EnableWindow(GetDlgItem(hDlg,ALL_SCROLLBAR),TRUE);
} else {
EnableWindow(GetDlgItem(hDlg,DUMP_SCRSNM),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_SCRNUM),FALSE);
EnableWindow(GetDlgItem(hDlg,ALL_SCROLLBAR),FALSE);
}
} else {
// Disable other file options if bitmap format
EnableWindow(GetDlgItem(hDlg,DUMP_APPEND),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_INSERT),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_REPLACE),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_SCRSNM),FALSE);
EnableWindow(GetDlgItem(hDlg,DUMP_SCRNUM),FALSE);
EnableWindow(GetDlgItem(hDlg,ALL_SCROLLBAR),FALSE);
}
}
}