home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 5 Edit
/
05-Edit.zip
/
NOTEPAD2.ZIP
/
NPFILE.C
< prev
next >
Wrap
C/C++ Source or Header
|
1989-02-08
|
5KB
|
201 lines
/***************************************************************************\
* npfile.c - notepad file processing
*
* Created by Microsoft Corporation, 1989
\***************************************************************************/
#define INCL_WIN
#define INCL_DOS
#include <os2.h>
#include <string.h>
#include <opendlg.h>
#include "notepad.h"
#include "npcmd.h"
/**************** Module Global variables */
DLF dlf;
/* Forward declarations */
VOID NPLoadFile(SHANDLE FAR *);
/************* PROCEDURE DECLARATIONS */
VOID NPClear(VOID)
{
WinSendMsg(hwndNPEdit,
EM_DELETE,
MPFROMSHORT(0),
WinSendMsg(hwndNPEdit,
EM_QTL,
NULL,
NULL));
ClearChanged();
SetTitle(szMsgs[MS_UNTITLED]);
}
BOOL NPOpenRead(VOID)
{
int rtc;
SHANDLE hFile;
dlf.rgbAction = DLG_HELP | DLG_OPENDLG;
dlf.rgbFlags = ATTRDIRLIST;
dlf.phFile = &hFile;
dlf.pszExt = szMsgs[MS_DFLEXT];
dlf.pszAppName = szTitle;
dlf.pszInstructions = NULL;
dlf.pszTitle = szMsgs[MS_OPENFILE];
rtc = DlgFile(hwndNP,&dlf);
switch(rtc) {
case TDF_ERRMEM: /* error messages ! */
case TDF_INVALID:
case TDF_NOOPEN:
return(FALSE);
case TDF_NEWOPEN:
NPClear();
break;
case TDF_OLDOPEN:
NPClear();
NPLoadFile(dlf.phFile);
break;
}
lstrcpy(szFileName,dlf.szOpenFile);
SetTitle(dlf.szFileName);
fNamed = TRUE;
ClearChanged();
}
BOOL NPLoadNamedFile(PSZ nm)
{
SHANDLE hFile;
VOID NPLoadFile(SHANDLE FAR *);
if (!OpenFile((PSZ)nm,
(PHANDLE)&hFile,
(PSZ)szFileName,
OF_READ)) {
AlertBox(hwndNP,
IDS_EOF,
(PSZ)nm,
szTitle,
NULL,
MB_OK | MB_ICONASTERISK | MB_APPLMODAL);
}
else {
NPLoadFile(&hFile);
SetTitle(nm);
fNamed = TRUE;
ClearChanged();
}
return(TRUE);
}
static VOID filterOutCR(PCHAR buff, PUSHORT puLen)
{
register USHORT off, pos;
off = 0;
for (pos = 0; pos < *puLen; pos++) {
if (*(buff+pos) == '\r') {
off++;
} else {
*(buff+pos-off) = *(buff+pos);
}
}
*puLen -= off;
}
VOID NPLoadFile(SHANDLE FAR *phfile)
{
SEL selRead;
SHORT nread;
USHORT rdsize;
FILESTATUS fstsInfo;
HPOINTER hptrSave;
hptrSave = WinQueryPointer (HWND_DESKTOP);
WinSetPointer(HWND_DESKTOP, WinQuerySysPointer (HWND_DESKTOP, SPTR_WAIT, FALSE));
/* Query the OS for the size of the file to read */
DosQFileInfo (*phfile,
(USHORT) 1,
&fstsInfo,
sizeof(fstsInfo));
/* While there are still bytes left in the file to read */
while (fstsInfo.cbFileAlloc > 0) {
/* Choose minimum of segment size and remaining file size to load */
if (fstsInfo.cbFileAlloc > 65535) {
rdsize = 65535;
DosAllocSeg((USHORT) 65535, (PSEL)&selRead, 0);
}
else {
rdsize = (USHORT) fstsInfo.cbFileAlloc;
DosAllocSeg(rdsize, (PSEL)&selRead, 0);
}
fstsInfo.cbFileAlloc -= rdsize;
/* If the read failed or we got zero bytes, an error occurred */
if ((DosRead(*phfile,MAKEP(selRead,0),rdsize,&nread) != 0) ||
nread == 0) {
WinAlarm(HWND_DESKTOP, WA_WARNING);
WinMessageBox(HWND_DESKTOP,
hwndNP,
szMsgs[MS_LOADERR],
NULL,
0,
MB_OK | MB_ICONEXCLAMATION | MB_APPLMODAL);
break;
}
else {
filterOutCR((PCHAR)MAKEP(selRead,0), (PUSHORT)&nread);
WinSendMsg(hwndNPEdit, EM_SETIMPORTEXPORT, MPFROMP(MAKEP(selRead,0)), MPFROMSHORT(nread));
WinSendMsg(hwndNPEdit, EM_IMPORT, (MPARAM)0, MPFROMSHORT(nread));
}
}
DosClose(*phfile);
ClearChanged();
/* Set the cursor to the beginning of the text */
WinSendMsg (hwndNPEdit, EM_SETSEL, 0L, 0L);
WinSetPointer (HWND_DESKTOP, hptrSave);
}
VOID SetTitle(PSZ title)
{
SWCNTRL swctl;
static HSWITCH hswitch = NULL;
PIDINFO pidinfo;
DosGetPID((PPIDINFO)&pidinfo);
lstrcpy(szTitle, "NP.EXE - [");
lstrcat(szTitle, title);
lstrcat(szTitle, "]");
lstrcpy(swctl.szSwtitle, szTitle);
if (hswitch == NULL) {
swctl.hwnd = hwndNPFrame;
swctl.hwndIcon = (HWND)NULL;
swctl.hprog = (HPROGRAM)NULL;
swctl.idProcess = pidinfo.pid;
swctl.uchVisibility = SWL_VISIBLE;
swctl.fbJump = SWL_JUMPABLE;
hswitch = WinAddSwitchEntry((PSWCNTRL)&swctl);
} else {
WinChangeSwitchEntry(hswitch,(PSWCNTRL)&swctl);
}
WinSetWindowText(WinWindowFromID(hwndNPFrame, FID_TITLEBAR), szTitle);
}