aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/tpic/picy.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/tpic/picy.c')
-rw-r--r--src/cmd/tpic/picy.c1239
1 files changed, 1239 insertions, 0 deletions
diff --git a/src/cmd/tpic/picy.c b/src/cmd/tpic/picy.c
new file mode 100644
index 00000000..25ffd4f9
--- /dev/null
+++ b/src/cmd/tpic/picy.c
@@ -0,0 +1,1239 @@
+
+#line 2 "/usr/local/plan9/src/cmd/tpic/picy.y"
+#include <stdio.h>
+#include "pic.h"
+#include <math.h>
+YYSTYPE y;
+int yylex(void);
+extern int yyerrflag;
+#ifndef YYMAXDEPTH
+#define YYMAXDEPTH 150
+#endif
+YYSTYPE yylval;
+YYSTYPE yyval;
+#define BOX 1
+#define LINE 2
+#define ARROW 3
+#define CIRCLE 4
+#define ELLIPSE 5
+#define ARC 6
+#define SPLINE 7
+#define BLOCK 8
+#define TEXT 9
+#define TROFF 10
+#define MOVE 11
+#define BLOCKEND 12
+#define PLACE 13
+#define PRINT 57359
+#define RESET 57360
+#define THRU 57361
+#define UNTIL 57362
+#define FOR 57363
+#define IF 57364
+#define COPY 57365
+#define THENSTR 57366
+#define ELSESTR 57367
+#define DOSTR 57368
+#define PLACENAME 57369
+#define VARNAME 57370
+#define SPRINTF 57371
+#define DEFNAME 57372
+#define ATTR 57373
+#define TEXTATTR 57374
+#define LEFT 57375
+#define RIGHT 57376
+#define UP 57377
+#define DOWN 57378
+#define FROM 57379
+#define TO 57380
+#define AT 57381
+#define BY 57382
+#define WITH 57383
+#define HEAD 57384
+#define CW 57385
+#define CCW 57386
+#define THEN 57387
+#define HEIGHT 57388
+#define WIDTH 57389
+#define RADIUS 57390
+#define DIAMETER 57391
+#define LENGTH 57392
+#define SIZE 57393
+#define CORNER 57394
+#define HERE 57395
+#define LAST 57396
+#define NTH 57397
+#define SAME 57398
+#define BETWEEN 57399
+#define AND 57400
+#define EAST 57401
+#define WEST 57402
+#define NORTH 57403
+#define SOUTH 57404
+#define NE 57405
+#define NW 57406
+#define SE 57407
+#define SW 57408
+#define START 57409
+#define END 57410
+#define DOTX 57411
+#define DOTY 57412
+#define DOTHT 57413
+#define DOTWID 57414
+#define DOTRAD 57415
+#define NUMBER 57416
+#define LOG 57417
+#define EXP 57418
+#define SIN 57419
+#define COS 57420
+#define ATAN2 57421
+#define SQRT 57422
+#define RAND 57423
+#define MIN 57424
+#define MAX 57425
+#define INT 57426
+#define DIR 57427
+#define DOT 57428
+#define DASH 57429
+#define CHOP 57430
+#define FILL 57431
+#define ST 57432
+#define OROR 57433
+#define ANDAND 57434
+#define GT 57435
+#define LT 57436
+#define LE 57437
+#define GE 57438
+#define EQ 57439
+#define NEQ 57440
+#define UMINUS 57441
+#define NOT 57442
+#define YYEOFCODE 1
+#define YYERRCODE 2
+static const short yyexca[] =
+{-1, 0,
+ 1, 2,
+ -2, 0,
+-1, 1,
+ 1, -1,
+ -2, 0,
+-1, 203,
+ 94, 0,
+ 95, 0,
+ 96, 0,
+ 97, 0,
+ 98, 0,
+ 99, 0,
+ -2, 156,
+-1, 210,
+ 94, 0,
+ 95, 0,
+ 96, 0,
+ 97, 0,
+ 98, 0,
+ 99, 0,
+ -2, 155,
+-1, 211,
+ 94, 0,
+ 95, 0,
+ 96, 0,
+ 97, 0,
+ 98, 0,
+ 99, 0,
+ -2, 157,
+-1, 212,
+ 94, 0,
+ 95, 0,
+ 96, 0,
+ 97, 0,
+ 98, 0,
+ 99, 0,
+ -2, 158,
+-1, 213,
+ 94, 0,
+ 95, 0,
+ 96, 0,
+ 97, 0,
+ 98, 0,
+ 99, 0,
+ -2, 159,
+-1, 214,
+ 94, 0,
+ 95, 0,
+ 96, 0,
+ 97, 0,
+ 98, 0,
+ 99, 0,
+ -2, 160,
+-1, 266,
+ 94, 0,
+ 95, 0,
+ 96, 0,
+ 97, 0,
+ 98, 0,
+ 99, 0,
+ -2, 156,
+};
+#define YYNPROD 175
+#define YYPRIVATE 57344
+#define YYLAST 1551
+static const short yyact[] =
+{
+ 171, 330, 137, 52, 316, 67, 270, 123, 124, 308,
+ 315, 42, 269, 239, 108, 32, 135, 160, 135, 159,
+ 158, 157, 94, 224, 130, 131, 132, 133, 134, 43,
+ 156, 155, 91, 50, 154, 153, 152, 151, 135, 97,
+ 80, 104, 295, 294, 243, 232, 230, 40, 121, 126,
+ 129, 82, 123, 124, 312, 150, 147, 109, 110, 111,
+ 112, 113, 271, 50, 121, 225, 71, 106, 41, 162,
+ 101, 164, 128, 40, 331, 332, 333, 334, 136, 127,
+ 243, 167, 191, 187, 72, 73, 74, 75, 76, 77,
+ 78, 79, 272, 200, 197, 109, 110, 111, 112, 113,
+ 136, 125, 121, 123, 124, 123, 124, 201, 203, 104,
+ 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
+ 215, 216, 217, 38, 218, 221, 231, 111, 112, 113,
+ 50, 50, 121, 317, 123, 124, 192, 202, 204, 123,
+ 124, 195, 196, 166, 84, 229, 220, 223, 165, 95,
+ 96, 35, 233, 234, 235, 236, 237, 238, 34, 240,
+ 241, 242, 189, 168, 283, 244, 246, 281, 36, 44,
+ 122, 249, 248, 250, 104, 104, 104, 104, 104, 89,
+ 123, 124, 258, 259, 260, 261, 4, 70, 85, 37,
+ 92, 296, 263, 264, 227, 266, 50, 50, 50, 50,
+ 50, 80, 265, 251, 252, 253, 254, 257, 119, 114,
+ 194, 115, 116, 117, 118, 109, 110, 111, 112, 113,
+ 274, 169, 121, 276, 283, 284, 37, 99, 188, 279,
+ 114, 194, 115, 116, 117, 118, 109, 110, 111, 112,
+ 113, 262, 85, 121, 281, 282, 190, 35, 277, 130,
+ 131, 132, 133, 134, 86, 87, 198, 227, 228, 162,
+ 193, 164, 2, 83, 36, 69, 1, 5, 37, 39,
+ 161, 301, 104, 104, 304, 26, 306, 6, 185, 24,
+ 12, 24, 13, 147, 14, 24, 300, 199, 88, 81,
+ 309, 90, 310, 311, 50, 50, 278, 68, 163, 313,
+ 314, 302, 303, 0, 0, 24, 318, 0, 319, 140,
+ 144, 145, 141, 142, 143, 146, 247, 327, 24, 24,
+ 0, 65, 66, 68, 280, 0, 0, 335, 0, 297,
+ 0, 336, 0, 0, 0, 0, 337, 0, 0, 16,
+ 20, 21, 17, 18, 19, 22, 0, 35, 25, 23,
+ 51, 46, 10, 11, 267, 268, 30, 31, 29, 149,
+ 24, 0, 102, 46, 36, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 65, 66, 68, 53, 24,
+ 0, 0, 0, 0, 0, 0, 0, 65, 66, 68,
+ 53, 0, 0, 0, 0, 0, 0, 45, 55, 56,
+ 57, 58, 59, 60, 61, 63, 62, 64, 0, 45,
+ 55, 56, 57, 58, 59, 60, 61, 63, 62, 64,
+ 9, 0, 0, 0, 48, 100, 0, 0, 299, 54,
+ 0, 0, 0, 0, 0, 0, 48, 35, 93, 0,
+ 0, 54, 0, 0, 0, 0, 27, 0, 33, 0,
+ 49, 0, 51, 46, 36, 0, 170, 179, 0, 0,
+ 0, 0, 173, 174, 175, 176, 177, 180, 140, 144,
+ 145, 141, 142, 143, 146, 245, 0, 65, 66, 68,
+ 53, 178, 120, 119, 114, 194, 115, 116, 117, 118,
+ 109, 110, 111, 112, 113, 0, 0, 121, 0, 45,
+ 55, 56, 57, 58, 59, 60, 61, 63, 62, 64,
+ 172, 181, 182, 183, 184, 0, 0, 35, 139, 0,
+ 0, 0, 47, 8, 0, 8, 48, 0, 35, 8,
+ 0, 54, 51, 46, 36, 0, 0, 0, 0, 0,
+ 93, 0, 0, 51, 46, 36, 0, 0, 0, 8,
+ 0, 0, 0, 0, 0, 0, 0, 65, 66, 68,
+ 53, 0, 8, 103, 0, 0, 339, 0, 65, 66,
+ 68, 53, 0, 0, 0, 0, 0, 0, 0, 45,
+ 55, 56, 57, 58, 59, 60, 61, 63, 62, 64,
+ 45, 55, 56, 57, 58, 59, 60, 61, 63, 62,
+ 64, 51, 46, 0, 8, 0, 48, 0, 0, 0,
+ 0, 54, 0, 0, 0, 0, 0, 48, 0, 0,
+ 93, 0, 54, 8, 0, 0, 255, 66, 68, 53,
+ 0, 49, 120, 119, 114, 194, 115, 116, 117, 118,
+ 109, 110, 111, 112, 113, 0, 0, 121, 45, 55,
+ 56, 57, 58, 59, 60, 61, 63, 62, 64, 16,
+ 20, 21, 17, 18, 19, 22, 0, 35, 25, 23,
+ 0, 0, 10, 11, 0, 48, 30, 31, 29, 0,
+ 54, 0, 7, 28, 36, 0, 0, 0, 256, 49,
+ 16, 20, 21, 17, 18, 19, 22, 0, 35, 25,
+ 23, 0, 0, 10, 11, 0, 0, 30, 31, 29,
+ 0, 0, 0, 7, 28, 36, 0, 3, 0, 16,
+ 20, 21, 17, 18, 19, 22, 0, 35, 25, 23,
+ 51, 46, 10, 11, 0, 0, 30, 31, 29, 0,
+ 9, 0, 7, 28, 36, 15, 140, 144, 145, 141,
+ 142, 143, 146, 148, 0, 65, 66, 68, 53, 0,
+ 0, 0, 0, 0, 0, 0, 27, 186, 33, 0,
+ 0, 9, 0, 0, 0, 0, 15, 45, 55, 56,
+ 57, 58, 59, 60, 61, 63, 62, 64, 51, 46,
+ 0, 0, 0, 0, 98, 0, 149, 27, 0, 33,
+ 9, 0, 0, 0, 48, 15, 0, 0, 0, 54,
+ 0, 0, 0, 65, 66, 68, 53, 0, 49, 0,
+ 0, 0, 0, 0, 0, 0, 27, 0, 33, 0,
+ 51, 46, 0, 0, 0, 45, 55, 56, 57, 58,
+ 59, 60, 61, 63, 62, 64, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 65, 66, 68, 53, 0,
+ 0, 0, 48, 0, 0, 0, 0, 54, 0, 0,
+ 0, 0, 0, 0, 0, 0, 222, 45, 55, 56,
+ 57, 58, 59, 60, 61, 63, 62, 64, 16, 20,
+ 21, 17, 18, 19, 22, 108, 35, 25, 23, 0,
+ 0, 10, 11, 0, 48, 30, 31, 29, 0, 54,
+ 0, 7, 28, 36, 0, 0, 0, 0, 219, 0,
+ 0, 140, 144, 145, 141, 142, 143, 146, 138, 0,
+ 120, 119, 114, 107, 115, 116, 117, 118, 109, 110,
+ 111, 112, 113, 0, 0, 121, 0, 0, 106, 0,
+ 0, 0, 0, 0, 226, 120, 119, 114, 194, 115,
+ 116, 117, 118, 109, 110, 111, 112, 113, 0, 9,
+ 121, 139, 0, 307, 15, 0, 0, 0, 0, 226,
+ 0, 120, 119, 114, 194, 115, 116, 117, 118, 109,
+ 110, 111, 112, 113, 0, 27, 121, 33, 0, 305,
+ 0, 0, 0, 0, 0, 226, 120, 119, 114, 194,
+ 115, 116, 117, 118, 109, 110, 111, 112, 113, 0,
+ 0, 121, 0, 0, 0, 0, 0, 0, 0, 0,
+ 329, 120, 119, 114, 194, 115, 116, 117, 118, 109,
+ 110, 111, 112, 113, 0, 0, 121, 0, 0, 0,
+ 0, 0, 0, 0, 0, 328, 120, 119, 114, 194,
+ 115, 116, 117, 118, 109, 110, 111, 112, 113, 0,
+ 0, 121, 0, 0, 0, 0, 0, 0, 0, 0,
+ 322, 120, 119, 114, 194, 115, 116, 117, 118, 109,
+ 110, 111, 112, 113, 0, 0, 121, 0, 0, 0,
+ 0, 0, 0, 0, 0, 321, 120, 119, 114, 194,
+ 115, 116, 117, 118, 109, 110, 111, 112, 113, 0,
+ 0, 121, 0, 0, 0, 0, 0, 0, 0, 0,
+ 320, 120, 119, 114, 194, 115, 116, 117, 118, 109,
+ 110, 111, 112, 113, 0, 0, 121, 0, 0, 0,
+ 0, 0, 0, 0, 0, 293, 120, 119, 114, 194,
+ 115, 116, 117, 118, 109, 110, 111, 112, 113, 0,
+ 0, 121, 0, 0, 0, 0, 0, 0, 0, 0,
+ 290, 120, 119, 114, 194, 115, 116, 117, 118, 109,
+ 110, 111, 112, 113, 0, 0, 121, 0, 0, 0,
+ 0, 0, 0, 0, 0, 288, 120, 119, 114, 194,
+ 115, 116, 117, 118, 109, 110, 111, 112, 113, 0,
+ 0, 121, 0, 0, 0, 0, 0, 0, 0, 0,
+ 287, 120, 119, 114, 194, 115, 116, 117, 118, 109,
+ 110, 111, 112, 113, 0, 0, 121, 0, 0, 0,
+ 0, 0, 0, 0, 0, 286, 120, 119, 114, 194,
+ 115, 116, 117, 118, 109, 110, 111, 112, 113, 0,
+ 0, 121, 0, 108, 0, 0, 0, 0, 0, 0,
+ 285, 120, 119, 114, 194, 115, 116, 117, 118, 109,
+ 110, 111, 112, 113, 108, 0, 121, 0, 0, 0,
+ 0, 0, 0, 0, 0, 226, 105, 0, 120, 119,
+ 114, 107, 115, 116, 117, 118, 109, 110, 111, 112,
+ 113, 0, 0, 121, 0, 0, 106, 0, 0, 120,
+ 119, 114, 107, 115, 116, 117, 118, 109, 110, 111,
+ 112, 113, 0, 0, 121, 0, 0, 106, 120, 119,
+ 114, 194, 115, 116, 117, 118, 109, 110, 111, 112,
+ 113, 0, 0, 121, 0, 0, 292, 120, 119, 114,
+ 194, 115, 116, 117, 118, 109, 110, 111, 112, 113,
+ 0, 0, 121, 0, 0, 291, 120, 119, 114, 194,
+ 115, 116, 117, 118, 109, 110, 111, 112, 113, 0,
+ 0, 121, 338, 0, 289, 120, 119, 114, 194, 115,
+ 116, 117, 118, 109, 110, 111, 112, 113, 0, 0,
+ 121, 0, 0, 275, 120, 119, 114, 194, 115, 116,
+ 117, 118, 109, 110, 111, 112, 113, 326, 0, 121,
+ 0, 0, 273, 0, 0, 0, 0, 0, 0, 0,
+ 0, 325, 0, 324, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 323, 120, 119,
+ 114, 194, 115, 116, 117, 118, 109, 110, 111, 112,
+ 113, 298, 0, 121, 120, 119, 114, 194, 115, 116,
+ 117, 118, 109, 110, 111, 112, 113, 0, 0, 121,
+ 0, 0, 0, 120, 119, 114, 194, 115, 116, 117,
+ 118, 109, 110, 111, 112, 113, 0, 0, 121, 120,
+ 119, 114, 194, 115, 116, 117, 118, 109, 110, 111,
+ 112, 113, 0, 0, 121, 120, 119, 114, 194, 115,
+ 116, 117, 118, 109, 110, 111, 112, 113, 0, 0,
+ 121
+};
+static const short yypact[] =
+{
+ 715,-1000, 884,-1000,-1000, 33, 884, -62, -22,-1000,
+ 516, 159,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
+-1000,-1000,-1000,-1000, 139,-1000, 884,-1000, -40, 235,
+ 151, 505, 117,-1000, 118,-1000, -76,-1000,-1000, 686,
+ 335,-1000,1216, 80, 11,-1000, -40,-1000, 323, 703,
+ 180, -14, 917, 742, 323, -78, -79, -80, -81, -84,
+ -85, -94, -95, -96, -98, 243,-1000, 96,-1000, 53,
+-1000, 425, 425, 425, 425, 425, 425, 425, 425, 425,
+ 117, 655, 323, 235,-1000,-1000, 132, 139, 45,-1000,
+ 236,1392, 43, 323, 180,-1000,-1000, 139,-1000,-1000,
+ 884, 3, -36, -22,1237,-1000, 323, 703, 703, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
+ 323, 323,-1000, 803, 761,-1000, -59, -93, -45, 838,
+-1000,-1000,-1000,-1000,-1000,-1000, 230, 93, -68,-1000,
+-1000,-1000,-1000,-1000,-1000,-1000,-1000, 74, -69,-1000,
+ -59, 323, 323, 323, 323, 323, 323,-103, 323, 323,
+ 323, -70, 464, 305,-1000,-1000,-1000,-1000, 144,-1000,
+ 323,1392, 323, 703, 703, 703, 703, 574,-1000,-1000,
+-1000, 323, 323, 323, 323, 139,-1000,1392,-1000,-1000,
+-1000, 323, 323, 177, 323, 139, 139,1189,-104,-1000,
+-1000,1392, -48, -43, 34, 25, 25, -59, -59, -59,
+ -5, -5, -5, -5, -5, 136, 115, -59,1332, 323,
+ 180,1313, 323, 180,-1000, 269,-1000,-1000,-1000,-1000,
+ 217,-1000, 197,1164,1139,1114,1089,1294,1064,-1000,
+1275,1256,1039, 167,-1000, -71,-1000, -72,-1000,1392,
+1392, 5, 5, 5, 5, 243, 164, 5,1392,1392,
+1392,1392,-1000,1443, 390,-1000, -5,-1000,-1000,-1000,
+ 323, 703, 703, 323, 889, 323, 863,-107, -34, 464,
+ 305,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, 323,
+-1000, 323, 323,-1000, 140, 137, 2, 425, 323, 323,
+-106,1392, 39, 5,1392, 323,1392, 323,-1000,1014,
+ 989, 964,-1000,1427,1411,-1000, 323,-1000, 939, 914,
+-1000,-1000,-1000, -26,-1000, -26,-1000,1392,-1000,-1000,
+ 323,-1000,-1000,-1000,-1000, 323,1376, 540,-1000,-1000
+};
+static const short yypgo[] =
+{
+ 0, 0, 291, 522, 288, 158, 1, 286, 284, 282,
+ 280, 277, 186, 262, 29, 275, 267, 22, 5, 278,
+ 15, 3, 2, 266, 265, 263, 144, 66, 241, 221
+};
+static const short yyr1[] =
+{
+ 0, 23, 23, 23, 13, 13, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 24, 24, 24, 24, 3, 10, 25, 25, 26,
+ 26, 26, 9, 9, 9, 9, 8, 8, 2, 2,
+ 2, 4, 6, 6, 6, 6, 6, 11, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 28, 16,
+ 15, 27, 27, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 19, 19,
+ 20, 20, 20, 5, 5, 5, 7, 7, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 18, 18, 18, 21, 21, 21, 22,
+ 22, 22, 22, 22, 22, 22, 22, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+};
+static const short yyr2[] =
+{
+ 0, 1, 0, 1, 1, 2, 2, 3, 3, 4,
+ 4, 2, 1, 3, 3, 3, 3, 1, 1, 1,
+ 1, 0, 1, 2, 3, 3, 2, 1, 2, 1,
+ 2, 2, 10, 7, 10, 7, 4, 3, 1, 3,
+ 3, 1, 1, 1, 1, 1, 0, 1, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 1, 0, 5,
+ 1, 2, 0, 2, 1, 1, 2, 1, 2, 2,
+ 2, 2, 2, 3, 4, 2, 1, 1, 1, 2,
+ 1, 2, 1, 2, 1, 2, 1, 1, 1, 2,
+ 1, 2, 2, 1, 4, 6, 1, 3, 1, 3,
+ 3, 5, 5, 7, 7, 3, 3, 5, 6, 5,
+ 1, 2, 2, 1, 2, 3, 3, 2, 3, 3,
+ 1, 2, 2, 4, 4, 3, 2, 2, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 3, 3, 3, 3, 3, 2, 3, 2, 2, 2,
+ 2, 2, 3, 4, 4, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 4, 4, 3, 4, 4, 6,
+ 4, 3, 6, 6, 4
+};
+static const short yychk[] =
+{
+-1000, -23, -13, 2, -12, -16, -11, 27, -3, 85,
+ 17, 18, -10, -9, -8, 90, 4, 7, 8, 9,
+ 5, 6, 10, 14, -19, 13, -15, 111, 28, 23,
+ 21, 22, -20, 113, -5, 12, 29, -12, 90, -13,
+ 109, 90, -1, -14, -5, 74, 28, -3, 101, 115,
+ -17, 27, -21, 55, 106, 75, 76, 77, 78, 79,
+ 80, 81, 83, 82, 84, 52, 53, -18, 54, -24,
+ 28, -27, -27, -27, -27, -27, -27, -27, -27, -27,
+ -20, -13, 91, -25, -26, -5, 19, 20, -4, 28,
+ -2, -1, -5, 115, -17, 32, 32, 115, 108, -12,
+ 90, -14, 27, -3, -1, 90, 110, 95, 57, 100,
+ 101, 102, 103, 104, 94, 96, 97, 98, 99, 93,
+ 92, 107, 90, 100, 101, 90, -1, -14, -17, -1,
+ 69, 70, 71, 72, 73, 52, 114, -22, 11, 54,
+ 4, 7, 8, 9, 5, 6, 10, -22, 11, 54,
+ -1, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 27, -21, 55, -18, 52, 90, 28, 110, -29,
+ 31, -1, 85, 37, 38, 39, 40, 41, 56, 32,
+ 42, 86, 87, 88, 89, -19, 112, -1, -26, 30,
+ -5, 37, 91, 24, 95, 98, 99, -1, -5, -12,
+ 90, -1, -14, -1, -14, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 115,
+ -17, -1, 115, -17, 116, 110, 116, 27, 28, 52,
+ 114, 52, 114, -1, -1, -1, -1, -1, -1, 116,
+ -1, -1, -1, 114, -22, 11, -22, 11, 28, -1,
+ -1, -14, -14, -14, -14, 52, 114, -14, -1, -1,
+ -1, -1, -28, -1, -1, 25, -1, -5, -5, 116,
+ 110, 110, 58, 110, -1, 110, -1, -17, 27, -21,
+ 55, 27, 28, 27, 28, 116, 116, 116, 116, 110,
+ 116, 110, 110, 116, 114, 114, 27, -27, 38, 38,
+ -7, -1, -14, -14, -1, 110, -1, 110, 116, -1,
+ -1, -1, 52, -1, -1, 116, 110, 94, -1, -1,
+ 116, 116, 116, 40, 26, 40, 26, -1, 116, 116,
+ -6, 100, 101, 102, 103, -6, -1, -1, 26, 26
+};
+static const short yydef[] =
+{
+ -2, -2, 1, 3, 4, 0, 0, 0, 0, 12,
+ 0, 21, 17, 18, 19, 20, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 57, 0, 47, 0, 0,
+ 0, 0, 88, 60, 90, 93, 0, 5, 6, 0,
+ 0, 11, 0, 0, 0, 137, 138, 139, 0, 0,
+ 98, 110, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 113, 120, 128, 0,
+ 22, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 89, 0, 0, 26, 27, 29, 0, 0, 0, 41,
+ 0, 38, 0, 0, 0, 92, 91, 0, 7, 8,
+ 20, 0, 110, 139, 0, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 14, 0, 0, 15, 145, 0, 98, 0,
+ 147, 148, 149, 150, 151, 111, 0, 114, 136, 126,
+ 129, 130, 131, 132, 133, 134, 135, 117, 136, 127,
+ 163, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 112, 0, 0, 122, 121, 16, 23, 0, 61,
+ 64, 65, 67, 0, 0, 0, 0, 0, 76, 77,
+ 78, 80, 82, 84, 86, 87, 58, 25, 28, 30,
+ 31, 0, 0, 37, 0, 0, 0, 0, 0, 9,
+ 10, 100, 0, -2, 0, 140, 141, 142, 143, 144,
+ -2, -2, -2, -2, -2, 161, 162, 166, 0, 0,
+ 105, 0, 0, 106, 99, 0, 146, 125, 152, 115,
+ 0, 118, 0, 0, 0, 0, 0, 0, 0, 171,
+ 0, 0, 0, 0, 116, 136, 119, 136, 24, 63,
+ 66, 68, 69, 70, 71, 72, 0, 75, 79, 81,
+ 83, 85, 62, 0, 0, 36, -2, 39, 40, 94,
+ 0, 0, 0, 0, 0, 0, 0, 0, 110, 0,
+ 0, 123, 153, 124, 154, 164, 165, 167, 168, 0,
+ 170, 0, 0, 174, 0, 0, 73, 59, 0, 0,
+ 0, 96, 0, 109, 101, 0, 102, 0, 107, 0,
+ 0, 0, 74, 0, 0, 95, 0, 108, 0, 0,
+ 169, 172, 173, 46, 33, 46, 35, 97, 103, 104,
+ 0, 42, 43, 44, 45, 0, 0, 0, 32, 34
+};
+static const short yytok1[] =
+{
+ 1, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 104, 0, 0,
+ 115, 116, 102, 100, 110, 101, 114, 103, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 109, 0,
+ 0, 91, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 113, 0, 112, 107, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 111, 0, 108
+};
+static const short yytok2[] =
+{
+ 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 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, 92,
+ 93, 94, 95, 96, 97, 98, 99, 105, 106
+};
+static const long yytok3[] =
+{
+ 0
+};
+#define YYFLAG -1000
+#define YYERROR goto yyerrlab
+#define YYACCEPT return(0)
+#define YYABORT return(1)
+#define yyclearin yychar = -1
+#define yyerrok yyerrflag = 0
+
+#ifdef yydebug
+#include "y.debug"
+#else
+#define yydebug 0
+static const char* yytoknames[1]; /* for debugging */
+static const char* yystates[1]; /* for debugging */
+#endif
+
+/* parser for yacc output */
+#ifdef YYARG
+#define yynerrs yyarg->yynerrs
+#define yyerrflag yyarg->yyerrflag
+#define yyval yyarg->yyval
+#define yylval yyarg->yylval
+#else
+int yynerrs = 0; /* number of errors */
+int yyerrflag = 0; /* error recovery flag */
+#endif
+
+static const char*
+yytokname(int yyc)
+{
+ static char x[10];
+
+ if(yyc > 0 && yyc <= sizeof(yytoknames)/sizeof(yytoknames[0]))
+ if(yytoknames[yyc-1])
+ return yytoknames[yyc-1];
+ sprintf(x, "<%d>", yyc);
+ return x;
+}
+
+static const char*
+yystatname(int yys)
+{
+ static char x[10];
+
+ if(yys >= 0 && yys < sizeof(yystates)/sizeof(yystates[0]))
+ if(yystates[yys])
+ return yystates[yys];
+ sprintf(x, "<%d>\n", yys);
+ return x;
+}
+
+static long
+#ifdef YYARG
+yylex1(struct Yyarg *yyarg)
+#else
+yylex1(void)
+#endif
+{
+ long yychar;
+ const long *t3p;
+ int c;
+
+#ifdef YYARG
+ yychar = yylex(yyarg);
+#else
+ yychar = yylex();
+#endif
+ if(yychar <= 0) {
+ c = yytok1[0];
+ goto out;
+ }
+ if(yychar < sizeof(yytok1)/sizeof(yytok1[0])) {
+ c = yytok1[yychar];
+ goto out;
+ }
+ if(yychar >= YYPRIVATE)
+ if(yychar < YYPRIVATE+sizeof(yytok2)/sizeof(yytok2[0])) {
+ c = yytok2[yychar-YYPRIVATE];
+ goto out;
+ }
+ for(t3p=yytok3;; t3p+=2) {
+ c = t3p[0];
+ if(c == yychar) {
+ c = t3p[1];
+ goto out;
+ }
+ if(c == 0)
+ break;
+ }
+ c = 0;
+
+out:
+ if(c == 0)
+ c = yytok2[1]; /* unknown char */
+ if(yydebug >= 3)
+ printf("lex %.4lX %s\n", yychar, yytokname(c));
+ return c;
+}
+
+int
+#ifdef YYARG
+yyparse(struct Yyarg *yyarg)
+#else
+yyparse(void)
+#endif
+{
+ struct
+ {
+ YYSTYPE yyv;
+ int yys;
+ } yys[YYMAXDEPTH], *yyp, *yypt;
+ const short *yyxi;
+ int yyj, yym, yystate, yyn, yyg;
+ long yychar;
+#ifndef YYARG
+ YYSTYPE save1, save2;
+ int save3, save4;
+
+ save1 = yylval;
+ save2 = yyval;
+ save3 = yynerrs;
+ save4 = yyerrflag;
+#endif
+
+ yystate = 0;
+ yychar = -1;
+ yynerrs = 0;
+ yyerrflag = 0;
+ yyp = &yys[-1];
+ goto yystack;
+
+ret0:
+ yyn = 0;
+ goto ret;
+
+ret1:
+ yyn = 1;
+ goto ret;
+
+ret:
+#ifndef YYARG
+ yylval = save1;
+ yyval = save2;
+ yynerrs = save3;
+ yyerrflag = save4;
+#endif
+ return yyn;
+
+yystack:
+ /* put a state and value onto the stack */
+ if(yydebug >= 4)
+ printf("char %s in %s", yytokname(yychar), yystatname(yystate));
+
+ yyp++;
+ if(yyp >= &yys[YYMAXDEPTH]) {
+ yyerror("yacc stack overflow");
+ goto ret1;
+ }
+ yyp->yys = yystate;
+ yyp->yyv = yyval;
+
+yynewstate:
+ yyn = yypact[yystate];
+ if(yyn <= YYFLAG)
+ goto yydefault; /* simple state */
+ if(yychar < 0)
+#ifdef YYARG
+ yychar = yylex1(yyarg);
+#else
+ yychar = yylex1();
+#endif
+ yyn += yychar;
+ if(yyn < 0 || yyn >= YYLAST)
+ goto yydefault;
+ yyn = yyact[yyn];
+ if(yychk[yyn] == yychar) { /* valid shift */
+ yychar = -1;
+ yyval = yylval;
+ yystate = yyn;
+ if(yyerrflag > 0)
+ yyerrflag--;
+ goto yystack;
+ }
+
+yydefault:
+ /* default state action */
+ yyn = yydef[yystate];
+ if(yyn == -2) {
+ if(yychar < 0)
+#ifdef YYARG
+ yychar = yylex1(yyarg);
+#else
+ yychar = yylex1();
+#endif
+
+ /* look through exception table */
+ for(yyxi=yyexca;; yyxi+=2)
+ if(yyxi[0] == -1 && yyxi[1] == yystate)
+ break;
+ for(yyxi += 2;; yyxi += 2) {
+ yyn = yyxi[0];
+ if(yyn < 0 || yyn == yychar)
+ break;
+ }
+ yyn = yyxi[1];
+ if(yyn < 0)
+ goto ret0;
+ }
+ if(yyn == 0) {
+ /* error ... attempt to resume parsing */
+ switch(yyerrflag) {
+ case 0: /* brand new error */
+ yyerror("syntax error");
+ if(yydebug >= 1) {
+ printf("%s", yystatname(yystate));
+ printf("saw %s\n", yytokname(yychar));
+ }
+ goto yyerrlab;
+ yyerrlab:
+ yynerrs++;
+
+ case 1:
+ case 2: /* incompletely recovered error ... try again */
+ yyerrflag = 3;
+
+ /* find a state where "error" is a legal shift action */
+ while(yyp >= yys) {
+ yyn = yypact[yyp->yys] + YYERRCODE;
+ if(yyn >= 0 && yyn < YYLAST) {
+ yystate = yyact[yyn]; /* simulate a shift of "error" */
+ if(yychk[yystate] == YYERRCODE)
+ goto yystack;
+ }
+
+ /* the current yyp has no shift onn "error", pop stack */
+ if(yydebug >= 2)
+ printf("error recovery pops state %d, uncovers %d\n",
+ yyp->yys, (yyp-1)->yys );
+ yyp--;
+ }
+ /* there is no state on the stack with an error shift ... abort */
+ goto ret1;
+
+ case 3: /* no shift yet; clobber input char */
+ if(yydebug >= YYEOFCODE)
+ printf("error recovery discards %s\n", yytokname(yychar));
+ if(yychar == YYEOFCODE)
+ goto ret1;
+ yychar = -1;
+ goto yynewstate; /* try again in the same state */
+ }
+ }
+
+ /* reduction by production yyn */
+ if(yydebug >= 2)
+ printf("reduce %d in:\n\t%s", yyn, yystatname(yystate));
+
+ yypt = yyp;
+ yyp -= yyr2[yyn];
+ yyval = (yyp+1)->yyv;
+ yym = yyn;
+
+ /* consult goto table to find next state */
+ yyn = yyr1[yyn];
+ yyg = yypgo[yyn];
+ yyj = yyg + yyp->yys + 1;
+
+ if(yyj >= YYLAST || yychk[yystate=yyact[yyj]] != -yyn)
+ yystate = yyact[yyg];
+ switch(yym) {
+
+case 3:
+#line 63 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ ERROR "syntax error" WARNING; } break;
+case 6:
+#line 72 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ codegen = 1; makeiattr(0, 0); } break;
+case 7:
+#line 73 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ rightthing(yypt[-2].yyv.o, '}'); yyval.o = yypt[-1].yyv.o; } break;
+case 8:
+#line 74 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ y.o=yypt[-0].yyv.o; makevar(yypt[-2].yyv.p,PLACENAME,y); yyval.o = yypt[-0].yyv.o; } break;
+case 9:
+#line 75 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ y.o=yypt[-0].yyv.o; makevar(yypt[-3].yyv.p,PLACENAME,y); yyval.o = yypt[-0].yyv.o; } break;
+case 10:
+#line 76 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ y.o=yypt[-1].yyv.o; makevar(yypt[-3].yyv.p,PLACENAME,y); yyval.o = yypt[-1].yyv.o; } break;
+case 11:
+#line 77 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ y.f = yypt[-1].yyv.f; yyval.o = y.o; yyval.o = makenode(PLACE, 0); } break;
+case 12:
+#line 78 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ setdir(yypt[-0].yyv.i); yyval.o = makenode(PLACE, 0); } break;
+case 13:
+#line 79 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ printexpr(yypt[-1].yyv.f); yyval.o = makenode(PLACE, 0); } break;
+case 14:
+#line 80 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ printpos(yypt[-1].yyv.o); yyval.o = makenode(PLACE, 0); } break;
+case 15:
+#line 81 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ printf("%s\n", yypt[-1].yyv.p); free(yypt[-1].yyv.p); yyval.o = makenode(PLACE, 0); } break;
+case 16:
+#line 82 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ resetvar(); makeiattr(0, 0); yyval.o = makenode(PLACE, 0); } break;
+case 22:
+#line 91 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makevattr(yypt[-0].yyv.p); } break;
+case 23:
+#line 92 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makevattr(yypt[-0].yyv.p); } break;
+case 24:
+#line 93 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makevattr(yypt[-0].yyv.p); } break;
+case 25:
+#line 97 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f=y.f=yypt[-0].yyv.f; makevar(yypt[-2].yyv.p,VARNAME,y); checkscale(yypt[-2].yyv.p); } break;
+case 26:
+#line 101 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ copy(); } break;
+case 29:
+#line 108 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ copyfile(yypt[-0].yyv.p); } break;
+case 30:
+#line 109 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ copydef(yypt[-0].yyv.st); } break;
+case 31:
+#line 110 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ copyuntil(yypt[-0].yyv.p); } break;
+case 32:
+#line 115 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ forloop(yypt[-8].yyv.p, yypt[-6].yyv.f, yypt[-4].yyv.f, yypt[-2].yyv.i, yypt[-1].yyv.f, yypt[-0].yyv.p); } break;
+case 33:
+#line 117 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ forloop(yypt[-5].yyv.p, yypt[-3].yyv.f, yypt[-1].yyv.f, '+', 1.0, yypt[-0].yyv.p); } break;
+case 34:
+#line 119 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ forloop(yypt[-8].yyv.p, yypt[-6].yyv.f, yypt[-4].yyv.f, yypt[-2].yyv.i, yypt[-1].yyv.f, yypt[-0].yyv.p); } break;
+case 35:
+#line 121 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ forloop(yypt[-5].yyv.p, yypt[-3].yyv.f, yypt[-1].yyv.f, '+', 1.0, yypt[-0].yyv.p); } break;
+case 36:
+#line 125 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ ifstat(yypt[-2].yyv.f, yypt[-1].yyv.p, yypt[-0].yyv.p); } break;
+case 37:
+#line 126 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ ifstat(yypt[-1].yyv.f, yypt[-0].yyv.p, (char *) 0); } break;
+case 39:
+#line 130 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = strcmp(yypt[-2].yyv.p,yypt[-0].yyv.p) == 0; free(yypt[-2].yyv.p); free(yypt[-0].yyv.p); } break;
+case 40:
+#line 131 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = strcmp(yypt[-2].yyv.p,yypt[-0].yyv.p) != 0; free(yypt[-2].yyv.p); free(yypt[-0].yyv.p); } break;
+case 41:
+#line 135 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ y.f = 0; makevar(yypt[-0].yyv.p, VARNAME, y); } break;
+case 42:
+#line 138 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.i = '+'; } break;
+case 43:
+#line 139 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.i = '-'; } break;
+case 44:
+#line 140 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.i = '*'; } break;
+case 45:
+#line 141 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.i = '/'; } break;
+case 46:
+#line 142 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.i = ' '; } break;
+case 47:
+#line 147 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = leftthing('{'); } break;
+case 48:
+#line 151 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = boxgen(); } break;
+case 49:
+#line 152 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = circgen(yypt[-1].yyv.i); } break;
+case 50:
+#line 153 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = circgen(yypt[-1].yyv.i); } break;
+case 51:
+#line 154 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = arcgen(yypt[-1].yyv.i); } break;
+case 52:
+#line 155 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = linegen(yypt[-1].yyv.i); } break;
+case 53:
+#line 156 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = linegen(yypt[-1].yyv.i); } break;
+case 54:
+#line 157 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = linegen(yypt[-1].yyv.i); } break;
+case 55:
+#line 158 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = movegen(); } break;
+case 56:
+#line 159 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = textgen(); } break;
+case 57:
+#line 160 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = troffgen(yypt[-0].yyv.p); } break;
+case 58:
+#line 161 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o=rightthing(yypt[-2].yyv.o,']'); } break;
+case 59:
+#line 162 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = blockgen(yypt[-4].yyv.o, yypt[-1].yyv.o); } break;
+case 60:
+#line 166 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = leftthing('['); } break;
+case 63:
+#line 175 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(yypt[-1].yyv.i, !DEFAULT, yypt[-0].yyv.f); } break;
+case 64:
+#line 176 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(yypt[-0].yyv.i, DEFAULT, 0.0); } break;
+case 65:
+#line 177 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(curdir(), !DEFAULT, yypt[-0].yyv.f); } break;
+case 66:
+#line 178 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(yypt[-1].yyv.i, !DEFAULT, yypt[-0].yyv.f); } break;
+case 67:
+#line 179 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(yypt[-0].yyv.i, DEFAULT, 0.0); } break;
+case 68:
+#line 180 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makeoattr(yypt[-1].yyv.i, yypt[-0].yyv.o); } break;
+case 69:
+#line 181 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makeoattr(yypt[-1].yyv.i, yypt[-0].yyv.o); } break;
+case 70:
+#line 182 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makeoattr(yypt[-1].yyv.i, yypt[-0].yyv.o); } break;
+case 71:
+#line 183 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makeoattr(yypt[-1].yyv.i, yypt[-0].yyv.o); } break;
+case 72:
+#line 184 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makeiattr(WITH, yypt[-0].yyv.i); } break;
+case 73:
+#line 185 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makeoattr(PLACE, getblock(getlast(1,BLOCK), yypt[-0].yyv.p)); } break;
+case 74:
+#line 187 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makeoattr(PLACE, getpos(getblock(getlast(1,BLOCK), yypt[-1].yyv.p), yypt[-0].yyv.i)); } break;
+case 75:
+#line 188 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makeoattr(PLACE, yypt[-0].yyv.o); } break;
+case 76:
+#line 189 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makeiattr(SAME, yypt[-0].yyv.i); } break;
+case 77:
+#line 190 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ maketattr(yypt[-0].yyv.i, (char *) 0); } break;
+case 78:
+#line 191 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makeiattr(HEAD, yypt[-0].yyv.i); } break;
+case 79:
+#line 192 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(DOT, !DEFAULT, yypt[-0].yyv.f); } break;
+case 80:
+#line 193 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(DOT, DEFAULT, 0.0); } break;
+case 81:
+#line 194 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(DASH, !DEFAULT, yypt[-0].yyv.f); } break;
+case 82:
+#line 195 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(DASH, DEFAULT, 0.0); } break;
+case 83:
+#line 196 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(CHOP, !DEFAULT, yypt[-0].yyv.f); } break;
+case 84:
+#line 197 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(CHOP, DEFAULT, 0.0); } break;
+case 85:
+#line 198 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(FILL, !DEFAULT, yypt[-0].yyv.f); } break;
+case 86:
+#line 199 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ makefattr(FILL, DEFAULT, 0.0); } break;
+case 90:
+#line 208 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ maketattr(CENTER, yypt[-0].yyv.p); } break;
+case 91:
+#line 209 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ maketattr(yypt[-0].yyv.i, yypt[-1].yyv.p); } break;
+case 92:
+#line 210 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ addtattr(yypt[-0].yyv.i); } break;
+case 94:
+#line 214 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.p = sprintgen(yypt[-1].yyv.p); } break;
+case 95:
+#line 215 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.p = sprintgen(yypt[-3].yyv.p); } break;
+case 96:
+#line 219 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ exprsave(yypt[-0].yyv.f); yyval.i = 0; } break;
+case 97:
+#line 220 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ exprsave(yypt[-0].yyv.f); } break;
+case 99:
+#line 225 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = yypt[-1].yyv.o; } break;
+case 100:
+#line 226 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = makepos(yypt[-2].yyv.f, yypt[-0].yyv.f); } break;
+case 101:
+#line 227 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = fixpos(yypt[-4].yyv.o, yypt[-2].yyv.f, yypt[-0].yyv.f); } break;
+case 102:
+#line 228 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = fixpos(yypt[-4].yyv.o, -yypt[-2].yyv.f, -yypt[-0].yyv.f); } break;
+case 103:
+#line 229 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = fixpos(yypt[-6].yyv.o, yypt[-3].yyv.f, yypt[-1].yyv.f); } break;
+case 104:
+#line 230 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = fixpos(yypt[-6].yyv.o, -yypt[-3].yyv.f, -yypt[-1].yyv.f); } break;
+case 105:
+#line 231 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = addpos(yypt[-2].yyv.o, yypt[-0].yyv.o); } break;
+case 106:
+#line 232 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = subpos(yypt[-2].yyv.o, yypt[-0].yyv.o); } break;
+case 107:
+#line 233 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = makepos(getcomp(yypt[-3].yyv.o,DOTX), getcomp(yypt[-1].yyv.o,DOTY)); } break;
+case 108:
+#line 234 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = makebetween(yypt[-5].yyv.f, yypt[-3].yyv.o, yypt[-1].yyv.o); } break;
+case 109:
+#line 235 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = makebetween(yypt[-4].yyv.f, yypt[-2].yyv.o, yypt[-0].yyv.o); } break;
+case 110:
+#line 239 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ y = getvar(yypt[-0].yyv.p); yyval.o = y.o; } break;
+case 111:
+#line 240 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ y = getvar(yypt[-1].yyv.p); yyval.o = getpos(y.o, yypt[-0].yyv.i); } break;
+case 112:
+#line 241 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ y = getvar(yypt[-0].yyv.p); yyval.o = getpos(y.o, yypt[-1].yyv.i); } break;
+case 113:
+#line 242 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = gethere(); } break;
+case 114:
+#line 243 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = getlast(yypt[-1].yyv.i, yypt[-0].yyv.i); } break;
+case 115:
+#line 244 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = getpos(getlast(yypt[-2].yyv.i, yypt[-1].yyv.i), yypt[-0].yyv.i); } break;
+case 116:
+#line 245 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = getpos(getlast(yypt[-1].yyv.i, yypt[-0].yyv.i), yypt[-2].yyv.i); } break;
+case 117:
+#line 246 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = getfirst(yypt[-1].yyv.i, yypt[-0].yyv.i); } break;
+case 118:
+#line 247 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = getpos(getfirst(yypt[-2].yyv.i, yypt[-1].yyv.i), yypt[-0].yyv.i); } break;
+case 119:
+#line 248 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = getpos(getfirst(yypt[-1].yyv.i, yypt[-0].yyv.i), yypt[-2].yyv.i); } break;
+case 121:
+#line 250 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = getpos(yypt[-1].yyv.o, yypt[-0].yyv.i); } break;
+case 122:
+#line 251 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = getpos(yypt[-0].yyv.o, yypt[-1].yyv.i); } break;
+case 123:
+#line 255 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = getblock(getlast(yypt[-3].yyv.i,yypt[-2].yyv.i), yypt[-0].yyv.p); } break;
+case 124:
+#line 256 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.o = getblock(getfirst(yypt[-3].yyv.i,yypt[-2].yyv.i), yypt[-0].yyv.p); } break;
+case 125:
+#line 257 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ y = getvar(yypt[-2].yyv.p); yyval.o = getblock(y.o, yypt[-0].yyv.p); } break;
+case 126:
+#line 261 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.i = yypt[-1].yyv.i + 1; } break;
+case 127:
+#line 262 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.i = yypt[-1].yyv.i; } break;
+case 128:
+#line 263 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.i = 1; } break;
+case 138:
+#line 279 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = getfval(yypt[-0].yyv.p); } break;
+case 140:
+#line 281 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-2].yyv.f + yypt[-0].yyv.f; } break;
+case 141:
+#line 282 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-2].yyv.f - yypt[-0].yyv.f; } break;
+case 142:
+#line 283 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-2].yyv.f * yypt[-0].yyv.f; } break;
+case 143:
+#line 284 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ if (yypt[-0].yyv.f == 0.0) {
+ ERROR "division by 0" WARNING; yypt[-0].yyv.f = 1; }
+ yyval.f = yypt[-2].yyv.f / yypt[-0].yyv.f; } break;
+case 144:
+#line 287 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ if ((long)yypt[-0].yyv.f == 0) {
+ ERROR "mod division by 0" WARNING; yypt[-0].yyv.f = 1; }
+ yyval.f = (long)yypt[-2].yyv.f % (long)yypt[-0].yyv.f; } break;
+case 145:
+#line 290 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = -yypt[-0].yyv.f; } break;
+case 146:
+#line 291 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-1].yyv.f; } break;
+case 147:
+#line 292 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = getcomp(yypt[-1].yyv.o, yypt[-0].yyv.i); } break;
+case 148:
+#line 293 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = getcomp(yypt[-1].yyv.o, yypt[-0].yyv.i); } break;
+case 149:
+#line 294 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = getcomp(yypt[-1].yyv.o, yypt[-0].yyv.i); } break;
+case 150:
+#line 295 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = getcomp(yypt[-1].yyv.o, yypt[-0].yyv.i); } break;
+case 151:
+#line 296 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = getcomp(yypt[-1].yyv.o, yypt[-0].yyv.i); } break;
+case 152:
+#line 297 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ y = getvar(yypt[-2].yyv.p); yyval.f = getblkvar(y.o, yypt[-0].yyv.p); } break;
+case 153:
+#line 298 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = getblkvar(getlast(yypt[-3].yyv.i,yypt[-2].yyv.i), yypt[-0].yyv.p); } break;
+case 154:
+#line 299 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = getblkvar(getfirst(yypt[-3].yyv.i,yypt[-2].yyv.i), yypt[-0].yyv.p); } break;
+case 155:
+#line 300 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-2].yyv.f > yypt[-0].yyv.f; } break;
+case 156:
+#line 301 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-2].yyv.f < yypt[-0].yyv.f; } break;
+case 157:
+#line 302 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-2].yyv.f <= yypt[-0].yyv.f; } break;
+case 158:
+#line 303 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-2].yyv.f >= yypt[-0].yyv.f; } break;
+case 159:
+#line 304 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-2].yyv.f == yypt[-0].yyv.f; } break;
+case 160:
+#line 305 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-2].yyv.f != yypt[-0].yyv.f; } break;
+case 161:
+#line 306 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-2].yyv.f && yypt[-0].yyv.f; } break;
+case 162:
+#line 307 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-2].yyv.f || yypt[-0].yyv.f; } break;
+case 163:
+#line 308 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = !(yypt[-0].yyv.f); } break;
+case 164:
+#line 309 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = Log10(yypt[-1].yyv.f); } break;
+case 165:
+#line 310 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = Exp(yypt[-1].yyv.f * log(10.0)); } break;
+case 166:
+#line 311 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = pow(yypt[-2].yyv.f, yypt[-0].yyv.f); } break;
+case 167:
+#line 312 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = sin(yypt[-1].yyv.f); } break;
+case 168:
+#line 313 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = cos(yypt[-1].yyv.f); } break;
+case 169:
+#line 314 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = atan2(yypt[-3].yyv.f, yypt[-1].yyv.f); } break;
+case 170:
+#line 315 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = Sqrt(yypt[-1].yyv.f); } break;
+case 171:
+#line 316 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = (float)rand() / 32767.0; /* might be 2^31-1 */ } break;
+case 172:
+#line 317 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-3].yyv.f >= yypt[-1].yyv.f ? yypt[-3].yyv.f : yypt[-1].yyv.f; } break;
+case 173:
+#line 318 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = yypt[-3].yyv.f <= yypt[-1].yyv.f ? yypt[-3].yyv.f : yypt[-1].yyv.f; } break;
+case 174:
+#line 319 "/usr/local/plan9/src/cmd/tpic/picy.y"
+{ yyval.f = (long) yypt[-1].yyv.f; } break;
+ }
+ goto yystack; /* stack new state and value */
+}