home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Enlightenment / enl_BETA-0.13.src.tar.gz / enl_BETA-0.13.src.tar / enl-0.13 / loadcfg.c < prev    next >
C/C++ Source or Header  |  1997-11-17  |  79KB  |  2,615 lines

  1. #include "enlightenment.h"
  2.  
  3. void subvars(char *s)
  4. {
  5.    char *var;
  6.    char ss[FILENAME_MAX];
  7.    char s2[2];
  8.    char name[FILENAME_MAX];
  9.    int i,j;
  10.    
  11.    if (!s) return;
  12.    ss[0]=0;
  13.    i=0;
  14.    s2[1]=0;
  15.    while(s[i])
  16.      {
  17.     if (s[i]=='~')
  18.       {
  19.          var=getenv("HOME");
  20.          strcat(ss,var);
  21.          i++;
  22.       }
  23.     else if (s[i]=='$')
  24.       {
  25.          j=0;
  26.          i++;
  27.          
  28.          while(isalnum(s[i])||s[i]=='_') name[j++]=s[i++];
  29.          name[j]=0;
  30.          var=getenv(name);
  31.          if (var) strcat(ss,var);
  32.          else 
  33.            {
  34.           strcat(ss,"$");
  35.           strcat(ss,name);
  36.            }
  37.       }
  38.     else
  39.       {
  40.          s2[0]=s[i];
  41.          strcat(ss,s2);
  42.          i++;
  43.       }
  44.      }
  45.    strcpy(s,ss);
  46. }
  47.  
  48. void InitConfig()
  49. {
  50.    int i,j,k;
  51.    for(k=0;k<64;k++)
  52.      {
  53.     for(j=0;j<3;j++)
  54.       {
  55.          for(i=0;i<4;i++)
  56.            {
  57.           cfg.subwin_action[k][j][i].id=0;
  58.           cfg.subwin_action[k][j][i].params[0]=0;
  59.            }
  60.       }
  61.      }
  62.    cfg.shape_mode=0;
  63.    cfg.move_mode=0;
  64.    cfg.resize_mode=0;
  65.    cfg.border_l=0;
  66.    cfg.border_r=0;
  67.    cfg.border_t=0;
  68.    cfg.border_b=0;
  69.    cfg.num_subwins=0;
  70.    cfg.root_width=0;
  71.    cfg.root_height=0;
  72.    cfg.font=NULL;
  73.    cfg.font_style=0;
  74.    cfg.autoraise=0;
  75.    cfg.autoraise_time=0;
  76.    cfg.focus_policy=PointerFocus;
  77.    bl.first=NULL;
  78.    for (i=0;i<64;i++)
  79.      {
  80.     cfg.subwin_type[i]=0;
  81.     cfg.subwin_level[i]=0;
  82.     cfg.subwin_scale_method[i]=0;
  83.     cfg.subwin_pos_method1[i]=0;
  84.     cfg.subwin_pos_method2[i]=0;
  85.     cfg.subwin_pos_x1[i]=0;
  86.     cfg.subwin_pos_y1[i]=0;
  87.     cfg.subwin_pos_x2[i]=0;
  88.     cfg.subwin_pos_y2[i]=0;
  89.     cfg.subwin_pmname_clk[i]=NULL;
  90.     cfg.subwin_pmname_sel[i]=NULL;
  91.     cfg.subwin_pmname_uns[i]=NULL;
  92.     cfg.subwin_transp_clk[i].r=-1;
  93.     cfg.subwin_transp_clk[i].g=-1;
  94.     cfg.subwin_transp_clk[i].b=-1;
  95.     cfg.subwin_transp_sel[i].r=-1;
  96.     cfg.subwin_transp_sel[i].g=-1;
  97.     cfg.subwin_transp_sel[i].b=-1;
  98.     cfg.subwin_transp_uns[i].r=-1;
  99.     cfg.subwin_transp_uns[i].g=-1;
  100.     cfg.subwin_transp_uns[i].b=-1;
  101.      }
  102.    evmd.mode=MODE_NORMAL;
  103.    evmd.ewin=NULL;
  104.    evmd.wbtn=-1;
  105.    icfg.left_arrow_im=NULL;
  106.    icfg.right_arrow_im=NULL;
  107.    icfg.background_im=NULL;
  108.    icfg.x=0;
  109.    icfg.y=0;
  110.    icfg.width=0;
  111.    icfg.height=0;
  112.    icfg.orientation=0;
  113.    icfg.snapshot_time=0;
  114.    icfg.x_scroll=0;
  115.    icfg.y_scroll=0;
  116.    icfg.level=0;
  117.    icfg.bx=0;
  118.    icfg.by=0;
  119.    ccfg.num_fg_r=255;
  120.    ccfg.num_fg_g=255;
  121.    ccfg.num_fg_b=255; 
  122.    ccfg.num_bg_r=0;
  123.    ccfg.num_bg_g=0;
  124.    ccfg.num_bg_b=0;
  125.    ccfg.num_size=10;
  126.    sel_win=0;
  127.    ilist.first=NULL;
  128.    InitMenuList();
  129.    fx.shadow.on=0;
  130.    predef_num=0;
  131.    KeyBind_num=0;
  132.    ifb.on=0;
  133.    ifb.moveresize=1;
  134.    ccfg.doneroot=0;
  135.    desk.current=0;
  136.    desk.snapshotpager=0;
  137.    for (i=0;i<MAX_DESKS;i++)
  138.      {
  139.     desk.background[i][0]=0;
  140.     desk.bg_pmap[i]=0;
  141.     desk.di[i].win=0;
  142.      }
  143.    cfg.root_pname[0]=0;
  144.    tmplt_mi=NULL;
  145.    statefile[0]=0;
  146. }
  147.  
  148. void LoadConfig(char *file)
  149. {
  150.    FILE *f;
  151.    char s[FILENAME_MAX];
  152.    char ss[FILENAME_MAX];
  153.    char s1[256],s2[256],s3[256];
  154.    char s4[256],s5[256],s6[256];
  155.    int currentcursor=0;
  156.    int line=0;
  157.    int num;
  158.    int numm;
  159.    int num1,num2,num3,num4;
  160.    int r,g,b;
  161.    char *home;
  162.    int nest_level=0;
  163.    int nest_stack[256];
  164.    int wait_till_end=0;
  165.    int wait_nest_level=-1;
  166.    int done=0;
  167.    int i,j; /* ,k; */
  168.    ImColor icl;
  169.    BWin *bwin;
  170.    int b_maxw,b_maxh;
  171.    Image *im;
  172.    Menu *menu;
  173.    MenuItem *mi;
  174.    Menu mm;
  175.    MenuItem mmi;
  176.    int tx_x,tx_y,tx_w,tx_h;
  177.    char m_unsel[4096],m_sel[4096];
  178.    ImColor icltmp1,icltmp2;
  179.    char stmp1[4096],stmp2[4096];
  180.    ImColor m_unsel_icl,m_sel_icl;
  181.    struct predef_icon_list pdl;
  182.    /* struct KeyBind_list_type kdl; */
  183.    Pixmap pmap;
  184.    Pixmap mask;
  185.    int desknum;
  186.    struct deskinfo di;
  187.    char working_environment[300];
  188.    
  189.    mmi.text=NULL;
  190.    f=0;
  191.    if (!f)
  192.      {
  193.     strcpy(s1,"./.enlightenment/");
  194.     strcat(s1,file);
  195.     f=fopen(s1,"r");
  196.      }
  197.    if (!f)
  198.      {
  199.     home=getenv("HOME");
  200.     if (home)
  201.       {
  202.          strcpy(s1,home);
  203.          strcat(s1,"/.enlightenment/");
  204.          sprintf(working_environment,"ECONFIGDIR=%s",s1);
  205.          putenv(working_environment);
  206.          strcat(s1,file);
  207.          f=fopen(s1,"r");
  208.       }
  209.      }
  210.    if (!f)
  211.      {
  212.     if (Theme_Path[0])
  213.       {
  214.          strcpy(s1,Theme_Path);
  215.          strcat(s1,"/");
  216.          sprintf(working_environment,"ECONFIGDIR=%s",s1);
  217.          putenv(working_environment);
  218.          strcat(s1,file);
  219.          f=fopen(s1,"r");
  220.       }
  221.      }
  222.    if (!f)
  223.      {
  224.     strcpy(s1,SYSCONFIG_DIR);
  225.     sprintf(working_environment,"ECONFIGDIR=%s",s1);
  226.     putenv(working_environment);
  227.     strcat(s1,file);
  228.     f=fopen(s1,"r");
  229.      }
  230.    if (!f)
  231.      {
  232.     Alert("PANIC!!!!!!!!!\n\nCannot Find a config file!\n");
  233.     sprintf(ss,"Have tried looking for > %s < config file in:\n ./.enlightenment/\n ~/.enlightenment/\n %s\n.... Giving up and exiting.\n",
  234.         file,SYSCONFIG_DIR);Alert(ss);
  235.       EExit(1);
  236.      }
  237.     {
  238.         char working_environment2[300];
  239.         sprintf(working_environment2,"EVERSION=%s",VERSION);
  240.            putenv(working_environment2);
  241.     }
  242.    nest_stack[0]=CTXT_NONE;
  243.    while(fgets(s,sizeof(s),f))
  244.      {
  245.     line++;
  246.         if (s[0]=='#') continue;
  247.     if (s[0]=='\n') continue;
  248.     if (s[0]==0) continue;
  249.     s[strlen(s)-1]=0;
  250.     subvars(s);
  251.     if (s[0]=='%')
  252.       {
  253.          sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  254.          if(!strcmp(s2, "version"))
  255.         {
  256.          if(strcmp(s3,VERSION))
  257.              Alert("Warning: This theme was designed for %s and this is version %s of enlightenment\n",s3,VERSION);
  258.          continue;
  259.         }
  260.          if (!strcmp(s2,"status"))
  261.            {
  262.           if (strcmp(s4,"shapemode")) continue;
  263.           if (!strcmp(s5,"off")) 
  264.             {
  265.                icl.r=-1;icl.g=-1;icl.b=-1;
  266.             }
  267.           else
  268.             {
  269.                icl.r=num1;icl.g=num2;icl.b=num3;
  270.             }
  271.           numm=8;
  272.           i=0;
  273.           while (numm>0)
  274.             {
  275.                if (s[i++]==' ') numm--;
  276.             }
  277.           j=0;
  278.           while (s[i]) ss[j++]=s[i++];
  279.           ss[j]=0;
  280.           ShowStatus(ss,s3,&icl);
  281.           continue;
  282.            }
  283.          else if (!strcmp(s2,"sleep"))
  284.            {
  285.           sscanf(s,"%s %s %i",s1,s2,&num);
  286.           sleep(num);
  287.           continue;
  288.            }
  289.          else if (!strcmp(s2,"black"))
  290.            {
  291.           r=0,g=0;b=0;
  292.           XSetWindowBackground(disp,root,ImlibBestColorMatch(imd,&r,&g,&b));
  293.           XClearWindow(disp,root);
  294.           XSync(disp,False);
  295.           continue;
  296.            }
  297.          else if (!strcmp(s2,"include"))
  298.            {
  299.           sscanf(s,"%s %s %s",s1,s2,s3);
  300.           LoadConfig(s3);
  301.           continue;
  302.            }
  303.          else if (!strcmp(s2,"exec"))
  304.            {
  305.           sscanf(s,"%s %s %s",s1,s2,s3);
  306.           strcpy(ss,strstr(s,s3));
  307.           Do_Exec(ss);
  308.           continue;
  309.            }
  310.       }
  311.     done=0;
  312.     sscanf(s,"%s",s1);
  313.     if (wait_till_end)
  314.       {
  315.          done=1;
  316.          if (wait_nest_level==nest_level) wait_till_end=0;
  317.       }
  318.     if (!strcmp(s1,"begin"))
  319.       {
  320.          done=1;
  321.          sscanf(s,"%s %s",s1,s2);
  322.          if (!strcmp(s2,"window"))
  323.            {
  324.           nest_stack[++nest_level]=CTXT_WINDOW;
  325.            }
  326.          else if (!strcmp(s2,"border"))
  327.            {
  328.           nest_stack[++nest_level]=CTXT_BORDER;
  329.            }
  330.          else if (!strcmp(s2,"subwin"))
  331.            {
  332.           nest_stack[++nest_level]=CTXT_SUBWIN;
  333.           cfg.num_subwins++;
  334.            }
  335.          else if (!strcmp(s2,"root"))
  336.            {
  337.           nest_stack[++nest_level]=CTXT_ROOT;
  338.            }
  339.          else if (!strcmp(s2,"text"))
  340.            {
  341.           nest_stack[++nest_level]=CTXT_TEXT;
  342.            }
  343.          else if (!strcmp(s2,"status"))
  344.            {
  345.           nest_stack[++nest_level]=CTXT_STATUS;
  346.            }
  347.          else if (!strcmp(s2,"buttons"))
  348.            {
  349.           nest_stack[++nest_level]=CTXT_BUTTONS;
  350.            }
  351.          else if (!strcmp(s2,"icons"))
  352.            {
  353.           nest_stack[++nest_level]=CTXT_ICONS;
  354.            }
  355.          else if (!strcmp(s2,"cursors"))
  356.            {
  357.           nest_stack[++nest_level]=CTXT_CURSORS;
  358.            }
  359.          else if (!strcmp(s2,"cursor"))
  360.            {
  361.           sscanf(s,"%s %s",s1,s2);
  362.                   Cursors_num++;
  363.                   if(!Cursors_list)
  364.                         Cursors_list=malloc(sizeof(ECursor));
  365.                   else
  366.                         Cursors_list=realloc(Cursors_list,sizeof(ECursor)*Cursors_num);
  367.           nest_stack[++nest_level]=CTXT_NEWCURSOR;
  368.            }
  369.          else if (!strcmp(s2,"button"))
  370.            {
  371.           b_maxw=0;
  372.           b_maxh=0;
  373.           nest_stack[++nest_level]=CTXT_BUTTON;
  374.           bwin=malloc(sizeof(BWin));
  375.            }
  376.          else if (!strcmp(s2,"menu"))
  377.            {
  378.           nest_stack[++nest_level]=CTXT_MENU;
  379.  
  380.           /* added 7/21/97 trp@cyberoptics.com */
  381.           /* initialize the menu item defaults */
  382.           mm.item_w = mm.item_h = 0;
  383.           mm.itemtext_x = mm.itemtext_y = 0;
  384.           mm.itemtext_w = mm.itemtext_h = 0;
  385.           mm.itemdelta_x = mm.itemdelta_y = 0;
  386.           mm.item_unsel = mm.item_sel = NULL;
  387.  
  388.           /* initialize the first menu item position */
  389.           mmi.x = mmi.y = 0;
  390.            }
  391.          else if (!strcmp(s2,"menuitem"))
  392.            {
  393.           mmi.text=NULL;
  394.           nest_stack[++nest_level]=CTXT_MENUITEM;
  395.  
  396.           /* added 7/21/97 trp@cyberoptics.com */
  397.           /* copy any default information */
  398.           mmi.x += mm.item_x;
  399.           mmi.y = mm.item_y;
  400.           mm.item_x += mm.itemdelta_x;
  401.           mm.item_y += mm.itemdelta_y;
  402.           mmi.width = mm.item_w;
  403.           mmi.height = mm.item_h;
  404.           tx_x = mm.itemtext_x;
  405.           tx_y = mm.itemtext_y;
  406.           tx_w = mm.itemtext_w;
  407.           tx_h = mm.itemtext_h;
  408.           if (mm.item_unsel) strcpy(m_unsel,mm.item_unsel);
  409.           else m_unsel[0]=0;
  410.           if (mm.item_sel) strcpy(m_sel,mm.item_sel);
  411.           else m_sel[0]=0;
  412.           m_unsel_icl = mm.item_unsel_icl;
  413.           m_sel_icl = mm.item_sel_icl;
  414.  
  415.            }
  416.          else if (!strcmp(s2,"fx"))
  417.            {
  418.           nest_stack[++nest_level]=CTXT_FX;
  419.            }
  420.          else if (!strcmp(s2,"desktops"))
  421.            {
  422.           nest_stack[++nest_level]=CTXT_DESKTOPS;
  423.            }
  424.          else if (!strcmp(s2,"desktop"))
  425.            {
  426.           nest_stack[++nest_level]=CTXT_DESKTOP;
  427.            }
  428.          else if (!strcmp(s2,"control"))
  429.            {
  430.           nest_stack[++nest_level]=CTXT_CONTROL;
  431.            }
  432.          else if (!strcmp(s2,"predef_icon"))
  433.            {
  434.           nest_stack[++nest_level]=CTXT_PREDEF_ICON;
  435.            }
  436.          else if (!strcmp(s2,"infobox"))
  437.            {
  438.           nest_stack[++nest_level]=CTXT_INFOBOX;
  439.            }
  440.          else if (!strcmp(s2,"keybindings"))
  441.            {
  442.           /* added 07/21/97 Mandrake (mandrake@mandrake.net) */
  443.           nest_stack[++nest_level]=CTXT_KEYBINDING;
  444.            }
  445.          else
  446.            {
  447.           if (!wait_till_end)
  448.             {
  449.                sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %sSection context %s Unknown.\nIgnoring entire context chunk\n"
  450.                    ,file,line,s,s2);Alert(ss);
  451.                wait_till_end=1;
  452.                wait_nest_level=nest_level++;
  453.                nest_stack[nest_level]=CTXT_NONE;
  454.             }
  455.           else
  456.             {
  457.                nest_level++;
  458.             }
  459.            }
  460.       }
  461.     
  462.     else if (!strcmp(s1,"end"))
  463.       {
  464.          if (nest_stack[nest_level]==CTXT_TEXT) 
  465.            InitTextInfo();
  466.          if (nest_stack[nest_level]==CTXT_STATUS) 
  467.            Init_StatusWin();
  468.          if (nest_stack[nest_level]==CTXT_BUTTON) 
  469.            AddButton(bwin);
  470.          if (nest_stack[nest_level]==CTXT_ICONS) 
  471.            InitIcons();
  472.          if (nest_stack[nest_level]==CTXT_MENUITEM) 
  473.            AddMenuItem(menu,mi);
  474.          if (nest_stack[nest_level]==CTXT_INFOBOX) 
  475.            InitInfoBox();
  476.              if (nest_stack[nest_level]==CTXT_DESKTOP)
  477.            {
  478.           CreateDeskInfo(desknum,di.root_x,di.root_y,
  479.                  di.root_width,di.root_height,
  480.                  di.x,di.y,di.width,di.height,
  481.                  stmp2,&icltmp2,stmp1,&icltmp1,di.above);
  482.            }
  483.              if (nest_stack[nest_level]==CTXT_DESKTOPS)
  484.            InitDesks();
  485.          if (nest_stack[nest_level]==CTXT_PREDEF_ICON) 
  486.            {
  487.           predef_num++;
  488.           if (!predef_list) 
  489.             predef_list=malloc(sizeof(struct predef_icon_list));
  490.           else
  491.             predef_list=realloc(predef_list,sizeof(struct predef_icon_list)*predef_num);
  492.           predef_list[predef_num-1].title=pdl.title;
  493.           predef_list[predef_num-1].image_file=pdl.image_file;
  494.           predef_list[predef_num-1].transp=pdl.transp;
  495.            }
  496.          if (nest_stack[nest_level]==CTXT_MENU)
  497.            {
  498.           RenderMenu(menu);
  499.           AddMenuToList(menu);
  500.  
  501.           mm.item_unsel=NULL;
  502.           mm.item_sel=NULL;
  503.            }
  504.          done=1;
  505.          if (nest_level>0)
  506.            {
  507.           nest_level--;
  508.            }
  509.          else
  510.            {
  511.           nest_level=0;
  512.           sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nKeyword end with no matching begin.\nIgnoring Keyword.\n"
  513.               ,file,line,s);Alert(ss);
  514.            }
  515.       }
  516.     if (!wait_till_end)
  517.       {
  518.          if (strcmp(s1,"begin")){
  519.          if(nest_stack[nest_level]==CTXT_WINDOW)
  520.            {
  521.           if (!strcmp(s1,"shaped"))
  522.             {
  523.                done=1;
  524.                sscanf(s,"%s %s",s1,s2);
  525.                if (!strcmp(s2,"on")) cfg.shape_mode=1;
  526.                else if (!strcmp(s2,"off")) cfg.shape_mode=0;
  527.                else 
  528.              {
  529.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  530.                     "shaped",s2,
  531.                     "on,off",
  532.                     "off");Alert(ss);
  533.                 cfg.shape_mode=0;
  534.              }
  535.             }
  536.            }
  537.          if(nest_stack[nest_level]==CTXT_SUBWIN)
  538.            {
  539.           if (!strcmp(s1,"type"))
  540.             {
  541.                done=1;
  542.                sscanf(s,"%s %s",s1,s2);
  543.                if (!strcmp(s2,"decoration")) cfg.subwin_type[cfg.num_subwins-1]=0;
  544.                else if (!strcmp(s2,"button")) cfg.subwin_type[cfg.num_subwins-1]=1;
  545.                else if (!strcmp(s2,"title")) cfg.subwin_type[cfg.num_subwins-1]=2;
  546.                else 
  547.              {
  548.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  549.                     "type",s2,
  550.                     "decoration,button,title",
  551.                     "decoration");Alert(ss);
  552.                 cfg.subwin_type[cfg.num_subwins-1]=0;
  553.              }
  554.             }
  555.           else if (!strcmp(s1,"coord1_relative"))
  556.             {
  557.                done=1;
  558.                sscanf(s,"%s %s",s1,s2);
  559.                if (!strcmp(s2,"topleft")) cfg.subwin_pos_method1[cfg.num_subwins-1]=0;
  560.                else if (!strcmp(s2,"topright")) cfg.subwin_pos_method1[cfg.num_subwins-1]=1;
  561.                else if (!strcmp(s2,"bottomleft")) cfg.subwin_pos_method1[cfg.num_subwins-1]=2;
  562.                else if (!strcmp(s2,"bottomright")) cfg.subwin_pos_method1[cfg.num_subwins-1]=3;
  563.                else 
  564.              {
  565.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  566.                     "coor_relative",s2,
  567.                     "topleft,topright,bottomleft,bottomright",
  568.                     "topleft");Alert(ss);
  569.                 cfg.subwin_pos_method1[cfg.num_subwins-1]=0;
  570.              }
  571.             }
  572.           else if (!strcmp(s1,"coord1"))
  573.             {
  574.                done=1;
  575.                sscanf(s,"%s %i %i",s1,&num,&numm);
  576.                cfg.subwin_pos_x1[cfg.num_subwins-1]=num;
  577.                cfg.subwin_pos_y1[cfg.num_subwins-1]=numm;
  578.             }
  579.           else if (!strcmp(s1,"coord2_relative"))
  580.             {
  581.                done=1;
  582.                sscanf(s,"%s %s",s1,s2);
  583.                if (!strcmp(s2,"topleft")) cfg.subwin_pos_method2[cfg.num_subwins-1]=0;
  584.                else if (!strcmp(s2,"topright")) cfg.subwin_pos_method2[cfg.num_subwins-1]=1;
  585.                else if (!strcmp(s2,"bottomleft")) cfg.subwin_pos_method2[cfg.num_subwins-1]=2;
  586.                else if (!strcmp(s2,"bottomright")) cfg.subwin_pos_method2[cfg.num_subwins-1]=3;
  587.                else 
  588.              {
  589.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  590.                     "coor_relative",s2,
  591.                     "topleft,topright,bottomleft,bottomright",
  592.                     "topleft");Alert(ss);
  593.                 cfg.subwin_pos_method2[cfg.num_subwins-1]=0;
  594.              }
  595.             }
  596.           else if (!strcmp(s1,"coord2"))
  597.             {
  598.                done=1;
  599.                sscanf(s,"%s %i %i",s1,&num,&numm);
  600.                cfg.subwin_pos_x2[cfg.num_subwins-1]=num;
  601.                cfg.subwin_pos_y2[cfg.num_subwins-1]=numm;
  602.             }
  603.           else if (!strcmp(s1,"image"))
  604.             {
  605.                done=1;
  606.                sscanf(s,"%s %s",s1,s2);
  607.                if (!strcmp(s2,"clicked")) 
  608.              {
  609.                 sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  610.                 cfg.subwin_pmname_clk[cfg.num_subwins-1]=malloc(sizeof(char)*(strlen(s3)+1));
  611.                 strcpy(cfg.subwin_pmname_clk[cfg.num_subwins-1],s3);
  612.                 if (!strcmp(s4,"shapecolor"))
  613.                   {
  614.                  if (!strcmp(s5,"on"))
  615.                    {
  616.                       cfg.subwin_transp_clk[cfg.num_subwins-1].r=num1;
  617.                       cfg.subwin_transp_clk[cfg.num_subwins-1].g=num2;
  618.                       cfg.subwin_transp_clk[cfg.num_subwins-1].b=num3;
  619.                    }
  620.                  else if (!strcmp(s5,"off"))
  621.                    {
  622.                       cfg.subwin_transp_clk[cfg.num_subwins-1].r=-1;
  623.                       cfg.subwin_transp_clk[cfg.num_subwins-1].g=-1;
  624.                       cfg.subwin_transp_clk[cfg.num_subwins-1].b=-1;
  625.                    }
  626.                  else
  627.                    {
  628.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  629.                           "image shapecolor",s5,
  630.                           "on,off",
  631.                           "off");Alert(ss);
  632.                       cfg.subwin_transp_clk[cfg.num_subwins-1].r=-1;
  633.                       cfg.subwin_transp_clk[cfg.num_subwins-1].g=-1;
  634.                       cfg.subwin_transp_clk[cfg.num_subwins-1].b=-1;
  635.                    }
  636.                   }
  637.                 else
  638.                   {
  639.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  640.                      "image",s4,
  641.                      "shapecolor",
  642.                      "chapecolor off");Alert(ss);
  643.                  cfg.subwin_transp_clk[cfg.num_subwins-1].r=-1;
  644.                  cfg.subwin_transp_clk[cfg.num_subwins-1].g=-1;
  645.                  cfg.subwin_transp_clk[cfg.num_subwins-1].b=-1;
  646.                   }
  647.              }
  648.                else if (!strcmp(s2,"selected")) 
  649.              {
  650.                 sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  651.                 cfg.subwin_pmname_sel[cfg.num_subwins-1]=malloc(sizeof(char)*(strlen(s3)+1));
  652.                 strcpy(cfg.subwin_pmname_sel[cfg.num_subwins-1],s3);
  653.                 if (!strcmp(s4,"shapecolor"))
  654.                   {
  655.                  if (!strcmp(s5,"on"))
  656.                    {
  657.                       cfg.subwin_transp_sel[cfg.num_subwins-1].r=num1;
  658.                       cfg.subwin_transp_sel[cfg.num_subwins-1].g=num2;
  659.                       cfg.subwin_transp_sel[cfg.num_subwins-1].b=num3;
  660.                    }
  661.                  else if (!strcmp(s5,"off"))
  662.                    {
  663.                       cfg.subwin_transp_sel[cfg.num_subwins-1].r=-1;
  664.                       cfg.subwin_transp_sel[cfg.num_subwins-1].g=-1;
  665.                       cfg.subwin_transp_sel[cfg.num_subwins-1].b=-1;
  666.                    }
  667.                  else
  668.                    {
  669.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  670.                           "image shapecolor",s5,
  671.                           "on,off",
  672.                           "off");Alert(ss);
  673.                       cfg.subwin_transp_sel[cfg.num_subwins-1].r=-1;
  674.                       cfg.subwin_transp_sel[cfg.num_subwins-1].g=-1;
  675.                       cfg.subwin_transp_sel[cfg.num_subwins-1].b=-1;
  676.                    }
  677.                   }
  678.                 else
  679.                   {
  680.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  681.                      "image",s4,
  682.                      "shapecolor",
  683.                      "shapecolor off");Alert(ss);
  684.                  cfg.subwin_transp_sel[cfg.num_subwins-1].r=-1;
  685.                  cfg.subwin_transp_sel[cfg.num_subwins-1].g=-1;
  686.                  cfg.subwin_transp_sel[cfg.num_subwins-1].b=-1;
  687.                   }
  688.              }
  689.                else if (!strcmp(s2,"unselected")) 
  690.              {
  691.                 sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  692.                 cfg.subwin_pmname_uns[cfg.num_subwins-1]=malloc(sizeof(char)*(strlen(s3)+1));
  693.                 strcpy(cfg.subwin_pmname_uns[cfg.num_subwins-1],s3);
  694.                 if (!strcmp(s4,"shapecolor"))
  695.                   {
  696.                  if (!strcmp(s5,"on"))
  697.                    {
  698.                       cfg.subwin_transp_uns[cfg.num_subwins-1].r=num1;
  699.                       cfg.subwin_transp_uns[cfg.num_subwins-1].g=num2;
  700.                       cfg.subwin_transp_uns[cfg.num_subwins-1].b=num3;
  701.                    }
  702.                  else if (!strcmp(s5,"off"))
  703.                    {
  704.                       cfg.subwin_transp_uns[cfg.num_subwins-1].r=-1;
  705.                       cfg.subwin_transp_uns[cfg.num_subwins-1].g=-1;
  706.                       cfg.subwin_transp_uns[cfg.num_subwins-1].b=-1;
  707.                    }
  708.                  else
  709.                    {
  710.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  711.                           "image shapecolor",s5,
  712.                           "on,off",
  713.                           "off");Alert(ss);
  714.                       cfg.subwin_transp_uns[cfg.num_subwins-1].r=-1;
  715.                       cfg.subwin_transp_uns[cfg.num_subwins-1].g=-1;
  716.                       cfg.subwin_transp_uns[cfg.num_subwins-1].b=-1;
  717.                    }
  718.                   }
  719.                 else
  720.                   {
  721.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  722.                      "image",s4,
  723.                      "shapecolor",
  724.                      "shapecolor off");Alert(ss);
  725.                  cfg.subwin_transp_uns[cfg.num_subwins-1].r=-1;
  726.                  cfg.subwin_transp_uns[cfg.num_subwins-1].g=-1;
  727.                  cfg.subwin_transp_uns[cfg.num_subwins-1].b=-1;
  728.                   }
  729.              }
  730.                else if (!strcmp(s2,"scale_method")) 
  731.              {
  732.                 sscanf(s,"%s %s %s",s1,s2,s3);
  733.                 if (!strcmp(s3,"tile")) cfg.subwin_scale_method[cfg.num_subwins-1]=0;
  734.                 else if (!strcmp(s3,"scaletile")) cfg.subwin_scale_method[cfg.num_subwins-1]=1;
  735.                 else if (!strcmp(s3,"scale")) cfg.subwin_scale_method[cfg.num_subwins-1]=2;
  736.                 else 
  737.                   {
  738.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  739.                      "scale_method",s3,
  740.                      "tile,scaletime,scale",
  741.                      "tile");Alert(ss);
  742.                  cfg.subwin_scale_method[cfg.num_subwins-1]=0;
  743.                   }
  744.              }
  745.                else 
  746.              {
  747.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  748.                     "image detail",s2,
  749.                     "clicked,selected,unselected,scale_method",
  750.                     "NOTHING");Alert(ss);
  751.              }
  752.             }
  753.           else if (!strcmp(s1,"level"))
  754.             {
  755.                done=1;
  756.                sscanf(s,"%s %s",s1,s2);
  757.                if (!strcmp(s2,"above")) cfg.subwin_level[cfg.num_subwins-1]=1;
  758.                else if (!strcmp(s2,"below")) cfg.subwin_level[cfg.num_subwins-1]=0;
  759.                else 
  760.              {
  761.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  762.                     "level",s2,
  763.                     "above,below",
  764.                     "below");Alert(ss);
  765.                 cfg.subwin_level[cfg.num_subwins-1]=0;
  766.              }
  767.             }
  768.           else if (!strcmp(s1,"action"))
  769.             {
  770.                done=1;
  771.                sscanf(s,"%s %s %i %s %s",s1,s2,&num,s3,s4);
  772.                if ((num>0)&&(num<4))
  773.              {
  774.                 if (!strcmp(s2,"none")) 
  775.                   {
  776.                  numm=0;
  777.                   }
  778.                 else if (!strcmp(s2,"shift")) 
  779.                   {
  780.                  numm=1;
  781.                   }
  782.                 else if (!strcmp(s2,"ctrl")) 
  783.                   {
  784.                  numm=2;
  785.                   }
  786.                 else if (!strcmp(s2,"alt")) 
  787.                   {
  788.                  numm=3;
  789.                   }
  790.                 else 
  791.                   {
  792.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  793.                      "action modifier",s2,
  794.                      "none,shift,ctrl,alt",
  795.                      "none");Alert(ss);
  796.                  numm=0;
  797.                   }
  798.                 if (!strcmp(s3,"move")) 
  799.                   {
  800.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_MOVE;
  801.                   }
  802.                 else if (!strcmp(s3,"resize")) 
  803.                   {
  804.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_RESIZE;
  805.                   }
  806.                 else if (!strcmp(s3,"iconify")) 
  807.                   {
  808.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_ICONIFY;
  809.                   }
  810.                 else if (!strcmp(s3,"kill")) 
  811.                   {
  812.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_KILL;
  813.                   }
  814.                 else if (!strcmp(s3,"raise")) 
  815.                   {
  816.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_RAISE;
  817.                   }
  818.                 else if (!strcmp(s3,"lower")) 
  819.                   {
  820.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_LOWER;
  821.                   }
  822.                 else if (!strcmp(s3,"raise_lower")) 
  823.                   {
  824.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_RAISE_LOWER;
  825.                   }
  826.                 else if (!strcmp(s3,"max_height")) 
  827.                   {
  828.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_MAX_HEIGHT;
  829.                   }
  830.                 else if (!strcmp(s3,"max_width")) 
  831.                   {
  832.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_MAX_WIDTH;
  833.                   }
  834.                 else if (!strcmp(s3,"max_size")) 
  835.                   {
  836.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_MAX_SIZE;
  837.                   }
  838.                 else if (!strcmp(s3,"configure")) 
  839.                   {
  840.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_CONFIGURE;
  841.                   }
  842.                 else if (!strcmp(s3,"menu")) 
  843.                   {
  844.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_MENU;
  845.                  strcpy(cfg.subwin_action[cfg.num_subwins-1][num-1][numm].params,s4);
  846.                   }
  847.                 else if (!strcmp(s3,"exec")) 
  848.                   {
  849.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_EXEC;
  850.                  strcpy(cfg.subwin_action[cfg.num_subwins-1][num-1][numm].params,strstr(s,s4));
  851.                   }
  852.                 else if (!strcmp(s3,"exit")) 
  853.                   {
  854.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_EXIT;
  855.                   }
  856.                 else if (!strcmp(s3,"kill_nasty")) 
  857.                   {
  858.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_KILL_NASTY;
  859.                   }
  860.                 else if (!strcmp(s3,"sticky")) 
  861.                   {
  862.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_STICKY;
  863.                   }
  864.                 else if (!strcmp(s3,"drag")) 
  865.                   {
  866.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_DRAG;
  867.                   }
  868.                 else if (!strcmp(s3,"snapshot")) 
  869.                   {
  870.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_SNAPSHOT;
  871.                   }
  872.                 else if (!strcmp(s3,"unsnapshot")) 
  873.                   {
  874.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_UNSNAPSHOT;
  875.                   }
  876.                 else if(!strcmp(s3,"shade"))
  877.                   {
  878.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_SHADE;
  879.                   }
  880.                 else if (!strcmp(s3,"windowop"))
  881.                   {
  882.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_WINDOWOP;
  883.                  strcpy(cfg.subwin_action[cfg.num_subwins-1][num-1][numm].params,strstr(s,s4));
  884.                   }
  885.                 else if (!strcmp(s3,"none")) 
  886.                   {
  887.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=ACTION_NONE;
  888.                   }
  889.                 else
  890.                   {
  891.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  892.                      "action",s3,
  893.                      "move,resize,iconify,kill,raise,lower,raise_lower,max_height,max_width,max_size,configure,menu,exec,kill_nasty,sticky,none",
  894.                      "NOTHING");Alert(ss);
  895.                   }
  896.              }
  897.                else
  898.              {
  899.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  900.                     "action button ","!",
  901.                     "1,2,3",
  902.                     "NOTHING");Alert(ss);
  903.              }
  904.             }
  905.            }
  906.          if(nest_stack[nest_level]==CTXT_BORDER)
  907.            {
  908.           if (!strcmp(s1,"left"))
  909.             {
  910.                done=1;
  911.                sscanf(s,"%s %i",s1,&num);
  912.                cfg.border_l=num;
  913.             }
  914.           else if (!strcmp(s1,"right"))
  915.             {
  916.                done=1;
  917.                sscanf(s,"%s %i",s1,&num);
  918.                cfg.border_r=num;
  919.             }
  920.           else if (!strcmp(s1,"top"))
  921.             {
  922.                done=1;
  923.                sscanf(s,"%s %i",s1,&num);
  924.                cfg.border_t=num;
  925.             }
  926.           else if (!strcmp(s1,"bottom"))
  927.             {
  928.                done=1;
  929.                sscanf(s,"%s %i",s1,&num);
  930.                cfg.border_b=num;
  931.             }
  932.            }
  933.          if(nest_stack[nest_level]==CTXT_ICONS)
  934.            {
  935.           if (!strcmp(s1,"location"))
  936.             {
  937.                done=1;
  938.                sscanf(s,"%s %s %i %i",s1,s2,&num1,&num2);
  939.                if (!strcmp(s2,"topleft"))
  940.              {
  941.                 icfg.x=num1;
  942.                 icfg.y=num2;
  943.              }
  944.                else if (!strcmp(s2,"bottomleft"))
  945.              {
  946.                 icfg.x=num1;
  947.                 icfg.y=DisplayHeight(disp,screen)-num2-icfg.height;
  948.              }
  949.                else if (!strcmp(s2,"topright"))
  950.              {
  951.                 icfg.x=DisplayWidth(disp,screen)-num1-icfg.width;
  952.                 icfg.y=num2;
  953.              }
  954.                else if (!strcmp(s2,"bottomright"))
  955.              {
  956.                 icfg.x=DisplayWidth(disp,screen)-num1-icfg.width;
  957.                 icfg.y=DisplayHeight(disp,screen)-num2-icfg.height;
  958.              }
  959.              
  960.             }
  961.           else if (!strcmp(s1,"size"))
  962.             {
  963.                done=1;
  964.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  965.                icfg.width=num1;
  966.                icfg.height=num2;
  967.             }
  968.           else if (!strcmp(s1,"border"))
  969.             {
  970.                done=1;
  971.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  972.                icfg.bx=num1;
  973.                icfg.by=num2;
  974.             }
  975.           else if (!strcmp(s1,"scroll_speed"))
  976.             {
  977.                done=1;
  978.                sscanf(s,"%s %i",s1,&num);
  979.                icfg.scroll_speed=num;
  980.             }
  981.           else if (!strcmp(s1,"snapshot_time"))
  982.             {
  983.                done=1;
  984.                sscanf(s,"%s %i",s1,&num);
  985.                icfg.snapshot_time=num;
  986.             }
  987.           else if (!strcmp(s1,"orientation"))
  988.             {
  989.                done=1;
  990.                sscanf(s,"%s %s",s1,s2);
  991.                if (!strcmp(s2,"vertical")) icfg.orientation=1;
  992.                else icfg.orientation=0;
  993.             }
  994.           else if (!strcmp(s1,"level"))
  995.             {
  996.                done=1;
  997.                sscanf(s,"%s %s",s1,s2);
  998.                if (!strcmp(s2,"above")) icfg.level=1;
  999.                else icfg.level=0;
  1000.             }
  1001.           else if (!strcmp(s1,"image"))
  1002.             {
  1003.                done=1;
  1004.                sscanf(s,"%s %s",s1,s2);
  1005.                if (!strcmp(s2,"background")) 
  1006.              {
  1007.                 sscanf(s,"%s %s %s",s1,s2,s3);
  1008.                 icfg.background_im=malloc(sizeof(char)*(strlen(s3)+1));
  1009.                 strcpy(icfg.background_im,s3);
  1010.              }
  1011.                else if (!strcmp(s2,"left"))
  1012.              {
  1013.                 sscanf(s,"%s %s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,s6,&num1,&num2,&num3);
  1014.                 if (!strcmp(s3,"unselected"))
  1015.                   {
  1016.                  icfg.left_arrow_im=malloc(sizeof(char)*(strlen(s4)+1));
  1017.                  strcpy(icfg.left_arrow_im,s4);
  1018.                  if (!strcmp(s5,"shapemode"))
  1019.                    {
  1020.                       if (!strcmp(s6,"on"))
  1021.                     {
  1022.                        icfg.left_transparent.r=num1;
  1023.                        icfg.left_transparent.g=num2;
  1024.                        icfg.left_transparent.b=num3;
  1025.                     }
  1026.                       else if (!strcmp(s6,"off"))
  1027.                     {
  1028.                        icfg.left_transparent.r=-1;
  1029.                        icfg.left_transparent.g=-1;
  1030.                        icfg.left_transparent.b=-1;
  1031.                     }
  1032.                       else
  1033.                     {
  1034.                        sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1035.                            "image shapecolor",s5,
  1036.                            "on,off",
  1037.                            "off");Alert(ss);
  1038.                        icfg.left_transparent.r=-1;
  1039.                        icfg.left_transparent.g=-1;
  1040.                        icfg.left_transparent.b=-1;
  1041.                     }
  1042.                    }
  1043.                  else
  1044.                    {
  1045.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1046.                           "image",s4,
  1047.                           "shapemode",
  1048.                           "shapemode off");Alert(ss);
  1049.                       icfg.left_transparent.r=-1;
  1050.                       icfg.left_transparent.g=-1;
  1051.                       icfg.left_transparent.b=-1;
  1052.                    }
  1053.                   }
  1054.                 else if (!strcmp(s3,"selected"))
  1055.                   {
  1056.                  icfg.left_sel_arrow_im=malloc(sizeof(char)*(strlen(s4)+1));
  1057.                  strcpy(icfg.left_sel_arrow_im,s4);
  1058.                  if (!strcmp(s5,"shapemode"))
  1059.                    {
  1060.                       if (!strcmp(s6,"on"))
  1061.                     {
  1062.                        icfg.left_sel_transparent.r=num1;
  1063.                        icfg.left_sel_transparent.g=num2;
  1064.                        icfg.left_sel_transparent.b=num3;
  1065.                     }
  1066.                       else if (!strcmp(s6,"off"))
  1067.                     {
  1068.                        icfg.left_sel_transparent.r=-1;
  1069.                        icfg.left_sel_transparent.g=-1;
  1070.                        icfg.left_sel_transparent.b=-1;
  1071.                     }
  1072.                       else
  1073.                     {
  1074.                        sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1075.                            "image shapecolor",s5,
  1076.                            "on,off",
  1077.                            "off");Alert(ss);
  1078.                        icfg.left_sel_transparent.r=-1;
  1079.                        icfg.left_sel_transparent.g=-1;
  1080.                        icfg.left_sel_transparent.b=-1;
  1081.                     }
  1082.                    }
  1083.                  else
  1084.                    {
  1085.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1086.                           "image",s4,
  1087.                           "shapemode",
  1088.                           "shapemode off");Alert(ss);
  1089.                       icfg.left_sel_transparent.r=-1;
  1090.                       icfg.left_sel_transparent.g=-1;
  1091.                       icfg.left_sel_transparent.b=-1;
  1092.                    }
  1093.                   }
  1094.                 else if (!strcmp(s3,"clicked"))
  1095.                   {
  1096.                  icfg.left_clk_arrow_im=malloc(sizeof(char)*(strlen(s4)+1));
  1097.                  strcpy(icfg.left_clk_arrow_im,s4);
  1098.                  if (!strcmp(s5,"shapemode"))
  1099.                    {
  1100.                       if (!strcmp(s6,"on"))
  1101.                     {
  1102.                        icfg.left_clk_transparent.r=num1;
  1103.                        icfg.left_clk_transparent.g=num2;
  1104.                        icfg.left_clk_transparent.b=num3;
  1105.                     }
  1106.                       else if (!strcmp(s6,"off"))
  1107.                     {
  1108.                        icfg.left_clk_transparent.r=-1;
  1109.                        icfg.left_clk_transparent.g=-1;
  1110.                        icfg.left_clk_transparent.b=-1;
  1111.                     }
  1112.                       else
  1113.                     {
  1114.                        sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1115.                            "image shapecolor",s5,
  1116.                            "on,off",
  1117.                            "off");Alert(ss);
  1118.                        icfg.left_clk_transparent.r=-1;
  1119.                        icfg.left_clk_transparent.g=-1;
  1120.                        icfg.left_clk_transparent.b=-1;
  1121.                     }
  1122.                    }
  1123.                  else
  1124.                    {
  1125.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1126.                           "image",s4,
  1127.                           "shapemode",
  1128.                           "shapemode off");Alert(ss);
  1129.                       icfg.left_clk_transparent.r=-1;
  1130.                       icfg.left_clk_transparent.g=-1;
  1131.                       icfg.left_clk_transparent.b=-1;
  1132.                    }
  1133.                   }
  1134.              }
  1135.                else if (!strcmp(s2,"right"))
  1136.              {
  1137.                 sscanf(s,"%s %s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,s6,&num1,&num2,&num3);
  1138.                 if (!strcmp(s3,"unselected"))
  1139.                   {
  1140.                  icfg.right_arrow_im=malloc(sizeof(char)*(strlen(s4)+1));
  1141.                  strcpy(icfg.right_arrow_im,s4);
  1142.                  if (!strcmp(s5,"shapemode"))
  1143.                    {
  1144.                       if (!strcmp(s6,"on"))
  1145.                     {
  1146.                        icfg.right_transparent.r=num1;
  1147.                        icfg.right_transparent.g=num2;
  1148.                        icfg.right_transparent.b=num3;
  1149.                     }
  1150.                       else if (!strcmp(s6,"off"))
  1151.                     {
  1152.                        icfg.right_transparent.r=-1;
  1153.                        icfg.right_transparent.g=-1;
  1154.                        icfg.right_transparent.b=-1;
  1155.                     }
  1156.                       else
  1157.                     {
  1158.                        sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1159.                            "image shapecolor",s5,
  1160.                            "on,off",
  1161.                            "off");Alert(ss);
  1162.                        icfg.right_transparent.r=-1;
  1163.                        icfg.right_transparent.g=-1;
  1164.                        icfg.right_transparent.b=-1;
  1165.                     }
  1166.                    }
  1167.                  else
  1168.                    {
  1169.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1170.                           "image",s4,
  1171.                           "shapemode",
  1172.                           "shapemode off");Alert(ss);
  1173.                       icfg.right_transparent.r=-1;
  1174.                       icfg.right_transparent.g=-1;
  1175.                       icfg.right_transparent.b=-1;
  1176.                    }
  1177.                   }
  1178.                 else if (!strcmp(s3,"selected"))
  1179.                   {
  1180.                  icfg.right_sel_arrow_im=malloc(sizeof(char)*(strlen(s4)+1));
  1181.                  strcpy(icfg.right_sel_arrow_im,s4);
  1182.                  if (!strcmp(s5,"shapemode"))
  1183.                    {
  1184.                       if (!strcmp(s6,"on"))
  1185.                     {
  1186.                        icfg.right_sel_transparent.r=num1;
  1187.                        icfg.right_sel_transparent.g=num2;
  1188.                        icfg.right_sel_transparent.b=num3;
  1189.                     }
  1190.                       else if (!strcmp(s6,"off"))
  1191.                     {
  1192.                        icfg.right_sel_transparent.r=-1;
  1193.                        icfg.right_sel_transparent.g=-1;
  1194.                        icfg.right_sel_transparent.b=-1;
  1195.                     }
  1196.                       else
  1197.                     {
  1198.                        sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1199.                            "image shapecolor",s5,
  1200.                            "on,off",
  1201.                            "off");Alert(ss);
  1202.                        icfg.right_sel_transparent.r=-1;
  1203.                        icfg.right_sel_transparent.g=-1;
  1204.                        icfg.right_sel_transparent.b=-1;
  1205.                     }
  1206.                    }
  1207.                  else
  1208.                    {
  1209.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1210.                           "image",s4,
  1211.                           "shapemode",
  1212.                           "shapemode off");Alert(ss);
  1213.                       icfg.right_sel_transparent.r=-1;
  1214.                       icfg.right_sel_transparent.g=-1;
  1215.                       icfg.right_sel_transparent.b=-1;
  1216.                    }
  1217.                   }
  1218.                 else if (!strcmp(s3,"clicked"))
  1219.                   {
  1220.                  icfg.right_clk_arrow_im=malloc(sizeof(char)*(strlen(s4)+1));
  1221.                  strcpy(icfg.right_clk_arrow_im,s4);
  1222.                  if (!strcmp(s5,"shapemode"))
  1223.                    {
  1224.                       if (!strcmp(s6,"on"))
  1225.                     {
  1226.                        icfg.right_clk_transparent.r=num1;
  1227.                        icfg.right_clk_transparent.g=num2;
  1228.                        icfg.right_clk_transparent.b=num3;
  1229.                     }
  1230.                       else if (!strcmp(s6,"off"))
  1231.                     {
  1232.                        icfg.right_clk_transparent.r=-1;
  1233.                        icfg.right_clk_transparent.g=-1;
  1234.                        icfg.right_clk_transparent.b=-1;
  1235.                     }
  1236.                       else
  1237.                     {
  1238.                        sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1239.                            "image shapecolor",s5,
  1240.                            "on,off",
  1241.                            "off");Alert(ss);
  1242.                        icfg.right_clk_transparent.r=-1;
  1243.                        icfg.right_clk_transparent.g=-1;
  1244.                        icfg.right_clk_transparent.b=-1;
  1245.                     }
  1246.                    }
  1247.                  else
  1248.                    {
  1249.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1250.                           "image",s4,
  1251.                           "shapemode",
  1252.                           "shapemode off");Alert(ss);
  1253.                       icfg.right_clk_transparent.r=-1;
  1254.                       icfg.right_clk_transparent.g=-1;
  1255.                       icfg.right_clk_transparent.b=-1;
  1256.                    }
  1257.                   }
  1258.              }
  1259.             }
  1260.           else if (!strcmp(s1,"action"))
  1261.             {
  1262.                done=1;
  1263.                sscanf(s,"%s %s %i %s %s",s1,s2,&num,s3,s4);
  1264.                if ((num>0)&&(num<4))
  1265.              {
  1266.                 if (!strcmp(s2,"none")) 
  1267.                   {
  1268.                  numm=0;
  1269.                   }
  1270.                 else if (!strcmp(s2,"shift")) 
  1271.                   {
  1272.                  numm=1;
  1273.                   }
  1274.                 else if (!strcmp(s2,"ctrl")) 
  1275.                   {
  1276.                  numm=2;
  1277.                   }
  1278.                 else if (!strcmp(s2,"alt")) 
  1279.                   {
  1280.                  numm=3;
  1281.                   }
  1282.                 else 
  1283.                   {
  1284.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1285.                      "action modifier",s2,
  1286.                      "none,shift,ctrl,alt",
  1287.                      "none");Alert(ss);
  1288.                  numm=0;
  1289.                   }
  1290.                 if (!strcmp(s3,"iconify")) 
  1291.                   {
  1292.                  icfg.action[num-1][numm].id=ACTION_ICONIFY;
  1293.                   }
  1294.                 else if (!strcmp(s3,"kill")) 
  1295.                   {
  1296.                  icfg.action[num-1][numm].id=ACTION_KILL;
  1297.                   }
  1298.                 else if (!strcmp(s3,"configure")) 
  1299.                   {
  1300.                  icfg.action[num-1][numm].id=ACTION_CONFIGURE;
  1301.                   }
  1302.                 else if (!strcmp(s3,"menu")) 
  1303.                   {
  1304.                  icfg.action[num-1][numm].id=ACTION_MENU;
  1305.                  strcpy(icfg.action[num-1][numm].params,s4);
  1306.                   }
  1307.                 else if (!strcmp(s3,"exec")) 
  1308.                   {
  1309.                  icfg.action[num-1][numm].id=ACTION_EXEC;
  1310.                  strcpy(icfg.action[num-1][numm].params,strstr(s,s4));
  1311.                   }
  1312.                 else if (!strcmp(s3,"kill_nasty")) 
  1313.                   {
  1314.                  icfg.action[num-1][numm].id=ACTION_KILL_NASTY;
  1315.                   }
  1316.                 else if (!strcmp(s3,"drag")) 
  1317.                   {
  1318.                  icfg.action[num-1][numm].id=ACTION_DRAG;
  1319.                   }
  1320.                 else if (!strcmp(s3,"windowop"))
  1321.                   {
  1322.                  icfg.action[num-1][numm].id=ACTION_WINDOWOP;
  1323.                  strcpy(icfg.action[num-1][numm].params,strstr(s,s4));
  1324.                   }
  1325.                 else if (!strcmp(s3,"none")) 
  1326.                   {
  1327.                  icfg.action[num-1][numm].id=ACTION_NONE;
  1328.                   }
  1329.                 else
  1330.                   {
  1331.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1332.                      "action",s3,
  1333.                      "iconify,configure,menu,exec,kill_nasty,none",
  1334.                      "NOTHING");Alert(ss);
  1335.                   }
  1336.              }
  1337.                else
  1338.              {
  1339.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1340.                     "action button ","!",
  1341.                     "1,2,3",
  1342.                     "NOTHING");Alert(ss);
  1343.              }
  1344.             }
  1345.            }
  1346.          if(nest_stack[nest_level]==CTXT_ROOT)
  1347.            {
  1348.           if (!strcmp(s1,"backgroundimage"))
  1349.             {
  1350.                done=1;
  1351.                sscanf(s,"%s %i %i %s",s1,&num,&numm,s2);
  1352.                desk.bg_width[0]=num;
  1353.                desk.bg_height[0]=numm;
  1354.                strcpy(desk.background[0],s2);
  1355.             }
  1356.            }
  1357.          if(nest_stack[nest_level]==CTXT_CONTROL)
  1358.            {
  1359.           if (!strcmp(s1,"move"))
  1360.             {
  1361.                done=1;
  1362.                sscanf(s,"%s %s",s1,s2);
  1363.                if (!strcmp(s2,"box")) cfg.move_mode=0;
  1364.                else if (!strcmp(s2,"shape")) cfg.move_mode=1;
  1365.                else if (!strcmp(s2,"opaque")) cfg.move_mode=2;
  1366.                else 
  1367.              {
  1368.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1369.                     "move",s2,
  1370.                     "box,shape,opaque",
  1371.                     "box");Alert(ss);
  1372.                 cfg.move_mode=0;
  1373.              }
  1374.             }
  1375.           else if (!strcmp(s1,"snapshotpager"))
  1376.             {
  1377.             done=1;
  1378.             sscanf(s,"%s %s",s1,s2);
  1379.             if(!strcmp(s2,"on")) {
  1380.                 desk.snapshotpager=1;
  1381.             } else {
  1382.                 desk.snapshotpager=0;
  1383.             }
  1384.             }
  1385.           else if (!strcmp(s1,"autoraise"))
  1386.             {
  1387.                done=1;
  1388.                sscanf(s,"%s %s %i",s1,s2,&num);
  1389.                cfg.autoraise_time=num;
  1390.                if (!strcmp(s2,"on")) cfg.autoraise=1;
  1391.                else if (!strcmp(s2,"off")) cfg.autoraise=0;
  1392.                else 
  1393.              {
  1394.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1395.                     "autoraise",s2,
  1396.                     "on,off",
  1397.                     "off");Alert(ss);
  1398.                 cfg.autoraise=0;
  1399.              }
  1400.             }
  1401.           else if (!strcmp(s1,"statesfile"))
  1402.             {
  1403.                done=1;
  1404.                sscanf(s,"%s %s %s",s1,s2,s3);
  1405.                if (!states)
  1406.              {
  1407.                 if (!strcmp(s2,"on")) states=1;
  1408.                 strcmp(statefile,s3);
  1409.              }
  1410.             }
  1411.           else if (!strcmp(s1,"focus"))
  1412.             {
  1413.             done=1;
  1414.             sscanf(s,"%s %s",s1,s2);
  1415.             if(!strcmp(s2,"sloppy")) cfg.focus_policy=SloppyFocus;
  1416.             else if(!strcmp(s2,"click")) cfg.focus_policy=ClickToFocus;
  1417.             else if(!strcmp(s2,"pointer")) cfg.focus_policy=PointerFocus;
  1418.             else {
  1419.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed [%s]\n Assuming %s.\n",file,line,s,"focus",s2,"pointer,sloppy,click","pointer");Alert(ss);
  1420.                 cfg.focus_policy=PointerFocus;
  1421.             }
  1422.             }
  1423.           else if (!strcmp(s1,"resize"))
  1424.             {
  1425.                done=1;
  1426.                sscanf(s,"%s %s",s1,s2);
  1427.                if (!strcmp(s2,"box")) cfg.resize_mode=0;
  1428.                else if (!strcmp(s2,"shape")) cfg.resize_mode=1;
  1429.                else if (!strcmp(s2,"opaque")) cfg.resize_mode=2;
  1430.                else 
  1431.              {
  1432.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1433.                     "resize",s2,
  1434.                     "box,shape,opaque",
  1435.                     "box");Alert(ss);
  1436.                 cfg.resize_mode=0;
  1437.              }
  1438.             }
  1439.            }
  1440.          if(nest_stack[nest_level]==CTXT_DESKTOPS)
  1441.            {
  1442.           if (!strcmp(s1,"image"))
  1443.             {
  1444.                done=1;
  1445.                sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  1446.                if (!strcmp(s2,"selected")) 
  1447.              {
  1448.                 if (!strcmp(s5,"on"))
  1449.                   {icltmp1.r=num1;icltmp1.g=num2;icltmp1.b=num3;}
  1450.                 else
  1451.                   {icltmp1.r=-1;icltmp1.g=-1;icltmp1.b=-1;}
  1452.                 desk.im_sel=LoadImage(imd,s3,&icltmp1);
  1453.              }
  1454.                else if (!strcmp(s2,"unselected")) 
  1455.              {
  1456.                 if (!strcmp(s5,"on"))
  1457.                   {icltmp1.r=num1;icltmp1.g=num2;icltmp1.b=num3;}
  1458.                 else
  1459.                   {icltmp1.r=-1;icltmp1.g=-1;icltmp1.b=-1;}
  1460.                 desk.im_unsel=LoadImage(imd,s3,&icltmp1);
  1461.              }
  1462.                else if (!strcmp(s2,"drag")) 
  1463.              {
  1464.                 if (!strcmp(s5,"on"))
  1465.                   {icltmp1.r=num1;icltmp1.g=num2;icltmp1.b=num3;}
  1466.                 else
  1467.                   {icltmp1.r=-1;icltmp1.g=-1;icltmp1.b=-1;}
  1468.                 LoadImageWithImlib(s3,&icltmp1,&desk.icon_pmap,&desk.icon_mask,&desk.icon_width,&desk.icon_height);
  1469.              }
  1470.             }
  1471.            }
  1472.          if(nest_stack[nest_level]==CTXT_DESKTOP)
  1473.            {
  1474.           if (!strcmp(s1,"number"))
  1475.             {
  1476.                done=1;
  1477.                sscanf(s,"%s %i",s1,&num);
  1478.                desknum=num;
  1479.             }
  1480.           if (!strcmp(s1,"level"))
  1481.             {
  1482.                done=1;
  1483.                sscanf(s,"%s %s",s1,s2);
  1484.                if (!strcmp(s2,"above")) di.above=1;
  1485.                else di.above=0;
  1486.             }
  1487.           else if (!strcmp(s1,"backgroundimage"))
  1488.             {
  1489.                done=1;
  1490.                sscanf(s,"%s %i %i %s",s1,&num,&numm,s2);
  1491.                desk.bg_width[desknum]=num;
  1492.                desk.bg_height[desknum]=numm;
  1493.                strcpy(desk.background[desknum],s2);
  1494.             }
  1495.           else if (!strcmp(s1,"root_geom"))
  1496.             {
  1497.                done=1;
  1498.                sscanf(s,"%s %i %i %i %i",s1,&num,&num1,&num2,&num3);
  1499.                di.root_x=num;di.root_y=num1;
  1500.                di.root_width=num2;di.root_height=num3;
  1501.             }
  1502.           else if (!strcmp(s1,"border_geom"))
  1503.             {
  1504.                done=1;
  1505.                sscanf(s,"%s %i %i %i %i",s1,&num,&num1,&num2,&num3);
  1506.                di.x=num;di.y=num1;
  1507.                di.width=num2;di.height=num3;
  1508.             }
  1509.           else if (!strcmp(s1,"image"))
  1510.             {
  1511.                done=1;
  1512.                sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  1513.                if (!strcmp(s2,"selected")) 
  1514.              {
  1515.                 strcpy(stmp1,s3);
  1516.                 if (!strcmp(s5,"on"))
  1517.                   {icltmp1.r=num1;icltmp1.g=num2;icltmp1.b=num3;}
  1518.                 else
  1519.                   {icltmp1.r=-1;icltmp1.g=-1;icltmp1.b=-1;}
  1520.              }
  1521.                else if (!strcmp(s2,"unselected")) 
  1522.              {
  1523.                 strcpy(stmp2,s3);
  1524.                 if (!strcmp(s5,"on"))
  1525.                   {icltmp2.r=num1;icltmp2.g=num2;icltmp2.b=num3;}
  1526.                 else
  1527.                   {icltmp2.r=-1;icltmp2.g=-1;icltmp2.b=-1;}
  1528.              }
  1529.             }
  1530.            }
  1531.          if(nest_stack[nest_level]==CTXT_INFOBOX)
  1532.            {
  1533.           if (!strcmp(s1,"status"))
  1534.             {
  1535.                done=1;
  1536.                sscanf(s,"%s %s",s1,s2);
  1537.                if (!strcmp(s2,"on")) ifb.on=1;
  1538.                else ifb.on=0;
  1539.             }
  1540.           else if (!strcmp(s1,"size"))
  1541.             {
  1542.                done=1;
  1543.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  1544.                ifb.width=num1;
  1545.                ifb.height=num2;
  1546.             }
  1547.           else if (!strcmp(s1,"key_width"))
  1548.             {
  1549.                done=1;
  1550.                sscanf(s,"%s %i",s1,&num);
  1551.                ifb.key_width=num;
  1552.             }
  1553.           else if (!strcmp(s1,"mouse_width"))
  1554.             {
  1555.                done=1;
  1556.                sscanf(s,"%s %i",s1,&num);
  1557.                ifb.mouse_width=num;
  1558.             }
  1559.           else if (!strcmp(s1,"timeout"))
  1560.             {
  1561.                done=1;
  1562.                sscanf(s,"%s %i",s1,&num);
  1563.                ifb.timeout=num;
  1564.             }
  1565.           else if (!strcmp(s1,"image"))
  1566.             {
  1567.                sscanf(s,"%s %s %s %i %i %i",s1,s2,s3,&num1,&num2,&num3);
  1568.                icl.r=num1;
  1569.                icl.g=num2;
  1570.                icl.b=num3;
  1571.                if (!strcmp(s2,"shift"))
  1572.              {
  1573.                 done=1;
  1574.                 LoadImageSizeWithImlib(s3,&icl,&pmap,&mask,ifb.key_width,ifb.height);
  1575.                 ifb.k2_pmap=pmap;
  1576.                 ifb.k2_mask=mask;
  1577.              }
  1578.                if (!strcmp(s2,"ctrl"))
  1579.              {
  1580.                 done=1;
  1581.                 LoadImageSizeWithImlib(s3,&icl,&pmap,&mask,ifb.key_width,ifb.height);
  1582.                 ifb.k3_pmap=pmap;
  1583.                 ifb.k3_mask=mask;
  1584.              }
  1585.                if (!strcmp(s2,"alt"))
  1586.              {
  1587.                 done=1;
  1588.                 LoadImageSizeWithImlib(s3,&icl,&pmap,&mask,ifb.key_width,ifb.height);
  1589.                 ifb.k4_pmap=pmap;
  1590.                 ifb.k4_mask=mask;
  1591.              }
  1592.                if (!strcmp(s2,"mouse1"))
  1593.              {
  1594.                 done=1;
  1595.                 LoadImageSizeWithImlib(s3,&icl,&pmap,&mask,ifb.mouse_width,ifb.height);
  1596.                 ifb.m1_pmap=pmap;
  1597.                 ifb.m1_mask=mask;
  1598.              }
  1599.                if (!strcmp(s2,"mouse2"))
  1600.              {
  1601.                 done=1;
  1602.                 LoadImageSizeWithImlib(s3,&icl,&pmap,&mask,ifb.mouse_width,ifb.height);
  1603.                 ifb.m2_pmap=pmap;
  1604.                 ifb.m2_mask=mask;
  1605.              }
  1606.                if (!strcmp(s2,"mouse3"))
  1607.              {
  1608.                 done=1;
  1609.                 LoadImageSizeWithImlib(s3,&icl,&pmap,&mask,ifb.mouse_width,ifb.height);
  1610.                 ifb.m3_pmap=pmap;
  1611.                 ifb.m3_mask=mask;
  1612.              }
  1613.             }
  1614.            }
  1615.          if(nest_stack[nest_level]==CTXT_KEYBINDING) 
  1616.            {
  1617.           s5[0] = 0;
  1618.           sscanf(s,"%s %s %s %s %s",s1,s2,s3,s4,s5);
  1619.           if (!strcmp(s1,"key"))
  1620.             {
  1621.                done=1;
  1622.                KeyBind_num++;
  1623.           /* read the keybind config in here */
  1624.           /* added 07/21/97 Mandrake (mandrake@mandrake.net) */
  1625.                if (!KeyBind_list) 
  1626.              KeyBind_list=malloc(sizeof(struct KeyBind_list_type));
  1627.                else
  1628.              KeyBind_list=realloc(KeyBind_list,sizeof(struct KeyBind_list_type)*KeyBind_num);
  1629.                
  1630.                KeyBind_list[KeyBind_num-1].keycombo=malloc(strlen(s3)+1);
  1631.                strcpy(KeyBind_list[KeyBind_num-1].keycombo,s3);
  1632.                
  1633.                if (!strcmp(s2,"none"))
  1634.              KeyBind_list[KeyBind_num-1].modifier=0;
  1635.                else if (!strcmp(s2,"shift"))
  1636.              KeyBind_list[KeyBind_num-1].modifier=1;
  1637.                else if (!strcmp(s2,"ctrl"))
  1638.              KeyBind_list[KeyBind_num-1].modifier=2;
  1639.                else if (!strcmp(s2,"alt"))
  1640.              KeyBind_list[KeyBind_num-1].modifier=3;
  1641.                
  1642.                if (!strcmp(s4,"move"))
  1643.              KeyBind_list[KeyBind_num-1].action_type=ACTION_MOVE;
  1644.                else if (!strcmp(s4,"resize"))
  1645.              KeyBind_list[KeyBind_num-1].action_type=ACTION_RESIZE;
  1646.                else if (!strcmp(s4,"iconify"))
  1647.              KeyBind_list[KeyBind_num-1].action_type=ACTION_ICONIFY;
  1648.                else if (!strcmp(s4,"kill"))
  1649.              KeyBind_list[KeyBind_num-1].action_type=ACTION_KILL;
  1650.                else if (!strcmp(s4,"raise"))
  1651.              KeyBind_list[KeyBind_num-1].action_type=ACTION_RAISE;
  1652.                else if (!strcmp(s4,"lower"))
  1653.              KeyBind_list[KeyBind_num-1].action_type=ACTION_LOWER;
  1654.                else if (!strcmp(s4,"raise_lower"))
  1655.              KeyBind_list[KeyBind_num-1].action_type=ACTION_RAISE_LOWER;
  1656.                else if (!strcmp(s4,"max_height"))
  1657.              KeyBind_list[KeyBind_num-1].action_type=ACTION_MAX_HEIGHT;
  1658.                else if (!strcmp(s4,"max_width"))
  1659.              KeyBind_list[KeyBind_num-1].action_type=ACTION_MAX_WIDTH;
  1660.                else if (!strcmp(s4,"max_size"))
  1661.              KeyBind_list[KeyBind_num-1].action_type=ACTION_MAX_SIZE;
  1662.                else if (!strcmp(s4,"configure"))
  1663.              KeyBind_list[KeyBind_num-1].action_type=ACTION_CONFIGURE;
  1664.                else if (!strcmp(s4,"menu"))
  1665.              KeyBind_list[KeyBind_num-1].action_type=ACTION_MENU;
  1666.                else if (!strcmp(s4,"exec"))
  1667.              KeyBind_list[KeyBind_num-1].action_type=ACTION_EXEC;
  1668.                else if (!strcmp(s4,"exit"))
  1669.              KeyBind_list[KeyBind_num-1].action_type=ACTION_EXIT;
  1670.                else if (!strcmp(s4,"kill_nasty"))
  1671.              KeyBind_list[KeyBind_num-1].action_type=ACTION_KILL_NASTY;
  1672.                else if (!strcmp(s4,"restart"))
  1673.              KeyBind_list[KeyBind_num-1].action_type=ACTION_RESTART;
  1674.                else if (!strcmp(s4,"restart_theme"))
  1675.              KeyBind_list[KeyBind_num-1].action_type=ACTION_RESTART_THEME;
  1676.                else if (!strcmp(s4,"background"))
  1677.              KeyBind_list[KeyBind_num-1].action_type=ACTION_BACKGROUND;
  1678.                else if (!strcmp(s4,"desktop"))
  1679.              KeyBind_list[KeyBind_num-1].action_type=ACTION_DESKTOP;
  1680.                else if (!strcmp(s4,"sticky"))
  1681.              KeyBind_list[KeyBind_num-1].action_type=ACTION_STICKY;
  1682.                        else if (!strcmp(s4,"mfocus"))
  1683.              KeyBind_list[KeyBind_num-1].action_type=ACTION_MOUSEFOCUS;
  1684.                        else if (!strcmp(s4,"windowop"))
  1685.              KeyBind_list[KeyBind_num-1].action_type=ACTION_WINDOWOP;
  1686.                else if ((!strcmp(s4,"cycle"))&&(!strcmp(s5,"next")))
  1687.              KeyBind_list[KeyBind_num-1].action_type=ACTION_CYCLE_NEXT;
  1688.                else if ((!strcmp(s4,"cycle"))&&(!strcmp(s5,"previous")))
  1689.              KeyBind_list[KeyBind_num-1].action_type=ACTION_CYCLE_PREV;
  1690.  
  1691.                else if ((!strcmp(s4,"cycle"))&&(!strcmp(s5,"nextdesk")))
  1692.                          KeyBind_list[KeyBind_num-1].action_type=ACTION_NEXT_DESK;
  1693.                        else if ((!strcmp(s4,"cycle"))&&(!strcmp(s5,"previousdesk")))
  1694.                          KeyBind_list[KeyBind_num-1].action_type=ACTION_PREV_DESK;      
  1695.  
  1696.                else if (!strcmp(s4,"none"))
  1697.              KeyBind_list[KeyBind_num-1].action_type=ACTION_NONE;
  1698.                num=KeyBind_list[KeyBind_num-1].action_type;
  1699.                if ((num==ACTION_MENU)||(num==ACTION_EXEC)||
  1700.                (num==ACTION_RESTART_THEME)||(num==ACTION_BACKGROUND)||
  1701.                (num==ACTION_DESKTOP)||(num==ACTION_WINDOWOP))
  1702.              {
  1703.                 KeyBind_list[KeyBind_num-1].execstring=malloc(strlen(s)+1);
  1704.                 strcpy(KeyBind_list[KeyBind_num-1].execstring,strstr(s,s5));
  1705.              }
  1706.                else if (num==ACTION_MOUSEFOCUS) {
  1707.                 if(s5[0]) {
  1708.                         KeyBind_list[KeyBind_num-1].execstring=malloc(strlen(s)+1);
  1709.                         strcpy(KeyBind_list[KeyBind_num-1].execstring,strstr(s,s5));
  1710.                 } else {
  1711.                     KeyBind_list[KeyBind_num-1].execstring=NULL;
  1712.                 }
  1713.              }
  1714.                else
  1715.              KeyBind_list[KeyBind_num-1].execstring=NULL;
  1716.             }
  1717.            }
  1718.          if(nest_stack[nest_level]==CTXT_PREDEF_ICON)
  1719.            {
  1720.           if (!strcmp(s1,"title"))
  1721.             {
  1722.                int ii,jj;
  1723.                int copy;
  1724.                
  1725.                done=1;
  1726.                copy=0;
  1727.                jj=0;
  1728.                pdl.title=malloc(strlen(s));
  1729.                for (ii=0;ii<strlen(s);ii++)
  1730.              {
  1731.                 if (!copy)
  1732.                   {
  1733.                  if (s[ii]=='"') copy=1;
  1734.                   }
  1735.                 else
  1736.                   {
  1737.                  if (s[ii]=='"') copy=0;
  1738.                  else pdl.title[jj++]=s[ii];
  1739.                   }
  1740.              }
  1741.                pdl.title[jj]=0;
  1742.             }
  1743.           if (!strcmp(s1,"image"))
  1744.             {
  1745.                done=1;
  1746.                sscanf(s,"%s %s %s %s %i %i %i",s1,s2,s3,s4,&num1,&num2,&num3);
  1747.                pdl.image_file=malloc(strlen(s2)+1);
  1748.                strcpy(pdl.image_file,s2);
  1749.                if (!strcmp("on",s4))
  1750.              {
  1751.                 pdl.transp=malloc(sizeof(ImColor));
  1752.                 pdl.transp->r=num1;
  1753.                 pdl.transp->g=num2;
  1754.                 pdl.transp->b=num3;
  1755.              }
  1756.                else
  1757.              pdl.transp=NULL;
  1758.             }
  1759.            }
  1760.          if(nest_stack[nest_level]==CTXT_FX)
  1761.            {
  1762.           if (!strcmp(s1,"shadow"))
  1763.             {
  1764.                sscanf(s,"%s %s",s1,s2);
  1765.                if (!strcmp(s2,"state"))
  1766.              {
  1767.                 done=1;
  1768.                 sscanf(s,"%s %s %s",s1,s2,s3);
  1769.                 if (!strcmp(s3,"on")) fx.shadow.on=1;
  1770.              }
  1771.                if (!strcmp(s2,"dist"))
  1772.              {
  1773.                 done=1;
  1774.                 sscanf(s,"%s %s %i %i",s1,s2,&num1,&num2);
  1775.                 fx.shadow.x=num1;
  1776.                 fx.shadow.y=num2;
  1777.              }
  1778.                if (!strcmp(s2,"color"))
  1779.              {
  1780.                 done=1;
  1781.                 sscanf(s,"%s %s %i %i %i",s1,s2,&num1,&num2,&num3);
  1782.                 fx.shadow.r=num1;
  1783.                 fx.shadow.g=num2;
  1784.                 fx.shadow.b=num3;
  1785.              }
  1786.             }
  1787.            }
  1788.          if(nest_stack[nest_level]==CTXT_CURSORS)
  1789.            {
  1790.  
  1791.                sscanf(s,"%s",s2);
  1792.                if (!strcmp(s2,"fg_color"))
  1793.              {
  1794.                 sscanf(s,"%s %i %i %i",s2,&num1,&num2,&num3);
  1795.                 done=1;
  1796.                 ccfg.num_fg_r=num1;
  1797.                 ccfg.num_fg_g=num2;
  1798.                 ccfg.num_fg_b=num3;
  1799.              }
  1800.                else if (!strcmp(s2,"bg_color"))
  1801.              {
  1802.                 sscanf(s,"%s %i %i %i",s2,&num1,&num2,&num3);
  1803.                 done=1;
  1804.                 ccfg.num_bg_r=num1;
  1805.                 ccfg.num_bg_g=num2;
  1806.                 ccfg.num_bg_b=num3;
  1807.              }
  1808.                else if (!strcmp(s2,"font_size"))
  1809.              {
  1810.                 sscanf(s,"%s %i",s2,&num);
  1811.                 ccfg.num_size=num;
  1812.                 done=1;
  1813.              }
  1814.         }
  1815.          if(nest_stack[nest_level]==CTXT_NEWCURSOR)
  1816.         {
  1817.            sscanf(s,"%s",s1);
  1818.            if(!strcmp(s1,"type")) {
  1819.             sscanf(s,"%s %s",s1,s2);
  1820.             done=1;
  1821.                 Cursors_list[Cursors_num-1].cursor_name=malloc(strlen(s2)+1);
  1822.                 strcpy(Cursors_list[Cursors_num-1].cursor_name,s2);
  1823.                 currentcursor++;
  1824.            }
  1825.            else if(!strcmp(s1,"fg_color")) {
  1826.             sscanf(s,"%s %i %i %i",s2,&num1,&num2,&num3);
  1827.             done=1;
  1828.             Cursors_list[currentcursor-1].root_fg_r=num1;
  1829.             Cursors_list[currentcursor-1].root_fg_g=num2;
  1830.             Cursors_list[currentcursor-1].root_fg_b=num3;
  1831.            } else if (!strcmp(s1,"bg_color")) {
  1832.             sscanf(s,"%s %i %i %i",s2,&num1,&num2,&num3);
  1833.             done=1;
  1834.             Cursors_list[currentcursor-1].root_bg_r=num1;
  1835.             Cursors_list[currentcursor-1].root_bg_g=num2;
  1836.             Cursors_list[currentcursor-1].root_bg_b=num3;
  1837.            } else if(!strcmp(s1,"pixmap")) {
  1838.             sscanf(s,"%s %s",s2,s1);
  1839.             done=1;
  1840.             Cursors_list[currentcursor-1].root_pix=malloc(strlen(s1)+1);
  1841.             strcpy(Cursors_list[currentcursor-1].root_pix,s1);
  1842.            } else if(!strcmp(s1,"mask")) {
  1843.             sscanf(s,"%s %s",s2,s1);
  1844.             done=1;
  1845.             Cursors_list[currentcursor-1].root_mask=malloc(strlen(s1)+1);
  1846.             strcpy(Cursors_list[currentcursor-1].root_mask,s1);
  1847.            }
  1848.            }
  1849.          if(nest_stack[nest_level]==CTXT_TEXT)
  1850.            {
  1851.           if (!strcmp(s1,"fontface"))
  1852.             {
  1853.                done=1;
  1854.                sscanf(s,"%s %s",s1,s2);
  1855.                cfg.font=malloc(sizeof(char)*(strlen(s2)+1));
  1856.                strcpy(cfg.font,s2);
  1857.             }
  1858.           else if (!strcmp(s1,"style"))
  1859.             {
  1860.                done=1;
  1861.                sscanf(s,"%s %s",s1,s2);
  1862.                if (!strcmp(s2,"bold")) cfg.font_style|=BOLD;
  1863.                if (!strcmp(s2,"italic")) cfg.font_style|=ITALIC;
  1864.             }
  1865.           else if (!strcmp(s1,"appearance"))
  1866.             {
  1867.                done=1;
  1868.                sscanf(s,"%s %s",s1,s2);
  1869.                if (!strcmp(s2,"plain")) ;
  1870.                if (!strcmp(s2,"outline")) cfg.font_style|=OUTLINE;
  1871.                if (!strcmp(s2,"shadow")) cfg.font_style|=SHADOW;
  1872.             }
  1873.           else if (!strcmp(s1,"justification"))
  1874.             {
  1875.                done=1;
  1876.                sscanf(s,"%s %s",s1,s2);
  1877.                if (!strcmp(s2,"left")) ;
  1878.                if (!strcmp(s2,"center")) cfg.font_style|=J_CENTER;
  1879.                if (!strcmp(s2,"right")) cfg.font_style|=J_RIGHT;
  1880.             }
  1881.           else if (!strcmp(s1,"foreground"))
  1882.             {
  1883.                done=1;
  1884.                sscanf(s,"%s %i %i %i",s1,&num1,&num2,&num3);
  1885.                cfg.font_fg=ImlibBestColorMatch(imd,&num1,&num2,&num3);
  1886.             }
  1887.           else if (!strcmp(s1,"background"))
  1888.             {
  1889.                done=1;
  1890.                sscanf(s,"%s %i %i %i",s1,&num1,&num2,&num3);
  1891.                cfg.font_bg=ImlibBestColorMatch(imd,&num1,&num2,&num3);
  1892.             }
  1893.            }
  1894.          if(nest_stack[nest_level]==CTXT_STATUS)
  1895.            {
  1896.           if (!strcmp(s1,"icons"))
  1897.             {
  1898.                done=1;
  1899.                sscanf(s,"%s %s",s1,s2);
  1900.                if (!strcmp(s2,"background"))
  1901.              {
  1902.                 sscanf(s,"%s %s %i %i %i %i %s %s %s %i %i %i",s1,s1,&num1,&num2,&num3,&num4,s2,s3,s4,&r,&g,&b);
  1903.                 scfg.icons_x=num1;
  1904.                 scfg.icons_y=num2;
  1905.                 scfg.icons_w=num3;
  1906.                 scfg.icons_h=num4;
  1907.                 scfg.icons_bg=malloc(strlen(s2)+1);
  1908.                 strcpy(scfg.icons_bg,s2);
  1909.                 if (!strcmp(s4,"off")) scfg.icons_icl=NULL;
  1910.                 else
  1911.                   {
  1912.                  scfg.icons_icl=malloc(sizeof(ImColor));
  1913.                  scfg.icons_icl->r=r;
  1914.                  scfg.icons_icl->g=g;
  1915.                  scfg.icons_icl->b=b;
  1916.                   }
  1917.              }
  1918.                else if (!strcmp(s2,"box"))
  1919.              {
  1920.                 sscanf(s,"%s %s %i %i %i %i %s %s %s %i %i %i",s1,s1,&num1,&num2,&num3,&num4,s2,s3,s4,&r,&g,&b);
  1921.                 scfg.iconsbox_x=num1;
  1922.                 scfg.iconsbox_y=num2;
  1923.                 scfg.iconsbox_w=num3;
  1924.                 scfg.iconsbox_h=num4;
  1925.                 scfg.iconsbox_bg=malloc(strlen(s2)+1);
  1926.                 strcpy(scfg.iconsbox_bg,s2);
  1927.                 if (!strcmp(s4,"off")) scfg.iconsbox_icl=NULL;
  1928.                 else
  1929.                   {
  1930.                  scfg.iconsbox_icl=malloc(sizeof(ImColor));
  1931.                  scfg.iconsbox_icl->r=r;
  1932.                  scfg.iconsbox_icl->g=g;
  1933.                  scfg.iconsbox_icl->b=b;
  1934.                   }
  1935.              }
  1936.             }
  1937.           else if (!strcmp(s1,"text"))
  1938.             {
  1939.                done=1;
  1940.                sscanf(s,"%s %s",s1,s2);
  1941.                if (!strcmp(s2,"background"))
  1942.              {
  1943.                 sscanf(s,"%s %s %i %i %i %i %s %s %s %i %i %i",s1,s1,&num1,&num2,&num3,&num4,s2,s3,s4,&r,&g,&b);
  1944.                 scfg.text_x=num1;
  1945.                 scfg.text_y=num2;
  1946.                 scfg.text_w=num3;
  1947.                 scfg.text_h=num4;
  1948.                 scfg.text_bg=malloc(strlen(s2)+1);
  1949.                 strcpy(scfg.text_bg,s2);
  1950.                 if (!strcmp(s4,"off")) scfg.text_icl=NULL;
  1951.                 else
  1952.                   {
  1953.                  scfg.text_icl=malloc(sizeof(ImColor));
  1954.                  scfg.text_icl->r=r;
  1955.                  scfg.text_icl->g=g;
  1956.                  scfg.text_icl->b=b;
  1957.                   }
  1958.              }
  1959.                else if (!strcmp(s2,"box"))
  1960.              {
  1961.                 sscanf(s,"%s %s %i %i %i %i %s %s %s %i %i %i",s1,s1,&num1,&num2,&num3,&num4,s2,s3,s4,&r,&g,&b);
  1962.                 scfg.textbox_x=num1;
  1963.                 scfg.textbox_y=num2;
  1964.                 scfg.textbox_w=num3;
  1965.                 scfg.textbox_h=num4;
  1966.                 scfg.textbox_bg=malloc(strlen(s2)+1);
  1967.                 strcpy(scfg.textbox_bg,s2);
  1968.                 if (!strcmp(s4,"off")) scfg.textbox_icl=NULL;
  1969.                 else
  1970.                   {
  1971.                  scfg.textbox_icl=malloc(sizeof(ImColor));
  1972.                  scfg.textbox_icl->r=r;
  1973.                  scfg.textbox_icl->g=g;
  1974.                  scfg.textbox_icl->b=b;
  1975.                   }
  1976.              }
  1977.             }
  1978.            }
  1979.          if(nest_stack[nest_level]==CTXT_MENU)
  1980.            {
  1981.           if (!strcmp(s1,"name"))
  1982.             {
  1983.                done=1;
  1984.                sscanf(s,"%s %s",s1,s2);
  1985.                strncpy(mm.name,s2,255);
  1986.             }
  1987.           else if (!strcmp(s1,"type"))
  1988.             {
  1989.                sscanf(s,"%s %s",s1,s2);
  1990.                if (!strcmp(s2,"custom"))
  1991.              {
  1992.                 done=1;
  1993.                 mm.type=MENU_CUSTOM;
  1994.              }
  1995.                       else if (!strcmp(s2,"windowlist"))
  1996.                         {
  1997.                            done=1;
  1998.                            mm.type=MENU_WINDOWLIST;
  1999.                         }
  2000.                       else
  2001.                       {
  2002.                           sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s.\nAllowed: [%s]\n Assuming %s.\n",
  2003.                                   file,line,s,
  2004.                                    "menu type ",
  2005.                                    "custom,windowlist",
  2006.                                    "custom");Alert(ss);
  2007.                            done=1;
  2008.                            mm.type=MENU_CUSTOM;
  2009.                       }
  2010.             }
  2011.           else if (!strcmp(s1,"dimensions"))
  2012.             {
  2013.                done=1;
  2014.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  2015.                mm.width=num1;
  2016.                mm.height=num2;
  2017.             }
  2018.           else if (!strcmp(s1,"popupdist"))
  2019.             {
  2020.                done=1;
  2021.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  2022.                mm.popup_x=num1;
  2023.                mm.popup_y=num2;
  2024.             }
  2025.           else if (!strcmp(s1,"items"))
  2026.             {
  2027.                done=1;
  2028.                sscanf(s,"%s %i",s1,&num);
  2029.                menu=CreateMenu(mm.name,mm.type,num);
  2030.                menu->width=mm.width;
  2031.                menu->height=mm.height;
  2032.                menu->popup_x=mm.popup_x;
  2033.                menu->popup_y=mm.popup_y;
  2034.  
  2035.             /* copy the item defaults */
  2036.             menu->item_x = mm.item_x;
  2037.             menu->item_y = mm.item_y;
  2038.                        menu->item_w = mm.item_w;
  2039.                        menu->item_h = mm.item_h;
  2040.                        menu->itemtext_x = mm.itemtext_x;
  2041.                        menu->itemtext_y = mm.itemtext_y;
  2042.                        menu->itemtext_w = mm.itemtext_w;
  2043.                        menu->itemtext_h = mm.itemtext_h;
  2044.                        menu->itemdelta_x = mm.itemdelta_x;
  2045.                        menu->itemdelta_y = mm.itemdelta_y;
  2046.                        menu->item_unsel = mm.item_unsel;
  2047.                        menu->item_sel = mm.item_sel;
  2048.                        menu->item_unsel_icl = mm.item_unsel_icl;
  2049.                        menu->item_sel_icl = mm.item_sel_icl;
  2050.  
  2051.             /* added 07/24/97 by Troy Pesola (trp@cyberoptics.com) */
  2052.             /* initialize the number of static items */
  2053.             menu->static_num_items = 0;
  2054.             menu->static_items=NULL;
  2055.                     }
  2056.                   else if (!strcmp(s1,"itemsize"))
  2057.                     {                                            
  2058.                        done=1;
  2059.                        sscanf(s,"%s %i %i",s1,&num1,&num2);
  2060.                        mm.item_w=num1;
  2061.                        mm.item_h=num2;
  2062.                     }
  2063.                   else if (!strcmp(s1,"itemdelta"))
  2064.                     {
  2065.                        done=1;
  2066.                        sscanf(s,"%s %i %i",s1,&num1,&num2);
  2067.                        mm.itemdelta_x=num1;
  2068.                        mm.itemdelta_y=num2;
  2069.                     }
  2070.                   else if (!strcmp(s1,"itemtextlocation"))
  2071.                     {
  2072.                        done=1;
  2073.                        sscanf(s,"%s %i %i",s1,&num1,&num2);
  2074.                        mm.itemtext_x=num1;
  2075.                        mm.itemtext_y=num2;
  2076.                     }
  2077.                   else if (!strcmp(s1,"itemtextsize"))
  2078.                     {
  2079.                        done=1;
  2080.                        sscanf(s,"%s %i %i",s1,&num1,&num2);
  2081.                        mm.itemtext_w=num1;
  2082.                        mm.itemtext_h=num2;
  2083.                     }
  2084.                   else if (!strcmp(s1,"itemimage"))
  2085.                     {
  2086.                        done=1;
  2087.                        s1[0]=0;s2[0]=0;s3[0]=0;s4[0]=0;s5[0]=0;
  2088.                        sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  2089.                        if ((s1[0])&&(s2[0])&&(s3[0])&&(s4[0])&&(s5[0]))
  2090.                          {
  2091.                             if (!strcmp(s2,"unselected"))
  2092.                               {
  2093.                                  if (!mm.item_unsel) mm.item_unsel=malloc(4096);
  2094.                                  strcpy(mm.item_unsel,s3);
  2095.                                  if (!strcmp(s5,"on"))
  2096.                                    {
  2097.                                       mm.item_unsel_icl.r=num1;
  2098.                                       mm.item_unsel_icl.g=num2;
  2099.                                       mm.item_unsel_icl.b=num3;
  2100.                                    }
  2101.                                  else
  2102.                                    {
  2103.                                       mm.item_unsel_icl.r=-1;
  2104.                                       mm.item_unsel_icl.g=-1;
  2105.                          mm.item_unsel_icl.b=-1;
  2106.                                    }
  2107.                               }
  2108.                             else if (!strcmp(s2,"selected"))
  2109.                               {
  2110.                                  if (!mm.item_sel) mm.item_sel=malloc(4096);
  2111.                                  strcpy(mm.item_sel,s3);
  2112.                                  if (!strcmp(s5,"on"))
  2113.                                    {
  2114.                                       mm.item_sel_icl.r=num1;
  2115.                                       mm.item_sel_icl.g=num2;
  2116.                                       mm.item_sel_icl.b=num3;
  2117.                                    }
  2118.                                  else
  2119.                                    {
  2120.                                       mm.item_sel_icl.r=-1;
  2121.                                       mm.item_sel_icl.g=-1;
  2122.                                       mm.item_sel_icl.b=-1;
  2123.                                    }
  2124.                               }
  2125.                          }
  2126.                     }
  2127.                }  
  2128.          if(nest_stack[nest_level]==CTXT_MENUITEM)
  2129.            {
  2130.           if (!strcmp(s1,"text"))
  2131.             {
  2132.                done=1;
  2133.                s2[0]=0;
  2134.                sscanf(s,"%s %s",s1,s2);
  2135.                if (s2[0])
  2136.              {
  2137.                 mmi.text=malloc(strlen(s)+1);
  2138.                 strcpy(mmi.text,strstr(s,s2));
  2139.              }
  2140.             }
  2141.           else if (!strcmp(s1,"type"))
  2142.             {
  2143.                sscanf(s,"%s %s",s1,s2);
  2144.                if (!strcmp(s2,"decor")) 
  2145.              {
  2146.                 done=1;
  2147.                 mmi.type=DECOR;
  2148.              }
  2149.                else if (!strcmp(s2,"element")) 
  2150.              {
  2151.                 done=1;
  2152.                 mmi.type=ELEMENT;
  2153.              }
  2154.             }
  2155.           else if (!strcmp(s1,"location"))
  2156.             {
  2157.                done=1;
  2158.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  2159.                mmi.x=num1;
  2160.                mmi.y=num2;
  2161.             }
  2162.           else if (!strcmp(s1,"size"))
  2163.             {
  2164.                done=1;
  2165.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  2166.                mmi.width=num1;
  2167.                mmi.height=num2;
  2168.             }
  2169.           else if (!strcmp(s1,"text_location"))
  2170.             {
  2171.                done=1;
  2172.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  2173.                tx_x=num1;
  2174.                tx_y=num2;
  2175.             }
  2176.           else if (!strcmp(s1,"text_size"))
  2177.             {
  2178.                done=1;
  2179.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  2180.                tx_w=num1;
  2181.                tx_h=num2;
  2182.             }
  2183.           else if (!strcmp(s1,"image"))
  2184.             {
  2185.                done=1;
  2186.                s1[0]=0;s2[0]=0;s3[0]=0;s4[0]=0;s5[0]=0;
  2187.                sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  2188.                if ((s1[0])&&(s2[0])&&(s3[0])&&(s4[0])&&(s5[0]))
  2189.              {
  2190.                 if (!strcmp(s2,"unselected"))
  2191.                   {
  2192.                  strcpy(m_unsel,s3);
  2193.                  if (!strcmp(s5,"on"))
  2194.                    {
  2195.                       m_unsel_icl.r=num1;
  2196.                       m_unsel_icl.g=num2;
  2197.                       m_unsel_icl.b=num3;
  2198.                    }
  2199.                  else
  2200.                    {
  2201.                       m_unsel_icl.r=-1;
  2202.                       m_unsel_icl.g=-1;
  2203.                       m_unsel_icl.b=-1;
  2204.                    }
  2205.                   }
  2206.                 else if (!strcmp(s2,"selected"))
  2207.                   {
  2208.                  strcpy(m_sel,s3);
  2209.                  if (!strcmp(s5,"on"))
  2210.                    {
  2211.                       m_sel_icl.r=num1;
  2212.                       m_sel_icl.g=num2;
  2213.                       m_sel_icl.b=num3;
  2214.                    }
  2215.                  else
  2216.                    {
  2217.                       m_sel_icl.r=-1;
  2218.                       m_sel_icl.g=-1;
  2219.                       m_sel_icl.b=-1;
  2220.                    }
  2221.                   }
  2222.              }
  2223.             }
  2224.           else if (!strcmp(s1,"action"))
  2225.             {
  2226.                done=1;
  2227.                mi=CreateMenuItem(mmi.type,mmi.x,mmi.y,mmi.width,
  2228.                      mmi.height,mmi.text,tx_x,tx_y,
  2229.                      tx_w,tx_h,m_unsel,&m_unsel_icl,
  2230.                      m_sel,&m_sel_icl);
  2231.                if (mmi.text) 
  2232.              {
  2233.                 free(mmi.text);
  2234.                 mmi.text=NULL;
  2235.              }
  2236.                s3[0] = 0;
  2237.                sscanf(s,"%s %s %s",s1,s2,s3);
  2238.                if (!strcmp(s2,"configure")) 
  2239.              {
  2240.                 mi->action.id=ACTION_CONFIGURE;
  2241.              }
  2242.                else if (!strcmp(s2,"menu")) 
  2243.              {
  2244.                 mi->action.id=ACTION_MENU;
  2245.                 strcpy(mi->action.params,s3);
  2246.              }
  2247.                else if (!strcmp(s2,"windowop")) 
  2248.              {
  2249.                 mi->action.id=ACTION_WINDOWOP;
  2250.                 strcpy(mi->action.params,s3);
  2251.              }
  2252.                else if (!strcmp(s2,"mfocus"))
  2253.              {
  2254.                 mi->action.id=ACTION_MOUSEFOCUS;
  2255.                 if(s3[0]) strcpy(mi->action.params,s3);
  2256.              }
  2257.                else if (!strcmp(s2,"exec")) 
  2258.              {
  2259.                 mi->action.id=ACTION_EXEC;
  2260.                 strcpy(mi->action.params,strstr(s,s3));
  2261.              }
  2262.                else if (!strcmp(s2,"exit")) 
  2263.              {
  2264.                 mi->action.id=ACTION_EXIT;
  2265.              }
  2266.                else if (!strcmp(s2,"restart")) 
  2267.              {
  2268.                 mi->action.id=ACTION_RESTART;
  2269.              }
  2270.                else if (!strcmp(s2,"restart_theme")) 
  2271.              {
  2272.                 strcpy(mi->action.params,strstr(s,s3));
  2273.                 mi->action.id=ACTION_RESTART_THEME;
  2274.              }
  2275.                else if (!strcmp(s2,"background")) 
  2276.              {
  2277.                 strcpy(mi->action.params,strstr(s,s3));
  2278.                 mi->action.id=ACTION_BACKGROUND;
  2279.              }
  2280.                else if (!strcmp(s2,"desktop")) 
  2281.              {
  2282.                 strcpy(mi->action.params,s3);
  2283.                 mi->action.id=ACTION_DESKTOP;
  2284.              }
  2285.                else if (!strcmp(s2,"none")) 
  2286.              {
  2287.                 mi->action.id=ACTION_NONE;
  2288.              }
  2289.             }
  2290.            }
  2291.          if(nest_stack[nest_level]==CTXT_BUTTONS)
  2292.            {
  2293.            }
  2294.          if(nest_stack[nest_level]==CTXT_BUTTON)
  2295.            {
  2296.           if (!strcmp(s1,"location"))
  2297.             {
  2298.                done=1;
  2299.                sscanf(s,"%s %s %i %i",s1,s2,&num,&numm);
  2300.                if (!strcmp(s2,"topleft"))
  2301.              bwin->win=CreateBasicWin(root,num,numm,b_maxw,b_maxh);
  2302.                else if (!strcmp(s2,"topright"))
  2303.              bwin->win=CreateBasicWin(root,(DisplayWidth(disp,screen)-b_maxw)-num,numm,
  2304.                                b_maxw,b_maxh);
  2305.                else if (!strcmp(s2,"bottomleft"))
  2306.              bwin->win=CreateBasicWin(root,num,(DisplayHeight(disp,screen)-b_maxh)-numm,
  2307.                                b_maxw,b_maxh);
  2308.                else if (!strcmp(s2,"bottomright"))
  2309.              bwin->win=CreateBasicWin(root,(DisplayWidth(disp,screen)-b_maxw)-num,(DisplayHeight(disp,screen)-b_maxh)-numm,
  2310.                                b_maxw,b_maxh);
  2311.                else
  2312.              {
  2313.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2314.                     "button location",s2,
  2315.                     "topleft,topright,bottomleft,bottomright",
  2316.                     "topleft");Alert(ss);
  2317.                 bwin->win=CreateBasicWin(root,num,numm,b_maxw,b_maxh);
  2318.              }
  2319.                XSelectInput(disp,bwin->win,LeaveWindowMask|
  2320.                     EnterWindowMask|SubstructureNotifyMask|
  2321.                     PropertyChangeMask|SubstructureRedirectMask);
  2322.                bwin->state=BTN_NORM;
  2323.                ButtonDraw(bwin);
  2324.             }
  2325.           else if (!strcmp(s1,"image"))
  2326.             {
  2327.                done=1;
  2328.                sscanf(s,"%s %s",s1,s2);
  2329.                if (!strcmp(s2,"clicked")) 
  2330.              {
  2331.                 sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  2332.                 if (!strcmp(s4,"shapecolor"))
  2333.                   {
  2334.                  if (!strcmp(s5,"on"))
  2335.                    {icl.r=num1;icl.g=num2;icl.b=num3;}
  2336.                  else if (!strcmp(s5,"off"))
  2337.                    {icl.r=-1;icl.g=-1;icl.b=-1;}
  2338.                  else
  2339.                    {
  2340.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2341.                           "image shapecolor",s5,
  2342.                           "on,off",
  2343.                           "off");Alert(ss);
  2344.                       icl.r=-1;icl.g=-1;icl.b=-1;
  2345.                    }
  2346.                   }
  2347.                 else
  2348.                   {
  2349.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2350.                      "image",s4,
  2351.                      "shapecolor",
  2352.                      "shapecolor off");Alert(ss);
  2353.                  icl.r=-1;icl.g=-1;icl.b=-1;
  2354.                   }
  2355.                 im=LoadImage(imd,s3,&icl);
  2356.                 if (!im) 
  2357.                   {
  2358.                  sprintf(ss,"PANIC!\nERROR.........\nCannot Load image:\n%s\nQuitting..\n",s3
  2359.                      );Alert(ss);
  2360.                  EExit(1);
  2361.                   }
  2362.                 ImlibRender(imd,im,im->rgb_width,im->rgb_height);
  2363.                 bwin->click_pmap=ImlibMoveImageToPixmap(imd,im);
  2364.                 bwin->click_mask=ImlibMoveMaskToPixmap(imd,im);
  2365.                 if (im->rgb_width>b_maxw) b_maxw=im->rgb_width;
  2366.                 if (im->rgb_height>b_maxh) b_maxh=im->rgb_height;
  2367.                 ImlibDestroyImage(imd,im);
  2368.              }
  2369.                else if (!strcmp(s2,"selected")) 
  2370.              {
  2371.                 sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  2372.                 if (!strcmp(s4,"shapecolor"))
  2373.                   {
  2374.                  if (!strcmp(s5,"on"))
  2375.                    {icl.r=num1;icl.g=num2;icl.b=num3;}
  2376.                  else if (!strcmp(s5,"off"))
  2377.                    {icl.r=-1;icl.g=-1;icl.b=-1;}
  2378.                  else
  2379.                    {
  2380.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2381.                           "image shapecolor",s5,
  2382.                           "on,off",
  2383.                           "off");Alert(ss);
  2384.                       icl.r=-1;icl.g=-1;icl.b=-1;
  2385.                    }
  2386.                   }
  2387.                 else
  2388.                   {
  2389.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2390.                      "image",s4,
  2391.                      "shapecolor",
  2392.                      "shapecolor off");Alert(ss);
  2393.                  icl.r=-1;icl.g=-1;icl.b=-1;
  2394.                   }
  2395.                 im=LoadImage(imd,s3,&icl);
  2396.                 if (!im) 
  2397.                   {
  2398.                  sprintf(ss,"PANIC!\nERROR.........\nCannot Load image:\n%s\nQuitting..\n",s3
  2399.                      );Alert(ss);
  2400.                  EExit(1);
  2401.                   }
  2402.                 ImlibRender(imd,im,im->rgb_width,im->rgb_height);
  2403.                 bwin->sel_pmap=ImlibMoveImageToPixmap(imd,im);
  2404.                 bwin->sel_mask=ImlibMoveMaskToPixmap(imd,im);
  2405.                 if (im->rgb_width>b_maxw) b_maxw=im->rgb_width;
  2406.                 if (im->rgb_height>b_maxh) b_maxh=im->rgb_height;
  2407.                 ImlibDestroyImage(imd,im);
  2408.              }
  2409.                else if (!strcmp(s2,"unselected")) 
  2410.              {
  2411.                 sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  2412.                 if (!strcmp(s4,"shapecolor"))
  2413.                   {
  2414.                  if (!strcmp(s5,"on"))
  2415.                    {icl.r=num1;icl.g=num2;icl.b=num3;}
  2416.                  else if (!strcmp(s5,"off"))
  2417.                    {icl.r=-1;icl.g=-1;icl.b=-1;}
  2418.                  else
  2419.                    {
  2420.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2421.                           "image shapecolor",s5,
  2422.                           "on,off",
  2423.                           "off");Alert(ss);
  2424.                       icl.r=-1;icl.g=-1;icl.b=-1;
  2425.                    }
  2426.                   }
  2427.                 else
  2428.                   {
  2429.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2430.                      "image",s4,
  2431.                      "shapecolor",
  2432.                      "shapecolor off");Alert(ss);
  2433.                  icl.r=-1;icl.g=-1;icl.b=-1;
  2434.                   }
  2435.                 im=LoadImage(imd,s3,&icl);
  2436.                 if (!im) 
  2437.                   {
  2438.                  sprintf(ss,"PANIC!\nERROR.........\nCannot Load image:\n%s\nQuitting..\n",s3
  2439.                      );Alert(ss);
  2440.                  EExit(1);
  2441.                   }
  2442.                 ImlibRender(imd,im,im->rgb_width,im->rgb_height);
  2443.                 bwin->unsel_pmap=ImlibMoveImageToPixmap(imd,im);
  2444.                 bwin->unsel_mask=ImlibMoveMaskToPixmap(imd,im);
  2445.                 if (im->rgb_width>b_maxw) b_maxw=im->rgb_width;
  2446.                 if (im->rgb_height>b_maxh) b_maxh=im->rgb_height;
  2447.                 ImlibDestroyImage(imd,im);
  2448.              }
  2449.                else 
  2450.              {
  2451.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2452.                     "image detail",s2,
  2453.                     "clicked,selected,unselected",
  2454.                     "NOTHING");Alert(ss);
  2455.              }
  2456.             }
  2457.           else if (!strcmp(s1,"level"))
  2458.             {
  2459.                done=1;
  2460.                sscanf(s,"%s %s",s1,s2);
  2461.                if (!strcmp(s2,"above")) bwin->above=1;
  2462.                else if (!strcmp(s2,"below")) bwin->above=0;
  2463.                else 
  2464.              {
  2465.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2466.                     "level",s2,
  2467.                     "above,below",
  2468.                     "below");Alert(ss);
  2469.                 bwin->above=0;
  2470.              }
  2471.             }
  2472.           else if (!strcmp(s1,"action"))
  2473.             {
  2474.                done=1;
  2475.                s4[0] = 0;
  2476.                sscanf(s,"%s %s %i %s %s",s1,s2,&num,s3,s4);
  2477.                if ((num>0)&&(num<4))
  2478.              {
  2479.                 if (!strcmp(s2,"none")) 
  2480.                   {
  2481.                  numm=0;
  2482.                   }
  2483.                 else if (!strcmp(s2,"shift")) 
  2484.                   {
  2485.                  numm=1;
  2486.                   }
  2487.                 else if (!strcmp(s2,"ctrl")) 
  2488.                   {
  2489.                  numm=2;
  2490.                   }
  2491.                 else if (!strcmp(s2,"alt")) 
  2492.                   {
  2493.                  numm=3;
  2494.                   }
  2495.                 else 
  2496.                   {
  2497.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2498.                      "action modifier",s2,
  2499.                      "none,shift,ctrl,alt",
  2500.                      "none");Alert(ss);
  2501.                  numm=0;
  2502.                   }
  2503.                 if (!strcmp(s3,"configure")) 
  2504.                   {
  2505.                  bwin->action[num-1][numm].id=ACTION_CONFIGURE;
  2506.                   }
  2507.                 else if (!strcmp(s3,"menu")) 
  2508.                   {
  2509.                  bwin->action[num-1][numm].id=ACTION_MENU;
  2510.                  strcpy(bwin->action[num-1][numm].params,s4);
  2511.                   }
  2512.                 else if (!strcmp(s3,"exec")) 
  2513.                   {
  2514.                  bwin->action[num-1][numm].id=ACTION_EXEC;
  2515.                  strcpy(bwin->action[num-1][numm].params,strstr(s,s4));
  2516.                   }
  2517.                 else if (!strcmp(s3,"windowop")) 
  2518.                   {
  2519.                  bwin->action[num-1][numm].id=ACTION_WINDOWOP;
  2520.                  strcpy(bwin->action[num-1][numm].params,strstr(s,s4));
  2521.                   }
  2522.                 else if (!strcmp(s3,"mfocus"))
  2523.                   {
  2524.                      bwin->action[num-1][numm].id=ACTION_MOUSEFOCUS;
  2525.                  if (s4[0]) strcpy(bwin->action[num-1][numm].params,strstr(s,s4));
  2526.                   }
  2527.                 else if (!strcmp(s3,"exit")) 
  2528.                   {
  2529.                  bwin->action[num-1][numm].id=ACTION_EXIT;
  2530.                   }
  2531.                 else if (!strcmp(s3,"restart")) 
  2532.                   {
  2533.                  bwin->action[num-1][numm].id=ACTION_RESTART;
  2534.                   }
  2535.                 else if (!strcmp(s3,"restart_theme")) 
  2536.                   {
  2537.                  strcpy(bwin->action[num-1][numm].params,strstr(s,s4));
  2538.                  bwin->action[num-1][numm].id=ACTION_RESTART_THEME;
  2539.                   }
  2540.                 else if (!strcmp(s3,"background")) 
  2541.                   {
  2542.                  strcpy(bwin->action[num-1][numm].params,strstr(s,s4));
  2543.                  bwin->action[num-1][numm].id=ACTION_BACKGROUND;
  2544.                   }
  2545.                 else if (!strcmp(s3,"desktop")) 
  2546.                   {
  2547.                  strcpy(bwin->action[num-1][numm].params,s4);
  2548.                  bwin->action[num-1][numm].id=ACTION_DESKTOP;
  2549.                   }
  2550.                 else if (!strcmp(s3,"none")) 
  2551.                   {
  2552.                  bwin->action[num-1][numm].id=ACTION_NONE;
  2553.                   }
  2554.                 else
  2555.                   {
  2556.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2557.                      "action",s3,
  2558.                      "configure,menu,exec,restart,none",
  2559.                      "none");Alert(ss);
  2560.                   }
  2561.              }
  2562.                else
  2563.              {
  2564.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2565.                     "action button ","!",
  2566.                     "1,2,3",
  2567.                     "NOTHING");Alert(ss);
  2568.              }
  2569.             }
  2570.            }
  2571.          }
  2572.       }
  2573.     if (!done)
  2574.       {
  2575.          sprintf(ss,"SYNTAX ERROR!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2576.              "Unrecognised Keyword",s1,
  2577.              "Nothing Else",
  2578.              "corrupt config file");Alert(ss);
  2579.          EExit(1);
  2580.       }
  2581.     done=0;
  2582.      }
  2583.    if (nest_level>0)
  2584.      {
  2585.     sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\nPremature EOF.\n Section begun wiht begin not terminated with end.\n",file,line
  2586.         );Alert(ss);
  2587.      }
  2588.    fclose(f);
  2589.    for (i=0;i<cfg.num_subwins;i++)
  2590.      {
  2591.     cfg.subwin_img_clk[i]=LoadImage(imd,cfg.subwin_pmname_clk[i],&cfg.subwin_transp_clk[i]);
  2592.     if (!cfg.subwin_img_clk[i]) 
  2593.       {
  2594.          sprintf(ss,"PANIC!\nERROR.........\nCannot Load image:\n%s\nQuitting..\n",cfg.subwin_pmname_clk[i]
  2595.              );Alert(ss);
  2596.          EExit(1);
  2597.       }
  2598.     cfg.subwin_img_sel[i]=LoadImage(imd,cfg.subwin_pmname_sel[i],&cfg.subwin_transp_sel[i]);
  2599.     if (!cfg.subwin_img_sel[i]) 
  2600.       {
  2601.          sprintf(ss,"PANIC!\nERROR.........\nCannot Load image:\n%s\nQuitting..\n",cfg.subwin_pmname_sel[i]
  2602.              );Alert(ss);
  2603.          EExit(1);
  2604.       }
  2605.     cfg.subwin_img_uns[i]=LoadImage(imd,cfg.subwin_pmname_uns[i],&cfg.subwin_transp_uns[i]);
  2606.     if (!cfg.subwin_img_uns[i]) 
  2607.       {
  2608.          sprintf(ss,"PANIC!\nERROR.........\nCannot Load image:\n%s\nQuitting..\n",cfg.subwin_pmname_uns[i]
  2609.              );Alert(ss);
  2610.          EExit(1);
  2611.       }
  2612.      }
  2613. }
  2614.  
  2615.