PSIONICS FILE - KEYWORDS
========================
More information about OPL keywords
Last modified 1998-11-09
===================================
This document consists of two parts. The first is a complete list of keywords,
and the second is a set of notes on various keywords, listing information not
given in the standard manual.
In general, a "standard" keyword is one found on both the 3t and the 3a, while
an "extra" keyword is only on the 3a.
List of keywords
================
There are two kinds of keywords: commands and functions. Within the OPL
translator, each keyword has from 1 to 6 bytes of associated data; this may
differ between the 3t and the 3a.
The tag "changed" after the associated data means that it differs between the
3t and the 3a; the 3a data is shown, and the 3t data is obtainable from it:
commands: subtract 3 from the first byte
functions: change the last byte to 00
In addition, the second byte of the data for all functions (not just the
changed ones) is only present in the 3a (in both the native and compatibility
modes), not the 3t. Apart from this, the compatibility mode on the 3a uses the
same data as the 3t.
ABS Fn 80 02 21
ACOS Fn 81 02 21
ADDR Fn 00 00 51
ADJUSTALLOC Fn 4D 00 03 00 extra
ALERT Fn 38 00 3D 33 33
ALLOC Fn 4B 00 41 extra
APP Cmd F3
APPEND Cmd 03 9D
APPENDSPRITE Cmd 7E 7F 07 extra
ASC Fn 01 00 31
ASIN Fn 82 02 21
AT Cmd 04 1E
ATAN Fn 83 02 21
BACK Cmd 05 9F
BEEP Cmd 06 20
BREAK Cmd 07 3F
BUSY Cmd 69 70 changed
CACHE Cmd 77 FF 0E extra
CACHEHDR Cmd 79 7F 15 extra
CACHEREC Cmd 7A 7F 16 extra
CACHETIDY Cmd 78 7F 13 extra
CALL Fn 02 00 0E 00 00 00
CHANGESPRITE Cmd 80 7F 09 extra
CHR$ Fn C0 03 01
CLOSE Cmd 08 A1
CLOSESPRITE Cmd 82 7F 0B extra
CLS Cmd 09 22
CMD$ Fn D6 03 01
COMPRESS Cmd 0A A3
CONTINUE Cmd 0B 3F
COPY Cmd 0C A4
COS Fn 84 02 21
COUNT Fn 03 00 00
CREATE Cmd 0D A5
CREATESPRITE Fn 3B 00 00 extra
CURSOR Cmd 0E 26
DATETOSECS Fn 45 01 06 00 00 00
DATIM$ Fn C1 03 00
DAY Fn 04 00 00
DAYNAME$ Fn C2 03 01
DAYS Fn 40 01 03 00
DBUTTONS Cmd 64 6D changed
DCHOICE Cmd 5D 6D changed
DDATE Cmd 60 6D changed
DEDIT Cmd 61 6D changed
DEFAULTWIN Cmd 7C 7F 01 extra
DEG Fn 85 02 21
DELETE Cmd 0F A7
DFILE Cmd 63 6D changed
DFLOAT Cmd 65 6D changed
DIALOG Fn 37 00 00
DIAMINIT Cmd 70 7F 02 extra
DIAMPOS Cmd 71 7F 03 extra
DINIT Cmd 5B 6C changed
DIR$ Fn C3 03 31
DLONG Cmd 5E 6D changed
DO Cmd 00 00
DOW Fn 05 00 03 00
DPOSITION Cmd 66 6D changed
DRAWSPRITE Cmd 7F 7F 08 extra
DTEXT Cmd 5C 6D changed
DTIME Cmd 5F 6D changed
DXINPUT Cmd 62 6D changed
EDIT Cmd 2F C2
ELSE Cmd FB
ELSEIF Cmd FC
ENDA Cmd EE
ENDIF Cmd FA
ENDP Cmd F7
ENDV Cmd F4
ENDWH Cmd FD
ENTERSEND Fn 49 00 0D A0 AA extra
ENTERSEND0 Fn 4A 00 0D A0 AA extra
EOF Fn 06 00 00
ERASE Cmd 10 A8
ERR Fn 07 00 00
ERR$ Fn C4 03 01
ESCAPE Cmd 11 29
EVAL Fn 99 02 31
EXIST Fn 08 00 31
EXP Fn 86 02 21
EXT Cmd F1
FIND Fn 09 00 31
FINDFIELD Fn 54 00 34 00 00 extra
FINDLIB Fn 3E 00 62 03 extra
FIRST Cmd 12 AA
FIX$ Fn C5 03 23 00
FLT Fn 87 02 11
FONT Cmd 72 7F 04 extra
FREEALLOC Cmd 74 7F 0C extra
GAT Cmd 40 52
GBORDER Cmd 54 74
GBOX Cmd 45 5B
GBUTTON Cmd 56 7F 0F extra
GCLOCK Cmd 55 75
GCLOSE Cmd 34 C6
GCLS Cmd 3F 51
GCOPY Cmd 49 E1
GCREATE Fn 26 00 05 00 50 changed
GCREATEBIT Fn 27 00 02 00
GDRAWOBJECT Cmd 58 7F 11 extra
GEN$ Fn C6 03 22 00
GET Fn 0A 00 00
GET$ Fn C7 03 00
GETCMD$ Fn D5 03 00
GETEVENT Cmd 4E 64
GETLIBH Fn 3F 00 01 extra
GFILL Cmd 47 5F
GFONT Cmd 38 CA
GGMODE Cmd 3A 4C
GGREY Cmd 7B 7F 00 extra
GHEIGHT Fn 2F 00 00
GIDENTITY Fn 2B 00 00
GINFO Cmd 3E 50
GINVERT Cmd 52 72
GIPRINT Cmd 6F 7C changed
GLINEBY Cmd 44 5A
GLINETO Cmd 4C 65
GLOADBIT Fn 28 00 3B 00
GLOADFONT Fn 29 00 31
GLOBAL Cmd F8
GMOVE Cmd 41 53
GORDER Cmd 3D 4F
GORIGINX Fn 30 00 00
GORIGINY Fn 31 00 00
GOTO Cmd 13 3F
GPATT Cmd 48 E0
GPEEKLINE Cmd 4D 66
GPOLY Cmd 46 5E
GPRINT Cmd 42 54
GPRINTB Cmd 43 59
GPRINTCLIP Fn 33 00 32 00
GRANK Fn 2A 00 00
GSAVEBIT Cmd 33 C5
GSCROLL Cmd 4A 62
GSETWIN Cmd 36 48
GSTYLE Cmd 3C 4E
GTMODE Cmd 3B 4D
GTWIDTH Fn 32 00 31
GUNLOADFONT Cmd 39 CB
GUPDATE Cmd 4B 63
GUSE Cmd 35 C7
GVISIBLE Cmd 37 49
GWIDTH Fn 2E 00 00
GX Fn 2C 00 00
GXBORDER Cmd 57 7F 10 extra
GXPRINT Cmd 53 73
GY Fn 2D 00 00
HEX$ Fn C8 03 11
HOUR Fn 12 00 00
IABS Fn 41 01 11
ICON Cmd F0
IF Cmd 02 00
INPUT Cmd 14 94
INT Fn 42 01 21
INTF Fn 88 02 21
IOA Fn 0B 00 05 60 AA
IOC Fn 4F 00 0D A0 AA extra
IOCANCEL Fn 52 00 01 extra
IOCLOSE Fn 10 00 01
IOOPEN Fn 0D 00 63 05
IOREAD Fn 0F 00 03 04
IOSEEK Fn 21 00 03 70
IOSIGNAL Cmd 32 37
IOW Fn 0C 00 04 A0 0A
IOWAIT Fn 11 00 00
IOWAITSTAT Cmd 50 68
IOWRITE Fn 0E 00 03 04
IOYIELD Cmd 51 69
KEY Fn 13 00 00
KEY$ Fn C9 03 00
KEYA Fn 23 00 62 06
KEYC Fn 24 00 61
KMOD Fn 22 00 00
LAST Cmd 15 AC
LCLOSE Cmd 16 AD
LEFT$ Fn CA 03 32 00
LEN Fn 14 00 31
LENALLOC Fn 4E 00 01 extra
LINKLIB Cmd 75 7F 0D extra
LN Fn 89 02 21
LOADLIB Fn 3C 00 63 03 extra
LOADM Cmd 17 AE
LOC Fn 15 00 32 03
LOCAL Cmd F9
LOCK Cmd 6A 71 changed
LOG Fn 8A 02 21
LOPEN Cmd 18 AF
LOWER$ Fn CB 03 31
LPRINT Cmd 19 0C
MAX Fn 93 02 08
MCARD Cmd 5A 6B changed
MEAN Fn 94 02 08
MENU Fn 36 00 59 changed
MID$ Fn CC 03 33 00
MIN Fn 95 02 08
MINIT Cmd 59 6A changed
MINUTE Fn 16 00 00
MKDIR Cmd 6B F8 changed
MONTH Fn 17 00 00
MONTH$ Fn CD 03 01
NEWOBJ Fn 46 00 02 00 extra
NEWOBJH Fn 47 00 02 00 extra
NEXT Cmd 1A B0
NUM$ Fn CE 03 22 00
ODBINFO Cmd 76 7F 12 extra
OFF Cmd 1B 32
ON Cmd F5
ONERR Cmd 1C 31
OPEN Cmd 1D B4
OPENR Cmd 31 C4
OS Fn 35 00 0B 00
PARSE$ Fn D7 03 33 63
PATH Cmd F2
PAUSE Cmd 1E 35
PEEK$ Fn CF 03 41
PEEKB Fn 18 00 41
PEEKF Fn 8B 02 41
PEEKL Fn 43 01 41
PEEKW Fn 19 00 41
PI Fn 8C 02 00
POKE$ Cmd 23 1B
POKEB Cmd 1F 1C
POKEF Cmd 22 1A
POKEL Cmd 21 19
POKEW Cmd 20 18
POS Fn 1A 00 00
POSITION Cmd 24 B6
POSSPRITE Cmd 81 7F 0A extra
PRINT Cmd 25 08
PROC Cmd F6
RAD Fn 8D 02 21
RAISE Cmd 26 38
RANDOMIZE Cmd 27 39
REALLOC Fn 4C 00 02 04 extra
RECSIZE Fn 1B 00 00
REM Cmd FF
RENAME Cmd 28 BA
REPT$ Fn D0 03 32 00
RETURN Cmd 29 40
RIGHT$ Fn D1 03 32 00
RMDIR Cmd 6C F9 changed
RND Fn 8E 02 00
SCI$ Fn D2 03 23 00
SCREEN Cmd 30 43
SCREENINFO Cmd 83 7F 14 extra
SECOND Fn 1C 00 00
SECSTODATE Cmd 6E 7B changed
SEND Fn 48 00 0D A0 AA extra
SETNAME Cmd 67 6E changed
SETPATH Cmd 6D 7A changed
SIN Fn 8F 02 21
SPACE Fn 44 01 00
SQR Fn 90 02 21
STATUSWIN Cmd 68 6F changed
STATWININFO Fn 53 00 02 06 extra
STD Fn 96 02 08
STOP Cmd 2A 3B
STYLE Cmd 73 7F 05 extra
SUM Fn 97 02 08
TAN Fn 91 02 21
TESTEVENT Fn 34 00 00
TRAP Cmd 2B 3C
TYPE Cmd EF
UADD Fn 50 00 42 00 extra
UNLOADLIB Fn 3D 00 01 extra
UNLOADM Cmd 2E C1
UNTIL Cmd FE
UPDATE Cmd 2C BD
UPPER$ Fn D3 03 31
USE Cmd 2D BE
USESPRITE Cmd 7D 7F 06 extra
USR Fn 1D 00 45 44 44
USR$ Fn D4 03 45 44 44
USUB Fn 51 00 42 00 extra
VAL Fn 92 02 31
VAR Fn 98 02 08
VECTOR Cmd 4F 2B
WEEK Fn 20 00 03 00
WHILE Cmd 01 00
YEAR Fn 1E 00 00
Commands
--------
All extra commands have 3 bytes of data, while all standard commands have 1
or 2 bytes.
The first byte of data is unique to each command. Commands with 2 or 3 bytes
have values from $00 to $83 inclusive, while those with 1 byte have values
from $EE to $FF inclusive; in neither case is there a gap. The extra commands
fall into two blocks: three are inserted in the middle of the sequence (and
so all commands with higher first bytes are different between the 3t and 3a),
while the remainder occur after the last standard command.
The commands with only 1 byte are:
APP ENDV ON
ELSE ENDWH PATH
ELSEIF EXT PROC
ENDA GLOBAL REM
ENDIF ICON TYPE
ENDP LOCAL UNTIL
none of which directly correspond to Q-code.
With a few exceptions, the second byte of the data is the Q-code opcode of
that keyword, except that the top bit of the opcode is always set while
that of the data byte may be either clear or set (there is no obvious
meaning to the bit); thus opcode $AB might be represented as $2B or $AB.
If there is a third byte, this is the second byte of the opcode. If the
keyword maps to more than one opcode, the opcode represented is the lowest.
The exceptions are the following:
$00 DO IF WHILE
$3F BREAK CONTINUE GOTO ($BF is the opcode for GOTO)
All dialog commands other than DINIT share the second byte $6D; the second
byte of the opcode is not represented here.
Functions
---------
The associated data varies from 3 to 6 bytes (2 to 5 bytes on the 3t).
The first data byte is the second byte of the Q-code opcode. Integral valued
functions have values from $00 to $54, real valued functions from $80 to $99,
and string valued functions values from $C0 to $D7. There are 4 codes that
do not appear ($1F, $25, $39, $3A); these correspond to alternate versions
of the keyword.
The second byte (3a only) gives the type of the function:
0 = word
1 = long
2 = real
3 = string
The remaining bytes describe the arguments to the function. Each byte is
divided into two nibbles, with the least significant being processed first.
The first nibble (N) indicates the number of arguments:
0 to 7: exactly N arguments, described by the next N nibbles
8: either a list or reals, or a real array followed by an integer
9: 1 optional argument, described by the next nibble
10 to 15: between 1 and N-8 arguments, described by the next N-8 nibbles
The remaining nibbles each describe one argument, in order:
0 = word value (signed)
1 = long value
2 = real value
3 = string value
4 = word value (unsigned)
5 = special case (meaning varies)
6 = word variable
7 = long variable
10 = any variable
Notes on keywords
=================
FINDFIELD
---------
The manual description of flags% is wrong; it should be:
0 = backwards starting at current record
1 = forwards starting at current record
2 = backwards starting at end of file
3 = forwards starting at record 0
plus:
0 = case independent
16 = case dependent
(in other words, the bold text should be attached to the first bullet item,
not the second).
In all releases up to 3.22F, the keyword will actually do a FIND unless a
certain byte in memory is zero. To ensure this, each use of FINDFIELD should
be immediately preceeded by:
POKEB PEEKW(28)+7,0
It is reported that the start% and no% parameters only count string fields
in the records; that is, if a record contains other types of field, these
are ignored when doing the searching. This is consistent with the underlying
system call.
If a backwards search fails to find a record, the keyword returns 1 rather
than 0 as it should. The pointer is left at record 1 but the field variables
are all zero or empty strings. If this happens, the instructions:
CALL($03D8,PEEKW(ODB%))
BACK
must be done before record 1 can be accessed, where ODB% is the appropriate
element of an array initialized with ODBINFO.
GBORDER
-------
It is reported that the $400 flag of GXBORDER also works with this call.
GFILL
-----
It is reported that this can't cope with negative parameters.
GPATT
-----
It is reported that this can't cope with negative parameters.
LOADM
-----
It is reported that the 3c behaves differently from the 3a when dealing
with calls from one module to another. One specific case mentioned is
that such calls lose track of which data file is current, so that USE must
be used to reselect the correct file.
ON
--
This keyword is not documented. @I don't know what it does.
USE
---
See LOADM.
|
|