;;; -*- Mode:Lisp; Readtable:T; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 124.70
;;; Reason:
;;;  Make FORMAT-STRING-STREAM ignore a :beep operation.
;;;  Make FQUERY's readline function only call the stream with a :rubout-handler
;;;  operation if the stream can handle it.
;;; Written 17-Jun-88 17:34:39 by pld (Peter L. DeWolf) at site Gigamos Cambridge
;;; while running on Cthulhu from band 1
;;; with Experimental System 124.65, Experimental Local-File 74.2, Experimental File-Server 23.1, Experimental Unix-Interface 12.0, Experimental ZMail 72.0, Experimental Tape 23.6, Experimental Lambda-Diag 16.2, microcode 1760, SDU Boot Tape 3.14, SDU ROM 8, the old ones.



; From modified file DJ: L.IO1; FQUERY.LISP#58 at 17-Jun-88 17:35:06
#8R FORMAT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "FORMAT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: IO1; FQUERY  "

(DEFSELECT READLINE-FQUERY-FUNCTION
  (:READ (STREAM &AUX STRING)
    (labels ((read-it ()
	      (if (operation-handled-p stream :rubout-handler)
		  (SETQ STRING (SEND STREAM :RUBOUT-HANDLER '((:EDITING-COMMAND #/HELP)	;Just in case
							      (:PROMPT FQUERY-PROMPT)
							      (:DONT-SAVE T))
				     'FQUERY-READLINE-WITH-HELP STREAM))
		(setq string (send stream :line-in)))
	      (STRING-TRIM '(#/SP) STRING)))
      (if (null fquery-timeout)
	  (read-it)
	(with-timeout (fquery-timeout
			 (values fquery-default-value t))
	  (read-it)))))
  (:ECHO (ECHO STREAM)
    ECHO STREAM)
  (:MEMBER (STRING LIST)
    (MEM #'STRING-EQUAL STRING LIST)))

))

; From modified file DJ: L.IO; FORMAT.LISP#275 at 17-Jun-88 17:35:16
#10R FORMAT#: #!:CL
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "FORMAT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: IO; FORMAT  "

(DEFSELECT (FORMAT-STRING-STREAM FORMAT-STRING-STREAM-DEFAULT-HANDLER)
  ((:TYO :WRITE-CHAR) (CH)
   (OR *FORMAT-STRING* (SETQ *FORMAT-STRING* (MAKE-FORMAT-STRING)))
   (VECTOR-PUSH-EXTEND CH *FORMAT-STRING*))

  (:STRING-OUT (STRING &OPTIONAL (FIRST 0) LAST &AUX NEW-LENGTH)
   (OR *FORMAT-STRING* (SETQ *FORMAT-STRING* (MAKE-FORMAT-STRING)))
   (SETQ LAST (OR LAST (LENGTH STRING)))
   (SETQ NEW-LENGTH (+ (FILL-POINTER *FORMAT-STRING*) (- LAST FIRST)))
   (AND (< (ARRAY-LENGTH *FORMAT-STRING*) NEW-LENGTH)
	(ADJUST-ARRAY-SIZE *FORMAT-STRING* NEW-LENGTH))
   (COPY-ARRAY-PORTION STRING FIRST LAST
		       *FORMAT-STRING* (FILL-POINTER *FORMAT-STRING*) NEW-LENGTH)
   (SETF (FILL-POINTER *FORMAT-STRING*) NEW-LENGTH))

  (:READ-CURSORPOS (&OPTIONAL (MODE :CHARACTER) &AUX POS)
   (OR *FORMAT-STRING* (SETQ *FORMAT-STRING* (MAKE-FORMAT-STRING)))
   (OR (EQ MODE ':CHARACTER)
       (FERROR "Strings only have a width in ~S, not ~S" :CHARACTER MODE))
   (SETQ POS (STRING-REVERSE-SEARCH-CHAR #\NEWLINE *FORMAT-STRING*))
   (VALUES (- (LENGTH *FORMAT-STRING*) (IF POS (+ POS 1) 0))
	   0))

  (:INCREMENT-CURSORPOS (DX DY &OPTIONAL (MODE :CHARACTER) &AUX NEWLEN)
   (OR *FORMAT-STRING* (SETQ *FORMAT-STRING* (MAKE-FORMAT-STRING)))
   (UNLESS (EQ MODE ':CHARACTER)
     (FERROR "Strings can only have a width in ~S, not ~S" :CHARACTER MODE))
   (OR (AND (ZEROP DY) (NOT (MINUSP DX)))
       (FERROR "Cannot do this ~S" :INCREMENT-CURSORPOS))
   (SETQ NEWLEN (+ (LENGTH *FORMAT-STRING*) DX))
   (AND (< (ARRAY-LENGTH *FORMAT-STRING*) NEWLEN)
	(ADJUST-ARRAY-SIZE *FORMAT-STRING* NEWLEN))
   (DO ((I (LENGTH *FORMAT-STRING*) (1+ I)))
       (( I NEWLEN))
     (SETF (CHAR *FORMAT-STRING* I) #\SPACE))
   (SETF (FILL-POINTER *FORMAT-STRING*) NEWLEN))

  (:SET-CURSORPOS (X Y &OPTIONAL (MODE :CHARACTER) &AUX POS DELTA NEWLEN)
   (OR *FORMAT-STRING* (SETQ *FORMAT-STRING* (MAKE-FORMAT-STRING)))
   (UNLESS (EQ MODE :CHARACTER)
     (FERROR "Strings can only have a width in ~S, not ~S" :CHARACTER MODE))
   (SETQ POS (STRING-REVERSE-SEARCH-SET '(#\NEWLINE #\LINE #\FORM) *FORMAT-STRING*)
	 DELTA (- X (- (LENGTH *FORMAT-STRING*) (IF POS (+ POS 1) 0))))
   (OR (AND (ZEROP Y) (PLUSP DELTA))
       (FERROR "Cannot do this ~S" :SET-CURSORPOSE))
   (SETQ NEWLEN (+ (LENGTH *FORMAT-STRING*) DELTA))
   (AND (< (ARRAY-LENGTH *FORMAT-STRING*) NEWLEN)
	(ADJUST-ARRAY-SIZE *FORMAT-STRING* NEWLEN))
   (DO ((I (LENGTH *FORMAT-STRING*) (1+ I)))
       (( I NEWLEN))
     (SETF (CHAR *FORMAT-STRING* I) #\SPACE))
   (SETF (FILL-POINTER *FORMAT-STRING*) NEWLEN))
  (:UNTYO-MARK () (FILL-POINTER *FORMAT-STRING*))
  (:UNTYO (MARK) (SETF (FILL-POINTER *FORMAT-STRING*) MARK))
  (EXTRACT-STRING ()
   (PROG1 *FORMAT-STRING*
	  (SETQ *FORMAT-STRING* NIL)))
  (:FRESH-LINE ()
   (WHEN (NOT (OR (NULL *FORMAT-STRING*)
		  (ZEROP (LENGTH *FORMAT-STRING*))
		  (CHAR= (CHAR *FORMAT-STRING* (1- (LENGTH *FORMAT-STRING*))) #\NEWLINE)))
     (VECTOR-PUSH-EXTEND #\NEWLINE *FORMAT-STRING*)
     T))
  (:beep (ignore)))

))
