TAL Programmer's Guide
String-Entry Program
Sample Programs
096254 Tandem Computers Incorporated A–3
String-Entry Program This string-entry program opens the home terminal and then loops forever. In each
loop iteration, the program:
1. Displays "ENTER STRING" and accepts a character string of up to 68 characters.
2. Scans the input string for an asterisk. If an asterisk occurs, the program displays a
circumflex at the position of the first asterisk.
Example A-3 shows the D-series source code for the string-entry program.
Example A-3. D-Series String-Entry Program
LITERAL maxlength = 68; !Maximum length of BUFFER
INT termnum, !File number of home terminal
left_side, !BUFFER address of first
! character after prompt
num_xferred, !Number of bytes transferred
count, !General-purpose variable
asterisk; !Location of asterisk
STRING .buffer[0:maxlength], !Input-output buffer
.blanks[0:79] := 80 * [" "]; !Blanks for initialization
?PUSHLIST, NOLIST, SOURCE $SYSTEM.SYSTEM.EXTDECS0 (
? PROCESS_GETINFO_, FILE_OPEN_, WRITEREADX, WRITEX)
?POPLIST
PROC main_proc MAIN; !Declare MAIN_PROC
BEGIN
CALL PROCESS_GETINFO_ (
,,,,,buffer:maxlength+1, num_xferred);
CALL FILE_OPEN_(buffer:num_xferred, termnum);
WHILE 1 DO !Infinite loop
BEGIN
buffer ':=' "ENTER STRING" -> left_side;
CALL WRITEREADX (termnum, buffer, left_side '–' @buffer,
maxlength, num_xferred);
buffer[num_xferred] := 0; !Delimit the input
SCAN buffer UNTIL "*" -> asterisk;
!Scan for asterisk
IF NOT $CARRY THEN !Asterisk found
BEGIN
buffer ':=' blanks FOR
(count := asterisk '-' @buffer +
(left_side '-' @buffer)) BYTES;
buffer[count] := "^";
CALL WRITEX (termnum, buffer, count+1);
END; !End of IF
END; !End of WHILE
END; !End of MAIN_PROC