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