Verbs
New Verb — CEMU
A new verb, CEMU, has the syntax:
CEMU [<FLAVOR>]
where <FLAVOR> is an optional string. If present, must be one of the supported emulations. If absent, CEMU prints the current emulation setting.
This permanently changes the mode of the account in which it is executed. Changing the mode of the SYSPROG account is not allowed as this must always be run in CACHE emulation mode.
Verb — CREATE.INDEX
The CREATE.INDEX verb is currently limited to creating indices on files in the context of the account where the file resides.
Moreover, CREATE.INDEX does not support the “NO.NULLS” option. If this option is specified, a warning message is issued. The NO.NULLS clause actually means "don't index empty strings, not NULL values ($c(128) in UniVerse) which makes it confusing.
The NO.NULLS clause is in fact just an attempt to speed up index building where the majority of values are the same. This is not an issue for Caché indices, nor are many duplicates of any single key.
Application which depend on not having NULL as one of the values on an index will have to be modified to account for this situation.
TIME Command Extension
By default the TIME command outputs the current date and time, for example:
USER:time 14:02:09 19 OCT 2006 USER:
In the MV Shell. it has been enhanced to execute a statement and print the amount of time needed to execute the statement. This is very useful as an ad-hoc way of timing MV commands, particularly CMQL statements, and is similar to the time command on UNIX® shells. For example:
USER: time LIST EMPLOYEES WITH ACCENT LIKE ...NORTHERNER... FIRSTNAME MIDDLENAME FAMILYNAME MARTIN JAMES IDLE Execution time 3.012333 seconds
CHOOSE.TERM Command
The D3 command, CHOOSE.TERM, is available in all emulation modes. It provides the user with a full list of the compiled terminal types and allows one to be chosen as the current terminal. The choice may be by full name (IBM3151), the menu number (6), or the short name, (if it exists (M). or example,
USER:CHOOSE-TERM Terminal Description Term Name Short Name -------------------- --------- ---------- 1) ansi/pc-term compatible with co ANSI 2) AT&T 605 80 column 102key keybo ATT605 Z 3) cache terminal based on vt220 CACHE 4) Hazeltine Esprit I, ESPRIT E 5) hewlett-packard generic termina HP 6) IBM 3151 display, IBM3151 M 7) IBM Personal Computer (no ANSI. IBM5051 8) IBM PC/XT running PC/IX, IBMPC 9) linux console, LINUX 10) accuterm emulation of Pick PC C MM-MON 11) accuterm emulation of Pick PC C PICKMON 12) MDC Prism-8, PRISM8 13) MDC Prism-9 in ANSII mode, PRISM9 14) adds viewpoint, VIEWPOINT V 15) dec vt100 (w/advanced video), VT100 16) dec vt100 with color VT100-COLOR 17) dec vt220, VT220 18) dec vt220 with color, VT220-COLOR 19) dec vt320 7 bit terminal, VT320 20) dec vt320 7 bit terminal with c VT320-COLOR 21) dec vt52, VT52 22) Wyse 120 and 150, WY120 23) Wyse 120 and 150, WY150 24) Wyse 30, WY30 25) Wyse 50, WY50 26) Wyse 60, WY60 W 27) wyse 75, WY75 28) Wyse 120 and 150, WYSE120 29) Wyse 120 and 150, WYSE150 30) Wyse 30, WYSE30 31) Wyse 50, WYSE50 32) Wyse 60, WYSE60 W 33) wyse 75, WYSE75 34) xterm terminal emulator (X Wind XTERM 35) ansi/pc-term compatible with co ansi 36) AT&T 605 80 column 102key keybo att605 Z 37) cache terminal based on vt220 cache 38) Hazeltine Esprit I, esprit E 39) hewlett-packard generic termina hp 40) IBM 3151 display, ibm3151 M 41) IBM Personal Computer (no ANSI. ibm5051 42) IBM PC/XT running PC/IX, ibmpc 43) linux console, linux 44) accuterm emulation of Pick PC C mm-mon 45) accuterm emulation of Pick PC C pickmon 46) MDC Prism-8, prism8 47) MDC Prism-9 in ANSII mode, prism9 48) adds viewpoint, viewpoint V 49) dec vt100 (w/advanced video), vt100 50) dec vt100 with color vt100-color 51) dec vt220, vt220 52) dec vt220 with color, vt220-color 53) dec vt320 7 bit terminal, vt320 54) dec vt320 7 bit terminal with c vt320-color 55) dec vt52, vt52 56) Wyse 120 and 150, wy120 57) Wyse 120 and 150, wy150 58) Wyse 30, wy30 59) Wyse 50, wy50 60) Wyse 60, wy60 W 61) wyse 75, wy75 62) Wyse 120 and 150, wyse120 63) Wyse 120 and 150, wyse150 64) Wyse 30, wyse30 65) Wyse 50, wyse50 66) Wyse 60, wyse60 W 67) wyse 75, wyse75 68) xterm terminal emulator (X Wind xterm Choose number, term name or short name : 1 Terminal type ANSI loaded. USER:
DATE.FORMAT Command Changes
The DATE.FORMAT command already supports the ON and OFF options to change the format from international and US formats. The (I) and (D) options do the same and were added for compatibility with other MV platforms. The augmented syntax is:
DATE.FORMAT [ ON | OFF | INFORM ] {(ID)}
where:
-
ON - display dates in international format. This is the default.
-
OFF - display dates in U.S. format
-
INFORM - set @SYSTEM.RETURN.CODE to 0, if dates are to be displayed in U.S. format, or 1, if they are displayed in international format.
-
(I) - display dates in international format; same as “ON”.
-
(D) - display dates in U.S. format; same as “OFF”.
SP.COPY
The SP.COPY command has been added to control the placement of spooler jobs in the queue.
MVI: MVI-to-MVB Cross-Reference
MVBasic programs (with suffix “.MVB”) are compiled into an intermediate form before execution. These intermediate files have the suffix, “.MVI”. Errors reported at runtime identify their locations in terms relative to these MVI files.
The MVI command allows programmers and support personnel to cross-reference line numbers given in terms of the MVI file back to the originating source code, if the source is available.
The syntax of the command is:
MVI {MVB.}XXX{.MVI} {lineno}
where
-
“MVB.” is a literal text string, assumed if not present
-
XXX is a hexadecimal module number assigned to the routine when it is compiled
-
“.MVI” is a literal text string, assumed if not present
-
lineno is the line number in the MVI code where the error was reported
For example, an error reported as
<INVALID FILE VARIABLE>+5^MVB.20.mvi
can be referenced with the command
MVI 20 5
and produces (in this example) the following output:
Inspecting 'MVB.20' around mvi line 5 ================================================= Origin - File : BP' program : 'TEST' MVI BASIC code -------------- 00001 READ X FROM FDSC ELSE STOP 00002 OPEN "MYTEST" TO FDSC ELSE 00003 ABORT 201,"MYTEST" 00004 END >00005 WRITE "TESTER" ON FDSC,"JJJ" ON ERROR 00006 CRT "IT IS IN ERROR" 00007 END Original BASIC code ------------------- 00002 OPEN "MYTEST" TO FDSC ELSE 00003 ABORT 201,"MYTEST" 00004 END 00005 * >00006 WRITE "TESTER" ON FDSC,"JJJ" ON ERROR 00007 CRT "IT IS IN ERROR" 00008 END
LOCK Commands
LIST.LOCKS
The LIST.LOCKS command lists the system lock table. Locks created by the MVBasic LOCK command are shown as LOCK nnn. Locks created by opening a sequential file are shown as FILE fname. All other locks are shown in their native format, including MVBasic record locks, which are shown on the global that holds the file.
CLEAR.LOCKS
The CLEAR.LOCKS command allows the user to release locks that are held by this process as a result of an MVBasic LOCK command. With an argument nnn, it releases that single LOCK nnn. Without an argument, it release all LOCKS held by the process.
TANDEM Command
The TANDEM command allows one multi-value user to connect to the terminal of another multi-value user, sharing terminal input and output. It is usually used as a support tool so that support staff can connect to a remote user and view or run their application.
There are two types of TANDEM user, the master and the slave. The master is the user who initiates the request and chooses the user to connect with. The slave is the user who accepts the connection request and it is the slave’s terminal input and output that is shared.
Before a TANDEM session can exist, the slave user must issue a TANDEM ON command. By running this command, the user is acknowledging that their session may be connected to by a TANDEM master. Because of the way TANDEM is used, it is anticipated the TANDEM ON command will usually be run automatically when the user logs on through a logon proc/paragraph.
For security purposes, the TANDEM master user can only be run from the %SYS namespace. In MultiValue terms, the %SYS namespace is usually the more familiar SYSPROG account.
Both the master and slave users should be running the same terminal type. TANDEM does not translate terminal specific escape sequences. Hence if the master terminal was a Terminal (VT220) and the slave terminal was a WYSE 50, then none of the escape control sequences would be translated, and the screen of the master might look garbled.
The TANDEM command allows the linking of two separate terminals in such a way that any displayed to or entered from either terminal is echoed to the other. The syntax is:
TANDEM [ ON | OFF | <nnn>
where:
-
ON - This is run from the tandem slave to acknowledge they can become a slave user. Without running this, a user cannot be connected to.
-
OFF - This is run from the tandem slave to refuse tandem requests.
-
nnn - By specifying a port number, you are asking to start a TANDEM session, as the master user. You must be in the %SYS namespace (SYSPROG account).
For legacy compatibility, TANDEM (N) and TANDEM (F) are the equivalent of TANDEM ON and TANDEM OFF respectively.
By executing the TANDEM nnn command, you are asking to become a TANDEM master user to connect to the TANDEM slave user on port number nnn. Port number nnn must be logged on, and must not already be in a TANDEM session in any way. The TANDEM slave must have previously executed a TANDEM ON command. For example;
SYSPROG:TANDEM 23 TANDEM to port 23 in VIEW ONLY mode. To exit TANDEM enter ESC + "X"
Once a master connects to a TANDEM slave, the connection is in VIEW ONLY mode. This means that the master will see the output of the screen of the TANDEM slave, but the keyboards are not connected.
Once a session is created, the TANDEM master user can enter the following keystrokes to control the session:
-
ESCAPE+F
This sequences enters the TANDEM master user into FEED mode. This means the keyboards are now connected and anything the master user types at the keyboard is passed to the TANDEM slave user. Hence, the master can directly control the terminal of the slave. While in this mode, all keyboard characters are sent to the slave except for the ESCAPE key sequences. If you want to send ESCAPE to the slave, press ESCAPE twice.
-
ESCAPE+X
This sequence exits the TANDEM session.
-
ESCAPE+V
select
This sequence enters the TANDEM master into VIEW ONLY mode. The keyboards are disconnected. All keyboard input from the master user is ignored, except for these escape sequences. In VIEW mode the master user will simply view the output of the slave user.
-
ESCAPE+M
This sequences enters both the TANDEM master and the TANDEM slave into message mode. What each user types is sent as a message to the other. The following example shows an instance of this feature.
-
ESCAPE+ESCAPE
While in the FEED mode, if the master user wants to send an ESCAPE character to the slave you must enter the ESCAPE character twice.
-
Q
While in the VIEW ONLY mode, pressing the Q key will quit the session in the same manner as ESCAPE+X.
For example, the following illustrates the activity at the start of a TANDEM session:
Line | Master (Port 22) | Slave (Port 23) |
---|---|---|
1 |
|
Types: “TANDEM ON” |
2 |
Types: TANDEM 23” |
|
3 |
Shows: “TANDEM to port 23 in VIEW ONLY mode. Shows: “To exit TANDEM enter ESC+X. |
|
4 |
Types: ESCAPE+M Shows: “TANDEM to port 23 in MESSAGE mode” |
|
5 |
|
Shows: “Entering MESSAGE mode from TANDEM user on port 22” Shows: “MSG:” |
6 |
Shows: “MSG: Types: “Hello, how are you?” |
|
7 |
|
Shows: “From port 22 at Sep 26 2007 13:57:27 Hello, how are you? Shows: “MSG:” |
8 |
|
Types: “I'm okay but busy” |
9 |
Shows: “MSG:” Shows: “From port 23 at Sep 26 13:57:37” Shows: “I'm okay but busy” |
|
10 |
Shows: “MSG:” Types: “Okay, goodbye” |
|
11 |
|
Shows: “MSG:” Shows: “From port 22 at Sep 26 2007 13:57:51 Shows: “Okay, goodbye” |
12 |
Types: ESCAPE+F Shows: “TANDEM to port 23 in FEED mode” |
|
13 |
|
Shows: “MSG:” Shows: “Exiting MESSAGE mode from TANDEM user 22” |
— |
... |
... |
When a TANDEM master starts a session, the master must wait until the slave presses RETURN on their keyboard to finish their current terminal input before the session fully takes effect.
The slave must have executed the TANDEM ON command prior to this. This has both security and performance implications. The requirement that the slave terminal must declare itself as such means that a master cannot connect to a terminal arbitrarily. Also, executing TANDEM ON will marginally slow all subsequent terminal input/output incurs an additional performance penalty since all i/o involving the terminal does additional checking for available connections.
Alternate Verb Forms
In Caché, if a user issues a verb that contains dashes in it, and the verb is not found in the VOC, the shell will replace the dashes with periods and attempt to find the transformed name in the VOC. If it is found, it will be used.
All standard verbs are represented in the VOC with periods in the name. This conversion allows them to be accessed in either form: with periods, or with dashes in the name.