Skip to content

Commit f6eb5d9

Browse files
authored
Fixex to \FORMATBYTESTRING and \FORMATBYTESTREAM (#1618)
Motivated by the fact that FILEPOS was not being properly informed that the bytes of the encoded stream are stable (unlike XCCS) so it can run at the byte level without character decoding.
1 parent 90dc568 commit f6eb5d9

File tree

4 files changed

+48
-29
lines changed

4 files changed

+48
-29
lines changed

sources/EXTERNALFORMAT

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
22

3-
(FILECREATED "12-Jan-2024 10:59:18" {DSK}<home>larry>il>medley>sources>EXTERNALFORMAT.;3 38380
3+
(FILECREATED "19-Mar-2024 18:24:39" {WMEDLEY}<sources>EXTERNALFORMAT.;88 38921
44

5-
:EDIT-BY "lmm"
5+
:EDIT-BY rmk
66

7-
:CHANGES-TO (FNS \BACKCCODE)
7+
:CHANGES-TO (FNS \FORMATBYTESTRING \FORMATBYTESTREAM)
88

9-
:PREVIOUS-DATE " 8-Dec-2023 22:02:21" {DSK}<home>larry>il>medley>sources>EXTERNALFORMAT.;1)
9+
:PREVIOUS-DATE "12-Jan-2024 10:59:18" {WMEDLEY}<sources>EXTERNALFORMAT.;86)
1010

1111

1212
(PRETTYCOMPRINT EXTERNALFORMATCOMS)
@@ -472,6 +472,10 @@
472472
(\FORMATBYTESTREAM
473473
[LAMBDA (STREAM BYTESTREAM)
474474

475+
(* ;; "Edited 19-Mar-2024 15:57 by rmk: Remove installation of STREAM's EXTERNALFORMAT into BYTESTREAM. That should be done by the formats FORMATBYTESTREAMFN. In particular,")
476+
477+
(* ;; "Edited 19-Mar-2024 14:31 by rmk")
478+
475479
(* ;; "Edited 24-Jul-2022 08:30 by rmk: STREAM can be the external format to be used for BYTESTREAM, not just a carrier of that format")
476480

477481
(* ;; "Edited 22-Jun-2022 11:09 by rmk")
@@ -495,27 +499,33 @@
495499
ELSEIF (TYPE? EXTERNALFORMAT STREAM)
496500
THEN (SETQ FORMAT STREAM)
497501
(SETQ EOLC (FFETCH (EXTERNALFORMAT EOL) OF FORMAT)))
498-
(\EXTERNALFORMAT BYTESTREAM FORMAT)
499502
(REPLACE (STREAM EOLCONVENTION) OF BYTESTREAM WITH EOLC)
500503
(\SETFILEPTR BYTESTREAM 0)
501-
(freplace (STREAM ENDOFSTREAMOP) of BYTESTREAM with (FUNCTION NILL))
502504

503505
(* ;; "Presumably any format-specific cleanup function will know what to do if it receives a format instead of a stream.")
504506

505507
(CL:WHEN (FFETCH (EXTERNALFORMAT FORMATBYTESTREAMFN) OF FORMAT)
506-
(APPLY* (FFETCH (EXTERNALFORMAT FORMATBYTESTREAMFN) OF FORMAT)
507-
STREAM BYTESTREAM))
508+
(SETQ BYTESTREAM (APPLY* (FFETCH (EXTERNALFORMAT FORMATBYTESTREAMFN) OF FORMAT)
509+
STREAM BYTESTREAM)))
510+
511+
(* ;; "Maybe the function said no?")
512+
513+
(CL:WHEN BYTESTREAM
514+
(freplace (STREAM ENDOFSTREAMOP) of BYTESTREAM with (FUNCTION NILL)))
508515
BYTESTREAM])
509516

