From fb0af3c05f27157c35b6d6783df721421dd91ca8 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Tue, 14 Apr 2026 22:36:09 -0700 Subject: [PATCH 1/4] Fix GRAPHER so that when a DISPLAYLINKFN is specified but the specifed function is not defined, it uses the default DRAWLINK function instead and promptprints a notice. --- library/GRAPHER | 317 ++++++++++++++++++++++--------------------- library/GRAPHER.LCOM | Bin 64716 -> 64990 bytes 2 files changed, 164 insertions(+), 153 deletions(-) diff --git a/library/GRAPHER b/library/GRAPHER index 6a3331bf..4ec08f14 100644 --- a/library/GRAPHER +++ b/library/GRAPHER @@ -1,21 +1,18 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "14-Mar-2021 20:40:30"  -{DSK}kaplan>Local>medley3.5>git-medley>library>GRAPHER.;5 214171 +(DEFINE-FILE-INFO :PACKAGE "INTERLISP" :READTABLE "INTERLISP" :BASE 10) - changes to%: (VARS GRAPHERCOMS) +(FILECREATED "14-Apr-2026 22:19:19" {DSK}frank>il>medley>library>GRAPHER.;3 215302 - previous date%: "14-May-2018 10:24:38" -{DSK}kaplan>Local>medley3.5>git-medley>library>GRAPHER.;4) + :EDIT-BY "FGH" + :CHANGES-TO (FNS DISPLAYLINK/RL DISPLAYLINK/LR DISPLAYLINK/BT DISPLAYLINK/TB) + + :PREVIOUS-DATE "14-Mar-2021 20:40:30" {DSK}frank>il>medley>library>GRAPHER.;1) -(* ; " -Copyright (c) 1983-1994, 2018, 2021 by Venue & Xerox Corporation. -") (PRETTYCOMPRINT GRAPHERCOMS) (RPAQQ GRAPHERCOMS - [(COMS (* ; "Graph Editing") + [(COMS (* ; "Graph Editing") (FNS ADD/AND/DISPLAY/LINK APPLYTOSELECTEDNODE CALL.MOVENODEFN CHANGE.NODEFONT.SIZE DEFAULT.ADDNODEFN DELETE/AND/DISPLAY/LINK DISPLAY/NAME DISPLAYGRAPH DISPLAYLINK DISPLAYLINK/BT DISPLAYLINK/LR DISPLAYLINK/RL DISPLAYLINK/TB DISPLAYNODE @@ -38,18 +35,18 @@ Copyright (c) 1983-1994, 2018, 2021 by Venue & Xerox Corporation. (CL:WHEN (GETD 'MODERNWINDOW.SETUP) (MODERNWINDOW.SETUP 'APPLYTOSELECTEDNODE))] - (* ;; "Support for EDITSUBGRAPH and EDITREGION") + (* ;; "Support for EDITSUBGRAPH and EDITREGION") (FNS EDITMOVEREGION EDITMOVESUBTREE NOT.TRACKCURSOR RECURSIVE.COLLECTDESCENDENTS MOVEDESCENDENTS COLLECT.CHILD.NODES CREATE.NEW.NODEPOSITION GETBOXPOSITION.FROMINITIALREGION COLLECTDESCENDENTS)) - (COMS (* ; - "functions for finding larger and smaller fonts") + (COMS (* ; + "functions for finding larger and smaller fonts") (FNS NEXTSIZEFONT DECREASING.FONT.LIST SCALE.FONT) [DECLARE%: DONTEVAL@LOAD DOCOPY (VARS (DECREASING.FONT.LIST (DECREASING.FONT.LIST] (GLOBALVARS DECREASING.FONT.LIST)) - (* ; - "functions for LAYOUTGRAPH And LAYOUTLATTICE") + (* ; + "functions for LAYOUTGRAPH And LAYOUTLATTICE") (FNS BRH/LAYOUT BRH/LAYOUT/DAUGHTERS BRH/OFFSET BRHC/INTERTREE/SPACE BRHC/LAYOUT BRHC/LAYOUT/DAUGHTERS BRHC/LAYOUT/TERMINAL BRHC/OFFSET BRHL/LAYOUT BRHL/LAYOUT/DAUGHTERS BRHL/MOVE/RIGHT BROWSE/LAYOUT/HORIZ BROWSE/LAYOUT/HORIZ/COMPACTLY BROWSE/LAYOUT/LATTICE @@ -95,7 +92,7 @@ Copyright (c) 1983-1994, 2018, 2021 by Venue & Xerox Corporation. (LOCALVARS . T) (RECORDS GRAPHNODE GRAPH) (DECLARE%: DONTCOPY (MACROS HALF)) - (COMS (* ; "Grapher image objects") + (COMS (* ; "Grapher image objects") (FNS GRAPHERIMAGEFNS) (FNS GRAPHERCOPYBUTTONEVENTFN GRAPHOBJ.FINDGRAPH) (FNS ALIGNMENTNODE GRAPHOBJ.CHECKALIGN) @@ -303,96 +300,112 @@ Copyright (c) 1983-1994, 2018, 2021 by Venue & Xerox Corporation. NIL]) (DISPLAYLINK/BT - [LAMBDA (TRANS GNB GNT WIDTH OPERATION STREAM PARAMS) + [LAMBDA (TRANS GNB GNT WIDTH OPERATION STREAM PARAMS) (* ; "Edited 14-Apr-2026 22:08 by FGH") (* ; "Edited 29-Apr-94 13:59 by sybalsky") - (* draws a line from the bottom edge of GNB to the top edge of GNT translated - by TRANS) + (* draws a line from the bottom edge of GNB to the top edge of GNT translated by + TRANS) - (APPLY* (OR (LISTGET PARAMS 'DRAWLINKFN) - 'DRAWLINE) - (IPLUS (fetch XCOORD of TRANS) - (fetch XCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNB))) - (IPLUS (fetch YCOORD of TRANS) - (SUB1 (GN/BOTTOM GNB))) - (IPLUS (fetch XCOORD of TRANS) - (fetch XCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNT))) - (IPLUS (fetch YCOORD of TRANS) - (ADD1 (GN/TOP GNT))) - (OR (LISTGET PARAMS 'LINEWIDTH) - WIDTH 1) - OPERATION STREAM (LISTGET PARAMS 'COLOR) - (LISTGET PARAMS 'DASHING) - PARAMS]) + (LET* [(FN (LISTGET PARAMS 'DRAWLINKFN)) + (DFN (AND FN (GETD FN] + (if (AND FN (NOT DFN)) + then (PROMPTPRINT (CONCAT "DISPLAYLINK: DRAWLINKFN " FN " NOT FOUND"))) + (APPLY* (OR (AND DFN FN) + 'DRAWLINE) + (IPLUS (fetch XCOORD of TRANS) + (fetch XCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNB))) + (IPLUS (fetch YCOORD of TRANS) + (SUB1 (GN/BOTTOM GNB))) + (IPLUS (fetch XCOORD of TRANS) + (fetch XCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNT))) + (IPLUS (fetch YCOORD of TRANS) + (ADD1 (GN/TOP GNT))) + (OR (LISTGET PARAMS 'LINEWIDTH) + WIDTH 1) + OPERATION STREAM (LISTGET PARAMS 'COLOR) + (LISTGET PARAMS 'DASHING) + PARAMS]) (DISPLAYLINK/LR - [LAMBDA (TRANS GNL GNR WIDTH OPERATION STREAM PARAMS) + [LAMBDA (TRANS GNL GNR WIDTH OPERATION STREAM PARAMS) (* ; "Edited 14-Apr-2026 22:09 by FGH") (* ; "Edited 29-Apr-94 13:59 by sybalsky") - (* draws a line from the left edge of GNL to the right edge of GNR, translated - by TRANS) + (* draws a line from the left edge of GNL to the right edge of GNR, translated by + TRANS) - (APPLY* (OR (LISTGET PARAMS 'DRAWLINKFN) - 'DRAWLINE) - (IPLUS (fetch XCOORD of TRANS) - (SUB1 (GN/LEFT GNL))) - (IPLUS (fetch YCOORD of TRANS) - (fetch YCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNL))) - (IPLUS (fetch XCOORD of TRANS) - (ADD1 (GN/RIGHT GNR))) - (IPLUS (fetch YCOORD of TRANS) - (fetch YCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNR))) - (OR (LISTGET PARAMS 'LINEWIDTH) - WIDTH 1) - OPERATION STREAM (LISTGET PARAMS 'COLOR) - (LISTGET PARAMS 'DASHING) - PARAMS]) + (LET* [(FN (LISTGET PARAMS 'DRAWLINKFN)) + (DFN (AND FN (GETD FN] + (if (AND FN (NOT DFN)) + then (PROMPTPRINT (CONCAT "DISPLAYLINK: DRAWLINKFN " FN " NOT FOUND"))) + (APPLY* (OR (AND DFN FN) + 'DRAWLINE) + (IPLUS (fetch XCOORD of TRANS) + (SUB1 (GN/LEFT GNL))) + (IPLUS (fetch YCOORD of TRANS) + (fetch YCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNL))) + (IPLUS (fetch XCOORD of TRANS) + (ADD1 (GN/RIGHT GNR))) + (IPLUS (fetch YCOORD of TRANS) + (fetch YCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNR))) + (OR (LISTGET PARAMS 'LINEWIDTH) + WIDTH 1) + OPERATION STREAM (LISTGET PARAMS 'COLOR) + (LISTGET PARAMS 'DASHING) + PARAMS]) (DISPLAYLINK/RL - [LAMBDA (TRANS GNR GNL WIDTH OPERATION STREAM PARAMS) + [LAMBDA (TRANS GNR GNL WIDTH OPERATION STREAM PARAMS) (* ; "Edited 14-Apr-2026 22:09 by FGH") (* ; "Edited 29-Apr-94 13:59 by sybalsky") - (* draws a line from the right edge of GNR, to the left edge of GNL translated - by TRANS) + (* draws a line from the right edge of GNR, to the left edge of GNL translated by + TRANS) - (APPLY* (OR (LISTGET PARAMS 'DRAWLINKFN) - 'DRAWLINE) - (IPLUS (fetch XCOORD of TRANS) - (ADD1 (GN/RIGHT GNR))) - (IPLUS (fetch YCOORD of TRANS) - (fetch YCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNR))) - (IPLUS (fetch XCOORD of TRANS) - (SUB1 (GN/LEFT GNL))) - (IPLUS (fetch YCOORD of TRANS) - (fetch YCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNL))) - (OR (LISTGET PARAMS 'LINEWIDTH) - WIDTH 1) - OPERATION STREAM (LISTGET PARAMS 'COLOR) - (LISTGET PARAMS 'DASHING) - PARAMS]) + (LET* [(FN (LISTGET PARAMS 'DRAWLINKFN)) + (DFN (AND FN (GETD FN] + (if (AND FN (NOT DFN)) + then (PROMPTPRINT (CONCAT "DISPLAYLINK: DRAWLINKFN " FN " NOT FOUND"))) + (APPLY* (OR (AND DFN FN) + 'DRAWLINE) + (IPLUS (fetch XCOORD of TRANS) + (ADD1 (GN/RIGHT GNR))) + (IPLUS (fetch YCOORD of TRANS) + (fetch YCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNR))) + (IPLUS (fetch XCOORD of TRANS) + (SUB1 (GN/LEFT GNL))) + (IPLUS (fetch YCOORD of TRANS) + (fetch YCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNL))) + (OR (LISTGET PARAMS 'LINEWIDTH) + WIDTH 1) + OPERATION STREAM (LISTGET PARAMS 'COLOR) + (LISTGET PARAMS 'DASHING) + PARAMS]) (DISPLAYLINK/TB - [LAMBDA (TRANS GNT GNB WIDTH OPERATION STREAM PARAMS) + [LAMBDA (TRANS GNT GNB WIDTH OPERATION STREAM PARAMS) (* ; "Edited 14-Apr-2026 22:09 by FGH") (* ; "Edited 29-Apr-94 13:59 by sybalsky") - (* draws a line from the top edge of GNT to the bottom edge of GNR, translated - by TRANS) + (* draws a line from the top edge of GNT to the bottom edge of GNR, translated by + TRANS) - (APPLY* (OR (LISTGET PARAMS 'DRAWLINKFN) - 'DRAWLINE) - (IPLUS (fetch XCOORD of TRANS) - (fetch XCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNT))) - (IPLUS (fetch YCOORD of TRANS) - (ADD1 (GN/TOP GNT))) - (IPLUS (fetch XCOORD of TRANS) - (fetch XCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNB))) - (IPLUS (fetch YCOORD of TRANS) - (SUB1 (GN/BOTTOM GNB))) - (OR (LISTGET PARAMS 'LINEWIDTH) - WIDTH 1) - OPERATION STREAM (LISTGET PARAMS 'COLOR) - (LISTGET PARAMS 'DASHING) - PARAMS]) + (LET* [(FN (LISTGET PARAMS 'DRAWLINKFN)) + (DFN (AND FN (GETD FN] + (if (AND FN (NOT DFN)) + then (PROMPTPRINT (CONCAT "DISPLAYLINK: DRAWLINKFN " FN " NOT FOUND"))) + (APPLY* (OR (AND DFN FN) + 'DRAWLINE) + (IPLUS (fetch XCOORD of TRANS) + (fetch XCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNT))) + (IPLUS (fetch YCOORD of TRANS) + (ADD1 (GN/TOP GNT))) + (IPLUS (fetch XCOORD of TRANS) + (fetch XCOORD of (fetch (GRAPHNODE NODEPOSITION) of GNB))) + (IPLUS (fetch YCOORD of TRANS) + (SUB1 (GN/BOTTOM GNB))) + (OR (LISTGET PARAMS 'LINEWIDTH) + WIDTH 1) + OPERATION STREAM (LISTGET PARAMS 'COLOR) + (LISTGET PARAMS 'DASHING) + PARAMS]) (DISPLAYNODE [LAMBDA (NODE TRANS STREAM G TOSONLY) (* kvl "10-Aug-84 19:08") @@ -2014,7 +2027,7 @@ Copyright (c) 1983-1994, 2018, 2021 by Venue & Xerox Corporation. of N]) ) - (* Was MODERNIZE loaded before?) + (* Was MODERNIZE loaded before?) (CL:WHEN (GETD 'MODERNWINDOW.SETUP) (MODERNWINDOW.SETUP 'APPLYTOSELECTEDNODE)) @@ -3075,7 +3088,7 @@ Copyright (c) 1983-1994, 2018, 2021 by Venue & Xerox Corporation. (RPAQQ GRAPH/HARDCOPY/FORMAT (MODE PORTRAIT PAGENUMBERS T TRANS NIL)) (RPAQ? DEFAULT.GRAPH.WINDOWSIZE (LIST (TIMES SCREENWIDTH 0.7) - (TIMES SCREENHEIGHT 0.4))) + (TIMES SCREENHEIGHT 0.4))) (RPAQ? EDITGRAPHMENUCOMMANDS '((Move% Node 'MOVENODE "Moves a single node in the graph." (SUBITEMS (|Move Single Node| @@ -3113,19 +3126,19 @@ Copyright (c) 1983-1994, 2018, 2021 by Venue & Xerox Corporation. (DECLARE%: EVAL@COMPILE (RECORD GRAPHNODE (NODEID NODEPOSITION NODELABELBITMAP NIL NODELABELSHADE NODEWIDTH NODEHEIGHT - TONODES FROMNODES NODEFONT NODELABEL NODEBORDER) - NODEBORDER _ DEFAULT.GRAPH.NODEBORDER NODELABELSHADE _ - DEFAULT.GRAPH.NODELABELSHADE NODEFONT _ DEFAULT.GRAPH.NODEFONT) + TONODES FROMNODES NODEFONT NODELABEL NODEBORDER) + NODEBORDER _ DEFAULT.GRAPH.NODEBORDER NODELABELSHADE _ DEFAULT.GRAPH.NODELABELSHADE + NODEFONT _ DEFAULT.GRAPH.NODEFONT) -(RECORD GRAPH (GRAPHNODES SIDESFLG DIRECTEDFLG GRAPH.MOVENODEFN GRAPH.ADDNODEFN - GRAPH.DELETENODEFN GRAPH.ADDLINKFN GRAPH.DELETELINKFN GRAPH.FONTCHANGEFN - GRAPH.INVERTBORDERFN GRAPH.INVERTLABELFN GRAPH.CHANGELABELFN . GRAPH.PROPS)) +(RECORD GRAPH (GRAPHNODES SIDESFLG DIRECTEDFLG GRAPH.MOVENODEFN GRAPH.ADDNODEFN GRAPH.DELETENODEFN + GRAPH.ADDLINKFN GRAPH.DELETELINKFN GRAPH.FONTCHANGEFN GRAPH.INVERTBORDERFN + GRAPH.INVERTLABELFN GRAPH.CHANGELABELFN . GRAPH.PROPS)) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS HALF MACRO ((X) - (LRSH X 1))) + (LRSH X 1))) ) ) @@ -3789,61 +3802,59 @@ Copyright (c) 1983-1994, 2018, 2021 by Venue & Xerox Corporation. ) (ADDTOVAR IMAGEOBJGETFNS (GRAPHOBJ.GETFN)) -(PUTPROPS GRAPHER COPYRIGHT ("Venue & Xerox Corporation" 1983 1984 1985 1986 1987 1988 1989 1990 1991 -1992 1993 1994 2018 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (7195 111244 (ADD/AND/DISPLAY/LINK 7205 . 7907) (APPLYTOSELECTEDNODE 7909 . 8397) ( -CALL.MOVENODEFN 8399 . 8748) (CHANGE.NODEFONT.SIZE 8750 . 10062) (DEFAULT.ADDNODEFN 10064 . 10862) ( -DELETE/AND/DISPLAY/LINK 10864 . 12431) (DISPLAY/NAME 12433 . 12604) (DISPLAYGRAPH 12606 . 14977) ( -DISPLAYLINK 14979 . 17532) (DISPLAYLINK/BT 17534 . 18556) (DISPLAYLINK/LR 18558 . 19581) ( -DISPLAYLINK/RL 19583 . 20606) (DISPLAYLINK/TB 20608 . 21631) (DISPLAYNODE 21633 . 21981) ( -ERASE/GRAPHNODE 21983 . 23090) (DISPLAYNODE 23092 . 23440) (DISPLAYNODELINKS 23442 . 24586) ( -DRAW/GRAPHNODE/BORDER 24588 . 25507) (DRAWAREABOX 25509 . 26710) (EDITADDLINK 26712 . 27110) ( -EDITADDNODE 27112 . 29201) (EDITAPPLYTOLINK 29203 . 31282) (EDITCHANGEFONT 31284 . 32456) ( -EDITCHANGELABEL 32458 . 33999) (EDITDELETELINK 34001 . 34407) (EDITDELETENODE 34409 . 37110) ( -EDITGRAPH 37112 . 37179) (EDITGRAPH1 37181 . 37939) (EDITGRAPH2 37941 . 39672) (EDITMOVENODE 39674 . -41251) (EDITTOGGLEBORDER 41253 . 42549) (EDITTOGGLELABEL 42551 . 43848) (FILL/GRAPHNODE/LABEL 43850 . -44678) (FIX/SCALE 44680 . 45236) (FLIPNODE 45238 . 45842) (FONTNAMELIST 45844 . 46063) (FROMLINKS -46065 . 46235) (GETNODEFROMID 46237 . 47256) (GN/BOTTOM 47258 . 47534) (GN/LEFT 47536 . 47809) ( -GN/RIGHT 47811 . 48202) (GN/TOP 48204 . 48628) (GRAPHADDLINK 48630 . 49189) (GRAPHADDNODE 49191 . -49980) (GRAPHBUTTONEVENTFN 49982 . 52162) (GRAPHCHANGELABEL 52164 . 52607) (GRAPHDELETELINK 52609 . -53917) (GRAPHDELETENODE 53919 . 54451) (GRAPHEDITCOMMANDFN 54453 . 55837) (GRAPHEDITEVENTFN 55839 . -56550) (GRAPHER/CENTERPRINTINAREA 56552 . 57316) (GRAPHERPROP 57318 . 57862) (GRAPHNODE/BORDER/WIDTH -57864 . 58385) (GRAPHREGION 58387 . 59556) (HARDCOPYGRAPH 59558 . 66940) (INTERSECT/REGIONP/LBWH 66942 - . 68218) (INVERTED/GRAPHNODE/BORDER 68220 . 68804) (INVERTED/SHADE/FOR/GRAPHER 68806 . 69438) ( -LAYOUT/POSITION 69440 . 69619) (LINKPARAMETERS 69621 . 70073) (MAX/RIGHT 70075 . 70277) (MAX/TOP 70279 - . 70477) (MEASUREGRAPHNODE 70479 . 70928) (MEMBTONODES 70930 . 71455) (MIN/BOTTOM 71457 . 71838) ( -MIN/LEFT 71840 . 72215) (MOVENODE 72217 . 73460) (NODECREATE 73462 . 74242) (NODELST/AS/MENU 74244 . -75844) (NODEREGION 75846 . 76306) (PRINTDISPLAYNODE 76308 . 81366) (PROMPTINWINDOW 81368 . 84177) ( -READ/NODE 84179 . 85293) (REDISPLAYGRAPH 85295 . 85737) (REMOVETONODES 85739 . 86260) ( -RESET/NODE/BORDER 86262 . 88049) (RESET/NODE/LABELSHADE 88051 . 89566) (SCALE/GRAPH 89568 . 95854) ( -SCALE/GRAPHNODE/BORDER 95856 . 96551) (SCALE/TONODES 96553 . 97434) (SET/LABEL/SIZE 97436 . 100382) ( -SET/LAYOUT/POSITION 100384 . 100869) (SHOWGRAPH 100871 . 102670) (SIZE/GRAPH/WINDOW 102672 . 106156) ( -TOGGLE/DIRECTEDFLG 106158 . 106788) (TOGGLE/SIDESFLG 106790 . 107278) (TOLINKS 107280 . 107446) ( -TRACKCURSOR 107448 . 108855) (TRACKNODE 108857 . 109493) (TRANSGRAPH 109495 . 111242)) (111485 128102 -(EDITMOVEREGION 111495 . 115298) (EDITMOVESUBTREE 115300 . 117077) (NOT.TRACKCURSOR 117079 . 120057) ( -RECURSIVE.COLLECTDESCENDENTS 120059 . 121547) (MOVEDESCENDENTS 121549 . 123611) (COLLECT.CHILD.NODES -123613 . 124729) (CREATE.NEW.NODEPOSITION 124731 . 125271) (GETBOXPOSITION.FROMINITIALREGION 125273 . -126745) (COLLECTDESCENDENTS 126747 . 128100)) (128166 130455 (NEXTSIZEFONT 128176 . 129366) ( -DECREASING.FONT.LIST 129368 . 129694) (SCALE.FONT 129696 . 130453)) (130679 169831 (BRH/LAYOUT 130689 - . 132433) (BRH/LAYOUT/DAUGHTERS 132435 . 133381) (BRH/OFFSET 133383 . 134061) (BRHC/INTERTREE/SPACE -134063 . 135381) (BRHC/LAYOUT 135383 . 137239) (BRHC/LAYOUT/DAUGHTERS 137241 . 140195) ( -BRHC/LAYOUT/TERMINAL 140197 . 140878) (BRHC/OFFSET 140880 . 141776) (BRHL/LAYOUT 141778 . 144002) ( -BRHL/LAYOUT/DAUGHTERS 144004 . 145762) (BRHL/MOVE/RIGHT 145764 . 146907) (BROWSE/LAYOUT/HORIZ 146909 - . 147633) (BROWSE/LAYOUT/HORIZ/COMPACTLY 147635 . 150441) (BROWSE/LAYOUT/LATTICE 150443 . 151299) ( -BRV/OFFSET 151301 . 152164) (EXTEND/TRANSITION/CHAIN 152166 . 153437) (FOREST/BREAK/CYCLES 153439 . -154369) (INIT/NODES/FOR/LAYOUT 154371 . 155866) (INTERPRET/MARK/FORMAT 155868 . 157135) ( -LATTICE/BREAK/CYCLES 157137 . 157841) (LAYOUTFOREST 157843 . 158544) (LAYOUTGRAPH 158546 . 162013) ( -LAYOUTLATTICE 162015 . 163468) (LAYOUTSEXPR 163470 . 164541) (LAYOUTSEXPR1 164543 . 165245) ( -MARK/GRAPH/NODE 165247 . 165977) (NEW/INSTANCE/OF/GRAPHNODE 165979 . 167348) (RAISE/TRANSITION/CHAIN -167350 . 167751) (REFLECT/GRAPH/DIAGONALLY 167753 . 168482) (REFLECT/GRAPH/HORIZONTALLY 168484 . -169010) (REFLECT/GRAPH/VERTICALLY 169012 . 169536) (SWITCH/NODE/HEIGHT/WIDTH 169538 . 169829)) (173177 - 174528 (GRAPHERIMAGEFNS 173187 . 174526)) (174529 176257 (GRAPHERCOPYBUTTONEVENTFN 174539 . 175518) ( -GRAPHOBJ.FINDGRAPH 175520 . 176255)) (176258 178878 (ALIGNMENTNODE 176268 . 177690) ( -GRAPHOBJ.CHECKALIGN 177692 . 178876)) (178879 194729 (GRAPHEROBJ 178889 . 180635) ( -GRAPHOBJ.BUTTONEVENTINFN 180637 . 182064) (GRAPHOBJ.COPYBUTTONEVENTFN 182066 . 182503) ( -GRAPHOBJ.COPYFN 182505 . 183429) (GRAPHOBJ.DISPLAYFN 183431 . 186246) (GRAPHOBJ.GETALIGN 186248 . -186987) (GRAPHOBJ.GETFN 186989 . 188494) (GRAPHOBJ.IMAGEBOXFN 188496 . 192512) (GRAPHOBJ.PUTALIGN -192514 . 193344) (GRAPHOBJ.PUTFN 193346 . 194727)) (194730 213882 (COPYGRAPH 194740 . 196288) ( -DUMPGRAPH 196290 . 206546) (READGRAPH 206548 . 213880))))) + (FILEMAP (NIL (7149 112538 (ADD/AND/DISPLAY/LINK 7159 . 7861) (APPLYTOSELECTEDNODE 7863 . 8351) ( +CALL.MOVENODEFN 8353 . 8702) (CHANGE.NODEFONT.SIZE 8704 . 10016) (DEFAULT.ADDNODEFN 10018 . 10816) ( +DELETE/AND/DISPLAY/LINK 10818 . 12385) (DISPLAY/NAME 12387 . 12558) (DISPLAYGRAPH 12560 . 14931) ( +DISPLAYLINK 14933 . 17486) (DISPLAYLINK/BT 17488 . 18845) (DISPLAYLINK/LR 18847 . 20205) ( +DISPLAYLINK/RL 20207 . 21565) (DISPLAYLINK/TB 21567 . 22925) (DISPLAYNODE 22927 . 23275) ( +ERASE/GRAPHNODE 23277 . 24384) (DISPLAYNODE 24386 . 24734) (DISPLAYNODELINKS 24736 . 25880) ( +DRAW/GRAPHNODE/BORDER 25882 . 26801) (DRAWAREABOX 26803 . 28004) (EDITADDLINK 28006 . 28404) ( +EDITADDNODE 28406 . 30495) (EDITAPPLYTOLINK 30497 . 32576) (EDITCHANGEFONT 32578 . 33750) ( +EDITCHANGELABEL 33752 . 35293) (EDITDELETELINK 35295 . 35701) (EDITDELETENODE 35703 . 38404) ( +EDITGRAPH 38406 . 38473) (EDITGRAPH1 38475 . 39233) (EDITGRAPH2 39235 . 40966) (EDITMOVENODE 40968 . +42545) (EDITTOGGLEBORDER 42547 . 43843) (EDITTOGGLELABEL 43845 . 45142) (FILL/GRAPHNODE/LABEL 45144 . +45972) (FIX/SCALE 45974 . 46530) (FLIPNODE 46532 . 47136) (FONTNAMELIST 47138 . 47357) (FROMLINKS +47359 . 47529) (GETNODEFROMID 47531 . 48550) (GN/BOTTOM 48552 . 48828) (GN/LEFT 48830 . 49103) ( +GN/RIGHT 49105 . 49496) (GN/TOP 49498 . 49922) (GRAPHADDLINK 49924 . 50483) (GRAPHADDNODE 50485 . +51274) (GRAPHBUTTONEVENTFN 51276 . 53456) (GRAPHCHANGELABEL 53458 . 53901) (GRAPHDELETELINK 53903 . +55211) (GRAPHDELETENODE 55213 . 55745) (GRAPHEDITCOMMANDFN 55747 . 57131) (GRAPHEDITEVENTFN 57133 . +57844) (GRAPHER/CENTERPRINTINAREA 57846 . 58610) (GRAPHERPROP 58612 . 59156) (GRAPHNODE/BORDER/WIDTH +59158 . 59679) (GRAPHREGION 59681 . 60850) (HARDCOPYGRAPH 60852 . 68234) (INTERSECT/REGIONP/LBWH 68236 + . 69512) (INVERTED/GRAPHNODE/BORDER 69514 . 70098) (INVERTED/SHADE/FOR/GRAPHER 70100 . 70732) ( +LAYOUT/POSITION 70734 . 70913) (LINKPARAMETERS 70915 . 71367) (MAX/RIGHT 71369 . 71571) (MAX/TOP 71573 + . 71771) (MEASUREGRAPHNODE 71773 . 72222) (MEMBTONODES 72224 . 72749) (MIN/BOTTOM 72751 . 73132) ( +MIN/LEFT 73134 . 73509) (MOVENODE 73511 . 74754) (NODECREATE 74756 . 75536) (NODELST/AS/MENU 75538 . +77138) (NODEREGION 77140 . 77600) (PRINTDISPLAYNODE 77602 . 82660) (PROMPTINWINDOW 82662 . 85471) ( +READ/NODE 85473 . 86587) (REDISPLAYGRAPH 86589 . 87031) (REMOVETONODES 87033 . 87554) ( +RESET/NODE/BORDER 87556 . 89343) (RESET/NODE/LABELSHADE 89345 . 90860) (SCALE/GRAPH 90862 . 97148) ( +SCALE/GRAPHNODE/BORDER 97150 . 97845) (SCALE/TONODES 97847 . 98728) (SET/LABEL/SIZE 98730 . 101676) ( +SET/LAYOUT/POSITION 101678 . 102163) (SHOWGRAPH 102165 . 103964) (SIZE/GRAPH/WINDOW 103966 . 107450) ( +TOGGLE/DIRECTEDFLG 107452 . 108082) (TOGGLE/SIDESFLG 108084 . 108572) (TOLINKS 108574 . 108740) ( +TRACKCURSOR 108742 . 110149) (TRACKNODE 110151 . 110787) (TRANSGRAPH 110789 . 112536)) (112779 129396 +(EDITMOVEREGION 112789 . 116592) (EDITMOVESUBTREE 116594 . 118371) (NOT.TRACKCURSOR 118373 . 121351) ( +RECURSIVE.COLLECTDESCENDENTS 121353 . 122841) (MOVEDESCENDENTS 122843 . 124905) (COLLECT.CHILD.NODES +124907 . 126023) (CREATE.NEW.NODEPOSITION 126025 . 126565) (GETBOXPOSITION.FROMINITIALREGION 126567 . +128039) (COLLECTDESCENDENTS 128041 . 129394)) (129460 131749 (NEXTSIZEFONT 129470 . 130660) ( +DECREASING.FONT.LIST 130662 . 130988) (SCALE.FONT 130990 . 131747)) (131973 171125 (BRH/LAYOUT 131983 + . 133727) (BRH/LAYOUT/DAUGHTERS 133729 . 134675) (BRH/OFFSET 134677 . 135355) (BRHC/INTERTREE/SPACE +135357 . 136675) (BRHC/LAYOUT 136677 . 138533) (BRHC/LAYOUT/DAUGHTERS 138535 . 141489) ( +BRHC/LAYOUT/TERMINAL 141491 . 142172) (BRHC/OFFSET 142174 . 143070) (BRHL/LAYOUT 143072 . 145296) ( +BRHL/LAYOUT/DAUGHTERS 145298 . 147056) (BRHL/MOVE/RIGHT 147058 . 148201) (BROWSE/LAYOUT/HORIZ 148203 + . 148927) (BROWSE/LAYOUT/HORIZ/COMPACTLY 148929 . 151735) (BROWSE/LAYOUT/LATTICE 151737 . 152593) ( +BRV/OFFSET 152595 . 153458) (EXTEND/TRANSITION/CHAIN 153460 . 154731) (FOREST/BREAK/CYCLES 154733 . +155663) (INIT/NODES/FOR/LAYOUT 155665 . 157160) (INTERPRET/MARK/FORMAT 157162 . 158429) ( +LATTICE/BREAK/CYCLES 158431 . 159135) (LAYOUTFOREST 159137 . 159838) (LAYOUTGRAPH 159840 . 163307) ( +LAYOUTLATTICE 163309 . 164762) (LAYOUTSEXPR 164764 . 165835) (LAYOUTSEXPR1 165837 . 166539) ( +MARK/GRAPH/NODE 166541 . 167271) (NEW/INSTANCE/OF/GRAPHNODE 167273 . 168642) (RAISE/TRANSITION/CHAIN +168644 . 169045) (REFLECT/GRAPH/DIAGONALLY 169047 . 169776) (REFLECT/GRAPH/HORIZONTALLY 169778 . +170304) (REFLECT/GRAPH/VERTICALLY 170306 . 170830) (SWITCH/NODE/HEIGHT/WIDTH 170832 . 171123)) (174438 + 175789 (GRAPHERIMAGEFNS 174448 . 175787)) (175790 177518 (GRAPHERCOPYBUTTONEVENTFN 175800 . 176779) ( +GRAPHOBJ.FINDGRAPH 176781 . 177516)) (177519 180139 (ALIGNMENTNODE 177529 . 178951) ( +GRAPHOBJ.CHECKALIGN 178953 . 180137)) (180140 195990 (GRAPHEROBJ 180150 . 181896) ( +GRAPHOBJ.BUTTONEVENTINFN 181898 . 183325) (GRAPHOBJ.COPYBUTTONEVENTFN 183327 . 183764) ( +GRAPHOBJ.COPYFN 183766 . 184690) (GRAPHOBJ.DISPLAYFN 184692 . 187507) (GRAPHOBJ.GETALIGN 187509 . +188248) (GRAPHOBJ.GETFN 188250 . 189755) (GRAPHOBJ.IMAGEBOXFN 189757 . 193773) (GRAPHOBJ.PUTALIGN +193775 . 194605) (GRAPHOBJ.PUTFN 194607 . 195988)) (195991 215143 (COPYGRAPH 196001 . 197549) ( +DUMPGRAPH 197551 . 207807) (READGRAPH 207809 . 215141))))) STOP diff --git a/library/GRAPHER.LCOM b/library/GRAPHER.LCOM index b2dd5625e741099a250d0bf25b265ecd8651bc21..dc21e426f114d9f997ce55b7598972853c1b2c40 100644 GIT binary patch delta 8335 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 delta 8274 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 From 728a278dc0e9ff739aa67e6015692d96a30079fd Mon Sep 17 00:00:00 2001 From: rmkaplan <69548581+rmkaplan@users.noreply.github.com> Date: Sat, 18 Apr 2026 16:00:43 -0700 Subject: [PATCH 2/4] Previous version was smashed (#2569) --- internal/envos/unixmail.tedit | Bin 7709 -> 9624 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/internal/envos/unixmail.tedit b/internal/envos/unixmail.tedit index d0edeeb240c9d6a45491baa0396d7749e57ec954..709c98f168f8f482be837f55ff721c7051e38f89 100644 GIT binary patch literal 9624 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 Z5vLqVc6g`c(ckccN_ynB_14wj{SR|_#0LNX literal 7709 zcmeHI%Wm676dfwg!?jtUZ60la0<$Tg0D^$@0Tfw9wpE*eL>sc?1}IQ~mPR&ViZn<{ ziGnP;PEnw%enEF#chgO``GVvd@)x~ls7q0dWTjnnH3Up@&YXMBy@#ZHqQbG-?77a9 zcEf4eU)uK9w*AnybA;{**_l3)awj^KJ6@<{73cbB@>qqFD5*bDarCU-k46t{$L)3w z_j4-sj5rqq?(#! zRTJNnz0iLq&!Z$w>SL{Dpa?zy}dPGzKLrjW;=<%T0+4wHaMz$9Q2FbS9hOadkWlYmLU zBw!LS377;-0ww{IfJvZ~z;&@HYGPY#Td#ygdsbzm#8_N@gC%iq;&P3+6}nolP`di4 zVT+5_7%+E>N-FQk{YZ1K!DZ!96EDR}>s!6QUN__3AofP({dG6i^m_nz%0V9puaMl< zQDeV(&}{5E?!MUS^jw#2u+G@;oHyvf-4(aG%}(2K8!hoc#-PV>N8H?PHI9#+UGZrK z(ge4~jrQSQv*R*R{Isl``1i!-L9=zz>^i%RoV-MUoaUn2x%(WObwoRJ42jN<3e6zI zbpWKM-#?826}NCA9E%F=Z5?!at!90{+5OJ73X*f1nF1H$`u`TcG!mQF?9v{7B^m)?(N&T5}K6tO+Vuyh%sn(xmD!$O=su0quxv_r6@c9s1 zXvM(|JEIlNWq=yBbQTPNakp54QT{FhVB80=bkMX+E!zpd%y`G{t0Lpdu*45VD&Fl+ z7|@RZap?Gpmsn)xG@6lz&n4qFj@=vfAgjVhuXhR1OY6{-!SMU@os%i@DZh zjG7;dH30IaZS27CHEy^AP#%;4{ojijF#e1gs|WpsDLNGR;QP=%P|(gNjBx0mGq76s z_XP?x^Dipb{hm3PMmtp*VW;)4gmuI<_gF Date: Mon, 20 Apr 2026 15:27:43 -0700 Subject: [PATCH 3/4] Address the concerns stated in Issue #2568 --- sources/FILEIO | 138 ++++++++++++++++++++++---------------------- sources/FILEIO.LCOM | Bin 45832 -> 45702 bytes 2 files changed, 68 insertions(+), 70 deletions(-) diff --git a/sources/FILEIO b/sources/FILEIO index 433ead86..ad7f48b0 100644 --- a/sources/FILEIO +++ b/sources/FILEIO @@ -1,12 +1,12 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) +(DEFINE-FILE-INFO :PACKAGE "INTERLISP" :READTABLE "INTERLISP" :BASE 10) -(FILECREATED " 6-Feb-2026 23:22:00" {WMEDLEY}FILEIO.;142 166519 +(FILECREATED "20-Apr-2026 15:23:07" {DSK}matt>Interlisp>medley>sources>FILEIO.;3 165719 - :EDIT-BY rmk + :EDIT-BY "mth" - :CHANGES-TO (FNS DIRECTORYNAME) + :CHANGES-TO (FNS \DO.PARAMS.AT.OPEN) - :PREVIOUS-DATE "12-Sep-2025 08:19:06" {WMEDLEY}FILEIO.;141) + :PREVIOUS-DATE " 6-Feb-2026 23:22:00" {DSK}matt>Interlisp>medley>sources>FILEIO.;1) (PRETTYCOMPRINT FILEIOCOMS) @@ -1446,7 +1446,8 @@ (GO RETRY]) (\DO.PARAMS.AT.OPEN - [LAMBDA (STREAM ACCESS PARAMETERS) (* ; "Edited 25-Dec-2024 10:54 by rmk") + [LAMBDA (STREAM ACCESS PARAMETERS) (* ; "Edited 20-Apr-2026 15:22 by mth") + (* ; "Edited 25-Dec-2024 10:54 by rmk") (* ; "Edited 15-Jul-2024 22:29 by rmk") (* ; "Edited 25-Aug-2023 08:43 by rmk") (* ; "Edited 6-Jul-2022 00:00 by rmk") @@ -1469,40 +1470,37 @@ (DECLARE (USEDFREE STREAM-AFTER-OPEN-FNS)) (\EXTERNALFORMAT STREAM :DEFAULT) - [for X ATTR VAL EOL in PARAMETERS do [(COND - [(LISTP X) - (SETQ ATTR (CAR X)) - (SETQ VAL (CAR (LISTP (CDR X] - (T (SETQ ATTR X) - (SETQ VAL T))) - (SELECTQ ATTR - (BUFFERS (SETFILEINFO STREAM 'BUFFERS VAL)) - (ENDOFSTREAMOP (SETFILEINFO STREAM 'ENDOFSTREAMOP VAL)) - (CHARSET (CHARSET STREAM VAL)) - ((FORMAT EXTERNALFORMAT :EXTERNAL-FORMAT) - - (* ;; + [for X ATTR VAL EOL in PARAMETERS + do ((COND + [(LISTP X) + (SETQ ATTR (CAR X)) + (SETQ VAL (CAR (LISTP (CDR X] + (T (SETQ ATTR X) + (SETQ VAL T))) + (SELECTQ ATTR + (BUFFERS (SETFILEINFO STREAM 'BUFFERS VAL)) + (ENDOFSTREAMOP (SETFILEINFO STREAM 'ENDOFSTREAMOP VAL)) + (CHARSET (CHARSET STREAM VAL)) + ((FORMAT EXTERNALFORMAT :EXTERNAL-FORMAT) + (* ;;  "VAL can be :UTF-8, CR, (UTF:8 CR), i.e. specify either one or both") - (if (LISTP VAL) - then (* ; - "VAL could be (:UTF-8 CR) e.g. from CL:OPEN") - (\EXTERNALFORMAT STREAM (CAR VAL)) - (* ; - "Can override the EOL of the format") - (SETQ EOL (CADR VAL)) - elseif (SETQ EOL (CAR) - VAL) - else (\EXTERNALFORMAT STREAM VAL))) - (CONVHANKAKU (CONVHANKAKU STREAM VAL)) - ((EOL EOLCONVENTION EOLC) - (SETQ EOL VAL] finally + + (* ;; "Ignore the case of the non-LISTP X setting VAL to T") - (* ;; + [if (LISTP X) + then (for V in (MKLIST VAL) do (if (FIND-FORMAT V T) + then (\EXTERNALFORMAT STREAM V) + else (SETQ EOL V]) + (CONVHANKAKU (CONVHANKAKU STREAM VAL)) + ((EOL EOLCONVENTION EOLC) + (SETQ EOL VAL)) + NIL)) finally + + (* ;;  "If not specified, default EOL to ANY--SETFILEINFO checks for output streams") - (SETFILEINFO STREAM 'EOL - (OR EOL 'ANY] + (SETFILEINFO STREAM 'EOL (OR EOL 'ANY] (FOR FN IN STREAM-AFTER-OPEN-FNS DO (APPLY* FN STREAM ACCESS PARAMETERS]) (\RENAMEFILE @@ -3161,39 +3159,39 @@ update the map") (ADDTOVAR LAMA \IS.NOT.RANDACCESSP \ILLEGAL.DEVICEOP STREAMPROP) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (27706 31822 (STREAMPROP 27716 . 28150) (GETSTREAMPROP 28152 . 28901) (PUTSTREAMPROP -28903 . 31670) (STREAMP 31672 . 31820)) (31865 35244 (\DEFPRINT.BY.NAME 31875 . 33027) ( -\STREAM.DEFPRINT 33029 . 34937) (\FDEV.DEFPRINT 34939 . 35242)) (35502 40543 (\GETACCESS 35512 . 35966 -) (\SETACCESS 35968 . 40541)) (60769 66738 (\DEFINEDEVICE 60779 . 63095) (\GETDEVICEFROMNAME 63097 . -63570) (\GETDEVICEFROMHOSTNAME 63572 . 64616) (\REMOVEDEVICE 64618 . 65741) (\REMOVEDEVICE.NAMES 65743 - . 66736)) (66778 94509 (\CLOSEFILE 66788 . 67613) (\DELETEFILE 67615 . 67909) (\DEVICEEVENT 67911 . -69681) (\GENERATEFILES 69683 . 70630) (\GENERATENEXTFILE 70632 . 71283) (\GENERATEFILEINFO 71285 . -71746) (\GETFILENAME 71748 . 72137) (\GENERIC.OUTFILEP 72139 . 72609) (\OPENFILE 72611 . 75189) ( -\DO.PARAMS.AT.OPEN 75191 . 79387) (\RENAMEFILE 79389 . 80345) (\REVALIDATEFILE 80347 . 82949) ( -\PAGED.REVALIDATEFILELST 82951 . 84509) (\PAGED.REVALIDATEFILES 84511 . 86230) (\PAGED.REVALIDATEFILE -86232 . 88515) (\BUFFERED.REVALIDATEFILE 88517 . 90803) (\BUFFERED.REVALIDATEFILELST 90805 . 91989) ( -\PRINT-REVALIDATION-RESULT 91991 . 92833) (\TRUNCATEFILE 92835 . 93226) (\FILE-CONFLICT 93228 . 94507) -) (94545 99208 (\GENERATENOFILES 94555 . 96651) (\NULLFILEGENERATOR 96653 . 96897) (\NOFILESNEXTFILEFN - 96899 . 98890) (\NOFILESINFOFN 98892 . 99206)) (99327 101235 (\FILE.NOT.OPEN 99337 . 99850) ( -\FILE.WONT.OPEN 99852 . 100180) (\ILLEGAL.DEVICEOP 100182 . 100464) (\IS.NOT.RANDACCESSP 100466 . -100912) (\STREAM.NOT.OPEN 100914 . 101233)) (101370 103668 (\FDEVINSTANCE 101380 . 103666)) (104870 -111841 (CNDIR 104880 . 106185) (DIRECTORYNAME 106187 . 109967) (DIRECTORYNAMEP 109969 . 110585) ( -HOSTNAMEP 110587 . 111394) (\ADD.CONNECTED.DIR 111396 . 111839)) (111886 140833 (\BACKFILEPTR 111896 - . 112084) (\BACKPEEKBIN 112086 . 112447) (\BACKBIN 112449 . 112800) (BIN 112802 . 113019) (\BIN -113021 . 113298) (\BINS 113300 . 113586) (BOUT 113588 . 113950) (\BOUT 113952 . 114267) (\BOUTS 114269 - . 114580) (COPYBYTES 114582 . 117914) (COPYCHARS 117916 . 121714) (COPYFILE 121716 . 123076) ( -\COPYOPENFILE 123078 . 126277) (\INFER.FILE.TYPE 126279 . 127233) (EOFP 127235 . 127532) (FORCEOUTPUT -127534 . 127781) (\FLUSH.OPEN.STREAMS 127783 . 128139) (CHARSET 128141 . 129500) (ACCESS-CHARSET -129502 . 130139) (GETEOFPTR 130141 . 130391) (GETFILEINFO 130393 . 133586) (\TYPE.FROM.FILETYPE 133588 - . 134058) (\FILETYPE.FROM.TYPE 134060 . 134239) (GETFILEPTR 134241 . 134493) (SETFILEINFO 134495 . -138732) (SETFILEPTR 138734 . 140453) (BOUT16 140455 . 140640) (BIN16 140642 . 140831)) (140936 148116 -(\GENERIC.BINS 140946 . 141226) (\GENERIC.BOUTS 141228 . 141493) (\GENERIC.RENAMEFILE 141495 . 143743) - (\GENERIC.OPENP 143745 . 145060) (\GENERIC.READP 145062 . 146214) (\GENERIC.CHARSET 146216 . 148114)) - (148117 148456 (\MAP-OPEN-STREAMS 148127 . 148454)) (150311 152391 (\EOF.ACTION 150321 . 150572) ( -\EOSERROR 150574 . 150767) (\GETEOFPTR 150769 . 150951) (\INCFILEPTR 150953 . 151303) (\PEEKBIN 151305 - . 151496) (\SETCLOSEDFILELENGTH 151498 . 151832) (\SETEOFPTR 151834 . 152022) (\SETFILEPTR 152024 . -152389)) (152392 152934 (\FIXPOUT 152402 . 152702) (\FIXPIN 152704 . 152932)) (152935 153501 (\BOUTEOL - 152945 . 153499)) (156397 166261 (\BUFFERED.BIN 156407 . 157259) (\BUFFERED.PEEKBIN 157261 . 158043) -(\BUFFERED.BOUT 158045 . 158905) (\BUFFERED.BINS 158907 . 162592) (\BUFFERED.BOUTS 162594 . 164395) ( -\BUFFERED.COPYBYTES 164397 . 166259))))) + (FILEMAP (NIL (27755 31871 (STREAMPROP 27765 . 28199) (GETSTREAMPROP 28201 . 28950) (PUTSTREAMPROP +28952 . 31719) (STREAMP 31721 . 31869)) (31914 35293 (\DEFPRINT.BY.NAME 31924 . 33076) ( +\STREAM.DEFPRINT 33078 . 34986) (\FDEV.DEFPRINT 34988 . 35291)) (35551 40592 (\GETACCESS 35561 . 36015 +) (\SETACCESS 36017 . 40590)) (60818 66787 (\DEFINEDEVICE 60828 . 63144) (\GETDEVICEFROMNAME 63146 . +63619) (\GETDEVICEFROMHOSTNAME 63621 . 64665) (\REMOVEDEVICE 64667 . 65790) (\REMOVEDEVICE.NAMES 65792 + . 66785)) (66827 93709 (\CLOSEFILE 66837 . 67662) (\DELETEFILE 67664 . 67958) (\DEVICEEVENT 67960 . +69730) (\GENERATEFILES 69732 . 70679) (\GENERATENEXTFILE 70681 . 71332) (\GENERATEFILEINFO 71334 . +71795) (\GETFILENAME 71797 . 72186) (\GENERIC.OUTFILEP 72188 . 72658) (\OPENFILE 72660 . 75238) ( +\DO.PARAMS.AT.OPEN 75240 . 78587) (\RENAMEFILE 78589 . 79545) (\REVALIDATEFILE 79547 . 82149) ( +\PAGED.REVALIDATEFILELST 82151 . 83709) (\PAGED.REVALIDATEFILES 83711 . 85430) (\PAGED.REVALIDATEFILE +85432 . 87715) (\BUFFERED.REVALIDATEFILE 87717 . 90003) (\BUFFERED.REVALIDATEFILELST 90005 . 91189) ( +\PRINT-REVALIDATION-RESULT 91191 . 92033) (\TRUNCATEFILE 92035 . 92426) (\FILE-CONFLICT 92428 . 93707) +) (93745 98408 (\GENERATENOFILES 93755 . 95851) (\NULLFILEGENERATOR 95853 . 96097) (\NOFILESNEXTFILEFN + 96099 . 98090) (\NOFILESINFOFN 98092 . 98406)) (98527 100435 (\FILE.NOT.OPEN 98537 . 99050) ( +\FILE.WONT.OPEN 99052 . 99380) (\ILLEGAL.DEVICEOP 99382 . 99664) (\IS.NOT.RANDACCESSP 99666 . 100112) +(\STREAM.NOT.OPEN 100114 . 100433)) (100570 102868 (\FDEVINSTANCE 100580 . 102866)) (104070 111041 ( +CNDIR 104080 . 105385) (DIRECTORYNAME 105387 . 109167) (DIRECTORYNAMEP 109169 . 109785) (HOSTNAMEP +109787 . 110594) (\ADD.CONNECTED.DIR 110596 . 111039)) (111086 140033 (\BACKFILEPTR 111096 . 111284) ( +\BACKPEEKBIN 111286 . 111647) (\BACKBIN 111649 . 112000) (BIN 112002 . 112219) (\BIN 112221 . 112498) +(\BINS 112500 . 112786) (BOUT 112788 . 113150) (\BOUT 113152 . 113467) (\BOUTS 113469 . 113780) ( +COPYBYTES 113782 . 117114) (COPYCHARS 117116 . 120914) (COPYFILE 120916 . 122276) (\COPYOPENFILE +122278 . 125477) (\INFER.FILE.TYPE 125479 . 126433) (EOFP 126435 . 126732) (FORCEOUTPUT 126734 . +126981) (\FLUSH.OPEN.STREAMS 126983 . 127339) (CHARSET 127341 . 128700) (ACCESS-CHARSET 128702 . +129339) (GETEOFPTR 129341 . 129591) (GETFILEINFO 129593 . 132786) (\TYPE.FROM.FILETYPE 132788 . 133258 +) (\FILETYPE.FROM.TYPE 133260 . 133439) (GETFILEPTR 133441 . 133693) (SETFILEINFO 133695 . 137932) ( +SETFILEPTR 137934 . 139653) (BOUT16 139655 . 139840) (BIN16 139842 . 140031)) (140136 147316 ( +\GENERIC.BINS 140146 . 140426) (\GENERIC.BOUTS 140428 . 140693) (\GENERIC.RENAMEFILE 140695 . 142943) +(\GENERIC.OPENP 142945 . 144260) (\GENERIC.READP 144262 . 145414) (\GENERIC.CHARSET 145416 . 147314)) +(147317 147656 (\MAP-OPEN-STREAMS 147327 . 147654)) (149511 151591 (\EOF.ACTION 149521 . 149772) ( +\EOSERROR 149774 . 149967) (\GETEOFPTR 149969 . 150151) (\INCFILEPTR 150153 . 150503) (\PEEKBIN 150505 + . 150696) (\SETCLOSEDFILELENGTH 150698 . 151032) (\SETEOFPTR 151034 . 151222) (\SETFILEPTR 151224 . +151589)) (151592 152134 (\FIXPOUT 151602 . 151902) (\FIXPIN 151904 . 152132)) (152135 152701 (\BOUTEOL + 152145 . 152699)) (155597 165461 (\BUFFERED.BIN 155607 . 156459) (\BUFFERED.PEEKBIN 156461 . 157243) +(\BUFFERED.BOUT 157245 . 158105) (\BUFFERED.BINS 158107 . 161792) (\BUFFERED.BOUTS 161794 . 163595) ( +\BUFFERED.COPYBYTES 163597 . 165459))))) STOP diff --git a/sources/FILEIO.LCOM b/sources/FILEIO.LCOM index d120ea24e37246efed78f3db67ff19949c783bbb..6f1529722a64ae09767aa49fc410e6b900448c97 100644 GIT binary patch delta 1006 zcmb7Dzi-n}5RMb^D@diKpsEGL$s%fkvo4JPT)ZNFqcJond&28uU2~;zAHx*3)$p|O7Qz9pbX_kc5 zmOCV0J6~PdSa;ho(IakM>DF*ArK0O_GBTM=lHja#u$Jf_lvyz?kcnu#pSM^>l8s~_ z|58)tUuqD3F9H~z%P?6Gk*wNOVJQk^qf;e8ES4l=23eGCLR>K{EPnh!0>t?;T2Rf3 zMaftQZW~W2?rP9m+*paoyKD@uS|A{yxXL+z}T;?1lDK;uo<~%YeEFb~I zg|kE`l3x$uFWO%UWB1RLA_r3eq#vB~T^IYV@rB*cM~{k4-`@7Y!*{_U&G+txUd%cH z{bY#<{#PW<>!3k*>W!&IrzFm1sq!g zitFCD*hKe@w%jX)7k7W$bcit`l$Q$iNa@nZI1V|ij)vkaEkMyU7I1?#Nvq&V;9wao z;$jU+SIqL9WCN4o0gtmx4fZSp_(sYW!akY-{P*XuKj)e3sqIKAb8_zy(-Ykk3&_-q zz_MxIz}b;utEK@g!}k$jvf0z3(mbAtU!sO8F!cZ%3KL*pGRGRT93VqBmEbCoIS&F3 qJw`B)NkO5aD5z`!pB|c6sbnlcpc6O{@w1jHx{V*e{?+*RS3dz2gAbGd delta 1180 zcmaJ=QESss6mD7tt>7F5ohaoP8EcV9?roB`QM74uv!+dxkS245J#8&o-0bKO1d+a} z_#jAMMA#5td~~($ZPIt~#or+MJn&t-NxHdiVhB08-?`^I=Y03vr$3_4e@0U&m1w$2 zI88SQr<)uCz98`5AQU`VA!DG{o7%G(0b3QN|Jr%iY!i zPwUZocVkutRd-0qwVZ~j)Cf$qDZShabUfwfEICARiQ50l%=G?S z6(C6xQ66NX>MmDoKzHpv$fdGk&XYRlT9DGrdVI2+G|09?7Ie$2b1F>(EW%v9weHI! z0-uvnUgl|EVd4w_)&up;cbA4Zy2my|sJpb@8mDMfd(N_n$}td=b=Vwy&|CeBpb@% zW6>xh0i6tW%iPLsGg>wjqWdP0wwggzp_<-LL zFgH2 From b0c6136bd656eedbaf4f4adfd829cde95a7457f3 Mon Sep 17 00:00:00 2001 From: Matt Heffron Date: Tue, 21 Apr 2026 22:14:05 -0700 Subject: [PATCH 4/4] Fixes issues causing crashing during loadups building. --- sources/FILEIO | 141 ++++++++++++++++++++++++-------------------- sources/FILEIO.LCOM | Bin 45702 -> 45838 bytes 2 files changed, 77 insertions(+), 64 deletions(-) diff --git a/sources/FILEIO b/sources/FILEIO index ad7f48b0..115d7836 100644 --- a/sources/FILEIO +++ b/sources/FILEIO @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO :PACKAGE "INTERLISP" :READTABLE "INTERLISP" :BASE 10) -(FILECREATED "20-Apr-2026 15:23:07" {DSK}matt>Interlisp>medley>sources>FILEIO.;3 165719 +(FILECREATED "21-Apr-2026 20:57:55" {DSK}matt>Interlisp>medley>sources>FILEIO.;17 166496 :EDIT-BY "mth" :CHANGES-TO (FNS \DO.PARAMS.AT.OPEN) - :PREVIOUS-DATE " 6-Feb-2026 23:22:00" {DSK}matt>Interlisp>medley>sources>FILEIO.;1) + :PREVIOUS-DATE "21-Apr-2026 20:24:53" {DSK}matt>Interlisp>medley>sources>FILEIO.;15) (PRETTYCOMPRINT FILEIOCOMS) @@ -1446,7 +1446,8 @@ (GO RETRY]) (\DO.PARAMS.AT.OPEN - [LAMBDA (STREAM ACCESS PARAMETERS) (* ; "Edited 20-Apr-2026 15:22 by mth") + [LAMBDA (STREAM ACCESS PARAMETERS) (* ; "Edited 21-Apr-2026 20:57 by mth") + (* ; "Edited 20-Apr-2026 17:36 by mth") (* ; "Edited 25-Dec-2024 10:54 by rmk") (* ; "Edited 15-Jul-2024 22:29 by rmk") (* ; "Edited 25-Aug-2023 08:43 by rmk") @@ -1470,37 +1471,49 @@ (DECLARE (USEDFREE STREAM-AFTER-OPEN-FNS)) (\EXTERNALFORMAT STREAM :DEFAULT) - [for X ATTR VAL EOL in PARAMETERS - do ((COND - [(LISTP X) - (SETQ ATTR (CAR X)) - (SETQ VAL (CAR (LISTP (CDR X] - (T (SETQ ATTR X) - (SETQ VAL T))) - (SELECTQ ATTR - (BUFFERS (SETFILEINFO STREAM 'BUFFERS VAL)) - (ENDOFSTREAMOP (SETFILEINFO STREAM 'ENDOFSTREAMOP VAL)) - (CHARSET (CHARSET STREAM VAL)) - ((FORMAT EXTERNALFORMAT :EXTERNAL-FORMAT) - (* ;; - "VAL can be :UTF-8, CR, (UTF:8 CR), i.e. specify either one or both") + (for X ATTR VAL EOL in PARAMETERS + do (COND + [(LISTP X) + (SETQ ATTR (CAR X)) + (SETQ VAL (CAR (LISTP (CDR X] + (T (SETQ ATTR X) + (SETQ VAL T))) + (SELECTQ ATTR + (BUFFERS (SETFILEINFO STREAM 'BUFFERS VAL)) + (ENDOFSTREAMOP (SETFILEINFO STREAM 'ENDOFSTREAMOP VAL)) + (CHARSET (CHARSET STREAM VAL)) + ((FORMAT EXTERNALFORMAT :EXTERNAL-FORMAT) + (* ;; + "Ignore the case of the non-LISTP X setting VAL to T") - - (* ;; "Ignore the case of the non-LISTP X setting VAL to T") + [if (LISTP X) + then + (* ;; + "VAL can be :UTF-8, CR, (UTF:8 CR), i.e. specify either one or both") - [if (LISTP X) - then (for V in (MKLIST VAL) do (if (FIND-FORMAT V T) - then (\EXTERNALFORMAT STREAM V) - else (SETQ EOL V]) - (CONVHANKAKU (CONVHANKAKU STREAM VAL)) - ((EOL EOLCONVENTION EOLC) - (SETQ EOL VAL)) - NIL)) finally + (for V in (MKLIST VAL) do + (* ;; + "FIND-FORMAT doesn't know about :DEFAULT, so...") - (* ;; + (if (OR (EQ V :DEFAULT) + (FIND-FORMAT V T)) + then (\EXTERNALFORMAT STREAM V) + else (SETQ EOL V]) + (CONVHANKAKU (CONVHANKAKU STREAM VAL)) + ((EOL EOLCONVENTION EOLC) + (SETQ EOL VAL)) + NIL) finally + + (* ;;  "If not specified, default EOL to ANY--SETFILEINFO checks for output streams") - (SETFILEINFO STREAM 'EOL (OR EOL 'ANY] + (* ;; + " Cannot depend on SETFILEINFO checking for ANY on output stream, because it ERRORs!") + + (CL:WHEN (OR (NEQ (SETQ EOL (OR EOL 'ANY)) + 'ANY) + (EQ ACCESS 'INPUT)) + (SETFILEINFO STREAM 'EOL EOL))) (FOR FN IN STREAM-AFTER-OPEN-FNS DO (APPLY* FN STREAM ACCESS PARAMETERS]) (\RENAMEFILE @@ -3159,39 +3172,39 @@ update the map") (ADDTOVAR LAMA \IS.NOT.RANDACCESSP \ILLEGAL.DEVICEOP STREAMPROP) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (27755 31871 (STREAMPROP 27765 . 28199) (GETSTREAMPROP 28201 . 28950) (PUTSTREAMPROP -28952 . 31719) (STREAMP 31721 . 31869)) (31914 35293 (\DEFPRINT.BY.NAME 31924 . 33076) ( -\STREAM.DEFPRINT 33078 . 34986) (\FDEV.DEFPRINT 34988 . 35291)) (35551 40592 (\GETACCESS 35561 . 36015 -) (\SETACCESS 36017 . 40590)) (60818 66787 (\DEFINEDEVICE 60828 . 63144) (\GETDEVICEFROMNAME 63146 . -63619) (\GETDEVICEFROMHOSTNAME 63621 . 64665) (\REMOVEDEVICE 64667 . 65790) (\REMOVEDEVICE.NAMES 65792 - . 66785)) (66827 93709 (\CLOSEFILE 66837 . 67662) (\DELETEFILE 67664 . 67958) (\DEVICEEVENT 67960 . -69730) (\GENERATEFILES 69732 . 70679) (\GENERATENEXTFILE 70681 . 71332) (\GENERATEFILEINFO 71334 . -71795) (\GETFILENAME 71797 . 72186) (\GENERIC.OUTFILEP 72188 . 72658) (\OPENFILE 72660 . 75238) ( -\DO.PARAMS.AT.OPEN 75240 . 78587) (\RENAMEFILE 78589 . 79545) (\REVALIDATEFILE 79547 . 82149) ( -\PAGED.REVALIDATEFILELST 82151 . 83709) (\PAGED.REVALIDATEFILES 83711 . 85430) (\PAGED.REVALIDATEFILE -85432 . 87715) (\BUFFERED.REVALIDATEFILE 87717 . 90003) (\BUFFERED.REVALIDATEFILELST 90005 . 91189) ( -\PRINT-REVALIDATION-RESULT 91191 . 92033) (\TRUNCATEFILE 92035 . 92426) (\FILE-CONFLICT 92428 . 93707) -) (93745 98408 (\GENERATENOFILES 93755 . 95851) (\NULLFILEGENERATOR 95853 . 96097) (\NOFILESNEXTFILEFN - 96099 . 98090) (\NOFILESINFOFN 98092 . 98406)) (98527 100435 (\FILE.NOT.OPEN 98537 . 99050) ( -\FILE.WONT.OPEN 99052 . 99380) (\ILLEGAL.DEVICEOP 99382 . 99664) (\IS.NOT.RANDACCESSP 99666 . 100112) -(\STREAM.NOT.OPEN 100114 . 100433)) (100570 102868 (\FDEVINSTANCE 100580 . 102866)) (104070 111041 ( -CNDIR 104080 . 105385) (DIRECTORYNAME 105387 . 109167) (DIRECTORYNAMEP 109169 . 109785) (HOSTNAMEP -109787 . 110594) (\ADD.CONNECTED.DIR 110596 . 111039)) (111086 140033 (\BACKFILEPTR 111096 . 111284) ( -\BACKPEEKBIN 111286 . 111647) (\BACKBIN 111649 . 112000) (BIN 112002 . 112219) (\BIN 112221 . 112498) -(\BINS 112500 . 112786) (BOUT 112788 . 113150) (\BOUT 113152 . 113467) (\BOUTS 113469 . 113780) ( -COPYBYTES 113782 . 117114) (COPYCHARS 117116 . 120914) (COPYFILE 120916 . 122276) (\COPYOPENFILE -122278 . 125477) (\INFER.FILE.TYPE 125479 . 126433) (EOFP 126435 . 126732) (FORCEOUTPUT 126734 . -126981) (\FLUSH.OPEN.STREAMS 126983 . 127339) (CHARSET 127341 . 128700) (ACCESS-CHARSET 128702 . -129339) (GETEOFPTR 129341 . 129591) (GETFILEINFO 129593 . 132786) (\TYPE.FROM.FILETYPE 132788 . 133258 -) (\FILETYPE.FROM.TYPE 133260 . 133439) (GETFILEPTR 133441 . 133693) (SETFILEINFO 133695 . 137932) ( -SETFILEPTR 137934 . 139653) (BOUT16 139655 . 139840) (BIN16 139842 . 140031)) (140136 147316 ( -\GENERIC.BINS 140146 . 140426) (\GENERIC.BOUTS 140428 . 140693) (\GENERIC.RENAMEFILE 140695 . 142943) -(\GENERIC.OPENP 142945 . 144260) (\GENERIC.READP 144262 . 145414) (\GENERIC.CHARSET 145416 . 147314)) -(147317 147656 (\MAP-OPEN-STREAMS 147327 . 147654)) (149511 151591 (\EOF.ACTION 149521 . 149772) ( -\EOSERROR 149774 . 149967) (\GETEOFPTR 149969 . 150151) (\INCFILEPTR 150153 . 150503) (\PEEKBIN 150505 - . 150696) (\SETCLOSEDFILELENGTH 150698 . 151032) (\SETEOFPTR 151034 . 151222) (\SETFILEPTR 151224 . -151589)) (151592 152134 (\FIXPOUT 151602 . 151902) (\FIXPIN 151904 . 152132)) (152135 152701 (\BOUTEOL - 152145 . 152699)) (155597 165461 (\BUFFERED.BIN 155607 . 156459) (\BUFFERED.PEEKBIN 156461 . 157243) -(\BUFFERED.BOUT 157245 . 158105) (\BUFFERED.BINS 158107 . 161792) (\BUFFERED.BOUTS 161794 . 163595) ( -\BUFFERED.COPYBYTES 163597 . 165459))))) + (FILEMAP (NIL (27757 31873 (STREAMPROP 27767 . 28201) (GETSTREAMPROP 28203 . 28952) (PUTSTREAMPROP +28954 . 31721) (STREAMP 31723 . 31871)) (31916 35295 (\DEFPRINT.BY.NAME 31926 . 33078) ( +\STREAM.DEFPRINT 33080 . 34988) (\FDEV.DEFPRINT 34990 . 35293)) (35553 40594 (\GETACCESS 35563 . 36017 +) (\SETACCESS 36019 . 40592)) (60820 66789 (\DEFINEDEVICE 60830 . 63146) (\GETDEVICEFROMNAME 63148 . +63621) (\GETDEVICEFROMHOSTNAME 63623 . 64667) (\REMOVEDEVICE 64669 . 65792) (\REMOVEDEVICE.NAMES 65794 + . 66787)) (66829 94486 (\CLOSEFILE 66839 . 67664) (\DELETEFILE 67666 . 67960) (\DEVICEEVENT 67962 . +69732) (\GENERATEFILES 69734 . 70681) (\GENERATENEXTFILE 70683 . 71334) (\GENERATEFILEINFO 71336 . +71797) (\GETFILENAME 71799 . 72188) (\GENERIC.OUTFILEP 72190 . 72660) (\OPENFILE 72662 . 75240) ( +\DO.PARAMS.AT.OPEN 75242 . 79364) (\RENAMEFILE 79366 . 80322) (\REVALIDATEFILE 80324 . 82926) ( +\PAGED.REVALIDATEFILELST 82928 . 84486) (\PAGED.REVALIDATEFILES 84488 . 86207) (\PAGED.REVALIDATEFILE +86209 . 88492) (\BUFFERED.REVALIDATEFILE 88494 . 90780) (\BUFFERED.REVALIDATEFILELST 90782 . 91966) ( +\PRINT-REVALIDATION-RESULT 91968 . 92810) (\TRUNCATEFILE 92812 . 93203) (\FILE-CONFLICT 93205 . 94484) +) (94522 99185 (\GENERATENOFILES 94532 . 96628) (\NULLFILEGENERATOR 96630 . 96874) (\NOFILESNEXTFILEFN + 96876 . 98867) (\NOFILESINFOFN 98869 . 99183)) (99304 101212 (\FILE.NOT.OPEN 99314 . 99827) ( +\FILE.WONT.OPEN 99829 . 100157) (\ILLEGAL.DEVICEOP 100159 . 100441) (\IS.NOT.RANDACCESSP 100443 . +100889) (\STREAM.NOT.OPEN 100891 . 101210)) (101347 103645 (\FDEVINSTANCE 101357 . 103643)) (104847 +111818 (CNDIR 104857 . 106162) (DIRECTORYNAME 106164 . 109944) (DIRECTORYNAMEP 109946 . 110562) ( +HOSTNAMEP 110564 . 111371) (\ADD.CONNECTED.DIR 111373 . 111816)) (111863 140810 (\BACKFILEPTR 111873 + . 112061) (\BACKPEEKBIN 112063 . 112424) (\BACKBIN 112426 . 112777) (BIN 112779 . 112996) (\BIN +112998 . 113275) (\BINS 113277 . 113563) (BOUT 113565 . 113927) (\BOUT 113929 . 114244) (\BOUTS 114246 + . 114557) (COPYBYTES 114559 . 117891) (COPYCHARS 117893 . 121691) (COPYFILE 121693 . 123053) ( +\COPYOPENFILE 123055 . 126254) (\INFER.FILE.TYPE 126256 . 127210) (EOFP 127212 . 127509) (FORCEOUTPUT +127511 . 127758) (\FLUSH.OPEN.STREAMS 127760 . 128116) (CHARSET 128118 . 129477) (ACCESS-CHARSET +129479 . 130116) (GETEOFPTR 130118 . 130368) (GETFILEINFO 130370 . 133563) (\TYPE.FROM.FILETYPE 133565 + . 134035) (\FILETYPE.FROM.TYPE 134037 . 134216) (GETFILEPTR 134218 . 134470) (SETFILEINFO 134472 . +138709) (SETFILEPTR 138711 . 140430) (BOUT16 140432 . 140617) (BIN16 140619 . 140808)) (140913 148093 +(\GENERIC.BINS 140923 . 141203) (\GENERIC.BOUTS 141205 . 141470) (\GENERIC.RENAMEFILE 141472 . 143720) + (\GENERIC.OPENP 143722 . 145037) (\GENERIC.READP 145039 . 146191) (\GENERIC.CHARSET 146193 . 148091)) + (148094 148433 (\MAP-OPEN-STREAMS 148104 . 148431)) (150288 152368 (\EOF.ACTION 150298 . 150549) ( +\EOSERROR 150551 . 150744) (\GETEOFPTR 150746 . 150928) (\INCFILEPTR 150930 . 151280) (\PEEKBIN 151282 + . 151473) (\SETCLOSEDFILELENGTH 151475 . 151809) (\SETEOFPTR 151811 . 151999) (\SETFILEPTR 152001 . +152366)) (152369 152911 (\FIXPOUT 152379 . 152679) (\FIXPIN 152681 . 152909)) (152912 153478 (\BOUTEOL + 152922 . 153476)) (156374 166238 (\BUFFERED.BIN 156384 . 157236) (\BUFFERED.PEEKBIN 157238 . 158020) +(\BUFFERED.BOUT 158022 . 158882) (\BUFFERED.BINS 158884 . 162569) (\BUFFERED.BOUTS 162571 . 164372) ( +\BUFFERED.COPYBYTES 164374 . 166236))))) STOP diff --git a/sources/FILEIO.LCOM b/sources/FILEIO.LCOM index 6f1529722a64ae09767aa49fc410e6b900448c97..102917fc17bb67b05a47ac457c7809cb00778ffa 100644 GIT binary patch delta 1272 zcmZWpO>Epm6kdCkQZ^!`TA`*tLJ!mY(I)bY$3MG7V!gZLuCrb{-Ji6Tl0%B4Hq|!S zwrN4)5H28bp@@f{ME%tGHds4&Qg^cK-Hpd6$w#bTKRDEdT+hE7Q*HRD3B9@M7D`J0}6d{ z12u~pQ{ZwO-<=9!eFJie)A2kQ4xF2tQy^U3!hEkJu!@W*Gr4KU^?0Sp?KZEz5~Q0& zT^9{W%M%lbVX%S$xgxK+?b-4r@wGI6Z1`(<4$6wUwqLhQbm9MWGNSVTqocn{nT%XI zl)*=+V;`jG!QtKUer+=*2gGP>?C>P;LGF*(+CBS1NG?tC&Da^)Bx3b$ejE#fO5j)Q zHV~a1Kqj7!jc;oOXtkTJe+~-fz6%dcGzw0YF9D%??B{j^2qF8N$_89P9UxO1puq-A zgFPWQrqMJzD&5UnYoP*IuwwUmYa56eVmDAg!=%CO zt={b|%xOhm9Esj4zk5i^WJ_1#hUDT``RMtPT6XWOxA$5?E+_A2-`eT=LmKKO{p{zL z?q&WJ-HEC9eooy#rtW&;zL&YX5T^Y1{Zc(izw?Rsed0JX`)+o3r52P=A>WQ6q zLTM!p{iPAEC!ycvdi6U?Z{Xj`Da((%uG`)na@(q z_Um@NgJLDH%rCZi)3-e*Xf|+$cqhPd{p#$#O>l&jn%!)1oGp^h?l=x_w!oqXkR|m1Q^EBYJ8eJ>+WsZLKL9S#XH)0j zkbV`6Q)i_-M delta 1117 zcmZWoOK%fN5cb$Sf+1N!77@^{C^e7=th3YI^Rhw06T1f++cUwBKtzx>!4^acwl@j8 z+~Bm_5U3Bp0R;ab#L5x*fL7YLX2xy{8G)0qX-Ofa6%9Rj1|a^qTaexX){Mjhn1#&sSY145lG(L7-~34;-sTdeiM zFJGOlU#Tq}OGy3bkGtpVK)gym57fE$-~N-)?-IllhC{}pqh2;IQbpmGMH&eEz9w7M zu#W?^Oq<3bA=24$Y+^bpm$g#|z>0abxo!{G0AmSVClHmo##$e=!96?fYN1d#DTfA5 zkF58t4z@Fm5Pr$^zTIkFvDTw66j&u2j;Oppa3W?hwQ2^(^#KK0h{c{85K|_qZFB>v*4qZlA4o`G@Ufu9IwK zNe&Dj{N>knHnLjDRU<8^uKs-W(8|H8cBwkw33<>?7CPY8OgkJ|dm}FnGwravGkoAT z-BHp^Wn4e!<|;TECd`NnWl{9qycZM;N?F?iFYBjc8#bem%DBanK%Y(lS2ZzN-wVJ- z&9|7`mfJ^;+~f>IkWT@_J5m4-6n;4y_`s;87@(;4S9KT`&efMXdIxhGHn?6b4s1ZW zSytQx;im%+?_anDJD3Cqw{9{>*c>J*o+pYWu#6tWN?m^%x^=cbj-2b))?{G*F8?;q z9O*@*Pls5!ese8surBb=x+(bgtW*D^}s0C zm74w;g{exrxl?|!ni`W0TMu)m_0%>`{nS5-iggCKe-unSU$?n!P>1oc{?_}Yf5Q># QaM}Ljm0DX*{;Z$;3?;-I00000