47 lines
1 KiB
Text
47 lines
1 KiB
Text
get "libhdr"
|
|
|
|
// Add a character to the end of a string
|
|
let addch(s, ch) be
|
|
$( s%0 := s%0 + 1
|
|
s%(s%0) := ch
|
|
$)
|
|
// Add s2 to the end of s1
|
|
and adds(s1, s2) be
|
|
for i = 1 to s2%0 do
|
|
addch(s1, s2%i)
|
|
|
|
// Comma quibbling on strs, which should be a 0-terminated
|
|
// vector of string pointers.
|
|
let quibble(strs, buf) = valof
|
|
$( buf%0 := 0
|
|
addch(buf, '{')
|
|
until !strs = 0 do
|
|
$( addch(buf, '"')
|
|
adds(buf, !strs)
|
|
addch(buf, '"')
|
|
unless strs!1 = 0
|
|
test strs!2 = 0
|
|
then adds(buf, " and ")
|
|
else adds(buf, ", ")
|
|
strs := strs + 1
|
|
$)
|
|
addch(buf, '}')
|
|
resultis buf
|
|
$)
|
|
|
|
let start() be
|
|
$( let words = vec 4
|
|
let buf = vec 63
|
|
|
|
words!0 := 0
|
|
writef("%S*N", quibble(words, buf))
|
|
|
|
words!0 := "ABC" ; words!1 := 0
|
|
writef("%S*N", quibble(words, buf))
|
|
|
|
words!1 := "DEF" ; words!2 := 0
|
|
writef("%S*N", quibble(words, buf))
|
|
|
|
words!2 := "G" ; words!3 := "H" ; words!4 := 0
|
|
writef("%S*N", quibble(words, buf))
|
|
$)
|