510517
(\FORMATBYTESTRING
511-
[LAMBDA (STREAM STRING) (* ; "Edited 10-Jul-2022 16:39 by rmk")
518+
[LAMBDA (STREAM STRING) (* ; "Edited 19-Mar-2024 18:24 by rmk")
519+
(* ; "Edited 10-Jul-2022 16:39 by rmk")
512520
(* ; "Edited 22-Jun-2022 11:07 by rmk")
513521
(* ; "Edited 18-Jun-2022 22:04 by rmk")
514522
(WITH-RESOURCE \FORMATBYTESTRING.STREAM (\SETFILEPTR \FORMATBYTESTRING.STREAM 0)
515523
(LET [FSTRING NBYTES (BYTESTRINGFN (FETCH (EXTERNALFORMAT FORMATBYTESTRINGFN)
516524
OF (FETCH (STREAM EXTERNALFORMAT) OF STREAM]
517525
(IF BYTESTRINGFN
518-
THEN (APPLY* BYTESTRINGFN STREAM STRING \FORMATBYTESTRING.STREAM)
526+
THEN (CL:WHEN (SETQ FSTRING (APPLY* BYTESTRINGFN STREAM STRING
527+
\FORMATBYTESTRING.STREAM))
528+
(MKSTRING FSTRING))
519529
ELSE (\FORMATBYTESTREAM STREAM \FORMATBYTESTRING.STREAM)
520530
(FOR C INPNAME STRING DO (\OUTCHAR \FORMATBYTESTRING.STREAM C))
521531
(SETQ NBYTES (\GETFILEPTR \FORMATBYTESTRING.STREAM))
@@ -727,13 +737,13 @@
727737
(\CREATE.THROUGH.EXTERNALFORMAT)
728738
)
729739
(DECLARE%: DONTCOPY
730-
(FILEMAP (NIL (6735 13568 (\EXTERNALFORMAT 6745 . 10523) (MAKE-EXTERNALFORMAT 10525 . 13095) (
731-
\EXTERNALFORMAT.DEFPRINT 13097 . 13566)) (13569 16610 (\INSTALL.EXTERNALFORMAT 13579 . 15028) (
732-
\REMOVE.EXTERNALFORMAT 15030 . 15861) (FIND-FORMAT 15863 . 16608)) (16611 17023 (SYSTEM-EXTERNALFORMAT
733-
16621 . 17021)) (17372 32799 (\OUTCHAR 17382 . 18599) (\INCCODE 18601 . 19754) (\BACKCCODE 19756 .
734-
21435) (\BACKCCODE.EOLC 21437 . 23627) (\PEEKCCODE 23629 . 23954) (\PEEKCCODE.EOLC 23956 . 24335) (
735-
\INCCODE.EOLC 24337 . 26136) (\FORMATBYTESTREAM 26138 . 28273) (\FORMATBYTESTRING 28275 . 29734) (
736-
\CHECKEOLC.CRLF 29736 . 32797)) (34081 36317 (\NULLDEVICE 34091 . 35993) (\NULL.OPENFILE 35995 . 36315
737-
)) (36457 38284 (\CREATE.THROUGH.EXTERNALFORMAT 36467 . 37253) (\THROUGHIN 37255 . 37675) (
738-
\THROUGHBACKCCODE 37677 . 37944) (\THROUGHOUTCHARFN 37946 . 38282)))))
740+
(FILEMAP (NIL (6726 13559 (\EXTERNALFORMAT 6736 . 10514) (MAKE-EXTERNALFORMAT 10516 . 13086) (
741+
\EXTERNALFORMAT.DEFPRINT 13088 . 13557)) (13560 16601 (\INSTALL.EXTERNALFORMAT 13570 . 15019) (
742+
\REMOVE.EXTERNALFORMAT 15021 . 15852) (FIND-FORMAT 15854 . 16599)) (16602 17014 (SYSTEM-EXTERNALFORMAT
743+
16612 . 17012)) (17363 33340 (\OUTCHAR 17373 . 18590) (\INCCODE 18592 . 19745) (\BACKCCODE 19747 .
744+
21426) (\BACKCCODE.EOLC 21428 . 23618) (\PEEKCCODE 23620 . 23945) (\PEEKCCODE.EOLC 23947 . 24326) (
745+
\INCCODE.EOLC 24328 . 26127) (\FORMATBYTESTREAM 26129 . 28573) (\FORMATBYTESTRING 28575 . 30275) (
746+
\CHECKEOLC.CRLF 30277 . 33338)) (34622 36858 (\NULLDEVICE 34632 . 36534) (\NULL.OPENFILE 36536 . 36856
747+
)) (36998 38825 (\CREATE.THROUGH.EXTERNALFORMAT 37008 . 37794) (\THROUGHIN 37796 . 38216) (
748+
\THROUGHBACKCCODE 38218 . 38485) (\THROUGHOUTCHARFN 38487 . 38823)))))
739749
STOP

sources/EXTERNALFORMAT.LCOM

7 Bytes
Binary file not shown.

sources/XCCS

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
22

3-
(FILECREATED " 9-Dec-2023 11:42:55" {WMEDLEY}<sources>XCCS.;66 14365
3+
(FILECREATED "26-Mar-2024 11:00:37" {WMEDLEY}<sources>XCCS.;70 14862
44

55
:EDIT-BY rmk
66

7-
:CHANGES-TO (FNS \XCCSCHARSETFN)
7+
:CHANGES-TO (FNS \XCCSFORMATBYTESTREAM)
88

9-
:PREVIOUS-DATE " 8-Dec-2023 15:34:50" {WMEDLEY}<sources>XCCS.;65)
9+
:PREVIOUS-DATE "19-Mar-2024 16:02:36" {WMEDLEY}<sources>XCCS.;68)
1010

1111

1212
(PRETTYCOMPRINT XCCSCOMS)
@@ -19,6 +19,7 @@
1919
(INITVARS (*SIGNAL-24BIT-NSENCODING-ERROR*))
2020
(DECLARE%: EVAL@COMPILE DONTCOPY (EXPORT (CONSTANTS (\NORUNCODE 255)
2121
(NSCHARSETSHIFT 255))
22+
(ALISTS (CHARACTERNAMES \NORUNCODE NSCHARSETSHIFT))
2223
(MACROS \RUNCODED)))
2324
(DECLARE%: DONTEVAL@LOAD DOCOPY (P (\CREATE.XCCS.EXTERNALFORMAT])
2425
(DEFINEQ
@@ -200,9 +201,14 @@
200201
BYTE)))])
201202

202203
(\XCCSFORMATBYTESTREAM
203-
[LAMBDA (STREAM BYTESTREAM) (* ; "Edited 24-Jun-2021 16:47 by rmk:")
204-
(REPLACE (STREAM CHARSET) OF BYTESTREAM WITH (FETCH (STREAM CHARSET) OF
205-
STREAM])
204+
[LAMBDA (STREAM BYTESTREAM) (* ; "Edited 26-Mar-2024 11:00 by rmk")
205+
(* ; "Edited 19-Mar-2024 16:02 by rmk")
206+
(\EXTERNALFORMAT BYTESTREAM (\EXTERNALFORMAT STREAM))
207+
208+
(* ;; "This stream may be read as a continuation of STREAM (TTYIN, LAFITE?), and we want to make sure that the bytes are encoded properly. So let's assert (and possibly mark) that that's its current situation.")
209+
210+
(\XCCSCHARSETFN BYTESTREAM (fetch (STREAM CHARSET) of STREAM))
211+
BYTESTREAM])
206212

207213
(\XCCSCHARSETFN
208214
[LAMBDA (STREAM CHARSET DONTMARKSTREAM) (* ; "Edited 9-Dec-2023 11:18 by rmk")
@@ -270,6 +276,9 @@
270276
(CONSTANTS (\NORUNCODE 255)
271277
(NSCHARSETSHIFT 255))
272278
)
279+
280+
(ADDTOVAR CHARACTERNAMES (\NORUNCODE 255)
281+
(NSCHARSETSHIFT 255))
273282
(DECLARE%: EVAL@COMPILE
274283

275284
(PUTPROPS \RUNCODED MACRO (OPENLAMBDA (STREAM)
@@ -289,8 +298,8 @@
289298
(\CREATE.XCCS.EXTERNALFORMAT)
290299
)
291300
(DECLARE%: DONTCOPY
292-
(FILEMAP (NIL (886 11846 (\XCCSINCCODE 896 . 3875) (\XCCSPEEKCCODE 3877 . 6546) (\XCCSOUTCHAR 6548 .
293-
8768) (\XCCSBACKCCODE 8770 . 10314) (\XCCSFORMATBYTESTREAM 10316 . 10641) (\XCCSCHARSETFN 10643 .
294-
11844)) (11847 12620 (\CREATE.XCCS.EXTERNALFORMAT 11857 . 12618)) (12621 13452 (
295-
\NSIN.24BITENCODING.ERROR 12631 . 13450)))))
301+
(FILEMAP (NIL (993 12249 (\XCCSINCCODE 1003 . 3982) (\XCCSPEEKCCODE 3984 . 6653) (\XCCSOUTCHAR 6655 .
302+
8875) (\XCCSBACKCCODE 8877 . 10421) (\XCCSFORMATBYTESTREAM 10423 . 11044) (\XCCSCHARSETFN 11046 .
303+
12247)) (12250 13023 (\CREATE.XCCS.EXTERNALFORMAT 12260 . 13021)) (13024 13855 (
304+
\NSIN.24BITENCODING.ERROR 13034 . 13853)))))
296305
STOP

sources/XCCS.LCOM

112 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)