home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Enlightenment / enl_DR-0.10.tar.gz / enl_DR-0.10.tar / enl / loadcfg.c < prev    next >
C/C++ Source or Header  |  1997-06-24  |  59KB  |  2,065 lines

  1. #include "enlightenment.h"
  2.  
  3. void subvars(char *s)
  4. {
  5.    char *var;
  6.    char ss[10240];
  7.    char s2[2];
  8.    char name[1024];
  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])) name[j++]=s[i++];
  29.          name[j]=0;
  30.          var=getenv(name);
  31.          strcat(ss,var);
  32.       }
  33.     else
  34.       {
  35.          s2[0]=s[i];
  36.          strcat(ss,s2);
  37.          i++;
  38.       }
  39.      }
  40.    ss[i]=0;
  41.    strcpy(s,ss);
  42. }
  43.  
  44. void InitConfig()
  45. {
  46.    int i,j,k;
  47.    
  48.    for(k=0;k<64;k++)
  49.      {
  50.     for(j=0;j<3;j++)
  51.       {
  52.          for(i=0;i<4;i++)
  53.            {
  54.           cfg.subwin_action[k][j][i].id=0;
  55.           cfg.subwin_action[k][j][i].params[0]=0;
  56.            }
  57.       }
  58.      }
  59.    cfg.shape_mode=0;
  60.    cfg.move_mode=0;
  61.    cfg.resize_mode=0;
  62.    cfg.border_l=0;
  63.    cfg.border_r=0;
  64.    cfg.border_t=0;
  65.    cfg.border_b=0;
  66.    cfg.num_subwins=0;
  67.    cfg.root_width=0;
  68.    cfg.root_height=0;
  69.    cfg.font=NULL;
  70.    cfg.font_style=0;
  71.    cfg.autoraise=0;
  72.    cfg.autoraise_time=0;
  73.    bl.first=NULL;
  74.    for (i=0;i<64;i++)
  75.      {
  76.     cfg.subwin_type[i]=0;
  77.     cfg.subwin_level[i]=0;
  78.     cfg.subwin_scale_method[i]=0;
  79.     cfg.subwin_pos_method1[i]=0;
  80.     cfg.subwin_pos_method2[i]=0;
  81.     cfg.subwin_pos_x1[i]=0;
  82.     cfg.subwin_pos_y1[i]=0;
  83.     cfg.subwin_pos_x2[i]=0;
  84.     cfg.subwin_pos_y2[i]=0;
  85.     cfg.subwin_pmname_clk[i]=NULL;
  86.     cfg.subwin_pmname_sel[i]=NULL;
  87.     cfg.subwin_pmname_uns[i]=NULL;
  88.     cfg.subwin_transp_clk[i].r=-1;
  89.     cfg.subwin_transp_clk[i].g=-1;
  90.     cfg.subwin_transp_clk[i].b=-1;
  91.     cfg.subwin_transp_sel[i].r=-1;
  92.     cfg.subwin_transp_sel[i].g=-1;
  93.     cfg.subwin_transp_sel[i].b=-1;
  94.     cfg.subwin_transp_uns[i].r=-1;
  95.     cfg.subwin_transp_uns[i].g=-1;
  96.     cfg.subwin_transp_uns[i].b=-1;
  97.      }
  98.    evmd.mode=MODE_NORMAL;
  99.    evmd.ewin=NULL;
  100.    evmd.wbtn=-1;
  101.    icfg.left_arrow_im=NULL;
  102.    icfg.right_arrow_im=NULL;
  103.    icfg.background_im=NULL;
  104.    icfg.x=0;
  105.    icfg.y=0;
  106.    icfg.width=0;
  107.    icfg.height=0;
  108.    icfg.orientation=0;
  109.    icfg.snapshot_time=0;
  110.    icfg.x_scroll=0;
  111.    icfg.y_scroll=0;
  112.    icfg.level=0;
  113.    icfg.bx=0;
  114.    icfg.by=0;
  115.    ccfg.num_fg_r=255;
  116.    ccfg.num_fg_g=255;
  117.    ccfg.num_fg_b=255; 
  118.    ccfg.num_bg_r=0;
  119.    ccfg.num_bg_g=0;
  120.    ccfg.num_bg_b=0;
  121.    ccfg.num_size=10;
  122.    sel_win=0;
  123.    ilist.first=NULL;
  124.    InitMenuList();
  125.    fx.shadow.on=0;
  126.    predef_num=0;
  127.    ifb.on=0;
  128. }
  129.  
  130. void LoadConfig(char *file)
  131. {
  132.    FILE *f;
  133.    char s[10240];
  134.    char ss[10240];
  135.    char s1[256],s2[256],s3[256];
  136.    char s4[256],s5[256],s6[256];
  137.    int line=0;
  138.    int num;
  139.    int numm;
  140.    int num1,num2,num3,num4;
  141.    int r,g,b;
  142.    char *home;
  143.    int nest_level=0;
  144.    int nest_stack[256];
  145.    int wait_till_end=0;
  146.    int wait_nest_level=-1;
  147.    int done=0;
  148.    int i,j,k;
  149.    ImColor icl;
  150.    BWin *bwin;
  151.    int b_maxw,b_maxh;
  152.    Image *im;
  153.    Menu *menu;
  154.    MenuItem *mi;
  155.    Menu mm;
  156.    MenuItem mmi;
  157.    int tx_x,tx_y,tx_w,tx_h;
  158.    char m_unsel[4096],m_sel[4096];
  159.    ImColor m_unsel_icl,m_sel_icl;
  160.    struct predef_icon_list pdl;
  161.    Pixmap pmap;
  162.    Pixmap mask;
  163.    
  164.    mmi.text=NULL;
  165.    f=0;
  166.    if (Theme_Path[0])
  167.      {
  168.     strcpy(s1,Theme_Path);
  169.     strcat(s1,"/");
  170.     strcat(s1,file);
  171.     f=fopen(s1,"r");
  172.      }
  173.    if (!f)
  174.      {
  175.     strcpy(s1,"./.enlightenment/");
  176.     strcat(s1,file);
  177.     f=fopen(s1,"r");
  178.      }
  179.    if (!f)
  180.      {
  181.     home=getenv("HOME");
  182.     if (home)
  183.       {
  184.          strcpy(s1,home);
  185.          strcat(s1,"/.enlightenment/");
  186.          strcat(s1,file);
  187.          f=fopen(s1,"r");
  188.       }
  189.      }
  190.    if (!f)
  191.      {
  192.     strcpy(s1,SYSCONFIG_DIR);
  193.     strcat(s1,file);
  194.     f=fopen(s1,"r");
  195.      }
  196.    if (!f)
  197.      {
  198.     Alert("PANIC!!!!!!!!!\n\nCannot Find a config file!\n");
  199.     sprintf(ss,"Have tried looking for > %s < config file in:\n ./.enlightenment/\n ~/.enlightenment/\n %s\n.... Giving up and exiting.\n",
  200.         file,SYSCONFIG_DIR);Alert(ss);
  201.       exit(1);
  202.      }
  203.    nest_stack[0]=CTXT_NONE;
  204.    while(fgets(s,1024,f))
  205.      {
  206.     line++;
  207.         if (s[0]=='#') continue;
  208.     if (s[0]=='\n') continue;
  209.     if (s[0]==0) continue;
  210.     subvars(s);
  211.     if (s[0]=='%')
  212.       {
  213.          sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  214.          if (!strcmp(s2,"status"))
  215.            {
  216.           if (strcmp(s4,"shapemode")) continue;
  217.           if (!strcmp(s5,"off")) 
  218.             {
  219.                icl.r=-1;icl.g=-1;icl.b=-1;
  220.             }
  221.           else
  222.             {
  223.                icl.r=num1;icl.g=num2;icl.b=num3;
  224.             }
  225.           numm=8;
  226.           i=0;
  227.           while (numm>0)
  228.             {
  229.                if (s[i++]==' ') numm--;
  230.             }
  231.           j=0;
  232.           while (s[i]) ss[j++]=s[i++];
  233.           ss[j]=0;
  234.           ShowStatus(ss,s3,&icl);
  235.           continue;
  236.            }
  237.          else if (!strcmp(s2,"sleep"))
  238.            {
  239.           sscanf(s,"%s %s %i",s1,s2,&num);
  240.           sleep(num);
  241.           continue;
  242.            }
  243.          else if (!strcmp(s2,"black"))
  244.            {
  245.           r=0,g=0;b=0;
  246.           XSetWindowBackground(disp,root,ImlibBestColorMatch(imd,&r,&g,&b));
  247.           XClearWindow(disp,root);
  248.           XSync(disp,False);
  249.           continue;
  250.            }
  251.          else if (!strcmp(s2,"include"))
  252.            {
  253.           sscanf(s,"%s %s %s",s1,s2,s3);
  254.           LoadConfig(s3);
  255.           continue;
  256.            }
  257.          else if (!strcmp(s2,"exec"))
  258.            {
  259.           sscanf(s,"%s %s",s1,s2,s3);
  260.           strcpy(ss,strstr(s,s3));
  261.           Do_Exec(ss);
  262.           continue;
  263.            }
  264.       }
  265.     done=0;
  266.     sscanf(s,"%s",s1);
  267.     if (wait_till_end)
  268.       {
  269.          done=1;
  270.          if (wait_nest_level==nest_level) wait_till_end=0;
  271.       }
  272.     if (!strcmp(s1,"begin"))
  273.       {
  274.          done=1;
  275.          sscanf(s,"%s %s",s1,s2);
  276.          if (!strcmp(s2,"window"))
  277.            {
  278.           nest_stack[++nest_level]=CTXT_WINDOW;
  279.            }
  280.          else if (!strcmp(s2,"border"))
  281.            {
  282.           nest_stack[++nest_level]=CTXT_BORDER;
  283.            }
  284.          else if (!strcmp(s2,"subwin"))
  285.            {
  286.           nest_stack[++nest_level]=CTXT_SUBWIN;
  287.           cfg.num_subwins++;
  288.            }
  289.          else if (!strcmp(s2,"root"))
  290.            {
  291.           nest_stack[++nest_level]=CTXT_ROOT;
  292.            }
  293.          else if (!strcmp(s2,"text"))
  294.            {
  295.           nest_stack[++nest_level]=CTXT_TEXT;
  296.            }
  297.          else if (!strcmp(s2,"status"))
  298.            {
  299.           nest_stack[++nest_level]=CTXT_STATUS;
  300.            }
  301.          else if (!strcmp(s2,"buttons"))
  302.            {
  303.           nest_stack[++nest_level]=CTXT_BUTTONS;
  304.            }
  305.          else if (!strcmp(s2,"icons"))
  306.            {
  307.           nest_stack[++nest_level]=CTXT_ICONS;
  308.            }
  309.          else if (!strcmp(s2,"cursors"))
  310.            {
  311.           nest_stack[++nest_level]=CTXT_CURSORS;
  312.            }
  313.          else if (!strcmp(s2,"button"))
  314.            {
  315.           b_maxw=0;
  316.           b_maxh=0;
  317.           nest_stack[++nest_level]=CTXT_BUTTON;
  318.           bwin=malloc(sizeof(BWin));
  319.            }
  320.          else if (!strcmp(s2,"menu"))
  321.            {
  322.           nest_stack[++nest_level]=CTXT_MENU;
  323.            }
  324.          else if (!strcmp(s2,"menuitem"))
  325.            {
  326.           mmi.text=NULL;
  327.           nest_stack[++nest_level]=CTXT_MENUITEM;
  328.            }
  329.          else if (!strcmp(s2,"fx"))
  330.            {
  331.           nest_stack[++nest_level]=CTXT_FX;
  332.            }
  333.          else if (!strcmp(s2,"predef_icon"))
  334.            {
  335.           nest_stack[++nest_level]=CTXT_PREDEF_ICON;
  336.            }
  337.          else if (!strcmp(s2,"infobox"))
  338.            {
  339.           nest_stack[++nest_level]=CTXT_INFOBOX;
  340.            }
  341.          else
  342.            {
  343.           if (!wait_till_end)
  344.             {
  345.                sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %sSection context %s Unknown.\nIgnoring entire context chunk\n"
  346.                    ,file,line,s,s2);Alert(ss);
  347.                wait_till_end=1;
  348.                wait_nest_level=nest_level++;
  349.                nest_stack[nest_level]=CTXT_NONE;
  350.             }
  351.           else
  352.             {
  353.                nest_level++;
  354.             }
  355.            }
  356.       }
  357.     
  358.     else if (!strcmp(s1,"end"))
  359.       {
  360.          if (nest_stack[nest_level]==CTXT_TEXT) 
  361.            InitTextInfo();
  362.          if (nest_stack[nest_level]==CTXT_STATUS) 
  363.            Init_StatusWin();
  364.          if (nest_stack[nest_level]==CTXT_BUTTON) 
  365.            AddButton(bwin);
  366.          if (nest_stack[nest_level]==CTXT_ICONS) 
  367.            InitIcons();
  368.          if (nest_stack[nest_level]==CTXT_MENUITEM) 
  369.            AddMenuItem(menu,mi);
  370.          if (nest_stack[nest_level]==CTXT_INFOBOX) 
  371.            InitInfoBox();
  372.          if (nest_stack[nest_level]==CTXT_PREDEF_ICON) 
  373.            {
  374.           predef_num++;
  375.           if (!predef_list) 
  376.             predef_list=malloc(sizeof(struct predef_icon_list));
  377.           else
  378.             predef_list=realloc(predef_list,sizeof(struct predef_icon_list)*predef_num);
  379.           predef_list[predef_num-1].title=pdl.title;
  380.           predef_list[predef_num-1].image_file=pdl.image_file;
  381.           predef_list[predef_num-1].transp=pdl.transp;
  382.            }
  383.          if (nest_stack[nest_level]==CTXT_MENU)
  384.            {
  385.           RenderMenu(menu);
  386.           AddMenuToList(menu);
  387.            }
  388.          done=1;
  389.          if (nest_level>0)
  390.            {
  391.           nest_level--;
  392.            }
  393.          else
  394.            {
  395.           nest_level=0;
  396.           sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nKeyword end with no matching begin.\nIgnoring Keyword.\n"
  397.               ,file,line,s);Alert(ss);
  398.            }
  399.       }
  400.     if (!wait_till_end)
  401.       {
  402.          if(nest_stack[nest_level]==CTXT_WINDOW)
  403.            {
  404.           if (!strcmp(s1,"shaped"))
  405.             {
  406.                done=1;
  407.                sscanf(s,"%s %s",s1,s2);
  408.                if (!strcmp(s2,"on")) cfg.shape_mode=1;
  409.                else if (!strcmp(s2,"off")) cfg.shape_mode=0;
  410.                else 
  411.              {
  412.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  413.                     "shaped",s2,
  414.                     "on,off",
  415.                     "off");Alert(ss);
  416.                 cfg.shape_mode=0;
  417.              }
  418.             }
  419.           else if (!strcmp(s1,"move"))
  420.             {
  421.                done=1;
  422.                sscanf(s,"%s %s",s1,s2);
  423.                if (!strcmp(s2,"box")) cfg.move_mode=0;
  424.                else if (!strcmp(s2,"shape")) cfg.move_mode=1;
  425.                else if (!strcmp(s2,"opaque")) cfg.move_mode=2;
  426.                else 
  427.              {
  428.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  429.                     "move",s2,
  430.                     "box,shape,opaque",
  431.                     "box");Alert(ss);
  432.                 cfg.move_mode=0;
  433.              }
  434.             }
  435.           else if (!strcmp(s1,"autoraise"))
  436.             {
  437.                done=1;
  438.                sscanf(s,"%s %s %i",s1,s2,&num);
  439.                cfg.autoraise_time=num;
  440.                if (!strcmp(s2,"on")) cfg.autoraise=1;
  441.                else if (!strcmp(s2,"off")) cfg.autoraise=0;
  442.                else 
  443.              {
  444.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  445.                     "autoraise",s2,
  446.                     "on,off",
  447.                     "off");Alert(ss);
  448.                 cfg.autoraise=0;
  449.              }
  450.             }
  451.           else if (!strcmp(s1,"resize"))
  452.             {
  453.                done=1;
  454.                sscanf(s,"%s %s",s1,s2);
  455.                if (!strcmp(s2,"box")) cfg.resize_mode=0;
  456.                else if (!strcmp(s2,"shape")) cfg.resize_mode=1;
  457.                else if (!strcmp(s2,"opaque")) cfg.resize_mode=2;
  458.                else 
  459.              {
  460.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  461.                     "resize",s2,
  462.                     "box,shape,opaque",
  463.                     "box");Alert(ss);
  464.                 cfg.resize_mode=0;
  465.              }
  466.             }
  467.            }
  468.          if(nest_stack[nest_level]==CTXT_SUBWIN)
  469.            {
  470.           if (!strcmp(s1,"type"))
  471.             {
  472.                done=1;
  473.                sscanf(s,"%s %s",s1,s2);
  474.                if (!strcmp(s2,"decoration")) cfg.subwin_type[cfg.num_subwins-1]=0;
  475.                else if (!strcmp(s2,"button")) cfg.subwin_type[cfg.num_subwins-1]=1;
  476.                else if (!strcmp(s2,"title")) cfg.subwin_type[cfg.num_subwins-1]=2;
  477.                else 
  478.              {
  479.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  480.                     "type",s2,
  481.                     "decoration,button,title",
  482.                     "decoration");Alert(ss);
  483.                 cfg.subwin_type[cfg.num_subwins-1]=0;
  484.              }
  485.             }
  486.           else if (!strcmp(s1,"coord1_relative"))
  487.             {
  488.                done=1;
  489.                sscanf(s,"%s %s",s1,s2);
  490.                if (!strcmp(s2,"topleft")) cfg.subwin_pos_method1[cfg.num_subwins-1]=0;
  491.                else if (!strcmp(s2,"topright")) cfg.subwin_pos_method1[cfg.num_subwins-1]=1;
  492.                else if (!strcmp(s2,"bottomleft")) cfg.subwin_pos_method1[cfg.num_subwins-1]=2;
  493.                else if (!strcmp(s2,"bottomright")) cfg.subwin_pos_method1[cfg.num_subwins-1]=3;
  494.                else 
  495.              {
  496.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  497.                     "coor_relative",s2,
  498.                     "topleft,topright,bottomleft,bottomright",
  499.                     "topleft");Alert(ss);
  500.                 cfg.subwin_pos_method1[cfg.num_subwins-1]=0;
  501.              }
  502.             }
  503.           else if (!strcmp(s1,"coord1"))
  504.             {
  505.                done=1;
  506.                sscanf(s,"%s %i %i",s1,&num,&numm);
  507.                cfg.subwin_pos_x1[cfg.num_subwins-1]=num;
  508.                cfg.subwin_pos_y1[cfg.num_subwins-1]=numm;
  509.             }
  510.           else if (!strcmp(s1,"coord2_relative"))
  511.             {
  512.                done=1;
  513.                sscanf(s,"%s %s",s1,s2);
  514.                if (!strcmp(s2,"topleft")) cfg.subwin_pos_method2[cfg.num_subwins-1]=0;
  515.                else if (!strcmp(s2,"topright")) cfg.subwin_pos_method2[cfg.num_subwins-1]=1;
  516.                else if (!strcmp(s2,"bottomleft")) cfg.subwin_pos_method2[cfg.num_subwins-1]=2;
  517.                else if (!strcmp(s2,"bottomright")) cfg.subwin_pos_method2[cfg.num_subwins-1]=3;
  518.                else 
  519.              {
  520.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  521.                     "coor_relative",s2,
  522.                     "topleft,topright,bottomleft,bottomright",
  523.                     "topleft");Alert(ss);
  524.                 cfg.subwin_pos_method2[cfg.num_subwins-1]=0;
  525.              }
  526.             }
  527.           else if (!strcmp(s1,"coord2"))
  528.             {
  529.                done=1;
  530.                sscanf(s,"%s %i %i",s1,&num,&numm);
  531.                cfg.subwin_pos_x2[cfg.num_subwins-1]=num;
  532.                cfg.subwin_pos_y2[cfg.num_subwins-1]=numm;
  533.             }
  534.           else if (!strcmp(s1,"image"))
  535.             {
  536.                done=1;
  537.                sscanf(s,"%s %s",s1,s2);
  538.                if (!strcmp(s2,"clicked")) 
  539.              {
  540.                 sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  541.                 cfg.subwin_pmname_clk[cfg.num_subwins-1]=malloc(sizeof(char)*(strlen(s3)+1));
  542.                 strcpy(cfg.subwin_pmname_clk[cfg.num_subwins-1],s3);
  543.                 if (!strcmp(s4,"shapecolor"))
  544.                   {
  545.                  if (!strcmp(s5,"on"))
  546.                    {
  547.                       cfg.subwin_transp_clk[cfg.num_subwins-1].r=num1;
  548.                       cfg.subwin_transp_clk[cfg.num_subwins-1].g=num2;
  549.                       cfg.subwin_transp_clk[cfg.num_subwins-1].b=num3;
  550.                    }
  551.                  else if (!strcmp(s5,"off"))
  552.                    {
  553.                       cfg.subwin_transp_clk[cfg.num_subwins-1].r=-1;
  554.                       cfg.subwin_transp_clk[cfg.num_subwins-1].g=-1;
  555.                       cfg.subwin_transp_clk[cfg.num_subwins-1].b=-1;
  556.                    }
  557.                  else
  558.                    {
  559.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  560.                           "image shapecolor",s5,
  561.                           "on,off",
  562.                           "off");Alert(ss);
  563.                       cfg.subwin_transp_clk[cfg.num_subwins-1].r=-1;
  564.                       cfg.subwin_transp_clk[cfg.num_subwins-1].g=-1;
  565.                       cfg.subwin_transp_clk[cfg.num_subwins-1].b=-1;
  566.                    }
  567.                   }
  568.                 else
  569.                   {
  570.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  571.                      "image",s4,
  572.                      "shapecolor",
  573.                      "chapecolor off");Alert(ss);
  574.                  cfg.subwin_transp_clk[cfg.num_subwins-1].r=-1;
  575.                  cfg.subwin_transp_clk[cfg.num_subwins-1].g=-1;
  576.                  cfg.subwin_transp_clk[cfg.num_subwins-1].b=-1;
  577.                   }
  578.              }
  579.                else if (!strcmp(s2,"selected")) 
  580.              {
  581.                 sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  582.                 cfg.subwin_pmname_sel[cfg.num_subwins-1]=malloc(sizeof(char)*(strlen(s3)+1));
  583.                 strcpy(cfg.subwin_pmname_sel[cfg.num_subwins-1],s3);
  584.                 if (!strcmp(s4,"shapecolor"))
  585.                   {
  586.                  if (!strcmp(s5,"on"))
  587.                    {
  588.                       cfg.subwin_transp_sel[cfg.num_subwins-1].r=num1;
  589.                       cfg.subwin_transp_sel[cfg.num_subwins-1].g=num2;
  590.                       cfg.subwin_transp_sel[cfg.num_subwins-1].b=num3;
  591.                    }
  592.                  else if (!strcmp(s5,"off"))
  593.                    {
  594.                       cfg.subwin_transp_sel[cfg.num_subwins-1].r=-1;
  595.                       cfg.subwin_transp_sel[cfg.num_subwins-1].g=-1;
  596.                       cfg.subwin_transp_sel[cfg.num_subwins-1].b=-1;
  597.                    }
  598.                  else
  599.                    {
  600.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  601.                           "image shapecolor",s5,
  602.                           "on,off",
  603.                           "off");Alert(ss);
  604.                       cfg.subwin_transp_sel[cfg.num_subwins-1].r=-1;
  605.                       cfg.subwin_transp_sel[cfg.num_subwins-1].g=-1;
  606.                       cfg.subwin_transp_sel[cfg.num_subwins-1].b=-1;
  607.                    }
  608.                   }
  609.                 else
  610.                   {
  611.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  612.                      "image",s4,
  613.                      "shapecolor",
  614.                      "shapecolor off");Alert(ss);
  615.                  cfg.subwin_transp_sel[cfg.num_subwins-1].r=-1;
  616.                  cfg.subwin_transp_sel[cfg.num_subwins-1].g=-1;
  617.                  cfg.subwin_transp_sel[cfg.num_subwins-1].b=-1;
  618.                   }
  619.              }
  620.                else if (!strcmp(s2,"unselected")) 
  621.              {
  622.                 sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  623.                 cfg.subwin_pmname_uns[cfg.num_subwins-1]=malloc(sizeof(char)*(strlen(s3)+1));
  624.                 strcpy(cfg.subwin_pmname_uns[cfg.num_subwins-1],s3);
  625.                 if (!strcmp(s4,"shapecolor"))
  626.                   {
  627.                  if (!strcmp(s5,"on"))
  628.                    {
  629.                       cfg.subwin_transp_uns[cfg.num_subwins-1].r=num1;
  630.                       cfg.subwin_transp_uns[cfg.num_subwins-1].g=num2;
  631.                       cfg.subwin_transp_uns[cfg.num_subwins-1].b=num3;
  632.                    }
  633.                  else if (!strcmp(s5,"off"))
  634.                    {
  635.                       cfg.subwin_transp_uns[cfg.num_subwins-1].r=-1;
  636.                       cfg.subwin_transp_uns[cfg.num_subwins-1].g=-1;
  637.                       cfg.subwin_transp_uns[cfg.num_subwins-1].b=-1;
  638.                    }
  639.                  else
  640.                    {
  641.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  642.                           "image shapecolor",s5,
  643.                           "on,off",
  644.                           "off");Alert(ss);
  645.                       cfg.subwin_transp_uns[cfg.num_subwins-1].r=-1;
  646.                       cfg.subwin_transp_uns[cfg.num_subwins-1].g=-1;
  647.                       cfg.subwin_transp_uns[cfg.num_subwins-1].b=-1;
  648.                    }
  649.                   }
  650.                 else
  651.                   {
  652.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  653.                      "image",s4,
  654.                      "shapecolor",
  655.                      "shapecolor off");Alert(ss);
  656.                  cfg.subwin_transp_uns[cfg.num_subwins-1].r=-1;
  657.                  cfg.subwin_transp_uns[cfg.num_subwins-1].g=-1;
  658.                  cfg.subwin_transp_uns[cfg.num_subwins-1].b=-1;
  659.                   }
  660.              }
  661.                else if (!strcmp(s2,"scale_method")) 
  662.              {
  663.                 sscanf(s,"%s %s %s",s1,s2,s3);
  664.                 if (!strcmp(s3,"tile")) cfg.subwin_scale_method[cfg.num_subwins-1]=0;
  665.                 else if (!strcmp(s3,"scaletile")) cfg.subwin_scale_method[cfg.num_subwins-1]=1;
  666.                 else if (!strcmp(s3,"scale")) cfg.subwin_scale_method[cfg.num_subwins-1]=2;
  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.                      "scale_method",s3,
  671.                      "tile,scaletime,scale",
  672.                      "tile");Alert(ss);
  673.                  cfg.subwin_scale_method[cfg.num_subwins-1]=0;
  674.                   }
  675.              }
  676.                else 
  677.              {
  678.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  679.                     "image detail",s2,
  680.                     "clicked,selected,unselected,scale_method",
  681.                     "NOTHING");Alert(ss);
  682.              }
  683.             }
  684.           else if (!strcmp(s1,"level"))
  685.             {
  686.                done=1;
  687.                sscanf(s,"%s %s",s1,s2);
  688.                if (!strcmp(s2,"above")) cfg.subwin_level[cfg.num_subwins-1]=1;
  689.                else if (!strcmp(s2,"below")) cfg.subwin_level[cfg.num_subwins-1]=0;
  690.                else 
  691.              {
  692.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  693.                     "level",s2,
  694.                     "above,below",
  695.                     "below");Alert(ss);
  696.                 cfg.subwin_level[cfg.num_subwins-1]=0;
  697.              }
  698.             }
  699.           else if (!strcmp(s1,"action"))
  700.             {
  701.                done=1;
  702.                sscanf(s,"%s %s %i %s %s",s1,s2,&num,s3,s4);
  703.                if ((num>0)&&(num<4))
  704.              {
  705.                 if (!strcmp(s2,"none")) 
  706.                   {
  707.                  numm=0;
  708.                   }
  709.                 else if (!strcmp(s2,"shift")) 
  710.                   {
  711.                  numm=1;
  712.                   }
  713.                 else if (!strcmp(s2,"ctrl")) 
  714.                   {
  715.                  numm=2;
  716.                   }
  717.                 else if (!strcmp(s2,"alt")) 
  718.                   {
  719.                  numm=3;
  720.                   }
  721.                 else 
  722.                   {
  723.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  724.                      "action modifier",s2,
  725.                      "none,shift,ctrl,alt",
  726.                      "none");Alert(ss);
  727.                  numm=0;
  728.                   }
  729.                 if (!strcmp(s3,"move")) 
  730.                   {
  731.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=1;
  732.                   }
  733.                 else if (!strcmp(s3,"resize")) 
  734.                   {
  735.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=2;
  736.                   }
  737.                 else if (!strcmp(s3,"iconify")) 
  738.                   {
  739.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=3;
  740.                   }
  741.                 else if (!strcmp(s3,"kill")) 
  742.                   {
  743.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=4;
  744.                   }
  745.                 else if (!strcmp(s3,"raise")) 
  746.                   {
  747.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=5;
  748.                   }
  749.                 else if (!strcmp(s3,"lower")) 
  750.                   {
  751.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=6;
  752.                   }
  753.                 else if (!strcmp(s3,"raise_lower")) 
  754.                   {
  755.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=7;
  756.                   }
  757.                 else if (!strcmp(s3,"max_height")) 
  758.                   {
  759.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=8;
  760.                   }
  761.                 else if (!strcmp(s3,"max_width")) 
  762.                   {
  763.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=9;
  764.                   }
  765.                 else if (!strcmp(s3,"max_size")) 
  766.                   {
  767.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=10;
  768.                   }
  769.                 else if (!strcmp(s3,"configure")) 
  770.                   {
  771.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=11;
  772.                   }
  773.                 else if (!strcmp(s3,"menu")) 
  774.                   {
  775.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=12;
  776.                  strcpy(cfg.subwin_action[cfg.num_subwins-1][num-1][numm].params,s4);
  777.                   }
  778.                 else if (!strcmp(s3,"exec")) 
  779.                   {
  780.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=13;
  781.                  strcpy(cfg.subwin_action[cfg.num_subwins-1][num-1][numm].params,strstr(s,s4));
  782.                   }
  783.                 else if (!strcmp(s3,"exit")) 
  784.                   {
  785.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=14;
  786.                   }
  787.                 else if (!strcmp(s3,"kill_nasty")) 
  788.                   {
  789.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=15;
  790.                   }
  791.                 else if (!strcmp(s3,"none")) 
  792.                   {
  793.                  cfg.subwin_action[cfg.num_subwins-1][num-1][numm].id=255;
  794.                   }
  795.                 else
  796.                   {
  797.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  798.                      "action",s3,
  799.                      "move,resize,iconify,kill,raise,lower,raise_lower,max_height,max_width,max_size,configure,menu,exec,kill_nasty,none",
  800.                      "NOTHING");Alert(ss);
  801.                   }
  802.              }
  803.                else
  804.              {
  805.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  806.                     "action button ","!",
  807.                     "1,2,3",
  808.                     "NOTHING");Alert(ss);
  809.              }
  810.             }
  811.            }
  812.          if(nest_stack[nest_level]==CTXT_BORDER)
  813.            {
  814.           if (!strcmp(s1,"left"))
  815.             {
  816.                done=1;
  817.                sscanf(s,"%s %i",s1,&num);
  818.                cfg.border_l=num;
  819.             }
  820.           else if (!strcmp(s1,"right"))
  821.             {
  822.                done=1;
  823.                sscanf(s,"%s %i",s1,&num);
  824.                cfg.border_r=num;
  825.             }
  826.           else if (!strcmp(s1,"top"))
  827.             {
  828.                done=1;
  829.                sscanf(s,"%s %i",s1,&num);
  830.                cfg.border_t=num;
  831.             }
  832.           else if (!strcmp(s1,"bottom"))
  833.             {
  834.                done=1;
  835.                sscanf(s,"%s %i",s1,&num);
  836.                cfg.border_b=num;
  837.             }
  838.            }
  839.          if(nest_stack[nest_level]==CTXT_ICONS)
  840.            {
  841.           if (!strcmp(s1,"location"))
  842.             {
  843.                done=1;
  844.                sscanf(s,"%s %s %i %i",s1,s2,&num1,&num2);
  845.                if (!strcmp(s2,"topleft"))
  846.              {
  847.                 icfg.x=num1;
  848.                 icfg.y=num2;
  849.              }
  850.                else if (!strcmp(s2,"bottomleft"))
  851.              {
  852.                 icfg.x=num1;
  853.                 icfg.y=DisplayHeight(disp,screen)-num2-icfg.height;
  854.              }
  855.                else if (!strcmp(s2,"topright"))
  856.              {
  857.                 icfg.x=DisplayWidth(disp,screen)-num1-icfg.width;
  858.                 icfg.y=num2;
  859.              }
  860.                else if (!strcmp(s2,"bottomright"))
  861.              {
  862.                 icfg.x=DisplayWidth(disp,screen)-num1-icfg.width;
  863.                 icfg.y=DisplayHeight(disp,screen)-num2-icfg.height;
  864.              }
  865.              
  866.             }
  867.           else if (!strcmp(s1,"size"))
  868.             {
  869.                done=1;
  870.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  871.                icfg.width=num1;
  872.                icfg.height=num2;
  873.             }
  874.           else if (!strcmp(s1,"border"))
  875.             {
  876.                done=1;
  877.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  878.                icfg.bx=num1;
  879.                icfg.by=num2;
  880.             }
  881.           else if (!strcmp(s1,"scroll_speed"))
  882.             {
  883.                done=1;
  884.                sscanf(s,"%s %i %i",s1,&num);
  885.                icfg.scroll_speed=num;
  886.             }
  887.           else if (!strcmp(s1,"snapshot_time"))
  888.             {
  889.                done=1;
  890.                sscanf(s,"%s %i",s1,&num);
  891.                icfg.snapshot_time=num;
  892.             }
  893.           else if (!strcmp(s1,"orientation"))
  894.             {
  895.                done=1;
  896.                sscanf(s,"%s %s",s1,s2);
  897.                if (!strcmp(s2,"vertical")) icfg.orientation=1;
  898.                else icfg.orientation=0;
  899.             }
  900.           else if (!strcmp(s1,"level"))
  901.             {
  902.                done=1;
  903.                sscanf(s,"%s %s",s1,s2);
  904.                if (!strcmp(s2,"above")) icfg.level=1;
  905.                else icfg.level=0;
  906.             }
  907.           else if (!strcmp(s1,"image"))
  908.             {
  909.                done=1;
  910.                sscanf(s,"%s %s",s1,s2);
  911.                if (!strcmp(s2,"background")) 
  912.              {
  913.                 sscanf(s,"%s %s %s",s1,s2,s3);
  914.                 icfg.background_im=malloc(sizeof(char)*(strlen(s3)+1));
  915.                 strcpy(icfg.background_im,s3);
  916.              }
  917.                else if (!strcmp(s2,"left"))
  918.              {
  919.                 sscanf(s,"%s %s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,s6,&num1,&num2,&num3);
  920.                 if (!strcmp(s3,"unselected"))
  921.                   {
  922.                  icfg.left_arrow_im=malloc(sizeof(char)*(strlen(s4)+1));
  923.                  strcpy(icfg.left_arrow_im,s4);
  924.                  if (!strcmp(s5,"shapemode"))
  925.                    {
  926.                       if (!strcmp(s6,"on"))
  927.                     {
  928.                        icfg.left_transparent.r=num1;
  929.                        icfg.left_transparent.g=num2;
  930.                        icfg.left_transparent.b=num3;
  931.                     }
  932.                       else if (!strcmp(s6,"off"))
  933.                     {
  934.                        icfg.left_transparent.r=-1;
  935.                        icfg.left_transparent.g=-1;
  936.                        icfg.left_transparent.b=-1;
  937.                     }
  938.                       else
  939.                     {
  940.                        sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  941.                            "image shapecolor",s5,
  942.                            "on,off",
  943.                            "off");Alert(ss);
  944.                        icfg.left_transparent.r=-1;
  945.                        icfg.left_transparent.g=-1;
  946.                        icfg.left_transparent.b=-1;
  947.                     }
  948.                    }
  949.                  else
  950.                    {
  951.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  952.                           "image",s4,
  953.                           "shapemode",
  954.                           "shapemode off");Alert(ss);
  955.                       icfg.left_transparent.r=-1;
  956.                       icfg.left_transparent.g=-1;
  957.                       icfg.left_transparent.b=-1;
  958.                    }
  959.                   }
  960.                 else if (!strcmp(s3,"selected"))
  961.                   {
  962.                  icfg.left_sel_arrow_im=malloc(sizeof(char)*(strlen(s4)+1));
  963.                  strcpy(icfg.left_sel_arrow_im,s4);
  964.                  if (!strcmp(s5,"shapemode"))
  965.                    {
  966.                       if (!strcmp(s6,"on"))
  967.                     {
  968.                        icfg.left_sel_transparent.r=num1;
  969.                        icfg.left_sel_transparent.g=num2;
  970.                        icfg.left_sel_transparent.b=num3;
  971.                     }
  972.                       else if (!strcmp(s6,"off"))
  973.                     {
  974.                        icfg.left_sel_transparent.r=-1;
  975.                        icfg.left_sel_transparent.g=-1;
  976.                        icfg.left_sel_transparent.b=-1;
  977.                     }
  978.                       else
  979.                     {
  980.                        sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  981.                            "image shapecolor",s5,
  982.                            "on,off",
  983.                            "off");Alert(ss);
  984.                        icfg.left_sel_transparent.r=-1;
  985.                        icfg.left_sel_transparent.g=-1;
  986.                        icfg.left_sel_transparent.b=-1;
  987.                     }
  988.                    }
  989.                  else
  990.                    {
  991.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  992.                           "image",s4,
  993.                           "shapemode",
  994.                           "shapemode off");Alert(ss);
  995.                       icfg.left_sel_transparent.r=-1;
  996.                       icfg.left_sel_transparent.g=-1;
  997.                       icfg.left_sel_transparent.b=-1;
  998.                    }
  999.                   }
  1000.                 else if (!strcmp(s3,"clicked"))
  1001.                   {
  1002.                  icfg.left_clk_arrow_im=malloc(sizeof(char)*(strlen(s4)+1));
  1003.                  strcpy(icfg.left_clk_arrow_im,s4);
  1004.                  if (!strcmp(s5,"shapemode"))
  1005.                    {
  1006.                       if (!strcmp(s6,"on"))
  1007.                     {
  1008.                        icfg.left_clk_transparent.r=num1;
  1009.                        icfg.left_clk_transparent.g=num2;
  1010.                        icfg.left_clk_transparent.b=num3;
  1011.                     }
  1012.                       else if (!strcmp(s6,"off"))
  1013.                     {
  1014.                        icfg.left_clk_transparent.r=-1;
  1015.                        icfg.left_clk_transparent.g=-1;
  1016.                        icfg.left_clk_transparent.b=-1;
  1017.                     }
  1018.                       else
  1019.                     {
  1020.                        sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1021.                            "image shapecolor",s5,
  1022.                            "on,off",
  1023.                            "off");Alert(ss);
  1024.                        icfg.left_clk_transparent.r=-1;
  1025.                        icfg.left_clk_transparent.g=-1;
  1026.                        icfg.left_clk_transparent.b=-1;
  1027.                     }
  1028.                    }
  1029.                  else
  1030.                    {
  1031.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1032.                           "image",s4,
  1033.                           "shapemode",
  1034.                           "shapemode off");Alert(ss);
  1035.                       icfg.left_clk_transparent.r=-1;
  1036.                       icfg.left_clk_transparent.g=-1;
  1037.                       icfg.left_clk_transparent.b=-1;
  1038.                    }
  1039.                   }
  1040.              }
  1041.                else if (!strcmp(s2,"right"))
  1042.              {
  1043.                 sscanf(s,"%s %s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,s6,&num1,&num2,&num3);
  1044.                 if (!strcmp(s3,"unselected"))
  1045.                   {
  1046.                  icfg.right_arrow_im=malloc(sizeof(char)*(strlen(s4)+1));
  1047.                  strcpy(icfg.right_arrow_im,s4);
  1048.                  if (!strcmp(s5,"shapemode"))
  1049.                    {
  1050.                       if (!strcmp(s6,"on"))
  1051.                     {
  1052.                        icfg.right_transparent.r=num1;
  1053.                        icfg.right_transparent.g=num2;
  1054.                        icfg.right_transparent.b=num3;
  1055.                     }
  1056.                       else if (!strcmp(s6,"off"))
  1057.                     {
  1058.                        icfg.right_transparent.r=-1;
  1059.                        icfg.right_transparent.g=-1;
  1060.                        icfg.right_transparent.b=-1;
  1061.                     }
  1062.                       else
  1063.                     {
  1064.                        sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1065.                            "image shapecolor",s5,
  1066.                            "on,off",
  1067.                            "off");Alert(ss);
  1068.                        icfg.right_transparent.r=-1;
  1069.                        icfg.right_transparent.g=-1;
  1070.                        icfg.right_transparent.b=-1;
  1071.                     }
  1072.                    }
  1073.                  else
  1074.                    {
  1075.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1076.                           "image",s4,
  1077.                           "shapemode",
  1078.                           "shapemode off");Alert(ss);
  1079.                       icfg.right_transparent.r=-1;
  1080.                       icfg.right_transparent.g=-1;
  1081.                       icfg.right_transparent.b=-1;
  1082.                    }
  1083.                   }
  1084.                 else if (!strcmp(s3,"selected"))
  1085.                   {
  1086.                  icfg.right_sel_arrow_im=malloc(sizeof(char)*(strlen(s4)+1));
  1087.                  strcpy(icfg.right_sel_arrow_im,s4);
  1088.                  if (!strcmp(s5,"shapemode"))
  1089.                    {
  1090.                       if (!strcmp(s6,"on"))
  1091.                     {
  1092.                        icfg.right_sel_transparent.r=num1;
  1093.                        icfg.right_sel_transparent.g=num2;
  1094.                        icfg.right_sel_transparent.b=num3;
  1095.                     }
  1096.                       else if (!strcmp(s6,"off"))
  1097.                     {
  1098.                        icfg.right_sel_transparent.r=-1;
  1099.                        icfg.right_sel_transparent.g=-1;
  1100.                        icfg.right_sel_transparent.b=-1;
  1101.                     }
  1102.                       else
  1103.                     {
  1104.                        sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1105.                            "image shapecolor",s5,
  1106.                            "on,off",
  1107.                            "off");Alert(ss);
  1108.                        icfg.right_sel_transparent.r=-1;
  1109.                        icfg.right_sel_transparent.g=-1;
  1110.                        icfg.right_sel_transparent.b=-1;
  1111.                     }
  1112.                    }
  1113.                  else
  1114.                    {
  1115.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1116.                           "image",s4,
  1117.                           "shapemode",
  1118.                           "shapemode off");Alert(ss);
  1119.                       icfg.right_sel_transparent.r=-1;
  1120.                       icfg.right_sel_transparent.g=-1;
  1121.                       icfg.right_sel_transparent.b=-1;
  1122.                    }
  1123.                   }
  1124.                 else if (!strcmp(s3,"clicked"))
  1125.                   {
  1126.                  icfg.right_clk_arrow_im=malloc(sizeof(char)*(strlen(s4)+1));
  1127.                  strcpy(icfg.right_clk_arrow_im,s4);
  1128.                  if (!strcmp(s5,"shapemode"))
  1129.                    {
  1130.                       if (!strcmp(s6,"on"))
  1131.                     {
  1132.                        icfg.right_clk_transparent.r=num1;
  1133.                        icfg.right_clk_transparent.g=num2;
  1134.                        icfg.right_clk_transparent.b=num3;
  1135.                     }
  1136.                       else if (!strcmp(s6,"off"))
  1137.                     {
  1138.                        icfg.right_clk_transparent.r=-1;
  1139.                        icfg.right_clk_transparent.g=-1;
  1140.                        icfg.right_clk_transparent.b=-1;
  1141.                     }
  1142.                       else
  1143.                     {
  1144.                        sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1145.                            "image shapecolor",s5,
  1146.                            "on,off",
  1147.                            "off");Alert(ss);
  1148.                        icfg.right_clk_transparent.r=-1;
  1149.                        icfg.right_clk_transparent.g=-1;
  1150.                        icfg.right_clk_transparent.b=-1;
  1151.                     }
  1152.                    }
  1153.                  else
  1154.                    {
  1155.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1156.                           "image",s4,
  1157.                           "shapemode",
  1158.                           "shapemode off");Alert(ss);
  1159.                       icfg.right_clk_transparent.r=-1;
  1160.                       icfg.right_clk_transparent.g=-1;
  1161.                       icfg.right_clk_transparent.b=-1;
  1162.                    }
  1163.                   }
  1164.              }
  1165.             }
  1166.           else if (!strcmp(s1,"action"))
  1167.             {
  1168.                done=1;
  1169.                sscanf(s,"%s %s %i %s %s",s1,s2,&num,s3,s4);
  1170.                if ((num>0)&&(num<4))
  1171.              {
  1172.                 if (!strcmp(s2,"none")) 
  1173.                   {
  1174.                  numm=0;
  1175.                   }
  1176.                 else if (!strcmp(s2,"shift")) 
  1177.                   {
  1178.                  numm=1;
  1179.                   }
  1180.                 else if (!strcmp(s2,"ctrl")) 
  1181.                   {
  1182.                  numm=2;
  1183.                   }
  1184.                 else if (!strcmp(s2,"alt")) 
  1185.                   {
  1186.                  numm=3;
  1187.                   }
  1188.                 else 
  1189.                   {
  1190.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1191.                      "action modifier",s2,
  1192.                      "none,shift,ctrl,alt",
  1193.                      "none");Alert(ss);
  1194.                  numm=0;
  1195.                   }
  1196.                 if (!strcmp(s3,"iconify")) 
  1197.                   {
  1198.                  icfg.action[num-1][numm].id=3;
  1199.                   }
  1200.                 else if (!strcmp(s3,"kill")) 
  1201.                   {
  1202.                  icfg.action[num-1][numm].id=4;
  1203.                   }
  1204.                 else if (!strcmp(s3,"configure")) 
  1205.                   {
  1206.                  icfg.action[num-1][numm].id=11;
  1207.                   }
  1208.                 else if (!strcmp(s3,"menu")) 
  1209.                   {
  1210.                  icfg.action[num-1][numm].id=12;
  1211.                  strcpy(icfg.action[num-1][numm].params,s4);
  1212.                   }
  1213.                 else if (!strcmp(s3,"exec")) 
  1214.                   {
  1215.                  icfg.action[num-1][numm].id=13;
  1216.                  strcpy(icfg.action[num-1][numm].params,s4);
  1217.                   }
  1218.                 else if (!strcmp(s3,"kill_nasty")) 
  1219.                   {
  1220.                  icfg.action[num-1][numm].id=15;
  1221.                   }
  1222.                 else if (!strcmp(s3,"none")) 
  1223.                   {
  1224.                  icfg.action[num-1][numm].id=255;
  1225.                   }
  1226.                 else
  1227.                   {
  1228.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1229.                      "action",s3,
  1230.                      "iconify,configure,menu,exec,kill_nasty,none",
  1231.                      "NOTHING");Alert(ss);
  1232.                   }
  1233.              }
  1234.                else
  1235.              {
  1236.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1237.                     "action button ","!",
  1238.                     "1,2,3",
  1239.                     "NOTHING");Alert(ss);
  1240.              }
  1241.             }
  1242.            }
  1243.          if(nest_stack[nest_level]==CTXT_ROOT)
  1244.            {
  1245.           if (!strcmp(s1,"backgroundimage"))
  1246.             {
  1247.                done=1;
  1248.                sscanf(s,"%s %i %i %s",s1,&num,&numm,s2);
  1249.                cfg.root_width=num;
  1250.                cfg.root_height=numm;
  1251.                strcpy(cfg.root_pname,s2);
  1252.             }
  1253.            }
  1254.          if(nest_stack[nest_level]==CTXT_INFOBOX)
  1255.            {
  1256.           if (!strcmp(s1,"status"))
  1257.             {
  1258.                done=1;
  1259.                sscanf(s,"%s %s",s1,s2);
  1260.                if (!strcmp(s2,"on")) ifb.on=1;
  1261.                else ifb.on=0;
  1262.             }
  1263.           else if (!strcmp(s1,"size"))
  1264.             {
  1265.                done=1;
  1266.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  1267.                ifb.width=num1;
  1268.                ifb.height=num2;
  1269.             }
  1270.           else if (!strcmp(s1,"key_width"))
  1271.             {
  1272.                done=1;
  1273.                sscanf(s,"%s %i",s1,&num);
  1274.                ifb.key_width=num;
  1275.             }
  1276.           else if (!strcmp(s1,"mouse_width"))
  1277.             {
  1278.                done=1;
  1279.                sscanf(s,"%s %i",s1,&num);
  1280.                ifb.mouse_width=num;
  1281.             }
  1282.           else if (!strcmp(s1,"timeout"))
  1283.             {
  1284.                done=1;
  1285.                sscanf(s,"%s %i",s1,&num);
  1286.                ifb.timeout=num;
  1287.             }
  1288.           else if (!strcmp(s1,"image"))
  1289.             {
  1290.                sscanf(s,"%s %s %s %i %i %i",s1,s2,s3,&num1,&num2,&num3);
  1291.                icl.r=num1;
  1292.                icl.g=num2;
  1293.                icl.b=num3;
  1294.                if (!strcmp(s2,"shift"))
  1295.              {
  1296.                 done=1;
  1297.                 LoadImageSizeWithImlib(s3,&icl,&pmap,&mask,ifb.key_width,ifb.height);
  1298.                 ifb.k2_pmap=pmap;
  1299.                 ifb.k2_mask=mask;
  1300.              }
  1301.                if (!strcmp(s2,"ctrl"))
  1302.              {
  1303.                 done=1;
  1304.                 LoadImageSizeWithImlib(s3,&icl,&pmap,&mask,ifb.key_width,ifb.height);
  1305.                 ifb.k3_pmap=pmap;
  1306.                 ifb.k3_mask=mask;
  1307.              }
  1308.                if (!strcmp(s2,"alt"))
  1309.              {
  1310.                 done=1;
  1311.                 LoadImageSizeWithImlib(s3,&icl,&pmap,&mask,ifb.key_width,ifb.height);
  1312.                 ifb.k4_pmap=pmap;
  1313.                 ifb.k4_mask=mask;
  1314.              }
  1315.                if (!strcmp(s2,"mouse1"))
  1316.              {
  1317.                 done=1;
  1318.                 LoadImageSizeWithImlib(s3,&icl,&pmap,&mask,ifb.mouse_width,ifb.height);
  1319.                 ifb.m1_pmap=pmap;
  1320.                 ifb.m1_mask=mask;
  1321.              }
  1322.                if (!strcmp(s2,"mouse2"))
  1323.              {
  1324.                 done=1;
  1325.                 LoadImageSizeWithImlib(s3,&icl,&pmap,&mask,ifb.mouse_width,ifb.height);
  1326.                 ifb.m2_pmap=pmap;
  1327.                 ifb.m2_mask=mask;
  1328.              }
  1329.                if (!strcmp(s2,"mouse3"))
  1330.              {
  1331.                 done=1;
  1332.                 LoadImageSizeWithImlib(s3,&icl,&pmap,&mask,ifb.mouse_width,ifb.height);
  1333.                 ifb.m3_pmap=pmap;
  1334.                 ifb.m3_mask=mask;
  1335.              }
  1336.             }
  1337.            }
  1338.          if(nest_stack[nest_level]==CTXT_PREDEF_ICON)
  1339.            {
  1340.           if (!strcmp(s1,"title"))
  1341.             {
  1342.                int ii,jj;
  1343.                int copy;
  1344.                
  1345.                done=1;
  1346.                copy=0;
  1347.                jj=0;
  1348.                pdl.title=malloc(strlen(s));
  1349.                for (ii=0;ii<strlen(s);ii++)
  1350.              {
  1351.                 if (!copy)
  1352.                   {
  1353.                  if (s[ii]=='"') copy=1;
  1354.                   }
  1355.                 else
  1356.                   {
  1357.                  if (s[ii]=='"') copy=0;
  1358.                  else pdl.title[jj++]=s[ii];
  1359.                   }
  1360.              }
  1361.                pdl.title[jj]=0;
  1362.             }
  1363.           if (!strcmp(s1,"image"))
  1364.             {
  1365.                done=1;
  1366.                sscanf(s,"%s %s %s %s %i %i %i",s1,s2,s3,s4,&num1,&num2,&num3);
  1367.                pdl.image_file=malloc(strlen(s2)+1);
  1368.                strcpy(pdl.image_file,s2);
  1369.                if (!strcmp("on",s4))
  1370.              {
  1371.                 pdl.transp=malloc(sizeof(ImColor));
  1372.                 pdl.transp->r=num1;
  1373.                 pdl.transp->g=num2;
  1374.                 pdl.transp->b=num3;
  1375.              }
  1376.                else
  1377.              pdl.transp=NULL;
  1378.             }
  1379.            }
  1380.          if(nest_stack[nest_level]==CTXT_FX)
  1381.            {
  1382.           if (!strcmp(s1,"shadow"))
  1383.             {
  1384.                sscanf(s,"%s %s",s1,s2);
  1385.                if (!strcmp(s2,"state"))
  1386.              {
  1387.                 done=1;
  1388.                 sscanf(s,"%s %s %s",s1,s2,s3);
  1389.                 if (!strcmp(s3,"on")) fx.shadow.on=1;
  1390.              }
  1391.                if (!strcmp(s2,"dist"))
  1392.              {
  1393.                 done=1;
  1394.                 sscanf(s,"%s %s %i %i",s1,s2,&num1,&num2);
  1395.                 fx.shadow.x=num1;
  1396.                 fx.shadow.y=num2;
  1397.              }
  1398.                if (!strcmp(s2,"color"))
  1399.              {
  1400.                 done=1;
  1401.                 sscanf(s,"%s %s %i %i %i",s1,s2,&num1,&num2,&num3);
  1402.                 fx.shadow.r=num1;
  1403.                 fx.shadow.g=num2;
  1404.                 fx.shadow.b=num3;
  1405.              }
  1406.             }
  1407.            }
  1408.          if(nest_stack[nest_level]==CTXT_CURSORS)
  1409.            {
  1410.           if (!strcmp(s1,"num"))
  1411.             {
  1412.                sscanf(s,"%s %s",s1,s2);
  1413.                if (!strcmp(s2,"fg_color"))
  1414.              {
  1415.                 sscanf(s,"%s %s %i %i %i",s1,s2,&num1,&num2,&num3);
  1416.                 done=1;
  1417.                 ccfg.num_fg_r=num1;
  1418.                 ccfg.num_fg_g=num2;
  1419.                 ccfg.num_fg_b=num3;
  1420.              }
  1421.                else if (!strcmp(s2,"bg_color"))
  1422.              {
  1423.                 sscanf(s,"%s %s %i %i %i",s1,s2,&num1,&num2,&num3);
  1424.                 done=1;
  1425.                 ccfg.num_bg_r=num1;
  1426.                 ccfg.num_bg_g=num2;
  1427.                 ccfg.num_bg_b=num3;
  1428.              }
  1429.                else if (!strcmp(s2,"font_size"))
  1430.              {
  1431.                 sscanf(s,"%s %s %i",s1,s2,&num);
  1432.                 ccfg.num_size=num;
  1433.                 done=1;
  1434.              }
  1435.             }
  1436.            }
  1437.          if(nest_stack[nest_level]==CTXT_TEXT)
  1438.            {
  1439.           if (!strcmp(s1,"fontface"))
  1440.             {
  1441.                done=1;
  1442.                sscanf(s,"%s %s",s1,s2);
  1443.                cfg.font=malloc(sizeof(char)*(strlen(s2)+1));
  1444.                strcpy(cfg.font,s2);
  1445.             }
  1446.           else if (!strcmp(s1,"style"))
  1447.             {
  1448.                done=1;
  1449.                sscanf(s,"%s %s",s1,s2);
  1450.                if (!strcmp(s2,"bold")) cfg.font_style|=BOLD;
  1451.                if (!strcmp(s2,"italic")) cfg.font_style|=ITALIC;
  1452.             }
  1453.           else if (!strcmp(s1,"appearance"))
  1454.             {
  1455.                done=1;
  1456.                sscanf(s,"%s %s",s1,s2);
  1457.                if (!strcmp(s2,"plain")) ;
  1458.                if (!strcmp(s2,"outline")) cfg.font_style|=OUTLINE;
  1459.                if (!strcmp(s2,"shadow")) cfg.font_style|=SHADOW;
  1460.             }
  1461.           else if (!strcmp(s1,"justification"))
  1462.             {
  1463.                done=1;
  1464.                sscanf(s,"%s %s",s1,s2);
  1465.                if (!strcmp(s2,"left")) ;
  1466.                if (!strcmp(s2,"center")) cfg.font_style|=J_CENTER;
  1467.                if (!strcmp(s2,"right")) cfg.font_style|=J_RIGHT;
  1468.             }
  1469.           else if (!strcmp(s1,"foreground"))
  1470.             {
  1471.                done=1;
  1472.                sscanf(s,"%s %i %i %i",s1,&num1,&num2,&num3);
  1473.                cfg.font_fg=ImlibBestColorMatch(imd,&num1,&num2,&num3);
  1474.             }
  1475.           else if (!strcmp(s1,"background"))
  1476.             {
  1477.                done=1;
  1478.                sscanf(s,"s %i %i %i",s1,&num1,&num2,&num3);
  1479.                cfg.font_bg=ImlibBestColorMatch(imd,&num1,&num2,&num3);
  1480.             }
  1481.            }
  1482.          if(nest_stack[nest_level]==CTXT_STATUS)
  1483.            {
  1484.           if (!strcmp(s1,"icons"))
  1485.             {
  1486.                done=1;
  1487.                sscanf(s,"%s %s",s1,s2);
  1488.                if (!strcmp(s2,"background"))
  1489.              {
  1490.                 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);
  1491.                 scfg.icons_x=num1;
  1492.                 scfg.icons_y=num2;
  1493.                 scfg.icons_w=num3;
  1494.                 scfg.icons_h=num4;
  1495.                 scfg.icons_bg=malloc(strlen(s2)+1);
  1496.                 strcpy(scfg.icons_bg,s2);
  1497.                 if (!strcmp(s4,"off")) scfg.icons_icl=NULL;
  1498.                 else
  1499.                   {
  1500.                  scfg.icons_icl=malloc(sizeof(ImColor));
  1501.                  scfg.icons_icl->r=r;
  1502.                  scfg.icons_icl->g=g;
  1503.                  scfg.icons_icl->b=b;
  1504.                   }
  1505.              }
  1506.                else if (!strcmp(s2,"box"))
  1507.              {
  1508.                 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);
  1509.                 scfg.iconsbox_x=num1;
  1510.                 scfg.iconsbox_y=num2;
  1511.                 scfg.iconsbox_w=num3;
  1512.                 scfg.iconsbox_h=num4;
  1513.                 scfg.iconsbox_bg=malloc(strlen(s2)+1);
  1514.                 strcpy(scfg.iconsbox_bg,s2);
  1515.                 if (!strcmp(s4,"off")) scfg.iconsbox_icl=NULL;
  1516.                 else
  1517.                   {
  1518.                  scfg.iconsbox_icl=malloc(sizeof(ImColor));
  1519.                  scfg.iconsbox_icl->r=r;
  1520.                  scfg.iconsbox_icl->g=g;
  1521.                  scfg.iconsbox_icl->b=b;
  1522.                   }
  1523.              }
  1524.             }
  1525.           else if (!strcmp(s1,"text"))
  1526.             {
  1527.                done=1;
  1528.                sscanf(s,"%s %s",s1,s2);
  1529.                if (!strcmp(s2,"background"))
  1530.              {
  1531.                 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);
  1532.                 scfg.text_x=num1;
  1533.                 scfg.text_y=num2;
  1534.                 scfg.text_w=num3;
  1535.                 scfg.text_h=num4;
  1536.                 scfg.text_bg=malloc(strlen(s2)+1);
  1537.                 strcpy(scfg.text_bg,s2);
  1538.                 if (!strcmp(s4,"off")) scfg.text_icl=NULL;
  1539.                 else
  1540.                   {
  1541.                  scfg.text_icl=malloc(sizeof(ImColor));
  1542.                  scfg.text_icl->r=r;
  1543.                  scfg.text_icl->g=g;
  1544.                  scfg.text_icl->b=b;
  1545.                   }
  1546.              }
  1547.                else if (!strcmp(s2,"box"))
  1548.              {
  1549.                 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);
  1550.                 scfg.textbox_x=num1;
  1551.                 scfg.textbox_y=num2;
  1552.                 scfg.textbox_w=num3;
  1553.                 scfg.textbox_h=num4;
  1554.                 scfg.textbox_bg=malloc(strlen(s2)+1);
  1555.                 strcpy(scfg.textbox_bg,s2);
  1556.                 if (!strcmp(s4,"off")) scfg.textbox_icl=NULL;
  1557.                 else
  1558.                   {
  1559.                  scfg.textbox_icl=malloc(sizeof(ImColor));
  1560.                  scfg.textbox_icl->r=r;
  1561.                  scfg.textbox_icl->g=g;
  1562.                  scfg.textbox_icl->b=b;
  1563.                   }
  1564.              }
  1565.             }
  1566.            }
  1567.          if(nest_stack[nest_level]==CTXT_MENU)
  1568.            {
  1569.           if (!strcmp(s1,"name"))
  1570.             {
  1571.                done=1;
  1572.                sscanf(s,"%s %s",s1,s2);
  1573.                strncpy(mm.name,s2,255);
  1574.             }
  1575.           else if (!strcmp(s1,"type"))
  1576.             {
  1577.                sscanf(s,"%s %s",s1,s2);
  1578.                if (!strcmp(s2,"custom"))
  1579.              {
  1580.                 done=1;
  1581.                 mm.type=MENU_CUSTOM;
  1582.              }
  1583.             }
  1584.           else if (!strcmp(s1,"dimensions"))
  1585.             {
  1586.                done=1;
  1587.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  1588.                mm.width=num1;
  1589.                mm.height=num2;
  1590.             }
  1591.           else if (!strcmp(s1,"popupdist"))
  1592.             {
  1593.                done=1;
  1594.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  1595.                mm.popup_x=num1;
  1596.                mm.popup_y=num2;
  1597.             }
  1598.           else if (!strcmp(s1,"items"))
  1599.             {
  1600.                done=1;
  1601.                sscanf(s,"%s %i",s1,&num);
  1602.                menu=CreateMenu(mm.name,mm.type,num);
  1603.                menu->width=mm.width;
  1604.                menu->height=mm.height;
  1605.                menu->popup_x=mm.popup_x;
  1606.                menu->popup_y=mm.popup_y;
  1607.             }
  1608.            }
  1609.          if(nest_stack[nest_level]==CTXT_MENUITEM)
  1610.            {
  1611.           if (!strcmp(s1,"text"))
  1612.             {
  1613.                done=1;
  1614.                s2[0]=0;
  1615.                sscanf(s,"%s %s",s1,s2);
  1616.                if (s2[0])
  1617.              {
  1618.                 mmi.text=malloc(strlen(s)+1);
  1619.                 strcpy(mmi.text,strstr(s,s2));
  1620.              }
  1621.             }
  1622.           else if (!strcmp(s1,"type"))
  1623.             {
  1624.                sscanf(s,"%s %s",s1,s2);
  1625.                if (!strcmp(s2,"decor")) 
  1626.              {
  1627.                 done=1;
  1628.                 mmi.type=DECOR;
  1629.              }
  1630.                else if (!strcmp(s2,"element")) 
  1631.              {
  1632.                 done=1;
  1633.                 mmi.type=ELEMENT;
  1634.              }
  1635.             }
  1636.           else if (!strcmp(s1,"location"))
  1637.             {
  1638.                done=1;
  1639.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  1640.                mmi.x=num1;
  1641.                mmi.y=num2;
  1642.             }
  1643.           else if (!strcmp(s1,"size"))
  1644.             {
  1645.                done=1;
  1646.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  1647.                mmi.width=num1;
  1648.                mmi.height=num2;
  1649.             }
  1650.           else if (!strcmp(s1,"text_location"))
  1651.             {
  1652.                done=1;
  1653.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  1654.                tx_x=num1;
  1655.                tx_y=num2;
  1656.             }
  1657.           else if (!strcmp(s1,"text_size"))
  1658.             {
  1659.                done=1;
  1660.                sscanf(s,"%s %i %i",s1,&num1,&num2);
  1661.                tx_w=num1;
  1662.                tx_h=num2;
  1663.             }
  1664.           else if (!strcmp(s1,"image"))
  1665.             {
  1666.                done=1;
  1667.                s1[0]=0;s2[0]=0;s3[0]=0;s4[0]=0;s5[0]=0;
  1668.                sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  1669.                if ((s1[0])&&(s2[0])&&(s3[0])&&(s4[0])&&(s5[0]))
  1670.              {
  1671.                 if (!strcmp(s2,"unselected"))
  1672.                   {
  1673.                  strcpy(m_unsel,s3);
  1674.                  if (!strcmp(s5,"on"))
  1675.                    {
  1676.                       m_unsel_icl.r=num1;
  1677.                       m_unsel_icl.g=num2;
  1678.                       m_unsel_icl.b=num3;
  1679.                    }
  1680.                  else
  1681.                    {
  1682.                       m_unsel_icl.r=-1;
  1683.                       m_unsel_icl.g=-1;
  1684.                       m_unsel_icl.b=-1;
  1685.                    }
  1686.                   }
  1687.                 else if (!strcmp(s2,"selected"))
  1688.                   {
  1689.                  strcpy(m_sel,s3);
  1690.                  if (!strcmp(s5,"on"))
  1691.                    {
  1692.                       m_sel_icl.r=num1;
  1693.                       m_sel_icl.g=num2;
  1694.                       m_sel_icl.b=num3;
  1695.                    }
  1696.                  else
  1697.                    {
  1698.                       m_sel_icl.r=-1;
  1699.                       m_sel_icl.g=-1;
  1700.                       m_sel_icl.b=-1;
  1701.                    }
  1702.                   }
  1703.              }
  1704.             }
  1705.           else if (!strcmp(s1,"action"))
  1706.             {
  1707.                done=1;
  1708.                mi=CreateMenuItem(mmi.type,mmi.x,mmi.y,mmi.width,
  1709.                      mmi.height,mmi.text,tx_x,tx_y,
  1710.                      tx_w,tx_h,m_unsel,&m_unsel_icl,
  1711.                      m_sel,&m_sel_icl);
  1712.                if (mmi.text) 
  1713.              {
  1714.                 free(mmi.text);
  1715.                 mmi.text=NULL;
  1716.              }
  1717.                sscanf(s,"%s %s %s",s1,s2,s3);
  1718.                if (!strcmp(s2,"configure")) 
  1719.              {
  1720.                 mi->action.id=11;
  1721.              }
  1722.                else if (!strcmp(s2,"menu")) 
  1723.              {
  1724.                 mi->action.id=12;
  1725.                 strcpy(mi->action.params,s3);
  1726.              }
  1727.                else if (!strcmp(s2,"exec")) 
  1728.              {
  1729.                 mi->action.id=13;
  1730.                 strcpy(mi->action.params,strstr(s,s3));
  1731.              }
  1732.                else if (!strcmp(s2,"exit")) 
  1733.              {
  1734.                 mi->action.id=14;
  1735.              }
  1736.                else if (!strcmp(s2,"restart")) 
  1737.              {
  1738.                 mi->action.id=16;
  1739.              }
  1740.                else if (!strcmp(s2,"restart_theme")) 
  1741.              {
  1742.                 strcpy(mi->action.params,strstr(s,s3));
  1743.                 mi->action.id=17;
  1744.              }
  1745.                else if (!strcmp(s2,"background")) 
  1746.              {
  1747.                 strcpy(mi->action.params,strstr(s,s3));
  1748.                 mi->action.id=18;
  1749.              }
  1750.                else if (!strcmp(s2,"none")) 
  1751.              {
  1752.                 mi->action.id=255;
  1753.              }
  1754.             }
  1755.            }
  1756.          if(nest_stack[nest_level]==CTXT_BUTTONS)
  1757.            {
  1758.            }
  1759.          if(nest_stack[nest_level]==CTXT_BUTTON)
  1760.            {
  1761.           if (!strcmp(s1,"location"))
  1762.             {
  1763.                done=1;
  1764.                sscanf(s,"%s %s %i %i",s1,s2,&num,&numm);
  1765.                if (!strcmp(s2,"topleft"))
  1766.              bwin->win=XCreateSimpleWindow(disp,root,num,numm,
  1767.                                b_maxw,b_maxh,0,0,0);
  1768.                else if (!strcmp(s2,"topright"))
  1769.              bwin->win=XCreateSimpleWindow(disp,root,(DisplayWidth(disp,screen)-b_maxw)-num,numm,
  1770.                                b_maxw,b_maxh,0,0,0);
  1771.                else if (!strcmp(s2,"bottomleft"))
  1772.              bwin->win=XCreateSimpleWindow(disp,root,num,(DisplayHeight(disp,screen)-b_maxh)-numm,
  1773.                                b_maxw,b_maxh,0,0,0);
  1774.                else if (!strcmp(s2,"bottomright"))
  1775.              bwin->win=XCreateSimpleWindow(disp,root,(DisplayWidth(disp,screen)-b_maxw)-num,(DisplayHeight(disp,screen)-b_maxh)-numm,
  1776.                                b_maxw,b_maxh,0,0,0);
  1777.                else
  1778.              {
  1779.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1780.                     "button location",s2,
  1781.                     "topleft,topright,bottomleft,bottomright",
  1782.                     "topleft");Alert(ss);
  1783.                 bwin->win=XCreateSimpleWindow(disp,root,num,numm,
  1784.                               b_maxw,b_maxh,0,0,0);
  1785.              }
  1786.                XSelectInput(disp,bwin->win,LeaveWindowMask|
  1787.                     EnterWindowMask|SubstructureNotifyMask|
  1788.                     PropertyChangeMask|SubstructureRedirectMask);
  1789.                bwin->state=BTN_NORM;
  1790.                ButtonDraw(bwin);
  1791.             }
  1792.           else if (!strcmp(s1,"image"))
  1793.             {
  1794.                done=1;
  1795.                sscanf(s,"%s %s",s1,s2);
  1796.                if (!strcmp(s2,"clicked")) 
  1797.              {
  1798.                 sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  1799.                 if (!strcmp(s4,"shapecolor"))
  1800.                   {
  1801.                  if (!strcmp(s5,"on"))
  1802.                    {icl.r=num1;icl.g=num2;icl.b=num3;}
  1803.                  else if (!strcmp(s5,"off"))
  1804.                    {icl.r=-1;icl.g=-1;icl.b=-1;}
  1805.                  else
  1806.                    {
  1807.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1808.                           "image shapecolor",s5,
  1809.                           "on,off",
  1810.                           "off");Alert(ss);
  1811.                       icl.r=-1;icl.g=-1;icl.b=-1;
  1812.                    }
  1813.                   }
  1814.                 else
  1815.                   {
  1816.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1817.                      "image",s4,
  1818.                      "shapecolor",
  1819.                      "shapecolor off");Alert(ss);
  1820.                  icl.r=-1;icl.g=-1;icl.b=-1;
  1821.                   }
  1822.                 im=LoadImage(imd,s3,&icl);
  1823.                 if (!im) 
  1824.                   {
  1825.                  sprintf(ss,"PANIC!\nERROR.........\nCannot Load image:\n%s\nQuitting..\n",s3
  1826.                      );Alert(ss);
  1827.                  exit(1);
  1828.                   }
  1829.                 ImlibRender(imd,im,im->rgb_width,im->rgb_height);
  1830.                 bwin->click_pmap=ImlibMoveImageToPixmap(imd,im);
  1831.                 bwin->click_mask=ImlibMoveMaskToPixmap(imd,im);
  1832.                 if (im->rgb_width>b_maxw) b_maxw=im->rgb_width;
  1833.                 if (im->rgb_height>b_maxh) b_maxh=im->rgb_height;
  1834.                 ImlibDestroyImage(imd,im);
  1835.              }
  1836.                else if (!strcmp(s2,"selected")) 
  1837.              {
  1838.                 sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  1839.                 if (!strcmp(s4,"shapecolor"))
  1840.                   {
  1841.                  if (!strcmp(s5,"on"))
  1842.                    {icl.r=num1;icl.g=num2;icl.b=num3;}
  1843.                  else if (!strcmp(s5,"off"))
  1844.                    {icl.r=-1;icl.g=-1;icl.b=-1;}
  1845.                  else
  1846.                    {
  1847.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1848.                           "image shapecolor",s5,
  1849.                           "on,off",
  1850.                           "off");Alert(ss);
  1851.                       icl.r=-1;icl.g=-1;icl.b=-1;
  1852.                    }
  1853.                   }
  1854.                 else
  1855.                   {
  1856.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1857.                      "image",s4,
  1858.                      "shapecolor",
  1859.                      "shapecolor off");Alert(ss);
  1860.                  icl.r=-1;icl.g=-1;icl.b=-1;
  1861.                   }
  1862.                 im=LoadImage(imd,s3,&icl);
  1863.                 if (!im) 
  1864.                   {
  1865.                  sprintf(ss,"PANIC!\nERROR.........\nCannot Load image:\n%s\nQuitting..\n",s3
  1866.                      );Alert(ss);
  1867.                  exit(1);
  1868.                   }
  1869.                 ImlibRender(imd,im,im->rgb_width,im->rgb_height);
  1870.                 bwin->sel_pmap=ImlibMoveImageToPixmap(imd,im);
  1871.                 bwin->sel_mask=ImlibMoveMaskToPixmap(imd,im);
  1872.                 if (im->rgb_width>b_maxw) b_maxw=im->rgb_width;
  1873.                 if (im->rgb_height>b_maxh) b_maxh=im->rgb_height;
  1874.                 ImlibDestroyImage(imd,im);
  1875.              }
  1876.                else if (!strcmp(s2,"unselected")) 
  1877.              {
  1878.                 sscanf(s,"%s %s %s %s %s %i %i %i",s1,s2,s3,s4,s5,&num1,&num2,&num3);
  1879.                 if (!strcmp(s4,"shapecolor"))
  1880.                   {
  1881.                  if (!strcmp(s5,"on"))
  1882.                    {icl.r=num1;icl.g=num2;icl.b=num3;}
  1883.                  else if (!strcmp(s5,"off"))
  1884.                    {icl.r=-1;icl.g=-1;icl.b=-1;}
  1885.                  else
  1886.                    {
  1887.                       sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1888.                           "image shapecolor",s5,
  1889.                           "on,off",
  1890.                           "off");Alert(ss);
  1891.                       icl.r=-1;icl.g=-1;icl.b=-1;
  1892.                    }
  1893.                   }
  1894.                 else
  1895.                   {
  1896.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1897.                      "image",s4,
  1898.                      "shapecolor",
  1899.                      "shapecolor off");Alert(ss);
  1900.                  icl.r=-1;icl.g=-1;icl.b=-1;
  1901.                   }
  1902.                 im=LoadImage(imd,s3,&icl);
  1903.                 if (!im) 
  1904.                   {
  1905.                  sprintf(ss,"PANIC!\nERROR.........\nCannot Load image:\n%s\nQuitting..\n",s3
  1906.                      );Alert(ss);
  1907.                  exit(1);
  1908.                   }
  1909.                 ImlibRender(imd,im,im->rgb_width,im->rgb_height);
  1910.                 bwin->unsel_pmap=ImlibMoveImageToPixmap(imd,im);
  1911.                 bwin->unsel_mask=ImlibMoveMaskToPixmap(imd,im);
  1912.                 if (im->rgb_width>b_maxw) b_maxw=im->rgb_width;
  1913.                 if (im->rgb_height>b_maxh) b_maxh=im->rgb_height;
  1914.                 ImlibDestroyImage(imd,im);
  1915.              }
  1916.                else 
  1917.              {
  1918.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1919.                     "image detail",s2,
  1920.                     "clicked,selected,unselected",
  1921.                     "NOTHING");Alert(ss);
  1922.              }
  1923.             }
  1924.           else if (!strcmp(s1,"level"))
  1925.             {
  1926.                done=1;
  1927.                sscanf(s,"%s %s",s1,s2);
  1928.                if (!strcmp(s2,"above")) bwin->above=1;
  1929.                else if (!strcmp(s2,"below")) bwin->above=0;
  1930.                else 
  1931.              {
  1932.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1933.                     "level",s2,
  1934.                     "above,below",
  1935.                     "below");Alert(ss);
  1936.                 bwin->above=0;
  1937.              }
  1938.             }
  1939.           else if (!strcmp(s1,"action"))
  1940.             {
  1941.                done=1;
  1942.                sscanf(s,"%s %s %i %s %s",s1,s2,&num,s3,s4);
  1943.                if ((num>0)&&(num<4))
  1944.              {
  1945.                 if (!strcmp(s2,"none")) 
  1946.                   {
  1947.                  numm=0;
  1948.                   }
  1949.                 else if (!strcmp(s2,"shift")) 
  1950.                   {
  1951.                  numm=1;
  1952.                   }
  1953.                 else if (!strcmp(s2,"ctrl")) 
  1954.                   {
  1955.                  numm=2;
  1956.                   }
  1957.                 else if (!strcmp(s2,"alt")) 
  1958.                   {
  1959.                  numm=3;
  1960.                   }
  1961.                 else 
  1962.                   {
  1963.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  1964.                      "action modifier",s2,
  1965.                      "none,shift,ctrl,alt",
  1966.                      "none");Alert(ss);
  1967.                  numm=0;
  1968.                   }
  1969.                 if (!strcmp(s3,"configure")) 
  1970.                   {
  1971.                  bwin->action[num-1][numm].id=11;
  1972.                   }
  1973.                 else if (!strcmp(s3,"menu")) 
  1974.                   {
  1975.                  bwin->action[num-1][numm].id=12;
  1976.                  strcpy(bwin->action[num-1][numm].params,s4);
  1977.                   }
  1978.                 else if (!strcmp(s3,"exec")) 
  1979.                   {
  1980.                  bwin->action[num-1][numm].id=13;
  1981.                  strcpy(bwin->action[num-1][numm].params,strstr(s,s4));
  1982.                   }
  1983.                 else if (!strcmp(s3,"exit")) 
  1984.                   {
  1985.                  bwin->action[num-1][numm].id=14;
  1986.                   }
  1987.                 else if (!strcmp(s3,"restart")) 
  1988.                   {
  1989.                  bwin->action[num-1][numm].id=16;
  1990.                   }
  1991.                 else if (!strcmp(s3,"restart_theme")) 
  1992.                   {
  1993.                  strcpy(bwin->action[num-1][numm].params,strstr(s,s4));
  1994.                  bwin->action[num-1][numm].id=17;
  1995.                   }
  1996.                 else if (!strcmp(s2,"background")) 
  1997.                   {
  1998.                  strcpy(bwin->action[num-1][numm].params,strstr(s,s3));
  1999.                  bwin->action[num-1][numm].id=18;
  2000.                   }
  2001.                 else if (!strcmp(s3,"none")) 
  2002.                   {
  2003.                  bwin->action[num-1][numm].id=255;
  2004.                   }
  2005.                 else
  2006.                   {
  2007.                  sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2008.                      "action",s3,
  2009.                      "configure,menu,exec,restart,none",
  2010.                      "none");Alert(ss);
  2011.                   }
  2012.              }
  2013.                else
  2014.              {
  2015.                 sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2016.                     "action button ","!",
  2017.                     "1,2,3",
  2018.                     "NOTHING");Alert(ss);
  2019.              }
  2020.             }
  2021.            }
  2022.       }
  2023.     if (!done)
  2024.       {
  2025.          sprintf(ss,"SYNTAX ERROR!\nFile: %s, Line %i: ERROR.........\n---> %s\nUnknown %s mode %s.\nAllowed: [%s]\n Assuming %s.\n",file,line,s,
  2026.              "Unrecognised Keyword",s1,
  2027.              "Nothing Else",
  2028.              "corrupt config file");Alert(ss);
  2029.          exit(1);
  2030.       }
  2031.     done=0;
  2032.      }
  2033.    if (nest_level>0)
  2034.      {
  2035.     sprintf(ss,"WARNING!\nFile: %s, Line %i: ERROR.........\nPremature EOF.\n Section begun wiht begin not terminated with end.\n",file,line
  2036.         );Alert(ss);
  2037.      }
  2038.    fclose(f);
  2039.    for (i=0;i<cfg.num_subwins;i++)
  2040.      {
  2041.     cfg.subwin_img_clk[i]=LoadImage(imd,cfg.subwin_pmname_clk[i],&cfg.subwin_transp_clk[i]);
  2042.     if (!cfg.subwin_img_clk[i]) 
  2043.       {
  2044.          sprintf(ss,"PANIC!\nERROR.........\nCannot Load image:\n%s\nQuitting..\n",cfg.subwin_pmname_clk[i]
  2045.              );Alert(ss);
  2046.          exit(1);
  2047.       }
  2048.     cfg.subwin_img_sel[i]=LoadImage(imd,cfg.subwin_pmname_sel[i],&cfg.subwin_transp_sel[i]);
  2049.     if (!cfg.subwin_img_sel[i]) 
  2050.       {
  2051.          sprintf(ss,"PANIC!\nERROR.........\nCannot Load image:\n%s\nQuitting..\n",cfg.subwin_pmname_sel[i]
  2052.              );Alert(ss);
  2053.          exit(1);
  2054.       }
  2055.     cfg.subwin_img_uns[i]=LoadImage(imd,cfg.subwin_pmname_uns[i],&cfg.subwin_transp_uns[i]);
  2056.     if (!cfg.subwin_img_uns[i]) 
  2057.       {
  2058.          sprintf(ss,"PANIC!\nERROR.........\nCannot Load image:\n%s\nQuitting..\n",cfg.subwin_pmname_uns[i]
  2059.              );Alert(ss);
  2060.          exit(1);
  2061.       }
  2062.      }
  2063. }
  2064.  
  2065.