CTL( ) |
Return CTL Definition |
1. |
Return CTL Definition: |
CTL(chan,input[$][,ERR=stmtref]) |
2. |
Return Input Sequence: |
CTL(READ chan,ctlval[,ERR=stmtref]) |
chan |
Channel or logical file number. Usually 0 (zero), the terminal. |
ctlval |
CTL value whose input sequence is to be returned. |
input[$] |
Input sequence. Either the keyboard character string received or the invalid CTL value. String or numeric expression. |
stmtref |
Program line number or statement label to which to transfer control. |
CTL code associated with input, or input sequence associated with CTL.
The CTL( ) function is designed for use in programs that interact directly with the terminal. It provides access to the CTL lookup tables maintained internally in PxPlus.
When an input sequence is passed to CTL( ), it returns the CTL values associated with the input.
Example:
print ctl(0,$000002E$) returns -1007
When a CTL value is passed to CTL(READ ..), it returns the input sequence associated with the control.
DEFCTL Define/Redefine CTL Values
Negative CTL Definitions
The following example reads an uppercase string into Y$ without editing and stops on a CTL value >0:
0020 open (1) fid(0); Y$=""
0030 read record (1,siz=1)X$
0040 if X$<" " or X$=$7F$ then goto 0100
0050 let X$=ucs(X$),Y$=Y$+X$
0060 print X$,; goto 0030
0100 let C=ctl(0,X$,err=0050); goto 0130
0110 read record (1,siz=1)X1$
0120 let X$=X$+X1$; goto 0100
0130 if C>0 then goto 1000 ! Found it
0140 let C=ctl(0,C,err=0160) ! Check alternates
0150 goto 0130
0160 print 'RB',; goto 0030
1000 print "DONE"; stop
In the example below, the CTL( ) function returns a string value containing a list of control sequences for a specified CTL value. The string is made up of a series of fields where the first byte preceding each field indicates the number of characters in the control sequence; the rest of the field shows the actual control sequence.
To print control sequences for function keys F1 through F4:
0010 for CTL_CODE=1 to 4
0020 print 'LF',str(CTL_CODE:"#0")," ",
0030 let X$=ctl(read 0,CTL_CODE)
0040 if X$="" then goto 0070
0050 let X=dec(X$(1,1)); print pad(hta(X$(2,X)),10),
0060 let X$=X$(X+2); goto 0040
0070 next
0080 print " DONE"; stop
->run
1 000070
2 000071
3 000072
4 1B 000073 00FF82 DONE
If the expression is numeric, PxPlus returns any alternate CTL value that has been assigned:
print ctl(0,$000070$) returns 1 (CTL=1 or the F1 key)