home *** CD-ROM | disk | FTP | other *** search
- #define NOCOMM
- #include <windows.h>
- #include <io.h>
- #include <stdarg.h>
- #include <direct.h>
- #include "sfedit.h"
- #include "sfiledlg.h"
-
- #define ID_EDITWND (100)
- #define MAX_EDITSIZE (32767)
-
- /* Function Prototypes */
- LONG FAR PASCAL _export WndProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
- int SFMsgBox(WORD wType, LPSTR lpszFmt, ...);
- BOOL GetFile(HWND hWndEdit, LPSTR szFileSpec);
- BOOL PutFile(HWND hWndEdit, LPSTR szFileSpec);
-
- /* Global Variables */
- extern HANDLE _hInstance;
- HWND _hWndMain;
- char _szAppName[] = "SFEdit";
-
- int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmdLine,
- int nCmdShow)
- {
- HANDLE hAccel;
- MSG msg;
-
- if (!hPrevInstance)
- {
- WNDCLASS wndclass;
-
- wndclass.style = CS_HREDRAW | CS_VREDRAW;
- wndclass.lpfnWndProc = WndProc;
- wndclass.cbClsExtra = 0;
- wndclass.cbWndExtra = 0;
- wndclass.hInstance = hInstance;
- wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
- wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);
- wndclass.lpszMenuName = "MENU_SFEDIT";
- wndclass.lpszClassName = _szAppName;
-
- RegisterClass(&wndclass);
- }
-
- _hInstance = hInstance;
-
- _hWndMain = CreateWindow(
- _szAppName, _szAppName,
- WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, CW_USEDEFAULT,
- CW_USEDEFAULT, CW_USEDEFAULT,
- NULL, NULL, hInstance, NULL
- );
-
- ShowWindow(_hWndMain, nCmdShow);
- UpdateWindow(_hWndMain);
-
- hAccel = LoadAccelerators(hInstance, _szAppName);
-
- while(GetMessage(&msg, NULL, 0, 0))
- {
- if (!TranslateAccelerator(_hWndMain, hAccel, &msg))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- return msg.wParam;
- }
-
- LONG FAR PASCAL _export WndProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
- {
- HMENU hMenu;
-
- static char szFileSpec[128];
- static char szTmp[128];
- static char szOpenFileName[128];
- static HWND hWndEdit;
- static SFDlg sfdlg;
- static SFType typeList[] = {
- {"*.TXT", "Text files (*.TXT)" },
- {"*.C", "C source (*.C)" },
- {"*.H", "Header files (*.H)" },
- {"*.RC", "Resource scripts (*.RC)"},
- {"*.*", "All files (*.*)" },
- {"", ""}
- };
-
- switch(wMsg)
- {
- case WM_CREATE :
- hWndEdit = CreateWindow("EDIT", NULL,
- WS_CHILD | WS_VISIBLE | ES_LEFT | ES_MULTILINE |
- WS_HSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
- 0,0,0,0, hWnd, ID_EDITWND, _hInstance, NULL);
-
- SendMessage(hWndEdit, EM_LIMITTEXT, MAX_EDITSIZE, 0L);
-
- hMenu = GetMenu(hWnd);
- EnableMenuItem(hMenu, IDM_SAVE, MF_GRAYED);
- EnableMenuItem(hMenu, IDM_SAVEAS, MF_GRAYED);
-
- getcwd(szFileSpec, 128);
- return 0L;
-
- case WM_DESTROY :
- PostQuitMessage(0);
- return 0L;
-
- case WM_SIZE :
- MoveWindow(hWndEdit, 0,0, LOWORD(lParam), HIWORD(lParam), TRUE);
- return 0L;
-
- case WM_SETFOCUS :
- SetFocus(hWndEdit);
- return 0L;
-
- case WM_COMMAND :
- switch (wParam)
- {
- case IDM_OPEN :
- sfdlg.hWnd = hWnd;
- sfdlg.lpTypes = typeList;
- sfdlg.nType = 0;
- sfdlg.lpszFileSpec = szFileSpec;
- sfdlg.nMaxFileSpec = sizeof(szFileSpec);
- sfdlg.lpszTitle = "File Open";
-
- lstrcpy(szFileSpec, typeList[sfdlg.nType].szFile);
-
- if (SFileDlg(&sfdlg) == IDOK)
- {
- if (GetFile(hWndEdit, szFileSpec))
- {
- lstrcpy(szOpenFileName, szFileSpec);
-
- wsprintf(szTmp, "%s - %s", (LPSTR) _szAppName,
- (LPSTR) szFileSpec);
- SetWindowText(hWnd, szTmp);
-
- hMenu = GetMenu(hWnd);
- EnableMenuItem(hMenu, IDM_SAVE, MF_ENABLED);
- EnableMenuItem(hMenu, IDM_SAVEAS, MF_ENABLED);
- }
- }
-
- return 0L;
-
- case IDM_SAVE :
- PutFile(hWndEdit, szOpenFileName);
- return 0L;
-
- case IDM_SAVEAS :
- lstrcpy(szFileSpec, szOpenFileName);
-
- sfdlg.hWnd = hWnd;
- sfdlg.lpTypes = typeList;
- sfdlg.nType = 0;
- sfdlg.lpszFileSpec = szFileSpec;
- sfdlg.nMaxFileSpec = sizeof(szFileSpec);
- sfdlg.lpszTitle = "File Save As";
-
- if (SFileDlg(&sfdlg)==IDOK)
- {
- if (PutFile(hWndEdit, szFileSpec))
- {
- lstrcpy(szOpenFileName, szFileSpec);
-
- wsprintf(szTmp, "%s - %s", (LPSTR) _szAppName, (LPSTR) szFileSpec);
- SetWindowText(hWnd, szTmp);
- }
- }
- return 0L;
-
- case IDM_ABOUT:
- wsprintf(szTmp, "%s\xA9 1992, Paul Chui.", (LPSTR)_szAppName);
- SFMsgBox(MB_OK|MB_ICONINFORMATION, szTmp);
- return 0L;
-
- case IDM_EXIT :
- DestroyWindow(hWnd);
- return 0L;
- }
- return 0L;
- }
-
- return DefWindowProc(hWnd, wMsg, wParam, lParam);
- }
-
- /****************************************************************************
- BOOL GetFile(HWND hWndEdit, LPSTR lpszFileSpec)
-
- PURPOSE: Opens a file and then fills hWndEdit with the file.
-
- PARAMETERS:
- HWND hWndEdit Edit control to recieve text file
- LPSTR lpszFileSpec Default name in file combo box
-
- RETURNS: TRUE if a new file is opened.
- *****************************************************************************/
- BOOL GetFile(HWND hWndEdit, LPSTR lpszFileSpec)
- {
- DWORD dwFileSize;
- int hFile;
- HANDLE hFileBuf;
- LPSTR lpFileBuf;
- OFSTRUCT of;
-
- if ((hFile = OpenFile(lpszFileSpec, &of, OF_READ)) == -1)
- {
- SFMsgBox(MB_OK|MB_ICONEXCLAMATION, "DOS error %d opening file '%s'.",
- of.nErrCode, (LPSTR) lpszFileSpec);
- return FALSE;
- }
-
- if ((dwFileSize = filelength(hFile)) >= MAX_EDITSIZE)
- {
- SFMsgBox(MB_OK|MB_ICONEXCLAMATION,"File '%s' is too big.",
- (LPSTR) lpszFileSpec);
- _lclose(hFile);
- return FALSE;
- }
-
- hFileBuf = GlobalAlloc(GHND, dwFileSize + 1);
- lpFileBuf = GlobalLock(hFileBuf);
-
- _lread(hFile, lpFileBuf, (WORD) dwFileSize);
- *(lpFileBuf + (WORD)dwFileSize) = '\0';
- SetWindowText(hWndEdit, lpFileBuf);
-
- GlobalUnlock(hFileBuf);
- GlobalFree(hFileBuf);
- _lclose(hFile);
-
- return TRUE;
- }
-
- /****************************************************************************
- BOOL PutFile(HWND hWndEdit, LPSTR lpszFileSpec)
-
- PURPOSE: Saves the file contained in the text control.
-
- PARAMETERS:
- HWND hWndEdit Edit control to containing the text file
- LPSTR lpszFileSpec Default name of the file to be saves
-
- RETURNS: TRUE if a new file is saved.
- *****************************************************************************/
- BOOL PutFile(HWND hWndEdit, LPSTR lpszFileSpec)
- {
- WORD wEditLen;
- int hFile;
- HANDLE hFileBuf;
- NPSTR npFileBuf;
- OFSTRUCT of;
-
- if (OpenFile(lpszFileSpec, &of, OF_READ|OF_EXIST) > 0)
- {
- if (SFMsgBox(MB_YESNO|MB_ICONQUESTION, "Overwrite file '%s'?",
- (LPSTR) lpszFileSpec) != IDYES)
- return FALSE;
- }
-
- if ((hFile = OpenFile(lpszFileSpec, &of, OF_CREATE|OF_REOPEN)) == -1)
- {
- SFMsgBox(MB_OK|MB_ICONEXCLAMATION, "Error creating file '%s'.",
- (LPSTR) lpszFileSpec);
- return FALSE;
- }
-
- hFileBuf = (HANDLE) SendMessage(hWndEdit, EM_GETHANDLE, 0, 0L);
- npFileBuf = LocalLock(hFileBuf);
-
- wEditLen = GetWindowTextLength(hWndEdit);
- if (_lwrite(hFile, npFileBuf, wEditLen) != wEditLen)
- {
- SFMsgBox(MB_OK|MB_ICONEXCLAMATION, "Error writing file '%s'.",
- (LPSTR) lpszFileSpec);
- _lclose(hFile);
- return FALSE;
- }
-
- LocalUnlock(hFileBuf);
- _lclose(hFile);
-
- return TRUE;
- }
-
- int SFMsgBox(WORD wType, LPSTR lpszFmt, ...)
- {
- static char szBuf[80];
- va_list ap;
-
- va_start(ap, lpszFmt);
- wvsprintf(szBuf, lpszFmt, ap);
- va_end(ap);
-
- return MessageBox(_hWndMain, szBuf, _szAppName, wType);
- }
-
-