#define NOSOUND #define NOCOMM #include "pifedit.h" extern int SetHotKeyTextFromPIF(void); extern int delete(PSTR); extern BOOL UpdateHotKeyStruc(void); extern unsigned char *PutUpDB(int); extern void SetStatusText(HWND,int,BOOL); extern void InvalidateAllStatus(void); extern int CmdArgAddCorrectExtension(unsigned char *); extern HINSTANCE hPifInstance; extern HWND hwndPifDlg; extern HWND hwndAdvPifDlg; extern HWND hwndNTPifDlg; extern HWND hMainwnd; extern HWND hParentWnd; extern BOOL CurrMode386; extern BOOL NewHotKey; extern BOOL FileChanged; extern BOOL DoingMsg; extern unsigned char rgchInsMem[80]; extern unsigned char rgchTitle[60]; extern unsigned char CurPifFile[]; extern unsigned char PifBuf[]; extern unsigned char NTSys32Root[]; extern BOOL AdvClose; extern BOOL NTClose; extern unsigned InMemHotKeyScan; extern unsigned InMemHotKeyShVal; extern unsigned InMemHotKeyShMsk; extern int FocusIDAdv; extern int FocusIDNT; extern WORD fileoffset; extern WORD extoffset; extern PIFNEWSTRUCT UNALIGNED *PifFile; extern PIF386EXT UNALIGNED *Pif386ext; extern PIFWNTEXT UNALIGNED *PifNText; /* * extern PIF286EXT31 *Pif286ext31; */ extern PIF286EXT30 UNALIGNED *Pif286ext30; extern BOOL fNoNTAWarn; extern BOOL fNTAWarnne; extern BOOL fNoNTCWarn; extern BOOL fNTCWarnne; int InitPif386Struc(void); int InitPifNTStruc(void); int InitPif286Struc(void); int InitStdPIFExt(void); int InitPifStruct(void); BOOL ValidFileSpec(LPSTR lpstr, int iCaller); BOOL ExpandFileSpec(LPSTR lpstrExp, LPSTR lpstr, int errID); unsigned int WarningSem = 0; PIFEXTHEADER UNALIGNED *LastPifExt; unsigned PifFileSize; char stdHdr[] = STDHDRSIG; char w386Hdr[] = W386HDRSIG; char w286Hdr30[] = W286HDRSIG30; char wNTHdr[] = WNTHDRSIG31; /* * char w286Hdr31[] = W286HDRSIG31; */ /* char *SCANNames[] = { "00h","01h","02h","03h","04h","05h","06h","07h", "08h","09h","0Ah","0Bh","0Ch","0Dh","0Eh","0Fh", "10h","11h","12h","13h","14h","15h","16h","17h", "18h","19h","1Ah","1Bh","1Ch","1Dh","1Eh","1Fh", "20h","21h","22h","23h","24h","25h","26h","27h", "28h","29h","2Ah","2Bh","2Ch","2Dh","2Eh","2Fh", "30h","31h","32h","33h","34h","35h","36h","37h", "38h","39h","3Ah","3Bh","3Ch","3Dh","3Eh","3Fh", "40h","41h","42h","43h","44h","45h","46h","47h", "48h","49h","4Ah","4Bh","4Ch","4Dh","4Eh","4Fh", "50h","51h","52h","53h","54h","55h","56h","57h", "58h","59h","5Ah","5Bh","5Ch","5Dh","5Eh","5Fh", "60h","61h","62h","63h","64h","65h","66h","67h", "68h","69h","6Ah","6Bh","6Ch","6Dh","6Eh","6Fh", "70h","71h","72h","73h","74h","75h","76h","77h", "78h","79h","7Ah","7Bh","7Ch","7Dh","7Eh","7Fh", "80h","81h","82h","83h","84h","85h","86h","87h", "88h","89h","8Ah","8Bh","8Ch","8Dh","8Eh","8Fh", "90h","91h","92h","93h","94h","95h","96h","97h", "98h","99h","9Ah","9Bh","9Ch","9Dh","9Eh","9Fh", "A0h","A1h","A2h","A3h","A4h","A5h","A6h","A7h", "A8h","A9h","AAh","ABh","ACh","ADh","AEh","AFh", "B0h","B1h","B2h","B3h","B4h","B5h","B6h","B7h", "B8h","B9h","BAh","BBh","BCh","BDh","BEh","BFh", "C0h","C1h","C2h","C3h","C4h","C5h","C6h","C7h", "C8h","C9h","CAh","CBh","CCh","CDh","CEh","CFh", "D0h","D1h","D2h","D3h","D4h","D5h","D6h","D7h", "D8h","D9h","DAh","DBh","DCh","DDh","DEh","DFh", "E0h","E1h","E2h","E3h","E4h","E5h","E6h","E7h", "E8h","E9h","EAh","EBh","ECh","EDh","EEh","EFh", "F0h","F1h","F2h","F3h","F4h","F5h","F6h","F7h", "F8h","F9h","FAh","FBh","FCh","FDh","FEh","FFh" }; */ void SetFileOffsets(unsigned char *nmptr,WORD *fileoff,WORD *extoff) { unsigned char *pch; unsigned char ch; pch = nmptr+lstrlen((LPSTR)nmptr); while ((ch = *pch) != '\\' && ch != ':' && pch > nmptr) pch = (unsigned char *)AnsiPrev((LPSTR)nmptr, (LPSTR)pch); if((ch = *pch) == '\\' || ch == ':') pch++; *fileoff = pch - nmptr; *extoff = 0; while ((ch = *pch) != '.' && ch != '\0') pch = (unsigned char *)AnsiNext((LPSTR)pch); if(ch == '.') { pch++; if(*pch == '\0') return; else *extoff = pch - nmptr; } } int Warning(int ID,WORD type) { unsigned char buf[500]; int retval; BOOL MsgFlagSav; if(hParentWnd != hMainwnd) { if(!WarningSem) { EnableWindow(hMainwnd,FALSE); } WarningSem++; } MsgFlagSav = DoingMsg; DoingMsg = TRUE; if(MsgFlagSav != DoingMsg) InvalidateAllStatus(); if(ID == EINSMEMORY) { retval = MessageBox(hParentWnd, (LPSTR)rgchInsMem, (LPSTR)rgchTitle, type); } else if(LoadString(hPifInstance, ID, (LPSTR)buf, sizeof(buf))) { retval = MessageBox(hParentWnd, (LPSTR)buf, (LPSTR)rgchTitle, type); } else { MessageBox(hParentWnd, (LPSTR)rgchInsMem, (LPSTR)rgchTitle, MB_ICONEXCLAMATION | MB_OK); retval = IDCANCEL; } if(hParentWnd != hMainwnd) { if(WarningSem == 1) { EnableWindow(hMainwnd,TRUE); } WarningSem--; } if(retval == 0) { /* map messagebox failure to cancel */ retval = IDCANCEL; } if(MsgFlagSav != DoingMsg) { DoingMsg = MsgFlagSav; InvalidateAllStatus(); } else { DoingMsg = MsgFlagSav; } return(retval); } PIFWNTEXT UNALIGNED *AllocInitNTExt(void) { PIFWNTEXT UNALIGNED *extNT; char buf[PIFDEFPATHSIZE*2]; char buf2[PIFDEFPATHSIZE*4]; if(PifFileSize >= PIFEDITMAXPIF - (sizeof(PIFWNTEXT) + sizeof(PIFEXTHEADER))) { return((PIFWNTEXT *)NULL); } LastPifExt->extnxthdrfloff = PifFileSize; LastPifExt = (PIFEXTHEADER *)(PifBuf + PifFileSize); LastPifExt->extnxthdrfloff = LASTHEADERPTR; LastPifExt->extfileoffset = PifFileSize + sizeof(PIFEXTHEADER); LastPifExt->extsizebytes = sizeof(PIFWNTEXT); lstrcpy((LPSTR)LastPifExt->extsig,(LPSTR)wNTHdr); PifFileSize += sizeof(PIFWNTEXT) + sizeof(PIFEXTHEADER); extNT = (PIFWNTEXT *)(PifBuf + LastPifExt->extfileoffset); extNT->dwWNTFlags = 0; extNT->dwRes1 = 0; extNT->dwRes2 = 0; fNoNTAWarn = FALSE; fNTAWarnne = FALSE; fNoNTCWarn = FALSE; fNTCWarnne = FALSE; lstrcpy((LPTSTR)buf2, (LPCTSTR)NTSys32Root); if(LoadString(hPifInstance, NTAUTOEXECFILE, (LPSTR)buf, PIFDEFPATHSIZE-1)) { lstrcat((LPTSTR)buf2, (LPCTSTR)buf); AnsiToOem(buf2, (LPTSTR)extNT->achAutoexecFile); } lstrcpy((LPTSTR)buf2, (LPCTSTR)NTSys32Root); if(LoadString(hPifInstance, NTCONFIGFILE, (LPSTR)buf, PIFDEFPATHSIZE-1)) { lstrcat((LPTSTR)buf2, (LPCTSTR)buf); AnsiToOem(buf2, (LPTSTR)extNT->achConfigFile); } return(extNT); } PIF386EXT UNALIGNED *AllocInit386Ext(void) { PIF386EXT UNALIGNED *ext386; unsigned char *src,*dst; int i; if(PifFileSize >= PIFEDITMAXPIF - (sizeof(PIF386EXT) + sizeof(PIFEXTHEADER))) { return((PIF386EXT *)NULL); } LastPifExt->extnxthdrfloff = PifFileSize; LastPifExt = (PIFEXTHEADER *)(PifBuf + PifFileSize); LastPifExt->extnxthdrfloff = LASTHEADERPTR; LastPifExt->extfileoffset = PifFileSize + sizeof(PIFEXTHEADER); LastPifExt->extsizebytes = sizeof(PIF386EXT); lstrcpy((LPSTR)LastPifExt->extsig,(LPSTR)w386Hdr); PifFileSize += sizeof(PIF386EXT) + sizeof(PIFEXTHEADER); ext386 = (PIF386EXT *)(PifBuf + LastPifExt->extfileoffset); dst = (PUCHAR)ext386->params; src = (PUCHAR)(((PIFOLD286STR *)PifBuf)->params); for(i=0;imaxmem = 640; ext386->minmem = 128; ext386->PfFPriority = 100; ext386->PfBPriority = 50; ext386->PfMaxEMMK = 1024; ext386->PfMinEMMK = 0; ext386->PfMaxXmsK = 1024; ext386->PfMinXmsK = 0; ext386->PfW386Flags = fFullScreen | fPollingDetect | fINT16Paste; if(Pif286ext30) { if(Pif286ext30->PfW286Flags & fALTTABdis286) ext386->PfW386Flags |= fALTTABdis; if(Pif286ext30->PfW286Flags & fALTESCdis286) ext386->PfW386Flags |= fALTESCdis; if(Pif286ext30->PfW286Flags & fCTRLESCdis286) ext386->PfW386Flags |= fCTRLESCdis; if(Pif286ext30->PfW286Flags & fALTPRTSCdis286) ext386->PfW386Flags |= fALTPRTSCdis; if(Pif286ext30->PfW286Flags & fPRTSCdis286) ext386->PfW386Flags |= fPRTSCdis; } ext386->PfW386Flags2 = fVidTxtEmulate | fVidNoTrpTxt | fVidNoTrpLRGrfx | fVidTextMd; /* * The following is if( > EGA), then don't trap Hi Res graphics ports * The setting of this bit is irrelevant on HERC CGA and PLASMA, * so the fact that these guys also get "caught" by this doesn't * matter. EGA is the only low res guy that matters. * */ if(GetSystemMetrics(SM_CYSCREEN) > 350) { ext386->PfW386Flags2 |= fVidNoTrpHRGrfx; } ext386->PfHotKeyScan = 0; ext386->PfHotKeyShVal = 0; ext386->PfHotKeyShMsk = 0; InMemHotKeyScan = 0; InMemHotKeyShVal = 0; InMemHotKeyShMsk = 0; NewHotKey = FALSE; SetHotKeyTextFromPIF(); return(ext386); } PIF286EXT30 UNALIGNED *AllocInit286Ext30(void) { PIF286EXT30 UNALIGNED *ext286; if(PifFileSize >= PIFEDITMAXPIF - (sizeof(PIF286EXT30) + sizeof(PIFEXTHEADER))) { return((PIF286EXT30 *)NULL); } LastPifExt->extnxthdrfloff = PifFileSize; LastPifExt = (PIFEXTHEADER *)(PifBuf + PifFileSize); LastPifExt->extnxthdrfloff = LASTHEADERPTR; LastPifExt->extfileoffset = PifFileSize + sizeof(PIFEXTHEADER); LastPifExt->extsizebytes = sizeof(PIF286EXT30); lstrcpy((LPSTR)LastPifExt->extsig,(LPSTR)w286Hdr30); PifFileSize += sizeof(PIF286EXT30) + sizeof(PIFEXTHEADER); ext286 = (PIF286EXT30 *)(PifBuf + LastPifExt->extfileoffset); ext286->PfMaxXmsK = 0; ext286->PfMinXmsK = 0; ext286->PfW286Flags = 0; if(Pif386ext) { if(Pif386ext->PfW386Flags & fALTTABdis) ext286->PfW286Flags |= fALTTABdis286; if(Pif386ext->PfW386Flags & fALTESCdis) ext286->PfW286Flags |= fALTESCdis286; if(Pif386ext->PfW386Flags & fCTRLESCdis) ext286->PfW286Flags |= fCTRLESCdis286; if(Pif386ext->PfW386Flags & fALTPRTSCdis) ext286->PfW286Flags |= fALTPRTSCdis286; if(Pif386ext->PfW386Flags & fPRTSCdis) ext286->PfW286Flags |= fPRTSCdis286; } return(ext286); } /* * PIF286EXT31 *AllocInit286Ext31(void) * { * PIF286EXT31 *ext286; * * if(PifFileSize >= PIFEDITMAXPIF - (sizeof(PIF286EXT31) + sizeof(PIFEXTHEADER))) { * return((PIF286EXT31 *)NULL); * } * * LastPifExt->extnxthdrfloff = PifFileSize; * * LastPifExt = (PIFEXTHEADER *)(PifBuf + PifFileSize); * * LastPifExt->extnxthdrfloff = LASTHEADERPTR; * LastPifExt->extfileoffset = PifFileSize + sizeof(PIFEXTHEADER); * LastPifExt->extsizebytes = sizeof(PIF286EXT31); * lstrcpy((LPSTR)LastPifExt->extsig,(LPSTR)w286Hdr31); * PifFileSize += sizeof(PIF286EXT31) + sizeof(PIFEXTHEADER); * * ext286 = (PIF286EXT31 *)(PifBuf + LastPifExt->extfileoffset); * * ext286->PfMaxEmsK = 0; * ext286->PfMinEmsK = 0; * return(ext286); * } */ UpdatePifScreenAdv(void) { unsigned char rgch[200]; if(hwndAdvPifDlg) { if(!AdvClose) { if(!LoadString(hPifInstance, PIFDONESTRNG , (LPSTR)rgch, sizeof(rgch))) { Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK); } else { SetDlgItemText(hwndAdvPifDlg,IDCANCEL,(LPSTR)rgch); } AdvClose = TRUE; if(FocusIDAdv == IDCANCEL) { SetStatusText(hwndAdvPifDlg,FocusIDAdv,TRUE); } } if(CurrMode386) { SetDlgItemInt(hwndAdvPifDlg, IDI_FPRI, Pif386ext->PfFPriority, FALSE); SetDlgItemInt(hwndAdvPifDlg, IDI_BPRI, Pif386ext->PfBPriority, FALSE); CheckDlgButton(hwndAdvPifDlg, IDI_POLL, Pif386ext->PfW386Flags & fPollingDetect ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_CLOSE, Pif386ext->PfW386Flags & fEnableClose ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_ALTTAB, Pif386ext->PfW386Flags & fALTTABdis ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_ALTESC, Pif386ext->PfW386Flags & fALTESCdis ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_CTRLESC, Pif386ext->PfW386Flags & fCTRLESCdis ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_ALTSPACE, Pif386ext->PfW386Flags & fALTSPACEdis ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_ALTENTER, Pif386ext->PfW386Flags & fALTENTERdis ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_ALTPRTSC, Pif386ext->PfW386Flags & fALTPRTSCdis ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_PRTSC, Pif386ext->PfW386Flags & fPRTSCdis ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_NOHMA, Pif386ext->PfW386Flags & fNoHMA ? FALSE : TRUE ); CheckDlgButton(hwndAdvPifDlg, IDI_INT16PST, Pif386ext->PfW386Flags & fINT16Paste ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_VMLOCKED, Pif386ext->PfW386Flags & fVMLocked ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_XMSLOCKED, Pif386ext->PfW386Flags & fXMSLocked ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_EMSLOCKED, Pif386ext->PfW386Flags & fEMSLocked ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_TEXTEMULATE, Pif386ext->PfW386Flags2 & fVidTxtEmulate ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_RETAINALLO, Pif386ext->PfW386Flags2 & fVidRetainAllo ? TRUE : FALSE ); CheckDlgButton(hwndAdvPifDlg, IDI_TRAPTXT, Pif386ext->PfW386Flags2 & fVidNoTrpTxt ? FALSE : TRUE ); CheckDlgButton(hwndAdvPifDlg, IDI_TRAPLRGRFX, Pif386ext->PfW386Flags2 & fVidNoTrpLRGrfx ? FALSE : TRUE ); CheckDlgButton(hwndAdvPifDlg, IDI_TRAPHRGRFX, Pif386ext->PfW386Flags2 & fVidNoTrpHRGrfx ? FALSE : TRUE ); SetHotKeyTextFromPIF(); } else { } } return(TRUE); } UpdatePifScreenNT(void) { unsigned char rgch[PIFDEFPATHSIZE*4]; if(hwndNTPifDlg) { if(!NTClose) { if(!LoadString(hPifInstance, PIFDONESTRNG , (LPSTR)rgch, sizeof(rgch))) { Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK); } else { SetDlgItemText(hwndNTPifDlg,IDCANCEL,(LPSTR)rgch); } NTClose = TRUE; if(FocusIDNT == IDCANCEL) { SetStatusText(hwndNTPifDlg,FocusIDNT,TRUE); } } if(CurrMode386) { OemToAnsi((LPCTSTR)PifNText->achAutoexecFile, rgch); SetDlgItemText(hwndNTPifDlg,IDI_AUTOEXEC,(LPCTSTR)rgch); OemToAnsi((LPCTSTR)PifNText->achConfigFile, rgch); SetDlgItemText(hwndNTPifDlg,IDI_CONFIG,(LPCTSTR)rgch); CheckDlgButton(hwndNTPifDlg, IDI_NTTIMER, (PifNText->dwWNTFlags & COMPAT_TIMERTIC)); } else { } } return(TRUE); } /* make the screen match the structure */ UpdatePifScreen(void) { unsigned char rgch[200]; int i; /* * make sure of nul terminator before calling OemToAnsi */ PifFile->startfile[PIFSTARTLOCSIZE-1] = '\0'; OemToAnsi((LPSTR)PifFile->startfile,(LPSTR)rgch); SetDlgItemText(hwndPifDlg, IDI_ENAME, (LPSTR)rgch); SendMessage(GetDlgItem(hwndPifDlg, IDI_ENAME), EM_SETMODIFY, FALSE, 0L); /* * NOTE: the PifFile->name field MAY NOT be nul terminated!!!!!! */ for(i = 0;i < PIFNAMESIZE; i++) rgch[i] = PifFile->name[i]; rgch[i] = '\0'; OemToAnsi((LPSTR)rgch,(LPSTR)rgch); SetDlgItemText(hwndPifDlg, IDI_ETITLE, (LPSTR)rgch); SendMessage(GetDlgItem(hwndPifDlg, IDI_ETITLE), EM_SETMODIFY, FALSE, 0L); /* * make sure of nul terminator before calling OemToAnsi */ PifFile->defpath[PIFDEFPATHSIZE-1] = '\0'; OemToAnsi((LPSTR)PifFile->defpath,(LPSTR)rgch); SetDlgItemText(hwndPifDlg, IDI_EPATH, (LPSTR)rgch); SendMessage(GetDlgItem(hwndPifDlg, IDI_EPATH), EM_SETMODIFY, FALSE, 0L); CheckDlgButton(hwndPifDlg, IDI_EXIT , PifFile->MSflags & EXITMASK ? TRUE : FALSE ); if(CurrMode386) { /* * make sure of nul terminator before calling OemToAnsi */ Pif386ext->params[PIFPARAMSSIZE-1] = '\0'; OemToAnsi((LPSTR)Pif386ext->params,(LPSTR)rgch); SetDlgItemText(hwndPifDlg, IDI_EPARM, (LPSTR)rgch); SendMessage(GetDlgItem(hwndPifDlg, IDI_EPARM), EM_SETMODIFY, FALSE, 0L); SetDlgItemInt(hwndPifDlg, IDI_MEMREQ, Pif386ext->minmem, TRUE); if (Pif386ext->maxmem) { SetDlgItemInt(hwndPifDlg, IDI_MEMDES, Pif386ext->maxmem, TRUE); } else { SetDlgItemText(hwndPifDlg, IDI_MEMDES, (LPSTR)""); } CheckRadioButton(hwndPifDlg, IDI_WND, IDI_FSCR,Pif386ext->PfW386Flags & fFullScreen ? IDI_FSCR : IDI_WND); CheckDlgButton(hwndPifDlg, IDI_BACK, Pif386ext->PfW386Flags & fBackground ? TRUE : FALSE ); CheckDlgButton(hwndPifDlg, IDI_EXCL, Pif386ext->PfW386Flags & fExclusive ? TRUE : FALSE ); if (Pif386ext->PfW386Flags2 & fVidTextMd ) { CheckRadioButton(hwndPifDlg, IDI_VMODETXT, IDI_VMODEHRGRFX, IDI_VMODETXT); } else if (Pif386ext->PfW386Flags2 & fVidLowRsGrfxMd) { CheckRadioButton(hwndPifDlg, IDI_VMODETXT, IDI_VMODEHRGRFX, IDI_VMODELRGRFX); } else { CheckRadioButton(hwndPifDlg, IDI_VMODETXT, IDI_VMODEHRGRFX, IDI_VMODEHRGRFX); } SetDlgItemInt(hwndPifDlg, IDI_EMSREQ, Pif386ext->PfMinEMMK, FALSE); SetDlgItemInt(hwndPifDlg, IDI_EMSDES, Pif386ext->PfMaxEMMK, TRUE); SetDlgItemInt(hwndPifDlg, IDI_XMAREQ, Pif386ext->PfMinXmsK, FALSE); SetDlgItemInt(hwndPifDlg, IDI_XMADES, Pif386ext->PfMaxXmsK, TRUE); UpdatePifScreenAdv(); UpdatePifScreenNT(); } else { /* * make sure of nul terminator before calling OemToAnsi */ PifFile->params[PIFPARAMSSIZE-1] = '\0'; OemToAnsi((LPSTR)PifFile->params,(LPSTR)rgch); SetDlgItemText(hwndPifDlg, IDI_EPARM, (LPSTR)rgch); SendMessage(GetDlgItem(hwndPifDlg, IDI_EPARM), EM_SETMODIFY, FALSE, 0L); SetDlgItemInt(hwndPifDlg, IDI_MEMREQ, PifFile->minmem, TRUE); /* * if (PifFile->maxmem) { * SetDlgItemInt(hwndPifDlg, IDI_MEMDES, PifFile->maxmem, TRUE); * } else { * SetDlgItemText(hwndPifDlg, IDI_MEMDES, (LPSTR)""); * } * CheckDlgButton(hwndPifDlg, IDI_DMSCREEN, PifFile->behavior & SCRMASK ? TRUE : FALSE ); * CheckDlgButton(hwndPifDlg, IDI_DMMEM , PifFile->MSflags & MEMMASK ? TRUE : FALSE ); */ CheckDlgButton(hwndPifDlg, IDI_DMKBD , PifFile->behavior & KEYMASK ? TRUE : FALSE ); CheckDlgButton(hwndPifDlg, IDI_DMCOM1 , PifFile->MSflags & COM1MASK ? TRUE : FALSE ); CheckDlgButton(hwndPifDlg, IDI_DMCOM2 , PifFile->MSflags & COM2MASK ? TRUE : FALSE ); if(Pif286ext30) { CheckDlgButton(hwndPifDlg, IDI_DMCOM3 , Pif286ext30->PfW286Flags & fCOM3_286 ? TRUE : FALSE ); CheckDlgButton(hwndPifDlg, IDI_DMCOM4 , Pif286ext30->PfW286Flags & fCOM4_286 ? TRUE : FALSE ); CheckDlgButton(hwndPifDlg, IDI_ALTTAB, Pif286ext30->PfW286Flags & fALTTABdis286 ? TRUE : FALSE ); CheckDlgButton(hwndPifDlg, IDI_ALTESC, Pif286ext30->PfW286Flags & fALTESCdis286 ? TRUE : FALSE ); CheckDlgButton(hwndPifDlg, IDI_CTRLESC, Pif286ext30->PfW286Flags & fCTRLESCdis286 ? TRUE : FALSE ); CheckDlgButton(hwndPifDlg, IDI_ALTPRTSC, Pif286ext30->PfW286Flags & fALTPRTSCdis286 ? TRUE : FALSE ); CheckDlgButton(hwndPifDlg, IDI_PRTSC, Pif286ext30->PfW286Flags & fPRTSCdis286 ? TRUE : FALSE ); CheckDlgButton(hwndPifDlg, IDI_NOSAVVID, Pif286ext30->PfW286Flags & fNoSaveVid286 ? TRUE : FALSE ); SetDlgItemInt(hwndPifDlg, IDI_XMAREQ, Pif286ext30->PfMinXmsK, FALSE); SetDlgItemInt(hwndPifDlg, IDI_XMADES, Pif286ext30->PfMaxXmsK, TRUE); } else { CheckDlgButton(hwndPifDlg, IDI_DMCOM3 , FALSE ); CheckDlgButton(hwndPifDlg, IDI_DMCOM4 , FALSE ); CheckDlgButton(hwndPifDlg, IDI_ALTTAB, FALSE ); CheckDlgButton(hwndPifDlg, IDI_ALTESC, FALSE ); CheckDlgButton(hwndPifDlg, IDI_CTRLESC, FALSE ); CheckDlgButton(hwndPifDlg, IDI_ALTPRTSC, FALSE ); CheckDlgButton(hwndPifDlg, IDI_PRTSC, FALSE ); CheckDlgButton(hwndPifDlg, IDI_NOSAVVID, FALSE ); SetDlgItemText(hwndPifDlg, IDI_XMAREQ, (LPSTR)"0"); SetDlgItemText(hwndPifDlg, IDI_XMADES, (LPSTR)"0"); } /* * if(Pif286ext31) { * SetDlgItemInt(hwndPifDlg, IDI_EMSREQ, Pif286ext31->PfMinEmsK, FALSE); * SetDlgItemInt(hwndPifDlg, IDI_EMSDES, Pif286ext31->PfMaxEmsK, TRUE); * } else { * SetDlgItemText(hwndPifDlg, IDI_EMSREQ, (LPSTR)"0"); * SetDlgItemText(hwndPifDlg, IDI_EMSDES, (LPSTR)"0"); * } */ if (PifFile->MSflags & SGMASK) { CheckDlgButton(hwndPifDlg, IDI_SENONE, TRUE); } else { CheckDlgButton(hwndPifDlg, IDI_SENONE, FALSE); } if (PifFile->MSflags & PSMASK) { CheckDlgButton(hwndPifDlg, IDI_PSNONE, TRUE); } else { CheckDlgButton(hwndPifDlg, IDI_PSNONE, FALSE); } CheckRadioButton(hwndPifDlg, IDI_PSTEXT, IDI_PSGRAPH, (PifFile->sysmem < 16 ? IDI_PSTEXT : IDI_PSGRAPH)); /* * if (PifFile->MSflags & SGMASK) { * CheckRadioButton(hwndPifDlg, IDI_SEFIRST, IDI_SELAST, IDI_SENONE); * } else { * CheckRadioButton(hwndPifDlg, IDI_SEFIRST, IDI_SELAST, * (PifFile->MSflags & GRAPHMASK ? IDI_SEGRAPH : IDI_SETEXT)); * } * * if (PifFile->MSflags & PSMASK) { * CheckRadioButton(hwndPifDlg, IDI_PSFIRST, IDI_PSLAST, IDI_PSNONE); * } else { * CheckRadioButton(hwndPifDlg, IDI_PSFIRST, IDI_PSLAST, * (PifFile->sysmem < 16 ? IDI_PSTEXT : IDI_PSGRAPH)); * } */ } return(TRUE); } BOOL UpdateParms(unsigned char *parmPtr) { int cch; unsigned char *pch; BOOL result; result = FALSE; if (SendMessage(GetDlgItem(hwndPifDlg, IDI_EPARM), EM_GETMODIFY, 0, 0L)) result = TRUE; cch = GetDlgItemText(hwndPifDlg, IDI_EPARM, (LPSTR)parmPtr, PIFPARAMSSIZE); AnsiToOem((LPSTR)parmPtr,(LPSTR)parmPtr); /* * Trim leading spaces */ for (pch = parmPtr; *pch == ' '; pch=AnsiNext(pch)) ; lstrcpy((LPSTR)parmPtr, (LPSTR)pch); /* * Point to last char */ for (pch = parmPtr; *pch; pch=AnsiNext(pch)) ; if (pch > parmPtr) pch =AnsiPrev(parmPtr,pch); /* * Trim trailing spaces */ while (*pch == ' ' && pch > parmPtr) pch=AnsiPrev(parmPtr,pch); *++pch = 0; cch = pch - parmPtr; if(!CurrMode386) { if (cch) { PifFile->sysflags |= PARMMASK; } else { PifFile->sysflags &= NOTPARMMASK; } } if (cch) { pch++; cch++; } /* * Space pad out to full field width */ for ( ; cch 0) { if(lpstrIn[i] == '%') { i++; break; } i--; } AnsiUpper(&(lpstrIn[i])); } BOOL UpdatePifNTStruc(void) { BOOL result; char rgch[60]; char szFile[PIFDEFPATHSIZE*2]; result = FALSE; /* did anything change? */ if(hwndNTPifDlg) { if(!NTClose) { if(!LoadString(hPifInstance, PIFDONESTRNG , (LPSTR)rgch, sizeof(rgch))) { Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK); } else { SetDlgItemText(hwndNTPifDlg,IDCANCEL,(LPSTR)rgch); } NTClose = TRUE; if(FocusIDNT == IDCANCEL) { SetStatusText(hwndNTPifDlg,FocusIDNT,TRUE); } } GetDlgItemText(hwndNTPifDlg,IDI_AUTOEXEC,szFile,PIFDEFPATHSIZE-1); FixString(szFile); AnsiToOem(szFile, szFile); if(lstrcmp((LPTSTR)PifNText->achAutoexecFile, (LPCTSTR)szFile)) { lstrcpy((LPTSTR)PifNText->achAutoexecFile, (LPCTSTR)szFile); fNoNTAWarn = FALSE; fNTAWarnne = FALSE; result = TRUE; } GetDlgItemText(hwndNTPifDlg,IDI_CONFIG,szFile,PIFDEFPATHSIZE-1); FixString(szFile); AnsiToOem(szFile, szFile); if(lstrcmp((LPTSTR)PifNText->achConfigFile, (LPCTSTR)szFile)) { lstrcpy((LPTSTR)PifNText->achConfigFile, (LPCTSTR)szFile); fNoNTCWarn = FALSE; fNTCWarnne = FALSE; result = TRUE; } // is checkbox checked? if(IsDlgButtonChecked(hwndNTPifDlg, IDI_NTTIMER)) { // if it wasn't, note the change if(!(PifNText->dwWNTFlags & COMPAT_TIMERTIC)) { result = TRUE; } PifNText->dwWNTFlags |= COMPAT_TIMERTIC; // mark it as checked } else { if(PifNText->dwWNTFlags & COMPAT_TIMERTIC) { result = TRUE; } PifNText->dwWNTFlags &= ~COMPAT_TIMERTIC; } } return(result); } BOOL UpdatePif386Struc(void) { int result, i; unsigned int u; unsigned long W386flags; char rgch[60]; BOOL iresult; result = FALSE; /* did anything change? */ if(UpdateParms((PUCHAR)Pif386ext->params)) result = TRUE; /* * Return of zero here ignored (set IDI_MEMREQ to 0) */ ; if ((i = (int)GetDlgItemInt(hwndPifDlg, IDI_MEMREQ, (BOOL FAR *)&iresult, TRUE)) != Pif386ext->minmem) { if(iresult) { result = TRUE; Pif386ext->minmem = i; } } if ((i = (int)GetDlgItemInt(hwndPifDlg, IDI_MEMDES, (BOOL FAR *)&iresult, TRUE)) != Pif386ext->maxmem) { if(iresult) { result = TRUE; Pif386ext->maxmem = i; } } if(UpdateHotKeyStruc()) result = TRUE; W386flags = Pif386ext->PfW386Flags; if (IsDlgButtonChecked(hwndPifDlg, IDI_FSCR)) W386flags |= fFullScreen; else W386flags &= ~fFullScreen; if (IsDlgButtonChecked(hwndPifDlg, IDI_EXCL)) W386flags |= fExclusive; else W386flags &= ~fExclusive; if (IsDlgButtonChecked(hwndPifDlg, IDI_BACK)) W386flags |= fBackground; else W386flags &= ~fBackground; if ((u = GetDlgItemInt(hwndPifDlg, IDI_EMSREQ, (BOOL FAR *)&iresult, FALSE)) != (UINT)Pif386ext->PfMinEMMK) { if(iresult) { result = TRUE; Pif386ext->PfMinEMMK = u; } } if ((i = (int)GetDlgItemInt(hwndPifDlg, IDI_EMSDES, (BOOL FAR *)&iresult, TRUE)) != Pif386ext->PfMaxEMMK) { if(iresult) { result = TRUE; Pif386ext->PfMaxEMMK = i; } } if ((u = GetDlgItemInt(hwndPifDlg, IDI_XMAREQ, (BOOL FAR *)&iresult, FALSE)) != (UINT)Pif386ext->PfMinXmsK) { if(iresult) { result = TRUE; Pif386ext->PfMinXmsK = u; } } if ((i = (int)GetDlgItemInt(hwndPifDlg, IDI_XMADES, (BOOL FAR *)&iresult, TRUE)) != Pif386ext->PfMaxXmsK) { if(iresult) { result = TRUE; Pif386ext->PfMaxXmsK = i; } } if(hwndAdvPifDlg) { if(!AdvClose) { if(!LoadString(hPifInstance, PIFDONESTRNG , (LPSTR)rgch, sizeof(rgch))) { Warning(EINSMEMORY,MB_ICONEXCLAMATION | MB_OK); } else { SetDlgItemText(hwndAdvPifDlg,IDCANCEL,(LPSTR)rgch); } AdvClose = TRUE; if(FocusIDAdv == IDCANCEL) { SetStatusText(hwndAdvPifDlg,FocusIDAdv,TRUE); } } if ((u = GetDlgItemInt(hwndAdvPifDlg, IDI_FPRI, (BOOL FAR *)&iresult, FALSE)) != (UINT)Pif386ext->PfFPriority) { if(iresult) { result = TRUE; Pif386ext->PfFPriority = u; } } if ((u = GetDlgItemInt(hwndAdvPifDlg, IDI_BPRI, (BOOL FAR *)&iresult, FALSE)) != (UINT)Pif386ext->PfBPriority) { if(iresult) { result = TRUE; Pif386ext->PfBPriority = u; } } if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_POLL)) W386flags |= fPollingDetect; else W386flags &= ~fPollingDetect; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_ALTTAB)) W386flags |= fALTTABdis; else W386flags &= ~fALTTABdis; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_ALTESC)) W386flags |= fALTESCdis; else W386flags &= ~fALTESCdis; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_CTRLESC)) W386flags |= fCTRLESCdis; else W386flags &= ~fCTRLESCdis; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_ALTSPACE)) W386flags |= fALTSPACEdis; else W386flags &= ~fALTSPACEdis; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_ALTENTER)) W386flags |= fALTENTERdis; else W386flags &= ~fALTENTERdis; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_ALTPRTSC)) W386flags |= fALTPRTSCdis; else W386flags &= ~fALTPRTSCdis; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_PRTSC)) W386flags |= fPRTSCdis; else W386flags &= ~fPRTSCdis; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_NOHMA)) W386flags &= ~fNoHMA; else W386flags |= fNoHMA; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_INT16PST)) W386flags |= fINT16Paste; else W386flags &= ~fINT16Paste; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_VMLOCKED)) W386flags |= fVMLocked; else W386flags &= ~fVMLocked; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_CLOSE)) W386flags |= fEnableClose; else W386flags &= ~fEnableClose; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_EMSLOCKED)) W386flags |= fEMSLocked; else W386flags &= ~fEMSLocked; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_XMSLOCKED)) W386flags |= fXMSLocked; else W386flags &= ~fXMSLocked; } if((Pif386ext->PfHotKeyScan != 0)||(Pif386ext->PfHotKeyShVal != 0)||(Pif386ext->PfHotKeyShMsk != 0)) W386flags |= fHasHotKey; else W386flags &= ~fHasHotKey; if (W386flags != Pif386ext->PfW386Flags) { Pif386ext->PfW386Flags = W386flags; result = TRUE; } W386flags = Pif386ext->PfW386Flags2; W386flags &= ~(fVidTextMd | fVidLowRsGrfxMd | fVidHghRsGrfxMd); if (IsDlgButtonChecked(hwndPifDlg, IDI_VMODETXT)) W386flags |= fVidTextMd; else if (IsDlgButtonChecked(hwndPifDlg, IDI_VMODELRGRFX)) W386flags |= fVidLowRsGrfxMd; else W386flags |= fVidHghRsGrfxMd; if(hwndAdvPifDlg) { if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_RETAINALLO)) W386flags |= fVidRetainAllo; else W386flags &= ~fVidRetainAllo; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_TEXTEMULATE)) W386flags |= fVidTxtEmulate; else W386flags &= ~fVidTxtEmulate; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_TRAPTXT)) W386flags &= ~fVidNoTrpTxt; else W386flags |= fVidNoTrpTxt; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_TRAPLRGRFX)) W386flags &= ~fVidNoTrpLRGrfx; else W386flags |= fVidNoTrpLRGrfx; if (IsDlgButtonChecked(hwndAdvPifDlg, IDI_TRAPHRGRFX)) W386flags &= ~fVidNoTrpHRGrfx; else W386flags |= fVidNoTrpHRGrfx; } if (W386flags != Pif386ext->PfW386Flags2) { Pif386ext->PfW386Flags2 = W386flags; result = TRUE; } return(result); } /* make the structure match the screen */ BOOL UpdatePifStruct(void) { unsigned char rgch[200]; int cch; unsigned char *pch; char flags; unsigned flags2; int result; BOOL iresult; int i; unsigned int u; result = FALSE; /* did anything change? */ if (SendMessage(GetDlgItem(hwndPifDlg, IDI_ENAME), EM_GETMODIFY, 0, 0L)) result = TRUE; cch = GetDlgItemText(hwndPifDlg, IDI_ENAME, (LPSTR)PifFile->startfile, PIFSTARTLOCSIZE); AnsiUpper((LPSTR)PifFile->startfile); AnsiToOem((LPSTR)PifFile->startfile,(LPSTR)PifFile->startfile); /* * Trim off leading spaces */ for (pch = (PUCHAR)PifFile->startfile; *pch == ' '; pch=(PUCHAR)AnsiNext((LPCTSTR)pch)) ; lstrcpy((LPTSTR)PifFile->startfile, (LPCTSTR)pch); /* * Point to last char of string */ for (pch = (PUCHAR)PifFile->startfile; *pch; pch=(PUCHAR)AnsiNext((LPCTSTR)pch)) ; if (pch > PifFile->startfile) pch=(PUCHAR)AnsiPrev((LPCTSTR)PifFile->startfile,(LPCTSTR)pch); /* * Trim trailing spaces */ while (*pch == ' ' && pch > PifFile->startfile) pch=(PUCHAR)AnsiPrev((LPCTSTR)PifFile->startfile,(LPCTSTR)pch); pch=AnsiNext(pch); *pch++ = 0; /* * Space pad out to full field width */ for (cch = pch - PifFile->startfile; cch < PIFSTARTLOCSIZE; ++cch) *pch++ = ' '; if (SendMessage(GetDlgItem(hwndPifDlg, IDI_ETITLE), EM_GETMODIFY, 0, 0L)) result = TRUE; cch = GetDlgItemText(hwndPifDlg, IDI_ETITLE, (LPSTR)rgch, PIFNAMESIZE+1); AnsiToOem((LPSTR)rgch,(LPSTR)rgch); /* * NOTE: the PifFile->name field will NOT be nul terminated if it is * PIFNAMESIZE bytes long * * Trim off leading spaces */ for (pch = rgch; *pch == ' '; pch=AnsiNext(pch)) ; lstrcpy((LPSTR)rgch, (LPSTR)pch); /* * Point to last char of string */ for (pch = rgch; *pch; pch=AnsiNext(pch)) ; if (pch > rgch) pch =AnsiPrev(rgch,pch); /* * Trim trailing spaces */ while (*pch == ' ' && pch > rgch) pch=AnsiPrev(rgch,pch); pch=AnsiNext(pch); *pch++ = '\0'; /* * Space pad out to full field width */ for (cch = pch - rgch; cch < PIFNAMESIZE; ++cch) *pch++ = ' '; for(i = 0;i < PIFNAMESIZE; i++) PifFile->name[i] = rgch[i]; if (SendMessage(GetDlgItem(hwndPifDlg, IDI_EPATH), EM_GETMODIFY, 0, 0L)) result = TRUE; cch = GetDlgItemText(hwndPifDlg, IDI_EPATH, (LPSTR)PifFile->defpath, PIFDEFPATHSIZE-1); AnsiUpper((LPSTR)PifFile->defpath); AnsiToOem((LPSTR)PifFile->defpath,(LPSTR)PifFile->defpath); /* * Trim off leading spaces */ for (pch = (PUCHAR)PifFile->defpath;*pch == ' '; pch=(PUCHAR)AnsiNext((LPCTSTR)pch)) ; lstrcpy((LPSTR)PifFile->defpath, (LPSTR)pch); /* * Point to last char of string */ for (pch = (PUCHAR)PifFile->defpath; *pch; pch=(PUCHAR)AnsiNext((LPCTSTR)pch)) ; if (pch > PifFile->defpath) pch = (PUCHAR)AnsiPrev((LPCTSTR)PifFile->defpath,(LPCTSTR)pch); /* * Trim trailing spaces */ while (*pch == ' ' && pch > PifFile->defpath) pch = (PUCHAR)AnsiPrev((LPCTSTR)PifFile->defpath,(LPCTSTR)pch); pch = (PUCHAR)AnsiNext((LPCTSTR)pch); *pch++ = 0; /* * Space pad out to full field width */ for (cch = pch - PifFile->defpath; cch < PIFDEFPATHSIZE; ++cch) *pch++ = ' '; flags = PifFile->MSflags; if (IsDlgButtonChecked(hwndPifDlg, IDI_EXIT)) flags |= EXITMASK; else flags &= NOTEXITMASK; if(CurrMode386) { if(UpdatePif386Struc()) result = TRUE; if(UpdatePifNTStruc()) result = TRUE; } else { if(UpdateParms((PUCHAR)PifFile->params)) result = TRUE; /* * Return of zero here ignored (set IDI_MEMREQ to 0) */ if ((i = (int)GetDlgItemInt(hwndPifDlg, IDI_MEMREQ, (BOOL FAR *)&iresult, TRUE)) != PifFile->minmem) { if(iresult) { result = TRUE; PifFile->minmem = i; } } /* * if ((i = (int)GetDlgItemInt(hwndPifDlg, IDI_MEMDES, (BOOL FAR *)&iresult, TRUE)) * != PifFile->maxmem) { * if(iresult) { * result = TRUE; * PifFile->maxmem = i; * } * } */ if (IsDlgButtonChecked(hwndPifDlg, IDI_PSNONE)) { flags |= PSMASK; } else { flags &= NOTPSMASK; } if (IsDlgButtonChecked(hwndPifDlg, IDI_SENONE)) { flags |= SGMASK; /* disable screen grabber */ } else { flags &= NOTSGMASK; } if (IsDlgButtonChecked(hwndPifDlg, IDI_PSTEXT) ) { if (PifFile->sysmem >= 16) PifFile->sysmem = 7; flags &= TEXTMASK; } else { if (PifFile->sysmem < 16) PifFile->sysmem = 23; flags |= GRAPHMASK; } /* * if (IsDlgButtonChecked(hwndPifDlg, IDI_PSNONE)) { * flags |= PSMASK; * } else { * flags &= NOTPSMASK; * if ((IsDlgButtonChecked(hwndPifDlg, IDI_PSTEXT)) && (PifFile->sysmem >= 16)) * PifFile->sysmem = 7; * else if ((IsDlgButtonChecked(hwndPifDlg, IDI_PSGRAPH)) && (PifFile->sysmem < 16) ) * PifFile->sysmem = 23; * } * * if (IsDlgButtonChecked(hwndPifDlg, IDI_SENONE)) { * flags |= SGMASK; * } else if (IsDlgButtonChecked(hwndPifDlg, IDI_SETEXT)) { * flags &= TEXTMASK; * flags &= NOTSGMASK; * } else if (IsDlgButtonChecked(hwndPifDlg, IDI_SEGRAPH)) { * flags |= GRAPHMASK; * flags &= NOTSGMASK; * } * * if (IsDlgButtonChecked(hwndPifDlg, IDI_DMSCREEN)) { * if (!(PifFile->behavior & SCRMASK)) * result = TRUE; * PifFile->behavior |= SCRMASK; * } else { * if (PifFile->behavior & SCRMASK) * result = TRUE; * PifFile->behavior &= NOTSCRMASK; * } * * if (IsDlgButtonChecked(hwndPifDlg, IDI_DMMEM)) * flags |= MEMMASK; * else * flags &= NOTMEMMASK; */ if (IsDlgButtonChecked(hwndPifDlg, IDI_DMKBD)) { if (!(PifFile->behavior & KEYMASK)) result = TRUE; PifFile->behavior |= KEYMASK; } else { if (PifFile->behavior & KEYMASK) result = TRUE; PifFile->behavior &= NOTKEYMASK; } if (IsDlgButtonChecked(hwndPifDlg, IDI_DMCOM1)) flags |= COM1MASK; else flags &= NOTCOM1MASK; if (IsDlgButtonChecked(hwndPifDlg, IDI_DMCOM2)) flags |= COM2MASK; else flags &= NOTCOM2MASK; if(Pif286ext30) { flags2 = 0; if (IsDlgButtonChecked(hwndPifDlg, IDI_NOSAVVID)) flags2 |= fNoSaveVid286; else flags2 &= ~fNoSaveVid286; if (IsDlgButtonChecked(hwndPifDlg, IDI_DMCOM3)) flags2 |= fCOM3_286; else flags2 &= ~fCOM3_286; if (IsDlgButtonChecked(hwndPifDlg, IDI_DMCOM4)) flags2 |= fCOM4_286; else flags2 &= ~fCOM4_286; if (IsDlgButtonChecked(hwndPifDlg, IDI_ALTTAB)) flags2 |= fALTTABdis286; else flags2 &= ~fALTTABdis286; if (IsDlgButtonChecked(hwndPifDlg, IDI_ALTESC)) flags2 |= fALTESCdis286; else flags2 &= ~fALTESCdis286; if (IsDlgButtonChecked(hwndPifDlg, IDI_CTRLESC)) flags2 |= fCTRLESCdis286; else flags2 &= ~fCTRLESCdis286; if (IsDlgButtonChecked(hwndPifDlg, IDI_ALTPRTSC)) flags2 |= fALTPRTSCdis286; else flags2 &= ~fALTPRTSCdis286; if (IsDlgButtonChecked(hwndPifDlg, IDI_PRTSC)) flags2 |= fPRTSCdis286; else flags2 &= ~fPRTSCdis286; if ((u = GetDlgItemInt(hwndPifDlg, IDI_XMAREQ, (BOOL FAR *)&iresult, FALSE)) != (UINT)Pif286ext30->PfMinXmsK) { if(iresult) { result = TRUE; Pif286ext30->PfMinXmsK = u; } } if ((i = (int)GetDlgItemInt(hwndPifDlg, IDI_XMADES, (BOOL FAR *)&iresult, TRUE)) != Pif286ext30->PfMaxXmsK) { if(iresult) { result = TRUE; Pif286ext30->PfMaxXmsK = i; } } if (flags2 != (unsigned)Pif286ext30->PfW286Flags) { Pif286ext30->PfW286Flags = flags2; result = TRUE; } } /* * if(Pif286ext31) { * * if ((u = GetDlgItemInt(hwndPifDlg, IDI_EMSREQ, (BOOL FAR *)&iresult, FALSE)) * != Pif286ext31->PfMinEmsK) { * if(iresult) { * result = TRUE; * Pif286ext31->PfMinEmsK = u; * } * } * * if ((i = (int)GetDlgItemInt(hwndPifDlg, IDI_EMSDES, (BOOL FAR *)&iresult, TRUE)) * != Pif286ext31->PfMaxEmsK) { * if(iresult) { * result = TRUE; * Pif286ext31->PfMaxEmsK = i; * } * } * } */ } if (flags != PifFile->MSflags) { PifFile->MSflags = flags; result = TRUE; } return(result); } BOOL DoFieldsWorkAdv(BOOL all) { BOOL result; BOOL result2; /* * Check to make sure numeric edit controls actually have numbers in them */ if(hwndAdvPifDlg) { GetDlgItemInt(hwndAdvPifDlg, IDI_BPRI, (BOOL FAR *)&result, FALSE); GetDlgItemInt(hwndAdvPifDlg, IDI_FPRI, (BOOL FAR *)&result2, FALSE); if((!result) || (!result2)) { Warning(errBadNumberP,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } } if (Pif386ext && CurrMode386) { if ((Pif386ext->PfMaxEMMK > 0) && ((int)Pif386ext->PfMinEMMK > Pif386ext->PfMaxEMMK)) { Warning(errEMMMaxMin386,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } if ((Pif386ext->PfMaxXmsK > 0) && ((int)Pif386ext->PfMinXmsK > Pif386ext->PfMaxXmsK)) { Warning(errXMSMaxMin386,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } } return(TRUE); } void SetNTDlgItem(int itemID) { HWND hwnd; SetStatusText(hwndNTPifDlg, itemID, TRUE); hwnd = GetDlgItem(hwndNTPifDlg, itemID); SetFocus(hwnd); SendMessage(hwnd, EM_SETSEL,0,-1); } BOOL DoFieldsWorkNT(BOOL all) { UCHAR szFile[PIFDEFPATHSIZE*2]; UCHAR szFileExp[PIFDEFPATHSIZE*4]; OFSTRUCT of; /* * Check to make sure Autoexec & Config fields have valid filenames in them */ if(hwndNTPifDlg) { if(!GetDlgItemText(hwndNTPifDlg,IDI_AUTOEXEC,szFile,PIFDEFPATHSIZE-1)) { if(!fNoNTAWarn) { if(Warning(errNoNTAFile, MB_ICONEXCLAMATION | MB_OKCANCEL | MB_DEFBUTTON2) == IDCANCEL) { SetNTDlgItem(IDI_AUTOEXEC); return(FALSE); } else fNoNTAWarn = TRUE; } } else { if(ExpandFileSpec(szFileExp, szFile, errBadAutoPath)) { if(OpenFile(szFileExp,&of,OF_EXIST) == HFILE_ERROR) { if(!fNTAWarnne){ if(Warning(errNTAFilene, MB_ICONEXCLAMATION | MB_OKCANCEL | MB_DEFBUTTON2) == IDCANCEL) { SetNTDlgItem(IDI_AUTOEXEC); return(FALSE); } else fNTAWarnne = TRUE; } } } else { SetNTDlgItem(IDI_AUTOEXEC); return(FALSE); } } if(!GetDlgItemText(hwndNTPifDlg,IDI_CONFIG,szFile,PIFDEFPATHSIZE-1)) { if(!fNoNTCWarn) { if(Warning(errNoNTCFile, MB_ICONEXCLAMATION | MB_OKCANCEL | MB_DEFBUTTON2) == IDCANCEL) { SetNTDlgItem(IDI_CONFIG); return(FALSE); } else fNoNTCWarn = TRUE; } } else { if(ExpandFileSpec(szFileExp, szFile, errBadConfigPath)) { if(OpenFile(szFileExp,&of,OF_EXIST) == HFILE_ERROR) { if(!fNTCWarnne){ if(Warning(errNTCFilene, MB_ICONEXCLAMATION | MB_OKCANCEL | MB_DEFBUTTON2) == IDCANCEL) { SetNTDlgItem(IDI_CONFIG); return(FALSE); } else fNTCWarnne = TRUE; } } } else { SetNTDlgItem(IDI_CONFIG); return(FALSE); } } } return(TRUE); } BOOL DoFieldsWork(BOOL all) { BOOL result; BOOL result2; if(!DoFieldsWorkAdv(all)) return(FALSE); if(!DoFieldsWorkNT(all)) return(FALSE); /* * Check to make sure numeric edit controls actually have numbers in them */ if(hwndPifDlg) { if(CurrMode386) { GetDlgItemInt(hwndPifDlg, IDI_MEMDES, (BOOL FAR *)&result, TRUE); } else { result = TRUE; } GetDlgItemInt(hwndPifDlg, IDI_MEMREQ, (BOOL FAR *)&result2, TRUE); if(!result2) { Warning(errBadNumberMR,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } if(!result) { Warning(errBadNumberMD,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } GetDlgItemInt(hwndPifDlg, IDI_XMADES, (BOOL FAR *)&result, TRUE); GetDlgItemInt(hwndPifDlg, IDI_XMAREQ, (BOOL FAR *)&result2, FALSE); if(!result2) { Warning(errBadNumberXEMSR,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } if(!result) { Warning(errBadNumberXEMSD,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } if(CurrMode386) { GetDlgItemInt(hwndPifDlg, IDI_EMSDES, (BOOL FAR *)&result, TRUE); GetDlgItemInt(hwndPifDlg, IDI_EMSREQ, (BOOL FAR *)&result2, FALSE); if(!result2) { Warning(errBadNumberXEMSR,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } if(!result) { Warning(errBadNumberXEMSD,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } } else { } } if (Pif386ext && CurrMode386) { if ((Pif386ext->maxmem > 0) && ((Pif386ext->minmem == -1) || (Pif386ext->minmem > Pif386ext->maxmem)) ) { Warning(errMmMaxMin386,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } } if ((PifFile->maxmem > 0) && ((PifFile->minmem == -1) || (PifFile->minmem > PifFile->maxmem)) ) { /* * Warning(errMmMaxMin286,MB_ICONEXCLAMATION | MB_OK); * return(FALSE); */ PifFile->maxmem = PifFile->minmem; } if (Pif286ext30) { if ((Pif286ext30->PfMaxXmsK > 0) && ((int)Pif286ext30->PfMinXmsK > Pif286ext30->PfMaxXmsK)) { Warning(errXMSMaxMin286,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } } /* * if (Pif286ext31) { * if ((Pif286ext31->PfMaxEmsK > 0) && ((int)Pif286ext31->PfMinEmsK > Pif286ext31->PfMaxEmsK)) { * Warning(errEMMMaxMin286,MB_ICONEXCLAMATION | MB_OK); * return(FALSE); * } * } */ if(all) { if (PifFile->lowVector > PifFile->highVector && (PifFile->sysflags & SWAPMASK)) { Warning(errHiLow,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } if(!ValidFileSpec((LPSTR)PifFile->startfile, errBadProgram)) return(FALSE); } return(TRUE); } BOOL ExpandFileSpec(LPSTR lpstrExp, LPSTR lpstr, int errID) { int len, cPath; UCHAR sz[PIFDEFPATHSIZE*2]; LPSTR psz; if(!ValidFileSpec(lpstr, errID)) { return(FALSE); } cPath = PIFDEFPATHSIZE * 2; while(*lpstr) { if(*lpstr == '%') { lpstr++; lstrcpy(sz, lpstr); psz = &sz[0]; while(*psz && (*psz != '%')) { psz++; } if(*psz != '%') { Warning(errID, MB_ICONEXCLAMATION | MB_OK | MB_DEFBUTTON2); return(FALSE); } len = psz - &sz[0]; sz[len] = '\0'; lpstr += len + 1; if(len = GetEnvironmentVariable(sz, lpstrExp, cPath)) { cPath -= len; if(cPath <= 0) { Warning(errID, MB_ICONEXCLAMATION | MB_OK | MB_DEFBUTTON2); return(FALSE); } lpstrExp += len; } else { Warning(errID, MB_ICONEXCLAMATION | MB_OK | MB_DEFBUTTON2); return(FALSE); } } else { *lpstrExp++ = *lpstr++; cPath--; } if(cPath <= 0) { Warning(errID, MB_ICONEXCLAMATION | MB_OK | MB_DEFBUTTON2); return(FALSE); } } *lpstrExp = '\0'; return(TRUE); } BOOL ValidFileSpec(LPSTR lpstr, int iCaller) { int len; LPSTR pch, pch2; int errID; BOOL fExt = FALSE; switch( iCaller ) { case errBadAutoPath: errID = errBadAutoName; break; case errBadConfigPath: errID = errBadConName; break; default: fExt = TRUE; errID = errBadProgram; break; } len = lstrlen((LPSTR)lpstr); pch = lpstr + len; pch = AnsiPrev(lpstr,pch); while (*pch && *pch != ':' && *pch != '.' && *pch != '\\' && pch > lpstr) pch=AnsiPrev(lpstr,pch); if (*pch != '.') { if(fExt) { if(Warning(errBadExt,MB_ICONEXCLAMATION|MB_OKCANCEL|MB_DEFBUTTON2) == IDCANCEL) return(FALSE); } /* * No extension given, reset pch to end of the string so * following 8 char name check doesn't trip as well unless * it is supposed to. */ pch = lpstr + len; } else if(fExt){ /* * At this point we know *pch == '.' */ if (lstrcmp((LPSTR)(pch+1), (LPSTR)"EXE") && lstrcmp((LPSTR)(pch+1), (LPSTR)"COM") && lstrcmp((LPSTR)(pch+1), (LPSTR)"BAT")) { if(Warning(errBadExt,MB_ICONEXCLAMATION|MB_OKCANCEL|MB_DEFBUTTON2) == IDCANCEL) return(FALSE); } } if(pch <= lpstr) { if(Warning(errID, MB_ICONEXCLAMATION | MB_OKCANCEL | MB_DEFBUTTON2) == IDCANCEL) return(FALSE); } else { for (pch2 = AnsiPrev(lpstr,pch); pch2 > lpstr && *pch2 != '\\' && *pch2 != ':'; pch2 = AnsiPrev(lpstr,pch2)) { if(*pch2 < ' ' || *pch2 == '*' || *pch2 == '?' || *pch2 == '[' || *pch2 == ']' || *pch2 == '>' || *pch2 == '<' || *pch2 == '|' || *pch2 == '"' || *pch2 == '=' || *pch2 == '+' || *pch2 == ';' || *pch2 == ',' || *pch2 == '.' ) { if(Warning(errID, MB_ICONEXCLAMATION | MB_OKCANCEL | MB_DEFBUTTON2) == IDCANCEL) return(FALSE); else break; /* from for loop */ } } if((*pch2 == '\\') || (*pch2 == ':')) pch2=AnsiNext(pch2); if (pch - pch2 > 8 || pch - pch2 == 0) { if(Warning(errID,MB_ICONEXCLAMATION | MB_OKCANCEL | MB_DEFBUTTON2) == IDCANCEL) return(FALSE); } } return(TRUE); } ResetStd(void) { InitStdPIFExt(); InitPif386Struc(); InitPif286Struc(); InitPifNTStruc(); return(TRUE); } LoadPifFile(PSTR pchFile) { int fh; unsigned char *pch; OFSTRUCT ofReopen; unsigned long fsize; PIFEXTHEADER UNALIGNED *hdrptr; BOOL scandone; BOOL Pif2X = FALSE; ofReopen.szPathName[0] = 0; if ((fh = OpenFile((LPSTR)pchFile, (LPOFSTRUCT)&ofReopen, OF_READ | OF_SHARE_DENY_WRITE)) != -1) { fsize = _llseek( fh, 0L, 2); _llseek( fh, 0L, 0); if(fsize >= PIFEDITMAXPIFL) { Warning(errNoOpen,MB_ICONEXCLAMATION | MB_OK); InitPifStruct(); _lclose(fh); return(FALSE); } _lread(fh, (LPSTR)PifBuf, PIFEDITMAXPIF); FileChanged = FALSE; Pif386ext = (PIF386EXT *)NULL; PifNText = (PIFWNTEXT *)NULL; Pif286ext30 = (PIF286EXT30 *)NULL; /* * Pif286ext31 = (PIF286EXT31 *)NULL; */ PifFileSize = LOWORD(fsize); if(fsize < (long)sizeof(PIFOLD286STR)) { Warning(PIFBADFIL,MB_ICONEXCLAMATION | MB_OK); ResetStd(); FileChanged = TRUE; } else if(fsize == (long)sizeof(PIFOLD286STR)) { Warning(PIFOLDFIL,MB_ICONEXCLAMATION | MB_OK); Pif2X = TRUE; ResetStd(); FileChanged = TRUE; if(Pif386ext) { Pif386ext->PfHotKeyScan = InMemHotKeyScan = 0; Pif386ext->PfHotKeyShVal = InMemHotKeyShVal = 0; Pif386ext->PfHotKeyShMsk = InMemHotKeyShMsk = 0; if (PifFile->behavior & KEYMASK) Pif386ext->PfW386Flags |= fExclusive; else Pif386ext->PfW386Flags &= ~fExclusive; if (PifFile->MSflags & MEMMASK) Pif386ext->PfW386Flags |= fBackground; else Pif386ext->PfW386Flags &= ~fBackground; if (PifFile->behavior & SCRMASK) Pif386ext->PfW386Flags |= fFullScreen; else Pif386ext->PfW386Flags &= ~fFullScreen; Pif386ext->maxmem = PifFile->maxmem; Pif386ext->minmem = PifFile->minmem; } if(Pif286ext30) { Pif286ext30->PfMaxXmsK = 0; Pif286ext30->PfMinXmsK = 0; Pif286ext30->PfW286Flags = 0; if(Pif386ext) { 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; } } /* * if(Pif286ext31) { * Pif286ext31->PfMaxEmsK = 0; * Pif286ext31->PfMinEmsK = 0; * } */ } else { if(lstrcmp((LPSTR)PifFile->stdpifext.extsig, (LPSTR)stdHdr)) { Warning(PIFBADFIL,MB_ICONEXCLAMATION | MB_OK); ResetStd(); FileChanged = TRUE; } else { hdrptr = &PifFile->stdpifext; scandone = FALSE; while(!scandone) { if(hdrptr->extnxthdrfloff == LASTHEADERPTR) { scandone = TRUE; LastPifExt = hdrptr; } else if((unsigned)hdrptr->extnxthdrfloff >= PifFileSize) { Warning(PIFBADFIL,MB_ICONEXCLAMATION | MB_OK); ResetStd(); FileChanged = TRUE; break; } if(!lstrcmp((LPSTR)hdrptr->extsig, (LPSTR)w386Hdr)) { if((hdrptr->extsizebytes == sizeof(PIF386EXT)) && ((unsigned)hdrptr->extfileoffset <= PifFileSize - sizeof(PIF386EXT))) { Pif386ext = (PIF386EXT *)(PifBuf + hdrptr->extfileoffset); SetHotKeyTextFromPIF(); } else { Warning(PIFBADFIL,MB_ICONEXCLAMATION | MB_OK); ResetStd(); FileChanged = TRUE; break; } } else if(!lstrcmp((LPSTR)hdrptr->extsig, (LPSTR)w286Hdr30)) { if((hdrptr->extsizebytes == sizeof(PIF286EXT30)) && ((unsigned)hdrptr->extfileoffset <= PifFileSize - sizeof(PIF286EXT30))) { Pif286ext30 = (PIF286EXT30 *)(PifBuf + hdrptr->extfileoffset); } else { Warning(PIFBADFIL,MB_ICONEXCLAMATION | MB_OK); ResetStd(); FileChanged = TRUE; break; } } else if(!lstrcmp((LPSTR)hdrptr->extsig, (LPSTR)wNTHdr)) { if((hdrptr->extsizebytes == sizeof(PIFWNTEXT)) && ((unsigned)hdrptr->extfileoffset <= PifFileSize - sizeof(PIFWNTEXT))) { PifNText = (PIFWNTEXT *)(PifBuf + hdrptr->extfileoffset); } else { Warning(PIFBADFIL,MB_ICONEXCLAMATION | MB_OK); ResetStd(); FileChanged = TRUE; break; } } /* * } else if(!lstrcmp((LPSTR)hdrptr->extsig, (LPSTR)w286Hdr31)) { * if((hdrptr->extsizebytes == sizeof(PIF286EXT31)) && * (hdrptr->extfileoffset <= PifFileSize - sizeof(PIF286EXT31))) { * Pif286ext31 = (PIF286EXT31 *)(PifBuf + hdrptr->extfileoffset); * } else { * Warning(PIFBADFIL,MB_ICONEXCLAMATION | MB_OK); * ResetStd(); * FileChanged = TRUE; * break; * } * } */ if(!scandone) hdrptr = (PIFEXTHEADER *)(PifBuf + hdrptr->extnxthdrfloff); } } } if(CurrMode386) { if(!Pif386ext) { if(!(Pif386ext = AllocInit386Ext())) { Warning(PIFBADFIL,MB_ICONEXCLAMATION | MB_OK); ResetStd(); } FileChanged = TRUE; } } else { /* * if(!Pif286ext31) { * if(Pif286ext30 && !Pif2X) * Warning(PIFOLDFIL2,MB_ICONEXCLAMATION | MB_OK); * if(!(Pif286ext31 = AllocInit286Ext31())) { * Warning(PIFBADFIL,MB_ICONEXCLAMATION | MB_OK); * ResetStd(); * } * FileChanged = TRUE; * } */ if(!Pif286ext30) { if(!(Pif286ext30 = AllocInit286Ext30())) { Warning(PIFBADFIL,MB_ICONEXCLAMATION | MB_OK); ResetStd(); } FileChanged = TRUE; } if((PifFile->MSflags & GRAPHMASK) && (PifFile->sysmem <= 16)) PifFile->sysmem = 23; if((!(PifFile->MSflags & GRAPHMASK)) && (PifFile->sysmem > 16)) PifFile->MSflags |= GRAPHMASK; } if(CurrMode386) { if(!PifNText) { if(!(PifNText = AllocInitNTExt())) { Warning(PIFBADFIL,MB_ICONEXCLAMATION | MB_OK); ResetStd(); } //FileChanged = TRUE; //can be confusing if they don't change it } } _lclose(fh); /* Make sure that we have valid memory values. */ if (PifFile->minmem != -1) { PifFile->minmem = max(PifFile->minmem, 0); PifFile->minmem = min(PifFile->minmem, 640); } if (PifFile->maxmem != -1) { PifFile->maxmem = max(PifFile->maxmem, 0); PifFile->maxmem = min(PifFile->maxmem, 640); } if(Pif386ext) { if (Pif386ext->minmem != -1) { Pif386ext->minmem = max(Pif386ext->minmem, 0); Pif386ext->minmem = min(Pif386ext->minmem, 640); } if (Pif386ext->maxmem != -1) { Pif386ext->maxmem = max(Pif386ext->maxmem, 0); Pif386ext->maxmem = min(Pif386ext->maxmem, 640); } Pif386ext->PfMinEMMK = max(Pif386ext->PfMinEMMK, 0); Pif386ext->PfMinEMMK = min(Pif386ext->PfMinEMMK, 16384); Pif386ext->PfMinXmsK = max(Pif386ext->PfMinXmsK, 0); Pif386ext->PfMinXmsK = min(Pif386ext->PfMinXmsK, 16384); if (Pif386ext->PfMaxEMMK != -1) { Pif386ext->PfMaxEMMK = max(Pif386ext->PfMaxEMMK, 0); Pif386ext->PfMaxEMMK = min(Pif386ext->PfMaxEMMK, 16384); } if (Pif386ext->PfMaxXmsK != -1) { Pif386ext->PfMaxXmsK = max(Pif386ext->PfMaxXmsK, 0); Pif386ext->PfMaxXmsK = min(Pif386ext->PfMaxXmsK, 16384); } if (Pif386ext->PfFPriority > 10000) { Pif386ext->PfFPriority = 10000; } if (Pif386ext->PfBPriority > 10000) { Pif386ext->PfBPriority = 10000; } if (Pif386ext->PfFPriority <= 0) { Pif386ext->PfFPriority = 1; } if (Pif386ext->PfBPriority <= 0) { Pif386ext->PfBPriority = 1; } } /* * if(Pif286ext31) { * Pif286ext31->PfMinEmsK = max(Pif286ext31->PfMinEmsK, 0); * Pif286ext31->PfMinEmsK = min(Pif286ext31->PfMinEmsK, 16384); * if (Pif286ext31->PfMaxEmsK != -1) { * Pif286ext31->PfMaxEmsK = max(Pif286ext31->PfMaxEmsK, 0); * Pif286ext31->PfMaxEmsK = min(Pif286ext31->PfMaxEmsK, 16384); * } * } */ if(Pif286ext30) { Pif286ext30->PfMinXmsK = max(Pif286ext30->PfMinXmsK, 0); Pif286ext30->PfMinXmsK = min(Pif286ext30->PfMinXmsK, 16384); if (Pif286ext30->PfMaxXmsK != -1) { Pif286ext30->PfMaxXmsK = max(Pif286ext30->PfMaxXmsK, 0); Pif286ext30->PfMaxXmsK = min(Pif286ext30->PfMaxXmsK, 16384); } } /* * Trim trailing spaces off PifFile->name */ for (pch = (PUCHAR)(PifFile->name+PIFNAMESIZE-1); *pch == ' ' && pch > PifFile->name; pch=(PUCHAR)AnsiPrev((LPCTSTR)PifFile->name,(PUCHAR)pch)) ; *++pch = 0; /* * Trim trailing spaces off PifFile->params (and Pif386ext->params) */ for (pch = (PUCHAR)(PifFile->params+PIFPARAMSSIZE-1); *pch == ' ' && pch > PifFile->params; pch=(PUCHAR)AnsiPrev((LPCTSTR)PifFile->params,(PUCHAR)pch)) ; *++pch = 0; if(Pif386ext) { for (pch = (PUCHAR)(Pif386ext->params+PIFPARAMSSIZE-1); *pch == ' ' && pch > Pif386ext->params; pch=(PUCHAR)AnsiPrev((LPCTSTR)Pif386ext->params,(PUCHAR)pch)) ; *++pch = 0; } UpdatePifScreen(); //OemToAnsi((LPSTR)ofReopen.szPathName,(LPSTR)CurPifFile); lstrcpy((LPSTR)CurPifFile, (LPSTR)ofReopen.szPathName); AnsiUpper((LPSTR)CurPifFile); SetFileOffsets(CurPifFile,&fileoffset,&extoffset); } else { fh = ofReopen.nErrCode; switch (fh) { case 2: /* File not found */ fh = errNoPIFfnf; break; case 3: /* Path not found */ fh = errNoPIFpnf; break; case 4: /* Too many open files */ fh = errNoFileHnds; break; case 5: /* Access denied */ fh = errNoAcc; break; case 32: /* Sharing violation */ fh = errSharing; break; default: fh = errNoPIFfnf; break; } Warning(fh,MB_ICONEXCLAMATION | MB_OK); } return(TRUE); } IsFileName(unsigned char *pchFile) { while (*pchFile) { if (*pchFile <= ' ') return(FALSE); pchFile=AnsiNext(pchFile); } return(TRUE); } ClearChanges(void) { SendMessage(GetDlgItem(hwndPifDlg, IDI_ENAME), EM_SETMODIFY, FALSE, 0L); SendMessage(GetDlgItem(hwndPifDlg, IDI_ETITLE), EM_SETMODIFY, FALSE, 0L); SendMessage(GetDlgItem(hwndPifDlg, IDI_EPATH), EM_SETMODIFY, FALSE, 0L); SendMessage(GetDlgItem(hwndPifDlg, IDI_EPARM), EM_SETMODIFY, FALSE, 0L); NewHotKey = FALSE; FileChanged = FALSE; return(TRUE); } int SavePifFile(PSTR pchFile, int wmcommand) { int fh; OFSTRUCT ofReopen; int i; BYTE *p; int stuffspot; int cch; #if 0 // This code is not needed since NTVDM can deal with long names in DAYTONA // 24-Jan-1994 JonPa if (!IsFileName(pchFile)) { Warning(EINVALIDFILE,MB_ICONEXCLAMATION | MB_OK); return(SAVERETRY); } #endif UpdatePifStruct(); if (DoFieldsWork(TRUE)) { PifFile->id = 0; stuffspot = -1; for(i = 0;i < PIFNAMESIZE; i++) if(!PifFile->name[i]) { PifFile->name[i] = ' '; stuffspot = i; } p = (BYTE *)&PifFile->name[ 0 ]; i = PIFSIZE; while (i--) PifFile->id += *p++; AnsiUpper((LPSTR) pchFile ); ofReopen.szPathName[0] = 0; if ((fh = OpenFile((LPSTR)pchFile, (LPOFSTRUCT)&ofReopen, OF_CREATE | OF_READWRITE | OF_SHARE_EXCLUSIVE)) == -1) { fh = ofReopen.nErrCode; switch (fh) { case 2: /* File not found */ fh = errNoCreate; break; case 3: /* Path not found */ fh = errNoPIFpnf; break; case 4: /* Too many open files */ fh = errNoFileHnds; break; case 5: /* Access denied */ fh = errCrtRO; break; case 32: /* Sharing violation */ fh = errSharing; break; default: fh = errNoCreate; break; } Warning(fh,MB_ICONEXCLAMATION | MB_OK); if(stuffspot != -1) PifFile->name[stuffspot] = '\0'; return(SAVERETRY); } cch = _lwrite(fh, (LPSTR)PifBuf, PifFileSize); if(stuffspot != -1) PifFile->name[stuffspot] = '\0'; _lclose(fh); if ((unsigned)cch != PifFileSize) { delete(pchFile); Warning(errDiskFull,MB_ICONEXCLAMATION | MB_OK); } else { } } else return(SAVEERROR); lstrcpy((LPSTR)CurPifFile, (LPSTR)pchFile); AnsiUpper((LPSTR)CurPifFile); SetFileOffsets(CurPifFile,&fileoffset,&extoffset); ClearChanges(); return(SAVEDONE); } InitStdPIFExt(void) { lstrcpy((LPSTR)PifFile->stdpifext.extsig, (LPSTR)stdHdr); PifFile->stdpifext.extnxthdrfloff = LASTHEADERPTR; PifFile->stdpifext.extfileoffset = 0; PifFile->stdpifext.extsizebytes = sizeof(PIFOLD286STR); LastPifExt = &PifFile->stdpifext; PifFileSize = sizeof(PIFNEWSTRUCT); Pif386ext = (PIF386EXT *)NULL; /* * Pif286ext31 = (PIF286EXT31 *)NULL; */ Pif286ext30 = (PIF286EXT30 *)NULL; PifNText = (PIFWNTEXT *)NULL; return(TRUE); } InitPifStruct(void) { BOOL result = TRUE; PifFile->unknown = 0; *PifFile->name = 0; PifFile->maxmem = 128; PifFile->minmem = 128; *PifFile->startfile = 0; *PifFile->defpath = 0; *PifFile->params = 0; PifFile->screen = 0x7F; PifFile->cPages = 1; PifFile->lowVector = 0; PifFile->highVector = 0x0ff; PifFile->rows = 25; PifFile->cols = 80; PifFile->rowoff = 0; PifFile->coloff = 0; PifFile->sysmem = 7; *PifFile->shprog = 0; *PifFile->shdata = 0; PifFile->behavior = SCRMASK | MASK8087; PifFile->sysflags = SWAPS; PifFile->MSflags = EXITMASK; InitStdPIFExt(); if(!(InitPif386Struc())) result = FALSE; if(!(InitPif286Struc())) result = FALSE; if(!(InitPifNTStruc())) result = FALSE; return(result); } InitPifNTStruc(void) { if(!PifNText) { if(!(PifNText = AllocInitNTExt())) { Warning(NOMODENT,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } } return(TRUE); } InitPif386Struc(void) { if(!Pif386ext) { if(!(Pif386ext = AllocInit386Ext())) { Warning(NOMODE386,MB_ICONEXCLAMATION | MB_OK); return(FALSE); } } return(TRUE); } InitPif286Struc(void) { 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); * } * } */ return(TRUE); } MaybeSaveFile(void) { int j; unsigned char *pch; int i; unsigned char *pchFile; unsigned char *pchBuf = 0; if (UpdatePifStruct() || FileChanged) { j = 0; pch = (PUCHAR)PifFile->name; i = PIFSIZE; while (i--) j += *pch++; if (j != PifFile->id) { i = Warning(warSave,MB_ICONEXCLAMATION | MB_YESNOCANCEL); switch (i) { case IDYES: if (!CurPifFile[0]) { if(pchBuf = PutUpDB(DTSAVE)) pchFile = pchBuf; else return(FALSE); /* cancelled */ } else { pchFile = CurPifFile; } CmdArgAddCorrectExtension(pchFile); i = SavePifFile(pchFile, M_SAVE); if(pchBuf) LocalFree((HANDLE)pchBuf); return(i==SAVEDONE ? TRUE : FALSE); case IDNO: return(TRUE); case IDCANCEL: return(FALSE); } } else { return(TRUE); } } else { return(TRUE); } }