Annotation of os232sdk/toolkt20/c/samples/template/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 1989, 1990 Microsoft 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_WINSTDFILE
                     35: 
                     36: #include <os2.h>
                     37: #include <string.h>
                     38: #include "main.h"
                     39: #include "xtrn.h"
                     40: 
                     41: /*--------------------------------------------------------------*\
                     42:  *  Global variables
                     43: \*--------------------------------------------------------------*/
                     44: 
                     45: CHAR szFullPath[CCHMAXPATH] = "";
                     46: 
                     47: /*--------------------------------------------------------------*\
                     48:  *  Entry point declarations
                     49: \*--------------------------------------------------------------*/
                     50: 
                     51: 
                     52: /****************************************************************\
                     53:  *  New file routine
                     54:  *--------------------------------------------------------------
                     55:  *
                     56:  *  Name:   FileNew(mp2)
                     57:  *
                     58:  *  Purpose: Processes the File menu's New item
                     59:  *
                     60:  *  Usage:  called whenever New from the File menu is selected
                     61:  *
                     62:  *  Method:
                     63:  *
                     64:  *
                     65:  *  Returns:
                     66:  *
                     67: \****************************************************************/
                     68: VOID FileNew(mp2)
                     69: MPARAM mp2;         /* second parameter of WM_COMMAND message */
                     70: {
                     71:     /*--------------------------------------------------------------*\
                     72:      *  Enter routines for creating a new file and window
                     73:     \*--------------------------------------------------------------*/
                     74: 
                     75: 
                     76:     /* clear file name and reset the titlebar text */
                     77:     szFullPath[0] = '\0';
                     78:     UpdateTitleText(hwndMainFrame);
                     79: 
                     80: 
                     81:     /* This routine currently doesn't use the mp2 parameter but       *\
                     82:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                     83:     \*  warning at compile time.                                      */
                     84:     mp2;
                     85: 
                     86: }   /* FileNew() */
                     87: 
                     88: 
                     89: /****************************************************************\
                     90:  *  Open file routine
                     91:  *--------------------------------------------------------------
                     92:  *
                     93:  *  Name:   FileOpen(mp2)
                     94:  *
                     95:  *  Purpose: Processes the File menu's Open item.
                     96:  *
                     97:  *  Usage:  called whenever New from the File menu is selected
                     98:  *
                     99:  *  Method:  calls the standard file open dialog to get the
                    100:  *          file name.  The file name is passed onto DosOpen
                    101:  *          which returns the handle to the file.  The file
                    102:  *          input procedure is called and then the file handle
                    103:  *          is closed.
                    104:  *
                    105:  *  Returns:
                    106:  *
                    107: \****************************************************************/
                    108: VOID FileOpen(mp2)
                    109: MPARAM mp2;     /* second parameter of WM_COMMAND message sent by menu */
                    110: {
                    111:     FILEDLG fdg;
                    112:     HFILE hfIn;
                    113:     ULONG ulAction;
                    114:     CHAR szTitle[MESSAGELEN], szButton[MESSAGELEN];
                    115: 
                    116:     fdg.cbsize = sizeof(FILEDLG);
                    117: 
                    118:     if(!WinLoadString(hab, NULL, IDS_OPENDLGTITLE, MESSAGELEN, szTitle))  {
                    119:         MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, TRUE);
                    120:         return;
                    121:     }
                    122: 
                    123:     if(!WinLoadString(hab, NULL, IDS_OPENDLGBUTTON, MESSAGELEN, szButton))  {
                    124:         MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, TRUE);
                    125:         return;
                    126:     }
                    127: 
                    128:     fdg.usDialogType = OPEN_DIALOG;
                    129:     fdg.pszTitle = szTitle;
                    130:     fdg.pszOKButton = szButton;
                    131:     fdg.lUser = 0L;
                    132:     fdg.fl = FDS_HELPBUTTON | FDS_CENTER;
                    133:     fdg.pfnDlgProc = NULL;
                    134:     fdg.lReturn = 0L;
                    135:     fdg.lSRC = 0L;
                    136:     fdg.hmod = NULL;
                    137:     fdg.idDlg = FILEOPEN;
                    138:     fdg.x = 0;
                    139:     fdg.y = 0;
                    140: 
                    141:     if(!WinLoadString(hab,
                    142:                       NULL,
                    143:                       IDS_FILEOPENEXT,
                    144:                       CCHMAXPATH,
                    145:                       fdg.szFullFile))  {
                    146: 
                    147:         MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, TRUE);
                    148:         return;
                    149:     }
                    150: 
                    151:     fdg.pszIType = 0L;
                    152:     fdg.ppszITypeList = 0L;
                    153:     fdg.pszIDrive = 0L;
                    154:     fdg.ppszIDriveList = 0L;
                    155:     fdg.sEAType = 0;
                    156: 
                    157:     /* get the file */
                    158:     if(!KitFileDlg(hwndMain, (PFILEDLG)&fdg))
                    159:         return;
                    160: 
                    161: 
                    162:     /*--------------------------------------------------------------*\
                    163:      *  Upon sucessful return of a file, open it for reading
                    164:     \*--------------------------------------------------------------*/
                    165: 
                    166:     if(fdg.lReturn == ID_OK)  {
                    167:         if( DosOpen(fdg.szFullFile,     /* file name from Open dialog */
                    168:                     &hfIn,              /* file handle returned */
                    169:                     &ulAction,
                    170:                     0L,
                    171:                     FILE_NORMAL,
                    172:                     FILE_OPEN,
                    173:                     OPEN_ACCESS_READONLY | OPEN_SHARE_DENYNONE,
                    174:                     0L))  {
                    175:             MessageBox(hwndMain,
                    176:                        IDMSG_CANNOTOPENINPUTFILE,
                    177:                        MB_OK | MB_ERROR,
                    178:                        FALSE);
                    179: 
                    180:             /*-------------------------------------------------------*\
                    181:              *  NOTE:  You now have several options on how to proceed
                    182:              *      from this point:
                    183:              *          - You can abort the File Open by returning from
                    184:              *            this procedure.
                    185:              *          - You can bring up the File Open dialog again
                    186:              *            and have the user pick another file.
                    187:              *          - You can check the error code from the DosOpen,
                    188:              *            determine why the open failed, and take an
                    189:              *            action appropriate to the specific failure.
                    190:             \*-------------------------------------------------------*/
                    191: 
                    192: 
                    193:             return;
                    194:         }
                    195: 
                    196:         /* copy file name into file name buffer */
                    197:         strcpy(szFullPath, fdg.szFullFile);
                    198: 
                    199:         /*--------------------------------------------------------------*\
                    200:          *  Place routine for reading the file here
                    201:         \*--------------------------------------------------------------*/
                    202: 
                    203:         DosClose(hfIn);
                    204: 
                    205:         UpdateTitleText(hwndMainFrame);
                    206:     }
                    207: 
                    208: 
                    209:     /* This routine currently doesn't use the mp2 parameter but       *\
                    210:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    211:     \*  warning at compile time.                                      */
                    212:     mp2;
                    213: 
                    214: }   /* FileOpen() */
                    215: 
                    216: 
                    217: /****************************************************************\
                    218:  *  Save file routine
                    219:  *--------------------------------------------------------------
                    220:  *
                    221:  *  Name:   FileSave(mp2)
                    222:  *
                    223:  *  Purpose: Processes the File menu's Save item.
                    224:  *
                    225:  *  Usage:  called whenever Save from the File menu is
                    226:  *          selected
                    227:  *
                    228:  *  Method:  Routine opens the file for output, calls the
                    229:  *           application's save routine, and closes the file
                    230:  *
                    231:  *  Returns:
                    232:  *
                    233: \****************************************************************/
                    234: VOID FileSave(mp2)
                    235: MPARAM mp2;     /* second parameter of WM_COMMAND message sent by menu */
                    236: {
                    237:     HFILE hf;
                    238:     ULONG ulAction;
                    239: 
                    240:     /*
                    241:      * If the file currently is untitled, we will need to get a file
                    242:      * name from the user before we can open the file.  Getting a
                    243:      * file name is normally done during the FileSaveAs operation
                    244:      * so we will treat this save as a SaveAs and call FileSaveAs().
                    245:      * If the file is titled, then we save the file.
                    246:      *
                    247:      * NOTE:  This routine will be called by FileSaveAs(), but only
                    248:      *  after a valid file name has been obtained.  So, FileSaveAs()
                    249:      *  will not be called again from this routine.
                    250:      */
                    251:     if(szFullPath[0] == '\0')  {
                    252:         FileSaveAs(mp2);
                    253:         return;
                    254:     }
                    255: 
                    256:     /* open the file */
                    257:     if( DosOpen(szFullPath,         /* file name of current document */
                    258:                 &hf,                /* file handle of output file */
                    259:                 &ulAction,
                    260:                 0L,
                    261:                 FILE_NORMAL,
                    262:                 FILE_OPEN | FILE_CREATE,
                    263:                 OPEN_ACCESS_WRITEONLY | OPEN_SHARE_DENYNONE,
                    264:                 0L))  {
                    265: 
                    266:         MessageBox(hwndMain,
                    267:                    IDMSG_CANNOTOPENOUTPUTFILE,
                    268:                    MB_OK | MB_ERROR,
                    269:                    FALSE);
                    270:         return;
                    271:     }
                    272: 
                    273:     WriteFileToDisk(hf);
                    274: 
                    275:     DosClose(hf);
                    276: 
                    277: 
                    278:     /* This routine currently doesn't use the mp2 parameter but       *\
                    279:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    280:     \*  warning at compile time.                                      */
                    281:     mp2;
                    282: 
                    283: }   /* FileSave() */
                    284: 
                    285: /****************************************************************\
                    286:  *  Save As file routine
                    287:  *--------------------------------------------------------------
                    288:  *
                    289:  *  Name:   FileSaveAs(mp2)
                    290:  *
                    291:  *  Purpose: Processes the File menu's Save As item.
                    292:  *
                    293:  *  Usage:  called whenever Save As from the File menu is
                    294:  *          selected
                    295:  *
                    296:  *  Method:  Routine prompts the user for a name for the
                    297:  *           file and then saves the file.
                    298:  *
                    299:  *  Returns:
                    300:  *
                    301: \****************************************************************/
                    302: VOID FileSaveAs(mp2)
                    303: MPARAM mp2;     /* second parameter of WM_COMMAND message sent by menu */
                    304: {
                    305:     HFILE hf;
                    306:     ULONG ulAction;
                    307:     SHORT sT;
                    308: 
                    309:     while(TRUE)  {      /* infinite loop until we break out of it */
                    310: 
                    311:         /* Get a name for the file */
                    312:         if(!GetFileName())  {
                    313:             return;
                    314:         }
                    315: 
                    316:         /* See if the file exists.  If it does, then confirm that the
                    317:          * user wants to overwrite it.  If he doesn't, then get a new
                    318:          * file name
                    319:          */
                    320:         if( DosOpen(szFullPath,     /* file name from, GetFileName() */
                    321:                     &hf,            /* handle of opened file */
                    322:                     &ulAction,
                    323:                     0L,
                    324:                     FILE_NORMAL,
                    325:                     FILE_CREATE,
                    326:                     OPEN_ACCESS_WRITEONLY | OPEN_SHARE_DENYNONE,
                    327:                     0L))  {
                    328: 
                    329:             MessageBox(hwndMain,
                    330:                        IDMSG_CANNOTOPENOUTPUTFILE,
                    331:                        MB_OK | MB_ERROR,
                    332:                        FALSE);
                    333:             return;
                    334:         } else
                    335:             DosClose(hf);
                    336: 
                    337:         /* if file exists, ask if we want to overwrite it */
                    338:         if(ulAction == FILE_EXISTED)  {
                    339:             sT = MessageBox(hwndMain,
                    340:                             IDMSG_OVERWRITEFILE,
                    341:                             MB_QUERY | MB_YESNOCANCEL,
                    342:                             FALSE);
                    343: 
                    344: 
                    345:             if(sT == MBID_CANCEL)
                    346:                 return;
                    347: 
                    348:             if(sT == MBID_YES)
                    349:                 break;
                    350: 
                    351:             /* if user selected no, repeat the sequence */
                    352:         }
                    353: 
                    354:     }   /* while(TRUE) */
                    355: 
                    356:     UpdateTitleText(hwndMainFrame);
                    357: 
                    358:     /*
                    359:      * Now that we have a valid file name, save the file.  This is
                    360:      * normally done under the File Save function so we can just
                    361:      * call the FileSave() function here.  Note that FileSave() will
                    362:      * not call FileSaveAs() back since there is a valid file name
                    363:      */
                    364:      FileSave(mp2);
                    365: 
                    366: 
                    367: 
                    368:     /* This routine currently doesn't use the mp2 parameter but       *\
                    369:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    370:     \*  warning at compile time.                                      */
                    371:     mp2;
                    372: 
                    373: }   /* FileSaveAs() */
                    374: 
                    375: #ifdef PRINT_DLGS_ENABLED
                    376: 
                    377: /****************************************************************\
                    378:  *  Print file routine
                    379:  *--------------------------------------------------------------
                    380:  *
                    381:  *  Name:   FilePrint(mp2)
                    382:  *
                    383:  *  Purpose: Processes the File menu's Print item.
                    384:  *
                    385:  *  Usage:  called whenever Print from the File menu is
                    386:  *          selected
                    387:  *
                    388:  *  Method:  Routine calls the application's print routine
                    389:  *
                    390:  *  Returns:
                    391:  *
                    392: \****************************************************************/
                    393: VOID FilePrint(mp2)
                    394: MPARAM mp2;     /* second parameter of WM_COMMAND message sent by menu */
                    395: {
                    396: 
                    397:     Print(hwndMain);
                    398: 
                    399:     /* This routine currently doesn't use the mp2 parameter but       *\
                    400:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    401:     \*  warning at compile time.                                      */
                    402:     mp2;
                    403: 
                    404: }   /* FilePrint() */
                    405: 
                    406: /****************************************************************\
                    407:  *  Page setup routine
                    408:  *--------------------------------------------------------------
                    409:  *
                    410:  *  Name:   FilePageSetup(mp2)
                    411:  *
                    412:  *  Purpose: Processes the File menu's Page Setup item.
                    413:  *
                    414:  *  Usage:  called whenever Page Setup from the File menu is
                    415:  *          selected
                    416:  *
                    417:  *  Method:  Routine calls the application's page setup routine
                    418:  *
                    419:  *  Returns:
                    420:  *
                    421: \****************************************************************/
                    422: VOID FilePageSetup(mp2)
                    423: MPARAM mp2;     /* second parameter of WM_COMMAND message sent by menu */
                    424: {
                    425: 
                    426:     PageSetup(hwndMain);
                    427: 
                    428:     /* This routine currently doesn't use the mp2 parameter but       *\
                    429:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    430:     \*  warning at compile time.                                      */
                    431:     mp2;
                    432: 
                    433: }   /* FilePageSetup() */
                    434: 
                    435: /****************************************************************\
                    436:  *  Print Setup routine
                    437:  *--------------------------------------------------------------
                    438:  *
                    439:  *  Name:   FilePrintSetup(mp2)
                    440:  *
                    441:  *  Purpose: Processes the File menu's Print Setup item.
                    442:  *
                    443:  *  Usage:  called whenever Print Setup from the File menu is
                    444:  *          selected
                    445:  *
                    446:  *  Method:  Routine calls the application's Print Setup routine
                    447:  *
                    448:  *  Returns:
                    449:  *
                    450: \****************************************************************/
                    451: VOID FilePrintSetup(mp2)
                    452: MPARAM mp2;     /* second parameter of WM_COMMAND message sent by menu */
                    453: {
                    454: 
                    455:     PrintSetup(hwndMain);
                    456: 
                    457:     /* This routine currently doesn't use the mp2 parameter but       *\
                    458:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    459:     \*  warning at compile time.                                      */
                    460:     mp2;
                    461: 
                    462: }   /* FilePrintSetup() */
                    463: 
                    464: #endif  /* PRINT_DLGS_ENABLED */
                    465: 
                    466: /****************************************************************\
                    467:  *  Exit routine
                    468:  *--------------------------------------------------------------
                    469:  *
                    470:  *  Name:   FileExit(mp2)
                    471:  *
                    472:  *  Purpose: Processes the File menu's Exit item.
                    473:  *
                    474:  *  Usage:  called whenever Exit from the file menu is
                    475:  *          selected
                    476:  *
                    477:  *  Method:  Routine posts a WM_CLOSE message to the main
                    478:  *           application window.
                    479:  *
                    480:  *  Returns:
                    481:  *
                    482: \****************************************************************/
                    483: VOID FileExit(mp2)
                    484: MPARAM mp2;     /* second parameter of WM_COMMAND message sent by menu */
                    485: {
                    486: 
                    487:     WinPostMsg(hwndMain, WM_CLOSE, (MPARAM)NULL, (MPARAM)NULL);
                    488: 
                    489:     /* This routine currently doesn't use the mp2 parameter but       *\
                    490:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    491:     \*  warning at compile time.                                      */
                    492:     mp2;
                    493: 
                    494: }   /* FileExit() */
                    495: 
                    496: /****************************************************************\
                    497:  *  Write file routine
                    498:  *--------------------------------------------------------------
                    499:  *
                    500:  *  Name:   WriteFileToDisk(hf)
                    501:  *
                    502:  *  Purpose: Writes the current file to the file in hf
                    503:  *
                    504:  *  Usage:  called from FileSave and FileSaveAs when a file
                    505:  *          is to be saved to disk
                    506:  *
                    507:  *  Method:
                    508:  *
                    509:  *
                    510:  *      NOTE:  This routine must not close the file.
                    511:  *
                    512:  *  Returns:
                    513:  *
                    514: \****************************************************************/
                    515: VOID WriteFileToDisk(hf)                                          \
                    516: HFILE hf;       /* file handle to file opened for input */
                    517: {
                    518: 
                    519:     /*--------------------------------------------------------------*\
                    520:      *  Place routine to write a disk file here
                    521:     \*--------------------------------------------------------------*/
                    522: 
                    523:     hf;
                    524: 
                    525: 
                    526: }   /* WriteFileToDisk() */
                    527: 
                    528: /****************************************************************\
                    529:  *  Get file name routine
                    530:  *--------------------------------------------------------------
                    531:  *
                    532:  *  Name:   GetFileName()
                    533:  *
                    534:  *  Purpose: Gets the name of the save file.
                    535:  *
                    536:  *  Usage:  called when the user needs to supply a name for
                    537:  *          the file to be saved
                    538:  *
                    539:  *  Method:  calls the standard file open dialog to get the
                    540:  *          file name.
                    541:  *
                    542:  *  Returns: TRUE if successful in getting a file name, FALSE
                    543:  *              if not
                    544:  *
                    545: \****************************************************************/
                    546: BOOL GetFileName(VOID)
                    547: {
                    548:     FILEDLG fdg;
                    549:     CHAR szTitle[MESSAGELEN], szButton[MESSAGELEN];
                    550: 
                    551:     fdg.cbsize = sizeof(FILEDLG);
                    552:     fdg.usDialogType = SAVEAS_DIALOG;
                    553: 
                    554:     if(!WinLoadString(hab, NULL, IDS_SAVEDLGTITLE, MESSAGELEN, szTitle))  {
                    555:         MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, TRUE);
                    556:         return FALSE;
                    557:     }
                    558: 
                    559:     if(!WinLoadString(hab, NULL, IDS_SAVEDLGBUTTON, MESSAGELEN, szButton))  {
                    560:         MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, TRUE);
                    561:         return FALSE;
                    562:     }
                    563: 
                    564:     fdg.pszTitle = szTitle;
                    565:     fdg.pszOKButton = szButton;
                    566: 
                    567:     fdg.lUser = 0L;
                    568:     fdg.fl = FDS_HELPBUTTON | FDS_CENTER;
                    569:     fdg.pfnDlgProc = NULL;
                    570:     fdg.lReturn = 0L;
                    571:     fdg.lSRC = 0L;
                    572:     fdg.hmod = NULL;
                    573:     fdg.idDlg = FILESAVE;
                    574:     fdg.x = 0;
                    575:     fdg.y = 0;
                    576:     fdg.pszIType = 0L;
                    577:     fdg.ppszITypeList = 0L;
                    578:     fdg.pszIDrive = 0L;
                    579:     fdg.ppszIDriveList = 0L;
                    580:     fdg.sEAType = 0;
                    581:     strcpy(fdg.szFullFile, szFullPath);
                    582: 
                    583:     /* get the file */
                    584:     if(!KitFileDlg(hwndMain, (PFILEDLG)&fdg))
                    585:         return FALSE;
                    586: 
                    587:     if(fdg.lReturn != ID_OK)
                    588:         return FALSE;
                    589: 
                    590:     /* copy file name and path returned into buffers */
                    591:     strcpy(szFullPath, fdg.szFullFile);
                    592: 
                    593:     return TRUE;
                    594: 
                    595: }   /* GetFileName() */
                    596: 
                    597: /****************************************************************\
                    598:  *  Appends the app name to the title bar text
                    599:  *--------------------------------------------------------------
                    600:  *
                    601:  *  Name:   UpdateTitleText(hwnd)
                    602:  *
                    603:  *  Purpose: Updates the text in the main window's title bar to
                    604:  *          display the app name, followed by the separator,
                    605:  *          followed by the file name
                    606:  *
                    607:  *  Usage:  called at init time and when the text file is changed
                    608:  *
                    609:  *  Method:  gets the program name, appends the separator, and
                    610:  *          appends the file name.
                    611:  *
                    612:  *  Returns:
                    613:  *
                    614: \****************************************************************/
                    615: VOID UpdateTitleText(hwnd)
                    616: HWND hwnd;      /* handle to frame window */
                    617: {
                    618:     CHAR szBuf[MAXNAMEL];
                    619:     CHAR szSeparator[TITLESEPARATORLEN+1];
                    620:     PSZ pszT;
                    621: 
                    622:     WinQueryTaskTitle(NULL, szBuf, MAXNAMEL);
                    623: 
                    624:     WinLoadString(hab,
                    625:                   NULL,
                    626:                   IDS_TITLEBARSEPARATOR,
                    627:                   TITLESEPARATORLEN,
                    628:                   szSeparator);
                    629: 
                    630:     strcat(szBuf, szSeparator);
                    631: 
                    632:     if(szFullPath[0] == '\0')
                    633:         pszT = szUntitled;
                    634:     else
                    635:         pszT = szFullPath;
                    636: 
                    637:     strcat(szBuf, pszT);
                    638: 
                    639:     WinSetWindowText(WinWindowFromID(hwnd, FID_TITLEBAR), szBuf);
                    640: 
                    641: }   /* UpdateTitleText() */

unix.superglobalmegacorp.com

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