user name (translated to lower case for indexing purposes). The records in
this file look something like this:
+```
struct ctdluser { // User record
int version; // Citadel version. which created this record
uid_t uid; // Associate with a unix account?
int USuserpurge; // Purge time (in days) for user
char fullname[64]; // Name for Citadel messages & mail
};
+```
Most fields here should be fairly self-explanatory. The ones that might
deserve some attention are:
system, public or private or mailbox. It's indexed by room name (also in
lower case for easy indexing) and it contains records which look like this:
+```
struct ctdlroom {
char QRname[ROOMNAMELEN]; /* Name of room */
char QRpasswd[10]; /* Only valid if it's a private rm */
unsigned QRflags2; /* Additional flags */
int QRdefaultview; /* How to display the contents */
};
+```
Again, mostly self-explanatory. Here are the interesting ones:
Here's what the records look like:
+```
struct visit {
long v_roomnum;
long v_roomgen;
#define V_FORGET 1 /* User has zapped this room */
#define V_LOCKOUT 2 /* User is locked out of this room */
#define V_ACCESS 4 /* Access is granted to this room */
+```
This table is indexed by a concatenation of the first three fields. Whenever
we want to learn the relationship between a user and a room, we feed that
Let `<FF>` be a `0xFF` byte, and `<0>` be a null `(0x00)` byte. Then a message
which prints as...
+```
Apr 12, 1988 23:16 From Test User In Network Test> @lifesys (Life Central)
Have a nice day!
+```
might be stored as...
+```
<FF><40><0>I12345<0>Pneighbor!lifesys!test_user<0>T576918988<0> (continued)
-----------|Mesg ID#|--Message Path---------------|--Date------
AThe Test User<0>ONetwork Test<0>Nlifesys<0>HLife Central<0>MHave a nice day!<0>
|-----Author-----|-Room name-----|-nodename-|Human Name-|--Message text-----
+```
Weird things can happen if fields are missing, especially if you use the
networker. But basically, the date, author, room, and nodename may be in any