TrackLocation tloc, long advance,
long speed, unsigned backwards,
unsigned check_clash) {
- State *s= &safety_state;
+ S;
SegmentNum segn;
SegmentState *seg;
const SegmentInfo *segi;
}
static void lay_train_inversions(LayTrainState *l) {
- State *s= &safety_state;
+ S;
SegmentNum segn;
SegmentState *seg;
const SegmentInfo *segi;
}
static void lay_train_done(LayTrainState *l) {
- State *s= &safety_state;
+ S;
SegmentNum segn;
SegmentState *seg;
}
static ErrorCode lay_train(TrainNum tran, long added_slop) {
- State *s= &safety_state;
- TrainState *tra= &s->trains[tran];
- const TrainInfo *trai= &info_trains[tran];
+ S; TRA; TRAI;
SegmentNum segn;
SegmentState *seg;
TrackLocation tloc;
}
void safety_notify_detection(SegmentNum segn) {
- State *s= &safety_state;
- SegmentState *seg= &s->segments[segn];
+ S; SEG;
TrainNum tran= seg->owner;
- TrainState *tra= &s->trains[tran];
+ TRA;
ErrorCode ec;
TrackLocation tloc;
}
void safety_emergencystop(TrainNum tran) {
- State *s= &safety_state;
+ S; TRA;
ErrorCode ec;
- TrainState *tra= &s->trains[tran];
tra->speed= 0;
+ fixme /* this is wrong
+ we need to take into account the finite stopping time or distance
+ of the train
+ and predict and track its location while it stops
+ */;
+
actual_emergencystop(tran);
ec= lay_train(tran, ESTOP_UNCERTAINTY);
if (ec) safety_panic(tran, NOTA(Segment), "emergency stop forbidden!");
- speedmanager_speedchange_notify(tran);
+ speedmanager_emergencystop_notify(tran);
}
void safety_requestspeed(TrainNum tran, long newspeed) {
- State *s= &safety_state;
+ S; TRA;
long oldspeed;
- TrainState *tra= &s->trains[tran];
ErrorCode ec;
oldspeed= tra->speed;