home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-05-16 | 254.6 KB | 7,691 lines |
-
-
-
-
-
-
-
-
-
- RExL Version 2.10
-
-
- A Rule-based Applications Development Environment
-
- From
-
-
- The Software Loft,
- Lough Guitane,
- Killarney,
- Co. Kerry,
- Ireland. Tel: [+353] 64-54014
-
- Internet: softloft@iruccvax.ucc.ie
-
- Compuserve: 100042,1237
-
-
-
-
- -- Part II -- The Appendices to the Manual --
-
-
-
-
- Information in this document is subject to change without
- notice and does not represent a commitment on the part of
- The Software Loft. The software described in this manual
- may be used and copied within the terms of the license
- agreement.
-
- Turbo C, Turbo Pascal and Sidekick are registered trademarks
- of Borland International. dBase III+ and dBase are
- registered trademarks of Ashton-Tate.
-
- (C) Copyright, The Software Loft, 1992. All rights
- reserved. If you have any difficulties, please contact us
- at the following address:
-
- The Software Loft
- Lough Guitane
- Killarney
- Co. Kerry
- Ireland Telephone: [+353] 64-54014
-
- Internet: softloft@iruccvax.ucc.ie
-
- Compuserve: 100042,1237
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Contents
-
-
-
- Chapter 1 Function Families 3
- 1.1 Introduction . . . . . . . . . . . . . . 3
- 1.2 Array handling . . . . . . . . . . . . . 3
- 1.3 Binary operations . . . . . . . . . . . 4
- 1.4 Database operations . . . . . . . . . . 4
- 1.5 Date and time manipulation . . . . . . . 5
- 1.6 RExL error handling functions . . . . . 6
- 1.7 Keyboard handling functions . . . . . . 7
- 1.8 Operating system interface functions . . 7
- 1.9 Financial functions . . . . . . . . . . 8
- 1.10 Mathematical functions . . . . . . . . 8
- 1.11 Screen handling functions . . . . . . . 9
- 1.12 Miscellaneous functions . . . . . . . . 9
-
- Chapter 2 The Database Module 11
- 2.1 Introduction to Databases . . . . . . 11
- 2.2 Indexes . . . . . . . . . . . . . . . 13
- 2.3 Using Database Files . . . . . . . . . 15
- 2.3.1 Opening and selecting files . . . 15
- 2.3.2 Reading and writing to files . . 16
- 2.3.2.1 Using functions . . . . . . 16
- 2.3.2.2 Direct field access . . . . 18
- 2.3.3 Moving around in a file . . . . . 20
- 2.3.4 Miscellaneous functions . . . . . 20
- 2.3.4.1 Statistical analysis of
- data . . . . . . . . . . . . 20
- 2.3.4.2 Deletion of information . . 20
- 2.3.4.3 Other functions . . . . . . 21
-
- Chapter 3 Function Reference 23
-
- Chapter 4 Keystroke reference 95
- 4.1 Editor keystrokes . . . . . . . . . . 95
- 4.2 Screen designer keystrokes . . . . . . 97
- 4.3 Debugger keystrokes . . . . . . . . . 99
-
-
-
-
-
- i
-
-
-
- Chapter 5 Error Messages 103
- 5.1 Error messages common to runtime and
- editor . . . . . . . . . . . . . . . . 103
- 5.1.1 Bad help file format . . . . . . 103
- 5.1.2 Cannot locate system . . . . . . 103
- 5.1.3 Cannot open print file . . . . . 103
- 5.1.4 Couldn't open file . . . . . . . 103
- 5.1.5 Macros nested too deep (20=max) . 104
- 5.1.6 Help file index is not loaded . . 104
- 5.1.7 Unable to locate help file . . . 104
- 5.1.8 Macro recursion not allowed . . . 104
- 5.1.9 Error loading configuration
- file . . . . . . . . . . . . . . 104
- 5.1.10 Zero memory allocation
- request! . . . . . . . . . . . . 104
- 5.1.11 Not enough memory to perform
- selected operation . . . . . . . 105
- 5.1.12 This window is not movable . . . 105
- 5.1.13 No directories available . . . . 105
- 5.1.14 No files in directory . . . . . 105
- 5.1.15 No macros defined . . . . . . . 105
- 5.1.16 --- Out of memory --- . . . . . 105
- 5.1.17 No screens defined . . . . . . . 105
- 5.1.18 Not enough memory to load
- system . . . . . . . . . . . . . 105
- 5.1.19 No unused rules available . . . 105
- 5.1.20 No unused screens available . . 106
- 5.1.21 No variables defined . . . . . . 106
- 5.1.22 Rule is not used in current
- listing . . . . . . . . . . . . 106
- 5.1.23 Error saving configuration
- file . . . . . . . . . . . . . . 106
- 5.1.24 Screen is not used in current
- listing . . . . . . . . . . . . 106
- 5.1.25 Screen file is corrupt . . . . . 106
- 5.1.26 Too many files open . . . . . . 107
- 5.1.27 Too many keys in macro
- (500=max) . . . . . . . . . . . 107
- 5.1.28 Variable is not used in current
- listing . . . . . . . . . . . . 107
- 5.1.29 Wrong source file format . . . . 107
- 5.1.30 Wrong screen file format . . . . 107
- 5.1.31 Error opening screen file . . . 107
- 5.2 Error messages unique to editor . . . 107
- 5.2.1 Incorrect format in listing
- file . . . . . . . . . . . . . . 107
- 5.2.2 Cannot nest fields . . . . . . . 108
-
-
-
- ii
-
-
-
- 5.2.3 Can only delete recursed rule from
- first level of recursion . . . . 108
- 5.2.4 Unable to locate runtime module . 108
- 5.2.5 Area crosses fields . . . . . . . 108
- 5.2.6 Can't have a field of this type in
- this screen . . . . . . . . . . . 108
- 5.2.7 Illegal array dimension . . . . . 109
- 5.2.8 Maximum number of fields
- reached . . . . . . . . . . . . . 109
- 5.2.9 Memory low, should save now! . . 109
- 5.2.10 Not used in listing . . . . . . 109
- 5.2.11 This is the main rule and is called
- to start the kbs . . . . . . . . 109
- 5.2.12 Cannot change rule name to one
- already existing . . . . . . . . 109
- 5.2.13 This screen already exists . . . 109
- 5.2.14 Toggle fields must be more than 5
- and less than 75 characters
- wide . . . . . . . . . . . . . . 110
- 5.2.15 Unable to create screen file . . 110
- 5.2.16 Error saving file . . . . . . . 110
- 5.2.17 Error loading file . . . . . . . 110
- 5.2.18 Error loading screen file . . . 110
- 5.2.19 Cannot change name of Main
- Program . . . . . . . . . . . . 110
- 5.3 Error messages unique to runtime-
- debugger . . . . . . . . . . . . . . . 110
- 5.3.1 Array bounds overflow . . . . . . 110
- 5.3.2 Can't set a breakpoint here . . . 111
- 5.3.3 Cannot open printer for output . 111
- 5.3.4 Cannot find editor . . . . . . . 111
- 5.3.5 Divide by zero . . . . . . . . . 111
- 5.3.6 String-numeric collision . . . . 111
- 5.3.7 Can't have string for radio button
- parameter . . . . . . . . . . . . 112
- 5.3.8 Stack underflow . . . . . . . . . 112
- 5.3.9 Stack overflow . . . . . . . . . 112
- 5.3.10 Numeric value out of range . . . 112
- 5.3.11 Rule stack overflow . . . . . . 112
- 5.3.12 Invalid database file handle . . 112
- 5.3.13 Unable to allocate rule stack . 112
- 5.3.14 Math error : Parameter out of range
- in function XXX . . . . . . . . 113
- 5.3.15 Math error : Parameter singularity
- in function XXX . . . . . . . . 113
- 5.3.16 Math error : numeric overflow . 113
- 5.3.17 Math error : numeric underflow . 113
- 5.3.18 Math error : precision loss . . 113
-
-
- iii
-
-
-
- 5.4 Critical Errors . . . . . . . . . . . 113
- 5.4.1 Write protect error . . . . . . . 114
- 5.4.2 Drive not ready . . . . . . . . . 114
- 5.4.3 Printer out of paper . . . . . . 114
- 5.4.4 Write fault . . . . . . . . . . . 114
- 5.4.5 Read fault . . . . . . . . . . . 114
- 5.4.6 General Failure . . . . . . . . . 114
- 5.4.7 Sector not found . . . . . . . . 114
- 5.4.8 Unknown unit . . . . . . . . . . 115
- 5.4.9 Unknown command . . . . . . . . . 115
- 5.4.10 CRC error . . . . . . . . . . . 115
- 5.4.11 Bad request structure length . . 115
- 5.4.12 Seek error . . . . . . . . . . . 115
- 5.4.13 Unknown media type . . . . . . . 115
-
- Chapter 6 Extra Utilities 117
- 6.1 RExLPC . . . . . . . . . . . . . . . . 117
- 6.2 RDU . . . . . . . . . . . . . . . . . 118
- 6.2.1 Introduction . . . . . . . . . . 119
- 6.2.2 Loading and Running . . . . . . . 119
- 6.2.3 RDU menu system . . . . . . . . . 119
- 6.2.3.1 File Menu . . . . . . . . . 119
- 6.2.4 Edit Menu . . . . . . . . . . . . 120
- 6.2.5 Search Menu . . . . . . . . . . . 122
- 6.2.6 Utilities Menu . . . . . . . . . 124
- 6.2.7 Options Menu . . . . . . . . . . 126
- 6.3 RExLRD . . . . . . . . . . . . . . . . 127
- 6.4 RExLRT . . . . . . . . . . . . . . . . 128
- 6.5 ScrList . . . . . . . . . . . . . . . 129
- 6.6 ScrGrab . . . . . . . . . . . . . . . 130
- 6.7 ScrXtrct . . . . . . . . . . . . . . . 131
- 6.8 ScrAdd . . . . . . . . . . . . . . . . 132
- 6.9 MI . . . . . . . . . . . . . . . . . . 132
- 6.10 KbdSpeed . . . . . . . . . . . . . . 134
- 6.11 KbdScan . . . . . . . . . . . . . . . 135
-
- Chapter 7 Afterword 137
-
-
-
-
-
-
-
-
-
-
-
-
-
- iv
-
-
-
-
-
-
-
-
-
- Tables
-
-
- Table 1.1: Functions in AR function family . . . 3
- Table 1.2: Functions in BT function family . . . 4
- Table 1.3: Functions in DB function family . . . 5
- Table 1.4: Functions in DT function family . . . 5
- Table 1.5: Functions in ER function family . . . 6
- Table 1.6: Functions in KB function family . . . 7
- Table 1.7: Functions in OS function family . . . 8
- Table 1.8: Financial functions . . . . . . . . . 8
- Table 1.9: Math functions . . . . . . . . . . . 9
- Table 1.10: Screen functions . . . . . . . . . . 9
- Table 1.11: Miscellaneous functions . . . . . .10
- Table 2.1: Simple Database Record Structure . .12
- Table 2.2: dBase Expression Compatibility with
- RExL . . . . . . . . . . . . . . . .14
- Table 2.3: Miscellaneous Database Functions . .21
- Table 3.1: ARsize() Input Indexing . . . . . . .26
- Table 3.2: BEEP() Frequencies . . . . . . . . .29
- Table 3.3: Color Attribute Codes . . . . . . . .30
- Table 3.4: DISPLAY() escape sequences . . . . .50
- Table 3.5: Valid Format Specifiers for
- DTformat() . . . . . . . . . . . . .54
- Table 3.6: OSdir() File Attribute Coding . . . .74
- Table 3.7: OSdriveok() return values . . . . . .75
- Table 3.8: OSstat() Return Indexing . . . . . .78
- Table 3.9: CPU Type Return Coding . . . . . . .79
- Table 3.10: Coprocessor Type Return Coding . . .79
- Table 3.11: Video Adapter Type Return Coding . .79
- Table 3.12: Color Attribute Codes . . . . . . .81
- Table 4.1: Cursor movement keys . . . . . . . .95
- Table 4.2: Hilite bar movement keys . . . . . .95
- Table 4.3: Modifier keys . . . . . . . . . . . .96
- Table 4.4: Editor list keys . . . . . . . . . .96
- Table 4.5: Editor miscellaneous keys . . . . . .96
- Table 4.6: Screen designer movement keys . . . .97
- Table 4.7: Screen designer field definition
- keys . . . . . . . . . . . . . . . .97
- Table 4.8: Screen designer line draw keys . . .98
- Table 4.9: Screen designer miscellaneous keys .98
- Table 4.10: Screen designer block mark keys . .99
-
-
- v
-
-
-
- Table 4.11: Debugger hilite bar movement keys .99
- Table 4.12: Debugger list keys . . . . . . . . .99
- Table 4.13: Debugger miscellaneous keys . . . 100
- Table 4.14: KB function return values . . . . 101
- Table 6.1: Keystrokes in structure create . . 124
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- vi
- - Appendices. Page: 3 -
-
-
-
-
-
-
-
-
- Chapter 1
-
- Function Families
-
-
- 1.1 Introduction
-
-
- This appendix gives a brief introduction to the use of and
- the design behind the the seven function families in RExL
- and the various miscellaneous functions.
-
-
- 1.2 Array handling
-
-
- There are nine functions which are used to manipulate arrays
- and determine information about them. The functions are as
- follows:
-
- Table 1.1: Functions in AR function family
-
- ARavg() ARcount() ARinit()
- ARmax() ARmin() ARsize()
- ARstd() ARsum() ARvar()
-
- The functions fall into two groups, the smaller first group
- has two functions in it: ARinit() and ARsize(). The
- ARinit() function is used to initialise the contents of an
- array, while the second determines, at runtime, the size of
- a particular dimension of an array.
-
- The other functions in this family are used for statistical
- analysis of the contents of the arrays. The function names
- are based upon similar functions found in Lotus 123, and
- where appropriate, the parameter lists are the same.
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 4 -
-
-
- 1.3 Binary operations
-
-
- There are six functions, using the initial letters BT which
- are used to perform binary operations. The functions are as
- follows:
-
- Table 1.2: Functions in BT function family
-
- BTand() BTnot() BTor()
- BTshl() BTshr() BTxor()
-
- The function names are based upon the equivalent 8086
- assembly language functions. All the BT functions convert
- their parameters to sixteen bit words, any parameters
- greater than 65535 being set to 65535 and any parameters
- less than 1 being set to 0.
-
- Typically, these functions are used in conjunction with the
- four memory access functions, PEEK(), PEEKW(), POKE() and
- POKEW() to determine information which cannot be obtained
- through the other system functions.
-
- For example, to determine if the NumLock state is active or
- not, the following line could be used:
-
- [Expr] NumLockOn:=BTand(PEEK(0,1047),32)
-
- The use of the memory access functions should be avoided if
- you intend your application to run on widely different
- machines.
-
-
- 1.4 Database operations
-
-
- The thirty-nine dBase file and index manipulation functions
- use the initial letters DB. The functions are as follows:
-
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 5 -
-
-
- Table 1.3: Functions in DB function family
-
- DBappend() DBavg() DBbottom()
- DBcloseall() DBclosedbf() DBclosendx()
- DBcount() DBcountflds() DBdelete()
- DBdeleted() DBexact() DBgo()
- DBlocate() DBmax() DBmin()
- DBmkdbf() DBmkndx() DBnext()
- DBpack() DBprev() DBrecall()
- DBreccount() DBrecno() DBreindex()
- DBreplace() DBrnum() DBrstr$()
- DBseek() DBseldbf() DBselndx()
- DBskip() DBstd() DBstruct()
- DBsum() DBtop() DBusedbf()
- DBusendx() DBvar() DBzap()
-
- Because of the size and complexity of the database module in
- RExL, it is treated on its own in the next appendix.
-
-
- 1.5 Date and time manipulation
-
-
- The eighteen date and time manipulation functions use the
- initial letters DT. The functions are as follows:
-
- Table 1.4: Functions in DT function family
-
- DTdate() DTdate$() DTdatevalue()
- DTday$() DTdayno() DTformat()
- DThourno() DTminuteno() DTmonth$()
- DTmonthno() DTnow() DTsecondno()
- DTsetdate() DTsettime() DTtime()
- DTtime$() DTtimevalue() DTyearno()
-
- The date functions are again, based largely upon those in
- Lotus 123, with a few minor inconsistencies removed.
-
- The date module can use dates in any of the three most
- common date formats, European, American and Japanese. The
- exact format which is in use initially is determined by the
- settings in the CONFIG.SYS file in your machine. If there
- is no specific format set up, then the date format will
- default to American. The DTformat() command can be used to
- set the date and time formats and separators explicitly,
- overriding the defaults.
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 6 -
-
-
- Date and time information are stored in RExL as real
- numbers. The integer portion of a date-time number is the
- Julian day number while the fractional part is the time,
- expressed as a fraction of 24 hours.
-
- The Julian day number of a particular date is the number of
- days elapsed since and including the first of January, 4713
- BC (the reasons for this exact date being chosen as the
- origin are historically amusing). The Julian day number
- system is used widely in date calculations and should not be
- confused with the Julian Calendar. The algorithms used in
- RExL to calculate the Julian day number do not take account
- of the ten day transition from the Julian Calendar to the
- Gregorian Calendar which occurred from October 5th to
- October 15th in 1582 in Rome and at various other later
- dates around the rest of the world.
-
- Dates before 0 AD cannot be represented in RExL. Apart from
- any other considerations, there was no standard calendar
- then, rendering calculations somewhat useless.
-
- Date and time functions which return a date or time number
- will return zero if the date or time was invalid.
-
-
- 1.6 RExL error handling functions
-
-
- The five error handling functions use the initial letters
- ER. The functions are as follows:
-
- Table 1.5: Functions in ER function family
-
- ERclear() ERmsg$() ERnum()
- ERok() ERwatch()
-
- Whenever an error occurs in the runtime portion of RExL,
- internal variables save the text of the error and the error
- number. These variables can be interrogated by using the
- ERmsg$() function (to retrieve the text of the error) and
- ERnum() (to retrieve the error code).
-
- If no errors have occurred, then calls to ERmsg$() will
- return an empty string and calls to ERnum() will return
- zero. Once an error has occurred, the text and error number
- remain fixed until the next error occurs, an application is
- LOAD()'ed or the ERclear() function is used.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 7 -
-
-
- While the development of an application is in progress,
- errors should be left on, to detect errors such as divide by
- zero, which would otherwise not be seen. In the final
- distribution version, the error display can be disabled with
- the ERwatch() function.
-
-
- 1.7 Keyboard handling functions
-
-
- The five keyboard handling functions use the initial letters
- KB. The functions are as follows:
-
- Table 1.6: Functions in KB function family
-
- KBclear() KBlast()
- KBread() KBready()
- KBwait()
-
- The IBM PC uses a keyboard buffer to store keystrokes until
- they can be processed by a program. The normal size of the
- buffer is 15 keystrokes. The KBclear() function resets and
- empties the keyboard buffer, while the KBready() reports
- whether a keystroke is pending in the keyboard buffer. The
- other two functions in the group are used for retrieving
- keystrokes from the buffer, optionally waiting a variable
- time span for one. When a screen has been terminated, the
- KBlast() function can be used to determine the keystroke
- which caused its termination.
-
- If a keystroke returned by RExL is a character key, then the
- ASCII code of the character will be returned immediately.
- Keys that do not have ASCII codes, such as the function
- keys, return a more complex coding, the details of which are
- not necessary. The complete list of function return values
- is listed in appendix D, with the other keystrokes RExL can
- return. Note that the <Insert> key is captured by the
- runtime module and is not returned to the application.
-
-
- 1.8 Operating system interface functions
-
-
- The thirteen operating system interface functions, which use
- the initial letter code OS, are as follows:
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 8 -
-
-
- Table 1.7: Functions in OS function family
-
- OScd() OScmd() OScopy()
- OSdel() OSdir() OSdrive()
- OSexists() OSmd() OSnumber()
- OSrd() OSren() OSstat()
- OSwd$()
-
- These functions perform most of the operations commonly
- needed to interface with the operating system under which
- RExL is working. The commands are modelled after the
- corresponding DOS commands and require the same parameters.
-
- The OSstat() function is the only function in the group
- which has no direct DOS counterpart. It returns the status
- of the machine, including the processor, co-processor and
- display adapter type as well as the operating system version
- and information about the currently selected disk.
-
-
- 1.9 Financial functions
-
-
- The financial functions in RExL are used in the calculation
- of ordinary annuities. There are seven functions in this
- group which does not use a common initial two-letter group.
-
- Table 1.8: Financial functions
-
- CTERM() FV()
- PMT() PV()
- RATE() SLN()
- SYD() TERM()
-
- The functions in this group are based upon those in Lotus
- 123. The annuity due for the FV() and PV() functions may be
- calculated easily by multiplying the result of the ordinary
- annuity by the expression 1+rate, where rate is the periodic
- interest rate.
-
-
- 1.10 Mathematical functions
-
-
- As with the financial functions, the math functions do not
- have a common initial letter pair. The thirty-one math
- functions are as follows:
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 9 -
-
-
- Table 1.9: Math functions
-
- ABS() ACOS() AND()
- ASIN() ATAN() CEIL()
- COS() DEG() DIV()
- EQV() EXP() FALSE()
- FLOOR() IMP() LOG()
- LOG10() MAX() MIN()
- MOD() NOT() OR()
- PI() POW() RAD()
- RAND() ROUND() SEED()
- SIN() SQRT() TAN()
- TRUE() XOR()
-
- All math functions requiring an angle parameter must have
- the angle expressed in radian measure. The RAD() and DEG()
- functions can be used to convert degrees to radians and vice
- versa.
-
-
- 1.11 Screen handling functions
-
-
- The functions in this section are used for handling screens:
- input, output, box drawing and painting areas as well as for
- loading screens. There are fifteen functions in this group:
-
- Table 1.10: Screen functions
-
- BEEP() CODE() ATTRXY()
- BOX() CHAR$() CHARXY$()
- CLS() DISPLAY() FILL()
- GOTOXY() INPUT() INPUT$()
- INVERSE() LOADSCR() PAINT()
-
-
- 1.12 Miscellaneous functions
-
-
- This final group of functions fall into no clearly defined
- grouping. The functions in the group are as follows:
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 10 -
-
-
- Table 1.11: Miscellaneous functions
-
- ESCWATCH() EXACT() FIND()
- IIF() IF$() INIT()
- LEFT$() LENGTH() LOAD()
- LOWER$() MID$() OUTPUT()
- PAUSE() PEEK() PEEKW()
- POKE() POKEW() QUIT()
- REPEAT$() REPLACE$() RIGHT$()
- SOUNDEX$() STRING$() SUFFIX$()
- TRIM$() UPPER$() VALUE()
- VERSION()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 11 -
-
-
-
-
-
-
-
-
- Chapter 2
-
- The Database Module
-
-
- The database function family, the largest single grouping of
- functions, in RExL is fully compatible with the database and
- index file format used in dBase III+. Since this feature is
- central to RExL, it's treated on its own in this appendix
- which contains a complete introduction to the database
- facilities in RExL.
-
-
- 2.1 Introduction to Databases
-
-
- There are a few terms relating to databases which need to be
- understood before we can move on to the next section.
-
- Most database formats, including the dBase format used here,
- store their information in fixed fields. A field is simply
- storage area of fixed length (known as the field size) which
- is referenced from RExL through a field name. The field
- names follow the same conventions as RExL variable names,
- save that the dollar character `$' is not used to denote
- strings. The maximum width of a field name in the dBase file
- format is ten characters.
-
- Each field can be one of the following four different types:
-
- o Numeric: which are used to store numeric information
- within a fixed number of digits. The maximum field
- width of a numeric field is nineteen digits. If
- there are decimal fractions to be stored, then the
- field must contain space for a decimal point and the
- field must also have a fixed decimal fraction width,
- at most two less than the size of the field.
-
- o String: These fields are used to store character or
- string information with a maximum field width of 255
- characters. Because of the limit of 80 character
- long strings in the current release of RExL, any
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 12 -
-
-
- fields which are wider then 80 characters are
- truncated.
-
- o Date: This field, used to store dates, has a fixed
- field width of 8 characters. Since there is no
- intrinsic date type in RExL, date fields are
- converted to Julian day numbers, compatible with the
- date system in use elsewhere in RExL.
-
- o Logical: This final field type stores yes-no type
- logical information. As with the date fields, there
- is no intrinsic logical data type in RExL, so logical
- information is returned as a numeric type, 0 for
- False and 1 for True.
-
- Traditionally, to avoid having to repeat the field types too
- often, the types are abbreviated to single letter: `N' for
- numeric, `C' for character, `D' for date and `L' for
- logical. The memo type, which is not commonly used in dBase
- applications, is not supported in RExL.
-
- Fields are collected together to form records of
- information.
-
- Whenever an application has a database open for use, RExL
- maintains a pointer, known as the record pointer, into the
- database pointing at the record which all operations are
- based upon. When a database is first opened, the record
- pointer is placed at the first record in the database.
-
- As a complete example of a record structure, a customer
- database might be designed as follows:
-
- Table 2.1: Simple Database Record Structure
-
- Field Name Type Width Decimal Places
- CUSTNAME `C' 30
- BALANCE `N' 8 2
- MAILSHOT `L' 1
- NEXTBILL `D' 8
-
- The above database structure demonstrates the use of the
- four different field types. When databases are created, the
- width of the logical and date fields is set automatically
- and does not have to be specified, the same is true for the
- decimal places specifier in character field types.
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 13 -
-
-
- Databases are stored on disk with a file extension of
- ".DBF", so the above structure could be stored as
- "CUSTOMER.DBF".
-
-
- 2.2 Indexes
-
-
- Databases are designed for the storage and retrieval of
- large amounts of information. If the information is held in
- an random manner (like a shuffled pack of cards) then
- searching for a particular item of information can become
- prohibitively slow if there are large numbers of records in
- the database. The dBase file format specifies a way in which
- indexes may be generated through which it is possible to
- access information rapidly in a large database.
-
- An index file, used to store the indexing information, is a
- separate DOS file (using the extension ".NDX") which is used
- in tandem with a database file to allow rapid access to
- specific information. This rapid access is achieved by
- storing the indexing information in strict order (alphabetic
- or date or numeric).
-
- The function of the index file is analogous to a card index
- system in a library, where a box contains a sorted list of
- cards, one for each book in the library. When somebody
- looks for a book, the card index can be searched quickly
- (since it is sorted) and upon finding the wanted book name,
- the card will contain some information on how to locate the
- book in the library. In the same way, the index file
- contains sorted information together with pointers to the
- records in the database which match the information in the
- index file.
-
- The index is generated using an index expression which
- defines the order in which the records in the database are
- to be retrieved in. Initially, when the index is first
- created, the index expression is evaluated for all records
- in the database. Subsequently, whenever a record is
- modified, added or removed from the database, the index is
- updated to reflect the new contents of the database.
-
- In the example from the end of the previous section, if the
- developer decided that the records were to be sorted with
- respect to the name of the customer, then an index could be
- generated with the index expression CUSTNAME. Thus, when
- the user of the end system wanted to view a particular
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 14 -
-
-
- customer's record, the customer name would be entered, the
- name would then be searched for in the index file and if
- located, would then be returned to the user of the system.
-
- Since the index files used by RExL may also be used with
- dBase, Clipper and other packages which adhere to the ".NDX"
- standard, the search expression must be a dBase expression
- and not a RExL expression. The simplest dBase expressions
- are simply field names and for most purposes, this is
- sufficient. The RExL call to generate the customer name
- index from the previous paragraph would be as follows:
-
- [Expr] DBmkndx("CUSTndx","CUSTNAME")
-
- This would create an index file called "CUSTndx.NDX",
- sorting the records with respect to the field named
- "CUSTNAME".
-
- The dBase expression parser built into RExL also copes with
- more complicated expressions involving dBase function calls
- and mathematical operators. The following table gives a
- brief summary of the functions and operators supported:
- (dBase does not follow the dollar character string
- convention, so some of the functions in the table may seem
- slightly at odds with the rest of RExL.)
-
- Table 2.2: dBase Expression Compatibility with RExL
-
- Function Meaning
- * + - / ^ Ordinary mathematical operators
- >= <= >
- < = <> Ordinary relational operators
- DATE() Return system date as `D'
- DELETED() Return delete of current record as `L'
- DTOC() Convert date field to `C'. (not recommended)
- DTOS() Convert date field to `C'. (recommended)
- CTOD() Convert string to date.
- IIF() Equivalent to RExL IIF()
- RECNO() Returns the current record number
- RECCOUNT() Returns the number of records in the database
- STR() Convert number to string as STRING$()
- SUBSTR() Equivalent to RExL MID$()
- TIME() Return system time
- VAL() Convert string to number
- UPPER() Equivalent to UPPER$()
- SOUNDEX() Equivalent to SOUNDEX$()
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 15 -
-
-
- The DTOC() function is supported, although is is not
- recommended as an index expression function: Since it
- returns the year as a two digits instead of four, the
- function can only cope with dates in a single century. The
- DTOS() function returns the date as a string with the format
- "yyyymmdd" (y for year, m for month and d for day) and is
- therefore more suitable for indexing since it can deal with
- multiple centuries.
-
- A full description of the database functions above is beyond
- the scope of this introduction. Consult your dBase manual
- for precise details on how these functions and operators
- operate.
-
-
- 2.3 Using Database Files
-
-
- 2.3.1 Opening and selecting files
-
- The handling of database files is based largely around the
- concept of file handles, which are very similar to the
- notion of work-spaces used in the dBase documentation. When
- a data file is opened (using DBusedbf()) or an index file is
- opened (using DBusendx()), a file handle (a reference number
- greater than zero) is returned to RExL, through which the
- application can make references to that file or index. The
- advantage of the file handle system is that a theoretically
- arbitrary number of files and indexes may be kept open at
- any one time and any file or index can be referenced through
- its file handle. In practice however, the number of DOS
- files which may be opened simultaneously is limited (by DOS)
- to twenty, five of which cannot be reassigned, so up to
- fifteen database and index files may be open simultaneously.
- (Note that in version 2.10, it is possible to access
- multiple database files without having to make repeated
- calls to DBseldbf().)
-
- speech For example, assuming that the database file and
- index file from the previous sections have been created and
- exist in the work directory. The following code can be used
- to open and select the two files:
-
- [Expr] DBFhandle:=DBusedbf("customer")
- [Expr] NDXhandle:=DBusendx("custndx")
- [Expr] DBseldbf(DBFhandle)
- [Expr] DBselndx(NDXhandle)
- [Expr] DBtop()
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 16 -
-
-
- The first line opens the customer database and returns the
- database file handle which RExL has assigned to it. The
- second line opens the index file and assigns the index file
- handle to NDXhandle. Next, the database file opened
- previously is selected or made the current work file, at
- this point the records are not yet sorted, since the index
- file has not been selected. The fourth line applies the sort
- order to the current database. Finally, the current record
- number is set to the first record in the database (it's good
- practice always to know what the current record is).
-
- In a real-life application, the return values of DBFhandle
- and NDXhandle would be checked for validity, to make sure
- that they had been opened correctly.
-
- 2.3.2 Reading and writing to files
-
- There are two ways in which information can be written to
- and read from database files. The first method uses
- specific functions to read and write database files and is
- compatible with RExL version 2.00, but is cumbersome to use.
- The second, newer and more efficient method is to use the @
- notation introduced in version 2.10, generally known as
- `direct field access'. The next two subsections deal with
- both methods.
-
- 2.3.2.1 Using functions
-
- There are four functions which are used to read and write
- the currently selected database file. These are DBappend(),
- used to append a blank record to the end of the file,
- DBreplace() to write to the file and DBrnum() and DBrstr$()
- to read from it.
-
- a) Writing to a file
-
- The DBreplace() command requires two parameters, the first
- is the field name while the second parameter, which may be
- either string or numeric in type, specifies the value to
- place into the field. This function is equivalent to the
- dBase command REPLACE. The action of DBreplace() is
- slightly more complicated than it may at first seem. First
- of all, if the field is numeric and the number being written
- is too wide for the field, then the field will be set to
- zero. If the field is string and the string being written
- is too long, then it will be truncated.
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 17 -
-
-
- It is also possible to write string values to numeric fields
- (although the strings must clearly contain numeric value for
- this to work) and to write numeric values to string fields,
- where \rexl\ will attempt to convert the number into a
- string before writing it to the field. Generally, these
- cross-breed replacements should be avoided where possible.
-
- For logical fields, a value of \true\ will be written to the
- field if the second parameter is numeric and non zero, or if
- it is string and equal to "Y" "y" "T" or "t". In all other
- cases, the value written will be false. If the field is a
- date field, then the second parameter will be internally
- converted to a date number and written to the field.
-
- The DBappend() command is used to place a new and blank
- record at the end of the currently selected database file.
- If this has been performed successfully, then the record
- pointer will be placed there.
-
- b) Reading from a file
-
- The two functions DBrnum() and DBrstr$() are used to extract
- information from the current record. DBrnum() returns the
- field expressed as a number, where possible, while DBrstr$()
- returns the field expressed as a string, which is always
- possible.
-
- DBrstr$() is subject to much the same caveats as DBreplace()
- as regards reading strings: If the field contains a string
- longer than 80 characters, then it will be truncated. As
- with DBreplace() it is possible, but not recommended, to
- perform cross-breed reading, from numeric fields to string
- variables and string fields to numeric values.
-
- When the two field reading functions are applied to date
- fields, the return value will be the value of the field
- converted to the appropriate type. Thus DBrstr$() applied
- to a date field will return a date string in the current
- date format, while a call to DBrnum() applied to the same
- field will return the Julian day number of the date
- specified in the field.
-
- The two functions can also be applied to logical fields,
- where DBrnum() will return 1.0 for a true value in the field
- and 0.0 for a false value. DBrstr$ will return "Y" for true
- and "N" for false.
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 18 -
-
-
- 2.3.2.2 Direct field access
-
- a) Basics
-
- The `@' operator is used to access database fields directly
- and is mapped internally to a call to either DBrstr$() or
- DBrnum(). There are two forms of the operator, the first
- which corresponds to DBrstr$(), is `@$' and is used for
- accessing the value of a field as a string. The second,
- taking the place of the DBrnum() function, is the `@' symbol
- on its own and is used to access the value of a field as a
- string.
-
- To use the access operator, it is simply placed at the start
- of the database field name. For example, to read a field
- called `CUSTNO', and assign its value to a variable, the
- following expression could be written:
-
- [Expr] customer:=@custno
-
- Similarly, the contents of a character field may be returned
- to a string as follows:
-
- [Expr] name$:=@$name
-
- where `NAME' is a character field.
-
- As with the read functions DBrstr$() and DBrnum(), full
- cross-type read operations are permitted. This again, is
- most noticeable when using date fields: using the @$
- operator on a date field will return a date string while
- using the @ operator will return the Julian Day Number of
- the date specified in the field.
-
- Information may also be written to the database file in
- exactly the same manner as it is read, so that a string may
- be assigned to a string field using:
-
- [Expr] @$name:="Joe Smith"
-
- and to a numeric field using:
-
- [Expr] @age:=24
-
-
- b) Accessing multiple database files
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 19 -
-
-
- The syntax of the @ operator can be extended to allow a
- single token to access multiple database files
- simultaneously. The general format of the extended @
- operator is:
-
- Numeric value: @<num_variable>.<field>
- and
- String value: @$<num_variable>.<field>
-
- where <num_variable> is a simple (ie. non-array) numeric
- variable whose value is the file handle for a database file,
- the dot is a full stop character and <field> is the name of
- the field whose value is being assigned or retrieved.
-
- If, for example, two database files had been opened as
- follows:
-
- db_one:=dbusedbf("customer")
- db_two:=dbusedbf("orders")
-
- then a character field, NAME, in the customer file can be
- accessed using the expression:
-
- @$db_one.name
-
- while a numeric field `ORDERVAL' in the orders file can be
- accessed using:
-
- @db_two.orderval
-
- Note again that only simple numeric variables can appear
- between the @symbol and the full stop. Direct numeric
- values, expressions and arrays are not allowed.
-
- This extension to the format of the @ operator is a very
- powerful feature and extends considerably the power of the
- language in interrogating database files. In particular, it
- does away with the need to select and reselect different
- database files in order to use them and also reduces the
- likelihood of introducing bugs by having the wrong database
- open at a particular time.
-
- Perhaps its greatest benefit is that it allows a single
- screen to access multiple database files, something which
- was extremely cumbersome in the previous version.
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 20 -
-
-
- 2.3.3 Moving around in a file
-
- There are six functions used to move the record pointer
- within the file from one record to another. With all of
- these functions, the movement is carried out with respect to
- the current index file, if one is open.
-
- The first two functions, DBtop() and DBbottom(), move the
- record pointer to the first and last records in the file
- while DBprev() and DBnext() move the previous and next
- records.
-
- DBskip() will skip, forward or backward through the file by
- a specified number of records. If an index is open, then
- index ordering will be used. DBgo() is used to go to an
- absolute record number, but unlike DBskip(), it does not
- obey any index.
-
- There are two functions used to find information in a file.
- The first of these, DBlocate() is used to locate a specific
- string or number in a database field (date and logical
- fields are not currently supported by DBlocate()). This
- function is based upon the LOCATE command in dBase.
-
- In a large file, locating a record may take some time, since
- it must read and check every record to see if the search
- condition is met. It is therefore usually better to
- generate an index and use it with the DBseek() function to
- find information. DBseek(), based upon the SEEK command in
- dBase, is used to find information in a file through its
- current index. Because the index file is kept in strict
- order, the seek can be performed very rapidly.
-
- 2.3.4 Miscellaneous functions
-
- 2.3.4.1 Statistical analysis of data
-
- There are seven functions, based largely upon similar
- functions in Lotus 123, which can be used to perform basic
- statistical analysis upon the data in a database file. The
- functions, covered fully in the function reference, are as
- follows: DBavg(), DBcount(), DBstd(), DBsum(), DBvar(),
- DBmax() and DBmin().
-
- 2.3.4.2 Deletion of information
-
- Four functions are used to control the removal of
- information from database files. These are DBdelete(),
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 21 -
-
-
- DBdeleted(), DBpack() and DBrecall(). When a call to
- DBdelete() is made to delete a record, the record is marked
- for deletion and not physically removed from the file.
- Thus, a further call to DBrecall() can be made to unmark the
- record to return it to its normal status.
-
- The DBdeleted() function can be used to determine whether a
- record has been marked for deletion or not, while the
- DBpack() function will permanently remove all records from
- the database which have been marked for deletion.
-
- 2.3.4.3 Other functions
-
- There are nine other functions in the database packed in
- RExL which are used to perform maintenance on the database
- file itself. These functions are
-
- Table 2.3: Miscellaneous Database Functions
-
- Function Use
- DBcountflds() Returns the number of fields in the database
- DBexact() Turn database case sensitivity on and off
- DBmkdbf() Create a database
- DBmkndx() Create an index file
- DBreindex() Re-create an index file
- DBreccount() Return the number of records in a database
- DBrecno() Return the current record number
- DBstruct() Return the current database structure
- DBzap() Remove all records from a database
-
- By default, the database module is case sensitive, contrary
- to the rest of RExL. This is for reasons of compatibility
- with dBase which is case sensitive. However, if the
- database files will not be used with dBase, then case
- sensitivity can be safely set to off. If index files
- generated with case sensitivity off are used with dBase,
- then the results are unpredictable, since the index file
- format is not identical.
-
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 22 -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 23 -
-
-
-
-
-
-
-
-
- Chapter 3
-
- Function Reference
-
-
- --------------------------------------------------------------------
-
- ABS(number)
-
- ABS() returns the absolute value (or modulus) of the
- parameter.
-
- Returns: The parameter expressed as a positive number
-
- See also: FLOOR CEIL ROUND
-
- Example: val:=ABS(-10) Returns 10 to the variable val
-
- Example: val:=ABS(10) Returns 10 to the variable val
-
- --------------------------------------------------------------------
-
- ACOS(number)
-
- Returns the arc-cosine of the parameter. The return value is
- expressed in radians. To convert radians to degrees, use the
- DEG() function. The value returned will be in the range of
- zero radians to pi radians.
-
- Returns: A number
-
- See also: ASIN ATAN DEG
-
- Example: val:=ACOS(0.5) Returns 1.04719775 radians to val.
-
- --------------------------------------------------------------------
- AND(log1,log2)
-
- AND() performs a logical AND operation upon the two logical
- parameters passed to the function and returns the result of
- the test. The function returns True if both logical
- parameters are True otherwise it returns False.
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 24 -
-
-
- Returns: A number
-
- See also: NOT EQV XOR OR IMP
-
- Example: val:=AND(TRUE(),FALSE())
-
- Returns False to to the variable val.
-
- ---------------------------------------------------------------------
- ARavg(num[#],start,end)
-
- ARavg() returns the average of the elements of the one
- dimensional numeric array parameter between the specified
- start and end elements. Note that unlike ARcount(), ARavg()
- takes account of zero values in its calculation.
-
- In order to determine if the value for the average is
- meaningful, you should also calculate the standard deviation
- of the data, using the ARstd() function.
-
- Returns: A number
-
- See also: ARcount ARsum DBavg
-
- Example: avg:=ARavg(score[#],0,9)
-
- Returns, to the variable avg, the average of
- score[#] over the first to tenth elements inclusive.
-
- ---------------------------------------------------------------------
- ARcount(numstr[#],start,end)
-
- ARcount() counts the elements of the one dimensional array
- parameter which are nonzero, if the array is numeric, or
- nonempty, if the array is of type string. The count is
- performed between the specified start and end elements
- inclusive.
-
- Returns: The number of nonempty elements
-
- See also: ARavg ARsum DBcount
-
- Example: n:=ARcount(name$[#],0,2)
-
- Returns, to the variable n, the number of nonempty
- strings in the string array, name$[#], between the first and
- third elements.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 25 -
-
-
- ---------------------------------------------------------------------
- ARinit(numstr[#])
-
- ARinit() clears all elements of an array, setting numeric
- array values to 0 and string array values to "". The
- function accepts arrays of any dimension.
-
- Returns: True
-
- Example: ARinit(name$[#])
-
- Resets all elements of name$[#] to "".
-
- ---------------------------------------------------------------------
-
- ARmax(num[#],start,end)
-
- ARmax() returns the maximum value of the numeric array
- parameter between the specified start and end elements.
-
- Returns: A number
-
- See also: ARcount ARmin
-
- Example: mmax:=ARmax(score[#],0,9)
-
- Returns, to the variable mmax, the maximum value
- of the numeric array score[#] over the first to tenth
- elements inclusive.
-
- ---------------------------------------------------------------------
-
- ARmin(num[#],start,end)
-
- ARmin() returns the minimum value of the numeric array
- parameter between the specified start and end elements.
-
- Returns: A number
-
- See also: ARcount ARmax
-
- Example: mmin:=ARmin(score[#],0,9)
-
- Returns, to the variable mmin, the minimum value
- of the numeric array score[#] over the first to tenth
- elements inclusive.
-
- ---------------------------------------------------------------------
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 26 -
-
-
- ARsize(numstr[#],dimension)
-
- ARsize() returns the size of the specified array, in the
- specified dimension. The dimensions are defined as follows:
-
- Table 3.1: ARsize() Input Indexing
-
- Dimension Meaning
- 1 x dimension (first dimension)
- 2 y dimension (second dimension)
- 3 z dimension (third dimension)
-
- Returns: The size of the specified dimension
-
- Example: ARsize(name$[#],1)
-
- Returns the size of the first, or x, dimension of
- the string array name$[#].
-
- ---------------------------------------------------------------------
-
- ARstd(num[#],start,end)
-
- ARstd() returns the population standard deviation of the
- values in num[#] between the specified start and end
- elements, inclusive. This function uses the n method
- (biased) to determine the standard deviation of the
- population data.
-
- The standard deviation can be thought of as a measure of the
- validity of the average of the set of data. If the deviation
- is small, then the average is good, if the deviation is
- large, then the value for the average could be meaningless.
-
- Returns: A number
-
- See also: ARvar ARavg ARcount
-
- Example: std:=ARstd(score[#],0,9)
-
- Returns, to the variable std, the standard
- deviation of the value of score[#] over the first to tenth
- elements inclusive.
-
- ---------------------------------------------------------------------
-
- ARsum(num[#],start,end)
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 27 -
-
-
- ARsum() returns the summation of the elements in the num[#]
- array between the specified start and end elements,
- inclusive.
-
- Returns: A number
-
- See also: ARvar ARstd ARavg ARcount
-
- Example: sum:=ARsum(score[#],0,9)
-
- Returns, to the variable sum, the sum of the first
- ten elements of the array score[#]
-
- ---------------------------------------------------------------------
-
- ARvar(num[#],start,end)
-
- ARvar() returns the population variance of the values in
- num[#] between the specified start and end elements,
- inclusive. This function uses the n method (biased) to
- determine the standard deviation of the population data.
-
- ARvar() is also equal to the sqaure of the population
- standard deviation of the array, as returned by the ARstd()
- function.
-
- Returns: A number
-
- See also: ARstd ARavg ARcount
-
- Example: var:=ARvar(score[#],0,9)
-
- Returns, to the variable var, the population
- variance of the value of the array score[#] over the first
- to tenth elements inclusive.
-
- ---------------------------------------------------------------------
-
- ASIN(number)
-
- Returns the inverse sine of the parameter. The return value
- is expressed in radians and can range in value from from -
- pi/2 to pi/2.
-
- Returns: A number
-
- See also: ACOS, ATAN
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 28 -
-
-
- Example: val:=ASIN(0.5)
-
- Returns 0.52335987756 radians to val
-
- ---------------------------------------------------------------------
-
- ATAN(number)
-
- Returns the inverse tangent of the parameter. The return
- value is expressed in radians and can range from -pi/2 to
- pi/2.
-
- Returns: A number
-
- See also: ASIN, ACOS
-
- Example: val:=ATAN(0.5)
-
- Returns 0.463647609 radians to val
-
- ---------------------------------------------------------------------
-
- ATTRXY(xpos, ypos)
-
- This function returns the attribute (or color value) of the
- character displayed at position (xpos,ypos). The entry for
- BOX() has a table of color values which can be used to work
- out the actual colors used on the screen.
-
- Returns: A number between 0 and 255
-
- See also: PAINT CHARXY
-
- Example: col:=ATTRXY(10,10)
-
- Returns the attribute value of the character at
- screen co-ordinates (10,10).
-
- ---------------------------------------------------------------------
- BEEP(frequency,time)
-
- Sounds the computer's internal speaker. The frequency is
- measured in Hertz and time is measured in millseconds
- (thousandths of a second). If the time parameter is set to 0
- then the sound will be generated until another call to
- BEEP() is made. If time set to -1, the beeper is switched
- off. The following is a table of natural frequencies and
- their corresponding musical notes. time can be as long as
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 29 -
-
-
- 65534 milliseconds, or about 65 seconds. A frequence of
- 440Hz is A below Middle C.
-
- Table 3.2: BEEP() Frequencies
-
- Note Frequency Note Frequency
- C 130.810 C 523.250
- D 146.830 D 587.330
- E 164.810 E 659.260
- F 174.610 F 698.460
- G 196.000 G 783.990
- A 220.000 A 880.000
- B 246.940 B 987.770
- C 261.630 C 1046.500
- D 293.660 D 1174.700
- E 329.630 E 1318.500
- F 349.230 F 1396.900
- G 392.000 G 1568.000
- A 440.000 A 1760.000
- B 493.880 B 1975.500
-
- Returns: True
-
- Example: BEEP(523.250,1000)
-
- Sounds the beeper at middle C for one second.
-
- ---------------------------------------------------------------------
-
- BOX(x, y, w, h, color, type)
-
- Draws a character box on screen. The parameters specify the
- coordinates of the top left corner and the desired width and
- height of the box. The sixth parameter specifies the type of
- box: type is zero for a single line box and one for a double
- line box. The color parameter specifies the attribute with
- which the box is to be drawn. The interior of the box will
- be filled with spaces. Attributes are calculated by adding
- the color number of the background (paper color) to that of
- the foreground (ink) color. The following are the color
- numbers:
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 30 -
-
-
- Table 3.3: Color Attribute Codes
-
- Color Foreground Background
- Black 0 0
- Blue 1 16
- Green 2 32
- Cyan 3 48
- Red 4 64
- Magenta 5 80
- Brown 6 96
- Light Gray 7 112
- Dark Gray 8 (128)
- Light Blue 9 (144)
- Light Green 10 (160)
- Light Cyan 11 (176)
- Light Red 12 (192)
- Light Mgnta 13 (208)
- Yellow 14 (224)
- White 15 (240)
- Blink 128 -
-
- If the last screen displayed during execution had the
- flash-intensity bit set to `intensity', then a further eight
- background colors, indicated above by the bracketed numbers,
- are available, at the expense of blinking. Note that the
- background colors are derived from the foreground colors by
- multiplying by sixteen.
-
- Returns: True
-
- See also: PAINT INVERSE
-
- Example: BOX(0,0,79,24,31,1)
-
- Draws a double lined white on blue box around the
- screen.
-
- ---------------------------------------------------------------------
-
- BTand(bit1,bit2)
-
- BTand() performs a bitwise and operation upon the two
- parameters. As with all the bit manipulation functions, the
- values are internally converted to sixteen bit words, so
- numbers greated than 65535 are treated as 65535 and numbers
- less than 1 are treated as zero.
-
- Returns: A number between 0 and 65535
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 31 -
-
-
- See also: BTnot BTor BTshl BTshr BTxor
-
- Example: bt:=BTand(6,4)
-
- Returns a value of 4 to the variable bt
-
- ---------------------------------------------------------------------
-
- BTnot(bits)
-
- BTnot() performs a bitwise 16 bit NOT operation on its
- numeric parameter.
-
- Returns: A number between 0 and 65535
-
- See also: BTand BTor BTshl BTshr BTxor
-
- Example: bt:=BTnot(65535) Returns a value of 1 to the
- variable bt
-
- ---------------------------------------------------------------------
-
- BTor(bit1,bit2)
-
- BTor() performs a bitwise or operation upon two sixteen-bit
- parameters.
-
- Returns: A number between 0 and 65535
-
- See also: BTnot BTand BTshl BTshr BTxor
-
- Example: bt:=BTor(6,4)
-
- Returns a value of 6 to the variable bt
-
- ---------------------------------------------------------------------
-
- BTshl(bit1,bit2)
-
- BTshl() performs a bitwise left shift of the first parameter
- by the number of bits specified by the second parameter. The
- return value of BTshl() is equivalent to the product of the
- first parameter and two raised to the power of the second
- parameter.
-
- Returns: A number between 0 and 65535
-
- See also: BTnot BTor BTand BTshr BTxor
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 32 -
-
-
- Example: bt:=BTshl(2,2)
-
- Returns a value of 8 to the variable bt
-
- ---------------------------------------------------------------------
-
- BTshr(bit1,bit2)
-
- BTshr() performs a bitwise right shift of the first
- paremeter by the number of bits specified by the second
- parameter. The return value of BTshr() is equivalent to the
- quotient of the first parameter divided by two raised to the
- power of the second parameter.
-
- Returns: A number between 0 and 65535
-
- See also: BTnot BTor BTshl BTand BTxor
-
- Example: bt:=BTshr(8,2)
-
- Returns a value of 2 to the variable bt
-
- ---------------------------------------------------------------------
-
- BTxor(bit1,bit2)
-
- BTxor() performs a bitwise exclusive or operation upon the
- two sixteen bit parameters.
-
- Returns: A number between 0 and 65535
-
- See also: BTnot BTor BTshl BTshr BTand
-
- Example: bt:=BTxor(32767,16)
-
- Returns a value of 32751 to the variable bt
-
- ---------------------------------------------------------------------
-
- CEIL(number)
-
- CEIL() returns the smallest number greater than the
- parameter.
-
- Returns: A number
-
- See also: FLOOR
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 33 -
-
-
- Example: a:=CEIL(5.5)
-
- Returns the value 6.0 to the variable a.
-
- ---------------------------------------------------------------------
-
- CHAR$(asciicode)
-
- Returns the ASCII character whose ASCII code is asciicode.
-
- Returns: A one-character string
-
- See also: CODE
-
- Example: t$:=CODE(65)
-
- Returns the letter "A", whose ASCII code is 65, to
- the variable t$.
-
- ---------------------------------------------------------------------
-
- CHARXY$(xpos,ypos)
-
- CHARXY$() returns the ASCII code of the character displayed
- at the screen coordinates (xpos,ypos). The top left hand
- corner of the screen is position (0,0) and the bottom right
- corner is position (79,24).
-
- Returns: A number
-
- See also: CHAR$ ATTRXY
-
- Example: asciival:=CHARXY(0,0)
-
- Assigns the ascii value of the character displayed
- at position (0,0), the top left corner.
-
- ---------------------------------------------------------------------
-
- CLS()
-
- CLS() clears the screen. The screen will be set to white on
- black and the cursor position will be set to the top left
- hand corner.
-
- Returns: True
-
- Example: CLS()
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 34 -
-
-
- Clears the screen.
-
- ---------------------------------------------------------------------
- CODE(character$)
-
- Returns the ASCII code of the first letter of the string
- parameter. See appendix F for a table of ASCII codes.
-
- Returns: A number
-
- See also: CHAR$
-
- Example: asciival:=CODE("A")
-
- Returns 65 to asciival, the ASCII code for the
- letter "A".
-
- ---------------------------------------------------------------------
-
- COS(angle)
-
- Calculates the cosine of the angle, where the angle is
- measured in radians. The return value will be in the range
- of -1 to 1. The ACOS() function is used to convert the
- cosine of an angle to the angle.
-
- Returns: A number
-
- Example: val:=COS(0.5)
-
- Returns 0.8775825619 to the variable val.
-
- ---------------------------------------------------------------------
-
- CTERM(rate, end, start)
-
- CTERM() returns the number of compound periods it would take
- for the start value, at the specified interest rate to grow
- to the end value. The rate should be the specified as a
- decimal fraction rather than a percentage.
-
- Returns: A number
-
- See also: FV PMT PV RATE TERM
-
- Example: yrs:=CTERM(0.1,100,10)
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 35 -
-
-
- Returns 24.1588 interest periods to the variable
- yrs, indicating that it would take 24 years and two months
- for an amount of $10 to grow to $100 at a rate of 10% per
- annum.
-
- ---------------------------------------------------------------------
-
- DBappend(none)
-
- Adds a new blank record to the end of the currently selected
- database file.
-
- Returns: True if successful, False otherwise
-
- See also: DBreplace
-
- Example: DBappend()
-
- ---------------------------------------------------------------------
-
- DBavg(field$,start,end)
-
- DBavg() returns the average of the fields of the currently
- open database, between the specified start and end fields.
- (Note that unlike the function DBcount(), DBavg() takes
- account of zero values). Note that the specified field must
- be numeric and not string.
-
- Returns: A number
-
- See also: DBcount DBsum DBavg
-
- Example: avg:=DBavg("AMOUNT",1,10)
-
- avg is assigned the average of the field "AMOUNT"
- in the current database between the first and tenth records
- inclusive.
-
- ---------------------------------------------------------------------
-
- DBbottom()
-
- Places the record pointer at the last record in the
- currently selected database file in index order.
-
- Returns: True if successful, False otherwise
-
- See also: DBtop
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 36 -
-
-
- Example: DBbottom()
-
- This will go to the last record in the current
- database using the current index.
-
- ---------------------------------------------------------------------
-
- DBcloseall()
-
- Closes all open database and index files. It is better
- practice to close each file separately using DBclosedbf().
-
- Returns: True if successful, False otherwise.
-
- Example: DBcloseall()
-
- ---------------------------------------------------------------------
-
- DBclosedbf()
-
- Closes the currently open database file. Any active index
- files will also be closed. It will fail if there are no
- files open.
-
- Returns: True if successful, False otherwise
-
- See also: DBcloseall DBclosendx
-
- Example: DBclosedbf()
-
- ---------------------------------------------------------------------
-
- DBclosendx(num)
-
- Closes the index file addressed by the index file handle
- num.
-
- Returns: True if successful, False otherwise
-
- See also: DBusendx
-
- Example: DBclosendx(names)
-
- Closes the index file linked to the index handle
- names.
-
- ---------------------------------------------------------------------
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 37 -
-
-
- DBcount(field$,start,end)
-
- DBcount() counts the fields of the currently active
- database, between the specified start and end records
- elements, which are nonzero, if the field is numeric, or
- nonempty, if the field is of type string.
-
- Returns: The number of nonempty fields
-
- See also: DBavg DBsum DBcount
-
- Example: n:=DBcount("DONATION",1,DBreccount())
-
- n is assigned the number of records in the
- currently open database which have nonempty DONATION fields.
-
- ---------------------------------------------------------------------
-
- DBcountflds()
-
- DBcountflds() returns the number of fields in a record in
- the currently selected database file. This function is most
- useful for determining if a call to DBstruct() would result
- in an error from too many fields in the database.
-
- Returns: A number
-
- Example: ARsize(name$[#],1)<DBcountflds()
-
- This line fails if the size of the name$[#] array
- is smaller than the number of fields in the database. This
- is a useful check to perform whenever an application is
- dealing with unknown databases.
-
- ---------------------------------------------------------------------
-
- DBdelete()
-
- Marks the current record in the currently open database for
- deletion. It may be physically deleted using the DBpack()
- command and recalled from deletion using the DBrecall()
- function.
-
- Returns: True if successful, False otherwise
-
- See also: DBpack DBrecall DBdeleted
-
- Example: DBdelete()
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 38 -
-
-
- ---------------------------------------------------------------------
-
- DBdeleted()
-
- Returns True if the current database record is marked for
- deletion.
-
- Returns: True if marked, False otherwise
-
- See also: DBpack DBrecall DBdelete
-
- Example: DBdeleted()
-
- ---------------------------------------------------------------------
-
- DBexact(number)
-
- DBexact() switches case sensitivity off, if the parameter is
- zero or on for nonzero values. By default, the database
- module is case sensitive, to maintain compatibility with
- dBase index files. If you intend to use the same database
- and index files with dBase, you should leave case
- sensitivity on.
-
- Returns: True
-
- Example: DBexact(0)
-
- Switches case sensitivity off, to follow the RExL
- convention.
-
- ---------------------------------------------------------------------
- DBgo(recnum)
-
- DBgo() moves the current record pointer to record number
- recnum in the currently selected database. The function
- returns false if the specified record number is less than
- one or greater than the number of records in the database.
-
- Returns: True if successful, False otherwise
-
- See also: DBrecno DBskip
-
- Example: DBgo(DBreccount())
-
- This positions the record pointer at the last
- record in the currently selected database. This performs the
- same action as DBbottom().
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 39 -
-
-
- ---------------------------------------------------------------------
-
- DBlocate(field$,numstr,start,direction)
-
- DBlocate() will locate the number or string numstr in the
- field field$, in the currently open database. Unlike
- DBseek(), it does not require an index to be open and the
- search can be carried out on any field in the file. The
- search starts from record number start and moving backwards
- if direction is negative and forwards if zero or positive.
- In the current release, only numeric and string database
- fields may be used with DBlocate().
-
- Returns: True if located successfully, False otherwise
-
- See also: DBseek
-
- Example: DBlocate("CUST","MCCA01",0,1)
-
- Tries to find the string "MCCA01" in the CUST
- field of the current database starting from the first record
- in the database moving forward.
-
- Example: DBlocate("CUSTNUM",1234)
-
- Tries to find the number 1234 in the field CUSTNUM
- in the current database.
-
- ---------------------------------------------------------------------
-
- DBmax(field$,start,end)
-
- DBmax() returns the maximum value of the field named
- "field$" in the current database, between the specified
- start and end records. Note that the specified field must be
- numeric and not string.
-
- Returns: A number
-
- See also: DBcount DBsum DBavg DBmin
-
- Example: q:=DBmax("PAYMENT",1,10)
-
- Returns, to the variable q, the maximum value of
- the PAYMENT field in the current database between the first
- and tenth records, inclusive.
-
- ---------------------------------------------------------------------
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 40 -
-
-
- DBmin(field$,start,end)
-
- DBmin() returns the minimum value of the field specified by
- field$ in the current database, between the specified start
- and end records. The specified field must be numeric.
-
- Returns: A number
-
- See also: DBcount DBsum DBavg DBmax
-
- Example: q:=DBmin("PAYMENT",1,10)
-
- Returns, to the variable q, the minimum value of
- the PAYMENT field in the current database between the first
- and tenth records, inclusive.
-
- ---------------------------------------------------------------------
-
- DBmkdbf(name$,num,n$[#],t$[#],len[#],dec[#])
-
- DBmkdbf() creates a new database file name$ with num number
- of fields. The specifictions for the fields are contained in
- the arrays passed to the function: The first array n$[#]
- specifies the list of field names in the file, the second
- t$[#] defines the types of the fields ("C" for character
- fields, "N" for numeric, "D" for date and "L" for logical
- fields), the third array contains field widths and the final
- array specifies the number of decimal places for numeric
- fields.
-
- Returns: True if successful, False otherwise.
-
- Example: DBmkdbf("NEWFILE",4,n$[#],t$[#],len[#],dec[#])
-
- Creates a database called NEWFILE.DBF, with four
- fields as defined by the arrays.
-
- ---------------------------------------------------------------------
-
- DBmkndx(indexname$,keyname$)
-
- Creates an index file for the currently selected database.
- The first parameter specifies a file name and the second
- specifies a field name to index it on. The file extension of
- the index file will be ".NDX". irrespective of whether one
- was specified or not. The index will be opened after it has
- been created.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 41 -
-
-
- Returns: True if successful, False otherwise
-
- See also: DBusendx
-
- Example: idx:=DBmkndx("test","name")
-
- Creates an index called "test.ndx" which orders
- the currently selected database on the NAME field.
-
- ---------------------------------------------------------------------
-
- DBnext()
-
- Increments the record pointer to the next record, in index
- order if an index is open. It will return an error if the
- record pointer is already at the end of the file.
-
- Returns: True if successfully moved, False otherwise
-
- See also: DBprev
-
- Example: DBnext()
-
- Goes to the next record in the current database
- using the current index.
-
- ---------------------------------------------------------------------
-
- DBpack()
-
- Removes all the records in the currently open database file
- which have been marked for deletion using the DBdelete()
- function. Deleted records cannot be recovered with
- DBrecall() after a call to this function has been made.
-
- Returns: True if successful, False otherwise
-
- See also: DBrecall DBdelete
-
- Example: DBpack()
-
- Deletes all records marked for deletion.
-
- ---------------------------------------------------------------------
-
- DBprev()
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 42 -
-
-
- Decrements the current record pointer to point at the
- previous record, in index order if one is open. It will
- return an error if the record pointer is already at the
- beginning of the file.
-
- Returns: True if successfully moved, False otherwise
-
- See also: DBnext
-
- Example: DBprev()
-
- ---------------------------------------------------------------------
-
- DBrecall()
-
- Undoes the effect of a DBdelete() call by resetting the
- deletion marker on the current record. The record will not
- then be removed in a subsequent call to DBpack().
-
- Returns: True
-
- See also: DBpack DBdelete
-
- Example: DBrecall()
-
- Recalls the current record from deletion.
-
- ---------------------------------------------------------------------
-
- DBreccount()
-
- Returns the number of records in the currently selected
- database.
-
- Returns: A number
-
- See also: DBrecno DBgo
-
- Example: maxrec:=DBreccount()
-
- Sets the variable maxrec to the number of records
- in the database.
-
- ---------------------------------------------------------------------
-
- DBrecno()
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 43 -
-
-
- Returns the number of the current record in the currently
- selected database.
-
- Returns: A number
-
- See also: DBreccount DBgo
-
- Example: currec:=DBrecno()
-
- Sets the variable currec to the current recor
- number.
-
- ---------------------------------------------------------------------
-
- DBreindex(indexhandle)
-
- Reindexes an index file addressed by indexhandle. This
- command is used if you have an index file which has become
- out of date with respect to its corresponding data file,
- caused by adding or deleting records from the database while
- having the index closed.
-
- Returns: True if successful, False otherwise
-
- See also: DBmkndx
-
- Example: DBreindex(ihandle)
-
- Reindexes the index file referenced by the index
- handle ihandle.
-
- ---------------------------------------------------------------------
-
- DBreplace(fieldname$, numstr)
-
- Writes the string or number numstr to the field specified by
- fieldname$. The value will be stored accurate to the number
- of places available in the data file, or as zero if it is
- too large. See the `Introduction to Databases' for more
- information on how this function behaves.
-
- Returns: True if successful, False otherwise
-
- See also: DBrstr$ DBrnum
-
- Example: DBreplace("custcode",10)
-
- Writes the value 10 to the CUSTCODE field.
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 44 -
-
-
- Example: DBreplace("custname","RH")
-
- Writes the string "RH" to the CUSTNAME field.
-
- ---------------------------------------------------------------------
-
- DBrnum(fieldname$)
-
- Returns the value of the field named fieldname$ as a number.
- See the `Introduction to Databases' for more information on
- how this function behaves. This function is included for
- compatibility with earlier versions of RExL and has been
- superceded by the `@' and `@$' operators.
-
- Returns: A number
-
- See also: DBrstr$
-
- Example: a:=DBrnum("custcode")
-
- Returns the value of the field CUSTCODE to the
- variable a.
-
- ---------------------------------------------------------------------
-
- DBrseek(dbf_handle, numstr)
-
- DBrseek() finds an index key value of the type variant
- parameter numstr in the database file referenced by the
- handle dbf_handle. If the seek value in numstr is longer
- than the index key expression, then the seek value will be
- truncated. If the database file has no index attached to it
- then an error will be generated and the function will fail.
-
- This function is extremely powerful as it adds a measure of
- relational database capability to RExL.
-
- Returns: 1 if a successful seek was performed
- 2 if a partial match was located
- 0 if no match could be found.
-
- See also: DBlocate DBseek
-
- Example: [Expr] DBseek(cust, "Robin")
-
- Positions the record pointer at the first record
- in the database file referenced by the file handle cust,
- which contains a key field value of "Robin".
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 45 -
-
-
- Example: [Expr] DBseek(orders,@cust.orderno)
-
- Finds the first occurrence (in the database file
- referenced by the file handle orders) of the value in the
- orderno field of the database file referenced by the handle
- cust. This example illustrates the power of DBrseek(),
- where the contents of one database can be used to
- retrieve information immediately from another database.
-
- ---------------------------------------------------------------------
-
- DBrstr$(fieldname$)
-
- Returns the value of the field named fieldname$ as a string.
- See the `Introduction to Databases' for more information on
- how this function behaves. This function is included for
- compatibility with earlier versions of RExL and has been
- superceded by the `@' and `@$' operators.
-
- Returns: A string
-
- See also: DBrnum
-
- Example: a$:=DBrstr$("custname")
-
- Returns the value of the field CUSTNAME to the
- variable a$.
-
- ---------------------------------------------------------------------
-
- DBseek(numstr)
-
- Finds a matching key value in a numeric or string field
- using the current index. A value will be found which is
- accurate to the fields width. If there is no index file open
- and selected, then this function call will fail.
-
- Returns: 1 if successful, 2 for partial match, 0 if no
- match
-
- See also: DBlocate
-
- Example: DBseek(37.2)
-
- Positions the record pointer at the first record
- in the database which contains a key field value of 37.2.
-
- Example: DBseek("String")
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 46 -
-
-
- Finds the first occurrence of the string "String"
- in the index key field.
-
- ---------------------------------------------------------------------
-
- DBseldbf(filehandle)
-
- Selects the database file addressed by filehandle and makes
- it the current database. The file handle is linked to the
- file using the DBusedbf() command. If there was an index
- file associated with the database, then the index will
- automatically be selected.
-
- Returns: True if successful, false otherwise
-
- See also: DBusedbf
-
- Example: DBseldbf(names)
-
- Makes the file linked to the file handle names the
- currently selected database file.
-
- ---------------------------------------------------------------------
-
- DBselndx(ihandle)
-
- Selects an open index file, referenced by the index handle
- ihandle, with which to order the currently selected
- database. The number passed is the index handle generated by
- DBusendx().
-
- Returns: True if successful, false otherwise
-
- See also: DBusendx DBclosendx
-
- Example: DBselndx(names)
-
- Selects the index file referenced by the index
- file handle names and applies it to the currently open
- database.
-
- ---------------------------------------------------------------------
-
- DBskip(numrecs)
-
- Skips past the next numrecs number of records, in index
- order if one is open. It will return an error if you attempt
- to skip beyond the end of the file.
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 47 -
-
-
- Returns: True if successful, False otherwise
-
- See also: DBgo
-
- Example: DBskip(1)
-
- Goes to the next record in index order.
-
- ---------------------------------------------------------------------
-
- DBstd(field$,start,end)
-
- DBstd() returns the population standard deviation of the
- field$ field in the current database, over the range of
- start to end fields. The specified field must be numeric
- type and not string. The deviation is calculated using the n
- method (unbiased), as in the ARstd() function.
-
- Returns: A number
-
- See also: DBvar DBsum DBavg
-
- Example: stddev:=DBstd("PAYMENT",1,10)
-
- Returns, to the variable stddev, the standard
- deviation of the PAYMENT field in the current database
- between the first and tenth records, inclusive.
-
- ---------------------------------------------------------------------
-
- DBstruct(n$[#],t$[#],len[#],dec[#])
-
- Returns the number of fields in the currently open database.
- The parameters return a list of the field names, types,
- widths and defined decimal places. The function will return
- with an error if the arrays are not big enough to hold the
- information required.
-
- Returns: Number of fields if successful, False otherwise
-
- See also: DBcountflds
-
- Example: n:=DBstruct(n$[#],t$[#],len[#],dec[#])
-
- Returns the number of fields in the database to
- the variable n and places the names of the fields in n$[#],
- the field types in t$[#], their lengths in len[#] and the
- decimal field width of numeric fields in dec[#].
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 48 -
-
-
- ---------------------------------------------------------------------
-
- DBsum(field$,start,end)
-
- DBsum() returns the sum of the field named field$ in the
- current database, over the range of start to end records.
- The specified field must be of numeric type.
-
- Returns: A number
-
- See also: DBcount DBavg
-
- Example: sum:=DBsum("PAYMENT",1,DBreccount())
-
- Returns, to the sumiable sum, the sum of "PAYMENT"
- field in the current database for all records in the file.
-
- ---------------------------------------------------------------------
-
- DBtop()
-
- Positions the record pointer at the first record in the
- currently open database. If there is an index active, it
- will go to the first record in this index. An error will be
- reported if no database has been selected, or if the
- database is empty when the returned value will be zero.
-
- Returns: True if successfully moved, False otherwise
-
- See also: DBbottom
-
- Example: DBtop()
-
- ---------------------------------------------------------------------
-
- DBusedbf(filename$)
-
- DBusedbf() opens a database file for use and returns a
- database file handle with which the file may be accessed. A
- database file may be made current by selecting the database
- handle using DBseldbf().
-
- Returns: Database file handle if successful, False
- otherwise
-
- See also: DBseldbf DBclosedbf
-
- Example: f:=DBusedbf("test")
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 49 -
-
-
- Opens a database file called "TEST.DBF" and
- returns its file handle to the variable f.
-
- ---------------------------------------------------------------------
-
- DBusendx(indexname$)
-
- DBusendx() opens an index file for use with the currently
- selected database file and returns an index file handle. The
- default and necessary index file extension is ".NDX", which
- is aupplied automatically if omitted. When the index has
- been opened using this function, it may be activated using
- the DBselndx() command.
-
- Returns: Index file handle, False if error
-
- See also: DBclosendx DBselndx
-
- Example: idx:=DBusendx("test")
-
- Returns an index handle to the variable idx
- through which the index file "TEST.NDX" may be accessed.
-
- ---------------------------------------------------------------------
- DBvar(field$,start,end)
-
- DBvar() returns the population variance of the field$ field
- in the current database, over the range of start to end
- fields. The specified field must be numeric type and not
- string. The variance is calculated using the n method
- (unbiased), as in he ARvar() function.
-
- Returns: A number
-
- See also: DBstd DBsum DBavg
-
- Example: var:=DBvar("PAYMENT",1,10)
-
- Returns, to the variable var, the standard
- deviation of the field named "PAYMENT" in the current
- database between the first and tenth records, inclusive.
-
- ---------------------------------------------------------------------
-
- DBzap()
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 50 -
-
-
- DBzap() removes all records from the currently active
- database, irrespective of the status of the deletion flag.
- Use this command with care!
-
- Returns: True if successful, False otherwise
-
- See also: DBpack DBdelete
-
- Example: DBzap()
-
- Erases the contents of the current database.
-
- ---------------------------------------------------------------------
-
- DEG(radianangle)
-
- Converts from radian angle measure to degrees. Note that all
- trigonometric functions in RExL use radian measure for input
- and output.
-
- Returns: A number
-
- See also: RAD
-
- Example: degangle:=DEG(0.5)
-
- Returns 28.64788 degrees to the variable degangle.
-
- ---------------------------------------------------------------------
-
- DISPLAY(text$)
-
- Displays text$ at the current cursor position. The cursor
- position may be set using the GOTOXY() function. DISPLAY()
- also uses a number of `escape sequences' which are identical
- those found in the C language. An escape sequence consists
- of a backslash followed by some character. In the current
- version four escape sequences are defined:
-
- Table 3.4: DISPLAY() escape sequences
-
- \t Move one tab stop to the right
- \n Move to beginning of next line
- scrolling the screen if needed
- \a Ring the terminal bell
- \\ Output the backslash character
-
- Returns: True
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 51 -
-
-
- Example: DISPLAY("Hello, world\n\t")
-
- Displays the string "Hello, world", moving the
- cursor down one line and one tab stop to the right.
-
- ---------------------------------------------------------------------
-
- DIV(number, divisor)
-
- Returns the result of the integer division of the first
- number by the second. Both parameters must be less than
- 2,147,483,647 for this function to produce a correct value,
- otherwise an overflow will occur.
-
- Returns: A number
-
- See also: MOD
-
- Example: x:=DIV(25,3)
-
- Returns 8 to the variable x.
-
- ---------------------------------------------------------------------
-
- DTdate(year,month,day)
-
- DTdate() takes three parameters, year, month and day-of-
- month and returns the julian day number of that date, or 0
- if the date is invalid. See the section on date functions in
- appendix A for information on Julian day numbers.
-
- Returns: A number
-
- See also: DTdate$ DTdatevalue
-
- Example: days:=DTdatevalue(1991,11,2)
-
- Returns the internal date number for the second of
- November, 1991.
-
- ---------------------------------------------------------------------
-
- DTdate$(daynumber)
-
- DTdate$() will return a date string representing the date of
- the Julian day number daynumber. Ensure that the date format
- is set up correctly by using the DTformat() function,
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 52 -
-
-
- otherwise your application may misinterpret the date string
- returned.
-
- Returns: True if successful, False otherwise
-
- See also: DTformat DTdatevalue
-
- Example: a$:=DTdate$(DTnow())
-
- If the date is the 5th of December, 1991, then
- this call returns "5/12/1991" with European date format
- current, "12/05/1991" with American date format or
- "1991/12/05" with Japanese format current.
-
- ---------------------------------------------------------------------
-
- DTdatevalue(date$)
-
- DTdatevalue() takes a single string parameter, interprets it
- as a date string according to the current date format, and
- returns the Julian day number of that date. Take care that
- the date format is set correctly for your country by using
- DTformat().
-
- Returns: A number
-
- See also: DTdate$
-
- Example: days:=DTdatevalue("2.1.1900")
-
- Returns 2 to the variable days if the European
- date is the default (2nd of January), otherwise returns 33 (
- 1st of February in American format).
-
- ---------------------------------------------------------------------
-
- DTday$(date)
-
- DTday$() will return the name of the day specified by date,
- interpreted as a Julian day number.
-
- Returns: A string
-
- Example: day$:=DTday$(DTnow())
-
- Returns the name of today (ie "Wednesday",
- "Thursday" and so on) to the variable day$.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 53 -
-
-
- ---------------------------------------------------------------------
-
- DTdayno(date)
-
- DTdayno() will return the day-of-month for the specified
- internal date number.
-
- Returns: A number between 1 and 31
-
- Example: d:=DTdayno(DTnow())
-
- Returns the number of the current day of the month
- to the variable d.
-
- ---------------------------------------------------------------------
-
- DTdayofyear(date)
-
- DTdayofyear() takes a Julian Day Number, `date', and returns
- the day number of the year in which that date fell.
-
- Returns: A number from 1 to 366
-
- See also: DTdayno
-
- Example: d:=DTdayofyear(DTdatevalue("01-01-1992"))
-
- Returns 1 to d
-
- Example: d:=DTdayofyear(DTdatevalue("29-02-1992"))
-
- Returns 60 to d
-
- ---------------------------------------------------------------------
-
- DTformat(formatnumber,time$,date$)
-
- Sets the format and separator for date strings and the
- separator only for time strings. Failure to set the format
- correctly could lead to unpredictable results if your
- application depends on a specific date format. Valid values
- for formatnumber are as follows:
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 54 -
-
-
- Table 3.5: Valid Format Specifiers for DTformat()
-
- 0 Return format in use
- 1 mm/dd/yyyy (American standard)
- 2 dd/mm/yyyy (European standard)
- 3 yyyy/mm/dd (Japanese standard)
-
- time$ and date$ define the number separators for use in time
- strings and date strings respectively. By default, these are
- set up from values specified in the country line of your
- "CONFIG.SYS" file. If you want to leave either of the
- separators unchanged, pass the empty string, "".
-
- Returns: True if valid parameters passed and set, False
- otherwise
-
- Example: DTformat(1,":","/")
-
- This line sets the current date format to the
- American standard of mm/dd/yyyy, the time separator to a
- colon (to give time strings like "13:00:00") and the date
- separator to a forward slash.
-
- ---------------------------------------------------------------------
-
- DThourno(time)
-
- DThourno() will return the hour of the time specified by the
- parameter, expressed in RExL's internal time format.
-
- Returns: A number between 0 and 23
-
- See also: DTminuteno DTsecondno
-
- Example: d:=DThourno(DTnow())
-
- Returns the current hour to the variable d.
-
- ---------------------------------------------------------------------
-
- DTminuteno(time)
-
- DTminuteno() will return the minute specified by the
- parameter, expressed in RExL's internal time format.
-
- Returns: A number between 0 and 59
-
- See also: DThourno DTsecondno
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 55 -
-
-
- Example: d:=DTminuteno(DTnow())
-
- Returns the number of the current minute to the
- variable d.
-
- ---------------------------------------------------------------------
-
- DTmonth$(datenum)
-
- DTmonth$() returns the name of the month upon which the
- specified Julian day number datenum, fell.
-
- Returns: A string
-
- See also: Date functions
-
- Example: mth$:=DTmonth$(DTnow())
-
- This will set mth$ to be the name of the current
- month.
-
- ---------------------------------------------------------------------
-
- DTmonthno(date)
-
- DTmonthno() will return the month-of-year for the specified
- Julian day number.
-
- Returns: A number between 1 and 12
-
- Example: d:=DTmonthno(DTnow())
-
- Returns the number of the current month of the
- year to the variable d.
-
- ---------------------------------------------------------------------
-
- DTnow()
-
- Returns the RExL's internal date and time in the form of a
- real number. The integer part of the number is the Julian
- day number and the decimal fraction part is the current time
- of day, expressed in direct fractional form. Appendix A
- gives more information on the Julian day numbering system.
-
- Returns: A number
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 56 -
-
-
- Example: a$:=DTdate$(DTnow()) Will set a$ to be the current
- date in the current date format as set by DTformat().
-
- ---------------------------------------------------------------------
-
- DTsecondno(time)
-
- DTsecondno() will return the second specified by the
- parameter, expressed in RExL's internal time format.
-
- Returns: A number between 0 and 59
-
- See also: DThourno DTminuteno
-
- Example: d:=DTsecondno(DTnow())
-
- Returns the number of the current second to the
- variable d.
-
- ---------------------------------------------------------------------
-
- DTsetdate(newdate)
-
- Initializes the system date to the date specified in the
- numeric parameter interpreted as a Julian day number.
-
- Returns: True if successful, False otherwise
-
- See also: DTdate$
-
- Example: DTsetdate(DTnow()+7)
-
- Set the date to be one week in the future.
-
- ---------------------------------------------------------------------
-
- DTsettime(newtime)
-
- DTsettime() sets the system time. The time is measured in
- decimal fractions of a day. See appendix A for a
- description of RExL's time format.
-
- Returns: True
-
- See also: DTtime$ DTtime
-
- Example: DTsettime(0.5) Sets the time to be midday.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 57 -
-
-
- ---------------------------------------------------------------------
-
- DTtime(hour,minute,second)
-
- DTtime() takes the specified hour, minute and second values
- and returns the internal time fraction representing the time
- specified. If the time is invalid, then the function will
- return zero.
-
- Returns: A time fraction
-
- See also: DTtimevalue DTtime$
-
- Example: DTsettime(DTtime(13,0,0))
-
- This will set the current time to one o'clock in
- the afternoon.
-
- ---------------------------------------------------------------------
-
- DTtime$(dayfrac)
-
- DTtime() converts the dayfrac numeric parameter from RExL's
- internal format to a time string using the currently active
- time separators.
-
- Returns: A string
-
- See also: DTtimevalue DTtime
-
- Example: newtime$:=DTtime$(0.5)
-
- This will set newtime$ to be "12:00:00".
-
- ---------------------------------------------------------------------
-
- DTtimevalue(t$)
-
- Converts the specified time string to RExL's internal time
- format. If the time is invalid the function returns a value
- of 0.
-
- Returns: A number
-
- See also: DTtime$ DTtime
-
- Example: frac:=DTtimevalue("13:00:00")
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 58 -
-
-
- This will set frac to RExL's internal
- representation of one o'clock in the afternoon, 0.5416667.
-
- ---------------------------------------------------------------------
-
- DTyearno(date)
-
- DTyearno() will return the year for the specified Julian day
- number.
-
- Returns: A number
-
- Example: d:=DTyearno(DTnow())
-
- Returns the number of the current year to the
- variable d.
-
- ---------------------------------------------------------------------
-
- EQV(log1,log2)
-
- EQV() performs a logical equivalence test upon the two
- logical parameters passed to the function. The function
- returns True if both logical parameters are True or if both
- are False, otherwise it returns False. Note that EQV(l1,l2)
- is equivalent to NOT(XOR(l1,l2)).
-
- Returns: A number
-
- See also: NOT AND XOR OR IMP
-
- Example: val:=EQV(TRUE(),FALSE())
-
- Returns False to to the variable val
-
- ---------------------------------------------------------------------
-
- ERclear()
-
- ERclear() clears all error flags so that ERmsg$() will
- return a empty string and ERok() will return True, until the
- next error occurs.
-
- Returns: True
-
- See also: ERwatch ERok ERmsg$
-
- Example: ERclear()
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 59 -
-
-
- ---------------------------------------------------------------------
-
- ERmsg$()
-
- Return the last error message generated, or a empty string
- if there has been no errors since starting or since the last
- use of the ERclear() function.
-
- Returns: A string
-
- See also: ERwatch ERok
-
- Example: a$:=ERmsg$()
-
- Returns an empty string if there have been no
- errors since the start of execution, or the last call to
- ERclear().
-
- ---------------------------------------------------------------------
-
- ERnum()
-
- ERnum() returns the error number of the last error
- generated, or zero if there has been no errors generated
- since the last call to ERclear() or since the application
- began. This function should be used with care since the
- error numbers may change in future versions of RExL.
-
- Returns: A number
-
- See also: ERwatch ERok ERmsg$
-
- Example: ERnum()
-
- ---------------------------------------------------------------------
-
- ERok()
-
- ERok() will return true if no error has been reported since
- starting or the last ERclear(). It is used to check for
- `hidden' failures such as divide-by-0's (and so on) which do
- not fail statements, and hence are more difficult to detect.
-
- Returns: True if error has occurred, False otherwise
-
- See also: ERmsg$ ERwatch
-
- Example: ERok()
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 60 -
-
-
- ---------------------------------------------------------------------
-
- ERwatch(number)
-
- ERwatch() turns the error reporting feature on and off. If
- the numeric parameter is non-zero, then errors will be
- displayed on the bottom line of the screen as is the default
- condition of RExL. If the parameter is zero, error reporting
- will be disabled, although the error messages and number
- will be set up regardless.
-
- Returns: True
-
- See also: ERok ERmsg$
-
- Example: ERwatch(TRUE())
-
- Enable error reporting.
-
- ---------------------------------------------------------------------
-
- ESCWATCH(number)
-
- ESCWATCH() is used to enable and disable the trapping of the
- <Esc> and <Alt-D> keys during execution of an application.
- In the default condition of on (a value for number of 1), an
- `error' is flagged, prompting the user to see if he wants to
- terminate the application. If the parameter is zero, then
- RExL will not scan for the key. During debugging of an
- application, it's best to leave watching on.
-
- Returns: True
-
- Example: ESCWATCH(TRUE())
-
- Monitor the <Esc> and <Alt-D> keys for presses
- during execution of an application.
-
- ---------------------------------------------------------------------
-
- EXACT(num)
-
- EXACT() defines whether the string comparisons and tests are
- carried out respecting the case of the letters being
- compared (when num = 1) or irrespective of case (num = 0).
- In its default condition, RExL is not sensitive to the case
- of letters.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 61 -
-
-
- Returns: True
-
- Example: EXACT(TRUE())
-
- Turns on case sensitivity.
-
- ---------------------------------------------------------------------
-
- EXP(number)
-
- Returns the exponential e (2.71828) to the power of the
- single numeric parameter.
-
- Returns: A number
-
- See also: LOG
-
- Example: x:=EXP(1)
-
- Returns 2.718281828 to the variable x.
-
- ---------------------------------------------------------------------
-
- FALSE()
-
- Returns the value zero. It is used to fail a rule or part of
- a rule.
-
- Returns: False
-
- See also: TRUE NOT
-
- Example: value:=NOT(FALSE())
-
- Returns 1 to the variable value.
-
- ---------------------------------------------------------------------
-
- FILL(x, y, w, h, char$)
-
- Fills an area of the screen with the specified character.
- The first four parameters specify the horizontal and
- vertical coordinates of the top left hand corner (x,y) of
- the bounding box and its width w and height h respectively.
- The fifth parameter specifies the ASCII character to fill
- the area with. The attributes of the box remain unchanged by
- this command.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 62 -
-
-
- Returns: True
-
- See also: PAINT BOX
-
- Example: FILL(0,0,79,24,"A")
-
- Fills the screen with the letter A.
-
- ---------------------------------------------------------------------
-
- FIND(substr$, superstr$)
-
- Locates the first occurrence of substr$ within superstr$. If
- the substring is not in superstr$, then the function will
- return False. The value returned is zero based, meaning that
- if the substring starts at the first character, then the
- return value will be zero. This behaviour is comatible with
- C language, where all string positions are zero-based.
-
- Returns: String index if located, -1 otherwise
-
- Example: pos:=FIND("lo","Hello")
-
- Returns a value of 3 to the variable pos.
-
- ---------------------------------------------------------------------
-
- FLOOR(number)
-
- FLOOR() returns the largest number less than the numeric
- parameter.
-
- Returns: A number
-
- See also: CEIL
-
- Example: a:=FLOOR(5.5)
-
- Returns the value 5.0 to the variable a.
-
- ---------------------------------------------------------------------
-
- FV(pmt,rate,periods)
-
- Calculates the future value of equal payments of amount pmt
- of a simple ordinary annuity, earning at a periodic interest
- rate for the number of payment periods. The interest rate
- should be expressed as a decimal rather than a percentage.
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 63 -
-
-
- Returns: A number
-
- Example: x:=FV(1000,0.1,10)
-
- Returns $15937.43 to the variable x.
-
- ---------------------------------------------------------------------
-
- GOTOXY(xpos, ypos)
-
- Positions the text cursor on the text screen at the
- specified horizontal co-ordinate xpos and vertical co-
- ordinate ypos, taking (0,0) to be the top right hand corner
- of the screen. If the coordinates are out of range, the
- GOTOXY() will return False.
-
- Returns: True if successful, False otherwise
-
- See also: DISPLAY
-
- Example: GOTOXY(0,0)
-
- Sets the cursor to the top left hand corner of the
- screen.
-
- --------------------------------------------------------------------
-
- HELP(log)
-
- HELP() is used to turn the online help feature on and off.
- When `log' is true, <F1> will display the currently active
- help screen when pressed from within a dialog screen. When
- `log' is false, <F1> keystrokes will be returned to the
- application.
-
- Returns: True
-
- Example: HELP(1)
-
- Turns on <F1> monitoring.
- ---------------------------------------------------------------------
-
- IIF(boolexp, anstrue, ansfalse)
-
- Returns one of the parameters anstrue or ansfalse depending
- on the value of the boolean expression passed as the first
- parameter, boolexp. If the boolexp is true (non-zero), then
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 64 -
-
-
- anstrue is returned, otherwise ansfalse is returned. This
- behaviour is compatible with the Clipper IF command.
-
- Returns: Either of the second two parameters
-
- See also: IIF$
-
- Example: a:=IIF(x,1,2)
-
- If the value of x is non-zero, then A is assigned
- the value 1, otherwise the value 2.
-
- ---------------------------------------------------------------------
-
- IIF$(boolexp, anstrue$, ansfalse$)
-
- IIF$() will return anstrue$ if the boolean expression
- boolexp is true, or ansfalse$, if boolexp is false. This
- behaviour is compatible with the Clipper IF command.
-
- Returns: A string
-
- See also: IIF
-
- Example: a$:=IIF$(x,"Y","N")
-
- If the value of x is non-zero, then A$ is assigned
- the value "Y", otherwise the value "N".
-
- ---------------------------------------------------------------------
-
- IMP(log1,log2)
-
- IMP() performs a logical implication test upon the two
- logical parameters passed to the function. The function
- returns True if the first parameter is True and the second
- is False, otherwise it returns False.
-
- Returns: A number
-
- See also: NOT AND XOR OR EQV
-
- Example: val:=IMP(TRUE(),FALSE())
-
- Returns True to to the variable val.
-
- ---------------------------------------------------------------------
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 65 -
-
-
- INIT()
-
- Clears out all variables currently defined, setting numeric
- variables to 0.0 and setting strings to zero length.
-
- Returns: True
-
- Example: INIT()
-
- ---------------------------------------------------------------------
-
- INPUT(x,y,w,p,value)
-
- Generates an input field of width w and decimal precision p
- at the horizontal and vertical coordinates (x,y). The
- initial value of the input is value The attribute at (x,y)
- will be extended to the width of the input. If value is too
- large to display in the assigned area, then overwriting of
- the surrounding screen may occur. The input area will not
- be affected by this. The maximum width of input is 19 digits
- and the maximum precision is 17 digits.
-
- Returns: The number input
-
- See also: INPUT$
-
- Example: n:=INPUT(5,10,10,2,1.2)
-
- Accepts the input of a number a column 5, row 10,
- with a width of 10 places and including room for 2 decimal
- places, with an initial value of 1.2. The number will be
- stored in the variable n.
-
- ---------------------------------------------------------------------
-
- INPUT$(x,y,width,value$)
-
- Generates a string input field of width w at the horizontal
- and vertical coordinates (x,y) specified, setting the
- initial value of the input to value$.
-
- Returns: The string input
-
- See also: INPUT
-
- Example: t$:=INPUT$(5,10,10,"Test")
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 66 -
-
-
- Accepts input of a string at column 5 row 10, with
- a width of 10 places and an initial value of "Test".
-
- ---------------------------------------------------------------------
-
- INVERSE(x1, y1, x2, y2)
-
- Inverts the attributes of an area of screen. The first two
- parameters define the top left corner. The last two define
- the bottom right corner. If you invert the same area twice,
- you will be left with the same area. This can be used to
- flash an area. The inverse attribute is generated by
- xor'ing the current attribute with 7Fh.
-
- Returns: True
-
- Example: INVERSE(0,0,79,24)
-
- Inverts the attributes for the whole screen.
-
- ---------------------------------------------------------------------
-
- KBclear()
-
- Clears all keystrokes from the keyboard buffer.
-
- Returns: True
-
- Example: KBclear()
-
- ---------------------------------------------------------------------
-
- KBlast()
-
- KBlast() returns the last keystroke typed by the user. The
- function can be used to determine the keystroke which caused
- the termination of a dialog screen (for example, if the user
- pressed <PgUp>, <PgDn>, <Enter> and so on). If no keys have
- been pressed since the application started running, or since
- the last call of KBclear(), then KBlast() returns False.
- See appendix D for a list of return values.
-
- Returns: Key code for last key pressed, False if none
- present
-
- See also: KBwait
-
- Example: key:=KBlast()
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 67 -
-
-
- ---------------------------------------------------------------------
-
- KBread()
-
- Waits until a key is pressed and then returns the code
- associated with it. If the key is a character key, the ASCII
- code will be returned, otherwise, the internal code for the
- key will be returned. See appendix D for a list of return
- values.
-
- Returns: Key code for key pressed
-
- See also: KBwait
-
- Example: key:=KBread()
-
- Waits for a key to be pressed and returns keyboard
- code in the variable key.
-
- ---------------------------------------------------------------------
-
- KBready()
-
- KBready() returns the value of a keystroke, if one is ready
- and waiting in the keyboard buffer. If there is no pending
- keystroke, the function returns immediately with a value of
- zero, otherwise it returns the keystroke code, as listed in
- appendix D.
-
- Returns: Key code for key waiting, zero otherwise
-
- Example: KeyWaiting:=KBready()
-
- ---------------------------------------------------------------------
-
- KBwait(time)
-
- Waits for the specified number of seconds time for a key to
- be pressed. The function then returns the coded value for
- that key or zero if no key was pressed. See appendix D for
- a list of keystroke codes.
-
- Returns: Key code if key pressed, False if no key pressed
-
- Example: key:=KBwait()
-
- ---------------------------------------------------------------------
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 68 -
-
-
- LEFT$(str$,num)
-
- Returns a string comprising the leftmost num number of
- characters from the string str$. If the number specified is
- greater than the length of the string then the entire string
- will be copied.
-
- Returns: A string
-
- See also: RIGHT$ MID$
-
- Example: a$:=LEFT$("Hello",2)
-
- This sets a$ to be "He"
-
- ---------------------------------------------------------------------
-
- LENGTH(string$)
-
- Returns the length of a character string string$. If the
- string is empty, then the value 0 will be returned
-
- Returns: A number
-
- Example: lgth:=LENGTH("System")
-
- This will set lgth to be 6.
-
- ---------------------------------------------------------------------
-
- LOAD(filename$)
-
- Loads in and passes control to another listing. LOAD() is
- not nested so that when the second listing finishes, control
- is not passed back to the original listing. LOAD() may
- return False if the second listing is too big, or does not
- exist. If the specified application image does not exist in
- the current directory, then the list of paths specified in
- the RExL environment variable will be searched in sequence.
- If the application is located, then all databases are
- closed, the internal error variables are reset and execution
- begins at the master rule of the new application. The stack
- of screens stored by PUSHSCR() and POPSCR() are not cleared,
- so screenfuls of information may be passed between two
- applications.
-
- Applications compiled with the postfix compiler must
- exercise caution when using the LOAD function, which is
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 69 -
-
-
- implemented slightly differently in the executable file
- library. The section on the postfix compiler RExLPC gives
- more details on this.
-
- Returns: False if listing could not load
-
- Example: LOAD("2ndpart")
-
- Loads and passes control to the application image
- with the DOS file name "2ndpart.rxl".
-
- ---------------------------------------------------------------------
-
- LOADSCR(filename$, x, y)
-
- Loads in a small area of the screen from the specified
- filename. The x and y coordinates specify the top left
- corner of where the screen is to appear. Any fields that are
- contained with the screen will then be activated. If you
- wish to load the screen to its original x or y position then
- set the relevant parameter to -1. Any parts of the screen
- being loaded which do not fit will be ignored and not
- displayed.
-
- Returns: True if loaded ok, False otherwise
-
- See also: SAVESCR
-
- Example: LOADSCR(n$,10,-1)
-
- Get the screen named n$ and place it at column 10
- with the row being the same as that from where it was saved.
-
- ---------------------------------------------------------------------
-
- LOG(number)
-
- Returns the natural logarithm (log to base e (2.71828)) of
- the parameter.
-
- Returns: A number
-
- See also: EXP
-
- Example: nl:=LOG(0.51)
-
- This will set nl to be -0.673344553
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 70 -
-
-
- ---------------------------------------------------------------------
-
- LOG10(number)
-
- Returns the base-10 logarithm of the parameter.
-
- Returns: A number
-
- Example: lg:=LOG10(0.51)
-
- This will set lg to be -0.292429824
-
- ---------------------------------------------------------------------
-
- LOWER$(string$)
-
- LOWER$() returns the parameter string translated in lower
- case. The European ASCII characters are left as they are
- and are not translated to lower case.
-
- Returns: A string
-
- See also: UPPER$
-
- Example: a$:=LOWER$("hELlO")
-
- Returns the string "hello" to a$.
-
- ---------------------------------------------------------------------
-
- MAX(num1, num2)
-
- Returns the larger of the two numeric parameters.
-
- Returns: A number
-
- See also: MIN
-
- Example: bigger:=MAX(5,4)
-
- This will set bigger to be 5
-
- ---------------------------------------------------------------------
-
- MID$(source$, start, count)
-
- Returns count characters, starting at position start from
- the string source$. If start is past the end of the string
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 71 -
-
-
- or count is less than or equal to zero, then an empty string
- is returned.
-
- Returns: A string
-
- See also: LEFT$ RIGHT$
-
- Example: a$:=MID$("ABCDEF",2,2)
-
- This will set a$ to be "CD"
-
- ---------------------------------------------------------------------
-
- MIN(number1, number2)
-
- Returns the smaller of the two parameters.
-
- Returns: A number
-
- See also: MAX
-
- Example: small:=MIN(5,4)
-
- This will set small to be 4.
-
- ---------------------------------------------------------------------
-
- MOD(number1, number2)
-
- Returns the remainder of the division of number2 by number1.
- Mathematically, this operation is known as modulo division.
-
- Returns: A number
-
- See also: DIV
-
- Example: remainder:=MOD(10,3)
-
- This will set remainder to be 1.
-
- ---------------------------------------------------------------------
-
- NOT(boolean)
-
- Returns the logical inverse of the parameter: If the
- parameter evaluates to false, the function will return True,
- otherwise it will return False.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 72 -
-
-
- Returns: True or False
-
- See also: BTnot
-
- Example: NOT(TRUE()) Returns False.
-
- ---------------------------------------------------------------------
-
- OR(log1,log2)
-
- OR() performs a logical OR upon the two logical parameters
- passed to the function. The function returns True if either
- of the two logical parameters are True otherwise it returns
- False.
-
- Returns: A number
-
- See also: NOT EQV XOR AND IMP
-
- Example: val:=OR(TRUE(),FALSE())
-
- Returns False to to the variable val.
-
- ---------------------------------------------------------------------
-
- OScd(path$)
-
- Changes directory to the path specified by path$. If the
- directory cannot be accessed then the function returns
- false, otherwise true. To change the current drive use
- OSdrive().
-
- Returns: True if successful, False otherwise
-
- See also: OSdrive OSrd OSmd
-
- Example: OScd("\rexl\demo")
-
- Sets the directory to be \rexl\demo on the default
- drive.
-
- ---------------------------------------------------------------------
-
- OScmd(command$)
-
- Allows external programs to be loaded and run. The parameter
- contains the program name and any parameters which must be
- passed to it. OScmd() returns True if the command executed
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 73 -
-
-
- and False if it failed to do so. Note that RExL must be
- able to access the command interpreter to run the command.
- The command interpreter is usually the file "COMMAND.COM",
- located in the root directory of the boot drive and is
- referenced by the COMSPEC environment variable.
-
- Returns: True if successful, False otherwise
-
- Example: OScmd("edit c:\autoexec.bat")
-
- Executes the program or batch file named "edit"
- and passes the string "c:\autoexec.bat" to it as a
- parameter.
-
- ---------------------------------------------------------------------
-
- OScopy(source$,dest$)
-
- Copys a file from the source$ to dest$. The destination
- parameter, unlike its MS-DOS equivalent, must contain the
- name of the file to which the file will be copied. The wild
- card characters ? and are not allowed in either parameter.
- If you need to perform a wild card copy, use the OScmd()
- function.
-
- Returns: True if successful, False otherwise
-
- See also: OScmd
-
- Example: OScopy("TEST.DOC","\T.TXT")
-
- Copies a file "TEST.DOC" in the current directory
- to the root directory, naming it "T.TXT".
-
- ---------------------------------------------------------------------
-
- OSdel(filename$)
-
- Deletes the specified file from the disk. If the file does
- not exist, or could not be deleted then this function will
- return false, otherwise true. filename$ may specify a full
- path including drive specifier.
-
- Returns: True if successful, False otherwise
-
- See also: OSexists
-
- Example: OSdel("TEST.RXL")
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 74 -
-
-
- Deletes the file called "TEST.RXL" in the current
- directory.
-
- ---------------------------------------------------------------------
-
- OSdir(mask$, attr, n$[#], sz[#], dt[#], at[#])
-
- OSdir() is used to obtain DOS diretory listings from disk.
- The first parameter specifies the DOS file mask to use for
- the search and may include drive and path designators as
- well as wild card characters. The second parameter specifies
- the file attribute to search for. To search for more than
- one file type, add the search attributes together. The
- following table gives the valid search attributes:
-
- Table 3.6: OSdir() File Attribute Coding
-
- Attribute Code Meaning
- 1 Read only attribute
- 2 Hidden file
- 4 System file
- 8 Volume label
- 16 Directory
- 32 Archive
- 64 All files
-
- If you are unsure about the meanings of any of these
- attributes, consult your DOS manual.
-
- The results of the search are placed in the arrays: file
- names in n$[#], file sizes in sz[#], file dates and times in
- dt[#] and file attributes in at[#]. The return value from
- OSdir() is the number of files returned in the array. If
- any of the arrays are not large enough to hold the
- information required, then an array bounds error eill be
- generated and the function will return without looking for
- any more files.
-
- Returns: The number of files found or zero if no files
- located
-
- See also: OSexists
-
- Example: OSdir("*.rxl",64,n$[#],sz[#],dt[#],at[#])
-
- Returns lists of all of the RExL application image
- files in the current directory. The files may have any
- attribute.
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 75 -
-
-
- Example: OSdir("T?.RXL",64,n$[#],sz[#],dt[#],at[#])
-
- Returns a list of all of the RExL files in the
- current directory, whose names have two letters, the first
- of which is "T"
-
- ---------------------------------------------------------------------
-
- OSdrive(drive$)
-
- Selects a new current disk drive. The parameter should be a
- two character string, the first character of which is a
- drive letter and the second a colon. The return value of the
- function is the ASCII character code of the drive selected.
- If the drive was not successfully selected, then the value
- returned will be the ASCII code of the current drive letter.
- Passing an empty string in place of drive$ will return the
- current drive with no change made.
-
- Returns: True if successful, False otherwise
-
- See also: OScd OSwd$
-
- Example: OSdrive("C:")
-
- Sets the current or default drive to be C:
-
- ---------------------------------------------------------------------
-
- OSdriveok(dstr$)
-
- OSdriveok() tests a disk drive, normally a floppy drive, to
- determine if it is ready to be written to or read from.
- `dstr$' specifies the DOS disk drive to test. The function
- can return one of a range of values, giving explicit
- information about why the disk drive is not ready. The
- following table gives the exact return values and their
- meanings:
-
- Table 3.7: OSdriveok() return values
-
- -1 Wrong parameters
- 0 Drive loaded and ready to read or write
- 1 Drive door open or diskette inserted upside down
- 2 Diskette is unformatted
- 3 Write protected
- 4 Undetermined
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 76 -
-
-
- Note that unlike almost all other rexl functions, this
- function returns zero if the test performed was successful.
-
- Returns: A number
-
- See also: OSdrive
-
- Example: !OSdriveok("A:")
-
- Returns true if drive A: is not write protected
- and is ready for access.
-
- ---------------------------------------------------------------------
-
- OSexists(filename$)
-
- Checks to see if the specified file exists. filename$ can
- contain a full pathname and drive specification.
-
- Returns: True if file exists, False otherwise
-
- See also: OSdir
-
- Example: OSexists("c:\command.com")
-
- Tests to see if the file "COMMAND.COM" exists in
- the root diretory of the C: drive.
-
- ---------------------------------------------------------------------
-
- OSmd(dirname$)
-
- OSmd() will make a DOS directory. The single string
- parameter specifies the directory name to make and may
- contain a drive letter. As in the DOS md command, you may
- only make one directory level at a time.
-
- Returns: True if successful, False otherwise
-
- See also: OSrd
-
- Example: OSmd("\test")
-
- Makes a directory called "test" in the root
- directory of the current drive.
-
- ---------------------------------------------------------------------
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 77 -
-
-
- OSnumber()
-
- This function returns a value indicating which operating
- system RExL is currently running under. Currently, the only
- value returned is 1, for MS-DOS, but future versions of RExL
- running under different operating systems will return
- different values. Use OSstat() to determine the operating
- system version number.
-
- Returns: 1 for MS-DOS
-
- See also: OSstat
-
- Example: sys:=OSnumber()
-
- Sets sys equal to 1 if the operating system is
- MS-DOS.
-
- ---------------------------------------------------------------------
-
- OSrd(dirname$)
-
- OSrd() will remove a DOS directory. The single string
- parameter specifies the directory name to be deleted. The
- string can contain a drive letter and a full path
- specification.
-
- Returns: True if successful, False otherwise
-
- See also: OSmd
-
- Example: OSrd("c:\test")
-
- Removes a directory called "\test" from the root
- directory of the C: drive.
-
- ---------------------------------------------------------------------
-
- OSren(source$,dest$)
-
- This function will rename the file named source$ to dest$.
- The parameters may specify a directory paths, so that files
- may be moved from one directory to another using OSren().
- Note that, as in DOS, the destination file must not exist,
- or the function will fail.
-
- Returns: True if successful, otherwise False.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 78 -
-
-
- See also: OScopy OSdel
-
- Example: OSren("TEST.TXT","TEST.BAK")
-
- Changes the name of the file "TEST.TXT" to
- "TEST.BAK".
-
- ---------------------------------------------------------------------
-
- OSstat(ar[#])
-
- OSstat() returns seven items of information, about the
- current status of the machine, to the specified one
- dimensional numeric array.
-
- The information returned is as follows:
-
- Table 3.8: OSstat() Return Indexing
-
- Array Index Meaning
- 0 Disk space free on current drive
- 1 Total disk space on current drive
- 2 Total number of disk drives available
- 3 Largest block of free memory available
- 4 Current DOS version
- 5 CPU type
- 6 Coprocessor type
- 7 Video adapter type
-
- If the current disk is large, then DOS may take a few
- seconds to determine the its free space and total size. If
- the current disk is not valid, for example, a floppy drive
- with an open door, then a critical error will be generated
- and a value of zero will be returned for the size of the
- disk.
-
- The DOS version is returned as a real number of the form
- x.yy where x is the major version number and yy is the minor
- version number.
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 79 -
-
-
- Table 3.9: CPU Type Return Coding
-
- Return Value Processor Type
- 0 Intel 8088
- 1 Intel 8086
- 2 NEC V20
- 3 NEC V30
- 4 Intel 80188
- 5 Intel 80186
- 6 Intel 80286
- 7 Intel 80386
- 8 Intel 80486
-
- Table 3.10: Coprocessor Type Return Coding
-
- Return Value Coprocessor Type
- 0 None installed
- 1 Intel 8087
- 2 Intel 80287
- 3 Intel 80387
-
- Table 3.11: Video Adapter Type Return Coding
-
- Return Value Video Adapter type
- 0 Monochrome
- 1 CGA adapter
- 2 EGA adapter
- 3 VGA adapter
-
- Returns: True if array large enough, False otherwise
-
- See also: OSdir OSnumber
-
- Example: OSstat(Stat[#])
-
- Returns the above information to the stat[#]
- array.
-
- ---------------------------------------------------------------------
-
- OSwd$()
-
- Returns a string containing the current directory path. The
- string will also contain the current drive letter.
-
- Returns: A string
-
- See also: OSdir OScd
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 80 -
-
-
- Example: d$:=OSwd$()
-
- ---------------------------------------------------------------------
-
- OUTPUT(device$)
-
- Sets the default output device for print requests. Since the
- string is passed directly to DOS it can be a file on disk.
- By default the printer output device is the device driver
- "PRN". If you are using a parallel/centronics type printer
- then you may wish to use the command:
-
- [Expr] OUTPUT("LPT1")
-
- or if you are using a serially connected printer:
-
- [Expr] OUTPUT("COM1")
-
- These two functions explicitly state which type of printer
- you will be using. Using the generic PRN device you should
- have less problems when people connect different types of
- printers. Making it a variable would allow you to modify to
- set up a option for the user to select the output device.
-
- Returns: True
-
- Example: OUTPUT("DUMP.DOC") Assigns all printer output to
- the file "DUMP.DOC"
-
- ---------------------------------------------------------------------
-
- PAINT(x, y, w, h, att, mask)
-
- PAINT() changes the attributes of a box whose top left hand
- corner is (x,y) and whose width and height are w and h
- respectively. When changing the attribute byte on the
- screen, PAINT() performs a boolean AND on the byte with the
- mask and then adds the attribute which has been ANDed with
- the inverted mask. The result of this complicated
- manoeuvering is that any color can be filtered in or out
- from either background or foreground. If you wish to change
- foreground only set the mask to be 240, to change the
- background only, set it to 15. If you want to change
- everything in the area set the mask to be 0.
-
- The following table lists the colors which can be used on
- color monitors:
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 81 -
-
-
- Table 3.12: Color Attribute Codes
-
- Color Foreground Background
- Black 0 0
- Blue 1 16
- Green 2 32
- Cyan 3 48
- Red 4 64
- Magenta 5 80
- Brown 6 96
- Light Gray 7 112
- Dark Gray 8 (128)
- Light Blue 9 (144)
- Light Green 10 (160)
- Light Cyan 11 (176)
- Light Red 12 (192)
- Light Mgnta 13 (208)
- Yellow 14 (224)
- White 15 (240)
- Blink 128 -
-
- If the last screen displayed during execution had the
- flash-intensity bit set to `intensity', then a further eight
- background colors, indicated above by the bracketed numbers,
- are available, at the expense of blinking. Note that the
- background colors are derived from the foreground colors by
- multiplying by sixteen.
-
- Some early CGA systems do not support the flash-intensity
- toggle, so distribution packages which may be used on these
- adapters should not use this feature.
-
- Returns: True
-
- See also: INVERSE FILL
-
- Example: PAINT(0,0,79,24,31,0)
-
- This will set the entire screen to bright white on
- a blue background.
-
- Example: PAINT(0,0,79,24,15,240)
-
- This changes all foreground colors to white,
- leaving background colors unchanged.
-
- ---------------------------------------------------------------------
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 82 -
-
-
- PAUSE(time)
-
- Halts execution of the application for a specified time
- before execution continues. The time is measured in
- milliseconds (thousandths of a second).
-
- Returns: True
-
- Example: PAUSE(1500)
-
- Halts the system for a second and a half.
-
- ---------------------------------------------------------------------
-
- PEEK(seg,ofs)
-
- PEEK() returns the value of the byte at the memory location
- referenced by a segment value of seg and an offset value of
- ofs. Consult a DOS reference if you are not familiar with
- the concept of offsets and segmentation.
-
- Returns: A number from 0 to 255
-
- See also: PEEKW POKE POKEW
-
- Example: DisplayType:=PEEK(0,1097)
-
- This expression returns, to the variable
- DisplayType, the type of display attached to your computer.
- The value will be 3 for a color display and 7 for a
- monochrome display.
-
- ---------------------------------------------------------------------
-
- PEEKW(seg,ofs)
-
- PEEKW() returns the value of the sixteen bit word at the
- memory location referenced by a segment value of seg and an
- offset value of ofs. Consult a DOS reference if you are not
- familiar with the concept of offsets and segmentation.
-
- Returns: A number from 0 to 65535
-
- See also: PEEK POKE POKEW
-
- Example: CharAttr:=PEEKW(47104,0)
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 83 -
-
-
- This expression returns, to the variable CharAttr,
- the first character and attribute pair of a color display.
- The attribute will be in the upper byte and the character
- will be in the lower byte.
-
- ---------------------------------------------------------------------
-
- PI()
-
- Returns the value of pi, 3.14159265358979.
-
- Returns: True
-
- Example: degs:=rads*180/PI()
-
- Returns the value of rads radians, expressed in
- degrees to the variable degs. This expression performs the
- same action as the DEG() function.
-
- ---------------------------------------------------------------------
-
- PMT(prin,rate,periods)
-
- Calculates the equal periodic payment for an ordinary
- annuity with an initial principal of prin, at the specified
- rate, for periods payments. The interest rate must be
- expressed as a decimal fraction, rather than as a
- percentage.
-
- Returns: A number
-
- Example: amt:=PMT(1000,0.1,10) Stores the value $162.75 to
- the variable amt.
-
- ---------------------------------------------------------------------
-
- POKE(seg,ofs,value)
-
- POKE() will place the byte value at the memory location
- referenced by a segment value of seg and an offset value of
- ofs. This function should be used with care, since poking
- to random areas of the computer's memory may corrupt DOS and
- cause unpredictable behaviour. Consult your DOS reference
- if you are not familiar with the concept of offsets and
- segmentation.
-
- Returns: True
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 84 -
-
-
- See also: PEEKW PEEK POKEW
-
- Example: POKE(0,1047,0)
-
- This expression pokes a value of zero to the
- keyboard flags byte at 0417h in the BIOS data segment. This
- will turn off insert status, caps lock and num lock.
-
- ---------------------------------------------------------------------
-
- POKEW(seg,ofs,value)
-
- POKEW() will place the sixteen bit word value at the memory
- location referenced by a segment value of seg and an offset
- value of ofs. Use this function with care, since poking to
- random areas of the computer's memory may corrupt DOS and
- cause unpredictable behaviour. Consult your DOS reference
- if you are not familiar with the concept of offsets and
- segmentation.
-
- Returns: True
-
- See also: PEEKW PEEK POKE
-
- Example: POKEW(47104,0,0)
-
- This expression pokes a value of zero to the first
- character and attribute pair at the start of the color
- display memory area. This is displayed as a black space.
-
- ---------------------------------------------------------------------
-
- POPSCR()
-
- POPSCR() restores the screen from a temporary work area in
- memory. The PUSHSCR() function is used to save the screen in
- memory. Up to ten screens may be saved and restored, on a
- first-in, last-out or stack based basis.
-
- Returns: True if successful, false otherwise.
-
- See also: PUSHSCR
-
- Example: POPSCR()
-
- Restores contents of screen.
-
- ---------------------------------------------------------------------
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 85 -
-
-
- POW(number, exponent)
-
- Returns the value of number raised to the power of exponent.
- This function is included for reasons of compatibility with
- the C language.
-
- Returns: True
-
- Example: v:=POW(10,2)
-
- Returns 100 to the variable v. Note that this
- operation can also be carried out using the `raise to power'
- operator, the caret, ^, so that the above expression could
- be rewritten as follows:
-
- Example: v:=10^2
-
- ---------------------------------------------------------------------
-
- PUSHSCR()
-
- PUSHSCR() saves the current screen in a temporary work area
- in memory. The information saved consists only of a picture
- of the screen and does not save any fields. The POPSCR()
- function is used to restore a screen from memory. Up to ten
- screens may be saved and restored, on a first-in, last-out
- or stack based basis.
-
- Returns: True if successful, false otherwise.
-
- See also: POPSCR
-
- Example: PUSHSCR()
-
- Saves contents of screen.
-
- ---------------------------------------------------------------------
-
- PV(pmt, rate, periods)
-
- Calculates the present value of equal pmt in a simple
- ordinary annuity at the specified interest rate for a number
- of periods. As with all financial functions, the interest
- rate must be expressed as a decimal fraction, rather than as
- a percentage.
-
- Returns: A number
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 86 -
-
-
- Example: amt:=PV(1000,0.1,10)
-
- Stores $6144.57 to the variable amt.
-
- ---------------------------------------------------------------------
-
- QUIT()
-
- Halts the execution of the current application. If the
- runtime debugger was called from within the editor, then the
- editor wil be restarted, otherwise, the module will return
- to DOS.
-
- Returns: N/A
-
- Example: QUIT()
-
- Halts the application and then returns to the
- operating system or editor.
-
- ---------------------------------------------------------------------
-
- RAD(angle)
-
- Converts an angle expressed in degrees into an equivalent
- angle in radians. All trigonometric functions in RExL use
- radians as input.
-
- Returns: A number
-
- See also: DEG
-
- Example: r:=RAD(180)
-
- This assigns the value of pi, the radian
- equivalent of 180 degrees, to the variable r.
-
- ---------------------------------------------------------------------
-
- RAND()
-
- Returns a pseudo-random number between 0 and 1. Each time
- the inference engine starts a seed set to generate the
- sequence. Since the seed is always the same, the random
- number generator follows the same sequence. You can set your
- own seed value by using the SEED() function.
-
- Returns: A number
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 87 -
-
-
- See also: SEED
-
- Example: num:=FLOOR(RAND()*80)+10
-
- Assigns an random whole number between 10 and 90
- to the variable num.
-
- ---------------------------------------------------------------------
-
- RATE(fv, pv, periods)
-
- Calculates the periodic interest rate necessary for pv to
- grow to fv over a fixed number of compounding periods.
-
- Returns: A number
-
- Example: val:=RATE(1000,100,10)
-
- Assigns the value 0.2589 (or 25.89%) to the
- variable val.
-
- ---------------------------------------------------------------------
-
- REPEAT$(str$,times)
-
- REPEAT$() returns a string consisting of a source string,
- str$, repeated times times. If the string would need to grow
- beyond the maximum string length of 80 characters, it will
- be truncated.
-
- Returns: A string
-
- Example: a$:=REPEAT$("-",5) Assigns the string "-----" to
- a$.
-
- ---------------------------------------------------------------------
-
- REPLACE$(str$,start,chars,repl$)
-
- REPLACE$() takes a source string, str$, removes chars number
- of characters from it, starting at position start from
- within the string and inserts the replacement string, repl$
- into the source in that position. If repl$ is an empty
- string, then the nett effect of REPLACE$() is to remove a
- substring from a parent string. If repl$ is empty, then
- str$ will be terminated at position start.
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 88 -
-
-
- Note that all string indexing numbers (such as the start
- parameter above) are zero based, meaning that the first
- character is as position zero, not at position one as is the
- default in some other computer languages.
-
- Returns: A string
-
- Example: a$:=REPLACE$("Hello",0,2,"Ha") Assigns the string
- "Hallo" to the variable a$. It removes two characters from
- the string "Hello", starting at position 0, giving "llo" and
- inserts the string "Ha" at position 0 to give the final
- string "Hallo".
-
- ---------------------------------------------------------------------
-
- RIGHT$(str$, number)
-
- Returns the rightmost number of characters from the string
- str$.
-
- Returns: A string
-
- See also: LEFT$ MID$
-
- Example: a$:=RIGHT$("Hello",2)
-
- Assigns the string "lo" to the variable a$.
-
- ---------------------------------------------------------------------
- ROUND(number, places)
-
- Truncates the first parameter to the number of specified
- places of decimals, or if places is negative, the output
- will be to that number of significant digits.
-
- Returns: A number
-
- See also: FLOOR CEIL
-
- Example: num:=ROUND(1.546,2)
-
- Assigns num to be 1.55
-
- Example: num:=ROUND(213.2,-1)
-
- Assigns num to be 210.0
-
- ---------------------------------------------------------------------
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 89 -
-
-
- SEED(Value)
-
- Sets the seed for the pseudo-random number generator in
- RExL. This is set, by default, at the start of an
- application to a constant value (resulting in a repeatable
- array of random numbers), but you can make your seed more
- random by using some function of date and time. Value must
- be in the range of 0 to 65535.
-
- Returns: True
-
- See also: RAND
-
- Example: SEED((DTminuteno()+DTsecondno())*65535/120)
-
- This expression randomly assign the seed value to
- one of 120 different values.
-
- ---------------------------------------------------------------------
-
- SIN(angle)
-
- Calculates the sine of the angle angle, measured in radians.
-
- Returns: A number
-
- See also: COS TAN RAD DEG
-
- Example: value:=SIN(0.5)
-
- Assigns the value 0.4794255386 to the variable
- value.
-
- ---------------------------------------------------------------------
-
- SLN(cost, salvage, life)
-
- Calculates the straight line, or constant, depreciation
- allowance of an asset per period. The first parameter
- specifies the initial cost, the second, the salvage value at
- the end of the item's life and the third parameter gives the
- expected life of the item.
-
- Returns: A number
-
- Example: depr:=SLN(5000,1500,5)
-
- Assigns 700 to the variable depr.
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 90 -
-
-
- ---------------------------------------------------------------------
-
- SOUNDEX$(string)
-
- SOUNDEX$() calculates the soundex code of the string
- parameter. The soundex code of a string is a four character
- string, having an initial letter (equal to that of the
- source string) followed by a three digit code, which codes
- for the phonetic value of that string.
-
- SOUNDEX$() is most usually used in conjunction with database
- applications, where the precise spelling of search keys is
- not known, or where there is an significant chance of
- misspelling of a search key.
-
- Returns: A four letter string
-
- Example: search1$:=SOUNDEX$("smith")
-
- Example: search2$:=SOUNDEX$("smythe")
-
- Both search1$ and search2$ are assigned the value
- of "S530", the soundex code of both strings.
-
- ---------------------------------------------------------------------
-
- SQRT(number)
-
- Calculates the square root of a number. The number must be
- zero or greater as the square root of a negative number is
- undefined.
-
- Returns: A positive number
-
- Example: num:=SQRT(9)
-
- Assigns the value 3 to the variable num.
-
- ---------------------------------------------------------------------
-
- STRING$(number, width, places)
-
- Returns number converted to a string of the specified width
- and number of decimal places. The width must also include
- space for a decimal point and minus sign. If the width is
- larger than the resulting number then it will be right
- justified. If width is less than it then the string will be
- truncated. If the width is zero, the number will be
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 91 -
-
-
- converted to the format most suitable, that is omitting the
- decimal point and fraction if none exists or inserting an
- exponent if the number is too large for normal display.
-
- Returns: A string
-
- Example: num$:=STRING$(-5.2,4,1) This will assign the
- string "-5.2" to the variable num$.
-
- ---------------------------------------------------------------------
-
- SUFFIX$(num)
-
- SUFFIX$() returns the parameter as a string, with the
- appropriate
-
- numeric suffix added. This function is most useful when
- applied to dates.
-
- Returns: A string
-
- Example: a$:=SUFFIX$(12)
-
- Returns the string "12th" to the variable a$
-
- ---------------------------------------------------------------------
-
- SYD(cost, salvage, life, period)
-
- Calculates the sum of the year's depreciation allowance of
- an asset for a specified of period, given the original cost,
- the salvage value at the end of its life of life periods.
- The life is measured in the same units as periods and it
- typically the number of years of expected life.
-
- Returns: A number
-
- Example: x:=SYD(1000,100,9,3)
-
- Returns the value 140 to the variable x.
-
- ---------------------------------------------------------------------
-
- TAN(angle)
-
- Calculates the trigonometrical tangent of an angle, where
- the angle is measured in radians.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 92 -
-
-
- Returns: A number
-
- Example: value:=TAN(0.5)
-
- This will assign the value 0.5463024898 to the
- variable value.
-
- ---------------------------------------------------------------------
-
- TERM(pmt, rate, fv)
-
- TERM() calculates and returns the number of periods of
- payment, each payment of amount pmt needed to reach fv at a
- periodic interest rate, rate. The rate parameter should be
- expressed as a decimal fraction, the percentage divided by
- 100.
-
- Returns: A number
-
- Example: num:=TERM(50,0.15,5000)
-
- Assigns the value 19.837 to the variable num.
-
- ---------------------------------------------------------------------
-
- TRIM$(str$,trimtype)
-
- TRIM$() returns the string parameter str$ with spaces
- removed from it, according to the numeric parameter. Legal
- values for trimtype are as follows:
-
- trimtype Meaning
- 0 Remove spaces from both ends of the string
- 1 Remove spaces from the right end only
- 2 Remove spaces from the left end only
-
- Returns: A string
-
- Example: a$:=TRIM$(" <-> ",0)
-
- Returns the string "<->" to a$.
-
- Example: a$:=TRIM$(" <-> ",1)
-
- Returns the string " <->" to a$.
-
- Example: a$:=TRIM$(" <-> ",2)
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 93 -
-
-
- Returns the string "<-> " to a$.
-
- ---------------------------------------------------------------------
-
- TRUE()
-
- Returns the value True. If you place this as the first and
- only line of a OR condition in a rule, then that rule will
- always evaluate to True.
-
- Returns: True
-
- See also: FALSE
-
- Example: TRUE()
-
- ---------------------------------------------------------------------
-
- UPPER$(string$)
-
- UPPER$() returns the parameter string in upper case.
- European accented characters are not translated by this
- function.
-
- Returns: A string
-
- See also: LOWER$
-
- Example: a$:=UPPER$("hello")
-
- Returns the string "HELLO" to a$.
-
- ---------------------------------------------------------------------
-
- VALUE(number$)
-
- VALUE() converts a string, number$, to a number. It returns
- the converted number if successful or 0 if there was an
- error. number$ may contain exponents using the e+99 format.
-
- Returns: True if successful, False otherwise
-
- Example: num:=VALUE("5.23")
-
- Assigns a value of 5.23 to the variable num
-
- ---------------------------------------------------------------------
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 94 -
-
-
- VERSION()
-
- Returns the version number of RExL under which the
- application is running.
-
- Returns: A number
-
- Example: ver:=VERSION()
-
- Sets the variable ver to be x.yy where x is the
- major version number and yy is the minor version number.
-
- ---------------------------------------------------------------------
-
- XOR(log1,log2)
-
- XOR() performs a logical exclusive-or upon the two logical
- parameters passed to the function. The function returns True
- if the two parameters are of different logical values, and
- False otherwise.
-
- Returns: A number
-
- See also: AND NOT EQV OR IMP
-
- Example: val:=XOR(TRUE(),FALSE())
-
- Returns False to to the variable val.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 95 -
-
-
-
-
-
-
-
-
- Chapter 4
-
- Keystroke reference
-
-
- 4.1 Editor keystrokes
-
-
- Table 4.1: Cursor movement keys
-
- <F1> Context sensitive help
- <Left> Move one character left
- <Right> Move one character right
- <Home> Move to start of input
- <End> Move to end of input
- <Ctrl-Left> Move to previous word
- <Ctrl-Right> Move to next word
- <Backspace> Delete character to left
- <Del> Delete character to right
- <Shift-Enter> Place string in scrap
- <Shift-Ins> Paste string from scrap
- <Ctrl-U> Undo changes to string
- <Scroll-Lock> Move window (if applicable)
- <Alt-Equals> Toggle macro recording
- <Alt-Minus> Select playback macro
-
- Table 4.2: Hilite bar movement keys
-
- <Up>, <Down> Move one line up and down
- <PgUp> Move up 20 lines
- <PgDn> Move down 20 lines
- <Ctrl-Home> Move to top of screen
- <Ctrl-End> Move to end of screen
- <Ctrl-PgUp> Move to to of rule
- <Tab> Expand rule definition
- <Shift-Tab> Contract rule definition
- <Alt-D>, <Ctrl-Y> Delete line
- <Alt-B> Insert blank line
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 96 -
-
-
- Table 4.3: Modifier keys
-
- <Ctrl-E>,<F4> Start expression
- <F10> Select screen type
- <Ctrl-O> Make rule one-pass
- <Ctrl-M> Toggle [Multi]
- <Ctrl-S> Toggle [Single]
- <Ctrl-N> Toggle [Not]
- <Ctrl-W> Toggle [While]
- <Ctrl-B> Toggle [BackTo]
- <Ctrl-Z> Toggle [Zap]
-
- Table 4.4: Editor list keys
-
- <Alt-Z>,<Shift-F2> Rule list
- <Ctrl-R> Rule reference list
- <Tab> Expand and enter rule
- <Alt-S>, <Shift-F3> Screen list
- <Ctrl-S> Screen reference list
- <Tab> Locate and position at 1st occurrence
- <Alt-U>, <Shift-F4> Unused rule list
- <Tab> Enter rule definition
- <Ctrl-Y>, <Del>, <Alt-D> Delete rule
- <Shift-F5> Unused screen list
- <Ctrl-Y>, <Del>,<Alt-D> Delete screen from file
- <Alt-V>, <Shift-F6> Variable list
- <Ctrl-R> Variable rule-ref list
- <Tab> Alter array dimensions
- <Ctrl-F,<Shift-F7> Function list
-
- Table 4.5: Editor miscellaneous keys
-
- <Alt-X> Quit editor
- <Alt-G> Graphic rule display
- <Alt-F5> Show user screen
- <Ctrl-F8> Toggle breakpoint
- <Ctrl-R> Rule reference
- <F2> Save application
- <F3> Load new application
- <F9> Debug application
- <Ctrl-F9> Run application (no debugger)
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 97 -
-
-
- 4.2 Screen designer keystrokes
-
-
- Table 4.6: Screen designer movement keys
-
- <Tab> ten characters right
- <Shift-Tab> ten characters left
- <Left> one characters left
- <Right> one characters right
- <Up> one characters up
- <Down> one characters down
- <PgUp> to top of screen
- <Ctrl-Home> to top of screen
- <PgDn> to bottom of screen
- <Ctrl-End> to end of screen
- <Ctrl-PgUp> to top left hand corner of screen
- <Ctrl-PgDn> to top left hand corner of screen
- <Home> to left of screen
- <End> to right of screen
- <Ctrl-Right> one word right
- <Ctrl-Left> one word left
- <Enter> next line, to right of nearest box if possible
- <Del> Delete character to right
- <Backspace> Delete character to left
-
- Table 4.7: Screen designer field definition keys
-
- <Alt-F> Display expression attached to hilited field
- <Ctrl-M> Define menu field
- <Ctrl-T> Define toggle list field
- <Ctrl-R> Define radio button field
- <Ctrl-O> Define output field
- <Ctrl-I> Define input field
- <Ctrl-F> Define new field $ Field control menu
- <Ctrl-C> Define check box field
- <F10> Edit field expression
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 98 -
-
-
- Table 4.8: Screen designer line draw keys
-
- <Space>, <Right> One character right
- <Left> One character left
- <Down> One line down
- <Up> One line up
- <Enter>, <Esc> End line draw
- <Del> Toggle delete mode
- <Alt-1> Force horizontal emphasis to one line
- <Alt-2> Force horizontal emphasis to two lines
- <Alt-3> Force vertical emphasis to one line
- <Alt-4> Force vertical emphasis to two lines
-
- Table 4.9: Screen designer miscellaneous keys
-
- <Alt-M> Begin block mark
- <F7> Begin block mark
- <Ctrl-S> Show screen designer status
- <Ctrl-Y> Delete characters & fields on line
- Second time, delete entire line
- <F2> Save screen
- <F3> Load new screen
- <Alt-X> Exit from screen designer
- <Esc> Exit from screen designer
- <Alt-V>, <Shift-F6> Variable list
- <Alt-Z>, <Shift-F2> Rule list
- <Alt-S>, <Shift-F3> Screen list
- <Alt-L> Enter line draw mode
- <Alt-D> Delete hilited field
- <Alt-T> Toggle flash-intensity
- <Alt-R> Remark last block
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 99 -
-
-
- Table 4.10: Screen designer block mark keys
-
- <End> Extend block mark to right of screen
- <Home> Extend block mark to left of screen
- <PgDn>, <Ctrl-End> Extend block mark to bottom of screen
- <PgUp>, <Ctrl-Home> Extend block mark to top of screen
- <Ctrl-PgDn> Extend block mark to bottom-right of screen
- <Ctrl-PgUp> Extend block mark to top-left of screen
- <Up> Extend block mark one line up
- <Down> Extend block mark one line down
- <Right> Extend block mark one line right
- <Left> Extend block mark one line left
- <Tab> Extend block mark ten characters right
- <Shift-Tab> Extend block mark ten characters left
- <F8>, <Enter>, <Alt-M> Select marked block
- <Esc> Terminate block mark
- <Alt-D>, <Ctrl-Y>, <Del> Delete marked block
- <Alt-B> Draw box in marked block
-
-
- 4.3 Debugger keystrokes
-
-
- Table 4.11: Debugger hilite bar movement keys
-
- <Tab> Expand rule definition
- <Shift-Tab> Contract rule definition
- <Left> Move cursor left one character
- <Right> Move cursor right one character
- <PgUp> Move up 20 lines
- <PgDn> Move down 20 lines
- <Up> Move up one line
- <Enter> Move down one line
- <Down> Move down one line
- <Ctrl-Home> Move to top of screen
- <Ctrl-End> Move to end of screen
- <Ctrl-PgUp> Move to top of rule
-
- Table 4.12: Debugger list keys
-
- <Alt-Z>, <Shift-F2> Rule list
- <Tab> Expand rule definition
- <Alt-S>, <Shift-F3> Screen list
- <Alt-U, <Shift-F4> Unused rule list
- <Shift-F5> Unused screen list
- <Alt-V>, <Shift-F6> Variable list
- <Ctrl-F>, <Shift-F7> Function list
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 100 -
-
-
- Table 4.13: Debugger miscellaneous keys
-
- <Alt-X> Quit debugger
- <Alt-F5> Show user screen
- <Ctrl-E>, <Ctrl-F4> Evaluate expression
- <Ctrl-W>, <Ctrl-F7> Add watch
- <Alt-F7> Animate debugger
- <F4> Execute to cursor
- <F5> Expand debugger window
- <F6> Toggle windows
- <F7> Trace execution
- <F8> Step execution
- <F9> Run program
- <Ctrl-F9> Remove all breakpoints and run program
- <Ctrl-F8> Toggle breakpoint
- <Space> Trace execution
- <Ctrl-O> Return cursor to origin
- <Alt-Equals> Toggle macro recording
- <Alt-Minus> Select playback macro
- <Alt-D>, <Ctrl-Break> Pass control to debugger
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 102 -
-
-
- Table 4.14: KB function return values
-
- <Backspace> 8 <Left> 331 <Alt-4> 379
- <Tab> 9 <Right> 333 <Alt-5> 380
- <Enter> 13 <End> 335 <Alt-6> 381
- <Esc> 27 <Down> 336 <Alt-7> 382
- <Shift-Tab> 271 <PgDn> 337 <Alt-8> 383
- <Alt-Q> 272 <Del> 339 <Alt-9> 384
- <Alt-W> 273 <Shift-F1> 340 <Alt-0> 385
- <Alt-E> 274 <Shift-F2> 341 <Alt-Minus> 386
- <Alt-R> 275 <Shift-F3> 342 <Alt-Equals> 387
- <Alt-T> 276 <Shift-F4> 343 <Ctrl-PgUp> 388
- <Alt-Y> 277 <Shift-F5> 344 <Shift-Insert> 500
- <Alt-U> 278 <Shift-F6> 345 <Shift-End> 501
- <Alt-I> 279 <Shift-F7> 346 <Shift-Down> 502
- <Alt-O> 280 <Shift-F8> 347 <Shift-PgDn> 503
- <Alt-P> 281 <Shift-F9> 348 <Shift-Left> 504
- <Alt-A> 286 <Shift-F10> 349 <Shift-Right> 506
- <Alt-S> 287 <Ctrl-F1> 350 <Shift-Home> 507
- <Alt-D> 288 <Ctrl-F2> 351 <Shift-Up> 508
- <Alt-F> 289 <Ctrl-F3> 352 <Shift-PgUp> 509
- <Alt-G> 290 <Ctrl-F4> 353 <Shift-Enter> 510
- <Alt-H> 291 <Ctrl-F5> 354 <Ctrl-A> 601
- <Alt-J> 292 <Ctrl-F6> 355 <Ctrl-B> 602
- <Alt-K> 293 <Ctrl-F7> 356 <Ctrl-C> 603
- <Alt-L> 294 <Ctrl-F8> 357 <Ctrl-D> 604
- <Alt-Z> 300 <Ctrl-F9> 358 <Ctrl-E> 605
- <Alt-X> 301 <Ctrl-F10> 359 <Ctrl-F> 606
- <Alt-C> 302 <Alt-F1> 360 <Ctrl-G> 607
- <Alt-V> 303 <Alt-F2> 361 <Ctrl-J> 610
- <Alt-B> 304 <Alt-F3> 362 <Ctrl-K> 611
- <Alt-N> 305 <Alt-F4> 363 <Ctrl-L> 612
- <Alt-M> 306 <Alt-F5> 364 <Ctrl-N> 614
- <F1> 315 <Alt-F6> 365 <Ctrl-O> 615
- <F2> 316 <Alt-F7> 366 <Ctrl-P> 616
- <F3> 317 <Alt-F8> 367 <Ctrl-Q> 617
- <F4> 318 <Alt-F9> 368 <Ctrl-R> 618
- <F5> 319 <Alt-F10> 369 <Ctrl-S> 619
- <F6> 320 <Ctrl-Left> 371 <Ctrl-T> 620
- <F7> 321 <Ctrl-Right> 372 <Ctrl-U> 621
- <F8> 322 <Ctrl-End> 373 <Ctrl-V> 622
- <F9> 323 <Ctrl-PgDn> 374 <Ctrl-W> 623
- <F10> 324 <Ctrl-Home> 375 <Ctrl-X> 624
- <Home> 327 <Alt-1> 376 <Ctrl-Y> 625
- <Up> 328 <Alt-2> 377 <Ctrl-Z> 626
- <PgUp> 329 <Alt-3> 378 <Ctrl-Enter> 700
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 103 -
-
-
-
-
-
-
-
-
- Chapter 5
-
- Error Messages
-
-
- 5.1 Error messages common to runtime and editor
-
-
- 5.1.1 Bad help file format
-
- The help file has become corrupted somehow. The only way to
- remove this error is to restore a copy of the help file from
- the distribution disks, or archive file which you received
- your copy of RExL in.
-
- 5.1.2 Cannot locate system
-
- RExL cannot shell to DOS because it cannot locate the system
- files which are required. This is most likely to be caused
- by the COMSPEC environment variable set incorrectly. It
- should contain the name, directory and drive of your main
- command processor. Try issuing the following DOS command
- from the normal DOS prompt, if none of the above makes
- sense.
-
- set comspec=c:\command.com
-
- 5.1.3 Cannot open print file
-
- RExL is unable to open the file which was specified instead
- of the printer. Generally, this is caused by running out of
- file handles. This condition can be rectified by placing
- the following line in your CONFIG.SYS file:
-
- files=20
-
- 5.1.4 Couldn't open file
-
- RExL is unable to open some file. Generally, this is caused
- by running out of file handles. This condition can be
- rectified by placing the following line in your CONFIG.SYS
- file:
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 104 -
-
-
- files=20
-
- 5.1.5 Macros nested too deep (20=max)
-
- You're most unlikely to encounter this error. It indicates
- that you are trying to execute a macro from within a macro
- from within a macro etc, to a level of twenty deep, the
- maximum allowable.
-
- 5.1.6 Help file index is not loaded
-
- If RExL was unable to locate the help file, this error
- message will be displayed if any of the help keys are
- pressed.
-
- 5.1.7 Unable to locate help file
-
- When the editor starts up, it preloads a portion of the help
- file to allow more rapid access to the information in it.
- If the editor is not able to locate the help file in the in
- the current directory or the or list of directories
- specified in the REXL environment variable, then it will
- isue this error message.
-
- Automatic preloading can be disabled by setting the
- Options|Help menu option to slow.
-
- 5.1.8 Macro recursion not allowed
-
- RExL will not allow a macro being defined to call a macro
- which in turn executes the keystroke which is being defined.
- This is to prevent infinite recursion of the macro facility.
-
- 5.1.9 Error loading configuration file
-
- The RExL configuration file REXL.CFG in the current
- directory is invalid or could not be loaded for some reason.
- The configuration file format changes from version to
- version, so this error may appear if you run a new version
- of RExL without deleting the old configuration file. If
- this occursm, just ignore the error and it won't re-appear.
-
- 5.1.10 Zero memory allocation request!
-
- For some reason, a zero length request has been made to the
- memory allocator. This should never occur, thus indicating
- a bug if it does. Note down the exact circumstances in
- which the error occurred and report it to us.
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 105 -
-
-
- 5.1.11 Not enough memory to perform selected operation
-
- There is not enough memory available for RExL to do whatever
- you just asked it to. If you have any TSR programs loaded
- in memory, then unload them, re-enter RExL and try again.
-
- 5.1.12 This window is not movable
-
- You have just tried to move a window which is not movable.
- Generally, the only unmovable windows are the system menus.
-
- 5.1.13 No directories available
-
- RExL is unable to locate any directories in the current
- directory for the File|Change directory menu. This warning
- only occurs if you are in the root directory of a drive
- which has no subdirectories.
-
- 5.1.14 No files in directory
-
- This error in a file selection menu if the specified drive
- and directory do not contain any directories nor files
- matching the stipulated file specification.
-
- 5.1.15 No macros defined
-
- The Options|Save macro file menu option has been chosen but
- there are no macros currently defined in memory to be saved.
-
- 5.1.16 --- Out of memory ---
-
- RExL has run out of memory in some critical operation where
- memory must be present. The best course of action it to
- quit RExL as soon as possible, remove any TSR programs
- resident and to retry.
-
- 5.1.17 No screens defined
-
- You have requested the screen list, but there are no screens
- present to make the list from.
-
- 5.1.18 Not enough memory to load system
-
- The DOS command processor COMMAND.COM requires a certain
- amount of memory to run, depending on the version of DOS.
- If there is not enough memory present then this warning will
- appear.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 106 -
-
-
- 5.1.19 No unused rules available
-
- You have selected the unused rule list, but RExL has
- determined that all rules are used in the listing. Remember
- that recursive rules are taken to be used, irrespective of
- whether they are called by any other rules. When scanning
- for unused rules, RExL also checks the line buffer to locate
- rules, marking them as used if any are present.
-
- 5.1.20 No unused screens available
-
- You have selected the unused screen list, but RExL has
- determined that all screens defined in the current screen
- file are used in the listing. When scanning for unused
- screens, RExL also checks the line buffer to locate screens,
- marking them as used if any are present.
-
- 5.1.21 No variables defined
-
- You have selected the variable list, but RExL has been
- unable to find any variables in its internal list.
-
- 5.1.22 Rule is not used in current listing
-
- RExL has tried and failed to find any references to the rule
- for which you have just requested a reference list. This
- error can occur from the editor window when <Ctrl-R> is
- pressed, or in the rule list, with the same keystroke.
-
- 5.1.23 Error saving configuration file
-
- RExL was unable to save the configuration file, REXL.CFG,
- correctly. If a partial file was saved, then it should be
- deleted since it will generate an error when RExL next
- starts from that directory.
-
- 5.1.24 Screen is not used in current listing
-
- RExL has tried and failed to find any references to the
- screen for which you have just requested a reference list.
- This error can occur in the screen list, when <Ctrl-R> is
- pressed.
-
- 5.1.25 Screen file is corrupt
-
- The screen file has somehow become corrupted and no longer
- can be read by REXL. The only action which can be taken is
- to restore the screen file from your last backup.
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 107 -
-
-
- 5.1.26 Too many files open
-
- RExL has failed when attempting to enter a DOS shell since
- it was unable to open the command processor file because of
- lack of available file handles. Close some files and retry.
-
- 5.1.27 Too many keys in macro (500=max)
-
- RExL can store up to 500 keystrokes in a single macro. This
- error appears if you have attempted to go past this limit.
- If you require that more than 500 keystrokes are to be
- played back, then you should define one macro which does the
- first section and then calls a macro which does those
- remaining.
-
- 5.1.28 Variable is not used in current listing
-
- You have tried to get RExL to generate a variable reference
- list for a variable which does not have any references in
- the listing. Note that RExL does not look in the screen
- file for variables, so that a variable which is apparently
- unused may be present in some screen.
-
- 5.1.29 Wrong source file format
-
- RExL application listing files change format from one
- version to another. This error is generated if you attempt
- to load an application file saved from one version of RExL
- into another version. To transfer listings between
- versions, use the Import|ASCII load and save options.
-
- 5.1.30 Wrong screen file format
-
- The editor has attempted to load an incorrectly formatted
- screen from a screen file. This is usually caused by using
- different versions of RExL. Use the Import|ASCII load and
- save menu options to move applications between different
- versions of RExL.
-
- 5.1.31 Error opening screen file
-
- RExL was unable to open the screen file associated with the
- current application. This is probably due to having too
- many files open. Close some files and try again.
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 108 -
-
-
- 5.2 Error messages unique to editor
-
-
- 5.2.1 Incorrect format in listing file
-
- RExL has found some incorrectly formatted item in the ASCII
- listing file, which it is unable to process. ASCII files
- are not intended for editing with text editors and attempts
- to do so may produce errors such as this one.
-
- 5.2.2 Cannot nest fields
-
- All field types, except menu fields, cannot nest or overlay
- each other.
-
- 5.2.3 Can only delete recursed rule from first level of
- recursion
-
- A rule which is in the rule stack cannot have lines deleted
- from it, since they might corrupt the rule stack and
- possibly crash RExL. This error is generated when an
- attempt is made to delete a block from a recursive rule or
- to delete a line from a recursive rule.
-
- If the line or lines must be deleted, then you should return
- to the root (by pressing <Shift-Tab> repeatedly) and then
- entering the rule by selecting it in the rule list and
- pressing <Tab>.
-
- 5.2.4 Unable to locate runtime module
-
- RExL has tried to run the runtime and debugger module but
- was unable to find it. When searching, RExL first searches
- the current directory, then the directory or directories
- specified by the REXL environment variable, and finally the
- entire DOS path. Only when all of these have been searched
- unsuccessfully, will this error message be displayed.
-
- 5.2.5 Area crosses fields
-
- An attempt has been made to move or copy a block of text and
- fields from one place on the screen to another and in the
- process overlaying some previously defined fields. RExL
- does not allow this and issues this message when it occurs.
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 109 -
-
-
- 5.2.6 Can't have a field of this type in this screen
-
- You have tried to define a field of a type not permitted in
- the current screen. Consult the table in the chapter on
- using the screen designer to find out the valid combinations
- of field type and screen type.
-
- 5.2.7 Illegal array dimension
-
- When entering the size of an array dimension, an invalid
- number was entered. Re-enter the number and try again.
-
- 5.2.8 Maximum number of fields reached
-
- Screens can contain a maximum of 127 fields. Any screen
- which contains more than that amount should be re-designed,
- since the screen updating process may become noticeable on
- slow PC's.
-
- 5.2.9 Memory low, should save now!
-
- The amount of memory available in RExL's memory pool has
- gone below 2,000 bytes. In order to save a listing
- successfully, RExL needs about 1,000 bytes, so saving and
- quitting now would be a good idea.
-
- 5.2.10 Not used in listing
-
- You have tried to enter a rule which is defined, but not
- used, in the current listing.
-
- 5.2.11 This is the main rule and is called to start the kbs
-
- You have attempted to find rule references for the main
- program rule. This is only a diagnostic message.
-
- 5.2.12 Cannot change rule name to one already existing
-
- Normally, RExL allows for and automatically compensates for
- the changing of the name of any rule in an application. It
- does not, however, allow a rule name to be changed to one
- which exists already, since a name conflict would arise. Any
- changes made to the rule name are undone.
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 110 -
-
-
- 5.2.13 This screen already exists
-
- As with rule names previously, it is not possible to change
- the name of a screen to one which already exists. Any
- changes made to the screen name are undone.
-
- 5.2.14 Toggle fields must be more than 5 and less than 75
- characters wide
-
- The width of toggle fields must be between 6 and 74
- characters inclusive.
-
- 5.2.15 Unable to create screen file
-
- RExL was unable to create a screen file to go with the
- current application. This is probably caused either by
- having no disk space left, or by having no file handles
- available.
-
-
- 5.2.16 Error saving file
-
- RExL was, for some reason, unable to save the current
- application to disk successfully. This is probably caused
- either by having no disk space left, or by having no file
- handles available.
-
- 5.2.17 Error loading file
-
- RExL was, for some reason, unable to load an application
- from disk successfully. This is probably caused by having
- no file handles available.
-
- 5.2.18 Error loading screen file
-
- RExL was unable to load the screen file associated with the
- current application.
-
- 5.2.19 Cannot change name of Main Program
-
- It is not possible, in the current version of RExL, to
- change the name of the root rule.
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 111 -
-
-
- 5.3 Error messages unique to runtime-debugger
-
-
- 5.3.1 Array bounds overflow
-
- The runtime module has detected an attempt to access an
- array element beyond the defined bounds of the array. Array
- bounds can be set in the editor from the variable list by
- selecting the array, pressing <Tab> and entering the size of
- the array.
-
- 5.3.2 Can't set a breakpoint here
-
- A breakpoint can only be set on a line which will actually
- be executed. These lines include rules, screens and
- expressions but do not include blank lines.
-
- 5.3.3 Cannot open printer for output
-
- Cannot write to print device
- Cannot close print device ,
-
- The printer device cannot be opened for output, written to
- or closed. If output is directed to the printer, then make
- sure that it is connected and online. Alternatively, if the
- printer destination has been set using the OUTPUT() command,
- then make sure that the filename is valid.
-
- 5.3.4 Cannot find editor
-
- You have run the debugger from the editor or you have passed
- the -e option on the command line, but the debugger is
- unable to locate the editor. The debugger will terminate
- when this message is cleared. When searching for the
- editor, RExL searches the current directory, the directories
- specified in the REXL environment directory and then the
- entire DOS path.
-
- 5.3.5 Divide by zero
-
- Your application has attempted a to divide a numeric
- expression by zero, which is a computationally invalid
- operation.
-
- 5.3.6 String-numeric collision
-
- This error should never occur in normal operation of RExL.
- It indicated that an internal parsing error has occurred
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 112 -
-
-
- during the assignment of some quantity of to another. If
- you receive this error, then contact us.
-
- 5.3.7 Can't have string for radio button parameter
-
- Only numeric variables are valid radio button LValues. This
- error is kept for reasons of compatibility with earlier
- versions of RExL.
-
- 5.3.8 Stack underflow
-
- This error should not occur. It indicated that one of
- RExL's internal stacks (numeric, string or array) has
- underflowed. If you receive this error, then contact us.
-
- 5.3.9 Stack overflow
-
- This error should not occur. It indicated that one of
- RExL's internal stacks (numeric, string or array) has
- overflowed. If you receive this error, then contact us.
-
- 5.3.10 Numeric value out of range
-
- Certain mathematical functions require that their parameters
- be within certain ranges. For example, the LOG() function
- is only defined for values greater than zero, and attempts
- to find logiarithms of numbers less thanor equal to zero
- will generate this error.
-
- 5.3.11 Rule stack overflow
-
- You have tried to recurse beyond the maximum limit of
- recursion. By default, the limit is 100 entries on the
- stack, but it can be increased from within the editor using
- the Options|Rule stack menu option or by specifying the -s
- option on the command line to the debugger.
-
- 5.3.12 Invalid database file handle
-
- An operation involving database file handles has failed
- because an invalid file handle was passed. This error
- generally occurs in expressions using RExL's @variable.field
- construction, when <variable> does not contain a valid
- database file handle.
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 113 -
-
-
- 5.3.13 Unable to allocate rule stack
-
- The runtime and debugger module has been unable to allocate
- enough memory to the runtime stack and consequently will not
- attempt to run the application. Make sure that you're not
- passing some over-large value to the module either on the
- command line, with the -s option, or from within the editor
- using the Options|Rule stack option.
-
- 5.3.14 Math error : Parameter out of range in function XXX
-
- The function XXX has been passed a value which is out of the
- range for which the function is defined. The functions
- which can generate this error are SIN(), COS(), ACOS(),
- ASIN(), TAN(), ATAN(), LOG() and LOG10().
-
- 5.3.15 Math error : Parameter singularity in function XXX
-
- Certain functions, while defined across certain ranges have
- values within the range for which the return value generates
- a singularity. For example, the TAN() function is not
- defined for PI/2 radians and an attempt to calculate this
- value would cause this error to be generated.
-
- 5.3.16 Math error : numeric overflow
-
- You have tried to generate a result greater than the maximum
- value which RExL can cope with, about 2.7E308, absolute.
-
- 5.3.17 Math error : numeric underflow
-
- This error indicates that the result of a calculation has
- underflown and cannot be represented accurately. Generally
- speaking, a numeric underflow will return a zero value.
-
- 5.3.18 Math error : precision loss
-
- This error indicates that a calculation has not been carried
- out to a sufficient degree of accuracy. This generally
- occurs when evaluating functions close to parameter
- singularities.
-
-
- 5.4 Critical Errors
-
-
- These errors occur when some item of hardware attached to
- your PC does not appear to be functioning correctly. These
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 114 -
-
-
- errors are entirely DOS generated and RExL itself can do
- little to rectify them. Like the other error messages
- above, these are trappable using the ERok() function. These
- errors are listed in increasing order of obscurity, with
- errors at the bottom of the list being the most unlikely to
- occur.
-
- 5.4.1 Write protect error
-
- An attempt has been made to write information to a write
- protected disk. Remove the write protect tab and try
- again.
-
- 5.4.2 Drive not ready
-
- The disk drive accessed in the last operation was not ready.
- Make sure that the disk is inserted correctly, is properly
- formatted and can be read from the drive.
-
- 5.4.3 Printer out of paper
-
- The printer device has returned an error code to DOS
- indicating that something was wrong with the printer.
- Possible causes include no paper in the printer, the printer
- being turned off or off line or a paper jam.
-
- 5.4.4 Write fault
-
- DOS has tried to write to some block or character device
- driver but the driver returned an error code, indicating
- that it was unable to perform the operation. When applied
- to printers, it generally means that the printer has run out
- of paper or has been turned off during a print run.
-
- 5.4.5 Read fault
-
- DOS has tried to read from some block or character device
- driver but the driver returned an error code, indicating
- that it was unable to perform the operation.
-
- 5.4.6 General Failure
-
- This is a general purpose catch-all error message, saying
- that something went wrong, but DOS was unable to figure out
- exactly what. When applied to disks, it generally means
- that the disk is not formatted or is not of the correct size
- for the disk drive.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 115 -
-
-
- 5.4.7 Sector not found
-
- This error indicates that a sector on a disk has been found
- to be invalid, probably caused by a corruption of some type
- on the disk in question.
-
- 5.4.8 Unknown unit
-
- A request has been made by DOS to some device which does not
- exist or has not responded.
-
- 5.4.9 Unknown command
-
- An IOCTL request has been made to some block or character
- device driver but the command was not recognised by the
- driver.
-
- 5.4.10 CRC error
-
- The cyclic redundancy check on disk reads and writes has
- failed, indicating a faulty drive or improperly formatted
- disk.
-
- 5.4.11 Bad request structure length
-
- An IOCTL request has been made to some block or character
- device driver but the format of the request structure is
- incorrect.
-
- 5.4.12 Seek error
-
- BIOS was unable to locate the disk sector requested in a DOS
- call.
-
- 5.4.13 Unknown media type
-
- The disk which has just been accessed does not have a valid
- media identifier. This is usually caused by using Unix (and
- other system) formatted floppy disks.
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 116 -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 117 -
-
-
-
-
-
-
-
-
- Chapter 6
-
- Extra Utilities
-
-
- This appendix documents the extra utilities supplied with
- RExL which are only available in the fully registered
- version.
-
-
- 6.1 RExLPC
-
-
- RExLPC is a utility which will combine a RExL application
- image file, its associated screen file and a special stub
- file into a single standalone executable file, suitable for
- distribution. It is provided as a neater alternative to
- RExLRT, described further on in this chapter. Typically,
- RExLRT is used to distribute applications which can be
- modified by the end-user, or may require on-site
- modification by the developer. On the other hand, RExLPC
- can be used to provide a single, faster DOS executable
- application which cannot be decompiled. Backups of the
- original versions of the application must be kept if they
- may need to be modified at a later date
-
- As a rough guide to performance gains, RExL applications
- converted with RExLPC will run code approximately two to
- four times as fast as REXLRD and REXLRT will. Corresponding
- C programs will run about half as fast to twice as fast
- again. For database operations, the speed gain will be
- small because most time is spent within the database code,
- which is common both the stub and the other executables.
-
- RExLPC takes two parameters on the command line, the first
- specifies the RExL application file to be converted, while
- the second parameter specifies the DOS executable file to be
- created. The base stub file REXLSTUB.COD must be accessible
- either through the REXL environment variable or on the DOS
- PATH. While the postfix compiler is running, it posts
- progress reports on the screen, to keep you informed of how
- far it has got. When the compiler finishes, it will
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 118 -
-
-
- generate an executable file as specified by the second
- command line parameter. If an executable file of this name
- exists already, then it will be overwritten. Applications
- should be fully working and debugged when passed through the
- compiler.
-
- The resulting executable file can be copied, distributed and
- run like any other DOS executable.
-
- The process involved in conversion is as follows. Firstly,
- the screen file and application images are loaded as normal
- and the stub file is copied to the specified output
- executable file. Then the postfix compiler module postfix-
- compiles the application and appends the generated code to
- the stub file. Finally, the screen file is postfix compiled
- and then appended to the stub. The resulting executable
- file can be copied, distributed and run like any other DOS
- executable and does not require any of the files (which were
- required to build it) to be present when the program is run.
- As with all other RExL executable files, you should not
- attempt to compress the file with compressors such as
- PKLite, DIET, LZexe and such like because of the nature of
- the files.
-
- Finally, a minor point of incompatibility with RExL: RExLPC
- does not supports the LOAD() function as it exists in RExL,
- because of the different .RXL and .EXE internal formats. In
- the compiled version, the LOAD() function will look for an
- executable file of the same name as the application image
- and load and execute that instead. This seems to be the
- most acceptable solution and will work transparently if
- multiple applications are converted and distributed
- together. If this is not satisfactory, then the OScmd()
- function can be used to run the runtime (or the runtime-
- debugger module), passing it the name of the application to
- run.
-
- For example, the command LOAD("TEST") which, in normal
- circumstances would load an application image file
- "TEST.RXL", would be interpreted by RExLPC as a call to load
- and run the file "TEST.EXE", overlaying the caller
- application (unlike a call to OScmd(), where the application
- regains control when the called program terminates).
- Alternatively, the command OScmd() could be used to run the
- application using a call such as: OScmd("rexlrt test").
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 119 -
-
-
- 6.2 RDU
-
-
- 6.2.1 Introduction
-
- RDU, the RExL Database Utility, is a standalone database
- manager which can be used to manage dBase III+ compatible
- files. It can create and modify database structures, edit
- and browse database files and create and maintain dBase III+
- index files.
-
- RDU is quite simple to operate and is based upon the same
- interface as other RExL programming tools.
-
- 6.2.2 Loading and Running
-
- RDU is loaded by typing RDU at the DOS prompt and needs
- about 180k of DOS memory to run. To start work on a
- database file immediately, rather than having to use the
- menu system to load one, you can simply pass the name of the
- database on the command line. For example, to load and
- start work on a database named "CUSTOMER.DBF", issue the DOS
- command `RDU customer'. The default and necessary extension
- of ".DBF" will be automatically appended for you, so you
- don't need to specify it.
-
- When RDU has loaded, you'll be presented with the main
- screen which is similar to RExL's editor.
-
- There are five pull down menus in RDU which are used to
- control the program. The next five sections will explain
- each menu.
-
- 6.2.3 RDU menu system
-
- 6.2.3.1 File Menu
-
- There are seven options in this menu, based upon those in
- the File Menu of RExL's editor. The options are as follows:
-
- o Use File: When selected, this option pops up a dialog
- box prompting for a database file to open. You can
- either enter a database name directly or press
- <Enter> and select from a list. When a database file
- has been selected, it can be edited using the Edit
- menu.
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 120 -
-
-
- o Use Index: When a database has been opened and
- selected, an index file can be opened, to order the
- contents of the database. When this menu option is
- selected, a file name dialog box appears, prompting
- for an index file to open. As with the Use File
- option, an index name can be entered directly or,
- upon pressing <Enter>, an index file can be selcted
- from a list. If there is no database open, then this
- option cannot be used.
-
- o Remove: This choice allows you to delete a file from
- disk. You may need to do this is you want to save a
- file on disk, but are unable to do so through a lack
- of disk space.
-
- o Change Dir: This option will allow you to change the
- active directory. The format used here is much the
- same as that used in the file name input routine, the
- only differences being that no file names are
- displayed in the list and that the current active
- path (drive name with full directory) will be
- displayed on the status line at the bottom of the
- screen.
-
- o Default Drive: When this option is chosen, a menu
- will pop up displaying the list of available DOS disk
- drives. As with the directory selection above, the
- current active path is displayed on the status
- display line at the bottom of the screen.
-
- o OS Shell: If you want to run a DOS command, but do
- not wish to exit from RDU permanently, choose this
- option to go into a DOS shell. While you are in the
- shell, you should not, under any circumstances, run
- any T$SR programs (such as Sidekick, ScrGrab and so
- forth), since these programs change critical area of
- the computer's memory which may cause it to crash
- unpredictably when you return to RDU. When you are
- finished in the shell, type `exit' at the DOS prompt
- to return.
-
- o Quit: This option terminates RDU and returns you to
- DOS permanently. Since any work done is written to
- the database immediately, there is no `File has been
- changed' type prompt generated when this option is
- selected.
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 121 -
-
-
- 6.2.4 Edit Menu
-
- This six option menu is used to control the editing and
- deletion of information in the database file currently
- selceted. If there is no database file open, then the
- options in this menu may not be used.
-
- The first two options, edit and browse, are used for
- changing and viewing information in the current database and
- are both `variations on a theme'. In either of these modes,
- the fields in the database are displayed on the left hand
- side of the screen and the contents of the fields are
- displayed to the right of the field names.
-
- The <PgUp> and <PgDn> keys are used to move to the next and
- previous records respectively, while <Ctrl-PgUp> moves the
- record pointer to the top of the database and <Ctrl-PgDn>
- moves it to the last record.
-
- If there are more fields in the database than can be fitted
- on the screen, then <Ctrl-Home> moves the first field in the
- database to the top of the screen, while <Ctrl-End> moves
- the last field to the bottom line of the screen.
-
- In browse mode, it is not possible to edit the contents of
- the database and there is therefore no cursor visible.
- Pressing <Up> and <Down> will move increment and decrement
- the top field on the screen, if there are more fields than
- can be fitted, otherwise the keys have no effect in browse
- mode.
-
- In edit mode, <Up> and <Down> move to the previous and next
- fields in the database, scrolling the field list, if needed.
- <Tab> and <Shift-Tab> perform the same action as <Up> and
- <Down>. If <Down> or <Enter> is pressed on the final field
- in the record, when the record pointer is at the final
- record in the database, then the prompt Append records? will
- appear. If the Yes option is selected, then a record will
- be appended to the database and editing will proceed from
- the new record. If the no option is selected, then no record
- will be added.
-
- When editing date fields, the date entered will be displayed
- and must be entered in the format appropriate to the country
- set up on your machine. If a valid date is entered, then it
- will be silently converted to a dBase date and written to
- the database file. RDU will not allow you to enter an
- invalid date.
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 122 -
-
-
- Logical fields are one character wide and treat values of Y,
- y, T and t as true and all other characters as false. True
- values are stored as Y and false values as N in the
- database.
-
- Character fields may be from 1 to 255 characters wide. If
- the field width of the field being edited is greater than 67
- characters, then a small arrow will be displayed before the
- start of the edit area. The arrow can be one of three
- characters, depending on whether the edit area extends to
- the left of the currently displayed area (uses ASCII
- character 27), whether it extends on both sides (uses ASCII
- character 29), or whether it extends to the left (uses ascii
- character 26).
-
- Any changes made to the database file are written to the
- file immediately.
-
- The six options in the Edit menu are as follows:
-
- o Edit record: Enters RDU's record editing facility,
- as described above.
-
- o Browse record: Enters RDU's record display facility,
- as described above. The contents of the database
- cannot be changed when using this mode.
-
- o Delete record: This option will set the delete flag
- of the current record. Because this option is
- relatively common, the <Alt-D> keystroke can be used
- to toggle this flag. Note that when a record is
- marked for deletion, it is not physically removed
- from the database.
-
- o Recall deleted record: This option clears the delete
- flag for the current record in the current database.
- <Alt-D> can be used to clear the delete flag on a
- record, if it has been set.
-
- o Pack database: All records marked for deletion in a
- database will be removed when it is packed. After
- this operation, the records cannot be recalled from
- deletion using the Recall menu option.
-
- o Zap database: This menu option permanently removes
- all records in a database. As with packing, the
- records cannot be retrieved afterward.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 123 -
-
-
- 6.2.5 Search Menu
-
- The search menu is used for searching for and locating
- information in database files. There are three options in
- this menu:
-
- o Locate string: This option is used to search for an
- occurrence of a string within a field in the current
- database.
-
- When the option is chosen, a menu will pop up
- containing the names of all the fields in the current
- database. The field selected here will be the one
- searched in during the searching operation. Once a
- field has been selected, a dialog box will appear
- prompting for a string to locate. The dialog input
- area will be as wide as the field being searched in.
-
- When a search string has been entered, the record
- pointer will be reset to the top of the file and
- searching will begin from there. If a match is
- found, then the matching record will be displayed and
- a prompt box will appear, asking whether the search
- should continue from that location to try to find
- another occurrence of the string.
-
- The record counter in the bottom right of the screen
- is constantly updated during the search to keep you
- informed of its progress.
-
- o Seek string: This option is used to seek for a key
- string in an index file. When selected, a dialog box
- appears, prompting for a string to seek for.
-
- If the seek is successful, then the record pointer
- wil be placed at the record whose key expression
- matches that entered. If it is unsuccessful, then an
- error message will be displayed.
-
- Since records are in index order when an index file
- is open, you will not be prompted to continue the
- seek when it has successfully found something.
-
- o Go to record: This option will prompt for a record
- number to jump to. If the record number specified is
- less than 1 or greater than the number of records in
- the database, then no action will be taken.
- Otherwise, the record pointer will be set to the
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 124 -
-
-
- specified record number. The record number is not
- dependant on any index files open.
-
- 6.2.6 Utilities Menu
-
- This menu has six options as follows:
-
- o Create database: This option is used to create
- database structures. When it is first chosen, a
- dialog box appears prompting for a file name to call
- the structure which is about to be created. When one
- has been entered the creation of the structure
- begins.
-
- o The structure creation box has four columns in it.
- The first is for field names, the second for field
- types, the third for field widths and the final
- column for field decimal places.
-
- o For logical and date fields, the field width is fixed
- at one and eight characters respectively, with no
- decimal places. The dialog will not allow figures to
- be entered in the final two columns for these two
- field types. Similarly, it is not possible to enter
- decimal field widths for character fields. RDU will
- not allow duplicate field names to exist in a file,
- displaying an error if this is attempted.
-
- o The keystrokes used are as follows:
-
- Table 6.1: Keystrokes in structure create
-
- <Shift-Tab> Go to previous input area in field
- <Tab> Go to next input area in field
- <Enter> Go to next input area, creating field
- if already on last input area
- <Up> Go to same input area in field above
- <Down> Go to same input area in field below
- <Alt-D> Delete field definition
-
- o The field type can be toggled by pressing <Space>.
- Alternatively, pressing the field type letter will
- set the type: `C' for character fields, `D' for date
- fields, `N' for numeric fields and `L' for logical
- fields.
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 125 -
-
-
- o When the field definitions have been created, move to
- the final field in the structure and press <Enter> to
- create the strucure on disk.
-
- o Once the structure has been created, the File/Use
- database menu options can be used to open and select
- the file just created.
-
- o Modify structure This choice operates in exactly the
- same way as the previous option for creating database
- files. The structure of the current database will be
- placed in the database creation box where it can be
- modified using the same keystrokes as before.
-
- o If the type of a field is changed, then RDU will do
- its best to preserve the contents of the field. In
- particular, date fields converted to numeric fields
- will have their contents changed to Julian day
- numbers, used elsewhere in RExL, while numeric fields
- (changed to date fields) will be assumed to hold
- Julian day numbers and processed accordingly.
-
- o If the width of any field is reduced, then the
- contents will be truncated to fit. If numbers in
- numeric fields no longer fit, then they will be
- replaced with asterisks.
-
- o When the desired changes have been made to the file,
- press <Enter> on the empty field at the end of the
- list to make the changes permanent.
-
- o Create index: This choice is used to create an index
- file for the database which is currently open. When
- this menu option is selected, you will be prompted to
- enter an index key expression, which may contain any
- of the dBase III functions supported in RExL and the
- fields in the current database. As an aid-de-
- memoire, <F10> lists the fields in the database while
- <Ctrl-F> can be used to list the functions available
- to you. If the expression entered is not valid, then
- an error will be generated.
-
- o When a syntactically valid index key expression has
- been entered, you will be prompted for a DOS file
- name to save the index file under. If one is entered,
- then index generation will proceed.
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 126 -
-
-
- o While the index file is being generated, its progress
- will be displayed in a progress box in the center of
- the screen. Because of the method used for
- generation of index files, sorting may be slow if the
- file is already in order, however, if the file is not
- sorted, then the index will be generated very
- rapidly.
-
- o Reindex: This option will reindex an index file.
- This operation may need to be carried out if a
- database file has been modified while its associated
- index file was closed. If there is no database file
- or index file open, then this option performs no
- action.
-
- o Statistics: This option displays statistics about
- the database and index files currently open. The
- first line displays the name of the current database,
- the second displays the name of the current index
- file, if one is open.
-
- o The third and fourth lines show the number of fields
- and records, respectively, in the database. The fifth
- line displays the date of the last update to the
- database file, while the final line shows the size of
- the database header record.
-
- o Field list: This option lists the fields in the
- current database. The display format is exactly the
- same as in the database create option above, with
- field names in the first column, types in the second,
- widths in the third and decimal places in the fourth.
-
- 6.2.7 Options Menu
-
- This menu is fundamentally the same as that in the editor.
- It has five options as follows:
-
- o Load macros: Any macro definitions you define may be
- saved to disk for later retrieval using this menu
- option. The macro file format is constant across the
- RExL product range, so that macros defined in the
- editor may be used in the debugger or in the database
- manager and so on. Macros are explained in more
- detail at the start of the chapter on the editor.
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 127 -
-
-
- o Save macros: This option allows you to save macros
- which can then be reloaded at some future time using
- the load option above.
-
- o Beep off: By default, RExL beeps whenever it
- encounters an error. This beeping can be toggled on
- and off by selecting this option.
-
- o Exploding windows In its normal state, all windows in
- RExL open instantaneously upon activation. This
- option can be used to make windows `grow' to full
- size on the screen. This is only a visual effect and
- has no effect upon the application.
-
- o Case sensitivity: By default, all database indexes
- and searches are carried out with case sensitivity
- on, to follow the dBase convention. However, this is
- contrary to the case-insensitivity in the rest of
- RExL. If dBase compatibility is not required, then
- the case sensitivity may be turned off. Note that
- the case-sensitivity feature only affects the
- generation of index files.
-
-
- 6.3 RExLRD
-
-
- RExLRD is the combined runtime and debugger module for the
- RExL programming environment and is called by the editor
- whenever the application is run. RExLRD uses the following
- command line syntax:
-
- RExLRD [-d] [-k] [-e] <filename.rxl>
-
- The options are used as follows:
-
- o -d:
- The `d' parameter will cause the debugger to start up
- in debug mode, as if the user had pressed <Alt-D>
- during loading of the application. This switch is
- passed invisibly by the editor to the debugger
- whenever the debugger is called via the Debug
- application option in the Run menu in the editor.
-
- o -e:
- The `e' option will return control to the editor when
- the debugger terminates. Whenever the editor calls
- the debugger, this option is silently passed to the
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 128 -
-
-
- debugger, so that the debugger will return to the
- editor when it terminates.
-
- o -k:
- This `k' option is used to tell the runtime module
- not to watch out for the two keystrokes of <Alt-D>
- and <Esc>, which are normally monitored. (<Alt-D>
- will interrupt the run module and relinquish control
- to the debugger while pressing <Esc> twice will
- terminate the application.)
-
- o -l:
- This `l' option is used to tell the runtime module
- that it is running on an LCD display. If you are
- running the debugger from the editor, then this
- option will be passed automatically, but if you are
- running it from the DOS command line, then you need
- to include it specifically.
-
- o -s:
- This `s' option is used to set the size of the
- runtime stack to be used when executing the
- application. Be default the size is 100 stack
- entries, but if your application uses recursion then
- this value should be increased. If you need as much
- memory as posible, then this value may be reduced:
- Each stack entry requires eight bytes of permanent
- storage. The required stack size is placed after the
- `s'. For example, to set a stack size of 30 entries,
- the command line option `-s30' should be passed.
-
-
- 6.4 RExLRT
-
-
- RExLRT is the runtime module of the RExL programming
- environment. If it used for running the systems written in
- RExL. It is about one-third smaller than the combined
- runtime-debugger module and it runs applications about 10%
- to 15% faster. The command line syntax for RExLRT is
- identical to that for the debugger, with the only difference
- being that <Alt-D> does not pass control to the debugger,
- since there is none.
-
- RExLRT is used in preference to the executable file
- generator, RExLPC described earlier, when it is necessary to
- have separate application image, screen and executable
- files. Typically, this program is used to distribute
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 129 -
-
-
- unfinished applications which may require on-site
- modifications.
-
- Note also, that REXLRT supports the LOAD() function call,
- whereas RExLPC does not, because of the differing internal
- formats.
-
-
- 6.5 ScrList
-
-
- ScrList lists the contents of screen files and outputs the
- contents to the standard output device, usually the monitor.
- The format of the output file listing is as follows:
-
- The block number of every block in the screen file is
- printed first, immediately followed by a colon. If the
- block is in use as a screen, then the screen name will be
- printed surrounded by quotes. If the block is not in use,
- then the message (Block is not used) will be displayed.
-
- The next line displays the position and size of the block in
- the screen file in the format [x,y]->[x+w,y+h] where the
- screen was originally saved from position (x,y) with a block
- width and height of w and h respectively. The number of
- fields defined in the block follows next.
-
- The rest of the line is concerned with internal information:
- bsz is the size of the current block, ofs is the offset of
- the block within the screen file while fsz is the size of
- the block used up by the screen, the difference between bsz
- and fsz being unused. As an integrity check, the sum of the
- current block's offset and block size should equal the next
- blocks offset.
-
- The remaining lines in a screen's list display the fields
- defined in the screen. Firstly, the type of the field is
- listed, followed by a colon and the position and dimensions
- of the field, in the format of (x,y) [w,h], where the
- symbols have their usual meanings.
-
- If the field is a menu field, then ScrList will move to the
- next field immediately. Otherwise, the expression
- associated with the field is displayed, enclosed in square
- brackets. Note that since the screen file itself contains
- no variable name information, the names of variables in
- expressions cannot be determined and they are therefore
- displayed as variable reference numbers, immediately
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 130 -
-
-
- preceded by a hash # symbol. If you require a listing of
- the expressions attached to all the fields in your
- application, then use the `Import/Save ASCII' option in the
- editor. If the field is a toggle list, then the different
- options in the list will be displayed on the following
- lines, again enclosed in square brackets.
-
- The following is an extract from a typical example of the
- output from ScrList showing all the salient features:
-
- 6:"Is Data ok?"
- [28,11]- [51,17] - 3 fields (fsz: 221, ofs: 2395,
- bsz:221)
- Menu : (24, 4) [21x 1] : [#1]
- MArea : (35,14) [ 7x 1]
- MArea : (35,15) [ 7x 1]
- 7:"Enter Names and Question 1"
- [ 0, 0]- [79,24] - 7 fields (fsz: 901, ofs: 2616, bsz:
- 901)
- Input : (24, 4) [21x 1] : [#2]
- Input : (24, 5) [ 9x 1] : [#3]
- Toggle: (24, 6) [15x 1] : [#4]
- [Civil Eng]
- [Science]
- [Electrical]
- [Mechanical]
- [Agriculture]
- Input : (24, 7) [11x 1] : [#5]
- Input : (18,13) [ 1x 1] : [#0[1,1]]
- Check : (18,14) [ 3x 1] : [#6]
- Radio : (18,15) [ 3x 4] : [#7]
-
-
- 6.6 ScrGrab
-
-
- ScrGrab is a terminate and stay resident utility which is
- used to grab text screens from the monitor and to place the
- contents in files compatible with RExL's ".SCR" format. The
- ScrAdd utility can be used to combine screen files together.
- Typical applications of ScrGrab and ScrAdd are demonstration
- programs like that supplied with RExL, bug reports supplied
- with screen dumps and so on.
-
- When loaded in memory, ScrGrab uses about 2,500 bytes of
- memory. When it is no longer required, it and can be
- unloaded from memory from the command line.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 131 -
-
-
- The command line arguments which ScrGrab uses are as
- follows:
-
- -h and -? Show command line help
-
- -u Unload from memory. If further T&SR
- programs have been loaded since ScrGrab, then it
- cannot be unloaded since doing so would corrupt DOS
- and most likely crash the machine.
-
- -k....: This option is used to set up the
- keystroke, by default <Alt-G>, which will cause
- ScrGrab to save a screen to disk. Unless you have a
- keyboard scan code table, you'll need to used the
- KbdScan utility to determine the exact four character
- keyboard scan code to supply here. Refer to the
- section on Scan for more information.
-
- -d: Requests ScrGrab to report the current
- defaults which it is using. The first line gives the
- activating scan code, in a format compatible with the
- output from KbdScan while the next line gives the DOS
- paragraph where the program is loaded. This
- information is purely technical and is not of much
- use.
-
- You should not run any T&SR programs from within an
- operating system shell, such as when the `File/OS shell' is
- selected from the editor, since T&SR's perform surgery upon
- DOS which will cause it to crash if the shell is
- subsequently terminated using the DOS exit command.
-
-
- 6.7 ScrXtrct
-
-
- ScrXtrct is a utility which can extract and place a screen
- from one screen file into another screen file. The general
- command line format of this command are:
-
- ScrXtrct OldScr ScreenNo NewScr
-
- where OldScr is the screen file from which screen number
- ScreenNo will be extracted and placed into the NewScr screen
- file, erasing NewScr if it already exists. Unlike the rest
- of RExL, ScreenNo is one-based, meaning that the first
- screen is number 1, the second number 2 and so on. If
- OldScr contains a number of screens and you are not sure of
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 132 -
-
-
- the reference number of the screen you want, then you can
- use the ScrList utility to list them along with their screen
- numbers.
-
-
- 6.8 ScrAdd
-
-
- ScrAdd is a utility which can extract and place a screen
- from one screen file into another screen file. The general
- command line format of this command are:
-
- ScrAdd OldScr ScreenNo NewScr
-
- where OldScr is the screen file from which screen number
- ScreenNo will be extracted and placed into the NewScr screen
- file. Note that, as with ScrXtrct, ScreenNo is one-based.
- If OldScr contains a number of screens, then you can use the
- ScrList utility to list them along with their screen
- numbers.
-
- If the name of the screen specified clashes with one in the
- new screen file, then you will be promted to enter a new
- name for the screen being added.
-
- ScrAdd does not perform any of the optimization operations
- carried out in the editor upon screen files when they are
- being modified. Instead, it simply appends the screen to
- NewScr.
-
- ScrAdd is generally used in combination with ScrGrab and
- ScrXtrct to move screens from one screen file to the next.
-
-
- 6.9 MI
-
-
- MI, short for memory information, displays pertinent
- information about the state of DOS and the programs resident
- in your PC. The following is a typical display of the
- output from MI:
-
-
- MI Version 2.1 Copyright (c) 1992, The Software Loft
- -------- -------- ------------ --------------
- PSP addr Size Owner Hooked vectors
- -------- -------- ------------ --------------
- 0008 24,048 [ Dos ]
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 133 -
-
-
- 084E 2,368 [ Shell ] 22 23 24 2E EF
- 64 [ Free ]
- 084E 752 [ Shell ]
- 0AA6 128 [ Dos ]
- 0921 6,208 edos.com 2F
- 0AA6 2,592 edos.com
- 0B54 2,320 scrgrab.com 09 16 21 28
- 0BE7 606,768 [ Free ]
- ------------ ---------------------- ----------------------
- Memory Total bytes Available bytes
- ------------ ---------------------- ----------------------
- Conventional 655,360 (640k) 606,592 (592k)
- Expanded EMS not responding
- Extended 3,145,728 (3,072k) 0 (0k)
- XMS 2,048,000 (2,000k) 2,048,000 (2,000k)
- HMA allocated, EBDA not present
- There are 12,102,400 (out of 120,946,944) bytes free on
- drive N:
-
-
- The first section of the display gives information about
- memory control blocks (MCB's) in low DOS memory, between 0
- and 640k. It lists the hexadecimal address of the owner of
- the MCB in `PSP addr' column, the amount of memory owned by
- the block in the `Size' column, the name of the program
- which owns the PSP in the `Owner' column. The final column
- lists, in hexadecimal, the interrupt vectors which are
- hooked into the memory controlled by the MCB. From the
- above display, we can see that ScrGrab hooks the high and
- low priority keyboard interrupts, the main DOS server
- interrupt and the DOSok interrupt. A DOS technical
- reference will tell you the meanings and uses of the
- different interrupt numbers.
-
- DOS itself also owns blocks of memory and these are
- signalled by owners of `[Dos]', for blocks with invalid
- environments and `[Shell]', for blocks which do not have
- program names attached to them.
-
- The second section of the output from MI lists the amount
- memory available in each of the different memory schemes
- used in the PC. The listing is divided into five columns:
- The first gives the type of memory about to be listed, the
- second gives the total amount of memory allocatable and the
- fourth gives the amout of memory remaining unallocated. The
- third and fifth columns convert the byte counts to
- measurements in kilobytes (bytes divided by 1024).
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 134 -
-
-
- Conventional memory extends from 0 to 640k, unless VGA
- graphics memory has been used to backfill DOS to 736k
- (generally, it isn't). The available conventional figure
- will always be slightly less than that noted as [Free] in
- the first section of the listing. This is because the first
- section lists as free the memory used by the environment of
- the currently active program, while the second does not.
-
- The next line gives the amount of expanded memory (LIM EMS)
- in your system. It interrogates the status of int 67h which
- controls the interface to the memory. If this vector is
- NULL, then the message `None' will be displayed. If the
- vector exists, but does not respond in the way it should,
- then the message `EMS not responding' will be displayed.
-
- The third line in this section gives the amount of vanilla
- extended memory available and free. The total is read from
- the CMOS setup information in your PC, while the amount of
- free memory is taken from int 15h/fn 88h. The final line in
- the memory display gives the amount of XMS (Extended Memory
- System) in your machine.
-
- The second last line gives the on/off status of the DOS 5
- HMA (High Memory Arena) and that of the EBDA (Extended BIOS
- Data Area) which is normally only present on PS/2, Compaq,
- Digital and Olivetti PC's.
-
- The final line gives the total disk space and the space on
- the currently selected disk drive. MI can optionally be
- followed by a drive letter to specify a drive, whose
- statistics are displayed instead of the current drive. For
- example the line MI a: will list the free space and total
- drive space on the A: drive rather than the current drive.
-
- MI takes one of two optional command line parameters, -c and
- -m.
-
- The -c parameter instructs MI to display the CPU type, the
- floating point coprocessor type, the video adapter type. If
- the processor is an Intel 80386 or above, then a message
- will be displayed saying whether or not the CPU is running
- in protected mode.
-
- The -m parameter causes the normal `condensed' memory
- control block display to be displayed in its low level
- unprocessed form. When -m is specified, no memory or
- capacities are determined.
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 135 -
-
-
- 6.10 KbdSpeed
-
-
- KbdSpeed is a small utility to set the keyboard repeat rate
- on AT class computers with extended keyboards. The format
- of the command is as follows:
-
- KbdSpeed <letter><digit>
-
- where letter is a letter in the range `a' to `z' and
- controls the repeat rate, with `a' at 30 repeats per second
- and `z' meaning 5 repeats per second. digit is a digit in
- the range `1' to `4' specifying the delay before repeating
- occurs. 1 specifies a delay of 1/4 seconds, up to 4
- specifying a delay of 1 second.
-
- To set the keyboard to repeat at 30 characters per second,
- with a delay of 1/4 seconds before auto repeat occurs, the
- following command would be issued:
-
- KbdSpeed a1
-
- If you run KbsSpeed from within MicroSoft Windows, then the
- program will have no effect, since Windows resets the rates
- of its own accord, ignoring any preset values.
-
- KbdSpeed is most useful in RExL when designing screens where
- the cursor may need to make large movements around the
- screen. The normal repeat rate of 10 characters per second
- then becomes an irritation.
-
-
- 6.11 KbdScan
-
-
- KbdScan is another small utility which reads from keystrokes
- from the keyboard and displays the keyboard scan code, the
- BIOS keystroke return value and the TSR hotkey code. The
- information is displayed on three sucessive lines.
-
- The format of the command is as follows:
-
- KbdScan [-x]
-
- This utility is provided so that the activating keyboard
- scan code for ScrGrab can be changed. If you want to do
- this, take the TSR hotkey code displayed on the final line
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 136 -
-
-
- of display and place it as the parameter to the -k command
- line option to ScrGrab.
-
- The following is output from KbdScan, with <Alt-0> as the
- last key pressed:
-
- KbdScan Version 2.1 (C) Copyright 1992, The Software Loft
- Press any key, ESC (twice) aborts :
- Shift/scan code :088b
- BIOS return value :8100
- TSR hotkey code :0881
-
- To change the activating keystroke in ScrGrab to <Alt-0>,
- the following command would be issued.
-
- ScrGrab -k0881
-
- Finally, ScrGrab accepts the command line option `-x'. If
- this option is included, ScrGrab will read keystrokes from
- an extended 101-102 key keyboard. This is only supplied as
- an extra feature, and is not used in RExL.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 137 -
-
-
-
-
-
-
-
-
- Chapter 7
-
- Afterword
-
-
- This appendix gives a few pointers to the directions in
- which the Software Loft hopes to go when developing future
- versions of RExL. Any suggestions for features which you
- would like to see incorporated would be most welcome.
- Please remember that without your support, we cannot
- continue to supply you with low cost, quality software.
- Thank you.
-
- o New features in the screen designer. These will
- include pictures for input and output (as in dBase
- compatible languages) as well as undo.
-
- o Improve the speed of the runtime-debugger module.
- Currently, we have a better expression evaluator
- undergoing tests and we hope to include it in the
- next major release.
-
- o Mouse handling.
-
- o More features in the debugger: Break on expression,
- pass count breakpoints, break on variable access.
- VGA 43 and 50 line mode support.
-
- o More features in the editor: Search and replace,
- lines longer than 65 characters, and function
- references (similar to variable references). Color
- installation program to set up colors of menus,
- windows and various other system parameters. VGA 43
- and 50 line mode support.
-
- o Language: rules attached to variables. Every time a
- variable is either accessed or changed, its rule is
- called. User defined RExL functions. Link in with
- C, assembly language and Pascal.
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
- - Appendices. Page: 138 -
-
-
-
- o Add true relational capability to the database
- module. Most of the code required is in place for
- this.
-
- o A portable runtime module to allow the programmer to
- write applications in DOS and to port the finished
- product to Unix, and other text based operating
- systems.
-
- o A windows version of RExL. The current version of
- RExL has taken fourteen months for us to write. We
- hope to be able to port most of the code to Windows
- easily enough and to have an alpha test version
- running sometime around September of 1992.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - RExL Version 2.10 Copyright 1992, The Software Loft -
-
-