UED Version 3.00

UED

Maximus User Base Editor

Written by Colin Wheat

Created April 28, 1997


(C) Copyright 1990 - 1997 by CodeLand, All Rights Reserved

http://www.ami.com.au , http://bbs.ami.com.au
ftp://ftp.ami.com.au , Telnet/VMP://bbs.ami.com.au
codeland@ami.com.au , Fidonet: 3:690/613

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.


TABLE OF CONTENTS
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

SECTION 1 - LICENSE AGREEMENT
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.

SECTION 2 - ACKNOWLEDGMENTS AND CREDITS

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 CorporationMS-DOS
Microsoft CorporationMSC
Scott DudleyMaximus
Wynn WagnerOpus

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


SECTION 3 - INTRODUCTION
3.1 Introduction

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.

3.2 Requirements

3.3 Features

3.4 Distribution Notice

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.UEDPackage Registration

3.5 Limitations Prior to 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.


SECTION 4- CONFIGURATION
4.1 Command Line

       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.


SECTION 5 - OPERATION
5.1 Introduction

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.

5.2 Record Addition

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.

5.3 Base Packing

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.

5.4 Statistics

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.

5.5 Global Delete

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.

5.6 User Base Sort

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

5.7 Field Edit Keys

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

5.8 Program Hot Keys

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


SECTION 6 - RECORD DESCRIPTIONS
6.1 Introduction

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.

6.2 Display and Editing

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.

6.3 Indication

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.

6.4 Deletion

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).


SECTION 7 - MISCELLANEOUS
7.1 Problems and Bug Reports

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.

7.2 Latest Version

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.

7.3 About UED

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.


SECTION 8 - APPENDIX
8.1 Maximus User Record Structure

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()
8.2 Maximus Descriptions File Structure (USER.EXT)
               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

© Copyright 1997 by CodeLand All rights reserved.