;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*- ;;; Patch file for System version 124.57 ;;; Reason: ;;; si:print-character and format's ~C control option blew up when given ;;; character objects with weird mouse buttons. ;;; Written 14-Jun-88 12:41:34 by pld (Peter L. DeWolf) at site Gigamos Cambridge ;;; while running on Azathoth from band 1 ;;; with Experimental System 124.56, 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.1, microcode 1758, SDU Boot Tape 3.14, SDU ROM 8. ; From modified file DJ: L.IO; PRINT.LISP#221 at 14-Jun-88 12:56:22 #8R SYSTEM-INTERNALS#: #!:ZL (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: IO; PRINT  " (DEFUN PRINT-CHARACTER (CHAR STREAM &AUX (*PRINT-BASE* 10.) (*PRINT-RADIX* NIL) (*NOPOINT T)) (IF (NOT *PRINT-ESCAPE*) (SEND STREAM :TYO (CHAR-INT CHAR)) (SEND STREAM :STRING-OUT (CAR (PTTBL-CHARACTER *READTABLE*))) (IF (NOT (ZEROP (CHAR-FONT CHAR))) (PRIN1 (CHAR-FONT CHAR) STREAM)) (SEND STREAM :STRING-OUT (CDR (PTTBL-CHARACTER *READTABLE*))) (LET ((BITS (CHAR-BITS CHAR)) (CODE (CHAR-CODE CHAR))) (SEND STREAM :STRING-OUT (NTH BITS '("" "c-" "m-" "c-m-" "s-" "c-s-" "m-s-" "c-m-s-" "h-" "c-h-" "m-h-" "c-m-h-" "s-h-" "c-s-h-" "m-s-h-" "c-m-s-h-"))) (COND ((TV:CHAR-MOUSE-P CHAR) (SEND STREAM :STRING-OUT "Mouse-") (let* ((bits (LDB %%KBD-MOUSE-BUTTON char)) (chname (nth bits '("Left-" "Middle-" "Right-")))) (if chname (SEND stream :STRING-OUT chname) (progn (send stream :string-out "Button:") (prin1 bits stream) (send stream :string-out "-")))) (PRIN1 (1+ (LDB %%KBD-MOUSE-N-CLICKS CHAR)) STREAM)) (T (LET ((CHNAME (FORMAT:OCHAR-GET-CHARACTER-NAME CODE))) (IF CHNAME (SEND STREAM :STRING-OUT CHNAME) (AND ( BITS 0) (CHARACTER-NEEDS-QUOTING-P CODE) (SEND STREAM :TYO (PTTBL-SLASH *READTABLE*))) (SEND STREAM :TYO CODE)))))))) )) ; From modified file DJ: L.IO; FORMAT.LISP#273 at 14-Jun-88 12:56:28 #10R FORMAT#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "FORMAT"))) (COMPILER::PATCH-SOURCE-FILE "SYS: IO; FORMAT  " (DEFUN FORMAT-CTL-CHARACTER (ARG IGNORE &AUX CHNAME BITS LOWER-CASE) (WHEN (EQ (CAR-SAFE ARG) ':MOUSE-BUTTON) (SETQ ARG (CADR ARG))) (SETQ ARG (CLI:CHARACTER ARG) BITS (CHAR-BITS ARG)) (FLET ((PRINT-BITS (BITS) (AND (BIT-TEST CHAR-HYPER-BIT BITS) (SEND *STANDARD-OUTPUT* :STRING-OUT "Hyper-")) (AND (BIT-TEST CHAR-SUPER-BIT BITS) (SEND *STANDARD-OUTPUT* :STRING-OUT "Super-")) (AND (BIT-TEST CHAR-CONTROL-BIT BITS) (SEND *STANDARD-OUTPUT* :STRING-OUT "Control-")) (AND (BIT-TEST CHAR-META-BIT BITS) (SEND *STANDARD-OUTPUT* :STRING-OUT "Meta-")))) (COND ((TV:CHAR-MOUSE-P ARG) (IF (AND (NOT *COLON-FLAG*) *ATSIGN-FLAG*) (PRINC "#\\")) (PRINT-BITS BITS) (SETF (CHAR-BITS ARG) 0) (IF (AND (NOT *COLON-FLAG*) *ATSIGN-FLAG*) (IF (SETQ CHNAME (FORMAT-GET-CHARACTER-NAME ARG)) (PRINC CHNAME) (FORMAT-ERROR "~O unknown mouse character given to ~~@C" ARG)) (progn (SEND *STANDARD-OUTPUT* :STRING-OUT "Mouse-") (if (setq chname (nth (setq bits (LDB %%KBD-MOUSE-BUTTON ARG)) '("Left" "Middle" "Right"))) (SEND *STANDARD-OUTPUT* :STRING-OUT chname) (progn (send *standard-output* :string-out "Button:") (prin1 bits))) (IF (SETQ CHNAME (nth (SETQ BITS (LDB %%KBD-MOUSE-N-CLICKS ARG)) '("" "-Twice" "-Thrice"))) (SEND *STANDARD-OUTPUT* :STRING-OUT CHNAME) (progn (SEND *STANDARD-OUTPUT* :TYO #\-) (ENGLISH-PRINT (1+ BITS)) (SEND *STANDARD-OUTPUT* :STRING-OUT "-times")))))) ((NOT *COLON-FLAG*) ;; If @ flag or if control bits, we want to use characters' names. (IF (OR *ATSIGN-FLAG* (NOT (ZEROP BITS))) (SETQ CHNAME (FORMAT-GET-CHARACTER-NAME (CHAR-CODE ARG)))) ;; Print an appropriate reader macro if @C. (IF *ATSIGN-FLAG* (PRINC "#\\")) (UNLESS (ZEROP BITS) (SEND *STANDARD-OUTPUT* :STRING-OUT (AREF #("" "c-" "m-" "c-m-" "s-" "c-s-" "m-s-" "c-m-s-" "h-" "c-h-" "m-h-" "c-m-h-" "s-h-" "c-s-h-" "m-s-h-" "c-m-s-h-") BITS)) (IF ( (CHAR-CODE #\a) (SETQ LOWER-CASE (CHAR-CODE ARG)) (CHAR-CODE #\z)) (SEND *STANDARD-OUTPUT* :STRING-OUT "sh-") (SETQ LOWER-CASE NIL))) (COND (CHNAME (SETQ CHNAME (SYMBOL-NAME CHNAME)) ;; are we CONSING yet? (SEND *STANDARD-OUTPUT* :TYO (CHAR-UPCASE (CHAR CHNAME 0))) (DO ((LEN (LENGTH CHNAME)) (I 1 (1+ I))) ((= I LEN)) (SEND *STANDARD-OUTPUT* :TYO (CHAR-DOWNCASE (CHAR CHNAME I))))) (T (IF *ATSIGN-FLAG* (IF (SI::CHARACTER-NEEDS-QUOTING-P (CHAR-CODE ARG)) (SEND *STANDARD-OUTPUT* :TYO (SI::PTTBL-SLASH *READTABLE*))) (IF LOWER-CASE (SETQ ARG (CHAR-UPCASE (INT-CHAR LOWER-CASE))))) (SEND *STANDARD-OUTPUT* :TYO (CHAR-CODE ARG))))) (T (PRINT-BITS BITS) (SETQ ARG (INT-CHAR (CHAR-CODE ARG))) (COND ((SETQ CHNAME (FORMAT-GET-CHARACTER-NAME ARG)) (SETQ CHNAME (SYMBOL-NAME CHNAME)) (SEND *STANDARD-OUTPUT* :TYO (CHAR-UPCASE (CHAR CHNAME 0))) (DO ((LEN (LENGTH CHNAME)) (I 1 (1+ I))) ((= I LEN)) (SEND *STANDARD-OUTPUT* :TYO (CHAR-DOWNCASE (CHAR CHNAME I)))) (AND *ATSIGN-FLAG* (FORMAT-PRINT-TOP-CHARACTER ARG))) ((AND *ATSIGN-FLAG* (CHAR< ARG #\SPACE) (CHAR ARG #\)) (SEND *STANDARD-OUTPUT* :TYO ARG) (FORMAT-PRINT-TOP-CHARACTER ARG)) ((AND (LOWER-CASE-P ARG) (NOT (ZEROP BITS))) (SEND *STANDARD-OUTPUT* :STRING-OUT "Shift-") (SEND *STANDARD-OUTPUT* :TYO (CHAR-UPCASE ARG))) (T (SEND *STANDARD-OUTPUT* :TYO ARG))))))) ))