| A vertical bar denotes changes since the last posting of the file. | | Current Posting Dated: 05-03-93 PCBoard Programming Language Version 1.00 ---------------------------- PPL SOURCE SYNTAX Each line of a PPL source file may contain none, one, some or all of the following sections: [KEYWORD ][EXPR|VAR][,EXPR|VAR][;|'][COMMENT TEXT] KEYWORD - A PPL statement used to accomplish some task. EXPR - A PPL expressioin which may contain VARs, CONSTs, and/or FUNCs. VAR - A PPL variable with optional array subscript. CONST - A PPL constant. FUNC - A PPL function that returns a value. ; - Used to start a comment. Ignored by the compiler. ' - Used to start a comment. Ignored by the compiler. COMMENT - Comment text following the ; or '. Ignored by the compiler. If a line is blank or contains only a comment, it is skipped. If it contains a KEYWORD, that line is compiled into a tokenized format. If it doesn't contain a KEYWORD but some argument, it is assumed to be an assignement statement (LET). DATA TYPES PPL utilizes the following data types: BOOLEAN unsigned character (1 byte) 0 = FALSE, non-0 = TRUE DATE unsigned integer (2 bytes) PCBoard julian date (count of days since 1/1/1900) INTEGER signed long integer (4 bytes) -2,147,483,648 - +2,147,483,647 MONEY signed long integer (4 bytes) -$21,474,836.48 - +$21,474,836.47 STRING far character pointer (4 bytes) NULL is an empty string; non-NULL points to a string of some length less than or equal to 256 TIME signed long integer (4 bytes) Count of seconds since midnight SYNTAX TYPE var[(dim[,dim[,dim]])][,var...] NOTES: Any type may be assigned to any other type. This is the simplest way to accomplish type conversion. BOOLEAN, DATE, INTEGER, MONEY and TIME are all integer types and may be assigned to each other. Assignment from a larger data type to a smaller data type automatically converts the data to a format suitable for the smaller data type. Conversion to and from STRINGs is dependent on the other data type. DATEs are imported/exported as "MM-DD-YY". TIMEs are imported/exported as "HH:MM:SS". MONEYs are imported/ exported as "#.##" without embedded dollar signs or commas, and using as many characters as needed to the left of the decimal point. All variables must be declared before use. CONSTANTS PPL allows user defined constants in the following formats: $#.## - A MONEY constant (dollar sign followed by optional dollars followed by decimal point followed by cents; # = 0-9) #h - An INTEGER hexadecimal constant (# = 0-9 & A-F) #d - An INTEGER decimal constant (# = 0-9) #o - An INTEGER octal constant (# = 0-7) #b - An INTEGER binary constant (# = 0-1) # - An INTEGER constant (# = 0-9) "X" - A STRING constant (X = any displayable text) @X## - An INTEGER @X constant (# = 0-9 & A-F) The following predefined constant labels are also defined: AUTO = 2000h Parameter passed to INPUTSTR and PROMPTSTR statements (automatically press enter after 10 seconds of no user input) BELL = 800h Parameter passed to DISPTEXT statement (sound a bell when prompt displayed) DEFS = 0 Parameter passed to various statements for default values ECHODOTS = 1h Parameter passed to INPUTSTR and PROMPTSTR statements (echo dots instead of user input) ERASELINE = 20h Parameter passed to INPUTSTR and PROMPTSTR statements (erase the current line when user presses enter) FALSE = 0 BOOLEAN FALSE value FCL = 2 Value passed to STARTDISP to force line counting display FIELDLEN = 2h Parameter passed to INPUTSTR and PROMPTSTR statements (displays parenthesis to show input field width if ANSI enabled) FNS = 1 Value passed to STARTDISP to force non-stop display F_EXP = 2h Expired subscription access allowed flag for CONFFLAG and CONFUNFLAG F_MW = 10h Mail waiting flag for CONFFLAG and CONFUNFLAG F_REG = 1h Registered access allowed flag for CONFFLAG and CONFUNFLAG F_SEL = 4h Conference selected flag for CONFFLAG and CONFUNFLAG F_SYS = 8h Conference SysOp access flag for CONFFLAG and CONFUNFLAG GRAPH = 1h Parameter passed to DISPFILE statement to search for graphics specific files GUIDE = 4h Parameter passed to INPUTSTR and PROMPTSTR statements (displays parenthesis above current line if FIELDLEN used and ANSI not enabled) HIGHASCII = 1000h Parameter passed to INPUTSTR and PROMPTSTR statements (allow high ascii characters, regardless of current valid character set, if disable high ascii filter set to yes) LANG = 4h Parameter passed to DISPFILE statement to search for language specific files LFAFTER = 100h Parameter passed to INPUTSTR, PROMPTSTR and DISPTEXT statements (send an extra line feed after user presses enter) LFBEFORE = 80h Parameter passed to INPUTSTR, PROMPTSTR and DISPTEXT statements (send an extra line feed before prompt display) LOGIT = 8000h Parameter passed to DISPTEXT statement (log text to callers log) LOGITLEFT = 10000h Parameter passed to DISPTEXT statement (log text to callers log, forcing left justification) NC = 0 Value passed to STARTDISP to not change display mode NEWLINE = 40h Parameter passed to INPUTSTR, PROMPTSTR and DISPTEXT statements (send a line feed after user presses enter) NOCLEAR = 400h Parameter passed to INPUTSTR and PROMPTSTR statements (don't clear field at first keypress regardless of ANSI) O_RD = 0 Parameter passed to FCREATE/FOPEN/FAPPEND to open a file in read only mode O_RW = 2 Parameter passed to FCREATE/FOPEN/FAPPEND to open a file in read and write mode O_WR = 1 Parameter passed to FCREATE/FOPEN/FAPPEND to open a file in write only mode SEC = 2h Parameter passed to DISPFILE statement to search for security specific files STACKED = 10h Parameter passed to INPUTSTR and PROMPTSTR statements (allow semi-colons and spaces in addition to valid character set passed) S_DB = 3h Parameter passed to FCREATE/FOPEN/FAPPEND to deny read and write (both) access from other processes S_DN = 0h Parameter passed to FCREATE/FOPEN/FAPPEND to allow read and write (deny none) access from other processes S_DR = 1h Parameter passed to FCREATE/FOPEN/FAPPEND to deny read access from other processes S_DW = 2h Parameter passed to FCREATE/FOPEN/FAPPEND to deny write access from other processes TRUE = 1 BOOLEAN TRUE value UPCASE = 8h Parameter passed to INPUTSTR and PROMPTSTR statements (force user input to upper case) WORDWRAP = 200h Parameter passed to INPUTSTR and PROMPTSTR statements (if user hits end of line, save the text at the end of the line for future use) YESNO = 4000h Parameter passed to INPUTSTR and PROMPTSTR statements (Only allow international yes/no responses) PREDEFINED VARIABLES PPL predefines the following variables for user record access: BOOLEAN U_CLS Clear screen between messages status BOOLEAN U_DEF79 79 column message editor default BOOLEAN U_EXPERT Users current expert status BOOLEAN U_FSE Users full screen editor default BOOLEAN U_FSEP Prompt for full screen editor status BOOLEAN U_LONGHDR 6 line vs 4 line message header status BOOLEAN U_SCROLL Scroll multi-screen message status DATE U_EXPDATE The users subscription expiration date DATE U_PWDEXP The date that the users password expires and must be changed INTEGER U_EXPSEC The users expired security level INTEGER U_PAGELEN The users page length INTEGER U_SEC The users security level STRING U_ADDR(5) The users address information (if the SysOp has enabled address recording) Subscript 0 = First street line 1 = Second street line 2 = City 3 = State 4 = Zip 5 = Country STRING U_ALIAS The users alias (if the SysOp has enabled alias use) STRING U_BDPHONE The users business/data phone number STRING U_CITY The users city/state information STRING U_CMNT1 The users comment field STRING U_CMNT2 The SysOps comment field STRING U_HVPHONE The users home/voice phone number STRING U_NOTES(4) Notes about the user (if the SysOp has enabled the note capability) Subscripts 0-4 hold lines 1-5 STRING U_PWD The users password STRING U_TRANS The users default transfer protocol STRING U_VER The users verification string (if the SysOp has enabled user verification) EXPRESSION OPERATORS PPL allows the following operators to be used in expressions (lvalue and rvalue are simply the values to the left and right, respectively, of binary operators): ( - Start sub-expression (also allows [ or { to be used) ) - End sub-expression (also allows ] or } to be used) ^ - Raise lvalue to the power of rvalue * - Multiply lvalue by rvalue / - Divide lvalue by rvalue % - Remainder of lvalue divided by rvalue + - Add rvalue to lvalue - - Subtract rvalue from lvalue = - Is lvalue equal to rvalue (also allows ==) <> - Is lvalue not equal to rvalue (also allows != and ><) < - Is lvalue less than rvalue <= - Is lvalue less than or equal to rvalue (also allows =<) > - Is lvalue greater than rvalue >= - Is lvalue greater than or equal to rvalue (also allows =>) ! - Logical not of rvalue & - Logical and of lvalue with rvalue (also allows &&) | - Logical or of lvalue with rvalue (also allows ||) FUNCTIONS PPL allows the following functions, returning the specified type, with the specified arguments, to be used in an expression (some functions require no arguments, in which case the parenthesis are empty; if arguments are required, the arguments may all be expressions of any type, but will be converted to one of the following types prior to function evaluation: BEXP (BOOLEAN), DEXP (DATE), IEXP (INTEGER), MEXP (MONEY), SEXP (STRING), TEXP (TIME)): ABORT() (BOOLEAN) Returns a flag indicating whether or not the user aborted the display of data via ^K/^X or answering no to a MORE? prompt ABS(IEXP) (INTEGER) Returns the absolute value of IEXP AND(IEXP1,IEXP2) (INTEGER) Returns the bitwise and of two integer expressions ANSION() (BOOLEAN) Returns TRUE if the user has ANSI capabilities ASC(SEXP) (INTEGER) Returns the ASCII value (0-255) of the first character of SEXP B2W(IEXP1,IEXP2) (INTEGER) Returns a word built from two byte sized values by the formula: (IEXP1*0100h+IEXP2) CALLID() (STRING) Returns the caller ID string CALLNUM() (INTEGER) Returns the caller number of the current user. CARRIER() (INTEGER) Returns the carrier speed as reported by the modem to PCBoard CCTYPE(SEXP) (STRING) Returns the issuer of credit card number SEXP CDON() (BOOLEAN) Returns TRUE if the carrier detect signal is on CHR(IEXP) (STRING) Returns a single character long string of the character represented by ASCII code IEXP (0-255) CURCOLOR() (INTEGER) Returns the current color (0-255) in use by the ANSI driver CURCONF() (INTEGER) Returns the current conference number CURSEC() (INTEGER) Returns the users current security level DATE() (DATE) Returns todays date DAY(DEXP) (INTEGER) Returns the day of the month (1-31) of DEXP DBGLEVEL() (INTEGER) Returns the debug level in effect DEFCOLOR() (INTEGER) Returns the default color as specified in PCBSetup DOW(DEXP) (INTEGER) Returns the day of the week (0 = Sunday, 6 = Saturday) that DEXP fell on EXIST(SEXP) (BOOLEAN) Returns a boolean TRUE value if the file SEXP exists FERR(IEXP) (BOOLEAN) Returns TRUE if a file access error occurred on channel IEXP since the file was opened or FERR was last called FILEINF(SEXP,IEXP) (BOOLEAN, DATE, INTEGER, STRING and TIME) Returns a piece of information (specified by IEXP) about the file SEXP Valid values for IEXP: 1 = Return TRUE if file exists 2 = Return file date stamp 3 = Return file time stamp 4 = Return file size 5 = Return file attributes 01h = Read Only 02h = Hidden 04h = System 20h = Archive 6 = Return file drive 7 = Return file path 8 = Return file base name 9 = Return file extension FMTCC(SEXP) (STRING) Returns a formatted credit card number based on SEXP GETENV(SEXP) (STRING) Returns the value of the environment variable named by SEXP GETTOKEN() (STRING) Returns the next string token from a prior call to TOKENIZE (Same as the GETTOKEN statement but can be used in an expression without prior assignement to a variable) GETX() (INTEGER) Returns the current column (X position) of the cursor on the display GETY() (INTEGER) Returns the current row (Y position) of the cursor on the display GRAFMODE() (STRING) Returns a character indicating the users graphics status R = RIPscrip supported, G = ANSI graphics (color and positioning) supported, A = ANSI positioning (no color) supported, or N = No graphics (RIP or ANSI) supported HELPPATH() (STRING) Returns the path, as specified in PCBSetup, to the help files HOUR(TEXP) (INTEGER) Returns the hour of the day (0-23) of TEXP I2S(IEXP1,IEXP2) (STRING) Returns a string representing the integer value IEXP1 converted to base IEXP2 INKEY() (STRING) Returns the next keypress as a single character long string, or a string with the name of the function or cursor control key INSTR(SEXP1,SEXP2) (INTEGER) Returns the position of SEXP2 in SEXP1 (1-LEN(SEXP1)) or 0 if SEXP2 not in SEXP1 KINKEY() (STRING) Returns the next keypress from the BBS keyboard as a single character long string, or a string with the name of the function or cursor control key LANGEXT() (STRING) Returns the file extension for the users language selection LEFT(SEXP,IEXP) (STRING) Returns the left-most IEXP characters of SEXP LEN(SEXP) (INTEGER) Returns the length of SEXP LOGGEDON() (BOOLEAN) Returns TRUE if the user has already logged on to the BBS, FALSE otherwise LOWER(SEXP) (STRING) Returns a string of SEXP with all uppercase characters converted to lowercase characters LTRIM(SEXP1,SEXP2) (STRING) Returns a string of SEXP1 with the first character of SEXP2 trimmed from the left MASK_ALNUM() (STRING) Returns a valid character mask for input statements of A through Z, a through z, and 0 through 9 MASK_ALPHA() (STRING) Returns a valid character mask for input statements of A through Z and a through z MASK_ASCII() (STRING) Returns a valid character mask for input statements of space (" ") through tilde ("~") MASK_FILE() (STRING) Returns a valid character mask for input statements of file names MASK_NUM() (STRING) Returns a valid character mask for input statements of 0 through 9 MASK_PATH() (STRING) Returns a valid character mask for input statements of path names MASK_PWD() (STRING) Returns a valid character mask for input statements of passwords MAXNODE() (INTEGER) Returns the maximum node possible with the current software (ie, /2 would return 2, /10 would return 10, etc) MGETBYTE() (INTEGER) Returns the value of the next byte from the modem (0-255) or -1 if there are no bytes waiting for input MID(SEXP,IEXP1,IEXP2) (STRING) Returns a string from SEXP starting at the IEXP1 position of SEXP and containing IEXP2 characters of SEXP MIN(TEXP) (INTEGER) Returns the minute of the hour (0-59) of TEXP MINKEY() (STRING) Returns the next keypress from the remote caller as a single character long string, or a string with the name of the function or cursor control key MINLEFT() (INTEGER) Returns the current callers minutes left to use online MINON() (INTEGER) Returns the current callers minutes online so far this session MKADDR(IEXP1,IEXP2) (INTEGER) Returns a segment:offset address as a long integer built from two word sized values by the formula: (IEXP1*00010000h+IEXP2) MKDATE(IEXP1,IEXP2,IEXP3) (DATE) Returns a date with the year specified by IEXP1 (1900-2079), month specified by IEXP2 (1-12), and day specified by IEXP3 (1-31). MODEM() (STRING) Returns the modem connect string as reported by the modem to PCBoard MONTH(DEXP) (INTEGER) Returns the month of the year (1-12) of DEXP NOCHAR() (STRING) Returns the current language no character NOT(IEXP) (INTEGER) Returns the bitwise complement (all bits inverted) of an integer expression ONLOCAL() (BOOLEAN) Returns TRUE if the user is on locally OR(IEXP1,IEXP2) (INTEGER) Returns the bitwise or of two integer expressions | PAGESTAT() (BOOLEAN) | Returns TRUE if the user has paged the SysOp (or PAGEON has | been issued), FALSE otherwise (or PAGEOFF has been issued) PCBDAT() (STRING) Returns a string with the path and file name of PCBOARD.DAT PCBNODE() (INTEGER) Returns the node number PEEKB(IEXP) (INTEGER) Returns a byte value (0-255) located at memory address IEXP (PEEK is a synonym) PEEKDW(IEXP) (INTEGER) Returns a signed integer value (-2147483648 - +2147483647) located at memory address IEXP PEEKW(IEXP) (INTEGER) Returns a word value (0-65535) located at memory address IEXP PPENAME() (STRING) Returns the name of the currently executing PPE file minus the path and extension PPEPATH() (STRING) Returns a string with the path (no file name) of the currently executing PPE file PSA(IEXP) (BOOLEAN) Returns TRUE if the feature specified by IEXP is enabled, FALSE if the feature specified by IEXP is disabled Valid values for IEXP: 1 = Alias Support Enabled 2 = Verify Support Enabled 3 = Address Support Enabled 4 = Password Support Enabled 5 = Statistics Support Enabled 6 = Notes Support Enabled RANDOM(IEXP) (INTEGER) Returns a random number between 0 and IEXP inclusive READLINE(SEXP,IEXP) (STRING) Read and return line number IEXP from file SEXP REGAH() (INTEGER) Returns the value of the AH register after a DOINTR statement REGAL() (INTEGER) Returns the value of the AL register after a DOINTR statement REGAX() (INTEGER) Returns the value of the AX register after a DOINTR statement REGBH() (INTEGER) Returns the value of the BH register after a DOINTR statement REGBL() (INTEGER) Returns the value of the BL register after a DOINTR statement REGBX() (INTEGER) Returns the value of the BX register after a DOINTR statement REGCF() (BOOLEAN) Returns the state of the carry flag after a DOINTR statement REGCH() (INTEGER) Returns the value of the CH register after a DOINTR statement REGCL() (INTEGER) Returns the value of the CL register after a DOINTR statement REGCX() (INTEGER) Returns the value of the CX register after a DOINTR statement REGDH() (INTEGER) Returns the value of the DH register after a DOINTR statement REGDI() (INTEGER) Returns the value of the DI register after a DOINTR statement REGDL() (INTEGER) Returns the value of the DL register after a DOINTR statement REGDS() (INTEGER) Returns the value of the DS register after a DOINTR statement REGDX() (INTEGER) Returns the value of the DX register after a DOINTR statement REGES() (INTEGER) Returns the value of the ES register after a DOINTR statement REGF() (INTEGER) Returns the value of the flags register after a DOINTR statement REGSI() (INTEGER) Returns the value of the SI register after a DOINTR statement REPLACE(SEXP1,SEXP2,SEXP3) (STRING) Returns a string of SEXP1 with all occurences of the first character of SEXP2 replaced by the first character of SEXP3 RIGHT(SEXP,IEXP) (STRING) Returns the right-most IEXP characters of SEXP RTRIM(SEXP1,SEXP2) (STRING) Returns a string of SEXP1 with the first character of SEXP2 trimmed from the right S2I(SEXP,IEXP) (INTEGER) Returns an integer representing the string SEXP converted from base IEXP | SCRTEXT(IEXP1,IEXP2,IEXP3,BEXP) (STRING) | Returns a string with the text (and color information in the | form of @X codes if BEXP is TRUE) from column IEXP1, row IEXP2, | and of length IEXP3 SEC(TEXP) (INTEGER) Returns the second of the minute (0-59) of TEXP | SHOWSTAT() (BOOLEAN) | Returns TRUE if writing to the display is active, FALSE if | writing to the display is disabled SLPATH() (STRING) Returns the path, as specified in PCBSetup, to the login security files SPACE(IEXP) (STRING) Returns a string of spaces IEXP characters long STRING(EXP) (STRING) Returns EXP converted to a string STRIP(SEXP1,SEXP2) (STRING) Returns a string of SEXP1 with all occurrences of the first character of SEXP2 removed STRIPATX(SEXP) (STRING) Returns a string of SEXP with all @X codes removed SYSOPSEC() (INTEGER) Returns the SysOp security defined in PCBOARD.DAT TEMPPATH() (STRING) Returns the path, as specified in PCBSetup, to the temporary work directory TIME() (TIME) Returns the current time TIMEAP(TEXP) (STRING) Returns a string representing the time TEXP in civilian format (XX:XX:XX AM) TOKCOUNT() (INTEGER) Returns the number of tokens available via the GETTOKEN statement and/or function TOKENSTR() (STRING) Returns a previously tokenized string reconstructed with semi-colons separating the component tokens TRIM(SEXP1,SEXP2) (STRING) Returns a string of SEXP1 with the first character of SEXP2 trimmed from both ends UPPER(SEXP) (STRING) Returns a string of SEXP with all lowercase characters converted to uppercase characters UN_CITY() (STRING) Returns a nodes city from USERNET.XXX after a RDUNET statement UN_NAME() (STRING) Returns a nodes user name from USERNET.XXX after a RDUNET statement UN_OPER() (STRING) Returns a nodes operation text from USERNET.XXX after a RDUNET statement UN_STAT() (STRING) Returns a nodes status from USERNET.XXX after a RDUNET statement U_BDL() (INTEGER) Returns the current users number of bytes downloaded U_BDLDAY() (INTEGER) Returns the current users number of bytes downloaded today U_BUL() (INTEGER) Returns the current users number of bytes uploaded U_FDL() (INTEGER) Returns the current users number of files downloaded U_FUL() (INTEGER) Returns the current users number of files uploaded U_INCONF(IEXP1,IEXP2) (BOOLEAN) Returns TRUE if user record number IEXP2 is registered in conference IEXP1 U_LDATE() (DATE) Returns the current users last date on the system U_LDIR() (DATE) Returns the current users last directory scan date U_LOGONS() (INTEGER) Returns the current users number of times logged on U_LTIME() (TIME) Returns the current users last time on the system U_MSGRD() (INTEGER) Returns the number of messages the user has read U_MSGWR() (INTEGER) Returns the number of messages the user has written U_NAME() (STRING) Returns the current users name U_PWDHIST(IEXP) (STRING) Returns the specified password from the password history Valid values for IEXP are 1 through 3 U_PWDLC() (DATE) Returns the date of the last password change U_PWDTC() (INTEGER) Returns the number of times the password has been changed U_RECNUM(SEXP) (INTEGER) Returns the user record number (0-65535) for user name SEXP or -1 if SEXP is not registered on this system. U_STAT(IEXP) (DATE or INTEGER) Returns a statistic about the user that is tracked by PCBoard Valid values for IEXP are 1 through 15 1 - Returns the first date the user called the system 2 - Returns the number of SysOp pages the user has requested 3 - Returns the number of group chats the user has participated in 4 - Returns the number of comments the user has left 5 - Returns the number of 300 bps connects 6 - Returns the number of 1200 bps connects 7 - Returns the bumber of 2400 bps connects 8 - Returns the number of 9600 bps connects 9 - Returns the number of 14400 bps connects 10 - Returns the number of security violations 11 - Returns the number of "not registered in conference" warnings 12 - Returns the number of times the users download limit has been reached 13 - Returns the number of "file not found" warnings 14 - Returns the number of password errors the user has had 15 - Returns the number of verify errors the user has had U_TIMEON() (INTEGER) Returns the current users time online today in minutes VALCC(SEXP) (BOOLEAN) Returns TRUE if SEXP is a valid credit card number VALDATE(SEXP) (BOOLEAN) Returns TRUE if SEXP is in a valid date format VALTIME(SEXP) (BOOLEAN) Returns TRUE if SEXP is in a valid time format VER() (INTEGER) Returns the version number of PCBoard that is running XOR(IEXP1,IEXP2) (INTEGER) Returns the bitwise exclusive-or of two integer expressions YEAR(DEXP) (INTEGER) Returns the year (1900-2079) of DEXP YESCHAR() (STRING) Returns the current language yes character STATEMENTS PPL recognizes the following statements with the specified arguments to perform the specified operations (some statements require no arguments, in which case there is nothing following the statement; if arguments are required, they may be of two types, expression and variable; expression arguments may all be expressions of any type, but will be converted to one of the following types prior to function evaluation: BEXP (BOOLEAN), DEXP (DATE), IEXP (INTEGER), MEXP (MONEY), SEXP (STRING), TEXP (TIME); variable arguments (VAR) may be variables of any type, but may be converted to and from an appropriate type in order to accomplish the required statement): ADJTIME IEXP Add or subtract IEXP minutes to the users time available this session ANSIPOS IEXP1,IEXP2 If ANSI is available, position the cursor in column IEXP1 row IEXP2 Legal ranges: 1 <= IEXP1 <= 80 1 <= IEXP2 <= 23 (Because of the status lines) (1,1) is the top left corner of the screen BACKUP IEXP Backup (move the cursor to the left) IEXP columns without going past column 1 BLT IEXP Display bulletin number IEXP BROADCAST IEXP1,IEXP2,SEXP Broadcast message SEXP to nodes from IEXP1 to IEXP2 inclusive BYE Same as having the user type BYE from the command prompt CALL SEXP Load and execute PPE filename specified by SEXP CDCHKOFF Turn off carrier detect checking CDCHKON Turn on carrier detect checking CHAT Initiate SysOp chat mode CLOSECAP Close the capture file previously opened with OPENCAP CLREOL Clear to the end of the line, with the current color if in ANSI mode CLS Clear the screen, with the current color if in ANSI mode COLOR IEXP Change the current color to IEXP CONFFLAG IEXP1,IEXP2 Turn on the conference IEXP1 flags specified by IEXP2 CONFUNFLAG IEXP1,IEXP2 Turn off the conference IEXP1 flags specified by IEXP2 DBGLEVEL IEXP Set the debug level to IEXP DEC VAR Decrement the value of VAR DEFCOLOR Resets the current color to the system default DELAY IEXP Pause for IEXP clock ticks (1 clock tick = approximately 1/18.2 second) DELETE SEXP Deletes the filename specified by SEXP (ERASE is a synonym) DELUSER Flags the current user record for deletion DIR SEXP Performs a file directory command, passing it SEXP as arguments DISPFILE SEXP,IEXP Display file SEXP with IEXP alternate file flags (valid flags = GRAPH, SEC, LANG) DISPSTR SEXP Display file if SEXP is "%filename", execute PPE if SEXP is "!filename", or display string SEXP DISPTEXT IEXP1,IEXP2 Display PCBTEXT prompt IEXP1 using flags IEXP2 (valid flags = NEWLINE, LFBEFORE, LFAFTER, BELL, LOGIT, LOGITLEFT) DOINTR IEXP1,IEXP2,IEXP3,IEXP4,IEXP5,IEXP6,IEXP7,IEXP8,IEXP9,IEXP10 Generate interrupt number IEXP1 (0-255) with the following register values: AX = IEXP2 BX = IEXP3 CX = IEXP4 DX = IEXP5 SI = IEXP6 DI = IEXP7 FLAGS = IEXP8 DS = IEXP9 ES = IEXP10 DTROFF Turn off the DTR signal DTRON Turn on the DTR signal END End PPE execution FAPPEND IEXP1,SEXP,IEXP2,IEXP3 Use channel IEXP1 to open file SEXP in append mode with access mode IEXP2 and share mode IEXP3 (valid channels = 0 - 7 [0 is used for script questionnaires]) (valid access modes = O_RD, O_WR, O_RW [should use O_RW]) (valid share modes = S_DN, S_DR, S_DW, S_DB) FCLOSE IEXP Close channel IEXP FCREATE IEXP1,SEXP,IEXP2,IEXP3 Use channel IEXP1 to create and open file SEXP in access mode IEXP2 and share mode IEXP3 (valid channels = 0 - 7 [0 is used for script questionnaires]) (valid access modes = O_RD, O_WR, O_RW [should use O_WR]) (valid share modes = S_DN, S_DR, S_DW, S_DB) FGET IEXP,VAR Read a line from channel IEXP and assign it to VAR FOPEN IEXP1,SEXP,IEXP2,IEXP3 Use channel IEXP1 to open file SEXP in access mode IEXP2 and share mode IEXP3 (valid channels = 0 - 7 [0 is used for script questionnaires]) (valid access modes = O_RD, O_WR, O_RW) (valid share modes = S_DN, S_DR, S_DW, S_DB) FOR VAR = IEXP1 TO IEXP2 [STEP IEXP3] statement(s) NEXT FOR - Initializes a loop by assigning IEXP1 to VAR and continuing while VAR <= IEXP2 (if IEXP3 >= 0) or VAR >= IEXP2 (if IEXP3 < 0) (TO is required to separate IEXP1 and IEXP2; if STEP (optional) is not specified IEXP3 defaults to 1) NEXT - Adds IEXP3 to VAR, transfers control to the closest FOR statement, and marks the end of the FOR loop (ENDFOR and END FOR are synonyms) FORWARD IEXP Move the cursor forward (to the right) IEXP columns without going past column 80 FPUT IEXP,SEXP[,SEXP...] Write one or more SEXP out to channel IEXP FPUTLN IEXP[,SEXP[,SEXP...]] Write zero or more SEXP out to channel IEXP and terminate with a carriage return/line feed pair FPUTPAD IEXP1,SEXP,IEXP2 Write out SEXP, padding or truncating to length IEXP2 as needed, to channel IEXP1 FRESHLINE If the cursor is not in column 1, do a newline FREWIND IEXP Rewind channel IEXP after flushing buffers and committing the file to disk. GETTOKEN VAR Get a token from a previous call to tokenize and assign it to VAR GETUSER Fill the predefined variables (U_...) with current information from the user record GOSUB LABEL Transfer control to LABEL, marking the current PPE location for a future RETURN statement (GO SUB is a synonym) GOTO LABEL Transfer control to LABEL (GO TO is a synonym) GOODBYE Same as having the user type G from the command prompt HANGUP Hangup on the user without any notification IF (BEXP) statement ... Evaluate BEXP and, if true, execute statement; otherwise skip to the next statement IF (BEXP) THEN statement(s) ELSEIF (BEXP) THEN statement(s) ELSE statement(s) ENDIF IF - If expression cond is TRUE then this statement transfers control to the statement(s) following it, otherwise control is tranferred to the next ELSEIF, ELSE or ENDIF statement (requires THEN [or DO] after the condition) ELSEIF - (optional) If expression cond is TRUE then this statement transfers control to the statements following it, otherwise control is tranferred to the next ELSEIF, ELSE or ENDIF statement (There may be multiple ELSEIF statements between the IF and ELSE statements (ELSE IF is a synonym; nothing is required to come after the condition, although THEN [or DO] may appear for clarification and consistency in the source code) ELSE - (optional) Separates the false portion of an IF/ELSEIF statement from the true portion ENDIF - Ends an IF/ELSEIF/ELSE statement block (END IF is a synonym) INC VAR Increment the value of VAR INPUT SEXP,VAR Display SEXP and get input from user, assigning it to VAR (60 characters maximum) INPUTCC SEXP,VAR,IEXP Display SEXP in color IEXP and get a credit card formatted string from the user, assigning it to VAR (16 characters maximum, valid characters 0-9) INPUTDATE SEXP,VAR,IEXP Display SEXP in color IEXP and get a date formatted string from the user, assigning it to VAR (8 characters maximum, valid characters 0-9 - /) INPUTINT SEXP,VAR,IEXP Display SEXP in color IEXP and get an integer formatted string from the user, assigning it to VAR (11 characters maximum, valid characters 0-9) INPUTMONEY SEXP,VAR,IEXP Display SEXP in color IEXP and get a money formatted string from the user, assigning it to VAR (13 characters maximum, valid characters 0-9 $ .) INPUTSTR SEXP1,VAR,IEXP1,IEXP2,SEXP2,IEXP3 Display SEXP1 in color IEXP1 and get a string (maximum length IEXP2, valid characters SEXP2, flags IEXP3) from the user, assigning it to VAR (valid length = 1-256) (valid characters = any string) (valid flags = ECHODOTS, FIELDLEN, GUIDE, UPCASE, STACKED, ERASELINE, NEWLINE, LFBEFORE, LFAFTER, WORDWRAP, NOCLEAR, HIGHASCII, AUTO, YESNO) INPUTTEXT SEXP,VAR,IEXP1,IEXP2 Display SEXP in color IEXP1 and get a string (maximum length IEXP2) from the user, assigning it to VAR INPUTTIME SEXP,VAR,IEXP Display SEXP in color IEXP and get a time formatted string from the user, assigning it to VAR (8 characters maximum, valid characters 0-9 :) INPUTYN SEXP,VAR,IEXP Display SEXP in color IEXP and get a yes/no response from the user, assigning it to VAR (1 characters maximum, valid characters determined by language) JOIN SEXP Performs a join conference command, passing it SEXP as arguments KBDCHKOFF Turn off keyboard time out checking KBDCHKON Turn on keyboard time out checking KBDFILE SEXP Stuff the keyboard buffer with the contents of file SEXP KBDSTUFF SEXP Stuff the keyboard buffer with the contents of SEXP LET VAR = EXP Evaluate expression EXP, convert and assign to VAR (NOTE: LET is the only optional keyword. If no keyword is found, LET is assumed. There are certain circumstances where it may be required, such as assignment to a variable named the same as a statement (PRINT, for example, would require a line such as LET PRINT = TRUE instead of just PRINT = TRUE) LOG SEXP,BEXP Write string SEXP to the callers log, left justified if BEXP is TRUE MESSAGE IEXP,SEXP1,SEXP2,SEXP3,SEXP4,DEXP,BEXP1,BEXP2,SEXP5 Write a message in conference IEXP, to user SEXP1 (empty string defaults to current caller), from user SEXP2 (empty string defaults to current caller), subject SEXP3, security in SEXP4 (N or R; N is the default), pack out date in DEXP (0 for no pack out date), BEXP1 TRUE if return receipt desired, BEXP2 TRUE if message should be echoed, and SEXP5 is the filename to use for the message text MORE Displays a MORE? prompt MPRINT SEXP[,SEXP...] Display one or more string expressions on the callers screen only (this statement does not send anything to the BBS screen) MPRINTLN [SEXP[,SEXP...]] Display zero or more string expressions on the callers screen only and follow with a newline (this statement does not send anything to the BBS screen) NEWLINE Write a newline to the display NEWLINES IEXP Write IEXP newlines to the display OPENCAP SEXP,VAR Open SEXP and capture all screen output to it. If an error occurs creating or opening SEXP, VAR is set to TRUE, otherwise VAR is set to FALSE. OPTEXT SEXP Writes string SEXP into the @OPTEXT@ macro | PAGEOFF | Turn off the SysOp paged indicator (flashing p on status line) | | PAGEON | Turn on the SysOp paged indicator (flashing p on status line) POKEB IEXP1,IEXP2 Assign the value IEXP2 (0-255) to memory address IEXP1 (POKE is a synonym) POKEDW IEXP1,IEXP2 Assign the value IEXP2 (-2147483648 - +2147483647) to memory address IEXP1 POKEW IEXP1,IEXP2 Assign the value IEXP2 (0-65535) to memory address IEXP1 POP VAR[,VAR...] Pop values (previously pushed onto the stack) into a list of variables PRINT SEXP[,SEXP...] Display one or more string expressions PRINTLN [SEXP[,SEXP...]] Display zero or more string expressions and follow with a newline PROMPTSTR IEXP1,VAR,IEXP2,SEXP,IEXP3 Display PCBTEXT entry IEXP1 and get a string (maximum length IEXP2, valid characters SEXP, flags IEXP3) from the user, assigning it to VAR (valid length = 1-256) (valid characters = any string) (valid flags = ECHODOTS, FIELDLEN, GUIDE, UPCASE, STACKED, ERASELINE, NEWLINE, LFBEFORE, LFAFTER, WORDWRAP, NOCLEAR, HIGHASCII, AUTO, YESNO) PUSH EXP[,EXP...] Push a list of evaluated expressions onto the stack PUTUSER Write the information from the predefined variables (U_...) to the user record QUEST IEXP Do script questionnaire IEXP RDUNET IEXP Read information from USERNET.XXX for node IEXP RDUSYS Reads a USERS.SYS file, if present, and updates the users record RENAME SEXP1,SEXP2 Rename file SEXP1 to SEXP2 RESETDISP Reset the display after an user abort RESTSCRN Restore the screen from the buffer previously saved with SAVESCRN RETURN Return to the statement after the last GOSUB or, if no GOSUB is waiting for a RETURN, END the PPE SAVESCRN Save the current screen in a buffer for later restoration with the RESTSCRN SENDMODEM SEXP Send the text in SEXP out to the modem SHELL BEXP,VAR,SEXP1,SEXP2 Shell (via COMMAND.COM if BEXP is TRUE) to program/command SEXP1 with arguments SEXP2, saving the return value in VAR (NOTE: If BEXP is TRUE, the value assigned to VAR will be the return code of COMMAND.COM, not SEXP1) | SHOWOFF | Turns off display of information to the screen | | SHOWON | Turns on display of information to the screen SOUND IEXP Turn on the BBS PC speaker at the frequency (1-65535) specified by IEXP (or turn it off if the frequency is 0) SPRINT SEXP[,SEXP...] Display one or more string expressions on the BBS screen only (this statement does not send anything to the modem) SPRINTLN [SEXP[,SEXP...]] Display zero or more string expressions on the BBS screen only and follow with a newline (this statement does not send anything to the modem) STARTDISP IEXP Start display monitoring in mode IEXP (valid modes = NC, FNS, FCL) STOP Abort PPE execution without appending answers (channel 0) to the answer file TOKENIZE SEXP Tokenize string SEXP into individual items separated by semi-colons or spaces VARADDR VAR1,VAR2 Assign the address (segment and offset) of VAR1 to VAR2 VAROFF VAR1,VAR2 Assign the offset address of VAR1 to VAR2 VARSEG VAR1,VAR2 Assign the segment address of VAR1 to VAR2 WAIT Displays a PRESS ENTER TO CONTINUE? prompt WAITFOR SEXP,VAR,IEXP Wait up to IEXP seconds for the string SEXP, assigned TRUE to VAR if the string is found in the time specified or FALSE if the string is not found (WAIT FOR is a synonym) WHILE (BEXP) statement ... While BEXP is true execute statement; when BEXP is false execute following statements WHILE (BEXP) DO statement(s) ENDWHILE WHILE - While BEXP is true execute statement(s); when BEXP is false transfer control to the first statement following the ENDWHILE statement (requires DO [or THEN] after the expression) ENDWHILE - Transfers control to the closest WHILE statement and marks the end of the WHILE loop (END WHILE is a synonym) WRUNET IEXP,SEXP1,SEXP2,SEXP3,SEXP4,SEXP5 Write information to USERNET.XXX for node IEXP, where SEXP1 is the new node status, SEXP2 is the new node user name, SEXP3 is the new node city, SEXP4 is the new node operation text, and SEXP5 is broadcast text WRUSYS Writes (creates) a USERS.SYS file which can be used by a SHELLed application