3777 lines
99 KiB
C
3777 lines
99 KiB
C
/* originally named PIF.C in Win3.1 -- changed to make build 32 happy */
|
|
#define NOSOUND
|
|
#define NOCOMM
|
|
#define WIN31
|
|
#include "pifedit.h"
|
|
#include "commdlg.h"
|
|
#include "shellapi.h"
|
|
#include "mods.h"
|
|
|
|
extern BOOL IsLastPifedit(void);
|
|
extern int MemCopy(LPSTR,LPSTR,int);
|
|
extern int MaybeSaveFile(void);
|
|
extern int InitPifStruct(void);
|
|
extern int UpdatePifScreen(void);
|
|
extern int UpdatePifScreenAdv(void);
|
|
extern int UpdatePifScreenNT(void);
|
|
extern BOOL UpdatePifStruct(void);
|
|
extern int LoadPifFile(PSTR);
|
|
extern int SavePifFile(PSTR, int);
|
|
extern BOOL SetInitialMode(void);
|
|
extern int CountLines(LPSTR);
|
|
extern int Warning(int,WORD);
|
|
extern PIF386EXT UNALIGNED *AllocInit386Ext(void);
|
|
extern PIFWNTEXT UNALIGNED *AllocInitNTExt(void);
|
|
extern void SetFileOffsets(unsigned char *,WORD *,WORD *);
|
|
extern void SetNTDlgItem(int);
|
|
/*
|
|
* extern PIF286EXT31 *AllocInit286Ext31(void);
|
|
*/
|
|
extern PIF286EXT30 UNALIGNED *AllocInit286Ext30(void);
|
|
extern BOOL DoFieldsWork(BOOL);
|
|
extern BOOL DoFieldsWorkNT(BOOL);
|
|
extern BOOL DoFieldsWorkAdv(BOOL);
|
|
extern BOOL UpdatePif386Struc(void);
|
|
extern BOOL UpdatePifNTStruc(void);
|
|
|
|
#define SBUMAIN 0 // Scroll Bar update on Main
|
|
#define SBUADV 1 // Scroll Bar update on Advanced
|
|
#define SBUNT 2 // Scroll Bar update on NT
|
|
#define SBUMAINADVNT 3 // Scroll Bar Update on Main, Advanced, and NT
|
|
#define SBUSZMAIN 4 // SIZE and Scroll Bar update on Main
|
|
#define SBUSZADV 5 // SIZE and Scroll Bar update on Advanced
|
|
#define SBUSZNT 6 // SIZE and Scroll Bar update on NT
|
|
#define SBUSZMAINADVNT 7 // SIZE and Scroll Bar update on Main, Advanced, and NT
|
|
|
|
int SwitchAdvance386(HWND);
|
|
int SwitchNT(HWND);
|
|
unsigned char *PutUpDB(int);
|
|
int DoHelp(unsigned int,unsigned int);
|
|
int Disable386Advanced(HWND, HWND);
|
|
int SetMainWndSize(int);
|
|
int MainScroll(HWND, int, int, int, int);
|
|
int ChangeHotKey(void);
|
|
int SetHotKeyLen(void);
|
|
int SetHotKeyState(WPARAM,LONG);
|
|
int SetHotKeyTextFromPIF(void);
|
|
int CmdArgAddCorrectExtension(unsigned char *);
|
|
int SetHotKeyTextFromInMem(void);
|
|
void CpyCmdStr( LPSTR szDst, LPSTR szSrc );
|
|
|
|
|
|
CHAR szOldAutoexec[PIFDEFPATHSIZE*4];
|
|
CHAR szOldConfig[PIFDEFPATHSIZE*4];
|
|
|
|
BOOL CurrMode386; /* true if in Windows 386 mode, False if in Windows 286 mode */
|
|
|
|
BOOL SysMode386; /* true if running Windows 386, False if running Windows 286 */
|
|
|
|
BOOL ModeAdvanced = FALSE; /* true if in advanced PIF mode */
|
|
|
|
BOOL AdvClose = FALSE; /* true if advanced PIF mode and Cancel = Close */
|
|
|
|
BOOL NTClose = FALSE; /* true if NT PIF mode and Cancel = Close */
|
|
|
|
BOOL FileChanged = FALSE;
|
|
|
|
BOOL EditHotKey = FALSE;
|
|
|
|
BOOL NewHotKey = FALSE;
|
|
|
|
BOOL DoingMsg = FALSE;
|
|
|
|
BOOL InitShWind = FALSE; /* true if initial ShowWindow has been done */
|
|
|
|
BOOL CompleteKey = FALSE;
|
|
|
|
BOOL SizingFlag = FALSE; /* Semaphore to prevent re-entrant sizing */
|
|
|
|
/* invalid filename flags for NT autoexec & config files */
|
|
BOOL fNoNTAWarn = FALSE;
|
|
BOOL fNTAWarnne = FALSE;
|
|
BOOL fNoNTCWarn = FALSE;
|
|
BOOL fNTCWarnne = FALSE;
|
|
|
|
HWND hwndPrivControl = (HWND)NULL;
|
|
HWND hwndHelpDlgParent = (HWND)NULL; // This is actually mostly a flag that says
|
|
// we have the help engine up
|
|
|
|
unsigned char MenuMnemonic1;
|
|
unsigned char MenuMnemonic2;
|
|
unsigned char MenuMnemonic3;
|
|
|
|
unsigned char KeySepChr;
|
|
|
|
unsigned char CurrHotKeyTxt[160];
|
|
int CurrHotKeyTxtLen = 0;
|
|
|
|
WORD fileoffset = 0;
|
|
WORD extoffset = 0;
|
|
WORD tmpfileoffset = 0;
|
|
WORD tmpextoffset = 0;
|
|
|
|
typedef VOID (FAR PASCAL *LPFNREGISTERPENAPP)(WORD, BOOL);
|
|
static LPFNREGISTERPENAPP lpfnRegisterPenApp = NULL;
|
|
|
|
#define NUM286ALIASES 8
|
|
|
|
unsigned int Aliases286 [(NUM286ALIASES * 2)] = { IDI_MEMREQ,IDI_MEMREQ_286ALIAS,
|
|
IDI_XMAREQ,IDI_XMAREQ_286ALIAS,
|
|
IDI_XMADES,IDI_XMADES_286ALIAS,
|
|
/*
|
|
* IDI_EMSREQ,IDI_EMSREQ_286ALIAS,
|
|
* IDI_EMSDES,IDI_EMSDES_286ALIAS,
|
|
*/
|
|
IDI_ALTTAB,IDI_ALTTAB_286ALIAS,
|
|
IDI_ALTESC,IDI_ALTESC_286ALIAS,
|
|
IDI_ALTPRTSC,IDI_ALTPRTSC_286ALIAS,
|
|
IDI_PRTSC,IDI_PRTSC_286ALIAS,
|
|
IDI_CTRLESC,IDI_CTRLESC_286ALIAS };
|
|
|
|
unsigned TmpHotKeyScan;
|
|
unsigned TmpHotKeyShVal;
|
|
unsigned TmpHotKeyShMsk = 0x000F; /* Either CTRL, ALT or SHIFT */
|
|
unsigned char TmpHotKeyVal;
|
|
|
|
unsigned InMemHotKeyScan = 0;
|
|
unsigned InMemHotKeyShVal = 0;
|
|
unsigned InMemHotKeyShMsk = 0;
|
|
unsigned char InMemHotKeyVal;
|
|
|
|
BOOL ChangeHkey = FALSE; /* Prevent re-entrancy */
|
|
|
|
BOOL bMouse;
|
|
HCURSOR hArrowCurs;
|
|
HCURSOR hWaitCurs;
|
|
|
|
int SysCharHeight;
|
|
int SysCharWidth;
|
|
|
|
HFONT HotKyFnt = 0;
|
|
int HotKyFntHgt = 0;
|
|
HFONT SysFixedFont;
|
|
int SysFixedHeight;
|
|
int SysFixedWidth;
|
|
|
|
HINSTANCE hPifInstance;
|
|
HWND hwndPifDlg = (HWND)NULL;
|
|
HWND hwndNTPifDlg = (HWND)NULL;
|
|
HWND hwndAdvPifDlg = (HWND)NULL;
|
|
HWND hParentWnd = (HWND)NULL;
|
|
HWND hwndFocusMain = (HWND)NULL;
|
|
HWND hwndFocusAdv = (HWND)NULL;
|
|
HWND hwndFocusNT = (HWND)NULL;
|
|
BOOL bNTDlgOpen = FALSE;
|
|
BOOL bAdvDlgOpen = FALSE;
|
|
int FocusIDMain = IDI_ENAME;
|
|
int FocusIDMainMenu = 0;
|
|
int FocusIDAdvMenu = 0;
|
|
int FocusIDAdv = IDI_BPRI;
|
|
int FocusIDNTMenu = 0;
|
|
int FocusIDNT = IDI_AUTOEXEC;
|
|
HWND hwndFocus = (HWND)NULL;
|
|
int FocusID = IDI_ENAME;
|
|
|
|
unsigned char FocStatTextMain[PIFSTATUSLEN*2] = { 0 };
|
|
unsigned char FocStatTextAdv[PIFSTATUSLEN*2] = { 0 };
|
|
unsigned char FocStatTextNT[PIFSTATUSLEN*2] = { 0 };
|
|
|
|
PIFSTATUSPAINT StatusPntData;
|
|
|
|
RECT StatRecSizeMain;
|
|
RECT StatRecSizeAdv;
|
|
RECT StatRecSizeNT;
|
|
|
|
HWND hMainwnd = (HWND)NULL;
|
|
|
|
int MainScrollRange = 0;
|
|
int MainScrollLineSz = 0;
|
|
int MainWndLines = 0;
|
|
int MaxMainNeg = 0;
|
|
int MainWndSize = SIZENORMAL;
|
|
|
|
int AdvScrollRange = 0;
|
|
int AdvScrollLineSz = 0;
|
|
int AdvWndLines = 0;
|
|
int MaxAdvNeg = 0;
|
|
int AdvWndSize = SIZENORMAL;
|
|
|
|
int NTScrollRange = 0;
|
|
int NTScrollLineSz = 0;
|
|
int NTWndLines = 0;
|
|
int MaxNTNeg = 0;
|
|
int NTWndSize = SIZENORMAL;
|
|
|
|
HACCEL hAccel;
|
|
|
|
unsigned char CurPifFile[256]; /* this is name IN ANSI!! */
|
|
unsigned char PifBuf[PIFEDITMAXPIF*2];
|
|
unsigned char NTSys32Root[PIFDEFPATHSIZE*2];
|
|
|
|
PIFNEWSTRUCT UNALIGNED *PifFile;
|
|
PIF386EXT UNALIGNED *Pif386ext = (PIF386EXT *)NULL;
|
|
/*
|
|
* PIF286EXT31 *Pif286ext31 = (PIF286EXT31 *)NULL;
|
|
*/
|
|
PIF286EXT30 UNALIGNED *Pif286ext30 = (PIF286EXT30 *)NULL;
|
|
PIFWNTEXT UNALIGNED *PifNText = (PIFWNTEXT *)NULL;
|
|
|
|
OFSTRUCT ofReopen;
|
|
unsigned char rgchInsMem[320];
|
|
unsigned char rgchTitle[60];
|
|
unsigned char szExtSave[] = "\\*.PIF";
|
|
|
|
HMENU hSysMenuMain = (HMENU)NULL;
|
|
HMENU hFileMenu = (HMENU)NULL;
|
|
HMENU hModeMenu = (HMENU)NULL;
|
|
HMENU hHelpMenu = (HMENU)NULL;
|
|
HMENU hSysMenuAdv = (HMENU)NULL;
|
|
HMENU hSysMenuNT = (HMENU)NULL;
|
|
|
|
FARPROC lpfnPifWnd;
|
|
FARPROC lpfnAdvPifWnd;
|
|
FARPROC lpfnNTPifWnd;
|
|
|
|
void InvalidateStatusBar(HWND hwnd)
|
|
{
|
|
RECT rc;
|
|
|
|
if((hwnd == hwndAdvPifDlg) && AdvScrollRange) /* No status bar if scroll bar */
|
|
return;
|
|
|
|
if((hwnd == hwndNTPifDlg) && NTScrollRange) /* No status bar if scroll bar */
|
|
return;
|
|
|
|
GetClientRect(hwnd, &rc);
|
|
if(rc.bottom >= (StatusPntData.dyStatus + StatusPntData.dyBorderx2)) {
|
|
rc.top = rc.bottom - (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
InvalidateRect(hwnd,(CONST RECT *)&rc,FALSE);
|
|
}
|
|
}
|
|
|
|
void InvalidateAllStatus(void)
|
|
{
|
|
|
|
if(hMainwnd) {
|
|
InvalidateStatusBar(hMainwnd);
|
|
}
|
|
if(hwndAdvPifDlg) {
|
|
InvalidateStatusBar(hwndAdvPifDlg);
|
|
}
|
|
if(hwndNTPifDlg) {
|
|
InvalidateStatusBar(hwndNTPifDlg);
|
|
}
|
|
}
|
|
|
|
void SetStatusText(HWND hwnd,int FocID,BOOL redrawflg)
|
|
{
|
|
unsigned char *dst;
|
|
|
|
if(hwnd == hMainwnd) {
|
|
dst = FocStatTextMain;
|
|
} else if (hwnd == hwndAdvPifDlg) {
|
|
dst = FocStatTextAdv;
|
|
} else {
|
|
dst = FocStatTextNT;
|
|
}
|
|
if((FocID == IDADVCANCEL) && AdvClose) {
|
|
FocID = IDI_CANCLOSE;
|
|
}
|
|
|
|
if(!LoadString(hPifInstance, FocID, dst, PIFSTATUSLEN-1)) {
|
|
/* if string not defined above, try getting the generic string */
|
|
if(!LoadString(hPifInstance, IDI_GENSTAT, dst, PIFDEFPATHSIZE-1)) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
}
|
|
}
|
|
if(redrawflg) {
|
|
InvalidateStatusBar(hwnd);
|
|
}
|
|
}
|
|
|
|
void PaintStatus(HWND hwnd)
|
|
{
|
|
HDC hdc;
|
|
RECT rc, rcTemp, rcTemp2;
|
|
HBRUSH hBrush;
|
|
PAINTSTRUCT ps;
|
|
BOOL bEGA;
|
|
unsigned char *txtpnt;
|
|
unsigned char blank[] = " ";
|
|
|
|
if((hwnd == hwndAdvPifDlg) && AdvScrollRange) /* No status bar if scroll bar */
|
|
return;
|
|
|
|
if((hwnd == hwndNTPifDlg) && NTScrollRange) /* No status bar if scroll bar */
|
|
return;
|
|
|
|
hdc = BeginPaint(hwnd, &ps);
|
|
|
|
GetClientRect(hwnd, &rc);
|
|
StatusPntData.hFontStatus = SelectObject(hdc, StatusPntData.hFontStatus);
|
|
|
|
rc.top = rc.bottom - (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
|
|
bEGA = GetNearestColor(hdc, GetSysColor(COLOR_BTNHIGHLIGHT)) ==
|
|
GetNearestColor(hdc, GetSysColor(COLOR_BTNFACE));
|
|
|
|
if (bEGA) {
|
|
|
|
/* EGA type display */
|
|
|
|
SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT));
|
|
SetBkColor(hdc, GetSysColor(COLOR_WINDOW));
|
|
|
|
} else {
|
|
|
|
/* VGA type display */
|
|
|
|
/* draw the frame */
|
|
|
|
/* Border color */
|
|
|
|
hBrush = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
|
|
|
|
/* top and bottom border */
|
|
|
|
/* Top */
|
|
|
|
rcTemp = rc;
|
|
rcTemp.bottom = rcTemp.top + StatusPntData.dyBorderx3;
|
|
rcTemp.top += StatusPntData.dyBorder;
|
|
FillRect(hdc, (CONST RECT *)&rcTemp, hBrush);
|
|
|
|
/* Bottom */
|
|
|
|
rcTemp = rc;
|
|
rcTemp.top = rcTemp.bottom - StatusPntData.dyBorderx2;
|
|
FillRect(hdc, (CONST RECT *)&rcTemp, hBrush);
|
|
|
|
/* left and right border */
|
|
|
|
/* Left */
|
|
|
|
rcTemp = rc;
|
|
rcTemp.right = 8 * StatusPntData.dyBorder;
|
|
rcTemp.top += StatusPntData.dyBorder;
|
|
FillRect(hdc, (CONST RECT *)&rcTemp, hBrush);
|
|
|
|
/* Right */
|
|
|
|
rcTemp = rc;
|
|
rcTemp.left = rcTemp.right - (8 * StatusPntData.dyBorder);
|
|
rcTemp.top += StatusPntData.dyBorder;
|
|
FillRect(hdc, (CONST RECT *)&rcTemp, hBrush);
|
|
|
|
DeleteObject((HGDIOBJ)hBrush);
|
|
|
|
/* Shadow color */
|
|
|
|
hBrush = CreateSolidBrush(GetSysColor(COLOR_BTNSHADOW));
|
|
|
|
/* Top and left shadow */
|
|
|
|
/* Top */
|
|
|
|
rcTemp.left = 8 * StatusPntData.dyBorder;
|
|
rcTemp.right = rcTemp.right - 8 * StatusPntData.dyBorder;
|
|
rcTemp.top = rc.top + StatusPntData.dyBorderx3;
|
|
rcTemp.bottom = rcTemp.top + StatusPntData.dyBorder;
|
|
FillRect(hdc, (CONST RECT *)&rcTemp, hBrush);
|
|
|
|
/* Left */
|
|
|
|
rcTemp = rc;
|
|
rcTemp.left = 8 * StatusPntData.dyBorder;
|
|
rcTemp.right = rcTemp.left + StatusPntData.dyBorder;
|
|
rcTemp.top += StatusPntData.dyBorderx3;
|
|
rcTemp.bottom -= StatusPntData.dyBorderx2;
|
|
FillRect(hdc, (CONST RECT *)&rcTemp, hBrush);
|
|
|
|
DeleteObject((HGDIOBJ)hBrush);
|
|
|
|
/* Hilight color */
|
|
|
|
hBrush = CreateSolidBrush(GetSysColor(COLOR_BTNHIGHLIGHT));
|
|
|
|
/* Right and bottom hilight */
|
|
|
|
/* Bottom */
|
|
|
|
rcTemp = rc;
|
|
rcTemp.left = 8 * StatusPntData.dyBorder;
|
|
rcTemp.right = rcTemp.right - 8 * StatusPntData.dyBorder;
|
|
rcTemp.top = rc.bottom - 3 * StatusPntData.dyBorder;
|
|
rcTemp.bottom = rcTemp.top + StatusPntData.dyBorder;
|
|
FillRect(hdc, (CONST RECT *)&rcTemp, hBrush);
|
|
|
|
/* Right */
|
|
|
|
rcTemp = rc;
|
|
rcTemp.left = rcTemp.right - 9 * StatusPntData.dyBorder;
|
|
rcTemp.right = rcTemp.left + StatusPntData.dyBorder;
|
|
rcTemp.top += StatusPntData.dyBorderx3;
|
|
rcTemp.bottom -= StatusPntData.dyBorderx2;
|
|
FillRect(hdc, (CONST RECT *)&rcTemp, hBrush);
|
|
|
|
DeleteObject((HGDIOBJ)hBrush);
|
|
|
|
SetTextColor(hdc, GetSysColor(COLOR_BTNTEXT));
|
|
SetBkColor(hdc, GetSysColor(COLOR_BTNFACE));
|
|
}
|
|
|
|
/* solid black line across top */
|
|
|
|
hBrush = CreateSolidBrush(GetSysColor(COLOR_WINDOWTEXT));
|
|
rcTemp = rc;
|
|
rcTemp.bottom = rcTemp.top;
|
|
rcTemp.bottom += StatusPntData.dyBorder;
|
|
FillRect(hdc, (CONST RECT *)&rcTemp, hBrush);
|
|
DeleteObject((HGDIOBJ)hBrush);
|
|
|
|
/* now the text, with the button face background */
|
|
|
|
rcTemp.top = rc.top + ((1+2+1) * StatusPntData.dyBorder);
|
|
rcTemp.bottom = rc.bottom - StatusPntData.dyBorderx3;
|
|
rcTemp.left = 9 * StatusPntData.dyBorder;
|
|
rcTemp.right = rc.right - 9 * StatusPntData.dyBorder;
|
|
|
|
if (bEGA) {
|
|
rcTemp2 = rc;
|
|
rcTemp2.top += StatusPntData.dyBorder;
|
|
} else {
|
|
rcTemp2 = rcTemp;
|
|
}
|
|
|
|
if(DoingMsg) {
|
|
txtpnt = blank;
|
|
} else {
|
|
if(hwnd == hMainwnd) {
|
|
txtpnt = FocStatTextMain;
|
|
} else if(hwnd == hwndAdvPifDlg) {
|
|
txtpnt = FocStatTextAdv;
|
|
} else {
|
|
txtpnt = FocStatTextNT;
|
|
}
|
|
}
|
|
|
|
ExtTextOut(hdc, rcTemp.left + StatusPntData.dyBorderx2, rcTemp.top,
|
|
ETO_OPAQUE | ETO_CLIPPED, (CONST RECT *)&rcTemp2, (LPSTR)txtpnt,
|
|
lstrlen((LPSTR)txtpnt), NULL);
|
|
|
|
StatusPntData.hFontStatus = SelectObject(hdc, StatusPntData.hFontStatus);
|
|
|
|
EndPaint(hwnd, (CONST PAINTSTRUCT *)&ps);
|
|
|
|
}
|
|
|
|
void HourGlass(BOOL bOn)
|
|
{
|
|
/* toggle hourglass cursor */
|
|
|
|
if(!bMouse) /* Turn cursor on/off if no mouse */
|
|
ShowCursor(bOn);
|
|
SetCursor(bOn ? hWaitCurs : hArrowCurs);
|
|
}
|
|
|
|
void SetMainTitle(void)
|
|
{
|
|
int i;
|
|
int j;
|
|
HANDLE hFile;
|
|
unsigned char buf[(MAX_PATH*2)+360];
|
|
unsigned char buf2[360];
|
|
unsigned char *pch;
|
|
WIN32_FIND_DATA fd;
|
|
|
|
if(!(i = LoadString(hPifInstance, PIFCAPTION, (LPSTR)buf, sizeof(buf)))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
}
|
|
|
|
if(hwndAdvPifDlg) {
|
|
if(!(j = LoadString(hPifInstance, PIFCAPTIONADV, (LPSTR)buf2, sizeof(buf2)))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
}
|
|
}
|
|
else if(hwndNTPifDlg) {
|
|
if(!(j = LoadString(hPifInstance, PIFCAPTIONNT, (LPSTR)buf2, sizeof(buf2)))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
}
|
|
}
|
|
if(CurPifFile[0] == 0) {
|
|
if(!LoadString(hPifInstance, NOTITLE, (LPSTR)(buf+i), (sizeof(buf)-i))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
}
|
|
/*
|
|
* if(hwndAdvPifDlg) {
|
|
* if(!LoadString(hPifInstance, NOTITLE, (LPSTR)(buf2+j), (sizeof(buf2)-j))) {
|
|
* Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
* }
|
|
* }
|
|
*/
|
|
} else {
|
|
if((hFile = FindFirstFile(CurPifFile, &fd)) != INVALID_HANDLE_VALUE) {
|
|
lstrcat((LPSTR)buf, fd.cFileName);
|
|
FindClose(hFile);
|
|
}
|
|
else {
|
|
pch = CurPifFile+fileoffset;
|
|
lstrcat((LPSTR)buf, (LPSTR)pch);
|
|
}
|
|
/*
|
|
* if(hwndAdvPifDlg)
|
|
* lstrcat((LPSTR)buf2, (LPSTR)pch);
|
|
*/
|
|
}
|
|
SetWindowText(hMainwnd,(LPSTR)buf);
|
|
|
|
if(hwndAdvPifDlg) {
|
|
SetWindowText(hwndAdvPifDlg,(LPSTR)buf2);
|
|
}
|
|
else if(hwndNTPifDlg) {
|
|
SetWindowText(hwndNTPifDlg,(LPSTR)buf2);
|
|
}
|
|
}
|
|
|
|
|
|
UndoNTClose(void)
|
|
{
|
|
unsigned char chBuf[40];
|
|
|
|
if(NTClose && hwndNTPifDlg) {
|
|
if(!LoadString(hPifInstance, PIFCANCELSTRNG , (LPSTR)chBuf, sizeof(chBuf))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
} else {
|
|
SetDlgItemText(hwndNTPifDlg,IDNTCANCEL,(LPSTR)chBuf);
|
|
}
|
|
NTClose = FALSE;
|
|
if(FocusIDNT == IDNTCANCEL) {
|
|
SetStatusText(hwndNTPifDlg,FocusIDNT,TRUE);
|
|
}
|
|
return(TRUE);
|
|
}
|
|
return(FALSE);
|
|
}
|
|
|
|
|
|
UndoAdvClose(void)
|
|
{
|
|
unsigned char chBuf[40];
|
|
|
|
if(AdvClose && hwndAdvPifDlg) {
|
|
if(!LoadString(hPifInstance, PIFCANCELSTRNG , (LPSTR)chBuf, sizeof(chBuf))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
} else {
|
|
SetDlgItemText(hwndAdvPifDlg,IDADVCANCEL,(LPSTR)chBuf);
|
|
}
|
|
AdvClose = FALSE;
|
|
if(FocusIDAdv == IDADVCANCEL) {
|
|
SetStatusText(hwndAdvPifDlg,FocusIDAdv,TRUE);
|
|
}
|
|
return(TRUE);
|
|
}
|
|
return(FALSE);
|
|
}
|
|
|
|
|
|
DoDlgCommand(HWND hwnd, WPARAM wParam, LONG lParam)
|
|
{
|
|
unsigned int value;
|
|
char buf[PIFDEFPATHSIZE*2];
|
|
int len, cmd;
|
|
int ivalue;
|
|
BOOL result;
|
|
BOOL OldFileChanged;
|
|
|
|
cmd = LOWORD(wParam);
|
|
|
|
switch (cmd) {
|
|
|
|
/* case IDI_PSNONE:
|
|
* case IDI_PSTEXT:
|
|
* case IDI_PSGRAPH:
|
|
* CheckRadioButton(hwnd, IDI_PSFIRST, IDI_PSLAST, cmd);
|
|
* break;
|
|
*/
|
|
case IDI_PSTEXT:
|
|
case IDI_PSGRAPH:
|
|
CheckRadioButton(hwnd, IDI_PSTEXT, IDI_PSGRAPH, cmd);
|
|
break;
|
|
|
|
/*
|
|
* case IDI_SENONE:
|
|
* case IDI_SETEXT:
|
|
* case IDI_SEGRAPH:
|
|
* CheckRadioButton(hwnd, IDI_SEFIRST, IDI_SELAST, cmd);
|
|
* break;
|
|
*/
|
|
|
|
case IDI_ADVANCED:
|
|
if(CurrMode386) {
|
|
HourGlass(TRUE);
|
|
SwitchAdvance386(hwnd);
|
|
HourGlass(FALSE);
|
|
} else {
|
|
|
|
}
|
|
break;
|
|
|
|
case IDI_NT:
|
|
if(CurrMode386) {
|
|
HourGlass(TRUE);
|
|
SwitchNT(hwnd);
|
|
HourGlass(FALSE);
|
|
} else {
|
|
|
|
}
|
|
break;
|
|
|
|
case IDI_PSNONE:
|
|
case IDI_SENONE:
|
|
|
|
/* case IDI_DMSCREEN: */
|
|
/* case IDI_DMMEM: */
|
|
case IDI_DMCOM1:
|
|
case IDI_DMCOM2:
|
|
case IDI_DMCOM3:
|
|
case IDI_DMCOM4:
|
|
case IDI_DMKBD:
|
|
case IDI_EXIT:
|
|
case IDI_BACK:
|
|
case IDI_EXCL:
|
|
case IDI_NOSAVVID:
|
|
case IDI_NTTIMER:
|
|
CheckDlgButton(hwnd, cmd, !IsDlgButtonChecked(hwnd, cmd));
|
|
break;
|
|
|
|
case IDI_POLL:
|
|
case IDI_ALTTAB:
|
|
case IDI_ALTESC:
|
|
case IDI_CTRLESC:
|
|
case IDI_ALTSPACE:
|
|
case IDI_ALTENTER:
|
|
case IDI_ALTPRTSC:
|
|
case IDI_PRTSC:
|
|
case IDI_NOHMA:
|
|
case IDI_INT16PST:
|
|
case IDI_VMLOCKED:
|
|
case IDI_XMSLOCKED:
|
|
case IDI_EMSLOCKED:
|
|
case IDI_TEXTEMULATE:
|
|
case IDI_RETAINALLO:
|
|
case IDI_TRAPTXT:
|
|
case IDI_TRAPLRGRFX:
|
|
case IDI_TRAPHRGRFX:
|
|
CheckDlgButton(hwnd, cmd, !IsDlgButtonChecked(hwnd, cmd));
|
|
UndoAdvClose();
|
|
break;
|
|
|
|
case IDI_VMODETXT:
|
|
CheckRadioButton(hwnd, IDI_VMODETXT, IDI_VMODEHRGRFX, IDI_VMODETXT);
|
|
break;
|
|
|
|
case IDI_VMODELRGRFX:
|
|
CheckRadioButton(hwnd, IDI_VMODETXT, IDI_VMODEHRGRFX, IDI_VMODELRGRFX);
|
|
break;
|
|
|
|
case IDI_VMODEHRGRFX:
|
|
CheckRadioButton(hwnd, IDI_VMODETXT, IDI_VMODEHRGRFX, IDI_VMODEHRGRFX);
|
|
break;
|
|
|
|
case IDI_CLOSE:
|
|
CheckDlgButton(hwnd, cmd, !IsDlgButtonChecked(hwnd, cmd));
|
|
if(IsDlgButtonChecked(hwnd, cmd)) {
|
|
value = Warning(WARNCLOSE,MB_ICONHAND | MB_OKCANCEL);
|
|
if(value == IDCANCEL) {
|
|
CheckDlgButton(hwnd, cmd, FALSE);
|
|
}
|
|
}
|
|
UndoAdvClose();
|
|
break;
|
|
|
|
case IDI_FSCR:
|
|
case IDI_WND:
|
|
CheckRadioButton(hwnd, IDI_WND, IDI_FSCR, cmd);
|
|
break;
|
|
|
|
case IDI_FPRI:
|
|
case IDI_BPRI:
|
|
if (HIWORD(wParam) == EN_CHANGE) {
|
|
len = GetDlgItemText(hwnd, cmd, (LPSTR)buf, sizeof(buf));
|
|
value = GetDlgItemInt(hwnd, cmd, (BOOL FAR *)&result, FALSE);
|
|
if((!result) && (len == 0)) {
|
|
UndoAdvClose();
|
|
} else if((!result) || (value == 0) || (value > 10000)) {
|
|
MessageBeep(0);
|
|
Warning(errBadNumberP,MB_ICONEXCLAMATION | MB_OK);
|
|
SetDlgItemInt(hwnd, cmd,
|
|
(cmd == IDI_FPRI ? Pif386ext->PfFPriority : Pif386ext->PfBPriority),
|
|
FALSE);
|
|
} else {
|
|
UndoAdvClose();
|
|
}
|
|
}
|
|
break;
|
|
|
|
case IDI_MEMDES:
|
|
case IDI_MEMREQ:
|
|
if (HIWORD(wParam) == EN_CHANGE) {
|
|
len = GetDlgItemText(hwnd, cmd, (LPSTR)buf, sizeof(buf));
|
|
ivalue = (int)GetDlgItemInt(hwnd, cmd, (BOOL FAR *)&result, TRUE);
|
|
if(((!result) && (len == 0)) || ((!result) && (len == 1) && (buf[0] == '-'))) {
|
|
} else if((!result) || (ivalue < -1) || (ivalue > 640)) {
|
|
MessageBeep(0);
|
|
if(cmd == IDI_MEMREQ)
|
|
Warning(errBadNumberMR,MB_ICONEXCLAMATION | MB_OK);
|
|
else
|
|
Warning(errBadNumberMD,MB_ICONEXCLAMATION | MB_OK);
|
|
if(CurrMode386)
|
|
SetDlgItemInt(hwnd, cmd,
|
|
(cmd == IDI_MEMDES ? Pif386ext->maxmem : Pif386ext->minmem),
|
|
TRUE);
|
|
else
|
|
SetDlgItemInt(hwnd, cmd,
|
|
(cmd == IDI_MEMDES ? PifFile->maxmem : PifFile->minmem),
|
|
TRUE);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case IDI_EMSDES:
|
|
case IDI_XMADES:
|
|
if (HIWORD(wParam) == EN_CHANGE) {
|
|
len = GetDlgItemText(hwnd, cmd, (LPSTR)buf, sizeof(buf));
|
|
ivalue = (int)GetDlgItemInt(hwnd, cmd, (BOOL FAR *)&result, TRUE);
|
|
if(((!result) && (len == 0)) || ((!result) && (len == 1) && (buf[0] == '-'))) {
|
|
} else if((!result) || ((ivalue < -1) || (ivalue > 16384))) {
|
|
MessageBeep(0);
|
|
Warning(errBadNumberXEMSD,MB_ICONEXCLAMATION | MB_OK);
|
|
if(CurrMode386) {
|
|
if(Pif386ext) {
|
|
switch (cmd) {
|
|
case IDI_EMSDES:
|
|
SetDlgItemInt(hwnd, cmd, Pif386ext->PfMaxEMMK,TRUE);
|
|
break;
|
|
case IDI_XMADES:
|
|
SetDlgItemInt(hwnd, cmd, Pif386ext->PfMaxXmsK,TRUE);
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
/*
|
|
*switch (cmd) {
|
|
*
|
|
* case IDI_EMSDES:
|
|
* if(Pif286ext31)
|
|
* SetDlgItemInt(hwnd, cmd, Pif286ext31->PfMaxEmsK,TRUE);
|
|
* break;
|
|
*
|
|
* case IDI_XMADES:
|
|
*/
|
|
if(Pif286ext30)
|
|
SetDlgItemInt(hwnd, cmd, Pif286ext30->PfMaxXmsK,TRUE);
|
|
/*
|
|
* break;
|
|
*}
|
|
*/
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
case IDI_EMSREQ:
|
|
case IDI_XMAREQ:
|
|
if (HIWORD(wParam) == EN_CHANGE) {
|
|
len = GetDlgItemText(hwnd, cmd, (LPSTR)buf, sizeof(buf));
|
|
value = GetDlgItemInt(hwnd, cmd, (BOOL FAR *)&result, FALSE);
|
|
if((!result) && (len == 0)) {
|
|
} else if((!result) || (value > 16384)) {
|
|
MessageBeep(0);
|
|
Warning(errBadNumberXEMSR,MB_ICONEXCLAMATION | MB_OK);
|
|
if(CurrMode386) {
|
|
if(Pif386ext) {
|
|
switch (cmd) {
|
|
case IDI_EMSREQ:
|
|
SetDlgItemInt(hwnd, cmd, Pif386ext->PfMinEMMK,FALSE);
|
|
break;
|
|
case IDI_XMAREQ:
|
|
SetDlgItemInt(hwnd, cmd, Pif386ext->PfMinXmsK,FALSE);
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
/*
|
|
*switch (cmd) {
|
|
*
|
|
* case IDI_EMSREQ:
|
|
* if(Pif286ext31)
|
|
* SetDlgItemInt(hwnd, cmd, Pif286ext31->PfMinEmsK,FALSE);
|
|
* break;
|
|
*
|
|
* case IDI_XMAREQ:
|
|
*/
|
|
if(Pif286ext30)
|
|
SetDlgItemInt(hwnd, cmd, Pif286ext30->PfMinXmsK,FALSE);
|
|
/*
|
|
* break;
|
|
*}
|
|
*/
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
case IDNTCANCEL:
|
|
case IDADVCANCEL:
|
|
if((hwnd == hwndAdvPifDlg) || (hwnd == hwndNTPifDlg)) {
|
|
SendMessage(hwnd,WM_PRIVCLOSECANCEL,0,0L);
|
|
}
|
|
break;
|
|
|
|
case IDOK:
|
|
case IDNTOK:
|
|
if(hwnd == hwndAdvPifDlg) {
|
|
if(CurrMode386) {
|
|
if(UpdatePif386Struc())
|
|
FileChanged = TRUE;
|
|
}
|
|
if(!DoFieldsWorkAdv(FALSE))
|
|
break;
|
|
SendMessage(hwnd,WM_PRIVCLOSEOK,0,0L);
|
|
}
|
|
else if(hwnd == hwndNTPifDlg) {
|
|
if(CurrMode386) {
|
|
if(UpdatePifNTStruc()) {
|
|
OldFileChanged = FileChanged;
|
|
FileChanged = TRUE;
|
|
}
|
|
}
|
|
if(!DoFieldsWorkNT(FALSE)) {
|
|
FileChanged = OldFileChanged;
|
|
break;
|
|
}
|
|
SendMessage(hwnd,WM_PRIVCLOSEOK,0,0L);
|
|
}
|
|
break;
|
|
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
long GetNTDlgSize(HWND hwnd)
|
|
{
|
|
int i = 0;
|
|
RECT rc2;
|
|
RECT rc3;
|
|
RECT rc4;
|
|
|
|
/* get right side from the OK button */
|
|
GetWindowRect(GetDlgItem(hwnd,IDNTOK),(LPRECT)&rc2);
|
|
|
|
/* get left & bottom sides from the IDI_NTTIMER check box */
|
|
GetWindowRect(GetDlgItem(hwnd,IDI_NTTIMER),(LPRECT)&rc3);
|
|
GetWindowRect(hwnd,(LPRECT)&rc4);
|
|
|
|
if(NTScrollRange && (i = GetScrollPos(hwnd,SB_VERT))) {
|
|
i = min((i * NTScrollLineSz),MaxNTNeg);
|
|
}
|
|
return(MAKELONG((rc2.right - rc4.left) +
|
|
SysCharWidth -
|
|
GetSystemMetrics(SM_CXFRAME),
|
|
(rc3.bottom - rc4.top) +
|
|
(SysCharHeight/2) +
|
|
i -
|
|
(GetSystemMetrics(SM_CYCAPTION) +
|
|
GetSystemMetrics(SM_CYBORDER) +
|
|
GetSystemMetrics(SM_CYFRAME)) +
|
|
(StatusPntData.dyStatus + StatusPntData.dyBorderx2)));
|
|
}
|
|
|
|
|
|
long GetAdvDlgSize(HWND hwnd)
|
|
{
|
|
int i = 0;
|
|
RECT rc2;
|
|
RECT rc3;
|
|
|
|
GetWindowRect(GetDlgItem(hwnd,IDI_OTHGRP),(LPRECT)&rc2);
|
|
GetWindowRect(hwnd,(LPRECT)&rc3);
|
|
if(AdvScrollRange && (i = GetScrollPos(hwnd,SB_VERT))) {
|
|
i = min((i * AdvScrollLineSz),MaxAdvNeg);
|
|
}
|
|
return(MAKELONG((rc2.right - rc3.left) +
|
|
SysCharWidth -
|
|
GetSystemMetrics(SM_CXFRAME),
|
|
(rc2.top-rc3.top) +
|
|
(rc2.bottom - rc2.top) +
|
|
(SysCharHeight/2) +
|
|
i -
|
|
(GetSystemMetrics(SM_CYCAPTION) +
|
|
GetSystemMetrics(SM_CYBORDER) +
|
|
GetSystemMetrics(SM_CYFRAME)) +
|
|
(StatusPntData.dyStatus + StatusPntData.dyBorderx2)));
|
|
}
|
|
|
|
|
|
ReEnableAdvButton(void)
|
|
{
|
|
HWND hwndctl;
|
|
|
|
if(hwndPifDlg && CurrMode386) {
|
|
|
|
if(!bNTDlgOpen) {
|
|
hwndctl = GetDlgItem(hwndPifDlg,IDI_NT);
|
|
if(hwndFocusMain == hwndctl)
|
|
SendMessage(hwndctl,BM_SETSTYLE,BS_DEFPUSHBUTTON,1L);
|
|
else
|
|
SendMessage(hwndctl,BM_SETSTYLE,BS_PUSHBUTTON,1L);
|
|
EnableWindow(hwndctl,TRUE);
|
|
}
|
|
|
|
if(!bAdvDlgOpen) {
|
|
hwndctl = GetDlgItem(hwndPifDlg,IDI_ADVANCED);
|
|
if(hwndFocusMain == hwndctl)
|
|
SendMessage(hwndctl,BM_SETSTYLE,BS_DEFPUSHBUTTON,1L);
|
|
else
|
|
SendMessage(hwndctl,BM_SETSTYLE,BS_PUSHBUTTON,1L);
|
|
EnableWindow(hwndctl,TRUE);
|
|
}
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
DoOpenPifFile(HDROP DropHnd)
|
|
{
|
|
HWND hwnd2;
|
|
unsigned char *pchBuf = (unsigned char *)NULL;
|
|
unsigned char *pch;
|
|
|
|
if (MaybeSaveFile()) {
|
|
if(DropHnd) {
|
|
if(!(pchBuf = (unsigned char *)LocalAlloc(LPTR, 132))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
} else {
|
|
if(!(DragQueryFile(DropHnd,0,(LPSTR)pchBuf,132))) {
|
|
LocalFree((HANDLE)pchBuf);
|
|
pchBuf = (unsigned char *)NULL;
|
|
} else {
|
|
SetFileOffsets(pchBuf,&tmpfileoffset,&tmpextoffset);
|
|
}
|
|
}
|
|
} else {
|
|
pchBuf = PutUpDB(DTOPEN);
|
|
}
|
|
}
|
|
if(pchBuf) {
|
|
AnsiUpper((LPSTR)pchBuf);
|
|
pch = pchBuf+tmpextoffset;
|
|
if((tmpextoffset == 0) || (lstrcmp((LPSTR)pch, (LPSTR)"PIF"))) {
|
|
if( Warning(errWrongExt,MB_ICONEXCLAMATION | MB_OKCANCEL | MB_DEFBUTTON2) == IDCANCEL) {
|
|
LocalFree((HANDLE)pchBuf);
|
|
pchBuf = (unsigned char *)NULL;
|
|
}
|
|
}
|
|
}
|
|
if(pchBuf) {
|
|
HourGlass(TRUE);
|
|
LoadPifFile(pchBuf);
|
|
LocalFree((HANDLE)pchBuf);
|
|
SendMessage(hwndPifDlg,WM_NEXTDLGCTL,
|
|
(WPARAM)(hwnd2 = GetDlgItem(hwndPifDlg,IDI_ENAME)),1L);
|
|
SetFocus(hwnd2);
|
|
HourGlass(FALSE);
|
|
SetMainTitle();
|
|
}
|
|
if(DropHnd)
|
|
DragFinish(DropHnd);
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
int FAR PASCAL PifNTWndProc(HWND hwnd, UINT message, WPARAM wParam, LONG lParam)
|
|
{
|
|
LPPOINT ppnt3;
|
|
LPPOINT ppnt4;
|
|
int width;
|
|
int height;
|
|
long size;
|
|
BOOL ChngFlg;
|
|
HMENU hmenu;
|
|
RECT rc;
|
|
CHAR buf[PIFDEFPATHSIZE*2];
|
|
int tmpFOCID;
|
|
|
|
switch (message) {
|
|
|
|
case WM_INITDIALOG:
|
|
if((hmenu = GetSystemMenu(hwnd,FALSE))) {
|
|
DeleteMenu(hmenu, SC_RESTORE, MF_BYCOMMAND);
|
|
DeleteMenu(hmenu, SC_SIZE, MF_BYCOMMAND);
|
|
DeleteMenu(hmenu, SC_MINIMIZE, MF_BYCOMMAND);
|
|
DeleteMenu(hmenu, SC_MAXIMIZE, MF_BYCOMMAND);
|
|
} else {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
}
|
|
lstrcpy(szOldAutoexec, (LPSTR)(PifNText->achAutoexecFile));
|
|
lstrcpy(szOldConfig, (LPSTR)(PifNText->achConfigFile));
|
|
hwndFocusNT = (HWND)wParam;
|
|
bNTDlgOpen = TRUE;
|
|
FocusIDNT = GetDlgCtrlID((HWND)wParam);
|
|
OemToAnsi((LPSTR)PifNText->achAutoexecFile, buf);
|
|
SetDlgItemText(hwnd, IDI_AUTOEXEC,(LPSTR)buf);
|
|
OemToAnsi((LPSTR)PifNText->achConfigFile, buf);
|
|
SetDlgItemText(hwnd, IDI_CONFIG, (LPSTR)buf);
|
|
SendDlgItemMessage(hwnd, IDI_AUTOEXEC, EM_LIMITTEXT, PIFDEFPATHSIZE-1, 0L);
|
|
SendDlgItemMessage(hwnd, IDI_CONFIG, EM_LIMITTEXT, PIFDEFPATHSIZE-1, 0L);
|
|
CheckDlgButton(hwnd, IDI_NTTIMER, (PifNText->dwWNTFlags & COMPAT_TIMERTIC ? TRUE : FALSE));
|
|
SetStatusText(hwnd,FocusIDNT,FALSE);
|
|
if(InitShWind) {
|
|
SetFocus((HWND)wParam); /* Give focus to wparam item */
|
|
SendMessage((HWND)wParam,EM_SETSEL,0,MAKELONG(0,0x7FFF));
|
|
return(FALSE);
|
|
} else {
|
|
return(FALSE); /* Do not set focus until init show */
|
|
}
|
|
break;
|
|
|
|
case WM_PAINT:
|
|
PaintStatus(hwnd);
|
|
return(FALSE);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
SetStatusText(hwnd,FocusIDNT,TRUE);
|
|
FocusIDNTMenu = 0;
|
|
DoDlgCommand(hwnd, wParam, lParam);
|
|
break;
|
|
|
|
case WM_SYSCOLORCHANGE:
|
|
InvalidateStatusBar(hwnd);
|
|
break;
|
|
|
|
case WM_MENUSELECT:
|
|
tmpFOCID = FocusIDNTMenu;
|
|
if((HIWORD(wParam) == 0xFFFF) && (lParam == (LPARAM)NULL)) { // was menu closed?
|
|
SetStatusText(hwnd,FocusIDNT,TRUE);
|
|
tmpFOCID = FocusIDNTMenu = 0;
|
|
} else if(lParam == 0) { /* ignore these */
|
|
} else if(HIWORD(wParam) & MF_POPUP) {
|
|
if((HMENU)lParam == hSysMenuNT)
|
|
FocusIDNTMenu = M_SYSMENUNT;
|
|
} else {
|
|
if(LOWORD(wParam) != 0) /* separators have wparam of 0 */
|
|
FocusIDNTMenu = LOWORD(wParam);
|
|
if(FocusIDNTMenu == SC_CLOSE)
|
|
FocusIDNTMenu = SC_NTCLOSE;
|
|
}
|
|
if(tmpFOCID != FocusIDNTMenu)
|
|
SetStatusText(hwnd,FocusIDNTMenu,TRUE);
|
|
break;
|
|
|
|
case WM_SIZE:
|
|
GetClientRect(hwnd, &rc);
|
|
rc.top = rc.bottom - (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
if(rc.top < StatRecSizeNT.top) {
|
|
/* Window SHRANK, need to invalidate current status rect */
|
|
InvalidateRect(hwnd, (CONST RECT *)&rc,FALSE);
|
|
} else {
|
|
/* Window GREW, need to invalidate prev status rect */
|
|
InvalidateRect(hwnd, (CONST RECT *)&StatRecSizeNT,TRUE);
|
|
}
|
|
switch (wParam) {
|
|
case SIZEFULLSCREEN:
|
|
case SIZENORMAL:
|
|
NTWndSize = wParam;
|
|
SetMainWndSize(SBUNT);
|
|
/* NOTE FALL THROUGH */
|
|
default:
|
|
return(FALSE);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_VSCROLL:
|
|
if(NTScrollRange)
|
|
MainScroll(hwnd, (int)(LOWORD(wParam)), (int)(HIWORD(wParam)), 0, 0);
|
|
return(TRUE);
|
|
break;
|
|
|
|
case WM_PRIVCLOSECANCEL:
|
|
CompleteKey = FALSE;
|
|
EditHotKey = FALSE;
|
|
NewHotKey = FALSE;
|
|
lstrcpy((LPSTR)(PifNText->achAutoexecFile), szOldAutoexec);
|
|
SetDlgItemText(hwnd, IDI_AUTOEXEC, szOldAutoexec);
|
|
lstrcpy((LPSTR)(PifNText->achConfigFile), szOldConfig);
|
|
SetDlgItemText(hwnd, IDI_CONFIG, szOldConfig);
|
|
SetNTDlgItem(IDI_AUTOEXEC);
|
|
UpdatePifScreenNT(); /* DISCARD any changes in NT */
|
|
|
|
/* NOTE FALL THROUGH */
|
|
case WM_PRIVCLOSEOK:
|
|
bNTDlgOpen = FALSE;
|
|
ChngFlg = UpdatePifStruct();
|
|
if(ChngFlg)
|
|
FileChanged = ChngFlg;
|
|
hwndNTPifDlg = (HWND)NULL;
|
|
hSysMenuNT = (HMENU)NULL;
|
|
/*
|
|
* WHAT IS THIS RANDOM SetFocus DOING HERE??? Well the advanced
|
|
* window is WS_OVERLAPPED, and Windows CAN get all confused
|
|
* about where the Focus should go on Destroy with this style.
|
|
* The style probably should be changed to WS_POPUP, but that
|
|
* is a change that may cause other problems.
|
|
*/
|
|
SetFocus(hMainwnd);
|
|
DragAcceptFiles(hwnd,FALSE);
|
|
DestroyWindow(hwnd);
|
|
ReEnableAdvButton();
|
|
NTScrollRange = 0;
|
|
ModeAdvanced = FALSE;
|
|
return(TRUE);
|
|
break;
|
|
|
|
case WM_SYSCOMMAND:
|
|
switch (wParam) {
|
|
case SC_CLOSE:
|
|
SendMessage(hwnd,WM_PRIVCLOSECANCEL,0,0L);
|
|
return(TRUE);
|
|
|
|
default:
|
|
return(FALSE);
|
|
}
|
|
break;
|
|
|
|
case WM_PRIVGETSIZE: /* return correct size for client area */
|
|
*(long FAR *)lParam = GetNTDlgSize(hwnd);
|
|
break;
|
|
|
|
case WM_GETMINMAXINFO:
|
|
GetClientRect(hwnd, &StatRecSizeNT);
|
|
StatRecSizeNT.top = StatRecSizeNT.bottom - (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
size = GetNTDlgSize(hwnd);
|
|
width = LOWORD(size) +
|
|
(2 * GetSystemMetrics(SM_CXFRAME)) +
|
|
GetSystemMetrics(SM_CXVSCROLL) +
|
|
GetSystemMetrics(SM_CXBORDER);
|
|
height = HIWORD(size) +
|
|
GetSystemMetrics(SM_CYCAPTION) +
|
|
(2 * GetSystemMetrics(SM_CYFRAME));
|
|
ppnt3 = ppnt4 = (LPPOINT)lParam;
|
|
ppnt3 += 3;
|
|
ppnt4 += 4;
|
|
if(height > (ppnt4->y - (4 * SysCharHeight)))
|
|
height = ppnt4->y - (4 * SysCharHeight);
|
|
ppnt3->y = height;
|
|
ppnt3->x = width;
|
|
return(TRUE);
|
|
break;
|
|
|
|
case WM_DROPFILES:
|
|
DoOpenPifFile((HDROP)wParam);
|
|
break;
|
|
|
|
default:
|
|
return(FALSE);
|
|
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
int FAR PASCAL PifAdvWndProc(HWND hwnd, UINT message, WPARAM wParam, LONG lParam)
|
|
{
|
|
LPPOINT ppnt3;
|
|
LPPOINT ppnt4;
|
|
int width;
|
|
int height;
|
|
long size;
|
|
BOOL ChngFlg;
|
|
HMENU hmenu;
|
|
RECT rc;
|
|
int tmpFOCID;
|
|
|
|
switch (message) {
|
|
|
|
case WM_INITDIALOG:
|
|
if((hmenu = GetSystemMenu(hwnd,FALSE))) {
|
|
DeleteMenu(hmenu, SC_RESTORE, MF_BYCOMMAND);
|
|
DeleteMenu(hmenu, SC_SIZE, MF_BYCOMMAND);
|
|
DeleteMenu(hmenu, SC_MINIMIZE, MF_BYCOMMAND);
|
|
DeleteMenu(hmenu, SC_MAXIMIZE, MF_BYCOMMAND);
|
|
} else {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
}
|
|
hwndFocusAdv = (HWND)wParam;
|
|
bAdvDlgOpen = TRUE;
|
|
FocusIDAdv = GetDlgCtrlID((HWND)wParam);
|
|
SetStatusText(hwnd,FocusIDAdv,FALSE);
|
|
if(InitShWind) {
|
|
SetFocus((HWND)wParam); /* Give focus to wparam item */
|
|
SendMessage((HWND)wParam,EM_SETSEL,0,MAKELONG(0,0x7FFF));
|
|
return(FALSE);
|
|
} else {
|
|
return(FALSE); /* Do not set focus until init show */
|
|
}
|
|
break;
|
|
|
|
case WM_PAINT:
|
|
PaintStatus(hwnd);
|
|
return(FALSE);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
SetStatusText(hwnd,FocusIDAdv,TRUE);
|
|
FocusIDAdvMenu = 0;
|
|
DoDlgCommand(hwnd, wParam, lParam);
|
|
break;
|
|
|
|
case WM_SYSCOLORCHANGE:
|
|
InvalidateStatusBar(hwnd);
|
|
break;
|
|
|
|
case WM_MENUSELECT:
|
|
tmpFOCID = FocusIDAdvMenu;
|
|
if((HIWORD(wParam) == 0xFFFF) && (lParam == (LPARAM)NULL)) { // was menu closed?
|
|
SetStatusText(hwnd,FocusIDAdv,TRUE);
|
|
tmpFOCID = FocusIDAdvMenu = 0;
|
|
} else if(lParam == 0) { /* ignore these */
|
|
} else if(HIWORD(wParam) & MF_POPUP) {
|
|
if((HMENU)lParam == hSysMenuAdv)
|
|
FocusIDAdvMenu = M_SYSMENUADV;
|
|
} else {
|
|
if(LOWORD(wParam) != 0) /* separators have wparam of 0 */
|
|
FocusIDAdvMenu = LOWORD(wParam);
|
|
if(FocusIDAdvMenu == SC_CLOSE)
|
|
FocusIDAdvMenu = SC_CLOSEADV;
|
|
}
|
|
if(tmpFOCID != FocusIDAdvMenu)
|
|
SetStatusText(hwnd,FocusIDAdvMenu,TRUE);
|
|
break;
|
|
|
|
case WM_SIZE:
|
|
GetClientRect(hwnd, &rc);
|
|
rc.top = rc.bottom - (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
if(rc.top < StatRecSizeAdv.top) {
|
|
/* Window SHRANK, need to invalidate current status rect */
|
|
InvalidateRect(hwnd, (CONST RECT *)&rc,FALSE);
|
|
} else {
|
|
/* Window GREW, need to invalidate prev status rect */
|
|
InvalidateRect(hwnd, (CONST RECT *)&StatRecSizeAdv,TRUE);
|
|
}
|
|
switch (wParam) {
|
|
case SIZEFULLSCREEN:
|
|
case SIZENORMAL:
|
|
AdvWndSize = wParam;
|
|
SetMainWndSize(SBUADV);
|
|
/* NOTE FALL THROUGH */
|
|
default:
|
|
return(FALSE);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_VSCROLL:
|
|
if(AdvScrollRange)
|
|
MainScroll(hwnd, (int)(LOWORD(wParam)), (int)(HIWORD(wParam)), 0, 0);
|
|
return(TRUE);
|
|
break;
|
|
|
|
case WM_PRIVCLOSECANCEL:
|
|
CompleteKey = FALSE;
|
|
EditHotKey = FALSE;
|
|
NewHotKey = FALSE;
|
|
UpdatePifScreenAdv(); /* DISCARD any changes in advanced */
|
|
/* NOTE FALL THROUGH */
|
|
case WM_PRIVCLOSEOK:
|
|
bAdvDlgOpen = FALSE;
|
|
ChngFlg = UpdatePifStruct();
|
|
if(ChngFlg)
|
|
FileChanged = ChngFlg;
|
|
hwndAdvPifDlg = (HWND)NULL;
|
|
hSysMenuAdv = (HMENU)NULL;
|
|
/*
|
|
* WHAT IS THIS RANDOM SetFocus DOING HERE??? Well the advanced
|
|
* window is WS_OVERLAPPED, and Windows CAN get all confused
|
|
* about where the Focus should go on Destroy with this style.
|
|
* The style probably should be changed to WS_POPUP, but that
|
|
* is a change that may cause other problems.
|
|
*/
|
|
SetFocus(hMainwnd);
|
|
DragAcceptFiles(hwnd,FALSE);
|
|
DestroyWindow(hwnd);
|
|
ReEnableAdvButton();
|
|
AdvScrollRange = 0;
|
|
ModeAdvanced = FALSE;
|
|
return(TRUE);
|
|
break;
|
|
|
|
case WM_SYSCOMMAND:
|
|
switch (wParam) {
|
|
case SC_CLOSE:
|
|
SendMessage(hwnd,WM_PRIVCLOSECANCEL,0,0L);
|
|
return(TRUE);
|
|
|
|
default:
|
|
return(FALSE);
|
|
}
|
|
break;
|
|
|
|
case WM_PRIVGETSIZE: /* return correct size for client area */
|
|
*(long FAR *)lParam = GetAdvDlgSize(hwnd);
|
|
break;
|
|
|
|
case WM_GETMINMAXINFO:
|
|
GetClientRect(hwnd, &StatRecSizeAdv);
|
|
StatRecSizeAdv.top = StatRecSizeAdv.bottom - (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
size = GetAdvDlgSize(hwnd);
|
|
width = LOWORD(size) +
|
|
(2 * GetSystemMetrics(SM_CXFRAME)) +
|
|
GetSystemMetrics(SM_CXVSCROLL) +
|
|
GetSystemMetrics(SM_CXBORDER);
|
|
height = HIWORD(size) +
|
|
GetSystemMetrics(SM_CYCAPTION) +
|
|
(2 * GetSystemMetrics(SM_CYFRAME));
|
|
ppnt3 = ppnt4 = (LPPOINT)lParam;
|
|
ppnt3 += 3;
|
|
ppnt4 += 4;
|
|
if(height > (ppnt4->y - (4 * SysCharHeight)))
|
|
height = ppnt4->y - (4 * SysCharHeight);
|
|
ppnt3->y = height;
|
|
ppnt3->x = width;
|
|
return(TRUE);
|
|
break;
|
|
|
|
case WM_DROPFILES:
|
|
DoOpenPifFile((HDROP)wParam);
|
|
break;
|
|
|
|
default:
|
|
return(FALSE);
|
|
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
int FAR PASCAL PifWndProc(HWND hwnd, UINT message, WPARAM wParam, LONG lParam)
|
|
{
|
|
RECT rc2;
|
|
RECT rc3;
|
|
RECT rc4;
|
|
|
|
switch (message) {
|
|
|
|
case WM_INITDIALOG:
|
|
hwndFocusMain = (HWND)wParam;
|
|
FocusIDMain = GetDlgCtrlID((HWND)wParam);
|
|
SetStatusText(hMainwnd,FocusIDMain,TRUE);
|
|
if(InitShWind) {
|
|
SetFocus((HWND)wParam); /* Give focus to wparam item */
|
|
SendMessage((HWND)wParam,EM_SETSEL,0,MAKELONG(0,0x7FFF));
|
|
return(FALSE);
|
|
} else {
|
|
return(FALSE); /* Do not set focus until init show */
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
DoDlgCommand(hwnd, wParam, lParam);
|
|
break;
|
|
|
|
case WM_PRIVGETSIZE: /* return correct size for parent window client area */
|
|
GetWindowRect(hwnd,(LPRECT)&rc3);
|
|
if(CurrMode386) {
|
|
GetWindowRect(GetDlgItem(hwnd,IDI_BACK),(LPRECT)&rc4);
|
|
GetWindowRect(GetDlgItem(hwnd,IDI_EXIT),(LPRECT)&rc2);
|
|
} else {
|
|
GetWindowRect(GetDlgItem(hwnd,IDI_EPATH),(LPRECT)&rc4);
|
|
GetWindowRect(GetDlgItem(hwnd,IDI_ALTPRTSC),(LPRECT)&rc2);
|
|
}
|
|
*(long FAR *)lParam = MAKELONG((rc4.right - rc3.left) +
|
|
SysCharWidth,
|
|
(rc2.top-rc3.top) +
|
|
(rc2.bottom - rc2.top) +
|
|
((rc2.bottom - rc2.top)/3) +
|
|
(StatusPntData.dyStatus + StatusPntData.dyBorderx2));
|
|
if(!wParam) {
|
|
SetWindowPos(hwnd,
|
|
(HWND)NULL,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
|
|
}
|
|
break;
|
|
|
|
case WM_DROPFILES:
|
|
DoOpenPifFile((HDROP)wParam);
|
|
break;
|
|
|
|
default:
|
|
return(FALSE);
|
|
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
SwitchNT(HWND hwnd)
|
|
{
|
|
BOOL ChngFlg;
|
|
|
|
hwndFocusMain = hwndFocusAdv = hwndFocusNT = hwndFocus = (HWND)NULL;
|
|
if(ModeAdvanced) {
|
|
Disable386Advanced(hwndAdvPifDlg, hwndNTPifDlg);
|
|
}
|
|
else {
|
|
ChngFlg = UpdatePifStruct();
|
|
if(ChngFlg)
|
|
FileChanged = ChngFlg;
|
|
if(!bNTDlgOpen) {
|
|
EnableWindow(GetDlgItem(hwnd,IDI_NT),FALSE);
|
|
NTScrollRange = 0;
|
|
/*
|
|
NTClose = TRUE;
|
|
*/
|
|
hwndNTPifDlg = CreateDialog(hPifInstance,
|
|
MAKEINTRESOURCE(ID_PIFNTTEMPLT),
|
|
hMainwnd ,
|
|
(DLGPROC)lpfnNTPifWnd);
|
|
}
|
|
if(hwndNTPifDlg == (HWND)NULL) {
|
|
hwndNTPifDlg = (HWND)NULL;
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
Disable386Advanced(hwndAdvPifDlg, hwndNTPifDlg);
|
|
} else {
|
|
hSysMenuNT = GetSystemMenu(hwndNTPifDlg,FALSE);
|
|
DragAcceptFiles(hwndNTPifDlg,TRUE);
|
|
ModeAdvanced = TRUE;
|
|
SetMainTitle();
|
|
UpdatePifScreen();
|
|
hwndFocusMain = GetDlgItem(hwndPifDlg,IDI_ENAME);
|
|
FocusIDMain = IDI_ENAME;
|
|
SetMainWndSize(SBUSZNT);
|
|
SetStatusText(hMainwnd,FocusIDMain,TRUE);
|
|
}
|
|
}
|
|
if(hwndNTPifDlg) {
|
|
ShowWindow(hwndNTPifDlg, SW_SHOWNORMAL);
|
|
SendDlgItemMessage(hwndNTPifDlg,IDI_AUTOEXEC,EM_SETSEL,0,MAKELONG(0,0x7FFF));
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
|
|
SwitchAdvance386(HWND hwnd)
|
|
{
|
|
BOOL ChngFlg;
|
|
|
|
hwndFocusMain = hwndFocusAdv = hwndFocusNT = hwndFocus = (HWND)NULL;
|
|
if(ModeAdvanced) {
|
|
Disable386Advanced(hwndAdvPifDlg, hwndNTPifDlg);
|
|
} else {
|
|
ChngFlg = UpdatePifStruct();
|
|
if(ChngFlg)
|
|
FileChanged = ChngFlg;
|
|
if(!bAdvDlgOpen)
|
|
EnableWindow(GetDlgItem(hwnd,IDI_ADVANCED),FALSE);
|
|
AdvScrollRange = 0;
|
|
AdvClose = TRUE;
|
|
hwndAdvPifDlg = CreateDialog(hPifInstance,
|
|
MAKEINTRESOURCE(ID_PIF386ADVTEMPLT),
|
|
hMainwnd ,
|
|
(DLGPROC)lpfnAdvPifWnd);
|
|
if(hwndAdvPifDlg == (HWND)NULL) {
|
|
hwndAdvPifDlg = (HWND)NULL;
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
Disable386Advanced(hwndAdvPifDlg, hwndNTPifDlg);
|
|
} else {
|
|
hSysMenuAdv = GetSystemMenu(hwndAdvPifDlg,FALSE);
|
|
DragAcceptFiles(hwndAdvPifDlg,TRUE);
|
|
ModeAdvanced = TRUE;
|
|
SetMainTitle();
|
|
UpdatePifScreen();
|
|
hwndFocusMain = GetDlgItem(hwndPifDlg,IDI_ENAME);
|
|
FocusIDMain = IDI_ENAME;
|
|
SetMainWndSize(SBUSZADV);
|
|
SetStatusText(hMainwnd,FocusIDMain,TRUE);
|
|
}
|
|
}
|
|
if(hwndAdvPifDlg) {
|
|
ShowWindow(hwndAdvPifDlg, SW_SHOWNORMAL);
|
|
SendDlgItemMessage(hwndAdvPifDlg,IDI_BPRI,EM_SETSEL,0,MAKELONG(0,0x7FFF));
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
BOOL EnableMode286(HWND hwnd,BOOL showflg)
|
|
{
|
|
HMENU hMenu;
|
|
HWND hWndSv;
|
|
|
|
if(!Pif286ext30) {
|
|
if(!(Pif286ext30 = AllocInit286Ext30())) {
|
|
Warning(NOMODE286,MB_ICONEXCLAMATION | MB_OK);
|
|
return(FALSE);
|
|
}
|
|
}
|
|
/*
|
|
* if(!Pif286ext31) {
|
|
* if(!(Pif286ext31 = AllocInit286Ext31())) {
|
|
* Warning(NOMODE286,MB_ICONEXCLAMATION | MB_OK);
|
|
* return(FALSE);
|
|
* }
|
|
* }
|
|
*/
|
|
hwndFocusMain = hwndFocusAdv = hwndFocusNT = hwndFocus = (HWND)NULL;
|
|
if(hwndAdvPifDlg)
|
|
SendMessage(hwndAdvPifDlg,WM_PRIVCLOSEOK,0,0L);
|
|
if(hwndNTPifDlg)
|
|
SendMessage(hwndNTPifDlg,WM_PRIVCLOSEOK,0,0L);
|
|
if(hwndPifDlg) {
|
|
hWndSv = hwndPifDlg;
|
|
hwndPifDlg = (HWND)NULL;
|
|
DragAcceptFiles(hWndSv,FALSE);
|
|
DestroyWindow(hWndSv);
|
|
}
|
|
|
|
CurrMode386 = FALSE;
|
|
|
|
if(Pif386ext && !(Pif286ext30->PfW286Flags &
|
|
(fALTTABdis286 | fALTESCdis286 | fCTRLESCdis286 | fALTPRTSCdis286 | fPRTSCdis286))) {
|
|
if(Pif386ext->PfW386Flags & fALTTABdis)
|
|
Pif286ext30->PfW286Flags |= fALTTABdis286;
|
|
if(Pif386ext->PfW386Flags & fALTESCdis)
|
|
Pif286ext30->PfW286Flags |= fALTESCdis286;
|
|
if(Pif386ext->PfW386Flags & fCTRLESCdis)
|
|
Pif286ext30->PfW286Flags |= fCTRLESCdis286;
|
|
if(Pif386ext->PfW386Flags & fALTPRTSCdis)
|
|
Pif286ext30->PfW286Flags |= fALTPRTSCdis286;
|
|
if(Pif386ext->PfW386Flags & fPRTSCdis)
|
|
Pif286ext30->PfW286Flags |= fPRTSCdis286;
|
|
}
|
|
|
|
hwndPifDlg = CreateDialog(hPifInstance,
|
|
MAKEINTRESOURCE(ID_PIF286TEMPLATE),
|
|
hwnd,
|
|
(DLGPROC)lpfnPifWnd);
|
|
|
|
if(hwndPifDlg == (HWND)NULL) {
|
|
hwndPifDlg = (HWND)NULL;
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
return(FALSE);
|
|
} else {
|
|
DragAcceptFiles(hwndPifDlg,TRUE);
|
|
CheckMenuItem((hMenu = GetMenu(hwnd)),M_286,MF_BYCOMMAND + MF_CHECKED);
|
|
CheckMenuItem(hMenu,M_386,MF_BYCOMMAND + MF_UNCHECKED);
|
|
SetMainWndSize(SBUSZMAINADVNT);
|
|
SendDlgItemMessage(hwndPifDlg, IDI_ENAME, EM_LIMITTEXT, PIFSTARTLOCSIZE-1, 0L);
|
|
SendDlgItemMessage(hwndPifDlg, IDI_EPARM, EM_LIMITTEXT, PIFPARAMSSIZE-1, 0L);
|
|
SendDlgItemMessage(hwndPifDlg, IDI_EPATH, EM_LIMITTEXT, PIFDEFPATHSIZE-1, 0L);
|
|
SendDlgItemMessage(hwndPifDlg, IDI_ETITLE, EM_LIMITTEXT, PIFNAMESIZE, 0L);
|
|
UpdatePifScreen();
|
|
if(showflg) {
|
|
ShowWindow(hwndPifDlg, SW_SHOWNORMAL);
|
|
if(hwndAdvPifDlg)
|
|
ShowWindow(hwndAdvPifDlg, SW_SHOWNORMAL);
|
|
if(hwndNTPifDlg)
|
|
ShowWindow(hwndNTPifDlg, SW_SHOWNORMAL);
|
|
}
|
|
return(TRUE);
|
|
}
|
|
}
|
|
|
|
|
|
EnableMode386(HWND hwnd,BOOL showflg)
|
|
{
|
|
HMENU hMenu;
|
|
HWND hWndSv;
|
|
unsigned char buf[20];
|
|
unsigned char buf2[100];
|
|
unsigned char buf3[100];
|
|
unsigned char buf4[100];
|
|
|
|
if(!Pif386ext) {
|
|
if(!(Pif386ext = AllocInit386Ext())) {
|
|
Warning(NOMODE386,MB_ICONEXCLAMATION | MB_OK);
|
|
return(FALSE);
|
|
}
|
|
}
|
|
if(!PifNText) {
|
|
if(!(PifNText = AllocInitNTExt())) {
|
|
Warning(NOMODENT,MB_ICONEXCLAMATION | MB_OK);
|
|
return(FALSE);
|
|
}
|
|
}
|
|
hwndFocusMain = hwndFocusAdv = hwndFocusNT = hwndFocus = (HWND)NULL;
|
|
if(hwndAdvPifDlg)
|
|
SendMessage(hwndAdvPifDlg,WM_PRIVCLOSEOK,0,0L);
|
|
if(hwndNTPifDlg)
|
|
SendMessage(hwndNTPifDlg,WM_PRIVCLOSEOK,0,0L);
|
|
if(hwndPifDlg) {
|
|
hWndSv = hwndPifDlg;
|
|
hwndPifDlg = (HWND)NULL;
|
|
DragAcceptFiles(hWndSv,FALSE);
|
|
DestroyWindow(hWndSv);
|
|
}
|
|
|
|
CurrMode386 = TRUE;
|
|
ModeAdvanced = FALSE;
|
|
|
|
if(Pif286ext30 && !(Pif386ext->PfW386Flags &
|
|
(fALTTABdis | fALTESCdis | fCTRLESCdis | fALTPRTSCdis | fPRTSCdis))) {
|
|
if(Pif286ext30->PfW286Flags & fALTTABdis286)
|
|
Pif386ext->PfW386Flags |= fALTTABdis;
|
|
if(Pif286ext30->PfW286Flags & fALTESCdis286)
|
|
Pif386ext->PfW386Flags |= fALTESCdis;
|
|
if(Pif286ext30->PfW286Flags & fCTRLESCdis286)
|
|
Pif386ext->PfW386Flags |= fCTRLESCdis;
|
|
if(Pif286ext30->PfW286Flags & fALTPRTSCdis286)
|
|
Pif386ext->PfW386Flags |= fALTPRTSCdis;
|
|
if(Pif286ext30->PfW286Flags & fPRTSCdis286)
|
|
Pif386ext->PfW386Flags |= fPRTSCdis;
|
|
|
|
}
|
|
|
|
hwndPifDlg = CreateDialog(hPifInstance,
|
|
MAKEINTRESOURCE(ID_PIF386TEMPLATE),
|
|
hwnd ,
|
|
(DLGPROC)lpfnPifWnd);
|
|
|
|
if(hwndPifDlg == (HWND)NULL) {
|
|
hwndPifDlg = (HWND)NULL;
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
return(FALSE);
|
|
} else {
|
|
DragAcceptFiles(hwndPifDlg,TRUE);
|
|
CheckMenuItem((hMenu = GetMenu(hwnd)),M_386,MF_BYCOMMAND + MF_CHECKED);
|
|
CheckMenuItem(hMenu,M_286,MF_BYCOMMAND + MF_UNCHECKED);
|
|
if(LoadString(hPifInstance, WININISECT, (LPSTR)buf, sizeof(buf)) &&
|
|
LoadString(hPifInstance, WININIADV, (LPSTR)buf2, sizeof(buf2)) &&
|
|
LoadString(hPifInstance, WININION, (LPSTR)buf3, sizeof(buf3))) {
|
|
GetProfileString((LPSTR)buf,(LPSTR)buf2,(LPSTR)"",(LPSTR)buf4,sizeof(buf4));
|
|
if(!lstrcmp(AnsiUpper((LPSTR)buf4),AnsiUpper((LPSTR)buf3)))
|
|
ModeAdvanced = TRUE;
|
|
}
|
|
if(ModeAdvanced) {
|
|
EnableWindow(GetDlgItem(hwndPifDlg,IDI_ADVANCED),FALSE);
|
|
AdvScrollRange = 0;
|
|
AdvClose = TRUE;
|
|
hwndAdvPifDlg = CreateDialog(hPifInstance,
|
|
MAKEINTRESOURCE(ID_PIF386ADVTEMPLT),
|
|
hwnd ,
|
|
(DLGPROC)lpfnAdvPifWnd);
|
|
if(hwndAdvPifDlg == (HWND)NULL) {
|
|
hwndAdvPifDlg = (HWND)NULL;
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
ReEnableAdvButton();
|
|
return(FALSE);
|
|
}
|
|
hSysMenuAdv = GetSystemMenu(hwndAdvPifDlg,FALSE);
|
|
DragAcceptFiles(hwndAdvPifDlg,TRUE);
|
|
|
|
EnableWindow(GetDlgItem(hwndPifDlg,IDI_NT),FALSE);
|
|
NTScrollRange = 0;
|
|
/*
|
|
NTClose = TRUE;
|
|
*/
|
|
hwndNTPifDlg = CreateDialog(hPifInstance,
|
|
MAKEINTRESOURCE(ID_PIFNTTEMPLT),
|
|
hwnd ,
|
|
(DLGPROC)lpfnNTPifWnd);
|
|
if(hwndNTPifDlg == (HWND)NULL) {
|
|
hwndNTPifDlg = (HWND)NULL;
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
ReEnableAdvButton();
|
|
return(FALSE);
|
|
}
|
|
hSysMenuNT = GetSystemMenu(hwndNTPifDlg,FALSE);
|
|
DragAcceptFiles(hwndNTPifDlg,TRUE);
|
|
SetMainTitle();
|
|
} else {
|
|
ReEnableAdvButton();
|
|
}
|
|
SetMainWndSize(SBUSZMAINADVNT);
|
|
SendDlgItemMessage(hwndPifDlg, IDI_ENAME, EM_LIMITTEXT, PIFSTARTLOCSIZE-1, 0L);
|
|
SendDlgItemMessage(hwndPifDlg, IDI_EPARM, EM_LIMITTEXT, PIFPARAMSSIZE-1, 0L);
|
|
SendDlgItemMessage(hwndPifDlg, IDI_EPATH, EM_LIMITTEXT, PIFDEFPATHSIZE-1, 0L);
|
|
SendDlgItemMessage(hwndPifDlg, IDI_ETITLE, EM_LIMITTEXT, PIFNAMESIZE, 0L);
|
|
UpdatePifScreen();
|
|
if(showflg) {
|
|
ShowWindow(hwndPifDlg, SW_SHOWNORMAL);
|
|
if(hwndAdvPifDlg)
|
|
ShowWindow(hwndAdvPifDlg, SW_SHOWNORMAL);
|
|
if(hwndNTPifDlg)
|
|
ShowWindow(hwndNTPifDlg, SW_SHOWNORMAL);
|
|
}
|
|
return(TRUE);
|
|
}
|
|
}
|
|
|
|
|
|
DoPifCommand(HWND hwnd,WPARAM wParam,LONG lParam)
|
|
{
|
|
int i, cmd;
|
|
unsigned char *pch;
|
|
unsigned char *pchBuf;
|
|
HWND hwnd2;
|
|
BOOL ChngFlg;
|
|
|
|
cmd = LOWORD(wParam);
|
|
|
|
switch (cmd) {
|
|
case M_NEW:
|
|
if (MaybeSaveFile()) {
|
|
InitPifStruct();
|
|
UpdatePifScreen();
|
|
UpdatePifStruct();
|
|
FileChanged = FALSE;
|
|
ofReopen.szPathName[0] = 0;
|
|
CurPifFile[0] = 0;
|
|
|
|
PifFile->id = 0; /* compute check sum */
|
|
pch = (PUCHAR)PifFile->name;
|
|
i = PIFSIZE;
|
|
while (i--)
|
|
PifFile->id += *pch++;
|
|
SendMessage(hwndPifDlg,WM_NEXTDLGCTL,
|
|
(WPARAM)(hwnd2 = GetDlgItem(hwndPifDlg,IDI_ENAME)),1L);
|
|
SetFocus(hwnd2);
|
|
SetMainTitle();
|
|
}
|
|
break;
|
|
|
|
case M_OPEN:
|
|
DoOpenPifFile((HDROP)NULL);
|
|
break;
|
|
|
|
case M_SAVE:
|
|
if (CurPifFile[0]) {
|
|
pchBuf = CurPifFile;
|
|
goto Save;
|
|
}
|
|
case M_SAVEAS:
|
|
SaveAs:
|
|
if(pchBuf = PutUpDB(DTSAVE)) {
|
|
Save:
|
|
HourGlass(TRUE);
|
|
i = SavePifFile(pchBuf, cmd);
|
|
if (pchBuf != CurPifFile) {
|
|
LocalFree((HANDLE)pchBuf);
|
|
}
|
|
HourGlass(FALSE);
|
|
if (i == SAVERETRY)
|
|
goto SaveAs;
|
|
}
|
|
SetMainTitle();
|
|
break;
|
|
|
|
case M_INDXHELP:
|
|
if(CurrMode386) {
|
|
if(ModeAdvanced) {
|
|
if(hwnd == hwndAdvPifDlg) {
|
|
DoHelp(IDXID_386AHELP,IDXID_386AHELP);
|
|
}
|
|
else {
|
|
DoHelp(IDXID_NTHELP,IDXID_NTHELP);
|
|
}
|
|
} else {
|
|
DoHelp(IDXID_386HELP,IDXID_386HELP);
|
|
}
|
|
} else {
|
|
DoHelp(IDXID_286HELP,IDXID_286HELP);
|
|
}
|
|
break;
|
|
|
|
case M_HELPHELP:
|
|
case M_286HELP:
|
|
case M_386HELP:
|
|
case M_386AHELP:
|
|
case M_NTHELP:
|
|
case M_SHELP:
|
|
DoHelp(cmd,0);
|
|
break;
|
|
|
|
case M_AHELP:
|
|
DoHelp(0,0);
|
|
break;
|
|
|
|
case M_ABOUT:
|
|
PutUpDB(DTABOUT);
|
|
break;
|
|
|
|
case M_286:
|
|
if(CurrMode386) {
|
|
if(SysMode386) {
|
|
if(Warning(IS286,MB_ICONASTERISK | MB_OKCANCEL) == IDCANCEL) {
|
|
break;
|
|
}
|
|
}
|
|
ChngFlg = UpdatePifStruct();
|
|
if(ChngFlg)
|
|
FileChanged = ChngFlg;
|
|
if(!DoFieldsWork(FALSE))
|
|
break;
|
|
HourGlass(TRUE);
|
|
if(!EnableMode286(hwnd,TRUE))
|
|
SendMessage(hwnd,WM_CLOSE,0,0);
|
|
HourGlass(FALSE);
|
|
}
|
|
break;
|
|
|
|
case M_386:
|
|
if(!CurrMode386) {
|
|
if(!SysMode386) {
|
|
if(Warning(IS386,MB_ICONASTERISK | MB_OKCANCEL) == IDCANCEL) {
|
|
break;
|
|
}
|
|
}
|
|
ChngFlg = UpdatePifStruct();
|
|
if(ChngFlg)
|
|
FileChanged = ChngFlg;
|
|
if(!DoFieldsWork(FALSE))
|
|
break;
|
|
HourGlass(TRUE);
|
|
if(!EnableMode386(hwnd,TRUE))
|
|
SendMessage(hwnd,WM_CLOSE,0,0);
|
|
HourGlass(FALSE);
|
|
}
|
|
break;
|
|
|
|
case M_EXIT:
|
|
PostMessage(hwnd, WM_CLOSE, 0, 0L);
|
|
break;
|
|
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
long FAR PASCAL PifMainWndProc(HWND hwnd, UINT message, WPARAM wParam, LONG lParam)
|
|
{
|
|
LPPOINT ppnt3;
|
|
LPPOINT ppnt4;
|
|
int width;
|
|
int height;
|
|
int tmpFOCID;
|
|
long size;
|
|
RECT rc;
|
|
HWND Hparsav;
|
|
|
|
switch (message) {
|
|
|
|
|
|
case WM_SETFOCUS:
|
|
if(hwndFocusMain) {
|
|
/*
|
|
* How can hwndFocusMain != 0 but hwndPifDlg == 0, I hear you
|
|
* ask. Well it's due to a message race. Windows has sent the
|
|
* WM_INITDIALOG to hwndPifDlg which sets hwndFocusMain, but
|
|
* the CreateDialog call has not actually returned yet so
|
|
* hwndPifDlg is still 0.
|
|
*
|
|
*/
|
|
if(hwndPifDlg)
|
|
SendMessage(hwndPifDlg,WM_NEXTDLGCTL,(WPARAM)hwndFocusMain,1L);
|
|
SetFocus(hwndFocusMain);
|
|
}
|
|
return(TRUE);
|
|
|
|
case WM_PAINT:
|
|
PaintStatus(hwnd);
|
|
goto DoDef;
|
|
break;
|
|
|
|
case WM_MENUSELECT:
|
|
tmpFOCID = FocusIDMainMenu;
|
|
if((HIWORD(wParam) == 0xFFFF) && (lParam == (LPARAM)NULL)) { // was menu closed?
|
|
SetStatusText(hwnd,FocusIDMain,TRUE);
|
|
tmpFOCID = FocusIDMainMenu = 0;
|
|
} else if(lParam == 0) { /* ignore these */
|
|
} else if(HIWORD(wParam) & MF_POPUP) {
|
|
if((HMENU)lParam == hSysMenuMain)
|
|
FocusIDMainMenu = M_SYSMENUMAIN;
|
|
else if((HMENU)lParam == hFileMenu)
|
|
FocusIDMainMenu = M_FILEMENU;
|
|
else if((HMENU)lParam == hModeMenu)
|
|
FocusIDMainMenu = M_MODEMENU;
|
|
else if((HMENU)lParam == hHelpMenu)
|
|
FocusIDMainMenu = M_HELPMENU;
|
|
} else {
|
|
if(LOWORD(wParam) != 0) /* separators have wparam of 0 */
|
|
FocusIDMainMenu = LOWORD(wParam);
|
|
}
|
|
if(tmpFOCID != FocusIDMainMenu)
|
|
SetStatusText(hwnd,FocusIDMainMenu,TRUE);
|
|
goto DoDef;
|
|
break;
|
|
|
|
case WM_QUERYENDSESSION:
|
|
if(DoingMsg) {
|
|
Hparsav = hParentWnd;
|
|
hParentWnd = 0;
|
|
Warning(errNOEND,MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
|
|
hParentWnd = Hparsav;
|
|
return(FALSE);
|
|
}
|
|
case WM_CLOSE:
|
|
if (MaybeSaveFile()) {
|
|
if (message == WM_CLOSE) {
|
|
if(hwndHelpDlgParent) {
|
|
WinHelp(hwndHelpDlgParent,(LPSTR)PIFHELPFILENAME,HELP_QUIT,(DWORD)NULL);
|
|
hwndHelpDlgParent = (HWND)NULL;
|
|
}
|
|
DragAcceptFiles(hwnd,FALSE);
|
|
DestroyWindow(hwnd);
|
|
}
|
|
return(TRUE);
|
|
}
|
|
return(FALSE);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
SetStatusText(hwnd,FocusIDMain,TRUE);
|
|
tmpFOCID = FocusIDMainMenu = 0;
|
|
DoPifCommand(hwnd,wParam,lParam);
|
|
break;
|
|
|
|
case WM_VSCROLL:
|
|
if(MainScrollRange)
|
|
MainScroll(hwnd, (int)(LOWORD(wParam)), (int)(HIWORD(wParam)), 0, 0);
|
|
break;
|
|
|
|
case WM_SYSCOLORCHANGE:
|
|
InvalidateStatusBar(hwnd);
|
|
break;
|
|
|
|
case WM_SIZE:
|
|
GetClientRect(hwnd, &rc);
|
|
rc.top = rc.bottom - (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
if(rc.top < StatRecSizeMain.top) {
|
|
/* Window SHRANK, need to invalidate current status rect */
|
|
InvalidateRect(hwnd, (CONST RECT *)&rc,FALSE);
|
|
} else {
|
|
/* Window GREW, need to invalidate prev status rect */
|
|
InvalidateRect(hwnd, (CONST RECT *)&StatRecSizeMain,TRUE);
|
|
}
|
|
switch (wParam) {
|
|
case SIZEFULLSCREEN:
|
|
case SIZENORMAL:
|
|
MainWndSize = wParam;
|
|
SetMainWndSize(SBUMAIN);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_GETMINMAXINFO:
|
|
if(!hwndPifDlg)
|
|
goto DoDef;
|
|
GetClientRect(hwnd, &StatRecSizeMain);
|
|
StatRecSizeMain.top = StatRecSizeMain.bottom - (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
SendMessage(hwndPifDlg,WM_PRIVGETSIZE,1,(LONG)(long FAR *)&size);
|
|
width = LOWORD(size) +
|
|
(2 * GetSystemMetrics(SM_CXFRAME)) +
|
|
GetSystemMetrics(SM_CXVSCROLL) +
|
|
GetSystemMetrics(SM_CXBORDER);
|
|
height = HIWORD(size) +
|
|
GetSystemMetrics(SM_CYCAPTION) +
|
|
GetSystemMetrics(SM_CYMENU) +
|
|
(2 * GetSystemMetrics(SM_CYFRAME));
|
|
ppnt3 = ppnt4 = (LPPOINT)lParam;
|
|
ppnt3 += 3;
|
|
ppnt4 += 4;
|
|
if(height > (ppnt4->y - (4 * SysCharHeight)))
|
|
height = ppnt4->y - (4 * SysCharHeight);
|
|
ppnt3->y = height;
|
|
ppnt3->x = width;
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
if(HotKyFnt) {
|
|
DeleteObject((HGDIOBJ)HotKyFnt);
|
|
HotKyFnt = (HFONT)NULL;
|
|
}
|
|
if(StatusPntData.hFontStatus) {
|
|
DeleteObject(StatusPntData.hFontStatus);
|
|
StatusPntData.hFontStatus = (HGDIOBJ)NULL;
|
|
}
|
|
PostQuitMessage(0);
|
|
break;
|
|
|
|
case WM_DROPFILES:
|
|
DoOpenPifFile((HDROP)wParam);
|
|
break;
|
|
|
|
/* this must be just before the default section */
|
|
case WM_SYSCOMMAND:
|
|
DoDef:
|
|
default:
|
|
return(DefWindowProc(hwnd, message, wParam, lParam));
|
|
}
|
|
return(TRUE);
|
|
|
|
}
|
|
|
|
|
|
AdjustFocusCtrl(HWND hwnd)
|
|
{
|
|
RECT rc;
|
|
RECT rc2;
|
|
POINT cTLpt;
|
|
POINT cLRpt;
|
|
int i;
|
|
int tmpFOCID;
|
|
HWND tmpFocWnd;
|
|
|
|
if(hwnd == hwndAdvPifDlg) {
|
|
if(!(tmpFocWnd = hwndFocusAdv))
|
|
return(TRUE);
|
|
} else if(hwnd == hwndNTPifDlg) {
|
|
if(!(tmpFocWnd = hwndFocusNT))
|
|
return(TRUE);
|
|
} else {
|
|
if(!(tmpFocWnd = hwndFocusMain))
|
|
return(TRUE);
|
|
}
|
|
for(i = 0; i < 20; i++) {
|
|
if((hwnd == hwndAdvPifDlg) || (hwnd == hwndNTPifDlg)) {
|
|
GetWindowRect(tmpFocWnd,(LPRECT)&rc2);
|
|
GetWindowRect(hwnd,(LPRECT)&rc);
|
|
rc.bottom -= GetSystemMetrics(SM_CYFRAME) + (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
rc.top += GetSystemMetrics(SM_CYFRAME) +
|
|
GetSystemMetrics(SM_CYCAPTION);
|
|
} else {
|
|
GetClientRect(hMainwnd,(LPRECT)&rc);
|
|
cTLpt.x = rc.left;
|
|
cTLpt.y = rc.top;
|
|
cLRpt.x = rc.right;
|
|
cLRpt.y = rc.bottom;
|
|
ClientToScreen(hMainwnd,(LPPOINT)&cTLpt);
|
|
ClientToScreen(hMainwnd,(LPPOINT)&cLRpt);
|
|
rc.left = cTLpt.x;
|
|
rc.top = cTLpt.y;
|
|
rc.right = cLRpt.x;
|
|
rc.bottom = cLRpt.y - (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
GetWindowRect(tmpFocWnd,(LPRECT)&rc2);
|
|
}
|
|
if((rc2.top >= rc.top) && (rc2.bottom <= rc.bottom)) {
|
|
if(hwnd == hwndAdvPifDlg) {
|
|
if(tmpFocWnd == hwndFocusAdv)
|
|
return(TRUE);
|
|
hwndFocus = hwndFocusAdv = tmpFocWnd;
|
|
tmpFOCID = FocusIDAdv;
|
|
FocusID = FocusIDAdv = GetDlgCtrlID(hwndFocusAdv);
|
|
if(tmpFOCID != FocusIDAdv)
|
|
SetStatusText(hwndAdvPifDlg,FocusIDAdv,TRUE);
|
|
} else if(hwnd == hwndNTPifDlg) {
|
|
if(tmpFocWnd == hwndFocusNT)
|
|
return(TRUE);
|
|
hwndFocus = hwndFocusNT = tmpFocWnd;
|
|
tmpFOCID = FocusIDNT;
|
|
FocusID = FocusIDNT = GetDlgCtrlID(hwndFocusNT);
|
|
if(tmpFOCID != FocusIDNT)
|
|
SetStatusText(hwndNTPifDlg,FocusIDNT,TRUE);
|
|
} else {
|
|
if(tmpFocWnd == hwndFocusMain)
|
|
return(TRUE);
|
|
hwndFocus = hwndFocusMain = tmpFocWnd;
|
|
tmpFOCID = FocusIDMain;
|
|
FocusID = FocusIDMain = GetDlgCtrlID(hwndFocusMain);
|
|
if(tmpFOCID != FocusIDMain)
|
|
SetStatusText(hMainwnd,FocusIDMain,TRUE);
|
|
}
|
|
SendMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)tmpFocWnd,1L);
|
|
SetFocus(tmpFocWnd);
|
|
return(TRUE);
|
|
} else if (rc2.top < rc.top) {
|
|
tmpFocWnd = GetNextDlgTabItem(hwnd,tmpFocWnd,0);
|
|
} else {
|
|
tmpFocWnd = GetNextDlgTabItem(hwnd,tmpFocWnd,1);
|
|
}
|
|
}
|
|
if(hwnd == hwndAdvPifDlg) {
|
|
if(tmpFocWnd == hwndFocusAdv)
|
|
return(TRUE);
|
|
hwndFocus = hwndFocusAdv = tmpFocWnd;
|
|
tmpFOCID = FocusIDAdv;
|
|
FocusID = FocusIDAdv = GetDlgCtrlID(hwndFocusAdv);
|
|
if(tmpFOCID != FocusIDAdv)
|
|
SetStatusText(hwndAdvPifDlg,FocusIDAdv,TRUE);
|
|
} else if(hwnd == hwndNTPifDlg) {
|
|
if(tmpFocWnd == hwndFocusNT)
|
|
return(TRUE);
|
|
hwndFocus = hwndFocusNT = tmpFocWnd;
|
|
tmpFOCID = FocusIDNT;
|
|
FocusID = FocusIDNT = GetDlgCtrlID(hwndFocusNT);
|
|
if(tmpFOCID != FocusIDNT)
|
|
SetStatusText(hwndNTPifDlg,FocusIDNT,TRUE);
|
|
} else {
|
|
if(tmpFocWnd == hwndFocusMain)
|
|
return(TRUE);
|
|
hwndFocus = hwndFocusMain = tmpFocWnd;
|
|
tmpFOCID = FocusIDMain;
|
|
FocusID = FocusIDMain = GetDlgCtrlID(hwndFocusMain);
|
|
if(tmpFOCID != FocusIDMain)
|
|
SetStatusText(hMainwnd,FocusIDMain,TRUE);
|
|
}
|
|
SendMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)tmpFocWnd,1L);
|
|
SetFocus(tmpFocWnd);
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
MainScrollTrack(HWND hwnd,int cmd,int mindistance)
|
|
{
|
|
int *ScrollLineSz;
|
|
|
|
if(hwnd == hwndAdvPifDlg) {
|
|
ScrollLineSz = &AdvScrollLineSz;
|
|
} else if(hwnd == hwndNTPifDlg) {
|
|
ScrollLineSz = &NTScrollLineSz;
|
|
} else {
|
|
ScrollLineSz = &MainScrollLineSz;
|
|
}
|
|
|
|
if(mindistance <= *ScrollLineSz) {
|
|
MainScroll(hwnd,cmd,0,0,0);
|
|
} else {
|
|
MainScroll(hwnd,cmd,0,
|
|
(mindistance + (2* *ScrollLineSz) - 1) / *ScrollLineSz,
|
|
0);
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
MainScroll(HWND hwnd, int cmd, int pos, int multiln, int callflag)
|
|
{
|
|
|
|
int oldScrollPos;
|
|
int newScrollPos;
|
|
int *ScrollRange;
|
|
int *ScrollLineSz;
|
|
int *WndLines;
|
|
int *MaxNeg;
|
|
RECT rc2;
|
|
|
|
if(hwnd == hwndAdvPifDlg) {
|
|
ScrollRange = &AdvScrollRange;
|
|
ScrollLineSz = &AdvScrollLineSz;
|
|
WndLines = &AdvWndLines;
|
|
MaxNeg = &MaxAdvNeg;
|
|
} else if(hwnd == hwndNTPifDlg) {
|
|
ScrollRange = &NTScrollRange;
|
|
ScrollLineSz = &NTScrollLineSz;
|
|
WndLines = &NTWndLines;
|
|
MaxNeg = &MaxNTNeg;
|
|
} else {
|
|
ScrollRange = &MainScrollRange;
|
|
ScrollLineSz = &MainScrollLineSz;
|
|
WndLines = &MainWndLines;
|
|
MaxNeg = &MaxMainNeg;
|
|
}
|
|
|
|
newScrollPos = oldScrollPos = GetScrollPos(hwnd,SB_VERT);
|
|
|
|
switch (cmd) {
|
|
case SB_LINEUP:
|
|
if (oldScrollPos)
|
|
if(multiln)
|
|
newScrollPos -= min(oldScrollPos,multiln);
|
|
else
|
|
newScrollPos--;
|
|
break;
|
|
|
|
case SB_LINEDOWN:
|
|
if (oldScrollPos < *ScrollRange)
|
|
if(multiln)
|
|
newScrollPos += min((*ScrollRange -
|
|
oldScrollPos),multiln);
|
|
else
|
|
newScrollPos++;
|
|
break;
|
|
|
|
case SB_PAGEUP:
|
|
newScrollPos -= *WndLines;
|
|
if ( newScrollPos < 0)
|
|
newScrollPos = 0;
|
|
break;
|
|
|
|
case SB_PAGEDOWN:
|
|
newScrollPos += *WndLines;
|
|
if (newScrollPos > *ScrollRange)
|
|
newScrollPos = *ScrollRange;
|
|
break;
|
|
|
|
case SB_THUMBPOSITION:
|
|
SetScrollPos(hwnd, SB_VERT, pos, TRUE);
|
|
return(TRUE);
|
|
|
|
case SB_THUMBTRACK:
|
|
newScrollPos = pos;
|
|
break;
|
|
|
|
case SB_TOP:
|
|
if (!callflag && GetKeyState(VK_CONTROL) >= 0)
|
|
return(TRUE); /* top of data must be Ctrl+Home */
|
|
newScrollPos = 0;
|
|
break;
|
|
|
|
case SB_BOTTOM:
|
|
if (!callflag && GetKeyState(VK_CONTROL) >= 0)
|
|
return(TRUE); /* end of data must be Ctrl+End */
|
|
newScrollPos = *ScrollRange;
|
|
break;
|
|
}
|
|
if (newScrollPos != oldScrollPos) {
|
|
if (cmd != SB_THUMBTRACK)
|
|
SetScrollPos(hwnd, SB_VERT, newScrollPos, TRUE);
|
|
newScrollPos = min((newScrollPos * *ScrollLineSz),*MaxNeg);
|
|
oldScrollPos = min((oldScrollPos * *ScrollLineSz),*MaxNeg);
|
|
GetClientRect(hwnd,(LPRECT)&rc2);
|
|
if((hwnd == hwndAdvPifDlg) || (hwnd == hwndNTPifDlg)) {
|
|
ScrollWindow(hwnd,
|
|
0,
|
|
oldScrollPos-newScrollPos,
|
|
(CONST RECT *)NULL,
|
|
(CONST RECT *)NULL);
|
|
UpdateWindow(hwnd);
|
|
AdjustFocusCtrl(hwnd);
|
|
} else {
|
|
SetWindowPos(hwndPifDlg,
|
|
(HWND)NULL,
|
|
0,
|
|
-newScrollPos,
|
|
rc2.right - rc2.left,
|
|
rc2.bottom - rc2.top + newScrollPos -
|
|
(StatusPntData.dyStatus + StatusPntData.dyBorderx2),
|
|
SWP_NOZORDER | SWP_NOACTIVATE);
|
|
UpdateWindow(hwndPifDlg);
|
|
AdjustFocusCtrl(hwndPifDlg);
|
|
}
|
|
InvalidateStatusBar(hwnd);
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
DoHkeyCaret(HWND hwnd)
|
|
{
|
|
HDC hdc;
|
|
HFONT hfont;
|
|
SIZE size;
|
|
|
|
if(!(hdc = GetDC(hwnd))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
return(FALSE);
|
|
}
|
|
if(HotKyFnt)
|
|
hfont = (HFONT)SelectObject(hdc,(HGDIOBJ)HotKyFnt);
|
|
GetTextExtentPoint(hdc,(LPSTR)CurrHotKeyTxt,CurrHotKeyTxtLen, &size);
|
|
SetCaretPos(size.cx+4,1);
|
|
if(HotKyFnt && hfont)
|
|
SelectObject(hdc,(HGDIOBJ)hfont);
|
|
ReleaseDC(hwnd,hdc);
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
/*
|
|
*
|
|
* This is the Windows Proc for the private Hot Key Control in
|
|
* the WIN386 dialog box
|
|
*
|
|
*/
|
|
long FAR PASCAL PifHotKyWndProc(HWND hwnd, UINT message, WPARAM wParam, LONG lParam)
|
|
{
|
|
PAINTSTRUCT ps;
|
|
HFONT hfont;
|
|
DWORD txtcolor;
|
|
|
|
switch (message) {
|
|
|
|
case WM_SETFOCUS:
|
|
if(HotKyFntHgt)
|
|
CreateCaret(hwnd,NULL,0,HotKyFntHgt);
|
|
else
|
|
CreateCaret(hwnd,NULL,0,SysCharHeight);
|
|
DoHkeyCaret(hwnd);
|
|
ShowCaret(hwnd);
|
|
break;
|
|
|
|
case WM_KILLFOCUS:
|
|
/* ChangeHotKey(); */
|
|
DestroyCaret();
|
|
break;
|
|
|
|
case WM_SYSKEYDOWN:
|
|
case WM_KEYDOWN:
|
|
switch (wParam) {
|
|
case VK_BACK:
|
|
if(GetKeyState(VK_SHIFT) & 0x8000) {
|
|
InMemHotKeyScan = 0;
|
|
InMemHotKeyShVal = 0;
|
|
InMemHotKeyShMsk = 0;
|
|
NewHotKey = TRUE;
|
|
UndoAdvClose();
|
|
CompleteKey = FALSE;
|
|
EditHotKey = FALSE;
|
|
if(!LoadString(hPifInstance,
|
|
NONE,
|
|
(LPSTR)CurrHotKeyTxt,
|
|
sizeof(CurrHotKeyTxt))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
}
|
|
} else {
|
|
CompleteKey = FALSE;
|
|
EditHotKey = TRUE;
|
|
NewHotKey = TRUE;
|
|
CurrHotKeyTxt[0] = '\0';
|
|
}
|
|
SetHotKeyLen();
|
|
InvalidateRect(hwnd,(CONST RECT *)NULL,TRUE);
|
|
DoHkeyCaret(hwnd);
|
|
break;
|
|
|
|
case VK_RETURN:
|
|
if(!(GetKeyState(VK_SHIFT) & 0x8000) &&
|
|
!(GetKeyState(VK_MENU) & 0x8000) &&
|
|
!(GetKeyState(VK_CONTROL) & 0x8000)) {
|
|
PostMessage(hwndAdvPifDlg,WM_COMMAND,IDOK,0L);
|
|
} else {
|
|
CompleteKey = FALSE;
|
|
EditHotKey = FALSE;
|
|
NewHotKey = FALSE;
|
|
SetHotKeyTextFromInMem();
|
|
DoHkeyCaret(hwnd);
|
|
return(DefWindowProc(hwnd, message, wParam, lParam));
|
|
}
|
|
break;
|
|
|
|
case VK_TAB:
|
|
if(GetKeyState(VK_MENU) & 0x8000) {
|
|
CompleteKey = FALSE;
|
|
EditHotKey = FALSE;
|
|
NewHotKey = FALSE;
|
|
SetHotKeyTextFromInMem();
|
|
DoHkeyCaret(hwnd);
|
|
} else {
|
|
ChangeHotKey();
|
|
DoHkeyCaret(hwnd);
|
|
}
|
|
return(DefWindowProc(hwnd, message, wParam, lParam));
|
|
break;
|
|
|
|
case VK_CONTROL: /* Add modifier */
|
|
case VK_MENU:
|
|
if(!EditHotKey) {
|
|
StartHotKey:
|
|
CompleteKey = FALSE;
|
|
EditHotKey = TRUE;
|
|
CurrHotKeyTxt[0] = '\0';
|
|
SetHotKeyLen();
|
|
}
|
|
SetHotKey:
|
|
SetHotKeyState(wParam,lParam);
|
|
InvalidateRect(hwnd,(CONST RECT *)NULL,TRUE);
|
|
DoHkeyCaret(hwnd);
|
|
UndoAdvClose();
|
|
break;
|
|
|
|
case VK_SHIFT:
|
|
if(EditHotKey && !CompleteKey && (CurrHotKeyTxtLen != 0))
|
|
goto SetHotKey;
|
|
break;
|
|
|
|
case VK_ESCAPE:
|
|
if((GetKeyState(VK_MENU) & 0x8000) ||
|
|
(GetKeyState(VK_CONTROL) & 0x8000)) {
|
|
CompleteKey = FALSE;
|
|
EditHotKey = FALSE;
|
|
NewHotKey = FALSE;
|
|
SetHotKeyTextFromInMem();
|
|
DoHkeyCaret(hwnd);
|
|
return(DefWindowProc(hwnd, message, wParam, lParam));
|
|
} else {
|
|
if(GetKeyState(VK_SHIFT) & 0x8000)
|
|
MessageBeep(0);
|
|
else {
|
|
CompleteKey = FALSE;
|
|
EditHotKey = FALSE;
|
|
NewHotKey = FALSE;
|
|
PostMessage(hwndAdvPifDlg,WM_COMMAND,IDCANCEL,0L);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case VK_SPACE:
|
|
case VK_MULTIPLY:
|
|
CompleteKey = FALSE;
|
|
EditHotKey = FALSE;
|
|
NewHotKey = FALSE;
|
|
SetHotKeyTextFromInMem();
|
|
DoHkeyCaret(hwnd);
|
|
return(DefWindowProc(hwnd, message, wParam, lParam));
|
|
break;
|
|
|
|
default: /* Set Key */
|
|
if(!EditHotKey || CompleteKey)
|
|
goto StartHotKey;
|
|
goto SetHotKey;
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_SYSCHAR:
|
|
case WM_CHAR:
|
|
case WM_SYSKEYUP:
|
|
case WM_KEYUP:
|
|
switch (wParam) {
|
|
case VK_SPACE:
|
|
case VK_MULTIPLY:
|
|
case VK_RETURN:
|
|
case VK_ESCAPE:
|
|
case VK_TAB:
|
|
return(DefWindowProc(hwnd, message, wParam, lParam));
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_LBUTTONDOWN:
|
|
SetFocus(hwnd);
|
|
break;
|
|
|
|
case WM_CREATE:
|
|
hwndPrivControl = hwnd;
|
|
SetHotKeyTextFromPIF();
|
|
break;
|
|
|
|
case WM_PAINT:
|
|
if(!BeginPaint(hwnd, (LPPAINTSTRUCT)&ps)) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
break;
|
|
}
|
|
if(HotKyFnt)
|
|
hfont = (HFONT)SelectObject(ps.hdc,(HGDIOBJ)HotKyFnt);
|
|
txtcolor = GetSysColor(COLOR_WINDOWTEXT);
|
|
SetTextColor(ps.hdc,txtcolor);
|
|
txtcolor = GetSysColor(COLOR_WINDOW);
|
|
SetBkColor(ps.hdc,txtcolor);
|
|
TextOut(ps.hdc, 4, 1, (LPSTR)CurrHotKeyTxt, sizeof(CurrHotKeyTxt));
|
|
if(HotKyFnt && hfont)
|
|
SelectObject(ps.hdc,(HGDIOBJ)hfont);
|
|
EndPaint(hwnd, (CONST PAINTSTRUCT *)&ps);
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
hwndPrivControl = (HWND)NULL;
|
|
default:
|
|
return(DefWindowProc(hwnd, message, wParam, lParam));
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
SetHotKeyState(WPARAM keyid,LONG lParam)
|
|
{
|
|
unsigned char *cptr;
|
|
BOOL FirstEl = FALSE;
|
|
|
|
cptr = CurrHotKeyTxt;
|
|
|
|
if(lParam & 0x01000000L)
|
|
TmpHotKeyVal = 1;
|
|
else
|
|
TmpHotKeyVal = 0;
|
|
|
|
if(GetKeyState(VK_MENU) & 0x8000) {
|
|
cptr += GetKeyNameText(ALTLPARAM,(LPSTR)cptr,
|
|
sizeof(CurrHotKeyTxt)-(cptr-CurrHotKeyTxt));
|
|
FirstEl = TRUE;
|
|
TmpHotKeyShVal |= 0x0008;
|
|
} else {
|
|
TmpHotKeyShVal &= ~0x0008;
|
|
}
|
|
if(GetKeyState(VK_CONTROL) & 0x8000) {
|
|
if(FirstEl) {
|
|
*cptr++ = KeySepChr;
|
|
} else {
|
|
FirstEl = TRUE;
|
|
}
|
|
cptr += GetKeyNameText(CTRLLPARAM,(LPSTR)cptr,
|
|
sizeof(CurrHotKeyTxt)-(cptr-CurrHotKeyTxt));
|
|
TmpHotKeyShVal |= 0x0004;
|
|
} else {
|
|
TmpHotKeyShVal &= ~0x0004;
|
|
}
|
|
if(GetKeyState(VK_SHIFT) & 0x8000) {
|
|
if(FirstEl) {
|
|
*cptr++ = KeySepChr;
|
|
} else {
|
|
FirstEl = TRUE;
|
|
}
|
|
cptr += GetKeyNameText(SHIFTLPARAM,(LPSTR)cptr,
|
|
sizeof(CurrHotKeyTxt)-(cptr-CurrHotKeyTxt));
|
|
TmpHotKeyShVal |= 0x0003;
|
|
} else {
|
|
TmpHotKeyShVal &= ~0x0003;
|
|
}
|
|
|
|
if((keyid != VK_MENU) && (keyid != VK_SHIFT) && (keyid != VK_CONTROL)) {
|
|
if(FirstEl) {
|
|
*cptr++ = KeySepChr;
|
|
} else {
|
|
FirstEl = TRUE;
|
|
}
|
|
|
|
if((GetKeyNameText(lParam,(LPSTR)cptr,
|
|
sizeof(CurrHotKeyTxt)-(cptr-CurrHotKeyTxt)))
|
|
&& (TmpHotKeyShVal & 0x000C)) {
|
|
TmpHotKeyScan = HIWORD(lParam) & 0x00FF;
|
|
CompleteKey = TRUE;
|
|
}
|
|
}
|
|
|
|
SetHotKeyLen();
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
ChangeHotKey()
|
|
{
|
|
|
|
if(!ChangeHkey) {
|
|
ChangeHkey = TRUE;
|
|
if(EditHotKey) {
|
|
if(CompleteKey) {
|
|
InMemHotKeyScan = TmpHotKeyScan;
|
|
InMemHotKeyShVal = TmpHotKeyShVal;
|
|
InMemHotKeyShMsk = TmpHotKeyShMsk;
|
|
InMemHotKeyVal = TmpHotKeyVal;
|
|
NewHotKey = TRUE;
|
|
} else if (CurrHotKeyTxtLen == 0) {
|
|
SetHotKeyTextFromPIF();
|
|
NewHotKey = FALSE;
|
|
} else {
|
|
Warning(BADHK,MB_ICONEXCLAMATION | MB_OK);
|
|
SetHotKeyTextFromPIF();
|
|
NewHotKey = FALSE;
|
|
}
|
|
EditHotKey = FALSE;
|
|
CompleteKey = FALSE;
|
|
}
|
|
ChangeHkey = FALSE;
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
BOOL UpdateHotKeyStruc(void)
|
|
{
|
|
ChangeHotKey();
|
|
if(((UINT)Pif386ext->PfHotKeyScan != InMemHotKeyScan) ||
|
|
((UINT)Pif386ext->PfHotKeyShVal != InMemHotKeyShVal) ||
|
|
((UINT)Pif386ext->PfHotKeyShMsk != InMemHotKeyShMsk) ||
|
|
(Pif386ext->PfHotKeyVal != InMemHotKeyVal)) {
|
|
|
|
Pif386ext->PfHotKeyScan = InMemHotKeyScan;
|
|
Pif386ext->PfHotKeyShVal = InMemHotKeyShVal;
|
|
Pif386ext->PfHotKeyShMsk = InMemHotKeyShMsk;
|
|
Pif386ext->PfHotKeyVal = InMemHotKeyVal;
|
|
return(TRUE);
|
|
} else {
|
|
return(FALSE);
|
|
}
|
|
}
|
|
|
|
|
|
SetHotKeyTextFromInMem(void)
|
|
{
|
|
unsigned char *cptr;
|
|
BOOL FirstEl = FALSE;
|
|
|
|
cptr = CurrHotKeyTxt;
|
|
|
|
if((InMemHotKeyScan == 0) &&
|
|
(InMemHotKeyShVal == 0) &&
|
|
(InMemHotKeyShMsk == 0)) {
|
|
if(!LoadString(hPifInstance, NONE, (LPSTR)CurrHotKeyTxt, sizeof(CurrHotKeyTxt))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
}
|
|
} else {
|
|
if(InMemHotKeyShVal & 0x0008) {
|
|
cptr += GetKeyNameText(ALTLPARAM,(LPSTR)cptr
|
|
,sizeof(CurrHotKeyTxt)-(cptr-CurrHotKeyTxt));
|
|
FirstEl = TRUE;
|
|
}
|
|
if(InMemHotKeyShVal & 0x0004) {
|
|
if(FirstEl) {
|
|
*cptr++ = KeySepChr;
|
|
} else {
|
|
FirstEl = TRUE;
|
|
}
|
|
cptr += GetKeyNameText(CTRLLPARAM,(LPSTR)cptr
|
|
,sizeof(CurrHotKeyTxt)-(cptr-CurrHotKeyTxt));
|
|
}
|
|
if(InMemHotKeyShVal & 0x0003) {
|
|
if(FirstEl) {
|
|
*cptr++ = KeySepChr;
|
|
} else {
|
|
FirstEl = TRUE;
|
|
}
|
|
cptr += GetKeyNameText(SHIFTLPARAM,(LPSTR)cptr
|
|
,sizeof(CurrHotKeyTxt)-(cptr-CurrHotKeyTxt));
|
|
}
|
|
if(FirstEl) {
|
|
*cptr++ = KeySepChr;
|
|
} else {
|
|
FirstEl = TRUE;
|
|
}
|
|
|
|
if(GetKeyNameText(InMemHotKeyVal ? ((DWORD)InMemHotKeyScan << 16L | 0x01000000L) : ((DWORD)InMemHotKeyScan << 16L),
|
|
(LPSTR)cptr,
|
|
sizeof(CurrHotKeyTxt)-(cptr-CurrHotKeyTxt)) == 0 ||
|
|
(!(InMemHotKeyShVal & 0x000C)) ||
|
|
(InMemHotKeyShMsk != 0x000F)) {
|
|
|
|
if(CurrMode386 && hwndAdvPifDlg)
|
|
Warning(BADHK,MB_ICONEXCLAMATION | MB_OK);
|
|
InMemHotKeyScan = 0;
|
|
InMemHotKeyShVal = 0;
|
|
InMemHotKeyShMsk = 0;
|
|
InMemHotKeyVal = 0;
|
|
if(!LoadString(hPifInstance, NONE, (LPSTR)CurrHotKeyTxt, sizeof(CurrHotKeyTxt))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
}
|
|
|
|
}
|
|
}
|
|
SetHotKeyLen();
|
|
if(CurrMode386 && hwndAdvPifDlg)
|
|
InvalidateRect(GetDlgItem(hwndAdvPifDlg, IDI_HOTKEY),
|
|
(CONST RECT *)NULL,
|
|
TRUE);
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
SetHotKeyTextFromPIF()
|
|
{
|
|
if(!Pif386ext)
|
|
return(FALSE);
|
|
InMemHotKeyScan = Pif386ext->PfHotKeyScan;
|
|
InMemHotKeyShVal = Pif386ext->PfHotKeyShVal;
|
|
InMemHotKeyShMsk = Pif386ext->PfHotKeyShMsk;
|
|
InMemHotKeyVal = Pif386ext->PfHotKeyVal;
|
|
SetHotKeyTextFromInMem();
|
|
return(TRUE);
|
|
}
|
|
|
|
SetHotKeyLen()
|
|
{
|
|
int i;
|
|
BOOL dospc;
|
|
|
|
for(dospc = FALSE, i = 0; i < sizeof(CurrHotKeyTxt); i++) {
|
|
if(dospc) {
|
|
CurrHotKeyTxt[i] = ' ';
|
|
} else {
|
|
if(!CurrHotKeyTxt[i]){
|
|
CurrHotKeyTxt[i] = ' ';
|
|
CurrHotKeyTxtLen = i;
|
|
dospc = TRUE;
|
|
}
|
|
}
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
Disable386Advanced(HWND hAdvwnd, HWND hNTwnd)
|
|
{
|
|
|
|
if(hAdvwnd) {
|
|
if(CurrMode386) {
|
|
if(UpdatePif386Struc())
|
|
FileChanged = TRUE;
|
|
if(UpdatePifNTStruc())
|
|
FileChanged = TRUE;
|
|
}
|
|
if(!DoFieldsWorkAdv(FALSE))
|
|
return(FALSE);
|
|
if(!DoFieldsWorkNT(FALSE))
|
|
return(FALSE);
|
|
SendMessage(hNTwnd,WM_PRIVCLOSEOK,0,0L);
|
|
}
|
|
ModeAdvanced = FALSE;
|
|
ReEnableAdvButton();
|
|
return(TRUE);
|
|
}
|
|
|
|
/*
|
|
* routine added so that pifedit can hack in normal menu functionality.
|
|
* Want Alt+Mnemonic to work like normal windows, even though pifedit is
|
|
* really a dialog box. Look for Alt+Mnemonic before letting message go
|
|
* to the dialog manager.
|
|
* 08-Jun-1987. davidhab.
|
|
*/
|
|
BOOL PifMenuMnemonic(LPMSG lpmsg)
|
|
{
|
|
unsigned char chMenu;
|
|
HWND hwAct;
|
|
|
|
if (lpmsg->message == WM_SYSCHAR && GetActiveWindow() == hMainwnd) {
|
|
chMenu = (unsigned char)AnsiUpper((LPSTR)(DWORD)(unsigned char)lpmsg->wParam);
|
|
if ((chMenu == MenuMnemonic1) || (chMenu == MenuMnemonic2) ||
|
|
(chMenu == MenuMnemonic3)) {
|
|
DefWindowProc(hwndPifDlg, lpmsg->message, lpmsg->wParam, lpmsg->lParam);
|
|
return(TRUE);
|
|
}
|
|
/*
|
|
*
|
|
* The following allows keyboard access to the main window scroll bar
|
|
*
|
|
*/
|
|
} else if ((lpmsg->message == WM_KEYDOWN) &&
|
|
(((hwAct = GetActiveWindow()) == hMainwnd) ||
|
|
(hwndAdvPifDlg && (hwAct == hwndAdvPifDlg)))) {
|
|
switch (lpmsg->wParam) {
|
|
case VK_HOME:
|
|
PostMessage(hwAct, WM_VSCROLL, SB_TOP, 0L);
|
|
break;
|
|
|
|
case VK_END:
|
|
PostMessage(hwAct, WM_VSCROLL, SB_BOTTOM, 0L);
|
|
break;
|
|
|
|
case VK_NEXT:
|
|
PostMessage(hwAct, WM_VSCROLL, SB_PAGEDOWN, 0L);
|
|
break;
|
|
|
|
case VK_PRIOR:
|
|
PostMessage(hwAct, WM_VSCROLL, SB_PAGEUP, 0L);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return(FALSE);
|
|
}
|
|
return(FALSE);
|
|
}
|
|
|
|
|
|
FilterPrivateMsg(HWND hwnd, unsigned message, WPARAM wParam, LONG lParam)
|
|
{
|
|
switch (message) {
|
|
case WM_KEYDOWN:
|
|
case WM_CHAR:
|
|
case WM_KEYUP:
|
|
case WM_SYSKEYDOWN:
|
|
case WM_SYSCHAR:
|
|
case WM_SYSKEYUP:
|
|
switch (wParam) {
|
|
case VK_TAB:
|
|
return(TRUE);
|
|
|
|
case VK_SPACE:
|
|
case VK_RETURN:
|
|
case VK_ESCAPE:
|
|
case VK_MULTIPLY:
|
|
if(GetKeyState(VK_MENU) & 0x8000)
|
|
return(TRUE);
|
|
else
|
|
return(FALSE);
|
|
|
|
default:
|
|
return(FALSE);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return(TRUE);
|
|
}
|
|
}
|
|
|
|
|
|
BOOL InitPifStuff(HINSTANCE hPrevInstance)
|
|
{
|
|
unsigned char buf[20];
|
|
PWNDCLASS pClass;
|
|
HDC hIC;
|
|
HFONT hfont;
|
|
TEXTMETRIC Metrics;
|
|
HANDLE mhand;
|
|
HDC hdcScreen;
|
|
char szHelv[] = "MS Sans Serif"; // don't use Helv, mapping problems
|
|
TEXTMETRIC tm;
|
|
int dxText;
|
|
|
|
if (lpfnRegisterPenApp = (LPFNREGISTERPENAPP)GetProcAddress((HMODULE)(GetSystemMetrics(SM_PENWINDOWS)), "RegisterPenApp")) {
|
|
(*lpfnRegisterPenApp)((WORD)1, TRUE); /* be Pen-Enhanced */
|
|
}
|
|
|
|
if (!hPrevInstance) {
|
|
|
|
StatusPntData.dyBorder = GetSystemMetrics(SM_CYBORDER);
|
|
StatusPntData.dyBorderx2 = StatusPntData.dyBorder * 2;
|
|
StatusPntData.dyBorderx3 = StatusPntData.dyBorder * 3;
|
|
|
|
if(!(hdcScreen = GetDC(NULL)))
|
|
goto NoMem;
|
|
|
|
StatusPntData.Fntheight = MulDiv(-10, GetDeviceCaps(hdcScreen, LOGPIXELSY), 72);
|
|
|
|
dxText = LOWORD(GetTextExtent(hdcScreen, "M", 1));
|
|
|
|
if(!(StatusPntData.hFontStatus = (HGDIOBJ)CreateFont(StatusPntData.Fntheight, 0, 0, 0, 400, 0, 0, 0,
|
|
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
|
|
DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, (LPCTSTR)szHelv)))
|
|
goto NoMem;
|
|
mhand = SelectObject(hdcScreen, StatusPntData.hFontStatus);
|
|
|
|
GetTextMetrics(hdcScreen, &tm);
|
|
|
|
SelectObject(hdcScreen, mhand);
|
|
StatusPntData.dyStatus = tm.tmHeight + tm.tmExternalLeading + 7 * StatusPntData.dyBorder;
|
|
ReleaseDC(NULL, hdcScreen);
|
|
|
|
} else {
|
|
if(!GetInstanceData(hPrevInstance,(NPSTR)&StatusPntData,sizeof(StatusPntData))) {
|
|
StatusPntData.hFontStatus = (HGDIOBJ)NULL;
|
|
goto NoMem;
|
|
}
|
|
if(!(StatusPntData.hFontStatus = (HGDIOBJ)CreateFont(StatusPntData.Fntheight, 0, 0, 0, 400, 0, 0, 0,
|
|
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
|
|
DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, szHelv)))
|
|
goto NoMem;
|
|
}
|
|
|
|
if(!(lpfnPifWnd = (FARPROC) MakeProcInstance(PifWndProc, hPifInstance))) {
|
|
NoMem:
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
return(FALSE);
|
|
}
|
|
|
|
if(!(lpfnAdvPifWnd = (FARPROC) MakeProcInstance(PifAdvWndProc, hPifInstance)))
|
|
goto NoMem;
|
|
|
|
if(!(lpfnNTPifWnd = (FARPROC) MakeProcInstance(PifNTWndProc, hPifInstance)))
|
|
goto NoMem;
|
|
|
|
if(!LoadString(hPifInstance, errTitle, (LPSTR)rgchTitle, sizeof(rgchTitle)))
|
|
goto NoMem;
|
|
|
|
if(!(hAccel = LoadAccelerators(hPifInstance, (LPSTR)"pifaccels")))
|
|
goto NoMem;
|
|
|
|
if(!LoadString(hPifInstance, MENUMNEMONIC1, (LPSTR)buf, sizeof(buf)))
|
|
goto NoMem;
|
|
MenuMnemonic1 = buf[0];
|
|
|
|
if(!LoadString(hPifInstance, MENUMNEMONIC2, (LPSTR)buf, sizeof(buf)))
|
|
goto NoMem;
|
|
MenuMnemonic2 = buf[0];
|
|
|
|
if(!LoadString(hPifInstance, MENUMNEMONIC3, (LPSTR)buf, sizeof(buf)))
|
|
goto NoMem;
|
|
MenuMnemonic3 = buf[0];
|
|
|
|
if(!LoadString(hPifInstance, KEYSEPCHAR, (LPSTR)buf, sizeof(buf)))
|
|
goto NoMem;
|
|
KeySepChr = buf[0];
|
|
|
|
if(!(hArrowCurs = LoadCursor((HANDLE)NULL,(LPSTR)IDC_ARROW)))
|
|
goto NoMem;
|
|
if(!(hWaitCurs = LoadCursor((HANDLE)NULL,(LPSTR)IDC_WAIT)))
|
|
goto NoMem;
|
|
|
|
bMouse = GetSystemMetrics(SM_MOUSEPRESENT);
|
|
hIC = CreateIC((LPSTR)"DISPLAY", (LPSTR)NULL, (LPSTR)NULL, (LPDEVMODE)NULL);
|
|
if (!hIC)
|
|
return(FALSE);
|
|
/* Setup the fonts */
|
|
GetTextMetrics(hIC, (LPTEXTMETRIC)(&Metrics)); /* find out what kind of font it really is */
|
|
SysCharHeight = Metrics.tmHeight; /* the height */
|
|
SysCharWidth = Metrics.tmAveCharWidth; /* the average width */
|
|
|
|
SysFixedFont = (HFONT)GetStockObject(SYSTEM_FIXED_FONT);
|
|
SelectObject(hIC,(HGDIOBJ)SysFixedFont);
|
|
GetTextMetrics(hIC, (LPTEXTMETRIC)(&Metrics));
|
|
SysFixedHeight = Metrics.tmHeight;
|
|
SysFixedWidth = Metrics.tmAveCharWidth;
|
|
if(Metrics.tmPitchAndFamily & 1) {
|
|
SysFixedFont = (HFONT)GetStockObject(ANSI_FIXED_FONT);
|
|
SelectObject(hIC,(HGDIOBJ)SysFixedFont);
|
|
GetTextMetrics(hIC, (LPTEXTMETRIC)(&Metrics)); /* find out what kind of font it really is */
|
|
SysFixedHeight = Metrics.tmHeight; /* the height */
|
|
SysFixedWidth = Metrics.tmAveCharWidth; /* the average width */
|
|
}
|
|
|
|
HotKyFnt = CreateFont(8, /* lfHeight */
|
|
0, /* lfWidth */
|
|
0, /* lfEscapement */
|
|
0, /* lfOrientation*/
|
|
FW_BOLD, /* lfWeight */
|
|
FALSE, /* lfItalic */
|
|
FALSE, /* lfUnderline */
|
|
FALSE, /* lfStrikeout */
|
|
ANSI_CHARSET, /* lfCharset */
|
|
OUT_DEFAULT_PRECIS, /* lfOutPrec */
|
|
OUT_DEFAULT_PRECIS, /* lfClipPrec */
|
|
DEFAULT_QUALITY, /* lfQuality */
|
|
VARIABLE_PITCH | FF_SWISS, /* lfPitchAndFam*/
|
|
(LPSTR)"MS Sans Serif"); /* lfFacename */
|
|
|
|
if(HotKyFnt) {
|
|
if((hfont = (HFONT)SelectObject(hIC,(HGDIOBJ)HotKyFnt))) {
|
|
if(GetTextMetrics(hIC, (LPTEXTMETRIC)(&Metrics))) {
|
|
HotKyFntHgt = Metrics.tmHeight;
|
|
}
|
|
SelectObject(hIC,(HGDIOBJ)hfont);
|
|
}
|
|
}
|
|
DeleteDC(hIC);
|
|
|
|
/* only register classes if first instance. 23-Oct-1987. davidhab. */
|
|
if (!hPrevInstance) {
|
|
if(!(pClass = (PWNDCLASS)LocalAlloc(LPTR, sizeof(WNDCLASS))))
|
|
goto NoMem;
|
|
|
|
pClass->hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
pClass->hIcon = LoadIcon(hPifInstance, MAKEINTRESOURCE(ID_PIFICON));
|
|
pClass->lpszMenuName = MAKEINTRESOURCE(ID_PIFMENU);
|
|
pClass->hInstance = hPifInstance;
|
|
pClass->lpszClassName = (LPSTR)"Pif";
|
|
pClass->hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
|
|
pClass->lpfnWndProc = (WNDPROC)PifMainWndProc;
|
|
pClass->style = CS_BYTEALIGNCLIENT;
|
|
if (!RegisterClass((CONST WNDCLASS *)pClass))
|
|
return(FALSE);
|
|
LocalFree((HANDLE)pClass);
|
|
|
|
if(!(pClass = (PWNDCLASS)LocalAlloc(LPTR, sizeof(WNDCLASS))))
|
|
goto NoMem;
|
|
|
|
pClass->hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
pClass->hIcon = (HICON)NULL;
|
|
pClass->hInstance = hPifInstance;
|
|
pClass->lpszClassName = (LPSTR)"PifHKy";
|
|
pClass->hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
|
|
pClass->lpfnWndProc = (WNDPROC)PifHotKyWndProc;
|
|
pClass->style = 0;
|
|
if (!RegisterClass((CONST WNDCLASS *)pClass))
|
|
return(FALSE);
|
|
LocalFree((HANDLE)pClass);
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCommandLine, int cmdShow)
|
|
{
|
|
MSG msg;
|
|
BYTE *p;
|
|
PSTR pchFileName;
|
|
HWND hWndTmp;
|
|
HWND hWndTmp2;
|
|
HMENU hMenu;
|
|
int i;
|
|
unsigned char buf[160];
|
|
POINT cTLpt;
|
|
POINT cLRpt;
|
|
RECT rc1;
|
|
RECT rc2;
|
|
int tmpFOCID;
|
|
|
|
PifFile = (PIFNEWSTRUCT *)PifBuf;
|
|
|
|
if(!LoadString(hPifInstance, EINSMEMORY, (LPSTR)rgchInsMem, sizeof(rgchInsMem))) {
|
|
return(FALSE);
|
|
}
|
|
if(!LoadString(hPifInstance, NTSYSTEMROOT, (LPSTR)NTSys32Root, PIFDEFPATHSIZE-1)) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
return(FALSE);
|
|
}
|
|
|
|
if(!LoadString(hPifInstance, NTSYSTEM32, (LPSTR)buf, PIFDEFPATHSIZE-1)) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
return(FALSE);
|
|
}
|
|
lstrcat(NTSys32Root, buf);
|
|
|
|
hPifInstance = hInstance;
|
|
|
|
if(!InitPifStuff(hPrevInstance)) {
|
|
if (lpfnRegisterPenApp)
|
|
(*lpfnRegisterPenApp)((WORD)1, FALSE); /* deregister */
|
|
return(FALSE);
|
|
}
|
|
|
|
if(!(i = LoadString(hPifInstance, PIFCAPTION, (LPSTR)buf, sizeof(buf)))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
if (lpfnRegisterPenApp)
|
|
(*lpfnRegisterPenApp)((WORD)1, FALSE); /* deregister */
|
|
return(FALSE);
|
|
}
|
|
|
|
if(!LoadString(hPifInstance, NOTITLE, (LPSTR)(buf+i), (sizeof(buf)-i))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
if (lpfnRegisterPenApp)
|
|
(*lpfnRegisterPenApp)((WORD)1, FALSE); /* deregister */
|
|
return(FALSE);
|
|
}
|
|
|
|
hParentWnd = hMainwnd = CreateWindow((LPSTR)"Pif",
|
|
(LPSTR)buf,
|
|
WS_OVERLAPPED | WS_THICKFRAME | WS_CAPTION |
|
|
WS_SYSMENU | WS_MINIMIZEBOX | WS_VSCROLL |
|
|
WS_MAXIMIZEBOX,
|
|
SysCharWidth * 2,
|
|
SysCharHeight * 3,
|
|
0,
|
|
0,
|
|
(HWND)NULL,
|
|
(HMENU)NULL,
|
|
hPifInstance,
|
|
(LPSTR)NULL);
|
|
|
|
if(!hMainwnd) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
if (lpfnRegisterPenApp)
|
|
(*lpfnRegisterPenApp)((WORD)1, FALSE); /* deregister */
|
|
return(FALSE);
|
|
}
|
|
hSysMenuMain = GetSystemMenu(hMainwnd,FALSE);
|
|
hMenu = GetMenu(hMainwnd);
|
|
hFileMenu = GetSubMenu(hMenu,0);
|
|
hModeMenu = GetSubMenu(hMenu,1);
|
|
hHelpMenu = GetSubMenu(hMenu,2);
|
|
|
|
CurrMode386 = SysMode386 = SetInitialMode();
|
|
|
|
if(!InitPifStruct()){
|
|
if (lpfnRegisterPenApp)
|
|
(*lpfnRegisterPenApp)((WORD)1, FALSE); /* deregister */
|
|
return(FALSE);
|
|
}
|
|
|
|
if(CurrMode386) {
|
|
if(!EnableMode386(hMainwnd,FALSE)) {
|
|
if (lpfnRegisterPenApp)
|
|
(*lpfnRegisterPenApp)((WORD)1, FALSE); /* deregister */
|
|
return(FALSE);
|
|
}
|
|
} else {
|
|
if(!EnableMode286(hMainwnd,FALSE)) {
|
|
if (lpfnRegisterPenApp)
|
|
(*lpfnRegisterPenApp)((WORD)1, FALSE); /* deregister */
|
|
return(FALSE);
|
|
}
|
|
}
|
|
|
|
if(hMainwnd) {
|
|
DragAcceptFiles(hMainwnd,TRUE);
|
|
}
|
|
if(hwndPifDlg) {
|
|
DragAcceptFiles(hwndPifDlg,TRUE);
|
|
}
|
|
if(hwndAdvPifDlg) {
|
|
DragAcceptFiles(hwndAdvPifDlg,TRUE);
|
|
}
|
|
if(hwndNTPifDlg) {
|
|
DragAcceptFiles(hwndNTPifDlg,TRUE);
|
|
}
|
|
|
|
if (*lpszCommandLine) {
|
|
if (pchFileName = (PSTR)LocalAlloc(LPTR, MAX_PATH)) {
|
|
if (lstrlen(lpszCommandLine) > (MAX_PATH - 5))
|
|
*(lpszCommandLine + (MAX_PATH - 5)) = 0;
|
|
CpyCmdStr((LPSTR)pchFileName, lpszCommandLine);
|
|
CmdArgAddCorrectExtension(pchFileName);
|
|
LoadPifFile(pchFileName);
|
|
LocalFree((HANDLE)pchFileName);
|
|
SetMainTitle();
|
|
} else {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
if (lpfnRegisterPenApp)
|
|
(*lpfnRegisterPenApp)((WORD)1, FALSE); /* deregister */
|
|
return(FALSE);
|
|
}
|
|
}
|
|
|
|
UpdatePifScreen();
|
|
UpdatePifStruct();
|
|
|
|
PifFile->id = 0; /* compute check sum */
|
|
p = (BYTE *)&PifFile->name[ 0 ];
|
|
i = PIFSIZE;
|
|
while (i--)
|
|
PifFile->id += *p++;
|
|
|
|
|
|
InitShWind = TRUE;
|
|
ShowWindow(hwndPifDlg, SW_SHOWNORMAL);
|
|
if(hwndAdvPifDlg)
|
|
ShowWindow(hwndAdvPifDlg, cmdShow);
|
|
if(hwndNTPifDlg)
|
|
ShowWindow(hwndNTPifDlg, cmdShow);
|
|
ShowWindow(hMainwnd, cmdShow);
|
|
/*
|
|
* The following HACK gets around a wierd problem where we end up with no
|
|
* ICON when started minimized. It is believed that this is due to the
|
|
* wierd stuff we do based on the InitShWind flag in WM_INITDIALOG.
|
|
*/
|
|
if((cmdShow == SW_SHOWMINNOACTIVE) || (cmdShow == SW_SHOWMINIMIZED))
|
|
InvalidateRect(hMainwnd, (CONST RECT *)NULL, TRUE);
|
|
|
|
while (GetMessage((LPMSG)&msg, NULL, 0, 0)) {
|
|
if (!TranslateAccelerator(hMainwnd, hAccel, (LPMSG)&msg)) {
|
|
if(hwndPrivControl == msg.hwnd) {
|
|
if(!FilterPrivateMsg(msg.hwnd,msg.message,msg.wParam,msg.lParam)) {
|
|
TranslateMessage((CONST MSG *)&msg);
|
|
DispatchMessage((CONST MSG *)&msg);
|
|
goto CheckFocus;
|
|
}
|
|
}
|
|
if(PifMenuMnemonic((LPMSG)&msg))
|
|
goto CheckFocus;
|
|
if (!hwndPifDlg || !IsDialogMessage(hwndPifDlg, (LPMSG)&msg)) {
|
|
if(hwndAdvPifDlg && IsDialogMessage(hwndAdvPifDlg, (LPMSG)&msg))
|
|
goto CheckFocus;
|
|
if(hwndNTPifDlg && IsDialogMessage(hwndNTPifDlg, (LPMSG)&msg))
|
|
goto CheckFocus;
|
|
TranslateMessage((CONST MSG *)&msg);
|
|
DispatchMessage((CONST MSG *)&msg);
|
|
} else { /* Dialog message for hwndPifDlg or hwndAdvPifDlg */
|
|
CheckFocus:
|
|
if (hWndTmp = GetFocus()) {
|
|
if((((hWndTmp2 = GetParent(hWndTmp)) == hwndPifDlg) ||
|
|
(hWndTmp2 == hwndAdvPifDlg) || (hWndTmp2 == hwndNTPifDlg))
|
|
&& (hWndTmp != hwndFocus)) {
|
|
if((hWndTmp2 == hwndAdvPifDlg)
|
|
|| (hWndTmp2 == hwndNTPifDlg))
|
|
hParentWnd = hWndTmp2;
|
|
else
|
|
hParentWnd = hMainwnd;
|
|
hwndFocus = hWndTmp;
|
|
FocusID = GetDlgCtrlID(hWndTmp);
|
|
if(hWndTmp2 == hwndPifDlg) {
|
|
hwndFocusMain = hwndFocus;
|
|
tmpFOCID = FocusIDMain;
|
|
FocusIDMain = FocusID;
|
|
if(tmpFOCID != FocusIDMain)
|
|
SetStatusText(hMainwnd,FocusIDMain,TRUE);
|
|
} else if(hWndTmp2 == hwndAdvPifDlg) {
|
|
hwndFocusAdv = hwndFocus;
|
|
tmpFOCID = FocusIDAdv;
|
|
FocusIDAdv = FocusID;
|
|
if(tmpFOCID != FocusIDAdv)
|
|
SetStatusText(hwndAdvPifDlg,FocusIDAdv,TRUE);
|
|
} else {
|
|
hwndFocusNT = hwndFocus;
|
|
tmpFOCID = FocusIDNT;
|
|
FocusIDNT = FocusID;
|
|
if(tmpFOCID != FocusIDNT)
|
|
SetStatusText(hwndNTPifDlg,FocusIDNT,TRUE);
|
|
}
|
|
/*
|
|
* Check to make sure this control is visible.
|
|
* If it isn't, scroll the window to make it
|
|
* visible.
|
|
*
|
|
*/
|
|
if((hWndTmp2 == hwndPifDlg) && MainScrollRange) {
|
|
GetClientRect(hMainwnd,(LPRECT)&rc1);
|
|
rc1.bottom -= (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
cTLpt.x = rc1.left;
|
|
cTLpt.y = rc1.top;
|
|
cLRpt.x = rc1.right;
|
|
cLRpt.y = rc1.bottom;
|
|
ClientToScreen(hMainwnd,(LPPOINT)&cTLpt);
|
|
ClientToScreen(hMainwnd,(LPPOINT)&cLRpt);
|
|
GetWindowRect(hwndFocus,(LPRECT)&rc2);
|
|
if(rc2.top < cTLpt.y) {
|
|
MainScrollTrack(hMainwnd,SB_LINEUP,
|
|
cTLpt.y - rc2.top);
|
|
} else if(rc2.bottom > cLRpt.y) {
|
|
MainScrollTrack(hMainwnd,SB_LINEDOWN,
|
|
rc2.bottom - cLRpt.y);
|
|
}
|
|
} else if ((hWndTmp2 == hwndAdvPifDlg) && AdvScrollRange) {
|
|
GetClientRect(hwndAdvPifDlg,(LPRECT)&rc1);
|
|
rc1.bottom -= (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
cTLpt.x = rc1.left;
|
|
cTLpt.y = rc1.top;
|
|
cLRpt.x = rc1.right;
|
|
cLRpt.y = rc1.bottom;
|
|
ClientToScreen(hwndAdvPifDlg,(LPPOINT)&cTLpt);
|
|
ClientToScreen(hwndAdvPifDlg,(LPPOINT)&cLRpt);
|
|
GetWindowRect(hwndFocus,(LPRECT)&rc2);
|
|
if(rc2.top < cTLpt.y) {
|
|
MainScrollTrack(hwndAdvPifDlg,SB_LINEUP,
|
|
cTLpt.y - rc2.top);
|
|
} else if(rc2.bottom > cLRpt.y) {
|
|
MainScrollTrack(hwndAdvPifDlg,SB_LINEDOWN,
|
|
rc2.bottom - cLRpt.y);
|
|
}
|
|
|
|
} else if((hWndTmp2 == hwndNTPifDlg) && NTScrollRange) {
|
|
GetClientRect(hwndNTPifDlg,(LPRECT)&rc1);
|
|
rc1.bottom -= (StatusPntData.dyStatus + StatusPntData.dyBorderx2);
|
|
cTLpt.x = rc1.left;
|
|
cTLpt.y = rc1.top;
|
|
cLRpt.x = rc1.right;
|
|
cLRpt.y = rc1.bottom;
|
|
ClientToScreen(hwndNTPifDlg,(LPPOINT)&cTLpt);
|
|
ClientToScreen(hwndNTPifDlg,(LPPOINT)&cLRpt);
|
|
GetWindowRect(hwndFocus,(LPRECT)&rc2);
|
|
if(rc2.top < cTLpt.y) {
|
|
MainScrollTrack(hwndNTPifDlg,SB_LINEUP,
|
|
cTLpt.y - rc2.top);
|
|
} else if(rc2.bottom > cLRpt.y) {
|
|
MainScrollTrack(hwndNTPifDlg,SB_LINEDOWN,
|
|
rc2.bottom - cLRpt.y);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (lpfnRegisterPenApp)
|
|
(*lpfnRegisterPenApp)((WORD)1, FALSE); /* deregister */
|
|
return(0);
|
|
}
|
|
|
|
|
|
unsigned char *PutUpDB(int idb)
|
|
{
|
|
OPENFILENAME OpnStruc;
|
|
BOOL MsgFlagSav;
|
|
unsigned char *pResultBuf = NULL;
|
|
char filespec[160];
|
|
char specbuf[80];
|
|
int i,j;
|
|
char extspec[] = "PIF";
|
|
char chbuf[100];
|
|
HICON hIcon;
|
|
|
|
|
|
if(!(i = LoadString(hPifInstance, errFlTypePIF, (LPSTR)filespec, sizeof(specbuf)))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
return((unsigned char *)NULL);
|
|
}
|
|
if(!(j = LoadString(hPifInstance,errFlTypeAll , (LPSTR)specbuf, sizeof(specbuf)))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
return((unsigned char *)NULL);
|
|
}
|
|
i++; /* point to char after NUL at end of errFlTypePIF */
|
|
lstrcpy((LPSTR)&filespec[i],(LPSTR)"*.PIF");
|
|
i += 6; /* point to char after NUL at end of *.PIF */
|
|
lstrcpy((LPSTR)&filespec[i],(LPSTR)specbuf);
|
|
i += j + 1; /* point to char after NUL at end of errFlTypeAll */
|
|
lstrcpy((LPSTR)&filespec[i],(LPSTR)"*.*");
|
|
i += 4; /* point to char after NUL at end of *.* */
|
|
filespec[i] = '\0'; /* double nul terminate */
|
|
|
|
|
|
if((idb == DTOPEN) || (idb == DTSAVE)) {
|
|
if(!(pResultBuf = (unsigned char *)LocalAlloc(LPTR, 132))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
return((unsigned char *)NULL);
|
|
}
|
|
lstrcpy((LPSTR)pResultBuf, (LPSTR)CurPifFile);
|
|
OpnStruc.lStructSize = (unsigned long)(sizeof(OpnStruc));
|
|
OpnStruc.hwndOwner = hMainwnd;
|
|
OpnStruc.hInstance = 0;
|
|
OpnStruc.lpstrFilter = (LPSTR)filespec;
|
|
OpnStruc.lpstrCustomFilter = (LPSTR)NULL;
|
|
OpnStruc.nMaxCustFilter = (DWORD)NULL;
|
|
OpnStruc.nFilterIndex = 1;
|
|
OpnStruc.lpstrFile = (LPSTR)pResultBuf;
|
|
OpnStruc.nMaxFile = 132;
|
|
/*
|
|
* We should use the next cookie to set our title BUT we still
|
|
* have to deal with file names we get from command line
|
|
* argument and drag drop.
|
|
*/
|
|
OpnStruc.lpstrFileTitle = (LPSTR)NULL;
|
|
OpnStruc.nMaxFileTitle = 0;
|
|
OpnStruc.lpstrInitialDir = (LPSTR)NULL;
|
|
OpnStruc.lpstrTitle = (LPSTR)NULL;
|
|
OpnStruc.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
|
|
OpnStruc.nFileOffset = 0;
|
|
OpnStruc.nFileExtension = 0;
|
|
OpnStruc.lpstrDefExt = (LPSTR)extspec;
|
|
OpnStruc.lCustData = 0;
|
|
OpnStruc.lpfnHook = (LPOFNHOOKPROC)NULL;
|
|
OpnStruc.lpTemplateName = (LPSTR)NULL;
|
|
} else if(idb == DTABOUT) {
|
|
if(!LoadString(hPifInstance, errTitle, (LPSTR)chbuf, sizeof(chbuf))) {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
return(pResultBuf);
|
|
}
|
|
hIcon = LoadIcon(hPifInstance, MAKEINTRESOURCE(ID_PIFICON));
|
|
}
|
|
|
|
/*
|
|
* These dialogs always come up via menu selections in the main window
|
|
* menu. The parent is therefore always hMainwnd
|
|
*/
|
|
switch(idb) {
|
|
|
|
case DTOPEN:
|
|
MsgFlagSav = DoingMsg;
|
|
DoingMsg = TRUE;
|
|
if(MsgFlagSav != DoingMsg)
|
|
InvalidateAllStatus();
|
|
if(!(GetOpenFileName((LPOPENFILENAME)&OpnStruc))){
|
|
if(pResultBuf)
|
|
LocalFree((HANDLE)pResultBuf);
|
|
pResultBuf = (unsigned char *)NULL;
|
|
} else {
|
|
tmpfileoffset = OpnStruc.nFileOffset;
|
|
tmpextoffset = OpnStruc.nFileExtension;
|
|
}
|
|
if(MsgFlagSav != DoingMsg) {
|
|
DoingMsg = MsgFlagSav;
|
|
InvalidateAllStatus();
|
|
} else {
|
|
DoingMsg = MsgFlagSav;
|
|
}
|
|
break;
|
|
|
|
case DTSAVE:
|
|
MsgFlagSav = DoingMsg;
|
|
DoingMsg = TRUE;
|
|
if(MsgFlagSav != DoingMsg)
|
|
InvalidateAllStatus();
|
|
if(!(GetSaveFileName((LPOPENFILENAME)&OpnStruc))){
|
|
if(pResultBuf)
|
|
LocalFree((HANDLE)pResultBuf);
|
|
pResultBuf = (unsigned char *)NULL;
|
|
} else {
|
|
tmpfileoffset = OpnStruc.nFileOffset;
|
|
tmpextoffset = OpnStruc.nFileExtension;
|
|
}
|
|
if(MsgFlagSav != DoingMsg) {
|
|
DoingMsg = MsgFlagSav;
|
|
InvalidateAllStatus();
|
|
} else {
|
|
DoingMsg = MsgFlagSav;
|
|
}
|
|
break;
|
|
|
|
case DTABOUT:
|
|
MsgFlagSav = DoingMsg;
|
|
DoingMsg = TRUE;
|
|
if(MsgFlagSav != DoingMsg)
|
|
InvalidateAllStatus();
|
|
ShellAbout(hMainwnd, (LPSTR)chbuf, (LPSTR)NULL, hIcon);
|
|
pResultBuf = (unsigned char *)NULL;
|
|
if(MsgFlagSav != DoingMsg) {
|
|
DoingMsg = MsgFlagSav;
|
|
InvalidateAllStatus();
|
|
} else {
|
|
DoingMsg = MsgFlagSav;
|
|
}
|
|
break;
|
|
}
|
|
return(pResultBuf);
|
|
}
|
|
|
|
|
|
/* ** return TRUE iff 0 terminated string contains a '*' or '\' */
|
|
BOOL FSearchSpec(unsigned char *sz)
|
|
{
|
|
for (; *sz;sz=AnsiNext(sz)) {
|
|
if (*sz == '*' || *sz == '?')
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
CheckOkEnable(HWND hwnd, unsigned message)
|
|
{
|
|
if (message == EN_CHANGE)
|
|
EnableWindow(GetDlgItem(hwnd, IDOK),
|
|
(BOOL)(SendMessage(GetDlgItem(hwnd, ID_EDIT),
|
|
WM_GETTEXTLENGTH, 0, 0L)));
|
|
return(TRUE);
|
|
}
|
|
|
|
/* ** Given filename or partial filename or search spec or partial
|
|
search spec, add appropriate extension. */
|
|
CmdArgAddCorrectExtension(unsigned char *szEdit)
|
|
{
|
|
register unsigned char *pchLast;
|
|
register unsigned char *pchT;
|
|
int ichExt;
|
|
BOOL fDone = FALSE;
|
|
int cchEdit;
|
|
|
|
pchT = pchLast = (unsigned char *)AnsiPrev((LPSTR)szEdit, (LPSTR)(szEdit + (cchEdit = lstrlen((LPSTR)szEdit))));
|
|
|
|
if ((*pchLast == '.' && *(AnsiPrev((LPSTR)szEdit, (LPSTR)pchLast)) == '.') && cchEdit == 2)
|
|
ichExt = 0;
|
|
else if (*pchLast == '\\' || *pchLast == ':')
|
|
ichExt = 1;
|
|
else {
|
|
ichExt = 2;
|
|
for (; pchT > szEdit; pchT = (unsigned char *)AnsiPrev((LPSTR)szEdit, (LPSTR)pchT)) {
|
|
/* If we're not searching and we encounter a period, don't add
|
|
any extension. If we are searching, period is assumed to be
|
|
part of directory name, so go ahead and add extension. However,
|
|
if we are searching and find a search spec, do not add any
|
|
extension. */
|
|
if (*pchT == '.') {
|
|
return(TRUE);
|
|
}
|
|
/* Quit when we get to beginning of last node. */
|
|
if (*pchT == '\\')
|
|
break;
|
|
}
|
|
}
|
|
lstrcpy((LPSTR)(pchLast+1), (LPSTR)(szExtSave+ichExt));
|
|
return(TRUE);
|
|
}
|
|
|
|
DoHelp(unsigned int hindx,unsigned int IDIndx)
|
|
{
|
|
BOOL retval;
|
|
unsigned int *aliasptr;
|
|
int i;
|
|
|
|
if(hindx == 0)
|
|
hindx = (unsigned int)FocusID;
|
|
|
|
if(IDIndx == 0) {
|
|
if(CurrMode386) {
|
|
if(ModeAdvanced) {
|
|
IDIndx = IDXID_386AHELP;
|
|
} else {
|
|
IDIndx = IDXID_386HELP;
|
|
}
|
|
} else {
|
|
IDIndx = IDXID_286HELP;
|
|
}
|
|
}
|
|
|
|
if(hindx == M_HELPHELP) {
|
|
retval = WinHelp(hMainwnd,(LPSTR)NULL,HELP_HELPONHELP,(DWORD)0);
|
|
} else if(hindx == M_SHELP) {
|
|
retval = WinHelp(hMainwnd,(LPSTR)PIFHELPFILENAME,HELP_PARTIALKEY,(DWORD)(LPSTR)"");
|
|
} else if((hindx == IDXID_386AHELP) || (hindx == IDXID_386HELP) ||
|
|
(hindx == IDXID_286HELP)) {
|
|
WinHelp(hMainwnd,(LPSTR)PIFHELPFILENAME,HELP_CONTEXT,(DWORD)IDIndx);
|
|
retval = WinHelp(hMainwnd,(LPSTR)PIFHELPFILENAME,HELP_SETINDEX,(DWORD)IDIndx);
|
|
} else {
|
|
if(IDIndx == IDXID_286HELP) {
|
|
for(i = 1, aliasptr = Aliases286;
|
|
i <= NUM286ALIASES;
|
|
i++, aliasptr += 2) {
|
|
|
|
if(*aliasptr == hindx) {
|
|
aliasptr++;
|
|
hindx = *aliasptr;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
retval = WinHelp(hMainwnd,(LPSTR)PIFHELPFILENAME,HELP_CONTEXT,(DWORD)hindx);
|
|
WinHelp(hMainwnd,(LPSTR)PIFHELPFILENAME,HELP_SETINDEX,(DWORD)IDIndx);
|
|
}
|
|
if(retval) {
|
|
hwndHelpDlgParent = hMainwnd;
|
|
} else {
|
|
Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK);
|
|
return(FALSE);
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
int SetWndScroll(int sizeflg, HWND hMwnd, int WindHeight, int WindWidth,
|
|
int *WndSize, int *ScrollRange, int *ScrollLineSz,
|
|
int *WndLines, int *MaxNeg)
|
|
{
|
|
int i;
|
|
int range;
|
|
int rangeFS;
|
|
int MaxrangeNRML;
|
|
int WndCapSz;
|
|
int newheight;
|
|
int newwidth;
|
|
int oldscrollpos;
|
|
int oldscrollOffset;
|
|
int newscrollOffset;
|
|
int oldscrollRange;
|
|
|
|
RECT rc1;
|
|
RECT rc2;
|
|
|
|
if(hMwnd == hMainwnd) {
|
|
WndCapSz = GetSystemMetrics(SM_CYCAPTION) +
|
|
GetSystemMetrics(SM_CYMENU);
|
|
} else {
|
|
WndCapSz = GetSystemMetrics(SM_CYCAPTION);
|
|
}
|
|
|
|
WndCapSz += (i = (2 * GetSystemMetrics(SM_CYFRAME)));
|
|
|
|
rangeFS = GetSystemMetrics(SM_CYSCREEN) + i;
|
|
|
|
MaxrangeNRML = rangeFS - (2 * SysCharHeight);
|
|
|
|
if(*WndSize != SIZEFULLSCREEN) {
|
|
range = MaxrangeNRML;
|
|
} else {
|
|
range = rangeFS;
|
|
}
|
|
|
|
WindHeight += WndCapSz;
|
|
|
|
if(sizeflg) {
|
|
if(WindHeight > range)
|
|
newheight = range;
|
|
else
|
|
newheight = WindHeight;
|
|
newwidth = WindWidth + (2 * GetSystemMetrics(SM_CXFRAME));
|
|
} else {
|
|
GetWindowRect(hMwnd,(LPRECT)&rc1);
|
|
newheight = rc1.bottom - rc1.top;
|
|
newwidth = rc1.right - rc1.left;
|
|
}
|
|
|
|
if(*WndSize == SIZEFULLSCREEN) {
|
|
newwidth = GetSystemMetrics(SM_CXSCREEN) +
|
|
(2 * GetSystemMetrics(SM_CXFRAME));
|
|
newheight = rangeFS;
|
|
}
|
|
newscrollOffset = 0;
|
|
/* Don't bother with SB stuff till window is visible */
|
|
if(IsWindowVisible(hMwnd)) {
|
|
oldscrollOffset = oldscrollpos = 0;
|
|
if((oldscrollRange = *ScrollRange)) {
|
|
oldscrollpos = GetScrollPos(hMwnd,SB_VERT);
|
|
newscrollOffset = oldscrollOffset =
|
|
min((oldscrollpos * *ScrollLineSz),*MaxNeg);
|
|
}
|
|
if(WindHeight > newheight) {
|
|
GetWindowRect(GetDlgItem(hwndPifDlg,IDI_ENAME),(LPRECT)&rc1);
|
|
GetWindowRect(GetDlgItem(hwndPifDlg,IDI_ETITLE),(LPRECT)&rc2);
|
|
*ScrollLineSz = rc2.top - rc1.top;
|
|
*MaxNeg = WindHeight - newheight;
|
|
*WndLines = range = (*MaxNeg + *ScrollLineSz - 1)/ *ScrollLineSz;
|
|
if(range != *ScrollRange) {
|
|
SetScrollRange(hMwnd, SB_VERT, 0, range, FALSE);
|
|
if(!oldscrollpos) {
|
|
SetScrollPos(hMwnd, SB_VERT, 0, TRUE);
|
|
} else if (oldscrollpos > range) {
|
|
SetScrollPos(hMwnd, SB_VERT, range, TRUE);
|
|
newscrollOffset = min((range * *ScrollLineSz),*MaxNeg);
|
|
} else {
|
|
SetScrollPos(hMwnd, SB_VERT, oldscrollpos, TRUE);
|
|
newscrollOffset = min((oldscrollpos * *ScrollLineSz),*MaxNeg);
|
|
}
|
|
*ScrollRange = range;
|
|
} else {
|
|
newscrollOffset = min((oldscrollpos * *ScrollLineSz),*MaxNeg);
|
|
}
|
|
if(oldscrollpos && (newscrollOffset != oldscrollOffset)) {
|
|
if((hMwnd == hwndAdvPifDlg) || (hMwnd == hwndNTPifDlg)) {
|
|
ScrollWindow(hMwnd,
|
|
0,
|
|
oldscrollOffset-newscrollOffset,
|
|
(CONST RECT *)NULL,
|
|
(CONST RECT *)NULL);
|
|
UpdateWindow(hMwnd);
|
|
AdjustFocusCtrl(hMwnd);
|
|
} else {
|
|
SetWindowPos(hwndPifDlg,
|
|
(HWND)NULL,
|
|
0,
|
|
-newscrollOffset,
|
|
newwidth,
|
|
newheight + newscrollOffset -
|
|
(StatusPntData.dyStatus + StatusPntData.dyBorderx2),
|
|
SWP_NOZORDER | SWP_NOACTIVATE);
|
|
UpdateWindow(hwndPifDlg);
|
|
AdjustFocusCtrl(hwndPifDlg);
|
|
}
|
|
InvalidateStatusBar(hMwnd);
|
|
}
|
|
} else {
|
|
if(*ScrollRange && oldscrollpos) {
|
|
MainScroll(hMwnd, SB_TOP, 0, 0, 1);
|
|
}
|
|
SetScrollRange(hMwnd, SB_VERT, 0, 0, FALSE);
|
|
*ScrollRange = 0;
|
|
}
|
|
}
|
|
if(sizeflg) {
|
|
SetWindowPos(hMwnd,
|
|
(HWND)NULL,
|
|
(int)NULL,
|
|
(int)NULL,
|
|
newwidth,
|
|
newheight,
|
|
SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
|
|
}
|
|
return(newscrollOffset);
|
|
}
|
|
|
|
|
|
SetMainWndSize(int sizeflg)
|
|
{
|
|
long SizeLong;
|
|
int MainWindHeight;
|
|
int MainWindWidth;
|
|
int AdvWindHeight;
|
|
int AdvWindWidth;
|
|
int NTWindHeight;
|
|
int NTWindWidth;
|
|
int PassFlg;
|
|
int ScrlOff;
|
|
RECT rc;
|
|
|
|
if(SizingFlag)
|
|
return(TRUE);
|
|
SizingFlag++;
|
|
|
|
switch(sizeflg) {
|
|
case SBUMAIN:
|
|
case SBUADV:
|
|
case SBUNT:
|
|
PassFlg = 0; /* Flag just SB update to do */
|
|
break;
|
|
|
|
default:
|
|
PassFlg = 1; /* Flag SB and SIZE update to do */
|
|
break;
|
|
}
|
|
|
|
switch(sizeflg) {
|
|
case SBUMAIN:
|
|
case SBUMAINADVNT:
|
|
case SBUSZMAIN:
|
|
case SBUSZMAINADVNT:
|
|
SendMessage(hwndPifDlg,WM_PRIVGETSIZE,0,(LONG)(long FAR *)&SizeLong);
|
|
MainWindHeight = HIWORD(SizeLong);
|
|
MainWindWidth = LOWORD(SizeLong);
|
|
ScrlOff = SetWndScroll(PassFlg,hMainwnd,MainWindHeight,
|
|
MainWindWidth,&MainWndSize,&MainScrollRange,
|
|
&MainScrollLineSz,&MainWndLines,&MaxMainNeg);
|
|
/*
|
|
* Clip the dialog so that it doesn't overlap the status bar
|
|
*/
|
|
GetClientRect(hMainwnd,(LPRECT)&rc);
|
|
SetWindowPos(hwndPifDlg,
|
|
(HWND)NULL,
|
|
0,
|
|
0,
|
|
rc.right - rc.left,
|
|
rc.bottom - rc.top + ScrlOff -
|
|
(StatusPntData.dyStatus + StatusPntData.dyBorderx2),
|
|
SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if(hwndAdvPifDlg) {
|
|
switch(sizeflg) {
|
|
case SBUSZMAINADVNT:
|
|
case SBUMAINADVNT:
|
|
case SBUSZADV:
|
|
case SBUADV:
|
|
SendMessage(hwndAdvPifDlg,WM_PRIVGETSIZE,0,
|
|
(LONG)(long FAR *)&SizeLong);
|
|
AdvWindHeight = HIWORD(SizeLong);
|
|
AdvWindWidth = LOWORD(SizeLong);
|
|
ScrlOff = SetWndScroll(PassFlg,hwndAdvPifDlg,AdvWindHeight,
|
|
AdvWindWidth,&AdvWndSize,&AdvScrollRange,
|
|
&AdvScrollLineSz,&AdvWndLines,
|
|
&MaxAdvNeg);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(hwndNTPifDlg) {
|
|
switch(sizeflg) {
|
|
case SBUSZMAINADVNT:
|
|
case SBUMAINADVNT:
|
|
case SBUSZNT:
|
|
case SBUNT:
|
|
SendMessage(hwndNTPifDlg,WM_PRIVGETSIZE,0,
|
|
(LONG)(long FAR *)&SizeLong);
|
|
NTWindHeight = HIWORD(SizeLong);
|
|
NTWindWidth = LOWORD(SizeLong);
|
|
ScrlOff = SetWndScroll(PassFlg,hwndNTPifDlg,NTWindHeight,
|
|
NTWindWidth,&NTWndSize,&NTScrollRange,
|
|
&NTScrollLineSz,&NTWndLines,
|
|
&MaxNTNeg);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
SizingFlag = 0;
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
/*
|
|
* CpyCmdStr( LPSTR szDst, LPSTR szSrc )
|
|
*
|
|
* Copies szSrc to szDst and correctly deals with double quotes
|
|
*/
|
|
void CpyCmdStr( LPSTR szDst, LPSTR szSrc ) {
|
|
|
|
do {
|
|
switch( *szSrc ) {
|
|
case '"':
|
|
/* eat double quotes */
|
|
break;
|
|
|
|
#if 0
|
|
//
|
|
// This 'case' makes it difficult to put a '^' in a filename.
|
|
// (due to cmd processing, it needs to appear 4 times in the line)!
|
|
//
|
|
// With out this case, it is impossible to put a '"' in the middle
|
|
// of a filename, but " is illegal in a filename on _ALL_ NT
|
|
// filesystems, and is not supported by any command line utility
|
|
// in that context.
|
|
//
|
|
case '^':
|
|
/* use '^' to mean 'quote next char' */
|
|
szSrc++;
|
|
/* FALL THROUGH to default */
|
|
#endif
|
|
|
|
default:
|
|
*szDst++ = *szSrc;
|
|
break;
|
|
}
|
|
}while( *szSrc++ );
|
|
}
|