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 &&
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);
is { STR IS; }
at { STR AT; }
has { STR HAS; }
+inverted { STR INVERTED; }
step { STR STEP; }
stops { STR STOPS; }
home { STR HOME; }
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
%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
{ 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);
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 }
* 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>
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) {