parse.c revision fb81d040
1645f5050Syouri/*****************************************************************************/ 2645f5050Syouri/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/ 3645f5050Syouri/** Salt Lake City, Utah **/ 4645f5050Syouri/** Portions Copyright 1989 by the Massachusetts Institute of Technology **/ 5645f5050Syouri/** Cambridge, Massachusetts **/ 6645f5050Syouri/** **/ 7645f5050Syouri/** All Rights Reserved **/ 8645f5050Syouri/** **/ 9645f5050Syouri/** Permission to use, copy, modify, and distribute this software and **/ 10645f5050Syouri/** its documentation for any purpose and without fee is hereby **/ 11645f5050Syouri/** granted, provided that the above copyright notice appear in all **/ 12645f5050Syouri/** copies and that both that copyright notice and this permis- **/ 13645f5050Syouri/** sion notice appear in supporting documentation, and that the **/ 14645f5050Syouri/** names of Evans & Sutherland and M.I.T. not be used in advertising **/ 15645f5050Syouri/** in publicity pertaining to distribution of the software without **/ 16645f5050Syouri/** specific, written prior permission. **/ 17645f5050Syouri/** **/ 18645f5050Syouri/** EVANS & SUTHERLAND AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD **/ 19645f5050Syouri/** TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- **/ 20645f5050Syouri/** ABILITY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND OR **/ 21645f5050Syouri/** M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAM- **/ 22645f5050Syouri/** AGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/ 23645f5050Syouri/** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/ 24645f5050Syouri/** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/ 25645f5050Syouri/** OR PERFORMANCE OF THIS SOFTWARE. **/ 26645f5050Syouri/*****************************************************************************/ 27645f5050Syouri/* 28645f5050Syouri * [ ctwm ] 29645f5050Syouri * 30645f5050Syouri * Copyright 1992 Claude Lecommandeur. 31645f5050Syouri * 32645f5050Syouri * Permission to use, copy, modify and distribute this software [ctwm] and 33645f5050Syouri * its documentation for any purpose is hereby granted without fee, provided 34645f5050Syouri * that the above copyright notice appear in all copies and that both that 35645f5050Syouri * copyright notice and this permission notice appear in supporting documen- 36645f5050Syouri * tation, and that the name of Claude Lecommandeur not be used in adverti- 37645f5050Syouri * sing or publicity pertaining to distribution of the software without 38645f5050Syouri * specific, written prior permission. Claude Lecommandeur make no represen- 39645f5050Syouri * tations about the suitability of this software for any purpose. It is 40645f5050Syouri * provided "as is" without express or implied warranty. 41645f5050Syouri * 42645f5050Syouri * Claude Lecommandeur DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 43645f5050Syouri * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO 44645f5050Syouri * EVENT SHALL Claude Lecommandeur BE LIABLE FOR ANY SPECIAL, INDIRECT OR 45645f5050Syouri * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF 46645f5050Syouri * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 47645f5050Syouri * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 48645f5050Syouri * PERFORMANCE OF THIS SOFTWARE. 49645f5050Syouri * 50645f5050Syouri * Author: Claude Lecommandeur [ lecom@sic.epfl.ch ][ April 1992 ] 51645f5050Syouri */ 52645f5050Syouri 53645f5050Syouri 54645f5050Syouri/*********************************************************************** 55645f5050Syouri * 56645f5050Syouri * $XConsortium: parse.c,v 1.52 91/07/12 09:59:37 dave Exp $ 57645f5050Syouri * 58645f5050Syouri * parse the .twmrc file 59645f5050Syouri * 60645f5050Syouri * 17-Nov-87 Thomas E. LaStrange File created 61645f5050Syouri * 10-Oct-90 David M. Sternlicht Storing saved colors on root 62645f5050Syouri * 63645f5050Syouri * Do the necessary modification to be integrated in ctwm. 64645f5050Syouri * Can no longer be used for the standard twm. 65645f5050Syouri * 66645f5050Syouri * 22-April-92 Claude Lecommandeur. 67645f5050Syouri * 68645f5050Syouri ***********************************************************************/ 69645f5050Syouri 70645f5050Syouri#include <stdio.h> 71645f5050Syouri#include <sys/types.h> 72645f5050Syouri#include <sys/wait.h> 73645f5050Syouri#if defined(sony_news) || defined __QNX__ 74645f5050Syouri# include <ctype.h> 75645f5050Syouri#endif 76645f5050Syouri#ifdef VMS 77645f5050Syouri#include <ctype.h> 78645f5050Syouri#include <decw$include/Xos.h> 79645f5050Syouri#include <X11Xmu/CharSet.h> 80645f5050Syouri#include <X11Xmu/SysUtil.h> 81645f5050Syouri#else 82645f5050Syouri#include <X11/Xos.h> 83645f5050Syouri#include <X11/Xmu/CharSet.h> 84645f5050Syouri#include <X11/Xmu/SysUtil.h> 85645f5050Syouri#endif 86645f5050Syouri#include "twm.h" 87645f5050Syouri#include "screen.h" 88645f5050Syouri#include "menus.h" 89645f5050Syouri#include "util.h" 90645f5050Syouri#include "parse.h" 91645f5050Syouri#include "version.h" 92645f5050Syouri#ifdef SOUNDS 93645f5050Syouri# include "sound.h" 94645f5050Syouri#endif 95645f5050Syouri#ifdef VMS 96645f5050Syouri# include <decw$include/Xatom.h> 97645f5050Syouri#else 98645f5050Syouri# include <X11/Xatom.h> 99645f5050Syouri#endif 100645f5050Syouri 101645f5050Syouri/* For m4... */ 102645f5050Syouri#ifdef USEM4 103645f5050Syouri#include <sys/param.h> 104645f5050Syouri#include <sys/types.h> 105645f5050Syouri#include <sys/socket.h> 106645f5050Syouri#include <netdb.h> 107645f5050Syouri 108645f5050Syouriextern int GoThroughM4; 109645f5050Syouriextern char *keepM4_filename; 110645f5050Syouriextern int KeepTmpFile; 111645f5050Syouri#endif 112645f5050Syouri 113645f5050Syouri#if defined(ultrix) 114645f5050Syouri#define NOSTEMP 115645f5050Syouri#endif 116645f5050Syouri 117645f5050Syouri#ifndef SYSTEM_INIT_FILE 118645f5050Syouri#ifdef VMS 119645f5050Syouri#define SYSTEM_INIT_FILE "DECW$SYSTEM_DEFAULTS:SYSTEM.CTWMRC" 120645f5050Syouri#else 121645f5050Syouri#define SYSTEM_INIT_FILE "/usr/lib/X11/twm/system.twmrc" 122645f5050Syouri#endif 123645f5050Syouri#endif 124645f5050Syouri#define BUF_LEN 300 125645f5050Syouri 126645f5050Syouristatic int ParseRandomPlacement (register char *s); 127645f5050Syouristatic int ParseButtonStyle (register char *s); 128645f5050Syouriextern int yyparse(void); 129645f5050Syouriextern void twmrc_error_prefix(void); 130645f5050Syouri 131645f5050Syouristatic FILE *twmrc; 132645f5050Syouristatic int ptr = 0; 133645f5050Syouristatic int len = 0; 134645f5050Syouristatic char buff[BUF_LEN+1]; 135645f5050Syouristatic char overflowbuff[20]; /* really only need one */ 136645f5050Syouristatic int overflowlen; 137645f5050Syouristatic char **stringListSource, *currentString; 138645f5050Syouristatic int ParseUsePPosition (register char *s); 139645f5050Syouri#ifdef USEM4 140645f5050Syouristatic FILE *start_m4(FILE *fraw); 141645f5050Syouristatic char *m4_defs(Display *display, char *host); 142645f5050Syouri#endif 143645f5050Syouri 144645f5050Syouriextern int mods; 145645f5050Syouri 146645f5050Syouriint ConstrainedMoveTime = 400; /* milliseconds, event times */ 147645f5050Syouri 148645f5050Syouriint RaiseDelay = 0; /* msec, for AutoRaise */ 149645f5050Syouri 150645f5050Syouristatic int twmStringListInput(void); 151645f5050Syouri#ifndef USEM4 152645f5050Syouristatic int twmFileInput(void); 153645f5050Syouri#else 154645f5050Syouristatic int m4twmFileInput (void); 155645f5050Syouri#endif 156645f5050Syouriint (*twmInputFunc)(void); 157645f5050Syouri 158645f5050Syouriextern char *defTwmrc[]; /* default bindings */ 159645f5050Syouri 160645f5050Syouriextern char *captivename; 161645f5050Syouri 162645f5050Syouri/*********************************************************************** 163645f5050Syouri * 164645f5050Syouri * Procedure: 165645f5050Syouri * ParseTwmrc - parse the .twmrc file 166645f5050Syouri * 167645f5050Syouri * Inputs: 168645f5050Syouri * filename - the filename to parse. A NULL indicates $HOME/.twmrc 169645f5050Syouri * 170645f5050Syouri *********************************************************************** 171645f5050Syouri */ 172645f5050Syouri 173645f5050Syouri#ifdef YYDEBUG 174645f5050Syouriint yydebug = 1; 175645f5050Syouri#endif 176645f5050Syouri 177645f5050Syouristatic int doparse (int (*ifunc)(void), char *srctypename, char *srcname) 178645f5050Syouri{ 179645f5050Syouri mods = 0; 180645f5050Syouri ptr = 0; 181645f5050Syouri len = 0; 182645f5050Syouri twmrc_lineno = 0; 183645f5050Syouri ParseError = FALSE; 184645f5050Syouri twmInputFunc = ifunc; 185645f5050Syouri overflowlen = 0; 186645f5050Syouri 187645f5050Syouri yyparse(); 188645f5050Syouri 189645f5050Syouri if (ParseError) { 190645f5050Syouri fprintf (stderr, "%s: errors found in twm %s", 191645f5050Syouri ProgramName, srctypename); 192645f5050Syouri if (srcname) fprintf (stderr, " \"%s\"", srcname); 193645f5050Syouri fprintf (stderr, "\n"); 194645f5050Syouri } 195645f5050Syouri return (ParseError ? 0 : 1); 196645f5050Syouri} 197645f5050Syouri 198645f5050Syouri 199645f5050Syouriint ParseTwmrc (char *filename) 200645f5050Syouri{ 201645f5050Syouri int i; 202645f5050Syouri char *home = NULL; 203645f5050Syouri int homelen = 0; 204645f5050Syouri char *cp = NULL; 205645f5050Syouri char tmpfilename[257]; 206645f5050Syouri#ifdef USEM4 207645f5050Syouri static FILE *raw; 208645f5050Syouri#endif 209645f5050Syouri 210645f5050Syouri /* 211645f5050Syouri * Check for the twmrc file in the following order: 212645f5050Syouri * Unix | VMS 213645f5050Syouri * 0. -f filename.# | -f filename_# 214645f5050Syouri * 1. -f filename | -f filename 215645f5050Syouri * 2. .ctwmrc.# | ctwm.rc_# 216645f5050Syouri * 3. .ctwmrc | ctwm.rc 217645f5050Syouri * 4. .twmrc.# | twm.rc_# 218645f5050Syouri * 5. .twmrc | twm.rc 219645f5050Syouri * 6. system.ctwmrc | system.ctwmrc 220645f5050Syouri */ 221645f5050Syouri for (twmrc = NULL, i = 0; !twmrc && i < 7; i++) { 222645f5050Syouri switch (i) { 223645f5050Syouri#ifdef VMS 224645f5050Syouri case 0: 225645f5050Syouri if (filename != NULL) { 226645f5050Syouri cp = tmpfilename; 227645f5050Syouri (void) sprintf (tmpfilename, "%s_%d", filename, Scr->screen); 228645f5050Syouri } else 229645f5050Syouri cp = filename; 230645f5050Syouri break; 231645f5050Syouri 232645f5050Syouri case 1: 233645f5050Syouri cp = filename; 234645f5050Syouri break; 235645f5050Syouri 236645f5050Syouri case 2: 237645f5050Syouri if (!filename) { 238645f5050Syouri home = getenv ("DECW$USER_DEFAULTS"); 239645f5050Syouri if (home) { 240645f5050Syouri homelen = strlen (home); 241645f5050Syouri cp = tmpfilename; 242645f5050Syouri (void) sprintf (tmpfilename, "%sctwm.rc_%d", 243645f5050Syouri home, Scr->screen); 244645f5050Syouri break; 245645f5050Syouri } 246645f5050Syouri } 247645f5050Syouri continue; 248645f5050Syouri 249645f5050Syouri case 3: 250645f5050Syouri if (home) { 251645f5050Syouri tmpfilename[homelen + 7] = '\0'; 252645f5050Syouri } 253645f5050Syouri break; 254645f5050Syouri 255645f5050Syouri case 4: 256645f5050Syouri if (!filename) { 257645f5050Syouri home = getenv ("DECW$USER_DEFAULTS"); 258645f5050Syouri if (home) { 259645f5050Syouri homelen = strlen (home); 260645f5050Syouri cp = tmpfilename; 261645f5050Syouri (void) sprintf (tmpfilename, "%stwm.rc_%d", 262645f5050Syouri home, Scr->screen); 263645f5050Syouri break; 264645f5050Syouri } 265645f5050Syouri } 266645f5050Syouri continue; 267645f5050Syouri 268645f5050Syouri case 5: 269645f5050Syouri if (home) { 270645f5050Syouri tmpfilename[homelen + 6] = '\0'; 271645f5050Syouri } 272645f5050Syouri break; 273645f5050Syouri#else 274645f5050Syouri case 0: /* -f filename.# */ 275645f5050Syouri if (filename) { 276645f5050Syouri cp = tmpfilename; 277645f5050Syouri (void) sprintf (tmpfilename, "%s.%d", filename, Scr->screen); 278645f5050Syouri } 279645f5050Syouri else cp = filename; 280645f5050Syouri break; 281645f5050Syouri 282645f5050Syouri case 1: /* -f filename */ 283645f5050Syouri cp = filename; 284645f5050Syouri break; 285645f5050Syouri 286645f5050Syouri case 2: /* ~/.ctwmrc.screennum */ 287645f5050Syouri if (!filename) { 288645f5050Syouri home = getenv ("HOME"); 289645f5050Syouri if (home) { 290645f5050Syouri homelen = strlen (home); 291645f5050Syouri cp = tmpfilename; 292645f5050Syouri (void) sprintf (tmpfilename, "%s/.ctwmrc.%d", 293645f5050Syouri home, Scr->screen); 294645f5050Syouri break; 295645f5050Syouri } 296645f5050Syouri } 297645f5050Syouri continue; 298645f5050Syouri 299645f5050Syouri case 3: /* ~/.ctwmrc */ 300645f5050Syouri if (home) { 301645f5050Syouri tmpfilename[homelen + 8] = '\0'; 302645f5050Syouri } 303645f5050Syouri break; 304645f5050Syouri 305645f5050Syouri case 4: /* ~/.twmrc.screennum */ 306645f5050Syouri if (!filename) { 307645f5050Syouri home = getenv ("HOME"); 308645f5050Syouri if (home) { 309645f5050Syouri homelen = strlen (home); 310645f5050Syouri cp = tmpfilename; 311645f5050Syouri (void) sprintf (tmpfilename, "%s/.twmrc.%d", 312645f5050Syouri home, Scr->screen); 313645f5050Syouri break; 314645f5050Syouri } 315645f5050Syouri } 316645f5050Syouri continue; 317645f5050Syouri 318645f5050Syouri case 5: /* ~/.twmrc */ 319645f5050Syouri if (home) { 320645f5050Syouri tmpfilename[homelen + 7] = '\0'; /* C.L. */ 321645f5050Syouri } 322645f5050Syouri break; 323645f5050Syouri#endif 324645f5050Syouri 325645f5050Syouri case 6: /* system.twmrc */ 326645f5050Syouri cp = SYSTEM_INIT_FILE; 327645f5050Syouri break; 328645f5050Syouri } 329645f5050Syouri 330645f5050Syouri if (cp) { 331645f5050Syouri twmrc = fopen (cp, "r"); 332645f5050Syouri#ifdef USEM4 333645f5050Syouri raw = twmrc; 334645f5050Syouri#endif 335645f5050Syouri 336645f5050Syouri } 337645f5050Syouri } 338645f5050Syouri 339645f5050Syouri#ifdef USEM4 340645f5050Syouri if (raw) { 341645f5050Syouri#else 342645f5050Syouri if (twmrc) { 343645f5050Syouri#endif 344645f5050Syouri 345645f5050Syouri int status; 346645f5050Syouri 347645f5050Syouri if (filename && strncmp (cp, filename, strlen (filename))) { 348645f5050Syouri fprintf (stderr, 349645f5050Syouri "%s: unable to open twmrc file %s, using %s instead\n", 350645f5050Syouri ProgramName, filename, cp); 351645f5050Syouri } 352645f5050Syouri#ifdef USEM4 353645f5050Syouri if (GoThroughM4) twmrc = start_m4(raw); 354645f5050Syouri status = doparse (m4twmFileInput, "file", cp); 355645f5050Syouri wait (0); 356645f5050Syouri fclose (twmrc); 357645f5050Syouri if (GoThroughM4) fclose (raw); 358645f5050Syouri#else 359645f5050Syouri status = doparse (twmFileInput, "file", cp); 360645f5050Syouri fclose (twmrc); 361645f5050Syouri#endif 362645f5050Syouri return status; 363645f5050Syouri } else { 364645f5050Syouri if (filename) { 365645f5050Syouri fprintf (stderr, 366645f5050Syouri "%s: unable to open twmrc file %s, using built-in defaults instead\n", 367645f5050Syouri ProgramName, filename); 368645f5050Syouri } 369645f5050Syouri return ParseStringList (defTwmrc); 370645f5050Syouri } 371645f5050Syouri} 372645f5050Syouri 373645f5050Syouriint ParseStringList (char **sl) 374645f5050Syouri{ 375645f5050Syouri stringListSource = sl; 376645f5050Syouri currentString = *sl; 377645f5050Syouri return doparse (twmStringListInput, "string list", (char *)NULL); 378645f5050Syouri} 379645f5050Syouri 380645f5050Syouri 381645f5050Syouri/*********************************************************************** 382645f5050Syouri * 383645f5050Syouri * Procedure: 384645f5050Syouri * twmFileInput - redefinition of the lex input routine for file input 385645f5050Syouri * 386645f5050Syouri * Returned Value: 387645f5050Syouri * the next input character 388645f5050Syouri * 389645f5050Syouri *********************************************************************** 390645f5050Syouri */ 391645f5050Syouri 392645f5050Syouri 393645f5050Syouri#ifndef USEM4 394645f5050Syouri 395645f5050Syouri/* This has Tom's include() funtionality. This is utterly useless if you 396645f5050Syouri * can use m4 for the same thing. Chris P. Ross */ 397645f5050Syouri 398645f5050Syouri#define MAX_INCLUDES 10 399645f5050Syouri 400645f5050Syouristatic struct incl { 401645f5050Syouri FILE *fp; 402645f5050Syouri char *name; 403645f5050Syouri int lineno; 404645f5050Syouri} rc_includes[MAX_INCLUDES]; 405645f5050Syouristatic int include_file = 0; 406645f5050Syouri 407645f5050Syouri 408645f5050Syouristatic int twmFileInput() 409645f5050Syouri{ 410645f5050Syouri if (overflowlen) return (int) overflowbuff[--overflowlen]; 411645f5050Syouri 412645f5050Syouri while (ptr == len) 413645f5050Syouri { 414645f5050Syouri while (include_file) { 415645f5050Syouri if (fgets(buff, BUF_LEN, rc_includes[include_file].fp) == NULL) { 416645f5050Syouri free(rc_includes[include_file].name); 417645f5050Syouri fclose(rc_includes[include_file].fp); 418645f5050Syouri twmrc_lineno = rc_includes[include_file--].lineno; 419645f5050Syouri } else 420645f5050Syouri break; 421645f5050Syouri } 422645f5050Syouri 423645f5050Syouri if (!include_file) 424645f5050Syouri if (fgets(buff, BUF_LEN, twmrc) == NULL) 425645f5050Syouri return 0; 426645f5050Syouri twmrc_lineno++; 427645f5050Syouri 428645f5050Syouri if (strncmp(buff, "include", 7) == 0) { 429645f5050Syouri /* Whoops, an include file! */ 430645f5050Syouri char *p = buff + 7, *q; 431645f5050Syouri FILE *fp; 432645f5050Syouri 433645f5050Syouri while (isspace(*p)) p++; 434645f5050Syouri for (q = p; *q && !isspace(*q); q++) 435645f5050Syouri continue; 436645f5050Syouri *q = 0; 437645f5050Syouri 438645f5050Syouri if ((fp = fopen(p, "r")) == NULL) { 439645f5050Syouri fprintf(stderr, "%s: Unable to open included init file %s\n", 440645f5050Syouri ProgramName, p); 441645f5050Syouri continue; 442645f5050Syouri } 443645f5050Syouri if (++include_file >= MAX_INCLUDES) { 444645f5050Syouri fprintf(stderr, "%s: init file includes nested too deep\n", 445645f5050Syouri ProgramName); 446645f5050Syouri continue; 447645f5050Syouri } 448645f5050Syouri rc_includes[include_file].fp = fp; 449645f5050Syouri rc_includes[include_file].lineno = twmrc_lineno; 450645f5050Syouri twmrc_lineno = 0; 451645f5050Syouri rc_includes[include_file].name = malloc(strlen(p)+1); 452645f5050Syouri strcpy(rc_includes[include_file].name, p); 453645f5050Syouri continue; 454645f5050Syouri } 455645f5050Syouri ptr = 0; 456645f5050Syouri len = strlen(buff); 457645f5050Syouri } 458645f5050Syouri return ((int)buff[ptr++]); 459645f5050Syouri} 460645f5050Syouri#else /* USEM4 */ 461645f5050Syouri/* If you're going to use m4, use this version instead. Much simpler. 462645f5050Syouri * m4 ism's credit to Josh Osborne (stripes) */ 463645f5050Syouri 464645f5050Syouristatic int m4twmFileInput(void) 465645f5050Syouri{ 466645f5050Syouri int line; 467645f5050Syouri static FILE *cp = NULL; 468645f5050Syouri 469645f5050Syouri if ( cp == NULL && keepM4_filename ) { 470645f5050Syouri cp = fopen (keepM4_filename,"w"); 471645f5050Syouri if ( cp == NULL ) { 472645f5050Syouri fprintf (stderr, 473645f5050Syouri "%s: unable to create m4 output %s, ignoring\n", 474645f5050Syouri ProgramName, keepM4_filename); 475645f5050Syouri keepM4_filename = NULL; 476645f5050Syouri } 477645f5050Syouri } 478645f5050Syouri 479645f5050Syouri if (overflowlen){ 480645f5050Syouri return((int) overflowbuff[--overflowlen]); 481645f5050Syouri } 482645f5050Syouri 483645f5050Syouri while (ptr == len) { 484645f5050Syouri nextline: 485645f5050Syouri if (fgets(buff, BUF_LEN, twmrc) == NULL) { 486645f5050Syouri if ( cp ) fclose (cp); 487645f5050Syouri return(0); 488645f5050Syouri } 489645f5050Syouri if ( cp ) fputs (buff, cp); 490645f5050Syouri 491645f5050Syouri if (sscanf(buff, "#line %d", &line)) { 492645f5050Syouri twmrc_lineno = line - 1; 493645f5050Syouri goto nextline; 494645f5050Syouri } else { 495645f5050Syouri twmrc_lineno++; 496645f5050Syouri } 497645f5050Syouri 498645f5050Syouri ptr = 0; 499645f5050Syouri len = strlen(buff); 500645f5050Syouri } 501645f5050Syouri return ((int)buff[ptr++]); 502645f5050Syouri} 503645f5050Syouri#endif /* USEM4 */ 504645f5050Syouri 505645f5050Syouri 506645f5050Syouristatic int twmStringListInput(void) 507645f5050Syouri{ 508645f5050Syouri if (overflowlen) return (int) overflowbuff[--overflowlen]; 509645f5050Syouri 510645f5050Syouri /* 511645f5050Syouri * return the character currently pointed to 512645f5050Syouri */ 513645f5050Syouri if (currentString) { 514645f5050Syouri unsigned int c = (unsigned int) *currentString++; 515645f5050Syouri 516645f5050Syouri if (c) return c; /* if non-nul char */ 517645f5050Syouri currentString = *++stringListSource; /* advance to next bol */ 518645f5050Syouri return '\n'; /* but say that we hit last eol */ 519645f5050Syouri } 520645f5050Syouri return 0; /* eof */ 521645f5050Syouri} 522645f5050Syouri 523645f5050Syouri 524645f5050Syouri/*********************************************************************** 525645f5050Syouri * 526645f5050Syouri * Procedure: 527645f5050Syouri * twmUnput - redefinition of the lex unput routine 528645f5050Syouri * 529645f5050Syouri * Inputs: 530645f5050Syouri * c - the character to push back onto the input stream 531645f5050Syouri * 532645f5050Syouri *********************************************************************** 533645f5050Syouri */ 534645f5050Syouri 535645f5050Syourivoid twmUnput (int c) 536645f5050Syouri{ 537645f5050Syouri if (overflowlen < sizeof overflowbuff) { 538645f5050Syouri overflowbuff[overflowlen++] = (char) c; 539645f5050Syouri } else { 540645f5050Syouri twmrc_error_prefix (); 541645f5050Syouri fprintf (stderr, "unable to unput character (%c)\n", 542645f5050Syouri c); 543645f5050Syouri } 544645f5050Syouri} 545645f5050Syouri 546645f5050Syouri 547645f5050Syouri/*********************************************************************** 548645f5050Syouri * 549645f5050Syouri * Procedure: 550645f5050Syouri * TwmOutput - redefinition of the lex output routine 551645f5050Syouri * 552645f5050Syouri * Inputs: 553645f5050Syouri * c - the character to print 554645f5050Syouri * 555645f5050Syouri *********************************************************************** 556645f5050Syouri */ 557645f5050Syouri 558645f5050Syourivoid TwmOutput(int c) 559645f5050Syouri{ 560645f5050Syouri putchar(c); 561645f5050Syouri} 562645f5050Syouri 563645f5050Syouri 564645f5050Syouri/********************************************************************** 565645f5050Syouri * 566645f5050Syouri * Parsing table and routines 567645f5050Syouri * 568645f5050Syouri ***********************************************************************/ 569645f5050Syouri 570645f5050Syouritypedef struct _TwmKeyword { 571645f5050Syouri char *name; 572645f5050Syouri int value; 573645f5050Syouri int subnum; 574645f5050Syouri} TwmKeyword; 575645f5050Syouri 576645f5050Syouri#define kw0_NoDefaults 1 577645f5050Syouri#define kw0_AutoRelativeResize 2 578645f5050Syouri#define kw0_ForceIcons 3 579645f5050Syouri#define kw0_NoIconManagers 4 580645f5050Syouri#define kw0_InterpolateMenuColors 6 581645f5050Syouri#define kw0_NoVersion 7 582645f5050Syouri#define kw0_SortIconManager 8 583645f5050Syouri#define kw0_NoGrabServer 9 584645f5050Syouri#define kw0_NoMenuShadows 10 585645f5050Syouri#define kw0_NoRaiseOnMove 11 586645f5050Syouri#define kw0_NoRaiseOnResize 12 587645f5050Syouri#define kw0_NoRaiseOnDeiconify 13 588645f5050Syouri#define kw0_DontMoveOff 14 589645f5050Syouri#define kw0_NoBackingStore 15 590645f5050Syouri#define kw0_NoSaveUnders 16 591645f5050Syouri#define kw0_RestartPreviousState 17 592645f5050Syouri#define kw0_ClientBorderWidth 18 593645f5050Syouri#define kw0_NoTitleFocus 19 594645f5050Syouri#define kw0_DecorateTransients 21 595645f5050Syouri#define kw0_ShowIconManager 22 596645f5050Syouri#define kw0_NoCaseSensitive 23 597645f5050Syouri#define kw0_NoRaiseOnWarp 24 598645f5050Syouri#define kw0_WarpUnmapped 25 599645f5050Syouri#define kw0_ShowWorkspaceManager 27 600645f5050Syouri#define kw0_StartInMapState 28 601645f5050Syouri#define kw0_NoShowOccupyAll 29 602645f5050Syouri#define kw0_AutoOccupy 30 603645f5050Syouri#define kw0_TransientHasOccupation 31 604645f5050Syouri#define kw0_DontPaintRootWindow 32 605645f5050Syouri#define kw0_Use3DMenus 33 606645f5050Syouri#define kw0_Use3DTitles 34 607645f5050Syouri#define kw0_Use3DIconManagers 35 608645f5050Syouri#define kw0_Use3DBorders 36 609645f5050Syouri#define kw0_SunkFocusWindowTitle 37 610645f5050Syouri#define kw0_BeNiceToColormap 38 611645f5050Syouri#define kw0_WarpRingOnScreen 40 612645f5050Syouri#define kw0_NoIconManagerFocus 41 613645f5050Syouri#define kw0_StayUpMenus 42 614645f5050Syouri#define kw0_ClickToFocus 43 615645f5050Syouri#define kw0_BorderResizeCursors 44 616645f5050Syouri#define kw0_ReallyMoveInWorkspaceManager 45 617645f5050Syouri#define kw0_ShowWinWhenMovingInWmgr 46 618645f5050Syouri#define kw0_Use3DWMap 47 619645f5050Syouri#define kw0_ReverseCurrentWorkspace 48 620645f5050Syouri#define kw0_DontWarpCursorInWMap 49 621645f5050Syouri#define kw0_CenterFeedbackWindow 50 622645f5050Syouri#define kw0_WarpToDefaultMenuEntry 51 623645f5050Syouri#define kw0_ShrinkIconTitles 52 624645f5050Syouri#define kw0_AutoRaiseIcons 53 625645f5050Syouri#define kw0_use3DIconBorders 54 626645f5050Syouri#define kw0_UseSunkTitlePixmap 55 627645f5050Syouri#define kw0_ShortAllWindowsMenus 56 628645f5050Syouri#define kw0_RaiseWhenAutoUnSqueeze 57 629645f5050Syouri#define kw0_RaiseOnClick 58 630645f5050Syouri#define kw0_IgnoreLockModifier 59 631645f5050Syouri#define kw0_AutoFocusToTransients 60 /* kai */ 632645f5050Syouri#define kw0_PackNewWindows 61 633645f5050Syouri#define kw0_IgnoreCaseInMenuSelection 62 634645f5050Syouri#define kw0_SloppyFocus 63 635645f5050Syouri#define kw0_NoImagesInWorkSpaceManager 64 636645f5050Syouri#define kw0_NoWarpToMenuTitle 65 637645f5050Syouri#define kw0_SaveWorkspaceFocus 66 /* blais */ 638645f5050Syouri#define kw0_RaiseOnWarp 67 639645f5050Syouri 640645f5050Syouri#define kws_UsePPosition 1 641645f5050Syouri#define kws_IconFont 2 642645f5050Syouri#define kws_ResizeFont 3 643645f5050Syouri#define kws_MenuFont 4 644645f5050Syouri#define kws_TitleFont 5 645645f5050Syouri#define kws_IconManagerFont 6 646645f5050Syouri#define kws_UnknownIcon 7 647645f5050Syouri#define kws_IconDirectory 8 648645f5050Syouri#define kws_MaxWindowSize 9 649645f5050Syouri#define kws_PixmapDirectory 10 650645f5050Syouri/* RandomPlacement moved because it's now a string string keyword */ 651645f5050Syouri#define kws_IconJustification 12 652645f5050Syouri#define kws_TitleJustification 13 653645f5050Syouri#define kws_IconRegionJustification 14 654645f5050Syouri#define kws_IconRegionAlignement 15 655645f5050Syouri#ifdef SOUNDS 656645f5050Syouri#define kws_SoundHost 16 657645f5050Syouri#endif 658645f5050Syouri#define kws_WMgrButtonStyle 17 659645f5050Syouri#define kws_WorkSpaceFont 18 660645f5050Syouri#define kws_IconifyStyle 19 661645f5050Syouri 662645f5050Syouri#define kwss_RandomPlacement 1 663645f5050Syouri 664645f5050Syouri#define kwn_ConstrainedMoveTime 1 665645f5050Syouri#define kwn_MoveDelta 2 666645f5050Syouri#define kwn_XorValue 3 667645f5050Syouri#define kwn_FramePadding 4 668645f5050Syouri#define kwn_TitlePadding 5 669645f5050Syouri#define kwn_ButtonIndent 6 670645f5050Syouri#define kwn_BorderWidth 7 671645f5050Syouri#define kwn_IconBorderWidth 8 672645f5050Syouri#define kwn_TitleButtonBorderWidth 9 673645f5050Syouri#define kwn_RaiseDelay 10 674645f5050Syouri#define kwn_TransientOnTop 11 675645f5050Syouri#define kwn_OpaqueMoveThreshold 12 676645f5050Syouri#define kwn_OpaqueResizeThreshold 13 677645f5050Syouri#define kwn_WMgrVertButtonIndent 14 678645f5050Syouri#define kwn_WMgrHorizButtonIndent 15 679645f5050Syouri#define kwn_ClearShadowContrast 16 680645f5050Syouri#define kwn_DarkShadowContrast 17 681645f5050Syouri#define kwn_WMgrButtonShadowDepth 18 682645f5050Syouri#define kwn_MaxIconTitleWidth 19 683645f5050Syouri#define kwn_AnimationSpeed 20 684645f5050Syouri#define kwn_ThreeDBorderWidth 21 685645f5050Syouri#define kwn_MoveOffResistance 22 686645f5050Syouri#define kwn_BorderShadowDepth 23 687645f5050Syouri#define kwn_TitleShadowDepth 24 688645f5050Syouri#define kwn_TitleButtonShadowDepth 25 689645f5050Syouri#define kwn_MenuShadowDepth 26 690645f5050Syouri#define kwn_IconManagerShadowDepth 27 691645f5050Syouri#define kwn_MovePackResistance 28 692645f5050Syouri#define kwn_XMoveGrid 29 693645f5050Syouri#define kwn_YMoveGrid 30 694645f5050Syouri#define kwn_OpenWindowTimeout 31 695645f5050Syouri#define kwn_RaiseOnClickButton 32 696645f5050Syouri 697645f5050Syouri#define kwn_BorderTop 33 698645f5050Syouri#define kwn_BorderBottom 34 699645f5050Syouri#define kwn_BorderLeft 35 700645f5050Syouri#define kwn_BorderRight 36 701645f5050Syouri 702645f5050Syouri#define kwcl_BorderColor 1 703645f5050Syouri#define kwcl_IconManagerHighlight 2 704645f5050Syouri#define kwcl_BorderTileForeground 3 705645f5050Syouri#define kwcl_BorderTileBackground 4 706645f5050Syouri#define kwcl_TitleForeground 5 707645f5050Syouri#define kwcl_TitleBackground 6 708645f5050Syouri#define kwcl_IconForeground 7 709645f5050Syouri#define kwcl_IconBackground 8 710645f5050Syouri#define kwcl_IconBorderColor 9 711645f5050Syouri#define kwcl_IconManagerForeground 10 712645f5050Syouri#define kwcl_IconManagerBackground 11 713645f5050Syouri#define kwcl_MapWindowBackground 12 714645f5050Syouri#define kwcl_MapWindowForeground 13 715645f5050Syouri 716645f5050Syouri#define kwc_DefaultForeground 1 717645f5050Syouri#define kwc_DefaultBackground 2 718645f5050Syouri#define kwc_MenuForeground 3 719645f5050Syouri#define kwc_MenuBackground 4 720645f5050Syouri#define kwc_MenuTitleForeground 5 721645f5050Syouri#define kwc_MenuTitleBackground 6 722645f5050Syouri#define kwc_MenuShadowColor 7 723645f5050Syouri 724645f5050Syouri/* 725645f5050Syouri * The following is sorted alphabetically according to name (which must be 726645f5050Syouri * in lowercase and only contain the letters a-z). It is fed to a binary 727645f5050Syouri * search to parse keywords. 728645f5050Syouri */ 729645f5050Syouristatic TwmKeyword keytable[] = { 730645f5050Syouri { "a", ALTER, 0 }, 731645f5050Syouri { "all", ALL, 0 }, 732645f5050Syouri { "alter", ALTER, 0 }, 733645f5050Syouri { "alwaysontop", ALWAYS_ON_TOP, 0 }, 734645f5050Syouri { "alwaysshowwindowwhenmovingfromworkspacemanager", KEYWORD, kw0_ShowWinWhenMovingInWmgr }, 735645f5050Syouri { "alwayssqueezetogravity", ALWAYSSQUEEZETOGRAVITY, 0 }, 736645f5050Syouri { "animationspeed", NKEYWORD, kwn_AnimationSpeed }, 737645f5050Syouri { "autofocustotransients", KEYWORD, kw0_AutoFocusToTransients }, /* kai */ 738645f5050Syouri { "autolower", AUTO_LOWER, 0 }, 739645f5050Syouri { "autooccupy", KEYWORD, kw0_AutoOccupy }, 740645f5050Syouri { "autoraise", AUTO_RAISE, 0 }, 741645f5050Syouri { "autoraiseicons", KEYWORD, kw0_AutoRaiseIcons }, 742645f5050Syouri { "autorelativeresize", KEYWORD, kw0_AutoRelativeResize }, 743645f5050Syouri { "autosqueeze", AUTOSQUEEZE, 0 }, 744645f5050Syouri { "benicetocolormap", KEYWORD, kw0_BeNiceToColormap }, 745645f5050Syouri { "borderbottom", NKEYWORD, kwn_BorderBottom }, 746645f5050Syouri { "bordercolor", CLKEYWORD, kwcl_BorderColor }, 747645f5050Syouri { "borderleft", NKEYWORD, kwn_BorderLeft }, 748645f5050Syouri { "borderresizecursors", KEYWORD, kw0_BorderResizeCursors }, 749645f5050Syouri { "borderright", NKEYWORD, kwn_BorderRight }, 750645f5050Syouri { "bordershadowdepth", NKEYWORD, kwn_BorderShadowDepth }, 751645f5050Syouri { "bordertilebackground", CLKEYWORD, kwcl_BorderTileBackground }, 752645f5050Syouri { "bordertileforeground", CLKEYWORD, kwcl_BorderTileForeground }, 753645f5050Syouri { "bordertop", NKEYWORD, kwn_BorderTop }, 754645f5050Syouri { "borderwidth", NKEYWORD, kwn_BorderWidth }, 755645f5050Syouri { "button", BUTTON, 0 }, 756645f5050Syouri { "buttonindent", NKEYWORD, kwn_ButtonIndent }, 757645f5050Syouri { "c", CONTROL, 0 }, 758645f5050Syouri { "center", JKEYWORD, J_CENTER }, 759645f5050Syouri { "centerfeedbackwindow", KEYWORD, kw0_CenterFeedbackWindow }, 760645f5050Syouri { "changeworkspacefunction", CHANGE_WORKSPACE_FUNCTION, 0 }, 761645f5050Syouri { "clearshadowcontrast", NKEYWORD, kwn_ClearShadowContrast }, 762645f5050Syouri { "clicktofocus", KEYWORD, kw0_ClickToFocus }, 763645f5050Syouri { "clientborderwidth", KEYWORD, kw0_ClientBorderWidth }, 764645f5050Syouri { "color", COLOR, 0 }, 765645f5050Syouri { "constrainedmovetime", NKEYWORD, kwn_ConstrainedMoveTime }, 766645f5050Syouri { "control", CONTROL, 0 }, 767645f5050Syouri { "cursors", CURSORS, 0 }, 768645f5050Syouri { "darkshadowcontrast", NKEYWORD, kwn_DarkShadowContrast }, 769645f5050Syouri { "decoratetransients", KEYWORD, kw0_DecorateTransients }, 770645f5050Syouri { "defaultbackground", CKEYWORD, kwc_DefaultBackground }, 771645f5050Syouri { "defaultforeground", CKEYWORD, kwc_DefaultForeground }, 772645f5050Syouri { "defaultfunction", DEFAULT_FUNCTION, 0 }, 773645f5050Syouri { "deiconifyfunction", DEICONIFY_FUNCTION, 0 }, 774645f5050Syouri { "destroy", KILL, 0 }, 775645f5050Syouri { "donticonifybyunmapping", DONT_ICONIFY_BY_UNMAPPING, 0 }, 776645f5050Syouri { "dontmoveoff", KEYWORD, kw0_DontMoveOff }, 777645f5050Syouri { "dontpaintrootwindow", KEYWORD, kw0_DontPaintRootWindow }, 778645f5050Syouri { "dontsave", DONT_SAVE, 0 }, 779645f5050Syouri { "dontsetinactive", DONTSETINACTIVE, 0 }, 780645f5050Syouri { "dontsqueezetitle", DONT_SQUEEZE_TITLE, 0 }, 781645f5050Syouri { "donttoggleworkspacemanagerstate", DONTTOGGLEWORKSPACEMANAGERSTATE, 0 }, 782645f5050Syouri { "dontwarpcursorinwmap", KEYWORD, kw0_DontWarpCursorInWMap }, 783645f5050Syouri { "east", DKEYWORD, D_EAST }, 784645f5050Syouri { "f", FRAME, 0 }, 785645f5050Syouri { "f.addtoworkspace", FSKEYWORD, F_ADDTOWORKSPACE }, 786645f5050Syouri { "f.adoptwindow", FKEYWORD, F_ADOPTWINDOW }, 787645f5050Syouri { "f.altcontext", FKEYWORD, F_ALTCONTEXT }, 788645f5050Syouri { "f.altkeymap", FSKEYWORD, F_ALTKEYMAP }, 789645f5050Syouri { "f.autolower", FKEYWORD, F_AUTOLOWER }, 790645f5050Syouri { "f.autoraise", FKEYWORD, F_AUTORAISE }, 791645f5050Syouri { "f.backiconmgr", FKEYWORD, F_BACKICONMGR }, 792645f5050Syouri { "f.backmapiconmgr", FKEYWORD, F_BACKMAPICONMGR }, 793645f5050Syouri { "f.beep", FKEYWORD, F_BEEP }, 794645f5050Syouri { "f.bottomzoom", FKEYWORD, F_BOTTOMZOOM }, 795645f5050Syouri { "f.changesize", FSKEYWORD, F_CHANGESIZE }, 796645f5050Syouri { "f.circledown", FKEYWORD, F_CIRCLEDOWN }, 797645f5050Syouri { "f.circleup", FKEYWORD, F_CIRCLEUP }, 798645f5050Syouri { "f.colormap", FSKEYWORD, F_COLORMAP }, 799645f5050Syouri { "f.cut", FSKEYWORD, F_CUT }, 800645f5050Syouri { "f.cutfile", FKEYWORD, F_CUTFILE }, 801645f5050Syouri { "f.deiconify", FKEYWORD, F_DEICONIFY }, 802645f5050Syouri { "f.delete", FKEYWORD, F_DELETE }, 803645f5050Syouri { "f.deleteordestroy", FKEYWORD, F_DELETEORDESTROY }, 804645f5050Syouri { "f.deltastop", FKEYWORD, F_DELTASTOP }, 805645f5050Syouri { "f.destroy", FKEYWORD, F_DESTROY }, 806645f5050Syouri { "f.downiconmgr", FKEYWORD, F_DOWNICONMGR }, 807645f5050Syouri { "f.downworkspace", FKEYWORD, F_DOWNWORKSPACE }, 808645f5050Syouri { "f.exec", FSKEYWORD, F_EXEC }, 809645f5050Syouri { "f.file", FSKEYWORD, F_FILE }, 810645f5050Syouri { "f.fill", FSKEYWORD, F_FILL }, 811645f5050Syouri { "f.fittocontent", FKEYWORD, F_FITTOCONTENT }, 812645f5050Syouri { "f.focus", FKEYWORD, F_FOCUS }, 813645f5050Syouri { "f.forcemove", FKEYWORD, F_FORCEMOVE }, 814645f5050Syouri { "f.forwiconmgr", FKEYWORD, F_FORWICONMGR }, 815645f5050Syouri { "f.forwmapiconmgr", FKEYWORD, F_FORWMAPICONMGR }, 816645f5050Syouri { "f.fullzoom", FKEYWORD, F_FULLZOOM }, 817645f5050Syouri { "f.function", FSKEYWORD, F_FUNCTION }, 818645f5050Syouri { "f.gotoworkspace", FSKEYWORD, F_GOTOWORKSPACE }, 819645f5050Syouri { "f.hbzoom", FKEYWORD, F_BOTTOMZOOM }, 820645f5050Syouri { "f.hideiconmgr", FKEYWORD, F_HIDELIST }, 821645f5050Syouri { "f.hideworkspacemgr", FKEYWORD, F_HIDEWORKMGR }, 822645f5050Syouri { "f.horizoom", FKEYWORD, F_HORIZOOM }, 823645f5050Syouri { "f.htzoom", FKEYWORD, F_TOPZOOM }, 824645f5050Syouri { "f.hypermove", FKEYWORD, F_HYPERMOVE }, 825645f5050Syouri { "f.hzoom", FKEYWORD, F_HORIZOOM }, 826645f5050Syouri { "f.iconify", FKEYWORD, F_ICONIFY }, 827645f5050Syouri { "f.identify", FKEYWORD, F_IDENTIFY }, 828645f5050Syouri { "f.initsize", FKEYWORD, F_INITSIZE }, 829645f5050Syouri { "f.jumpdown", FSKEYWORD, F_JUMPDOWN }, 830645f5050Syouri { "f.jumpleft", FSKEYWORD, F_JUMPLEFT }, 831645f5050Syouri { "f.jumpright", FSKEYWORD, F_JUMPRIGHT }, 832645f5050Syouri { "f.jumpup", FSKEYWORD, F_JUMPUP }, 833645f5050Syouri { "f.lefticonmgr", FKEYWORD, F_LEFTICONMGR }, 834645f5050Syouri { "f.leftworkspace", FKEYWORD, F_LEFTWORKSPACE }, 835645f5050Syouri { "f.leftzoom", FKEYWORD, F_LEFTZOOM }, 836645f5050Syouri { "f.lower", FKEYWORD, F_LOWER }, 837645f5050Syouri { "f.menu", FSKEYWORD, F_MENU }, 838645f5050Syouri { "f.move", FKEYWORD, F_MOVE }, 839645f5050Syouri { "f.movemenu", FKEYWORD, F_MOVEMENU }, 840645f5050Syouri { "f.movepack", FKEYWORD, F_MOVEPACK }, 841645f5050Syouri { "f.movepush", FKEYWORD, F_MOVEPUSH }, 842645f5050Syouri { "f.moveresize", FSKEYWORD, F_MOVERESIZE }, 843645f5050Syouri { "f.movetitlebar", FKEYWORD, F_MOVETITLEBAR }, 844645f5050Syouri { "f.movetonextworkspace", FKEYWORD, F_MOVETONEXTWORKSPACE }, 845645f5050Syouri { "f.movetonextworkspaceandfollow", FKEYWORD, F_MOVETONEXTWORKSPACEANDFOLLOW }, 846645f5050Syouri { "f.movetoprevworkspace", FKEYWORD, F_MOVETOPREVWORKSPACE }, 847645f5050Syouri { "f.movetoprevworkspaceandfollow", FKEYWORD, F_MOVETOPREVWORKSPACEANDFOLLOW }, 848645f5050Syouri { "f.nexticonmgr", FKEYWORD, F_NEXTICONMGR }, 849645f5050Syouri { "f.nextworkspace", FKEYWORD, F_NEXTWORKSPACE }, 850645f5050Syouri { "f.nop", FKEYWORD, F_NOP }, 851645f5050Syouri { "f.occupy", FKEYWORD, F_OCCUPY }, 852645f5050Syouri { "f.occupyall", FKEYWORD, F_OCCUPYALL }, 853645f5050Syouri { "f.pack", FSKEYWORD, F_PACK }, 854645f5050Syouri { "f.pin", FKEYWORD, F_PIN }, 855645f5050Syouri { "f.previconmgr", FKEYWORD, F_PREVICONMGR }, 856645f5050Syouri { "f.prevworkspace", FKEYWORD, F_PREVWORKSPACE }, 857645f5050Syouri { "f.quit", FKEYWORD, F_QUIT }, 858645f5050Syouri { "f.raise", FKEYWORD, F_RAISE }, 859645f5050Syouri { "f.raiseicons", FKEYWORD, F_RAISEICONS }, 860645f5050Syouri { "f.raiselower", FKEYWORD, F_RAISELOWER }, 861645f5050Syouri { "f.refresh", FKEYWORD, F_REFRESH }, 862645f5050Syouri { "f.removefromworkspace", FSKEYWORD, F_REMOVEFROMWORKSPACE }, 863645f5050Syouri#ifdef SOUNDS 864645f5050Syouri { "f.rereadsounds", FKEYWORD, F_REREADSOUNDS }, 865645f5050Syouri#endif 866645f5050Syouri { "f.resize", FKEYWORD, F_RESIZE }, 867645f5050Syouri { "f.restart", FKEYWORD, F_RESTART }, 868645f5050Syouri { "f.restoregeometry", FKEYWORD, F_RESTOREGEOMETRY }, 869645f5050Syouri { "f.righticonmgr", FKEYWORD, F_RIGHTICONMGR }, 870645f5050Syouri { "f.rightworkspace", FKEYWORD, F_RIGHTWORKSPACE }, 871645f5050Syouri { "f.rightzoom", FKEYWORD, F_RIGHTZOOM }, 872645f5050Syouri { "f.ring", FKEYWORD, F_RING }, 873645f5050Syouri { "f.savegeometry", FKEYWORD, F_SAVEGEOMETRY }, 874645f5050Syouri { "f.saveyourself", FKEYWORD, F_SAVEYOURSELF }, 875645f5050Syouri { "f.separator", FKEYWORD, F_SEPARATOR }, 876645f5050Syouri { "f.setbuttonsstate", FKEYWORD, F_SETBUTTONSTATE }, 877645f5050Syouri { "f.setmapstate", FKEYWORD, F_SETMAPSTATE }, 878645f5050Syouri { "f.showbackground", FKEYWORD, F_SHOWBGRD }, 879645f5050Syouri { "f.showiconmgr", FKEYWORD, F_SHOWLIST }, 880645f5050Syouri { "f.showworkspacemgr", FKEYWORD, F_SHOWWORKMGR }, 881645f5050Syouri { "f.slowdownanimation", FKEYWORD, F_SLOWDOWNANIMATION }, 882645f5050Syouri { "f.sorticonmgr", FKEYWORD, F_SORTICONMGR }, 883645f5050Syouri { "f.source", FSKEYWORD, F_BEEP }, /* XXX - don't work */ 884645f5050Syouri { "f.speedupanimation", FKEYWORD, F_SPEEDUPANIMATION }, 885645f5050Syouri { "f.squeeze", FKEYWORD, F_SQUEEZE }, 886645f5050Syouri { "f.startanimation", FKEYWORD, F_STARTANIMATION }, 887645f5050Syouri { "f.stopanimation", FKEYWORD, F_STOPANIMATION }, 888645f5050Syouri { "f.title", FKEYWORD, F_TITLE }, 889645f5050Syouri { "f.toggleoccupation", FSKEYWORD, F_TOGGLEOCCUPATION }, 890645f5050Syouri#ifdef SOUNDS 891645f5050Syouri { "f.togglesound", FKEYWORD, F_TOGGLESOUND }, 892645f5050Syouri#endif 893645f5050Syouri { "f.togglestate", FKEYWORD, F_TOGGLESTATE }, 894645f5050Syouri { "f.toggleworkspacemgr", FKEYWORD, F_TOGGLEWORKMGR }, 895645f5050Syouri { "f.topzoom", FKEYWORD, F_TOPZOOM }, 896645f5050Syouri { "f.trace", FSKEYWORD, F_TRACE }, 897645f5050Syouri { "f.twmrc", FKEYWORD, F_RESTART }, 898645f5050Syouri { "f.unfocus", FKEYWORD, F_UNFOCUS }, 899645f5050Syouri { "f.upiconmgr", FKEYWORD, F_UPICONMGR }, 900645f5050Syouri { "f.upworkspace", FKEYWORD, F_UPWORKSPACE }, 901645f5050Syouri { "f.vanish", FKEYWORD, F_VANISH }, 902645f5050Syouri { "f.version", FKEYWORD, F_VERSION }, 903645f5050Syouri { "f.vlzoom", FKEYWORD, F_LEFTZOOM }, 904645f5050Syouri { "f.vrzoom", FKEYWORD, F_RIGHTZOOM }, 905645f5050Syouri { "f.warphere", FSKEYWORD, F_WARPHERE }, 906645f5050Syouri { "f.warpring", FSKEYWORD, F_WARPRING }, 907645f5050Syouri { "f.warpto", FSKEYWORD, F_WARPTO }, 908645f5050Syouri { "f.warptoiconmgr", FSKEYWORD, F_WARPTOICONMGR }, 909645f5050Syouri { "f.warptoscreen", FSKEYWORD, F_WARPTOSCREEN }, 910645f5050Syouri { "f.winrefresh", FKEYWORD, F_WINREFRESH }, 911645f5050Syouri { "f.zoom", FKEYWORD, F_ZOOM }, 912645f5050Syouri { "forceicons", KEYWORD, kw0_ForceIcons }, 913645f5050Syouri { "frame", FRAME, 0 }, 914645f5050Syouri { "framepadding", NKEYWORD, kwn_FramePadding }, 915645f5050Syouri { "function", FUNCTION, 0 }, 916645f5050Syouri { "i", ICON, 0 }, 917645f5050Syouri { "icon", ICON, 0 }, 918645f5050Syouri { "iconbackground", CLKEYWORD, kwcl_IconBackground }, 919645f5050Syouri { "iconbordercolor", CLKEYWORD, kwcl_IconBorderColor }, 920645f5050Syouri { "iconborderwidth", NKEYWORD, kwn_IconBorderWidth }, 921645f5050Syouri { "icondirectory", SKEYWORD, kws_IconDirectory }, 922645f5050Syouri { "iconfont", SKEYWORD, kws_IconFont }, 923645f5050Syouri { "iconforeground", CLKEYWORD, kwcl_IconForeground }, 924645f5050Syouri { "iconifybyunmapping", ICONIFY_BY_UNMAPPING, 0 }, 925645f5050Syouri { "iconifyfunction", ICONIFY_FUNCTION, 0 }, 926645f5050Syouri { "iconifystyle", SKEYWORD, kws_IconifyStyle }, 927645f5050Syouri { "iconjustification", SKEYWORD, kws_IconJustification }, 928645f5050Syouri { "iconmanagerbackground", CLKEYWORD, kwcl_IconManagerBackground }, 929645f5050Syouri { "iconmanagerdontshow", ICONMGR_NOSHOW, 0 }, 930645f5050Syouri { "iconmanagerfont", SKEYWORD, kws_IconManagerFont }, 931645f5050Syouri { "iconmanagerforeground", CLKEYWORD, kwcl_IconManagerForeground }, 932645f5050Syouri { "iconmanagergeometry", ICONMGR_GEOMETRY, 0 }, 933645f5050Syouri { "iconmanagerhighlight", CLKEYWORD, kwcl_IconManagerHighlight }, 934645f5050Syouri { "iconmanagers", ICONMGRS, 0 }, 935645f5050Syouri { "iconmanagershadowdepth", NKEYWORD, kwn_IconManagerShadowDepth }, 936645f5050Syouri { "iconmanagershow", ICONMGR_SHOW, 0 }, 937645f5050Syouri { "iconmenudontshow", ICONMENU_DONTSHOW, 0 }, 938645f5050Syouri { "iconmgr", ICONMGR, 0 }, 939645f5050Syouri { "iconregion", ICON_REGION, 0 }, 940645f5050Syouri { "iconregionalignement", SKEYWORD, kws_IconRegionAlignement }, 941645f5050Syouri { "iconregionjustification",SKEYWORD, kws_IconRegionJustification }, 942645f5050Syouri { "icons", ICONS, 0 }, 943645f5050Syouri { "ignorecaseinmenuselection", KEYWORD, kw0_IgnoreCaseInMenuSelection }, 944645f5050Syouri { "ignorelockmodifier", KEYWORD, kw0_IgnoreLockModifier }, 945645f5050Syouri { "ignoremodifier", IGNOREMODIFIER, 0 }, 946645f5050Syouri { "ignoretransient", IGNORE_TRANSIENT, 0 }, 947645f5050Syouri { "interpolatemenucolors", KEYWORD, kw0_InterpolateMenuColors }, 948645f5050Syouri { "l", LOCK, 0 }, 949645f5050Syouri { "left", JKEYWORD, J_LEFT }, 950645f5050Syouri { "lefttitlebutton", LEFT_TITLEBUTTON, 0 }, 951645f5050Syouri { "lock", LOCK, 0 }, 952645f5050Syouri { "m", META, 0 }, 953645f5050Syouri { "maketitle", MAKE_TITLE, 0 }, 954645f5050Syouri { "mapwindowbackground", CLKEYWORD, kwcl_MapWindowBackground }, 955645f5050Syouri { "mapwindowcurrentworkspace", MAPWINDOWCURRENTWORKSPACE, 0}, 956645f5050Syouri { "mapwindowdefaultworkspace", MAPWINDOWDEFAULTWORKSPACE, 0}, 957645f5050Syouri { "mapwindowforeground", CLKEYWORD, kwcl_MapWindowForeground }, 958645f5050Syouri { "maxicontitlewidth", NKEYWORD, kwn_MaxIconTitleWidth }, 959645f5050Syouri { "maxwindowsize", SKEYWORD, kws_MaxWindowSize }, 960645f5050Syouri { "menu", MENU, 0 }, 961645f5050Syouri { "menubackground", CKEYWORD, kwc_MenuBackground }, 962645f5050Syouri { "menufont", SKEYWORD, kws_MenuFont }, 963645f5050Syouri { "menuforeground", CKEYWORD, kwc_MenuForeground }, 964645f5050Syouri { "menushadowcolor", CKEYWORD, kwc_MenuShadowColor }, 965645f5050Syouri { "menushadowdepth", NKEYWORD, kwn_MenuShadowDepth }, 966645f5050Syouri { "menutitlebackground", CKEYWORD, kwc_MenuTitleBackground }, 967645f5050Syouri { "menutitleforeground", CKEYWORD, kwc_MenuTitleForeground }, 968645f5050Syouri { "meta", META, 0 }, 969645f5050Syouri { "mod", META, 0 }, /* fake it */ 970645f5050Syouri { "monochrome", MONOCHROME, 0 }, 971645f5050Syouri { "move", MOVE, 0 }, 972645f5050Syouri { "movedelta", NKEYWORD, kwn_MoveDelta }, 973645f5050Syouri { "moveoffresistance", NKEYWORD, kwn_MoveOffResistance }, 974645f5050Syouri { "movepackresistance", NKEYWORD, kwn_MovePackResistance }, 975645f5050Syouri { "nobackingstore", KEYWORD, kw0_NoBackingStore }, 976645f5050Syouri { "noborder", NO_BORDER, 0 }, 977645f5050Syouri { "nocasesensitive", KEYWORD, kw0_NoCaseSensitive }, 978645f5050Syouri { "nodefaults", KEYWORD, kw0_NoDefaults }, 979645f5050Syouri { "nograbserver", KEYWORD, kw0_NoGrabServer }, 980645f5050Syouri { "nohighlight", NO_HILITE, 0 }, 981645f5050Syouri { "noiconmanagerfocus", KEYWORD, kw0_NoIconManagerFocus }, 982645f5050Syouri { "noiconmanagers", KEYWORD, kw0_NoIconManagers }, 983645f5050Syouri { "noicontitle", NO_ICON_TITLE, 0 }, 984645f5050Syouri { "noimagesinworkspacemanager", KEYWORD, kw0_NoImagesInWorkSpaceManager }, 985645f5050Syouri { "nomenushadows", KEYWORD, kw0_NoMenuShadows }, 986645f5050Syouri { "noopaquemove", NOOPAQUEMOVE, 0 }, 987645f5050Syouri { "noopaqueresize", NOOPAQUERESIZE, 0 }, 988645f5050Syouri { "noraiseondeiconify", KEYWORD, kw0_NoRaiseOnDeiconify }, 989645f5050Syouri { "noraiseonmove", KEYWORD, kw0_NoRaiseOnMove }, 990645f5050Syouri { "noraiseonresize", KEYWORD, kw0_NoRaiseOnResize }, 991645f5050Syouri { "noraiseonwarp", KEYWORD, kw0_NoRaiseOnWarp }, 992645f5050Syouri { "north", DKEYWORD, D_NORTH }, 993645f5050Syouri { "nosaveunders", KEYWORD, kw0_NoSaveUnders }, 994645f5050Syouri { "noshowoccupyall", KEYWORD, kw0_NoShowOccupyAll }, 995645f5050Syouri { "nostackmode", NO_STACKMODE, 0 }, 996645f5050Syouri { "notitle", NO_TITLE, 0 }, 997645f5050Syouri { "notitlefocus", KEYWORD, kw0_NoTitleFocus }, 998645f5050Syouri { "notitlehighlight", NO_TITLE_HILITE, 0 }, 999645f5050Syouri { "noversion", KEYWORD, kw0_NoVersion }, 1000645f5050Syouri { "nowarptomenutitle", KEYWORD, kw0_NoWarpToMenuTitle }, 1001645f5050Syouri { "occupy", OCCUPYLIST, 0 }, 1002645f5050Syouri { "occupyall", OCCUPYALL, 0 }, 1003645f5050Syouri { "opaquemove", OPAQUEMOVE, 0 }, 1004645f5050Syouri { "opaquemovethreshold", NKEYWORD, kwn_OpaqueMoveThreshold }, 1005645f5050Syouri { "opaqueresize", OPAQUERESIZE, 0 }, 1006645f5050Syouri { "opaqueresizethreshold", NKEYWORD, kwn_OpaqueResizeThreshold }, 1007645f5050Syouri { "openwindowtimeout", NKEYWORD, kwn_OpenWindowTimeout }, 1008645f5050Syouri { "packnewwindows", KEYWORD, kw0_PackNewWindows }, 1009645f5050Syouri { "pixmapdirectory", SKEYWORD, kws_PixmapDirectory }, 1010645f5050Syouri { "pixmaps", PIXMAPS, 0 }, 1011645f5050Syouri { "r", ROOT, 0 }, 1012645f5050Syouri { "raisedelay", NKEYWORD, kwn_RaiseDelay }, 1013645f5050Syouri { "raiseonclick", KEYWORD, kw0_RaiseOnClick }, 1014645f5050Syouri { "raiseonclickbutton", NKEYWORD, kwn_RaiseOnClickButton }, 1015645f5050Syouri { "raiseonwarp", KEYWORD, kw0_RaiseOnWarp }, 1016645f5050Syouri { "raisewhenautounsqueeze", KEYWORD, kw0_RaiseWhenAutoUnSqueeze }, 1017645f5050Syouri { "randomplacement", SSKEYWORD, kwss_RandomPlacement }, 1018645f5050Syouri { "reallymoveinworkspacemanager", KEYWORD, kw0_ReallyMoveInWorkspaceManager }, 1019645f5050Syouri { "resize", RESIZE, 0 }, 1020645f5050Syouri { "resizefont", SKEYWORD, kws_ResizeFont }, 1021645f5050Syouri { "restartpreviousstate", KEYWORD, kw0_RestartPreviousState }, 1022645f5050Syouri { "reversecurrentworkspace",KEYWORD, kw0_ReverseCurrentWorkspace }, 1023645f5050Syouri { "right", JKEYWORD, J_RIGHT }, 1024645f5050Syouri { "righttitlebutton", RIGHT_TITLEBUTTON, 0 }, 1025645f5050Syouri { "root", ROOT, 0 }, 1026645f5050Syouri { "s", SHIFT, 0 }, 1027645f5050Syouri { "savecolor", SAVECOLOR, 0}, 1028645f5050Syouri { "saveworkspacefocus", KEYWORD, kw0_SaveWorkspaceFocus }, 1029645f5050Syouri { "schrinkicontitles", KEYWORD, kw0_ShrinkIconTitles }, 1030645f5050Syouri { "select", SELECT, 0 }, 1031645f5050Syouri { "shift", SHIFT, 0 }, 1032645f5050Syouri { "shortallwindowsmenus", KEYWORD, kw0_ShortAllWindowsMenus }, 1033645f5050Syouri { "showiconmanager", KEYWORD, kw0_ShowIconManager }, 1034645f5050Syouri { "showworkspacemanager", KEYWORD, kw0_ShowWorkspaceManager }, 1035645f5050Syouri { "shrinkicontitles", KEYWORD, kw0_ShrinkIconTitles }, 1036645f5050Syouri { "sloppyfocus", KEYWORD, kw0_SloppyFocus }, 1037645f5050Syouri { "sorticonmanager", KEYWORD, kw0_SortIconManager }, 1038645f5050Syouri#ifdef SOUNDS 1039645f5050Syouri { "soundhost", SKEYWORD, kws_SoundHost }, 1040645f5050Syouri#endif 1041645f5050Syouri { "south", DKEYWORD, D_SOUTH }, 1042645f5050Syouri { "squeezetitle", SQUEEZE_TITLE, 0 }, 1043645f5050Syouri { "starticonified", START_ICONIFIED, 0 }, 1044645f5050Syouri { "startinmapstate", KEYWORD, kw0_StartInMapState }, 1045645f5050Syouri { "startsqueezed", STARTSQUEEZED, 0 }, 1046645f5050Syouri { "stayupmenus", KEYWORD, kw0_StayUpMenus }, 1047645f5050Syouri { "sunkfocuswindowtitle", KEYWORD, kw0_SunkFocusWindowTitle }, 1048645f5050Syouri { "t", TITLE, 0 }, 1049645f5050Syouri { "threedborderwidth", NKEYWORD, kwn_ThreeDBorderWidth }, 1050645f5050Syouri { "title", TITLE, 0 }, 1051645f5050Syouri { "titlebackground", CLKEYWORD, kwcl_TitleBackground }, 1052645f5050Syouri { "titlebuttonborderwidth", NKEYWORD, kwn_TitleButtonBorderWidth }, 1053645f5050Syouri { "titlebuttonshadowdepth", NKEYWORD, kwn_TitleButtonShadowDepth }, 1054645f5050Syouri { "titlefont", SKEYWORD, kws_TitleFont }, 1055645f5050Syouri { "titleforeground", CLKEYWORD, kwcl_TitleForeground }, 1056645f5050Syouri { "titlehighlight", TITLE_HILITE, 0 }, 1057645f5050Syouri { "titlejustification", SKEYWORD, kws_TitleJustification }, 1058645f5050Syouri { "titlepadding", NKEYWORD, kwn_TitlePadding }, 1059645f5050Syouri { "titleshadowdepth", NKEYWORD, kwn_TitleShadowDepth }, 1060645f5050Syouri { "transienthasoccupation", KEYWORD, kw0_TransientHasOccupation }, 1061645f5050Syouri { "transientontop", NKEYWORD, kwn_TransientOnTop }, 1062645f5050Syouri { "unknownicon", SKEYWORD, kws_UnknownIcon }, 1063645f5050Syouri { "unmapbymovingfaraway", UNMAPBYMOVINGFARAWAY, 0 }, 1064645f5050Syouri { "usepposition", SKEYWORD, kws_UsePPosition }, 1065645f5050Syouri { "usesunktitlepixmap", KEYWORD, kw0_UseSunkTitlePixmap }, 1066645f5050Syouri { "usethreedborders", KEYWORD, kw0_Use3DBorders }, 1067645f5050Syouri { "usethreediconborders", KEYWORD, kw0_use3DIconBorders }, 1068645f5050Syouri { "usethreediconmanagers", KEYWORD, kw0_Use3DIconManagers }, 1069645f5050Syouri { "usethreedmenus", KEYWORD, kw0_Use3DMenus }, 1070645f5050Syouri { "usethreedtitles", KEYWORD, kw0_Use3DTitles }, 1071645f5050Syouri { "usethreedwmap", KEYWORD, kw0_Use3DWMap }, 1072645f5050Syouri { "virtualscreens", VIRTUAL_SCREENS, 0 }, 1073645f5050Syouri { "w", WINDOW, 0 }, 1074645f5050Syouri { "wait", WAITC, 0 }, 1075645f5050Syouri { "warpcursor", WARP_CURSOR, 0 }, 1076645f5050Syouri { "warpringonscreen", KEYWORD, kw0_WarpRingOnScreen }, 1077645f5050Syouri { "warptodefaultmenuentry", KEYWORD, kw0_WarpToDefaultMenuEntry }, 1078645f5050Syouri { "warpunmapped", KEYWORD, kw0_WarpUnmapped }, 1079645f5050Syouri { "west", DKEYWORD, D_WEST }, 1080645f5050Syouri { "window", WINDOW, 0 }, 1081645f5050Syouri { "windowbox", WINDOW_BOX, 0 }, 1082645f5050Syouri { "windowfunction", WINDOW_FUNCTION, 0 }, 1083645f5050Syouri { "windowgeometries", WINDOW_GEOMETRIES, 0 }, 1084645f5050Syouri { "windowregion", WINDOW_REGION, 0 }, 1085645f5050Syouri { "windowring", WINDOW_RING, 0 }, 1086645f5050Syouri { "windowringexclude", WINDOW_RING_EXCLUDE, 0}, 1087645f5050Syouri { "wmgrbuttonshadowdepth", NKEYWORD, kwn_WMgrButtonShadowDepth }, 1088645f5050Syouri { "wmgrbuttonstyle", SKEYWORD, kws_WMgrButtonStyle }, 1089645f5050Syouri { "wmgrhorizbuttonindent", NKEYWORD, kwn_WMgrHorizButtonIndent }, 1090645f5050Syouri { "wmgrvertbuttonindent", NKEYWORD, kwn_WMgrVertButtonIndent }, 1091645f5050Syouri { "workspace", WORKSPACE, 0 }, 1092645f5050Syouri { "workspacefont", SKEYWORD, kws_WorkSpaceFont }, 1093645f5050Syouri { "workspacemanagergeometry", WORKSPCMGR_GEOMETRY, 0 }, 1094645f5050Syouri { "workspaces", WORKSPACES, 0}, 1095645f5050Syouri { "xmovegrid", NKEYWORD, kwn_XMoveGrid }, 1096645f5050Syouri { "xorvalue", NKEYWORD, kwn_XorValue }, 1097645f5050Syouri { "xpmicondirectory", SKEYWORD, kws_PixmapDirectory }, 1098645f5050Syouri { "ymovegrid", NKEYWORD, kwn_YMoveGrid }, 1099645f5050Syouri { "zoom", ZOOM, 0 }, 1100645f5050Syouri}; 1101645f5050Syouri 1102645f5050Syouristatic int numkeywords = (sizeof(keytable)/sizeof(keytable[0])); 1103645f5050Syouri 1104645f5050Syouriint parse_keyword (char *s, int *nump) 1105645f5050Syouri{ 1106645f5050Syouri register int lower = 0, upper = numkeywords - 1; 1107645f5050Syouri 1108645f5050Syouri XmuCopyISOLatin1Lowered (s, s); 1109645f5050Syouri while (lower <= upper) { 1110645f5050Syouri int middle = (lower + upper) / 2; 1111645f5050Syouri TwmKeyword *p = &keytable[middle]; 1112645f5050Syouri int res = strcmp (p->name, s); 1113645f5050Syouri 1114645f5050Syouri if (res < 0) { 1115645f5050Syouri lower = middle + 1; 1116645f5050Syouri } else if (res == 0) { 1117645f5050Syouri *nump = p->subnum; 1118645f5050Syouri return p->value; 1119645f5050Syouri } else { 1120645f5050Syouri upper = middle - 1; 1121645f5050Syouri } 1122645f5050Syouri } 1123645f5050Syouri return ERRORTOKEN; 1124645f5050Syouri} 1125645f5050Syouri 1126645f5050Syouri 1127645f5050Syouri 1128645f5050Syouri/* 1129645f5050Syouri * action routines called by grammar 1130645f5050Syouri */ 1131645f5050Syouri 1132645f5050Syouriint do_single_keyword (int keyword) 1133645f5050Syouri{ 1134645f5050Syouri switch (keyword) { 1135645f5050Syouri case kw0_NoDefaults: 1136645f5050Syouri Scr->NoDefaults = TRUE; 1137645f5050Syouri return 1; 1138645f5050Syouri 1139645f5050Syouri case kw0_AutoRelativeResize: 1140645f5050Syouri Scr->AutoRelativeResize = TRUE; 1141645f5050Syouri return 1; 1142645f5050Syouri 1143645f5050Syouri case kw0_ForceIcons: 1144645f5050Syouri if (Scr->FirstTime) Scr->ForceIcon = TRUE; 1145645f5050Syouri return 1; 1146645f5050Syouri 1147645f5050Syouri case kw0_NoIconManagers: 1148645f5050Syouri Scr->NoIconManagers = TRUE; 1149645f5050Syouri return 1; 1150645f5050Syouri 1151645f5050Syouri case kw0_InterpolateMenuColors: 1152645f5050Syouri if (Scr->FirstTime) Scr->InterpolateMenuColors = TRUE; 1153645f5050Syouri return 1; 1154645f5050Syouri 1155645f5050Syouri case kw0_NoVersion: 1156645f5050Syouri /* obsolete */ 1157645f5050Syouri return 1; 1158645f5050Syouri 1159645f5050Syouri case kw0_SortIconManager: 1160645f5050Syouri if (Scr->FirstTime) Scr->SortIconMgr = TRUE; 1161645f5050Syouri return 1; 1162645f5050Syouri 1163645f5050Syouri case kw0_NoGrabServer: 1164645f5050Syouri Scr->NoGrabServer = TRUE; 1165645f5050Syouri return 1; 1166645f5050Syouri 1167645f5050Syouri case kw0_NoMenuShadows: 1168645f5050Syouri if (Scr->FirstTime) Scr->Shadow = FALSE; 1169645f5050Syouri return 1; 1170645f5050Syouri 1171645f5050Syouri case kw0_NoRaiseOnMove: 1172645f5050Syouri if (Scr->FirstTime) Scr->NoRaiseMove = TRUE; 1173645f5050Syouri return 1; 1174645f5050Syouri 1175645f5050Syouri case kw0_NoRaiseOnResize: 1176645f5050Syouri if (Scr->FirstTime) Scr->NoRaiseResize = TRUE; 1177645f5050Syouri return 1; 1178645f5050Syouri 1179645f5050Syouri case kw0_NoRaiseOnDeiconify: 1180645f5050Syouri if (Scr->FirstTime) Scr->NoRaiseDeicon = TRUE; 1181645f5050Syouri return 1; 1182645f5050Syouri 1183645f5050Syouri case kw0_DontMoveOff: 1184645f5050Syouri Scr->DontMoveOff = TRUE; 1185645f5050Syouri return 1; 1186645f5050Syouri 1187645f5050Syouri case kw0_NoBackingStore: 1188645f5050Syouri Scr->BackingStore = FALSE; 1189645f5050Syouri return 1; 1190645f5050Syouri 1191645f5050Syouri case kw0_NoSaveUnders: 1192645f5050Syouri Scr->SaveUnder = FALSE; 1193645f5050Syouri return 1; 1194645f5050Syouri 1195645f5050Syouri case kw0_RestartPreviousState: 1196645f5050Syouri RestartPreviousState = True; 1197645f5050Syouri return 1; 1198645f5050Syouri 1199645f5050Syouri case kw0_ClientBorderWidth: 1200645f5050Syouri if (Scr->FirstTime) Scr->ClientBorderWidth = TRUE; 1201645f5050Syouri return 1; 1202645f5050Syouri 1203645f5050Syouri case kw0_NoTitleFocus: 1204645f5050Syouri Scr->TitleFocus = TRUE /*FALSE*/; 1205645f5050Syouri return 1; 1206645f5050Syouri 1207645f5050Syouri case kw0_DecorateTransients: 1208645f5050Syouri Scr->DecorateTransients = TRUE; 1209645f5050Syouri return 1; 1210645f5050Syouri 1211645f5050Syouri case kw0_ShowIconManager: 1212645f5050Syouri Scr->ShowIconManager = TRUE; 1213645f5050Syouri return 1; 1214645f5050Syouri 1215645f5050Syouri case kw0_ShowWorkspaceManager: 1216645f5050Syouri Scr->ShowWorkspaceManager = TRUE; 1217645f5050Syouri return 1; 1218645f5050Syouri 1219645f5050Syouri case kw0_StartInMapState: 1220645f5050Syouri Scr->workSpaceMgr.initialstate = MAPSTATE; 1221645f5050Syouri return 1; 1222645f5050Syouri 1223645f5050Syouri case kw0_NoShowOccupyAll: 1224645f5050Syouri Scr->workSpaceMgr.noshowoccupyall = TRUE; 1225645f5050Syouri return 1; 1226645f5050Syouri 1227645f5050Syouri case kw0_AutoOccupy: 1228645f5050Syouri Scr->AutoOccupy = TRUE; 1229645f5050Syouri return 1; 1230645f5050Syouri 1231645f5050Syouri case kw0_TransientHasOccupation: 1232645f5050Syouri Scr->TransientHasOccupation = TRUE; 1233645f5050Syouri return 1; 1234645f5050Syouri 1235645f5050Syouri case kw0_DontPaintRootWindow: 1236645f5050Syouri Scr->DontPaintRootWindow = TRUE; 1237645f5050Syouri return 1; 1238645f5050Syouri 1239645f5050Syouri case kw0_UseSunkTitlePixmap: 1240645f5050Syouri Scr->UseSunkTitlePixmap = TRUE; 1241645f5050Syouri return 1; 1242645f5050Syouri 1243645f5050Syouri case kw0_Use3DBorders: 1244645f5050Syouri Scr->use3Dborders = TRUE; 1245645f5050Syouri return 1; 1246645f5050Syouri 1247645f5050Syouri case kw0_Use3DIconManagers: 1248645f5050Syouri Scr->use3Diconmanagers = TRUE; 1249645f5050Syouri return 1; 1250645f5050Syouri 1251645f5050Syouri case kw0_Use3DMenus: 1252645f5050Syouri Scr->use3Dmenus = TRUE; 1253645f5050Syouri return 1; 1254645f5050Syouri 1255645f5050Syouri case kw0_Use3DTitles: 1256645f5050Syouri Scr->use3Dtitles = TRUE; 1257645f5050Syouri return 1; 1258645f5050Syouri 1259645f5050Syouri case kw0_Use3DWMap: 1260645f5050Syouri Scr->use3Dwmap = TRUE; 1261645f5050Syouri return 1; 1262645f5050Syouri 1263645f5050Syouri case kw0_SunkFocusWindowTitle: 1264645f5050Syouri Scr->SunkFocusWindowTitle = TRUE; 1265645f5050Syouri return 1; 1266645f5050Syouri 1267645f5050Syouri case kw0_BeNiceToColormap: 1268645f5050Syouri Scr->BeNiceToColormap = TRUE; 1269645f5050Syouri return 1; 1270645f5050Syouri 1271645f5050Syouri case kw0_BorderResizeCursors: 1272645f5050Syouri Scr->BorderCursors = TRUE; 1273645f5050Syouri return 1; 1274645f5050Syouri 1275645f5050Syouri case kw0_NoCaseSensitive: 1276645f5050Syouri Scr->CaseSensitive = FALSE; 1277645f5050Syouri return 1; 1278645f5050Syouri 1279645f5050Syouri case kw0_NoRaiseOnWarp: 1280645f5050Syouri Scr->RaiseOnWarp = FALSE; 1281645f5050Syouri return 1; 1282645f5050Syouri 1283645f5050Syouri case kw0_RaiseOnWarp: 1284645f5050Syouri Scr->RaiseOnWarp = TRUE; 1285645f5050Syouri return 1; 1286645f5050Syouri 1287645f5050Syouri case kw0_WarpUnmapped: 1288645f5050Syouri Scr->WarpUnmapped = TRUE; 1289645f5050Syouri return 1; 1290645f5050Syouri 1291645f5050Syouri case kw0_WarpRingOnScreen: 1292645f5050Syouri Scr->WarpRingAnyWhere = FALSE; 1293645f5050Syouri return 1; 1294645f5050Syouri 1295645f5050Syouri case kw0_NoIconManagerFocus: 1296645f5050Syouri Scr->IconManagerFocus = FALSE; 1297645f5050Syouri return 1; 1298645f5050Syouri 1299645f5050Syouri case kw0_StayUpMenus: 1300645f5050Syouri Scr->StayUpMenus = TRUE; 1301645f5050Syouri return 1; 1302645f5050Syouri 1303645f5050Syouri case kw0_ClickToFocus: 1304645f5050Syouri Scr->ClickToFocus = TRUE; 1305645f5050Syouri return 1; 1306645f5050Syouri 1307645f5050Syouri case kw0_ReallyMoveInWorkspaceManager: 1308645f5050Syouri Scr->ReallyMoveInWorkspaceManager = TRUE; 1309645f5050Syouri return 1; 1310645f5050Syouri 1311645f5050Syouri case kw0_ShowWinWhenMovingInWmgr: 1312645f5050Syouri Scr->ShowWinWhenMovingInWmgr = TRUE; 1313645f5050Syouri return 1; 1314645f5050Syouri 1315645f5050Syouri case kw0_ReverseCurrentWorkspace: 1316645f5050Syouri Scr->ReverseCurrentWorkspace = TRUE; 1317645f5050Syouri return 1; 1318645f5050Syouri 1319645f5050Syouri case kw0_DontWarpCursorInWMap: 1320645f5050Syouri Scr->DontWarpCursorInWMap = TRUE; 1321645f5050Syouri return 1; 1322645f5050Syouri 1323645f5050Syouri case kw0_CenterFeedbackWindow: 1324645f5050Syouri Scr->CenterFeedbackWindow = TRUE; 1325645f5050Syouri return 1; 1326645f5050Syouri 1327645f5050Syouri case kw0_WarpToDefaultMenuEntry: 1328645f5050Syouri Scr->WarpToDefaultMenuEntry = TRUE; 1329645f5050Syouri return 1; 1330645f5050Syouri 1331645f5050Syouri case kw0_ShrinkIconTitles: 1332645f5050Syouri Scr->ShrinkIconTitles = TRUE; 1333645f5050Syouri return 1; 1334645f5050Syouri 1335645f5050Syouri case kw0_AutoRaiseIcons: 1336645f5050Syouri Scr->AutoRaiseIcons = TRUE; 1337645f5050Syouri return 1; 1338645f5050Syouri 1339645f5050Syouri /* kai */ 1340645f5050Syouri case kw0_AutoFocusToTransients: 1341645f5050Syouri Scr->AutoFocusToTransients = TRUE; 1342645f5050Syouri return 1; 1343645f5050Syouri 1344645f5050Syouri case kw0_use3DIconBorders: 1345645f5050Syouri Scr->use3Diconborders = TRUE; 1346645f5050Syouri return 1; 1347645f5050Syouri 1348645f5050Syouri case kw0_ShortAllWindowsMenus: 1349645f5050Syouri Scr->ShortAllWindowsMenus = TRUE; 1350645f5050Syouri return 1; 1351645f5050Syouri 1352645f5050Syouri case kw0_RaiseWhenAutoUnSqueeze: 1353645f5050Syouri Scr->RaiseWhenAutoUnSqueeze = TRUE; 1354645f5050Syouri return 1; 1355645f5050Syouri 1356645f5050Syouri case kw0_RaiseOnClick: 1357645f5050Syouri Scr->RaiseOnClick = TRUE; 1358645f5050Syouri return 1; 1359645f5050Syouri 1360645f5050Syouri case kw0_IgnoreLockModifier: 1361645f5050Syouri Scr->IgnoreLockModifier = TRUE; 1362645f5050Syouri return 1; 1363645f5050Syouri 1364645f5050Syouri case kw0_PackNewWindows: 1365645f5050Syouri Scr->PackNewWindows = TRUE; 1366645f5050Syouri return 1; 1367645f5050Syouri 1368645f5050Syouri case kw0_IgnoreCaseInMenuSelection: 1369645f5050Syouri Scr->IgnoreCaseInMenuSelection = TRUE; 1370645f5050Syouri return 1; 1371645f5050Syouri 1372645f5050Syouri case kw0_SloppyFocus: 1373645f5050Syouri Scr->SloppyFocus = TRUE; 1374645f5050Syouri return 1; 1375645f5050Syouri 1376645f5050Syouri case kw0_SaveWorkspaceFocus: 1377645f5050Syouri Scr->SaveWorkspaceFocus = TRUE; 1378645f5050Syouri return 1; 1379645f5050Syouri 1380645f5050Syouri case kw0_NoImagesInWorkSpaceManager: 1381645f5050Syouri Scr->NoImagesInWorkSpaceManager = TRUE; 1382645f5050Syouri return 1; 1383645f5050Syouri 1384645f5050Syouri case kw0_NoWarpToMenuTitle: 1385645f5050Syouri Scr->NoWarpToMenuTitle = TRUE; 1386645f5050Syouri return 1; 1387645f5050Syouri 1388645f5050Syouri } 1389645f5050Syouri return 0; 1390645f5050Syouri} 1391645f5050Syouri 1392645f5050Syouri 1393645f5050Syouriint do_string_string_keyword (int keyword, char *s1, char *s2) 1394645f5050Syouri{ 1395645f5050Syouri switch (keyword) { 1396645f5050Syouri case kwss_RandomPlacement: 1397645f5050Syouri { 1398645f5050Syouri int rp = ParseRandomPlacement (s1); 1399645f5050Syouri if (rp < 0) { 1400645f5050Syouri twmrc_error_prefix(); 1401645f5050Syouri fprintf (stderr, 1402645f5050Syouri "ignoring invalid RandomPlacement argument 1 \"%s\"\n", s1); 1403645f5050Syouri } else { 1404645f5050Syouri Scr->RandomPlacement = rp; 1405645f5050Syouri } 1406645f5050Syouri } 1407645f5050Syouri { 1408645f5050Syouri if (strcmp (s2, "default") == 0) return 1; 1409645f5050Syouri JunkMask = XParseGeometry (s2, &JunkX, &JunkY, &JunkWidth, &JunkHeight); 1410645f5050Syouri#ifdef DEBUG 1411645f5050Syouri fprintf (stderr, "DEBUG:: JunkMask = %x, WidthValue = %x, HeightValue = %x\n", JunkMask, WidthValue, HeightValue); 1412645f5050Syouri fprintf (stderr, "DEBUG:: JunkX = %d, JunkY = %d\n", JunkX, JunkY); 1413645f5050Syouri#endif 1414645f5050Syouri if ((JunkMask & (XValue | YValue)) != 1415645f5050Syouri (XValue | YValue)) { 1416645f5050Syouri twmrc_error_prefix(); 1417645f5050Syouri fprintf (stderr, 1418645f5050Syouri "ignoring invalid RandomPlacement displacement \"%s\"\n", s2); 1419645f5050Syouri } else { 1420645f5050Syouri Scr->RandomDisplacementX = JunkX; 1421645f5050Syouri Scr->RandomDisplacementY = JunkY; 1422645f5050Syouri } 1423645f5050Syouri return 1; 1424645f5050Syouri } 1425645f5050Syouri } 1426645f5050Syouri return 0; 1427645f5050Syouri} 1428645f5050Syouri 1429645f5050Syouri 1430645f5050Syouriint do_string_keyword (int keyword, char *s) 1431645f5050Syouri{ 1432645f5050Syouri switch (keyword) { 1433645f5050Syouri case kws_UsePPosition: 1434645f5050Syouri { 1435645f5050Syouri int ppos = ParseUsePPosition (s); 1436645f5050Syouri if (ppos < 0) { 1437645f5050Syouri twmrc_error_prefix(); 1438645f5050Syouri fprintf (stderr, 1439645f5050Syouri "ignoring invalid UsePPosition argument \"%s\"\n", s); 1440645f5050Syouri } else { 1441645f5050Syouri Scr->UsePPosition = ppos; 1442645f5050Syouri } 1443645f5050Syouri return 1; 1444645f5050Syouri } 1445645f5050Syouri 1446645f5050Syouri case kws_IconFont: 1447645f5050Syouri if (!Scr->HaveFonts) Scr->IconFont.basename = s; 1448645f5050Syouri return 1; 1449645f5050Syouri 1450645f5050Syouri case kws_ResizeFont: 1451645f5050Syouri if (!Scr->HaveFonts) Scr->SizeFont.basename = s; 1452645f5050Syouri return 1; 1453645f5050Syouri 1454645f5050Syouri case kws_MenuFont: 1455645f5050Syouri if (!Scr->HaveFonts) Scr->MenuFont.basename = s; 1456645f5050Syouri return 1; 1457645f5050Syouri 1458645f5050Syouri case kws_WorkSpaceFont: 1459645f5050Syouri if (!Scr->HaveFonts) Scr->workSpaceMgr.windowFont.basename = s; 1460645f5050Syouri return 1; 1461645f5050Syouri 1462645f5050Syouri case kws_TitleFont: 1463645f5050Syouri if (!Scr->HaveFonts) Scr->TitleBarFont.basename = s; 1464645f5050Syouri return 1; 1465645f5050Syouri 1466645f5050Syouri case kws_IconManagerFont: 1467645f5050Syouri if (!Scr->HaveFonts) Scr->IconManagerFont.basename = s; 1468645f5050Syouri return 1; 1469645f5050Syouri 1470645f5050Syouri case kws_UnknownIcon: 1471645f5050Syouri if (Scr->FirstTime) GetUnknownIcon (s); 1472645f5050Syouri return 1; 1473645f5050Syouri 1474645f5050Syouri case kws_IconDirectory: 1475645f5050Syouri if (Scr->FirstTime) Scr->IconDirectory = ExpandFilePath (s); 1476645f5050Syouri return 1; 1477645f5050Syouri 1478645f5050Syouri case kws_PixmapDirectory: 1479645f5050Syouri if (Scr->FirstTime) Scr->PixmapDirectory = ExpandFilePath (s); 1480645f5050Syouri return 1; 1481645f5050Syouri 1482645f5050Syouri case kws_MaxWindowSize: 1483645f5050Syouri JunkMask = XParseGeometry (s, &JunkX, &JunkY, &JunkWidth, &JunkHeight); 1484645f5050Syouri if ((JunkMask & (WidthValue | HeightValue)) != 1485645f5050Syouri (WidthValue | HeightValue)) { 1486645f5050Syouri twmrc_error_prefix(); 1487645f5050Syouri fprintf (stderr, "bad MaxWindowSize \"%s\"\n", s); 1488645f5050Syouri return 0; 1489645f5050Syouri } 1490645f5050Syouri if (JunkWidth == 0 || JunkHeight == 0) { 1491645f5050Syouri twmrc_error_prefix(); 1492645f5050Syouri fprintf (stderr, "MaxWindowSize \"%s\" must be non-zero\n", s); 1493645f5050Syouri return 0; 1494645f5050Syouri } 1495645f5050Syouri Scr->MaxWindowWidth = JunkWidth; 1496645f5050Syouri Scr->MaxWindowHeight = JunkHeight; 1497645f5050Syouri return 1; 1498645f5050Syouri 1499645f5050Syouri case kws_IconJustification: 1500645f5050Syouri { 1501645f5050Syouri int just = ParseJustification (s); 1502645f5050Syouri 1503645f5050Syouri if ((just < 0) || (just == J_BORDER)) { 1504645f5050Syouri twmrc_error_prefix(); 1505645f5050Syouri fprintf (stderr, 1506645f5050Syouri "ignoring invalid IconJustification argument \"%s\"\n", s); 1507645f5050Syouri } else { 1508645f5050Syouri Scr->IconJustification = just; 1509645f5050Syouri } 1510645f5050Syouri return 1; 1511645f5050Syouri } 1512645f5050Syouri case kws_IconRegionJustification: 1513645f5050Syouri { 1514645f5050Syouri int just = ParseJustification (s); 1515645f5050Syouri 1516645f5050Syouri if (just < 0) { 1517645f5050Syouri twmrc_error_prefix(); 1518645f5050Syouri fprintf (stderr, 1519645f5050Syouri "ignoring invalid IconRegionJustification argument \"%s\"\n", s); 1520645f5050Syouri } else { 1521645f5050Syouri Scr->IconRegionJustification = just; 1522645f5050Syouri } 1523645f5050Syouri return 1; 1524645f5050Syouri } 1525645f5050Syouri case kws_IconRegionAlignement: 1526645f5050Syouri { 1527645f5050Syouri int just = ParseAlignement (s); 1528645f5050Syouri 1529645f5050Syouri if (just < 0) { 1530645f5050Syouri twmrc_error_prefix(); 1531645f5050Syouri fprintf (stderr, 1532645f5050Syouri "ignoring invalid IconRegionAlignement argument \"%s\"\n", s); 1533645f5050Syouri } else { 1534645f5050Syouri Scr->IconRegionAlignement = just; 1535645f5050Syouri } 1536645f5050Syouri return 1; 1537645f5050Syouri } 1538645f5050Syouri 1539645f5050Syouri case kws_TitleJustification: 1540645f5050Syouri { 1541645f5050Syouri int just = ParseJustification (s); 1542645f5050Syouri 1543645f5050Syouri if ((just < 0) || (just == J_BORDER)) { 1544645f5050Syouri twmrc_error_prefix(); 1545645f5050Syouri fprintf (stderr, 1546645f5050Syouri "ignoring invalid TitleJustification argument \"%s\"\n", s); 1547645f5050Syouri } else { 1548645f5050Syouri Scr->TitleJustification = just; 1549645f5050Syouri } 1550645f5050Syouri return 1; 1551645f5050Syouri } 1552645f5050Syouri#ifdef SOUNDS 1553645f5050Syouri case kws_SoundHost: 1554645f5050Syouri if (Scr->FirstTime) set_sound_host(s); 1555645f5050Syouri return 1; 1556645f5050Syouri#endif 1557645f5050Syouri 1558645f5050Syouri case kws_WMgrButtonStyle: 1559645f5050Syouri { 1560645f5050Syouri int style = ParseButtonStyle (s); 1561645f5050Syouri 1562645f5050Syouri if (style < 0) { 1563645f5050Syouri twmrc_error_prefix(); 1564645f5050Syouri fprintf (stderr, 1565645f5050Syouri "ignoring invalid WMgrButtonStyle argument \"%s\"\n", s); 1566645f5050Syouri } else { 1567645f5050Syouri Scr->workSpaceMgr.buttonStyle = style; 1568645f5050Syouri } 1569645f5050Syouri return 1; 1570645f5050Syouri } 1571645f5050Syouri 1572645f5050Syouri case kws_IconifyStyle: 1573645f5050Syouri { 1574645f5050Syouri if (strlen (s) == 0) { 1575645f5050Syouri twmrc_error_prefix(); 1576645f5050Syouri fprintf (stderr, "ignoring invalid IconifyStyle argument \"%s\"\n", s); 1577645f5050Syouri } 1578645f5050Syouri if (strcmp (s, "default") == 0) Scr->IconifyStyle = ICONIFY_NORMAL; 1579645f5050Syouri XmuCopyISOLatin1Lowered (s, s); 1580645f5050Syouri if (strcmp (s, "normal") == 0) Scr->IconifyStyle = ICONIFY_NORMAL; 1581645f5050Syouri if (strcmp (s, "mosaic") == 0) Scr->IconifyStyle = ICONIFY_MOSAIC; 1582645f5050Syouri if (strcmp (s, "zoomin") == 0) Scr->IconifyStyle = ICONIFY_ZOOMIN; 1583645f5050Syouri if (strcmp (s, "zoomout") == 0) Scr->IconifyStyle = ICONIFY_ZOOMOUT; 1584645f5050Syouri if (strcmp (s, "sweep") == 0) Scr->IconifyStyle = ICONIFY_SWEEP; 1585645f5050Syouri return 1; 1586645f5050Syouri } 1587645f5050Syouri } 1588645f5050Syouri return 0; 1589645f5050Syouri} 1590645f5050Syouri 1591645f5050Syouri 1592645f5050Syouriint do_number_keyword (int keyword, int num) 1593645f5050Syouri{ 1594645f5050Syouri switch (keyword) { 1595645f5050Syouri case kwn_ConstrainedMoveTime: 1596645f5050Syouri ConstrainedMoveTime = num; 1597645f5050Syouri return 1; 1598645f5050Syouri 1599645f5050Syouri case kwn_MoveDelta: 1600645f5050Syouri Scr->MoveDelta = num; 1601645f5050Syouri return 1; 1602645f5050Syouri 1603645f5050Syouri case kwn_MoveOffResistance: 1604645f5050Syouri Scr->MoveOffResistance = num; 1605645f5050Syouri return 1; 1606645f5050Syouri 1607645f5050Syouri case kwn_MovePackResistance: 1608645f5050Syouri if (num < 0) num = 20; 1609645f5050Syouri Scr->MovePackResistance = num; 1610645f5050Syouri return 1; 1611645f5050Syouri 1612645f5050Syouri case kwn_XMoveGrid: 1613645f5050Syouri if (num < 1) num = 1; 1614645f5050Syouri if (num > 100) num = 100; 1615645f5050Syouri Scr->XMoveGrid = num; 1616645f5050Syouri return 1; 1617645f5050Syouri 1618645f5050Syouri case kwn_YMoveGrid: 1619645f5050Syouri if (num < 1) num = 1; 1620645f5050Syouri if (num > 100) num = 100; 1621645f5050Syouri Scr->YMoveGrid = num; 1622645f5050Syouri return 1; 1623645f5050Syouri 1624645f5050Syouri case kwn_XorValue: 1625645f5050Syouri if (Scr->FirstTime) Scr->XORvalue = num; 1626645f5050Syouri return 1; 1627645f5050Syouri 1628645f5050Syouri case kwn_FramePadding: 1629645f5050Syouri if (Scr->FirstTime) Scr->FramePadding = num; 1630645f5050Syouri return 1; 1631645f5050Syouri 1632645f5050Syouri case kwn_TitlePadding: 1633645f5050Syouri if (Scr->FirstTime) { 1634645f5050Syouri Scr->TitlePadding = num; 1635645f5050Syouri } 1636645f5050Syouri return 1; 1637645f5050Syouri 1638645f5050Syouri case kwn_ButtonIndent: 1639645f5050Syouri if (Scr->FirstTime) Scr->ButtonIndent = num; 1640645f5050Syouri return 1; 1641645f5050Syouri 1642645f5050Syouri case kwn_ThreeDBorderWidth: 1643645f5050Syouri if (Scr->FirstTime) Scr->ThreeDBorderWidth = num; 1644645f5050Syouri return 1; 1645645f5050Syouri 1646645f5050Syouri case kwn_BorderWidth: 1647645f5050Syouri if (Scr->FirstTime) Scr->BorderWidth = num; 1648645f5050Syouri return 1; 1649645f5050Syouri 1650645f5050Syouri case kwn_IconBorderWidth: 1651645f5050Syouri if (Scr->FirstTime) Scr->IconBorderWidth = num; 1652645f5050Syouri return 1; 1653645f5050Syouri 1654645f5050Syouri case kwn_TitleButtonBorderWidth: 1655645f5050Syouri if (Scr->FirstTime) Scr->TBInfo.border = num; 1656645f5050Syouri return 1; 1657645f5050Syouri 1658645f5050Syouri case kwn_RaiseDelay: 1659645f5050Syouri RaiseDelay = num; 1660645f5050Syouri return 1; 1661645f5050Syouri 1662645f5050Syouri case kwn_TransientOnTop: 1663645f5050Syouri if (Scr->FirstTime) Scr->TransientOnTop = num; 1664645f5050Syouri return 1; 1665645f5050Syouri 1666645f5050Syouri case kwn_OpaqueMoveThreshold: 1667645f5050Syouri if (Scr->FirstTime) Scr->OpaqueMoveThreshold = num; 1668645f5050Syouri return 1; 1669645f5050Syouri 1670645f5050Syouri case kwn_OpaqueResizeThreshold: 1671645f5050Syouri if (Scr->FirstTime) Scr->OpaqueResizeThreshold = num; 1672645f5050Syouri return 1; 1673645f5050Syouri 1674645f5050Syouri case kwn_WMgrVertButtonIndent: 1675645f5050Syouri if (Scr->FirstTime) Scr->WMgrVertButtonIndent = num; 1676645f5050Syouri if (Scr->WMgrVertButtonIndent < 0) Scr->WMgrVertButtonIndent = 0; 1677645f5050Syouri Scr->workSpaceMgr.vspace = Scr->WMgrVertButtonIndent; 1678645f5050Syouri Scr->workSpaceMgr.occupyWindow->vspace = Scr->WMgrVertButtonIndent; 1679645f5050Syouri return 1; 1680645f5050Syouri 1681645f5050Syouri case kwn_WMgrHorizButtonIndent: 1682645f5050Syouri if (Scr->FirstTime) Scr->WMgrHorizButtonIndent = num; 1683645f5050Syouri if (Scr->WMgrHorizButtonIndent < 0) Scr->WMgrHorizButtonIndent = 0; 1684645f5050Syouri Scr->workSpaceMgr.hspace = Scr->WMgrHorizButtonIndent; 1685645f5050Syouri Scr->workSpaceMgr.occupyWindow->hspace = Scr->WMgrHorizButtonIndent; 1686645f5050Syouri return 1; 1687645f5050Syouri 1688645f5050Syouri case kwn_WMgrButtonShadowDepth: 1689645f5050Syouri if (Scr->FirstTime) Scr->WMgrButtonShadowDepth = num; 1690645f5050Syouri if (Scr->WMgrButtonShadowDepth < 1) Scr->WMgrButtonShadowDepth = 1; 1691645f5050Syouri return 1; 1692645f5050Syouri 1693645f5050Syouri case kwn_MaxIconTitleWidth: 1694645f5050Syouri if (Scr->FirstTime) Scr->MaxIconTitleWidth = num; 1695645f5050Syouri return 1; 1696645f5050Syouri 1697645f5050Syouri case kwn_ClearShadowContrast: 1698645f5050Syouri if (Scr->FirstTime) Scr->ClearShadowContrast = num; 1699645f5050Syouri if (Scr->ClearShadowContrast < 0) Scr->ClearShadowContrast = 0; 1700645f5050Syouri if (Scr->ClearShadowContrast > 100) Scr->ClearShadowContrast = 100; 1701645f5050Syouri return 1; 1702645f5050Syouri 1703645f5050Syouri case kwn_DarkShadowContrast: 1704645f5050Syouri if (Scr->FirstTime) Scr->DarkShadowContrast = num; 1705645f5050Syouri if (Scr->DarkShadowContrast < 0) Scr->DarkShadowContrast = 0; 1706645f5050Syouri if (Scr->DarkShadowContrast > 100) Scr->DarkShadowContrast = 100; 1707645f5050Syouri return 1; 1708645f5050Syouri 1709645f5050Syouri case kwn_AnimationSpeed: 1710645f5050Syouri if (num < 0) num = 0; 1711645f5050Syouri SetAnimationSpeed (num); 1712645f5050Syouri return 1; 1713645f5050Syouri 1714645f5050Syouri case kwn_BorderShadowDepth: 1715645f5050Syouri if (Scr->FirstTime) Scr->BorderShadowDepth = num; 1716645f5050Syouri if (Scr->BorderShadowDepth < 0) Scr->BorderShadowDepth = 2; 1717645f5050Syouri return 1; 1718645f5050Syouri 1719645f5050Syouri case kwn_BorderLeft: 1720645f5050Syouri if (Scr->FirstTime) Scr->BorderLeft = num; 1721645f5050Syouri if (Scr->BorderLeft < 0) Scr->BorderLeft = 0; 1722645f5050Syouri return 1; 1723645f5050Syouri 1724645f5050Syouri case kwn_BorderRight: 1725645f5050Syouri if (Scr->FirstTime) Scr->BorderRight = num; 1726645f5050Syouri if (Scr->BorderRight < 0) Scr->BorderRight = 0; 1727645f5050Syouri return 1; 1728645f5050Syouri 1729645f5050Syouri case kwn_BorderTop: 1730645f5050Syouri if (Scr->FirstTime) Scr->BorderTop = num; 1731645f5050Syouri if (Scr->BorderTop < 0) Scr->BorderTop = 0; 1732645f5050Syouri return 1; 1733645f5050Syouri 1734645f5050Syouri case kwn_BorderBottom: 1735645f5050Syouri if (Scr->FirstTime) Scr->BorderBottom = num; 1736645f5050Syouri if (Scr->BorderBottom < 0) Scr->BorderBottom = 0; 1737645f5050Syouri return 1; 1738645f5050Syouri 1739645f5050Syouri case kwn_TitleButtonShadowDepth: 1740645f5050Syouri if (Scr->FirstTime) Scr->TitleButtonShadowDepth = num; 1741645f5050Syouri if (Scr->TitleButtonShadowDepth < 0) Scr->TitleButtonShadowDepth = 2; 1742645f5050Syouri return 1; 1743645f5050Syouri 1744645f5050Syouri case kwn_TitleShadowDepth: 1745645f5050Syouri if (Scr->FirstTime) Scr->TitleShadowDepth = num; 1746645f5050Syouri if (Scr->TitleShadowDepth < 0) Scr->TitleShadowDepth = 2; 1747645f5050Syouri return 1; 1748645f5050Syouri 1749645f5050Syouri case kwn_IconManagerShadowDepth: 1750645f5050Syouri if (Scr->FirstTime) Scr->IconManagerShadowDepth = num; 1751645f5050Syouri if (Scr->IconManagerShadowDepth < 0) Scr->IconManagerShadowDepth = 2; 1752645f5050Syouri return 1; 1753645f5050Syouri 1754645f5050Syouri case kwn_MenuShadowDepth: 1755645f5050Syouri if (Scr->FirstTime) Scr->MenuShadowDepth = num; 1756645f5050Syouri if (Scr->MenuShadowDepth < 0) Scr->MenuShadowDepth = 2; 1757645f5050Syouri return 1; 1758645f5050Syouri 1759645f5050Syouri case kwn_OpenWindowTimeout: 1760645f5050Syouri if (Scr->FirstTime) Scr->OpenWindowTimeout = num; 1761645f5050Syouri if (Scr->OpenWindowTimeout < 0) Scr->OpenWindowTimeout = 0; 1762645f5050Syouri return 1; 1763645f5050Syouri 1764645f5050Syouri case kwn_RaiseOnClickButton: 1765645f5050Syouri if (Scr->FirstTime) Scr->RaiseOnClickButton = num; 1766645f5050Syouri if (Scr->RaiseOnClickButton < 1) Scr->RaiseOnClickButton = 1; 1767645f5050Syouri if (Scr->RaiseOnClickButton > MAX_BUTTONS) Scr->RaiseOnClickButton = MAX_BUTTONS; 1768645f5050Syouri return 1; 1769645f5050Syouri 1770645f5050Syouri } 1771645f5050Syouri 1772645f5050Syouri return 0; 1773645f5050Syouri} 1774645f5050Syouri 1775645f5050Syouriname_list **do_colorlist_keyword (int keyword, int colormode, char *s) 1776645f5050Syouri{ 1777645f5050Syouri switch (keyword) { 1778645f5050Syouri case kwcl_BorderColor: 1779645f5050Syouri GetColor (colormode, &Scr->BorderColorC.back, s); 1780645f5050Syouri return &Scr->BorderColorL; 1781645f5050Syouri 1782645f5050Syouri case kwcl_IconManagerHighlight: 1783645f5050Syouri GetColor (colormode, &Scr->IconManagerHighlight, s); 1784645f5050Syouri return &Scr->IconManagerHighlightL; 1785645f5050Syouri 1786645f5050Syouri case kwcl_BorderTileForeground: 1787645f5050Syouri GetColor (colormode, &Scr->BorderTileC.fore, s); 1788645f5050Syouri return &Scr->BorderTileForegroundL; 1789645f5050Syouri 1790645f5050Syouri case kwcl_BorderTileBackground: 1791645f5050Syouri GetColor (colormode, &Scr->BorderTileC.back, s); 1792645f5050Syouri return &Scr->BorderTileBackgroundL; 1793645f5050Syouri 1794645f5050Syouri case kwcl_TitleForeground: 1795645f5050Syouri GetColor (colormode, &Scr->TitleC.fore, s); 1796645f5050Syouri return &Scr->TitleForegroundL; 1797645f5050Syouri 1798645f5050Syouri case kwcl_TitleBackground: 1799645f5050Syouri GetColor (colormode, &Scr->TitleC.back, s); 1800645f5050Syouri return &Scr->TitleBackgroundL; 1801645f5050Syouri 1802645f5050Syouri case kwcl_IconForeground: 1803645f5050Syouri GetColor (colormode, &Scr->IconC.fore, s); 1804645f5050Syouri return &Scr->IconForegroundL; 1805645f5050Syouri 1806645f5050Syouri case kwcl_IconBackground: 1807645f5050Syouri GetColor (colormode, &Scr->IconC.back, s); 1808645f5050Syouri return &Scr->IconBackgroundL; 1809645f5050Syouri 1810645f5050Syouri case kwcl_IconBorderColor: 1811645f5050Syouri GetColor (colormode, &Scr->IconBorderColor, s); 1812645f5050Syouri return &Scr->IconBorderColorL; 1813645f5050Syouri 1814645f5050Syouri case kwcl_IconManagerForeground: 1815645f5050Syouri GetColor (colormode, &Scr->IconManagerC.fore, s); 1816645f5050Syouri return &Scr->IconManagerFL; 1817645f5050Syouri 1818645f5050Syouri case kwcl_IconManagerBackground: 1819645f5050Syouri GetColor (colormode, &Scr->IconManagerC.back, s); 1820645f5050Syouri return &Scr->IconManagerBL; 1821645f5050Syouri 1822645f5050Syouri case kwcl_MapWindowBackground: 1823645f5050Syouri GetColor (colormode, &Scr->workSpaceMgr.windowcp.back, s); 1824645f5050Syouri Scr->workSpaceMgr.windowcpgiven = True; 1825645f5050Syouri return &Scr->workSpaceMgr.windowBackgroundL; 1826645f5050Syouri 1827645f5050Syouri case kwcl_MapWindowForeground: 1828645f5050Syouri GetColor (colormode, &Scr->workSpaceMgr.windowcp.fore, s); 1829645f5050Syouri Scr->workSpaceMgr.windowcpgiven = True; 1830645f5050Syouri return &Scr->workSpaceMgr.windowForegroundL; 1831645f5050Syouri } 1832645f5050Syouri return NULL; 1833645f5050Syouri} 1834645f5050Syouri 1835645f5050Syouriint do_color_keyword (int keyword, int colormode, char *s) 1836645f5050Syouri{ 1837645f5050Syouri switch (keyword) { 1838645f5050Syouri case kwc_DefaultForeground: 1839645f5050Syouri GetColor (colormode, &Scr->DefaultC.fore, s); 1840645f5050Syouri return 1; 1841645f5050Syouri 1842645f5050Syouri case kwc_DefaultBackground: 1843645f5050Syouri GetColor (colormode, &Scr->DefaultC.back, s); 1844645f5050Syouri return 1; 1845645f5050Syouri 1846645f5050Syouri case kwc_MenuForeground: 1847645f5050Syouri GetColor (colormode, &Scr->MenuC.fore, s); 1848645f5050Syouri return 1; 1849645f5050Syouri 1850645f5050Syouri case kwc_MenuBackground: 1851645f5050Syouri GetColor (colormode, &Scr->MenuC.back, s); 1852645f5050Syouri return 1; 1853645f5050Syouri 1854645f5050Syouri case kwc_MenuTitleForeground: 1855645f5050Syouri GetColor (colormode, &Scr->MenuTitleC.fore, s); 1856645f5050Syouri return 1; 1857645f5050Syouri 1858645f5050Syouri case kwc_MenuTitleBackground: 1859645f5050Syouri GetColor (colormode, &Scr->MenuTitleC.back, s); 1860645f5050Syouri return 1; 1861645f5050Syouri 1862645f5050Syouri case kwc_MenuShadowColor: 1863645f5050Syouri GetColor (colormode, &Scr->MenuShadowColor, s); 1864645f5050Syouri return 1; 1865645f5050Syouri 1866645f5050Syouri } 1867645f5050Syouri 1868645f5050Syouri return 0; 1869645f5050Syouri} 1870645f5050Syouri 1871645f5050Syouri/* 1872645f5050Syouri * put_pixel_on_root() Save a pixel value in twm root window color property. 1873645f5050Syouri */ 1874645f5050Syouristatic void put_pixel_on_root(Pixel pixel) 1875645f5050Syouri{ 1876645f5050Syouri int i, addPixel = 1; 1877645f5050Syouri Atom retAtom; 1878645f5050Syouri int retFormat; 1879645f5050Syouri unsigned long nPixels, retAfter; 1880645f5050Syouri Pixel *retProp; 1881645f5050Syouri 1882645f5050Syouri if (XGetWindowProperty(dpy, Scr->Root, _XA_MIT_PRIORITY_COLORS, 0, 8192, 1883645f5050Syouri False, XA_CARDINAL, &retAtom, 1884645f5050Syouri &retFormat, &nPixels, &retAfter, 1885645f5050Syouri (unsigned char **)&retProp) != Success || !retProp) 1886645f5050Syouri return; 1887645f5050Syouri 1888645f5050Syouri for (i=0; i< nPixels; i++) 1889645f5050Syouri if (pixel == retProp[i]) addPixel = 0; 1890645f5050Syouri 1891645f5050Syouri XFree((char *)retProp); 1892645f5050Syouri 1893645f5050Syouri if (addPixel) 1894645f5050Syouri XChangeProperty (dpy, Scr->Root, _XA_MIT_PRIORITY_COLORS, 1895645f5050Syouri XA_CARDINAL, 32, PropModeAppend, 1896645f5050Syouri (unsigned char *)&pixel, 1); 1897645f5050Syouri} 1898645f5050Syouri 1899645f5050Syouri/* 1900645f5050Syouri * do_string_savecolor() save a color from a string in the twmrc file. 1901645f5050Syouri */ 1902645f5050Syouriint do_string_savecolor(int colormode, char *s) 1903645f5050Syouri{ 1904645f5050Syouri Pixel p; 1905645f5050Syouri GetColor(colormode, &p, s); 1906645f5050Syouri put_pixel_on_root(p); 1907645f5050Syouri return 0; 1908645f5050Syouri} 1909645f5050Syouri 1910645f5050Syouri/* 1911645f5050Syouri * do_var_savecolor() save a color from a var in the twmrc file. 1912645f5050Syouri */ 1913645f5050Syouritypedef struct _cnode {int i; struct _cnode *next;} Cnode, *Cptr; 1914645f5050SyouriCptr chead = NULL; 1915645f5050Syouri 1916645f5050Syouriint do_var_savecolor(int key) 1917645f5050Syouri{ 1918645f5050Syouri Cptr cptrav, cpnew; 1919645f5050Syouri if (!chead) { 1920645f5050Syouri chead = (Cptr)malloc(sizeof(Cnode)); 1921645f5050Syouri chead->i = key; chead->next = NULL; 1922645f5050Syouri } 1923645f5050Syouri else { 1924645f5050Syouri cptrav = chead; 1925645f5050Syouri while (cptrav->next != NULL) { cptrav = cptrav->next; } 1926645f5050Syouri cpnew = (Cptr)malloc(sizeof(Cnode)); 1927645f5050Syouri cpnew->i = key; cpnew->next = NULL; cptrav->next = cpnew; 1928645f5050Syouri } 1929645f5050Syouri return 0; 1930645f5050Syouri} 1931645f5050Syouri 1932645f5050Syouri/* 1933645f5050Syouri * assign_var_savecolor() traverse the var save color list placeing the pixels 1934645f5050Syouri * in the root window property. 1935645f5050Syouri */ 1936645f5050Syourivoid assign_var_savecolor(void) 1937645f5050Syouri{ 1938645f5050Syouri Cptr cp = chead; 1939645f5050Syouri while (cp != NULL) { 1940645f5050Syouri switch (cp->i) { 1941645f5050Syouri case kwcl_BorderColor: 1942645f5050Syouri put_pixel_on_root(Scr->BorderColorC.back); 1943645f5050Syouri break; 1944645f5050Syouri case kwcl_IconManagerHighlight: 1945645f5050Syouri put_pixel_on_root(Scr->IconManagerHighlight); 1946645f5050Syouri break; 1947645f5050Syouri case kwcl_BorderTileForeground: 1948645f5050Syouri put_pixel_on_root(Scr->BorderTileC.fore); 1949645f5050Syouri break; 1950645f5050Syouri case kwcl_BorderTileBackground: 1951645f5050Syouri put_pixel_on_root(Scr->BorderTileC.back); 1952645f5050Syouri break; 1953645f5050Syouri case kwcl_TitleForeground: 1954645f5050Syouri put_pixel_on_root(Scr->TitleC.fore); 1955645f5050Syouri break; 1956645f5050Syouri case kwcl_TitleBackground: 1957645f5050Syouri put_pixel_on_root(Scr->TitleC.back); 1958645f5050Syouri break; 1959645f5050Syouri case kwcl_IconForeground: 1960645f5050Syouri put_pixel_on_root(Scr->IconC.fore); 1961645f5050Syouri break; 1962645f5050Syouri case kwcl_IconBackground: 1963645f5050Syouri put_pixel_on_root(Scr->IconC.back); 1964645f5050Syouri break; 1965645f5050Syouri case kwcl_IconBorderColor: 1966645f5050Syouri put_pixel_on_root(Scr->IconBorderColor); 1967645f5050Syouri break; 1968645f5050Syouri case kwcl_IconManagerForeground: 1969645f5050Syouri put_pixel_on_root(Scr->IconManagerC.fore); 1970645f5050Syouri break; 1971645f5050Syouri case kwcl_IconManagerBackground: 1972645f5050Syouri put_pixel_on_root(Scr->IconManagerC.back); 1973645f5050Syouri break; 1974645f5050Syouri case kwcl_MapWindowForeground: 1975645f5050Syouri put_pixel_on_root(Scr->workSpaceMgr.windowcp.fore); 1976645f5050Syouri break; 1977645f5050Syouri case kwcl_MapWindowBackground: 1978645f5050Syouri put_pixel_on_root(Scr->workSpaceMgr.windowcp.back); 1979645f5050Syouri break; 1980645f5050Syouri } 1981645f5050Syouri cp = cp->next; 1982645f5050Syouri } 1983645f5050Syouri if (chead) { 1984645f5050Syouri free(chead); 1985645f5050Syouri chead = NULL; 1986645f5050Syouri } 1987645f5050Syouri} 1988645f5050Syouri 1989645f5050Syouristatic int ParseRandomPlacement (register char *s) 1990645f5050Syouri{ 1991645f5050Syouri if (strlen (s) == 0) return RP_ALL; 1992645f5050Syouri if (strcmp (s, "default") == 0) return RP_ALL; 1993645f5050Syouri XmuCopyISOLatin1Lowered (s, s); 1994645f5050Syouri 1995645f5050Syouri if (strcmp (s, "off") == 0) return RP_OFF; 1996645f5050Syouri if (strcmp (s, "on") == 0) return RP_ALL; 1997645f5050Syouri if (strcmp (s, "all") == 0) return RP_ALL; 1998645f5050Syouri if (strcmp (s, "unmapped") == 0) return RP_UNMAPPED; 1999645f5050Syouri return (-1); 2000645f5050Syouri} 2001645f5050Syouri 2002645f5050Syouriint ParseJustification (register char *s) 2003645f5050Syouri{ 2004645f5050Syouri if (strlen (s) == 0) return (-1); 2005645f5050Syouri if (strcmp (s, "default") == 0) return J_CENTER; 2006645f5050Syouri if (strcmp (s, "undef") == 0) return J_UNDEF; 2007645f5050Syouri XmuCopyISOLatin1Lowered (s, s); 2008645f5050Syouri 2009645f5050Syouri if (strcmp (s, "undef") == 0) return J_UNDEF; 2010645f5050Syouri if (strcmp (s, "default") == 0) return J_CENTER; 2011645f5050Syouri if (strcmp (s, "left") == 0) return J_LEFT; 2012645f5050Syouri if (strcmp (s, "center") == 0) return J_CENTER; 2013645f5050Syouri if (strcmp (s, "right") == 0) return J_RIGHT; 2014645f5050Syouri if (strcmp (s, "border") == 0) return J_BORDER; 2015645f5050Syouri return (-1); 2016645f5050Syouri} 2017645f5050Syouri 2018645f5050Syouriint ParseAlignement (register char *s) 2019645f5050Syouri{ 2020645f5050Syouri if (strlen (s) == 0) return (-1); 2021645f5050Syouri if (strcmp (s, "default") == 0) return J_CENTER; 2022645f5050Syouri if (strcmp (s, "undef") == 0) return J_UNDEF; 2023645f5050Syouri XmuCopyISOLatin1Lowered (s, s); 2024645f5050Syouri 2025645f5050Syouri if (strcmp (s, "undef") == 0) return J_UNDEF; 2026645f5050Syouri if (strcmp (s, "default") == 0) return J_CENTER; 2027645f5050Syouri if (strcmp (s, "top") == 0) return J_TOP; 2028645f5050Syouri if (strcmp (s, "center") == 0) return J_CENTER; 2029645f5050Syouri if (strcmp (s, "bottom") == 0) return J_BOTTOM; 2030645f5050Syouri if (strcmp (s, "border") == 0) return J_BORDER; 2031645f5050Syouri return (-1); 2032645f5050Syouri} 2033645f5050Syouri 2034645f5050Syouristatic int ParseUsePPosition (register char *s) 2035645f5050Syouri{ 2036645f5050Syouri if (strlen (s) == 0) return (-1); 2037645f5050Syouri if (strcmp (s, "default") == 0) return PPOS_OFF; 2038645f5050Syouri XmuCopyISOLatin1Lowered (s, s); 2039645f5050Syouri 2040645f5050Syouri if (strcmp (s, "default") == 0) return PPOS_OFF; 2041645f5050Syouri if (strcmp (s, "off") == 0) return PPOS_OFF; 2042645f5050Syouri if (strcmp (s, "on") == 0) return PPOS_ON; 2043645f5050Syouri if (strcmp (s, "non-zero") == 0) return PPOS_NON_ZERO; 2044645f5050Syouri if (strcmp (s, "nonzero") == 0) return PPOS_NON_ZERO; 2045645f5050Syouri return (-1); 2046645f5050Syouri} 2047645f5050Syouri 2048645f5050Syouristatic int ParseButtonStyle (register char *s) 2049645f5050Syouri{ 2050645f5050Syouri if (strlen (s) == 0) return (-1); 2051645f5050Syouri if (strcmp (s, "default") == 0) return STYLE_NORMAL; 2052645f5050Syouri XmuCopyISOLatin1Lowered (s, s); 2053645f5050Syouri 2054645f5050Syouri if (strcmp (s, "normal") == 0) return STYLE_NORMAL; 2055645f5050Syouri if (strcmp (s, "style1") == 0) return STYLE_STYLE1; 2056645f5050Syouri if (strcmp (s, "style2") == 0) return STYLE_STYLE2; 2057645f5050Syouri if (strcmp (s, "style3") == 0) return STYLE_STYLE3; 2058645f5050Syouri return (-1); 2059645f5050Syouri} 2060645f5050Syouri 2061645f5050Syouriint do_squeeze_entry (name_list **list, /* squeeze or dont-squeeze list */ 2062645f5050Syouri char *name, /* window name */ 2063645f5050Syouri int justify, /* left, center, right */ 2064645f5050Syouri int num, /* signed num */ 2065645f5050Syouri int denom) /* 0 or indicates fraction denom */ 2066645f5050Syouri{ 2067645f5050Syouri int absnum = (num < 0 ? -num : num); 2068645f5050Syouri 2069645f5050Syouri if (denom < 0) { 2070645f5050Syouri twmrc_error_prefix(); 2071645f5050Syouri fprintf (stderr, "negative SqueezeTitle denominator %d\n", denom); 2072645f5050Syouri return (1); 2073645f5050Syouri } 2074645f5050Syouri if (absnum > denom && denom != 0) { 2075645f5050Syouri twmrc_error_prefix(); 2076645f5050Syouri fprintf (stderr, "SqueezeTitle fraction %d/%d outside window\n", 2077645f5050Syouri num, denom); 2078645f5050Syouri return (1); 2079645f5050Syouri } 2080645f5050Syouri /* Process the special cases from the manual here rather than 2081645f5050Syouri * each time we calculate the position of the title bar 2082645f5050Syouri * in add_window.c:ComputeTitleLocation(). 2083645f5050Syouri * In fact, it's better to get rid of them entirely, but we 2084645f5050Syouri * probably should not do that for compatibility's sake. 2085645f5050Syouri * By using a non-zero denominator the position will be relative. 2086645f5050Syouri */ 2087645f5050Syouri if (denom == 0 && num == 0) { 2088645f5050Syouri if (justify == J_CENTER) { 2089645f5050Syouri num = 1; 2090645f5050Syouri denom = 2; 2091645f5050Syouri } else if (justify == J_RIGHT) { 2092645f5050Syouri num = 2; 2093645f5050Syouri denom = 2; 2094645f5050Syouri } 2095645f5050Syouri twmrc_error_prefix(); 2096645f5050Syouri fprintf (stderr, "deprecated SqueezeTitle faction 0/0, assuming %d/%d\n", 2097645f5050Syouri num, denom); 2098645f5050Syouri } 2099645f5050Syouri 2100645f5050Syouri if (HasShape) { 2101645f5050Syouri SqueezeInfo *sinfo; 2102645f5050Syouri sinfo = (SqueezeInfo *) malloc (sizeof(SqueezeInfo)); 2103645f5050Syouri 2104645f5050Syouri if (!sinfo) { 2105645f5050Syouri twmrc_error_prefix(); 2106645f5050Syouri fprintf (stderr, "unable to allocate %lu bytes for squeeze info\n", 2107645f5050Syouri (unsigned long) sizeof(SqueezeInfo)); 2108645f5050Syouri return (1); 2109645f5050Syouri } 2110645f5050Syouri sinfo->justify = justify; 2111645f5050Syouri sinfo->num = num; 2112645f5050Syouri sinfo->denom = denom; 2113645f5050Syouri AddToList (list, name, (char *) sinfo); 2114645f5050Syouri } 2115645f5050Syouri return (0); 2116645f5050Syouri} 2117645f5050Syouri 2118645f5050Syouri#ifdef USEM4 2119645f5050Syouri 2120645f5050Syouristatic FILE *start_m4(FILE *fraw) 2121645f5050Syouri{ 2122645f5050Syouri int fno; 2123645f5050Syouri int fids[2]; 2124645f5050Syouri int fres; /* Fork result */ 2125645f5050Syouri 2126645f5050Syouri fno = fileno(fraw); 2127645f5050Syouri /* if (-1 == fcntl(fno, F_SETFD, 0)) perror("fcntl()"); */ 2128fb81d040Schristos if (pipe(fids) < 0) { 2129fb81d040Schristos perror("Pipe for " M4CMD " failed"); 2130fb81d040Schristos exit(23); 2131fb81d040Schristos } 2132645f5050Syouri fres = fork(); 2133645f5050Syouri if (fres < 0) { 2134645f5050Syouri perror("Fork for " M4CMD " failed"); 2135645f5050Syouri exit(23); 2136645f5050Syouri } 2137645f5050Syouri if (fres == 0) { 2138645f5050Syouri char *tmp_file; 2139645f5050Syouri 2140645f5050Syouri /* Child */ 2141645f5050Syouri close(0); /* stdin */ 2142645f5050Syouri close(1); /* stdout */ 2143645f5050Syouri dup2(fno, 0); /* stdin = fraw */ 2144645f5050Syouri dup2(fids[1], 1); /* stdout = pipe to parent */ 2145645f5050Syouri /* get_defs("m4", dpy, display_name) */ 2146645f5050Syouri tmp_file = m4_defs(dpy, display_name); 2147645f5050Syouri execlp(M4CMD, M4CMD, "-s", tmp_file, "-", NULL); 2148645f5050Syouri 2149645f5050Syouri /* If we get here we are screwed... */ 2150645f5050Syouri perror("Can't execlp() " M4CMD); 2151645f5050Syouri exit(124); 2152645f5050Syouri } 2153645f5050Syouri /* Parent */ 2154645f5050Syouri close(fids[1]); 2155645f5050Syouri return ((FILE*)fdopen(fids[0], "r")); 2156645f5050Syouri} 2157645f5050Syouri 2158645f5050Syouri/* Code taken and munged from xrdb.c */ 2159645f5050Syouri#define MAXHOSTNAME 255 2160645f5050Syouri#define Resolution(pixels, mm) ((((pixels) * 100000 / (mm)) + 50) / 100) 2161645f5050Syouri#define EXTRA 16 2162645f5050Syouri 2163645f5050Syouristatic char *MkDef(char *name, char *def) 2164645f5050Syouri{ 2165645f5050Syouri static char *cp = NULL; 2166645f5050Syouri static int maxsize = 0; 2167645f5050Syouri int n, nl; 2168645f5050Syouri 2169645f5050Syouri if (def == NULL) return (""); /* XXX JWS: prevent segfaults */ 2170645f5050Syouri /* The char * storage only lasts for 1 call... */ 2171645f5050Syouri if ((n = EXTRA + ((nl = strlen(name)) + strlen(def))) > maxsize) { 2172645f5050Syouri maxsize = n; 2173645f5050Syouri if (cp) free(cp); 2174645f5050Syouri 2175645f5050Syouri cp = malloc(n); 2176645f5050Syouri } 2177645f5050Syouri /* Otherwise cp is aready big 'nuf */ 2178645f5050Syouri if (cp == NULL) { 2179645f5050Syouri fprintf(stderr, "Can't get %d bytes for arg parm\n", n); 2180645f5050Syouri exit(468); 2181645f5050Syouri } 2182645f5050Syouri strcpy (cp, "define(`"); 2183645f5050Syouri strcat (cp, name); 2184645f5050Syouri strcat (cp, "', `"); 2185645f5050Syouri strcat (cp, def); 2186645f5050Syouri strcat (cp, "')\n"); 2187645f5050Syouri 2188645f5050Syouri return(cp); 2189645f5050Syouri} 2190645f5050Syouri 2191645f5050Syouristatic char *MkNum(char *name, int def) 2192645f5050Syouri{ 2193645f5050Syouri char num[20]; 2194645f5050Syouri 2195645f5050Syouri sprintf(num, "%d", def); 2196645f5050Syouri return(MkDef(name, num)); 2197645f5050Syouri} 2198645f5050Syouri 2199645f5050Syouri#ifdef NOSTEMP 2200645f5050Syouriint mkstemp(str) 2201645f5050Syourichar *str; 2202645f5050Syouri{ 2203645f5050Syouri int fd; 2204645f5050Syouri 2205645f5050Syouri mktemp(str); 2206645f5050Syouri fd = creat(str, 0744); 2207645f5050Syouri if (fd == -1) perror("mkstemp's creat"); 2208645f5050Syouri return(fd); 2209645f5050Syouri} 2210645f5050Syouri#endif 2211645f5050Syouri 2212645f5050Syouristatic char *m4_defs(Display *display, char *host) 2213645f5050Syouri{ 2214645f5050Syouri Screen *screen; 2215645f5050Syouri Visual *visual; 2216645f5050Syouri char client[MAXHOSTNAME], server[MAXHOSTNAME], *colon; 2217645f5050Syouri struct hostent *hostname; 2218645f5050Syouri char *vc; /* Visual Class */ 2219645f5050Syouri static char tmp_name[] = "/tmp/twmrcXXXXXX"; 2220645f5050Syouri int fd; 2221645f5050Syouri FILE *tmpf; 2222645f5050Syouri char *user; 2223645f5050Syouri 2224645f5050Syouri fd = mkstemp(tmp_name); /* I *hope* mkstemp exists, because */ 2225645f5050Syouri /* I tried to find the "portable" */ 2226645f5050Syouri /* mktmp... */ 2227645f5050Syouri if (fd < 0) { 2228645f5050Syouri perror("mkstemp failed in m4_defs"); 2229645f5050Syouri exit(377); 2230645f5050Syouri } 2231645f5050Syouri tmpf = (FILE*) fdopen(fd, "w+"); 2232645f5050Syouri XmuGetHostname(client, MAXHOSTNAME); 2233645f5050Syouri hostname = gethostbyname(client); 2234645f5050Syouri strcpy(server, XDisplayName(host)); 2235645f5050Syouri colon = strchr(server, ':'); 2236645f5050Syouri if (colon != NULL) *colon = '\0'; 2237645f5050Syouri if ((server[0] == '\0') || (!strcmp(server, "unix"))) 2238645f5050Syouri strcpy(server, client); /* must be connected to :0 or unix:0 */ 2239645f5050Syouri /* The machine running the X server */ 2240645f5050Syouri fputs(MkDef("SERVERHOST", server), tmpf); 2241645f5050Syouri /* The machine running the window manager process */ 2242645f5050Syouri fputs(MkDef("CLIENTHOST", client), tmpf); 2243645f5050Syouri if (hostname) 2244645f5050Syouri fputs(MkDef("HOSTNAME", hostname->h_name), tmpf); 2245645f5050Syouri else 2246645f5050Syouri fputs(MkDef("HOSTNAME", client), tmpf); 2247645f5050Syouri 2248645f5050Syouri if (!(user=getenv("USER")) && !(user=getenv("LOGNAME"))) user = "unknown"; 2249645f5050Syouri fputs(MkDef("USER", user), tmpf); 2250645f5050Syouri fputs(MkDef("HOME", getenv("HOME")), tmpf); 2251645f5050Syouri fputs(MkDef("PIXMAP_DIRECTORY", PIXMAP_DIRECTORY), tmpf); 2252645f5050Syouri fputs(MkNum("VERSION", ProtocolVersion(display)), tmpf); 2253645f5050Syouri fputs(MkNum("REVISION", ProtocolRevision(display)), tmpf); 2254645f5050Syouri fputs(MkDef("VENDOR", ServerVendor(display)), tmpf); 2255645f5050Syouri fputs(MkNum("RELEASE", VendorRelease(display)), tmpf); 2256645f5050Syouri screen = ScreenOfDisplay(display, Scr->screen); 2257645f5050Syouri visual = DefaultVisualOfScreen(screen); 2258645f5050Syouri fputs(MkNum("WIDTH", screen->width), tmpf); 2259645f5050Syouri fputs(MkNum("HEIGHT", screen->height), tmpf); 2260645f5050Syouri fputs(MkNum("X_RESOLUTION",Resolution(screen->width,screen->mwidth)), tmpf); 2261645f5050Syouri fputs(MkNum("Y_RESOLUTION",Resolution(screen->height,screen->mheight)),tmpf); 2262645f5050Syouri fputs(MkNum("PLANES",DisplayPlanes(display, Scr->screen)), tmpf); 2263645f5050Syouri fputs(MkNum("BITS_PER_RGB", visual->bits_per_rgb), tmpf); 2264645f5050Syouri fputs(MkDef("TWM_TYPE", "ctwm"), tmpf); 2265645f5050Syouri fputs(MkDef("TWM_VERSION", VersionNumber), tmpf); 2266645f5050Syouri switch(visual->class) { 2267645f5050Syouri case(StaticGray): vc = "StaticGray"; break; 2268645f5050Syouri case(GrayScale): vc = "GrayScale"; break; 2269645f5050Syouri case(StaticColor): vc = "StaticColor"; break; 2270645f5050Syouri case(PseudoColor): vc = "PseudoColor"; break; 2271645f5050Syouri case(TrueColor): vc = "TrueColor"; break; 2272645f5050Syouri case(DirectColor): vc = "DirectColor"; break; 2273645f5050Syouri default: vc = "NonStandard"; break; 2274645f5050Syouri } 2275645f5050Syouri fputs(MkDef("CLASS", vc), tmpf); 2276645f5050Syouri if (visual->class != StaticGray && visual->class != GrayScale) { 2277645f5050Syouri fputs(MkDef("COLOR", "Yes"), tmpf); 2278645f5050Syouri } else { 2279645f5050Syouri fputs(MkDef("COLOR", "No"), tmpf); 2280645f5050Syouri } 2281645f5050Syouri#ifdef XPM 2282645f5050Syouri fputs(MkDef("XPM", "Yes"), tmpf); 2283645f5050Syouri#endif 2284645f5050Syouri#ifdef JPEG 2285645f5050Syouri fputs(MkDef("JPEG", "Yes"), tmpf); 2286645f5050Syouri#endif 2287645f5050Syouri#ifdef IMCONV 2288645f5050Syouri fputs(MkDef("IMCONV", "Yes"), tmpf); 2289645f5050Syouri#endif 2290645f5050Syouri#ifdef GNOME 2291645f5050Syouri fputs(MkDef("GNOME", "Yes"), tmpf); 2292645f5050Syouri#endif 2293645f5050Syouri#ifdef SOUNDS 2294645f5050Syouri fputs(MkDef("SOUNDS", "Yes"), tmpf); 2295645f5050Syouri#endif 2296645f5050Syouri fputs(MkDef("I18N", "Yes"), tmpf); 2297645f5050Syouri if (captive && captivename) { 2298645f5050Syouri fputs (MkDef ("TWM_CAPTIVE", "Yes"), tmpf); 2299645f5050Syouri fputs (MkDef ("TWM_CAPTIVE_NAME", captivename), tmpf); 2300645f5050Syouri } else { 2301645f5050Syouri fputs (MkDef ("TWM_CAPTIVE", "No"), tmpf); 2302645f5050Syouri } 2303645f5050Syouri if (KeepTmpFile) { 2304645f5050Syouri fprintf(stderr, "Left file: %s\n", tmp_name); 2305645f5050Syouri } else { 2306645f5050Syouri fprintf(tmpf, "syscmd(/bin/rm %s)\n", tmp_name); 2307645f5050Syouri } 2308645f5050Syouri fclose(tmpf); 2309645f5050Syouri return(tmp_name); 2310645f5050Syouri} 2311645f5050Syouri#endif /* USEM4 */ 2312