void WinList_fs2config( ASModuleConfig *asmodule_config, FreeStorageElem *Storage ) { FreeStorageElem *pCurr; ConfigItem item; WinListConfig *config = AS_WINLIST_CONFIG(asmodule_config) ; if( config == NULL ) return ; item.memory = NULL; for (pCurr = Storage; pCurr; pCurr = pCurr->next) { if (pCurr->term == NULL) continue; if (pCurr->term->type == TT_FLAG) { if( pCurr->term->id == WINLIST_Bevel_ID ) { set_scalar_value(&(config->FBevel),ParseBevelOptions( pCurr->sub ), &(config->set_flags), WINLIST_Bevel); config->UBevel = config->SBevel = config->FBevel; } }else { if (!ReadConfigItem (&item, pCurr)) continue; switch (pCurr->term->id) { case WINLIST_Spacing_ID : set_flags( config->set_flags, WINLIST_Spacing ); config->HSpacing = config->VSpacing = item.data.integer; break ; case WINLIST_CompositionMethod_ID : set_flags( config->set_flags, WINLIST_CompositionMethod ); config->FCompositionMethod = config->UCompositionMethod = config->SCompositionMethod = item.data.integer; break ; case WINLIST_MaxWidth_ID: set_flags (config->set_flags, WINLIST_MinSize|WINLIST_MaxSize); config->MaxSize.width = config->MinSize.width = item.data.integer; break; case WINLIST_Action_ID: { char *ptr = item.data.string; int action_no = 0, i; if (mystrncasecmp (ptr, "Click", 5) == 0) ptr += 5; if (isdigit (ptr[0])) { action_no = atoi (ptr); if (action_no <= 0) action_no = 1; --action_no; action_no %= MAX_MOUSE_BUTTONS; i = 0; while (!isspace (ptr[i]) && ptr[i]) ++i; while (isspace (ptr[i]) && ptr[i]) ++i; ptr += i; } if (*ptr) { destroy_string_list( config->Action[action_no], 0 ); config->Action[action_no] = comma_string2list( ptr ); } item.ok_to_free = 1; } break; #define HANDLE_COLLIDES_ITEM(type) \ if( item.data.string != NULL ) { \ config->type##Collides = saferealloc( config->type##Collides, (config->type##Collides_nitems+1)*sizeof(char*)); \ config->type##Collides[config->type##Collides_nitems] = item.data.string ; \ ++config->type##Collides_nitems ; } break case WINLIST_NoCollides_ID: HANDLE_COLLIDES_ITEM(No); case WINLIST_AllowCollides_ID: HANDLE_COLLIDES_ITEM(Allow); default: item.ok_to_free = 1; } } } ReadConfigItem (&item, NULL); }
/************************************************************************** see if the name qualifies as a guest login name **************************************************************************/ bool is_guest_name(const char *name) { return (mystrncasecmp(name, GUEST_NAME, strlen(GUEST_NAME)) == 0); }
/***************************************************************************** * * This routine is responsible for reading and parsing the config file * ****************************************************************************/ void ParseOptions(char *filename) { FILE *fd = (FILE *)0; char line[256]; char *tline,*orig_tline,*tmp; int Clength,n,desk; Scr.FvwmRoot = NULL; Scr.Hilite = NULL; Scr.VScale = 32; Scr.MyDisplayWidth = DisplayWidth(dpy, Scr.screen); Scr.MyDisplayHeight = DisplayHeight(dpy, Scr.screen); Scr.VxMax = 3*Scr.MyDisplayWidth - Scr.MyDisplayWidth; Scr.VyMax = 3*Scr.MyDisplayHeight - Scr.MyDisplayHeight; if(Scr.VxMax <0) Scr.VxMax = 0; if(Scr.VyMax <0) Scr.VyMax = 0; Scr.Vx = 0; Scr.Vy = 0; fd = fopen(filename,"r"); if(fd == (FILE *)0) { fprintf(stderr,"%s: can't open config file %s",MyName,filename); exit(1); } tline = fgets(line,(sizeof line)-1,fd); orig_tline = tline; Clength = strlen(MyName); while(tline != (char *)0) { int g_x, g_y, flags; unsigned width,height; while(isspace(*tline))tline++; if((strlen(&tline[0])>1)&& (mystrncasecmp(tline, CatString3("*", MyName, "Geometry"),Clength+9)==0)) { tmp = &tline[Clength+9]; while(((isspace(*tmp))&&(*tmp != '\n'))&&(*tmp != 0)) { tmp++; } tmp[strlen(tmp)-1] = 0; flags = XParseGeometry(tmp,&g_x,&g_y,&width,&height); if (flags & WidthValue) window_w = width; if (flags & HeightValue) window_h = height; if (flags & XValue) { window_x = g_x; usposition = 1; } if (flags & YValue) { window_y = g_y; usposition = 1; } } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline, CatString3("*", MyName, "IconGeometry"), Clength+13)==0)) { tmp = &tline[Clength+13]; while(((isspace(*tmp))&&(*tmp != '\n'))&&(*tmp != 0)) { tmp++; } tmp[strlen(tmp)-1] = 0; flags = XParseGeometry(tmp,&g_x,&g_y,&width,&height); if (flags & WidthValue) icon_w = width; if (flags & HeightValue) icon_h = height; if (flags & XValue) { icon_x = g_x; } if (flags & YValue) { icon_y = g_y; } } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline,CatString3("*",MyName,"Label"),Clength+6)==0)) { desk = desk1; sscanf(&tline[Clength+6],"%d",&desk); if((desk >= desk1)&&(desk <=desk2)) { n = 0; while(isspace(tline[Clength+6+n]))n++; while(!isspace(tline[Clength+6+n]))n++; free(Desks[desk - desk1].label); CopyString(&Desks[desk - desk1].label,&tline[Clength+6+n]); } } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline, CatString3("*", MyName, "Font"),Clength+5)==0)) { CopyString(&font_string,&tline[Clength+5]); if(mystrncasecmp(font_string,"none",4) == 0) uselabel = 0; } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline, CatString3("*", MyName, "Fore"),Clength+5)==0)) { CopyString(&PagerFore,&tline[Clength+5]); } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline,CatString3("*", MyName, "Back"),Clength+5)==0)) { CopyString(&PagerBack,&tline[Clength+5]); } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline,CatString3("*",MyName,"Hilight"),Clength+8)==0)) { if(Scr.d_depth > 1) CopyString(&HilightC,&tline[Clength+8]); } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline,CatString3("*",MyName,"SmallFont"), Clength+10)==0)) { CopyString(&smallFont,&tline[Clength+10]); } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline,CatString3("*",MyName,"StartIconic"), Clength+12)==0)) { StartIconic = 1; } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline,CatString3("*",MyName,"Rows"), Clength+5)==0)) { sscanf(&tline[Clength+5],"%d",&Rows); } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline,CatString3("*",MyName,"Columns"), Clength+8)==0)) { sscanf(&tline[Clength+8],"%d",&Columns); } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline,"HiBackColor",11)==0)) { if(Scr.d_depth > 1) CopyString(&HiBack,&tline[11]); } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline,"HiForeColor",11)==0)) { if(Scr.d_depth > 1) CopyString(&HiFore,&tline[11]); } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline,"StickyIcons",11)==0)) { StickyIcons = 1; } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline,"DeskTopSize",11)==0)) { sscanf(&tline[11],"%dx%d",&Scr.VxMax,&Scr.VyMax); Scr.VxMax = Scr.VxMax*Scr.MyDisplayWidth - Scr.MyDisplayWidth; Scr.VyMax = Scr.VyMax*Scr.MyDisplayHeight - Scr.MyDisplayHeight; } else if((strlen(&tline[0])>1)&& (mystrncasecmp(tline,"DeskTopScale",12)==0)) { sscanf(&tline[12],"%d",&Scr.VScale); } tline = fgets(line,(sizeof line)-1,fd); orig_tline = tline; } return; }