Annotation of mstools/samples/sdktools/dlgedit/globals.c, revision 1.1.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.