annotate bin/shove @ 2033:034f0d205950

<shachaf> mv bin/{,s}list
author HackBot
date Thu, 07 Feb 2013 21:38:21 +0000
parents d0780f04e9c7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2020
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
1 #!/usr/bin/env perl
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
2 # -*- cperl -*-
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
3 # Shove interpreter. By Alex Smith.
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
4
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
5 # Commands:
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
6 # ' " Quote a string ('' strings nest inside "" strings and vice versa)
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
7 # < v > ^ Change direction of execution
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
8 # A V ( ) Pop a string onto the playfield
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
9 # space NOP
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
10
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
11 # ! NOP, but tells the compiler that everything behind the IP will
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
12 # never be used (a useful optimisation)
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
13 # S NOP, but outputs TOS (without popping) on systems with output
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
14 # n NOP, but outputs a newline on systems with output
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
15
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
16 use strict;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
17
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
18 # Read in the program
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
19
2023
99dfa6a18c7f <oerjan> mv shove bin/shove
HackBot
parents: 2020
diff changeset
20 my $debug = ($#ARGV >= 0 and $ARGV[0] eq '-d' and shift and 1);
2026
d0780f04e9c7 <oerjan> mv shove bin/shove
HackBot
parents: 2023
diff changeset
21 my @program = ($#ARGV >= 0 and ($ARGV[0] ne '-f' or (shift and 0)))
d0780f04e9c7 <oerjan> mv shove bin/shove
HackBot
parents: 2023
diff changeset
22 ? @ARGV : <>;
2020
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
23 chomp for @program;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
24
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
25 my $x = 0;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
26 my $y = 0;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
27 my $width = 0; $width = ($width < length $_ ? length $_ : $width) for @program;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
28 my $height = scalar @program;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
29 my $totalrotation = 0;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
30 my @stack = ();
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
31 # always going right, we rotate the program if necessary to ensure this
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
32
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
33 # Pads its argument to width $width.
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
34 sub widthpad {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
35 my $s = shift;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
36 return $s . (' ' x ($width - length $s));
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
37 }
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
38
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
39 # Rotates the program clockwise (arg = 1), 180 degrees (arg = 2),
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
40 # or anticlockwise (arg = 3)
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
41 sub rotateprogram {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
42 my $amount = shift;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
43 $amount or return;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
44 $totalrotation += $amount;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
45 $totalrotation %= 4;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
46 if ($amount >= 2) {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
47 @program = reverse @program;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
48 $_ = reverse widthpad $_ for @program;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
49 $x = $width - 1 - $x;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
50 $y = $height - 1 - $y;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
51 tr/<v>^AV()/>^<vVA)(/ for @program;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
52 $amount == 2 and return;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
53 } else {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
54 $_ = widthpad $_ for @program;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
55 }
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
56 my @newprog = ();
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
57 # We repeatedly move the leftmost column of @program to the top row
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
58 # of @newprog.
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
59 while (length $program[0]) {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
60 my $build='';
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
61 $build = (substr $_, 0, 1, '') . $build for @program;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
62 push @newprog, $build;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
63 }
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
64 @program = @newprog;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
65 tr/<^>v(A)V/^>v<A)V(/ for @program;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
66 ($width, $height) = ($height, $width);
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
67 ($x, $y) = ($width - 1 - $y, $x);
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
68 }
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
69
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
70 sub shove {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
71 my $sx = shift;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
72 my $sy = shift;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
73 if($sx < 0) {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
74 $_ = ' '.$_ for @program;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
75 $x++;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
76 $sx++;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
77 $width++;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
78 }
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
79 if($sx >= $width) {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
80 $width++;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
81 }
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
82 if($sy < 0) {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
83 unshift @program, "";
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
84 $y++;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
85 $sy++;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
86 $height++;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
87 }
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
88 if($sy >= $height) {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
89 push @program, "";
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
90 $height++;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
91 }
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
92 scalar @stack or die "Empty stack when shoving.";
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
93 $program[$sy] = widthpad $program[$sy];
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
94 ($x > $sx && $y == $sy) and $x += length $stack[0];
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
95 substr $program[$sy], $sx, 0, shift @stack;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
96 $program[$sy] =~ s/\ +$//;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
97 $width < length $program[$sy] and $width = length $program[$sy];
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
98 }
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
99
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
100 sub showprogram {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
101 my $tr = $totalrotation;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
102 print "\nactual size: ($width, $height), pos: ($x, $y)\n";
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
103 rotateprogram ((4-$tr)%4);
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
104 $program[$y] = widthpad $program[$y];
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
105 my $c = substr $program[$y], $x, 1, '*';
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
106 print "rotated for viewing; pos: ($x, $y), dir: $tr\n";
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
107 print "stack: ";
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
108 print "{$_} " for @stack;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
109 print "\n";
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
110 print "$_\n" for @program;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
111 substr $program[$y], $x, 1, $c;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
112 rotateprogram $tr;
2026
d0780f04e9c7 <oerjan> mv shove bin/shove
HackBot
parents: 2023
diff changeset
113 scalar <STDIN>;
2020
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
114 }
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
115
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
116 while ($x < $width && $y < $height && $x >= 0 && $y >= 0) {
2023
99dfa6a18c7f <oerjan> mv shove bin/shove
HackBot
parents: 2020
diff changeset
117 showprogram if $debug;
2020
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
118 my $cmd = substr $program[$y], $x, 1;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
119 # $cmd eq '>' is a nop
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
120 $cmd eq '^' and rotateprogram 1;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
121 $cmd eq '<' and rotateprogram 2;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
122 $cmd eq 'v' and rotateprogram 3;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
123 $cmd eq '(' and shove $x-1, $y;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
124 $cmd eq ')' and shove $x+1, $y;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
125 $cmd eq 'A' and shove $x, $y-1;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
126 $cmd eq 'V' and shove $x, $y+1;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
127 $cmd eq 'S' and print $stack[0];
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
128 $cmd eq 'n' and print '\n';
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
129 if ($cmd eq '!') {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
130 substr $_, 0, $x, '' for @program;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
131 $width -= $x;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
132 $x = 0;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
133 }
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
134 if ($cmd eq '"' || $cmd eq "'") {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
135 my $quotecount = 1;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
136 my $lws = $cmd eq "'";
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
137 my $newpush = "";
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
138 while($quotecount) {
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
139 $x++;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
140 $x < $width or die "Unterminated string.";
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
141 $cmd = substr $program[$y], $x, 1;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
142 $cmd eq "'" and ($quotecount += ($lws ? -1 : 1)), ($lws = !$lws);
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
143 $cmd eq '"' and ($quotecount += ($lws ? 1 : -1)), ($lws = !$lws);
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
144 $quotecount and $newpush .= $cmd;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
145 }
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
146 unshift @stack, $newpush;
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
147 }
2023
99dfa6a18c7f <oerjan> mv shove bin/shove
HackBot
parents: 2020
diff changeset
148 $x++; # move to next command
2020
37f8c80f6bf3 <oerjan> chmod a+x YaOJ; mv YaOJ bin/shove
HackBot
parents:
diff changeset
149 }