;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*- ;;; Patch file for System version 123.232 ;;; Reason: ;;; (:method tv:sheet :string-out) has direct-to-screen code. ;;; (tv:sheet-string-out) calls the :string-out method. ;;; This is exactly backwards -- things like MORE processing ;;; expect (tv:sheet-string-out) to go directly to the screen. ;;; Finally, zwei:editor-stream-mixin has a hope of doing MORE ;;; processing correctly -- except that its :set-cursorpos and ;;; :increment-cursorpos methods were broken. Fixed.... ;;; Written 12-Apr-88 13:09:47 by pld at site Gigamos Cambridge ;;; while running on Jack Flanders from band 2 ;;; with Experimental System 123.231, Experimental Local-File 73.4, Experimental FILE-Server 22.2, Experimental Unix-Interface 11.0, Experimental KERMIT 34.3, Experimental ZMail 71.0, Experimental Lambda-Diag 15.0, Experimental Tape 21.6, microcode 1755, SDU Boot Tape 3.14, SDU ROM 8, WKF PFC. ; From file DJ: L.WINDOW; SHWARM.LISP#371 at 12-Apr-88 13:09:48 #8R TV#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "TV"))) (COMPILER::PATCH-SOURCE-FILE "SYS: WINDOW; SHWARM  " (DEFUN SHEET-STRING-OUT (SHEET STRING &OPTIONAL (START 0) (STOP NIL)) "Output STRING or portion thereof on SHEET." (WHEN (SYMBOLP STRING) (SETQ STRING (SYMBOL-NAME STRING))) (WHEN (NULL START) (SETQ START 0)) (WHEN (NULL STOP) (SETQ STOP (ARRAY-ACTIVE-LENGTH STRING))) (DO ((XLIM (IF (ZEROP (SHEET-RIGHT-MARGIN-CHARACTER-FLAG sheet)) (SHEET-INSIDE-RIGHT sheet) (- (SHEET-INSIDE-RIGHT sheet) (sheet-CHAR-WIDTH sheet)))) (new-x) (STOPPED)) (()) (PREPARE-SHEET (SHEET) (SHEET-HANDLE-EXCEPTIONS-IF-NECESSARY sheet) (MULTIPLE-VALUE-SETQ (STOPPED new-X) (%DRAW-STRING SHEET (sheet-CHAR-ALUF sheet) (sheet-CURSOR-X sheet) (sheet-CURSOR-Y sheet) STRING (sheet-CURRENT-FONT sheet) START STOP XLIM)) (setf (sheet-cursor-x sheet) new-x) (COND ((> STOPPED STOP) ;All characters drawn. (RETURN NIL)) ((EQ (ZL:AREF STRING STOPPED) #/NEWLINE) ;Stopped at newline. (SEND SHEET :END-OF-LINE-EXCEPTION) (SETQ START (1+ STOPPED))) (T ;Stopped at horizontal limit. (SEND SHEET :END-OF-LINE-EXCEPTION) (SETQ START STOPPED)))))) )) ; From file DJ: L.WINDOW; SHWARM.LISP#371 at 12-Apr-88 13:09:57 #8R TV#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "TV"))) (COMPILER::PATCH-SOURCE-FILE "SYS: WINDOW; SHWARM  " (DEFMETHOD (SHEET :STRING-OUT) (STRING &OPTIONAL START STOP) (sheet-string-out self string start stop)) )) ; From modified file DJ: L.ZWEI; STREAM.LISP#182 at 12-Apr-88 16:44:00 #8R ZWEI#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "ZWEI"))) (COMPILER::PATCH-SOURCE-FILE "SYS: ZWEI; STREAM  " (DEFMETHOD (EDITOR-STREAM-MIXIN :SET-CURSORPOS) (X Y &OPTIONAL (UNITS ':PIXEL)) (SELECTQ UNITS (:PIXEL) (:CHARACTER (AND X (SETQ X (* X (TV:SHEET-CHAR-WIDTH (WINDOW-SHEET *STREAM-SHEET*))))) (AND Y (SETQ Y (* Y (TV:SHEET-LINE-HEIGHT (WINDOW-SHEET *STREAM-SHEET*)))))) (OTHERWISE (FERROR NIL "~S is not a known unit." UNITS))) (STREAM-REDISPLAY) (let ((*window* *stream-sheet*)) (MOVE-BP *STREAM-BP* (BP-FROM-COORDS *STREAM-SHEET* X Y))) (MUST-REDISPLAY *STREAM-SHEET* DIS-TEXT) (STREAM-REDISPLAY)) )) ; From modified file DJ: L.ZWEI; STREAM.LISP#182 at 12-Apr-88 16:44:00 #8R ZWEI#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "ZWEI"))) (COMPILER::PATCH-SOURCE-FILE "SYS: ZWEI; STREAM  " (DEFMETHOD (EDITOR-STREAM-MIXIN :INCREMENT-CURSORPOS) (DX DY &OPTIONAL (UNITS ':PIXEL)) (when (plusp (tv:sheet-more-flag *stream-sheet*)) (send *stream-sheet* :more-exception)) (multiple-value-bind (x y) (send self :read-cursorpos units) (send self :set-cursorpos (+ x dx) (+ y dy) units))) ))