Annotation of os232sdk/toolkt20/c/samples/style/sty_file.c, revision 1.1.1.1

1.1       root        1: /*==============================================================*\
                      2:  *  File.c - routines for handling the standard file menu
                      3:  *                  commands
                      4:  *      Created 1990, Microsoft, IBM  Corp.
                      5:  *--------------------------------------------------------------
                      6:  *
                      7:  *  This module contains the code for the WM_COMMAND messages
                      8:  *  posted by the standard File menu.
                      9:  *
                     10:  *--------------------------------------------------------------
                     11:  *
                     12:  *  This source file contains the following functions:
                     13:  *
                     14:  *           FileNew(mp2);
                     15:  *           FileOpen(mp2);
                     16:  *           FileSave(mp2);
                     17:  *           FileSaveAs(mp2);
                     18:  *           FilePrint(mp2);
                     19:  *           FilePageSetup(mp2);
                     20:  *           FilePrintSetup(mp2);
                     21:  *           FileExit(mp2);
                     22:  *           WriteFileToDisk(hf);
                     23:  *           GetFileName();
                     24:  *           UpdateTitleText(hwnd);
                     25:  *
                     26: \*==============================================================*/
                     27: 
                     28: /*--------------------------------------------------------------*\
                     29:  *  Include files, macros, defined constants, and externs
                     30: \*--------------------------------------------------------------*/
                     31: 
                     32: #define INCL_WINFRAMEMGR
                     33: #define INCL_WINSWITCHLIST
                     34: #define INCL_WINMLE
                     35: #define INCL_WINSTDFILE
                     36: 
                     37: 
                     38: /* The comments around this line should be removed when the import/export
                     39:     bug in MLEs is fixed */
                     40: /* #define MLE_BUGS_FIXED */
                     41: 
                     42: #include <os2.h>
                     43: #include <string.h>
                     44: #include "sty_main.h"
                     45: #include "sty_xtrn.h"
                     46: #include "sty_dlg.h"
                     47: 
                     48: /*--------------------------------------------------------------*\
                     49:  *  Global variables
                     50: \*--------------------------------------------------------------*/
                     51: 
                     52: CHAR szFullPath[CCHMAXPATH] = "";
                     53: 
                     54: /*--------------------------------------------------------------*\
                     55:  *  Entry point declarations
                     56: \*--------------------------------------------------------------*/
                     57: 
                     58: 
                     59: /****************************************************************\
                     60:  *  New file routine
                     61:  *--------------------------------------------------------------
                     62:  *
                     63:  *  Name:   FileNew(mp2)
                     64:  *
                     65:  *  Purpose: Processes the File menu's New item
                     66:  *
                     67:  *  Usage:  called whenever New from the File menu is selected
                     68:  *
                     69:  *  Method:
                     70:  *
                     71:  *
                     72:  *  Returns:
                     73:  *
                     74: \****************************************************************/
                     75: VOID FileNew(mp2)
                     76: MPARAM mp2;         /* second parameter of WM_COMMAND message */
                     77: {
                     78:     SHORT sT;
                     79: 
                     80:     /*--------------------------------------------------------------*\
                     81:      *  Enter routines for creating a new file and window
                     82:     \*--------------------------------------------------------------*/
                     83: 
                     84:     /* save file if changed */
                     85:     if(WinSendMsg(hwndMLE, MLM_QUERYCHANGED, NULL, NULL))  {
                     86:         sT = MessageBox(hwndMLE,
                     87:                         IDMSG_OVERWRITEFILE,
                     88:                         MB_QUERY | MB_YESNOCANCEL,
                     89:                         FALSE);
                     90: 
                     91: 
                     92:         if(sT == MBID_CANCEL)   /* if user cancels the New, then return */
                     93:             return;
                     94: #ifdef MLE_BUGS_FIXED
                     95:         else
                     96:             if(sT == MBID_YES)
                     97:                 FileSave(NULL);
                     98: #endif
                     99:             /* if sT == MBID_NO, continue with New File processing */
                    100: 
                    101: 
                    102:     }
                    103: 
                    104:     /* disable redrawing of the MLE so the text doesn't "flash" when
                    105:         the MLE is cleared */
                    106:     WinSendMsg(hwndMLE, MLM_DISABLEREFRESH, NULL, NULL);
                    107: 
                    108:     /* clear the MLE by selecting all of the text and clearing it */
                    109:     WinSendMsg(hwndMLE,
                    110:                MLM_SETSEL,
                    111:                MPFROMSHORT(NULL),
                    112:                (MPARAM)WinSendMsg(hwndMLE, MLM_QUERYTEXTLENGTH, NULL, NULL));
                    113: 
                    114:     WinSendMsg(hwndMLE, MLM_CLEAR, NULL, NULL);
                    115: 
                    116:     /* reset the changed flag */
                    117:     WinSendMsg(hwndMLE, MLM_SETCHANGED, MPFROMSHORT((BOOL)FALSE), NULL);
                    118: 
                    119:     /* enable redrawing of the MLE */
                    120:     WinSendMsg(hwndMLE, MLM_ENABLEREFRESH, NULL, NULL);
                    121: 
                    122:     /* reset file name to NULL and update the main title bar*/
                    123:     szFullPath[0] = 0;
                    124:     UpdateTitleText(hwndMainFrame);
                    125: 
                    126: 
                    127:     /* This routine currently doesn't use the mp2 parameter but       *\
                    128:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    129:     \*  warning at compile time.                                      */
                    130:     mp2;
                    131: 
                    132: }   /* FileNew() */
                    133: 
                    134: 
                    135: #ifdef MLE_BUGS_FIXED
                    136: 
                    137: 
                    138: /****************************************************************\
                    139:  *  Open file routine
                    140:  *--------------------------------------------------------------
                    141:  *
                    142:  *  Name:   FileOpen(mp2)
                    143:  *
                    144:  *  Purpose: Processes the File menu's Open item.
                    145:  *
                    146:  *  Usage:  called whenever New from the File menu is selected
                    147:  *
                    148:  *  Method:  calls the standard file open dialog to get the
                    149:  *          file name.  The file name is passed onto DosOpen
                    150:  *          which returns the handle to the file.  The file
                    151:  *          input procedure is called and then the file handle
                    152:  *          is closed.
                    153:  *
                    154:  *  Returns:
                    155:  *
                    156: \****************************************************************/
                    157: VOID FileOpen(mp2)
                    158: MPARAM mp2;     /* second parameter of WM_COMMAND message */
                    159: {
                    160:     FILEDLG fdg;
                    161:     HFILE hfIn;
                    162:     ULONG ulAction;
                    163:     FILESTATUS fstsInfo;
                    164:     PVOID pvBuf;
                    165:     CHAR szTitle[MESSAGELEN], szButton[MESSAGELEN];
                    166: 
                    167:     fdg.cbsize = sizeof(FILEDLG);
                    168: 
                    169:     if(!WinLoadString(hab, NULL, IDS_OPENDLGTITLE, MESSAGELEN, szTitle))  {
                    170:         MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, TRUE);
                    171:         return;
                    172:     }
                    173: 
                    174:     if(!WinLoadString(hab, NULL, IDS_OPENDLGBUTTON, MESSAGELEN, szButton))  {
                    175:         MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, TRUE);
                    176:         return;
                    177:     }
                    178: 
                    179:     fdg.usDialogType = OPEN_DIALOG;
                    180:     fdg.pszTitle = szTitle;
                    181:     fdg.pszOKButton = szButton;
                    182:     fdg.lUser = 0L;
                    183:     fdg.fl = FDS_HELPBUTTON | FDS_CENTER;
                    184:     fdg.pfnDlgProc = NULL;
                    185:     fdg.lReturn = 0L;
                    186:     fdg.lSRC = 0L;
                    187:     fdg.hmod = NULL;
                    188:     fdg.idDlg = IDD_FILEOPEN;
                    189:     fdg.x = 0;
                    190:     fdg.y = 0;
                    191: 
                    192:     if(!WinLoadString(hab,
                    193:                       NULL,
                    194:                       IDS_FILEOPENEXT,
                    195:                       CCHMAXPATH,
                    196:                       fdg.szFullFile))  {
                    197: 
                    198:         MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, TRUE);
                    199:         return;
                    200:     }
                    201: 
                    202:     fdg.pszIType = 0L;
                    203:     fdg.ppszITypeList = 0L;
                    204:     fdg.pszIDrive = 0L;
                    205:     fdg.ppszIDriveList = 0L;
                    206:     fdg.sEAType = 0;
                    207: 
                    208:     /* get the file */
                    209:     if(!KitFileDlg(hwndMain, (PFILEDLG)&fdg))
                    210:         return;
                    211: 
                    212: 
                    213:     /*--------------------------------------------------------------*\
                    214:      *  Upon sucessful return of a file, open it for reading
                    215:     \*--------------------------------------------------------------*/
                    216: 
                    217:     if(fdg.lReturn == ID_OK)  {
                    218:         if( DosOpen(fdg.szFullFile,
                    219:                     &hfIn,
                    220:                     &ulAction,
                    221:                     0L,
                    222:                     FILE_NORMAL,
                    223:                     FILE_OPEN,
                    224:                     OPEN_ACCESS_READONLY | OPEN_SHARE_DENYNONE,
                    225:                     0L))  {
                    226: 
                    227:             MessageBox(hwndMain,
                    228:                        IDMSG_CANNOTOPENINPUTFILE,
                    229:                        MB_OK | MB_ERROR,
                    230:                        FALSE);
                    231:             return;
                    232:         }
                    233: 
                    234:         /* copy file name into file name buffer */
                    235:         strcpy(szFullPath, fdg.szFullFile);
                    236: 
                    237:         /*--------------------------------------------------------------*\
                    238:          *  Place routine for reading the file here
                    239:         \*--------------------------------------------------------------*/
                    240: 
                    241:         /* get the length of the file */
                    242:         if(DosQueryFileInfo(hfIn,
                    243:                             1,
                    244:                             (PVOID)&fstsInfo,
                    245:                             sizeof(FILESTATUS)))  {
                    246:             MessageBox(hwndMain,
                    247:                        IDMSG_CANNOTGETFILEINFO,
                    248:                        MB_OK | MB_ERROR,
                    249:                        FALSE);
                    250: 
                    251:             DosClose(hfIn);
                    252:             return;
                    253:         }
                    254: 
                    255: 
                    256:         /* allocate a buffer for the file */
                    257:         if(DosAllocMem((PPVOID)&pvBuf,
                    258:                        (ULONG)fstsInfo.cbFileAlloc,
                    259:                         fALLOC))  {
                    260:             MessageBox(hwndMain,
                    261:                        IDMSG_CANNOTALLOCATEMEMORY,
                    262:                        MB_OK | MB_ERROR,
                    263:                        FALSE);
                    264: 
                    265:             DosClose(hfIn);
                    266:             return;
                    267:         }
                    268: 
                    269:         /* read in the file */
                    270:         if(DosRead(hfIn, pvBuf, fstsInfo.cbFileAlloc, &ulAction))  {
                    271:             MessageBox(hwndMain,
                    272:                        IDMSG_CANNOTREADFILE,
                    273:                        MB_OK | MB_ERROR,
                    274:                        FALSE);
                    275: 
                    276:             DosClose(hfIn);
                    277:             return;
                    278:         }
                    279: 
                    280:         /* set the file into the MLE */
                    281:         WinSendMsg(hwndMLE,
                    282:                    MLM_SETIMPORTEXPORT,
                    283:                    MPFROMP((PBYTE)pvBuf),
                    284:                    MPFROMSHORT(fstsInfo.cbFileAlloc));
                    285: 
                    286:         WinSendMsg(hwndMLE,
                    287:                    MLM_IMPORT,
                    288:                    MPFROMP(NULL),
                    289:                    MPFROMSHORT(fstsInfo.cbFileAlloc));
                    290: 
                    291:         /* reset the changed flag */
                    292:         WinSendMsg(hwndMLE, MLM_SETCHANGED, MPFROMSHORT((BOOL)FALSE), NULL);
                    293: 
                    294:         DosFreeMem(pvBuf);
                    295: 
                    296:         DosClose(hfIn);
                    297: 
                    298:         UpdateTitleText(hwndMainFrame);
                    299:     }
                    300: 
                    301: 
                    302: 
                    303:     /* This routine currently doesn't use the mp2 parameter but       *\
                    304:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    305:     \*  warning at compile time.                                      */
                    306:     mp2;
                    307: 
                    308: }   /* FileOpen() */
                    309: 
                    310: 
                    311: /****************************************************************\
                    312:  *  Save file routine
                    313:  *--------------------------------------------------------------
                    314:  *
                    315:  *  Name:   FileSave(mp2)
                    316:  *
                    317:  *  Purpose: Processes the File menu's Save item.
                    318:  *
                    319:  *  Usage:  called whenever Save from the File menu is
                    320:  *          selected
                    321:  *
                    322:  *  Method:  Routine calls the application's save routine
                    323:  *
                    324:  *  Returns:
                    325:  *
                    326: \****************************************************************/
                    327: VOID FileSave(mp2)
                    328: MPARAM mp2;     /* second parameter of WM_COMMAND message */
                    329: {
                    330:     HFILE hf;
                    331:     ULONG ulAction;
                    332: 
                    333:     /*
                    334:      * If the file currently is untitled, we will need to get a file
                    335:      * name from the user before we can open the file.  Getting a
                    336:      * file name is normally done during the FileSaveAs operation
                    337:      * so we will treat this save as a SaveAs and call FileSaveAs().
                    338:      * If the file is titled, then we save the file.
                    339:      *
                    340:      * NOTE:  This routine will be called by FileSaveAs(), but only
                    341:      *  after a valid file name has been obtained.  So, FileSaveAs()
                    342:      *  will not be called again from this routine.
                    343:      */
                    344:     if(szFullPath[0] == 0)  {
                    345:         FileSaveAs(mp2);
                    346:         return;
                    347:     }
                    348: 
                    349:     /* open the file */
                    350:     if( DosOpen(szFullPath,
                    351:                 &hf,
                    352:                 &ulAction,
                    353:                 0L,
                    354:                 FILE_NORMAL,
                    355:                 FILE_OPEN | FILE_CREATE,
                    356:                 OPEN_ACCESS_WRITEONLY | OPEN_SHARE_DENYNONE,
                    357:                 0L))  {
                    358: 
                    359:         MessageBox(hwndMain,
                    360:                    IDMSG_CANNOTOPENOUTPUTFILE,
                    361:                    MB_OK | MB_ERROR,
                    362:                    FALSE);
                    363:         return;
                    364:     }
                    365: 
                    366:     WriteFileToDisk(hf);
                    367: 
                    368:     DosClose(hf);
                    369: 
                    370: 
                    371:     /* This routine currently doesn't use the mp2 parameter but       *\
                    372:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    373:     \*  warning at compile time.                                      */
                    374:     mp2;
                    375: 
                    376: }   /* FileSave() */
                    377: 
                    378: /****************************************************************\
                    379:  *  Save As file routine
                    380:  *--------------------------------------------------------------
                    381:  *
                    382:  *  Name:   FileSaveAs(mp2)
                    383:  *
                    384:  *  Purpose: Processes the File menu's Save As item.
                    385:  *
                    386:  *  Usage:  called whenever Save As from the File menu is
                    387:  *          selected
                    388:  *
                    389:  *  Method:  Routine calls the application's Save As routine
                    390:  *
                    391:  *  Returns:
                    392:  *
                    393: \****************************************************************/
                    394: VOID FileSaveAs(mp2)
                    395: MPARAM mp2;     /* second parameter of WM_COMMAND message */
                    396: {
                    397:     HFILE hf;
                    398:     ULONG ulAction;
                    399:     SHORT sT;
                    400: 
                    401:     while(TRUE)  {      /* infinite loop until we break out of it */
                    402: 
                    403:         /* if no file name, then get a file name */
                    404:         if(!GetFileName())
                    405:             return;
                    406: 
                    407:         /* See if the file exists.  If it does, then confirm that the
                    408:          * user wants to overwrite it.  If he doesn't, then get a new
                    409:          * file name
                    410:          */
                    411:         if( DosOpen(szFullPath,     /* file name from, GetFileName() */
                    412:                     &hf,            /* handle of opened file */
                    413:                     &ulAction,
                    414:                     0L,
                    415:                     FILE_NORMAL,
                    416:                     FILE_CREATE,
                    417:                     OPEN_ACCESS_WRITEONLY | OPEN_SHARE_DENYNONE,
                    418:                     0L))  {
                    419: 
                    420:             MessageBox(hwndMain,
                    421:                        IDMSG_CANNOTOPENOUTPUTFILE,
                    422:                        MB_OK | MB_ERROR,
                    423:                        FALSE);
                    424:             return;
                    425:         } else
                    426:             DosClose(hf);
                    427: 
                    428:         /* if file exists, ask if we want to overwrite it */
                    429:         if(ulAction == FILE_EXISTED)  {
                    430:             sT = MessageBox(hwndMLE,
                    431:                             IDMSG_OVERWRITEFILE,
                    432:                             MB_QUERY | MB_YESNOCANCEL,
                    433:                             FALSE);
                    434: 
                    435: 
                    436:             if(sT == MBID_CANCEL)
                    437:                 return;
                    438: 
                    439:             if(sT == MBID_YES)
                    440:                 break;
                    441: 
                    442:             /* if user selected no, repeat the sequence */
                    443:         }
                    444: 
                    445:     }   /* while(TRUE) */
                    446: 
                    447:     UpdateTitleText(hwndMainFrame);
                    448: 
                    449:     /*
                    450:      * Now that we have a valid file name, save the file.  This is
                    451:      * normally done under the File Save function so we can just
                    452:      * call the FileSave() function here.  Note that FileSave() will
                    453:      * not call FileSaveAs() back since there is a valid file name
                    454:      */
                    455:      FileSave(mp2);
                    456: 
                    457: 
                    458: 
                    459:     /* This routine currently doesn't use the mp2 parameter but       *\
                    460:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    461:     \*  warning at compile time.                                      */
                    462:     mp2;
                    463: 
                    464: }   /* FileSaveAs() */
                    465: 
                    466: #endif
                    467: 
                    468: #ifdef PRINT_DLGS_ENABLED
                    469: 
                    470: /****************************************************************\
                    471:  *  Print file routine
                    472:  *--------------------------------------------------------------
                    473:  *
                    474:  *  Name:   FilePrint(mp2)
                    475:  *
                    476:  *  Purpose: Processes the File menu's Print item.
                    477:  *
                    478:  *  Usage:  called whenever Print from the File menu is
                    479:  *          selected
                    480:  *
                    481:  *  Method:  Routine calls the application's print routine
                    482:  *
                    483:  *  Returns:
                    484:  *
                    485: \****************************************************************/
                    486: VOID FilePrint(mp2)
                    487: MPARAM mp2;     /* second parameter of WM_COMMAND message */
                    488: {
                    489: 
                    490:     Print(hwndMain);
                    491: 
                    492: 
                    493:     /* This routine currently doesn't use the mp2 parameter but       *\
                    494:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    495:     \*  warning at compile time.                                      */
                    496:     mp2;
                    497: 
                    498: }   /* FilePrint() */
                    499: 
                    500: /****************************************************************\
                    501:  *  Page setup routine
                    502:  *--------------------------------------------------------------
                    503:  *
                    504:  *  Name:   FilePageSetup(mp2)
                    505:  *
                    506:  *  Purpose: Processes the File menu's Page Setup item.
                    507:  *
                    508:  *  Usage:  called whenever Page Setup from the File menu is
                    509:  *          selected
                    510:  *
                    511:  *  Method:  Routine calls the application's page setup routine
                    512:  *
                    513:  *  Returns:
                    514:  *
                    515: \****************************************************************/
                    516: VOID FilePageSetup(mp2)
                    517: MPARAM mp2;     /* second parameter of WM_COMMAND message */
                    518: {
                    519: 
                    520:     PageSetup(hwndMain);
                    521: 
                    522:     /* This routine currently doesn't use the mp2 parameter but       *\
                    523:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    524:     \*  warning at compile time.                                      */
                    525:     mp2;
                    526: 
                    527: }   /* FilePageSetup() */
                    528: 
                    529: /****************************************************************\
                    530:  *  Print Setup routine
                    531:  *--------------------------------------------------------------
                    532:  *
                    533:  *  Name:   FilePageSetup(mp2)
                    534:  *
                    535:  *  Purpose: Processes the File menu's Print Setup item.
                    536:  *
                    537:  *  Usage:  called whenever Print Setup from the File menu is
                    538:  *          selected
                    539:  *
                    540:  *  Method:  Routine calls the application's Print Setup routine
                    541:  *
                    542:  *  Returns:
                    543:  *
                    544: \****************************************************************/
                    545: VOID FilePrintSetup(mp2)
                    546: MPARAM mp2;     /* second parameter of WM_COMMAND message */
                    547: {
                    548: 
                    549:     PrintSetup(hwndMain);
                    550: 
                    551:     /* This routine currently doesn't use the mp2 parameter but       *\
                    552:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    553:     \*  warning at compile time.                                      */
                    554:     mp2;
                    555: 
                    556: }   /* FilePrintSetup() */
                    557: 
                    558: #endif  /* PRINT_DLGS_ENABLED */
                    559: 
                    560: /****************************************************************\
                    561:  *  Exit routine
                    562:  *--------------------------------------------------------------
                    563:  *
                    564:  *  Name:   FileExit(mp2)
                    565:  *
                    566:  *  Purpose: Processes the File menu's Exit item.
                    567:  *
                    568:  *  Usage:  called whenever Exit from the file menu is
                    569:  *          selected
                    570:  *
                    571:  *  Method:  Routine posts a WM_CLOSE message to the main
                    572:  *           application window.
                    573:  *
                    574:  *  Returns:
                    575:  *
                    576: \****************************************************************/
                    577: VOID FileExit(mp2)
                    578: MPARAM mp2;     /* second parameter of WM_COMMAND message */
                    579: {
                    580: 
                    581:     WinPostMsg(hwndMain, WM_CLOSE, (MPARAM)NULL, (MPARAM)NULL);
                    582: 
                    583: 
                    584:     /* This routine currently doesn't use the mp2 parameter but       *\
                    585:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    586:     \*  warning at compile time.                                      */
                    587:     mp2;
                    588: 
                    589: }   /* FileExit() */
                    590: 
                    591: #ifdef MLE_BUGS_FIXED
                    592: 
                    593: /****************************************************************\
                    594:  *  Write file routine
                    595:  *--------------------------------------------------------------
                    596:  *
                    597:  *  Name:   WriteFileToDisk(hf)
                    598:  *
                    599:  *  Purpose: Writes the current file to the file in szFileName
                    600:  *
                    601:  *  Usage:  called from FileSave and FileSaveAs when a file
                    602:  *          is to be saved to disk
                    603:  *
                    604:  *  Method:  Routine uses the file handle specified and gets
                    605:  *           the text from the MLE and writes the text to the
                    606:  *           file.
                    607:  *
                    608:  *  Returns:
                    609:  *
                    610: \****************************************************************/
                    611: VOID WriteFileToDisk(hf)
                    612: HFILE hf;       /* handle to the input file */
                    613: {
                    614:     ULONG ulWrite;
                    615:     PVOID pvBuf;
                    616:     ULONG ulFileLen;
                    617: 
                    618:     /* get the length of the file */
                    619:     ulFileLen = (ULONG)WinSendMsg(hwndMLE, MLM_QUERYTEXTLENGTH, NULL, NULL);
                    620:     if(!ulFileLen)
                    621:         return;
                    622: 
                    623:     /* allocate a buffer for the file */
                    624:     if(DosAllocMem((PPVOID) &pvBuf, ulFileLen, fALLOC))  {
                    625:         MessageBox(hwndMLE,
                    626:                    IDMSG_CANNOTALLOCATEMEMORY,
                    627:                    MB_OK | MB_ERROR,
                    628:                    FALSE);
                    629:         return;
                    630:     }
                    631: 
                    632: 
                    633:     /* get the file from the MLE */
                    634:     WinSendMsg(hwndMLE,
                    635:                MLM_SETIMPORTEXPORT,
                    636:                MPFROMP((PBYTE)pvBuf),
                    637:                MPFROMLONG(ulFileLen));
                    638: 
                    639:     WinSendMsg(hwndMLE,
                    640:                MLM_EXPORT,
                    641:                MPFROMP(NULL),
                    642:                MPFROMLONG(&ulFileLen));
                    643: 
                    644:     /* Write the file */
                    645:     if(DosWrite(hf, pvBuf, ulFileLen, &ulWrite))  {
                    646:         MessageBox(hwndMLE,
                    647:                    IDMSG_CANNOTWRITETOFILE,
                    648:                    MB_OK | MB_ERROR,
                    649:                    FALSE);
                    650:         return;
                    651:     }
                    652: 
                    653:     /* reset the changed flag */
                    654:     WinSendMsg(hwndMLE, MLM_SETCHANGED, MPFROMSHORT((BOOL)FALSE), NULL);
                    655: 
                    656:     DosFreeMem(pvBuf);
                    657: 
                    658: 
                    659: }   /* WriteFileToDisk() */
                    660: 
                    661: /****************************************************************\
                    662:  *  Get file name routine
                    663:  *--------------------------------------------------------------
                    664:  *
                    665:  *  Name:   GetFileName()
                    666:  *
                    667:  *  Purpose: Gets the name of the save file.
                    668:  *
                    669:  *  Usage:  called when the user is needs to supply a name for
                    670:  *          the file to be saved
                    671:  *
                    672:  *  Method:  calls the standard file open dialog to get the
                    673:  *          file name.
                    674:  *
                    675:  *  Returns: TRUE if successfull in getting a file name, FALSE
                    676:  *              if not
                    677:  *
                    678: \****************************************************************/
                    679: BOOL GetFileName(VOID)
                    680: {
                    681:     FILEDLG fdg;
                    682:     CHAR szTitle[MESSAGELEN], szButton[MESSAGELEN];
                    683: 
                    684:     fdg.cbsize = sizeof(FILEDLG);
                    685:     fdg.usDialogType = SAVEAS_DIALOG;
                    686: 
                    687:     if(!WinLoadString(hab, NULL, IDS_SAVEDLGTITLE, MESSAGELEN, szTitle))  {
                    688:         MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, TRUE);
                    689:         return FALSE;
                    690:     }
                    691: 
                    692:     if(!WinLoadString(hab, NULL, IDS_SAVEDLGBUTTON, MESSAGELEN, szButton))  {
                    693:         MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, TRUE);
                    694:         return FALSE;
                    695:     }
                    696: 
                    697:     fdg.pszTitle = szTitle;
                    698:     fdg.pszOKButton = szButton;
                    699: 
                    700:     fdg.lUser = 0L;
                    701:     fdg.fl = FDS_HELPBUTTON | FDS_CENTER;
                    702:     fdg.pfnDlgProc = NULL;
                    703:     fdg.lReturn = 0L;
                    704:     fdg.lSRC = 0L;
                    705:     fdg.hmod = NULL;
                    706:     fdg.idDlg = IDD_FILESAVE;
                    707:     fdg.x = 0;
                    708:     fdg.y = 0;
                    709:     fdg.pszIType = 0L;
                    710:     fdg.ppszITypeList = 0L;
                    711:     fdg.pszIDrive = 0L;
                    712:     fdg.ppszIDriveList = 0L;
                    713:     fdg.sEAType = 0;
                    714:     strcpy(fdg.szFullFile, szFullPath);
                    715: 
                    716:     /* get the file */
                    717:     if(!KitFileDlg(hwndMLE, (PFILEDLG)&fdg))
                    718:         return FALSE;
                    719: 
                    720:     if(fdg.lReturn != ID_OK)
                    721:         return FALSE;
                    722: 
                    723:     /* copy file name and path returned into buffers */
                    724:     strcpy(szFullPath, fdg.szFullFile);
                    725: 
                    726:     return TRUE;
                    727: 
                    728: }   /* GetFileName() */
                    729: 
                    730: #endif  /* MLE_BUGS_FIXED */
                    731: 
                    732: 
                    733: /****************************************************************\
                    734:  *  Appends the app name to the title bar text
                    735:  *--------------------------------------------------------------
                    736:  *
                    737:  *  Name:   UpdateTitleText(hwnd)
                    738:  *
                    739:  *  Purpose: Updates the text in the main window's title bar to
                    740:  *          display the app name, followed by the separator,
                    741:  *          followed by the file name
                    742:  *
                    743:  *  Usage:  called at init time and when the text file is changed
                    744:  *
                    745:  *  Method:  gets the program name, appends the separator, and
                    746:  *          appends the file name.
                    747:  *
                    748:  *  Returns:
                    749:  *
                    750: \****************************************************************/
                    751: VOID UpdateTitleText(hwnd)
                    752: HWND hwnd;      /* handle to frame window */
                    753: {
                    754:     CHAR szBuf[MAXNAMEL];
                    755:     CHAR szSeparator[TITLESEPARATORLEN+1];
                    756:     PSZ pszT;
                    757: 
                    758:     WinQueryTaskTitle(NULL, szBuf, MAXNAMEL);
                    759: 
                    760:     WinLoadString(hab,
                    761:                   NULL,
                    762:                   IDS_TITLEBARSEPARATOR,
                    763:                   TITLESEPARATORLEN,
                    764:                   szSeparator);
                    765: 
                    766:     strcat(szBuf, szSeparator);
                    767: 
                    768:     if(szFullPath[0] == '\0')
                    769:         pszT = szUntitled;
                    770:     else
                    771:         pszT = szFullPath;
                    772: 
                    773:     strcat(szBuf, pszT);
                    774: 
                    775:     WinSetWindowText(WinWindowFromID(hwnd, FID_TITLEBAR), szBuf);
                    776: 
                    777: }   /* UpdateTitleText() */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.