gram.y revision 645f5050
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: gram.y,v 1.91 91/02/08 18:21:56 dave Exp $ 57645f5050Syouri * 58645f5050Syouri * .twmrc command grammer 59645f5050Syouri * 60645f5050Syouri * 07-Jan-86 Thomas E. LaStrange File created 61645f5050Syouri * 11-Nov-90 Dave Sternlicht Adding SaveColors 62645f5050Syouri * 10-Oct-90 David M. Sternlicht Storing saved colors on root 63645f5050Syouri * 22-April-92 Claude Lecommandeur modifications for ctwm. 64645f5050Syouri * 65645f5050Syouri ***********************************************************************/ 66645f5050Syouri 67645f5050Syouri%{ 68645f5050Syouri#include <stdio.h> 69645f5050Syouri#include <ctype.h> 70645f5050Syouri#include "twm.h" 71645f5050Syouri#include "menus.h" 72645f5050Syouri#include "icons.h" 73645f5050Syouri#include "windowbox.h" 74645f5050Syouri#include "add_window.h" 75645f5050Syouri#include "list.h" 76645f5050Syouri#include "util.h" 77645f5050Syouri#include "screen.h" 78645f5050Syouri#include "parse.h" 79645f5050Syouri#include "cursor.h" 80645f5050Syouri#ifdef VMS 81645f5050Syouri# include <decw$include/Xos.h> 82645f5050Syouri# include <X11Xmu/CharSet.h> 83645f5050Syouri#else 84645f5050Syouri# include <X11/Xos.h> 85645f5050Syouri# include <X11/Xmu/CharSet.h> 86645f5050Syouri#endif 87645f5050Syouri 88645f5050Syouristatic char *Action = ""; 89645f5050Syouristatic char *Name = ""; 90645f5050Syouristatic char *defstring = "default"; 91645f5050Syouristatic MenuRoot *root, *pull = NULL; 92645f5050Syouristatic char *curWorkSpc; 93645f5050Syouristatic char *client, *workspace; 94645f5050Syouristatic MenuItem *lastmenuitem = (MenuItem*) 0; 95645f5050Syouri 96645f5050Syouriextern void yyerror(char *s); 97645f5050Syouriextern void RemoveDQuote(char *str); 98645f5050Syouri 99645f5050Syouristatic MenuRoot *GetRoot(char *name, char *fore, char *back); 100645f5050Syouri 101645f5050Syouristatic Bool CheckWarpScreenArg(register char *s); 102645f5050Syouristatic Bool CheckWarpRingArg(register char *s); 103645f5050Syouristatic Bool CheckColormapArg(register char *s); 104645f5050Syouristatic void GotButton(int butt, int func); 105645f5050Syouristatic void GotKey(char *key, int func); 106645f5050Syouristatic void GotTitleButton(char *bitmapname, int func, Bool rightside); 107645f5050Syouristatic char *ptr; 108645f5050Syouristatic name_list **list; 109645f5050Syouristatic int cont = 0; 110645f5050Syouristatic int color; 111645f5050SyouriBool donttoggleworkspacemanagerstate = FALSE; 112645f5050Syouriint mods = 0; 113645f5050Syouriunsigned int mods_used = (ShiftMask | ControlMask | Mod1Mask); 114645f5050Syouri 115645f5050Syouriextern void twmrc_error_prefix(void); 116645f5050Syouri 117645f5050Syouriextern int yylex(void); 118645f5050Syouriextern int yyparse(void); 119645f5050Syouri%} 120645f5050Syouri 121645f5050Syouri%union 122645f5050Syouri{ 123645f5050Syouri int num; 124645f5050Syouri char *ptr; 125645f5050Syouri}; 126645f5050Syouri 127645f5050Syouri 128645f5050Syouri%token <num> LB RB LP RP MENUS MENU BUTTON DEFAULT_FUNCTION PLUS MINUS 129645f5050Syouri%token <num> ALL OR CURSORS PIXMAPS ICONS COLOR SAVECOLOR MONOCHROME FUNCTION 130645f5050Syouri%token <num> ICONMGR_SHOW ICONMGR ALTER WINDOW_FUNCTION ZOOM ICONMGRS 131645f5050Syouri%token <num> ICONMGR_GEOMETRY ICONMGR_NOSHOW MAKE_TITLE 132645f5050Syouri%token <num> ICONIFY_BY_UNMAPPING DONT_ICONIFY_BY_UNMAPPING 133645f5050Syouri%token <num> NO_BORDER NO_ICON_TITLE NO_TITLE AUTO_RAISE NO_HILITE ICON_REGION 134645f5050Syouri%token <num> WINDOW_REGION META SHIFT LOCK CONTROL WINDOW TITLE ICON ROOT FRAME 135645f5050Syouri%token <num> COLON EQUALS SQUEEZE_TITLE DONT_SQUEEZE_TITLE 136645f5050Syouri%token <num> START_ICONIFIED NO_TITLE_HILITE TITLE_HILITE 137645f5050Syouri%token <num> MOVE RESIZE WAITC SELECT KILL LEFT_TITLEBUTTON RIGHT_TITLEBUTTON 138645f5050Syouri%token <num> NUMBER KEYWORD NKEYWORD CKEYWORD CLKEYWORD FKEYWORD FSKEYWORD 139645f5050Syouri%token <num> SKEYWORD SSKEYWORD DKEYWORD JKEYWORD WINDOW_RING WINDOW_RING_EXCLUDE WARP_CURSOR ERRORTOKEN 140645f5050Syouri%token <num> NO_STACKMODE ALWAYS_ON_TOP WORKSPACE WORKSPACES WORKSPCMGR_GEOMETRY 141645f5050Syouri%token <num> OCCUPYALL OCCUPYLIST MAPWINDOWCURRENTWORKSPACE MAPWINDOWDEFAULTWORKSPACE 142645f5050Syouri%token <num> UNMAPBYMOVINGFARAWAY OPAQUEMOVE NOOPAQUEMOVE OPAQUERESIZE NOOPAQUERESIZE 143645f5050Syouri%token <num> DONTSETINACTIVE CHANGE_WORKSPACE_FUNCTION DEICONIFY_FUNCTION ICONIFY_FUNCTION 144645f5050Syouri%token <num> AUTOSQUEEZE STARTSQUEEZED DONT_SAVE AUTO_LOWER ICONMENU_DONTSHOW WINDOW_BOX 145645f5050Syouri%token <num> IGNOREMODIFIER WINDOW_GEOMETRIES ALWAYSSQUEEZETOGRAVITY VIRTUAL_SCREENS 146645f5050Syouri%token <num> IGNORE_TRANSIENT DONTTOGGLEWORKSPACEMANAGERSTATE 147645f5050Syouri%token <ptr> STRING 148645f5050Syouri 149645f5050Syouri%type <ptr> string 150645f5050Syouri%type <num> action button number signed_number keyaction full fullkey 151645f5050Syouri 152645f5050Syouri%start twmrc 153645f5050Syouri 154645f5050Syouri%% 155645f5050Syouritwmrc : stmts 156645f5050Syouri ; 157645f5050Syouri 158645f5050Syouristmts : /* Empty */ 159645f5050Syouri | stmts stmt 160645f5050Syouri ; 161645f5050Syouri 162645f5050Syouristmt : error 163645f5050Syouri | noarg 164645f5050Syouri | sarg 165645f5050Syouri | narg 166645f5050Syouri | squeeze 167645f5050Syouri | ICON_REGION string DKEYWORD DKEYWORD number number { 168645f5050Syouri (void) AddIconRegion($2, $3, $4, $5, $6, "undef", "undef", "undef"); 169645f5050Syouri } 170645f5050Syouri | ICON_REGION string DKEYWORD DKEYWORD number number string { 171645f5050Syouri (void) AddIconRegion($2, $3, $4, $5, $6, $7, "undef", "undef"); 172645f5050Syouri } 173645f5050Syouri | ICON_REGION string DKEYWORD DKEYWORD number number string string { 174645f5050Syouri (void) AddIconRegion($2, $3, $4, $5, $6, $7, $8, "undef"); 175645f5050Syouri } 176645f5050Syouri | ICON_REGION string DKEYWORD DKEYWORD number number string string string { 177645f5050Syouri (void) AddIconRegion($2, $3, $4, $5, $6, $7, $8, $9); 178645f5050Syouri } 179645f5050Syouri | ICON_REGION string DKEYWORD DKEYWORD number number { 180645f5050Syouri list = AddIconRegion($2, $3, $4, $5, $6, "undef", "undef", "undef"); 181645f5050Syouri } 182645f5050Syouri win_list 183645f5050Syouri | ICON_REGION string DKEYWORD DKEYWORD number number string { 184645f5050Syouri list = AddIconRegion($2, $3, $4, $5, $6, $7, "undef", "undef"); 185645f5050Syouri } 186645f5050Syouri win_list 187645f5050Syouri | ICON_REGION string DKEYWORD DKEYWORD number number string string { 188645f5050Syouri list = AddIconRegion($2, $3, $4, $5, $6, $7, $8, "undef"); 189645f5050Syouri } 190645f5050Syouri win_list 191645f5050Syouri | ICON_REGION string DKEYWORD DKEYWORD number number string string string { 192645f5050Syouri list = AddIconRegion($2, $3, $4, $5, $6, $7, $8, $9); 193645f5050Syouri } 194645f5050Syouri win_list 195645f5050Syouri 196645f5050Syouri | WINDOW_REGION string DKEYWORD DKEYWORD { 197645f5050Syouri list = AddWindowRegion ($2, $3, $4); 198645f5050Syouri } 199645f5050Syouri win_list 200645f5050Syouri 201645f5050Syouri | WINDOW_BOX string string { 202645f5050Syouri list = addWindowBox ($2, $3); 203645f5050Syouri } 204645f5050Syouri win_list 205645f5050Syouri 206645f5050Syouri | ICONMGR_GEOMETRY string number { if (Scr->FirstTime) 207645f5050Syouri { 208645f5050Syouri Scr->iconmgr->geometry= (char*)$2; 209645f5050Syouri Scr->iconmgr->columns=$3; 210645f5050Syouri } 211645f5050Syouri } 212645f5050Syouri | ICONMGR_GEOMETRY string { if (Scr->FirstTime) 213645f5050Syouri Scr->iconmgr->geometry = (char*)$2; 214645f5050Syouri } 215645f5050Syouri | WORKSPCMGR_GEOMETRY string number { if (Scr->FirstTime) 216645f5050Syouri { 217645f5050Syouri Scr->workSpaceMgr.geometry= (char*)$2; 218645f5050Syouri Scr->workSpaceMgr.columns=$3; 219645f5050Syouri } 220645f5050Syouri } 221645f5050Syouri | WORKSPCMGR_GEOMETRY string { if (Scr->FirstTime) 222645f5050Syouri Scr->workSpaceMgr.geometry = (char*)$2; 223645f5050Syouri } 224645f5050Syouri | MAPWINDOWCURRENTWORKSPACE {} 225645f5050Syouri curwork 226645f5050Syouri 227645f5050Syouri | MAPWINDOWDEFAULTWORKSPACE {} 228645f5050Syouri defwork 229645f5050Syouri 230645f5050Syouri | ZOOM number { if (Scr->FirstTime) 231645f5050Syouri { 232645f5050Syouri Scr->DoZoom = TRUE; 233645f5050Syouri Scr->ZoomCount = $2; 234645f5050Syouri } 235645f5050Syouri } 236645f5050Syouri | ZOOM { if (Scr->FirstTime) 237645f5050Syouri Scr->DoZoom = TRUE; } 238645f5050Syouri | PIXMAPS pixmap_list {} 239645f5050Syouri | CURSORS cursor_list {} 240645f5050Syouri | ICONIFY_BY_UNMAPPING { list = &Scr->IconifyByUn; } 241645f5050Syouri win_list 242645f5050Syouri | ICONIFY_BY_UNMAPPING { if (Scr->FirstTime) 243645f5050Syouri Scr->IconifyByUnmapping = TRUE; } 244645f5050Syouri 245645f5050Syouri | OPAQUEMOVE { list = &Scr->OpaqueMoveList; } 246645f5050Syouri win_list 247645f5050Syouri | OPAQUEMOVE { if (Scr->FirstTime) Scr->DoOpaqueMove = TRUE; } 248645f5050Syouri | NOOPAQUEMOVE { list = &Scr->NoOpaqueMoveList; } 249645f5050Syouri win_list 250645f5050Syouri | NOOPAQUEMOVE { if (Scr->FirstTime) Scr->DoOpaqueMove = FALSE; } 251645f5050Syouri | OPAQUERESIZE { list = &Scr->OpaqueMoveList; } 252645f5050Syouri win_list 253645f5050Syouri | OPAQUERESIZE { if (Scr->FirstTime) Scr->DoOpaqueResize = TRUE; } 254645f5050Syouri | NOOPAQUERESIZE { list = &Scr->NoOpaqueResizeList; } 255645f5050Syouri win_list 256645f5050Syouri | NOOPAQUERESIZE { if (Scr->FirstTime) Scr->DoOpaqueResize = FALSE; } 257645f5050Syouri 258645f5050Syouri | LEFT_TITLEBUTTON string EQUALS action { 259645f5050Syouri GotTitleButton ($2, $4, False); 260645f5050Syouri } 261645f5050Syouri | RIGHT_TITLEBUTTON string EQUALS action { 262645f5050Syouri GotTitleButton ($2, $4, True); 263645f5050Syouri } 264645f5050Syouri | LEFT_TITLEBUTTON string { CreateTitleButton($2, 0, NULL, NULL, FALSE, TRUE); } 265645f5050Syouri binding_list 266645f5050Syouri | RIGHT_TITLEBUTTON string { CreateTitleButton($2, 0, NULL, NULL, TRUE, TRUE); } 267645f5050Syouri binding_list 268645f5050Syouri | button string { 269645f5050Syouri root = GetRoot($2, NULLSTR, NULLSTR); 270645f5050Syouri AddFuncButton ($1, C_ROOT, 0, F_MENU, root, (MenuItem*) 0); 271645f5050Syouri } 272645f5050Syouri | button action { 273645f5050Syouri if ($2 == F_MENU) { 274645f5050Syouri pull->prev = NULL; 275645f5050Syouri AddFuncButton ($1, C_ROOT, 0, $2, pull, (MenuItem*) 0); 276645f5050Syouri } 277645f5050Syouri else { 278645f5050Syouri MenuItem *item; 279645f5050Syouri 280645f5050Syouri root = GetRoot(TWM_ROOT,NULLSTR,NULLSTR); 281645f5050Syouri item = AddToMenu (root, "x", Action, 282645f5050Syouri NULL, $2, NULLSTR, NULLSTR); 283645f5050Syouri AddFuncButton ($1, C_ROOT, 0, $2, (MenuRoot*) 0, item); 284645f5050Syouri } 285645f5050Syouri Action = ""; 286645f5050Syouri pull = NULL; 287645f5050Syouri } 288645f5050Syouri | string fullkey { GotKey($1, $2); } 289645f5050Syouri | button full { GotButton($1, $2); } 290645f5050Syouri 291645f5050Syouri | DONT_ICONIFY_BY_UNMAPPING { list = &Scr->DontIconify; } 292645f5050Syouri win_list 293645f5050Syouri | WORKSPACES {} 294645f5050Syouri workspc_list 295645f5050Syouri | IGNOREMODIFIER {} LB keys { Scr->IgnoreModifier = mods; mods = 0; } RB 296645f5050Syouri | OCCUPYALL { list = &Scr->OccupyAll; } 297645f5050Syouri win_list 298645f5050Syouri | ICONMENU_DONTSHOW { list = &Scr->IconMenuDontShow; } 299645f5050Syouri win_list 300645f5050Syouri | OCCUPYLIST {} 301645f5050Syouri occupy_list 302645f5050Syouri | UNMAPBYMOVINGFARAWAY { list = &Scr->UnmapByMovingFarAway; } 303645f5050Syouri win_list 304645f5050Syouri | AUTOSQUEEZE { list = &Scr->AutoSqueeze; } 305645f5050Syouri win_list 306645f5050Syouri | STARTSQUEEZED { list = &Scr->StartSqueezed; } 307645f5050Syouri win_list 308645f5050Syouri | ALWAYSSQUEEZETOGRAVITY { Scr->AlwaysSqueezeToGravity = TRUE; } 309645f5050Syouri | ALWAYSSQUEEZETOGRAVITY { list = &Scr->AlwaysSqueezeToGravityL; } 310645f5050Syouri win_list 311645f5050Syouri | DONTSETINACTIVE { list = &Scr->DontSetInactive; } 312645f5050Syouri win_list 313645f5050Syouri | ICONMGR_NOSHOW { list = &Scr->IconMgrNoShow; } 314645f5050Syouri win_list 315645f5050Syouri | ICONMGR_NOSHOW { Scr->IconManagerDontShow = TRUE; } 316645f5050Syouri | ICONMGRS { list = &Scr->IconMgrs; } 317645f5050Syouri iconm_list 318645f5050Syouri | ICONMGR_SHOW { list = &Scr->IconMgrShow; } 319645f5050Syouri win_list 320645f5050Syouri | NO_TITLE_HILITE { list = &Scr->NoTitleHighlight; } 321645f5050Syouri win_list 322645f5050Syouri | NO_TITLE_HILITE { if (Scr->FirstTime) 323645f5050Syouri Scr->TitleHighlight = FALSE; } 324645f5050Syouri | NO_HILITE { list = &Scr->NoHighlight; } 325645f5050Syouri win_list 326645f5050Syouri | NO_HILITE { if (Scr->FirstTime) 327645f5050Syouri Scr->Highlight = FALSE; } 328645f5050Syouri | ALWAYS_ON_TOP { list = &Scr->AlwaysOnTopL; } 329645f5050Syouri win_list 330645f5050Syouri | NO_STACKMODE { list = &Scr->NoStackModeL; } 331645f5050Syouri win_list 332645f5050Syouri | NO_STACKMODE { if (Scr->FirstTime) 333645f5050Syouri Scr->StackMode = FALSE; } 334645f5050Syouri | NO_BORDER { list = &Scr->NoBorder; } 335645f5050Syouri win_list 336645f5050Syouri | DONT_SAVE { list = &Scr->DontSave; } 337645f5050Syouri win_list 338645f5050Syouri | NO_ICON_TITLE { list = &Scr->NoIconTitle; } 339645f5050Syouri win_list 340645f5050Syouri | NO_ICON_TITLE { if (Scr->FirstTime) 341645f5050Syouri Scr->NoIconTitlebar = TRUE; } 342645f5050Syouri | NO_TITLE { list = &Scr->NoTitle; } 343645f5050Syouri win_list 344645f5050Syouri | NO_TITLE { if (Scr->FirstTime) 345645f5050Syouri Scr->NoTitlebar = TRUE; } 346645f5050Syouri | IGNORE_TRANSIENT { list = &Scr->IgnoreTransientL; } 347645f5050Syouri win_list 348645f5050Syouri | DONTTOGGLEWORKSPACEMANAGERSTATE { donttoggleworkspacemanagerstate = TRUE; } 349645f5050Syouri | MAKE_TITLE { list = &Scr->MakeTitle; } 350645f5050Syouri win_list 351645f5050Syouri | START_ICONIFIED { list = &Scr->StartIconified; } 352645f5050Syouri win_list 353645f5050Syouri | AUTO_RAISE { list = &Scr->AutoRaise; } 354645f5050Syouri win_list 355645f5050Syouri | AUTO_RAISE { Scr->AutoRaiseDefault = TRUE; } 356645f5050Syouri | AUTO_LOWER { list = &Scr->AutoLower; } 357645f5050Syouri win_list 358645f5050Syouri | AUTO_LOWER { Scr->AutoLowerDefault = TRUE; } 359645f5050Syouri | MENU string LP string COLON string RP { 360645f5050Syouri root = GetRoot($2, $4, $6); } 361645f5050Syouri menu { root->real_menu = TRUE;} 362645f5050Syouri | MENU string { root = GetRoot($2, NULLSTR, NULLSTR); } 363645f5050Syouri menu { root->real_menu = TRUE; } 364645f5050Syouri | FUNCTION string { root = GetRoot($2, NULLSTR, NULLSTR); } 365645f5050Syouri function 366645f5050Syouri | ICONS { list = &Scr->IconNames; } 367645f5050Syouri icon_list 368645f5050Syouri | COLOR { color = COLOR; } 369645f5050Syouri color_list 370645f5050Syouri | SAVECOLOR {} 371645f5050Syouri save_color_list 372645f5050Syouri | MONOCHROME { color = MONOCHROME; } 373645f5050Syouri color_list 374645f5050Syouri | DEFAULT_FUNCTION action { Scr->DefaultFunction.func = $2; 375645f5050Syouri if ($2 == F_MENU) 376645f5050Syouri { 377645f5050Syouri pull->prev = NULL; 378645f5050Syouri Scr->DefaultFunction.menu = pull; 379645f5050Syouri } 380645f5050Syouri else 381645f5050Syouri { 382645f5050Syouri root = GetRoot(TWM_ROOT,NULLSTR,NULLSTR); 383645f5050Syouri Scr->DefaultFunction.item = 384645f5050Syouri AddToMenu(root,"x",Action, 385645f5050Syouri NULL,$2, NULLSTR, NULLSTR); 386645f5050Syouri } 387645f5050Syouri Action = ""; 388645f5050Syouri pull = NULL; 389645f5050Syouri } 390645f5050Syouri | WINDOW_FUNCTION action { Scr->WindowFunction.func = $2; 391645f5050Syouri root = GetRoot(TWM_ROOT,NULLSTR,NULLSTR); 392645f5050Syouri Scr->WindowFunction.item = 393645f5050Syouri AddToMenu(root,"x",Action, 394645f5050Syouri NULL,$2, NULLSTR, NULLSTR); 395645f5050Syouri Action = ""; 396645f5050Syouri pull = NULL; 397645f5050Syouri } 398645f5050Syouri | CHANGE_WORKSPACE_FUNCTION action { Scr->ChangeWorkspaceFunction.func = $2; 399645f5050Syouri root = GetRoot(TWM_ROOT,NULLSTR,NULLSTR); 400645f5050Syouri Scr->ChangeWorkspaceFunction.item = 401645f5050Syouri AddToMenu(root,"x",Action, 402645f5050Syouri NULL,$2, NULLSTR, NULLSTR); 403645f5050Syouri Action = ""; 404645f5050Syouri pull = NULL; 405645f5050Syouri } 406645f5050Syouri | DEICONIFY_FUNCTION action { Scr->DeIconifyFunction.func = $2; 407645f5050Syouri root = GetRoot(TWM_ROOT,NULLSTR,NULLSTR); 408645f5050Syouri Scr->DeIconifyFunction.item = 409645f5050Syouri AddToMenu(root,"x",Action, 410645f5050Syouri NULL,$2, NULLSTR, NULLSTR); 411645f5050Syouri Action = ""; 412645f5050Syouri pull = NULL; 413645f5050Syouri } 414645f5050Syouri | ICONIFY_FUNCTION action { Scr->IconifyFunction.func = $2; 415645f5050Syouri root = GetRoot(TWM_ROOT,NULLSTR,NULLSTR); 416645f5050Syouri Scr->IconifyFunction.item = 417645f5050Syouri AddToMenu(root,"x",Action, 418645f5050Syouri NULL,$2, NULLSTR, NULLSTR); 419645f5050Syouri Action = ""; 420645f5050Syouri pull = NULL; 421645f5050Syouri } 422645f5050Syouri | WARP_CURSOR { list = &Scr->WarpCursorL; } 423645f5050Syouri win_list 424645f5050Syouri | WARP_CURSOR { if (Scr->FirstTime) 425645f5050Syouri Scr->WarpCursor = TRUE; } 426645f5050Syouri | WINDOW_RING { list = &Scr->WindowRingL; } 427645f5050Syouri win_list 428645f5050Syouri | WINDOW_RING { Scr->WindowRingAll = TRUE; } 429645f5050Syouri | WINDOW_RING_EXCLUDE { if (!Scr->WindowRingL) 430645f5050Syouri Scr->WindowRingAll = TRUE; 431645f5050Syouri list = &Scr->WindowRingExcludeL; } 432645f5050Syouri win_list 433645f5050Syouri | WINDOW_GEOMETRIES { } 434645f5050Syouri wingeom_list 435645f5050Syouri | VIRTUAL_SCREENS { } 436645f5050Syouri geom_list 437645f5050Syouri ; 438645f5050Syouri 439645f5050Syourinoarg : KEYWORD { if (!do_single_keyword ($1)) { 440645f5050Syouri twmrc_error_prefix(); 441645f5050Syouri fprintf (stderr, 442645f5050Syouri "unknown singleton keyword %d\n", 443645f5050Syouri $1); 444645f5050Syouri ParseError = 1; 445645f5050Syouri } 446645f5050Syouri } 447645f5050Syouri ; 448645f5050Syouri 449645f5050Syourisarg : SKEYWORD string { if (!do_string_keyword ($1, $2)) { 450645f5050Syouri twmrc_error_prefix(); 451645f5050Syouri fprintf (stderr, 452645f5050Syouri "unknown string keyword %d (value \"%s\")\n", 453645f5050Syouri $1, $2); 454645f5050Syouri ParseError = 1; 455645f5050Syouri } 456645f5050Syouri } 457645f5050Syouri | SKEYWORD { if (!do_string_keyword ($1, defstring)) { 458645f5050Syouri twmrc_error_prefix(); 459645f5050Syouri fprintf (stderr, 460645f5050Syouri "unknown string keyword %d (no value)\n", 461645f5050Syouri $1); 462645f5050Syouri ParseError = 1; 463645f5050Syouri } 464645f5050Syouri } 465645f5050Syouri ; 466645f5050Syouri 467645f5050Syourisarg : SSKEYWORD string string 468645f5050Syouri { if (!do_string_string_keyword ($1, $2, $3)) { 469645f5050Syouri twmrc_error_prefix(); 470645f5050Syouri fprintf (stderr, 471645f5050Syouri "unknown strings keyword %d (value \"%s\" and \"%s\")\n", 472645f5050Syouri $1, $2, $3); 473645f5050Syouri ParseError = 1; 474645f5050Syouri } 475645f5050Syouri } 476645f5050Syouri | SSKEYWORD string { if (!do_string_string_keyword ($1, $2, defstring)) { 477645f5050Syouri twmrc_error_prefix(); 478645f5050Syouri fprintf (stderr, 479645f5050Syouri "unknown string keyword %d (value \"%s\")\n", 480645f5050Syouri $1, $2); 481645f5050Syouri ParseError = 1; 482645f5050Syouri } 483645f5050Syouri } 484645f5050Syouri | SSKEYWORD { if (!do_string_string_keyword ($1, defstring, defstring)) { 485645f5050Syouri twmrc_error_prefix(); 486645f5050Syouri fprintf (stderr, 487645f5050Syouri "unknown string keyword %d (no value)\n", 488645f5050Syouri $1); 489645f5050Syouri ParseError = 1; 490645f5050Syouri } 491645f5050Syouri } 492645f5050Syouri ; 493645f5050Syouri 494645f5050Syourinarg : NKEYWORD number { if (!do_number_keyword ($1, $2)) { 495645f5050Syouri twmrc_error_prefix(); 496645f5050Syouri fprintf (stderr, 497645f5050Syouri "unknown numeric keyword %d (value %d)\n", 498645f5050Syouri $1, $2); 499645f5050Syouri ParseError = 1; 500645f5050Syouri } 501645f5050Syouri } 502645f5050Syouri ; 503645f5050Syouri 504645f5050Syouri 505645f5050Syouri 506645f5050Syourikeyaction : EQUALS keys COLON action { $$ = $4; } 507645f5050Syouri ; 508645f5050Syouri 509645f5050Syourifull : EQUALS keys COLON contexts COLON action { $$ = $6; } 510645f5050Syouri ; 511645f5050Syouri 512645f5050Syourifullkey : EQUALS keys COLON contextkeys COLON action { $$ = $6; } 513645f5050Syouri ; 514645f5050Syouri 515645f5050Syourikeys : /* Empty */ 516645f5050Syouri | keys key 517645f5050Syouri ; 518645f5050Syouri 519645f5050Syourikey : META { mods |= Mod1Mask; } 520645f5050Syouri | SHIFT { mods |= ShiftMask; } 521645f5050Syouri | LOCK { mods |= LockMask; } 522645f5050Syouri | CONTROL { mods |= ControlMask; } 523645f5050Syouri | ALTER number { if ($2 < 1 || $2 > 5) { 524645f5050Syouri twmrc_error_prefix(); 525645f5050Syouri fprintf (stderr, 526645f5050Syouri "bad modifier number (%d), must be 1-5\n", 527645f5050Syouri $2); 528645f5050Syouri ParseError = 1; 529645f5050Syouri } else { 530645f5050Syouri mods |= (Alt1Mask << ($2 - 1)); 531645f5050Syouri } 532645f5050Syouri } 533645f5050Syouri | META number { if ($2 < 1 || $2 > 5) { 534645f5050Syouri twmrc_error_prefix(); 535645f5050Syouri fprintf (stderr, 536645f5050Syouri "bad modifier number (%d), must be 1-5\n", 537645f5050Syouri $2); 538645f5050Syouri ParseError = 1; 539645f5050Syouri } else { 540645f5050Syouri mods |= (Mod1Mask << ($2 - 1)); 541645f5050Syouri } 542645f5050Syouri } 543645f5050Syouri | OR { } 544645f5050Syouri ; 545645f5050Syouri 546645f5050Syouricontexts : /* Empty */ 547645f5050Syouri | contexts context 548645f5050Syouri ; 549645f5050Syouri 550645f5050Syouricontext : WINDOW { cont |= C_WINDOW_BIT; } 551645f5050Syouri | TITLE { cont |= C_TITLE_BIT; } 552645f5050Syouri | ICON { cont |= C_ICON_BIT; } 553645f5050Syouri | ROOT { cont |= C_ROOT_BIT; } 554645f5050Syouri | FRAME { cont |= C_FRAME_BIT; } 555645f5050Syouri | WORKSPACE { cont |= C_WORKSPACE_BIT; } 556645f5050Syouri | ICONMGR { cont |= C_ICONMGR_BIT; } 557645f5050Syouri | META { cont |= C_ICONMGR_BIT; } 558645f5050Syouri | ALTER { cont |= C_ALTER_BIT; } 559645f5050Syouri | ALL { cont |= C_ALL_BITS; } 560645f5050Syouri | OR { } 561645f5050Syouri ; 562645f5050Syouri 563645f5050Syouricontextkeys : /* Empty */ 564645f5050Syouri | contextkeys contextkey 565645f5050Syouri ; 566645f5050Syouri 567645f5050Syouricontextkey : WINDOW { cont |= C_WINDOW_BIT; } 568645f5050Syouri | TITLE { cont |= C_TITLE_BIT; } 569645f5050Syouri | ICON { cont |= C_ICON_BIT; } 570645f5050Syouri | ROOT { cont |= C_ROOT_BIT; } 571645f5050Syouri | FRAME { cont |= C_FRAME_BIT; } 572645f5050Syouri | WORKSPACE { cont |= C_WORKSPACE_BIT; } 573645f5050Syouri | ICONMGR { cont |= C_ICONMGR_BIT; } 574645f5050Syouri | META { cont |= C_ICONMGR_BIT; } 575645f5050Syouri | ALL { cont |= C_ALL_BITS; } 576645f5050Syouri | ALTER { cont |= C_ALTER_BIT; } 577645f5050Syouri | OR { } 578645f5050Syouri | string { Name = (char*)$1; cont |= C_NAME_BIT; } 579645f5050Syouri ; 580645f5050Syouri 581645f5050Syouri 582645f5050Syouribinding_list : LB binding_entries RB {} 583645f5050Syouri ; 584645f5050Syouri 585645f5050Syouribinding_entries : /* Empty */ 586645f5050Syouri | binding_entries binding_entry 587645f5050Syouri ; 588645f5050Syouri 589645f5050Syouribinding_entry : button keyaction { ModifyCurrentTB($1, mods, $2, Action, pull); mods = 0;} 590645f5050Syouri | button EQUALS action { ModifyCurrentTB($1, 0, $3, Action, pull);} 591645f5050Syouri /* The following is deprecated! */ 592645f5050Syouri | button COLON action { ModifyCurrentTB($1, 0, $3, Action, pull);} 593645f5050Syouri ; 594645f5050Syouri 595645f5050Syouri 596645f5050Syouripixmap_list : LB pixmap_entries RB {} 597645f5050Syouri ; 598645f5050Syouri 599645f5050Syouripixmap_entries : /* Empty */ 600645f5050Syouri | pixmap_entries pixmap_entry 601645f5050Syouri ; 602645f5050Syouri 603645f5050Syouripixmap_entry : TITLE_HILITE string { SetHighlightPixmap ($2); } 604645f5050Syouri ; 605645f5050Syouri 606645f5050Syouri 607645f5050Syouricursor_list : LB cursor_entries RB {} 608645f5050Syouri ; 609645f5050Syouri 610645f5050Syouricursor_entries : /* Empty */ 611645f5050Syouri | cursor_entries cursor_entry 612645f5050Syouri ; 613645f5050Syouri 614645f5050Syouricursor_entry : FRAME string string { 615645f5050Syouri NewBitmapCursor(&Scr->FrameCursor, $2, $3); } 616645f5050Syouri | FRAME string { 617645f5050Syouri NewFontCursor(&Scr->FrameCursor, $2); } 618645f5050Syouri | TITLE string string { 619645f5050Syouri NewBitmapCursor(&Scr->TitleCursor, $2, $3); } 620645f5050Syouri | TITLE string { 621645f5050Syouri NewFontCursor(&Scr->TitleCursor, $2); } 622645f5050Syouri | ICON string string { 623645f5050Syouri NewBitmapCursor(&Scr->IconCursor, $2, $3); } 624645f5050Syouri | ICON string { 625645f5050Syouri NewFontCursor(&Scr->IconCursor, $2); } 626645f5050Syouri | ICONMGR string string { 627645f5050Syouri NewBitmapCursor(&Scr->IconMgrCursor, $2, $3); } 628645f5050Syouri | ICONMGR string { 629645f5050Syouri NewFontCursor(&Scr->IconMgrCursor, $2); } 630645f5050Syouri | BUTTON string string { 631645f5050Syouri NewBitmapCursor(&Scr->ButtonCursor, $2, $3); } 632645f5050Syouri | BUTTON string { 633645f5050Syouri NewFontCursor(&Scr->ButtonCursor, $2); } 634645f5050Syouri | MOVE string string { 635645f5050Syouri NewBitmapCursor(&Scr->MoveCursor, $2, $3); } 636645f5050Syouri | MOVE string { 637645f5050Syouri NewFontCursor(&Scr->MoveCursor, $2); } 638645f5050Syouri | RESIZE string string { 639645f5050Syouri NewBitmapCursor(&Scr->ResizeCursor, $2, $3); } 640645f5050Syouri | RESIZE string { 641645f5050Syouri NewFontCursor(&Scr->ResizeCursor, $2); } 642645f5050Syouri | WAITC string string { 643645f5050Syouri NewBitmapCursor(&Scr->WaitCursor, $2, $3); } 644645f5050Syouri | WAITC string { 645645f5050Syouri NewFontCursor(&Scr->WaitCursor, $2); } 646645f5050Syouri | MENU string string { 647645f5050Syouri NewBitmapCursor(&Scr->MenuCursor, $2, $3); } 648645f5050Syouri | MENU string { 649645f5050Syouri NewFontCursor(&Scr->MenuCursor, $2); } 650645f5050Syouri | SELECT string string { 651645f5050Syouri NewBitmapCursor(&Scr->SelectCursor, $2, $3); } 652645f5050Syouri | SELECT string { 653645f5050Syouri NewFontCursor(&Scr->SelectCursor, $2); } 654645f5050Syouri | KILL string string { 655645f5050Syouri NewBitmapCursor(&Scr->DestroyCursor, $2, $3); } 656645f5050Syouri | KILL string { 657645f5050Syouri NewFontCursor(&Scr->DestroyCursor, $2); } 658645f5050Syouri ; 659645f5050Syouri 660645f5050Syouricolor_list : LB color_entries RB {} 661645f5050Syouri ; 662645f5050Syouri 663645f5050Syouri 664645f5050Syouricolor_entries : /* Empty */ 665645f5050Syouri | color_entries color_entry 666645f5050Syouri ; 667645f5050Syouri 668645f5050Syouricolor_entry : CLKEYWORD string { if (!do_colorlist_keyword ($1, color, 669645f5050Syouri $2)) { 670645f5050Syouri twmrc_error_prefix(); 671645f5050Syouri fprintf (stderr, 672645f5050Syouri "unhandled list color keyword %d (string \"%s\")\n", 673645f5050Syouri $1, $2); 674645f5050Syouri ParseError = 1; 675645f5050Syouri } 676645f5050Syouri } 677645f5050Syouri | CLKEYWORD string { list = do_colorlist_keyword($1,color, 678645f5050Syouri $2); 679645f5050Syouri if (!list) { 680645f5050Syouri twmrc_error_prefix(); 681645f5050Syouri fprintf (stderr, 682645f5050Syouri "unhandled color list keyword %d (string \"%s\")\n", 683645f5050Syouri $1, $2); 684645f5050Syouri ParseError = 1; 685645f5050Syouri } 686645f5050Syouri } 687645f5050Syouri win_color_list 688645f5050Syouri | CKEYWORD string { if (!do_color_keyword ($1, color, 689645f5050Syouri $2)) { 690645f5050Syouri twmrc_error_prefix(); 691645f5050Syouri fprintf (stderr, 692645f5050Syouri "unhandled color keyword %d (string \"%s\")\n", 693645f5050Syouri $1, $2); 694645f5050Syouri ParseError = 1; 695645f5050Syouri } 696645f5050Syouri } 697645f5050Syouri ; 698645f5050Syouri 699645f5050Syourisave_color_list : LB s_color_entries RB {} 700645f5050Syouri ; 701645f5050Syouri 702645f5050Syouris_color_entries : /* Empty */ 703645f5050Syouri | s_color_entries s_color_entry 704645f5050Syouri ; 705645f5050Syouri 706645f5050Syouris_color_entry : string { do_string_savecolor(color, $1); } 707645f5050Syouri | CLKEYWORD { do_var_savecolor($1); } 708645f5050Syouri ; 709645f5050Syouri 710645f5050Syouriwin_color_list : LB win_color_entries RB {} 711645f5050Syouri ; 712645f5050Syouri 713645f5050Syouriwin_color_entries : /* Empty */ 714645f5050Syouri | win_color_entries win_color_entry 715645f5050Syouri ; 716645f5050Syouri 717645f5050Syouriwin_color_entry : string string { if (Scr->FirstTime && 718645f5050Syouri color == Scr->Monochrome) 719645f5050Syouri AddToList(list, $1, $2); } 720645f5050Syouri ; 721645f5050Syouri 722645f5050Syouriwingeom_list : LB wingeom_entries RB {} 723645f5050Syouri ; 724645f5050Syouri 725645f5050Syouriwingeom_entries : /* Empty */ 726645f5050Syouri | wingeom_entries wingeom_entry 727645f5050Syouri ; 728645f5050Syouri/* added a ';' after call to AddToList */ 729645f5050Syouriwingeom_entry : string string { AddToList (&Scr->WindowGeometries, $1, $2); } 730645f5050Syouri ; 731645f5050Syouri 732645f5050Syourigeom_list : LB geom_entries RB {} 733645f5050Syouri ; 734645f5050Syouri 735645f5050Syourigeom_entries : /* Empty */ 736645f5050Syouri | geom_entries geom_entry 737645f5050Syouri ; 738645f5050Syouri 739645f5050Syourigeom_entry : string { AddToList (&Scr->VirtualScreens, $1, ""); } 740645f5050Syouri ; 741645f5050Syouri 742645f5050Syourisqueeze : SQUEEZE_TITLE { 743645f5050Syouri if (HasShape) Scr->SqueezeTitle = TRUE; 744645f5050Syouri } 745645f5050Syouri | SQUEEZE_TITLE { list = &Scr->SqueezeTitleL; 746645f5050Syouri if (HasShape && Scr->SqueezeTitle == -1) 747645f5050Syouri Scr->SqueezeTitle = TRUE; 748645f5050Syouri } 749645f5050Syouri LB win_sqz_entries RB 750645f5050Syouri | DONT_SQUEEZE_TITLE { Scr->SqueezeTitle = FALSE; } 751645f5050Syouri | DONT_SQUEEZE_TITLE { list = &Scr->DontSqueezeTitleL; } 752645f5050Syouri win_list 753645f5050Syouri ; 754645f5050Syouri 755645f5050Syouriwin_sqz_entries : /* Empty */ 756645f5050Syouri | win_sqz_entries string JKEYWORD signed_number number { 757645f5050Syouri if (Scr->FirstTime) { 758645f5050Syouri do_squeeze_entry (list, $2, $3, $4, $5); 759645f5050Syouri } 760645f5050Syouri } 761645f5050Syouri ; 762645f5050Syouri 763645f5050Syouri 764645f5050Syouriiconm_list : LB iconm_entries RB {} 765645f5050Syouri ; 766645f5050Syouri 767645f5050Syouriiconm_entries : /* Empty */ 768645f5050Syouri | iconm_entries iconm_entry 769645f5050Syouri ; 770645f5050Syouri 771645f5050Syouriiconm_entry : string string number { if (Scr->FirstTime) 772645f5050Syouri AddToList(list, $1, (char *) 773645f5050Syouri AllocateIconManager($1, NULLSTR, 774645f5050Syouri $2,$3)); 775645f5050Syouri } 776645f5050Syouri | string string string number 777645f5050Syouri { if (Scr->FirstTime) 778645f5050Syouri AddToList(list, $1, (char *) 779645f5050Syouri AllocateIconManager($1,$2, 780645f5050Syouri $3, $4)); 781645f5050Syouri } 782645f5050Syouri ; 783645f5050Syouri 784645f5050Syouriworkspc_list : LB workspc_entries RB {} 785645f5050Syouri ; 786645f5050Syouri 787645f5050Syouriworkspc_entries : /* Empty */ 788645f5050Syouri | workspc_entries workspc_entry 789645f5050Syouri ; 790645f5050Syouri 791645f5050Syouriworkspc_entry : string { 792645f5050Syouri AddWorkSpace ($1, NULLSTR, NULLSTR, NULLSTR, NULLSTR, NULLSTR); 793645f5050Syouri } 794645f5050Syouri | string { 795645f5050Syouri curWorkSpc = (char*)$1; 796645f5050Syouri } 797645f5050Syouri workapp_list 798645f5050Syouri ; 799645f5050Syouri 800645f5050Syouriworkapp_list : LB workapp_entries RB {} 801645f5050Syouri ; 802645f5050Syouri 803645f5050Syouriworkapp_entries : /* Empty */ 804645f5050Syouri | workapp_entries workapp_entry 805645f5050Syouri ; 806645f5050Syouri 807645f5050Syouriworkapp_entry : string { 808645f5050Syouri AddWorkSpace (curWorkSpc, $1, NULLSTR, NULLSTR, NULLSTR, NULLSTR); 809645f5050Syouri } 810645f5050Syouri | string string { 811645f5050Syouri AddWorkSpace (curWorkSpc, $1, $2, NULLSTR, NULLSTR, NULLSTR); 812645f5050Syouri } 813645f5050Syouri | string string string { 814645f5050Syouri AddWorkSpace (curWorkSpc, $1, $2, $3, NULLSTR, NULLSTR); 815645f5050Syouri } 816645f5050Syouri | string string string string { 817645f5050Syouri AddWorkSpace (curWorkSpc, $1, $2, $3, $4, NULLSTR); 818645f5050Syouri } 819645f5050Syouri | string string string string string { 820645f5050Syouri AddWorkSpace (curWorkSpc, $1, $2, $3, $4, $5); 821645f5050Syouri } 822645f5050Syouri ; 823645f5050Syouri 824645f5050Syouricurwork : LB string RB { 825645f5050Syouri WMapCreateCurrentBackGround ($2, NULL, NULL, NULL); 826645f5050Syouri } 827645f5050Syouri | LB string string RB { 828645f5050Syouri WMapCreateCurrentBackGround ($2, $3, NULL, NULL); 829645f5050Syouri } 830645f5050Syouri | LB string string string RB { 831645f5050Syouri WMapCreateCurrentBackGround ($2, $3, $4, NULL); 832645f5050Syouri } 833645f5050Syouri | LB string string string string RB { 834645f5050Syouri WMapCreateCurrentBackGround ($2, $3, $4, $5); 835645f5050Syouri } 836645f5050Syouri ; 837645f5050Syouri 838645f5050Syouridefwork : LB string RB { 839645f5050Syouri WMapCreateDefaultBackGround ($2, NULL, NULL, NULL); 840645f5050Syouri } 841645f5050Syouri | LB string string RB { 842645f5050Syouri WMapCreateDefaultBackGround ($2, $3, NULL, NULL); 843645f5050Syouri } 844645f5050Syouri | LB string string string RB { 845645f5050Syouri WMapCreateDefaultBackGround ($2, $3, $4, NULL); 846645f5050Syouri } 847645f5050Syouri | LB string string string string RB { 848645f5050Syouri WMapCreateDefaultBackGround ($2, $3, $4, $5); 849645f5050Syouri } 850645f5050Syouri ; 851645f5050Syouri 852645f5050Syouriwin_list : LB win_entries RB {} 853645f5050Syouri ; 854645f5050Syouri 855645f5050Syouriwin_entries : /* Empty */ 856645f5050Syouri | win_entries win_entry 857645f5050Syouri ; 858645f5050Syouri 859645f5050Syouriwin_entry : string { if (Scr->FirstTime) 860645f5050Syouri AddToList(list, $1, 0); 861645f5050Syouri } 862645f5050Syouri ; 863645f5050Syouri 864645f5050Syourioccupy_list : LB occupy_entries RB {} 865645f5050Syouri ; 866645f5050Syouri 867645f5050Syourioccupy_entries : /* Empty */ 868645f5050Syouri | occupy_entries occupy_entry 869645f5050Syouri ; 870645f5050Syouri 871645f5050Syourioccupy_entry : string {client = (char*)$1;} 872645f5050Syouri occupy_workspc_list 873645f5050Syouri | WINDOW string {client = (char*)$2;} 874645f5050Syouri occupy_workspc_list 875645f5050Syouri | WORKSPACE string {workspace = (char*)$2;} 876645f5050Syouri occupy_window_list 877645f5050Syouri ; 878645f5050Syouri 879645f5050Syourioccupy_workspc_list : LB occupy_workspc_entries RB {} 880645f5050Syouri ; 881645f5050Syouri 882645f5050Syourioccupy_workspc_entries : /* Empty */ 883645f5050Syouri | occupy_workspc_entries occupy_workspc_entry 884645f5050Syouri ; 885645f5050Syouri 886645f5050Syourioccupy_workspc_entry : string { 887645f5050Syouri AddToClientsList ($1, client); 888645f5050Syouri } 889645f5050Syouri ; 890645f5050Syouri 891645f5050Syourioccupy_window_list : LB occupy_window_entries RB {} 892645f5050Syouri ; 893645f5050Syouri 894645f5050Syourioccupy_window_entries : /* Empty */ 895645f5050Syouri | occupy_window_entries occupy_window_entry 896645f5050Syouri ; 897645f5050Syouri 898645f5050Syourioccupy_window_entry : string { 899645f5050Syouri AddToClientsList (workspace, $1); 900645f5050Syouri } 901645f5050Syouri ; 902645f5050Syouri 903645f5050Syouriicon_list : LB icon_entries RB {} 904645f5050Syouri ; 905645f5050Syouri 906645f5050Syouriicon_entries : /* Empty */ 907645f5050Syouri | icon_entries icon_entry 908645f5050Syouri ; 909645f5050Syouri 910645f5050Syouriicon_entry : string string { if (Scr->FirstTime) AddToList(list, $1, $2); } 911645f5050Syouri ; 912645f5050Syouri 913645f5050Syourifunction : LB function_entries RB {} 914645f5050Syouri ; 915645f5050Syouri 916645f5050Syourifunction_entries: /* Empty */ 917645f5050Syouri | function_entries function_entry 918645f5050Syouri ; 919645f5050Syouri 920645f5050Syourifunction_entry : action { AddToMenu(root, "", Action, NULL, $1, 921645f5050Syouri NULLSTR, NULLSTR); 922645f5050Syouri Action = ""; 923645f5050Syouri } 924645f5050Syouri ; 925645f5050Syouri 926645f5050Syourimenu : LB menu_entries RB {lastmenuitem = (MenuItem*) 0;} 927645f5050Syouri ; 928645f5050Syouri 929645f5050Syourimenu_entries : /* Empty */ 930645f5050Syouri | menu_entries menu_entry 931645f5050Syouri ; 932645f5050Syouri 933645f5050Syourimenu_entry : string action { 934645f5050Syouri if ($2 == F_SEPARATOR) { 935645f5050Syouri if (lastmenuitem) lastmenuitem->separated = 1; 936645f5050Syouri } 937645f5050Syouri else { 938645f5050Syouri lastmenuitem = AddToMenu(root, $1, Action, pull, $2, NULLSTR, NULLSTR); 939645f5050Syouri Action = ""; 940645f5050Syouri pull = NULL; 941645f5050Syouri } 942645f5050Syouri } 943645f5050Syouri | string LP string COLON string RP action { 944645f5050Syouri if ($7 == F_SEPARATOR) { 945645f5050Syouri if (lastmenuitem) lastmenuitem->separated = 1; 946645f5050Syouri } 947645f5050Syouri else { 948645f5050Syouri lastmenuitem = AddToMenu(root, $1, Action, pull, $7, $3, $5); 949645f5050Syouri Action = ""; 950645f5050Syouri pull = NULL; 951645f5050Syouri } 952645f5050Syouri } 953645f5050Syouri ; 954645f5050Syouri 955645f5050Syouriaction : FKEYWORD { $$ = $1; } 956645f5050Syouri | FSKEYWORD string { 957645f5050Syouri $$ = $1; 958645f5050Syouri Action = (char*)$2; 959645f5050Syouri switch ($1) { 960645f5050Syouri case F_MENU: 961645f5050Syouri pull = GetRoot ($2, NULLSTR,NULLSTR); 962645f5050Syouri pull->prev = root; 963645f5050Syouri break; 964645f5050Syouri case F_WARPRING: 965645f5050Syouri if (!CheckWarpRingArg (Action)) { 966645f5050Syouri twmrc_error_prefix(); 967645f5050Syouri fprintf (stderr, 968645f5050Syouri "ignoring invalid f.warptoring argument \"%s\"\n", 969645f5050Syouri Action); 970645f5050Syouri $$ = F_NOP; 971645f5050Syouri } 972645f5050Syouri case F_WARPTOSCREEN: 973645f5050Syouri if (!CheckWarpScreenArg (Action)) { 974645f5050Syouri twmrc_error_prefix(); 975645f5050Syouri fprintf (stderr, 976645f5050Syouri "ignoring invalid f.warptoscreen argument \"%s\"\n", 977645f5050Syouri Action); 978645f5050Syouri $$ = F_NOP; 979645f5050Syouri } 980645f5050Syouri break; 981645f5050Syouri case F_COLORMAP: 982645f5050Syouri if (CheckColormapArg (Action)) { 983645f5050Syouri $$ = F_COLORMAP; 984645f5050Syouri } else { 985645f5050Syouri twmrc_error_prefix(); 986645f5050Syouri fprintf (stderr, 987645f5050Syouri "ignoring invalid f.colormap argument \"%s\"\n", 988645f5050Syouri Action); 989645f5050Syouri $$ = F_NOP; 990645f5050Syouri } 991645f5050Syouri break; 992645f5050Syouri } /* end switch */ 993645f5050Syouri } 994645f5050Syouri ; 995645f5050Syouri 996645f5050Syouri 997645f5050Syourisigned_number : number { $$ = $1; } 998645f5050Syouri | PLUS number { $$ = $2; } 999645f5050Syouri | MINUS number { $$ = -($2); } 1000645f5050Syouri ; 1001645f5050Syouri 1002645f5050Syouributton : BUTTON number { $$ = $2; 1003645f5050Syouri if ($2 == 0) 1004645f5050Syouri yyerror("bad button 0"); 1005645f5050Syouri 1006645f5050Syouri if ($2 > MAX_BUTTONS) 1007645f5050Syouri { 1008645f5050Syouri $$ = 0; 1009645f5050Syouri yyerror("button number too large"); 1010645f5050Syouri } 1011645f5050Syouri } 1012645f5050Syouri ; 1013645f5050Syouri 1014645f5050Syouristring : STRING { ptr = (char *)malloc(strlen((char*)$1)+1); 1015645f5050Syouri strcpy(ptr, $1); 1016645f5050Syouri RemoveDQuote(ptr); 1017645f5050Syouri $$ = ptr; 1018645f5050Syouri } 1019645f5050Syouri ; 1020645f5050Syouri 1021645f5050Syourinumber : NUMBER { $$ = $1; } 1022645f5050Syouri ; 1023645f5050Syouri 1024645f5050Syouri%% 1025645f5050Syourivoid yyerror(char *s) 1026645f5050Syouri{ 1027645f5050Syouri twmrc_error_prefix(); 1028645f5050Syouri fprintf (stderr, "error in input file: %s\n", s ? s : ""); 1029645f5050Syouri ParseError = 1; 1030645f5050Syouri} 1031645f5050Syouri 1032645f5050Syourivoid RemoveDQuote(char *str) 1033645f5050Syouri{ 1034645f5050Syouri register char *i, *o; 1035645f5050Syouri register int n; 1036645f5050Syouri register int count; 1037645f5050Syouri 1038645f5050Syouri for (i=str+1, o=str; *i && *i != '\"'; o++) 1039645f5050Syouri { 1040645f5050Syouri if (*i == '\\') 1041645f5050Syouri { 1042645f5050Syouri switch (*++i) 1043645f5050Syouri { 1044645f5050Syouri case 'n': 1045645f5050Syouri *o = '\n'; 1046645f5050Syouri i++; 1047645f5050Syouri break; 1048645f5050Syouri case 'b': 1049645f5050Syouri *o = '\b'; 1050645f5050Syouri i++; 1051645f5050Syouri break; 1052645f5050Syouri case 'r': 1053645f5050Syouri *o = '\r'; 1054645f5050Syouri i++; 1055645f5050Syouri break; 1056645f5050Syouri case 't': 1057645f5050Syouri *o = '\t'; 1058645f5050Syouri i++; 1059645f5050Syouri break; 1060645f5050Syouri case 'f': 1061645f5050Syouri *o = '\f'; 1062645f5050Syouri i++; 1063645f5050Syouri break; 1064645f5050Syouri case '0': 1065645f5050Syouri if (*++i == 'x') 1066645f5050Syouri goto hex; 1067645f5050Syouri else 1068645f5050Syouri --i; 1069645f5050Syouri case '1': case '2': case '3': 1070645f5050Syouri case '4': case '5': case '6': case '7': 1071645f5050Syouri n = 0; 1072645f5050Syouri count = 0; 1073645f5050Syouri while (*i >= '0' && *i <= '7' && count < 3) 1074645f5050Syouri { 1075645f5050Syouri n = (n<<3) + (*i++ - '0'); 1076645f5050Syouri count++; 1077645f5050Syouri } 1078645f5050Syouri *o = n; 1079645f5050Syouri break; 1080645f5050Syouri hex: 1081645f5050Syouri case 'x': 1082645f5050Syouri n = 0; 1083645f5050Syouri count = 0; 1084645f5050Syouri while (i++, count++ < 2) 1085645f5050Syouri { 1086645f5050Syouri if (*i >= '0' && *i <= '9') 1087645f5050Syouri n = (n<<4) + (*i - '0'); 1088645f5050Syouri else if (*i >= 'a' && *i <= 'f') 1089645f5050Syouri n = (n<<4) + (*i - 'a') + 10; 1090645f5050Syouri else if (*i >= 'A' && *i <= 'F') 1091645f5050Syouri n = (n<<4) + (*i - 'A') + 10; 1092645f5050Syouri else 1093645f5050Syouri break; 1094645f5050Syouri } 1095645f5050Syouri *o = n; 1096645f5050Syouri break; 1097645f5050Syouri case '\n': 1098645f5050Syouri i++; /* punt */ 1099645f5050Syouri o--; /* to account for o++ at end of loop */ 1100645f5050Syouri break; 1101645f5050Syouri case '\"': 1102645f5050Syouri case '\'': 1103645f5050Syouri case '\\': 1104645f5050Syouri default: 1105645f5050Syouri *o = *i++; 1106645f5050Syouri break; 1107645f5050Syouri } 1108645f5050Syouri } 1109645f5050Syouri else 1110645f5050Syouri *o = *i++; 1111645f5050Syouri } 1112645f5050Syouri *o = '\0'; 1113645f5050Syouri} 1114645f5050Syouri 1115645f5050Syouristatic MenuRoot *GetRoot(char *name, char *fore, char *back) 1116645f5050Syouri{ 1117645f5050Syouri MenuRoot *tmp; 1118645f5050Syouri 1119645f5050Syouri tmp = FindMenuRoot(name); 1120645f5050Syouri if (tmp == NULL) 1121645f5050Syouri tmp = NewMenuRoot(name); 1122645f5050Syouri 1123645f5050Syouri if (fore) 1124645f5050Syouri { 1125645f5050Syouri int save; 1126645f5050Syouri 1127645f5050Syouri save = Scr->FirstTime; 1128645f5050Syouri Scr->FirstTime = TRUE; 1129645f5050Syouri GetColor(COLOR, &tmp->highlight.fore, fore); 1130645f5050Syouri GetColor(COLOR, &tmp->highlight.back, back); 1131645f5050Syouri Scr->FirstTime = save; 1132645f5050Syouri } 1133645f5050Syouri 1134645f5050Syouri return tmp; 1135645f5050Syouri} 1136645f5050Syouri 1137645f5050Syouristatic void GotButton (int butt, int func) 1138645f5050Syouri{ 1139645f5050Syouri int i; 1140645f5050Syouri MenuItem *item; 1141645f5050Syouri 1142645f5050Syouri for (i = 0; i < NUM_CONTEXTS; i++) { 1143645f5050Syouri if ((cont & (1 << i)) == 0) continue; 1144645f5050Syouri 1145645f5050Syouri if (func == F_MENU) { 1146645f5050Syouri pull->prev = NULL; 1147645f5050Syouri AddFuncButton (butt, i, mods, func, pull, (MenuItem*) 0); 1148645f5050Syouri } 1149645f5050Syouri else { 1150645f5050Syouri root = GetRoot (TWM_ROOT, NULLSTR, NULLSTR); 1151645f5050Syouri item = AddToMenu (root, "x", Action, NULL, func, NULLSTR, NULLSTR); 1152645f5050Syouri AddFuncButton (butt, i, mods, func, (MenuRoot*) 0, item); 1153645f5050Syouri } 1154645f5050Syouri } 1155645f5050Syouri 1156645f5050Syouri Action = ""; 1157645f5050Syouri pull = NULL; 1158645f5050Syouri cont = 0; 1159645f5050Syouri mods_used |= mods; 1160645f5050Syouri mods = 0; 1161645f5050Syouri} 1162645f5050Syouri 1163645f5050Syouristatic void GotKey(char *key, int func) 1164645f5050Syouri{ 1165645f5050Syouri int i; 1166645f5050Syouri 1167645f5050Syouri for (i = 0; i < NUM_CONTEXTS; i++) 1168645f5050Syouri { 1169645f5050Syouri if ((cont & (1 << i)) == 0) 1170645f5050Syouri continue; 1171645f5050Syouri 1172645f5050Syouri if (func == F_MENU) { 1173645f5050Syouri pull->prev = NULL; 1174645f5050Syouri if (!AddFuncKey (key, i, mods, func, pull, Name, Action)) break; 1175645f5050Syouri } 1176645f5050Syouri else 1177645f5050Syouri if (!AddFuncKey(key, i, mods, func, (MenuRoot*) 0, Name, Action)) 1178645f5050Syouri break; 1179645f5050Syouri } 1180645f5050Syouri 1181645f5050Syouri Action = ""; 1182645f5050Syouri pull = NULL; 1183645f5050Syouri cont = 0; 1184645f5050Syouri mods_used |= mods; 1185645f5050Syouri mods = 0; 1186645f5050Syouri} 1187645f5050Syouri 1188645f5050Syouri 1189645f5050Syouristatic void GotTitleButton (char *bitmapname, int func, Bool rightside) 1190645f5050Syouri{ 1191645f5050Syouri if (!CreateTitleButton (bitmapname, func, Action, pull, rightside, True)) { 1192645f5050Syouri twmrc_error_prefix(); 1193645f5050Syouri fprintf (stderr, 1194645f5050Syouri "unable to create %s titlebutton \"%s\"\n", 1195645f5050Syouri rightside ? "right" : "left", bitmapname); 1196645f5050Syouri } 1197645f5050Syouri Action = ""; 1198645f5050Syouri pull = NULL; 1199645f5050Syouri} 1200645f5050Syouri 1201645f5050Syouristatic Bool CheckWarpScreenArg (register char *s) 1202645f5050Syouri{ 1203645f5050Syouri XmuCopyISOLatin1Lowered (s, s); 1204645f5050Syouri 1205645f5050Syouri if (strcmp (s, WARPSCREEN_NEXT) == 0 || 1206645f5050Syouri strcmp (s, WARPSCREEN_PREV) == 0 || 1207645f5050Syouri strcmp (s, WARPSCREEN_BACK) == 0) 1208645f5050Syouri return True; 1209645f5050Syouri 1210645f5050Syouri for (; *s && Isascii(*s) && Isdigit(*s); s++) ; /* SUPPRESS 530 */ 1211645f5050Syouri return (*s ? False : True); 1212645f5050Syouri} 1213645f5050Syouri 1214645f5050Syouri 1215645f5050Syouristatic Bool CheckWarpRingArg (register char *s) 1216645f5050Syouri{ 1217645f5050Syouri XmuCopyISOLatin1Lowered (s, s); 1218645f5050Syouri 1219645f5050Syouri if (strcmp (s, WARPSCREEN_NEXT) == 0 || 1220645f5050Syouri strcmp (s, WARPSCREEN_PREV) == 0) 1221645f5050Syouri return True; 1222645f5050Syouri 1223645f5050Syouri return False; 1224645f5050Syouri} 1225645f5050Syouri 1226645f5050Syouri 1227645f5050Syouristatic Bool CheckColormapArg (register char *s) 1228645f5050Syouri{ 1229645f5050Syouri XmuCopyISOLatin1Lowered (s, s); 1230645f5050Syouri 1231645f5050Syouri if (strcmp (s, COLORMAP_NEXT) == 0 || 1232645f5050Syouri strcmp (s, COLORMAP_PREV) == 0 || 1233645f5050Syouri strcmp (s, COLORMAP_DEFAULT) == 0) 1234645f5050Syouri return True; 1235645f5050Syouri 1236645f5050Syouri return False; 1237645f5050Syouri} 1238645f5050Syouri 1239645f5050Syouri 1240645f5050Syourivoid twmrc_error_prefix (void) 1241645f5050Syouri{ 1242645f5050Syouri fprintf (stderr, "%s: line %d: ", ProgramName, twmrc_lineno); 1243645f5050Syouri} 1244