home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-10-27 | 139.4 KB | 4,223 lines |
-
-
- ▄█████▄ ▄█████▄ ▄█████▄ ▄████▄ ▄█████▄ ▄█████▄ ▄████▄
- ▄▄▄ ▀███ ▄▄▄ ▀███ ▄▄▄ ▀███ ▄▄▄ ▀███ ▄▄▄ ██▀ ▄▄▄ ██▀ ▄▄▄ ▀▀▀
- ███ ███ ███ ███ ███ ███ ███ ███ ██████▄ ██████▄ ▀████▄
- ███ ███ ████████ ███ ███ ███▄ ███ ███ ███ ███ ███ ▄▄▄ ███
- ███ ███ ███ ███ ███ ███ ▀████▀ ██████▀ ██████▀ ▀████▀
-
- NanoBBS 2.00
- Copyright 1994,1996 Whirlwind Software
- All Rights Reserved
-
- Program and Documentation by Gerald Albion
-
- Additional Code by
- Mark Dignam and Mark May
-
- ╔═══════════════════════════════════════════════════════════════╗
- ║ ┌─┐ ┌─┐┌──────┐┌───────┐ ║
- ║ │ │ │ ││ ┌────┘│ ┌───┐ │ Universal Flexible Online: ║
- ║ │ │ │ ││ └─┐ │ │ │ │ The UFO Scripting Language ║
- ║ │ └───┘ ││ ┌─┘ │ └───┘ │ ║
- ║ └───────┘└─┘ └───────┘ ║
- ╚═══════════════════════════════════════════════════════════════╝
-
- UFO is an acronym standing for Universal Flexible Online.
- Let's just say I was really into some Michael Schenker music
- when I coined that one.
-
- The UFO scripting language is made up of keywords in a flat
- ASCII text file. In order to turn the keywords into tokens that
- NanoBBS can understand, you must run the UFO script compiler
- (UFO.EXE) with your script file.
-
- There are three kinds of keywords.
-
- ┌───────┐
- │ VERBS │ are action keywords; they actually do something. They
- └───────┘ might change a colour or invoke a canned option or
- perform some arcane logical program flow function, at your
- disposal.
-
- ┌───────┐
- │ NOUNS │ are variables and other "things" in the BBS. A noun
- └───────┘ might be part of a user's record such as name or
- password, or perhaps a system variable like number of calls or
- current baud rate. Many verbs act on nouns, and most verbs can
- act on ALL nouns. This ability to combine actions with any
- system noun instantly gives you incredible power to customize
- your system, but there is third dimension to this syntactic
- structure...
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 1
-
-
- ┌────────────┐
- │ ADJECTIVES │ are modifiers which change the form or
- └────────────┘ content of nouns before a verb acts on them. You
- might, for example, want to display a noun but in upper case;
- for this you would use an [uppercase] adjective between the verb
- and the noun.
-
- Here is the basic syntax:
-
- [verb] This is a simple action with no parameters.
-
- [verb noun] This is the simplest form of a verb that performs
- an action on a noun.
-
- [verb noun noun] Some verbs perform the action on more than one
- noun, or perform the action on one noun and need another as
- input to decide how to perform the action.
-
- [noun] A noun by itself will simply be displayed to the user.
- Sort of like: Spot. This is Spot. See Spot. You get the
- picture.
-
- [adjective noun] An adjective followed by a noun, without a
- verb, will cause the noun to be displayed after the changes
- specified by the adjective are made.
-
- [verb adjective noun] This will perform the action with the
- adjective-modified noun.
-
- [verb adjective1 adjective2 .... adjectiveX noun] You may
- string as many adjectives as you need to get a desired effect
- on a noun.
-
- [verb adjective noun adjective adjective2 noun] Verbs which
- require more than one noun can also use any number of
- adjectives. One thing, where a verb specifies a noun to be
- changed, it is pointless and invalid to specify an adjective
- for the "destination" noun. Results of such an operation are
- unknown.
-
- If all this sounds remarkably like programming in plain
- English, well, that's how I intended it to be. There is, of
- course, a caveat: in order to distunguish keywords from the
- regular text in your UFO files, keywords are enclosed in
- [square brackets], also called braces. Anything not enclosed
- in braces is treated as plain text and is displayed to the user
- as it appears.
-
- You can also use the embedded colour commands (the ones that
- start with the tilde ~ character, as discussed in the chapter
- on embedded commands), and you may even find it easier to type
- these embedded colours directly rather than using their
- full-syntax equivalents. Either way is fine.
-
-
-
-
- NanoBBS - UFO Language Documentation Page 2
-
-
- As in English, some combinations make no sense. Just as a
- pink-with-purple-polka-dot frog is something only an acid freak
- ever sees, likewise a sillycased download count is not of this
- particular world either. I cannot be responsible for what
- happens to your sanity if you try anything immensely kinky in
- UFO (grin)...
-
- Unlike some script langauges, you can stack as many UFO
- keywords between a set of braces as you want. You can put as
- much whitespace before, after and between each keyword as you
- like, and you can span keywords across multiple lines of text
- without having blank lines show up when the compiled UFO file
- is run. In short, it's pretty danged forgiving.
-
-
- Here is an example of a basic verb:
-
- [green]This is green text!
-
- The above example will change the foreground colour to green and
- display the message "This is green text!" to the user in green!
-
-
- Another example:
-
- [white]Go Sweden! [yellow on blue]─┼──[background black cleol]
-
- The above example changes the foreground colour to white,
- then displays the message "Go Sweden!" and then changes colours
- to yellow on a blue background, and uses some nifty IBM line
- drawing characters to draw a cute little blue and yellow Swedish
- flag... using a background colour keyword to change the
- background colour back to black and then a [cleol] to clear to
- the end of line.
-
-
- Let's see another example, using adjectives!
-
- [magenta]Welcome back, [lightcyan sillycase username magenta]!
-
- This example first changes the colour to magenta and says
- "Welcome back, " to the user. It then changes the colour to
- light cyan and displays the user's name, in "Silly Case" which
- is one of many special effects in UFO's repertoire.
-
-
-
-
-
-
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 3
-
-
- I should point out at this time that there is a [display] verb
- which is theoretically supposed to be used to display a noun
- such as the username, but if the UFO.EXE program detects a noun
- or adjective where there ought to be a verb, it assumes the verb
- is [display] and continues on its merry way. Therefore, the
- [sillycase username] above is really the same as [display
- sillycase username].
-
- Anyhow, we should see something like this:
-
- Welcome back, GeRaLd aLbIoN!
-
- Pretty cool, eh?
-
- Here is an example with conditionals and the [mark] keyword:
-
- [ifeq useraccess 50000 pageplay "SYSOP.PPL" goto EN mark
- pageplay "LAMER.PPL"][label EN]
-
- This tests to see if the user's access is exactly 50000, no
- higher or lower. If it is 50000, the pageplay file "SYSOP.PPL"
- is played on the local speaker, otherwise the file "LAMER.PPL" is
- played. How it works is this: UFO sees the IFEQ keyword and
- then compares USERACCESS with 50000. 50000 is a numeric
- constant and numeric constants don't need quotes. If USERACCESS
- and 50000 compare true (i.e. if they're the same) then all the
- code up to the MARK keyword is processed, otherwise it is
- skipped. OK, let's say the user does have 50000 access. We
- continue on to pageplay the "SYSOP.PPL" file (in quotes because
- it is a non-numeric constant) and then we jump directly to the
- EN label (labels have two characters only, see the label verb
- later in this chapter). Now, if the user's access was not
- 50000, UFO would skip everything until the MARK keyword and
- would then see the pageplay keyword, and would play the
- "LAMER.PPL" file. After that it would be at the same place, the
- EN label.
-
- ╔══─────────────────────────────────────────────────────────────══╗
- ║ Constants in UFO: ║
- │ │
- │ Most verbs allow you to specify a constant as a read-only noun │
- │ in most places. Numerical constants (those which are meant to │
- │ be numbers) can just be entered verbatim. However, in order │
- │ to distinguish non-numerical constants from keywords, │
- │ non-numerical (or text) constants must be enclosed in quotes. │
- │ │
- │ These are valid commands in UFO: │
- │ │
- │ [display 1000] [display "1000"] │
- │ [display "Kilroy Was Here!"] [copy var01 "Kilroy Was Here!"] │
- │ │
- │ These are not: │
- │ │
- │ [display Kilroy Was Here!] │
- ║ [copy "Kilroy Was Here!" var01] ║
- ╚══─────────────────────────────────────────────────────────────══╝
-
- NanoBBS - UFO Language Documentation Page 4
-
-
-
- There are virtually countless combinations of verbs, adjectives
- and nouns possible, and most of the verbs listed in this chapter
- will include examples in context to help you make use of these
- powerful features!
-
- Exercise caution and run tests using the VIEWUFO utility before
- you turn your own UFO creations loose on your users! It -is-
- possible to delete important files or go into endless loops that
- send your hard disk's MTBF into a nose dive using UFO scripts. I
- should stress at this point that users cannot enter compiled UFO
- keywords in messages or at the bang prompt, but they can upload
- UFO scripts to you (trojans) and if you directly display
- uploaded files using the [link] keyword, well, you're wide open
- to abuse by malevolent soon-to-be-EX-users! It is NOT a good
- idea to write a k-nifty ANSI viewing menu that lets users upload
- to it without screening. Caveat lector!
-
-
- DATES AND TIMES IN UFO
-
- Throughout NanoBBS and everywhere in the UFO syntax, dates are
- stored in a long integer in the "Seconds Since 1970" format.
- This means that dates are stored as a number of seconds elapsed
- since midnight, January 1st, 1970. This is used for the
- author's personal convenience (only a four-byte single variable
- is needed for storage) and for consistency with numerous other
- systems (most notably Unix) which use this form of dates. THE
- ONE EXCEPTION to this rule is the birthdate, which is stored in
- ASCII in YY-MM-DD format. There is a keyword (the [ymd2s70]
- adjective) which will give you a second-since-1970 of the
- birthdate if you need it, and it will return a negative number
- if the date is before 1970 (pretty cool huh...). At this
- writing, about 780 million seconds have elapsed since midnight
- 70-01-01.
-
- Likewise, a time-of-day is stored as a number of seconds since
- midnight, and can range from zero to 86399.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 5
-
-
- ╔════════════════════════════════════════════════════════════════════╗
- ║ ║
- ║ ║
- ║ Adjectives ║
- ║ ║
- ║ ║
- ╚════════════════════════════════════════════════════════════════════╝
-
-
- ═══════════════════════════════════════════════════════════════
- [sillycase {noun}]
-
- Returns noun in SiLlY CaSe
-
- ═══════════════════════════════════════════════════════════════
- [leftjustify {noun1} {noun2}]
-
- Left justifies noun1 in noun2 columns
-
- ═══════════════════════════════════════════════════════════════
- [rightjustify {noun1} {noun2}]
-
- Right justifies noun1 in noun2 columns
-
- ═══════════════════════════════════════════════════════════════
- [centerjustify {noun1} {noun2}]
-
- Centre justfies noun1 in noun2 columns {This can be used to do
- some REALLY cool stuff!}
-
- ═══════════════════════════════════════════════════════════════
- [lowercase {noun}]
-
- Returns noun in lowercase
-
- ═══════════════════════════════════════════════════════════════
- [uppercase {noun}]
-
- Returns noun in UPPERCASE
-
- ═══════════════════════════════════════════════════════════════
- [mixedcase {noun}]
-
- Returns noun in Mixed Case
-
- ═══════════════════════════════════════════════════════════════
- [firstname {noun}]
-
- Assumes the noun is a person name and attempts to parse out the
- given name, returning what it gets. It is programmed to skip
- Mr., Mrs., Miss, Ms., Dr., The, and several other titles and
- pseudonym prefices.
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 6
-
-
- ═══════════════════════════════════════════════════════════════
- [century {noun}]
-
- Returns 19 or 20 (noun is a Sec70 Date)
-
- ═══════════════════════════════════════════════════════════════
- [year {noun}]
-
- Returns two-digit year of Sec70 date
-
- ═══════════════════════════════════════════════════════════════
- [monthpad {noun}]
-
- Returns 0-padded month of Sec70 date
-
- ═══════════════════════════════════════════════════════════════
- [month {noun}]
-
- Returns unpadded month of Sec70 date
-
- ═══════════════════════════════════════════════════════════════
- [longmonth {noun}]
-
- Returns full month name of Sec70 date
-
- ═══════════════════════════════════════════════════════════════
- [shortmonth {noun}]
-
- Returns 3-letter month of Sec70 date
-
- ═══════════════════════════════════════════════════════════════
- [datepad {noun}]
-
- Returns 0-padded day of month of Sec70 date
-
- ═══════════════════════════════════════════════════════════════
- [date {noun}]
-
- Returns unpadded day of month of Sec70 date
-
- ═══════════════════════════════════════════════════════════════
- [dateord {noun}]
-
- Returns ordinal suffix of date
-
- ═══════════════════════════════════════════════════════════════
- [dotwlong {noun}]
-
- Returns longhand day of the week
-
- ═══════════════════════════════════════════════════════════════
- [dotwshort {noun}]
-
- Returns shorthand day of the week
-
-
-
- NanoBBS - UFO Language Documentation Page 7
-
-
- ═══════════════════════════════════════════════════════════════
- [time12h {noun}]
-
- Returns time in 12 hr format (no seconds)
-
- ═══════════════════════════════════════════════════════════════
- [time12hs {noun}]
-
- Returns time in 12 hr format (w/seconds)
-
- ═══════════════════════════════════════════════════════════════
- [time24h {noun}]
-
- Returns time in 24 hr format (no seconds)
-
- ═══════════════════════════════════════════════════════════════
- [time24hs {noun}]
-
- Returns time in 24 hr format (w/seconds)
-
- ═══════════════════════════════════════════════════════════════
- [meridian {noun}]
-
- Returns am or pm as required
-
- ═══════════════════════════════════════════════════════════════
- [hour24 {noun}]
-
- Returns the hour part (in 24h format)
-
- ═══════════════════════════════════════════════════════════════
- [hour12 {noun}]
-
- Returns the hour part (in 12h format)
-
- ═══════════════════════════════════════════════════════════════
- [minute {noun}]
-
- Returns the minute part
-
- ═══════════════════════════════════════════════════════════════
- [second {noun}]
-
- Returns the second part
-
- ═══════════════════════════════════════════════════════════════
- [sdrawkcab {noun}]
-
- Returns the noun backwards
-
- ═══════════════════════════════════════════════════════════════
- [backwards {noun}]
-
- Returns the noun backwards
-
-
-
- NanoBBS - UFO Language Documentation Page 8
-
-
- ═══════════════════════════════════════════════════════════════
- [drawkcab {noun}]
-
- Returns the noun backwards
-
- ═══════════════════════════════════════════════════════════════
- [backward {noun}]
-
- Returns the noun backwards
-
- ═══════════════════════════════════════════════════════════════
- [product {noun1} {noun2}]
-
- Returns the mathematical product of the two nouns
-
- ═══════════════════════════════════════════════════════════════
- [quotient {noun1} {noun2}]
-
- Returns the mathematical quotient of {noun1} divided by {noun2}.
- Quotient is truncated down to nearest integer.
-
- ═══════════════════════════════════════════════════════════════
- [remainder {noun1} {noun2}]
-
- Returns the remainder of {noun1} divided by {noun2}.
-
- ═══════════════════════════════════════════════════════════════
- [sum {noun1} {noun2}]
-
- Returns the mathematical sum of {noun1} and {noun2}.
-
- ═══════════════════════════════════════════════════════════════
- [difference {noun1} {noun2}]
-
- Returns the mathematical difference between {noun1} and {noun2},
- or in other words {noun1} minus {noun2}.
-
- ═══════════════════════════════════════════════════════════════
- [ratio {noun1} {noun2}]
-
- Returns the ratio of {noun1}:{noun2} in the form n:1
-
- ═══════════════════════════════════════════════════════════════
- [percentage {noun1} {noun2}]
-
- Returns the percentage that {noun1} is of {noun2}.
-
- ═══════════════════════════════════════════════════════════════
- [xfer_estimate {noun}]
-
- Returns the estimated transfer time (in seconds) of the byte
- count in {noun}. Accounts for baud rate.
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 9
-
-
- ═══════════════════════════════════════════════════════════════
- [ymd2s70 {noun}]
-
- Returns a SecondSince1970 integer date from a valid YY/MM/DD or
- YY-MM-DD date in {noun}
-
- ═══════════════════════════════════════════════════════════════
- [ymd {noun}]
-
- Returns a canned YY/MM/DD date of the SecondSince1970 date in
- {noun}. A nice quicky to avoid the tedium of building custom
- dates with the previous lot of keywords.
-
- ═══════════════════════════════════════════════════════════════
- [ordinal {noun}]
-
- Returns ordinal suffix of noun if noun is numerical, nothing
- otherwise.
-
- Ex.:
-
- Happy [userage ordinal userage] Birthday!
-
- If this were the user's 27th birthday, this bit of code would
- display the string "Happy 27th Birthday!". In this example,
- first the user's actual age in years is displayed, and then the
- ordinal suffix - in this case "th". You might want to use this
- in a welcome screen in conjunction with an [ifbirthday] verb.
-
- ═══════════════════════════════════════════════════════════════
- [dollars {noun}]
-
- Assuming the noun is a quantity of money in cents (as credits
- for netmail are stored) this adjective returns a dollar amount,
- e.g. 0.50 for 50 cents, 1.25 for 125 cents etcetera. Good for
- informing a user how much s/he is being dinged for a netmail.
-
- ═══════════════════════════════════════════════════════════════
- [fidocost {noun}]
-
- This returns the cost in cents, as defined in FIDOCOST.CTL, of a
- netmail to the address specified in the noun. If the address is
- invalid or if it is not known in FIDOCOST.CTL (or covered by an
- ALL clause) then the cost returned is zero. This is well used
- in conjunction with the preceding [dollars] keyword.
-
- ═══════════════════════════════════════════════════════════════
- [creditcard {noun}]
-
- This checks the noun to see if it's a valid credit card number. If
- it is, and the card type is recognized, it will return AMEX, VISA,
- MASTERCARD or DISCOVER. If it is a valid card of an unknown type,
- UNKNOWN is returned. If the card is in any way invalid (by
- checksum, missing digits, etc) the adjective returns INVALID.
-
-
-
- NanoBBS - UFO Language Documentation Page 10
-
-
-
- ═══════════════════════════════════════════════════════════════
- [zeropad {noun1} {noun2}]
-
- This pads {noun1} with the number of zeroes specified by {noun2}.
- This is useful for a number of applications but was written to aid
- in writing a credit card acceptance UFO script.
-
- Examples:
-
- [zeropad 5 3]
-
- This would result in:
-
- 005
-
- [zeropad "621" 8]
-
- This would result in:
-
- 00000621
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 11
-
-
- ╔════════════════════════════════════════════════════════════════════╗
- ║ ║
- ║ ║
- ║ Nouns ║
- ║ ║
- ║ ║
- ╚════════════════════════════════════════════════════════════════════╝
-
- ═══════════════════════════════════════════════════════════════
- [var01] [var02] [var03] ... [var38] [var39] [var40]
-
- These are general purpose variables for your own use. There are
- 40 of these variables. They can contain strings of up to 255
- characters each. If the strings represent numerical values,
- they can be copied to numerical nouns, or they can have
- mathematical operations performed on them or be used as
- numerical parameters in the RIPscrip suite. They are most often
- used as temporary storage and as indices for loops.
-
- ═══════════════════════════════════════════════════════════════
- [username]
-
- The user's logon name/pseudo
-
- ═══════════════════════════════════════════════════════════════
- [userrealname]
-
- The user's real name
-
- ═══════════════════════════════════════════════════════════════
- [userlocation]
-
- The user's location
-
- ═══════════════════════════════════════════════════════════════
- [userpassword]
-
- The user's password
-
- ═══════════════════════════════════════════════════════════════
- [userphone]
-
- The user's phone number
-
- ═══════════════════════════════════════════════════════════════
- [userlastdate]
-
- Date/Time of user's last call
-
-
- ═══════════════════════════════════════════════════════════════
- [usercredit]
-
- User's online time credit.
-
-
-
- NanoBBS - UFO Language Documentation Page 12
-
-
- ═══════════════════════════════════════════════════════════════
- [userposts]
-
- Number of messages user has posted.
-
- ═══════════════════════════════════════════════════════════════
- [useraccess]
-
- User's access level.
-
- ═══════════════════════════════════════════════════════════════
- [usercalls]
-
- Number of calls user has made
-
- ═══════════════════════════════════════════════════════════════
- [useruploads]
-
- Number of kilobytes uploaded
-
- ═══════════════════════════════════════════════════════════════
- [userdownloads]
-
- Number of kilobytes downloaded
-
- ═══════════════════════════════════════════════════════════════
- [userdownloadtoday]
-
- Number of kilobytes downloaded today
-
- ═══════════════════════════════════════════════════════════════
- [userelapsed]
-
- Minutes used by user today
-
- ═══════════════════════════════════════════════════════════════
- [userlines]
-
- Number of lines the user has set (usually 24)
-
- ═══════════════════════════════════════════════════════════════
- [usercolumns]
-
- Number of columns the user has set (usually 80)
-
- ═══════════════════════════════════════════════════════════════
- [userfirstdate]
-
- The Date and time of the user's first call to the system, in
- SecondsSince1970 form
-
- ═══════════════════════════════════════════════════════════════
- [userbday]
-
- The user's birthdate, as entered by him/her.
-
-
- NanoBBS - UFO Language Documentation Page 13
-
-
- ═══════════════════════════════════════════════════════════════
- [userage]
-
- The user's age in years. Because this is a derived noun (from
- the Birthdate field) it is read-only - any attempt to change its
- value will have no effect.
-
- ═══════════════════════════════════════════════════════════════
- [userexpiry]
-
- The date of the user's account expiry, in SecondsSince1970
- format.
-
- ═══════════════════════════════════════════════════════════════
- [userbank]
-
- The balance of the user's time bank "account". This is the
- total number of minutes the user has stored for future use.
-
- ═══════════════════════════════════════════════════════════════
- [userbanktoday]
-
- This is the number of minutes the user has already withdrawn
- from the time bank today - this value is used internally to
- enforce per-day withdrawal limits.
-
- ═══════════════════════════════════════════════════════════════
- [msgfrom]
-
- The "From" field of the current message
-
- ═══════════════════════════════════════════════════════════════
- [msgto]
-
- The "To" field of the current message
-
- ═══════════════════════════════════════════════════════════════
- [msgsubj]
-
- The "Subject" field of the current message
-
- ═══════════════════════════════════════════════════════════════
- [msgnum]
-
- The Message Number of the current message
-
- ═══════════════════════════════════════════════════════════════
- [msgorig]
-
- The full 3D (or 4D if applicable) FTN address of the origin of
- the current message. If the "point" is zero, the address is
- returned in 3D.
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 14
-
-
- ═══════════════════════════════════════════════════════════════
- [msgdest]
-
- The full 3D (or 4D if applicable) FTN address of the destination
- of the current message. If the "point" is zero, the address is
- returned in 3D.
-
- ═══════════════════════════════════════════════════════════════
- [msgorigzone]
-
- The Zone number of the current message's origin node
-
- ═══════════════════════════════════════════════════════════════
- [msgorignet]
-
- The Net number of the current message's origin node
-
- ═══════════════════════════════════════════════════════════════
- [msgorignode]
-
- The Node number of the current message's origin node
-
- ═══════════════════════════════════════════════════════════════
- [msgdestzone]
-
- The Zone number of the current message's destination node
-
- ═══════════════════════════════════════════════════════════════
- [msgdestnet]
-
- The Net number of the current message's destination node
-
- ═══════════════════════════════════════════════════════════════
- [msgdestnode]
-
- The Node number of the current message's destination node
-
- ═══════════════════════════════════════════════════════════════
- [msgdate]
-
- The message's date in SecondsSince1970 format
-
- ═══════════════════════════════════════════════════════════════
- [msgareanum]
-
- The number of the current message area
-
- ═══════════════════════════════════════════════════════════════
- [msgareaname]
-
- The name of the current message area
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 15
-
-
- ═══════════════════════════════════════════════════════════════
- [postpriv]
-
- Short for POST PRIVILEGE. This is a number which is 0 if the
- user may post in this area, 479 if the user does not have post
- access and 946 if the area is read only. These codes correspond
- to SysMsgs in the Language file which indicate these error
- conditions, so you can pass this value directly to a [message]
- keyword to quickly indicate the error.
-
- ═══════════════════════════════════════════════════════════════
- [msgorigreply]
-
- The number of the message that this message is a reply to
-
- ═══════════════════════════════════════════════════════════════
- [msgtimesread]
-
- The number of times the current message has been read
-
- ═══════════════════════════════════════════════════════════════
- [msgreply]
-
- The number of the next reply to this message
-
- ═══════════════════════════════════════════════════════════════
- [ifmsgpvt]
-
- This will skip to the next [mark] if the current message is not
- marked "Private."
-
- ═══════════════════════════════════════════════════════════════
- [textlevel]
-
- The current UFO nesting level. This is a read-only noun.
-
- ═══════════════════════════════════════════════════════════════
- [usercount]
-
- The number of active user accounts in the BBS. This is a
- read-only noun.
-
-
- ═══════════════════════════════════════════════════════════════
- [highuser]
-
- The highest user record number in the BBS. This is a read-only
- noun.
-
- ═══════════════════════════════════════════════════════════════
- [baudrate]
-
- The user's current baud rate. This is a read-only noun.
-
-
-
-
- NanoBBS - UFO Language Documentation Page 16
-
-
- ═══════════════════════════════════════════════════════════════
- [lockbaud]
-
- The defined locked baud rate if any. This is a read-only noun.
-
- ═══════════════════════════════════════════════════════════════
- [pagestart]
-
- The time in SecondsSinceMidnight format of when paging begins
- being allowed.
-
- ═══════════════════════════════════════════════════════════════
- [pageend]
-
- The time if SecondsSinceMidnight format of when paging ends
- being allowed.
-
- ═══════════════════════════════════════════════════════════════
- [minbaud]
-
- The slowest baud rate allowed.
-
- ═══════════════════════════════════════════════════════════════
- [fileareaname]
-
- The name of the current file area.
-
- ═══════════════════════════════════════════════════════════════
- [fileareanum]
-
- The number of the current file area
-
- ═══════════════════════════════════════════════════════════════
- [fileareaowner]
-
- The "owner" name of the current file area
-
- ═══════════════════════════════════════════════════════════════
- [filedlpath]
-
- The download path of the current file area
-
- ═══════════════════════════════════════════════════════════════
- [fileulpath]
-
- The upload path of the current file area
-
- ═══════════════════════════════════════════════════════════════
- [failurecode]
-
- The failure code of the last operation (that generates
- failure codes). If there is a sysmsg to indicate the failure,
- that sysmsg's number is returned here. Where the last operation
- is successful, failure code is always zero. Not all operations
- generate failure codes.
-
-
- NanoBBS - UFO Language Documentation Page 17
-
-
- ═══════════════════════════════════════════════════════════════
- [totalcalls]
-
- The total number of calls to the system.
-
- ═══════════════════════════════════════════════════════════════
- [lastcaller]
-
- The username of the last person to call the BBS.
-
- ═══════════════════════════════════════════════════════════════
- [callstoday]
-
- The number of calls to the system today (including the current
- one). A call is defined as a successful logon, and not merely a
- connection.
-
- ═══════════════════════════════════════════════════════════════
- [connectstoday]
-
- The number of connects (that may or may not have resulted in a
- logon) today.
-
- ═══════════════════════════════════════════════════════════════
- [poststoday]
-
- The number of messages that have been posted today.
-
- ═══════════════════════════════════════════════════════════════
- [ultoday]
-
- The number of files uploaded today.
-
- ═══════════════════════════════════════════════════════════════
- [dltoday]
-
- The number of files downloaded today.
-
- ═══════════════════════════════════════════════════════════════
- [batchsize]
-
- This is the total number of bytes in the download batch. Good
- for reminding users when they are pigging out on files.
-
- ═══════════════════════════════════════════════════════════════
- [comport]
-
- This is the current comm port. If you are using COM1 it will
- contain 1.
-
- ═══════════════════════════════════════════════════════════════
- [time12]
-
- This is the current time in 12-hour format without seconds. It
- should be used with the [clock_ampm] keyword to create a proper
- 12-hour time of day.
-
- NanoBBS - UFO Language Documentation Page 18
-
-
- ═══════════════════════════════════════════════════════════════
- [time12s]
-
- This is the current time in 12-hour format with seconds. It
- should be used with the [clock_ampm] keyword to create a proper
- 12-hour time of day.
-
- ═══════════════════════════════════════════════════════════════
- [time24]
-
- This is the current time in 24-hour format without seconds.
-
- ═══════════════════════════════════════════════════════════════
- [time24s]
-
- This is the current time in 24-hour format with seconds.
-
- ═══════════════════════════════════════════════════════════════
- [clock_ampm]
-
- This is either am or pm, depending on the time of day.
-
- ═══════════════════════════════════════════════════════════════
- [clock_hour24]
-
- This is the hour, in 24-hour time, of the current time of day.
- Think of it as what the little hand on your 24-hour military
- clock is pointing to.
-
- ═══════════════════════════════════════════════════════════════
- [clock_hour12]
-
- This is the hour of the current time of day. Think of it as
- what the little hand on the clock points to.
-
- ═══════════════════════════════════════════════════════════════
- [clock_minute]
-
- This is the minute of the current time of day. Think of it as
- what the big hand points to.
-
- ═══════════════════════════════════════════════════════════════
- [clock_second]
-
- This is the second of the current time of day. Picture it as
- the number that the thin red hand on the clock points to.
-
- ═══════════════════════════════════════════════════════════════
- [clock_sectoday]
-
- This is the number of seconds since midnight today. This is
- considerably faster than [sec70] and should be preferred when
- building strange time formats.
-
-
-
-
- NanoBBS - UFO Language Documentation Page 19
-
-
- ═══════════════════════════════════════════════════════════════
- [sec70]
-
- This is the number of seconds since 00:00 January 1, 1970.
- Peace, mun. Use this as a novelty or to create really weird
- date formats!
-
- ═══════════════════════════════════════════════════════════════
- [online_hour]
-
- This is the number of hours a user has been online.
-
- ═══════════════════════════════════════════════════════════════
- [online_hourp]
-
- This is a zero-padded two-digit number of hours the user has
- been online.
-
- ═══════════════════════════════════════════════════════════════
- [online_minutes]
-
- The number of minutes the user has been online.
-
- ═══════════════════════════════════════════════════════════════
- [online_minutesp]
-
- The zero-padded number of minutes the user has been online.
-
- ═══════════════════════════════════════════════════════════════
- [online_seconds]
-
- The number of seconds the user has been online.
-
- ═══════════════════════════════════════════════════════════════
- [online_secondsp]
-
- The number of seconds the user has been online. Zero-padded.
-
- ═══════════════════════════════════════════════════════════════
- [online_minpart]
-
- The minute part of an H:M:S format of the amount of time the
- user has been online this call.
-
- ═══════════════════════════════════════════════════════════════
- [online_minpartp]
-
- The same as [online_minpart] except that it is zero-padded.
-
- ═══════════════════════════════════════════════════════════════
- [online_secpart]
-
- The seconds part of an H:M:S format of the amount of time the
- user has been online this call.
-
-
-
- NanoBBS - UFO Language Documentation Page 20
-
-
- ═══════════════════════════════════════════════════════════════
- [online_secpartp]
-
- The same as [online_secpart] except that it is zero-padded.
-
- ═══════════════════════════════════════════════════════════════
- [timeonline]
-
- The amount of time the user has been online this call.
- Displayed in HH:MM:SS format for convenience.
-
- ═══════════════════════════════════════════════════════════════
- [timeleft]
-
- The amount of time the user has remaining for this call, in
- seconds. This is a read-write noun, so you can change the
- user's remaining time by writing to this noun.
-
- Examples:
-
- [add 300 timeleft]
- [copy timeleft 300]
-
- The first example adds 5 minutes to the user's time limit, and
- the second example actually sets the time limit to 5 minutes.
-
- ═══════════════════════════════════════════════════════════════
- [cal_century]
-
- The century, 19 or 20.
-
- ═══════════════════════════════════════════════════════════════
- [cal_year]
-
- The year without the century, 00..99
-
- ═══════════════════════════════════════════════════════════════
- [cal_month#p]
-
- The month in numerical format with zero padding
-
- ═══════════════════════════════════════════════════════════════
- [cal_month#]
-
- The month in numerical format, no padding
-
- ═══════════════════════════════════════════════════════════════
- [cal_month]
-
- The month in longhand text, e.g. AUGUST
-
- ═══════════════════════════════════════════════════════════════
- [cal_monthabbr]
-
- The month in shorthand text, e.g. AUG
-
-
- NanoBBS - UFO Language Documentation Page 21
-
-
- ═══════════════════════════════════════════════════════════════
- [cal_datep]
-
- The date in numerical format with zero padding
-
- ═══════════════════════════════════════════════════════════════
- [cal_date]
-
- The date in numerical format, no padding
-
- ═══════════════════════════════════════════════════════════════
- [cal_datesuffix]
-
- The ordinal suffix of the date, i.e. st, nd, rd, th.
-
- ═══════════════════════════════════════════════════════════════
- [cal_dotw]
-
- The day of the week, e.g. WEDNESDAY
-
- ═══════════════════════════════════════════════════════════════
- [cal_dotwabbr]
-
- The day of the week in shorthand, e.g. WED
-
- ═══════════════════════════════════════════════════════════════
- [batchcount]
-
- This is the number of files in the download batch.
-
- ═══════════════════════════════════════════════════════════════
- [task]
-
- This is the node (or task) number as defined in the config file.
-
- ═══════════════════════════════════════════════════════════════
- [nup]
-
- This is the New User password. Best not to display it.
-
- ═══════════════════════════════════════════════════════════════
- [syspass]
-
- This is the system password. Best not to display it.
-
- ═══════════════════════════════════════════════════════════════
- [timedate]
-
- This is a nice generic time and date in 24 hour format with
- seconds and a YY-MM-DD date. Good for logging things to
- questionnaire response files.
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 22
-
-
- ═══════════════════════════════════════════════════════════════
- [day70]
-
- This is the number of days since January 1, 1970. Use this with
- the calendar adjectives to create dates in any format!
-
- ═══════════════════════════════════════════════════════════════
- [udate]
-
- This is the time and date in a format consistent with RFC-1036.
-
- ═══════════════════════════════════════════════════════════════
- [daysleft]
-
- This is the number of days remaining until the user's account
- expires.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 23
-
-
- ╔════════════════════════════════════════════════════════════════════╗
- ║ ║
- ║ ║
- ║ Verbs ║
- ║ ║
- ║ ║
- ╚════════════════════════════════════════════════════════════════════╝
-
- ═══════════════════════════════════════════════════════════════
- [random {noun1} {noun2}]
-
- Place a random number between 1 and {noun1} into {noun2}
-
- Here is an example which gives the user a sort of Instant Time
- Lottery:
-
- [random 100 timeleft]
-
- ═══════════════════════════════════════════════════════════════
- [bumpcalls]
-
- Increments the number of calls to the system. This keyword has
- no parameters.
-
- ═══════════════════════════════════════════════════════════════
- [loguser {noun1} {noun2}]
-
- Logs user to system. User name or real name is in {noun1},
- password is in {noun2}. Failurecodes: 0=OK, 1=bad pass, 2=user
- not found.
-
- ═══════════════════════════════════════════════════════════════
- [trashcan {username}]
-
- This runs the specified username through the trashcan filter -
- if it is found there, the user is logged off. Needless to say
- it would be kind of stupid to set this to a constant.
-
- ═══════════════════════════════════════════════════════════════
- [updateuser]
-
- This rewrites the user's record. If we are working with an
- object user, the object user is rewritten instead.
-
- ═══════════════════════════════════════════════════════════════
- [delay {noun}]
-
- This waits for {noun} milliseconds. This has a 10 millisecond
- resolution.
-
- ═══════════════════════════════════════════════════════════════
- [updatelastread]
-
- This updates the user's lastread pointer for the current area.
- Unnecessary for changing area as the area change code does this
- for you.
-
- NanoBBS - UFO Language Documentation Page 24
-
-
- ═══════════════════════════════════════════════════════════════
- [makesemaphore {noun}]
-
- This writes a semaphore (a zero-byte file intended to indicate a
- condition with its presence) with the filename specified in
- {noun}
-
-
- ═══════════════════════════════════════════════════════════════
- [getfilesize {filename} {destination}]
-
- This gets the size, in bytes, of the file specified in
- {filename} and places this value in {destination}.
-
- ═══════════════════════════════════════════════════════════════
- [append {filename} {textstring}]
-
- This appends the contents of {textstring} to the text file
- specified in the {filename}. If the file does not exist it is
- created first.
-
- ═══════════════════════════════════════════════════════════════
- [appendcr {filename} {textstring}]
-
- This is identical to the [append] keyword, except that it
- automatically appends a carriage return and linefeed to the file
- after it has written the {textstring}.
-
- ═══════════════════════════════════════════════════════════════
- [readln {filename} {line_number} {destination_noun}]
-
- This opens a text file specified by {filename} and reads the
- line of text specified by {line_number} (first line is line 1)
- into the {destination_noun}. This powerful keyword, in concert
- with other keywords which write and delete text files, can be
- used to create complex ASCII-based databases of nearly any size
- and format.
-
- ═══════════════════════════════════════════════════════════════
- [delete {filename}]
-
- This deletes the file specified in {filename}.
-
- ═══════════════════════════════════════════════════════════════
- [getfiletime {filename} {destination}]
-
- This gets the time and date, in Sec70 format, of the file
- specified in {filename} and places this value in {destination}.
- If the file does not exist, it will return 0.
-
- ═══════════════════════════════════════════════════════════════
- [logtime {noun}]
-
- This makes a log entry in NANOBBS.LOG with the contents of
- {noun}.
-
- NanoBBS - UFO Language Documentation Page 25
-
-
- ═══════════════════════════════════════════════════════════════
- [blank {noun}]
-
- This quickly and cheaply blanks out the specified noun.
-
- ═══════════════════════════════════════════════════════════════
- [getchr {noun}]
-
- This waits for, then gets, a character of input from the user.
- The result is placed in the {noun}.
-
- ═══════════════════════════════════════════════════════════════
- [getln {noun}]
-
- This receives a line of input from the user and stores it to a
- noun, typically a variable.
-
- ═══════════════════════════════════════════════════════════════
- [keyfilter {noun}]
-
- This is used before a [getchr] keyword to limit input to only
- the characters in {noun}. It is a direct synonym of [menu].
-
- ═══════════════════════════════════════════════════════════════
- [copy {dest} {src}]
-
- Simply copies the contents of the source noun into the
- destination noun. This will not work if the destination noun is
- read-only. This is good for assigning constants to variables
- for looping, etcetera.
-
-
- ═══════════════════════════════════════════════════════════════
- [echochar {echo_ascii}]
-
- This changes the echo character. This is useful for hiding user
- input when entering passwords, etc.
-
- The {echo_ascii} noun should contain a decimal number from 0 to
- 255; it represents the ASCII code to send in place of each
- character typed. Alternatively, you can place the word ECHO in
- the noun and it will cause NanoBBS to echo all user input
- normally, or NOECHO which will cause no user input to be fed
- back to the user. The values 11 and 23 are synonymous with ECHO
- and NOECHO respectively.
-
- ═══════════════════════════════════════════════════════════════
- [goto {label}]
-
- This jumps to a location in the .UFO file indicated by the
- {label}. If there is no such label the keyword is ignored. The
- label is a two-character string and should NOT be
- contained in quotes like other text constants. You cannot
- substitute a noun for the label.
-
-
-
-
- NanoBBS - UFO Language Documentation Page 26
-
-
- ═══════════════════════════════════════════════════════════════
- [label {label}]
-
- This defines a label for later use by a [goto] keyword. The
- label must be two characters long and should NOT be contained in
- quotes like other text constants. You cannot substitute a noune
- for the label.
-
- ═══════════════════════════════════════════════════════════════
- [iffail {failurecode}]
-
- This will continue processing if the failure code returned by
- the last operation (that generates failure codes) is the same as
- that specified in the parameter. If the failure code and the
- parameter differ, UFO will branch to the next [mark] keyword.
-
- ═══════════════════════════════════════════════════════════════
- [mark]
-
- The [mark] is where most conditionals "branch" to upon failure.
- When encountered by itself it is ignored by NanoBBS, but many
- keywords will skip ahead in the UFO file until they encounter a
- [mark]. Example:
-
- [iflt useraccess 100]You don't have enough access!
- [quit][mark]You have enough access!
-
- This example will display "You don't have enough access!" and
- exit the UFO file if the user's access is less than 100,
- otherwise it will skip to the [mark] and display "You have
- enough access!".
-
- ═══════════════════════════════════════════════════════════════
- [sendx]
-
- This sends (download to user) the contents of the download
- batch using the Xmodem-CRC protocol.
-
- ═══════════════════════════════════════════════════════════════
- [sendy]
-
- This sends the contents of the download batch using the
- Xmodem-1k (sometimes erroneously called Ymodem) protocol.
-
- ═══════════════════════════════════════════════════════════════
- [sendz]
-
- This sends the contents of the download batch using the
- Zmodem protocol.
-
- ═══════════════════════════════════════════════════════════════
- [sends]
-
- This sends the contents of the download batch using the SEAlink
- protocol.
-
-
- NanoBBS - UFO Language Documentation Page 27
-
-
- ═══════════════════════════════════════════════════════════════
- [sendg]
-
- This sends the contents of the download batch using the Ymodem-G
- protocol.
-
- ═══════════════════════════════════════════════════════════════
- [sendb]
-
- This sends the contents of the download batch using the Ymodem
- Batch protocol.
-
- ═══════════════════════════════════════════════════════════════
- [senda]
-
- This sends the contents of the download batch using the ASCII
- protocol, with "more" prompting. Yes, it is possible to send a
- batch of ASCII files.
-
- ═══════════════════════════════════════════════════════════════
- [recvx]
-
- This receives a file using the Xmodem protocol. The path and
- filename should previously have been added to the batch. The
- file will be saved to the "Upload" directory of the current file
- area.
-
- ═══════════════════════════════════════════════════════════════
- [recvy]
-
- This receives a file using the Xmodem-1k (sometimes erroneously
- called Ymodem) protocol. The file is saved to the "Upload"
- directory of the current file area.
-
- ═══════════════════════════════════════════════════════════════
- [recvz]
-
- This receives one or more files using the Zmodem protocol. The
- files are saved to the "Upload" directory of the current file
- area.
-
- ═══════════════════════════════════════════════════════════════
- [recvs]
-
- This receives one or more files using the SEAlink protocol. The
- files are saved to the "Upload" directory of the current file
- area.
-
- ═══════════════════════════════════════════════════════════════
- [recvb]
-
- This receives one or more files using the Ymodem Batch protocol.
- The files are saved to the "Upload" directory of the current
- file area.
-
-
-
- NanoBBS - UFO Language Documentation Page 28
-
-
- ═══════════════════════════════════════════════════════════════
- [recvg]
-
- This receives one or more files using the Ymodem-G protocol.
- The files are saved to the "Upload" directory of the current
- file area.
-
- ═══════════════════════════════════════════════════════════════
- [loadobjectuser {noun}]
-
- This will load the user record whose username or realname is in
- the {noun}. The user is loaded into the "object" record. This
- is an auxiliary user record which can contain any user's record
- regardless of who's logged on. This way you can set up scripts
- to compare and modify other users in relation to the user who's
- logged on.
-
- ═══════════════════════════════════════════════════════════════
- [useobjectuser]
-
- Once an object user is selected, most verbs and nouns that
- operate on the user can be made to operate on the object user
- instead by using this keywords. Subsequent user operations will
- work on the object user until a [usethisuser] keyword is
- encountered.
-
- ═══════════════════════════════════════════════════════════════
- [usethisuser]
-
- This returns user operations to the user who is actually logged
- on. Make sure to use this keyword immediately after you're
- finished working with an object user!
-
- ═══════════════════════════════════════════════════════════════
- [returnuser {noun1}{noun2}]
-
- This searches for the user whose username or realname is in
- {noun1} and places the user's user number in {noun2}
-
- ═══════════════════════════════════════════════════════════════
- [adduser]
-
- This adds the current user to the end of the user file, or to
- the first available position within the user file. BE CAREFUL,
- this keyword makes a BIG assumption: that the user is not
- already in the user file (which is true if the user is logging
- on for the first time).
-
- ═══════════════════════════════════════════════════════════════
- [concatenate {noun1}{noun2}{noun3}]
-
- This concatenates {noun1} and {noun2}, and stores the result
- in {noun3}.
-
-
-
-
- NanoBBS - UFO Language Documentation Page 29
-
-
- ═══════════════════════════════════════════════════════════════
- [display {noun}]
-
- This is a somewhat redundant noun. It will display the {noun}.
- A noun by itself (with no verb) generates the same compiled
- token as the noun displayed with this keyword.
-
- ═══════════════════════════════════════════════════════════════
- [smartcr {column}]
-
- This keyword does a new-line if the current cursor position is
- at the {column} or beyond.
-
- Example:
-
- [smartcr 40]
-
- This would do a new-line if the cursor is at column 42, but not
- if the cursor is at column 35.
-
- ═══════════════════════════════════════════════════════════════
- [x_cr]
-
- This does a carriage return if and only if the cursor is not
- already at the leftmost column. It is the same as the embedded
- ~, (tilde comma) command, and in fact that is what this keyword
- compiles into!
-
- ═══════════════════════════════════════════════════════════════
- [smartwrap {noun}]
-
- This is a particularly nifty keyword which "smart wraps" the
- noun; that is, it displays the noun but word-wraps it and starts
- the next line at the starting columns from which this keyword
- was executed. A version of this is used to display the file
- descriptions. Of course, this noun is best used for nouns which
- contain text, but I can see applications for one-word or
- numerical nouns in this keyword.
-
- ═══════════════════════════════════════════════════════════════
- [skipline]
-
- This simply skips the rest of the current line and goes to the
- next line.
-
- ═══════════════════════════════════════════════════════════════
- [ansi3d {noun}]
-
- Displays the noun in a 3-D boilerplate effect which is one of my
- personal favourites.
-
- ═══════════════════════════════════════════════════════════════
- [pad3d {noun}]
-
- Displays the noun in a 3-D effect as in [ansi3d] but tidies it
- up a bit with space padding on either side of the noun.
-
- NanoBBS - UFO Language Documentation Page 30
-
-
- ═══════════════════════════════════════════════════════════════
- [link {noun}]
-
- This will link to the UFO file specified in {noun}. This is
- like a GOSUB. Upon exit from the linked file, UFO returns to
- the original (calling) file.
-
- ═══════════════════════════════════════════════════════════════
- [msgselect {msg}]
-
- This selects a message within the current message area. The
- {msg} parameter can specify a message number, or it can be +
- or NEXT (no quotes) for the next available message, or - or PREV
- for the previous message.
-
- ═══════════════════════════════════════════════════════════════
- [msgarea {area}]
-
- This selects a new message area. The {area} parameter can
- specify an area number, or it can be + or NEXT (no quotes) for
- the next allowed message area, or - or PREV for the previous
- allowed message area. If an area number is specified and the
- area does not exist or the user is not allowed to change to the
- area, the keyword does nothing.
-
- ═══════════════════════════════════════════════════════════════
- [xtern_shell {program} {parameters}]
-
- This shells out of NanoBBS and executes the {program} with
- the command line parameters specified in {parameters}. It
- first swaps NanoBBS out to EMS or disk if possible.
-
- ═══════════════════════════════════════════════════════════════
- [xtern_erlvl {errorlevel}]
-
- This exits NanoBBS entirely with the specified errorlevel.
- Unfortunately, as of this version it's (still) a one way trip...
-
- ═══════════════════════════════════════════════════════════════
- [dorinfo {node} {path}]
-
- This writes a DORINFO1.DEF compatible file to the specified
- {path}. You can specify any node, and it will use the NanoBBS
- DorinfoX.Def method of naming, e.g. DORINFO2.DEF, DORINF25.DEF,
- DORIN117.DEF etc.
-
- To force the file to always be named DORINFO1.DEF, simply
- specify a constant 1 for the node number, e.g.
-
- [dorinfo 1 c:\bbs\doors]
-
- To use the DorinfoX.Def method with the current node number,
- simply use the [task] noun, e.g.
-
- [dorinfo task c:\bbs\doors]
-
-
- NanoBBS - UFO Language Documentation Page 31
-
-
- ═══════════════════════════════════════════════════════════════
- [doorsys {node} {path}]
-
- This writes a DOOR.SYS file to the specified {path}. You can
- specify any node. Unlike the [dorinfo] verb, the node you
- specify has no effect on the filename - it is always DOOR.SYS.
- However, the node number is a field within the DOOR.SYS file and
- is used there.
-
- To force the file to always use node 1, simply specify a
- constant 1 for the node number, e.g.
-
- [doorsys 1 c:\bbs\doors]
-
- To use the current node number, simply use the [task] noun, e.g.
-
- [doorsys task c:\bbs\doors]
-
- ═══════════════════════════════════════════════════════════════
- [filearea {area}]
-
- This selects a new file area. The {area} parameter can specify
- an area number, or it can be + or NEXT (no quotes) for the next
- allowed file area, or - or PREV for the previous allowed file
- area. If an area number is specified and the area does not
- exist or the user is not allowed to change to the area, the
- keyword does nothing.
-
- ═══════════════════════════════════════════════════════════════
- [existfile {filename}]
-
- If the specified filename does not exist, then this keyword
- skips to the next [mark], otherwise it continues processing as
- if nothing happened.
-
- ═══════════════════════════════════════════════════════════════
- [strippath {source} {destination}]
-
- This assumes that the {source} contains a pathed filename and
- strips the path from it, leaving only the filename in the
- {destination} noun.
-
- ═══════════════════════════════════════════════════════════════
- [msgtext]
-
- This causes the message body of the current message to be
- displayed.
-
- ═══════════════════════════════════════════════════════════════
- [mininput {noun}]
-
- Sets the minimum input length of the next [getln] keyword. This
- means that the user will not be allowed to hit Enter until s/he
- has typed at least the specified number of characters.
-
-
-
- NanoBBS - UFO Language Documentation Page 32
-
-
- ═══════════════════════════════════════════════════════════════
- [maxinput {noun}]
-
- Sets the maximum input length of the next [getln] keyword.
-
- ═══════════════════════════════════════════════════════════════
- [quit]
-
- Exits the current UFO file immediately
-
- ═══════════════════════════════════════════════════════════════
- [hangup]
-
- Hangs up on the user immediately
-
- ═══════════════════════════════════════════════════════════════
- [fastlogoff]
-
- This is the same as [hangup] except that it's a little less
- impolite about it. This is what happens when a user hits ^G at
- the canned main menu.
-
- ═══════════════════════════════════════════════════════════════
- [ansi_on]
-
- Turns ANSi colours on.
-
- ═══════════════════════════════════════════════════════════════
- [ansi_off]
-
- Turns ANSi colours off.
-
- ═══════════════════════════════════════════════════════════════
- [cleol]
-
- Clears to end of line
-
- ═══════════════════════════════════════════════════════════════
- [cls]
-
- Clears the screen
-
- ═══════════════════════════════════════════════════════════════
- [save_xy]
-
- Saves the cursor position. Basically executes an ANSi SCP
- command.
-
- ═══════════════════════════════════════════════════════════════
- [restore_xy]
-
- Restores the cursor to the saved position. Basically executes
- an ANSi RCP command.
-
-
-
-
- NanoBBS - UFO Language Documentation Page 33
-
-
- ═══════════════════════════════════════════════════════════════
- [ansi_dsr]
-
- Sends an ANSi DSR (Device Status Request) to the remote modem.
-
- ═══════════════════════════════════════════════════════════════
- [ansi_autodetect]
-
- Attempts to autodetect ANSi
-
- ═══════════════════════════════════════════════════════════════
- [blink]
-
- Turns on blinking characters.
-
- ═══════════════════════════════════════════════════════════════
- [noblink]
- [steady]
-
- Turns off blinking characters. [noblink] and [steady] are
- direct synonyms which compile into exactly the same code.
-
- ═══════════════════════════════════════════════════════════════
- [clrattr]
-
- Sets the text colour to light grey on a black background.
-
- ╔═════════════════════════════════════════════════════════════╗
- ║ COLOURS ║
- ║ ║
- ║ If used by themselves or with the FG, COLOUR, FOREGROUND ║
- ║ keywords, these colour keywords all set the foreground ║
- ║ colour. ║
- ╚═════════════════════════════════════════════════════════════╝
-
- ═══════════════════════════════════════════════════════════════
- [black]
-
- Changes colour to black.
-
- ═══════════════════════════════════════════════════════════════
- [red]
-
- Changes colour to red.
-
- ═══════════════════════════════════════════════════════════════
- [green]
-
- Changes colour to green.
-
- ═══════════════════════════════════════════════════════════════
- [brown]
-
- Changes colour to brown.
-
-
-
- NanoBBS - UFO Language Documentation Page 34
-
-
- ═══════════════════════════════════════════════════════════════
- [blue]
-
- Changes colour to blue.
-
- ═══════════════════════════════════════════════════════════════
- [magenta]
-
- Changes colour to magenta.
-
- ═══════════════════════════════════════════════════════════════
- [cyan]
-
- Changes colour to cyan.
-
- ═══════════════════════════════════════════════════════════════
- [gray]
-
- Changes colour to grey.
-
- ═══════════════════════════════════════════════════════════════
- [grey]
-
- Changes colour to grey (and is correctly spelled)
-
- ═══════════════════════════════════════════════════════════════
- [darkgray]
-
- Changes colour to dark grey.
-
- ═══════════════════════════════════════════════════════════════
- [darkgrey]
-
- Changes colour to dark grey.
-
- ═══════════════════════════════════════════════════════════════
- [lightred]
-
- Changes colour to light red. Not pink.
-
- ═══════════════════════════════════════════════════════════════
- [lightgreen]
-
- Changes colour to light green.
-
- ═══════════════════════════════════════════════════════════════
- [yellow]
-
- Changes colour to yellow.
-
- ═══════════════════════════════════════════════════════════════
- [lightblue]
-
- Changes colour to light blue.
-
-
-
- NanoBBS - UFO Language Documentation Page 35
-
-
- ═══════════════════════════════════════════════════════════════
- [lightmagenta]
-
- Changes colour to light magenta.
-
- ═══════════════════════════════════════════════════════════════
- [lightcyan]
-
- Changes colour to light cyan.
-
- ═══════════════════════════════════════════════════════════════
- [white]
-
- Changes colour to white.
-
- ═══════════════════════════════════════════════════════════════
- [background {colour}]
-
- Sets background colour
-
- ═══════════════════════════════════════════════════════════════
- [bg {colour}]
-
- Sets background colour
-
- ═══════════════════════════════════════════════════════════════
- [on {colour}]
-
- Sets background colour
-
- ═══════════════════════════════════════════════════════════════
- [foreground {colour}]
-
- Sets foreground colour. This keyword is redundant and is
- included for syntactical purists only.
-
- ═══════════════════════════════════════════════════════════════
- [fg {colour}]
-
- Sets foreground colour. This keyword is redundant and is
- included for syntactical purists only.
-
- ═══════════════════════════════════════════════════════════════
- [color {colour}]
-
- Sets foreground colour. This keyword is redundant and is
- included for syntactical purists only.
-
- ═══════════════════════════════════════════════════════════════
- [colour {colour}]
-
- Sets foreground colour. This keyword is redundant and is
- included for syntactical purists only.
-
-
-
-
- NanoBBS - UFO Language Documentation Page 36
-
-
- ═══════════════════════════════════════════════════════════════
- [cursor_up]
-
- Moves the cursor up one line (if allowed).
-
- ═══════════════════════════════════════════════════════════════
- [cursor_down]
-
- Moves the cursor down one line (if allowed).
-
- ═══════════════════════════════════════════════════════════════
- [cursor_left]
-
- Moves the cursor left one column (if allowed). A backspace
- would be enormously faster if you can get away with it.
-
- ═══════════════════════════════════════════════════════════════
- [cursor_right]
-
- Moves the cursor right one column (if allowed). A space would
- be enormously faster if you can get away with it.
-
- ═══════════════════════════════════════════════════════════════
- [cursor_up# {noun}]
-
- Moves the cursor up {noun} lines (if allowed).
-
- ═══════════════════════════════════════════════════════════════
- [cursor_down# {noun}]
-
- Moves the cursor down {noun} lines (if allowed).
-
- ═══════════════════════════════════════════════════════════════
- [cursor_left# {noun}]
-
- Moves the cursor left {noun} columns (if allowed). A bunch of
- backspaces would be better if you know how many.
-
- ═══════════════════════════════════════════════════════════════
- [cursor_right# {noun}]
-
- Moves the cursor right {noun} columns (if allowed). A bunch of
- spaces would be better if you know how many.
-
- ═══════════════════════════════════════════════════════════════
- [cursor_pos {noun1} {noun2}]
-
- Moves the cursor to {noun1},{noun2} where {noun1} is the column
- and {noun2} is the line.
-
- ═══════════════════════════════════════════════════════════════
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 37
-
-
- ╔═════════════════════════════════════════════════════════════╗
- ║ UFO supports most of the RIPscrip protocol. ║
- ║ ║
- ║ UFO RIPscrip keywords allow any noun to be passed as a ║
- ║ parameter. The usual rules of noun syntax apply; numeric ║
- ║ constants need no quotes but text constants including ║
- ║ filenames are required to be enclosed in quotes. ║
- ╚═════════════════════════════════════════════════════════════╝
- ═══════════════════════════════════════════════════════════════
- [rip_text_window {x0} {y0} {x1} {y1} {wrap} {size}]
-
- This defines the size and other parameters of the text window.
- This is a window in which plain text (ASCII and ANSI) is
- displayed, and it is usually smaller than the whole screen,
- which can display graphics.
-
- {x0} and {y0} define the absolute top left corner of the text
- window, and {x1} and {y1} define the lower right corner. These
- are absolute character co-ordinates as if the text window were
- full-screen.
-
- {wrap} simply indicates whether text in the window should wrap
- when the right edge of the window is reached. This can be YES
- or NO. If YES, text will wrap as expected in a normal ASCII
- terminal, otherwise the cursor will stay at the rightmost edge
- until a newline (cr+lf) is encountered. Normally {wrap} ought
- to be YES.
-
- {size} defines the character size of the text window. There are
- five possible combinations.
-
- ╔══════╤═══════╤═════════╤═══════╗
- ║ Size │ Font │ Max │ Max ║
- ║ Code │ Size │ Columns │ Lines ║
- ╟──────┼───────┼─────────┼───────╢
- ║ 0 │ 8x8 │ 80 │ 43 ║
- ║ 1 │ 7x8 │ 91 │ 43 ║
- ║ 2 │ 8x14 │ 80 │ 25 ║
- ║ 3 │ 7x14 │ 91 │ 25 ║
- ║ 4 │ 16x14 │ 40 │ 25 ║
- ╚══════╧═══════╧═════════╧═══════╝
-
- The maximum columns and lines are zero based, meaning (for
- example) that in mode 0 you can have a minimum {x0} and {x1} of
- 0 and a maximum {x0} and {x1} of 79, and so on for the other
- modes. And part of the screen not part of the window will not
- be touched by your plain text.
-
- If you set all six parameters to 0 (including the yes/no wrap
- parameter) then plain text and non-RIP sequences will be ignored
- by the user's terminal, as if the window were shut off
- completely.
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 38
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_viewport {x0} {y0} {x1} {y1}]
-
- This simply defines the x and y co-ordinates of the RIP graphics
- window (aka the "viewport"). All RIP graphics output is
- displayed in this window, while ASCII and ANSI plain text is
- displayed in the [rip_text_window] explained previously. As in
- the previous keyword, {x0} and {y0} define the top left corner
- of the viewport while {x1} and {y1} define the lower right
- corner. These co-ordinates (and all RIP graphics co-ordinates)
- are based on a 640x350 screen size, so {x0} and {x1} can be from
- 0 to 639, and {y0} and {y1} can be from 0 to 349. It should be
- noted that Ripterm uses the bottom (highest-numbered) dozen or
- so lines of the screen for a status bar and it IS possible to
- overwrite the status bar unless you shrink the viewport a bit
- first.
-
- ═══════════════════════════════════════════════════════════════
- [rip_reset_windows]
-
- This has no parameters. It resets both the text window and the
- graphics viewport to full-screen size. It also clears the
- screen to the currently defined background colour, removes all
- the mouse regions and erases the "clipboard." This should be
- used before executing a non-RIP external program.
-
- ═══════════════════════════════════════════════════════════════
- [rip_erase_window]
-
- This has no parameters. It clears the text window to the
- currently defined background colour. This will also clear any
- part of the graphics viewport that is overlapped by the text
- window.
-
- ═══════════════════════════════════════════════════════════════
- [rip_erase_view]
-
- This has no parameters. It clears the graphics viewport to the
- currently defined background colour. This will also clear any
- part of the text window that is overlapped by the graphics
- viewport.
-
- ═══════════════════════════════════════════════════════════════
- [rip_gotoxy {x} {y}]
-
- This sets the position of the cursor in the text window to the
- co-ordinates specified by {x} and {y}. These co-ordinates are
- zero-based meaning that [rip_gotoxy 0 0] is the same as homing
- the cursor. This is important to remember since ANSI is
- one-based.
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 39
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_home]
-
- This has no parameters. It sets the position of the cursor in
- the text window to the upper left corner, just like an ANSI
- cursor home command.
-
- ═══════════════════════════════════════════════════════════════
- [rip_erase_eol]
-
- This has no parameters. It clears the current text line from
- the cursor position to the rightmost edge of the text window.
- It is equivalent to an ANSI cleol command.
-
- ═══════════════════════════════════════════════════════════════
- [rip_colour {colour}]
- [rip_color {colour}]
-
- This keyword is available in both the correct and American
- spellings.
-
- This sets the current colour for both text and graphics
- keywords. There are 16 colours to choose from. If you are
- using the default palette, you may use the colour name (e.g.
- blue, red, magenta, yellow, etc.) instead of its palette
- position (they are synonymous). Colour 0 is always the
- background colour, even if you have set the palette so that
- colour 0 is not black.
-
- Here is a list of the default colours (and the spellings of
- their english synonyms)
-
- ╔═════════════════╤═════════════════╗
- ║ 0 Black │ 8 Darkgray ║
- ║ 1 Blue │ 9 Lightblue ║
- ║ 2 Green │ 10 Lightgreen ║
- ║ 3 Cyan │ 11 Lightcyan ║
- ║ 4 Red │ 12 Lightred ║
- ║ 5 Magenta │ 13 Lightmagenta ║
- ║ 6 Brown │ 14 Yellow ║
- ║ 7 Lightgray │ 15 White ║
- ╚═════════════════╧═════════════════╝
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 40
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_set_palette {c0} {c1} {c2} {c3} {c4} {c5} {c6} {c7}
- {c8} {c9} {c10} {c11} {c12} {c13} {c14} {c15}]
-
- {note: this keyword does not have to be split into two lines as
- shown here.}
-
- This keyword really does require sixteen parameters! It defines
- all sixteen colours of the palette from the 64-colour master
- palette. Consult an EGA manual for a list of the 64 colours, or
- experiment with the keyword to see what kind of weird and
- wonderful results you can come up with! These colours can be
- from 0 to 63. All sixteen parameters must be present or NCOMP
- will refuse to compile this keyword (and the NanoBBS embedded
- language equivalent will give unpredictable results).
-
- ═══════════════════════════════════════════════════════════════
- [rip_one_palette {colour} {value}]
-
- This sets just one colour in the palette. The {colour} is from
- 0 to 15 and defines the palette position to be modified, and the
- {value} is from 0 to 63 and defines the EGA master palette
- colour to be assigned to the colour.
-
- ═══════════════════════════════════════════════════════════════
- [rip_write_mode {mode}]
-
- This sets the drawing mode for all graphics keywords. {mode}
- can be either NORMAL or XOR. In the normal mode, graphics are
- simply overwritten on existing graphics, while in XOR mode the
- graphics are written in "complementary" mode, meaning
- effectively that if you draw something in XOR mode you can erase
- it non-destructively by drawing the same thing again, also in
- XOR mode. This is useful for animation.
-
- ═══════════════════════════════════════════════════════════════
- [rip_move {x} {y}]
-
- This moves the graphics cursor to the position specified by {x}
- and {y}. The author sees no practical use for this since all
- the graphics and graphic text primitives allow you to specify a
- location anyway, but the Telegrafix people suggest that this
- keyword may be needed for future versions of the RIP
- specification, so it is included for upward compatibility.
-
- ═══════════════════════════════════════════════════════════════
- [rip_text {text}]
-
- This displays text at the current position in the graphics
- viewport. The {text} must be enclosed in "quotes". The text
- displayed by this keyword is subject to the current colour,
- drawing mode and font styles. The graphics "cursor" position is
- set to the immediate right of the text.
-
-
-
-
- NanoBBS - UFO Language Documentation Page 41
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_text_xy {x} {y} {text}]
-
- This is the same as [rip_text] except that the {x} and {y}
- location within the graphics viewport is also specified, making
- this more efficient than an equivalent combination of the
- [rip_move] and [rip_text] keywords. The {text} still has to be
- in quotes.
-
- ═══════════════════════════════════════════════════════════════
- [rip_font_style {font} {direction} {size}]
-
- This sets the current font, direction and size used in the
- [rip_text] and [rip_text_xy] keywords.
-
- {font} can be DEFAULT (an 8x8 bitmapped font), TRIPLEX, SMALL,
- SANSSERIF, and GOTHIC. The latter four are scalable vector
- fonts.
-
- {direction} can be either HORIZONTAL or VERTICAL. These can be
- abbreviated to HORIZ or VERT.
-
- {size} is the magnification factor. It can be from 1 to 10,
- where 1 is normal size, 2 is double size, 3 is triple size etc.
-
- ═══════════════════════════════════════════════════════════════
- [rip_pixel {x} {y}]
-
- This plots a pixel at the {x},{y} screen location in the current
- colour. Although the drafters of the protocol document didn't
- seem to see much use for this keyword, it can be used
- quite effectively in UFO, with the random starfield displayed in
- RIPSTARF.UFO as a compact example.
-
- ═══════════════════════════════════════════════════════════════
- [rip_line {x0} {y0} {x1} {y1}]
-
- This draws a line from {x0},{y0} to {x1},{y1} in the current
- drawing colour. It uses the current line drawing style and
- thickness and the current drawing mode.
-
- ═══════════════════════════════════════════════════════════════
- [rip_rectangle {x0} {y0} {x1} {y1}]
-
- This draws a hollow rectangle where {x0},{y0} and {x1},{y1} are
- any two diagonally opposite corners. It is subject to the
- current colour, line style and drawing mode.
-
- ═══════════════════════════════════════════════════════════════
- [rip_bar {x0} {y0} {x1} {y1}]
-
- This draws a rectangle much as the [rip_rectangle]
- keyword does, except that the rectangle is filled with the
- current fill colour (NOT the drawing colour! See the
- [rip_fill_style] keyword later in this manual!)
-
-
- NanoBBS - UFO Language Documentation Page 42
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_circle {x} {y} {radius}]
-
- This draws a circle of the specified radius with its centre at
- {x},{y}. The circle is drawn Y-corrected for the EGA aspect
- ratio, so the radius is valid in x pixels but not y pixels.
-
- ═══════════════════════════════════════════════════════════════
- [rip_oval {x} {y} {start_angle} {end_angle} {x_rad} {y_rad}]
-
- This draws an elliptical arc centred at {x},{y} with a
- horizontal radius of {x_rad} and a vertical radius of {y_rad}.
- The current colour and line thickness are used.
-
- The {start_angle} and {end_angle} define how much of the full
- ellipse is to be drawn, in degrees. The arc is drawn
- counterclockwise.
-
- The compass below illustrates how angles work in this and the
- other keywords which use them.
- ┌────────────────────────────────┐
- │ 90 │
- │ 135 | 45 │
- │ \ | / │
- │ \ | / │
- │ 180 ------ o ------ 0 or 360 │
- │ / | \ │
- │ / | \ │
- │ 225 | 315 │
- │ 270 │
- └────────────────────────────────┘
-
- ═══════════════════════════════════════════════════════════════
- [rip_filled_oval {x} {y} {x_rad} {y_rad}]
-
- This draws a complete filled oval centred at {x},{y} with a
- horizontal radius of {x_rad} and a vertical radius of {y_rad}.
- The outline of the ellipse is drawn using the current drawing
- colour and is filled with the current fill colour (see
- [rip_fill_style]). The outline thickness is the same as the
- line thickness.
-
- ═══════════════════════════════════════════════════════════════
- [rip_arc {x} {y} {start_angle} {end_angle} {radius}]
-
- This keyword draws an arc - a segment of a circle. It is
- centred at {x},{y} and has a radius specified by {radius}. The
- arc is drawn counterclockwise from {start_angle} to {end_angle}.
- The current drawing colour and line thickness are used. See the
- [rip_oval] keyword for a compass of angle positions.
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 43
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_oval_arc {x} {y} {start_angle} {end_angle} {x_rad} {y_rad}]
-
- This keyword draws an elliptical arc - a segment of an oval. It
- is centred at {x},{y}. Syntactically and functionally it is
- identical to the [rip_oval] keyword.
-
- ═══════════════════════════════════════════════════════════════
- [rip_pie_slice {x} {y} {start_angle} {end_angle} {radius}]
-
- This draws a circular "pie slice" - a circular arc with the ends
- of the arc tied to the center point by straight lines. It works
- much the same way as the [rip_arc] function except that the pie
- slice is filled with the current fill colour and style. As
- always, the arc is drawn counterclockwise according to the
- compass illustrated previously. The {x} and {y} refer to the
- center point (where the straight lines converge) as if the
- circle were whole.
-
- ═══════════════════════════════════════════════════════════════
- [rip_oval_pie_slice {x} {y} {start_angle} {end_angle}
- {x_rad} {y_rad}]
-
- This draws an elliptical "pie slice" - an elliptical arc with
- the ends of the arc tied to the center point by straight lines.
- It works much the same as the [rip_oval_arc] keyword except that
- the pie slice is filled with the current fill colour and style.
- As always, the arc is drawn counterclockwise according to the
- compass illustrated previously. The {x} and {y} refer to the
- center point (where the straight lines converge) as if the
- ellipse were whole.
-
- ═══════════════════════════════════════════════════════════════
- [rip_bezier {x0} {y0} {x1} {y1} {x2} {y2} {x3} {y3} {segments}]
-
- This draws a custom Bezier curve. There are four points used to
- create the curve. {x0},{y0} and {x3},{y3} define the start and
- end points of the curve, while {x1},{y1} and {x2},{y2} are
- points that are not on the curve but which tend to "pull" the
- curve in their direction. Since the curve is drawn in line
- segments, the {segments} parameter allows to to define the
- number of line segments to use to draw the curve - more segments
- give a smoother, slower-drawing curve while fewer give a faster,
- jaggier curve.
-
- (continued next page)
-
-
-
-
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 44
-
-
- The illustration below shows generally how the curves work:
- ┌───────────────────────────────────────────────────────────────┐
- │ {x1,y1} │
- │ + │
- │ {x3,y3} │
- │ +* │
- │ * │
- │ **** * │
- │ ** *** * │
- │ * ** * │
- │ * * * │
- │ * ** * │
- │ * *** * │
- │ + *** ** │
- │ {x0,y0} ***** *** │
- │ ********* │
- │ │
- │ + │
- │ {x2,y2} │
- └───────────────────────────────────────────────────────────────┘
-
- ═══════════════════════════════════════════════════════════════
- [rip_polygon {points} {x0} {y0} {x1} {y1} .. {xn} {yn}]
-
- This draws a custom polygon with up to 512 sides. The {points}
- parameter specifies how many vertices there are in the whole
- polygon, and there must be exactly that many {x,y} parameter
- pairs following. That means that if you specify 7 points, there
- must be 14 parameters following. If there are more there could
- be unpredictable results, and if there are less UFO.EXE will
- abort with an error message. Each {x,y} pair specifies the
- location of a vertex.
-
- The polygon is always closed. After the last vertex is
- specified, a line is automatically drawn from the last one to
- the first one.
-
- The polygon drawn with this keyword is subject to the drawing
- colour, drawing mode, line pattern, and line thickness.
-
- ═══════════════════════════════════════════════════════════════
- [rip_fill_poly {points} {x0} {y0} {x1} {y1} .. {xn} {yn}]
-
- This draws a custom polygon with up to 512 vertices, much as the
- previous [rip_polygon] keyword, but this keyword draws a filled
- polygon using the current fill colour and style.
-
- ═══════════════════════════════════════════════════════════════
- [rip_fill {x} {y} {border}]
-
- This executes a flood fill starting from the {x},{y} screen
- location. It fills the screen with the fill colour and style up
- to the {border} colour (which can be specified as a word rather
- than a number as all colours). Caveat: take care that the
- region you want to fill is completely enclosed by the {border}
- colour or the fill will "leak" and flood the whole viewport!
-
- NanoBBS - UFO Language Documentation Page 45
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_line_style {style} {thickness}]
- [rip_line_style {style} {userpattern} {thickness}]
-
- This keyword defines the "style" used for drawing straight
- lines. The {style} parameter specifies the style of line used,
- and it can be NORMAL, DOTTED, CENTERED, DASHED or CUSTOM.
-
- The {thickness} parameter defines the thickness in pixels of
- lines. It can be either 1 or 3. No other thicknesses are
- available in the RIP specification.
-
- The {userpattern} parameter is used only when the {style} is
- CUSTOM. If the style is not {custom} then the {userpattern}
- must be omitted. The {userpattern} is a 16-bit binary
- representation of the recurring pattern in the custom line
- style.
-
- Here are a few examples:
- ╔════════════════════════════════════════════════════════╗
- ║ Decimal ║
- ║ Pixel Pattern Binary Representation Parameter ║
- ║ ┌────────────────┐ ┌────────────────┐ ┌─────┐ ║
- ║ │- - - - - - - - │ │1010101010101010│ │43690│ ║
- ║ │ │ │ │ │ │ ║
- ║ │ - --- - --- │ │0100111001001110│ │36494│ ║
- ║ │ │ │ │ │ │ ║
- ║ │--- --- --- --- │ │1110111011101110│ │61166│ ║
- ║ │ │ │ │ │ │ ║
- ║ │-- -- -- -- │ │1100110011001100│ │52428│ ║
- ║ └────────────────┘ └────────────────┘ └─────┘ ║
- ╚════════════════════════════════════════════════════════╝
-
- If you can calculate the decimal number for an arbitrary pixel
- pattern in your head, you probably spend too much time with
- computers ;-) The rest of us will do better with a good quality
- base-converting calculator. If there is enough demand, a quasi-
- graphical method of entering pixel patterns will be offered in a
- future version.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 46
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_fill_style {pattern} {colour}]
-
- This sets the "fill style" and "fill colour" used by many
- keywords in the protocol.
-
- The {pattern} parameter refers to one of twelve preset fill
- parameters, numbered from 0 to 11. Here they are:
- ┌───────────────────────────────┬──────────────────────────────┐
- │ 0 Background colour fill │ 6 Light backslash line fill │
- │ 1 Solid fill colour fill │ 7 Light crosshatch fill │
- │ 2 Thick line fill │ 8 Heavy crosshatch fill │
- │ 3 Light diagonal line fill │ 9 Interleaved line fill │
- │ 4 Normal diagonal line fill │ 10 Light dot fill │
- │ 5 Normal backslash line fill │ 11 Heavy dot fill │
- └───────────────────────────────┴──────────────────────────────┘
-
- The {colour} parameter simply sets the fill colour. It can be a
- colour name or a palette position from 0 to 15.
-
- ═══════════════════════════════════════════════════════════════
- [rip_fill_pattern {c1} {c2} {c3} {c4} {c5} {c6} {c7} {c8} {colour}]
-
- This allows you to define a custom fill pattern for keywords
- that use the fill style. When this keyword is executed it
- overrides the current fill pattern. The custom fill pattern is
- a matrix 8 pixels high and 8 pixels wide. Each of the first
- eight parameters is an 8-bit line of pixels. The {colour}
- parameter sets the fill colour.
-
- Here are a couple of examples:
- ╔════════════════════════════════════════════════════════╗
- ║ Decimal ║
- ║ Bit Pattern Binary Parameter ║
- ║ ┌─────────────────┐ ┌────────┐ ┌──────────┐ ║
- ║ │ * * * * * * * * │ │11111111│ │{c1} = 255│ ║
- ║ │ * ∙ ∙ ∙ ∙ ∙ ∙ * │ │10000001│ │{c2} = 129│ ║
- ║ │ * ∙ ∙ ∙ ∙ ∙ ∙ * │ │10000001│ │{c3} = 129│ ║
- ║ │ * ∙ ∙ ∙ ∙ ∙ ∙ * │ │10000001│ │{c4} = 129│ ║
- ║ │ * * * * * * * * │ │11111111│ │{c5} = 255│ ║
- ║ │ ∙ ∙ ∙ ∙ * ∙ ∙ ∙ │ │00001000│ │{c6} = 16 │ ║
- ║ │ ∙ ∙ ∙ ∙ * ∙ ∙ ∙ │ │00001000│ │{c7} = 16 │ ║
- ║ │ ∙ ∙ ∙ ∙ * ∙ ∙ ∙ │ │00001000│ │{c8} = 16 │ ║
- ║ └─────────────────┘ └────────┘ └──────────┘ ║
- ║ ║
- ║ ┌─────────────────┐ ┌────────┐ ┌──────────┐ ║
- ║ │ * * ∙ ∙ ∙ * * * │ │11000111│ │{c1} = 199│ ║
- ║ │ * ∙ * * * ∙ * * │ │10111011│ │{c2} = 187│ ║
- ║ │ ∙ * * * * * ∙ ∙ │ │01111100│ │{c3} = 124│ ║
- ║ │ * ∙ * * * ∙ * * │ │10111011│ │{c4} = 187│ ║
- ║ │ * * ∙ ∙ ∙ * * * │ │11000111│ │{c5} = 199│ ║
- ║ │ * ∙ * * * ∙ * * │ │10111011│ │{c6} = 187│ ║
- ║ │ ∙ * * * * * ∙ ∙ │ │01111100│ │{c7} = 124│ ║
- ║ │ * ∙ * * * ∙ * * │ │10111011│ │{c8} = 187│ ║
- ║ └─────────────────┘ └────────┘ └──────────┘ ║
- ╚════════════════════════════════════════════════════════╝
-
- NanoBBS - UFO Language Documentation Page 47
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_mouse {num} {x0} {y0} {x1} {y1} {click} {zoom} {text}]
-
- This keyword sets up a rectangular mouse region on the screen.
- If the user clicks the left mouse button while the mouse cursor
- is in this region, the terminal will send the {text} back to
- NanoBBS. This is how RIP buttons are tied to existing keyword
- keys. The region is defined by {x0},{y0} indicating the upper
- left corner and {x1},{y1} defining the lower right.
-
- {click} can be YES or NO, and if YES it will invert the mouse
- region while the mouse button is pressed, offering visible
- feedback.
-
- {zoom} can be YES or NO, and if YES it will cause the text
- window to be "zoomed" to full screen and will clear the window.
- This should be used if the {text} will cause NanoBBS to go into
- an area (or external program) that does not support RIPscrip.
-
- ═══════════════════════════════════════════════════════════════
- [rip_kill_mouse_fields]
-
- This has no parameters. It removes all existing mouse regions.
- This is best used at the beginning of a new screen, so that the
- previous screen's mouse fields no longer apply.
-
- ═══════════════════════════════════════════════════════════════
- [rip_begin_text {x0} {y0} {x1} {y1}]
-
- This defines a rectangular region of the viewport to display
- text. This keyword should be followed by one or more
- [rip_region_text] keywords and then by a [rip_end_text] keyword.
-
- The region is defined by {x0},{y0} representing the upper left
- corner and {x1},{y1} representing the lower right corner.
-
- ═══════════════════════════════════════════════════════════════
- [rip_region_text {justify} {text}]
-
- This keyword is used to write text in the text region specified
- by the [rip_begin_text] keyword.
-
- The {justify} parameter can be YES or NO. If YES, it will do a
- left-right "fill justify" on the text, inserting space as necessary
- to keep both the left and right margins of the text in line.
-
- The text region does not scroll. If the text runs below the
- bottom of the region it is not displayed.
-
- An example sequence of region text:
-
- [rip_begin_text 10 10 400 200]
- [rip_region_text yes "Hello there! This is a demo"]
- [rip_region_text yes "of RIPscrip Region Text in"]
- [rip_region_text no "UFO!"]
- [rip_end_text]
-
- NanoBBS - UFO Language Documentation Page 48
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_end_text]
-
- This has no parameters. It signals the end of a region text
- block.
-
- ═══════════════════════════════════════════════════════════════
- [rip_get_image {x0} {y0} {x1} {y1}]
-
- This copies a region of the screen to the "clipboard" - an
- internal storage area - for future use. It can be used with the
- [rip_put_image] keyword to quickly move a region of graphics to
- another part of the screen, or to temporarily store a region of
- graphics which you expect to be overwritten but want to be able
- to restore. {x0},{y0} specifies the upper left corner of the
- region and {x1},{y1} specifies the lower right.
-
- ═══════════════════════════════════════════════════════════════
- [rip_put_image {x} {y} {mode}]
-
- This "pastes" the clipboard contents to the screen, with the
- upper left corner defined by {x},{y}.
-
- {mode} can be any of the following:
-
- COPY - overwrites whatever is on the screen in that region
- XOR - writes an XOR complement of the clipboard and the
- existing screen data
- OR - logically OR's the clipboard with the existing screen
- data
- AND - logically AND's the clipboard with the existing screen
- data
- NOT - writes the inverse of the clipboard to the screen
-
- ═══════════════════════════════════════════════════════════════
- [rip_write_icon {filename}]
-
- This writes the contents of the clipboard to a disk file on the
- user's system. The file's name is specified in {filename}. It
- is stored as a RIPscrip icon which can later be loaded with the
- [rip_load_icon] keyword.
-
- No path information is allowed in the filename. This keyword is
- ignored if the clipboard is empty.
-
-
- [rip_load_icon {x} {y} {mode} {clipboard} {filename}]
-
- This loads an icon from the user's disk with the specified
- filename. The icon is placed at {x},{y}. The {mode} parameter
- defines the mode in which it is written - this mode is used the
- same way as in the [rip_put_image] keyword.
-
- The {clipboard} can be YES or NO, and if it is YES it will cause
- the icon to also be loaded into the clipboard.
-
-
- NanoBBS - UFO Language Documentation Page 49
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_button_style {width} {height} {orientation} {flags}
- {d_fore} {d_back} {bright} {dark} {surface}
- {group} {flags2} {uline_col} {corner_col}]
-
- This is the most complicated keyword in the NanoBBS
- implementation of the RIPscrip protocol. For a complete
- explanation of the keyword you should refer to the original
- RIPscrip specification from Telegrafix.
-
- This keyword defines how mouse buttons are displayed and
- handled. It does not display or draw anything, but sets up the
- numerous modes which buttons created with the [rip_button]
- keyword will use.
-
- The {width} and {height} parameters refer to the size of the
- button in pixels.
-
- The {orientation} parameter can be one of ABOVE, LEFT, CENTER,
- RIGHT, or BENEATH. It refers to the positioning of the optional
- text label. The label is written either above, to the left of,
- in the center of, to the right of, or below the button
- respectively.
-
- The {bevsize} parameter is the width of the bevel effect in
- pixels. If the bevel flag (see "flags") is set, this parameter
- has effect, otherwise it is ignored. It can be any valyue of
- zero or more.
-
- The {d_fore} and {d_back} parameters refer to the foreground and
- "dropshadow" colours of the text label, respectively. The
- {d_back} colour is not used if the dropshadow flag is not set.
-
- The {bright}, {dark} and {surface} parameters represent the
- highlighted, shadowed and regular surface colours used with the
- special effects styles (see flags).
-
- The {uline_col} is the colour of the underline in the text
- label (if present).
-
- The {corner_col} is the colour of the corners of the bevel,
- recess, and other special button modes.
-
- The {group} parameter specifies the button group that subsequent
- [rip_button] keywords are associated with. For more information
- on button groups, radio buttons, checkbox buttons and other
- button arcana, please refer to Telegrafix's original RIPscrip
- specification. This can be from 0 to 35.
-
- The {flags} parameter is a bitmapped 16-bit integer. This
- parameter is determined by adding up the bit values of all the
- flags you want to use. Note that some flags are mutually
- incompatible.
-
- (continued next page)
-
-
- NanoBBS - UFO Language Documentation Page 50
-
-
- Here is a table of the {flags} parameter bitmap values.
- ╔═════════╤════════════════════════════════════════════╗
- ║ Bit │ ║
- ║ Value │ Meaning ║
- ╟─────────┼────────────────────────────────────────────╢
- ║ 1 │ Clipboard button ║
- ║ 2 │ Button can be inverted ║
- ║ 4 │ Reset screen ║
- ║ 8 │ Use the "chisel" effect ║
- ║ 16 │ Use the "recessed" effect ║
- ║ 32 │ Use a "dropshadow" for the text label ║
- ║ 64 │ Stamp image to the clipboard ║
- ║ 128 │ "Icon" Button ║
- ║ 256 │ "Plain" Button ║
- ║ 512 │ Use the "bevel" effect ║
- ║ 1024 │ Mouse button ║
- ║ 2048 │ Underline the "hot key" in the text label ║
- ║ 4096 │ Use hot icons ║
- ║ 8192 │ Adjust vertical centering of the label ║
- ║ 16384 │ Belongs to a radio group ║
- ║ 32768 │ Use the "sunken" effect ║
- ╚═════════╧════════════════════════════════════════════╝
-
- So, for example, if you want to make a mouse button with the
- bevel effect you add up the bit values for these two flags. The
- mouse button flag has a bit value of 1024, and the bevel effect
- flag has a bit value of 512. Add these up and you get 1536,
- which is the value you should place in the {flags} parameter for
- these options.
-
- The {flags2} parameter is (as of this version) a five-bit
- integer bitmap similar to the {flags} parameter. Its value is
- determined in the same way as the {flags} parameter, by adding
- up the bit values.
-
- Here is a table of those bit values:
- ╔═════════╤════════════════════════════════════════════╗
- ║ Bit │ ║
- ║ Value │ Meaning ║
- ╟─────────┼────────────────────────────────────────────╢
- ║ 1 │ The button is in a checkbox group ║
- ║ 2 │ Highlight the hotkey character ║
- ║ 4 │ Zoom out when clicked ║
- ║ 8 │ Left justify the label ║
- ║ 16 │ Right justify the label ║
- ╚═════════╧════════════════════════════════════════════╝
-
- Please refer to the original RIPscrip specification from
- Telegrafix for a full explanation of the meanings of the two
- {flags} parameters and their various mutual exclusivities.
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 51
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_button {x0} {y0} {x1} {y1} {hotkey} {flags} {iconfile}
- {textlabel} {keyword}]
-
- This creates a new button using the style selected in the
- [rip_button_style] keyword.
-
- The {x0} and {y0} parameters specify the upper left corner of
- the icon.
-
- If no height and width are specified in the [rip_button_style]
- then the {x1} and {y1} refer to the lower right corner,
- otherwise these two parameters are ignored and the button is
- sized according to the button style. This allows for dynamic
- button sizes.
-
- The {hotkey} is the ASCII code (from zero to 255) of the
- keystroke that activates the button. This character, if present
- in the text label, will be underlined in the label if the
- underline flag in the button style is set.
-
- The {flags} parameter is a two-bit binary integer. Here are its
- values:
- ╔═════════╤════════════════════════════════════════════╗
- ║ Bit │ ║
- ║ Value │ Meaning ║
- ╟─────────┼────────────────────────────────────────────╢
- ║ 1 │ Draw the button as already selected ║
- ║ 2 │ The button is default if [Enter] is hit ║
- ╚═════════╧════════════════════════════════════════════╝
-
- The {iconfile} parameter is the filename of an icon to load if
- this is an icon button. Use a null constant "" if this is not
- an icon file.
-
- The {textlabel} parameter is the text of the text label. Use a
- null constant "" if no label is wanted.
-
- The {keyword} parameter is the actual text for the terminal to
- send back to NanoBBS. Technically the specification allows you
- to skip this by using a null constant "". Use a ^ caret to
- specify control characters, e.g. ^M for a carriage return, ^G
- for a beep.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 52
-
-
- ═══════════════════════════════════════════════════════════════
- [rip_copy_region {x0} {y0} {x1} {y1} {dest_line}]
-
- This vertically copies/scrolls a rectangular region of the
- screen. {x0},{y0} define the upper left corner and {x1},{y1}
- define the lower right corner of the region to be copied, and
- {dest_line} is the vertical line number to copy the region to.
-
- The {x0} and {x1} parameters must be evenly divisible by eight
- due to a limitation of the EGA compatible hardware the protocol
- is written for. If either parameter is not evenly divisible by
- eight, the parameters will be adjusted (tending to increase the
- size of the region). If the keyword specifies a copy which
- would partially draw off the screen, the whole keyword is
- ignored.
-
- ═══════════════════════════════════════════════════════════════
- [rip_no_more]
-
- This has no parameters, and simply formally signals the RIPscrip
- compatible terminal that the RIPscrip sequences have ended and
- that further output should be to the text window.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 53
-
-
- ═══════════════════════════════════════════════════════════════
- [pageplay {noun}]
-
- Executes a dazzling performance of the PagePlay(tm) file whose
- filename is in {noun}! Full instructions for the PagePlay music
- system are included in the PagePlay shareware archive, availabel
- from THC Freedom Online BBS.
-
- ═══════════════════════════════════════════════════════════════
- [autoansi]
-
- Attempts to detect ANSi graphics on the remote caller's terminal
- software.
-
-
- ═══════════════════════════════════════════════════════════════
- [addbatch {noun}]
-
- Adds the file(s) in {noun} to the download batch.
-
- ═══════════════════════════════════════════════════════════════
- [delbatch {noun}]
-
- Removes the file in {noun} from the download batch.
-
- ═══════════════════════════════════════════════════════════════
- [clrbatch]
-
- Clears the download batch.
-
- ═══════════════════════════════════════════════════════════════
- [describebatch]
-
- This prompts the user to describe each file currently in the
- batch - this should be called immediately after a download (and
- it is in the canned interface). It will try to extract
- FILE_ID.DIZ from each file first.
-
- ═══════════════════════════════════════════════════════════════
- [ifits {noun}]
-
- This continues to the next [mark] if the number of iterations of
- the current list is evenly divisible by zero. There are several
- kinds of lists in NanoBBS which give you access to the
- iterations; they include the user list, daily caller list, file
- and message area listings, and file search listings.
-
- ═══════════════════════════════════════════════════════════════
- [ifvalidymd {noun}]
-
- If {noun} is a valid YY/MM/DD or YY-MM-DD date, this keyword
- will continue processing to the next [mark], otherwise it will
- skip ahead to the next [mark].
-
-
-
-
- NanoBBS - UFO Language Documentation Page 54
-
-
- ═══════════════════════════════════════════════════════════════
- [ifeq {noun1} {noun2}]
-
- This will continue processing to the next [mark] keyword if the
- two nouns are equal, and will skip until the next [mark] if the
- nouns are inequal. UFO is smart enough to detect whether a
- numeric or alphabetic comparison should be made. Alpha
- comparisons are case-insensitive.
-
- ═══════════════════════════════════════════════════════════════
- [ifne {noun1} {noun2}]
-
- This will continue processing to the next [mark] if the two
- nouns are not equal. If both nouns are numbers then a numerical
- comparison is made, otherwise it is a string comparison. If the
- nouns are equal, NanoBBS skips ahead to the next [mark] (or to
- the end of the file, whichever comes first).
-
- ═══════════════════════════════════════════════════════════════
- [iflt {noun1} {noun2}]
-
- Processes until the next [mark] if {noun1} is less than {noun2}
- or is alphabetically lower.
-
- ═══════════════════════════════════════════════════════════════
- [ifgt {noun1} {noun2}]
-
- Processes until the next [mark] if {noun1} is greater than
- {noun2} or is alphabetically higher.
-
- ═══════════════════════════════════════════════════════════════
- [iflte {noun1} {noun2}]
-
- Processes until the next [mark] if {noun1} is less than or equal
- to {noun2}.
-
- ═══════════════════════════════════════════════════════════════
- [ifgte {noun1} {noun2}]
-
- Processes until the next [mark] if {noun1} is greater than or
- equal to {noun2}.
-
- ═══════════════════════════════════════════════════════════════
- [cookie {noun}]
-
- Displays a cookie from the cookie file specified in {noun}.
-
- ═══════════════════════════════════════════════════════════════
- [chain {noun}]
-
- Quits the current UFO file and links to the one specified in
- {noun}. This is like a GOTO. Upon exit from the chained file,
- UFO does NOT return to the original file.
-
-
-
-
- NanoBBS - UFO Language Documentation Page 55
-
-
- ═══════════════════════════════════════════════════════════════
- [inc {noun}]
-
- This increments the {noun}. It assumes that the noun contains a
- number. If the noun was not already a number, it is assumed to
- be zero and is incremented to 1.
-
- ═══════════════════════════════════════════════════════════════
- [dec {noun}]
-
- This decrements the {noun}. It assumes that the noun contains a
- number. If the noun was not already a number, it is assumed to
- be zero and is decremented to -1.
-
- ═══════════════════════════════════════════════════════════════
- [shr1 {noun}]
-
- This assumes the noun is a number, specifically a signed 32 bit
- integer, and shifts it bitwise right one position. This is a
- quick and dirty way to divide it by two. If the noun is not a
- number it is assumed to be zero, and will be shr'd, with a
- result of zero.
-
- ═══════════════════════════════════════════════════════════════
- [shl1 {noun}]
-
- This assumes the noun is a number, specifically a signed 32 bit
- integer, and shifts it bitwise left one position. This is a
- quick and dirty way to multiply it by two. If the noun is not a
- number it is assumed to be zero, and will be shl'd, with a
- result of zero.
-
- ═══════════════════════════════════════════════════════════════
- [shr {noun1} {noun2}]
-
- This assumes {noun1} is a number, specifically a signed 32 bit
- integer, and shifts it bitwise right the number of positions
- specified in {noun2}. This is a quick and dirty way to divide by
- powers of two. If the noun is not a number it is assumed to be
- zero, and will be shr'd, with a result of zero.
-
- ═══════════════════════════════════════════════════════════════
- [shl {noun1} {noun2}]
-
- This assumes {noun1} is a number, specifically a signed 32 bit
- integer, and shifts it bitwise left the number of positions
- specified in {noun2}. This is a quick and dirty way to multiply by
- powers of two. If the noun is not a number it is assumed to be
- zero, and will be shl'd, with a result of zero.
-
- ═══════════════════════════════════════════════════════════════
- [add {noun1} {noun2}]
-
- This stores the sum of {noun1} and {noun2} in {noun2}.
-
-
-
- NanoBBS - UFO Language Documentation Page 56
-
-
- ═══════════════════════════════════════════════════════════════
- [sub {noun1} {noun2}]
-
- This subtracts {noun1} from {noun2} and stores the result in
- {noun2}.
-
-
- ═══════════════════════════════════════════════════════════════
- [showsysop {noun}]
-
- This is like [display] except that the noun is only seen on the
- local console.
-
- ═══════════════════════════════════════════════════════════════
- [comment]
-
- Anything between "[comment" and the closing "]" is ignored by
- UFO.
-
- ═══════════════════════════════════════════════════════════════
- [swallowbuffer]
-
- If there are any characters in the input buffer of either the
- comport or the keyboard, this will "swallow" them until both
- settle down.
-
- ═══════════════════════════════════════════════════════════════
- [nonstop]
-
- All output after this will be non-stop until a prompt is hit...
-
- ═══════════════════════════════════════════════════════════════
- [nonstop_off]
-
- This turns off nonstop mode set by the [nonstop] keyword.
-
- ═══════════════════════════════════════════════════════════════
- [moreofftemp]
-
- This temporarily turns off "More? (Y/n)" prompts, making output
- non-stop.
-
- ═══════════════════════════════════════════════════════════════
- [on_deleted] [off_deleted] [tog_deleted] [if_deleted]
-
- [on_deleted] sets the user's deleted bit(!!!) The user will no
- longer be able to logon so use with care!!!
- [off_deleted] turns the deleted bit off.
- [tog_deleted] toggles the deleted bit.
- [if_deleted] continues processing the script if the user is
- deleted, otherwise it jumps to the next [mark].
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 57
-
-
- ═══════════════════════════════════════════════════════════════
- [on_clrscr] [off_clrscr] [tog_clrscr] [if_clrscr]
-
- [on_clrscr] turns on the use of clear-screens.
- [off_clrscr] turns off the use of clear-screens.
- [tog_clrscr] toggles the use of clear-screens.
- [if_clrscr] continues processing the script if the user is using
- clear screens, otherwise it jumps to the next
- [mark].
-
- ═══════════════════════════════════════════════════════════════
- [on_ansi] [off_ansi] [tog_ansi] [if_ansi]
-
- [on_ansi] turns on the use of ANSI colours.
- [off_ansi] turns off the use of ANSI colours.
- [tog_ansi] toggles the use of ANSI colours.
- [if_ansi] continues processing the script if the user is using
- ANSI colours, otherwise it jumps to the next [mark].
-
- ═══════════════════════════════════════════════════════════════
- [on_nolimit] [off_nolimit] [tog_nolimit] [if_nolimit]
-
- [on_nolimit] suspends the user's time limits so s/he can stay on
- line as long as they see fit.
- [off_nolimit] re-enables the user's time limits.
- [tog_nolimit] toggles the no-limit bit.
- [if_nolimit] continues processing the script if the user is
- marked as having no time limit, otherwise it jumps
- to the next [mark].
-
- ═══════════════════════════════════════════════════════════════
- [on_rodent] [off_rodent] [tog_rodent] [if_rodent]
-
- [on_rodent] turns on the "rodent" bit. When this bit is on, the
- user cannot page the SysOp for chat. Useful for
- dealing with users whose paging becomes very
- annoying.
- [off_rodent] turns off the rodent bit, so the user can page again.
- [tog_rodent] toggles the rodent bit.
- [if_rodent] continues processing the script if the user's rodent
- bit is set, otherwise it jumps to the next [mark].
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 58
-
-
- ═══════════════════════════════════════════════════════════════
- [on_toast] [off_toast] [tog_toast] [if_toast]
-
- [on_toast] turns on the "toast" bit. When this bit is on, the
- user gets ONE MORE CALL to the BBS. Immediately upon
- password acceptance and logon, the user is informed that
- the account has been terminated, and then the deleted
- bit is set. The user can continue with the call, or
- you can use a UFO script called from the language
- file to drop the user immediately, at your option.
- By default, the user is allowed to continue his "last
- call."
-
- This feature is intended as a way of removing a problem
- user in such a way that the user is left with no
- question that the account has been terminated, and by
- default also allows the user a last call to plead her
- case.
-
- [off_toast] turns off the toast bit. A last minute pardon...
- [tog_toast] toggles the toast bit.
- [if_toast] continues processing the script if the user's toast
- bit is set, otherwise it jumps to the next [mark].
-
- ═══════════════════════════════════════════════════════════════
- [on_chkmail] [off_chkmail] [tog_chkmail] [if_chkmail]
-
- [on_chkmail] turns on the check-new-mail bit. When this bit is
- on, each time the user logs on the BBS will scan
- for new messages addressed to the user in the
- Private Email base.
- [off_chkmail] turns off the check-new-mail bit. No new message
- scan but logons will be much faster.
- [tog_chkmail] toggles the check-new-mail bit.
- [if_chkmail] continues processing the script if the user's
- check-new-mail bit is set, otherwise it jumps to
- the next [mark].
-
- ═══════════════════════════════════════════════════════════════
- [on_FSE] [off_FSE] [tog_FSE] [if_FSE]
-
- (note: this keyword is case insensitive as all UFO keywords. It
- is perfectly valid to, for example, use [on_fse] instead of
- [on_FSE] as shown above)
-
- [on_FSE] enables the use of the full screen editor when entering
- messages.
- [off_FSE] disables the use of the FSE, and instead the user must
- use the old-fashioned line-by-line message editor.
- [tog_FSE] toggles the use of the FSE.
- [if_FSE] continues processing the script if the user has enabled
- the use of the FSE, otherwise it jumps to the next
- [mark].
-
-
-
-
- NanoBBS - UFO Language Documentation Page 59
-
-
- ═══════════════════════════════════════════════════════════════
- [on_noratio] [off_noratio] [tog_noratio] [if_noratio]
-
- [on_noratio] disables checking for file download:upload ratios
- when the user is downloading. This is a good bit
- to set for yourself and for close personal
- friends...
- [off_noratio] re-enables file ratios.
- [tog_noratio] toggles the use of file ratios.
- [if_noratio] continues processing the script if the user is
- flagged as having no file ratios, otherwise it
- jumps to the next [mark].
-
- ═══════════════════════════════════════════════════════════════
- [on_suspended] [off_suspended] [tog_suspended] [if_suspended]
-
- [on_suspended] sets the suspended bit. When this bit is set,
- the user will receive a message stating that the
- account is temporarily suspended, and will then
- be logged off.
- [off_suspended] un-suspends the user.
- [tog_suspended] toggles the user's suspended bit.
- [if_suspended] continues processing the script if the user is
- suspended, otherwise it jumps to the next [mark].
-
- ═══════════════════════════════════════════════════════════════
- [on_linefeeds] [off_linefeeds] [tog_linefeeds] [if_linefeeds]
-
- [on_linefeeds] turns on the use of linefeeds. When this is set,
- every time NanoBBS sends a new line carriage
- return (ASCII 13) it will also send a line feed
- (ASCII 10). Most terminal programs for the IBM
- clone line need line feeds or else all the output
- will appear on one line.
- [off_linefeeds] turns off line feeds.
- [tog_linefeeds] toggles the use of line feeds.
- [if_linefeeds] continues processing the script if line feeds are
- enabled, otherwise it jumps to the next [mark].
-
- ═══════════════════════════════════════════════════════════════
- [crlf]
-
- This inserts a carriage return/linefeed into the .BBS file,
- where you might not want a line break in your source text.
-
- ═══════════════════════════════════════════════════════════════
- [null]
-
- This simply sends a null character - an ASCII $00 - to the user.
- When this keyword is encountered by UFO.EXE, the null character
- itself is written to the output file.
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 60
-
-
- ═══════════════════════════════════════════════════════════════
- [menu {noun}]
-
- This is used before a [getchr] keyword to limit input to only
- the characters in {noun}. It is a direct synonym of [keyfilter].
-
- ═══════════════════════════════════════════════════════════════
- [filesearch {noun}]
-
- This is a quasi-canned file search utility. It will search for
- the file or files specified in {noun}.
-
- ═══════════════════════════════════════════════════════════════
- [sendtext {noun}]
-
- This sends the ASCII or ANSI file specified in the noun to the
- user in ASCII mode. It is not counted as a download. It will
- not process any UFO code in the file, and unlike linked UFO
- files the file can be any size.
-
- ═══════════════════════════════════════════════════════════════
- [harddownload {noun}]
-
- This adds the file or files in {noun} to the download batch,
- prompts for a protocol and then downloads the file to the user.
- Useful for embedding hardcoded file transfers, say for a
- required file.
-
- ═══════════════════════════════════════════════════════════════
- [senserip]
-
- Attempts to detect RIP graphics. If successful it will set the
- RIP bit.
-
- ═══════════════════════════════════════════════════════════════
- [ifripdetect]
-
- Attempts to detect RIP graphics. If none are found it will skip
- to the next [mark] keyword.
-
- ═══════════════════════════════════════════════════════════════
- [feedback]
-
- Prompts to send feedback to the SysOp. It basically will jump
- to the defined e-mail message base and post a private message to
- the person defined as the SysOp in the config file, with a
- subject line of "Feedback."
-
- ═══════════════════════════════════════════════════════════════
- [keyjump {noun}]
-
- This will skip to the next [mark] keyword if the user key
- specified in the {noun} is on. Otherwise, NanoBBS will continue
- processing as if nothing happened. Only the first character of
- the noun is relevant.
-
-
- NanoBBS - UFO Language Documentation Page 61
-
-
- ═══════════════════════════════════════════════════════════════
- [keytoggle {noun}]
-
- This toggles the user key specified in the {noun}. If the noun
- is on, this keyword turns it off, and vice versa. Only the
- first character of the noun is relevant.
-
- ═══════════════════════════════════════════════════════════════
- [keyoff {noun}]
-
- This turns off the user key specified in the {noun}. Only the
- first character of the noun is relevant.
-
- ═══════════════════════════════════════════════════════════════
- [keyon {noun}]
-
- This turns on the user key specified in the {noun}. Only the
- first character of the noun is relevant.
-
- ═══════════════════════════════════════════════════════════════
- [loadlang {noun}]
-
- This loads a language file whose filename root (first 8
- characters, no extension or path) is in {noun}.
-
- ═══════════════════════════════════════════════════════════════
- [canned_logon]
- [logon]
-
- This goes through the canned logon procedure. It will ask for a
- user name/number and password, and if the user is new, will run
- the new-user questionnaire. [logon] and [canned_logon] are
- directly synonymous.
-
- ═══════════════════════════════════════════════════════════════
- [canned_goodbye]
-
- This asks the user is sure s/he wants to log off (offering a
- feedback option), updates all logs and usage variables, displays
- the goodbye file, and hangs up.
-
- ═══════════════════════════════════════════════════════════════
- [canned_msgread]
-
- This invokes the canned read-message menu
-
- ═══════════════════════════════════════════════════════════════
- [canned_email]
-
- This invokes the canned email menu.
-
-
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 62
-
-
- ═══════════════════════════════════════════════════════════════
- [canned_jumpmb]
-
- This invokes the canned jump-messagebase prompt. The user can
- select a message base, jump to the next or previous message
- base, get a list of message bases, or quit.
-
- ═══════════════════════════════════════════════════════════════
- [canned_killmsg]
-
- This kills the current message, if the user is allowed.
-
- ═══════════════════════════════════════════════════════════════
- [canned_options]
-
- This invokes the canned user options - the menu in which the
- user can change his/her account parameters such as screen size,
- language file, line/NEd editor, etc.
-
- ═══════════════════════════════════════════════════════════════
- [canned_chpw]
-
- This invokes the password changer. It is a subset of the
- [canned_options] function.
-
- ═══════════════════════════════════════════════════════════════
- [canned_chlang]
-
- This invokes the language changer. It is a subset of the
- [canned_options] function.
-
- ═══════════════════════════════════════════════════════════════
- [canned_bang]
-
- This prompts for the Bang prompt.
-
- ═══════════════════════════════════════════════════════════════
- [canned_doormenu]
-
- This invokes a canned door menu.
-
- ═══════════════════════════════════════════════════════════════
- [rundoor {noun}]
-
- This runs a door whose NUMBER is in {noun}. The appropriate
- door info file is automatically created, so you don't need to
- precede this with a DORINFO or DOORSYS token.
-
- ═══════════════════════════════════════════════════════════════
- [canned_yourstats]
-
- This shows the user's stats.
-
- ═══════════════════════════════════════════════════════════════
- [canned_page]
-
- This prompts to page the SysOp. It will ask for a reason and
- note the chat request in the system log file.
-
- NanoBBS - UFO Language Documentation Page 63
-
-
- ═══════════════════════════════════════════════════════════════
- [canned_setscans]
-
- This invokes the set scans menu.
-
- ═══════════════════════════════════════════════════════════════
- [canned_newmsg]
-
- This invokes the global new message scan.
-
- ═══════════════════════════════════════════════════════════════
- [canned_callstoday]
-
- This invokes the calls today list.
-
- ═══════════════════════════════════════════════════════════════
- [canned_post]
-
- This prompts to post a message in the current area, then invokes
- the selected editor. Access levels and read-only restrictions
- are checked.
-
- ═══════════════════════════════════════════════════════════════
- [canned_userlist]
-
- This invokes the user listings.
-
- ═══════════════════════════════════════════════════════════════
- [canned_batchmenu]
-
- This invokes the canned batch files menu.
-
- ═══════════════════════════════════════════════════════════════
- [canned_download]
-
- This invokes a generic download keyword.
-
- ═══════════════════════════════════════════════════════════════
- [canned_upload]
-
- This invokes a generic upload keyword.
-
- ═══════════════════════════════════════════════════════════════
- [canned_filelist]
-
- This lists all or selected files in the current file area.
-
- ═══════════════════════════════════════════════════════════════
- [canned_newfiles]
-
- This lists all new files or files since a specified date in the
- current file area.
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 64
-
-
- ═══════════════════════════════════════════════════════════════
- [canned_findfile]
-
- This invokes the hyper-speed file finder. It is NOT a synonym
- of the [filesearch] keyword described earlier in this document,
- because it prompts the user for the file specification, while
- [filesearch] requires a file spec tp be provided in a noun.
-
- ═══════════════════════════════════════════════════════════════
- [canned_filemenu]
-
- This invokes the generic file section menu.
-
- ═══════════════════════════════════════════════════════════════
- [canned_nextmb]
-
- This jumps to the next message base. If the user is already in
- the highest-numbered message base, the jump will be to the
- lowest-numbered base to which the user has access.
-
- ═══════════════════════════════════════════════════════════════
- [canned_prevmb]
-
- This jumps to the previous message base. If the user is already
- in the lowest-numbered message base, the jump will be to the
- highest-numbered base to which the user has access.
-
- ═══════════════════════════════════════════════════════════════
- [canned_nextfb]
-
- This jumps to the next file area. If the user is already in the
- highest-numbered file area, the jump will be to the
- lowest-numbered area to which the user has access.
-
- ═══════════════════════════════════════════════════════════════
- [canned_prevfb]
-
- This jumps to the previous file area. If the user is already in
- the lowest-numbered file area, the jump will be to the
- highest-numbered area to which the user has access.
-
- ═══════════════════════════════════════════════════════════════
- [canned_timebank]
-
- This invokes the generic Time Bank menu.
-
- ═══════════════════════════════════════════════════════════════
- [canned_jumpfb]
-
- This invokes the canned jump file area prompt. The user can
- select a file area, jump to the next or previous file area, get
- a list of file areas, or quit.
-
-
-
-
-
- NanoBBS - UFO Language Documentation Page 65
-
-
- ═══════════════════════════════════════════════════════════════
- [plaque]
-
- This displays the NanoBBS version information, or the "bridge
- plaque" (apologies to trekkies)
-
- ═══════════════════════════════════════════════════════════════
- [infoplaq]
-
- This displays the copyright banner and several memory-related
- disgnostic data. It is identical to the undocumented "$"
- keyword at the canned main menu... whoops... I guess it's
- documented now!
-
- ═══════════════════════════════════════════════════════════════
- [nanochat]
-
- This invokes the NanoCHAT multi-user chat system, a
- teleconferencing system similar to that found in other quality
- multi-line BBS packages. This chat system is fully documented
- in NANOBBS.DOC. This keyword is ignored if the user is not
- logged in yet, meaning essentially that you can't use this
- keyword in your initial welcome screen...
-
- ═══════════════════════════════════════════════════════════════
- [canned_whoson]
-
- This displays a list of users online at the same time, how long
- each user has been on and what they are doing (being
- sufficiently vague as to afford other users -some- privacy). It
- gives the user an option to mark him/herself "unavailable for
- chat".
-
- ═══════════════════════════════════════════════════════════════
- [whoson]
-
- This just gives a display of the users online as in the
- [canned_whoson] previously described, without prompting the user
- for availability.
-
- ═══════════════════════════════════════════════════════════════
- [freezetime]
-
- This temporarily freezes time, so that the user can proceed
- without time limits. Time spent in frozen time is not charged
- to the user's cumulative time online for the day. This keyword
- can be undone with the [unfreezetime] keyword.
-
- ═══════════════════════════════════════════════════════════════
- [unfreezetime]
-
- This unfreezes time. What that means is that if the user had
- been in "frozen" time (as a result of the use of the
- [freezetime] keyword or because s/he was flagged as "No Limit")
- the clock will again start to tick and normal time limits for
- the user's access level will apply.
-
- NanoBBS - UFO Language Documentation Page 66
-
-
- ═══════════════════════════════════════════════════════════════
- [iftimefrozen]
-
- This keyword skips ahead to the next [mark] if time is not
- frozen, otherwise if time is frozen it keeps processing.
-
- ═══════════════════════════════════════════════════════════════
- [log {string}]
-
- This makes a log entry in NANOBBS.LOG with the {string} noun as
- the log contents.
-
- ═══════════════════════════════════════════════════════════════
- [message {noun}]
-
- This displays a "SysMsg" from the language file. The message
- number is in the noun.
-
- ═══════════════════════════════════════════════════════════════
- [ghostpost {area} {filename} {from} {to} {subject}]
-
- Yes, this verb needs five nouns.
-
- This verb will post an automatic message to the area specified
- in the first noun. The message body is contained in the file
- specified by the second noun. The third noun specifies the
- "From" name. The fourth noun specifies the recipient's name.
- The fifth noun specifies the subject. This always posts a
- public message, even if the area in question is private.
-
- If the file does not exist or if the user online at the time
- does not have access to the area in question, no message is
- posted. The filename MUST be fully pathed!
-
- You can insert UFO variables in the message text by using %V
- plus the variable number 1 to 40, examples: %V01 %V10 %V15
- %V39. No other UFO nouns can be embedded in the message text -
- use a [copy] keyword to copy a noun into a variable to get
- around this.
-
- ═══════════════════════════════════════════════════════════════
- [ghostpostp {area} {filename} {from} {to} {subject}]
-
- This is identical to [ghostpost] except that it always posts a
- private message.
-
- ═══════════════════════════════════════════════════════════════
- [logoff]
-
- This goes through the motions of logging the user off without
- actually hanging up - you could use this to allow users to
- logoff and then logon again (perhaps under a different account)
- without having to redial!
-
-
-
-
- NanoBBS - UFO Language Documentation Page 67
-
-
-
- ═══════════════════════════════════════════════════════════════
- [bye_nohangup]
-
- This is identical to [canned_goodbye] except that, as the name
- implies, it does not hang up the modem.
-
- ═══════════════════════════════════════════════════════════════
- [donthanguponbye]
-
- This instructs NanoBBS not to hangup when the user logs off, not
- even in the canned interface. If you're using the canned
- interface, you'll want something in your byebye file that
- re-cycles to a logon prompt or something, or else NanoBBS will
- just exit and when it's re-run for WFC, it'll just reset the
- modem anyway, hanging up on whoever was there!
-
- ═══════════════════════════════════════════════════════════════
- [hanguponbye]
-
- This reverses a previous [donthanguponbye] command. By default,
- NanoBBS hangs up when the user logs off, so unless you've used a
- [donthanguponbye] you won't need this.
-
- ═══════════════════════════════════════════════════════════════
- [canned_pageuser]
-
- This invokes the same hardcode as the "Page User" option from the
- [W]ho menu. It goes through the motions of paging another user on
- a multi-node system to NanoCHAT. There are no parameters.
-
- ═══════════════════════════════════════════════════════════════
- [canned_telegram]
-
- This invokes the same hardcode as the "Send Telegram" option from
- the [W]ho menu. It goes through the motions of sending a
- "telegram" to another user on a multi-node system. There are no
- parameters.
-
- ═══════════════════════════════════════════════════════════════
- [noabort]
-
- This keyword prevents the user from aborting the UFO script with a
- hotkey.
-
- ═══════════════════════════════════════════════════════════════
- [abortok]
-
- This keyword permits the user to abort the UFO script by hitting
- any key.
-
- ═══════════════════════════════════════════════════════════════
- [writebang {noun}]
-
- This writes the contents of {noun} to the "Bang Prompt". The
- previously existing prompt is overwritten.
-
- NanoBBS - UFO Language Documentation Page 68
-
-
-
- ═══════════════════════════════════════════════════════════════
- [moretype {noun}]
-
- This defines what kind of "More?" prompts are displayed each page.
-
- The {noun} is a number code, with the following significances:
-
- 0: Display a "Hit Any Key" prompt instead so the user has no "No"
- option (great for required messages like rules, new user info
- etc.)
-
- 1: Just the options "Yes" and "No"
-
- 2: "Yes", "No", and "=" which means nonstop.
-
- 3: "Yes", "No", "=Nonstop" and "Flag" as in flag a file for
- downloading.
-
- ═══════════════════════════════════════════════════════════════
- [yndefault {noun}]
-
- This sets the default (if the user hits enter at a "Y/N" prompt)
- response. The noun can either be YES or NO or Y or N.
-
- ═══════════════════════════════════════════════════════════════
- [iftrashcan {noun}]
-
- This will continue processing if the {noun} is in the default
- trashcan file, TRASHCAN.CTL. If the {noun} is not in the trashcan,
- then UFO will skip ahead to the next [mark].
-
- ═══════════════════════════════════════════════════════════════
- [ifcensor {noun}]
-
- This is identical to [iftrashcan] except that the {noun} is checked
- against the default censor file, CENSOR.CTL.
-
- ═══════════════════════════════════════════════════════════════
- [ifbadstring {string} {filename}]
-
- This is similar to [iftrashcan] and [ifcensor] except that you can
- specify any filename to check {string} against. If no path is
- specified with the filename, UFO assumes that the file can be found
- in the syspath defined in your config file.
-
- ═══════════════════════════════════════════════════════════════
- [figuretime]
-
- This causes NanoBBS to calculate the user's session time status and
- place the results in the Language Parameters in the order they are
- used by SysMsg 73.
-
- ═══════════════════════════════════════════════════════════════
- [timereport]
-
- This displays [sysmsg 73]. It is a detailed report of the amount
- of time the user has used in the current session, including how
- much "frozen" time, "granted" time and "banked" time is involved in
- this session.
-
- ═══════════════════════════════════════════════════════════════
- [plain {string}]
-
- This displays a string which may contain embedded colours, without
- translating the embedded codes. Useful for inspecting the raw form
- of colourful strings.
-
- ═══════════════════════════════════════════════════════════════
- [ifbirthday]
-
- This will process to the next [mark] if it is the user's birthday
- today. If it is not the user's birthday it will skip ahead until
- it reaches the next [mark] or the end of the file.
-
- ═══════════════════════════════════════════════════════════════
- [dispenseaccess {access}]
-
- This sets the user's access level to the specified level AND sets
- the user's expiry date to the one specified for that access level
- in EXPIRY.CTL.
-
- ═══════════════════════════════════════════════════════════════
- [setexpiry {days}]
-
- This set's the user's expiry date to the specified number of days
- in the future.
-
- ═══════════════════════════════════════════════════════════════
- [chat_send {node} {path} {filename}]
-
- This sends a text, ANSI, RIP or UFO file to the caller on the
- specified node. You may substitute a few letters from the caller's
- chat handle instead, as in chat. Note that the path and filename
- are separate; this allows you to let users select filenames from a
- secure directory. If path information is specified in {filename}
- it will be stripped and the path specified in {path} will be used,
- making this keyword hack-proof.
-
- ═══════════════════════════════════════════════════════════════
- [chat_bc {path} {filename}]
-
- This sends a text, ANSI, RIP or UFO file to everyone on the
- caller's channel. As in [chat_send] this keyword uses a separate
- path and filename for security. Just hard-code the path and let
- users enter the filename if they wish, as long as the files are in
- a directory where there's nothing sensitive, there will be no
- security problems.
-
-
- ═══════════════════════════════════════════════════════════════
- [chat_bc_except {node} {path} {filename}]
-
- This is like [chat_bc] except that it will NOT send the file to one
- node you specify. This way you can use this to build chat alias
- commands that work as super-actions, in which you use a [chat_send]
- to send the recipient's copy and a [chat_bc_except] to broadcast
- copies to everyone else who would see the action.
-
- ═══════════════════════════════════════════════════════════════
- [profilemenu]
-
- This takes the user to the canned User Profiles menu.
-
- ═══════════════════════════════════════════════════════════════
- [showprofile {username}]
-
- This displays the User Profile information for the specified (by
- logon username) user.
-
- ═══════════════════════════════════════════════════════════════
- [loadnode {node}]
-
- This loads the user account of the person on {node} into the Object
- user record for whatever purposes you want =)
-
-
- NanoBBS - UFO Language Documentation Page 68
-
-
-