Fossil SCM

Update to the latest Pikchr trunk version.

drh 2021-07-09 10:51 trunk
Commit f0b08d071a6d3595533865d669845ec180e527d961b0c20233b4f14771e17447
1 file changed +266 -250
+266 -250
--- src/pikchr.c
+++ src/pikchr.c
@@ -428,10 +428,11 @@
428428
static PObj *pik_elem_new(Pik*,PToken*,PToken*,PList*);
429429
static void pik_set_direction(Pik*,int);
430430
static void pik_elem_setname(Pik*,PObj*,PToken*);
431431
static void pik_set_var(Pik*,PToken*,PNum,PToken*);
432432
static PNum pik_value(Pik*,const char*,int,int*);
433
+static int pik_value_int(Pik*,const char*,int,int*);
433434
static PNum pik_lookup_color(Pik*,PToken*);
434435
static PNum pik_get_var(Pik*,PToken*);
435436
static PNum pik_atof(PToken*);
436437
static void pik_after_adding_attributes(Pik*,PObj*);
437438
static void pik_elem_move(PObj*,PNum dx, PNum dy);
@@ -474,11 +475,11 @@
474475
static PObj *pik_position_assert(Pik*,PPoint*,PToken*,PPoint*);
475476
static PNum pik_dist(PPoint*,PPoint*);
476477
static void pik_add_macro(Pik*,PToken *pId,PToken *pCode);
477478
478479
479
-#line 505 "pikchr.c"
480
+#line 506 "pikchr.c"
480481
/**************** End of %include directives **********************************/
481482
/* These constants specify the various numeric values for terminal symbols.
482483
***************** Begin token definitions *************************************/
483484
#ifndef T_ID
484485
#define T_ID 1
@@ -1703,22 +1704,22 @@
17031704
** inside the C code.
17041705
*/
17051706
/********* Begin destructor definitions ***************************************/
17061707
case 99: /* statement_list */
17071708
{
1708
-#line 494 "pikchr.y"
1709
+#line 495 "pikchr.y"
17091710
pik_elist_free(p,(yypminor->yy227));
1710
-#line 1735 "pikchr.c"
1711
+#line 1736 "pikchr.c"
17111712
}
17121713
break;
17131714
case 100: /* statement */
17141715
case 101: /* unnamed_statement */
17151716
case 102: /* basetype */
17161717
{
1717
-#line 496 "pikchr.y"
1718
+#line 497 "pikchr.y"
17181719
pik_elem_free(p,(yypminor->yy36));
1719
-#line 1744 "pikchr.c"
1720
+#line 1745 "pikchr.c"
17201721
}
17211722
break;
17221723
/********* End destructor definitions *****************************************/
17231724
default: break; /* If no destructor action specified: do nothing */
17241725
}
@@ -1932,14 +1933,14 @@
19321933
#endif
19331934
while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
19341935
/* Here code is inserted which will execute if the parser
19351936
** stack every overflows */
19361937
/******** Begin %stack_overflow code ******************************************/
1937
-#line 528 "pikchr.y"
1938
+#line 529 "pikchr.y"
19381939
19391940
pik_error(p, 0, "parser stack overflow");
1940
-#line 1965 "pikchr.c"
1941
+#line 1966 "pikchr.c"
19411942
/******** End %stack_overflow code ********************************************/
19421943
pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
19431944
pik_parserCTX_STORE
19441945
}
19451946
@@ -2415,619 +2416,619 @@
24152416
** break;
24162417
*/
24172418
/********** Begin reduce actions **********************************************/
24182419
YYMINORTYPE yylhsminor;
24192420
case 0: /* document ::= statement_list */
2420
-#line 532 "pikchr.y"
2421
+#line 533 "pikchr.y"
24212422
{pik_render(p,yymsp[0].minor.yy227);}
2422
-#line 2447 "pikchr.c"
2423
+#line 2448 "pikchr.c"
24232424
break;
24242425
case 1: /* statement_list ::= statement */
2425
-#line 535 "pikchr.y"
2426
+#line 536 "pikchr.y"
24262427
{ yylhsminor.yy227 = pik_elist_append(p,0,yymsp[0].minor.yy36); }
2427
-#line 2452 "pikchr.c"
2428
+#line 2453 "pikchr.c"
24282429
yymsp[0].minor.yy227 = yylhsminor.yy227;
24292430
break;
24302431
case 2: /* statement_list ::= statement_list EOL statement */
2431
-#line 537 "pikchr.y"
2432
+#line 538 "pikchr.y"
24322433
{ yylhsminor.yy227 = pik_elist_append(p,yymsp[-2].minor.yy227,yymsp[0].minor.yy36); }
2433
-#line 2458 "pikchr.c"
2434
+#line 2459 "pikchr.c"
24342435
yymsp[-2].minor.yy227 = yylhsminor.yy227;
24352436
break;
24362437
case 3: /* statement ::= */
2437
-#line 540 "pikchr.y"
2438
+#line 541 "pikchr.y"
24382439
{ yymsp[1].minor.yy36 = 0; }
2439
-#line 2464 "pikchr.c"
2440
+#line 2465 "pikchr.c"
24402441
break;
24412442
case 4: /* statement ::= direction */
2442
-#line 541 "pikchr.y"
2443
+#line 542 "pikchr.y"
24432444
{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy36=0; }
2444
-#line 2469 "pikchr.c"
2445
+#line 2470 "pikchr.c"
24452446
yymsp[0].minor.yy36 = yylhsminor.yy36;
24462447
break;
24472448
case 5: /* statement ::= lvalue ASSIGN rvalue */
2448
-#line 542 "pikchr.y"
2449
+#line 543 "pikchr.y"
24492450
{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy153,&yymsp[-1].minor.yy0); yylhsminor.yy36=0;}
2450
-#line 2475 "pikchr.c"
2451
+#line 2476 "pikchr.c"
24512452
yymsp[-2].minor.yy36 = yylhsminor.yy36;
24522453
break;
24532454
case 6: /* statement ::= PLACENAME COLON unnamed_statement */
2454
-#line 544 "pikchr.y"
2455
+#line 545 "pikchr.y"
24552456
{ yylhsminor.yy36 = yymsp[0].minor.yy36; pik_elem_setname(p,yymsp[0].minor.yy36,&yymsp[-2].minor.yy0); }
2456
-#line 2481 "pikchr.c"
2457
+#line 2482 "pikchr.c"
24572458
yymsp[-2].minor.yy36 = yylhsminor.yy36;
24582459
break;
24592460
case 7: /* statement ::= PLACENAME COLON position */
2460
-#line 546 "pikchr.y"
2461
+#line 547 "pikchr.y"
24612462
{ yylhsminor.yy36 = pik_elem_new(p,0,0,0);
24622463
if(yylhsminor.yy36){ yylhsminor.yy36->ptAt = yymsp[0].minor.yy79; pik_elem_setname(p,yylhsminor.yy36,&yymsp[-2].minor.yy0); }}
2463
-#line 2488 "pikchr.c"
2464
+#line 2489 "pikchr.c"
24642465
yymsp[-2].minor.yy36 = yylhsminor.yy36;
24652466
break;
24662467
case 8: /* statement ::= unnamed_statement */
2467
-#line 548 "pikchr.y"
2468
+#line 549 "pikchr.y"
24682469
{yylhsminor.yy36 = yymsp[0].minor.yy36;}
2469
-#line 2494 "pikchr.c"
2470
+#line 2495 "pikchr.c"
24702471
yymsp[0].minor.yy36 = yylhsminor.yy36;
24712472
break;
24722473
case 9: /* statement ::= print prlist */
2473
-#line 549 "pikchr.y"
2474
+#line 550 "pikchr.y"
24742475
{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy36=0;}
2475
-#line 2500 "pikchr.c"
2476
+#line 2501 "pikchr.c"
24762477
break;
24772478
case 10: /* statement ::= ASSERT LP expr EQ expr RP */
2478
-#line 554 "pikchr.y"
2479
+#line 555 "pikchr.y"
24792480
{yymsp[-5].minor.yy36=pik_assert(p,yymsp[-3].minor.yy153,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy153);}
2480
-#line 2505 "pikchr.c"
2481
+#line 2506 "pikchr.c"
24812482
break;
24822483
case 11: /* statement ::= ASSERT LP position EQ position RP */
2483
-#line 556 "pikchr.y"
2484
+#line 557 "pikchr.y"
24842485
{yymsp[-5].minor.yy36=pik_position_assert(p,&yymsp[-3].minor.yy79,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy79);}
2485
-#line 2510 "pikchr.c"
2486
+#line 2511 "pikchr.c"
24862487
break;
24872488
case 12: /* statement ::= DEFINE ID CODEBLOCK */
2488
-#line 557 "pikchr.y"
2489
+#line 558 "pikchr.y"
24892490
{yymsp[-2].minor.yy36=0; pik_add_macro(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
2490
-#line 2515 "pikchr.c"
2491
+#line 2516 "pikchr.c"
24912492
break;
24922493
case 13: /* rvalue ::= PLACENAME */
2493
-#line 568 "pikchr.y"
2494
+#line 569 "pikchr.y"
24942495
{yylhsminor.yy153 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2495
-#line 2520 "pikchr.c"
2496
+#line 2521 "pikchr.c"
24962497
yymsp[0].minor.yy153 = yylhsminor.yy153;
24972498
break;
24982499
case 14: /* pritem ::= FILL */
24992500
case 15: /* pritem ::= COLOR */ yytestcase(yyruleno==15);
25002501
case 16: /* pritem ::= THICKNESS */ yytestcase(yyruleno==16);
2501
-#line 573 "pikchr.y"
2502
+#line 574 "pikchr.y"
25022503
{pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2503
-#line 2528 "pikchr.c"
2504
+#line 2529 "pikchr.c"
25042505
break;
25052506
case 17: /* pritem ::= rvalue */
2506
-#line 576 "pikchr.y"
2507
+#line 577 "pikchr.y"
25072508
{pik_append_num(p,"",yymsp[0].minor.yy153);}
2508
-#line 2533 "pikchr.c"
2509
+#line 2534 "pikchr.c"
25092510
break;
25102511
case 18: /* pritem ::= STRING */
2511
-#line 577 "pikchr.y"
2512
+#line 578 "pikchr.y"
25122513
{pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2513
-#line 2538 "pikchr.c"
2514
+#line 2539 "pikchr.c"
25142515
break;
25152516
case 19: /* prsep ::= COMMA */
2516
-#line 578 "pikchr.y"
2517
+#line 579 "pikchr.y"
25172518
{pik_append(p, " ", 1);}
2518
-#line 2543 "pikchr.c"
2519
+#line 2544 "pikchr.c"
25192520
break;
25202521
case 20: /* unnamed_statement ::= basetype attribute_list */
2521
-#line 581 "pikchr.y"
2522
+#line 582 "pikchr.y"
25222523
{yylhsminor.yy36 = yymsp[-1].minor.yy36; pik_after_adding_attributes(p,yylhsminor.yy36);}
2523
-#line 2548 "pikchr.c"
2524
+#line 2549 "pikchr.c"
25242525
yymsp[-1].minor.yy36 = yylhsminor.yy36;
25252526
break;
25262527
case 21: /* basetype ::= CLASSNAME */
2527
-#line 583 "pikchr.y"
2528
+#line 584 "pikchr.y"
25282529
{yylhsminor.yy36 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2529
-#line 2554 "pikchr.c"
2530
+#line 2555 "pikchr.c"
25302531
yymsp[0].minor.yy36 = yylhsminor.yy36;
25312532
break;
25322533
case 22: /* basetype ::= STRING textposition */
2533
-#line 585 "pikchr.y"
2534
+#line 586 "pikchr.y"
25342535
{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy164; yylhsminor.yy36 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2535
-#line 2560 "pikchr.c"
2536
+#line 2561 "pikchr.c"
25362537
yymsp[-1].minor.yy36 = yylhsminor.yy36;
25372538
break;
25382539
case 23: /* basetype ::= LB savelist statement_list RB */
2539
-#line 587 "pikchr.y"
2540
+#line 588 "pikchr.y"
25402541
{ p->list = yymsp[-2].minor.yy227; yymsp[-3].minor.yy36 = pik_elem_new(p,0,0,yymsp[-1].minor.yy227); if(yymsp[-3].minor.yy36) yymsp[-3].minor.yy36->errTok = yymsp[0].minor.yy0; }
2541
-#line 2566 "pikchr.c"
2542
+#line 2567 "pikchr.c"
25422543
break;
25432544
case 24: /* savelist ::= */
2544
-#line 592 "pikchr.y"
2545
+#line 593 "pikchr.y"
25452546
{yymsp[1].minor.yy227 = p->list; p->list = 0;}
2546
-#line 2571 "pikchr.c"
2547
+#line 2572 "pikchr.c"
25472548
break;
25482549
case 25: /* relexpr ::= expr */
2549
-#line 599 "pikchr.y"
2550
+#line 600 "pikchr.y"
25502551
{yylhsminor.yy10.rAbs = yymsp[0].minor.yy153; yylhsminor.yy10.rRel = 0;}
2551
-#line 2576 "pikchr.c"
2552
+#line 2577 "pikchr.c"
25522553
yymsp[0].minor.yy10 = yylhsminor.yy10;
25532554
break;
25542555
case 26: /* relexpr ::= expr PERCENT */
2555
-#line 600 "pikchr.y"
2556
+#line 601 "pikchr.y"
25562557
{yylhsminor.yy10.rAbs = 0; yylhsminor.yy10.rRel = yymsp[-1].minor.yy153/100;}
2557
-#line 2582 "pikchr.c"
2558
+#line 2583 "pikchr.c"
25582559
yymsp[-1].minor.yy10 = yylhsminor.yy10;
25592560
break;
25602561
case 27: /* optrelexpr ::= */
2561
-#line 602 "pikchr.y"
2562
+#line 603 "pikchr.y"
25622563
{yymsp[1].minor.yy10.rAbs = 0; yymsp[1].minor.yy10.rRel = 1.0;}
2563
-#line 2588 "pikchr.c"
2564
+#line 2589 "pikchr.c"
25642565
break;
25652566
case 28: /* attribute_list ::= relexpr alist */
2566
-#line 604 "pikchr.y"
2567
+#line 605 "pikchr.y"
25672568
{pik_add_direction(p,0,&yymsp[-1].minor.yy10);}
2568
-#line 2593 "pikchr.c"
2569
+#line 2594 "pikchr.c"
25692570
break;
25702571
case 29: /* attribute ::= numproperty relexpr */
2571
-#line 608 "pikchr.y"
2572
+#line 609 "pikchr.y"
25722573
{ pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy10); }
2573
-#line 2598 "pikchr.c"
2574
+#line 2599 "pikchr.c"
25742575
break;
25752576
case 30: /* attribute ::= dashproperty expr */
2576
-#line 609 "pikchr.y"
2577
+#line 610 "pikchr.y"
25772578
{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy153); }
2578
-#line 2603 "pikchr.c"
2579
+#line 2604 "pikchr.c"
25792580
break;
25802581
case 31: /* attribute ::= dashproperty */
2581
-#line 610 "pikchr.y"
2582
+#line 611 "pikchr.y"
25822583
{ pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2583
-#line 2608 "pikchr.c"
2584
+#line 2609 "pikchr.c"
25842585
break;
25852586
case 32: /* attribute ::= colorproperty rvalue */
2586
-#line 611 "pikchr.y"
2587
+#line 612 "pikchr.y"
25872588
{ pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy153); }
2588
-#line 2613 "pikchr.c"
2589
+#line 2614 "pikchr.c"
25892590
break;
25902591
case 33: /* attribute ::= go direction optrelexpr */
2591
-#line 612 "pikchr.y"
2592
+#line 613 "pikchr.y"
25922593
{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy10);}
2593
-#line 2618 "pikchr.c"
2594
+#line 2619 "pikchr.c"
25942595
break;
25952596
case 34: /* attribute ::= go direction even position */
2596
-#line 613 "pikchr.y"
2597
+#line 614 "pikchr.y"
25972598
{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy79);}
2598
-#line 2623 "pikchr.c"
2599
+#line 2624 "pikchr.c"
25992600
break;
26002601
case 35: /* attribute ::= CLOSE */
2601
-#line 614 "pikchr.y"
2602
+#line 615 "pikchr.y"
26022603
{ pik_close_path(p,&yymsp[0].minor.yy0); }
2603
-#line 2628 "pikchr.c"
2604
+#line 2629 "pikchr.c"
26042605
break;
26052606
case 36: /* attribute ::= CHOP */
2606
-#line 615 "pikchr.y"
2607
+#line 616 "pikchr.y"
26072608
{ p->cur->bChop = 1; }
2608
-#line 2633 "pikchr.c"
2609
+#line 2634 "pikchr.c"
26092610
break;
26102611
case 37: /* attribute ::= FROM position */
2611
-#line 616 "pikchr.y"
2612
+#line 617 "pikchr.y"
26122613
{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy79); }
2613
-#line 2638 "pikchr.c"
2614
+#line 2639 "pikchr.c"
26142615
break;
26152616
case 38: /* attribute ::= TO position */
2616
-#line 617 "pikchr.y"
2617
+#line 618 "pikchr.y"
26172618
{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy79); }
2618
-#line 2643 "pikchr.c"
2619
+#line 2644 "pikchr.c"
26192620
break;
26202621
case 39: /* attribute ::= THEN */
2621
-#line 618 "pikchr.y"
2622
+#line 619 "pikchr.y"
26222623
{ pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2623
-#line 2648 "pikchr.c"
2624
+#line 2649 "pikchr.c"
26242625
break;
26252626
case 40: /* attribute ::= THEN optrelexpr HEADING expr */
26262627
case 42: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==42);
2627
-#line 620 "pikchr.y"
2628
+#line 621 "pikchr.y"
26282629
{pik_move_hdg(p,&yymsp[-2].minor.yy10,&yymsp[-1].minor.yy0,yymsp[0].minor.yy153,0,&yymsp[-3].minor.yy0);}
2629
-#line 2654 "pikchr.c"
2630
+#line 2655 "pikchr.c"
26302631
break;
26312632
case 41: /* attribute ::= THEN optrelexpr EDGEPT */
26322633
case 43: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==43);
2633
-#line 621 "pikchr.y"
2634
+#line 622 "pikchr.y"
26342635
{pik_move_hdg(p,&yymsp[-1].minor.yy10,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2635
-#line 2660 "pikchr.c"
2636
+#line 2661 "pikchr.c"
26362637
break;
26372638
case 44: /* attribute ::= AT position */
2638
-#line 626 "pikchr.y"
2639
+#line 627 "pikchr.y"
26392640
{ pik_set_at(p,0,&yymsp[0].minor.yy79,&yymsp[-1].minor.yy0); }
2640
-#line 2665 "pikchr.c"
2641
+#line 2666 "pikchr.c"
26412642
break;
26422643
case 45: /* attribute ::= SAME */
2643
-#line 628 "pikchr.y"
2644
+#line 629 "pikchr.y"
26442645
{pik_same(p,0,&yymsp[0].minor.yy0);}
2645
-#line 2670 "pikchr.c"
2646
+#line 2671 "pikchr.c"
26462647
break;
26472648
case 46: /* attribute ::= SAME AS object */
2648
-#line 629 "pikchr.y"
2649
+#line 630 "pikchr.y"
26492650
{pik_same(p,yymsp[0].minor.yy36,&yymsp[-2].minor.yy0);}
2650
-#line 2675 "pikchr.c"
2651
+#line 2676 "pikchr.c"
26512652
break;
26522653
case 47: /* attribute ::= STRING textposition */
2653
-#line 630 "pikchr.y"
2654
+#line 631 "pikchr.y"
26542655
{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy164);}
2655
-#line 2680 "pikchr.c"
2656
+#line 2681 "pikchr.c"
26562657
break;
26572658
case 48: /* attribute ::= FIT */
2658
-#line 631 "pikchr.y"
2659
+#line 632 "pikchr.y"
26592660
{pik_size_to_fit(p,&yymsp[0].minor.yy0,3); }
2660
-#line 2685 "pikchr.c"
2661
+#line 2686 "pikchr.c"
26612662
break;
26622663
case 49: /* attribute ::= BEHIND object */
2663
-#line 632 "pikchr.y"
2664
+#line 633 "pikchr.y"
26642665
{pik_behind(p,yymsp[0].minor.yy36);}
2665
-#line 2690 "pikchr.c"
2666
+#line 2691 "pikchr.c"
26662667
break;
26672668
case 50: /* withclause ::= DOT_E edge AT position */
26682669
case 51: /* withclause ::= edge AT position */ yytestcase(yyruleno==51);
2669
-#line 640 "pikchr.y"
2670
+#line 641 "pikchr.y"
26702671
{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy79,&yymsp[-1].minor.yy0); }
2671
-#line 2696 "pikchr.c"
2672
+#line 2697 "pikchr.c"
26722673
break;
26732674
case 52: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2674
-#line 644 "pikchr.y"
2675
+#line 645 "pikchr.y"
26752676
{yylhsminor.yy0 = yymsp[0].minor.yy0;}
2676
-#line 2701 "pikchr.c"
2677
+#line 2702 "pikchr.c"
26772678
yymsp[0].minor.yy0 = yylhsminor.yy0;
26782679
break;
26792680
case 53: /* boolproperty ::= CW */
2680
-#line 655 "pikchr.y"
2681
+#line 656 "pikchr.y"
26812682
{p->cur->cw = 1;}
2682
-#line 2707 "pikchr.c"
2683
+#line 2708 "pikchr.c"
26832684
break;
26842685
case 54: /* boolproperty ::= CCW */
2685
-#line 656 "pikchr.y"
2686
+#line 657 "pikchr.y"
26862687
{p->cur->cw = 0;}
2687
-#line 2712 "pikchr.c"
2688
+#line 2713 "pikchr.c"
26882689
break;
26892690
case 55: /* boolproperty ::= LARROW */
2690
-#line 657 "pikchr.y"
2691
+#line 658 "pikchr.y"
26912692
{p->cur->larrow=1; p->cur->rarrow=0; }
2692
-#line 2717 "pikchr.c"
2693
+#line 2718 "pikchr.c"
26932694
break;
26942695
case 56: /* boolproperty ::= RARROW */
2695
-#line 658 "pikchr.y"
2696
+#line 659 "pikchr.y"
26962697
{p->cur->larrow=0; p->cur->rarrow=1; }
2697
-#line 2722 "pikchr.c"
2698
+#line 2723 "pikchr.c"
26982699
break;
26992700
case 57: /* boolproperty ::= LRARROW */
2700
-#line 659 "pikchr.y"
2701
+#line 660 "pikchr.y"
27012702
{p->cur->larrow=1; p->cur->rarrow=1; }
2702
-#line 2727 "pikchr.c"
2703
+#line 2728 "pikchr.c"
27032704
break;
27042705
case 58: /* boolproperty ::= INVIS */
2705
-#line 660 "pikchr.y"
2706
+#line 661 "pikchr.y"
27062707
{p->cur->sw = 0.0;}
2707
-#line 2732 "pikchr.c"
2708
+#line 2733 "pikchr.c"
27082709
break;
27092710
case 59: /* boolproperty ::= THICK */
2710
-#line 661 "pikchr.y"
2711
+#line 662 "pikchr.y"
27112712
{p->cur->sw *= 1.5;}
2712
-#line 2737 "pikchr.c"
2713
+#line 2738 "pikchr.c"
27132714
break;
27142715
case 60: /* boolproperty ::= THIN */
2715
-#line 662 "pikchr.y"
2716
+#line 663 "pikchr.y"
27162717
{p->cur->sw *= 0.67;}
2717
-#line 2742 "pikchr.c"
2718
+#line 2743 "pikchr.c"
27182719
break;
27192720
case 61: /* boolproperty ::= SOLID */
2720
-#line 663 "pikchr.y"
2721
+#line 664 "pikchr.y"
27212722
{p->cur->sw = pik_value(p,"thickness",9,0);
27222723
p->cur->dotted = p->cur->dashed = 0.0;}
2723
-#line 2748 "pikchr.c"
2724
+#line 2749 "pikchr.c"
27242725
break;
27252726
case 62: /* textposition ::= */
2726
-#line 666 "pikchr.y"
2727
+#line 667 "pikchr.y"
27272728
{yymsp[1].minor.yy164 = 0;}
2728
-#line 2753 "pikchr.c"
2729
+#line 2754 "pikchr.c"
27292730
break;
27302731
case 63: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2731
-#line 669 "pikchr.y"
2732
+#line 670 "pikchr.y"
27322733
{yylhsminor.yy164 = (short int)pik_text_position(yymsp[-1].minor.yy164,&yymsp[0].minor.yy0);}
2733
-#line 2758 "pikchr.c"
2734
+#line 2759 "pikchr.c"
27342735
yymsp[-1].minor.yy164 = yylhsminor.yy164;
27352736
break;
27362737
case 64: /* position ::= expr COMMA expr */
2737
-#line 672 "pikchr.y"
2738
+#line 673 "pikchr.y"
27382739
{yylhsminor.yy79.x=yymsp[-2].minor.yy153; yylhsminor.yy79.y=yymsp[0].minor.yy153;}
2739
-#line 2764 "pikchr.c"
2740
+#line 2765 "pikchr.c"
27402741
yymsp[-2].minor.yy79 = yylhsminor.yy79;
27412742
break;
27422743
case 65: /* position ::= place PLUS expr COMMA expr */
2743
-#line 674 "pikchr.y"
2744
+#line 675 "pikchr.y"
27442745
{yylhsminor.yy79.x=yymsp[-4].minor.yy79.x+yymsp[-2].minor.yy153; yylhsminor.yy79.y=yymsp[-4].minor.yy79.y+yymsp[0].minor.yy153;}
2745
-#line 2770 "pikchr.c"
2746
+#line 2771 "pikchr.c"
27462747
yymsp[-4].minor.yy79 = yylhsminor.yy79;
27472748
break;
27482749
case 66: /* position ::= place MINUS expr COMMA expr */
2749
-#line 675 "pikchr.y"
2750
+#line 676 "pikchr.y"
27502751
{yylhsminor.yy79.x=yymsp[-4].minor.yy79.x-yymsp[-2].minor.yy153; yylhsminor.yy79.y=yymsp[-4].minor.yy79.y-yymsp[0].minor.yy153;}
2751
-#line 2776 "pikchr.c"
2752
+#line 2777 "pikchr.c"
27522753
yymsp[-4].minor.yy79 = yylhsminor.yy79;
27532754
break;
27542755
case 67: /* position ::= place PLUS LP expr COMMA expr RP */
2755
-#line 677 "pikchr.y"
2756
+#line 678 "pikchr.y"
27562757
{yylhsminor.yy79.x=yymsp[-6].minor.yy79.x+yymsp[-3].minor.yy153; yylhsminor.yy79.y=yymsp[-6].minor.yy79.y+yymsp[-1].minor.yy153;}
2757
-#line 2782 "pikchr.c"
2758
+#line 2783 "pikchr.c"
27582759
yymsp[-6].minor.yy79 = yylhsminor.yy79;
27592760
break;
27602761
case 68: /* position ::= place MINUS LP expr COMMA expr RP */
2761
-#line 679 "pikchr.y"
2762
+#line 680 "pikchr.y"
27622763
{yylhsminor.yy79.x=yymsp[-6].minor.yy79.x-yymsp[-3].minor.yy153; yylhsminor.yy79.y=yymsp[-6].minor.yy79.y-yymsp[-1].minor.yy153;}
2763
-#line 2788 "pikchr.c"
2764
+#line 2789 "pikchr.c"
27642765
yymsp[-6].minor.yy79 = yylhsminor.yy79;
27652766
break;
27662767
case 69: /* position ::= LP position COMMA position RP */
2767
-#line 680 "pikchr.y"
2768
+#line 681 "pikchr.y"
27682769
{yymsp[-4].minor.yy79.x=yymsp[-3].minor.yy79.x; yymsp[-4].minor.yy79.y=yymsp[-1].minor.yy79.y;}
2769
-#line 2794 "pikchr.c"
2770
+#line 2795 "pikchr.c"
27702771
break;
27712772
case 70: /* position ::= LP position RP */
2772
-#line 681 "pikchr.y"
2773
+#line 682 "pikchr.y"
27732774
{yymsp[-2].minor.yy79=yymsp[-1].minor.yy79;}
2774
-#line 2799 "pikchr.c"
2775
+#line 2800 "pikchr.c"
27752776
break;
27762777
case 71: /* position ::= expr between position AND position */
2777
-#line 683 "pikchr.y"
2778
+#line 684 "pikchr.y"
27782779
{yylhsminor.yy79 = pik_position_between(yymsp[-4].minor.yy153,yymsp[-2].minor.yy79,yymsp[0].minor.yy79);}
2779
-#line 2804 "pikchr.c"
2780
+#line 2805 "pikchr.c"
27802781
yymsp[-4].minor.yy79 = yylhsminor.yy79;
27812782
break;
27822783
case 72: /* position ::= expr LT position COMMA position GT */
2783
-#line 685 "pikchr.y"
2784
+#line 686 "pikchr.y"
27842785
{yylhsminor.yy79 = pik_position_between(yymsp[-5].minor.yy153,yymsp[-3].minor.yy79,yymsp[-1].minor.yy79);}
2785
-#line 2810 "pikchr.c"
2786
+#line 2811 "pikchr.c"
27862787
yymsp[-5].minor.yy79 = yylhsminor.yy79;
27872788
break;
27882789
case 73: /* position ::= expr ABOVE position */
2789
-#line 686 "pikchr.y"
2790
+#line 687 "pikchr.y"
27902791
{yylhsminor.yy79=yymsp[0].minor.yy79; yylhsminor.yy79.y += yymsp[-2].minor.yy153;}
2791
-#line 2816 "pikchr.c"
2792
+#line 2817 "pikchr.c"
27922793
yymsp[-2].minor.yy79 = yylhsminor.yy79;
27932794
break;
27942795
case 74: /* position ::= expr BELOW position */
2795
-#line 687 "pikchr.y"
2796
+#line 688 "pikchr.y"
27962797
{yylhsminor.yy79=yymsp[0].minor.yy79; yylhsminor.yy79.y -= yymsp[-2].minor.yy153;}
2797
-#line 2822 "pikchr.c"
2798
+#line 2823 "pikchr.c"
27982799
yymsp[-2].minor.yy79 = yylhsminor.yy79;
27992800
break;
28002801
case 75: /* position ::= expr LEFT OF position */
2801
-#line 688 "pikchr.y"
2802
+#line 689 "pikchr.y"
28022803
{yylhsminor.yy79=yymsp[0].minor.yy79; yylhsminor.yy79.x -= yymsp[-3].minor.yy153;}
2803
-#line 2828 "pikchr.c"
2804
+#line 2829 "pikchr.c"
28042805
yymsp[-3].minor.yy79 = yylhsminor.yy79;
28052806
break;
28062807
case 76: /* position ::= expr RIGHT OF position */
2807
-#line 689 "pikchr.y"
2808
+#line 690 "pikchr.y"
28082809
{yylhsminor.yy79=yymsp[0].minor.yy79; yylhsminor.yy79.x += yymsp[-3].minor.yy153;}
2809
-#line 2834 "pikchr.c"
2810
+#line 2835 "pikchr.c"
28102811
yymsp[-3].minor.yy79 = yylhsminor.yy79;
28112812
break;
28122813
case 77: /* position ::= expr ON HEADING EDGEPT OF position */
2813
-#line 691 "pikchr.y"
2814
+#line 692 "pikchr.y"
28142815
{yylhsminor.yy79 = pik_position_at_hdg(yymsp[-5].minor.yy153,&yymsp[-2].minor.yy0,yymsp[0].minor.yy79);}
2815
-#line 2840 "pikchr.c"
2816
+#line 2841 "pikchr.c"
28162817
yymsp[-5].minor.yy79 = yylhsminor.yy79;
28172818
break;
28182819
case 78: /* position ::= expr HEADING EDGEPT OF position */
2819
-#line 693 "pikchr.y"
2820
+#line 694 "pikchr.y"
28202821
{yylhsminor.yy79 = pik_position_at_hdg(yymsp[-4].minor.yy153,&yymsp[-2].minor.yy0,yymsp[0].minor.yy79);}
2821
-#line 2846 "pikchr.c"
2822
+#line 2847 "pikchr.c"
28222823
yymsp[-4].minor.yy79 = yylhsminor.yy79;
28232824
break;
28242825
case 79: /* position ::= expr EDGEPT OF position */
2825
-#line 695 "pikchr.y"
2826
+#line 696 "pikchr.y"
28262827
{yylhsminor.yy79 = pik_position_at_hdg(yymsp[-3].minor.yy153,&yymsp[-2].minor.yy0,yymsp[0].minor.yy79);}
2827
-#line 2852 "pikchr.c"
2828
+#line 2853 "pikchr.c"
28282829
yymsp[-3].minor.yy79 = yylhsminor.yy79;
28292830
break;
28302831
case 80: /* position ::= expr ON HEADING expr FROM position */
2831
-#line 697 "pikchr.y"
2832
+#line 698 "pikchr.y"
28322833
{yylhsminor.yy79 = pik_position_at_angle(yymsp[-5].minor.yy153,yymsp[-2].minor.yy153,yymsp[0].minor.yy79);}
2833
-#line 2858 "pikchr.c"
2834
+#line 2859 "pikchr.c"
28342835
yymsp[-5].minor.yy79 = yylhsminor.yy79;
28352836
break;
28362837
case 81: /* position ::= expr HEADING expr FROM position */
2837
-#line 699 "pikchr.y"
2838
+#line 700 "pikchr.y"
28382839
{yylhsminor.yy79 = pik_position_at_angle(yymsp[-4].minor.yy153,yymsp[-2].minor.yy153,yymsp[0].minor.yy79);}
2839
-#line 2864 "pikchr.c"
2840
+#line 2865 "pikchr.c"
28402841
yymsp[-4].minor.yy79 = yylhsminor.yy79;
28412842
break;
28422843
case 82: /* place ::= edge OF object */
2843
-#line 711 "pikchr.y"
2844
+#line 712 "pikchr.y"
28442845
{yylhsminor.yy79 = pik_place_of_elem(p,yymsp[0].minor.yy36,&yymsp[-2].minor.yy0);}
2845
-#line 2870 "pikchr.c"
2846
+#line 2871 "pikchr.c"
28462847
yymsp[-2].minor.yy79 = yylhsminor.yy79;
28472848
break;
28482849
case 83: /* place2 ::= object */
2849
-#line 712 "pikchr.y"
2850
+#line 713 "pikchr.y"
28502851
{yylhsminor.yy79 = pik_place_of_elem(p,yymsp[0].minor.yy36,0);}
2851
-#line 2876 "pikchr.c"
2852
+#line 2877 "pikchr.c"
28522853
yymsp[0].minor.yy79 = yylhsminor.yy79;
28532854
break;
28542855
case 84: /* place2 ::= object DOT_E edge */
2855
-#line 713 "pikchr.y"
2856
+#line 714 "pikchr.y"
28562857
{yylhsminor.yy79 = pik_place_of_elem(p,yymsp[-2].minor.yy36,&yymsp[0].minor.yy0);}
2857
-#line 2882 "pikchr.c"
2858
+#line 2883 "pikchr.c"
28582859
yymsp[-2].minor.yy79 = yylhsminor.yy79;
28592860
break;
28602861
case 85: /* place2 ::= NTH VERTEX OF object */
2861
-#line 714 "pikchr.y"
2862
+#line 715 "pikchr.y"
28622863
{yylhsminor.yy79 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy36);}
2863
-#line 2888 "pikchr.c"
2864
+#line 2889 "pikchr.c"
28642865
yymsp[-3].minor.yy79 = yylhsminor.yy79;
28652866
break;
28662867
case 86: /* object ::= nth */
2867
-#line 726 "pikchr.y"
2868
+#line 727 "pikchr.y"
28682869
{yylhsminor.yy36 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2869
-#line 2894 "pikchr.c"
2870
+#line 2895 "pikchr.c"
28702871
yymsp[0].minor.yy36 = yylhsminor.yy36;
28712872
break;
28722873
case 87: /* object ::= nth OF|IN object */
2873
-#line 727 "pikchr.y"
2874
+#line 728 "pikchr.y"
28742875
{yylhsminor.yy36 = pik_find_nth(p,yymsp[0].minor.yy36,&yymsp[-2].minor.yy0);}
2875
-#line 2900 "pikchr.c"
2876
+#line 2901 "pikchr.c"
28762877
yymsp[-2].minor.yy36 = yylhsminor.yy36;
28772878
break;
28782879
case 88: /* objectname ::= THIS */
2879
-#line 729 "pikchr.y"
2880
+#line 730 "pikchr.y"
28802881
{yymsp[0].minor.yy36 = p->cur;}
2881
-#line 2906 "pikchr.c"
2882
+#line 2907 "pikchr.c"
28822883
break;
28832884
case 89: /* objectname ::= PLACENAME */
2884
-#line 730 "pikchr.y"
2885
+#line 731 "pikchr.y"
28852886
{yylhsminor.yy36 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2886
-#line 2911 "pikchr.c"
2887
+#line 2912 "pikchr.c"
28872888
yymsp[0].minor.yy36 = yylhsminor.yy36;
28882889
break;
28892890
case 90: /* objectname ::= objectname DOT_U PLACENAME */
2890
-#line 732 "pikchr.y"
2891
+#line 733 "pikchr.y"
28912892
{yylhsminor.yy36 = pik_find_byname(p,yymsp[-2].minor.yy36,&yymsp[0].minor.yy0);}
2892
-#line 2917 "pikchr.c"
2893
+#line 2918 "pikchr.c"
28932894
yymsp[-2].minor.yy36 = yylhsminor.yy36;
28942895
break;
28952896
case 91: /* nth ::= NTH CLASSNAME */
2896
-#line 734 "pikchr.y"
2897
+#line 735 "pikchr.y"
28972898
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2898
-#line 2923 "pikchr.c"
2899
+#line 2924 "pikchr.c"
28992900
yymsp[-1].minor.yy0 = yylhsminor.yy0;
29002901
break;
29012902
case 92: /* nth ::= NTH LAST CLASSNAME */
2902
-#line 735 "pikchr.y"
2903
+#line 736 "pikchr.y"
29032904
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2904
-#line 2929 "pikchr.c"
2905
+#line 2930 "pikchr.c"
29052906
yymsp[-2].minor.yy0 = yylhsminor.yy0;
29062907
break;
29072908
case 93: /* nth ::= LAST CLASSNAME */
2908
-#line 736 "pikchr.y"
2909
+#line 737 "pikchr.y"
29092910
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2910
-#line 2935 "pikchr.c"
2911
+#line 2936 "pikchr.c"
29112912
break;
29122913
case 94: /* nth ::= LAST */
2913
-#line 737 "pikchr.y"
2914
+#line 738 "pikchr.y"
29142915
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2915
-#line 2940 "pikchr.c"
2916
+#line 2941 "pikchr.c"
29162917
yymsp[0].minor.yy0 = yylhsminor.yy0;
29172918
break;
29182919
case 95: /* nth ::= NTH LB RB */
2919
-#line 738 "pikchr.y"
2920
+#line 739 "pikchr.y"
29202921
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2921
-#line 2946 "pikchr.c"
2922
+#line 2947 "pikchr.c"
29222923
yymsp[-2].minor.yy0 = yylhsminor.yy0;
29232924
break;
29242925
case 96: /* nth ::= NTH LAST LB RB */
2925
-#line 739 "pikchr.y"
2926
+#line 740 "pikchr.y"
29262927
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2927
-#line 2952 "pikchr.c"
2928
+#line 2953 "pikchr.c"
29282929
yymsp[-3].minor.yy0 = yylhsminor.yy0;
29292930
break;
29302931
case 97: /* nth ::= LAST LB RB */
2931
-#line 740 "pikchr.y"
2932
+#line 741 "pikchr.y"
29322933
{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2933
-#line 2958 "pikchr.c"
2934
+#line 2959 "pikchr.c"
29342935
break;
29352936
case 98: /* expr ::= expr PLUS expr */
2936
-#line 742 "pikchr.y"
2937
+#line 743 "pikchr.y"
29372938
{yylhsminor.yy153=yymsp[-2].minor.yy153+yymsp[0].minor.yy153;}
2938
-#line 2963 "pikchr.c"
2939
+#line 2964 "pikchr.c"
29392940
yymsp[-2].minor.yy153 = yylhsminor.yy153;
29402941
break;
29412942
case 99: /* expr ::= expr MINUS expr */
2942
-#line 743 "pikchr.y"
2943
+#line 744 "pikchr.y"
29432944
{yylhsminor.yy153=yymsp[-2].minor.yy153-yymsp[0].minor.yy153;}
2944
-#line 2969 "pikchr.c"
2945
+#line 2970 "pikchr.c"
29452946
yymsp[-2].minor.yy153 = yylhsminor.yy153;
29462947
break;
29472948
case 100: /* expr ::= expr STAR expr */
2948
-#line 744 "pikchr.y"
2949
+#line 745 "pikchr.y"
29492950
{yylhsminor.yy153=yymsp[-2].minor.yy153*yymsp[0].minor.yy153;}
2950
-#line 2975 "pikchr.c"
2951
+#line 2976 "pikchr.c"
29512952
yymsp[-2].minor.yy153 = yylhsminor.yy153;
29522953
break;
29532954
case 101: /* expr ::= expr SLASH expr */
2954
-#line 745 "pikchr.y"
2955
+#line 746 "pikchr.y"
29552956
{
29562957
if( yymsp[0].minor.yy153==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy153 = 0.0; }
29572958
else{ yylhsminor.yy153 = yymsp[-2].minor.yy153/yymsp[0].minor.yy153; }
29582959
}
2959
-#line 2984 "pikchr.c"
2960
+#line 2985 "pikchr.c"
29602961
yymsp[-2].minor.yy153 = yylhsminor.yy153;
29612962
break;
29622963
case 102: /* expr ::= MINUS expr */
2963
-#line 749 "pikchr.y"
2964
+#line 750 "pikchr.y"
29642965
{yymsp[-1].minor.yy153=-yymsp[0].minor.yy153;}
2965
-#line 2990 "pikchr.c"
2966
+#line 2991 "pikchr.c"
29662967
break;
29672968
case 103: /* expr ::= PLUS expr */
2968
-#line 750 "pikchr.y"
2969
+#line 751 "pikchr.y"
29692970
{yymsp[-1].minor.yy153=yymsp[0].minor.yy153;}
2970
-#line 2995 "pikchr.c"
2971
+#line 2996 "pikchr.c"
29712972
break;
29722973
case 104: /* expr ::= LP expr RP */
2973
-#line 751 "pikchr.y"
2974
+#line 752 "pikchr.y"
29742975
{yymsp[-2].minor.yy153=yymsp[-1].minor.yy153;}
2975
-#line 3000 "pikchr.c"
2976
+#line 3001 "pikchr.c"
29762977
break;
29772978
case 105: /* expr ::= LP FILL|COLOR|THICKNESS RP */
2978
-#line 752 "pikchr.y"
2979
+#line 753 "pikchr.y"
29792980
{yymsp[-2].minor.yy153=pik_get_var(p,&yymsp[-1].minor.yy0);}
2980
-#line 3005 "pikchr.c"
2981
+#line 3006 "pikchr.c"
29812982
break;
29822983
case 106: /* expr ::= NUMBER */
2983
-#line 753 "pikchr.y"
2984
+#line 754 "pikchr.y"
29842985
{yylhsminor.yy153=pik_atof(&yymsp[0].minor.yy0);}
2985
-#line 3010 "pikchr.c"
2986
+#line 3011 "pikchr.c"
29862987
yymsp[0].minor.yy153 = yylhsminor.yy153;
29872988
break;
29882989
case 107: /* expr ::= ID */
2989
-#line 754 "pikchr.y"
2990
+#line 755 "pikchr.y"
29902991
{yylhsminor.yy153=pik_get_var(p,&yymsp[0].minor.yy0);}
2991
-#line 3016 "pikchr.c"
2992
+#line 3017 "pikchr.c"
29922993
yymsp[0].minor.yy153 = yylhsminor.yy153;
29932994
break;
29942995
case 108: /* expr ::= FUNC1 LP expr RP */
2995
-#line 755 "pikchr.y"
2996
+#line 756 "pikchr.y"
29962997
{yylhsminor.yy153 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy153,0.0);}
2997
-#line 3022 "pikchr.c"
2998
+#line 3023 "pikchr.c"
29982999
yymsp[-3].minor.yy153 = yylhsminor.yy153;
29993000
break;
30003001
case 109: /* expr ::= FUNC2 LP expr COMMA expr RP */
3001
-#line 756 "pikchr.y"
3002
+#line 757 "pikchr.y"
30023003
{yylhsminor.yy153 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy153,yymsp[-1].minor.yy153);}
3003
-#line 3028 "pikchr.c"
3004
+#line 3029 "pikchr.c"
30043005
yymsp[-5].minor.yy153 = yylhsminor.yy153;
30053006
break;
30063007
case 110: /* expr ::= DIST LP position COMMA position RP */
3007
-#line 757 "pikchr.y"
3008
+#line 758 "pikchr.y"
30083009
{yymsp[-5].minor.yy153 = pik_dist(&yymsp[-3].minor.yy79,&yymsp[-1].minor.yy79);}
3009
-#line 3034 "pikchr.c"
3010
+#line 3035 "pikchr.c"
30103011
break;
30113012
case 111: /* expr ::= place2 DOT_XY X */
3012
-#line 758 "pikchr.y"
3013
+#line 759 "pikchr.y"
30133014
{yylhsminor.yy153 = yymsp[-2].minor.yy79.x;}
3014
-#line 3039 "pikchr.c"
3015
+#line 3040 "pikchr.c"
30153016
yymsp[-2].minor.yy153 = yylhsminor.yy153;
30163017
break;
30173018
case 112: /* expr ::= place2 DOT_XY Y */
3018
-#line 759 "pikchr.y"
3019
+#line 760 "pikchr.y"
30193020
{yylhsminor.yy153 = yymsp[-2].minor.yy79.y;}
3020
-#line 3045 "pikchr.c"
3021
+#line 3046 "pikchr.c"
30213022
yymsp[-2].minor.yy153 = yylhsminor.yy153;
30223023
break;
30233024
case 113: /* expr ::= object DOT_L numproperty */
30243025
case 114: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==114);
30253026
case 115: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==115);
3026
-#line 760 "pikchr.y"
3027
+#line 761 "pikchr.y"
30273028
{yylhsminor.yy153=pik_property_of(yymsp[-2].minor.yy36,&yymsp[0].minor.yy0);}
3028
-#line 3053 "pikchr.c"
3029
+#line 3054 "pikchr.c"
30293030
yymsp[-2].minor.yy153 = yylhsminor.yy153;
30303031
break;
30313032
default:
30323033
/* (116) lvalue ::= ID */ yytestcase(yyruleno==116);
30333034
/* (117) lvalue ::= FILL */ yytestcase(yyruleno==117);
@@ -3126,19 +3127,19 @@
31263127
){
31273128
pik_parserARG_FETCH
31283129
pik_parserCTX_FETCH
31293130
#define TOKEN yyminor
31303131
/************ Begin %syntax_error code ****************************************/
3131
-#line 520 "pikchr.y"
3132
+#line 521 "pikchr.y"
31323133
31333134
if( TOKEN.z && TOKEN.z[0] ){
31343135
pik_error(p, &TOKEN, "syntax error");
31353136
}else{
31363137
pik_error(p, 0, "syntax error");
31373138
}
31383139
UNUSED_PARAMETER(yymajor);
3139
-#line 3164 "pikchr.c"
3140
+#line 3165 "pikchr.c"
31403141
/************ End %syntax_error code ******************************************/
31413142
pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
31423143
pik_parserCTX_STORE
31433144
}
31443145
@@ -3367,11 +3368,11 @@
33673368
#else
33683369
(void)iToken;
33693370
return 0;
33703371
#endif
33713372
}
3372
-#line 765 "pikchr.y"
3373
+#line 766 "pikchr.y"
33733374
33743375
33753376
33763377
/* Chart of the 148 official CSS color names with their
33773378
** corresponding RGB values thru Color Module Level 4:
@@ -5391,11 +5392,11 @@
53915392
}
53925393
}
53935394
p->aTPath[0] = pNew->ptAt;
53945395
pNew->with = pNew->ptAt;
53955396
pNew->outDir = pNew->inDir = p->eDir;
5396
- pNew->iLayer = (int)pik_value(p, "layer", 5, &miss);
5397
+ pNew->iLayer = pik_value_int(p, "layer", 5, &miss);
53975398
if( miss ) pNew->iLayer = 1000;
53985399
if( pNew->iLayer<0 ) pNew->iLayer = 0;
53995400
if( pSublist ){
54005401
pNew->type = &sublistClass;
54015402
pNew->pSublist = pSublist;
@@ -6259,10 +6260,16 @@
62596260
}
62606261
}
62616262
if( pMiss ) *pMiss = 1;
62626263
return 0.0;
62636264
}
6265
+static int pik_value_int(Pik *p, const char *z, int n, int *pMiss){
6266
+ PNum v = pik_value(p,z,n,pMiss);
6267
+ if( v <= -2147483648 ) return -2147483648;
6268
+ if( v >= 2147483647 ) return 2147483647;
6269
+ return (int)v;
6270
+}
62646271
62656272
/*
62666273
** Look up a color-name. Unlike other names in this program, the
62676274
** color-names are not case sensitive. So "DarkBlue" and "darkblue"
62686275
** and "DARKBLUE" all find the same value (139).
@@ -6557,26 +6564,28 @@
65576564
65586565
/* Return the value of a property of an object.
65596566
*/
65606567
static PNum pik_property_of(PObj *pObj, PToken *pProp){
65616568
PNum v = 0.0;
6562
- switch( pProp->eType ){
6563
- case T_HEIGHT: v = pObj->h; break;
6564
- case T_WIDTH: v = pObj->w; break;
6565
- case T_RADIUS: v = pObj->rad; break;
6566
- case T_DIAMETER: v = pObj->rad*2.0; break;
6567
- case T_THICKNESS: v = pObj->sw; break;
6568
- case T_DASHED: v = pObj->dashed; break;
6569
- case T_DOTTED: v = pObj->dotted; break;
6570
- case T_FILL: v = pObj->fill; break;
6571
- case T_COLOR: v = pObj->color; break;
6572
- case T_X: v = pObj->ptAt.x; break;
6573
- case T_Y: v = pObj->ptAt.y; break;
6574
- case T_TOP: v = pObj->bbox.ne.y; break;
6575
- case T_BOTTOM: v = pObj->bbox.sw.y; break;
6576
- case T_LEFT: v = pObj->bbox.sw.x; break;
6577
- case T_RIGHT: v = pObj->bbox.ne.x; break;
6569
+ if( pObj ){
6570
+ switch( pProp->eType ){
6571
+ case T_HEIGHT: v = pObj->h; break;
6572
+ case T_WIDTH: v = pObj->w; break;
6573
+ case T_RADIUS: v = pObj->rad; break;
6574
+ case T_DIAMETER: v = pObj->rad*2.0; break;
6575
+ case T_THICKNESS: v = pObj->sw; break;
6576
+ case T_DASHED: v = pObj->dashed; break;
6577
+ case T_DOTTED: v = pObj->dotted; break;
6578
+ case T_FILL: v = pObj->fill; break;
6579
+ case T_COLOR: v = pObj->color; break;
6580
+ case T_X: v = pObj->ptAt.x; break;
6581
+ case T_Y: v = pObj->ptAt.y; break;
6582
+ case T_TOP: v = pObj->bbox.ne.y; break;
6583
+ case T_BOTTOM: v = pObj->bbox.sw.y; break;
6584
+ case T_LEFT: v = pObj->bbox.sw.x; break;
6585
+ case T_RIGHT: v = pObj->bbox.ne.x; break;
6586
+ }
65786587
}
65796588
return v;
65806589
}
65816590
65826591
/* Compute one of the built-in functions
@@ -6842,11 +6851,11 @@
68426851
int i;
68436852
int iNextLayer = 0;
68446853
int iThisLayer;
68456854
int bMoreToDo;
68466855
int miss = 0;
6847
- int mDebug = (int)pik_value(p, "debug", 5, 0);
6856
+ int mDebug = pik_value_int(p, "debug", 5, 0);
68486857
PNum colorLabel;
68496858
do{
68506859
bMoreToDo = 0;
68516860
iThisLayer = iNextLayer;
68526861
iNextLayer = 0x7fffffff;
@@ -6960,19 +6969,19 @@
69606969
if( thickness<=0.01 ) thickness = 0.01;
69616970
margin = pik_value(p,"margin",6,0);
69626971
margin += thickness;
69636972
wArrow = p->wArrow*thickness;
69646973
miss = 0;
6965
- p->fgcolor = (int)pik_value(p,"fgcolor",7,&miss);
6974
+ p->fgcolor = pik_value_int(p,"fgcolor",7,&miss);
69666975
if( miss ){
69676976
PToken t;
69686977
t.z = "fgcolor";
69696978
t.n = 7;
69706979
p->fgcolor = (int)pik_lookup_color(0, &t);
69716980
}
69726981
miss = 0;
6973
- p->bgcolor = (int)pik_value(p,"bgcolor",7,&miss);
6982
+ p->bgcolor = pik_value_int(p,"bgcolor",7,&miss);
69746983
if( miss ){
69756984
PToken t;
69766985
t.z = "bgcolor";
69776986
t.n = 7;
69786987
p->bgcolor = (int)pik_lookup_color(0, &t);
@@ -7988,19 +7997,26 @@
79887997
Tcl_ListObjAppendElement(0, pRes, Tcl_NewIntObj(w));
79897998
Tcl_ListObjAppendElement(0, pRes, Tcl_NewIntObj(h));
79907999
Tcl_SetObjResult(interp, pRes);
79918000
return TCL_OK;
79928001
}
8002
+
8003
+#ifndef PACKAGE_NAME
8004
+# define PACKAGE_NAME "pikchr"
8005
+#endif
8006
+#ifndef PACKAGE_VERSION
8007
+# define PACKAGE_VERSION "1.0"
8008
+#endif
79938009
79948010
/* Invoke this routine to register the "pikchr" command with the interpreter
79958011
** given in the argument */
79968012
int Pikchr_Init(Tcl_Interp *interp){
79978013
Tcl_CreateObjCommand(interp, "pikchr", pik_tcl_command, 0, 0);
7998
- Tcl_PkgProvide (interp, PACKAGE_NAME, PACKAGE_VERSION);
8014
+ Tcl_PkgProvide(interp, PACKAGE_NAME, PACKAGE_VERSION);
79998015
return TCL_OK;
80008016
}
80018017
80028018
80038019
#endif /* PIKCHR_TCL */
80048020
80058021
8006
-#line 8031 "pikchr.c"
8022
+#line 8047 "pikchr.c"
80078023
--- src/pikchr.c
+++ src/pikchr.c
@@ -428,10 +428,11 @@
428 static PObj *pik_elem_new(Pik*,PToken*,PToken*,PList*);
429 static void pik_set_direction(Pik*,int);
430 static void pik_elem_setname(Pik*,PObj*,PToken*);
431 static void pik_set_var(Pik*,PToken*,PNum,PToken*);
432 static PNum pik_value(Pik*,const char*,int,int*);
 
433 static PNum pik_lookup_color(Pik*,PToken*);
434 static PNum pik_get_var(Pik*,PToken*);
435 static PNum pik_atof(PToken*);
436 static void pik_after_adding_attributes(Pik*,PObj*);
437 static void pik_elem_move(PObj*,PNum dx, PNum dy);
@@ -474,11 +475,11 @@
474 static PObj *pik_position_assert(Pik*,PPoint*,PToken*,PPoint*);
475 static PNum pik_dist(PPoint*,PPoint*);
476 static void pik_add_macro(Pik*,PToken *pId,PToken *pCode);
477
478
479 #line 505 "pikchr.c"
480 /**************** End of %include directives **********************************/
481 /* These constants specify the various numeric values for terminal symbols.
482 ***************** Begin token definitions *************************************/
483 #ifndef T_ID
484 #define T_ID 1
@@ -1703,22 +1704,22 @@
1703 ** inside the C code.
1704 */
1705 /********* Begin destructor definitions ***************************************/
1706 case 99: /* statement_list */
1707 {
1708 #line 494 "pikchr.y"
1709 pik_elist_free(p,(yypminor->yy227));
1710 #line 1735 "pikchr.c"
1711 }
1712 break;
1713 case 100: /* statement */
1714 case 101: /* unnamed_statement */
1715 case 102: /* basetype */
1716 {
1717 #line 496 "pikchr.y"
1718 pik_elem_free(p,(yypminor->yy36));
1719 #line 1744 "pikchr.c"
1720 }
1721 break;
1722 /********* End destructor definitions *****************************************/
1723 default: break; /* If no destructor action specified: do nothing */
1724 }
@@ -1932,14 +1933,14 @@
1932 #endif
1933 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1934 /* Here code is inserted which will execute if the parser
1935 ** stack every overflows */
1936 /******** Begin %stack_overflow code ******************************************/
1937 #line 528 "pikchr.y"
1938
1939 pik_error(p, 0, "parser stack overflow");
1940 #line 1965 "pikchr.c"
1941 /******** End %stack_overflow code ********************************************/
1942 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1943 pik_parserCTX_STORE
1944 }
1945
@@ -2415,619 +2416,619 @@
2415 ** break;
2416 */
2417 /********** Begin reduce actions **********************************************/
2418 YYMINORTYPE yylhsminor;
2419 case 0: /* document ::= statement_list */
2420 #line 532 "pikchr.y"
2421 {pik_render(p,yymsp[0].minor.yy227);}
2422 #line 2447 "pikchr.c"
2423 break;
2424 case 1: /* statement_list ::= statement */
2425 #line 535 "pikchr.y"
2426 { yylhsminor.yy227 = pik_elist_append(p,0,yymsp[0].minor.yy36); }
2427 #line 2452 "pikchr.c"
2428 yymsp[0].minor.yy227 = yylhsminor.yy227;
2429 break;
2430 case 2: /* statement_list ::= statement_list EOL statement */
2431 #line 537 "pikchr.y"
2432 { yylhsminor.yy227 = pik_elist_append(p,yymsp[-2].minor.yy227,yymsp[0].minor.yy36); }
2433 #line 2458 "pikchr.c"
2434 yymsp[-2].minor.yy227 = yylhsminor.yy227;
2435 break;
2436 case 3: /* statement ::= */
2437 #line 540 "pikchr.y"
2438 { yymsp[1].minor.yy36 = 0; }
2439 #line 2464 "pikchr.c"
2440 break;
2441 case 4: /* statement ::= direction */
2442 #line 541 "pikchr.y"
2443 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy36=0; }
2444 #line 2469 "pikchr.c"
2445 yymsp[0].minor.yy36 = yylhsminor.yy36;
2446 break;
2447 case 5: /* statement ::= lvalue ASSIGN rvalue */
2448 #line 542 "pikchr.y"
2449 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy153,&yymsp[-1].minor.yy0); yylhsminor.yy36=0;}
2450 #line 2475 "pikchr.c"
2451 yymsp[-2].minor.yy36 = yylhsminor.yy36;
2452 break;
2453 case 6: /* statement ::= PLACENAME COLON unnamed_statement */
2454 #line 544 "pikchr.y"
2455 { yylhsminor.yy36 = yymsp[0].minor.yy36; pik_elem_setname(p,yymsp[0].minor.yy36,&yymsp[-2].minor.yy0); }
2456 #line 2481 "pikchr.c"
2457 yymsp[-2].minor.yy36 = yylhsminor.yy36;
2458 break;
2459 case 7: /* statement ::= PLACENAME COLON position */
2460 #line 546 "pikchr.y"
2461 { yylhsminor.yy36 = pik_elem_new(p,0,0,0);
2462 if(yylhsminor.yy36){ yylhsminor.yy36->ptAt = yymsp[0].minor.yy79; pik_elem_setname(p,yylhsminor.yy36,&yymsp[-2].minor.yy0); }}
2463 #line 2488 "pikchr.c"
2464 yymsp[-2].minor.yy36 = yylhsminor.yy36;
2465 break;
2466 case 8: /* statement ::= unnamed_statement */
2467 #line 548 "pikchr.y"
2468 {yylhsminor.yy36 = yymsp[0].minor.yy36;}
2469 #line 2494 "pikchr.c"
2470 yymsp[0].minor.yy36 = yylhsminor.yy36;
2471 break;
2472 case 9: /* statement ::= print prlist */
2473 #line 549 "pikchr.y"
2474 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy36=0;}
2475 #line 2500 "pikchr.c"
2476 break;
2477 case 10: /* statement ::= ASSERT LP expr EQ expr RP */
2478 #line 554 "pikchr.y"
2479 {yymsp[-5].minor.yy36=pik_assert(p,yymsp[-3].minor.yy153,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy153);}
2480 #line 2505 "pikchr.c"
2481 break;
2482 case 11: /* statement ::= ASSERT LP position EQ position RP */
2483 #line 556 "pikchr.y"
2484 {yymsp[-5].minor.yy36=pik_position_assert(p,&yymsp[-3].minor.yy79,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy79);}
2485 #line 2510 "pikchr.c"
2486 break;
2487 case 12: /* statement ::= DEFINE ID CODEBLOCK */
2488 #line 557 "pikchr.y"
2489 {yymsp[-2].minor.yy36=0; pik_add_macro(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
2490 #line 2515 "pikchr.c"
2491 break;
2492 case 13: /* rvalue ::= PLACENAME */
2493 #line 568 "pikchr.y"
2494 {yylhsminor.yy153 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2495 #line 2520 "pikchr.c"
2496 yymsp[0].minor.yy153 = yylhsminor.yy153;
2497 break;
2498 case 14: /* pritem ::= FILL */
2499 case 15: /* pritem ::= COLOR */ yytestcase(yyruleno==15);
2500 case 16: /* pritem ::= THICKNESS */ yytestcase(yyruleno==16);
2501 #line 573 "pikchr.y"
2502 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2503 #line 2528 "pikchr.c"
2504 break;
2505 case 17: /* pritem ::= rvalue */
2506 #line 576 "pikchr.y"
2507 {pik_append_num(p,"",yymsp[0].minor.yy153);}
2508 #line 2533 "pikchr.c"
2509 break;
2510 case 18: /* pritem ::= STRING */
2511 #line 577 "pikchr.y"
2512 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2513 #line 2538 "pikchr.c"
2514 break;
2515 case 19: /* prsep ::= COMMA */
2516 #line 578 "pikchr.y"
2517 {pik_append(p, " ", 1);}
2518 #line 2543 "pikchr.c"
2519 break;
2520 case 20: /* unnamed_statement ::= basetype attribute_list */
2521 #line 581 "pikchr.y"
2522 {yylhsminor.yy36 = yymsp[-1].minor.yy36; pik_after_adding_attributes(p,yylhsminor.yy36);}
2523 #line 2548 "pikchr.c"
2524 yymsp[-1].minor.yy36 = yylhsminor.yy36;
2525 break;
2526 case 21: /* basetype ::= CLASSNAME */
2527 #line 583 "pikchr.y"
2528 {yylhsminor.yy36 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2529 #line 2554 "pikchr.c"
2530 yymsp[0].minor.yy36 = yylhsminor.yy36;
2531 break;
2532 case 22: /* basetype ::= STRING textposition */
2533 #line 585 "pikchr.y"
2534 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy164; yylhsminor.yy36 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2535 #line 2560 "pikchr.c"
2536 yymsp[-1].minor.yy36 = yylhsminor.yy36;
2537 break;
2538 case 23: /* basetype ::= LB savelist statement_list RB */
2539 #line 587 "pikchr.y"
2540 { p->list = yymsp[-2].minor.yy227; yymsp[-3].minor.yy36 = pik_elem_new(p,0,0,yymsp[-1].minor.yy227); if(yymsp[-3].minor.yy36) yymsp[-3].minor.yy36->errTok = yymsp[0].minor.yy0; }
2541 #line 2566 "pikchr.c"
2542 break;
2543 case 24: /* savelist ::= */
2544 #line 592 "pikchr.y"
2545 {yymsp[1].minor.yy227 = p->list; p->list = 0;}
2546 #line 2571 "pikchr.c"
2547 break;
2548 case 25: /* relexpr ::= expr */
2549 #line 599 "pikchr.y"
2550 {yylhsminor.yy10.rAbs = yymsp[0].minor.yy153; yylhsminor.yy10.rRel = 0;}
2551 #line 2576 "pikchr.c"
2552 yymsp[0].minor.yy10 = yylhsminor.yy10;
2553 break;
2554 case 26: /* relexpr ::= expr PERCENT */
2555 #line 600 "pikchr.y"
2556 {yylhsminor.yy10.rAbs = 0; yylhsminor.yy10.rRel = yymsp[-1].minor.yy153/100;}
2557 #line 2582 "pikchr.c"
2558 yymsp[-1].minor.yy10 = yylhsminor.yy10;
2559 break;
2560 case 27: /* optrelexpr ::= */
2561 #line 602 "pikchr.y"
2562 {yymsp[1].minor.yy10.rAbs = 0; yymsp[1].minor.yy10.rRel = 1.0;}
2563 #line 2588 "pikchr.c"
2564 break;
2565 case 28: /* attribute_list ::= relexpr alist */
2566 #line 604 "pikchr.y"
2567 {pik_add_direction(p,0,&yymsp[-1].minor.yy10);}
2568 #line 2593 "pikchr.c"
2569 break;
2570 case 29: /* attribute ::= numproperty relexpr */
2571 #line 608 "pikchr.y"
2572 { pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy10); }
2573 #line 2598 "pikchr.c"
2574 break;
2575 case 30: /* attribute ::= dashproperty expr */
2576 #line 609 "pikchr.y"
2577 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy153); }
2578 #line 2603 "pikchr.c"
2579 break;
2580 case 31: /* attribute ::= dashproperty */
2581 #line 610 "pikchr.y"
2582 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2583 #line 2608 "pikchr.c"
2584 break;
2585 case 32: /* attribute ::= colorproperty rvalue */
2586 #line 611 "pikchr.y"
2587 { pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy153); }
2588 #line 2613 "pikchr.c"
2589 break;
2590 case 33: /* attribute ::= go direction optrelexpr */
2591 #line 612 "pikchr.y"
2592 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy10);}
2593 #line 2618 "pikchr.c"
2594 break;
2595 case 34: /* attribute ::= go direction even position */
2596 #line 613 "pikchr.y"
2597 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy79);}
2598 #line 2623 "pikchr.c"
2599 break;
2600 case 35: /* attribute ::= CLOSE */
2601 #line 614 "pikchr.y"
2602 { pik_close_path(p,&yymsp[0].minor.yy0); }
2603 #line 2628 "pikchr.c"
2604 break;
2605 case 36: /* attribute ::= CHOP */
2606 #line 615 "pikchr.y"
2607 { p->cur->bChop = 1; }
2608 #line 2633 "pikchr.c"
2609 break;
2610 case 37: /* attribute ::= FROM position */
2611 #line 616 "pikchr.y"
2612 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy79); }
2613 #line 2638 "pikchr.c"
2614 break;
2615 case 38: /* attribute ::= TO position */
2616 #line 617 "pikchr.y"
2617 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy79); }
2618 #line 2643 "pikchr.c"
2619 break;
2620 case 39: /* attribute ::= THEN */
2621 #line 618 "pikchr.y"
2622 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2623 #line 2648 "pikchr.c"
2624 break;
2625 case 40: /* attribute ::= THEN optrelexpr HEADING expr */
2626 case 42: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==42);
2627 #line 620 "pikchr.y"
2628 {pik_move_hdg(p,&yymsp[-2].minor.yy10,&yymsp[-1].minor.yy0,yymsp[0].minor.yy153,0,&yymsp[-3].minor.yy0);}
2629 #line 2654 "pikchr.c"
2630 break;
2631 case 41: /* attribute ::= THEN optrelexpr EDGEPT */
2632 case 43: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==43);
2633 #line 621 "pikchr.y"
2634 {pik_move_hdg(p,&yymsp[-1].minor.yy10,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2635 #line 2660 "pikchr.c"
2636 break;
2637 case 44: /* attribute ::= AT position */
2638 #line 626 "pikchr.y"
2639 { pik_set_at(p,0,&yymsp[0].minor.yy79,&yymsp[-1].minor.yy0); }
2640 #line 2665 "pikchr.c"
2641 break;
2642 case 45: /* attribute ::= SAME */
2643 #line 628 "pikchr.y"
2644 {pik_same(p,0,&yymsp[0].minor.yy0);}
2645 #line 2670 "pikchr.c"
2646 break;
2647 case 46: /* attribute ::= SAME AS object */
2648 #line 629 "pikchr.y"
2649 {pik_same(p,yymsp[0].minor.yy36,&yymsp[-2].minor.yy0);}
2650 #line 2675 "pikchr.c"
2651 break;
2652 case 47: /* attribute ::= STRING textposition */
2653 #line 630 "pikchr.y"
2654 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy164);}
2655 #line 2680 "pikchr.c"
2656 break;
2657 case 48: /* attribute ::= FIT */
2658 #line 631 "pikchr.y"
2659 {pik_size_to_fit(p,&yymsp[0].minor.yy0,3); }
2660 #line 2685 "pikchr.c"
2661 break;
2662 case 49: /* attribute ::= BEHIND object */
2663 #line 632 "pikchr.y"
2664 {pik_behind(p,yymsp[0].minor.yy36);}
2665 #line 2690 "pikchr.c"
2666 break;
2667 case 50: /* withclause ::= DOT_E edge AT position */
2668 case 51: /* withclause ::= edge AT position */ yytestcase(yyruleno==51);
2669 #line 640 "pikchr.y"
2670 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy79,&yymsp[-1].minor.yy0); }
2671 #line 2696 "pikchr.c"
2672 break;
2673 case 52: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2674 #line 644 "pikchr.y"
2675 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2676 #line 2701 "pikchr.c"
2677 yymsp[0].minor.yy0 = yylhsminor.yy0;
2678 break;
2679 case 53: /* boolproperty ::= CW */
2680 #line 655 "pikchr.y"
2681 {p->cur->cw = 1;}
2682 #line 2707 "pikchr.c"
2683 break;
2684 case 54: /* boolproperty ::= CCW */
2685 #line 656 "pikchr.y"
2686 {p->cur->cw = 0;}
2687 #line 2712 "pikchr.c"
2688 break;
2689 case 55: /* boolproperty ::= LARROW */
2690 #line 657 "pikchr.y"
2691 {p->cur->larrow=1; p->cur->rarrow=0; }
2692 #line 2717 "pikchr.c"
2693 break;
2694 case 56: /* boolproperty ::= RARROW */
2695 #line 658 "pikchr.y"
2696 {p->cur->larrow=0; p->cur->rarrow=1; }
2697 #line 2722 "pikchr.c"
2698 break;
2699 case 57: /* boolproperty ::= LRARROW */
2700 #line 659 "pikchr.y"
2701 {p->cur->larrow=1; p->cur->rarrow=1; }
2702 #line 2727 "pikchr.c"
2703 break;
2704 case 58: /* boolproperty ::= INVIS */
2705 #line 660 "pikchr.y"
2706 {p->cur->sw = 0.0;}
2707 #line 2732 "pikchr.c"
2708 break;
2709 case 59: /* boolproperty ::= THICK */
2710 #line 661 "pikchr.y"
2711 {p->cur->sw *= 1.5;}
2712 #line 2737 "pikchr.c"
2713 break;
2714 case 60: /* boolproperty ::= THIN */
2715 #line 662 "pikchr.y"
2716 {p->cur->sw *= 0.67;}
2717 #line 2742 "pikchr.c"
2718 break;
2719 case 61: /* boolproperty ::= SOLID */
2720 #line 663 "pikchr.y"
2721 {p->cur->sw = pik_value(p,"thickness",9,0);
2722 p->cur->dotted = p->cur->dashed = 0.0;}
2723 #line 2748 "pikchr.c"
2724 break;
2725 case 62: /* textposition ::= */
2726 #line 666 "pikchr.y"
2727 {yymsp[1].minor.yy164 = 0;}
2728 #line 2753 "pikchr.c"
2729 break;
2730 case 63: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2731 #line 669 "pikchr.y"
2732 {yylhsminor.yy164 = (short int)pik_text_position(yymsp[-1].minor.yy164,&yymsp[0].minor.yy0);}
2733 #line 2758 "pikchr.c"
2734 yymsp[-1].minor.yy164 = yylhsminor.yy164;
2735 break;
2736 case 64: /* position ::= expr COMMA expr */
2737 #line 672 "pikchr.y"
2738 {yylhsminor.yy79.x=yymsp[-2].minor.yy153; yylhsminor.yy79.y=yymsp[0].minor.yy153;}
2739 #line 2764 "pikchr.c"
2740 yymsp[-2].minor.yy79 = yylhsminor.yy79;
2741 break;
2742 case 65: /* position ::= place PLUS expr COMMA expr */
2743 #line 674 "pikchr.y"
2744 {yylhsminor.yy79.x=yymsp[-4].minor.yy79.x+yymsp[-2].minor.yy153; yylhsminor.yy79.y=yymsp[-4].minor.yy79.y+yymsp[0].minor.yy153;}
2745 #line 2770 "pikchr.c"
2746 yymsp[-4].minor.yy79 = yylhsminor.yy79;
2747 break;
2748 case 66: /* position ::= place MINUS expr COMMA expr */
2749 #line 675 "pikchr.y"
2750 {yylhsminor.yy79.x=yymsp[-4].minor.yy79.x-yymsp[-2].minor.yy153; yylhsminor.yy79.y=yymsp[-4].minor.yy79.y-yymsp[0].minor.yy153;}
2751 #line 2776 "pikchr.c"
2752 yymsp[-4].minor.yy79 = yylhsminor.yy79;
2753 break;
2754 case 67: /* position ::= place PLUS LP expr COMMA expr RP */
2755 #line 677 "pikchr.y"
2756 {yylhsminor.yy79.x=yymsp[-6].minor.yy79.x+yymsp[-3].minor.yy153; yylhsminor.yy79.y=yymsp[-6].minor.yy79.y+yymsp[-1].minor.yy153;}
2757 #line 2782 "pikchr.c"
2758 yymsp[-6].minor.yy79 = yylhsminor.yy79;
2759 break;
2760 case 68: /* position ::= place MINUS LP expr COMMA expr RP */
2761 #line 679 "pikchr.y"
2762 {yylhsminor.yy79.x=yymsp[-6].minor.yy79.x-yymsp[-3].minor.yy153; yylhsminor.yy79.y=yymsp[-6].minor.yy79.y-yymsp[-1].minor.yy153;}
2763 #line 2788 "pikchr.c"
2764 yymsp[-6].minor.yy79 = yylhsminor.yy79;
2765 break;
2766 case 69: /* position ::= LP position COMMA position RP */
2767 #line 680 "pikchr.y"
2768 {yymsp[-4].minor.yy79.x=yymsp[-3].minor.yy79.x; yymsp[-4].minor.yy79.y=yymsp[-1].minor.yy79.y;}
2769 #line 2794 "pikchr.c"
2770 break;
2771 case 70: /* position ::= LP position RP */
2772 #line 681 "pikchr.y"
2773 {yymsp[-2].minor.yy79=yymsp[-1].minor.yy79;}
2774 #line 2799 "pikchr.c"
2775 break;
2776 case 71: /* position ::= expr between position AND position */
2777 #line 683 "pikchr.y"
2778 {yylhsminor.yy79 = pik_position_between(yymsp[-4].minor.yy153,yymsp[-2].minor.yy79,yymsp[0].minor.yy79);}
2779 #line 2804 "pikchr.c"
2780 yymsp[-4].minor.yy79 = yylhsminor.yy79;
2781 break;
2782 case 72: /* position ::= expr LT position COMMA position GT */
2783 #line 685 "pikchr.y"
2784 {yylhsminor.yy79 = pik_position_between(yymsp[-5].minor.yy153,yymsp[-3].minor.yy79,yymsp[-1].minor.yy79);}
2785 #line 2810 "pikchr.c"
2786 yymsp[-5].minor.yy79 = yylhsminor.yy79;
2787 break;
2788 case 73: /* position ::= expr ABOVE position */
2789 #line 686 "pikchr.y"
2790 {yylhsminor.yy79=yymsp[0].minor.yy79; yylhsminor.yy79.y += yymsp[-2].minor.yy153;}
2791 #line 2816 "pikchr.c"
2792 yymsp[-2].minor.yy79 = yylhsminor.yy79;
2793 break;
2794 case 74: /* position ::= expr BELOW position */
2795 #line 687 "pikchr.y"
2796 {yylhsminor.yy79=yymsp[0].minor.yy79; yylhsminor.yy79.y -= yymsp[-2].minor.yy153;}
2797 #line 2822 "pikchr.c"
2798 yymsp[-2].minor.yy79 = yylhsminor.yy79;
2799 break;
2800 case 75: /* position ::= expr LEFT OF position */
2801 #line 688 "pikchr.y"
2802 {yylhsminor.yy79=yymsp[0].minor.yy79; yylhsminor.yy79.x -= yymsp[-3].minor.yy153;}
2803 #line 2828 "pikchr.c"
2804 yymsp[-3].minor.yy79 = yylhsminor.yy79;
2805 break;
2806 case 76: /* position ::= expr RIGHT OF position */
2807 #line 689 "pikchr.y"
2808 {yylhsminor.yy79=yymsp[0].minor.yy79; yylhsminor.yy79.x += yymsp[-3].minor.yy153;}
2809 #line 2834 "pikchr.c"
2810 yymsp[-3].minor.yy79 = yylhsminor.yy79;
2811 break;
2812 case 77: /* position ::= expr ON HEADING EDGEPT OF position */
2813 #line 691 "pikchr.y"
2814 {yylhsminor.yy79 = pik_position_at_hdg(yymsp[-5].minor.yy153,&yymsp[-2].minor.yy0,yymsp[0].minor.yy79);}
2815 #line 2840 "pikchr.c"
2816 yymsp[-5].minor.yy79 = yylhsminor.yy79;
2817 break;
2818 case 78: /* position ::= expr HEADING EDGEPT OF position */
2819 #line 693 "pikchr.y"
2820 {yylhsminor.yy79 = pik_position_at_hdg(yymsp[-4].minor.yy153,&yymsp[-2].minor.yy0,yymsp[0].minor.yy79);}
2821 #line 2846 "pikchr.c"
2822 yymsp[-4].minor.yy79 = yylhsminor.yy79;
2823 break;
2824 case 79: /* position ::= expr EDGEPT OF position */
2825 #line 695 "pikchr.y"
2826 {yylhsminor.yy79 = pik_position_at_hdg(yymsp[-3].minor.yy153,&yymsp[-2].minor.yy0,yymsp[0].minor.yy79);}
2827 #line 2852 "pikchr.c"
2828 yymsp[-3].minor.yy79 = yylhsminor.yy79;
2829 break;
2830 case 80: /* position ::= expr ON HEADING expr FROM position */
2831 #line 697 "pikchr.y"
2832 {yylhsminor.yy79 = pik_position_at_angle(yymsp[-5].minor.yy153,yymsp[-2].minor.yy153,yymsp[0].minor.yy79);}
2833 #line 2858 "pikchr.c"
2834 yymsp[-5].minor.yy79 = yylhsminor.yy79;
2835 break;
2836 case 81: /* position ::= expr HEADING expr FROM position */
2837 #line 699 "pikchr.y"
2838 {yylhsminor.yy79 = pik_position_at_angle(yymsp[-4].minor.yy153,yymsp[-2].minor.yy153,yymsp[0].minor.yy79);}
2839 #line 2864 "pikchr.c"
2840 yymsp[-4].minor.yy79 = yylhsminor.yy79;
2841 break;
2842 case 82: /* place ::= edge OF object */
2843 #line 711 "pikchr.y"
2844 {yylhsminor.yy79 = pik_place_of_elem(p,yymsp[0].minor.yy36,&yymsp[-2].minor.yy0);}
2845 #line 2870 "pikchr.c"
2846 yymsp[-2].minor.yy79 = yylhsminor.yy79;
2847 break;
2848 case 83: /* place2 ::= object */
2849 #line 712 "pikchr.y"
2850 {yylhsminor.yy79 = pik_place_of_elem(p,yymsp[0].minor.yy36,0);}
2851 #line 2876 "pikchr.c"
2852 yymsp[0].minor.yy79 = yylhsminor.yy79;
2853 break;
2854 case 84: /* place2 ::= object DOT_E edge */
2855 #line 713 "pikchr.y"
2856 {yylhsminor.yy79 = pik_place_of_elem(p,yymsp[-2].minor.yy36,&yymsp[0].minor.yy0);}
2857 #line 2882 "pikchr.c"
2858 yymsp[-2].minor.yy79 = yylhsminor.yy79;
2859 break;
2860 case 85: /* place2 ::= NTH VERTEX OF object */
2861 #line 714 "pikchr.y"
2862 {yylhsminor.yy79 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy36);}
2863 #line 2888 "pikchr.c"
2864 yymsp[-3].minor.yy79 = yylhsminor.yy79;
2865 break;
2866 case 86: /* object ::= nth */
2867 #line 726 "pikchr.y"
2868 {yylhsminor.yy36 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2869 #line 2894 "pikchr.c"
2870 yymsp[0].minor.yy36 = yylhsminor.yy36;
2871 break;
2872 case 87: /* object ::= nth OF|IN object */
2873 #line 727 "pikchr.y"
2874 {yylhsminor.yy36 = pik_find_nth(p,yymsp[0].minor.yy36,&yymsp[-2].minor.yy0);}
2875 #line 2900 "pikchr.c"
2876 yymsp[-2].minor.yy36 = yylhsminor.yy36;
2877 break;
2878 case 88: /* objectname ::= THIS */
2879 #line 729 "pikchr.y"
2880 {yymsp[0].minor.yy36 = p->cur;}
2881 #line 2906 "pikchr.c"
2882 break;
2883 case 89: /* objectname ::= PLACENAME */
2884 #line 730 "pikchr.y"
2885 {yylhsminor.yy36 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2886 #line 2911 "pikchr.c"
2887 yymsp[0].minor.yy36 = yylhsminor.yy36;
2888 break;
2889 case 90: /* objectname ::= objectname DOT_U PLACENAME */
2890 #line 732 "pikchr.y"
2891 {yylhsminor.yy36 = pik_find_byname(p,yymsp[-2].minor.yy36,&yymsp[0].minor.yy0);}
2892 #line 2917 "pikchr.c"
2893 yymsp[-2].minor.yy36 = yylhsminor.yy36;
2894 break;
2895 case 91: /* nth ::= NTH CLASSNAME */
2896 #line 734 "pikchr.y"
2897 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2898 #line 2923 "pikchr.c"
2899 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2900 break;
2901 case 92: /* nth ::= NTH LAST CLASSNAME */
2902 #line 735 "pikchr.y"
2903 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2904 #line 2929 "pikchr.c"
2905 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2906 break;
2907 case 93: /* nth ::= LAST CLASSNAME */
2908 #line 736 "pikchr.y"
2909 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2910 #line 2935 "pikchr.c"
2911 break;
2912 case 94: /* nth ::= LAST */
2913 #line 737 "pikchr.y"
2914 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2915 #line 2940 "pikchr.c"
2916 yymsp[0].minor.yy0 = yylhsminor.yy0;
2917 break;
2918 case 95: /* nth ::= NTH LB RB */
2919 #line 738 "pikchr.y"
2920 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2921 #line 2946 "pikchr.c"
2922 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2923 break;
2924 case 96: /* nth ::= NTH LAST LB RB */
2925 #line 739 "pikchr.y"
2926 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2927 #line 2952 "pikchr.c"
2928 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2929 break;
2930 case 97: /* nth ::= LAST LB RB */
2931 #line 740 "pikchr.y"
2932 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2933 #line 2958 "pikchr.c"
2934 break;
2935 case 98: /* expr ::= expr PLUS expr */
2936 #line 742 "pikchr.y"
2937 {yylhsminor.yy153=yymsp[-2].minor.yy153+yymsp[0].minor.yy153;}
2938 #line 2963 "pikchr.c"
2939 yymsp[-2].minor.yy153 = yylhsminor.yy153;
2940 break;
2941 case 99: /* expr ::= expr MINUS expr */
2942 #line 743 "pikchr.y"
2943 {yylhsminor.yy153=yymsp[-2].minor.yy153-yymsp[0].minor.yy153;}
2944 #line 2969 "pikchr.c"
2945 yymsp[-2].minor.yy153 = yylhsminor.yy153;
2946 break;
2947 case 100: /* expr ::= expr STAR expr */
2948 #line 744 "pikchr.y"
2949 {yylhsminor.yy153=yymsp[-2].minor.yy153*yymsp[0].minor.yy153;}
2950 #line 2975 "pikchr.c"
2951 yymsp[-2].minor.yy153 = yylhsminor.yy153;
2952 break;
2953 case 101: /* expr ::= expr SLASH expr */
2954 #line 745 "pikchr.y"
2955 {
2956 if( yymsp[0].minor.yy153==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy153 = 0.0; }
2957 else{ yylhsminor.yy153 = yymsp[-2].minor.yy153/yymsp[0].minor.yy153; }
2958 }
2959 #line 2984 "pikchr.c"
2960 yymsp[-2].minor.yy153 = yylhsminor.yy153;
2961 break;
2962 case 102: /* expr ::= MINUS expr */
2963 #line 749 "pikchr.y"
2964 {yymsp[-1].minor.yy153=-yymsp[0].minor.yy153;}
2965 #line 2990 "pikchr.c"
2966 break;
2967 case 103: /* expr ::= PLUS expr */
2968 #line 750 "pikchr.y"
2969 {yymsp[-1].minor.yy153=yymsp[0].minor.yy153;}
2970 #line 2995 "pikchr.c"
2971 break;
2972 case 104: /* expr ::= LP expr RP */
2973 #line 751 "pikchr.y"
2974 {yymsp[-2].minor.yy153=yymsp[-1].minor.yy153;}
2975 #line 3000 "pikchr.c"
2976 break;
2977 case 105: /* expr ::= LP FILL|COLOR|THICKNESS RP */
2978 #line 752 "pikchr.y"
2979 {yymsp[-2].minor.yy153=pik_get_var(p,&yymsp[-1].minor.yy0);}
2980 #line 3005 "pikchr.c"
2981 break;
2982 case 106: /* expr ::= NUMBER */
2983 #line 753 "pikchr.y"
2984 {yylhsminor.yy153=pik_atof(&yymsp[0].minor.yy0);}
2985 #line 3010 "pikchr.c"
2986 yymsp[0].minor.yy153 = yylhsminor.yy153;
2987 break;
2988 case 107: /* expr ::= ID */
2989 #line 754 "pikchr.y"
2990 {yylhsminor.yy153=pik_get_var(p,&yymsp[0].minor.yy0);}
2991 #line 3016 "pikchr.c"
2992 yymsp[0].minor.yy153 = yylhsminor.yy153;
2993 break;
2994 case 108: /* expr ::= FUNC1 LP expr RP */
2995 #line 755 "pikchr.y"
2996 {yylhsminor.yy153 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy153,0.0);}
2997 #line 3022 "pikchr.c"
2998 yymsp[-3].minor.yy153 = yylhsminor.yy153;
2999 break;
3000 case 109: /* expr ::= FUNC2 LP expr COMMA expr RP */
3001 #line 756 "pikchr.y"
3002 {yylhsminor.yy153 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy153,yymsp[-1].minor.yy153);}
3003 #line 3028 "pikchr.c"
3004 yymsp[-5].minor.yy153 = yylhsminor.yy153;
3005 break;
3006 case 110: /* expr ::= DIST LP position COMMA position RP */
3007 #line 757 "pikchr.y"
3008 {yymsp[-5].minor.yy153 = pik_dist(&yymsp[-3].minor.yy79,&yymsp[-1].minor.yy79);}
3009 #line 3034 "pikchr.c"
3010 break;
3011 case 111: /* expr ::= place2 DOT_XY X */
3012 #line 758 "pikchr.y"
3013 {yylhsminor.yy153 = yymsp[-2].minor.yy79.x;}
3014 #line 3039 "pikchr.c"
3015 yymsp[-2].minor.yy153 = yylhsminor.yy153;
3016 break;
3017 case 112: /* expr ::= place2 DOT_XY Y */
3018 #line 759 "pikchr.y"
3019 {yylhsminor.yy153 = yymsp[-2].minor.yy79.y;}
3020 #line 3045 "pikchr.c"
3021 yymsp[-2].minor.yy153 = yylhsminor.yy153;
3022 break;
3023 case 113: /* expr ::= object DOT_L numproperty */
3024 case 114: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==114);
3025 case 115: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==115);
3026 #line 760 "pikchr.y"
3027 {yylhsminor.yy153=pik_property_of(yymsp[-2].minor.yy36,&yymsp[0].minor.yy0);}
3028 #line 3053 "pikchr.c"
3029 yymsp[-2].minor.yy153 = yylhsminor.yy153;
3030 break;
3031 default:
3032 /* (116) lvalue ::= ID */ yytestcase(yyruleno==116);
3033 /* (117) lvalue ::= FILL */ yytestcase(yyruleno==117);
@@ -3126,19 +3127,19 @@
3126 ){
3127 pik_parserARG_FETCH
3128 pik_parserCTX_FETCH
3129 #define TOKEN yyminor
3130 /************ Begin %syntax_error code ****************************************/
3131 #line 520 "pikchr.y"
3132
3133 if( TOKEN.z && TOKEN.z[0] ){
3134 pik_error(p, &TOKEN, "syntax error");
3135 }else{
3136 pik_error(p, 0, "syntax error");
3137 }
3138 UNUSED_PARAMETER(yymajor);
3139 #line 3164 "pikchr.c"
3140 /************ End %syntax_error code ******************************************/
3141 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
3142 pik_parserCTX_STORE
3143 }
3144
@@ -3367,11 +3368,11 @@
3367 #else
3368 (void)iToken;
3369 return 0;
3370 #endif
3371 }
3372 #line 765 "pikchr.y"
3373
3374
3375
3376 /* Chart of the 148 official CSS color names with their
3377 ** corresponding RGB values thru Color Module Level 4:
@@ -5391,11 +5392,11 @@
5391 }
5392 }
5393 p->aTPath[0] = pNew->ptAt;
5394 pNew->with = pNew->ptAt;
5395 pNew->outDir = pNew->inDir = p->eDir;
5396 pNew->iLayer = (int)pik_value(p, "layer", 5, &miss);
5397 if( miss ) pNew->iLayer = 1000;
5398 if( pNew->iLayer<0 ) pNew->iLayer = 0;
5399 if( pSublist ){
5400 pNew->type = &sublistClass;
5401 pNew->pSublist = pSublist;
@@ -6259,10 +6260,16 @@
6259 }
6260 }
6261 if( pMiss ) *pMiss = 1;
6262 return 0.0;
6263 }
 
 
 
 
 
 
6264
6265 /*
6266 ** Look up a color-name. Unlike other names in this program, the
6267 ** color-names are not case sensitive. So "DarkBlue" and "darkblue"
6268 ** and "DARKBLUE" all find the same value (139).
@@ -6557,26 +6564,28 @@
6557
6558 /* Return the value of a property of an object.
6559 */
6560 static PNum pik_property_of(PObj *pObj, PToken *pProp){
6561 PNum v = 0.0;
6562 switch( pProp->eType ){
6563 case T_HEIGHT: v = pObj->h; break;
6564 case T_WIDTH: v = pObj->w; break;
6565 case T_RADIUS: v = pObj->rad; break;
6566 case T_DIAMETER: v = pObj->rad*2.0; break;
6567 case T_THICKNESS: v = pObj->sw; break;
6568 case T_DASHED: v = pObj->dashed; break;
6569 case T_DOTTED: v = pObj->dotted; break;
6570 case T_FILL: v = pObj->fill; break;
6571 case T_COLOR: v = pObj->color; break;
6572 case T_X: v = pObj->ptAt.x; break;
6573 case T_Y: v = pObj->ptAt.y; break;
6574 case T_TOP: v = pObj->bbox.ne.y; break;
6575 case T_BOTTOM: v = pObj->bbox.sw.y; break;
6576 case T_LEFT: v = pObj->bbox.sw.x; break;
6577 case T_RIGHT: v = pObj->bbox.ne.x; break;
 
 
6578 }
6579 return v;
6580 }
6581
6582 /* Compute one of the built-in functions
@@ -6842,11 +6851,11 @@
6842 int i;
6843 int iNextLayer = 0;
6844 int iThisLayer;
6845 int bMoreToDo;
6846 int miss = 0;
6847 int mDebug = (int)pik_value(p, "debug", 5, 0);
6848 PNum colorLabel;
6849 do{
6850 bMoreToDo = 0;
6851 iThisLayer = iNextLayer;
6852 iNextLayer = 0x7fffffff;
@@ -6960,19 +6969,19 @@
6960 if( thickness<=0.01 ) thickness = 0.01;
6961 margin = pik_value(p,"margin",6,0);
6962 margin += thickness;
6963 wArrow = p->wArrow*thickness;
6964 miss = 0;
6965 p->fgcolor = (int)pik_value(p,"fgcolor",7,&miss);
6966 if( miss ){
6967 PToken t;
6968 t.z = "fgcolor";
6969 t.n = 7;
6970 p->fgcolor = (int)pik_lookup_color(0, &t);
6971 }
6972 miss = 0;
6973 p->bgcolor = (int)pik_value(p,"bgcolor",7,&miss);
6974 if( miss ){
6975 PToken t;
6976 t.z = "bgcolor";
6977 t.n = 7;
6978 p->bgcolor = (int)pik_lookup_color(0, &t);
@@ -7988,19 +7997,26 @@
7988 Tcl_ListObjAppendElement(0, pRes, Tcl_NewIntObj(w));
7989 Tcl_ListObjAppendElement(0, pRes, Tcl_NewIntObj(h));
7990 Tcl_SetObjResult(interp, pRes);
7991 return TCL_OK;
7992 }
 
 
 
 
 
 
 
7993
7994 /* Invoke this routine to register the "pikchr" command with the interpreter
7995 ** given in the argument */
7996 int Pikchr_Init(Tcl_Interp *interp){
7997 Tcl_CreateObjCommand(interp, "pikchr", pik_tcl_command, 0, 0);
7998 Tcl_PkgProvide (interp, PACKAGE_NAME, PACKAGE_VERSION);
7999 return TCL_OK;
8000 }
8001
8002
8003 #endif /* PIKCHR_TCL */
8004
8005
8006 #line 8031 "pikchr.c"
8007
--- src/pikchr.c
+++ src/pikchr.c
@@ -428,10 +428,11 @@
428 static PObj *pik_elem_new(Pik*,PToken*,PToken*,PList*);
429 static void pik_set_direction(Pik*,int);
430 static void pik_elem_setname(Pik*,PObj*,PToken*);
431 static void pik_set_var(Pik*,PToken*,PNum,PToken*);
432 static PNum pik_value(Pik*,const char*,int,int*);
433 static int pik_value_int(Pik*,const char*,int,int*);
434 static PNum pik_lookup_color(Pik*,PToken*);
435 static PNum pik_get_var(Pik*,PToken*);
436 static PNum pik_atof(PToken*);
437 static void pik_after_adding_attributes(Pik*,PObj*);
438 static void pik_elem_move(PObj*,PNum dx, PNum dy);
@@ -474,11 +475,11 @@
475 static PObj *pik_position_assert(Pik*,PPoint*,PToken*,PPoint*);
476 static PNum pik_dist(PPoint*,PPoint*);
477 static void pik_add_macro(Pik*,PToken *pId,PToken *pCode);
478
479
480 #line 506 "pikchr.c"
481 /**************** End of %include directives **********************************/
482 /* These constants specify the various numeric values for terminal symbols.
483 ***************** Begin token definitions *************************************/
484 #ifndef T_ID
485 #define T_ID 1
@@ -1703,22 +1704,22 @@
1704 ** inside the C code.
1705 */
1706 /********* Begin destructor definitions ***************************************/
1707 case 99: /* statement_list */
1708 {
1709 #line 495 "pikchr.y"
1710 pik_elist_free(p,(yypminor->yy227));
1711 #line 1736 "pikchr.c"
1712 }
1713 break;
1714 case 100: /* statement */
1715 case 101: /* unnamed_statement */
1716 case 102: /* basetype */
1717 {
1718 #line 497 "pikchr.y"
1719 pik_elem_free(p,(yypminor->yy36));
1720 #line 1745 "pikchr.c"
1721 }
1722 break;
1723 /********* End destructor definitions *****************************************/
1724 default: break; /* If no destructor action specified: do nothing */
1725 }
@@ -1932,14 +1933,14 @@
1933 #endif
1934 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1935 /* Here code is inserted which will execute if the parser
1936 ** stack every overflows */
1937 /******** Begin %stack_overflow code ******************************************/
1938 #line 529 "pikchr.y"
1939
1940 pik_error(p, 0, "parser stack overflow");
1941 #line 1966 "pikchr.c"
1942 /******** End %stack_overflow code ********************************************/
1943 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1944 pik_parserCTX_STORE
1945 }
1946
@@ -2415,619 +2416,619 @@
2416 ** break;
2417 */
2418 /********** Begin reduce actions **********************************************/
2419 YYMINORTYPE yylhsminor;
2420 case 0: /* document ::= statement_list */
2421 #line 533 "pikchr.y"
2422 {pik_render(p,yymsp[0].minor.yy227);}
2423 #line 2448 "pikchr.c"
2424 break;
2425 case 1: /* statement_list ::= statement */
2426 #line 536 "pikchr.y"
2427 { yylhsminor.yy227 = pik_elist_append(p,0,yymsp[0].minor.yy36); }
2428 #line 2453 "pikchr.c"
2429 yymsp[0].minor.yy227 = yylhsminor.yy227;
2430 break;
2431 case 2: /* statement_list ::= statement_list EOL statement */
2432 #line 538 "pikchr.y"
2433 { yylhsminor.yy227 = pik_elist_append(p,yymsp[-2].minor.yy227,yymsp[0].minor.yy36); }
2434 #line 2459 "pikchr.c"
2435 yymsp[-2].minor.yy227 = yylhsminor.yy227;
2436 break;
2437 case 3: /* statement ::= */
2438 #line 541 "pikchr.y"
2439 { yymsp[1].minor.yy36 = 0; }
2440 #line 2465 "pikchr.c"
2441 break;
2442 case 4: /* statement ::= direction */
2443 #line 542 "pikchr.y"
2444 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy36=0; }
2445 #line 2470 "pikchr.c"
2446 yymsp[0].minor.yy36 = yylhsminor.yy36;
2447 break;
2448 case 5: /* statement ::= lvalue ASSIGN rvalue */
2449 #line 543 "pikchr.y"
2450 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy153,&yymsp[-1].minor.yy0); yylhsminor.yy36=0;}
2451 #line 2476 "pikchr.c"
2452 yymsp[-2].minor.yy36 = yylhsminor.yy36;
2453 break;
2454 case 6: /* statement ::= PLACENAME COLON unnamed_statement */
2455 #line 545 "pikchr.y"
2456 { yylhsminor.yy36 = yymsp[0].minor.yy36; pik_elem_setname(p,yymsp[0].minor.yy36,&yymsp[-2].minor.yy0); }
2457 #line 2482 "pikchr.c"
2458 yymsp[-2].minor.yy36 = yylhsminor.yy36;
2459 break;
2460 case 7: /* statement ::= PLACENAME COLON position */
2461 #line 547 "pikchr.y"
2462 { yylhsminor.yy36 = pik_elem_new(p,0,0,0);
2463 if(yylhsminor.yy36){ yylhsminor.yy36->ptAt = yymsp[0].minor.yy79; pik_elem_setname(p,yylhsminor.yy36,&yymsp[-2].minor.yy0); }}
2464 #line 2489 "pikchr.c"
2465 yymsp[-2].minor.yy36 = yylhsminor.yy36;
2466 break;
2467 case 8: /* statement ::= unnamed_statement */
2468 #line 549 "pikchr.y"
2469 {yylhsminor.yy36 = yymsp[0].minor.yy36;}
2470 #line 2495 "pikchr.c"
2471 yymsp[0].minor.yy36 = yylhsminor.yy36;
2472 break;
2473 case 9: /* statement ::= print prlist */
2474 #line 550 "pikchr.y"
2475 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy36=0;}
2476 #line 2501 "pikchr.c"
2477 break;
2478 case 10: /* statement ::= ASSERT LP expr EQ expr RP */
2479 #line 555 "pikchr.y"
2480 {yymsp[-5].minor.yy36=pik_assert(p,yymsp[-3].minor.yy153,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy153);}
2481 #line 2506 "pikchr.c"
2482 break;
2483 case 11: /* statement ::= ASSERT LP position EQ position RP */
2484 #line 557 "pikchr.y"
2485 {yymsp[-5].minor.yy36=pik_position_assert(p,&yymsp[-3].minor.yy79,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy79);}
2486 #line 2511 "pikchr.c"
2487 break;
2488 case 12: /* statement ::= DEFINE ID CODEBLOCK */
2489 #line 558 "pikchr.y"
2490 {yymsp[-2].minor.yy36=0; pik_add_macro(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
2491 #line 2516 "pikchr.c"
2492 break;
2493 case 13: /* rvalue ::= PLACENAME */
2494 #line 569 "pikchr.y"
2495 {yylhsminor.yy153 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2496 #line 2521 "pikchr.c"
2497 yymsp[0].minor.yy153 = yylhsminor.yy153;
2498 break;
2499 case 14: /* pritem ::= FILL */
2500 case 15: /* pritem ::= COLOR */ yytestcase(yyruleno==15);
2501 case 16: /* pritem ::= THICKNESS */ yytestcase(yyruleno==16);
2502 #line 574 "pikchr.y"
2503 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2504 #line 2529 "pikchr.c"
2505 break;
2506 case 17: /* pritem ::= rvalue */
2507 #line 577 "pikchr.y"
2508 {pik_append_num(p,"",yymsp[0].minor.yy153);}
2509 #line 2534 "pikchr.c"
2510 break;
2511 case 18: /* pritem ::= STRING */
2512 #line 578 "pikchr.y"
2513 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2514 #line 2539 "pikchr.c"
2515 break;
2516 case 19: /* prsep ::= COMMA */
2517 #line 579 "pikchr.y"
2518 {pik_append(p, " ", 1);}
2519 #line 2544 "pikchr.c"
2520 break;
2521 case 20: /* unnamed_statement ::= basetype attribute_list */
2522 #line 582 "pikchr.y"
2523 {yylhsminor.yy36 = yymsp[-1].minor.yy36; pik_after_adding_attributes(p,yylhsminor.yy36);}
2524 #line 2549 "pikchr.c"
2525 yymsp[-1].minor.yy36 = yylhsminor.yy36;
2526 break;
2527 case 21: /* basetype ::= CLASSNAME */
2528 #line 584 "pikchr.y"
2529 {yylhsminor.yy36 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2530 #line 2555 "pikchr.c"
2531 yymsp[0].minor.yy36 = yylhsminor.yy36;
2532 break;
2533 case 22: /* basetype ::= STRING textposition */
2534 #line 586 "pikchr.y"
2535 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy164; yylhsminor.yy36 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2536 #line 2561 "pikchr.c"
2537 yymsp[-1].minor.yy36 = yylhsminor.yy36;
2538 break;
2539 case 23: /* basetype ::= LB savelist statement_list RB */
2540 #line 588 "pikchr.y"
2541 { p->list = yymsp[-2].minor.yy227; yymsp[-3].minor.yy36 = pik_elem_new(p,0,0,yymsp[-1].minor.yy227); if(yymsp[-3].minor.yy36) yymsp[-3].minor.yy36->errTok = yymsp[0].minor.yy0; }
2542 #line 2567 "pikchr.c"
2543 break;
2544 case 24: /* savelist ::= */
2545 #line 593 "pikchr.y"
2546 {yymsp[1].minor.yy227 = p->list; p->list = 0;}
2547 #line 2572 "pikchr.c"
2548 break;
2549 case 25: /* relexpr ::= expr */
2550 #line 600 "pikchr.y"
2551 {yylhsminor.yy10.rAbs = yymsp[0].minor.yy153; yylhsminor.yy10.rRel = 0;}
2552 #line 2577 "pikchr.c"
2553 yymsp[0].minor.yy10 = yylhsminor.yy10;
2554 break;
2555 case 26: /* relexpr ::= expr PERCENT */
2556 #line 601 "pikchr.y"
2557 {yylhsminor.yy10.rAbs = 0; yylhsminor.yy10.rRel = yymsp[-1].minor.yy153/100;}
2558 #line 2583 "pikchr.c"
2559 yymsp[-1].minor.yy10 = yylhsminor.yy10;
2560 break;
2561 case 27: /* optrelexpr ::= */
2562 #line 603 "pikchr.y"
2563 {yymsp[1].minor.yy10.rAbs = 0; yymsp[1].minor.yy10.rRel = 1.0;}
2564 #line 2589 "pikchr.c"
2565 break;
2566 case 28: /* attribute_list ::= relexpr alist */
2567 #line 605 "pikchr.y"
2568 {pik_add_direction(p,0,&yymsp[-1].minor.yy10);}
2569 #line 2594 "pikchr.c"
2570 break;
2571 case 29: /* attribute ::= numproperty relexpr */
2572 #line 609 "pikchr.y"
2573 { pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy10); }
2574 #line 2599 "pikchr.c"
2575 break;
2576 case 30: /* attribute ::= dashproperty expr */
2577 #line 610 "pikchr.y"
2578 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy153); }
2579 #line 2604 "pikchr.c"
2580 break;
2581 case 31: /* attribute ::= dashproperty */
2582 #line 611 "pikchr.y"
2583 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2584 #line 2609 "pikchr.c"
2585 break;
2586 case 32: /* attribute ::= colorproperty rvalue */
2587 #line 612 "pikchr.y"
2588 { pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy153); }
2589 #line 2614 "pikchr.c"
2590 break;
2591 case 33: /* attribute ::= go direction optrelexpr */
2592 #line 613 "pikchr.y"
2593 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy10);}
2594 #line 2619 "pikchr.c"
2595 break;
2596 case 34: /* attribute ::= go direction even position */
2597 #line 614 "pikchr.y"
2598 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy79);}
2599 #line 2624 "pikchr.c"
2600 break;
2601 case 35: /* attribute ::= CLOSE */
2602 #line 615 "pikchr.y"
2603 { pik_close_path(p,&yymsp[0].minor.yy0); }
2604 #line 2629 "pikchr.c"
2605 break;
2606 case 36: /* attribute ::= CHOP */
2607 #line 616 "pikchr.y"
2608 { p->cur->bChop = 1; }
2609 #line 2634 "pikchr.c"
2610 break;
2611 case 37: /* attribute ::= FROM position */
2612 #line 617 "pikchr.y"
2613 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy79); }
2614 #line 2639 "pikchr.c"
2615 break;
2616 case 38: /* attribute ::= TO position */
2617 #line 618 "pikchr.y"
2618 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy79); }
2619 #line 2644 "pikchr.c"
2620 break;
2621 case 39: /* attribute ::= THEN */
2622 #line 619 "pikchr.y"
2623 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2624 #line 2649 "pikchr.c"
2625 break;
2626 case 40: /* attribute ::= THEN optrelexpr HEADING expr */
2627 case 42: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==42);
2628 #line 621 "pikchr.y"
2629 {pik_move_hdg(p,&yymsp[-2].minor.yy10,&yymsp[-1].minor.yy0,yymsp[0].minor.yy153,0,&yymsp[-3].minor.yy0);}
2630 #line 2655 "pikchr.c"
2631 break;
2632 case 41: /* attribute ::= THEN optrelexpr EDGEPT */
2633 case 43: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==43);
2634 #line 622 "pikchr.y"
2635 {pik_move_hdg(p,&yymsp[-1].minor.yy10,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2636 #line 2661 "pikchr.c"
2637 break;
2638 case 44: /* attribute ::= AT position */
2639 #line 627 "pikchr.y"
2640 { pik_set_at(p,0,&yymsp[0].minor.yy79,&yymsp[-1].minor.yy0); }
2641 #line 2666 "pikchr.c"
2642 break;
2643 case 45: /* attribute ::= SAME */
2644 #line 629 "pikchr.y"
2645 {pik_same(p,0,&yymsp[0].minor.yy0);}
2646 #line 2671 "pikchr.c"
2647 break;
2648 case 46: /* attribute ::= SAME AS object */
2649 #line 630 "pikchr.y"
2650 {pik_same(p,yymsp[0].minor.yy36,&yymsp[-2].minor.yy0);}
2651 #line 2676 "pikchr.c"
2652 break;
2653 case 47: /* attribute ::= STRING textposition */
2654 #line 631 "pikchr.y"
2655 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy164);}
2656 #line 2681 "pikchr.c"
2657 break;
2658 case 48: /* attribute ::= FIT */
2659 #line 632 "pikchr.y"
2660 {pik_size_to_fit(p,&yymsp[0].minor.yy0,3); }
2661 #line 2686 "pikchr.c"
2662 break;
2663 case 49: /* attribute ::= BEHIND object */
2664 #line 633 "pikchr.y"
2665 {pik_behind(p,yymsp[0].minor.yy36);}
2666 #line 2691 "pikchr.c"
2667 break;
2668 case 50: /* withclause ::= DOT_E edge AT position */
2669 case 51: /* withclause ::= edge AT position */ yytestcase(yyruleno==51);
2670 #line 641 "pikchr.y"
2671 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy79,&yymsp[-1].minor.yy0); }
2672 #line 2697 "pikchr.c"
2673 break;
2674 case 52: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2675 #line 645 "pikchr.y"
2676 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2677 #line 2702 "pikchr.c"
2678 yymsp[0].minor.yy0 = yylhsminor.yy0;
2679 break;
2680 case 53: /* boolproperty ::= CW */
2681 #line 656 "pikchr.y"
2682 {p->cur->cw = 1;}
2683 #line 2708 "pikchr.c"
2684 break;
2685 case 54: /* boolproperty ::= CCW */
2686 #line 657 "pikchr.y"
2687 {p->cur->cw = 0;}
2688 #line 2713 "pikchr.c"
2689 break;
2690 case 55: /* boolproperty ::= LARROW */
2691 #line 658 "pikchr.y"
2692 {p->cur->larrow=1; p->cur->rarrow=0; }
2693 #line 2718 "pikchr.c"
2694 break;
2695 case 56: /* boolproperty ::= RARROW */
2696 #line 659 "pikchr.y"
2697 {p->cur->larrow=0; p->cur->rarrow=1; }
2698 #line 2723 "pikchr.c"
2699 break;
2700 case 57: /* boolproperty ::= LRARROW */
2701 #line 660 "pikchr.y"
2702 {p->cur->larrow=1; p->cur->rarrow=1; }
2703 #line 2728 "pikchr.c"
2704 break;
2705 case 58: /* boolproperty ::= INVIS */
2706 #line 661 "pikchr.y"
2707 {p->cur->sw = 0.0;}
2708 #line 2733 "pikchr.c"
2709 break;
2710 case 59: /* boolproperty ::= THICK */
2711 #line 662 "pikchr.y"
2712 {p->cur->sw *= 1.5;}
2713 #line 2738 "pikchr.c"
2714 break;
2715 case 60: /* boolproperty ::= THIN */
2716 #line 663 "pikchr.y"
2717 {p->cur->sw *= 0.67;}
2718 #line 2743 "pikchr.c"
2719 break;
2720 case 61: /* boolproperty ::= SOLID */
2721 #line 664 "pikchr.y"
2722 {p->cur->sw = pik_value(p,"thickness",9,0);
2723 p->cur->dotted = p->cur->dashed = 0.0;}
2724 #line 2749 "pikchr.c"
2725 break;
2726 case 62: /* textposition ::= */
2727 #line 667 "pikchr.y"
2728 {yymsp[1].minor.yy164 = 0;}
2729 #line 2754 "pikchr.c"
2730 break;
2731 case 63: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2732 #line 670 "pikchr.y"
2733 {yylhsminor.yy164 = (short int)pik_text_position(yymsp[-1].minor.yy164,&yymsp[0].minor.yy0);}
2734 #line 2759 "pikchr.c"
2735 yymsp[-1].minor.yy164 = yylhsminor.yy164;
2736 break;
2737 case 64: /* position ::= expr COMMA expr */
2738 #line 673 "pikchr.y"
2739 {yylhsminor.yy79.x=yymsp[-2].minor.yy153; yylhsminor.yy79.y=yymsp[0].minor.yy153;}
2740 #line 2765 "pikchr.c"
2741 yymsp[-2].minor.yy79 = yylhsminor.yy79;
2742 break;
2743 case 65: /* position ::= place PLUS expr COMMA expr */
2744 #line 675 "pikchr.y"
2745 {yylhsminor.yy79.x=yymsp[-4].minor.yy79.x+yymsp[-2].minor.yy153; yylhsminor.yy79.y=yymsp[-4].minor.yy79.y+yymsp[0].minor.yy153;}
2746 #line 2771 "pikchr.c"
2747 yymsp[-4].minor.yy79 = yylhsminor.yy79;
2748 break;
2749 case 66: /* position ::= place MINUS expr COMMA expr */
2750 #line 676 "pikchr.y"
2751 {yylhsminor.yy79.x=yymsp[-4].minor.yy79.x-yymsp[-2].minor.yy153; yylhsminor.yy79.y=yymsp[-4].minor.yy79.y-yymsp[0].minor.yy153;}
2752 #line 2777 "pikchr.c"
2753 yymsp[-4].minor.yy79 = yylhsminor.yy79;
2754 break;
2755 case 67: /* position ::= place PLUS LP expr COMMA expr RP */
2756 #line 678 "pikchr.y"
2757 {yylhsminor.yy79.x=yymsp[-6].minor.yy79.x+yymsp[-3].minor.yy153; yylhsminor.yy79.y=yymsp[-6].minor.yy79.y+yymsp[-1].minor.yy153;}
2758 #line 2783 "pikchr.c"
2759 yymsp[-6].minor.yy79 = yylhsminor.yy79;
2760 break;
2761 case 68: /* position ::= place MINUS LP expr COMMA expr RP */
2762 #line 680 "pikchr.y"
2763 {yylhsminor.yy79.x=yymsp[-6].minor.yy79.x-yymsp[-3].minor.yy153; yylhsminor.yy79.y=yymsp[-6].minor.yy79.y-yymsp[-1].minor.yy153;}
2764 #line 2789 "pikchr.c"
2765 yymsp[-6].minor.yy79 = yylhsminor.yy79;
2766 break;
2767 case 69: /* position ::= LP position COMMA position RP */
2768 #line 681 "pikchr.y"
2769 {yymsp[-4].minor.yy79.x=yymsp[-3].minor.yy79.x; yymsp[-4].minor.yy79.y=yymsp[-1].minor.yy79.y;}
2770 #line 2795 "pikchr.c"
2771 break;
2772 case 70: /* position ::= LP position RP */
2773 #line 682 "pikchr.y"
2774 {yymsp[-2].minor.yy79=yymsp[-1].minor.yy79;}
2775 #line 2800 "pikchr.c"
2776 break;
2777 case 71: /* position ::= expr between position AND position */
2778 #line 684 "pikchr.y"
2779 {yylhsminor.yy79 = pik_position_between(yymsp[-4].minor.yy153,yymsp[-2].minor.yy79,yymsp[0].minor.yy79);}
2780 #line 2805 "pikchr.c"
2781 yymsp[-4].minor.yy79 = yylhsminor.yy79;
2782 break;
2783 case 72: /* position ::= expr LT position COMMA position GT */
2784 #line 686 "pikchr.y"
2785 {yylhsminor.yy79 = pik_position_between(yymsp[-5].minor.yy153,yymsp[-3].minor.yy79,yymsp[-1].minor.yy79);}
2786 #line 2811 "pikchr.c"
2787 yymsp[-5].minor.yy79 = yylhsminor.yy79;
2788 break;
2789 case 73: /* position ::= expr ABOVE position */
2790 #line 687 "pikchr.y"
2791 {yylhsminor.yy79=yymsp[0].minor.yy79; yylhsminor.yy79.y += yymsp[-2].minor.yy153;}
2792 #line 2817 "pikchr.c"
2793 yymsp[-2].minor.yy79 = yylhsminor.yy79;
2794 break;
2795 case 74: /* position ::= expr BELOW position */
2796 #line 688 "pikchr.y"
2797 {yylhsminor.yy79=yymsp[0].minor.yy79; yylhsminor.yy79.y -= yymsp[-2].minor.yy153;}
2798 #line 2823 "pikchr.c"
2799 yymsp[-2].minor.yy79 = yylhsminor.yy79;
2800 break;
2801 case 75: /* position ::= expr LEFT OF position */
2802 #line 689 "pikchr.y"
2803 {yylhsminor.yy79=yymsp[0].minor.yy79; yylhsminor.yy79.x -= yymsp[-3].minor.yy153;}
2804 #line 2829 "pikchr.c"
2805 yymsp[-3].minor.yy79 = yylhsminor.yy79;
2806 break;
2807 case 76: /* position ::= expr RIGHT OF position */
2808 #line 690 "pikchr.y"
2809 {yylhsminor.yy79=yymsp[0].minor.yy79; yylhsminor.yy79.x += yymsp[-3].minor.yy153;}
2810 #line 2835 "pikchr.c"
2811 yymsp[-3].minor.yy79 = yylhsminor.yy79;
2812 break;
2813 case 77: /* position ::= expr ON HEADING EDGEPT OF position */
2814 #line 692 "pikchr.y"
2815 {yylhsminor.yy79 = pik_position_at_hdg(yymsp[-5].minor.yy153,&yymsp[-2].minor.yy0,yymsp[0].minor.yy79);}
2816 #line 2841 "pikchr.c"
2817 yymsp[-5].minor.yy79 = yylhsminor.yy79;
2818 break;
2819 case 78: /* position ::= expr HEADING EDGEPT OF position */
2820 #line 694 "pikchr.y"
2821 {yylhsminor.yy79 = pik_position_at_hdg(yymsp[-4].minor.yy153,&yymsp[-2].minor.yy0,yymsp[0].minor.yy79);}
2822 #line 2847 "pikchr.c"
2823 yymsp[-4].minor.yy79 = yylhsminor.yy79;
2824 break;
2825 case 79: /* position ::= expr EDGEPT OF position */
2826 #line 696 "pikchr.y"
2827 {yylhsminor.yy79 = pik_position_at_hdg(yymsp[-3].minor.yy153,&yymsp[-2].minor.yy0,yymsp[0].minor.yy79);}
2828 #line 2853 "pikchr.c"
2829 yymsp[-3].minor.yy79 = yylhsminor.yy79;
2830 break;
2831 case 80: /* position ::= expr ON HEADING expr FROM position */
2832 #line 698 "pikchr.y"
2833 {yylhsminor.yy79 = pik_position_at_angle(yymsp[-5].minor.yy153,yymsp[-2].minor.yy153,yymsp[0].minor.yy79);}
2834 #line 2859 "pikchr.c"
2835 yymsp[-5].minor.yy79 = yylhsminor.yy79;
2836 break;
2837 case 81: /* position ::= expr HEADING expr FROM position */
2838 #line 700 "pikchr.y"
2839 {yylhsminor.yy79 = pik_position_at_angle(yymsp[-4].minor.yy153,yymsp[-2].minor.yy153,yymsp[0].minor.yy79);}
2840 #line 2865 "pikchr.c"
2841 yymsp[-4].minor.yy79 = yylhsminor.yy79;
2842 break;
2843 case 82: /* place ::= edge OF object */
2844 #line 712 "pikchr.y"
2845 {yylhsminor.yy79 = pik_place_of_elem(p,yymsp[0].minor.yy36,&yymsp[-2].minor.yy0);}
2846 #line 2871 "pikchr.c"
2847 yymsp[-2].minor.yy79 = yylhsminor.yy79;
2848 break;
2849 case 83: /* place2 ::= object */
2850 #line 713 "pikchr.y"
2851 {yylhsminor.yy79 = pik_place_of_elem(p,yymsp[0].minor.yy36,0);}
2852 #line 2877 "pikchr.c"
2853 yymsp[0].minor.yy79 = yylhsminor.yy79;
2854 break;
2855 case 84: /* place2 ::= object DOT_E edge */
2856 #line 714 "pikchr.y"
2857 {yylhsminor.yy79 = pik_place_of_elem(p,yymsp[-2].minor.yy36,&yymsp[0].minor.yy0);}
2858 #line 2883 "pikchr.c"
2859 yymsp[-2].minor.yy79 = yylhsminor.yy79;
2860 break;
2861 case 85: /* place2 ::= NTH VERTEX OF object */
2862 #line 715 "pikchr.y"
2863 {yylhsminor.yy79 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy36);}
2864 #line 2889 "pikchr.c"
2865 yymsp[-3].minor.yy79 = yylhsminor.yy79;
2866 break;
2867 case 86: /* object ::= nth */
2868 #line 727 "pikchr.y"
2869 {yylhsminor.yy36 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2870 #line 2895 "pikchr.c"
2871 yymsp[0].minor.yy36 = yylhsminor.yy36;
2872 break;
2873 case 87: /* object ::= nth OF|IN object */
2874 #line 728 "pikchr.y"
2875 {yylhsminor.yy36 = pik_find_nth(p,yymsp[0].minor.yy36,&yymsp[-2].minor.yy0);}
2876 #line 2901 "pikchr.c"
2877 yymsp[-2].minor.yy36 = yylhsminor.yy36;
2878 break;
2879 case 88: /* objectname ::= THIS */
2880 #line 730 "pikchr.y"
2881 {yymsp[0].minor.yy36 = p->cur;}
2882 #line 2907 "pikchr.c"
2883 break;
2884 case 89: /* objectname ::= PLACENAME */
2885 #line 731 "pikchr.y"
2886 {yylhsminor.yy36 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2887 #line 2912 "pikchr.c"
2888 yymsp[0].minor.yy36 = yylhsminor.yy36;
2889 break;
2890 case 90: /* objectname ::= objectname DOT_U PLACENAME */
2891 #line 733 "pikchr.y"
2892 {yylhsminor.yy36 = pik_find_byname(p,yymsp[-2].minor.yy36,&yymsp[0].minor.yy0);}
2893 #line 2918 "pikchr.c"
2894 yymsp[-2].minor.yy36 = yylhsminor.yy36;
2895 break;
2896 case 91: /* nth ::= NTH CLASSNAME */
2897 #line 735 "pikchr.y"
2898 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2899 #line 2924 "pikchr.c"
2900 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2901 break;
2902 case 92: /* nth ::= NTH LAST CLASSNAME */
2903 #line 736 "pikchr.y"
2904 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2905 #line 2930 "pikchr.c"
2906 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2907 break;
2908 case 93: /* nth ::= LAST CLASSNAME */
2909 #line 737 "pikchr.y"
2910 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2911 #line 2936 "pikchr.c"
2912 break;
2913 case 94: /* nth ::= LAST */
2914 #line 738 "pikchr.y"
2915 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2916 #line 2941 "pikchr.c"
2917 yymsp[0].minor.yy0 = yylhsminor.yy0;
2918 break;
2919 case 95: /* nth ::= NTH LB RB */
2920 #line 739 "pikchr.y"
2921 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2922 #line 2947 "pikchr.c"
2923 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2924 break;
2925 case 96: /* nth ::= NTH LAST LB RB */
2926 #line 740 "pikchr.y"
2927 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2928 #line 2953 "pikchr.c"
2929 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2930 break;
2931 case 97: /* nth ::= LAST LB RB */
2932 #line 741 "pikchr.y"
2933 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2934 #line 2959 "pikchr.c"
2935 break;
2936 case 98: /* expr ::= expr PLUS expr */
2937 #line 743 "pikchr.y"
2938 {yylhsminor.yy153=yymsp[-2].minor.yy153+yymsp[0].minor.yy153;}
2939 #line 2964 "pikchr.c"
2940 yymsp[-2].minor.yy153 = yylhsminor.yy153;
2941 break;
2942 case 99: /* expr ::= expr MINUS expr */
2943 #line 744 "pikchr.y"
2944 {yylhsminor.yy153=yymsp[-2].minor.yy153-yymsp[0].minor.yy153;}
2945 #line 2970 "pikchr.c"
2946 yymsp[-2].minor.yy153 = yylhsminor.yy153;
2947 break;
2948 case 100: /* expr ::= expr STAR expr */
2949 #line 745 "pikchr.y"
2950 {yylhsminor.yy153=yymsp[-2].minor.yy153*yymsp[0].minor.yy153;}
2951 #line 2976 "pikchr.c"
2952 yymsp[-2].minor.yy153 = yylhsminor.yy153;
2953 break;
2954 case 101: /* expr ::= expr SLASH expr */
2955 #line 746 "pikchr.y"
2956 {
2957 if( yymsp[0].minor.yy153==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy153 = 0.0; }
2958 else{ yylhsminor.yy153 = yymsp[-2].minor.yy153/yymsp[0].minor.yy153; }
2959 }
2960 #line 2985 "pikchr.c"
2961 yymsp[-2].minor.yy153 = yylhsminor.yy153;
2962 break;
2963 case 102: /* expr ::= MINUS expr */
2964 #line 750 "pikchr.y"
2965 {yymsp[-1].minor.yy153=-yymsp[0].minor.yy153;}
2966 #line 2991 "pikchr.c"
2967 break;
2968 case 103: /* expr ::= PLUS expr */
2969 #line 751 "pikchr.y"
2970 {yymsp[-1].minor.yy153=yymsp[0].minor.yy153;}
2971 #line 2996 "pikchr.c"
2972 break;
2973 case 104: /* expr ::= LP expr RP */
2974 #line 752 "pikchr.y"
2975 {yymsp[-2].minor.yy153=yymsp[-1].minor.yy153;}
2976 #line 3001 "pikchr.c"
2977 break;
2978 case 105: /* expr ::= LP FILL|COLOR|THICKNESS RP */
2979 #line 753 "pikchr.y"
2980 {yymsp[-2].minor.yy153=pik_get_var(p,&yymsp[-1].minor.yy0);}
2981 #line 3006 "pikchr.c"
2982 break;
2983 case 106: /* expr ::= NUMBER */
2984 #line 754 "pikchr.y"
2985 {yylhsminor.yy153=pik_atof(&yymsp[0].minor.yy0);}
2986 #line 3011 "pikchr.c"
2987 yymsp[0].minor.yy153 = yylhsminor.yy153;
2988 break;
2989 case 107: /* expr ::= ID */
2990 #line 755 "pikchr.y"
2991 {yylhsminor.yy153=pik_get_var(p,&yymsp[0].minor.yy0);}
2992 #line 3017 "pikchr.c"
2993 yymsp[0].minor.yy153 = yylhsminor.yy153;
2994 break;
2995 case 108: /* expr ::= FUNC1 LP expr RP */
2996 #line 756 "pikchr.y"
2997 {yylhsminor.yy153 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy153,0.0);}
2998 #line 3023 "pikchr.c"
2999 yymsp[-3].minor.yy153 = yylhsminor.yy153;
3000 break;
3001 case 109: /* expr ::= FUNC2 LP expr COMMA expr RP */
3002 #line 757 "pikchr.y"
3003 {yylhsminor.yy153 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy153,yymsp[-1].minor.yy153);}
3004 #line 3029 "pikchr.c"
3005 yymsp[-5].minor.yy153 = yylhsminor.yy153;
3006 break;
3007 case 110: /* expr ::= DIST LP position COMMA position RP */
3008 #line 758 "pikchr.y"
3009 {yymsp[-5].minor.yy153 = pik_dist(&yymsp[-3].minor.yy79,&yymsp[-1].minor.yy79);}
3010 #line 3035 "pikchr.c"
3011 break;
3012 case 111: /* expr ::= place2 DOT_XY X */
3013 #line 759 "pikchr.y"
3014 {yylhsminor.yy153 = yymsp[-2].minor.yy79.x;}
3015 #line 3040 "pikchr.c"
3016 yymsp[-2].minor.yy153 = yylhsminor.yy153;
3017 break;
3018 case 112: /* expr ::= place2 DOT_XY Y */
3019 #line 760 "pikchr.y"
3020 {yylhsminor.yy153 = yymsp[-2].minor.yy79.y;}
3021 #line 3046 "pikchr.c"
3022 yymsp[-2].minor.yy153 = yylhsminor.yy153;
3023 break;
3024 case 113: /* expr ::= object DOT_L numproperty */
3025 case 114: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==114);
3026 case 115: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==115);
3027 #line 761 "pikchr.y"
3028 {yylhsminor.yy153=pik_property_of(yymsp[-2].minor.yy36,&yymsp[0].minor.yy0);}
3029 #line 3054 "pikchr.c"
3030 yymsp[-2].minor.yy153 = yylhsminor.yy153;
3031 break;
3032 default:
3033 /* (116) lvalue ::= ID */ yytestcase(yyruleno==116);
3034 /* (117) lvalue ::= FILL */ yytestcase(yyruleno==117);
@@ -3126,19 +3127,19 @@
3127 ){
3128 pik_parserARG_FETCH
3129 pik_parserCTX_FETCH
3130 #define TOKEN yyminor
3131 /************ Begin %syntax_error code ****************************************/
3132 #line 521 "pikchr.y"
3133
3134 if( TOKEN.z && TOKEN.z[0] ){
3135 pik_error(p, &TOKEN, "syntax error");
3136 }else{
3137 pik_error(p, 0, "syntax error");
3138 }
3139 UNUSED_PARAMETER(yymajor);
3140 #line 3165 "pikchr.c"
3141 /************ End %syntax_error code ******************************************/
3142 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
3143 pik_parserCTX_STORE
3144 }
3145
@@ -3367,11 +3368,11 @@
3368 #else
3369 (void)iToken;
3370 return 0;
3371 #endif
3372 }
3373 #line 766 "pikchr.y"
3374
3375
3376
3377 /* Chart of the 148 official CSS color names with their
3378 ** corresponding RGB values thru Color Module Level 4:
@@ -5391,11 +5392,11 @@
5392 }
5393 }
5394 p->aTPath[0] = pNew->ptAt;
5395 pNew->with = pNew->ptAt;
5396 pNew->outDir = pNew->inDir = p->eDir;
5397 pNew->iLayer = pik_value_int(p, "layer", 5, &miss);
5398 if( miss ) pNew->iLayer = 1000;
5399 if( pNew->iLayer<0 ) pNew->iLayer = 0;
5400 if( pSublist ){
5401 pNew->type = &sublistClass;
5402 pNew->pSublist = pSublist;
@@ -6259,10 +6260,16 @@
6260 }
6261 }
6262 if( pMiss ) *pMiss = 1;
6263 return 0.0;
6264 }
6265 static int pik_value_int(Pik *p, const char *z, int n, int *pMiss){
6266 PNum v = pik_value(p,z,n,pMiss);
6267 if( v <= -2147483648 ) return -2147483648;
6268 if( v >= 2147483647 ) return 2147483647;
6269 return (int)v;
6270 }
6271
6272 /*
6273 ** Look up a color-name. Unlike other names in this program, the
6274 ** color-names are not case sensitive. So "DarkBlue" and "darkblue"
6275 ** and "DARKBLUE" all find the same value (139).
@@ -6557,26 +6564,28 @@
6564
6565 /* Return the value of a property of an object.
6566 */
6567 static PNum pik_property_of(PObj *pObj, PToken *pProp){
6568 PNum v = 0.0;
6569 if( pObj ){
6570 switch( pProp->eType ){
6571 case T_HEIGHT: v = pObj->h; break;
6572 case T_WIDTH: v = pObj->w; break;
6573 case T_RADIUS: v = pObj->rad; break;
6574 case T_DIAMETER: v = pObj->rad*2.0; break;
6575 case T_THICKNESS: v = pObj->sw; break;
6576 case T_DASHED: v = pObj->dashed; break;
6577 case T_DOTTED: v = pObj->dotted; break;
6578 case T_FILL: v = pObj->fill; break;
6579 case T_COLOR: v = pObj->color; break;
6580 case T_X: v = pObj->ptAt.x; break;
6581 case T_Y: v = pObj->ptAt.y; break;
6582 case T_TOP: v = pObj->bbox.ne.y; break;
6583 case T_BOTTOM: v = pObj->bbox.sw.y; break;
6584 case T_LEFT: v = pObj->bbox.sw.x; break;
6585 case T_RIGHT: v = pObj->bbox.ne.x; break;
6586 }
6587 }
6588 return v;
6589 }
6590
6591 /* Compute one of the built-in functions
@@ -6842,11 +6851,11 @@
6851 int i;
6852 int iNextLayer = 0;
6853 int iThisLayer;
6854 int bMoreToDo;
6855 int miss = 0;
6856 int mDebug = pik_value_int(p, "debug", 5, 0);
6857 PNum colorLabel;
6858 do{
6859 bMoreToDo = 0;
6860 iThisLayer = iNextLayer;
6861 iNextLayer = 0x7fffffff;
@@ -6960,19 +6969,19 @@
6969 if( thickness<=0.01 ) thickness = 0.01;
6970 margin = pik_value(p,"margin",6,0);
6971 margin += thickness;
6972 wArrow = p->wArrow*thickness;
6973 miss = 0;
6974 p->fgcolor = pik_value_int(p,"fgcolor",7,&miss);
6975 if( miss ){
6976 PToken t;
6977 t.z = "fgcolor";
6978 t.n = 7;
6979 p->fgcolor = (int)pik_lookup_color(0, &t);
6980 }
6981 miss = 0;
6982 p->bgcolor = pik_value_int(p,"bgcolor",7,&miss);
6983 if( miss ){
6984 PToken t;
6985 t.z = "bgcolor";
6986 t.n = 7;
6987 p->bgcolor = (int)pik_lookup_color(0, &t);
@@ -7988,19 +7997,26 @@
7997 Tcl_ListObjAppendElement(0, pRes, Tcl_NewIntObj(w));
7998 Tcl_ListObjAppendElement(0, pRes, Tcl_NewIntObj(h));
7999 Tcl_SetObjResult(interp, pRes);
8000 return TCL_OK;
8001 }
8002
8003 #ifndef PACKAGE_NAME
8004 # define PACKAGE_NAME "pikchr"
8005 #endif
8006 #ifndef PACKAGE_VERSION
8007 # define PACKAGE_VERSION "1.0"
8008 #endif
8009
8010 /* Invoke this routine to register the "pikchr" command with the interpreter
8011 ** given in the argument */
8012 int Pikchr_Init(Tcl_Interp *interp){
8013 Tcl_CreateObjCommand(interp, "pikchr", pik_tcl_command, 0, 0);
8014 Tcl_PkgProvide(interp, PACKAGE_NAME, PACKAGE_VERSION);
8015 return TCL_OK;
8016 }
8017
8018
8019 #endif /* PIKCHR_TCL */
8020
8021
8022 #line 8047 "pikchr.c"
8023

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button