gram.y revision 3e747e6d
13e747e6dSmrg/*****************************************************************************/ 23e747e6dSmrg/* 33e747e6dSmrg 43e747e6dSmrgCopyright 1989, 1998 The Open Group 53e747e6dSmrg 63e747e6dSmrgPermission to use, copy, modify, distribute, and sell this software and its 73e747e6dSmrgdocumentation for any purpose is hereby granted without fee, provided that 83e747e6dSmrgthe above copyright notice appear in all copies and that both that 93e747e6dSmrgcopyright notice and this permission notice appear in supporting 103e747e6dSmrgdocumentation. 113e747e6dSmrg 123e747e6dSmrgThe above copyright notice and this permission notice shall be included in 133e747e6dSmrgall copies or substantial portions of the Software. 143e747e6dSmrg 153e747e6dSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 163e747e6dSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 173e747e6dSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 183e747e6dSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 193e747e6dSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 203e747e6dSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 213e747e6dSmrg 223e747e6dSmrgExcept as contained in this notice, the name of The Open Group shall not be 233e747e6dSmrgused in advertising or otherwise to promote the sale, use or other dealings 243e747e6dSmrgin this Software without prior written authorization from The Open Group. 253e747e6dSmrg 263e747e6dSmrg*/ 273e747e6dSmrg/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/ 283e747e6dSmrg/** Salt Lake City, Utah **/ 293e747e6dSmrg/** Cambridge, Massachusetts **/ 303e747e6dSmrg/** **/ 313e747e6dSmrg/** All Rights Reserved **/ 323e747e6dSmrg/** **/ 333e747e6dSmrg/** Permission to use, copy, modify, and distribute this software and **/ 343e747e6dSmrg/** its documentation for any purpose and without fee is hereby **/ 353e747e6dSmrg/** granted, provided that the above copyright notice appear in all **/ 363e747e6dSmrg/** copies and that both that copyright notice and this permis- **/ 373e747e6dSmrg/** sion notice appear in supporting documentation, and that the **/ 383e747e6dSmrg/** name of Evans & Sutherland not be used in advertising **/ 393e747e6dSmrg/** in publicity pertaining to distribution of the software without **/ 403e747e6dSmrg/** specific, written prior permission. **/ 413e747e6dSmrg/** **/ 423e747e6dSmrg/** EVANS & SUTHERLAND DISCLAIMs ALL WARRANTIES WITH REGARD **/ 433e747e6dSmrg/** TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- **/ 443e747e6dSmrg/** ABILITY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND **/ 453e747e6dSmrg/** BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAM- **/ 463e747e6dSmrg/** AGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/ 473e747e6dSmrg/** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/ 483e747e6dSmrg/** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/ 493e747e6dSmrg/** OR PERFORMANCE OF THIS SOFTWARE. **/ 503e747e6dSmrg/*****************************************************************************/ 513e747e6dSmrg 523e747e6dSmrg 533e747e6dSmrg/*********************************************************************** 543e747e6dSmrg * 553e747e6dSmrg * $Xorg: gram.y,v 1.4 2001/02/09 02:05:36 xorgcvs Exp $ 563e747e6dSmrg * 573e747e6dSmrg * .twmrc command grammer 583e747e6dSmrg * 593e747e6dSmrg * 07-Jan-86 Thomas E. LaStrange File created 603e747e6dSmrg * 11-Nov-90 Dave Sternlicht Adding SaveColors 613e747e6dSmrg * 10-Oct-90 David M. Sternlicht Storing saved colors on root 623e747e6dSmrg * 633e747e6dSmrg * $XFree86: xc/programs/twm/gram.y,v 3.8 2002/10/16 21:33:03 tsi Exp $ 643e747e6dSmrg * 653e747e6dSmrg ***********************************************************************/ 663e747e6dSmrg 673e747e6dSmrg%{ 683e747e6dSmrg#include <stdio.h> 693e747e6dSmrg#include <ctype.h> 703e747e6dSmrg#include "twm.h" 713e747e6dSmrg#include "menus.h" 723e747e6dSmrg#include "list.h" 733e747e6dSmrg#include "util.h" 743e747e6dSmrg#include "screen.h" 753e747e6dSmrg#include "parse.h" 763e747e6dSmrg#include "add_window.h" 773e747e6dSmrg#include "icons.h" 783e747e6dSmrg#include <X11/Xos.h> 793e747e6dSmrg#include <X11/Xmu/CharSet.h> 803e747e6dSmrg 813e747e6dSmrgstatic char *Action = ""; 823e747e6dSmrgstatic char *Name = ""; 833e747e6dSmrgstatic MenuRoot *root, *pull = NULL; 843e747e6dSmrg 853e747e6dSmrgstatic MenuRoot *GetRoot ( char *name, char *fore, char *back ); 863e747e6dSmrgstatic void GotButton ( int butt, int func ); 873e747e6dSmrgstatic void GotKey ( char *key, int func ); 883e747e6dSmrgstatic void GotTitleButton ( char *bitmapname, int func, Bool rightside ); 893e747e6dSmrgstatic Bool CheckWarpScreenArg ( char *s ); 903e747e6dSmrgstatic Bool CheckWarpRingArg ( char *s ); 913e747e6dSmrgstatic Bool CheckColormapArg ( char *s ); 923e747e6dSmrg 933e747e6dSmrgstatic char *ptr; 943e747e6dSmrgstatic name_list **list; 953e747e6dSmrgstatic int cont = 0; 963e747e6dSmrgstatic int color; 973e747e6dSmrgint mods = 0; 983e747e6dSmrgunsigned int mods_used = (ShiftMask | ControlMask | Mod1Mask); 993e747e6dSmrg 1003e747e6dSmrgextern int yylineno; 1013e747e6dSmrg%} 1023e747e6dSmrg 1033e747e6dSmrg%union 1043e747e6dSmrg{ 1053e747e6dSmrg int num; 1063e747e6dSmrg char *ptr; 1073e747e6dSmrg}; 1083e747e6dSmrg 1093e747e6dSmrg%token <num> LB RB LP RP MENUS MENU BUTTON DEFAULT_FUNCTION PLUS MINUS 1103e747e6dSmrg%token <num> ALL OR CURSORS PIXMAPS ICONS COLOR SAVECOLOR MONOCHROME FUNCTION 1113e747e6dSmrg%token <num> ICONMGR_SHOW ICONMGR WINDOW_FUNCTION ZOOM ICONMGRS 1123e747e6dSmrg%token <num> ICONMGR_GEOMETRY ICONMGR_NOSHOW MAKE_TITLE GRAYSCALE 1133e747e6dSmrg%token <num> ICONIFY_BY_UNMAPPING DONT_ICONIFY_BY_UNMAPPING 1143e747e6dSmrg%token <num> NO_TITLE AUTO_RAISE NO_HILITE ICON_REGION 1153e747e6dSmrg%token <num> META SHIFT LOCK CONTROL WINDOW TITLE ICON ROOT FRAME 1163e747e6dSmrg%token <num> COLON EQUALS SQUEEZE_TITLE DONT_SQUEEZE_TITLE 1173e747e6dSmrg%token <num> START_ICONIFIED NO_TITLE_HILITE TITLE_HILITE 1183e747e6dSmrg%token <num> MOVE RESIZE WAIT SELECT KILL LEFT_TITLEBUTTON RIGHT_TITLEBUTTON 1193e747e6dSmrg%token <num> NUMBER KEYWORD NKEYWORD CKEYWORD CLKEYWORD FKEYWORD FSKEYWORD 1203e747e6dSmrg%token <num> SKEYWORD DKEYWORD JKEYWORD WINDOW_RING WARP_CURSOR ERRORTOKEN 1213e747e6dSmrg%token <num> NO_STACKMODE 1223e747e6dSmrg%token <ptr> STRING 1233e747e6dSmrg 1243e747e6dSmrg%type <ptr> string 1253e747e6dSmrg%type <num> pixmap_list cursor_list color_list save_color_list stmt 1263e747e6dSmrg%type <num> win_color_list iconm_list win_list icon_list function menu 1273e747e6dSmrg%type <num> noarg sarg error narg squeeze color_entry 1283e747e6dSmrg%type <num> action button number signed_number full fullkey 1293e747e6dSmrg 1303e747e6dSmrg%start twmrc 1313e747e6dSmrg 1323e747e6dSmrg%% 1333e747e6dSmrgtwmrc : stmts 1343e747e6dSmrg ; 1353e747e6dSmrg 1363e747e6dSmrgstmts : /* Empty */ 1373e747e6dSmrg | stmts stmt 1383e747e6dSmrg ; 1393e747e6dSmrg 1403e747e6dSmrgstmt : error 1413e747e6dSmrg | noarg 1423e747e6dSmrg | sarg 1433e747e6dSmrg | narg 1443e747e6dSmrg | squeeze 1453e747e6dSmrg | ICON_REGION string DKEYWORD DKEYWORD number number 1463e747e6dSmrg { AddIconRegion($2, $3, $4, $5, $6); } 1473e747e6dSmrg | ICONMGR_GEOMETRY string number { if (Scr->FirstTime) 1483e747e6dSmrg { 1493e747e6dSmrg Scr->iconmgr.geometry=$2; 1503e747e6dSmrg Scr->iconmgr.columns=$3; 1513e747e6dSmrg } 1523e747e6dSmrg } 1533e747e6dSmrg | ICONMGR_GEOMETRY string { if (Scr->FirstTime) 1543e747e6dSmrg Scr->iconmgr.geometry = $2; 1553e747e6dSmrg } 1563e747e6dSmrg | ZOOM number { if (Scr->FirstTime) 1573e747e6dSmrg { 1583e747e6dSmrg Scr->DoZoom = TRUE; 1593e747e6dSmrg Scr->ZoomCount = $2; 1603e747e6dSmrg } 1613e747e6dSmrg } 1623e747e6dSmrg | ZOOM { if (Scr->FirstTime) 1633e747e6dSmrg Scr->DoZoom = TRUE; } 1643e747e6dSmrg | PIXMAPS pixmap_list {} 1653e747e6dSmrg | CURSORS cursor_list {} 1663e747e6dSmrg | ICONIFY_BY_UNMAPPING { list = &Scr->IconifyByUn; } 1673e747e6dSmrg win_list 1683e747e6dSmrg | ICONIFY_BY_UNMAPPING { if (Scr->FirstTime) 1693e747e6dSmrg Scr->IconifyByUnmapping = TRUE; } 1703e747e6dSmrg | LEFT_TITLEBUTTON string EQUALS action { 1713e747e6dSmrg GotTitleButton ($2, $4, False); 1723e747e6dSmrg } 1733e747e6dSmrg | RIGHT_TITLEBUTTON string EQUALS action { 1743e747e6dSmrg GotTitleButton ($2, $4, True); 1753e747e6dSmrg } 1763e747e6dSmrg | button string { root = GetRoot($2, NULLSTR, NULLSTR); 1773e747e6dSmrg Scr->Mouse[$1][C_ROOT][0].func = F_MENU; 1783e747e6dSmrg Scr->Mouse[$1][C_ROOT][0].menu = root; 1793e747e6dSmrg } 1803e747e6dSmrg | button action { Scr->Mouse[$1][C_ROOT][0].func = $2; 1813e747e6dSmrg if ($2 == F_MENU) 1823e747e6dSmrg { 1833e747e6dSmrg pull->prev = NULL; 1843e747e6dSmrg Scr->Mouse[$1][C_ROOT][0].menu = pull; 1853e747e6dSmrg } 1863e747e6dSmrg else 1873e747e6dSmrg { 1883e747e6dSmrg root = GetRoot(TWM_ROOT,NULLSTR,NULLSTR); 1893e747e6dSmrg Scr->Mouse[$1][C_ROOT][0].item = 1903e747e6dSmrg AddToMenu(root,"x",Action, 1913e747e6dSmrg NULL,$2,NULLSTR,NULLSTR); 1923e747e6dSmrg } 1933e747e6dSmrg Action = ""; 1943e747e6dSmrg pull = NULL; 1953e747e6dSmrg } 1963e747e6dSmrg | string fullkey { GotKey($1, $2); } 1973e747e6dSmrg | button full { GotButton($1, $2); } 1983e747e6dSmrg | DONT_ICONIFY_BY_UNMAPPING { list = &Scr->DontIconify; } 1993e747e6dSmrg win_list 2003e747e6dSmrg | ICONMGR_NOSHOW { list = &Scr->IconMgrNoShow; } 2013e747e6dSmrg win_list 2023e747e6dSmrg | ICONMGR_NOSHOW { Scr->IconManagerDontShow = TRUE; } 2033e747e6dSmrg | ICONMGRS { list = &Scr->IconMgrs; } 2043e747e6dSmrg iconm_list 2053e747e6dSmrg | ICONMGR_SHOW { list = &Scr->IconMgrShow; } 2063e747e6dSmrg win_list 2073e747e6dSmrg | NO_TITLE_HILITE { list = &Scr->NoTitleHighlight; } 2083e747e6dSmrg win_list 2093e747e6dSmrg | NO_TITLE_HILITE { if (Scr->FirstTime) 2103e747e6dSmrg Scr->TitleHighlight = FALSE; } 2113e747e6dSmrg | NO_HILITE { list = &Scr->NoHighlight; } 2123e747e6dSmrg win_list 2133e747e6dSmrg | NO_HILITE { if (Scr->FirstTime) 2143e747e6dSmrg Scr->Highlight = FALSE; } 2153e747e6dSmrg | NO_STACKMODE { list = &Scr->NoStackModeL; } 2163e747e6dSmrg win_list 2173e747e6dSmrg | NO_STACKMODE { if (Scr->FirstTime) 2183e747e6dSmrg Scr->StackMode = FALSE; } 2193e747e6dSmrg | NO_TITLE { list = &Scr->NoTitle; } 2203e747e6dSmrg win_list 2213e747e6dSmrg | NO_TITLE { if (Scr->FirstTime) 2223e747e6dSmrg Scr->NoTitlebar = TRUE; } 2233e747e6dSmrg | MAKE_TITLE { list = &Scr->MakeTitle; } 2243e747e6dSmrg win_list 2253e747e6dSmrg | START_ICONIFIED { list = &Scr->StartIconified; } 2263e747e6dSmrg win_list 2273e747e6dSmrg | AUTO_RAISE { list = &Scr->AutoRaise; } 2283e747e6dSmrg win_list 2293e747e6dSmrg | MENU string LP string COLON string RP { 2303e747e6dSmrg root = GetRoot($2, $4, $6); } 2313e747e6dSmrg menu { root->real_menu = TRUE;} 2323e747e6dSmrg | MENU string { root = GetRoot($2, NULLSTR, NULLSTR); } 2333e747e6dSmrg menu { root->real_menu = TRUE; } 2343e747e6dSmrg | FUNCTION string { root = GetRoot($2, NULLSTR, NULLSTR); } 2353e747e6dSmrg function 2363e747e6dSmrg | ICONS { list = &Scr->IconNames; } 2373e747e6dSmrg icon_list 2383e747e6dSmrg | COLOR { color = COLOR; } 2393e747e6dSmrg color_list 2403e747e6dSmrg | GRAYSCALE { color = GRAYSCALE; } 2413e747e6dSmrg color_list 2423e747e6dSmrg | SAVECOLOR 2433e747e6dSmrg save_color_list 2443e747e6dSmrg | MONOCHROME { color = MONOCHROME; } 2453e747e6dSmrg color_list 2463e747e6dSmrg | DEFAULT_FUNCTION action { Scr->DefaultFunction.func = $2; 2473e747e6dSmrg if ($2 == F_MENU) 2483e747e6dSmrg { 2493e747e6dSmrg pull->prev = NULL; 2503e747e6dSmrg Scr->DefaultFunction.menu = pull; 2513e747e6dSmrg } 2523e747e6dSmrg else 2533e747e6dSmrg { 2543e747e6dSmrg root = GetRoot(TWM_ROOT,NULLSTR,NULLSTR); 2553e747e6dSmrg Scr->DefaultFunction.item = 2563e747e6dSmrg AddToMenu(root,"x",Action, 2573e747e6dSmrg NULL,$2, NULLSTR, NULLSTR); 2583e747e6dSmrg } 2593e747e6dSmrg Action = ""; 2603e747e6dSmrg pull = NULL; 2613e747e6dSmrg } 2623e747e6dSmrg | WINDOW_FUNCTION action { Scr->WindowFunction.func = $2; 2633e747e6dSmrg root = GetRoot(TWM_ROOT,NULLSTR,NULLSTR); 2643e747e6dSmrg Scr->WindowFunction.item = 2653e747e6dSmrg AddToMenu(root,"x",Action, 2663e747e6dSmrg NULL,$2, NULLSTR, NULLSTR); 2673e747e6dSmrg Action = ""; 2683e747e6dSmrg pull = NULL; 2693e747e6dSmrg } 2703e747e6dSmrg | WARP_CURSOR { list = &Scr->WarpCursorL; } 2713e747e6dSmrg win_list 2723e747e6dSmrg | WARP_CURSOR { if (Scr->FirstTime) 2733e747e6dSmrg Scr->WarpCursor = TRUE; } 2743e747e6dSmrg | WINDOW_RING { list = &Scr->WindowRingL; } 2753e747e6dSmrg win_list 2763e747e6dSmrg ; 2773e747e6dSmrg 2783e747e6dSmrg 2793e747e6dSmrgnoarg : KEYWORD { if (!do_single_keyword ($1)) { 2803e747e6dSmrg twmrc_error_prefix(); 2813e747e6dSmrg fprintf (stderr, 2823e747e6dSmrg "unknown singleton keyword %d\n", 2833e747e6dSmrg $1); 2843e747e6dSmrg ParseError = 1; 2853e747e6dSmrg } 2863e747e6dSmrg } 2873e747e6dSmrg ; 2883e747e6dSmrg 2893e747e6dSmrgsarg : SKEYWORD string { if (!do_string_keyword ($1, $2)) { 2903e747e6dSmrg twmrc_error_prefix(); 2913e747e6dSmrg fprintf (stderr, 2923e747e6dSmrg "unknown string keyword %d (value \"%s\")\n", 2933e747e6dSmrg $1, $2); 2943e747e6dSmrg ParseError = 1; 2953e747e6dSmrg } 2963e747e6dSmrg } 2973e747e6dSmrg ; 2983e747e6dSmrg 2993e747e6dSmrgnarg : NKEYWORD number { if (!do_number_keyword ($1, $2)) { 3003e747e6dSmrg twmrc_error_prefix(); 3013e747e6dSmrg fprintf (stderr, 3023e747e6dSmrg "unknown numeric keyword %d (value %d)\n", 3033e747e6dSmrg $1, $2); 3043e747e6dSmrg ParseError = 1; 3053e747e6dSmrg } 3063e747e6dSmrg } 3073e747e6dSmrg ; 3083e747e6dSmrg 3093e747e6dSmrg 3103e747e6dSmrg 3113e747e6dSmrgfull : EQUALS keys COLON contexts COLON action { $$ = $6; } 3123e747e6dSmrg ; 3133e747e6dSmrg 3143e747e6dSmrgfullkey : EQUALS keys COLON contextkeys COLON action { $$ = $6; } 3153e747e6dSmrg ; 3163e747e6dSmrg 3173e747e6dSmrgkeys : /* Empty */ 3183e747e6dSmrg | keys key 3193e747e6dSmrg ; 3203e747e6dSmrg 3213e747e6dSmrgkey : META { mods |= Mod1Mask; } 3223e747e6dSmrg | SHIFT { mods |= ShiftMask; } 3233e747e6dSmrg | LOCK { mods |= LockMask; } 3243e747e6dSmrg | CONTROL { mods |= ControlMask; } 3253e747e6dSmrg | META number { if ($2 < 1 || $2 > 5) { 3263e747e6dSmrg twmrc_error_prefix(); 3273e747e6dSmrg fprintf (stderr, 3283e747e6dSmrg "bad modifier number (%d), must be 1-5\n", 3293e747e6dSmrg $2); 3303e747e6dSmrg ParseError = 1; 3313e747e6dSmrg } else { 3323e747e6dSmrg mods |= (Mod1Mask << ($2 - 1)); 3333e747e6dSmrg } 3343e747e6dSmrg } 3353e747e6dSmrg | OR { } 3363e747e6dSmrg ; 3373e747e6dSmrg 3383e747e6dSmrgcontexts : /* Empty */ 3393e747e6dSmrg | contexts context 3403e747e6dSmrg ; 3413e747e6dSmrg 3423e747e6dSmrgcontext : WINDOW { cont |= C_WINDOW_BIT; } 3433e747e6dSmrg | TITLE { cont |= C_TITLE_BIT; } 3443e747e6dSmrg | ICON { cont |= C_ICON_BIT; } 3453e747e6dSmrg | ROOT { cont |= C_ROOT_BIT; } 3463e747e6dSmrg | FRAME { cont |= C_FRAME_BIT; } 3473e747e6dSmrg | ICONMGR { cont |= C_ICONMGR_BIT; } 3483e747e6dSmrg | META { cont |= C_ICONMGR_BIT; } 3493e747e6dSmrg | ALL { cont |= C_ALL_BITS; } 3503e747e6dSmrg | OR { } 3513e747e6dSmrg ; 3523e747e6dSmrg 3533e747e6dSmrgcontextkeys : /* Empty */ 3543e747e6dSmrg | contextkeys contextkey 3553e747e6dSmrg ; 3563e747e6dSmrg 3573e747e6dSmrgcontextkey : WINDOW { cont |= C_WINDOW_BIT; } 3583e747e6dSmrg | TITLE { cont |= C_TITLE_BIT; } 3593e747e6dSmrg | ICON { cont |= C_ICON_BIT; } 3603e747e6dSmrg | ROOT { cont |= C_ROOT_BIT; } 3613e747e6dSmrg | FRAME { cont |= C_FRAME_BIT; } 3623e747e6dSmrg | ICONMGR { cont |= C_ICONMGR_BIT; } 3633e747e6dSmrg | META { cont |= C_ICONMGR_BIT; } 3643e747e6dSmrg | ALL { cont |= C_ALL_BITS; } 3653e747e6dSmrg | OR { } 3663e747e6dSmrg | string { Name = $1; cont |= C_NAME_BIT; } 3673e747e6dSmrg ; 3683e747e6dSmrg 3693e747e6dSmrg 3703e747e6dSmrgpixmap_list : LB pixmap_entries RB 3713e747e6dSmrg ; 3723e747e6dSmrg 3733e747e6dSmrgpixmap_entries : /* Empty */ 3743e747e6dSmrg | pixmap_entries pixmap_entry 3753e747e6dSmrg ; 3763e747e6dSmrg 3773e747e6dSmrgpixmap_entry : TITLE_HILITE string { SetHighlightPixmap ($2); } 3783e747e6dSmrg ; 3793e747e6dSmrg 3803e747e6dSmrg 3813e747e6dSmrgcursor_list : LB cursor_entries RB 3823e747e6dSmrg ; 3833e747e6dSmrg 3843e747e6dSmrgcursor_entries : /* Empty */ 3853e747e6dSmrg | cursor_entries cursor_entry 3863e747e6dSmrg ; 3873e747e6dSmrg 3883e747e6dSmrgcursor_entry : FRAME string string { 3893e747e6dSmrg NewBitmapCursor(&Scr->FrameCursor, $2, $3); } 3903e747e6dSmrg | FRAME string { 3913e747e6dSmrg NewFontCursor(&Scr->FrameCursor, $2); } 3923e747e6dSmrg | TITLE string string { 3933e747e6dSmrg NewBitmapCursor(&Scr->TitleCursor, $2, $3); } 3943e747e6dSmrg | TITLE string { 3953e747e6dSmrg NewFontCursor(&Scr->TitleCursor, $2); } 3963e747e6dSmrg | ICON string string { 3973e747e6dSmrg NewBitmapCursor(&Scr->IconCursor, $2, $3); } 3983e747e6dSmrg | ICON string { 3993e747e6dSmrg NewFontCursor(&Scr->IconCursor, $2); } 4003e747e6dSmrg | ICONMGR string string { 4013e747e6dSmrg NewBitmapCursor(&Scr->IconMgrCursor, $2, $3); } 4023e747e6dSmrg | ICONMGR string { 4033e747e6dSmrg NewFontCursor(&Scr->IconMgrCursor, $2); } 4043e747e6dSmrg | BUTTON string string { 4053e747e6dSmrg NewBitmapCursor(&Scr->ButtonCursor, $2, $3); } 4063e747e6dSmrg | BUTTON string { 4073e747e6dSmrg NewFontCursor(&Scr->ButtonCursor, $2); } 4083e747e6dSmrg | MOVE string string { 4093e747e6dSmrg NewBitmapCursor(&Scr->MoveCursor, $2, $3); } 4103e747e6dSmrg | MOVE string { 4113e747e6dSmrg NewFontCursor(&Scr->MoveCursor, $2); } 4123e747e6dSmrg | RESIZE string string { 4133e747e6dSmrg NewBitmapCursor(&Scr->ResizeCursor, $2, $3); } 4143e747e6dSmrg | RESIZE string { 4153e747e6dSmrg NewFontCursor(&Scr->ResizeCursor, $2); } 4163e747e6dSmrg | WAIT string string { 4173e747e6dSmrg NewBitmapCursor(&Scr->WaitCursor, $2, $3); } 4183e747e6dSmrg | WAIT string { 4193e747e6dSmrg NewFontCursor(&Scr->WaitCursor, $2); } 4203e747e6dSmrg | MENU string string { 4213e747e6dSmrg NewBitmapCursor(&Scr->MenuCursor, $2, $3); } 4223e747e6dSmrg | MENU string { 4233e747e6dSmrg NewFontCursor(&Scr->MenuCursor, $2); } 4243e747e6dSmrg | SELECT string string { 4253e747e6dSmrg NewBitmapCursor(&Scr->SelectCursor, $2, $3); } 4263e747e6dSmrg | SELECT string { 4273e747e6dSmrg NewFontCursor(&Scr->SelectCursor, $2); } 4283e747e6dSmrg | KILL string string { 4293e747e6dSmrg NewBitmapCursor(&Scr->DestroyCursor, $2, $3); } 4303e747e6dSmrg | KILL string { 4313e747e6dSmrg NewFontCursor(&Scr->DestroyCursor, $2); } 4323e747e6dSmrg ; 4333e747e6dSmrg 4343e747e6dSmrgcolor_list : LB color_entries RB 4353e747e6dSmrg ; 4363e747e6dSmrg 4373e747e6dSmrg 4383e747e6dSmrgcolor_entries : /* Empty */ 4393e747e6dSmrg | color_entries color_entry 4403e747e6dSmrg ; 4413e747e6dSmrg 4423e747e6dSmrgcolor_entry : CLKEYWORD string { if (!do_colorlist_keyword ($1, color, 4433e747e6dSmrg $2)) { 4443e747e6dSmrg twmrc_error_prefix(); 4453e747e6dSmrg fprintf (stderr, 4463e747e6dSmrg "unhandled list color keyword %d (string \"%s\")\n", 4473e747e6dSmrg $1, $2); 4483e747e6dSmrg ParseError = 1; 4493e747e6dSmrg } 4503e747e6dSmrg } 4513e747e6dSmrg | CLKEYWORD string { list = do_colorlist_keyword($1,color, 4523e747e6dSmrg $2); 4533e747e6dSmrg if (!list) { 4543e747e6dSmrg twmrc_error_prefix(); 4553e747e6dSmrg fprintf (stderr, 4563e747e6dSmrg "unhandled color list keyword %d (string \"%s\")\n", 4573e747e6dSmrg $1, $2); 4583e747e6dSmrg ParseError = 1; 4593e747e6dSmrg } 4603e747e6dSmrg } 4613e747e6dSmrg win_color_list { /* No action */; } 4623e747e6dSmrg | CKEYWORD string { if (!do_color_keyword ($1, color, 4633e747e6dSmrg $2)) { 4643e747e6dSmrg twmrc_error_prefix(); 4653e747e6dSmrg fprintf (stderr, 4663e747e6dSmrg "unhandled color keyword %d (string \"%s\")\n", 4673e747e6dSmrg $1, $2); 4683e747e6dSmrg ParseError = 1; 4693e747e6dSmrg } 4703e747e6dSmrg } 4713e747e6dSmrg ; 4723e747e6dSmrg 4733e747e6dSmrgsave_color_list : LB s_color_entries RB 4743e747e6dSmrg ; 4753e747e6dSmrg 4763e747e6dSmrgs_color_entries : /* Empty */ 4773e747e6dSmrg | s_color_entries s_color_entry 4783e747e6dSmrg ; 4793e747e6dSmrg 4803e747e6dSmrgs_color_entry : string { do_string_savecolor(color, $1); } 4813e747e6dSmrg | CLKEYWORD { do_var_savecolor($1); } 4823e747e6dSmrg ; 4833e747e6dSmrg 4843e747e6dSmrgwin_color_list : LB win_color_entries RB 4853e747e6dSmrg ; 4863e747e6dSmrg 4873e747e6dSmrgwin_color_entries : /* Empty */ 4883e747e6dSmrg | win_color_entries win_color_entry 4893e747e6dSmrg ; 4903e747e6dSmrg 4913e747e6dSmrgwin_color_entry : string string { if (Scr->FirstTime && 4923e747e6dSmrg color == Scr->Monochrome) 4933e747e6dSmrg AddToList(list, $1, $2); } 4943e747e6dSmrg ; 4953e747e6dSmrg 4963e747e6dSmrgsqueeze : SQUEEZE_TITLE { 4973e747e6dSmrg if (HasShape) Scr->SqueezeTitle = TRUE; 4983e747e6dSmrg } 4993e747e6dSmrg | SQUEEZE_TITLE { list = &Scr->SqueezeTitleL; 5003e747e6dSmrg if (HasShape && Scr->SqueezeTitle == -1) 5013e747e6dSmrg Scr->SqueezeTitle = TRUE; 5023e747e6dSmrg } 5033e747e6dSmrg LB win_sqz_entries RB 5043e747e6dSmrg | DONT_SQUEEZE_TITLE { Scr->SqueezeTitle = FALSE; } 5053e747e6dSmrg | DONT_SQUEEZE_TITLE { list = &Scr->DontSqueezeTitleL; } 5063e747e6dSmrg win_list 5073e747e6dSmrg ; 5083e747e6dSmrg 5093e747e6dSmrgwin_sqz_entries : /* Empty */ 5103e747e6dSmrg | win_sqz_entries string JKEYWORD signed_number number { 5113e747e6dSmrg if (Scr->FirstTime) { 5123e747e6dSmrg do_squeeze_entry (list, $2, $3, $4, $5); 5133e747e6dSmrg } 5143e747e6dSmrg } 5153e747e6dSmrg ; 5163e747e6dSmrg 5173e747e6dSmrg 5183e747e6dSmrgiconm_list : LB iconm_entries RB 5193e747e6dSmrg ; 5203e747e6dSmrg 5213e747e6dSmrgiconm_entries : /* Empty */ 5223e747e6dSmrg | iconm_entries iconm_entry 5233e747e6dSmrg ; 5243e747e6dSmrg 5253e747e6dSmrgiconm_entry : string string number { if (Scr->FirstTime) 5263e747e6dSmrg AddToList(list, $1, (char *) 5273e747e6dSmrg AllocateIconManager($1, NULLSTR, 5283e747e6dSmrg $2,$3)); 5293e747e6dSmrg } 5303e747e6dSmrg | string string string number 5313e747e6dSmrg { if (Scr->FirstTime) 5323e747e6dSmrg AddToList(list, $1, (char *) 5333e747e6dSmrg AllocateIconManager($1,$2, 5343e747e6dSmrg $3, $4)); 5353e747e6dSmrg } 5363e747e6dSmrg ; 5373e747e6dSmrg 5383e747e6dSmrgwin_list : LB win_entries RB 5393e747e6dSmrg ; 5403e747e6dSmrg 5413e747e6dSmrgwin_entries : /* Empty */ 5423e747e6dSmrg | win_entries win_entry 5433e747e6dSmrg ; 5443e747e6dSmrg 5453e747e6dSmrgwin_entry : string { if (Scr->FirstTime) 5463e747e6dSmrg AddToList(list, $1, 0); 5473e747e6dSmrg } 5483e747e6dSmrg ; 5493e747e6dSmrg 5503e747e6dSmrgicon_list : LB icon_entries RB 5513e747e6dSmrg ; 5523e747e6dSmrg 5533e747e6dSmrgicon_entries : /* Empty */ 5543e747e6dSmrg | icon_entries icon_entry 5553e747e6dSmrg ; 5563e747e6dSmrg 5573e747e6dSmrgicon_entry : string string { if (Scr->FirstTime) AddToList(list, $1, $2); } 5583e747e6dSmrg ; 5593e747e6dSmrg 5603e747e6dSmrgfunction : LB function_entries RB 5613e747e6dSmrg ; 5623e747e6dSmrg 5633e747e6dSmrgfunction_entries: /* Empty */ 5643e747e6dSmrg | function_entries function_entry 5653e747e6dSmrg ; 5663e747e6dSmrg 5673e747e6dSmrgfunction_entry : action { AddToMenu(root, "", Action, NULL, $1, 5683e747e6dSmrg NULLSTR, NULLSTR); 5693e747e6dSmrg Action = ""; 5703e747e6dSmrg } 5713e747e6dSmrg ; 5723e747e6dSmrg 5733e747e6dSmrgmenu : LB menu_entries RB 5743e747e6dSmrg ; 5753e747e6dSmrg 5763e747e6dSmrgmenu_entries : /* Empty */ 5773e747e6dSmrg | menu_entries menu_entry 5783e747e6dSmrg ; 5793e747e6dSmrg 5803e747e6dSmrgmenu_entry : string action { AddToMenu(root, $1, Action, pull, $2, 5813e747e6dSmrg NULLSTR, NULLSTR); 5823e747e6dSmrg Action = ""; 5833e747e6dSmrg pull = NULL; 5843e747e6dSmrg } 5853e747e6dSmrg | string LP string COLON string RP action { 5863e747e6dSmrg AddToMenu(root, $1, Action, pull, $7, 5873e747e6dSmrg $3, $5); 5883e747e6dSmrg Action = ""; 5893e747e6dSmrg pull = NULL; 5903e747e6dSmrg } 5913e747e6dSmrg ; 5923e747e6dSmrg 5933e747e6dSmrgaction : FKEYWORD { $$ = $1; } 5943e747e6dSmrg | FSKEYWORD string { 5953e747e6dSmrg $$ = $1; 5963e747e6dSmrg Action = $2; 5973e747e6dSmrg switch ($1) { 5983e747e6dSmrg case F_MENU: 5993e747e6dSmrg pull = GetRoot ($2, NULLSTR,NULLSTR); 6003e747e6dSmrg pull->prev = root; 6013e747e6dSmrg break; 6023e747e6dSmrg case F_WARPRING: 6033e747e6dSmrg if (!CheckWarpRingArg (Action)) { 6043e747e6dSmrg twmrc_error_prefix(); 6053e747e6dSmrg fprintf (stderr, 6063e747e6dSmrg "ignoring invalid f.warptoring argument \"%s\"\n", 6073e747e6dSmrg Action); 6083e747e6dSmrg $$ = F_NOP; 6093e747e6dSmrg } 6103e747e6dSmrg case F_WARPTOSCREEN: 6113e747e6dSmrg if (!CheckWarpScreenArg (Action)) { 6123e747e6dSmrg twmrc_error_prefix(); 6133e747e6dSmrg fprintf (stderr, 6143e747e6dSmrg "ignoring invalid f.warptoscreen argument \"%s\"\n", 6153e747e6dSmrg Action); 6163e747e6dSmrg $$ = F_NOP; 6173e747e6dSmrg } 6183e747e6dSmrg break; 6193e747e6dSmrg case F_COLORMAP: 6203e747e6dSmrg if (CheckColormapArg (Action)) { 6213e747e6dSmrg $$ = F_COLORMAP; 6223e747e6dSmrg } else { 6233e747e6dSmrg twmrc_error_prefix(); 6243e747e6dSmrg fprintf (stderr, 6253e747e6dSmrg "ignoring invalid f.colormap argument \"%s\"\n", 6263e747e6dSmrg Action); 6273e747e6dSmrg $$ = F_NOP; 6283e747e6dSmrg } 6293e747e6dSmrg break; 6303e747e6dSmrg } /* end switch */ 6313e747e6dSmrg } 6323e747e6dSmrg ; 6333e747e6dSmrg 6343e747e6dSmrg 6353e747e6dSmrgsigned_number : number { $$ = $1; } 6363e747e6dSmrg | PLUS number { $$ = $2; } 6373e747e6dSmrg | MINUS number { $$ = -($2); } 6383e747e6dSmrg ; 6393e747e6dSmrg 6403e747e6dSmrgbutton : BUTTON number { $$ = $2; 6413e747e6dSmrg if ($2 == 0) 6423e747e6dSmrg yyerror("bad button 0"); 6433e747e6dSmrg 6443e747e6dSmrg if ($2 > MAX_BUTTONS) 6453e747e6dSmrg { 6463e747e6dSmrg $$ = 0; 6473e747e6dSmrg yyerror("button number too large"); 6483e747e6dSmrg } 6493e747e6dSmrg } 6503e747e6dSmrg ; 6513e747e6dSmrg 6523e747e6dSmrgstring : STRING { ptr = (char *)malloc(strlen($1)+1); 6533e747e6dSmrg strcpy(ptr, $1); 6543e747e6dSmrg RemoveDQuote(ptr); 6553e747e6dSmrg $$ = ptr; 6563e747e6dSmrg } 6573e747e6dSmrg ; 6583e747e6dSmrgnumber : NUMBER { $$ = $1; } 6593e747e6dSmrg ; 6603e747e6dSmrg 6613e747e6dSmrg%% 6623e747e6dSmrgvoid 6633e747e6dSmrgyyerror(char *s) 6643e747e6dSmrg{ 6653e747e6dSmrg twmrc_error_prefix(); 6663e747e6dSmrg fprintf (stderr, "error in input file: %s\n", s ? s : ""); 6673e747e6dSmrg ParseError = 1; 6683e747e6dSmrg} 6693e747e6dSmrg 6703e747e6dSmrgvoid 6713e747e6dSmrgRemoveDQuote(char *str) 6723e747e6dSmrg{ 6733e747e6dSmrg register char *i, *o; 6743e747e6dSmrg register int n; 6753e747e6dSmrg register int count; 6763e747e6dSmrg 6773e747e6dSmrg for (i=str+1, o=str; *i && *i != '\"'; o++) 6783e747e6dSmrg { 6793e747e6dSmrg if (*i == '\\') 6803e747e6dSmrg { 6813e747e6dSmrg switch (*++i) 6823e747e6dSmrg { 6833e747e6dSmrg case 'n': 6843e747e6dSmrg *o = '\n'; 6853e747e6dSmrg i++; 6863e747e6dSmrg break; 6873e747e6dSmrg case 'b': 6883e747e6dSmrg *o = '\b'; 6893e747e6dSmrg i++; 6903e747e6dSmrg break; 6913e747e6dSmrg case 'r': 6923e747e6dSmrg *o = '\r'; 6933e747e6dSmrg i++; 6943e747e6dSmrg break; 6953e747e6dSmrg case 't': 6963e747e6dSmrg *o = '\t'; 6973e747e6dSmrg i++; 6983e747e6dSmrg break; 6993e747e6dSmrg case 'f': 7003e747e6dSmrg *o = '\f'; 7013e747e6dSmrg i++; 7023e747e6dSmrg break; 7033e747e6dSmrg case '0': 7043e747e6dSmrg if (*++i == 'x') 7053e747e6dSmrg goto hex; 7063e747e6dSmrg else 7073e747e6dSmrg --i; 7083e747e6dSmrg case '1': case '2': case '3': 7093e747e6dSmrg case '4': case '5': case '6': case '7': 7103e747e6dSmrg n = 0; 7113e747e6dSmrg count = 0; 7123e747e6dSmrg while (*i >= '0' && *i <= '7' && count < 3) 7133e747e6dSmrg { 7143e747e6dSmrg n = (n<<3) + (*i++ - '0'); 7153e747e6dSmrg count++; 7163e747e6dSmrg } 7173e747e6dSmrg *o = n; 7183e747e6dSmrg break; 7193e747e6dSmrg hex: 7203e747e6dSmrg case 'x': 7213e747e6dSmrg n = 0; 7223e747e6dSmrg count = 0; 7233e747e6dSmrg while (i++, count++ < 2) 7243e747e6dSmrg { 7253e747e6dSmrg if (*i >= '0' && *i <= '9') 7263e747e6dSmrg n = (n<<4) + (*i - '0'); 7273e747e6dSmrg else if (*i >= 'a' && *i <= 'f') 7283e747e6dSmrg n = (n<<4) + (*i - 'a') + 10; 7293e747e6dSmrg else if (*i >= 'A' && *i <= 'F') 7303e747e6dSmrg n = (n<<4) + (*i - 'A') + 10; 7313e747e6dSmrg else 7323e747e6dSmrg break; 7333e747e6dSmrg } 7343e747e6dSmrg *o = n; 7353e747e6dSmrg break; 7363e747e6dSmrg case '\n': 7373e747e6dSmrg i++; /* punt */ 7383e747e6dSmrg o--; /* to account for o++ at end of loop */ 7393e747e6dSmrg break; 7403e747e6dSmrg case '\"': 7413e747e6dSmrg case '\'': 7423e747e6dSmrg case '\\': 7433e747e6dSmrg default: 7443e747e6dSmrg *o = *i++; 7453e747e6dSmrg break; 7463e747e6dSmrg } 7473e747e6dSmrg } 7483e747e6dSmrg else 7493e747e6dSmrg *o = *i++; 7503e747e6dSmrg } 7513e747e6dSmrg *o = '\0'; 7523e747e6dSmrg} 7533e747e6dSmrg 7543e747e6dSmrgstatic MenuRoot *GetRoot(char *name, char* fore, char *back) 7553e747e6dSmrg{ 7563e747e6dSmrg MenuRoot *tmp; 7573e747e6dSmrg 7583e747e6dSmrg tmp = FindMenuRoot(name); 7593e747e6dSmrg if (tmp == NULL) 7603e747e6dSmrg tmp = NewMenuRoot(name); 7613e747e6dSmrg 7623e747e6dSmrg if (fore) 7633e747e6dSmrg { 7643e747e6dSmrg int save; 7653e747e6dSmrg 7663e747e6dSmrg save = Scr->FirstTime; 7673e747e6dSmrg Scr->FirstTime = TRUE; 7683e747e6dSmrg GetColor(COLOR, &tmp->hi_fore, fore); 7693e747e6dSmrg GetColor(COLOR, &tmp->hi_back, back); 7703e747e6dSmrg Scr->FirstTime = save; 7713e747e6dSmrg } 7723e747e6dSmrg 7733e747e6dSmrg return tmp; 7743e747e6dSmrg} 7753e747e6dSmrg 7763e747e6dSmrgstatic void GotButton(int butt, int func) 7773e747e6dSmrg{ 7783e747e6dSmrg int i; 7793e747e6dSmrg 7803e747e6dSmrg for (i = 0; i < NUM_CONTEXTS; i++) 7813e747e6dSmrg { 7823e747e6dSmrg if ((cont & (1 << i)) == 0) 7833e747e6dSmrg continue; 7843e747e6dSmrg 7853e747e6dSmrg Scr->Mouse[butt][i][mods].func = func; 7863e747e6dSmrg if (func == F_MENU) 7873e747e6dSmrg { 7883e747e6dSmrg pull->prev = NULL; 7893e747e6dSmrg Scr->Mouse[butt][i][mods].menu = pull; 7903e747e6dSmrg } 7913e747e6dSmrg else 7923e747e6dSmrg { 7933e747e6dSmrg root = GetRoot(TWM_ROOT, NULLSTR, NULLSTR); 7943e747e6dSmrg Scr->Mouse[butt][i][mods].item = AddToMenu(root,"x",Action, 7953e747e6dSmrg NULL, func, NULLSTR, NULLSTR); 7963e747e6dSmrg } 7973e747e6dSmrg } 7983e747e6dSmrg Action = ""; 7993e747e6dSmrg pull = NULL; 8003e747e6dSmrg cont = 0; 8013e747e6dSmrg mods_used |= mods; 8023e747e6dSmrg mods = 0; 8033e747e6dSmrg} 8043e747e6dSmrg 8053e747e6dSmrgstatic void GotKey(char *key, int func) 8063e747e6dSmrg{ 8073e747e6dSmrg int i; 8083e747e6dSmrg 8093e747e6dSmrg for (i = 0; i < NUM_CONTEXTS; i++) 8103e747e6dSmrg { 8113e747e6dSmrg if ((cont & (1 << i)) == 0) 8123e747e6dSmrg continue; 8133e747e6dSmrg if (!AddFuncKey(key, i, mods, func, Name, Action)) 8143e747e6dSmrg break; 8153e747e6dSmrg } 8163e747e6dSmrg 8173e747e6dSmrg Action = ""; 8183e747e6dSmrg pull = NULL; 8193e747e6dSmrg cont = 0; 8203e747e6dSmrg mods_used |= mods; 8213e747e6dSmrg mods = 0; 8223e747e6dSmrg} 8233e747e6dSmrg 8243e747e6dSmrg 8253e747e6dSmrgstatic void GotTitleButton (char *bitmapname, int func, Bool rightside) 8263e747e6dSmrg{ 8273e747e6dSmrg if (!CreateTitleButton (bitmapname, func, Action, pull, rightside, True)) { 8283e747e6dSmrg twmrc_error_prefix(); 8293e747e6dSmrg fprintf (stderr, 8303e747e6dSmrg "unable to create %s titlebutton \"%s\"\n", 8313e747e6dSmrg rightside ? "right" : "left", bitmapname); 8323e747e6dSmrg } 8333e747e6dSmrg Action = ""; 8343e747e6dSmrg pull = NULL; 8353e747e6dSmrg} 8363e747e6dSmrg 8373e747e6dSmrgstatic Bool CheckWarpScreenArg (char *s) 8383e747e6dSmrg{ 8393e747e6dSmrg XmuCopyISOLatin1Lowered (s, s); 8403e747e6dSmrg 8413e747e6dSmrg if (strcmp (s, WARPSCREEN_NEXT) == 0 || 8423e747e6dSmrg strcmp (s, WARPSCREEN_PREV) == 0 || 8433e747e6dSmrg strcmp (s, WARPSCREEN_BACK) == 0) 8443e747e6dSmrg return True; 8453e747e6dSmrg 8463e747e6dSmrg for (; *s && isascii(*s) && isdigit(*s); s++) ; /* SUPPRESS 530 */ 8473e747e6dSmrg return (*s ? False : True); 8483e747e6dSmrg} 8493e747e6dSmrg 8503e747e6dSmrg 8513e747e6dSmrgstatic Bool CheckWarpRingArg (char *s) 8523e747e6dSmrg{ 8533e747e6dSmrg XmuCopyISOLatin1Lowered (s, s); 8543e747e6dSmrg 8553e747e6dSmrg if (strcmp (s, WARPSCREEN_NEXT) == 0 || 8563e747e6dSmrg strcmp (s, WARPSCREEN_PREV) == 0) 8573e747e6dSmrg return True; 8583e747e6dSmrg 8593e747e6dSmrg return False; 8603e747e6dSmrg} 8613e747e6dSmrg 8623e747e6dSmrg 8633e747e6dSmrgstatic Bool CheckColormapArg (char *s) 8643e747e6dSmrg{ 8653e747e6dSmrg XmuCopyISOLatin1Lowered (s, s); 8663e747e6dSmrg 8673e747e6dSmrg if (strcmp (s, COLORMAP_NEXT) == 0 || 8683e747e6dSmrg strcmp (s, COLORMAP_PREV) == 0 || 8693e747e6dSmrg strcmp (s, COLORMAP_DEFAULT) == 0) 8703e747e6dSmrg return True; 8713e747e6dSmrg 8723e747e6dSmrg return False; 8733e747e6dSmrg} 8743e747e6dSmrg 8753e747e6dSmrg 8763e747e6dSmrgvoid 8773e747e6dSmrgtwmrc_error_prefix () 8783e747e6dSmrg{ 8793e747e6dSmrg fprintf (stderr, "%s: line %d: ", ProgramName, yylineno); 8803e747e6dSmrg} 881