SPI Programming Manual (G06.24+, H06.03+, J06.03+)

SPI Programming Examples
SPI Programming Manual427506-006
E-29
Example E-9: A Simple SPI Requester in TAL
PROC get^string (p^buffer, p^count^read);
STRING .p^buffer;
INT .p^count^read; ! This will be modified
BEGIN
INT l^work^to^do;
INT l^size;
INT l^status;
l^work^to^do := false;
DO
BEGIN
sline ':=' " " -> @sp;
CALL writex (term, sline, @sp '-' @sline);
sline ':=' " 1 - Reverse string," -> @sp;
CALL writex (term, sline, @sp '-' @sline);
sline ':=' " 2 - Shift string to upper case, " -> @sp;
CALL writex (term, sline, @sp '-' @sline);
sline ':=' " 3 - Shift string to lower case, " -> @sp;
CALL writex (term, sline, @sp '-' @sline);
sline ':=' " 4 - Display SPI messages," -> @sp;
CALL writex (term, sline, @sp '-' @sline);
sline ':=' " 5 - Don't display SPI messages, " -> @sp;
CALL writex (term, sline, @sp '-' @sline);
sline ':=' " 6 - Exit" -> @sp;
CALL writex (term, sline, @sp '-' @sline);
sline ':=' "Enter command: " -> @sp;
CALL writereadx (term, sline, @sp '-' @sline, 1, l^size);
IF < THEN CALL get^file^error (term);
IF > THEN ! CTL-Y entered
BEGIN
CALL stop (process^id); ! Stop the server.
CALL stop;
END;
sline[l^size] := 0; -- Ignore the rest of the buffer
CALL numin (sline, spi^command, 10, l^status);
IF l^status THEN
spi^command := 999; ! Invalid data entered.
CASE spi^command OF
BEGIN
1, 2, 3 ->
sline ':=' " " -> @sp;
CALL writex (term, sline, @sp '-' @sline);
p^buffer ':=' "Enter string: " -> @sp;
CALL writereadx (term, p^buffer, @sp '-' @p^buffer, 40, l^size);
IF < THEN CALL get^file^error (term);
IF > THEN ! CTL-Y entered
BEGIN
CALL stop (process^id); ! Stop the server.
CALL stop;
END;
p^count^read := l^size;
p^buffer [l^size] := 0; -- Ignore the rest of the buffer
l^work^to^do := true;
Example E-9. TAL File: A Simple SPI Requester (page 2 of 8)