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)) $)