Skip to main content


New Verb — CEMU

A new verb, CEMU, has the syntax:


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.


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:

14:02:09 19 OCT 2006

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:


MARTIN         JAMES         IDLE

Execution time 3.012333 seconds


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,

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.

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:



  • 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”.


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}


  • “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


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'

 00003   ABORT 201,"MYTEST"
 00004 END
 00006  CRT "IT IS IN ERROR"
 00007 END

Original BASIC code
 00003   ABORT 201,"MYTEST"
 00004 END
 00005 *
 00007  CRT "IT IS IN ERROR"
 00008 END

LOCK Commands


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.


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>


  • 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.

TANDEM Master User

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;


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:


    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.


    This sequence exits the TANDEM session.



    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.


    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.


    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)

Types: “TANDEM ON”


Types: TANDEM 23”


Shows: “TANDEM to port 23 in VIEW ONLY mode.

Shows: “To exit TANDEM enter ESC+X.



Shows: “TANDEM to port 23 in MESSAGE mode”


Shows: “Entering MESSAGE mode from TANDEM user on port 22”

Shows: “MSG:”


Shows: “MSG:

Types: “Hello, how are you?”


Shows: “From port 22 at Sep 26 2007 13:57:27

Hello, how are you?

Shows: “MSG:”


Types: “I'm okay but busy”


Shows: “MSG:”

Shows: “From port 23 at Sep 26 13:57:37”

Shows: “I'm okay but busy”


Shows: “MSG:”

Types: “Okay, goodbye”


Shows: “MSG:”

Shows: “From port 22 at Sep 26 2007 13:57:51

Shows: “Okay, goodbye”



Shows: “TANDEM to port 23 in FEED mode”


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.

FeedbackOpens in a new tab