State safety_actual;
-typedef struct TrackFollow TrackFollow;
-struct TrackFollow {
+typedef struct TrackLocation TrackLocation;
+struct TrackLocation {
+ SegmentIx segi; /* current segment */
+ Distance into; /* distance from start of segment */
+ unsigned backwards:1; /* if 1, into is positive and measured from end */
};
-void trackfollow_begin(TrackFollow*, SegmentIx begin, unsigned backwards,
- Distance);
-
+void trackfollow_further(TrackLocation *tloc, Distance *remain_io);
+ /* Advances tloc, decrementing *remain_io, until either
+ * *remain_io becomes zero, or tloc->segi changes. */
void safety_train_changed(TrainIx trai) {
State *s = &safety_actual;
TrainState *tra = s->tras[trai];
+ TrackLocation tloc;
+
+ tloc.segi= tra->foredetect;
+ tloc.into= tra->justarrived ? JUSTARRIVED_DIST :
+
for (segi =
s->trais[trai]