home *** CD-ROM | disk | FTP | other *** search
/ The Equalizer BBS / equalizer-bbs-collection_2004.zip / equalizer-bbs-collection / BBS-PCBOARD-STUFF / PPL.ZIP / PPL.DOC < prev   
Text File  |  1994-11-01  |  70KB  |  1,972 lines

  1.  PCBoard Programming Language Version 2.00
  2.  -----------------------------------------
  3.                                               Rewritten by: DOOMER (01/11/94)
  4.                                               -------------------------------
  5. ┌───────────────────┐
  6. │ PPL SOURCE SYNTAX │
  7. └───────────────────┘
  8.  
  9.      Each line of a PPL source file may contain none, one, some or all
  10.      of the following sections:
  11.  
  12.      [KEYWORD ][EXPR|VAR][,EXPR|VAR][;|'][COMMENT TEXT]
  13.  
  14.      KEYWORD - A PPL statement used to accomplish some task.
  15.      EXPR    - A PPL expressioin which may contain VARs, CONSTs,
  16.                and/or FUNCs.
  17.      VAR     - A PPL variable with optional array subscript.
  18.      CONST   - A PPL constant.
  19.      FUNC    - A PPL function that returns a value.
  20.      ;       - Used to start a comment.  Ignored by the compiler.
  21.      '       - Used to start a comment.  Ignored by the compiler.
  22.      COMMENT - Comment text following the ; or '.
  23.                Ignored by the compiler.
  24.  
  25.      + A double quote ("") may be embedded within a string constant to tell
  26.          the compiler that a single literal quote is desired (in other
  27.          words, "THIS""IS""A""TEST" would evaluate to THIS"IS"A"TEST after
  28.          the leading and trailing quotes are removed and the double quotes
  29.          were folded to single quotes)
  30.      + Labels and variable names may include the following characters in
  31.          addition to A-Z, 0-9, and the _ (underscore) character: $ (dollar
  32.          sign), @ (commercial at), # (pound sign), ¢ (cents), £ (british
  33.          pound), ¥ (japanese yen)
  34.      + A \ (backslash) character as the last character on a line (before any
  35.          comments) will now allow continuing a logical line from one to the
  36.          next physical line
  37.      + A : (colon) character may be used to separate multiple logical lines
  38.          on a single physical line
  39.      + A comment may be started by an asterisk (*) if it is the first 
  40.          non-whitespace character on a line.
  41.      + Source files can be included from other source files.  This is 
  42.          accomplished with a compiler directive in a comment like this:
  43.  
  44.        ;$INCLUDE:FILESPEC.EXT
  45.  
  46.          (Note that the first character need not be the semi-colon.  An
  47.           apostrophe ['] or asterisk [*] may also be used where appropriate.)
  48.  
  49.          This allows you to include subroutines from a source code 'library'.
  50.          This should help in starting reusable code fragments.  When the
  51.          file is included, it is compiled as though it were in the main
  52.          source file. For example:
  53.  
  54.          FOO.INC
  55.          -------
  56.          :subroutine
  57.          PRINTLN "Hello!"
  58.          RETURN
  59.  
  60.          FOO.PPS
  61.          -------
  62.          PRINTLN "Running FOO.PPS"
  63.          GOSUB subroutine
  64.          END ' This line is important!
  65.          *$INCLUDE:FOO.INC
  66.  
  67.          Note the use of END in FOO.PPS.  It is important in this case to
  68.          ensure that you don't accidentally run subroutine twice by just
  69.          falling through to it.
  70.  
  71. ┌────────────┐
  72. │ DATA TYPES │
  73. └────────────┘
  74.      
  75.      BIGSTR    
  76.          Allows up to 2048 characters per big string 
  77.          (up from 256 for STRING variables)
  78.          May include CHR(0) characters in the middle of the big string
  79.  
  80.      BOOLEAN
  81.          unsigned character (1 byte)
  82.          0 = FALSE, non-0 = TRUE
  83.  
  84.      BYTE     
  85.          1-byte unsigned integer
  86.          0 - 255
  87.  
  88.      DATE
  89.          unsigned integer (2 bytes)
  90.          PCBoard julian date (count of days since 1/1/1900)
  91.  
  92.      DOUBLE   
  93.          8-byte floating point number        (same as DREAL)
  94.          -1.7E-308 - +1.7E+308 (15-digit precision)
  95.  
  96.      DREAL    
  97.          8-byte floating point number
  98.          -1.7E-308 - +1.7E+308 (15-digit precision)
  99.  
  100.      DWORD    
  101.          4-byte unsigned integer             (same as UNSIGNED)
  102.          0 - 4,294,967,295
  103.  
  104.      EDATE    
  105.          Julian date in earth date format
  106.          Deals with dates formatted YYMM.DD
  107.          
  108.      FLOAT    
  109.          4-byte floating point number        (same as REAL)
  110.          -3.4E-38 - +3.4E+38 (7-digit precision)
  111.  
  112.      INT      
  113.          2-byte signed integer               (same as SWORD)
  114.          -32,768 - 32,767
  115.  
  116.      INTEGER
  117.          signed long integer (4 bytes)
  118.          -2,147,483,648 - +2,147,483,647
  119.  
  120.      LONG     
  121.          4-byte signed integer               (same as INTEGER)
  122.          -2,147,483,648 - 2,147,483,647
  123.  
  124.      MONEY
  125.          signed long integer (4 bytes)
  126.          -$21,474,836.48 - +$21,474,836.47
  127.  
  128.      REAL     
  129.          4-byte floating point number
  130.          -3.4E-38 - +3.4E+38 (7-digit precision)
  131.  
  132.      SBYTE    
  133.          1-byte signed integer
  134.          -128 - 127
  135.  
  136.      SDWORD   
  137.          4-byte signed integer               (same as INTEGER)
  138.          -2,147,483,648 - 2,147,483,647
  139.  
  140.      SHORT    
  141.          1-byte signed integer               (same as SBYTE)
  142.          -128 - 127
  143.  
  144.      STRING
  145.          far character pointer (4 bytes)
  146.          NULL is an empty string; non-NULL points to a string of some
  147.          length less than or equal to 256
  148.  
  149.      SYNTAX
  150.          TYPE var[(dim[,dim[,dim]])][,var...]
  151.      
  152.      SWORD    
  153.          2-byte signed integer
  154.          -32,768 - 32,767
  155.  
  156.      TIME
  157.          signed long integer (4 bytes)
  158.          Count of seconds since midnight
  159.  
  160.      UBYTE    
  161.          1-byte unsigned integer             (same as BYTE)
  162.          0 - 255
  163.  
  164.      UDWORD   
  165.          4-byte unsigned integer             (same as UNSIGNED)
  166.          0 - 4,294,967,295
  167.  
  168.      UNSIGNED 
  169.          4-byte unsigned integer
  170.          0 - 4,294,967,295
  171.  
  172.      UWORD    
  173.          2-byte unsigned integer             (same as WORD)
  174.          0 - 65,535
  175.  
  176.      WORD     
  177.          2-byte unsigned integer
  178.          0 - 65,535
  179.  
  180.      NOTES:  Any  type may be  assigned to any  other type.  This is the
  181.      ------  simplest way  to accomplish type conversion. BOOLEAN, DATE,
  182.              INTEGER,  MONEY and TIME  are all integer  types and may be
  183.              assigned to each other.  Assignment from a larger data type
  184.              to a smaller data type automatically converts the data to a
  185.              format suitable for  the smaller data  type. Conversion  to
  186.              and from STRINGs is dependent on the other data type:
  187.              * DATEs are imported & exported as "MM-DD-YY"  
  188.              * TIMEs are imported & exported as "HH:MM:SS" 
  189.              * MONEYs are imported & exported as "#.##" without embedded 
  190.                 dollar signs or commas, and using as many  characters as 
  191.                 needed to the left of the decimal point. 
  192.                    -> All variables must be declared before use <-
  193.  
  194.  
  195. ┌───────────┐
  196. │ CONSTANTS │
  197. └───────────┘
  198.  
  199.      $#.## - A MONEY constant (dollar sign followed by optional dollars
  200.              followed by decimal point followed by cents; # = 0-9)
  201.      #h    - An INTEGER hexadecimal constant (# = 0-9 & A-F)
  202.      #d    - An INTEGER decimal constant (# = 0-9)
  203.      #o    - An INTEGER octal constant (# = 0-7)
  204.      #b    - An INTEGER binary constant (# = 0-1)
  205.      #     - An INTEGER constant (# = 0-9)
  206.      "X"   - A STRING constant (X = any displayable text)
  207.      @X##  - An INTEGER @X constant (# = 0-9 & A-F)
  208.  
  209.      The following predefined constant labels are also defined:
  210.  
  211.      AUTO = 2000h
  212.          Parameter passed to INPUTSTR and PROMPTSTR statements
  213.          (automatically press enter after 10 seconds of no user input)
  214.  
  215.      BELL = 800h
  216.          Parameter passed to DISPTEXT statement
  217.          (sound a bell when prompt displayed)
  218.  
  219.      CUR_USER = 0
  220.          Parameter passed to CURUSER() function
  221.  
  222.      DEFS = 0
  223.          Parameter passed to various statements for default values
  224.  
  225.      ECHODOTS = 1h
  226.          Parameter passed to INPUTSTR and PROMPTSTR statements
  227.          (echo dots instead of user input)
  228.  
  229.      ERASELINE = 20h
  230.          Parameter passed to INPUTSTR and PROMPTSTR statements
  231.          (erase the current line when user presses enter)
  232.  
  233.      FALSE = 0
  234.          BOOLEAN FALSE value
  235.  
  236.      FCL = 2
  237.          Value passed to STARTDISP to force line counting display
  238.  
  239.      FIELDLEN = 2h
  240.          Parameter passed to INPUTSTR and PROMPTSTR statements (displays
  241.          parenthesis to show input field width if ANSI enabled)
  242.  
  243.      FNS = 1
  244.          Value passed to STARTDISP to force non-stop display
  245.  
  246.      F_EXP = 2h
  247.          Expired subscription access allowed flag for CONFFLAG and
  248.          CONFUNFLAG
  249.  
  250.      F_MW = 10h
  251.          Mail waiting flag for CONFFLAG and CONFUNFLAG
  252.  
  253.      F_REG = 1h
  254.          Registered access allowed flag for CONFFLAG and CONFUNFLAG
  255.  
  256.      F_SEL = 4h
  257.          Conference selected flag for CONFFLAG and CONFUNFLAG
  258.  
  259.      F_SYS = 8h
  260.          Conference SysOp access flag for CONFFLAG and CONFUNFLAG
  261.  
  262.      GRAPH = 1h
  263.          Parameter passed to DISPFILE statement to search for graphics
  264.          specific files
  265.  
  266.      GUIDE = 4h
  267.          Parameter passed to INPUTSTR and PROMPTSTR statements
  268.          (displays parenthesis above current line if FIELDLEN used and
  269.          ANSI not enabled)
  270.  
  271.      HIGHASCII = 1000h
  272.          Parameter passed to INPUTSTR and PROMPTSTR statements
  273.          (allow high ascii characters, regardless of current valid
  274.          character set, if disable high ascii filter set to yes)
  275.  
  276.      LANG = 4h
  277.          Parameter passed to DISPFILE statement to search for language
  278.          specific files
  279.  
  280.      LFAFTER = 100h
  281.          Parameter passed to INPUTSTR, PROMPTSTR and DISPTEXT statements
  282.          (send an extra line feed after user presses enter)
  283.  
  284.      LFBEFORE = 80h
  285.          Parameter passed to INPUTSTR, PROMPTSTR and DISPTEXT statements
  286.          (send an extra line feed before prompt display)
  287.  
  288.      LOGIT = 8000h
  289.          Parameter passed to DISPTEXT statement
  290.          (log text to callers log)
  291.  
  292.      LOGITLEFT = 10000h
  293.          Parameter passed to DISPTEXT statement
  294.          (log text to callers log, forcing left justification)
  295.  
  296.      NC = 0
  297.          Value passed to STARTDISP to not change display mode
  298.  
  299.      NEWLINE = 40h
  300.          Parameter passed to INPUTSTR, PROMPTSTR and DISPTEXT statements
  301.          (send a line feed after user presses enter)
  302.  
  303.      NOCLEAR = 400h
  304.          Parameter passed to INPUTSTR and PROMPTSTR statements
  305.          (don't clear field at first keypress regardless of ANSI)
  306.  
  307.      NO_USER = -1 
  308.          Parameter passed to CURUSER() function
  309.  
  310.      O_RD = 0
  311.          Parameter passed to FCREATE/FOPEN/FAPPEND to open a file in
  312.          read only mode
  313.  
  314.      O_RW = 2
  315.          Parameter passed to FCREATE/FOPEN/FAPPEND to open a file in
  316.          read and write mode
  317.  
  318.      O_WR = 1
  319.          Parameter passed to FCREATE/FOPEN/FAPPEND to open a file in
  320.          write only mode
  321.  
  322.      SEC = 2h
  323.          Parameter passed to DISPFILE statement to search for security
  324.          specific files
  325.  
  326.      STACKED = 10h
  327.          Parameter passed to INPUTSTR and PROMPTSTR statements
  328.          (allow semi-colons and spaces in addition to valid character
  329.          set passed)
  330.  
  331.      S_DB = 3h
  332.          Parameter passed to FCREATE/FOPEN/FAPPEND to deny read and
  333.          write (both) access from other processes
  334.  
  335.      S_DN = 0h
  336.          Parameter passed to FCREATE/FOPEN/FAPPEND to allow read and
  337.          write (deny none) access from other processes
  338.  
  339.      S_DR = 1h
  340.          Parameter passed to FCREATE/FOPEN/FAPPEND to deny read access
  341.          from other processes
  342.  
  343.      S_DW = 2h
  344.          Parameter passed to FCREATE/FOPEN/FAPPEND to deny write access
  345.          from other processes
  346.  
  347.      TRUE = 1
  348.          BOOLEAN TRUE value
  349.  
  350.      UPCASE = 8h
  351.          Parameter passed to INPUTSTR and PROMPTSTR statements
  352.          (force user input to upper case)
  353.  
  354.      WORDWRAP = 200h
  355.          Parameter passed to INPUTSTR and PROMPTSTR statements
  356.          (if user hits end of line, save the text at the end of the line
  357.          for future use)
  358.  
  359.      YESNO = 4000h
  360.          Parameter passed to INPUTSTR and PROMPTSTR statements
  361.          (Only allow international yes/no responses)
  362.  
  363. ┌──────────────────────┐
  364. │ PREDEFINED VARIABLES │
  365. └──────────────────────┘
  366.  
  367.      BOOLEAN U_CLS
  368.          Clear screen between messages status
  369.  
  370.      BOOLEAN U_DEF79
  371.          79 column message editor default
  372.  
  373.      BOOLEAN U_EXPERT
  374.          Users current expert status
  375.  
  376.      BOOLEAN U_FSE
  377.          Users full screen editor default
  378.  
  379.      BOOLEAN U_FSEP
  380.          Prompt for full screen editor status
  381.  
  382.      BOOLEAN U_LONGHDR
  383.          6 line vs 4 line message header status
  384.  
  385.      BOOLEAN U_SCROLL
  386.          Scroll multi-screen message status
  387.  
  388.      DATE U_EXPDATE
  389.          The users subscription expiration date
  390.  
  391.      DATE U_PWDEXP
  392.          The date that the users password expires and must be changed
  393.  
  394.      INTEGER U_EXPSEC
  395.          The users expired security level
  396.  
  397.      INTEGER U_PAGELEN
  398.          The users page length
  399.  
  400.      INTEGER U_SEC
  401.          The users security level
  402.  
  403.      STRING U_ADDR(5)
  404.          The users address information (if the SysOp has enabled address
  405.          recording)
  406.          Subscript 0 = First street line
  407.                    1 = Second street line
  408.                    2 = City
  409.                    3 = State
  410.                    4 = Zip
  411.                    5 = Country
  412.  
  413.      STRING U_ALIAS
  414.          The users alias (if the SysOp has enabled alias use)
  415.  
  416.      STRING U_BDPHONE
  417.          The users business/data phone number
  418.  
  419.      STRING U_CITY
  420.          The users city/state information
  421.  
  422.      STRING U_CMNT1
  423.          The users comment field
  424.  
  425.      STRING U_CMNT2
  426.          The SysOps comment field
  427.  
  428.      STRING U_HVPHONE
  429.          The users home/voice phone number
  430.  
  431.      STRING U_NOTES(4)
  432.          Notes about the user (if the SysOp has enabled the note
  433.          capability)
  434.          Subscripts 0-4 hold lines 1-5
  435.  
  436.      STRING U_PWD
  437.          The users password
  438.  
  439.      STRING U_TRANS
  440.          The users default transfer protocol
  441.  
  442.      STRING U_VER
  443.          The users verification string (if the SysOp has enabled user
  444.          verification)
  445.  
  446.  
  447. ┌──────────────────────┐
  448. │ EXPRESSION OPERATORS │
  449. └──────────────────────┘
  450.  
  451.      PPL allows the following operators to be used in expressions
  452.      (lvalue and rvalue are simply the values to the left and right,
  453.      respectively, of binary operators):
  454.  
  455.      (  - Start sub-expression (also allows [ or { to be used)
  456.      )  - End sub-expression (also allows ] or } to be used)
  457.      ^  - Raise lvalue to the power of rvalue (also allows **)
  458.      *  - Multiply lvalue by rvalue
  459.      /  - Divide lvalue by rvalue
  460.      %  - Remainder of lvalue divided by rvalue
  461.      +  - Add rvalue to lvalue
  462.      -  - Subtract rvalue from lvalue
  463.      =  - Is lvalue equal to rvalue (also allows ==)
  464.      <> - Is lvalue not equal to rvalue (also allows != and ><)
  465.      <  - Is lvalue less than rvalue
  466.      <= - Is lvalue less than or equal to rvalue (also allows =<)
  467.      >  - Is lvalue greater than rvalue
  468.      >= - Is lvalue greater than or equal to rvalue (also allows =>)
  469.      !  - Logical not of rvalue
  470.      &  - Logical and of lvalue with rvalue (also allows &&)
  471.      |  - Logical or of lvalue with rvalue (also allows ||)
  472.  
  473.  
  474. ┌───────────┐
  475. │ FUNCTIONS │
  476. └───────────┘
  477.  
  478.      PPL allows the following functions, returning the specified type,
  479.      with the specified arguments,  to be used in  an expression (some
  480.      functions require no arguments, in which case the parenthesis are
  481.      empty;  if arguments  are  required,  the arguments  may  all  be
  482.      expressions  of any  type, but  will be converted  to one  of the
  483.      following  types prior to  function  evaluation:  BEXP (BOOLEAN),
  484.      DEXP  (DATE),   IEXP  (INTEGER),  MEXP  (MONEY),  SEXP  (STRING),
  485.      TEXP (TIME)):
  486.  
  487.      ABORT() (BOOLEAN)
  488.          Returns a flag indicating whether or not the user aborted the
  489.          display of data via ^K/^X or answering no to a MORE? prompt
  490.  
  491.      ABS(IEXP) (INTEGER)
  492.          Returns the absolute value of IEXP
  493.  
  494.      ALIAS (BOOLEAN)
  495.          Allows PPE control of whether or not the user is using an alias
  496.  
  497.      ALIAS() (BOOLEAN)
  498.          Returns the users current ALIAS setting
  499.          (TRUE = alias use on, FALSE = alias use off)
  500.  
  501.      AND(IEXP1,IEXP2) (INTEGER)
  502.          Returns the bitwise and of two integer expressions
  503.  
  504.      ANSION() (BOOLEAN)
  505.          Returns TRUE if the user has ANSI capabilities
  506.  
  507.      ASC(SEXP) (INTEGER)
  508.          Returns the ASCII value (0-255) of the first character of SEXP
  509.  
  510.      B2W(IEXP1,IEXP2) (INTEGER)
  511.          Returns a word built from two byte sized values by the formula:
  512.          (IEXP1*0100h+IEXP2)
  513.  
  514.      CALLID() (STRING)
  515.          Returns the caller ID string
  516.  
  517.      CALLNUM() (INTEGER)
  518.          Returns the caller number of the current user.
  519.  
  520.      CARRIER() (INTEGER)
  521.          Returns the carrier speed as reported by the modem to PCBoard
  522.  
  523.      CCTYPE(SEXP) (STRING)
  524.          Returns the issuer of credit/JCB/other Diners cards number SEXP
  525.  
  526.      CDON() (BOOLEAN)
  527.          Returns TRUE if the carrier detect signal is on
  528.  
  529.      CHATSTAT() (BOOLEAN)
  530.          Returns TRUE if the current users chat is available
  531.  
  532.      CHR(IEXP) (BIGSTR)
  533.          Returns a single character long string of the character
  534.          represented by ASCII code IEXP (0-255)
  535.  
  536.      CONFALIAS() (BOOLEAN)
  537.          Returns TRUE if the current conference is configured to 
  538.          allow aliases
  539.  
  540.      CONFEXP(IEXP) 
  541.          Returns TRUE if users expired flag is set in conference IEXP
  542.            NOTE: CONFREG() = FALSE & CONFEXP = TRUE, user locked out
  543.            ----- CONFREG() = TRUE  & CONFEXP = TRUE, user reg & exp
  544.  
  545.      CONFMW(IEXP) (BOOLEAN) 
  546.          Returns TRUE if user has mail waiting in conference IEXP
  547.  
  548.      CONFREG(IEXP) (BOOLEAN)
  549.          Returns TRUE if users registered flag is set in conference IEXP
  550.  
  551.      CONFSEL(IEXP) (BOOLEAN)
  552.          Returns TRUE if user has selected conference IEXP
  553.  
  554.      CONFSYS(IEXP) (BOOLEAN)
  555.          Returns TRUE if user has SysOp access in conference IEXP
  556.  
  557.      CURCOLOR() (INTEGER)
  558.          Returns the current color (0-255) in use by the ANSI driver
  559.  
  560.      CURCONF() (INTEGER)
  561.          Returns the current conference number
  562.  
  563.      CURSEC() (INTEGER)
  564.          Returns the users current security level
  565.  
  566.      CURUSER() (INTEGER)
  567.          Determines what users information, if any, is available via the 
  568.          user variables.  It takes no arguments and returns one of the 
  569.          following values:
  570.  
  571.          NO_USER (-1) - User variables are currently undefined
  572.          CUR_USER (0) - User variables are for the current user
  573.          Other        - The record number of an alternate user for whom user
  574.                          variables are defined
  575.  
  576.      DATE() (DATE)
  577.          Returns todays date
  578.  
  579.      DAY(DEXP) (INTEGER)
  580.          Returns the day of the month (1-31) of DEXP
  581.  
  582.      DBGLEVEL() (INTEGER)
  583.          Returns the debug level in effect
  584.  
  585.      DEFANS() (STRING)
  586.          Returns the last default answer passed to an INPUT statement.  
  587.          For example, this allows a PPE to determine what the default 
  588.          answer would have been had a PCBTEXT prompt not been replaced 
  589.          with a PPE.
  590.  
  591.      DEFCOLOR() (INTEGER)
  592.          Returns the default color as specified in PCBSetup
  593.  
  594.      DOW(DEXP) (INTEGER)
  595.          Returns the day of the week (0 = Sunday, 6 = Saturday) that
  596.          DEXP fell on
  597.  
  598.      ERRCORRECT() (BOOLEAN)
  599.          Returns TRUE if a session is determined to be error corrected 
  600.  
  601.      EXIST(SEXP) (BOOLEAN)
  602.          Returns a boolean TRUE value if the file SEXP exists
  603.  
  604.      EVTTIMEADJ() (BOOLEAN)
  605.          Detects if the users time has been adjusted for an upcoming event.  
  606.          This is useful to detect if a users time left can be increased with 
  607.          the ADJTIME statement.
  608.  
  609.      FERR(IEXP) (BOOLEAN)
  610.          Returns TRUE if a file access error occurred on channel IEXP
  611.          since the file was opened or FERR was last called
  612.  
  613.      FILEINF(SEXP,IEXP) (BOOLEAN, DATE, INTEGER, STRING and TIME)
  614.          Returns a piece of information (specified by IEXP) about the
  615.          file SEXP
  616.          Valid values for IEXP:  1 = Return TRUE if file exists
  617.                                  2 = Return file date stamp
  618.                                  3 = Return file time stamp
  619.                                  4 = Return file size
  620.                                  5 = Return file attributes
  621.                                      01h = Read Only
  622.                                      02h = Hidden
  623.                                      04h = System
  624.                                      20h = Archive
  625.                                  6 = Return file drive
  626.                                  7 = Return file path
  627.                                  8 = Return file base name
  628.                                  9 = Return file extension
  629.  
  630.      FLAGCNT() (INTEGER)
  631.          Returns the number of files flagged for download.
  632.  
  633.      FMTCC(SEXP) (STRING)
  634.          Returns a formatted credit card number based on SEXP
  635.  
  636.      FMTREAL(EXP,IEXP1,IEXP2) 
  637.          Formats REAL/DREAL values for display purposes
  638.            EXP   = A REAL/DREAL floating point expression
  639.            IEXP1 = The minimum number of characters to display
  640.            IEXP2 = The number of characters to display to the right of
  641.                      the decimal point
  642.  
  643.      GETENV(SEXP) (STRING)
  644.          Returns the value of the environment variable named by SEXP
  645.  
  646.      GETTOKEN() (STRING)
  647.          Returns the next string token from a prior call to TOKENIZE
  648.          (Same as the GETTOKEN statement but can be used in an
  649.          expression without prior assignement to a variable)
  650.  
  651.      GETX() (INTEGER)
  652.          Returns the current column (X position) of the cursor on the
  653.          display
  654.  
  655.      GETY() (INTEGER)
  656.          Returns the current row (Y position) of the cursor on the
  657.          display
  658.  
  659.      GRAFMODE() (STRING)
  660.          Returns a character indicating the users graphics status
  661.          R = RIPscrip supported, G = ANSI graphics (color and
  662.          positioning) supported, A = ANSI positioning (no color)
  663.          supported, or N = No graphics (RIP or ANSI) supported
  664.  
  665.      HELPPATH() (STRING)
  666.          Returns the path, as specified in PCBSetup, to the help files
  667.  
  668.      HIMSGNUM() (INTEGER)
  669.          Returns the high message number for the current conference
  670.  
  671.      HOUR(TEXP) (INTEGER)
  672.          Returns the hour of the day (0-23) of TEXP
  673.  
  674.      I2S(IEXP1,IEXP2) (STRING)
  675.          Returns a string representing the integer value IEXP1 converted
  676.          to base IEXP2
  677.  
  678.      INKEY() (STRING)
  679.          Returns the next keypress as a single character long string, or
  680.          a string with the name of the function or cursor control key
  681.  
  682.      INSTR(SEXP1,SEXP2) (BIGSTR)
  683.          Returns the position of SEXP2 in SEXP1 (1-LEN(SEXP1)) or 0 if
  684.          SEXP2 not in SEXP1
  685.  
  686.      ISBITSET(VAR,BIT) (BOOLEAN)
  687.          Checks the status of a specified bit (BIT) in a variable (VAR)  
  688.  
  689.      ISNONSTOP() (BOOLEAN)
  690.          Returns TRUE if the display is currently in non-stop mode 
  691.          (ie, did the user type NS as part of their command line)
  692.  
  693.      KBDBUFSIZE() (INTEGER)
  694.          Returns the number of key presses pending in the KBDSTRING buffer
  695.  
  696.      KBDFILUSED() (BOOLEAN)
  697.          Returns TRUE if key presses are being stuffed via a KBDFILE 
  698.          statement
  699.  
  700.      KINKEY() (STRING)
  701.          Returns the next keypress from the BBS keyboard as a single
  702.          character long string, or a string with the name of the
  703.          function or cursor control key
  704.  
  705.      LANGEXT() (STRING)
  706.          Returns the file extension for the users language selection
  707.  
  708.      LASTANS() (STRING)
  709.          Returns the last answer accepted by an INPUT statement
  710.  
  711.      LEFT(SEXP,IEXP) (BIGSTR)
  712.          Returns the left-most IEXP characters of SEXP
  713.  
  714.      LEN(SEXP) (BIGSTR)
  715.          Returns the length of SEXP
  716.  
  717.      LOGGEDON() (BOOLEAN)
  718.          Returns TRUE if the user has already logged on to the BBS,
  719.          FALSE otherwise
  720.  
  721.      LOMSGNUM() (INTEGER)
  722.          Returns the low message number for the current conference
  723.  
  724.      LOWER(SEXP) (BIGSTR)
  725.          Returns a string of SEXP with all uppercase characters
  726.          converted to lowercase characters
  727.  
  728.      LPRINTED() (INTEGER)
  729.          Returns the number of lines printed on the display
  730.  
  731.      LTRIM(SEXP1,SEXP2) (BIGSTR)
  732.          Returns a string of SEXP1 with the first character of SEXP2
  733.          trimmed from the left
  734.  
  735.      MASK_ALNUM() (STRING)
  736.          Returns a valid character mask for input statements of
  737.          A through Z, a through z, and 0 through 9
  738.  
  739.      MASK_ALPHA() (STRING)
  740.          Returns a valid character mask for input statements of
  741.          A through Z and a through z
  742.  
  743.      MASK_ASCII() (STRING)
  744.          Returns a valid character mask for input statements of
  745.          space (" ") through tilde ("~")
  746.  
  747.      MASK_FILE() (STRING)
  748.          Returns a valid character mask for input statements of
  749.          file names
  750.  
  751.      MASK_NUM() (STRING)
  752.          Returns a valid character mask for input statements of
  753.          0 through 9
  754.  
  755.      MASK_PATH() (STRING)
  756.          Returns a valid character mask for input statements of
  757.          path names
  758.  
  759.      MASK_PWD() (STRING)
  760.          Returns a valid character mask for input statements of
  761.          passwords
  762.  
  763.      MAXNODE() (INTEGER)
  764.          Returns the maximum node possible with the current software
  765.          (ie, /2 would return 2, /10 would return 10, etc)
  766.  
  767.      MEGANUM(IEXP) (INTEGER)
  768.          Converts a decimal number (from 0 to 1295) to a hexa-tri-decimal 
  769.          number, or meganum
  770.  
  771.      MGETBYTE() (INTEGER)
  772.          Returns the value of the next byte from the modem (0-255) or -1
  773.          if there are no bytes waiting for input
  774.  
  775.      MID(SEXP,IEXP1,IEXP2) (BIGSTR)
  776.          Returns a string from SEXP starting at the IEXP1 position of
  777.          SEXP and containing IEXP2 characters of SEXP
  778.  
  779.      MIN(TEXP) (INTEGER)
  780.          Returns the minute of the hour (0-59) of TEXP
  781.  
  782.      MINKEY() (STRING)
  783.          Returns the next keypress from the remote caller as a single
  784.          character long string, or a string with the name of the
  785.          function or cursor control key
  786.  
  787.      MINLEFT() (INTEGER)
  788.          Returns the current callers minutes left to use online
  789.  
  790.      MINON() (INTEGER)
  791.          Returns the current callers minutes online so far this session
  792.  
  793.      MIXED(SEXP) (STRING)
  794.          Converts a string to mixed (or proper name) case
  795.  
  796.      MKADDR(IEXP1,IEXP2) (INTEGER)
  797.          Returns a segment:offset address as a long integer built from
  798.          two word sized values by the formula: (IEXP1*00010000h+IEXP2)
  799.  
  800.      MKDATE(IEXP1,IEXP2,IEXP3) (DATE)
  801.          Returns a date with the year specified by IEXP1 (1900-2079),
  802.          month specified by IEXP2 (1-12), and day specified by IEXP3
  803.          (1-31).
  804.  
  805.      MODEM() (STRING)
  806.          Returns the modem connect string as reported by the modem to
  807.          PCBoard
  808.  
  809.      MONTH(DEXP) (INTEGER)
  810.          Returns the month of the year (1-12) of DEXP
  811.  
  812.      NOCHAR() (STRING)
  813.          Returns the current language no character
  814.  
  815.      NOT(IEXP) (INTEGER)
  816.          Returns the bitwise complement (all bits inverted) of an
  817.          integer expression
  818.  
  819.      ONLOCAL() (BOOLEAN)
  820.          Returns TRUE if the user is on locally
  821.  
  822.      OR(IEXP1,IEXP2) (INTEGER)
  823.          Returns the bitwise or of two integer expressions
  824.  
  825.      PAGESTAT() (BOOLEAN)
  826.          Returns TRUE if the user has paged the SysOp (or PAGEON has
  827.          been issued), FALSE otherwise (or PAGEOFF has been issued)
  828.  
  829.      PCBDAT() (STRING)
  830.          Returns a string with the path and file name of PCBOARD.DAT
  831.  
  832.      PCBNODE() (INTEGER)
  833.          Returns the node number
  834.  
  835.      PEEKB(IEXP) (INTEGER)
  836.          Returns a byte value (0-255) located at memory address IEXP
  837.          (PEEK is a synonym)
  838.  
  839.      PEEKDW(IEXP) (INTEGER)
  840.          Returns a signed integer value (-2147483648 - +2147483647)
  841.          located at memory address IEXP
  842.  
  843.      PEEKW(IEXP) (INTEGER)
  844.          Returns a word value (0-65535) located at memory address IEXP
  845.  
  846.      PPENAME() (STRING)
  847.          Returns the name of the currently executing PPE file minus the
  848.          path and extension
  849.  
  850.      PPEPATH() (STRING)
  851.          Returns a string with the path (no file name) of the currently
  852.          executing PPE file
  853.  
  854.      PPLBUFSIZE() (INTEGER)
  855.          Returns the number of key presses pending in the KBDSTUFF buffer
  856.  
  857.      PSA(IEXP) (BOOLEAN)
  858.          Returns TRUE if the feature specified by IEXP is enabled,
  859.          FALSE if the feature specified by IEXP is disabled
  860.          Valid values for IEXP:  1 = Alias Support Enabled
  861.                                  2 = Verify Support Enabled
  862.                                  3 = Address Support Enabled
  863.                                  4 = Password Support Enabled
  864.                                  5 = Statistics Support Enabled
  865.                                  6 = Notes Support Enabled
  866.  
  867.      RANDOM(IEXP) (INTEGER)
  868.          Returns a random number between 0 and IEXP inclusive
  869.  
  870.      READLINE(SEXP,IEXP) (STRING)
  871.          Read and return line number IEXP from file SEXP
  872.  
  873.      REGAH() (INTEGER)
  874.          Returns the value of the AH register after a DOINTR statement
  875.  
  876.      REGAL() (INTEGER)
  877.          Returns the value of the AL register after a DOINTR statement
  878.  
  879.      REGAX() (INTEGER)
  880.          Returns the value of the AX register after a DOINTR statement
  881.  
  882.      REGBH() (INTEGER)
  883.          Returns the value of the BH register after a DOINTR statement
  884.  
  885.      REGBL() (INTEGER)
  886.          Returns the value of the BL register after a DOINTR statement
  887.  
  888.      REGBX() (INTEGER)
  889.          Returns the value of the BX register after a DOINTR statement
  890.  
  891.      REGCF() (BOOLEAN)
  892.          Returns the state of the carry flag after a DOINTR statement
  893.  
  894.      REGCH() (INTEGER)
  895.          Returns the value of the CH register after a DOINTR statement
  896.  
  897.      REGCL() (INTEGER)
  898.          Returns the value of the CL register after a DOINTR statement
  899.  
  900.      REGCX() (INTEGER)
  901.          Returns the value of the CX register after a DOINTR statement
  902.  
  903.      REGDH() (INTEGER)
  904.          Returns the value of the DH register after a DOINTR statement
  905.  
  906.      REGDI() (INTEGER)
  907.          Returns the value of the DI register after a DOINTR statement
  908.  
  909.      REGDL() (INTEGER)
  910.          Returns the value of the DL register after a DOINTR statement
  911.  
  912.      REGDS() (INTEGER)
  913.          Returns the value of the DS register after a DOINTR statement
  914.  
  915.      REGDX() (INTEGER)
  916.          Returns the value of the DX register after a DOINTR statement
  917.  
  918.      REGES() (INTEGER)
  919.          Returns the value of the ES register after a DOINTR statement
  920.  
  921.      REGF() (INTEGER)
  922.          Returns the value of the flags register after a DOINTR
  923.          statement
  924.  
  925.      REGSI() (INTEGER)
  926.          Returns the value of the SI register after a DOINTR statement
  927.  
  928.      REPLACE(SEXP1,SEXP2,SEXP3) (BIGSTR)
  929.          Returns a string of SEXP1 with all occurences of the first
  930.          character of SEXP2 replaced by the first character of SEXP3
  931.  
  932.      REPLACESTR(SEXP1,SEXP2,SEXP3) (BIGSTR) 
  933.          Returns a string of SEXP1 with all occurences of sub-string SEXP2 
  934.          replaced by sub-string SEXP3
  935.  
  936.      RIGHT(SEXP,IEXP) (BIGSTR)
  937.          Returns the right-most IEXP characters of SEXP
  938.  
  939.      RTRIM(SEXP1,SEXP2) (BIGSTR)
  940.          Returns a string of SEXP1 with the first character of SEXP2
  941.          trimmed from the right
  942.  
  943.      S2I(SEXP,IEXP) (INTEGER)
  944.          Returns an integer representing the string SEXP converted from
  945.          base IEXP
  946.  
  947.      SCRTEXT(IEXP1,IEXP2,IEXP3,BEXP) (STRING)
  948.          Returns a string with the text (and color information in the
  949.          form of @X codes if BEXP is TRUE) from column IEXP1, row IEXP2,
  950.          and of length IEXP3
  951.  
  952.      SEC(TEXP) (INTEGER)
  953.          Returns the second of the minute (0-59) of TEXP
  954.  
  955.      SHOWSTAT() (BOOLEAN)
  956.          Returns TRUE if writing to the display is active, FALSE if
  957.          writing to the display is disabled
  958.  
  959.      SLPATH() (STRING)
  960.          Returns the path, as specified in PCBSetup, to the login
  961.          security files
  962.  
  963.      SPACE(IEXP) (BIGSTR)
  964.          Returns a string of spaces IEXP characters long
  965.  
  966.      STRING(EXP) (STRING)
  967.          Returns EXP converted to a string
  968.  
  969.      STRIP(SEXP1,SEXP2) (BIGSTR)
  970.          Returns a string of SEXP1 with all occurrences of the first
  971.          character of SEXP2 removed
  972.  
  973.      STRIPSTR(SEXP1,SEXP2) (BIGSTR) 
  974.          Returns a string of SEXP1 with all occurrences of sub-string
  975.          SEXP2 removed
  976.  
  977.      STRIPATX(SEXP) (BIGSTR)
  978.          Returns a string of SEXP with all @X codes removed
  979.  
  980.      SYSOPSEC() (INTEGER)
  981.          Returns the SysOp security defined in PCBOARD.DAT
  982.  
  983.      TEMPPATH() (STRING)
  984.          Returns the path, as specified in PCBSetup, to the temporary
  985.          work directory
  986.  
  987.      TIME() (TIME)
  988.          Returns the current time
  989.  
  990.      TIMEAP(TEXP) (STRING)
  991.          Returns a string representing the time TEXP in civilian format
  992.          (XX:XX:XX AM)
  993.  
  994.      TOBIGSTR(EXP) (BIGSTR)
  995.          Forces the result of EXP to the BIGSTR type
  996.      
  997.      TOBOOLEAN(EXP) (BOOLEAN)
  998.          Forces the result of EXP to the BOOLEAN type
  999.      
  1000.      TOBYTE(EXP) (BYTE)
  1001.          Forces the result of EXP to the BYTE type
  1002.      
  1003.      TODATE(EXP) (DATE)
  1004.          Forces the result of EXP to the DATE type
  1005.      
  1006.      TODOUBLE(EXP) (DOUBLE)
  1007.          Forces the result of EXP to the DOUBLE type
  1008.      
  1009.      TODREAL(EXP) (DREAL)
  1010.          Forces the result of EXP to the DREAL type
  1011.      
  1012.      TODWORD(EXP) (DWORD)
  1013.          Forces the result of EXP to the DWORD type
  1014.      
  1015.      TOEDATE(EXP) (EDATE)
  1016.          Forces the result of EXP to the EDATE type
  1017.      
  1018.      TOFLOAT(EXP) (FLOAT)
  1019.          Forces the result of EXP to the FLOAT type
  1020.      
  1021.      TOINT(EXP) (INT)
  1022.          Forces the result of EXP to the INT type
  1023.      
  1024.      TOINTEGER(EXP) (INTEGER)
  1025.          Forces the result of EXP to the INTEGER type
  1026.      
  1027.      TOLONG(EXP) (LONG)
  1028.          Forces the result of EXP to the LONG type
  1029.      
  1030.      TOMONEY(EXP) (MONEY)
  1031.          Forces the result of EXP to the MONEY type
  1032.      
  1033.      TOREAL(EXP) (REAL)
  1034.          Forces the result of EXP to the REAL type
  1035.      
  1036.      TOSBYTE(EXP) (SBYTE)
  1037.          Forces the result of EXP to the SBYTE type
  1038.      
  1039.      TOSDWORD(EXP) (SDWORD)
  1040.          Forces the result of EXP to the SDWORD type
  1041.      
  1042.      TOSHORT(EXP) (SHORT)
  1043.          Forces the result of EXP to the SHORT type
  1044.      
  1045.      TOSTRING(EXP) (STRING)
  1046.          Forces the result of EXP to the STRING type
  1047.      
  1048.      TOSWORD(EXP) (SWORD)
  1049.          Forces the result of EXP to the SWORD type
  1050.      
  1051.      TOTIME(EXP) (TIME)
  1052.          Forces the result of EXP to the TIME type
  1053.      
  1054.      TOUBYTE(EXP) (UBYTE)
  1055.          Forces the result of EXP to the UBYTE type
  1056.      
  1057.      TOUDWORD(EXP) (UDWORD)
  1058.          Forces the result of EXP to the UDWORD type
  1059.      
  1060.      TOUNSIGNED(EXP) (UNSIGNED)
  1061.          Forces the result of EXP to the UNSIGNED type
  1062.      
  1063.      TOUWORD(EXP) (UWORD)
  1064.          Forces the result of EXP to the UWORD type
  1065.      
  1066.      TOWORD(EXP) (WORD)
  1067.          Forces the result of EXP to the WORD type
  1068.      
  1069.      TOKCOUNT() (INTEGER)
  1070.          Returns the number of tokens available via the GETTOKEN
  1071.          statement and/or function
  1072.  
  1073.      TOKENSTR() (STRING)
  1074.          Returns a previously tokenized string reconstructed with
  1075.          semi-colons separating the component tokens
  1076.  
  1077.      TRIM(SEXP1,SEXP2) (BIGSTR)
  1078.          Returns a string of SEXP1 with the first character of SEXP2
  1079.          trimmed from both ends
  1080.  
  1081.      U_LMR(IEXP) 
  1082.          Returns the number of the last message read for the specified 
  1083.          conference IEXP
  1084.  
  1085.      UPPER(SEXP) (BIGSTR)
  1086.          Returns a string of SEXP with all lowercase characters
  1087.          converted to uppercase characters
  1088.  
  1089.      UN_CITY() (STRING)
  1090.          Returns a nodes city from USERNET.XXX after a RDUNET statement
  1091.  
  1092.      UN_NAME() (STRING)
  1093.          Returns a nodes user name from USERNET.XXX after a RDUNET
  1094.          statement
  1095.  
  1096.      UN_OPER() (STRING)
  1097.          Returns a nodes operation text from USERNET.XXX after a RDUNET
  1098.          statement
  1099.  
  1100.      UN_STAT() (STRING)
  1101.          Returns a nodes status from USERNET.XXX after a RDUNET
  1102.          statement
  1103.  
  1104.      U_BDL() (INTEGER)
  1105.          Returns the current users number of bytes downloaded
  1106.  
  1107.      U_BDLDAY() (INTEGER)
  1108.          Returns the current users number of bytes downloaded today
  1109.  
  1110.      U_BUL() (INTEGER)
  1111.          Returns the current users number of bytes uploaded
  1112.  
  1113.      U_FDL() (INTEGER)
  1114.          Returns the current users number of files downloaded
  1115.  
  1116.      U_FUL() (INTEGER)
  1117.          Returns the current users number of files uploaded
  1118.  
  1119.      U_INCONF(IEXP1,IEXP2) (BOOLEAN)
  1120.          Returns TRUE if user record number IEXP2 is registered in
  1121.          conference IEXP1
  1122.  
  1123.      U_LDATE() (DATE)
  1124.          Returns the current users last date on the system
  1125.  
  1126.      U_LDIR() (DATE)
  1127.          Returns the current users last directory scan date
  1128.  
  1129.      U_LOGONS() (INTEGER)
  1130.          Returns the current users number of times logged on
  1131.  
  1132.      U_LTIME() (TIME)
  1133.          Returns the current users last time on the system
  1134.  
  1135.      U_MSGRD() (INTEGER)
  1136.          Returns the number of messages the user has read
  1137.  
  1138.      U_MSGWR() (INTEGER)
  1139.          Returns the number of messages the user has written
  1140.  
  1141.      U_NAME() (STRING)
  1142.          Returns the current users name
  1143.  
  1144.      U_PWDHIST(IEXP) (STRING)
  1145.          Returns the specified password from the password history
  1146.          Valid values for IEXP are 1 through 3
  1147.  
  1148.      U_PWDLC() (DATE)
  1149.          Returns the date of the last password change
  1150.  
  1151.      U_PWDTC() (INTEGER)
  1152.          Returns the number of times the password has been changed
  1153.  
  1154.      U_RECNUM(SEXP) (INTEGER)
  1155.          Returns the user record number (0-65535) for user name SEXP or
  1156.          -1 if SEXP is not registered on this system.
  1157.  
  1158.      U_STAT(IEXP) (DATE or INTEGER)
  1159.          Returns a statistic about the user that is tracked by PCBoard
  1160.          Valid values for IEXP are 1 through 15
  1161.             1 - Returns the first date the user called the system
  1162.             2 - Returns the number of SysOp pages the user has requested
  1163.             3 - Returns the number of group chats the user has
  1164.                 participated in
  1165.             4 - Returns the number of comments the user has left
  1166.             5 - Returns the number of 300 bps connects
  1167.             6 - Returns the number of 1200 bps connects
  1168.             7 - Returns the bumber of 2400 bps connects
  1169.             8 - Returns the number of 9600 bps connects
  1170.             9 - Returns the number of 14400 bps connects
  1171.            10 - Returns the number of security violations
  1172.            11 - Returns the number of "not registered in conference"
  1173.                 warnings
  1174.            12 - Returns the number of times the users download limit
  1175.                 has been reached
  1176.            13 - Returns the number of "file not found" warnings
  1177.            14 - Returns the number of password errors the user has had
  1178.            15 - Returns the number of verify errors the user has had
  1179.  
  1180.      U_TIMEON() (INTEGER)
  1181.          Returns the current users time online today in minutes
  1182.  
  1183.      USERALIAS() (BOOLEAN)
  1184.          Returns TRUE if the current user is allowed to use an alias
  1185.      
  1186.      VALCC(SEXP) (BOOLEAN)
  1187.          Strips invalid characters from the card number SEXP and returns 
  1188.          TRUE if SEXP is a valid credit card number
  1189.  
  1190.      VALDATE(SEXP) (BOOLEAN)
  1191.          Returns TRUE if SEXP is in a valid date format
  1192.  
  1193.      VALTIME(SEXP) (BOOLEAN)
  1194.          Returns TRUE if SEXP is in a valid time format
  1195.  
  1196.      VER() (INTEGER)
  1197.          Returns the version number of PCBoard that is running
  1198.  
  1199.      XOR(IEXP1,IEXP2) (INTEGER)
  1200.          Returns the bitwise exclusive-or of two integer expressions
  1201.  
  1202.      YEAR(DEXP) (INTEGER)
  1203.          Returns the year (1900-2079) of DEXP
  1204.  
  1205.      YESCHAR() (STRING)
  1206.          Returns the current language yes character
  1207.  
  1208.  
  1209. ┌────────────┐
  1210. │ STATEMENTS │
  1211. └────────────┘
  1212.  
  1213.      PPL  recognizes  the   following  statements   with  the  specified
  1214.      arguments to  perform  the  specified  operations (some  statements
  1215.      require no arguments, in  which case there is nothing following the
  1216.      statement;  if arguments  are  required,  they may be of two types,
  1217.      expression and variable:
  1218.      * expression arguments may all be expressions of any type, but will 
  1219.         be  converted to  one of  the following types  prior to function 
  1220.         evaluation:    BEXP  (BOOLEAN),  DEXP  (DATE),  IEXP  (INTEGER), 
  1221.         MEXP (MONEY), SEXP (STRING), TEXP (TIME); 
  1222.      * variable arguments (VAR) may be variables of any type, but may be 
  1223.         converted to and from an appropriate type in order to accomplish 
  1224.         the required statement):
  1225.  
  1226.      ADJTBYTES IEXP
  1227.          Add or substract IEXP bytes to the users total download bytes
  1228.  
  1229.      ADJTFILES IEXP 
  1230.          Add or substract IEXP files to the users total download files
  1231.  
  1232.      ADJTIME IEXP
  1233.          Add or subtract IEXP minutes to the users time available this
  1234.          session
  1235.  
  1236.      ANSIPOS IEXP1,IEXP2
  1237.          If ANSI is available, position the cursor in
  1238.          column IEXP1 row IEXP2
  1239.          Legal ranges:  1 <= IEXP1 <= 80
  1240.                         1 <= IEXP2 <= 23 (Because of the status lines)
  1241.                         (1,1) is the top left corner of the screen
  1242.  
  1243.      APPEND SEXP1,SEXP2
  1244.          Append the contents of one file SEXP1 to another file SEXP2.
  1245.  
  1246.      BACKUP IEXP
  1247.          Backup (move the cursor to the left) IEXP columns without going
  1248.          past column 1
  1249.  
  1250.      BITCLEAR VAR,BIT
  1251.          Clears a specified bit (BIT) from a variable (VAR). This statement 
  1252.          is primarily intended to be used with BIGSTR variables which can be 
  1253.          up to 2048 bytes long.  However, it will work with other data types 
  1254.          as well if desired. Just be aware of the potential problems in 'bit 
  1255.          twidling' non-string buffers and then trying to access them later as 
  1256.          their 'intended' type without re-initializing the variable.  If the 
  1257.          bit parameter (an integer from 0 to the number of bits in the object) 
  1258.          is invalid no processing takes place.
  1259.  
  1260.      BITSET VAR,BIT
  1261.          Sets a specified bit from a variable. This statement is primarily 
  1262.          intended to be used with BIGSTR variables which can be up to 2048 
  1263.          bytes long.  However, it will work with other data types as well if 
  1264.          desired. Just be aware of the potential problems in 'bit twidling' 
  1265.          non-string buffers and then trying to access them later as their 
  1266.          'intended' type without re-initializing the variable.  If the bit 
  1267.          parameter (an integer from 0 to the number of bits in the object) is 
  1268.          invalid no processing takes place.
  1269.  
  1270.      BLT IEXP
  1271.          Display bulletin number IEXP
  1272.  
  1273.      BREAK 
  1274.          Can be used to break out of a WHILE or FOR loop without the use 
  1275.          of a GOTO statement
  1276.  
  1277.      BROADCAST IEXP1,IEXP2,SEXP
  1278.          Broadcast message SEXP to nodes from IEXP1 to IEXP2 inclusive
  1279.  
  1280.      BYE
  1281.          Same as having the user type BYE from the command prompt
  1282.  
  1283.      CALL SEXP
  1284.          Load and execute PPE filename specified by SEXP
  1285.  
  1286.      CDCHKOFF
  1287.          Turn off carrier detect checking
  1288.  
  1289.      CDCHKON
  1290.          Turn on carrier detect checking
  1291.  
  1292.      CHAT
  1293.          Initiate SysOp chat mode
  1294.  
  1295.      CLOSECAP
  1296.          Close the capture file previously opened with OPENCAP
  1297.  
  1298.      CLREOL
  1299.          Clear to the end of the line, with the current color if in ANSI
  1300.          mode
  1301.  
  1302.      CLS
  1303.          Clear the screen, with the current color if in ANSI mode
  1304.  
  1305.      COLOR IEXP
  1306.          Change the current color to IEXP
  1307.  
  1308.      CONFFLAG IEXP1,IEXP2
  1309.          Turn on the conference IEXP1 flags specified by IEXP2
  1310.  
  1311.      CONFUNFLAG IEXP1,IEXP2
  1312.          Turn off the conference IEXP1 flags specified by IEXP2
  1313.  
  1314.      CONTINUE 
  1315.          Can be used to abort the current iteration of a WHILE or 
  1316.          FOR loop and resume with the next iteration of the loop
  1317.  
  1318.      COPY SEXP1,SEXP2
  1319.          Copy the contents of one file SEXP1 to another file SEXP2.
  1320.  
  1321.      DBGLEVEL IEXP
  1322.          Set the debug level to IEXP
  1323.  
  1324.      DEC VAR
  1325.          Decrement the value of VAR
  1326.  
  1327.      DEFCOLOR
  1328.          Resets the current color to the system default
  1329.  
  1330.      DELAY IEXP
  1331.          Pause for IEXP clock ticks
  1332.          (1 clock tick = approximately 1/18.2 second)
  1333.  
  1334.      DELETE SEXP
  1335.          Deletes the filename specified by SEXP (ERASE is a synonym)
  1336.  
  1337.      DELUSER
  1338.          Flags the current user record for deletion
  1339.  
  1340.      DIR SEXP
  1341.          Performs a file directory command, passing it SEXP as arguments
  1342.  
  1343.      DISPFILE SEXP,IEXP
  1344.          Display file SEXP with IEXP alternate file flags
  1345.          (valid flags = GRAPH, SEC, LANG)
  1346.  
  1347.      DISPSTR SEXP
  1348.          Display file if SEXP is "%filename", execute PPE if SEXP is
  1349.          "!filename", or display string SEXP
  1350.  
  1351.      DISPTEXT IEXP1,IEXP2
  1352.          Display PCBTEXT prompt IEXP1 using flags IEXP2
  1353.          (valid flags = NEWLINE, LFBEFORE, LFAFTER, BELL, LOGIT,
  1354.          LOGITLEFT)
  1355.  
  1356.      DOINTR IEXP1,IEXP2,IEXP3,IEXP4,IEXP5,IEXP6,IEXP7,IEXP8,IEXP9,IEXP10
  1357.          Generate interrupt number IEXP1 (0-255) with the following
  1358.          register values:
  1359.              AX    = IEXP2
  1360.              BX    = IEXP3
  1361.              CX    = IEXP4
  1362.              DX    = IEXP5
  1363.              SI    = IEXP6
  1364.              DI    = IEXP7
  1365.              FLAGS = IEXP8
  1366.              DS    = IEXP9
  1367.              ES    = IEXP10
  1368.  
  1369.      DOWNLOAD SEXP1[,SEXP2,...]
  1370.          Allow downloading files from PPL. 
  1371.          The string passed to DOWNLOAD is a list of commands in the 
  1372.          same format as what a user would type after a D or DB command.  
  1373.          If a file name for download is specified here it must be 
  1374.          downloadable according to the criteria established in the FSEC 
  1375.          and DLPATH.LST files.  If it is necessary to download a file 
  1376.          not normally available via the FSEC and/or DLPATH.LST files the 
  1377.          FLAG statement may be used to force it into the list of files to 
  1378.          download.
  1379.  
  1380.      DTROFF
  1381.          Turn off the DTR signal
  1382.  
  1383.      DTRON
  1384.          Turn on the DTR signal
  1385.  
  1386.      END
  1387.          End PPE execution
  1388.  
  1389.      FAPPEND IEXP1,SEXP,IEXP2,IEXP3
  1390.          Use channel IEXP1 to open file SEXP in append mode with access
  1391.          mode IEXP2 and share mode IEXP3
  1392.          (valid channels = 0 - 7 [0 is used for script questionnaires])
  1393.          (valid access modes = O_RD, O_WR, O_RW [should use O_RW])
  1394.          (valid share modes = S_DN, S_DR, S_DW, S_DB)
  1395.  
  1396.      FCLOSE IEXP
  1397.          Close channel IEXP (accept channel -1 as the READLINE() function
  1398.          'channel' and close it
  1399.  
  1400.  
  1401.      FCREATE IEXP1,SEXP,IEXP2,IEXP3
  1402.          Use channel IEXP1 to create and open file SEXP in access mode
  1403.          IEXP2 and share mode IEXP3
  1404.          (valid channels = 0 - 7 [0 is used for script questionnaires])
  1405.          (valid access modes = O_RD, O_WR, O_RW [should use O_WR])
  1406.          (valid share modes = S_DN, S_DR, S_DW, S_DB)
  1407.  
  1408.      FDEFIN IEXP
  1409.          Specify a default input file channel IEXP (used to speed up 
  1410.          file input)
  1411.  
  1412.      FDEFOUT IEXP
  1413.          Specify a default output file channel IEXP (used to speed up 
  1414.          file output)
  1415.  
  1416.      FDGET VAR
  1417.          Read a line from a channel, opened by FDEFIN and assign it to FAR
  1418.      
  1419.      FDPUT SEXP[,SEXP...]
  1420.          Write one or more SEXP out to a channel, opened by FDEFOUT
  1421.  
  1422.      FDPUTPAD SEXP,IEXP
  1423.          Write out SEXP, padding or truncating to length IEXP as needed, 
  1424.          to a channel, opened by FDEFOUT
  1425.  
  1426.      FDREAD SEXP,IEXP
  1427.          Read binary data of size IEXP in variable SEXP from a file opened
  1428.          by FDEFIN
  1429.  
  1430.      FDWRITE SEXP,IEXP
  1431.          Write binary data SEXP with size IEXP to a file on a channel, opened 
  1432.          by FDEFOUT
  1433.  
  1434.      FFLUSH channel
  1435.          Flush a specified channels changes to disk
  1436.  
  1437.      FGET IEXP,VAR
  1438.          Read a line from channel IEXP and assign it to VAR
  1439.  
  1440.      FLAG SEXP
  1441.          Allow flagging files SEXP for download directly from a PPE.  
  1442.          Note that FLAG does not attempt to honor restrictions in the 
  1443.          FSEC and/or DLPATH.LST files.  This allows you to flag up any 
  1444.          file desired. Remember to indicate the whole path & filename
  1445.          (wilcards not allowed)
  1446.  
  1447.      FOPEN IEXP1,SEXP,IEXP2,IEXP3
  1448.          Use channel IEXP1 to open file SEXP in access mode IEXP2 and
  1449.          share mode IEXP3
  1450.          (valid channels = 0 - 7 [0 is used for script questionnaires])
  1451.          (valid access modes = O_RD, O_WR, O_RW)
  1452.          (valid share modes = S_DN, S_DR, S_DW, S_DB)
  1453.  
  1454.      FOR VAR = IEXP1 TO IEXP2 [STEP IEXP3]
  1455.        statement(s)
  1456.       NEXT
  1457.          FOR - Initializes a loop by assigning IEXP1 to VAR and
  1458.            continuing while VAR <= IEXP2 (if IEXP3 >= 0) or VAR >= IEXP2
  1459.            (if IEXP3 < 0) (TO is required to separate IEXP1 and IEXP2;
  1460.            if STEP (optional) is not specified IEXP3 defaults to 1)
  1461.          NEXT - Adds IEXP3 to VAR, transfers control to the closest FOR
  1462.            statement, and marks the end of the FOR loop (ENDFOR and END
  1463.            FOR are synonyms)
  1464.  
  1465.      FORWARD IEXP
  1466.          Move the cursor forward (to the right) IEXP columns without
  1467.          going past column 80
  1468.  
  1469.      FPUT IEXP,SEXP[,SEXP...]
  1470.          Write one or more SEXP out to channel IEXP
  1471.  
  1472.      FPUTLN IEXP[,SEXP[,SEXP...]]
  1473.          Write zero or more SEXP out to channel IEXP and terminate with
  1474.          a carriage return/line feed pair
  1475.  
  1476.      FPUTPAD IEXP1,SEXP,IEXP2
  1477.          Write out SEXP, padding or truncating to length IEXP2 as
  1478.          needed, to channel IEXP1
  1479.  
  1480.      FREAD IEXP1,SEXP,IEXP2
  1481.          Read binary data of size IEXP2 in variable SEXP from a file with
  1482.          channel IEXP1
  1483.  
  1484.      FRESHLINE
  1485.          If the cursor is not in column 1, do a newline
  1486.  
  1487.      FREWIND IEXP
  1488.          Rewind channel IEXP after flushing buffers and committing the
  1489.          file to disk.
  1490.  
  1491.      FSEEK IEXP1,IEXP2,IEXP3bytes,position
  1492.          Start seek from IEXP3 to any random location (+/-IEXP2) within a 
  1493.          file on channel IEXP1.
  1494.          (SEEK_SET (0) for the beginning of the file, SEEK_CUR (1) for
  1495.           the current file pointer location, SEEK_END (2) for the end of
  1496.           the file)
  1497.  
  1498.      FWRITE IEXP1,SEXP,IEXP2
  1499.          Write binary data SEXP with size IEXP2 to a file on channel IEXP1
  1500.  
  1501.      GETALTUSER IEXP
  1502.          Get the information for an alternate user.  It will fill the user 
  1503.          variables with information from the specified user record IEXP as 
  1504.          well as redirect user statements and functions. 
  1505.          If an attempt is made to get a record number that doesn't exist, 
  1506.          the user functions will revert to the current user and the user
  1507.          variables will be invalidated as though no GETUSER/GETALTUSER
  1508.          statement had been issued (though they will continue to maintain
  1509.          any value held). PUTUSER/PUTALTUSER should be issued to commit any
  1510.          variable changes to the user record.  Additionally, there is at
  1511.          least one statement that will not affect alternate users:  ADJTIME.
  1512.          It is restricted to the current user online.  Also, if the
  1513.          alternate user is online, changes to the record won't take hold
  1514.          until after the user has logged off.  Also, if there is not enough
  1515.          memory available (primarily for the last message read pointers)
  1516.          this statement will fail.
  1517.  
  1518.      FDPUTLN [SEXP[,SEXP...]]
  1519.          Write zero or more SEXP out to a channel, opened by FDEFOUT and 
  1520.          terminate with a carriage return/line feed pair
  1521.  
  1522.      GETTOKEN VAR
  1523.          Get a token from a previous call to tokenize and assign
  1524.          it to VAR
  1525.  
  1526.      GETUSER
  1527.          Fill the predefined variables (U_...) with current information
  1528.          from the user record
  1529.  
  1530.      GOSUB LABEL
  1531.          Transfer control to LABEL, marking the current PPE location for
  1532.          a future RETURN statement (GO SUB is a synonym)
  1533.  
  1534.      GOTO LABEL
  1535.          Transfer control to LABEL (GO TO is a synonym)
  1536.  
  1537.      GOODBYE
  1538.          Same as having the user type G from the command prompt
  1539.  
  1540.      HANGUP
  1541.          Hangup on the user without any notification
  1542.  
  1543.      IF (BEXP) statement ...
  1544.          Evaluate BEXP and, if true, execute statement; otherwise skip
  1545.          to the next statement
  1546.  
  1547.      IF (BEXP) THEN
  1548.        statement(s)
  1549.      ELSEIF (BEXP) THEN
  1550.        statement(s)
  1551.      ELSE
  1552.        statement(s)
  1553.      ENDIF
  1554.          IF - If expression cond is TRUE then this statement transfers
  1555.            control to the statement(s) following it, otherwise control
  1556.            is tranferred to the next ELSEIF, ELSE or ENDIF statement
  1557.            (requires THEN [or DO] after the condition)
  1558.          ELSEIF - (optional) If expression cond is TRUE then this
  1559.            statement transfers control to the statements following it,
  1560.            otherwise control is tranferred to the next ELSEIF, ELSE or
  1561.            ENDIF statement (There may be multiple ELSEIF statements
  1562.            between the IF and ELSE statements (ELSE IF is a synonym;
  1563.            nothing is required to come after the condition, although
  1564.            THEN [or DO] may appear for clarification and consistency in
  1565.            the source code)
  1566.          ELSE - (optional) Separates the false portion of an IF/ELSEIF
  1567.            statement from the true portion
  1568.          ENDIF - Ends an IF/ELSEIF/ELSE statement block (END IF is a
  1569.            synonym)
  1570.  
  1571.      FREALTUSER 
  1572.          Deallocates alternate user information and gets the information 
  1573.          for the current caller.  GETALTUSER must allocate memory to hold 
  1574.          the alternate user information.  FREALTUSER is used to free up 
  1575.          that memory for other processes.  Additionally, the MESSAGE 
  1576.          statement needs to use alternate user information as well and can't 
  1577.          if the PPE is already using it.  So this statement is necessary if 
  1578.          a MESSAGE statement needs to be used after a GETALTUSER pair.
  1579.  
  1580.      INC VAR
  1581.          Increment the value of VAR
  1582.  
  1583.      INPUT SEXP,VAR
  1584.          Display SEXP and get input from user, assigning it to VAR
  1585.          (60 characters maximum)
  1586.  
  1587.      INPUTCC SEXP,VAR,IEXP
  1588.          Display SEXP in color IEXP and get a credit card formatted
  1589.          string from the user, assigning it to VAR
  1590.          (16 characters maximum, valid characters 0-9)
  1591.  
  1592.      INPUTDATE SEXP,VAR,IEXP
  1593.          Display SEXP in color IEXP and get a date formatted string from
  1594.          the user, assigning it to VAR
  1595.          (8 characters maximum, valid characters 0-9 - /)
  1596.  
  1597.      INPUTINT SEXP,VAR,IEXP
  1598.          Display SEXP in color IEXP and get an integer formatted string
  1599.          from the user, assigning it to VAR
  1600.          (11 characters maximum, valid characters 0-9)
  1601.  
  1602.      INPUTMONEY SEXP,VAR,IEXP
  1603.          Display SEXP in color IEXP and get a money formatted string
  1604.          from the user, assigning it to VAR
  1605.          (13 characters maximum, valid characters 0-9 $ .)
  1606.  
  1607.      INPUTSTR SEXP1,VAR,IEXP1,IEXP2,SEXP2,IEXP3
  1608.          Display SEXP1 in color IEXP1 and get a string (maximum length
  1609.          IEXP2, valid characters SEXP2, flags IEXP3) from the user,
  1610.          assigning it to VAR
  1611.          (valid length = 1-256)
  1612.          (valid characters = any string)
  1613.          (valid flags = ECHODOTS, FIELDLEN, GUIDE, UPCASE, STACKED,
  1614.          ERASELINE, NEWLINE, LFBEFORE, LFAFTER, WORDWRAP, NOCLEAR,
  1615.          HIGHASCII, AUTO, YESNO)
  1616.  
  1617.      INPUTTEXT SEXP,VAR,IEXP1,IEXP2
  1618.          Display SEXP in color IEXP1 and get a string (maximum length
  1619.          IEXP2) from the user, assigning it to VAR
  1620.  
  1621.      INPUTTIME SEXP,VAR,IEXP
  1622.          Display SEXP in color IEXP and get a time formatted string from
  1623.          the user, assigning it to VAR
  1624.          (8 characters maximum, valid characters 0-9 :)
  1625.  
  1626.      INPUTYN SEXP,VAR,IEXP
  1627.          Display SEXP in color IEXP and get a yes/no response from
  1628.          the user, assigning it to VAR
  1629.          (1 characters maximum, valid characters determined by language)
  1630.  
  1631.      JOIN SEXP
  1632.          Performs a join conference command, passing it SEXP as
  1633.          arguments
  1634.  
  1635.      KBDCHKOFF
  1636.          Turn off keyboard time out checking
  1637.  
  1638.      KBDCHKON
  1639.          Turn on keyboard time out checking
  1640.  
  1641.      KBDFILE SEXP
  1642.          Stuff the keyboard buffer with the contents of file SEXP
  1643.  
  1644.      KBDFLUSH 
  1645.          Flush the local keyboard buffer and any stuffed keystroke buffers.  
  1646.  
  1647.      KBDSTRING SEXP
  1648.          Stuff the keyboard buffer with the contents of SEXP with
  1649.          'keystrokes' echoed to the display
  1650.  
  1651.      KBDSTUFF SEXP
  1652.          Stuff the keyboard buffer with the contents of SEXP
  1653.  
  1654.      KEYFLUSH 
  1655.          Flush both the local buffers and the incoming modem buffer.  
  1656.  
  1657.      LANG IEXP
  1658.          Changes the language (Number IEXP) in use by the current user
  1659.  
  1660.      LASTIN IEXP
  1661.          Set the users last conference in value IEXP. It can be used 
  1662.          during the logon process to force the user into a particular 
  1663.          conference at start up (for example, from a logon script). 
  1664.  
  1665.      LET VAR = EXP
  1666.          Evaluate expression EXP, convert and assign to VAR
  1667.          (NOTE:  LET is the only optional keyword.  If no keyword is
  1668.          found, LET is assumed.  There are certain circumstances where
  1669.          it may be required, such as assignment to a variable named the
  1670.          same as a statement (PRINT, for example, would require a line
  1671.          such as LET PRINT = TRUE instead of just PRINT = TRUE)
  1672.  
  1673.      LOG SEXP,BEXP
  1674.          Write string SEXP to the callers log, left justified if BEXP is
  1675.          TRUE
  1676.                       1
  1677.      LOOP 
  1678.          Can be used to abort the current iteration of a WHILE or FOR loop 
  1679.          and resume with the next iteration of the loop (alias for CONTINUE)
  1680.  
  1681.      MDMFLUSH 
  1682.          Flush the incoming modem buffer
  1683.  
  1684.      MESSAGE IEXP,SEXP1,SEXP2,SEXP3,SEXP4,DEXP,BEXP1,BEXP2,SEXP5
  1685.          Write a message in conference IEXP, to user SEXP1 (empty string
  1686.          defaults to current caller), from user SEXP2 (empty string
  1687.          defaults to current caller), subject SEXP3, security in SEXP4
  1688.          (N or R; N is the default), pack out date in DEXP (0 for no
  1689.          pack out date), BEXP1 TRUE if return receipt desired, BEXP2
  1690.          TRUE if message should be echoed, and SEXP5 is the filename to
  1691.          use for the message text
  1692.  
  1693.      MORE
  1694.          Displays a MORE? prompt
  1695.  
  1696.      MOUSEREG IEXP1,IEXP2,IEXP3,IEXP4,IEXP5,IEXP6,IEXP7,BOOLEAN1,BOOLEAN2,SEXP
  1697.          Sets up a RIP mouse region on the remote terminal
  1698.          IEXP1       = Is the RIP region number
  1699.          IEXP2,IEXP3 = The (X,Y) coordinates of the upper-left of the region
  1700.          IEXP4,IEXP5 = The (X,Y) coordinates of the lower-right of the region
  1701.          IEXP6       = The width of each character in pixels
  1702.          IEXP7       = The height of each character in pixels
  1703.          BOOLEAN1    = A boolean flag (TRUE to invert the region when clicked)
  1704.          BOOLEAN2    = A boolean flag (TRUE to clear and full screen the text window)
  1705.          SEXP        = Text that the remote terminal should transmit when the region
  1706.                         is clicked
  1707.  
  1708.      MPRINT SEXP[,SEXP...]
  1709.          Display one or more string expressions on the callers screen
  1710.          only (this statement does not send anything to the BBS screen)
  1711.  
  1712.      MPRINTLN [SEXP[,SEXP...]]
  1713.          Display zero or more string expressions on the callers screen
  1714.          only and follow with a newline (this statement does not send
  1715.          anything to the BBS screen)
  1716.  
  1717.      NEWLINE
  1718.          Write a newline to the display
  1719.  
  1720.      NEWLINES IEXP
  1721.          Write IEXP newlines to the display
  1722.  
  1723.      OPENCAP SEXP,VAR
  1724.          Open SEXP and capture all screen output to it.  If an error
  1725.          occurs creating or opening SEXP, VAR is set to TRUE, otherwise
  1726.          VAR is set to FALSE.
  1727.  
  1728.      OPTEXT SEXP
  1729.          Writes string SEXP into the @OPTEXT@ macro
  1730.  
  1731.      PAGEOFF
  1732.          Turn off the SysOp paged indicator (flashing p on status line)
  1733.  
  1734.      PAGEON
  1735.          Turn on the SysOp paged indicator (flashing p on status line)
  1736.  
  1737.      POKEB IEXP1,IEXP2
  1738.          Assign the value IEXP2 (0-255) to memory address IEXP1
  1739.          (POKE is a synonym)
  1740.  
  1741.      POKEDW IEXP1,IEXP2
  1742.          Assign the value IEXP2 (-2147483648 - +2147483647) to memory
  1743.          address IEXP1
  1744.  
  1745.      POKEW IEXP1,IEXP2
  1746.          Assign the value IEXP2 (0-65535) to memory address IEXP1
  1747.  
  1748.      POP VAR[,VAR...]
  1749.          Pop values (previously pushed onto the stack) into a list of
  1750.          variables
  1751.  
  1752.      PRFOUND 
  1753.          Display one or more string expressions. If the last SEARCHFIND 
  1754.          statement resulted in a match, it will automatically highlight 
  1755.          found words.
  1756.          
  1757.      PRFOUNDLN  
  1758.          Display zero or more string expressions and follow with a newline. 
  1759.          If the last SEARCHFIND statement resulted in a match, it will 
  1760.          automatically highlight found words.
  1761.          
  1762.      PRINT SEXP[,SEXP...]
  1763.          Display one or more string expressions
  1764.  
  1765.      PRINTLN [SEXP[,SEXP...]]
  1766.          Display zero or more string expressions and follow with a
  1767.          newline
  1768.  
  1769.      PROMPTSTR IEXP1,VAR,IEXP2,SEXP,IEXP3
  1770.          Display PCBTEXT entry IEXP1 and get a string (maximum length
  1771.          IEXP2, valid characters SEXP, flags IEXP3) from the user,
  1772.          assigning it to VAR
  1773.          (valid length = 1-256)
  1774.          (valid characters = any string)
  1775.          (valid flags = ECHODOTS, FIELDLEN, GUIDE, UPCASE, STACKED,
  1776.          ERASELINE, NEWLINE, LFBEFORE, LFAFTER, WORDWRAP, NOCLEAR,
  1777.          HIGHASCII, AUTO, YESNO)
  1778.  
  1779.      PUSH EXP[,EXP...]
  1780.          Push a list of evaluated expressions onto the stack
  1781.  
  1782.      PUTALTUSER 
  1783.          Write the information from the predefined variables (U_...) to
  1784.          the user alias record if a successful GETUSER or GETALTUSER was 
  1785.          issued previously.  
  1786.  
  1787.      PUTUSER
  1788.          Write the information from the predefined variables (U_...) to
  1789.          the user record if a successful GETUSER or GETALTUSER was issued 
  1790.          previously.  
  1791.  
  1792.      REDIM 
  1793.          Dynamically redimension an array at run-time. To use it you must 
  1794.          declare the array in advance with the number subscripts desired.  
  1795.          This allows the compiler to perform it's standard error checking 
  1796.          on subscripts.  For example:
  1797.  
  1798.            STRING s(1,1,1)
  1799.            REDIM s,5,5,5
  1800.            LET s(4,4,4) = "Hello, World!"
  1801.            PRINTLN s(4,4,4)
  1802.  
  1803.          If an attempt is made to redimension an array with a different number
  1804.          of dimensions, an error or warning (as appropriate) will be generated.
  1805.  
  1806.      QUEST IEXP
  1807.          Do script questionnaire IEXP
  1808.  
  1809.      QUIT 
  1810.          Can be used to break out of a WHILE or FOR loop without the 
  1811.          use of a GOTO statement (alias for BREAK)
  1812.  
  1813.      RDUNET IEXP
  1814.          Read information from USERNET.XXX for node IEXP
  1815.  
  1816.      RDUSYS
  1817.          Reads a USERS.SYS file, if present, and updates the users
  1818.          record
  1819.  
  1820.      RENAME SEXP1,SEXP2
  1821.          Rename file SEXP1 to SEXP2
  1822.  
  1823.      RESETDISP
  1824.          Reset the display after an user abort
  1825.  
  1826.      RESTSCRN
  1827.          Restore the screen from the buffer previously saved with
  1828.          SAVESCRN
  1829.  
  1830.      RETURN
  1831.          Return to the statement after the last GOSUB or, if no GOSUB is
  1832.          waiting for a RETURN, END the PPE
  1833.  
  1834.      SAVESCRN
  1835.          Save the current screen in a buffer for later restoration with
  1836.          the RESTSCRN
  1837.  
  1838.      SCRFILE IEXP,SEXP
  1839.          Finds a file name and line number that is currently on the screen
  1840.          IEXP   = Should be set before calling to the line number to start
  1841.                    searching on (1 is the top line); Will be set to the line
  1842.                    number where the file name was found or 0 if no file name
  1843.                    was found
  1844.          SEXP   = Will be set to the file name if one is found on screen
  1845.  
  1846.      SEARCHFIND EXP,BOOLEAN
  1847.          Searchs with BOYER-MOORE a text buffer using EXP criteria (BOOLEAN=
  1848.          TRUE if EXP contains the search criteria)
  1849.  
  1850.      SEARCHINIT SEXP,BOOLEAN
  1851.          Initializes search parameters SEXP (|& are valid) for a faster 
  1852.          BOYER-MOORE search algorithm (BOOLEAN=TRUE for case sensitive)
  1853.  
  1854.      SEARCHSTOP 
  1855.          Clears out previously entered search criteria  
  1856.  
  1857.      SENDMODEM SEXP
  1858.          Send the text in SEXP out to the modem
  1859.  
  1860.      SHELL BEXP,VAR,SEXP1,SEXP2
  1861.          Shell (via COMMAND.COM if BEXP is TRUE) to program/command
  1862.          SEXP1 with arguments SEXP2, saving the return value in VAR
  1863.          (NOTE:  If BEXP is TRUE, the value assigned to VAR will be the
  1864.          return code of COMMAND.COM, not SEXP1)
  1865.  
  1866.      SHOWOFF
  1867.          Turns off display of information to the screen
  1868.  
  1869.      SHOWON
  1870.          Turns on display of information to the screen
  1871.  
  1872.      SORT EXP,IEXP
  1873.          Sorts the contents of an array EXP into a pointer array IEXP
  1874.  
  1875.      SOUND IEXP
  1876.          Turn on the BBS PC speaker at the frequency (1-65535) specified
  1877.          by IEXP (or turn it off if the frequency is 0)
  1878.  
  1879.      SPRINT SEXP[,SEXP...]
  1880.          Display one or more string expressions on the BBS screen only
  1881.          (this statement does not send anything to the modem)
  1882.  
  1883.      SPRINTLN [SEXP[,SEXP...]]
  1884.          Display zero or more string expressions on the BBS screen only
  1885.          and follow with a newline (this statement does not send
  1886.          anything to the modem)
  1887.  
  1888.      STARTDISP IEXP
  1889.          Start display monitoring in mode IEXP
  1890.          (valid modes = NC, FNS, FCL)
  1891.  
  1892.      STOP
  1893.          Abort PPE execution without appending answers (channel 0) to
  1894.          the answer file
  1895.  
  1896.      TOKENIZE SEXP
  1897.          Tokenize string SEXP into individual items separated by
  1898.          semi-colons or spaces
  1899.  
  1900.      TPACGET SEXP,VAR,IEXP
  1901.          Get information from a named TPA SEXP for a specified conference 
  1902.          IEXP in string format VAR  
  1903.  
  1904.      TPACPUT SEXP,VAR,IEXP
  1905.          Put information to a named TPA SEXP for a specified conference IEXP 
  1906.          in string format VAR
  1907.  
  1908.      TPACREAD SEXP,VAR,IEXP
  1909.          Get information VAR from a named TPA SEXP for a specified conference
  1910.          IEXP
  1911.  
  1912.      TPACWRITE SEXP,VAR,IEXP
  1913.          Put information VAR to a named TPA SEXP for a specified conference 
  1914.          IEXP
  1915.  
  1916.      TPAGET SEXP,VAR
  1917.          Get static information from a named TPA SEXP in string format VAR
  1918.  
  1919.      TPAPUT SEXP,VAR
  1920.          Put static information to a named TPA SEXP in string format VAR
  1921.  
  1922.      TPAREAD SEXP,VAR
  1923.          Get static information VAR from a named TPA SEXP
  1924.  
  1925.      TPAWRITE SEXP,VAR
  1926.          Put static information VAR to a named TPA SEXP
  1927.  
  1928.      VARADDR VAR1,VAR2
  1929.          Assign the address (segment and offset) of VAR1 to VAR2
  1930.  
  1931.      VAROFF VAR1,VAR2
  1932.          Assign the offset address of VAR1 to VAR2
  1933.  
  1934.      VARSEG VAR1,VAR2
  1935.          Assign the segment address of VAR1 to VAR2
  1936.  
  1937.      WAIT
  1938.          Displays a PRESS ENTER TO CONTINUE? prompt
  1939.  
  1940.      WAITFOR SEXP,VAR,IEXP
  1941.          Wait up to IEXP seconds for the string SEXP, assigned TRUE to
  1942.          VAR if the string is found in the time specified or FALSE if
  1943.          the string is not found (WAIT FOR is a synonym)
  1944.  
  1945.      WHILE (BEXP) statement ...
  1946.          While BEXP is true execute statement; when BEXP is false
  1947.          execute following statements
  1948.  
  1949.      WHILE (BEXP) DO
  1950.        statement(s)
  1951.      ENDWHILE
  1952.          WHILE - While BEXP is true execute statement(s); when BEXP is
  1953.            false transfer control to the first statement following the
  1954.            ENDWHILE statement (requires DO [or THEN] after the
  1955.            expression)
  1956.          ENDWHILE - Transfers control to the closest WHILE statement and
  1957.            marks the end of the WHILE loop (END WHILE is a synonym)
  1958.  
  1959.      WRUNET IEXP,SEXP1,SEXP2,SEXP3,SEXP4,SEXP5
  1960.          Write information to USERNET.XXX for node IEXP, where SEXP1 is
  1961.          the new node status, SEXP2 is the new node user name, SEXP3 is
  1962.          the new node city, SEXP4 is the new node operation text, and
  1963.          SEXP5 is broadcast text
  1964.  
  1965.      WRUSYS
  1966.          Writes (creates) a USERS.SYS file which can be used by a
  1967.          SHELLed application
  1968.  
  1969.      WRUSYSDOOR SEXP
  1970.          Write a USERS.SYS file with a TPA record for a DOOR application SEXP
  1971.  
  1972.