home *** CD-ROM | disk | FTP | other *** search
- /*
- copydlgs.c
-
- dialog box routines for pmfloppy
-
- Copyright G. Bryant, 1990
-
-
- Change Log
-
- 6-Jun-90 Change ParseFileName to return different value for empty
- file Name -vs- invalid file name. change SELECT to ENTER
- for IDD_DI_DIRS field in load and save.
- 8-Jun-90 Correct the busy check for Write
- */
-
-
-
-
- #define INCL_PM
- #define INCL_DOSERRORS
- #define INCL_BASE
- #include <os2.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include "pmfloppy.h"
- #include "DskIm.h"
-
- // external function prototypes
- extern VOID PutBox(PSZ, PSZ);
-
-
- // global function prototypes
- MRESULT EXPENTRY ReadDlgProc(HWND, USHORT, MPARAM, MPARAM);
- MRESULT EXPENTRY WriteDlgProc(HWND, USHORT, MPARAM, MPARAM);
- MRESULT EXPENTRY DeleteDlgProc(HWND, USHORT, MPARAM, MPARAM);
- MRESULT EXPENTRY LoadDlgProc(HWND, USHORT, MPARAM, MPARAM);
- MRESULT EXPENTRY SaveDlgProc(HWND, USHORT, MPARAM, MPARAM);
- MRESULT EXPENTRY CompDlgProc(HWND, USHORT, MPARAM, MPARAM);
- MRESULT EXPENTRY AboutDlgProc(HWND, USHORT, MPARAM, MPARAM);
-
- // local function prototypes
- VOID GetImageList(HWND, USHORT, USHORT);
- VOID GetDirList(HWND, CHAR *);
- VOID GetFileList(HWND);
- USHORT SetBox(HWND, MPARAM);
- USHORT SetEdit(HWND, USHORT);
- BOOL SetDrive(HWND, USHORT);
- BOOL ParseFileName (CHAR *, CHAR *);
- BOOL CheckLSParms(HWND, USHORT);
-
- // PM vbls
- extern HWND hWndFrame ;
-
- // User response vbls
- extern DskImage ImageBuffers[NUM_IMAGES];
- extern USHORT BufferNum;
- extern USHORT CompNum;
-
-
- // set up image list and edit boxes
- VOID GetImageList(HWND hwnd, USHORT EditB, USHORT ListB) {
-
- USHORT curBuff;
-
- for (curBuff=0;
- (curBuff < NUM_IMAGES) &&
- (ImageBuffers[curBuff].BufferName[0] != '\0');
- curBuff++) {
- WinSendDlgItemMsg(hwnd,
- ListB,
- LM_INSERTITEM,
- MPFROM2SHORT(LIT_END,0),
- MPFROMP(ImageBuffers[curBuff].BufferName));
- }
- curBuff = 0;
-
- WinSendDlgItemMsg(hwnd,
- EditB,
- EM_SETTEXTLIMIT,
- MPFROM2SHORT(BUFFERNMSZ,0),
- NULL);
-
- WinSetDlgItemText(hwnd, EditB, ImageBuffers[curBuff].BufferName);
- return;
- } // GetImageList
-
-
- //
- // return the buffer number of the selected image
- //
- USHORT SetBox(HWND hwnd, MPARAM mp1) {
-
- USHORT curBuff;
- SHORT Select;
- CHAR curBuffName[BUFFERNMSZ];
-
- // get the selection number
- Select = (USHORT) WinSendDlgItemMsg(hwnd,
- SHORT1FROMMP(mp1),
- LM_QUERYSELECTION,
- 0L,
- 0L);
- // get the selection text
- WinSendDlgItemMsg(hwnd,
- SHORT1FROMMP(mp1),
- LM_QUERYITEMTEXT,
- MPFROM2SHORT(Select,BUFFERNMSZ),
- MPFROMP(curBuffName));
- // get the buffer number
- for (curBuff=0;
- (curBuff < NUM_IMAGES) &&
- (strncmp(ImageBuffers[curBuff].BufferName,curBuffName,BUFFERNMSZ));
- curBuff++) ;
-
- return(curBuff);
- } // SetBox
-
-
- // Set the drive letter - returns true if illegal value
- BOOL SetDrive(HWND hwnd, USHORT curBuff) {
-
- WinQueryDlgItemText(hwnd,
- IDD_DI_DRV,
- 2,
- ImageBuffers[curBuff].DriveID);
- ImageBuffers[curBuff].DriveID[0] = (CHAR) toupper(ImageBuffers[curBuff].DriveID[0]);
- if (!isupper((USHORT) ImageBuffers[curBuff].DriveID[0])) {
- PutBox("Destination Drive must be a drive letter","e.g. A");
- return(TRUE);
- }
- return(FALSE);
- } // SetDrive
-
-
-
- // ReadDlgProc -- Disk Read dialog procedure.
- //
- // Output: ReadDrive -- Global name of selected drive
- MRESULT CALLBACK ReadDlgProc(HWND hwnd, USHORT id, MPARAM mp1, MPARAM mp2) {
-
- USHORT curChar;
- USHORT curBuff;
- CHAR curBuffName[BUFFERNMSZ];
- USHORT NameLen;
-
- switch (id) {
- case WM_INITDLG:
- GetImageList(hwnd, IDD_DI_FLD, IDD_DI_BOX);
- WinSendDlgItemMsg(hwnd,
- IDD_DI_DRV,
- EM_SETTEXTLIMIT,
- MPFROM2SHORT(1,0),
- NULL);
- return(0);
-
- case WM_CONTROL: // get the button that was clicked
- if (SHORT1FROMMP(mp1) == IDD_DI_BOX) {
- curBuff = SetBox(hwnd, mp1);
- switch (SHORT2FROMMP(mp1)) {
- case LN_SELECT:
- WinSetDlgItemText(hwnd,
- IDD_DI_FLD,
- ImageBuffers[curBuff].BufferName);
- return(0);
- case LN_ENTER:
- if (SetDrive(hwnd, curBuff)) return(0);
- if (ImageBuffers[curBuff].Busy) {
- PutBox("That image is busy -","please select another");
- }
- else {
- ImageBuffers[curBuff].Busy = BUSY_READ;
- BufferNum = curBuff;
- WinDismissDlg(hwnd, TRUE);
- }
- return(0);
- }
-
- }
- return(0);
-
- case WM_COMMAND:
- switch (COMMANDMSG(&id)->cmd)
- {
- case DID_OK:
- NameLen = WinQueryDlgItemText(hwnd,
- IDD_DI_FLD,
- BUFFERNMSZ,
- curBuffName);
-
- if (NameLen == 0) {
- PutBox("You must enter a buffer name,","or select 'Cancel'");
- return(0);
- }
-
- for (curChar=0;curChar < BUFFERNMSZ;curChar++)
- curBuffName[curChar] = (CHAR) toupper(curBuffName[curChar]);
-
- for (curBuff=0;
- (curBuff < NUM_IMAGES) &&
- (ImageBuffers[curBuff].BufferName[0] != '\0') &&
- (strncmp(ImageBuffers[curBuff].BufferName,curBuffName,BUFFERNMSZ));
- curBuff++) ;
-
- if (curBuff < NUM_IMAGES) {
- if (SetDrive(hwnd, curBuff)) return(0);
- if (ImageBuffers[curBuff].Busy) {
- PutBox("That image is busy -","please select another");
- }
- else {
- ImageBuffers[curBuff].Busy = BUSY_READ;
- strncpy(ImageBuffers[curBuff].BufferName,curBuffName,BUFFERNMSZ);
- BufferNum = curBuff;
- WinDismissDlg(hwnd, TRUE);
- }
-
- }
- else {
- PutBox("No image buffers left","(try deleting some)");
- }
- return(0);
-
-
- case DID_CANCEL:
- WinDismissDlg(hwnd, FALSE);
- return(0);
- } // switch on commandID
- break;
- } // switch on msgID
-
- return(WinDefDlgProc(hwnd, id, mp1, mp2));
- } // ReadDlgProc
-
-
- // WriteDlgProc -- Disk Write dialog procedure.
- //
- // Output: WriteDrive -- Global name of selected drive
- MRESULT CALLBACK WriteDlgProc(HWND hwnd, USHORT id, MPARAM mp1, MPARAM mp2) {
-
- USHORT NameLen;
- USHORT curChar;
- USHORT curBuff;
- static CHAR curBuffName[BUFFERNMSZ];
- static USHORT FormOpt;
-
- switch (id)
- {
- case WM_INITDLG:
- GetImageList(hwnd, IDD_DI_FLD, IDD_DI_BOX);
- WinSendDlgItemMsg(hwnd,
- IDD_DI_DRV,
- EM_SETTEXTLIMIT,
- MPFROM2SHORT(1,0),
- NULL);
- WinSendDlgItemMsg(hwnd,
- IDD_WRF_MAYBE,
- BM_SETCHECK,
- MPFROMSHORT(1),
- NULL);
- FormOpt = IDD_WRF_MAYBE;
- return(0);
-
- case WM_CONTROL: // get the button that was clicked
- if (SHORT1FROMMP(mp1) == IDD_DI_BOX) {
- curBuff = SetBox(hwnd, mp1);
- switch (SHORT2FROMMP(mp1)) {
- case LN_SELECT:
- WinSetDlgItemText(hwnd,
- IDD_DI_FLD,
- ImageBuffers[curBuff].BufferName);
- return(0);
- case LN_ENTER:
- if (SetDrive(hwnd, curBuff)) return(0);
- if (ImageBuffers[curBuff].Busy) {
- PutBox("That image is busy -","please select another");
- }
- else {
- ImageBuffers[curBuff].Busy = BUSY_WRITE;
- ImageBuffers[curBuff].FormatOptions = FormOpt;
- BufferNum = curBuff;
- WinDismissDlg(hwnd, TRUE);
- }
- return(0);
- }
-
- }
- else if ((SHORT1FROMMP(mp1) == IDD_WRF_NEVER) ||
- (SHORT1FROMMP(mp1) == IDD_WRF_MAYBE) ||
- (SHORT1FROMMP(mp1) == IDD_WRF_ALWAYS))
- FormOpt = SHORT1FROMMP(mp1);
- return(0);
-
- case WM_COMMAND:
- switch (COMMANDMSG(&id)->cmd)
- {
- case DID_OK:
- NameLen = WinQueryDlgItemText(hwnd,
- IDD_DI_FLD,
- BUFFERNMSZ,
- curBuffName);
-
- for (curChar=0;curChar < BUFFERNMSZ;curChar++)
- curBuffName[curChar] = (CHAR) toupper(curBuffName[curChar]);
-
- for (curBuff=0;
- (curBuff < NUM_IMAGES) &&
- (strncmp(ImageBuffers[curBuff].BufferName,curBuffName,BUFFERNMSZ));
- curBuff++) ;
-
- if ((curBuff < NUM_IMAGES) && (NameLen > 0)) {
- if (SetDrive(hwnd, curBuff)) return(0);
- if (ImageBuffers[curBuff].Busy) {
- PutBox("That image is busy -","please select another");
- }
- else {
- ImageBuffers[curBuff].Busy = BUSY_WRITE;
- strncpy(ImageBuffers[curBuff].BufferName,curBuffName,BUFFERNMSZ);
- ImageBuffers[curBuff].FormatOptions = FormOpt;
- BufferNum = curBuff;
- WinDismissDlg(hwnd, TRUE);
- }
- }
- else {
- PutBox("You must select an existing","image buffer");
-
- }
- return(0);
-
- case DID_CANCEL:
- WinDismissDlg(hwnd, FALSE);
- return(0);
- } // switch on commandID
- break;
- } // switch on msgID
-
- return(WinDefDlgProc(hwnd, id, mp1, mp2));
- } // WriteDlgProc
-
-
-
- // DeleteDlgProc -- Image Buffer Delete dialog procedure.
- //
- MRESULT CALLBACK DeleteDlgProc(HWND hwnd, USHORT id, MPARAM mp1, MPARAM mp2) {
-
- USHORT NameLen;
- USHORT curChar;
- USHORT curBuff;
- CHAR curBuffName[BUFFERNMSZ];
-
- switch (id)
- {
- case WM_INITDLG:
- GetImageList(hwnd, IDD_DI_FLD, IDD_DI_BOX);
- return(0);
-
- case WM_CONTROL: // get the button that was clicked
- if (SHORT1FROMMP(mp1) == IDD_DI_BOX) {
- curBuff = SetBox(hwnd, mp1);
- switch (SHORT2FROMMP(mp1)) {
- case LN_SELECT:
- WinSetDlgItemText(hwnd,
- IDD_DI_FLD,
- ImageBuffers[curBuff].BufferName);
- return(0);
- case LN_ENTER:
- if (ImageBuffers[curBuff].Busy)
- PutBox("That buffer is in use.","");
- else {
- // free the memory used by that buffer and coalesce the list
- DosFreeSeg(ImageBuffers[curBuff].DskSel);
- free(ImageBuffers[curBuff].DskLayout);
- while (((curBuff+1) < NUM_IMAGES) &&
- (ImageBuffers[curBuff].BufferName[0] != '\0')) {
- ImageBuffers[curBuff] = ImageBuffers[curBuff+1];
- curBuff++;
- }
- WinDismissDlg(hwnd, TRUE);
- }
- }
-
- }
- return(0);
-
- case WM_COMMAND:
- switch (COMMANDMSG(&id)->cmd)
- {
- case DID_OK:
- NameLen = WinQueryDlgItemText(hwnd,
- IDD_DI_FLD,
- BUFFERNMSZ,
- curBuffName);
-
- for (curChar=0;curChar < BUFFERNMSZ;curChar++)
- curBuffName[curChar] = (CHAR) toupper(curBuffName[curChar]);
-
- for (curBuff=0;
- (curBuff < NUM_IMAGES) &&
- (strncmp(ImageBuffers[curBuff].BufferName,curBuffName,BUFFERNMSZ));
- curBuff++) ;
-
- if ((curBuff < NUM_IMAGES) && (NameLen > 0)) {
- if (ImageBuffers[curBuff].Busy)
- PutBox("That buffer is in use.","");
- else {
- // free the memory used by that buffer and coalesce the list
- DosFreeSeg(ImageBuffers[curBuff].DskSel);
- free(ImageBuffers[curBuff].DskLayout);
- while (((curBuff+1) < NUM_IMAGES) &&
- (ImageBuffers[curBuff].BufferName[0] != '\0')) {
- ImageBuffers[curBuff] = ImageBuffers[curBuff+1];
- curBuff++;
- }
- WinDismissDlg(hwnd, TRUE);
- }
- }
- else {
- PutBox("You must select an existing","image buffer");
- }
- return(0);
-
- case DID_CANCEL:
- WinDismissDlg(hwnd, FALSE);
- return(0);
- } // switch on commandID
- break;
- } // switch on msgID
-
- return(WinDefDlgProc(hwnd, id, mp1, mp2));
- } // DeleteDlgProc
-
- VOID GetDirList(HWND hwnd, CHAR *pcCurrentPath) {
-
- static CHAR szDrive [] = " :" ;
- FILEFINDBUF findbuf ;
- HDIR hDir = 1 ;
- SHORT sDrive ;
- USHORT usDriveNum, usCurPathLen, usSearchCount = 1 ;
- ULONG ulDriveMap ;
-
- DosQCurDisk (&usDriveNum, &ulDriveMap) ;
- pcCurrentPath[0] = (CHAR) usDriveNum + '@' ;
- pcCurrentPath[1] = ':' ;
- pcCurrentPath[2] = '\\' ;
- usCurPathLen = 64 ;
- DosQCurDir(0, pcCurrentPath + 3, &usCurPathLen) ;
-
- WinSetDlgItemText (hwnd, IDD_DI_PATH, pcCurrentPath) ;
- WinSendDlgItemMsg (hwnd, IDD_DI_DIRS, LM_DELETEALL, NULL, NULL) ;
-
- for (sDrive = 0 ; sDrive < 26 ; sDrive++)
- if (ulDriveMap & 1L << sDrive) {
- szDrive [1] = (CHAR) sDrive + 'A' ;
-
- WinSendDlgItemMsg(hwnd,
- IDD_DI_DIRS,
- LM_INSERTITEM,
- MPFROM2SHORT (LIT_END, 0),
- MPFROMP (szDrive)) ;
- }
-
- DosFindFirst("*.*",&hDir,0x0017,&findbuf,sizeof findbuf,&usSearchCount,0L) ;
- while (usSearchCount) {
- if ((findbuf.attrFile & 0x0010) &&
- (findbuf.achName [0] != '.' || findbuf.achName [1]))
-
- WinSendDlgItemMsg (hwnd, IDD_DI_DIRS, LM_INSERTITEM,
- MPFROM2SHORT (LIT_SORTASCENDING, 0),
- MPFROMP (findbuf.achName)) ;
-
- DosFindNext (hDir, &findbuf, sizeof findbuf, &usSearchCount) ;
- }
- } // GetDirList
-
- VOID GetFileList(HWND hwnd) {
-
- FILEFINDBUF findbuf ;
- HDIR hDir = 1 ;
- USHORT usSearchCount = 1 ;
-
- WinSendDlgItemMsg (hwnd, IDD_DI_FILES, LM_DELETEALL, NULL, NULL) ;
-
- DosFindFirst("*.*",&hDir,0x0007,&findbuf,sizeof findbuf,&usSearchCount,0L);
- while (usSearchCount) {
- WinSendDlgItemMsg(hwnd,
- IDD_DI_FILES,
- LM_INSERTITEM,
- MPFROM2SHORT (LIT_SORTASCENDING, 0),
- MPFROMP (findbuf.achName)) ;
-
- DosFindNext(hDir, &findbuf, sizeof findbuf, &usSearchCount) ;
- }
- } // GetFileList
-
-
- // In: pcOut -- Pointer to parsed file spec
- // pcIn -- Pointer to raw file spec
- // Returns 0 if bad file name
- // 1 if nothing
- // else ok
- //
- // Note: Changes current drive and directory to pcIn
- //
- BOOL ParseFileName (CHAR *pcOut, CHAR *pcIn) {
-
- CHAR *pcLastSlash;
- CHAR *pcFileOnly;
- ULONG ulDriveMap ;
- USHORT usDriveNum;
- USHORT usDirLen = 64;
-
- strupr(pcIn);
- if (pcIn[0] == '\0') return(1);
-
- // Get drive from input string or current drive
- if (pcIn[1] == ':') {
- if (DosSelectDisk(pcIn[0] - '@')) return(0);
- pcIn += 2 ;
- }
- DosQCurDisk(&usDriveNum, &ulDriveMap) ;
-
- *pcOut++ = (CHAR) usDriveNum + '@' ;
- *pcOut++ = ':' ;
- *pcOut++ = '\\' ;
-
- // If rest of string is empty, return error
- if (pcIn[0] == '\0') return(1);
-
- // Search for last backslash. If none, could be directory.
- if (NULL == (pcLastSlash = strrchr(pcIn, '\\'))) {
- if (!DosChDir(pcIn, 0L)) return(1);
-
- // Otherwise, get current dir & attach input filename
- DosQCurDir(0, pcOut, &usDirLen);
- if (*(pcOut + strlen(pcOut) - 1) != '\\') strcat(pcOut++, "\\");
- strcat(pcOut, pcIn) ;
- return(2);
- }
- // If the only backslash is at beginning, change to root
- if (pcIn == pcLastSlash) {
- DosChDir("\\", 0L) ;
- if (pcIn[1] == '\0') return(1);
- strcpy(pcOut, pcIn + 1);
- return(2);
- }
-
- // Attempt to change directory -- Get current dir if OK
- *pcLastSlash = '\0';
- if (DosChDir(pcIn, 0L)) return(0);
- DosQCurDir(0, pcOut, &usDirLen);
-
- // Append input filename, if any
- pcFileOnly = pcLastSlash + 1;
- if (*pcFileOnly == '\0') return(1);
- if (*(pcOut + strlen(pcOut) - 1) != '\\') strcat(pcOut++, "\\");
- strcat(pcOut, pcFileOnly);
- return(2);
- } // ParseFileName
-
-
- // return true if everything is okay
- BOOL CheckLSParms(HWND hwnd, USHORT Mode) {
-
- CHAR szBuffer[FILENMSZ];
- USHORT curBuff;
- CHAR curBuffName[BUFFERNMSZ];
- USHORT NameLen;
- USHORT curChar;
- CHAR szFileName[FILENMSZ];
-
- NameLen = WinQueryDlgItemText(hwnd,
- IDD_DI_FNAME,
- FILENMSZ,
- szBuffer);
-
- switch (ParseFileName(szFileName, szBuffer)) {
- case 0:
- PutBox("Illegal file name.","");
- return(FALSE);
- case 1: // no error, just don't do anything
- return(FALSE);
- }
- NameLen = WinQueryDlgItemText(hwnd,
- IDD_DI_FLD,
- BUFFERNMSZ,
- curBuffName);
-
- if (NameLen == 0) {
- PutBox("You must enter a buffer name,","or select 'Cancel'");
- return(FALSE);
- }
-
- for (curChar=0;curChar < BUFFERNMSZ;curChar++)
- curBuffName[curChar] = (CHAR) toupper(curBuffName[curChar]);
-
- // set the current buffer - must base on mode 'cause save can only use
- // existing buffers while load can create new ones
- if (Mode == BUSY_LOAD)
- for (curBuff=0;
- (curBuff < NUM_IMAGES) &&
- (ImageBuffers[curBuff].BufferName[0] != '\0') &&
- (strncmp(ImageBuffers[curBuff].BufferName,curBuffName,BUFFERNMSZ));
- curBuff++);
- else
- for (curBuff=0;
- (curBuff < NUM_IMAGES) &&
- (strncmp(ImageBuffers[curBuff].BufferName,curBuffName,BUFFERNMSZ));
- curBuff++);
-
-
- if (NameLen < 1) {
- PutBox("You must select an","image buffer");
- return(FALSE);
- }
-
- if (curBuff < NUM_IMAGES) {
- if (ImageBuffers[curBuff].Busy)
- PutBox("That buffer is in use.","");
- else {
- strcpy(ImageBuffers[curBuff].FileName,szFileName);
- strncpy(ImageBuffers[curBuff].BufferName,curBuffName,BUFFERNMSZ);
- ImageBuffers[curBuff].DriveID[0] = ' ';
- ImageBuffers[curBuff].Busy = Mode;
- BufferNum = curBuff;
- return(TRUE);
- }
- }
- else
- PutBox("You must select an existing","image buffer");
- return(FALSE);
- } // CheckLSParms
-
-
- // LoadDlgProc -- Image Buffer Load dialog procedure.
- //
- MRESULT CALLBACK LoadDlgProc(HWND hwnd, USHORT id, MPARAM mp1, MPARAM mp2) {
-
- USHORT curBuff;
- static CHAR szCurrentPath[FILENMSZ];
- static CHAR szBuffer[FILENMSZ];
- SHORT Select;
-
- switch (id)
- {
- case WM_INITDLG:
- GetImageList(hwnd, IDD_DI_FLD, IDD_DI_BOX);
- GetDirList(hwnd, szCurrentPath) ;
- GetFileList(hwnd) ;
-
- WinSendDlgItemMsg(hwnd,
- IDD_DI_FNAME,
- EM_SETTEXTLIMIT,
- MPFROM2SHORT (FILENMSZ, 0),
- NULL) ;
- WinSetFocus(HWND_DESKTOP,WinWindowFromID(hwnd,IDD_DI_FNAME));
- return(0);
-
- case WM_CONTROL: // get the button that was clicked
- switch (SHORT1FROMMP(mp1)) {
- case IDD_DI_DIRS:
- Select = (USHORT) WinSendDlgItemMsg(hwnd,
- SHORT1FROMMP(mp1),
- LM_QUERYSELECTION,
- 0L,
- 0L) ;
-
- WinSendDlgItemMsg(hwnd,
- SHORT1FROMMP(mp1),
- LM_QUERYITEMTEXT,
- MPFROM2SHORT(Select, sizeof szBuffer),
- MPFROMP(szBuffer)) ;
- switch (SHORT2FROMMP(mp1)) {
- case LN_ENTER:
- if (szBuffer[0] == ' ') DosSelectDisk(szBuffer[1] - '@');
- else DosChDir (szBuffer, 0L);
-
- GetDirList(hwnd, szCurrentPath);
- GetFileList(hwnd);
-
- WinSetDlgItemText(hwnd, IDD_DI_FNAME, "");
- return(0);
- }
- break;
-
- case IDD_DI_FILES:
- Select = (USHORT) WinSendDlgItemMsg(hwnd,
- SHORT1FROMMP(mp1),
- LM_QUERYSELECTION,
- 0L,
- 0L) ;
-
- WinSendDlgItemMsg(hwnd,
- SHORT1FROMMP(mp1),
- LM_QUERYITEMTEXT,
- MPFROM2SHORT(Select, sizeof szBuffer),
- MPFROMP(szBuffer)) ;
- switch (SHORT2FROMMP(mp1)) {
- case LN_SELECT:
- WinSetDlgItemText(hwnd, IDD_DI_FNAME, szBuffer);
- return(0);
-
- case LN_ENTER:
- if (CheckLSParms(hwnd, BUSY_LOAD)) {
- WinDismissDlg(hwnd, TRUE);
- }
- return(0);
- }
- break ;
-
- case IDD_DI_BOX:
- curBuff = SetBox(hwnd, mp1);
- switch (SHORT2FROMMP(mp1)) {
- case LN_SELECT:
- WinSetDlgItemText(hwnd,
- IDD_DI_FLD,
- ImageBuffers[curBuff].BufferName);
- return(0);
- case LN_ENTER:
- if (ImageBuffers[curBuff].Busy)
- PutBox("That buffer is in use.","");
- else {
- if (CheckLSParms(hwnd, BUSY_LOAD)) {
- WinDismissDlg(hwnd, TRUE);
- }
- }
- }
- }
- return(0);
-
- case WM_COMMAND:
- switch (COMMANDMSG(&id)->cmd)
- {
- case DID_OK:
- if (CheckLSParms(hwnd, BUSY_LOAD)) {
- WinDismissDlg(hwnd, TRUE);
- }
- return(0);
-
- case DID_CANCEL:
- WinDismissDlg(hwnd, FALSE);
- return(0);
- } // switch on commandID
- break;
- } // switch on msgID
-
- return(WinDefDlgProc(hwnd, id, mp1, mp2));
- } // LoadDlgProc
-
-
- // SaveDlgProc -- Image Buffer Save dialog procedure.
- //
- MRESULT CALLBACK SaveDlgProc(HWND hwnd, USHORT id, MPARAM mp1, MPARAM mp2) {
-
- USHORT curBuff;
- static CHAR szCurrentPath [FILENMSZ];
- static CHAR szBuffer [FILENMSZ];
- SHORT Select;
-
- switch (id)
- {
- case WM_INITDLG:
- GetImageList(hwnd, IDD_DI_FLD, IDD_DI_BOX);
- GetDirList(hwnd, szCurrentPath) ;
- GetFileList(hwnd) ;
-
- WinSendDlgItemMsg(hwnd,
- IDD_DI_FNAME,
- EM_SETTEXTLIMIT,
- MPFROM2SHORT (FILENMSZ, 0),
- NULL) ;
- return(0);
-
- case WM_CONTROL: // get the button that was clicked
- switch (SHORT1FROMMP(mp1)) {
- case IDD_DI_DIRS:
- Select = (USHORT) WinSendDlgItemMsg(hwnd,
- SHORT1FROMMP(mp1),
- LM_QUERYSELECTION,
- 0L,
- 0L) ;
-
- WinSendDlgItemMsg(hwnd,
- SHORT1FROMMP(mp1),
- LM_QUERYITEMTEXT,
- MPFROM2SHORT(Select, sizeof szBuffer),
- MPFROMP(szBuffer)) ;
- switch (SHORT2FROMMP(mp1)) {
- case LN_ENTER:
- if (szBuffer[0] == ' ') DosSelectDisk(szBuffer[1] - '@');
- else DosChDir (szBuffer, 0L);
-
- GetDirList(hwnd, szCurrentPath);
- GetFileList(hwnd);
-
- WinSetDlgItemText(hwnd, IDD_DI_FNAME, "");
- return(0);
- }
- break;
-
- case IDD_DI_FILES:
- Select = (USHORT) WinSendDlgItemMsg(hwnd,
- SHORT1FROMMP(mp1),
- LM_QUERYSELECTION,
- 0L,
- 0L) ;
-
- WinSendDlgItemMsg(hwnd,
- SHORT1FROMMP(mp1),
- LM_QUERYITEMTEXT,
- MPFROM2SHORT(Select, sizeof szBuffer),
- MPFROMP(szBuffer)) ;
- switch (SHORT2FROMMP(mp1)) {
- case LN_SELECT:
- WinSetDlgItemText(hwnd, IDD_DI_FNAME, szBuffer);
- return(0);
-
- case LN_ENTER:
- if (CheckLSParms(hwnd, BUSY_SAVE)) {
- WinDismissDlg(hwnd, TRUE);
- }
- return(0);
- }
- break ;
-
- case IDD_DI_BOX:
- curBuff = SetBox(hwnd, mp1);
- switch (SHORT2FROMMP(mp1)) {
- case LN_SELECT:
- WinSetDlgItemText(hwnd,
- IDD_DI_FLD,
- ImageBuffers[curBuff].BufferName);
- return(0);
- case LN_ENTER:
- if (ImageBuffers[curBuff].Busy)
- PutBox("That buffer is in use.","");
- else {
- if (CheckLSParms(hwnd, BUSY_SAVE)) {
- WinDismissDlg(hwnd, TRUE);
- }
- }
- }
- } // switch for CONTROL
- return(0);
-
- case WM_COMMAND:
- switch (COMMANDMSG(&id)->cmd)
- {
- case DID_OK:
- if (CheckLSParms(hwnd, BUSY_SAVE)) {
- WinDismissDlg(hwnd, TRUE);
- }
- return(0);
-
- case DID_CANCEL:
- WinDismissDlg(hwnd, FALSE);
- return(0);
- } // switch on commandID
- break;
- } // switch on msgID
-
- return(WinDefDlgProc(hwnd, id, mp1, mp2));
- } // SaveDlgProc
-
-
-
- //
- // return the buffer number of the field in the edit box
- //
- USHORT SetEdit(HWND hwnd, USHORT EditB) {
-
- USHORT curBuff;
- USHORT curChar;
- CHAR curBuffName[BUFFERNMSZ];
- USHORT NameLen;
-
- NameLen = WinQueryDlgItemText(hwnd,
- EditB,
- BUFFERNMSZ,
- curBuffName);
-
- if (NameLen == 0) {
- PutBox("You must enter an image name,"," or select 'Cancel'");
- return(NUM_IMAGES+1);
- }
-
- for (curChar=0;curChar < BUFFERNMSZ;curChar++)
- curBuffName[curChar] = (CHAR) toupper(curBuffName[curChar]);
-
- for (curBuff=0;
- (curBuff < NUM_IMAGES) &&
- (ImageBuffers[curBuff].BufferName[0] != '\0') &&
- (strncmp(ImageBuffers[curBuff].BufferName,curBuffName,BUFFERNMSZ));
- curBuff++) ;
-
- if (curBuff == NUM_IMAGES) {
- PutBox("You must select an existing","image buffer");
- return(NUM_IMAGES+1);
- }
-
- if (ImageBuffers[curBuff].Busy) {
- PutBox("The image is busy -","please select another");
- return(NUM_IMAGES+1);
- }
-
- return(curBuff);
- }
-
- // CompDlgProc -- Image Buffer Compare dialog procedure.
- //
- MRESULT CALLBACK CompDlgProc(HWND hwnd, USHORT id, MPARAM mp1, MPARAM mp2) {
-
- USHORT curBuff;
-
- switch (id)
- {
- case WM_INITDLG:
- GetImageList(hwnd, IDD_DI_FLD, IDD_DI_BOX);
- GetImageList(hwnd, IDD_CM_FLD, IDD_CM_BOX);
- BufferNum = NUM_IMAGES+1;
- CompNum = NUM_IMAGES+1;
- return(0);
-
- case WM_CONTROL: // get the button that was clicked
- curBuff = SetBox(hwnd, mp1);
- switch (SHORT1FROMMP(mp1)) {
-
- case IDD_DI_BOX:
- switch (SHORT2FROMMP(mp1)) {
- case LN_SELECT:
- WinSetDlgItemText(hwnd,
- IDD_DI_FLD,
- ImageBuffers[curBuff].BufferName);
- return(0);
- case LN_ENTER:
- BufferNum = SetEdit(hwnd, IDD_DI_FLD);
- CompNum = SetEdit(hwnd, IDD_CM_FLD);
- if ((CompNum == NUM_IMAGES+1) ||
- (CompNum == BufferNum))
- PutBox("You must select two","different (and existing) images");
- else {
- ImageBuffers[BufferNum].Busy = BUSY_COMP;
- ImageBuffers[CompNum].Busy = BUSY_COMP;
- WinDismissDlg(hwnd, TRUE);
- }
- }
- break;
- case IDD_CM_BOX:
- switch (SHORT2FROMMP(mp1)) {
- case LN_SELECT:
- WinSetDlgItemText(hwnd,
- IDD_CM_FLD,
- ImageBuffers[curBuff].BufferName);
- CompNum = curBuff;
- return(0);
- case LN_ENTER:
- BufferNum = SetEdit(hwnd, IDD_DI_FLD);
- CompNum = SetEdit(hwnd, IDD_CM_FLD);
- if ((BufferNum == NUM_IMAGES+1) ||
- (BufferNum == CompNum))
- PutBox("You must select two","different (and existing) images");
- else {
- ImageBuffers[BufferNum].Busy = BUSY_COMP;
- ImageBuffers[CompNum].Busy = BUSY_COMP;
- WinDismissDlg(hwnd, TRUE);
- }
- }
- break;
- } // switch for CONTROL
- return(0);
-
- case WM_COMMAND:
- switch (COMMANDMSG(&id)->cmd)
- {
- case DID_OK:
- BufferNum = SetEdit(hwnd, IDD_DI_FLD);
- CompNum = SetEdit(hwnd, IDD_CM_FLD);
- ImageBuffers[BufferNum].Busy = BUSY_COMP;
- ImageBuffers[CompNum].Busy = BUSY_COMP;
- WinDismissDlg(hwnd, TRUE);
- return(0);
-
- case DID_CANCEL:
- WinDismissDlg(hwnd, FALSE);
- return(0);
- } // switch on commandID
- break;
- } // switch on msgID
-
- return(WinDefDlgProc(hwnd, id, mp1, mp2));
- } // CompDlgProc
-
-
- // AboutDlgProc -- About box dialog procedure.
- //
- MRESULT CALLBACK AboutDlgProc(HWND hwnd, USHORT id, MPARAM mp1, MPARAM mp2)
- {
-
- switch (id)
- {
- case WM_COMMAND:
- switch (COMMANDMSG(&id)->cmd)
- {
- case DID_OK:
- case DID_CANCEL:
- WinDismissDlg(hwnd, TRUE);
- return 0;
- } // switch on commandID
- break;
- } // switch on msgID
-
- return(WinDefDlgProc(hwnd, id, mp1, mp2));
- } // AboutDlgProc
-
-
-