UED is COMMERCIAL SHAREWARE software. Please register if you intend to continue using UED.
Please follow the registration process detailed in the
REGISTER.UED
file.
SECTION 1 | LICENSE AGREEMENT |
1.1 | Distribution |
1.2 | Copying |
1.3 | Modification |
1.4 | Program Status |
1.5 | Disclaimer |
SECTION 2 | ACKNOWLEDGMENTS AND CREDITS |
2.1 | Acknowledgments and Credits |
2.2 | Trademarks |
2.3 | Registration List |
SECTION 3 | INTRODUCTION |
3.1 | Introduction |
3.2 | Requirements |
3.3 | Features |
3.4 | Distribution Notice |
3.5 | Limitations Prior to Registration |
SECTION 4 | CONFIGURATION |
4.1 | Command Line |
SECTION 5 | OPERATION |
5.1 | Introduction |
5.2 | Record Addition |
5.3 | Base Packing |
5.4 | Statistics |
5.5 | Global Delete |
5.6 | User Base Sort |
5.7 | Field Edit Keys |
5.8 | Program Hot Keys |
SECTION 6 | RECORD DESCRIPTIONS |
6.1 | Introduction |
6.2 | Display and Editing |
6.3 | Indication |
6.4 | Deletion |
SECTION 7 | MISCELLANEOUS |
7.1 | Problems and Bug Reports |
7.2 | Latest Version |
7.3 | About UED |
SECTION 8 | APPENDIX |
8.1 | Maximus User Record Structure |
8.2 | Description File Structure |
1.1 DISTRIBUTION |
YOU MAY COPY AND DISTRIBUTE VERBATIM COPIES OF UED EXECUTABLE CODE AS YOU RECEIVE IT, IN ANY MEDIUM, PROVIDED THAT YOU CONSPICUOUSLY AND APPROPRIATELY PUBLISH ON EACH COPY A VALID COPYRIGHT NOTICE; KEEP INTACT THE NOTICES ON ALL FILES THAT REFER TO THIS LICENSE AGREEMENT AND TO THE ABSENCE OF ANY WARRANTY; PROVIDE UNMODIFIED COPIES OF THE DOCUMENTATION AS PROVIDED WITH THE PROGRAM; AND GIVE ANY OTHER RECIPIENTS OF UED A COPY OF THIS LICENSE AGREEMENT ALONG WITH THE PROGRAM. YOU MAY CHARGE A DISTRIBUTION FEE FOR THE PHYSICAL ACT OF TRANSFERING A COPY, BUT NO MORE THAN IS NECESSARY TO RECOVER YOUR ACTUAL COSTS INCURRED IN THE TRANSFER. UNDER NO CIRCUMSTANCES IS UED TO BE DISTRIBUTED IN SUCH A WAY AS TO BE CONSTRUED AS "VALUE ADDED" IN A SALES TRANSACTION, SUCH AS, BUT NOT LIMITED TO, SOFTWARE BUNDLED WITH A MODEM OR OTHER HARDWARE PRODUCT. |
1.2 COPYING |
YOU MAY NOT COPY, SUBLICENSE, DISTRIBUTE OR TRANSFER UED EXCEPT AS EXPRESSLY PROVIDED UNDER THIS LICENSE AGREEMENT. ANY ATTEMPT OTHERWISE TO COPY, SUBLICENSE, DISTRIBUTE OR TRANSFER UED IS VOID AND YOUR RIGHTS TO USE THE PROGRAM UNDER THIS LICENSE AGREEMENT SHALL BE TERMINATED. |
1.3 MODIFICATION |
WITH THE EXCEPTION OF ARCHIVING METHOD, UED SHOULD NOT BE DISTRIBUTED IN ANY MODIFIED FORM. THE COMPLETE ARCHIVE SHOULD BE DISTRIBUTED CONTAINING THE ORIGINAL FILES. IT MAY BE RE-PACKAGED USING A DIFFERENT ARCHIVAL METHOD AS LONG AS THE CONTENTS OF THE ARCHIVE ARE THE SAME AS THAT OF THE DISTRIBUTION KIT. ADDITIONAL FILES MAY NOT BE ADDED TO THE ARCHIVE. |
1.4 PROGRAM STATUS |
THIS PROGRAM IS COMMERCIAL SOFTWARE, USING A SHAREWARE DISTRIBUTION METHOD. USERS ARE REQUIRED TO REGISTER THE PROGRAM AFTER A SUITABLE EVALUATION PERIOD. A REGISTRATION FORM IS SUPPLIED WITH THE PACKAGE. |
1.5 DISCLAIMER |
USE THIS PROGRAM AT YOUR OWN RISK. NO WARRANTY IS STATED OR IMPLIED. THE AUTHOR SHALL NOT BE HELD RESPONSIBLE FOR ANY DAMAGES RESULTING FROM IT'S USE DIRECTLY OR INDIRECTLY. |
2.1 We would like to thank the following individuals for their support and assistance.
Graham Stair, for porting the original UED code to the OS/2 operating system back in Dec 91. Without his efforts we'd likely not have been able to provide OS/2 support at that time. Graham also helped with improvements to the code, both at problem or bug report levels and at the feature addition level.
Special thanks go to the beta testers who provided both problem reports and feature requests. This includes the Australian beta test network, including Paul Marwick, David Nugent, Lincoln Dale, and Andrew Gulovsen; and the International Maximus Beta team, of which the Author is a member.
Thanks to Scott Dudley for his ever timely responses, the Maximus User Structures, and for his longstanding development support for the the Maximus bulletin board package.
2.2 The following companies hold the following trademarks or market the following products mentioned or referred to in this manual.
IBM Corporation, Inc. | OS/2 |
Microsoft Corporation | MS-DOS |
Microsoft Corporation | MSC |
Scott Dudley | Maximus |
Wynn Wagner | Opus |
2.3 Registration List. We'd like to thank the following people for registering UED V3.XX. Their support is valued, and largely responsible for making this release possible.
Barry Ryder, Worongary QLD |
Graeme Bell, Stratton WA |
Alberto Pasquale, Modena, Italy |
Bob Juge, Sugar Land, Texas USA |
Ian Taylor, Guildford WA |
Dallas Hinton, Vancouver, BC |
Bob Swift, Stony Plain, Alberta |
Dale Kaechler, Petawawa, Ont, Canada |
Adelaide PC Users Group, Adelaide South Australia |
Carsten Brandt, Berlin Germany |
Coracle Pty Ltd, Perth WA |
Sydney PC Users Group, IBM BBS |
Sydney PC Users Group, Mail Exchange BBS |
Hans Schuts, Culemborg |
Galaxy Gateway, Brisbane QLD |
Jim Rogerson, St Albert, Alberta |
Tom Hall, Edmonton, Alberta, Canada |
Christian Emig, 74189 Weinsberg |
Craig Clark, Devonshire, Bermuda |
Harald Kamm, Bamberg, Germany |
Kurt Vogelsaenger, Neustadt/Wstr, Germany |
Steven Evans, Auckland, NZ |
Tracy Molitor, Milford CT, USA |
Rafael Suarez Verdugo, Madrid |
UED is an external Maximus User Base Editor, allowing rapid editing, searching and sorting of your user records. Although the Maximus inbuilt User Editor is full featured, UED allows quick and simple access to the User base. It is able to fully use system resources without the code and space limitations under which a remote editor usually must operate.
The distribution archive contents ( UED300.LZH ) are listed below
UED.EXE | The program executable |
UED.DOC | Documentation in text format |
UED.HTM | Documentation in HTML (WEB) format |
UED.GIF | HTML title image |
ICONCOD.GIF | HTML Codeland icon image |
REGISTER.UED | Package Registration |
The distributed SHAREWARE release is identical in all respects to registered versions. No new version of the code, package, or executable is required. The registration process is simply a matter of adding three lines to the UED.INI file. When the product is registered, unregistered limitations are removed.
For this release, the unregistered limitations consist of 1) an unregistered warning at program startup, and 2) a limit imposed on the EDIT and BROWSE screens, where by writes/updates to the USER.BBS database are limited to five occurances per program execution. Exiting the program and re-executing it will enable another five updates to the user file. Note that there is no date expiry for release versions of UED. Previous beta versions have included a date expiry to prevent longterm usage of obsolete code, and future beta versions may also include date expiry checks.
UED V3.00 - the Maximus V3.XX Specific User Base Editor (C) Copyright 1990-97 by CodeLand, All Rights Reserved Syntax: UED [-switch -switch ... ] -C<name> Configuration file path & name -G### Start at record ### -D Force debug/maintenance mode -A Use monochrome attributes -M<path> Maximus directory override -R Edit registration details -? Program help screen
-C<path> | UED Configuration file path and name. This switch allows operating with multiple configurations. e.g. -Cued.ini |
-G### | Start operation at user record number ###. If the number specified is greater then available records, UED seeks to the last record. Thus "UED /g9999" would provide a goto last record function. |
-D | Force debug/maintenance mode. This can also be toggled on and off from within UED, at the Configuration pop-up menu. Maintenance mode supports editing of the LR pointer within each user record, and sorting by LR pointer. |
-A | Force monochrome text attributes. |
-M<path> | Full path to Maximus directory. Default is the current directory. E.g. -MC:\Max |
-R | Edit registration details. Activates a registration entry box, exits to the operating system. |
-? | Displays these command line controls. |
The use of hotkeys, full screen menus, and simple user interface means that UED puts the power to manage your user base at your finger tips. All functions are controlled directly from easily accessible menu options. UED is rich in control keys, see both the field editing, and program hot keys listed in this manual. Features to look for are the TAB descriptions toggle on the Edit screen, and the TAB and Shift TAB PAN commands on the Browse screen.
The Append New Record pop-up menu option adds a new blank user record to the user file. The new record is appended to the end of the file. UED makes the new record the current record, and adjusts the screen to display it. The string "Record created by UED" is entered in the name field to aid identification of newly added records. During the record addition process UED assigns the new record an unused message lastread pointer offset.
The Pack User File pop-up menu option rewrites the User file, deleting all records marked with the Deleted flag. It writes the new User file using the last Index method, giving you the option of sorting the on disk user base.
The pack option is generally used to remove old deleted records from the user base. Also as mentioned above, it writes using indexed order, so this option is used to sort your user base, in conjunction with the Index command.
Included on the pop-up menu are six statistics screens. UED does not scan the user base during power up so that base must be scanned to gather the needed statistics for display during the first execution of any of the statistics screens.
Most of the statistics screens are self explanatory, with the exception of the Best Ten Users screen. This is a weighted display, sorted by the index figure displayed in the right hand column. The index figure is calculated from all of user calls to the system, the total uploads, and the total downloads.
The function of this screen is to either set the delete flag depending on the set criteria, or to clear all delete flags, during scanning of the complete user base. Records are not removed. Assuming the record deleted flags are set as you would choose after a global delete run, the Pack command can then be used to remove or move deleted records from the user base. Note that all settings on the Global Delete screen are saved in the UED configuration file with the Save Settings command.
There are six setting types that control how UED decides whether a record should be deleted. These are; days since last call, total calls made, keys to block deletion, privilege level to process, a flag for not deleting records with an expiry setting, and a flag for not deleting records containing a Credit value. These six control types are detailed below.
5.5.1 Days. These setting are the heart of the Global Delete screen. A days old figure can be set for each of the twelve privilege levels. All entries default to 180 days, which is approx. six months. As an example, if you have a figure of 180 for the Normal privilege level, then all records of Normal privilege can only be marked as deleted if their last call date is earlier than 180 days from the current system date. See also the Calls entry below.
5.5.2 Calls. The Calls entries are also considered when a priviledge level is flagged for processing, such that the Days since last call entry is checked. To enable the record to be deleted, as well as passing the Days check detailed above, the record much have make less calls to the system than the entered Calls value. To avoid a lockout problem, where after enough calls have been made the record would not be deleted no matter how long since the last call, there is also an "All Levels" Days setting with no Calls entry, used as a last check for each priviledge level flagged for processing. Note that the "All Levels" setting is ONLY applied to priviledge levels flagged for processing.
5.5.3 Key Mask. This enables you to prevent deletion of records possessing one or any combination of user keys. If you don't want keys considered during the Global Delete, set all key flags to YES, meaning don't prevent deletion for any key.
5.5.4 Privilege Levels. With this option, you can mask out whole privilege levels from the Global Delete process. Any level set to NO will never be marked as deleted. Normally you'd have the higher levels e.g. Sysop, AsstSysop, and Clerk masked out on the assumption these levels should never be removed during global maintenance.
5.5.5 Expiry Mask. The expiry mask flag, when set to NO, prevents all records which have an Expiry setting other than None from being marked as deleted. Useful for systems actively using the Maximus account expiry subsystem. The assumption is that if the account already has an automatic expiry setting active, global deletion by date would not be necessary nor desirable. To ignore Expiry settings during Global Deletion runs, set this flag to YES.
5.5.6 Credit Mask. The credit mask flag, when set to NO, prevents all records which have a Credit setting other than zero from being marked as deleted. To ignore Credit settings during Global Deletion runs, set this flag to YES.
UED supports sixteen sort methods, including the default index which is user file order. Sort direction for each type can be either Normal (ascending), or Reverse (descending). Maximus requires that the Sysop user record always be first record in the user file. For this reason UED never moves or sorts the first record.
Sorting is accessed by the Index menu option off the pop-up menu. To choose a sort direction, simply hit <Enter> with the menu bar on the Normal/Reverse item. To sort the user base, choose the sort type with the menu bar, and press <Enter>.
UED references all on disk data via an in memory index. This index is set to file order at program start up. Using the indexing or sorting commands is simply sorting the in memory index. This has several implications. Firstly, using the sort commands on the Index menu does NOT affect the user file on the system disk drive. To save a sort order permanently, you should execute the Pack command, which rewrites the user file to disk using the current sort index. Secondly, depending on system response time (speed) some of the UED functions will run at reduced speed when operating with other than the File Order index. The Browse screen is one such case.
5.6.1 Multiple Keys. Multiple key sorting is supported, by executing consecutive sorts. UED does maintain existing index order during non-unique key indexing, making this possible. As an example, to sort the user base by privilege level, using last name as a secondary key (meaning each privilege level would have records in second name order), firstly sort by second name, then by privilege. The privilege sort will maintain the existing order for all privileges of the same value.
5.6.2 Sort methods
1 | File Order | Current User File order (the default) |
2 | 2nd Name | Last name |
3 | 1st Name | First name |
4 | Alias | User Alias |
5 | Location | City field |
6 | Telephone | Telephone number |
7 | Data Phone | Data phone number |
8 | Msg Area | Current Message Area |
9 | File Area | Current File Area |
10 | Access LVL | User Privilege Level |
11 | Date Lcall | Last call date |
12 | Date PWChg | Password changed date |
13 | Call Count | Calls made to the system |
14 | Kb DnLoads | Total users downloads |
15 | Kb UpLoads | Total users uploads |
16 | LR Pointer | Last read pointer. Only available in maintenance mode |
General command keys which are active during field editing and data entry are listed below. Several of these key commands are not noted clearly within the program.
ESC | Abort field editing, exit |
END | Goto end of current field |
HOME | Goto start of current field |
UP ARROW | Step up one edit field |
DOWN ARROW | Step down one edit field |
TAB | Step one field right |
Shift TAB | Step one field left |
DEL | Delete character at cursor |
BACKSPACE | Delete character left |
Ctl BACKSPACE | Delete word left |
Ctrl R | Restore field to original contents |
Ctrl T | Delete word right |
Ctrl U | Delete to end of field |
Ctrl Y | Delete to end of last field |
Ctrl-<Enter> | Save and exit field editing |
INS | Toggle insert mode |
Several command functions can be executed by hotkey, giving a quick 'shortcut' access to the function. These exist in various places including the Edit screen and the Browse screen.
5.8.1 Edit Screen
W | Edit password |
X | Edit expiry |
K | Edit keys |
G | Edit Gender |
M | Edit File/Msg Areas |
Alt-1 to Alt-X | Key toggle |
< | Privilege level downgrade |
> | Privilege level upgrade |
DEL | Toggle record deleted flag |
TAB | Description display toggle |
HOME | Goto first record |
END | Goto last record |
PAGE UP | Step back 16 records |
PAGE DOWN | Step forward 16 records |
UP ARROW | Step back one record |
DOWN ARROW | Step forward one record |
Grey + | Steps forward one record |
Grey - | Step back one record |
ESC | Pop-up menu |
5.8.2 Browse Screen
< | Privilege level downgrade |
> | Privilege level upgrade |
DEL | Toggle record deleted flag |
TAB | PAN screen right |
Shift TAB | PAN screen left |
HOME | Goto first record |
END | Goto last record |
PAGE UP | Step back 16 records |
PAGE DOWN | Step forward 16 records |
UP ARROW | Step back one record |
DOWN ARROW | Step forward one record |
Grey + | Steps forward one record |
Grey - | Step back one record |
ESC | Pop-up menu |
UED supports the Maximus v2.XX external record description system. This allows optional text comments for each user record. The design allows for up to 4095 characters, though for screen space reasons UED currently limits it's creation and editing to 165 characters, which is 3 short lines.
Descriptions are displayed and edited from the Edit screen. A Descriptions flag exists on the Setup menu to toggle display on or off, with the TAB key being a quick shortcut hotkey for the same function. The Descriptions window overlays some of the fields on the Edit screen, TAB quickly toggles between the two alternate displays. This display flag is saved in the configuration file so that UED will default to your preferred display. With the descriptions window toggled on, using the Edit command allows editing or creation of the description for the current record. When toggled off normal editing is possible.
On the Edit screen, a new field to the right of the Alias field shows blank for no description, and 'DESC' for records possessing an extended description. For the Browse screen, existence of an extended description is indicated by a small bullet character on the right hand edge of the screen. Note that these two indicators are displaying the status of the USER.BBS descriptions pointer. The descriptions text is stored in a file called USER.EXT in the Maximus directory. If this file had been deleted UED will not find the description, displaying a blank description field. To clear the descriptions pointer in this case, as with description deletion below, simply save a blank description.
External descriptions are deleted by simply saving a blank description field. Toggle the description display on (TAB), use the Edit command, <Enter> down to the descriptions window, press HOME (goto start of current field), press Ctrl-Y (erase current field), and press Ctrl-Enter (save and exit).
If you have come across any 'features' or have any suggestions on how to improve UED, you can contact us through the net or via surface mail, at the addresses listed below. All feed back good AND bad is welcomed. Much of what has changed in UED since the last release is due to feedback offered over the past years.
Post: | CodeLand Australia P.O.Box 351 Kalamunda WA 6076 AUSTRALIA |
Internet: | codeland@ami.com.au |
Fidonet: | 3:690/613.0 Perth's Library BBS Colin Wheat, SysOp. |
Internet | HTTP | http://www.ami.com.au/ http://bbs.ami.com.au/ |
FTP | ftp://bbs.ami.com.au. E.g. the ftp path for this release is: ftp://bbs.ami.com.au/pub/bbs/max/ued300.lzh | |
Telnet/VMP | bbs.ami.com.au | |
Fidonet | File Request | The magic name UED will always offer the latest beta version available, on the author's system (Fidonet 3:690/613). File requests are always welcome. As with all beta software, usage is at your own risk. The latest release archive is always available under it's own name. |
UED is written in the C language with the Microsoft MSC v6.0 compiler. Using the Family Mode API, the executable supports execution under DOS real-mode and OS/2 protected mode. OS/2 operation is recommended for reasons of general reliability and stability.
The following structure describes the format of the USER.BBS data file, in a format suitable for usage by MSC6. Consult Maximus distributions for detailed information.
#define INCL_DOS #include <os2.h> #define TRANSIENT 0 #define DEMOTED 10 #define LIMITED 20 #define NORMAL 30 #define WORTHY 40 #define PRIVIL 50 #define FAVORED 60 #define EXTRA 70 #define CLERK 80 #define ASSTSYSOP 90 #define SYSOP 100 #define HIDDEN 65535 /* Help levels */ #define EXPERT (UCHAR)0x02 /* grizzled veteran, no menus at all */ #define REGULAR (UCHAR)0x04 /* experienced user, brief menus */ #define NOVICE (UCHAR)0x06 /* Full menus plus additional hand-holding */ #define HOTFLASH (UCHAR)0x20 /* Hotkey, full-screen interface */ /* Masks for usr.bits1, below */ #define BITS_HOTKEYS 0x0001 /* Hotkeys, independent of HOTFLASH level */ #define BITS_NOTAVAIL 0x0002 /* If set, user is NOT normally available * * for chat. */ #define BITS_FSR 0x0004 /* Full-screen reading in msg areas */ #define BITS_NERD 0x0008 /* Yelling makes no noise on sysop console */ #define BITS_NOULIST 0x0010 /* Don't display name in userlist */ #define BITS_TABS 0x0020 /* Reserved */ #define BITS_ENCRYPT 0x0040 /* Password encryption flag */ #define BITS_RIP 0x0080 /* Remote Imaging Prototocol support */ /* Masks for usr.bits2, below */ #define BITS2_BADLOGON 0x0001 /* MAX: if user's last logon attempt was bad*/ #define BITS2_IBMCHARS 0x0002 /* MAX: if user can receive high-bit chars */ #define BITS2_RSVD1 0x0004 /* MAX: *obsolete* 1.02 avatar flag */ #define BITS2_BORED 0x0008 /* Use the line-oriented editor */ #define BITS2_MORE 0x0010 /* Wants the "MORE?" prompt */ #define BITS2_RSVD2 0x0020 /* OPUS: set=wants Ansi */ #define BITS2_CONFIGURED 0x0040 /* OPUS: set=used Maximus before */ #define BITS2_CLS 0x0080 /* OPUS: set=transmit ^L, clear=ignore ^L */ #define BITS2_BIT8 0x0100 /* used to be 'usr.keys' */ #define BITS2_BIT9 0x0200 /* used to be 'usr.keys' */ #define BITS2_BITA 0x0400 /* used to be 'usr.keys' */ #define BITS2_BITB 0x0800 /* used to be 'usr.keys' */ #define BITS2_BITC 0x1000 /* used to be 'usr.keys' */ #define BITS2_BITD 0x2000 /* used to be 'usr.keys' */ #define BITS2_BITE 0x4000 /* used to be 'usr.keys' */ #define BITS2_BITF 0x8000 /* used to be 'usr.keys' */ #define SEX_UNKNOWN 0x0000 #define SEX_MALE 0x0001 #define SEX_FEMALE 0x0002 /* Masks for usr.delflag, below. WARNING! Only the first eight bits * * of this flag should be used for compatibility with df_save! */ #define UFLAG_DEL 0x01 #define UFLAG_PERM 0x02 /* Masks for usr.xp_flag, below */ #define XFLAG_EXPDATE 0x0001 /* Use the xp_date to control access */ #define XFLAG_EXPMINS 0x0002 /* Use the xp_mins number to control access */ #define XFLAG_DEMOTE 0x0004 /* Demote user to priv level in usr.xp_priv */ #define XFLAG_AXE 0x0008 /* Just hang up on user */ /* Constants for usr.video, below */ #define GRAPH_TTY 0x00 /* The current user's graphics setting... */ #define GRAPH_ANSI 0x01 #define GRAPH_AVATAR 0x02 #define GRAPH_RIP 0x03 /* If protocol >= 0, then I suggest that you just print "External */ /* Protocol (n)", where 'n' is simply 'usr.def_proto+1'. */ #define PROTOCOL_none -1 /* Protocol to use for sending/receiving */ #define PROTOCOL_xmodem -2 /* files. If we're using an EXTERNAL */ #define PROTOCOL_ymodem -3 /* protocol, `protocol' will have a value */ #define PROTOCOL_xmodem1k -4 /* >= 0. */ #define PROTOCOL_sealink -5 #define PROTOCOL_zmodem -6 #define PROTOCOL_ymodemg -7 #define MAX_ALEN 64 /* MAX3: Max length of usr.msg[] and usr.files[] */ #pragma pack(1) struct _stamp { /* DOS-style datestamp */ struct { USHORT da : 5; USHORT mo : 4; USHORT yr : 7; } date; struct { USHORT ss : 5; USHORT mm : 6; USHORT hh : 5; } time; }; struct _dos_st { USHORT date; USHORT time; }; union stamp_combo { ULONG ldate; struct _stamp msg_st; struct _dos_st dos_st; }; struct _usr { UCHAR name[36]; /* Caller's name 0*/ UCHAR city[36]; /* Caller's location 36*/ UCHAR alias[21]; /* User's alias (handle) 72*/ UCHAR phone[15]; /* User's phone number 93*/ USHORT lastread_ptr; /* A num which points to offset in 108*/ /* file -- Offset of lastread pointer will be */ /* lastread_ptr*sizeof(int). */ USHORT timeremaining; /* Time left for current call (xtern pro 110*/ UCHAR pwd[16]; /* Password 112*/ USHORT times; /* Number of previous calls to this system 128*/ UCHAR help; /* Help level 130*/ USHORT group; /* MAX3: Group number (not implemented) 131*/ UCHAR video; /* user's video mode (see GRAPH_XXXX) 133*/ UCHAR nulls; /* Number of Nulls (delays) after <cr> 134*/ UCHAR bits; /* Bit flags for user (number 1) 135*/ USHORT dob_year; /* MAX3: Date of birth: year (1900-) 136*/ USHORT bits2; /* Bit flags for user (number 2) 138*/ SHORT max2priv; /* Access level 140*/ CHAR dataphone[19]; /* MAX3: Data/business phone number 142*/ UCHAR struct_len; /* len of struct, divided by 20. SEE ABOVE! 161*/ USHORT time; /* Time on-line so far today 162*/ USHORT delflag; /* Used to hold baud rate for O)utside comman164*/ /* In USER.BBS, usr.flag uses the constants */ /* UFLAG_xxx, defined earlier in this file. */ ULONG msgs_posted; /* MAX3: Total number of messages posted 166*/ ULONG msgs_read; /* MAX3: Total number of messages read 170*/ UCHAR width; /* Width of the caller's screen 174*/ UCHAR len; /* Height of the caller's screen 175*/ USHORT credit; /* Matrix credit, in cents 176*/ USHORT debit; /* Current matrix debit, in cents 178*/ USHORT xp_priv; /* Priv to demote to, when time or minutes ru180*/ /* out. */ SCOMBO xp_date; /* Bit-mapped date of when user expires 182*/ /* If zero, then no expiry date. */ ULONG xp_mins; /* How many minutes the user has left before 186* * expiring. */ UCHAR xp_flag; /* Flags for expiry. See above XFLAG_XXX def190*/ UCHAR sex; /* MAX3: Sex: SEX_MALE or SEX_FEMALE) 191*/ SCOMBO ludate; /* Bit-mapped date of user's last call 192*/ ULONG xkeys; /* User's keys (all 32 of 'em) 196*/ UCHAR lang; /* The user's current language # 200*/ CHAR def_proto; /* Default file-transfer protocol 201*/ ULONG up; /* K-bytes uploaded, all calls 202*/ ULONG down; /* K-bytes downloaded, all calls 206*/ ULONG downtoday; /* K-bytes downloaded, today 210*/ UCHAR rsvd45[18]; /* MAX3: Reserved by Maximus for future use 214*/ USHORT call; /* Number of previous calls today 232*/ UCHAR compress; /* Default compression program to use 234*/ UCHAR df_save; /* MAX3: Used for storing real usr.delflag in235* * LASTUSxx.BBS while in a door. */ ULONG extra; /* User description pointer 236*/ SCOMBO date_1stcall; /* Date of first call to system 400*/ SCOMBO date_pwd_chg; /* Date of last password change 244*/ ULONG nup; /* Number of files uploaded 248*/ ULONG ndown; /* Number of files downloaded 252*/ ULONG ndowntoday; /* Number of files downloaded today 256*/ USHORT time_added; /* Time credited to the user for today 260*/ UCHAR msg[MAX_ALEN]; /* Current message area 262*/ UCHAR files[MAX_ALEN];/* Current file area 326*/ UCHAR dob_day; /* Date of birth: day (1-31) 390*/ UCHAR dob_month; /* Date of birth: month (1-12) 391*/ ULONG point_credit; /* Total points allocated 392*/ ULONG point_debit; /* Total points used 396*/ SCOMBO date_newfile; /* Date of last new-files check 240*/ USHORT priv; /* Privilege level 404*/ UCHAR rsvd6[54]; /* Reserved for future use 406*/ }; #pragma pack()
00 'M' "M!" is the file identification 01 '!' / 02 0x0005 usr.lastread_ptr==5 <-- usr.extra points here | 04 0x0003 Length of description including the NULL Record 1 | 06 'H' \ Active | 07 'i' |- Description text \ 08 '\0' / / 09 0x0006 usr.lastread_ptr==6 <-- usr.extra points here | 11 0x8009 Length of description including the NULL Record 2 | 13 'D' \ Deleted | 14 'e' | | 15 'l' | | 16 'e' | | 17 't' |- Description text | 18 'e' | | 19 'd' | | 20 '!' | \ 21 '\0' / / 22 0x0007 usr.lastread_ptr==7 <-- usr.extra points here | 24 0x0009 Length of description including the NULL | 26 'T' \ | 27 'h' | | 28 'e' | | 29 ' ' | Record 3 | 30 'B' |- Description text Active | 31 'O' | | 32 'S' | | 33 'S' | \ 34 '\0' / 35 EOF End of file