diff --git a/DEVEL/Developer.txt b/DEVEL/Developer.txt index 49cebe12f..ce78965ea 100644 --- a/DEVEL/Developer.txt +++ b/DEVEL/Developer.txt @@ -24,6 +24,7 @@ CONTENTS 4. git configuration 5. variable expansion 6. reserved names +7. nhadd/nhcommit ------------------------------------------------------------------------------ 1. email Email to devteam@nethack.org will usually get a response, but it may take a @@ -52,7 +53,9 @@ XXX windows XXX linux B. Specify the prefix for variable substitution: (This assumes you are not a member of DevTeam or any variant's development - team. If you are, this may be wrong. Look for more specific documentation.) + team. If you are, this may be wrong. Look for more specific documentation. + For example, this file uses "MINE" for the substitution prefix - this will + almost always be wrong if you are working with someone else.) Decide where you want to put this info; it should NOT be inside the tree you cloned from git. I use ~/nethack/GITADDDIR; for that base, create the needed directories and edit the file: @@ -82,8 +85,7 @@ D. aliases nhadd nhcommit These two commands take the same options as the normal git add and commit - commands but perform RCS/CVS-style variable substitution. Note that the - substitutions do not show up in the working directory. + commands but perform RCS/CVS-style variable substitution. Note that nothing terrible will happen if you do not use the nh* versions of the commands. @@ -94,6 +96,12 @@ D. aliases MINE-Revision CVS style revision number MINE-Branch the current git branch + For direct access to the substitution mechanism, use: + nhsub + + See the section "nhadd/nhcommit" for details on those aliases. + Run "perldoc DEVEL/hooksdir/nhsub" for details on nhsub. + That's it. If you need to do something more when setting up your repository, keep reading. Otherwise, you are done with this section. @@ -165,3 +173,26 @@ D. Using your own hooks Anything that matches m/^nh/i or m/^nethack/i is reserved in all namespaces (environment, file names, git config, etc). ------------------------------------------------------------------------------ +7. nhadd/nhcommit + nhadd is essentially "git nhsub $*; git add $*" + nhcommit is essentially "git nhsub $*; git commit $*" + + As "git add" and "git commit" have complex arguments, nhsub attempts to + do the right thing - or at least something reasonable - for most arguments. + If nhadd/nhcommit don't do what you need, run "git nhsub" on its own then + add/commit. + + So when do I need to use what? + The object is to get nhsub run right before git takes a snapshot of each + file. So for example: + - use "git nhcommit " instead of "git commit " + - use "git nhadd " instead of "git add " + - use either "git commit" or "git nhcommit" (because the snapshot was + already taken) + - if you use "git nhsub " then you can "git add " or + "git commit " + + For more complex situations, "git nhsub" takes -v and -n flags - see + "perldoc DEVEL/hooksdir/nhsub". + +------------------------------------------------------------------------------ diff --git a/DEVEL/hooksdir/nhsub b/DEVEL/hooksdir/nhsub index 5238f422a..2dbc97800 100644 --- a/DEVEL/hooksdir/nhsub +++ b/DEVEL/hooksdir/nhsub @@ -1,6 +1,6 @@ #!/usr/bin/perl # nhsub -# $NHDT-Date: 1427913635 2015/04/01 18:40:35 $ +# $NHDT-Date: 1427408239 2015/03/26 22:17:19 $ # Note: was originally called nhdate; the rename is not reflected in the code. @@ -27,7 +27,11 @@ my %codes = ( 'd M'=>0, 'd D'=>0, 'c M'=>0, 'c D'=>0, -# M [ MD] updated in index + 'dM '=>0, 'dMM'=>1, 'dMD'=>0, + 'aM '=>0, 'aMM'=>1, 'aMD'=>0, + 'cM '=>0, 'cMM'=>1, 'cMD'=>0, + 'fM '=>0, 'fMM'=>1, 'fMD'=>0, + # M [ MD] updated in index 'dA '=>1, 'dAM'=>1, 'dAD'=>1, 'aA '=>1, 'aAM'=>1, 'aAD'=>1, @@ -41,9 +45,17 @@ my %codes = ( 'fD '=>1, 'fDM'=>1, # D [ M] deleted from index -# R [ MD] renamed in index + 'dR '=>0, 'dRM'=>1, 'dRD'=>0, + 'aR '=>0, 'aRM'=>1, 'aRD'=>0, + 'cR '=>0, 'cRM'=>1, 'cRD'=>0, + 'fR '=>0, 'fRM'=>1, 'fRD'=>0, + # R [ MD] renamed in index -# C [ MD] copied in index + 'dC '=>0, 'dCM'=>1, 'dCD'=>0, + 'aC '=>0, 'aCM'=>1, 'aCD'=>0, + 'cC '=>0, 'cCM'=>1, 'cCD'=>0, + 'fC '=>0, 'fCM'=>1, 'fCD'=>0, + # C [ MD] copied in index 'aM '=>1, 'aA '=>1, 'aR '=>1, 'aC '=>1, 'fM '=>1, 'fA '=>1, 'fR '=>1, 'fC '=>1, @@ -87,13 +99,48 @@ if ($^O eq "MSWin32") $PDS = '\\'; } -# pick up the prefix for substitutions in this repo -my $PREFIX = &git_config('nethack','substprefix'); -print "PREFIX: '$PREFIX'\n" if($opt{v}); +# various command line options to consider and what the code actually does: +#DONE nhcommit with no files should exit(0) +#DONE nhadd with no files should exit(0) +#DONE commit -a? +# add root dir +#DONE commit -a + files -> exit(0) +#nothing: commit --interactive/--patch +#nothing: add -i/--interactive --patch/-p? +#nothing: add -u/--update?????? -A/--all/--no-ignore-removal??? +#nothing (not quite right): add --no-all --ignore-removal??? +#DONE add --refresh +#nothing: add -N/--intent-to-add +#DONE add -n - exit(0) +#DONE add --dry-run - exit 0 +#DONE commit --dry-run - exit 0 +#DONE?: add foo/\*/x (letting git expand the filenames) + +my @rawlist0 = &cmdparse(@ARGV); + +# Use git ls-files to expand command line filepaths with wildcards. +# Let's try this for all commands. +my @rawlist; +foreach my $e (@rawlist0){ + if($e =~ m/[?*[\\]/){ + my @rv = &lsfiles(undef, $e); + push(@rawlist, @rv) if(@rv); + if($opt{f}){ + my @rv = &lsfiles('-i', $e); + push(@rawlist, @rv) if(@rv); + } + } else { + push(@rawlist, $e); + } +} -my @rawlist = &cmdparse(@ARGV); push(@rawlist,'.') if($#rawlist == -1); +# pick up the prefix for substitutions in this repo +#TEST my $PREFIX = &git_config('nethack','substprefix'); +my $PREFIX = "NHDT"; +print "PREFIX: '$PREFIX'\n" if($opt{v}); + while(@rawlist){ my $raw = shift @rawlist; if(-f $raw){ @@ -201,7 +248,21 @@ my $count = s/\$$PREFIX-(([A-Za-z][A-Za-z0-9_]*)(: ([^\x24]+))?)\$/&handlevar($2 my $ofile = $file . ".nht"; open(TOUT, ">", $ofile) or die "Can't open $ofile"; - die "write failed: $!" unless defined syswrite(TOUT, $_); + +#XXX MUST add a loop here +# die "write failed: $!" unless defined syswrite(TOUT, $_); + my $offset = 0; + my $sent; +#print STDERR "L=",length,"\n"; + while($offset < length){ + $sent = syswrite(TOUT, $_, (length($_) - $offset), $offset); + die "write failed: $!" unless defined($sent); +#print STDERR "rv=$sent\n"; + last if($sent == (length($_) - $offset)); + $offset += $sent; +#print STDERR "loop: O=$offset\n"; + } + close TOUT or die "Can't close $ofile"; rename $ofile, $file or die "Can't rename $ofile to $file"; } @@ -230,8 +291,14 @@ sub cmdparse { last; } if(m/^--/){ + if($opt{cmd} eq 'add' && $_ eq '--dry-run'){ + exit 0; + } if($opt{cmd} eq 'commit' && $_ eq '--dry-run'){ - $opt{'n'} = 1; + exit 0; + } + if($opt{cmd} eq 'add' && $_ eq '--refresh'){ + exit 0; } shift @in; next; @@ -244,6 +311,10 @@ sub cmdparse { } elsif($opt{cmd} eq 'date'){ $opt{$single}++; } + + if($opt{cmd} eq 'add' && $single eq 'n'){ + exit 0; + } } } shift @in; @@ -253,6 +324,20 @@ sub cmdparse { $mode = 'f' if($opt{cmd} eq 'date' && ($opt{f}||$opt{F})); $mode = 'f' if($opt{cmd} eq 'add' && $opt{f}); + if($opt{cmd} eq 'add' && $#in == -1){ + exit 0; + } + if($opt{cmd} eq 'commit' && $#in == -1){ + exit 0; + } + if($opt{cmd} eq 'add' && $opt{a} && $#in != -1){ + exit 0; + } + if($opt{cmd} eq 'add' && $opt{a}){ + my $x = `git rev-parse --show-toplevel`; + $x =~ s/[\n\r]+$//; + push(@in, $x); + } return @in; # this is our file list } @@ -286,6 +371,19 @@ sub handlevar { } } +sub lsfiles { + my ($flags, $ps) = @_; + open RV, "-|", "git ls-files $flags '$ps'" or die "Can't ls-files"; + my @rv = ; + map { s/[\r\n]+$// } @rv; + if(!close RV){ + return undef if($! == 0); + die "close ls-files failed: $!"; + } + return undef if($#rv == -1); + return @rv; +} + package PREFIX; use POSIX qw(strftime); diff --git a/dat/Knight.des b/dat/Knight.des index 5e22f43a9..dd55bd4e2 100644 --- a/dat/Knight.des +++ b/dat/Knight.des @@ -112,18 +112,18 @@ FLAGS: hardfloor INIT_MAP: mines, '.' , 'P' , false , true , lit , false GEOMETRY:center,center MAP -...PPP.........PPPP..............PPPP... -.PPPP...........PP................PPPP.. -PP.................................PPP.. -....................................PPP. -.....................................PP. -.......................................P +xxxxxxxxx......xxxx...........xxxxxxxxxx +xxxxxxx.........xxx.............xxxxxxxx +xxxx..............................xxxxxx +xx.................................xxxxx +....................................xxxx +.......................................x ........................................ -PP...................................PPP -.PPP...............................PPP.. -..PP.............................PPPP... -..PPP...........................PPPPPP.. -....PPPP.........PPP.........PPPP..PP... +xx...................................xxx +xxxx..............................xxxxxx +xxxxxx..........................xxxxxxxx +xxxxxxxx.........xx..........xxxxxxxxxxx +xxxxxxxxx.......xxxxxx.....xxxxxxxxxxxxx ENDMAP # Dungeon Description # The Isle of Glass is a Tor rising out of the swamps surrounding it. diff --git a/dat/Monk.des b/dat/Monk.des index 155b37040..cb87649e2 100644 --- a/dat/Monk.des +++ b/dat/Monk.des @@ -203,17 +203,17 @@ MAZE: "Mon-goal", ' ' INIT_MAP: mines, 'L' , '.' , false , false , unlit , false GEOMETRY:center,center MAP -.L......L.LLL.......LL.... -.LLL.......L......LL...... -LL.LL.............L.LL.... -.......................... -......................LL.. -......................LLL. -LL........................ -.LL....................... -.LL................LL.L... -..LL.....L.LL.......LLL... -.........LLL.........L.... +xxxxxx..xxxxxx...xxxxxxxxx +xxxx......xx......xxxxxxxx +xx.xx.............xxxxxxxx +x....................xxxxx +......................xxxx +......................xxxx +xx........................ +xxx......................x +xxx................xxxxxxx +xxxx.....x.xx.......xxxxxx +xxxxx...xxxxxx....xxxxxxxx ENDMAP # Dungeon Description $place = { (14,04),(13,07) } diff --git a/dat/Priest.des b/dat/Priest.des index 21fd71600..f8d3d4b75 100644 --- a/dat/Priest.des +++ b/dat/Priest.des @@ -186,17 +186,17 @@ MAZE: "Pri-goal", ' ' INIT_MAP: mines, 'L' , '.' , false , false , unlit , false GEOMETRY:center,center MAP -.L......L.LLL.......LL.... -.LLL.......L......LL...... -LL.LL.............L.LL.... -.......................... -......................LL.. -......................LLL. -LL........................ -.LL....................... -.LL................LL.L... -..LL.....L.LL.......LLL... -.........LLL.........L.... +xxxxxx..xxxxxx...xxxxxxxxx +xxxx......xx......xxxxxxxx +xx.xx.............xxxxxxxx +x....................xxxxx +......................xxxx +......................xxxx +xx........................ +xxx......................x +xxx................xxxxxxx +xxxx.....x.xx.......xxxxxx +xxxxx...xxxxxx....xxxxxxxx ENDMAP # Dungeon Description $place = { (14,04),(13,07) } diff --git a/dat/Valkyrie.des b/dat/Valkyrie.des index 0dbd3bd05..ad9c942bf 100644 --- a/dat/Valkyrie.des +++ b/dat/Valkyrie.des @@ -94,19 +94,19 @@ FLAGS: hardfloor,icedpools INIT_MAP: mines, '.', 'I', true, true, lit, false GEOMETRY:center,center MAP -PPPP.... ....PPPPP. -PLP... .PPLLLPP +PPPPxxxx xxxxPPPPPx +PLPxxx xPPLLLPP PPP ....................... PPPLLP -.. ............................ PPPP -. ............................... .... - ................................. .. -.................................... . +xx ............................ PPPP +x ............................... xxxx + ................................. xx +.................................... x ................................... -. .................................. . -.. .............................. PP -.PPP .......................... PLP -.PLLP ..PLLP -.PPPP.. ....PPPP +x .................................. x +xx .............................. PP +xPPP .......................... PLP +xPLLP xxPLLP +xPPPPxx xxxxPPPP ENDMAP # Dungeon Description REGION:(00,00,39,12),lit,"ordinary" @@ -180,23 +180,23 @@ FLAGS: icedpools INIT_MAP: mines, '.', 'L', true, true, lit, false GEOMETRY:center,center MAP -.L............................LLLLL -LLL.........LLLLL.LLLLL.........LLL -.LLL......LLLLLLLLLLLLLLL.......LL. -.LLL.....LLL|---------|LLL.....L... -..LL....LL|--.........--|LL.....LLL -.......LL|-...LLLLLLL...-|LL.....L. -.......LL|...LL.....LL...|LL....... +xxxxxx.....................xxxxxxxx +xxxxx.......LLLLL.LLLLL......xxxxxx +xxxx......LLLLLLLLLLLLLLL......xxxx +xxxx.....LLL|---------|LLL.....xxxx +xxxx....LL|--.........--|LL.....xxx +x......LL|-...LLLLLLL...-|LL.....xx +.......LL|...LL.....LL...|LL......x ......LL|-..LL.......LL..-|LL...... ......LL|.................|LL...... ......LL|-..LL.......LL..-|LL...... .......LL|...LL.....LL...|LL....... -.......LL|-...LLLLLLL...-|LL....... -..L.....LL|--.........--|LL.....LL. -..LL.....LLL|---------|LLL....LLLL. -..LLL.....LLLLLLLLLLLLLLL...LLLLL.. -.LLLL.......LLLLL.LLLLL.....LLLL... -..LL............................... +xx.....LL|-...LLLLLLL...-|LL......x +xxx.....LL|--.........--|LL.....xxx +xxxx.....LLL|---------|LLL...xxxxxx +xxxxx.....LLLLLLLLLLLLLLL...xxxxxxx +xxxxxx......LLLLL.LLLLL.....xxxxxxx +xxxxxxxxx..................xxxxxxxx ENDMAP # Dungeon Description REGION:(00,00,34,16),lit,"ordinary" diff --git a/dat/bigroom.des b/dat/bigroom.des index a902cfc3a..83a852e96 100644 --- a/dat/bigroom.des +++ b/dat/bigroom.des @@ -436,3 +436,242 @@ MONSTER:random,random MONSTER:random,random MONSTER:random,random MONSTER:random,random + + +# The Four Circles + +LEVEL:"bigrm-6" +FLAGS:mazelevel +INIT_MAP:solidfill,' ' +GEOMETRY:center,center +MAP + --------- --------- --------- --------- + ---.......--- ---.......--- ---.......--- ---.......--- + --...........-- --...........-- --...........-- --...........-- + --.............-- --.............-- --.............-- --.............-- + -...............- -...............- -...............- -...............- +|-...............---...............---...............---...............-- +|.................-.................-.................-.................| +|........T.................T.................T.................T........| +|.......................................................................| +|......T.{.....................................................{.T......| +|.......................................................................| +|........T.................T.................T.................T........| +|.................-.................-.................-.................| +--...............---...............---...............---...............-- + -...............- -...............- -...............- -...............- + --.............-- --.............-- --.............-- --.............-- + --...........-- --...........-- --...........-- --...........-- + ---.......--- ---.......--- ---.......--- ---.......--- + --------- --------- --------- --------- +ENDMAP +REGION:(01,01,72,17),lit,"ordinary" + +STAIR:random,up +STAIR:random,down + +NON_DIGGABLE:(00,00,72,18) + +LOOP [15] { + OBJECT:random,random +} +LOOP [6] { + TRAP:random,random +} +LOOP [28] { + MONSTER:random,random +} + + + +# Let's tilt it a bit + +LEVEL:"bigrm-7" +FLAGS:mazelevel +INIT_MAP:solidfill,' ' +GEOMETRY:center,center +MAP + ----- + ---------...--- + ---------.........L...--- + ---------.......................--- + ---------.................................--- + ---------...........................................--- + ---------.....................................................--- +|--------...............................................................--| +|.........................................................................| +|.L.....................................................................L.| +|.........................................................................| +|--...............................................................--------| + ---.....................................................--------- + ---...........................................--------- + ---.................................--------- + ---.......................--------- + ---...L.........--------- + ---...--------- + ----- +ENDMAP + +$terrain = terrain:{ 'L', 'T', '{', '.' } +SHUFFLE:$terrain +REPLACE_TERRAIN:(00,00,74,18),'L',$terrain[0],100% + +REGION:(01,01,73,17),lit,"ordinary" + +STAIR:random,up +STAIR:random,down + +NON_DIGGABLE:(00,00,74,18) + +LOOP [15] { + OBJECT:random,random +} +LOOP [6] { + TRAP:random,random +} +LOOP [28] { + MONSTER:random,random +} + + +# Slanted + +LEVEL:"bigrm-8" +FLAGS:mazelevel +INIT_MAP:solidfill,' ' +GEOMETRY:center,center +MAP +---------------------------------------------- +|............................................--- +--.............................................--- + ---......................................FF.....--- + ---...................................FF........--- + ---................................FF...........--- + ---.............................FF..............--- + ---..........................FF.................--- + ---.......................FF....................--- + ---....................FF.......................--- + ---.................FF..........................--- + ---..............FF.............................--- + ---...........FF................................---- + ---........FF...................................--- + ---.....FF......................................--- + ---.............................................-- + ---............................................| + ---------------------------------------------- +ENDMAP + +REGION:(01,01,73,16),lit,"ordinary" + +STAIR:random,up +STAIR:random,down + +NON_DIGGABLE:(00,00,74,17) + +LOOP [15] { + OBJECT:random,random +} +LOOP [6] { + TRAP:random,random +} +LOOP [28] { + MONSTER:random,random +} + + + +# The Eye + +LEVEL:"bigrm-9" +FLAGS:mazelevel +GEOMETRY:center,center +MAP +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}................}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}}}}}}}................................}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}............................................}}}}}}}}}}}}}}} +}}}}}}}}}}......................................................}}}}}}}}}} +}}}}}}}............................................................}}}}}}} +}}}}}.......................LLLLLLLLLLLLLLLLLL.......................}}}}} +}}}....................LLLLLLLLLLLLLLLLLLLLLLLLLLL.....................}}} +}....................LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL....................} +}....................LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL....................} +}....................LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL....................} +}}}....................LLLLLLLLLLLLLLLLLLLLLLLLLLL.....................}}} +}}}}}.......................LLLLLLLLLLLLLLLLLL.......................}}}}} +}}}}}}}............................................................}}}}}}} +}}}}}}}}}}......................................................}}}}}}}}}} +}}}}}}}}}}}}}}}............................................}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}}}}}}}................................}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}................}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +ENDMAP + +# Unlit, except 3 mapgrids around the "pupil" +REGION:(00,00,73,18),unlit,"ordinary" +REGION:(26,04,47,14),lit,"ordinary" +REGION:(21,05,51,13),lit,"ordinary" +REGION:(19,06,54,12),lit,"ordinary" + +STAIR:random,up +STAIR:random,down + +LOOP [15] { + OBJECT:random,random +} +LOOP [6] { + TRAP:random,random +} +LOOP [28] { + MONSTER:random,random +} + + +# Fog Maze + +LEVEL:"bigrm-10" +FLAGS:mazelevel +GEOMETRY:center,center +MAP +....................................................................... +....................................................................... +....................................................................... +....................................................................... +...C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C... +...CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC... +...C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C... +...CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC... +...C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C... +...CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC... +...C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C... +...CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC... +...C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C... +...CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC... +...C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C... +....................................................................... +....................................................................... +....................................................................... +....................................................................... +ENDMAP + +REGION:(00,00,70,18),lit,"ordinary" + +# when falling down on this level, never end up in the fog maze +TELEPORT_REGION:(00,00,70,18),(02,03,68,15),down + +LOOP [15] { + OBJECT:random,random +} +LOOP [6] { + TRAP:random,random +} +LOOP [28] { + MONSTER:random,random +} + +MAZEWALK:(4, 2), south + +# Stairs up, not in the fog maze +STAIR:(00,00,70,18),(02,03,68,15),up +STAIR:random,down + diff --git a/dat/dungeon.def b/dat/dungeon.def index bccd31b85..093dbbdae 100644 --- a/dat/dungeon.def +++ b/dat/dungeon.def @@ -24,10 +24,10 @@ LEVELDESC: roguelike LEVEL: "oracle" "O" @ (5, 5) LEVALIGN: neutral CHAINBRANCH: "Sokoban" "oracle" + (1, 0) up -RNDLEVEL: "bigrm" "B" @ (10, 3) 40 5 +RNDLEVEL: "bigrm" "B" @ (10, 3) 40 10 CHAINBRANCH: "The Quest" "oracle" + (6, 2) portal BRANCH: "Fort Ludios" @ (18, 4) portal -RNDLEVEL: "medusa" "none" @ (-5, 4) 2 +RNDLEVEL: "medusa" "none" @ (-5, 4) 4 LEVALIGN: chaotic LEVEL: "castle" "none" @ (-1, 0) CHAINBRANCH: "Gehennom" "castle" + (0, 0) no_down diff --git a/dat/gehennom.des b/dat/gehennom.des index 7ae2a9df4..470d0dea0 100644 --- a/dat/gehennom.des +++ b/dat/gehennom.des @@ -163,43 +163,43 @@ INIT_MAP:mines,'.','}',true,true,unlit,false # guarantee at least one open spot to ensure successful stair placement GEOMETRY:left,bottom MAP -}}}}}}}} -}}...}}} -}}}...}} -}}}}.}}} -}}}}}}}} +xxxxxxxx +xx...xxx +xxx...xx +xxxx.xxx +xxxxxxxx ENDMAP OBJECT:('`',"boulder"),random GEOMETRY:right,top MAP -}}}}}}}} -}}}}.}}} -}}}...}} -}}...}}} -}}}}}}}} +xxxxxxxx +xxxx.xxx +xxx...xx +xx...xxx +xxxxxxxx ENDMAP OBJECT:('`',"boulder"),random # lair GEOMETRY:center,center MAP -..}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.. -.}}}.}}}}}..}}}..}}}}}..}}}..}}}}}..}}}..}}}}}.}}}. +xx}}}}}x}}}}}x}}}}}x}}}}}x}}}}}x}}}}}x}}}}}x}}}}}xx +x}}}.}}}}}..}}}..}}}}}..}}}..}}}}}..}}}..}}}}}.}}}x }}}...}}..}}.}.}}.}}.}}}...}}}.}}}..}}}..}}}}...}}} -.}}}.}}.}}}.}}.}}.}}...}}.}}.....}}.....}....}.}}}. -..}}}..}}}.}}.}}.}}..}}.....}}.}}}.}}.}}}}}}}}}}}.. -.}}}..}}}}}.}}.}}.}}...}}}}}.....}}.}}}}}}.....}}}. +x}}}.}}.}}}.}}.}}.}}...}}.}}.....}}.....}....}.}}}x +xx}}}..}}}.}}.}}.}}..}}.....}}.}}}.}}.}}}}}}}}}}}xx +x}}}..}}}}}.}}.}}.}}...}}}}}.....}}.}}}}}}.....}}}x }}}..}}...}}..}}.}}}.}}}...}}}.}}}.}.}}}}..P.P..}}} }}.}}}}...}}}}}.}...}}}..P..}}}.}.}}}.}}}}.....}}}} -}.}}}}.}}.}..}.}}}}}}}..P.P..}}}.}}}.}}..}}...}}}}. -.}}}}.}}}}....}}}}}.}}}..P..}}}.}}}}.}}..}}...}}}.} +}.}}}}.}}.}..}.}}}}}}}..P.P..}}}.}}}.}}..}}...}}}}x +x}}}}.}}}}....}}}}}.}}}..P..}}}.}}}}.}}..}}...}}}.} }}}}..}}.}}..}}}}...}}}}...}}}.}}}}}.}}}}.}}}}}}.}} }}}...}}...}}}..}}}}}}}}}}}}.....}}}}.}}...}..}.}}} -.}}}..}}.}}}}....}}..}}}..}}.....}}}}.}}}.}....}}}. -..}}}.}}}}..}}..}}..}}..}}..}}.}}}..}.}..}}}..}}}.. -.}}}.}}}}....}}}}..}}....}}}}}}}...}}}....}}}}.}}}. +x}}}..}}.}}}}....}}..}}}..}}.....}}}}.}}}.}....}}}x +xx}}}.}}}}..}}..}}..}}..}}..}}.}}}..}.}..}}}..}}}xx +x}}}.}}}}....}}}}..}}....}}}}}}}...}}}....}}}}.}}}x }}}...}}}....}}}..}}}....}}}..}}...}}}....}}}...}}} -.}}}.}}}}}..}}}..}}}}}..}}}..}}}}}..}}}..}}}}}.}}}. -..}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.. +x}}}.}}}}}..}}}..}}}}}..}}}..}}}}}..}}}..}}}}}.}}}x +xx}}}}}x}}}}}x}}}}}x}}}}}x}}}}}x}}}}}x}}}}}x}}}}}xx ENDMAP # Random registers $monster = monster: { 'j','b','P','F' } @@ -502,8 +502,8 @@ TRAP:"magic", random # # The Baalzebub level # -MAZE:"baalz",random -FLAGS: noteleport +MAZE:"baalz",' ' +FLAGS: noteleport,corrmaze GEOMETRY:right,center MAP ------------------------------------------------- @@ -561,6 +561,10 @@ MONSTER:'V',random # MAZE:"sanctum", ' ' FLAGS: noteleport,hardfloor,nommap +# This is outside the main map, below, so we must do it before adding +# that map and anchoring coordinates to it. This extends the invisible +# barrier up to the top row, which falls outside the drawn map. +NON_PASSWALL:(39,00,41,00) GEOMETRY:center,center MAP ---------------------------------------------------------------------------- diff --git a/dat/medusa.des b/dat/medusa.des index 48720d3ba..0f8c9d26f 100644 --- a/dat/medusa.des +++ b/dat/medusa.des @@ -217,3 +217,202 @@ MONSTER:random,random MONSTER:random,random MONSTER:random,random MONSTER:random,random + + +LEVEL:"medusa-3" +FLAGS: noteleport,mazelevel +INIT_MAP:solidfill,' ' +GEOMETRY:center,center +# +# Here you disturb ravens nesting in the trees. +# +MAP +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}.}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}.}}}}}}}}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}T..T.}}}}}}}}}}}}}}}}}}}}..}}}}}}}}.}}}...}}}}}}}.}}}}}......}}}}}}} +}}}}}}.......T.}}}}}}}}}}}..}}}}..T.}}}}}}...T...T..}}...T..}}..-----..}}}}} +}}}...-----....}}}}}}}}}}.T..}}}}}...}}}}}.....T..}}}}}......T..|...|.T..}}} +}}}.T.|...|...T.}}}}}}}.T......}}}}..T..}}.}}}.}}...}}}}}.T.....+...|...}}}} +}}}}..|...|.}}.}}}}}.....}}}T.}}}}.....}}}}}}.T}}}}}}}}}}}}}..T.|...|.}}}}}} +}}}}}.|...|.}}}}}}..T..}}}}}}}}}}}}}T.}}}}}}}}..}}}}}}}}}}}.....-----.}}}}}} +}}}}}.--+--..}}}}}}...}}}}}}}}}}}}}}}}}}}T.}}}}}}}}}}}}}}}}.T.}........}}}}} +}}}}}.......}}}}}}..}}}}}}}}}.}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}.}}}.}}.T.}}}}}} +}}.T...T...}}}}T}}}}}}}}}}}....}}}}}}}}}}T}}}}}.T}}...}}}}}}}}}}}}}}...}}}}} +}}}...T}}}}}}}..}}}}}}}}}}}.T...}}}}}}}}.T.}.T.....T....}}}}}}}}}}}}}.}}}}}} +}}}}}}}}}}}}}}}....}}}}}}}...}}.}}}}}}}}}}............T..}}}}}.T.}}}}}}}}}}} +}}}}}}}}}}}}}}}}..T..}}}}}}}}}}}}}}..}}}}}..------+--...T.}}}....}}}}}}}}}}} +}}}}.}..}}}}}}}.T.....}}}}}}}}}}}..T.}}}}.T.|...|...|....}}}}}.}}}}}...}}}}} +}}}.T.}...}..}}}}T.T.}}}}}}.}}}}}}}....}}...|...+...|.}}}}}}}}}}}}}..T...}}} +}}}}..}}}.....}}...}}}}}}}...}}}}}}}}}}}}}T.|...|...|}}}}}}}}}}}....T..}}}}} +}}}}}..}}}.T..}}}.}}}}}}}}.T..}}}}}}}}}}}}}}---S-----}}}}}}}}}}}}}....}}}}}} +}}}}}}}}}}}..}}}}}}}}}}}}}}}.}}}}}}}}}}}}}}}}}T..T}}}}}}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +ENDMAP +$place = { (08,06),(66,05),(46,15) } +SHUFFLE: $place +REGION:(00,00,74,19),lit,"ordinary" +REGION:(49,14,51,16),random,"ordinary",unfilled +REGION:(07,05,09,07),unlit,"ordinary" +REGION:(65,04,67,06),unlit,"ordinary" +REGION:(45,14,47,16),unlit,"ordinary" +# Non diggable walls +# 4th room has diggable walls as Medusa is never placed there +NON_DIGGABLE:(06,04,10,08) +NON_DIGGABLE:(64,03,68,07) +NON_DIGGABLE:(44,13,48,17) +# All places are accessible also with jumping, so don't bother +# restricting the placement when teleporting from levels below this. +TELEPORT_REGION:(33,02,38,07),(0,0,0,0),down +STAIR:(32,01,39,07),(0,0,0,0),up +STAIR:$place[0],down +DOOR:locked,(08,08) +DOOR:locked,(64,05) +DOOR:random,(50,13) +DOOR:locked,(48,15) +# +FOUNTAIN:$place[1] +# +CONTAINER:('`',"statue"),$place[2],uncursed,montype:"knight",3,name:"Perseus" { + [75%]: OBJECT: ('[',"shield of reflection"),cursed,+0 + [25%]: OBJECT: ('[',"levitation boots"),+0 + [50%]: OBJECT: (')',"scimitar"),blessed,+2 + [50%]: OBJECT: ('(',"sack") +} +# +CONTAINER:('`',"statue"),random { } +CONTAINER:('`',"statue"),random { } +CONTAINER:('`',"statue"),random { } +CONTAINER:('`',"statue"),random { } +CONTAINER:('`',"statue"),random { } +CONTAINER:('`',"statue"),random { } +CONTAINER:('`',"statue"),random { } + +LOOP [8] { + OBJECT:random,random +} +OBJECT:('?',"blank paper"),(48,18) +OBJECT:('?',"blank paper"),(48,18) +# +TRAP:"rust",random +TRAP:"rust",random +TRAP:"board",random +TRAP:"board",random +TRAP:random,random +# +MONSTER:('@',"Medusa"),$place[0] +MONSTER:(';',"giant eel"),random +MONSTER:(';',"giant eel"),random +MONSTER:(';',"jellyfish"),random +MONSTER:(';',"jellyfish"),random +MONSTER:('n',"wood nymph"),random +MONSTER:('n',"wood nymph"),random +MONSTER:('n',"water nymph"),random +MONSTER:('n',"water nymph"),random + +LOOP [30] { + MONSTER:('B',"raven"),random,hostile +} + + +LEVEL:"medusa-4" +FLAGS: noteleport,mazelevel +INIT_MAP:solidfill,' ' +GEOMETRY:center,center +# +# Here the Medusa rules some slithery monsters from her 'palace', with +# a yellow dragon nesting in the backyard. +# +MAP +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}........}}}}}}}}}}}}}}}}}}}}}}}..}}}.....}}}}}}}}}}}----|}}}}} +}}}}}}..----------F-.....}}}}}}}}}}}}}}}}..---...}}}}....T.}}}}}}}....|}}}}} +}}}.....|...F......S}}}}....}}}}}}}...}}.....|}}.}}}}}}}......}}}}|......}}} +}}}.....+...|..{...|}}}}}}}}}}}}.....}}}}|...|}}}}}}}}}}}.}}}}}}}}----.}}}}} +}}......|...|......|}}}}}}}}}......}}}}}}|.......}}}}}}}}}}}}}..}}}}}...}}}} +}}|-+--F|-+--....|F|-|}}}}}....}}}....}}}-----}}.....}}}}}}}......}}}}.}}}}} +}}|...}}|...|....|}}}|}}}}}}}..}}}}}}}}}}}}}}}}}}}}....}}}}}}}}....T.}}}}}}} +}}|...}}F...+....F}}}}}}}..}}}}}}}}}}}}}}...}}}}}}}}}}}}}}}}}}}}}}....}}..}} +}}|...}}|...|....|}}}|}....}}}}}}....}}}...}}}}}...}}}}}}}}}}}}}}}}}.....}}} +}}--+--F|-+--....-F|-|....}}}}}}}}}}.T...}}}}....---}}}}}}}}}}}}}}}}}}}}}}}} +}}......|...|......|}}}}}.}}}}}}}}}....}}}}}}}.....|}}}}}}}}}.}}}}}}}}}}}}}} +}}}}....+...|..{...|.}}}}}}}}}}}}}}}}}}}}}}}}}}.|..|}}}}}}}......}}}}...}}}} +}}}}}}..|...F......|...}}}}}}}}}}..---}}}}}}}}}}--.-}}}}}....}}}}}}....}}}}} +}}}}}}}}-----S----F|....}}}}}}}}}|...|}}}}}}}}}}}}...}}}}}}...}}}}}}..}}}}}} +}}}}}}}}}..............T...}}}}}.|.......}}}}}}}}}}}}}}..}...}.}}}}....}}}}} +}}}}}}}}}}....}}}}...}...}}}}}.......|.}}}}}}}}}}}}}}.......}}}}}}}}}...}}}} +}}}}}}}}}}..}}}}}}}}}}.}}}}}}}}}}-..--.}}}}}}}}..}}}}}}..T...}}}..}}}}}}}}}} +}}}}}}}}}...}}}}}}}}}}}}}}}}}}}}}}}...}}}}}}}....}}}}}}}.}}}..}}}...}}}}}}}} +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}.}}}}}}....}}}}}}}}}}}}}}}}}}}...}}}}}} +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +ENDMAP +# +$place = { (04,08),(10,04),(10,08),(10,12) } +SHUFFLE: $place +# +REGION:(00,00,74,19),lit,"ordinary" +REGION:(13,03,18,13),lit,"ordinary",unfilled +# +TELEPORT_REGION:(64,01,74,17),(0,0,0,0),down +TELEPORT_REGION:(02,02,18,13),(0,0,0,0),up +# +STAIR:(67,01,74,20),(0,0,0,0),up +STAIR:$place[0],down +# +DOOR:locked,(04,06) +DOOR:locked,(04,10) +DOOR:locked,(08,04) +DOOR:locked,(08,12) +DOOR:locked,(10,06) +DOOR:locked,(10,10) +DOOR:locked,(12,08) +# +BRANCH:levregion(27,00,79,20),(0,0,0,0) +# +NON_DIGGABLE:(01,01,22,14) +# +OBJECT:('(',"crystal ball"),(07,08) +# +CONTAINER:('`',"statue"),$place[1],uncursed,montype:"knight",3,name:"Perseus" { + [75%]: OBJECT: ('[',"shield of reflection"),cursed,+0 + [25%]: OBJECT: ('[',"levitation boots"),+0 + [50%]: OBJECT: (')',"scimitar"),blessed,+2 + [50%]: OBJECT: ('(',"sack") +} +# +CONTAINER:('`',"statue"),random { } +CONTAINER:('`',"statue"),random { } +CONTAINER:('`',"statue"),random { } +CONTAINER:('`',"statue"),random { } +CONTAINER:('`',"statue"),random { } +CONTAINER:('`',"statue"),random { } +CONTAINER:('`',"statue"),random { } +LOOP [8] { + OBJECT:random,random +} +# +LOOP [7] { + TRAP:random,random +} +# +MONSTER:('@',"Medusa"),$place[0] +MONSTER:(';',"kraken"),(07,07) +# +# the nesting dragon +MONSTER:('D',"yellow dragon"), (05,04), asleep +[50%]: MONSTER: ('D',"baby yellow dragon"), (04,04), asleep +[25%]: MONSTER: ('D',"baby yellow dragon"), (04,05), asleep +OBJECT:('%',"egg"), (05,04), montype:"yellow dragon" +[50%]: OBJECT: ('%',"egg"), (05,04), montype:"yellow dragon" +[25%]: OBJECT: ('%',"egg"), (05,04), montype:"yellow dragon" +# +MONSTER:(';',"giant eel"),random +MONSTER:(';',"giant eel"),random +MONSTER:(';',"jellyfish"),random +MONSTER:(';',"jellyfish"),random +LOOP [14] { + MONSTER:'S',random +} +LOOP [4] { + MONSTER:('N',"black naga hatchling"), random + MONSTER:('N',"black naga"), random +} diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index 4293fdb3e..66b27f5bf 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -1952,6 +1952,8 @@ new players if it detects some anticipated mistakes (default on). .lp "confirm " Have user confirm attacks on pets, shopkeepers, and other peaceable creatures (default on). +.lp dark_room +Show out-of-sight areas of lit rooms (default off). .lp disclose Controls what information the program reveals when the game ends. Value is a space separated list of prompting/category pairs @@ -2051,6 +2053,9 @@ An obsolete synonym for ``gender:male''. Cannot be set with the `O' command. .lp mention_walls Give feedback when walking against a wall (default off). +.lp menucolors +Enable coloring menu lines (default off). +See ``Configuring Menu Colors'' on how to configure the colors. .lp menustyle Controls the interface used when you need to choose various objects (in response to the Drop command, for instance). The value specified should @@ -2321,6 +2326,19 @@ the appearance of the display, not the way the game treats you. Show your approximate accumulated score on bottom line (default off). .lp "silent " Suppress terminal beeps (default on). +.lp sortloot +Controls the sorting behavior of the pickup lists for inventory +and #loot commands and some others. +The possible values are: +.PS full +.PL full +always sort the lists; +.PL loot +only sort the lists that don't use inventory letters, like with +the #loot and pickup commands; +.PL none +show lists the traditional way without sorting. +.PE .lp sortpack Sort the pack contents by type when displaying inventory (default on). .lp sparkle @@ -2604,6 +2622,56 @@ The second example results in the exclusion of any corpse from autopickup. The last example results in the exclusion of items known to be cursed from autopickup. .hn 2 +Configuring Menu Colors +.pg +Some platforms allow you to define colors used in menu lines when the +line matches a user-defined pattern. At this time the tty, win32tty and +win32gui support this. +.pg +In general, the config file entries to configure the menu color mappings +look like this: +.si +.lp MENUCOLOR="pattern"=color&attribute +.ei +.PS "menu color" +.PL pattern +the pattern to match; +.PL color +the color to use for lines matching the pattern; +.PL attribute +the attribute to use for lines matching the pattern. The attribute is +optional, and if left out, you must also leave out the preceding ampersand. +If no attribute is defined, no attribute is used. +.PE +.lp "" +For explanation on pattern format and the matching routines, see +the pattern in the ``Configuring User Sounds'' -section. +.lp "" +Allowed colors are black, red, green, brown, blue, magenta, cyan, gray, +orange, lightgreen, yellow, lightblue, lightmagenta, lightcyan, and white. +.lp "" +Allowed attributes are none, bold, dim, underline, blink, and inverse. +Note that the platform used may interpret the attributes any way it +wants. +.lp "" +Here's an example of menu colors using NetHack's internal +pattern matching facility: +.sd +.si +MENUCOLOR="* blessed *"=green +MENUCOLOR="* cursed *"=red +MENUCOLOR="* cursed *(being worn)"=red&underline +.ei +.ed +specifies that any menu line with " blessed " contained +in it will be shown in green color, lines with " cursed " will be +shown in red, and lines with " cursed " followed by "(being worn)" +on the same line will be shown in red color and underlined. +You can have multiple MENUCOLOR entries in your config file, +and the last MENUCOLOR-line in your config file that matches +a menu line will be used for the line. +.pg +.hn 2 Configuring User Sounds .pg Some platforms allow you to define sound files to be played when a message @@ -2784,6 +2852,7 @@ O S_ogre (ogre) o S_orc (orc) p S_piercer (piercer) ^ S_pit (pit) +# S_poisoncloud (poison cloud) ^ S_polymorph_trap (polymorph trap) } S_pool (water) ! S_potion (potion) diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index 5f1ae5e4b..ae3cfa8a7 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -2363,6 +2363,9 @@ players if it detects some anticipated mistakes (default on). Have user confirm attacks on pets, shopkeepers, and other peaceable creatures (default on). %.lp +%.lp +\item[\ib{dark\_room}] +Show out-of-sight areas of lit rooms (default off). \item[\ib{disclose}] Controls what information the program reveals when the game ends. Value is a space separated list of prompting/category pairs @@ -2479,6 +2482,10 @@ An obsolete synonym for ``{\tt gender:male}''. Cannot be set with the \item[\ib{mention\_walls}] Give feedback when walking against a wall (default off). %.lp +\item[\ib{menucolors}] +Enable coloring menu lines (default off). +See ``{\it Configuring Menu Colors\/}'' on how to configure the colors. +%.lp \item[\ib{menustyle}] Controls the interface used when you need to choose various objects (in response to the Drop command, for instance). The value specified should @@ -2785,6 +2792,20 @@ Show your approximate accumulated score on bottom line (default off). \item[\ib{silent}] Suppress terminal beeps (default on). %.lp +\item[\ib{sortloot}] +Controls the sorting behavior of pickup lists for inventory +and \#loot commands and some others. + +The possible values are: +%.sd +%.si +{\tt full} --- always sort the lists;\\ +{\tt loot} --- only sort the lists that don't use inventory + letters, like with the \#loot and pickup commands;\\ +{\tt none} --- show lists the traditional way without sorting. +%.ei +%.ed +%.lp \item[\ib{sortpack}] Sort the pack contents by type when displaying inventory (default on). %.lp @@ -3141,6 +3162,71 @@ The second example results in the exclusion of any corpse from autopickup. The last example results in the exclusion of items known to be cursed from autopickup. +%.lp +%.hn 2 +\subsection*{Configuring Menu Colors} + +%.pg +Some platforms allow you to define colors used in menu lines when the +line matches a user-defined pattern. At this time the tty, win32tty and +win32gui support this. + +%.pg +In general, the config file entries to configure the menu color mappings +look like this: +\begin{verbatim} + MENUCOLOR="pattern"=color&attribute +\end{verbatim} + +\blist{} +%.lp +\item[\ib{pattern}] +the pattern to match; +%.lp +\item[\ib{color}] +the color to use for lines matching the pattern; +%.lp +\item[\ib{attribute}] +the attribute to use for lines matching the pattern. The attribute is +optional, and if left out, you must also leave out the preceding ampersand. +If no attribute is defined, no attribute is used. +\elist + +%.lp "" +For explanation on pattern format and the matching routines, see +the pattern in the {\it Configuring User Sounds} -section. + +%.lp "" +Allowed colors are {\it black}, {\it red}, {\it green}, {\it brown}, +{\it blue}, {\it magenta}, {\it cyan}, {\it gray}, {\it orange}, +{\it lightgreen}, {\it yellow}, {\it lightblue}, {\it lightmagenta}, +{\it lightcyan}, and {\it white}. + +%.lp "" +Allowed attributes are {\it none}, {\it bold}, {\it dim}, {\it underline}, +{\it blink}, and {\it inverse}. +Note that the platform used may interpret the attributes any way it +wants. + +%.lp "" +Here's an example of menu colors using NetHack's internal +pattern matching facility: + +\begin{verbatim} + MENUCOLOR="* blessed *"=green + MENUCOLOR="* cursed *"=red + MENUCOLOR="* cursed *(being worn)"=red&underline +\end{verbatim} + +specifies that any menu line with " blessed " contained +in it will be shown in green color, lines with " cursed " will be +shown in red, and lines with " cursed " followed by "(being worn)" +on the same line will be shown in red color and underlined. +You can have multiple MENUCOLOR entries in your config file, +and the last MENUCOLOR-line in your config file that matches +a menu line will be used for the line. +%.pg + %.lp %.hn 2 \subsection*{Configuring User Sounds} @@ -3343,6 +3429,7 @@ Default & Symbol Name & Description\\ \verb@o@ & S\_orc & (orc)\\ \verb@p@ & S\_piercer & (piercer)\\ \verb@^@ & S\_pit & (pit)\\ +\verb@#@ & S\_poisoncloud & (poison cloud)\\ \verb@^@ & S\_polymorph\_trap & (polymorph trap)\\ \verb@}@ & S\_pool & (water)\\ \verb@!@ & S\_potion & (potion)\\ diff --git a/doc/fixes35.0 b/doc/fixes35.0 index a13f955c4..6a3e06d37 100644 --- a/doc/fixes35.0 +++ b/doc/fixes35.0 @@ -887,13 +887,13 @@ show object symbols in menu headings in menus where those object symbols act as menu accelerators, toggleable via "menu_objsyms" option show t-shirt text at end of game inventory disclose hitting with a polearm remembers the position of the last monster you hit -allow showing legal polearm positions when asked for location to hit add messages for trying to pick up some terrain features boomerang makes noise when hitting a sink non-pet rust monsters would eat rust-proofed non-digestibles but ignore those non-digestibles otherwise kicking a grave may topple the gravestone -allow showing legal jumping positions when asked for location to jump to +allow showing legal positions for stinking cloud, jumping and polearms + when asked for a location cloned creatures (of any type) don't deathdrop items pudding corpses behave somewhat differently than before @@ -1114,6 +1114,7 @@ show more explicit reason why player was helpless at death added new hallucinatory-only gods options to create the character blind or nudist moving clouds on the plane of air +disclose extinct species alongside genocided ones Platform- and/or Interface-Specific New Features @@ -1134,6 +1135,7 @@ smartphone: added "Type Cmd" command that allows to type arbitrary commands smartphone: added Q(quiver) command to "Attack" layout smartphone: fixed F command to prompt for direction unix,vms: altmeta option to handle terminals which send "ESC c" for Alt+c +tty,win32gui,win32tty: add menucolors NetHack Community Patches (or Variation) Included @@ -1152,6 +1154,8 @@ adopt/adapt/improve the Paranoid_Quit patch; default is paranoid_confirm:pray adopt/adapt/improve Dungeon Overview Aardvark Joe's Extended Logfile Michael Deutschmann's use_darkgray +Clive Crous' dark_room +sortloot by Jeroen Demeyer and Jukka Lahtinen Code Cleanup and Reorganization diff --git a/include/color.h b/include/color.h index ab6fe0462..f7bec4a08 100644 --- a/include/color.h +++ b/include/color.h @@ -7,6 +7,10 @@ #ifndef COLOR_H #define COLOR_H +#ifdef MENU_COLOR_REGEX +#include +#endif + /* * The color scheme used is tailored for an IBM PC. It consists of the * standard 8 colors, folowed by their bright counterparts. There are @@ -51,4 +55,18 @@ #define DRAGON_SILVER CLR_BRIGHT_CYAN #define HI_ZAP CLR_BRIGHT_BLUE +struct menucoloring { +# ifdef MENU_COLOR_REGEX +# ifdef MENU_COLOR_REGEX_POSIX + regex_t match; +# else + struct re_pattern_buffer match; +# endif +# else + char *match; +# endif + int color, attr; + struct menucoloring *next; +}; + #endif /* COLOR_H */ diff --git a/include/config.h b/include/config.h index d8c96af14..fbe4704ae 100644 --- a/include/config.h +++ b/include/config.h @@ -416,7 +416,6 @@ typedef unsigned char uchar; /* display features */ /* dungeon features */ /* dungeon levels */ -#define WALLIFIED_MAZE /* Fancy mazes - Jean-Christophe Collet */ /* monsters & objects */ /* I/O */ #if !defined(MAC) @@ -437,6 +436,14 @@ typedef unsigned char uchar; * bugs left here. */ +/* Menucolors */ +# define MENU_COLOR_REGEX /* use GNU regex */ +/*# define MENU_COLOR_REGEX_POSIX*/ /* use POSIX regex */ +/* if neither is defined, uses pmatch() + * pmatch() provides basic globbing: '*' and '?' wildcards. + */ + + #define STATUS_VIA_WINDOWPORT /* re-work of the status line updating process */ #define STATUS_HILITES /* support hilites of status fields */ /* #define WINCHAIN*/ /* stacked window systems */ diff --git a/include/extern.h b/include/extern.h index faff62ce6..9df1a8ece 100644 --- a/include/extern.h +++ b/include/extern.h @@ -743,6 +743,7 @@ E boolean NDECL(recover_savefile); #ifdef SYSCF_FILE E void NDECL(assure_syscf_file); #endif +E int FDECL(nhclose, (int)); #ifdef HOLD_LOCKFILE_OPEN E void NDECL(really_close); #endif @@ -856,6 +857,8 @@ E int NDECL(midnight); /* ### invent.c ### */ +E struct obj **FDECL(objarr_init, (int)); +E void FDECL(objarr_set, (struct obj *, int, struct obj **, BOOLEAN_P)); E void FDECL(assigninvlet, (struct obj *)); E struct obj *FDECL(merge_choice, (struct obj *,struct obj *)); E int FDECL(merged, (struct obj **,struct obj **)); @@ -1158,6 +1161,7 @@ E boolean FDECL(bad_location, (XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P)) E void FDECL(place_lregion, (XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P, XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P, XCHAR_P,d_level *)); +E void NDECL(fumaroles); E void NDECL(movebubbles); E void NDECL(water_friction); E void FDECL(save_waterlevel, (int,int)); @@ -1525,6 +1529,7 @@ E char *FDECL(doname, (struct obj *)); E boolean FDECL(not_fully_identified, (struct obj *)); E char *FDECL(corpse_xname, (struct obj *,const char *,unsigned)); E char *FDECL(cxname, (struct obj *)); +E char *FDECL(cxname_singular, (struct obj *)); E char *FDECL(killer_xname, (struct obj *)); E char *FDECL(short_oname, (struct obj *,char *(*)(OBJ_P),char *(*)(OBJ_P), unsigned)); @@ -1587,6 +1592,9 @@ E void FDECL(parsesymbols, (char *)); E struct symparse *FDECL(match_sym, (char *)); E void NDECL(set_playmode); E int FDECL(sym_val, (char *)); +E boolean FDECL(add_menu_coloring, (char *)); +E boolean FDECL(get_menu_coloring, (char *, int *, int *)); +E void NDECL(free_menu_coloring); /* ### pager.c ### */ diff --git a/include/flag.h b/include/flag.h index 9eb7a68c6..dc58375e4 100644 --- a/include/flag.h +++ b/include/flag.h @@ -23,6 +23,7 @@ struct flag { boolean biff; /* enable checking for mail */ boolean bones; /* allow saving/loading bones */ boolean confirm; /* confirm before hitting tame monsters */ + boolean dark_room; /* show shadows in lit rooms */ boolean debug; /* in debugging mode */ #define wizard flags.debug boolean end_own; /* list all own scores */ @@ -47,6 +48,7 @@ struct flag { boolean showexp; /* show experience points */ boolean showscore; /* show score */ boolean silent; /* whether the bell rings or not */ + boolean sortloot; /* sort items alphabetically when looting */ boolean sortpack; /* sorted inventory */ boolean sparkle; /* show "resisting" special FX (Scott Bigham) */ boolean standout; /* use standout for --More-- */ @@ -201,6 +203,7 @@ struct instance_flags { boolean rlecomp; /* run-length comp of levels when writing savefile */ uchar num_pad_mode; boolean echo; /* 1 to echo characters */ + boolean use_menu_color; /* use color in menus; only if wc_color */ #if 0 boolean DECgraphics; /* use DEC VT-xxx extended character set */ boolean IBMgraphics; /* use IBM extended character set */ diff --git a/include/rm.h b/include/rm.h index 00f0bc4c5..760eeeb81 100644 --- a/include/rm.h +++ b/include/rm.h @@ -128,97 +128,102 @@ #define S_bars 17 /* KMH -- iron bars */ #define S_tree 18 /* KMH */ #define S_room 19 -#define S_corr 20 -#define S_litcorr 21 -#define S_upstair 22 -#define S_dnstair 23 -#define S_upladder 24 -#define S_dnladder 25 -#define S_altar 26 -#define S_grave 27 -#define S_throne 28 -#define S_sink 29 -#define S_fountain 30 -#define S_pool 31 -#define S_ice 32 -#define S_lava 33 -#define S_vodbridge 34 -#define S_hodbridge 35 -#define S_vcdbridge 36 /* closed drawbridge, vertical wall */ -#define S_hcdbridge 37 /* closed drawbridge, horizontal wall */ -#define S_air 38 -#define S_cloud 39 -#define S_water 40 +#define S_darkroom 20 +#define S_corr 21 +#define S_litcorr 22 +#define S_upstair 23 +#define S_dnstair 24 +#define S_upladder 25 +#define S_dnladder 26 +#define S_altar 27 +#define S_grave 28 +#define S_throne 29 +#define S_sink 30 +#define S_fountain 31 +#define S_pool 32 +#define S_ice 33 +#define S_lava 34 +#define S_vodbridge 35 +#define S_hodbridge 36 +#define S_vcdbridge 37 /* closed drawbridge, vertical wall */ +#define S_hcdbridge 38 /* closed drawbridge, horizontal wall */ +#define S_air 39 +#define S_cloud 40 +#define S_water 41 /* end dungeon characters, begin traps */ -#define S_arrow_trap 41 -#define S_dart_trap 42 -#define S_falling_rock_trap 43 -#define S_squeaky_board 44 -#define S_bear_trap 45 -#define S_land_mine 46 -#define S_rolling_boulder_trap 47 -#define S_sleeping_gas_trap 48 -#define S_rust_trap 49 -#define S_fire_trap 50 -#define S_pit 51 -#define S_spiked_pit 52 -#define S_hole 53 -#define S_trap_door 54 -#define S_teleportation_trap 55 -#define S_level_teleporter 56 -#define S_magic_portal 57 -#define S_web 58 -#define S_statue_trap 59 -#define S_magic_trap 60 -#define S_anti_magic_trap 61 -#define S_polymorph_trap 62 +#define S_arrow_trap 42 +#define S_dart_trap 43 +#define S_falling_rock_trap 44 +#define S_squeaky_board 45 +#define S_bear_trap 46 +#define S_land_mine 47 +#define S_rolling_boulder_trap 48 +#define S_sleeping_gas_trap 49 +#define S_rust_trap 50 +#define S_fire_trap 51 +#define S_pit 52 +#define S_spiked_pit 53 +#define S_hole 54 +#define S_trap_door 55 +#define S_teleportation_trap 56 +#define S_level_teleporter 57 +#define S_magic_portal 58 +#define S_web 59 +#define S_statue_trap 60 +#define S_magic_trap 61 +#define S_anti_magic_trap 62 +#define S_polymorph_trap 63 /* end traps, begin special effects */ -#define S_vbeam 63 /* The 4 zap beam symbols. Do NOT separate. */ -#define S_hbeam 64 /* To change order or add, see function */ -#define S_lslant 65 /* zapdir_to_glyph() in display.c. */ -#define S_rslant 66 -#define S_digbeam 67 /* dig beam symbol */ -#define S_flashbeam 68 /* camera flash symbol */ -#define S_boomleft 69 /* thrown boomerang, open left, e.g ')' */ -#define S_boomright 70 /* thrown boomerand, open right, e.g. '(' */ -#define S_ss1 71 /* 4 magic shield glyphs */ -#define S_ss2 72 -#define S_ss3 73 -#define S_ss4 74 +#define S_vbeam 64 /* The 4 zap beam symbols. Do NOT separate. */ +#define S_hbeam 65 /* To change order or add, see function */ +#define S_lslant 66 /* zapdir_to_glyph() in display.c. */ +#define S_rslant 67 +#define S_digbeam 68 /* dig beam symbol */ +#define S_flashbeam 69 /* camera flash symbol */ +#define S_boomleft 70 /* thrown boomerang, open left, e.g ')' */ +#define S_boomright 71 /* thrown boomerand, open right, e.g. '(' */ +#define S_ss1 72 /* 4 magic shield glyphs */ +#define S_ss2 73 +#define S_ss3 74 +#define S_ss4 75 +#define S_poisoncloud 76 +#define S_goodpos 77 /* valid position for targeting */ /* The 8 swallow symbols. Do NOT separate. To change order or add, see */ /* the function swallow_to_glyph() in display.c. */ -#define S_sw_tl 75 /* swallow top left [1] */ -#define S_sw_tc 76 /* swallow top center [2] Order: */ -#define S_sw_tr 77 /* swallow top right [3] */ -#define S_sw_ml 78 /* swallow middle left [4] 1 2 3 */ -#define S_sw_mr 79 /* swallow middle right [6] 4 5 6 */ -#define S_sw_bl 80 /* swallow bottom left [7] 7 8 9 */ -#define S_sw_bc 81 /* swallow bottom center [8] */ -#define S_sw_br 82 /* swallow bottom right [9] */ +#define S_sw_tl 78 /* swallow top left [1] */ +#define S_sw_tc 79 /* swallow top center [2] Order: */ +#define S_sw_tr 80 /* swallow top right [3] */ +#define S_sw_ml 81 /* swallow middle left [4] 1 2 3 */ +#define S_sw_mr 82 /* swallow middle right [6] 4 5 6 */ +#define S_sw_bl 83 /* swallow bottom left [7] 7 8 9 */ +#define S_sw_bc 84 /* swallow bottom center [8] */ +#define S_sw_br 85 /* swallow bottom right [9] */ -#define S_explode1 83 /* explosion top left */ -#define S_explode2 84 /* explosion top center */ -#define S_explode3 85 /* explosion top right Ex. */ -#define S_explode4 86 /* explosion middle left */ -#define S_explode5 87 /* explosion middle center /-\ */ -#define S_explode6 88 /* explosion middle right |@| */ -#define S_explode7 89 /* explosion bottom left \-/ */ -#define S_explode8 90 /* explosion bottom center */ -#define S_explode9 91 /* explosion bottom right */ +#define S_explode1 86 /* explosion top left */ +#define S_explode2 87 /* explosion top center */ +#define S_explode3 88 /* explosion top right Ex. */ +#define S_explode4 89 /* explosion middle left */ +#define S_explode5 90 /* explosion middle center /-\ */ +#define S_explode6 91 /* explosion middle right |@| */ +#define S_explode7 92 /* explosion bottom left \-/ */ +#define S_explode8 93 /* explosion bottom center */ +#define S_explode9 94 /* explosion bottom right */ /* end effects */ -#define MAXPCHARS 92 /* maximum number of mapped characters */ -#define MAXDCHARS 41 /* maximum of mapped dungeon characters */ +#define MAXPCHARS 95 /* maximum number of mapped characters */ +#define MAXDCHARS 42 /* maximum of mapped dungeon characters */ #define MAXTCHARS 22 /* maximum of mapped trap characters */ -#define MAXECHARS 29 /* maximum of mapped effects characters */ +#define MAXECHARS 31 /* maximum of mapped effects characters */ #define MAXEXPCHARS 9 /* number of explosion characters */ +#define DARKROOMSYM (Is_rogue_level(&u.uz) ? S_stone : S_darkroom) + struct symdef { uchar sym; const char *explanation; @@ -549,6 +554,8 @@ struct levelflags { Bitfield(wizard_bones,1); /* set if level came from a bones file which was created in wizard mode (or normal mode descendant of such) */ + Bitfield(corrmaze, 1); /* Whether corridors are used for the maze + rather than ROOM */ }; typedef struct diff --git a/include/sp_lev.h b/include/sp_lev.h index 3d4d961c6..badc3e97c 100644 --- a/include/sp_lev.h +++ b/include/sp_lev.h @@ -1,4 +1,4 @@ -/* NetHack 3.5 sp_lev.h $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ +/* NetHack 3.5 sp_lev.h $NHDT-Date: 1428655166 2015/04/10 08:39:26 $ $NHDT-Branch: master $:$NHDT-Revision: 1.10 $ */ /* NetHack 3.5 sp_lev.h $Date: 2009/05/06 10:45:06 $ $Revision: 1.5 $ */ /* SCCS Id: @(#)sp_lev.h 3.5 2007/08/01 */ /* Copyright (c) 1989 by Jean-Christophe Collet */ @@ -30,6 +30,7 @@ #define GRAVEYARD 0x00000100L #define ICEDPOOLS 0x00000200L /* for ice locations: ICED_POOL vs ICED_MOAT */ #define SOLIDIFY 0x00000400L /* outer areas are nondiggable & nonpasswall */ +#define CORRMAZE 0x00000800L /* for maze levels only */ /* different level layout initializers */ #define LVLINIT_NONE 0 @@ -470,4 +471,82 @@ struct lc_breakdef { int break_depth; }; +/* + * Quick! Avert your eyes while you still have a chance! + */ +#ifdef SPEC_LEV +/* compiling lev_comp rather than nethack */ +# ifdef USE_OLDARGS +# undef VA_ARGS +# undef VA_DECL +# undef VA_DECL2 +# undef VA_SHIFT +# define VA_ARGS arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,\ + arg10,arg11,arg12,arg13,arg14 +# define VA_DECL(typ1,var1) (var1,VA_ARGS) \ + typ1 var1; \ + char *arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9,\ + *arg10,*arg11,*arg12,*arg13,*arg14; { +# define VA_DECL2(typ1,var1,typ2,var2) (var1,var2,VA_ARGS) \ + typ1 var1; typ2 var2; \ + char *arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9,\ + *arg10,*arg11,*arg12,*arg13,*arg14; { + /* unlike in the core, lev_comp's VA_SHIFT is completely safe, + because callers always pass all these arguments */ +# define VA_SHIFT() (arg1=arg2, arg2=arg3, arg3=arg4, arg4=arg5,\ + arg5=arg6, arg6=arg7, arg7=arg8, arg8=arg9,\ + arg9=arg10, arg10=arg11, arg11=arg12,\ + arg12=arg13, arg13=arg14, arg14=0) + /* standard NULL may be either (void *)0 or plain 0, both of + which would need to be explicitly cast to (char *) here */ +typedef char *Va; +# define VA_PASS1(a1) (Va)a1, (Va)0,(Va)0,(Va)0,(Va)0,\ + (Va)0,(Va)0,(Va)0,(Va)0,(Va)0,\ + (Va)0,(Va)0,(Va)0,(Va)0 +# define VA_PASS2(a1,a2) (Va)a1, (Va)a2, (Va)0,(Va)0,(Va)0,\ + (Va)0,(Va)0,(Va)0,(Va)0,(Va)0,\ + (Va)0,(Va)0,(Va)0,(Va)0 +# define VA_PASS3(a1,a2,a3) (Va)a1, (Va)a2, (Va)a3, (Va)0,(Va)0,\ + (Va)0,(Va)0,(Va)0,(Va)0,(Va)0,\ + (Va)0,(Va)0,(Va)0,(Va)0 +# define VA_PASS4(a1,a2,a3,a4) (Va)a1, (Va)a2, (Va)a3, (Va)a4, (Va)0,\ + (Va)0,(Va)0,(Va)0,(Va)0,(Va)0,\ + (Va)0,(Va)0,(Va)0,(Va)0 +# define VA_PASS5(a1,a2,a3,a4,a5) \ + (Va)a1, (Va)a2, (Va)a3, (Va)a4, (Va)a5,\ + (Va)0,(Va)0,(Va)0,(Va)0,(Va)0,\ + (Va)0,(Va)0,(Va)0,(Va)0 +# define VA_PASS7(a1,a2,a3,a4,a5,a6,a7) \ + (Va)a1, (Va)a2, (Va)a3, (Va)a4, (Va)a5,\ + (Va)a6, (Va)a7, (Va)0,(Va)0,(Va)0,\ + (Va)0,(Va)0,(Va)0,(Va)0 +# define VA_PASS8(a1,a2,a3,a4,a5,a6,a7,a8) \ + (Va)a1, (Va)a2, (Va)a3, (Va)a4, (Va)a5,\ + (Va)a6, (Va)a7, (Va)a8, (Va)0,(Va)0,\ + (Va)0,(Va)0,(Va)0,(Va)0 +# define VA_PASS9(a1,a2,a3,a4,a5,a6,a7,a8,a9) \ + (Va)a1, (Va)a2, (Va)a3, (Va)a4, (Va)a5,\ + (Va)a6, (Va)a7, (Va)a8, (Va)a9, (Va)0,\ + (Va)0,(Va)0,(Va)0,(Va)0 +# define VA_PASS14(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14) \ + (Va)a1, (Va)a2, (Va)a3, (Va)a4, (Va)a5,\ + (Va)a6, (Va)a7, (Va)a8, (Va)a9, (Va)a10,\ + (Va)a11, (Va)a12, (Va)a13, (Va)a14 +# else /*!USE_OLDARGS*/ + /* USE_STDARG and USE_VARARGS don't need to pass dummy arguments + or cast real ones */ +# define VA_PASS1(a1) a1 +# define VA_PASS2(a1,a2) a1,a2 +# define VA_PASS3(a1,a2,a3) a1,a2,a3 +# define VA_PASS4(a1,a2,a3,a4) a1,a2,a3,a4 +# define VA_PASS5(a1,a2,a3,a4,a5) a1,a2,a3,a4,a5 +# define VA_PASS7(a1,a2,a3,a4,a5,a6,a7) a1,a2,a3,a4,a5,a6,a7 +# define VA_PASS8(a1,a2,a3,a4,a5,a6,a7,a8) a1,a2,a3,a4,a5,a6,a7,a8 +# define VA_PASS9(a1,a2,a3,a4,a5,a6,a7,a8,a9) a1,a2,a3,a4,a5,a6,a7,a8,a9 +# define VA_PASS14(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14) \ + a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 +# endif /*?USE_OLDARGS*/ +/* You were warned to avert your eyes.... */ +#endif /*SPEC_LEV*/ + #endif /* SP_LEV_H */ diff --git a/include/tradstdc.h b/include/tradstdc.h index dc75bc393..83b07f7ca 100644 --- a/include/tradstdc.h +++ b/include/tradstdc.h @@ -1,4 +1,4 @@ -/* NetHack 3.5 tradstdc.h $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ +/* NetHack 3.5 tradstdc.h $NHDT-Date: 1428655166 2015/04/10 08:39:26 $ $NHDT-Branch: master $:$NHDT-Revision: 1.19 $ */ /* NetHack 3.5 tradstdc.h $Date: 2012/01/11 18:23:26 $ $Revision: 1.15 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -95,10 +95,17 @@ # define VA_DECL(typ1,var1) (var1,VA_ARGS) typ1 var1; \ char *arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9; { # define VA_DECL2(typ1,var1,typ2,var2) (var1,var2,VA_ARGS) \ - typ1 var1; typ2 var2;\ + typ1 var1; typ2 var2; \ char *arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9; { # define VA_START(x) # define VA_INIT(var1,typ1) + /* this is inherently risky, and should only be attempted as a + very last resort; manipulating arguments which haven't actually + been passed may or may not cause severe trouble depending on + the function-calling/argument-passing mechanism being used */ +# define VA_SHIFT() (arg1=arg2, arg2=arg3, arg3=arg4, arg4=arg5,\ + arg5=arg6, arg6=arg7, arg7=arg8, arg8=arg9) +# define VA_NEXT(var1,typ1) ((var1 = (typ1)arg1), VA_SHIFT(), var1) # define VA_END() # endif #endif diff --git a/include/you.h b/include/you.h index a69fe4de3..11ba9079e 100644 --- a/include/you.h +++ b/include/you.h @@ -95,6 +95,7 @@ struct u_conduct { /* number of times... */ struct u_roleplay { boolean blind; /* permanently blind */ boolean nudist; /* has not worn any armor, ever */ + long numbones; /* # of bones files loaded */ }; /*** Unified structure containing role information ***/ diff --git a/src/allmain.c b/src/allmain.c index 5f5ab44c7..981358e77 100644 --- a/src/allmain.c +++ b/src/allmain.c @@ -294,6 +294,8 @@ boolean resuming; /* underwater and waterlevel vision are done here */ if (Is_waterlevel(&u.uz) || Is_airlevel(&u.uz)) movebubbles(); + else if (Is_firelevel(&u.uz)) + fumaroles(); else if (Underwater) under_water(0); /* vision while buried done here */ diff --git a/src/apply.c b/src/apply.c index 65482c337..40249be1f 100644 --- a/src/apply.c +++ b/src/apply.c @@ -37,6 +37,8 @@ STATIC_DCL boolean FDECL(figurine_location_checks, (struct obj *, coord *, BOOLEAN_P)); STATIC_DCL void FDECL(add_class, (char *, CHAR_P)); STATIC_DCL void FDECL(setapplyclasses, (char *)); +STATIC_DCL boolean FDECL(is_valid_jump_pos, (int, int, int, BOOLEAN_P)); +STATIC_DCL boolean FDECL(find_poleable_mon, (coord *, int, int)); #ifdef AMIGA void FDECL( amii_speaker, ( struct obj *, char *, int ) ); @@ -1394,14 +1396,15 @@ display_jump_positions(state) int state; { if (state == 0) { - tmp_at(DISP_BEAM, cmap_to_glyph(S_flashbeam)); + tmp_at(DISP_BEAM, cmap_to_glyph(S_goodpos)); } else if (state == 1) { int x,y, dx, dy; for (dx = -4; dx <= 4; dx++) for (dy = -4; dy <= 4; dy++) { x = dx + (int)u.ux; y = dy + (int)u.uy; - if (isok(x,y) && is_valid_jump_pos(x,y, jumping_is_magic, FALSE)) + if (isok(x,y) && ACCESSIBLE(levl[x][y].typ) && + is_valid_jump_pos(x,y, jumping_is_magic, FALSE)) tmp_at(x,y); } } else { @@ -2602,14 +2605,14 @@ display_polearm_positions(state) int state; { if (state == 0) { - tmp_at(DISP_BEAM, cmap_to_glyph(S_flashbeam)); + tmp_at(DISP_BEAM, cmap_to_glyph(S_goodpos)); } else if (state == 1) { int x,y, dx,dy; for (dx = -4; dx <= 4; dx++) for (dy = -4; dy <= 4; dy++) { x = dx + (int)u.ux; y = dy + (int)u.uy; - if (isok(x, y) && + if (isok(x, y) && ACCESSIBLE(levl[x][y].typ) && distu(x, y) >= polearm_range_min && distu(x, y) <= polearm_range_max) { tmp_at(x, y); diff --git a/src/bones.c b/src/bones.c index 9024354a2..d6c3b75e7 100644 --- a/src/bones.c +++ b/src/bones.c @@ -331,7 +331,7 @@ struct obj *corpse; clear_bypasses(); fd = open_bonesfile(&u.uz, &bonesid); if (fd >= 0) { - (void) close(fd); + (void) nhclose(fd); if (wizard) { if (yn("Bones file already exists. Replace it?") == 'y') { if (delete_bonesfile(&u.uz)) goto make_bones; @@ -504,7 +504,7 @@ struct obj *corpse; if (bytes_counted > freediskspace(bones)) { /* not enough room */ if (wizard) pline("Insufficient space to create bones file."); - (void) close(fd); + (void) nhclose(fd); cancel_bonesfile(); return; } @@ -551,7 +551,7 @@ getbones() ok = TRUE; if(wizard) { if(yn("Get bones?") == 'n') { - (void) close(fd); + (void) nhclose(fd); compress_bonesfile(); return(0); } @@ -595,8 +595,9 @@ getbones() resetobjs(level.buriedobjlist,TRUE); } } - (void) close(fd); + (void) nhclose(fd); sanitize_engravings(); + u.uroleplay.numbones++; if(wizard) { if(yn("Unlink bones?") == 'n') { diff --git a/src/decl.c b/src/decl.c index 2df304575..d9429dbcf 100644 --- a/src/decl.c +++ b/src/decl.c @@ -103,9 +103,9 @@ NEARDATA struct multishot m_shot = { 0, 0, STRANGE_OBJECT, FALSE }; NEARDATA dungeon dungeons[MAXDUNGEON]; /* ini'ed by init_dungeon() */ NEARDATA s_level *sp_levchn; -NEARDATA stairway upstair = { 0, 0 }, dnstair = { 0, 0 }; -NEARDATA stairway upladder = { 0, 0 }, dnladder = { 0, 0 }; -NEARDATA stairway sstairs = { 0, 0 }; +NEARDATA stairway upstair = { 0, 0, { 0,0 }, 0 }, dnstair = { 0, 0, { 0,0 }, 0 }; +NEARDATA stairway upladder = { 0, 0, { 0,0 }, 0 }, dnladder = { 0, 0, { 0,0 }, 0 }; +NEARDATA stairway sstairs = { 0, 0, { 0,0 }, 0 }; NEARDATA dest_area updest = { 0, 0, 0, 0, 0, 0, 0, 0 }; NEARDATA dest_area dndest = { 0, 0, 0, 0, 0, 0, 0, 0 }; NEARDATA coord inv_pos = { 0, 0 }; @@ -219,6 +219,8 @@ NEARDATA struct c_color_names c_color_names = { "white" }; +struct menucoloring *menu_colorings = NULL; + const char *c_obj_colors[] = { "black", /* CLR_BLACK */ "red", /* CLR_RED */ diff --git a/src/display.c b/src/display.c index 0e8b042a6..1369fbfb3 100644 --- a/src/display.c +++ b/src/display.c @@ -160,7 +160,7 @@ magic_map_background(x, y, show) if (!cansee(x,y) && !lev->waslit) { /* Floor spaces are dark if unlit. Corridors are dark if unlit. */ if (lev->typ == ROOM && glyph == cmap_to_glyph(S_room)) - glyph = cmap_to_glyph(S_stone); + glyph = cmap_to_glyph((flags.dark_room && iflags.use_color) ? (DARKROOMSYM) : S_stone); else if (lev->typ == CORR && glyph == cmap_to_glyph(S_litcorr)) glyph = cmap_to_glyph(S_corr); } @@ -674,7 +674,12 @@ newsym(x,y) */ lev->waslit = (lev->lit!=0); /* remember lit condition */ - if (reg != NULL && ACCESSIBLE(lev->typ)) { + /* normal region shown only on accessible positions, but poison clouds + * also shown above lava, pools and moats. + */ + if (reg != NULL && (ACCESSIBLE(lev->typ) || + (reg->glyph == cmap_to_glyph(S_poisoncloud) && + (lev->typ == LAVAPOOL || lev->typ == POOL || lev->typ == MOAT)))) { show_region(reg,x,y); return; } @@ -759,11 +764,11 @@ newsym(x,y) * These checks and changes must be here and not in back_to_glyph(). * They are dependent on the position being out of sight. */ - else if (!lev->waslit) { + else if (!lev->waslit || (flags.dark_room && iflags.use_color)) { if (lev->glyph == cmap_to_glyph(S_litcorr) && lev->typ == CORR) show_glyph(x, y, lev->glyph = cmap_to_glyph(S_corr)); else if (lev->glyph == cmap_to_glyph(S_room) && lev->typ == ROOM) - show_glyph(x, y, lev->glyph = cmap_to_glyph(S_stone)); + show_glyph(x, y, lev->glyph = cmap_to_glyph(DARKROOMSYM)); else goto show_mem; } else { @@ -824,8 +829,10 @@ shieldeff(x,y) * DISP_ALWAYS- Like DISP_FLASH, but vision is not taken into account. */ +#define TMP_AT_MAX_GLYPHS (COLNO*2) + static struct tmp_glyph { - coord saved[COLNO]; /* previously updated positions */ + coord saved[TMP_AT_MAX_GLYPHS]; /* previously updated positions */ int sidx; /* index of next unused slot in saved[] */ int style; /* either DISP_BEAM or DISP_FLASH or DISP_ALWAYS */ int glyph; /* glyph to use when printing */ @@ -895,7 +902,7 @@ tmp_at(x, y) default: /* do it */ if (tglyph->style == DISP_BEAM || tglyph->style == DISP_ALL) { if (tglyph->style != DISP_ALL && !cansee(x,y)) break; - if (tglyph->sidx >= COLNO) break; /* too many locations */ + if (tglyph->sidx >= TMP_AT_MAX_GLYPHS) break; /* too many locations */ /* save pos for later erasing */ tglyph->saved[tglyph->sidx].x = x; tglyph->saved[tglyph->sidx].y = y; diff --git a/src/do.c b/src/do.c index 5b27d283f..75b61159e 100644 --- a/src/do.c +++ b/src/do.c @@ -953,7 +953,7 @@ currentlevel_rewrite() #ifdef MFLOPPY if (!savelev(fd, ledger_no(&u.uz), COUNT_SAVE)) { - (void) close(fd); + (void) nhclose(fd); delete_levelfile(ledger_no(&u.uz)); pline("NetHack is out of disk space for making levels!"); You("can save, quit, or continue playing."); @@ -1168,7 +1168,7 @@ boolean at_stairs, falling, portal; } minit(); /* ZEROCOMP */ getlev(fd, hackpid, new_ledger, FALSE); - (void) close(fd); + (void) nhclose(fd); oinit(); /* reassign level dependent obj probabilities */ } /* do this prior to level-change pline messages */ @@ -1296,6 +1296,8 @@ boolean at_stairs, falling, portal; /* initial movement of bubbles just before vision_recalc */ if (Is_waterlevel(&u.uz) || Is_airlevel(&u.uz)) movebubbles(); + else if (Is_firelevel(&u.uz)) + fumaroles(); if (level_info[new_ledger].flags & FORGOTTEN) { forget_map(ALL_MAP); /* forget the map */ diff --git a/src/do_name.c b/src/do_name.c index b5c2bb711..1437680e7 100644 --- a/src/do_name.c +++ b/src/do_name.c @@ -238,6 +238,7 @@ const char *goal; if (glyph_is_cmap(k) && (IS_DOOR(levl[tx][ty].typ) || glyph_to_cmap(k) == S_room || + glyph_to_cmap(k) == S_darkroom || glyph_to_cmap(k) == S_corr || glyph_to_cmap(k) == S_litcorr)) { /* what the hero remembers to be at tx,ty */ diff --git a/src/drawing.c b/src/drawing.c index a5cc10d46..d78668e0a 100644 --- a/src/drawing.c +++ b/src/drawing.c @@ -156,7 +156,8 @@ const struct symdef defsyms[MAXPCHARS] = { {'#', "iron bars", C(HI_METAL)}, /* bars */ {'#', "tree", C(CLR_GREEN)}, /* tree */ {'.', "floor of a room",C(CLR_GRAY)}, /* room */ -/*20*/ {'#', "corridor", C(CLR_GRAY)}, /* dark corr */ +/*20*/ {'.', "dark part of a room",C(CLR_BLACK)}, /* dark room */ + {'#', "corridor", C(CLR_GRAY)}, /* dark corr */ {'#', "lit corridor", C(CLR_GRAY)}, /* lit corr (see mapglyph.c) */ {'<', "staircase up", C(CLR_GRAY)}, /* upstair */ {'>', "staircase down", C(CLR_GRAY)}, /* dnstair */ @@ -165,8 +166,8 @@ const struct symdef defsyms[MAXPCHARS] = { {'_', "altar", C(CLR_GRAY)}, /* altar */ {'|', "grave", C(CLR_GRAY)}, /* grave */ {'\\', "opulent throne",C(HI_GOLD)}, /* throne */ - {'#', "sink", C(CLR_GRAY)}, /* sink */ -/*30*/ {'{', "fountain", C(CLR_BLUE)}, /* fountain */ +/*30*/ {'#', "sink", C(CLR_GRAY)}, /* sink */ + {'{', "fountain", C(CLR_BLUE)}, /* fountain */ {'}', "water", C(CLR_BLUE)}, /* pool */ {'.', "ice", C(CLR_CYAN)}, /* ice */ {'}', "molten lava", C(CLR_RED)}, /* lava */ @@ -175,8 +176,8 @@ const struct symdef defsyms[MAXPCHARS] = { {'#', "raised drawbridge",C(CLR_BROWN)}, /* vcdbridge */ {'#', "raised drawbridge",C(CLR_BROWN)}, /* hcdbridge */ {' ', "air", C(CLR_CYAN)}, /* open air */ - {'#', "cloud", C(CLR_GRAY)}, /* [part of] a cloud */ -/*40*/ {'}', "water", C(CLR_BLUE)}, /* under water */ +/*40*/ {'#', "cloud", C(CLR_GRAY)}, /* [part of] a cloud */ + {'}', "water", C(CLR_BLUE)}, /* under water */ {'^', "arrow trap", C(HI_METAL)}, /* trap */ {'^', "dart trap", C(HI_METAL)}, /* trap */ {'^', "falling rock trap",C(CLR_GRAY)}, /* trap */ @@ -185,8 +186,8 @@ const struct symdef defsyms[MAXPCHARS] = { {'^', "land mine", C(CLR_RED)}, /* trap */ {'^', "rolling boulder trap", C(CLR_GRAY)}, /* trap */ {'^', "sleeping gas trap",C(HI_ZAP)}, /* trap */ - {'^', "rust trap", C(CLR_BLUE)}, /* trap */ -/*50*/ {'^', "fire trap", C(CLR_ORANGE)}, /* trap */ +/*50*/ {'^', "rust trap", C(CLR_BLUE)}, /* trap */ + {'^', "fire trap", C(CLR_ORANGE)}, /* trap */ {'^', "pit", C(CLR_BLACK)}, /* trap */ {'^', "spiked pit", C(CLR_BLACK)}, /* trap */ {'^', "hole", C(CLR_BROWN)}, /* trap */ @@ -195,8 +196,8 @@ const struct symdef defsyms[MAXPCHARS] = { {'^', "level teleporter", C(CLR_MAGENTA)}, /* trap */ {'^', "magic portal", C(CLR_BRIGHT_MAGENTA)}, /* trap */ {'"', "web", C(CLR_GRAY)}, /* web */ - {'^', "statue trap", C(CLR_GRAY)}, /* trap */ -/*60*/ {'^', "magic trap", C(HI_ZAP)}, /* trap */ +/*60*/ {'^', "statue trap", C(CLR_GRAY)}, /* trap */ + {'^', "magic trap", C(HI_ZAP)}, /* trap */ {'^', "anti-magic field", C(HI_ZAP)}, /* trap */ {'^', "polymorph trap", C(CLR_BRIGHT_GREEN)}, /* trap */ {'|', "wall", C(CLR_GRAY)}, /* vbeam */ @@ -205,28 +206,30 @@ const struct symdef defsyms[MAXPCHARS] = { {'/', "wall", C(CLR_GRAY)}, /* rslant */ {'*', "", C(CLR_WHITE)}, /* dig beam */ {'!', "", C(CLR_WHITE)}, /* camera flash beam */ - {')', "", C(HI_WOOD)}, /* boomerang open left */ -/*70*/ {'(', "", C(HI_WOOD)}, /* boomerang open right */ +/*70*/ {')', "", C(HI_WOOD)}, /* boomerang open left */ + {'(', "", C(HI_WOOD)}, /* boomerang open right */ {'0', "", C(HI_ZAP)}, /* 4 magic shield symbols */ {'#', "", C(HI_ZAP)}, {'@', "", C(HI_ZAP)}, {'*', "", C(HI_ZAP)}, + {'#', "poison cloud", C(CLR_BRIGHT_GREEN)}, /* [part of] a poison cloud */ + {'?', "valid position", C(CLR_BRIGHT_GREEN)}, /* valid position for targeting */ {'/', "", C(CLR_GREEN)}, /* swallow top left */ {'-', "", C(CLR_GREEN)}, /* swallow top center */ - {'\\', "", C(CLR_GREEN)}, /* swallow top right */ +/*80*/ {'\\', "", C(CLR_GREEN)}, /* swallow top right */ {'|', "", C(CLR_GREEN)}, /* swallow middle left */ {'|', "", C(CLR_GREEN)}, /* swallow middle right */ -/*80*/ {'\\', "", C(CLR_GREEN)}, /* swallow bottom left */ + {'\\', "", C(CLR_GREEN)}, /* swallow bottom left */ {'-', "", C(CLR_GREEN)}, /* swallow bottom center*/ {'/', "", C(CLR_GREEN)}, /* swallow bottom right */ {'/', "", C(CLR_ORANGE)}, /* explosion top left */ {'-', "", C(CLR_ORANGE)}, /* explosion top center */ {'\\', "", C(CLR_ORANGE)}, /* explosion top right */ {'|', "", C(CLR_ORANGE)}, /* explosion middle left */ - {' ', "", C(CLR_ORANGE)}, /* explosion middle center*/ +/*90*/ {' ', "", C(CLR_ORANGE)}, /* explosion middle center*/ {'|', "", C(CLR_ORANGE)}, /* explosion middle right */ {'\\', "", C(CLR_ORANGE)}, /* explosion bottom left */ -/*90*/ {'-', "", C(CLR_ORANGE)}, /* explosion bottom center*/ + {'-', "", C(CLR_ORANGE)}, /* explosion bottom center*/ {'/', "", C(CLR_ORANGE)}, /* explosion bottom right */ }; @@ -614,6 +617,7 @@ struct symparse loadsyms[] = { {SYM_PCHAR, S_hcdbridge, "S_hcdbridge"}, {SYM_PCHAR, S_air, "S_air"}, {SYM_PCHAR, S_cloud, "S_cloud"}, + {SYM_PCHAR, S_poisoncloud, "S_poisoncloud"}, {SYM_PCHAR, S_water, "S_water"}, {SYM_PCHAR, S_arrow_trap, "S_arrow_trap"}, {SYM_PCHAR, S_dart_trap, "S_dart_trap"}, @@ -645,6 +649,7 @@ struct symparse loadsyms[] = { {SYM_PCHAR, S_flashbeam, "S_flashbeam"}, {SYM_PCHAR, S_boomleft, "S_boomleft"}, {SYM_PCHAR, S_boomright, "S_boomright"}, + {SYM_PCHAR, S_goodpos, "S_goodpos"}, {SYM_PCHAR, S_ss1, "S_ss1"}, {SYM_PCHAR, S_ss2, "S_ss2"}, {SYM_PCHAR, S_ss3, "S_ss3"}, diff --git a/src/end.c b/src/end.c index 35a5393bd..9767e0481 100644 --- a/src/end.c +++ b/src/end.c @@ -1237,6 +1237,9 @@ struct obj *list; boolean identified, all_containers, reportempty; { register struct obj *box, *obj; + struct obj **oarray; + int i,n; + char *invlet; char buf[BUFSZ]; boolean cat, deadcat; @@ -1256,10 +1259,30 @@ boolean identified, all_containers, reportempty; continue; /* wrong type of container */ } else if (box->cobj) { winid tmpwin = create_nhwindow(NHW_MENU); + + /* count the number of items */ + for (n = 0, obj = box->cobj; obj; obj = obj->nobj) n++; + /* Make a temporary array to store the objects sorted */ + oarray = objarr_init(n); + + /* Add objects to the array */ + i = 0; + invlet = flags.inv_order; + nextclass: + for (obj = box->cobj; obj; obj = obj->nobj) { + if (!flags.sortpack || obj->oclass == *invlet) { + objarr_set(obj, i++, oarray, (flags.sortloot == 'f' || flags.sortloot == 'l') ); + } + } /* for loop */ + if (flags.sortpack) { + if (*++invlet) goto nextclass; + } + Sprintf(buf, "Contents of %s:", the(xname(box))); putstr(tmpwin, 0, buf); putstr(tmpwin, 0, ""); - for (obj = box->cobj; obj; obj = obj->nobj) { + for (i = 0; i < n; i++) { + obj = oarray[i]; if (identified) { makeknown(obj->otyp); obj->known = obj->bknown = @@ -1269,6 +1292,7 @@ boolean identified, all_containers, reportempty; } putstr(tmpwin, 0, doname(obj)); } + free(oarray); if (cat) putstr(tmpwin, 0, "Schroedinger's cat"); else if (deadcat) putstr(tmpwin, 0, "Schroedinger's dead cat"); display_nhwindow(tmpwin, TRUE); @@ -1413,43 +1437,72 @@ num_genocides() return n; } +int +num_extinct() +{ + int i, n = 0; + + for (i = LOW_PM; i < NUMMONS; ++i) + if (!(mvitals[i].mvflags & G_GENOD) && + (mvitals[i].mvflags & G_GONE) && + !(mons[i].geno & G_UNIQ)) ++n; + + return n; +} + + STATIC_OVL void list_genocided(defquery, ask) char defquery; boolean ask; { register int i; - int ngenocided; + int ngenocided, nextinct; char c; winid klwin; char buf[BUFSZ]; ngenocided = num_genocides(); + nextinct = num_extinct(); - /* genocided species list */ - if (ngenocided != 0) { - c = ask ? yn_function("Do you want a list of species genocided?", - ynqchars, defquery) : defquery; + /* genocided or extinct species list */ + if (ngenocided != 0 || nextinct != 0) { + Sprintf(buf, "Do you want a list of %sspecies%s%s?", + (nextinct && !ngenocided) ? "extinct " : "", + (ngenocided) ? " genocided" : "", + (nextinct && ngenocided) ? " and extinct" : ""); + c = ask ? yn_function(buf, ynqchars, defquery) : defquery; if (c == 'q') done_stopprint++; if (c == 'y') { klwin = create_nhwindow(NHW_MENU); - putstr(klwin, 0, "Genocided species:"); + Sprintf(buf, "%s%s species:", + (ngenocided) ? "Genocided" : "Extinct", + (nextinct && ngenocided) ? " or extinct" : ""); + putstr(klwin, 0, buf); putstr(klwin, 0, ""); for (i = LOW_PM; i < NUMMONS; i++) - if (mvitals[i].mvflags & G_GENOD) { + if (mvitals[i].mvflags & G_GONE && !(mons[i].geno & G_UNIQ)) { if ((mons[i].geno & G_UNIQ) && i != PM_HIGH_PRIEST) Sprintf(buf, "%s%s", !type_is_pname(&mons[i]) ? "" : "the ", mons[i].mname); else Strcpy(buf, makeplural(mons[i].mname)); + if (!(mvitals[i].mvflags & G_GENOD)) + Strcat(buf, " (extinct)"); putstr(klwin, 0, buf); } putstr(klwin, 0, ""); - Sprintf(buf, "%d species genocided.", ngenocided); - putstr(klwin, 0, buf); + if (ngenocided > 0) { + Sprintf(buf, "%d species genocided.", ngenocided); + putstr(klwin, 0, buf); + } + if (nextinct > 0) { + Sprintf(buf, "%d species extinct.", nextinct); + putstr(klwin, 0, buf); + } display_nhwindow(klwin, TRUE); destroy_nhwindow(klwin); diff --git a/src/files.c b/src/files.c index 02843bd1f..84faacab9 100644 --- a/src/files.c +++ b/src/files.c @@ -641,12 +641,12 @@ really_close() lftrack.fd = -1; lftrack.oflag = 0; if (fd != -1) - (void)_close(fd); + (void)close(fd); return; } int -close(fd) +nhclose(fd) int fd; { if (lftrack.fd == fd) { @@ -655,10 +655,17 @@ int fd; lftrack.nethack_thinks_it_is_open = FALSE; return 0; } - return _close(fd); + return close(fd); +} +#else +int +nhclose(fd) +int fd; +{ + return close(fd); } #endif - + /* ---------- END LEVEL FILE HANDLING ----------- */ @@ -996,7 +1003,7 @@ restore_saved_game() if ((fd = open_savefile()) < 0) return fd; if (validate(fd, fq_save) != 0) { - (void) close(fd), fd = -1; + (void) nhclose(fd), fd = -1; (void) delete_savefile(); } return fd; @@ -1021,7 +1028,7 @@ const char* filename; get_plname_from_file(fd, tplname); result = dupstr(tplname); } - (void) close(fd); + (void) nhclose(fd); } nh_compress(SAVEF); @@ -1413,7 +1420,7 @@ docompress_file(filename, uncomp) const char *filename; boolean uncomp; { - gzFile *compressedfile; + gzFile compressedfile; FILE *uncompressedfile; char cfn[256]; char buf[1024]; @@ -1777,7 +1784,7 @@ const char *filename; if (unlink(lockname) < 0) HUP raw_printf("Can't unlink %s.", lockname); # ifdef NO_FILE_LINKS - (void) close(lockfd); + (void) nhclose(lockfd); # endif #endif /* UNIX || VMS */ @@ -2288,6 +2295,8 @@ int src; } else if (match_varname(buf, "BOULDER", 3)) { (void) get_uchars(fp, buf, bufp, &iflags.bouldersym, TRUE, 1, "BOULDER"); + } else if (match_varname(buf, "MENUCOLOR", 9)) { + (void) add_menu_coloring(bufp); } else if (match_varname(buf, "WARNINGS", 5)) { (void) get_uchars(fp, buf, bufp, translate, FALSE, WARNCOUNT, "WARNINGS"); @@ -2932,9 +2941,9 @@ const char *dir UNUSED_if_not_OS2_CODEVIEW; wait_synch(); } # endif - (void) close(fd); /* RECORD is accessible */ + (void) nhclose(fd); /* RECORD is accessible */ } else if ((fd = open(fq_record, O_CREAT|O_RDWR, FCMASK)) >= 0) { - (void) close(fd); /* RECORD newly created */ + (void) nhclose(fd); /* RECORD newly created */ # if defined(VMS) && !defined(SECURE) /* Re-protect RECORD with world:read+write+execute+delete access. */ (void) chmod(fq_record, FCMASK | 007); @@ -2974,9 +2983,9 @@ const char *dir UNUSED_if_not_OS2_CODEVIEW; raw_printf("Warning: cannot write record %s", tmp); wait_synch(); } else - (void) close(fd); + (void) nhclose(fd); } else /* open succeeded */ - (void) close(fd); + (void) nhclose(fd); #else /* MICRO || WIN32*/ # ifdef MAC @@ -3060,14 +3069,14 @@ recover_savefile() if (read(gfd, (genericptr_t) &hpid, sizeof hpid) != sizeof hpid) { raw_printf( "\nCheckpoint data incompletely written or subsequently clobbered. Recovery impossible."); - (void)close(gfd); + (void)nhclose(gfd); return FALSE; } if (read(gfd, (genericptr_t) &savelev, sizeof(savelev)) != sizeof(savelev)) { raw_printf("\nCheckpointing was not in effect for %s -- recovery impossible.\n", lock); - (void)close(gfd); + (void)nhclose(gfd); return FALSE; } if ((read(gfd, (genericptr_t) savename, sizeof savename) @@ -3081,7 +3090,7 @@ recover_savefile() (read(gfd, (genericptr_t) &tmpplbuf, pltmpsiz) != pltmpsiz)) { raw_printf("\nError reading %s -- can't recover.\n", lock); - (void)close(gfd); + (void)nhclose(gfd); return FALSE; } @@ -3097,15 +3106,15 @@ recover_savefile() sfd = create_savefile(); if (sfd < 0) { raw_printf("\nCannot recover savefile %s.\n", SAVEF); - (void)close(gfd); + (void)nhclose(gfd); return FALSE; } lfd = open_levelfile(savelev, errbuf); if (lfd < 0) { raw_printf("\n%s\n", errbuf); - (void)close(gfd); - (void)close(sfd); + (void)nhclose(gfd); + (void)nhclose(sfd); delete_savefile(); return FALSE; } @@ -3113,8 +3122,8 @@ recover_savefile() if (write(sfd, (genericptr_t) &version_data, sizeof version_data) != sizeof version_data) { raw_printf("\nError writing %s; recovery failed.", SAVEF); - (void)close(gfd); - (void)close(sfd); + (void)nhclose(gfd); + (void)nhclose(sfd); delete_savefile(); return FALSE; } @@ -3124,8 +3133,8 @@ recover_savefile() raw_printf( "\nError writing %s; recovery failed (savefile_info).\n", SAVEF); - (void)close(gfd); - (void)close(sfd); + (void)nhclose(gfd); + (void)nhclose(sfd); delete_savefile(); return FALSE; } @@ -3135,8 +3144,8 @@ recover_savefile() raw_printf( "Error writing %s; recovery failed (player name size).\n", SAVEF); - (void)close(gfd); - (void)close(sfd); + (void)nhclose(gfd); + (void)nhclose(sfd); delete_savefile(); return FALSE; } @@ -3146,28 +3155,28 @@ recover_savefile() raw_printf( "Error writing %s; recovery failed (player name).\n", SAVEF); - (void)close(gfd); - (void)close(sfd); + (void)nhclose(gfd); + (void)nhclose(sfd); delete_savefile(); return FALSE; } if (!copy_bytes(lfd, sfd)) { - (void) close(lfd); - (void) close(sfd); + (void) nhclose(lfd); + (void) nhclose(sfd); delete_savefile(); return FALSE; } - (void)close(lfd); + (void)nhclose(lfd); processed[savelev] = 1; if (!copy_bytes(gfd, sfd)) { - (void) close(lfd); - (void) close(sfd); + (void) nhclose(lfd); + (void) nhclose(sfd); delete_savefile(); return FALSE; } - (void)close(gfd); + (void)nhclose(gfd); processed[0] = 1; for (lev = 1; lev < 256; lev++) { @@ -3181,17 +3190,17 @@ recover_savefile() levc = (xchar) lev; write(sfd, (genericptr_t) &levc, sizeof(levc)); if (!copy_bytes(lfd, sfd)) { - (void) close(lfd); - (void) close(sfd); + (void) nhclose(lfd); + (void) nhclose(sfd); delete_savefile(); return FALSE; } - (void)close(lfd); + (void)nhclose(lfd); processed[lev] = 1; } } } - (void)close(sfd); + (void)nhclose(sfd); #ifdef HOLD_LOCKFILE_OPEN really_close(); diff --git a/src/hacklib.c b/src/hacklib.c index a9c31d42d..ddc122ce8 100644 --- a/src/hacklib.c +++ b/src/hacklib.c @@ -603,24 +603,28 @@ STATIC_DCL struct tm *NDECL(getlt); void setrandom() { - time_t now = getnow(); /* time((TIME_type) 0) */ + unsigned long seed = (unsigned long)getnow(); /* time((TIME_type) 0) */ +#ifdef UNIX + /* Quick dirty band-aid to prevent PRNG prediction */ + seed *= getpid(); +#endif /* the types are different enough here that sweeping the different * routine names into one via #defines is even more confusing */ #ifdef RANDOM /* srandom() from sys/share/random.c */ - srandom((unsigned int) now); + srandom((unsigned int) seed); #else # if defined(__APPLE__) || defined(BSD) || defined(LINUX) || defined(ULTRIX) || defined(CYGWIN32) /* system srandom() */ # if defined(BSD) && !defined(POSIX_TYPES) && defined(SUNOS4) (void) # endif - srandom((int) now); + srandom((int) seed); # else # ifdef UNIX /* system srand48() */ - srand48((long) now); + srand48((long) seed); # else /* poor quality system routine */ - srand((int) now); + srand((int) seed); # endif # endif #endif diff --git a/src/invent.c b/src/invent.c index c3ded6dff..9e4041603 100644 --- a/src/invent.c +++ b/src/invent.c @@ -7,6 +7,7 @@ #define NOINVSYM '#' #define CONTAINED_SYM '>' /* designator for inside a container */ +STATIC_DCL int FDECL(sortloot_cmp, (struct obj *, struct obj *)); STATIC_DCL void NDECL(reorder_invent); STATIC_DCL boolean FDECL(mergable,(struct obj *,struct obj *)); STATIC_DCL void FDECL(noarmor, (BOOLEAN_P)); @@ -41,6 +42,88 @@ static int lastinvnr = 51; /* 0 ... 51 (never saved&restored) */ */ static char venom_inv[] = { VENOM_CLASS, 0 }; /* (constant) */ + +int +sortloot_cmp(obj1, obj2) +struct obj *obj1; +struct obj *obj2; +{ + int val1 = 0; + int val2 = 0; + + /* Sort object names in lexicographical order, ignoring quantity. */ + int name_cmp = strcmpi(cxname_singular(obj1), cxname_singular(obj2)); + + if (name_cmp != 0) { + return name_cmp; + } + + /* Sort by BUC. Map blessed to 4, uncursed to 2, cursed to 1, and unknown to 0. */ + val1 = obj1->bknown ? (obj1->blessed << 2) + ((!obj1->blessed && !obj1->cursed) << 1) + obj1->cursed : 0; + val2 = obj2->bknown ? (obj2->blessed << 2) + ((!obj2->blessed && !obj2->cursed) << 1) + obj2->cursed : 0; + if (val1 != val2) { + return val2 - val1; /* Because bigger is better. */ + } + + /* Sort by greasing. This will put the objects in degreasing order. */ + val1 = obj1->greased; + val2 = obj2->greased; + if (val1 != val2) { + return val2 - val1; /* Because bigger is better. */ + } + + /* Sort by erosion. The effective amount is what matters. */ + val1 = greatest_erosion(obj1); + val2 = greatest_erosion(obj2); + if (val1 != val2) { + return val1 - val2; /* Because bigger is WORSE. */ + } + + /* Sort by erodeproofing. Map known-invulnerable to 1, and both + * known-vulnerable and unknown-vulnerability to 0, because that's how they're displayed. */ + val1 = obj1->rknown && obj1->oerodeproof; + val2 = obj2->rknown && obj2->oerodeproof; + if (val1 != val2) { + return val2 - val1; /* Because bigger is better. */ + } + + /* Sort by enchantment. Map unknown to -1000, which is comfortably below the range of ->spe. */ + val1 = obj1->known ? obj1->spe : -1000; + val2 = obj2->known ? obj2->spe : -1000; + if (val1 != val2) { + return val2 - val1; /* Because bigger is better. */ + } + + return 0; /* They're identical, as far as we're concerned. */ +} + +struct obj ** +objarr_init(n) +int n; +{ + return (struct obj **)alloc(n * sizeof(struct obj *)); +} + +void +objarr_set(otmp, idx, oarray, dosort) +struct obj *otmp; +int idx; +struct obj **oarray; +boolean dosort; +{ + if (dosort) { + int j; + for (j = idx; j; j--) { + if (sortloot_cmp(otmp, oarray[j-1]) > 0) break; + oarray[j] = oarray[j-1]; + } + oarray[j] = otmp; + } else { + oarray[idx] = otmp; + } +} + + void assigninvlet(otmp) register struct obj *otmp; @@ -1726,11 +1809,12 @@ long* out_cnt; struct obj *otmp; char ilet, ret; char *invlet = flags.inv_order; - int n, classcount; + int i, n, classcount; winid win; /* windows being used */ static winid local_win = WIN_ERR; /* window for partial menus */ anything any; menu_item *selected; + struct obj **oarray; /* overriden by global flag */ if (flags.perm_invent) { @@ -1777,6 +1861,19 @@ long* out_cnt; return ret; } + /* count the number of items */ + for (n = 0, otmp = invent; otmp; otmp = otmp->nobj) + if (!lets || !*lets || index(lets, otmp->invlet)) n++; + + oarray = objarr_init(n); + + /* Add objects to the array */ + i = 0; + for (otmp = invent; otmp; otmp = otmp->nobj) + if (!lets || !*lets || index(lets, otmp->invlet)) { + objarr_set(otmp, i++, oarray, (flags.sortloot == 'f')); + } + start_menu(win); if (wizard && iflags.override_ID) { char prompt[BUFSZ]; @@ -1791,23 +1888,22 @@ long* out_cnt; nextclass: classcount = 0; any = zeroany; /* set all bits to zero */ - for(otmp = invent; otmp; otmp = otmp->nobj) { - ilet = otmp->invlet; - if(!lets || !*lets || index(lets, ilet)) { - any = zeroany; /* zero */ - if (!flags.sortpack || otmp->oclass == *invlet) { - if (flags.sortpack && !classcount) { - add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, + for(i = 0; i < n; i++) { + otmp = oarray[i]; + ilet = otmp->invlet; + any = zeroany; /* zero */ + if (!flags.sortpack || otmp->oclass == *invlet) { + if (flags.sortpack && !classcount) { + add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, let_to_name(*invlet, FALSE, (want_reply && iflags.menu_head_objsym)), MENU_UNSELECTED); - classcount++; - } - any.a_char = ilet; - add_menu(win, obj_to_glyph(otmp), - &any, ilet, 0, ATR_NONE, doname(otmp), - MENU_UNSELECTED); - } - } - } + classcount++; + } + any.a_char = ilet; + add_menu(win, obj_to_glyph(otmp), + &any, ilet, 0, ATR_NONE, doname(otmp), + MENU_UNSELECTED); + } + } if (flags.sortpack) { if (*++invlet) goto nextclass; if (--invlet != venom_inv) { @@ -1815,6 +1911,7 @@ nextclass: goto nextclass; } } + free(oarray); end_menu(win, (char *) 0); n = select_menu(win, want_reply ? PICK_ONE : PICK_NONE, &selected); diff --git a/src/makemon.c b/src/makemon.c index 799438c2e..cb466220e 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -122,13 +122,15 @@ register int x, y, n; */ if (enexto(&mm, mm.x, mm.y, mtmp->data)) { mon = makemon(mtmp->data, mm.x, mm.y, NO_MM_FLAGS); - mon->mpeaceful = FALSE; - mon->mavenge = 0; - set_malign(mon); - /* Undo the second peace_minded() check in makemon(); if the - * monster turned out to be peaceful the first time we - * didn't create it at all; we don't want a second check. - */ + if (mon) { + mon->mpeaceful = FALSE; + mon->mavenge = 0; + set_malign(mon); + /* Undo the second peace_minded() check in makemon(); if the + * monster turned out to be peaceful the first time we + * didn't create it at all; we don't want a second check. + */ + } } } } diff --git a/src/mapglyph.c b/src/mapglyph.c index e44265d3a..08b6240f3 100644 --- a/src/mapglyph.c +++ b/src/mapglyph.c @@ -116,7 +116,7 @@ unsigned *ospecial; color = CLR_MAGENTA; else if (offset == S_corr || offset == S_litcorr) color = CLR_GRAY; - else if (offset >= S_room && offset <= S_water) + else if (offset >= S_room && offset <= S_water && offset != S_darkroom) color = CLR_GREEN; else color = NO_COLOR; diff --git a/src/mhitu.c b/src/mhitu.c index 9ec602895..8450ad12e 100644 --- a/src/mhitu.c +++ b/src/mhitu.c @@ -2558,6 +2558,7 @@ cloneu() if (u.mh <= 1) return(struct monst *)0; if (mvitals[mndx].mvflags & G_EXTINCT) return(struct monst *)0; mon = makemon(youmonst.data, u.ux, u.uy, NO_MINVENT|MM_EDOG); + if (!mon) return NULL; mon->mcloned = 1; mon = christen_monst(mon, plname); initedog(mon); diff --git a/src/mklev.c b/src/mklev.c index 5b4c9634a..744eb31f2 100644 --- a/src/mklev.c +++ b/src/mklev.c @@ -537,7 +537,7 @@ STATIC_OVL void clear_level_structures() { static struct rm zerorm = { cmap_to_glyph(S_stone), - 0, 0, 0, 0, 0, 0, 0, 0 }; + 0, 0, 0, 0, 0, 0, 0, 0, 0 }; register int x,y; register struct rm *lev; @@ -582,6 +582,7 @@ clear_level_structures() level.flags.is_cavernous_lev = 0; level.flags.arboreal = 0; level.flags.wizard_bones = 0; + level.flags.corrmaze = 0; nroom = 0; rooms[0].hx = -1; diff --git a/src/mkmaze.c b/src/mkmaze.c index fcd6a2df5..42851c0df 100644 --- a/src/mkmaze.c +++ b/src/mkmaze.c @@ -541,25 +541,25 @@ register const char *s; } level.flags.is_maze_lev = TRUE; + level.flags.corrmaze = !rn2(3); -#ifndef WALLIFIED_MAZE - for(x = 2; x < x_maze_max; x++) - for(y = 2; y < y_maze_max; y++) - levl[x][y].typ = STONE; -#else - for(x = 2; x <= x_maze_max; x++) - for(y = 2; y <= y_maze_max; y++) - levl[x][y].typ = ((x % 2) && (y % 2)) ? STONE : HWALL; -#endif + if (level.flags.corrmaze) + for(x = 2; x < x_maze_max; x++) + for(y = 2; y < y_maze_max; y++) + levl[x][y].typ = STONE; + else + for(x = 2; x <= x_maze_max; x++) + for(y = 2; y <= y_maze_max; y++) + levl[x][y].typ = ((x % 2) && (y % 2)) ? STONE : HWALL; maze0xy(&mm); walkfrom((int) mm.x, (int) mm.y, 0); /* put a boulder at the maze center */ (void) mksobj_at(BOULDER, (int) mm.x, (int) mm.y, TRUE, FALSE); -#ifdef WALLIFIED_MAZE - wallification(2, 2, x_maze_max, y_maze_max); -#endif + if (!level.flags.corrmaze) + wallification(2, 2, x_maze_max, y_maze_max); + mazexy(&mm); mkstairs(mm.x, mm.y, 1, (struct mkroom *)0); /* up */ if (!Invocation_lev(&u.uz)) { @@ -650,11 +650,12 @@ schar typ; int q, a, dir, pos; int dirs[4]; -#ifndef WALLIFIED_MAZE - if (!typ) typ = CORR; -#else - if (!typ) typ = ROOM; -#endif + if (!typ) { + if (level.flags.corrmaze) + typ = CORR; + else + typ = ROOM; + } pos = 1; mazex[pos] = (char) x; @@ -695,11 +696,12 @@ schar typ; register int q,a,dir; int dirs[4]; -#ifndef WALLIFIED_MAZE - if (!typ) typ = CORR; -#else - if (!typ) typ = ROOM; -#endif + if (!typ) { + if (level.flags.corrmaze) + typ = CORR; + else + typ = ROOM; + } if(!IS_DOOR(levl[x][y].typ)) { /* might still be on edge of MAP, so don't overwrite */ @@ -737,7 +739,7 @@ register int dir; void mazexy(cc) /* find random point in generated corridors, - so we don't create items in moats, bunkers, or walls */ + so we don't create items in moats, bunkers, or walls */ coord *cc; { int cpt=0; @@ -746,13 +748,8 @@ mazexy(cc) /* find random point in generated corridors, cc->x = 3 + 2*rn2((x_maze_max>>1) - 1); cc->y = 3 + 2*rn2((y_maze_max>>1) - 1); cpt++; - } while (cpt < 100 && levl[cc->x][cc->y].typ != -#ifdef WALLIFIED_MAZE - ROOM -#else - CORR -#endif - ); + } while (cpt < 100 && + levl[cc->x][cc->y].typ != (level.flags.corrmaze ? CORR : ROOM)); if (cpt >= 100) { register int x, y; /* last try */ @@ -760,13 +757,8 @@ mazexy(cc) /* find random point in generated corridors, for (y = 0; y < (y_maze_max>>1) - 1; y++) { cc->x = 3 + 2 * x; cc->y = 3 + 2 * y; - if (levl[cc->x][cc->y].typ == -#ifdef WALLIFIED_MAZE - ROOM -#else - CORR -#endif - ) return; + if (levl[cc->x][cc->y].typ == (level.flags.corrmaze ? CORR : ROOM)) + return; } panic("mazexy: can't find a place!"); } @@ -783,7 +775,7 @@ bound_digging() * so the boundary would be breached * * we can't bound unconditionally on one beyond the last line, because - * that provides a window of abuse for WALLIFIED_MAZE special levels + * that provides a window of abuse for wallified special levels */ { register int x,y; @@ -879,6 +871,25 @@ register xchar x, y, todnum, todlevel; return; } +void +fumaroles() +{ + xchar n; + boolean snd = FALSE, loud = FALSE; + for (n = rn2(3)+2; n; n--) { + xchar x = rn1(COLNO-4,3); + xchar y = rn1(ROWNO-4,3); + if (levl[x][y].typ == LAVAPOOL) { + NhRegion *r = create_gas_cloud(x,y, 4+rn2(5), rn1(10,5)); + clear_heros_fault(r); + snd = TRUE; + if (distu(x,y) < 15) loud = TRUE; + } + } + if (snd && !Deaf) + Norep("You hear a %swhoosh!", loud ? "loud " : ""); +} + /* * Special waterlevel stuff in endgame (TH). * @@ -916,9 +927,9 @@ movebubbles() register int x, y, i, j; struct trap *btrap; static const struct rm water_pos = - { cmap_to_glyph(S_water), WATER, 0, 0, 0, 0, 0, 0, 0 }; + { cmap_to_glyph(S_water), WATER, 0, 0, 0, 0, 0, 0, 0, 0 }; static const struct rm air_pos = - { cmap_to_glyph(S_cloud), AIR, 0, 0, 0, 1, 0, 0, 0 }; + { cmap_to_glyph(S_cloud), AIR, 0, 0, 0, 1, 0, 0, 0, 0 }; /* set up the portal the first time bubbles are moved */ if (!wportal) set_wportal(); diff --git a/src/monst.c b/src/monst.c index 3c1bde26e..791cd57c5 100644 --- a/src/monst.c +++ b/src/monst.c @@ -1367,14 +1367,14 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_ENGL, AD_PHYS, 1, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_POISON|MR_STONE, 0, - M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_UNSOLID|M1_FLY, + M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_BREATHLESS|M1_UNSOLID|M1_FLY, M2_STRONG|M2_NEUTER, 0, CLR_CYAN), MON("fire elemental", S_ELEMENTAL, LVL(8, 12, 2, 30, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_FIRE, 3, 6), ATTK(AT_NONE, AD_FIRE, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_FIRE|MR_POISON|MR_STONE, 0, - M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_UNSOLID|M1_FLY|M1_NOTAKE, + M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_BREATHLESS|M1_UNSOLID|M1_FLY|M1_NOTAKE, M2_STRONG|M2_NEUTER, M3_INFRAVISIBLE, CLR_YELLOW), MON("earth elemental", S_ELEMENTAL, LVL(8, 6, 2, 30, 0), (G_NOCORPSE|1), @@ -1390,7 +1390,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_CLAW, AD_PHYS, 5, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2500, 0, MS_SILENT, MZ_HUGE), MR_POISON|MR_STONE, 0, - M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_UNSOLID| + M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_BREATHLESS|M1_UNSOLID| M1_AMPHIBIOUS|M1_SWIM, M2_STRONG|M2_NEUTER, 0, CLR_BLUE), /* diff --git a/src/music.c b/src/music.c index 0912d78cc..24a7b75bd 100644 --- a/src/music.c +++ b/src/music.c @@ -753,7 +753,7 @@ char *buf; break; } (void) write(fd, buf, strlen(buf)); - (void) close(fd); + (void) nhclose(fd); } } #endif /* UNIX386MUSIC */ diff --git a/src/objnam.c b/src/objnam.c index 91d29caba..a0db8c681 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -18,6 +18,8 @@ STATIC_DCL void FDECL(add_erosion_words, (struct obj *, char *)); STATIC_DCL boolean FDECL(singplur_lookup, (char *,char *,BOOLEAN_P, const char *const *)); STATIC_DCL char *FDECL(singplur_compound, (char *)); +STATIC_DCL char *FDECL(xname_flags, (struct obj *, unsigned)); + struct Jitem { int item; @@ -236,7 +238,15 @@ boolean juice; /* whether or not to append " juice" to the name */ char * xname(obj) +struct obj *obj; +{ + return xname_flags(obj, CXN_NORMAL); +} + +char * +xname_flags(obj, cxn_flags) register struct obj *obj; +unsigned cxn_flags; /* bitmask of CXN_xxx values */ { register char *buf; register int typ = obj->otyp; @@ -245,7 +255,7 @@ register struct obj *obj; const char *actualn = OBJ_NAME(*ocl); const char *dn = OBJ_DESCR(*ocl); const char *un = ocl->oc_uname; - boolean pluralize = (obj->quan != 1L); + boolean pluralize = (obj->quan != 1L) && !(cxn_flags & CXN_SINGULAR); boolean known, dknown, bknown; buf = nextobuf() + PREFIX; /* leave room for "17 -3 " */ @@ -1079,6 +1089,16 @@ struct obj *obj; return xname(obj); } +/* like cxname, but ignores quantity */ +char * +cxname_singular(obj) +struct obj *obj; +{ + if (obj->otyp == CORPSE) + return corpse_xname(obj, (const char *)0, CXN_SINGULAR); + return xname_flags(obj, CXN_SINGULAR); +} + /* treat an object as fully ID'd when it might be used as reason for death */ char * killer_xname(obj) diff --git a/src/options.c b/src/options.c index 742958fc3..c65f3db28 100644 --- a/src/options.c +++ b/src/options.c @@ -105,6 +105,7 @@ static struct Bool_Opt {"color", &iflags.wc_color, FALSE, SET_IN_GAME}, /*WC*/ # endif {"confirm",&flags.confirm, TRUE, SET_IN_GAME}, + {"dark_room", &flags.dark_room, TRUE, SET_IN_GAME}, {"eight_bit_tty", &iflags.wc_eight_bit_input, FALSE, SET_IN_GAME}, /*WC*/ #ifdef TTY_GRAPHICS {"extmenu", &iflags.extmenu, FALSE, SET_IN_GAME}, @@ -141,6 +142,7 @@ static struct Bool_Opt {"mail", (boolean *)0, TRUE, SET_IN_FILE}, #endif {"mention_walls", &iflags.mention_walls, FALSE, SET_IN_GAME}, + {"menucolors", &iflags.use_menu_color, FALSE, SET_IN_GAME}, /* for menu debugging only*/ {"menu_tab_sep", &iflags.menu_tab_sep, FALSE, SET_IN_GAME}, {"menu_objsyms", &iflags.menu_head_objsym, FALSE, SET_IN_GAME}, @@ -345,6 +347,7 @@ static struct Comp_Opt { "scroll_amount", "amount to scroll map when scroll_margin is reached", 20, DISP_IN_GAME }, /*WC*/ { "scroll_margin", "scroll map when this far from the edge", 20, DISP_IN_GAME }, /*WC*/ + { "sortloot", "sort object selection lists by description", 4, SET_IN_GAME }, #ifdef MSDOS { "soundcard", "type of sound card to use", 20, SET_IN_FILE }, #endif @@ -495,6 +498,35 @@ STATIC_OVL boolean FDECL(wc2_supported, (const char *)); STATIC_DCL void FDECL(remove_autopickup_exception, (struct autopickup_exception *)); STATIC_OVL int FDECL(count_ape_maps, (int *, int *)); + +void +reglyph_darkroom() +{ + xchar x,y; + for (x = 0; x < COLNO; x++) + for (y = 0; y < ROWNO; y++) { + struct rm *lev = &levl[x][y]; + if (!flags.dark_room) { + if (lev->glyph == cmap_to_glyph(S_darkroom)) + lev->glyph = lev->waslit ? cmap_to_glyph(S_room) : cmap_to_glyph(S_stone); + } else { + if (lev->glyph == cmap_to_glyph(S_room) && + lev->seenv && + lev->waslit && !cansee(x,y)) + lev->glyph = cmap_to_glyph(S_darkroom); + else if (lev->glyph == cmap_to_glyph(S_stone) && + lev->typ == ROOM && + lev->seenv && + !cansee(x,y)) + lev->glyph = cmap_to_glyph(S_darkroom); + } + } + if (flags.dark_room && iflags.use_color) + showsyms[S_darkroom]=showsyms[S_room]; + else + showsyms[S_darkroom]=showsyms[S_stone]; +} + /* check whether a user-supplied option string is a proper leading substring of a particular option name; option string might have a colon or equals sign and arbitrary value appended to it */ @@ -628,6 +660,7 @@ initoptions_init() (genericptr_t)def_inv_order, sizeof flags.inv_order); flags.pickup_types[0] = '\0'; flags.pickup_burden = MOD_ENCUMBER; + flags.sortloot = 'l'; /* sort only loot by default */ for (i = 0; i < NUM_DISCLOSURE_OPTIONS; i++) flags.end_disclose[i] = DISCLOSE_PROMPT_DEFAULT_NO; @@ -703,6 +736,8 @@ initoptions_finish() /* result in the player's preferred fruit [better than "\033"]. */ obj_descr[SLIME_MOLD].oc_name = "fruit"; + reglyph_darkroom(); + return; } @@ -1090,6 +1125,174 @@ STATIC_VAR const struct paranoia_opts { { ~0, "all", 3, 0, 0, 0 }, /* ditto */ }; + +extern struct menucoloring *menu_colorings; + +static const struct { + const char *name; + const int color; +} colornames[] = { + {"black", CLR_BLACK}, + {"red", CLR_RED}, + {"green", CLR_GREEN}, + {"brown", CLR_BROWN}, + {"blue", CLR_BLUE}, + {"magenta", CLR_MAGENTA}, + {"cyan", CLR_CYAN}, + {"gray", CLR_GRAY}, + {"grey", CLR_GRAY}, + {"orange", CLR_ORANGE}, + {"lightgreen", CLR_BRIGHT_GREEN}, + {"yellow", CLR_YELLOW}, + {"lightblue", CLR_BRIGHT_BLUE}, + {"lightmagenta", CLR_BRIGHT_MAGENTA}, + {"lightcyan", CLR_BRIGHT_CYAN}, + {"white", CLR_WHITE} +}; + +static const struct { + const char *name; + const int attr; +} attrnames[] = { + {"none", ATR_NONE}, + {"bold", ATR_BOLD}, + {"dim", ATR_DIM}, + {"underline", ATR_ULINE}, + {"blink", ATR_BLINK}, + {"inverse", ATR_INVERSE} +}; + +/* parse '"regex_string"=color&attr' and add it to menucoloring */ +boolean +add_menu_coloring(str) +char *str; +{ + int i, c = NO_COLOR, a = ATR_NONE; + struct menucoloring *tmp; + char *tmps, *cs = strchr(str, '='); +#ifdef MENU_COLOR_REGEX_POSIX + int errnum; + char errbuf[80]; +#endif + const char *err = (char *)0; + + if (!cs || !str) return FALSE; + + tmps = cs; + tmps++; + while (*tmps && isspace(*tmps)) tmps++; + + for (i = 0; i < SIZE(colornames); i++) + if (strstri(tmps, colornames[i].name) == tmps) { + c = colornames[i].color; + break; + } + if ((i == SIZE(colornames)) && (*tmps >= '0' && *tmps <='9')) + c = atoi(tmps); + + if (c > 15) return FALSE; + + tmps = strchr(str, '&'); + if (tmps) { + tmps++; + while (*tmps && isspace(*tmps)) tmps++; + for (i = 0; i < SIZE(attrnames); i++) + if (strstri(tmps, attrnames[i].name) == tmps) { + a = attrnames[i].attr; + break; + } + if ((i == SIZE(attrnames)) && (*tmps >= '0' && *tmps <='9')) + a = atoi(tmps); + } + + *cs = '\0'; + tmps = str; + if ((*tmps == '"') || (*tmps == '\'')) { + cs--; + while (isspace(*cs)) cs--; + if (*cs == *tmps) { + *cs = '\0'; + tmps++; + } + } + + tmp = (struct menucoloring *)alloc(sizeof(struct menucoloring)); +#ifdef MENU_COLOR_REGEX +#ifdef MENU_COLOR_REGEX_POSIX + errnum = regcomp(&tmp->match, tmps, REG_EXTENDED | REG_NOSUB); + if (errnum != 0) + { + regerror(errnum, &tmp->match, errbuf, sizeof(errbuf)); + err = errbuf; + } +#else + tmp->match.translate = 0; + tmp->match.fastmap = 0; + tmp->match.buffer = 0; + tmp->match.allocated = 0; + tmp->match.regs_allocated = REGS_FIXED; + err = re_compile_pattern(tmps, strlen(tmps), &tmp->match); +#endif +#else + tmp->match = (char *)alloc(strlen(tmps)+1); + (void) memcpy((genericptr_t)tmp->match, (genericptr_t)tmps, strlen(tmps)+1); +#endif + if (err) { + raw_printf("\nMenucolor regex error: %s\n", err); + wait_synch(); + free(tmp); + return FALSE; + } else { + tmp->next = menu_colorings; + tmp->color = c; + tmp->attr = a; + menu_colorings = tmp; + return TRUE; + } +} + +boolean +get_menu_coloring(str, color, attr) +char *str; +int *color, *attr; +{ + struct menucoloring *tmpmc; + if (iflags.use_menu_color) + for (tmpmc = menu_colorings; tmpmc; tmpmc = tmpmc->next) +#ifdef MENU_COLOR_REGEX +# ifdef MENU_COLOR_REGEX_POSIX + if (regexec(&tmpmc->match, str, 0, NULL, 0) == 0) { +# else + if (re_search(&tmpmc->match, str, strlen(str), 0, 9999, 0) >= 0) { +# endif +#else + if (pmatch(tmpmc->match, str)) { +#endif + *color = tmpmc->color; + *attr = tmpmc->attr; + return TRUE; + } + return FALSE; +} + +void +free_menu_coloring() +{ + struct menucoloring *tmp = menu_colorings; + + while (tmp) { + struct menucoloring *tmp2 = tmp->next; +#ifdef MENU_COLOR_REGEX + (void) regfree(&tmp->match); +#else + free(tmp->match); +#endif + free(tmp); + tmp = tmp2; + } +} + + void parseoptions(opts, tinitial, tfrom_file) register char *opts; @@ -1431,6 +1634,16 @@ boolean tinitial, tfrom_file; return; } + /* menucolor:"regex_string"=color */ + fullname = "menucolor"; + if (match_optname(opts, fullname, 9, TRUE)) { + if (negated) bad_negation(fullname, FALSE); + else if ((op = string_for_env_opt(fullname, opts, FALSE)) != 0) + if (!add_menu_coloring(op)) + badoption(opts); + return; + } + fullname = "msghistory"; if (match_optname(opts, fullname, 3, TRUE)) { if (duplicate) complain_about_duplicate(opts,1); @@ -2149,6 +2362,22 @@ goodfruit: return; } + fullname = "sortloot"; + if (match_optname(opts, fullname, 4, TRUE)) { + op = string_for_env_opt(fullname, opts, FALSE); + if (op) { + switch (tolower(*op)) { + case 'n': + case 'l': + case 'f': flags.sortloot = tolower(*op); + break; + default: badoption(opts); + return; + } + } + return; + } + fullname = "suppress_alert"; if (match_optname(opts, fullname, 4, TRUE)) { if (duplicate) complain_about_duplicate(opts,1); @@ -2631,7 +2860,8 @@ goodfruit: else if ((boolopt[i].addr) == &flags.invlet_constant) { if (flags.invlet_constant) reassign(); } - else if ((boolopt[i].addr) == &flags.lit_corridor) { + else if (((boolopt[i].addr) == &flags.lit_corridor) || + ((boolopt[i].addr) == &flags.dark_room)) { /* * All corridor squares seen via night vision or * candles & lamps change. Update them by calling @@ -2641,6 +2871,7 @@ goodfruit: */ vision_recalc(2); /* shut down vision */ vision_full_recalc = 1; /* delayed recalc */ + if (iflags.use_color) need_redraw = TRUE; /* darkroom refresh */ } else if ((boolopt[i].addr) == &iflags.use_inverse || (boolopt[i].addr) == &flags.showrace || @@ -2683,6 +2914,10 @@ static NEARDATA const char *runmodes[] = { "teleport", "run", "walk", "crawl" }; +static NEARDATA const char *sortltype[] = { + "none", "loot", "full" +}; + /* * Convert the given string of object classes to a string of default object * symbols. @@ -2970,8 +3205,10 @@ doset() } destroy_nhwindow(tmpwin); - if (need_redraw) + if (need_redraw) { + reglyph_darkroom(); (void) doredraw(); + } return 0; } @@ -2989,7 +3226,8 @@ boolean setinitial,setfromfile; char buf[BUFSZ]; /* Special handling of menustyle, pickup_burden, pickup_types, - * disclose, runmode, msg_window, menu_headings, and number_pad options. + * disclose, runmode, msg_window, menu_headings, sortloot, + * and number_pad options. * Also takes care of interactive autopickup_exception_handling changes. */ if (!strcmp("menustyle", optname)) { @@ -3170,6 +3408,23 @@ boolean setinitial,setfromfile; } destroy_nhwindow(tmpwin); #endif + } else if (!strcmp("sortloot", optname)) { + const char *sortl_name; + menu_item *sortl_pick = (menu_item *)0; + tmpwin = create_nhwindow(NHW_MENU); + start_menu(tmpwin); + for (i = 0; i < SIZE(sortltype); i++) { + sortl_name = sortltype[i]; + any.a_char = *sortl_name; + add_menu(tmpwin, NO_GLYPH, &any, *sortl_name, 0, + ATR_NONE, sortl_name, MENU_UNSELECTED); + } + end_menu(tmpwin, "Select loot sorting type:"); + if (select_menu(tmpwin, PICK_ONE, &sortl_pick) > 0) { + flags.sortloot = sortl_pick->item.a_char; + free((genericptr_t)sortl_pick); + } + destroy_nhwindow(tmpwin); } else if (!strcmp("align_message", optname) || !strcmp("align_status", optname)) { menu_item *window_pick = (menu_item *)0; @@ -3759,6 +4014,15 @@ char *buf; if (iflags.wc_scroll_margin) Sprintf(buf, "%d",iflags.wc_scroll_margin); else Strcpy(buf, defopt); } + else if (!strcmp(optname, "sortloot")) { + char *sortname = (char *)NULL; + for (i=0; i < SIZE(sortltype) && sortname==(char *)NULL; i++) { + if (flags.sortloot == sortltype[i][0]) + sortname = (char *)sortltype[i]; + } + if (sortname != (char *)NULL) + Sprintf(buf, "%s", sortname); + } else if (!strcmp(optname, "player_selection")) Sprintf(buf, "%s", iflags.wc_player_selection ? "prompts" : "dialog"); #ifdef MSDOS diff --git a/src/pager.c b/src/pager.c index 4c0f69d17..280cf0a05 100644 --- a/src/pager.c +++ b/src/pager.c @@ -250,7 +250,7 @@ lookat(x, y, buf, monbuf) int tnum = what_trap(glyph_to_trap(glyph)); Strcpy(buf, defsyms[trap_to_defsym(tnum)].explanation); } else if(!glyph_is_cmap(glyph)) { - Strcpy(buf,"dark part of a room"); + Strcpy(buf,"unexplored area"); } else switch(glyph_to_cmap(glyph)) { case S_altar: Sprintf(buf, "%s %saltar", @@ -557,8 +557,8 @@ const char **firstmatch; x_str = defsyms[i].explanation; if (sym == ((looked) ? showsyms[i] : defsyms[i].sym) && *x_str) { - /* avoid "an air", "a water", or "a floor of a room" */ - int article = (i == S_room) ? 2 : /* 2=>"the" */ + /* avoid "an air", "a water", "a floor of a room", "a dark part of a room" */ + int article = ((i == S_room)||(i == S_darkroom)) ? 2 : /* 2=>"the" */ !(strcmp(x_str, "air") == 0 || /* 1=>"an" */ strcmp(x_str, "water") == 0); /* 0=>(none)*/ diff --git a/src/pickup.c b/src/pickup.c index bf5d06129..604d224c6 100644 --- a/src/pickup.c +++ b/src/pickup.c @@ -708,9 +708,10 @@ menu_item **pick_list; /* return list of items picked */ int how; /* type of query */ boolean FDECL((*allow), (OBJ_P));/* allow function */ { - int n; + int i, n; winid win; struct obj *curr, *last, fake_hero_object; + struct obj **oarray; char *pack; anything any; boolean printed_type_name, @@ -743,6 +744,16 @@ boolean FDECL((*allow), (OBJ_P));/* allow function */ return 1; } + oarray = objarr_init(n); + /* Add objects to the array */ + i = 0; + for (curr = olist; curr; curr = FOLLOW(curr, qflags)) { + if ((*allow)(curr)) { + objarr_set(curr, i++, oarray, (flags.sortloot == 'f' || + (flags.sortloot == 'l' && !(qflags & USE_INVLET)))); + } + } + win = create_nhwindow(NHW_MENU); start_menu(win); any = zeroany; @@ -756,7 +767,8 @@ boolean FDECL((*allow), (OBJ_P));/* allow function */ pack = flags.inv_order; do { printed_type_name = FALSE; - for (curr = olist; curr; curr = FOLLOW(curr, qflags)) { + for (i = 0; i < n; i++) { + curr = oarray[i]; if ((qflags & FEEL_COCKATRICE) && curr->otyp == CORPSE && will_feel_cockatrice(curr, FALSE)) { destroy_nhwindow(win); /* stop the menu and revert */ @@ -784,6 +796,7 @@ boolean FDECL((*allow), (OBJ_P));/* allow function */ } pack++; } while (sorted && *pack); + free(oarray); if (engulfer) { char buf[BUFSZ]; @@ -810,7 +823,7 @@ boolean FDECL((*allow), (OBJ_P));/* allow function */ if (n > 0) { menu_item *mi; - int i, k; + int k; /* fix up counts: -1 means no count used => pick all; if fake_hero_object was picked, discard that choice */ diff --git a/src/read.c b/src/read.c index 7d35620bc..a3d522072 100644 --- a/src/read.c +++ b/src/read.c @@ -27,7 +27,8 @@ STATIC_DCL void FDECL(randomize,(int *, int)); STATIC_DCL void FDECL(forget_single_object, (int)); STATIC_DCL void FDECL(forget, (int)); STATIC_DCL int FDECL(maybe_tame, (struct monst *,struct obj *)); - +STATIC_DCL boolean FDECL(is_valid_stinking_cloud_pos, (int, int, BOOLEAN_P)); +STATIC_DCL void FDECL(display_stinking_cloud_positions, (int)); STATIC_PTR void FDECL(set_lit, (int,int,genericptr_t)); STATIC_OVL boolean @@ -868,6 +869,39 @@ struct obj *sobj; return 0; } +boolean +is_valid_stinking_cloud_pos(x,y, showmsg) +int x,y; +boolean showmsg; +{ + if (!cansee(x, y) || !ACCESSIBLE(levl[x][y].typ) || distu(x, y) >= 32) { + if (showmsg) You("smell rotten eggs."); + return FALSE; + } + return TRUE; +} + +void +display_stinking_cloud_positions(state) + int state; +{ + if (state == 0) { + tmp_at(DISP_BEAM, cmap_to_glyph(S_goodpos)); + } else if (state == 1) { + int x,y, dx, dy; + int dist = 6; + for (dx = -dist; dx <= dist; dx++) + for (dy = -dist; dy <= dist; dy++) { + x = u.ux + dx; + y = u.uy + dy; + if (isok(x,y) && is_valid_stinking_cloud_pos(x,y, FALSE)) + tmp_at(x,y); + } + } else { + tmp_at(DISP_END, 0); + } +} + /* scroll effects; return 1 if we use up the scroll and possibly make it become discovered, 0 if caller should take care of those side-effects */ int @@ -1613,14 +1647,13 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */ already_known ? "stinking " : ""); cc.x = u.ux; cc.y = u.uy; + getpos_sethilite(display_stinking_cloud_positions); if (getpos(&cc, TRUE, "the desired position") < 0) { pline1(Never_mind); break; } - if (!cansee(cc.x, cc.y) || distu(cc.x, cc.y) >= 32) { - You("smell rotten eggs."); + if (!is_valid_stinking_cloud_pos(cc.x, cc.y, TRUE)) break; - } (void) create_gas_cloud(cc.x, cc.y, 3+bcsign(sobj), 8+4*bcsign(sobj)); break; diff --git a/src/region.c b/src/region.c index 562747948..bd47b7949 100644 --- a/src/region.c +++ b/src/region.c @@ -996,7 +996,7 @@ int damage; cloud->arg = zeroany; cloud->arg.a_int = damage; cloud->visible = TRUE; - cloud->glyph = cmap_to_glyph(S_cloud); + cloud->glyph = cmap_to_glyph(damage ? S_poisoncloud : S_cloud); add_region(cloud); return cloud; } diff --git a/src/restore.c b/src/restore.c index 4c4b049ce..d46adbb31 100644 --- a/src/restore.c +++ b/src/restore.c @@ -718,7 +718,7 @@ xchar ltmp; /* Remove levels and bones that may have been created. */ - (void) close(nfd); + (void) nhclose(nfd); # ifdef AMIGA clearlocks(); # else @@ -767,7 +767,7 @@ register int fd; if (!restgamestate(fd, &stuckid, &steedid)) { display_nhwindow(WIN_MESSAGE, TRUE); savelev(-1, 0, FREE_SAVE); /* discard current level */ - (void) close(fd); + (void) nhclose(fd); (void) delete_savefile(); restoring = FALSE; return(0); @@ -841,7 +841,7 @@ register int fd; get_plname_from_file(fd, plname); getlev(fd, 0, (xchar)0, FALSE); - (void) close(fd); + (void) nhclose(fd); /* Now set the restore settings to match the * settings used by the save file output routines @@ -1558,7 +1558,7 @@ register unsigned int len; } else { pline("Read %d instead of %u bytes.", rlen, len); if(restoring) { - (void) close(fd); + (void) nhclose(fd); (void) delete_savefile(); error("Error restoring old game."); } diff --git a/src/save.c b/src/save.c index 4a4363e9e..673a37c1f 100644 --- a/src/save.c +++ b/src/save.c @@ -162,7 +162,7 @@ dosave0() nh_uncompress(fq_save); fd = open_savefile(); if (fd > 0) { - (void) close(fd); + (void) nhclose(fd); clear_nhwindow(WIN_MESSAGE); There("seems to be an old save file."); if (yn("Overwrite the old file?") == 'n') { @@ -218,7 +218,7 @@ dosave0() pline("Require %ld bytes but only have %ld.", needed, fds); } flushout(); - (void) close(fd); + (void) nhclose(fd); (void) delete_savefile(); return 0; } @@ -265,7 +265,7 @@ dosave0() ofd = open_levelfile(ltmp, whynot); if (ofd < 0) { HUP pline1(whynot); - (void) close(fd); + (void) nhclose(fd); (void) delete_savefile(); HUP Strcpy(killer.name, whynot); HUP done(TRICKED); @@ -273,7 +273,7 @@ dosave0() } minit(); /* ZEROCOMP */ getlev(ofd, hackpid, ltmp, FALSE); - (void) close(ofd); + (void) nhclose(ofd); bwrite(fd, (genericptr_t) <mp, sizeof ltmp); /* level number*/ savelev(fd, ltmp, WRITE_SAVE | FREE_SAVE); /* actual level*/ delete_levelfile(ltmp); @@ -404,7 +404,7 @@ savestateinlock() Strcpy(killer.name, whynot); done(TRICKED); } - (void) close(fd); + (void) nhclose(fd); fd = create_levelfile(0, whynot); if (fd < 0) { @@ -742,7 +742,7 @@ def_bclose(fd) bw_FILE = 0; } else #endif - (void) close(fd); + (void) nhclose(fd); return; } @@ -879,7 +879,7 @@ zerocomp_bclose(fd) int fd; { zerocomp_bufoff(fd); - (void) close(fd); + (void) nhclose(fd); return; } #endif /* ZEROCOMP */ @@ -1296,6 +1296,7 @@ void freedynamicdata() { unload_qtlist(); + free_menu_coloring(); free_invbuf(); /* let_to_name (invent.c) */ free_youbuf(); /* You_buf,&c (pline.c) */ tmp_at(DISP_FREEMEM, 0); /* temporary display effects */ @@ -1442,8 +1443,8 @@ char *from, *to; if (nto != nfrom) panic("Copyfile failed!"); } while (nfrom == BUFSIZ); - (void) close(fdfrom); - (void) close(fdto); + (void) nhclose(fdfrom); + (void) nhclose(fdto); # endif /* TOS */ } diff --git a/src/sp_lev.c b/src/sp_lev.c index 54bc575f9..5910cf7cd 100644 --- a/src/sp_lev.c +++ b/src/sp_lev.c @@ -1,4 +1,4 @@ -/* NetHack 3.5 sp_lev.c $NHDT-Date: 1426465441 2015/03/16 00:24:01 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.25 $ */ +/* NetHack 3.5 sp_lev.c $NHDT-Date: 1427934549 2015/04/02 00:29:09 $ $NHDT-Branch: master $:$NHDT-Revision: 1.40 $ */ /* NetHack 3.5 sp_lev.c $Date: 2011/01/05 01:28:36 $ $Revision: 1.23 $ */ /* Copyright (c) 1989 by Jean-Christophe Collet */ /* NetHack may be freely redistributed. See license for details. */ @@ -15,6 +15,8 @@ #include "sp_lev.h" +typedef void (*select_iter_func)(int, int, genericptr_t); + extern void FDECL(mkmap, (lev_init *)); STATIC_DCL void FDECL(get_room_loc, (schar *, schar *, struct mkroom *)); @@ -35,6 +37,94 @@ STATIC_DCL boolean FDECL(create_subroom, (struct mkroom *, XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P)); long FDECL(opvar_array_length, (struct sp_coder *)); +STATIC_DCL void NDECL(solidify_map); +STATIC_DCL void FDECL(splev_stack_init, (struct splevstack *)); +STATIC_DCL void FDECL(splev_stack_done, (struct splevstack *)); +STATIC_DCL void FDECL(splev_stack_push, (struct splevstack *, struct opvar *)); +STATIC_DCL struct opvar * FDECL(splev_stack_pop, (struct splevstack *)); +STATIC_DCL struct splevstack * FDECL(splev_stack_reverse, (struct splevstack *)); +STATIC_DCL struct opvar * FDECL(opvar_new_str, (char *)); +STATIC_DCL struct opvar * FDECL(opvar_new_int, (long)); +STATIC_DCL struct opvar * FDECL(opvar_new_coord, (int, int)); +STATIC_DCL struct opvar * FDECL(opvar_new_region, (int,int, int,int)); +STATIC_DCL void FDECL(opvar_free_x, (struct opvar *)); +STATIC_DCL struct opvar * FDECL(opvar_clone, (struct opvar *)); +STATIC_DCL struct opvar * FDECL(opvar_var_conversion, (struct sp_coder *, struct opvar *)); +STATIC_DCL struct splev_var * FDECL(opvar_var_defined, (struct sp_coder *, char *)); +STATIC_DCL struct opvar * FDECL(splev_stack_getdat, (struct sp_coder *, XCHAR_P)); +STATIC_DCL struct opvar * FDECL(splev_stack_getdat_any, (struct sp_coder *)); +STATIC_DCL void FDECL(variable_list_del, (struct splev_var *)); +STATIC_DCL void FDECL(lvlfill_maze_grid, (int,int, int,int, SCHAR_P)); +STATIC_DCL void FDECL(lvlfill_solid, (SCHAR_P, SCHAR_P)); +STATIC_DCL void NDECL(remove_boundary_syms); +STATIC_DCL void FDECL(maybe_add_door, (int,int, struct mkroom *)); +STATIC_DCL void NDECL(link_doors_rooms); +STATIC_DCL void NDECL(fill_rooms); +STATIC_DCL unpacked_coord FDECL(get_unpacked_coord, (long, int)); +STATIC_DCL void FDECL(replace_terrain, (replaceterrain *, struct mkroom *)); +STATIC_DCL void FDECL(wallify_map, (int,int, int,int)); +STATIC_DCL void FDECL(splev_initlev, (lev_init *)); +STATIC_DCL struct sp_frame * FDECL(frame_new, (long)); +STATIC_DCL void FDECL(frame_del, (struct sp_frame *)); +STATIC_DCL void FDECL(spo_frame_push, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_frame_pop, (struct sp_coder *)); +STATIC_DCL long FDECL(sp_code_jmpaddr, (long, long)); +STATIC_DCL void FDECL(spo_call, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_return, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_end_moninvent, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_pop_container, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_message, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_monster, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_object, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_level_flags, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_initlevel, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_engraving, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_mineralize, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_room, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_endroom, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_stair, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_ladder, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_grave, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_altar, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_trap, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_gold, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_corridor, (struct sp_coder *)); +STATIC_DCL struct opvar * FDECL(selection_opvar, (char *)); +STATIC_DCL xchar FDECL(selection_getpoint, (int,int, struct opvar *)); +STATIC_DCL void FDECL(selection_setpoint, (int,int, struct opvar *, XCHAR_P)); +STATIC_DCL struct opvar * FDECL(selection_not, (struct opvar *)); +STATIC_DCL struct opvar * FDECL(selection_logical_oper, (struct opvar *, struct opvar *, CHAR_P)); +STATIC_DCL struct opvar * FDECL(selection_filter_mapchar, (struct opvar *, struct opvar *)); +STATIC_DCL void FDECL(selection_filter_percent, (struct opvar *, int)); +STATIC_DCL int FDECL(selection_rndcoord, (struct opvar *, schar *, schar *)); +STATIC_DCL void FDECL(selection_do_grow, (struct opvar *, int)); +STATIC_DCL void FDECL(selection_floodfill, (struct opvar *, int,int)); +STATIC_DCL void FDECL(selection_do_ellipse, (struct opvar *, int,int, int,int, int)); +STATIC_DCL long FDECL(line_dist_coord, (long,long, long,long, long,long)); +STATIC_DCL void FDECL(selection_do_gradient, (struct opvar *, long,long, long,long, long,long,long,long)); +STATIC_DCL void FDECL(selection_do_line, (SCHAR_P,SCHAR_P, SCHAR_P,SCHAR_P, struct opvar *)); +STATIC_DCL void FDECL(selection_do_randline, (SCHAR_P,SCHAR_P, SCHAR_P,SCHAR_P, SCHAR_P,SCHAR_P, struct opvar *)); +STATIC_DCL void FDECL(selection_iterate, (struct opvar *, select_iter_func, genericptr_t)); +STATIC_DCL void FDECL(sel_set_ter, (int,int, genericptr_t)); +STATIC_DCL void FDECL(sel_set_feature, (int,int, genericptr_t)); +STATIC_DCL void FDECL(sel_set_door, (int,int, genericptr_t)); +STATIC_DCL void FDECL(spo_door, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_feature, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_terrain, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_replace_terrain, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_levregion, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_region, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_drawbridge, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_mazewalk, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_wall_property, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_room_door, (struct sp_coder *)); +STATIC_DCL void FDECL(sel_set_wallify, (int,int, genericptr_t)); +STATIC_DCL void FDECL(spo_wallify, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_map, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_jmp, (struct sp_coder *, sp_lev *)); +STATIC_DCL void FDECL(spo_conditional_jump, (struct sp_coder *, sp_lev *)); +STATIC_DCL void FDECL(spo_var_init, (struct sp_coder *)); +STATIC_DCL void FDECL(spo_shuffle_array, (struct sp_coder *)); #define LEFT 1 #define H_LEFT 2 @@ -430,12 +520,11 @@ schar filling; for (x = x1; x <= x2; x++) for (y = y1; y <= y2; y++) { -#ifndef WALLIFIED_MAZE - levl[x][y].typ = STONE; -#else - levl[x][y].typ = - (y < 2 || ((x % 2) && (y % 2))) ? STONE : filling; -#endif + if (level.flags.corrmaze) + levl[x][y].typ = STONE; + else + levl[x][y].typ = + (y < 2 || ((x % 2) && (y % 2))) ? STONE : filling; } } @@ -523,10 +612,9 @@ remove_boundary_syms() void -maybe_add_door(x,y, droom, i,s) +maybe_add_door(x,y, droom) int x,y; struct mkroom *droom; -int i,s; { if (droom->hx >= 0 && doorindex < DOORMAX && inside_room(droom, x,y)) add_door(x, y, droom); @@ -541,9 +629,9 @@ link_doors_rooms() for (x = 0; x < COLNO; x++) if (IS_DOOR(levl[x][y].typ) || levl[x][y].typ == SDOOR) { for (tmpi = 0; tmpi < nroom; tmpi++) { - maybe_add_door(x,y, &rooms[tmpi], tmpi,-1); + maybe_add_door(x,y, &rooms[tmpi]); for (m = 0; m < rooms[tmpi].nsubrooms; m++) { - maybe_add_door(x,y, rooms[tmpi].sbrooms[m], tmpi,m); + maybe_add_door(x,y, rooms[tmpi].sbrooms[m]); } } } @@ -1581,24 +1669,28 @@ struct mkroom *croom; if (!container_idx) { if (!invent_carrying_monster) { /*impossible("create_object: no container");*/ - /* don't complain, the monster may be gone legally (eg. unique demon already generated) - TODO: In the case of unique demon lords, they should get their inventories even when - they get generated outside the des-file. Maybe another data file that determines what - inventories monsters get by default? + /* don't complain, the monster may be gone legally + (eg. unique demon already generated) + TODO: In the case of unique demon lords, they should + get their inventories even when they get generated + outside the des-file. Maybe another data file that + determines what inventories monsters get by default? */ } else { - int c; + int ci; struct obj *objcheck = otmp; int inuse = -1; - for (c = 0; c < container_idx; c++) - if (container_obj[c] == objcheck) - inuse = c; + + for (ci = 0; ci < container_idx; ci++) + if (container_obj[ci] == objcheck) + inuse = ci; remove_object(otmp); if (mpickobj(invent_carrying_monster, otmp)) { if (inuse > -1) { - impossible("container given to monster was merged or deallocated."); - for (c = inuse; c < container_idx-1; c++) - container_obj[c] = container_obj[c+1]; + impossible( + "container given to monster was merged or deallocated."); + for (ci = inuse; ci < container_idx - 1; ci++) + container_obj[ci] = container_obj[ci + 1]; container_obj[container_idx] = NULL; container_idx--; } @@ -2490,6 +2582,7 @@ spo_return(coder) opvar_free(params); } +/*ARGUSED*/ void spo_end_moninvent(coder) struct sp_coder *coder; @@ -2499,6 +2592,7 @@ spo_end_moninvent(coder) invent_carrying_monster = NULL; } +/*ARGUSED*/ void spo_pop_container(coder) struct sp_coder *coder; @@ -2543,7 +2637,7 @@ spo_monster(coder) int nparams = 0; struct opvar *varparam; - struct opvar *id, *coord, *has_inv; + struct opvar *id, *mcoord, *has_inv; monster tmpmons; tmpmons.peaceful = -1; @@ -2660,13 +2754,13 @@ spo_monster(coder) } } - if (!OV_pop_c(coord)) panic("no monster coord?"); + if (!OV_pop_c(mcoord)) panic("no monster coord?"); if (!OV_pop_typ(id, SPOVAR_MONST)) panic("no mon type"); tmpmons.id = SP_MONST_PM(OV_i(id)); tmpmons.class = SP_MONST_CLASS(OV_i(id)); - tmpmons.coord = OV_i(coord); + tmpmons.coord = OV_i(mcoord); tmpmons.has_invent = OV_i(has_inv); create_monster(&tmpmons, coder->croom); @@ -2675,7 +2769,7 @@ spo_monster(coder) Free(tmpmons.appear_as.str); opvar_free(id); - opvar_free(coord); + opvar_free(mcoord); opvar_free(has_inv); opvar_free(varparam); } @@ -2837,22 +2931,23 @@ spo_level_flags(coder) struct sp_coder *coder; { struct opvar *flagdata; - long flags; + long lflags; if (!OV_pop_i(flagdata)) return; - flags = OV_i(flagdata); + lflags = OV_i(flagdata); - if (flags & NOTELEPORT) level.flags.noteleport = 1; - if (flags & HARDFLOOR) level.flags.hardfloor = 1; - if (flags & NOMMAP) level.flags.nommap = 1; - if (flags & SHORTSIGHTED) level.flags.shortsighted = 1; - if (flags & ARBOREAL) level.flags.arboreal = 1; - if (flags & MAZELEVEL) level.flags.is_maze_lev = 1; - if (flags & PREMAPPED) coder->premapped = TRUE; - if (flags & SHROUD) level.flags.hero_memory = 0; - if (flags & GRAVEYARD) level.flags.graveyard = 1; - if (flags & ICEDPOOLS) icedpools = TRUE; - if (flags & SOLIDIFY) coder->solidify = TRUE; + if (lflags & NOTELEPORT) level.flags.noteleport = 1; + if (lflags & HARDFLOOR) level.flags.hardfloor = 1; + if (lflags & NOMMAP) level.flags.nommap = 1; + if (lflags & SHORTSIGHTED) level.flags.shortsighted = 1; + if (lflags & ARBOREAL) level.flags.arboreal = 1; + if (lflags & MAZELEVEL) level.flags.is_maze_lev = 1; + if (lflags & PREMAPPED) coder->premapped = TRUE; + if (lflags & SHROUD) level.flags.hero_memory = 0; + if (lflags & GRAVEYARD) level.flags.graveyard = 1; + if (lflags & ICEDPOOLS) icedpools = TRUE; + if (lflags & SOLIDIFY) coder->solidify = TRUE; + if (lflags & CORRMAZE) level.flags.corrmaze = TRUE; opvar_free(flagdata); } @@ -2902,19 +2997,19 @@ void spo_engraving(coder) struct sp_coder *coder; { - struct opvar *etyp, *txt, *coord; + struct opvar *etyp, *txt, *ecoord; xchar x,y; if (!OV_pop_i(etyp) || !OV_pop_s(txt) || - !OV_pop_c(coord)) return; + !OV_pop_c(ecoord)) return; - get_location_coord(&x, &y, DRY, coder->croom, OV_i(coord)); + get_location_coord(&x, &y, DRY, coder->croom, OV_i(ecoord)); make_engr_at(x, y, OV_s(txt), 0L, OV_i(etyp)); opvar_free(etyp); opvar_free(txt); - opvar_free(coord); + opvar_free(ecoord); } void @@ -2940,10 +3035,10 @@ void spo_room(coder) struct sp_coder *coder; { - if (coder->n_subroom > MAX_NESTED_ROOMS) + if (coder->n_subroom > MAX_NESTED_ROOMS) { panic("Too deeply nested rooms?!"); - else { - struct opvar *flags, *h, *w, *yalign, *xalign, + } else { + struct opvar *rflags, *h, *w, *yalign, *xalign, *y, *x, *rlit, *chance, *rtype; room tmproom; @@ -2955,7 +3050,7 @@ spo_room(coder) !OV_pop_i(x) || !OV_pop_i(yalign) || !OV_pop_i(xalign) || - !OV_pop_i(flags) || + !OV_pop_i(rflags) || !OV_pop_i(rlit) || !OV_pop_i(chance) || !OV_pop_i(rtype)) return; @@ -2970,9 +3065,9 @@ spo_room(coder) tmproom.rtype = OV_i(rtype); tmproom.chance = OV_i(chance); tmproom.rlit = OV_i(rlit); - tmproom.filled = (OV_i(flags) & (1 << 0)); - /*tmproom.irregular = (OV_i(flags) & (1 << 1));*/ - tmproom.joined = !(OV_i(flags) & (1 << 2)); + tmproom.filled = (OV_i(rflags) & (1 << 0)); + /*tmproom.irregular = (OV_i(rflags) & (1 << 1));*/ + tmproom.joined = !(OV_i(rflags) & (1 << 2)); opvar_free(x); opvar_free(y); @@ -2983,7 +3078,7 @@ spo_room(coder) opvar_free(rtype); opvar_free(chance); opvar_free(rlit); - opvar_free(flags); + opvar_free(rflags); if (!coder->failed_room[coder->n_subroom-1]) { tmpcr = build_room(&tmproom, coder->croom); @@ -3028,18 +3123,18 @@ spo_stair(coder) struct sp_coder *coder; { xchar x,y; - struct opvar *up, *coord; + struct opvar *up, *scoord; struct trap *badtrap; if (!OV_pop_i(up) || - !OV_pop_c(coord)) return; + !OV_pop_c(scoord)) return; - get_location_coord(&x, &y, DRY, coder->croom, OV_i(coord)); + get_location_coord(&x, &y, DRY, coder->croom, OV_i(scoord)); if ((badtrap = t_at(x,y)) != 0) deltrap(badtrap); mkstairs(x, y, (char)OV_i(up), coder->croom); SpLev_Map[x][y] = 1; - opvar_free(coord); + opvar_free(scoord); opvar_free(up); } @@ -3048,12 +3143,12 @@ spo_ladder(coder) struct sp_coder *coder; { xchar x,y; - struct opvar *up, *coord; + struct opvar *up, *lcoord; if (!OV_pop_i(up) || - !OV_pop_c(coord)) return; + !OV_pop_c(lcoord)) return; - get_location_coord(&x, &y, DRY, coder->croom, OV_i(coord)); + get_location_coord(&x, &y, DRY, coder->croom, OV_i(lcoord)); levl[x][y].typ = LADDER; SpLev_Map[x][y] = 1; @@ -3064,7 +3159,7 @@ spo_ladder(coder) xdnladder = x; ydnladder = y; levl[x][y].ladder = LA_DOWN; } - opvar_free(coord); + opvar_free(lcoord); opvar_free(up); } @@ -3072,13 +3167,13 @@ void spo_grave(coder) struct sp_coder *coder; { - struct opvar *coord, *typ, *txt; + struct opvar *gcoord, *typ, *txt; schar x,y; if (!OV_pop_i(typ) || !OV_pop_s(txt) || - !OV_pop_c(coord)) return; + !OV_pop_c(gcoord)) return; - get_location_coord(&x, &y, DRY, coder->croom, OV_i(coord)); + get_location_coord(&x, &y, DRY, coder->croom, OV_i(gcoord)); if (isok(x, y) && !t_at(x, y)) { levl[x][y].typ = GRAVE; @@ -3089,7 +3184,7 @@ spo_grave(coder) } } - opvar_free(coord); + opvar_free(gcoord); opvar_free(typ); opvar_free(txt); } @@ -3098,20 +3193,20 @@ void spo_altar(coder) struct sp_coder *coder; { - struct opvar *al, *shrine, *coord; + struct opvar *al, *shrine, *acoord; altar tmpaltar; if (!OV_pop_i(al) || !OV_pop_i(shrine) || - !OV_pop_c(coord)) return; + !OV_pop_c(acoord)) return; - tmpaltar.coord = OV_i(coord); + tmpaltar.coord = OV_i(acoord); tmpaltar.align = OV_i(al); tmpaltar.shrine = OV_i(shrine); create_altar(&tmpaltar, coder->croom); - opvar_free(coord); + opvar_free(acoord); opvar_free(shrine); opvar_free(al); } @@ -3121,17 +3216,17 @@ spo_trap(coder) struct sp_coder *coder; { struct opvar *type; - struct opvar *coord; + struct opvar *tcoord; trap tmptrap; if (!OV_pop_i(type) || - !OV_pop_c(coord)) return; + !OV_pop_c(tcoord)) return; - tmptrap.coord = OV_i(coord); + tmptrap.coord = OV_i(tcoord); tmptrap.type = OV_i(type); create_trap(&tmptrap, coder->croom); - opvar_free(coord); + opvar_free(tcoord); opvar_free(type); } @@ -3139,15 +3234,16 @@ void spo_gold(coder) struct sp_coder *coder; { - struct opvar *coord, *amt; + struct opvar *gcoord, *amt; schar x,y; long amount; - if (!OV_pop_c(coord) || !OV_pop_i(amt)) return; + + if (!OV_pop_c(gcoord) || !OV_pop_i(amt)) return; amount = OV_i(amt); - get_location_coord(&x, &y, DRY, coder->croom, OV_i(coord)); + get_location_coord(&x, &y, DRY, coder->croom, OV_i(gcoord)); if (amount == -1) amount = rnd(200); mkgold(amount, x,y); - opvar_free(coord); + opvar_free(gcoord); opvar_free(amt); } @@ -3202,7 +3298,7 @@ selection_opvar(nbuf) return ov; } -char +xchar selection_getpoint(x,y,ov) int x,y; struct opvar *ov; @@ -3217,12 +3313,12 @@ void selection_setpoint(x,y,ov, c) int x,y; struct opvar *ov; - char c; + xchar c; { if (!ov || ov->spovartyp != SPOVAR_SEL) return; if (x < 0 || y < 0 || x >= COLNO || y >= ROWNO) return; - ov->vardata.str[COLNO*y + x] = (c + 1); + ov->vardata.str[COLNO*y + x] = (char)(c + 1); } struct opvar * @@ -3476,16 +3572,16 @@ line_dist_coord(x1,y1, x2,y2, x3,y3) long py = y2-y1; long s = px*px + py*py; long x, y, dx, dy, dist = 0; - float u = 0; + float lu = 0; if (x1 == x2 && y1 == y2) return isqrt(dist2(x1,y1, x3,y3)); - u = ((x3 - x1) * px + (y3 - y1) * py) / (float)s; - if (u > 1) u = 1; - else if (u < 0) u = 0; + lu = ((x3 - x1) * px + (y3 - y1) * py) / (float)s; + if (lu > 1) lu = 1; + else if (lu < 0) lu = 0; - x = x1 + u * px; - y = y1 + u * py; + x = x1 + lu * px; + y = y1 + lu * py; dx = x - x3; dy = y - y3; dist = isqrt(dx*dx + dy*dy); @@ -3642,7 +3738,7 @@ selection_do_randline(x1,y1,x2,y2,rough, rec, ov) void selection_iterate(ov, func, arg) struct opvar *ov; - void FDECL((*func), (int,int,genericptr_t)); + select_iter_func func; genericptr_t arg; { int x,y; @@ -3878,19 +3974,19 @@ void spo_region(coder) struct sp_coder *coder; { - struct opvar *rtype, *rlit, *flags, *area; + struct opvar *rtype, *rlit, *rflags, *area; xchar dx1,dy1,dx2,dy2; register struct mkroom *troom; boolean prefilled, room_not_needed, irregular, joined; - if (!OV_pop_i(flags) || + if (!OV_pop_i(rflags) || !OV_pop_i(rtype) || !OV_pop_i(rlit) || !OV_pop_r(area)) return; - prefilled = !(OV_i(flags) & (1 << 0)); - irregular = (OV_i(flags) & (1 << 1)); - joined = !(OV_i(flags) & (1 << 2)); + prefilled = !(OV_i(rflags) & (1 << 0)); + irregular = (OV_i(rflags) & (1 << 1)); + joined = !(OV_i(rflags) & (1 << 2)); if(OV_i(rtype) > MAXRTYPE) { OV_i(rtype) -= MAXRTYPE+1; @@ -3927,7 +4023,7 @@ spo_region(coder) light_region(&tmpregion); opvar_free(area); - opvar_free(flags); + opvar_free(rflags); opvar_free(rlit); opvar_free(rtype); @@ -3973,7 +4069,7 @@ spo_region(coder) } opvar_free(area); - opvar_free(flags); + opvar_free(rflags); opvar_free(rlit); opvar_free(rtype); } @@ -3983,18 +4079,18 @@ spo_drawbridge(coder) struct sp_coder *coder; { xchar x,y; - struct opvar *dir, *db_open, *coord; + struct opvar *dir, *db_open, *dcoord; if (!OV_pop_i(dir) || !OV_pop_i(db_open) || - !OV_pop_c(coord)) return; + !OV_pop_c(dcoord)) return; - get_location_coord(&x, &y, DRY|WET|HOT, coder->croom, OV_i(coord)); + get_location_coord(&x, &y, DRY|WET|HOT, coder->croom, OV_i(dcoord)); if (!create_drawbridge(x, y, OV_i(dir), OV_i(db_open))) impossible("Cannot create drawbridge."); SpLev_Map[x][y] = 1; - opvar_free(coord); + opvar_free(dcoord); opvar_free(db_open); opvar_free(dir); } @@ -4004,25 +4100,21 @@ spo_mazewalk(coder) struct sp_coder *coder; { xchar x,y; - struct opvar *ftyp, *fstocked,*fdir, *coord; + struct opvar *ftyp, *fstocked,*fdir, *mcoord; int dir; if (!OV_pop_i(ftyp) || !OV_pop_i(fstocked) || !OV_pop_i(fdir) || - !OV_pop_c(coord)) return; + !OV_pop_c(mcoord)) return; dir = OV_i(fdir); - get_location_coord(&x, &y, ANY_LOC, coder->croom, OV_i(coord)); + get_location_coord(&x, &y, ANY_LOC, coder->croom, OV_i(mcoord)); if (!isok(x,y)) return; if (OV_i(ftyp) < 1) { -#ifndef WALLIFIED_MAZE - OV_i(ftyp) = CORR; -#else - OV_i(ftyp) = ROOM; -#endif + OV_i(ftyp) = level.flags.corrmaze ? CORR : ROOM; } /* don't use move() - it doesn't use W_NORTH, etc. */ @@ -4066,7 +4158,7 @@ spo_mazewalk(coder) walkfrom(x, y, OV_i(ftyp)); if (OV_i(fstocked)) fill_empty_maze(); - opvar_free(coord); + opvar_free(mcoord); opvar_free(fdir); opvar_free(fstocked); opvar_free(ftyp); @@ -4121,6 +4213,7 @@ spo_room_door(coder) opvar_free(pos); } +/*ARGSUSED*/ void sel_set_wallify(x,y,arg) int x, y; @@ -4833,7 +4926,7 @@ sp_lev *lvl; { struct opvar *sel1, *sel2, *pt; if (!OV_pop_typ(sel1, SPOVAR_SEL)) panic("no sel1 for add"); - if (!OV_pop_typ(sel2, SPOVAR_SEL)) panic("no sel1 for add"); + if (!OV_pop_typ(sel2, SPOVAR_SEL)) panic("no sel2 for add"); pt = selection_logical_oper(sel1, sel2, '|'); opvar_free(sel1); opvar_free(sel2); @@ -4941,7 +5034,8 @@ sp_lev *lvl; { struct opvar *tmp = NULL, *tmp2 = NULL, *pt = selection_opvar(NULL); schar x1,y1,x2,y2; - if (!OV_pop_c(tmp) || !OV_pop_c(tmp2)) panic("no ter sel linecoord"); + if (!OV_pop_c(tmp)) panic("no ter sel linecoord1"); + if (!OV_pop_c(tmp2)) panic("no ter sel linecoord2"); get_location_coord(&x1, &y1, ANY_LOC, coder->croom, OV_i(tmp)); get_location_coord(&x2, &y2, ANY_LOC, coder->croom, OV_i(tmp2)); x1 = (x1 < 0) ? 0 : x1; @@ -4958,7 +5052,9 @@ sp_lev *lvl; { struct opvar *tmp = NULL, *tmp2 = NULL, *tmp3, *pt = selection_opvar(NULL); schar x1,y1,x2,y2; - if (!OV_pop_i(tmp3) || !OV_pop_c(tmp) || !OV_pop_c(tmp2)) panic("no ter sel randline"); + if (!OV_pop_i(tmp3)) panic("no ter sel randline1"); + if (!OV_pop_c(tmp)) panic("no ter sel randline2"); + if (!OV_pop_c(tmp2)) panic("no ter sel randline3"); get_location_coord(&x1, &y1, ANY_LOC, coder->croom, OV_i(tmp)); get_location_coord(&x2, &y2, ANY_LOC, coder->croom, OV_i(tmp2)); x1 = (x1 < 0) ? 0 : x1; @@ -5029,25 +5125,28 @@ sp_lev *lvl; break; case SPO_SEL_GRADIENT: { - struct opvar *gtyp, *glim, *mind, *maxd, *coord, *coord2; + struct opvar *gtyp, *glim, *mind, *maxd, *gcoord, *coord2; struct opvar *sel; schar x,y, x2,y2; if (!OV_pop_i(gtyp)) panic("no gtyp for grad"); if (!OV_pop_i(glim)) panic("no glim for grad"); if (!OV_pop_c(coord2)) panic("no coord2 for grad"); - if (!OV_pop_c(coord)) panic("no coord for grad"); + if (!OV_pop_c(gcoord)) panic("no coord for grad"); if (!OV_pop_i(maxd)) panic("no maxd for grad"); if (!OV_pop_i(mind)) panic("no mind for grad"); - get_location_coord(&x, &y, ANY_LOC, coder->croom, OV_i(coord)); - get_location_coord(&x2, &y2, ANY_LOC, coder->croom, OV_i(coord2)); + get_location_coord(&x, &y, ANY_LOC, coder->croom, + OV_i(gcoord)); + get_location_coord(&x2, &y2, ANY_LOC, coder->croom, + OV_i(coord2)); sel = selection_opvar(NULL); - selection_do_gradient(sel, x,y, x2,y2, OV_i(gtyp), OV_i(mind), OV_i(maxd), OV_i(glim)); + selection_do_gradient(sel, x,y, x2,y2, OV_i(gtyp), + OV_i(mind), OV_i(maxd), OV_i(glim)); splev_stack_push(coder->stack, sel); opvar_free(gtyp); opvar_free(glim); - opvar_free(coord); + opvar_free(gcoord); opvar_free(coord2); opvar_free(maxd); opvar_free(mind); @@ -5064,7 +5163,14 @@ next_opcode: link_doors_rooms(); fill_rooms(); remove_boundary_syms(); - wallification(1, 0, COLNO-1, ROWNO-1); + /* FIXME: Ideally, we want this call to only cover areas of the map + * which were not inserted directly by the special level file (see + * the insect legs on Baalzebub's level, for instance). Since that + * is currently not possible, we overload the corrmaze flag for this + * purpose. + */ + if (!level.flags.corrmaze) + wallification(1, 0, COLNO-1, ROWNO-1); count_features(); diff --git a/src/topten.c b/src/topten.c index 0614eaeed..c803aac39 100644 --- a/src/topten.c +++ b/src/topten.c @@ -353,8 +353,9 @@ encodexlogflags() { long e = 0L; - if (wizard) e |= 1L << 0; - if (discover) e |= 1L << 1; + if (wizard) e |= 1L << 0; + if (discover) e |= 1L << 1; + if (!u.uroleplay.numbones) e |= 1L << 2; return e; } diff --git a/src/trap.c b/src/trap.c index 93b1df8f3..846160350 100644 --- a/src/trap.c +++ b/src/trap.c @@ -1,4 +1,4 @@ -/* NetHack 3.5 trap.c $NHDT-Date: 1427331767 2015/03/26 01:02:47 $ $NHDT-Branch: master $:$NHDT-Revision: 1.199 $ */ +/* NetHack 3.5 trap.c $NHDT-Date: 1427934551 2015/04/02 00:29:11 $ $NHDT-Branch: master $:$NHDT-Revision: 1.223 $ */ /* NetHack 3.5 trap.c $Date: 2013/03/14 01:58:21 $ $Revision: 1.179 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -3169,7 +3169,6 @@ struct obj *obj; const char *ostr; boolean force; { - boolean exploded = FALSE; if (!obj) return ER_NOTHING; if (snuff_lit(obj)) diff --git a/sys/share/NetHack.cnf b/sys/share/NetHack.cnf index 29d8ce910..2b16dfcc7 100644 --- a/sys/share/NetHack.cnf +++ b/sys/share/NetHack.cnf @@ -121,3 +121,14 @@ OPTIONS=time,noshowexp,number_pad:2,lit_corridor # DEC Rainbows will hang if rawio is set, so they should instead use: #OPTIONS=BIOS,DECgraphics +# Colored menus. +#OPTIONS=menucolors +# Syntax is: MENUCOLOR="string_to_match"=color&attribute +# Colors: black, red, green, brown, blue, magenta, cyan, gray, orange, +# lightgreen, yellow, lightblue, lightmagenta, lightcyan, white. +# Attributes: none, bold, dim, underline, blink, inverse. +#MENUCOLOR=" blessed "=green +#MENUCOLOR=" holy "=green +#MENUCOLOR=" cursed "=red +#MENUCOLOR=" unholy "=red +#MENUCOLOR=" cursed .* (being worn)"=orange&underline diff --git a/sys/share/lev_lex.c b/sys/share/lev_lex.c index 91f13e8f8..bfe700ceb 100644 --- a/sys/share/lev_lex.c +++ b/sys/share/lev_lex.c @@ -369,8 +369,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 197 -#define YY_END_OF_BUFFER 198 +#define YY_NUM_RULES 198 +#define YY_END_OF_BUFFER 199 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -378,123 +378,122 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[1049] = +static yyconst flex_int16_t yy_accept[1038] = { 0, - 0, 0, 0, 0, 198, 196, 192, 191, 196, 196, - 196, 196, 196, 196, 195, 181, 189, 196, 190, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 196, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 192, 196, 195, 2, 196, 192, 196, 196, 195, 181, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 192, 196, 195, 192, 191, 185, - 0, 182, 183, 0, 0, 179, 195, 178, 180, 181, + 0, 0, 0, 0, 199, 197, 193, 192, 197, 197, + 197, 197, 197, 197, 196, 182, 190, 197, 191, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 197, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 193, 197, 196, 2, 197, 193, 197, 197, 196, 182, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 193, 197, 193, 192, 186, 0, 183, 184, + 0, 0, 180, 196, 179, 181, 182, 196, 188, 187, - 195, 187, 186, 184, 188, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 39, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 55, 195, 195, 0, 0, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 185, 189, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 39, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 55, 196, 196, 0, 0, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 153, 195, 195, 192, 0, - 0, 3, 195, 2, 2, 0, 192, 0, 179, 195, - 178, 181, 195, 195, 195, 195, 195, 39, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 192, 0, 2, - 0, 0, 195, 194, 0, 194, 176, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 54, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 153, 196, 196, 193, 0, 0, 3, 196, + 2, 2, 0, 193, 0, 180, 196, 179, 182, 196, + 196, 196, 196, 39, 196, 196, 196, 196, 196, 196, + 193, 0, 2, 0, 0, 195, 0, 195, 177, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 54, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 0, 196, 103, 196, 83, - 195, 195, 195, 0, 195, 103, 195, 83, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 79, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 81, 195, 195, 195, - 195, 138, 195, 195, 195, 195, 127, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 16, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 125, 195, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 79, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 81, + 196, 196, 196, 196, 138, 196, 196, 196, 196, 127, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 16, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 125, 196, 196, 196, 196, 196, 196, 196, 196, - 195, 195, 195, 195, 195, 195, 195, 80, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 193, - 195, 195, 195, 58, 195, 195, 195, 22, 195, 40, - 195, 41, 195, 195, 195, 195, 49, 195, 195, 195, - 195, 56, 6, 195, 195, 195, 53, 195, 195, 195, - 36, 195, 195, 195, 195, 42, 195, 35, 195, 195, - 195, 195, 195, 21, 195, 0, 177, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 159, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 154, - 157, 113, 195, 195, 195, 195, 195, 195, 195, 195, + 80, 196, 196, 196, 196, 196, 196, 196, 196, 194, + 196, 196, 196, 58, 196, 196, 196, 22, 196, 40, + 196, 41, 196, 196, 196, 196, 49, 196, 196, 196, + 196, 56, 6, 196, 196, 196, 53, 196, 196, 196, + 36, 196, 196, 196, 196, 42, 196, 35, 196, 196, + 196, 196, 196, 21, 196, 0, 178, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 159, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 154, 157, 113, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 69, 196, 196, 196, 196, - 195, 195, 195, 195, 69, 195, 195, 195, 195, 195, - 195, 195, 195, 120, 195, 195, 67, 195, 195, 195, - 195, 160, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 118, 195, 195, 195, 106, 195, 195, 195, 195, - 195, 195, 195, 65, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 156, 195, 195, 195, 195, 195, 115, 15, - 0, 195, 195, 195, 195, 195, 195, 2, 0, 28, - 195, 59, 195, 195, 195, 195, 195, 13, 195, 195, - 195, 50, 195, 195, 7, 195, 195, 195, 195, 5, + 196, 196, 196, 196, 120, 196, 196, 67, 196, 196, + 196, 196, 160, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 118, 196, 196, 196, 106, 196, 196, 196, + 196, 196, 196, 196, 65, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 156, 196, 196, 196, 196, 196, 115, + 15, 0, 196, 196, 196, 196, 196, 28, 196, 59, + 196, 196, 196, 196, 196, 13, 196, 196, 196, 50, + 196, 196, 7, 196, 196, 196, 196, 5, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 30, 196, 196, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 30, - 195, 195, 195, 195, 195, 119, 152, 195, 195, 195, - 146, 195, 195, 161, 195, 195, 195, 195, 195, 140, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 155, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 11, 195, 195, 195, 195, - 195, 195, 195, 112, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 124, 195, 12, 195, - 195, 195, 195, 195, 195, 195, 82, 114, 195, 195, + 196, 196, 196, 119, 152, 196, 196, 196, 146, 196, + 196, 161, 196, 196, 196, 196, 196, 140, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 155, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 11, 196, 196, 196, 196, 196, + 196, 196, 112, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 124, 196, 12, 196, 196, + 196, 196, 196, 196, 196, 82, 114, 196, 196, 196, + 196, 196, 196, 196, 196, 128, 196, 196, 196, 196, - 195, 195, 195, 195, 195, 195, 128, 195, 195, 195, - 195, 195, 33, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 29, 195, 195, 195, 195, 195, 195, 17, - 31, 195, 27, 195, 195, 195, 195, 57, 195, 195, - 195, 195, 145, 96, 195, 195, 126, 110, 86, 195, - 122, 72, 107, 195, 195, 195, 164, 195, 195, 87, - 195, 93, 129, 195, 74, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 134, 195, - 195, 108, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 109, 167, 195, 195, 16, 195, 195, 195, 195, + 33, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 29, 196, 196, 196, 196, 196, 196, 17, 31, 196, + 27, 196, 196, 196, 196, 57, 196, 196, 196, 196, + 145, 96, 196, 196, 126, 110, 86, 196, 122, 72, + 107, 196, 196, 196, 196, 164, 196, 196, 87, 196, + 93, 129, 196, 74, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 134, 196, 196, + 108, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 109, 167, 196, 196, 16, 196, 196, 196, 196, 77, + 196, 116, 196, 196, 196, 196, 196, 111, 196, 196, - 77, 195, 116, 195, 195, 195, 195, 195, 111, 195, - 195, 195, 151, 172, 195, 195, 78, 195, 195, 195, - 195, 195, 195, 195, 195, 1, 195, 57, 195, 195, - 195, 60, 195, 195, 195, 195, 195, 195, 195, 4, - 195, 19, 195, 195, 195, 195, 195, 62, 43, 195, - 46, 26, 195, 162, 98, 195, 195, 195, 195, 73, - 158, 195, 195, 97, 195, 195, 195, 92, 195, 195, - 195, 195, 144, 195, 195, 195, 195, 135, 195, 195, - 195, 195, 195, 20, 63, 139, 137, 195, 195, 195, - 195, 195, 195, 195, 117, 195, 131, 95, 195, 150, + 196, 151, 172, 196, 196, 78, 196, 196, 196, 196, + 196, 196, 196, 196, 1, 57, 196, 196, 196, 60, + 196, 196, 196, 196, 196, 196, 196, 4, 196, 19, + 196, 196, 196, 196, 196, 62, 43, 196, 46, 26, + 196, 162, 98, 196, 196, 196, 196, 196, 73, 158, + 196, 196, 97, 196, 196, 196, 92, 196, 196, 196, + 196, 144, 196, 196, 196, 196, 135, 196, 196, 196, + 196, 196, 20, 63, 139, 137, 196, 196, 196, 196, + 196, 196, 196, 117, 196, 131, 95, 196, 150, 196, + 196, 196, 196, 196, 100, 47, 89, 196, 196, 196, - 195, 195, 195, 195, 195, 100, 47, 89, 195, 195, - 195, 195, 195, 26, 195, 45, 195, 195, 34, 61, - 14, 8, 25, 195, 195, 195, 195, 195, 23, 195, - 168, 195, 195, 195, 101, 195, 66, 195, 75, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 149, 9, 195, 195, 195, 195, 143, 195, 85, 68, - 195, 71, 195, 195, 195, 195, 175, 163, 130, 133, - 195, 105, 18, 195, 51, 195, 195, 195, 195, 195, - 195, 94, 141, 195, 195, 70, 173, 121, 195, 166, - 195, 174, 91, 132, 84, 147, 148, 170, 195, 195, + 196, 196, 196, 45, 196, 196, 34, 61, 14, 8, + 25, 196, 196, 196, 196, 196, 23, 196, 168, 196, + 196, 196, 101, 176, 196, 66, 196, 75, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 149, + 9, 196, 196, 196, 196, 143, 196, 85, 68, 196, + 71, 196, 196, 196, 196, 175, 163, 130, 133, 196, + 105, 18, 196, 51, 196, 196, 196, 196, 196, 196, + 94, 141, 196, 196, 70, 173, 121, 196, 166, 196, + 174, 91, 132, 84, 147, 148, 170, 196, 196, 99, + 171, 90, 196, 64, 196, 10, 136, 24, 52, 196, - 99, 171, 90, 195, 64, 195, 10, 136, 24, 52, - 195, 195, 195, 195, 195, 76, 88, 123, 104, 195, - 165, 102, 195, 195, 195, 195, 195, 195, 195, 195, - 37, 38, 195, 195, 195, 142, 169, 195, 195, 195, - 195, 195, 195, 195, 48, 32, 44, 0 + 196, 196, 196, 196, 76, 88, 123, 104, 196, 165, + 102, 196, 196, 196, 196, 196, 196, 196, 196, 37, + 38, 196, 196, 196, 142, 169, 196, 196, 196, 196, + 196, 196, 196, 48, 32, 44, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -534,254 +533,252 @@ static yyconst flex_int32_t yy_meta[75] = 1, 2, 3, 2, 2, 1, 1, 2, 1, 1, 1, 2, 4, 2, 4, 1, 1, 1, 5, 5, 5, 6, 6, 5, 6, 5, 5, 6, 5, 5, - 5, 6, 6, 5, 6, 6, 5, 5, 5, 6, - 5, 6, 5, 6, 1, 2, 1, 6, 6, 6, + 6, 6, 6, 5, 6, 6, 5, 5, 6, 6, + 5, 6, 6, 6, 1, 2, 1, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 5, 6, 6 } ; -static yyconst flex_int16_t yy_base[1056] = +static yyconst flex_int16_t yy_base[1045] = { 0, - 0, 73, 102, 77, 1287, 1288, 75, 1288, 1283, 1268, - 1277, 0, 1237, 1267, 1266, 78, 66, 1263, 1262, 1248, - 1241, 57, 63, 59, 64, 101, 0, 63, 79, 119, - 94, 1256, 1242, 128, 127, 126, 1255, 104, 109, 118, - 133, 94, 139, 151, 1207, 95, 132, 1209, 157, 164, - 154, 100, 166, 1202, 173, 175, 176, 56, 1217, 1216, - 239, 1265, 226, 1288, 1264, 252, 248, 258, 271, 157, - 162, 120, 248, 216, 274, 1251, 201, 249, 296, 140, - 306, 301, 176, 265, 346, 352, 369, 232, 1288, 1288, - 1258, 1288, 0, 1253, 1252, 1247, 0, 1246, 1288, 278, + 0, 73, 102, 77, 1235, 1236, 75, 1236, 1231, 1216, + 1225, 0, 1185, 1215, 1214, 78, 66, 1211, 1210, 1196, + 1189, 57, 63, 59, 64, 101, 0, 63, 79, 119, + 94, 1204, 1190, 122, 123, 121, 1203, 104, 105, 100, + 124, 90, 129, 137, 1155, 84, 117, 1157, 139, 150, + 151, 151, 156, 1150, 163, 168, 166, 56, 1165, 1164, + 232, 1213, 216, 1236, 1212, 242, 248, 251, 264, 196, + 155, 167, 208, 228, 241, 1199, 249, 242, 195, 277, + 284, 223, 319, 334, 257, 1236, 1236, 1206, 1236, 0, + 1201, 1200, 1195, 0, 1194, 1236, 298, 1193, 1236, 1236, - 1245, 1288, 1288, 1288, 1288, 1221, 246, 1221, 234, 1233, - 1223, 1236, 1217, 1228, 1225, 1232, 260, 1218, 1216, 1218, - 1228, 0, 1219, 1223, 1204, 1210, 1198, 1204, 1208, 1207, - 1207, 246, 1209, 270, 1204, 301, 1202, 1195, 1201, 1213, - 1211, 1203, 306, 0, 1210, 1198, 347, 208, 301, 1154, - 1176, 1165, 1171, 1174, 317, 1154, 1158, 1154, 1157, 1156, - 1168, 1150, 1152, 338, 1148, 1142, 1139, 1144, 1143, 1149, - 1153, 1144, 1146, 1144, 1144, 300, 348, 280, 337, 1150, - 1132, 1135, 1143, 1128, 217, 345, 1147, 314, 26, 1135, - 1134, 1134, 1125, 360, 1135, 1139, 1125, 1141, 1136, 1139, + 1236, 1236, 1169, 263, 1169, 264, 1181, 1171, 1184, 1165, + 1176, 1173, 1180, 270, 1166, 1164, 1166, 1176, 0, 1167, + 1171, 1152, 1158, 1146, 1152, 1156, 1155, 1155, 280, 1157, + 292, 1152, 301, 1150, 1143, 1149, 1161, 1159, 1151, 259, + 0, 1158, 1146, 203, 304, 272, 1102, 1124, 1113, 1119, + 1122, 288, 1102, 1106, 1102, 1105, 1104, 1116, 1098, 1100, + 308, 1096, 1090, 1087, 1092, 1091, 1097, 1101, 1092, 1094, + 1092, 1092, 234, 281, 296, 299, 1098, 1080, 1083, 1091, + 1076, 81, 315, 1095, 324, 26, 1083, 1082, 1082, 1073, + 330, 1083, 1087, 1073, 1089, 1084, 1087, 281, 333, 1080, - 356, 359, 1132, 1134, 1130, 1122, 372, 259, 325, 1114, - 1113, 1115, 1116, 366, 376, 0, 1113, 349, 435, 1175, - 1174, 1288, 397, 1288, 1288, 1173, 442, 446, 449, 1160, - 0, 423, 404, 424, 316, 439, 440, 1159, 305, 441, - 442, 444, 445, 447, 448, 170, 450, 484, 0, 1288, - 1170, 0, 456, 1288, 1161, 1160, 1155, 1150, 1136, 1148, - 1143, 1127, 1128, 1144, 1126, 1120, 1137, 1123, 1120, 1132, - 0, 1124, 1134, 1123, 1131, 1112, 1113, 1128, 1126, 1114, - 1124, 1109, 1122, 1107, 1120, 1123, 1093, 1117, 1109, 1100, - 1115, 1109, 1105, 1103, 1109, 1103, 1104, 1094, 1091, 1105, + 1082, 1078, 1070, 342, 323, 321, 1062, 1061, 1063, 1064, + 345, 350, 0, 1061, 332, 407, 1123, 1122, 1236, 363, + 1236, 1236, 1121, 411, 415, 416, 1108, 0, 412, 390, + 396, 404, 415, 1107, 337, 410, 420, 417, 423, 424, + 0, 0, 1236, 1118, 0, 1236, 1109, 1108, 1103, 1098, + 1084, 1096, 1091, 1075, 1076, 1092, 1074, 1068, 1085, 1071, + 1068, 1080, 0, 1072, 1082, 1071, 1079, 1060, 1061, 1076, + 1074, 1062, 1072, 1057, 1070, 1055, 1068, 1071, 1041, 1065, + 1057, 1048, 1063, 1057, 1053, 1051, 1057, 1051, 1052, 1042, + 1039, 1053, 1039, 1040, 1043, 326, 1017, 0, 1022, 0, - 1091, 1092, 1095, 462, 1069, 0, 1074, 0, 1059, 1068, - 1058, 1060, 1051, 1055, 1053, 1047, 1055, 416, 1062, 1044, - 1048, 1059, 1042, 1048, 1043, 1052, 1038, 1042, 0, 1035, - 1034, 1044, 1034, 1047, 1031, 1048, 416, 1043, 1032, 427, - 1045, 1022, 1038, 1039, 1033, 1021, 0, 1036, 1030, 1033, - 1023, 0, 1016, 1017, 1025, 1028, 0, 1021, 1026, 1015, - 1027, 1017, 1022, 1021, 402, 1020, 1004, 1011, 1007, 1008, - 440, 1000, 1014, 1013, 1003, 1015, 1012, 1001, 999, 1003, - 1007, 426, 989, 1000, 1000, 1004, 985, 1002, 986, 989, - 997, 983, 438, 991, 979, 997, 983, 978, 0, 979, + 1007, 1016, 1006, 1008, 999, 1003, 1001, 995, 1003, 380, + 1010, 992, 996, 1007, 990, 996, 991, 1000, 987, 985, + 989, 0, 982, 981, 991, 981, 994, 978, 995, 380, + 990, 979, 389, 992, 969, 985, 986, 980, 968, 0, + 983, 977, 980, 970, 0, 963, 964, 972, 975, 0, + 968, 973, 962, 974, 964, 969, 968, 376, 967, 951, + 958, 954, 955, 394, 947, 961, 960, 950, 962, 959, + 948, 946, 950, 954, 390, 936, 947, 947, 951, 932, + 949, 933, 936, 944, 930, 394, 938, 926, 944, 930, + 925, 0, 926, 936, 919, 930, 923, 928, 916, 915, - 989, 972, 983, 976, 981, 969, 968, 0, 495, 487, - 481, 1004, 488, 490, 492, 493, 495, 496, 512, 1288, - 998, 1012, 1003, 0, 1012, 1003, 990, 0, 1008, 0, - 1008, 0, 989, 987, 986, 1000, 0, 999, 973, 997, - 989, 0, 977, 998, 980, 977, 0, 980, 490, 992, - 0, 993, 978, 977, 990, 986, 983, 0, 970, 972, - 983, 969, 983, 0, 974, 476, 1288, 938, 933, 932, - 944, 941, 942, 927, 941, 940, 928, 937, 936, 0, - 935, 934, 919, 925, 931, 926, 922, 912, 927, 0, - 0, 0, 915, 929, 924, 923, 915, 464, 921, 916, + 0, 452, 446, 445, 951, 438, 447, 451, 452, 1236, + 945, 959, 950, 0, 959, 950, 937, 0, 955, 0, + 955, 0, 936, 934, 933, 947, 0, 946, 920, 944, + 936, 0, 924, 945, 927, 924, 0, 927, 447, 939, + 0, 940, 925, 924, 937, 933, 930, 0, 917, 919, + 930, 916, 930, 0, 921, 465, 1236, 885, 880, 879, + 891, 888, 889, 874, 888, 887, 875, 884, 883, 0, + 882, 881, 866, 872, 878, 873, 869, 859, 866, 873, + 0, 0, 0, 861, 875, 870, 869, 861, 418, 867, + 862, 866, 860, 863, 848, 0, 901, 859, 838, 854, - 920, 914, 917, 902, 0, 955, 913, 892, 908, 900, - 896, 907, 908, 0, 907, 891, 0, 905, 908, 894, - 897, 0, 465, 887, 885, 879, 885, 893, 886, 899, - 884, 0, 890, 885, 893, 0, 883, 889, 892, 872, - 890, 458, 889, 0, 877, 866, 867, 871, 880, 864, - 878, 882, 878, 860, 865, 857, 873, 868, 857, 860, - 872, 856, 0, 853, 858, 860, 467, 859, 0, 1288, - 912, 507, 895, 516, 517, 521, 519, 1288, 910, 0, - 886, 0, 884, 888, 879, 872, 867, 0, 887, 878, - 866, 0, 872, 866, 0, 882, 875, 880, 875, 0, + 846, 842, 853, 854, 0, 853, 837, 0, 851, 854, + 840, 843, 0, 417, 833, 831, 825, 831, 839, 832, + 845, 830, 0, 836, 831, 839, 0, 829, 835, 838, + 818, 836, 413, 835, 0, 823, 812, 813, 817, 826, + 810, 824, 828, 824, 806, 811, 803, 819, 814, 803, + 806, 818, 802, 0, 799, 804, 806, 417, 805, 0, + 1236, 858, 460, 841, 464, 465, 468, 0, 833, 0, + 831, 835, 826, 819, 814, 0, 834, 825, 813, 0, + 819, 813, 0, 829, 822, 827, 822, 0, 817, 824, + 804, 811, 809, 807, 817, 804, 806, 0, 802, 808, - 870, 877, 857, 864, 862, 860, 870, 857, 859, 0, - 855, 861, 853, 858, 860, 0, 0, 830, 818, 828, - 0, 827, 826, 0, 817, 815, 824, 815, 808, 0, - 820, 820, 816, 817, 802, 816, 800, 796, 485, 0, - 812, 812, 810, 796, 799, 806, 806, 785, 804, 478, - 796, 792, 794, 790, 795, 782, 798, 794, 795, 795, - 778, 778, 791, 777, 789, 0, 788, 776, 790, 783, - 771, 772, 786, 0, 781, 765, 759, 777, 766, 772, - 768, 770, 765, 759, 775, 770, 0, 759, 0, 752, - 752, 751, 750, 750, 763, 763, 491, 0, 761, 760, + 800, 805, 807, 0, 0, 777, 765, 775, 0, 774, + 773, 0, 764, 762, 771, 762, 755, 0, 767, 767, + 763, 764, 749, 766, 762, 746, 742, 435, 0, 758, + 758, 756, 742, 745, 752, 752, 731, 750, 428, 742, + 738, 740, 736, 741, 728, 744, 740, 741, 741, 724, + 724, 737, 723, 735, 0, 734, 722, 736, 729, 717, + 718, 732, 0, 727, 711, 705, 723, 712, 718, 714, + 716, 711, 705, 721, 716, 0, 705, 0, 698, 698, + 697, 696, 696, 709, 709, 436, 0, 707, 706, 701, + 704, 689, 695, 692, 696, 0, 701, 717, 476, 477, - 755, 758, 743, 749, 746, 750, 0, 755, 771, 524, - 526, 532, 0, 772, 770, 764, 774, 773, 772, 765, - 761, 777, 0, 765, 771, 763, 756, 766, 750, 0, - 0, 720, 0, 88, 261, 336, 519, 0, 515, 523, - 514, 509, 0, 0, 507, 508, 0, 0, 0, 501, - 0, 0, 0, 500, 502, 511, 0, 512, 513, 0, - 501, 0, 0, 517, 0, 514, 513, 509, 523, 521, - 521, 518, 513, 515, 525, 516, 530, 521, 0, 525, - 531, 0, 515, 517, 535, 530, 518, 523, 537, 531, - 530, 0, 0, 533, 530, 0, 521, 527, 533, 530, + 0, 718, 716, 710, 720, 719, 718, 711, 707, 723, + 0, 711, 717, 709, 699, 691, 74, 0, 0, 110, + 0, 207, 230, 474, 467, 0, 467, 472, 462, 457, + 0, 0, 455, 456, 0, 0, 0, 449, 0, 0, + 0, 448, 450, 460, 440, 0, 462, 463, 0, 451, + 0, 0, 467, 0, 464, 463, 459, 473, 471, 471, + 468, 463, 465, 475, 466, 480, 471, 0, 475, 481, + 0, 465, 467, 485, 480, 468, 473, 487, 481, 480, + 0, 0, 483, 480, 0, 471, 477, 483, 480, 0, + 487, 505, 496, 486, 501, 488, 494, 0, 490, 500, - 0, 537, 555, 546, 536, 551, 538, 544, 0, 540, - 550, 551, 0, 0, 552, 556, 0, 559, 550, 561, - 561, 562, 563, 549, 569, 0, 604, 605, 606, 599, - 587, 0, 602, 593, 594, 596, 586, 596, 602, 0, - 605, 0, 608, 597, 614, 588, 601, 0, 0, 600, - 0, 0, 579, 0, 0, 587, 588, 589, 591, 0, - 0, 581, 577, 0, 586, 579, 582, 0, 596, 596, - 589, 585, 0, 594, 595, 607, 594, 0, 592, 606, - 592, 609, 609, 0, 0, 0, 0, 606, 601, 612, - 606, 614, 595, 616, 1288, 617, 0, 0, 619, 0, + 501, 0, 0, 502, 506, 0, 509, 500, 511, 511, + 512, 513, 499, 519, 0, 554, 555, 548, 536, 0, + 551, 542, 543, 544, 534, 544, 550, 0, 553, 0, + 556, 545, 562, 536, 549, 0, 0, 548, 0, 0, + 527, 0, 0, 535, 536, 537, 539, 539, 0, 0, + 530, 526, 0, 535, 528, 531, 0, 545, 545, 538, + 534, 0, 543, 544, 556, 543, 0, 541, 555, 541, + 558, 558, 0, 0, 0, 0, 555, 550, 561, 555, + 563, 544, 565, 1236, 566, 0, 0, 568, 0, 572, + 559, 568, 564, 552, 0, 0, 0, 574, 575, 576, - 623, 610, 619, 615, 603, 0, 0, 0, 625, 626, - 627, 627, 621, 667, 647, 0, 659, 660, 0, 0, - 0, 0, 0, 642, 668, 647, 656, 652, 0, 643, - 0, 640, 641, 632, 0, 632, 0, 636, 0, 645, - 630, 643, 634, 652, 635, 650, 638, 643, 653, 641, - 0, 0, 648, 654, 644, 659, 0, 660, 0, 0, - 661, 0, 650, 653, 660, 657, 0, 0, 0, 0, - 666, 0, 0, 696, 0, 697, 701, 703, 687, 701, - 689, 0, 0, 658, 673, 0, 0, 0, 660, 0, - 669, 0, 0, 0, 0, 0, 0, 0, 668, 663, + 576, 570, 595, 0, 607, 608, 0, 0, 0, 0, + 0, 590, 616, 595, 604, 600, 0, 591, 0, 588, + 589, 580, 0, 0, 580, 0, 584, 0, 593, 578, + 591, 582, 600, 583, 598, 586, 591, 601, 589, 0, + 0, 596, 602, 592, 607, 0, 608, 0, 0, 609, + 0, 598, 601, 608, 605, 0, 0, 0, 0, 614, + 0, 0, 644, 0, 645, 649, 651, 635, 649, 637, + 0, 0, 606, 621, 0, 0, 0, 608, 0, 617, + 0, 0, 0, 0, 0, 0, 0, 616, 611, 0, + 0, 0, 613, 0, 613, 0, 0, 0, 0, 652, - 0, 0, 0, 665, 0, 665, 0, 0, 0, 0, - 704, 705, 700, 701, 715, 0, 0, 0, 0, 686, - 0, 0, 687, 718, 712, 716, 708, 720, 694, 695, - 0, 0, 726, 730, 723, 0, 0, 718, 725, 720, - 718, 723, 724, 720, 0, 0, 0, 1288, 757, 759, - 765, 768, 774, 779, 784 + 653, 648, 649, 663, 0, 0, 0, 0, 634, 0, + 0, 635, 666, 660, 664, 656, 668, 642, 643, 0, + 0, 674, 678, 671, 0, 0, 666, 673, 668, 666, + 671, 672, 668, 0, 0, 0, 1236, 705, 707, 713, + 716, 722, 727, 732 } ; -static yyconst flex_int16_t yy_def[1056] = +static yyconst flex_int16_t yy_def[1045] = { 0, - 1048, 1, 1, 3, 1048, 1048, 1048, 1048, 1048, 1048, - 1049, 1050, 1051, 1048, 1052, 1052, 1048, 1048, 1048, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1048, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1048, 1053, 1052, 1048, 1048, 1054, 1054, 1054, 1052, 69, - 69, 69, 69, 1052, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 1054, 1053, 69, 1048, 1048, 1048, - 1049, 1048, 1050, 1048, 1055, 1048, 1052, 1052, 1048, 1052, + 1037, 1, 1, 3, 1037, 1037, 1037, 1037, 1037, 1037, + 1038, 1039, 1040, 1037, 1041, 1041, 1037, 1037, 1037, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1037, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1037, 1042, 1041, 1037, 1037, 1043, 1043, 1043, 1041, 69, + 69, 69, 69, 1041, 69, 69, 69, 69, 69, 69, + 69, 69, 1043, 1042, 1037, 1037, 1037, 1038, 1037, 1039, + 1037, 1044, 1037, 1041, 1041, 1037, 1041, 1041, 1037, 1037, - 1052, 1048, 1048, 1048, 1048, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1048, 1048, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, + 1037, 1037, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1037, 1037, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1048, 1053, - 1053, 1048, 1052, 1048, 1048, 1048, 1054, 1054, 1054, 69, - 69, 69, 69, 69, 1052, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 1054, 86, 1048, - 1053, 86, 69, 1048, 1048, 1048, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1037, 1042, 1042, 1037, 1041, + 1037, 1037, 1037, 83, 83, 83, 69, 69, 69, 69, + 69, 1041, 69, 69, 69, 69, 69, 69, 69, 69, + 83, 84, 1037, 1042, 84, 1037, 1037, 1037, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1037, 1041, 1041, 1041, 1041, - 1052, 1052, 1052, 1048, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 69, - 69, 1052, 69, 69, 69, 69, 69, 69, 69, 1048, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1048, 1048, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, + 1041, 1041, 69, 69, 1041, 69, 69, 69, 69, 1037, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1037, 1037, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1048, - 1048, 69, 1052, 69, 69, 69, 69, 1048, 1048, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1037, 1037, 69, 1041, 69, 69, 69, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 69, 69, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 69, - 69, 69, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 69, 69, 69, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1048, 1052, 1052, 1052, 1052, 1052, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 69, 69, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1037, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 69, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 0, 1048, 1048, - 1048, 1048, 1048, 1048, 1048 + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 0, 1037, 1037, 1037, + 1037, 1037, 1037, 1037 } ; -static yyconst flex_int16_t yy_nxt[1363] = +static yyconst flex_int16_t yy_nxt[1311] = { 0, 6, 7, 8, 9, 7, 10, 11, 6, 12, 6, 13, 14, 15, 6, 16, 17, 18, 19, 20, 21, @@ -790,152 +787,146 @@ static yyconst flex_int16_t yy_nxt[1363] = 37, 27, 27, 27, 38, 6, 6, 27, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 27, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 27, 27, 27, 61, 108, 88, 61, 61, 88, - 62, 85, 102, 103, 86, 110, 122, 99, 113, 109, - 114, 362, 100, 116, 123, 111, 117, 124, 112, 363, + 60, 27, 27, 27, 61, 105, 85, 61, 61, 85, + 62, 83, 99, 100, 84, 107, 119, 96, 110, 106, + 111, 355, 97, 113, 120, 108, 114, 121, 109, 356, - 115, 125, 118, 63, 64, 65, 66, 87, 147, 67, - 846, 126, 131, 68, 69, 67, 70, 215, 148, 216, - 71, 72, 73, 119, 74, 75, 132, 76, 77, 101, - 76, 78, 79, 120, 230, 80, 121, 127, 81, 82, - 76, 128, 83, 178, 76, 129, 135, 67, 143, 195, - 136, 130, 138, 139, 230, 107, 166, 179, 144, 167, - 137, 145, 168, 196, 140, 141, 99, 142, 149, 84, - 150, 232, 134, 76, 151, 152, 230, 155, 153, 154, - 156, 159, 180, 157, 230, 160, 158, 169, 161, 162, - 230, 233, 163, 181, 247, 164, 417, 182, 170, 173, + 112, 122, 115, 63, 64, 65, 66, 63, 144, 67, + 832, 123, 128, 68, 69, 67, 70, 212, 145, 213, + 71, 72, 73, 116, 74, 75, 129, 76, 77, 98, + 76, 78, 175, 117, 346, 79, 118, 124, 80, 81, + 132, 125, 82, 140, 133, 126, 176, 67, 135, 136, + 347, 127, 163, 141, 134, 164, 142, 833, 165, 152, + 137, 138, 153, 139, 146, 154, 147, 177, 155, 227, + 148, 149, 156, 76, 150, 151, 157, 166, 178, 158, + 159, 227, 179, 160, 230, 170, 161, 181, 167, 171, + 168, 182, 162, 172, 169, 183, 173, 185, 186, 189, - 171, 165, 192, 174, 172, 184, 193, 175, 101, 185, - 176, 188, 189, 186, 197, 230, 194, 304, 198, 187, - 190, 201, 148, 206, 238, 202, 191, 207, 212, 203, - 208, 199, 123, 88, 204, 205, 88, 209, 213, 210, - 219, 214, 211, 219, 223, 113, 220, 235, 128, 1048, - 225, 226, 129, 88, 225, 226, 227, 115, 130, 1048, - 225, 226, 230, 230, 259, 262, 234, 239, 260, 263, - 353, 125, 229, 225, 226, 228, 286, 287, 228, 230, - 109, 126, 228, 230, 228, 231, 354, 99, 230, 230, - 230, 230, 100, 847, 230, 271, 230, 230, 272, 230, + 192, 184, 104, 190, 194, 96, 187, 144, 195, 227, + 229, 198, 188, 191, 193, 199, 203, 145, 209, 200, + 204, 196, 227, 205, 201, 202, 231, 131, 210, 834, + 206, 211, 207, 216, 220, 208, 216, 227, 125, 217, + 106, 240, 126, 85, 222, 223, 224, 98, 127, 1037, + 222, 223, 1037, 222, 223, 227, 227, 110, 85, 232, + 235, 85, 835, 227, 122, 226, 222, 223, 225, 112, + 233, 225, 234, 114, 123, 225, 227, 225, 228, 115, + 120, 251, 227, 227, 227, 252, 331, 227, 292, 227, + 227, 227, 227, 227, 293, 254, 332, 227, 227, 255, - 230, 230, 289, 236, 230, 290, 117, 230, 230, 230, - 230, 230, 237, 230, 240, 230, 228, 212, 128, 230, - 230, 392, 241, 143, 393, 292, 278, 213, 130, 101, - 214, 242, 243, 144, 293, 300, 145, 412, 230, 343, - 268, 301, 230, 244, 245, 344, 246, 219, 225, 226, - 248, 147, 338, 249, 250, 251, 252, 305, 848, 252, - 306, 148, 339, 252, 252, 252, 252, 359, 307, 313, - 252, 252, 252, 314, 360, 252, 361, 252, 252, 315, - 252, 252, 252, 230, 394, 252, 324, 253, 252, 252, - 252, 128, 252, 395, 252, 241, 340, 252, 325, 326, + 227, 227, 236, 237, 227, 263, 140, 96, 264, 225, + 278, 279, 97, 296, 238, 138, 141, 239, 145, 142, + 216, 222, 223, 241, 281, 284, 242, 282, 297, 333, + 456, 298, 373, 334, 285, 227, 243, 244, 245, 299, + 305, 245, 374, 335, 306, 245, 245, 245, 245, 98, + 307, 227, 245, 245, 245, 336, 316, 245, 270, 245, + 245, 337, 245, 245, 338, 339, 340, 245, 317, 318, + 245, 245, 457, 319, 245, 348, 349, 352, 361, 245, + 387, 362, 350, 375, 353, 385, 354, 376, 386, 388, + 363, 364, 382, 393, 383, 365, 402, 366, 400, 401, - 341, 130, 345, 346, 347, 355, 356, 380, 368, 382, - 342, 369, 357, 383, 400, 407, 408, 381, 230, 252, - 370, 371, 389, 252, 390, 372, 402, 373, 384, 403, - 409, 391, 99, 404, 401, 405, 219, 232, 230, 219, - 281, 410, 220, 88, 225, 226, 227, 1048, 225, 226, - 1048, 225, 226, 230, 230, 230, 230, 413, 230, 230, - 411, 230, 230, 229, 230, 415, 466, 416, 525, 526, - 230, 273, 479, 283, 101, 498, 296, 480, 502, 418, - 466, 543, 414, 499, 281, 219, 225, 226, 248, 419, - 531, 249, 532, 544, 555, 230, 503, 570, 571, 281, + 395, 384, 377, 396, 227, 245, 273, 397, 216, 398, + 227, 216, 85, 394, 217, 224, 1037, 1037, 225, 225, + 225, 96, 225, 225, 227, 405, 229, 403, 260, 227, + 226, 227, 404, 406, 227, 407, 469, 227, 227, 489, + 493, 470, 516, 517, 522, 534, 523, 490, 287, 408, + 546, 288, 227, 409, 561, 562, 547, 535, 494, 227, + 227, 227, 423, 98, 563, 227, 227, 414, 589, 456, + 631, 653, 671, 565, 227, 672, 654, 695, 227, 227, + 590, 567, 227, 632, 696, 699, 749, 760, 566, 804, + 227, 227, 805, 761, 700, 568, 836, 837, 750, 598, - 556, 230, 230, 424, 230, 572, 230, 230, 467, 230, - 230, 601, 433, 574, 578, 579, 642, 682, 575, 664, - 683, 230, 467, 602, 665, 577, 230, 706, 460, 643, - 230, 230, 576, 230, 707, 230, 760, 771, 230, 710, - 230, 711, 580, 772, 815, 712, 230, 816, 761, 849, - 850, 828, 610, 827, 851, 829, 852, 853, 854, 855, - 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, - 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, - 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, - 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 817, 816, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 457, 847, 848, 849, 850, 851, 852, 853, 854, + 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, + 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, + 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, + 895, 896, 897, 898, 899, 900, 901, 902, 227, 227, + 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, + 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 840, 930, 931, - 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, - 906, 907, 908, 909, 910, 911, 912, 913, 230, 230, - 230, 915, 916, 917, 918, 919, 848, 920, 921, 922, - 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, - 933, 934, 935, 936, 937, 938, 939, 940, 914, 941, + 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, - 972, 230, 973, 974, 975, 976, 977, 978, 979, 980, - 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, + 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, + 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, + 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, + 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, + 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, + 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, - 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, - 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, - 1041, 1042, 1043, 1044, 1045, 1046, 1047, 91, 91, 91, - 91, 91, 91, 93, 93, 94, 94, 845, 94, 94, - 94, 97, 97, 97, 221, 221, 221, 221, 221, 221, - 228, 228, 228, 228, 255, 255, 844, 255, 255, 255, - 843, 842, 841, 840, 839, 838, 837, 836, 835, 834, + 1032, 1033, 1034, 1035, 1036, 88, 88, 88, 88, 88, + 88, 90, 90, 91, 91, 831, 91, 91, 91, 94, + 94, 94, 218, 218, 218, 218, 218, 218, 225, 225, + 225, 225, 247, 247, 830, 247, 247, 247, 829, 828, + 827, 826, 825, 824, 823, 822, 821, 820, 819, 818, + 815, 814, 813, 812, 811, 810, 809, 808, 807, 806, + 803, 802, 801, 800, 799, 798, 797, 796, 795, 794, + 793, 792, 791, 790, 789, 788, 787, 786, 785, 784, + 783, 782, 781, 780, 779, 778, 777, 776, 775, 774, + 773, 772, 771, 770, 769, 768, 767, 766, 765, 764, - 833, 832, 831, 830, 826, 825, 824, 823, 822, 821, - 820, 819, 818, 817, 814, 813, 812, 811, 810, 809, - 808, 807, 806, 805, 804, 803, 802, 801, 800, 799, - 798, 797, 796, 795, 794, 793, 792, 791, 790, 789, - 788, 787, 786, 785, 784, 783, 782, 781, 780, 779, - 778, 777, 776, 775, 774, 773, 770, 769, 768, 767, - 766, 765, 764, 763, 762, 759, 758, 757, 756, 755, - 754, 753, 752, 751, 750, 749, 748, 747, 746, 745, - 744, 743, 742, 741, 740, 739, 738, 737, 736, 735, - 734, 733, 732, 731, 730, 729, 728, 727, 726, 725, + 763, 762, 759, 758, 757, 756, 755, 754, 753, 752, + 751, 748, 747, 746, 745, 744, 743, 742, 741, 740, + 739, 738, 737, 736, 735, 734, 733, 732, 731, 730, + 729, 728, 727, 726, 725, 724, 723, 722, 721, 720, + 719, 718, 717, 716, 715, 714, 713, 712, 711, 710, + 709, 708, 707, 706, 705, 704, 703, 702, 701, 698, + 561, 697, 694, 693, 692, 691, 690, 689, 688, 687, + 686, 685, 684, 683, 682, 681, 680, 679, 678, 677, + 676, 675, 674, 673, 670, 669, 668, 667, 666, 665, + 664, 663, 662, 661, 660, 659, 658, 657, 656, 655, - 724, 723, 722, 721, 720, 719, 718, 717, 716, 715, - 714, 713, 578, 709, 570, 708, 705, 704, 703, 702, - 701, 700, 699, 698, 697, 696, 695, 694, 693, 692, - 691, 690, 689, 688, 687, 686, 685, 684, 681, 680, - 679, 678, 677, 676, 675, 674, 673, 672, 671, 670, - 669, 668, 667, 666, 663, 662, 661, 660, 659, 658, - 657, 656, 655, 654, 653, 652, 651, 650, 649, 648, - 647, 646, 645, 644, 641, 640, 639, 638, 637, 636, - 635, 634, 633, 632, 631, 630, 629, 628, 627, 626, - 625, 624, 623, 622, 621, 620, 619, 618, 617, 616, + 652, 651, 650, 649, 648, 647, 646, 645, 644, 643, + 642, 641, 640, 639, 638, 637, 636, 635, 634, 633, + 630, 629, 628, 627, 626, 625, 624, 623, 622, 621, + 620, 619, 618, 617, 616, 615, 614, 613, 612, 611, + 610, 609, 608, 607, 606, 605, 604, 603, 602, 601, + 600, 599, 598, 597, 596, 595, 594, 593, 592, 591, + 588, 587, 586, 585, 584, 583, 582, 581, 580, 579, + 578, 577, 576, 575, 574, 573, 572, 571, 570, 569, + 568, 564, 560, 559, 558, 557, 556, 555, 554, 553, + 552, 551, 550, 549, 548, 545, 544, 543, 542, 541, - 615, 614, 613, 612, 611, 610, 609, 608, 607, 606, - 605, 604, 603, 600, 599, 598, 597, 596, 595, 594, - 593, 592, 591, 590, 589, 588, 587, 586, 585, 584, - 583, 582, 581, 580, 573, 569, 568, 567, 566, 565, - 564, 563, 562, 561, 560, 559, 558, 557, 554, 553, - 552, 551, 550, 549, 548, 547, 546, 545, 542, 541, - 540, 539, 538, 537, 536, 535, 534, 533, 530, 529, - 528, 527, 447, 524, 523, 522, 521, 520, 519, 518, - 517, 516, 515, 514, 513, 512, 511, 510, 509, 508, - 507, 506, 505, 504, 501, 500, 497, 496, 495, 494, + 540, 539, 538, 537, 536, 533, 532, 531, 530, 529, + 528, 527, 526, 525, 524, 521, 520, 519, 518, 437, + 515, 514, 513, 512, 511, 510, 509, 508, 507, 506, + 505, 504, 503, 502, 501, 500, 499, 498, 497, 496, + 495, 492, 491, 488, 487, 486, 485, 484, 483, 482, + 481, 480, 479, 478, 477, 476, 475, 474, 473, 472, + 471, 468, 467, 466, 465, 464, 463, 462, 461, 460, + 459, 458, 455, 454, 453, 452, 451, 450, 449, 448, + 447, 446, 445, 444, 443, 442, 441, 440, 439, 438, + 437, 436, 435, 434, 433, 432, 431, 430, 429, 428, - 493, 492, 491, 490, 489, 488, 487, 486, 485, 484, - 483, 482, 481, 478, 477, 476, 475, 474, 473, 472, - 471, 470, 469, 468, 465, 464, 463, 462, 461, 460, - 459, 458, 457, 456, 455, 454, 453, 452, 451, 450, - 449, 448, 447, 446, 445, 444, 443, 442, 441, 440, - 439, 438, 437, 436, 435, 434, 433, 432, 431, 430, - 429, 428, 427, 426, 425, 424, 423, 422, 421, 257, - 420, 420, 250, 230, 230, 225, 222, 222, 406, 399, - 398, 397, 396, 388, 387, 386, 385, 379, 378, 377, - 376, 375, 374, 367, 366, 365, 364, 358, 352, 351, + 427, 426, 425, 424, 423, 422, 421, 420, 419, 418, + 417, 416, 415, 414, 413, 412, 411, 249, 410, 410, + 243, 227, 227, 222, 219, 219, 399, 392, 391, 390, + 389, 381, 380, 379, 378, 372, 371, 370, 369, 368, + 367, 360, 359, 358, 357, 351, 345, 344, 343, 342, + 341, 330, 329, 328, 327, 326, 325, 324, 323, 322, + 321, 320, 315, 314, 313, 312, 311, 310, 309, 308, + 304, 303, 302, 301, 300, 295, 294, 291, 290, 289, + 288, 287, 286, 283, 280, 277, 276, 275, 274, 273, + 272, 271, 270, 269, 268, 267, 266, 265, 262, 261, - 350, 349, 348, 337, 336, 335, 334, 333, 332, 331, - 330, 329, 328, 327, 323, 322, 321, 320, 319, 318, - 317, 316, 312, 311, 310, 309, 308, 303, 302, 299, - 298, 297, 296, 295, 294, 291, 288, 285, 284, 283, - 282, 281, 280, 279, 278, 277, 276, 275, 274, 273, - 270, 269, 268, 267, 266, 265, 264, 261, 258, 257, - 98, 96, 256, 254, 92, 230, 224, 222, 218, 217, - 200, 183, 177, 146, 134, 133, 107, 106, 105, 104, - 98, 96, 95, 92, 90, 89, 1048, 5, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 260, 259, 258, 257, 256, 253, 250, 249, 95, 93, + 248, 246, 89, 227, 221, 219, 215, 214, 197, 180, + 174, 143, 131, 130, 104, 103, 102, 101, 95, 93, + 92, 89, 87, 86, 1037, 5, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048 + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037 } ; -static yyconst flex_int16_t yy_chk[1363] = +static yyconst flex_int16_t yy_chk[1311] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -946,147 +937,141 @@ static yyconst flex_int16_t yy_chk[1363] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 22, 7, 2, 4, 7, 2, 4, 17, 17, 4, 23, 28, 16, 24, 22, - 24, 189, 16, 25, 28, 23, 25, 29, 23, 189, + 24, 186, 16, 25, 28, 23, 25, 29, 23, 186, 24, 29, 25, 2, 3, 3, 3, 4, 38, 3, - 734, 29, 31, 3, 3, 3, 3, 58, 38, 58, + 717, 29, 31, 3, 3, 3, 3, 58, 38, 58, 3, 3, 3, 26, 3, 3, 31, 3, 3, 16, - 3, 3, 3, 26, 72, 3, 26, 30, 3, 3, - 3, 30, 3, 46, 3, 30, 34, 3, 36, 52, - 34, 30, 35, 35, 80, 72, 42, 46, 36, 42, - 34, 36, 42, 52, 35, 35, 70, 35, 39, 3, - 39, 70, 80, 3, 39, 39, 71, 40, 39, 39, - 40, 41, 47, 40, 246, 41, 40, 43, 41, 41, - 83, 71, 41, 47, 83, 41, 246, 47, 43, 44, + 3, 3, 46, 26, 182, 3, 26, 30, 3, 3, + 34, 30, 3, 36, 34, 30, 46, 3, 35, 35, + 182, 30, 42, 36, 34, 42, 36, 720, 42, 40, + 35, 35, 40, 35, 39, 40, 39, 47, 40, 71, + 39, 39, 41, 3, 39, 39, 41, 43, 47, 41, + 41, 72, 47, 41, 71, 44, 41, 49, 43, 44, + 43, 49, 41, 44, 43, 49, 44, 50, 50, 51, - 43, 41, 51, 44, 43, 49, 51, 44, 70, 49, - 44, 50, 50, 49, 53, 77, 51, 148, 53, 49, - 50, 55, 148, 56, 77, 55, 50, 56, 57, 55, - 56, 53, 77, 88, 55, 55, 88, 56, 57, 56, - 61, 57, 56, 61, 63, 74, 61, 74, 63, 67, - 67, 67, 63, 66, 66, 66, 66, 74, 63, 68, - 68, 68, 73, 78, 107, 109, 73, 78, 107, 109, - 185, 78, 68, 69, 69, 69, 132, 132, 69, 84, - 73, 78, 69, 69, 69, 69, 185, 100, 75, 69, - 69, 69, 100, 735, 69, 117, 69, 69, 117, 69, + 52, 49, 72, 51, 53, 70, 50, 144, 53, 79, + 70, 55, 50, 51, 52, 55, 56, 144, 57, 55, + 56, 53, 73, 56, 55, 55, 73, 79, 57, 722, + 56, 57, 56, 61, 63, 56, 61, 82, 63, 61, + 73, 82, 63, 66, 66, 66, 66, 70, 63, 67, + 67, 67, 68, 68, 68, 75, 78, 74, 85, 74, + 78, 85, 723, 77, 78, 68, 69, 69, 69, 74, + 75, 69, 77, 75, 78, 69, 69, 69, 69, 75, + 77, 104, 69, 69, 69, 104, 173, 69, 140, 69, + 69, 80, 69, 69, 140, 106, 173, 69, 81, 106, - 69, 69, 134, 75, 69, 134, 75, 69, 69, 69, - 79, 69, 75, 69, 79, 82, 69, 84, 79, 239, - 81, 208, 79, 82, 208, 136, 239, 84, 79, 100, - 84, 81, 81, 82, 136, 143, 82, 235, 69, 178, - 235, 143, 69, 81, 81, 178, 81, 85, 85, 85, - 85, 147, 176, 85, 86, 86, 86, 149, 736, 86, - 149, 147, 176, 86, 86, 86, 86, 188, 149, 155, - 86, 86, 86, 155, 188, 86, 188, 86, 86, 155, - 86, 86, 86, 87, 209, 86, 164, 87, 86, 86, - 86, 87, 86, 209, 86, 87, 177, 86, 164, 164, + 69, 69, 80, 80, 69, 114, 81, 97, 114, 69, + 129, 129, 97, 145, 80, 80, 81, 80, 145, 81, + 83, 83, 83, 83, 131, 133, 83, 131, 146, 174, + 296, 146, 198, 174, 133, 69, 84, 84, 84, 146, + 152, 84, 198, 174, 152, 84, 84, 84, 84, 97, + 152, 235, 84, 84, 84, 175, 161, 84, 235, 84, + 84, 175, 84, 84, 176, 176, 176, 84, 161, 161, + 84, 84, 296, 161, 84, 183, 183, 185, 191, 84, + 206, 191, 183, 199, 185, 205, 185, 199, 205, 206, + 191, 191, 204, 211, 204, 191, 220, 191, 215, 215, - 177, 87, 179, 179, 179, 186, 186, 201, 194, 202, - 177, 194, 186, 202, 214, 218, 218, 201, 233, 86, - 194, 194, 207, 86, 207, 194, 215, 194, 202, 215, - 223, 207, 232, 215, 214, 215, 219, 232, 234, 219, - 223, 233, 219, 227, 227, 227, 227, 228, 228, 228, - 229, 229, 229, 236, 237, 240, 241, 236, 242, 243, - 234, 244, 245, 229, 247, 244, 304, 245, 365, 365, - 253, 237, 318, 241, 232, 337, 243, 318, 340, 247, - 466, 382, 242, 337, 240, 248, 248, 248, 248, 253, - 371, 248, 371, 382, 393, 411, 340, 409, 409, 253, + 212, 204, 199, 212, 230, 84, 220, 212, 216, 212, + 231, 216, 224, 211, 216, 224, 225, 226, 224, 225, + 226, 229, 225, 226, 236, 232, 229, 230, 232, 233, + 226, 238, 231, 233, 237, 238, 310, 239, 240, 330, + 333, 310, 358, 358, 364, 375, 364, 330, 236, 239, + 386, 237, 406, 240, 402, 402, 386, 375, 333, 404, + 403, 407, 406, 229, 403, 408, 409, 404, 439, 456, + 489, 514, 533, 407, 563, 533, 514, 558, 565, 566, + 439, 409, 567, 489, 558, 566, 628, 639, 408, 686, + 699, 700, 686, 639, 567, 563, 724, 725, 628, 565, - 393, 410, 413, 411, 414, 410, 415, 416, 304, 417, - 418, 449, 413, 414, 419, 419, 498, 542, 415, 523, - 542, 572, 466, 449, 523, 418, 419, 567, 416, 498, - 574, 575, 417, 577, 567, 576, 639, 650, 710, 574, - 711, 576, 572, 650, 697, 577, 712, 697, 639, 737, - 739, 711, 575, 710, 740, 712, 741, 742, 745, 746, - 750, 754, 755, 756, 758, 759, 761, 764, 766, 767, - 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, - 778, 780, 781, 783, 784, 785, 786, 787, 788, 789, - 790, 791, 794, 795, 797, 798, 799, 800, 802, 803, + 700, 699, 727, 728, 729, 730, 733, 734, 738, 742, + 743, 456, 744, 745, 747, 748, 750, 753, 755, 756, + 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, + 767, 769, 770, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 783, 784, 786, 787, 788, 789, 791, 792, + 793, 794, 795, 796, 797, 799, 800, 801, 804, 805, + 807, 808, 809, 810, 811, 812, 813, 814, 816, 817, + 818, 819, 821, 822, 823, 824, 825, 826, 827, 829, + 831, 832, 833, 834, 835, 838, 841, 844, 845, 846, + 847, 848, 851, 852, 854, 855, 856, 817, 858, 859, - 804, 805, 806, 807, 808, 810, 811, 812, 815, 816, - 818, 819, 820, 821, 822, 823, 824, 825, 827, 828, - 829, 830, 831, 833, 834, 835, 827, 836, 837, 838, - 839, 841, 843, 844, 845, 846, 847, 850, 853, 856, - 857, 858, 859, 862, 863, 865, 866, 867, 829, 869, - 870, 871, 872, 874, 875, 876, 877, 879, 880, 881, - 882, 883, 888, 889, 890, 891, 892, 893, 894, 896, - 899, 901, 902, 903, 904, 905, 909, 910, 911, 912, - 913, 914, 915, 917, 918, 924, 925, 926, 927, 928, - 930, 932, 933, 934, 936, 938, 940, 941, 942, 943, + 860, 861, 863, 864, 865, 866, 868, 869, 870, 871, + 872, 877, 878, 879, 880, 881, 882, 883, 885, 888, + 890, 891, 892, 893, 894, 898, 899, 900, 901, 902, + 903, 905, 906, 912, 913, 914, 915, 916, 918, 920, + 921, 922, 925, 927, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 942, 943, 944, 945, 947, + 950, 952, 953, 954, 955, 960, 963, 965, 966, 967, + 968, 969, 970, 973, 974, 978, 980, 988, 989, 993, + 995, 1000, 1001, 1002, 1003, 1004, 1009, 1012, 1013, 1014, + 1015, 1016, 1017, 1018, 1019, 1022, 1023, 1024, 1027, 1028, - 944, 945, 946, 947, 948, 949, 950, 953, 954, 955, - 956, 958, 961, 963, 964, 965, 966, 971, 974, 976, - 977, 978, 979, 980, 981, 984, 985, 989, 991, 999, - 1000, 1004, 1006, 1011, 1012, 1013, 1014, 1015, 1020, 1023, - 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1033, 1034, 1035, - 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1049, 1049, 1049, - 1049, 1049, 1049, 1050, 1050, 1051, 1051, 732, 1051, 1051, - 1051, 1052, 1052, 1052, 1053, 1053, 1053, 1053, 1053, 1053, - 1054, 1054, 1054, 1054, 1055, 1055, 729, 1055, 1055, 1055, - 728, 727, 726, 725, 724, 722, 721, 720, 719, 718, + 1029, 1030, 1031, 1032, 1033, 1038, 1038, 1038, 1038, 1038, + 1038, 1039, 1039, 1040, 1040, 716, 1040, 1040, 1040, 1041, + 1041, 1041, 1042, 1042, 1042, 1042, 1042, 1042, 1043, 1043, + 1043, 1043, 1044, 1044, 715, 1044, 1044, 1044, 714, 713, + 712, 710, 709, 708, 707, 706, 705, 704, 703, 702, + 698, 697, 695, 694, 693, 692, 691, 690, 689, 688, + 685, 684, 683, 682, 681, 680, 679, 677, 675, 674, + 673, 672, 671, 670, 669, 668, 667, 666, 665, 664, + 662, 661, 660, 659, 658, 657, 656, 654, 653, 652, + 651, 650, 649, 648, 647, 646, 645, 644, 643, 642, - 717, 716, 715, 714, 709, 708, 706, 705, 704, 703, - 702, 701, 700, 699, 696, 695, 694, 693, 692, 691, - 690, 688, 686, 685, 684, 683, 682, 681, 680, 679, - 678, 677, 676, 675, 673, 672, 671, 670, 669, 668, - 667, 665, 664, 663, 662, 661, 660, 659, 658, 657, - 656, 655, 654, 653, 652, 651, 649, 648, 647, 646, - 645, 644, 643, 642, 641, 638, 637, 636, 635, 634, - 633, 632, 631, 629, 628, 627, 626, 625, 623, 622, - 620, 619, 618, 615, 614, 613, 612, 611, 609, 608, - 607, 606, 605, 604, 603, 602, 601, 599, 598, 597, + 641, 640, 638, 637, 636, 635, 634, 633, 632, 631, + 630, 627, 626, 625, 624, 623, 622, 621, 620, 619, + 617, 616, 615, 614, 613, 611, 610, 608, 607, 606, + 603, 602, 601, 600, 599, 597, 596, 595, 594, 593, + 592, 591, 590, 589, 587, 586, 585, 584, 582, 581, + 579, 578, 577, 575, 574, 573, 572, 571, 569, 564, + 562, 559, 557, 556, 555, 553, 552, 551, 550, 549, + 548, 547, 546, 545, 544, 543, 542, 541, 540, 539, + 538, 537, 536, 534, 532, 531, 530, 529, 528, 526, + 525, 524, 522, 521, 520, 519, 518, 517, 516, 515, - 596, 594, 593, 591, 590, 589, 587, 586, 585, 584, - 583, 581, 579, 573, 571, 568, 566, 565, 564, 562, - 561, 560, 559, 558, 557, 556, 555, 554, 553, 552, - 551, 550, 549, 548, 547, 546, 545, 543, 541, 540, - 539, 538, 537, 535, 534, 533, 531, 530, 529, 528, - 527, 526, 525, 524, 521, 520, 519, 518, 516, 515, - 513, 512, 511, 510, 509, 508, 507, 506, 504, 503, - 502, 501, 500, 499, 497, 496, 495, 494, 493, 489, - 488, 487, 486, 485, 484, 483, 482, 481, 479, 478, - 477, 476, 475, 474, 473, 472, 471, 470, 469, 468, + 512, 511, 510, 509, 507, 506, 504, 503, 502, 501, + 500, 499, 498, 497, 495, 494, 493, 492, 491, 490, + 488, 487, 486, 485, 484, 480, 479, 478, 477, 476, + 475, 474, 473, 472, 471, 469, 468, 467, 466, 465, + 464, 463, 462, 461, 460, 459, 458, 455, 453, 452, + 451, 450, 449, 447, 446, 445, 444, 443, 442, 440, + 438, 436, 435, 434, 433, 431, 430, 429, 428, 426, + 425, 424, 423, 421, 419, 417, 416, 415, 413, 412, + 411, 405, 400, 399, 398, 397, 396, 395, 394, 393, + 391, 390, 389, 388, 387, 385, 384, 383, 382, 381, - 465, 463, 462, 461, 460, 459, 457, 456, 455, 454, - 453, 452, 450, 448, 446, 445, 444, 443, 441, 440, - 439, 438, 436, 435, 434, 433, 431, 429, 427, 426, - 425, 423, 422, 421, 412, 407, 406, 405, 404, 403, - 402, 401, 400, 398, 397, 396, 395, 394, 392, 391, - 390, 389, 388, 387, 386, 385, 384, 383, 381, 380, - 379, 378, 377, 376, 375, 374, 373, 372, 370, 369, - 368, 367, 366, 364, 363, 362, 361, 360, 359, 358, - 356, 355, 354, 353, 351, 350, 349, 348, 346, 345, - 344, 343, 342, 341, 339, 338, 336, 335, 334, 333, - - 332, 331, 330, 328, 327, 326, 325, 324, 323, 322, - 321, 320, 319, 317, 316, 315, 314, 313, 312, 311, - 310, 309, 307, 305, 303, 302, 301, 300, 299, 298, - 297, 296, 295, 294, 293, 292, 291, 290, 289, 288, + 380, 379, 378, 377, 376, 374, 373, 372, 371, 370, + 369, 368, 367, 366, 365, 363, 362, 361, 360, 359, + 357, 356, 355, 354, 353, 352, 351, 349, 348, 347, + 346, 344, 343, 342, 341, 339, 338, 337, 336, 335, + 334, 332, 331, 329, 328, 327, 326, 325, 324, 323, + 321, 320, 319, 318, 317, 316, 315, 314, 313, 312, + 311, 309, 308, 307, 306, 305, 304, 303, 302, 301, + 299, 297, 295, 294, 293, 292, 291, 290, 289, 288, 287, 286, 285, 284, 283, 282, 281, 280, 279, 278, - 277, 276, 275, 274, 273, 272, 270, 269, 268, 267, - 266, 265, 264, 263, 262, 261, 260, 259, 258, 257, - 256, 255, 251, 238, 230, 226, 221, 220, 217, 213, - 212, 211, 210, 206, 205, 204, 203, 200, 199, 198, - 197, 196, 195, 193, 192, 191, 190, 187, 184, 183, + 277, 276, 275, 274, 273, 272, 271, 270, 269, 268, - 182, 181, 180, 175, 174, 173, 172, 171, 170, 169, - 168, 167, 166, 165, 163, 162, 161, 160, 159, 158, - 157, 156, 154, 153, 152, 151, 150, 146, 145, 142, - 141, 140, 139, 138, 137, 135, 133, 131, 130, 129, - 128, 127, 126, 125, 124, 123, 121, 120, 119, 118, - 116, 115, 114, 113, 112, 111, 110, 108, 106, 101, - 98, 96, 95, 94, 91, 76, 65, 62, 60, 59, - 54, 48, 45, 37, 33, 32, 21, 20, 19, 18, - 15, 14, 13, 11, 10, 9, 5, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 267, 266, 265, 264, 262, 261, 260, 259, 258, 257, + 256, 255, 254, 253, 252, 251, 250, 249, 248, 247, + 244, 234, 227, 223, 218, 217, 214, 210, 209, 208, + 207, 203, 202, 201, 200, 197, 196, 195, 194, 193, + 192, 190, 189, 188, 187, 184, 181, 180, 179, 178, + 177, 172, 171, 170, 169, 168, 167, 166, 165, 164, + 163, 162, 160, 159, 158, 157, 156, 155, 154, 153, + 151, 150, 149, 148, 147, 143, 142, 139, 138, 137, + 136, 135, 134, 132, 130, 128, 127, 126, 125, 124, + 123, 122, 121, 120, 118, 117, 116, 115, 113, 112, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048 + 111, 110, 109, 108, 107, 105, 103, 98, 95, 93, + 92, 91, 88, 76, 65, 62, 60, 59, 54, 48, + 45, 37, 33, 32, 21, 20, 19, 18, 15, 14, + 13, 11, 10, 9, 5, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037 } ; static yy_state_type yy_last_accepting_state; @@ -1105,7 +1090,7 @@ int yy_flex_debug = 0; char *yytext; #line 1 "lev_comp.l" #line 2 "lev_comp.l" -/* NetHack 3.5 lev_comp.l $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ +/* NetHack 3.5 lev_comp.l $NHDT-Date: 1428240296 2015/04/05 13:24:56 $ $NHDT-Branch: master $:$NHDT-Revision: 1.13 $ */ /* NetHack 3.5 lev_comp.l $Date: 2009/05/06 10:54:31 $ $Revision: 1.9 $ */ /* SCCS Id: @(#)lev_lex.c 3.5 2002/03/27 */ /* Copyright (c) 1989 by Jean-Christophe Collet */ @@ -1175,6 +1160,7 @@ void FDECL(init_yyout, (FILE *)); long NDECL(handle_varstring_check); long FDECL(corefunc_str_check, (char *, long)); +extern void VDECL(lc_error, (const char *, ...)); extern struct lc_vardefs *FDECL(vardef_defined,(struct lc_vardefs *,char *, int)); extern struct lc_vardefs *variable_definitions; @@ -1203,7 +1189,7 @@ FILE *orig_yyin = NULL; #define ST_RETF(y, x) do { savetoken(yytext); y; return x; } while (0); -#line 1207 "lex.yy.c" +#line 1193 "lex.yy.c" #define INITIAL 0 #define MAPC 1 @@ -1421,9 +1407,9 @@ YY_DECL } { -#line 104 "lev_comp.l" +#line 105 "lev_comp.l" -#line 1427 "lex.yy.c" +#line 1413 "lex.yy.c" while ( 1 ) /* loops until end-of-file is reached */ { @@ -1451,13 +1437,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1049 ) + if ( yy_current_state >= 1038 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 1288 ); + while ( yy_base[yy_current_state] != 1236 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1483,7 +1469,7 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 105 "lev_comp.l" +#line 106 "lev_comp.l" { savetoken(yytext); BEGIN(INITIAL); @@ -1497,7 +1483,7 @@ YY_RULE_SETUP case 2: /* rule 2 can match eol */ YY_RULE_SETUP -#line 114 "lev_comp.l" +#line 115 "lev_comp.l" { int len = yyleng; savetoken(yytext); @@ -1513,873 +1499,878 @@ YY_RULE_SETUP case 3: /* rule 3 can match eol */ YY_RULE_SETUP -#line 125 "lev_comp.l" +#line 126 "lev_comp.l" { savetoken(yytext); newline(); } YY_BREAK case 4: YY_RULE_SETUP -#line 126 "lev_comp.l" +#line 127 "lev_comp.l" ST_RET(MESSAGE_ID); YY_BREAK case 5: YY_RULE_SETUP -#line 127 "lev_comp.l" +#line 128 "lev_comp.l" ST_RET(NOMAP_ID); YY_BREAK case 6: YY_RULE_SETUP -#line 128 "lev_comp.l" +#line 129 "lev_comp.l" ST_RET(MAZE_ID); YY_BREAK case 7: YY_RULE_SETUP -#line 129 "lev_comp.l" +#line 130 "lev_comp.l" ST_RET(LEVEL_ID); YY_BREAK case 8: YY_RULE_SETUP -#line 130 "lev_comp.l" +#line 131 "lev_comp.l" ST_RET(LEV_INIT_ID); YY_BREAK case 9: YY_RULE_SETUP -#line 131 "lev_comp.l" +#line 132 "lev_comp.l" ST_RET(MAZE_GRID_ID); YY_BREAK case 10: YY_RULE_SETUP -#line 132 "lev_comp.l" +#line 133 "lev_comp.l" ST_RET(SOLID_FILL_ID); YY_BREAK case 11: YY_RULE_SETUP -#line 133 "lev_comp.l" +#line 134 "lev_comp.l" ST_RET(MINES_ID); YY_BREAK case 12: YY_RULE_SETUP -#line 134 "lev_comp.l" +#line 135 "lev_comp.l" ST_RET(ROGUELEV_ID); YY_BREAK case 13: YY_RULE_SETUP -#line 135 "lev_comp.l" +#line 136 "lev_comp.l" ST_RET(FLAGS_ID); YY_BREAK case 14: YY_RULE_SETUP -#line 136 "lev_comp.l" +#line 137 "lev_comp.l" ST_RET(GEOMETRY_ID); YY_BREAK case 15: /* rule 15 can match eol */ YY_RULE_SETUP -#line 137 "lev_comp.l" +#line 138 "lev_comp.l" { savetoken(yytext); BEGIN(MAPC); newline(); } YY_BREAK case 16: YY_RULE_SETUP -#line 138 "lev_comp.l" +#line 139 "lev_comp.l" ST_RET(object_ID); YY_BREAK case 17: YY_RULE_SETUP -#line 139 "lev_comp.l" +#line 140 "lev_comp.l" ST_RET(OBJECT_ID); YY_BREAK case 18: YY_RULE_SETUP -#line 140 "lev_comp.l" +#line 141 "lev_comp.l" ST_RET(COBJECT_ID); YY_BREAK case 19: YY_RULE_SETUP -#line 141 "lev_comp.l" +#line 142 "lev_comp.l" ST_RET(MONSTER_ID); YY_BREAK case 20: YY_RULE_SETUP -#line 142 "lev_comp.l" +#line 143 "lev_comp.l" ST_RET(monster_ID); YY_BREAK case 21: YY_RULE_SETUP -#line 143 "lev_comp.l" +#line 144 "lev_comp.l" ST_RET(TRAP_ID); YY_BREAK case 22: YY_RULE_SETUP -#line 144 "lev_comp.l" +#line 145 "lev_comp.l" ST_RET(DOOR_ID); YY_BREAK case 23: YY_RULE_SETUP -#line 145 "lev_comp.l" +#line 146 "lev_comp.l" ST_RET(ROOMDOOR_ID); YY_BREAK case 24: YY_RULE_SETUP -#line 146 "lev_comp.l" +#line 147 "lev_comp.l" ST_RET(DRAWBRIDGE_ID); YY_BREAK case 25: YY_RULE_SETUP -#line 147 "lev_comp.l" +#line 148 "lev_comp.l" ST_RET(MAZEWALK_ID); YY_BREAK case 26: YY_RULE_SETUP -#line 148 "lev_comp.l" +#line 149 "lev_comp.l" ST_RET(WALLIFY_ID); YY_BREAK case 27: YY_RULE_SETUP -#line 149 "lev_comp.l" +#line 150 "lev_comp.l" ST_RET(REGION_ID); YY_BREAK case 28: YY_RULE_SETUP -#line 150 "lev_comp.l" +#line 151 "lev_comp.l" ST_RET(ALTAR_ID); YY_BREAK case 29: YY_RULE_SETUP -#line 151 "lev_comp.l" +#line 152 "lev_comp.l" ST_RET(LADDER_ID); YY_BREAK case 30: YY_RULE_SETUP -#line 152 "lev_comp.l" +#line 153 "lev_comp.l" ST_RET(STAIR_ID); YY_BREAK case 31: YY_RULE_SETUP -#line 153 "lev_comp.l" +#line 154 "lev_comp.l" ST_RET(PORTAL_ID); YY_BREAK case 32: YY_RULE_SETUP -#line 154 "lev_comp.l" +#line 155 "lev_comp.l" ST_RET(TELEPRT_ID); YY_BREAK case 33: YY_RULE_SETUP -#line 155 "lev_comp.l" +#line 156 "lev_comp.l" ST_RET(BRANCH_ID); YY_BREAK case 34: YY_RULE_SETUP -#line 156 "lev_comp.l" +#line 157 "lev_comp.l" ST_RET(FOUNTAIN_ID); YY_BREAK case 35: YY_RULE_SETUP -#line 157 "lev_comp.l" +#line 158 "lev_comp.l" ST_RET(SINK_ID); YY_BREAK case 36: YY_RULE_SETUP -#line 158 "lev_comp.l" +#line 159 "lev_comp.l" ST_RET(POOL_ID); YY_BREAK case 37: YY_RULE_SETUP -#line 159 "lev_comp.l" +#line 160 "lev_comp.l" ST_RET(NON_DIGGABLE_ID); YY_BREAK case 38: YY_RULE_SETUP -#line 160 "lev_comp.l" +#line 161 "lev_comp.l" ST_RET(NON_PASSWALL_ID); YY_BREAK case 39: YY_RULE_SETUP -#line 161 "lev_comp.l" +#line 162 "lev_comp.l" ST_RET(IF_ID); YY_BREAK case 40: YY_RULE_SETUP -#line 162 "lev_comp.l" +#line 163 "lev_comp.l" ST_RET(ELSE_ID); YY_BREAK case 41: YY_RULE_SETUP -#line 163 "lev_comp.l" +#line 164 "lev_comp.l" ST_RET(EXIT_ID); YY_BREAK case 42: YY_RULE_SETUP -#line 164 "lev_comp.l" +#line 165 "lev_comp.l" ST_RET(ROOM_ID); YY_BREAK case 43: YY_RULE_SETUP -#line 165 "lev_comp.l" +#line 166 "lev_comp.l" ST_RET(SUBROOM_ID); YY_BREAK case 44: YY_RULE_SETUP -#line 166 "lev_comp.l" +#line 167 "lev_comp.l" ST_RET(RAND_CORRIDOR_ID); YY_BREAK case 45: YY_RULE_SETUP -#line 167 "lev_comp.l" +#line 168 "lev_comp.l" ST_RET(CORRIDOR_ID); YY_BREAK case 46: YY_RULE_SETUP -#line 168 "lev_comp.l" +#line 169 "lev_comp.l" ST_RET(TERRAIN_ID); YY_BREAK case 47: YY_RULE_SETUP -#line 169 "lev_comp.l" +#line 170 "lev_comp.l" ST_RET(terrain_ID); YY_BREAK case 48: YY_RULE_SETUP -#line 170 "lev_comp.l" +#line 171 "lev_comp.l" ST_RET(REPLACE_TERRAIN_ID); YY_BREAK case 49: YY_RULE_SETUP -#line 171 "lev_comp.l" +#line 172 "lev_comp.l" ST_RET(GOLD_ID); YY_BREAK case 50: YY_RULE_SETUP -#line 172 "lev_comp.l" +#line 173 "lev_comp.l" ST_RET(GRAVE_ID); YY_BREAK case 51: YY_RULE_SETUP -#line 173 "lev_comp.l" +#line 174 "lev_comp.l" ST_RET(ENGRAVING_ID); YY_BREAK case 52: YY_RULE_SETUP -#line 174 "lev_comp.l" +#line 175 "lev_comp.l" ST_RET(MINERALIZE_ID); YY_BREAK case 53: YY_RULE_SETUP -#line 175 "lev_comp.l" +#line 176 "lev_comp.l" ST_RET(NAME_ID); YY_BREAK case 54: YY_RULE_SETUP -#line 176 "lev_comp.l" +#line 177 "lev_comp.l" ST_RET(FOR_ID); YY_BREAK case 55: YY_RULE_SETUP -#line 177 "lev_comp.l" +#line 178 "lev_comp.l" ST_RET(TO_ID); YY_BREAK case 56: YY_RULE_SETUP -#line 178 "lev_comp.l" +#line 179 "lev_comp.l" ST_RET(LOOP_ID); YY_BREAK case 57: YY_RULE_SETUP -#line 179 "lev_comp.l" +#line 180 "lev_comp.l" ST_RET(SWITCH_ID); YY_BREAK case 58: YY_RULE_SETUP -#line 180 "lev_comp.l" +#line 181 "lev_comp.l" ST_RET(CASE_ID); YY_BREAK case 59: YY_RULE_SETUP -#line 181 "lev_comp.l" +#line 182 "lev_comp.l" ST_RET(BREAK_ID); YY_BREAK case 60: YY_RULE_SETUP -#line 182 "lev_comp.l" +#line 183 "lev_comp.l" ST_RET(DEFAULT_ID); YY_BREAK case 61: YY_RULE_SETUP -#line 183 "lev_comp.l" +#line 184 "lev_comp.l" ST_RET(FUNCTION_ID); YY_BREAK case 62: YY_RULE_SETUP -#line 184 "lev_comp.l" +#line 185 "lev_comp.l" ST_RET(SHUFFLE_ID); YY_BREAK case 63: YY_RULE_SETUP -#line 185 "lev_comp.l" +#line 186 "lev_comp.l" ST_RET(MONTYPE_ID); YY_BREAK case 64: YY_RULE_SETUP -#line 186 "lev_comp.l" +#line 187 "lev_comp.l" ST_RET(selection_ID); YY_BREAK case 65: YY_RULE_SETUP -#line 187 "lev_comp.l" +#line 188 "lev_comp.l" ST_RET(rect_ID); YY_BREAK case 66: YY_RULE_SETUP -#line 188 "lev_comp.l" +#line 189 "lev_comp.l" ST_RET(fillrect_ID); YY_BREAK case 67: YY_RULE_SETUP -#line 189 "lev_comp.l" +#line 190 "lev_comp.l" ST_RET(line_ID); YY_BREAK case 68: YY_RULE_SETUP -#line 190 "lev_comp.l" +#line 191 "lev_comp.l" ST_RET(randline_ID); YY_BREAK case 69: YY_RULE_SETUP -#line 191 "lev_comp.l" +#line 192 "lev_comp.l" ST_RET(grow_ID); YY_BREAK case 70: YY_RULE_SETUP -#line 192 "lev_comp.l" +#line 193 "lev_comp.l" ST_RET(flood_ID); YY_BREAK case 71: YY_RULE_SETUP -#line 193 "lev_comp.l" +#line 194 "lev_comp.l" ST_RET(rndcoord_ID); YY_BREAK case 72: YY_RULE_SETUP -#line 194 "lev_comp.l" +#line 195 "lev_comp.l" ST_RET(circle_ID); YY_BREAK case 73: YY_RULE_SETUP -#line 195 "lev_comp.l" +#line 196 "lev_comp.l" ST_RET(ellipse_ID); YY_BREAK case 74: YY_RULE_SETUP -#line 196 "lev_comp.l" +#line 197 "lev_comp.l" ST_RET(filter_ID); YY_BREAK case 75: YY_RULE_SETUP -#line 197 "lev_comp.l" +#line 198 "lev_comp.l" ST_RET(gradient_ID); YY_BREAK case 76: YY_RULE_SETUP -#line 198 "lev_comp.l" +#line 199 "lev_comp.l" ST_RET(complement_ID); YY_BREAK case 77: YY_RULE_SETUP -#line 199 "lev_comp.l" +#line 200 "lev_comp.l" { savetoken(yytext); yylval.i=SEL_GRADIENT_RADIAL; return GRADIENT_TYPE; } YY_BREAK case 78: YY_RULE_SETUP -#line 200 "lev_comp.l" +#line 201 "lev_comp.l" { savetoken(yytext); yylval.i=SEL_GRADIENT_SQUARE; return GRADIENT_TYPE; } YY_BREAK case 79: YY_RULE_SETUP -#line 201 "lev_comp.l" +#line 202 "lev_comp.l" { savetoken(yytext); yylval.i=DRY; return HUMIDITY_TYPE; } YY_BREAK case 80: YY_RULE_SETUP -#line 202 "lev_comp.l" +#line 203 "lev_comp.l" { savetoken(yytext); yylval.i=WET; return HUMIDITY_TYPE; } YY_BREAK case 81: YY_RULE_SETUP -#line 203 "lev_comp.l" +#line 204 "lev_comp.l" { savetoken(yytext); yylval.i=HOT; return HUMIDITY_TYPE; } YY_BREAK case 82: YY_RULE_SETUP -#line 204 "lev_comp.l" +#line 205 "lev_comp.l" { savetoken(yytext); yylval.i=SOLID; return HUMIDITY_TYPE; } YY_BREAK case 83: YY_RULE_SETUP -#line 205 "lev_comp.l" +#line 206 "lev_comp.l" { savetoken(yytext); yylval.i=ANY_LOC; return HUMIDITY_TYPE; } YY_BREAK case 84: YY_RULE_SETUP -#line 206 "lev_comp.l" +#line 207 "lev_comp.l" ST_RET(LEV); YY_BREAK case 85: YY_RULE_SETUP -#line 207 "lev_comp.l" +#line 208 "lev_comp.l" ST_RET(QUANTITY_ID); YY_BREAK case 86: YY_RULE_SETUP -#line 208 "lev_comp.l" +#line 209 "lev_comp.l" ST_RET(BURIED_ID); YY_BREAK case 87: YY_RULE_SETUP -#line 209 "lev_comp.l" +#line 210 "lev_comp.l" ST_RET(ERODED_ID); YY_BREAK case 88: YY_RULE_SETUP -#line 210 "lev_comp.l" +#line 211 "lev_comp.l" ST_RET(ERODEPROOF_ID); YY_BREAK case 89: YY_RULE_SETUP -#line 211 "lev_comp.l" +#line 212 "lev_comp.l" ST_RET(TRAPPED_ID); YY_BREAK case 90: YY_RULE_SETUP -#line 212 "lev_comp.l" +#line 213 "lev_comp.l" ST_RET(RECHARGED_ID); YY_BREAK case 91: YY_RULE_SETUP -#line 213 "lev_comp.l" +#line 214 "lev_comp.l" ST_RET(INVIS_ID); YY_BREAK case 92: YY_RULE_SETUP -#line 214 "lev_comp.l" +#line 215 "lev_comp.l" ST_RET(GREASED_ID); YY_BREAK case 93: YY_RULE_SETUP -#line 215 "lev_comp.l" +#line 216 "lev_comp.l" ST_RET(FEMALE_ID); YY_BREAK case 94: YY_RULE_SETUP -#line 216 "lev_comp.l" +#line 217 "lev_comp.l" ST_RET(CANCELLED_ID); YY_BREAK case 95: YY_RULE_SETUP -#line 217 "lev_comp.l" +#line 218 "lev_comp.l" ST_RET(REVIVED_ID); YY_BREAK case 96: YY_RULE_SETUP -#line 218 "lev_comp.l" +#line 219 "lev_comp.l" ST_RET(AVENGE_ID); YY_BREAK case 97: YY_RULE_SETUP -#line 219 "lev_comp.l" +#line 220 "lev_comp.l" ST_RET(FLEEING_ID); YY_BREAK case 98: YY_RULE_SETUP -#line 220 "lev_comp.l" +#line 221 "lev_comp.l" ST_RET(BLINDED_ID); YY_BREAK case 99: YY_RULE_SETUP -#line 221 "lev_comp.l" +#line 222 "lev_comp.l" ST_RET(PARALYZED_ID); YY_BREAK case 100: YY_RULE_SETUP -#line 222 "lev_comp.l" +#line 223 "lev_comp.l" ST_RET(STUNNED_ID); YY_BREAK case 101: YY_RULE_SETUP -#line 223 "lev_comp.l" +#line 224 "lev_comp.l" ST_RET(CONFUSED_ID); YY_BREAK case 102: YY_RULE_SETUP -#line 224 "lev_comp.l" +#line 225 "lev_comp.l" ST_RET(SEENTRAPS_ID); YY_BREAK case 103: YY_RULE_SETUP -#line 225 "lev_comp.l" +#line 226 "lev_comp.l" ST_RET(ALL_ID); YY_BREAK case 104: YY_RULE_SETUP -#line 226 "lev_comp.l" +#line 227 "lev_comp.l" ST_RETF((yylval.i=1), HORIZ_OR_VERT); YY_BREAK case 105: YY_RULE_SETUP -#line 227 "lev_comp.l" +#line 228 "lev_comp.l" { savetoken(yytext); yylval.i=2; return HORIZ_OR_VERT; } YY_BREAK case 106: YY_RULE_SETUP -#line 228 "lev_comp.l" +#line 229 "lev_comp.l" { savetoken(yytext); yylval.i=D_ISOPEN; return DOOR_STATE; } YY_BREAK case 107: YY_RULE_SETUP -#line 229 "lev_comp.l" +#line 230 "lev_comp.l" { savetoken(yytext); yylval.i=D_CLOSED; return DOOR_STATE; } YY_BREAK case 108: YY_RULE_SETUP -#line 230 "lev_comp.l" +#line 231 "lev_comp.l" { savetoken(yytext); yylval.i=D_LOCKED; return DOOR_STATE; } YY_BREAK case 109: YY_RULE_SETUP -#line 231 "lev_comp.l" +#line 232 "lev_comp.l" { savetoken(yytext); yylval.i=D_NODOOR; return DOOR_STATE; } YY_BREAK case 110: YY_RULE_SETUP -#line 232 "lev_comp.l" +#line 233 "lev_comp.l" { savetoken(yytext); yylval.i=D_BROKEN; return DOOR_STATE; } YY_BREAK case 111: YY_RULE_SETUP -#line 233 "lev_comp.l" +#line 234 "lev_comp.l" { savetoken(yytext); yylval.i=D_SECRET; return DOOR_STATE; } YY_BREAK case 112: YY_RULE_SETUP -#line 234 "lev_comp.l" +#line 235 "lev_comp.l" { savetoken(yytext); yylval.i=W_NORTH; return DIRECTION; } YY_BREAK case 113: YY_RULE_SETUP -#line 235 "lev_comp.l" +#line 236 "lev_comp.l" { savetoken(yytext); yylval.i=W_EAST; return DIRECTION; } YY_BREAK case 114: YY_RULE_SETUP -#line 236 "lev_comp.l" +#line 237 "lev_comp.l" { savetoken(yytext); yylval.i=W_SOUTH; return DIRECTION; } YY_BREAK case 115: YY_RULE_SETUP -#line 237 "lev_comp.l" +#line 238 "lev_comp.l" { savetoken(yytext); yylval.i=W_WEST; return DIRECTION; } YY_BREAK case 116: YY_RULE_SETUP -#line 238 "lev_comp.l" +#line 239 "lev_comp.l" { savetoken(yytext); yylval.i = -1; return RANDOM_TYPE; } YY_BREAK case 117: YY_RULE_SETUP -#line 239 "lev_comp.l" +#line 240 "lev_comp.l" { savetoken(yytext); yylval.i = -1; return RANDOM_TYPE_BRACKET; } YY_BREAK case 118: YY_RULE_SETUP -#line 240 "lev_comp.l" +#line 241 "lev_comp.l" { savetoken(yytext); yylval.i = -2; return NONE; } YY_BREAK case 119: YY_RULE_SETUP -#line 241 "lev_comp.l" +#line 242 "lev_comp.l" ST_RET(A_REGISTER); YY_BREAK case 120: YY_RULE_SETUP -#line 242 "lev_comp.l" +#line 243 "lev_comp.l" { savetoken(yytext); yylval.i=1; return LEFT_OR_RIGHT; } YY_BREAK case 121: YY_RULE_SETUP -#line 243 "lev_comp.l" +#line 244 "lev_comp.l" { savetoken(yytext); yylval.i=2; return LEFT_OR_RIGHT; } YY_BREAK case 122: YY_RULE_SETUP -#line 244 "lev_comp.l" +#line 245 "lev_comp.l" { savetoken(yytext); yylval.i=3; return CENTER; } YY_BREAK case 123: YY_RULE_SETUP -#line 245 "lev_comp.l" +#line 246 "lev_comp.l" { savetoken(yytext); yylval.i=4; return LEFT_OR_RIGHT; } YY_BREAK case 124: YY_RULE_SETUP -#line 246 "lev_comp.l" +#line 247 "lev_comp.l" { savetoken(yytext); yylval.i=5; return LEFT_OR_RIGHT; } YY_BREAK case 125: YY_RULE_SETUP -#line 247 "lev_comp.l" +#line 248 "lev_comp.l" { savetoken(yytext); yylval.i=1; return TOP_OR_BOT; } YY_BREAK case 126: YY_RULE_SETUP -#line 248 "lev_comp.l" +#line 249 "lev_comp.l" { savetoken(yytext); yylval.i=5; return TOP_OR_BOT; } YY_BREAK case 127: YY_RULE_SETUP -#line 249 "lev_comp.l" +#line 250 "lev_comp.l" { savetoken(yytext); yylval.i=1; return LIGHT_STATE; } YY_BREAK case 128: YY_RULE_SETUP -#line 250 "lev_comp.l" +#line 251 "lev_comp.l" { savetoken(yytext); yylval.i=0; return LIGHT_STATE; } YY_BREAK case 129: YY_RULE_SETUP -#line 251 "lev_comp.l" +#line 252 "lev_comp.l" { savetoken(yytext); yylval.i=1; return FILLING; } YY_BREAK case 130: YY_RULE_SETUP -#line 252 "lev_comp.l" +#line 253 "lev_comp.l" { savetoken(yytext); yylval.i=0; return FILLING; } YY_BREAK case 131: YY_RULE_SETUP -#line 253 "lev_comp.l" +#line 254 "lev_comp.l" { savetoken(yytext); yylval.i=0; return IRREGULAR; } YY_BREAK case 132: YY_RULE_SETUP -#line 254 "lev_comp.l" +#line 255 "lev_comp.l" { savetoken(yytext); yylval.i=1; return IRREGULAR; } YY_BREAK case 133: YY_RULE_SETUP -#line 255 "lev_comp.l" +#line 256 "lev_comp.l" { savetoken(yytext); yylval.i=1; return JOINED; } YY_BREAK case 134: YY_RULE_SETUP -#line 256 "lev_comp.l" +#line 257 "lev_comp.l" { savetoken(yytext); yylval.i=0; return JOINED; } YY_BREAK case 135: YY_RULE_SETUP -#line 257 "lev_comp.l" +#line 258 "lev_comp.l" { savetoken(yytext); yylval.i=1; return LIMITED; } YY_BREAK case 136: YY_RULE_SETUP -#line 258 "lev_comp.l" +#line 259 "lev_comp.l" { savetoken(yytext); yylval.i=0; return LIMITED; } YY_BREAK case 137: YY_RULE_SETUP -#line 259 "lev_comp.l" +#line 260 "lev_comp.l" { savetoken(yytext); yylval.i= AM_NONE; return ALIGNMENT; } YY_BREAK case 138: YY_RULE_SETUP -#line 260 "lev_comp.l" +#line 261 "lev_comp.l" { savetoken(yytext); yylval.i= AM_LAWFUL; return ALIGNMENT; } YY_BREAK case 139: YY_RULE_SETUP -#line 261 "lev_comp.l" +#line 262 "lev_comp.l" { savetoken(yytext); yylval.i= AM_NEUTRAL; return ALIGNMENT; } YY_BREAK case 140: YY_RULE_SETUP -#line 262 "lev_comp.l" +#line 263 "lev_comp.l" { savetoken(yytext); yylval.i= AM_CHAOTIC; return ALIGNMENT; } YY_BREAK case 141: YY_RULE_SETUP -#line 263 "lev_comp.l" +#line 264 "lev_comp.l" { savetoken(yytext); yylval.i= AM_SPLEV_CO; return ALIGNMENT; } YY_BREAK case 142: YY_RULE_SETUP -#line 264 "lev_comp.l" +#line 265 "lev_comp.l" { savetoken(yytext); yylval.i= AM_SPLEV_NONCO; return ALIGNMENT; } YY_BREAK case 143: YY_RULE_SETUP -#line 265 "lev_comp.l" +#line 266 "lev_comp.l" { savetoken(yytext); yylval.i=1; return MON_ATTITUDE; } YY_BREAK case 144: YY_RULE_SETUP -#line 266 "lev_comp.l" +#line 267 "lev_comp.l" { savetoken(yytext); yylval.i=0; return MON_ATTITUDE; } YY_BREAK case 145: YY_RULE_SETUP -#line 267 "lev_comp.l" +#line 268 "lev_comp.l" { savetoken(yytext); yylval.i=1; return MON_ALERTNESS; } YY_BREAK case 146: YY_RULE_SETUP -#line 268 "lev_comp.l" +#line 269 "lev_comp.l" { savetoken(yytext); yylval.i=0; return MON_ALERTNESS; } YY_BREAK case 147: YY_RULE_SETUP -#line 269 "lev_comp.l" +#line 270 "lev_comp.l" { savetoken(yytext); yylval.i= M_AP_FURNITURE; return MON_APPEARANCE; } YY_BREAK case 148: YY_RULE_SETUP -#line 270 "lev_comp.l" +#line 271 "lev_comp.l" { savetoken(yytext); yylval.i= M_AP_MONSTER; return MON_APPEARANCE; } YY_BREAK case 149: YY_RULE_SETUP -#line 271 "lev_comp.l" +#line 272 "lev_comp.l" { savetoken(yytext); yylval.i= M_AP_OBJECT; return MON_APPEARANCE; } YY_BREAK case 150: YY_RULE_SETUP -#line 272 "lev_comp.l" +#line 273 "lev_comp.l" { savetoken(yytext); yylval.i=2; return ALTAR_TYPE; } YY_BREAK case 151: YY_RULE_SETUP -#line 273 "lev_comp.l" +#line 274 "lev_comp.l" { savetoken(yytext); yylval.i=1; return ALTAR_TYPE; } YY_BREAK case 152: YY_RULE_SETUP -#line 274 "lev_comp.l" +#line 275 "lev_comp.l" { savetoken(yytext); yylval.i=0; return ALTAR_TYPE; } YY_BREAK case 153: YY_RULE_SETUP -#line 275 "lev_comp.l" +#line 276 "lev_comp.l" { savetoken(yytext); yylval.i=1; return UP_OR_DOWN; } YY_BREAK case 154: YY_RULE_SETUP -#line 276 "lev_comp.l" +#line 277 "lev_comp.l" { savetoken(yytext); yylval.i=0; return UP_OR_DOWN; } YY_BREAK case 155: YY_RULE_SETUP -#line 277 "lev_comp.l" +#line 278 "lev_comp.l" { savetoken(yytext); yylval.i=0; return BOOLEAN; } YY_BREAK case 156: YY_RULE_SETUP -#line 278 "lev_comp.l" +#line 279 "lev_comp.l" { savetoken(yytext); yylval.i=1; return BOOLEAN; } YY_BREAK case 157: YY_RULE_SETUP -#line 279 "lev_comp.l" +#line 280 "lev_comp.l" { savetoken(yytext); yylval.i=DUST; return ENGRAVING_TYPE; } YY_BREAK case 158: YY_RULE_SETUP -#line 280 "lev_comp.l" +#line 281 "lev_comp.l" { savetoken(yytext); yylval.i=ENGRAVE; return ENGRAVING_TYPE; } YY_BREAK case 159: YY_RULE_SETUP -#line 281 "lev_comp.l" +#line 282 "lev_comp.l" { savetoken(yytext); yylval.i=BURN; return ENGRAVING_TYPE; } YY_BREAK case 160: YY_RULE_SETUP -#line 282 "lev_comp.l" +#line 283 "lev_comp.l" { savetoken(yytext); yylval.i=MARK; return ENGRAVING_TYPE; } YY_BREAK case 161: YY_RULE_SETUP -#line 283 "lev_comp.l" +#line 284 "lev_comp.l" { savetoken(yytext); yylval.i=ENGR_BLOOD; return ENGRAVING_TYPE; } YY_BREAK case 162: YY_RULE_SETUP -#line 284 "lev_comp.l" +#line 285 "lev_comp.l" { savetoken(yytext); yylval.i=1; return CURSE_TYPE; } YY_BREAK case 163: YY_RULE_SETUP -#line 285 "lev_comp.l" +#line 286 "lev_comp.l" { savetoken(yytext); yylval.i=2; return CURSE_TYPE; } YY_BREAK case 164: YY_RULE_SETUP -#line 286 "lev_comp.l" +#line 287 "lev_comp.l" { savetoken(yytext); yylval.i=3; return CURSE_TYPE; } YY_BREAK case 165: YY_RULE_SETUP -#line 287 "lev_comp.l" +#line 288 "lev_comp.l" { savetoken(yytext); yylval.i=NOTELEPORT; return FLAG_TYPE; } YY_BREAK case 166: YY_RULE_SETUP -#line 288 "lev_comp.l" +#line 289 "lev_comp.l" { savetoken(yytext); yylval.i=HARDFLOOR; return FLAG_TYPE; } YY_BREAK case 167: YY_RULE_SETUP -#line 289 "lev_comp.l" +#line 290 "lev_comp.l" { savetoken(yytext); yylval.i=NOMMAP; return FLAG_TYPE; } YY_BREAK case 168: YY_RULE_SETUP -#line 290 "lev_comp.l" +#line 291 "lev_comp.l" { savetoken(yytext); yylval.i=ARBOREAL; return FLAG_TYPE; } /* KMH */ YY_BREAK case 169: YY_RULE_SETUP -#line 291 "lev_comp.l" +#line 292 "lev_comp.l" { savetoken(yytext); yylval.i=SHORTSIGHTED; return FLAG_TYPE; } YY_BREAK case 170: YY_RULE_SETUP -#line 292 "lev_comp.l" +#line 293 "lev_comp.l" { savetoken(yytext); yylval.i=MAZELEVEL; return FLAG_TYPE; } YY_BREAK case 171: YY_RULE_SETUP -#line 293 "lev_comp.l" +#line 294 "lev_comp.l" { savetoken(yytext); yylval.i=PREMAPPED; return FLAG_TYPE; } YY_BREAK case 172: YY_RULE_SETUP -#line 294 "lev_comp.l" +#line 295 "lev_comp.l" { savetoken(yytext); yylval.i=SHROUD; return FLAG_TYPE; } YY_BREAK case 173: YY_RULE_SETUP -#line 295 "lev_comp.l" +#line 296 "lev_comp.l" { savetoken(yytext); yylval.i=GRAVEYARD; return FLAG_TYPE; } YY_BREAK case 174: YY_RULE_SETUP -#line 296 "lev_comp.l" +#line 297 "lev_comp.l" { savetoken(yytext); yylval.i=ICEDPOOLS; return FLAG_TYPE; } YY_BREAK case 175: YY_RULE_SETUP -#line 297 "lev_comp.l" +#line 298 "lev_comp.l" { savetoken(yytext); yylval.i=SOLIDIFY; return FLAG_TYPE; } YY_BREAK case 176: YY_RULE_SETUP -#line 298 "lev_comp.l" +#line 299 "lev_comp.l" +{ savetoken(yytext); yylval.i=CORRMAZE; return FLAG_TYPE; } + YY_BREAK +case 177: +YY_RULE_SETUP +#line 300 "lev_comp.l" { char *p = strchr(yytext, 'd'); savetoken(yytext); if (p) { @@ -2391,124 +2382,124 @@ YY_RULE_SETUP return DICE; } YY_BREAK -case 177: +case 178: YY_RULE_SETUP -#line 308 "lev_comp.l" +#line 310 "lev_comp.l" { savetoken(yytext); yylval.i = atoi(yytext + 1); if (yylval.i < 0 || yylval.i > 100) lc_error("Unexpected percentile '%li%%'", yylval.i); return PERCENT; } YY_BREAK -case 178: -YY_RULE_SETUP -#line 312 "lev_comp.l" -{ savetoken(yytext); yylval.i=atoi(yytext); return MINUS_INTEGER; } - YY_BREAK case 179: YY_RULE_SETUP -#line 313 "lev_comp.l" -{ savetoken(yytext); yylval.i=atoi(yytext); return PLUS_INTEGER; } +#line 314 "lev_comp.l" +{ savetoken(yytext); yylval.i=atoi(yytext); return MINUS_INTEGER; } YY_BREAK case 180: YY_RULE_SETUP -#line 314 "lev_comp.l" +#line 315 "lev_comp.l" +{ savetoken(yytext); yylval.i=atoi(yytext); return PLUS_INTEGER; } + YY_BREAK +case 181: +YY_RULE_SETUP +#line 316 "lev_comp.l" { savetoken(yytext); yylval.i = atoi(yytext); if (yylval.i < 0 || yylval.i > 100) lc_error("Unexpected percentile '%li%%'", yylval.i); return SPERCENT; } YY_BREAK -case 181: +case 182: YY_RULE_SETUP -#line 318 "lev_comp.l" +#line 320 "lev_comp.l" { savetoken(yytext); yylval.i=atoi(yytext); return INTEGER; } YY_BREAK -case 182: -/* rule 182 can match eol */ +case 183: +/* rule 183 can match eol */ YY_RULE_SETUP -#line 319 "lev_comp.l" +#line 321 "lev_comp.l" { savetoken(yytext); yytext[yyleng-1] = 0; /* Discard the trailing \" */ yylval.map = (char *) alloc(strlen(yytext+1)+1); Strcpy(yylval.map, yytext+1); /* Discard the first \" */ return STRING; } YY_BREAK -case 183: -YY_RULE_SETUP -#line 324 "lev_comp.l" -{ savetoken(yytext); return handle_varstring_check(); } - YY_BREAK case 184: YY_RULE_SETUP -#line 325 "lev_comp.l" -{ savetoken(yytext); yylval.i = SPO_JE; return COMPARE_TYPE; } +#line 326 "lev_comp.l" +{ savetoken(yytext); return handle_varstring_check(); } YY_BREAK case 185: YY_RULE_SETUP -#line 326 "lev_comp.l" -{ savetoken(yytext); yylval.i = SPO_JNE; return COMPARE_TYPE; } +#line 327 "lev_comp.l" +{ savetoken(yytext); yylval.i = SPO_JE; return COMPARE_TYPE; } YY_BREAK case 186: YY_RULE_SETUP -#line 327 "lev_comp.l" +#line 328 "lev_comp.l" { savetoken(yytext); yylval.i = SPO_JNE; return COMPARE_TYPE; } YY_BREAK case 187: YY_RULE_SETUP -#line 328 "lev_comp.l" -{ savetoken(yytext); yylval.i = SPO_JLE; return COMPARE_TYPE; } +#line 329 "lev_comp.l" +{ savetoken(yytext); yylval.i = SPO_JNE; return COMPARE_TYPE; } YY_BREAK case 188: YY_RULE_SETUP -#line 329 "lev_comp.l" -{ savetoken(yytext); yylval.i = SPO_JGE; return COMPARE_TYPE; } +#line 330 "lev_comp.l" +{ savetoken(yytext); yylval.i = SPO_JLE; return COMPARE_TYPE; } YY_BREAK case 189: YY_RULE_SETUP -#line 330 "lev_comp.l" -{ savetoken(yytext); yylval.i = SPO_JL; return COMPARE_TYPE; } +#line 331 "lev_comp.l" +{ savetoken(yytext); yylval.i = SPO_JGE; return COMPARE_TYPE; } YY_BREAK case 190: YY_RULE_SETUP -#line 331 "lev_comp.l" -{ savetoken(yytext); yylval.i = SPO_JG; return COMPARE_TYPE; } +#line 332 "lev_comp.l" +{ savetoken(yytext); yylval.i = SPO_JL; return COMPARE_TYPE; } YY_BREAK case 191: -/* rule 191 can match eol */ -YY_RULE_SETUP -#line 332 "lev_comp.l" -{ newline(); } - YY_BREAK -case 192: YY_RULE_SETUP #line 333 "lev_comp.l" -{ advancepos(yytext); } +{ savetoken(yytext); yylval.i = SPO_JG; return COMPARE_TYPE; } + YY_BREAK +case 192: +/* rule 192 can match eol */ +YY_RULE_SETUP +#line 334 "lev_comp.l" +{ newline(); } YY_BREAK case 193: YY_RULE_SETUP -#line 334 "lev_comp.l" -{ savetoken(yytext); yylval.i = yytext[2]; return CHAR; } +#line 335 "lev_comp.l" +{ advancepos(yytext); } YY_BREAK case 194: YY_RULE_SETUP -#line 335 "lev_comp.l" -{ savetoken(yytext); yylval.i = yytext[1]; return CHAR; } +#line 336 "lev_comp.l" +{ savetoken(yytext); yylval.i = yytext[2]; return CHAR; } YY_BREAK case 195: YY_RULE_SETUP -#line 336 "lev_comp.l" -ST_RET(UNKNOWN_TYPE); +#line 337 "lev_comp.l" +{ savetoken(yytext); yylval.i = yytext[1]; return CHAR; } YY_BREAK case 196: YY_RULE_SETUP -#line 337 "lev_comp.l" -{ savetoken(yytext); return yytext[0]; } +#line 338 "lev_comp.l" +ST_RET(UNKNOWN_TYPE); YY_BREAK case 197: YY_RULE_SETUP -#line 338 "lev_comp.l" +#line 339 "lev_comp.l" +{ savetoken(yytext); return yytext[0]; } + YY_BREAK +case 198: +YY_RULE_SETUP +#line 340 "lev_comp.l" ECHO; YY_BREAK -#line 2512 "lex.yy.c" +#line 2503 "lex.yy.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(MAPC): yyterminate(); @@ -2803,7 +2794,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1049 ) + if ( yy_current_state >= 1038 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2831,11 +2822,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1049 ) + if ( yy_current_state >= 1038 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 1048); + yy_is_jam = (yy_current_state == 1037); return yy_is_jam ? 0 : yy_current_state; } @@ -3507,7 +3498,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 337 "lev_comp.l" +#line 339 "lev_comp.l" #ifdef AMIGA diff --git a/sys/share/lev_yacc.c b/sys/share/lev_yacc.c index 376c48759..d2280994c 100644 --- a/sys/share/lev_yacc.c +++ b/sys/share/lev_yacc.c @@ -64,7 +64,7 @@ /* Copy the first part of user declarations. */ #line 1 "lev_comp.y" /* yacc.c:339 */ -/* NetHack 3.5 lev_comp.y $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ +/* NetHack 3.5 lev_comp.y $NHDT-Date: 1428655167 2015/04/10 08:39:27 $ $NHDT-Branch: master $:$NHDT-Revision: 1.11 $ */ /* NetHack 3.5 lev_comp.y $Date: 2009/05/06 10:54:31 $ $Revision: 1.8 $ */ /* SCCS Id: @(#)lev_yacc.c 3.5 2007/08/01 */ /* Copyright (c) 1989 by Jean-Christophe Collet */ @@ -88,6 +88,7 @@ #pragma alloca /* keep leading space! */ #endif +#define SPEC_LEV /* for USE_OLDARGS (sp_lev.h) */ #include "hack.h" #include "sp_lev.h" @@ -208,7 +209,7 @@ extern const char *fname; extern char curr_token[512]; -#line 212 "y.tab.c" /* yacc.c:339 */ +#line 213 "y.tab.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -600,7 +601,7 @@ extern int yydebug; typedef union YYSTYPE YYSTYPE; union YYSTYPE { -#line 148 "lev_comp.y" /* yacc.c:355 */ +#line 149 "lev_comp.y" /* yacc.c:355 */ long i; char* map; @@ -637,7 +638,7 @@ union YYSTYPE char *varstr; } meth; -#line 641 "y.tab.c" /* yacc.c:355 */ +#line 642 "y.tab.c" /* yacc.c:355 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -652,7 +653,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 656 "y.tab.c" /* yacc.c:358 */ +#line 657 "y.tab.c" /* yacc.c:358 */ #ifdef short # undef short @@ -967,47 +968,47 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 275, 275, 276, 279, 280, 283, 305, 310, 326, - 330, 336, 345, 354, 358, 384, 387, 394, 398, 405, - 408, 415, 416, 420, 423, 429, 433, 440, 443, 449, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, 501, 502, 503, 504, 505, 506, - 507, 508, 509, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 523, 524, 525, 528, 529, 532, 544, 550, - 556, 562, 568, 574, 580, 586, 592, 599, 606, 613, - 620, 627, 634, 643, 648, 655, 660, 667, 672, 679, - 683, 689, 694, 701, 705, 711, 715, 722, 744, 721, - 758, 803, 810, 813, 819, 825, 829, 838, 842, 837, - 899, 900, 904, 903, 916, 915, 930, 940, 941, 944, - 977, 976, 1002, 1001, 1031, 1030, 1061, 1060, 1086, 1095, - 1094, 1121, 1127, 1131, 1135, 1141, 1148, 1157, 1165, 1176, - 1175, 1191, 1190, 1207, 1210, 1216, 1226, 1232, 1241, 1247, - 1252, 1258, 1263, 1269, 1278, 1284, 1285, 1288, 1289, 1292, - 1296, 1302, 1303, 1306, 1312, 1318, 1326, 1327, 1330, 1331, - 1334, 1339, 1338, 1352, 1359, 1365, 1373, 1378, 1383, 1388, - 1393, 1398, 1403, 1408, 1413, 1418, 1423, 1428, 1433, 1438, - 1443, 1448, 1455, 1462, 1466, 1479, 1486, 1485, 1501, 1509, - 1515, 1523, 1528, 1533, 1538, 1543, 1548, 1553, 1558, 1563, - 1568, 1579, 1584, 1589, 1594, 1599, 1606, 1612, 1639, 1644, - 1651, 1655, 1661, 1667, 1673, 1683, 1693, 1708, 1718, 1721, - 1727, 1733, 1739, 1745, 1750, 1757, 1763, 1769, 1775, 1782, - 1781, 1805, 1808, 1814, 1820, 1824, 1829, 1836, 1842, 1849, - 1853, 1859, 1867, 1870, 1880, 1884, 1887, 1893, 1897, 1904, - 1908, 1912, 1918, 1919, 1922, 1923, 1926, 1927, 1928, 1934, - 1935, 1936, 1942, 1943, 1946, 1955, 1960, 1967, 1977, 1983, - 1987, 1991, 1998, 2007, 2013, 2017, 2023, 2027, 2035, 2039, - 2046, 2055, 2066, 2070, 2077, 2086, 2095, 2106, 2110, 2117, - 2126, 2135, 2144, 2153, 2159, 2163, 2170, 2179, 2189, 2198, - 2207, 2214, 2215, 2221, 2222, 2223, 2224, 2232, 2240, 2241, - 2242, 2243, 2244, 2245, 2248, 2254, 2262, 2291, 2292, 2295, - 2296, 2299, 2303, 2310, 2317, 2328, 2331, 2339, 2343, 2347, - 2351, 2355, 2360, 2364, 2368, 2372, 2376, 2380, 2384, 2388, - 2392, 2396, 2400, 2404, 2408, 2415, 2421, 2425, 2431, 2437, - 2438, 2439, 2442, 2446, 2450, 2454, 2460, 2461, 2464, 2465, - 2468, 2469, 2472, 2473, 2476, 2480, 2498 + 0, 276, 276, 277, 280, 281, 284, 306, 311, 332, + 336, 342, 352, 363, 369, 398, 401, 408, 412, 419, + 422, 429, 430, 434, 437, 443, 447, 454, 457, 463, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 537, 538, 539, 542, 543, 546, 558, 564, + 570, 576, 582, 588, 594, 600, 606, 614, 622, 630, + 638, 646, 654, 664, 669, 676, 681, 688, 693, 700, + 704, 710, 715, 722, 726, 732, 736, 743, 765, 742, + 779, 827, 834, 837, 843, 850, 854, 863, 867, 862, + 929, 930, 934, 933, 946, 945, 960, 970, 971, 974, + 1013, 1012, 1046, 1045, 1075, 1074, 1105, 1104, 1130, 1139, + 1138, 1165, 1171, 1176, 1181, 1188, 1195, 1204, 1212, 1224, + 1223, 1242, 1241, 1260, 1263, 1269, 1279, 1285, 1294, 1300, + 1305, 1311, 1316, 1322, 1333, 1339, 1340, 1343, 1344, 1347, + 1351, 1357, 1358, 1361, 1368, 1376, 1384, 1385, 1388, 1389, + 1392, 1397, 1396, 1410, 1417, 1423, 1431, 1436, 1442, 1448, + 1454, 1460, 1465, 1470, 1475, 1480, 1485, 1490, 1495, 1500, + 1505, 1510, 1518, 1525, 1529, 1542, 1549, 1548, 1564, 1572, + 1578, 1586, 1592, 1597, 1602, 1607, 1612, 1617, 1622, 1627, + 1632, 1643, 1648, 1653, 1658, 1663, 1670, 1676, 1705, 1710, + 1718, 1724, 1730, 1737, 1744, 1754, 1764, 1779, 1790, 1793, + 1799, 1805, 1811, 1817, 1822, 1829, 1836, 1842, 1848, 1855, + 1854, 1879, 1882, 1888, 1895, 1899, 1904, 1911, 1917, 1924, + 1928, 1935, 1943, 1946, 1956, 1960, 1963, 1969, 1973, 1980, + 1984, 1988, 1994, 1995, 1998, 1999, 2002, 2003, 2004, 2010, + 2011, 2012, 2018, 2019, 2022, 2031, 2036, 2043, 2053, 2059, + 2063, 2067, 2074, 2083, 2089, 2093, 2099, 2103, 2111, 2115, + 2122, 2131, 2142, 2146, 2153, 2162, 2171, 2182, 2186, 2193, + 2202, 2211, 2220, 2229, 2235, 2239, 2246, 2255, 2265, 2274, + 2283, 2290, 2291, 2297, 2301, 2305, 2309, 2317, 2326, 2330, + 2334, 2338, 2342, 2346, 2349, 2356, 2365, 2393, 2394, 2397, + 2398, 2401, 2405, 2412, 2419, 2430, 2433, 2441, 2445, 2449, + 2453, 2457, 2462, 2466, 2470, 2475, 2480, 2485, 2489, 2494, + 2499, 2503, 2507, 2512, 2516, 2523, 2529, 2533, 2539, 2546, + 2547, 2548, 2551, 2555, 2559, 2563, 2569, 2570, 2573, 2574, + 2577, 2578, 2581, 2582, 2585, 2589, 2607 }; #endif @@ -2442,7 +2443,7 @@ yyreduce: switch (yyn) { case 6: -#line 284 "lev_comp.y" /* yacc.c:1646 */ +#line 285 "lev_comp.y" /* yacc.c:1646 */ { if (fatal_error > 0) { (void) fprintf(stderr, @@ -2462,88 +2463,98 @@ yyreduce: vardef_free_all(variable_definitions); variable_definitions = NULL; } -#line 2466 "y.tab.c" /* yacc.c:1646 */ +#line 2467 "y.tab.c" /* yacc.c:1646 */ break; case 7: -#line 306 "lev_comp.y" /* yacc.c:1646 */ +#line 307 "lev_comp.y" /* yacc.c:1646 */ { start_level_def(&splev, (yyvsp[0].map)); (yyval.map) = (yyvsp[0].map); } -#line 2475 "y.tab.c" /* yacc.c:1646 */ +#line 2476 "y.tab.c" /* yacc.c:1646 */ break; case 8: -#line 311 "lev_comp.y" /* yacc.c:1646 */ +#line 312 "lev_comp.y" /* yacc.c:1646 */ { start_level_def(&splev, (yyvsp[-2].map)); if ((yyvsp[0].i) == -1) { - add_opvars(splev, "iiiiiiiio", LVLINIT_MAZEGRID,HWALL,0,0, 0,0,0,0, SPO_INITLEVEL); + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_MAZEGRID,HWALL,0,0, + 0,0,0,0, SPO_INITLEVEL)); } else { long bg = what_map_char((char) (yyvsp[0].i)); - add_opvars(splev, "iiiiiiiio", LVLINIT_SOLIDFILL, bg, 0,0, 0,0,0,0, SPO_INITLEVEL); + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_SOLIDFILL, bg, 0,0, + 0,0,0,0, SPO_INITLEVEL)); } - add_opvars(splev, "io", MAZELEVEL, SPO_LEVEL_FLAGS); + add_opvars(splev, "io", + VA_PASS2(MAZELEVEL, SPO_LEVEL_FLAGS)); max_x_map = COLNO-1; max_y_map = ROWNO; (yyval.map) = (yyvsp[-2].map); } -#line 2493 "y.tab.c" /* yacc.c:1646 */ +#line 2499 "y.tab.c" /* yacc.c:1646 */ break; case 9: -#line 327 "lev_comp.y" /* yacc.c:1646 */ +#line 333 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = -1; } -#line 2501 "y.tab.c" /* yacc.c:1646 */ +#line 2507 "y.tab.c" /* yacc.c:1646 */ break; case 10: -#line 331 "lev_comp.y" /* yacc.c:1646 */ +#line 337 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = what_map_char((char) (yyvsp[0].i)); } -#line 2509 "y.tab.c" /* yacc.c:1646 */ +#line 2515 "y.tab.c" /* yacc.c:1646 */ break; case 11: -#line 337 "lev_comp.y" /* yacc.c:1646 */ +#line 343 "lev_comp.y" /* yacc.c:1646 */ { long filling = (yyvsp[0].terr).ter; if (filling == INVALID_TYPE || filling >= MAX_TYPE) lc_error("INIT_MAP: Invalid fill char type."); - add_opvars(splev, "iiiiiiiio", LVLINIT_SOLIDFILL,filling,0,(long)(yyvsp[0].terr).lit, 0,0,0,0, SPO_INITLEVEL); + add_opvars(splev, "iiiiiiiio", + LVLINIT_SOLIDFILL,filling,0,(long)(yyvsp[0].terr).lit, 0,0,0,0, SPO_INITLEVEL); max_x_map = COLNO-1; max_y_map = ROWNO; } -#line 2522 "y.tab.c" /* yacc.c:1646 */ +#line 2529 "y.tab.c" /* yacc.c:1646 */ break; case 12: -#line 346 "lev_comp.y" /* yacc.c:1646 */ +#line 353 "lev_comp.y" /* yacc.c:1646 */ { long filling = what_map_char((char) (yyvsp[0].i)); if (filling == INVALID_TYPE || filling >= MAX_TYPE) lc_error("INIT_MAP: Invalid fill char type."); - add_opvars(splev, "iiiiiiiio", LVLINIT_MAZEGRID,filling,0,0, 0,0,0,0, SPO_INITLEVEL); + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_MAZEGRID,filling,0,0, + 0,0,0,0, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; } -#line 2535 "y.tab.c" /* yacc.c:1646 */ +#line 2544 "y.tab.c" /* yacc.c:1646 */ break; case 13: -#line 355 "lev_comp.y" /* yacc.c:1646 */ +#line 364 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "iiiiiiiio", LVLINIT_ROGUE,0,0,0,0,0,0,0, SPO_INITLEVEL); + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_ROGUE,0,0,0, + 0,0,0,0, SPO_INITLEVEL)); } -#line 2543 "y.tab.c" /* yacc.c:1646 */ +#line 2554 "y.tab.c" /* yacc.c:1646 */ break; case 14: -#line 359 "lev_comp.y" /* yacc.c:1646 */ +#line 370 "lev_comp.y" /* yacc.c:1646 */ { long fg = what_map_char((char) (yyvsp[-11].i)); long bg = what_map_char((char) (yyvsp[-9].i)); @@ -2562,411 +2573,421 @@ yyreduce: if (filling == INVALID_TYPE) lc_error("INIT_MAP: Invalid fill char type."); - add_opvars(splev, "iiiiiiiio", LVLINIT_MINES,filling,walled,lit, joined,smoothed,bg,fg, SPO_INITLEVEL); + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_MINES,filling,walled,lit, + joined,smoothed,bg,fg, + SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; } -#line 2570 "y.tab.c" /* yacc.c:1646 */ +#line 2584 "y.tab.c" /* yacc.c:1646 */ break; case 15: -#line 384 "lev_comp.y" /* yacc.c:1646 */ +#line 398 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = 0; } -#line 2578 "y.tab.c" /* yacc.c:1646 */ +#line 2592 "y.tab.c" /* yacc.c:1646 */ break; case 16: -#line 388 "lev_comp.y" /* yacc.c:1646 */ +#line 402 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (yyvsp[0].i); } -#line 2586 "y.tab.c" /* yacc.c:1646 */ +#line 2600 "y.tab.c" /* yacc.c:1646 */ break; case 17: -#line 394 "lev_comp.y" /* yacc.c:1646 */ +#line 408 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_COPY); + add_opvars(splev, "o", VA_PASS1(SPO_COPY)); (yyval.i) = 0; } -#line 2595 "y.tab.c" /* yacc.c:1646 */ +#line 2609 "y.tab.c" /* yacc.c:1646 */ break; case 18: -#line 399 "lev_comp.y" /* yacc.c:1646 */ +#line 413 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = 1; } -#line 2603 "y.tab.c" /* yacc.c:1646 */ +#line 2617 "y.tab.c" /* yacc.c:1646 */ break; case 19: -#line 405 "lev_comp.y" /* yacc.c:1646 */ +#line 419 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = -1; } -#line 2611 "y.tab.c" /* yacc.c:1646 */ +#line 2625 "y.tab.c" /* yacc.c:1646 */ break; case 20: -#line 409 "lev_comp.y" /* yacc.c:1646 */ +#line 423 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = what_map_char((char) (yyvsp[0].i)); } -#line 2619 "y.tab.c" /* yacc.c:1646 */ +#line 2633 "y.tab.c" /* yacc.c:1646 */ break; case 23: -#line 420 "lev_comp.y" /* yacc.c:1646 */ +#line 434 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", 0, SPO_LEVEL_FLAGS); + add_opvars(splev, "io", VA_PASS2(0, SPO_LEVEL_FLAGS)); } -#line 2627 "y.tab.c" /* yacc.c:1646 */ +#line 2641 "y.tab.c" /* yacc.c:1646 */ break; case 24: -#line 424 "lev_comp.y" /* yacc.c:1646 */ +#line 438 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", (yyvsp[0].i), SPO_LEVEL_FLAGS); + add_opvars(splev, "io", VA_PASS2((yyvsp[0].i), SPO_LEVEL_FLAGS)); } -#line 2635 "y.tab.c" /* yacc.c:1646 */ +#line 2649 "y.tab.c" /* yacc.c:1646 */ break; case 25: -#line 430 "lev_comp.y" /* yacc.c:1646 */ +#line 444 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = ((yyvsp[-2].i) | (yyvsp[0].i)); } -#line 2643 "y.tab.c" /* yacc.c:1646 */ +#line 2657 "y.tab.c" /* yacc.c:1646 */ break; case 26: -#line 434 "lev_comp.y" /* yacc.c:1646 */ +#line 448 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (yyvsp[0].i); } -#line 2651 "y.tab.c" /* yacc.c:1646 */ +#line 2665 "y.tab.c" /* yacc.c:1646 */ break; case 27: -#line 440 "lev_comp.y" /* yacc.c:1646 */ +#line 454 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = 0; } -#line 2659 "y.tab.c" /* yacc.c:1646 */ +#line 2673 "y.tab.c" /* yacc.c:1646 */ break; case 28: -#line 444 "lev_comp.y" /* yacc.c:1646 */ +#line 458 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = 1 + (yyvsp[0].i); } -#line 2667 "y.tab.c" /* yacc.c:1646 */ +#line 2681 "y.tab.c" /* yacc.c:1646 */ break; case 29: -#line 450 "lev_comp.y" /* yacc.c:1646 */ +#line 464 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (yyvsp[-1].i); } -#line 2675 "y.tab.c" /* yacc.c:1646 */ +#line 2689 "y.tab.c" /* yacc.c:1646 */ break; case 97: -#line 533 "lev_comp.y" /* yacc.c:1646 */ +#line 547 "lev_comp.y" /* yacc.c:1646 */ { struct lc_vardefs *vd; if ((vd = vardef_defined(variable_definitions, (yyvsp[0].map), 1))) { if (!(vd->var_type & SPOVAR_ARRAY)) lc_error("Trying to shuffle non-array variable '%s'", (yyvsp[0].map)); } else lc_error("Trying to shuffle undefined variable '%s'", (yyvsp[0].map)); - add_opvars(splev, "so", (yyvsp[0].map), SPO_SHUFFLE_ARRAY); + add_opvars(splev, "so", VA_PASS2((yyvsp[0].map), SPO_SHUFFLE_ARRAY)); Free((yyvsp[0].map)); } -#line 2689 "y.tab.c" /* yacc.c:1646 */ +#line 2703 "y.tab.c" /* yacc.c:1646 */ break; case 98: -#line 545 "lev_comp.y" /* yacc.c:1646 */ +#line 559 "lev_comp.y" /* yacc.c:1646 */ { variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-2].map), SPOVAR_INT); - add_opvars(splev, "iso", 0, (yyvsp[-2].map), SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, (yyvsp[-2].map), SPO_VAR_INIT)); Free((yyvsp[-2].map)); } -#line 2699 "y.tab.c" /* yacc.c:1646 */ +#line 2713 "y.tab.c" /* yacc.c:1646 */ break; case 99: -#line 551 "lev_comp.y" /* yacc.c:1646 */ +#line 565 "lev_comp.y" /* yacc.c:1646 */ { variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_SEL); - add_opvars(splev, "iso", 0, (yyvsp[-4].map), SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, (yyvsp[-4].map), SPO_VAR_INIT)); Free((yyvsp[-4].map)); } -#line 2709 "y.tab.c" /* yacc.c:1646 */ +#line 2723 "y.tab.c" /* yacc.c:1646 */ break; case 100: -#line 557 "lev_comp.y" /* yacc.c:1646 */ +#line 571 "lev_comp.y" /* yacc.c:1646 */ { variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-2].map), SPOVAR_STRING); - add_opvars(splev, "iso", 0, (yyvsp[-2].map), SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, (yyvsp[-2].map), SPO_VAR_INIT)); Free((yyvsp[-2].map)); } -#line 2719 "y.tab.c" /* yacc.c:1646 */ +#line 2733 "y.tab.c" /* yacc.c:1646 */ break; case 101: -#line 563 "lev_comp.y" /* yacc.c:1646 */ +#line 577 "lev_comp.y" /* yacc.c:1646 */ { variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_MAPCHAR); - add_opvars(splev, "iso", 0, (yyvsp[-4].map), SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, (yyvsp[-4].map), SPO_VAR_INIT)); Free((yyvsp[-4].map)); } -#line 2729 "y.tab.c" /* yacc.c:1646 */ +#line 2743 "y.tab.c" /* yacc.c:1646 */ break; case 102: -#line 569 "lev_comp.y" /* yacc.c:1646 */ +#line 583 "lev_comp.y" /* yacc.c:1646 */ { variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_MONST); - add_opvars(splev, "iso", 0, (yyvsp[-4].map), SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, (yyvsp[-4].map), SPO_VAR_INIT)); Free((yyvsp[-4].map)); } -#line 2739 "y.tab.c" /* yacc.c:1646 */ +#line 2753 "y.tab.c" /* yacc.c:1646 */ break; case 103: -#line 575 "lev_comp.y" /* yacc.c:1646 */ +#line 589 "lev_comp.y" /* yacc.c:1646 */ { variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_OBJ); - add_opvars(splev, "iso", 0, (yyvsp[-4].map), SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, (yyvsp[-4].map), SPO_VAR_INIT)); Free((yyvsp[-4].map)); } -#line 2749 "y.tab.c" /* yacc.c:1646 */ +#line 2763 "y.tab.c" /* yacc.c:1646 */ break; case 104: -#line 581 "lev_comp.y" /* yacc.c:1646 */ +#line 595 "lev_comp.y" /* yacc.c:1646 */ { variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-2].map), SPOVAR_COORD); - add_opvars(splev, "iso", 0, (yyvsp[-2].map), SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, (yyvsp[-2].map), SPO_VAR_INIT)); Free((yyvsp[-2].map)); } -#line 2759 "y.tab.c" /* yacc.c:1646 */ +#line 2773 "y.tab.c" /* yacc.c:1646 */ break; case 105: -#line 587 "lev_comp.y" /* yacc.c:1646 */ +#line 601 "lev_comp.y" /* yacc.c:1646 */ { variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-2].map), SPOVAR_REGION); - add_opvars(splev, "iso", 0, (yyvsp[-2].map), SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, (yyvsp[-2].map), SPO_VAR_INIT)); Free((yyvsp[-2].map)); } -#line 2769 "y.tab.c" /* yacc.c:1646 */ +#line 2783 "y.tab.c" /* yacc.c:1646 */ break; case 106: -#line 593 "lev_comp.y" /* yacc.c:1646 */ - { - long n_items = (yyvsp[-1].i); - variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_INT|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, (yyvsp[-4].map), SPO_VAR_INIT); - Free((yyvsp[-4].map)); - } -#line 2780 "y.tab.c" /* yacc.c:1646 */ - break; - - case 107: -#line 600 "lev_comp.y" /* yacc.c:1646 */ - { - long n_items = (yyvsp[-1].i); - variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_COORD|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, (yyvsp[-4].map), SPO_VAR_INIT); - Free((yyvsp[-4].map)); - } -#line 2791 "y.tab.c" /* yacc.c:1646 */ - break; - - case 108: #line 607 "lev_comp.y" /* yacc.c:1646 */ { long n_items = (yyvsp[-1].i); - variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_REGION|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, (yyvsp[-4].map), SPO_VAR_INIT); + variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_INT|SPOVAR_ARRAY); + add_opvars(splev, "iso", + VA_PASS3(n_items, (yyvsp[-4].map), SPO_VAR_INIT)); Free((yyvsp[-4].map)); } -#line 2802 "y.tab.c" /* yacc.c:1646 */ +#line 2795 "y.tab.c" /* yacc.c:1646 */ + break; + + case 107: +#line 615 "lev_comp.y" /* yacc.c:1646 */ + { + long n_items = (yyvsp[-1].i); + variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_COORD|SPOVAR_ARRAY); + add_opvars(splev, "iso", + VA_PASS3(n_items, (yyvsp[-4].map), SPO_VAR_INIT)); + Free((yyvsp[-4].map)); + } +#line 2807 "y.tab.c" /* yacc.c:1646 */ + break; + + case 108: +#line 623 "lev_comp.y" /* yacc.c:1646 */ + { + long n_items = (yyvsp[-1].i); + variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_REGION|SPOVAR_ARRAY); + add_opvars(splev, "iso", + VA_PASS3(n_items, (yyvsp[-4].map), SPO_VAR_INIT)); + Free((yyvsp[-4].map)); + } +#line 2819 "y.tab.c" /* yacc.c:1646 */ break; case 109: -#line 614 "lev_comp.y" /* yacc.c:1646 */ +#line 631 "lev_comp.y" /* yacc.c:1646 */ { long n_items = (yyvsp[-1].i); variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-6].map), SPOVAR_MAPCHAR|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, (yyvsp[-6].map), SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(n_items, (yyvsp[-6].map), SPO_VAR_INIT)); Free((yyvsp[-6].map)); } -#line 2813 "y.tab.c" /* yacc.c:1646 */ +#line 2831 "y.tab.c" /* yacc.c:1646 */ break; case 110: -#line 621 "lev_comp.y" /* yacc.c:1646 */ +#line 639 "lev_comp.y" /* yacc.c:1646 */ { long n_items = (yyvsp[-1].i); variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-6].map), SPOVAR_MONST|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, (yyvsp[-6].map), SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(n_items, (yyvsp[-6].map), SPO_VAR_INIT)); Free((yyvsp[-6].map)); } -#line 2824 "y.tab.c" /* yacc.c:1646 */ +#line 2843 "y.tab.c" /* yacc.c:1646 */ break; case 111: -#line 628 "lev_comp.y" /* yacc.c:1646 */ +#line 647 "lev_comp.y" /* yacc.c:1646 */ { long n_items = (yyvsp[-1].i); variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-6].map), SPOVAR_OBJ|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, (yyvsp[-6].map), SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(n_items, (yyvsp[-6].map), SPO_VAR_INIT)); Free((yyvsp[-6].map)); } -#line 2835 "y.tab.c" /* yacc.c:1646 */ - break; - - case 112: -#line 635 "lev_comp.y" /* yacc.c:1646 */ - { - long n_items = (yyvsp[-1].i); - variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_STRING|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, (yyvsp[-4].map), SPO_VAR_INIT); - Free((yyvsp[-4].map)); - } -#line 2846 "y.tab.c" /* yacc.c:1646 */ - break; - - case 113: -#line 644 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "O", (yyvsp[0].i)); - (yyval.i) = 1; - } #line 2855 "y.tab.c" /* yacc.c:1646 */ break; - case 114: -#line 649 "lev_comp.y" /* yacc.c:1646 */ + case 112: +#line 655 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "O", (yyvsp[0].i)); + long n_items = (yyvsp[-1].i); + variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_STRING|SPOVAR_ARRAY); + add_opvars(splev, "iso", + VA_PASS3(n_items, (yyvsp[-4].map), SPO_VAR_INIT)); + Free((yyvsp[-4].map)); + } +#line 2867 "y.tab.c" /* yacc.c:1646 */ + break; + + case 113: +#line 665 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "O", VA_PASS1((yyvsp[0].i))); + (yyval.i) = 1; + } +#line 2876 "y.tab.c" /* yacc.c:1646 */ + break; + + case 114: +#line 670 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "O", VA_PASS1((yyvsp[0].i))); (yyval.i) = 1 + (yyvsp[-2].i); } -#line 2864 "y.tab.c" /* yacc.c:1646 */ +#line 2885 "y.tab.c" /* yacc.c:1646 */ break; case 115: -#line 656 "lev_comp.y" /* yacc.c:1646 */ +#line 677 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "M", (yyvsp[0].i)); + add_opvars(splev, "M", VA_PASS1((yyvsp[0].i))); (yyval.i) = 1; } -#line 2873 "y.tab.c" /* yacc.c:1646 */ +#line 2894 "y.tab.c" /* yacc.c:1646 */ break; case 116: -#line 661 "lev_comp.y" /* yacc.c:1646 */ +#line 682 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "M", (yyvsp[0].i)); + add_opvars(splev, "M", VA_PASS1((yyvsp[0].i))); (yyval.i) = 1 + (yyvsp[-2].i); } -#line 2882 "y.tab.c" /* yacc.c:1646 */ +#line 2903 "y.tab.c" /* yacc.c:1646 */ break; case 117: -#line 668 "lev_comp.y" /* yacc.c:1646 */ +#line 689 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "m", (yyvsp[0].i)); + add_opvars(splev, "m", VA_PASS1((yyvsp[0].i))); (yyval.i) = 1; } -#line 2891 "y.tab.c" /* yacc.c:1646 */ +#line 2912 "y.tab.c" /* yacc.c:1646 */ break; case 118: -#line 673 "lev_comp.y" /* yacc.c:1646 */ +#line 694 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "m", (yyvsp[0].i)); + add_opvars(splev, "m", VA_PASS1((yyvsp[0].i))); (yyval.i) = 1 + (yyvsp[-2].i); } -#line 2900 "y.tab.c" /* yacc.c:1646 */ +#line 2921 "y.tab.c" /* yacc.c:1646 */ break; case 119: -#line 680 "lev_comp.y" /* yacc.c:1646 */ +#line 701 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = 1; } -#line 2908 "y.tab.c" /* yacc.c:1646 */ +#line 2929 "y.tab.c" /* yacc.c:1646 */ break; case 120: -#line 684 "lev_comp.y" /* yacc.c:1646 */ +#line 705 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = 1 + (yyvsp[-2].i); } -#line 2916 "y.tab.c" /* yacc.c:1646 */ +#line 2937 "y.tab.c" /* yacc.c:1646 */ break; case 121: -#line 690 "lev_comp.y" /* yacc.c:1646 */ +#line 711 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "c", (yyvsp[0].i)); + add_opvars(splev, "c", VA_PASS1((yyvsp[0].i))); (yyval.i) = 1; } -#line 2925 "y.tab.c" /* yacc.c:1646 */ +#line 2946 "y.tab.c" /* yacc.c:1646 */ break; case 122: -#line 695 "lev_comp.y" /* yacc.c:1646 */ +#line 716 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "c", (yyvsp[0].i)); + add_opvars(splev, "c", VA_PASS1((yyvsp[0].i))); (yyval.i) = 1 + (yyvsp[-2].i); } -#line 2934 "y.tab.c" /* yacc.c:1646 */ +#line 2955 "y.tab.c" /* yacc.c:1646 */ break; case 123: -#line 702 "lev_comp.y" /* yacc.c:1646 */ +#line 723 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = 1; } -#line 2942 "y.tab.c" /* yacc.c:1646 */ +#line 2963 "y.tab.c" /* yacc.c:1646 */ break; case 124: -#line 706 "lev_comp.y" /* yacc.c:1646 */ +#line 727 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = 1 + (yyvsp[-2].i); } -#line 2950 "y.tab.c" /* yacc.c:1646 */ +#line 2971 "y.tab.c" /* yacc.c:1646 */ break; case 125: -#line 712 "lev_comp.y" /* yacc.c:1646 */ +#line 733 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = 1; } -#line 2958 "y.tab.c" /* yacc.c:1646 */ +#line 2979 "y.tab.c" /* yacc.c:1646 */ break; case 126: -#line 716 "lev_comp.y" /* yacc.c:1646 */ +#line 737 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = 1 + (yyvsp[-2].i); } -#line 2966 "y.tab.c" /* yacc.c:1646 */ +#line 2987 "y.tab.c" /* yacc.c:1646 */ break; case 127: -#line 722 "lev_comp.y" /* yacc.c:1646 */ +#line 743 "lev_comp.y" /* yacc.c:1646 */ { struct lc_funcdefs *funcdef; @@ -2988,32 +3009,32 @@ yyreduce: function_tmp_var_defs = variable_definitions; variable_definitions = NULL; } -#line 2992 "y.tab.c" /* yacc.c:1646 */ +#line 3013 "y.tab.c" /* yacc.c:1646 */ break; case 128: -#line 744 "lev_comp.y" /* yacc.c:1646 */ +#line 765 "lev_comp.y" /* yacc.c:1646 */ { /* nothing */ } -#line 3000 "y.tab.c" /* yacc.c:1646 */ +#line 3021 "y.tab.c" /* yacc.c:1646 */ break; case 129: -#line 748 "lev_comp.y" /* yacc.c:1646 */ +#line 769 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", 0, SPO_RETURN); + add_opvars(splev, "io", VA_PASS2(0, SPO_RETURN)); splev = function_splev_backup; in_function_definition--; curr_function = NULL; vardef_free_all(variable_definitions); variable_definitions = function_tmp_var_defs; } -#line 3013 "y.tab.c" /* yacc.c:1646 */ +#line 3034 "y.tab.c" /* yacc.c:1646 */ break; case 130: -#line 759 "lev_comp.y" /* yacc.c:1646 */ +#line 780 "lev_comp.y" /* yacc.c:1646 */ { struct lc_funcdefs *tmpfunc; tmpfunc = funcdef_defined(function_definitions, (yyvsp[-3].map), 1); @@ -3040,7 +3061,9 @@ yyreduce: { /* init function parameter variables */ struct lc_funcdefs_parm *tfp = tmpfunc->params; while (tfp) { - add_opvars(splev, "iso", 0, tfp->name, SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(0, tfp->name, + SPO_VAR_INIT)); tfp = tfp->next; } } @@ -3049,78 +3072,80 @@ yyreduce: set_opvar_int(jmp, splev->n_opcodes - jmp->vardata.l); } l = tmpfunc->addr - splev->n_opcodes - 2; - add_opvars(splev, "iio", nparams, l, SPO_CALL); + add_opvars(splev, "iio", + VA_PASS3(nparams, l, SPO_CALL)); tmpfunc->n_called++; } else { lc_error("Function '%s' not defined.", (yyvsp[-3].map)); } Free((yyvsp[-3].map)); } -#line 3060 "y.tab.c" /* yacc.c:1646 */ - break; - - case 131: -#line 804 "lev_comp.y" /* yacc.c:1646 */ - { - add_opcode(splev, SPO_EXIT, NULL); - } -#line 3068 "y.tab.c" /* yacc.c:1646 */ - break; - - case 132: -#line 810 "lev_comp.y" /* yacc.c:1646 */ - { - (yyval.i) = 100; - } -#line 3076 "y.tab.c" /* yacc.c:1646 */ - break; - - case 133: -#line 814 "lev_comp.y" /* yacc.c:1646 */ - { - (yyval.i) = (yyvsp[0].i); - } #line 3084 "y.tab.c" /* yacc.c:1646 */ break; + case 131: +#line 828 "lev_comp.y" /* yacc.c:1646 */ + { + add_opcode(splev, SPO_EXIT, NULL); + } +#line 3092 "y.tab.c" /* yacc.c:1646 */ + break; + + case 132: +#line 834 "lev_comp.y" /* yacc.c:1646 */ + { + (yyval.i) = 100; + } +#line 3100 "y.tab.c" /* yacc.c:1646 */ + break; + + case 133: +#line 838 "lev_comp.y" /* yacc.c:1646 */ + { + (yyval.i) = (yyvsp[0].i); + } +#line 3108 "y.tab.c" /* yacc.c:1646 */ + break; + case 134: -#line 820 "lev_comp.y" /* yacc.c:1646 */ +#line 844 "lev_comp.y" /* yacc.c:1646 */ { /* val > rn2(100) */ - add_opvars(splev, "iio", (long)(yyvsp[0].i), 100, SPO_RN2); + add_opvars(splev, "iio", + VA_PASS3((long)(yyvsp[0].i), 100, SPO_RN2)); (yyval.i) = SPO_JG; } -#line 3094 "y.tab.c" /* yacc.c:1646 */ +#line 3119 "y.tab.c" /* yacc.c:1646 */ break; case 135: -#line 826 "lev_comp.y" /* yacc.c:1646 */ +#line 851 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (yyvsp[-2].i); } -#line 3102 "y.tab.c" /* yacc.c:1646 */ +#line 3127 "y.tab.c" /* yacc.c:1646 */ break; case 136: -#line 830 "lev_comp.y" /* yacc.c:1646 */ +#line 855 "lev_comp.y" /* yacc.c:1646 */ { /* boolean, explicit foo != 0 */ - add_opvars(splev, "i", 0); + add_opvars(splev, "i", VA_PASS1(0)); (yyval.i) = SPO_JNE; } -#line 3112 "y.tab.c" /* yacc.c:1646 */ +#line 3137 "y.tab.c" /* yacc.c:1646 */ break; case 137: -#line 838 "lev_comp.y" /* yacc.c:1646 */ +#line 863 "lev_comp.y" /* yacc.c:1646 */ { is_inconstant_number = 0; } -#line 3120 "y.tab.c" /* yacc.c:1646 */ +#line 3145 "y.tab.c" /* yacc.c:1646 */ break; case 138: -#line 842 "lev_comp.y" /* yacc.c:1646 */ +#line 867 "lev_comp.y" /* yacc.c:1646 */ { struct opvar *chkjmp; if (in_switch_statement > 0) @@ -3132,7 +3157,7 @@ yyreduce: switch_default_case = NULL; if (!is_inconstant_number) - add_opvars(splev, "o", SPO_RN2); + add_opvars(splev, "o", VA_PASS1(SPO_RN2)); is_inconstant_number = 0; chkjmp = New(struct opvar); @@ -3142,11 +3167,11 @@ yyreduce: add_opcode(splev, SPO_JMP, NULL); break_stmt_start(); } -#line 3146 "y.tab.c" /* yacc.c:1646 */ +#line 3171 "y.tab.c" /* yacc.c:1646 */ break; case 139: -#line 864 "lev_comp.y" /* yacc.c:1646 */ +#line 889 "lev_comp.y" /* yacc.c:1646 */ { struct opvar *endjump = New(struct opvar); int i; @@ -3156,17 +3181,22 @@ yyreduce: add_opcode(splev, SPO_PUSH, endjump); add_opcode(splev, SPO_JMP, NULL); - set_opvar_int(switch_check_jump, splev->n_opcodes - switch_check_jump->vardata.l); + set_opvar_int(switch_check_jump, + splev->n_opcodes - switch_check_jump->vardata.l); for (i = 0; i < n_switch_case_list; i++) { - add_opvars(splev, "oio", SPO_COPY, switch_case_value[i], SPO_CMP); - set_opvar_int(switch_case_list[i], switch_case_list[i]->vardata.l - splev->n_opcodes-1); + add_opvars(splev, "oio", + VA_PASS3(SPO_COPY, + switch_case_value[i], SPO_CMP)); + set_opvar_int(switch_case_list[i], + switch_case_list[i]->vardata.l - splev->n_opcodes-1); add_opcode(splev, SPO_PUSH, switch_case_list[i]); add_opcode(splev, SPO_JE, NULL); } if (switch_default_case) { - set_opvar_int(switch_default_case, switch_default_case->vardata.l - splev->n_opcodes-1); + set_opvar_int(switch_default_case, + switch_default_case->vardata.l - splev->n_opcodes-1); add_opcode(splev, SPO_PUSH, switch_default_case); add_opcode(splev, SPO_JMP, NULL); } @@ -3180,11 +3210,11 @@ yyreduce: } -#line 3184 "y.tab.c" /* yacc.c:1646 */ +#line 3214 "y.tab.c" /* yacc.c:1646 */ break; case 142: -#line 904 "lev_comp.y" /* yacc.c:1646 */ +#line 934 "lev_comp.y" /* yacc.c:1646 */ { if (n_switch_case_list < MAX_SWITCH_CASES) { struct opvar *tmppush = New(struct opvar); @@ -3193,18 +3223,18 @@ yyreduce: switch_case_list[n_switch_case_list++] = tmppush; } else lc_error("Too many cases in a switch."); } -#line 3197 "y.tab.c" /* yacc.c:1646 */ +#line 3227 "y.tab.c" /* yacc.c:1646 */ break; case 143: -#line 913 "lev_comp.y" /* yacc.c:1646 */ +#line 943 "lev_comp.y" /* yacc.c:1646 */ { } -#line 3204 "y.tab.c" /* yacc.c:1646 */ +#line 3234 "y.tab.c" /* yacc.c:1646 */ break; case 144: -#line 916 "lev_comp.y" /* yacc.c:1646 */ +#line 946 "lev_comp.y" /* yacc.c:1646 */ { struct opvar *tmppush = New(struct opvar); @@ -3214,18 +3244,18 @@ yyreduce: set_opvar_int(tmppush, splev->n_opcodes); switch_default_case = tmppush; } -#line 3218 "y.tab.c" /* yacc.c:1646 */ +#line 3248 "y.tab.c" /* yacc.c:1646 */ break; case 145: -#line 926 "lev_comp.y" /* yacc.c:1646 */ +#line 956 "lev_comp.y" /* yacc.c:1646 */ { } -#line 3225 "y.tab.c" /* yacc.c:1646 */ +#line 3255 "y.tab.c" /* yacc.c:1646 */ break; case 146: -#line 931 "lev_comp.y" /* yacc.c:1646 */ +#line 961 "lev_comp.y" /* yacc.c:1646 */ { if (!allow_break_statements) lc_error("Cannot use BREAK outside a statement block."); @@ -3233,11 +3263,11 @@ yyreduce: break_stmt_new(splev, splev->n_opcodes); } } -#line 3237 "y.tab.c" /* yacc.c:1646 */ +#line 3267 "y.tab.c" /* yacc.c:1646 */ break; case 149: -#line 945 "lev_comp.y" /* yacc.c:1646 */ +#line 975 "lev_comp.y" /* yacc.c:1646 */ { char buf[256], buf2[256]; @@ -3249,17 +3279,23 @@ yyreduce: /* first, define a variable for the for-loop end value */ snprintf(buf, 255, "%s end", (yyvsp[-4].map)); /* the value of which is already in stack (the 2nd math_expr) */ - add_opvars(splev, "iso", 0, buf, SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, buf, SPO_VAR_INIT)); - variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-4].map), SPOVAR_INT); + variable_definitions = add_vardef_type(variable_definitions, + (yyvsp[-4].map), SPOVAR_INT); /* define the for-loop variable. value is in stack (1st math_expr) */ - add_opvars(splev, "iso", 0, (yyvsp[-4].map), SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, (yyvsp[-4].map), SPO_VAR_INIT)); /* calculate value for the loop "step" variable */ snprintf(buf2, 255, "%s step", (yyvsp[-4].map)); - add_opvars(splev, "vvo", buf, (yyvsp[-4].map), SPO_MATH_SUB); /* end - start */ - add_opvars(splev, "o", SPO_MATH_SIGN); /* sign of that */ - add_opvars(splev, "iso", 0, buf2, SPO_VAR_INIT); /* save the sign into the step var */ + /* end - start */ + add_opvars(splev, "vvo", + VA_PASS3(buf, (yyvsp[-4].map), SPO_MATH_SUB)); + /* sign of that */ + add_opvars(splev, "o", VA_PASS1(SPO_MATH_SIGN)); + /* save the sign into the step var */ + add_opvars(splev, "iso", + VA_PASS3(0, buf2, SPO_VAR_INIT)); forloop_list[n_forloops].varname = strdup((yyvsp[-4].map)); forloop_list[n_forloops].jmp_point = splev->n_opcodes; @@ -3267,42 +3303,50 @@ yyreduce: n_forloops++; Free((yyvsp[-4].map)); } -#line 3271 "y.tab.c" /* yacc.c:1646 */ +#line 3307 "y.tab.c" /* yacc.c:1646 */ break; case 150: -#line 977 "lev_comp.y" /* yacc.c:1646 */ +#line 1013 "lev_comp.y" /* yacc.c:1646 */ { /* nothing */ break_stmt_start(); } -#line 3280 "y.tab.c" /* yacc.c:1646 */ +#line 3316 "y.tab.c" /* yacc.c:1646 */ break; case 151: -#line 982 "lev_comp.y" /* yacc.c:1646 */ +#line 1018 "lev_comp.y" /* yacc.c:1646 */ { char buf[256], buf2[256]; n_forloops--; snprintf(buf, 255, "%s step", forloop_list[n_forloops].varname); snprintf(buf2, 255, "%s end", forloop_list[n_forloops].varname); /* compare for-loop var to end value */ - add_opvars(splev, "vvo", forloop_list[n_forloops].varname, buf2, SPO_CMP); + add_opvars(splev, "vvo", + VA_PASS3(forloop_list[n_forloops].varname, + buf2, SPO_CMP)); /* var + step */ - add_opvars(splev, "vvo", buf, - forloop_list[n_forloops].varname, SPO_MATH_ADD); + add_opvars(splev, "vvo", + VA_PASS3(buf, forloop_list[n_forloops].varname, + SPO_MATH_ADD)); /* for-loop var = (for-loop var + step) */ - add_opvars(splev, "iso", 0, forloop_list[n_forloops].varname, SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(0, forloop_list[n_forloops].varname, + SPO_VAR_INIT)); /* jump back if compared values were not equal */ - add_opvars(splev, "io", forloop_list[n_forloops].jmp_point - splev->n_opcodes - 1, SPO_JNE); + add_opvars(splev, "io", + VA_PASS2( + forloop_list[n_forloops].jmp_point - splev->n_opcodes - 1, + SPO_JNE)); Free(forloop_list[n_forloops].varname); break_stmt_end(splev); } -#line 3302 "y.tab.c" /* yacc.c:1646 */ +#line 3346 "y.tab.c" /* yacc.c:1646 */ break; case 152: -#line 1002 "lev_comp.y" /* yacc.c:1646 */ +#line 1046 "lev_comp.y" /* yacc.c:1646 */ { struct opvar *tmppush = New(struct opvar); @@ -3313,18 +3357,18 @@ yyreduce: set_opvar_int(tmppush, splev->n_opcodes); if_list[n_if_list++] = tmppush; - add_opvars(splev, "o", SPO_DEC); + add_opvars(splev, "o", VA_PASS1(SPO_DEC)); break_stmt_start(); } -#line 3320 "y.tab.c" /* yacc.c:1646 */ +#line 3364 "y.tab.c" /* yacc.c:1646 */ break; case 153: -#line 1016 "lev_comp.y" /* yacc.c:1646 */ +#line 1060 "lev_comp.y" /* yacc.c:1646 */ { struct opvar *tmppush; - add_opvars(splev, "oio", SPO_COPY, 0, SPO_CMP); + add_opvars(splev, "oio", VA_PASS3(SPO_COPY, 0, SPO_CMP)); tmppush = (struct opvar *) if_list[--n_if_list]; set_opvar_int(tmppush, tmppush->vardata.l - splev->n_opcodes-1); @@ -3333,11 +3377,11 @@ yyreduce: add_opcode(splev, SPO_POP, NULL); /* get rid of the count value in stack */ break_stmt_end(splev); } -#line 3337 "y.tab.c" /* yacc.c:1646 */ +#line 3381 "y.tab.c" /* yacc.c:1646 */ break; case 154: -#line 1031 "lev_comp.y" /* yacc.c:1646 */ +#line 1075 "lev_comp.y" /* yacc.c:1646 */ { struct opvar *tmppush2 = New(struct opvar); @@ -3357,11 +3401,11 @@ yyreduce: add_opcode(splev, reverse_jmp_opcode( (yyvsp[-1].i) ), NULL); } -#line 3361 "y.tab.c" /* yacc.c:1646 */ +#line 3405 "y.tab.c" /* yacc.c:1646 */ break; case 155: -#line 1051 "lev_comp.y" /* yacc.c:1646 */ +#line 1095 "lev_comp.y" /* yacc.c:1646 */ { if (n_if_list > 0) { struct opvar *tmppush; @@ -3369,11 +3413,11 @@ yyreduce: set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l); } else lc_error("IF: Huh?! No start address?"); } -#line 3373 "y.tab.c" /* yacc.c:1646 */ +#line 3417 "y.tab.c" /* yacc.c:1646 */ break; case 156: -#line 1061 "lev_comp.y" /* yacc.c:1646 */ +#line 1105 "lev_comp.y" /* yacc.c:1646 */ { struct opvar *tmppush2 = New(struct opvar); @@ -3393,19 +3437,19 @@ yyreduce: add_opcode(splev, reverse_jmp_opcode( (yyvsp[0].i) ), NULL); } -#line 3397 "y.tab.c" /* yacc.c:1646 */ +#line 3441 "y.tab.c" /* yacc.c:1646 */ break; case 157: -#line 1081 "lev_comp.y" /* yacc.c:1646 */ +#line 1125 "lev_comp.y" /* yacc.c:1646 */ { /* do nothing */ } -#line 3405 "y.tab.c" /* yacc.c:1646 */ +#line 3449 "y.tab.c" /* yacc.c:1646 */ break; case 158: -#line 1087 "lev_comp.y" /* yacc.c:1646 */ +#line 1131 "lev_comp.y" /* yacc.c:1646 */ { if (n_if_list > 0) { struct opvar *tmppush; @@ -3413,11 +3457,11 @@ yyreduce: set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l); } else lc_error("IF: Huh?! No start address?"); } -#line 3417 "y.tab.c" /* yacc.c:1646 */ +#line 3461 "y.tab.c" /* yacc.c:1646 */ break; case 159: -#line 1095 "lev_comp.y" /* yacc.c:1646 */ +#line 1139 "lev_comp.y" /* yacc.c:1646 */ { if (n_if_list > 0) { struct opvar *tmppush = New(struct opvar); @@ -3434,11 +3478,11 @@ yyreduce: if_list[n_if_list++] = tmppush; } else lc_error("IF: Huh?! No else-part address?"); } -#line 3438 "y.tab.c" /* yacc.c:1646 */ +#line 3482 "y.tab.c" /* yacc.c:1646 */ break; case 160: -#line 1112 "lev_comp.y" /* yacc.c:1646 */ +#line 1156 "lev_comp.y" /* yacc.c:1646 */ { if (n_if_list > 0) { struct opvar *tmppush; @@ -3446,146 +3490,155 @@ yyreduce: set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l); } else lc_error("IF: Huh?! No end address?"); } -#line 3450 "y.tab.c" /* yacc.c:1646 */ +#line 3494 "y.tab.c" /* yacc.c:1646 */ break; case 161: -#line 1122 "lev_comp.y" /* yacc.c:1646 */ +#line 1166 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_MESSAGE); + add_opvars(splev, "o", VA_PASS1(SPO_MESSAGE)); } -#line 3458 "y.tab.c" /* yacc.c:1646 */ +#line 3502 "y.tab.c" /* yacc.c:1646 */ break; case 162: -#line 1128 "lev_comp.y" /* yacc.c:1646 */ +#line 1172 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "iiiiiio", -1, 0, -1, -1, -1, -1, SPO_CORRIDOR); + add_opvars(splev, "iiiiiio", + VA_PASS7(-1, 0, -1, -1, -1, -1, SPO_CORRIDOR)); } -#line 3466 "y.tab.c" /* yacc.c:1646 */ +#line 3511 "y.tab.c" /* yacc.c:1646 */ break; case 163: -#line 1132 "lev_comp.y" /* yacc.c:1646 */ +#line 1177 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "iiiiiio", -1, (yyvsp[0].i), -1, -1, -1, -1, SPO_CORRIDOR); + add_opvars(splev, "iiiiiio", + VA_PASS7(-1, (yyvsp[0].i), -1, -1, -1, -1, SPO_CORRIDOR)); } -#line 3474 "y.tab.c" /* yacc.c:1646 */ +#line 3520 "y.tab.c" /* yacc.c:1646 */ break; case 164: -#line 1136 "lev_comp.y" /* yacc.c:1646 */ +#line 1182 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "iiiiiio", -1, -1, -1, -1, -1, -1, SPO_CORRIDOR); + add_opvars(splev, "iiiiiio", + VA_PASS7(-1, -1, -1, -1, -1, -1, SPO_CORRIDOR)); } -#line 3482 "y.tab.c" /* yacc.c:1646 */ +#line 3529 "y.tab.c" /* yacc.c:1646 */ break; case 165: -#line 1142 "lev_comp.y" /* yacc.c:1646 */ +#line 1189 "lev_comp.y" /* yacc.c:1646 */ { add_opvars(splev, "iiiiiio", - (yyvsp[-2].corpos).room, (yyvsp[-2].corpos).door, (yyvsp[-2].corpos).wall, - (yyvsp[0].corpos).room, (yyvsp[0].corpos).door, (yyvsp[0].corpos).wall, - SPO_CORRIDOR); + VA_PASS7((yyvsp[-2].corpos).room, (yyvsp[-2].corpos).door, (yyvsp[-2].corpos).wall, + (yyvsp[0].corpos).room, (yyvsp[0].corpos).door, (yyvsp[0].corpos).wall, + SPO_CORRIDOR)); } -#line 3493 "y.tab.c" /* yacc.c:1646 */ +#line 3540 "y.tab.c" /* yacc.c:1646 */ break; case 166: -#line 1149 "lev_comp.y" /* yacc.c:1646 */ +#line 1196 "lev_comp.y" /* yacc.c:1646 */ { add_opvars(splev, "iiiiiio", - (yyvsp[-2].corpos).room, (yyvsp[-2].corpos).door, (yyvsp[-2].corpos).wall, - -1, -1, (long)(yyvsp[0].i), - SPO_CORRIDOR); + VA_PASS7((yyvsp[-2].corpos).room, (yyvsp[-2].corpos).door, (yyvsp[-2].corpos).wall, + -1, -1, (long)(yyvsp[0].i), + SPO_CORRIDOR)); } -#line 3504 "y.tab.c" /* yacc.c:1646 */ +#line 3551 "y.tab.c" /* yacc.c:1646 */ break; case 167: -#line 1158 "lev_comp.y" /* yacc.c:1646 */ +#line 1205 "lev_comp.y" /* yacc.c:1646 */ { (yyval.corpos).room = (yyvsp[-5].i); (yyval.corpos).wall = (yyvsp[-3].i); (yyval.corpos).door = (yyvsp[-1].i); } -#line 3514 "y.tab.c" /* yacc.c:1646 */ +#line 3561 "y.tab.c" /* yacc.c:1646 */ break; case 168: -#line 1166 "lev_comp.y" /* yacc.c:1646 */ +#line 1213 "lev_comp.y" /* yacc.c:1646 */ { if (((yyvsp[-2].i) < 100) && ((yyvsp[-3].i) == OROOM)) lc_error("Only typed rooms can have a chance."); else { - add_opvars(splev, "iii", (long)(yyvsp[-3].i), (long)(yyvsp[-2].i), (long)(yyvsp[0].i)); + add_opvars(splev, "iii", + VA_PASS3((long)(yyvsp[-3].i), (long)(yyvsp[-2].i), (long)(yyvsp[0].i))); } } -#line 3526 "y.tab.c" /* yacc.c:1646 */ +#line 3574 "y.tab.c" /* yacc.c:1646 */ break; case 169: -#line 1176 "lev_comp.y" /* yacc.c:1646 */ +#line 1224 "lev_comp.y" /* yacc.c:1646 */ { - long flags = (yyvsp[0].i); - if (flags == -1) flags = (1 << 0); - add_opvars(splev, "iiiiiiio", flags, ERR, ERR, - (yyvsp[-3].crd).x, (yyvsp[-3].crd).y, (yyvsp[-1].sze).width, (yyvsp[-1].sze).height, SPO_SUBROOM); + long rflags = (yyvsp[0].i); + + if (rflags == -1) rflags = (1 << 0); + add_opvars(splev, "iiiiiiio", + VA_PASS8(rflags, ERR, ERR, + (yyvsp[-3].crd).x, (yyvsp[-3].crd).y, (yyvsp[-1].sze).width, (yyvsp[-1].sze).height, + SPO_SUBROOM)); break_stmt_start(); } -#line 3538 "y.tab.c" /* yacc.c:1646 */ +#line 3589 "y.tab.c" /* yacc.c:1646 */ break; case 170: -#line 1184 "lev_comp.y" /* yacc.c:1646 */ +#line 1235 "lev_comp.y" /* yacc.c:1646 */ { break_stmt_end(splev); add_opcode(splev, SPO_ENDROOM, NULL); } -#line 3547 "y.tab.c" /* yacc.c:1646 */ +#line 3598 "y.tab.c" /* yacc.c:1646 */ break; case 171: -#line 1191 "lev_comp.y" /* yacc.c:1646 */ +#line 1242 "lev_comp.y" /* yacc.c:1646 */ { - long flags = (yyvsp[-2].i); - if (flags == -1) flags = (1 << 0); - add_opvars(splev, "iiiiiiio", flags, - (yyvsp[-3].crd).x, (yyvsp[-3].crd).y, (yyvsp[-5].crd).x, (yyvsp[-5].crd).y, - (yyvsp[-1].sze).width, (yyvsp[-1].sze).height, SPO_ROOM); + long rflags = (yyvsp[-2].i); + + if (rflags == -1) rflags = (1 << 0); + add_opvars(splev, "iiiiiiio", + VA_PASS8(rflags, + (yyvsp[-3].crd).x, (yyvsp[-3].crd).y, (yyvsp[-5].crd).x, (yyvsp[-5].crd).y, + (yyvsp[-1].sze).width, (yyvsp[-1].sze).height, SPO_ROOM)); break_stmt_start(); } -#line 3560 "y.tab.c" /* yacc.c:1646 */ +#line 3613 "y.tab.c" /* yacc.c:1646 */ break; case 172: -#line 1200 "lev_comp.y" /* yacc.c:1646 */ +#line 1253 "lev_comp.y" /* yacc.c:1646 */ { break_stmt_end(splev); add_opcode(splev, SPO_ENDROOM, NULL); } -#line 3569 "y.tab.c" /* yacc.c:1646 */ +#line 3622 "y.tab.c" /* yacc.c:1646 */ break; case 173: -#line 1207 "lev_comp.y" /* yacc.c:1646 */ +#line 1260 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = 1; } -#line 3577 "y.tab.c" /* yacc.c:1646 */ +#line 3630 "y.tab.c" /* yacc.c:1646 */ break; case 174: -#line 1211 "lev_comp.y" /* yacc.c:1646 */ +#line 1264 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (yyvsp[0].i); } -#line 3585 "y.tab.c" /* yacc.c:1646 */ +#line 3638 "y.tab.c" /* yacc.c:1646 */ break; case 175: -#line 1217 "lev_comp.y" /* yacc.c:1646 */ +#line 1270 "lev_comp.y" /* yacc.c:1646 */ { if ( (yyvsp[-3].i) < 1 || (yyvsp[-3].i) > 5 || (yyvsp[-1].i) < 1 || (yyvsp[-1].i) > 5 ) { @@ -3595,19 +3648,19 @@ yyreduce: (yyval.crd).y = (yyvsp[-1].i); } } -#line 3599 "y.tab.c" /* yacc.c:1646 */ +#line 3652 "y.tab.c" /* yacc.c:1646 */ break; case 176: -#line 1227 "lev_comp.y" /* yacc.c:1646 */ +#line 1280 "lev_comp.y" /* yacc.c:1646 */ { (yyval.crd).x = (yyval.crd).y = ERR; } -#line 3607 "y.tab.c" /* yacc.c:1646 */ +#line 3660 "y.tab.c" /* yacc.c:1646 */ break; case 177: -#line 1233 "lev_comp.y" /* yacc.c:1646 */ +#line 1286 "lev_comp.y" /* yacc.c:1646 */ { if ( (yyvsp[-3].i) < 0 || (yyvsp[-1].i) < 0) { lc_error("Invalid subroom position (%li,%li)!", (yyvsp[-3].i), (yyvsp[-1].i)); @@ -3616,340 +3669,350 @@ yyreduce: (yyval.crd).y = (yyvsp[-1].i); } } -#line 3620 "y.tab.c" /* yacc.c:1646 */ +#line 3673 "y.tab.c" /* yacc.c:1646 */ break; case 178: -#line 1242 "lev_comp.y" /* yacc.c:1646 */ +#line 1295 "lev_comp.y" /* yacc.c:1646 */ { (yyval.crd).x = (yyval.crd).y = ERR; } -#line 3628 "y.tab.c" /* yacc.c:1646 */ +#line 3681 "y.tab.c" /* yacc.c:1646 */ break; case 179: -#line 1248 "lev_comp.y" /* yacc.c:1646 */ +#line 1301 "lev_comp.y" /* yacc.c:1646 */ { (yyval.crd).x = (yyvsp[-3].i); (yyval.crd).y = (yyvsp[-1].i); } -#line 3637 "y.tab.c" /* yacc.c:1646 */ +#line 3690 "y.tab.c" /* yacc.c:1646 */ break; case 180: -#line 1253 "lev_comp.y" /* yacc.c:1646 */ +#line 1306 "lev_comp.y" /* yacc.c:1646 */ { (yyval.crd).x = (yyval.crd).y = ERR; } -#line 3645 "y.tab.c" /* yacc.c:1646 */ +#line 3698 "y.tab.c" /* yacc.c:1646 */ break; case 181: -#line 1259 "lev_comp.y" /* yacc.c:1646 */ +#line 1312 "lev_comp.y" /* yacc.c:1646 */ { (yyval.sze).width = (yyvsp[-3].i); (yyval.sze).height = (yyvsp[-1].i); } -#line 3654 "y.tab.c" /* yacc.c:1646 */ +#line 3707 "y.tab.c" /* yacc.c:1646 */ break; case 182: -#line 1264 "lev_comp.y" /* yacc.c:1646 */ +#line 1317 "lev_comp.y" /* yacc.c:1646 */ { (yyval.sze).height = (yyval.sze).width = ERR; } -#line 3662 "y.tab.c" /* yacc.c:1646 */ +#line 3715 "y.tab.c" /* yacc.c:1646 */ break; case 183: -#line 1270 "lev_comp.y" /* yacc.c:1646 */ +#line 1323 "lev_comp.y" /* yacc.c:1646 */ { /* ERR means random here */ if ((yyvsp[-2].i) == ERR && (yyvsp[0].i) != ERR) { lc_error("If the door wall is random, so must be its pos!"); } else { - add_opvars(splev, "iiiio", (long)(yyvsp[0].i), (long)(yyvsp[-4].i), (long)(yyvsp[-6].i), (long)(yyvsp[-2].i), SPO_ROOM_DOOR); + add_opvars(splev, "iiiio", + VA_PASS5((long)(yyvsp[0].i), (long)(yyvsp[-4].i), (long)(yyvsp[-6].i), + (long)(yyvsp[-2].i), SPO_ROOM_DOOR)); } } -#line 3675 "y.tab.c" /* yacc.c:1646 */ +#line 3730 "y.tab.c" /* yacc.c:1646 */ break; case 184: -#line 1279 "lev_comp.y" /* yacc.c:1646 */ +#line 1334 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", (long)(yyvsp[-2].i), SPO_DOOR); + add_opvars(splev, "io", VA_PASS2((long)(yyvsp[-2].i), SPO_DOOR)); } -#line 3683 "y.tab.c" /* yacc.c:1646 */ +#line 3738 "y.tab.c" /* yacc.c:1646 */ break; case 189: -#line 1293 "lev_comp.y" /* yacc.c:1646 */ +#line 1348 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (yyvsp[0].i); } -#line 3691 "y.tab.c" /* yacc.c:1646 */ +#line 3746 "y.tab.c" /* yacc.c:1646 */ break; case 190: -#line 1297 "lev_comp.y" /* yacc.c:1646 */ +#line 1352 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = ((yyvsp[-2].i) | (yyvsp[0].i)); } -#line 3699 "y.tab.c" /* yacc.c:1646 */ +#line 3754 "y.tab.c" /* yacc.c:1646 */ break; case 193: -#line 1307 "lev_comp.y" /* yacc.c:1646 */ +#line 1362 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ciisiio", 0, 0, 1, (char *)0, 0, 0, SPO_MAP); + add_opvars(splev, "ciisiio", + VA_PASS7(0, 0, 1, (char *)0, 0, 0, SPO_MAP)); max_x_map = COLNO-1; max_y_map = ROWNO; } -#line 3709 "y.tab.c" /* yacc.c:1646 */ - break; - - case 194: -#line 1313 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "cii", SP_COORD_PACK(((yyvsp[-4].i)),((yyvsp[-2].i))), 1, (long)(yyvsp[-1].i)); - scan_map((yyvsp[0].map), splev); - Free((yyvsp[0].map)); - } -#line 3719 "y.tab.c" /* yacc.c:1646 */ - break; - - case 195: -#line 1319 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "ii", 2, (long)(yyvsp[-1].i)); - scan_map((yyvsp[0].map), splev); - Free((yyvsp[0].map)); - } -#line 3729 "y.tab.c" /* yacc.c:1646 */ - break; - - case 200: -#line 1335 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "io", 0, SPO_MONSTER); - } -#line 3737 "y.tab.c" /* yacc.c:1646 */ - break; - - case 201: -#line 1339 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "io", 1, SPO_MONSTER); - in_container_obj++; - break_stmt_start(); - } -#line 3747 "y.tab.c" /* yacc.c:1646 */ - break; - - case 202: -#line 1345 "lev_comp.y" /* yacc.c:1646 */ - { - break_stmt_end(splev); - in_container_obj--; - add_opvars(splev, "o", SPO_END_MONINVENT); - } -#line 3757 "y.tab.c" /* yacc.c:1646 */ - break; - - case 203: -#line 1353 "lev_comp.y" /* yacc.c:1646 */ - { - /* nothing */ - } #line 3765 "y.tab.c" /* yacc.c:1646 */ break; + case 194: +#line 1369 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "cii", + VA_PASS3(SP_COORD_PACK(((yyvsp[-4].i)),((yyvsp[-2].i))), + 1, (long)(yyvsp[-1].i))); + scan_map((yyvsp[0].map), splev); + Free((yyvsp[0].map)); + } +#line 3777 "y.tab.c" /* yacc.c:1646 */ + break; + + case 195: +#line 1377 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "ii", VA_PASS2(2, (long)(yyvsp[-1].i))); + scan_map((yyvsp[0].map), splev); + Free((yyvsp[0].map)); + } +#line 3787 "y.tab.c" /* yacc.c:1646 */ + break; + + case 200: +#line 1393 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "io", VA_PASS2(0, SPO_MONSTER)); + } +#line 3795 "y.tab.c" /* yacc.c:1646 */ + break; + + case 201: +#line 1397 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "io", VA_PASS2(1, SPO_MONSTER)); + in_container_obj++; + break_stmt_start(); + } +#line 3805 "y.tab.c" /* yacc.c:1646 */ + break; + + case 202: +#line 1403 "lev_comp.y" /* yacc.c:1646 */ + { + break_stmt_end(splev); + in_container_obj--; + add_opvars(splev, "o", VA_PASS1(SPO_END_MONINVENT)); + } +#line 3815 "y.tab.c" /* yacc.c:1646 */ + break; + + case 203: +#line 1411 "lev_comp.y" /* yacc.c:1646 */ + { + /* nothing */ + } +#line 3823 "y.tab.c" /* yacc.c:1646 */ + break; + case 204: -#line 1359 "lev_comp.y" /* yacc.c:1646 */ +#line 1417 "lev_comp.y" /* yacc.c:1646 */ { struct opvar *stopit = New(struct opvar); set_opvar_int(stopit, SP_M_V_END); add_opcode(splev, SPO_PUSH, stopit); (yyval.i) = 0x0000; } -#line 3776 "y.tab.c" /* yacc.c:1646 */ +#line 3834 "y.tab.c" /* yacc.c:1646 */ break; case 205: -#line 1366 "lev_comp.y" /* yacc.c:1646 */ +#line 1424 "lev_comp.y" /* yacc.c:1646 */ { if (( (yyvsp[-2].i) & (yyvsp[0].i) )) lc_error("MONSTER extra info defined twice."); (yyval.i) = ( (yyvsp[-2].i) | (yyvsp[0].i) ); } -#line 3786 "y.tab.c" /* yacc.c:1646 */ +#line 3844 "y.tab.c" /* yacc.c:1646 */ break; case 206: -#line 1374 "lev_comp.y" /* yacc.c:1646 */ +#line 1432 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "i", SP_M_V_NAME); + add_opvars(splev, "i", VA_PASS1(SP_M_V_NAME)); (yyval.i) = 0x0001; } -#line 3795 "y.tab.c" /* yacc.c:1646 */ +#line 3853 "y.tab.c" /* yacc.c:1646 */ break; case 207: -#line 1379 "lev_comp.y" /* yacc.c:1646 */ +#line 1437 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", (long)(yyvsp[0].i), SP_M_V_PEACEFUL); + add_opvars(splev, "ii", + VA_PASS2((long)(yyvsp[0].i), SP_M_V_PEACEFUL)); (yyval.i) = 0x0002; } -#line 3804 "y.tab.c" /* yacc.c:1646 */ +#line 3863 "y.tab.c" /* yacc.c:1646 */ break; case 208: -#line 1384 "lev_comp.y" /* yacc.c:1646 */ +#line 1443 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", (long)(yyvsp[0].i), SP_M_V_ASLEEP); + add_opvars(splev, "ii", + VA_PASS2((long)(yyvsp[0].i), SP_M_V_ASLEEP)); (yyval.i) = 0x0004; } -#line 3813 "y.tab.c" /* yacc.c:1646 */ +#line 3873 "y.tab.c" /* yacc.c:1646 */ break; case 209: -#line 1389 "lev_comp.y" /* yacc.c:1646 */ +#line 1449 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", (long)(yyvsp[0].i), SP_M_V_ALIGN); + add_opvars(splev, "ii", + VA_PASS2((long)(yyvsp[0].i), SP_M_V_ALIGN)); (yyval.i) = 0x0008; } -#line 3822 "y.tab.c" /* yacc.c:1646 */ +#line 3883 "y.tab.c" /* yacc.c:1646 */ break; case 210: -#line 1394 "lev_comp.y" /* yacc.c:1646 */ +#line 1455 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", (long)(yyvsp[-1].i), SP_M_V_APPEAR); + add_opvars(splev, "ii", + VA_PASS2((long)(yyvsp[-1].i), SP_M_V_APPEAR)); (yyval.i) = 0x0010; } -#line 3831 "y.tab.c" /* yacc.c:1646 */ +#line 3893 "y.tab.c" /* yacc.c:1646 */ break; case 211: -#line 1399 "lev_comp.y" /* yacc.c:1646 */ +#line 1461 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", 1, SP_M_V_FEMALE); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_FEMALE)); (yyval.i) = 0x0020; } -#line 3840 "y.tab.c" /* yacc.c:1646 */ +#line 3902 "y.tab.c" /* yacc.c:1646 */ break; case 212: -#line 1404 "lev_comp.y" /* yacc.c:1646 */ +#line 1466 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", 1, SP_M_V_INVIS); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_INVIS)); (yyval.i) = 0x0040; } -#line 3849 "y.tab.c" /* yacc.c:1646 */ +#line 3911 "y.tab.c" /* yacc.c:1646 */ break; case 213: -#line 1409 "lev_comp.y" /* yacc.c:1646 */ +#line 1471 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", 1, SP_M_V_CANCELLED); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_CANCELLED)); (yyval.i) = 0x0080; } -#line 3858 "y.tab.c" /* yacc.c:1646 */ +#line 3920 "y.tab.c" /* yacc.c:1646 */ break; case 214: -#line 1414 "lev_comp.y" /* yacc.c:1646 */ +#line 1476 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", 1, SP_M_V_REVIVED); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_REVIVED)); (yyval.i) = 0x0100; } -#line 3867 "y.tab.c" /* yacc.c:1646 */ +#line 3929 "y.tab.c" /* yacc.c:1646 */ break; case 215: -#line 1419 "lev_comp.y" /* yacc.c:1646 */ +#line 1481 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", 1, SP_M_V_AVENGE); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_AVENGE)); (yyval.i) = 0x0200; } -#line 3876 "y.tab.c" /* yacc.c:1646 */ +#line 3938 "y.tab.c" /* yacc.c:1646 */ break; case 216: -#line 1424 "lev_comp.y" /* yacc.c:1646 */ +#line 1486 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "i", SP_M_V_FLEEING); + add_opvars(splev, "i", VA_PASS1(SP_M_V_FLEEING)); (yyval.i) = 0x0400; } -#line 3885 "y.tab.c" /* yacc.c:1646 */ +#line 3947 "y.tab.c" /* yacc.c:1646 */ break; case 217: -#line 1429 "lev_comp.y" /* yacc.c:1646 */ +#line 1491 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "i", SP_M_V_BLINDED); + add_opvars(splev, "i", VA_PASS1(SP_M_V_BLINDED)); (yyval.i) = 0x0800; } -#line 3894 "y.tab.c" /* yacc.c:1646 */ +#line 3956 "y.tab.c" /* yacc.c:1646 */ break; case 218: -#line 1434 "lev_comp.y" /* yacc.c:1646 */ +#line 1496 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "i", SP_M_V_PARALYZED); + add_opvars(splev, "i", VA_PASS1(SP_M_V_PARALYZED)); (yyval.i) = 0x1000; } -#line 3903 "y.tab.c" /* yacc.c:1646 */ +#line 3965 "y.tab.c" /* yacc.c:1646 */ break; case 219: -#line 1439 "lev_comp.y" /* yacc.c:1646 */ +#line 1501 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", 1, SP_M_V_STUNNED); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_STUNNED)); (yyval.i) = 0x2000; } -#line 3912 "y.tab.c" /* yacc.c:1646 */ +#line 3974 "y.tab.c" /* yacc.c:1646 */ break; case 220: -#line 1444 "lev_comp.y" /* yacc.c:1646 */ +#line 1506 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", 1, SP_M_V_CONFUSED); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_CONFUSED)); (yyval.i) = 0x4000; } -#line 3921 "y.tab.c" /* yacc.c:1646 */ +#line 3983 "y.tab.c" /* yacc.c:1646 */ break; case 221: -#line 1449 "lev_comp.y" /* yacc.c:1646 */ +#line 1511 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", (long)(yyvsp[0].i), SP_M_V_SEENTRAPS); + add_opvars(splev, "ii", + VA_PASS2((long)(yyvsp[0].i), SP_M_V_SEENTRAPS)); (yyval.i) = 0x8000; } -#line 3930 "y.tab.c" /* yacc.c:1646 */ +#line 3993 "y.tab.c" /* yacc.c:1646 */ break; case 222: -#line 1456 "lev_comp.y" /* yacc.c:1646 */ +#line 1519 "lev_comp.y" /* yacc.c:1646 */ { int token = get_trap_type((yyvsp[0].map)); if (token == ERR || token == 0) lc_error("Unknown trap type '%s'!", (yyvsp[0].map)); (yyval.i) = (1L << (token - 1)); } -#line 3941 "y.tab.c" /* yacc.c:1646 */ +#line 4004 "y.tab.c" /* yacc.c:1646 */ break; case 223: -#line 1463 "lev_comp.y" /* yacc.c:1646 */ +#line 1526 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (long) ~0; } -#line 3949 "y.tab.c" /* yacc.c:1646 */ +#line 4012 "y.tab.c" /* yacc.c:1646 */ break; case 224: -#line 1467 "lev_comp.y" /* yacc.c:1646 */ +#line 1530 "lev_comp.y" /* yacc.c:1646 */ { int token = get_trap_type((yyvsp[-2].map)); if (token == ERR || token == 0) @@ -3960,231 +4023,233 @@ yyreduce: (yyval.i) = ((1L << (token - 1)) | (yyvsp[0].i)); } -#line 3964 "y.tab.c" /* yacc.c:1646 */ +#line 4027 "y.tab.c" /* yacc.c:1646 */ break; case 225: -#line 1480 "lev_comp.y" /* yacc.c:1646 */ +#line 1543 "lev_comp.y" /* yacc.c:1646 */ { long cnt = 0; if (in_container_obj) cnt |= SP_OBJ_CONTENT; - add_opvars(splev, "io", cnt, SPO_OBJECT); + add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); } -#line 3974 "y.tab.c" /* yacc.c:1646 */ +#line 4037 "y.tab.c" /* yacc.c:1646 */ break; case 226: -#line 1486 "lev_comp.y" /* yacc.c:1646 */ +#line 1549 "lev_comp.y" /* yacc.c:1646 */ { long cnt = SP_OBJ_CONTAINER; if (in_container_obj) cnt |= SP_OBJ_CONTENT; - add_opvars(splev, "io", cnt, SPO_OBJECT); + add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); in_container_obj++; break_stmt_start(); } -#line 3986 "y.tab.c" /* yacc.c:1646 */ +#line 4049 "y.tab.c" /* yacc.c:1646 */ break; case 227: -#line 1494 "lev_comp.y" /* yacc.c:1646 */ +#line 1557 "lev_comp.y" /* yacc.c:1646 */ { break_stmt_end(splev); in_container_obj--; add_opcode(splev, SPO_POP_CONTAINER, NULL); } -#line 3996 "y.tab.c" /* yacc.c:1646 */ +#line 4059 "y.tab.c" /* yacc.c:1646 */ break; case 228: -#line 1502 "lev_comp.y" /* yacc.c:1646 */ +#line 1565 "lev_comp.y" /* yacc.c:1646 */ { if (( (yyvsp[0].i) & 0x4000) && in_container_obj) lc_error("Object cannot have a coord when contained."); else if (!( (yyvsp[0].i) & 0x4000) && !in_container_obj) lc_error("Object needs a coord when not contained."); } -#line 4005 "y.tab.c" /* yacc.c:1646 */ +#line 4068 "y.tab.c" /* yacc.c:1646 */ break; case 229: -#line 1509 "lev_comp.y" /* yacc.c:1646 */ +#line 1572 "lev_comp.y" /* yacc.c:1646 */ { struct opvar *stopit = New(struct opvar); set_opvar_int(stopit, SP_O_V_END); add_opcode(splev, SPO_PUSH, stopit); (yyval.i) = 0x00; } -#line 4016 "y.tab.c" /* yacc.c:1646 */ +#line 4079 "y.tab.c" /* yacc.c:1646 */ break; case 230: -#line 1516 "lev_comp.y" /* yacc.c:1646 */ +#line 1579 "lev_comp.y" /* yacc.c:1646 */ { if (( (yyvsp[-2].i) & (yyvsp[0].i) )) lc_error("OBJECT extra info '%s' defined twice.", curr_token); (yyval.i) = ( (yyvsp[-2].i) | (yyvsp[0].i) ); } -#line 4026 "y.tab.c" /* yacc.c:1646 */ - break; - - case 231: -#line 1524 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "ii", (long)(yyvsp[0].i), SP_O_V_CURSE); - (yyval.i) = 0x0001; - } -#line 4035 "y.tab.c" /* yacc.c:1646 */ - break; - - case 232: -#line 1529 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "i", SP_O_V_CORPSENM); - (yyval.i) = 0x0002; - } -#line 4044 "y.tab.c" /* yacc.c:1646 */ - break; - - case 233: -#line 1534 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "i", SP_O_V_SPE); - (yyval.i) = 0x0004; - } -#line 4053 "y.tab.c" /* yacc.c:1646 */ - break; - - case 234: -#line 1539 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "i", SP_O_V_NAME); - (yyval.i) = 0x0008; - } -#line 4062 "y.tab.c" /* yacc.c:1646 */ - break; - - case 235: -#line 1544 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "i", SP_O_V_QUAN); - (yyval.i) = 0x0010; - } -#line 4071 "y.tab.c" /* yacc.c:1646 */ - break; - - case 236: -#line 1549 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "ii", 1, SP_O_V_BURIED); - (yyval.i) = 0x0020; - } -#line 4080 "y.tab.c" /* yacc.c:1646 */ - break; - - case 237: -#line 1554 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "ii", (long)(yyvsp[0].i), SP_O_V_LIT); - (yyval.i) = 0x0040; - } #line 4089 "y.tab.c" /* yacc.c:1646 */ break; - case 238: -#line 1559 "lev_comp.y" /* yacc.c:1646 */ + case 231: +#line 1587 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "i", SP_O_V_ERODED); + add_opvars(splev, "ii", + VA_PASS2((long)(yyvsp[0].i), SP_O_V_CURSE)); + (yyval.i) = 0x0001; + } +#line 4099 "y.tab.c" /* yacc.c:1646 */ + break; + + case 232: +#line 1593 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "i", VA_PASS1(SP_O_V_CORPSENM)); + (yyval.i) = 0x0002; + } +#line 4108 "y.tab.c" /* yacc.c:1646 */ + break; + + case 233: +#line 1598 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "i", VA_PASS1(SP_O_V_SPE)); + (yyval.i) = 0x0004; + } +#line 4117 "y.tab.c" /* yacc.c:1646 */ + break; + + case 234: +#line 1603 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "i", VA_PASS1(SP_O_V_NAME)); + (yyval.i) = 0x0008; + } +#line 4126 "y.tab.c" /* yacc.c:1646 */ + break; + + case 235: +#line 1608 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "i", VA_PASS1(SP_O_V_QUAN)); + (yyval.i) = 0x0010; + } +#line 4135 "y.tab.c" /* yacc.c:1646 */ + break; + + case 236: +#line 1613 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_BURIED)); + (yyval.i) = 0x0020; + } +#line 4144 "y.tab.c" /* yacc.c:1646 */ + break; + + case 237: +#line 1618 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "ii", VA_PASS2((long)(yyvsp[0].i), SP_O_V_LIT)); + (yyval.i) = 0x0040; + } +#line 4153 "y.tab.c" /* yacc.c:1646 */ + break; + + case 238: +#line 1623 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "i", VA_PASS1(SP_O_V_ERODED)); (yyval.i) = 0x0080; } -#line 4098 "y.tab.c" /* yacc.c:1646 */ +#line 4162 "y.tab.c" /* yacc.c:1646 */ break; case 239: -#line 1564 "lev_comp.y" /* yacc.c:1646 */ +#line 1628 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", -1, SP_O_V_ERODED); + add_opvars(splev, "ii", VA_PASS2(-1, SP_O_V_ERODED)); (yyval.i) = 0x0080; } -#line 4107 "y.tab.c" /* yacc.c:1646 */ +#line 4171 "y.tab.c" /* yacc.c:1646 */ break; case 240: -#line 1569 "lev_comp.y" /* yacc.c:1646 */ +#line 1633 "lev_comp.y" /* yacc.c:1646 */ { if ((yyvsp[0].i) == D_LOCKED) { - add_opvars(splev, "ii", 1, SP_O_V_LOCKED); + add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_LOCKED)); (yyval.i) = 0x0100; } else if ((yyvsp[0].i) == D_BROKEN) { - add_opvars(splev, "ii", 1, SP_O_V_BROKEN); + add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_BROKEN)); (yyval.i) = 0x0200; } else - lc_error("OBJECT state can only be locked or broken."); + lc_error("DOOR state can only be locked or broken."); } -#line 4122 "y.tab.c" /* yacc.c:1646 */ +#line 4186 "y.tab.c" /* yacc.c:1646 */ break; case 241: -#line 1580 "lev_comp.y" /* yacc.c:1646 */ +#line 1644 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", 1, SP_O_V_TRAPPED); + add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_TRAPPED)); (yyval.i) = 0x0400; } -#line 4131 "y.tab.c" /* yacc.c:1646 */ +#line 4195 "y.tab.c" /* yacc.c:1646 */ break; case 242: -#line 1585 "lev_comp.y" /* yacc.c:1646 */ +#line 1649 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "i", SP_O_V_RECHARGED); + add_opvars(splev, "i", VA_PASS1(SP_O_V_RECHARGED)); (yyval.i) = 0x0800; } -#line 4140 "y.tab.c" /* yacc.c:1646 */ +#line 4204 "y.tab.c" /* yacc.c:1646 */ break; case 243: -#line 1590 "lev_comp.y" /* yacc.c:1646 */ +#line 1654 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", 1, SP_O_V_INVIS); + add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_INVIS)); (yyval.i) = 0x1000; } -#line 4149 "y.tab.c" /* yacc.c:1646 */ +#line 4213 "y.tab.c" /* yacc.c:1646 */ break; case 244: -#line 1595 "lev_comp.y" /* yacc.c:1646 */ +#line 1659 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "ii", 1, SP_O_V_GREASED); + add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_GREASED)); (yyval.i) = 0x2000; } -#line 4158 "y.tab.c" /* yacc.c:1646 */ +#line 4222 "y.tab.c" /* yacc.c:1646 */ break; case 245: -#line 1600 "lev_comp.y" /* yacc.c:1646 */ +#line 1664 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "i", SP_O_V_COORD); + add_opvars(splev, "i", VA_PASS1(SP_O_V_COORD)); (yyval.i) = 0x4000; } -#line 4167 "y.tab.c" /* yacc.c:1646 */ +#line 4231 "y.tab.c" /* yacc.c:1646 */ break; case 246: -#line 1607 "lev_comp.y" /* yacc.c:1646 */ +#line 1671 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", (long)(yyvsp[-2].i), SPO_TRAP); + add_opvars(splev, "io", VA_PASS2((long)(yyvsp[-2].i), SPO_TRAP)); } -#line 4175 "y.tab.c" /* yacc.c:1646 */ +#line 4239 "y.tab.c" /* yacc.c:1646 */ break; case 247: -#line 1613 "lev_comp.y" /* yacc.c:1646 */ +#line 1677 "lev_comp.y" /* yacc.c:1646 */ { - long d, state = 0; + long dir, state = 0; + /* convert dir from a DIRECTION to a DB_DIR */ - d = (yyvsp[-2].i); - switch(d) { - case W_NORTH: d = DB_NORTH; break; - case W_SOUTH: d = DB_SOUTH; break; - case W_EAST: d = DB_EAST; break; - case W_WEST: d = DB_WEST; break; + dir = (yyvsp[-2].i); + switch (dir) { + case W_NORTH: dir = DB_NORTH; break; + case W_SOUTH: dir = DB_SOUTH; break; + case W_EAST: dir = DB_EAST; break; + case W_WEST: dir = DB_WEST; break; default: lc_error("Invalid drawbridge direction."); break; @@ -4198,222 +4263,231 @@ yyreduce: state = -1; else lc_error("A drawbridge can only be open, closed or random!"); - add_opvars(splev, "iio", state, d, SPO_DRAWBRIDGE); + add_opvars(splev, "iio", + VA_PASS3(state, dir, SPO_DRAWBRIDGE)); } -#line 4204 "y.tab.c" /* yacc.c:1646 */ +#line 4270 "y.tab.c" /* yacc.c:1646 */ break; case 248: -#line 1640 "lev_comp.y" /* yacc.c:1646 */ +#line 1706 "lev_comp.y" /* yacc.c:1646 */ { add_opvars(splev, "iiio", - (long)(yyvsp[0].i), 1, 0, SPO_MAZEWALK); + VA_PASS4((long)(yyvsp[0].i), 1, 0, SPO_MAZEWALK)); } -#line 4213 "y.tab.c" /* yacc.c:1646 */ +#line 4279 "y.tab.c" /* yacc.c:1646 */ break; case 249: -#line 1645 "lev_comp.y" /* yacc.c:1646 */ +#line 1711 "lev_comp.y" /* yacc.c:1646 */ { add_opvars(splev, "iiio", - (long)(yyvsp[-3].i), (long)(yyvsp[-1].i), (long)(yyvsp[0].i), SPO_MAZEWALK); + VA_PASS4((long)(yyvsp[-3].i), (long)(yyvsp[-1].i), + (long)(yyvsp[0].i), SPO_MAZEWALK)); } -#line 4222 "y.tab.c" /* yacc.c:1646 */ +#line 4289 "y.tab.c" /* yacc.c:1646 */ break; case 250: -#line 1652 "lev_comp.y" /* yacc.c:1646 */ +#line 1719 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "rio", SP_REGION_PACK(-1,-1,-1,-1), 0, SPO_WALLIFY); + add_opvars(splev, "rio", + VA_PASS3(SP_REGION_PACK(-1,-1,-1,-1), + 0, SPO_WALLIFY)); } -#line 4230 "y.tab.c" /* yacc.c:1646 */ +#line 4299 "y.tab.c" /* yacc.c:1646 */ break; case 251: -#line 1656 "lev_comp.y" /* yacc.c:1646 */ +#line 1725 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", 1, SPO_WALLIFY); + add_opvars(splev, "io", VA_PASS2(1, SPO_WALLIFY)); } -#line 4238 "y.tab.c" /* yacc.c:1646 */ +#line 4307 "y.tab.c" /* yacc.c:1646 */ break; case 252: -#line 1662 "lev_comp.y" /* yacc.c:1646 */ +#line 1731 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", (long)(yyvsp[0].i), SPO_LADDER); + add_opvars(splev, "io", + VA_PASS2((long)(yyvsp[0].i), SPO_LADDER)); } -#line 4246 "y.tab.c" /* yacc.c:1646 */ +#line 4316 "y.tab.c" /* yacc.c:1646 */ break; case 253: -#line 1668 "lev_comp.y" /* yacc.c:1646 */ +#line 1738 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", (long)(yyvsp[0].i), SPO_STAIR); + add_opvars(splev, "io", + VA_PASS2((long)(yyvsp[0].i), SPO_STAIR)); } -#line 4254 "y.tab.c" /* yacc.c:1646 */ +#line 4325 "y.tab.c" /* yacc.c:1646 */ break; case 254: -#line 1674 "lev_comp.y" /* yacc.c:1646 */ +#line 1745 "lev_comp.y" /* yacc.c:1646 */ { add_opvars(splev, "iiiii iiiii iiso", - (yyvsp[-4].lregn).x1, (yyvsp[-4].lregn).y1, (yyvsp[-4].lregn).x2, (yyvsp[-4].lregn).y2, (yyvsp[-4].lregn).area, - (yyvsp[-2].lregn).x1, (yyvsp[-2].lregn).y1, (yyvsp[-2].lregn).x2, (yyvsp[-2].lregn).y2, (yyvsp[-2].lregn).area, - (long)(((yyvsp[0].i)) ? LR_UPSTAIR : LR_DOWNSTAIR), - 0, (char *)0, SPO_LEVREGION); + VA_PASS14((yyvsp[-4].lregn).x1, (yyvsp[-4].lregn).y1, (yyvsp[-4].lregn).x2, (yyvsp[-4].lregn).y2, (yyvsp[-4].lregn).area, + (yyvsp[-2].lregn).x1, (yyvsp[-2].lregn).y1, (yyvsp[-2].lregn).x2, (yyvsp[-2].lregn).y2, (yyvsp[-2].lregn).area, + (long)(((yyvsp[0].i)) ? LR_UPSTAIR : LR_DOWNSTAIR), + 0, (char *)0, SPO_LEVREGION)); } -#line 4266 "y.tab.c" /* yacc.c:1646 */ +#line 4337 "y.tab.c" /* yacc.c:1646 */ break; case 255: -#line 1684 "lev_comp.y" /* yacc.c:1646 */ +#line 1755 "lev_comp.y" /* yacc.c:1646 */ { add_opvars(splev, "iiiii iiiii iiso", - (yyvsp[-4].lregn).x1, (yyvsp[-4].lregn).y1, (yyvsp[-4].lregn).x2, (yyvsp[-4].lregn).y2, (yyvsp[-4].lregn).area, - (yyvsp[-2].lregn).x1, (yyvsp[-2].lregn).y1, (yyvsp[-2].lregn).x2, (yyvsp[-2].lregn).y2, (yyvsp[-2].lregn).area, - LR_PORTAL, 0, (yyvsp[0].map), SPO_LEVREGION); + VA_PASS14((yyvsp[-4].lregn).x1, (yyvsp[-4].lregn).y1, (yyvsp[-4].lregn).x2, (yyvsp[-4].lregn).y2, (yyvsp[-4].lregn).area, + (yyvsp[-2].lregn).x1, (yyvsp[-2].lregn).y1, (yyvsp[-2].lregn).x2, (yyvsp[-2].lregn).y2, (yyvsp[-2].lregn).area, + LR_PORTAL, 0, (yyvsp[0].map), SPO_LEVREGION)); Free((yyvsp[0].map)); } -#line 4278 "y.tab.c" /* yacc.c:1646 */ +#line 4349 "y.tab.c" /* yacc.c:1646 */ break; case 256: -#line 1694 "lev_comp.y" /* yacc.c:1646 */ +#line 1765 "lev_comp.y" /* yacc.c:1646 */ { - long rtype = 0; + long rtyp = 0; switch((yyvsp[0].i)) { - case -1: rtype = LR_TELE; break; - case 0: rtype = LR_DOWNTELE; break; - case 1: rtype = LR_UPTELE; break; + case -1: rtyp = LR_TELE; break; + case 0: rtyp = LR_DOWNTELE; break; + case 1: rtyp = LR_UPTELE; break; } add_opvars(splev, "iiiii iiiii iiso", - (yyvsp[-3].lregn).x1, (yyvsp[-3].lregn).y1, (yyvsp[-3].lregn).x2, (yyvsp[-3].lregn).y2, (yyvsp[-3].lregn).area, - (yyvsp[-1].lregn).x1, (yyvsp[-1].lregn).y1, (yyvsp[-1].lregn).x2, (yyvsp[-1].lregn).y2, (yyvsp[-1].lregn).area, - rtype, 0, (char *)0, SPO_LEVREGION); + VA_PASS14((yyvsp[-3].lregn).x1, (yyvsp[-3].lregn).y1, (yyvsp[-3].lregn).x2, (yyvsp[-3].lregn).y2, (yyvsp[-3].lregn).area, + (yyvsp[-1].lregn).x1, (yyvsp[-1].lregn).y1, (yyvsp[-1].lregn).x2, (yyvsp[-1].lregn).y2, (yyvsp[-1].lregn).area, + rtyp, 0, (char *)0, SPO_LEVREGION)); } -#line 4295 "y.tab.c" /* yacc.c:1646 */ +#line 4366 "y.tab.c" /* yacc.c:1646 */ break; case 257: -#line 1709 "lev_comp.y" /* yacc.c:1646 */ +#line 1780 "lev_comp.y" /* yacc.c:1646 */ { add_opvars(splev, "iiiii iiiii iiso", - (yyvsp[-2].lregn).x1, (yyvsp[-2].lregn).y1, (yyvsp[-2].lregn).x2, (yyvsp[-2].lregn).y2, (yyvsp[-2].lregn).area, - (yyvsp[0].lregn).x1, (yyvsp[0].lregn).y1, (yyvsp[0].lregn).x2, (yyvsp[0].lregn).y2, (yyvsp[0].lregn).area, - (long)LR_BRANCH, 0, (char *)0, SPO_LEVREGION); + VA_PASS14((yyvsp[-2].lregn).x1, (yyvsp[-2].lregn).y1, (yyvsp[-2].lregn).x2, (yyvsp[-2].lregn).y2, (yyvsp[-2].lregn).area, + (yyvsp[0].lregn).x1, (yyvsp[0].lregn).y1, (yyvsp[0].lregn).x2, (yyvsp[0].lregn).y2, (yyvsp[0].lregn).area, + (long)LR_BRANCH, 0, + (char *)0, SPO_LEVREGION)); } -#line 4306 "y.tab.c" /* yacc.c:1646 */ +#line 4378 "y.tab.c" /* yacc.c:1646 */ break; case 258: -#line 1718 "lev_comp.y" /* yacc.c:1646 */ +#line 1790 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = -1; } -#line 4314 "y.tab.c" /* yacc.c:1646 */ +#line 4386 "y.tab.c" /* yacc.c:1646 */ break; case 259: -#line 1722 "lev_comp.y" /* yacc.c:1646 */ +#line 1794 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (yyvsp[0].i); } -#line 4322 "y.tab.c" /* yacc.c:1646 */ +#line 4394 "y.tab.c" /* yacc.c:1646 */ break; case 260: -#line 1728 "lev_comp.y" /* yacc.c:1646 */ +#line 1800 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_FOUNTAIN); + add_opvars(splev, "o", VA_PASS1(SPO_FOUNTAIN)); } -#line 4330 "y.tab.c" /* yacc.c:1646 */ +#line 4402 "y.tab.c" /* yacc.c:1646 */ break; case 261: -#line 1734 "lev_comp.y" /* yacc.c:1646 */ +#line 1806 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_SINK); + add_opvars(splev, "o", VA_PASS1(SPO_SINK)); } -#line 4338 "y.tab.c" /* yacc.c:1646 */ +#line 4410 "y.tab.c" /* yacc.c:1646 */ break; case 262: -#line 1740 "lev_comp.y" /* yacc.c:1646 */ +#line 1812 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_POOL); + add_opvars(splev, "o", VA_PASS1(SPO_POOL)); } -#line 4346 "y.tab.c" /* yacc.c:1646 */ +#line 4418 "y.tab.c" /* yacc.c:1646 */ break; case 263: -#line 1746 "lev_comp.y" /* yacc.c:1646 */ +#line 1818 "lev_comp.y" /* yacc.c:1646 */ { (yyval.terr).lit = -2; (yyval.terr).ter = what_map_char((char) (yyvsp[0].i)); } -#line 4355 "y.tab.c" /* yacc.c:1646 */ +#line 4427 "y.tab.c" /* yacc.c:1646 */ break; case 264: -#line 1751 "lev_comp.y" /* yacc.c:1646 */ +#line 1823 "lev_comp.y" /* yacc.c:1646 */ { (yyval.terr).lit = (yyvsp[-1].i); (yyval.terr).ter = what_map_char((char) (yyvsp[-3].i)); } -#line 4364 "y.tab.c" /* yacc.c:1646 */ +#line 4436 "y.tab.c" /* yacc.c:1646 */ break; case 265: -#line 1758 "lev_comp.y" /* yacc.c:1646 */ +#line 1830 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", (yyvsp[0].i), SPO_REPLACETERRAIN); + add_opvars(splev, "io", + VA_PASS2((yyvsp[0].i), SPO_REPLACETERRAIN)); } -#line 4372 "y.tab.c" /* yacc.c:1646 */ +#line 4445 "y.tab.c" /* yacc.c:1646 */ break; case 266: -#line 1764 "lev_comp.y" /* yacc.c:1646 */ +#line 1837 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_TERRAIN); + add_opvars(splev, "o", VA_PASS1(SPO_TERRAIN)); } -#line 4380 "y.tab.c" /* yacc.c:1646 */ +#line 4453 "y.tab.c" /* yacc.c:1646 */ break; case 267: -#line 1770 "lev_comp.y" /* yacc.c:1646 */ +#line 1843 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_NON_DIGGABLE); + add_opvars(splev, "o", VA_PASS1(SPO_NON_DIGGABLE)); } -#line 4388 "y.tab.c" /* yacc.c:1646 */ +#line 4461 "y.tab.c" /* yacc.c:1646 */ break; case 268: -#line 1776 "lev_comp.y" /* yacc.c:1646 */ +#line 1849 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_NON_PASSWALL); + add_opvars(splev, "o", VA_PASS1(SPO_NON_PASSWALL)); } -#line 4396 "y.tab.c" /* yacc.c:1646 */ +#line 4469 "y.tab.c" /* yacc.c:1646 */ break; case 269: -#line 1782 "lev_comp.y" /* yacc.c:1646 */ +#line 1855 "lev_comp.y" /* yacc.c:1646 */ { long irr; long rt = (yyvsp[-1].i); - long flags = (yyvsp[0].i); - if (flags == -1) flags = (1 << 0); - if (!(( flags ) & 1)) rt += MAXRTYPE+1; - irr = ((( flags ) & 2) != 0); + long rflags = (yyvsp[0].i); + + if (rflags == -1) rflags = (1 << 0); + if (!(rflags & 1)) rt += MAXRTYPE+1; + irr = ((rflags & 2) != 0); add_opvars(splev, "iiio", - (long)(yyvsp[-3].i), rt, flags, SPO_REGION); - (yyval.i) = (irr || (flags & 1) || rt != OROOM); + VA_PASS4((long)(yyvsp[-3].i), rt, rflags, SPO_REGION)); + (yyval.i) = (irr || (rflags & 1) || rt != OROOM); break_stmt_start(); } -#line 4413 "y.tab.c" /* yacc.c:1646 */ +#line 4487 "y.tab.c" /* yacc.c:1646 */ break; case 270: -#line 1795 "lev_comp.y" /* yacc.c:1646 */ +#line 1869 "lev_comp.y" /* yacc.c:1646 */ { break_stmt_end(splev); if ( (yyvsp[-1].i) ) { @@ -4421,94 +4495,96 @@ yyreduce: } else if ( (yyvsp[0].i) ) lc_error("Cannot use lev statements in non-permanent REGION"); } -#line 4425 "y.tab.c" /* yacc.c:1646 */ +#line 4499 "y.tab.c" /* yacc.c:1646 */ break; case 271: -#line 1805 "lev_comp.y" /* yacc.c:1646 */ +#line 1879 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = 0; } -#line 4433 "y.tab.c" /* yacc.c:1646 */ +#line 4507 "y.tab.c" /* yacc.c:1646 */ break; case 272: -#line 1809 "lev_comp.y" /* yacc.c:1646 */ +#line 1883 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (yyvsp[0].i); } -#line 4441 "y.tab.c" /* yacc.c:1646 */ +#line 4515 "y.tab.c" /* yacc.c:1646 */ break; case 273: -#line 1815 "lev_comp.y" /* yacc.c:1646 */ +#line 1889 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "iio", (long)(yyvsp[0].i), (long)(yyvsp[-2].i), SPO_ALTAR); + add_opvars(splev, "iio", + VA_PASS3((long)(yyvsp[0].i), (long)(yyvsp[-2].i), SPO_ALTAR)); } -#line 4449 "y.tab.c" /* yacc.c:1646 */ +#line 4524 "y.tab.c" /* yacc.c:1646 */ break; case 274: -#line 1821 "lev_comp.y" /* yacc.c:1646 */ +#line 1896 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", 2, SPO_GRAVE); + add_opvars(splev, "io", VA_PASS2(2, SPO_GRAVE)); } -#line 4457 "y.tab.c" /* yacc.c:1646 */ +#line 4532 "y.tab.c" /* yacc.c:1646 */ break; case 275: -#line 1825 "lev_comp.y" /* yacc.c:1646 */ +#line 1900 "lev_comp.y" /* yacc.c:1646 */ { add_opvars(splev, "sio", - (char *)0, 1, SPO_GRAVE); + VA_PASS3((char *)0, 1, SPO_GRAVE)); } -#line 4466 "y.tab.c" /* yacc.c:1646 */ +#line 4541 "y.tab.c" /* yacc.c:1646 */ break; case 276: -#line 1830 "lev_comp.y" /* yacc.c:1646 */ +#line 1905 "lev_comp.y" /* yacc.c:1646 */ { add_opvars(splev, "sio", - (char *)0, 0, SPO_GRAVE); + VA_PASS3((char *)0, 0, SPO_GRAVE)); } -#line 4475 "y.tab.c" /* yacc.c:1646 */ +#line 4550 "y.tab.c" /* yacc.c:1646 */ break; case 277: -#line 1837 "lev_comp.y" /* yacc.c:1646 */ +#line 1912 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_GOLD); + add_opvars(splev, "o", VA_PASS1(SPO_GOLD)); } -#line 4483 "y.tab.c" /* yacc.c:1646 */ +#line 4558 "y.tab.c" /* yacc.c:1646 */ break; case 278: -#line 1843 "lev_comp.y" /* yacc.c:1646 */ +#line 1918 "lev_comp.y" /* yacc.c:1646 */ { add_opvars(splev, "io", - (long)(yyvsp[-2].i), SPO_ENGRAVING); + VA_PASS2((long)(yyvsp[-2].i), SPO_ENGRAVING)); } -#line 4492 "y.tab.c" /* yacc.c:1646 */ +#line 4567 "y.tab.c" /* yacc.c:1646 */ break; case 279: -#line 1850 "lev_comp.y" /* yacc.c:1646 */ +#line 1925 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_MINERALIZE); + add_opvars(splev, "o", VA_PASS1(SPO_MINERALIZE)); } -#line 4500 "y.tab.c" /* yacc.c:1646 */ +#line 4575 "y.tab.c" /* yacc.c:1646 */ break; case 280: -#line 1854 "lev_comp.y" /* yacc.c:1646 */ +#line 1929 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "iiiio", -1L, -1L, -1L, -1L, SPO_MINERALIZE); + add_opvars(splev, "iiiio", + VA_PASS5(-1L, -1L, -1L, -1L, SPO_MINERALIZE)); } -#line 4508 "y.tab.c" /* yacc.c:1646 */ +#line 4584 "y.tab.c" /* yacc.c:1646 */ break; case 281: -#line 1860 "lev_comp.y" /* yacc.c:1646 */ +#line 1936 "lev_comp.y" /* yacc.c:1646 */ { int token = get_trap_type((yyvsp[0].map)); if (token == ERR) @@ -4516,11 +4592,11 @@ yyreduce: (yyval.i) = token; Free((yyvsp[0].map)); } -#line 4520 "y.tab.c" /* yacc.c:1646 */ +#line 4596 "y.tab.c" /* yacc.c:1646 */ break; case 283: -#line 1871 "lev_comp.y" /* yacc.c:1646 */ +#line 1947 "lev_comp.y" /* yacc.c:1646 */ { int token = get_room_type((yyvsp[0].map)); if (token == ERR) { @@ -4530,288 +4606,288 @@ yyreduce: (yyval.i) = token; Free((yyvsp[0].map)); } -#line 4534 "y.tab.c" /* yacc.c:1646 */ +#line 4610 "y.tab.c" /* yacc.c:1646 */ break; case 285: -#line 1884 "lev_comp.y" /* yacc.c:1646 */ +#line 1960 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = -1; } -#line 4542 "y.tab.c" /* yacc.c:1646 */ +#line 4618 "y.tab.c" /* yacc.c:1646 */ break; case 286: -#line 1888 "lev_comp.y" /* yacc.c:1646 */ +#line 1964 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (yyvsp[0].i); } -#line 4550 "y.tab.c" /* yacc.c:1646 */ +#line 4626 "y.tab.c" /* yacc.c:1646 */ break; case 287: -#line 1894 "lev_comp.y" /* yacc.c:1646 */ +#line 1970 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (yyvsp[0].i); } -#line 4558 "y.tab.c" /* yacc.c:1646 */ +#line 4634 "y.tab.c" /* yacc.c:1646 */ break; case 288: -#line 1898 "lev_comp.y" /* yacc.c:1646 */ +#line 1974 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (yyvsp[-2].i) | (yyvsp[0].i); } -#line 4566 "y.tab.c" /* yacc.c:1646 */ +#line 4642 "y.tab.c" /* yacc.c:1646 */ break; case 289: -#line 1905 "lev_comp.y" /* yacc.c:1646 */ +#line 1981 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = ((yyvsp[0].i) << 0); } -#line 4574 "y.tab.c" /* yacc.c:1646 */ +#line 4650 "y.tab.c" /* yacc.c:1646 */ break; case 290: -#line 1909 "lev_comp.y" /* yacc.c:1646 */ +#line 1985 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = ((yyvsp[0].i) << 1); } -#line 4582 "y.tab.c" /* yacc.c:1646 */ +#line 4658 "y.tab.c" /* yacc.c:1646 */ break; case 291: -#line 1913 "lev_comp.y" /* yacc.c:1646 */ +#line 1989 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = ((yyvsp[0].i) << 2); } -#line 4590 "y.tab.c" /* yacc.c:1646 */ +#line 4666 "y.tab.c" /* yacc.c:1646 */ break; case 298: -#line 1929 "lev_comp.y" /* yacc.c:1646 */ +#line 2005 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = - MAX_REGISTERS - 1; } -#line 4598 "y.tab.c" /* yacc.c:1646 */ +#line 4674 "y.tab.c" /* yacc.c:1646 */ break; case 301: -#line 1937 "lev_comp.y" /* yacc.c:1646 */ +#line 2013 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = - MAX_REGISTERS - 1; } -#line 4606 "y.tab.c" /* yacc.c:1646 */ +#line 4682 "y.tab.c" /* yacc.c:1646 */ break; case 304: -#line 1947 "lev_comp.y" /* yacc.c:1646 */ +#line 2023 "lev_comp.y" /* yacc.c:1646 */ { if ( (yyvsp[-1].i) >= 3 ) lc_error("Register Index overflow!"); else (yyval.i) = - (yyvsp[-1].i) - 1; } -#line 4617 "y.tab.c" /* yacc.c:1646 */ +#line 4693 "y.tab.c" /* yacc.c:1646 */ break; case 305: -#line 1956 "lev_comp.y" /* yacc.c:1646 */ +#line 2032 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "s", (yyvsp[0].map)); + add_opvars(splev, "s", VA_PASS1((yyvsp[0].map))); Free((yyvsp[0].map)); } -#line 4626 "y.tab.c" /* yacc.c:1646 */ +#line 4702 "y.tab.c" /* yacc.c:1646 */ break; case 306: -#line 1961 "lev_comp.y" /* yacc.c:1646 */ +#line 2037 "lev_comp.y" /* yacc.c:1646 */ { check_vardef_type(variable_definitions, (yyvsp[0].map), SPOVAR_STRING); vardef_used(variable_definitions, (yyvsp[0].map)); - add_opvars(splev, "v", (yyvsp[0].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[0].map))); Free((yyvsp[0].map)); } -#line 4637 "y.tab.c" /* yacc.c:1646 */ +#line 4713 "y.tab.c" /* yacc.c:1646 */ break; case 307: -#line 1968 "lev_comp.y" /* yacc.c:1646 */ +#line 2044 "lev_comp.y" /* yacc.c:1646 */ { check_vardef_type(variable_definitions, (yyvsp[-3].map), SPOVAR_STRING|SPOVAR_ARRAY); vardef_used(variable_definitions, (yyvsp[-3].map)); - add_opvars(splev, "v", (yyvsp[-3].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[-3].map))); Free((yyvsp[-3].map)); } -#line 4648 "y.tab.c" /* yacc.c:1646 */ +#line 4724 "y.tab.c" /* yacc.c:1646 */ break; case 308: -#line 1978 "lev_comp.y" /* yacc.c:1646 */ +#line 2054 "lev_comp.y" /* yacc.c:1646 */ { /* nothing */ } -#line 4656 "y.tab.c" /* yacc.c:1646 */ +#line 4732 "y.tab.c" /* yacc.c:1646 */ break; case 309: -#line 1984 "lev_comp.y" /* yacc.c:1646 */ +#line 2060 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "c", (yyvsp[0].i)); + add_opvars(splev, "c", VA_PASS1((yyvsp[0].i))); } -#line 4664 "y.tab.c" /* yacc.c:1646 */ +#line 4740 "y.tab.c" /* yacc.c:1646 */ break; case 310: -#line 1988 "lev_comp.y" /* yacc.c:1646 */ +#line 2064 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_SEL_RNDCOORD); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDCOORD)); } -#line 4672 "y.tab.c" /* yacc.c:1646 */ +#line 4748 "y.tab.c" /* yacc.c:1646 */ break; case 311: -#line 1992 "lev_comp.y" /* yacc.c:1646 */ +#line 2068 "lev_comp.y" /* yacc.c:1646 */ { check_vardef_type(variable_definitions, (yyvsp[0].map), SPOVAR_COORD); vardef_used(variable_definitions, (yyvsp[0].map)); - add_opvars(splev, "v", (yyvsp[0].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[0].map))); Free((yyvsp[0].map)); } -#line 4683 "y.tab.c" /* yacc.c:1646 */ +#line 4759 "y.tab.c" /* yacc.c:1646 */ break; case 312: -#line 1999 "lev_comp.y" /* yacc.c:1646 */ +#line 2075 "lev_comp.y" /* yacc.c:1646 */ { check_vardef_type(variable_definitions, (yyvsp[-3].map), SPOVAR_COORD|SPOVAR_ARRAY); vardef_used(variable_definitions, (yyvsp[-3].map)); - add_opvars(splev, "v", (yyvsp[-3].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[-3].map))); Free((yyvsp[-3].map)); } -#line 4694 "y.tab.c" /* yacc.c:1646 */ +#line 4770 "y.tab.c" /* yacc.c:1646 */ break; case 313: -#line 2008 "lev_comp.y" /* yacc.c:1646 */ +#line 2084 "lev_comp.y" /* yacc.c:1646 */ { if ((yyvsp[-3].i) < 0 || (yyvsp[-1].i) < 0 || (yyvsp[-3].i) >= COLNO || (yyvsp[-1].i) >= ROWNO) lc_error("Coordinates (%li,%li) out of map range!", (yyvsp[-3].i), (yyvsp[-1].i)); (yyval.i) = SP_COORD_PACK((yyvsp[-3].i), (yyvsp[-1].i)); } -#line 4704 "y.tab.c" /* yacc.c:1646 */ +#line 4780 "y.tab.c" /* yacc.c:1646 */ break; case 314: -#line 2014 "lev_comp.y" /* yacc.c:1646 */ +#line 2090 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = SP_COORD_PACK_RANDOM(0); } -#line 4712 "y.tab.c" /* yacc.c:1646 */ +#line 4788 "y.tab.c" /* yacc.c:1646 */ break; case 315: -#line 2018 "lev_comp.y" /* yacc.c:1646 */ +#line 2094 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = SP_COORD_PACK_RANDOM( (yyvsp[-1].i) ); } -#line 4720 "y.tab.c" /* yacc.c:1646 */ +#line 4796 "y.tab.c" /* yacc.c:1646 */ break; case 316: -#line 2024 "lev_comp.y" /* yacc.c:1646 */ +#line 2100 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (yyvsp[0].i); } -#line 4728 "y.tab.c" /* yacc.c:1646 */ +#line 4804 "y.tab.c" /* yacc.c:1646 */ break; case 317: -#line 2028 "lev_comp.y" /* yacc.c:1646 */ +#line 2104 "lev_comp.y" /* yacc.c:1646 */ { if (((yyvsp[-2].i) & (yyvsp[0].i))) lc_warning("Humidity flag used twice."); (yyval.i) = ((yyvsp[-2].i) | (yyvsp[0].i)); } -#line 4738 "y.tab.c" /* yacc.c:1646 */ +#line 4814 "y.tab.c" /* yacc.c:1646 */ break; case 318: -#line 2036 "lev_comp.y" /* yacc.c:1646 */ +#line 2112 "lev_comp.y" /* yacc.c:1646 */ { /* nothing */ } -#line 4746 "y.tab.c" /* yacc.c:1646 */ +#line 4822 "y.tab.c" /* yacc.c:1646 */ break; case 319: -#line 2040 "lev_comp.y" /* yacc.c:1646 */ +#line 2116 "lev_comp.y" /* yacc.c:1646 */ { check_vardef_type(variable_definitions, (yyvsp[0].map), SPOVAR_REGION); vardef_used(variable_definitions, (yyvsp[0].map)); - add_opvars(splev, "v", (yyvsp[0].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[0].map))); Free((yyvsp[0].map)); } -#line 4757 "y.tab.c" /* yacc.c:1646 */ +#line 4833 "y.tab.c" /* yacc.c:1646 */ break; case 320: -#line 2047 "lev_comp.y" /* yacc.c:1646 */ +#line 2123 "lev_comp.y" /* yacc.c:1646 */ { check_vardef_type(variable_definitions, (yyvsp[-3].map), SPOVAR_REGION|SPOVAR_ARRAY); vardef_used(variable_definitions, (yyvsp[-3].map)); - add_opvars(splev, "v", (yyvsp[-3].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[-3].map))); Free((yyvsp[-3].map)); } -#line 4768 "y.tab.c" /* yacc.c:1646 */ +#line 4844 "y.tab.c" /* yacc.c:1646 */ break; case 321: -#line 2056 "lev_comp.y" /* yacc.c:1646 */ +#line 2132 "lev_comp.y" /* yacc.c:1646 */ { long r = SP_REGION_PACK((yyvsp[-7].i), (yyvsp[-5].i), (yyvsp[-3].i), (yyvsp[-1].i)); if ( (yyvsp[-7].i) > (yyvsp[-3].i) || (yyvsp[-5].i) > (yyvsp[-1].i) ) lc_error("Region start > end: (%li,%li,%li,%li)!", (yyvsp[-7].i), (yyvsp[-5].i), (yyvsp[-3].i), (yyvsp[-1].i)); - add_opvars(splev, "r", r); + add_opvars(splev, "r", VA_PASS1(r)); (yyval.i) = r; } -#line 4781 "y.tab.c" /* yacc.c:1646 */ +#line 4857 "y.tab.c" /* yacc.c:1646 */ break; case 322: -#line 2067 "lev_comp.y" /* yacc.c:1646 */ +#line 2143 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "m", (yyvsp[0].i)); + add_opvars(splev, "m", VA_PASS1((yyvsp[0].i))); } -#line 4789 "y.tab.c" /* yacc.c:1646 */ +#line 4865 "y.tab.c" /* yacc.c:1646 */ break; case 323: -#line 2071 "lev_comp.y" /* yacc.c:1646 */ +#line 2147 "lev_comp.y" /* yacc.c:1646 */ { check_vardef_type(variable_definitions, (yyvsp[0].map), SPOVAR_MAPCHAR); vardef_used(variable_definitions, (yyvsp[0].map)); - add_opvars(splev, "v", (yyvsp[0].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[0].map))); Free((yyvsp[0].map)); } -#line 4800 "y.tab.c" /* yacc.c:1646 */ +#line 4876 "y.tab.c" /* yacc.c:1646 */ break; case 324: -#line 2078 "lev_comp.y" /* yacc.c:1646 */ +#line 2154 "lev_comp.y" /* yacc.c:1646 */ { check_vardef_type(variable_definitions, (yyvsp[-3].map), SPOVAR_MAPCHAR|SPOVAR_ARRAY); vardef_used(variable_definitions, (yyvsp[-3].map)); - add_opvars(splev, "v", (yyvsp[-3].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[-3].map))); Free((yyvsp[-3].map)); } -#line 4811 "y.tab.c" /* yacc.c:1646 */ +#line 4887 "y.tab.c" /* yacc.c:1646 */ break; case 325: -#line 2087 "lev_comp.y" /* yacc.c:1646 */ +#line 2163 "lev_comp.y" /* yacc.c:1646 */ { if (what_map_char((char) (yyvsp[0].i)) != INVALID_TYPE) (yyval.i) = SP_MAPCHAR_PACK(what_map_char((char) (yyvsp[0].i)), -2); @@ -4820,11 +4896,11 @@ yyreduce: (yyval.i) = SP_MAPCHAR_PACK(STONE, -2); } } -#line 4824 "y.tab.c" /* yacc.c:1646 */ +#line 4900 "y.tab.c" /* yacc.c:1646 */ break; case 326: -#line 2096 "lev_comp.y" /* yacc.c:1646 */ +#line 2172 "lev_comp.y" /* yacc.c:1646 */ { if (what_map_char((char) (yyvsp[-3].i)) != INVALID_TYPE) (yyval.i) = SP_MAPCHAR_PACK(what_map_char((char) (yyvsp[-3].i)), (yyvsp[-1].i)); @@ -4833,41 +4909,41 @@ yyreduce: (yyval.i) = SP_MAPCHAR_PACK(STONE, (yyvsp[-1].i)); } } -#line 4837 "y.tab.c" /* yacc.c:1646 */ +#line 4913 "y.tab.c" /* yacc.c:1646 */ break; case 327: -#line 2107 "lev_comp.y" /* yacc.c:1646 */ +#line 2183 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "M", (yyvsp[0].i)); + add_opvars(splev, "M", VA_PASS1((yyvsp[0].i))); } -#line 4845 "y.tab.c" /* yacc.c:1646 */ +#line 4921 "y.tab.c" /* yacc.c:1646 */ break; case 328: -#line 2111 "lev_comp.y" /* yacc.c:1646 */ +#line 2187 "lev_comp.y" /* yacc.c:1646 */ { check_vardef_type(variable_definitions, (yyvsp[0].map), SPOVAR_MONST); vardef_used(variable_definitions, (yyvsp[0].map)); - add_opvars(splev, "v", (yyvsp[0].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[0].map))); Free((yyvsp[0].map)); } -#line 4856 "y.tab.c" /* yacc.c:1646 */ +#line 4932 "y.tab.c" /* yacc.c:1646 */ break; case 329: -#line 2118 "lev_comp.y" /* yacc.c:1646 */ +#line 2194 "lev_comp.y" /* yacc.c:1646 */ { check_vardef_type(variable_definitions, (yyvsp[-3].map), SPOVAR_MONST|SPOVAR_ARRAY); vardef_used(variable_definitions, (yyvsp[-3].map)); - add_opvars(splev, "v", (yyvsp[-3].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[-3].map))); Free((yyvsp[-3].map)); } -#line 4867 "y.tab.c" /* yacc.c:1646 */ +#line 4943 "y.tab.c" /* yacc.c:1646 */ break; case 330: -#line 2127 "lev_comp.y" /* yacc.c:1646 */ +#line 2203 "lev_comp.y" /* yacc.c:1646 */ { long m = get_monster_id((yyvsp[0].map), (char)0); if (m == ERR) { @@ -4876,11 +4952,11 @@ yyreduce: } else (yyval.i) = SP_MONST_PACK(m, def_monsyms[(int)mons[m].mlet].sym); } -#line 4880 "y.tab.c" /* yacc.c:1646 */ +#line 4956 "y.tab.c" /* yacc.c:1646 */ break; case 331: -#line 2136 "lev_comp.y" /* yacc.c:1646 */ +#line 2212 "lev_comp.y" /* yacc.c:1646 */ { if (check_monster_char((char) (yyvsp[0].i))) (yyval.i) = SP_MONST_PACK(-1, (yyvsp[0].i)); @@ -4889,11 +4965,11 @@ yyreduce: (yyval.i) = -1; } } -#line 4893 "y.tab.c" /* yacc.c:1646 */ +#line 4969 "y.tab.c" /* yacc.c:1646 */ break; case 332: -#line 2145 "lev_comp.y" /* yacc.c:1646 */ +#line 2221 "lev_comp.y" /* yacc.c:1646 */ { long m = get_monster_id((yyvsp[-1].map), (char) (yyvsp[-3].i)); if (m == ERR) { @@ -4902,49 +4978,49 @@ yyreduce: } else (yyval.i) = SP_MONST_PACK(m, (yyvsp[-3].i)); } -#line 4906 "y.tab.c" /* yacc.c:1646 */ +#line 4982 "y.tab.c" /* yacc.c:1646 */ break; case 333: -#line 2154 "lev_comp.y" /* yacc.c:1646 */ +#line 2230 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = -1; } -#line 4914 "y.tab.c" /* yacc.c:1646 */ +#line 4990 "y.tab.c" /* yacc.c:1646 */ break; case 334: -#line 2160 "lev_comp.y" /* yacc.c:1646 */ +#line 2236 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "O", (yyvsp[0].i)); + add_opvars(splev, "O", VA_PASS1((yyvsp[0].i))); } -#line 4922 "y.tab.c" /* yacc.c:1646 */ +#line 4998 "y.tab.c" /* yacc.c:1646 */ break; case 335: -#line 2164 "lev_comp.y" /* yacc.c:1646 */ +#line 2240 "lev_comp.y" /* yacc.c:1646 */ { check_vardef_type(variable_definitions, (yyvsp[0].map), SPOVAR_OBJ); vardef_used(variable_definitions, (yyvsp[0].map)); - add_opvars(splev, "v", (yyvsp[0].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[0].map))); Free((yyvsp[0].map)); } -#line 4933 "y.tab.c" /* yacc.c:1646 */ +#line 5009 "y.tab.c" /* yacc.c:1646 */ break; case 336: -#line 2171 "lev_comp.y" /* yacc.c:1646 */ +#line 2247 "lev_comp.y" /* yacc.c:1646 */ { check_vardef_type(variable_definitions, (yyvsp[-3].map), SPOVAR_OBJ|SPOVAR_ARRAY); vardef_used(variable_definitions, (yyvsp[-3].map)); - add_opvars(splev, "v", (yyvsp[-3].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[-3].map))); Free((yyvsp[-3].map)); } -#line 4944 "y.tab.c" /* yacc.c:1646 */ +#line 5020 "y.tab.c" /* yacc.c:1646 */ break; case 337: -#line 2180 "lev_comp.y" /* yacc.c:1646 */ +#line 2256 "lev_comp.y" /* yacc.c:1646 */ { long m = get_object_id((yyvsp[0].map), (char)0); if (m == ERR) { @@ -4954,11 +5030,11 @@ yyreduce: (yyval.i) = SP_OBJ_PACK(m, 1); /* obj class != 0 to force generation of a specific item */ } -#line 4958 "y.tab.c" /* yacc.c:1646 */ +#line 5034 "y.tab.c" /* yacc.c:1646 */ break; case 338: -#line 2190 "lev_comp.y" /* yacc.c:1646 */ +#line 2266 "lev_comp.y" /* yacc.c:1646 */ { if (check_object_char((char) (yyvsp[0].i))) (yyval.i) = SP_OBJ_PACK(-1, (yyvsp[0].i)); @@ -4967,11 +5043,11 @@ yyreduce: (yyval.i) = -1; } } -#line 4971 "y.tab.c" /* yacc.c:1646 */ +#line 5047 "y.tab.c" /* yacc.c:1646 */ break; case 339: -#line 2199 "lev_comp.y" /* yacc.c:1646 */ +#line 2275 "lev_comp.y" /* yacc.c:1646 */ { long m = get_object_id((yyvsp[-1].map), (char) (yyvsp[-3].i)); if (m == ERR) { @@ -4980,188 +5056,207 @@ yyreduce: } else (yyval.i) = SP_OBJ_PACK(m, (yyvsp[-3].i)); } -#line 4984 "y.tab.c" /* yacc.c:1646 */ - break; - - case 340: -#line 2208 "lev_comp.y" /* yacc.c:1646 */ - { - (yyval.i) = -1; - } -#line 4992 "y.tab.c" /* yacc.c:1646 */ - break; - - case 341: -#line 2214 "lev_comp.y" /* yacc.c:1646 */ - { } -#line 4998 "y.tab.c" /* yacc.c:1646 */ - break; - - case 342: -#line 2216 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "o", SPO_MATH_ADD); - } -#line 5006 "y.tab.c" /* yacc.c:1646 */ - break; - - case 343: -#line 2221 "lev_comp.y" /* yacc.c:1646 */ - { add_opvars(splev, "i", (yyvsp[0].i) ); } -#line 5012 "y.tab.c" /* yacc.c:1646 */ - break; - - case 344: -#line 2222 "lev_comp.y" /* yacc.c:1646 */ - { is_inconstant_number = 1; } -#line 5018 "y.tab.c" /* yacc.c:1646 */ - break; - - case 345: -#line 2223 "lev_comp.y" /* yacc.c:1646 */ - { add_opvars(splev, "i", (yyvsp[-1].i) ); } -#line 5024 "y.tab.c" /* yacc.c:1646 */ - break; - - case 346: -#line 2225 "lev_comp.y" /* yacc.c:1646 */ - { - check_vardef_type(variable_definitions, (yyvsp[0].map), SPOVAR_INT); - vardef_used(variable_definitions, (yyvsp[0].map)); - add_opvars(splev, "v", (yyvsp[0].map)); - Free((yyvsp[0].map)); - is_inconstant_number = 1; - } -#line 5036 "y.tab.c" /* yacc.c:1646 */ - break; - - case 347: -#line 2233 "lev_comp.y" /* yacc.c:1646 */ - { - check_vardef_type(variable_definitions, (yyvsp[-3].map), SPOVAR_INT|SPOVAR_ARRAY); - vardef_used(variable_definitions, (yyvsp[-3].map)); - add_opvars(splev, "v", (yyvsp[-3].map)); - Free((yyvsp[-3].map)); - is_inconstant_number = 1; - } -#line 5048 "y.tab.c" /* yacc.c:1646 */ - break; - - case 348: -#line 2240 "lev_comp.y" /* yacc.c:1646 */ - { add_opvars(splev, "o", SPO_MATH_ADD); } -#line 5054 "y.tab.c" /* yacc.c:1646 */ - break; - - case 349: -#line 2241 "lev_comp.y" /* yacc.c:1646 */ - { add_opvars(splev, "o", SPO_MATH_SUB); } #line 5060 "y.tab.c" /* yacc.c:1646 */ break; + case 340: +#line 2284 "lev_comp.y" /* yacc.c:1646 */ + { + (yyval.i) = -1; + } +#line 5068 "y.tab.c" /* yacc.c:1646 */ + break; + + case 341: +#line 2290 "lev_comp.y" /* yacc.c:1646 */ + { } +#line 5074 "y.tab.c" /* yacc.c:1646 */ + break; + + case 342: +#line 2292 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "o", VA_PASS1(SPO_MATH_ADD)); + } +#line 5082 "y.tab.c" /* yacc.c:1646 */ + break; + + case 343: +#line 2298 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "i", VA_PASS1((yyvsp[0].i))); + } +#line 5090 "y.tab.c" /* yacc.c:1646 */ + break; + + case 344: +#line 2302 "lev_comp.y" /* yacc.c:1646 */ + { + is_inconstant_number = 1; + } +#line 5098 "y.tab.c" /* yacc.c:1646 */ + break; + + case 345: +#line 2306 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "i", VA_PASS1((yyvsp[-1].i))); + } +#line 5106 "y.tab.c" /* yacc.c:1646 */ + break; + + case 346: +#line 2310 "lev_comp.y" /* yacc.c:1646 */ + { + check_vardef_type(variable_definitions, (yyvsp[0].map), SPOVAR_INT); + vardef_used(variable_definitions, (yyvsp[0].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[0].map))); + Free((yyvsp[0].map)); + is_inconstant_number = 1; + } +#line 5118 "y.tab.c" /* yacc.c:1646 */ + break; + + case 347: +#line 2318 "lev_comp.y" /* yacc.c:1646 */ + { + check_vardef_type(variable_definitions, + (yyvsp[-3].map), SPOVAR_INT|SPOVAR_ARRAY); + vardef_used(variable_definitions, (yyvsp[-3].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[-3].map))); + Free((yyvsp[-3].map)); + is_inconstant_number = 1; + } +#line 5131 "y.tab.c" /* yacc.c:1646 */ + break; + + case 348: +#line 2327 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "o", VA_PASS1(SPO_MATH_ADD)); + } +#line 5139 "y.tab.c" /* yacc.c:1646 */ + break; + + case 349: +#line 2331 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "o", VA_PASS1(SPO_MATH_SUB)); + } +#line 5147 "y.tab.c" /* yacc.c:1646 */ + break; + case 350: -#line 2242 "lev_comp.y" /* yacc.c:1646 */ - { add_opvars(splev, "o", SPO_MATH_MUL); } -#line 5066 "y.tab.c" /* yacc.c:1646 */ +#line 2335 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "o", VA_PASS1(SPO_MATH_MUL)); + } +#line 5155 "y.tab.c" /* yacc.c:1646 */ break; case 351: -#line 2243 "lev_comp.y" /* yacc.c:1646 */ - { add_opvars(splev, "o", SPO_MATH_DIV); } -#line 5072 "y.tab.c" /* yacc.c:1646 */ +#line 2339 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "o", VA_PASS1(SPO_MATH_DIV)); + } +#line 5163 "y.tab.c" /* yacc.c:1646 */ break; case 352: -#line 2244 "lev_comp.y" /* yacc.c:1646 */ - { add_opvars(splev, "o", SPO_MATH_MOD); } -#line 5078 "y.tab.c" /* yacc.c:1646 */ +#line 2343 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "o", VA_PASS1(SPO_MATH_MOD)); + } +#line 5171 "y.tab.c" /* yacc.c:1646 */ break; case 353: -#line 2245 "lev_comp.y" /* yacc.c:1646 */ +#line 2346 "lev_comp.y" /* yacc.c:1646 */ { } -#line 5084 "y.tab.c" /* yacc.c:1646 */ +#line 5177 "y.tab.c" /* yacc.c:1646 */ break; case 354: -#line 2249 "lev_comp.y" /* yacc.c:1646 */ +#line 2350 "lev_comp.y" /* yacc.c:1646 */ { - if (!strcmp("int", (yyvsp[0].map)) || !strcmp("integer", (yyvsp[0].map))) { - (yyval.i) = (int)'i'; - } else lc_error("Unknown function parameter type '%s'", (yyvsp[0].map)); - } -#line 5094 "y.tab.c" /* yacc.c:1646 */ + if (!strcmp("int", (yyvsp[0].map)) || !strcmp("integer", (yyvsp[0].map))) { + (yyval.i) = (int)'i'; + } else + lc_error("Unknown function parameter type '%s'", (yyvsp[0].map)); + } +#line 5188 "y.tab.c" /* yacc.c:1646 */ break; case 355: -#line 2255 "lev_comp.y" /* yacc.c:1646 */ +#line 2357 "lev_comp.y" /* yacc.c:1646 */ { - if (!strcmp("str", (yyvsp[0].map)) || !strcmp("string", (yyvsp[0].map))) { - (yyval.i) = (int)'s'; - } else lc_error("Unknown function parameter type '%s'", (yyvsp[0].map)); - } -#line 5104 "y.tab.c" /* yacc.c:1646 */ + if (!strcmp("str", (yyvsp[0].map)) || !strcmp("string", (yyvsp[0].map))) { + (yyval.i) = (int)'s'; + } else + lc_error("Unknown function parameter type '%s'", (yyvsp[0].map)); + } +#line 5199 "y.tab.c" /* yacc.c:1646 */ break; case 356: -#line 2263 "lev_comp.y" /* yacc.c:1646 */ +#line 2366 "lev_comp.y" /* yacc.c:1646 */ { - struct lc_funcdefs_parm *tmp = New(struct lc_funcdefs_parm); + struct lc_funcdefs_parm *tmp = New(struct lc_funcdefs_parm); - if (!curr_function) - lc_error("Function parameters outside function definition."); - else if (!tmp) - lc_error("Could not alloc function params."); - else { - tmp->name = strdup((yyvsp[-2].map)); - tmp->parmtype = (char) (yyvsp[0].i); - tmp->next = curr_function->params; - curr_function->params = tmp; - curr_function->n_params++; - { - long vt; - switch (tmp->parmtype) { - case 'i': vt = SPOVAR_INT; break; - case 's': vt = SPOVAR_STRING; break; - default: lc_error("Unknown func param conversion."); break; - } - variable_definitions = add_vardef_type(variable_definitions, (yyvsp[-2].map), vt); - } - } - Free((yyvsp[-2].map)); + if (!curr_function) { + lc_error("Function parameters outside function definition."); + } else if (!tmp) { + lc_error("Could not alloc function params."); + } else { + long vt; + tmp->name = strdup((yyvsp[-2].map)); + tmp->parmtype = (char) (yyvsp[0].i); + tmp->next = curr_function->params; + curr_function->params = tmp; + curr_function->n_params++; + switch (tmp->parmtype) { + case 'i': vt = SPOVAR_INT; break; + case 's': vt = SPOVAR_STRING; break; + default: lc_error("Unknown func param conversion."); break; } -#line 5134 "y.tab.c" /* yacc.c:1646 */ + variable_definitions = add_vardef_type( + variable_definitions, + (yyvsp[-2].map), vt); + } + Free((yyvsp[-2].map)); + } +#line 5229 "y.tab.c" /* yacc.c:1646 */ break; case 361: -#line 2300 "lev_comp.y" /* yacc.c:1646 */ +#line 2402 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (int)'i'; } -#line 5142 "y.tab.c" /* yacc.c:1646 */ +#line 5237 "y.tab.c" /* yacc.c:1646 */ break; case 362: -#line 2304 "lev_comp.y" /* yacc.c:1646 */ +#line 2406 "lev_comp.y" /* yacc.c:1646 */ { (yyval.i) = (int)'s'; } -#line 5150 "y.tab.c" /* yacc.c:1646 */ +#line 5245 "y.tab.c" /* yacc.c:1646 */ break; case 363: -#line 2311 "lev_comp.y" /* yacc.c:1646 */ +#line 2413 "lev_comp.y" /* yacc.c:1646 */ { char tmpbuf[2]; tmpbuf[0] = (char) (yyvsp[0].i); tmpbuf[1] = '\0'; (yyval.map) = strdup(tmpbuf); } -#line 5161 "y.tab.c" /* yacc.c:1646 */ +#line 5256 "y.tab.c" /* yacc.c:1646 */ break; case 364: -#line 2318 "lev_comp.y" /* yacc.c:1646 */ +#line 2420 "lev_comp.y" /* yacc.c:1646 */ { long len = strlen( (yyvsp[-2].map) ); char *tmp = (char *)alloc(len + 2); @@ -5169,249 +5264,256 @@ yyreduce: Free( (yyvsp[-2].map) ); (yyval.map) = tmp; } -#line 5173 "y.tab.c" /* yacc.c:1646 */ +#line 5268 "y.tab.c" /* yacc.c:1646 */ break; case 365: -#line 2328 "lev_comp.y" /* yacc.c:1646 */ +#line 2430 "lev_comp.y" /* yacc.c:1646 */ { (yyval.map) = strdup(""); } -#line 5181 "y.tab.c" /* yacc.c:1646 */ +#line 5276 "y.tab.c" /* yacc.c:1646 */ break; case 366: -#line 2332 "lev_comp.y" /* yacc.c:1646 */ +#line 2434 "lev_comp.y" /* yacc.c:1646 */ { char *tmp = strdup( (yyvsp[0].map) ); Free( (yyvsp[0].map) ); (yyval.map) = tmp; } -#line 5191 "y.tab.c" /* yacc.c:1646 */ +#line 5286 "y.tab.c" /* yacc.c:1646 */ break; case 367: -#line 2340 "lev_comp.y" /* yacc.c:1646 */ +#line 2442 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_SEL_POINT); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_POINT)); } -#line 5199 "y.tab.c" /* yacc.c:1646 */ +#line 5294 "y.tab.c" /* yacc.c:1646 */ break; case 368: -#line 2344 "lev_comp.y" /* yacc.c:1646 */ +#line 2446 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_SEL_RECT); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_RECT)); } -#line 5207 "y.tab.c" /* yacc.c:1646 */ +#line 5302 "y.tab.c" /* yacc.c:1646 */ break; case 369: -#line 2348 "lev_comp.y" /* yacc.c:1646 */ +#line 2450 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_SEL_FILLRECT); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_FILLRECT)); } -#line 5215 "y.tab.c" /* yacc.c:1646 */ +#line 5310 "y.tab.c" /* yacc.c:1646 */ break; case 370: -#line 2352 "lev_comp.y" /* yacc.c:1646 */ +#line 2454 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_SEL_LINE); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_LINE)); } -#line 5223 "y.tab.c" /* yacc.c:1646 */ +#line 5318 "y.tab.c" /* yacc.c:1646 */ break; case 371: -#line 2356 "lev_comp.y" /* yacc.c:1646 */ +#line 2458 "lev_comp.y" /* yacc.c:1646 */ { /* randline (x1,y1),(x2,y2), roughness */ - add_opvars(splev, "o", SPO_SEL_RNDLINE); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDLINE)); } -#line 5232 "y.tab.c" /* yacc.c:1646 */ +#line 5327 "y.tab.c" /* yacc.c:1646 */ break; case 372: -#line 2361 "lev_comp.y" /* yacc.c:1646 */ +#line 2463 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", W_ANY, SPO_SEL_GROW); + add_opvars(splev, "io", VA_PASS2(W_ANY, SPO_SEL_GROW)); } -#line 5240 "y.tab.c" /* yacc.c:1646 */ +#line 5335 "y.tab.c" /* yacc.c:1646 */ break; case 373: -#line 2365 "lev_comp.y" /* yacc.c:1646 */ +#line 2467 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", (yyvsp[-3].i), SPO_SEL_GROW); + add_opvars(splev, "io", VA_PASS2((yyvsp[-3].i), SPO_SEL_GROW)); } -#line 5248 "y.tab.c" /* yacc.c:1646 */ +#line 5343 "y.tab.c" /* yacc.c:1646 */ break; case 374: -#line 2369 "lev_comp.y" /* yacc.c:1646 */ +#line 2471 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "iio", (yyvsp[-3].i), SPOFILTER_PERCENT, SPO_SEL_FILTER); + add_opvars(splev, "iio", + VA_PASS3((yyvsp[-3].i), SPOFILTER_PERCENT, SPO_SEL_FILTER)); } -#line 5256 "y.tab.c" /* yacc.c:1646 */ +#line 5352 "y.tab.c" /* yacc.c:1646 */ break; case 375: -#line 2373 "lev_comp.y" /* yacc.c:1646 */ +#line 2476 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", SPOFILTER_SELECTION, SPO_SEL_FILTER); + add_opvars(splev, "io", + VA_PASS2(SPOFILTER_SELECTION, SPO_SEL_FILTER)); } -#line 5264 "y.tab.c" /* yacc.c:1646 */ +#line 5361 "y.tab.c" /* yacc.c:1646 */ break; case 376: -#line 2377 "lev_comp.y" /* yacc.c:1646 */ +#line 2481 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "io", SPOFILTER_MAPCHAR, SPO_SEL_FILTER); + add_opvars(splev, "io", + VA_PASS2(SPOFILTER_MAPCHAR, SPO_SEL_FILTER)); } -#line 5272 "y.tab.c" /* yacc.c:1646 */ +#line 5370 "y.tab.c" /* yacc.c:1646 */ break; case 377: -#line 2381 "lev_comp.y" /* yacc.c:1646 */ +#line 2486 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "o", SPO_SEL_FLOOD); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_FLOOD)); } -#line 5280 "y.tab.c" /* yacc.c:1646 */ +#line 5378 "y.tab.c" /* yacc.c:1646 */ break; case 378: -#line 2385 "lev_comp.y" /* yacc.c:1646 */ +#line 2490 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "oio", SPO_COPY, 1, SPO_SEL_ELLIPSE); - } -#line 5288 "y.tab.c" /* yacc.c:1646 */ - break; - - case 379: -#line 2389 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "oio", SPO_COPY, (yyvsp[-1].i), SPO_SEL_ELLIPSE); - } -#line 5296 "y.tab.c" /* yacc.c:1646 */ - break; - - case 380: -#line 2393 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "io", 1, SPO_SEL_ELLIPSE); - } -#line 5304 "y.tab.c" /* yacc.c:1646 */ - break; - - case 381: -#line 2397 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "io", (yyvsp[-1].i), SPO_SEL_ELLIPSE); - } -#line 5312 "y.tab.c" /* yacc.c:1646 */ - break; - - case 382: -#line 2401 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "iio", (yyvsp[-5].i), (yyvsp[-11].i), SPO_SEL_GRADIENT); - } -#line 5320 "y.tab.c" /* yacc.c:1646 */ - break; - - case 383: -#line 2405 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "o", SPO_SEL_COMPLEMENT); - } -#line 5328 "y.tab.c" /* yacc.c:1646 */ - break; - - case 384: -#line 2409 "lev_comp.y" /* yacc.c:1646 */ - { - check_vardef_type(variable_definitions, (yyvsp[0].map), SPOVAR_SEL); - vardef_used(variable_definitions, (yyvsp[0].map)); - add_opvars(splev, "v", (yyvsp[0].map)); - Free((yyvsp[0].map)); - } -#line 5339 "y.tab.c" /* yacc.c:1646 */ - break; - - case 385: -#line 2416 "lev_comp.y" /* yacc.c:1646 */ - { - /* nothing */ - } -#line 5347 "y.tab.c" /* yacc.c:1646 */ - break; - - case 386: -#line 2422 "lev_comp.y" /* yacc.c:1646 */ - { - /* nothing */ - } -#line 5355 "y.tab.c" /* yacc.c:1646 */ - break; - - case 387: -#line 2426 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "o", SPO_SEL_ADD); - } -#line 5363 "y.tab.c" /* yacc.c:1646 */ - break; - - case 388: -#line 2432 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "iio", (yyvsp[0].dice).num, (yyvsp[0].dice).die, SPO_DICE); - } -#line 5371 "y.tab.c" /* yacc.c:1646 */ - break; - - case 392: -#line 2443 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "i", (yyvsp[0].i) ); - } -#line 5379 "y.tab.c" /* yacc.c:1646 */ - break; - - case 393: -#line 2447 "lev_comp.y" /* yacc.c:1646 */ - { - add_opvars(splev, "i", (yyvsp[0].i) ); + add_opvars(splev, "oio", + VA_PASS3(SPO_COPY, 1, SPO_SEL_ELLIPSE)); } #line 5387 "y.tab.c" /* yacc.c:1646 */ break; - case 394: -#line 2451 "lev_comp.y" /* yacc.c:1646 */ + case 379: +#line 2495 "lev_comp.y" /* yacc.c:1646 */ { - add_opvars(splev, "i", (yyvsp[0].i) ); + add_opvars(splev, "oio", + VA_PASS3(SPO_COPY, (yyvsp[-1].i), SPO_SEL_ELLIPSE)); } -#line 5395 "y.tab.c" /* yacc.c:1646 */ +#line 5396 "y.tab.c" /* yacc.c:1646 */ break; - case 395: -#line 2455 "lev_comp.y" /* yacc.c:1646 */ + case 380: +#line 2500 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "io", VA_PASS2(1, SPO_SEL_ELLIPSE)); + } +#line 5404 "y.tab.c" /* yacc.c:1646 */ + break; + + case 381: +#line 2504 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "io", VA_PASS2((yyvsp[-1].i), SPO_SEL_ELLIPSE)); + } +#line 5412 "y.tab.c" /* yacc.c:1646 */ + break; + + case 382: +#line 2508 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "iio", + VA_PASS3((yyvsp[-5].i), (yyvsp[-11].i), SPO_SEL_GRADIENT)); + } +#line 5421 "y.tab.c" /* yacc.c:1646 */ + break; + + case 383: +#line 2513 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "o", VA_PASS1(SPO_SEL_COMPLEMENT)); + } +#line 5429 "y.tab.c" /* yacc.c:1646 */ + break; + + case 384: +#line 2517 "lev_comp.y" /* yacc.c:1646 */ + { + check_vardef_type(variable_definitions, (yyvsp[0].map), SPOVAR_SEL); + vardef_used(variable_definitions, (yyvsp[0].map)); + add_opvars(splev, "v", VA_PASS1((yyvsp[0].map))); + Free((yyvsp[0].map)); + } +#line 5440 "y.tab.c" /* yacc.c:1646 */ + break; + + case 385: +#line 2524 "lev_comp.y" /* yacc.c:1646 */ { /* nothing */ } -#line 5403 "y.tab.c" /* yacc.c:1646 */ +#line 5448 "y.tab.c" /* yacc.c:1646 */ + break; + + case 386: +#line 2530 "lev_comp.y" /* yacc.c:1646 */ + { + /* nothing */ + } +#line 5456 "y.tab.c" /* yacc.c:1646 */ + break; + + case 387: +#line 2534 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "o", VA_PASS1(SPO_SEL_ADD)); + } +#line 5464 "y.tab.c" /* yacc.c:1646 */ + break; + + case 388: +#line 2540 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "iio", + VA_PASS3((yyvsp[0].dice).num, (yyvsp[0].dice).die, SPO_DICE)); + } +#line 5473 "y.tab.c" /* yacc.c:1646 */ + break; + + case 392: +#line 2552 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "i", VA_PASS1((yyvsp[0].i))); + } +#line 5481 "y.tab.c" /* yacc.c:1646 */ + break; + + case 393: +#line 2556 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "i", VA_PASS1((yyvsp[0].i))); + } +#line 5489 "y.tab.c" /* yacc.c:1646 */ + break; + + case 394: +#line 2560 "lev_comp.y" /* yacc.c:1646 */ + { + add_opvars(splev, "i", VA_PASS1((yyvsp[0].i))); + } +#line 5497 "y.tab.c" /* yacc.c:1646 */ + break; + + case 395: +#line 2564 "lev_comp.y" /* yacc.c:1646 */ + { + /* nothing */ + } +#line 5505 "y.tab.c" /* yacc.c:1646 */ break; case 404: -#line 2477 "lev_comp.y" /* yacc.c:1646 */ +#line 2586 "lev_comp.y" /* yacc.c:1646 */ { (yyval.lregn) = (yyvsp[0].lregn); } -#line 5411 "y.tab.c" /* yacc.c:1646 */ +#line 5513 "y.tab.c" /* yacc.c:1646 */ break; case 405: -#line 2481 "lev_comp.y" /* yacc.c:1646 */ +#line 2590 "lev_comp.y" /* yacc.c:1646 */ { if ((yyvsp[-7].i) <= 0 || (yyvsp[-7].i) >= COLNO) lc_error("Region (%li,%li,%li,%li) out of level range (x1)!", (yyvsp[-7].i), (yyvsp[-5].i), (yyvsp[-3].i), (yyvsp[-1].i)); @@ -5427,11 +5529,11 @@ yyreduce: (yyval.lregn).y2 = (yyvsp[-1].i); (yyval.lregn).area = 1; } -#line 5431 "y.tab.c" /* yacc.c:1646 */ +#line 5533 "y.tab.c" /* yacc.c:1646 */ break; case 406: -#line 2499 "lev_comp.y" /* yacc.c:1646 */ +#line 2608 "lev_comp.y" /* yacc.c:1646 */ { /* This series of if statements is a hack for MSC 5.1. It seems that its tiny little brain cannot compile if these are all one big if statement. */ @@ -5449,11 +5551,11 @@ yyreduce: (yyval.lregn).x2 = (yyvsp[-3].i); (yyval.lregn).y2 = (yyvsp[-1].i); } -#line 5453 "y.tab.c" /* yacc.c:1646 */ +#line 5555 "y.tab.c" /* yacc.c:1646 */ break; -#line 5457 "y.tab.c" /* yacc.c:1646 */ +#line 5559 "y.tab.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -5681,7 +5783,7 @@ yyreturn: #endif return yyresult; } -#line 2519 "lev_comp.y" /* yacc.c:1906 */ +#line 2628 "lev_comp.y" /* yacc.c:1906 */ /*lev_comp.y*/ diff --git a/sys/share/pcmain.c b/sys/share/pcmain.c index 0737182c3..412b6f9eb 100644 --- a/sys/share/pcmain.c +++ b/sys/share/pcmain.c @@ -432,7 +432,7 @@ char *argv[]; hackpid = 1; #endif write(fd, (genericptr_t) &hackpid, sizeof(hackpid)); - close(fd); + nhclose(fd); } #ifdef MFLOPPY level_info[0].where = ACTIVE; diff --git a/sys/share/pcsys.c b/sys/share/pcsys.c index 16d36bbb7..6aea59998 100644 --- a/sys/share/pcsys.c +++ b/sys/share/pcsys.c @@ -282,7 +282,7 @@ int start; if (sysflags.asksavedisk) { /* Don't prompt if you can find the save file */ if ((fd = open_savefile()) >= 0) { - (void) close(fd); + (void) nhclose(fd); return 1; } clear_nhwindow(WIN_MESSAGE); @@ -335,7 +335,7 @@ comspec_exists() if ((comspec = getcomspec())) if ((fd = open(comspec, O_RDONLY)) >= 0) { - (void) close(fd); + (void) nhclose(fd); return TRUE; } return FALSE; diff --git a/sys/share/pcunix.c b/sys/share/pcunix.c index 24316aac2..e5ce95e89 100644 --- a/sys/share/pcunix.c +++ b/sys/share/pcunix.c @@ -150,7 +150,7 @@ getlock() error("Cannot open %s", fq_lock); } - (void) close(fd); + (void) nhclose(fd); if(iflags.window_inited) { # ifdef SELF_RECOVER @@ -248,7 +248,7 @@ gotlock: # endif error("cannot write lock (%s)", fq_lock); } - if(close(fd) == -1) { + if(nhclose(fd) == -1) { # if defined(CHDIR) && !defined(NOCWD_ASSUMPTIONS) chdirx(orgdir, 0); # endif diff --git a/sys/unix/Makefile.top b/sys/unix/Makefile.top index 77cd28fa1..943aba80a 100644 --- a/sys/unix/Makefile.top +++ b/sys/unix/Makefile.top @@ -79,7 +79,7 @@ VARDAT = $(VARDATD) $(VARDATND) DATHELP = help hh cmdhelp history opthelp wizhelp -SPEC_LEVS = asmodeus.lev baalz.lev bigrm-?.lev castle.lev fakewiz?.lev \ +SPEC_LEVS = asmodeus.lev baalz.lev bigrm-*.lev castle.lev fakewiz?.lev \ juiblex.lev knox.lev medusa-?.lev minend-?.lev minefill.lev \ minetn-?.lev oracle.lev orcus.lev sanctum.lev soko?-?.lev \ tower?.lev valley.lev wizard?.lev \ diff --git a/util/lev_comp.l b/util/lev_comp.l index bba52c270..e649873c9 100644 --- a/util/lev_comp.l +++ b/util/lev_comp.l @@ -1,5 +1,5 @@ %{ -/* NetHack 3.5 lev_comp.l $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ +/* NetHack 3.5 lev_comp.l $NHDT-Date: 1428240296 2015/04/05 13:24:56 $ $NHDT-Branch: master $:$NHDT-Revision: 1.13 $ */ /* NetHack 3.5 lev_comp.l $Date: 2009/05/06 10:54:31 $ $Revision: 1.9 $ */ /* SCCS Id: @(#)lev_lex.c 3.5 2002/03/27 */ /* Copyright (c) 1989 by Jean-Christophe Collet */ @@ -69,6 +69,7 @@ void FDECL(init_yyout, (FILE *)); long NDECL(handle_varstring_check); long FDECL(corefunc_str_check, (char *, long)); +extern void VDECL(lc_error, (const char *, ...)); extern struct lc_vardefs *FDECL(vardef_defined,(struct lc_vardefs *,char *, int)); extern struct lc_vardefs *variable_definitions; @@ -111,7 +112,7 @@ FILE *orig_yyin = NULL; map_cnt = 0; return MAP_ID; } -[-|}{+xABCISHKMPLWTtFYU\\#. 0123456789]*\r?\n { +[-|}{+xABCISHKPLWTF\\#. 0123456789]*\r?\n { int len = yyleng; savetoken(yytext); /* convert \r\n to \n */ @@ -295,6 +296,7 @@ shroud { savetoken(yytext); yylval.i=SHROUD; return FLAG_TYPE; } graveyard { savetoken(yytext); yylval.i=GRAVEYARD; return FLAG_TYPE; } icedpools { savetoken(yytext); yylval.i=ICEDPOOLS; return FLAG_TYPE; } solidify { savetoken(yytext); yylval.i=SOLIDIFY; return FLAG_TYPE; } +corrmaze { savetoken(yytext); yylval.i=CORRMAZE; return FLAG_TYPE; } [0-9]+d[0-9]+ { char *p = strchr(yytext, 'd'); savetoken(yytext); if (p) { diff --git a/util/lev_comp.y b/util/lev_comp.y index fab3a9450..0a153bef2 100644 --- a/util/lev_comp.y +++ b/util/lev_comp.y @@ -1,5 +1,5 @@ %{ -/* NetHack 3.5 lev_comp.y $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ +/* NetHack 3.5 lev_comp.y $NHDT-Date: 1428655167 2015/04/10 08:39:27 $ $NHDT-Branch: master $:$NHDT-Revision: 1.11 $ */ /* NetHack 3.5 lev_comp.y $Date: 2009/05/06 10:54:31 $ $Revision: 1.8 $ */ /* SCCS Id: @(#)lev_yacc.c 3.5 2007/08/01 */ /* Copyright (c) 1989 by Jean-Christophe Collet */ @@ -23,6 +23,7 @@ #pragma alloca /* keep leading space! */ #endif +#define SPEC_LEV /* for USE_OLDARGS (sp_lev.h) */ #include "hack.h" #include "sp_lev.h" @@ -311,12 +312,17 @@ level_def : LEVEL_ID ':' STRING { start_level_def(&splev, $3); if ($5 == -1) { - add_opvars(splev, "iiiiiiiio", LVLINIT_MAZEGRID,HWALL,0,0, 0,0,0,0, SPO_INITLEVEL); + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_MAZEGRID,HWALL,0,0, + 0,0,0,0, SPO_INITLEVEL)); } else { long bg = what_map_char((char) $5); - add_opvars(splev, "iiiiiiiio", LVLINIT_SOLIDFILL, bg, 0,0, 0,0,0,0, SPO_INITLEVEL); + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_SOLIDFILL, bg, 0,0, + 0,0,0,0, SPO_INITLEVEL)); } - add_opvars(splev, "io", MAZELEVEL, SPO_LEVEL_FLAGS); + add_opvars(splev, "io", + VA_PASS2(MAZELEVEL, SPO_LEVEL_FLAGS)); max_x_map = COLNO-1; max_y_map = ROWNO; $$ = $3; @@ -338,7 +344,8 @@ lev_init : LEV_INIT_ID ':' SOLID_FILL_ID ',' terrain_type long filling = $5.ter; if (filling == INVALID_TYPE || filling >= MAX_TYPE) lc_error("INIT_MAP: Invalid fill char type."); - add_opvars(splev, "iiiiiiiio", LVLINIT_SOLIDFILL,filling,0,(long)$5.lit, 0,0,0,0, SPO_INITLEVEL); + add_opvars(splev, "iiiiiiiio", + LVLINIT_SOLIDFILL,filling,0,(long)$5.lit, 0,0,0,0, SPO_INITLEVEL); max_x_map = COLNO-1; max_y_map = ROWNO; } @@ -347,13 +354,17 @@ lev_init : LEV_INIT_ID ':' SOLID_FILL_ID ',' terrain_type long filling = what_map_char((char) $5); if (filling == INVALID_TYPE || filling >= MAX_TYPE) lc_error("INIT_MAP: Invalid fill char type."); - add_opvars(splev, "iiiiiiiio", LVLINIT_MAZEGRID,filling,0,0, 0,0,0,0, SPO_INITLEVEL); + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_MAZEGRID,filling,0,0, + 0,0,0,0, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; } | LEV_INIT_ID ':' ROGUELEV_ID { - add_opvars(splev, "iiiiiiiio", LVLINIT_ROGUE,0,0,0,0,0,0,0, SPO_INITLEVEL); + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_ROGUE,0,0,0, + 0,0,0,0, SPO_INITLEVEL)); } | LEV_INIT_ID ':' MINES_ID ',' CHAR ',' CHAR ',' BOOLEAN ',' BOOLEAN ',' light_state ',' walled opt_fillchar { @@ -374,7 +385,10 @@ lev_init : LEV_INIT_ID ':' SOLID_FILL_ID ',' terrain_type if (filling == INVALID_TYPE) lc_error("INIT_MAP: Invalid fill char type."); - add_opvars(splev, "iiiiiiiio", LVLINIT_MINES,filling,walled,lit, joined,smoothed,bg,fg, SPO_INITLEVEL); + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_MINES,filling,walled,lit, + joined,smoothed,bg,fg, + SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; } @@ -392,7 +406,7 @@ opt_limited : /* nothing */ opt_coord_or_var : /* nothing */ { - add_opvars(splev, "o", SPO_COPY); + add_opvars(splev, "o", VA_PASS1(SPO_COPY)); $$ = 0; } | ',' coord_or_var @@ -418,11 +432,11 @@ walled : BOOLEAN flags : /* nothing */ { - add_opvars(splev, "io", 0, SPO_LEVEL_FLAGS); + add_opvars(splev, "io", VA_PASS2(0, SPO_LEVEL_FLAGS)); } | FLAGS_ID ':' flag_list { - add_opvars(splev, "io", $3, SPO_LEVEL_FLAGS); + add_opvars(splev, "io", VA_PASS2($3, SPO_LEVEL_FLAGS)); } ; @@ -536,7 +550,7 @@ shuffle_detail : SHUFFLE_ID ':' any_var_array if (!(vd->var_type & SPOVAR_ARRAY)) lc_error("Trying to shuffle non-array variable '%s'", $3); } else lc_error("Trying to shuffle undefined variable '%s'", $3); - add_opvars(splev, "so", $3, SPO_SHUFFLE_ARRAY); + add_opvars(splev, "so", VA_PASS2($3, SPO_SHUFFLE_ARRAY)); Free($3); } ; @@ -544,134 +558,141 @@ shuffle_detail : SHUFFLE_ID ':' any_var_array variable_define : any_var_or_arr '=' math_expr_var { variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_INT); - add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' selection_ID ':' ter_selection { variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_SEL); - add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' string_expr { variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_STRING); - add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' terrainid ':' mapchar_or_var { variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR); - add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' monsterid ':' monster_or_var { variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_MONST); - add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' objectid ':' object_or_var { variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_OBJ); - add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' coord_or_var { variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_COORD); - add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' region_or_var { variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_REGION); - add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' '{' integer_list '}' { long n_items = $4; variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_INT|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' '{' encodecoord_list '}' { long n_items = $4; variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_COORD|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' '{' encoderegion_list '}' { long n_items = $4; variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_REGION|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' terrainid ':' '{' mapchar_list '}' { long n_items = $6; variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' monsterid ':' '{' encodemonster_list '}' { long n_items = $6; variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_MONST|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' objectid ':' '{' encodeobj_list '}' { long n_items = $6; variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_OBJ|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' '{' string_list '}' { long n_items = $4; variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_STRING|SPOVAR_ARRAY); - add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } ; encodeobj_list : encodeobj { - add_opvars(splev, "O", $1); + add_opvars(splev, "O", VA_PASS1($1)); $$ = 1; } | encodeobj_list ',' encodeobj { - add_opvars(splev, "O", $3); + add_opvars(splev, "O", VA_PASS1($3)); $$ = 1 + $1; } ; encodemonster_list : encodemonster { - add_opvars(splev, "M", $1); + add_opvars(splev, "M", VA_PASS1($1)); $$ = 1; } | encodemonster_list ',' encodemonster { - add_opvars(splev, "M", $3); + add_opvars(splev, "M", VA_PASS1($3)); $$ = 1 + $1; } ; mapchar_list : mapchar { - add_opvars(splev, "m", $1); + add_opvars(splev, "m", VA_PASS1($1)); $$ = 1; } | mapchar_list ',' mapchar { - add_opvars(splev, "m", $3); + add_opvars(splev, "m", VA_PASS1($3)); $$ = 1 + $1; } ; @@ -688,12 +709,12 @@ encoderegion_list : encoderegion encodecoord_list : encodecoord { - add_opvars(splev, "c", $1); + add_opvars(splev, "c", VA_PASS1($1)); $$ = 1; } | encodecoord_list ',' encodecoord { - add_opvars(splev, "c", $3); + add_opvars(splev, "c", VA_PASS1($3)); $$ = 1 + $1; } ; @@ -746,7 +767,7 @@ function_define : FUNCTION_ID NQSTRING '(' } stmt_block { - add_opvars(splev, "io", 0, SPO_RETURN); + add_opvars(splev, "io", VA_PASS2(0, SPO_RETURN)); splev = function_splev_backup; in_function_definition--; curr_function = NULL; @@ -782,7 +803,9 @@ function_call : NQSTRING '(' func_call_params_list ')' { /* init function parameter variables */ struct lc_funcdefs_parm *tfp = tmpfunc->params; while (tfp) { - add_opvars(splev, "iso", 0, tfp->name, SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(0, tfp->name, + SPO_VAR_INIT)); tfp = tfp->next; } } @@ -791,7 +814,8 @@ function_call : NQSTRING '(' func_call_params_list ')' set_opvar_int(jmp, splev->n_opcodes - jmp->vardata.l); } l = tmpfunc->addr - splev->n_opcodes - 2; - add_opvars(splev, "iio", nparams, l, SPO_CALL); + add_opvars(splev, "iio", + VA_PASS3(nparams, l, SPO_CALL)); tmpfunc->n_called++; } else { lc_error("Function '%s' not defined.", $1); @@ -819,7 +843,8 @@ opt_percent : /* nothing */ comparestmt : PERCENT { /* val > rn2(100) */ - add_opvars(splev, "iio", (long)$1, 100, SPO_RN2); + add_opvars(splev, "iio", + VA_PASS3((long)$1, 100, SPO_RN2)); $$ = SPO_JG; } | '[' math_expr_var COMPARE_TYPE math_expr_var ']' @@ -829,7 +854,7 @@ comparestmt : PERCENT | '[' math_expr_var ']' { /* boolean, explicit foo != 0 */ - add_opvars(splev, "i", 0); + add_opvars(splev, "i", VA_PASS1(0)); $$ = SPO_JNE; } ; @@ -850,7 +875,7 @@ switchstatement : SWITCH_ID switch_default_case = NULL; if (!is_inconstant_number) - add_opvars(splev, "o", SPO_RN2); + add_opvars(splev, "o", VA_PASS1(SPO_RN2)); is_inconstant_number = 0; chkjmp = New(struct opvar); @@ -870,17 +895,22 @@ switchstatement : SWITCH_ID add_opcode(splev, SPO_PUSH, endjump); add_opcode(splev, SPO_JMP, NULL); - set_opvar_int(switch_check_jump, splev->n_opcodes - switch_check_jump->vardata.l); + set_opvar_int(switch_check_jump, + splev->n_opcodes - switch_check_jump->vardata.l); for (i = 0; i < n_switch_case_list; i++) { - add_opvars(splev, "oio", SPO_COPY, switch_case_value[i], SPO_CMP); - set_opvar_int(switch_case_list[i], switch_case_list[i]->vardata.l - splev->n_opcodes-1); + add_opvars(splev, "oio", + VA_PASS3(SPO_COPY, + switch_case_value[i], SPO_CMP)); + set_opvar_int(switch_case_list[i], + switch_case_list[i]->vardata.l - splev->n_opcodes-1); add_opcode(splev, SPO_PUSH, switch_case_list[i]); add_opcode(splev, SPO_JE, NULL); } if (switch_default_case) { - set_opvar_int(switch_default_case, switch_default_case->vardata.l - splev->n_opcodes-1); + set_opvar_int(switch_default_case, + switch_default_case->vardata.l - splev->n_opcodes-1); add_opcode(splev, SPO_PUSH, switch_default_case); add_opcode(splev, SPO_JMP, NULL); } @@ -953,17 +983,23 @@ forstmt_start : FOR_ID any_var_or_unk '=' math_expr_var for_to_span math_expr_va /* first, define a variable for the for-loop end value */ snprintf(buf, 255, "%s end", $2); /* the value of which is already in stack (the 2nd math_expr) */ - add_opvars(splev, "iso", 0, buf, SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, buf, SPO_VAR_INIT)); - variable_definitions = add_vardef_type(variable_definitions, $2, SPOVAR_INT); + variable_definitions = add_vardef_type(variable_definitions, + $2, SPOVAR_INT); /* define the for-loop variable. value is in stack (1st math_expr) */ - add_opvars(splev, "iso", 0, $2, SPO_VAR_INIT); + add_opvars(splev, "iso", VA_PASS3(0, $2, SPO_VAR_INIT)); /* calculate value for the loop "step" variable */ snprintf(buf2, 255, "%s step", $2); - add_opvars(splev, "vvo", buf, $2, SPO_MATH_SUB); /* end - start */ - add_opvars(splev, "o", SPO_MATH_SIGN); /* sign of that */ - add_opvars(splev, "iso", 0, buf2, SPO_VAR_INIT); /* save the sign into the step var */ + /* end - start */ + add_opvars(splev, "vvo", + VA_PASS3(buf, $2, SPO_MATH_SUB)); + /* sign of that */ + add_opvars(splev, "o", VA_PASS1(SPO_MATH_SIGN)); + /* save the sign into the step var */ + add_opvars(splev, "iso", + VA_PASS3(0, buf2, SPO_VAR_INIT)); forloop_list[n_forloops].varname = strdup($2); forloop_list[n_forloops].jmp_point = splev->n_opcodes; @@ -985,14 +1021,22 @@ forstatement : forstmt_start snprintf(buf, 255, "%s step", forloop_list[n_forloops].varname); snprintf(buf2, 255, "%s end", forloop_list[n_forloops].varname); /* compare for-loop var to end value */ - add_opvars(splev, "vvo", forloop_list[n_forloops].varname, buf2, SPO_CMP); + add_opvars(splev, "vvo", + VA_PASS3(forloop_list[n_forloops].varname, + buf2, SPO_CMP)); /* var + step */ - add_opvars(splev, "vvo", buf, - forloop_list[n_forloops].varname, SPO_MATH_ADD); + add_opvars(splev, "vvo", + VA_PASS3(buf, forloop_list[n_forloops].varname, + SPO_MATH_ADD)); /* for-loop var = (for-loop var + step) */ - add_opvars(splev, "iso", 0, forloop_list[n_forloops].varname, SPO_VAR_INIT); + add_opvars(splev, "iso", + VA_PASS3(0, forloop_list[n_forloops].varname, + SPO_VAR_INIT)); /* jump back if compared values were not equal */ - add_opvars(splev, "io", forloop_list[n_forloops].jmp_point - splev->n_opcodes - 1, SPO_JNE); + add_opvars(splev, "io", + VA_PASS2( + forloop_list[n_forloops].jmp_point - splev->n_opcodes - 1, + SPO_JNE)); Free(forloop_list[n_forloops].varname); break_stmt_end(splev); } @@ -1009,14 +1053,14 @@ loopstatement : LOOP_ID '[' integer_or_var ']' set_opvar_int(tmppush, splev->n_opcodes); if_list[n_if_list++] = tmppush; - add_opvars(splev, "o", SPO_DEC); + add_opvars(splev, "o", VA_PASS1(SPO_DEC)); break_stmt_start(); } stmt_block { struct opvar *tmppush; - add_opvars(splev, "oio", SPO_COPY, 0, SPO_CMP); + add_opvars(splev, "oio", VA_PASS3(SPO_COPY, 0, SPO_CMP)); tmppush = (struct opvar *) if_list[--n_if_list]; set_opvar_int(tmppush, tmppush->vardata.l - splev->n_opcodes-1); @@ -1120,37 +1164,40 @@ if_ending : stmt_block message : MESSAGE_ID ':' string_expr { - add_opvars(splev, "o", SPO_MESSAGE); + add_opvars(splev, "o", VA_PASS1(SPO_MESSAGE)); } ; random_corridors: RAND_CORRIDOR_ID { - add_opvars(splev, "iiiiiio", -1, 0, -1, -1, -1, -1, SPO_CORRIDOR); + add_opvars(splev, "iiiiiio", + VA_PASS7(-1, 0, -1, -1, -1, -1, SPO_CORRIDOR)); } | RAND_CORRIDOR_ID ':' all_integers { - add_opvars(splev, "iiiiiio", -1, $3, -1, -1, -1, -1, SPO_CORRIDOR); + add_opvars(splev, "iiiiiio", + VA_PASS7(-1, $3, -1, -1, -1, -1, SPO_CORRIDOR)); } | RAND_CORRIDOR_ID ':' RANDOM_TYPE { - add_opvars(splev, "iiiiiio", -1, -1, -1, -1, -1, -1, SPO_CORRIDOR); + add_opvars(splev, "iiiiiio", + VA_PASS7(-1, -1, -1, -1, -1, -1, SPO_CORRIDOR)); } ; corridor : CORRIDOR_ID ':' corr_spec ',' corr_spec { add_opvars(splev, "iiiiiio", - $3.room, $3.door, $3.wall, - $5.room, $5.door, $5.wall, - SPO_CORRIDOR); + VA_PASS7($3.room, $3.door, $3.wall, + $5.room, $5.door, $5.wall, + SPO_CORRIDOR)); } | CORRIDOR_ID ':' corr_spec ',' all_integers { add_opvars(splev, "iiiiiio", - $3.room, $3.door, $3.wall, - -1, -1, (long)$5, - SPO_CORRIDOR); + VA_PASS7($3.room, $3.door, $3.wall, + -1, -1, (long)$5, + SPO_CORRIDOR)); } ; @@ -1167,17 +1214,21 @@ room_begin : room_type opt_percent ',' light_state if (($2 < 100) && ($1 == OROOM)) lc_error("Only typed rooms can have a chance."); else { - add_opvars(splev, "iii", (long)$1, (long)$2, (long)$4); + add_opvars(splev, "iii", + VA_PASS3((long)$1, (long)$2, (long)$4)); } } ; subroom_def : SUBROOM_ID ':' room_begin ',' subroom_pos ',' room_size optroomregionflags { - long flags = $8; - if (flags == -1) flags = (1 << 0); - add_opvars(splev, "iiiiiiio", flags, ERR, ERR, - $5.x, $5.y, $7.width, $7.height, SPO_SUBROOM); + long rflags = $8; + + if (rflags == -1) rflags = (1 << 0); + add_opvars(splev, "iiiiiiio", + VA_PASS8(rflags, ERR, ERR, + $5.x, $5.y, $7.width, $7.height, + SPO_SUBROOM)); break_stmt_start(); } stmt_block @@ -1189,11 +1240,13 @@ subroom_def : SUBROOM_ID ':' room_begin ',' subroom_pos ',' room_size optroomreg room_def : ROOM_ID ':' room_begin ',' room_pos ',' room_align ',' room_size optroomregionflags { - long flags = $8; - if (flags == -1) flags = (1 << 0); - add_opvars(splev, "iiiiiiio", flags, - $7.x, $7.y, $5.x, $5.y, - $9.width, $9.height, SPO_ROOM); + long rflags = $8; + + if (rflags == -1) rflags = (1 << 0); + add_opvars(splev, "iiiiiiio", + VA_PASS8(rflags, + $7.x, $7.y, $5.x, $5.y, + $9.width, $9.height, SPO_ROOM)); break_stmt_start(); } stmt_block @@ -1272,12 +1325,14 @@ door_detail : ROOMDOOR_ID ':' secret ',' door_state ',' door_wall ',' door_pos if ($7 == ERR && $9 != ERR) { lc_error("If the door wall is random, so must be its pos!"); } else { - add_opvars(splev, "iiiio", (long)$9, (long)$5, (long)$3, (long)$7, SPO_ROOM_DOOR); + add_opvars(splev, "iiiio", + VA_PASS5((long)$9, (long)$5, (long)$3, + (long)$7, SPO_ROOM_DOOR)); } } | DOOR_ID ':' door_state ',' ter_selection { - add_opvars(splev, "io", (long)$3, SPO_DOOR); + add_opvars(splev, "io", VA_PASS2((long)$3, SPO_DOOR)); } ; @@ -1305,19 +1360,22 @@ door_pos : INTEGER map_definition : NOMAP_ID { - add_opvars(splev, "ciisiio", 0, 0, 1, (char *)0, 0, 0, SPO_MAP); + add_opvars(splev, "ciisiio", + VA_PASS7(0, 0, 1, (char *)0, 0, 0, SPO_MAP)); max_x_map = COLNO-1; max_y_map = ROWNO; } | GEOMETRY_ID ':' h_justif ',' v_justif roomfill MAP_ID { - add_opvars(splev, "cii", SP_COORD_PACK(($3),($5)), 1, (long)$6); + add_opvars(splev, "cii", + VA_PASS3(SP_COORD_PACK(($3),($5)), + 1, (long)$6)); scan_map($7, splev); Free($7); } | GEOMETRY_ID ':' coord_or_var roomfill MAP_ID { - add_opvars(splev, "ii", 2, (long)$4); + add_opvars(splev, "ii", VA_PASS2(2, (long)$4)); scan_map($5, splev); Free($5); } @@ -1333,11 +1391,11 @@ v_justif : TOP_OR_BOT monster_detail : MONSTER_ID ':' monster_desc { - add_opvars(splev, "io", 0, SPO_MONSTER); + add_opvars(splev, "io", VA_PASS2(0, SPO_MONSTER)); } | MONSTER_ID ':' monster_desc { - add_opvars(splev, "io", 1, SPO_MONSTER); + add_opvars(splev, "io", VA_PASS2(1, SPO_MONSTER)); in_container_obj++; break_stmt_start(); } @@ -1345,7 +1403,7 @@ monster_detail : MONSTER_ID ':' monster_desc { break_stmt_end(splev); in_container_obj--; - add_opvars(splev, "o", SPO_END_MONINVENT); + add_opvars(splev, "o", VA_PASS1(SPO_END_MONINVENT)); } ; @@ -1372,82 +1430,87 @@ monster_infos : /* nothing */ monster_info : string_expr { - add_opvars(splev, "i", SP_M_V_NAME); + add_opvars(splev, "i", VA_PASS1(SP_M_V_NAME)); $$ = 0x0001; } | MON_ATTITUDE { - add_opvars(splev, "ii", (long)$1, SP_M_V_PEACEFUL); + add_opvars(splev, "ii", + VA_PASS2((long)$1, SP_M_V_PEACEFUL)); $$ = 0x0002; } | MON_ALERTNESS { - add_opvars(splev, "ii", (long)$1, SP_M_V_ASLEEP); + add_opvars(splev, "ii", + VA_PASS2((long)$1, SP_M_V_ASLEEP)); $$ = 0x0004; } | alignment_prfx { - add_opvars(splev, "ii", (long)$1, SP_M_V_ALIGN); + add_opvars(splev, "ii", + VA_PASS2((long)$1, SP_M_V_ALIGN)); $$ = 0x0008; } | MON_APPEARANCE string_expr { - add_opvars(splev, "ii", (long)$1, SP_M_V_APPEAR); + add_opvars(splev, "ii", + VA_PASS2((long)$1, SP_M_V_APPEAR)); $$ = 0x0010; } | FEMALE_ID { - add_opvars(splev, "ii", 1, SP_M_V_FEMALE); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_FEMALE)); $$ = 0x0020; } | INVIS_ID { - add_opvars(splev, "ii", 1, SP_M_V_INVIS); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_INVIS)); $$ = 0x0040; } | CANCELLED_ID { - add_opvars(splev, "ii", 1, SP_M_V_CANCELLED); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_CANCELLED)); $$ = 0x0080; } | REVIVED_ID { - add_opvars(splev, "ii", 1, SP_M_V_REVIVED); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_REVIVED)); $$ = 0x0100; } | AVENGE_ID { - add_opvars(splev, "ii", 1, SP_M_V_AVENGE); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_AVENGE)); $$ = 0x0200; } | FLEEING_ID ':' integer_or_var { - add_opvars(splev, "i", SP_M_V_FLEEING); + add_opvars(splev, "i", VA_PASS1(SP_M_V_FLEEING)); $$ = 0x0400; } | BLINDED_ID ':' integer_or_var { - add_opvars(splev, "i", SP_M_V_BLINDED); + add_opvars(splev, "i", VA_PASS1(SP_M_V_BLINDED)); $$ = 0x0800; } | PARALYZED_ID ':' integer_or_var { - add_opvars(splev, "i", SP_M_V_PARALYZED); + add_opvars(splev, "i", VA_PASS1(SP_M_V_PARALYZED)); $$ = 0x1000; } | STUNNED_ID { - add_opvars(splev, "ii", 1, SP_M_V_STUNNED); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_STUNNED)); $$ = 0x2000; } | CONFUSED_ID { - add_opvars(splev, "ii", 1, SP_M_V_CONFUSED); + add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_CONFUSED)); $$ = 0x4000; } | SEENTRAPS_ID ':' seen_trap_mask { - add_opvars(splev, "ii", (long)$3, SP_M_V_SEENTRAPS); + add_opvars(splev, "ii", + VA_PASS2((long)$3, SP_M_V_SEENTRAPS)); $$ = 0x8000; } ; @@ -1480,13 +1543,13 @@ object_detail : OBJECT_ID ':' object_desc { long cnt = 0; if (in_container_obj) cnt |= SP_OBJ_CONTENT; - add_opvars(splev, "io", cnt, SPO_OBJECT); + add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); } | COBJECT_ID ':' object_desc { long cnt = SP_OBJ_CONTAINER; if (in_container_obj) cnt |= SP_OBJ_CONTENT; - add_opvars(splev, "io", cnt, SPO_OBJECT); + add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); in_container_obj++; break_stmt_start(); } @@ -1522,103 +1585,105 @@ object_infos : /* nothing */ object_info : CURSE_TYPE { - add_opvars(splev, "ii", (long)$1, SP_O_V_CURSE); + add_opvars(splev, "ii", + VA_PASS2((long)$1, SP_O_V_CURSE)); $$ = 0x0001; } | MONTYPE_ID ':' monster_or_var { - add_opvars(splev, "i", SP_O_V_CORPSENM); + add_opvars(splev, "i", VA_PASS1(SP_O_V_CORPSENM)); $$ = 0x0002; } | all_ints_push { - add_opvars(splev, "i", SP_O_V_SPE); + add_opvars(splev, "i", VA_PASS1(SP_O_V_SPE)); $$ = 0x0004; } | NAME_ID ':' string_expr { - add_opvars(splev, "i", SP_O_V_NAME); + add_opvars(splev, "i", VA_PASS1(SP_O_V_NAME)); $$ = 0x0008; } | QUANTITY_ID ':' integer_or_var { - add_opvars(splev, "i", SP_O_V_QUAN); + add_opvars(splev, "i", VA_PASS1(SP_O_V_QUAN)); $$ = 0x0010; } | BURIED_ID { - add_opvars(splev, "ii", 1, SP_O_V_BURIED); + add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_BURIED)); $$ = 0x0020; } | LIGHT_STATE { - add_opvars(splev, "ii", (long)$1, SP_O_V_LIT); + add_opvars(splev, "ii", VA_PASS2((long)$1, SP_O_V_LIT)); $$ = 0x0040; } | ERODED_ID ':' integer_or_var { - add_opvars(splev, "i", SP_O_V_ERODED); + add_opvars(splev, "i", VA_PASS1(SP_O_V_ERODED)); $$ = 0x0080; } | ERODEPROOF_ID { - add_opvars(splev, "ii", -1, SP_O_V_ERODED); + add_opvars(splev, "ii", VA_PASS2(-1, SP_O_V_ERODED)); $$ = 0x0080; } | DOOR_STATE { if ($1 == D_LOCKED) { - add_opvars(splev, "ii", 1, SP_O_V_LOCKED); + add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_LOCKED)); $$ = 0x0100; } else if ($1 == D_BROKEN) { - add_opvars(splev, "ii", 1, SP_O_V_BROKEN); + add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_BROKEN)); $$ = 0x0200; } else - lc_error("OBJECT state can only be locked or broken."); + lc_error("DOOR state can only be locked or broken."); } | TRAPPED_ID { - add_opvars(splev, "ii", 1, SP_O_V_TRAPPED); + add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_TRAPPED)); $$ = 0x0400; } | RECHARGED_ID ':' integer_or_var { - add_opvars(splev, "i", SP_O_V_RECHARGED); + add_opvars(splev, "i", VA_PASS1(SP_O_V_RECHARGED)); $$ = 0x0800; } | INVIS_ID { - add_opvars(splev, "ii", 1, SP_O_V_INVIS); + add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_INVIS)); $$ = 0x1000; } | GREASED_ID { - add_opvars(splev, "ii", 1, SP_O_V_GREASED); + add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_GREASED)); $$ = 0x2000; } | coord_or_var { - add_opvars(splev, "i", SP_O_V_COORD); + add_opvars(splev, "i", VA_PASS1(SP_O_V_COORD)); $$ = 0x4000; } ; trap_detail : TRAP_ID ':' trap_name ',' coord_or_var { - add_opvars(splev, "io", (long)$3, SPO_TRAP); + add_opvars(splev, "io", VA_PASS2((long)$3, SPO_TRAP)); } ; drawbridge_detail: DRAWBRIDGE_ID ':' coord_or_var ',' DIRECTION ',' door_state { - long d, state = 0; + long dir, state = 0; + /* convert dir from a DIRECTION to a DB_DIR */ - d = $5; - switch(d) { - case W_NORTH: d = DB_NORTH; break; - case W_SOUTH: d = DB_SOUTH; break; - case W_EAST: d = DB_EAST; break; - case W_WEST: d = DB_WEST; break; + dir = $5; + switch (dir) { + case W_NORTH: dir = DB_NORTH; break; + case W_SOUTH: dir = DB_SOUTH; break; + case W_EAST: dir = DB_EAST; break; + case W_WEST: dir = DB_WEST; break; default: lc_error("Invalid drawbridge direction."); break; @@ -1632,85 +1697,92 @@ drawbridge_detail: DRAWBRIDGE_ID ':' coord_or_var ',' DIRECTION ',' door_state state = -1; else lc_error("A drawbridge can only be open, closed or random!"); - add_opvars(splev, "iio", state, d, SPO_DRAWBRIDGE); + add_opvars(splev, "iio", + VA_PASS3(state, dir, SPO_DRAWBRIDGE)); } ; mazewalk_detail : MAZEWALK_ID ':' coord_or_var ',' DIRECTION { add_opvars(splev, "iiio", - (long)$5, 1, 0, SPO_MAZEWALK); + VA_PASS4((long)$5, 1, 0, SPO_MAZEWALK)); } | MAZEWALK_ID ':' coord_or_var ',' DIRECTION ',' BOOLEAN opt_fillchar { add_opvars(splev, "iiio", - (long)$5, (long)$7, (long)$8, SPO_MAZEWALK); + VA_PASS4((long)$5, (long)$7, + (long)$8, SPO_MAZEWALK)); } ; wallify_detail : WALLIFY_ID { - add_opvars(splev, "rio", SP_REGION_PACK(-1,-1,-1,-1), 0, SPO_WALLIFY); + add_opvars(splev, "rio", + VA_PASS3(SP_REGION_PACK(-1,-1,-1,-1), + 0, SPO_WALLIFY)); } | WALLIFY_ID ':' ter_selection { - add_opvars(splev, "io", 1, SPO_WALLIFY); + add_opvars(splev, "io", VA_PASS2(1, SPO_WALLIFY)); } ; ladder_detail : LADDER_ID ':' coord_or_var ',' UP_OR_DOWN { - add_opvars(splev, "io", (long)$5, SPO_LADDER); + add_opvars(splev, "io", + VA_PASS2((long)$5, SPO_LADDER)); } ; stair_detail : STAIR_ID ':' coord_or_var ',' UP_OR_DOWN { - add_opvars(splev, "io", (long)$5, SPO_STAIR); + add_opvars(splev, "io", + VA_PASS2((long)$5, SPO_STAIR)); } ; stair_region : STAIR_ID ':' lev_region ',' lev_region ',' UP_OR_DOWN { add_opvars(splev, "iiiii iiiii iiso", - $3.x1, $3.y1, $3.x2, $3.y2, $3.area, - $5.x1, $5.y1, $5.x2, $5.y2, $5.area, - (long)(($7) ? LR_UPSTAIR : LR_DOWNSTAIR), - 0, (char *)0, SPO_LEVREGION); + VA_PASS14($3.x1, $3.y1, $3.x2, $3.y2, $3.area, + $5.x1, $5.y1, $5.x2, $5.y2, $5.area, + (long)(($7) ? LR_UPSTAIR : LR_DOWNSTAIR), + 0, (char *)0, SPO_LEVREGION)); } ; portal_region : PORTAL_ID ':' lev_region ',' lev_region ',' STRING { add_opvars(splev, "iiiii iiiii iiso", - $3.x1, $3.y1, $3.x2, $3.y2, $3.area, - $5.x1, $5.y1, $5.x2, $5.y2, $5.area, - LR_PORTAL, 0, $7, SPO_LEVREGION); + VA_PASS14($3.x1, $3.y1, $3.x2, $3.y2, $3.area, + $5.x1, $5.y1, $5.x2, $5.y2, $5.area, + LR_PORTAL, 0, $7, SPO_LEVREGION)); Free($7); } ; teleprt_region : TELEPRT_ID ':' lev_region ',' lev_region teleprt_detail { - long rtype = 0; + long rtyp = 0; switch($6) { - case -1: rtype = LR_TELE; break; - case 0: rtype = LR_DOWNTELE; break; - case 1: rtype = LR_UPTELE; break; + case -1: rtyp = LR_TELE; break; + case 0: rtyp = LR_DOWNTELE; break; + case 1: rtyp = LR_UPTELE; break; } add_opvars(splev, "iiiii iiiii iiso", - $3.x1, $3.y1, $3.x2, $3.y2, $3.area, - $5.x1, $5.y1, $5.x2, $5.y2, $5.area, - rtype, 0, (char *)0, SPO_LEVREGION); + VA_PASS14($3.x1, $3.y1, $3.x2, $3.y2, $3.area, + $5.x1, $5.y1, $5.x2, $5.y2, $5.area, + rtyp, 0, (char *)0, SPO_LEVREGION)); } ; branch_region : BRANCH_ID ':' lev_region ',' lev_region { add_opvars(splev, "iiiii iiiii iiso", - $3.x1, $3.y1, $3.x2, $3.y2, $3.area, - $5.x1, $5.y1, $5.x2, $5.y2, $5.area, - (long)LR_BRANCH, 0, (char *)0, SPO_LEVREGION); + VA_PASS14($3.x1, $3.y1, $3.x2, $3.y2, $3.area, + $5.x1, $5.y1, $5.x2, $5.y2, $5.area, + (long)LR_BRANCH, 0, + (char *)0, SPO_LEVREGION)); } ; @@ -1726,19 +1798,19 @@ teleprt_detail : /* empty */ fountain_detail : FOUNTAIN_ID ':' ter_selection { - add_opvars(splev, "o", SPO_FOUNTAIN); + add_opvars(splev, "o", VA_PASS1(SPO_FOUNTAIN)); } ; sink_detail : SINK_ID ':' ter_selection { - add_opvars(splev, "o", SPO_SINK); + add_opvars(splev, "o", VA_PASS1(SPO_SINK)); } ; pool_detail : POOL_ID ':' ter_selection { - add_opvars(splev, "o", SPO_POOL); + add_opvars(splev, "o", VA_PASS1(SPO_POOL)); } ; @@ -1756,25 +1828,26 @@ terrain_type : CHAR replace_terrain_detail : REPLACE_TERRAIN_ID ':' region_or_var ',' mapchar_or_var ',' mapchar_or_var ',' SPERCENT { - add_opvars(splev, "io", $9, SPO_REPLACETERRAIN); + add_opvars(splev, "io", + VA_PASS2($9, SPO_REPLACETERRAIN)); } ; terrain_detail : TERRAIN_ID ':' ter_selection ',' mapchar_or_var { - add_opvars(splev, "o", SPO_TERRAIN); + add_opvars(splev, "o", VA_PASS1(SPO_TERRAIN)); } ; diggable_detail : NON_DIGGABLE_ID ':' region_or_var { - add_opvars(splev, "o", SPO_NON_DIGGABLE); + add_opvars(splev, "o", VA_PASS1(SPO_NON_DIGGABLE)); } ; passwall_detail : NON_PASSWALL_ID ':' region_or_var { - add_opvars(splev, "o", SPO_NON_PASSWALL); + add_opvars(splev, "o", VA_PASS1(SPO_NON_PASSWALL)); } ; @@ -1782,13 +1855,14 @@ region_detail : REGION_ID ':' region_or_var ',' light_state ',' room_type optroo { long irr; long rt = $7; - long flags = $8; - if (flags == -1) flags = (1 << 0); - if (!(( flags ) & 1)) rt += MAXRTYPE+1; - irr = ((( flags ) & 2) != 0); + long rflags = $8; + + if (rflags == -1) rflags = (1 << 0); + if (!(rflags & 1)) rt += MAXRTYPE+1; + irr = ((rflags & 2) != 0); add_opvars(splev, "iiio", - (long)$5, rt, flags, SPO_REGION); - $$ = (irr || (flags & 1) || rt != OROOM); + VA_PASS4((long)$5, rt, rflags, SPO_REGION)); + $$ = (irr || (rflags & 1) || rt != OROOM); break_stmt_start(); } region_detail_end @@ -1813,46 +1887,48 @@ region_detail_end : /* nothing */ altar_detail : ALTAR_ID ':' coord_or_var ',' alignment ',' altar_type { - add_opvars(splev, "iio", (long)$7, (long)$5, SPO_ALTAR); + add_opvars(splev, "iio", + VA_PASS3((long)$7, (long)$5, SPO_ALTAR)); } ; grave_detail : GRAVE_ID ':' coord_or_var ',' string_expr { - add_opvars(splev, "io", 2, SPO_GRAVE); + add_opvars(splev, "io", VA_PASS2(2, SPO_GRAVE)); } | GRAVE_ID ':' coord_or_var ',' RANDOM_TYPE { add_opvars(splev, "sio", - (char *)0, 1, SPO_GRAVE); + VA_PASS3((char *)0, 1, SPO_GRAVE)); } | GRAVE_ID ':' coord_or_var { add_opvars(splev, "sio", - (char *)0, 0, SPO_GRAVE); + VA_PASS3((char *)0, 0, SPO_GRAVE)); } ; gold_detail : GOLD_ID ':' math_expr_var ',' coord_or_var { - add_opvars(splev, "o", SPO_GOLD); + add_opvars(splev, "o", VA_PASS1(SPO_GOLD)); } ; engraving_detail: ENGRAVING_ID ':' coord_or_var ',' engraving_type ',' string_expr { add_opvars(splev, "io", - (long)$5, SPO_ENGRAVING); + VA_PASS2((long)$5, SPO_ENGRAVING)); } ; mineralize : MINERALIZE_ID ':' integer_or_var ',' integer_or_var ',' integer_or_var ',' integer_or_var { - add_opvars(splev, "o", SPO_MINERALIZE); + add_opvars(splev, "o", VA_PASS1(SPO_MINERALIZE)); } | MINERALIZE_ID { - add_opvars(splev, "iiiio", -1L, -1L, -1L, -1L, SPO_MINERALIZE); + add_opvars(splev, "iiiio", + VA_PASS5(-1L, -1L, -1L, -1L, SPO_MINERALIZE)); } ; @@ -1954,21 +2030,21 @@ a_register : A_REGISTER '[' INTEGER ']' string_or_var : STRING { - add_opvars(splev, "s", $1); + add_opvars(splev, "s", VA_PASS1($1)); Free($1); } | VARSTRING_STRING { check_vardef_type(variable_definitions, $1, SPOVAR_STRING); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | VARSTRING_STRING_ARRAY '[' math_expr_var ']' { check_vardef_type(variable_definitions, $1, SPOVAR_STRING|SPOVAR_ARRAY); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } ; @@ -1982,24 +2058,24 @@ integer_or_var : math_expr_var coord_or_var : encodecoord { - add_opvars(splev, "c", $1); + add_opvars(splev, "c", VA_PASS1($1)); } | rndcoord_ID '(' ter_selection ')' { - add_opvars(splev, "o", SPO_SEL_RNDCOORD); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDCOORD)); } | VARSTRING_COORD { check_vardef_type(variable_definitions, $1, SPOVAR_COORD); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | VARSTRING_COORD_ARRAY '[' math_expr_var ']' { check_vardef_type(variable_definitions, $1, SPOVAR_COORD|SPOVAR_ARRAY); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } ; @@ -2040,14 +2116,14 @@ region_or_var : encoderegion { check_vardef_type(variable_definitions, $1, SPOVAR_REGION); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | VARSTRING_REGION_ARRAY '[' math_expr_var ']' { check_vardef_type(variable_definitions, $1, SPOVAR_REGION|SPOVAR_ARRAY); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } ; @@ -2058,27 +2134,27 @@ encoderegion : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')' if ( $2 > $6 || $4 > $8 ) lc_error("Region start > end: (%li,%li,%li,%li)!", $2, $4, $6, $8); - add_opvars(splev, "r", r); + add_opvars(splev, "r", VA_PASS1(r)); $$ = r; } ; mapchar_or_var : mapchar { - add_opvars(splev, "m", $1); + add_opvars(splev, "m", VA_PASS1($1)); } | VARSTRING_MAPCHAR { check_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | VARSTRING_MAPCHAR_ARRAY '[' math_expr_var ']' { check_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR|SPOVAR_ARRAY); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } ; @@ -2105,20 +2181,20 @@ mapchar : CHAR monster_or_var : encodemonster { - add_opvars(splev, "M", $1); + add_opvars(splev, "M", VA_PASS1($1)); } | VARSTRING_MONST { check_vardef_type(variable_definitions, $1, SPOVAR_MONST); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | VARSTRING_MONST_ARRAY '[' math_expr_var ']' { check_vardef_type(variable_definitions, $1, SPOVAR_MONST|SPOVAR_ARRAY); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } ; @@ -2158,20 +2234,20 @@ encodemonster : STRING object_or_var : encodeobj { - add_opvars(splev, "O", $1); + add_opvars(splev, "O", VA_PASS1($1)); } | VARSTRING_OBJ { check_vardef_type(variable_definitions, $1, SPOVAR_OBJ); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | VARSTRING_OBJ_ARRAY '[' math_expr_var ']' { check_vardef_type(variable_definitions, $1, SPOVAR_OBJ|SPOVAR_ARRAY); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } ; @@ -2214,79 +2290,105 @@ encodeobj : STRING string_expr : string_or_var { } | string_expr '.' string_or_var { - add_opvars(splev, "o", SPO_MATH_ADD); + add_opvars(splev, "o", VA_PASS1(SPO_MATH_ADD)); } ; -math_expr_var : INTEGER { add_opvars(splev, "i", $1 ); } - | dice { is_inconstant_number = 1; } - | '(' MINUS_INTEGER ')' { add_opvars(splev, "i", $2 ); } +math_expr_var : INTEGER + { + add_opvars(splev, "i", VA_PASS1($1)); + } + | dice + { + is_inconstant_number = 1; + } + | '(' MINUS_INTEGER ')' + { + add_opvars(splev, "i", VA_PASS1($2)); + } | VARSTRING_INT { check_vardef_type(variable_definitions, $1, SPOVAR_INT); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); is_inconstant_number = 1; } | VARSTRING_INT_ARRAY '[' math_expr_var ']' { - check_vardef_type(variable_definitions, $1, SPOVAR_INT|SPOVAR_ARRAY); + check_vardef_type(variable_definitions, + $1, SPOVAR_INT|SPOVAR_ARRAY); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); is_inconstant_number = 1; } - | math_expr_var '+' math_expr_var { add_opvars(splev, "o", SPO_MATH_ADD); } - | math_expr_var '-' math_expr_var { add_opvars(splev, "o", SPO_MATH_SUB); } - | math_expr_var '*' math_expr_var { add_opvars(splev, "o", SPO_MATH_MUL); } - | math_expr_var '/' math_expr_var { add_opvars(splev, "o", SPO_MATH_DIV); } - | math_expr_var '%' math_expr_var { add_opvars(splev, "o", SPO_MATH_MOD); } + | math_expr_var '+' math_expr_var + { + add_opvars(splev, "o", VA_PASS1(SPO_MATH_ADD)); + } + | math_expr_var '-' math_expr_var + { + add_opvars(splev, "o", VA_PASS1(SPO_MATH_SUB)); + } + | math_expr_var '*' math_expr_var + { + add_opvars(splev, "o", VA_PASS1(SPO_MATH_MUL)); + } + | math_expr_var '/' math_expr_var + { + add_opvars(splev, "o", VA_PASS1(SPO_MATH_DIV)); + } + | math_expr_var '%' math_expr_var + { + add_opvars(splev, "o", VA_PASS1(SPO_MATH_MOD)); + } | '(' math_expr_var ')' { } ; -func_param_type : CFUNC_INT - { - if (!strcmp("int", $1) || !strcmp("integer", $1)) { - $$ = (int)'i'; - } else lc_error("Unknown function parameter type '%s'", $1); - } - | CFUNC_STR - { - if (!strcmp("str", $1) || !strcmp("string", $1)) { - $$ = (int)'s'; - } else lc_error("Unknown function parameter type '%s'", $1); - } - ; +func_param_type : CFUNC_INT + { + if (!strcmp("int", $1) || !strcmp("integer", $1)) { + $$ = (int)'i'; + } else + lc_error("Unknown function parameter type '%s'", $1); + } + | CFUNC_STR + { + if (!strcmp("str", $1) || !strcmp("string", $1)) { + $$ = (int)'s'; + } else + lc_error("Unknown function parameter type '%s'", $1); + } + ; -func_param_part : any_var_or_arr ':' func_param_type - { - struct lc_funcdefs_parm *tmp = New(struct lc_funcdefs_parm); +func_param_part : any_var_or_arr ':' func_param_type + { + struct lc_funcdefs_parm *tmp = New(struct lc_funcdefs_parm); - if (!curr_function) - lc_error("Function parameters outside function definition."); - else if (!tmp) - lc_error("Could not alloc function params."); - else { - tmp->name = strdup($1); - tmp->parmtype = (char) $3; - tmp->next = curr_function->params; - curr_function->params = tmp; - curr_function->n_params++; - { - long vt; - switch (tmp->parmtype) { - case 'i': vt = SPOVAR_INT; break; - case 's': vt = SPOVAR_STRING; break; - default: lc_error("Unknown func param conversion."); break; - } - variable_definitions = add_vardef_type(variable_definitions, $1, vt); - } - } - Free($1); + if (!curr_function) { + lc_error("Function parameters outside function definition."); + } else if (!tmp) { + lc_error("Could not alloc function params."); + } else { + long vt; + tmp->name = strdup($1); + tmp->parmtype = (char) $3; + tmp->next = curr_function->params; + curr_function->params = tmp; + curr_function->n_params++; + switch (tmp->parmtype) { + case 'i': vt = SPOVAR_INT; break; + case 's': vt = SPOVAR_STRING; break; + default: lc_error("Unknown func param conversion."); break; } - ; - + variable_definitions = add_vardef_type( + variable_definitions, + $1, vt); + } + Free($1); + } + ; func_param_list : func_param_part | func_param_list ',' func_param_part @@ -2338,78 +2440,84 @@ func_call_params_list : /* nothing */ ter_selection_x : coord_or_var { - add_opvars(splev, "o", SPO_SEL_POINT); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_POINT)); } | rect_ID region_or_var { - add_opvars(splev, "o", SPO_SEL_RECT); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_RECT)); } | fillrect_ID region_or_var { - add_opvars(splev, "o", SPO_SEL_FILLRECT); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_FILLRECT)); } | line_ID coord_or_var '-' coord_or_var { - add_opvars(splev, "o", SPO_SEL_LINE); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_LINE)); } | randline_ID coord_or_var '-' coord_or_var ',' math_expr_var { /* randline (x1,y1),(x2,y2), roughness */ - add_opvars(splev, "o", SPO_SEL_RNDLINE); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDLINE)); } | grow_ID '(' ter_selection ')' { - add_opvars(splev, "io", W_ANY, SPO_SEL_GROW); + add_opvars(splev, "io", VA_PASS2(W_ANY, SPO_SEL_GROW)); } | grow_ID '(' dir_list ',' ter_selection ')' { - add_opvars(splev, "io", $3, SPO_SEL_GROW); + add_opvars(splev, "io", VA_PASS2($3, SPO_SEL_GROW)); } | filter_ID '(' SPERCENT ',' ter_selection ')' { - add_opvars(splev, "iio", $3, SPOFILTER_PERCENT, SPO_SEL_FILTER); + add_opvars(splev, "iio", + VA_PASS3($3, SPOFILTER_PERCENT, SPO_SEL_FILTER)); } | filter_ID '(' ter_selection ',' ter_selection ')' { - add_opvars(splev, "io", SPOFILTER_SELECTION, SPO_SEL_FILTER); + add_opvars(splev, "io", + VA_PASS2(SPOFILTER_SELECTION, SPO_SEL_FILTER)); } | filter_ID '(' mapchar_or_var ',' ter_selection ')' { - add_opvars(splev, "io", SPOFILTER_MAPCHAR, SPO_SEL_FILTER); + add_opvars(splev, "io", + VA_PASS2(SPOFILTER_MAPCHAR, SPO_SEL_FILTER)); } | flood_ID coord_or_var { - add_opvars(splev, "o", SPO_SEL_FLOOD); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_FLOOD)); } | circle_ID '(' coord_or_var ',' math_expr_var ')' { - add_opvars(splev, "oio", SPO_COPY, 1, SPO_SEL_ELLIPSE); + add_opvars(splev, "oio", + VA_PASS3(SPO_COPY, 1, SPO_SEL_ELLIPSE)); } | circle_ID '(' coord_or_var ',' math_expr_var ',' FILLING ')' { - add_opvars(splev, "oio", SPO_COPY, $7, SPO_SEL_ELLIPSE); + add_opvars(splev, "oio", + VA_PASS3(SPO_COPY, $7, SPO_SEL_ELLIPSE)); } | ellipse_ID '(' coord_or_var ',' math_expr_var ',' math_expr_var ')' { - add_opvars(splev, "io", 1, SPO_SEL_ELLIPSE); + add_opvars(splev, "io", VA_PASS2(1, SPO_SEL_ELLIPSE)); } | ellipse_ID '(' coord_or_var ',' math_expr_var ',' math_expr_var ',' FILLING ')' { - add_opvars(splev, "io", $9, SPO_SEL_ELLIPSE); + add_opvars(splev, "io", VA_PASS2($9, SPO_SEL_ELLIPSE)); } | gradient_ID '(' GRADIENT_TYPE ',' '(' math_expr_var '-' math_expr_var opt_limited ')' ',' coord_or_var opt_coord_or_var ')' { - add_opvars(splev, "iio", $9, $3, SPO_SEL_GRADIENT); + add_opvars(splev, "iio", + VA_PASS3($9, $3, SPO_SEL_GRADIENT)); } | complement_ID ter_selection_x { - add_opvars(splev, "o", SPO_SEL_COMPLEMENT); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_COMPLEMENT)); } | VARSTRING_SEL { check_vardef_type(variable_definitions, $1, SPOVAR_SEL); vardef_used(variable_definitions, $1); - add_opvars(splev, "v", $1); + add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | '(' ter_selection ')' @@ -2424,13 +2532,14 @@ ter_selection : ter_selection_x } | ter_selection_x '&' ter_selection { - add_opvars(splev, "o", SPO_SEL_ADD); + add_opvars(splev, "o", VA_PASS1(SPO_SEL_ADD)); } ; dice : DICE { - add_opvars(splev, "iio", $1.num, $1.die, SPO_DICE); + add_opvars(splev, "iio", + VA_PASS3($1.num, $1.die, SPO_DICE)); } ; @@ -2441,15 +2550,15 @@ all_integers : MINUS_INTEGER all_ints_push : MINUS_INTEGER { - add_opvars(splev, "i", $1 ); + add_opvars(splev, "i", VA_PASS1($1)); } | PLUS_INTEGER { - add_opvars(splev, "i", $1 ); + add_opvars(splev, "i", VA_PASS1($1)); } | INTEGER { - add_opvars(splev, "i", $1 ); + add_opvars(splev, "i", VA_PASS1($1)); } | dice { diff --git a/util/lev_main.c b/util/lev_main.c index 2268c9fc3..5d18c36df 100644 --- a/util/lev_main.c +++ b/util/lev_main.c @@ -1,4 +1,4 @@ -/* NetHack 3.5 lev_main.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ +/* NetHack 3.5 lev_main.c $NHDT-Date: 1428655166 2015/04/10 08:39:26 $ $NHDT-Branch: master $:$NHDT-Revision: 1.34 $ */ /* NetHack 3.5 lev_main.c $Date: 2012/01/12 04:48:12 $ $Revision: 1.20 $ */ /* SCCS Id: @(#)lev_main.c 3.5 2007/01/17 */ /* Copyright (c) 1989 by Jean-Christophe Collet */ @@ -8,11 +8,9 @@ * This file contains the main function for the parser * and some useful functions needed by yacc */ -#define SPEC_LEV /* for MPW */ -/* although, why don't we move those special defines here.. and in dgn_main? */ - -#include +#define SPEC_LEV /* for USE_OLDARGS (sp_lev.h) and for MPW (macconf.h) */ +#define NEED_VARARGS #include "hack.h" #include "date.h" #include "sp_lev.h" @@ -77,14 +75,14 @@ extern unsigned _stklen = STKSIZ; #endif #define MAX_ERRORS 25 -extern int NDECL (yyparse); -extern void FDECL (init_yyin, (FILE *)); -extern void FDECL (init_yyout, (FILE *)); +extern int NDECL(yyparse); +extern void FDECL(init_yyin, (FILE *)); +extern void FDECL(init_yyout, (FILE *)); -int FDECL (main, (int, char **)); -void FDECL (yyerror, (const char *)); -void FDECL (yywarning, (const char *)); -int NDECL (yywrap); +int FDECL(main, (int, char **)); +void FDECL(yyerror, (const char *)); +void FDECL(yywarning, (const char *)); +int NDECL(yywrap); int FDECL(get_floor_type, (CHAR_P)); int FDECL(get_room_type, (char *)); int FDECL(get_trap_type, (char *)); @@ -113,13 +111,36 @@ extern void NDECL(decl_init); void FDECL(add_opcode, (sp_lev *, int, genericptr_t)); -static boolean FDECL(write_common_data, (int,sp_lev *)); +static boolean FDECL(write_common_data, (int)); static boolean FDECL(write_maze, (int,sp_lev *)); static void NDECL(init_obj_classes); static int FDECL(case_insensitive_comp, (const char *, const char *)); +void VDECL(lc_pline, (const char *, ...)); void VDECL(lc_error, (const char *, ...)); +void VDECL(lc_warning, (const char *, ...)); +char * FDECL(decode_parm_chr, (CHAR_P)); +char * FDECL(decode_parm_str, (char *)); +struct opvar * FDECL(set_opvar_int, (struct opvar *, long)); +struct opvar * FDECL(set_opvar_coord, (struct opvar *, long)); +struct opvar * FDECL(set_opvar_region, (struct opvar *, long)); +struct opvar * FDECL(set_opvar_mapchar, (struct opvar *, long)); +struct opvar * FDECL(set_opvar_monst, (struct opvar *, long)); +struct opvar * FDECL(set_opvar_obj, (struct opvar *, long)); +struct opvar * FDECL(set_opvar_str, (struct opvar *, const char *)); +struct opvar * FDECL(set_opvar_var, (struct opvar *, const char *)); void VDECL(add_opvars, (sp_lev *, const char *, ...)); +void NDECL(break_stmt_start); +void FDECL(break_stmt_end, (sp_lev *)); +void FDECL(break_stmt_new, (sp_lev *, long)); +char *FDECL(funcdef_paramtypes, (struct lc_funcdefs *)); +const char *FDECL(spovar2str, (long)); +void FDECL(vardef_used, (struct lc_vardefs *, char *)); +void FDECL(check_vardef_type, (struct lc_vardefs *, char *, long)); +struct lc_vardefs * FDECL(add_vardef_type, (struct lc_vardefs *, char *, long)); +int FDECL(reverse_jmp_opcode, (int)); +struct opvar * FDECL(opvar_clone, (struct opvar *)); +void FDECL(start_level_def, (sp_lev **, char *)); static struct { @@ -273,8 +294,7 @@ char **argv; } fin = freopen(fname, "r", stdin); if (!fin) { - (void) fprintf(stderr,"Can't open \"%s\" for input.\n", - fname); + lc_pline("Can't open \"%s\" for input.\n", fname); perror(fname); errors_encountered = TRUE; } else { @@ -307,9 +327,10 @@ yyerror(s) const char *s; { char *e = ((char *)s + strlen(s) - 1); + (void) fprintf(stderr, "%s: line %d, pos %d: %s", fname, nh_line_number, - token_start_pos-strlen(curr_token), s); + token_start_pos - (int)strlen(curr_token), s); if (*e != '.' && *e != '!') (void) fprintf(stderr, " at \"%s\"", curr_token); (void) fprintf(stderr, "\n"); @@ -340,30 +361,84 @@ yywrap() return 1; } +/* + * lc_pline(): lev_comp version of pline(), stripped down version of + * core's pline(), with convoluted handling for variadic arguments to + * support , , and neither of the above. + * + * Using state for message/warning/error mode simplifies calling interface. + */ +#define LC_PLINE_MESSAGE 0 +#define LC_PLINE_WARNING 1 +#define LC_PLINE_ERROR 2 +static int lc_pline_mode = LC_PLINE_MESSAGE; + +#if defined(USE_STDARG) || defined(USE_VARARGS) +static void FDECL(lc_vpline, (const char *, va_list)); + void -lc_error(const char *fmt, ...) -{ - char buf[512]; - va_list argp; - - va_start(argp, fmt); - (void) vsnprintf(buf, 511, fmt, argp); - va_end(argp); - - yyerror(buf); +lc_pline VA_DECL(const char *, line) + VA_START(line); + VA_INIT(line, char *); + lc_vpline(line, VA_ARGS); + VA_END(); } +# ifdef USE_STDARG +static void +lc_vpline(const char *line, va_list the_args) { +# else +static void +lc_vpline(line, the_args) const char *line; va_list the_args; { +# endif + +#else /* USE_STDARG | USE_VARARG */ + +#define lc_vpline lc_pline + void -lc_warning(const char *fmt, ...) -{ - char buf[512]; - va_list argp; +lc_pline VA_DECL(const char *, line) +#endif /* USE_STDARG | USE_VARARG */ - va_start(argp, fmt); - (void) vsnprintf(buf, 511, fmt, argp); - va_end(argp); + char pbuf[3*BUFSZ]; + static char nomsg[] = "(no message)"; +/* Do NOT use VA_START and VA_END in here... see above */ - yywarning(buf); + if (!line || !*line) line = nomsg; /* shouldn't happen */ + if (index(line, '%')) { + Vsprintf(pbuf, line, VA_ARGS); + pbuf[BUFSZ-1] = '\0'; /* truncate if long */ + line = pbuf; + } + switch (lc_pline_mode) { + case LC_PLINE_ERROR: yyerror(line); break; + case LC_PLINE_WARNING: yywarning(line); break; + default: (void)fprintf(stderr, "%s\n", line); break; + } + lc_pline_mode = LC_PLINE_MESSAGE; /* reset to default */ + return; +} + +/*VARARGS1*/ +void +lc_error VA_DECL(const char *, line) + VA_START(line); + VA_INIT(line, const char *); + lc_pline_mode = LC_PLINE_ERROR; + lc_vpline(line, VA_ARGS); + VA_END(); + return; +} + +/*VARARGS1*/ +void +lc_warning VA_DECL(const char *, line) + VA_START(line); + VA_INIT(line, const char *); + lc_pline_mode = LC_PLINE_WARNING; + lc_vpline(line, VA_ARGS); + VA_END(); + return; } @@ -372,16 +447,17 @@ decode_parm_chr(chr) char chr; { static char buf[32]; + switch (chr) { - default: sprintf(buf, "unknown"); break; - case 'i': sprintf(buf, "int"); break; - case 'r': sprintf(buf, "region"); break; - case 's': sprintf(buf, "str"); break; - case 'O': sprintf(buf, "obj"); break; - case 'c': sprintf(buf, "coord"); break; - case ' ': sprintf(buf, "nothing"); break; - case 'm': sprintf(buf, "mapchar"); break; - case 'M': sprintf(buf, "monster"); break; + default: Strcpy(buf, "unknown"); break; + case 'i': Strcpy(buf, "int"); break; + case 'r': Strcpy(buf, "region"); break; + case 's': Strcpy(buf, "str"); break; + case 'O': Strcpy(buf, "obj"); break; + case 'c': Strcpy(buf, "coord"); break; + case ' ': Strcpy(buf, "nothing"); break; + case 'm': Strcpy(buf, "mapchar"); break; + case 'M': Strcpy(buf, "monster"); break; } return buf; } @@ -478,7 +554,7 @@ long val; struct opvar * set_opvar_str(ov, val) struct opvar *ov; -char *val; +const char *val; { if (ov) { ov->spovartyp = SPOVAR_STRING; @@ -490,7 +566,7 @@ char *val; struct opvar * set_opvar_var(ov, val) struct opvar *ov; -char *val; +const char *val; { if (ov) { ov->spovartyp = SPOVAR_VARIABLE; @@ -502,13 +578,36 @@ char *val; #define New(type) \ (type *) memset((genericptr_t)alloc(sizeof(type)), 0, sizeof(type)) -void -add_opvars(sp_lev *sp, const char *fmt, ...) -{ - const char *p; - va_list argp; +#if defined(USE_STDARG) || defined(USE_VARARGS) +static void FDECL(vadd_opvars, (sp_lev *, const char *, va_list)); - va_start(argp, fmt); +void +add_opvars VA_DECL2(sp_lev *, sp, const char *, fmt) + VA_START(fmt); + VA_INIT(fmt, char *); + vadd_opvars(sp, fmt, VA_ARGS); + VA_END(); +} + +# ifdef USE_STDARG +static void +vadd_opvars(sp_lev *sp, const char *fmt, va_list the_args) { +# else +static void +vadd_opvars(sp, fmt, the_args) sp_lev *sp; const char *fmt; va_list the_args; { +# endif + +#else /* USE_STDARG | USE_VARARG */ + +#define vadd_opvars add_opvars + +void +add_opvars VA_DECL2(sp_lev *, sp, const char *, fmt) +#endif /* USE_STDARG | USE_VARARG */ + + const char *p, *lp; + long la; +/* Do NOT use VA_START and VA_END in here... see above */ for(p = fmt; *p != '\0'; p++) { switch(*p) { @@ -516,74 +615,73 @@ add_opvars(sp_lev *sp, const char *fmt, ...) case 'i': /* integer */ { struct opvar *ov = New(struct opvar); - set_opvar_int(ov, va_arg(argp, long)); + set_opvar_int(ov, VA_NEXT(la, long)); add_opcode(sp, SPO_PUSH, ov); break; } case 'c': /* coordinate */ { struct opvar *ov = New(struct opvar); - set_opvar_coord(ov, va_arg(argp, long)); + set_opvar_coord(ov, VA_NEXT(la, long)); add_opcode(sp, SPO_PUSH, ov); break; } case 'r': /* region */ { struct opvar *ov = New(struct opvar); - set_opvar_region(ov, va_arg(argp, long)); + set_opvar_region(ov, VA_NEXT(la, long)); add_opcode(sp, SPO_PUSH, ov); break; } case 'm': /* mapchar */ { struct opvar *ov = New(struct opvar); - set_opvar_mapchar(ov, va_arg(argp, long)); + set_opvar_mapchar(ov, VA_NEXT(la, long)); add_opcode(sp, SPO_PUSH, ov); break; } case 'M': /* monster */ { struct opvar *ov = New(struct opvar); - set_opvar_monst(ov, va_arg(argp, long)); + set_opvar_monst(ov, VA_NEXT(la, long)); add_opcode(sp, SPO_PUSH, ov); break; } case 'O': /* object */ { struct opvar *ov = New(struct opvar); - set_opvar_obj(ov, va_arg(argp, long)); + set_opvar_obj(ov, VA_NEXT(la, long)); add_opcode(sp, SPO_PUSH, ov); break; } case 's': /* string */ { struct opvar *ov = New(struct opvar); - set_opvar_str(ov, va_arg(argp, char *)); + set_opvar_str(ov, VA_NEXT(lp, const char *)); add_opcode(sp, SPO_PUSH, ov); break; } case 'v': /* variable */ { struct opvar *ov = New(struct opvar); - set_opvar_var(ov, va_arg(argp, char *)); + set_opvar_var(ov, VA_NEXT(lp, const char *)); add_opcode(sp, SPO_PUSH, ov); break; } case 'o': /* opcode */ { - long i = va_arg(argp, int); + long i = VA_NEXT(la, int); if (i < 0 || i >= MAX_SP_OPCODES) - fprintf(stderr, "add_opvars: unknown opcode '%li'.\n", i); + lc_pline("add_opvars: unknown opcode '%ld'.", i); add_opcode(sp, i, NULL); break; } default: - fprintf(stderr, "add_opvars: illegal format character '%c'.\n", *p); + lc_pline("add_opvars: illegal format character '%c'.", *p); break; } } - - va_end(argp); + return; } void @@ -763,12 +861,12 @@ spovar2str(spovar) { static int togl = 0; static char buf[2][128]; - char *n = NULL; + const char *n = NULL; int is_array = (spovar & SPOVAR_ARRAY); spovar &= ~SPOVAR_ARRAY; switch (spovar) { - default: lc_error("spovar2str(%li)", spovar); break; + default: lc_error("spovar2str(%ld)", spovar); break; case SPOVAR_INT: n = "integer"; break; case SPOVAR_STRING: n = "string"; break; case SPOVAR_VARIABLE: n = "variable"; break; @@ -838,7 +936,7 @@ reverse_jmp_opcode(opcode) case SPO_JG: return SPO_JLE; case SPO_JLE: return SPO_JG; case SPO_JGE: return SPO_JL; - default: lc_error("Cannot reverse comparison jmp opcode %i.", opcode); return SPO_NULL; + default: lc_error("Cannot reverse comparison jmp opcode %d.", opcode); return SPO_NULL; } } @@ -875,7 +973,7 @@ opvar_clone(ov) break; default: { - lc_error("Unknown opvar_clone value type (%i)!", ov->spovartyp); + lc_error("Unknown opvar_clone value type (%d)!", ov->spovartyp); } } return tmpov; @@ -897,15 +995,15 @@ splev_add_from(splev, from_splev) void -start_level_def(splev, fname) +start_level_def(splev, ldfname) sp_lev **splev; -char *fname; +char *ldfname; { struct lc_funcdefs *f; - if (index(fname, '.')) - lc_error("Invalid dot ('.') in level name '%s'.", fname); - if ((int) strlen(fname) > 14) - lc_error("Level names limited to 14 characters ('%s').", fname); + if (index(ldfname, '.')) + lc_error("Invalid dot ('.') in level name '%s'.", ldfname); + if ((int) strlen(ldfname) > 14) + lc_error("Level names limited to 14 characters ('%s').", ldfname); f = function_definitions; while (f) { f->n_called = 0; @@ -1088,15 +1186,15 @@ char c; case 'H' : return(SCORR); case '{' : return(FOUNTAIN); case '\\' : return(THRONE); - case 'K' : - return(SINK); + case 'K' : return(SINK); case '}' : return(MOAT); case 'P' : return(POOL); case 'L' : return(LAVAPOOL); case 'I' : return(ICE); case 'W' : return(WATER); - case 'T' : return (TREE); - case 'F' : return (IRONBARS); /* Fe = iron */ + case 'T' : return (TREE); + case 'F' : return (IRONBARS); /* Fe = iron */ + case 'x' : return(MAX_TYPE); /* "see-through" */ } return(INVALID_TYPE); } @@ -1111,7 +1209,7 @@ genericptr_t dat; _opcode *tmp; if ((opc < 0) || (opc >= MAX_SP_OPCODES)) - lc_error("Unknown opcode '%i'", opc); + lc_error("Unknown opcode '%d'", opc); tmp = (_opcode *)alloc(sizeof(_opcode)*(nop+1)); if (sp->opcodes && nop) { @@ -1204,7 +1302,7 @@ sp_lev *sp; mbuf[((max_hig-1) * max_len) + (max_len-1) + 1] = '\0'; - add_opvars(sp, "siio", mbuf, max_hig, max_len, SPO_MAP); + add_opvars(sp, "siio", VA_PASS4(mbuf, max_hig, max_len, SPO_MAP)); for (dy = 0; dy < max_hig; dy++) Free(tmpmap[dy]); @@ -1218,9 +1316,8 @@ sp_lev *sp; * Output some info common to all special levels. */ static boolean -write_common_data(fd, lvl) +write_common_data(fd) int fd; -sp_lev *lvl; { static struct version_info version_data = { VERSION_NUMBER, VERSION_FEATURES, @@ -1242,7 +1339,7 @@ sp_lev *maze; { int i; - if (!write_common_data(fd, maze)) + if (!write_common_data(fd)) return FALSE; Write(fd, &(maze->n_opcodes), sizeof(maze->n_opcodes)); @@ -1253,7 +1350,7 @@ sp_lev *maze; Write(fd, &(tmpo.opcode), sizeof(tmpo.opcode)); if (tmpo.opcode < SPO_NULL || tmpo.opcode >= MAX_SP_OPCODES) - panic("write_maze: unknown opcode (%i).", tmpo.opcode); + panic("write_maze: unknown opcode (%d).", tmpo.opcode); if (tmpo.opcode == SPO_PUSH) { genericptr_t opdat = tmpo.opdat; @@ -1282,14 +1379,14 @@ sp_lev *maze; Free(ov->vardata.str); } break; - default: panic("write_maze: unknown data type (%i).", ov->spovartyp); + default: panic("write_maze: unknown data type (%d).", ov->spovartyp); } } else panic("write_maze: PUSH with no data."); } else { /* sanity check */ genericptr_t opdat = tmpo.opdat; if (opdat) - panic("write_maze: opcode (%i) has data.", tmpo.opcode); + panic("write_maze: opcode (%d) has data.", tmpo.opcode); } Free(tmpo.opdat); @@ -1335,7 +1432,7 @@ sp_lev *lvl; if (!lvl) panic("write_level_file"); if (be_verbose) - fprintf(stdout, "File: '%s', opcodes: %li\n", lbuf, lvl->n_opcodes); + fprintf(stdout, "File: '%s', opcodes: %ld\n", lbuf, lvl->n_opcodes); if (!write_maze(fout, lvl)) return FALSE; diff --git a/util/makedefs.c b/util/makedefs.c index 8555178e1..e4c6902ea 100644 --- a/util/makedefs.c +++ b/util/makedefs.c @@ -1294,6 +1294,11 @@ static const char *build_opts[] = { #ifdef NEWS "news file", #endif +#ifdef MENU_COLOR_REGEX + "menu colors via regular expressions", +#else + "menu colors via pmatch", +#endif #ifdef OVERLAY # ifdef MOVERLAY "MOVE overlays", @@ -1362,9 +1367,6 @@ static const char *build_opts[] = { #ifdef VISION_TABLES "vision tables", #endif -#ifdef WALLIFIED_MAZE - "walled mazes", -#endif #ifdef ZEROCOMP "zero-compressed save files", #endif diff --git a/win/share/other.txt b/win/share/other.txt index 14ec940d5..292295085 100644 --- a/win/share/other.txt +++ b/win/share/other.txt @@ -394,7 +394,26 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 20 (corridor) +# tile 20 (dark part of a room) +{ + MAMAMAMAMAMAMAMA + AMAMAMAMAMAMAMAM + MAMAMAMAMAMAMAMA + AMAMAMAMAMAMAMAM + MAMAMAMAMAMAMAMA + AMAMAMAMAMAMAMAM + MAMAMAMAMAMAMAMA + AMAMAMAPPMAMAMAM + MAMAMAMPPAMAMAMA + AMAMAMAMAMAMAMAM + MAMAMAMAMAMAMAMA + AMAMAMAMAMAMAMAM + MAMAMAMAMAMAMAMA + AMAMAMAMAMAMAMAM + MAMAMAMAMAMAMAMA + AMAMAMAMAMAMAMAM +} +# tile 21 (corridor) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -413,7 +432,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 21 (lit corridor) +# tile 22 (lit corridor) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -432,7 +451,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 22 (staircase up) +# tile 23 (staircase up) { AAAAAAAAAAAAAAMA AADJJJJJJJJJDAMA @@ -451,7 +470,7 @@ P = (108, 145, 182) AAAAAAAAAAAAAAMA AAAAAAAAAAAAAAAA } -# tile 23 (staircase down) +# tile 24 (staircase down) { AAAAAAAAAAAAAAMA AADJJJJJJJJJDAMA @@ -470,7 +489,7 @@ P = (108, 145, 182) AAAAAAAAAAAAAAMA AAAAAAAAAAAAAAAA } -# tile 24 (ladder up) +# tile 25 (ladder up) { ADAAAAAAAAAAADMA AADAAAANAAAADAMA @@ -489,7 +508,7 @@ P = (108, 145, 182) AAAAAAAAAAAAAAMA AAAAAAAAAAAAAAAA } -# tile 25 (ladder down) +# tile 26 (ladder down) { ADAAAAAAAAAAADMA AADAAAANAAAADAMA @@ -508,7 +527,7 @@ P = (108, 145, 182) AAAAAAAAAAAAAAMA AAAAAAAAAAAAAAAA } -# tile 26 (altar) +# tile 27 (altar) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -527,7 +546,7 @@ P = (108, 145, 182) MMMAAAAAAAAAAAMM MMMMMMMMMMMMMMMM } -# tile 27 (grave) +# tile 28 (grave) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -546,7 +565,7 @@ P = (108, 145, 182) FFFFFFFFFFFFFFFM MMMMMMMMMMMMMMMM } -# tile 28 (opulent throne) +# tile 29 (opulent throne) { MMMMMMMMMMMMMMMM MMMMMHHHHHMMMMMM @@ -565,7 +584,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 29 (sink) +# tile 30 (sink) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -584,7 +603,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 30 (fountain) +# tile 31 (fountain) { MMMMEMMMMEMMMMMM MMEEEEMMEEEMMMMM @@ -603,7 +622,7 @@ P = (108, 145, 182) MMMMAAAAAAAAAMMM MMMMMMMMMMMMMMMM } -# tile 31 (water) +# tile 32 (water) { MMMMMMMMMMNNNMMM MEEEEMMMMNEMENMM @@ -622,7 +641,7 @@ P = (108, 145, 182) MEMMEEMMMEMMEEEM EEMMMMEEEMMMMMEE } -# tile 32 (ice) +# tile 33 (ice) { NNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNN @@ -641,7 +660,7 @@ P = (108, 145, 182) NNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNN } -# tile 33 (molten lava) +# tile 34 (molten lava) { DDDDDDCDDDDDDDDD DDDDDCDKDDDDDDDD @@ -660,7 +679,7 @@ P = (108, 145, 182) DDDDKKDDDDCDDDDD DDDDDDDDDDDKDDDD } -# tile 34 (lowered drawbridge) +# tile 35 (lowered drawbridge) { EKKAKKKKKKKAKKAE EJKKKKKKKKKKKJAA @@ -679,7 +698,7 @@ P = (108, 145, 182) EEJJJJJJJJJJJAAA EJKKKKKKKKKKKJAA } -# tile 35 (lowered drawbridge) +# tile 36 (lowered drawbridge) { EEEEEEEEEEEEEEEE JEJKJEJKJEJKJEJK @@ -698,7 +717,7 @@ P = (108, 145, 182) AAAAAAAAAAAAAAAA AAAEAAAEAAAEAAAE } -# tile 36 (raised drawbridge) +# tile 37 (raised drawbridge) { MMMMMMMMMMMMMMMM MMJKJMJKJMJKJMMM @@ -717,7 +736,7 @@ P = (108, 145, 182) MMMAAAMAAAMAAAMM MMMMMMMMMMMMMMMM } -# tile 37 (raised drawbridge) +# tile 38 (raised drawbridge) { MMMMMMMMMMMMMMMM MMJJJJJJJJJJJMMM @@ -736,7 +755,7 @@ P = (108, 145, 182) MMMAAAAAAAAAAAMM MMMMMMMMMMMMMMMM } -# tile 38 (air) +# tile 39 (air) { BBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBB @@ -755,7 +774,7 @@ P = (108, 145, 182) BBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBB } -# tile 39 (cloud) +# tile 40 (cloud) { BBBBBBBBBBBBBBBB BBBBBNNNNNNNBBBB @@ -774,7 +793,7 @@ P = (108, 145, 182) BBBBBBOOOOBBBBBB BBBBBBBBBBBBBBBB } -# tile 40 (water) +# tile 41 (water) { EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE @@ -793,7 +812,7 @@ P = (108, 145, 182) EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE } -# tile 41 (arrow trap) +# tile 42 (arrow trap) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -812,7 +831,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 42 (dart trap) +# tile 43 (dart trap) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -831,7 +850,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 43 (falling rock trap) +# tile 44 (falling rock trap) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -850,7 +869,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 44 (squeaky board) +# tile 45 (squeaky board) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -869,7 +888,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 45 (bear trap) +# tile 46 (bear trap) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -888,7 +907,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 46 (land mine) +# tile 47 (land mine) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -907,7 +926,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 47 (rolling boulder trap) +# tile 48 (rolling boulder trap) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -926,7 +945,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 48 (sleeping gas trap) +# tile 49 (sleeping gas trap) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -945,7 +964,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 49 (rust trap) +# tile 50 (rust trap) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -964,7 +983,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 50 (fire trap) +# tile 51 (fire trap) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -983,7 +1002,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 51 (pit) +# tile 52 (pit) { AAAAAAAAAAAAAAAA AMAAAAAAAAAAAABA @@ -1002,7 +1021,7 @@ P = (108, 145, 182) AMPPPPPPPPPPPPPA AAAAAAAAAAAAAAAA } -# tile 52 (spiked pit) +# tile 53 (spiked pit) { AAAAAAAAAAAAAAAA AMAAAAAAAAAAAABA @@ -1021,7 +1040,7 @@ P = (108, 145, 182) AMPPPPPPPPPPPPPA AAAAAAAAAAAAAAAA } -# tile 53 (hole) +# tile 54 (hole) { MMMMMMMMMMMMMMMM MMMMMMAAAAMMMMMM @@ -1040,7 +1059,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 54 (trap door) +# tile 55 (trap door) { AAAAAAAAAAAAAAAA AMAAAAAAAAAAAABA @@ -1059,7 +1078,7 @@ P = (108, 145, 182) AMPPPPPPPPPPPPPA AAAAAAAAAAAAAAAA } -# tile 55 (teleportation trap) +# tile 56 (teleportation trap) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -1078,7 +1097,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 56 (level teleporter) +# tile 57 (level teleporter) { MMMMMMMMMMMMMMMM MMMMMDDADDMMMMMM @@ -1097,7 +1116,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 57 (magic portal) +# tile 58 (magic portal) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -1116,7 +1135,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 58 (web) +# tile 59 (web) { OAOAMOAMMMOMMMMO MOMNNNNMNOAMMOOA @@ -1135,7 +1154,7 @@ P = (108, 145, 182) MOAMMMMMMMMMMMMM OAMMMMMMMMMMMMMM } -# tile 59 (statue trap) +# tile 60 (statue trap) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -1154,7 +1173,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 60 (magic trap) +# tile 61 (magic trap) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -1173,7 +1192,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 61 (anti-magic field) +# tile 62 (anti-magic field) { MMMMMMMMMMMMMMMM MMMMMMDDDDDMMMMM @@ -1192,7 +1211,7 @@ P = (108, 145, 182) MMMMMAAAAAMMMMMM MMMMMMMMMMMMMMMM } -# tile 62 (polymorph trap) +# tile 63 (polymorph trap) { MMMMMMMMMMMMMMMM MMMMMDDDDDMMMMMM @@ -1211,7 +1230,7 @@ P = (108, 145, 182) MMMMMMAAAAAMMMMM MMMMMMMMMMMMMMMM } -# tile 63 (wall) +# tile 64 (wall) { MMMMMMMNNMMMMMMM MMMMMMNNMMMMMMMM @@ -1230,7 +1249,7 @@ P = (108, 145, 182) MMMMMMMMMNNMMMMM MMMMMMMMNNMMMMMM } -# tile 64 (wall) +# tile 65 (wall) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1249,26 +1268,26 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 65 (wall) -{ - NNNNNMMMMMMMMMMM - MMMMNMMMMMMMMMMM - MMMMNMMMMMMMMMMM - MMMMNMMMMMMMMMMM - MMMMNMMMMMMMMMMM - MMMMNMMMMMMMMMMM - MMMMNMMMMMMMMMMM - MMMMNMMMMMMMMMMM - MMMMNNNNNNNNNMMM - MMMMMMMMMMMMNMMM - MMMMMMMMMMMMNMMM - MMMMMMMMMMMMNMMM - MMMMMMMMMMMMNMMM - MMMMMMMMMMMMNMMM - MMMMMMMMMMMMNMMM - MMMMMMMMMMMMNNNN -} # tile 66 (wall) +{ + NNNNNMMMMMMMMMMM + MMMMNMMMMMMMMMMM + MMMMNMMMMMMMMMMM + MMMMNMMMMMMMMMMM + MMMMNMMMMMMMMMMM + MMMMNMMMMMMMMMMM + MMMMNMMMMMMMMMMM + MMMMNMMMMMMMMMMM + MMMMNNNNNNNNNMMM + MMMMMMMMMMMMNMMM + MMMMMMMMMMMMNMMM + MMMMMMMMMMMMNMMM + MMMMMMMMMMMMNMMM + MMMMMMMMMMMMNMMM + MMMMMMMMMMMMNMMM + MMMMMMMMMMMMNNNN +} +# tile 67 (wall) { MMMMMMMMMMMMNNNN MMMMMMMMMMMMNMMM @@ -1287,7 +1306,7 @@ P = (108, 145, 182) MMMMNMMMMMMMMMMM NNNNNMMMMMMMMMMM } -# tile 67 (cmap 67) +# tile 68 (cmap 68) { MMMMAAAAMMMMMMMM MMAMMMMAAMMAAMMM @@ -1306,7 +1325,7 @@ P = (108, 145, 182) MMMMAAMMMMAAAMMM MMMMMMMMMMMMMMMM } -# tile 68 (cmap 68) +# tile 69 (cmap 69) { MMMMMMMMMMMMMMMM MMMMMNNNNNNMMMMM @@ -1325,7 +1344,7 @@ P = (108, 145, 182) MMMMMNNNNNNMMMMM MMMMMMMMMMMMMMMM } -# tile 69 (cmap 69) +# tile 70 (cmap 70) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1344,7 +1363,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 70 (cmap 70) +# tile 71 (cmap 71) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1363,7 +1382,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 71 (cmap 71) +# tile 72 (cmap 72) { MMMMMMMMMMMMMMMM MMMMMIMMMMIMMMMM @@ -1382,7 +1401,7 @@ P = (108, 145, 182) MMMMMIMMMMIMMMMM MMMMMMMMMMMMMMMM } -# tile 72 (cmap 72) +# tile 73 (cmap 73) { MMMMMMMMMMMMMMMM MCCCCCCCCCCCCCCC @@ -1401,7 +1420,7 @@ P = (108, 145, 182) MCCCCCCCCCCCCCCM MMMMMMMMMMMMMMMM } -# tile 73 (cmap 73) +# tile 74 (cmap 74) { MMMMMMMHHMMMMMMM MMMMMMMHHMMMMMMM @@ -1420,7 +1439,7 @@ P = (108, 145, 182) MMMMMMMHHMMMMMMM MMMMMMMHHMMMMMMM } -# tile 74 (cmap 74) +# tile 75 (cmap 75) { MMMMMMMMMMMMMMMM MMMMMMNNNNNMMMMM @@ -1439,7 +1458,45 @@ P = (108, 145, 182) MMMMMNNNNNMMMMMM MMMMMMMMMMMMMMMM } -# tile 75 (cmap 75) +# tile 76 (poison cloud) +{ + BBBBBBBBBBBBBBBB + BBBBBFFFFFFFBBBB + BBBFFFFFFFFFFBBB + BBFFFFFFFFFGFFBB + BBFFFFFFFFFFFFFB + BFFFFFFFFFFFFGFB + FFFGFFFFFFFFGFFF + FFFFFFFFFFGGFFFF + FFFFFFFFFFFFFGFF + FFGGFFFFFFFGGFFG + FFFFFGGGGGFFFFGG + BGFFFFFFFFFFGGGB + BBGGGFFFFGGGGGGB + BBBGGGGGGGGGGBBB + BBBBBBGGGGBBBBBB + BBBBBBBBBBBBBBBB +} +# tile 77 (valid position) +{ + MMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMM + MMMMMGGGGMMMMMMM + MMMMGGGGGGMMMMMM + MMMGGFFFFGGMMMMM + MMMGGFMMMGGFMMMM + MMMMFFMMMGGFMMMM + MMMMMMMMGGFFMMMM + MMMMMMMGGFFMMMMM + MMMMMMGGFFMMMMMM + MMMMMMGGFMMMMMMM + MMMMMMMFFMMMMMMM + MMMMMMGGMMMMMMMM + MMMMMMGGFMMMMMMM + MMMMMMMFFMMMMMMM + MMMMMMMMMMMMMMMM +} +# tile 78 (cmap 78) { AAAAAAADDDDDDAAA AAAAADDDDDDDDDDD @@ -1458,7 +1515,7 @@ P = (108, 145, 182) AAAADDDDDDMMMMMM AAAADDDDDDMMMMMM } -# tile 76 (cmap 76) +# tile 79 (cmap 79) { AAAAAAAAAAAAAAAA DDAAAAAAAAAAAAAA @@ -1477,7 +1534,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 77 (cmap 77) +# tile 80 (cmap 80) { AAAAAAAAAAAAAAAA AAADDDDDAAAAAAAA @@ -1496,7 +1553,7 @@ P = (108, 145, 182) MMMMDDDDDDDDDDDD MMMMDDDDDDDDDDDA } -# tile 78 (cmap 78) +# tile 81 (cmap 81) { AAAADDDDDDMMMMMM AAAADDDDDDDMMMMM @@ -1515,7 +1572,7 @@ P = (108, 145, 182) DDDDDDDMMMMMMMMM DDCCDDDMMMMMMMMM } -# tile 79 (cmap 79) +# tile 82 (cmap 82) { MMMMDDDDDDDDDDDA MMMMDDDDDDDDDDDA @@ -1534,7 +1591,7 @@ P = (108, 145, 182) MMMMMMDDDDDDDDAA MMMMMMMDDDDDDDAA } -# tile 80 (cmap 80) +# tile 83 (cmap 83) { DDDCDDDMMMMMMMMM DDDCDDDMMMMMMMMM @@ -1553,7 +1610,7 @@ P = (108, 145, 182) AAAAAAAAAAAADDDD AAAAAAAAAAAAAADD } -# tile 81 (cmap 81) +# tile 84 (cmap 84) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1572,7 +1629,7 @@ P = (108, 145, 182) DDDDDDDDDDDDDDDD DDDDDDDDDDDDDDAA } -# tile 82 (cmap 82) +# tile 85 (cmap 85) { MMMMMMDDDDDDDDAA MMMMMMDDDDDDDDDA @@ -1591,7 +1648,7 @@ P = (108, 145, 182) DDAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA } -# tile 83 (explosion dark 0) +# tile 86 (explosion dark 0) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1610,7 +1667,7 @@ P = (108, 145, 182) MMAAAAMMAAAAMMMM MMAAAMMAAAAAMMMM } -# tile 84 (explosion dark 1) +# tile 87 (explosion dark 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1629,7 +1686,7 @@ P = (108, 145, 182) MMMMMMMMAMAMAPAA MPAMMMAPAAAAAAAA } -# tile 85 (explosion dark 2) +# tile 88 (explosion dark 2) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1648,7 +1705,7 @@ P = (108, 145, 182) AAMAMMAMAAAAMMMM AMAAMMAMAAAAAMMM } -# tile 86 (explosion dark 3) +# tile 89 (explosion dark 3) { MMAAAMAMAAAMMMMM MMAAAMAAAAAMAPMM @@ -1667,7 +1724,7 @@ P = (108, 145, 182) MMAMAMMMAAPMMMPA MMMMAMMMMMMMMMPA } -# tile 87 (explosion dark 4) +# tile 90 (explosion dark 4) { APAAAMMPPAPAAAAA MAPAMMAMAAAPAAAM @@ -1686,7 +1743,7 @@ P = (108, 145, 182) AAAAAAAAAAAAAMAA AAAAAAAAAAAMHHMM } -# tile 88 (explosion dark 5) +# tile 91 (explosion dark 5) { MMAAAMAMAMAAAAMM MMAAAAAMAMAAAAMM @@ -1705,7 +1762,7 @@ P = (108, 145, 182) AAAMMMAAAAAAAMMM MMMMPPAAAAAAAAMM } -# tile 89 (explosion dark 6) +# tile 92 (explosion dark 6) { MMMMAMMMMMMMAMMP MMMMAMMMMMMMAAMM @@ -1724,7 +1781,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 90 (explosion dark 7) +# tile 93 (explosion dark 7) { PPPAAAAAPAAAMAMM AAPPAAPPPPAMAMMM @@ -1743,7 +1800,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 91 (explosion dark 8) +# tile 94 (explosion dark 8) { MMMMPMMAAAAAAAMM MMAMMAMAAMAMAAMM @@ -1762,7 +1819,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 92 (explosion noxious 0) +# tile 95 (explosion noxious 0) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1781,7 +1838,7 @@ P = (108, 145, 182) MMFFFFMMFFFFMMMM MMFFFMMFFFFFMMMM } -# tile 93 (explosion noxious 1) +# tile 96 (explosion noxious 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1800,7 +1857,7 @@ P = (108, 145, 182) MMMMMMMMFMFMFGFF MGHMMMHGHHFFFFFF } -# tile 94 (explosion noxious 2) +# tile 97 (explosion noxious 2) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1819,7 +1876,7 @@ P = (108, 145, 182) FFMFMMFMFFFFMMMM FMFFMMFMFFFFFMMM } -# tile 95 (explosion noxious 3) +# tile 98 (explosion noxious 3) { MMFFFMFMFFFMMMMM MMFFFMFFFFFMFGMM @@ -1838,7 +1895,7 @@ P = (108, 145, 182) MMFMFMMMFHGMMMGH MMMMFMMMMMMMMMGH } -# tile 96 (explosion noxious 4) +# tile 99 (explosion noxious 4) { FGHFFMMGGFGHFFFF MHGHMMFMFFHGFHFM @@ -1857,7 +1914,7 @@ P = (108, 145, 182) HHHHNHNHNMGGGMGF GGGGNHHHGGGMHHMM } -# tile 97 (explosion noxious 5) +# tile 100 (explosion noxious 5) { MMFFFMFMFMFFFFMM MMFFFFFMFMFFFFMM @@ -1876,7 +1933,7 @@ P = (108, 145, 182) HFHMMMFFFFFFFMMM MMMMGGFFFFFFFFMM } -# tile 98 (explosion noxious 6) +# tile 101 (explosion noxious 6) { MMMMFMMMMMMMHMMG MMMMFMMMMMMMFHMM @@ -1895,7 +1952,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 99 (explosion noxious 7) +# tile 102 (explosion noxious 7) { GGGHHHHHGHHHMHMM HHGGHHGGGGHMFMMM @@ -1914,7 +1971,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 100 (explosion noxious 8) +# tile 103 (explosion noxious 8) { MMMMGMMFFFFFFFMM MMFMMFMFFMFMFFMM @@ -1933,7 +1990,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 101 (explosion muddy 0) +# tile 104 (explosion muddy 0) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1952,7 +2009,7 @@ P = (108, 145, 182) MMJJJJKKJJJJKKKK MMJJJKKJJJJJKKKK } -# tile 102 (explosion muddy 1) +# tile 105 (explosion muddy 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1971,7 +2028,7 @@ P = (108, 145, 182) KKKKKKKKJKJKJCJJ KCLKKKLCLLJJJJJJ } -# tile 103 (explosion muddy 2) +# tile 106 (explosion muddy 2) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -1990,7 +2047,7 @@ P = (108, 145, 182) JJKJKKJKJJJJMMMM JKJJKKJKJJJJJMMM } -# tile 104 (explosion muddy 3) +# tile 107 (explosion muddy 3) { MMJJJKJKJJJKKKKK MMJJJKJJJJJKJCKK @@ -2009,7 +2066,7 @@ P = (108, 145, 182) MMJMJKKKJLCKKKCL MMMMJKKKKKKKKKCL } -# tile 105 (explosion muddy 4) +# tile 108 (explosion muddy 4) { JCLJJKKCCJCLJJJJ KLCLKKJKJJLCJLJK @@ -2028,7 +2085,7 @@ P = (108, 145, 182) LLLLCLCLCKCCCKCJ CCCCCLLLCCCKLLKK } -# tile 106 (explosion muddy 5) +# tile 109 (explosion muddy 5) { KKJJJKJKJKJJJJMM KKJJJJJKJKJJJJMM @@ -2047,7 +2104,7 @@ P = (108, 145, 182) LJLKKKJJJJJJJMMM KKKKCCJJJJJJJJMM } -# tile 107 (explosion muddy 6) +# tile 110 (explosion muddy 6) { MMMMJKKKKKKKLKKC MMMMJKKKKKKKJLKK @@ -2066,7 +2123,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 108 (explosion muddy 7) +# tile 111 (explosion muddy 7) { CCCLLLLLCLLLKLKK LLCCLLCCCCLKJKKK @@ -2085,7 +2142,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 109 (explosion muddy 8) +# tile 112 (explosion muddy 8) { KKKKCKKJJJJJJJMM KKJKKJKJJKJKJJMM @@ -2104,7 +2161,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 110 (explosion wet 0) +# tile 113 (explosion wet 0) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2123,7 +2180,7 @@ P = (108, 145, 182) MMEEEEPPEEEEPPPP MMEEEPPEEEEEPPPP } -# tile 111 (explosion wet 1) +# tile 114 (explosion wet 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2142,7 +2199,7 @@ P = (108, 145, 182) PPPPPPPPEPEPEBEE PBNPPPNBEEEEEEEE } -# tile 112 (explosion wet 2) +# tile 115 (explosion wet 2) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2161,7 +2218,7 @@ P = (108, 145, 182) EEPEPPEPEEEEMMMM EPEEPPEPEEEEEMMM } -# tile 113 (explosion wet 3) +# tile 116 (explosion wet 3) { MMEEEPEPEEEPPPPP MMEEEPEEEEEPEBPP @@ -2180,7 +2237,7 @@ P = (108, 145, 182) MMEMEPPPENBPPPBE MMMMEPPPPPPPPPBE } -# tile 114 (explosion wet 4) +# tile 117 (explosion wet 4) { EBNEEPPBBEBNEEEE PNBNPPEPEEEBENEP @@ -2199,7 +2256,7 @@ P = (108, 145, 182) EEEEEEEEEPBBBPBE BBBBEEEEBBBPNNPP } -# tile 115 (explosion wet 5) +# tile 118 (explosion wet 5) { PPEEEPEPEPEEEEMM PPEEEEEPEPEEEEMM @@ -2218,7 +2275,7 @@ P = (108, 145, 182) NENPPPEEEEEEEMMM PPPPBBEEEEEEEEMM } -# tile 116 (explosion wet 6) +# tile 119 (explosion wet 6) { MMMMEPPPPPPPNPPB MMMMEPPPPPPPENPP @@ -2237,7 +2294,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 117 (explosion wet 7) +# tile 120 (explosion wet 7) { BBBEEEEEBEEEPEPP EEBBEEBBBBEPEPPP @@ -2256,7 +2313,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 118 (explosion wet 8) +# tile 121 (explosion wet 8) { PPPPBPPEEEEEEEMM PPEPPEPEEPEPEEMM @@ -2275,7 +2332,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 119 (explosion magical 0) +# tile 122 (explosion magical 0) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2294,7 +2351,7 @@ P = (108, 145, 182) MMEEEEIIEEEEIIII MMEEEIIEEEEEIIII } -# tile 120 (explosion magical 1) +# tile 123 (explosion magical 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2313,7 +2370,7 @@ P = (108, 145, 182) IIIIIIIIEIEIELEE ILHIIIHLHHEEEEEE } -# tile 121 (explosion magical 2) +# tile 124 (explosion magical 2) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2332,7 +2389,7 @@ P = (108, 145, 182) EEIEIIEIEEEEMMMM EIEEIIEIEEEEEMMM } -# tile 122 (explosion magical 3) +# tile 125 (explosion magical 3) { MMEEEIEIEEEIIIII MMEEEIEEEEEIEIII @@ -2351,7 +2408,7 @@ P = (108, 145, 182) MMEMEIIIENIIIIIN MMMMEIIIIIIIIIIN } -# tile 123 (explosion magical 4) +# tile 126 (explosion magical 4) { EINEEIIIIEINEEEE ININIIEIEENIENEI @@ -2370,7 +2427,7 @@ P = (108, 145, 182) NNNNNNNNNIIIIIIE IIIINNNNIIIINNII } -# tile 124 (explosion magical 5) +# tile 127 (explosion magical 5) { IIEEEIEIEIEEEEMM IIEEEEEIEIEEEEMM @@ -2389,7 +2446,7 @@ P = (108, 145, 182) NENIIIEEEEEEEMMM IIIIIIEEEEEEEEMM } -# tile 125 (explosion magical 6) +# tile 128 (explosion magical 6) { MMMMEIIIIIIIHIII MMMMEIIIIIIIEHII @@ -2408,7 +2465,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 126 (explosion magical 7) +# tile 129 (explosion magical 7) { IIINNNNNINNNINII NNIINNIIIINIEIII @@ -2427,7 +2484,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 127 (explosion magical 8) +# tile 130 (explosion magical 8) { IIIIIIIEEEEEEEMM IIEIIEIEEIEIEEMM @@ -2446,7 +2503,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 128 (explosion fiery 0) +# tile 131 (explosion fiery 0) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2465,7 +2522,7 @@ P = (108, 145, 182) MMDDDDCCDDDDCCCC MMDDDCCDDDDDCCCC } -# tile 129 (explosion fiery 1) +# tile 132 (explosion fiery 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2484,7 +2541,7 @@ P = (108, 145, 182) CCCCCCCCDCDCDLDD CLHCCCHLHHDDDDDD } -# tile 130 (explosion fiery 2) +# tile 133 (explosion fiery 2) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2503,7 +2560,7 @@ P = (108, 145, 182) DDCDCCDCDDDDMMMM DCDDCCDCDDDDDMMM } -# tile 131 (explosion fiery 3) +# tile 134 (explosion fiery 3) { MMDDDCDCDDDCCCCC MMDDDCDDDDDCDLCC @@ -2522,7 +2579,7 @@ P = (108, 145, 182) MMDMDCCCDHLCCCLH MMMMDCCCCCCCCCLH } -# tile 132 (explosion fiery 4) +# tile 135 (explosion fiery 4) { DLHDDCCLLDLHDDDD CHLHCCDCDDHLDHDC @@ -2541,7 +2598,7 @@ P = (108, 145, 182) HHHHNHNHNCLLLCLD LLLLNHHHLLLCHHCC } -# tile 133 (explosion fiery 5) +# tile 136 (explosion fiery 5) { CCDDDCDCDCDDDDMM CCDDDDDCDCDDDDMM @@ -2560,7 +2617,7 @@ P = (108, 145, 182) HDHCCCDDDDDDDMMM CCCCLLDDDDDDDDMM } -# tile 134 (explosion fiery 6) +# tile 137 (explosion fiery 6) { MMMMDCCCCCCCHCCL MMMMDCCCCCCCDHCC @@ -2579,7 +2636,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 135 (explosion fiery 7) +# tile 138 (explosion fiery 7) { LLLHHHHHLHHHCHCC HHLLHHLLLLHCDCCC @@ -2598,7 +2655,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 136 (explosion fiery 8) +# tile 139 (explosion fiery 8) { CCCCLCCDDDDDDDMM CCDCCDCDDCDCDDMM @@ -2617,7 +2674,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 137 (explosion frosty 0) +# tile 140 (explosion frosty 0) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2636,7 +2693,7 @@ P = (108, 145, 182) MMEEEEPPNBEEPPPP MMEEEPPEEEEEPPPP } -# tile 138 (explosion frosty 1) +# tile 141 (explosion frosty 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2655,7 +2712,7 @@ P = (108, 145, 182) PPPPPPPPEPEPEBEE PBNPPPNBNNEEEEEE } -# tile 139 (explosion frosty 2) +# tile 142 (explosion frosty 2) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2674,7 +2731,7 @@ P = (108, 145, 182) EEPEPPEPEEEEMMMM EPEEPPEPEEEEEMMM } -# tile 140 (explosion frosty 3) +# tile 143 (explosion frosty 3) { MMEEEPEPEEEPPPPP MMEEEPEEEEEPEBPP @@ -2693,7 +2750,7 @@ P = (108, 145, 182) MMEMEPPPENBPPPBN MMMMEPPPPPPPPPBN } -# tile 141 (explosion frosty 4) +# tile 144 (explosion frosty 4) { EBNEEPPBBEBNEEEE PNBNPPEPEENBENEP @@ -2712,7 +2769,7 @@ P = (108, 145, 182) NNNNNNNNNPBBBPBE BBBBNNNNBBBPNNPP } -# tile 142 (explosion frosty 5) +# tile 145 (explosion frosty 5) { PPEEEPEPEPEEEEMM PPEEEEEPEPEEEEMM @@ -2731,7 +2788,7 @@ P = (108, 145, 182) NENPPPEEEEEEEMMM PPPPBBEEEEEEEEMM } -# tile 143 (explosion frosty 6) +# tile 146 (explosion frosty 6) { MMMMEPPPPPPPNPPB MMMMEPPPPPPPENPP @@ -2750,7 +2807,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 144 (explosion frosty 7) +# tile 147 (explosion frosty 7) { BBBNNNNNBNNNPNPP NNBBNNBBBBNPEPPP @@ -2769,7 +2826,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 145 (explosion frosty 8) +# tile 148 (explosion frosty 8) { PPPPBPPEEEEEEEMM PPEPPEPEEPEPEEMM @@ -2788,7 +2845,7 @@ P = (108, 145, 182) MMMMMMMMMMMNMMMM MMMMMMMMMMMMMMMM } -# tile 146 (zap 0 0) +# tile 149 (zap 0 0) { MMMMMMMIIMMMMMMM MMMMMMIIIIMMMMMM @@ -2807,7 +2864,7 @@ P = (108, 145, 182) MMMMMMIIIIMMMMMM MMMMMMMIIMMMMMMM } -# tile 147 (zap 0 1) +# tile 150 (zap 0 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2826,7 +2883,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 148 (zap 0 2) +# tile 151 (zap 0 2) { IIIMMMMMMMMMMMMM IIIIMMMMMMMMMMMM @@ -2845,7 +2902,7 @@ P = (108, 145, 182) MMMMMMMMMMMMIIII MMMMMMMMMMMMMIII } -# tile 149 (zap 0 3) +# tile 152 (zap 0 3) { MMMMMMMMMMMMMIII MMMMMMMMMMMMIIII @@ -2864,7 +2921,7 @@ P = (108, 145, 182) IIIIMMMMMMMMMMMM IIIMMMMMMMMMMMMM } -# tile 150 (zap 1 0) +# tile 153 (zap 1 0) { MMMMMMMCCMMMMMMM MMMMMMCCCCMMMMMM @@ -2883,7 +2940,7 @@ P = (108, 145, 182) MMMMMMCCCCMMMMMM MMMMMMMCCMMMMMMM } -# tile 151 (zap 1 1) +# tile 154 (zap 1 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2902,7 +2959,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 152 (zap 1 2) +# tile 155 (zap 1 2) { CCCMMMMMMMMMMMMM CCCCMMMMMMMMMMMM @@ -2921,7 +2978,7 @@ P = (108, 145, 182) MMMMMMMMMMMMCCCC MMMMMMMMMMMMMCCC } -# tile 153 (zap 1 3) +# tile 156 (zap 1 3) { MMMMMMMMMMMMMCCC MMMMMMMMMMMMCCCC @@ -2940,7 +2997,7 @@ P = (108, 145, 182) CCCCMMMMMMMMMMMM CCCMMMMMMMMMMMMM } -# tile 154 (zap 2 0) +# tile 157 (zap 2 0) { MMMMMMMNNMMMMMMM MMMMMMNNNNMMMMMM @@ -2959,7 +3016,7 @@ P = (108, 145, 182) MMMMMMNNNNMMMMMM MMMMMMMNNMMMMMMM } -# tile 155 (zap 2 1) +# tile 158 (zap 2 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -2978,7 +3035,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 156 (zap 2 2) +# tile 159 (zap 2 2) { NNNMMMMMMMMMMMMM NNNNMMMMMMMMMMMM @@ -2997,7 +3054,7 @@ P = (108, 145, 182) MMMMMMMMMMMMNNNN MMMMMMMMMMMMMNNN } -# tile 157 (zap 2 3) +# tile 160 (zap 2 3) { MMMMMMMMMMMMMNNN MMMMMMMMMMMMNNNN @@ -3016,7 +3073,7 @@ P = (108, 145, 182) NNNNMMMMMMMMMMMM NNNMMMMMMMMMMMMM } -# tile 158 (zap 3 0) +# tile 161 (zap 3 0) { MMMMMMMBBMMMMMMM MMMMMMBBBBMMMMMM @@ -3035,7 +3092,7 @@ P = (108, 145, 182) MMMMMMBBBBMMMMMM MMMMMMMBBMMMMMMM } -# tile 159 (zap 3 1) +# tile 162 (zap 3 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -3054,7 +3111,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 160 (zap 3 2) +# tile 163 (zap 3 2) { BBBMMMMMMMMMMMMM BBBBMMMMMMMMMMMM @@ -3073,7 +3130,7 @@ P = (108, 145, 182) MMMMMMMMMMMMBBBB MMMMMMMMMMMMMBBB } -# tile 161 (zap 3 3) +# tile 164 (zap 3 3) { MMMMMMMMMMMMMBBB MMMMMMMMMMMMBBBB @@ -3092,7 +3149,7 @@ P = (108, 145, 182) BBBBMMMMMMMMMMMM BBBMMMMMMMMMMMMM } -# tile 162 (zap 4 0) +# tile 165 (zap 4 0) { MMMMMMMAAMMMMMMM MMMMMMAAAAMMMMMM @@ -3111,7 +3168,7 @@ P = (108, 145, 182) MMMMMMAAAAMMMMMM MMMMMMMAAMMMMMMM } -# tile 163 (zap 4 1) +# tile 166 (zap 4 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -3130,7 +3187,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 164 (zap 4 2) +# tile 167 (zap 4 2) { AAAMMMMMMMMMMMMM AAAAMMMMMMMMMMMM @@ -3149,7 +3206,7 @@ P = (108, 145, 182) MMMMMMMMMMMMAAAA MMMMMMMMMMMMMAAA } -# tile 165 (zap 4 3) +# tile 168 (zap 4 3) { MMMMMMMMMMMMMAAA MMMMMMMMMMMMAAAA @@ -3168,7 +3225,7 @@ P = (108, 145, 182) AAAAMMMMMMMMMMMM AAAMMMMMMMMMMMMM } -# tile 166 (zap 5 0) +# tile 169 (zap 5 0) { MMMMMMMNNMMMMMMM MMMMMMNNNNMMMMMM @@ -3187,7 +3244,7 @@ P = (108, 145, 182) MMMMMMNNNNMMMMMM MMMMMMMNNMMMMMMM } -# tile 167 (zap 5 1) +# tile 170 (zap 5 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -3206,7 +3263,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 168 (zap 5 2) +# tile 171 (zap 5 2) { NNNMMMMMMMMMMMMM NNNNMMMMMMMMMMMM @@ -3225,7 +3282,7 @@ P = (108, 145, 182) MMMMMMMMMMMMNNNN MMMMMMMMMMMMMNNN } -# tile 169 (zap 5 3) +# tile 172 (zap 5 3) { MMMMMMMMMMMMMNNN MMMMMMMMMMMMNNNN @@ -3244,7 +3301,7 @@ P = (108, 145, 182) NNNNMMMMMMMMMMMM NNNMMMMMMMMMMMMM } -# tile 170 (zap 6 0) +# tile 173 (zap 6 0) { MMMMMMMFFMMMMMMM MMMMMMFFFFMMMMMM @@ -3263,7 +3320,7 @@ P = (108, 145, 182) MMMMMMFFFFMMMMMM MMMMMMMFFMMMMMMM } -# tile 171 (zap 6 1) +# tile 174 (zap 6 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -3282,7 +3339,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 172 (zap 6 2) +# tile 175 (zap 6 2) { FFFMMMMMMMMMMMMM FFFFMMMMMMMMMMMM @@ -3301,7 +3358,7 @@ P = (108, 145, 182) MMMMMMMMMMMMFFFF MMMMMMMMMMMMMFFF } -# tile 173 (zap 6 3) +# tile 176 (zap 6 3) { MMMMMMMMMMMMMFFF MMMMMMMMMMMMFFFF @@ -3320,7 +3377,7 @@ P = (108, 145, 182) FFFFMMMMMMMMMMMM FFFMMMMMMMMMMMMM } -# tile 174 (zap 7 0) +# tile 177 (zap 7 0) { MMMMMMMGGMMMMMMM MMMMMMGGGGMMMMMM @@ -3339,7 +3396,7 @@ P = (108, 145, 182) MMMMMMGGGGMMMMMM MMMMMMMGGMMMMMMM } -# tile 175 (zap 7 1) +# tile 178 (zap 7 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -3358,7 +3415,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM } -# tile 176 (zap 7 2) +# tile 179 (zap 7 2) { GGGMMMMMMMMMMMMM GGGGMMMMMMMMMMMM @@ -3377,7 +3434,7 @@ P = (108, 145, 182) MMMMMMMMMMMMGGGG MMMMMMMMMMMMMGGG } -# tile 177 (zap 7 3) +# tile 180 (zap 7 3) { MMMMMMMMMMMMMGGG MMMMMMMMMMMMGGGG @@ -3396,7 +3453,7 @@ P = (108, 145, 182) GGGGMMMMMMMMMMMM GGGMMMMMMMMMMMMM } -# tile 178 (warning 0) +# tile 181 (warning 0) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -3415,7 +3472,7 @@ P = (108, 145, 182) MMMMMMMAAMMMMMMM MMMMMMMMMMMMMMMM } -# tile 179 (warning 1) +# tile 182 (warning 1) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -3434,7 +3491,7 @@ P = (108, 145, 182) MMMMMMMAAMMMMMMM MMMMMMMMMMMMMMMM } -# tile 180 (warning 2) +# tile 183 (warning 2) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -3453,7 +3510,7 @@ P = (108, 145, 182) MMMMMMMAAMMMMMMM MMMMMMMMMMMMMMMM } -# tile 181 (warning 3) +# tile 184 (warning 3) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -3472,7 +3529,7 @@ P = (108, 145, 182) MMMMMMMAAMMMMMMM MMMMMMMMMMMMMMMM } -# tile 182 (warning 4) +# tile 185 (warning 4) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -3491,7 +3548,7 @@ P = (108, 145, 182) MMMMMMMAAMMMMMMM MMMMMMMMMMMMMMMM } -# tile 183 (warning 5) +# tile 186 (warning 5) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM @@ -3510,7 +3567,7 @@ P = (108, 145, 182) MMMMMMMAAMMMMMMM MMMMMMMMMMMMMMMM } -# tile 184 (sub mine walls 0) +# tile 187 (sub mine walls 0) { AJJKKKACJAAJJJAA AJKKKACLJJAJJJJA @@ -3529,7 +3586,7 @@ P = (108, 145, 182) AAJACKCKKJJJAJAA AAJCKKJAAAJJJJJA } -# tile 185 (sub mine walls 1) +# tile 188 (sub mine walls 1) { AJAAAAAAJJAAAJAA JJJAAAJJJJJAAAAJ @@ -3548,7 +3605,7 @@ P = (108, 145, 182) JJJJJJJJJJJJJJJJ AAAAAAAAAAAAAAAA } -# tile 186 (sub mine walls 2) +# tile 189 (sub mine walls 2) { AAAAAAKCCKKJAAAA AAAAKKCLCJKJJAAA @@ -3567,7 +3624,7 @@ P = (108, 145, 182) AAJACKCKKJJJAJAA AAJCKKJAAAJJJJJA } -# tile 187 (sub mine walls 3) +# tile 190 (sub mine walls 3) { AAAAAAKCCKKJAAAA AAAAKKCLCJKJJAAA @@ -3586,7 +3643,7 @@ P = (108, 145, 182) AAJACKCKKJJJAJAA AAJCKKJAAAJJJJJA } -# tile 188 (sub mine walls 4) +# tile 191 (sub mine walls 4) { AKKKAAKKKKAAJJJA AKKAAKCCCJJJAAJA @@ -3605,7 +3662,7 @@ P = (108, 145, 182) AJJJJJJJJJJJJJJJ AAAAAAAAAAAAAAAA } -# tile 189 (sub mine walls 5) +# tile 192 (sub mine walls 5) { AKKAAAKKAAAAJJJA AKAAKKLCKAAAAAJA @@ -3624,7 +3681,7 @@ P = (108, 145, 182) JJJJJJJJJJJJJJJA AAAAAAAAAAAAAAAA } -# tile 190 (sub mine walls 6) +# tile 193 (sub mine walls 6) { AAAAAAKCCKKJAAAA AAAAKCCLCJKJJAAA @@ -3643,7 +3700,7 @@ P = (108, 145, 182) AAJACKCKKJJJAJAA AAJCKKJAAAJJJJJA } -# tile 191 (sub mine walls 7) +# tile 194 (sub mine walls 7) { AKKAAAKKKKAAJJJA AKAAKKLCCJJJAAJA @@ -3662,7 +3719,7 @@ P = (108, 145, 182) JJJJJJJJJJJJJJJJ AAAAAAAAAAAAAAAA } -# tile 192 (sub mine walls 8) +# tile 195 (sub mine walls 8) { AAAAAAKCCKKJAAAA AAAAKCCLCJKJJAAA @@ -3681,7 +3738,7 @@ P = (108, 145, 182) AAJACKCKKJJJAJAA AAJCKKJAAAJJJJJA } -# tile 193 (sub mine walls 9) +# tile 196 (sub mine walls 9) { AKKAACKCCKKJAJJA AKACKKKLLJKJJAJA @@ -3700,7 +3757,7 @@ P = (108, 145, 182) AAJACKCKKJJJAJAA AAJCKKJAAAJJJJJA } -# tile 194 (sub mine walls 10) +# tile 197 (sub mine walls 10) { AKKAACKCCKKJAJJA AKACKKCLCJKJJAJA @@ -3719,7 +3776,7 @@ P = (108, 145, 182) AAJACKCKKJJJAJAA AAJCKKJAAAJJJJJA } -# tile 195 (sub gehennom walls 0) +# tile 198 (sub gehennom walls 0) { ALLDAJMMMMMJLLDA ADDDAJMJMMJJDDDA @@ -3738,7 +3795,7 @@ P = (108, 145, 182) AJJJAJJMMMMJJJJA ADMMAJJMMMMJDMJA } -# tile 196 (sub gehennom walls 1) +# tile 199 (sub gehennom walls 1) { AAALDDAAAAALDDAA DDDLDDAJDDDLDDAJ @@ -3757,7 +3814,7 @@ P = (108, 145, 182) JJJJJJJJJJJJJJJJ AAAAAAAAAAAAAAAA } -# tile 197 (sub gehennom walls 2) +# tile 200 (sub gehennom walls 2) { AAALLLLDDDDDDAAA LLLLAAJJMMMMDJJJ @@ -3776,7 +3833,7 @@ P = (108, 145, 182) AJJJAJJMMMMJJJJA ADMMAJJMMMMJDMJA } -# tile 198 (sub gehennom walls 3) +# tile 201 (sub gehennom walls 3) { AAALLLLDDDDDDAAA LLLLAAJJMMMMDJJJ @@ -3795,7 +3852,7 @@ P = (108, 145, 182) AJJJAJJMMMMJJJJA ADMMAJJMMMMJDMJA } -# tile 199 (sub gehennom walls 4) +# tile 202 (sub gehennom walls 4) { AAALLLLDDDDDDAAA LLLLAAJJMMMMDJJJ @@ -3814,7 +3871,7 @@ P = (108, 145, 182) JJJJJJJJJJJJJJJJ AAAAAAAAAAAAAAAA } -# tile 200 (sub gehennom walls 5) +# tile 203 (sub gehennom walls 5) { AAALLLLDDDDDDAAA LLLLAAJJMMMMDJJJ @@ -3833,7 +3890,7 @@ P = (108, 145, 182) JJJJJJJJJJJJJJJJ AAAAAAAAAAAAAAAA } -# tile 201 (sub gehennom walls 6) +# tile 204 (sub gehennom walls 6) { AAALLLLDDDDDDAAA LLLLAAJJMMMMDJJJ @@ -3852,7 +3909,7 @@ P = (108, 145, 182) AJJJAJJMMMMJJJJA ADMMAJJMMMMJDMJA } -# tile 202 (sub gehennom walls 7) +# tile 205 (sub gehennom walls 7) { AAALLLLDDDDDDAAA LLLLAAJJMMMMDJJJ @@ -3871,7 +3928,7 @@ P = (108, 145, 182) JJJJJJJJJJJJJJJJ AAAAAAAAAAAAAAAA } -# tile 203 (sub gehennom walls 8) +# tile 206 (sub gehennom walls 8) { AAALLLLDDDDDDAAA LLLLAAJJMMMMDJJJ @@ -3890,7 +3947,7 @@ P = (108, 145, 182) AJJJAJJMMMMJJJJA ADMMAJJMMMMJDMJA } -# tile 204 (sub gehennom walls 9) +# tile 207 (sub gehennom walls 9) { AAALLLLDDDDDDAAA LLLLAAJJMMMMDJJJ @@ -3909,7 +3966,7 @@ P = (108, 145, 182) AJJJAJJMMMMJJJJA ADMMAJJMMMMJDMJA } -# tile 205 (sub gehennom walls 10) +# tile 208 (sub gehennom walls 10) { AAALLLLDDDDDDAAA LLLLAAJJMMMMDJJJ @@ -3928,7 +3985,7 @@ P = (108, 145, 182) AJJJAJJMMMMJJJJA ADMMAJJMMMMJDMJA } -# tile 206 (sub knox walls 0) +# tile 209 (sub knox walls 0) { AJJJAAACJAAAJJJA AJJJAACLJJAAJJJA @@ -3947,7 +4004,7 @@ P = (108, 145, 182) AAJAAACKKJAAAJAA ACJJAAAAAAAACJJA } -# tile 207 (sub knox walls 1) +# tile 210 (sub knox walls 1) { AJAAAJAAAJAAAJAA JJJAAAJAJJJAAAJA @@ -3966,7 +4023,7 @@ P = (108, 145, 182) KJJACJJAKJJACJJA AAAAAAAAAAAAAAAA } -# tile 208 (sub knox walls 2) +# tile 211 (sub knox walls 2) { AAAAAAKCJKAAAAAA AAAAKKCLKJKKAAAA @@ -3985,7 +4042,7 @@ P = (108, 145, 182) AAJAAACKKJAAAJAA ACJJAAAAAAAACJJA } -# tile 209 (sub knox walls 3) +# tile 212 (sub knox walls 3) { AAAAAAKCJKAAAAAA AAAAKKCLKJKKAAAA @@ -4004,7 +4061,7 @@ P = (108, 145, 182) AAJAAACKKJAAAJAA ACJJAAAAAAAACJJA } -# tile 210 (sub knox walls 4) +# tile 213 (sub knox walls 4) { AAAAAAKCJKAAAAAA AAAAKKCLKJKKAAAA @@ -4023,7 +4080,7 @@ P = (108, 145, 182) KJJACJJAKJJACJJA AAAAAAAAAAAAAAAA } -# tile 211 (sub knox walls 5) +# tile 214 (sub knox walls 5) { AAAAAAKCJKAAAAAA AAAAKKCLKJKKAAAA @@ -4042,7 +4099,7 @@ P = (108, 145, 182) KJJACJJAKJJACJJA AAAAAAAAAAAAAAAA } -# tile 212 (sub knox walls 6) +# tile 215 (sub knox walls 6) { AAAAAAKCJKAAAAAA AAAAKKCLKJKKAAAA @@ -4061,7 +4118,7 @@ P = (108, 145, 182) AAJAAACKKJAAAJAA ACJJAAAAAAAACJJA } -# tile 213 (sub knox walls 7) +# tile 216 (sub knox walls 7) { AAAAAAKCJKAAAAAA AAAAKKCLKJKKAAAA @@ -4080,7 +4137,7 @@ P = (108, 145, 182) KJJACJJAKJJACJJA AAAAAAAAAAAAAAAA } -# tile 214 (sub knox walls 8) +# tile 217 (sub knox walls 8) { AAAAAAKCJKAAAAAA AAAAKKCLKJKKAAAA @@ -4099,7 +4156,7 @@ P = (108, 145, 182) AAJAAACKKJAAAJAA ACJJAAAAAAAACJJA } -# tile 215 (sub knox walls 9) +# tile 218 (sub knox walls 9) { AAAAAAKCJKAAAAAA AAAAKKCLKJKKAAAA @@ -4118,7 +4175,7 @@ P = (108, 145, 182) AAJAAACKKJAAAJAA ACJJAAAAAAAACJJA } -# tile 216 (sub knox walls 10) +# tile 219 (sub knox walls 10) { AAAAAAKCJKAAAAAA AAAAKKCLKJKKAAAA @@ -4137,7 +4194,7 @@ P = (108, 145, 182) AAJAAACKKJAAAJAA ACJJAAAAAAAACJJA } -# tile 217 (sub sokoban walls 0) +# tile 220 (sub sokoban walls 0) { ANNBAMEEEEEMNNBA ABBBAMEMEEMMBBBA @@ -4156,7 +4213,7 @@ P = (108, 145, 182) AMMMAMMEEEEMMMMA ABEEAMMEEEEMBEMA } -# tile 218 (sub sokoban walls 1) +# tile 221 (sub sokoban walls 1) { AAANBBAAAAANBBAA BBBNBBAMBBBNBBAM @@ -4175,7 +4232,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM AAAAAAAAAAAAAAAA } -# tile 219 (sub sokoban walls 2) +# tile 222 (sub sokoban walls 2) { AAANNNNBBBBBBAAA NNNNAAMMEEEEBMMM @@ -4194,7 +4251,7 @@ P = (108, 145, 182) AMMMAMMEEEEMMMMA ABEEAMMEEEEMBEMA } -# tile 220 (sub sokoban walls 3) +# tile 223 (sub sokoban walls 3) { AAANNNNBBBBBBAAA NNNNAAMMEEEEBMMM @@ -4213,7 +4270,7 @@ P = (108, 145, 182) AMMMAMMEEEEMMMMA ABEEAMMEEEEMBEMA } -# tile 221 (sub sokoban walls 4) +# tile 224 (sub sokoban walls 4) { AAANNNNBBBBBBAAA NNNNAAMMEEEEBMMM @@ -4232,7 +4289,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM AAAAAAAAAAAAAAAA } -# tile 222 (sub sokoban walls 5) +# tile 225 (sub sokoban walls 5) { AAANNNNBBBBBBAAA NNNNAAMMEEEEBMMM @@ -4251,7 +4308,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM AAAAAAAAAAAAAAAA } -# tile 223 (sub sokoban walls 6) +# tile 226 (sub sokoban walls 6) { AAANNNNBBBBBBAAA NNNNAAMMEEEEBMMM @@ -4270,7 +4327,7 @@ P = (108, 145, 182) AMMMAMMEEEEMMMMA ABEEAMMEEEEMBEMA } -# tile 224 (sub sokoban walls 7) +# tile 227 (sub sokoban walls 7) { AAANNNNBBBBBBAAA NNNNAAMMEEEEBMMM @@ -4289,7 +4346,7 @@ P = (108, 145, 182) MMMMMMMMMMMMMMMM AAAAAAAAAAAAAAAA } -# tile 225 (sub sokoban walls 8) +# tile 228 (sub sokoban walls 8) { AAANNNNBBBBBBAAA NNNNAAMMEEEEBMMM @@ -4308,7 +4365,7 @@ P = (108, 145, 182) AMMMAMMEEEEMMMMA ABEEAMMEEEEMBEMA } -# tile 226 (sub sokoban walls 9) +# tile 229 (sub sokoban walls 9) { AAANNNNBBBBBBAAA NNNNAAMMEEEEBMMM @@ -4327,7 +4384,7 @@ P = (108, 145, 182) AMMMAMMEEEEMMMMA ABEEAMMEEEEMBEMA } -# tile 227 (sub sokoban walls 10) +# tile 230 (sub sokoban walls 10) { AAANNNNBBBBBBAAA NNNNAAMMEEEEBMMM diff --git a/win/tty/wintty.c b/win/tty/wintty.c index 8c8f5294c..bcf4041e0 100644 --- a/win/tty/wintty.c +++ b/win/tty/wintty.c @@ -1,4 +1,4 @@ -/* NetHack 3.5 wintty.c $NHDT-Date: 1427667623 2015/03/29 22:20:23 $ $NHDT-Branch: master $:$NHDT-Revision: 1.75 $ */ +/* NetHack 3.5 wintty.c $NHDT-Date: 1428394244 2015/04/07 08:10:44 $ $NHDT-Branch: master $:$NHDT-Revision: 1.84 $ */ /* NetHack 3.5 wintty.c $Date: 2012/01/22 06:27:09 $ $Revision: 1.66 $ */ /* Copyright (c) David Cohrs, 1991 */ /* NetHack may be freely redistributed. See license for details. */ @@ -1462,6 +1462,8 @@ struct WinDesc *cw; for (page_lines = 0, curr = page_start; curr != page_end; page_lines++, curr = curr->next) { + int color = NO_COLOR, attr = ATR_NONE; + boolean menucolr = FALSE; if (curr->selector) *rp++ = curr->selector; @@ -1477,6 +1479,11 @@ struct WinDesc *cw; * actually output the character. We're faster doing * this. */ + if (iflags.use_menu_color && + (menucolr = get_menu_coloring(curr->str, &color,&attr))) { + term_start_attr(attr); + if (color != NO_COLOR) term_start_color(color); + } else term_start_attr(curr->attr); for (n = 0, cp = curr->str; #ifndef WIN32CON @@ -1494,6 +1501,10 @@ struct WinDesc *cw; (void) putchar('#'); /* count selected */ } else (void) putchar(*cp); + if (iflags.use_menu_color && menucolr) { + if (color != NO_COLOR) term_end_color(); + term_end_attr(attr); + } else term_end_attr(curr->attr); } } else { @@ -1759,7 +1770,7 @@ struct WinDesc *cw; if (i == cw->maxrow) { #ifdef H2344_BROKEN if(cw->type == NHW_TEXT){ - tty_curs(BASE_WINDOW, 0, (int)ttyDisplay->cury+1); + tty_curs(BASE_WINDOW, 1, (int)ttyDisplay->cury+1); cl_eos(); } #endif diff --git a/win/win32/mhmap.c b/win/win32/mhmap.c index bd3c60a17..d07af75c5 100644 --- a/win/win32/mhmap.c +++ b/win/win32/mhmap.c @@ -45,7 +45,6 @@ static void nhcoord2display(PNHMapWindow data, int x, int y, LPRECT lpOut); #if (VERSION_MAJOR < 4) && (VERSION_MINOR < 4) && (PATCHLEVEL < 2) static void nhglyph2charcolor(short glyph, uchar* ch, int* color); #endif -static COLORREF nhcolor_to_RGB(int c); HWND mswin_init_map_window () { static int run_once = 0; diff --git a/win/win32/mhmap.h b/win/win32/mhmap.h index 54a614730..e33f64ec3 100644 --- a/win/win32/mhmap.h +++ b/win/win32/mhmap.h @@ -12,6 +12,7 @@ #include "global.h" +COLORREF nhcolor_to_RGB (int c); HWND mswin_init_map_window (void); void mswin_map_stretch(HWND hWnd, LPSIZE lpsz, BOOL redraw); int mswin_map_mode(HWND hWnd, int mode); diff --git a/win/win32/mhmenu.c b/win/win32/mhmenu.c index e39470dc1..6f32931e3 100644 --- a/win/win32/mhmenu.c +++ b/win/win32/mhmenu.c @@ -917,6 +917,9 @@ BOOL onDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam) int column; int spacing = 0; + int color = NO_COLOR, attr; + boolean menucolr = FALSE; + lpdis = (LPDRAWITEMSTRUCT) lParam; /* If there are no list box items, skip this message. */ @@ -967,6 +970,13 @@ BOOL onDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam) buf[0] = item->accelerator; buf[1] = '\x0'; + if (iflags.use_menu_color && + (menucolr = get_menu_coloring(item->str, &color,&attr))) { + /* TODO: use attr too */ + if (color != NO_COLOR) + SetTextColor(lpdis->hDC, nhcolor_to_RGB(color)); + } + SetRect( &drawRect, x, lpdis->rcItem.top, lpdis->rcItem.right, lpdis->rcItem.bottom ); DrawText(lpdis->hDC, NH_A2W(buf, wbuf, 2), 1, &drawRect, DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX); }