1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-27 17:22:35 +00:00

Updated RRS;SWCHAR to fix SWTXT3 to work correctly with multiline strings containing tabs.

This commit is contained in:
Eric Swenson
2022-01-19 08:18:49 -08:00
committed by Lars Brinkhoff
parent 602a3fd499
commit b8e98818d8

View File

@@ -1859,7 +1859,7 @@
<SET ST <REST .ST>> >>
<DEFINE SWTXT3 (STR ;"INPUT TEXT STRING"
;<DEFINE SWTXT3 (STR ;"INPUT TEXT STRING"
"OPT" (X 0) (Y 500) (SP 12)
"AUX" (LX .X) (LY .Y) (YSP 25) )
#DECL ((STR) STRING (X Y SP YSP) FIX (VALUE) ATOM)
@@ -1876,13 +1876,63 @@
<COND (<G? .S 1000> <SET S 0> <SET T <- .T .YSP>>)>
<SET ST <REST .ST>> >>
<SETG SPCTAB 4> ;"SPACES PER TAB"
;<SETG SPCTAB 4> ;"SPACES PER TAB"
<DEFINE TB2SP (CRP "AUX" (SPCTAB ,SPCTAB))
;<DEFINE TB2SP (CRP "AUX" (SPCTAB ,SPCTAB))
#DECL((VALUE SPCTAB CRP NSP) FIX)
;" calculate number of spaces needed to the
; reach the next tab postion"
<SET NSP <- .SPCTAB <MOD .CRP .SPCTAB>>> >
;"display a multi-line text with tab handling"
<DEFINE SWTXT3 (STR ;"INPUT TEXT STRING"
"OPT" (X 0) (Y 500) (SP 12)
"AUX" (LX .X) (LY .Y) (YSP 25) (CCHRP 1))
#DECL ((STR) STRING (X Y SP YSP CCHRP) FIX (VALUE) ATOM)
<REPEAT ((S .X) (T .Y) (ST .STR) CHR)
#DECL ((S T)FIX (ST) STRING (CHR) CHARACTER)
<COND (<EMPTY? .ST> <RETURN ,NULL>)
(T <SET CHR <1 .ST>>)>
<COND (<==? .CHR <ASCII 13>> ;" CR HANDLER "
<SET CCHRP 1> <SET S .LX>) ;" RESET TO BEGINNING OF LINE"
(<==? .CHR <ASCII 10>> <SET T <- .T .YSP>>) ;" LF HANDLER"
(<==? .CHR <ASCII 09>> ;" TAB HANDLER"
<SET CCHRP <TABPOS .CCHRP>> ;" CALC NEW LINE POS"
<SET S <+ .X <* .SP .CCHRP>> >) ;" CALC NEW X POS"
(T <CHARGE .CHR .S .T> ;"DRAW CHAR & INC X POSITION,"
<SET S <+ .S .SP>>)> ;"ONLY IF CHAR ISN'T SPECIAL"
<SET CCHRP <+ .CCHRP 1>> ;"INC CHAR COUNT ON THE LINE "
<COND (<G? .S 1000> <SET S 0> <SET T <- .T .YSP>>)>
<SET ST <REST .ST>> >>
<SETG SPCTAB 8> ;"SPACES PER TAB"
<DEFINE TB2SP (CRP "AUX" (SPCTAB ,SPCTAB) NSP)
;" Calc # of spaces to next tab stop"
#DECL((VALUE SPCTAB CRP NSP) FIX)
<SET NSP <- .SPCTAB <MOD .CRP ,SPCTAB>>>>
<DEFINE TABPOS (CRP)
;" Calc line position off tab stop"
#DECL((VALUE SPCTABCRP) FIX)
<+ .CRP <TB2SP .CRP>>>
<SETG TSTSTR6 "
000000000111111111122222222223333333333444444444455555555556666666666
123456789012345678901234567890123456789012345678901234567890123456789
0 1 2 3 4 5 6 7 8
0 2 4 6 8
0 3 6 8
0 4 8
">
<DEFINE TABTST ("OPT" (X 100) (Y 500)) <SWTXT3 ,TSTSTR6 .X .Y>>
<SETG TSTSTR "THIS IS A TEST OF