<REPLACE-DEFINITION READLINE <ROUTINE READLINE ("OPT" PROMPT?) <COND (.PROMPT? <TELL CR "> ">)> <SETG READBUF ,KBD-READBUF> <SETG LEXBUF ,KBD-LEXBUF> <PUTB ,READBUF 0 <- ,READBUF-SIZE 2>> ;"The read buffer has a slightly different format on V3." <VERSION? (ZIP) (ELSE <PUTB ,READBUF 1 0> <UPDATE-STATUS-LINE>)> <DO-READ ,READBUF ,LEXBUF> <MASSAGE-BUFS> <RTRUE>>> <ROUTINE MASSAGE-BUFS ("AUX" (LEN <GETB ,LEXBUF 1>) WLEN WOFF) ;"Loop over all words, looking for ORGAN" <REPEAT ((I 1)) <COND (<G? .I .LEN> <RETURN>) (<=? <GETWORD? .I> ,W?ORGAN> ;"If the word is >5 chars long, and its 6th character is '-', replace it with the fake word O.GRINDER." <SET WLEN <GETB ,LEXBUF <* .I 4>>> <SET WOFF <GETB ,LEXBUF <+ <* .I 4> 1>>> <COND (<AND <G? .WLEN 5> <=? <GETB ,READBUF <+ .WOFF 5>> !\->> <PUT ,LEXBUF <- <* .I 2> 1> ,W?GRINDER>)>)> <SET I <+ .I 1>>>>