From 499e3ab77acc12632875f9c4cc7145eab992b84a Mon Sep 17 00:00:00 2001 From: rmkaplan <69548581+rmkaplan@users.noreply.github.com> Date: Mon, 9 Jun 2025 20:40:16 -0700 Subject: [PATCH 1/7] PDFSTREAM opens the scratch stream (#2184) --- library/PDFSTREAM | 20 ++++++++++---------- library/PDFSTREAM.LCOM | Bin 5663 -> 5705 bytes 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/library/PDFSTREAM b/library/PDFSTREAM index 9a4533c2..414efd3d 100644 --- a/library/PDFSTREAM +++ b/library/PDFSTREAM @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "23-Feb-2025 12:18:57" {WMEDLEY}PDFSTREAM.;62 14729 +(FILECREATED " 5-Jun-2025 08:42:11" {WMEDLEY}PDFSTREAM.;64 14885 :EDIT-BY rmk :CHANGES-TO (FNS OPEN-PDF-STREAM) - :PREVIOUS-DATE "25-Dec-2024 14:26:23" {WMEDLEY}PDFSTREAM.;60) + :PREVIOUS-DATE "23-Feb-2025 12:18:57" {WMEDLEY}PDFSTREAM.;62) (PRETTYCOMPRINT PDFSTREAMCOMS) @@ -153,7 +153,8 @@ (DEFINEQ (OPEN-PDF-STREAM - [LAMBDA (FILE OPTIONS) (* ; "Edited 23-Feb-2025 12:18 by rmk") + [LAMBDA (FILE OPTIONS) (* ; "Edited 5-Jun-2025 08:41 by rmk") + (* ; "Edited 23-Feb-2025 12:18 by rmk") (* ; "Edited 23-Sep-2023 15:38 by rmk") (* ; "Edited 22-Sep-2023 11:04 by rmk") (* ; "Edited 24-Jun-2023 14:49 by rmk") @@ -165,8 +166,6 @@ (* ;;  "Simplest thing for now is to just add an extra field at the end of the \POSTSCRIPTDATA record.") - (* ;; "") - (if [AND NIL (EQ 'LPT (FILENAMEFIELD FILE 'HOST] then (* ;; "If FILE is on the LPT device, we could just ssume that it can be printed directly, no point in converting. But then we would alo have to lie and give it a PDF extension so it thinks that we are heading to a PDF printer.") @@ -178,8 +177,9 @@ (* ;; "Device NULL used by TMAX, maybe others, to get page number for table of contents, index. Nothing to convert") (OPENPOSTSCRIPTSTREAM FILE OPTIONS) - elseif (SETQ FILE (OR (AND (NEQ FILE T) - (OUTFILEP FILE)) + elseif (SETQ FILE (OR [AND (NEQ FILE T) + (OR (OUTFILEP FILE) + (OPENSTREAM FILE 'OUTPUT] (ERROR "PDF target file not found" FILE))) then (CL:UNLESS (ASSOC (PDFCONVERTER) PDF-CONVERTER-TEMPLATES) @@ -293,7 +293,7 @@ ) (DECLARE%: DONTCOPY (FILEMAP (NIL (3263 5877 (PDFFILEP 3273 . 4187) (PDF.HARDCOPYW 4189 . 4787) (PDF.TEXT 4789 . 5506) ( -PDF.TEDIT 5508 . 5875)) (6317 13806 (OPEN-PDF-STREAM 6327 . 8892) (CLOSE-PDF-STREAM 8894 . 10181) ( -PS-TO-PDF 10183 . 13804)) (13807 14371 (SEE-PDF 13817 . 14369)) (14422 14706 (PDFCONVERTER 14432 . -14704))))) +PDF.TEDIT 5508 . 5875)) (6317 13962 (OPEN-PDF-STREAM 6327 . 9048) (CLOSE-PDF-STREAM 9050 . 10337) ( +PS-TO-PDF 10339 . 13960)) (13963 14527 (SEE-PDF 13973 . 14525)) (14578 14862 (PDFCONVERTER 14588 . +14860))))) STOP diff --git a/library/PDFSTREAM.LCOM b/library/PDFSTREAM.LCOM index 69a0da4518793beec9df304f37faadce5ec5db6b..7d4e4dbe68f42494f7dc97edf6501c961d913022 100644 GIT binary patch delta 491 zcmZvY!D|yi6vo|3yO@KtAQS__$3RO9*|2XjyV>1Sx5=zV(w${8(TkVbgfyg$!784_ zThEp8(vzMUaq0zr5WOnrP7myDy;m?ZD+A9><}1bD=v$E^Tl-r7L^l zE->OgvfR2|DTv9ex=)EGkbPbDH3A>Sf+zWSA$!__vJn%o`s{?+qCI&GNn)g1U5aBf OacfHv&ClJ_$NvD)NP0m4 delta 410 zcmZvWJxjw-6o!eVEp`w@Q5WHmK`b`uy|?*jf_K9Tc3-Iq!4M`<}PbsC2W-N7BNutFDnE6l82EUeZ`m_@FQFzZQmEEUbEdgVq^!BI@#c$;<)P zOk(kUX=6@T+~jZ)stM61hD|EN0Z3^4EA{k^{5D^j(#-Ko{(9yUiT-T^ From 60195c4f31cb252d3ec2aa4a333da0ede874f13c Mon Sep 17 00:00:00 2001 From: Arun Welch Date: Tue, 10 Jun 2025 18:50:06 -0500 Subject: [PATCH 2/7] Fixed issue 1883 Fixed issue 1883, error in printing class from CLOS browser --- clos/NEW-CLOS-BROWSER | 77 +++++++++++++++++++----------------- clos/NEW-CLOS-BROWSER.DFASL | Bin 62124 -> 62503 bytes 2 files changed, 40 insertions(+), 37 deletions(-) diff --git a/clos/NEW-CLOS-BROWSER b/clos/NEW-CLOS-BROWSER index 8ea10081..9d5f754e 100644 --- a/clos/NEW-CLOS-BROWSER +++ b/clos/NEW-CLOS-BROWSER @@ -1,18 +1,18 @@ -(DEFINE-FILE-INFO PACKAGE (PROGN (DEFPACKAGE "CLOS-BROWSER" (USE "CLOS") (EXPORT "CLOS-ICON" -"CLOS-BROWSER" "ADD-BROWSER-METHOD" "BROWSE-CLASS")) (CLFIND-PACKAGE "USER")) READTABLE "XCL" BASE -10) +(DEFINE-FILE-INFO PACKAGE (PROGN (DEFPACKAGE "CLOS-BROWSER" (USE "CLOS" "LISP") (EXPORT "CLOS-ICON" + "CLOS-BROWSER" "ADD-BROWSER-METHOD" "BROWSE-CLASS")) (CLFIND-PACKAGE "USER")) READTABLE "XCL" BASE + 10) -(IL:FILECREATED " 5-Dec-2023 12:07:41" IL:{CLOS}NEW-CLOS-BROWSER.\;3 91622 +(IL:FILECREATED "28-Apr-2025 18:32:38"  +IL:|{DSK}arunwelch>DOCUMENTS>MEDLEY-WORKSPACE>RELEASE>NEW-CLOS-BROWSER.;4| 91934 - :EDIT-BY "mth" + :EDIT-BY "akw" :CHANGES-TO (IL:PROPS (IL:NEW-CLOS-BROWSER IL:MAKEFILE-ENVIRONMENT)) - :PREVIOUS-DATE " 5-Dec-2023 00:58:05" IL:{CLOS}NEW-CLOS-BROWSER.\;2) + :PREVIOUS-DATE "26-Apr-2025 17:16:46" +IL:|{DSK}arunwelch>DOCUMENTS>MEDLEY-WORKSPACE>RELEASE>NEW-CLOS-BROWSER.;3|) -; Copyright (c) 1991, 2020, 2023 by Venue. - (IL:PRETTYCOMPRINT IL:NEW-CLOS-BROWSERCOMS) (IL:RPAQQ IL:NEW-CLOS-BROWSERCOMS @@ -275,7 +275,7 @@ (IL:PUTPROPS IL:NEW-CLOS-BROWSER IL:MAKEFILE-ENVIRONMENT (:PACKAGE (PROGN (XCL:DEFPACKAGE "CLOS-BROWSER" - (:USE "CLOS") + (:USE "CLOS" "LISP") (:EXPORT "CLOS-ICON" "CLOS-BROWSER" "ADD-BROWSER-METHOD" @@ -1159,9 +1159,14 @@ Below this line operates on individual slots and methods." (DOCUMENTATION (SLOT-VALUE CLOS-BROWSER::SELF 'CLOS-BROWSER::CLASS))) (DEFMETHOD CLOS-BROWSER::PRINT-CLASS ((CLOS-BROWSER::SELF CLOS-BROWSER::CLOS-BROWSER-NODE)) - (PPRINT (IL:GETDEF (SLOT-VALUE (SLOT-VALUE CLOS-BROWSER::SELF `CLOS-BROWSER::CLASS) - 'CLOS::NAME) - 'CLOS-BROWSER::CLASSES))) + (IF (IL:HASDEF (SLOT-VALUE (SLOT-VALUE CLOS-BROWSER::SELF 'CLOS-BROWSER::CLASS) + 'CLOS::NAME) + 'CLOS-BROWSER::CLASSES) + (PPRINT (IL:GETDEF (SLOT-VALUE (SLOT-VALUE CLOS-BROWSER::SELF `CLOS-BROWSER::CLASS) + 'CLOS::NAME) + 'CLOS-BROWSER::CLASSES)) + (IL:PROMPTPRINT "No Printable Definition for the class " (SLOT-VALUE CLOS-BROWSER::SELF + 'WEB::NAME)))) (DEFMETHOD CLOS-BROWSER::SPECIALIZE-CLASS ((CLOS-BROWSER::NODE CLOS-BROWSER::CLOS-BROWSER-NODE) &OPTIONAL CLOS-BROWSER::FORM CLOS-BROWSER::NEW-CLASS-NAME) @@ -1211,7 +1216,8 @@ Below this line operates on individual slots and methods." (RETURN)))))) (IL:SETCURSOR CLOS-BROWSER::ORIGINALCURSOR)))))) -(DEFUN CLOS-BROWSER::LYRIC-COMPLETE-SPECIALIZE (IGNORE STRUCTURE) +(DEFUN CLOS-BROWSER::LYRIC-COMPLETE-SPECIALIZE (IGNORE STRUCTURE) + (IL:* IL:\; "Edited 26-Apr-2025 14:31 by arunwelch") (LET ((CLOS-BROWSER::ORIGINALCURSOR (IL:CURSOR))) (UNWIND-PROTECT (PROGN (IL:SETCURSOR IL:WAITINGCURSOR) @@ -1224,8 +1230,7 @@ Below this line operates on individual slots and methods." (IL:* IL:|;;| "check for bug") (WHEN (SYMBOLP CLOS-BROWSER::SUB-CLASS) - (SETQ CLOS-BROWSER::SUB-CLASS (CLOS::SYMBOL-CLASS CLOS-BROWSER::SUB-CLASS - ))) + (SETQ CLOS-BROWSER::SUB-CLASS (FIND-CLASS CLOS-BROWSER::SUB-CLASS))) (DOLIST (CLOS-BROWSER::BROWSER (SLOT-VALUE CLOS-BROWSER:CLOS-ICON 'CLOS-BROWSER::CLASS-BROWSERS)) (DOLIST (CLOS-BROWSER::SUPER-CLASS (SLOT-VALUE CLOS-BROWSER::SUB-CLASS @@ -1387,14 +1392,12 @@ Below this line operates on individual slots and methods." (0 (FORMAT T "Unspecialized methods cannot be copied. ~A" (CLOS::FULL-METHOD-NAME CLOS-BROWSER::METHOD NIL))) (1 (SETQ CLOS-BROWSER::FROM-CLASS (CAR CLOS-BROWSER::NON-T-CLASSES))) - (OTHERWISE (SETQ CLOS-BROWSER::FROM-CLASS (CLOS::SYMBOL-CLASS - (IL:PROMPTFORWORD (FORMAT NIL + (OTHERWISE (SETQ CLOS-BROWSER::FROM-CLASS (FIND-CLASS (IL:PROMPTFORWORD + (FORMAT NIL "Which class in ~A do you wish to move from?" - ( - CLOS::FULL-METHOD-NAME - - CLOS-BROWSER::METHOD - NIL)))))))) + (CLOS::FULL-METHOD-NAME + CLOS-BROWSER::METHOD + NIL)))))))) (IL:* IL:|;;| "should contain from-class. If it is not the same, abort.") @@ -1465,7 +1468,7 @@ Below this line operates on individual slots and methods."  "fix bug in the inconsistent way CLOS objects store T class specializers and do method lookup.") (WHEN (EQ CLOS-BROWSER::CLASS T) - (SETQ CLOS-BROWSER::CLASS (CLOS::SYMBOL-CLASS T))) + (SETQ CLOS-BROWSER::CLASS (FIND-CLASS T))) (LET ((CLOS-BROWSER::NODE (CLOS-BROWSER::BROWSER-CONTAINS-P CLOS-BROWSER::CLASS CLOS-BROWSER::BROWSER))) (WHEN CLOS-BROWSER::NODE @@ -1582,7 +1585,8 @@ Below this line operates on individual slots and methods." (IL:|if| PACKAGE IL:|then| (IN-PACKAGE PACKAGE)))) -(DEFUN CLOS-BROWSER::CLASSES-IN-PACKAGE (PACKAGE &OPTIONAL CLOS-BROWSER::MAP-ON-PACKAGE) +(DEFUN CLOS-BROWSER::CLASSES-IN-PACKAGE (PACKAGE &OPTIONAL CLOS-BROWSER::MAP-ON-PACKAGE) + (IL:* IL:\; "Edited 26-Apr-2025 14:25 by arunwelch") "Retrieves a list of all the classes for a given package. When map-on-package is t this can be very slow." (IL:* IL:|;;| "The maphash is always fast, whereas for some strange reason map-on-package varys among packages greatly.") @@ -1594,7 +1598,7 @@ Below this line operates on individual slots and methods." (DO-SYMBOLS (CLOS-BROWSER::SYM PACKAGE) (IF (AND (EQ (SYMBOL-PACKAGE CLOS-BROWSER::SYM) PACKAGE) - (CLOS::SYMBOL-CLASS CLOS-BROWSER::SYM T)) + (FIND-CLASS CLOS-BROWSER::SYM T)) (PUSH CLOS-BROWSER::SYM CLOS-BROWSER::CLASSES))) (MAPHASH #'(LAMBDA (CLOS-BROWSER::KEY CLOS-BROWSER::VAL) (IF (EQ (SYMBOL-PACKAGE CLOS-BROWSER::KEY) @@ -1623,17 +1627,16 @@ Below this line operates on individual slots and methods." IL:|BackgroundMenuCommands|) (SETQ IL:|BackgroundMenu| NIL) -(IL:PUTPROPS IL:NEW-CLOS-BROWSER IL:COPYRIGHT ("Venue" 1991 2020 2023)) (IL:DECLARE\: IL:DONTCOPY - (IL:FILEMAP (NIL (11770 13440 (CLOS-BROWSER:BROWSE-CLASS 11770 . 13440)) (13442 14785 ( -CLOS-BROWSER::COLLECT-FAMILY 13442 . 14785)) (14787 16819 (CLOS-BROWSER::MAKE-NODES 14787 . 16819)) ( -16821 17496 (CLOS-BROWSER::CLOS-BROWSER-CLOSE-FN 16821 . 17496)) (17498 18430 (CLOS-BROWSER::BROWSER-CONTAINS-P - 17498 . 18430)) (42263 42587 (CLOS-BROWSER::EDIT 42263 . 42587)) (42589 48183 ( -CLOS-BROWSER::MAKE-METHOD-MENU-ITEMS 42589 . 48183)) (48185 49663 (CLOS-BROWSER::MAKE-TOP-LEVEL-METHOD-MENU-ITEMS - 48185 . 49663)) (49665 50955 (CLOS-BROWSER::MAKE-MULTI-METHOD-SUB-MENU 49665 . 50955)) (64981 65598 ( -CLOS-BROWSER::COMPLETE-ADD-METHOD 64981 . 65598)) (65600 67812 (CLOS-BROWSER::COMPLETE-SPECIALIZE -65600 . 67812)) (67814 69482 (CLOS-BROWSER::LYRIC-COMPLETE-SPECIALIZE 67814 . 69482)) (69484 69649 ( -CLOS-BROWSER::THIS-CLASS-NODE-P 69484 . 69649)) (69651 69753 (CLOS::CLASS-DIRECT-METHODS 69651 . 69753 -)) (86457 87472 (CLOS-BROWSER::REPLACE-SPECIALIZERS 86457 . 87472)) (87783 89367 (CLOS-BROWSER::IN-SELECT-PACKAGE - 87783 . 89367)) (89369 90516 (CLOS-BROWSER::CLASSES-IN-PACKAGE 89369 . 90516))))) + (IL:FILEMAP (NIL (11846 13516 (CLOS-BROWSER:BROWSE-CLASS 11846 . 13516)) (13518 14861 ( +CLOS-BROWSER::COLLECT-FAMILY 13518 . 14861)) (14863 16895 (CLOS-BROWSER::MAKE-NODES 14863 . 16895)) ( +16897 17572 (CLOS-BROWSER::CLOS-BROWSER-CLOSE-FN 16897 . 17572)) (17574 18506 (CLOS-BROWSER::BROWSER-CONTAINS-P + 17574 . 18506)) (42339 42663 (CLOS-BROWSER::EDIT 42339 . 42663)) (42665 48259 ( +CLOS-BROWSER::MAKE-METHOD-MENU-ITEMS 42665 . 48259)) (48261 49739 (CLOS-BROWSER::MAKE-TOP-LEVEL-METHOD-MENU-ITEMS + 48261 . 49739)) (49741 51031 (CLOS-BROWSER::MAKE-MULTI-METHOD-SUB-MENU 49741 . 51031)) (65408 66025 ( +CLOS-BROWSER::COMPLETE-ADD-METHOD 65408 . 66025)) (66027 68239 (CLOS-BROWSER::COMPLETE-SPECIALIZE +66027 . 68239)) (68241 69946 (CLOS-BROWSER::LYRIC-COMPLETE-SPECIALIZE 68241 . 69946)) (69948 70113 ( +CLOS-BROWSER::THIS-CLASS-NODE-P 69948 . 70113)) (70115 70217 (CLOS::CLASS-DIRECT-METHODS 70115 . 70217 +)) (86738 87753 (CLOS-BROWSER::REPLACE-SPECIALIZERS 86738 . 87753)) (88064 89648 (CLOS-BROWSER::IN-SELECT-PACKAGE + 88064 . 89648)) (89650 90900 (CLOS-BROWSER::CLASSES-IN-PACKAGE 89650 . 90900))))) IL:STOP diff --git a/clos/NEW-CLOS-BROWSER.DFASL b/clos/NEW-CLOS-BROWSER.DFASL index a3b1318329a935c168c76b3ac708fcf9b0ad39e6..358d81f0cee50235246d064f72433e53c55f49e4 100644 GIT binary patch literal 62503 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 YCK7t~fow+sN3JqHiWM;J{8wN7zrX7{#{d8T delta 20222 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 V-0A*{pn)HS!(ZN1D}B$M`(Nz{0Vx0g From d26e29f0d0456a54ca4e87af9756885b2f503614 Mon Sep 17 00:00:00 2001 From: rmkaplan <69548581+rmkaplan@users.noreply.github.com> Date: Mon, 16 Jun 2025 11:46:00 -0700 Subject: [PATCH 3/7] Collect TALK files into lispusers/talk/ (#2147) * Collect TALK files into lispusers/talk/ renamed with hyphen convention. Also pull over TALKGAP files that were previous obsolete, and remove them from obsolete/lispusers * Replace TALK.TEDIT--file got smashed * TALK.TEDIT now comments the current situation --- lispusers/TALK | 616 ----------------------------------- lispusers/talk/TALK | Bin 0 -> 36494 bytes lispusers/talk/TALK-GAP | Bin 0 -> 13280 bytes lispusers/talk/TALK-IP | Bin 0 -> 11661 bytes lispusers/talk/TALK-NS | Bin 0 -> 14457 bytes lispusers/talk/TALK-NSGAP | Bin 0 -> 16124 bytes lispusers/talk/TALK-SKETCH | Bin 0 -> 19972 bytes lispusers/talk/TALK-TEDIT | Bin 0 -> 24941 bytes lispusers/talk/TALK-TTY | Bin 0 -> 6009 bytes lispusers/talk/TALK.TEDIT | Bin 0 -> 51655 bytes obsolete/lispusers/IPTALK | 240 -------------- obsolete/lispusers/NSTALK | 319 ------------------ obsolete/lispusers/NSTALKGAP | 23 -- 13 files changed, 1198 deletions(-) delete mode 100644 lispusers/TALK create mode 100644 lispusers/talk/TALK create mode 100644 lispusers/talk/TALK-GAP create mode 100644 lispusers/talk/TALK-IP create mode 100644 lispusers/talk/TALK-NS create mode 100644 lispusers/talk/TALK-NSGAP create mode 100644 lispusers/talk/TALK-SKETCH create mode 100644 lispusers/talk/TALK-TEDIT create mode 100644 lispusers/talk/TALK-TTY create mode 100644 lispusers/talk/TALK.TEDIT delete mode 100644 obsolete/lispusers/IPTALK delete mode 100644 obsolete/lispusers/NSTALK delete mode 100644 obsolete/lispusers/NSTALKGAP diff --git a/lispusers/TALK b/lispusers/TALK deleted file mode 100644 index 20cdd528..00000000 --- a/lispusers/TALK +++ /dev/null @@ -1,616 +0,0 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "22-Jul-88 15:43:07" |{MCS:MCS:STANFORD}TALK.;10| 38505 - - previous date%: "16-Jun-88 09:25:17" |{MCS:MCS:STANFORD}TALK.;9|) - - -(* " -Copyright (c) 1987, 1988 by Stanford University. All rights reserved. -") - -(PRETTYCOMPRINT TALKCOMS) - -(RPAQQ TALKCOMS ((* TALK client/server code) - (LOCALVARS . T) - (FNS TALK) - (FNS TALK.RECONNECT TALK.PROCESS TALK.DISPLAY TALK.LISTEN TALK.CLOSEFN - TALK.ANSWER TALK.ANSWER.WINDOW TALK.ANSWER.USERNAME TALK.GET.NAME - TALK.ADD.NAME TALK.FLASH.CARET TALK.WHENSELECTEDFN TALK.RINGBELLS - TALK.START.SERVER) - (FNS TALK.ICON.BUTTONEVENTFN TALK.ICON.CLOSEFN) - (* TALK data) - (DECLARE%: DONTCOPY (RECORDS TALK.SERVICETYPE TALK.PROTOCOLTYPE)) - (VARS TALK.MENU.ITEMS TALK.USER.MESSAGES) - (INITVARS TALK.SERVICETYPES TALK.PROTOCOLTYPES TALK.GAG TALK.HOSTNAMES - TALK.ICON.WINDOWS (TALK.ANSWER.WAIT 15) - (TALK.READTABLE (COPYREADTABLE 'ORIG)) - (TALK.DEFAULT.REGION (CREATEREGION 0 0 500 500)) - (TALK.CLOSED.STRING " -- Connection Closed") - (TALK.ICON.FONT LITTLEFONT)) - (GLOBALVARS TALK.MENU.ITEMS TALK.USER.MESSAGES TALK.SERVICETYPES - TALK.PROTOCOLTYPES TALK.GAG TALK.HOSTNAMES TALK.ICON.WINDOWS - TALK.ANSWER.WAIT TALK.READTABLE TALK.DEFAULT.REGION TALK.CLOSED.STRING - TALK.ICON.FONT) - (ALISTS (BackgroundMenuCommands Talk)) - (VARS (BackgroundMenu)) - (APPENDVARS (BACKGROUNDFNS TALK.START.SERVER) - (AFTERMAKESYSFORMS (TALK.START.SERVER NIL T))) - (BITMAPS TALK.ICON.BITMAP) - (GLOBALVARS TALK.ICON.BITMAP) - (P (SETSYNTAX (CHARCODE SPACE) - (CHARCODE A) - TALK.READTABLE)))) - - - -(* TALK client/server code) - -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(LOCALVARS . T) -) -(DEFINEQ - -(TALK - [LAMBDA (USER.OR.HOSTNAME SERVICE PROTOCOL) (* ; "Edited 9-Jun-88 12:32 by cdl") - (* DECLARATIONS%: (RECORD RESULT - (SERVICETYPE INPUTSTREAM -  . OUTPUTSTREAM))) - (PROG (USER PROTOCOLTYPE PROTOCOLTYPES SERVICETYPE SERVICETYPES RESULT ADDRESSABLE?) - (if (NULL USER.OR.HOSTNAME) - then (if (SETQ USER.OR.HOSTNAME (TALK.GET.NAME)) - then (if (LISTP USER.OR.HOSTNAME) - then (RETURN (TALK.RECONNECT USER.OR.HOSTNAME))) - else (RETURN))) - (if SERVICE - then (if [SETQ SERVICETYPE (for SERVICETYPE in TALK.SERVICETYPES - thereis (with TALK.SERVICETYPE - SERVICETYPE (STRING-EQUAL - SERVICE - TALK.SERVICENAME] - then (SETQ SERVICETYPES (LIST SERVICETYPE)) - else (RETURN (LIST "Unknown service type!" SERVICE))) - else (if (NULL (SETQ SERVICETYPES TALK.SERVICETYPES)) - then (RETURN "No services available!"))) - (if PROTOCOL - then (if (SETQ PROTOCOLTYPE (ASSOC PROTOCOL TALK.PROTOCOLTYPES)) - then (SETQ PROTOCOLTYPES (LIST PROTOCOLTYPE)) - else (RETURN (LIST "Unknown protocol!" PROTOCOL))) - else (if (NULL (SETQ PROTOCOLTYPES TALK.PROTOCOLTYPES)) - then (RETURN "No protocols available!"))) - (if [SETQ PROTOCOLTYPE (bind ADDRESS for PROTOCOLTYPE in PROTOCOLTYPES - when (with TALK.PROTOCOLTYPE PROTOCOLTYPE - (SETQ ADDRESS (APPLY* TALK.HOSTNAMEFN - USER.OR.HOSTNAME))) - thereis (PROGN (TALK.ADD.NAME USER.OR.HOSTNAME - ADDRESS (with TALK.PROTOCOLTYPE - PROTOCOLTYPE - TALK.PROTOCOLNAME)) - (SETQ ADDRESSABLE? T) - (SELECTQ (SETQ RESULT - (with TALK.PROTOCOLTYPE - PROTOCOLTYPE - (APPLY* TALK.CONNECTFN - ADDRESS - SERVICETYPES))) - (ANSWER (RETURN)) - (LISTP RESULT] - then (with RESULT RESULT (RETURN (TALK.PROCESS INPUTSTREAM OUTPUTSTREAM - SERVICETYPE PROTOCOLTYPE 'CLIENT - USER.OR.HOSTNAME T))) - else (RETURN (if ADDRESSABLE? - then (SELECTQ RESULT - (ANSWER "No answer from TALK service!") - (LIST "Can't connect to host!" USER.OR.HOSTNAME)) - else (LIST "Host not found!" USER.OR.HOSTNAME]) -) -(DEFINEQ - -(TALK.RECONNECT - [LAMBDA (DESTINATION) (* ; "Edited 10-Jun-88 14:59 by cdl") - (* DECLARATIONS%: (RECORD RESULT - (SERVICETYPE INPUTSTREAM -  . OUTPUTSTREAM)) - (RECORD DESTINATION - (NAME . ENTRIES)) (RECORD ENTRY - (PROTOCOL . ADDRESS))) - (DECLARE (SPECVARS DESTINATION)) - (if TALK.SERVICETYPES - then - [LET (PROTOCOLTYPE RESULT ENTRY ADDRESS) (* try all the protocols but prefer - those that have already succeeded) - (if [SETQ PROTOCOLTYPE - (for PROTOCOLTYPE in [SORT (APPEND TALK.PROTOCOLTYPES) - (FUNCTION (LAMBDA (PROTOCOLTYPE) - (* DECLARATIONS%: (RECORD - DESTINATION (NAME . ENTRIES))) - (with TALK.PROTOCOLTYPE - PROTOCOLTYPE - (with DESTINATION - DESTINATION - (ASSOC - TALK.PROTOCOLNAME - ENTRIES] - when [with TALK.PROTOCOLTYPE PROTOCOLTYPE - (AND [SETQ ADDRESS (with DESTINATION DESTINATION - (if (SETQ ENTRY - (ASSOC TALK.PROTOCOLNAME - ENTRIES)) - then (with ENTRY ENTRY - ADDRESS) - else (APPLY* TALK.HOSTNAMEFN - NAME] - (SETQ RESULT (APPLY* TALK.CONNECTFN ADDRESS - TALK.SERVICETYPES] - thereis (SELECTQ RESULT - (ANSWER (RETURN)) - (LISTP RESULT] - then (with RESULT RESULT (TALK.PROCESS INPUTSTREAM OUTPUTSTREAM - SERVICETYPE PROTOCOLTYPE 'CLIENT - (with DESTINATION DESTINATION NAME) - T)) - else (SELECTQ RESULT - (ANSWER "No answer from TALK service!") - (LIST "Can't connect to host!" (with DESTINATION DESTINATION NAME] - else "No services available!"]) - -(TALK.PROCESS - [LAMBDA (INPUTSTREAM OUTPUTSTREAM SERVICETYPE PROTOCOLTYPE MODE USER SPAWN?) - (* ; "Edited 9-Jun-88 12:35 by cdl") - (if (LITATOM SERVICETYPE) - then (SETQ SERVICETYPE (ASSOC SERVICETYPE TALK.SERVICETYPES))) - (if (LITATOM PROTOCOLTYPE) - then (SETQ PROTOCOLTYPE (ASSOC PROTOCOLTYPE TALK.PROTOCOLTYPES))) - (LET ((DISPLAYSTREAM (TALK.DISPLAY INPUTSTREAM OUTPUTSTREAM SERVICETYPE PROTOCOLTYPE MODE - USER))) - (if SPAWN? - then [ADD.PROCESS `(TALK.LISTEN ,INPUTSTREAM ,OUTPUTSTREAM ,(KWOTE SERVICETYPE) - ,(KWOTE PROTOCOLTYPE) - ,DISPLAYSTREAM] - else (TALK.LISTEN INPUTSTREAM OUTPUTSTREAM SERVICETYPE PROTOCOLTYPE DISPLAYSTREAM]) - -(TALK.DISPLAY - [LAMBDA (INPUTSTREAM OUTPUTSTREAM SERVICETYPE PROTOCOLTYPE MODE USER) - (* ; "Edited 9-Jun-88 14:46 by cdl") - (* DECLARATIONS%: (ASSOCRECORD - MESSAGES (GREETING))) - (LET (MAINWINDOW WINDOW REGION GREETING) - (DECLARE (SPECVARS GREETING)) - (SETQ USER (with TALK.PROTOCOLTYPE PROTOCOLTYPE (APPLY* TALK.USERNAMEFN INPUTSTREAM - OUTPUTSTREAM SERVICETYPE MODE - USER))) - (with REGION (SETQ REGION (if (REGIONP TALK.DEFAULT.REGION) - then (with REGION TALK.DEFAULT.REGION - (GETBOXREGION WIDTH HEIGHT)) - else (GETREGION))) - (SETQ HEIGHT (QUOTIENT HEIGHT 2))) - (SETQ MAINWINDOW (CREATEW (with REGION REGION (create REGION - BOTTOM _ (PLUS BOTTOM HEIGHT) - using REGION)) - (PACK* "TALK (" (with TALK.SERVICETYPE SERVICETYPE - TALK.SERVICENAME) - ")"))) - (SETQ WINDOW (CREATEW REGION (CONCAT "(" (with TALK.PROTOCOLTYPE PROTOCOLTYPE - TALK.PROTOCOLNAME) - ") Talk from " USER))) - (WINDOWPROP MAINWINDOW 'STREAMS (CONS INPUTSTREAM OUTPUTSTREAM)) - (WINDOWADDPROP MAINWINDOW 'CLOSEFN (FUNCTION TALK.CLOSEFN)) - (ATTACHWINDOW WINDOW MAINWINDOW 'BOTTOM) - (ATTACHMENU (create MENU - ITEMS _ TALK.MENU.ITEMS - CENTERFLG _ T - MENUBORDERSIZE _ 1 - WHENSELECTEDFN _ (FUNCTION TALK.WHENSELECTEDFN)) - WINDOW - 'BOTTOM) - (with TALK.SERVICETYPE SERVICETYPE (APPLY* TALK.DISPLAYFN MAINWINDOW WINDOW INPUTSTREAM - OUTPUTSTREAM PROTOCOLTYPE USER)) - (if (AND (SETQ GREETING (CAR (with MESSAGES TALK.USER.MESSAGES GREETING))) - (SETQ GREETING (ERRORSET GREETING))) - then (BKSYSBUF (CAR GREETING))) - WINDOW]) - -(TALK.LISTEN - [LAMBDA (INPUTSTREAM OUTPUTSTREAM SERVICETYPE PROTOCOLTYPE WINDOW) - (* ; "Edited 7-Jun-88 08:42 by cdl") - (PROG (ICON? (MAINWINDOW (MAINWINDOW WINDOW))) - (with TALK.SERVICETYPE SERVICETYPE (APPLY* TALK.LISTENFN MAINWINDOW WINDOW INPUTSTREAM - OUTPUTSTREAM PROTOCOLTYPE)) - (TTY.PROCESS T) - (CLOSEF? INPUTSTREAM) - (if [OR (OPENWP WINDOW) - (for PROP in '(ICON ICONWINDOW) thereis (SETQ ICON? - (OPENWP (WINDOWPROP - MAINWINDOW - PROP] - then (WINDOWPROP WINDOW 'TITLE (CONCAT (WINDOWPROP WINDOW 'TITLE) - TALK.CLOSED.STRING)) - (for WINDOW in (ATTACHEDWINDOWS WINDOW) when (WINDOWPROP WINDOW - 'MENU) - do (if (DETACHWINDOW WINDOW) - then (CLOSEW WINDOW))) - (if ICON? - then (SHRINKW MAINWINDOW) - else (FLASHWINDOW WINDOW]) - -(TALK.CLOSEFN - [LAMBDA (WINDOW) (* ; "Edited 9-Jun-88 14:45 by cdl") - (* DECLARATIONS%: (RECORD STREAMS - (INPUTSTREAM . OUTPUTSTREAM))) - (LET ((STREAMS (WINDOWPROP WINDOW 'STREAMS NIL))) - (if STREAMS - then (with STREAMS STREAMS (CLOSEF? INPUTSTREAM) - (CLOSEF? OUTPUTSTREAM]) - -(TALK.ANSWER - [LAMBDA (USER SERVICE PROTOCOL ADDRESS) (* ; "Edited 9-Jun-88 09:20 by cdl") - (LET [WINDOW REGION (EVENT (CREATE.EVENT)) - (TIME (DATE '(DATEFORMAT NO.SECONDS] - (DECLARE (GLOBALVARS \IDLING)) - (PROGN (* Only really necessary if you're - talking to yourself) - (SPAWN.MOUSE)) - (WINDOWPROP (SETQ WINDOW (TALK.ANSWER.WINDOW USER)) - 'EVENT EVENT) - (BITBLT TALK.ICON.BITMAP NIL NIL WINDOW) - [SETQ REGION (with REGION (DSPCLIPPINGREGION NIL WINDOW) - (CREATEREGION LEFT BOTTOM WIDTH (QUOTIENT HEIGHT 3] - (CENTERPRINTINREGION (CONCAT SERVICE "(" PROTOCOL ")") - (with REGION REGION (CREATEREGION LEFT BOTTOM WIDTH (DIFFERENCE HEIGHT 7))) - WINDOW) - (DSPFONT (PROG1 (DSPFONT TALK.ICON.FONT WINDOW) - (CENTERPRINTINREGION (CONCAT (SUBSTRING TIME 1 6) - (SUBSTRING TIME 10 -1)) - (with REGION REGION (add BOTTOM HEIGHT) - (CREATEREGION LEFT BOTTOM WIDTH (DIFFERENCE HEIGHT 7))) - WINDOW)) - WINDOW) - (if USER - then (TALK.ADD.NAME USER ADDRESS PROTOCOL) - (with REGION REGION (add BOTTOM HEIGHT) - (TALK.ANSWER.USERNAME USER (CREATEREGION LEFT BOTTOM WIDTH - (DIFFERENCE HEIGHT 7)) - WINDOW))) - (TALK.RINGBELLS WINDOW) - (if (AND [STRINGP (AWAIT.EVENT EVENT (TIMES TALK.ANSWER.WAIT 1000 (if \IDLING - then - (* Provide extra time to login) - 2 - else 1] - USER) - then (* We timed out, leave the icon up - but change its functionality) - (WINDOWPROP WINDOW 'TALK (LIST USER (CONS PROTOCOL ADDRESS))) - (WINDOWPROP WINDOW 'EVENT NIL) - (INVERTW WINDOW) - else (WINDOWPROP WINDOW 'EVENT NIL) - (CLOSEW WINDOW)) - (WINDOWPROP WINDOW 'RESULT]) - -(TALK.ANSWER.WINDOW - [LAMBDA (USER) (* ; "Edited 9-Jun-88 10:27 by cdl") - (PROG (WINDOW REGION) - [if TALK.ICON.WINDOWS - then - [if [AND USER (SETQ WINDOW (for WINDOW in TALK.ICON.WINDOWS - thereis (EQUAL USER (CAR (WINDOWPROP WINDOW - 'TALK] - then (RETURN WINDOW) - else (SETQ REGION - (with REGION (WINDOWPROP (CAR TALK.ICON.WINDOWS) - 'REGION) - (if (LESSP (PLUS PRIGHT WIDTH) - SCREENWIDTH) - then (CREATEREGION PRIGHT BOTTOM WIDTH HEIGHT) - else (CREATEREGION (OR (fetch (REGION LEFT) - of (REGIONP TALK.DEFAULT.REGION) - ) - 0) - (if (LESSP (PLUS PTOP HEIGHT) - SCREENHEIGHT) - then PTOP - else (OR (fetch (REGION BOTTOM) - of (REGIONP - TALK.DEFAULT.REGION - )) - 0)) - WIDTH HEIGHT] - else (SETQ REGION (with BITMAP TALK.ICON.BITMAP - (if (REGIONP TALK.DEFAULT.REGION) - then (with REGION TALK.DEFAULT.REGION - (CREATEREGION LEFT BOTTOM BITMAPWIDTH - BITMAPHEIGHT)) - else (CREATEREGION 0 0 BITMAPWIDTH BITMAPHEIGHT] - (push TALK.ICON.WINDOWS (SETQ WINDOW (CREATEW REGION NIL 0 T))) - (WINDOWPROP WINDOW 'BUTTONEVENTFN (FUNCTION TALK.ICON.BUTTONEVENTFN)) - (WINDOWPROP WINDOW 'CLOSEFN (FUNCTION TALK.ICON.CLOSEFN)) - (RETURN WINDOW]) - -(TALK.ANSWER.USERNAME - [LAMBDA (USER REGION WINDOW) (* cdl "10-Jun-87 08:38") - (LET (PTR FONTHEIGHT (FONT (DSPFONT NIL WINDOW))) - (if (AND (GREATERP (NCHARS USER) - (QUOTIENT (BITMAPWIDTH TALK.ICON.BITMAP) - (CHARWIDTH (CHARCODE A) - FONT))) - (SETQ PTR (STRPOS (CONSTANT (CHARACTER (CHARCODE SPACE))) - USER))) - then (DSPFONT TALK.ICON.FONT WINDOW) - (SETQ FONTHEIGHT (QUOTIENT (FONTPROP TALK.ICON.FONT 'HEIGHT) - 2)) - (CENTERPRINTINREGION (SUBSTRING USER 1 (SUB1 PTR)) - (with REGION REGION (CREATEREGION LEFT (PLUS BOTTOM FONTHEIGHT) - WIDTH HEIGHT)) - WINDOW) - (CENTERPRINTINREGION (SUBSTRING USER (ADD1 PTR) - -1) - (with REGION REGION (CREATEREGION LEFT (DIFFERENCE BOTTOM FONTHEIGHT) - WIDTH HEIGHT)) - WINDOW) - (DSPFONT FONT WINDOW) - else (CENTERPRINTINREGION USER REGION WINDOW]) - -(TALK.GET.NAME - [LAMBDA NIL (* ; "Edited 16-Jun-88 09:24 by cdl") - (* DECLARATIONS%: (RECORD ENTRY - (NAME . PAIRS)) (RECORD PAIR - (PROTOCOL . ADDRESS))) - (LET - [HOSTNAME HOSTNAMES MENU (ITEM '("" NIL ""] - (if - (SETQ HOSTNAMES - (for ENTRY in TALK.HOSTNAMES - collect - (if (LISTP ENTRY) - then - [with - ENTRY ENTRY - `(,NAME ,(KWOTE ENTRY) - NIL - (SUBITEMS ,@(for PAIR in PAIRS - collect (with PAIR PAIR - `(,(CONCAT PROTOCOL " " ADDRESS) - ,(KWOTE (LIST NAME PAIR] - else ENTRY))) - then (push HOSTNAMES ITEM)) - [SETQ MENU (create MENU - TITLE _ "TALK" - ITEMS _ `(("Prompt for User/Host" 'PROMPT "Prompt for a new user or hostname." - ) - (,(if TALK.GAG - then "Turn TALK On" - else "Turn TALK Off") - (PROGN (SETQ TALK.GAG (NOT TALK.GAG)) - NIL) - "Toggle TALK connection accept/refuse switch.") - ,@HOSTNAMES] - [if HOSTNAMES - then (SHADEITEM ITEM MENU BLACKSHADE) (* Kludge to make entire line of - menu inverted, not just up to - subitem arrows) - (with REGION (MENUITEMREGION ITEM MENU) - (with MENU MENU (BLTSHADE BLACKSHADE (with WINDOW IMAGE SAVE) - (PLUS LEFT MENUOUTLINESIZE) - (PLUS BOTTOM MENUOUTLINESIZE) - WIDTH HEIGHT] - (SELECTQ (SETQ HOSTNAME (MENU MENU)) - (PROMPT (SETQ HOSTNAME (MKATOM (PROMPTFORWORD "User or host?" NIL NIL PROMPTWINDOW))) - (TERPRI PROMPTWINDOW)) - NIL) - HOSTNAME]) - -(TALK.ADD.NAME - [LAMBDA (NAME ADDRESS PROTOCOL) (* ; "Edited 9-Jun-88 12:39 by cdl") - (* DECLARATIONS%: (RECORD ENTRY - (NAME . PAIRS))) - (LET (ENTRY) - (if (NOT (EQUAL NAME ADDRESS)) - then (if (SETQ ENTRY (bind HOSTNAME (NCHARS _ (NCHARS NAME)) for ENTRY - in TALK.HOSTNAMES - eachtime (SETQ HOSTNAME - (if (LISTP ENTRY) - then (with ENTRY ENTRY NAME) - else ENTRY)) - thereis (STRING-EQUAL HOSTNAME NAME))) - then (if (NLISTP ENTRY) - then (SETQ TALK.HOSTNAMES (DREMOVE ENTRY TALK.HOSTNAMES)) - (push TALK.HOSTNAMES (LIST NAME (CONS PROTOCOL - ADDRESS))) - else (PUTASSOC PROTOCOL ADDRESS (with ENTRY ENTRY PAIRS) - )) - else (push TALK.HOSTNAMES (LIST NAME (CONS PROTOCOL ADDRESS]) - -(TALK.FLASH.CARET - [LAMBDA (WINDOW POSITION FLG) (* ; "Edited 2-Jun-88 15:17 by cdl") - (DECLARE (GLOBALVARS DEFAULTCARET)) - (if (OPENWP WINDOW) - then (SELECTQ FLG - (OFF [with POSITION POSITION - (if XCOORD - then (with CURSOR DEFAULTCARET - (BITBLT CUIMAGE NIL NIL WINDOW XCOORD YCOORD NIL - NIL NIL 'INVERT]) - (ON [with POSITION POSITION (with CURSOR DEFAULTCARET - (BITBLT CUIMAGE NIL NIL WINDOW - (SETQ XCOORD - (DIFFERENCE (DSPXPOSITION NIL - WINDOW) - CUHOTSPOTX)) - (SETQ YCOORD - (DIFFERENCE (DSPYPOSITION NIL - WINDOW) - CUHOTSPOTY)) - NIL NIL NIL 'INVERT]) - NIL]) - -(TALK.WHENSELECTEDFN - [LAMBDA (ITEM FROMMENU BUTTON) (* ; "Edited 9-Jun-88 14:50 by cdl") - (* DECLARATIONS%: (RECORD STREAMS - (INPUTSTREAM . OUTPUTSTREAM))) - (LET [MAINWINDOW TEXTSTREAM STREAMS (WINDOW (MAINWINDOW (WFROMMENU FROMMENU] - (DECLARE (SPECVARS WINDOW MAINWINDOW TEXTSTREAM STREAMS)) - (SETQ TEXTSTREAM (WINDOWPROP (SETQ MAINWINDOW (MAINWINDOW WINDOW)) - 'TEXTSTREAM)) - (if (AND (SETQ STREAMS (WINDOWPROP MAINWINDOW 'STREAMS)) - (OPENP (with STREAMS STREAMS OUTPUTSTREAM))) - then (ERRORSET (CADR ITEM]) - -(TALK.RINGBELLS - [LAMBDA (WINDOW) (* cdl "16-Mar-87 08:01") - (DECLARE (GLOBALVARS RINGBELLS.L1 RINGBELLS.L2)) - (PLAYTUNE RINGBELLS.L1) (* Dorados and Dolphins can't do - PLAYTUNE but let BEEPON/BEEPOFF - handle that) - (FLASHWINDOW WINDOW) - (PLAYTUNE RINGBELLS.L2]) - -(TALK.START.SERVER - [LAMBDA (PROTOCOL RESTART) (* ; "Edited 8-Jun-88 15:06 by cdl") - (DECLARE (SPECVARS RESTART)) - (if PROTOCOL - then (LET ((PROTOCOLTYPE (ASSOC PROTOCOL TALK.PROTOCOLTYPES))) - (DECLARE (SPECVARS PROTOCOLTYPE)) - (if PROTOCOLTYPE - then [with TALK.PROTOCOLTYPE PROTOCOLTYPE - (if TALK.STARTSERVERFN - then (CAR (NLSETQ (APPLY* TALK.STARTSERVERFN - RESTART] - else (ERROR PROTOCOL "Unknown protocol!"))) - else (for PROTOCOLTYPE declare%: (SPECVARS PROTOCOLTYPE) in TALK.PROTOCOLTYPES - do (with TALK.PROTOCOLTYPE PROTOCOLTYPE - (if TALK.STARTSERVERFN - then (NLSETQ (APPLY* TALK.STARTSERVERFN RESTART]) -) -(DEFINEQ - -(TALK.ICON.BUTTONEVENTFN - [LAMBDA (WINDOW) (* ; "Edited 9-Jun-88 10:02 by cdl") - (* DECLARATIONS%: (RECORD - DESTINATION (NAME (PROTOCOL . ADDRESS)))) - (RESETFORM (INVERTW WINDOW) - (until (MOUSESTATE UP) do)) - (ALLOW.BUTTON.EVENTS) - (if (WINDOWPROP WINDOW 'EVENT) - then (WINDOWPROP WINDOW 'RESULT T) - (NOTIFY.EVENT (WINDOWPROP WINDOW 'EVENT NIL) - T) - else (LET ((DESTINATION (WINDOWPROP WINDOW 'TALK)) - RESULT) - (if (MOUSECONFIRM (CONCAT "(Re)Connect to " (with DESTINATION DESTINATION - NAME) - "?")) - then (if (PROCESSP (SETQ RESULT (TALK.RECONNECT DESTINATION))) - then (CLOSEW WINDOW) - else (FLASHWINDOW WINDOW) - (PROMPTPRINT RESULT]) - -(TALK.ICON.CLOSEFN - [LAMBDA (WINDOW) (* cdl "10-May-87 10:07") - (LET ((EVENT (WINDOWPROP WINDOW 'EVENT NIL))) - (if EVENT - then (NOTIFY.EVENT EVENT T))) - (SETQ TALK.ICON.WINDOWS (DREMOVE WINDOW TALK.ICON.WINDOWS]) -) - - - -(* TALK data) - -(DECLARE%: DONTCOPY -(DECLARE%: EVAL@COMPILE - -(RECORD TALK.SERVICETYPE (TALK.SERVICENAME TALK.DISPLAYFN TALK.LISTENFN)) - -(RECORD TALK.PROTOCOLTYPE (TALK.PROTOCOLNAME TALK.HOSTNAMEFN TALK.USERNAMEFN TALK.CONNECTFN - TALK.EVENTFN TALK.STARTSERVERFN TALK.CASEARRAY)) -) -) - -(RPAQQ TALK.MENU.ITEMS ((Disconnect (TALK.CLOSEFN MAINWINDOW) - "Close TALK connection and keep window open.") - (RingBells (PROGN (PRINTCCODE (CHARCODE ^G) - (CDR STREAMS)) - (FORCEOUTPUT (CDR STREAMS)) - (FLASHWINDOW MAINWINDOW)) - "Execute a (RINGBELLS) on the remote machine.") - (Message (LET [(MESSAGE (MENU (create MENU ITEMS _ TALK.USER.MESSAGES] - (if [AND MESSAGE (TTY.PROCESSP (WINDOWPROP MAINWINDOW - 'PROCESS] - then - (BKSYSBUF MESSAGE))) - "Insert a generic message."))) - -(RPAQQ TALK.USER.MESSAGES (("One moment please" "One moment please..." NIL (SUBITEMS ( - "the phone's ringing" - - "One moment please, the phone's ringing..." - ) - ( - "there's someone at the door" - - "One moment please, there's someone at the door..." - ) - ( - "someone is trying to TALK to me" - - "One moment please, someone is trying to TALK to me..." - ))) - (DATE (DATE) - "The current date and time.") - "Bye.")) - -(RPAQ? TALK.SERVICETYPES NIL) - -(RPAQ? TALK.PROTOCOLTYPES NIL) - -(RPAQ? TALK.GAG NIL) - -(RPAQ? TALK.HOSTNAMES NIL) - -(RPAQ? TALK.ICON.WINDOWS NIL) - -(RPAQ? TALK.ANSWER.WAIT 15) - -(RPAQ? TALK.READTABLE (COPYREADTABLE 'ORIG)) - -(RPAQ? TALK.DEFAULT.REGION (CREATEREGION 0 0 500 500)) - -(RPAQ? TALK.CLOSED.STRING " -- Connection Closed") - -(RPAQ? TALK.ICON.FONT LITTLEFONT) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(GLOBALVARS TALK.MENU.ITEMS TALK.USER.MESSAGES TALK.SERVICETYPES TALK.PROTOCOLTYPES TALK.GAG - TALK.HOSTNAMES TALK.ICON.WINDOWS TALK.ANSWER.WAIT TALK.READTABLE TALK.DEFAULT.REGION - TALK.CLOSED.STRING TALK.ICON.FONT) -) - -(ADDTOVAR BackgroundMenuCommands (Talk '(PRINTOUT PROMPTWINDOW T (TALK) - T) - "Start a TALK session with another user/host.")) - -(RPAQQ BackgroundMenu NIL) - -(APPENDTOVAR BACKGROUNDFNS TALK.START.SERVER) - -(APPENDTOVAR AFTERMAKESYSFORMS (TALK.START.SERVER NIL T)) - -(RPAQQ TALK.ICON.BITMAP #*(80 78)OOOOOOOOOOOOOOOOOOOOLAIKKGHHDBNOOOOOOOOOOGFKJOKKEJDMOOOOOOOOOG@KHOHHEJJOOOOOOOOOOGFKJOKJMJNMOOOOOOOOOGFHKGKKDBNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AOOOOOOOOOOOOOOOOOOOOLAKGDGOOOOOOOOOOOOOOOGKBENOOOOOOOOOOOOOOOGKEDGOOOOOOOOOOOOOOOGKGENOOOOOOOOOOOOOOOGKGDGOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AOOOOOOOOOOOOOOOOOOOOMM@HLGOOOOOOOOOOOOOOLIFKENOOOOOOOOOOOOOOMEFKDGOOOOOOOOOOOOOOMMFKENOOOOOOOOOOOOOOMM@HLGOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@@@@AOOOOOOOOOOOOOOOOOOOO -) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(GLOBALVARS TALK.ICON.BITMAP) -) - -(SETSYNTAX (CHARCODE SPACE) - (CHARCODE A) - TALK.READTABLE) -(PUTPROPS TALK COPYRIGHT ("Stanford University" 1987 1988)) -(DECLARE%: DONTCOPY - (FILEMAP (NIL (2377 6659 (TALK 2387 . 6657)) (6660 31221 (TALK.RECONNECT 6670 . 10485) (TALK.PROCESS -10487 . 11403) (TALK.DISPLAY 11405 . 14118) (TALK.LISTEN 14120 . 15633) (TALK.CLOSEFN 15635 . 16150) ( -TALK.ANSWER 16152 . 18935) (TALK.ANSWER.WINDOW 18937 . 21688) (TALK.ANSWER.USERNAME 21690 . 23092) ( -TALK.GET.NAME 23094 . 25712) (TALK.ADD.NAME 25714 . 27266) (TALK.FLASH.CARET 27268 . 28866) ( -TALK.WHENSELECTEDFN 28868 . 29649) (TALK.RINGBELLS 29651 . 30143) (TALK.START.SERVER 30145 . 31219)) ( -31222 32752 (TALK.ICON.BUTTONEVENTFN 31232 . 32451) (TALK.ICON.CLOSEFN 32453 . 32750))))) -STOP diff --git a/lispusers/talk/TALK b/lispusers/talk/TALK new file mode 100644 index 0000000000000000000000000000000000000000..e75b0bc3bd5c7d77b20a106c40c38a3b7851932e GIT binary patch literal 36494 zcmeIuF#!Mo0K%a4Pi+e?h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd a0RsjM7%*VKfB^#r3>YwAz<>b*|A7IHjsO7w literal 0 HcmV?d00001 diff --git a/lispusers/talk/TALK-GAP b/lispusers/talk/TALK-GAP new file mode 100644 index 0000000000000000000000000000000000000000..7b579f48dee8ec26ea29dbdea0df9fdcc9e9c818 GIT binary patch literal 13280 zcmeIuF#!Mo0K%a4Pi+hzh(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM c7%*VKfB^#r3>YwAz<>b*1`HT5V8Fm@U^CzV0RR91 literal 0 HcmV?d00001 diff --git a/lispusers/talk/TALK-IP b/lispusers/talk/TALK-IP new file mode 100644 index 0000000000000000000000000000000000000000..c07c527ae7d0afaf3f5e8dd58d8c1d3630a08658 GIT binary patch literal 11661 zcmeIuF#!Mo0K%a4Pi+Q&h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM W7%*VKfB^#r3>YwAz<>b*_rL%xjQ{}v literal 0 HcmV?d00001 diff --git a/lispusers/talk/TALK-NS b/lispusers/talk/TALK-NS new file mode 100644 index 0000000000000000000000000000000000000000..44056bdeae2ff6b9cc38304fdaad53f41c1cca45 GIT binary patch literal 14457 zcmeIuF#!Mo0K%a4Pwit2h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM i7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj_`m=-c>nYwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM p7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RslU0|P$%00961 literal 0 HcmV?d00001 diff --git a/lispusers/talk/TALK-SKETCH b/lispusers/talk/TALK-SKETCH new file mode 100644 index 0000000000000000000000000000000000000000..1197064540d387a8664b7fc1598074cd9943c0ec GIT binary patch literal 19972 zcmeIuF#!Mo0K%a4Pi+e?h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* GuYmzh1ONd5 literal 0 HcmV?d00001 diff --git a/lispusers/talk/TALK-TEDIT b/lispusers/talk/TALK-TEDIT new file mode 100644 index 0000000000000000000000000000000000000000..4fa5a5b757062baf14f116eb8fa9b6d4fa09aefb GIT binary patch literal 24941 zcmeIu0Sy2E0K%a6Pi+o2h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* b1`HT5V8DO@0|pEjFkrxd0RsjM7&sajVQl~b literal 0 HcmV?d00001 diff --git a/lispusers/talk/TALK-TTY b/lispusers/talk/TALK-TTY new file mode 100644 index 0000000000000000000000000000000000000000..0132acd85e08864cff6186d3abd4801d984974b5 GIT binary patch literal 6009 xcmeIuF#!Mo0K%a4Pi+ZLh(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pG-1_l>-00961 literal 0 HcmV?d00001 diff --git a/lispusers/talk/TALK.TEDIT b/lispusers/talk/TALK.TEDIT new file mode 100644 index 0000000000000000000000000000000000000000..06caea571ce01fada912df62335321db3f311243 GIT binary patch literal 51655 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.;1| 12755 ) - - -(PRETTYCOMPRINT IPTALKCOMS) - -(RPAQQ IPTALKCOMS ((* TALK (Interim) - IP Interface) - (LOCALVARS . T) - (FNS TALK.IP.SERVER) - (FNS TALK.IP.USERNAME TALK.IP.CONNECT TALK.IP.EVENT TALK.START.IP.SERVER) - (INITVARS (TALK.UDP.PORT 517)) - (GLOBALVARS TALK.UDP.PORT TALK.IP.CONSTANTS) - (DECLARE%: DONTCOPY (RECORDS TALK.IP.PACKET) - (CONSTANTS * TALK.IP.CONSTANTS)) - (* etc) - (FILES TALK TCP TCPUDP) - (APPENDVARS (TALK.PROTOCOLTYPES (IP DODIP.HOSTP TALK.IP.USERNAME - TALK.IP.CONNECT TALK.IP.EVENT - TALK.START.IP.SERVER))) - (DECLARE%: DONTCOPY DONTEVAL@LOAD EVAL@COMPILE (FILES ETHERRECORDS TCPEXPORTS) - ) - (P (TALK.START.IP.SERVER)))) - - - -(* TALK (Interim) IP Interface) - -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(LOCALVARS . T) -) -(DEFINEQ - -(TALK.IP.SERVER - [LAMBDA NIL (* ; "Edited 17-Jun-88 13:45 by cdl") - (DECLARE (GLOBALVARS \IP.READY)) - (LET (SOCKET) - (DECLARE (SPECVARS SOCKET)) - (RESETLST - [RESETSAVE NIL `(UDP.CLOSE.SOCKET ,(SETQ SOCKET (UDP.OPEN.SOCKET TALK.UDP.PORT] - [bind PACKET RESPONSE SERVICE GAP.SERVICETYPE TALK.SERVICETYPE INPUTSTREAM - OUTPUTSTREAM PORT USER while \IP.READY - do (SETQ PACKET (UDP.GET SOCKET T)) - (UDP.SETUP (SETQ RESPONSE (\ALLOCATE.ETHERPACKET)) - (with IP PACKET IPSOURCEADDRESS) - (with UDP PACKET UDPSOURCEPORT) - 0 SOCKET 'FREE) - (UDP.APPEND.BYTE RESPONSE (with TALK.IP.PACKET PACKET TALK.SERVICE.BYTE)) - (if [OR [NULL (if (SETQ GAP.SERVICETYPE (ASSOC (with TALK.IP.PACKET - PACKET - TALK.SERVICE.BYTE - ) - GAP.SERVICETYPES)) - then (SETQ SERVICE (with GAP.SERVICETYPE - GAP.SERVICETYPE - GAP.SERVICENAME] - (NULL (SETQ TALK.SERVICETYPE (ASSOC SERVICE TALK.SERVICETYPES] - then (UDP.APPEND.BYTE RESPONSE \IPTALK.NOSERVICE) - (UDP.SEND SOCKET RESPONSE) - elseif [OR TALK.GAG (NOT (TALK.ANSWER (SETQ USER (with TALK.IP.PACKET - PACKET - TALK.IP.USERNAME) - ) - SERVICE - 'IP - (with IP PACKET IPSOURCEADDRESS] - then (UDP.APPEND.BYTE RESPONSE \IPTALK.NOANSWER) - (UDP.SEND SOCKET RESPONSE) - else (UDP.APPEND.BYTE RESPONSE \IPTALK.SUCCESS) - (UDP.APPEND.WORD RESPONSE (SETQ PORT (\TCP.SELECT.PORT))) - (UDP.SEND SOCKET RESPONSE) - (if (SETQ INPUTSTREAM (TCP.OPEN (with IP PACKET IPSOURCEADDRESS - ) - NIL PORT 'PASSIVE 'INPUT)) - then (TALK.PROCESS INPUTSTREAM (TCP.OTHER.STREAM INPUTSTREAM) - TALK.SERVICETYPE - 'IP - 'SERVER USER T])]) -) -(DEFINEQ - -(TALK.IP.USERNAME - [LAMBDA (INPUTSTREAM OUTPUTSTREAM SERVICETYPE MODE USER) - (* ; "Edited 8-Jun-88 15:45 by cdl") - (SELECTQ (with TALK.SERVICETYPE SERVICETYPE TALK.SERVICENAME) - ((TTY Sketch) (* For (backward) compatibility) - USER) - (LET ((NAME (USERNAME))) - (PRINTOUT OUTPUTSTREAM (if (NOT (STREQUAL NAME (CONSTANT null))) - then NAME) - T) - (FORCEOUTPUT OUTPUTSTREAM) - (SETQ NAME (RATOM INPUTSTREAM TALK.READTABLE)) (* Eat EOL) - (BIN INPUTSTREAM) - (OR NAME USER]) - -(TALK.IP.CONNECT - [LAMBDA (HOST SERVICETYPES) (* ; "Edited 13-Jun-88 17:54 by cdl") - (DECLARE (SPECVARS HOST SERVICETYPES)) - (LET - (SOCKET) - (DECLARE (SPECVARS SOCKET)) - (RESETLST - [RESETSAVE NIL `(UDP.CLOSE.SOCKET ,(SETQ SOCKET (UDP.OPEN.SOCKET] - [PROG (NAME REQUEST RESPONSE INPUTSTREAM RESULT) - (while (STREQUAL (SETQ NAME (USERNAME)) - (CONSTANT null)) do (LOGIN)) - (if - [LITATOM - (SETQ RESULT - (for SERVICETYPE in SERVICETYPES - thereis (PROGN (UDP.SETUP (SETQ REQUEST (\ALLOCATE.ETHERPACKET)) - HOST TALK.UDP.PORT 0 SOCKET 'FREE) - (UDP.APPEND.BYTE - REQUEST - (with GAP.SERVICETYPE - [for GAP.SERVICETYPE in GAP.SERVICETYPES - thereis (with GAP.SERVICETYPE - GAP.SERVICETYPE - (with TALK.SERVICETYPE - SERVICETYPE - (EQ GAP.SERVICENAME - TALK.SERVICENAME] - GAP.UNSPECIFIED)) - (UDP.APPEND.BYTE REQUEST 0) - (UDP.APPEND.WORD REQUEST 0) - (UDP.APPEND.WORD REQUEST (NCHARS NAME)) - (UDP.APPEND.STRING REQUEST NAME) - (if [SETQ RESPONSE - (UDP.EXCHANGE SOCKET REQUEST - (TIMES TALK.ANSWER.WAIT - (CONSTANT (PROGN - (* Convert to milliseconds and - double in case they are idle) - (TIMES 2 1000] - then (SELECT (with TALK.IP.PACKET RESPONSE - TALK.STATUS) - (\IPTALK.SUCCESS T) - (\IPTALK.NOSERVICE NIL) - (\IPTALK.NOANSWER (RETURN 'ANSWER)) - (RETURN 'CONNECT)) - else (* Can't connect) - (RETURN 'CONNECT] - then (RETURN RESULT) - else (if (STREAMP (SETQ INPUTSTREAM (TCP.OPEN HOST (with TALK.IP.PACKET - RESPONSE - TALK.TEDIT.PORT) - NIL - 'ACTIVE - 'INPUT T))) - then [RETURN (CONS RESULT (CONS INPUTSTREAM (TCP.OTHER.STREAM - INPUTSTREAM] - else (RETURN 'CONNECT])]) - -(TALK.IP.EVENT - [LAMBDA (INPUTSTREAM OUTPUTSTREAM) (* cdl "18-May-87 16:29") - (while (AND (OPENP INPUTSTREAM) - (OPENP OUTPUTSTREAM) - (NOT (READP INPUTSTREAM))) do (if (EOFP INPUTSTREAM) - then (CLOSEF? INPUTSTREAM)) - (BLOCK]) - -(TALK.START.IP.SERVER - [LAMBDA (RESTART) (* ; "Edited 17-Jun-88 12:20 by cdl") - [LET [(DEVICE (\GETDEVICEFROMNAME 'TCP 'NOERROR 'DONTCREATE] - (if DEVICE - then (* (Temporary) patch to make TCP - streams handle NS character codes) - (with FDEV DEVICE (if (NULL READCHARCODE) - then (SETQ READCHARCODE (FUNCTION \GENERIC.READCCODE - ] - (bind PROCESS while (AND (SETQ PROCESS (FIND.PROCESS 'TALK.IP.SERVER)) - RESTART) do (DEL.PROCESS PROCESS) - (BLOCK) - yield (if PROCESS - then PROCESS - elseif \IP.READY - then (ADD.PROCESS '(TALK.IP.SERVER) - 'RESTARTABLE - 'SYSTEM]) -) - -(RPAQ? TALK.UDP.PORT 517) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(GLOBALVARS TALK.UDP.PORT TALK.IP.CONSTANTS) -) -(DECLARE%: DONTCOPY -(DECLARE%: EVAL@COMPILE - -(ACCESSFNS TALK.IP.PACKET [(TALK.PACKET.BASE (with UDP DATUM UDPCONTENTS)) - (TALK.IP.USERNAME (\GETBASESTRING (with UDP DATUM UDPCONTENTS) - 6 - (with TALK.IP.PACKET DATUM - TALK.USERNAME.LENGTH] - (BLOCKRECORD TALK.PACKET.BASE ((TALK.SERVICE.BYTE BYTE) - (TALK.STATUS BYTE) - (TALK.TEDIT.PORT WORD) - (TALK.USERNAME.LENGTH WORD)))) -) - - -(RPAQQ TALK.IP.CONSTANTS ((\IPTALK.SUCCESS 0) - (\IPTALK.NOSERVICE 1) - (\IPTALK.NOANSWER 2))) -(DECLARE%: EVAL@COMPILE - -(RPAQQ \IPTALK.SUCCESS 0) - -(RPAQQ \IPTALK.NOSERVICE 1) - -(RPAQQ \IPTALK.NOANSWER 2) - - -(CONSTANTS (\IPTALK.SUCCESS 0) - (\IPTALK.NOSERVICE 1) - (\IPTALK.NOANSWER 2)) -) -) - - - -(* etc) - - -(FILESLOAD TALK TCP TCPUDP) - -(APPENDTOVAR TALK.PROTOCOLTYPES (IP DODIP.HOSTP TALK.IP.USERNAME TALK.IP.CONNECT TALK.IP.EVENT - TALK.START.IP.SERVER)) -(DECLARE%: DONTCOPY DONTEVAL@LOAD EVAL@COMPILE - -(FILESLOAD ETHERRECORDS TCPEXPORTS) -) - -(TALK.START.IP.SERVER) -(DECLARE%: DONTCOPY - (FILEMAP (NIL (1313 4720 (TALK.IP.SERVER 1323 . 4718)) (4721 11119 (TALK.IP.USERNAME 4731 . 5475) ( -TALK.IP.CONNECT 5477 . 9538) (TALK.IP.EVENT 9540 . 9963) (TALK.START.IP.SERVER 9965 . 11117))))) -STOP diff --git a/obsolete/lispusers/NSTALK b/obsolete/lispusers/NSTALK deleted file mode 100644 index fbda9c18..00000000 --- a/obsolete/lispusers/NSTALK +++ /dev/null @@ -1,319 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") -(FILECREATED "27-Jul-88 09:09:52" |{MCS:MCS:STANFORD}NSTALK.;3| 16112 - - changes to%: (FNS DEFINE.GAP.SERVER) - - previous date%: "16-Jun-88 17:33:04" |{MCS:MCS:STANFORD}NSTALK.;1|) - - -(PRETTYCOMPRINT NSTALKCOMS) - -(RPAQQ NSTALKCOMS ((* TALK NS (GAP) - Interface) - (LOCALVARS . T) - (FNS CH.USER.WORKSTATION TALK.NS.SERVER) - (FNS TALK.NS.USERNAME TALK.NS.CONNECT TALK.NS.EVENT TALK.NS.CREDENTIALS) - (* GAP Server) - (FNS GAP.SERVER DEFINE.GAP.SERVER) - (INITVARS GAP.SERVICETYPES [TALK.GAP.HANDLE '((0 0] - (TALK.GAP.UNKNOWN "(Viewpoint or XDE User)")) - (VARS TALK.GAP.PARAMETERS TALK.GAP.TRANSPORT) - (GLOBALVARS GAP.SERVICETYPES TALK.GAP.HANDLE TALK.GAP.UNKNOWN - TALK.GAP.PARAMETERS TALK.GAP.TRANSPORT) - (DECLARE%: DONTCOPY (RECORDS GAP.SERVICETYPE)) - (* etc) - (FILES TALK COURIERSERVE) - (APPENDVARS (TALK.PROTOCOLTYPES (NS COERCE-TO-NSADDRESS TALK.NS.USERNAME - TALK.NS.CONNECT TALK.NS.EVENT - COURIER.START.SERVER))) - [DECLARE%: DOCOPY (COMS (DECLARE%: EVAL@LOADWHEN (NOT (HASDEF 'GAP - 'COURIERPROGRAM)) - (FILES NSTALKGAP] - (* DECLARE%: DONTCOPY DONTEVAL@LOAD EVAL@COMPILE (FILES ETHERRECORDS SPPDECLS) - (* Also need to load EXPORTS.ALL)) - (* COURIER.RESET.SOCKET used to be defined by TALK, now defined in - COURIERSERVE module) - (APPENDVARS (BEFORELOGOUTFORMS (COURIER.RESET.SOCKET))) - (P (DEFINE.GAP.SERVER) - (COURIER.START.SERVER)))) - - - -(* TALK NS (GAP) Interface) - -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(LOCALVARS . T) -) -(DEFINEQ - -(CH.USER.WORKSTATION - [LAMBDA (USER WORKSTATION) (* ; "Edited 3-Jun-88 09:18 by cdl") - (if WORKSTATION - then (LET (NSADDRESS) - (if (SETQ NSADDRESS (COERCE-TO-NSADDRESS WORKSTATION (ZERO))) - then (CH.DELETE.PROPERTY USER 'ADDRESS.LIST) - (CH.ADD.ITEM.PROPERTY USER 'ADDRESS.LIST (SETQ NSADDRESS (CONS - NSADDRESS - )) - '(SEQUENCE NSADDRESS)) - (CONS USER NSADDRESS) - else (ERROR WORKSTATION "Address for host not found!"))) - else (CH.DELETE.PROPERTY USER 'ADDRESS.LIST]) - -(TALK.NS.SERVER - [LAMBDA (INPUTSTREAM PROGRAM PROCEDURE PARAMETERS TRANSPORT WAITTIME CREDENTIALS VERIFIER) - (* ; "Edited 15-Jun-88 11:10 by cdl") - (* DECLARATIONS%: (ASSOCRECORD ALST - (service))) - (LET ((USER (TALK.NS.CREDENTIALS CREDENTIALS)) - (ADDRESS (create NSADDRESS - NSSOCKET _ (ZERO) using (SPP.DESTADDRESS INPUTSTREAM))) - SERVICETYPE) - (with GAP.SERVICETYPE [for SERVICETYPE in GAP.SERVICETYPES - thereis (for NUMBER - in (CAR (with ALST TRANSPORT service)) - thereis (with GAP.SERVICETYPE - SERVICETYPE (EQP NUMBER - GAP.UNSPECIFIED - ] - (if (OR TALK.GAG (NOT (TALK.ANSWER (OR USER TALK.GAP.UNKNOWN) - GAP.SERVICENAME - 'NS ADDRESS))) - then (if (AND (EQ GAP.SERVICENAME 'TTY) - (NULL VERIFIER)) - then - - (* Should be noAnswerOrBusy, but that 915's XDE/Viewpoint so use VERIFIER to - determine if called by Lisp, can't count on this for future) - - '(ABORT serviceNotFound) - else '(ABORT noAnswerOrBusy)) - else (COURIER.RETURN INPUTSTREAM PROGRAM PROCEDURE TALK.GAP.HANDLE) - (TALK.PROCESS INPUTSTREAM (SPPOUTPUTSTREAM INPUTSTREAM) - GAP.SERVICENAME - 'NS - 'SERVER USER]) -) -(DEFINEQ - -(TALK.NS.USERNAME - [LAMBDA (INPUTSTREAM OUTPUTSTREAM SERVICETYPE MODE USER) - (* ; "Edited 9-Jun-88 12:42 by cdl") - (LET (OBJECT NAME (SERVICE (with TALK.SERVICETYPE SERVICETYPE TALK.SERVICENAME))) - (DECLARE (GLOBALVARS LOCAL.CLEARINGHOUSE CH.NET.HINT)) - (if (OR (EQ SERVICE 'TEdit) - (EQ MODE 'CLIENT)) - then (if (STREQUAL (SETQ NAME (USERNAME)) - (CONSTANT null)) - then (SETQ NAME NIL) - elseif (OR LOCAL.CLEARINGHOUSE CH.NET.HINT) - then (if (SETQ OBJECT (CH.LOOKUP.OBJECT NAME)) - then (SETQ NAME OBJECT))) - (PRINTOUT OUTPUTSTREAM NAME T) - (FORCEOUTPUT OUTPUTSTREAM)) - (if (OR (EQ SERVICE 'TEdit) - (EQ MODE 'SERVER)) - then (if (SETQ OBJECT (RATOM INPUTSTREAM TALK.READTABLE)) - then (SETQ USER OBJECT)) (* Eat EOL) - (BIN INPUTSTREAM)) - (SELECTQ SERVICE - (TTY (with SPPCON (with SPPSTREAM OUTPUTSTREAM SPP.CONNECTION) - (SETQ SPPEOMONFORCEOUT T))) - NIL) - USER]) - -(TALK.NS.CONNECT - [LAMBDA (HOST SERVICETYPES) (* ; "Edited 15-Jun-88 10:40 by cdl") - (* DECLARATIONS%: (RECORD - AUTHENTICATOR (CREDENTIALS VERIFIER))) - (PROG (USER STREAM SERVICETYPE RESULT (CREDENTIALS (with AUTHENTICATOR (CH.GETAUTHENTICATOR - T) - CREDENTIALS)) - (VERIFIER (with AUTHENTICATOR (CH.GETAUTHENTICATOR) - VERIFIER))) - (DECLARE (GLOBALVARS SPP.USER.TIMEOUT)) - (if (SETQ STREAM (COURIER.OPEN HOST NIL T (PACK* 'TALK# HOST))) - then - (if - (SETQ SERVICETYPE - (for SERVICETYPE in SERVICETYPES - thereis - (SELECTQ [CAR - (SETQ RESULT - (COURIER.CALL - STREAM - 'GAP - 'Create TALK.GAP.PARAMETERS - `([service (,(with GAP.SERVICETYPE - [for TYPE in GAP.SERVICETYPES - thereis (with GAP.SERVICETYPE TYPE - (with TALK.SERVICETYPE - SERVICETYPE - (EQ GAP.SERVICENAME - TALK.SERVICENAME] - GAP.UNSPECIFIED] - ,@TALK.GAP.TRANSPORT) - SPP.USER.TIMEOUT CREDENTIALS VERIFIER 'RETURNERRORS] - (ERROR (SELECTQ (CADR RESULT) - (noAnswerOrBusy (* User hung up or didn't answer, - don't try another service) - (RETURN)) - (serviceNotFound - - (* Old Lisp TTY service returns this when it really means noAnswerOrBusy for - compatibility with Tajo/Viewpoint.) - - (if (with TALK.SERVICETYPE SERVICETYPE - (EQ TALK.SERVICENAME 'TTY)) - then - - (* Don't try services following TTY service for NS we don't know if remote - service wasn't there or remote user refused connection so we may annoy the - remote user, of course we may miss a possible connection) - - (RETURN))) - NIL)) - RESULT))) - then [RETURN (CONS SERVICETYPE (CONS STREAM (SPPOUTPUTSTREAM STREAM] - else (CLOSEF? STREAM) - (RETURN 'ANSWER)) - else (RETURN 'CONNECT]) - -(TALK.NS.EVENT - [LAMBDA (INPUTSTREAM OUTPUTSTREAM) (* cdl "10-Jun-87 07:55") - (if (AND (OPENP INPUTSTREAM) - (OPENP OUTPUTSTREAM) - (NOT (READP INPUTSTREAM))) - then (AWAIT.EVENT (with SPPCON (with SPPSTREAM INPUTSTREAM SPP.CONNECTION) - SPPINPUTEVENT))) - (if (OPENP INPUTSTREAM) - then (SELECTQ (EOFP INPUTSTREAM) - (ATTENTION (SPP.CLEARATTENTION INPUTSTREAM) - (BIN INPUTSTREAM)) - (EOM (SPP.CLEAREOM INPUTSTREAM)) - (T (CLOSEF INPUTSTREAM)) - NIL]) - -(TALK.NS.CREDENTIALS - [LAMBDA (CREDENTIALS) (* cdl " 6-May-87 15:58") - (if (AND CREDENTIALS (SETQ CREDENTIALS (CADR CREDENTIALS))) - then (SUBATOM (COURIER.READ.REP CREDENTIALS 'CLEARINGHOUSE 'NAME) - 1 -2]) -) - - - -(* GAP Server) - -(DEFINEQ - -(GAP.SERVER - [LAMBDA (STREAM PROGRAM PROCEDURE PARAMETERS TRANSPORT WAITTIME CREDENTIALS VERIFIER) - (* ; "Edited 9-Jun-88 12:06 by cdl") - (* DECLARATIONS%: (ASSOCRECORD ALST - (service))) - (LET (SERVICETYPE) - (if [OR [for NUMBER in (CAR (with ALST TRANSPORT service)) - thereis (SETQ SERVICETYPE (for SERVICETYPE in GAP.SERVICETYPES - thereis (with GAP.SERVICETYPE - SERVICETYPE - (AND (EQP NUMBER - GAP.UNSPECIFIED - ) - GAP.SERVERFN] - (AND (SETQ SERVICETYPE (ASSOC T GAP.SERVICETYPES)) - (with GAP.SERVICETYPE SERVICETYPE - (* There was a server in place - before TALK was loaded) - (FGETD GAP.SERVERFN] - then (APPLY* (with GAP.SERVICETYPE SERVICETYPE GAP.SERVERFN) - STREAM PROGRAM PROCEDURE PARAMETERS TRANSPORT WAITTIME CREDENTIALS - VERIFIER) - else '(ABORT serviceNotFound]) - -(DEFINE.GAP.SERVER - [LAMBDA NIL (* ; "Edited 27-Jul-88 09:08 by cdl") - (* DECLARATIONS%: (ASSOCRECORD - PROCEDURES (Create)) - (PROPRECORD PROCEDURE - (IMPLEMENTEDBY))) - (if (HASDEF 'GAP 'COURIERPROGRAM) - then (PROG [SERVERFN PROCEDURE (COURIERDEF (GETDEF 'GAP 'COURIERPROGRAM] - [with COURIERPGM COURIERDEF (SETQ PROCEDURE (with PROCEDURES - PROCEDURES Create)) - [if (SETQ SERVERFN (with PROCEDURE PROCEDURE IMPLEMENTEDBY)) - then (if (EQ SERVERFN 'GAP.SERVER) - then (RETURN)) - (* Make the existing GAP server the - default) - (if GAP.SERVICETYPES - then (PUTASSOC T `(DEFAULT ,SERVERFN) - GAP.SERVICETYPES) - else (push GAP.SERVICETYPES - `(T DEFAULT ,SERVERFN] - (with PROCEDURE PROCEDURE (SETQ IMPLEMENTEDBY 'GAP.SERVER] - (PUTDEF 'GAP 'COURIERPROGRAM COURIERDEF) - (UNMARKASCHANGED 'GAP 'COURIERPROGRAM)) - else (ERROR "Courier program GAP not defined!"]) -) - -(RPAQ? GAP.SERVICETYPES NIL) - -(RPAQ? TALK.GAP.HANDLE '((0 0))) - -(RPAQ? TALK.GAP.UNKNOWN "(Viewpoint or XDE User)") - -(RPAQQ TALK.GAP.PARAMETERS (ttyHost (seven even two 100 (none 0 0)))) - -(RPAQQ TALK.GAP.TRANSPORT ((teletype))) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(GLOBALVARS GAP.SERVICETYPES TALK.GAP.HANDLE TALK.GAP.UNKNOWN TALK.GAP.PARAMETERS TALK.GAP.TRANSPORT) -) -(DECLARE%: DONTCOPY -(DECLARE%: EVAL@COMPILE - -(RECORD GAP.SERVICETYPE (GAP.UNSPECIFIED GAP.SERVICENAME GAP.SERVERFN)) -) -) - - - -(* etc) - - -(FILESLOAD TALK COURIERSERVE) - -(APPENDTOVAR TALK.PROTOCOLTYPES (NS COERCE-TO-NSADDRESS TALK.NS.USERNAME TALK.NS.CONNECT - TALK.NS.EVENT COURIER.START.SERVER)) -(DECLARE%: DOCOPY -(DECLARE%: EVAL@LOADWHEN -(NOT (HASDEF 'GAP 'COURIERPROGRAM)) - -(FILESLOAD NSTALKGAP) -) -) - - - -(* DECLARE%: DONTCOPY DONTEVAL@LOAD EVAL@COMPILE (FILES ETHERRECORDS SPPDECLS) (* Also need to load -EXPORTS.ALL)) - - - - -(* COURIER.RESET.SOCKET used to be defined by TALK, now defined in COURIERSERVE module) - - -(APPENDTOVAR BEFORELOGOUTFORMS (COURIER.RESET.SOCKET)) - -(DEFINE.GAP.SERVER) - -(COURIER.START.SERVER) -(DECLARE%: DONTCOPY - (FILEMAP (NIL (2304 5420 (CH.USER.WORKSTATION 2314 . 3215) (TALK.NS.SERVER 3217 . 5418)) (5421 11213 ( -TALK.NS.USERNAME 5431 . 6816) (TALK.NS.CONNECT 6818 . 10218) (TALK.NS.EVENT 10220 . 10917) ( -TALK.NS.CREDENTIALS 10919 . 11211)) (11237 14919 (GAP.SERVER 11247 . 13041) (DEFINE.GAP.SERVER 13043 - . 14917))))) -STOP diff --git a/obsolete/lispusers/NSTALKGAP b/obsolete/lispusers/NSTALKGAP deleted file mode 100644 index 3a6c3a05..00000000 --- a/obsolete/lispusers/NSTALKGAP +++ /dev/null @@ -1,23 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") -(FILECREATED "22-Jul-88 15:50:38" |{MCS:MCS:STANFORD}NSTALKGAP.;2| 7994 - - changes to%: (COURIERPROGRAMS GAP) (VARS NSTALKGAPCOMS) - - previous date%: "16-Jun-88 17:40:28" |{MCS:MCS:STANFORD}MEDLEYTALK>NSTALKGAP.;3|) - - -(PRETTYCOMPRINT NSTALKGAPCOMS) - -(RPAQQ NSTALKGAPCOMS ((COURIERPROGRAMS GAP))) - -(COURIERPROGRAM GAP (3 3) - TYPES - ((WaitTime CARDINAL) (CharLength (ENUMERATION (five 0) (six 1) (seven 2) (eight 3))) (Parity (ENUMERATION (none 0) (odd 1) (even 2) (one 3) (zero 4))) (StopBits (ENUMERATION (one 0) (two 1))) (FlowControl (RECORD (type (ENUMERATION (none 0) (xOnXOff 1))) (xOn UNSPECIFIED) (xOff UNSPECIFIED))) (SessionHandle (ARRAY 2 UNSPECIFIED)) (SessionParameterObject (CHOICE (xerox800 0 NIL) (xerox850 1 UNSPECIFIED) (xerox860 2 UNSPECIFIED) (system6 3 (RECORD (sendBlockSize CARDINAL) (receiveBlockSize CARDINAL))) (cmcll 4 (RECORD (sendBlockSize CARDINAL) (receiveBlockSize CARDINAL))) (ibm2770 5 (RECORD (sendBlockSize CARDINAL) (receiveBlockSize CARDINAL))) (ibm2770Host 6 (RECORD (sendBlockSize CARDINAL) (receiveBlockSize CARDINAL))) (ibm6670 7 (RECORD (sendBlockSize CARDINAL) (receiveBlockSize CARDINAL))) (ibm6670Host 8 (RECORD (sendBlockSize CARDINAL) (receiveBlockSize CARDINAL))) (ibm3270 9 NIL) (ibm3270Host 10 NIL) (OldTtyHost 11 (RECORD (charLength CharLength) (parity Parity) (stopBits StopBits) (frameTimeout CARDINAL))) (OldTty 12 (RECORD (charLength CharLength) (parity Parity) (stopBits StopBits) (frameTimeout CARDINAL))) (other 13 NIL) (unknown 14 NIL) (ibm2780 15 (RECORD (sendBlockSize CARDINAL) (receiveBlockSize CARDINAL))) (ibm2780Host 16 (RECORD (sendBlockSize CARDINAL) (receiveBlockSize CARDINAL))) (ibm3780 17 (RECORD (sendBlockSize CARDINAL) (receiveBlockSize CARDINAL))) (ibm3780Host 18 (RECORD (sendBlockSize CARDINAL) (receiveBlockSize CARDINAL))) (siemens9750 19 NIL) (siemens9750Host 20 NIL) (ttyHost 21 (RECORD (charLength CharLength) (parity Parity) (stopBits StopBits) (frameTimeout CARDINAL) (flowControl FlowControl))) (tty 22 (RECORD (charLength CharLength) (parity Parity) (stopBits StopBits) (frameTimeout CARDINAL) (flowControl FlowControl))))) (TransportObject (CHOICE (rs232c 0 (RECORD (CommParams CommParamObject) (preemptOthers ReserveType) (preemptMe ReserveType) (phoneNumber STRING) (line (CHOICE (alreadyReserved 0 (RECORD (resource Resource))) (reserveNeeded 1 (RECORD (lineNumber CARDINAL))))))) (bsc 1 (RECORD (localTerminalID STRING) (localSecurityID STRING) (lineControl LineControl) (authenticateProc UNSPECIFIED))) (teletype 2 NIL) (polledBSCController 3 (RECORD (hostControllerName STRING) (controllerAddress ControllerAddress) (portsOnController CARDINAL))) (sdlcController 4 (RECORD (hostControllerName STRING) (controllerAddress ControllerAddress) (portsOnController CARDINAL))) (polledBSCTerminal 5 (RECORD (hostControllerName STRING) (terminalAddress TerminalAddress))) (sdlcTerminal 6 (RECORD (hostControllerName STRING) (terminalAddress TerminalAddress))) (service 7 (RECORD (id LONGCARDINAL))) (unused 8 NIL) (polledBSCPrinter 9 (RECORD (hostControllerName STRING) (printerAddress TerminalAddress))) (sdlcPrinter 10 (RECORD (hostControllerName STRING) (printerAddress TerminalAddress))))) (Sequence.TransportObject (SEQUENCE TransportObject)) (BidReply (ENUMERATION (wack 0) (nack 1) (default 2))) (ExtendedBoolean (ENUMERATION (true 0) (false 1) (default 2))) (DeviceType (ENUMERATION (undefined 0) (terminal 1) (printer 2))) (AccessDetail (CHOICE (directConn 0 (RECORD (duplex (ENUMERATION (full 0) (half 1))) (lineType LineType) (lineSpeed LineSpeed))) (dialConn 1 (RECORD (duplex (ENUMERATION (full 0) (half 1))) (lineType LineType) (lineSpeed LineSpeed) (dialMode (ENUMERATION (manual 0) (auto 1))) (dialerNumber CARDINAL) (retryCount CARDINAL))))) (CommParamObject (RECORD (accessDetail AccessDetail))) (LineType (ENUMERATION (bitSynchronous 0) (byteSynchronous 1) (asynchronous 2) (autoRecognition 3))) (LineSpeed (ENUMERATION (bps50 0) (bps75 1) (bps110 2) (bps135p5 3) (bps150 4) (bps300 5) (bps600 6) (bps1200 7) (bps2400 8) (bps3600 9) (bps4800 10) (bps7200 11) (bps9600 12) (bps19200 13) (bps28800 14) (bps38400 15) (bps48000 16) (bps56000 17) (bps57600 18))) (LineControl (ENUMERATION (primary 0) (secondary 1))) (ControllerAddress CARDINAL) (TerminalAddress CARDINAL) (credentials (AUTHENTICATION . CREDENTIALS)) (verifier (AUTHENTICATION . VERIFIER)) (Duplexity (ENUMERATION (full 0) (half 1))) (PortClientType (ENUMERATION (unassigned 0) (outOfService 1) (its 2) (irs 3) (gws 4) (ibm3270Host 5) (ttyEmulation 6) (rbs 7) (fax 8) (mailGateway 9) (phototypesetter 10))) (PortDialerType (ENUMERATION (none 0) (vadic 1) (hayes 2) (ventel 3) (rs366 4))) (PortEchoingLocation (ENUMERATION (application 0) (ciu 1) (terminal 2))) (ReserveType (ENUMERATION (preemptNever 0) (preemptAlways 1) (preemptInactive 2))) (RS232CData (RECORD (cIUPort BOOLEAN) (owningClientType PortClientType) (preemptionAllowed BOOLEAN) (lineNumber CARDINAL) (dialerNumber CARDINAL) (duplexity Duplexity) (dialingHardware PortDialerType) (charLength CharLength) (echoing PortEchoingLocation) (flowControl FlowControl) (lineSpeed LineSpeed) (parity Parity) (stopBits StopBits) (portActsAsDCE BOOLEAN) (accessControl NSNAME) (validLineSpeeds (SEQUENCE LineSpeed)))) (RS232CBack (RECORD (owningCIU STRING) (owningECS STRING) (owningClient STRING) (portNumber CARDINAL))) (IBMDeviceType (ENUMERATION (unused 0) (model1 1) (model2 2) (model3 3) (model4 4) (model5 5) (printer 6) (other 7))) (IBM3270Languages (ENUMERATION (USenglish 0) (Austrian 1) (AustrianAlt 2) (German 3) (GermanAlt 4) (Belgian 5) (Brazilian 6) (CanadianFrench 7) (Danish 8) (DanishAlt 9) (Norwegian 10) (NorwegianAlt 11) (Finnish 12) (FinnishAlt 13) (Swedish 14) (SwedishAlt 15) (French 16) (International 17) (Italian 18) (JapaneseEnglish 19) (JapaneseKana 20) (Portuguese 21) (Spanish 22) (SpanishAlt 23) (SpanishSpeaking 24) (UKenglish 25) (unused1 26) (unused2 27) (unused3 28) (unused4 29) (unused5 30) (unused6 31))) (ControllerLinkType (ENUMERATION (sdlc 0) (bsc 1))) (IBM3270Device (RECORD (model IBMDeviceType) (accessControl NSNAME))) (IBM3270Controller (RECORD (controllerAddress CARDINAL) (portsOnController CARDINAL) (linkType ControllerLinkType) (language IBM3270Languages) (devices (SEQUENCE IBM3270Device)))) (IBM3270HostData (SEQUENCE IBM3270Controller)) (IBM3270HostBack (RECORD (path NSNAME)))) - PROCEDURES - ((Reset 0) (Create 2 (SessionParameterObject Sequence.TransportObject WaitTime credentials verifier) RETURNS (SessionHandle) REPORTS (badAddressFormat controllerAlreadyExists controllerDoesNotExist dialingHardwareProblem illegalTransport inconsistentParams mediumConnectFailed noCommunicationHardware noDialingHardware terminalAddressInUse terminalAddressInvalid tooManyGateStreams transmissionMediumUnavailable serviceTooBusy userNotAuthenticated userNotAuthorized serviceNotFound registeredTwice transmissionMediumHardwareProblem transmissionMediumUnavailable transmissionMediumNotReady noAnswerOrBusy noRouteToGAPService gapServiceNotResponding courierProtocolMismatch gapVersionMismatch))) - ERRORS - ((unimplemented 0) (noCommunicationHardware 1) (illegalTransport 2) (mediumConnectFailed 3) (badAddressFormat 4) (noDialingHardware 5) (dialingHardwareProblem 6) (transmissionMediumUnavailable 7) (inconsistentParams 8) (tooManyGateStreams 9) (bugInGAPCode 10) (gapNotExported 11) (gapCommunicationError 12) (controllerAlreadyExists 13) (controllerDoesNotExist 14) (terminalAddressInUse 15) (terminalAddressInvalid 16) (serviceTooBusy 17) (userNotAuthenticated 18) (userNotAuthorized 19) (serviceNotFound 20) (registeredTwice 21) (transmissionMediumHardwareProblem 22) (transmissionMediumUnavailable 23) (transmissionMediumNotReady 24) (noAnswerOrBusy 25) (noRouteToGAPService 26) (gapServiceNotResponding 27) (courierProtocolMismatch 28) (gapVersionMismatch 29)) -) -(DECLARE%: DONTCOPY - (FILEMAP (NIL))) -STOP From 30af8ea5cbfd42931563878a01c89496659b11ed Mon Sep 17 00:00:00 2001 From: rmkaplan <69548581+rmkaplan@users.noreply.github.com> Date: Mon, 16 Jun 2025 11:56:33 -0700 Subject: [PATCH 4/7] Clicking on the graph after the main window has closed does't break (#2146) --- lispusers/DINFO | 90 ++++++++++++++++++++++++++----------------- lispusers/DINFO.LCOM | Bin 29959 -> 29876 bytes 2 files changed, 55 insertions(+), 35 deletions(-) diff --git a/lispusers/DINFO b/lispusers/DINFO index 12b94118..cae8c059 100644 --- a/lispusers/DINFO +++ b/lispusers/DINFO @@ -1,12 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "25-May-2024 13:19:49" {WMEDLEY}DINFO.;14 65819 +(FILECREATED " 9-May-2025 21:15:54" {WMEDLEY}DINFO.;19 67369 :EDIT-BY rmk - :CHANGES-TO (FNS DINFO.OPENTEXTSTREAM DINFO.UPDATE.TEXT.DISPLAY) + :CHANGES-TO (FNS DINFO.CLOSEFN DINFO.UPDATE.FROM.GRAPH DINFO.GET.GRAPH.WINDOW + DINFO.OPENTEXTSTREAM) - :PREVIOUS-DATE "11-Apr-2024 08:27:34" {WMEDLEY}DINFO.;13) + :PREVIOUS-DATE " 7-May-2025 10:13:33" {WMEDLEY}DINFO.;17) (PRETTYCOMPRINT DINFOCOMS) @@ -482,12 +483,19 @@ (WINDOWADDPROP WINDOW 'EXPANDFN 'DINFO.EXPANDFN]) (DINFO.CLOSEFN - [LAMBDA (W) (* drc%: "25-Jan-86 18:26") + [LAMBDA (W) (* ; "Edited 9-May-2025 21:15 by rmk") + (* drc%: "25-Jan-86 18:26") + + (* ;; + "This closes the DINFO text window. When the text window closes, the graph window closes too.") + + (* ;; "There is a potential cycle from the graph to the the text window and then back to the graph. To clean this up, every window should have a pointer to this window, and this window would point to the DINFOGRAPH. If we ever wanted to collect (why would we?), we would have a single place to break the link.") + (LET [(GRAPH (WINDOWPROP W 'DINFOGRAPH] - (if (type? DINFOGRAPH GRAPH) - then (CLOSEW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH)) - (* remove circularity...) - (WINDOWPROP W 'DINFOGRAPH NIL]) + (CL:WHEN (type? DINFOGRAPH GRAPH) + (CLOSEW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH)) + (* ; "remove circularity...") + (AND NIL (WINDOWPROP W 'DINFOGRAPH NIL)))]) (DINFO.SHRINKFN [LAMBDA (W) (* drc%: "25-Jan-86 18:26") @@ -856,20 +864,28 @@ (fetch (DINFONODE LABEL) of (fetch (DINFOGRAPH CURRENTNODE) of DINFO.GRAPH]) (DINFO.UPDATE.FROM.GRAPH - [LAMBDA (GRAPHER.NODE GRAPH.WINDOW) (* ; "Edited 9-Mar-2024 14:21 by rmk") + [LAMBDA (GRAPHER.NODE GRAPH.WINDOW) (* ; "Edited 9-May-2025 16:16 by rmk") + (* ; "Edited 9-Mar-2024 14:21 by rmk") (* drc%: "12-Dec-85 18:34") - (AND GRAPHER.NODE (ADD.PROCESS `[DINFO.UPDATE ',(WINDOWPROP GRAPH.WINDOW 'DINFOGRAPH) - ',(fetch (GRAPHNODE NODEID) of GRAPHER.NODE] - 'NAME "DInfo From Graph"]) + (CL:WHEN GRAPHER.NODE + (ADD.PROCESS `[DINFO.UPDATE ',(WINDOWPROP GRAPH.WINDOW 'DINFOGRAPH) + ',(fetch (GRAPHNODE NODEID) of GRAPHER.NODE] + 'NAME "DInfo From Graph"))]) (DINFO.GET.GRAPH.WINDOW - [LAMBDA (GRAPH REGION) (* drc%: "25-Jan-86 18:05") + [LAMBDA (GRAPH REGION) (* ; "Edited 9-May-2025 16:21 by rmk") + (* drc%: "25-Jan-86 18:05") + + (* ;; "Given a graph, this creates the window with the nodes to click on. The graph points to the graph window, and the graph window points to the graph. On closing the cycle is broken by removing the window's pointer to the graph.") + + (* ;; "Note that the DINFO text window is not part of this.") + (LET ((W (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH))) (COND ((WINDOWP W)) (T (SETQ W (DINFO.CREATE.GRAPH.WINDOW GRAPH REGION)) - [WINDOWPROP W 'CLOSEFN (FUNCTION (LAMBDA (W) - (WINDOWPROP W 'DINFOGRAPH NIL] + [AND NIL (WINDOWPROP W 'CLOSEFN (FUNCTION (LAMBDA (W) + (WINDOWPROP W 'DINFOGRAPH NIL] (replace (DINFOGRAPH GRAPH.WINDOW) of GRAPH with W))) (WINDOWPROP W 'DINFOGRAPH GRAPH) W]) @@ -988,7 +1004,8 @@ (DEFINEQ (DINFO.UPDATE.TEXT.DISPLAY - [LAMBDA (GRAPH NODE SEL OFF?) (* ; "Edited 25-May-2024 13:16 by rmk") + [LAMBDA (GRAPH NODE SEL OFF?) (* ; "Edited 6-May-2025 23:45 by rmk") + (* ; "Edited 25-May-2024 13:16 by rmk") (* drc%: "25-Jan-86 18:18") (* drc%: "25-Jan-86 18:18") (LET ((WINDOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) @@ -1005,7 +1022,7 @@ WINDOW NIL NIL PROPS) (replace (DINFOGRAPH LAST.TEXT) of GRAPH with NIL) elseif (SETQ FULLFILENAME (MKATOM (INFILEP FILENAME))) - then (SETQ TEXTSTREAM (DINFO.OPENTEXTSTREAM FULLFILENAME WINDOW FROM TO PROPS)) + then (SETQ TEXTSTREAM (DINFO.OPENTEXTSTREAM FULLFILENAME GRAPH WINDOW FROM TO PROPS)) (DINFO.SHOWSEL TEXTSTREAM SEL) else (OPENTEXTSTREAM (OPENSTRINGSTREAM (CONCAT "Sorry, can't find the text for this node." (MKSTRING (CHARACTER (CHARCODE CR))) @@ -1037,7 +1054,9 @@ (PROMPTPRINT "DInfo is busy"]) (DINFO.OPENTEXTSTREAM - [LAMBDA (FILE WINDOW FROM TO PROPS) (* ; "Edited 25-May-2024 13:17 by rmk") + [LAMBDA (FILE GRAPH WINDOW FROM TO PROPS) (* ; "Edited 9-May-2025 12:37 by rmk") + (* ; "Edited 7-May-2025 00:24 by rmk") + (* ; "Edited 25-May-2024 13:17 by rmk") (* ; "Edited 10-Apr-2024 23:46 by rmk") (* ; "Edited 10-Mar-2024 15:37 by rmk") (* drc%: "25-Jan-86 18:24") @@ -1054,9 +1073,10 @@ else (CL:WHEN TEXTSTREAM (TEDIT.KILL TEXTSTREAM)) (CLEARW T) (CLEARW WINDOW) + (WINDOWPROP WINDOW 'DINFOGRAPH GRAPH) [RESETSAVE NIL `(AND RESETSTATE (WINDOWPROP ,WINDOW 'LAST.TEXT NIL] (PROG1 (TEDIT (OPENTEXTSTREAM FILE NIL FROM TO PROPS) - WINDOW) + (OR WINDOW 'DINFO)) (replace (DINFOGRAPH LAST.TEXT) of (DINFOGRAPH WINDOW) with THIS.TEXT))]) (DINFO.SHOWSEL @@ -1113,21 +1133,21 @@ (SETTEMPLATE 'DINFOGRAPHPROP 'MACRO) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4582 6041 (DINFOGRAPHPROP 4582 . 6041)) (7295 24433 (DINFO 7305 . 8919) (DINFO.UPDATE -8921 . 11785) (DINFOGRAPH 11787 . 12205) (DINFO.SPECIAL.UPDATE 12207 . 13905) (DINFO.READ.GRAPH 13907 - . 15762) (DINFO.WRITE.GRAPH 15764 . 16854) (DINFO.SELECT.GRAPH 16856 . 17763) (DINFO.DEFAULT.MENU -17765 . 20289) (DINFO.FIND 20291 . 22877) (DINFO.LOOKUP 22879 . 24431)) (24434 27128 ( -DINFO.READ.KOTO.GRAPH 24444 . 27126)) (27129 29443 (DINFO.SETUP.WINDOW 27139 . 27820) (DINFO.CLOSEFN -27822 . 28255) (DINFO.SHRINKFN 28257 . 28453) (DINFO.EXPANDFN 28455 . 29012) (DINFO.ICONFN 29014 . -29441)) (29444 40766 (DINFO.ADD.FMENU 29454 . 30549) (DINFO.CREATE.FMENU 30551 . 34578) ( -DINFO.FMW.CLOSEFN 34580 . 35425) (DINFO.FMENU.HANDLER 35427 . 36066) (DINFO.UPDATE.FMENU 36068 . 38257 -) (DINFO.TOGGLE.MENU 38259 . 38849) (DINFO.TOGGLE.GRAPH 38851 . 39350) (DINFO.TOGGLE.HISTORY 39352 . -39896) (DINFO.TOGGLE.TEXT 39898 . 40764)) (40767 48562 (DINFO.UPDATE.MENU.DISPLAY 40777 . 44898) ( -DINFO.UPDATE.FROM.MENU 44900 . 45199) (DINFO.UPDATE.HISTORY 45201 . 47731) (DINFO.HISTORIC.UPDATE -47733 . 48560)) (48563 58892 (DINFO.UPDATE.GRAPH.DISPLAY 48573 . 50025) (DINFO.UPDATE.FROM.GRAPH 50027 - . 50503) (DINFO.GET.GRAPH.WINDOW 50505 . 51090) (DINFO.CREATE.GRAPH.WINDOW 51092 . 52209) ( -DINFO.SHOWGRAPH 52211 . 53936) (DINFO.INVERT.NODE 53938 . 55326) (DINFO.LAYOUTGRAPH 55328 . 58890)) ( -58893 65232 (DINFO.UPDATE.TEXT.DISPLAY 58903 . 60963) (DINFO.TITLEMENUFN 60965 . 62090) ( -DINFO.OPENTEXTSTREAM 62092 . 63592) (DINFO.SHOWSEL 63594 . 64327) (DINFO.GET.FILENAME 64329 . 65230))) + (FILEMAP (NIL (4641 6100 (DINFOGRAPHPROP 4641 . 6100)) (7354 24492 (DINFO 7364 . 8978) (DINFO.UPDATE +8980 . 11844) (DINFOGRAPH 11846 . 12264) (DINFO.SPECIAL.UPDATE 12266 . 13964) (DINFO.READ.GRAPH 13966 + . 15821) (DINFO.WRITE.GRAPH 15823 . 16913) (DINFO.SELECT.GRAPH 16915 . 17822) (DINFO.DEFAULT.MENU +17824 . 20348) (DINFO.FIND 20350 . 22936) (DINFO.LOOKUP 22938 . 24490)) (24493 27187 ( +DINFO.READ.KOTO.GRAPH 24503 . 27185)) (27188 30053 (DINFO.SETUP.WINDOW 27198 . 27879) (DINFO.CLOSEFN +27881 . 28865) (DINFO.SHRINKFN 28867 . 29063) (DINFO.EXPANDFN 29065 . 29622) (DINFO.ICONFN 29624 . +30051)) (30054 41376 (DINFO.ADD.FMENU 30064 . 31159) (DINFO.CREATE.FMENU 31161 . 35188) ( +DINFO.FMW.CLOSEFN 35190 . 36035) (DINFO.FMENU.HANDLER 36037 . 36676) (DINFO.UPDATE.FMENU 36678 . 38867 +) (DINFO.TOGGLE.MENU 38869 . 39459) (DINFO.TOGGLE.GRAPH 39461 . 39960) (DINFO.TOGGLE.HISTORY 39962 . +40506) (DINFO.TOGGLE.TEXT 40508 . 41374)) (41377 49172 (DINFO.UPDATE.MENU.DISPLAY 41387 . 45508) ( +DINFO.UPDATE.FROM.MENU 45510 . 45809) (DINFO.UPDATE.HISTORY 45811 . 48341) (DINFO.HISTORIC.UPDATE +48343 . 49170)) (49173 60036 (DINFO.UPDATE.GRAPH.DISPLAY 49183 . 50635) (DINFO.UPDATE.FROM.GRAPH 50637 + . 51208) (DINFO.GET.GRAPH.WINDOW 51210 . 52234) (DINFO.CREATE.GRAPH.WINDOW 52236 . 53353) ( +DINFO.SHOWGRAPH 53355 . 55080) (DINFO.INVERT.NODE 55082 . 56470) (DINFO.LAYOUTGRAPH 56472 . 60034)) ( +60037 66782 (DINFO.UPDATE.TEXT.DISPLAY 60047 . 62222) (DINFO.TITLEMENUFN 62224 . 63349) ( +DINFO.OPENTEXTSTREAM 63351 . 65142) (DINFO.SHOWSEL 65144 . 65877) (DINFO.GET.FILENAME 65879 . 66780))) )) STOP diff --git a/lispusers/DINFO.LCOM b/lispusers/DINFO.LCOM index d2035c3749a340398ba60cbf889440024000779f..98343a3016cf40cfa809a22c50b51a5ff7ba1bd6 100644 GIT binary patch delta 855 zcmZvaPiWIn9LJOD+O0BIv71G3{F;KcY^{BHN!vt({!7=mHYrJJ1?_Y&og%DLMDXNI zz0LWKg5EqkvVkDNpdxq|MM3X+(A)H;?B!Eycn=QSerE7Fq65z%P2(@;j0mJf4 zCL_So;+?BY@E?qXgj6`m>MNF3aD*|s9za>;$?AMn u_KkoJ5;!Ie7;2W;q=`6y(iDMzW*xG?rk2`f-3WT#%42jePP?0{_Q8KoG}%f3 delta 933 zcmZvbO=#3W6vsD<-PSGkgMKYl%4=FM5q6u&BwH<8K$TXUMO)i8>6I;^sAV-wi=Vxs}4 z<)u=Ih1HciYpd`d8xga7o{P`dJVOf%{T~s|r6gp6naD|?$Yn(4n2Th)-A7uvZn7Z` z@jO&q&$wbai+)k39>5}0)Y`YxT!eB(oULGqg**Y~0)wMp%)toLLtc-49zrq%rsbDh z){4@i*72Y!_777Ec(;Z--4J%hX5NJ?a+Yf>W3$wRt2$^PueO2=U`HuX5G%0%;r zqIXj-`(4CjGE8+nL%)1H3^Ez>AP)AbJ^2e z6C{GxMo4&Va3CeeC{3$wlP|asy>FR4%y%++{pgZ8ztA|>6_;aqE@9byli@^+Q@4_D zI-zgSE)x~?ue%!K&y~)k@r6ykD;U(!M=~~0wKE+0~u&4Nt zSO(gFRscv8!Ep^cFqQ&8pncgSpEg4QtEc5EE&1O!D$C#*zCq=21C|BQY@OWO; Date: Mon, 16 Jun 2025 20:23:40 -0700 Subject: [PATCH 5/7] Fix Issue #2148: loadups fail on WSL1 with Xvnc server errors - fixed by adding new flag to medley script, use this flag in loadup script (#2163) * Fix Issue #2155 (loadup -f -b -x fails can't find full.sysout). Reordered loadup so that the sysouts are copied to loadups before loadup-aux and loadup-db are run, and that the product of loadup-aux are copied to loadups before loadup-db is run -- all to make sure that the right prerequisites are available in loadups when needed. Also forced a run of loadup-aux if full.sysout is newer than exports.all when -db is specified. * Fix Issue 2148 - loadups fail on WSL1 with Xvnc server error. Root cause of 2148 is that certain Medley sessions in loadups run very quickly - less that a second or 2. This causes the medley script to improperly detect an Xvnc server error. Fixed by adding a cli flag --automation that forces the medley script to skip the check for Xvnc server errors. Changed loadup script to call medley with this flag set. Also add a cl flag to loadup --forcevnc that forces loadup to use vnc even on WSL2. This is intended for testing purposes only. --- docs/man-page/man_medley.html | 9 +++++++++ docs/man-page/medley.1 | 9 +++++++++ docs/man-page/medley.1.gz | Bin 5066 -> 5242 bytes docs/man-page/medley.1.md | 9 +++++++-- scripts/loadups/loadup | 5 +++++ scripts/loadups/loadup-setup.sh | 3 +++ scripts/medley/medley.command | 8 +++++++- scripts/medley/medley_args.sh | 4 ++++ scripts/medley/medley_usage.sh | 2 ++ scripts/medley/medley_vnc.sh | 2 +- 10 files changed, 47 insertions(+), 4 deletions(-) diff --git a/docs/man-page/man_medley.html b/docs/man-page/man_medley.html index e75ac6be..a0e6c58a 100644 --- a/docs/man-page/man_medley.html +++ b/docs/man-page/man_medley.html @@ -284,6 +284,15 @@ environment variable LDEREPEATCM.

On Windows/Cygwin installations, FILE is specified in the Medley file system, not the host Windows file system.

+
-am, –automation
+
+

Useful only when using –vnc (and always on WSL1). When calling medley +as part of an automation script, often Medley will run for a very short +time (< a couple of seconds). This can cause issues with medley code +that detects Xvnc server failures. Setting this flag notifies Medley +that very short Medley sessions are possible and the Xvnc error +detection needs to be adjusted accordingly.

+

Other Options

diff --git a/docs/man-page/medley.1 b/docs/man-page/medley.1 index c2da6a5d..c73c1f9c 100644 --- a/docs/man-page/medley.1 +++ b/docs/man-page/medley.1 @@ -386,6 +386,15 @@ environment variable LDEREPEATCM. On Windows/Cygwin installations, \f[I]FILE\f[R] is specified in the Medley file system, not the host Windows file system. .RE +.TP +-am, \[en]automation +Useful only when using \[en]vnc (and always on WSL1). +When calling medley as part of an automation script, often Medley will +run for a very short time (< a couple of seconds). +This can cause issues with medley code that detects Xvnc server +failures. +Setting this flag notifies Medley that very short Medley sessions are +possible and the Xvnc error detection needs to be adjusted accordingly. .SS Other Options .PP \ diff --git a/docs/man-page/medley.1.gz b/docs/man-page/medley.1.gz index 4e563a85f4d0176e3502e746c4325fef5ac879d8..95dd0cf33f63760b6aced25bfd47a659cb027fbf 100644 GIT binary patch literal 5242 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 A)c^nh literal 5066 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 diff --git a/docs/man-page/medley.1.md b/docs/man-page/medley.1.md index 28215964..425e6a30 100644 --- a/docs/man-page/medley.1.md +++ b/docs/man-page/medley.1.md @@ -216,7 +216,7 @@ specified in the Medley file system, not the host Windows file system. If the given value is "-", Medley will start up without using REM.CM file. There is no default Medley REM.CM file. - + On Windows/Cygwin installations, *FILE* is specified in the Medley file system, not the host Windows file system. @@ -254,10 +254,15 @@ for the parameter will be reset to the default value - which in the case of *Hos -cc \[*FILE* | -], \-\-repeat \[*FILE* | -] : Run Medley once. And then as long as *FILE* exists and is greater then zero length, repeatedly run Medley using *FILE* as the REM.CM file that Medley reads and executes at startup. Each run of Medley can change the contents of *FILE* to effect the subsequent run of Medley. To end the cycle, Medley needs to delete *FILE*. WIthin Medley, *FILE* can be found as the value of the environment variable LDEREPEATCM. - + On Windows/Cygwin installations, *FILE* is specified in the Medley file system, not the host Windows file system. +-am, --automation +: Useful only when using --vnc (and always on WSL1). When calling medley as part of an automation script, often Medley +will run for a very short time (< a couple of seconds). This can cause issues with medley code that detects Xvnc server failures. +Setting this flag notifies Medley that very short Medley sessions are possible and the Xvnc error detection needs to be adjusted accordingly. + Other Options ------------- diff --git a/scripts/loadups/loadup b/scripts/loadups/loadup index 631a7d16..ab84791e 100755 --- a/scripts/loadups/loadup +++ b/scripts/loadups/loadup @@ -157,6 +157,11 @@ main() { # internal noendmsg=true ;; + --forcevnc) + # internal - for testing + # WSL only -otherwise warning msg from medley + force_vnc="+" + ;; -z | -man | --man ) if [ "$(uname)" = "Darwin" ] then diff --git a/scripts/loadups/loadup-setup.sh b/scripts/loadups/loadup-setup.sh index 47b0ba1a..0177dd08 100644 --- a/scripts/loadups/loadup-setup.sh +++ b/scripts/loadups/loadup-setup.sh @@ -161,6 +161,7 @@ loadup_finish () { exit ${exit_code} } +force_vnc="-" run_medley () { /bin/sh "${MEDLEYDIR}/scripts/medley/medley.command" \ --config - \ @@ -171,6 +172,8 @@ run_medley () { --rem.cm "${cmfile}" \ --greet "${initfile}" \ --sysout "$1" \ + --automation \ + --vnc "${force_vnc}" \ "$2" "$3" "$4" "$5" "$6" "$7" ; exit_code=$? } diff --git a/scripts/medley/medley.command b/scripts/medley/medley.command index 28ce293f..70a659b0 100755 --- a/scripts/medley/medley.command +++ b/scripts/medley/medley.command @@ -586,6 +586,8 @@ flags: -x - | --logindir - : use MEDLEYDIR/logindir as LOGINDIR in Medley + -am | --automation : this call to medley is being used in automation, adjust timings. Relevant in -vnc case only. + -cm FILE | --rem.cm FILE : use FILE as the REM.CM when starting up Medley. FILE must be absolute pathname. -cm - | --rem.cm - : do not use an REM.CM. Negate any prior setting, e.g., from config file. @@ -638,6 +640,7 @@ pixelscale_arg="" borderwidth_arg="" remcm_arg="${LDEREMCM}" repeat_cm="" +automation=false # Add marker at end of args so we can accumulate pass-on args in args array set -- "$@" "--start_of_pass_args" @@ -915,6 +918,9 @@ do fi exit 0 ;; + -am | --automation) + automation=true + ;; -nf | -NF | --nofork) # for use in loadups case $2 in @@ -1702,7 +1708,7 @@ do "$(ip_addr)":"${VNC_PORT}" \ >>"${LOG}" 2>&1 & wait $! - if [ $(( $(date +%s) - start_time )) -lt 5 ] + if [ "${automation}" = false ] && [ $(( $(date +%s) - start_time )) -lt 5 ] then if [ -z "$(pgrep -f "Xvnc ${DISPLAY}")" ] then diff --git a/scripts/medley/medley_args.sh b/scripts/medley/medley_args.sh index eac7baa0..2c3ec04d 100755 --- a/scripts/medley/medley_args.sh +++ b/scripts/medley/medley_args.sh @@ -48,6 +48,7 @@ pixelscale_arg="" borderwidth_arg="" remcm_arg="${LDEREMCM}" repeat_cm="" +automation=false # Add marker at end of args so we can accumulate pass-on args in args array set -- "$@" "--start_of_pass_args" @@ -325,6 +326,9 @@ do fi exit 0 ;; + -am | --automation) + automation=true + ;; -nf | -NF | --nofork) # for use in loadups case $2 in diff --git a/scripts/medley/medley_usage.sh b/scripts/medley/medley_usage.sh index e241ab16..a0346f91 100644 --- a/scripts/medley/medley_usage.sh +++ b/scripts/medley/medley_usage.sh @@ -115,6 +115,8 @@ flags: -x - | --logindir - : use MEDLEYDIR/logindir as LOGINDIR in Medley + -am | --automation : this call to medley is being used in automation, adjust timings. Relevant in -vnc case only. + -cm FILE | --rem.cm FILE : use FILE as the REM.CM when starting up Medley. FILE must be absolute pathname. -cm - | --rem.cm - : do not use an REM.CM. Negate any prior setting, e.g., from config file. diff --git a/scripts/medley/medley_vnc.sh b/scripts/medley/medley_vnc.sh index b578f859..df4f5fb4 100755 --- a/scripts/medley/medley_vnc.sh +++ b/scripts/medley/medley_vnc.sh @@ -215,7 +215,7 @@ "$(ip_addr)":"${VNC_PORT}" \ >>"${LOG}" 2>&1 & wait $! - if [ $(( $(date +%s) - start_time )) -lt 5 ] + if [ "${automation}" = false ] && [ $(( $(date +%s) - start_time )) -lt 5 ] then if [ -z "$(pgrep -f "Xvnc ${DISPLAY}")" ] then From 87fafe901ed0da85884982f9b8a5d9d3063cbc73 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Mon, 16 Jun 2025 20:24:54 -0700 Subject: [PATCH 6/7] Medley script currently forces -vnc when using WSL1. This PR removes this infelicity. (#2180) IMedley script currently forces -vnc when using WSL1. This PR removes this infelicity. (#2180) --- scripts/medley/medley.command | 6 ------ scripts/medley/medley_args.sh | 6 ------ 2 files changed, 12 deletions(-) diff --git a/scripts/medley/medley.command b/scripts/medley/medley.command index 70a659b0..544b9cec 100755 --- a/scripts/medley/medley.command +++ b/scripts/medley/medley.command @@ -1008,12 +1008,6 @@ do shift done -# if running on WSL1, force use_vnc -if [ "${wsl}" = true ] && [ "${wsl_ver}" -eq 1 ] -then - use_vnc=true -fi - # Process run_id # if it doesn't end in #, make sure that there is not another instance currently running with this same id diff --git a/scripts/medley/medley_args.sh b/scripts/medley/medley_args.sh index 2c3ec04d..8920aa06 100755 --- a/scripts/medley/medley_args.sh +++ b/scripts/medley/medley_args.sh @@ -416,9 +416,3 @@ do shift done -# if running on WSL1, force use_vnc -if [ "${wsl}" = true ] && [ "${wsl_ver}" -eq 1 ] -then - use_vnc=true -fi - From 72032afddee4e95d9d9e1a79c70801c2a80def31 Mon Sep 17 00:00:00 2001 From: Matt Heffron Date: Mon, 16 Jun 2025 20:49:27 -0700 Subject: [PATCH 7/7] Fix POSTSCRIPTSTREAM to refine or default values for COLOR. (#2177) * Fix POSTSCRIPTSTREAM to accept SMALLP values 0 and 1 as COLOR. (Don't require them to be FLOATP.) * Changed handling when color values are not directly interpretable without other context (e.g., as an index into a color map). POSTSCRIPTSTREAM should behave similar to INTERPRESS and just ignore a BRUSHCOLOR if it is a SMALLP that's neither 0 nor 1, and use the current DSPCOLOR of the stream. If someone wants a specific color, or grayscale, they can use the color descriptions as documented in POSTSCRIPTSTREAM.TEDIT. * Update documentation to better describe allowed COLOR specification. --- library/POSTSCRIPTSTREAM | 271 +++++++++++++++++---------------- library/POSTSCRIPTSTREAM.LCOM | Bin 94435 -> 92949 bytes library/POSTSCRIPTSTREAM.TEDIT | 41 +++-- 3 files changed, 159 insertions(+), 153 deletions(-) diff --git a/library/POSTSCRIPTSTREAM b/library/POSTSCRIPTSTREAM index 44bdaf81..ab44fd30 100644 --- a/library/POSTSCRIPTSTREAM +++ b/library/POSTSCRIPTSTREAM @@ -1,29 +1,15 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "28-Apr-2025 00:17:24" {DSK}matt>Interlisp>medley>library>POSTSCRIPTSTREAM.;14 257549 +(FILECREATED " 5-Jun-2025 16:12:21" {DSK}matt>Interlisp>medley>library>POSTSCRIPTSTREAM.;5 258146 :EDIT-BY "mth" - :CHANGES-TO (FNS \DRAWLINE.PSC POSTSCRIPT.PUTRGBCOLOR \PSC.COLOR.TO.RGB \BLTSHADE.PSC - \DRAWARC.PSC \DRAWCIRCLE.PSC \DRAWCURVE.PSC \DRAWELLIPSE.PSC \DRAWPOLYGON.PSC - \FILLCIRCLE.PSC \FILLPOLYGON.PSC POSTSCRIPT.COLORSTRING POSTSCRIPT.OUTSTR - \DSPCOLOR.PSC POSTSCRIPT.PUTCOLOR \DRAWPOINT.PSC \POSTSCRIPT.CHANGECHARSET - POSTSCRIPT.HARDCOPYW POSTSCRIPT.CLOSESTRING POSTSCRIPT.ENDPAGE - POSTSCRIPT.PUTCOMMAND POSTSCRIPT.SET-FAKE-LANDSCAPE POSTSCRIPT.SHOWACCUM - POSTSCRIPT.STARTPAGE \POSTSCRIPTTAB \PS.BOUTFIXP \PS.SCALEHACK - \SCALEDBITBLT.PSC \SETPOS.PSC \SETXFORM.PSC \STRINGWIDTH.PSC \SWITCHFONTS.PSC - \TERPRI.PSC \CHARWIDTH.PSC \DSPBOTTOMMARGIN.PSC \DSPCLIPPINGREGION.PSC - \DSPFONT.PSC \DSPLEFTMARGIN.PSC \DSPLINEFEED.PSC \DSPPUSHSTATE.PSC - \DSPPOPSTATE.PSC \DSPRESET.PSC \DSPRIGHTMARGIN.PSC \DSPROTATE.PSC - \DSPSCALE.PSC \DSPSCALE2.PSC \DSPSPACEFACTOR.PSC \DSPTOPMARGIN.PSC - \DSPTRANSLATE.PSC \DSPXPOSITION.PSC \DSPYPOSITION.PSC \FIXLINELENGTH.PSC - \MOVETO.PSC \POSTSCRIPT.OUTCHARFN \POSTSCRIPT.PRINTSLUG - \POSTSCRIPT.SPECIALOUTCHARFN \UPDATE.PSC \POSTSCRIPT.ACCENTFN - \POSTSCRIPT.ACCENTPAIR OPENPOSTSCRIPTSTREAM) - (VARS POSTSCRIPTSTREAMCOMS) - (RECORDS \POSTSCRIPTDATA) + :CHANGES-TO (FNS \BLTSHADE.PSC \PSC.COLOR.TO.RGB \DRAWLINE.PSC \DRAWARC.PSC POSTSCRIPTSEND + \TERPRI.PSC POSTSCRIPT.PUTCOMMAND POSTSCRIPT.PUTRGBCOLOR \DSPCOLOR.PSC + \DRAWCIRCLE.PSC \DRAWELLIPSE.PSC \DRAWPOINT.PSC \DRAWPOLYGON.PSC + \FILLCIRCLE.PSC \FILLPOLYGON.PSC POSTSCRIPT.TEDIT \BITBLT.PSC) - :PREVIOUS-DATE "10-Dec-2024 15:16:36" + :PREVIOUS-DATE "28-Apr-2025 00:17:24" {DSK}matt>Interlisp>medley>library>POSTSCRIPTSTREAM.;1) @@ -502,47 +488,71 @@ (\POSTSCRIPT.NSHASH *POSTSCRIPT-NS-TRANSLATIONS*]) (POSTSCRIPT.PUTRGBCOLOR - [LAMBDA (STREAM COLOR EOL?) (* ; "Edited 28-Apr-2025 00:02 by mth") + [LAMBDA (STREAM COLOR EOL?) (* ; "Edited 5-Jun-2025 14:06 by mth") + (* ; "Edited 28-Apr-2025 00:02 by mth") (* ; "Edited 26-Apr-2025 17:16 by mth") (AND COLOR (CL:MULTIPLE-VALUE-BIND (RGB GRAY COLORSTR) - (\PSC.COLOR.TO.RGB COLOR) - (POSTSCRIPT.PUTCOMMAND STREAM COLORSTR (OR (AND GRAY " setgray ") - " setrgbcolor ") - (AND EOL? :EOL]) + (\PSC.COLOR.TO.RGB COLOR (fetch (\POSTSCRIPTDATA POSTSCRIPTCOLOR) + of (fetch IMAGEDATA of STREAM))) + (CL:WHEN RGB (* ; "A valid color designation") + (POSTSCRIPT.PUTCOMMAND STREAM COLORSTR (OR (AND GRAY " setgray ") + " setrgbcolor ") + (AND EOL? :EOL))) + + (* ;; "Return the RGB color") + + RGB]) (\PSC.COLOR.TO.RGB - [LAMBDA (COLOR NOERRORFLG?) (* ; "Edited 28-Apr-2025 00:10 by mth") - (* ; "Edited 26-Apr-2025 17:06 by mth") + [LAMBDA (COLOR DEFAULTRGB NOERRORFLG?) (* ; "Edited 5-Jun-2025 16:03 by mth") + (* ; "Edited 31-May-2025 17:20 by mth") + (* ; "Edited 28-Apr-2025 00:10 by mth") (LET (RGB STR) (COND - [(AND (FLOATP COLOR) - (<= 0.0 COLOR 1.0) - (SETQ RGB (FIX (FTIMES COLOR 255))) - (SETQ RGB (LIST RGB RGB RGB)) - (SETQ STR (CL:FORMAT NIL "~F "] - [(SETQ RGB (ENSURE.RGB COLOR NOERRORFLG?)) - (SETQ STR (IF (AND (EQ (CAR RGB) - (CADR RGB)) - (EQ (CAR RGB) - (CADDR RGB))) - THEN - (* ;; "They're all equal, this is gray.") + ((OR (EQ COLOR 0) + (EQ COLOR 1) + (AND (FLOATP COLOR) + (<= 0.0 COLOR 1.0))) - (CL:FORMAT NIL "~F " (SETQ COLOR (FQUOTIENT (CAR RGB) - 255.0))) - ELSE (SETQ COLOR NIL) (* ; "Means NOT gray") - (CL:FORMAT NIL "~D ~D ~D " (CAR RGB) - (CADR RGB) - (CADDR RGB] + (* ;; "The SMALLP values 0 and 1 can be checked with EQ") + + (SETQ RGB (FIX (FTIMES COLOR 255))) + (SETQ STR (CL:FORMAT NIL "~F " RGB)) + (SETQ RGB (LIST RGB RGB RGB))) + ([OR (NULL COLOR) + (AND (FIXP COLOR) + (<= 2 COLOR (CONSTANT (MAXIMUMCOLOR 24] + + (* ;; "Ignore any other FIXP that could be a COLORNUMBER") + + (* ;; + "or an RGB encoded as a single FIXP. Just use the DEFAULTRGB which MUST be a valid RGB!") + + (SETQ RGB DEFAULTRGB)) + ((SETQ RGB (ENSURE.RGB COLOR NOERRORFLG?))) (T (* ;; " Shouldn't ever get here.") - (* ;; " ENSURE.RGB above handled the color name or number, RGB, and HLS cases.") + (* ;; " ENSURE.RGB above handled the color name, RGB, and HLS cases.") (* ;; "Depending on NOERRORFLG?, it will give the error for anything else invalid") NIL)) - (CL:VALUES RGB COLOR STR]) + (CL:WHEN RGB + [SETQ STR (OR STR (IF (AND (EQ (CAR RGB) + (CADR RGB)) + (EQ (CAR RGB) + (CADDR RGB))) + THEN + (* ;; "They're all equal, this is gray.") + + (CL:FORMAT NIL "~F " (SETQ COLOR (FQUOTIENT (CAR RGB) + 255.0))) + ELSE (SETQ COLOR NIL) (* ; "Means NOT gray") + (CL:FORMAT NIL "~D ~D ~D " (CAR RGB) + (CADR RGB) + (CADDR RGB]) + (CL:VALUES RGB COLOR STR (NOT (EQUAL RGB DEFAULTRGB]) ) (ADDTOVAR DEFAULTFILETYPELIST (PS . BINARY) @@ -1380,7 +1390,7 @@ (FULLNAME STREAM]) (POSTSCRIPT.TEDIT - [LAMBDA (FILE PFILE) (* ; "Edited 18-Sep-91 18:16 by jds") + [LAMBDA (FILE PFILE) (* ; "Edited 18-Sep-91 18:16 by jds") (* ;; "Make a PS file from a TEdit document. If FILE is a string, make it into a symbol for the file-name. If it's a STREAM, use that stream.") @@ -2193,12 +2203,13 @@ [LAMBDA (SOURCEBITMAP SOURCELEFT SOURCEBOTTOM STREAM DESTINATIONLEFT DESTINATIONBOTTOM WIDTH HEIGHT SOURCETYPE OPERATION TEXTURE CLIPPINGREGION CLIPPEDSOURCELEFT CLIPPEDSOURCEBOTTOM) (* ; "Edited 7-Apr-89 19:53 by TAL") - (\SCALEDBITBLT.PSC SOURCEBITMAP SOURCELEFT SOURCEBOTTOM STREAM DESTINATIONLEFT - DESTINATIONBOTTOM WIDTH HEIGHT SOURCETYPE OPERATION TEXTURE CLIPPINGREGION - CLIPPEDSOURCELEFT CLIPPEDSOURCEBOTTOM 1]) + (\SCALEDBITBLT.PSC SOURCEBITMAP SOURCELEFT SOURCEBOTTOM STREAM DESTINATIONLEFT DESTINATIONBOTTOM + WIDTH HEIGHT SOURCETYPE OPERATION TEXTURE CLIPPINGREGION CLIPPEDSOURCELEFT + CLIPPEDSOURCEBOTTOM 1]) (\BLTSHADE.PSC [LAMBDA (TEXTURE STREAM DESTINATIONLEFT DESTINATIONBOTTOM WIDTH HEIGHT OPERATION CLIPPINGREGION) + (* ; "Edited 5-Jun-2025 16:11 by mth") (* ; "Edited 28-Apr-2025 00:05 by mth") (* ;  "Edited 20-Nov-92 15:12 by sybalsky:mv:envos") @@ -2237,7 +2248,8 @@ (SETQ TEXTUREBM (BITMAPCREATE TEXTUREWIDTH TEXTUREWIDTH 1)) (BITBLT TEXTURE 0 0 TEXTUREBM 0 0 TEXTUREWIDTH TEXTUREWIDTH 'INPUT 'REPLACE)) (T (CL:MULTIPLE-VALUE-BIND (COLOR GRAY COLORSTR) - (\PSC.COLOR.TO.RGB (OR TEXTURE (\DSPCOLOR.PSC STREAM NIL))) + (\PSC.COLOR.TO.RGB TEXTURE (fetch (\POSTSCRIPTDATA POSTSCRIPTCOLOR) + of IMAGEDATA)) (* ;; "Default to the current stream color") @@ -2506,46 +2518,50 @@ (\MOVETO.PSC STREAM CENTERX CENTERY]) (\DRAWLINE.PSC - [LAMBDA (STREAM X1 Y1 X2 Y2 WIDTH OPERATION COLOR DASHING) (* ; "Edited 28-Apr-2025 00:11 by mth") + [LAMBDA (STREAM X1 Y1 X2 Y2 WIDTH OPERATION COLOR DASHING) (* ; "Edited 5-Jun-2025 14:19 by mth") + (* ; "Edited 28-Apr-2025 00:11 by mth") (* ;  "Edited 20-Nov-92 15:12 by sybalsky:mv:envos") (* ;; "DRAWLINE method for postscript streams.") - (LET ((IMAGEDATA (fetch (STREAM IMAGEDATA) of STREAM))) - [COND - ((NOT (NUMBERP WIDTH)) + (CL:WHEN (LESSP X2 X1) - (* ;; "The WIDTH = NIL should have been handled before here, but just in case!") + (* ;; "For Syntelligence, make all lines move from left to right, to defeat a bug in SPARCPrinter PS decoder.") - (SETQ WIDTH (fetch (\POSTSCRIPTDATA POSTSCRIPTSCALE) of IMAGEDATA] - [COND - ((NOT (ZEROP WIDTH)) - (CL:MULTIPLE-VALUE-BIND (RGB GRAY COLORSTR) - (\PSC.COLOR.TO.RGB COLOR T) - (COND - ((LESSP X2 X1) + (CL:PSETQ X1 X2 X2 X1 Y1 Y2 Y2 Y1)) + (LET* ((IMAGEDATA (fetch (STREAM IMAGEDATA) of STREAM)) + (CURRENTCOLOR (fetch (\POSTSCRIPTDATA POSTSCRIPTCOLOR) of IMAGEDATA))) + [COND + ((NOT (NUMBERP WIDTH)) - (* ;; "For Syntelligence, make all lines move from left to right, to defeat a bug in SPARCPrinter PS decoder.") + (* ;; "The WIDTH = NIL should have been handled before here, but just in case!") - (\DRAWLINE.PSC STREAM X2 Y2 X1 Y1 WIDTH OPERATION COLOR DASHING)) - ((NOT (OR COLOR (LISTP DASHING))) (* ; "Simple case, no dash or color") - (POSTSCRIPT.PUTCOMMAND STREAM X2 " " Y2 " " X1 " " Y1 " " WIDTH " L" :EOL)) - (T (POSTSCRIPT.PUTCOMMAND STREAM X2 " " Y2 " " X1 " " Y1 " " WIDTH " ") - (POSTSCRIPT.PUTCOMMAND STREAM COLORSTR " [") - (POSTSCRIPT.PUTCOMMAND STREAM) - (for D in (LISTP DASHING) do - (* ;; + (SETQ WIDTH (fetch (\POSTSCRIPTDATA POSTSCRIPTSCALE) of IMAGEDATA] + [COND + ((NOT (ZEROP WIDTH)) + (CL:MULTIPLE-VALUE-BIND (RGB GRAY COLORSTR DIFFERENT) + (\PSC.COLOR.TO.RGB COLOR CURRENTCOLOR T) + (COND + ((NOT (OR DIFFERENT (LISTP DASHING)))(* ; + "Simple case, no dash or color change") + (POSTSCRIPT.PUTCOMMAND STREAM X2 " " Y2 " " X1 " " Y1 " " WIDTH " L" :EOL)) + (T (POSTSCRIPT.PUTCOMMAND STREAM X2 " " Y2 " " X1 " " Y1 " " WIDTH " ") + (POSTSCRIPT.PUTCOMMAND STREAM COLORSTR " [") + (POSTSCRIPT.PUTCOMMAND STREAM) + (for D in (LISTP DASHING) do + (* ;;  "Interlisp DASHING is in terms of BRUSH units, so multiply by the brush size.") - (POSTSCRIPT.PUTCOMMAND STREAM (TIMES D WIDTH) - " ")) - (POSTSCRIPT.PUTCOMMAND STREAM "]" (OR (AND GRAY " L1G") - " L1") - :EOL] - (replace (\POSTSCRIPTDATA POSTSCRIPTX) of IMAGEDATA with X2) - (freplace (\POSTSCRIPTDATA POSTSCRIPTY) of IMAGEDATA with Y2) - (freplace (\POSTSCRIPTDATA POSTSCRIPTMOVEFLG) of IMAGEDATA with NIL]) + (POSTSCRIPT.PUTCOMMAND STREAM + (TIMES D WIDTH) + " ")) + (POSTSCRIPT.PUTCOMMAND STREAM "]" (OR (AND GRAY " L1G") + " L1") + :EOL] + (replace (\POSTSCRIPTDATA POSTSCRIPTX) of IMAGEDATA with X2) + (freplace (\POSTSCRIPTDATA POSTSCRIPTY) of IMAGEDATA with Y2) + (freplace (\POSTSCRIPTDATA POSTSCRIPTMOVEFLG) of IMAGEDATA with NIL]) (\DRAWPOINT.PSC [LAMBDA (STREAM X Y BRUSH OPERATION) (* ; "Edited 30-Mar-90 17:53 by Matt Heffron") @@ -2648,7 +2664,8 @@ OLDCLIP]) (\DSPCOLOR.PSC - [LAMBDA (STREAM COLOR) (* ; "Edited 26-Apr-2025 17:03 by mth") + [LAMBDA (STREAM COLOR) (* ; "Edited 4-Jun-2025 23:51 by mth") + (* ; "Edited 26-Apr-2025 17:03 by mth") (* ; "Edited 14-Jan-93 17:14 by jds") (* ;; " Code below adapted from 7-Oct-1989 version by DJVB") @@ -2657,12 +2674,10 @@  " All postscript printers accept color RGB info, though most just pick a gray based on values") (LET* ((PSDATA (fetch IMAGEDATA of STREAM)) - (CURRENT (fetch (\POSTSCRIPTDATA POSTSCRIPTCOLOR) of PSDATA)) - RGB) + (CURRENT (fetch (\POSTSCRIPTDATA POSTSCRIPTCOLOR) of PSDATA))) (if COLOR - then (SETQ RGB (\PSC.COLOR.TO.RGB COLOR)) - (replace (\POSTSCRIPTDATA POSTSCRIPTCOLOR) of PSDATA with RGB) - (POSTSCRIPT.PUTRGBCOLOR STREAM RGB)) + then (replace (\POSTSCRIPTDATA POSTSCRIPTCOLOR) of PSDATA with (POSTSCRIPT.PUTRGBCOLOR + STREAM COLOR))) CURRENT]) (\DSPFONT.PSC @@ -4302,21 +4317,13 @@ (DEFINEQ (POSTSCRIPTSEND + [LAMBDA (HOST FILE PRINTOPTIONS) (* ; "Edited 20-Nov-95 11:29 by ") + (* ; "Edited 20-Nov-95 11:26 by ") - [LAMBDA (HOST FILE PRINTOPTIONS) (* ; "Edited 20-Nov-95 11:29 by ") - - (* ; "Edited 20-Nov-95 11:26 by ") - - - - (* ;; "This is the send function for generic POSTSCRIPT printers. It branches on the architecture-specific function. The theory is that the send method is really a property of the operating system, not a property of specific postscript printers. These functions are contained in separate library files (or defined by user).") - - + (* ;; "This is the send function for generic POSTSCRIPT printers. It branches on the architecture-specific function. The theory is that the send method is really a property of the operating system, not a property of specific postscript printers. These functions are contained in separate library files (or defined by user).") (SELECTQ (MKATOM (UNIX-GETPARM "ARCH")) - (dos (DOSPRINT HOST FILE PRINTOPTIONS)) - (UnixPrint HOST FILE PRINTOPTIONS]) ) @@ -4394,38 +4401,38 @@ (ADDTOVAR LAMA POSTSCRIPT.PUTCOMMAND) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (23920 33221 (POSTSCRIPT.INIT 23930 . 31022) (POSTSCRIPT.PUTRGBCOLOR 31024 . 31600) ( -\PSC.COLOR.TO.RGB 31602 . 33219)) (34207 68991 (PSCFONT.READFONT 34217 . 36125) (PSCFONT.SPELLFILE -36127 . 36705) (PSCFONT.COERCEFILE 36707 . 38279) (PSCFONTFROMCACHE.SPELLFILE 38281 . 39266) ( -PSCFONTFROMCACHE.COERCEFILE 39268 . 40920) (PSCFONT.WRITEFONT 40922 . 41937) (READ-AFM-FILE 41939 . -47810) (CONVERT-AFM-FILES 47812 . 49024) (POSTSCRIPT.GETFONTID 49026 . 50421) (POSTSCRIPT.FONTCREATE -50423 . 62822) (\POSTSCRIPT.SPECIALFONT.SCALEDWIDTHS 62824 . 65221) (POSTSCRIPT.FONTSAVAILABLE 65223 - . 68989)) (69546 78831 (OPENPOSTSCRIPTSTREAM 69556 . 78497) (CLOSEPOSTSCRIPTSTREAM 78499 . 78829)) ( -78876 84926 (POSTSCRIPT.HARDCOPYW 78886 . 81993) (POSTSCRIPT.TEDIT 81995 . 82475) (POSTSCRIPT.TEXT -82477 . 82768) (POSTSCRIPTFILEP 82770 . 83877) (MAKEEPSFILE 83879 . 84924)) (84927 128501 ( -POSTSCRIPT.BITMAPSCALE 84937 . 87393) (POSTSCRIPT.CLOSESTRING 87395 . 87948) (POSTSCRIPT.ENDPAGE 87950 - . 88841) (POSTSCRIPT.OUTSTR 88843 . 90060) (POSTSCRIPT.PUTBITMAPBYTES 90062 . 98533) ( -POSTSCRIPT.PUTCOMMAND 98535 . 99524) (POSTSCRIPT.SET-FAKE-LANDSCAPE 99526 . 104046) ( -POSTSCRIPT.SHOWACCUM 104048 . 106203) (POSTSCRIPT.STARTPAGE 106205 . 108737) (\POSTSCRIPTTAB 108739 . -109536) (\PS.BOUTFIXP 109538 . 110818) (\PS.SCALEHACK 110820 . 113463) (\PS.SCALEREGION 113465 . -114025) (\SCALEDBITBLT.PSC 114027 . 118337) (\SETPOS.PSC 118339 . 118820) (\SETXFORM.PSC 118822 . -121406) (\STRINGWIDTH.PSC 121408 . 121881) (\SWITCHFONTS.PSC 121883 . 127375) (\TERPRI.PSC 127377 . -128499)) (128536 182026 (\BITBLT.PSC 128546 . 129099) (\BLTSHADE.PSC 129101 . 133566) (\CHARWIDTH.PSC -133568 . 134075) (\CREATECHARSET.PSC 134077 . 135775) (\DRAWARC.PSC 135777 . 138155) (\DRAWCIRCLE.PSC -138157 . 140408) (\DRAWCURVE.PSC 140410 . 144254) (\DRAWELLIPSE.PSC 144256 . 146620) (\DRAWLINE.PSC -146622 . 149058) (\DRAWPOINT.PSC 149060 . 149636) (\DRAWPOLYGON.PSC 149638 . 152767) ( -\DSPBOTTOMMARGIN.PSC 152769 . 153456) (\DSPCLIPPINGREGION.PSC 153458 . 154833) (\DSPCOLOR.PSC 154835 - . 155675) (\DSPFONT.PSC 155677 . 159196) (\DSPLEFTMARGIN.PSC 159198 . 159884) (\DSPLINEFEED.PSC -159886 . 160476) (\DSPPUSHSTATE.PSC 160478 . 161938) (\DSPPOPSTATE.PSC 161940 . 165425) (\DSPRESET.PSC - 165427 . 166092) (\DSPRIGHTMARGIN.PSC 166094 . 166783) (\DSPROTATE.PSC 166785 . 167784) ( -\DSPSCALE.PSC 167786 . 168738) (\DSPSCALE2.PSC 168740 . 169580) (\DSPSPACEFACTOR.PSC 169582 . 170503) -(\DSPTOPMARGIN.PSC 170505 . 171076) (\DSPTRANSLATE.PSC 171078 . 173109) (\DSPXPOSITION.PSC 173111 . -173675) (\DSPYPOSITION.PSC 173677 . 174268) (\FILLCIRCLE.PSC 174270 . 176495) (\FILLPOLYGON.PSC 176497 - . 179734) (\FIXLINELENGTH.PSC 179736 . 181055) (\MOVETO.PSC 181057 . 181827) (\NEWPAGE.PSC 181829 . -182024)) (182082 204105 (\POSTSCRIPT.CHANGECHARSET 182092 . 182829) (\POSTSCRIPT.OUTCHARFN 182831 . -194959) (\POSTSCRIPT.PRINTSLUG 194961 . 196685) (\POSTSCRIPT.SPECIALOUTCHARFN 196687 . 199038) ( -\UPDATE.PSC 199040 . 200286) (\POSTSCRIPT.ACCENTFN 200288 . 201230) (\POSTSCRIPT.ACCENTPAIR 201232 . -204103)) (204203 205848 (\PSC.SPACEDISP 204213 . 204492) (\PSC.SPACEWID 204494 . 205113) (\PSC.SYMBOLS - 205115 . 205846)) (205957 208948 (\POSTSCRIPT.NSHASH 205967 . 208946)) (253722 254436 (POSTSCRIPTSEND - 253732 . 254434))))) + (FILEMAP (NIL (22736 33232 (POSTSCRIPT.INIT 22746 . 29838) (POSTSCRIPT.PUTRGBCOLOR 29840 . 30862) ( +\PSC.COLOR.TO.RGB 30864 . 33230)) (34218 69002 (PSCFONT.READFONT 34228 . 36136) (PSCFONT.SPELLFILE +36138 . 36716) (PSCFONT.COERCEFILE 36718 . 38290) (PSCFONTFROMCACHE.SPELLFILE 38292 . 39277) ( +PSCFONTFROMCACHE.COERCEFILE 39279 . 40931) (PSCFONT.WRITEFONT 40933 . 41948) (READ-AFM-FILE 41950 . +47821) (CONVERT-AFM-FILES 47823 . 49035) (POSTSCRIPT.GETFONTID 49037 . 50432) (POSTSCRIPT.FONTCREATE +50434 . 62833) (\POSTSCRIPT.SPECIALFONT.SCALEDWIDTHS 62835 . 65232) (POSTSCRIPT.FONTSAVAILABLE 65234 + . 69000)) (69557 78842 (OPENPOSTSCRIPTSTREAM 69567 . 78508) (CLOSEPOSTSCRIPTSTREAM 78510 . 78840)) ( +78887 84941 (POSTSCRIPT.HARDCOPYW 78897 . 82004) (POSTSCRIPT.TEDIT 82006 . 82490) (POSTSCRIPT.TEXT +82492 . 82783) (POSTSCRIPTFILEP 82785 . 83892) (MAKEEPSFILE 83894 . 84939)) (84942 128516 ( +POSTSCRIPT.BITMAPSCALE 84952 . 87408) (POSTSCRIPT.CLOSESTRING 87410 . 87963) (POSTSCRIPT.ENDPAGE 87965 + . 88856) (POSTSCRIPT.OUTSTR 88858 . 90075) (POSTSCRIPT.PUTBITMAPBYTES 90077 . 98548) ( +POSTSCRIPT.PUTCOMMAND 98550 . 99539) (POSTSCRIPT.SET-FAKE-LANDSCAPE 99541 . 104061) ( +POSTSCRIPT.SHOWACCUM 104063 . 106218) (POSTSCRIPT.STARTPAGE 106220 . 108752) (\POSTSCRIPTTAB 108754 . +109551) (\PS.BOUTFIXP 109553 . 110833) (\PS.SCALEHACK 110835 . 113478) (\PS.SCALEREGION 113480 . +114040) (\SCALEDBITBLT.PSC 114042 . 118352) (\SETPOS.PSC 118354 . 118835) (\SETXFORM.PSC 118837 . +121421) (\STRINGWIDTH.PSC 121423 . 121896) (\SWITCHFONTS.PSC 121898 . 127390) (\TERPRI.PSC 127392 . +128514)) (128551 182631 (\BITBLT.PSC 128561 . 129113) (\BLTSHADE.PSC 129115 . 133776) (\CHARWIDTH.PSC +133778 . 134285) (\CREATECHARSET.PSC 134287 . 135985) (\DRAWARC.PSC 135987 . 138365) (\DRAWCIRCLE.PSC +138367 . 140618) (\DRAWCURVE.PSC 140620 . 144464) (\DRAWELLIPSE.PSC 144466 . 146830) (\DRAWLINE.PSC +146832 . 149572) (\DRAWPOINT.PSC 149574 . 150150) (\DRAWPOLYGON.PSC 150152 . 153281) ( +\DSPBOTTOMMARGIN.PSC 153283 . 153970) (\DSPCLIPPINGREGION.PSC 153972 . 155347) (\DSPCOLOR.PSC 155349 + . 156280) (\DSPFONT.PSC 156282 . 159801) (\DSPLEFTMARGIN.PSC 159803 . 160489) (\DSPLINEFEED.PSC +160491 . 161081) (\DSPPUSHSTATE.PSC 161083 . 162543) (\DSPPOPSTATE.PSC 162545 . 166030) (\DSPRESET.PSC + 166032 . 166697) (\DSPRIGHTMARGIN.PSC 166699 . 167388) (\DSPROTATE.PSC 167390 . 168389) ( +\DSPSCALE.PSC 168391 . 169343) (\DSPSCALE2.PSC 169345 . 170185) (\DSPSPACEFACTOR.PSC 170187 . 171108) +(\DSPTOPMARGIN.PSC 171110 . 171681) (\DSPTRANSLATE.PSC 171683 . 173714) (\DSPXPOSITION.PSC 173716 . +174280) (\DSPYPOSITION.PSC 174282 . 174873) (\FILLCIRCLE.PSC 174875 . 177100) (\FILLPOLYGON.PSC 177102 + . 180339) (\FIXLINELENGTH.PSC 180341 . 181660) (\MOVETO.PSC 181662 . 182432) (\NEWPAGE.PSC 182434 . +182629)) (182687 204710 (\POSTSCRIPT.CHANGECHARSET 182697 . 183434) (\POSTSCRIPT.OUTCHARFN 183436 . +195564) (\POSTSCRIPT.PRINTSLUG 195566 . 197290) (\POSTSCRIPT.SPECIALOUTCHARFN 197292 . 199643) ( +\UPDATE.PSC 199645 . 200891) (\POSTSCRIPT.ACCENTFN 200893 . 201835) (\POSTSCRIPT.ACCENTPAIR 201837 . +204708)) (204808 206453 (\PSC.SPACEDISP 204818 . 205097) (\PSC.SPACEWID 205099 . 205718) (\PSC.SYMBOLS + 205720 . 206451)) (206562 209553 (\POSTSCRIPT.NSHASH 206572 . 209551)) (254327 255033 (POSTSCRIPTSEND + 254337 . 255031))))) STOP diff --git a/library/POSTSCRIPTSTREAM.LCOM b/library/POSTSCRIPTSTREAM.LCOM index be23d163e707f8b0d4d74ad985bcee1106993c94..6466f5df94c48bb50c263fe79e0680c9214cb164 100644 GIT binary patch delta 2145 zcmZuyUu;uV7++g9w!67>Y;4_t@a>AS8CUM#_O_thyY{xd%UxS(} z3lrI){NW>`xoifQp^<^{;q2sdL2~MXXYS!Tvi+ZpDB8I7lEL}_MVPKzfOrE^Lyi_9tBghIb`N&))+lMGq zF)ggyQ2P;hILg9H-zlD^xn3hUD4r}5WDAD1^Rn;nMNuNf(TD!1yk({kgj)I+XIkFW5RpU13n&;KAD}G z7#Kz{MGtFj;1x5H5Svbcx?L6*H7@S=#32p(PupuGHkzrf2Nb7iN9n!{B> zVQcHjmz$UlQGyi)U=}->!u8#K{%R&}nA9RoGtWDDk?fdhck%)`Fmu;YN0eFBaf_Uo z-B))-{hl6W!BDS6$-UW7ZALYgYg^bhx5?q=u#$;gI?|a6Q|3v-M;^E269Ac+3TdVe zlE{&UpEfupfyP{-BvbmjL_wicpwJ(2L6V;&0|9cTQHG$NFhL3|PZXKd|J=q&k_6Za zdbK1-mgAe3$N2f;fOaz6vKcB07qN zYvl(t`GGZN?NpTN9&DITf4TWVW7Ilall>daUQ65e4D6u?st6C>vZfZh*7tz z;8jCp$9$*bI0?>gu6f3Otf-pg{rTp0PsY*Us8JK^^gDJ#u!D_G*VR8&+m4eT=DVB< zM;YzJ&QAxSWTCjI#c@RY%;WG;4RFdz|5KjQ{{TzeA9+=`5=oS-p!iAq%|>$g%-R}W zE|Z*m_iJOn=zE;s*d$hUOab>{!Q`=qHdRbMic{KJ_Twm(>&;Qx?!z7vDA9>WbS#kV zmo{vnZ3Rr)e(Vr~-KWHHUZh0EfZ!u%Fa21LjmEbuMAWsKTVFVOxq2-*bL~Y(2f2K+ zxz&9`yHKi?s@d(a$xZJAQNnw^h0J{wETpb`0?kYZAAn4Lk~VyNC*FlIym?p7(ZBqOMEdbDs0Qx6gZ? zbIyJ0O8F1h%AeQ(*Iaeu4;X$bwGmzr+SQ#S?Lt7136(qKV22Ro$w+Qn{(+r?L%A$* z=XUQL8NIm!4!qFtB)0@+eyfEwy|pm(dnF8Ru7s<6cZt^)2Uu7G{T z<|=n4newNis-Y#+=vsKY*bYAxd5=4j)~uwZ`;)0Cfynf7cyM~v(oD=!H)w{TCsUdo zaodQY_iFI*^eWg|Sr3b5mU3=bIkOV<8H(1P849OnWVEg!wqRC7D?Cf!mD$_jyQw<# zJYOw?@;_Q2`E9*6I85Ap*E+)>H(uHA_wyv%KZY0mpH#?{Z*#YH>4p}yG&QZo;Hs-( zeBT{zDiOCJ2W2S?&pG)@MxIe+%;)mtc4s<`bSk07G`N47!o9AB3S(2;>@D36#$C5n zL`}oAQfW)?jRUv8nr33Dq>YvKB+XPh6}9wa+MisPwgbe@O48JO5yRhlX?E$q#8?h* z^i{yEt_p}0t1$)pzpRCUVl67NYKbjItW!@TvpE`{7n@L(_M1s2noz9`dMuqNMHrV( zGo3bjdQ>Z}+q9v-vY}8vQ^vvS*=6viUi;rPbM6yWgIs;tdeut7)$6su8ms<%@rLBbU4CYhG!4=RlXJZka3^XBa=FCN1~Ov z$Xkol0s9(@3g(ez++s>HJ?451lgwIQhD)zB`XogpSZQ`;VyY>DU+-yhN&;}7G;$J( z)yN5O_tOoF1tgxC(@c;Qm_AwU6C}iL>>2PMeXLrsr6W>!-UulW`LwB7l4OFl-=ijp zglS^>5>XIs1H8u$dNDIQMslNL`H>ut$0@vgteKm)$QJvo3I%p3s_xz7VvQnP$z1-idwnr8O`p|C(k;*k5>(rYJ~0bspUHN zuI|im7YrwNUX9L9)uC5EHjC7LV$z2s;dP>C>0jPv0+!30Jp!m zd_TS`Fr@~?w6X?73sWyhSTtL36;KoWP^?&<^q~&JaTqvxX#l`!z7y@ U#nD2Llxjs2JkFTH^{of~0x8Q=!vFvP diff --git a/library/POSTSCRIPTSTREAM.TEDIT b/library/POSTSCRIPTSTREAM.TEDIT index 1b1cd053..3319c794 100644 --- a/library/POSTSCRIPTSTREAM.TEDIT +++ b/library/POSTSCRIPTSTREAM.TEDIT @@ -12,7 +12,7 @@ POSTSCRIPTSTREAM By: Matt Heffron (then: mheffron@orion.cf.uci.edu, now: heffron@alumni.caltech.edu) INTRODUCTION -The PostScript package defines a set of imageops for printers which understand the PostScript page description language by Adobe. At Beckman we have successfully used TEdit, Sketch, LISTFILES, and HARDCOPYW to an Apple LaserWriter and an AST TurboLaser PS. The PostScript imagestream driver installs itself when it is loaded. All symbols in the PostScript driver are located in the INTERLISP: package. +The PostScriptStream package defines a set of imageops for printers which understand the PostScript page description language by Adobe. At Beckman we have successfully used TEdit, Sketch, LISTFILES, and HARDCOPYW to an Apple LaserWriter and an AST TurboLaser PS. The PostScriptStream imagestream driver installs itself when it is loaded. All symbols in the PostScriptStream driver are located in the INTERLISP: package. VARIABLES POSTSCRIPT.FONT.ALIST [InitVariable] POSTSCRIPT.FONT.ALIST is an ALIST mapping Xerox Lisp font names into the root names of PostScript font files. It is also used for font family coercions. The default value should be acceptable for any of the fonts which are built into the Apple Laserwriter. @@ -36,40 +36,39 @@ HINT Setting POSTSCRIPT.BITMAP.SCALE to 0.96, instead of 1, will give cleaner BITMAP images on a 300 dpi printer. (This corrects for the 72 ppi imagestream vs. the 75 dpi printer, using 4x4 device dots per bitmap pixel.) Also, values of 0.24, 0.48 and 0.72, instead of 0.25, 0.5 and 0.75, will also give cleaner images for reduced size output. In general, use integer multiples of 0.24 for a 300 dpi printer. POSTSCRIPT.TEXTURE.SCALE [InitVariable] POSTSCRIPT.TEXTURE.SCALE specifies an independent scale for the display of bitmap textures. The value represents the number of device space units per texture unit (bitmap bit). The default value is 4, which represents each bit of the texture as a 4x4 block, so that textures are approximately the same resolution as on the screen (for 300 dpi output devices, such as the Apple Laserwriter). -The PostScript package extends the allowed representations of a texture, beyond 16-bit FIXP and 16x16 bitmap, to ANY square bitmap. (If the bitmap is not square, its longer edge is truncated from the top or right to make it square.) Use this feature with caution, as large bitmap textures, or sizes other than multiples of 16 bits square, require large amounts of storage in the PostScript interpreter (in the printer controller), and can cause limitcheck errors when actually printing. -Anywhere that a texture or color can be used on an imagestream or in the specification of a BRUSH, you can instead give either: a COLOR name, an RGB triple, an HLS triple, or a FLOATP between 0.0 and 1.0 (inclusive) to represent a PostScript halftone gray shade. (For the name, RGB or HLS values, see the file COLOR.TEDIT in the library directory.) (For the single FLOATP value, it will be converted to the corresponding RGB form. 0.0 is black and 1.0 is white. Specifically, the value sets the brightness of the shade.) All forms of the value you specify will be checked for validity. E.g. you can pass 0.33 as the color to DRAWLINE to get a dark gray line. This will be converted to the RGB triple (84 84 84). +The PostScriptStream package extends the allowed representations of a texture, beyond 16-bit FIXP and 16x16 bitmap, to ANY square bitmap. (If the bitmap is not square, its longer edge is truncated from the top or right to make it square.) Use this feature with caution, as large bitmap textures, or sizes other than multiples of 16 bits square, require large amounts of storage in the PostScript interpreter (in the printer controller), and can cause limitcheck errors when actually printing. +Anywhere that a texture or color can be used on an imagestream or in the specification of a BRUSH, you can instead give either: NIL, a COLOR name, an RGB triple, an HLS triple, a SMALLP 0 or 1, or a FLOATP between 0.0 and 1.0 (inclusive). The value NIL means to use the current DSPCOLOR. For the COLOR name, RGB or HLS values, see the file COLOR.TEDIT in the library directory for descriptions of those. Any integer value other than 0 or 1 will be ignored and the current DSPCOLOR will be used. The single SMALLP or FLOATP value cases represent a PostScript gray shade. 0.0 is black and 1.0 is white. Specifically, the value sets the brightness of the shade. E.g. you can pass 0.33 as the color to DRAWLINE to get a dark gray line. This will be converted to the RGB triple (84 84 84). All forms of the value you specify will be checked for validity. POSTSCRIPT.IMAGESIZEFACTOR [InitVariable] POSTSCRIPT.IMAGESIZEFACTOR specifies an independent factor to change the overall size of the printed image. This re-sizing affects the entire printed output (specifically, it superimposes its effects upon those of POSTSCRIPT.BITMAP.SCALE and POSTSCRIPT.TEXTURE.SCALE). Values greater than 1 enlarge the printed image, and values less than 1 reduce it. An invalid POSTSCRIPT.IMAGESIZEFACTOR (i.e. not a positive, non-zero number) will use a value of 1. The BITMAPSCALE function for the POSTSCRIPT printer type does NOT consider the POSTSCRIPT.IMAGESIZEFACTOR when determining the scale factor for a bitmap. MISCELLANEOUS -The SCALE of a PostScript imagestream is 100. This is to allow enough resolution in the width information for fonts to enable TEdit to correctly fill and justify text. -The first time any PostScript imagestream is created (even if only to hardcopy a bitmap or window) the DEFAULTFONT is instantiated (unless a FONTS option was given to the OPENIMAGESTREAM, in which case the initial font for the imagestream will be set to that font, or to the CAR if a list). -The PostScript imagestream method for FILLPOLYGON uses the global variable FILL.WRULE as the default value for the WINDINGNUMBER argument. (This is the same variable which is used by the DISPLAY imagestream method for FILLPOLYGON.) -The PostScript imagestream method for OPENIMAGESTREAM (and, therefore, SEND.FILE.TO.PRINTER), supports an IMAGESIZEFACTOR option to change the size of the printed image. The IMAGESIZEFACTOR re-sizing is combined with the POSTSCRIPT.IMAGESIZEFACTOR to produce an overall re-sizing of the printed image. A HEADING option is also supported to give a running header on each page of output. The value of the HEADING option is printed at the top left of the page, followed by "Page " and the appropriate page number. They are printed in the DEFAULTFONT (unless a FONTS option was given to the OPENIMAGESTREAM, in which case it will be that font, or to the CAR if a list). -The PostScript package is contained in the files: POSTSCRIPTSTREAM.LCOM & PS-SEND.LCOM, with the source in the files: POSTSCRIPTSTREAM & PS-SEND. The module PS-SEND.LCOM is required and will be loaded automatically when POSTSCRIPTSTREAM.LCOM is loaded. It contains the function which is called by SEND.FILE.TO.PRINTER to actually transmit the file to the printer. It is, by its nature, quite site specific, so it is in a separate file to make modifying it for any site relatively simple. System record declarations required to compile POSTSCRIPTSTREAM can be found in EXPORTS.ALL. +The SCALE of a PostScriptStream imagestream is 100. This is to allow enough resolution in the width information for fonts to enable TEdit to correctly fill and justify text. +The first time any PostScriptStream imagestream is created (even if only to hardcopy a bitmap or window) the DEFAULTFONT is instantiated (unless a FONTS option was given to the OPENIMAGESTREAM, in which case the initial font for the imagestream will be set to that font, or to the CAR if a list). +The PostScriptStream imagestream method for FILLPOLYGON uses the global variable FILL.WRULE as the default value for the WINDINGNUMBER argument. (This is the same variable which is used by the DISPLAY imagestream method for FILLPOLYGON.) +The PostScriptStream imagestream method for OPENIMAGESTREAM (and, therefore, SEND.FILE.TO.PRINTER), supports an IMAGESIZEFACTOR option to change the size of the printed image. The IMAGESIZEFACTOR re-sizing is combined with the POSTSCRIPT.IMAGESIZEFACTOR to produce an overall re-sizing of the printed image. A HEADING option is also supported to give a running header on each page of output. The value of the HEADING option is printed at the top left of the page, followed by "Page " and the appropriate page number. They are printed in the DEFAULTFONT (unless a FONTS option was given to the OPENIMAGESTREAM, in which case it will be that font, or to the CAR if a list). I'm pretty sure that the output generated by the PostScript imageops fully conforms to the Adobe Systems Document Structuring Conventions, Version 2.0, January 31, 1987. Including Other PostScript Operations -If you wish to insert your own specific PostScript operations into a PostScript imagestream, you can do so with the following functions: +If you wish to insert your own specific PostScript operations into a PostScriptStream imagestream, you can do so with the following functions: (POSTSCRIPT.OUTSTR STREAM STRING) [Function] -POSTSCRIPT.OUTSTR outputs a string or value to the imagestream. STREAM must be an open PostScript imagestream. STRING is the value to output (STRINGP and LITATOM are most efficient, but any value can be output (its PRIN1 pname is used)). +POSTSCRIPT.OUTSTR outputs a string or value to the imagestream. STREAM must be an open PostScriptStream imagestream. STRING is the value to output (STRINGP and LITATOM are most efficient, but any value can be output (its PRIN1 pname is used)). (POSTSCRIPT.PUTCOMMAND STREAM STRING1 ... STRINGn) [NoSpread Function] POSTSCRIPT.PUTCOMMAND is more general for sequences of commands and values. It calls POSTSCRIPT.OUTSTR repeatedly to output each of the STRINGi arguments to STREAM. (\POSTSCRIPT.OUTCHARFN STREAM CHAR) [Function] -\POSTSCRIPT.OUTCHARFN is used to output the characters forming the text of a PostScript string (e.g. the argument to a show or charpath operator). STREAM is the open PostScript imagestream to output to, and CHAR is the CHARCODE of the character to output. The / (slash), ( and ) (parenthesis) characters will be quoted with /, and characters with ASCII values less than 32 (space) or greater than 126 (tilde) will be output as /nnn (in octal). \POSTSCRIPT.OUTCHARFN will output the ( character to open the string, if necessary. Use POSTSCRIPT.CLOSESTRING (below) to close the string. +\POSTSCRIPT.OUTCHARFN is used to output the characters forming the text of a PostScript string (e.g. the argument to a show or charpath operator). STREAM is the open PostScriptStream imagestream destination for output, and CHAR is the CHARCODE of the character to output. The / (slash), ( and ) (parenthesis) characters will be quoted with /, and characters with ASCII values less than 32 (space) or greater than 126 (tilde) will be output as /nnn (in octal). \POSTSCRIPT.OUTCHARFN will output the ( character to open the string, if necessary. Use POSTSCRIPT.CLOSESTRING (below) to close the string. (POSTSCRIPT.CLOSESTRING STREAM) [Function] -POSTSCRIPT.CLOSESTRING closes a PostScript string (e.g. the argument to a show or charpath operator). STREAM is the open PostScript imagestream. It is important to use POSTSCRIPT.CLOSESTRING to output the ) character to close the string, because it also clears the stream state flag that indicates that a string is in progress (otherwise, the next POSTSCRIPT.PUTCOMMAND would output the commands to close the string and show it). +POSTSCRIPT.CLOSESTRING closes a PostScript string (e.g. the argument to a show or charpath operator). STREAM is the open PostScriptStream imagestream. It is important to use POSTSCRIPT.CLOSESTRING to output the ) character to close the string, because it also clears the stream state flag that indicates that a string is in progress (otherwise, the next POSTSCRIPT.PUTCOMMAND would output the commands to close the string and show it). Warning Do not attempt to create a PostScript font larger than about 600 points, as much of Interlisp's font information is stored in SMALLP integers, and too large a font would overflow the font's height, or the width for any of the wider characters. (I know that 600 points is a ridiculously large limit (about 8.3 inches), but I thought I'd better mention it, or someone might try it!) Changes from the Initial Medley Release -This second Medley release of the PostScript imagestream driver includes some performance enhancements when writing bitmaps to the output, some SUN-specific code (from Will Snow of envos), implementation of the SCALEDBITBLT, DSPROTATE, and DSPTRANSLATE operations, and a lot of performance enhancements (many thanks to Tom Lipkis of Savoir). +This second Medley release of the PostScriptStream imagestream driver includes some performance enhancements when writing bitmaps to the output, some SUN-specific code (from Will Snow of envos), implementation of the SCALEDBITBLT, DSPROTATE, and DSPTRANSLATE operations, and a lot of performance enhancements (many thanks to Tom Lipkis of Savoir). Changes from the Lyric Release -The Medley release of this PostScript imagestream driver changed the default value of POSTSCRIPT.TEXTFILE.LANDSCAPE from T to NIL. It also added the support for the HEADING option. +The Medley release of this PostScriptStream imagestream driver changed the default value of POSTSCRIPT.TEXTFILE.LANDSCAPE from T to NIL. It also added the support for the HEADING option. Known Problems/Limitations -The output generated for a PostScript imagestream is rather brute force. It isn't particularly careful to generate the smallest output file for a given sequence of operations. Specifically, it often generates extra end-of-lines between PostScript operator sequences (this has no effect on the printed output, only on the file size). +The output generated for a PostScriptStream imagestream is rather brute force. It isn't particularly careful to generate the smallest output file for a given sequence of operations. Specifically, it often generates extra end-of-lines between PostScript operator sequences (this has no effect on the printed output, only on the file size). Using BITMAPs or Functions as BRUSH arguments to the curve drawing functions is not supported, nor is using a non-ROUND BRUSH with DRAWCIRCLE or DRAWELLIPSE. -The implementation of DSPROTATE accepts ROTATION argument values of 0 and 90 (any non-NIL, non-zero value is converted to 90). A value of 0 converts the page orientation to Portrait, and 90 converts the page orientation to Landscape. These conversions perform the translations necessary to keep the clipping region on the page. (This may or may not be the right thing to do, but since DSPROTATE is undocumented in what it should do, this is what the PostScript driver does). -There is no support for NS character sets other than 0, and there is no translation of the character code values from NS encoding to PostScript encoding. +The implementation of DSPROTATE accepts ROTATION argument values of 0 and 90 (any non-NIL, non-zero value is converted to 90). A value of 0 converts the page orientation to Portrait, and 90 converts the page orientation to Landscape. These conversions perform the translations necessary to keep the clipping region on the page. (This may or may not be the right thing to do, but since DSPROTATE is undocumented in what it should do, this is what the PostScriptStream driver does). +There is spotty support for NS character sets other than 0, and there is no additional translation of the character code values from NS encoding to PostScript encoding. There is minimal support for color. -\POSTSCRIPT.OUTCHARFN is pretty wimpy in its handling of TAB characters. It just moves to the next multiple of (eight times the average character width of the current font) from the current left margin. +\POSTSCRIPT.OUTCHARFN is pretty wimpy in its handling of TAB characters. It just moves to the next multiple of (eight times the average character width of the current font) from the current left margin. (TEdit does the right thing when generating hardcopy using PostScriptStream.) I haven't yet documented how to build the .PSCFONT files from .AFM files for new fonts that become available.(SEQUENCE NIL NIL (0 0 0 0) ((PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC "" "")) (0 0 612 792) ((HEADING NIL (HEADINGTYPE RUNNINGHEAD) (72 732 540 36) NIL) (TEXT NIL NIL (72 72 468 648) NIL))) (ALTERNATE NIL NIL (0 0 0 0) ((PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC "" "")) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC "" "")) (162 48 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (72 732 540 36) NIL) (TEXT NIL NIL (72 72 468 648) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC "" "")) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC "" "")) (162 48 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (72 732 540 36) NIL) (TEXT NIL NIL (72 72 468 648) NIL))))))) 1$1 $7 $7 $166$1$1$18$18$J$ PAGEHEADING RUNNINGHEAD MODERN @@ -81,6 +80,6 @@ I haven't yet documented how to build the .PSCFONT files from .AFM files for new MODERN MODERNCLASSICCLASSIC     - HRULE.GETFN HRULE.GETFN HRULE.GETFN   HRULE.GETFN HRULE.GETFN  --Lce#K&  A*y    62 --f4f gb~(VO$mDATE:iֳ33(z \ No newline at end of file + HRULE.GETFN HRULE.GETFN HRULE.GETFN   HRULE.GETFN HRULE.GETFN  +-Lce)&  A0y    F2 +-f4f gh~(\U$mDATE:j32-z \ No newline at end of file