Annotation of mstools/samples/sdktools/dlgedit/globals.c, revision 1.1

1.1     ! root        1: 
        !             2: /******************************************************************************\
        !             3: *       This is a part of the Microsoft Source Code Samples. 
        !             4: *       Copyright (C) 1993 Microsoft Corporation.
        !             5: *       All rights reserved. 
        !             6: *       This source code is only intended as a supplement to 
        !             7: *       Microsoft Development Tools and/or WinHelp documentation.
        !             8: *       See these sources for detailed information regarding the 
        !             9: *       Microsoft samples programs.
        !            10: \******************************************************************************/
        !            11: 
        !            12: /****************************** Module Header *******************************
        !            13: * Module Name: globals.c
        !            14: *
        !            15: * Contains global data for the dialog box editor.
        !            16: *
        !            17: ****************************************************************************/
        !            18: 
        !            19: #include "dlgedit.h"
        !            20: #include "dlgextrn.h"           /* Including this verifies they are synched.*/
        !            21: #include "dlgfuncs.h"
        !            22: #include "dialogs.h"
        !            23: #include "dlghelp.h"
        !            24: 
        !            25: HANDLE ghInst;                  /* Application instance handle.         */
        !            26: HMENU ghMenuMain;               /* Main menu handle.                    */
        !            27: PRESLINK gprlHead = NULL;       /* Head of the linked list of resources.*/
        !            28: CURRENTDLG gcd;                 /* Describes the current dialog.        */
        !            29: HPEN hpenDarkGray;              /* A dark gray pen.                     */
        !            30: HANDLE ghAccTable;              /* The accelerator table handle.        */
        !            31: INT gMenuSelected = 0;          /* Currently selected menu item.        */
        !            32: HBITMAP ghbmDragHandle = NULL;  /* Handle for the drag handle bitmap.   */
        !            33: HBITMAP ghbmDragHandle2 = NULL; /* Handle for hollow drag handle bitmap.*/
        !            34: HDC ghDCMem = NULL;             /* Memory DC for drawing bitmaps.       */
        !            35: INT gCurTool = W_NOTHING;       /* Currently selected tool.             */
        !            36: PWINDOWCLASSDESC gpwcdCurTool = NULL; /* Describes current tool.        */
        !            37: BOOL gfToolLocked = FALSE;      /* TRUE if a tool is locked down.       */
        !            38: PCUSTLINK gpclHead = NULL;      /* Head of custom control linked list.  */
        !            39: 
        !            40: /*
        !            41:  * When the dialog editor displays one of its own dialogs, this value
        !            42:  * will contain the resource id of it.  It is zero if there is not a
        !            43:  * dialog up.
        !            44:  */
        !            45: INT gidCurrentDlg = 0;
        !            46: 
        !            47: /*
        !            48:  * Ordinal for the icon control to display in the dialog.  It will be
        !            49:  * initialized to one of the editor's own icons.
        !            50:  */
        !            51: ORDINAL gordIcon;
        !            52: 
        !            53: /*
        !            54:  * Bitmap handles for the up and down W_NOTHING (pointer) tool bitmaps.
        !            55:  */
        !            56: HBITMAP ghbmPointerToolUp = NULL;
        !            57: HBITMAP ghbmPointerToolDown = NULL;
        !            58: 
        !            59: /*-- Initialized "Preferences" Data ------------------------------------*/
        !            60: 
        !            61: /*
        !            62:  * Initialization data structure.  This describes each profile entry
        !            63:  * that is contained in the initialization file.
        !            64:  */
        !            65: INIENTRY gaie[] = {
        !            66:     { L"fHexMode",      &gfHexMode,         FALSE,              0 },
        !            67:     { L"fTranslateMode",&gfTranslateMode,   FALSE,              0 },
        !            68:     { L"fShowToolbox",  &gfShowToolbox,     TRUE,               0 },
        !            69:     { L"fUseNewKeywords",&gfUseNewKeywords, TRUE,               0 },
        !            70:     { L"cxGrid",        &gcxGrid,           DEFCXGRID,          0 },
        !            71:     { L"cyGrid",        &gcyGrid,           DEFCYGRID,          0 },
        !            72:     { L"xMargin",       &gxMargin,          DEFXMARGIN,         0 },
        !            73:     { L"yMargin",       &gyMargin,          DEFYMARGIN,         0 },
        !            74:     { L"xSpace",        &gxSpace,           DEFXSPACE,          0 },
        !            75:     { L"ySpace",        &gySpace,           DEFYSPACE,          0 },
        !            76:     { L"xMinPushSpace", &gxMinPushSpace,    DEFXMINPUSHSPACE,   0 },
        !            77:     { L"xMaxPushSpace", &gxMaxPushSpace,    DEFXMAXPUSHSPACE,   0 },
        !            78:     { L"yPushSpace",    &gyPushSpace,       DEFYPUSHSPACE,      0 },
        !            79:     { NULL,             NULL,               0,                  0 }
        !            80: };
        !            81: 
        !            82: BOOL gfHexMode;                 /* TRUE if in "hex" mode.               */
        !            83: BOOL gfTranslateMode;           /* TRUE if in "translate" mode.         */
        !            84: BOOL gfShowToolbox;             /* TRUE if Toolbox is to be shown.      */
        !            85: BOOL gfUseNewKeywords;          /* FALSE to only use "CONTROL" keyword. */
        !            86: INT gcxGrid;                    /* Current X grid.                      */
        !            87: INT gcyGrid;                    /* Current Y grid.                      */
        !            88: INT gxMargin;                   /* Top/bottom margin.                   */
        !            89: INT gyMargin;                   /* Left/right margin.                   */
        !            90: INT gxSpace;                    /* Horizontal control spacing.          */
        !            91: INT gySpace;                    /* Vertical control spacing.            */
        !            92: INT gxMinPushSpace;             /* Minimum horizontal button spacing.   */
        !            93: INT gxMaxPushSpace;             /* Maximum horizontal button spacing.   */
        !            94: INT gyPushSpace;                /* Vertical button spacing.             */
        !            95: 
        !            96: TCHAR szAppPos[] = L"AppPos";   /* App window's position keyname.       */
        !            97: TCHAR szTBPos[] = L"TBPos";     /* Toolbox window's position keyname.   */
        !            98: TCHAR szCustomDLL[] = L"CustomDLL";/* Section name for DLL cust. cntls. */
        !            99: 
        !           100: /*-- Sundry Handles.----------------------------------------------------*/
        !           101: HWND hwndStatus = NULL;         /* Status ribbon window handle.         */
        !           102: HWND ghwndToolbox = NULL;       /* Toolbox window handle.               */
        !           103: HWND ghwndTestDlg = NULL;       /* Handle of the Test Mode dialog.      */
        !           104: HWND ghwndMain = NULL;          /* Main application window.             */
        !           105: HWND ghwndSubClient = NULL;     /* The "fake" client area.              */
        !           106: HWND ghwndTrackOver = NULL;     /* Window being tracked over.           */
        !           107: 
        !           108: /*-- Some System constants.---------------------------------------------*/
        !           109: INT gcxSysChar;                 /* Pixel width of system font char box. */
        !           110: INT gcySysChar;                 /* Pixel height of system font char box.*/
        !           111: INT gcyBorder;                  /* System height of a border.           */
        !           112: INT gcxPreDragMax;              /* Max X mouse move during pre-drag.    */
        !           113: INT gcyPreDragMax;              /* Max Y mouse move during pre-drag.    */
        !           114: INT gmsecPreDrag;               /* The milliseconds that pre-drag lasts.*/
        !           115: INT gcyPixelsPerInch;           /* Vertical pixels/inch of system.      */
        !           116: INT gcyStatus;                  /* Saves height of the status window.   */
        !           117: 
        !           118: /*-- Some state variables.----------------------------------------------*/
        !           119: INT gState = STATE_NORMAL;      /* Has the editor "state" or mode.      */
        !           120: BOOL gfResChged = FALSE;        /* Tell if RES has changed              */
        !           121: BOOL gfIncChged = FALSE;        /* Tell if include has changed          */
        !           122: BOOL gfDlgChanged = FALSE;      /* TRUE if current dialog has changed.  */
        !           123: INT gcSelected = 0;             /* Count of selected windows.           */
        !           124: BOOL gfTestMode = FALSE;        /* TRUE if in "test" mode.              */
        !           125: BOOL gfDisabled = FALSE;        /* TRUE if editing is disabled for now. */
        !           126: BOOL gfEditingDlg = FALSE;      /* TRUE means a dlg is picked to edit.  */
        !           127: BOOL gfDlgSelected = FALSE;     /* TRUE if the dialog has the selection.*/
        !           128: 
        !           129: /*
        !           130:  * Contains the window rectangle, in window units, for the "client"
        !           131:  * area for the currently chosen dialog being edited.  This rectangle
        !           132:  * is relative to the dialog box window.  The xLeft and yBottom fields
        !           133:  * contain the offset from the window origin of the dialog box to the
        !           134:  * origin of the "client" area.
        !           135:  */
        !           136: RECT grcDlgClient;
        !           137: 
        !           138: /*
        !           139:  * Contains a rectangle that surrounds all the existing controls.  This
        !           140:  * is used during tracking of the dialog to limit the minimum size that
        !           141:  * the dialog can be sized to.
        !           142:  */
        !           143: RECT grcMinDialog;
        !           144: 
        !           145: /*
        !           146:  * Contains the offset from the origin of the currently selected
        !           147:  * control to the mouse pointer.  This is updated when a control
        !           148:  * is clicked on and is used for dragging calculations.
        !           149:  */
        !           150: POINT gptCursorOffset;
        !           151: 
        !           152: /*
        !           153:  * Contains the rectangle that surrounds the selected control(s).  This
        !           154:  * rectangle is only valid if there are selected controls.
        !           155:  */
        !           156: RECT grcSelected;
        !           157: 
        !           158: /*
        !           159:  * Contains the rectangle that surrounds the control(s) that are being
        !           160:  * copied.  This is also used during a clipboard paste operation.  In
        !           161:  * that case, it contains the rectangle that surrounds the control(s)
        !           162:  * as they are defined in the res image.
        !           163:  */
        !           164: RECT grcCopy;
        !           165: 
        !           166: /*
        !           167:  * These contain the current location of the tracking rectangle when
        !           168:  * dragging a control.  The values for grcTrackDU are in Dialog Units
        !           169:  * (DU's) and the values in grcTrackWin are in window units.  The
        !           170:  * grcTrackWin values will only be valid if gfTrackRectShown is TRUE;
        !           171:  */
        !           172: RECT grcTrackDU;                /* Track rect in dialog units.          */
        !           173: RECT grcTrackWin;               /* Track rect in window units.          */
        !           174: BOOL gfTrackRectShown = FALSE;  /* TRUE if track rect is visible.       */
        !           175: HDC ghDCTrack;                  /* Clip DC used when tracking.          */
        !           176: 
        !           177: /*
        !           178:  * Contains the current drag handle that is being tracked.  This will
        !           179:  * be one of the DRAG_* constants.
        !           180:  */
        !           181: INT gHandleHit = DRAG_CENTER;
        !           182: 
        !           183: /*
        !           184:  * Contains the overhang that is allowed during the current tracking
        !           185:  * operation.  This is used by various routines during dragging so
        !           186:  * that limiting the tracking to the dialog boundaries works properly.
        !           187:  * In actuality, this is only non-zero when a combo box control is
        !           188:  * being drapped or dragged.  It will be the height of the listbox
        !           189:  * portion of the combo.  This is how combos are allowed to extend
        !           190:  * below the bottom of the dialog.
        !           191:  */
        !           192: INT gnOverHang;                 /* Maximum overhang during the drag.    */
        !           193: 
        !           194: /*
        !           195:  * This pointer is either NULL, or else it points to a dialog resource.
        !           196:  * It is used when copying dialogs/controls, either with the Duplicate
        !           197:  * command or pasting from the clipboard.
        !           198:  */
        !           199: PRES gpResCopy;                 /* Copy of dialog/controls.             */
        !           200: 
        !           201: /*-- CTYPE linked lists.------------------------------------------------*/
        !           202: NPCTYPE npcHead = NULL;         /* Linked List of controls.             */
        !           203: INT cWindows = 0;               /* Number of Controls in pctype list.   */
        !           204: 
        !           205: /*
        !           206:  * Pointer to the CTYPE structure for the currently selected control.
        !           207:  * This will be NULL if there is no control selected.
        !           208:  */
        !           209: NPCTYPE gnpcSel = NULL;
        !           210: 
        !           211: /*-- Cursors used by editor.--------------------------------------------*/
        !           212: HCURSOR hcurArrow = NULL;       /* Normal arrow cursor.                 */
        !           213: HCURSOR hcurWait = NULL;        /* User Wait cursor, Hourglass.         */
        !           214: HCURSOR hcurOutSel = NULL;      /* Outline selection cursor.            */
        !           215: HCURSOR hcurMove = NULL;        /* System "Move" cursor.                */
        !           216: HCURSOR hcurInsert = NULL;      /* Insert cursor for Order/Group dialog.*/
        !           217: HCURSOR hcurDropTool = NULL;    /* Cursor for when dropping new ctrls.  */
        !           218: HCURSOR hcurSizeNESW = NULL;    /* System sizing "NESW" cursor.         */
        !           219: HCURSOR hcurSizeNS = NULL;      /* System sizing "NS" cursor.           */
        !           220: HCURSOR hcurSizeNWSE = NULL;    /* System sizing "NWSE" cursor.         */
        !           221: HCURSOR hcurSizeWE = NULL;      /* System sizing "WE" cursor.           */
        !           222: HBITMAP hbmTabStop = NULL;      /* Bitmap for showing WS_TABSTOP style. */
        !           223: HBITMAP hbmTabStopSel = NULL;   /* Selected version of the above.       */
        !           224: 
        !           225: /*-- Window Class Strings.----------------------------------------------*/
        !           226: TCHAR szMainClass[] = L"DlgEdit";/* Application window class.           */
        !           227: TCHAR szDragClass[] = L"Drag";  /* Class for drag handle windows.       */
        !           228: TCHAR szSubClientClass[] =
        !           229:     L"SubClient";               /* Short client area window class.      */
        !           230: TCHAR szToolboxClass[] =
        !           231:     L"Toolbox";                 /* Toolbox window class.                */
        !           232: TCHAR szToolBtnClass[] =
        !           233:     L"ToolBtn";                 /* Toolbox button window class.         */
        !           234: TCHAR szCustomClass[] =
        !           235:     L"DlgCustom";               /* Our custom emulator class.           */
        !           236: 
        !           237: /*-- Miscellaneous variables.-------------------------------------------*/
        !           238: UINT fmtDlg;                    /* The Dialog Clipboard format          */
        !           239: TCHAR szEmpty[] = L"";          /* An empty string.                     */
        !           240: HHOOK ghhkMsgFilter;            /* Hook handle for message filter func. */
        !           241: 
        !           242: /*-- Buffers.-----------------------------------------------------------*/
        !           243: TCHAR szFullResFile[CCHMAXPATH];    /* Full resource file name          */
        !           244: LPTSTR pszResFile;                  /* Points to resource file name     */
        !           245: TCHAR szFullIncludeFile[CCHMAXPATH];/* Full include file name           */
        !           246: LPTSTR pszIncludeFile;              /* Points to include file name      */
        !           247: TCHAR gszHelpFile[CCHMAXPATH];      /* Path to the help file.           */
        !           248: 
        !           249: /*
        !           250:  * Write buffer and index into it.  This buffer is used by several
        !           251:  * sections to write out the different files.  Note that only one
        !           252:  * file can be written out at a time using these globals.
        !           253:  */
        !           254: TCHAR gachWriteBuffer[CCHFILEBUFFER];/* Buffer for written file data.   */
        !           255: INT cbWritePos;                     /* Pointer into gachWriteBuffer.    */
        !           256: 
        !           257: /*-- Include Data.------------------------------------------------------*/
        !           258: NPLABEL plInclude = NULL;       /* Pointer to Include data              */
        !           259: NPLABEL plDelInclude = NULL;    /* Pointer to deleted includes          */
        !           260: 
        !           261: /*
        !           262:  * Describes each window class.  Indexed by the W_ defined constants.
        !           263:  * The define CCONTROLS needs to be updated if controls are added or
        !           264:  * removed from this array.  Note that CCONTROLS does NOT count the
        !           265:  * W_DIALOG type as a control, however.
        !           266:  */
        !           267: WINDOWCLASSDESC awcd[] = {
        !           268:     /*
        !           269:      * W_TEXT
        !           270:      */
        !           271:     {
        !           272:         W_TEXT,
        !           273:         WS_CHILD | WS_GROUP | WS_VISIBLE | SS_LEFT,
        !           274:         WS_DISABLED,
        !           275:         0,
        !           276:         0,
        !           277:         20, 8,
        !           278:         IC_STATIC, NULL,
        !           279:         FALSE, FALSE, TRUE, TRUE, TRUE,
        !           280:         DID_TEXTSTYLES, (WNDPROC)GenericStylesDlgProc,
        !           281:         HELPID_TEXTSTYLES, IDS_DEFTXTTEXT, NULL, NULL,
        !           282:         IDBM_CTTEXT, NULL, NULL,
        !           283:         IDBM_TUTEXT, NULL, IDBM_TDTEXT, NULL,
        !           284:         NULL, 0, NULL, NULL, NULL, 0
        !           285:     },
        !           286:     /*
        !           287:      * W_EDIT
        !           288:      */
        !           289:     {
        !           290:         W_EDIT,
        !           291:         WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_LEFT |
        !           292:         ES_AUTOHSCROLL,
        !           293:         WS_DISABLED,
        !           294:         0,
        !           295:         0,
        !           296:         32, 12,
        !           297:         IC_EDIT, NULL,
        !           298:         FALSE, FALSE, FALSE, TRUE, FALSE,
        !           299:         DID_EDITSTYLES, (WNDPROC)EditStylesDlgProc,
        !           300:         HELPID_EDITSTYLES, IDS_NULL, NULL, NULL,
        !           301:         IDBM_CTEDIT, NULL, NULL,
        !           302:         IDBM_TUEDIT, NULL, IDBM_TDEDIT, NULL,
        !           303:         NULL, 0, NULL, NULL, NULL, 0
        !           304:     },
        !           305:     /*
        !           306:      * W_GROUPBOX
        !           307:      */
        !           308:     {
        !           309:         W_GROUPBOX,
        !           310:         WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
        !           311:         WS_DISABLED,
        !           312:         0,
        !           313:         0,
        !           314:         48, 40,
        !           315:         IC_BUTTON, NULL,
        !           316:         FALSE, FALSE, TRUE, TRUE, FALSE,
        !           317:         DID_GROUPBOXSTYLES, (WNDPROC)GenericStylesDlgProc,
        !           318:         HELPID_GROUPBOXSTYLES, IDS_DEFTXTGROUP, NULL, NULL,
        !           319:         IDBM_CTGROUP, NULL, NULL,
        !           320:         IDBM_TUGROUP, NULL, IDBM_TDGROUP, NULL,
        !           321:         NULL, 0, NULL, NULL, NULL, 0
        !           322:     },
        !           323:     /*
        !           324:      * W_PUSHBUTTON
        !           325:      */
        !           326:     {
        !           327:         W_PUSHBUTTON,
        !           328:         WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
        !           329:         WS_DISABLED,
        !           330:         0,
        !           331:         0,
        !           332:         40, 14,
        !           333:         IC_BUTTON, NULL,
        !           334:         FALSE, FALSE, TRUE, TRUE, TRUE,
        !           335:         DID_PUSHBUTTONSTYLES, (WNDPROC)PushButtonStylesDlgProc,
        !           336:         HELPID_PUSHBUTTONSTYLES, IDS_DEFTXTPUSHBUTTON, NULL, NULL,
        !           337:         IDBM_CTPUSH, NULL, NULL,
        !           338:         IDBM_TUPUSH, NULL, IDBM_TDPUSH, NULL,
        !           339:         NULL, 0, NULL, NULL, NULL, 0
        !           340:     },
        !           341:     /*
        !           342:      * W_CHECKBOX
        !           343:      */
        !           344:     {
        !           345:         W_CHECKBOX,
        !           346:         WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX | WS_TABSTOP,
        !           347:         WS_DISABLED,
        !           348:         0,
        !           349:         0,
        !           350:         40, 10,
        !           351:         IC_BUTTON, NULL,
        !           352:         FALSE, FALSE, TRUE, TRUE, TRUE,
        !           353:         DID_CHECKBOXSTYLES, (WNDPROC)CheckBoxStylesDlgProc,
        !           354:         HELPID_CHECKBOXSTYLES, IDS_DEFTXTCHECKBOX, NULL, NULL,
        !           355:         IDBM_CTCHECK, NULL, NULL,
        !           356:         IDBM_TUCHECK, NULL, IDBM_TDCHECK, NULL,
        !           357:         NULL, 0, NULL, NULL, NULL, 0
        !           358:     },
        !           359:     /*
        !           360:      * W_RADIOBUTTON
        !           361:      */
        !           362:     {
        !           363:         W_RADIOBUTTON,
        !           364:         WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
        !           365:         WS_DISABLED,
        !           366:         0,
        !           367:         0,
        !           368:         39, 10,
        !           369:         IC_BUTTON, NULL,
        !           370:         FALSE, FALSE, TRUE, TRUE, TRUE,
        !           371:         DID_RADIOBUTTONSTYLES, (WNDPROC)RadioButtonStylesDlgProc,
        !           372:         HELPID_RADIOBUTTONSTYLES, IDS_DEFTXTRADIOBUTTON, NULL, NULL,
        !           373:         IDBM_CTRADIO, NULL, NULL,
        !           374:         IDBM_TURADIO, NULL, IDBM_TDRADIO, NULL,
        !           375:         NULL, 0, NULL, NULL, NULL, 0
        !           376:     },
        !           377:     /*
        !           378:      * W_COMBOBOX
        !           379:      */
        !           380:     {
        !           381:         W_COMBOBOX,
        !           382:         WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN |
        !           383:         CBS_SORT,
        !           384:         WS_DISABLED | CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE |
        !           385:         CBS_HASSTRINGS,
        !           386:         CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE | CBS_HASSTRINGS,
        !           387:         0,
        !           388:         48, 35,
        !           389:         IC_COMBOBOX, NULL,
        !           390:         FALSE, FALSE, FALSE, TRUE, FALSE,
        !           391:         DID_COMBOBOXSTYLES, (WNDPROC)ComboBoxStylesDlgProc,
        !           392:         HELPID_COMBOBOXSTYLES, IDS_NULL, NULL, NULL,
        !           393:         IDBM_CTCOMBO, NULL, NULL,
        !           394:         IDBM_TUCOMBO, NULL, IDBM_TDCOMBO, NULL,
        !           395:         NULL, 0, NULL, NULL, NULL, 0
        !           396:     },
        !           397:     /*
        !           398:      * W_LISTBOX
        !           399:      */
        !           400:     {
        !           401:         W_LISTBOX,
        !           402:         WS_CHILD | WS_VISIBLE | LBS_STANDARD | WS_TABSTOP,
        !           403:         WS_DISABLED | LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE |
        !           404:         LBS_HASSTRINGS | LBS_NODATA,
        !           405:         LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE | LBS_HASSTRINGS |
        !           406:         LBS_NODATA,
        !           407:         0,
        !           408:         48, 40,
        !           409:         IC_LISTBOX, NULL,
        !           410:         FALSE, FALSE, FALSE, TRUE, FALSE,
        !           411:         DID_LISTBOXSTYLES, (WNDPROC)ListBoxStylesDlgProc,
        !           412:         HELPID_LISTBOXSTYLES, IDS_NULL, NULL, NULL,
        !           413:         IDBM_CTLIST, NULL, NULL,
        !           414:         IDBM_TULIST, NULL, IDBM_TDLIST, NULL,
        !           415:         NULL, 0, NULL, NULL, NULL, 0
        !           416:     },
        !           417:     /*
        !           418:      * W_HORZSCROLL
        !           419:      */
        !           420:     {
        !           421:         W_HORZSCROLL,
        !           422:         WS_CHILD | WS_VISIBLE | SBS_HORZ,
        !           423:         WS_DISABLED,
        !           424:         0,
        !           425:         0,
        !           426:         48, 0,
        !           427:         IC_SCROLLBAR, NULL,
        !           428:         FALSE, FALSE, FALSE, TRUE, FALSE,
        !           429:         DID_HORZSCROLLSTYLES, (WNDPROC)GenericStylesDlgProc,
        !           430:         HELPID_HORZSCROLLSTYLES, IDS_NULL, NULL, NULL,
        !           431:         IDBM_CTHSCROL, NULL, NULL,
        !           432:         IDBM_TUHSCROL, NULL, IDBM_TDHSCROL, NULL,
        !           433:         NULL, 0, NULL, NULL, NULL, 0
        !           434:     },
        !           435:     /*
        !           436:      * W_VERTSCROLL
        !           437:      */
        !           438:     {
        !           439:         W_VERTSCROLL,
        !           440:         WS_CHILD | WS_VISIBLE | SBS_VERT,
        !           441:         WS_DISABLED,
        !           442:         0,
        !           443:         0,
        !           444:         0, 40,
        !           445:         IC_SCROLLBAR, NULL,
        !           446:         FALSE, FALSE, FALSE, TRUE, FALSE,
        !           447:         DID_VERTSCROLLSTYLES, (WNDPROC)GenericStylesDlgProc,
        !           448:         HELPID_VERTSCROLLSTYLES, IDS_NULL, NULL, NULL,
        !           449:         IDBM_CTVSCROL, NULL, NULL,
        !           450:         IDBM_TUVSCROL, NULL, IDBM_TDVSCROL, NULL,
        !           451:         NULL, 0, NULL, NULL, NULL, 0
        !           452:     },
        !           453:     /*
        !           454:      * W_FRAME
        !           455:      */
        !           456:     {
        !           457:         W_FRAME,
        !           458:         WS_CHILD | WS_VISIBLE | SS_BLACKFRAME,
        !           459:         WS_DISABLED,
        !           460:         0,
        !           461:         0,
        !           462:         20, 16,
        !           463:         IC_STATIC, NULL,
        !           464:         FALSE, FALSE, FALSE, TRUE, FALSE,
        !           465:         DID_FRAMESTYLES, (WNDPROC)GenericStylesDlgProc,
        !           466:         HELPID_FRAMESTYLES, IDS_NULL, NULL, NULL,
        !           467:         IDBM_CTFRAME, NULL, NULL,
        !           468:         IDBM_TUFRAME, NULL, IDBM_TDFRAME, NULL,
        !           469:         NULL, 0, NULL, NULL, NULL, 0
        !           470:     },
        !           471:     /*
        !           472:      * W_RECT
        !           473:      */
        !           474:     {
        !           475:         W_RECT,
        !           476:         WS_CHILD | WS_VISIBLE | SS_BLACKRECT,
        !           477:         WS_DISABLED,
        !           478:         0,
        !           479:         0,
        !           480:         20, 16,
        !           481:         IC_STATIC, NULL,
        !           482:         FALSE, FALSE, FALSE, TRUE, FALSE,
        !           483:         DID_RECTSTYLES, (WNDPROC)GenericStylesDlgProc,
        !           484:         HELPID_RECTSTYLES, IDS_NULL, NULL, NULL,
        !           485:         IDBM_CTRECT, NULL, NULL,
        !           486:         IDBM_TURECT, NULL, IDBM_TDRECT, NULL,
        !           487:         NULL, 0, NULL, NULL, NULL, 0
        !           488:     },
        !           489:     /*
        !           490:      * W_ICON
        !           491:      */
        !           492:     {
        !           493:         W_ICON,
        !           494:         WS_CHILD | WS_VISIBLE | SS_ICON,
        !           495:         WS_DISABLED,
        !           496:         0,
        !           497:         0,
        !           498:         0, 0,
        !           499:         IC_STATIC, NULL,
        !           500:         FALSE, FALSE, TRUE, FALSE, FALSE,
        !           501:         DID_ICONSTYLES, (WNDPROC)GenericStylesDlgProc,
        !           502:         HELPID_ICONSTYLES, IDS_NULL, NULL, NULL,
        !           503:         IDBM_CTICON, NULL, NULL,
        !           504:         IDBM_TUICON, NULL, IDBM_TDICON, NULL,
        !           505:         NULL, 0, NULL, NULL, NULL, 0
        !           506:     },
        !           507:     /*
        !           508:      * W_CUSTOM
        !           509:      *
        !           510:      * For Custom controls, we do not allow our emulator control
        !           511:      * to be created with any other styles than the default ones
        !           512:      * (WS_CHILD and WS_VISIBLE), but whatever styles the user
        !           513:      * specifies are written out to the .res and .dlg files,
        !           514:      * of course.
        !           515:      */
        !           516:     {
        !           517:         W_CUSTOM,
        !           518:         WS_CHILD | WS_VISIBLE,
        !           519:         WS_DISABLED,
        !           520:         0,
        !           521:         0,
        !           522:         40, 14,
        !           523:         IC_CUSTOM, NULL,
        !           524:         TRUE, FALSE, TRUE, TRUE, FALSE,
        !           525:         DID_CUSTOMSTYLES, (WNDPROC)CustomStylesDlgProc,
        !           526:         HELPID_CUSTOMSTYLES, IDS_NULL, NULL, NULL,
        !           527:         IDBM_CTCUSTOM, NULL, NULL,
        !           528:         IDBM_TUCUSTOM, NULL, IDBM_TDCUSTOM, NULL,
        !           529:         NULL, 0, NULL, NULL, NULL, 0
        !           530:     },
        !           531:     /*
        !           532:      * W_DIALOG
        !           533:      */
        !           534:     {
        !           535:         W_DIALOG,
        !           536:         WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | WS_POPUP |
        !           537:         DS_SETFONT,
        !           538:         WS_DISABLED | DS_SYSMODAL | WS_CLIPCHILDREN | WS_CLIPSIBLINGS |
        !           539:         WS_CHILD,
        !           540:         DS_SYSMODAL,
        !           541:         0,
        !           542:         160, 100,
        !           543:         IC_DIALOG, NULL,
        !           544:         FALSE, FALSE, TRUE, TRUE, FALSE,
        !           545:         DID_DIALOGSTYLES, (WNDPROC)DialogStylesDlgProc,
        !           546:         HELPID_DIALOGSTYLES, IDS_DEFTXTDIALOG, NULL, NULL,
        !           547:         0, NULL, NULL,
        !           548:         0, NULL, 0, NULL,
        !           549:         NULL, 0, NULL, NULL, NULL, 0
        !           550:     }
        !           551: };
        !           552: 
        !           553: /*
        !           554:  * This table maps the BS_* style of a button control into its
        !           555:  * appropriate W_* type that is used internally by the editor.
        !           556:  * This table assumes that any value used to index into it is
        !           557:  * masked by BS_ALL.
        !           558:  */
        !           559: INT rgmpiClsBtnType[] = {
        !           560:     W_PUSHBUTTON,               /* BS_PUSHBUTTON                        */
        !           561:     W_PUSHBUTTON,               /* BS_DEFPUSHBUTTON                     */
        !           562:     W_CHECKBOX,                 /* BS_CHECKBOX                          */
        !           563:     W_CHECKBOX,                 /* BS_AUTOCHECKBOX                      */
        !           564:     W_RADIOBUTTON,              /* BS_RADIOBUTTON                       */
        !           565:     W_CHECKBOX,                 /* BS_3STATE                            */
        !           566:     W_CHECKBOX,                 /* BS_AUTO3STATE                        */
        !           567:     W_GROUPBOX,                 /* BS_GROUPBOX                          */
        !           568:     W_PUSHBUTTON,               /* BS_USERBUTTON                        */
        !           569:     W_RADIOBUTTON,              /* BS_AUTORADIOBUTTON                   */
        !           570:     W_PUSHBUTTON,               /* BS_PUSHBOX                           */
        !           571:     W_PUSHBUTTON                /* BS_OWNERDRAW                         */
        !           572: };
        !           573: 
        !           574: /* Map low word of Static Control Style to static type. */
        !           575: /*
        !           576:  * This table maps the SS_* style of a static control into its
        !           577:  * appropriate W_* type that is used internally by the editor.
        !           578:  * This table assumes that any value used to index into it is
        !           579:  * masked by SS_ALL.
        !           580:  */
        !           581: INT rgmpiClsStcType[] = {
        !           582:     W_TEXT,                     /* SS_LEFT                              */
        !           583:     W_TEXT,                     /* SS_CENTER                            */
        !           584:     W_TEXT,                     /* SS_RIGHT                             */
        !           585:     W_ICON,                     /* SS_ICON                              */
        !           586:     W_RECT,                     /* SS_BLACKRECT                         */
        !           587:     W_RECT,                     /* SS_GREYRECT                          */
        !           588:     W_RECT,                     /* SS_WHITERECT                         */
        !           589:     W_FRAME,                    /* SS_BLACKFRAME                        */
        !           590:     W_FRAME,                    /* SS_GRAYFRAME                         */
        !           591:     W_FRAME,                    /* SS_WHITEFRAME                        */
        !           592:     W_TEXT,                     /* SS_USERITEM                          */
        !           593:     W_TEXT,                     /* SS_SIMPLE                            */
        !           594:     W_TEXT                      /* SS_LEFTNOWORDWRAP                    */
        !           595: };
        !           596: 
        !           597: /*
        !           598:  * Following are the tables with the predefined RC keywords for each
        !           599:  * class (IC_*).  These tables describe each keyword other than the
        !           600:  * generic "CONTROL" keyword that is possible to use within a dialog
        !           601:  * template.  The style describes the minimum bits that must be set
        !           602:  * to define the keyword.  The mask allows a style to be specified
        !           603:  * that must have certain bits OFF for a match to occur.  The default
        !           604:  * styles flag specifies style bits that are implicitly turned on
        !           605:  * when this keyword is specified in the dialog template in the .DLG
        !           606:  * file.  These bits are checked against the style flag of the control
        !           607:  * that we are trying to match and if any of these default bits are
        !           608:  * NOT set for that control, we need to specify them in the .DLG file
        !           609:  * with a "NOT" in front of them to explicitly turn them off.
        !           610:  *
        !           611:  * The "Has Text" flag is set to FALSE in those cases where the syntax
        !           612:  * for the keyword does NOT include a text field, like "ICON" and
        !           613:  * "LISTBOX".
        !           614:  */
        !           615: 
        !           616: /*
        !           617:  * Array of the predefined RC keywords for Button styles.
        !           618:  */
        !           619: static RCKEYWORD arckwdButton[] = {
        !           620:     /*
        !           621:      * RADIOBUTTON
        !           622:      */
        !           623:     {
        !           624:         BS_RADIOBUTTON,
        !           625:         BS_ALL,
        !           626:         WS_CHILD | WS_VISIBLE,
        !           627:         IDS_KEYRADIOBUTTON, TRUE
        !           628:     },
        !           629:     /*
        !           630:      * CHECKBOX
        !           631:      */
        !           632:     {
        !           633:         BS_CHECKBOX,
        !           634:         BS_ALL,
        !           635:         WS_CHILD | WS_VISIBLE | WS_TABSTOP,
        !           636:         IDS_KEYCHECKBOX, TRUE
        !           637:     },
        !           638:     /*
        !           639:      * DEFPUSHBUTTON
        !           640:      */
        !           641:     {
        !           642:         BS_DEFPUSHBUTTON,
        !           643:         BS_ALL,
        !           644:         WS_CHILD | WS_VISIBLE | WS_TABSTOP,
        !           645:         IDS_KEYDEFPUSHBUTTON, TRUE
        !           646:     },
        !           647:     /*
        !           648:      * PUSHBUTTON
        !           649:      */
        !           650:     {
        !           651:         BS_PUSHBUTTON,
        !           652:         BS_ALL,
        !           653:         WS_CHILD | WS_VISIBLE | WS_TABSTOP,
        !           654:         IDS_KEYPUSHBUTTON, TRUE
        !           655:     },
        !           656:     /*
        !           657:      * GROUPBOX
        !           658:      */
        !           659:     {
        !           660:         BS_GROUPBOX,
        !           661:         BS_ALL,
        !           662:         WS_CHILD | WS_VISIBLE,
        !           663:         IDS_KEYGROUPBOX, TRUE
        !           664:     },
        !           665:     /*
        !           666:      * AUTO3STATE
        !           667:      */
        !           668:     {
        !           669:         BS_AUTO3STATE,
        !           670:         BS_ALL,
        !           671:         WS_CHILD | WS_VISIBLE | WS_TABSTOP,
        !           672:         IDS_KEYAUTO3STATE, TRUE
        !           673:     },
        !           674:     /*
        !           675:      * AUTOCHECKBOX
        !           676:      */
        !           677:     {
        !           678:         BS_AUTOCHECKBOX,
        !           679:         BS_ALL,
        !           680:         WS_CHILD | WS_VISIBLE | WS_TABSTOP,
        !           681:         IDS_KEYAUTOCHECKBOX, TRUE
        !           682:     },
        !           683:     /*
        !           684:      * AUTORADIOBUTTON
        !           685:      */
        !           686:     {
        !           687:         BS_AUTORADIOBUTTON,
        !           688:         BS_ALL,
        !           689:         WS_CHILD | WS_VISIBLE,
        !           690:         IDS_KEYAUTORADIOBUTTON, TRUE
        !           691:     },
        !           692:     /*
        !           693:      * STATE3
        !           694:      */
        !           695:     {
        !           696:         BS_3STATE,
        !           697:         BS_ALL,
        !           698:         WS_CHILD | WS_VISIBLE | WS_TABSTOP,
        !           699:         IDS_KEYSTATE3, TRUE
        !           700:     },
        !           701:     /*
        !           702:      * USERBUTTON
        !           703:      */
        !           704:     {
        !           705:         BS_USERBUTTON,
        !           706:         BS_ALL,
        !           707:         WS_CHILD | WS_VISIBLE | WS_TABSTOP,
        !           708:         IDS_KEYUSERBUTTON, TRUE
        !           709:     }
        !           710: };
        !           711: 
        !           712: /*
        !           713:  * Array of the predefined RC keywords for Edit control styles.
        !           714:  */
        !           715: static RCKEYWORD arckwdEdit[] = {
        !           716:     /*
        !           717:      * EDIT
        !           718:      */
        !           719:     {
        !           720:         0L,
        !           721:         0L,
        !           722:         WS_CHILD | WS_VISIBLE | ES_LEFT | WS_TABSTOP | WS_BORDER,
        !           723:         IDS_KEYEDITTEXT, FALSE
        !           724:     }
        !           725: };
        !           726: 
        !           727: /*
        !           728:  * Array of the predefined RC keywords for Static styles.
        !           729:  */
        !           730: static RCKEYWORD arckwdStatic[] = {
        !           731:     /*
        !           732:      * ICON
        !           733:      */
        !           734:     {
        !           735:         SS_ICON,
        !           736:         SS_ALL,
        !           737:         WS_CHILD | WS_VISIBLE,
        !           738:         IDS_KEYICON, TRUE
        !           739:     },
        !           740:     /*
        !           741:      * RTEXT
        !           742:      */
        !           743:     {
        !           744:         SS_RIGHT,
        !           745:         SS_ALL,
        !           746:         WS_CHILD | WS_GROUP | WS_VISIBLE,
        !           747:         IDS_KEYRTEXT, TRUE
        !           748:     },
        !           749:     /*
        !           750:      * CTEXT
        !           751:      */
        !           752:     {
        !           753:         SS_CENTER,
        !           754:         SS_ALL,
        !           755:         WS_CHILD | WS_GROUP | WS_VISIBLE,
        !           756:         IDS_KEYCTEXT, TRUE
        !           757:     },
        !           758:     /*
        !           759:      * LTEXT
        !           760:      */
        !           761:     {
        !           762:         SS_LEFT,
        !           763:         SS_ALL,
        !           764:         WS_CHILD | WS_GROUP | WS_VISIBLE,
        !           765:         IDS_KEYLTEXT, TRUE
        !           766:     }
        !           767: };
        !           768: 
        !           769: /*
        !           770:  * Array of the predefined RC keywords for ListBox styles.
        !           771:  */
        !           772: static RCKEYWORD arckwdLB[] = {
        !           773:     /*
        !           774:      * LISTBOX
        !           775:      */
        !           776:     {
        !           777:         0L,
        !           778:         0L,
        !           779:         WS_CHILD | WS_VISIBLE | WS_BORDER | LBS_NOTIFY,
        !           780:         IDS_KEYLISTBOX, FALSE
        !           781:     }
        !           782: };
        !           783: 
        !           784: /*
        !           785:  * Array of the predefined RC keywords for ComboBox styles.
        !           786:  */
        !           787: static RCKEYWORD arckwdComboBox[] = {
        !           788:     /*
        !           789:      * COMBOBOX
        !           790:      */
        !           791:     {
        !           792:         0L,
        !           793:         0L,
        !           794:         WS_CHILD | WS_VISIBLE,
        !           795:         IDS_KEYCOMBOBOX, FALSE
        !           796:     }
        !           797: };
        !           798: 
        !           799: /*
        !           800:  * Array of the predefined RC keywords for ScrollBar styles.
        !           801:  */
        !           802: static RCKEYWORD arckwdScrollBar[] = {
        !           803:     /*
        !           804:      * SCROLLBAR
        !           805:      */
        !           806:     {
        !           807:         0L,
        !           808:         0L,
        !           809:         WS_CHILD | WS_VISIBLE,
        !           810:         IDS_KEYSCROLLBAR, FALSE
        !           811:     }
        !           812: };
        !           813: 
        !           814: 
        !           815: /*
        !           816:  * Following are the Class Styles structures.  These tables define the
        !           817:  * styles for the different window classes (IC_*).  The first element
        !           818:  * is the style flag, followed by an optional style mask.  If the style
        !           819:  * mask is zero, the style flag becomes the mask also.  This is often good
        !           820:  * enough, but there are cases where the style depends on certain bits
        !           821:  * being off, as well as certain bits being on, to definitively identify
        !           822:  * a certain style.  An extreme example of this is the BS_PUSHBUTTON
        !           823:  * style, which is actually zero (no bits are on).  The mask for this
        !           824:  * style had to be set to include all four of the lower bits, or all
        !           825:  * buttons would be incorrectly figured to have the BS_PUSHBUTTON style.
        !           826:  * With the proper mask, only styles that have all four lower bits
        !           827:  * OFF will be considered to have the BS_PUSHBUTTON style.
        !           828:  */
        !           829: 
        !           830: /*
        !           831:  * Button styles.
        !           832:  */
        !           833: static CLASSSTYLE acsButton[] = {
        !           834:     {BS_PUSHBUTTON,         BS_ALL,     DID_BS_PUSHBUTTON           },
        !           835:     {BS_DEFPUSHBUTTON,      BS_ALL,     DID_BS_DEFPUSHBUTTON        },
        !           836:     {BS_CHECKBOX,           BS_ALL,     0                           },
        !           837:     {BS_AUTOCHECKBOX,       BS_ALL,     0                           },
        !           838:     {BS_RADIOBUTTON,        BS_ALL,     0                           },
        !           839:     {BS_3STATE,             BS_ALL,     0                           },
        !           840:     {BS_AUTO3STATE,         BS_ALL,     0                           },
        !           841:     {BS_GROUPBOX,           BS_ALL,     0                           },
        !           842:     {BS_USERBUTTON,         BS_ALL,     0                           },
        !           843:     {BS_AUTORADIOBUTTON,    BS_ALL,     0                           },
        !           844:     {BS_PUSHBOX,            BS_ALL,     0                           },
        !           845:     {BS_OWNERDRAW,          BS_ALL,     DID_BS_OWNERDRAW            },
        !           846:     {BS_LEFTTEXT,           0,          DID_BS_LEFTTEXT             }
        !           847: };
        !           848: 
        !           849: /*
        !           850:  * Scroll bar styles.
        !           851:  */
        !           852: static CLASSSTYLE acsSB[] = {
        !           853:     {SBS_HORZ,              SBS_ALL,    0                           },
        !           854:     {SBS_VERT,              SBS_ALL,    0                           },
        !           855:     {SBS_TOPALIGN,          0,          0                           },
        !           856:     {SBS_LEFTALIGN,         0,          0                           },
        !           857:     {SBS_BOTTOMALIGN,       0,          0                           },
        !           858:     {SBS_RIGHTALIGN,        0,          0                           },
        !           859:     {SBS_SIZEBOXTOPLEFTALIGN, 0,        0                           },
        !           860:     {SBS_SIZEBOXBOTTOMRIGHTALIGN, 0,    0                           },
        !           861:     {SBS_SIZEBOX,           0,          0                           }
        !           862: };
        !           863: 
        !           864: /*
        !           865:  * Entry field styles.
        !           866:  */
        !           867: static CLASSSTYLE acsEdit[] = {
        !           868:     {ES_LEFT,               ES_ALIGN,   DID_ES_LEFT                 },
        !           869:     {ES_CENTER,             ES_ALIGN,   DID_ES_CENTER               },
        !           870:     {ES_RIGHT,              ES_ALIGN,   DID_ES_RIGHT                },
        !           871:     {ES_MULTILINE,          0,          DID_ES_MULTILINE            },
        !           872:     {ES_UPPERCASE,          0,          DID_ES_UPPERCASE            },
        !           873:     {ES_LOWERCASE,          0,          DID_ES_LOWERCASE            },
        !           874:     {ES_PASSWORD,           0,          DID_ES_PASSWORD             },
        !           875:     {ES_AUTOVSCROLL,        0,          DID_ES_AUTOVSCROLL          },
        !           876:     {ES_AUTOHSCROLL,        0,          DID_ES_AUTOHSCROLL          },
        !           877:     {ES_NOHIDESEL,          0,          DID_ES_NOHIDESEL            },
        !           878:     {ES_OEMCONVERT,         0,          DID_ES_OEMCONVERT           },
        !           879:     {ES_READONLY,           0,          DID_ES_READONLY             }
        !           880: };
        !           881: 
        !           882: /*
        !           883:  * Static styles.
        !           884:  */
        !           885: static CLASSSTYLE acsStatic[] = {
        !           886:     {SS_LEFT,               SS_ALL,     DID_SS_LEFT                 },
        !           887:     {SS_CENTER,             SS_ALL,     DID_SS_CENTER               },
        !           888:     {SS_RIGHT,              SS_ALL,     DID_SS_RIGHT                },
        !           889:     {SS_ICON,               SS_ALL,     0                           },
        !           890:     {SS_BLACKRECT,          SS_ALL,     DID_SS_BLACKRECT            },
        !           891:     {SS_GRAYRECT,           SS_ALL,     DID_SS_GRAYRECT             },
        !           892:     {SS_WHITERECT,          SS_ALL,     DID_SS_WHITERECT            },
        !           893:     {SS_BLACKFRAME,         SS_ALL,     DID_SS_BLACKFRAME           },
        !           894:     {SS_GRAYFRAME,          SS_ALL,     DID_SS_GRAYFRAME            },
        !           895:     {SS_WHITEFRAME,         SS_ALL,     DID_SS_WHITEFRAME           },
        !           896:     {SS_USERITEM,           SS_ALL,     DID_SS_USERITEM             },
        !           897:     {SS_SIMPLE,             SS_ALL,     DID_SS_SIMPLE               },
        !           898:     {SS_LEFTNOWORDWRAP,     SS_ALL,     DID_SS_LEFTNOWORDWRAP       },
        !           899:     {SS_NOPREFIX,           0,          DID_SS_NOPREFIX             }
        !           900: };
        !           901: 
        !           902: /*
        !           903:  * List box styles.
        !           904:  */
        !           905: static CLASSSTYLE acsLB[] = {
        !           906:     {LBS_NOTIFY,            0,          DID_LBS_NOTIFY              },
        !           907:     {LBS_SORT,              0,          DID_LBS_SORT                },
        !           908:     {LBS_NOREDRAW,          0,          DID_LBS_NOREDRAW            },
        !           909:     {LBS_MULTIPLESEL,       0,          DID_LBS_MULTIPLESEL         },
        !           910:     {LBS_OWNERDRAWFIXED,    0,          DID_LBS_OWNERDRAWFIXED      },
        !           911:     {LBS_OWNERDRAWVARIABLE, 0,          DID_LBS_OWNERDRAWVARIABLE   },
        !           912:     {LBS_HASSTRINGS,        0,          DID_LBS_HASSTRINGS          },
        !           913:     {LBS_USETABSTOPS,       0,          DID_LBS_USETABSTOPS         },
        !           914:     {LBS_NOINTEGRALHEIGHT,  0,          DID_LBS_NOINTEGRALHEIGHT    },
        !           915:     {LBS_MULTICOLUMN,       0,          DID_LBS_MULTICOLUMN         },
        !           916:     {LBS_WANTKEYBOARDINPUT, 0,          DID_LBS_WANTKEYBOARDINPUT   },
        !           917:     {LBS_EXTENDEDSEL,       0,          DID_LBS_EXTENDEDSEL         },
        !           918:     {LBS_DISABLENOSCROLL,   0,          DID_LBS_DISABLENOSCROLL     },
        !           919:     {LBS_NODATA,            0,          DID_LBS_NODATA              }
        !           920: };
        !           921: 
        !           922: /*
        !           923:  * Combo Box styles.
        !           924:  */
        !           925: static CLASSSTYLE acsComboBox[] = {
        !           926:     {CBS_SIMPLE,            CBS_ALL,    DID_CBS_SIMPLE              },
        !           927:     {CBS_DROPDOWN,          CBS_ALL,    DID_CBS_DROPDOWN            },
        !           928:     {CBS_DROPDOWNLIST,      CBS_ALL,    DID_CBS_DROPDOWNLIST        },
        !           929:     {CBS_OWNERDRAWFIXED,    0,          DID_CBS_OWNERDRAWFIXED      },
        !           930:     {CBS_OWNERDRAWVARIABLE, 0,          DID_CBS_OWNERDRAWVARIABLE   },
        !           931:     {CBS_AUTOHSCROLL,       0,          DID_CBS_AUTOHSCROLL         },
        !           932:     {CBS_OEMCONVERT,        0,          DID_CBS_OEMCONVERT          },
        !           933:     {CBS_SORT,              0,          DID_CBS_SORT                },
        !           934:     {CBS_HASSTRINGS,        0,          DID_CBS_HASSTRINGS          },
        !           935:     {CBS_NOINTEGRALHEIGHT,  0,          DID_CBS_NOINTEGRALHEIGHT    },
        !           936:     {CBS_DISABLENOSCROLL,   0,          DID_CBS_DISABLENOSCROLL     }
        !           937: };
        !           938: 
        !           939: /*
        !           940:  * Dialog styles.
        !           941:  */
        !           942: static CLASSSTYLE acsDialog[] = {
        !           943:     {DS_ABSALIGN,           0,          DID_DS_ABSALIGN             },
        !           944:     {DS_SYSMODAL,           0,          DID_DS_SYSMODAL             },
        !           945:     {DS_LOCALEDIT,          0,          DID_DS_LOCALEDIT            },
        !           946:     {DS_SETFONT,            0,          0                           },
        !           947:     {DS_MODALFRAME,         0,          DID_DS_MODALFRAME           },
        !           948:     {DS_NOIDLEMSG,          0,          DID_DS_NOIDLEMSG            },
        !           949:     /*
        !           950:      * The following two styles are the same bits as WS_GROUP and
        !           951:      * WS_TABSTOP, so they must be in this table and there has
        !           952:      * to be special case code for writing the appropriate string
        !           953:      * out when writing dialog styles.
        !           954:      */
        !           955:     {WS_MINIMIZEBOX,        0,          DID_WS_MINIMIZEBOX          },
        !           956:     {WS_MAXIMIZEBOX,        0,          DID_WS_MAXIMIZEBOX          }
        !           957: };
        !           958: 
        !           959: /*
        !           960:  * Window styles.
        !           961:  */
        !           962: static CLASSSTYLE acsWindow[] = {
        !           963:     {WS_POPUP,              0,          DID_WS_POPUP                },
        !           964:     {WS_CHILD,              0,          DID_WS_CHILD                },
        !           965:     {WS_MINIMIZE,           0,          DID_WS_MINIMIZE             },
        !           966:     {WS_VISIBLE,            0,          DID_WS_VISIBLE              },
        !           967:     {WS_DISABLED,           0,          DID_WS_DISABLED             },
        !           968:     {WS_CLIPSIBLINGS,       0,          DID_WS_CLIPSIBLINGS         },
        !           969:     {WS_CLIPCHILDREN,       0,          DID_WS_CLIPCHILDREN         },
        !           970:     {WS_MAXIMIZE,           0,          DID_WS_MAXIMIZE             },
        !           971:     {WS_CAPTION,            WS_CAPTIONALL, DID_WS_CAPTION           },
        !           972:     {WS_BORDER,             WS_CAPTIONALL, DID_WS_BORDER            },
        !           973:     {WS_DLGFRAME,           WS_CAPTIONALL, DID_WS_DLGFRAME          },
        !           974:     {WS_VSCROLL,            0,          DID_WS_VSCROLL              },
        !           975:     {WS_HSCROLL,            0,          DID_WS_HSCROLL              },
        !           976:     {WS_SYSMENU,            0,          DID_WS_SYSMENU              },
        !           977:     {WS_THICKFRAME,         0,          DID_WS_THICKFRAME           },
        !           978:     {WS_GROUP,              0,          DID_WS_GROUP                },
        !           979:     {WS_TABSTOP,            0,          DID_WS_TABSTOP              }
        !           980: };
        !           981: 
        !           982: /*
        !           983:  * Resource Flags styles.
        !           984:  */
        !           985: static CLASSSTYLE acsResFlags[] = {
        !           986:     {MMF_MOVEABLE,          0,          DID_MMF_MOVEABLE            },
        !           987:     {MMF_PURE,              0,          DID_MMF_PURE                },
        !           988:     {MMF_PRELOAD,           0,          DID_MMF_PRELOAD             },
        !           989:     {MMF_DISCARDABLE,       0,          DID_MMF_DISCARDABLE         }
        !           990: };
        !           991: 
        !           992: /*
        !           993:  * Extended Styles.
        !           994:  */
        !           995: static CLASSSTYLE acsExStyle[] = {
        !           996:     {WS_EX_DLGMODALFRAME,   0,          0                           },
        !           997:     {WS_EX_NOPARENTNOTIFY,  0,          0                           },
        !           998:     {WS_EX_TOPMOST,         0,          0                           },
        !           999:     {WS_EX_ACCEPTFILES,     0,          0                           },
        !          1000:     {WS_EX_TRANSPARENT,     0,          0                           }
        !          1001: };
        !          1002: 
        !          1003: 
        !          1004: /*
        !          1005:  * Array of class style description structures.  These are indexed by
        !          1006:  * the IC_* constants and describe each class.  They contain pointers
        !          1007:  * to both the class styles array and the predefined keywords array
        !          1008:  * for each class.
        !          1009:  *
        !          1010:  * The last few entries are included in the table for convenience,
        !          1011:  * and are used to describe things like the various window (WS_*, WS_EX_*)
        !          1012:  * and resource memory flags (MMF_*) styles, although they don't exactly
        !          1013:  * map to an IC_* style that a control will have.
        !          1014:  */
        !          1015: CLASSSTYLEDESC acsd[] = {
        !          1016:     /*
        !          1017:      * IC_BUTTON
        !          1018:      */
        !          1019:     {
        !          1020:         IDS_WCBUTTON,
        !          1021:         acsButton, sizeof(acsButton) / sizeof(CLASSSTYLE), IDS_IC_BUTTON,
        !          1022:         arckwdButton, sizeof(arckwdButton) / sizeof(RCKEYWORD),
        !          1023:         ORDID_BUTTONCLASS
        !          1024:     },
        !          1025:     /*
        !          1026:      * IC_SCROLLBAR
        !          1027:      */
        !          1028:     {
        !          1029:         IDS_WCSCROLLBAR,
        !          1030:         acsSB, sizeof(acsSB) / sizeof(CLASSSTYLE), IDS_IC_SCROLLBAR,
        !          1031:         arckwdScrollBar, sizeof(arckwdScrollBar) / sizeof(RCKEYWORD),
        !          1032:         ORDID_SCROLLBARCLASS
        !          1033:     },
        !          1034:     /*
        !          1035:      * IC_EDIT
        !          1036:      */
        !          1037:     {
        !          1038:         IDS_WCEDIT,
        !          1039:         acsEdit, sizeof(acsEdit) / sizeof(CLASSSTYLE), IDS_IC_EDIT,
        !          1040:         arckwdEdit, sizeof(arckwdEdit) / sizeof(RCKEYWORD),
        !          1041:         ORDID_EDITCLASS
        !          1042:     },
        !          1043:     /*
        !          1044:      * IC_STATIC
        !          1045:      */
        !          1046:     {
        !          1047:         IDS_WCSTATIC,
        !          1048:         acsStatic, sizeof(acsStatic) / sizeof(CLASSSTYLE), IDS_IC_STATIC,
        !          1049:         arckwdStatic, sizeof(arckwdStatic) / sizeof(RCKEYWORD),
        !          1050:         ORDID_STATICCLASS
        !          1051:     },
        !          1052:     /*
        !          1053:      * IC_LISTBOX
        !          1054:      */
        !          1055:     {
        !          1056:         IDS_WCLISTBOX,
        !          1057:         acsLB, sizeof(acsLB) / sizeof(CLASSSTYLE), IDS_IC_LISTBOX,
        !          1058:         arckwdLB, sizeof(arckwdLB) / sizeof(RCKEYWORD),
        !          1059:         ORDID_LISTBOXCLASS
        !          1060:     },
        !          1061:     /*
        !          1062:      * IC_COMBOBOX
        !          1063:      */
        !          1064:     {
        !          1065:         IDS_WCCOMBOBOX,
        !          1066:         acsComboBox, sizeof(acsComboBox) / sizeof(CLASSSTYLE), IDS_IC_COMBOBOX,
        !          1067:         arckwdComboBox, sizeof(arckwdComboBox) / sizeof(RCKEYWORD),
        !          1068:         ORDID_COMBOBOXCLASS
        !          1069:     },
        !          1070:     /*
        !          1071:      * IC_CUSTOM
        !          1072:      */
        !          1073:     {
        !          1074:         IDS_WCCUSTOM,
        !          1075:         NULL, 0, 0,
        !          1076:         NULL, 0,
        !          1077:         0
        !          1078:     },
        !          1079:     /*
        !          1080:      * IC_DIALOG
        !          1081:      */
        !          1082:     {
        !          1083:         IDS_WCDIALOG,
        !          1084:         acsDialog, sizeof(acsDialog) / sizeof(CLASSSTYLE), IDS_IC_DIALOG,
        !          1085:         NULL, 0,
        !          1086:         0
        !          1087:     },
        !          1088:     /*
        !          1089:      * IC_WINDOW
        !          1090:      */
        !          1091:     {
        !          1092:         IDS_NULL,
        !          1093:         acsWindow, sizeof(acsWindow) / sizeof(CLASSSTYLE), IDS_IC_WINDOW,
        !          1094:         NULL, 0,
        !          1095:         0
        !          1096:     },
        !          1097:     /*
        !          1098:      * IC_RESFLAGS
        !          1099:      */
        !          1100:     {
        !          1101:         IDS_NULL,
        !          1102:         acsResFlags, sizeof(acsResFlags) / sizeof(CLASSSTYLE), 0,
        !          1103:         NULL, 0,
        !          1104:         0
        !          1105:     },
        !          1106:     /*
        !          1107:      * IC_EXSTYLE
        !          1108:      */
        !          1109:     {
        !          1110:         IDS_NULL,
        !          1111:         acsExStyle, sizeof(acsExStyle) / sizeof(CLASSSTYLE), IDS_IC_EXSTYLE,
        !          1112:         NULL, 0,
        !          1113:         0
        !          1114:     }
        !          1115: };
        !          1116: 
        !          1117: /*
        !          1118:  * Message box messages, for the Message() function.
        !          1119:  */
        !          1120: MESSAGEDATA gamdMessages[] = {
        !          1121:     { IDS_DELETEDIALOG,     MB_YESNO | MB_ICONEXCLAMATION       },
        !          1122:     { IDS_OUTOFMEMORY,      MB_OK | MB_ICONHAND                 },
        !          1123:     { IDS_CANTCREATE,       MB_OK | MB_ICONEXCLAMATION          },
        !          1124:     { IDS_SYMNOCHANGE,      MB_OK | MB_ICONEXCLAMATION          },
        !          1125:     { IDS_IDSYMMISMATCH,    MB_OK | MB_ICONEXCLAMATION          },
        !          1126:     { IDS_CLOSING,          MB_YESNOCANCEL | MB_ICONEXCLAMATION },
        !          1127:     { IDS_BADRESFILE,       MB_OK | MB_ICONEXCLAMATION          },
        !          1128:     { IDS_INCLCLOSING,      MB_YESNOCANCEL | MB_ICONEXCLAMATION },
        !          1129:     { IDS_SYMEXISTS,        MB_OK | MB_ICONEXCLAMATION          },
        !          1130:     { IDS_BADSYMBOLID,      MB_OK | MB_ICONEXCLAMATION          },
        !          1131:     { IDS_LABELDUPID,       MB_OK | MB_ICONEXCLAMATION          },
        !          1132:     { IDS_SELECTFIRST,      MB_OK | MB_ICONEXCLAMATION          },
        !          1133:     { IDS_CTRLDUPID,        MB_OK | MB_ICONEXCLAMATION          },
        !          1134:     { IDS_BADCUSTDLL,       MB_OK | MB_ICONEXCLAMATION          },
        !          1135:     { IDS_NOCLIP,           MB_OK | MB_ICONEXCLAMATION          },
        !          1136:     { IDS_INTERNAL,         MB_OK | MB_ICONEXCLAMATION          },
        !          1137:     { IDS_NOMOUSE,          MB_OK | MB_ICONEXCLAMATION          },
        !          1138:     { IDS_NOINIT,           MB_OK | MB_ICONEXCLAMATION          },
        !          1139:     { IDS_GTZERO,           MB_OK | MB_ICONEXCLAMATION          },
        !          1140:     { IDS_ICONNAMEHASBLANKS,MB_OK | MB_ICONEXCLAMATION          },
        !          1141:     { IDS_IDUPIDS,          MB_OK | MB_ICONEXCLAMATION          },
        !          1142:     { IDS_CREATECTRLERROR,  MB_OK | MB_ICONEXCLAMATION          },
        !          1143:     { IDS_CANTOPENRES,      MB_OK | MB_ICONEXCLAMATION          },
        !          1144:     { IDS_CONFIRMDISCARD,   MB_YESNO | MB_ICONEXCLAMATION       },
        !          1145:     { IDS_SYMNOTFOUND,      MB_OK | MB_ICONEXCLAMATION          },
        !          1146:     { IDS_NOCLASS,          MB_OK | MB_ICONEXCLAMATION          },
        !          1147:     { IDS_POSITIVENUM,      MB_OK | MB_ICONEXCLAMATION          },
        !          1148:     { IDS_MEMERROR,         MB_OK | MB_ICONHAND                 },
        !          1149:     { IDS_DLGNAMEHASBLANKS, MB_OK | MB_ICONEXCLAMATION          },
        !          1150:     { IDS_NODLGNAME,        MB_OK | MB_ICONEXCLAMATION          },
        !          1151:     { IDS_CANTINITDLL,      MB_OK | MB_ICONEXCLAMATION          },
        !          1152:     { IDS_NOICONNAME,       MB_OK | MB_ICONEXCLAMATION          },
        !          1153:     { IDS_RESTOREDIALOG,    MB_YESNO | MB_ICONEXCLAMATION       },
        !          1154:     { IDS_ZEROPOINTSIZE,    MB_OK | MB_ICONEXCLAMATION          },
        !          1155:     { IDS_MINGTMAXSPACE,    MB_OK | MB_ICONEXCLAMATION          },
        !          1156:     { IDS_CUSTCNTLINUSE,    MB_OK | MB_ICONEXCLAMATION          },
        !          1157:     { IDS_CUSTALREADYLOADED,MB_OK | MB_ICONEXCLAMATION          },
        !          1158:     { IDS_CANTLOADDLL,      MB_OK | MB_ICONEXCLAMATION          },
        !          1159:     { IDS_DLLBADEXPORTS,    MB_OK | MB_ICONEXCLAMATION          },
        !          1160:     { IDS_DLLBADCOUNT,      MB_OK | MB_ICONEXCLAMATION          }
        !          1161: };
        !          1162: 
        !          1163: /*
        !          1164:  * Table that maps menu items to help context id's for them.
        !          1165:  */
        !          1166: HELPMAP gahmapMenu[] = {
        !          1167:     {MENU_NEWRES,               HELPID_FILE_NEWRES              },
        !          1168:     {MENU_OPEN,                 HELPID_FILE_OPEN                },
        !          1169:     {MENU_SAVE,                 HELPID_FILE_SAVE                },
        !          1170:     {MENU_SAVEAS,               HELPID_FILE_SAVEAS              },
        !          1171:     {MENU_SETINCLUDE,           HELPID_FILE_SETINCLUDE          },
        !          1172:     {MENU_NEWCUST,              HELPID_FILE_NEWCUST             },
        !          1173:     {MENU_OPENCUST,             HELPID_FILE_OPENCUST            },
        !          1174:     {MENU_REMCUST,              HELPID_FILE_REMCUST             },
        !          1175:     {MENU_EXIT,                 HELPID_FILE_EXIT                },
        !          1176: 
        !          1177:     {MENU_RESTOREDIALOG,        HELPID_EDIT_RESTOREDIALOG       },
        !          1178:     {MENU_CUT,                  HELPID_EDIT_CUT                 },
        !          1179:     {MENU_COPY,                 HELPID_EDIT_COPY                },
        !          1180:     {MENU_PASTE,                HELPID_EDIT_PASTE               },
        !          1181:     {MENU_DELETE,               HELPID_EDIT_DELETE              },
        !          1182:     {MENU_DUPLICATE,            HELPID_EDIT_DUPLICATE           },
        !          1183:     {MENU_SYMBOLS,              HELPID_EDIT_SYMBOLS             },
        !          1184:     {MENU_STYLES,               HELPID_EDIT_STYLES              },
        !          1185:     {MENU_SIZETOTEXT,           HELPID_EDIT_SIZETOTEXT          },
        !          1186:     {MENU_NEWDIALOG,            HELPID_EDIT_NEWDIALOG           },
        !          1187:     {MENU_SELECTDIALOG,         HELPID_EDIT_SELECTDIALOG        },
        !          1188: 
        !          1189:     {MENU_ALIGNLEFT,            HELPID_ARRANGE_ALIGNLEFT        },
        !          1190:     {MENU_ALIGNVERT,            HELPID_ARRANGE_ALIGNVERT        },
        !          1191:     {MENU_ALIGNRIGHT,           HELPID_ARRANGE_ALIGNRIGHT       },
        !          1192:     {MENU_ALIGNTOP,             HELPID_ARRANGE_ALIGNTOP         },
        !          1193:     {MENU_ALIGNHORZ,            HELPID_ARRANGE_ALIGNHORZ        },
        !          1194:     {MENU_ALIGNBOTTOM,          HELPID_ARRANGE_ALIGNBOTTOM      },
        !          1195:     {MENU_SPACEHORZ,            HELPID_ARRANGE_SPACEHORZ        },
        !          1196:     {MENU_SPACEVERT,            HELPID_ARRANGE_SPACEVERT        },
        !          1197:     {MENU_ARRSIZEWIDTH,         HELPID_ARRANGE_ARRSIZEWIDTH     },
        !          1198:     {MENU_ARRSIZEHEIGHT,        HELPID_ARRANGE_ARRSIZEHEIGHT    },
        !          1199:     {MENU_ARRPUSHBOTTOM,        HELPID_ARRANGE_ARRPUSHBOTTOM    },
        !          1200:     {MENU_ARRPUSHRIGHT,         HELPID_ARRANGE_ARRPUSHRIGHT     },
        !          1201:     {MENU_ORDERGROUP,           HELPID_ARRANGE_ORDERGROUP       },
        !          1202:     {MENU_ARRSETTINGS,          HELPID_ARRANGE_ARRSETTINGS      },
        !          1203: 
        !          1204:     {MENU_TESTMODE,             HELPID_OPTIONS_TESTMODE         },
        !          1205:     {MENU_HEXMODE,              HELPID_OPTIONS_HEXMODE          },
        !          1206:     {MENU_TRANSLATE,            HELPID_OPTIONS_TRANSLATE        },
        !          1207:     {MENU_USENEWKEYWORDS,       HELPID_OPTIONS_USENEWKEYWORDS   },
        !          1208:     {MENU_SHOWTOOLBOX,          HELPID_OPTIONS_SHOWTOOLBOX      },
        !          1209: 
        !          1210:     {MENU_CONTENTS,             HELPID_HELP_CONTENTS            },
        !          1211:     {MENU_SEARCH,               HELPID_HELP_SEARCH              },
        !          1212:     // No help for the About menu command.
        !          1213: 
        !          1214:     {0,                         0                               }
        !          1215: };
        !          1216: 
        !          1217: /*
        !          1218:  * Table that maps dialog ids to help context id's for them.
        !          1219:  */
        !          1220: HELPMAP gahmapDialog[] = {
        !          1221:     // No help for the About dialog.
        !          1222:     {DID_ARRSETTINGS,           HELPID_ARRSETTINGS              },
        !          1223:     {DID_CHECKBOXSTYLES,        HELPID_CHECKBOXSTYLES           },
        !          1224:     {DID_COMBOBOXSTYLES,        HELPID_COMBOBOXSTYLES           },
        !          1225:     {DID_CUSTOMSTYLES,          HELPID_CUSTOMSTYLES             },
        !          1226:     {DID_DIALOGSTYLES,          HELPID_DIALOGSTYLES             },
        !          1227:     {DID_EDITSTYLES,            HELPID_EDITSTYLES               },
        !          1228:     {DID_FRAMESTYLES,           HELPID_FRAMESTYLES              },
        !          1229:     {DID_GROUPBOXSTYLES,        HELPID_GROUPBOXSTYLES           },
        !          1230:     {DID_ORDERGROUP,            HELPID_ORDERGROUP               },
        !          1231:     {DID_HORZSCROLLSTYLES,      HELPID_HORZSCROLLSTYLES         },
        !          1232:     {DID_ICONSTYLES,            HELPID_ICONSTYLES               },
        !          1233:     {DID_LISTBOXSTYLES,         HELPID_LISTBOXSTYLES            },
        !          1234:     {DID_NEWCUST,               HELPID_NEWCUST                  },
        !          1235:     {DID_PUSHBUTTONSTYLES,      HELPID_PUSHBUTTONSTYLES         },
        !          1236:     {DID_RADIOBUTTONSTYLES,     HELPID_RADIOBUTTONSTYLES        },
        !          1237:     {DID_RECTSTYLES,            HELPID_RECTSTYLES               },
        !          1238:     {DID_REMCUST,               HELPID_REMCUST                  },
        !          1239:     {DID_SELECTDIALOG,          HELPID_SELECTDIALOG             },
        !          1240:     {DID_SYMBOLS,               HELPID_SYMBOLS                  },
        !          1241:     {DID_TEXTSTYLES,            HELPID_TEXTSTYLES               },
        !          1242:     {DID_VERTSCROLLSTYLES,      HELPID_VERTSCROLLSTYLES         },
        !          1243: 
        !          1244:     {DID_COMMONFILEOPENINCLUDE, HELPID_COMMONFILEOPENINCLUDE    },
        !          1245:     {DID_COMMONFILEOPENRES,     HELPID_COMMONFILEOPENRES        },
        !          1246:     {DID_COMMONFILESAVEINCLUDE, HELPID_COMMONFILESAVEINCLUDE    },
        !          1247:     {DID_COMMONFILESAVERES,     HELPID_COMMONFILESAVERES        },
        !          1248:     {DID_COMMONFILEOPENDLL,     HELPID_COMMONFILEOPENDLL        },
        !          1249: 
        !          1250:     {DID_TOOLBOX,               HELPID_TOOLBOX                  },
        !          1251:     {DID_STATUS,                HELPID_PROPERTIESBAR            },
        !          1252: 
        !          1253:     {0,                         0                               }
        !          1254: };
        !          1255: 
        !          1256: 
        !          1257: /*
        !          1258:  * Language and Sub Language tables.
        !          1259:  */
        !          1260: 
        !          1261: static SUBLANGTABLE aslNeutral[] = {
        !          1262:     { SUBLANG_NEUTRAL,      IDS_SUBLANG_NEUTRAL,        IDS_SL_NEUTRAL      },
        !          1263:     { SUBLANG_DEFAULT,      IDS_SUBLANG_DEFAULT,        IDS_SL_DEFAULT      }
        !          1264: };
        !          1265: 
        !          1266: static SUBLANGTABLE aslChinese[] = {
        !          1267:     { SUBLANG_NEUTRAL,      IDS_SUBLANG_NEUTRAL,        IDS_SL_NEUTRAL      },
        !          1268:     { SUBLANG_CHINESE_SIMPLIFIED, IDS_SUBLANG_CHINESE_SIMPLIFIED, IDS_SL_CHINESE_SIMPLIFIED   },
        !          1269:     { SUBLANG_CHINESE_TRADITIONAL, IDS_SUBLANG_CHINESE_TRADITIONAL, IDS_SL_CHINESE_TRADITIONAL  }
        !          1270: };
        !          1271: 
        !          1272: static SUBLANGTABLE aslDutch[] = {
        !          1273:     { SUBLANG_NEUTRAL,      IDS_SUBLANG_NEUTRAL,        IDS_SL_NEUTRAL      },
        !          1274:     { SUBLANG_DUTCH,        IDS_SUBLANG_DUTCH,          IDS_SL_DUTCH        },
        !          1275:     { SUBLANG_DUTCH_BELGIAN,IDS_SUBLANG_DUTCH_BELGIAN,  IDS_SL_DUTCH_BELGIAN}
        !          1276: };
        !          1277: 
        !          1278: static SUBLANGTABLE aslEnglish[] = {
        !          1279:     { SUBLANG_NEUTRAL,      IDS_SUBLANG_NEUTRAL,        IDS_SL_NEUTRAL      },
        !          1280:     { SUBLANG_ENGLISH_US,   IDS_SUBLANG_ENGLISH_US,     IDS_SL_ENGLISH_US   },
        !          1281:     { SUBLANG_ENGLISH_UK,   IDS_SUBLANG_ENGLISH_UK,     IDS_SL_ENGLISH_UK   },
        !          1282:     { SUBLANG_ENGLISH_AUS,  IDS_SUBLANG_ENGLISH_AUS,    IDS_SL_ENGLISH_AUS  },
        !          1283:     { SUBLANG_ENGLISH_CAN,  IDS_SUBLANG_ENGLISH_CAN,    IDS_SL_ENGLISH_CAN  }
        !          1284: };
        !          1285: 
        !          1286: static SUBLANGTABLE aslFrench[] = {
        !          1287:     { SUBLANG_NEUTRAL,      IDS_SUBLANG_NEUTRAL,        IDS_SL_NEUTRAL      },
        !          1288:     { SUBLANG_FRENCH,       IDS_SUBLANG_FRENCH,         IDS_SL_FRENCH       },
        !          1289:     { SUBLANG_FRENCH_BELGIAN, IDS_SUBLANG_FRENCH_BELGIAN, IDS_SL_FRENCH_BELGIAN  },
        !          1290:     { SUBLANG_FRENCH_CANADIAN, IDS_SUBLANG_FRENCH_CANADIAN, IDS_SL_FRENCH_CANADIAN },
        !          1291:     { SUBLANG_FRENCH_SWISS, IDS_SUBLANG_FRENCH_SWISS,   IDS_SL_FRENCH_SWISS }
        !          1292: };
        !          1293: 
        !          1294: static SUBLANGTABLE aslGerman[] = {
        !          1295:     { SUBLANG_NEUTRAL,      IDS_SUBLANG_NEUTRAL,        IDS_SL_NEUTRAL      },
        !          1296:     { SUBLANG_GERMAN,       IDS_SUBLANG_GERMAN,         IDS_SL_GERMAN       },
        !          1297:     { SUBLANG_GERMAN_SWISS, IDS_SUBLANG_GERMAN_SWISS,   IDS_SL_GERMAN_SWISS }
        !          1298: };
        !          1299: 
        !          1300: static SUBLANGTABLE aslItalian[] = {
        !          1301:     { SUBLANG_NEUTRAL,      IDS_SUBLANG_NEUTRAL,        IDS_SL_NEUTRAL      },
        !          1302:     { SUBLANG_ITALIAN,      IDS_SUBLANG_ITALIAN,        IDS_SL_ITALIAN      },
        !          1303:     { SUBLANG_ITALIAN_SWISS, IDS_SUBLANG_ITALIAN_SWISS, IDS_SL_ITALIAN_SWISS }
        !          1304: };
        !          1305: 
        !          1306: static SUBLANGTABLE aslNorwegian[] = {
        !          1307:     { SUBLANG_NEUTRAL,      IDS_SUBLANG_NEUTRAL,        IDS_SL_NEUTRAL      },
        !          1308:     { SUBLANG_NORWEGIAN_BOKMAL, IDS_SUBLANG_NORWEGIAN_BOKMAL, IDS_SL_NORWEGIAN_BOKMAL },
        !          1309:     { SUBLANG_NORWEGIAN_NYNORSK, IDS_SUBLANG_NORWEGIAN_NYNORSK, IDS_SL_NORWEGIAN_NYNORSK }
        !          1310: };
        !          1311: 
        !          1312: static SUBLANGTABLE aslPortuguese[] = {
        !          1313:     { SUBLANG_NEUTRAL,      IDS_SUBLANG_NEUTRAL,        IDS_SL_NEUTRAL      },
        !          1314:     { SUBLANG_PORTUGUESE,   IDS_SUBLANG_PORTUGUESE,     IDS_SL_PORTUGUESE   },
        !          1315:     { SUBLANG_PORTUGUESE_BRAZILIAN, IDS_SUBLANG_PORTUGUESE_BRAZILIAN, IDS_SL_PORTUGUESE_BRAZILIAN }
        !          1316: };
        !          1317: 
        !          1318: static SUBLANGTABLE aslSerboCroatian[] = {
        !          1319:     { SUBLANG_NEUTRAL,      IDS_SUBLANG_NEUTRAL,        IDS_SL_NEUTRAL      },
        !          1320:     { SUBLANG_SERBO_CROATIAN_CYRILLIC, IDS_SUBLANG_SERBO_CROATIAN_CYRILLIC, IDS_SL_SERBO_CROATIAN_CYRILLIC },
        !          1321:     { SUBLANG_SERBO_CROATIAN_LATIN, IDS_SUBLANG_SERBO_CROATIAN_LATIN, IDS_SL_SERBO_CROATIAN_LATIN }
        !          1322: };
        !          1323: 
        !          1324: static SUBLANGTABLE aslSpanish[] = {
        !          1325:     { SUBLANG_NEUTRAL,      IDS_SUBLANG_NEUTRAL,        IDS_SL_NEUTRAL      },
        !          1326:     { SUBLANG_SPANISH,      IDS_SUBLANG_SPANISH,        IDS_SL_SPANISH      },
        !          1327:     { SUBLANG_SPANISH_MEXICAN, IDS_SUBLANG_SPANISH_MEXICAN, IDS_SL_SPANISH_MEXICAN },
        !          1328:     { SUBLANG_SPANISH_MODERN, IDS_SUBLANG_SPANISH_MODERN, IDS_SL_SPANISH_MODERN }
        !          1329: };
        !          1330: 
        !          1331: 
        !          1332: LANGTABLE gaLangTable[] = {
        !          1333:     { LANG_NEUTRAL,         IDS_LANG_NEUTRAL,           IDS_L_NEUTRAL,
        !          1334:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1335:     { LANG_ALBANIAN,        IDS_LANG_ALBANIAN,          IDS_L_ALBANIAN,
        !          1336:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1337:     { LANG_ARABIC,          IDS_LANG_ARABIC,            IDS_L_ARABIC,
        !          1338:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1339:     { LANG_BAHASA,          IDS_LANG_BAHASA,            IDS_L_BAHASA,
        !          1340:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1341:     { LANG_BULGARIAN,       IDS_LANG_BULGARIAN,         IDS_L_BULGARIAN,
        !          1342:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1343:     { LANG_CATALAN,         IDS_LANG_CATALAN,           IDS_L_CATALAN,
        !          1344:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1345:     { LANG_CHINESE,         IDS_LANG_CHINESE,           IDS_L_CHINESE,
        !          1346:         sizeof(aslChinese) / sizeof(SUBLANGTABLE), aslChinese },
        !          1347:     { LANG_CZECH,           IDS_LANG_CZECH,             IDS_L_CZECH,
        !          1348:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1349:     { LANG_DANISH,          IDS_LANG_DANISH,            IDS_L_DANISH,
        !          1350:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1351:     { LANG_DUTCH,           IDS_LANG_DUTCH,             IDS_L_DUTCH,
        !          1352:         sizeof(aslDutch) / sizeof(SUBLANGTABLE), aslDutch },
        !          1353:     { LANG_ENGLISH,         IDS_LANG_ENGLISH,           IDS_L_ENGLISH,
        !          1354:         sizeof(aslEnglish) / sizeof(SUBLANGTABLE), aslEnglish },
        !          1355:     { LANG_FINNISH,         IDS_LANG_FINNISH,           IDS_L_FINNISH,
        !          1356:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1357:     { LANG_FRENCH,          IDS_LANG_FRENCH,            IDS_L_FRENCH,
        !          1358:         sizeof(aslFrench) / sizeof(SUBLANGTABLE), aslFrench },
        !          1359:     { LANG_GERMAN,          IDS_LANG_GERMAN,            IDS_L_GERMAN,
        !          1360:         sizeof(aslGerman) / sizeof(SUBLANGTABLE), aslGerman },
        !          1361:     { LANG_GREEK,           IDS_LANG_GREEK,             IDS_L_GREEK,
        !          1362:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1363:     { LANG_HEBREW,          IDS_LANG_HEBREW,            IDS_L_HEBREW,
        !          1364:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1365:     { LANG_HUNGARIAN,       IDS_LANG_HUNGARIAN,         IDS_L_HUNGARIAN,
        !          1366:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1367:     { LANG_ICELANDIC,       IDS_LANG_ICELANDIC,         IDS_L_ICELANDIC,
        !          1368:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1369:     { LANG_ITALIAN,         IDS_LANG_ITALIAN,           IDS_L_ITALIAN,
        !          1370:         sizeof(aslItalian) / sizeof(SUBLANGTABLE), aslItalian },
        !          1371:     { LANG_JAPANESE,        IDS_LANG_JAPANESE,          IDS_L_JAPANESE,
        !          1372:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1373:     { LANG_KOREAN,          IDS_LANG_KOREAN,            IDS_L_KOREAN,
        !          1374:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1375:     { LANG_NORWEGIAN,       IDS_LANG_NORWEGIAN,         IDS_L_NORWEGIAN,
        !          1376:         sizeof(aslNorwegian) / sizeof(SUBLANGTABLE), aslNorwegian },
        !          1377:     { LANG_POLISH,          IDS_LANG_POLISH,            IDS_L_POLISH,
        !          1378:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1379:     { LANG_PORTUGUESE,      IDS_LANG_PORTUGUESE,        IDS_L_PORTUGUESE,
        !          1380:         sizeof(aslPortuguese) / sizeof(SUBLANGTABLE), aslPortuguese },
        !          1381:     { LANG_RHAETO_ROMAN,    IDS_LANG_RHAETO_ROMAN,      IDS_L_RHAETO_ROMAN,
        !          1382:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1383:     { LANG_ROMANIAN,        IDS_LANG_ROMANIAN,          IDS_L_ROMANIAN,
        !          1384:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1385:     { LANG_RUSSIAN,         IDS_LANG_RUSSIAN,           IDS_L_RUSSIAN,
        !          1386:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1387:     { LANG_SERBO_CROATIAN,  IDS_LANG_SERBO_CROATIAN,    IDS_L_SERBO_CROATIAN,
        !          1388:         sizeof(aslSerboCroatian) / sizeof(SUBLANGTABLE), aslSerboCroatian },
        !          1389:     { LANG_SLOVAK,          IDS_LANG_SLOVAK,            IDS_L_SLOVAK,
        !          1390:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1391:     { LANG_SPANISH,         IDS_LANG_SPANISH,           IDS_L_SPANISH,
        !          1392:         sizeof(aslSpanish) / sizeof(SUBLANGTABLE), aslSpanish },
        !          1393:     { LANG_SWEDISH,         IDS_LANG_SWEDISH,           IDS_L_SWEDISH,
        !          1394:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1395:     { LANG_THAI,            IDS_LANG_THAI,              IDS_L_THAI,
        !          1396:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1397:     { LANG_TURKISH,         IDS_LANG_TURKISH,           IDS_L_TURKISH,
        !          1398:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral },
        !          1399:     { LANG_URDU,            IDS_LANG_URDU,              IDS_L_URDU,
        !          1400:         sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }
        !          1401: };
        !          1402: 
        !          1403: INT gcLanguages = sizeof(gaLangTable) / sizeof(LANGTABLE);
        !          1404: 
        !          1405: 
        !          1406: 

unix.superglobalmegacorp.com

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