xundump: Permit omitting non-trailing realms
This involves computing the realm ID from fields cnum, realm. Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
parent
1c2860c8f6
commit
8afb9c8cb7
7 changed files with 62 additions and 4 deletions
|
@ -60,6 +60,7 @@
|
|||
#include <time.h>
|
||||
#include "file.h"
|
||||
#include "match.h"
|
||||
#include "nat.h"
|
||||
#include "nsc.h"
|
||||
#include "optlist.h"
|
||||
#include "xdump.h"
|
||||
|
@ -130,7 +131,7 @@ ca0_is_id(int type)
|
|||
static int
|
||||
can_fill_gaps(int type)
|
||||
{
|
||||
return (ca0_is_id(type) || type == EF_SECTOR)
|
||||
return (ca0_is_id(type) || type == EF_SECTOR || type == EF_REALM)
|
||||
&& !have_hardcoded_indexes(type);
|
||||
}
|
||||
|
||||
|
@ -393,6 +394,40 @@ rowid_sect(void)
|
|||
return id;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the current row's ID.
|
||||
* Current table's type must be EF_REALM.
|
||||
* Return ID on success, -1 on failure.
|
||||
*/
|
||||
static int
|
||||
rowid_realm(void)
|
||||
{
|
||||
int fldno_cnum, fldno_realm, id;
|
||||
long realm, cnum;
|
||||
|
||||
if (CANT_HAPPEN(partno != 0 || cur_type != EF_REALM))
|
||||
return -1;
|
||||
|
||||
fldno_cnum = fld_find_long_by_name("cnum", 0);
|
||||
fldno_realm = fld_find_long_by_name("realm", 0);
|
||||
if (fldno_cnum < 0 || fldno_realm < 0)
|
||||
return cur_id + 1;
|
||||
|
||||
realm = (long)fldval[fldno_realm].val_as.dbl;
|
||||
cnum = (long)fldval[fldno_cnum].val_as.dbl;
|
||||
if (cnum < 0 || cnum >= MAXNOC)
|
||||
return gripe("Field %d must be between 0 and %d",
|
||||
fldno_cnum, MAXNOC);
|
||||
if (realm < 0 || realm >= MAXNOR)
|
||||
return gripe("Field %d must be between 0 and %d",
|
||||
fldno_realm, MAXNOR);
|
||||
id = realm + cnum * MAXNOR;
|
||||
if (id <= cur_id)
|
||||
return gripe("Fields %d,%d must be > (%d,%d)",
|
||||
fldno_cnum + 1, fldno_realm + 1,
|
||||
cur_id / MAXNOR, cur_id % MAXNOR);
|
||||
return id;
|
||||
}
|
||||
/*
|
||||
* Get the current row's object.
|
||||
* Extend the table if necessary.
|
||||
|
@ -420,6 +455,10 @@ rowobj(void)
|
|||
id = rowid_sect();
|
||||
if (id < 0)
|
||||
return NULL;
|
||||
} else if (cur_type == EF_REALM) {
|
||||
id = rowid_realm();
|
||||
if (id < 0)
|
||||
return NULL;
|
||||
} else
|
||||
id = last_id + 1;
|
||||
if (id > ef_id_limit(cur_type)) {
|
||||
|
|
|
@ -46,6 +46,9 @@ tests/empdump/xundump-errors/fld-invid2:3: Field 1 must be > -1
|
|||
tests/empdump/xundump-errors/fld-invid3:4: Field 1 must be > 2
|
||||
tests/empdump/xundump-errors/fld-invid4:3: Field 1 must be <= 98
|
||||
tests/empdump/xundump-errors/fld-invid5:4: Coordinates in fields 1,2 must be > 2,0
|
||||
tests/empdump/xundump-errors/fld-invid6:3: Field 0 must be between 0 and 99
|
||||
tests/empdump/xundump-errors/fld-invid7:3: Field 1 must be between 0 and 50
|
||||
tests/empdump/xundump-errors/fld-invid8:4: Fields 1,2 must be > (0,1)
|
||||
tests/empdump/xundump-errors/fld-junk:2: Junk in field 1
|
||||
tests/empdump/xundump-errors/fld-junk2:2: Junk in field 19
|
||||
tests/empdump/xundump-errors/fld-malnum:2: Malformed number in field 1
|
||||
|
|
|
@ -70,6 +70,9 @@
|
|||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
0
|
||||
1
|
||||
0
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
config realm
|
||||
cnum realm xl xh yl yh
|
||||
1 0 0 0 0 0
|
||||
config sect
|
||||
xloc yloc ...
|
||||
64 0
|
||||
# Value for field 1 must be 0
|
||||
|
|
4
tests/empdump/xundump-errors/fld-invid6
Normal file
4
tests/empdump/xundump-errors/fld-invid6
Normal file
|
@ -0,0 +1,4 @@
|
|||
config realm
|
||||
cnum realm ...
|
||||
100 0
|
||||
# Field 0 must be between 0 and 99
|
4
tests/empdump/xundump-errors/fld-invid7
Normal file
4
tests/empdump/xundump-errors/fld-invid7
Normal file
|
@ -0,0 +1,4 @@
|
|||
config realm
|
||||
cnum realm ...
|
||||
0 100
|
||||
# Field 1 must be between 0 and 50
|
5
tests/empdump/xundump-errors/fld-invid8
Normal file
5
tests/empdump/xundump-errors/fld-invid8
Normal file
|
@ -0,0 +1,5 @@
|
|||
config realm
|
||||
cnum realm ...
|
||||
0 1
|
||||
0 0
|
||||
# Fields 1,2 must be > (0,1)
|
Loading…
Add table
Add a link
Reference in a new issue