home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 1 / FFMCD01.bin / bbs / libdisks / d700t799 / disk762.lha / PlotMap / source.lha / config.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-09  |  18.2 KB  |  528 lines

  1. /* config routines for PlotMap */
  2.  
  3. #include "PlotMap.h"
  4.  
  5. #define CFG_SHIRES 1          /* config window gadget ID */
  6. #define CFG_LACE 2
  7. #define CFG_OVERSCAN 3
  8. #define CFG_MODE 4
  9. #define CFG_DEPTH 5
  10. #define CFG_LOADMAP_MIN 11
  11. #define CFG_LOADMAP_MAX 16
  12. #define CFG_FLOOD_FILL 20
  13. #define CFG_SAVE 30
  14. #define CFG_USE 31
  15.  
  16. #define MAX_MODE 1      /* PAL, NTSC */
  17.  
  18. /********** externals **********/
  19.  
  20. extern struct TextAttr myfont;
  21. extern struct NewMenu menu_data[];
  22. extern double act_vfactor;
  23.  
  24. extern void close_all(char *, int);
  25.  
  26. /********** Variablen, Daten **********/
  27.  
  28. static struct Window *cfg_wd;
  29.  
  30. struct Rectangle rect;
  31. ULONG scr_displayid, scr_overscan;
  32. static char config_filename[] = "PlotMap.config";
  33. struct config config =              /* (default) configuration */
  34. {
  35.    4, FALSE, TRUE, FALSE, 0,  /* Depth, SuperHires, Lace, Overscan, mode */
  36.    "topaz.font", 9,                 /* fontname, fontsize */
  37.    { 0x569, 0xfff, 0x000, 0x0c0,    /* colormap */
  38.      0xf00, 0x00f, 0x2df, 0xf00,
  39.      0x0f0, 0xff0, 0x00f, 0xf0f,
  40.      0x0ff, 0xf80, 0x444, 0x888 },
  41.    TRUE, TRUE,                      /* cls before draw, flood fill flag */
  42.    TRUE, TRUE, TRUE, 455, 10, /* coord_window, mousexy, degree, wdx, wdy */
  43.    1.26,                            /* vfactor */
  44.    DL_LOW,                          /* detail level */
  45.    { TRUE, TRUE, TRUE, TRUE, TRUE, TRUE },   /* load map */
  46.    { TRUE, TRUE, TRUE, TRUE, TRUE, TRUE },   /* plot map */
  47.    0, 0, { 3, 3, 4, 4, 5, 6 },      /* background, ocean, map color */
  48.    2, 1, 2,                         /* grid, gridhigh, shadow color */
  49.    7, 8, 9, 10                      /* line, box, text, flood fill color */
  50. };
  51.  
  52. static struct EasyStruct cfg_error_ES =
  53.    {sizeof(struct EasyStruct), 0, "PlotMap error",
  54.    "Can`t %s config file!", "Ok"};
  55.  
  56. static struct Gadget *scr_size_gad;
  57. static struct TextAttr ta = {"topaz.font", 8, 0x00, 0x01};
  58.  
  59. static UBYTE *mode_str[] = {"PAL", "NTSC", NULL};
  60. static UBYTE *depth_str[] = {"2 (_1)", "4 (_2)", "8 (_3)", "16 (_4)", NULL};
  61. static UBYTE scr_size_txt[30];
  62.  
  63. /********** Routinen **********/
  64.  
  65. void save_config(void)
  66. /* save configuration to config_filename */
  67. {
  68.    BPTR fhd;
  69.  
  70.    if (fhd = Open(&config_filename[0], MODE_NEWFILE))
  71.    {
  72.       if (Write(fhd, &config, sizeof(struct config)) != sizeof(struct config))
  73.          EasyRequest(main_wd, &cfg_error_ES, NULL, "write");
  74.       Close(fhd);
  75.    }
  76.    else
  77.       EasyRequest(main_wd, &cfg_error_ES, NULL, "open");
  78. }
  79.  
  80.  
  81. static void adjust_scr_size_gad(void)
  82. {
  83.    int width, height;
  84.  
  85.    if (config.superhires)
  86.    {
  87.       if (config.interlace)
  88.          scr_displayid = SUPERLACE_KEY;
  89.       else
  90.          scr_displayid = SUPER_KEY;
  91.    }
  92.    else
  93.    {
  94.       if (config.interlace)
  95.          scr_displayid = HIRESLACE_KEY;
  96.       else
  97.          scr_displayid = HIRES_KEY;
  98.    }
  99.  
  100.    if (config.mode == 1)
  101.       scr_displayid |= NTSC_MONITOR_ID;
  102.    else
  103.       scr_displayid |= PAL_MONITOR_ID;
  104.  
  105.    if (config.overscan)
  106.       scr_overscan = OSCAN_MAX;
  107.    else
  108.       scr_overscan = OSCAN_TEXT;
  109.  
  110.    if (!(QueryOverscan(scr_displayid, &rect, scr_overscan)))
  111.       /* error handling */
  112.       return;
  113.  
  114.    width = rect.MaxX - rect.MinX + 1;
  115.    height = rect.MaxY - rect.MinY + 1;
  116.  
  117.    sprintf(scr_size_txt, "Screen size: %4d \327 %3d \327 %1d (%d)", width,
  118.                height, config.scr_depth, width/8*height*config.scr_depth);
  119.  
  120.    GT_SetGadgetAttrs(scr_size_gad, cfg_wd, NULL,
  121.          GTTX_Text,scr_size_txt,  TAG_DONE);
  122. }
  123.  
  124.  
  125. static void config_window(void)
  126. /* open window on WB to set screen resolution/size/depth, font, etc. */
  127. {
  128.    struct Screen *scr;
  129.    struct Gadget *gad, *gad_list = NULL;
  130.    struct Gadget *shires_gad, *lace_gad, *overscan_gad, *mode_gad;
  131.    struct Gadget *color_gad, *coastlines_gad, *islands_gad, *countries_gad;
  132.    struct Gadget *states_gad, *lakes_gad, *rivers_gad, *flood_gad;
  133.    struct NewGadget new_gad;
  134.    APTR cfg_vinfo;
  135.    int gad_left, gad_top;
  136.  
  137.    BOOL cfg_ende = FALSE;
  138.    struct IntuiMessage *msg;
  139.    ULONG class;
  140.    UWORD code;
  141.  
  142.    if (!(scr = LockPubScreen(NULL)))            /* Vorbereitungen */
  143.       close_all("Can`t lock screen", 20);
  144.    if (!(cfg_vinfo = GetVisualInfo(scr, TAG_DONE)))
  145.    {
  146.       UnlockPubScreen(NULL, scr);
  147.       close_all("Can`t get visual info", 20);
  148.    }
  149.  
  150.    /*** Gadgets initialisieren ***/
  151.  
  152.    gad = CreateContext(&gad_list);
  153.  
  154.    gad_left = scr->WBorLeft + INTERWIDTH;
  155.    gad_top = scr->WBorTop + scr->Font->ta_YSize + 1 + INTERHEIGHT;
  156.  
  157.    new_gad.ng_LeftEdge = gad_left;
  158.    new_gad.ng_TopEdge = gad_top;
  159.    new_gad.ng_Width = 0;            /* ignored by CHECKBOX_KIND */
  160.    new_gad.ng_Height = 11;          /* init. for following gadgets */
  161.    new_gad.ng_GadgetText = "Super_Hires";
  162.    new_gad.ng_GadgetID = CFG_SHIRES;
  163.    new_gad.ng_TextAttr = &ta;
  164.    new_gad.ng_Flags = PLACETEXT_RIGHT;
  165.    new_gad.ng_VisualInfo = cfg_vinfo;
  166.    new_gad.ng_UserData = NULL;
  167.    shires_gad = gad = CreateGadget(CHECKBOX_KIND, gad, &new_gad,
  168.             GT_Underscore,'_',  GTCB_Checked,config.superhires,  TAG_DONE);
  169.  
  170.    new_gad.ng_TopEdge += 12;
  171.    new_gad.ng_GadgetText = "Inter_lace";
  172.    new_gad.ng_GadgetID = CFG_LACE;
  173.    lace_gad = gad = CreateGadget(CHECKBOX_KIND, gad, &new_gad,
  174.             GT_Underscore,'_',  GTCB_Checked,config.interlace,  TAG_DONE);
  175.  
  176.    new_gad.ng_TopEdge += 12;
  177.    new_gad.ng_GadgetText = "_Overscan";
  178.    new_gad.ng_GadgetID = CFG_OVERSCAN;
  179.    overscan_gad = gad = CreateGadget(CHECKBOX_KIND, gad, &new_gad,
  180.             GT_Underscore,'_',  GTCB_Checked,config.overscan,  TAG_DONE);
  181.  
  182.    new_gad.ng_TopEdge += 12;
  183.    new_gad.ng_Width = 80;
  184.    new_gad.ng_GadgetText = "_Mode";
  185.    new_gad.ng_GadgetID = CFG_MODE;
  186.    mode_gad = gad = CreateGadget(CYCLE_KIND, gad, &new_gad,
  187.             GT_Underscore,'_',  GTCY_Labels,mode_str,
  188.             GTCY_Active,config.mode,  TAG_DONE);
  189.  
  190.    new_gad.ng_LeftEdge += 145;
  191.    new_gad.ng_TopEdge = gad_top;
  192.    new_gad.ng_Width = 0;
  193.    new_gad.ng_GadgetText = "Colors:";
  194.    new_gad.ng_GadgetID = 0;
  195.    gad = CreateGadget(TEXT_KIND, gad, &new_gad,  TAG_DONE);
  196.  
  197.    new_gad.ng_LeftEdge += 65;
  198.    new_gad.ng_TopEdge += 1;
  199.    new_gad.ng_GadgetText = NULL;       /* obsolete, but better */
  200.    new_gad.ng_GadgetID = CFG_DEPTH;
  201.    color_gad = gad = CreateGadget(MX_KIND, gad, &new_gad,
  202.             GT_Underscore,'_',  GTMX_Labels,depth_str,
  203.             GTMX_Active,config.scr_depth-1,  GTMX_Spacing,2,  TAG_DONE);
  204.  
  205.    new_gad.ng_LeftEdge = gad_left;
  206.    new_gad.ng_TopEdge += 36+15;
  207.    new_gad.ng_Width = 36*8 + 8;
  208.    new_gad.ng_GadgetID = 0;
  209.    scr_size_gad = gad = CreateGadget(TEXT_KIND, gad, &new_gad,
  210.             GTTX_Text,scr_size_txt,  GTTX_Border,TRUE,  TAG_DONE);
  211.  
  212.    new_gad.ng_TopEdge += 17;
  213.    new_gad.ng_Width = 0;
  214.    new_gad.ng_GadgetText = "Load map:";
  215.    gad = CreateGadget(TEXT_KIND, gad, &new_gad,  TAG_DONE);
  216.  
  217.    new_gad.ng_LeftEdge += 10;
  218.    new_gad.ng_TopEdge += 12;
  219.    new_gad.ng_GadgetText = "_Coastlines (449802)";
  220.    new_gad.ng_GadgetID = CFG_LOADMAP_MIN+0;
  221.    coastlines_gad = gad = CreateGadget(CHECKBOX_KIND, gad, &new_gad,
  222.             GT_Underscore,'_',  GTCB_Checked,config.loadmap[0],  TAG_DONE);
  223.  
  224.    new_gad.ng_TopEdge += 12;
  225.    new_gad.ng_GadgetText = "_Islands (211026)";
  226.    new_gad.ng_GadgetID = CFG_LOADMAP_MIN+1;
  227.    islands_gad = gad = CreateGadget(CHECKBOX_KIND, gad, &new_gad,
  228.             GT_Underscore,'_',  GTCB_Checked,config.loadmap[1],  TAG_DONE);
  229.  
  230.    new_gad.ng_TopEdge += 12;
  231.    new_gad.ng_GadgetText = "Cou_ntries (134154)";
  232.    new_gad.ng_GadgetID = CFG_LOADMAP_MIN+2;
  233.    countries_gad = gad = CreateGadget(CHECKBOX_KIND, gad, &new_gad,
  234.             GT_Underscore,'_',  GTCB_Checked,config.loadmap[2],  TAG_DONE);
  235.  
  236.    new_gad.ng_LeftEdge += 200;
  237.    new_gad.ng_TopEdge -= 24;
  238.    new_gad.ng_GadgetText = "S_tates (13554)";
  239.    new_gad.ng_GadgetID = CFG_LOADMAP_MIN+3;
  240.    states_gad = gad = CreateGadget(CHECKBOX_KIND, gad, &new_gad,
  241.             GT_Underscore,'_',  GTCB_Checked,config.loadmap[3],  TAG_DONE);
  242.  
  243.    new_gad.ng_TopEdge += 12;
  244.    new_gad.ng_GadgetText = "L_akes (90708)";
  245.    new_gad.ng_GadgetID = CFG_LOADMAP_MIN+4;
  246.    lakes_gad = gad = CreateGadget(CHECKBOX_KIND, gad, &new_gad,
  247.             GT_Underscore,'_',  GTCB_Checked,config.loadmap[4],  TAG_DONE);
  248.  
  249.    new_gad.ng_TopEdge += 12;
  250.    new_gad.ng_GadgetText = "_Rivers (169164)";
  251.    new_gad.ng_GadgetID = CFG_LOADMAP_MIN+5;
  252.    rivers_gad = gad = CreateGadget(CHECKBOX_KIND, gad, &new_gad,
  253.             GT_Underscore,'_',  GTCB_Checked,config.loadmap[5],  TAG_DONE);
  254.  
  255.    new_gad.ng_LeftEdge = gad_left;
  256.    new_gad.ng_TopEdge += 18;
  257.    new_gad.ng_GadgetText = "_Flood fill option";
  258.    new_gad.ng_GadgetID = CFG_FLOOD_FILL;
  259.    flood_gad = gad = CreateGadget(CHECKBOX_KIND, gad, &new_gad,
  260.             GT_Underscore,'_',  GTCB_Checked,config.flood_fill,  TAG_DONE);
  261.  
  262.    new_gad.ng_LeftEdge = gad_left + 20;
  263.    new_gad.ng_TopEdge += 20;
  264.    new_gad.ng_Width = 80;
  265.    new_gad.ng_Height = 13;
  266.    new_gad.ng_Flags = PLACETEXT_IN;
  267.    new_gad.ng_GadgetText = "_Save";
  268.    new_gad.ng_GadgetID = CFG_SAVE;
  269.    gad = CreateGadget(BUTTON_KIND, gad, &new_gad,  GT_Underscore,'_',
  270.             TAG_DONE);
  271.  
  272.    new_gad.ng_LeftEdge += 110;
  273.    new_gad.ng_GadgetText = "_Use";
  274.    new_gad.ng_GadgetID = CFG_USE;
  275.    gad = CreateGadget(BUTTON_KIND, gad, &new_gad,  GT_Underscore,'_',
  276.             TAG_DONE);
  277.  
  278.    if (!gad)            /* it is possible to check for errors after all */
  279.    {                    /* gadgets have been created */
  280.       FreeGadgets(gad_list);
  281.       FreeVisualInfo(cfg_vinfo);
  282.       UnlockPubScreen(NULL, scr);
  283.       close_all("Can`t create gadget", 20);
  284.    }
  285.  
  286.    if (!(cfg_wd = OpenWindowTags(NULL,
  287.             WA_Left,20,  WA_Top,15,
  288.             WA_IDCMP, BUTTONIDCMP | CHECKBOXIDCMP | MXIDCMP | CYCLEIDCMP |
  289.                IDCMP_VANILLAKEY | IDCMP_REFRESHWINDOW,
  290.             WA_Flags, WFLG_SIMPLE_REFRESH | WFLG_RMBTRAP | WFLG_ACTIVATE |
  291.                WFLG_DRAGBAR | WFLG_DEPTHGADGET,
  292.             WA_Title, "PlotMap configuration",
  293.             WA_Gadgets, gad_list,  WA_AutoAdjust,TRUE,
  294.             WA_InnerWidth,375,  WA_InnerHeight,165,  TAG_DONE)))
  295.    {
  296.       FreeGadgets(gad_list);
  297.       FreeVisualInfo(cfg_vinfo);
  298.       UnlockPubScreen(NULL, scr);
  299.       close_all("Can`t open window", 20);
  300.    }
  301.  
  302.    UnlockPubScreen(NULL, scr);            /* ein Wd. ist offen */
  303.    GT_RefreshWindow(cfg_wd, NULL);
  304.    adjust_scr_size_gad();
  305.  
  306.    while (!cfg_ende)
  307.    {
  308.       WaitPort(cfg_wd->UserPort);
  309.       while (!cfg_ende && (msg = GT_GetIMsg(cfg_wd->UserPort)))
  310.       {
  311.          class = msg->Class;
  312.          code = msg->Code;
  313.          gad = (struct Gadget *)(msg->IAddress);
  314.          GT_ReplyIMsg(msg);
  315.  
  316.          switch (class)
  317.          {
  318.             case IDCMP_GADGETDOWN:
  319.                switch (gad->GadgetID)
  320.                {
  321.                   case CFG_DEPTH:
  322.                      config.scr_depth = code+1;
  323.                      adjust_scr_size_gad();
  324.                      break;
  325.                }
  326.                break;
  327.             case IDCMP_GADGETUP:
  328.                switch (gad->GadgetID)
  329.                {
  330.                   case CFG_SHIRES:
  331.                      config.superhires ^= TRUE;
  332.                      adjust_scr_size_gad();
  333.                      break;
  334.                   case CFG_LACE:
  335.                      config.interlace ^= TRUE;
  336.                      adjust_scr_size_gad();
  337.                      break;
  338.                   case CFG_OVERSCAN:
  339.                      config.overscan ^= TRUE;
  340.                      adjust_scr_size_gad();
  341.                      break;
  342.                   case CFG_MODE:
  343.                      config.mode = code;
  344.                      adjust_scr_size_gad();
  345.                      break;
  346.                   case CFG_LOADMAP_MIN+0:
  347.                   case CFG_LOADMAP_MIN+1:
  348.                   case CFG_LOADMAP_MIN+2:
  349.                   case CFG_LOADMAP_MIN+3:
  350.                   case CFG_LOADMAP_MIN+4:
  351.                   case CFG_LOADMAP_MIN+5:
  352.                      config.loadmap[gad->GadgetID - CFG_LOADMAP_MIN] ^= TRUE;
  353.                      break;
  354.                   case CFG_FLOOD_FILL:
  355.                      config.flood_fill ^= TRUE;
  356.                      break;
  357.                   case CFG_SAVE:          /* no break, SAVE + USE */
  358.                      save_config();
  359.                   case CFG_USE:
  360.                      cfg_ende = TRUE;
  361.                      break;
  362.                } /* switch (gad_id) */
  363.                break;
  364.             case IDCMP_VANILLAKEY:
  365.                switch (code)
  366.                {
  367.                   case 'h':
  368.                   case 'H':
  369.                      config.superhires ^= TRUE;
  370.                      GT_SetGadgetAttrs(shires_gad, cfg_wd, NULL,
  371.                            GTCB_Checked, config.superhires, TAG_DONE);
  372.                      adjust_scr_size_gad();
  373.                      break;
  374.                   case 'l':
  375.                   case 'L':
  376.                      config.interlace ^= TRUE;
  377.                      GT_SetGadgetAttrs(lace_gad, cfg_wd, NULL,
  378.                            GTCB_Checked, config.interlace, TAG_DONE);
  379.                      adjust_scr_size_gad();
  380.                      break;
  381.                   case 'o':
  382.                   case 'O':
  383.                      config.overscan ^= TRUE;
  384.                      GT_SetGadgetAttrs(overscan_gad, cfg_wd, NULL,
  385.                            GTCB_Checked, config.overscan, TAG_DONE);
  386.                      adjust_scr_size_gad();
  387.                      break;
  388.                   case 'm':
  389.                      config.mode++;
  390.                      if (config.mode > MAX_MODE)
  391.                         config.mode = 0;
  392.                      GT_SetGadgetAttrs(mode_gad, cfg_wd, NULL,
  393.                            GTCY_Active, config.mode, TAG_DONE);
  394.                      adjust_scr_size_gad();
  395.                      break;
  396.                   case 'M':
  397.                      config.mode--;
  398.                      if (config.mode < 0)
  399.                         config.mode = MAX_MODE;
  400.                      GT_SetGadgetAttrs(mode_gad, cfg_wd, NULL,
  401.                            GTCY_Active, config.mode, TAG_DONE);
  402.                      adjust_scr_size_gad();
  403.                      break;
  404.                   case '1':
  405.                   case '2':
  406.                   case '3':
  407.                   case '4':
  408.                      config.scr_depth = code - '0';
  409.                      adjust_scr_size_gad();
  410.                      GT_SetGadgetAttrs(color_gad, cfg_wd, NULL,
  411.                            GTMX_Active,config.scr_depth-1, TAG_DONE);
  412.                      break;
  413.                   case 'c':
  414.                   case 'C':
  415.                      config.loadmap[0] ^= TRUE;
  416.                      GT_SetGadgetAttrs(coastlines_gad, cfg_wd, NULL,
  417.                            GTCB_Checked, config.loadmap[0], TAG_DONE);
  418.                      break;
  419.                   case 'i':
  420.                   case 'I':
  421.                      config.loadmap[1] ^= TRUE;
  422.                      GT_SetGadgetAttrs(islands_gad, cfg_wd, NULL,
  423.                            GTCB_Checked, config.loadmap[1], TAG_DONE);
  424.                      break;
  425.                   case 'n':
  426.                   case 'N':
  427.                      config.loadmap[2] ^= TRUE;
  428.                      GT_SetGadgetAttrs(countries_gad, cfg_wd, NULL,
  429.                            GTCB_Checked, config.loadmap[2], TAG_DONE);
  430.                      break;
  431.                   case 't':
  432.                   case 'T':
  433.                      config.loadmap[3] ^= TRUE;
  434.                      GT_SetGadgetAttrs(states_gad, cfg_wd, NULL,
  435.                            GTCB_Checked, config.loadmap[3], TAG_DONE);
  436.                      break;
  437.                   case 'a':
  438.                   case 'A':
  439.                      config.loadmap[4] ^= TRUE;
  440.                      GT_SetGadgetAttrs(lakes_gad, cfg_wd, NULL,
  441.                            GTCB_Checked, config.loadmap[4], TAG_DONE);
  442.                      break;
  443.                   case 'r':
  444.                   case 'R':
  445.                      config.loadmap[5] ^= TRUE;
  446.                      GT_SetGadgetAttrs(rivers_gad, cfg_wd, NULL,
  447.                            GTCB_Checked, config.loadmap[5], TAG_DONE);
  448.                      break;
  449.                   case 'f':
  450.                   case 'F':
  451.                      config.flood_fill ^= TRUE;
  452.                      GT_SetGadgetAttrs(flood_gad, cfg_wd, NULL,
  453.                            GTCB_Checked, config.flood_fill, TAG_DONE);
  454.                      break;
  455.                   case 's':
  456.                   case 'S':
  457.                      save_config();       /* no break; save + use */
  458.                   case 'u':
  459.                   case 'U':
  460.                      cfg_ende = TRUE;
  461.                      break;
  462.                }
  463.                break;
  464.             case IDCMP_REFRESHWINDOW:
  465.                GT_BeginRefresh(cfg_wd);
  466.                GT_EndRefresh(cfg_wd, TRUE);
  467.                break;
  468.          } /* switch (class) */
  469.       } /* while (GT_GetIMsg()) */
  470.    } /* while (!cfg_ende) */
  471.  
  472.    CloseWindow(cfg_wd);
  473.    FreeGadgets(gad_list);
  474.    FreeVisualInfo(cfg_vinfo);
  475. }
  476.  
  477.  
  478. void get_config(void)
  479. /* load and set configuration */
  480. {
  481.    int i;
  482.    BPTR fhd;
  483.    struct config cfg;            /* temp. buffer */
  484.  
  485.    if (fhd = Open(&config_filename[0], MODE_OLDFILE))
  486.    {
  487.       if (Read(fhd, &cfg, sizeof(struct config)) == sizeof(struct config))
  488.          CopyMem(&cfg, &config, sizeof(struct config));
  489.       else
  490.          DisplayBeep(NULL);
  491.  
  492.       Close(fhd);
  493.    }
  494.    else
  495.       DisplayBeep(NULL);                  /* configfile not found */
  496.  
  497.    config_window();                       /* get config from user */
  498.  
  499.    myfont.ta_Name = config.fontname;
  500.    myfont.ta_YSize = config.fontsize;
  501.    act_vfactor = config.vfac;
  502.  
  503.    /* set menu (CHECKED, etc.) according to configuration */
  504.    if (config.cls_before_draw) menu_data[16].nm_Flags |= CHECKED;
  505.    if (config.coord_window)   menu_data[18].nm_Flags |= CHECKED;
  506.    if (config.coord_mousexy)  menu_data[19].nm_Flags |= CHECKED;
  507.    if (config.coord_degree)   menu_data[20].nm_Flags |= CHECKED;
  508.    menu_data[29+config.detail_level].nm_Flags |= CHECKED;
  509.  
  510.    menu_data[43+config.bg_color].nm_Flags |= CHECKED;
  511.    menu_data[60+config.ocean_color].nm_Flags |= CHECKED;
  512.    for (i = 0; i < NUM_MAPS; i++)               /* init menus */
  513.    {
  514.       if (config.plotmap[i])
  515.          menu_data[22+i].nm_Flags |= CHECKED;
  516.       menu_data[78 + i*17 + config.mapcolor[i]].nm_Flags |= CHECKED;
  517.    } /* for (i) */
  518.  
  519.    menu_data[181+config.grid_color].nm_Flags |= CHECKED;
  520.    menu_data[198+config.gridhigh_color].nm_Flags |= CHECKED;
  521.    menu_data[215+config.shadow_color].nm_Flags |= CHECKED;
  522.    menu_data[233+config.line_color].nm_Flags |= CHECKED;
  523.    menu_data[250+config.box_color].nm_Flags |= CHECKED;
  524.    menu_data[267+config.text_color].nm_Flags |= CHECKED;
  525.    menu_data[284+config.flood_color].nm_Flags |= CHECKED;
  526. }
  527.  
  528.