/*---------- logging etc. ----------*/
-static char *transegn2suffixstring(Train *tra, Segment *seg) {
- /* Either arg may be 0, in which case it's not included.
- * Result string will be empty, or start with ": "
- * Result string is from malloc.
- * Never fails.
- */
- const char *trapn, *segpn;
- char *s;
- int r;
-
- segpn= seg ? seg->i->pname : 0;
- trapn= tra ? tra->pname : 0;
-
- r= asprintf(&s, "%s%s%s%s%s",
- segpn||trapn ? ":" : "",
- segpn ? " @" : "",
- segpn ? segpn : "",
- trapn ? " " : "",
- trapn ? trapn : "");
- if (r<0) diee("vasprintf failed in transegn2suffixstring");
- return s;
-}
-
void safety_vpanic(Train *tra, Segment *seg,const char *fmt,va_list al) {
- char *msg, *where;
+ char *msg;
PicInsn piob;
enco_pic_off(&piob);
if (vasprintf(&msg,fmt,al) < 0)
diee("vasprintf failed in safety_vpanic fmt=\"%s\"", fmt);
- where= transegn2suffixstring(tra,seg);
- die("fatal safety problem: %s%s", msg, where);
+ die("fatal signalling problem: %s at %s: %s",
+ tra ? tra->pname : "?",
+ seg ? seg->i->pname : "?",
+ msg);
}
void safety_panic(Train *tra, Segment *seg, const char *fmt, ...) {
interferer= segment_interferes(c,t->seg);
if (interferer) {
if (interferer->owner && interferer->owner != u->train)
- return predict_problem(u, t->seg, "impeded by %s @%s",
+ return predict_problem(u, t->seg, "impeded by %s at %s",
interferer->owner->pname, interferer->i->pname);
if (interferer->pred_present)
- return predict_problem(u, t->seg, "will collide with itself @%s!",
+ return predict_problem(u, t->seg, "will collide with itself at %s!",
interferer->i->pname);
}