chiark / gitweb /
preserve inversions
authorian <ian>
Sun, 4 May 2008 21:27:23 +0000 (21:27 +0000)
committerian <ian>
Sun, 4 May 2008 21:27:23 +0000 (21:27 +0000)
hostside/persist.c
hostside/record-i.h
hostside/record-l.l
hostside/record-y.y
hostside/record.c

index b588f501fe434dce125f198516cd84424849a9cd..b1cf71c707d7083717b6717af3d62e00c18c549a 100644 (file)
@@ -387,9 +387,10 @@ void persist_entrails_run_converter(void) {
     if (seg->i != segi || !segi->pname ||
        !seg->owner || !seg->owner->pname)
       continue;
-    printf("seg %s has %s%s\n", segi->pname,
+    printf("seg %s has %s%s%s\n", segi->pname,
           (seg->tr_backwards ^ seg->owner->backwards) ? "-" : "",
-          seg->owner->pname);
+          seg->owner->pname,
+          seg->seg_inverted ? " inverted" : "");
 
     if (segi->n_poscombs>1 &&
        (report= movpos_poscomb_actual(seg)) >=0 &&
index 81b04f9507fcb6b7870c2395aec6ede518e30319..3db3d911b50f33111b91a40f906e8377c6e765f3 100644 (file)
@@ -12,7 +12,7 @@ void record_train_home(Train *tra, int backw, Segment *seg);
 void record_train_step_speed(Train *tra, int step, double speed);
 void record_train_stopregime_count(void);
 void record_train_stopregime(Train *tra, int step, int xs, int ts);
-void record_seg_has(Segment *seg, int backw, Train *tra);
+void record_seg_has(Segment *seg, int backw, Train *tra, int inverted);
 void record_seg_at(Segment *seg, const char *movposcomb_pname);
 void record_feature_nmrafeat(FeaturesFeature*, FeaturesAddr*, int num);
 void record_feature_motor(FeaturesFeature*, FeaturesAddr*, int speed);
index a74fef824b3152cc89dfcb5ca5703f7c0c20dba8..330c70c97f4491dc1e764af971b6b5eeb68121fe 100644 (file)
@@ -23,6 +23,7 @@ feature               { STR FEATURE; }
 is             { STR IS; }
 at             { STR AT; }
 has            { STR HAS; }
+inverted       { STR INVERTED; }
 step           { STR STEP; }
 stops          { STR STOPS; }
 home           { STR HOME; }
index 0a0211ffb38888c83d5be24865d25f1a971e62cd..8ddbe8ba73d658a5ea3d3b0c74ac4bb849c0a89f 100644 (file)
@@ -17,7 +17,7 @@ static Train *cur_train;
   double dbl;
 }
 
-%token <name>  TRAIN FEATURE SEG  IS AT HAS STEP STOPS HOME END
+%token <name>  TRAIN FEATURE SEG  IS AT HAS INVERTED STEP STOPS HOME  END
 %token <name>  IDENT FEATLETTER
 %token <name>  NL
 %token <num>   NUM
@@ -26,7 +26,7 @@ static Train *cur_train;
 %type <name>           ident
 %type <train>          train
 %type <seg>            seg
-%type <num>            backwards
+%type <num>            backwards inverted
 %type <dbl>            dbl
 %type <feature>                feature
 %type <feataddr>       feataddr
@@ -54,8 +54,8 @@ line:         /* empty */
        {         if (!trains) record_train_stopregime_count();
                  else if ($2) record_train_stopregime($2,$4,$6,$7);
        }
-       |       SEG seg HAS backwards train
-       {         if ($2 && $5) record_seg_has($2,$4,$5);
+       |       SEG seg HAS backwards train inverted
+       {         if ($2 && $5) record_seg_has($2,$4,$5,$6);
        }
        |       SEG seg AT ident
        {         if ($2) record_seg_at($2,$4);
@@ -70,11 +70,17 @@ line:               /* empty */
 backwards:     /* empty */ { $$= 0; }
        |       '-' { $$= 1; }
 
+inverted:      /* empty */ { $$= 0; }
+       |       INVERTED { $$= 1; }
+
 segments:      { cur_train= (void*)-1; }
        |       backwards seg { record_train_home(cur_train,$1,$2); } segments
 
-ident:         TRAIN | SEG | IS | AT | HAS | STEP | STOPS | HOME | END
+ident:         TRAIN | SEG
+       |       IS | AT | HAS | INVERTED | STEP | STOPS | HOME
+       |       END
        |       IDENT | FEATLETTER
+
 dbl:           DBL
        |       NUM { $$= $1 }
 
index df7a6689652dec1f9a620d0228f99a3da8cef60b..c42b78d2d86db4725b19acb2e4882d79b0954169 100644 (file)
@@ -8,7 +8,7 @@
  *  train <trainpn> home [-]<segpn> [-]<segpn> [-]<segpn>
  *  train <trainpn> step <step>=<speed>
  *  train <trainpn> stops <step> at <distance> after <milliseconds>
- *  seg <segpn> has [-]<ownerpn>
+ *  seg <segpn> has [-]<ownerpn> [inverted]
  *  seg <segpn> at <movposcomb>
  *  feature <trainorfeatpn> <letter> is <addr> <nmranum>
  *  feature <trainorfeatpn> <letter> is <addr> step [-]<nmranum>
@@ -205,9 +205,10 @@ void record_train_step_speed(Train *tra, int step, double speed) {
   tra->speedcurve[step]= speed;
 }
   
-void record_seg_has(Segment *seg, int backw, Train *tra) {
+void record_seg_has(Segment *seg, int backw, Train *tra, int inverted) {
   seg->owner= tra;
   seg->tr_backwards= backw;
+  seg->seg_inverted= inverted;
 }
 
 void record_seg_at(Segment *seg, const char *movposcombpname) {