chiark / gitweb /
hostside: more length for bavarian
[trains.git] / hostside / topology-dump.c
1 /*
2  * topology dumper
3  */
4
5 #include "common.h"
6 #include "../layout/layout-data.h"
7
8 static const char *mfkpnames[/*MovFeatKind*/]=
9   { 0,"point","relay" };
10
11 static void plink(const SegmentLinkInfo *p) {
12   putchar(' ');
13   if (!SOMEP(p->next)) { putchar('-'); return; }
14   if (p->next_backwards) putchar('-');
15   fputs(info_segments[p->next].pname,stdout);
16 }
17
18 const char *progname= "topology-dump";
19
20 void die_hook(void) { }
21 void die_vprintf_hook(const char *fmt, va_list al) { }
22
23 int main(int argc, char **argv) {
24   const SegmentInfo *segi;
25   const MovFeatInfo *mfi;
26   const SegPosCombInfo *spci;
27   int segn, mfn, posn;
28
29   if (argc!=1) badusage("no arguments permitted");
30
31   for (segn=0, segi=info_segments; segn<info_nsegments; segn++, segi++) {
32     printf("topology segment %s %d %d %c\n", segi->pname,
33            segi->n_movfeats, segi->n_poscombs, "ni"[segi->invertible]);
34     for (mfn=0, mfi=segi->movfeats; mfn<segi->n_movfeats; mfn++, mfi++) {
35       MovFeatKind k= mfi->kind;
36       printf("topology movfeat %s %s %d %d %s\n", segi->pname, mfi->pname,
37              mfi->posns, mfi->weight, mfkpnames[k]);
38     }
39     for (mfn=0; mfn<segi->n_fixedmovfeats; mfn++, mfi++) {
40       printf("topology movfeatfixed %s %s %d\n", segi->pname, mfi->pname,
41              mfi->posns);
42     }
43     for (posn=0, spci=segi->poscombs; posn<segi->n_poscombs; posn++, spci++) {
44       printf("topology movposcomb %s %s %d %d", segi->pname,
45              segi->n_poscombs>1 ? spci->pname : "-",
46              posn, spci->dist);
47       plink(&spci->link[1]);
48       plink(&spci->link[0]);
49       putchar('\n');
50     }
51   }
52   mflushstdout();
53   return 0;
54 }