windows-nt/Source/XPSP1/NT/shell/osshell/accesory/terminal/initcode.c

807 lines
26 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*===========================================================================*/
/* Copyright (c) 1987 - 1988, Future Soft Engineering, Inc. */
/* Houston, Texas */
/*===========================================================================*/
#define NOGDICAPMASKS TRUE
#define NOVIRTUALKEYCODES TRUE
#define NOICONS TRUE
#define NOKEYSTATES TRUE
#define NOSYSCOMMANDS TRUE
#define NOATOM TRUE
#define NOCLIPBOARD TRUE
#define NODRAWTEXT TRUE
#define NOMINMAX TRUE
#define NOOPENFILE TRUE
#define NOSCROLL TRUE
#define NOHELP TRUE
#define NOPROFILER TRUE
#define NODEFERWINDOWPOS TRUE
#define NOPEN TRUE
#define NO_TASK_DEFINES TRUE
#define NOLSTRING TRUE
#define WIN31
#include <windows.h>
#include <port1632.h>
#include "dcrc.h"
#include "dynacomm.h"
#include "task.h"
#include "video.h"
#include <stdlib.h> /* adding for _searchenv and exit crt -sdj*/
VOID NEAR PASCAL DestroyWindows()
{
if(hdbmyControls)
DestroyWindow(hdbmyControls);
if(hdbXferCtrls)
DestroyWindow(hdbXferCtrls);
if(hTermWnd)
DestroyWindow(hTermWnd);
}
/*---------------------------------------------------------------------------*/
/* WinMain() - entry point from Windows [mbb] */
/*---------------------------------------------------------------------------*/
int APIENTRY WinMain(HANDLE hInst, HANDLE hPrevInst, LPSTR lpCmdLine, INT nCmdShow)
{
CHAR errmsg[115],caption[18];
VOID (APIENTRY *lpfnRegisterPenApp)(WORD, BOOL) = NULL;
readDateTime(startTimer);
trmParams.comDevRef = ITMNOCOM;
if(!initConnectors(TRUE))
return (FALSE);
/* Added 02/2591 w-dougw check that all windows are created. */
if(!initWindows(hInstance, hPrevInstance, cmdShow))
{
LoadString(hInstance,STR_ERRCAPTION,caption,sizeof(caption));
LoadString(hInstance,STR_OUTOFMEMORY,errmsg,79);
MessageBox(NULL,errmsg,caption,MB_ICONHAND|MB_SYSTEMMODAL);
return(FALSE);
}
initDialogs();
if(!setup())
{
LoadString(hInstance,STR_ERRCAPTION,caption,sizeof(caption));
LoadString(hInstance,STR_OUTOFMEMORY,errmsg,79);
MessageBox(NULL,errmsg,caption,MB_ICONHAND|MB_SYSTEMMODAL);
return(FALSE);
}
DEBOUT("Calling: %s\n","readCmdLine()");
readCmdLine(lpszCmdLine);
DEBOUT("Outof: %s\n","readCmdLine()");
DEBOUT("Calling: %s\n","PrintFileInit()");
PrintFileInit(); /* jtfterm */
DEBOUT("Outof: %s\n","PrintFileInit()");
/* Register as a good little pen-windows app
*/
/* NOTE**** have to confirm that this is the way to go GetSystemMet RC-sdj*/
/* added typecasting of (HANDLE) to param 1 */
if (lpfnRegisterPenApp = GetProcAddress((HANDLE)GetSystemMetrics(SM_PENWINDOWS),
"RegisterPenApp"))
(*lpfnRegisterPenApp)(1, TRUE);
DEBOUT("Calling: %s\n","mainProcess()");
mainProcess(); /* now load _WINMAIN segment */
DEBOUT("Outof: %s\n","mainProcess()");
/* Make sure to de-register if you register
*/
if (lpfnRegisterPenApp)
(*lpfnRegisterPenApp)(1, FALSE);
PrintFileShutDown(); /* jtfterm */
DestroyWindow(hdbXferCtrls); /* rjs swat */
DestroyWindow(hdbmyControls); /* jtf 3.33 */
DestroyWindow(hItWnd); /* rjs swat */
freeItResources();
exit(msg.wParam);
// ExitProcess((DWORD)msg.wParam); should this be used instead of exit()?-sdj
}
/*---------------------------------------------------------------------------*/
/* initWndClass() - [mbb] */
/*---------------------------------------------------------------------------*/
BOOL initWndClass()
{
WNDCLASS wndClass;
wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = DC_WndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInst;
wndClass.hIcon = (HICON) NULL;
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)(COLOR_BACKGROUND+1);
wndClass.lpszMenuName = (LPSTR) szAppName_private;
wndClass.lpszClassName = (LPSTR) szAppName_private;
if(!RegisterClass((LPWNDCLASS) &wndClass)) /* register DYNACOMM class */
return(FALSE);
wndClass.style = CS_DBLCLKS; /* jtf 3.21 | CS_HREDRAW | CS_VREDRAW; */
wndClass.lpfnWndProc = TF_WndProc;
wndClass.hIcon = (HICON) NULL;
wndClass.hCursor = LoadCursor(NULL, IDC_IBEAM);
wndClass.hbrBackground = (HBRUSH) NULL;
wndClass.lpszMenuName = (LPSTR) NULL;
wndClass.lpszClassName = (LPSTR) DC_WNDCLASS;
if(!RegisterClass((LPWNDCLASS) &wndClass)) /* register TERMINAL class */
return(FALSE);
return(TRUE);
}
/*---------------------------------------------------------------------------*/
/* initPort () - Initialize hTE text rectangles and init thePort */
/* thePort is always 0 or an active DC of hTermWnd */
/* portLocks is count of number of un'releasePort'ed getPort calls */
extern BOOL insertionPoint;
VOID initPort ()
{
insertionPoint = TRUE;
thePort = 0;
portLocks = 0;
hTE.active = TRUE;
hTE.selStart = hTE.selEnd = MAXROWCOL;
/* Added 02/22/91 for win 3.1 common dialog interface */
hDevNames = NULL;
hDevMode = NULL;
}
/*---------------------------------------------------------------------------*/
/* initIcon() */
/*---------------------------------------------------------------------------*/
VOID APIENTRY nextFlash();
VOID initIcon()
{
CHAR temp[10];
icon.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(ICO_DYNACOMM));
icon.flash = FALSE;
icon.dx = GetSystemMetrics(SM_CXICON)/16;
icon.dy = GetSystemMetrics(SM_CYICON)/16;
}
/*---------------------------------------------------------------------------*/
/* createWindows() - Determine tube size and create all Windows. */
/*---------------------------------------------------------------------------*/
BOOL createWindows(cmdShow)
INT cmdShow;
{
INT ndx;
HMENU hSysMenu;
BYTE work[80], work1[80], work2[80];
LoadString(hInst, STR_APPNAME, (LPSTR) work, MINRESSTR);
strcpy(work+strlen(work), " - ");
LoadString(hInst, STR_TERMINAL, (LPSTR) work+strlen(work), MINRESSTR);
if(!(hItWnd = CreateWindow((LPSTR) szAppName_private,
(LPSTR) work,
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
(HWND) NULL,
(HMENU) NULL,
(HANDLE) hInst,
(LPSTR) NULL)))
return(FALSE);
LoadString(hInst, STR_INI_MAXIMIZED, (LPSTR) work, MINRESSTR);
if(!GetProfileInt((LPSTR) szAppName_private, (LPSTR) work, 0) ||
(cmdShow == SW_SHOWMINNOACTIVE) || (cmdShow == SW_SHOWMINIMIZED) || (cmdShow == SW_MINIMIZE))
{
ShowWindow(hItWnd, cmdShow);
}
else
ShowWindow(hItWnd, SW_SHOWMAXIMIZED);
if(!(hdbmyControls = CreateDialog(hInst, getResId(IDDBMYCONTROLS),
hItWnd, dbmyControls)))
{
return(FALSE);
}
for(ndx = 0; ndx < DCS_NUMFKEYS; ndx += 1) /* mbbx 2.00: moved from hidemyControls... */
{
fKeyHandles[ndx] = GetDlgItem(hdbmyControls, IDFK1 + ndx);
DEBOUT("createWindows: fKeyHandles[]=%lx from GetDlgItem()\n",fKeyHandles[ndx]);
}
LoadString(hInst, STR_TERMINAL, (LPSTR) work, MINRESSTR);
if(!(hTermWnd = CreateWindow((LPSTR) DC_WNDCLASS,
(LPSTR) work,
/* Removed WS_THICKFRAME jtf 3.21 */
WS_CHILD | WS_VSCROLL | WS_HSCROLL | WS_CLIPSIBLINGS | CS_BYTEALIGNWINDOW,
0, 0, 0, 0,
hItWnd,
(HMENU) NULL,
(HANDLE) hInst,
(LPSTR) NULL)))
return(FALSE);
/* jtf 3.33 hSysMenu = GetSystemMenu(hTermWnd, FALSE);
for(ndx = GetMenuItemCount(hSysMenu)-1; ndx >= 0; ndx -= 1)
{
if(GetMenuString(hSysMenu, ndx, (LPSTR) work, 80, MF_BYPOSITION))
{
sscanf(work, "%s %s", work1, work2);
sprintf(work, "%s\t xxxxCtrl+%s", work1, work2+4);
ChangeMenu(hSysMenu, ndx, (LPSTR) work, GetMenuItemID(hSysMenu, ndx),
MF_CHANGE | MF_BYPOSITION | GetMenuState(hSysMenu, ndx, MF_BYPOSITION));
}
} */
if(!(hdbXferCtrls = CreateDialog(hInst, getResId(IDDBXFERCTRLS),
hTermWnd, dbmyControls)))
return(FALSE);
/* mbbx 1.04 */
xferCtlStop = GetDlgItem(hdbXferCtrls, IDSTOP); /* mbbx 2.00: moved from hidemyControls()... */
xferCtlPause = GetDlgItem(hdbXferCtrls, IDPAUSE);
xferCtlScale = GetDlgItem(hdbXferCtrls, IDSCALE);
showXferCtrls(NULL);
}
/*---------------------------------------------------------------------------*/
/* sizeWindows() - */
/*---------------------------------------------------------------------------*/
VOID sizeWindows()
{
RECT fKeysRect;
RECT ctrlsRect;
RECT termRect;
setDefaultFonts();
GetWindowRect(hdbmyControls, (LPRECT) &fKeysRect);
GetWindowRect(fKeyHandles[0], (LPRECT) &ctrlsRect); /* mbbx 2.00: fkeys... */
MoveWindow(hdbmyControls, 0, fKeysRect.top, fKeysRect.right,
fKeysHeight = ((ctrlsRect.bottom - ctrlsRect.top) * 2), FALSE);
GetClientRect(hItWnd, (LPRECT) &fKeysRect); /* mbbx 2.00: may not init maximized... */
sizeFkeys(MAKELONG(fKeysRect.right, fKeysRect.bottom));
GetWindowRect(hdbXferCtrls, (LPRECT) &ctrlsRect); /* mbbx 1.04: fkeys... */
ctrlsHeight = ctrlsRect.bottom - ctrlsRect.top;
initChildSize(&termRect);
MoveWindow(hTermWnd, 0, 0, termRect.right, termRect.bottom, FALSE); /* jtf 3.21 */
}
/*---------------------------------------------------------------------------*/
/* initWindows() - */
/*---------------------------------------------------------------------------*/
BOOL initWindows(hInstance, hPrevInstance, cmdShow)
HANDLE hInstance;
HANDLE hPrevInstance;
INT cmdShow;
{
hInst = hInstance;
/* Added 02/26/91 for window existence */
hItWnd = NULL;
hdbmyControls = NULL;
hTermWnd = NULL;
hdbXferCtrls = NULL;
hEdit = NULL;
fKeyHdl = NULL;
LoadString(hInst, STR_APPNAME_PRIVATE, (LPSTR) szAppName_private, 20);
LoadString(hInst, STR_APPNAME, (LPSTR) szAppName, 20);
LoadString(hInst, STR_DEVELOPER, (LPSTR) szMessage, 80);
LoadString(hInst, STR_NOMEMORY,(LPSTR)NoMemStr,sizeof(NoMemStr)); /* rjs msoft ??? */
setDefaultAttrib(TRUE); /* mbbx 1.04: ...szAppName loaded */
if(!hPrevInstance)
{
if(!initWndClass()) /* mbbx 1.04 ... */
return(FALSE);
}
initPort();
initIcon();
theBrush = GetStockObject (WHITE_BRUSH);
blackBrush = GetStockObject (BLACK_BRUSH);
if(!createWindows(cmdShow))
return(FALSE);
sizeWindows();
maxScreenLine = MAXSCREENLINE; /* rjs moved from size windows */
hMenu = GetMenu(hItWnd);
return(TRUE);
}
/*---------------------------------------------------------------------------*/
/* initDialogs() - Do all dialogbox initialization. [scf] */
/*---------------------------------------------------------------------------*/
VOID initDialogs() /* mbbx: remove ALL of these... */
{
}
/*---------------------------------------------------------------------------*/
/* dbPortInit() - [mbb] */
/*---------------------------------------------------------------------------*/
BOOL APIENTRY dbPortInit(hDlg, message, wParam, lParam) /* mbbx 2.01.10 ... */
HWND hDlg;
UINT message;
WPARAM wParam;
LONG lParam;
{
#ifdef WIN32
WORD temp_wParam;
#endif
switch(message)
{
case WM_INITDIALOG:
initDlgPos(hDlg);
initComDevSelect(hDlg, ITMCONNECTOR, TRUE);
return(TRUE);
case WM_COMMAND:
switch(GET_WM_COMMAND_ID(wParam, lParam))
{
case IDOK:
break;
case ITMCONNECTOR:
if(GET_WM_COMMAND_CMD(wParam, lParam) == LBN_DBLCLK)
break;
return(TRUE);
}
break;
default:
return(FALSE);
}
trmParams.comPortRef = getComDevSelect(hDlg, ITMCONNECTOR, &trmParams.newDevRef);
trmParams.fResetDevice = TRUE;
#ifdef WIN32
/* code in next block passes address of wParam to function*/
/* so we pass temp variable instead, since we need extract ID from wParam under WIN32*/
temp_wParam = GET_WM_COMMAND_ID(wParam, lParam);
#endif
#ifdef ORGCODE
trmParams.comPortRef = getComDevSelect(hDlg, ITMCONNECTOR, (BYTE *) &wParam);
#else
trmParams.comPortRef = getComDevSelect(hDlg, ITMCONNECTOR, (BYTE *) &temp_wParam);
#endif
resetSerial(&trmParams, TRUE, TRUE, NULL); /* slc swat */
if(trmParams.comDevRef != trmParams.newDevRef)
{
exitSerial();
return(TRUE);
}
exitSerial();
#ifdef ORGCODE
EndDialog(hDlg, (INT) getComDevSelect(hDlg, ITMCONNECTOR, (BYTE *) &wParam));
#else
EndDialog(hDlg, (INT) getComDevSelect(hDlg, ITMCONNECTOR, (BYTE *) &temp_wParam));
#endif
return(TRUE);
}
/*---------------------------------------------------------------------------*/
/* setProfileExtent() - [mbb] */
/*---------------------------------------------------------------------------*/
/* mbbx: 1.01 - moved from itutil1.c */
BOOL NEAR setProfileExtent(section, extent) /* mbbx 2.00: NEAR call... */
BYTE *section;
BYTE *extent;
{
BOOL setProfileExtent = FALSE;
BYTE str[80];
BYTE temp[80];
if(!GetProfileString((LPSTR) section, (LPSTR) extent, (LPSTR) NULL_STR, (LPSTR) temp, 80))
{
strcpy(temp, extent);
AnsiLower((LPSTR) temp);
sprintf(str, "%s.exe ^.%s", szAppName_private, temp);
AnsiLower((LPSTR) str);
WriteProfileString((LPSTR) section, (LPSTR) temp, (LPSTR) str);
setProfileExtent = TRUE;
}
return(setProfileExtent);
}
/*---------------------------------------------------------------------------*/
/* initFileDocData() - [mbb] */
/*---------------------------------------------------------------------------*/
BOOL NEAR initFileDocData(fileType, strResID, fileExt, szSection) /* mbbx 2.00 ... */
FILEDOCTYPE fileType;
WORD strResID;
BYTE *fileExt;
BYTE *szSection;
{
BYTE work1[MINRESSTR], work2[80];
LoadString(hInst, strResID, (LPSTR) work1, MINRESSTR);
GetProfileString((LPSTR) szAppName_private, (LPSTR) work1, (LPSTR) NULL_STR, (LPSTR) work2, 80);
getDataPath(fileType, fileDocData[fileType].filePath, work2);
strcpy(fileDocData[fileType].fileExt, fileExt);
if(!getFileType(work2, fileDocData[fileType].fileExt))
strcpy(work2, fileDocData[fileType].fileExt);
strcpy(fileDocData[fileType].fileName, fileDocData[fileType].fileExt+1);
if(work2[strlen(work2)-1] != '*')
return(setProfileExtent(szSection, fileDocData[fileType].fileExt+3));
return(FALSE);
}
/*---------------------------------------------------------------------------*/
/* initProfileData() - [mbb] */
/*---------------------------------------------------------------------------*/
#define DEFBUFFERLINES 100 /* mbbx 1.10... */
VOID initProfileData() /* mbbx: 1.01 ... */
{
BYTE str[MINRESSTR], str2[MINRESSTR], portName[16];
INT ndx;
FARPROC lpdbPortInit;
BOOL notify;
LoadString(hInst, STR_INI_PORT, (LPSTR) str, MINRESSTR);
if(!GetProfileString((LPSTR) szAppName_private, (LPSTR) str, (LPSTR) NULL_STR, (LPSTR) portName, 5))
{
trmParams.comDevRef = ITMNOCOM; /* jtf 3.33 */
trmParams.speed = 1200; /* jtf 3.33 */
trmParams.dataBits = ITMDATA8; /* jtf 3.33 */
trmParams.stopBits = ITMSTOP1; /* jtf 3.33 */
trmParams.parity = ITMNOPARITY; /* jtf 3.33 */
if((ndx = doSettings(IDDBPORTINIT, dbPortInit)) != -1) /* mbbx 2.01.10 ... */
{
LoadString(hInst, (ndx > 0) ? STR_COM : STR_COM_CONNECT, (LPSTR) str2, MINRESSTR);
sprintf(portName, str2, ndx);
WriteProfileString((LPSTR) szAppName_private, (LPSTR) str, (LPSTR) portName);
}
}
LoadString(hInst, STR_INI_SWAP, (LPSTR) str, MINRESSTR);
if((ndx = GetProfileInt((LPSTR) szAppName_private, (LPSTR) str, 0)) > 0)
*taskState.string = sprintf(taskState.string+1, "%d", SetSwapAreaSize(ndx));
LoadString(hInst, STR_INI_INTL, (LPSTR) str, MINRESSTR);
LoadString(hInst, STR_INI_IDATE, (LPSTR) str2, MINRESSTR);
intlData.iDate = GetProfileInt((LPSTR) str, (LPSTR) str2, 0);
LoadString(hInst, STR_INI_SDATE, (LPSTR) str2, MINRESSTR);
GetProfileString((LPSTR) str, (LPSTR) str2, (LPSTR) "/", (LPSTR) intlData.sDate, 2);
LoadString(hInst, STR_INI_ITIME, (LPSTR) str2, MINRESSTR);
intlData.iTime = GetProfileInt((LPSTR) str, (LPSTR) str2, 0);
LoadString(hInst, STR_INI_STIME, (LPSTR) str2, MINRESSTR);
GetProfileString((LPSTR) str, (LPSTR) str2, (LPSTR) ":", (LPSTR) intlData.sTime, 2);
LoadString(hInst, STR_INI_S1159, (LPSTR) str2, MINRESSTR);
GetProfileString((LPSTR) str, (LPSTR) str2, (LPSTR) "AM", (LPSTR) intlData.s1159, 4);
LoadString(hInst, STR_INI_S2359, (LPSTR) str2, MINRESSTR);
GetProfileString((LPSTR) str, (LPSTR) str2, (LPSTR) "PM", (LPSTR) intlData.s2359, 4);
LoadString(hInst, STR_INI_EXTENSIONS, (LPSTR) str, MINRESSTR);
notify = initFileDocData(FILE_NDX_SETTINGS, STR_INI_SETTINGS, SETTINGS_FILE_TYPE, str);
if(initFileDocData(FILE_NDX_TASK, STR_INI_TASK, TASK_FILE_TYPE, str))
notify = TRUE;
if(initFileDocData(FILE_NDX_SCRIPT, STR_INI_SCRIPT, SCRIPT_FILE_TYPE, str))
notify = TRUE;
if(initFileDocData(FILE_NDX_MEMO, STR_INI_MEMO, MEMO_FILE_TYPE, str))
notify = TRUE;
if(initFileDocData(FILE_NDX_DATA, STR_INI_DATA, DATA_FILE_TYPE, str))
notify = TRUE;
if(notify)
#ifdef ORGCODE
SendMessage(0xFFFF, WM_WININICHANGE, 0, (LONG) ((LPSTR) str));
#else
SendMessage((HWND)0xFFFFFFFF, WM_WININICHANGE, 0, (LONG) ((LPSTR) str));
#endif
}
/*---------------------------------------------------------------------------*/
/* setup() - Reset all varibles, read settings file & emulation. [scf] */
/*---------------------------------------------------------------------------*/
BOOL setup() /* mbbx 2.00: no cmd line... */
{
BYTE path[PATHLEN+1];
BYTE tmp1[TMPNSTR+1];
INT ndx;
SetRect ((LPRECT) &cursorRect, 0, 0, 0, 0);
vScrollShowing = TRUE;
serNdx = 0;
cursorTick = -1l;
cursBlinkOn = FALSE;
cursorOn = TRUE;
activCursor = 1;
prtFlag = FALSE;
useScrap = FALSE;
copiedTable = FALSE;
*fKeyStr = 0; /* mbbx 2.00: fKeySeq... */
fKeyNdx = 1;
scrapSeq = FALSE;
xferFlag = XFRNONE;
xferPaused = FALSE;
xferBreak = FALSE; /* mbbx 2.00: xfer ctrls */
xferEndTimer = 0;
xferWaitEcho = FALSE;
xferViewPause = 0; /* mbbx: auto line count */
xferViewLine = 0;
xferPSChar = 0; /* mbbx 1.02: packet switching */
*strRXErrors =
*strRXBytes =
*strRXFname =
*strRXFork = 0;
taskInit();
keyMapInit(); /* mbbx 1.04: keymap */
debugFlg = FALSE; /* how does this get enabled??? */
mdmOnLine = FALSE;
dialing = FALSE;
answerMode = FALSE;
protectMode = FALSE; /* mbbx: emulation state */
KER_getflag = FALSE;
gotCommEvent = TRUE;
if((hemulKeyInfo = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, (DWORD) SIZEOFEMULKEYINFO)) == NULL)
return(FALSE);
initProfileData(); /* mbbx: 1.01 */
hTE.hText = NULL;
setDefaults();
setFKeyLevel(1, FALSE); /* jtfterm */
termInitSetup(NULL);
strcpy(szMessage, szAppName);
return(TRUE);
}
/*---------------------------------------------------------------------------*/
/* readCmdLine() - [mbb] */
/*---------------------------------------------------------------------------*/
BOOL fileDocExist(fileType, filePath) /* mbbx 2.00: no forced extents... */
WORD fileType;
BYTE *filePath;
{
BOOL fileDocExist;
BYTE savePath[PATHLEN], testPath[PATHLEN];
BYTE OEMname[STR255]; /* jtf 3.20 */
strcpy(savePath, filePath);
getDataPath(fileType, testPath, savePath);
strcpy(testPath+strlen(testPath), savePath);
// JYF -- replace below two line with following if () to
// remove the use of AnsiToOem()
//
//AnsiToOem((LPSTR) testPath, (LPSTR) OEMname); /* jtf 3.20 */
//if(fileDocExist = fileExist(OEMname)) /* jtf 3.20 */
if (fileDocExist = fileExist(testPath))
strcpy(filePath, testPath);
return(fileDocExist);
}
WORD NEAR getFileDocType(filePath) /* mbbx 2.00: no forced extents... */
BYTE *filePath;
{
BYTE fileExt[16];
WORD fileType;
*fileExt = 0;
if(!getFileType(filePath, fileExt))
{
forceExtension(filePath, NO_FILE_TYPE+2, FALSE);
if(fileDocExist(FILE_NDX_DATA, filePath) || fileDocExist(FILE_NDX_SETTINGS, filePath))
return(FILE_NDX_SETTINGS); /* jtf 3.11 */
}
for(fileType = FILE_NDX_SETTINGS; fileType <= FILE_NDX_MEMO; fileType += 1)
{
if(*fileExt == 0)
forceExtension(filePath, fileDocData[fileType].fileExt+2, TRUE);
else if((fileType < FILE_NDX_MEMO) && (strcmp(fileDocData[fileType].fileExt+2, fileExt) != 0))
continue;
if(fileDocExist(FILE_NDX_DATA, filePath) || fileDocExist(fileType, filePath) || (*fileExt != 0))
return(fileType);
}
return(FILE_NDX_DATA);
}
BOOL NEAR initTermFile(filePath) /* mbbx 2.00 ... */
BYTE *filePath;
{
getDataPath(FILE_NDX_SETTINGS, fileDocData[FILE_NDX_SETTINGS].filePath, filePath);
LoadString(hInst, STR_TERMINAL, (LPSTR) termData.title, MINRESSTR);
/* mbbx 2.00: no forced extents... */
return(termFile(fileDocData[FILE_NDX_SETTINGS].filePath, filePath,
fileDocData[FILE_NDX_SETTINGS].fileExt, termData.title, TF_DEFTITLE));
}
VOID NEAR readCmdLine(lpszCmdLine)
LPSTR lpszCmdLine;
{
INT ndx, ndx2;
BYTE filePath[PATHLEN];
BYTE tmpFilePath[PATHLEN];
INT nEditWnd = 0;
BYTE OEMname[STR255]; /* jtf 3.20 */
BYTE work[STR255]; /* jtf 3.28 */
BYTE work1[STR255]; /* jtf 3.28 */
INT testFlag;
saveFileType = FILE_NDX_SETTINGS; /* jtf 3.11 */
AnsiUpper(lpszCmdLine);
for(ndx = 0; lpszCmdLine[ndx] != 0; ) /* mbbx 2.00 ... */
{
while(lpszCmdLine[ndx] == 0x20)
ndx += 1;
if(lpszCmdLine[ndx] == 0)
break;
for(ndx2 = 0; (filePath[ndx2] = lpszCmdLine[ndx]) != 0; ndx2 += 1)
{
ndx += 1;
if(filePath[ndx2] == 0x20)
{
filePath[ndx2] = 0;
break;
}
}
strcpy(work1,filePath);
switch(ndx2 = getFileDocType(filePath)) /* mbbx 2.00: term init... */
{
case FILE_NDX_SETTINGS:
if(!activTerm)
initTermFile(filePath);
break;
}
}
if ((!activTerm) && (lstrlen((LPSTR)lpszCmdLine)>0) )
{
LoadString(hInst, STRERRNOFILE, (LPSTR) work, STR255-1); /* jtf 3.15 */
strcpy(filePath,work1);
forceExtension(filePath, SETTINGS_FILE_TYPE+2, FALSE);
sprintf(work1, work, filePath);
testFlag = MessageBox(GetActiveWindow(), (LPSTR) work1, (LPSTR) szAppName, MB_OKCANCEL);
if (testFlag==IDOK)
{
if (filePath[1]==':')
{
filePath[0]='A';
}
else
{
strcpy(work,filePath);
strcpy(filePath,"A:");
strcpy(filePath+2,work);
}
initTermFile(filePath);
}
}
if(!activTerm) /* mbbx 2.00: term init... */
{
LoadString(hInst, STR_AUTOLOAD, (LPSTR) filePath, PATHLEN); /* jtf 3.17 */
// JYF -- replace below two lines with the following if() to
// remove the use of AnsiToOem()
//
//AnsiToOem((LPSTR) filePath, (LPSTR) OEMname); /* jtf 3.20 */
//if (fileExist(OEMname)) /* jtf 3.20 */
if (fileExist(filePath))
initTermFile(filePath);
else
{
_searchenv( filePath, "PATH", tmpFilePath );
if(strlen(tmpFilePath)>0)
initTermFile(tmpFilePath);
}
if(!activTerm)
{
if((nEditWnd -= 1) >= 0)
termData.flags |= TF_HIDE;
else
saveFileType = FILE_NDX_SETTINGS;
activTerm = TRUE;
resetSerial(&trmParams, TRUE, TRUE,0);
if(!(termData.flags & TF_HIDE))
showTerminal(TRUE, TRUE);
}
}
if(!IsIconic(hItWnd)) /* rjs bugs 015 */
sizeTerm(0L); /* jtf 3.21 */
}
/*---------------------------------------------------------------------------*/
/* freeItResources()- Free up all windows resource b/4 back to DOS executive.*/
/* Internal house keeping. Note: Close that serial port. */
/*---------------------------------------------------------------------------*/
VOID freeItResources()
{
INT ndx;
exitSerial();
keyMapCancel(); /* mbbx 1.04: keymap */
DeleteObject(hTE.hFont);
clearFontCache(); /* mbbx 2.00: redundant code... */
GlobalFree(hTE.hText);
GlobalFree(hemulKeyInfo);
}