table = header { record } footer ;
header = "XDUMP" space [ "meta" space ]
identifier space timestamp newline ;
- identifier = id-chr { id-chr } ;
+ identifier = id-char1 { id-char } ;
+ id-char1 = ? ASCII letter ? ;
id-char = ? ASCII characters 33..126 except '"#()<>=' ? ;
timestamp = intnum ;
footer = "/" number newline ;
- "d", field uses intnum syntax
- "g", field uses flonum syntax
- "s", field uses string syntax
- - "c", field uses string syntax
+ - "c", field uses string syntax (only until version 4.3.33)
* flags: The field's flags, a symbol set. Flags are:
- "deity", field visible only to deities
enabled. Masked values are replaced by -1.
* len: If non-zero, then the record encodes an array with that many
- elements. If field type encodes symbol "c", it is a character
- array, which is dumped as a single string field. Else, the array is
- dumped as len fields.
+ elements. The array is dumped as len fields.
+
+ Only until version 4.3.33: if field type encodes symbol "c", it is a
+ character array, and is dumped as a single string field.
* table: Key for xdump table. Unless -1, it defines the table
referenced by the field value. Field type must encode symbol "d"
data. So we start with that:
[3:640] Command : xdump meta meta
- XDUMP meta meta 1464554085
+ XDUMP meta meta 1466920477
"name" 3 0 0 -1
- "type" 8 0 0 33
- "flags" 8 8 0 32
- "len" 7 0 0 -1
- "table" 8 0 0 26
+ "type" 1 0 0 33
+ "flags" 1 8 0 32
+ "len" 1 0 0 -1
+ "table" 1 0 0 26
/5
To interpret this table, we have to know the field names and their
its meta-data:
[3:640] Command : xdump meta table
- XDUMP meta table 1464554085
- "uid" 8 0 0 26
+ XDUMP meta table 1466920477
+ "uid" 1 0 0 26
"name" 3 0 0 -1
/2
meta. Let's try to dump the table:
[5:640] Command : xdump 26 *
- XDUMP table 1464554085
+ XDUMP table 1466920477
0 "sect"
1 "ship"
[...]
[...]
26 "table"
[...]
- /47
+ /48
It worked!
table IDs as well as names, we don't have to know their names:
[5:640] Command : xdump meta 33
- xdump meta 33
- XDUMP meta meta-type 1464554085
- "value" 8 0 0 -1
+ XDUMP meta meta-type 1466920477
+ "value" 1 0 0 -1
"name" 3 0 0 -1
/2
[6:640] Command : xdump 33 *
- XDUMP meta-type 1464554085
+ XDUMP meta-type 1466920477
1 "d"
2 "g"
3 "s"
- 4 "d"
- 5 "d"
- 6 "d"
- 7 "d"
- 8 "d"
- 9 "d"
- 10 "d"
- 11 "d"
- 12 "g"
- 13 "c"
- /13
+ /3
[7:640] Command : xdump meta 32
- XDUMP meta meta-flags 1464554085
- "value" 8 0 0 -1
+ XDUMP meta meta-flags 1466920477
+ "value" 1 0 0 -1
"name" 3 0 0 -1
/2
[7:640] Command : xdump 32 *
- XDUMP meta-flags 1464554085
+ XDUMP meta-flags 1466920477
1 "deity"
8 "bits"
16 "hidden"
Here's the first one:
[7:640] Command : xdump meta 0
- XDUMP meta sect 1464554085
- "owner" 5 0 0 8
- "xloc" 9 0 0 -1
- "yloc" 10 0 0 -1
- "des" 4 0 0 18
+ XDUMP meta sect 1466920477
+ "owner" 1 0 0 8
+ "xloc" 1 0 0 -1
+ "yloc" 1 0 0 -1
+ "des" 1 0 0 18
[...]
/78
Rationale: Follow econfig syntax.
-Tables with a record uid in the leftmost field can be `split
+Tables with a record UID in the leftmost field can be `split
vertically' into multiple parts. Each part must contain the same set
of records. The leftmost field must be repeated in each part. Other
fields may be repeated. Repeated fields must be the same in all
Rationale: This is to let you avoid long lines. Line continuation
syntax would be simpler, but turns out to be illegible. Requiring
-record uid is not technically necessary, as counting records works the
+record UID is not technically necessary, as counting records works the
same whether a table is split or not. Except humans can't count.
Perhaps this should be a recommendation for use rather than part of
the language.