home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / murexx05.zip / MAXUSER.DOC < prev    next >
Text File  |  1995-03-05  |  30KB  |  853 lines

  1.  
  2.                           MaxUserREXX Version 1.05
  3.  
  4.             Maximus v2.xx USER.BBS Manipulator DLL for OS/2 REXX
  5.            Copyright 1995, by Craig Morrison, All Rights Reserved.
  6.  
  7.  
  8.  What is it?
  9.  -----------
  10.  
  11.   MaxUserREXX is a REXX callable dynamic link library for OS/2's REXX
  12.  Procedures Language/2. With MaxUserREXX and REXX you can write REXX command
  13.  scripts that will allow you to manipulate your Maximus v2.xx USER.BBS and
  14.  LASTUSER.BBS files. It will also allow you to query and change system
  15.  information that relates to the user in the files IPCxx.BBS, BBSTATxx.BBS and
  16.  MTAG.BBS. This allows you as a REXX programmer almost complete control over
  17.  your user information from the command line.
  18.  
  19.  
  20.  How Much is it?
  21.  ---------------
  22.  
  23.   For non-commercial/private use, MaxUserREXX is _absolutely_ free.
  24.  
  25.   For commercial use of MaxUserREXX the pricing schedule is as follows:
  26.  
  27.                      ┌────────────────────────┐
  28.                      │ Copies          Cost   │
  29.                      ├───────────┬────────────┤
  30.                      │ 1-5       │     $10.00 │
  31.                      │ 6-10      │     $ 8.00 │
  32.                      │ 11-20     │     $ 7.00 │
  33.                      │ 21-40     │     $ 6.00 │
  34.                      │ 41+       │     $ 4.00 │
  35.                      └───────────┴────────────┘
  36.  
  37.   For developers wishing to distribute MaxUserREXX with their applications
  38.  there is a one-time license fee of $48.00. Further royalties are not required,
  39.  unless the product for distribution is of a developer's kit in nature.
  40.  
  41.   For commercial volume purchases of 6 or more copies or for developers
  42.  purchasing a distribution license the Borland C source code to MaxUserREXX is
  43.  provided.
  44.  
  45.   For the author's contact information and purchase form please see the end of
  46.  this document.
  47.  
  48.  
  49.  Foreword
  50.  --------
  51.  
  52.   This version of MaxUserREXX consists of a complete rewrite of the library.
  53.  Due to an unforseen accident, I lost the source code to version 1.02. All the
  54.  functions work _exactly_ the same as the previous versions, with certain
  55.  exceptions, which are noted below:
  56.  
  57.     CopyQWKTags() has been eliminated, it didn't work correctly.
  58.  
  59.     The message writing functions have been removed. The interaction between
  60.     MAXUSER.DLL and MSGAPI32.DLL was causing failures when trying to load and
  61.     use MaxUserREXX on some machines. If I had more time I'd look into it
  62.     further, but at the moment I am too busy.
  63.  
  64.     **** Fixed bug in CommitUser() that trashed the first user record. ****
  65.  
  66.  
  67.  Installing MaxUserREXX
  68.  ----------------------
  69.  
  70.   Simply copy the file MAXUSER.DLL to a directory on your LIBPATH, or into the
  71.  directory you will be running your REXX command scripts from.
  72.  
  73.   THAT'S IT!
  74.  
  75.  
  76.  Using MaxUserREXX
  77.  -----------------
  78.  
  79.   It would be to your benefit to use a BACKUP copy of your USER.BBS while you
  80.  are getting comfortable with MaxUserREXX. MaxUserREXX will NOT do anything you
  81.  don't tell it to do. As long as you don't call CommitUser() your USER.BBS is
  82.  safe.
  83.  
  84.   First you need to know how to write a REXX script. Writing a REXX script is
  85.  well beyond the scope of this document, please refer to the OS/2 REXX
  86.  Procedures Language/2 Online Reference provided with OS/2 for more
  87.  information.
  88.  
  89.   It would also be to your benefit to have the record layout for the
  90.  USER.BBS file handy. While MaxUserREXX makes it so that you don't need
  91.  to know the exact layout of the file, the user structure definition
  92.  does contain some useful information that deals with the real purpose
  93.  of each field.
  94.  
  95.   MaxUserREXX provides 60+ functions that allow you to manipulate every aspect
  96.  of a user record in either a USER.BBS or LASTUSER.BBS file. You will need to
  97.  be familiar with the REXX functions RXFUNCADD and RXFUNCDROP to load and drop
  98.  functions. However, two of the functions provided by MaxUserREXX allow you to
  99.  easily load and drop all the functions available.
  100.  
  101.   The functions are basically divided into two groups, QueryUser... and
  102.  SetUser..., the QueryUser functions return information about a particular
  103.  record and the SetUser functions modify the user information of a record.
  104.  
  105.   A complete list follows with the function being listed first then an
  106.  explanation of what it does and what arguments are needed. All the functions
  107.  will return ERROR if something goes wrong, except where specified.
  108.  
  109.   All index numbers into the user files are _ZERO_ (0) _NOT_ one (1) based.
  110.  
  111.   You can only have ONE user file open at a time per REXX script.
  112.  
  113.     UserLoadFuncs()
  114.  
  115.         Loads all the MaxUserREXX functions in one fell swoop. Sample
  116.         usage:
  117.  
  118.             Call RxFuncAdd 'UserLoadFuncs', 'MaxUser', 'UserLoadFuncs'
  119.             Call UserLoadFuncs
  120.  
  121.         If you are going to be using only a small portion of the
  122.         functions available, you may wish to just load those functions
  123.         using RxFuncAdd.
  124.  
  125.     UserDropFuncs()
  126.  
  127.         Drops all loaded functions. MAKE SURE IF YOU HAVE CALLED
  128.         OpenUserFile() THAT YOU CALL CloseUserFile() BEFORE CALLING THIS
  129.         FUNCTION.
  130.  
  131.     OpenUserFile(UserFileName)
  132.  
  133.         Allocates in memory structures needed to manipulate
  134.         UserFileName. UserFileName can be either a USER.BBS or
  135.         LASTUSER.BBS file. Returns the number of users in the file on
  136.         success.
  137.  
  138.     CommitUser(UserIndex)
  139.  
  140.         Commits all modifications made to the user record at UserIndex
  141.         by writing the changes to disk.
  142.  
  143.     CloseUserFile()
  144.  
  145.         Closes out and releases all in-memory structures for the last
  146.         Open'ed user file. MAKE SURE YOU CALL THIS FUNCTION _BEFORE_
  147.         CALLING UserDropFuncs()!
  148.  
  149.     CopyUserToFile(UserIndex, TargetFile)
  150.  
  151.         Appends the user record at UserIndex to TargetFile, creating
  152.         TargetFile if necessary.
  153.  
  154.         This function can be used to perform a `pack' of the main user
  155.         file by looping through the user records, calling
  156.         QueryUserFlags() for each record. If the DEL flag is not set
  157.         then call this function to write the record to a new user file.
  158.  
  159.         Something similar to:
  160.  
  161.             usercount = OpenUserFile('USER.BBS')
  162.             do userindex = 0  to usercount-1
  163.                 if Pos('DEL', QueryUserFlags(userindex))=0 then
  164.                     call CopyUserToFile userindex, 'NEWUSER.BBS'
  165.                 else
  166.                     Say 'User 'QueryUserName(userindex)' purged..'
  167.             end
  168.             Call CloseUserFile
  169.  
  170.         You can also add a user to the user file with this function.
  171.         EXERCISE CAUTION WHEN ADDING A USER WITH THIS FUNCTION! What
  172.         you will need to do is something like:
  173.  
  174.             usercount = OpenUserFile('TEMPLATE.BBS')
  175.             if usercount<>'ERROR' then do
  176.                 call CopyUserToFile '0', 'USER.BBS'
  177.                 call CloseUserFile
  178.             end
  179.  
  180.         TEMPLATE.BBS would be a file that could hold one or more user
  181.         templates. Make sure to test for the presence of ACTIVExx.BBS
  182.         files, so you don't stomp on Maximus' efforts to work with the
  183.         user file.
  184.  
  185.     SwapUsers(UserIndex1, UserIndex2)
  186.  
  187.         Swaps the user records at UserIndex1 and UserIndex2. Make sure
  188.         you CommitUser() BOTH records after calling this function.
  189.  
  190.     FindUser(StartIndex, UserName)
  191.  
  192.         Returns the zero based index of UserName starting from
  193.         StartIndex. Returns StartIndex if UserName is not found. Both
  194.         the Name and Alias fields of the user records are compared to
  195.         UserName to find a match. NOTE: This is a brute force search.
  196.  
  197.     QueryUserName(UserIndex)
  198.  
  199.         Returns the Name of the user at UserIndex or an empty string if
  200.         UserIndex is out of range.
  201.  
  202.     QueryUserAlias(UserIndex)
  203.  
  204.         Returns the Alias of the user at UserIndex or an empty string if
  205.         UserIndex is out of range.
  206.  
  207.     QueryUserLocation(UserIndex)
  208.  
  209.         Returns the City/St/Province of the user at UserIndex or an
  210.         empty string if UserIndex is out of range.
  211.  
  212.     QueryUserPhone(UserIndex)
  213.  
  214.         Returns the Phone Number of the user at UserIndex or an empty
  215.         string if UserIndex is out of range.
  216.  
  217.     QueryUserLastReadOffset(UserIndex)
  218.  
  219.         Returns the Last Read Offset of the user at UserIndex or an empty
  220.         string if UserIndex is out of range. NOTE: This is an offset
  221.         into the LASTREAD.BBS files for *.MSG areas or the offset into
  222.         the *.SQL files for Squish areas. If you don't understand this
  223.         part of the user record it is best for you to leave it alone.
  224.  
  225.     QueryUserTimeRemaining(UserIndex)
  226.  
  227.         Returns the time remaining for the current call. This is useless
  228.         unless you are working with a LASTUSER.BBS file.
  229.  
  230.     QueryUserPassword(UserIndex)
  231.  
  232.         Returns the Password of the user at UserIndex or an empty string
  233.         if UserIndex is out of range.
  234.  
  235.     QueryUserSystemCalls(UserIndex)
  236.  
  237.         Returns the number of System calls of the user at UserIndex or
  238.         an empty string if UserIndex is out of range.
  239.  
  240.     QueryUserHelpLevel(UserIndex)
  241.  
  242.         Returns one of the four Help Levels; NOVICE, REGULAR, EXPERT or
  243.         HOTFLASH or an empty string if UserIndex is out of range.
  244.  
  245.     QueryUserVideoMode(UserIndex)
  246.  
  247.         Returns one of the three Video Modes; TTY, ANSI or AVATAR or an
  248.         empty string if the UserIndex is out of range.
  249.  
  250.     QueryUserNulls(UserIndex)
  251.  
  252.         Returns the number of Nulls to be transmitted for this user or
  253.         an empty string if UserIndex is out of range.
  254.  
  255.     QueryUserBits(UserIndex)
  256.  
  257.         Returns a string containing the Bits Flag settings or an empty
  258.         string if UserIndex is out of range. The returned string may
  259.         contain one or more of the following separated by commas:
  260.  
  261.             HOTKEYS     If present the user wants to use hotkeys.
  262.  
  263.             NOCHAT      If present the user is NOT available for chat.
  264.  
  265.             FSR         If present the Full Screen Reader will be used
  266.                         when the user is browsing messages.
  267.  
  268.             NERD        If present the sysop bell will not ring when a
  269.                         the user yells.
  270.  
  271.             NOULIST     If present the user will NOT appear in the
  272.                         userlist displayed by Maximus.
  273.  
  274.             TABS        If present Maximus will send tabs rather than
  275.                         expand tabs into spaces before transmission.
  276.  
  277.     QueryUserBits2(UserIndex)
  278.  
  279.         Returns a string containing the Bits2 Flag settings or an empty
  280.         string if UserIndex is out of range. The returned string may
  281.         contain one or more of the following separated by commas:
  282.  
  283.             HACKED      If present the user's last logon attempt was
  284.                         bad.
  285.  
  286.             IBMCHARS    If present the user wants IBM Characters.
  287.  
  288.             BOREDUSER   If present the user gets to edit messages with
  289.                         the BorED line editor.
  290.  
  291.             MORE        If present the user wants the "More?" prompt.
  292.  
  293.             USEDMAX     If present it means that the user account has
  294.                         been configured.
  295.  
  296.             CLS         If present, the appropriate screen clearing code
  297.                         will be sent when Maximus needs to clear the
  298.                         screen.
  299.  
  300.     QueryUserPriviledge(UserIndex)
  301.  
  302.         Returns a string containing the name of the priviledge level of
  303.         the user at UserIndex or an empty string if UserIndex is out of
  304.         range.
  305.  
  306.     QueryUserTimeToday(UserIndex)
  307.  
  308.         Returns the total amount of time the user at UserIndex has been
  309.         online for the day or an empty string if UserIndex is out of
  310.         range.
  311.  
  312.     QueryUserFlags(UserIndex)
  313.  
  314.         Returns the status of the two User Flags for the user at
  315.         UserIndex; DEL or PERM or an empty string if UserIndex is out of
  316.         range.
  317.  
  318.     QueryUserScreen(UserIndex)
  319.  
  320.         Returns the Width and Length of the user at UserIndex or an
  321.         empty string if UserIndex is out of range. The string returned
  322.         will be the Width followed by the length, separated by a comma:
  323.  
  324.         E.G:    80,25
  325.  
  326.     QueryUserCredit(UserIndex)
  327.  
  328.         Returns the Netmail Credits of the user at UserIndex or an
  329.         empty string if UserIndex is out of range.
  330.  
  331.     QueryUserDebit(UserIndex)
  332.  
  333.         Returns the Netmail Debits of the user at UserIndex or an empty
  334.         string if UserIndex is out of range.
  335.  
  336.     QueryUserExpiryInfo(UserIndex)
  337.  
  338.         Returns a string containing the Expiry Information for the user
  339.         at UserIndex or an empty string if UserIndex is out of range.
  340.         The string returned will vary depending the Expiry options set
  341.         for the user. Examples of the most common returns are:
  342.  
  343.             DAYS,<days_left_to_expiry>,NONE
  344.             DAYS,<days_left_to_expiry>,AXE
  345.             DAYS,<days_left_to_expiry>,DEMOTE,<priv_level>
  346.             MINUTES,<mins_left_to_expiry>,NONE
  347.             MINUTES,<mins_left_to_expiry>,AXE
  348.             MINUTES,<mins_left_to_expiry>,DEMOTE,<priv_level>
  349.             NONE,NONE
  350.  
  351.         This string should ALWAYS be parsed from left to right.
  352.  
  353.     QueryUserLastCallDate(UserIndex)
  354.  
  355.         Returns the Last Call Date and Time for the user at UserIndex or
  356.         an empty string if UserIndex is out of range. The string will be
  357.         formatted as "MM-DD-YYYY HH:MM:SS".
  358.  
  359.         E.G:    10-25-1994 12:13:30
  360.  
  361.     QueryUserKeys(UserIndex)
  362.  
  363.         Returns a string containing the keys of the user at UserIndex or
  364.         an empty string if UserIndex is out of range. If the user were
  365.         to have all keys set, the following string would be returned:
  366.  
  367.             12345678ABCDEFGHIJKLMNOPQRSTUVWX
  368.  
  369.     QueryUserLanguage(UserIndex)
  370.  
  371.         Returns the _index_ of the Language for the user at UserIndex or
  372.         an empty string if UserIndex is out of range.
  373.  
  374.     QueryUserProtocol(UserIndex)
  375.  
  376.         Returns the _index_ of the Default Protocol for the user at
  377.         UserIndex or an empty string if UserIndex is out of range.
  378.  
  379.     QueryUserUploads(UserIndex)
  380.  
  381.         Returns the number of k-bytes Uploaded by the user at UserIndex
  382.         or an empty string if UserIndex is out of range.
  383.  
  384.     QueryUserDownloads(UserIndex)
  385.  
  386.         Returns the number of k-bytes Downloaded by the user at
  387.         UserIndex or an empty string if UserIndex is out of range.
  388.  
  389.     QueryUserDownloadsToday(UserIndex)
  390.  
  391.         Returns the number of k-bytes Downloaded on the current day by
  392.         the user at UserIndex or an empty string if UserIndex is out of
  393.         range.
  394.  
  395.     QueryUserLastMessageArea(UserIndex)
  396.  
  397.         Returns the name of the Last Message area for the user at
  398.         UserIndex or an empty string if the UserIndex is out of range.
  399.  
  400.     QueryUserLastFileArea(UserIndex)
  401.  
  402.         Returns the name of the Last File area for the user at
  403.         UserIndex or an empty string if the UserIndex is out of range.
  404.  
  405.     QueryUserCompressor(UserIndex)
  406.  
  407.         Returns the _index_ of the Compressor for the user at UserIndex
  408.         or an empty string if UserIndex is out of range.
  409.  
  410.     QueryUserExtra(UserIndex)
  411.  
  412.         Returns the contents of the extra field for the user at
  413.         UserIndex or an empty string if UserIndex is out of range.
  414.  
  415.     SetUserName(UserIndex, Name)
  416.  
  417.         Sets the name field of the user record at UserIndex to Name.
  418.  
  419.     SetUserAlias(UserIndex, Alias)
  420.  
  421.         Sets the alias field of the user record at UserIndex to Alias.
  422.  
  423.     SetUserLocation(UserIndex, Location)
  424.  
  425.         Sets the city field of the user record at UserIndex to Location.
  426.  
  427.     SetUserPhone(UserIndex, PhoneNumber)
  428.  
  429.         Sets the phone field of the user record at UserIndex to
  430.         PhoneNumber.
  431.  
  432.     SetUserLastReadOffset(UserIndex, Offset)
  433.  
  434.         Sets the last read offset for the user record at UserIndex to
  435.         Offset. As mentioned earlier, if you don't know what this field
  436.         is used for leave it alone or you will trash the last read
  437.         pointers for the user.
  438.  
  439.     SetUserTimeRemaining(UserIndex, TimeLeft)
  440.  
  441.         Sets the time remaining field for the user at UserIndex to
  442.         TimeLeft. This field is only useful when changing time
  443.         allotments for a LASTUSER.BBS file.
  444.  
  445.         A possible use for modifying this field would be for a time bank
  446.         or other similar application for a user who is online.
  447.  
  448.     SetUserPassword(UserIndex, Password)
  449.  
  450.         Sets the password field for the user at UserIndex to Password.
  451.  
  452.     SetUserSystemCalls(UserIndex, NumberOfCalls)
  453.  
  454.         Sets the system calls field of the user at UserIndex to
  455.         NumberOfCalls.
  456.  
  457.     SetUserHelpLevel(UserIndex, HelpLevel)
  458.  
  459.         Sets the help level field of the user at UserIndex to HelpLevel.
  460.         HelpLevel should contain _one_ of the following strings in all
  461.         uppercase letters:
  462.  
  463.             NOVICE
  464.             REGULAR
  465.             EXPERT
  466.             HOTFLASH
  467.  
  468.     SetUserVideoMode(UserIndex, VMode)
  469.  
  470.         Sets the video mode field for the user at UserIndex to VMode.
  471.         VMode should contain one of the following strings in all
  472.         uppercase letters:
  473.  
  474.             TTY
  475.             ANSI
  476.             AVATAR
  477.  
  478.     SetUserNulls(UserIndex, NumberOfNulls)
  479.  
  480.         Sets the nulls field of the user at UserIndex to NumberOfNulls.
  481.  
  482.     SetUserBits(UserIndex, BitsFlags)
  483.  
  484.         Sets the bits field of the user at UserIndex to BitsFlags.
  485.         BitsFlags is a string containing one or more of the following
  486.         strings in all uppercase letters separated by commas:
  487.  
  488.             HOTKEYS
  489.             NOCHAT
  490.             FSR
  491.             NERD
  492.             NOULIST
  493.             TABS
  494.  
  495.         You must specify ALL the flags you want set for the user, if a
  496.         flag is not present in the string it is NOT set.
  497.  
  498.     SetUserBits2(UserIndex, Bits2Flags)
  499.  
  500.         Sets the bits2 field of the user at UserIndex to BitsFlags.
  501.         BitsFlags is a string containing one or more of the following
  502.         strings in all uppercase letters separated by commas:
  503.  
  504.             HACKED
  505.             IBMCHARS
  506.             BORED
  507.             MORE
  508.             USEDMAX
  509.             CLS
  510.  
  511.         You must specify ALL the flags you want set for the user, if a
  512.         flag is not present in the string it is NOT set.
  513.  
  514.     SetUserPriviledge(UserIndex, PrivLevel)
  515.  
  516.         Sets the priviledge level field of the user at UserIndex to
  517.         PrivLevel. The priviledege level should be ONE of the following
  518.         strings:
  519.  
  520.             TWIT
  521.             DISGRACE
  522.             LIMITED
  523.             NORMAL
  524.             WORTHY
  525.             PRIVIL
  526.             FAVORED
  527.             EXTRA
  528.             CLERK
  529.             ASSTSYSOP
  530.             SYSOP
  531.             HIDDEN
  532.  
  533.     SetUserTimeToday(UserIndex, Minutes)
  534.  
  535.         Sets the time online today field of the user at UserIndex to
  536.         Minutes.
  537.  
  538.     SetUserFlags(UserIndex, Flags)
  539.  
  540.         Sets the user flags field of the user at UserIndex to Flags.
  541.         Flags should be a string containing one or more of the following
  542.         strings separated by commas:
  543.  
  544.             DEL
  545.             PERM
  546.  
  547.         You must specify ALL the flags you want set for the user, if a
  548.         flag is not present in the string it is NOT set.
  549.  
  550.     SetUserScreen(UserIndex, Width, Length)
  551.  
  552.         Sets the screen width and length fields of the user at UserIndex
  553.         to Width and Length.
  554.  
  555.     SetUserCredit(UserIndex, Credits)
  556.  
  557.         Sets the netmail credits of the user at UserIndex to Credits.
  558.  
  559.     SetUserDebit(UserIndex, Debits)
  560.  
  561.         Sets the netmail debits of the user at UserIndex to Debits.
  562.  
  563.     SetUserExpiryInfo(UserIndex, XType, DaysMins, XAction, XPriv)
  564.  
  565.         Sets the expiry information fields of the user at UserIndex
  566.         based on XType, DaysMins, XAction and XPriv. All arguments must
  567.         be present even if they are not needed for the type of expiry
  568.         you want to set with this function.
  569.  
  570.         XType can be ONE of the following:
  571.  
  572.             DAYS
  573.             MINUTES
  574.             NONE
  575.  
  576.         DaysMins depends on XType. See the table below:
  577.  
  578.             XType               DaysMins Setting
  579.             ------------------  ------------------------------
  580.             DAYS                Days to expiry.
  581.             MINUTES             Minutes to expiry.
  582.             NONE                Ignored but MUST be present.
  583.  
  584.         XAction can be ONE of the following:
  585.  
  586.             AXE
  587.             DEMOTE
  588.             NONE
  589.  
  590.         XPriv should be set to a valid priviledge level if XAction is
  591.         set to DEMOTE, for AXE and NONE it doesn't have to contain
  592.         anything useful but it must STILL be present. See:
  593.         SetUserPriviledge() for the valid priviledge level names.
  594.  
  595.     SetUserLastCallDate(UserIndex, Month, Day, Year, Hours, Minutes,
  596.                         Seconds)
  597.  
  598.         Sets the last call date field of the user at UserIndex based on
  599.         the Month, Day, Year, Hours, Minutes and Seconds specified. All
  600.         arguments MUST be present. Year should be a four digit year.
  601.         Hours should be specified in 24 hour format.
  602.  
  603.         NOTE: It is your responsibility to do the range checking on the
  604.         arguments passed to this function. MaxUserREXX does NOT check
  605.         the arguments for valid dates or times.
  606.  
  607.     SetUserKeys(UserIndex, Keys)
  608.  
  609.         Sets the keys field of the user at UserIndex to Keys. Keys
  610.         should be a string containing the letter(s) of the key(s) you
  611.         want set for the user. Each key you want set in the user record
  612.         must be present in the string.
  613.  
  614.     SetUserLanguage(UserIndex, LanguageIndex)
  615.  
  616.         Sets the language index field of the user at UserIndex to
  617.         LanguageIndex.
  618.  
  619.     SetUserProtocol(UserIndex, ProtocolIndex)
  620.  
  621.         Sets the protocol index field of the user at UserIndex to
  622.         ProtocolIndex.
  623.  
  624.     SetUserUploads(UserIndex, UploadKBytes)
  625.  
  626.         Sets the uploaded k-bytes field of the user at UserIndex to
  627.         UploadKBytes.
  628.  
  629.     SetUserDownloads(UserIndex, DownloadKBytes)
  630.  
  631.         Sets the downloaded k-bytes field of the user at UserIndex to
  632.         DownloadKBytes.
  633.  
  634.     SetUserDownloadsToday(UserIndex, DownloadKBytes)
  635.  
  636.         Sets the downloaded today k-bytes field of the user at UserIndex
  637.         to DownloadKBytes.
  638.  
  639.     SetUserLastMessageArea(UserIndex, MessageArea)
  640.  
  641.         Sets the last message area field of the user at UserIndex to
  642.         MessageArea.
  643.  
  644.     SetUserLastFileArea(UserIndex, FileArea)
  645.  
  646.         Sets the last file area field of the user at UserIndex to
  647.         FileArea.
  648.  
  649.     SetUserCompressor(UserIndex, CompressorIndex)
  650.  
  651.         Sets the compressor index field of the user at UserIndex to
  652.         CompressorIndex.
  653.  
  654.     SetUserExtra(UserIndex, ExtraInfo)
  655.  
  656.         Sets the extra field of the user at UserIndex to ExtraInfo.
  657.         MaxUserREXX is expecting a number in ExtraInfo, as this field is
  658.         defined as a `dword' in the header files for Maximus.
  659.  
  660.     QueryBBS_Stats(BBSStatFile)
  661.  
  662.         Returns the BBS statistics for BBSStatFile as a string formatted
  663.         in the following manner:
  664.  
  665.           total_calls msgs_written total_dl total_ul todays_calls
  666.  
  667.         BBSStatFile will be BBSTATxx.BBS where xx is the task number in
  668.         hexadecimal format, padded with a leading zero to make it two
  669.         characters if necessary.
  670.  
  671.     SetBBS_Stats(BBSStatFile, TotCalls, MsgsOut, TotDL, TotUL, TodayCalls)
  672.  
  673.         Sets the BBS statistics for BBSStatFile. BBSStatFile MUST
  674.         already exist.
  675.  
  676.         BBSStatFile will be BBSTATxx.BBS where xx is the task number in
  677.         hexadecimal format, padded with a leading zero to make it two
  678.         characters if necessary.
  679.  
  680.     QueryQWKTags(MTagBBS, UserName)
  681.  
  682.         Retrieves the tagged QWK message areas for UserName from MTagBBS
  683.         as a string. The string will consist of each tagged area name
  684.         separated by a blank, for example (without the quotes):
  685.  
  686.             " 0 1 3 HINTS TIPS MUFFIN TUB"
  687.  
  688.         MTagBBS should be the MTAG.BBS residing in your Maximus root
  689.         directory. If Max is in D:\MAX, MTagBBS would be:
  690.  
  691.             D:\MAX\MTAG.BBS
  692.  
  693.         UserName is the users REAL name.
  694.  
  695.     SetQWKTags(MTagBBS, UserName, QWKTags)
  696.  
  697.         Sets the tagged QWK message areas for UserName into MTagBBS from
  698.         the string QWKTags. The QWKTags string consists of each area
  699.         name to be tagged, each name should be separated from the others
  700.         by a blank, it should also start with a blank, for example
  701.         (without the quotes):
  702.  
  703.             " MECCA MUFFIN TUB OS2BBS"
  704.  
  705.         MTagBBS should be the MTAG.BBS residing in your Maximus root
  706.         directory. If Max is in D:\MAX, MTagBBS would be:
  707.  
  708.             D:\MAX\MTAG.BBS
  709.  
  710.         UserName is the users REAL name.
  711.  
  712.     SetIPCStatus(IPCFile, UserName, StatusMsg)
  713.  
  714.         Writes an IPCFile for UserName with StatusMsg.
  715.  
  716.         IPCFile should be IPCxx.BBS where xx is the task number in
  717.         hexadecimal format, padded with a leading zero to make it two
  718.         characters if necessary.
  719.  
  720.    ------------------------------------------------------------------
  721.  
  722.                                ORDER FORM
  723.                             MaxUserREXX v1.05
  724.                             -----------------
  725.  
  726.                        CASH, CHECK or MONEY ORDER
  727.                        --------------------------
  728.  
  729.     Please complete the following information and return this form with
  730.     your check or money order (I will take no responsibility for cash
  731.     sent through the mail) to the address below.  Please make all checks
  732.     and money orders for U.S. funds payable to Craig Morrison.
  733.  
  734.    ------------------------------------------------------------------
  735.  
  736.                           CREDIT CARD ORDERING
  737.                           --------------------
  738.  
  739.     To order using VISA, Mastercard or American Express, fill out this
  740.     form and mail it to the address below. You may also either netmail
  741.     this form to the Fidonet address listed below, or call the BBS
  742.     number listed below and upload the form.
  743.  
  744.     Credit card purchases will be turned around in 24-48 hours.
  745.  
  746.    ------------------------------------------------------------------
  747.  
  748.     <Please Type or Print Clearly>
  749.  
  750.             Name: __________________________________________________
  751.  
  752.          Company: __________________________________________________
  753.  
  754.          Address: __________________________________________________
  755.  
  756.                   __________________________________________________
  757.  
  758.             City: _____________________  St or Prov: _______________
  759.  
  760.      Postal Code: ________________  Country: _______________________
  761.  
  762.     Phone Number: __________________________________________________
  763.  
  764.  Fidonet Address: __________________________________________________
  765.  
  766. Internet Address: __________________________________________________
  767.  
  768.             Date: ___-___-______
  769.  
  770.  
  771.     I would like to purchase:
  772.                                                                Totals
  773.  
  774. ____ MaxUserREXX Developer's License @ 48.00:               $___________
  775.      (Source code included)
  776.  
  777. ____ Copy(s) of MaxUserREXX @ 10.00 per copy:               $___________
  778.      (1-5 copies)
  779.  
  780. ____ Copy(s) of MaxUserREXX @  8.00 per copy:               $___________
  781.      (6-10 copies and source code)
  782.  
  783. ____ Copy(s) of MaxUserREXX @  7.00 per copy:               $___________
  784.      (11-20 copies and source code)
  785.  
  786. ____ Copy(s) of MaxUserREXX @  6.00 per copy:               $___________
  787.      (21-40 copies and source code)
  788.  
  789. ____ Copy(s) of MaxUserREXX @  4.00 per copy:               $___________
  790.      (41+ copies and source code)
  791.  
  792.  
  793. ____ I am including a check or money order for:              ___________
  794.  
  795. ____ Please charge this purchase to my:
  796.  
  797.         [ ] VISA
  798.         [ ] Mastercard
  799.         [ ] American Express
  800.  
  801.      In the amount of:                                       ___________
  802.  
  803.      Card Number:             _______________________________
  804.  
  805.      Card Expiration Date:    ____/____
  806.  
  807.      Signature (required):    _______________________________
  808.      (Or name as it appears on card for mail orders.)
  809.  
  810.     ------------------------------------------------------------------
  811.  
  812.     <Optional information>
  813.  
  814.     Kind of Work You Do:
  815.             < > Programming      < > CAD/CAM         < > Engineering
  816.             < > Accounting       < > Word Processing
  817.             < > Other (Please Specify) _____________________________
  818.  
  819.  
  820.     Where did you first hear about MaxUserREXX? ____________________
  821.  
  822.     ________________________________________________________________
  823.  
  824.     Where did you find this product: _______________________________
  825.  
  826.     Comments/Suggestions about this product:
  827.  
  828.     _________________________________________________________________
  829.  
  830.     _________________________________________________________________
  831.  
  832.     _________________________________________________________________
  833.  
  834.     _________________________________________________________________
  835.  
  836.     _________________________________________________________________
  837.  
  838.  
  839.  
  840.    ------------------------------------------------------------------
  841.  
  842.     Please remit to:
  843.  
  844.     Fidonet:   Craig Morrison, 1:201/60@fidonet.org
  845.     Internet:  Craig Morrison, cam@wpc.cioe.com
  846.     BBS:       Workplace Connection, (317) 742-2680
  847.     SnailMail: Craig Morrison
  848.                1316 Ferry St.
  849.                Lafayette, IN 47901-1533
  850.                USA
  851.  
  852.  
  853.