1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
|
=head1 NAME
dealer.dpp - preprocessor for dealer scripts
=head1 SYNOPSIS
B<dealer.dpp> [I<inputfile>]
=head1 DESCRIPTION
dealer.dpp stands for dealer-pre-processor. Its main purpose it to preprocess
input files for Hans van Staveren's great dealer program.
=head1 SYNTAX
The program expands shape specifications of the form:
shape{COMPASS, shp1 + shp2 + ... + shpM - shm1 - ... - shmN}
=head2 regular shapes
7xxx, 4432, 4xx5 have the same meaning as in original dealer.
=head2 the `at least' operator
whenever you put a `+' after a suit-length, it means `at least'.
shape{north, 5+xx5+}: at least 5/5 in the blacks,
-->shape(north,5xx5 + 5xx6 + 6xx5 + 5xx7 + 6xx6 + 7xx5 + 5008 + 6007
+ 7006 + 8005)
=head2 the `at most' operator:
same as the `at least', just use a `-':
shape{north, 2-xxx}: at most 2 spades,
-->shape(north,0xxx + 1xxx + 2xxx)
=head2 the `range' operator:
the range operator operates on a single suit. It comes with [],
like in Perl.
shape{north, x[3-5]x[13]}: (3 to 5) hearts, and one or 3 clubs
-->shape(north,x3x1 + x4x1 + x3x3 + x5x1 + x4x3 + x5x3)
Note that shape{north, 3-xxx} is equivalent to shape{north,[0-3]xxx}
You can write compound ranges if you want:
shape{north, [013-68]xxx} means: 0,1,3,4,5,6 or 8 spades.
=head2 the `permutation' operator:
the permutation operator will appears as () like in the WBF rules
of specifying shapes.
shape{north, (4432)}: any 4432 hand.
-->shape(north,any 4432)
what's best is that the () operator can operate on restricted groups
of cards:
shape{north, 5s(431)}: 5 spades, the others suits being (431).
-->shape(north,5134 + 5314 + 5143 + 5341 + 5413 + 5431)
What you have to do is:
=over
=item *
specify the suit names (s,h,d,c in english) in the left part of
the shape, in any order,
=item *
and enclose the rest of the permutation into () in the right part.
=back
A (complicated) example:
shape{north, 4+c3+d(2+2+)}: at least 5 clubs, at least 3 diamonds,
and no short major.
-->shape(north,3334 + 4234 + 2434 + 3244 + 2344 + 2254 + 3235 + 2335 + 2245 + 2236)
=head2 the `Major' operator:
has to be used together with the () operator. `M' stands for `a major'
The `M' operator can only be used in the left part (never put a M
inside the parens)
shape{north, 5M(xxx)}
-->shape(north,x5xx + 5xxx)
shape{north, 5+M3+c(31)}
-->shape(north,1534 + 3514 + 1633 + 3613 + 5134 + 5314 + 6133 + 6313)
=head2 the `minor' operator:
same as the `Major' operator, but in lowercase `m'.
shape{north, 5M5m(xx)}
-->shape(north,x5x5 + 5xx5 + x55x + 5x5x)
=head2 the `conditional' operator:
you've got the possibility of specifying complex conditions to be
verified that cannot be simply expressed by other operators. In
order to do that, you use the `:' operator, just after the
atomic-shape specification:
shape{north, shp1:condition1,condition2,...}
The conditions use the letters (s,h,d,c) as variables for the suit
lengths, and the usual C-operators (*,+,-,/,>,<,==,!,?, and so on).
Note that the `,' stands for the `and-logical' operator. You can
use `or' for the `or-logical' operator.
shape{north, 4+s4+h(xx):d>c,h+s==10}
-->shape(north,6421 + 6430 + 5521 + 5530 + 4621 + 4630)
=head1 EXAMPLES
=over
=item a balanced hand
(3+3+3+2+)
=item a french 1H opening
x5+xx:h>s,h>=d,h>=c
=item my No_trump opening
hn = hcp(north)
n1NT = (hn > 14 and hn < 18 and shape{north, 5m(332) + 5m2s(42)} )
or (hn > 13 and hn < 17 and shape{north, 6m(322)} )
or (hn > 15 and hn < 18 and shape{north, 5M(332)} )
or (hn > 15 and hn < 19 and shape{north, (4432) + (4333)} )
=back
=head1 SEE ALSO
dealer(6),
F</usr/share/doc/dealer/Manual>.
=head1 AUTHORS
=over
=item Francois Dellacherie
=item Manpage: Christoph Berg <cb@df7cb.de>
=back
=head1 LICENSE
This program is hereby put in the public domain. Do with it whatever
you want, but I would like you not to redistribute it in modified form
without mentioning the fact of modification. I will accept bug reports
and modification requests, without any obligation of course, but fixing
bugs someone else put in is beyond me.
|