home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 5 Edit
/
05-Edit.zip
/
NOTEPAD2.ZIP
/
NOTEPAD.C
< prev
next >
Wrap
C/C++ Source or Header
|
1989-02-08
|
11KB
|
357 lines
/***************************************************************************\
* np.c - PM Notepad application
*
* Created by Microsoft Corporation, 1989
\***************************************************************************/
#define INCL_WIN
#include <os2.h>
#include <stdio.h>
#include <string.h>
#include "notepad.h"
#include "npcmd.h"
#include "npkmp.h"
/************* GLOBAL VARIABLES */
char szNPClass[] = "notepad class";
char szTitle[NP_TITLESIZE];
HAB hab;
HMQ hmqNP;
HWND hwndNP;
HWND hwndNPFrame;
HWND hwndNPMenu;
HWND hwndNPEdit;
HWND hwndNPHScroll;
HWND hwndNPVScroll;
char *szClientMsg = "Hello, World";
BOOL fWordWrapOn = FALSE;
char szFileName[MAXFILENAMESZ];
char szLoadFileName[MAXFILENAMESZ];
BOOL fInitLoad = FALSE;
BOOL fInitError = FALSE;
BOOL fNamed = FALSE;
BOOL fChanged = FALSE;
BOOL fUnsized = TRUE;
COMPILEDKEY ckSearchKey;
PCOMPILEDKEY pckSearchKey = &ckSearchKey;
BOOL fKeySet = FALSE;
char szMsgs[MS_COUNT+1][MS_MAXMSGSIZE];
HHEAP hhAppHeap;
/************* PROCEDURE DECLARATIONS */
MRESULT CALLBACK NPWndProc(HWND, USHORT, MPARAM, MPARAM);
VOID DoCommand(int);
BOOL NPInit(VOID);
int cdecl main(int, char **);
/************* COMMAND DISPATCH TABLE */
int (*rgpfnCmds[CCMDS])() = {
CmdNew, /* 0 - new */
CmdOpen, /* 1 - open */
CmdSave, /* 2 - save */
CmdSaveAs, /* 3 - saveas */
CmdUndo, /* 4 - undo */
CmdCut, /* 5 - cut */
CmdCopy, /* 6 - copy */
CmdPaste, /* 7 - paste */
CmdClear, /* 8 - clear */
CmdPrint, /* 9 - print */
CmdAbout, /* A - about */
CmdSelectAll, /* B - select all */
CmdFind, /* C - find */
CmdReplace, /* D - replace */
CmdNextSearch, /* E - find next */
CmdWordWrap, /* F - toggle wrap */
CmdExit, /* 10 - exit */
CmdDateTime, /* 11 - date/time insertion */
NULL, /* 12 - Unused */
CmdSetTab, /* 13 - set tab size */
CmdQueryFont /* 14 - Query font */
};
/**************************************/
VOID DoCommand(cmd)
int cmd;
{
int (*pfn)(void);
/*
Lo byte of cmd value is index into dispatch table
Hi byte of cmd is menu index, or whatever. Hi byte
can be used in a switch here to do common processing for
related commands.
*/
if (HIBYTE(cmd) == HIBYTE(SUB_FONTS))
SelectFont(LOBYTE(cmd));
else if (HIBYTE(cmd) == HIBYTE(SUB_SIZES))
SelectSizeIndex(LOBYTE(cmd));
else if ((pfn = rgpfnCmds[LOBYTE(cmd)]) != NULL)
(*pfn)();
}
MRESULT DoControl(MPARAM mp1, MPARAM mp2)
{
switch(SHORT2FROMMP(mp1)) {
case EN_HSCROLL:
return(WinSendMsg(hwndNPHScroll, SBM_SETPOS,
MPFROMSHORT(SHORT1FROMMP(mp2)), NULL));
break;
case EN_VSCROLL:
return(WinSendMsg(hwndNPVScroll, SBM_SETPOS,
MPFROMSHORT(SHORT1FROMMP(mp2)), NULL));
break;
default:
return(0L);
break;
}
}
MRESULT DoInitMenu(SHORT sId)
{
USHORT us;
switch (sId) {
case SUB_SEARCH:
WinSendMsg(hwndNPMenu,
MM_SETITEMATTR,
MPFROM2SHORT(CMD_NEXTSRCH, TRUE),
MPFROM2SHORT(MIA_DISABLED, fKeySet?0:MIA_DISABLED));
return(FALSE);
case SUB_EDIT:
WinSendMsg(hwndNPMenu, MM_SETITEMATTR,
MPFROM2SHORT(CMD_UNDO,TRUE),
MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED));
if (WinSendMsg(hwndNPEdit, EM_QUERYSEL, MPFROMLONG(2), NULL) ==
WinSendMsg(hwndNPEdit, EM_QUERYSEL, MPFROMLONG(1), NULL)) {
WinSendMsg(hwndNPMenu,
MM_SETITEMATTR,
MPFROM2SHORT(CMD_CUT,TRUE),
MPFROM2SHORT(MIA_DISABLED,MIA_DISABLED));
WinSendMsg(hwndNPMenu,
MM_SETITEMATTR,
MPFROM2SHORT(CMD_COPY,TRUE),
MPFROM2SHORT(MIA_DISABLED,MIA_DISABLED));
WinSendMsg(hwndNPMenu,
MM_SETITEMATTR,
MPFROM2SHORT(CMD_CLEAR,TRUE),
MPFROM2SHORT(MIA_DISABLED,MIA_DISABLED));
} else {
WinSendMsg(hwndNPMenu,
MM_SETITEMATTR,
MPFROM2SHORT(CMD_CUT,TRUE),
MPFROM2SHORT(MIA_DISABLED,0));
WinSendMsg(hwndNPMenu,
MM_SETITEMATTR,
MPFROM2SHORT(CMD_COPY,TRUE),
MPFROM2SHORT(MIA_DISABLED,0));
WinSendMsg(hwndNPMenu,
MM_SETITEMATTR,
MPFROM2SHORT(CMD_CLEAR,TRUE),
MPFROM2SHORT(MIA_DISABLED,0));
}
WinOpenClipbrd(hab);
if (!WinQueryClipbrdFmtInfo(hab, CF_TEXT, &us)) {
WinSendMsg(hwndNPMenu,
MM_SETITEMATTR,
MPFROM2SHORT(CMD_PASTE,TRUE),
MPFROM2SHORT(MIA_DISABLED,MIA_DISABLED));
} else {
WinSendMsg(hwndNPMenu,
MM_SETITEMATTR,
MPFROM2SHORT(CMD_PASTE,TRUE),
MPFROM2SHORT(MIA_DISABLED,0));
}
WinCloseClipbrd(hab);
return(FALSE);
default:
return(FALSE);
}
}
BOOL NPInit(VOID)
{
int i;
hmqNP = WinCreateMsgQueue(hab, 0);
MleInit(hab);
hhAppHeap = WinCreateHeap(0,0,0,0,0,0);
if (!InitSrch())
return(FALSE);
if (!WinRegisterClass(hab, szNPClass, (PFNWP)NPWndProc,
CS_SIZEREDRAW, 0))
return(FALSE);
szTitle[0] = '\0';
for (i=1; i<=MS_COUNT; i++) {
WinLoadString(hab, NULL, i, MS_MAXMSGSIZE, szMsgs[i]);
}
return(TRUE);
}
int cdecl main(argc, argv)
int argc;
char **argv;
{
QMSG qmsg;
ULONG lCtlData;
hab = WinInitialize(0);
CmdParseLine(argc, argv);
if (!NPInit()) {
WinAlarm(HWND_DESKTOP, WA_ERROR);
return(0);
}
lCtlData = FCF_STANDARD | FCF_VERTSCROLL | FCF_HORZSCROLL |
FCF_ACCELTABLE | FCF_ICON | FCF_TASKLIST | FCF_SHELLPOSITION;
hwndNPFrame = WinCreateStdWindow(HWND_DESKTOP,
WS_VISIBLE,
&lCtlData,
szNPClass, " - [(untitled)]",
WS_VISIBLE,
(HMODULE)NULL, IDR_NP,
(HWND FAR *)&hwndNP);
WinSetFocus(HWND_DESKTOP, hwndNPEdit);
ClearChanged();
CmdCmdLine();
while (WinGetMsg(hab, (PQMSG)&qmsg, NULL, 0, 0)) {
WinDispatchMsg(hab, (PQMSG)&qmsg);
}
WinDestroyWindow(hwndNPFrame);
WinDestroyMsgQueue(hmqNP);
WinTerminate(hab);
DosExit(EXIT_PROCESS, 0);
}
/********** NP Window Procedure **************/
MRESULT CALLBACK NPWndProc(hwnd, msg, mp1, mp2)
HWND hwnd;
USHORT msg;
MPARAM mp1;
MPARAM mp2;
{
switch (msg) {
case WM_CREATE:
/* Set up this global first thing in case we need it elsewhere */
hwndNP = hwnd;
hwndNPEdit = WinCreateWindow(hwndNP,
(PSZ) WC_MLE,
NULL,
WS_VISIBLE,
0, 0,
0, 0,
hwndNP,
HWND_TOP,
NP_EDITWINDOWID,
NULL,
NULL);
ClearChanged();
WinPostMsg(hwnd, EDM_INIT, NULL, NULL);
return(0L);
break;
case EDM_INIT:
hwndNPMenu = WinWindowFromID(hwndNPFrame,FID_MENU);
hwndNPHScroll = WinWindowFromID(hwndNPFrame, FID_HORZSCROLL);
hwndNPVScroll = WinWindowFromID(hwndNPFrame, FID_VERTSCROLL);
WinSendMsg(hwndNPHScroll, /* fix this */
SBM_SETSCROLLBAR,
MPFROMSHORT(0),
MPFROM2SHORT(SLIDER_MIN,SLIDER_MAX));
WinSendMsg(hwndNPVScroll,
SBM_SETSCROLLBAR,
MPFROMSHORT(0),
MPFROM2SHORT(SLIDER_MIN,SLIDER_MAX));
WinSendMsg(hwndNPEdit, EM_SETTEXTLIMIT, MPFROMLONG(-1), NULL);
InitFonts();
return(0L);
break;
case WM_CLOSE:
switch (NPCheckSave()) {
case MBID_CANCEL:
return(0L);
break;
default:
ClearChanged();
return(WinDefWindowProc(hwnd, msg, mp1, mp2));
break;
}
break;
case WM_SIZE:
WinSetWindowPos(hwndNPEdit,
HWND_TOP,
0, 0,
SHORT1FROMMP(mp2), SHORT2FROMMP(mp2),
SWP_SIZE);
if (fUnsized) {
WinSendMsg(hwndNPEdit, EM_SETTEXTLIMIT, MPFROMLONG(2000), 0L);
SetWordWrap(FALSE);
fUnsized = FALSE;
}
return(WinDefWindowProc(hwnd, msg, mp1, mp2));
break;
case WM_HSCROLL:
case WM_VSCROLL:
case WM_MINMAXFRAME:
return(WinSendMsg(hwndNPEdit,msg,mp1,mp2));
break;
case WM_COMMAND:
DoCommand(LOUSHORT(mp1));
return(0L);
break;
case WM_CONTROL:
return(DoControl(mp1, mp2));
break;
case WM_HELP:
return(0L);
break;
case WM_INITMENU:
return(DoInitMenu(SHORT1FROMMP(mp1)));
break;
default:
return(WinDefWindowProc(hwnd, msg, mp1, mp2));
break;
}
}