home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / NOTEPAD2.ZIP / NPSAVE.C < prev    next >
C/C++ Source or Header  |  1989-02-08  |  4KB  |  162 lines

  1. /***************************************************************************\
  2. * npfile.c - notepad file processing
  3. *
  4. * Created by Microsoft Corporation, 1989
  5. \***************************************************************************/
  6.  
  7. #define INCL_WIN
  8. #define INCL_DOS
  9. #include <os2.h>
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include <opendlg.h>
  13. #include "notepad.h"
  14. #include "npcmd.h"
  15.  
  16. /* Global Variables */
  17.  
  18. DLF dlf;
  19.  
  20. /* Forward Declarations */
  21. VOID NPSaveFile(SHANDLE FAR *);
  22.  
  23. /* Procedures */
  24.  
  25. int NPCheckSave(VOID)
  26. {
  27.     int ichoice;
  28.  
  29.     if (fIsChanged()) {
  30.         ichoice = AlertBox(hwndNP, IDS_SCC,
  31.             (fNamed?szFileName:szMsgs[MS_DOC]), szTitle, NULL,
  32.             MB_YESNOCANCEL | MB_ICONQUESTION | MB_APPLMODAL);
  33.         if (ichoice == MBID_YES) {
  34.             CmdSave();
  35.         }
  36.         return(ichoice);
  37.     } else {
  38.         return(MBID_NO);
  39.     }
  40. }
  41.  
  42.  
  43. VOID NPSave(VOID)
  44. {
  45.     SHANDLE hFile;
  46.  
  47.     if (!OpenFile((PSZ)szFileName,
  48.             (PHANDLE)&hFile,
  49.             (PSZ)dlf.szOpenFile,
  50.             OF_WRITE)) {
  51.         AlertBox(hwndNP,
  52.                     IDS_EOF,
  53.                     (PSZ)szFileName,
  54.                     szTitle,
  55.                     NULL,
  56.                     MB_OK | MB_ICONASTERISK | MB_APPLMODAL);
  57.         }
  58.     else
  59.         NPSaveFile(&hFile);
  60.     ClearChanged();
  61. }
  62.  
  63. VOID NPSaveAs(VOID)
  64. {
  65.     SHANDLE hFile;
  66.     VOID NPSaveFile(SHANDLE FAR *);
  67.  
  68.     dlf.rgbAction = DLG_HELP | DLG_SAVEDLG;
  69.     dlf.rgbFlags = ATTRDIRLIST;
  70.     dlf.phFile = &hFile;
  71.     dlf.pszExt = szMsgs[MS_DFLEXT];
  72.     dlf.pszAppName = szTitle;
  73.     dlf.pszInstructions = NULL;
  74.     dlf.pszTitle = szMsgs[MS_SAVEAS];
  75.  
  76.     if (!fNamed)
  77.         lstrcpy(dlf.szOpenFile,""); /* set no current file flag */
  78.  
  79.     switch(DlgFile(hwndNP, (PDLF)&dlf)) {
  80.     case TDF_ERRMEM:
  81.     case TDF_INVALID:
  82.     case TDF_NOSAVE:
  83.         return;
  84.  
  85.     default:
  86.         fNamed = TRUE;
  87.         lstrcpy(szFileName,dlf.szOpenFile);
  88.         SetTitle(dlf.szFileName);
  89.         NPSaveFile(dlf.phFile);
  90.         ClearChanged();
  91.         break;
  92.     }
  93. }
  94.  
  95. VOID NPSaveFile(SHANDLE FAR *phfile)
  96. {
  97. #define BUFLEN 300
  98.     CHAR ch, buff[BUFLEN];
  99.     USHORT len, lenwritten;
  100.     BOOL fCROut;
  101.     HPOINTER hptrSave;
  102.  
  103.     LFAInit(TRUE);
  104.     ch = LFANextCh();
  105.     fCROut = FALSE;
  106.  
  107.     hptrSave = WinQueryPointer (HWND_DESKTOP);
  108.     WinSetPointer(HWND_DESKTOP, WinQuerySysPointer (HWND_DESKTOP, SPTR_WAIT, FALSE));
  109.  
  110.     DosNewSize(*phfile,(ULONG)0);
  111.     do {
  112.         len = 0;
  113.         while ((ch != '\0') && (len < BUFLEN)) {
  114.             if ((ch == '\n') && (!fCROut)) {
  115.                 buff[len++] = '\r';
  116.                 fCROut = TRUE;
  117.             } else {
  118.                 buff[len++] = ch;
  119.                 ch = LFANextCh();
  120.                 fCROut = FALSE;
  121.             }
  122.         }
  123.         if ((len != 0) &&
  124.             ((DosWrite(*phfile, buff, len, &lenwritten)) ||
  125.              (lenwritten != len))) {
  126.             WinAlarm(HWND_DESKTOP, WA_WARNING);
  127.             WinMessageBox(HWND_DESKTOP,
  128.                     hwndNP,
  129.                     szMsgs[MS_SAVEERR],
  130.                     NULL,
  131.                     0,
  132.                     MB_OK | MB_ICONEXCLAMATION | MB_APPLMODAL);
  133.             break;
  134.         }
  135.     } while (ch != '\0');
  136.     DosClose(*phfile);
  137.  
  138.     WinSetPointer (HWND_DESKTOP, hptrSave);
  139. }
  140.  
  141. BOOL fIsChanged(VOID)
  142. {
  143.     if (!fChanged) {
  144.         fChanged = (BOOL)LONGFROMMR(WinSendMsg(hwndNPEdit,
  145.                                         EM_QUERYCHANGED,
  146.                                         0L,
  147.                                         0L));
  148.     }
  149.     return(fChanged);
  150. }
  151.  
  152. VOID SetChanged(VOID)
  153. {
  154.     fChanged = TRUE;
  155. }
  156.  
  157. VOID ClearChanged(VOID)
  158. {
  159.     WinSendMsg(hwndNPEdit,EM_QUERYCHANGED,0L,0L);
  160.     fChanged = FALSE;
  161. }
  162.