|
|
/*===========================================================================*/ /* Copyright (c) 1987 - 1988, Future Soft Engineering, Inc. */ /* Houston, Texas */ /*===========================================================================*/
#define NOLSTRING TRUE /* jtf win3 mod */
#include <windows.h>
#include "port1632.h"
#include "dcrc.h"
#include "dynacomm.h"
/*---------------------------------------------------------------------------*/
#define PRTLISTSIZE 2048
/*---------------------------------------------------------------------------*/ /* Print Setup Utilities [mbb] */ /*---------------------------------------------------------------------------*/
BOOL NEAR PrtGetList(HANDLE *hList, LPSTR *lpList) { BYTE szDevices[MINRESSTR];
if((*hList = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, (DWORD) PRTLISTSIZE)) == NULL) return(FALSE);
if((*lpList = GlobalLock(*hList)) == NULL) { *hList = GlobalFree(*hList); return(FALSE); }
LoadString(hInst, STR_INI_DEVICES, (LPSTR) szDevices, sizeof(szDevices)); return(GetProfileString((LPSTR) szDevices, NULL, NULL_STR, *lpList, PRTLISTSIZE)); /* mbbx 2.01.97 ... */ /* return(GetProfileString((LPSTR) szDevices, NULL, NULL, *lpList, PRTLISTSIZE)); */ }
/*---------------------------------------------------------------------------*/
VOID NEAR PrtFreeList(HANDLE hList) { GlobalUnlock(hList); GlobalFree(hList); }
/*---------------------------------------------------------------------------*/
WORD NEAR PrtGetDevice(BYTE *pDevice, BYTE *pDriver, BYTE *pPort) { WORD PrtGetDevice; BYTE szDevice[MINRESSTR], work[STR255]; BYTE *pch;
LoadString(hInst, STR_INI_DEVICES, (LPSTR) szDevice, sizeof(szDevice)); GetProfileString((LPSTR) szDevice, (LPSTR) pDevice, NULL_STR, (LPSTR) work, sizeof(work));
*pDriver = 0; *pPort = 0; sscanf(work, "%[^,]%c%s", pDriver, szDevice, pPort);
for(pch = pDriver + strlen(pDriver); (pch > pDriver) && (*(pch-1) == 0x20); pch -= 1); *pch = 0;
if(PrtGetDevice = (*pPort != 0)) { for(pch = pPort; *pch != 0; pch += 1) if(*pch == ',') { *pch = 0; PrtGetDevice += 1; }
*(pch+1) = 0; }
return(PrtGetDevice); }
/*---------------------------------------------------------------------------*/
BOOL NEAR PrtTestDevice(BYTE *pDevice, BYTE *pDriver, BYTE *pPort, BYTE *pResult) { BYTE szWindows[MINRESSTR], szDevice[MINRESSTR]; BYTE work[STR255];
sprintf(pResult, "%s,%s,%s", pDevice, pDriver, pPort);
LoadString(hInst, STR_INI_WINDOWS, (LPSTR) szWindows, sizeof(szWindows)); LoadString(hInst, STR_INI_DEVICE, (LPSTR) szDevice, sizeof(szDevice)); GetProfileString((LPSTR) szWindows, (LPSTR) szDevice, NULL_STR, (LPSTR) work, sizeof(work)); /* changed from strcmpi -sdj */ return(lstrcmpi(pResult, work) == 0); }
/*---------------------------------------------------------------------------*/ /* PrtInitList() - [mbb] */ /*---------------------------------------------------------------------------*/
VOID NEAR PrtInitList(HWND hDlg) { HANDLE hList; LPSTR lpList; INT nSelect, nCount, ndx, ndx2; BYTE work[STR255], szDriver[80], szPort[128], szDevice[128];
SetCursor(LoadCursor(NULL, IDC_WAIT));
if(PrtGetList(&hList, &lpList)) { nSelect = -1; nCount = 0;
for(ndx = 0; (lpList[ndx] != 0) && (ndx < PRTLISTSIZE); ndx += (lstrlen(lpList + ndx) + 1)) { lstrcpy((LPSTR) work, lpList + ndx); if(PrtGetDevice(work, szDriver, szPort)) { for(ndx2 = 0; szPort[ndx2] != 0; ndx2 += (strlen(szPort + ndx2) + 1)) { if(PrtTestDevice(work, szDriver, szPort + ndx2, szDevice)) nSelect = nCount;
strcpy(szDevice, work); LoadString(hInst, STR_INI_ON, (LPSTR) szDevice + strlen(szDevice), MINRESSTR); strcpy(szDevice + strlen(szDevice), szPort + ndx2); SendDlgItemMessage(hDlg, IDPRINTNAME, LB_INSERTSTRING, -1, (LPARAM) szDevice);
nCount += 1; } } }
if(nSelect != -1) SendDlgItemMessage(hDlg, IDPRINTNAME, LB_SETCURSEL, nSelect, 0L); else { EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); EnableWindow(GetDlgItem(hDlg, IDPRTSETUP), FALSE); }
PrtFreeList(hList); }
SetCursor(LoadCursor(NULL, IDC_ARROW)); }
/*---------------------------------------------------------------------------*/ /* PrtDoCommand() - [mbb] */ /*---------------------------------------------------------------------------*/
BOOL NEAR PrtDoCommand(HWND hDlg, BOOL bSetup) { HANDLE hList, hDriver; LPSTR lpList; INT nSelect, nPorts, ndx; CHAR work[STR255], szDriver[80], szPort[128], szDevice[128]; FARPROC lpDriver;
if((nSelect = (INT)SendDlgItemMessage(hDlg, IDPRINTNAME, LB_GETCURSEL, 0, 0L)) == -1) return(TRUE);
SetCursor(LoadCursor(NULL, IDC_WAIT));
if(PrtGetList(&hList, &lpList)) { for(ndx = 0; nSelect >= 0; ndx += (lstrlen(lpList + ndx) + 1)) { lstrcpy(work, lpList + ndx); if((nPorts = PrtGetDevice(work, szDriver, szPort)) > nSelect) { for(ndx = 0; nSelect > 0; ndx += (strlen(szPort + ndx) + 1)) { if(szPort[ndx] == 0) break;
nSelect -= 1; } break; }
nSelect -= nPorts; }
PrtFreeList(hList);
if(nSelect == 0) { if(bSetup) { strcpy(szDriver + strlen(szDriver), DRIVER_FILE_TYPE+2); /* jtf 3.14 if((hDriver = fileLoadLibrary(szDriver)) != NULL) */
/*if((hDriver = MLoadLibrary((LPSTR) szDriver)) >= 32)
LoadLibrary >= 32 changed to LoadLibrary != NULL -sdj*/ #ifdef ORGCODE
if((hDriver = LoadLibrary((LPSTR) szDriver)) >= 32) /* jtf 3.14 */ #else
if((hDriver = LoadLibrary((LPSTR) szDriver)) != NULL) /* jtf 3.14 */ #endif
{ LoadString(hInst, STR_INI_DEVICEMODE, (LPSTR) szDevice, sizeof(szDevice)); if(lpDriver = GetProcAddress(hDriver, (LPSTR) szDevice)) (*lpDriver) (hDlg, hDriver, (LPSTR) work, (LPSTR) szPort);
FreeLibrary(hDriver); } } else if(!PrtTestDevice(work, szDriver, szPort + ndx, szDevice)) { LoadString(hInst, STR_INI_WINDOWS, (LPSTR) work, sizeof(work)); LoadString(hInst, STR_INI_DEVICE, (LPSTR) szDriver, sizeof(szDriver)); WriteProfileString((LPSTR) work, (LPSTR) szDriver, (LPSTR) szDevice); } } }
SetCursor(LoadCursor(NULL, IDC_ARROW));
return(bSetup); }
/*---------------------------------------------------------------------------*/ /* dbPrtSetup() - [mbb] */ /*---------------------------------------------------------------------------*/
BOOL APIENTRY dbPrtSetup(HWND hDlg, WORD message, WPARAM wParam, LONG lParam) { BOOL result;
switch(message) { case WM_INITDIALOG: initDlgPos(hDlg);
PrtInitList(hDlg); /* mbbx 2.01.149 ... */ return(TRUE);
case WM_COMMAND: switch(GET_WM_COMMAND_ID(wParam, lParam)) { case IDOK: case IDCANCEL: case IDPRTSETUP: result = (GET_WM_COMMAND_ID(wParam, lParam) != IDCANCEL); break;
case IDPRINTNAME: switch(GET_WM_COMMAND_CMD(wParam, lParam)) { case LBN_SELCHANGE: result = (SendDlgItemMessage(hDlg, IDPRINTNAME, LB_GETCURSEL, 0, 0L) != -1); EnableWindow(GetDlgItem(hDlg, IDOK), result); EnableWindow(GetDlgItem(hDlg, IDPRTSETUP), result); return(TRUE);
case LBN_DBLCLK: result = TRUE; break;
default: return(TRUE); } break;
default: return(FALSE); } break;
default: return(FALSE); }
if(result) /* mbbx 2.01.149 ... */ { if(PrtDoCommand(hDlg, GET_WM_COMMAND_ID(wParam, lParam) == IDPRTSETUP)) return(TRUE); }
EndDialog(hDlg, 0); return(TRUE); }
|