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










