From 09d89db57ae0903ae022cf26701fdb9972de80a4 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 8 May 2024 13:08:33 -0700 Subject: [PATCH] Fixes recently identified glitches, removes most backward XPOINTERS This replaces PR #1673, which should be closed and deleted when this is merged. --- library/tedit/TEDIT | 651 ++++++++------- library/tedit/TEDIT-CHAT | 28 +- library/tedit/TEDIT-CHAT.LCOM | Bin 5488 -> 5409 bytes library/tedit/TEDIT-COMMAND | 283 +++---- library/tedit/TEDIT-COMMAND.LCOM | Bin 17225 -> 16916 bytes library/tedit/TEDIT-FILE | 141 ++-- library/tedit/TEDIT-FILE.LCOM | Bin 38737 -> 38838 bytes library/tedit/TEDIT-FIND | 99 ++- library/tedit/TEDIT-FIND.LCOM | Bin 7552 -> 7621 bytes library/tedit/TEDIT-FNKEYS | 50 +- library/tedit/TEDIT-FNKEYS.LCOM | Bin 14557 -> 14530 bytes library/tedit/TEDIT-HISTORY | 84 +- library/tedit/TEDIT-HISTORY.LCOM | Bin 9086 -> 9940 bytes library/tedit/TEDIT-LOOKS | 343 ++++---- library/tedit/TEDIT-LOOKS.LCOM | Bin 42804 -> 42761 bytes library/tedit/TEDIT-MENU | 882 +++++++++---------- library/tedit/TEDIT-MENU.LCOM | Bin 93028 -> 92493 bytes library/tedit/TEDIT-OLDFILE | 61 +- library/tedit/TEDIT-OLDFILE.LCOM | Bin 19028 -> 19138 bytes library/tedit/TEDIT-SCREEN | 490 +++++------ library/tedit/TEDIT-SCREEN.LCOM | Bin 33456 -> 32948 bytes library/tedit/TEDIT-SELECTION | 578 ++++++++----- library/tedit/TEDIT-SELECTION.LCOM | Bin 26531 -> 28290 bytes library/tedit/TEDIT-STREAM | 370 ++++---- library/tedit/TEDIT-STREAM.LCOM | Bin 30011 -> 30614 bytes library/tedit/TEDIT-WINDOW | 1255 ++++++++++++++-------------- library/tedit/TEDIT-WINDOW.LCOM | Bin 58418 -> 58509 bytes library/tedit/TEDIT.LCOM | Bin 32028 -> 32774 bytes library/tedit/tedit-exports.all | 69 +- lispusers/DOC-OBJECTS | 324 ++++--- lispusers/DOC-OBJECTS.LCOM | Bin 22603 -> 22192 bytes lispusers/tmax/TMAX | 37 +- lispusers/tmax/TMAX-XREF | 32 +- lispusers/tmax/TMAX-XREF.LCOM | Bin 10958 -> 10892 bytes lispusers/tmax/TMAX.LCOM | Bin 15247 -> 14767 bytes lispusers/tmax/TMAX.TEDITX | Bin 0 -> 62677 bytes 36 files changed, 3006 insertions(+), 2771 deletions(-) create mode 100644 lispusers/tmax/TMAX.TEDITX diff --git a/library/tedit/TEDIT b/library/tedit/TEDIT index 5f71d9a40..137eba9e0 100644 --- a/library/tedit/TEDIT +++ b/library/tedit/TEDIT @@ -1,10 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 1-Apr-2024 09:46:05" {WMEDLEY}TEDIT>TEDIT.;538 125643 +(FILECREATED " 8-May-2024 09:28:23" {WMEDLEY}tedit>TEDIT.;570 130099 :EDIT-BY rmk - :PREVIOUS-DATE "31-Mar-2024 10:14:22" {WMEDLEY}TEDIT>TEDIT.;537) + :CHANGES-TO (FNS TEDIT.MOVE) + + :PREVIOUS-DATE " 7-May-2024 08:22:06" {WMEDLEY}tedit>TEDIT.;569) (PRETTYCOMPRINT TEDITCOMS) @@ -237,14 +239,15 @@ PROC]) (TEXTSTREAM - [LAMBDA (TSTREAM? NOERROR) (* ; "Edited 20-Mar-2024 08:51 by rmk") + [LAMBDA (TSTREAM? NOERROR) (* ; "Edited 29-Apr-2024 12:50 by rmk") + (* ; "Edited 20-Mar-2024 08:51 by rmk") (* ; "Edited 24-Mar-2023 18:01 by rmk") (* jds "11-Jul-85 12:06") (* ;; "Convert from any designator of a textstream to that textstream.") (LET (TS WINDOW X) - [SETQ TS (if (type? TEXTSTREAM TSTREAM?) + (SETQ TS (if (type? TEXTSTREAM TSTREAM?) then TSTREAM? elseif (type? TEXTOBJ TSTREAM?) then (FGETTOBJ TSTREAM? STREAMHINT) @@ -257,9 +260,11 @@ then X elseif (type? TEXTOBJ (SETQ X (fetch (TEXTWINDOW WTEXTOBJ) of WINDOW))) then (FGETTOBJ X STREAMHINT)) - elseif (type? SELECTION TSTREAM?) - then (CL:WHEN (type? TEXTOBJ (SETQ X (FGETSEL TSTREAM? SELTEXTOBJ))) - (FGETTOBJ X STREAMHINT] + elseif (AND (type? SELECTION TSTREAM?) + (FGETSEL TSTREAM? SET)) + then (CL:WHEN [type? TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) + of (SETQ X (FGETSEL TSTREAM? SELTEXTSTREAM] + X))) (OR TS (CL:UNLESS NOERROR (ERROR TSTREAM? "is not a Tedit document"]) (TEXTSTREAMP @@ -435,7 +440,9 @@ (TEXTSTREAM (TEDIT FILE WINDOW NIL `(READONLY T LEAVETTY T FONT ,DEFAULTFONT]) (TEDIT.COPY - [LAMBDA (FROM TO) (* ; "Edited 15-Mar-2024 13:54 by rmk") + [LAMBDA (FROM TO) (* ; "Edited 29-Apr-2024 12:54 by rmk") + (* ; "Edited 22-Apr-2024 23:55 by rmk") + (* ; "Edited 15-Mar-2024 13:54 by rmk") (* ; "Edited 20-Feb-2024 17:03 by rmk") (* ; "Edited 1-Feb-2024 20:37 by rmk") (* ; "Edited 20-May-2023 18:47 by rmk") @@ -446,9 +453,12 @@ (* ;; "This results in a single history event.") - (CL:UNLESS (\TEDIT.MOVE.MSG FROM TO T) - (PROG ((TOBJ (GETSEL TO SELTEXTOBJ)) - (FOBJ (GETSEL FROM SELTEXTOBJ)) + (\DTEST FROM 'SELECTION) + (\DTEST TO 'SELECTION) + (CL:UNLESS (OR (EQ 0 (GETSEL FROM DCH)) + (\TEDIT.MOVE.MSG FROM TO T)) + (PROG ((TOBJ (TEXTOBJ TO)) + (FOBJ (TEXTOBJ FROM)) FROMPIECES) (\TEDIT.SHOWSEL FROM NIL) (* ; "Turn off any current highlighting") (\TEDIT.SHOWSEL TO NIL) @@ -575,7 +585,10 @@ (DISMISS))))]) (TEDIT.MOVE - [LAMBDA (FROM TO) (* ; "Edited 15-Mar-2024 13:54 by rmk") + [LAMBDA (FROM TO) (* ; "Edited 8-May-2024 09:27 by rmk") + (* ; "Edited 29-Apr-2024 12:53 by rmk") + (* ; "Edited 22-Apr-2024 23:55 by rmk") + (* ; "Edited 15-Mar-2024 13:54 by rmk") (* ; "Edited 5-Mar-2024 00:22 by rmk") (* ; "Edited 1-Mar-2024 20:13 by rmk") (* ; "Edited 20-Feb-2024 20:07 by rmk") @@ -593,12 +606,17 @@ (* ;; "If they are in separate texts, then the modifcations to TO go into TO's history (pending delete and insert), the deletion of FROM is an event in its object. In that case it will require undos in both objects to get them both back to the original state.") - (CL:UNLESS (\TEDIT.MOVE.MSG FROM TO NIL) - (PROG ((TOBJ (GETSEL TO SELTEXTOBJ)) - (FOBJ (GETSEL FROM SELTEXTOBJ)) - FROMPIECES) - (\TEDIT.SHOWSEL FROM NIL) (* ; "Turn off any current highlighting") - (\TEDIT.SHOWSEL TO NIL) + (\DTEST FROM 'SELECTION) + (\DTEST TO 'SELECTION) + (CL:UNLESS (OR (EQ 0 (GETSEL FROM DCH)) + (\TEDIT.MOVE.MSG FROM TO NIL)) + (PROG* ((TOBJ (TEXTOBJ TO)) + (FOBJ (TEXTOBJ FROM)) + (TPREVEVENTS (FGETTOBJ TOBJ TXTHISTORY)) + (FPREVEVENTS (FGETTOBJ FOBJ TXTHISTORY)) + FROMPIECES) + (\TEDIT.SHOWSEL FROM NIL) (* ; "Turn off any current highlighting") + (\TEDIT.SHOWSEL TO NIL) (* ;; "Install FROM pieces at TO, first clearing out the blue pending delete. The move-event may be a composite of both. If we are doing a move in the same textobject, the TO selection (= SEL for a CTRL-SHIFIT SELOPERATION) must be updated to reflect a preceding FROM-deletion.") @@ -606,25 +624,25 @@ (* ;; "Grab (a copy of) the source pieces, if image objects allow copying") - (SETQ FROMPIECES (\TEDIT.SELPIECES.COPY (\TEDIT.SELPIECES FROM) - 'COPY TOBJ FOBJ)) - (CL:UNLESS FROMPIECES (RETURN)) + (SETQ FROMPIECES (\TEDIT.SELPIECES.COPY (\TEDIT.SELPIECES FROM) + 'COPY TOBJ FOBJ)) + (CL:UNLESS FROMPIECES (RETURN)) (* ;; "") (* ;; "Delete the FROM unless an object doesn't allow deletion.") - (if (EQ TOBJ FOBJ) - then - (* ;; "In this case, TOBJ is SEL and FOBJ is something else.") + (if (EQ TOBJ FOBJ) + then + (* ;; "In this case, TOBJ is SEL and FOBJ is something else.") - (CL:UNLESS (\TEDIT.DELETE.SELPIECES FOBJ FROM) - (RETURN)) - (\TEDIT.UPDATE.LINES FOBJ 'DELETION FROM NIL NIL) - (\TEDIT.SEL.DELETEDCHARS TO FROM) (* ; + (CL:UNLESS (\TEDIT.DELETE.SELPIECES FOBJ FROM) + (RETURN)) + (\TEDIT.UPDATE.LINES FOBJ 'DELETION FROM NIL NIL) + (\TEDIT.SEL.DELETEDCHARS TO FROM) (* ;  "Adjust TO to after-deletion chnos.") - elseif (\TEDIT.DELETE FOBJ FROM) - else (RETURN)) + elseif (\TEDIT.DELETE FOBJ FROM) + else (RETURN)) (* ;; "") @@ -632,32 +650,21 @@ (* ;; "Either replace or insert in the target, depending on its BLUEPENDINGDELETE") - (if (FGETTOBJ TOBJ BLUEPENDINGDELETE) - then (FSETTOBJ TOBJ BLUEPENDINGDELETE NIL) - (\TEDIT.REPLACE.SELPIECES FROMPIECES TOBJ TO) - else (\TEDIT.INSERT.SELPIECES FROMPIECES TOBJ TO)) - (\TEDIT.SET.SEL.LOOKS TO 'NORMAL) - (\TEDIT.FIXSEL TO TOBJ) - (\TEDIT.SHOWSEL TO T) - - (* ;; "Create a :Move event that combines the insert with the prior delete/replace.If FOBJ=TOBJ, the delete and insert happened in the same document. If the events happened in different documents, the delete event is already in FOBJ and we leave it there so that event can be undone by a separate undo action in FOBJ. But we still include in the TOBJ move event: if we undo the move, we certainly want to undo the insert. And if the delete event is still the next undoing candidate in FOBJ, it makes sense to do the FOBJ undo, otherwise not. \TEDIT.UNDO.MOVE figures this out.") - - (LET [(INSEVENT (\TEDIT.POPEVENT TOBJ)) - (DELEVENT (CL:IF (EQ TOBJ FOBJ) - (\TEDIT.POPEVENT TOBJ) - (\TEDIT.LASTEVENT FOBJ))] + (if (FGETTOBJ TOBJ BLUEPENDINGDELETE) + then (FSETTOBJ TOBJ BLUEPENDINGDELETE NIL) + (\TEDIT.REPLACE.SELPIECES FROMPIECES TOBJ TO) + else (\TEDIT.INSERT.SELPIECES FROMPIECES TOBJ TO)) + (\TEDIT.SET.SEL.LOOKS TO 'NORMAL) + (\TEDIT.FIXSEL TO TOBJ) + (\TEDIT.SHOWSEL TO T) + (\TEDIT.COMPOSITE.EVENT TOBJ TPREVEVENTS) (* ; "For undoing the changes to TO") + (CL:UNLESS (EQ FOBJ TOBJ) (* ; "Undoing changes in different FROM") - (* ;; - "We have to pop the INSEVENT so we can see the DELEVENT, then we push it back.") + (* ;; " The move/insert is in TO and the move/delete is in the separate FROM. It makes sense for the events to be undone by separate undo events in their individual streams. It also makes conceptual sense for undoing the move/insert in TO to also undo the delete, essentially moving the text back to the FROM. But only if the delete is still the most recent still-undone event in FROM. Otherwise, things may have moved around by independent edits, and the undo would be at a random position.") - (* ;; "We coerce the insert event into a move. We save the entire DELEVENT so that \TEDIT.UNDO.MOVE can test to see whether a foreign FOBJ is in the proper state.") + (* ;; "If the delete event is also stored in the TO, that check could be performed. But: what if the from document has been closed, and its text object collected? We would also have to tie it down in the TO...and then moving back and forth would create a circularity.") - (* ;; "If DELEVENT may be a :Replace, with THDELETEDPIECES.") - - (SETTH INSEVENT THACTION :Move) - (SETTH INSEVENT THOLDINFO (CONS DELEVENT (CL:IF (NEQ FOBJ TOBJ) - FOBJ))) - (\TEDIT.HISTORYADD TOBJ INSEVENT))))]) + (\TEDIT.COMPOSITE.EVENT FOBJ FPREVEVENTS))))]) (TEDIT.STRINGWIDTH [LAMBDA (STR FONT TERMSA) (* jds "19-AUG-83 14:40") @@ -867,7 +874,9 @@ (DEFINEQ (\TEDIT.MOVE.MSG - [LAMBDA (FROM TO COPYFLG) (* ; "Edited 1-Feb-2024 23:33 by rmk") + [LAMBDA (FROM TO COPYFLG) (* ; "Edited 3-May-2024 00:04 by rmk") + (* ; "Edited 29-Apr-2024 12:52 by rmk") + (* ; "Edited 1-Feb-2024 23:33 by rmk") (* ; "Edited 22-May-2023 09:35 by rmk") (* ; "Edited 20-May-2023 18:53 by rmk") (* ; "Edited 15-May-2023 22:11 by rmk") @@ -875,10 +884,8 @@ (* ;; "Check whether it is possible to insert the FROM-selected pieces into the TO-selection. Value is NON-NIL if the operation can't be performed.") - (LET ((FOBJ (AND FROM (GETSEL FROM SET) - (GETSEL FROM SELTEXTOBJ))) - (TOBJ (AND TO (GETSEL TO SET) - (GETSEL TO SELTEXTOBJ))) + (LET ((FOBJ (AND FROM (TEXTOBJ FROM))) + (TOBJ (AND TO (TEXTOBJ TO))) (TYPE (CL:IF COPYFLG "copy" "move"))) @@ -916,7 +923,9 @@ TEXTLEN))]) (TEDIT.RPLCHARCODE - [LAMBDA (TSTREAM N NEWCHARCODE NEWCHARLOOKS) (* ; "Edited 17-Mar-2024 00:24 by rmk") + [LAMBDA (TSTREAM N NEWCHARCODE NEWCHARLOOKS) (* ; "Edited 5-May-2024 20:33 by rmk") + (* ; "Edited 25-Apr-2024 00:13 by rmk") + (* ; "Edited 17-Mar-2024 00:24 by rmk") (* ; "Edited 29-Dec-2023 11:50 by rmk") (* ; "Edited 7-Dec-2023 16:01 by rmk") (* ; "Edited 1-Dec-2023 21:52 by rmk") @@ -925,9 +934,13 @@ (* ;; "Replaces the Nth charcode (or object) in TSTREAM with NEWCHARCODE (or object) with NEWCHARLOOKS. This is accomplished by isolating the target character into a length 1 piece, then converting that into a string (or object) piece containing NEWCHAR.") + (* ;; + "NOTE also: this doesn't update the display. Could call \TEDIT.UPDATE.LINES for appearance at N.") + (* ;; "NOTE: this may introduce new pieces, so must be used carefully with other piece-based or BIN-based iterations.") - (LET ((TEXTOBJ (TEXTOBJ TSTREAM)) + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (LET ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) PC START-OF-PIECE) (DECLARE (SPECVARS START-OF-PIECE)) (CL:WHEN (ILESSP N 0) @@ -941,10 +954,9 @@ (CL:WHEN [AND NEWCHARLOOKS (NOT (OR (FONTP NEWCHARLOOKS) (type? CHARLOOKS NEWCHARLOOKS] (\ILLEGAL.ARG NEWCHARLOOKS)) - (CL:WHEN (FGETTOBJ TEXTOBJ STREAMHINT) - (replace (STREAM BINABLE) of (FGETTOBJ TEXTOBJ STREAMHINT) with NIL)) + (replace (STREAM BINABLE) of TSTREAM with NIL) - (* ;; "Chop off the suffix. Unless N was last in PC, the piece containing is new.") + (* ;; "Chop of the suffix and prefix so that N is isolated into a one-character new piece which will then be converted to a string piece with the new character. (There is a fast case, perhaps for repeated calls, wherein N is already the first or last character of a string piece, and the looks have not changed. Then we need only finagle the offset or length (or the fat ptype if we are upgrading).") (\TEDIT.ALIGNEDPIECE (ADD1 N) TEXTOBJ) @@ -975,7 +987,8 @@ NEWCHARCODE]) (TEDIT.NTHCHARCODE - [LAMBDA (TSTREAM N) (* ; "Edited 17-Mar-2024 00:27 by rmk") + [LAMBDA (TSTREAM N) (* ; "Edited 29-Apr-2024 13:06 by rmk") + (* ; "Edited 17-Mar-2024 00:27 by rmk") (* ; "Edited 1-Feb-2024 09:50 by rmk") (* ; "Edited 8-Nov-2023 08:41 by rmk") (* ; "Edited 4-Nov-2023 15:23 by rmk") @@ -985,7 +998,7 @@ (LET (TEXTOBJ START-OF-PIECE) (DECLARE (SPECVARS START-OF-PIECE)) [if (type? SELECTION TSTREAM) - then (SETQ TEXTOBJ (TEXTOBJ (FGETSEL TSTREAM SELTEXTOBJ))) + then (SETQ TEXTOBJ (TEXTOBJ (FGETSEL TSTREAM SELTEXTSTREAM))) (CL:UNLESS (EQ N 0) [add N (CL:IF (ILESSP N 0) (FGETSEL TSTREAM CHLIM) @@ -1007,7 +1020,8 @@ START-OF-PIECE)))]) (\TEDIT.PIECE.NTHCHARCODE - [LAMBDA (TEXTOBJ PC OFFSET) (* ; "Edited 22-Mar-2024 00:02 by rmk") + [LAMBDA (TEXTOBJ PC OFFSET) (* ; "Edited 29-Apr-2024 08:46 by rmk") + (* ; "Edited 22-Mar-2024 00:02 by rmk") (* ; "Edited 1-Feb-2024 09:55 by rmk") (* ; "Edited 6-Jan-2024 16:36 by rmk") (* ; "Edited 29-Dec-2023 11:55 by rmk") @@ -1016,32 +1030,41 @@ (* ; "Edited 8-Nov-2023 08:43 by rmk") (* ; "Edited 5-Nov-2023 08:17 by rmk") - (* ;; "Returns the OFFSETth charcode of PC, NIL if OFFSET is out of bounds. ") + (* ;; "Returns the OFFSETth charcode of PC, NIL if OFFSET is out of bounds. For file pieces, ensures that the backing stream is restored to its original position, so that it remains comaptible with the values (buffer, offset) in the textstream.") (CL:WHEN (AND (IGEQ OFFSET 1) (ILEQ OFFSET (PLEN PC))) - [LET ((PCONTENTS (PCONTENTS PC))) + [LET ((PCONTENTS (PCONTENTS PC)) + FILEPOS) (SELECTC (PTYPE PC) (STRING.PTYPES (NTHCHARCODE PCONTENTS OFFSET)) (THINFILE.PTYPE + (SETQ FILEPOS (\GETFILEPTR PCONTENTS)) (\SETFILEPTR PCONTENTS (IPLUS (PFPOS PC) (SUB1 OFFSET))) - (BIN PCONTENTS)) + (PROG1 (BIN PCONTENTS) + (\SETFILEPTR PCONTENTS FILEPOS))) (FATFILE1.PTYPE + (SETQ FILEPOS (\GETFILEPTR PCONTENTS)) (\SETFILEPTR PCONTENTS (IPLUS (PFPOS PC) (SUB1 OFFSET))) - (create WORD - HIBYTE _ (PCHARSET PC) - LOBYTE _ (BIN PCONTENTS))) + (PROG1 (create WORD + HIBYTE _ (PCHARSET PC) + LOBYTE _ (BIN PCONTENTS)) + (\SETFILEPTR PCONTENTS FILEPOS))) (FATFILE2.PTYPE + (SETQ FILEPOS (\GETFILEPTR PCONTENTS)) (\SETFILEPTR PCONTENTS (IPLUS (PFPOS PC) (UNFOLD (SUB1 OFFSET) 2))) - (\WIN PCONTENTS)) - (UTF8.PTYPE [\SETFILEPTR PCONTENTS (IPLUS (PFPOS PC) + (PROG1 (\WIN PCONTENTS) + (\SETFILEPTR PCONTENTS FILEPOS))) + (UTF8.PTYPE (SETQ FILEPOS (\GETFILEPTR PCONTENTS)) + [\SETFILEPTR PCONTENTS (IPLUS (PFPOS PC) (ITIMES (SUB1 OFFSET) (PBYTESPERCHAR PC] - (UTF8.INCCODEFN PCONTENTS)) + (PROG1 (UTF8.INCCODEFN PCONTENTS) + (\SETFILEPTR PCONTENTS FILEPOS))) (OBJECT.PTYPE PCONTENTS) (SUBSTREAM.PTYPE (* ; "A substream stored as an object") (HELP 'SUBSTREAM?) @@ -1059,7 +1082,8 @@ (DEFINEQ (\TEDIT1 - [LAMBDA (TSTREAM WINDOW UNSPAWNED) (* ; "Edited 17-Mar-2024 12:51 by rmk") + [LAMBDA (TSTREAM WINDOW UNSPAWNED) (* ; "Edited 24-Apr-2024 10:38 by rmk") + (* ; "Edited 17-Mar-2024 12:51 by rmk") (* ; "Edited 22-Sep-2023 20:23 by rmk") (* ; "Edited 13-Sep-2023 22:37 by rmk") (* ; "Edited 12-Jun-90 17:51 by mitani") @@ -1067,7 +1091,7 @@ (* ;; "Does the actual editing work, once TEDIT has OPENTEXTSTREAMed the thing to be edited.") (LET ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) - (\TEDIT.COMMAND.LOOP TEXTOBJ) (* ; "Run the editing engine") + (\TEDIT.COMMAND.LOOP TSTREAM) (* ; "Run the editing engine") (CLOSEW WINDOW) (* ; "Close the edit window") (\TEDIT.TEXTCLOSEF TSTREAM) (* ; "Close the underlying files") (replace (STREAM ACCESSBITS) of TSTREAM with BothBits) @@ -1088,22 +1112,16 @@ (T TSTREAM)))]) (\TEDIT.INSERT - [LAMBDA (INSERT SEL TEXTOBJ DONTSCROLL) (* ; "Edited 17-Mar-2024 11:41 by rmk") + [LAMBDA (INSERT SEL TEXTOBJ DONTSCROLL) (* ; "Edited 6-May-2024 13:47 by rmk") + (* ; "Edited 21-Apr-2024 20:24 by rmk") (* ; "Edited 15-Mar-2024 13:32 by rmk") (* ; "Edited 9-Mar-2024 11:36 by rmk") - (* ; "Edited 18-Feb-2024 15:30 by rmk") - (* ; "Edited 9-Feb-2024 10:52 by rmk") (* ; "Edited 28-Jan-2024 23:29 by rmk") (* ; "Edited 14-Jan-2024 12:14 by rmk") - (* ; "Edited 22-Dec-2023 22:03 by rmk") (* ; "Edited 20-Dec-2023 15:27 by rmk") (* ; "Edited 12-Nov-2023 12:28 by rmk") - (* ; "Edited 19-Oct-2023 11:05 by rmk") (* ; "Edited 15-Oct-2023 16:01 by rmk") (* ; "Edited 18-Sep-2023 12:48 by rmk") - (* ; "Edited 6-Jun-2023 15:23 by rmk") - (* ; "Edited 2-Jun-2023 00:12 by rmk") - (* ; "Edited 27-May-2023 10:45 by rmk") (* ; "Edited 24-May-2023 14:23 by rmk") (* ; "Edited 29-May-91 18:22 by jds") @@ -1120,7 +1138,9 @@ (* ;; "SELECTION-SET test may be unnecessary here, TEDIT.INSERT already checks, not sure about the 2 other calls.") - (CL:UNLESS (\TEDIT.READONLY TEXTOBJ) + (CL:UNLESS (AND (OR (CHARCODEP INSERT) + (EQ 0 (NCHARS INSERT))) + (\TEDIT.READONLY TEXTOBJ)) [if (NOT (AND SEL (GETSEL SEL SET))) then (TEDIT.PROMPTPRINT TEXTOBJ "Please select a place for the insertion." T) else @@ -1142,8 +1162,8 @@ (* ;; "FORM is not included in the EOL characters. It breaks a line, but the first line after it doesn't necessarily have first-line margins. CR/LF maybe should have been converted by plaintext reader or \TEXTBOUT.") - [\TEDIT.INSERTCH INSERT CHNO TEXTOBJ (FMEMB INSERT - (CHARCODE (EOL CR LF] + [\TEDIT.INSERTCH INSERT CHNO TEXTOBJ + (FMEMB INSERT (CHARCODE (EOL CR LF FORM] (SETQ NCHARSADDED 1) else (* ;; @@ -1153,7 +1173,7 @@ suchthat (FMEMB CH (CHARCODE (EOL CR LF] then [for CH instring INSERT as NCH# from CHNO do (\TEDIT.INSERTCH CH NCH# TEXTOBJ - (FMEMB CH (CHARCODE (EOL CR LF] + (FMEMB CH (CHARCODE (EOL CR LF FORM] else (\TEDIT.INSERTCH INSERT CHNO TEXTOBJ)) (SETQ NCHARSADDED (NCHARS INSERT))) (FSETTOBJ TEXTOBJ \DIRTY T) @@ -1170,7 +1190,7 @@ 0 'RIGHT) (\TEDIT.SET.SEL.LOOKS SEL 'NORMAL) - (CL:UNLESS DONTSCROLL (TEDIT.NORMALIZECARET TEXTOBJ SEL)) + (CL:UNLESS DONTSCROLL (TEDIT.NORMALIZECARET TEXTOBJ SEL NIL T)) (\TEDIT.SHOWSEL SEL T) (for PANE in PANES do (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE])]) @@ -1308,7 +1328,8 @@ (FGETTOBJ TEXTOBJ STREAMHINT])]) (\TEDIT.RESTARTFN - [LAMBDA (TSTREAM WINDOW PROPS) (* ; "Edited 17-Mar-2024 16:58 by rmk") + [LAMBDA (TSTREAM WINDOW PROPS) (* ; "Edited 24-Apr-2024 10:38 by rmk") + (* ; "Edited 17-Mar-2024 16:58 by rmk") (* ; "Edited 22-Sep-2023 20:31 by rmk") (* ; "Edited 21-Aug-2022 08:13 by rmk") (* ; "Edited 12-Jun-90 17:51 by mitani") @@ -1325,7 +1346,7 @@ (SETQ TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) (* ; "New stream maybe new textobj.") (SETTOBJ TEXTOBJ \DIRTY ODIRTY) (* ; "Preserve dirty") - (\TEDIT.COMMAND.LOOP TEXTOBJ) (* ; "Run the editing engine") + (\TEDIT.COMMAND.LOOP TSTREAM) (* ; "Run the editing engine") (CLOSEW WINDOW) (* ; "Close the edit window. WHY ??") (\TEDIT.TEXTCLOSEF TSTREAM) (* ; "Close the underlying files") (replace (STREAM ACCESSBITS) of TSTREAM with BothBits) @@ -1338,7 +1359,10 @@ WINDOW TSTREAM))]) (\TEDIT.CHARDELETE - [LAMBDA (TEXTOBJ SEL) (* ; "Edited 17-Mar-2024 00:27 by rmk") + [LAMBDA (TEXTOBJ SEL) (* ; "Edited 25-Apr-2024 23:31 by rmk") + (* ; "Edited 17-Apr-2024 23:14 by rmk") + (* ; "Edited 1-Apr-2024 22:44 by rmk") + (* ; "Edited 17-Mar-2024 00:27 by rmk") (* ; "Edited 23-Dec-2023 17:32 by rmk") (* ; "Edited 24-May-2023 22:50 by rmk") (* ; "Edited 22-May-2023 23:24 by rmk") @@ -1347,58 +1371,77 @@ (* ;; "This creates a selection that specifies a deletion of the single character just before SEL's caret, and then uses that to delete the character. It assumes that SEL can be smashed.") (SETQ TEXTOBJ (TEXTOBJ TEXTOBJ)) - (PROG [FIRSTPIECE (CH# (SUB1 (TEDIT.GETPOINT TEXTOBJ SEL] - (CL:WHEN (ILEQ CH# 0) (* ; + (CL:UNLESS SEL + (SETQ SEL (FGETTOBJ TEXTOBJ SEL))) + + (* ;; "If there is a selection, just delete that.") + + [if (IGREATERP (GETSEL SEL DCH) + 0) + then (\TEDIT.DELETE TEXTOBJ SEL) + else (PROG [FIRSTPIECE (CH# (SUB1 (TEDIT.GETPOINT TEXTOBJ SEL] + (CL:WHEN (ILEQ CH# 0) (* ;  "Can't backspace past start of document") - (RETURN)) + (RETURN)) - (* ;; "Back up to the first visible character--that's the target, unless it is protected") - - (for PC START-OF-PIECE backpieces (SETQ FIRSTPIECE (\TEDIT.CHTOPC CH# TEXTOBJ T)) - declare (SPECVARS START-OF-PIECE) until (fetch (CHARLOOKS CLPROTECTED) - of (PLOOKS PC)) - do (if (VISIBLEPIECEP PC) - then - (* ;; "Found the last character of the most recent visible piece") - - (\TEDIT.UPDATE.SEL SEL (CL:IF (EQ PC FIRSTPIECE) - CH# - (SUB1 START-OF-PIECE)) - 1 - 'RIGHT) - (\TEDIT.DELETE TEXTOBJ SEL) - (RETURN) - elseif (NEQ PC FIRSTPIECE) - then (add START-OF-PIECE (IMINUS (PLEN PC]) + (* ;; "Back up to the first visible character--that's the target, unless it is protected") + + (for PC START-OF-PIECE backpieces (SETQ FIRSTPIECE (\TEDIT.CHTOPC CH# TEXTOBJ T)) + declare (SPECVARS START-OF-PIECE) until (fetch (CHARLOOKS CLPROTECTED) + of (PLOOKS PC)) + do (if (VISIBLEPIECEP PC) + then + (* ;; "Found the last character of the most recent visible piece") + + (\TEDIT.UPDATE.SEL SEL (CL:IF (EQ PC FIRSTPIECE) + CH# + (SUB1 START-OF-PIECE)) + 1 + 'RIGHT) + (\TEDIT.DELETE TEXTOBJ SEL) + (RETURN) + elseif (NEQ PC FIRSTPIECE) + then (add START-OF-PIECE (IMINUS (PLEN PC] + (TEDIT.NORMALIZECARET TEXTOBJ]) (\TEDIT.CHARDELETE.FORWARD - [LAMBDA (TEXTOBJ SEL) (* ; "Edited 17-Mar-2024 00:27 by rmk") + [LAMBDA (TEXTOBJ SEL) (* ; "Edited 1-Apr-2024 22:24 by rmk") + (* ; "Edited 17-Mar-2024 00:27 by rmk") (* ; "Edited 24-Dec-2023 00:36 by rmk") (* ;; "This creates a selection specifying a deletion of the single character just after SEL's caret, and then uses that to delete the character. It assumes that SEL can be smashed.") (SETQ TEXTOBJ (TEXTOBJ TEXTOBJ)) - (PROG (FIRSTPIECE (CH# (TEDIT.GETPOINT TEXTOBJ SEL))) - (CL:WHEN (IGREATERP CH# (FGETTOBJ TEXTOBJ TEXTLEN))(* ; "Can't delete past the end") - (RETURN)) + (CL:UNLESS SEL + (SETQ SEL (FGETTOBJ TEXTOBJ SEL))) - (* ;; "Forward to the first visible character--that's the target, unless it is protected") + (* ;; "If there is a selection, just delete that.") - (for PC START-OF-PIECE inpieces (SETQ FIRSTPIECE (\TEDIT.CHTOPC CH# TEXTOBJ T)) - declare (SPECVARS START-OF-PIECE) until (fetch (CHARLOOKS CLPROTECTED) - of (PLOOKS PC)) - do (if (VISIBLEPIECEP PC) - then - (* ;; "Delete the next visible character") + (if (IGREATERP (GETSEL SEL DCH) + 0) + then (\TEDIT.DELETE TEXTOBJ SEL) + else (PROG (FIRSTPIECE (CH# (TEDIT.GETPOINT TEXTOBJ SEL))) + (CL:WHEN (IGREATERP CH# (FGETTOBJ TEXTOBJ TEXTLEN)) + (* ; "Can't delete past the end") + (RETURN)) + + (* ;; "Forward to the first visible character--that's the target, unless it is protected") + + (for PC START-OF-PIECE inpieces (SETQ FIRSTPIECE (\TEDIT.CHTOPC CH# TEXTOBJ T)) + declare (SPECVARS START-OF-PIECE) until (fetch (CHARLOOKS CLPROTECTED) + of (PLOOKS PC)) + do (if (VISIBLEPIECEP PC) + then + (* ;; "Delete the next visible character") - (\TEDIT.UPDATE.SEL SEL (CL:IF (EQ PC FIRSTPIECE) - CH# - (SUB1 START-OF-PIECE)) - 1 - 'RIGHT) - (\TEDIT.DELETE TEXTOBJ SEL) - (RETURN SEL) - else (add START-OF-PIECE (PLEN PC]) + (\TEDIT.UPDATE.SEL SEL (CL:IF (EQ PC FIRSTPIECE) + CH# + (SUB1 START-OF-PIECE)) + 1 + 'RIGHT) + (\TEDIT.DELETE TEXTOBJ SEL) + (RETURN SEL) + else (add START-OF-PIECE (PLEN PC]) (\TEDIT.COPYPIECE [LAMBDA (PC FROMOBJ TOOBJ UNPROTECT OPERATION PROMPTTEXTOBJ) @@ -1515,7 +1558,9 @@ OBJ]) (\TEDIT.DELETE - [LAMBDA (TEXTOBJ TARGETSEL DONTDISPLAY) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (TEXTOBJ TARGETSEL DONTDISPLAY) (* ; "Edited 24-Apr-2024 10:42 by rmk") + (* ; "Edited 23-Apr-2024 07:35 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 21-Feb-2024 20:40 by rmk") (* ; "Edited 20-Feb-2024 20:09 by rmk") (* ; "Edited 19-Feb-2024 11:48 by rmk") @@ -1533,8 +1578,9 @@ (* ;; "If this is called as part of a move, SEL should end up at the location of the insert, adjusted if the TARGETSEL comes earlier. If this is just a delete, SEL should end up as a point selection at TARGETSEL's CH#.") - (CL:UNLESS (\TEDIT.READONLY TEXTOBJ) - (\DTEST TARGETSEL 'SELECTION) + (\DTEST TARGETSEL 'SELECTION) + (CL:UNLESS (OR (\TEDIT.READONLY TEXTOBJ) + (ZEROP (FGETSEL TARGETSEL DCH))) (CL:WHEN (AND (FGETSEL TARGETSEL SET) (IGEQ (FGETSEL TARGETSEL DCH) 1)) @@ -1591,7 +1637,8 @@ (PPARALAST PC)) do (FSETPC PC PPARALOOKS PPLOOKS)))]) (\TEDIT.QUIT - [LAMBDA (W NOFORCE) (* ; "Edited 20-Mar-2024 10:53 by rmk") + [LAMBDA (W NOFORCE) (* ; "Edited 2-May-2024 21:25 by rmk") + (* ; "Edited 20-Mar-2024 10:53 by rmk") (* ; "Edited 15-Mar-2024 15:38 by rmk") (* ; "Edited 22-Sep-2023 20:21 by rmk") (* ; "Edited 20-Sep-2023 23:24 by rmk") @@ -1599,32 +1646,32 @@ (* ;; "Called by the default TEDIT.DEFAULT.MENUFN to perform the QUIT command.") - (PROG* ((TEXTOBJ (TEXTOBJ! (fetch (TEXTWINDOW WTEXTOBJ) of W))) + (PROG* ((TSTREAM (fetch (TEXTWINDOW WTEXTSTREAM) of W)) + (TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) (QUITFNS (GETTEXTPROP TEXTOBJ 'QUITFN)) - QUITFLG RESP) + QUITFLG) [for QUITFN inside QUITFNS until (OR (EQ QUITFLG 'DON'T) (EQ QUITFLG T)) do (SETQ QUITFLG (COND ((EQ QUITFN T)) - (QUITFN (APPLY* QUITFN W (FGETTOBJ TEXTOBJ STREAMHINT) - TEXTOBJ - (FGETTOBJ TEXTOBJ EDITPROPS] - (COND - ((EQ QUITFLG 'DON'T) + (QUITFN (APPLY* QUITFN W TSTREAM TEXTOBJ (FGETTOBJ TEXTOBJ + EDITPROPS] + (CL:WHEN (EQ QUITFLG 'DON'T) - (* ;; "The user supplied a QUITFN, and it returned 'DON'T' , so just ignore all this Fooferaw and keep editing.") + (* ;; + "The user supplied a QUITFN, and it returned 'DON'T' , so just ignore all this and keep editing.") (RETURN)) - [(AND (FGETTOBJ TEXTOBJ \DIRTY) - (NOT (FGETTOBJ TEXTOBJ MENUFLG)) - (NEQ QUITFNS T) - (NEQ QUITFLG T)) (* ; - "If this document has changed, check with the user to make sure he really wants to do it.") - (FSETTOBJ TEXTOBJ EDITFINISHEDFLG (MOUSECONFIRM "Not saved yet; LEFT to Quit anyway." - T (FGETTOBJ TEXTOBJ PROMPTWINDOW] - (T (* ; - "Go ahead and quit the next time we see the main command loop.") - (FSETTOBJ TEXTOBJ EDITFINISHEDFLG T))) + + (* ;; "If this document has changed, check with the user to make sure he really wants to do it.") + + (FSETTOBJ TEXTOBJ EDITFINISHEDFLG (CL:IF (AND (FGETTOBJ TEXTOBJ \DIRTY) + (NOT (FGETTOBJ TEXTOBJ MENUFLG)) + (NEQ QUITFNS T) + (NEQ QUITFLG T)) + (MOUSECONFIRM "Not saved yet; LEFT to Quit anyway." + T (FGETTOBJ TEXTOBJ PROMPTWINDOW)) + T)) (CL:WHEN [AND (FGETTOBJ TEXTOBJ \WINDOW) (NOT NOFORCE) (NEQ (\TEDIT.PRIMARYW TEXTOBJ) @@ -1635,31 +1682,30 @@ (RETURN (FGETTOBJ TEXTOBJ EDITFINISHEDFLG]) (\TEDIT.WORDDELETE - [LAMBDA (TEXTOBJ SEL) (* ; "Edited 20-Mar-2024 11:08 by rmk") + [LAMBDA (TSTREAM SEL) (* ; "Edited 29-Apr-2024 11:01 by rmk") + (* ; "Edited 20-Mar-2024 11:08 by rmk") (* ; "Edited 25-Dec-2023 00:03 by rmk") (* ; "Edited 23-May-2023 16:37 by rmk") (* ; "Edited 22-May-2023 10:52 by rmk") (* ; "Edited 29-May-91 18:22 by jds") - - (* ;; "This deletes all characters from the character just before the caret to the beginning of the preceding word, skipping over separators to reach the target word.") - - (TEXTOBJ! TEXTOBJ) - (CL:UNLESS SEL - (SETQ SEL (FGETTOBJ TEXTOBJ SEL))) - (PROG ((LASTNO (SUB1 (TEDIT.GETPOINT SEL))) - FIRSTNO) + (PROG ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + LASTNO FIRSTNO) + (CL:UNLESS SEL + (SETQ SEL (FGETTOBJ TEXTOBJ SEL))) + (SETQ LASTNO (SUB1 (TEDIT.GETPOINT SEL))) (* ;; "LASTNO is the final (i.e., highest-numbered) character to be deleted.") (CL:WHEN (ILEQ LASTNO 0) (* ;  "Nothing to delete at start of file.") (RETURN)) - (SETQ FIRSTNO (\TEDIT.WORD.FIRST TEXTOBJ LASTNO)) + (SETQ FIRSTNO (\TEDIT.WORD.FIRST TSTREAM LASTNO)) (\TEDIT.UPDATE.SEL SEL FIRSTNO (ADD1 (IDIFFERENCE LASTNO FIRSTNO))) (\TEDIT.DELETE TEXTOBJ SEL]) (\TEDIT.WORDDELETE.FORWARD - [LAMBDA (TEXTOBJ SEL) (* ; "Edited 20-Mar-2024 10:54 by rmk") + [LAMBDA (TSTREAM SEL) (* ; "Edited 29-Apr-2024 10:59 by rmk") + (* ; "Edited 20-Mar-2024 10:54 by rmk") (* ; "Edited 25-Dec-2023 00:20 by rmk") (* ; "Edited 23-May-2023 16:37 by rmk") (* ; "Edited 22-May-2023 10:52 by rmk") @@ -1667,25 +1713,26 @@ (* ;; "This deletes all characters from the character just after the caret to the end of the following word, skipping over separators to reach the target word.") - (TEXTOBJ! TEXTOBJ) - (CL:UNLESS SEL - (SETQ SEL (FGETTOBJ TEXTOBJ SEL))) - (PROG ((FIRSTNO (TEDIT.GETPOINT SEL)) - LASTNO) + (PROG ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + FIRSTNO LASTNO) (* ;; "LASTNO is the final (i.e., highest-numbered) character to be deleted.") + (CL:UNLESS SEL + (SETQ SEL (FGETTOBJ TEXTOBJ SEL))) + (SETQ FIRSTNO (TEDIT.GETPOINT SEL)) (CL:WHEN (IGREATERP FIRSTNO (FGETTOBJ TEXTOBJ TEXTLEN)) (* ; "Nothing to delete at end of file.") (RETURN)) - (SETQ LASTNO (\TEDIT.WORD.LAST TEXTOBJ FIRSTNO)) + (SETQ LASTNO (\TEDIT.WORD.LAST TSTREAM FIRSTNO)) (\TEDIT.UPDATE.SEL SEL FIRSTNO (ADD1 (IDIFFERENCE LASTNO FIRSTNO))) (\TEDIT.DELETE TEXTOBJ SEL]) ) (DEFINEQ (\TEDIT.PARAPIECES - [LAMBDA (SEL/FIRSTCHAR LASTCHAR TEXTOBJ) (* ; "Edited 3-Mar-2024 13:01 by rmk") + [LAMBDA (SEL/FIRSTCHAR LASTCHAR TEXTOBJ) (* ; "Edited 29-Apr-2024 13:14 by rmk") + (* ; "Edited 3-Mar-2024 13:01 by rmk") (* ; "Edited 11-Dec-2023 23:03 by rmk") (* ;; "Produces SELPIECES that starts at the first piece of the paragraph containing FIRSTCHAR and runs to the last piece of the paragraph containing LASTCHAR. Since paragraphs are split anyway, this does not require further splitting.") @@ -1693,7 +1740,7 @@ (LET (FIRSTCHAR FIRST LAST START-OF-PIECE) (DECLARE (SPECVARS START-OF-PIECE)) (if (type? SELECTION SEL/FIRSTCHAR) - then (SETQ TEXTOBJ (FGETSEL SEL/FIRSTCHAR SELTEXTOBJ)) + then (SETQ TEXTOBJ (TEXTOBJ SEL/FIRSTCHAR)) (SETQ FIRSTCHAR (FGETSEL SEL/FIRSTCHAR CH#)) [SETQ LASTCHAR (CL:IF (EQ 0 (FGETSEL SEL/FIRSTCHAR DCH)) FIRSTCHAR @@ -1793,7 +1840,8 @@ (DEFINEQ (\TEDIT.WORD.FIRST - [LAMBDA (TEXTOBJ CHNO WORDBOUNDTABLE) (* ; "Edited 20-Mar-2024 10:54 by rmk") + [LAMBDA (TSTREAM CHNO WORDBOUNDTABLE) (* ; "Edited 29-Apr-2024 10:56 by rmk") + (* ; "Edited 20-Mar-2024 10:54 by rmk") (* ; "Edited 17-Mar-2024 12:05 by rmk") (* ; "Edited 25-Dec-2023 18:53 by rmk") (* ; "Edited 23-May-2023 16:37 by rmk") @@ -1808,68 +1856,66 @@ (* ;; "Punctuation is tricky: It stops whitespace and text, and its immediate predecessor doesn't matter.") - (TEXTOBJ! TEXTOBJ) - (PROG ((TSTREAM (FGETTOBJ TEXTOBJ STREAMHINT)) - (READSA (fetch READSA of (OR WORDBOUNDTABLE (FGETTOBJ TEXTOBJ TXTWTBL) - TEDIT.WORDBOUND.READTABLE))) - CH) - (CL:WHEN (ILEQ CHNO 1) (* ; "Beginning of document") - (RETURN 1)) - (SETQ CHNO (IMIN CHNO (FGETTOBJ TEXTOBJ TEXTLEN))) - (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 CHNO)) (* ; "Fileptrs are one back") - (SETQ CH (BIN TSTREAM)) (* ; "The char at CHNO") - (CL:WHEN (AND (CHARCODEP CH) - (EQ PUNCT.TTC (\SYNCODE READSA CH))) + (CL:UNLESS (ILEQ CHNO 1) + [PROG ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + READSA CH) + (SETQ READSA (fetch READSA of (OR WORDBOUNDTABLE (FGETTOBJ TEXTOBJ TXTWTBL) + TEDIT.WORDBOUND.READTABLE))) + (SETQ CHNO (IMIN CHNO (FGETTOBJ TEXTOBJ TEXTLEN))) + (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 CHNO)) (* ; "Fileptrs are one back") + (SETQ CH (BIN TSTREAM)) (* ; "The char at CHNO") + (CL:WHEN (AND (CHARCODEP CH) + (EQ PUNCT.TTC (\SYNCODE READSA CH))) - (* ;; "Started on a punct, return") + (* ;; "Started on a punct, return") - (RETURN CHNO)) + (RETURN CHNO)) - (* ;; "Skip over any preceding whitespace characters. We don't know when the stream's piece might have changed, so test at each iteration.") + (* ;; "Skip over any preceding whitespace characters. We don't know when the stream's piece might have changed, so test at each iteration.") - (for old CHNO from CHNO to 1 by -1 while (AND (CHARCODEP CH) - (EQ WHITESPACE.TTC (\SYNCODE READSA CH))) - until (fetch CLPROTECTED of (PLOOKS (fetch (TEXTSTREAM PIECE) of TSTREAM))) - do (SETQ CH (\BACKBIN TSTREAM))) + (for old CHNO from CHNO to 1 by -1 while (AND (CHARCODEP CH) + (EQ WHITESPACE.TTC (\SYNCODE READSA CH))) + until (fetch CLPROTECTED of (PLOOKS (fetch (TEXTSTREAM PIECE) of TSTREAM))) + do (SETQ CH (\BACKBIN TSTREAM))) - (* ;; "") + (* ;; "") - (* ;; "CH is either TEXT, PUNCT, or image object.") + (* ;; "CH is either TEXT, PUNCT, or image object.") - (CL:WHEN (AND (CHARCODEP CH) - (EQ PUNCT.TTC (\SYNCODE READSA CH))) + (CL:WHEN (AND (CHARCODEP CH) + (EQ PUNCT.TTC (\SYNCODE READSA CH))) - (* ;; "Punct before whitespace, look no further, punct is our guy.") + (* ;; "Punct before whitespace, look no further, punct is our guy.") - (RETURN (ADD1 CHNO))) + (RETURN (ADD1 CHNO))) - (* ;; "") + (* ;; "") - (* ;; "We've reached the first unprotected non-separator character, and CHNO is the number of the character BEFORE that one. Continue backwards through the text characters until reaching the first preceding non-text.") + (* ;; "We've reached the first unprotected non-separator character, and CHNO is the number of the character BEFORE that one. Continue backwards through the text characters until reaching the first preceding non-text.") - (for old CHNO from CHNO to 1 by -1 until [OR (CL:IF (CHARCODEP CH) - (NEQ TEXT.TTC (\SYNCODE READSA CH)) - T) - (fetch CLPROTECTED - of (PLOOKS (fetch (TEXTSTREAM PIECE) - of TSTREAM] - do (SETQ CH (\BACKBIN TSTREAM))) - (CL:WHEN (AND (CHARCODEP CH) - (EQ PUNCT.TTC (\SYNCODE READSA CH))) + (for old CHNO from CHNO to 1 by -1 + until [OR (CL:IF (CHARCODEP CH) + (NEQ TEXT.TTC (\SYNCODE READSA CH)) + T) + (fetch CLPROTECTED of (PLOOKS (fetch (TEXTSTREAM PIECE) of TSTREAM] + do (SETQ CH (\BACKBIN TSTREAM))) + (CL:WHEN (AND (CHARCODEP CH) + (EQ PUNCT.TTC (\SYNCODE READSA CH))) - (* ;; - "We ended on a punct before some text, CHNO is one before the punct, get back to text") + (* ;; + "We ended on a punct before some text, CHNO is one before the punct, get back to text") - (RETURN (IPLUS CHNO 2))) + (RETURN (IPLUS CHNO 2))) - (* ;; "We've now reached the first non-text character before the word, and CHNO is the character number of the character BEFORE it, or 0 if you hit the front of the document. We add 1 for that, plus 1 to convert fileptr to charno.") + (* ;; "We've now reached the first non-text character before the word, and CHNO is the character number of the character BEFORE it, or 0 if you hit the front of the document. We add 1 for that, plus 1 to convert fileptr to charno.") - (RETURN (IPLUS CHNO (CL:IF (EQ CHNO 0) - 1 - 2)]) + (RETURN (IPLUS CHNO (CL:IF (EQ CHNO 0) + 1 + 2)])]) (\TEDIT.WORD.LAST - [LAMBDA (TEXTOBJ CHNO WORDBOUNDTABLE) (* ; "Edited 20-Mar-2024 10:54 by rmk") + [LAMBDA (TSTREAM CHNO WORDBOUNDTABLE) (* ; "Edited 29-Apr-2024 10:57 by rmk") + (* ; "Edited 20-Mar-2024 10:54 by rmk") (* ; "Edited 17-Mar-2024 12:05 by rmk") (* ; "Edited 25-Dec-2023 18:38 by rmk") (* ; "Edited 23-May-2023 16:37 by rmk") @@ -1885,62 +1931,61 @@ (* ;;  "Punctuation is tricky: It stops whitespace and text, and its immediate successor doesn't matter.") - (TEXTOBJ! TEXTOBJ) - (PROG ((TSTREAM (FGETTOBJ TEXTOBJ STREAMHINT)) - (READSA (fetch READSA of (OR WORDBOUNDTABLE (FGETTOBJ TEXTOBJ TXTWTBL) - TEDIT.WORDBOUND.READTABLE))) - (TEXTLEN (FGETTOBJ TEXTOBJ TEXTLEN)) - CH) - (CL:WHEN (IGEQ CHNO TEXTLEN) - (RETURN TEXTLEN)) - (SETQ CHNO (IMAX CHNO 1)) - (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 CHNO)) (* ; "Fileptrs are one back") - (SETQ CH (BIN TSTREAM)) (* ; "The char at CHNO") - (CL:WHEN (AND (CHARCODEP CH) - (EQ PUNCT.TTC (\SYNCODE READSA CH))) + (PROG* ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + (READSA (fetch READSA of (OR WORDBOUNDTABLE (FGETTOBJ TEXTOBJ TXTWTBL) + TEDIT.WORDBOUND.READTABLE))) + (TEXTLEN (FGETTOBJ TEXTOBJ TEXTLEN)) + CH) + (CL:WHEN (IGEQ CHNO TEXTLEN) + (RETURN TEXTLEN)) + (SETQ CHNO (IMAX CHNO 1)) + (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 CHNO)) (* ; "Fileptrs are one back") + (SETQ CH (BIN TSTREAM)) (* ; "The char at CHNO") + (CL:WHEN (AND (CHARCODEP CH) + (EQ PUNCT.TTC (\SYNCODE READSA CH))) - (* ;; "Started on a punct, return") + (* ;; "Started on a punct, return") - (RETURN CHNO)) + (RETURN CHNO)) (* ;; "Skip over any following separator characters. Objects are consider to be text characters--don't skip over them. We don't know when the stream's piece might have changed, so test at each iteration.") - (for old CHNO from CHNO to (SUB1 TEXTLEN) while (AND (CHARCODEP CH) - (EQ WHITESPACE.TTC (\SYNCODE READSA CH - ))) - until (fetch CLPROTECTED of (PLOOKS (fetch (TEXTSTREAM PIECE) of TSTREAM))) - do (SETQ CH (BIN TSTREAM))) + (for old CHNO from CHNO to (SUB1 TEXTLEN) while (AND (CHARCODEP CH) + (EQ WHITESPACE.TTC (\SYNCODE READSA + CH))) + until (fetch CLPROTECTED of (PLOOKS (fetch (TEXTSTREAM PIECE) of TSTREAM))) + do (SETQ CH (BIN TSTREAM))) (* ;; "CH is either TEXT, PUNCT, or image object.") - (CL:WHEN (AND (CHARCODEP CH) - (EQ PUNCT.TTC (\SYNCODE READSA CH))) + (CL:WHEN (AND (CHARCODEP CH) + (EQ PUNCT.TTC (\SYNCODE READSA CH))) - (* ;; "Punct after whitespace, look no further, punct is our guy.") + (* ;; "Punct after whitespace, look no further, punct is our guy.") - (RETURN CHNO)) + (RETURN CHNO)) (* ;; "We reached the last unprotected non-separator character, and CHNO is the number of the character AFTER that one. Continue forwards through the text characters until reaching the first following separator.") - (for old CHNO from CHNO to (SUB1 TEXTLEN) - until [OR (CL:IF (CHARCODEP CH) - (NEQ TEXT.TTC (\SYNCODE READSA CH)) - T) - (fetch CLPROTECTED of (PLOOKS (fetch (TEXTSTREAM PIECE) of TSTREAM] - do (SETQ CH (BIN TSTREAM))) - (CL:WHEN (AND (CHARCODEP CH) - (EQ PUNCT.TTC (\SYNCODE READSA CH))) + (for old CHNO from CHNO to (SUB1 TEXTLEN) + until [OR (CL:IF (CHARCODEP CH) + (NEQ TEXT.TTC (\SYNCODE READSA CH)) + T) + (fetch CLPROTECTED of (PLOOKS (fetch (TEXTSTREAM PIECE) of TSTREAM] + do (SETQ CH (BIN TSTREAM))) + (CL:WHEN (AND (CHARCODEP CH) + (EQ PUNCT.TTC (\SYNCODE READSA CH))) - (* ;; - "We ended on a punct after some text, CHNO is one after the punct, get back to text") + (* ;; + "We ended on a punct after some text, CHNO is one after the punct, get back to text") - (RETURN (SUB1 CHNO))) + (RETURN (SUB1 CHNO))) (* ;; "We've now reached the first separator character after the word, and CHNO is the character number of the character after it, or TEXTLEN if we ran off the end..") - (RETURN (CL:IF (IGEQ CHNO TEXTLEN) - TEXTLEN - (SUB1 CHNO))]) + (RETURN (CL:IF (IGEQ CHNO TEXTLEN) + TEXTLEN + (SUB1 CHNO))]) ) @@ -2010,13 +2055,16 @@ (\TEDIT.SHOWSEL SEL T)))]) (TEDIT.EDIT.OBJECT - [LAMBDA (STREAM OBJ) (* ; "Edited 15-Mar-2024 14:23 by rmk") + [LAMBDA (TSTREAM OBJ) (* ; "Edited 7-May-2024 08:18 by rmk") + (* ; "Edited 29-Apr-2024 12:41 by rmk") + (* ; "Edited 15-Mar-2024 14:23 by rmk") (* ; "Edited 2-Dec-2023 09:57 by rmk") (* ; "Edited 19-May-2023 21:35 by rmk") (* ; "Edited 27-Apr-2023 00:14 by rmk") (* ; "Edited 21-Oct-2022 18:37 by rmk") (* ; "Edited 29-May-91 18:23 by jds") - (LET ((TEXTOBJ (TEXTOBJ STREAM)) + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (LET ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) SEL CH# SELOBJ EDITFN) [COND [(AND OBJ (IMAGEOBJP OBJ)) @@ -2025,23 +2073,20 @@ (CH# (SETQ SEL (FGETTOBJ TEXTOBJ SCRATCHSEL)) (\TEDIT.UPDATE.SEL SEL CH# 1) (SETSEL SEL SELOBJ OBJ) - (SETSEL SEL SELTEXTOBJ TEXTOBJ) + (SETSEL SEL SELTEXTSTREAM TEXTOBJ) (\TEDIT.FIXSEL SEL TEXTOBJ)) (T (TEDIT.PROMPTPRINT TEXTOBJ "Can't find specified object." T] (T (SETQ SEL (FGETTOBJ TEXTOBJ SEL)) (SETQ OBJ (GETSEL SEL SELOBJ] (COND - [OBJ (* ; + (CH# (* ;  "OK There's an object selected. Edit it.") (SETQ EDITFN (IMAGEOBJPROP OBJ 'EDITFN)) - (COND - ((AND EDITFN (APPLY* EDITFN OBJ)) (* ; + (CL:UNLESS (AND EDITFN (APPLY* EDITFN OBJ)) (* ;  "If the editfn makes a change, update the screen.") - (for LINE inside (GETSEL SEL L1) do (FSETLD LINE LDIRTY T)) - (FSETTOBJ TEXTOBJ TXTNEEDSUPDATE T) - (\TEDIT.UPDATE.SCREEN TEXTOBJ] - (T (* ; "No object selected.") - (TEDIT.PROMPTPRINT TEXTOBJ "Please select an editable object first." T]) + (for LINE in (GETSEL SEL L1) do (FSETLD LINE LDIRTY T)) + (\TEDIT.UPDATE.LINES TEXTOBJ 'APPEARANCE CH# 1))) + (T (TEDIT.PROMPTPRINT TEXTOBJ "Please select an editable object" T T]) (TEDIT.FIND.OBJECT [LAMBDA (TEXTOBJ OBJ) (* ; "Edited 16-Mar-2024 10:03 by rmk") @@ -2051,7 +2096,8 @@ when (EQ OBJ (PCONTENTS PC)) do (RETURN CH#]) (TEDIT.OBJECT.CHANGED - [LAMBDA (TSTREAM OBJECT) (* ; "Edited 17-Mar-2024 00:25 by rmk") + [LAMBDA (TSTREAM OBJECT) (* ; "Edited 7-May-2024 08:18 by rmk") + (* ; "Edited 17-Mar-2024 00:25 by rmk") (* ; "Edited 21-Oct-2023 08:59 by rmk") (* ; "Edited 18-Apr-2023 23:57 by rmk") (* ; "Edited 10-Apr-2023 00:02 by rmk") @@ -2066,28 +2112,29 @@ suchthat (EQ OBJECT (PCONTENTS PC](* ;  "Find the piece containing this object") (CL:UNLESS OBJPIECE (HELP "Changed OBJECT not found!?")) - (SETQ CHANGEDCH# (\TEDIT.PCTOCH OBJPIECE TEXTOBJ)) (* ; "Get the CH# of the changed object") - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ CHANGEDCH# CHANGEDCH#) - (* ; "Mark affected lines") - (replace (TEXTOBJ \DIRTY) of TEXTOBJ with T) (* ; "And mark the document dirty.") + (SETQ CHANGEDCH# (\TEDIT.PCTOCH OBJPIECE TEXTOBJ)) (* ; "Mark affected lines") + (FSETTOBJ TEXTOBJ \DIRTY T) (* ; "And mark the document dirty.") (\TEDIT.SHOWSEL (fetch (TEXTOBJ SEL) of TEXTOBJ) - NIL) - (\TEDIT.UPDATE.SCREEN TEXTOBJ) + NIL NIL TEXTOBJ) + (\TEDIT.UPDATE.LINES TEXTOBJ 'APPEARANCE CHANGEDCH# 1) (\TEDIT.FIXSEL (fetch (TEXTOBJ SEL) of TEXTOBJ) TEXTOBJ) (\TEDIT.SHOWSEL (fetch (TEXTOBJ SEL) of TEXTOBJ) - T]) + T NIL TEXTOBJ]) (TEDIT.MAP.OBJECTS - [LAMBDA (TEXTOBJ FN FNARG COLLECT?) (* ; "Edited 16-Mar-2024 10:03 by rmk") + [LAMBDA (TSTREAM FN FNARG COLLECT?) (* ; "Edited 23-Apr-2024 09:15 by rmk") + (* ; "Edited 16-Mar-2024 10:03 by rmk") (* ; "Edited 4-Mar-2024 16:12 by rmk") (* ; "Edited 6-Nov-2022 12:15 by rmk") - (* ;; "Apply FN to each of the imageobjects in TEXTOBJ. If COLLECT? value is the list of (CH# OBJ FNVAL) pairs that satisfy the predicate") + (* ;; "Apply FN to each of the imageobjects in TSTREAM. If COLLECT? value is the list of (CH# OBJ FNVAL) pairs that satisfy the predicate") - (* ;; "FN is a function of 3 args ( CH#-of-OBJ OBJ FNARG)") + (* ;; "FN is a function of 3 args ( CH#-of-OBJ OBJ FNARG). FN defaults to TRUE") - (for CH# OBJ FNVAL from 1 by (PLEN PC) as PC inpieces (\TEDIT.FIRSTPIECE (TEXTOBJ TEXTOBJ)) + (CL:UNLESS FN + (SETQ FN (FUNCTION TRUE))) + (for CH# OBJ FNVAL from 1 by (PLEN PC) as PC inpieces (\TEDIT.FIRSTPIECE (TEXTOBJ TSTREAM)) when (AND (EQ OBJECT.PTYPE (PTYPE PC)) (type? IMAGEOBJ (SETQ OBJ (PCONTENTS PC))) (SETQ FNVAL (APPLY* FN CH# OBJ FNARG))) @@ -2114,7 +2161,7 @@ (* ; "TEDIT Support information") -(RPAQQ TEDITSYSTEMDATE " 1-Apr-2024 09:46:05") +(RPAQQ TEDITSYSTEMDATE " 8-May-2024 09:28:23") @@ -2124,25 +2171,25 @@ (ADDTOVAR PRINTFILETYPES (TEDIT (TEST \TEDIT.GET.TRAILER) (EXTENSION (TEDIT)))) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4237 6179 (MAKE-TEDIT-EXPORTS.ALL 4247 . 4793) (UPDATE-TEDIT 4795 . 5408) (EDIT-TEDIT -5410 . 6177)) (7825 37823 (TEDIT 7835 . 10360) (TEXTSTREAM 10362 . 12033) (TEXTSTREAMP 12035 . 12419) -(TEDITMENUP 12421 . 13187) (COERCETEXTSTREAM 13189 . 17400) (TEDIT.CONCAT 17402 . 20581) (TEDITSTRING -20583 . 21436) (TEDIT-SEE 21438 . 21997) (TEDIT.COPY 21999 . 24295) (TEDIT.DELETE 24297 . 25270) ( -TEDIT.INSERT 25272 . 27342) (TEDIT.KILL 27344 . 28046) (TEDIT.QUIT 28048 . 29616) (TEDIT.MOVE 29618 . -35122) (TEDIT.STRINGWIDTH 35124 . 35795) (TEDIT.CHARWIDTH 35797 . 37821)) (37824 39765 (TEXTOBJ 37834 - . 38299) (COERCETEXTOBJ 38301 . 39763)) (39766 48320 (\TEDIT.CONCAT.PAGEFRAMES 39776 . 44910) ( -\TEDIT.GET.PAGE.HEADINGS 44912 . 45941) (\TEDIT.CONCAT.INSTALL.HEADINGS 45943 . 47274) ( -\TEDIT.DO.BLUEPENDINGDELETE 47276 . 48318)) (48321 50476 (\TEDIT.MOVE.MSG 48331 . 49984) ( -\TEDIT.READONLY 49986 . 50474)) (50477 58947 (TEDIT.NCHARS 50487 . 50860) (TEDIT.RPLCHARCODE 50862 . -54330) (TEDIT.NTHCHARCODE 54332 . 56109) (\TEDIT.PIECE.NTHCHARCODE 56111 . 58945)) (58993 99952 ( -\TEDIT1 59003 . 60971) (\TEDIT.INSERT 60973 . 67187) (\TEDIT.REPLACE.SELPIECES 67189 . 68988) ( -\TEDIT.INSERT.SELPIECES 68990 . 71412) (\TEDIT.OBJECT.SHOWSEL 71414 . 75174) (\TEDIT.RESTARTFN 75176 - . 77463) (\TEDIT.CHARDELETE 77465 . 79578) (\TEDIT.CHARDELETE.FORWARD 79580 . 81207) ( -\TEDIT.COPYPIECE 81209 . 85947) (\TEDIT.APPLY.OBJFN 85949 . 89034) (\TEDIT.DELETE 89036 . 92293) ( -\TEDIT.DIFFUSE.PARALOOKS 92295 . 94566) (\TEDIT.QUIT 94568 . 97205) (\TEDIT.WORDDELETE 97207 . 98582) -(\TEDIT.WORDDELETE.FORWARD 98584 . 99950)) (99953 107185 (\TEDIT.PARAPIECES 99963 . 101684) ( -\TEDIT.PARA.FIRST 101686 . 104452) (\TEDIT.PARA.LAST 104454 . 107183)) (107186 115696 ( -\TEDIT.WORD.FIRST 107196 . 111551) (\TEDIT.WORD.LAST 111553 . 115694)) (115737 124985 ( -TEDIT.INSERT.OBJECT 115747 . 119177) (TEDIT.EDIT.OBJECT 119179 . 121334) (TEDIT.FIND.OBJECT 121336 . -121858) (TEDIT.OBJECT.CHANGED 121860 . 123926) (TEDIT.MAP.OBJECTS 123928 . 124983))))) + (FILEMAP (NIL (4273 6215 (MAKE-TEDIT-EXPORTS.ALL 4283 . 4829) (UPDATE-TEDIT 4831 . 5444) (EDIT-TEDIT +5446 . 6213)) (7861 38567 (TEDIT 7871 . 10396) (TEXTSTREAM 10398 . 12318) (TEXTSTREAMP 12320 . 12704) +(TEDITMENUP 12706 . 13472) (COERCETEXTSTREAM 13474 . 17685) (TEDIT.CONCAT 17687 . 20866) (TEDITSTRING +20868 . 21721) (TEDIT-SEE 21723 . 22282) (TEDIT.COPY 22284 . 24891) (TEDIT.DELETE 24893 . 25866) ( +TEDIT.INSERT 25868 . 27938) (TEDIT.KILL 27940 . 28642) (TEDIT.QUIT 28644 . 30212) (TEDIT.MOVE 30214 . +35866) (TEDIT.STRINGWIDTH 35868 . 36539) (TEDIT.CHARWIDTH 36541 . 38565)) (38568 40509 (TEXTOBJ 38578 + . 39043) (COERCETEXTOBJ 39045 . 40507)) (40510 49064 (\TEDIT.CONCAT.PAGEFRAMES 40520 . 45654) ( +\TEDIT.GET.PAGE.HEADINGS 45656 . 46685) (\TEDIT.CONCAT.INSTALL.HEADINGS 46687 . 48018) ( +\TEDIT.DO.BLUEPENDINGDELETE 48020 . 49062)) (49065 51350 (\TEDIT.MOVE.MSG 49075 . 50858) ( +\TEDIT.READONLY 50860 . 51348)) (51351 61448 (TEDIT.NCHARS 51361 . 51734) (TEDIT.RPLCHARCODE 51736 . +55873) (TEDIT.NTHCHARCODE 55875 . 57764) (\TEDIT.PIECE.NTHCHARCODE 57766 . 61446)) (61494 103883 ( +\TEDIT1 61504 . 63581) (\TEDIT.INSERT 63583 . 69219) (\TEDIT.REPLACE.SELPIECES 69221 . 71020) ( +\TEDIT.INSERT.SELPIECES 71022 . 73444) (\TEDIT.OBJECT.SHOWSEL 73446 . 77206) (\TEDIT.RESTARTFN 77208 + . 79604) (\TEDIT.CHARDELETE 79606 . 82442) (\TEDIT.CHARDELETE.FORWARD 82444 . 84603) ( +\TEDIT.COPYPIECE 84605 . 89343) (\TEDIT.APPLY.OBJFN 89345 . 92430) (\TEDIT.DELETE 92432 . 95959) ( +\TEDIT.DIFFUSE.PARALOOKS 95961 . 98232) (\TEDIT.QUIT 98234 . 100939) (\TEDIT.WORDDELETE 100941 . +102319) (\TEDIT.WORDDELETE.FORWARD 102321 . 103881)) (103884 111218 (\TEDIT.PARAPIECES 103894 . 105717 +) (\TEDIT.PARA.FIRST 105719 . 108485) (\TEDIT.PARA.LAST 108487 . 111216)) (111219 119859 ( +\TEDIT.WORD.FIRST 111229 . 115560) (\TEDIT.WORD.LAST 115562 . 119857)) (119900 129441 ( +TEDIT.INSERT.OBJECT 119910 . 123340) (TEDIT.EDIT.OBJECT 123342 . 125641) (TEDIT.FIND.OBJECT 125643 . +126165) (TEDIT.OBJECT.CHANGED 126167 . 128202) (TEDIT.MAP.OBJECTS 128204 . 129439))))) STOP diff --git a/library/tedit/TEDIT-CHAT b/library/tedit/TEDIT-CHAT index 2a1637fa7..c7aa7de26 100644 --- a/library/tedit/TEDIT-CHAT +++ b/library/tedit/TEDIT-CHAT @@ -1,13 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "23-Dec-2023 09:24:21" {WMEDLEY}TEDIT>TEDIT-CHAT.;14 12223 +(FILECREATED " 2-May-2024 18:09:26" {WMEDLEY}tedit>TEDIT-CHAT.;15 12254 :EDIT-BY rmk - :CHANGES-TO (VARS TEDIT-CHATCOMS) - (FNS TEDITSTREAM.INIT TEDIT.DISPLAYTEXT TEDITCHAT.CHARFN) + :CHANGES-TO (FNS TEDITCHAT.CHARFN) - :PREVIOUS-DATE " 6-Apr-2023 21:40:07" {WMEDLEY}tedit>TEDIT-CHAT.;9) + :PREVIOUS-DATE "23-Dec-2023 09:24:21" {WMEDLEY}tedit>TEDIT-CHAT.;14) (PRETTYCOMPRINT TEDIT-CHATCOMS) @@ -71,16 +70,17 @@ (replace (CHAT.STATE HELD) of STATE with NIL]) (TEDITCHAT.CHARFN - [LAMBDA (CH CHAT.STATE) (* ; "Edited 22-Dec-2023 23:57 by rmk") + [LAMBDA (CH CHAT.STATE) (* ; "Edited 2-May-2024 18:09 by rmk") + (* ; "Edited 22-Dec-2023 23:57 by rmk") (* ; "Edited 18-Mar-2023 20:08 by rmk") (* ; "Edited 12-Jun-90 18:00 by mitani") - (LET [(TEXTOBJ (TEXTOBJ (fetch (CHAT.STATE TEXTSTREAM) of CHAT.STATE] - (\CARET.DOWN (FGETTOBJ TEXTOBJ DS)) - (SELCHARQ CH - (BS (\TEDIT.CHARDELETE TEXTOBJ (FGETTOBJ TEXTOBJ SEL))) - (LF NIL) - (BOUT (FGETTOBJ TEXTOBJ STREAMHINT) - CH]) + (LET* ((TSTREAM (fetch (CHAT.STATE TEXTSTREAM) of CHAT.STATE)) + (TEXTOBJ (TEXTOBJ TSTREAM))) + (\CARET.DOWN (FGETTOBJ TEXTOBJ DS)) + (SELCHARQ CH + (BS (\TEDIT.CHARDELETE TEXTOBJ (FGETTOBJ TEXTOBJ SEL))) + (LF NIL) + (BOUT TSTREAM CH]) ) @@ -212,6 +212,6 @@ CHATDECLS) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (960 4404 (TEDITSTREAM.INIT 970 . 1897) (TEDITCHAT.MENUFN 1899 . 3735) (TEDITCHAT.CHARFN - 3737 . 4402)) (4451 11335 (TEDIT.DISPLAYTEXT 4461 . 11333))))) + (FILEMAP (NIL (886 4435 (TEDITSTREAM.INIT 896 . 1823) (TEDITCHAT.MENUFN 1825 . 3661) (TEDITCHAT.CHARFN + 3663 . 4433)) (4482 11366 (TEDIT.DISPLAYTEXT 4492 . 11364))))) STOP diff --git a/library/tedit/TEDIT-CHAT.LCOM b/library/tedit/TEDIT-CHAT.LCOM index ac40324226dcff04bb3775473b4d31a0120828db..f4b92ef0b0634639b13d428c3193d9e46d71d079 100644 GIT binary patch delta 429 zcmeyMwNPt9xQK$0u5V(cu91O}iGrbpm4T&|k=ev-mB}VdLiL8GnhIP>C@M^>j4Z57 z%#{?9ic*vFa|<$aQd1OCD+-E=Rjm|4TwOdvoIM;v^ngT=o1a2vo`RBFsE>~VvKe}M zdP)i@i6uad*bFx{QqttoaP#zWm30nsbp)EJfa(OOBPS~`sc{&ZDi|6WnVL+Vz$l~Q z<`<0N1Wg62fFRc}Pyf(hT^FEXlYJN^7`Y}ZF{v;anrwDwddggH2-Fl2;_u|85TIb7 z5E2{$wAEL^Q^8OH?3LgUpf(`a0Lax;V6b6gU|@1&V*rAaJc5i29-JViAS0vaNeM91 zAti_7!>s+DDJP}4KvDuZTpuQ82zWR^cnlh*<_b>!p&<$;#tJb&-^qJIg3HC##}#Oi ak-0*Qvty8Jh@OjoxSxWd+2%cLTlfIp*k*Okrp~G&<^dchr3Xa{p z`5E-?xgW%fr+oyoR&dC2Nb=9)_e$Olr-v`KEtD0_Zd*h$%7UE3NX1AQ-|QQdm^M9& zdeN|SDxD~51`+~7f9Dkqs|wZ>0b0Xu`?i1A3%VU>UpEI=-TMPPX(Ur4cGoMEAOez1 z+b=u%B_(wVy#YfjR2&E9Atgx?pwoO{IE$z>A(KcKY=;;g(HSN?v_QWAPqiX39dh}+ zcN+9s!{+cYw(`#qCj m$h#E^*&Hkaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-COMMAND.;87 53604 +(FILECREATED " 7-May-2024 10:46:39" {WMEDLEY}tedit>TEDIT-COMMAND.;94 51914 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.COPYTOCLIPBOARD \TEDIT.WRITE.SEL) - (MACROS \TEDIT.MOUSESTATE) + :CHANGES-TO (FNS \TEDIT.COMMAND.LOOP) - :PREVIOUS-DATE "21-Apr-2024 10:17:38" -{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-COMMAND.;80) + :PREVIOUS-DATE "29-Apr-2024 11:00:05" {WMEDLEY}tedit>TEDIT-COMMAND.;93) (PRETTYCOMPRINT TEDIT-COMMANDCOMS) @@ -257,7 +254,10 @@ TEXTOBJ]) (\TEDIT.COMMAND.LOOP - [LAMBDA (STREAM RTBL) (* ; "Edited 21-Apr-2024 09:08 by rmk") + [LAMBDA (TSTREAM RTBL) (* ; "Edited 7-May-2024 10:42 by rmk") + (* ; "Edited 29-Apr-2024 10:58 by rmk") + (* ; "Edited 24-Apr-2024 10:47 by rmk") + (* ; "Edited 21-Apr-2024 09:08 by rmk") (* ; "Edited 2-Apr-2024 15:35 by rmk") (* ; "Edited 20-Mar-2024 10:59 by rmk") (* ; "Edited 15-Mar-2024 14:23 by rmk") @@ -272,175 +272,154 @@ (* ;; "Main command loop for the TEDIT editor. Includes keyboard polling and command dispatch") - (PROG ((TEXTOBJ (CL:IF (type? STREAM STREAM) - (fetch (TEXTSTREAM TEXTOBJ) of STREAM) - STREAM)) - SEL PANES) - (TEXTOBJ! TEXTOBJ) - (SETQ SEL (TEXTSEL TEXTOBJ)) - (SETQ PANES (FGETTOBJ TEXTOBJ \WINDOW)) - (SETQ RTBL (OR RTBL (FGETTOBJ TEXTOBJ TXTRTBL) - TEDIT.READTABLE)) (* ; + (LET + [(TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM] + (SETQ RTBL (OR RTBL (FGETTOBJ TEXTOBJ TXTRTBL) + TEDIT.READTABLE)) (* ;  "Used to derive command characters from type-in") - (for P inpanes TEXTOBJ do (WINDOWPROP P 'PROCESS (THIS.PROCESS))) + (for P inpanes TEXTOBJ do (WINDOWPROP P 'PROCESS (THIS.PROCESS))) (* ; "Add the pane to this process") - (until (TTY.PROCESSP) do (* ; + (until (TTY.PROCESSP) do (* ;  "Wait until we really have the TTY before proceeding.") - (DISMISS 250)) - (RESETLST - (RESETSAVE (\TEDIT.COMMAND.RESET.SETUP (LIST TEXTOBJ PANES) - T)) - (LET - (CH FN TCH (READSA (fetch READSA of %#CURRENTRDTBL#)) - (TERMSA (OR (FGETTOBJ TEXTOBJ TXTTERMSA) - \PRIMTERMSA)) - (TEDITSA (fetch READSA of RTBL)) - (TEDITFNHASH (fetch READMACRODEFS of RTBL)) - (LOOPFN (GETTEXTPROP TEXTOBJ 'LOOPFN)) - (CHARFN (GETTEXTPROP TEXTOBJ 'CHARFN)) - SELOPERATION SOURCESEL SELPANE) - (DECLARE (SPECVARS SELOPERATION SOURCESEL SELPANE)) - (* ; - "Set by \TEDIT.BUTTONEVENTFN in MOUSE process") - (until (FGETTOBJ TEXTOBJ EDITFINISHEDFLG) - do - (ERSETQ - (until (FGETTOBJ TEXTOBJ EDITFINISHEDFLG) - do (\WAITFORSYSBUFP 25) (* ; "Await type-in or mouse action") - (until (OR SELOPERATION (NOT (FGETTOBJ TEXTOBJ EDITOPACTIVE))) - do (\TEDIT.FLASHCARET TEXTOBJ) - (BLOCK)) - (CL:UNLESS (FGETTOBJ TEXTOBJ EDITFINISHEDFLG) - (CL:WHEN (FGETTOBJ TEXTOBJ TXTNEEDSUPDATE) - (* ; - "We got here somehow with the window not in sync with the text. Run an update.") - (\TEDIT.SHOWSEL SEL NIL) - (\TEDIT.UPDATE.SCREEN TEXTOBJ) - (\TEDIT.FIXSEL SEL TEXTOBJ) - (\TEDIT.SHOWSEL SEL T)) - (\TEDIT.FLASHCARET TEXTOBJ) (* ; + (DISMISS 250)) + (RESETLST + (RESETSAVE (\TEDIT.COMMAND.RESET.SETUP (LIST TEXTOBJ (FGETTOBJ TEXTOBJ \WINDOW)) + T)) + + (* ;; "SELOPERATION SOURCESEL SELPANE are set by \TEDIT.BUTTONEVENTFN in the MOUSE process") + + (bind (SEL _ (TEXTSEL TEXTOBJ)) + (READSA _ (fetch READSA of %#CURRENTRDTBL#)) + (TERMSA _ (OR (FGETTOBJ TEXTOBJ TXTTERMSA) + \PRIMTERMSA)) + (TEDITSA _ (fetch READSA of RTBL)) + (TEDITFNHASH _ (fetch READMACRODEFS of RTBL)) + (LOOPFN _ (GETTEXTPROP TEXTOBJ 'LOOPFN)) + (CHARFN _ (GETTEXTPROP TEXTOBJ 'CHARFN)) + SELOPERATION SOURCESEL SELPANE declare (SPECVARS SELOPERATION SOURCESEL SELPANE) + until (FGETTOBJ TEXTOBJ EDITFINISHEDFLG) + do + (ERSETQ + (until (FGETTOBJ TEXTOBJ EDITFINISHEDFLG) + do (\WAITFORSYSBUFP 25) (* ; "Await type-in or mouse action") + (until (OR SELOPERATION (NOT (FGETTOBJ TEXTOBJ EDITOPACTIVE))) + do (\TEDIT.FLASHCARET TEXTOBJ) + (BLOCK)) + (CL:UNLESS (FGETTOBJ TEXTOBJ EDITFINISHEDFLG) + (\TEDIT.FLASHCARET TEXTOBJ) (* ;  "Flash the caret periodically (BUT not while we're here only to cleanup and quit.)") - (FSETTOBJ TEXTOBJ EDITOPACTIVE T) - (* ; + (FSETTOBJ TEXTOBJ EDITOPACTIVE T) (* ;  "Before starting to work, note that we're doing something.") - (CL:WHEN LOOPFN - (ERSETQ (APPLY* LOOPFN (FGETTOBJ TEXTOBJ STREAMHINT)))) + (CL:WHEN LOOPFN + (ERSETQ (APPLY* LOOPFN TSTREAM))) - (* ;; "") + (* ;; "") - (* ;; + (* ;;  "Process any pending selections from \TEDIT.BUTTONEVENTFN, here instead of in MOUSE process") - (SELECTQ (PROG1 SELOPERATION (SETQ SELOPERATION NIL)) - (NORMAL (CL:WHEN (FGETSEL SOURCESEL SET) - (SETQ SEL (\TEDIT.COPYSEL SOURCESEL SEL)) + (SELECTQ (PROG1 SELOPERATION (SETQ SELOPERATION NIL)) + (NORMAL (CL:WHEN (FGETSEL SOURCESEL SET) + (SETQ SEL (\TEDIT.COPYSEL SOURCESEL SEL)) (* ; "SOURCESEL is new SEL selection") - (FSETTOBJ TEXTOBJ CARETLOOKS ( - \TEDIT.GET.INSERT.CHARLOOKS - TEXTOBJ SEL)) - (\TEDIT.SHOWSEL SEL T))) - (MOVE (* ; "Move source to SEL") - (TEDIT.MOVE SOURCESEL SEL)) - (COPY (* ; "Copy source to SEL.") - (TEDIT.COPY SOURCESEL SEL)) - (COPYLOOKS (* ; "Copy source-looks to SEL") - (if (EQ 'PARA (GETSEL SOURCESEL SELKIND)) - then (TEDIT.COPY.PARALOOKS TEXTOBJ SOURCESEL SEL) - else (TEDIT.COPY.LOOKS TEXTOBJ SOURCESEL SEL))) - (DELETE (* ; "Delete CTRL selection") - (\TEDIT.DELETE TEXTOBJ SOURCESEL NIL SELPANE)) - NIL) - - (* ;; "") - - (* ;; "Handle user type-in") - - [while (\SYSBUFP) - do (SETQ CH (\GETKEY)) - (CL:WHEN CHARFN (* ; + (FSETTOBJ TEXTOBJ CARETLOOKS (\TEDIT.GET.INSERT.CHARLOOKS + TEXTOBJ SEL)) + (\TEDIT.SHOWSEL SEL T))) + (MOVE (* ; "Move source to SEL") + (TEDIT.MOVE SOURCESEL SEL)) + (COPY (* ; "Copy source to SEL.") + (TEDIT.COPY SOURCESEL SEL)) + (COPYLOOKS (* ; "Copy source-looks to SEL") + (if (EQ 'PARA (GETSEL SOURCESEL SELKIND)) + then (TEDIT.COPY.PARALOOKS TEXTOBJ SOURCESEL SEL) + else (TEDIT.COPY.LOOKS TEXTOBJ SOURCESEL SEL))) + (DELETE (* ; "Delete CTRL selection") + (\TEDIT.DELETE TEXTOBJ SOURCESEL NIL SELPANE)) + NIL) + + (* ;; "") + + (* ;; "Handle user type-in") + + [bind CH TCH FN while (\SYSBUFP) + do (SETQ CH (\GETKEY)) + (CL:WHEN CHARFN (* ;  "Give the OEM user control for each character typed.") - (SETQ TCH (APPLY* CHARFN (FGETTOBJ TEXTOBJ STREAMHINT) - CH)) + (SETQ TCH (APPLY* CHARFN TSTREAM CH)) - (* ;; + (* ;;  "And let him return one of NIL for 'ignore this char' , T for 'leave it be' or a new charcode.") - (OR (EQ TCH T) - (SETQ CH TCH))) - (SELECTC (AND CH (\SYNCODE TEDITSA CH)) - (CHARDELETE.TTC (* ; + (OR (EQ TCH T) + (SETQ CH TCH))) + (SELECTC (AND CH (\SYNCODE TEDITSA CH)) + (CHARDELETE.TTC (* ;  "Backspace handler: Remove the character just before SEL:CH#.") - (\TEDIT.CHARDELETE TEXTOBJ SEL) - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) - (CHARDELETE.FORWARD.TTC - (\TEDIT.CHARDELETE.FORWARD TEXTOBJ SEL) - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) - (WORDDELETE.TTC - (\TEDIT.WORDDELETE TEXTOBJ SEL) - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) - (WORDDELETE.FORWARD.TTC - (\TEDIT.WORDDELETE.FORWARD TEXTOBJ SEL) - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) - (DELETE.TTC (* ; + (\TEDIT.CHARDELETE TEXTOBJ SEL) + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) + (CHARDELETE.FORWARD.TTC + (\TEDIT.CHARDELETE.FORWARD TEXTOBJ SEL) + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) + (WORDDELETE.TTC + (\TEDIT.WORDDELETE TSTREAM SEL) + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) + (WORDDELETE.FORWARD.TTC + (\TEDIT.WORDDELETE.FORWARD TSTREAM SEL) + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) + (DELETE.TTC (* ;  "DEL Key handler: Delete the selected characters") - (\TEDIT.DELETE TEXTOBJ SEL) - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) - (UNDO.TTC (* ; + (\TEDIT.DELETE TEXTOBJ SEL) + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) + (UNDO.TTC (* ;  "He hit the CANCEL key, so go UNDO something") - (TEDIT.UNDO TEXTOBJ) - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) - (REDO.TTC (* ; + (TEDIT.UNDO TEXTOBJ) + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) + (REDO.TTC (* ;  "He hit the REDO key, so go REDO something") - (TEDIT.REDO TEXTOBJ) - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) - (FUNCTIONCALL.TTC (* ; + (TEDIT.REDO TEXTOBJ) + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) + (FUNCTIONCALL.TTC (* ;  "This is a special character -- it calls a function") - (CL:WHEN [SETQ FN (CAR (FETCH MACROFN - OF (GETHASH CH TEDITFNHASH] + (CL:WHEN [SETQ FN (CAR (FETCH MACROFN OF (GETHASH CH + TEDITFNHASH] (* ;  "There IS a command function to be called.") - (APPLY* FN (FGETTOBJ TEXTOBJ STREAMHINT) - TEXTOBJ SEL) + (APPLY* FN TSTREAM TEXTOBJ SEL) (* ; "do it") (* ;  "After a user function (that is not wheelscroll) no more blue-pending-delete") - (* ;; "We shouldn't have to test for special characters here, there should be a more general way of marking them") + (* ;; "We shouldn't have to test for special characters here, there should be a more general way of marking them") - (CL:UNLESS (OR (MEMB CH WHEELSCROLLCHARCODES) - (MEMB CH CLIPBOARDCODES)) + (CL:UNLESS (OR (MEMB CH WHEELSCROLLCHARCODES) + (MEMB CH CLIPBOARDCODES)) (* ;  "The FNs handled the selection. should preserve the highlighting") - (\TEDIT.SHOWSEL SEL NIL) - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ) - (\TEDIT.SHOWSEL SEL T)))) - (NEXT.TTC (* ; + (\TEDIT.SHOWSEL SEL NIL) + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ) + (\TEDIT.SHOWSEL SEL T)))) + (NEXT.TTC (* ;  "Move to the next blank to fill in. For now, blanks are delimited by >>...<<") - (TEDIT.NEXT TEXTOBJ)) - (EXPAND.TTC (* ; "EXPAND AN ABBREVIATION") - (\TEDIT.ABBREV.EXPAND (FGETTOBJ TEXTOBJ STREAMHINT - ))) - (SELECTC (AND TERMSA CH (fetch TERMCLASS - of (\SYNCODE TERMSA CH))) - (CHARDELETE.TC (* ; + (TEDIT.NEXT TEXTOBJ)) + (EXPAND.TTC (* ; "EXPAND AN ABBREVIATION") + (\TEDIT.ABBREV.EXPAND TSTREAM)) + (SELECTC (AND TERMSA CH (fetch TERMCLASS of (\SYNCODE TERMSA CH))) + (CHARDELETE.TC (* ;  "Backspace handler: Remove the character just before SEL:CH#.") - (\TEDIT.CHARDELETE TEXTOBJ SEL) - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL - TEXTOBJ)) - (WORDDELETE.TC (* ; "Back-WORD handler") - (\TEDIT.WORDDELETE TEXTOBJ) - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL - TEXTOBJ)) - (LINEDELETE.TC (* ; + (\TEDIT.CHARDELETE TEXTOBJ SEL) + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) + (WORDDELETE.TC (* ; "Back-WORD handler") + (\TEDIT.WORDDELETE TSTREAM) + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) + (LINEDELETE.TC (* ;  "DEL Key handler: Delete the selected characters") - (\TEDIT.DELETE TEXTOBJ SEL) - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL - TEXTOBJ)) - (CL:WHEN CH (* ; + (\TEDIT.DELETE TEXTOBJ SEL) + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ)) + (CL:WHEN CH (* ;  "Any other key: insert the character.") - (\TEDIT.INSERT CH SEL TEXTOBJ))]) - (FSETTOBJ TEXTOBJ EDITOPACTIVE NIL))) - (FSETTOBJ TEXTOBJ EDITOPACTIVE NIL))))]) + (\TEDIT.INSERT CH SEL TEXTOBJ))]) + (FSETTOBJ TEXTOBJ EDITOPACTIVE NIL))) + (FSETTOBJ TEXTOBJ EDITOPACTIVE NIL)))]) (\TEDIT.COMMAND.RESET.SETUP [LAMBDA (TEXT&WIND STARTING) (* ; "Edited 17-Mar-2024 18:54 by rmk") @@ -974,12 +953,12 @@ (\TEDIT.CLIPBOARD) (DECLARE%: DONTCOPY - (FILEMAP (NIL (8457 30896 (\TEDIT.INTERRUPT.SETUP 8467 . 10114) (\TEDIT.MARKACTIVE 10116 . 10328) ( -\TEDIT.MARKINACTIVE 10330 . 10546) (\TEDIT.COMMAND.LOOP 10548 . 24296) (\TEDIT.COMMAND.RESET.SETUP -24298 . 30894)) (31180 46377 (\TEDIT.READTABLE 31190 . 32847) (\TEDIT.WORDBOUND.READTABLE 32849 . -35442) (TEDIT.GETSYNTAX 35444 . 37883) (TEDIT.SETSYNTAX 37885 . 40363) (TEDIT.GETFUNCTION 40365 . -41725) (TEDIT.SETFUNCTION 41727 . 44166) (TEDIT.WORDGET 44168 . 44429) (TEDIT.WORDSET 44431 . 45128) ( -TEDIT.ATOMBOUND.READTABLE 45130 . 46375)) (46705 47614 (\TEDIT.WHEELSCROLL 46715 . 47612)) (47767 -53347 (\TEDIT.CLIPBOARD 47777 . 49532) (\TEDIT.COPYTOCLIPBOARD 49534 . 50314) ( -\TEDIT.EXTRACTTOCLIPBOARD 50316 . 50511) (\TEDIT.WRITE.SEL 50513 . 53345))))) + (FILEMAP (NIL (8310 29206 (\TEDIT.INTERRUPT.SETUP 8320 . 9967) (\TEDIT.MARKACTIVE 9969 . 10181) ( +\TEDIT.MARKINACTIVE 10183 . 10399) (\TEDIT.COMMAND.LOOP 10401 . 22606) (\TEDIT.COMMAND.RESET.SETUP +22608 . 29204)) (29490 44687 (\TEDIT.READTABLE 29500 . 31157) (\TEDIT.WORDBOUND.READTABLE 31159 . +33752) (TEDIT.GETSYNTAX 33754 . 36193) (TEDIT.SETSYNTAX 36195 . 38673) (TEDIT.GETFUNCTION 38675 . +40035) (TEDIT.SETFUNCTION 40037 . 42476) (TEDIT.WORDGET 42478 . 42739) (TEDIT.WORDSET 42741 . 43438) ( +TEDIT.ATOMBOUND.READTABLE 43440 . 44685)) (45015 45924 (\TEDIT.WHEELSCROLL 45025 . 45922)) (46077 +51657 (\TEDIT.CLIPBOARD 46087 . 47842) (\TEDIT.COPYTOCLIPBOARD 47844 . 48624) ( +\TEDIT.EXTRACTTOCLIPBOARD 48626 . 48821) (\TEDIT.WRITE.SEL 48823 . 51655))))) STOP diff --git a/library/tedit/TEDIT-COMMAND.LCOM b/library/tedit/TEDIT-COMMAND.LCOM index 7006b95a4bf8657cf04ad816d69c59068d6fd485..33558666b6233417f09a2067fc8020fd3b4ad167 100644 GIT binary patch delta 3279 zcmZ`*U2G#)6}FvCHtXGFZRe-SkS1rn-Bl71Gyk@uvWjC*Hq&@)cV?X1NZH-)#w+aB zuw~T;s)AgJ3V{R?yMvG@6-dhqJRoeR0kKkL)VJ_}iu#09sqldKc`}cnCd;{ZW^A{~ z<{`fK{M~cDbMN`)@H@dDy&e1^;UT$V+w7dl2IH&`j=q94`gMTbE3?oy>CGy2$32NxOQO@UK&^D1s z#G!Kgb&P#l5JiYDg%>yUyp}b!jIHJH_)~N2=TxuVxqtiq8`m&o?ez!mN6w~YP=vJL z{3W>j<$gL#uv#*;ZM|5wR&p2_;$nIw^V)r{cwv?2S9v84;eKSS_Dot@3Om1^eP;i| z&~HN{mW^2%&i98eFHMDpLV?;^G!!&nwJwfVxxLY^1n@5sDCqg{qL6~sLeVrbd1rn& z?tD5tI-P`#0+c`nJG+U$3a}qXh)g-NBexnUu(g-$;`$4)0co(bJpKwiSjDoL)x50$ zwwnUgiRfS&R)(%6>QF3cX2#Zw1uBtIo6~JqP0z}hcswdpu=Lf{Lf+Es7gx43`Laf( z$p+A-xh5%CE}6xwrsY<$8B4R4sYTiixKY^5SeqyiF*hw=$`rIE7}_2k^UxrXL;js= zh1&xcj{5953QLD@`_rhq_A?T31*25l{1>%<*cys8d^w5KCa-l!ygd_*gkGjbO) zZhIEX^U}xKNQ4=5nm?)3!`(J_s&ve^2ItIDgU^Rq-x5gi}jz1!JS4gZrR2;uJ-Z5UL zNHYDy*75I*dxP6wl33L(zYm1p?oR9YdzJbqZLF7A>-Zb>bKQ5yw3}z^xJG8)3};VkUF%5xoAIc1^szzh z+1={2j{Y=3B2|10txxv@izz7uyX;LT^n#_CHlzgS&*3XmDL(Bha#~))(U!#Ncj>}& zv&od;Ye><|`C3(?+N()L^0jn2_*zkg>zd6Txtfx|f%(a+psI8{;XFwca7clw^a5L( zMM9^ODvLDgkSdAJ07Vbx@L0FPx&tXmTYgd$TEFYPljPqRON=nA{V}1(eF^ z6b&~er+QU;3Cb$dT#}WZre9oQqi7PW1!Rd?&C22_Rv`0C>%2KOqU2Df$FK?7U#4^3+cxj3XozE1pY_YUM8F9-3QA#_1 z9eYOP`2igWDSvAew>6y5ydTR4SCE~h@r4OV^%XQGMLq3AV++pO@JLln`nrug4(M#g z)ND|ASkD);TY!*z=?!Q_bRiktM$EiAkb9Fj=xOzKW<8HLiBAsfRLtA?!`fs6Bx%q} z!bp7|QAvXj0$!$4#>{|-Q88aF%jikuQ$Qw)8axD0-u0KQ7E zFUhpumL$*6X4e=S=VI^e@HNm*csohywLr#`=AD1Wo>dTY+62p{pNh1@CmKWBoY$?= zOPji7vqqPk`~-KW|AnUZ_1J;$jsydtH5W*iS)#!}=HSBS;rhW@2GyO=rmK!cqapo3 znqbm**?;!0+rG9Py)^86GBHz&4E;iXTzy*)KGs9Oe}Q#_*|^-%{7wCTF2yx}g+NOJ zEek&z1t^tmqT`e$F5GzO@z$|=%LS?cocp`RHdbdt5+@ATz`-EkfZjFBg@RtV zo?!6PX!y?jHIBf~$3fV4ZF{F@uACAAXVi(XIOzOWf%DteX6PL4waoqWWshcmd1@i? Ee;~L$bpQYW delta 3545 zcmbVOO>7&-6(*@aTb3z_p%jT$q_Hdok_r*~%O!jriHdaX^l)bTB zIcQ)M1=GOjB|uSodq|xYXww2c6%c9rlpqA!OPK;qat?9~dgw)M4@LjzzM0)6sh^@i z1!y_*-kUdXzBlu}_oD~F=J$g?#5)|jEZ;p?<`_;uEW09#E37n&7G_KPuixFXZb5ABR%|R#(9&!=m=}0RkU{ptTwD%4t1Nx#BjS!+u#ao>whH zF-+Kf5v^#tQp|#2IRo<(r)C*|b%jsx5sT`y<@C6J-y;8#NFP54P7L$&m@;tEq>sOJqC6f8pwRZY=lGpiPegas|& z;i@@UFY6mr!6TD8V+G_2L}X-FRth;oF~7E4tjak{Ar2BKr>dH3BB3QsSJR4;Sx(CU z?-DV9Xq22L7pOG}2DaNMY|6&wBI=R*hP~5UP3Cc>94k$`XSXNM6AT(S`Xp*KSAS}` z({n_4_$RAbWggXfLe|IIfm=sUE*C3<)Y`KuTJE&CcT8;UMOPab)h9+rLN|y#o{f!; z_HI$vkr!~ZQi?XpbpNCJas!Wi90l)>YJqp~NRfIf4K=JX9aaNTq2c*IyyY!=3~OA& zLws74@m(*1SwGpoIpJ>h*n)Kzh~#jlGmN^*_drs?b3;Vkpyz+T7CK+0qf)qmC+aU+ z%{UI*Av`f0F2(kaeu-nH@b_@|=`u*4|G9n{kGtEwRgdCudqPk2?EI|=Z=2daPLyB_0T?l^cWn|;A*Y6apWnF!_{&sbQ2{R z&iU5hd^9Eaij0y|pvXy5iYO)|)>mLv&-hAFB+6F>$ybuP;43*6T~$o-fKftfTgdC{ zP(|a)HaztVN+dYwhBbdkeKJjgj72uFJK|b(47Q{b0&wTLiBKRlR_t^ zuA>XQXUuWVdqbCc1SUZiJMRvSRS_>G+QIQqOs@kDTgndN89>q4G1jdO4RI;aN6ia> zll%juRc$8@^>WKVTte`|r$SBEWlzCLT?)i8NpBjT`^JTPWXdi#E-j64W8477Rtl(dYy71E z=6X&|Zz19IRtXbMi>_lC3csp*I6(&>0k@EgWyOm!2S$79YH;elY% z`7->CszB9CE&&3JSC^0m2%n-n5OUp~ij*lq%C?CRCcwmPj@A%t-ObAyP&i><4HzAm zRRe-gXUP;!;}W!n1fO>`1XSH2Rj~4&9&kEr1Ukz88e$N1TNy)k{y98#tbG7j2(>Ti z&@qq<IkZ!J%wgM=e@V7yRDKvj2ZRxsFF!cX+kFPS%oB~kA_}}c zJP-&{O2gB*I#-FsTy};*C5BO~gz(F5DGlK1<}1&7@dBRp1>PWp-S&W%*Y5G?w})U6 z^R%}z^6Er`7Jj@0aH;v%B!viL56l5E)7LHBfRed&j z>FaP$S>{;p)7|2rqT7sp^zr~r zF9n=_XphpE>kn2&dVaC>VdcSA@WZXp2RUj+7g7#u9RAw=2VKxO{1xN}9(g8f zSa{BwW#TN9cucZ15AVo*UKB8^KveLYpy=m|fR71dj-+>@pJYy89TbaJ!3pV0!6CeS z0&Vx=B;iJLC+?d_P+)bdP{-c1GE QDLR0ze&)$b(Z4PK2M5EBr~m)} diff --git a/library/tedit/TEDIT-FILE b/library/tedit/TEDIT-FILE index 333be1471..cef2fd7f0 100644 --- a/library/tedit/TEDIT-FILE +++ b/library/tedit/TEDIT-FILE @@ -1,12 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 7-Apr-2024 17:22:52" {WMEDLEY}TEDIT>TEDIT-FILE.;531 155019 +(FILECREATED "29-Apr-2024 10:37:37" {WMEDLEY}tedit>TEDIT-FILE.;537 155827 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.GET.CHARLOOKS.LIST \TEDIT.GET.SINGLE.CHARLOOKS \TEDIT.GET.PIECES3) + :CHANGES-TO (FNS \TEDIT.GET.PIECES3 \TEDIT.GET.FORMATTED.FILE TEDIT.GET TEDIT.INCLUDE + TEDIT.PUT.STREAM \TEDIT.INSERT.NEWPIECES TEDIT.PUT) - :PREVIOUS-DATE " 2-Apr-2024 12:15:23" {WMEDLEY}TEDIT>TEDIT-FILE.;529) + :PREVIOUS-DATE " 7-Apr-2024 17:22:52" {WMEDLEY}TEDIT>TEDIT-FILE.;531) (PRETTYCOMPRINT TEDIT-FILECOMS) @@ -112,7 +113,8 @@ (DEFINEQ (TEDIT.GET - [LAMBDA (TSTREAM FILE UNFORMATTED? PROPS) (* ; "Edited 17-Mar-2024 18:17 by rmk") + [LAMBDA (TSTREAM FILE UNFORMATTED? PROPS) (* ; "Edited 29-Apr-2024 10:15 by rmk") + (* ; "Edited 17-Mar-2024 18:17 by rmk") (* ; "Edited 15-Mar-2024 13:34 by rmk") (* ; "Edited 21-Jan-2024 23:13 by rmk") (* ; "Edited 22-Sep-2023 20:16 by rmk") @@ -139,8 +141,7 @@ (OR (GETTEXTPROP TEXTOBJ 'LASTGETFILENAME) (\TEXTSTREAM.FILENAME TEXTOBJ]) (CL:WHEN [AND (SETQ GETFN (GETTEXTPROP TEXTOBJ 'GETFN)) - (EQ 'DON'T (APPLY* GETFN (GETTOBJ TEXTOBJ STREAMHINT) - (FULLNAME FSTREAM) + (EQ 'DON'T (APPLY* GETFN TSTREAM (FULLNAME FSTREAM) 'BEFORE] (* ;  "He doesn't want this document put. Bail out.") (RETURN)) @@ -232,7 +233,8 @@ (GDATE IDATE)))]) (TEDIT.INCLUDE - [LAMBDA (TSTREAM FILE START END SAFE PLAINTEXT) (* ; "Edited 17-Mar-2024 12:06 by rmk") + [LAMBDA (TSTREAM FILE START END SAFE PLAINTEXT) (* ; "Edited 29-Apr-2024 10:17 by rmk") + (* ; "Edited 17-Mar-2024 12:06 by rmk") (* ; "Edited 16-Feb-2024 23:54 by rmk") (* ; "Edited 13-Jan-2024 09:39 by rmk") (* ; "Edited 12-Nov-2023 12:29 by rmk") @@ -258,8 +260,9 @@ (* ;; "If SAFE, the caller is taking responsibility for closing FILE when its contents are no longer needed (e.g. DOC-OBJECTS inclusions). Otherwise, the contents are copied to a NODIRCORE that is owned by this TSTREAM, and then FILE is closed here if it wasn't previously open. (This may not be accurate, unless FILE was actually an open stream and not a name?)") + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) (CL:UNLESS (\TEDIT.READONLY TSTREAM) - (PROG ((TEXTOBJ (TEXTOBJ TSTREAM)) + (PROG ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) TSEL FSEL WASOPEN FTSTREAM NDCSTREAM (FROMFILE FILE)) (SETQ TSEL (TEXTSEL TEXTOBJ)) (CL:UNLESS (GETSEL TSEL SET) @@ -350,8 +353,7 @@ (* ;; "The exit conditions are not documented, but we set the fileptr to the end of the insertion and return the length of the insertion.") - (\TEDIT.TEXTSETFILEPTR (FGETTOBJ TEXTOBJ STREAMHINT) - (SUB1 (FGETSEL TSEL CHLIM))) + (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 (FGETSEL TSEL CHLIM))) (RETURN (FGETSEL FSEL DCH))))]) (TEDIT.RAW.INCLUDE @@ -364,7 +366,8 @@ (TEDIT.INCLUDE TSTREAM INFILE START END SAFE T]) (TEDIT.PUT - [LAMBDA (TSTREAM FILE FORCENEW UNFORMATTED? FORMAT) (* ; "Edited 31-Mar-2024 23:54 by rmk") + [LAMBDA (TSTREAM FILE FORCENEW UNFORMATTED? FORMAT) (* ; "Edited 29-Apr-2024 10:12 by rmk") + (* ; "Edited 31-Mar-2024 23:54 by rmk") (* ; "Edited 7-Feb-2024 13:31 by rmk") (* ; "Edited 4-Feb-2024 00:10 by rmk") (* ; "Edited 22-Dec-2023 10:41 by rmk") @@ -378,9 +381,10 @@ (* ;; "Returns the destination stream open for input.") + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) (CL:UNLESS (\TEDIT.READONLY TSTREAM) (RESETLST - (PROG ((TEXTOBJ (TEXTOBJ TSTREAM)) + (PROG ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) CHARSTREAM NEWPIECES PUTFN OLDEXTFORMAT NEWEXTFORMAT) (CL:WHEN (AND (SETQ PUTFN (GETTEXTPROP TEXTOBJ 'PUTFN)) (EQ (APPLY* PUTFN TSTREAM (FULLNAME FILE) @@ -454,7 +458,7 @@ (* ;; "We don't know how to decide that the user doesn't want to continue editing and therefore doesn't need the pieces to be updated to the new file. The stream itself may be used in the future, even if right now there is no process or window") - (SETQ CHARSTREAM (TEDIT.PUT.STREAM TEXTOBJ CHARSTREAM UNFORMATTED? NIL T)) + (SETQ CHARSTREAM (TEDIT.PUT.STREAM TSTREAM CHARSTREAM UNFORMATTED? NIL T)) (* ;; "The file is written, nothing can be lost. CHARSTREAM isn't closed yet") @@ -483,6 +487,7 @@ (TEDIT.PUT.STREAM [LAMBDA (TSTREAM DESTSTREAM UNFORMATTED? EXTERNALFORMAT CONTINUE) + (* ; "Edited 29-Apr-2024 10:09 by rmk") (* ; "Edited 19-Mar-2024 21:38 by rmk") (* ; "Edited 17-Mar-2024 17:29 by rmk") (* ; "Edited 7-Feb-2024 12:41 by rmk") @@ -514,7 +519,7 @@ 'ICREATIONDATE (TEDIT.FILEDATE DESTSTREAM T))) (SETQ DESTSTREAM (OPENSTREAM DESTSTREAM 'INPUT)) - (\TEDIT.INSERT.NEWPIECES DESTSTREAM TEXTOBJ NEWPIECES) + (\TEDIT.INSERT.NEWPIECES DESTSTREAM TSTREAM NEWPIECES) (SETFILEPTR DESTSTREAM ENDPTR) (\PEEKBIN DESTSTREAM T) (* ; "Get the buffers set up") (CL:WHEN (FGETTOBJ TEXTOBJ TXTFILE) @@ -639,7 +644,8 @@ (\TEDIT.INSERTPIECES PIECES NIL TEXTOBJ)))]) (\TEDIT.GET.FORMATTED.FILE - [LAMBDA (TEXT TSTREAM START END PROPS) (* ; "Edited 17-Mar-2024 00:21 by rmk") + [LAMBDA (TEXT TSTREAM START END PROPS) (* ; "Edited 29-Apr-2024 10:25 by rmk") + (* ; "Edited 17-Mar-2024 00:21 by rmk") (* ; "Edited 5-Feb-2024 09:25 by rmk") (* ; "Edited 21-Jan-2024 10:25 by rmk") (* ; "Edited 18-Jan-2024 10:25 by rmk") @@ -647,12 +653,11 @@ (* ; "Edited 11-Jun-99 14:37 by rmk:") (* ; "Edited 19-Apr-93 13:46 by jds") - (* ;; "TEXT is an open stream that knows its external format, TEXTOBJ is the TEXTOBJ to be filled in. If specified, START and END define the byte positions in TEXT to be included") + (* ;; "TEXT is an open stream that knows its external format, TSTREAM is the textstream to be filled in. If specified, START and END define the byte positions in TEXT to be included") - (* ;; - "If TSTREAM is a formatted file, it is included in TEXTOBJ and TEXTOBJ is returned, otherwise NIL") + (* ;; "Returns NIL if TSTREAM is not a formatted file, otherwise the ") - (LET ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + (LET ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) (TRAILER (\TEDIT.GET.TRAILER TEXT END)) PCCOUNT IDATE PC) (CL:WHEN TRAILER @@ -663,15 +668,15 @@ (CL:WHEN (\TEDIT.GET.IDATE3 TEXT END) (* ;  "IDATE means 3.1, LINELEADING above-hack.") (FSETTOBJ TEXTOBJ TXTLINELEADINGABOVE T)) - (\TEDIT.INSERTPIECES (\TEDIT.GET.PIECES3 TEXT TEXTOBJ PCCOUNT START END) + (\TEDIT.INSERTPIECES (\TEDIT.GET.PIECES3 TEXT TSTREAM PCCOUNT START END) NIL TEXTOBJ)) (2 (* ; "Version 2; obsoleted 5/22/85") - (\TEDIT.GET.PCTB2 TEXT TEXTOBJ PCCOUNT START END)) + (\TEDIT.GET.PCTB2 TEXT TSTREAM PCCOUNT START END)) (1 (* ;  "Version 1; obsoleted at INTERMEZZO release 2/85") - (\TEDIT.GET.PCTB1 TEXT TEXTOBJ PCCOUNT START END)) + (\TEDIT.GET.PCTB1 TEXT TSTREAM PCCOUNT START END)) (0 (* ; "VERSION 0") - (\TEDIT.GET.PCTB0 TEXT TEXTOBJ (CADR PCCOUNT) + (\TEDIT.GET.PCTB0 TEXT TSTREAM (CADR PCCOUNT) PCCOUNT START END)) (SHOULDNT "File format version incompatible with this version of TEdit.")) (CL:WHEN (SETQ PC (PREVPIECE (\TEDIT.LASTPIECE TEXTOBJ))) @@ -855,7 +860,8 @@ (DEFINEQ (\TEDIT.GET.PIECES3 - [LAMBDA (TEXT TEXTOBJ PCCOUNT CURFILEBYTE# END) (* ; "Edited 7-Apr-2024 17:20 by rmk") + [LAMBDA (TEXT TSTREAM PCCOUNT CURFILEBYTE# END) (* ; "Edited 29-Apr-2024 10:37 by rmk") + (* ; "Edited 7-Apr-2024 17:20 by rmk") (* ; "Edited 20-Mar-2024 10:59 by rmk") (* ; "Edited 15-Mar-2024 14:37 by rmk") (* ; "Edited 14-Jan-2024 00:22 by rmk") @@ -866,19 +872,20 @@ (* ; "Edited 24-Sep-2023 22:00 by rmk") (* ; "Edited 2-Sep-2023 11:12 by rmk") (* ; "Edited 29-Aug-2023 00:18 by rmk") - - (* ;; "This runs through the Looks table portion of the TEXT file, gathering the looks and installing pointers to positions in the character section of the file. It doesn't actually examine the characters in the file. It returns a piece chain that covers the text but that hasn't been installed in the btree. The pieces need further adjustment for character encoding and to prevent mutlibyte characters from crossing buffer boundaries before they are installed in the btree.") - - (TEXTOBJ! TEXTOBJ) (SETFILEPTR TEXT (IDIFFERENCE (OR END (GETEOFPTR TEXT)) 8)) (SETFILEPTR TEXT (\DWIN TEXT)) (* ; "Pieceinfo byte #") - (for PCNO PC BYTELEN PREVPC FIRSTPC PARALOOKSMAP CHARLOOKSMAP (ORIGBYTE# _ CURFILEBYTE#) - (DEFAULTCHARLOOKS _ (FGETTOBJ TEXTOBJ DEFAULTCHARLOOKS)) - (OLDPARALOOKS _ (FGETTOBJ TEXTOBJ FMTSPEC)) from 1 to PCCOUNT first (SETQ FIRSTPC - (CREATE PIECE)) + (for PCNO PC BYTELEN PREVPC FIRSTPC PARALOOKSMAP CHARLOOKSMAP DEFAULTCHARLOOKS OLDPARALOOKS + (TEXTOBJ _ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + (ORIGBYTE# _ CURFILEBYTE#) from 1 to PCCOUNT first (SETQ DEFAULTCHARLOOKS (FGETTOBJ TEXTOBJ + + DEFAULTCHARLOOKS + )) + (SETQ OLDPARALOOKS (FGETTOBJ TEXTOBJ + FMTSPEC)) + (SETQ FIRSTPC (CREATE PIECE)) (* ; "Throw away at the end") - (SETQ PREVPC FIRSTPC) + (SETQ PREVPC FIRSTPC) do (SETQ PC NIL) (* ;  "This loop may not really read a piece, so we have to distinguish that case.") (SETQ BYTELEN (\DWIN TEXT)) @@ -923,8 +930,7 @@ PPARALOOKS _ OLDPARALOOKS PTYPE _ OBJECT.PTYPE PREVPIECE _ PREVPC)) - (\TEDIT.GET.OBJECT (GETTOBJ TEXTOBJ STREAMHINT) - PC TEXT CURFILEBYTE#) + (\TEDIT.GET.OBJECT TSTREAM PC TEXT CURFILEBYTE#) (add CURFILEBYTE# BYTELEN) (FSETPC PC PLOOKS (if (ZEROP (BIN TEXT)) then @@ -2025,7 +2031,8 @@ NEXTNEW]) (\TEDIT.INSERT.NEWPIECES - [LAMBDA (STREAM TEXTOBJ NEWPIECES) (* ; "Edited 20-Mar-2024 10:59 by rmk") + [LAMBDA (DESTSTREAM OLDSTREAM NEWPIECES) (* ; "Edited 29-Apr-2024 10:13 by rmk") + (* ; "Edited 20-Mar-2024 10:59 by rmk") (* ; "Edited 17-Mar-2024 12:06 by rmk") (* ; "Edited 5-Feb-2024 09:24 by rmk") (* ; "Edited 3-Feb-2024 23:59 by rmk") @@ -2035,18 +2042,16 @@ (* ; "Edited 11-Nov-2023 16:31 by rmk") (* ; "Edited 8-Sep-2023 16:32 by rmk") - (* ;; "This makes the pieces and BTREE of TEXTOBJ consistent with the NEWPIECES chain and the new STREAM. The character numbers of old and new pieces correspond, so editing can continue without updating panes, lines, or selections (which are all based on character numbers, not particular pieces). This puts STREAM as the PFILE of each new file piece and then installs NEWPIECES in TEXTOBJ, replacing the BTREE and pieces already there.") - - (TEXTOBJ! TEXTOBJ) + (* ;; "This makes the pieces and BTREE of OLDSTREAM's TEXTOBJ consistent with the NEWPIECES chain and the new DESTSTREAM. The character numbers of old and new pieces correspond, so editing can continue without updating panes, lines, or selections (which are all based on character numbers, not particular pieces). This puts DESTSTREAM as the PFILE of each new file piece and then installs NEWPIECES in DESTSTREAM, replacing the BTREE and pieces already there.") - (* ;; "The \SETFILEPTR translates TSTREAM's buffer parameters to the new file. ") + (* ;; "The \SETFILEPTR translates OLDSTREAM's buffer parameters to the new file. ") - (LET ((TSTREAM (GETTOBJ TEXTOBJ STREAMHINT)) + (LET ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of OLDSTREAM))) FILEPTR) - (SETQ FILEPTR (\TEDIT.TEXTGETFILEPTR TSTREAM)) (* ; "Restore the editing parameters") - (for PC (SBINABLE _ (fetch (STREAM BINABLE) of STREAM)) inpieces NEWPIECES + (SETQ FILEPTR (\TEDIT.TEXTGETFILEPTR OLDSTREAM)) (* ; "Restore the editing parameters") + (for PC (SBINABLE _ (fetch (STREAM BINABLE) of DESTSTREAM)) inpieces NEWPIECES when (MEMB (PTYPE PC) - FILE.PTYPES) do (FSETPC PC PCONTENTS STREAM) + FILE.PTYPES) do (FSETPC PC PCONTENTS DESTSTREAM) (CL:WHEN (EQ THINFILE.PTYPE (PTYPE PC)) (FSETPC PC PBINABLE SBINABLE))) (* ; "Non-object pieces are on OFILE") @@ -2059,7 +2064,7 @@ (* ;; "This guards agains the possiblity that a sequence of edits somehow got the positioning parameters cached in the stream out of step with the document. This ensures that they are consistent after all the pieces have been written out.") - (\TEDIT.TEXTSETFILEPTR TSTREAM (IMAX 0 (IMIN FILEPTR (FGETTOBJ TEXTOBJ TEXTLEN]) + (\TEDIT.TEXTSETFILEPTR OLDSTREAM (IMAX 0 (IMIN FILEPTR (FGETTOBJ TEXTOBJ TEXTLEN]) (\TEDIT.PUTRESET [LAMBDA (PROC&VALUE) (* jds "15-May-85 16:38") @@ -2449,27 +2454,27 @@ (RPAQ? *TEDIT-FILE-READTABLE* (COPYREADTABLE \ORIGREADTABLE)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4804 30415 (TEDIT.GET 4814 . 9656) (TEDIT.FORMATTEDFILEP 9658 . 10974) (TEDIT.FILEDATE -10976 . 12147) (TEDIT.INCLUDE 12149 . 19117) (TEDIT.RAW.INCLUDE 19119 . 19927) (TEDIT.PUT 19929 . -26872) (TEDIT.PUT.STREAM 26874 . 30413)) (30416 49580 (\TEDIT.GET.FOREIGN.FILE 30426 . 33611) ( -\TEDIT.GET.UNFORMATTED.FILE 33613 . 37487) (\TEDIT.GET.FORMATTED.FILE 37489 . 40277) ( -\TEDIT.FORMATTEDSTREAMP 40279 . 43179) (\ARBIN 43181 . 43901) (\ATMIN 43903 . 44440) (\DWIN 44442 . -44821) (\STRINGIN 44823 . 45531) (\TEDIT.GET.TRAILER 45533 . 48049) (\TEDIT.CACHEFILE 48051 . 49578)) -(49746 62858 (\TEDIT.GET.PIECES3 49756 . 59620) (\TEDIT.GET.IDATE3 59622 . 61017) ( -\TEDIT.MAKE.STRINGPIECE 61019 . 62856)) (62859 74802 (\TEDIT.GET.UNFORMATTED.FILE.XCCS 62869 . 68985) -(\TEDIT.INTERPRET.XCCS.SHIFTS 68987 . 74800)) (74824 80846 (\TEDIT.GET.UNFORMATTED.FILE.UTF8 74834 . -80844)) (80869 89373 (\TEDIT.GET.CHARLOOKS.LIST 80879 . 81610) (\TEDIT.GET.SINGLE.CHARLOOKS 81612 . -86185) (\TEDIT.GET.CHARLOOKS 86187 . 87517) (\TEDIT.GET.PARALOOKS.INDEX 87519 . 88063) ( -\TEDIT.GET.CHARLOOKS.INDEX 88065 . 89371)) (89374 97612 (\TEDIT.GET.PARALOOKS.LIST 89384 . 90006) ( -\TEDIT.GET.SINGLE.PARALOOKS 90008 . 97020) (\TEDIT.GET.PARALOOKS 97022 . 97610)) (97613 101012 ( -\TEDIT.GET.OBJECT 97623 . 101010)) (101074 133645 (\TEDIT.PUT.PCTB 101084 . 115087) ( -\TEDIT.PUT.TRAILER 115089 . 115856) (\TEDIT.PUT.PCTB.MERGEABLE 115858 . 119376) ( -\TEDIT.PUT.UTF8.SPLITPIECES 119378 . 124465) (\TEDIT.PUT.PCTB.NEXTNEW 124467 . 128242) ( -\TEDIT.INSERT.NEWPIECES 128244 . 131243) (\TEDIT.PUTRESET 131245 . 131487) (\ARBOUT 131489 . 132213) ( -\ATMOUT 132215 . 132820) (\DWOUT 132822 . 133101) (\STRINGOUT 133103 . 133643)) (133646 145039 ( -\TEDIT.PUT.CHARLOOKS.LIST 133656 . 135328) (\TEDIT.PUT.SINGLE.CHARLOOKS 135330 . 140574) ( -\TEDIT.PUT.CHARLOOKS 140576 . 141720) (\TEDIT.PUT.CHARLOOKS1 141722 . 142773) (\TEDIT.PUT.OBJECT -142775 . 145037)) (145040 153078 (\TEDIT.PUT.PARALOOKS.LIST 145050 . 145952) ( -\TEDIT.PUT.SINGLE.PARALOOKS 145954 . 152003) (\TEDIT.PUT.PARALOOKS 152005 . 153076)) (153173 154855 ( -TEDITFROMLISPSOURCE 153183 . 154853))))) + (FILEMAP (NIL (4875 30956 (TEDIT.GET 4885 . 9773) (TEDIT.FORMATTEDFILEP 9775 . 11091) (TEDIT.FILEDATE +11093 . 12264) (TEDIT.INCLUDE 12266 . 19370) (TEDIT.RAW.INCLUDE 19372 . 20180) (TEDIT.PUT 20182 . +27304) (TEDIT.PUT.STREAM 27306 . 30954)) (30957 50202 (\TEDIT.GET.FOREIGN.FILE 30967 . 34152) ( +\TEDIT.GET.UNFORMATTED.FILE 34154 . 38028) (\TEDIT.GET.FORMATTED.FILE 38030 . 40899) ( +\TEDIT.FORMATTEDSTREAMP 40901 . 43801) (\ARBIN 43803 . 44523) (\ATMIN 44525 . 45062) (\DWIN 45064 . +45443) (\STRINGIN 45445 . 46153) (\TEDIT.GET.TRAILER 46155 . 48671) (\TEDIT.CACHEFILE 48673 . 50200)) +(50368 63514 (\TEDIT.GET.PIECES3 50378 . 60276) (\TEDIT.GET.IDATE3 60278 . 61673) ( +\TEDIT.MAKE.STRINGPIECE 61675 . 63512)) (63515 75458 (\TEDIT.GET.UNFORMATTED.FILE.XCCS 63525 . 69641) +(\TEDIT.INTERPRET.XCCS.SHIFTS 69643 . 75456)) (75480 81502 (\TEDIT.GET.UNFORMATTED.FILE.UTF8 75490 . +81500)) (81525 90029 (\TEDIT.GET.CHARLOOKS.LIST 81535 . 82266) (\TEDIT.GET.SINGLE.CHARLOOKS 82268 . +86841) (\TEDIT.GET.CHARLOOKS 86843 . 88173) (\TEDIT.GET.PARALOOKS.INDEX 88175 . 88719) ( +\TEDIT.GET.CHARLOOKS.INDEX 88721 . 90027)) (90030 98268 (\TEDIT.GET.PARALOOKS.LIST 90040 . 90662) ( +\TEDIT.GET.SINGLE.PARALOOKS 90664 . 97676) (\TEDIT.GET.PARALOOKS 97678 . 98266)) (98269 101668 ( +\TEDIT.GET.OBJECT 98279 . 101666)) (101730 134453 (\TEDIT.PUT.PCTB 101740 . 115743) ( +\TEDIT.PUT.TRAILER 115745 . 116512) (\TEDIT.PUT.PCTB.MERGEABLE 116514 . 120032) ( +\TEDIT.PUT.UTF8.SPLITPIECES 120034 . 125121) (\TEDIT.PUT.PCTB.NEXTNEW 125123 . 128898) ( +\TEDIT.INSERT.NEWPIECES 128900 . 132051) (\TEDIT.PUTRESET 132053 . 132295) (\ARBOUT 132297 . 133021) ( +\ATMOUT 133023 . 133628) (\DWOUT 133630 . 133909) (\STRINGOUT 133911 . 134451)) (134454 145847 ( +\TEDIT.PUT.CHARLOOKS.LIST 134464 . 136136) (\TEDIT.PUT.SINGLE.CHARLOOKS 136138 . 141382) ( +\TEDIT.PUT.CHARLOOKS 141384 . 142528) (\TEDIT.PUT.CHARLOOKS1 142530 . 143581) (\TEDIT.PUT.OBJECT +143583 . 145845)) (145848 153886 (\TEDIT.PUT.PARALOOKS.LIST 145858 . 146760) ( +\TEDIT.PUT.SINGLE.PARALOOKS 146762 . 152811) (\TEDIT.PUT.PARALOOKS 152813 . 153884)) (153981 155663 ( +TEDITFROMLISPSOURCE 153991 . 155661))))) STOP diff --git a/library/tedit/TEDIT-FILE.LCOM b/library/tedit/TEDIT-FILE.LCOM index c1d43b62e1452c53d5e54226f43f602fab44ab19..1c72e9a8c1fb7073fac06727c3a258d8c28a0595 100644 GIT binary patch delta 4957 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 a&2lf|{^_d)CkDptD-iMc*3RnX*#7{M-sE%u delta 4905 zcmZ`-TWlOx8Q!&HJ9Qn$m-VG<$2r|Zt)0}{oin%Hl}bI{o%K$#JG0%Lwd0cDrnPBO zyK$O2AVjK#2ZXp3H96&>mC8dU#7%%N4N_^#3W=8mK~)hUAygiC00{&b5C|loeCN!} zdJ_jfcxKM|&;OtEU%vl4`@QeBz4x8Amlh&KpEfREnWhP<5J^u{npWxc)#EJFHatwa zV?^7Vrczpx()9XUG4}7=;d?J$BC%YxP#{FRzB`iIFDXm0sqV>~RWLJU({Rl!iQUZ_ zn+Zo?Zm5e$s+y2e>~i=dH^8RZgV*2hdT@$#r%PpX-g2sy=`8d>4c*(7MAMR*rn0YQ zu#Kj6&a}O7Ap8OQMd#)FWBJYy{u*)X9{zlq|66N6b+}i&?e2VoJ<+u>t4M?&#Wsp2 zp;C%etaQ3;R!p~QFIaXKV+uK2oG(}vm(WCt;4qdOpEF$}kw{2HN>Mh`AIT;)l5y;e z;lh&2|Cn8bGE*<=44bw)>HOqv` z3XGj`o!L_`tnAyEr0Jw!R9vX$3d8{qL@ul6C9{@kVtrYv!CXY~U<`N-2>b ze5p;eWQ!j5g?onDlG4uW_x!1S@F!iNQ0I*B-p*tG^V^5M6&}tv;-?zjtH12#K0V#& z=?hINs?637kD5xtcTv%qH;E$C;I!2ek6^rF7KoBioBNPcNfJ21caf~I#^Iwi1%C4! zm51}4@}iN=5?PXkcp!>Xv^bY0sW=q;Vc9u{Pz_-zI2AKTD8kTuO(0mM#Z2BPR|v(9 z`Pb~CYvN0WLSdCX-Pijtz0Dd*rPa8Uyv?|zArt!}1B!gx9(Z6e9Fx>$h9GaSJ#4Z> zQZn(5QX)wf?vI?%rQp;>(8%z^y1nI zk!gZls~u<;+wvo1&LgAU#gcjK8j%x8KNo3A3Ep51sXFK8QCCS~n+tft#Z{N*EX9gX z+D_IgXOOKgptiW5L^kVz21!P?dK!>gm6IkQ#Bngb8r*tBxCY@I{V!hDBZUKh}{Kcp^&S!`mkphS@(O{{pW4bx7}y)bs1SL>3}U9$q>z5PfPu2tUCG z#amQpxe$$Bh%WGHPu^lbd~qn8XFnf)C_H>)QGNVjIRq0cJ`;JHF( zE!!wB0u^pEFC+C(n@OIz{syUrFc1pTktvu)8K*+wdzsC=jQ4w9B4 zwRG0Z8Px*18g}eWO#7SQ$Pm1uPy4G7XRi&S9|m1e<^4HlbDU7oL}SbAmsVm#fyr1r z9><%mkr+faE?#4T=C3MZRCDS~OiLSV6eLta%W4*;gxn2wmeSZCjuOCh3nVCN zt9FV_?_ok~5mPiU(PlZ}OqY;MG@+Ag|G&R-hUa%jv{FkDZ8XBHkpv3h;C?Nj2?Pa% zorp%u6Cb4Kj#Q>e8B^lVPlN&@CGXYZ)#< z+PA8FCy z4FI#OGW?Liq)zx{N4#o;(^23Ih5=WY?I#FiA=|PA)|ZVODiLIF*_z|x$Jmc$<%ri7 zh()~ffUo>C(u^h>Qb>2kXv`RmbpL01*emBIVoQBXy>%=9w>JiyzQ)0G7k<`V@9#TQ z+zS8W9gp+>fW4#~so9av`m!Bqt1lNKef8yM-VL?$|B?hK*75clt zne9J2ya1o`H%pEh-22H&hNf zvG$uCgPTTp>Bs|hXTUk`Jm9N54wc92PONPyw)ty=p<~=ve8uT4Mh@1CJYcK07PtO; z-~wXdMA^DFQY(7CFZPMLU5Yk(I>OuIPE>qix86&m$M*=9HTod26-@LkjbhA`9)$~E z#&$-9@aE@3lR7}pMB~+PT@=seMJdkj66F&6{*A*cL_Cdi{*sF-vcAVt zaoaQFC1cLam2un06-QGEzb>Iq11NHjo1DVomc!1^jYrX=Z^I#6!*SEVbtS>hvGD^E zu2C>B#MYC52H42r*8*IcT2IS8B!&U)ElvPNzz3$2E4dtZG}!TAP{WT1{u|h_|Asc@ zzhRU98@fpPOeRx-xAE(RWAb|mNR~%?#qR~^X=oin+`o=dLI1ovpahzF$F!Pa)2Wdd ztlc>gpdtrDRY~qVmwGX6`pwb;`hcbhI~70A;QPr~c;o{m$QQ^XCYG_z7vJdi8wle~V?~7XSbN diff --git a/library/tedit/TEDIT-FIND b/library/tedit/TEDIT-FIND index bdfc8eafd..a5b63d05b 100644 --- a/library/tedit/TEDIT-FIND +++ b/library/tedit/TEDIT-FIND @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "17-Mar-2024 12:06:12" {WMEDLEY}tedit>TEDIT-FIND.;102 30083 +(FILECREATED " 3-May-2024 07:34:03" {WMEDLEY}tedit>TEDIT-FIND.;108 31239 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.BASICFIND \TEDIT.BASICFIND.BACKWARD \TEDIT.WCFIND.BACKWARD) + :CHANGES-TO (FNS \TEDIT.BASICFIND.BACKWARD \TEDIT.WCFIND.BACKWARD) - :PREVIOUS-DATE "15-Mar-2024 14:10:05" {WMEDLEY}tedit>TEDIT-FIND.;98) + :PREVIOUS-DATE " 2-May-2024 21:42:19" {WMEDLEY}tedit>TEDIT-FIND.;107) (PRETTYCOMPRINT TEDIT-FINDCOMS) @@ -28,7 +28,8 @@ (DEFINEQ (TEDIT.FIND - [LAMBDA (TEXTOBJ TARGETSTRING START END WILDCARDS?) (* ; "Edited 19-Jun-2023 22:27 by rmk") + [LAMBDA (TSTREAM TARGETSTRING START END WILDCARDS?) (* ; "Edited 24-Apr-2024 23:47 by rmk") + (* ; "Edited 19-Jun-2023 22:27 by rmk") (* ; "Edited 6-May-2018 17:34 by rmk:") (* ; "Edited 30-May-91 20:56 by jds") @@ -38,26 +39,26 @@ (* ;; "RMK: FIND isn't undoable, FIND-AGAIN is armed on meta-g. No point in hiding a previous actual edit and then having to undo a find in order to undo the intended previous event. Or maybe undoing FIND would put you back where you started?") - (SETQ TEXTOBJ (TEXTOBJ TEXTOBJ)) + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) (CL:WHEN TARGETSTRING (SETQ TARGETSTRING (MKSTRING TARGETSTRING)) (CL:UNLESS END - (SETQ END (TEXTLEN TEXTOBJ))) + (SETQ END (FGETTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM) + TEXTLEN))) (CL:UNLESS START - (SETQ START (TEDIT.GETPOINT TEXTOBJ))) + (SETQ START (TEDIT.GETPOINT TSTREAM))) (* ;; "* and # are implicitly quoted if not WILDCARDS? This could be handled simply by calling CONS instead of \TEDIT.PARSE.SEARCHSTRING") (CL:WHEN (ILEQ START END) (CL:IF WILDCARDS? - (\TEDIT.WCFIND (ffetch (TEXTOBJ STREAMHINT) of TEXTOBJ) - (\TEDIT.PARSE.SEARCHSTRING TARGETSTRING) + (\TEDIT.WCFIND TSTREAM (\TEDIT.PARSE.SEARCHSTRING TARGETSTRING) START END) - (CAR (\TEDIT.BASICFIND (ffetch (TEXTOBJ STREAMHINT) of TEXTOBJ) - TARGETSTRING START END)))))]) + (CAR (\TEDIT.BASICFIND TSTREAM TARGETSTRING START END)))))]) (TEDIT.FIND.BACKWARD - [LAMBDA (TEXTOBJ TARGETSTRING START END WILDCARDS? AGAIN) (* ; "Edited 12-Jul-2023 08:24 by rmk") + [LAMBDA (TSTREAM TARGETSTRING START END WILDCARDS? AGAIN) (* ; "Edited 24-Apr-2024 23:43 by rmk") + (* ; "Edited 12-Jul-2023 08:24 by rmk") (* ; "Edited 20-Jun-2023 12:12 by rmk") (* ; "Edited 18-Jun-2023 23:43 by rmk") (* ; "Edited 30-May-91 19:17 by jds") @@ -66,11 +67,12 @@ (* ;; "If WILDCARDS?, the value is the pair (MATCHSTART MATCHEND) for that match, since the caller doesn't know the length. But if not WILDCARDS?, just the match-start, since the caller knows the match is (NCHARS TARGETSTRING) long. This is quirky, but that's the way it is documented.") - (SETQ TEXTOBJ (TEXTOBJ TEXTOBJ)) + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) (CL:WHEN [AND TARGETSTRING (NEQ 0 (NCHARS (SETQ TARGETSTRING (MKSTRING TARGETSTRING] (SETQ START (IMAX 1 (OR START 1))) - (SETQ END (IMIN (OR END (SUB1 (TEDIT.GETPOINT TEXTOBJ))) - (TEXTLEN TEXTOBJ))) + (SETQ END (IMIN (OR END (SUB1 (TEDIT.GETPOINT TSTREAM))) + (FGETTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM) + TEXTLEN))) (CL:WHEN AGAIN (* ;; "Assume that we aren't interested in another match at the current position.") @@ -78,11 +80,9 @@ (ADD END -1)) (CL:WHEN (ILEQ START END) (CL:IF WILDCARDS? - (\TEDIT.WCFIND.BACKWARD (ffetch (TEXTOBJ STREAMHINT) of TEXTOBJ) - (DREVERSE (\TEDIT.PARSE.SEARCHSTRING TARGETSTRING)) + (\TEDIT.WCFIND.BACKWARD TSTREAM (DREVERSE (\TEDIT.PARSE.SEARCHSTRING TARGETSTRING)) START END) - (CAR (\TEDIT.BASICFIND.BACKWARD (ffetch (TEXTOBJ STREAMHINT) of TEXTOBJ) - TARGETSTRING START END)))))]) + (CAR (\TEDIT.BASICFIND.BACKWARD TSTREAM TARGETSTRING START END)))))]) (TEDIT.SUBSTITUTE [LAMBDA (TEXTSTREAM PATTERN REPLACEMENT CONFIRM?) (* ; "Edited 15-Mar-2024 14:09 by rmk") @@ -307,16 +307,15 @@ (DEFINEQ (\TEDIT.WCFIND - [LAMBDA (TSTREAM TARGETLIST START END HITSTART ANCHORED) (* ; "Edited 19-Jun-2023 23:50 by rmk") + [LAMBDA (TSTREAM TARGETLIST START END HITSTART ANCHORED) (* ; "Edited 2-May-2024 21:41 by rmk") + (* ; "Edited 29-Apr-2024 20:15 by rmk") + (* ; "Edited 19-Jun-2023 23:50 by rmk") (* ;; "Returns the (start end) pair of a match possibly with wild cards, where HITSTART is the first character of such a match") (CL:UNLESS (IGREATERP START END) [LET (RESULT) (COND - ((NULL TARGETLIST) (* ; "Final match") - (LIST (OR HITSTART (SUB1 START)) - (SUB1 START))) [(EQ '%# (CAR TARGETLIST)) (* ;  "Single-char wildcard, next segment is anchored ") (OR (\TEDIT.WCFIND TSTREAM (CDR TARGETLIST) @@ -338,10 +337,17 @@ ((SETQ RESULT (\TEDIT.BASICFIND TSTREAM (CAR TARGETLIST) START END ANCHORED)) (* ;  "Matched a string segment, keep going") - (\TEDIT.WCFIND TSTREAM (CDR TARGETLIST) - (ADD1 (CADR RESULT)) - END - (OR HITSTART (CAR RESULT])]) + (if (CDR TARGETLIST) + then (\TEDIT.WCFIND TSTREAM (CDR TARGETLIST) + (ADD1 (CADR RESULT)) + END + (OR HITSTART (CAR RESULT))) + elseif (IEQP END (CADR RESULT)) + then (* ; "Final match") + (LIST (OR (CAR RESULT) + (SUB1 START)) + (CADR RESULT)) + else RESULT])]) (\TEDIT.BASICFIND [LAMBDA (TSTREAM TARGETSTRING START END ANCHORED) (* ; "Edited 17-Mar-2024 12:06 by rmk") @@ -367,16 +373,15 @@ do (RETURN (LIST ANCHOR (IPLUS ANCHOR (SUB1 NCHARS]) (\TEDIT.WCFIND.BACKWARD - [LAMBDA (TSTREAM TARGETLIST START END HITEND ANCHORED) (* ; "Edited 17-Mar-2024 11:59 by rmk") + [LAMBDA (TSTREAM TARGETLIST START END HITEND ANCHORED) (* ; "Edited 3-May-2024 07:11 by rmk") + (* ; "Edited 29-Apr-2024 20:45 by rmk") + (* ; "Edited 17-Mar-2024 11:59 by rmk") (* ; "Edited 20-Jun-2023 13:52 by rmk") (* ;; "Returns the (start end) pair of a match possibly with wild cards, where HITEND is the last character of such a match") (LET (RESULT) (COND - ((NULL TARGETLIST) (* ; "Final match") - (LIST (ADD1 (\TEDIT.TEXTGETFILEPTR TSTREAM)) - (OR HITEND END))) [(EQ '%# (CAR TARGETLIST)) (* ;  "Single-char wildcard, next segment is anchored ") (OR (\TEDIT.WCFIND.BACKWARD TSTREAM (CDR TARGETLIST) @@ -398,13 +403,20 @@ ((SETQ RESULT (\TEDIT.BASICFIND.BACKWARD TSTREAM (CAR TARGETLIST) START END ANCHORED)) (* ;  "Matched a string segment, keep going") - (\TEDIT.WCFIND.BACKWARD TSTREAM (CDR TARGETLIST) - START - (SUB1 (CAR RESULT)) - (OR HITEND (CADR RESULT]) + (if (CDR TARGETLIST) + then (\TEDIT.WCFIND.BACKWARD TSTREAM (CDR TARGETLIST) + START + (SUB1 (CAR RESULT)) + (OR HITEND (CADR RESULT))) + elseif (IEQP END (CADR RESULT)) + then (* ; "Final match") + (LIST (ADD1 (\TEDIT.TEXTGETFILEPTR TSTREAM)) + (OR HITEND (CADR RESULT))) + else RESULT]) (\TEDIT.BASICFIND.BACKWARD - [LAMBDA (TSTREAM TARGETSTRING START END ANCHORED) (* ; "Edited 17-Mar-2024 12:06 by rmk") + [LAMBDA (TSTREAM TARGETSTRING START END ANCHORED) (* ; "Edited 3-May-2024 07:33 by rmk") + (* ; "Edited 17-Mar-2024 12:06 by rmk") (* ; "Edited 12-Jul-2023 08:14 by rmk") (* ; "Edited 23-Apr-2023 12:42 by rmk") @@ -439,10 +451,11 @@ (CL:WHEN ANCHORED (* ; "Anchored at END, didn't match") (RETURN NIL)) (SETQ ANCHOR (SUB1 END)) - (SETQ LASTANCHOR (IPLUS START NCHARS1)) eachtime (\TEDIT.TEXTSETFILEPTR TSTREAM ANCHOR) + (SETQ LASTANCHOR (IPLUS START NCHARS1 -1)) eachtime (\TEDIT.TEXTSETFILEPTR TSTREAM + ANCHOR) (* ;  "The filepos one before the last CHARN match") - (ADD ANCHOR -1) + (add ANCHOR -1) (* ; "For next attempt") while (find old ANCHOR from ANCHOR to LASTANCHOR by -1 suchthat (EQ CHARN ( \TEDIT.TEXTBACKFILEPTR @@ -450,7 +463,7 @@ when [OR (EQ NCHARS1 0) (for I from NCHARS1 to 1 by -1 always (EQ (NTHCHARCODE TARGETSTRING I) (\TEDIT.TEXTBACKFILEPTR TSTREAM] - do (ADD ANCHOR 1) + do (add ANCHOR 1) (RETURN (LIST (IDIFFERENCE ANCHOR NCHARS1) ANCHOR]) @@ -491,8 +504,8 @@ TARGETSTRING)]) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (832 18922 (TEDIT.FIND 842 . 2482) (TEDIT.FIND.BACKWARD 2484 . 4297) (TEDIT.SUBSTITUTE -4299 . 14915) (TEDIT.NEXT 14917 . 18920)) (18955 30060 (\TEDIT.WCFIND 18965 . 20966) (\TEDIT.BASICFIND - 20968 . 22446) (\TEDIT.WCFIND.BACKWARD 22448 . 24507) (\TEDIT.BASICFIND.BACKWARD 24509 . 28037) ( -\TEDIT.PARSE.SEARCHSTRING 28039 . 30058))))) + (FILEMAP (NIL (816 19022 (TEDIT.FIND 826 . 2523) (TEDIT.FIND.BACKWARD 2525 . 4397) (TEDIT.SUBSTITUTE +4399 . 15015) (TEDIT.NEXT 15017 . 19020)) (19055 31216 (\TEDIT.WCFIND 19065 . 21521) (\TEDIT.BASICFIND + 21523 . 23001) (\TEDIT.WCFIND.BACKWARD 23003 . 25474) (\TEDIT.BASICFIND.BACKWARD 25476 . 29193) ( +\TEDIT.PARSE.SEARCHSTRING 29195 . 31214))))) STOP diff --git a/library/tedit/TEDIT-FIND.LCOM b/library/tedit/TEDIT-FIND.LCOM index 9c1647ac635906d36fb56157337c98b8e447ffd9..6ef8b1305dc9d938e2ae50c3ef6c53672c3c94c8 100644 GIT binary patch delta 1091 zcmZvb%}*0S7{+&}Eru$wrNx#aWKuw>fo8w@iA}m+&}{&*RB4oGsBI{$dwXD07E@AG?}-SxpQgHI-V zAUiNRy*j{93xO;qTZ{8cv$wMuxVQij3C>Y874$%}8#0IW3?1g!FdcHk z^m6u~A^Tuyd8IduzB`=gX6FgS8Ew~R7jWy)m5~wH*zfgv-7qtK7f(6nUWRph%zZ=3 zh%6>#J}FDM=oqn@xMnO4vNXen&?-rxh|ye~{Ec+m8|P_y8LU@pG0;>1d4PgGI-67D z1VNah&G<>A2|kmTYD*x#i8g76+sqC0DWPe*?fgTz&@Bq;t`&f|@~7a4@^LXf+fsEsRh){eJJ+^;=Pc;C zz1u|bAn!n*>}_je43Ooy%8M9TGzn@M?{Y4eC5Anx*}xIIX_~5^2>gUn%OG^L%I~ii z=_wt(2S*fS;RQ(hU~eJP_LJ;?tAYK;B$T2&5Ja^s6%C>eQ8aA4BOak)M<+EC$JT$? z`jxZjCOqRoE^RKQfoAGk52dcRd?f?J) delta 1089 zcmaKrOH30%9L9IIE#O9^Jj7B;GFenwBF#S9ZdM9Nb6uQq(~7(h$`|K6YWAM6ugV~)U$x2X*UNS<23Z^JK+c1 z*2Xw%s2yI0_R>x`gI^^)ZrDczFDuj0F>%-iurP*U2LCzKV{uGKXv5F)Po4+bCr)Y8Qp^pfnf^%fLmSXj5gu$-!SlC&4*k zhmLB{mM6o(5De>PhN^Ma2n?&MiL+dZQ+muF7UE)2r#9o58aUbttg9_?y;LO2e)Yf) zf9NcBtDHAg6aPOp!!oF17J~L{?3ykxGz;X2GO0wy72ttC2@BlP+p9qfpY^Lv-sd_L zP?U}elg&mAVhUvl8ZVq-B_oI#Tb0p)fWvG zZz-byU$u3wwIgGIz)Mzr0BM!JjG~gO2Z+5;F{QB35e5drk??Q@enUm4^qt zfc1bY-39gHF7DpckV-Tyl}hfT;8HEnbqz>T4>bJ*=nG6;>I%OfUO3)+yZsdrRp>Vb zA{8fh;zaBAGrxd~l2XQ+euKUQaBUI;VlH_acH(uK^Y!sOf-dbwC&BY*HwcFt^}T-p zqv(tbDN*fC+=xar43~z%BMkInBcY%-!%yw?@QG;^{|*~E9>EtKIot(Fv-uhg!qI>f h5F*l;te|^XEs8d)C`cofX#wNl;6}TtkTT!V{RZIG6|MjP diff --git a/library/tedit/TEDIT-FNKEYS b/library/tedit/TEDIT-FNKEYS index 266fcfad2..7fb152d97 100644 --- a/library/tedit/TEDIT-FNKEYS +++ b/library/tedit/TEDIT-FNKEYS @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "15-Mar-2024 14:07:55" {WMEDLEY}tedit>TEDIT-FNKEYS.;74 32961 +(FILECREATED "24-Apr-2024 23:43:22" {WMEDLEY}tedit>TEDIT-FNKEYS.;75 33073 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.LCASE.SEL \TEDIT.UCASE.SEL \TEDIT.KEY.FIND) + :CHANGES-TO (FNS \TEDIT.KEY.FIND) - :PREVIOUS-DATE " 9-Mar-2024 11:47:31" {WMEDLEY}tedit>TEDIT-FNKEYS.;69) + :PREVIOUS-DATE "15-Mar-2024 14:07:55" {WMEDLEY}tedit>TEDIT-FNKEYS.;74) (PRETTYCOMPRINT TEDIT-FNKEYSCOMS) @@ -164,7 +164,8 @@ NIL TEXTOBJ]) (\TEDIT.KEY.FIND - [LAMBDA (TEXTSTREAM TEXTOBJ SEL AGAIN BACKWARD) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (TSTREAM TEXTOBJ SEL AGAIN BACKWARD) (* ; "Edited 24-Apr-2024 23:39 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 9-Mar-2024 11:36 by rmk") (* ; "Edited 29-Feb-2024 17:06 by rmk") (* ; "Edited 27-Feb-2024 00:22 by rmk") @@ -179,7 +180,8 @@ (* ;; "AGAIN suppresses confirmation of a previous target, but also assumes that the user is not interested in trying again at the current character position--starts forward or backward from there.") - (LET ((TEXTOBJ (TEXTOBJ TEXTSTREAM)) + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (LET ((TEXTOBJ (TEXTOBJ TSTREAM)) TARGET CH) (* ;  "Case sensitive search, with * and # wildcards") @@ -204,11 +206,11 @@ then (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Searching backward for %"" TARGET "%"") T) - (TEDIT.FIND.BACKWARD TEXTOBJ (MKSTRING TARGET) + (TEDIT.FIND.BACKWARD TSTREAM (MKSTRING TARGET) NIL NIL T) else (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Searching for %"" TARGET "%"") T) - (TEDIT.FIND TEXTOBJ (MKSTRING TARGET) + (TEDIT.FIND TSTREAM (MKSTRING TARGET) NIL NIL T))) (COND (CH (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "%"" TARGET "%" found") @@ -609,21 +611,21 @@ (TEDIT.SETSYNTAX (CAR ENTRY) (CADR ENTRY] (DECLARE%: DONTCOPY - (FILEMAP (NIL (5609 23249 (\TEDIT.BOLD.SEL.OFF 5619 . 5957) (\TEDIT.BOLD.SEL.ON 5959 . 6287) ( -\TEDIT.CENTER.SEL 6289 . 7805) (\TEDIT.CENTER.SEL.REV 7807 . 8103) (\TEDIT.DEFAULTS.CARET 8105 . 8598) - (\TEDIT.DEFAULTSSEL 8600 . 9047) (\TEDIT.SETDEFAULT.FROM.SEL 9049 . 9726) (\TEDIT.KEY.FIND 9728 . -14757) (\TEDIT.GET.TARGET.STRING 14759 . 15623) (\TEDIT.KEY.FIND.BACKWARD 15625 . 15930) ( -\TEDIT.FINDAGAIN.BACKWARD 15932 . 16343) (\TEDIT.FINDAGAIN 16345 . 16636) (\TEDIT.ITALIC.SEL.OFF 16638 - . 16890) (\TEDIT.ITALIC.SEL.ON 16892 . 17085) (\TEDIT.LARGERSEL 17087 . 17375) (\TEDIT.LCASE.SEL -17377 . 18564) (\TEDIT.SHOWCARETLOOKS 18566 . 20166) (\TEDIT.SMALLERSEL 20168 . 20459) ( -\TEDIT.SUBSCRIPTSEL 20461 . 20664) (\TEDIT.SUPERSCRIPTSEL 20666 . 20870) (\TEDIT.UCASE.SEL 20872 . -22003) (\TEDIT.UNDERLINE.SEL.OFF 22005 . 22203) (\TEDIT.UNDERLINE.SEL.ON 22205 . 22401) ( -\TEDIT.STRIKEOUT.SEL.ON 22403 . 22599) (\TEDIT.STRIKEOUT.SEL.OFF 22601 . 22799) (\TEDIT.SELECT.ALL -22801 . 23024) (\TEDIT.KEY.SUBSTITUTE 23026 . 23247)) (23321 29730 (\TEDIT.BOLD.CARET.OFF 23331 . -23866) (\TEDIT.BOLD.CARET.ON 23868 . 24400) (\TEDIT.ITALIC.CARET.OFF 24402 . 24939) ( -\TEDIT.ITALIC.CARET.ON 24941 . 25484) (\TEDIT.LARGER.CARET 25486 . 26021) (\TEDIT.SMALLER.CARET 26023 - . 26560) (\TEDIT.SUBSCRIPT.CARET 26562 . 27103) (\TEDIT.SUPERSCRIPT.CARET 27105 . 27647) ( -\TEDIT.UNDERLINE.CARET.OFF 27649 . 28189) (\TEDIT.UNDERLINE.CARET.ON 28191 . 28729) ( -\TEDIT.STRIKEOUT.CARET.OFF 28731 . 29271) (\TEDIT.STRIKEOUT.CARET.ON 29273 . 29728)) (29799 30501 ( -\TK.DESCRIBEFONT 29809 . 30499))))) + (FILEMAP (NIL (5575 23361 (\TEDIT.BOLD.SEL.OFF 5585 . 5923) (\TEDIT.BOLD.SEL.ON 5925 . 6253) ( +\TEDIT.CENTER.SEL 6255 . 7771) (\TEDIT.CENTER.SEL.REV 7773 . 8069) (\TEDIT.DEFAULTS.CARET 8071 . 8564) + (\TEDIT.DEFAULTSSEL 8566 . 9013) (\TEDIT.SETDEFAULT.FROM.SEL 9015 . 9692) (\TEDIT.KEY.FIND 9694 . +14869) (\TEDIT.GET.TARGET.STRING 14871 . 15735) (\TEDIT.KEY.FIND.BACKWARD 15737 . 16042) ( +\TEDIT.FINDAGAIN.BACKWARD 16044 . 16455) (\TEDIT.FINDAGAIN 16457 . 16748) (\TEDIT.ITALIC.SEL.OFF 16750 + . 17002) (\TEDIT.ITALIC.SEL.ON 17004 . 17197) (\TEDIT.LARGERSEL 17199 . 17487) (\TEDIT.LCASE.SEL +17489 . 18676) (\TEDIT.SHOWCARETLOOKS 18678 . 20278) (\TEDIT.SMALLERSEL 20280 . 20571) ( +\TEDIT.SUBSCRIPTSEL 20573 . 20776) (\TEDIT.SUPERSCRIPTSEL 20778 . 20982) (\TEDIT.UCASE.SEL 20984 . +22115) (\TEDIT.UNDERLINE.SEL.OFF 22117 . 22315) (\TEDIT.UNDERLINE.SEL.ON 22317 . 22513) ( +\TEDIT.STRIKEOUT.SEL.ON 22515 . 22711) (\TEDIT.STRIKEOUT.SEL.OFF 22713 . 22911) (\TEDIT.SELECT.ALL +22913 . 23136) (\TEDIT.KEY.SUBSTITUTE 23138 . 23359)) (23433 29842 (\TEDIT.BOLD.CARET.OFF 23443 . +23978) (\TEDIT.BOLD.CARET.ON 23980 . 24512) (\TEDIT.ITALIC.CARET.OFF 24514 . 25051) ( +\TEDIT.ITALIC.CARET.ON 25053 . 25596) (\TEDIT.LARGER.CARET 25598 . 26133) (\TEDIT.SMALLER.CARET 26135 + . 26672) (\TEDIT.SUBSCRIPT.CARET 26674 . 27215) (\TEDIT.SUPERSCRIPT.CARET 27217 . 27759) ( +\TEDIT.UNDERLINE.CARET.OFF 27761 . 28301) (\TEDIT.UNDERLINE.CARET.ON 28303 . 28841) ( +\TEDIT.STRIKEOUT.CARET.OFF 28843 . 29383) (\TEDIT.STRIKEOUT.CARET.ON 29385 . 29840)) (29911 30613 ( +\TK.DESCRIBEFONT 29921 . 30611))))) STOP diff --git a/library/tedit/TEDIT-FNKEYS.LCOM b/library/tedit/TEDIT-FNKEYS.LCOM index deacbf47f0b5aee77418d17069a125b1c9a7f0ac..0ecb73da61354f384929a959c238afc2447ad087 100644 GIT binary patch delta 929 zcmZuvO>fgc5KV$gleFSglp>^Rv?7p5#PY7ac48z{H*s2%#J23M8YC`l6KDk_O&TOV zgz^_ad*i@?ztAfu#E;;@ou9!tiK8IugLiiJ&71dT_xI?>=+n_XrdRBXafPW&2c}uN zW-&&fL{5jVFV0`}doUb;Y^BRnUWPnbMN?*R)uM<#8TXg){@aW3Wzm9X!fCidX*o}o zrt3A}d;p|**lxorg`y|~ddCxNb1kF@lJ9Q4y!x6ctra2>I(DZF>9ZTD)Y@(? zh2Kf4Cx5NKPw&boTgLy#?018kiLvOwKZ=|-XnGCiR)f&*1R@AsPheJqy6@F(44E#6 zxxyA*mNwn)tWq`Qm)wq8RTl)2BNRMP+P>e4fN`GmIt&_UK0X7+xcrkVK1R0xyE00X zuC!WR0A|ytW(_(mbm@BgKu!5Me|u{1C0I9Bz{;LoZyniT1E^-MRI%%fQnoZoRSkke zA)GD_!4IHD6aC4oj6~DEBiyNnU@)`yTadl0(=%NE-hbT zRTFSHPF=XZ2h8N)`C-S#X&E&L9It_{8}abC3Zc7yAn+0DS!g>=0X0*OHnuaoI$Q9r zMjM45zB+tORUkzIgW&|858n)W1XCF?9?>JwsYmTTQjs!$aO z%M+Sc6$v(^dgu7$u+?lprwtN_?~C!?hliE3X7{XcR6A+a+6AvuueA!t%|@&FmdRS- zO{aTw*nYV=tQ7c9;obp=(tizTUc-k;(Ch2B)*En$@}-LB!Bw0r%MvtdJ#2p+-;lE6 zM#=RYJ94bVDe|wvGT#!`XH;O+)Cq43>$g4IiXAz2Ja~o>H<2r8fqxQK7exuoE6zz? zHS&z`g0L~An^}?nx_|Q`Gx>R%|CySf5nf~_CZ@Oex0!dsF3-+p@g2`zE~sWI9`6R# zelMo-RdK;&OanXcZ7TsrbQlic2T|Gb+^3FhMGhV)V|K~i?~|!%@{_rhNrUq9xy5DG zNYyK05q%EKP-5`!b88=wJX8&%pd2P)k%1SH8lt;N#g9|I6(+Gmd>B1qo*_NIEm{c z7Br1tig&66urelU*nB?;wjbkXriKZajbkTn-~-hS7{-WO0-@s<(NM9Uok}5ccXlxZ zri15{63Ahi^Gg}fl;KKrT<<tedit>TEDIT-HISTORY.;154 33348 +(FILECREATED " 8-May-2024 12:35:10" {WMEDLEY}tedit>TEDIT-HISTORY.;166 35795 :EDIT-BY rmk - :CHANGES-TO (FNS TEDIT.UNDO) + :CHANGES-TO (FNS \TEDIT.COMPOSITE.EVENT TEDIT.UNDO \TEDIT.UNDO.COMPOSITE TEDIT.REDO + \TEDIT.UNDO1 \TEDIT.UNDO.UNDO \TEDIT.REDO.COMPOSITE) + (VARS TEDIT-HISTORYCOMS) - :PREVIOUS-DATE "15-Mar-2024 13:55:42" {WMEDLEY}tedit>TEDIT-HISTORY.;153) + :PREVIOUS-DATE "30-Apr-2024 22:55:05" {WMEDLEY}tedit>TEDIT-HISTORY.;155) (PRETTYCOMPRINT TEDIT-HISTORYCOMS) @@ -23,13 +25,15 @@ (COMS (* ;; "History-list maintenance functions") - (FNS \TEDIT.HISTORYADD \TEDIT.CUMULATE.EVENTS)) + (FNS \TEDIT.HISTORYADD \TEDIT.CUMULATE.EVENTS \TEDIT.COMPOSITE.EVENT)) (COMS (* ;; "Specialized UNDO & REDO functions.") (FNS TEDIT.UNDO \TEDIT.UNDO1 TEDIT.REDO \TEDIT.UNDO.UNDO) - (FNS \TEDIT.UNDO.INSERTION \TEDIT.UNDO.DELETION \TEDIT.UNDO.MOVE \TEDIT.UNDO.REPLACE) - (FNS \TEDIT.REDO.INSERTION \TEDIT.REDO.REPLACE \TEDIT.REDO.MOVE)))) + (FNS \TEDIT.UNDO.INSERTION \TEDIT.UNDO.DELETION \TEDIT.UNDO.MOVE \TEDIT.UNDO.REPLACE + \TEDIT.UNDO.COMPOSITE) + (FNS \TEDIT.REDO.INSERTION \TEDIT.REDO.REPLACE \TEDIT.REDO.MOVE \TEDIT.REDO.COMPOSITE)) + )) (DECLARE%: EVAL@COMPILE DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE @@ -144,7 +148,8 @@ (DEFINEQ (\TEDIT.HISTORYADD - [LAMBDA (TEXTOBJ EVENT) (* ; "Edited 3-Mar-2024 12:15 by rmk") + [LAMBDA (TEXTOBJ EVENT) (* ; "Edited 30-Apr-2024 22:51 by rmk") + (* ; "Edited 3-Mar-2024 12:15 by rmk") (* ; "Edited 19-Feb-2024 12:09 by rmk") (* ; "Edited 30-Dec-2023 22:19 by rmk") (* ; "Edited 11-Aug-2023 14:25 by rmk") @@ -158,7 +163,7 @@ (* ;; "Not sure what should happen if the second one is to the right of the first, deleting forwards. Old code seemed to treat those as separate events, and only the second/right one could be undone.") - (CL:UNLESS (EQ 'DON'T (GETTOBJ TEXTOBJ TXTHISTORY)) + (CL:UNLESS (GETTOBJ TEXTOBJ TXTHISTORYINACTIVE) (if (type? TEDITHISTORYEVENT EVENT) then (CL:WHEN (MEMB (GETTH EVENT THACTION) (CONSTANT (LIST :Put :Get))) (* ; @@ -224,6 +229,20 @@ TEXTOBJ)) (SETTH EVENT1 THLEN (fetch (SELPIECES SPLEN) of (GETTH EVENT1 THDELETEDPIECES))) EVENT1]) + +(\TEDIT.COMPOSITE.EVENT + [LAMBDA (TEXTOBJ PREVEVENTS) (* ; "Edited 8-May-2024 12:34 by rmk") + + (* ;; "Makes sure that all the events in TEXTOBJ in front of PREVEVENTS show up as a single event, so they will undo as a unitary action. Nothing happens if there is only one, otherwise they are collected into a single :Composite event.") + + (for ETAIL on (GETTOBJ TEXTOBJ TXTHISTORY) until (EQ ETAIL PREVEVENTS) collect (CAR ETAIL) + finally (CL:WHEN (CDR $$VAL) (* ; + "Multiple new events go into a single composite.") + (SETTOBJ TEXTOBJ TXTHISTORY (CONS (create TEDITHISTORYEVENT + THACTION _ :Composite + THOLDINFO _ $$VAL) + PREVEVENTS))) + (RETURN (CAR (FGETTOBJ TEXTOBJ TXTHISTORY]) ) @@ -233,7 +252,8 @@ (DEFINEQ (TEDIT.UNDO - [LAMBDA (TEXTOBJ) (* ; "Edited 20-Mar-2024 11:04 by rmk") + [LAMBDA (TEXTOBJ NOUNDOUNDO) (* ; "Edited 8-May-2024 11:16 by rmk") + (* ; "Edited 20-Mar-2024 11:04 by rmk") (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 7-Mar-2024 12:48 by rmk") (* ; "Edited 3-Mar-2024 20:02 by rmk") @@ -267,27 +287,29 @@ (\TEDIT.SHOWSEL SEL NIL) (\TEDIT.UNDO1 TEXTOBJ EVENT) - (* ;; "Get the event that undid EVENT") + (* ;; "Get the event that undid EVENT ") + (\TEDIT.COMPOSITE.EVENT TEXTOBJ PREVEVENTS) (SETQ UNDOEVENT (\TEDIT.POPEVENT TEXTOBJ)) - (FSETTOBJ TEXTOBJ TXTHISTORY PREVEVENTS) (CL:WHEN [OR (NULL PREVEVENTS) (AND (type? TEDITHISTORYEVENT (CAR (LISTP PREVEVENTS))) (MEMB (GETTH (CAR PREVEVENTS) THACTION) (CONSTANT (LIST :Get :Put] (SETTOBJ TEXTOBJ \DIRTY NIL)) + (CL:UNLESS NOUNDOUNDO - (* ;; "The undone list keeps the event that would undo the undoing, the event that was just undone, and the history event that would be undone next (by M-u). This is so that M-U can undo the undoing.") + (* ;; "The undone list keeps the event that would undo the undoing, the event that was just undone, and the history event that would be undone next (by M-u). This is so that M-U can undo the undoing.") - (push (FGETTOBJ TEXTOBJ TXTHISTORYUNDONE TEXTOBJ) - (LIST (CAR PREVEVENTS) - UNDOEVENT EVENT)) + (push (FGETTOBJ TEXTOBJ TXTHISTORYUNDONE TEXTOBJ) + (LIST (CAR PREVEVENTS) + UNDOEVENT EVENT))) (\TEDIT.FIXSEL SEL TEXTOBJ) (\TEDIT.SHOWSEL SEL T)))]) (\TEDIT.UNDO1 - [LAMBDA (TEXTOBJ EVENT) (* ; "Edited 4-Mar-2024 14:55 by rmk") + [LAMBDA (TEXTOBJ EVENT) (* ; "Edited 7-May-2024 23:10 by rmk") + (* ; "Edited 4-Mar-2024 14:55 by rmk") (* ; "Edited 16-Jul-2023 11:14 by rmk") (* ; "Edited 30-May-2023 23:50 by rmk") (* ; "Edited 25-May-2023 00:33 by rmk") @@ -315,6 +337,7 @@ (:Closefile (* ; "Closes an included file") (CL:WHEN (STREAMP (GETTH EVENT THOLDINFO)) (CLOSEF? (GETTH EVENT THOLDINFO)))) + (:Composite (\TEDIT.UNDO.COMPOSITE TEXTOBJ EVENT)) ((LIST :Get :Put) (* ;  "He did a GET or PUT-- not undoable.") (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "You can't undo a " (GETTH EVENT THACTION)) @@ -334,7 +357,8 @@ T]) (TEDIT.REDO - [LAMBDA (TEXTOBJ) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (TEXTOBJ) (* ; "Edited 7-May-2024 23:13 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 4-Mar-2024 21:33 by rmk") (* ; "Edited 2-Mar-2024 09:41 by rmk") (* ; "Edited 21-Dec-2023 11:57 by rmk") @@ -398,6 +422,7 @@ (\TEDIT.REDO.MOVE TEXTOBJ EVENT (GETTH EVENT THLEN) (IMAX 1 (TEDIT.GETPOINT NIL SEL)) (GETTH EVENT THFIRSTPIECE))) + (:Composite (\TEDIT.REDO.COMPOSITE TEXTOBJ EVENT SEL)) ((LIST :Get :Put) (* ; "Why can't you redo a get or put ?") (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "You can't redo a " (GETTH EVENT THACTION)) T T)) @@ -512,6 +537,13 @@ EVENT)) (SETTH (\TEDIT.LASTEVENT TEXTOBJ) THACTION ACTION]) + +(\TEDIT.UNDO.COMPOSITE + [LAMBDA (TEXTOBJ EVENT) (* ; "Edited 7-May-2024 23:17 by rmk") + + (* ;; "A composite event is a group of other events that are to be undone at the same time.") + + (for E in (GETTH EVENT THOLDINFO) do (\TEDIT.UNDO1 TEXTOBJ E]) ) (DEFINEQ @@ -559,12 +591,18 @@ (\TEDIT.FIXSEL SCR2 TEXTOBJ) (\TEDIT.SET.SEL.LOOKS SCR2 'MOVE) (TEDIT.MOVE SCR2 (FGETTOBJ TEXTOBJ SEL]) + +(\TEDIT.REDO.COMPOSITE + [LAMBDA (TEXTOBJ EVENT SEL) (* ; "Edited 7-May-2024 23:12 by rmk") + (HELP 'Redo-composite]) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4834 5855 (\TEDIT.HISTORYEVENT.DEFPRINT 4844 . 5853)) (6621 12187 (\TEDIT.HISTORYADD -6631 . 10707) (\TEDIT.CUMULATE.EVENTS 10709 . 12185)) (12240 26023 (TEDIT.UNDO 12250 . 15439) ( -\TEDIT.UNDO1 15441 . 18506) (TEDIT.REDO 18508 . 23783) (\TEDIT.UNDO.UNDO 23785 . 26021)) (26024 30162 -(\TEDIT.UNDO.INSERTION 26034 . 26791) (\TEDIT.UNDO.DELETION 26793 . 27480) (\TEDIT.UNDO.MOVE 27482 . -29257) (\TEDIT.UNDO.REPLACE 29259 . 30160)) (30163 33325 (\TEDIT.REDO.INSERTION 30173 . 31123) ( -\TEDIT.REDO.REPLACE 31125 . 32366) (\TEDIT.REDO.MOVE 32368 . 33323))))) + (FILEMAP (NIL (5105 6126 (\TEDIT.HISTORYEVENT.DEFPRINT 5115 . 6124)) (6892 13612 (\TEDIT.HISTORYADD +6902 . 11083) (\TEDIT.CUMULATE.EVENTS 11085 . 12561) (\TEDIT.COMPOSITE.EVENT 12563 . 13610)) (13665 +27981 (TEDIT.UNDO 13675 . 17039) (\TEDIT.UNDO1 17041 . 20278) (TEDIT.REDO 20280 . 25741) ( +\TEDIT.UNDO.UNDO 25743 . 27979)) (27982 32444 (\TEDIT.UNDO.INSERTION 27992 . 28749) ( +\TEDIT.UNDO.DELETION 28751 . 29438) (\TEDIT.UNDO.MOVE 29440 . 31215) (\TEDIT.UNDO.REPLACE 31217 . +32118) (\TEDIT.UNDO.COMPOSITE 32120 . 32442)) (32445 35772 (\TEDIT.REDO.INSERTION 32455 . 33405) ( +\TEDIT.REDO.REPLACE 33407 . 34648) (\TEDIT.REDO.MOVE 34650 . 35605) (\TEDIT.REDO.COMPOSITE 35607 . +35770))))) STOP diff --git a/library/tedit/TEDIT-HISTORY.LCOM b/library/tedit/TEDIT-HISTORY.LCOM index e86bb9ad3f0e8693d562556a0cf9606dfa74137b..ad98e2047a2301218ba93ece496e2b0e5f70f6a4 100644 GIT binary patch delta 2092 zcmZ`)O>7fK6yDhlA=!k)uGfS(KfE~n#GpjGGy7vZm1>i0>Lvb3g>s`l2;KRaWikj{31lBj%BmZ_-<@$EDEJFE9KIQ4aTD}ab(KMniI2Tn%RZu z3tW<;@X1`xoXnahKYjHA{Q(WM={gY2NN98cf$2RJP$ zYf%yCHz+1(F_Gr>_E*~Yng~-ke$LN*TFmk?9r>xX1 zCn)NYb}@VYUm1>5AzpWvU0Oq^vg@bw4bj!XP63Ef$?c4ymk}{J85c)pKn2rITUoF` z0VhE&ON(q|Cuhvz%RrPmyqYgD62!zht?5T?ajZbT;E>iOZgXr;8L>Qe zr5+_2z3vL1ZE(NPpWBLPnnHUYeXZSCO;`GBQBI@m(Q}bVq_*1(M5I8~N{LR;*1Wr% z3veSC>wYyAGljXLnFXvQeASe7!qF&3{nDJpoSPf7Ejw$1qRTFsL6Q9nf$e&%^%45C z{f%DTkC-v9fo5vlp^-~jsawGfCkm!l#RSsmx8mFAV>;CFH_defX;0@R-q7gpuY|gY zo`8u$ej;rHP7p`6566wVN|XHs;MQ%%zUZSwZ^S`C)YQ)8?--&yWaH_%o{7yL9O8Fupak; z^!cIcvYP>w6}6WE6&r2_R4n@{5?B0(&5gJ6EEqt%2feD$p`Fq&Nia+ua0%;iF1W;K z0+(n`iYo7fFzQzmY^uy(Ts*h}^9#!t$_wR1Hjmg`Qi)E#l6nMHHY(pqf3)^Cr=GPY zw~@$T()EE}Z2+-)O4sleKQEym;=CM$c;VikZgn)VNMZF_S?hbohrJQg92kArci^yt ztl)N*b_ZitVF}2X*%|g!h1qgxY4kn6VN|XT{)!IzAU!vJV{AS-(+EZm!T30cbP*2I kTaZK|eGG@M5AECIKWq+?jidcTsUH8Z*~3`n>`)K?KT~WNuK)l5 delta 1390 zcmZuxPi)&%7|*k#R&%o^Z5&6-O7-SOT3pn~e(yO>(o5R>S-j;>*SKp13{k1kmT9XB z6r>#x+PEXK?*ik(PH?0$h!gZQBoKcjn2S6d`}}*Kf8Y0h zzt4Wqd{+BtGfwoS=Js1lL?;XzMo~A5qI<8Ck@8Kwf2dq>sukPGZnP?G z+}p)!ZKKh^eEp``w-6NtmihnVQ|Gme;E*oD9EMY0!qQ!bM?ml3_|I%fn5C z=}}z`7uVLSm+baNXQ{#|uxglN2cbpNEHa{EssCOkY*I~vH`F=zuJAFEUlBtgp)?WV z*AMk8-tzR0TMoC7z%V?SOok29@&kvNxLIwk@?I&muv6V~+N`EmG1&g!FQ@H@Jyp~YTyHD|xkB-S{6hu9eB*B$- z>#T!=qFfQobocj36~W&pRu%#gG#vVqD~ks5mVPY8u08!qynPV*1ujb+_(n>EOBdui z{3KcL4{|P`#`&wMRBC8QEG5V6lH|E!_x$B*ER-Qe0lzjdzf*5-cB*{b3^Iah_Lhej z79Am*HXqH+tYbTkD)#L3Y{Z3t#G72WH??{yXdD~k@-kmFe)=;?Vwzhr(!|hBV37hh zZ8!2d>cP*Ef8fE%n+s;1r+A;l+IqXW=B%yTEeBJR;BvcFUU4w7a@*T+0WQtV3#J9{&NP+#;lPW)3iLHRoY|9?cLt+>_pns=bv{5DxIBAWiwrkDJuL0i zr#vGLLjN9v{RQ`CUqavWyDY^+OKTcPs8^Z)QD#wsOd|gCZ@O4U1Yp4(9YWw<7)8BD#B?y}1AFqmgZ||Pn$GsbS z*Sj~myZkrBe^-pl|ErP|X+94q8F&9v{+MvL<{u00XJ>vxQBA{{a=Y2VnMJ(3jNy}o nmyrZtA_X2Tq~W>$w3tp$^0Zp3gW=-50=Ls?L6h8X(@Eifqwio1 diff --git a/library/tedit/TEDIT-LOOKS b/library/tedit/TEDIT-LOOKS index b5bcc34a8..13ed6820b 100644 --- a/library/tedit/TEDIT-LOOKS +++ b/library/tedit/TEDIT-LOOKS @@ -1,12 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "27-Mar-2024 13:53:47" {WMEDLEY}TEDIT>TEDIT-LOOKS.;242 155521 +(FILECREATED " 6-May-2024 23:49:11" {WMEDLEY}TEDIT>TEDIT-LOOKS.;252 157408 :EDIT-BY rmk - :CHANGES-TO (FNS TEDIT.GET.PARALOOKS) + :CHANGES-TO (FNS \TEDIT.CONVERT.TO.FORMATTED TEDIT.PARALOOKS \TEDIT.CHANGE.LOOKS TEDIT.SUBLOOKS + TEDIT.SUBPARALOOKS \TEDIT.UNDO.LOOKS \TEDIT.UNDO.PARALOOKS) - :PREVIOUS-DATE "20-Mar-2024 11:06:29" {WMEDLEY}TEDIT>TEDIT-LOOKS.;241) + :PREVIOUS-DATE " 6-May-2024 12:36:00" {WMEDLEY}tedit>TEDIT-LOOKS.;249) (PRETTYCOMPRINT TEDIT-LOOKSCOMS) @@ -580,7 +581,8 @@ (\TEDIT.CARETLOOKS.VERIFY TEXTOBJ (\TEDIT.PARSE.CHARLOOKS.LIST LOOKS DATUM TEXTOBJ]) (TEDIT.COPY.LOOKS - [LAMBDA (STREAM SOURCE DEST) (* ; "Edited 17-Mar-2024 00:27 by rmk") + [LAMBDA (STREAM SOURCE DEST) (* ; "Edited 29-Apr-2024 13:00 by rmk") + (* ; "Edited 17-Mar-2024 00:27 by rmk") (* ; "Edited 9-Feb-2024 11:42 by rmk") (* ; "Edited 18-Apr-2023 23:53 by rmk") (* ; "Edited 22-Oct-2022 15:27 by rmk") @@ -596,12 +598,12 @@ then (\TEDIT.CHTOPC SOURCE TEXTOBJ) elseif (type? SELECTION SOURCE) then (\TEDIT.CHTOPC (fetch (SELECTION CH#) of SOURCE) - (fetch (SELECTION SELTEXTOBJ) of SOURCE)) + (TEXTOBJ SOURCE)) else (\ILLEGAL.ARG SOURCE] (COND ((type? SELECTION DEST) (* ;  "make sure that the destination selection is in this document") - (CL:UNLESS (EQ TEXTOBJ (fetch (SELECTION SELTEXTOBJ) of DEST)) + (CL:UNLESS (EQ TEXTOBJ (TEXTOBJ DEST)) (\LISPERROR "Destination selection is not in stream " STREAM))) (T (* ;  "set the LEN arg for TEDIT.LOOKS to be 1 since we just have a char pos.") @@ -992,7 +994,9 @@ (\TEDIT.UNIQUIFY.ALL TEXTOBJ))))]) (\TEDIT.CONVERT.TO.FORMATTED - [LAMBDA (TEXTOBJ START END) (* ; "Edited 20-Mar-2024 11:00 by rmk") + [LAMBDA (TSTREAM START END) (* ; "Edited 6-May-2024 23:49 by rmk") + (* ; "Edited 29-Apr-2024 10:42 by rmk") + (* ; "Edited 20-Mar-2024 11:00 by rmk") (* ; "Edited 17-Mar-2024 12:06 by rmk") (* ; "Edited 15-Mar-2024 13:53 by rmk") (* ; "Edited 6-Jan-2024 15:10 by rmk") @@ -1009,49 +1013,60 @@ (* ;; "Using BIN for the main iteration is a little tricky when TEDIT.RPLCHARCODE is used to make the single-character change. RPLCHARCODE can split the pieces and parameters in the TSTREAM that are used to drive the high-speed (BINABLE) operation. It should perhaps figure out how to fix the stream internally, but for now the \TEXTSETFILEPTR gets things consistent again.") - (TEXTOBJ! TEXTOBJ) - (CL:UNLESS (OR (FGETTOBJ TEXTOBJ FORMATTEDP) - (ZEROP (FGETTOBJ TEXTOBJ TEXTLEN))) - (CL:UNLESS START (SETQ START 1)) - (CL:UNLESS END - (SETQ END (FGETTOBJ TEXTOBJ TEXTLEN))) - (FSETTOBJ TEXTOBJ \DIRTY T) - (CL:WHEN (IGEQ END START) - (for CHNO (TSTREAM _ (FGETTOBJ TEXTOBJ STREAMHINT)) from START - first - (* ;; "CHNO is in characters, one more than stream positions") - - (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 START)) - do (SELCHARQ (BIN TSTREAM) - (LF - (* ;; "Linefeed not preceded by CR, replace by EOL and mark it paragraph-last. \TEXTSETFILEPTR to make sure that the next BIN does what we want") - - (TEDIT.RPLCHARCODE TEXTOBJ CHNO (CHARCODE EOL)) - (FSETPC (\TEDIT.CHTOPC CHNO TEXTOBJ) - PPARALAST T) - (\TEDIT.TEXTSETFILEPTR TSTREAM CHNO)) - (CR - (* ;; + (LET [(TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM] + (CL:UNLESS (OR (FGETTOBJ TEXTOBJ FORMATTEDP) + (ZEROP (FGETTOBJ TEXTOBJ TEXTLEN))) + (CL:UNLESS START (SETQ START 1)) + (CL:UNLESS END + (SETQ END (FGETTOBJ TEXTOBJ TEXTLEN))) + (CL:WHEN (IGEQ END START) + [for CHNO CHANGED CRLF from START first + (* ;; + "CHNO is in characters, one more than stream positions") + + (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 START)) + do (SELCHARQ (BIN TSTREAM) + (LF + (* ;; + "Linefeed not preceded by CR, replace by EOL and mark it paragraph-last. What about FORM?") + + (TEDIT.RPLCHARCODE TEXTOBJ CHNO (CHARCODE EOL)) + (SETQ CHANGED T) + (FSETPC (\TEDIT.CHTOPC CHNO TEXTOBJ) + PPARALAST T)) + (CR + (* ;;  "Post-CR characters go to a separate piece, the CR piece is then paragraph-final") - (FSETPC (PREVPIECE (\TEDIT.ALIGNEDPIECE (ADD1 CHNO) - TEXTOBJ)) - PPARALAST T) - (CL:WHEN (EQ (CHARCODE LF) - (\TEDIT.TEXTPEEKBIN TSTREAM T)) - (* ; "DO WE EVER WANT TO SEE LF'S ??") + (FSETPC (PREVPIECE (\TEDIT.ALIGNEDPIECE (ADD1 CHNO) + TEXTOBJ)) + PPARALAST T) + (CL:WHEN (EQ (CHARCODE LF) + (\TEDIT.TEXTPEEKBIN TSTREAM T)) - (* ;; + (* ;;  "Linefeed following CR. Chop it off from whatever follows, and then delete it.") - (add END -1) (* ; "One less char to do") - (\TEDIT.DELETEPIECES (\TEDIT.SELPIECES (ADD1 CHNO) - (ADD1 CHNO)) - TEXTOBJ))) - NIL) repeatuntil (IGEQ CHNO END))) (* ; + (SETQ CRLF T) + (add END -1) (* ; "One less char to do") + (\TEDIT.DELETEPIECES (\TEDIT.SELPIECES (ADD1 CHNO) + (ADD1 CHNO)) + TEXTOBJ) + + (* ;; "We deleted the LF at CHNO, setting the fileptr there resynchronizes on the character just after it.") + + (\TEDIT.TEXTSETFILEPTR TSTREAM CHNO)) + (SETQ CHANGED T)) + NIL) (* ;  "Test END explicitly, because it may get reduced") - (FSETTOBJ TEXTOBJ FORMATTEDP T) - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ START END))]) + repeatuntil (IGEQ CHNO END) finally (FSETTOBJ TEXTOBJ FORMATTEDP T) + (CL:WHEN CHANGED + (FSETTOBJ TEXTOBJ \DIRTY T) + (\TEDIT.UPDATE.LINES (CL:IF CRLF + 'DELETION + 'APPEARANCE) + START + (ADD1 (IDIFFERENCE END START))))]))]) ) (DECLARE%: EVAL@COMPILE @@ -1245,7 +1260,8 @@ TEXTOBJ]) (TEDIT.SUBLOOKS - [LAMBDA (TEXTSTREAM OLDLOOKSLIST NEWLOOKSLIST) (* ; "Edited 17-Mar-2024 17:17 by rmk") + [LAMBDA (TEXTSTREAM OLDLOOKSLIST NEWLOOKSLIST) (* ; "Edited 6-May-2024 17:27 by rmk") + (* ; "Edited 17-Mar-2024 17:17 by rmk") (* ; "Edited 16-Mar-2024 10:03 by rmk") (* ; "Edited 13-Nov-2023 00:26 by rmk") (* ; "Edited 18-Apr-2023 23:53 by rmk") @@ -1256,37 +1272,38 @@ (LET ((TEXTOBJ (TEXTOBJ TEXTSTREAM))) (* ; "Turn off the selection, first.") (CL:UNLESS (ZEROP (FGETTOBJ TEXTOBJ TEXTLEN)) - [for PC CHANGEMADE SEL (OLDLOOKS _ (\TEDIT.PARSE.CHARLOOKS.LIST OLDLOOKSLIST NIL TEXTOBJ - )) + (for PC CHANGEMADE SEL FIRSTCHANGEDCHNO (NCHARSCHANGED _ 0) + (OLDLOOKS _ (\TEDIT.PARSE.CHARLOOKS.LIST OLDLOOKSLIST NIL TEXTOBJ)) (NEWLOOKS _ (\TEDIT.PARSE.CHARLOOKS.LIST NEWLOOKSLIST NIL TEXTOBJ)) (FEATURELIST _ (for A on OLDLOOKSLIST by (CDDR A) collect (CAR A))) - (CH# _ 1) inpieces (\TEDIT.FIRSTPIECE TEXTOBJ) as CH# from 1 - by (PLEN PC) when (\TEDIT.SAMECLOOKS OLDLOOKS (PLOOKS PC) - FEATURELIST) do (CL:UNLESS CHANGEMADE - (SETQ CHANGEMADE T) - (SETQ SEL (FGETTOBJ TEXTOBJ SEL)) - (\TEDIT.SHOWSEL SEL NIL) - (FSETTOBJ TEXTOBJ \DIRTY T)) - - (* ;; + inpieces (\TEDIT.FIRSTPIECE TEXTOBJ) as CH# from 1 by (PLEN PC) + when (\TEDIT.SAMECLOOKS OLDLOOKS (PLOOKS PC) + FEATURELIST) do (CL:UNLESS CHANGEMADE + (SETQ CHANGEMADE T) + (SETQ SEL (FGETTOBJ TEXTOBJ SEL)) + (\TEDIT.SHOWSEL SEL NIL NIL TEXTOBJ) + (FSETTOBJ TEXTOBJ \DIRTY T)) + + (* ;;  "Note that we may be creating new looks each time, depending on what is there and what is changed.") - (FSETPC PC PLOOKS (\TEDIT.UNIQUIFY.CHARLOOKS - ( - \TEDIT.PARSE.CHARLOOKS.LIST - NEWLOOKSLIST - (PLOOKS PC) - TEXTOBJ) - TEXTOBJ)) - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ CH# - (+ CH# (PLEN PC))) - finally (CL:WHEN (FGETTOBJ TEXTOBJ \WINDOW) - (\TEDIT.UPDATE.SCREEN TEXTOBJ) (* ; "Update the screen image") + (FSETPC PC PLOOKS (\TEDIT.UNIQUIFY.CHARLOOKS + (\TEDIT.PARSE.CHARLOOKS.LIST + NEWLOOKSLIST + (PLOOKS PC) + TEXTOBJ) + TEXTOBJ)) + + (* ;; "This goes piece by piece, each one adding to the collection of dirty lines. We keep track of the first and last changes") + + (CL:UNLESS FIRSTCHANGEDCHNO (SETQ FIRSTCHANGEDCHNO CH#)) + (add NCHARSCHANGED (PLEN PC)) + finally (CL:WHEN (AND CHANGEMADE (\TEDIT.PRIMARYW TEXTOBJ)) + (* ; "Update the screen image") + (\TEDIT.UPDATE.LINES TEXTOBJ 'APPEARANCE FIRSTCHANGEDCHNO NCHARSCHANGED) (\TEDIT.FIXSEL SEL TEXTOBJ) - (\TEDIT.SHOWSEL SEL T)) - (RETURN (CL:IF CHANGEMADE - 'Done - 'NoChangesMade)])]) + (\TEDIT.SHOWSEL SEL T NIL TEXTOBJ)) + (RETURN CHANGEMADE)))]) (TEDIT.FINDLOOKS [LAMBDA (TEXTSTREAM OLDLOOKSLIST CH#) (* ; "Edited 17-Mar-2024 00:27 by rmk") @@ -1330,16 +1347,15 @@ (DEFINEQ (\TEDIT.CHANGE.LOOKS - [LAMBDA (TSTREAM NEWLOOKS SEL) (* ; "Edited 15-Mar-2024 14:23 by rmk") + [LAMBDA (TSTREAM NEWLOOKS SEL) (* ; "Edited 6-May-2024 17:26 by rmk") + (* ; "Edited 15-Mar-2024 14:23 by rmk") (* ; "Edited 11-Mar-2024 00:37 by rmk") - (* ; "Edited 9-Mar-2024 11:36 by rmk") (* ; "Edited 24-Feb-2024 12:33 by rmk") (* ; "Edited 22-Feb-2024 23:01 by rmk") (* ; "Edited 23-Dec-2023 15:24 by rmk") (* ; "Edited 31-Oct-2023 19:40 by rmk") (* ; "Edited 24-Jul-2023 17:20 by rmk") (* ; "Edited 28-May-2023 14:38 by rmk") - (* ; "Edited 11-May-2023 12:59 by rmk") (* ; "Edited 19-Apr-93 14:08 by jds") (* ;;; "Internal programmatic interface to changing character looks. DOES NOT CHANGE the current selection.") @@ -1489,8 +1505,7 @@ THFIRSTPIECE _ (fetch (SELPIECES SPFIRST) of SELPIECES) THOLDINFO _ OLDLOOKSLIST)) - (CL:WHEN (FGETTOBJ TEXTOBJ \WINDOW) - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ SEL) + (CL:WHEN (\TEDIT.PRIMARYW TEXTOBJ) (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) NIL) (SELECTQ INVISIBLE @@ -1511,7 +1526,7 @@ NIL) (\TEDIT.RESET.EXTEND.PENDING.DELETE (FGETTOBJ TEXTOBJ SEL) TEXTOBJ) - (\TEDIT.UPDATE.SCREEN TEXTOBJ) (* ; "Update the screen image") + (\TEDIT.UPDATE.LINES TEXTOBJ 'APPEARANCE SEL) (\TEDIT.FIXSEL (FGETTOBJ TEXTOBJ SEL) TEXTOBJ) (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) @@ -1699,7 +1714,8 @@ join (LIST PROPNAME PROP]) (\TEDIT.PARSE.PARALOOKS.LIST - [LAMBDA (NEWLOOKS OLDLOOKS) (* ; "Edited 17-Oct-2023 12:08 by rmk") + [LAMBDA (NEWLOOKS OLDLOOKS TEXTOBJ) (* ; "Edited 29-Apr-2024 11:03 by rmk") + (* ; "Edited 17-Oct-2023 12:08 by rmk") (* ; "Edited 9-May-2023 13:20 by rmk") (* ; "Edited 5-Sep-2022 15:39 by rmk") (* ; @@ -1764,9 +1780,8 @@ (SETQQ QUADD CENTERED)) (PROGN (* ;  "We got an illegal QUAD value. Use LEFT.") - (TEDIT.PROMPTPRINT (AND (BOUNDP 'TEXTOBJ) - (EVALV 'TEXTOBJ)) - (CONCAT "Illegal paragraph quad " QUADD ", replaced with LEFT.") + (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Illegal paragraph quad " QUADD + ", replaced with LEFT.") T) (SETQ QUADD 'LEFT] (SETQ TABSPECC (LISTGET NEWLOOKS 'TABS)) @@ -1810,11 +1825,9 @@ CONS pair of default width and LIST of TAB record instances") NEWLOOKS]) (TEDIT.PARALOOKS - [LAMBDA (TSTREAM NEWLOOKS SEL LEN) (* ; "Edited 16-Mar-2024 21:53 by rmk") + [LAMBDA (TSTREAM NEWLOOKS SEL LEN) (* ; "Edited 6-May-2024 11:45 by rmk") + (* ; "Edited 16-Mar-2024 21:53 by rmk") (* ; "Edited 15-Mar-2024 14:23 by rmk") - (* ; "Edited 9-Mar-2024 11:35 by rmk") - (* ; "Edited 24-Feb-2024 12:33 by rmk") - (* ; "Edited 9-Feb-2024 11:41 by rmk") (* ; "Edited 19-Jan-2024 14:35 by rmk") (* ; "Edited 29-Dec-2023 15:29 by rmk") (* ; "Edited 21-Oct-2023 08:55 by rmk") @@ -1969,10 +1982,9 @@ CONS pair of default width and LIST of TAB record instances") (* ;; "Pieces have been updated. Now update any visible lines.") - (CL:WHEN (FGETTOBJ TEXTOBJ \WINDOW) + (CL:WHEN (\TEDIT.PRIMARYW TEXTOBJ) (\TEDIT.SHOWSEL SEL NIL) (* ;  "Turn off the sel before updating the screen") - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ PARAPIECES) (CL:UNLESS (AND (LISTP NEWLOOKS) (EQ 'HARDCOPY (CAR NEWLOOKS)) (NULL (CDDR NEWLOOKS))) @@ -1981,13 +1993,15 @@ CONS pair of default width and LIST of TAB record instances") (FSETTOBJ TEXTOBJ \DIRTY T)) (* ; "Save this action for undo/redo") (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ) - (\TEDIT.UPDATE.SCREEN TEXTOBJ) (* ; + (\TEDIT.UPDATE.LINES TEXTOBJ 'APPEARANCE PARAPIECES) + (* ;  "Update the screen image, showing the original selection") (\TEDIT.FIXSEL SEL TEXTOBJ) (\TEDIT.SHOWSEL SEL T))]) (TEDIT.COPY.PARALOOKS - [LAMBDA (TSTREAM SOURCE DEST) (* ; "Edited 17-Mar-2024 00:27 by rmk") + [LAMBDA (TSTREAM SOURCE DEST) (* ; "Edited 29-Apr-2024 12:58 by rmk") + (* ; "Edited 17-Mar-2024 00:27 by rmk") (* ; "Edited 9-Feb-2024 11:39 by rmk") (* ; "Edited 18-Apr-2023 23:53 by rmk") (* ; "Edited 22-Oct-2022 15:29 by rmk") @@ -2003,12 +2017,12 @@ CONS pair of default width and LIST of TAB record instances") then (\TEDIT.CHTOPC SOURCE TEXTOBJ) elseif (type? SELECTION SOURCE) then (\TEDIT.CHTOPC (fetch (SELECTION CH#) of SOURCE) - (fetch (SELECTION SELTEXTOBJ) of SOURCE)) + (TEXTOBJ SOURCE)) else (\ILLEGAL.ARG SOURCE] (COND ((type? SELECTION DEST) (* ;  "make sure that the destination selection is in this document") - (CL:UNLESS (EQ TEXTOBJ (fetch (SELECTION SELTEXTOBJ) of DEST)) + (CL:UNLESS (EQ TEXTOBJ (TEXTOBJ DEST)) (\LISPERROR "Destination selection is not in stream " TSTREAM))) (T (* ;  "set the LEN arg for TEDIT.PARALOOKS to be 1 since we just have a char pos.") @@ -2047,7 +2061,9 @@ CONS pair of default width and LIST of TAB record instances") (DEFINEQ (TEDIT.SUBPARALOOKS - [LAMBDA (TEXTSTREAM OLDLOOKSLIST NEWLOOKSLIST) (* ; "Edited 17-Mar-2024 00:27 by rmk") + [LAMBDA (TEXTSTREAM OLDLOOKSLIST NEWLOOKSLIST) (* ; "Edited 6-May-2024 17:28 by rmk") + (* ; "Edited 29-Apr-2024 11:06 by rmk") + (* ; "Edited 17-Mar-2024 00:27 by rmk") (* ; "Edited 15-Mar-2024 14:23 by rmk") (* ; "Edited 18-Apr-2023 23:54 by rmk") (* ; "Edited 22-Aug-2022 13:13 by rmk") @@ -2055,37 +2071,36 @@ CONS pair of default width and LIST of TAB record instances") (* ;;; "User entry to substitute one set of looks for another. Goes through the whole textstream and whenever the looks match the characteristics of OLDLOOKSLIST which are specified, the characteristics listed in NEWLOOKSLIST are substituted.") - (LET* ((OLDLOOKS (\TEDIT.PARSE.PARALOOKS.LIST OLDLOOKSLIST)) - (NEWLOOKS (\TEDIT.PARSE.PARALOOKS.LIST NEWLOOKSLIST)) - (TEXTOBJ (TEXTOBJ TEXTSTREAM)) - (SEL (fetch (TEXTOBJ SEL) of TEXTOBJ)) - (FIRSTPC (\TEDIT.CHTOPC 1 TEXTOBJ)) - (FEATURELIST (for A on OLDLOOKSLIST by (CDDR A) collect (CAR A))) - CHANGEMADE) - (\TEDIT.SHOWSEL SEL NIL) (* ; "Turn off the selection, first.") - [OR (ZEROP (fetch (TEXTOBJ TEXTLEN) of TEXTOBJ)) - (bind (CH# _ 1) for (PC _ FIRSTPC) while PC by (fetch (PIECE NEXTPIECE) of PC) - do (COND - ((SAMEPARALOOKS OLDLOOKS (fetch (PIECE PPARALOOKS) of PC) - FEATURELIST) - (replace (TEXTOBJ \DIRTY) of (TEXTOBJ TEXTSTREAM) with T) - (freplace (PIECE PPARALOOKS) of PC with (\TEDIT.UNIQUIFY.PARALOOKS - (\TEDIT.PARSE.PARALOOKS.LIST - NEWLOOKSLIST - (fetch (PIECE PPARALOOKS) - of PC)) - (TEXTOBJ TEXTSTREAM))) - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ CH# (+ CH# (fetch (PIECE PLEN) of PC))) - (SETQ CHANGEMADE T))) - (add CH# (fetch (PIECE PLEN) of PC] - (COND - ((fetch (TEXTOBJ \WINDOW) of TEXTOBJ) - (\TEDIT.UPDATE.SCREEN TEXTOBJ) (* ; "Update the screen image") - (\TEDIT.FIXSEL SEL TEXTOBJ) - (\TEDIT.SHOWSEL SEL T))) - (COND - (CHANGEMADE 'Done) - (T 'NoChangesMade]) + (LET ((TEXTOBJ (TEXTOBJ TEXTSTREAM))) + (for PC CHANGEMADE SEL FIRSTCHANGEDCHNO (NCHARSCHANGED _ 0) + (OLDLOOKS _ (\TEDIT.PARSE.PARALOOKS.LIST OLDLOOKSLIST)) + (NEWLOOKS _ (\TEDIT.PARSE.PARALOOKS.LIST NEWLOOKSLIST)) + (FEATURELIST _ (for A on OLDLOOKSLIST by (CDDR A) collect (CAR A))) + inpieces (\TEDIT.FIRSTPIECE TEXTOBJ) as CH# from 1 by (PLEN PC) + when (SAMEPARALOOKS OLDLOOKS (PPARALOOKS PC PPARALOOKS) + FEATURELIST) do (CL:UNLESS CHANGEMADE(* ; + "First change, turn off the selection") + (SETQ CHANGEMADE T) + (SETQ SEL (FGETTOBJ TEXTOBJ SEL)) + (\TEDIT.SHOWSEL SEL NIL NIL TEXTOBJ) + (FSETTOBJ TEXTOBJ \DIRTY T)) + (FSETPC PC PPARALOOKS (\TEDIT.UNIQUIFY.PARALOOKS + (\TEDIT.PARSE.PARALOOKS.LIST + NEWLOOKSLIST + (PPARALOOKS PC) + TEXTOBJ) + TEXTOBJ)) + + (* ;; "This goes piece by piece, each one adding to the collection of dirty lines. We keep track of the first and last changes") + + (CL:UNLESS FIRSTCHANGEDCHNO (SETQ FIRSTCHANGEDCHNO CH#)) + (add NCHARSCHANGED (PLEN PC)) + finally (CL:WHEN (AND CHANGEMADE (\TEDIT.PRIMARYW TEXTOBJ)) + (* ; "Update the screen image") + (\TEDIT.UPDATE.LINES TEXTOBJ 'APPEARANCE FIRSTCHANGEDCHNO NCHARSCHANGED) + (\TEDIT.FIXSEL SEL TEXTOBJ) + (\TEDIT.SHOWSEL SEL T NIL TEXTOBJ)) + (RETURN CHANGEMADE]) (SAMEPARALOOKS [LAMBDA (PARALOOK1 PARALOOK2 FEATURES) (* ; "Edited 8-Dec-92 00:44 by jds") @@ -2134,7 +2149,8 @@ CONS pair of default width and LIST of TAB record instances") (DEFINEQ (\TEDIT.UNDO.LOOKS - [LAMBDA (TEXTOBJ EVENT) (* ; "Edited 15-Mar-2024 14:23 by rmk") + [LAMBDA (TEXTOBJ EVENT) (* ; "Edited 6-May-2024 17:28 by rmk") + (* ; "Edited 15-Mar-2024 14:23 by rmk") (* ; "Edited 19-Feb-2024 11:32 by rmk") (* ; "Edited 14-Dec-2023 21:01 by rmk") (* ; "Edited 30-May-2023 22:56 by rmk") @@ -2146,7 +2162,7 @@ CONS pair of default width and LIST of TAB record instances") (* ;; "The loop is controlled by the looks, since the pieces are still chained through the text.") (for PC (CARETPC _ (\TEDIT.CARETPIECE TEXTOBJ)) - (SEL _ (FGETTOBJ TEXTOBJ SEL)) inpieces (fetch THFIRSTPIECE of EVENT) as OLDLOOKS + (SEL _ (FGETTOBJ TEXTOBJ SEL)) inpieces (GETTH EVENT THFIRSTPIECE) as OLDLOOKS in (GETTH EVENT THOLDINFO) collect (* ; "Remember this for the undo.") (* ; "Give this piece its old looks") (CL:WHEN (EQ PC CARETPC) @@ -2156,16 +2172,17 @@ CONS pair of default width and LIST of TAB record instances") (FSETPC PC PLOOKS OLDLOOKS)) finally (SETTH EVENT THOLDINFO $$VAL) (* ;  "Remember the other looks in case we UNDO the UNDO.") - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ (GETTH EVENT THCH#) - (SUB1 (GETTH EVENT THCHLIM))) - (\TEDIT.UPDATE.SCREEN TEXTOBJ) + (\TEDIT.SHOWSEL SEL NIL NIL TEXTOBJ) + (\TEDIT.UPDATE.LINES TEXTOBJ 'APPEARANCE (GETTH EVENT THCH#) + (GETTH EVENT THLEN)) (\TEDIT.SET.SEL.LOOKS SEL 'NORMAL) (\TEDIT.FIXSEL SEL TEXTOBJ) - (\TEDIT.SHOWSEL SEL T)) + (\TEDIT.SHOWSEL SEL T NIL TEXTOBJ)) (\TEDIT.HISTORYADD TEXTOBJ EVENT]) (\TEDIT.UNDO.PARALOOKS - [LAMBDA (TEXTOBJ EVENT) (* ; "Edited 15-Mar-2024 14:23 by rmk") + [LAMBDA (TEXTOBJ EVENT) (* ; "Edited 6-May-2024 17:28 by rmk") + (* ; "Edited 15-Mar-2024 14:23 by rmk") (* ; "Edited 19-Feb-2024 11:32 by rmk") (* ; "Edited 11-Dec-2023 11:10 by rmk") (* ; "Edited 21-Sep-2023 23:51 by rmk") @@ -2176,22 +2193,21 @@ CONS pair of default width and LIST of TAB record instances") (* ;; "Undo the setting of paragraph looks.") - (for PC (SEL _ (GETTOBJ TEXTOBJ SEL)) inpieces (fetch THFIRSTPIECE of EVENT) as OLDLOOKS - in (fetch THOLDINFO of EVENT) do (FSETPC PC PPARALOOKS OLDLOOKS) - (* ; "Give this piece its old looks") + (for PC (SEL _ (GETTOBJ TEXTOBJ SEL)) inpieces (GETTH EVENT THFIRSTPIECE) as OLDLOOKS + in (GETTH EVENT THOLDINFO) collect (* ; "Give this piece its old looks") + (PROG1 (PPARALOOKS PC) + (FSETPC PC PPARALOOKS OLDLOOKS)) finally (* ;; "Remember the current looks in case we UNDO the UNDO.") - (replace THOLDINFO of EVENT with $$VAL) - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ (fetch THCH# of EVENT) - (IPLUS (fetch THCH# of EVENT) - (fetch THLEN of EVENT) - -1)) - (\TEDIT.UPDATE.SCREEN TEXTOBJ) + (SETTH EVENT THOLDINFO $$VAL) + (\TEDIT.SHOWSEL SEL NIL NIL TEXTOBJ) + (\TEDIT.UPDATE.LINES TEXTOBJ 'APPEARANCE (GETTH EVENT THCH#) + (GETTH EVENT THLEN)) (\TEDIT.SET.SEL.LOOKS SEL 'NORMAL) (\TEDIT.FIXSEL SEL TEXTOBJ) - (\TEDIT.SHOWSEL SEL T)) + (\TEDIT.SHOWSEL SEL T NIL TEXTOBJ)) (\TEDIT.HISTORYADD TEXTOBJ EVENT]) ) @@ -2311,7 +2327,8 @@ CONS pair of default width and LIST of TAB record instances") STYLE]) (\TEDIT.APPLY.PARASTYLES - [LAMBDA (PARALOOKS PC TEXTOBJ) (* ; "Edited 4-Mar-2023 22:23 by rmk") + [LAMBDA (PARALOOKS PC TEXTOBJ) (* ; "Edited 29-Apr-2024 11:06 by rmk") + (* ; "Edited 4-Mar-2023 22:23 by rmk") (* ; "Edited 25-Sep-2022 13:26 by rmk") (* ;  "Edited 3-Jul-93 23:15 by sybalskY:MV:ENVOS") @@ -2339,7 +2356,7 @@ CONS pair of default width and LIST of TAB record instances") (SETQ STYLE (COND ((LISTP STYLE) (\TEDIT.PARSE.PARALOOKS.LIST (APPEND STYLE '(STYLE NIL)) - PARALOOKS)) + PARALOOKS TEXTOBJ)) (T STYLE))) (CL:UNLESS NOSTYLE (push *TEDIT-PARASTYLE-CACHE* (CONS PARALOOKS STYLE))) @@ -2440,25 +2457,25 @@ CONS pair of default width and LIST of TAB record instances") (GLOBALVARS *TEDIT-PARASTYLE-CACHE* *TEDIT-CURRENTPARA-CACHE* *TEDIT-STYLESHEET-SAVE-LIST*) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (20987 22748 (\TEDIT.CHARLOOKS.DEFPRINT 20997 . 22128) (\TEDIT.FMTSPEC.DEFPRINT 22130 . -22746)) (23858 50564 (CHARLOOKS.FROM.FONT 23868 . 25236) (\TEDIT.EQCLOOKS 25238 . 28296) ( -\TEDIT.SAMECLOOKS 28298 . 32457) (TEDIT.CARETLOOKS 32459 . 33501) (TEDIT.COPY.LOOKS 33503 . 35609) ( -\TEDIT.UNPARSE.CHARLOOKS.LIST 35611 . 38214) (TEDIT.MODIFYLOOKS 38216 . 40209) (TEDIT.NEW.FONT 40211 - . 40631) (\TEDIT.CARETLOOKS.VERIFY 40633 . 41470) (\TEDIT.CARETPIECE 41472 . 41777) ( -\TEDIT.GET.INSERT.CHARLOOKS 41779 . 43412) (\TEDIT.GET.TERMSA.WIDTHS 43414 . 43830) ( -\TEDIT.PARSE.CHARLOOKS.LIST 43832 . 50562)) (50565 65304 (\TEDIT.TRANSLATE.ASCIICHARS 50575 . 60783) ( -\TEDIT.CONVERT.TO.FORMATTED 60785 . 65302)) (66494 73729 (\TEDIT.UNIQUIFY.CHARLOOKS 66504 . 68164) ( -\TEDIT.UNIQUIFY.PARALOOKS 68166 . 69433) (\TEDIT.UNIQUIFY.ALL 69435 . 71292) ( -\TEDIT.FLUSH.UNUSED.LOOKS 71294 . 73727)) (73762 83747 (TEDIT.LOOKS 73772 . 75619) (TEDIT.GET.LOOKS -75621 . 77650) (TEDIT.SUBLOOKS 77652 . 81111) (TEDIT.FINDLOOKS 81113 . 83745)) (83748 101074 ( -\TEDIT.CHANGE.LOOKS 83758 . 96972) (\TEDIT.LOOKS 96974 . 99872) (\TEDIT.FONTCOPY 99874 . 101072)) ( -101117 133234 (\TEDIT.EQFMTSPEC 101127 . 104635) (TEDIT.GET.PARALOOKS 104637 . 108417) ( -\TEDIT.PARSE.PARALOOKS.LIST 108419 . 116337) (TEDIT.PARALOOKS 116339 . 129487) (TEDIT.COPY.PARALOOKS -129489 . 131568) (\TEDIT.PARABOUNDS 131570 . 133232)) (133294 139573 (TEDIT.SUBPARALOOKS 133304 . -136174) (SAMEPARALOOKS 136176 . 139571)) (139616 143771 (\TEDIT.UNDO.LOOKS 139626 . 141910) ( -\TEDIT.UNDO.PARALOOKS 141912 . 143769)) (143810 144388 (\TEDIT.MARK.REVISION 143820 . 144386)) (144450 - 145275 (\CREATE.TEDIT.DEFAULT.FMTSPEC 144460 . 144897) (\CREATE.TEDIT.FACE.MENU 144899 . 145071) ( -\CREATE.TEDIT.SIZE.MENU 145073 . 145273)) (145312 154217 (\TEDIT.APPLY.STYLES 145322 . 148887) ( -\TEDIT.APPLY.PARASTYLES 148889 . 151091) (TEDIT.STYLESHEET 151093 . 152160) (TEDIT.POP.STYLESHEET -152162 . 152830) (TEDIT.PUSH.STYLESHEET 152832 . 153572) (TEDIT.ADD.STYLESHEET 153574 . 154215))))) + (FILEMAP (NIL (21128 22889 (\TEDIT.CHARLOOKS.DEFPRINT 21138 . 22269) (\TEDIT.FMTSPEC.DEFPRINT 22271 . +22887)) (23999 50750 (CHARLOOKS.FROM.FONT 24009 . 25377) (\TEDIT.EQCLOOKS 25379 . 28437) ( +\TEDIT.SAMECLOOKS 28439 . 32598) (TEDIT.CARETLOOKS 32600 . 33642) (TEDIT.COPY.LOOKS 33644 . 35795) ( +\TEDIT.UNPARSE.CHARLOOKS.LIST 35797 . 38400) (TEDIT.MODIFYLOOKS 38402 . 40395) (TEDIT.NEW.FONT 40397 + . 40817) (\TEDIT.CARETLOOKS.VERIFY 40819 . 41656) (\TEDIT.CARETPIECE 41658 . 41963) ( +\TEDIT.GET.INSERT.CHARLOOKS 41965 . 43598) (\TEDIT.GET.TERMSA.WIDTHS 43600 . 44016) ( +\TEDIT.PARSE.CHARLOOKS.LIST 44018 . 50748)) (50751 66704 (\TEDIT.TRANSLATE.ASCIICHARS 50761 . 60969) ( +\TEDIT.CONVERT.TO.FORMATTED 60971 . 66702)) (67894 75129 (\TEDIT.UNIQUIFY.CHARLOOKS 67904 . 69564) ( +\TEDIT.UNIQUIFY.PARALOOKS 69566 . 70833) (\TEDIT.UNIQUIFY.ALL 70835 . 72692) ( +\TEDIT.FLUSH.UNUSED.LOOKS 72694 . 75127)) (75162 85237 (TEDIT.LOOKS 75172 . 77019) (TEDIT.GET.LOOKS +77021 . 79050) (TEDIT.SUBLOOKS 79052 . 82601) (TEDIT.FINDLOOKS 82603 . 85235)) (85238 102365 ( +\TEDIT.CHANGE.LOOKS 85248 . 98263) (\TEDIT.LOOKS 98265 . 101163) (\TEDIT.FONTCOPY 101165 . 102363)) ( +102408 134412 (\TEDIT.EQFMTSPEC 102418 . 105926) (TEDIT.GET.PARALOOKS 105928 . 109708) ( +\TEDIT.PARSE.PARALOOKS.LIST 109710 . 117681) (TEDIT.PARALOOKS 117683 . 130620) (TEDIT.COPY.PARALOOKS +130622 . 132746) (\TEDIT.PARABOUNDS 132748 . 134410)) (134472 141182 (TEDIT.SUBPARALOOKS 134482 . +137783) (SAMEPARALOOKS 137785 . 141180)) (141225 145541 (\TEDIT.UNDO.LOOKS 141235 . 143634) ( +\TEDIT.UNDO.PARALOOKS 143636 . 145539)) (145580 146158 (\TEDIT.MARK.REVISION 145590 . 146156)) (146220 + 147045 (\CREATE.TEDIT.DEFAULT.FMTSPEC 146230 . 146667) (\CREATE.TEDIT.FACE.MENU 146669 . 146841) ( +\CREATE.TEDIT.SIZE.MENU 146843 . 147043)) (147082 156104 (\TEDIT.APPLY.STYLES 147092 . 150657) ( +\TEDIT.APPLY.PARASTYLES 150659 . 152978) (TEDIT.STYLESHEET 152980 . 154047) (TEDIT.POP.STYLESHEET +154049 . 154717) (TEDIT.PUSH.STYLESHEET 154719 . 155459) (TEDIT.ADD.STYLESHEET 155461 . 156102))))) STOP diff --git a/library/tedit/TEDIT-LOOKS.LCOM b/library/tedit/TEDIT-LOOKS.LCOM index 2c0963298f5934095cdfccd12aba09aada2d2e1e..5fc7405ea0777b98e4fe7d4ee4f355b981b739e6 100644 GIT binary patch delta 4790 zcmb_gYiv}<72dlx1{T{{8)Fmm8q6b*U~}J(C4#-XzU#f~-M!21b{XiLIO8}YoM+eUxAlE0^Cwk(x+#7TTixL~J|f5wmc{QgD>`Ab#nU_K#9nHp zZwD`G>XXNu%9w|Hw?y;>{3P~awG1F;dKu`DS`2i#Ea;q%i%`8VOSt4kt^=hF$4LjsB?_3QxnHivjz@ez$n{V$!iyfw66YO8R@p$S%&(Up=OO zI{69R)_6EId1v43z1@K=JPD2yjGkdBKwpn^}AzvMi`7c-Qu>1`gu# zR$u3F#aAd8>6~fAVHPK<-YgRQoM8;c%q-#re-S-x4rGmfs*gC%m%B*dSkc8)K9`0_ z=i^qtfmDgC{5Zi)VxN(>a*$@cC?GwTGaz5GaRU-wLH$PBuuTir^YMfvfB}g;KEtiR zFFzW>Bi&2O7q-8`@N2Y zvSfn=*8rYXqmL|aCGeu4A-Hm}!~|-w6!_Z&?$RC;+l-bZ)x6Sp=@fCO%KU2;XRIxqJ*=H@mg zX}qoOOf!jo#aijW4I0JqB$Zj6VQ)pNothbKugu;X8V>^^s_9usTEh@raIWlyHDQW- zsEGHIxE?ng=c(rMW=7BN9Y&m@;DZCJ0682!6ImOSIQ(X$i{bGvBah<}2t*=ZgSj0m zyCexY*x)&>CcfpV9bYsu>&r)?OptjEAB*h^QQwiI4dP$L-elI5pNijPLc6Tk{F2ew z?3XOo3~@2_L~I#8VXV_NZ)4uEI9~H*36ma+<5gc&cP@@sWPID$yj}KP;f@n;a6GHH zxQ*+1!*(#jajHrVUg9`~MF}fw=K#A%g>0yHSgzVpWZv5&QHWc)y-1M+M6j3}vXLT6 zRb^Qd0D<(P;gJjrjAY|hHV$p@oSV|lNmrzi40+|sys+TkCf+TnbxFkWl8W-?K+=X2 zNl-x{q2g{vLAup;1rAw>1Z1$vx&h-j8IsN1XMhmQklgUx0QH?@B_~LAVooU4^;x;L z%c_uWFpE{RI-?Y!8ZvDtfN`Yq8Y-l%TnTC$Pp&b~S1R}*21N!b znv8}G8VUtgsA?#RQri<*$LESryS~E9u9&M8%iz+P#s=S*jepnE)Gb4#(?-HZa$SsN zUM;_Fe$lqnFQ)jV{c9E--wGwJ{EPi2Q^Hm&%`b9YzTmaXGk)uo)jBpe<*1y8w$pmO zLcf=GJKb{seItr9@^jD7_niqSc9PUHtCfD117~|^2-x#1iI9D^9xDK8V;z);0=U!2+D0Bom`L)C zc7VhIkdeqqZUqscB<7I-w$exd2&aY$wwW+tlAv-Zg#>UKks$%%Q!^-*3kUzgtc9}I zvkjd(GCg(hFp%@F6;F@T^?`wlqFf$5d^yOxRqijvgy{Kw*0i+>;ddr@p0e`P{* zkY_qXEau*UF_$3C{_8y469;C$oDOV(^6b}L|8C#_OK!#V?gma;SohuK^&TPJZ=_gdE_TB{Kup;2;$&O>dK^CSSRC)hQ4#}%wxQ5*a zK<#sx3J?@mwcf{2%IdA+mKmv66}{5~!O2?rj82%K`zTHVXS4EqjVGWw5`KtJ&a7w_ zYn+5H&JFk8EDi*Mt{+0~Q?Sj%R((M}Rv~%{te6m9SpO*8~Fo zRDmzebd*2)_MN8XZ#0q$bbvUaGkAskN#JGt;d4hHn_Es<2lYxcMytdA4;>iG@isk8g+!;pv)`QneCe~RJDJ74(6y8i&$Y}NMw delta 4820 zcmcIoTWl298Qz&S$X>9szQp)K;9xGXL)gxlnVrjms-0cWddKYUYBi7QPXA><;h8uv?>oIFIAt~hhEG}l$J*HKXcn% zLo4;62<@Enpa0zc%lCiBSKeoDzt4Vme-|(B${s$ui|2R|VIdY3VxoMtq?AQ|2!#fC zu5J{^L_QY91L(-v>E}+JJUx42dJ0W{>Gaui+hb_%)cKj&xnpQ{4h^KnG8t4qH4=#o zpsB;>LI1I9$^%28!IY8FlLcL~^kFpc_;XztY!P{cqtPgj$pr?rfUaRhMs$nxvl}}UO2^};t8GS^{M6|*P z5@FQQPNpq0pCliJH*J(fRMg?lmSN_Q6s_xsJo#sMkX3}rw)S6c9EF{V7FZ^W@(813 zI%gsS@kq}N!xy8Xr4=k_ad4mmmYEnGLV=ZFAP|h(2adlJ3mjj$9lW#<_yf6rW<&Xv zg}~d|tX|jG74}9l zMouqAhK+(X4&f(~@@KkrRq<57)_Fru>P3WQe;&11Uf1^~j2yxe_H?z3F_P1VZGD7A z!f-vqSP;Bn$B78@Q8xw(`Ajmc6_Vz#jxYz#cbrXEFX|SJ?7US#vP6DYda_l3U`S2q z1v3v(PYiw&3GWP5&U1H~NkV;w{NpS~?(AtJ#<|GTOj|4UqaBLv?M!-^9Y4MT9(iD_ z3EnVlG4%dQLb08~RC{!N+7>M}&7ZbiKiO5ynqAB5%{JR;i)$ z$ZSk3r_JybD6PHg_z{}TOV6a2I~Mz$)v9Js+VQ&C;|7P>z4+8I>h-Xw z?j+qQk!c~HOKpa2&!jpd{*CSHWgtovU$p9ayn@L>YDcf^2cD+@hQd7N$x5n=RRwy{ zGL71lnX~c`I7opYs&ydZ{EjTip3SH%Y39d~990m2la(K{pv~2kB}k8)1G+qtXj6VvahSceW_HeUqFTBs1S@V%SN z3mXifK;Rk{;8PM}018OP%NWmB-%*-%SIE?n|wl8GZp|-TF@bx_riVroq z47pIJBtUJk#SKQ5R80Qf|70)tHlwF3BsF+d5`@avMn7pMUq9Hl=9@!-09(0r&|u0x zH`{Djpy>5lUHf`n`z5n&>a~TyB}eh6&~sX^R_*WnQKwrOe`F-%jQqq~?7A}{YJVsu zwgzsm_d9{g=fAMTJfRA;*cahaTMl)VArffW7~-xYL0tLmD7M=&-Cv^E;weF7`E6V`nX65XDiS$!va>8J zZZ#a%Q`%U@ig**Fe4R32m8B($K#620endEjOI*OvxYmYyCiR@97l06o0z|moK_b+Y zB>Z9*Wkd{kgG6o{k1|Mrv>Y8PT1Lu%S%M;?Q6$Ll3o;}~T;=}Z2MnulFi^2p1mw49dWvg-_1} z1_8T#822#KMllyhy>bBb)q_?K?cHjJMFq;i_8=BSAPPOZ{Ic-~++t4kOQyRQX*=;2 z%c+$=o;Vu(UkGma@dP(fBe;33p#5J-u61UPIZ7dTD^@p%C2Y6q2wQm}a4lDAXIsr4K)Wkxv&Y#l?9sFX4&j@qv2vF&S4VAD zZuTVnIrae^eY@Eeu4c@>DR10kb+d3Vv(J&1;jMFbvJZHjvv2cc&%(nmce)4eSnSO> z!Jc()U(I@~FMQ30(6I9x7!&|yR*?iA%1mRt^NLT0-EiOGvb+CE-?2bGy4oM+ISMNF zs|F}NkI3nXjX^9ckRRO>lK3h00kxdV?N8<@}?N@@iXy7+XdW;OuMoLR_fz>R^L*oR01 z8kmJ~eIL{YfDY}HqfA17WW*Izu^`omLHWLqE} oBI_>qvtH8k5*fL?l@(QT=B1t{c$EvZL2h0?%iv1qH$L9{Z)!2p*Z=?k diff --git a/library/tedit/TEDIT-MENU b/library/tedit/TEDIT-MENU index 15aa1276f..e9ff4c91c 100644 --- a/library/tedit/TEDIT-MENU +++ b/library/tedit/TEDIT-MENU @@ -1,12 +1,14 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "19-Apr-2024 10:53:42" {WMEDLEY}tedit>TEDIT-MENU.;171 269091 +(FILECREATED " 6-May-2024 23:54:02" {WMEDLEY}tedit>TEDIT-MENU.;186 270897 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.MENU.START) + :CHANGES-TO (FNS \TEDIT.SHOW.PARALOOKS \TEDIT.FILL.IN.CHARLOOKS.MENU \TEDIT.SHOW.CHARLOOKS + \TEDIT.NEUTRALIZE.CHARLOOKS) + (MACROS TEDIT.DEFERRED-UPDATES) - :PREVIOUS-DATE "10-Apr-2024 23:06:52" {WMEDLEY}tedit>TEDIT-MENU.;170) + :PREVIOUS-DATE " 6-May-2024 13:30:57" {WMEDLEY}tedit>TEDIT-MENU.;184) (PRETTYCOMPRINT TEDIT-MENUCOMS) @@ -169,9 +171,8 @@ (OLD-DON'TUPDATE (GETTOBJ TEXTOBJ TXTDON'TUPDATE))) (CL:UNWIND-PROTECT (PROGN (SETTOBJ TEXTOBJ TXTDON'TUPDATE T) . BODY) - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ 1 -1) (SETTOBJ TEXTOBJ TXTDON'TUPDATE OLD-DON'TUPDATE) - (\TEDIT.UPDATE.SCREEN TEXTOBJ))]) + (\TEDIT.UPDATE.LINES TEXTOBJ 'APPEARANCE))]) ) ) @@ -495,39 +496,38 @@ 'TEditMenuButton]) (MBUTTON.NEXT.FIELD.AS.NUMBER - [LAMBDA (TEXTOBJ CH#) (* ; "Edited 15-Dec-2023 13:59 by rmk") + [LAMBDA (MENUSTREAM CH#) (* ; "Edited 2-May-2024 13:25 by rmk") + (* ; "Edited 15-Dec-2023 13:59 by rmk") (* ; "Edited 30-Jul-2023 08:54 by rmk") (* ; "Edited 12-Jun-90 19:00 by mitani") - (MBUTTON.FIND.NEXT.FIELD TEXTOBJ CH# T) - (LET [(VAL (TEDIT.SEL.AS.STRING (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ) - (fetch (TEXTOBJ SCRATCHSEL) of TEXTOBJ] + (LET ((VAL (MBUTTON.NEXT.FIELD.AS.TEXT MENUSTREAM CH#))) (CL:WHEN (IGREATERP (NCHARS VAL) 0) (SETQ VAL (MKATOM (CL:STRING-TRIM '(#\Space #\Newline) VAL))) (if (NUMBERP VAL) - else (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT VAL " is not a number, ignored") + else (TEDIT.PROMPTPRINT MENUSTREAM (CONCAT VAL " is not a number, ignored") T T) NIL))]) (MBUTTON.NEXT.FIELD.AS.TEXT - [LAMBDA (TEXTOBJ CH#) (* ; "Edited 22-Apr-93 16:14 by jds") + [LAMBDA (MENUSTREAM CH#) (* ; "Edited 2-May-2024 13:30 by rmk") + (* ; "Edited 22-Apr-93 16:14 by jds") (* ;; "Find the next fill-in field in the menu after CH#, and return its contents as a string.") - (MBUTTON.FIND.NEXT.FIELD TEXTOBJ CH# T) - (TEDIT.SEL.AS.STRING (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ) - (fetch (TEXTOBJ SCRATCHSEL) of TEXTOBJ]) + (LET ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of MENUSTREAM))) + (MBUTTON.FIND.NEXT.FIELD TEXTOBJ CH# T) + (TEDIT.SEL.AS.STRING MENUSTREAM (FGETTOBJ TEXTOBJ SCRATCHSEL]) (MBUTTON.NEXT.FIELD.AS.ATOM - [LAMBDA (TEXTOBJ CH#) (* ; "Edited 25-Feb-2024 17:46 by rmk") + [LAMBDA (MENUSTREAM CH#) (* ; "Edited 2-May-2024 13:20 by rmk") + (* ; "Edited 25-Feb-2024 17:46 by rmk") (* ; "Edited 12-Jun-90 19:00 by mitani") (* ;; "Find the next fill-in field, and return its contents as an atom. If the field is empty, return NIL.") - (MBUTTON.FIND.NEXT.FIELD TEXTOBJ CH# T) (* ; "Move to the next fill-in field.") - (LET [(STR (TEDIT.SEL.AS.STRING (GETTOBJ TEXTOBJ STREAMHINT) - (GETTOBJ TEXTOBJ SCRATCHSEL] + (LET ((STR (MBUTTON.NEXT.FIELD.AS.TEXT MENUSTREAM CH#))) (CL:UNLESS (ZEROP (NCHARS STR)) (* ;  "The field isn't emtpy, convert to atom") (MKATOM STR))]) @@ -565,7 +565,8 @@ (TEDIT.INSERT TEXTSTREAM (MKSTRING VALUE]))]) (MBUTTON.SET.NEXT.FIELD - [LAMBDA (TEXTOBJ CH# NEWVALUE DONTUPDATESCREEN) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (TEXTOBJ CH# NEWVALUE) (* ; "Edited 21-Apr-2024 12:55 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 22-May-2023 10:50 by rmk") (* ; "Edited 20-Mar-2023 12:40 by rmk") (* ; "Edited 18-Mar-2023 23:18 by rmk") @@ -582,7 +583,7 @@ (\TEDIT.DELETE TEXTOBJ FIELDSEL)) (* ; "Delete existing text") (CL:WHEN NEWVALUE (\TEDIT.INSERT (MKSTRING NEWVALUE) - FIELDSEL TEXTOBJ)))]) + FIELDSEL TEXTOBJ T)))]) (MBUTTON.SET.NEXT.BUTTON.STATE [LAMBDA (TEXTOBJ STARTINGCH NEWSTATE) (* jds "31-Jul-85 22:09") @@ -767,13 +768,13 @@ NIL]) (MB.THREESTATEBUTTON.FN - [LAMBDA (OBJ SEL W) (* ; "Edited 25-Feb-2024 23:40 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 29-Apr-2024 13:30 by rmk") + (* ; "Edited 25-Feb-2024 23:40 by rmk") (* ; "Edited 21-Oct-2022 18:45 by rmk") (* ; "Edited 30-May-91 22:16 by jds") (* ;  "MBFN for TEdit default menu item buttons.") - (LET ((TEXTOBJ (fetch (SELECTION SELTEXTOBJ) of SEL)) - (STATECHANGEFN (IMAGEOBJPROP OBJ 'STATECHANGEFN)) + (LET ((STATECHANGEFN (IMAGEOBJPROP OBJ 'STATECHANGEFN)) NEWSTATE) (SETQ NEWSTATE (SELECTQ (IMAGEOBJPROP OBJ 'STATE) (OFF 'ON) @@ -782,10 +783,10 @@ 'ON)) (CL:WHEN STATECHANGEFN (* ;  "apply any user supplied state change fn ") - (APPLY* STATECHANGEFN OBJ NEWSTATE (TEXTSTREAM TEXTOBJ))) + (APPLY* STATECHANGEFN OBJ NEWSTATE (fetch (TEXTWINDOW WTEXTSTREAM) of MENUWINDOW))) (IMAGEOBJPROP OBJ 'STATE NEWSTATE) (FSETSEL SEL ONFLG NIL) - (TTY.PROCESS (WINDOWPROP (WINDOWPROP W 'MAINWINDOW) + (TTY.PROCESS (WINDOWPROP (WINDOWPROP MENUWINDOW 'MAINWINDOW) 'PROCESS]) (THREESTATE.INIT @@ -995,12 +996,12 @@ (RETURN BOX]) (MB.NWAYBUTTON.SELFN - [LAMBDA (OBJ W SEL MOUSEX MOUSEY) (* ; "Edited 25-Feb-2024 23:43 by rmk") + [LAMBDA (OBJ MENUWINDOW SEL MOUSEX MOUSEY) (* ; "Edited 29-Apr-2024 13:31 by rmk") + (* ; "Edited 25-Feb-2024 23:43 by rmk") (* ; "Edited 21-Oct-2022 18:46 by rmk") (* ; "Edited 30-May-91 22:16 by jds") (* ; "Selecting an NWAY button.") - (LET ((TEXTOBJ (GETSEL SEL SELTEXTOBJ)) - (OBJBOX (IMAGEOBJPROP OBJ 'BOUNDBOX)) + (LET ((OBJBOX (IMAGEOBJPROP OBJ 'BOUNDBOX)) (OLDSTATE (IMAGEOBJPROP OBJ 'STATE)) (BUTTONLIST (IMAGEOBJPROP OBJ 'BUTTONS)) (BUTTONX (IMAGEOBJPROP OBJ 'BUTTONX)) @@ -1021,12 +1022,12 @@ MOUSEX MOUSEY) (* ;  "The mouse is pointing here. Select this.") (SETQ STATE BUTTON) - (BITBLT IMAGE 0 0 W X Y NIL NIL 'INVERT 'REPLACE)) + (BITBLT IMAGE 0 0 MENUWINDOW X Y NIL NIL 'INVERT 'REPLACE)) ((EQ OLDSTATE BUTTON) (* ;  "This was the old selection (and it's different, too). Unselect it") - (BITBLT IMAGE 0 0 W X Y NIL NIL 'INPUT 'REPLACE] + (BITBLT IMAGE 0 0 MENUWINDOW X Y NIL NIL 'INPUT 'REPLACE] (IMAGEOBJPROP OBJ 'STATE STATE) - (TTY.PROCESS (WINDOWPROP (WINDOWPROP W 'MAINWINDOW) + (TTY.PROCESS (WINDOWPROP (WINDOWPROP MENUWINDOW 'MAINWINDOW) 'PROCESS)) T]) @@ -1273,24 +1274,23 @@ NIL]) (\TEXTMENU.TOGGLEFN - [LAMBDA (OBJ SEL W) (* ; "Edited 21-Oct-2022 18:46 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 29-Apr-2024 13:21 by rmk") + (* ; "Edited 21-Oct-2022 18:46 by rmk") (* ; "Edited 30-May-91 22:16 by jds") - (* MBFN for TOGGLE buttons--cycle back - and forthe betwen states.) - (PROG ((TEXTOBJ (fetch (SELECTION SELTEXTOBJ) of SEL)) - (STATECHANGEFN (IMAGEOBJPROP OBJ 'STATECHANGEFN)) - OFILE CH NEWSTATE) - (SETQ NEWSTATE (SELECTQ (IMAGEOBJPROP OBJ 'STATE) - (OFF 'ON) - (ON 'OFF) - 'ON)) - (COND - (STATECHANGEFN (* apply the user supplied state - change fn if he supplied one) - (APPLY* STATECHANGEFN OBJ NEWSTATE (TEXTSTREAM TEXTOBJ) - SEL))) - (IMAGEOBJPROP OBJ 'STATE NEWSTATE) - (replace (SELECTION ONFLG) of SEL with NIL]) + + (* ;; "MBFN for TOGGLE buttons--cycle back and forthe betwen states.") + + (LET ((STATECHANGEFN (IMAGEOBJPROP OBJ 'STATECHANGEFN)) + OFILE CH NEWSTATE) + (SETQ NEWSTATE (SELECTQ (IMAGEOBJPROP OBJ 'STATE) + (OFF 'ON) + (ON 'OFF) + 'ON)) + (CL:WHEN STATECHANGEFN (* ; "apply the user's state change fn ") + (APPLY* STATECHANGEFN OBJ NEWSTATE (fetch (TEXTWINDOW WTEXTSTREAM) of MENUWINDOW) + SEL)) + (IMAGEOBJPROP OBJ 'STATE NEWSTATE) + (SETSEL SEL ONFLG NIL]) (\TEXTMENU.TOGGLE.INIT [LAMBDA NIL (* jds " 9-Feb-86 15:18") @@ -1913,7 +1913,8 @@ (SETQ OLDX X]) (\TEDIT.TABTYPE.SET - [LAMBDA (OBJ SEL W) (* ; "Edited 17-Mar-2024 00:27 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 29-Apr-2024 13:24 by rmk") + (* ; "Edited 17-Mar-2024 00:27 by rmk") (* ; "Edited 21-Oct-2022 18:46 by rmk") (* ; "Edited 3-Oct-2022 22:16 by rmk") (* ; "Edited 9-Sep-2022 15:47 by rmk") @@ -1923,7 +1924,7 @@ (* ;; "Change the kind of TAB that will be set in the succeeding marginbar.") - (LET ((TEXTOBJ (fetch (SELECTION SELTEXTOBJ) of SEL)) + (LET ((MENUTEXTOBJ (TEXTOBJ SEL)) (STATE (IMAGEOBJPROP OBJ 'STATE)) DOTTEDBUTTON) (* ;  "Find out roughly what kind of TAB this is to be.") @@ -1931,16 +1932,15 @@ (CAR STATE) STATE))) (* ;  "Make sure it's upper case, and an atom.") - [SETQ DOTTEDBUTTON (CAR (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (fetch (SELECTION CH#) - of SEL] + [SETQ DOTTEDBUTTON (CAR (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ (ADD1 (FGETSEL SEL CH#] (* ;  "Find out if this is to be a tab with a dotted leader.") (CL:WHEN (EQ (IMAGEOBJPROP DOTTEDBUTTON 'STATE) 'ON) (* ; "Yes. Make this a DOTTEDxxx tab.") (SETQ STATE (PACK* 'DOTTED STATE))) - (for (PC _ (\TEDIT.CHTOPC (ADD1 (fetch (SELECTION CH#) of SEL)) - TEXTOBJ)) by (NEXTPIECE PC) while PC when (type? MARGINBAR (PCONTENTS - PC)) + (for (PC _ (\TEDIT.CHTOPC (ADD1 (FGETSEL SEL CH#)) + MENUTEXTOBJ)) by (NEXTPIECE PC) while PC when (type? MARGINBAR + (PCONTENTS PC)) do (replace MARTABTYPE of (IMAGEOBJPROP (PCONTENTS PC) 'OBJECTDATUM) with STATE) (RETURN]) @@ -2314,7 +2314,8 @@ (EQ NEWSTATE 'ON]) (MB.DEFAULTBUTTON.ACTIONFN - [LAMBDA (OBJ SEL W TEXTOBJ MAINTEXTOBJ MAINSEL) (* ; "Edited 15-Mar-2024 13:53 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW TEXTOBJ MAINTEXTOBJ MAINSEL) (* ; "Edited 2-May-2024 13:48 by rmk") + (* ; "Edited 15-Mar-2024 13:53 by rmk") (* ; "Edited 9-Mar-2024 11:33 by rmk") (* ; "Edited 27-Feb-2024 07:54 by rmk") (* ; "Edited 14-Dec-2023 21:03 by rmk") @@ -2326,7 +2327,10 @@ (* ; "Edited 30-Mar-94 16:04 by jds") (* ;  "MBFN for TEdit default menu item buttons.") - (PROG (OFILE CH %#COPIES PRINTHOST PRINTOPTIONS %#SIDES MSG) + (PROG (OFILE CH %#COPIES PRINTHOST PRINTOPTIONS %#SIDES MSG (MENUSTREAM (fetch (TEXTWINDOW + WTEXTSTREAM + ) + of MENUWINDOW))) [ERSETQ (RESETLST [RESETSAVE (\TEDIT.MARKACTIVE MAINTEXTOBJ) '(AND (\TEDIT.MARKINACTIVE OLDVALUE] @@ -2341,7 +2345,7 @@  "So we can tell the guy WHAT op is active.") (SELECTQ (IMAGEOBJPROP OBJ 'MBTEXT) (Put [SETQ OFILE (\TEDIT.MAKEFILENAME (MBUTTON.NEXT.FIELD.AS.TEXT - TEXTOBJ + MENUSTREAM (GETSEL SEL CH#] [COND (OFILE (* ; @@ -2349,7 +2353,7 @@ (TEDIT.PUT MAINTEXTOBJ OFILE NIL (GETTEXTPROP TEXTOBJ 'UNFORMATTEDPUT/GET]) (Get [SETQ OFILE (\TEDIT.MAKEFILENAME (MBUTTON.NEXT.FIELD.AS.TEXT - TEXTOBJ + MENUSTREAM (GETSEL SEL CH#] [COND (OFILE (* ; @@ -2357,11 +2361,11 @@ (TEDIT.GET MAINTEXTOBJ OFILE (GETTEXTPROP TEXTOBJ 'UNFORMATTEDPUT/GET]) (Include [SETQ OFILE (\TEDIT.MAKEFILENAME (MBUTTON.NEXT.FIELD.AS.TEXT - TEXTOBJ + MENUSTREAM (GETSEL SEL CH#] (COND (OFILE (TEDIT.INCLUDE MAINTEXTOBJ OFILE)))) - (Find (SETQ OFILE (MBUTTON.NEXT.FIELD.AS.TEXT TEXTOBJ (GETSEL SEL CH#))) + (Find (SETQ OFILE (MBUTTON.NEXT.FIELD.AS.TEXT MENUSTREAM (GETSEL SEL CH#))) [COND ((ZEROP (NCHARS OFILE)) (* ; "NOTHING--HE HIT DEL.") NIL) @@ -2395,19 +2399,16 @@ (\TEDIT.SHOWSEL MAINSEL T)) (T (TEDIT.PROMPTPRINT MAINTEXTOBJ "(Not found)"]) (Substitute [PROG* ((SAVECH# (GETSEL SEL CH#)) - (REPLACEMENT (MBUTTON.NEXT.FIELD.AS.TEXT TEXTOBJ + (REPLACEMENT (MBUTTON.NEXT.FIELD.AS.TEXT MENUSTREAM (GETSEL SEL CH#))) (PATTERN (MBUTTON.NEXT.FIELD.AS.TEXT - TEXTOBJ - (GETSEL (fetch (TEXTOBJ SCRATCHSEL) - of TEXTOBJ) + MENUSTREAM + (GETSEL (FGETTOBJ TEXTOBJ SCRATCHSEL) CHLIM))) CONFIRM? KEEPLOOKS? LOC) - (SETQ LOC (MBUTTON.FIND.NEXT.BUTTON - TEXTOBJ - (GETSEL (fetch (TEXTOBJ SCRATCHSEL) - of TEXTOBJ) - CHLIM))) + (SETQ LOC (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ + (GETSEL (FGETTOBJ TEXTOBJ SCRATCHSEL) + CHLIM))) [SETQ CONFIRM? (EQ 'ON (IMAGEOBJPROP (CAR LOC) 'STATE] [SETQ LOC (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ @@ -2464,17 +2465,16 @@ (\TEDIT.FIXSEL MAINSEL MAINTEXTOBJ) (\TEDIT.SHOWSEL MAINSEL T)))) (Hardcopy [SETQ PRINTHOST (\TEDIT.MAKEFILENAME (MBUTTON.NEXT.FIELD.AS.TEXT - TEXTOBJ + MENUSTREAM (GETSEL SEL CH#] (COND ((NOT PRINTHOST) (* ;  "If he didn't specify a particular host, defer to his defaults.") (TEDIT.PROMPTPRINT MAINTEXTOBJ "Using default print server.") )) - (SETQ %#COPIES (MBUTTON.NEXT.FIELD.AS.NUMBER - TEXTOBJ - (GETSEL (fetch (TEXTOBJ SCRATCHSEL) of TEXTOBJ) - CH#))) + (SETQ %#COPIES (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM + (GETSEL (FGETTOBJ TEXTOBJ SCRATCHSEL) + CH#))) (* ;  "Grab the field that specifies number of copies.") [COND @@ -2493,10 +2493,9 @@ (%#SIDES (push PRINTOPTIONS %#SIDES) (push PRINTOPTIONS '%#SIDES] [SETQ MSG (\TEDIT.MAKEFILENAME (MBUTTON.NEXT.FIELD.AS.TEXT - TEXTOBJ - (GETSEL (fetch (TEXTOBJ - SCRATCHSEL) - of TEXTOBJ) + MENUSTREAM + (GETSEL (FGETTOBJ TEXTOBJ + SCRATCHSEL) CH#] [COND (MSG (push PRINTOPTIONS MSG) @@ -2561,7 +2560,9 @@ NEWLOOKS]) (\TEDIT.APPLY.CHARLOOKS - [LAMBDA (OBJ SEL W) (* ; "Edited 27-Mar-2024 15:12 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 2-May-2024 13:49 by rmk") + (* ; "Edited 29-Apr-2024 13:11 by rmk") + (* ; "Edited 27-Mar-2024 15:12 by rmk") (* ; "Edited 15-Mar-2024 13:34 by rmk") (* ; "Edited 16-Feb-2024 21:21 by rmk") (* ; "Edited 18-Apr-2023 23:55 by rmk") @@ -2570,24 +2571,24 @@ (* ;; "MBFN for TEdit default menu item buttons.") - (LET ((TEXTOBJ (GETSEL SEL SELTEXTOBJ)) - [MAINTEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of (fetch (TEXTWINDOW WTEXTSTREAM) - of (WINDOWPROP W 'MAINWINDOW] - (CH# (ADD1 (FGETSEL SEL CH#))) - NEWLOOKS) - (\TEDIT.SHOWSEL SEL NIL) (* ; "Turn off the APPLY button.") - [SETQ CH# (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#] + (LET* ((MENUSTREAM (fetch (TEXTWINDOW WTEXTSTREAM) of MENUWINDOW)) + (MENUTEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of MENUSTREAM)) + [MAINTEXTOBJ (TEXTOBJ (WINDOWPROP MENUWINDOW 'MAINWINDOW] + (CH# (ADD1 (FGETSEL SEL CH#))) + NEWLOOKS) + (\TEDIT.SHOWSEL SEL NIL) (* ; "Turn off the APPLY button.") + [SETQ CH# (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ CH#] (* ; "Skip over the SHOW button") - [SETQ CH# (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#] + [SETQ CH# (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ CH#] (* ; "And over the NEUTRAL button.") - (SETQ NEWLOOKS (\TEDIT.PARSE.CHARLOOKS.MENU TEXTOBJ CH#)) + (SETQ NEWLOOKS (\TEDIT.PARSE.CHARLOOKS.MENU MENUSTREAM CH#)) (* ;  "Now Parse the menu, to give us a looks spec.") - (TEDIT.LOOKS MAINTEXTOBJ NEWLOOKS) (* ; "Make the change in looks") + (TEDIT.LOOKS MAINTEXTOBJ NEWLOOKS) (* ; "Make the change in looks") (* ;  "Leave him typing in the real document") - (TTY.PROCESS (WINDOWPROP (WINDOWPROP W 'MAINWINDOW) - 'PROCESS]) + (TTY.PROCESS (WINDOWPROP (WINDOWPROP MENUWINDOW 'MAINWINDOW) + 'PROCESS]) (\TEDIT.APPLY.OLINE [LAMBDA (BUTTON NEWLOOKS) (* jds "30-Aug-84 13:56") @@ -2605,7 +2606,9 @@ NEWLOOKS]) (\TEDIT.SHOW.CHARLOOKS - [LAMBDA (OBJ SEL MENUSTREAM) (* ; "Edited 27-Mar-2024 15:11 by rmk") + [LAMBDA (OBJ SEL MENUSTREAM) (* ; "Edited 6-May-2024 23:19 by rmk") + (* ; "Edited 29-Apr-2024 13:33 by rmk") + (* ; "Edited 27-Mar-2024 15:11 by rmk") (* ; "Edited 20-Mar-2024 11:03 by rmk") (* ; "Edited 17-Mar-2024 00:27 by rmk") (* ; "Edited 15-Mar-2024 13:34 by rmk") @@ -2617,34 +2620,40 @@ (* ;; "OBJ is unused, presumably to have a standard interface with other menu functions that are updating an image object.") - (* ;; "MENUSTREAM is the displaystream of the charlooks menu window.") + (* ;; "MENUSTREAM is the displaystream of the charlooks menu window, or the page-format menu that also has a character looks section for page numbers.") (* ;; "Set the CHARLOOKS menu from the looks of the currently selected character.") - (LET* ((TEXTOBJ (TEXTOBJ! (GETSEL SEL SELTEXTOBJ))) - [MAINTEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of (fetch (TEXTWINDOW WTEXTSTREAM) - of (WINDOWPROP MENUSTREAM 'MAINWINDOW] + (* ;; "Presumably SEL points to the SHOW button, the ADD1 advances over the space-separator, to get the next button (NEUTRAL), and the button after that is Bold.") + + (* ;; "CH#") + + (LET* ((MENUTEXTOBJ (TEXTOBJ SEL)) + [MAINTEXTOBJ (TEXTOBJ (WINDOWPROP MENUSTREAM 'MAINWINDOW] (MAINCH# (GETSEL (GETTOBJ MAINTEXTOBJ SEL) CH#)) (CH# (ADD1 (GETSEL SEL CH#))) PC NEWLOOKS) (CL:WHEN (ILEQ MAINCH# (TEXTLEN MAINTEXTOBJ)) - [SETQ CH# (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#] + [SETQ CH# (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ CH#] (* ; "Skip over the NEUTRAL button.") - (\TEDIT.SHOWSEL SEL NIL) + (\TEDIT.SHOWSEL SEL NIL NIL MENUTEXTOBJ) (SETSEL SEL SET NIL) (SETQ PC (\TEDIT.CHTOPC MAINCH# MAINTEXTOBJ)) (* ; - "The PIECE containing the text to describe") + "The main piece whose looks we want to fill into the menu.") (SETQ NEWLOOKS (PLOOKS PC)) (* ;  "Get the looks for those characters.") (* ; - "Fill in the menu blanks with that info") - (TEDIT.DEFERRED-UPDATES TEXTOBJ (\TEDIT.FILL.IN.CHARLOOKS.MENU TEXTOBJ CH# NEWLOOKS)) + "Fill in the menu objects and fields with that info") + (TEDIT.DEFERRED-UPDATES MENUTEXTOBJ (\TEDIT.FILL.IN.CHARLOOKS.MENU MENUTEXTOBJ CH# + NEWLOOKS)) (TTY.PROCESS (WINDOWPROP (\TEDIT.PRIMARYW MAINTEXTOBJ) 'PROCESS)))]) (\TEDIT.NEUTRALIZE.CHARLOOKS - [LAMBDA (OBJ SEL W) (* ; "Edited 15-Mar-2024 14:23 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 6-May-2024 23:23 by rmk") + (* ; "Edited 29-Apr-2024 13:18 by rmk") + (* ; "Edited 15-Mar-2024 14:23 by rmk") (* ; "Edited 25-Feb-2024 23:30 by rmk") (* ; "Edited 19-Dec-2023 13:40 by rmk") (* ; "Edited 18-Apr-2023 23:55 by rmk") @@ -2653,18 +2662,19 @@ (* ;; "Handle the NEUTRAL button on a character looks menu. Sets all the menu settings neutral.") - (LET [(TEXTOBJ (GETSEL SEL SELTEXTOBJ)) + (LET [(MENUTEXTOBJ (TEXTOBJ SEL)) (CH# (ADD1 (FGETSEL SEL CH#] (\TEDIT.SHOWSEL SEL NIL) (FSETSEL SEL SET NIL) - (\TEDIT.NEUTRALIZE.CHARLOOKS.MENU TEXTOBJ CH#) (* ; + (\TEDIT.NEUTRALIZE.CHARLOOKS.MENU MENUTEXTOBJ CH#) (* ;  "Fill in the menu blanks with that info and update the menu's screen image") - (\TEDIT.UPDATE.SCREEN TEXTOBJ) - (TTY.PROCESS (WINDOWPROP (WINDOWPROP W 'MAINWINDOW) + (\TEDIT.UPDATE.LINES MENUTEXTOBJ 'APPEARANCE) + (TTY.PROCESS (WINDOWPROP (WINDOWPROP MENUWINDOW 'MAINWINDOW) 'PROCESS]) (\TEDIT.FILL.IN.CHARLOOKS.MENU - [LAMBDA (TEXTOBJ CH# NEWLOOKS) (* ; "Edited 20-Mar-2024 11:03 by rmk") + [LAMBDA (TEXTOBJ CH# NEWLOOKS) (* ; "Edited 6-May-2024 23:14 by rmk") + (* ; "Edited 20-Mar-2024 11:03 by rmk") (* ; "Edited 15-Mar-2024 13:34 by rmk") (* ; "Edited 13-Nov-2023 09:55 by rmk") (* ; "Edited 24-Jul-2023 21:09 by rmk") @@ -2677,7 +2687,7 @@ (LET (PC OFILE CH NEXTB BUTTON TEXT OFFSET (SCRATCHSEL (FGETTOBJ TEXTOBJ SCRATCHSEL))) (SETQ NEWLOOKS (\TEDIT.PARSE.CHARLOOKS.LIST NEWLOOKS NIL TEXTOBJ)) - (* ;; "Make sure the charlooks are in the proper internal format, so this fn can be called from every reasonable place.") + (* ;; "Make sure the charlooks are in the proper internal format, so this fn can be called from every reasonable place. The order corresponds to the order in the menu.") [for PROP in (LIST (fetch (CHARLOOKS CLBOLD) of NEWLOOKS) (fetch (CHARLOOKS CLITAL) of NEWLOOKS) @@ -2764,8 +2774,7 @@ (AND OFFSET (IABS OFFSET))) (* ;  "Now move up to the offset distance fill-in field.") (\TEDIT.SHOWSEL SCRATCHSEL NIL) - (SETSEL SCRATCHSEL SET NIL) - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ CH# (ADD1 (GETSEL SCRATCHSEL CH#]) + (SETSEL SCRATCHSEL SET NIL]) (\TEDIT.NEUTRALIZE.CHARLOOKS.MENU [LAMBDA (TEXTOBJ CH#) (* ; "Edited 19-Dec-2023 13:40 by rmk") @@ -2807,15 +2816,17 @@ NIL]) (\TEDIT.PARSE.CHARLOOKS.MENU - [LAMBDA (TEXTOBJ CH#) (* ; "Edited 10-Apr-2024 10:18 by rmk") + [LAMBDA (MENUSTREAM CH#) (* ; "Edited 2-May-2024 13:48 by rmk") + (* ; "Edited 10-Apr-2024 10:18 by rmk") (* ; "Edited 25-Feb-2024 22:26 by rmk") (* ; "Edited 24-Jul-2023 17:10 by rmk") (* ; "Edited 30-May-91 22:18 by jds") (* ;; "MBFN for TEdit default menu item buttons. For a new font, this should not change the menu if the font doesn't exist...but it does.") - (LET - ((SCRATCHSEL (GETTOBJ TEXTOBJ SCRATCHSEL)) + (LET* + ((TEXTOBJ (TEXTOBJ MENUSTREAM)) + (SCRATCHSEL (GETTOBJ TEXTOBJ SCRATCHSEL)) NEWLOOKS SIZE SUPER SUB NEXTB BUTTON TEXT UTEXT OFFSET FONTCLASS) [for BUTTON in '(BOLD ITALIC UNDERLINE STRIKEOUT OVERSCORE UNBREAKABLE) do (* ; @@ -2846,7 +2857,7 @@ [SELECTQ (IMAGEOBJPROP BUTTON 'STATE) (Other (* ;  "Have to get and add in a new font.") - [SETQ TEXT (MBUTTON.NEXT.FIELD.AS.ATOM TEXTOBJ (ADD1 (CDR NEXTB] + [SETQ TEXT (MBUTTON.NEXT.FIELD.AS.ATOM MENUSTREAM (ADD1 (CDR NEXTB] (SETQ UTEXT (U-CASE TEXT)) (if (NOT TEXT) then (TEDIT.PROMPTPRINT TEXTOBJ @@ -2909,17 +2920,17 @@ (* ;; "Now interpret other buttons and fields") - [SETQ SIZE (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (fetch (SELECTION CH#) of SCRATCHSEL] + [SETQ SIZE (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL CH#] (* ;  "Read the contents of the SIZE menu field") (CL:WHEN SIZE (* ; "He specified one. Set it.") (push NEWLOOKS 'SIZE SIZE)) - [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (fetch (SELECTION CH#) of SCRATCHSEL] + [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (FGETSEL SCRATCHSEL CH#] (* ;  "Get a handle on the SUPERSCRIPT/SUBSCRIPT button") (SETQ BUTTON (CAR NEXTB)) (SETQ SUPER (IMAGEOBJPROP BUTTON 'STATE)) (* ; "Decide which kind it is") - [SETQ OFFSET (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (CDR NEXTB] + [SETQ OFFSET (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (CDR NEXTB] (* ;  "And get the offset distance, in points.") (SELECTQ SUPER @@ -2975,7 +2986,8 @@ 'PARALOOKS]) (\TEDIT.APPLY.PARALOOKS - [LAMBDA (OBJ SEL W) (* ; "Edited 20-Mar-2024 11:04 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 2-May-2024 13:52 by rmk") + (* ; "Edited 20-Mar-2024 11:04 by rmk") (* ; "Edited 15-Mar-2024 13:34 by rmk") (* ; "Edited 9-Mar-2024 11:54 by rmk") (* ; "Edited 1-Mar-2024 20:33 by rmk") @@ -2992,144 +3004,150 @@ (* ;; "Handler for the Paragraph Menu's APPLY button. Collects the specs from the paragraph menu and calls TEDIT.PARALOOKS to effect the change.") - (LET ((TEXTOBJ (TEXTOBJ! (fetch (TEXTWINDOW WTEXTOBJ) of W))) - [MAINTEXTOBJ (TEXTOBJ! (fetch (TEXTWINDOW WTEXTOBJ) of (WINDOWPROP W 'MAINWINDOW] - (CH# (ADD1 (FGETSEL SEL CH#))) - SCRATCHSEL QUAD OFILE CH NEWLOOKS SIZE SUPER SUB LINELEAD PARALEAD DEFTAB BUTTON MARUNIT - NEXTB BUTTONDATA L1 LN R PARATYPE SPECIALX SPECIALY) - [SETQ CH# (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#] + (LET* ((MENUSTREAM (fetch (TEXTWINDOW WTEXTSTREAM) of MENUWINDOW)) + (TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of MENUSTREAM))) + [MAINTEXTOBJ (TEXTOBJ (WINDOWPROP MENUWINDOW 'MAINWINDOW] + (CH# (ADD1 (FGETSEL SEL CH#))) + (SCRATCHSEL (FGETTOBJ TEXTOBJ SCRATCHSEL)) + QUAD OFILE CH NEWLOOKS SIZE SUPER SUB LINELEAD PARALEAD DEFTAB BUTTON MARUNIT NEXTB + BUTTONDATA L1 LN R PARATYPE SPECIALX SPECIALY) + [SETQ CH# (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#] (* ; "Skip the SHOW button") - [SETQ CH# (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#] + [SETQ CH# (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#] (* ; "and the NEUTRAL button.") - (SETQ SCRATCHSEL (fetch (TEXTOBJ SCRATCHSEL) of TEXTOBJ)) - (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#)) (* ; + (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#))(* ;  "Get the JUSTIFICATION button: Left/Right/Centered/Justified") - (SETQ BUTTON (CAR NEXTB)) - (CL:WHEN (AND (SETQ QUAD (IMAGEOBJPROP BUTTON 'STATE)) - (NEQ QUAD 'OFF)) (* ; "A justification was specified") - (push NEWLOOKS 'QUAD (U-CASE (MKATOM QUAD)))) - [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (CDR NEXTB] + (SETQ BUTTON (CAR NEXTB)) + (CL:WHEN (AND (SETQ QUAD (IMAGEOBJPROP BUTTON 'STATE)) + (NEQ QUAD 'OFF)) (* ; "A justification was specified") + (push NEWLOOKS 'QUAD (U-CASE (MKATOM QUAD)))) + [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (CDR NEXTB] (* ; "Go to the 'Page Heading' button") - (SETQ BUTTON (CAR NEXTB)) - [COND - [(EQ (IMAGEOBJPROP BUTTON 'STATE) - 'ON) (* ; + (SETQ BUTTON (CAR NEXTB)) + [COND + [(EQ (IMAGEOBJPROP BUTTON 'STATE) + 'ON) (* ;  "A page heading of a particular subtype") - (push NEWLOOKS 'TYPE 'PAGEHEADING 'SUBTYPE (MKATOM (MBUTTON.NEXT.FIELD.AS.TEXT - TEXTOBJ - (ADD1 (CDR NEXTB] - [(EQ (IMAGEOBJPROP BUTTON 'STATE) - 'OFF) (* ; + (push NEWLOOKS 'TYPE 'PAGEHEADING 'SUBTYPE (MKATOM (MBUTTON.NEXT.FIELD.AS.TEXT + MENUSTREAM + (ADD1 (CDR NEXTB] + [(EQ (IMAGEOBJPROP BUTTON 'STATE) + 'OFF) (* ;  "This paragraph IS NOT a page heading.") - (push NEWLOOKS 'TYPE NIL 'SUBTYPE NIL) - (MBUTTON.NEXT.FIELD.AS.TEXT TEXTOBJ (ADD1 (CDR NEXTB] - (T (* ; "No change specified.") - (MBUTTON.NEXT.FIELD.AS.TEXT TEXTOBJ (ADD1 (CDR NEXTB] - (CL:WHEN (SETQ LINELEAD (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (FGETSEL SCRATCHSEL CH#))) + (push NEWLOOKS 'TYPE NIL 'SUBTYPE NIL) + (MBUTTON.NEXT.FIELD.AS.TEXT MENUSTREAM (ADD1 (CDR NEXTB] + (T (* ; "No change specified.") + (MBUTTON.NEXT.FIELD.AS.TEXT MENUSTREAM (ADD1 (CDR NEXTB] + (CL:WHEN (SETQ LINELEAD (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (FGETSEL SCRATCHSEL CH#))) (* ; "Get any line leading") - (push NEWLOOKS 'LINELEADING LINELEAD)) - (CL:WHEN [SETQ PARALEAD (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (FGETSEL SCRATCHSEL CH#] + (push NEWLOOKS 'LINELEADING LINELEAD)) + (CL:WHEN [SETQ PARALEAD (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL + CH#] (* ; "Get any paragraph leading") - (push NEWLOOKS 'PARALEADING PARALEAD)) - (CL:WHEN [SETQ SPECIALX (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (FGETSEL SCRATCHSEL CH#] + (push NEWLOOKS 'PARALEADING PARALEAD)) + (CL:WHEN [SETQ SPECIALX (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL + CH#] (* ;  "Get any special X position for the paragraph") - (push NEWLOOKS 'SPECIALX (FIXR (TIMES 12 SPECIALX)))) - (CL:WHEN [SETQ SPECIALY (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (FGETSEL SCRATCHSEL CH#] + (push NEWLOOKS 'SPECIALX (FIXR (TIMES 12 SPECIALX)))) + (CL:WHEN [SETQ SPECIALY (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL + CH#] (* ;  "Get special Y positioning for the paragraph") - (push NEWLOOKS 'SPECIALY (FIXR (TIMES 12 SPECIALY)))) - (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (FGETSEL SCRATCHSEL CH#))) - (SETQ BUTTON (CAR NEXTB)) - (COND - ((EQ (IMAGEOBJPROP BUTTON 'STATE) - 'ON) (* ; + (push NEWLOOKS 'SPECIALY (FIXR (TIMES 12 SPECIALY)))) + (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (FGETSEL SCRATCHSEL CH#))) + (SETQ BUTTON (CAR NEXTB)) + (COND + ((EQ (IMAGEOBJPROP BUTTON 'STATE) + 'ON) (* ;  "This paragraph starts on a new page (or col or box, as apprpopriate)") - (push NEWLOOKS 'NEWPAGEBEFORE T)) - ((EQ (IMAGEOBJPROP BUTTON 'STATE) - 'OFF) (* ; + (push NEWLOOKS 'NEWPAGEBEFORE T)) + ((EQ (IMAGEOBJPROP BUTTON 'STATE) + 'OFF) (* ;  "This paragraph IS NOT a page heading.") - (push NEWLOOKS 'NEWPAGEBEFORE NIL))) - [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (CDR NEXTB] - (SETQ BUTTON (CAR NEXTB)) - (COND - ((EQ (IMAGEOBJPROP BUTTON 'STATE) - 'ON) (* ; + (push NEWLOOKS 'NEWPAGEBEFORE NIL))) + [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (CDR NEXTB] + (SETQ BUTTON (CAR NEXTB)) + (COND + ((EQ (IMAGEOBJPROP BUTTON 'STATE) + 'ON) (* ;  "The next paragraph starts on a new page....") - (push NEWLOOKS 'NEWPAGEAFTER T)) - ((EQ (IMAGEOBJPROP BUTTON 'STATE) - 'OFF) (* ; + (push NEWLOOKS 'NEWPAGEAFTER T)) + ((EQ (IMAGEOBJPROP BUTTON 'STATE) + 'OFF) (* ;  "The next paragraph DOESN'T START on a new page....") - (push NEWLOOKS 'NEWPAGEAFTER NIL))) - [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (CDR NEXTB] - (SETQ BUTTON (CAR NEXTB)) - (SELECTQ (IMAGEOBJPROP BUTTON 'STATE) - (ON (push NEWLOOKS 'HARDCOPY T)) - (OFF (push NEWLOOKS 'HARDCOPY NIL)) - NIL) + (push NEWLOOKS 'NEWPAGEAFTER NIL))) + [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (CDR NEXTB] + (SETQ BUTTON (CAR NEXTB)) + (SELECTQ (IMAGEOBJPROP BUTTON 'STATE) + (ON (push NEWLOOKS 'HARDCOPY T)) + (OFF (push NEWLOOKS 'HARDCOPY NIL)) + NIL) (* ;;; "THE VARIOUS KINDS OF KEEP PROPERTIES (ONLY HEADING-KEEP FOR NOW THO)") - [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (CDR NEXTB] - (SETQ BUTTON (CAR NEXTB)) - (SELECTQ (IMAGEOBJPROP BUTTON 'STATE) - (ON (push NEWLOOKS 'HEADINGKEEP 'ON)) - (OFF (push NEWLOOKS 'HEADINGKEEP 'OFF)) - NIL) + [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (CDR NEXTB] + (SETQ BUTTON (CAR NEXTB)) + (SELECTQ (IMAGEOBJPROP BUTTON 'STATE) + (ON (push NEWLOOKS 'HEADINGKEEP 'ON)) + (OFF (push NEWLOOKS 'HEADINGKEEP 'OFF)) + NIL) - (* ;; "Default tab width") + (* ;; "Default tab width") - (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (FGETSEL SCRATCHSEL CH#))) - (SETQ BUTTON (CAR NEXTB)) - (SETQ DEFTAB (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (CDR NEXTB))) + (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (FGETSEL SCRATCHSEL CH#))) + (SETQ BUTTON (CAR NEXTB)) + (SETQ DEFTAB (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (CDR NEXTB))) - (* ;; "If the MARBAR is next, we don't need the loop. If it isn't next, the original code would have looped forever.") + (* ;; "If the MARBAR is next, we don't need the loop. If it isn't next, the original code would have looped forever.") - (* ;; "This keeps the loop, but allows for the search to advance, in case in the future some other item is stuck in. But if it doesn't find a MARGINBAR, the following code will crash.") + (* ;; "This keeps the loop, but allows for the search to advance, in case in the future some other item is stuck in. But if it doesn't find a MARGINBAR, the following code will crash.") - [bind (CHNO _ (FGETSEL SCRATCHSEL CH#)) while NEXTB until (type? MARGINBAR BUTTON) - do (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CHNO)) - (SETQ BUTTON (CAR NEXTB)) - (SETQ CHNO (ADD1 (CDR NEXTB] - (CL:UNLESS (type? MARGINBAR BUTTON) - (SHOULDNT "MARGINBAR NOT FOUND")) - (SETQ BUTTONDATA (IMAGEOBJPROP BUTTON 'OBJECTDATUM)) - (SETQ MARUNIT (fetch MARUNIT of BUTTONDATA)) - (SETQ L1 (FIXR (TIMES (fetch MARL1 of BUTTONDATA) - MARUNIT))) - (CL:WHEN (IGEQ L1 0) (* ; + [bind (CHNO _ (FGETSEL SCRATCHSEL CH#)) while NEXTB until (type? MARGINBAR BUTTON) + do (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CHNO)) + (SETQ BUTTON (CAR NEXTB)) + (SETQ CHNO (ADD1 (CDR NEXTB] + (CL:UNLESS (type? MARGINBAR BUTTON) + (SHOULDNT "MARGINBAR NOT FOUND")) + (SETQ BUTTONDATA (IMAGEOBJPROP BUTTON 'OBJECTDATUM)) + (SETQ MARUNIT (fetch MARUNIT of BUTTONDATA)) + (SETQ L1 (FIXR (TIMES (fetch MARL1 of BUTTONDATA) + MARUNIT))) + (CL:WHEN (IGEQ L1 0) (* ;  "The 1stleftmargin is set, and non-neutral.") - (push NEWLOOKS '1STLEFTMARGIN L1)) - (SETQ LN (FIXR (TIMES (fetch MARLN of BUTTONDATA) - MARUNIT))) - (CL:WHEN (IGEQ LN 0) (* ; + (push NEWLOOKS '1STLEFTMARGIN L1)) + (SETQ LN (FIXR (TIMES (fetch MARLN of BUTTONDATA) + MARUNIT))) + (CL:WHEN (IGEQ LN 0) (* ;  "The LEFTMARGIN is set, and non-neutral.") - (push NEWLOOKS 'LEFTMARGIN LN)) - (SETQ R (FIXR (TIMES (fetch MARR of BUTTONDATA) - MARUNIT))) - (CL:WHEN (IGEQ R 0) (* ; + (push NEWLOOKS 'LEFTMARGIN LN)) + (SETQ R (FIXR (TIMES (fetch MARR of BUTTONDATA) + MARUNIT))) + (CL:WHEN (IGEQ R 0) (* ;  "The RIGHTMARGIN is set, and non-neutral.") - (push NEWLOOKS 'RIGHTMARGIN R)) - (CL:UNLESS (MEMB (fetch MARTABS of BUTTONDATA) - '(NIL NEUTRAL)) (* ; + (push NEWLOOKS 'RIGHTMARGIN R)) + (CL:UNLESS (MEMB (fetch MARTABS of BUTTONDATA) + '(NIL NEUTRAL)) (* ;  "If the tab settings are neutral, don't change anything.") - [push NEWLOOKS 'TABS (CONS DEFTAB (SORT (for TAB in (fetch MARTABS of BUTTONDATA) - collect (CONS (FIXR (TIMES (CAR TAB) - MARUNIT)) - (CDR TAB))) - (FUNCTION (LAMBDA (A B) - (ILEQ (CAR A) - (CAR B]) - (TEDIT.PARALOOKS MAINTEXTOBJ NEWLOOKS (GETSEL (FGETTOBJ MAINTEXTOBJ SEL) - CH#) - (GETSEL (FGETTOBJ MAINTEXTOBJ SEL) - DCH)) - (\TEDIT.SHOWSEL SEL NIL) - (TTY.PROCESS (WINDOWPROP (WINDOWPROP W 'MAINWINDOW) - 'PROCESS]) + [push NEWLOOKS 'TABS (CONS DEFTAB (SORT (for TAB in (fetch MARTABS of BUTTONDATA) + collect (CONS (FIXR (TIMES (CAR TAB) + MARUNIT)) + (CDR TAB))) + (FUNCTION (LAMBDA (A B) + (ILEQ (CAR A) + (CAR B]) + (TEDIT.PARALOOKS MAINTEXTOBJ NEWLOOKS (GETSEL (FGETTOBJ MAINTEXTOBJ SEL) + CH#) + (GETSEL (FGETTOBJ MAINTEXTOBJ SEL) + DCH)) + (\TEDIT.SHOWSEL SEL NIL) + (TTY.PROCESS (WINDOWPROP (WINDOWPROP MENUWINDOW 'MAINWINDOW) + 'PROCESS]) (\TEDIT.SHOW.PARALOOKS - [LAMBDA (OBJ SEL W) (* ; "Edited 27-Mar-2024 13:52 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 6-May-2024 23:53 by rmk") + (* ; "Edited 29-Apr-2024 14:10 by rmk") + (* ; "Edited 27-Mar-2024 13:52 by rmk") (* ; "Edited 15-Mar-2024 13:34 by rmk") (* ; "Edited 25-Feb-2024 23:33 by rmk") (* ; "Edited 20-Jul-2023 17:00 by rmk") @@ -3145,18 +3163,18 @@ (* ;; "This only makese sense if you know that CH# in SCRATCHSEL gets updated down below MBUTTON.SET.NEXT.FIELD") - (LET ((TEXTOBJ (GETSEL SEL SELTEXTOBJ)) + (LET ((MENUTEXTOBJ (TEXTOBJ SEL)) (CH# (ADD1 (GETSEL SEL CH#))) BUTTON NEXTB BUTTONDATA PARALOOKS MARUNIT) (CL:WHEN [SETQ PARALOOKS (TEDIT.GET.PARALOOKS (fetch (TEXTWINDOW WTEXTSTREAM) - of (WINDOWPROP W 'MAINWINDOW] - (\TEDIT.SHOWSEL SEL NIL) + of (WINDOWPROP MENUWINDOW 'MAINWINDOW] + (\TEDIT.SHOWSEL SEL NIL NIL MENUTEXTOBJ) (SETSEL SEL SET NIL) [TEDIT.DEFERRED-UPDATES - TEXTOBJ (* ; + MENUTEXTOBJ (* ;  "Skip NEUTRAL, grab justifiers (QUAD)") - [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON - TEXTOBJ CH#] + [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON + MENUTEXTOBJ CH#] (SETQ BUTTON (CAR NEXTB)) (for ITEM in (IMAGEOBJPROP BUTTON 'BUTTONS) when (EQ (LISTGET PARALOOKS 'QUAD) @@ -3166,7 +3184,7 @@ (* ; "Turn this button on.") (RETURN)) (* ;  "Now find which text button was 'on'") - [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (CDR NEXTB] + [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ (ADD1 (CDR NEXTB] (* ; "Find the 'Page Heading' button") (SETQ BUTTON (CAR NEXTB)) (COND @@ -3174,16 +3192,16 @@ 'PAGEHEADING) (* ;  "This IS a page heading. Turn the button ON and set the heading type field") (IMAGEOBJPROP BUTTON 'STATE 'ON) - (MBUTTON.SET.NEXT.FIELD TEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#)) + (MBUTTON.SET.NEXT.FIELD MENUTEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#)) (LISTGET PARALOOKS 'SUBTYPE] (T (IMAGEOBJPROP BUTTON 'STATE 'OFF) (* ; "Not a page heading, no type") - (MBUTTON.SET.NEXT.FIELD TEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#)) + (MBUTTON.SET.NEXT.FIELD MENUTEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#)) NIL))) - (MBUTTON.SET.NEXT.FIELD TEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#)) + (MBUTTON.SET.NEXT.FIELD MENUTEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#)) (LISTGET PARALOOKS 'LINELEADING)) - (MBUTTON.SET.NEXT.FIELD TEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#)) + (MBUTTON.SET.NEXT.FIELD MENUTEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#)) (LISTGET PARALOOKS 'PARALEADING)) (* ; "Update the PARA LEADING field") - [MBUTTON.SET.NEXT.FIELD TEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#)) + [MBUTTON.SET.NEXT.FIELD MENUTEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#)) (LET ((VAL (/ (FIXR (IQUOTIENT (OR (LISTGET PARALOOKS 'SPECIALX) 0) 3)) @@ -3192,7 +3210,7 @@ ((FIXP VAL) VAL) (T (FLOAT VAL] - [MBUTTON.SET.NEXT.FIELD TEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#)) + [MBUTTON.SET.NEXT.FIELD MENUTEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#)) (LET ((VAL (/ (FIXR (IQUOTIENT (OR (LISTGET PARALOOKS 'SPECIALY) 0) 3)) @@ -3201,30 +3219,30 @@ ((FIXP VAL) VAL) (T (FLOAT VAL] - [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#] + [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ (ADD1 (GETSEL SCRATCHSEL CH#] (SETQ BUTTON (CAR NEXTB)) (IMAGEOBJPROP BUTTON 'STATE (LISTGET PARALOOKS 'NEWPAGEBEFORE)) - [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (CDR NEXTB] + [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ (ADD1 (CDR NEXTB] (SETQ BUTTON (CAR NEXTB)) (IMAGEOBJPROP BUTTON 'STATE (LISTGET PARALOOKS 'NEWPAGEAFTER)) (* ;; "HARDCOPY-DISPLAY MODE") - [SETQ NEXTB (MBUTTON.SET.NEXT.BUTTON.STATE TEXTOBJ (ADD1 (CDR NEXTB)) + [SETQ NEXTB (MBUTTON.SET.NEXT.BUTTON.STATE MENUTEXTOBJ (ADD1 (CDR NEXTB)) (LISTGET PARALOOKS 'HARDCOPY] (* ;; "HEADING KEEP") - [SETQ NEXTB (MBUTTON.SET.NEXT.BUTTON.STATE TEXTOBJ NEXTB (LISTGET PARALOOKS - 'HEADINGKEEP] + [SETQ NEXTB (MBUTTON.SET.NEXT.BUTTON.STATE MENUTEXTOBJ NEXTB (LISTGET PARALOOKS + 'HEADINGKEEP] (* ;; "DEFAULT TAB WIDTH") - [MBUTTON.SET.NEXT.FIELD TEXTOBJ NEXTB (CAR (LISTGET PARALOOKS 'TABS] - (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (GETSEL SCRATCHSEL CH#))) + [MBUTTON.SET.NEXT.FIELD MENUTEXTOBJ NEXTB (CAR (LISTGET PARALOOKS 'TABS] + (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ (GETSEL SCRATCHSEL CH#))) (SETQ BUTTON (CAR NEXTB)) (until (type? MARGINBAR BUTTON) do [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON - TEXTOBJ + MENUTEXTOBJ (ADD1 (CDR NEXTB] (SETQ BUTTON (CAR NEXTB))) (SETQ BUTTONDATA (IMAGEOBJPROP BUTTON 'OBJECTDATUM)) @@ -3240,18 +3258,19 @@ BUTTONDATA )) (CDR TAB] - (TTY.PROCESS (WINDOWPROP (WINDOWPROP W 'MAINWINDOW) + (TTY.PROCESS (WINDOWPROP (WINDOWPROP MENUWINDOW 'MAINWINDOW) 'PROCESS)))]) (\TEDIT.NEUTRALIZE.PARALOOKS.MENU - [LAMBDA (OBJ SEL W) (* ; "Edited 25-Feb-2024 23:35 by rmk") + [LAMBDA (OBJ SEL W) (* ; "Edited 29-Apr-2024 13:13 by rmk") + (* ; "Edited 25-Feb-2024 23:35 by rmk") (* ; "Edited 20-Jul-2023 17:00 by rmk") (* ; "Edited 21-Oct-2022 18:51 by rmk") (* ; "Edited 30-May-91 22:18 by jds") (* ;; "Set all the fields of a PARAGRAPH LOOKS menu to neutral settings.") - (LET ((TEXTOBJ (GETSEL SEL SELTEXTOBJ)) + (LET ((TEXTOBJ (TEXTOBJ SEL)) (CH# (ADD1 (GETSEL SEL CH#))) BUTTON NEXTB BUTTONDATA) (* ; "Get to the start of the text.") (TEDIT.DEFERRED-UPDATES TEXTOBJ (SETQ NEXTB (MBUTTON.SET.NEXT.BUTTON.STATE TEXTOBJ CH# @@ -3344,7 +3363,9 @@ (DEFINEQ (\TEDIT.SHOW.PAGEFORMATTING - [LAMBDA (OBJ SEL W) (* ; "Edited 27-Mar-2024 15:15 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 2-May-2024 18:05 by rmk") + (* ; "Edited 29-Apr-2024 12:59 by rmk") + (* ; "Edited 27-Mar-2024 15:15 by rmk") (* ; "Edited 15-Mar-2024 13:34 by rmk") (* ; "Edited 18-Jan-2024 08:33 by rmk") (* ; "Edited 12-Nov-2023 23:40 by rmk") @@ -3357,16 +3378,15 @@ (* ;;; "Take a document's page formatting, and display it in the menu.") - (LET* ((TEXTOBJ (GETSEL SEL SELTEXTOBJ)) - [MAINTEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of (fetch (TEXTWINDOW WTEXTSTREAM) - of (WINDOWPROP W 'MAINWINDOW] + (LET* ((TEXTOBJ (TEXTOBJ MENUWINDOW)) + [MAINTEXTOBJ (TEXTOBJ (WINDOWPROP MENUWINDOW 'MAINWINDOW] (CH# (ADD1 (GETSEL SEL CH#))) FOLIOINFO NEWLOOKS NEXTB BUTTON PAGEID OPAGEFRAMES FIRST REST PFONT HEADING HEADINGS PAGEPROPS STARTINGPAGE# PAPERSIZE) (* ;; "Start by turning off the selection--and leaving it off afterward.") - (\TEDIT.SHOWSEL SEL NIL) + (\TEDIT.SHOWSEL SEL NIL NIL TEXTOBJ) (SETSEL SEL SET NIL) (* ;; "What kind of page are we looking at the specs for?") @@ -3528,7 +3548,7 @@ (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Note: The menu shows only 8 of " - (IPLUS 8 (LENGTH HEADINGS)) + (LENGTH HEADINGS) " headings") T T)) (* ;  "The font for the page numbers to appear in.") @@ -3549,7 +3569,9 @@ TEDIT.CHARLOOKSMENU.SPEC]) (\TEDIT.APPLY.PAGEFORMATTING - [LAMBDA (OBJ SEL W) (* ; "Edited 27-Mar-2024 15:20 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 2-May-2024 14:26 by rmk") + (* ; "Edited 29-Apr-2024 13:36 by rmk") + (* ; "Edited 27-Mar-2024 15:20 by rmk") (* ; "Edited 21-Dec-2023 12:31 by rmk") (* ; "Edited 8-Aug-2023 00:02 by rmk") (* ; "Edited 21-Oct-2022 18:51 by rmk") @@ -3558,168 +3580,160 @@ (* ;;; "Change the page formatting for this document") - (PROG ((TEXTOBJ (fetch (SELECTION SELTEXTOBJ) of SEL)) - [MAINTEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of (fetch (TEXTWINDOW WTEXTSTREAM) - of (WINDOWPROP W 'MAINWINDOW] - (CH# (ADD1 (fetch (SELECTION CH#) of SEL))) - SCRATCHSEL NEXTB BUTTON OPAGEFRAMES PAGEID PX PY LEFT BOTTOM TOP RIGHT ALIGNMENT PAGENOS - COLS COLWIDTH INTERCOL PFONT NPAGEFORMAT HEADINGTYPE HEADINGX HEADINGY HEADINGS - HEADINGINVALID STARTINGPAGE# FOLIOFORMAT FOLIOPRETEXT FOLIOPOSTTEXT PAGEOPTIONS - NFPAGEFORMAT PAPERSIZE LANDSCAPE?) - (SETQ SCRATCHSEL (fetch (TEXTOBJ SCRATCHSEL) of TEXTOBJ)) - [SETQ CH# (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#] + (PROG* ((MENUSTREAM (fetch (TEXTWINDOW WTEXTSTREAM) of MENUWINDOW)) + (MENUTEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of MENUSTREAM)) + (TEXTOBJ SEL)) + (SCRATCHSEL (FGETTOBJ MENUTEXTOBJ SCRATCHSEL)) + [MAINTEXTOBJ (TEXTOBJ (WINDOWPROP MENUWINDOW 'MAINWINDOW] + (CH# (ADD1 (GETSEL SEL CH#))) + NEXTB BUTTON OPAGEFRAMES PAGEID PX PY LEFT BOTTOM TOP RIGHT ALIGNMENT PAGENOS COLS + COLWIDTH INTERCOL PFONT NPAGEFORMAT HEADINGTYPE HEADINGX HEADINGY HEADINGS HEADINGINVALID + STARTINGPAGE# FOLIOFORMAT FOLIOPRETEXT FOLIOPOSTTEXT PAGEOPTIONS NFPAGEFORMAT PAPERSIZE + LANDSCAPE?) + [SETQ CH# (ADD1 (CDR (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ CH#] (* ; "Skip the SHOW button.") - (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#)) - (SETQ CH# (ADD1 (CDR NEXTB))) - (SELECTQ (IMAGEOBJPROP (CAR NEXTB) - 'STATE) - (|First(&Default)| - (SETQ PAGEID 'FIRST)) - (Other% Left (SETQ PAGEID 'LEFT)) - (Other% Right (SETQ PAGEID 'RIGHT)) - (PROGN (TEDIT.PROMPTPRINT MAINTEXTOBJ "Set KIND OF PAGE before APPLYing." T) - (RETURN))) (* ; "Find which page, for later.") - (SETQ STARTINGPAGE# (AND (EQ PAGEID 'FIRST) - (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ CH#))) - (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#)) - (SETQ CH# (ADD1 (CDR NEXTB))) - (SETQ PAPERSIZE (OR (IMAGEOBJPROP (CAR NEXTB) - 'STATE) - 'Letter)) (* ; - "Get the size of paper this is to be formatted for") - (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#)) - (SETQ CH# (ADD1 (CDR NEXTB))) - (SETQ LANDSCAPE? (EQ (IMAGEOBJPROP (CAR NEXTB) + (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ CH#)) + (SETQ CH# (ADD1 (CDR NEXTB))) + (SELECTQ (IMAGEOBJPROP (CAR NEXTB) + 'STATE) + (|First(&Default)| + (SETQ PAGEID 'FIRST)) + (Other% Left (SETQ PAGEID 'LEFT)) + (Other% Right (SETQ PAGEID 'RIGHT)) + (PROGN (TEDIT.PROMPTPRINT MAINTEXTOBJ "Set KIND OF PAGE before APPLYing." T) + (RETURN))) (* ; "Find which page, for later.") + (SETQ STARTINGPAGE# (AND (EQ PAGEID 'FIRST) + (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM CH#))) + (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ CH#)) + (SETQ CH# (ADD1 (CDR NEXTB))) + (SETQ PAPERSIZE (OR (IMAGEOBJPROP (CAR NEXTB) 'STATE) - 'ON)) (* ; + 'Letter)) (* ; + "Get the size of paper this is to be formatted for") + (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ CH#)) + (SETQ CH# (ADD1 (CDR NEXTB))) + (SETQ LANDSCAPE? (EQ (IMAGEOBJPROP (CAR NEXTB) + 'STATE) + 'ON)) (* ;  "Decide if this kind of page is to be printed landscape....") - (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ CH#)) - (SETQ CH# (ADD1 (CDR NEXTB))) - (SELECTQ (IMAGEOBJPROP (CAR NEXTB) - 'STATE) - (No (SETQ PAGENOS NIL)) - (Yes (SETQ PAGENOS T)) - NIL) (* ; "Find about page numbers") - (SETQ PX (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ CH#)) - [SETQ PY (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (fetch (SELECTION CH#) of SCRATCHSEL] - [COND - (PAGENOS (* ; + (SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ CH#)) + (SETQ CH# (ADD1 (CDR NEXTB))) + (SELECTQ (IMAGEOBJPROP (CAR NEXTB) + 'STATE) + (No (SETQ PAGENOS NIL)) + (Yes (SETQ PAGENOS T)) + NIL) (* ; "Find about page numbers") + (SETQ PX (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM CH#)) + [SETQ PY (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL CH#] + [COND + (PAGENOS (* ;  "If he wants page numbers, make sure he said WHERE to put them.") - (COND - ((AND PX PY)) - (T (TEDIT.PROMPTPRINT MAINTEXTOBJ - "Please set the X and Y location for page numbers before APPLYing." - T) - (TEDIT.PROMPTFLASH MAINTEXTOBJ) - (RETURN] - [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (fetch (SELECTION CH#) of SCRATCHSEL] + (COND + ((AND PX PY)) + (T (TEDIT.PROMPTPRINT MAINTEXTOBJ + "Please set the X and Y location for page numbers before APPLYing." + T) + (TEDIT.PROMPTFLASH MAINTEXTOBJ) + (RETURN] + [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ (ADD1 (FGETSEL SCRATCHSEL CH#] (* ;  "Get to the numbering-format button") - (SETQ BUTTON (CAR NEXTB)) - (SETQ FOLIOFORMAT (SELECTQ (IMAGEOBJPROP BUTTON 'STATE) - (123 (* ; "arabic numbers") - 'ARABIC) - (xiv (* ; "lower-case roman numerals") - 'LOWERROMAN) - (XIV (* ; "Upper-case roman numerals") - 'UPPERROMAN) - 'ARABIC)) - [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ (ADD1 (CDR NEXTB] + (SETQ BUTTON (CAR NEXTB)) + (SETQ FOLIOFORMAT (SELECTQ (IMAGEOBJPROP BUTTON 'STATE) + (123 (* ; "arabic numbers") + 'ARABIC) + (xiv (* ; "lower-case roman numerals") + 'LOWERROMAN) + (XIV (* ; "Upper-case roman numerals") + 'UPPERROMAN) + 'ARABIC)) + [SETQ NEXTB (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ (ADD1 (CDR NEXTB] (* ;  "Get to the number alignment button") - (SETQ BUTTON (CAR NEXTB)) - [SETQ ALIGNMENT (U-CASE (IMAGEOBJPROP BUTTON 'STATE] + (SETQ BUTTON (CAR NEXTB)) + [SETQ ALIGNMENT (U-CASE (IMAGEOBJPROP BUTTON 'STATE] (* ; "PX PY PFONT ALIGNMENT") (* ; "Margins: LEFT, RIGHT, TOP, BOTTOM") - (SETQ CH# (ADD1 (CDR NEXTB))) - (SETQ FOLIOPRETEXT (MBUTTON.NEXT.FIELD.AS.TEXT TEXTOBJ CH#)) - [SETQ FOLIOPOSTTEXT (MBUTTON.NEXT.FIELD.AS.TEXT TEXTOBJ (ADD1 (fetch (SELECTION CH#) - of SCRATCHSEL] + (SETQ CH# (ADD1 (CDR NEXTB))) + (SETQ FOLIOPRETEXT (MBUTTON.NEXT.FIELD.AS.TEXT MENUSTREAM CH#)) + [SETQ FOLIOPOSTTEXT (MBUTTON.NEXT.FIELD.AS.TEXT MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL CH#] (* ;;; "Now get the margins on the paper") - [SETQ LEFT (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (fetch (SELECTION CH#) of SCRATCHSEL - ] - [SETQ RIGHT (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (fetch (SELECTION CH#) of - SCRATCHSEL - ] - [SETQ TOP (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (fetch (SELECTION CH#) of SCRATCHSEL] - [SETQ BOTTOM (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (fetch (SELECTION CH#) - of SCRATCHSEL] - (CL:UNLESS [SETQ COLS (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (fetch (SELECTION CH#) - of SCRATCHSEL] - (TEDIT.PROMPTPRINT MAINTEXTOBJ "Please specify how many columns there should be." T) - (TEDIT.PROMPTFLASH MAINTEXTOBJ)) - [SETQ COLWIDTH (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (fetch (SELECTION CH#) - of SCRATCHSEL] - [SETQ INTERCOL (MBUTTON.NEXT.FIELD.AS.NUMBER TEXTOBJ (ADD1 (fetch (SELECTION CH#) - of SCRATCHSEL] + [SETQ LEFT (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL CH#] + [SETQ RIGHT (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL CH#] + [SETQ TOP (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL CH#] + [SETQ BOTTOM (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL CH#] + (CL:UNLESS [SETQ COLS (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL + CH#] + (TEDIT.PROMPTPRINT MAINTEXTOBJ "Please specify how many columns there should be." T) + (TEDIT.PROMPTFLASH MAINTEXTOBJ)) + [SETQ COLWIDTH (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL CH#] + [SETQ INTERCOL (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL CH#] (* ; "Col count, width, spacing") - (SETQ HEADINGS (for HEADING# from 1 to 8 - when (PROG1 [SETQ HEADINGTYPE (MBUTTON.NEXT.FIELD.AS.ATOM - TEXTOBJ - (ADD1 (fetch (SELECTION CH#) of SCRATCHSEL - ] - [SETQ HEADINGX (MBUTTON.NEXT.FIELD.AS.NUMBER - TEXTOBJ - (ADD1 (fetch (SELECTION CH#) of SCRATCHSEL] - [SETQ HEADINGY (MBUTTON.NEXT.FIELD.AS.NUMBER - TEXTOBJ - (ADD1 (fetch (SELECTION CH#) of SCRATCHSEL]) - collect (CL:UNLESS (AND HEADINGX HEADINGY) - (TEDIT.PROMPTPRINT MAINTEXTOBJ (CONCAT + (SETQ HEADINGS (for HEADING# from 1 to 8 + when (PROG1 [SETQ HEADINGTYPE (MBUTTON.NEXT.FIELD.AS.ATOM + MENUSTREAM + (ADD1 (FGETSEL SCRATCHSEL CH#] + [SETQ HEADINGX (MBUTTON.NEXT.FIELD.AS.NUMBER + MENUSTREAM + (ADD1 (FGETSEL SCRATCHSEL CH#] + [SETQ HEADINGY (MBUTTON.NEXT.FIELD.AS.NUMBER + MENUSTREAM + (ADD1 (FGETSEL SCRATCHSEL CH#]) + collect (CL:UNLESS (AND HEADINGX HEADINGY) + (TEDIT.PROMPTPRINT MAINTEXTOBJ (CONCAT "You need to say WHERE " - HEADINGTYPE - " headings go.") - T) - (TEDIT.PROMPTFLASH MAINTEXTOBJ) - (SETQ HEADINGINVALID T)) - (LIST HEADINGTYPE HEADINGX HEADINGY))) - (CL:WHEN HEADINGINVALID (* ; "Headings invalid.") - (RETURN)) - [SETQ PFONT (\TEDIT.PARSE.CHARLOOKS.MENU TEXTOBJ (ADD1 (fetch (SELECTION CH#) of SCRATCHSEL - ] + HEADINGTYPE + " headings go.") + T) + (TEDIT.PROMPTFLASH MAINTEXTOBJ) + (SETQ HEADINGINVALID T)) + (LIST HEADINGTYPE HEADINGX HEADINGY))) + (CL:WHEN HEADINGINVALID (* ; "Headings invalid.") + (RETURN)) + [SETQ PFONT (\TEDIT.PARSE.CHARLOOKS.MENU MENUSTREAM (ADD1 (FGETSEL SCRATCHSEL CH#] (* ;;; "Glom all the oddball options (starting page, folio format &c) together") - (SETQ PAGEOPTIONS (AND STARTINGPAGE# (LIST 'STARTINGPAGE# STARTINGPAGE#))) - (push PAGEOPTIONS 'FOLIOINFO (LIST FOLIOFORMAT FOLIOPRETEXT FOLIOPOSTTEXT)) - (COND - (LANDSCAPE? (* ; + (SETQ PAGEOPTIONS (AND STARTINGPAGE# (LIST 'STARTINGPAGE# STARTINGPAGE#))) + (push PAGEOPTIONS 'FOLIOINFO (LIST FOLIOFORMAT FOLIOPRETEXT FOLIOPOSTTEXT)) + (COND + (LANDSCAPE? (* ;  "The pages are to be printed landscape. Remember that fact.") - (push PAGEOPTIONS LANDSCAPE? T))) - (SETQ NPAGEFORMAT (TEDIT.SINGLE.PAGEFORMAT PAGENOS PX PY PFONT (AND (NEQ ALIGNMENT - 'OFF) - ALIGNMENT) - LEFT RIGHT TOP BOTTOM COLS COLWIDTH INTERCOL HEADINGS 'PICAS - PAGEOPTIONS PAPERSIZE)) - (SETQ OPAGEFRAMES (fetch (TEXTOBJ TXTPAGEFRAMES) of MAINTEXTOBJ)) - (CL:UNLESS (LISTP OPAGEFRAMES) - [COND - ((EQ PAGEID 'FIRST) (* ; + (push PAGEOPTIONS LANDSCAPE? T))) + (SETQ NPAGEFORMAT (TEDIT.SINGLE.PAGEFORMAT PAGENOS PX PY PFONT (AND (NEQ ALIGNMENT + 'OFF) + ALIGNMENT) + LEFT RIGHT TOP BOTTOM COLS COLWIDTH INTERCOL HEADINGS + 'PICAS PAGEOPTIONS PAPERSIZE)) + (SETQ OPAGEFRAMES (FGETTOBJ MENUTEXTOBJ TXTPAGEFRAMES)) + (CL:UNLESS (LISTP OPAGEFRAMES) + [COND + ((EQ PAGEID 'FIRST) (* ;  "Setting the first page sets them all") - (SETQ PAGEOPTIONS (COPY PAGEOPTIONS)) - (LISTPUT PAGEOPTIONS 'STARTINGPAGE# NIL) (* ; + (SETQ PAGEOPTIONS (COPY PAGEOPTIONS)) + (LISTPUT PAGEOPTIONS 'STARTINGPAGE# NIL) (* ;  "Starting page nubmer makes no sense on other than first pages.") - (SETQ NFPAGEFORMAT (TEDIT.SINGLE.PAGEFORMAT PAGENOS PX PY PFONT - (AND (NEQ ALIGNMENT 'OFF) - ALIGNMENT) - LEFT RIGHT TOP BOTTOM COLS COLWIDTH INTERCOL HEADINGS - 'PICAS PAGEOPTIONS PAPERSIZE)) - (SETQ OPAGEFRAMES (LIST NPAGEFORMAT NFPAGEFORMAT NFPAGEFORMAT))) - (T (* ; + (SETQ NFPAGEFORMAT (TEDIT.SINGLE.PAGEFORMAT PAGENOS PX PY PFONT + (AND (NEQ ALIGNMENT 'OFF) + ALIGNMENT) + LEFT RIGHT TOP BOTTOM COLS COLWIDTH INTERCOL HEADINGS + 'PICAS PAGEOPTIONS PAPERSIZE)) + (SETQ OPAGEFRAMES (LIST NPAGEFORMAT NFPAGEFORMAT NFPAGEFORMAT))) + (T (* ;  "Otherwise, start from the default page layout") - (SETQ OPAGEFRAMES (COPY TEDIT.PAGE.FRAMES]) - (SELECTQ PAGEID - (FIRST (RPLACA OPAGEFRAMES NPAGEFORMAT)) - (LEFT (RPLACA (CDR OPAGEFRAMES) - NPAGEFORMAT)) - (RIGHT (RPLACA (CDDR OPAGEFRAMES) + (SETQ OPAGEFRAMES (COPY TEDIT.PAGE.FRAMES]) + (SELECTQ PAGEID + (FIRST (RPLACA OPAGEFRAMES NPAGEFORMAT)) + (LEFT (RPLACA (CDR OPAGEFRAMES) NPAGEFORMAT)) - NIL) - (TEDIT.PAGEFORMAT MAINTEXTOBJ OPAGEFRAMES) - (TTY.PROCESS (WINDOWPROP (WINDOWPROP W 'MAINWINDOW) - 'PROCESS]) + (RIGHT (RPLACA (CDDR OPAGEFRAMES) + NPAGEFORMAT)) + NIL) + (TEDIT.PAGEFORMAT MAINTEXTOBJ OPAGEFRAMES) + (TTY.PROCESS (WINDOWPROP (WINDOWPROP MENUWINDOW 'MAINWINDOW) + 'PROCESS]) (TEDIT.UNPARSE.PAGEFORMAT [LAMBDA (PAGEREGION UNITS) (* ; "Edited 12-Jun-90 18:59 by mitani") @@ -4319,41 +4333,41 @@ Tab Type: " (ADDTOVAR LAMA ) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (10422 34987 (MB.BUTTONEVENTINFN 10432 . 11654) (MB.DISPLAY 11656 . 13613) (MB.SETIMAGE -13615 . 14569) (MB.SELFN 14571 . 16314) (MB.SIZEFN 16316 . 17294) (MB.WHENOPERATEDFN 17296 . 17730) ( -MB.COPYFN 17732 . 18190) (MB.GETFN 18192 . 18930) (MB.PUTFN 18932 . 19809) (MB.SHOWSELFN 19811 . 20844 -) (MBUTTON.CREATE 20846 . 22078) (MBUTTON.CHANGENAME 22080 . 22459) (MBUTTON.FIND.BUTTON 22461 . 23484 -) (MBUTTON.FIND.NEXT.BUTTON 23486 . 24829) (MBUTTON.FIND.NEXT.FIELD 24831 . 27365) (MBUTTON.INIT 27367 - . 28283) (MBUTTON.NEXT.FIELD.AS.NUMBER 28285 . 29217) (MBUTTON.NEXT.FIELD.AS.TEXT 29219 . 29645) ( -MBUTTON.NEXT.FIELD.AS.ATOM 29647 . 30448) (MBUTTON.SET.FIELD 30450 . 32656) (MBUTTON.SET.NEXT.FIELD -32658 . 34049) (MBUTTON.SET.NEXT.BUTTON.STATE 34051 . 34531) (TEDITMENU.STREAM 34533 . 34985)) (35291 -45827 (MB.CREATE.THREESTATEBUTTON 35301 . 36468) (MB.THREESTATE.DISPLAY 36470 . 39176) ( -MB.THREESTATE.SHOWSELFN 39178 . 42101) (MB.THREESTATE.WHENOPERATEDFN 42103 . 43444) ( -MB.THREESTATEBUTTON.FN 43446 . 44765) (THREESTATE.INIT 44767 . 45825)) (45928 65710 ( -MB.CREATE.NWAYBUTTON 45938 . 50007) (MB.NB.DISPLAYFN 50009 . 52277) (MB.NB.WHENOPERATEDFN 52279 . -53427) (MB.NB.SIZEFN 53429 . 57057) (MB.NWAYBUTTON.SELFN 57059 . 59167) (MB.NWAYMENU.NEWBUTTON 59169 - . 59756) (NWAYBUTTON.INIT 59758 . 60607) (MB.NB.PACKITEMS 60609 . 62588) (MB.NWAYBUTTON.ADDITEM 62590 - . 65708)) (65964 74882 (\TEXTMENU.TOGGLE.CREATE 65974 . 67464) (\TEXTMENU.TOGGLE.DISPLAY 67466 . -69899) (\TEXTMENU.TOGGLE.SHOWSELFN 69901 . 70501) (\TEXTMENU.TOGGLE.WHENOPERATEDFN 70503 . 71853) ( -\TEXTMENU.TOGGLEFN 71855 . 73054) (\TEXTMENU.TOGGLE.INIT 73056 . 73887) (\TEXTMENU.SET.TOGGLE 73889 . -74880)) (75134 111443 (DRAWMARGINSCALE 75144 . 78603) (MARGINBAR 78605 . 85466) (MARGINBAR.CREATE -85468 . 88340) (MB.MARGINBAR.SELFN 88342 . 100358) (MB.MARGINBAR.SIZEFN 100360 . 100718) ( -MB.MARGINBAR.DISPLAYFN 100720 . 103522) (MDESCALE 103524 . 104064) (MSCALE 104066 . 104396) ( -MB.MARGINBAR.SHOWTAB 104398 . 106721) (MB.MARGINBAR.TABTRACK 106723 . 108108) (\TEDIT.TABTYPE.SET -108110 . 110556) (MARGINBAR.INIT 110558 . 111441)) (112460 127903 (\TEDIT.MENU.START 112470 . 117922) -(\TEDIT.MENU.BUTTONEVENTFN 117924 . 118408) (\TEXTMENU.DOC.CREATE 118410 . 127901)) (128213 149038 ( -\TEDITMENU.CREATE 128223 . 128519) (\TEDIT.EXPANDED.MENU 128521 . 129602) (MB.DEFAULTBUTTON.FN 129604 - . 133070) (\TEDITMENU.RECORD.UNFORMATTED 133072 . 133405) (MB.DEFAULTBUTTON.ACTIONFN 133407 . 149036) -) (149039 178832 (\TEDIT.CHARLOOKSMENU.CREATE 149049 . 151263) (\TEDIT.EXPANDEDCHARLOOKS.MENU 151265 - . 151975) (\TEDIT.APPLY.BOLDNESS 151977 . 152258) (\TEDIT.APPLY.CHARLOOKS 152260 . 154366) ( -\TEDIT.APPLY.OLINE 154368 . 154645) (\TEDIT.APPLY.UNBREAKABLE 154647 . 155045) (\TEDIT.SHOW.CHARLOOKS -155047 . 157831) (\TEDIT.NEUTRALIZE.CHARLOOKS 157833 . 159097) (\TEDIT.FILL.IN.CHARLOOKS.MENU 159099 - . 166720) (\TEDIT.NEUTRALIZE.CHARLOOKS.MENU 166722 . 169295) (\TEDIT.PARSE.CHARLOOKS.MENU 169297 . -177983) (\TEDIT.APPLY.SLOPE 177985 . 178264) (\TEDIT.APPLY.STRIKEOUT 178266 . 178549) ( -\TEDIT.APPLY.ULINE 178551 . 178830)) (178833 205312 (\TEDITPARAMENU.CREATE 178843 . 179219) ( -\TEDIT.EXPANDEDPARA.MENU 179221 . 179783) (\TEDIT.APPLY.PARALOOKS 179785 . 190501) ( -\TEDIT.SHOW.PARALOOKS 190503 . 198351) (\TEDIT.NEUTRALIZE.PARALOOKS.MENU 198353 . 203999) ( -\TEDIT.RECORD.TABLEADERS 204001 . 205310)) (205313 240659 (\TEDIT.SHOW.PAGEFORMATTING 205323 . 218938) - (\TEDITPAGEMENU.CREATE 218940 . 219979) (\TEDIT.APPLY.PAGEFORMATTING 219981 . 232064) ( -TEDIT.UNPARSE.PAGEFORMAT 232066 . 240657)) (240964 268758 (\TEDIT.MENU.INIT 240974 . 268756))))) + (FILEMAP (NIL (10502 35227 (MB.BUTTONEVENTINFN 10512 . 11734) (MB.DISPLAY 11736 . 13693) (MB.SETIMAGE +13695 . 14649) (MB.SELFN 14651 . 16394) (MB.SIZEFN 16396 . 17374) (MB.WHENOPERATEDFN 17376 . 17810) ( +MB.COPYFN 17812 . 18270) (MB.GETFN 18272 . 19010) (MB.PUTFN 19012 . 19889) (MB.SHOWSELFN 19891 . 20924 +) (MBUTTON.CREATE 20926 . 22158) (MBUTTON.CHANGENAME 22160 . 22539) (MBUTTON.FIND.BUTTON 22541 . 23564 +) (MBUTTON.FIND.NEXT.BUTTON 23566 . 24909) (MBUTTON.FIND.NEXT.FIELD 24911 . 27445) (MBUTTON.INIT 27447 + . 28363) (MBUTTON.NEXT.FIELD.AS.NUMBER 28365 . 29272) (MBUTTON.NEXT.FIELD.AS.TEXT 29274 . 29825) ( +MBUTTON.NEXT.FIELD.AS.ATOM 29827 . 30577) (MBUTTON.SET.FIELD 30579 . 32785) (MBUTTON.SET.NEXT.FIELD +32787 . 34289) (MBUTTON.SET.NEXT.BUTTON.STATE 34291 . 34771) (TEDITMENU.STREAM 34773 . 35225)) (35531 +46153 (MB.CREATE.THREESTATEBUTTON 35541 . 36708) (MB.THREESTATE.DISPLAY 36710 . 39416) ( +MB.THREESTATE.SHOWSELFN 39418 . 42341) (MB.THREESTATE.WHENOPERATEDFN 42343 . 43684) ( +MB.THREESTATEBUTTON.FN 43686 . 45091) (THREESTATE.INIT 45093 . 46151)) (46254 66128 ( +MB.CREATE.NWAYBUTTON 46264 . 50333) (MB.NB.DISPLAYFN 50335 . 52603) (MB.NB.WHENOPERATEDFN 52605 . +53753) (MB.NB.SIZEFN 53755 . 57383) (MB.NWAYBUTTON.SELFN 57385 . 59585) (MB.NWAYMENU.NEWBUTTON 59587 + . 60174) (NWAYBUTTON.INIT 60176 . 61025) (MB.NB.PACKITEMS 61027 . 63006) (MB.NWAYBUTTON.ADDITEM 63008 + . 66126)) (66382 75101 (\TEXTMENU.TOGGLE.CREATE 66392 . 67882) (\TEXTMENU.TOGGLE.DISPLAY 67884 . +70317) (\TEXTMENU.TOGGLE.SHOWSELFN 70319 . 70919) (\TEXTMENU.TOGGLE.WHENOPERATEDFN 70921 . 72271) ( +\TEXTMENU.TOGGLEFN 72273 . 73273) (\TEXTMENU.TOGGLE.INIT 73275 . 74106) (\TEXTMENU.SET.TOGGLE 74108 . +75099)) (75353 111626 (DRAWMARGINSCALE 75363 . 78822) (MARGINBAR 78824 . 85685) (MARGINBAR.CREATE +85687 . 88559) (MB.MARGINBAR.SELFN 88561 . 100577) (MB.MARGINBAR.SIZEFN 100579 . 100937) ( +MB.MARGINBAR.DISPLAYFN 100939 . 103741) (MDESCALE 103743 . 104283) (MSCALE 104285 . 104615) ( +MB.MARGINBAR.SHOWTAB 104617 . 106940) (MB.MARGINBAR.TABTRACK 106942 . 108327) (\TEDIT.TABTYPE.SET +108329 . 110739) (MARGINBAR.INIT 110741 . 111624)) (112643 128086 (\TEDIT.MENU.START 112653 . 118105) +(\TEDIT.MENU.BUTTONEVENTFN 118107 . 118591) (\TEXTMENU.DOC.CREATE 118593 . 128084)) (128396 149310 ( +\TEDITMENU.CREATE 128406 . 128702) (\TEDIT.EXPANDED.MENU 128704 . 129785) (MB.DEFAULTBUTTON.FN 129787 + . 133253) (\TEDITMENU.RECORD.UNFORMATTED 133255 . 133588) (MB.DEFAULTBUTTON.ACTIONFN 133590 . 149308) +) (149311 180204 (\TEDIT.CHARLOOKSMENU.CREATE 149321 . 151535) (\TEDIT.EXPANDEDCHARLOOKS.MENU 151537 + . 152247) (\TEDIT.APPLY.BOLDNESS 152249 . 152530) (\TEDIT.APPLY.CHARLOOKS 152532 . 154874) ( +\TEDIT.APPLY.OLINE 154876 . 155153) (\TEDIT.APPLY.UNBREAKABLE 155155 . 155553) (\TEDIT.SHOW.CHARLOOKS +155555 . 158772) (\TEDIT.NEUTRALIZE.CHARLOOKS 158774 . 160274) (\TEDIT.FILL.IN.CHARLOOKS.MENU 160276 + . 167978) (\TEDIT.NEUTRALIZE.CHARLOOKS.MENU 167980 . 170553) (\TEDIT.PARSE.CHARLOOKS.MENU 170555 . +179355) (\TEDIT.APPLY.SLOPE 179357 . 179636) (\TEDIT.APPLY.STRIKEOUT 179638 . 179921) ( +\TEDIT.APPLY.ULINE 179923 . 180202)) (180205 207623 (\TEDITPARAMENU.CREATE 180215 . 180591) ( +\TEDIT.EXPANDEDPARA.MENU 180593 . 181155) (\TEDIT.APPLY.PARALOOKS 181157 . 192395) ( +\TEDIT.SHOW.PARALOOKS 192397 . 200563) (\TEDIT.NEUTRALIZE.PARALOOKS.MENU 200565 . 206310) ( +\TEDIT.RECORD.TABLEADERS 206312 . 207621)) (207624 242465 (\TEDIT.SHOW.PAGEFORMATTING 207634 . 221344) + (\TEDITPAGEMENU.CREATE 221346 . 222385) (\TEDIT.APPLY.PAGEFORMATTING 222387 . 233870) ( +TEDIT.UNPARSE.PAGEFORMAT 233872 . 242463)) (242770 270564 (\TEDIT.MENU.INIT 242780 . 270562))))) STOP diff --git a/library/tedit/TEDIT-MENU.LCOM b/library/tedit/TEDIT-MENU.LCOM index 97d4215d8228fbc8c27931bbb1d5de11ab40eef4..617e189eab66984355e38ff2aad44220065b26ca 100644 GIT binary patch delta 14397 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.;11 73247 +(FILECREATED "29-Apr-2024 10:28:36" {WMEDLEY}tedit>TEDIT-OLDFILE.;13 73609 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.GET.PCTB2 \TEDIT.GET.PCTB1) + :CHANGES-TO (FNS \TEDIT.GET.PCTB2 \TEDIT.GET.PCTB1 \TEDIT.GET.PCTB0) - :PREVIOUS-DATE "17-Mar-2024 18:15:40" {WMEDLEY}tedit>TEDIT-OLDFILE.;10) + :PREVIOUS-DATE "20-Mar-2024 11:06:42" {WMEDLEY}tedit>TEDIT-OLDFILE.;11) (PRETTYCOMPRINT TEDIT-OLDFILECOMS) @@ -46,7 +46,8 @@ (DEFINEQ (\TEDIT.GET.PCTB2 - [LAMBDA (TEXT TEXTOBJ PCCOUNT START END) (* ; "Edited 20-Mar-2024 11:00 by rmk") + [LAMBDA (TEXT TSTREAM PCCOUNT START END) (* ; "Edited 29-Apr-2024 10:28 by rmk") + (* ; "Edited 20-Mar-2024 11:00 by rmk") (* ; "Edited 17-Mar-2024 12:41 by rmk") (* ; "Edited 15-Mar-2024 14:37 by rmk") (* ; "Edited 21-Jan-2024 10:21 by rmk") @@ -65,9 +66,10 @@ (* ;; "END = use this as eofptr of file. For use in reading files within files.") - (TEXTOBJ! TEXTOBJ) - (LET (PIECEINFOCH# (CURFILECH# (OR START 0)) - LOOKSHASH PARAHASH) + (LET ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + PIECEINFOCH# + (CURFILECH# (OR START 0)) + LOOKSHASH PARAHASH) (SETFILEPTR TEXT (IDIFFERENCE (OR END (GETEOFPTR TEXT)) 8)) (SETQ PIECEINFOCH# (\DWIN TEXT)) @@ -167,8 +169,7 @@ PPARALOOKS _ OLDPARALOOKS PTYPE _ OBJECT.PTYPE PBYTESPERCHAR _ PCLEN)) - (\TEDIT.GET.OBJECT (FGETTOBJ TEXTOBJ STREAMHINT) - PC TEXT CURFILECH# PCLEN) + (\TEDIT.GET.OBJECT TSTREAM PC TEXT CURFILECH# PCLEN) (add CURFILECH# PCLEN) (FSETPC PC PLOOKS (if (ZEROP (BIN TEXT)) then @@ -600,7 +601,8 @@ (DEFINEQ (\TEDIT.GET.PCTB1 - [LAMBDA (TEXT TEXTOBJ PCCOUNT START END) (* ; "Edited 20-Mar-2024 11:00 by rmk") + [LAMBDA (TEXT TSTREAM PCCOUNT START END) (* ; "Edited 29-Apr-2024 10:28 by rmk") + (* ; "Edited 20-Mar-2024 11:00 by rmk") (* ; "Edited 17-Mar-2024 12:41 by rmk") (* ; "Edited 21-Jan-2024 10:23 by rmk") (* ; "Edited 19-Dec-2023 10:13 by rmk") @@ -619,8 +621,9 @@ (* ;; "END = use this as eofptr of file. For use in reading files within files.") - (TEXTOBJ! TEXTOBJ) - (LET (PIECEINFOCH# TSTREAM (CURFILECH# (OR START 0))) + (LET ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + PIECEINFOCH# + (CURFILECH# (OR START 0))) (SETFILEPTR TEXT (IDIFFERENCE (OR END (GETEOFPTR TEXT)) 8)) (SETQ PIECEINFOCH# (\DWIN TEXT)) @@ -675,8 +678,7 @@ PPARALOOKS _ OLDPARALOOKS PTYPE _ THINFILE.PTYPE PBYTESPERCHAR _ PCLEN)) - (TEDIT.GET.OBJECT1 (FGETTOBJ TEXTOBJ STREAMHINT) - PC TEXT CURFILECH#) + (TEDIT.GET.OBJECT1 TSTREAM PC TEXT CURFILECH#) (add CURFILECH# PCLEN) [COND ((NOT (ZEROP (BIN TEXT))) (* ; @@ -903,7 +905,8 @@ (DEFINEQ (\TEDIT.GET.PCTB0 - [LAMBDA (TEXT TEXTOBJ PCCOUNT START END) (* ; "Edited 17-Mar-2024 12:41 by rmk") + [LAMBDA (TEXT TSTREAM PCCOUNT START END) (* ; "Edited 29-Apr-2024 10:27 by rmk") + (* ; "Edited 17-Mar-2024 12:41 by rmk") (* ; "Edited 15-Mar-2024 14:47 by rmk") (* ; "Edited 21-Jan-2024 10:27 by rmk") (* ; "Edited 19-Dec-2023 10:13 by rmk") @@ -915,8 +918,9 @@ (* ;;; "READ OBSOLETE FORMATS OF TEDIT FILE") - (LET (OLDPC TYPECODE PCLEN PIECEINFOCH# TSTREAM USERFILEFORMAT USERTEMP (CURFILECH# (OR START 0)) - (SBINABLE (fetch (STREAM BINABLE) of TEXT))) + (LET ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + OLDPC TYPECODE PCLEN PIECEINFOCH# TSTREAM USERFILEFORMAT USERTEMP (CURFILECH# (OR START 0)) + (SBINABLE (fetch (STREAM BINABLE) of TEXT))) (SETFILEPTR TEXT (IDIFFERENCE (OR END (GETEOFPTR TEXT)) 8)) (SETQ PIECEINFOCH# (\DWIN TEXT)) @@ -943,8 +947,7 @@ (\TEDIT.GET.CHARLOOKS0 PC TEXT) (add CURFILECH# (PLEN PC))) (\PieceDescriptorOBJECT - (\TEDIT.GET.OBJECT0 (AND TEXTOBJ (FGETTOBJ TEXTOBJ STREAMHINT)) - PC TEXT CURFILECH#) + (\TEDIT.GET.OBJECT0 TSTREAM PC TEXT CURFILECH#) (add CURFILECH# (PLEN PC)) (* ;  "Only object--can't be followed by either of the others.") (FSETPC PC PLEN 1)) @@ -1108,14 +1111,14 @@ (RPLACD TABSPEC TABS]) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1666 38666 (\TEDIT.GET.PCTB2 1676 . 11742) (\TEDIT.GET.PARALOOKS2 11744 . 12333) ( -\TEDIT.GET.CHARLOOKS2 12335 . 13666) (\TEDIT.PARSE.PAGEFRAMES2 13668 . 16407) ( -\TEDIT.GET.CHARLOOKS.LIST2 16409 . 16916) (\TEDIT.GET.SINGLE.CHARLOOKS2 16918 . 20635) ( -\TEDIT.PUT.SINGLE.PARALOOKS2 20637 . 25388) (\TEDIT.PUT.SINGLE.CHARLOOKS2 25390 . 29864) ( -\TEDIT.GET.PARALOOKS.LIST2 29866 . 30373) (\TEDIT.GET.SINGLE.PARALOOKS2 30375 . 35384) ( -\TEDIT.PUT.CHARLOOKS.LIST2 35386 . 37465) (\TEDIT.PUT.PARALOOKS.LIST2 37467 . 38664)) (38743 59003 ( -\TEDIT.GET.PCTB1 38753 . 45217) (\TEDIT.GET.PAGEFRAMES1 45219 . 45671) (\TEDIT.PARSE.PAGEFRAMES1 45673 - . 48049) (\TEDIT.GET.CHARLOOKS1 48051 . 52423) (\TEDIT.GET.PARALOOKS1 52425 . 57457) ( -TEDIT.GET.OBJECT1 57459 . 59001)) (59063 73224 (\TEDIT.GET.PCTB0 59073 . 62808) (\TEDIT.GET.CHARLOOKS0 - 62810 . 67397) (\TEDIT.GET.OBJECT0 67399 . 69349) (\TEDIT.GET.PARALOOKS0 69351 . 73222))))) + (FILEMAP (NIL (1683 38799 (\TEDIT.GET.PCTB2 1693 . 11875) (\TEDIT.GET.PARALOOKS2 11877 . 12466) ( +\TEDIT.GET.CHARLOOKS2 12468 . 13799) (\TEDIT.PARSE.PAGEFRAMES2 13801 . 16540) ( +\TEDIT.GET.CHARLOOKS.LIST2 16542 . 17049) (\TEDIT.GET.SINGLE.CHARLOOKS2 17051 . 20768) ( +\TEDIT.PUT.SINGLE.PARALOOKS2 20770 . 25521) (\TEDIT.PUT.SINGLE.CHARLOOKS2 25523 . 29997) ( +\TEDIT.GET.PARALOOKS.LIST2 29999 . 30506) (\TEDIT.GET.SINGLE.PARALOOKS2 30508 . 35517) ( +\TEDIT.PUT.CHARLOOKS.LIST2 35519 . 37598) (\TEDIT.PUT.PARALOOKS.LIST2 37600 . 38797)) (38876 59250 ( +\TEDIT.GET.PCTB1 38886 . 45464) (\TEDIT.GET.PAGEFRAMES1 45466 . 45918) (\TEDIT.PARSE.PAGEFRAMES1 45920 + . 48296) (\TEDIT.GET.CHARLOOKS1 48298 . 52670) (\TEDIT.GET.PARALOOKS1 52672 . 57704) ( +TEDIT.GET.OBJECT1 57706 . 59248)) (59310 73586 (\TEDIT.GET.PCTB0 59320 . 63170) (\TEDIT.GET.CHARLOOKS0 + 63172 . 67759) (\TEDIT.GET.OBJECT0 67761 . 69711) (\TEDIT.GET.PARALOOKS0 69713 . 73584))))) STOP diff --git a/library/tedit/TEDIT-OLDFILE.LCOM b/library/tedit/TEDIT-OLDFILE.LCOM index aad6b3135ea00ce34b6c34b7679cb66b83d92627..ab14521bb16b4f402b381fc1d398c5f82af5e76a 100644 GIT binary patch delta 2751 zcmbtWOKclu5MJAH+PbNmhwUbgNv2M45=w%1*Ius;65iOG+NtB;u{R|t1p{)WHcr$+ zxlzf83xX46DIB6K|F$b^6n#uz@va#zc-A$AHJeum%XWMVWQqa#;u%`R>; z&&>LRx)9 zwk(`(2?5C@a|zYSLN1XJv+9rmX(cBnNK#a1G&AA(-_gpgdiv6g_KZ8;hU_!2xG=TE-fa+basv;Qe$cvNG#>G^U|h4ki=z) z%+AYg>-dR+gon6*Id$_CSif*nlwIhi@YfvF9*Kr+wQtrg*Z9H8nfSazb!^{ioaomNuK)0$8FyNR=MUwVs1PW( zilC4YYjLD{hhQyxyH3nnu4T-+yp{D+oMBcM8Q+ogx}`X&WJrKa8c73~G@y`iYjM0% zy|ZR**GGx3;fiOplPLBpsq$uws##Xcn@&op{)BZ`+t+KqoU_FWm|23NIb-Kwfy?(W-so^S3gHQ6?CWz zm?A!Xv@uFN+7%d&X4jgng_Y9l4_YhLX)~((}g8+PI*ao30ifq3F+;yq$lk43>z>jqljxm8@%g5B2W z(J|rbse*P(^?Ss3jrf{9jbBM`_3lNAnxZJpqYzKyFmd9=IBO5CollwPR`e;=yVPVP z$jQIi-NSqs3MsObNoFPBxFDRJJ0s>v4!AHaLu$mzG4j*hZeKLAog6yd#sEu)<*RA; zI0FnHf`TXsz=Svu@_AteM>Nb~f1i|6z_39zP`=fD@OU(;N75W^MABid6G?}{@{ipk zRvzSECXaa-9T1Ztun~i6$ppIdWS=p z<;_vhw1qH>77ZaRYK%frW5kB|-RU?yBAo+NlG2$0Oj|cHEpYtC9|xXzWa59(isgeN z`_hWvrqW8_KWL?AA)~U2+vHdn;_O%_DmER1E9VPwobdP~ZPwR$!GeF$U4y5{vgG%*hYLbmcrZ^q+(Ljgf#hAyA1BRAAn;3Fn zDjgu436Oav%fM5#(D6i0~vjAC!?3< zP4?Cq(2D}q7&C;>hayo&S@FiTk}4fmbez79q1e(2=u=+LP)<>Ke*}YN)jd09AW@J;6yTqF$mmfcsKeP#L7SNnFe+I?DD7AFI~KR T`NB(U=VbfA$2WpcjvxISEjQZT delta 2785 zcmcImOKclO81^Htx@qDh+u*vXGdO98MHBYnT|Yp`8+%=EYI|IJQ&LoLE4iYIQ&lP) zTN%L#i9^$+NC=4o;=;{#uvCG>qF%r~kXG`69yo9TQ6XehB*dXD|BQEIyD8#C4(r)} z{`voz+3%5CH|(ts?AO+(*rm+5%S$}V2NB0bSt%Oix608&TmZTJeD5S16~rjdZhgJ- zQcrk!dD-tmrE_ncFQKR92mJxpVp2^j@w_5yN&@LW+hap0B=EtI{*GM^1W+`WS5B#T zt+14U4CLoRJzEM#IWZb!{m8X-b+N(*TxXz&sx2Q^wB=k}Tj5bO5q2%+5Ensdj87C0 z48uqzKTuR55QC0bTMIXN$<wjYBzAi7RS0iQ}m`m}XIYEl=+wHK*6Y^YhBO zhF4ah4vRDx2aw|%#%3Fohivc{Z#Xw5-d1BIyXDZId{;BN6$F0|E_P^{!WUOKzM*B%S1N+LYqR+rHj^a%99)?bX z?Rv)Q#H>Tj^={3t;0InzoY1{-rIDvEA?6IZ7{JD z^b(40LoV+`Z8iI5d1uUKRDXr88|_bPwjYhNWKXlD7-KU^DQ3VZVGrY=&mnla8Mjf| z*s(c{QkfYuicD*q0vZ#pXNdH{Rru)RHt8G8HX zPjg_?*@8}~iw|4t)g>#f?l;%Aw>^6nIOqcGX|306pIdqL_MSYea0M#2%I*4_dyZFT zcF(mrL=OfB9)m-|sR0Laa~U(S6!sh#Bo|}AsC5$}=*$M}D?R9JjCK&gj8+l-O7%am z_XhShM;pK6vFiOxWZ6EAF2+n_U$zVwc=*u;*}Au)*QowxTa+R}WU^Du7L>e3p^v1H zhzcpZmQG|fB#A6KlYCXl;~bKLoNiaA^gE-jLrCI8YcZiVP(q1oNC@lh;pssh39O($ zRu9heh!63oplCAU1qsRdynGr)97+P0k83H!^DIf!eMg4a z4f8yLQz$qIIiP={7(!PDob*13)XZH$q5!HvqydS%1fz8_3`VSAFie6p1`W-T5Hd#s zw0*K(7!@=)Kn96aN8kdXFtCt z%=65Y4C`D=tPq%LBe=gw2x4TH41T`c`6(YR#ZF`X_goG|q zg`foJI0)t-z_&F&GJIDHy?i7B7j0Ql2d^CBIf1Mi{Bk+4VTm&hsFOAG>f4ArxuZUf<1PEGYDfF2oaZzwJxTS=W zl-JT4aYD-@!Agk_htV2Q10|D#mk@m+^hx4;M%ExCp)NYbE;?f!!|b;1>&$mI*K5>I z+UxUs!Fr6i^slCil0rq|G0(+V6 zx0jM?SxHBZJ>Zp%In$B71m_C|_QYsQqRf>JzTX7}AAt$%YZAYz-UYnR%B3v;xTgzn z4PK1I#+y-T(?fIBoBl8U}v z;xJ&wOzqL%*1s1(AV?EBz>% diff --git a/library/tedit/TEDIT-SCREEN b/library/tedit/TEDIT-SCREEN index f24afffdc..36468e3a3 100644 --- a/library/tedit/TEDIT-SCREEN +++ b/library/tedit/TEDIT-SCREEN @@ -1,12 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "20-Mar-2024 11:07:35" {WMEDLEY}tedit>TEDIT-SCREEN.;645 189050 +(FILECREATED " 7-May-2024 10:47:09" {WMEDLEY}tedit>TEDIT-SCREEN.;665 187504 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.DISPLAYLINE \TEDIT.RAISE.LINES) + :CHANGES-TO (VARS TEDIT-SCREENCOMS) + (FNS \TEDIT.UPDATE.SCREEN \TEDIT.FILLPANE \TEDIT.UPDATE.LINES) - :PREVIOUS-DATE "20-Mar-2024 07:27:05" {WMEDLEY}tedit>TEDIT-SCREEN.;644) + :PREVIOUS-DATE " 6-May-2024 13:41:34" {WMEDLEY}tedit>TEDIT-SCREEN.;660) (PRETTYCOMPRINT TEDIT-SCREENCOMS) @@ -59,11 +60,10 @@ (* ;; "Machine independent version of \TEDIT.BLTCHAR") (MACROS MI-TEDIT.BLTCHAR)) - (FNS \TEDIT.UPDATE.SCREEN \TEDIT.BACKFORMAT \TEDIT.PREVIOUS.LINEBREAK \TEDIT.FILLPANE - \TEDIT.UPDATE.LINES \TEDIT.CREATEPLINE \TEDIT.FIND.DIRTYCHARS \TEDIT.LINES.BELOW - \FORMAT.GAP.LINES \TEDIT.LOWER.LINES \TEDIT.RAISE.LINES \TEDIT.VALID.LINES - \TEDIT.CLEARPANE.BELOW.LINE \TEDIT.INSERTLINE \TEDIT.INSURE.TRAILING.LINE - \TEDIT.MARK.LINES.DIRTY \TEDIT.LINE.BOTTOM \TEDIT.NCONC.LINES))) + (FNS \TEDIT.BACKFORMAT \TEDIT.PREVIOUS.LINEBREAK \TEDIT.FILLPANE \TEDIT.UPDATE.LINES + \TEDIT.CREATEPLINE \TEDIT.FIND.DIRTYCHARS \TEDIT.LINES.BELOW \FORMAT.GAP.LINES + \TEDIT.LOWER.LINES \TEDIT.RAISE.LINES \TEDIT.VALID.LINES \TEDIT.CLEARPANE.BELOW.LINE + \TEDIT.INSERTLINE \TEDIT.INSURE.TRAILING.LINE \TEDIT.LINE.BOTTOM \TEDIT.NCONC.LINES))) (DECLARE%: EVAL@COMPILE DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE @@ -1768,7 +1768,8 @@ T)]) (\TEDIT.LINES.ABOVE - [LAMBDA (TEXTOBJ CHN YBOTN) (* ; "Edited 15-Mar-2024 19:22 by rmk") + [LAMBDA (TSTREAM CHN YBOTN) (* ; "Edited 3-May-2024 23:33 by rmk") + (* ; "Edited 15-Mar-2024 19:22 by rmk") (* ; "Edited 5-Apr-2023 09:13 by rmk") (* ; "Edited 1-Apr-2023 12:02 by rmk") (* ; "Edited 30-May-91 23:02 by jds") @@ -1777,11 +1778,12 @@ (* ;; "We assume this is not called on an empty text (TEXTLEN = 0), since we wouldn't know what to return. Caller should check that.") - (CL:WHEN (IGREATERP CHN (TEXTLEN TEXTOBJ)) - (SETQ CHN (TEXTLEN TEXTOBJ))) (CL:UNLESS YBOTN (SETQ YBOTN 0)) - (bind L1 LN LINE HEIGHT (CHNO _ (\TEDIT.PREVIOUS.LINEBREAK TEXTOBJ CHN)) - first (SETQ L1 (\TEDIT.FORMATLINE TEXTOBJ CHNO)) (* ; + (bind L1 LN LINE HEIGHT CHNO (TEXTOBJ _ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + first (CL:WHEN (IGREATERP CHN (TEXTLEN TEXTOBJ)) + (SETQ CHN (TEXTLEN TEXTOBJ))) + (SETQ CHNO (\TEDIT.PREVIOUS.LINEBREAK TSTREAM CHN)) + (SETQ L1 (\TEDIT.FORMATLINE TEXTOBJ CHNO)) (* ;  "CHNO is the first char of the top line") (SETQ LN L1) (SETQ CHNO (ADD1 (GETLD L1 LCHARLIM))) until (IGREATERP CHNO CHN) @@ -2171,30 +2173,9 @@ ) (DEFINEQ -(\TEDIT.UPDATE.SCREEN - [LAMBDA (TEXTOBJ) (* ; "Edited 15-Mar-2024 22:00 by rmk") - (* ; "Edited 16-Dec-2023 23:52 by rmk") - (* ; "Edited 12-Oct-2023 15:27 by rmk") - (* ; "Edited 17-Sep-2023 11:50 by rmk") - (* ; "Edited 22-May-2023 22:19 by rmk") - (* ; "Edited 17-May-2023 08:58 by rmk") - (* ; "Edited 5-May-2023 13:16 by rmk") - (* ; "Edited 5-Oct-2022 21:30 by rmk") - (CL:UNLESS (GETTOBJ TEXTOBJ TXTDON'TUPDATE) - [LET ((DIRTYCHARS (\TEDIT.FIND.DIRTYCHARS TEXTOBJ))) - (if DIRTYCHARS - then - (* ;; "As long as we have this path, we don't want the line updater to update the selection. Updating the looks affects the line (so we need to know what characters changed), but the characters don't move around. We want the rest of the insertion callers to avoid this entry.") - - (\TEDIT.UPDATE.LINES TEXTOBJ 'APPEARANCE (CAR DIRTYCHARS) - (CDR DIRTYCHARS)) - else (for PANE inpanes TEXTOBJ do (\TEDIT.FILLPANE (fetch (TEXTWINDOW PLINES) - of PANE) - TEXTOBJ PANE] - (FSETTOBJ TEXTOBJ TXTNEEDSUPDATE NIL))]) - (\TEDIT.BACKFORMAT - [LAMBDA (TEXTOBJ DY CH1 HEIGHT) (* ; "Edited 20-Mar-2024 06:46 by rmk") + [LAMBDA (TSTREAM DY CH1 HEIGHT) (* ; "Edited 3-May-2024 23:33 by rmk") + (* ; "Edited 20-Mar-2024 06:46 by rmk") (* ; "Edited 15-Mar-2024 19:44 by rmk") (* ; "Edited 30-Nov-2023 21:16 by rmk") (* ; "Edited 3-Nov-2023 12:02 by rmk") @@ -2208,8 +2189,9 @@ (* ;; "This computes block by block, where the first line of a block either starts a paragraph or comes immediately after a forced break.") - (bind L1 PAIR (CHNO _ CH1) until (IGREATERP HEIGHT DY) while (IGEQ CHNO 1) - do (SETQ PAIR (\TEDIT.LINES.ABOVE TEXTOBJ CHNO HEIGHT)) + (bind L1 PAIR (TEXTOBJ _ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + (CHNO _ CH1) until (IGREATERP HEIGHT DY) while (IGEQ CHNO 1) + do (SETQ PAIR (\TEDIT.LINES.ABOVE TSTREAM CHNO HEIGHT)) (* ; "The block may go beyond DY") (LINKLD (CADR PAIR) L1) (* ; @@ -2222,7 +2204,8 @@ DY]) (\TEDIT.PREVIOUS.LINEBREAK - [LAMBDA (TEXTOBJ CHNO) (* ; "Edited 17-Mar-2024 12:05 by rmk") + [LAMBDA (TSTREAM CHNO) (* ; "Edited 3-May-2024 23:33 by rmk") + (* ; "Edited 17-Mar-2024 12:05 by rmk") (* ; "Edited 11-Dec-2023 21:59 by rmk") (* ; "Edited 16-Oct-2023 23:19 by rmk") (* ; "Edited 31-Mar-2023 17:44 by rmk") @@ -2233,33 +2216,35 @@ (if (ILEQ CHNO 1) then 1 - elseif (AND NIL (FGETTOBJ TEXTOBJ FORMATTEDP)) - then - (* ;; "[Disabled] For a para-formatted object, back up to the prior linebreak (PPARALAST). But if EOL's are not always paragraph boundaries, this might back up way too far.") - - (CAR (\TEDIT.PARA.FIRST TEXTOBJ CHNO)) else (* ;; "Otherwise, move back thru the text until we find a for-sure line break. ") - (CL:WHEN (IGREATERP CHNO (FGETTOBJ TEXTOBJ TEXTLEN)) - (SETQ CHNO (FGETTOBJ TEXTOBJ TEXTLEN))) - (LET ((TSTREAM (FGETTOBJ TEXTOBJ STREAMHINT)) + (LET ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) NCHARS) - (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 CHNO)) (* ; + (if (AND NIL (FGETTOBJ TEXTOBJ FORMATTEDP)) + then + (* ;; "[Disabled] For a para-formatted object, back up to the prior linebreak (PPARALAST). But if EOL's are not always paragraph boundaries, this might back up way too far.") + + (CAR (\TEDIT.PARA.FIRST TEXTOBJ CHNO)) + else (CL:WHEN (IGREATERP CHNO (FGETTOBJ TEXTOBJ TEXTLEN)) + (SETQ CHNO (FGETTOBJ TEXTOBJ TEXTLEN))) + (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 CHNO)) + (* ;  "Start at (SUB1 CHNO) because fileptrs are one back from characters") - [SETQ NCHARS (find I from 1 - suchthat (MEMB (\TEDIT.TEXTBACKFILEPTR TSTREAM) - (CHARCODE (EOL FORM %#EOL Meta,EOL CR LF NIL] + [SETQ NCHARS (find I from 1 + suchthat (MEMB (\TEDIT.TEXTBACKFILEPTR TSTREAM) + (CHARCODE (EOL FORM %#EOL Meta,EOL CR LF NIL] - (* ;; + (* ;;  "If we didn't find a preceding EOL, we must have backed to the beginning of the file (NIL).") - (CL:IF NCHARS - (ADD1 (IDIFFERENCE CHNO NCHARS)) - 1)]) + (CL:IF NCHARS + (ADD1 (IDIFFERENCE CHNO NCHARS)) + 1)]) (\TEDIT.FILLPANE - [LAMBDA (PREVLINE TEXTOBJ PANE) (* ; "Edited 20-Mar-2024 06:43 by rmk") + [LAMBDA (PREVLINE TEXTOBJ PANE) (* ; "Edited 7-May-2024 10:41 by rmk") + (* ; "Edited 20-Mar-2024 06:43 by rmk") (* ; "Edited 15-Mar-2024 14:39 by rmk") (* ; "Edited 11-Jan-2024 19:32 by rmk") (* ; "Edited 2-Jan-2024 12:45 by rmk") @@ -2271,7 +2256,7 @@ (* ; "Edited 5-May-2023 10:54 by rmk") (* ; "Edited 26-Apr-2023 21:02 by rmk") - (* ;; "This executes whether or not TXTNEEDSUPDATE, callers decide that.") + (* ;; "This executes whether or not TXTNEEDSUPDATE, callers decide that. It builds lines as needed to fill the pane to the bottom.") (LET (LINE) @@ -2303,11 +2288,11 @@ (* ;; "") (\TEDIT.CLEARPANE.BELOW.LINE PREVLINE PANE TEXTOBJ) - (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE) - (FSETTOBJ TEXTOBJ TXTNEEDSUPDATE NIL]) + (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE]) (\TEDIT.UPDATE.LINES [LAMBDA (TEXTOBJ REASON FIRSTCHANGEDCHNO NCHARSCHANGED DONTDISPLAY) + (* ; "Edited 7-May-2024 10:41 by rmk") (* ; "Edited 20-Mar-2024 06:43 by rmk") (* ; "Edited 24-Dec-2023 22:00 by rmk") (* ; "Edited 18-Dec-2023 00:12 by rmk") @@ -2322,9 +2307,18 @@ (* ;; "See line-segmentation comments in \TEDIT.VALID.LINES.") (CL:UNLESS (GETTOBJ TEXTOBJ TXTDON'TUPDATE) - (CL:WHEN (type? SELECTION FIRSTCHANGEDCHNO) - (SETQ NCHARSCHANGED (FGETSEL FIRSTCHANGEDCHNO DCH)) - (SETQ FIRSTCHANGEDCHNO (FGETSEL FIRSTCHANGEDCHNO CH#))) + [if (type? SELECTION FIRSTCHANGEDCHNO) + then (SETQ NCHARSCHANGED (FGETSEL FIRSTCHANGEDCHNO DCH)) + (SETQ FIRSTCHANGEDCHNO (FGETSEL FIRSTCHANGEDCHNO CH#)) + elseif (type? SELPIECES FIRSTCHANGEDCHNO) + then [SETQ NCHARSCHANGED (ADD1 (IDIFFERENCE (fetch (SELPIECES SPLASTCHAR) of + FIRSTCHANGEDCHNO + ) + (fetch (SELPIECES SPFIRSTCHAR) of FIRSTCHANGEDCHNO] + (SETQ FIRSTCHANGEDCHNO (fetch (SELPIECES SPFIRSTCHAR) of FIRSTCHANGEDCHNO)) + else (CL:UNLESS FIRSTCHANGEDCHNO (SETQ FIRSTCHANGEDCHNO 1)) + (CL:UNLESS NCHARSCHANGED + (SETQ NCHARSCHANGED (FGETTOBJ TEXTOBJ TEXTLEN)))] (* ;;  "If DONTDISPLAY, we ensure lines that are properly formatted and positioned but not displayed.") @@ -2375,8 +2369,7 @@ (\TEDIT.LOWER.LINES NEXTVALID LASTGAPLINE PANE TEXTOBJ)) else (\TEDIT.CLEARPANE.BELOW.LINE LASTGAPLINE PANE TEXTOBJ) - (\TEDIT.INSURE.TRAILING.LINE TEXTOBJ LASTGAPLINE))) - (FSETTOBJ TEXTOBJ TXTNEEDSUPDATE NIL))]) + (\TEDIT.INSURE.TRAILING.LINE TEXTOBJ LASTGAPLINE))))]) (\TEDIT.CREATEPLINE [LAMBDA (TEXTOBJ PANE FIRSTLINE) (* ; "Edited 13-Mar-2024 17:02 by rmk") @@ -2442,12 +2435,15 @@ (FGETLD FIRSTDIRTYLINE LCHAR1))))]) (\TEDIT.LINES.BELOW - [LAMBDA (PREVLINE LASTCHAR PANE TEXTOBJ DONTDISPLAY) (* ; "Edited 15-Mar-2024 19:22 by rmk") + [LAMBDA (PREVLINE LASTCHAR PANE TEXTOBJ DONTDISPLAY VBOTTOM) + (* ; "Edited 2-May-2024 00:03 by rmk") + (* ; "Edited 9-Apr-2024 10:13 by rmk") + (* ; "Edited 15-Mar-2024 19:22 by rmk") (* ; "Edited 23-Dec-2023 23:38 by rmk") (* ; "Edited 17-Dec-2023 15:56 by rmk") (* ; "Edited 14-Dec-2023 12:46 by rmk") - (* ;; "Formats lines after PREVLINE down to the one that contains LASTCHAR and/or does not run off the bottom of PANE. ") + (* ;; "Formats lines after PREVLINE down to the one that contains LASTCHAR and/or does not run off the bottom of PANE. Returns the line whose NEXTLINE contains LASTCHAR") (* ;; "Assumes that PREVLINE is correctly formatted and Y-positioned, and already displayed in PANE (if desired).") @@ -2456,6 +2452,11 @@ (* ;; "Also displays the lines, unless DONTDISPLAY. This is an optimization: THISLINE caches the just formatted line, doesn't have to be formatted again if it is immediately displayed. Calling it with DONTDISPLAY NIL followed by DONTDISPLAY T gives exactly the same result as calling it once with DONTDISPLAY T.") (CL:WHEN PREVLINE + (SELECTQ VBOTTOM + (NIL (SETQ VBOTTOM (\TEDIT.ONSCREEN? PANE 'BOTTOM))) + (T (* ; "Find LASTCHAR anywhere below") + (SETQ VBOTTOM MIN.SMALLP)) + NIL) (SETQ LASTCHAR (CL:IF LASTCHAR (IMIN LASTCHAR (FGETTOBJ TEXTOBJ TEXTLEN)) (FGETTOBJ TEXTOBJ TEXTLEN))) @@ -2467,10 +2468,9 @@ (SUB1 (FGETLD (FGETLD PREVLINE NEXTLINE) LCHAR1)) (FGETLD PREVLINE LCHARLIM))) - (YBOT _ (FGETLD PREVLINE YBOT)) - (PBOTTOM _ (fetch (REGION BOTTOM) of (DSPCLIPPINGREGION NIL PANE))) inlines PREVLINE + (YBOT _ (FGETLD PREVLINE YBOT)) inlines PREVLINE first (CL:WHEN (OR (IGREATERP LCHARLIM LASTCHAR) - (ILEQ YBOT PBOTTOM)) + (ILEQ YBOT VBOTTOM)) (FSETLD PREVLINE NEXTLINE NIL) (* ; "Eliminate dangling garbage") (RETURN PREVLINE)) while (SETQ NEXT (\TEDIT.FORMATLINE TEXTOBJ (ADD1 LCHARLIM))) do @@ -2481,9 +2481,8 @@ (SETQ YBOT (\TEDIT.LINE.BOTTOM NEXT)) (* ; "Link needed for Y position") (SETQ LCHARLIM (FGETLD NEXT LCHARLIM)) (CL:WHEN (OR (IGREATERP LCHARLIM LASTCHAR) - (ILEQ YBOT PBOTTOM)) - (FSETLD L NEXTLINE NIL) (* ; "Overshot, flush link") - (RETURN L)) + (ILEQ YBOT VBOTTOM)) + (RETURN L)) (CL:UNLESS DONTDISPLAY (* ;  "Cached formatting is good for display") (\TEDIT.DISPLAYLINE TEXTOBJ NEXT PANE)) finally @@ -2546,7 +2545,9 @@ (RETURN LASTVALID]) (\TEDIT.LOWER.LINES - [LAMBDA (NEXTVALID LASTVALID PANE TEXTOBJ) (* ; "Edited 15-Mar-2024 14:40 by rmk") + [LAMBDA (NEXTVALID LASTVALID PANE TEXTOBJ) (* ; "Edited 27-Apr-2024 10:37 by rmk") + (* ; "Edited 9-Apr-2024 10:25 by rmk") + (* ; "Edited 15-Mar-2024 14:40 by rmk") (* ; "Edited 20-Jan-2024 23:15 by rmk") (* ; "Edited 2-Jan-2024 00:26 by rmk") (* ; "Edited 4-Dec-2023 11:25 by rmk") @@ -2556,69 +2557,63 @@ (* ;; "NEXTVALID is the top line of a region in PANE that extends to the pane-bottom or text end--that is, the pane bitmap in that region correctly reflects the lines (and possibly empty space at text-end).") - (* ;; "Insertion case. The inserted gap lines may cover some of the bitmap of the nextvalid lines. In that case NEXTVALID:YBOT is greater than the new LASTVALID:YBOT") - - (* ;; "If PANE has been moved so that it is not entirely within the screen, then don't try to find the relevant bits, just repaint the whole window.") - - (CL:UNLESS (\TEDIT.OFFSCREEN.SCROLL TEXTOBJ PANE 'VERTICAL) - - (* ;; "Completely on screen, we can take advantage of screen bitmap.") - - [PROG ((NEWTOP (GETLD LASTVALID YBOT)) - (PREG (DSPCLIPPINGREGION NIL PANE)) - (LTOP (GETLD NEXTVALID YTOP)) - (LVBOT 0) - LOWER PWIDTH LASTVISIBLE) - (SETQ LOWER (IDIFFERENCE LTOP NEWTOP)) (* ; "How far down to go") - (CL:UNLESS (IGREATERP LOWER 0) (* ; "Maybe it's not moving") - (RETURN)) + (* ;; "Insertion case. The inserted gap lines may cover some of the bitmap of the nextvalid lines. In that case NEXTVALID's YBOT is greater than the new LASTVALID's YBOT") - (* ;; "Make the YPOS of the lowered lines consistent with the intended positions of their images. LASTVISIBLE is the last line that was previously visible (and whose image will be lowered). ") + (PROG ((NEWTOP (GETLD LASTVALID YBOT)) + (PWIDTH (fetch WIDTH of (DSPCLIPPINGREGION NIL PANE))) + (VLEFT (\TEDIT.ONSCREEN? PANE 'LEFT)) + (LTOP (GETLD NEXTVALID YTOP)) + (LVBOT 0) + DELTA LASTVISIBLE) + (SETQ DELTA (IDIFFERENCE LTOP NEWTOP)) (* ; "How far down to go") + (CL:UNLESS (IGREATERP DELTA 0) (* ; "Maybe it's not moving") + (RETURN)) - (for L (PBOTTOM _ (fetch BOTTOM of PREG)) inlines NEXTVALID - while (IGEQ (IDIFFERENCE (FGETLD L YBOT) - LOWER) - PBOTTOM) do (SETQ LASTVISIBLE L)) + (* ;; "Make the YPOS of the lowered lines consistent with the intended positions of their images. LASTVISIBLE is the last line that was previously visible (and whose image will be lowered). ") - (* ;; "") + (for L (VBOTTOM _ (\TEDIT.ONSCREEN? PANE 'BOTTOM)) inlines NEXTVALID + while (IGEQ (IDIFFERENCE (FGETLD L YBOT) + DELTA) + VBOTTOM) do (SETQ LASTVISIBLE L)) - (SETQ PWIDTH (fetch WIDTH of PREG)) (* ; "Width of the pane") + (* ;; "") - (* ;; "Lower what we think is the image of NEXTVALID and all visible lines below it. This may lower some garbage, if the LASTVALID printer encroached on NEXTVALID's image.") + (* ;; "Lower what we think is the image of NEXTVALID and all visible lines below it. This may lower some garbage, if the LASTVALID display encroached on NEXTVALID's image.") - (CL:WHEN LASTVISIBLE - (SETQ LVBOT (IDIFFERENCE (GETLD LASTVISIBLE YBOT) - LOWER))) - (BITBLT PANE 0 (IPLUS LVBOT LOWER) - PANE 0 LVBOT PWIDTH (IDIFFERENCE (IDIFFERENCE LTOP LVBOT) - LOWER) - 'INPUT - 'REPLACE) + (CL:WHEN LASTVISIBLE + (SETQ LVBOT (IDIFFERENCE (FGETLD LASTVISIBLE YBOT) + DELTA))) + (BITBLT PANE VLEFT (IPLUS LVBOT DELTA) + PANE VLEFT LVBOT PWIDTH (IDIFFERENCE (IDIFFERENCE LTOP LVBOT) + DELTA) + 'INPUT + 'REPLACE) - (* ;; "") + (* ;; "") - (* ;; "The bottom of the pane is good. But if LASTVALID encroached into the bitmap of some of NEXTVALID and some of its descendants, those need to be redisplayed. And the ypositions of NEXTVALID and all lines down to LASTVISIBLE have to be lowered. ") + (* ;; "The bottom of the pane is good. But if LASTVALID encroached into the bitmap of some of NEXTVALID and some of its descendants, those need to be redisplayed. And the ypositions of NEXTVALID and all lines down to LASTVISIBLE have to be lowered. ") - (* ;; "") + (* ;; "") - (CL:WHEN LASTVISIBLE (* ; "Smash the invisible tail") - (SETLD LASTVISIBLE NEXTLINE NIL)) - (for L YBOT inlines NEXTVALID do (SETQ YBOT (IDIFFERENCE (FGETLD L YBOT) - LOWER)) - (if (IGEQ (FGETLD L YTOP) - NEWTOP) - then (SETYPOS L YBOT) - (\TEDIT.DISPLAYLINE TEXTOBJ L PANE) - else (SETYPOS L YBOT))) + (CL:WHEN LASTVISIBLE (* ; "Smash the invisible tail") + (SETLD LASTVISIBLE NEXTLINE NIL)) + (for L YBOT inlines NEXTVALID do (SETQ YBOT (IDIFFERENCE (FGETLD L YBOT) + DELTA)) + (if (IGEQ (FGETLD L YTOP) + NEWTOP) + then (SETYPOS L YBOT) + (\TEDIT.DISPLAYLINE TEXTOBJ L PANE) + else (SETYPOS L YBOT))) - (* ;; "Clear whatever might be left over below the last visible line") + (* ;; "Clear whatever might be left over below the last visible line") - (CL:WHEN LASTVISIBLE - (BLTSHADE WHITESHADE PANE 0 0 PWIDTH (GETLD LASTVISIBLE YBOT) - 'REPLACE))])]) + (CL:WHEN LASTVISIBLE + (BLTSHADE WHITESHADE PANE 0 0 PWIDTH (GETLD LASTVISIBLE YBOT) + 'REPLACE))]) (\TEDIT.RAISE.LINES - [LAMBDA (LINE NEWTOP PANE TEXTOBJ) (* ; "Edited 20-Mar-2024 10:57 by rmk") + [LAMBDA (LINE NEWTOPY PANE TEXTOBJ) (* ; "Edited 27-Apr-2024 07:57 by rmk") + (* ; "Edited 20-Mar-2024 10:57 by rmk") (* ; "Edited 20-Jan-2024 23:14 by rmk") (* ; "Edited 2-Jan-2024 00:31 by rmk") (* ; "Edited 14-Dec-2023 17:20 by rmk") @@ -2628,41 +2623,37 @@ (* ; "Edited 11-May-2023 11:34 by rmk") (* ; "Edited 28-Apr-2023 08:51 by rmk") - (* ;; "LINE is the top line of a region in PANE that extends to the pane-bottom or text end--that is, the pane bitmap in that region correctly reflects the lines (and possibly empty space at text-end).") - - (* ;; "This raises the image of that region so that its new top is at NEWTOP. It then fills in and displays lines below the region's new location that may be neeeded to fill in the pane.") + (* ;; "LINE is the top line of a region somewhere in PANE that extends to the onscreen bottom of PANE or to text end--that is, the pane bitmap in that region correctly reflects the lines (and possibly empty space at text-end).") (* ;; "If PANE has been moved so that it is not entirely within the screen, then don't try to find the relevant bits, just repaint the whole window.") (TEXTOBJ! TEXTOBJ) - (PROG ((PREG (DSPCLIPPINGREGION NIL PANE)) - (LTOP (GETLD LINE YTOP)) - RAISE PWIDTH PBOTTOM LASTVISIBLE) - (SETQ RAISE (IDIFFERENCE NEWTOP (FGETLD LINE YTOP))) - (CL:UNLESS (IGREATERP RAISE 0) (* ; "Maybe it's not moving") + (PROG ((PWIDTH (fetch WIDTH of (DSPCLIPPINGREGION NIL PANE))) + (VBOTTOM (\TEDIT.ONSCREEN? PANE 'BOTTOM)) + (VLEFT (\TEDIT.ONSCREEN? PANE 'LEFT)) + (DELTA (IDIFFERENCE NEWTOPY (FGETLD LINE YTOP))) + LASTVISIBLE) + (CL:UNLESS (IGREATERP DELTA 0) (* ; "Maybe it's not moving") (RETURN)) - (* ;; "Make the YPOS of the raised lines consistent with the new positions of their images. LASTVISIBLE is the last line that was previously visible (and whose image has been raised). ") + (* ;; "Make the YPOS of the raised lines consistent with the new positions of their images. LASTVISIBLE is the last line that was previously visible (and whose image will be raised). ") - (SETQ PBOTTOM (fetch BOTTOM of PREG)) (for L inlines LINE while (IGEQ (FGETLD L YBOT) - PBOTTOM) do (SETYPOS L (IPLUS RAISE (FGETLD L YBOT))) + VBOTTOM) do (SETYPOS L (IPLUS DELTA (FGETLD L YBOT))) (SETQ LASTVISIBLE L)) - (* ;; " ") - - (CL:UNLESS (\TEDIT.OFFSCREEN.SCROLL TEXTOBJ PANE 'VERTICAL) + (* ;; "VLEFT is the visible left, the left in window coordinates of the visible region of an off-screen window.") - (* ;; "Completely on screen, we can work with screen bitmap. But first, are we at the end of the text? Just clear.") + (* ;; "Lines are positioned, but images may not exist. Raise the image of LINE and all visible lines below it.") - (* ;; "Lines are positioned, but images may not exist. Raise the image of LINE and all visible lines below it.") + (BITBLT PANE VLEFT VBOTTOM PANE VLEFT (IPLUS VBOTTOM DELTA) + PWIDTH + (FGETLD LINE YTOP) + 'INPUT + 'REPLACE) + (CL:WHEN LASTVISIBLE - (SETQ PWIDTH (fetch WIDTH of PREG)) - (BITBLT PANE 0 0 PANE 0 RAISE PWIDTH LTOP 'INPUT 'REPLACE) - - (* ;; "") - - (* ;; "Now for the bottom of the pane. First clear it.") + (* ;; "Clear any garbage left over below the (repositioned) LASTVISIBLELINE, and display new lines needed to fill the space") (BLTSHADE WHITESHADE PANE 0 0 PWIDTH (FGETLD LASTVISIBLE YBOT) 'REPLACE) @@ -2671,11 +2662,16 @@ (* ;; "If the last visible line in the pane (whose image is now elevated) is not the last line of the text, we build and display new lines to fill out the pane.") - (\TEDIT.LINES.BELOW LASTVISIBLE NIL PANE TEXTOBJ) - (RETURN))]) + (\TEDIT.LINES.BELOW LASTVISIBLE NIL PANE TEXTOBJ NIL VBOTTOM)) + (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE) + (RETURN LASTVISIBLE]) (\TEDIT.VALID.LINES - [LAMBDA (TEXTOBJ FIRSTCHANGEDCHNO NCHARSCHANGED REASON) (* ; "Edited 20-Mar-2024 06:46 by rmk") + [LAMBDA (TEXTOBJ FIRSTCHANGEDCHNO NCHARSCHANGED REASON) (* ; "Edited 6-May-2024 13:39 by rmk") + (* ; "Edited 3-May-2024 23:38 by rmk") + (* ; "Edited 20-Apr-2024 22:11 by rmk") + (* ; "Edited 2-Apr-2024 10:43 by rmk") + (* ; "Edited 20-Mar-2024 06:46 by rmk") (* ; "Edited 15-Mar-2024 19:44 by rmk") (* ; "Edited 22-Feb-2024 01:05 by rmk") (* ; "Edited 3-Nov-2023 12:07 by rmk") @@ -2718,79 +2714,86 @@ (* ;; "") - (for PANE PLINES FIRSTCHANGEDLINE LASTCHANGEDLINE LASTVALIDLINE NEXTVALIDLINE - (LASTCHANGEDCHNO _ (SUB1 (IPLUS FIRSTCHANGEDCHNO NCHARSCHANGED))) inpanes TEXTOBJ - eachtime (SETQ PLINES (\DTEST (fetch (TEXTWINDOW PLINES) of PANE) - 'LINEDESCRIPTOR)) - (SETQ LASTVALIDLINE PLINES) - (SETQ NEXTVALIDLINE NIL) - collect [SETQ FIRSTCHANGEDLINE (find L inlines (FGETLD PLINES NEXTLINE) - suchthat - - (* ;; + (if (IGREATERP (FGETTOBJ TEXTOBJ TEXTLEN) + 0) + then [for PANE PLINES FIRSTCHANGEDLINE LASTCHANGEDLINE LASTVALIDLINE NEXTVALIDLINE + (LASTCHANGEDCHNO _ (SUB1 (IPLUS FIRSTCHANGEDCHNO NCHARSCHANGED))) inpanes TEXTOBJ + eachtime (SETQ PLINES (\DTEST (fetch (TEXTWINDOW PLINES) of PANE) + 'LINEDESCRIPTOR)) + (SETQ LASTVALIDLINE PLINES) + (SETQ NEXTVALIDLINE NIL) + collect [SETQ FIRSTCHANGEDLINE + (find L inlines (FGETLD PLINES NEXTLINE) + suchthat + + (* ;;  "Either within a line or immediately after a line that did not end with an EOL") - (OR (LINESELECTEDP L FIRSTCHANGEDCHNO LASTCHANGEDCHNO) - (AND (NOT (FGETLD L FORCED-END)) - (IEQP FIRSTCHANGEDCHNO - (ADD1 (FGETLD L LCHARLIM] - [SETQ LASTCHANGEDLINE (find L inlines (OR FIRSTCHANGEDLINE (FGETLD PLINES NEXTLINE)) - suchthat (OR (WITHINLINEP LASTCHANGEDCHNO L) - (AND (NOT (FGETLD L FORCED-END)) - (IEQP LASTCHANGEDCHNO (ADD1 (FGETLD L - LCHARLIM] - (CL:WHEN (OR FIRSTCHANGEDLINE LASTCHANGEDLINE) (* ; + (OR (LINESELECTEDP L FIRSTCHANGEDCHNO LASTCHANGEDCHNO) + (AND (NOT (FGETLD L FORCED-END)) + (IEQP FIRSTCHANGEDCHNO (ADD1 (FGETLD L LCHARLIM] + [SETQ LASTCHANGEDLINE (find L inlines (OR FIRSTCHANGEDLINE (FGETLD PLINES + NEXTLINE)) + suchthat (OR (WITHINLINEP LASTCHANGEDCHNO L) + (AND (NOT (FGETLD L FORCED-END)) + (IEQP LASTCHANGEDCHNO + (ADD1 (FGETLD L LCHARLIM] + (CL:WHEN (OR FIRSTCHANGEDLINE LASTCHANGEDLINE) + (* ;  "The change is visible in this pane. ") - (* ;; "Figure out the LASTVALIDLINE--somewhere before the FIRSTCHANGEDLINE. Could be PLINES as initialized above") + (* ;; "Figure out the LASTVALIDLINE--somewhere before the FIRSTCHANGEDLINE. Could be PLINES as initialized above") - (CL:WHEN FIRSTCHANGEDLINE + (CL:WHEN FIRSTCHANGEDLINE - (* ;; "First changed line is visible. Rejustification could propagate changes backwards until a forced-end, so that's the clear last valid. That may overshoot and cause to much action on redisplaying. The only way we can tighten up is to then format lines forward from the break, stopping before the first line whose LCHARLIM would change.") + (* ;; "First changed line is visible. Rejustification could propagate changes backwards until a forced-end, so that's the clear last valid. That may overshoot and cause to much action on redisplaying. The only way we can tighten up is to then format lines forward from the break, stopping before the first line whose LCHARLIM would change.") - (SETQ LASTVALIDLINE (find L backlines (FGETLD FIRSTCHANGEDLINE PREVLINE) - suchthat (FGETLD L FORCED-END))) - (CL:WHEN (AND (EQ LASTVALIDLINE PLINES) - (IGREATERP (FGETLD FIRSTCHANGEDLINE LCHAR1) - 1)) + (SETQ LASTVALIDLINE (find L backlines (FGETLD FIRSTCHANGEDLINE PREVLINE + ) + suchthat (FGETLD L FORCED-END))) + (CL:WHEN (AND (EQ LASTVALIDLINE PLINES) + (IGREATERP (FGETLD (FGETLD LASTVALIDLINE NEXTLINE) + LCHAR1) + 1)) - (* ;; "We ran back to the top of the pane without finding a forced-end. If it's not the beginning of the document, we need to insert a new line with the proper LCHARLIM and YBOT just above the pane. ") + (* ;; "We ran back to the top of the pane without finding a forced-end. If it's not the beginning of the document, we need to insert a new line with the proper LCHARLIM and YBOT just above the pane. ") - [SETQ LASTVALIDLINE (CADR (\TEDIT.LINES.ABOVE TEXTOBJ - (SUB1 (FGETLD FIRSTCHANGEDLINE LCHAR1)) - (FGETLD FIRSTCHANGEDLINE YTOP] - (\TEDIT.INSERTLINE LASTVALIDLINE PLINES T))) + [SETQ LASTVALIDLINE (CADR (\TEDIT.LINES.ABOVE (FGETTOBJ TEXTOBJ + STREAMHINT) + (SUB1 (FGETLD FIRSTCHANGEDLINE + LCHAR1)) + (FGETLD FIRSTCHANGEDLINE YTOP] + (\TEDIT.INSERTLINE LASTVALIDLINE PLINES T))) - (* ;; "") + (* ;; "") - (* ;; "The next valid must be somewhere after the last changed line, and after a stable line break. But we will run out of lines if there is no visible paragraph break: the change reached the bottom, or the paragraph break after the change is below the pane, or the document ended. In that case the last line in the chain is not valid and presumably the gap filler will fill to the end of the window. ") + (* ;; "The next valid must be somewhere after the last changed line, and after a stable line break. But we will run out of lines if there is no visible paragraph break: the change reached the bottom, or the paragraph break after the change is below the pane, or the document ended. In that case the last line in the chain is not valid and presumably the gap filler will fill to the end of the window. ") - [SETQ NEXTVALIDLINE (for L inlines LASTCHANGEDLINE - when (OR (FGETLD L FORCED-END) - (GETLD L LSTLN)) - do (RETURN (FGETLD L NEXTLINE] + (CL:WHEN LASTCHANGEDLINE + [SETQ NEXTVALIDLINE (for L inlines (FGETLD LASTCHANGEDLINE NEXTLINE) + when (OR (FGETLD L FORCED-END) + (GETLD L LSTLN)) + do (RETURN (FGETLD L NEXTLINE]) + (CL:UNLESS (EQ REASON 'APPEARANCE) - (* ;; "Translate the character positions of the still-valid lines that are visible later than the change. ") + (* ;; "Translate the character positions of the still-valid lines that are visible later than the change. ") - (for L DELTA inlines NEXTVALIDLINE first (SETQ DELTA (SELECTQ REASON - (INSERTION NCHARSCHANGED) - (DELETION (IMINUS - NCHARSCHANGED - )) - (APPEARANCE (RETURN)) - (SHOULDNT - "BAD REASONS FOR VALID LINES" - ))) - do (add (FGETLD L LCHAR1) - DELTA) - (add (FGETLD L LCHARLIM) - DELTA)) + (for L (DELTA _ (SELECTQ REASON + (INSERTION NCHARSCHANGED) + (DELETION (IMINUS NCHARSCHANGED)) + (SHOULDNT "BAD REASONS FOR VALID LINES"))) + inlines NEXTVALIDLINE do (add (FGETLD L LCHAR1) + DELTA) + (add (FGETLD L LCHARLIM) + DELTA))) - (* ;; "") + (* ;; "") - (CL:WHEN LASTVALIDLINE - (SETLD LASTVALIDLINE NEXTLINE NIL) (* ; "Chop off the useless lines") - (CONS LASTVALIDLINE NEXTVALIDLINE)))]) + (CL:WHEN LASTVALIDLINE + (SETLD LASTVALIDLINE NEXTLINE NIL) + (* ; "Chop off the useless lines") + (CONS LASTVALIDLINE NEXTVALIDLINE)))] + else (for P inpanes TEXTOBJ collect (CONS (PLINES P]) (\TEDIT.CLEARPANE.BELOW.LINE [LAMBDA (LINE PANE TEXTOBJ) (* ; "Edited 20-Nov-2023 14:02 by rmk") @@ -2856,45 +2859,6 @@ (LINKLD LASTLINE LINE) LINE))]) -(\TEDIT.MARK.LINES.DIRTY - [LAMBDA (TEXTOBJ FIRSTCHAR LASTCHAR) (* ; "Edited 11-Dec-2023 10:43 by rmk") - (* ; "Edited 2-Dec-2023 23:07 by rmk") - (* ; "Edited 3-Nov-2023 12:07 by rmk") - (* ; "Edited 28-May-2023 14:05 by rmk") - (* ; "Edited 20-May-2023 16:44 by rmk") - (* ; "Edited 7-Apr-2023 19:25 by rmk") - (* ; "Edited 30-May-91 16:05 by jds") - - (* ;; "Mark as dirty the lines that intersect the range FIRSTCHAR to LASTCHAR inclusive, and assert that all panes need to be updated.") - - [if (type? SELECTION FIRSTCHAR) - then (SETQ LASTCHAR (SUB1 (GETSEL FIRSTCHAR CHLIM))) - (SETQ FIRSTCHAR (GETSEL FIRSTCHAR CH#)) - elseif (type? SELPIECES FIRSTCHAR) - then (SETQ LASTCHAR (ffetch (SELPIECES SPLASTCHAR) of FIRSTCHAR)) - (SETQ FIRSTCHAR (ffetch (SELPIECES SPFIRSTCHAR) of FIRSTCHAR)) - else (SETQ FIRSTCHAR (IMIN FIRSTCHAR (TEXTLEN TEXTOBJ))) - (SETQ LASTCHAR (CL:IF (EQ LASTCHAR -1) - (TEXTLEN TEXTOBJ TEXTOBJ) - (IMIN LASTCHAR (TEXTLEN TEXTOBJ)))] - (for PANE inpanes TEXTOBJ do (for LINES inlines (find L inlines (fetch (TEXTWINDOW PLINES) - of PANE) - suchthat - - (* ;; - "The first line ending after FIRSTCHAR") - - (IGEQ (FGETLD L LCHARLIM) - FIRSTCHAR)) - do (FSETTOBJ TEXTOBJ TXTNEEDSUPDATE T) - (for L inlines LINES while (ILEQ (FGETLD L LCHAR1) - LASTCHAR) - do - (* ;; "All the lines that begin before LASTCHAR") - - (FSETLD L LDIRTY T)) - (RETURN]) - (\TEDIT.LINE.BOTTOM [LAMBDA (LINE) (* ; "Edited 4-Dec-2023 13:59 by rmk") (* ; "Edited 25-Apr-2023 23:00 by rmk") @@ -2939,9 +2903,10 @@ NEWYBOT]) (\TEDIT.NCONC.LINES - [LAMBDA (HEADLINE TAILLINE HEADYTOP LASTBOTTOM) (* ; "Edited 1-Dec-2023 11:45 by rmk") + [LAMBDA (HEADLINE TAILLINE HEADYTOP LASTBOTTOM) (* ; "Edited 8-Apr-2024 22:43 by rmk") + (* ; "Edited 1-Dec-2023 11:45 by rmk") - (* ;; "The lines headed by HEADLINE and TAILLINE are linked in a single chain, and their Y positions are adjusted so that the top of HEADLINE is at HEADYTOP (if given) and it and all other lines are positioned relative to that, based on their LHEIGHTs. If LASTBOTTOM is provided, then lines below it will be chopped off. Returns the last line in the chain.") + (* ;; "Links the lines headed by HEADLINE and TAILLINE into a single chain, and their Y positions are adjusted so that the top of HEADLINE is at HEADYTOP (if given) and it and all other lines are positioned relative to that, based on their LHEIGHTs. If LASTBOTTOM is provided, then lines below it will be chopped off. Returns the last line in the chain.") (CL:WHEN HEADLINE (CL:UNLESS HEADYTOP @@ -2966,22 +2931,21 @@ (SETQ TAILLINE NIL))))]) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (24497 25906 (\TEDIT.LINEDESCRIPTOR.DEFPRINT 24507 . 25904)) (33264 111915 ( -\TEDIT.FORMATLINE 33274 . 68334) (\TEDIT.FORMATLINE.SETUP 68336 . 71727) (\TEDIT.FORMATLINE.HORIZONTAL - 71729 . 76125) (\TEDIT.FORMATLINE.VERTICAL 76127 . 78330) (\TEDIT.FORMATLINE.JUSTIFY 78332 . 84272) ( -\TEDIT.FORMATLINE.TABS 84274 . 91761) (\TEDIT.FORMATLINE.SCALETABS 91763 . 92766) ( -\TEDIT.FORMATLINE.PURGE.SPACES 92768 . 94078) (\TEDIT.FORMATLINE.EMPTY 94080 . 98910) ( -\TEDIT.FORMATLINE.UPDATELOOKS 98912 . 106178) (\TEDIT.FORMATLINE.LASTLEGAL 106180 . 109662) ( -\TEDIT.LINES.ABOVE 109664 . 111913)) (112032 114453 (\CLEARTHISLINE 112042 . 112711) (\TLVALIDATE -112713 . 114451)) (114647 134704 (\TEDIT.DISPLAYLINE 114657 . 126997) (\TEDIT.DISPLAYLINE.TABS 126999 - . 129622) (\TEDIT.LINECACHE 129624 . 130352) (\TEDIT.CREATE.LINECACHE 130354 . 131190) ( -\TEDIT.BLTCHAR 131192 . 133819) (\TEDIT.DIACRITIC.SHIFT 133821 . 134702)) (135319 189027 ( -\TEDIT.UPDATE.SCREEN 135329 . 137153) (\TEDIT.BACKFORMAT 137155 . 139197) (\TEDIT.PREVIOUS.LINEBREAK -139199 . 141502) (\TEDIT.FILLPANE 141504 . 144053) (\TEDIT.UPDATE.LINES 144055 . 149043) ( -\TEDIT.CREATEPLINE 149045 . 150888) (\TEDIT.FIND.DIRTYCHARS 150890 . 152902) (\TEDIT.LINES.BELOW -152904 . 156386) (\FORMAT.GAP.LINES 156388 . 160379) (\TEDIT.LOWER.LINES 160381 . 164748) ( -\TEDIT.RAISE.LINES 164750 . 168177) (\TEDIT.VALID.LINES 168179 . 177573) (\TEDIT.CLEARPANE.BELOW.LINE -177575 . 178893) (\TEDIT.INSERTLINE 178895 . 180153) (\TEDIT.INSURE.TRAILING.LINE 180155 . 181470) ( -\TEDIT.MARK.LINES.DIRTY 181472 . 184183) (\TEDIT.LINE.BOTTOM 184185 . 187025) (\TEDIT.NCONC.LINES -187027 . 189025))))) + (FILEMAP (NIL (24499 25908 (\TEDIT.LINEDESCRIPTOR.DEFPRINT 24509 . 25906)) (33266 112125 ( +\TEDIT.FORMATLINE 33276 . 68336) (\TEDIT.FORMATLINE.SETUP 68338 . 71729) (\TEDIT.FORMATLINE.HORIZONTAL + 71731 . 76127) (\TEDIT.FORMATLINE.VERTICAL 76129 . 78332) (\TEDIT.FORMATLINE.JUSTIFY 78334 . 84274) ( +\TEDIT.FORMATLINE.TABS 84276 . 91763) (\TEDIT.FORMATLINE.SCALETABS 91765 . 92768) ( +\TEDIT.FORMATLINE.PURGE.SPACES 92770 . 94080) (\TEDIT.FORMATLINE.EMPTY 94082 . 98912) ( +\TEDIT.FORMATLINE.UPDATELOOKS 98914 . 106180) (\TEDIT.FORMATLINE.LASTLEGAL 106182 . 109664) ( +\TEDIT.LINES.ABOVE 109666 . 112123)) (112242 114663 (\CLEARTHISLINE 112252 . 112921) (\TLVALIDATE +112923 . 114661)) (114857 134914 (\TEDIT.DISPLAYLINE 114867 . 127207) (\TEDIT.DISPLAYLINE.TABS 127209 + . 129832) (\TEDIT.LINECACHE 129834 . 130562) (\TEDIT.CREATE.LINECACHE 130564 . 131400) ( +\TEDIT.BLTCHAR 131402 . 134029) (\TEDIT.DIACRITIC.SHIFT 134031 . 134912)) (135529 187481 ( +\TEDIT.BACKFORMAT 135539 . 137760) (\TEDIT.PREVIOUS.LINEBREAK 137762 . 140381) (\TEDIT.FILLPANE 140383 + . 143052) (\TEDIT.UPDATE.LINES 143054 . 148840) (\TEDIT.CREATEPLINE 148842 . 150685) ( +\TEDIT.FIND.DIRTYCHARS 150687 . 152699) (\TEDIT.LINES.BELOW 152701 . 156584) (\FORMAT.GAP.LINES 156586 + . 160577) (\TEDIT.LOWER.LINES 160579 . 164696) (\TEDIT.RAISE.LINES 164698 . 168146) ( +\TEDIT.VALID.LINES 168148 . 178634) (\TEDIT.CLEARPANE.BELOW.LINE 178636 . 179954) (\TEDIT.INSERTLINE +179956 . 181214) (\TEDIT.INSURE.TRAILING.LINE 181216 . 182531) (\TEDIT.LINE.BOTTOM 182533 . 185373) ( +\TEDIT.NCONC.LINES 185375 . 187479))))) STOP diff --git a/library/tedit/TEDIT-SCREEN.LCOM b/library/tedit/TEDIT-SCREEN.LCOM index 888b2eddfc8dfe307625c0baa7c687ea96655a96..a853cd49f778dfc7e66d85381b7840acd51e4383 100644 GIT binary patch delta 3678 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 Lr8xZUmv{aTde>pd diff --git a/library/tedit/TEDIT-SELECTION b/library/tedit/TEDIT-SELECTION index 0f99c720e..3c6cd9c91 100644 --- a/library/tedit/TEDIT-SELECTION +++ b/library/tedit/TEDIT-SELECTION @@ -1,21 +1,22 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "21-Mar-2024 10:49:49"  -{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-SELECTION.;461 130592 +(FILECREATED "29-Apr-2024 13:58:19" {WMEDLEY}tedit>TEDIT-SELECTION.;492 139011 :EDIT-BY rmk - :CHANGES-TO (FNS TEDIT.SCANSEL TEDIT.XYTOCH TEDIT.SELECT) - (VARS TEDIT-SELECTIONCOMS) + :CHANGES-TO (FNS \TEDIT.EXTEND.SEL TEDIT.SHOWSEL \TEDIT.SCAN.LINE \TEDIT.SELECT \TEDIT.XYTOSEL + \TEDIT.COPYSEL TEDIT.MAKESEL TEDIT.SETSEL \TEDIT.SELECTION.DEFPRINT + \TEDIT.FIXSEL \TEDIT.SEL.CHANGED? \TEDIT.SHOWSEL TEDIT.SET.SEL.LOOKS + \TEDIT.SELPIECES \TEDIT.UPDATE.SEL) + (RECORDS SELECTION) - :PREVIOUS-DATE "20-Mar-2024 11:08:55" -{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-SELECTION.;453) + :PREVIOUS-DATE "29-Apr-2024 11:00:18" {WMEDLEY}tedit>TEDIT-SELECTION.;490) (PRETTYCOMPRINT TEDIT-SELECTIONCOMS) (RPAQQ TEDIT-SELECTIONCOMS - ((DECLARE%: EVAL@COMPILE DONTCOPY (EXPORT (RECORDS SELECTION SELPIECES) + [(DECLARE%: EVAL@COMPILE DONTCOPY (EXPORT (RECORDS SELECTION SELPIECES) (CONSTANTS (COPYSELSHADE 30583) (COPYLOOKSSELSHADE 30583) (EDITMOVESHADE -1) @@ -37,11 +38,12 @@ (* ; "Setting for a %"Laurel%" mode") (COMS (* ; "Selection manipulating code") (FNS \TEDIT.EXTEND.SEL \TEDIT.SELECT \TEDIT.SCAN.LINE \TEDIT.SCAN.LINE.WORD - \TEDIT.SELECT.LINE.SCANNER \TEDIT.SELECT.OBJECT) + \TEDIT.XYTOSEL \TEDIT.SELECT.OBJECT) (FNS \TEDIT.FIXSEL \TEDIT.CHTOX \TEDIT.COLLECTSELS \TEDIT.SELECTION.UNSET) (FNS \TEDIT.RESET.EXTEND.PENDING.DELETE \TEDIT.SET.SEL.LOOKS) (FNS \TEDIT.SHOWSEL \TEDIT.SHOWSEL.HILIGHT \TEDIT.UPDATE.SHOWSEL \TEDIT.REFRESH.SHOWSEL - \TEDIT.UPDATE.SEL \TEDIT.SEL.L1 \TEDIT.SEL.LN \TEDIT.SEL.DELETEDCHARS) + \TEDIT.UPDATE.SEL \TEDIT.CARETLINE \TEDIT.SEL.L1 \TEDIT.SEL.LN + \TEDIT.SEL.DELETEDCHARS) (FNS \TEDIT.COPYSEL \TEDIT.SEL.CHANGED?)) (* ;; "SELPIECES") @@ -51,9 +53,12 @@ (* ;; "User entries to the selection code") - (FNS TEDIT.XYTOCH TEDIT.GETPOINT TEDIT.GETSEL TEDIT.GETSEL.PARA TEDIT.MAKESEL TEDIT.SCANSEL - TEDIT.SET.SEL.LOOKS TEDIT.SETSEL TEDIT.SHOWSEL TEDIT.SEL.AS.STRING TEDIT.SEL.AS.SEXPR - TEDIT.SELECTALL))) + (FNS TEDIT.XYTOCH TEDIT.SELPROP TEDIT.GETPOINT TEDIT.GETSEL TEDIT.GETSEL.PARA TEDIT.MAKESEL + TEDIT.SCANSEL TEDIT.SET.SEL.LOOKS TEDIT.SETSEL TEDIT.SHOWSEL TEDIT.SEL.AS.STRING + TEDIT.SEL.AS.SEXPR TEDIT.SELECTALL) + (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) + (NLAML) + (LAMA TEDIT.SELPROP]) (DECLARE%: EVAL@COMPILE DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE @@ -88,8 +93,8 @@  "Which end should the caret appear at? (LEFT or RIGHT)") (SET FLAG) (* ;  "T if this selection is real; NIL if not") - (SELTEXTOBJ FULLXPOINTER) (* ; - "TEXTOBJ that describes the selected text") + (SELTEXTSTREAM FULLXPOINTER) (* ; + "TEXTSTREAM that describes the selected text") SELKIND (* ;  "What kind of selection? CHAR or WORD or LINE or PARA") HOW (* ; @@ -106,10 +111,12 @@  "A Place for the selected object to put info about selection inside itself.") ) (INIT (DEFPRINT 'SELECTION (FUNCTION \TEDIT.SELECTION.DEFPRINT))) - [ACCESSFNS (DX (AND (FIXP (fetch (SELECTION X0) of DATUM)) - (FIXP (fetch (SELECTION XLIM) of DATUM)) - (IDIFFERENCE (fetch (SELECTION XLIM) of DATUM) - (fetch (SELECTION X0) of DATUM] + [ACCESSFNS ((SELTEXTOBJ (GETSEL DATUM SELTEXTSTREAM) + (SETSEL DATUM SELTEXTSTREAM NEWVALUE)) + (DX (AND (FIXP (fetch (SELECTION X0) of DATUM)) + (FIXP (fetch (SELECTION XLIM) of DATUM)) + (IDIFFERENCE (fetch (SELECTION XLIM) of DATUM) + (fetch (SELECTION X0) of DATUM] SET _ NIL HOW _ BLACKSHADE HOWHEIGHT _ 1 HASCARET _ T X0 _ 0 POINT _ 'LEFT L1 _ (LIST NIL) LN _ (LIST NIL)) @@ -260,11 +267,12 @@ (DEFINEQ (\TEDIT.SELECTION.DEFPRINT - [LAMBDA (SEL STREAM) (* ; "Edited 11-Feb-2024 08:58 by rmk") + [LAMBDA (SEL STREAM) (* ; "Edited 29-Apr-2024 12:47 by rmk") + (* ; "Edited 11-Feb-2024 08:58 by rmk") (* ; "Edited 9-Feb-2024 15:55 by rmk") (* ; "Edited 23-May-2023 00:06 by rmk") (* ; "Edited 21-May-2023 09:15 by rmk") - (LET ((TEXTOBJ (fetch (SELECTION SELTEXTOBJ) of SEL)) + (LET ((TEXTOBJ (TEXTOBJ SEL T)) WHICH INFO LOC) (CL:WHEN TEXTOBJ (SETQ WHICH (if (EQ SEL (fetch (TEXTOBJ SEL) of TEXTOBJ)) @@ -421,7 +429,8 @@ (DEFINEQ (\TEDIT.EXTEND.SEL - [LAMBDA (X Y OSEL TEXTOBJ SELOPERATION PANE) (* ; "Edited 15-Mar-2024 13:38 by rmk") + [LAMBDA (X Y OSEL TSTREAM SELOPERATION PANE) (* ; "Edited 29-Apr-2024 13:45 by rmk") + (* ; "Edited 15-Mar-2024 13:38 by rmk") (* ; "Edited 26-Dec-2023 11:46 by rmk") (* ; "Edited 15-Oct-2023 10:39 by rmk") (* ; "Edited 5-Oct-2023 22:08 by rmk") @@ -438,93 +447,99 @@ (* ;; "Same behavior if you drag from the top or bottom. If you drag from the bottom, the bottom disappears when you enter the 3rd. But as you continue from 3rd to 2nd, the upper deselects. But you might think that dragging behavior would be consistent--as you keep going up (or down), the paragraph you are leaving goes away.") - (CL:UNLESS (ZEROP (TEXTLEN TEXTOBJ)) - (PROG (NPOINT NEWSEL OCH# OCHLIM NCH# NCHLIM SETOSELFLG (SELKIND (GETSEL OSEL SELKIND))) - - (* ;; "LINE+WORDSELFLG iff PARA") - - (SETQ NEWSEL (\TEDIT.SELECT X Y TEXTOBJ (SELECTQ SELKIND - ((LINE PARA) - 'LINE) - ((WORD CHAR) - 'TEXT) - 'TEXT) - (OR (EQ SELKIND 'WORD) - (EQ SELKIND 'PARA)) - SELOPERATION PANE T)) - (CL:UNLESS (AND NEWSEL (GETSEL NEWSEL SET)) (* ; "No new selection, return OSEL") - (RETURN OSEL)) - (\TEDIT.SET.SEL.LOOKS NEWSEL SELOPERATION) (* ; + (PROG (NPOINT NEWSEL OCH# OCHLIM NCH# NCHLIM SETOSELFLG (TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM + TEXTOBJ) + of TSTREAM))) + (SELKIND (GETSEL OSEL SELKIND))) + + (* ;; "LINE+WORDSELFLG iff PARA") + + (CL:WHEN (ZEROP (TEXTLEN TEXTOBJ)) + (RETURN)) + (SETQ NEWSEL (\TEDIT.SELECT X Y TSTREAM (SELECTQ SELKIND + ((LINE PARA) + 'LINE) + ((WORD CHAR) + 'TEXT) + 'TEXT) + (OR (EQ SELKIND 'WORD) + (EQ SELKIND 'PARA)) + SELOPERATION PANE T)) + (CL:UNLESS (AND NEWSEL (GETSEL NEWSEL SET)) (* ; "No new selection, return OSEL") + (RETURN OSEL)) + (\TEDIT.SET.SEL.LOOKS NEWSEL SELOPERATION) (* ;  "NEWSEL is the same as OSEL: regular, copy-source, etc.") - (SETQ OCH# (FGETSEL OSEL CH#)) - (SETQ OCHLIM (FGETSEL OSEL CHLIM)) - (SETQ NCH# (FGETSEL NEWSEL CH#)) - (SETQ NCHLIM (FGETSEL NEWSEL CHLIM)) - [SETQ NPOINT (COND - ((IGEQ NCHLIM OCHLIM) (* ; + (SETQ OCH# (FGETSEL OSEL CH#)) + (SETQ OCHLIM (FGETSEL OSEL CHLIM)) + (SETQ NCH# (FGETSEL NEWSEL CH#)) + (SETQ NCHLIM (FGETSEL NEWSEL CHLIM)) + [SETQ NPOINT (COND + ((IGEQ NCHLIM OCHLIM) (* ;  "NEWSEL ends to the right of OSEL: adding on the right ") - 'RIGHT) - ((ILEQ NCH# OCH#) (* ; + 'RIGHT) + ((ILEQ NCH# OCH#) (* ;  "NEWSEL starts to the left of OSEL: adding on the left") - 'LEFT) - ((IGREATERP (IABS (IDIFFERENCE NCHLIM OCHLIM)) - (IABS (IDIFFERENCE NCH# OCH#))) + 'LEFT) + ((IGREATERP (IABS (IDIFFERENCE NCHLIM OCHLIM)) + (IABS (IDIFFERENCE NCH# OCH#))) - (* ;; "New X (right click) is in the middle of an old selection. Must be shrinking from the left. This determines the relationships based on character positions. It might be more intuitive in PARA mode if this is based on paragraphs--if there are fewer *paragraphs* in front than behind, of any length.") + (* ;; "New X (right click) is in the middle of an old selection. Must be shrinking from the left. This determines the relationships based on character positions. It might be more intuitive in PARA mode if this is based on paragraphs--if there are fewer *paragraphs* in front than behind, of any length.") - (SETQ SETOSELFLG T) - 'LEFT) - (T - (* ;; + (SETQ SETOSELFLG T) + 'LEFT) + (T + (* ;;  "Must be shrinking from the right. Move OLDSEL's CHLIM back to NEWSEL's") - (SETQ SETOSELFLG T) - 'RIGHT] - (SELECTQ NPOINT - (LEFT (* ; + (SETQ SETOSELFLG T) + 'RIGHT] + (SELECTQ NPOINT + (LEFT (* ;  "Caret's to the new left, keep old right ") - (SETQ NCHLIM (IMAX NCHLIM OCHLIM)) - (FSETSEL NEWSEL CHLIM NCHLIM) - (FSETSEL NEWSEL XLIM (FGETSEL OSEL XLIM)) - (FSETSEL NEWSEL LN (COPY (FGETSEL OSEL LN))) + (SETQ NCHLIM (IMAX NCHLIM OCHLIM)) + (FSETSEL NEWSEL CHLIM NCHLIM) + (FSETSEL NEWSEL XLIM (FGETSEL OSEL XLIM)) + (FSETSEL NEWSEL LN (COPY (FGETSEL OSEL LN))) - (* ;; "Only copying is allowed from a protected area (menu). Otherwise, only extend to its start. If CH# changes, L1 may also change (\FIXSEL)") + (* ;; "Only copying is allowed from a protected area (menu). Otherwise, only extend to its start. If CH# changes, L1 may also change (\FIXSEL)") - (CL:UNLESS (EQ SELOPERATION 'COPY) - (SETQ NCH# (IMAX NCH# (\TEDIT.FIND.PROTECTED.START TEXTOBJ (SUB1 OCHLIM) - NCH#))))) - (RIGHT (* ; + (CL:UNLESS (EQ SELOPERATION 'COPY) + (SETQ NCH# (IMAX NCH# (\TEDIT.FIND.PROTECTED.START TEXTOBJ (SUB1 OCHLIM) + NCH#))))) + (RIGHT (* ;  "Caret's to the new right, keep old left") - (SETQ NCH# (IMIN NCH# OCH#)) - (FSETSEL NEWSEL X0 (FGETSEL OSEL X0)) - (FSETSEL NEWSEL L1 (COPY (FGETSEL OSEL L1))) + (SETQ NCH# (IMIN NCH# OCH#)) + (FSETSEL NEWSEL X0 (FGETSEL OSEL X0)) + (FSETSEL NEWSEL L1 (COPY (FGETSEL OSEL L1))) - (* ;; "Only copying is allowed from a protected area (menu). Otherwise, only extend to its end. If CHLIM changes, LN may also change (\FIXSEL)") + (* ;; "Only copying is allowed from a protected area (menu). Otherwise, only extend to its end. If CHLIM changes, LN may also change (\FIXSEL)") - (CL:UNLESS (EQ SELOPERATION 'COPY) - [SETQ NCHLIM (IMIN NCHLIM (ADD1 (\TEDIT.FIND.PROTECTED.END - TEXTOBJ OCH# (ADD1 ( + (CL:UNLESS (EQ SELOPERATION 'COPY) + [SETQ NCHLIM (IMIN NCHLIM (ADD1 (\TEDIT.FIND.PROTECTED.END + TEXTOBJ OCH# (ADD1 (  \TEDIT.FIND.PROTECTED.END - TEXTOBJ OCH# - (SUB1 NCHLIM] - (SETQ NCH# (IMIN NCH# (SUB1 NCHLIM))))) - (SHOULDNT)) - (FSETSEL NEWSEL CH# NCH#) - (FSETSEL NEWSEL CHLIM NCHLIM) - (FSETSEL NEWSEL DCH (IDIFFERENCE NCHLIM (FGETSEL NEWSEL CH#))) - (FSETSEL NEWSEL POINT NPOINT) - (CL:UNLESS (EQ (FGETSEL OSEL SELOBJ) - (FGETSEL NEWSEL SELOBJ)) (* ; + TEXTOBJ OCH# + (SUB1 NCHLIM] + (SETQ NCH# (IMIN NCH# (SUB1 NCHLIM))))) + (SHOULDNT)) + (FSETSEL NEWSEL CH# NCH#) + (FSETSEL NEWSEL CHLIM NCHLIM) + (FSETSEL NEWSEL DCH (IDIFFERENCE NCHLIM (FGETSEL NEWSEL CH#))) + (FSETSEL NEWSEL POINT NPOINT) + (CL:UNLESS (EQ (FGETSEL OSEL SELOBJ) + (FGETSEL NEWSEL SELOBJ)) (* ;  "Keep object if it is in overlapping part?") - (FSETSEL NEWSEL SELOBJ NIL)) - (\TEDIT.FIXSEL NEWSEL TEXTOBJ) - (CL:WHEN SETOSELFLG (* ; + (FSETSEL NEWSEL SELOBJ NIL)) + (\TEDIT.FIXSEL NEWSEL TEXTOBJ) + (CL:WHEN SETOSELFLG (* ;  "It is wise to copy the new sel into the old one.") - (\TEDIT.COPYSEL NEWSEL OSEL)) - (RETURN NEWSEL)))]) + (\TEDIT.COPYSEL NEWSEL OSEL)) + (RETURN NEWSEL]) (\TEDIT.SELECT - [LAMBDA (X Y TEXTOBJ REGION WORDSELFLG SELOPERATION PANE EXTENDING) + [LAMBDA (X Y TSTREAM REGION WORDSELFLG SELOPERATION PANE EXTENDING) + (* ; "Edited 29-Apr-2024 12:32 by rmk") + (* ; "Edited 20-Apr-2024 20:15 by rmk") (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 2-Jan-2024 12:32 by rmk") (* ; "Edited 26-Dec-2023 08:50 by rmk") @@ -534,18 +549,21 @@ (* ;; "Select the character word, line, or paragraph the mouse is pointing at.") - (LET ((SEL (\TEDIT.SELECT.LINE.SCANNER X Y TEXTOBJ (fetch (TEXTWINDOW PLINES) of PANE) + (LET ((SEL (\TEDIT.XYTOSEL X Y TSTREAM (fetch (TEXTWINDOW PLINES) of PANE) REGION WORDSELFLG SELOPERATION PANE EXTENDING))) (CL:WHEN (AND (type? SELECTION SEL) (GETSEL SEL SET)) (* ;  "He pointed at something real; return that.") (\TEDIT.SET.SEL.LOOKS SEL SELOPERATION) - (\TEDIT.FIXSEL SEL TEXTOBJ PANE) (* ; + (\TEDIT.FIXSEL SEL (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM) + PANE) (* ;  "This PANE is good, fix all the other ones") SEL)]) (\TEDIT.SCAN.LINE - [LAMBDA (TEXTOBJ LINE X Y WORDSELFLG SELOPERATION PANE EXTENDING) + [LAMBDA (TSTREAM LINE X Y WORDSELFLG SELOPERATION PANE EXTENDING) + (* ; "Edited 29-Apr-2024 12:35 by rmk") + (* ; "Edited 21-Apr-2024 23:19 by rmk") (* ; "Edited 15-Mar-2024 19:22 by rmk") (* ; "Edited 27-Jan-2024 23:44 by rmk") (* ; "Edited 26-Jan-2024 21:54 by rmk") @@ -559,8 +577,9 @@ (* ;; "Given that LINE meets the mouse-Y criterion, find the selection picked out by the mouse X coordinate. This may run to the right if the mouse-position is protected.") - (PROG (SCRSEL CHARSLOT CLOOKS CHNO TXB TX SELSLOT SELCHAR SELHERE PASTRIGHT - (THISLINE (FGETTOBJ TEXTOBJ THISLINE))) + (PROG ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + SCRSEL CHARSLOT CLOOKS CHNO TXB TX SELSLOT SELCHAR SELHERE PASTRIGHT THISLINE) + (SETQ THISLINE (FGETTOBJ TEXTOBJ THISLINE)) (CL:UNLESS (EQ LINE (fetch DESC of THISLINE)) (* ;  "Make sure the cache describes this line") (SETQ LINE (\TEDIT.FORMATLINE TEXTOBJ (GETLD LINE LCHAR1) @@ -632,32 +651,34 @@ (* ;; "If the selected piece is SELHERE (presumably in a menu), the selection is specialized in various ways..") (SETQ SCRSEL (FGETTOBJ TEXTOBJ SCRATCHSEL)) - (FSETSEL SCRSEL SELTEXTOBJ TEXTOBJ) + (FSETSEL SCRSEL SELTEXTSTREAM TSTREAM) (FSETSEL SCRSEL SET T) (FSETSEL SCRSEL SELKIND 'CHAR) - (FSETSEL SCRSEL X0 TXB) (* ; - "X and Y values will be reset by \FIXSEL, but we have to track X for word selection and image obj") + (FSETSEL SCRSEL X0 TXB) (* ; "X and Y values will be reset by \TEDIT.FIXSEL, but we have to track X for word selection and image obj") (FSETSEL SCRSEL XLIM TX) (FSETSEL SCRSEL CH# CHNO) - (FSETSEL SCRSEL CHLIM (ADD1 CHNO)) (FSETSEL SCRSEL SELOBJ NIL) - (* ;; "0 makes it a point selection, 1 picks out a single char. Original code produced 0 only for protected text and dummy lines.") + (* ;; "0 makes it a point selection, 1 picks out a single char. Original code produced 0 only for protected text and dummy lines. For copy/delete selections, it's more convenient still to select at least one character, at least until modern one-button swiping is implemented. ") - (FSETSEL SCRSEL DCH (CL:IF (AND (EQ SELOPERATION 'NORMAL) - (NOT (FGETTOBJ TEXTOBJ TXTREADONLY))) - 0 - 1)) + (if (AND (OR WORDSELFLG (NEQ SELOPERATION 'NORMAL) + (FGETTOBJ TEXTOBJ TXTREADONLY)) + (IGREATERP (FGETTOBJ TEXTOBJ TEXTLEN) + 0)) + then (FSETSEL SCRSEL CHLIM (ADD1 CHNO)) + (FSETSEL SCRSEL DCH 1) + else (FSETSEL SCRSEL CHLIM CHNO) + (FSETSEL SCRSEL DCH 0)) (FSETSEL SCRSEL POINT (if (OR SELHERE (AND PASTRIGHT (FGETLD LINE FORCED-END))) then (* ;; "This is coordinated with the point selection in \FIXSEL. If we are past the end of an EOL-line, we want the caret to blink on the left but select and underline the EOL.") 'LEFT - elseif (AND (IGEQ (IDIFFERENCE TX TXB) - 3) - (IGEQ X (FOLDLO (IPLUS TX TXB) - 2))) + elseif [OR PASTRIGHT (AND (IGEQ (IDIFFERENCE TX TXB) + 3) + (IGEQ X (FOLDLO (IPLUS TX TXB) + 2] then (* ;; "To the right of an otherwise-protected insertion, past the middle of a selection that is wide enough (3 points) to discriminate, and not at the end of an EOL-terminated line. ") @@ -763,8 +784,10 @@ then 'RIGHT else 'LEFT]) -(\TEDIT.SELECT.LINE.SCANNER - [LAMBDA (X Y TEXTOBJ LINES REGION WORDSELFLG SELOPERATION PANE EXTENDING) +(\TEDIT.XYTOSEL + [LAMBDA (X Y TSTREAM LINES REGIONTYPE WORDSELFLG SELOPERATION PANE EXTENDING) + (* ; "Edited 29-Apr-2024 12:33 by rmk") + (* ; "Edited 20-Apr-2024 12:53 by rmk") (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 26-Dec-2023 08:53 by rmk") (* ; "Edited 3-Nov-2023 12:00 by rmk") @@ -773,9 +796,13 @@ (* ; "Edited 30-May-2023 14:17 by rmk") (* ; "Edited 27-May-2023 15:18 by rmk") (* ; "Edited 31-May-91 12:26 by jds") + + (* ;; "Sets SCRATCHSEL of TEXTOBJ to the selection picked out by the X-Y coordinates in PANE. The selection may be a point, a word, or a sequence of such things, depending on REGIONTYPE and WORDSELFLG.") + (CL:WHEN (INSIDEP (DSPCLIPPINGREGION NIL PANE) X Y) (* ; "Else, how did we get here? ") - (PROG (LINE SCRSEL PARAFIRSTCHNO PARALASTCHNO) + (PROG [LINE SCRSEL PARAFIRSTCHNO PARALASTCHNO (TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) + of TSTREAM] [SETQ LINE (find L PREV inlines (GETLD LINES NEXTLINE) suchthat (SETQ PREV (FGETLD L PREVLINE)) (ILEQ (FGETLD L YBOT) @@ -787,7 +814,7 @@ (RETURN (OR L PREV] (CL:UNLESS LINE (* ; "Can this happen? Empty?") (RETURN NIL)) - (SELECTQ REGION + (SELECTQ REGIONTYPE ((TEXT PANE) (* ;  "We're in the regular text area, which character?") (CL:WHEN (AND (IGEQ (GETLD LINE LCHARLIM) @@ -799,7 +826,7 @@  "Y is below the last line of the text: force selection past the very end of that line.") (SETQ X (ADD1 (GETLD LINE LXLIM)))) - (RETURN (\TEDIT.SCAN.LINE TEXTOBJ LINE X Y WORDSELFLG SELOPERATION PANE + (RETURN (\TEDIT.SCAN.LINE TSTREAM LINE X Y WORDSELFLG SELOPERATION PANE EXTENDING))) (LINE (* ;  "We're in the line/paragraph region.") @@ -811,13 +838,13 @@ (FSETSEL SCRSEL SET NIL) (RETURN SCRSEL)) - (FSETSEL SCRSEL SELTEXTOBJ TEXTOBJ) + (FSETSEL SCRSEL SELTEXTSTREAM TSTREAM) (FSETSEL SCRSEL SET T) (* ; "Mark it valid.") (FSETSEL SCRSEL SELOBJ NIL) (* ; "Not selecting an object just yet") (* ;; "Get the lines selected in this pane. How does SCRATCHSEL know this?") - (for P inpanes TEXTOBJ as PL1 on (FGETSEL SCRSEL L1) as PLN + [for P inpanes TEXTOBJ as PL1 on (FGETSEL SCRSEL L1) as PLN on (FGETSEL SCRSEL LN) when (EQ P PANE) do (* ;; "A word (middle button?) selection in the line region means the paragraph that contains the selected line. ") @@ -863,12 +890,13 @@ (* ;; "In the line-selection region, we know that the selection's X0 and XLIM are inherited from the LINE. Don't need to fix") (FSETSEL SCRSEL X0 (FGETLD LINE LX1)) - (FSETSEL SCRSEL XLIM (FGETLD LINE LXLIM))) finally (RETURN)) + (FSETSEL SCRSEL XLIM (FGETLD LINE LXLIM] (RETURN SCRSEL)) (SHOULDNT "Unknown text/line-bar region?"))))]) (\TEDIT.SELECT.OBJECT [LAMBDA (TEXTOBJ SEL OBJ LINE X Y TXB SELPANE SELOPERATION WHERE) + (* ; "Edited 24-Apr-2024 09:50 by rmk") (* ; "Edited 15-Mar-2024 19:22 by rmk") (* ; "Edited 24-Jan-2024 11:59 by rmk") (* ; "Edited 14-Oct-2023 11:38 by rmk") @@ -915,7 +943,7 @@ OBJ DS SEL (IDIFFERENCE X TXB) (IDIFFERENCE Y (GETLD LINE YBASE)) SELPANE - (FGETTOBJ TEXTOBJ STREAMHINT) + (fetch (TEXTWINDOW WTEXTSTREAM) of SELPANE) WHERE SELOPERATION)))) (* ;; "The clipping region is now restored.") @@ -937,7 +965,9 @@ (DEFINEQ (\TEDIT.FIXSEL - [LAMBDA (SEL TEXTOBJ AVOIDPANE ONLYPANE) (* ; "Edited 20-Mar-2024 10:55 by rmk") + [LAMBDA (SEL TEXTOBJ AVOIDPANE ONLYPANE) (* ; "Edited 29-Apr-2024 12:56 by rmk") + (* ; "Edited 26-Apr-2024 00:23 by rmk") + (* ; "Edited 20-Mar-2024 10:55 by rmk") (* ; "Edited 2-Mar-2024 23:38 by rmk") (* ; "Edited 16-Dec-2023 11:44 by rmk") (* ; "Edited 3-Nov-2023 12:01 by rmk") @@ -982,7 +1012,7 @@ (\DTEST SEL 'SELECTION) (CL:UNLESS TEXTOBJ - (SETQ TEXTOBJ (GETSEL SEL SELTEXTOBJ))) + (SETQ TEXTOBJ (TEXTOBJ SEL))) (TEXTOBJ! TEXTOBJ) (CL:WHEN (AND (FGETTOBJ TEXTOBJ \WINDOW) (FGETSEL SEL SET) @@ -1078,11 +1108,7 @@ (AND (IGREATERP CH# (TEXTLEN TEXTOBJ)) (GETLD (FGETLD PSTARTLINE PREVLINE) FORCED-END] - (FSETSEL SEL X0 X0))) - - (* ;; - "IMIN to use the last character of PENDLINE if it is not the last line of the selection ") - + (FSETSEL SEL X0 X0))) (CL:UNLESS XLIM (CL:WHEN (WITHINLINEP LASTCHNO PENDLINE) (SETQ XLIM (\TEDIT.CHTOX TEXTOBJ PENDLINE LASTCHNO T)) @@ -1239,7 +1265,8 @@ (DEFINEQ (\TEDIT.SHOWSEL - [LAMBDA (SEL ON ONLYPANE TEXTOBJ) (* ; "Edited 20-Mar-2024 10:56 by rmk") + [LAMBDA (SEL ON ONLYPANE TEXTOBJ) (* ; "Edited 29-Apr-2024 13:01 by rmk") + (* ; "Edited 20-Mar-2024 10:56 by rmk") (* ; "Edited 9-Mar-2024 12:01 by rmk") (* ; "Edited 18-Feb-2024 15:24 by rmk") (* ; "Edited 24-Jan-2024 08:07 by rmk") @@ -1254,7 +1281,7 @@ (* ;; "The selection's lines [L1...LN] are the subset of lines selected globally by CH# to CHLIM that are visible within each pane.") (CL:WHEN (FGETSEL SEL SET) (* ; "Nothing to do if not set") - (PROG [(TEXTOBJ (TEXTOBJ! (OR TEXTOBJ (FGETSEL SEL SELTEXTOBJ] + (PROG [(TEXTOBJ (TEXTOBJ! (OR TEXTOBJ (TEXTOBJ SEL] (* ;; "This operation only makes sense if there is at least one pane to highlight in, and we are allowed to update.") @@ -1472,7 +1499,8 @@ OLDSEL]) (\TEDIT.UPDATE.SEL - [LAMBDA (SEL CH# DCH POINT DONTFIX) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (SEL CH# DCH POINT DONTFIX) (* ; "Edited 29-Apr-2024 13:28 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 5-Mar-2024 14:45 by rmk") (* ; "Edited 25-Feb-2024 17:30 by rmk") (* ; "Edited 16-Feb-2024 23:49 by rmk") @@ -1506,44 +1534,61 @@ (* ;; "Restrict CH# to [1..TEXTLEN], using POINT to designate below or above") - (LET ((TEXTLEN (TEXTLEN (GETSEL SEL SELTEXTOBJ))) - CHLIM) - (CL:WHEN (ILESSP CH# 1) - (SETQ CH# 1) - (SETQ POINT 'LEFT)) - (CL:WHEN (IGREATERP CH# TEXTLEN) - (SETQ CH# (ADD1 TEXTLEN)) - (SETQ POINT 'LEFT)) - - (* ;; "POINT=LEFT means before CH#, POINT=RIGHT means before CHLIM. If DCH=0, caret is between (and CHLIM - CH# is not DCH=0).") - - [SETQ CHLIM (CL:IF (EQ DCH 0) - (ADD1 CH#) - (IMIN (IPLUS CH# DCH) - (ADD1 TEXTLEN)))] - (SETSEL SEL CH# CH#) - (FSETSEL SEL DCH DCH) - (FSETSEL SEL CHLIM CHLIM) - (FSETSEL SEL POINT POINT) - (FSETSEL SEL SET T) (* ; "") - (FSETSEL SEL SELOBJ NIL) (* ; + (LET* ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of (GETSEL SEL SELTEXTSTREAM))) + (TEXTLEN (TEXTLEN TEXTOBJ)) + CHLIM) + (CL:WHEN (ILESSP CH# 1) + (SETQ CH# 1) + (SETQ POINT 'LEFT)) + (CL:WHEN (IGREATERP CH# TEXTLEN) + (SETQ CH# (ADD1 TEXTLEN)) + (SETQ POINT 'LEFT)) + + (* ;; "POINT=LEFT means before CH#, POINT=RIGHT means before CHLIM. If DCH=0, caret is between (and CHLIM - CH# is not DCH=0).") + + [SETQ CHLIM (CL:IF (EQ DCH 0) + (ADD1 CH#) + (IMIN (IPLUS CH# DCH) + (ADD1 TEXTLEN)))] + (SETSEL SEL CH# CH#) + (FSETSEL SEL DCH DCH) + (FSETSEL SEL CHLIM CHLIM) + (FSETSEL SEL POINT POINT) + (FSETSEL SEL SET T) (* ; "") + (FSETSEL SEL SELOBJ NIL) (* ;  "If we are moving around, we are moving away from any old object") - (CL:UNLESS DONTFIX (\TEDIT.FIXSEL SEL)) - SEL]) + (CL:UNLESS DONTFIX (\TEDIT.FIXSEL SEL TEXTOBJ)) + SEL]) + +(\TEDIT.CARETLINE + [LAMBDA (SEL PANE TEXTOBJ) (* ; "Edited 24-Apr-2024 11:33 by rmk") + + (* ;; + "Returns the line in PANE that contains SEL's caret (NIL if the caret isn't showing in PANE).") + + (CL:WHEN (GETSEL SEL SET) + (SELECTQ (GETSEL SEL POINT) + (LEFT (\TEDIT.SEL.L1 SEL PANE TEXTOBJ)) + (RIGHT (\TEDIT.SEL.LN SEL PANE TEXTOBJ)) + (SHOULDNT)))]) (\TEDIT.SEL.L1 - [LAMBDA (SEL PANE TEXTOBJ) (* ; "Edited 16-Nov-2023 23:43 by rmk") + [LAMBDA (SEL PANE TEXTOBJ) (* ; "Edited 24-Apr-2024 08:34 by rmk") + (* ; "Edited 8-Apr-2024 23:42 by rmk") + (* ; "Edited 16-Nov-2023 23:43 by rmk") (* ;; "Returns L1 for PANE in SEL") - (for P inpanes (PROGN TEXTOBJ) as L in (GETSEL SEL L1) when (EQ P PANE) do (RETURN L]) + (for L in (GETSEL SEL L1) as P inpanes (PROGN TEXTOBJ) when (EQ P PANE) do (RETURN L]) (\TEDIT.SEL.LN - [LAMBDA (SEL PANE TEXTOBJ) (* ; "Edited 16-Nov-2023 23:43 by rmk") + [LAMBDA (SEL PANE TEXTOBJ) (* ; "Edited 24-Apr-2024 08:34 by rmk") + (* ; "Edited 8-Apr-2024 23:41 by rmk") + (* ; "Edited 16-Nov-2023 23:43 by rmk") (* ;; "Returns LN for PANE in SEL") - (for P inpanes (PROGN TEXTOBJ) as L in (GETSEL SEL LN) when (EQ P PANE) do (RETURN L]) + (for L in (GETSEL SEL LN) as P inpanes (PROGN TEXTOBJ) when (EQ P PANE) do (RETURN L]) (\TEDIT.SEL.DELETEDCHARS [LAMBDA (SELTOFIX TARGETSEL) (* ; "Edited 20-Feb-2024 17:31 by rmk") @@ -1580,7 +1625,8 @@ (DEFINEQ (\TEDIT.COPYSEL - [LAMBDA (FROM TO) (* ; "Edited 24-Jan-2024 09:37 by rmk") + [LAMBDA (FROM TO) (* ; "Edited 29-Apr-2024 12:35 by rmk") + (* ; "Edited 24-Jan-2024 09:37 by rmk") (* ; "Edited 25-Oct-2023 22:24 by rmk") (* ; "Edited 22-Oct-2023 23:05 by rmk") (* ; "Edited 23-Apr-2023 12:16 by rmk") @@ -1598,7 +1644,7 @@ (FSETSEL TO LN (COPY (FGETSEL FROM LN))) (FSETSEL TO POINT (FGETSEL FROM POINT)) (FSETSEL TO SET (FGETSEL FROM SET)) - (FSETSEL TO SELTEXTOBJ (FGETSEL FROM SELTEXTOBJ)) + (FSETSEL TO SELTEXTSTREAM (FGETSEL FROM SELTEXTSTREAM)) (FSETSEL TO SELKIND (FGETSEL FROM SELKIND)) (FSETSEL TO HOW (FGETSEL FROM HOW)) (FSETSEL TO HOWHEIGHT (FGETSEL FROM HOWHEIGHT)) @@ -1609,7 +1655,8 @@ TO]) (\TEDIT.SEL.CHANGED? - [LAMBDA (NEWSEL OLDSEL OLDSELOP NEWSELOP) (* ; "Edited 13-Jun-2023 21:50 by rmk") + [LAMBDA (NEWSEL OLDSEL OLDSELOP NEWSELOP) (* ; "Edited 29-Apr-2024 13:00 by rmk") + (* ; "Edited 13-Jun-2023 21:50 by rmk") (* ; "Edited 23-May-2023 12:22 by rmk") (* ; "Edited 9-Apr-2023 23:15 by rmk") (* ; "Edited 30-May-91 23:01 by jds") @@ -1624,8 +1671,8 @@ (GETSEL OLDSEL CHLIM)) (IEQP (GETSEL NEWSEL DCH) (GETSEL OLDSEL DCH)) - (EQ (GETSEL NEWSEL SELTEXTOBJ) - (GETSEL OLDSEL SELTEXTOBJ)) + (EQ (GETSEL NEWSEL SELTEXTSTREAM) + (GETSEL OLDSEL SELTEXTSTREAM)) (EQ (GETSEL NEWSEL POINT) (GETSEL OLDSEL POINT)) (EQ (GETSEL NEWSEL HOW) @@ -1642,7 +1689,8 @@ (DEFINEQ (\TEDIT.SELPIECES - [LAMBDA (SEL/FIRSTCHAR LASTCHAR TEXTOBJ) (* ; "Edited 17-Mar-2024 00:24 by rmk") + [LAMBDA (SEL/FIRSTCHAR LASTCHAR TEXTOBJ) (* ; "Edited 29-Apr-2024 13:13 by rmk") + (* ; "Edited 17-Mar-2024 00:24 by rmk") (* ; "Edited 4-Mar-2024 22:47 by rmk") (* ; "Edited 12-Dec-2023 12:06 by rmk") (* ; "Edited 11-Dec-2023 10:05 by rmk") @@ -1670,7 +1718,8 @@ (LET (FIRSTCHAR LEFTPC RIGHTPC) (if (type? SELECTION SEL/FIRSTCHAR) - then (SETQ TEXTOBJ (FGETSEL SEL/FIRSTCHAR SELTEXTOBJ)) + then (SETQ TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of (FGETSEL SEL/FIRSTCHAR SELTEXTSTREAM)) + ) (SETQ FIRSTCHAR (FGETSEL SEL/FIRSTCHAR CH#)) [SETQ LASTCHAR (CL:IF (EQ 0 (FGETSEL SEL/FIRSTCHAR DCH)) FIRSTCHAR @@ -1747,43 +1796,37 @@ SPLASTCHAR _ (ffetch (SELPIECES SPLASTCHAR) of SP2]) (\TEDIT.SELPIECES.CHARTRANSFORM - [LAMBDA (SELPIECES CHARFN OBJECTSTOO TEXTOBJ) (* ; "Edited 3-Mar-2024 12:28 by rmk") + [LAMBDA (SELPIECES CHARFN OBJECTSTOO TEXTOBJ) (* ; "Edited 28-Apr-2024 08:52 by rmk") + (* ; "Edited 3-Mar-2024 12:28 by rmk") (* ; "Edited 24-May-2023 13:04 by rmk") (* ;; "This transforms the characters in SELPIECES according to CHARFN, skipping image objects unless OBJECTSTOO. The purpose is to allow for character transformations (e.g. case switching) without depending on strings (TEDIT.SELAS.STRING) and character insertion (\INSERTCH) as intermediaries. Strings can't hold image objects.") (* ;; - "This smashes the pieces, use crosscopy \SELPIECES.COPY first to protect the document pieces.") + "This smashes the pieces, use crosscopy \TEDIT.SELPIECES.COPY first to protect the document pieces.") (for PC PCONTENTS inselpieces SELPIECES do (SETQ PCONTENTS (PCONTENTS PC)) (SELECTC (PTYPE PC) (STRING.PTYPES (for I CH (STR _ PCONTENTS) from 1 while (SETQ CH (NTHCHARCODE STR I)) do (RPLCHARCODE STR I (APPLY* CHARFN CH TEXTOBJ)))) - (FILE.PTYPES (SETFILEPTR PCONTENTS (PFPOS PC)) - [if (AND NIL (\IOMODEP PCONTENTS 'BOTH T)) - then - - (* ;; "Not clear whether \TEDIT.COPYPIECeS has set things up to allow us to actually smash the underlying stream. So for now, copy into string space.") - - (for I from 1 to (PLEN PC) - do (\OUTCHAR PCONTENTS (APPLY* CHARFN (\PEEKCCODE PCONTENTS T) - TEXTOBJ))) - else - - (* ;; "This assumes that no file piece has a PLEN greater than \MaxArrayLen characters. We rely on the piece-table reader and writer to guarantee this. If not, ALLOCSTRING will cause an error.") - - (LET ((FATP (NEQ THINFILE.PTYPE (PTYPE PC))) - STR) - (SETQ STR (ALLOCSTRING (PLEN PC) - NIL NIL FATP)) - (for I from 1 to (PLEN PC) - do (RPLCHARCODE STR I (APPLY* CHARFN (\INCCODE PCONTENTS) - TEXTOBJ))) - (FSETPC PC PCONTENTS STR) - (FSETPC PC PTYPE (CL:IF FATP - FATSTRING.PTYPE - THINSTRING.PTYPE)]) + (FILE.PTYPES [LET [(STR (ALLOCSTRING (PLEN PC] + + (* ;; "This assumes that no file piece has a PLEN greater than \MaxArrayLen characters. We rely on the piece-table reader and writer to guarantee this. If not, ALLOCSTRING will cause an error.") + + [for I from 1 to (PLEN PC) + do (RPLCHARCODE STR I (APPLY* CHARFN (\TEDIT.PIECE.NTHCHARCODE + TEXTOBJ PC I] + (if (fetch (STRINGP FATSTRINGP) of STR) + then (FSETPC PC PTYPE FATSTRING.PTYPE) + (FSETPC PC PBYTESPERCHAR 2) + (FSETPC PC PBINABLE NIL) + else (FSETPC PC PTYPE THINSTRING.PTYPE) + (FSETPC PC PBYTESPERCHAR 1) + (FSETPC PC PBINABLE T)) + (FSETPC PC PCONTENTS STR) + (FSETPC PC PBYTELEN (ITIMES (PBYTESPERCHAR PC) + (PLEN PC]) (OBJECT.PTYPE (CL:WHEN OBJECTSTOO (FSETPC PC PCONTENTS (APPLY* CHARFN PCONTENTS TEXTOBJ)))) (SUBSTREAM.PTYPE @@ -1911,9 +1954,12 @@ (DEFINEQ (TEDIT.XYTOCH - [LAMBDA (X Y PANE) (* ; "Edited 20-Mar-2024 14:32 by rmk") + [LAMBDA (X Y PANE) (* ; "Edited 20-Apr-2024 13:00 by rmk") + (* ; "Edited 20-Mar-2024 14:32 by rmk") + + (* ;; "Returns the character number of the character at coordinates X and Y in PANE. ") - (* ;; "Returns the character number of the character at coordinates X and Y in PANE.") + (* ;; "The references to the WLEFT... properties of the TEXTOBJ may not be consistent with the notion of multiple panes. Those fields are set in \TEDIT.MINIMAL.WINDOW.SETUP to default as the values for the pane's clipping region. But there is also the possibility of the caller passing a property to confine to a subregion of the pane. Presumably that makes sense only for the primary window, the logic isn't yet there to propagate that confinement down to independently scrollable subregions.") (LET ((TEXTOBJ (TEXTOBJ PANE)) SEL) @@ -1928,21 +1974,74 @@ (TOP (SUB1 (GETTOBJ TEXTOBJ WTOP))) (BOTTOM (GETTOBJ TEXTOBJ WBOTTOM)) Y)) - (SETQ SEL (\TEDIT.SELECT.LINE.SCANNER X Y TEXTOBJ (fetch (TEXTWINDOW PLINES) of PANE) + (SETQ SEL (\TEDIT.XYTOSEL X Y TEXTOBJ (fetch (TEXTWINDOW PLINES) of PANE) 'TEXT NIL NIL PANE)) (CL:WHEN (AND (type? SELECTION SEL) (GETSEL SEL SET)) (* ;  "He pointed at something real; return that.") (GETSEL SEL CH#))]) +(TEDIT.SELPROP + [LAMBDA X (* ; "Edited 29-Apr-2024 08:31 by rmk") + (* ; "Edited 6-Apr-2024 20:33 by rmk") + (* ; "Edited 5-Apr-2024 12:29 by rmk") + (* ; "Edited 2-Apr-2024 13:27 by rmk") + + (* ;; "Gets and sets the properties of a text stream, without regard to how it may or may not be connected to a textstream. A selection from TEDIT.GETSEL is a copy, TEDIT.SETSEL is needed to install it.") + + (CL:UNLESS (IGEQ X 2) + (\ILLEGAL.ARG X)) + (LET ([SEL (if (type? SELECTION (ARG X 1)) + then (ARG X 1) + else (\DTEST (GETTOBJ (TEXTOBJ (ARG X 1)) + SEL) + 'SELECTION] + (PROP (ARG X 2)) + NEWVALUE) + (CL:UNLESS (FGETSEL SEL SET) + (ERROR "SELECTION NOT SET" SEL)) + (PROG1 (SELECTQ PROP + (CH# (FGETSEL SEL CH#)) + (CHLIM (FGETSEL SEL CHLIM)) + ((LENGTH DCH) + (FGETSEL SEL DCH)) + (POINT (FGETSEL SEL POINT)) + ((KIND SELKIND) + (FGETSEL SEL SELKIND)) + (CHLAST (if (EQ 0 (FGETSEL SEL DCH)) + then (FGETSEL SEL CH#) + else (SUB1 (FGETSEL SEL CHLIM)))) + (POINTCH# (TEDIT.GETPOINT NIL SEL)) + (\ILLEGAL.ARG PROP)) + (CL:WHEN (IGREATERP X 2) + (SETQ NEWVALUE (ARG X 3)) + (SELECTQ PROP + (CH# (FSETSEL SEL CH# NEWVALUE)) + ((LENGTH DCH) + (\TEDIT.UPDATE.SEL SEL NIL NEWVALUE NIL T)) + (POINT (FSETSEL SEL POINT (OR [CAR (MEMB NEWVALUE '(LEFT RIGHT] + (\ILLEGAL.ARG NEWVALUE)))) + ((KIND SELKIND) + (FSETSEL SEL SELKIND (OR [CAR (MEMB NEWVALUE + '(CHAR WORD LINE PARA VOLATILE] + (\ILLEGAL.ARG NEWVALUE)))) + (CHLAST (\TEDIT.UPDATE.SEL SEL NIL (IDIFFERENCE (ADD1 NEWVALUE) + (FGETSEL SEL CH#)) + NIL T)) + (CHLIM (\TEDIT.UPDATE.SEL SEL NIL (IDIFFERENCE NEWVALUE (FGETSEL SEL CH#)) + NIL T)) + (\ILLEGAL.ARG PROP))))]) + (TEDIT.GETPOINT - [LAMBDA (STREAM SEL) (* ; "Edited 5-Jun-2023 15:30 by rmk") + [LAMBDA (TSTREAM SEL) (* ; "Edited 29-Apr-2024 10:49 by rmk") + (* ; "Edited 5-Jun-2023 15:30 by rmk") (* ; "Edited 30-May-91 23:03 by jds") - (* ;; "Given a selection, tell the CHNO that type-in would be inserted in front of. IF SEL is given, use it to decide. Otherwise, use STREAM's current selection. SEL can also be a character number, which is simply returned.") + (* ;; "Given a selection, tell the CHNO that type-in would be inserted in front of. IF SEL is given, use it to decide. Otherwise, use TSTREAM's current selection. SEL can also be a character number, which is simply returned.") (CL:UNLESS SEL - (SETQ SEL (TEXTSEL (TEXTOBJ STREAM)))) + (SETQ SEL (FGETTOBJ (TEXTOBJ TSTREAM) + SEL))) (if (NOT (type? SELECTION SEL)) then SEL elseif (FGETSEL SEL SET) @@ -1951,7 +2050,11 @@ (SELECTQ (FGETSEL SEL POINT) (LEFT (FGETSEL SEL CH#)) - (RIGHT (FGETSEL SEL CHLIM)) + (RIGHT (* ; + "CHLIM is probaby not set appropriately for a RIGHT point selection") + (CL:IF (ZEROP (FGETSEL SEL DCH)) + (ADD1 (FGETSEL SEL CH#)) + (FGETSEL SEL CHLIM))) (SHOULDNT "Selection's POINT is neither RIGHT nor LEFT."]) (TEDIT.GETSEL @@ -1974,21 +2077,22 @@ ONFLG _ NIL SET _ T]) (TEDIT.MAKESEL - [LAMBDA (STREAM CH# LEN POINT) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (TSTREAM CH# LEN POINT) (* ; "Edited 29-Apr-2024 12:37 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 9-Mar-2024 12:03 by rmk") (* ; "Edited 16-Jan-2024 14:52 by rmk") (* ; "Edited 23-May-2023 12:39 by rmk") (* ; "Edited 18-Apr-2023 23:53 by rmk") (* ; "Edited 21-Oct-2022 18:37 by rmk") (* ; "Edited 30-May-91 23:03 by jds") - (LET* ((TEXTOBJ (TEXTOBJ STREAM)) + (LET* ((TEXTOBJ (TEXTOBJ TSTREAM)) (SEL (FGETTOBJ TEXTOBJ SEL))) (\TEDIT.SHOWSEL SEL NIL NIL TEXTOBJ) (FSETSEL SEL CH# CH#) (FSETSEL SEL CHLIM (IMAX CH# (IPLUS CH# LEN))) (FSETSEL SEL DCH LEN) (FSETSEL SEL POINT (OR POINT 'LEFT)) - (FSETSEL SEL SELTEXTOBJ TEXTOBJ) + (FSETSEL SEL SELTEXTSTREAM TSTREAM) (FSETSEL SEL SET T) (\TEDIT.FIXSEL SEL TEXTOBJ) (\TEDIT.SHOWSEL SEL T NIL TEXTOBJ]) @@ -2010,7 +2114,8 @@ (FGETSEL SEL DCH))]) (TEDIT.SET.SEL.LOOKS - [LAMBDA (SEL OPERATION) (* ; "Edited 15-Mar-2024 13:34 by rmk") + [LAMBDA (SEL OPERATION) (* ; "Edited 29-Apr-2024 13:03 by rmk") + (* ; "Edited 15-Mar-2024 13:34 by rmk") (* ; "Edited 9-Mar-2024 12:04 by rmk") (* ; "Edited 12-Oct-2023 22:32 by rmk") (* ; "Edited 10-Jun-2023 13:35 by rmk") @@ -2020,14 +2125,16 @@ (* ;; "Set what the selection should be displayed like, given what it's for (NORMAL, COPY, MOVE, etc.). This is a documented entry.") - (LET ((WASON (GETSEL SEL ONFLG))) - (\TEDIT.SHOWSEL SEL NIL NIL (FGETSEL SEL SELTEXTOBJ)) + (LET ((WASON (GETSEL SEL ONFLG)) + (TEXTOBJ (TEXTOBJ SEL))) + (\TEDIT.SHOWSEL SEL NIL NIL TEXTOBJ) (\TEDIT.SET.SEL.LOOKS SEL OPERATION) - (\TEDIT.SHOWSEL SEL WASON NIL (FGETSEL SEL SELTEXTOBJ)) + (\TEDIT.SHOWSEL SEL WASON NIL TEXTOBJ) SEL]) (TEDIT.SETSEL - [LAMBDA (STREAM CH# LEN POINT PENDINGDELFLG LEAVECARETLOOKS OPERATION) + [LAMBDA (TSTREAM CH# LEN POINT PENDINGDELFLG LEAVECARETLOOKS OPERATION) + (* ; "Edited 29-Apr-2024 12:39 by rmk") (* ; "Edited 17-Mar-2024 00:27 by rmk") (* ; "Edited 15-Mar-2024 13:38 by rmk") (* ; "Edited 9-Mar-2024 12:04 by rmk") @@ -2040,7 +2147,8 @@ (* ;; "Given a text stream or textobj, and a piece of text to select, set the internal selection, and return it.") - (LET ((TEXTOBJ (TEXTOBJ STREAM)) + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (LET ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) SEL TEXTLEN PC) (SETQ SEL (TEXTSEL TEXTOBJ)) (SETQ TEXTLEN (TEXTLEN TEXTOBJ)) @@ -2080,7 +2188,7 @@ TEXTOBJ)) (CL:WHEN (EQ OBJECT.PTYPE (PTYPE PC)) (PCONTENTS PC)))] - (SETSEL SEL SELTEXTOBJ TEXTOBJ) (* ; + (SETSEL SEL SELTEXTSTREAM TSTREAM) (* ;  "Link it back to the associated textobj") [COND [PENDINGDELFLG (* ; @@ -2103,7 +2211,8 @@ SEL]) (TEDIT.SHOWSEL - [LAMBDA (STREAM ONFLG SEL) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (TSTREAM ONFLG SEL) (* ; "Edited 29-Apr-2024 12:27 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 9-Mar-2024 12:06 by rmk") (* ; "Edited 3-May-2023 09:23 by rmk") (* ; "Edited 18-Apr-2023 23:54 by rmk") @@ -2111,11 +2220,11 @@ (* ;; "He's giving us a selection to highlight and to connect it to this textobj.")  (* ; "Edited 30-May-91 23:04 by jds") - (LET ((TEXTOBJ (TEXTOBJ STREAM))) + (LET ((TEXTOBJ (TEXTOBJ TSTREAM))) (CL:UNLESS SEL (SETQ SEL (FGETTOBJ TEXTOBJ SEL))) (CL:WHEN SEL - (SETSEL SEL SELTEXTOBJ TEXTOBJ) + (SETSEL SEL SELTEXTSTREAM TSTREAM) (\TEDIT.FIXSEL SEL TEXTOBJ) (\TEDIT.SHOWSEL SEL ONFLG NIL TEXTOBJ))]) @@ -2149,7 +2258,8 @@ RESULT]) (TEDIT.SEL.AS.SEXPR - [LAMBDA (TSTREAM SEL RDTBL FLG) (* ; "Edited 17-Mar-2024 12:05 by rmk") + [LAMBDA (TSTREAM SEL RDTBL FLG) (* ; "Edited 29-Apr-2024 10:49 by rmk") + (* ; "Edited 17-Mar-2024 12:05 by rmk") (* ; "Edited 25-Dec-2023 18:52 by rmk") (* ; "Edited 9-Jul-2023 09:37 by rmk") (* ; "Edited 22-Apr-93 16:44 by jds") @@ -2159,8 +2269,7 @@ (* ;; "This backs up to the beginning of the word that precedes the caret, then READ's from there. A little tricky to point to the paren in front of an atom, to get a complete list structure and not just the initial atom.") (SETQ TSTREAM (TEXTSTREAM TSTREAM)) - [\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 (\TEDIT.WORD.FIRST (TEXTOBJ TSTREAM) - (TEDIT.GETPOINT TSTREAM SEL) + [\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 (\TEDIT.WORD.FIRST TSTREAM (TEDIT.GETPOINT TSTREAM SEL) (TEDIT.ATOMBOUND.READTABLE (OR RDTBL *READTABLE*] (READ TSTREAM RDTBL FLG]) @@ -2170,25 +2279,34 @@ (TEDIT.SETSEL TEXTSTREAM 0 (ADD1 (TEXTLEN (TEXTOBJ TEXTSTREAM))) 'LEFT]) ) +(DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS + +(ADDTOVAR NLAMA ) + +(ADDTOVAR NLAML ) + +(ADDTOVAR LAMA TEDIT.SELPROP) +) (DECLARE%: DONTCOPY - (FILEMAP (NIL (13044 14909 (\TEDIT.SELECTION.DEFPRINT 13054 . 14907)) (14910 16170 ( -\TEDIT.SET.GLOBAL.SELECTIONS 14920 . 16168)) (16207 22010 (\TEDIT.SELECTED.PIECES 16217 . 17725) ( -\TEDIT.FIND.PROTECTED.END 17727 . 19331) (\TEDIT.FIND.PROTECTED.START 19333 . 21345) ( -\TEDIT.WORD.BOUND 21347 . 22008)) (22144 54189 (\TEDIT.EXTEND.SEL 22154 . 29251) (\TEDIT.SELECT 29253 - . 30744) (\TEDIT.SCAN.LINE 30746 . 38862) (\TEDIT.SCAN.LINE.WORD 38864 . 42984) ( -\TEDIT.SELECT.LINE.SCANNER 42986 . 50150) (\TEDIT.SELECT.OBJECT 50152 . 54187)) (54190 69409 ( -\TEDIT.FIXSEL 54200 . 64830) (\TEDIT.CHTOX 64832 . 67934) (\TEDIT.COLLECTSELS 67936 . 69089) ( -\TEDIT.SELECTION.UNSET 69091 . 69407)) (69410 72578 (\TEDIT.RESET.EXTEND.PENDING.DELETE 69420 . 70286) - (\TEDIT.SET.SEL.LOOKS 70288 . 72576)) (72579 94114 (\TEDIT.SHOWSEL 72589 . 75959) ( -\TEDIT.SHOWSEL.HILIGHT 75961 . 79474) (\TEDIT.UPDATE.SHOWSEL 79476 . 85910) (\TEDIT.REFRESH.SHOWSEL -85912 . 88414) (\TEDIT.UPDATE.SEL 88416 . 91653) (\TEDIT.SEL.L1 91655 . 91943) (\TEDIT.SEL.LN 91945 . -92233) (\TEDIT.SEL.DELETEDCHARS 92235 . 94112)) (94115 97209 (\TEDIT.COPYSEL 94125 . 95819) ( -\TEDIT.SEL.CHANGED? 95821 . 97207)) (97237 114256 (\TEDIT.SELPIECES 97247 . 100358) ( -\TEDIT.SELPIECES.COPY 100360 . 102235) (\TEDIT.SELPIECES.CONCAT 102237 . 104116) ( -\TEDIT.SELPIECES.CHARTRANSFORM 104118 . 107144) (\TEDIT.SELPIECES.FROM.STRING 107146 . 112169) ( -\TEDIT.SELPIECES.TO.STRING 112171 . 114254)) (114309 130569 (TEDIT.XYTOCH 114319 . 115470) ( -TEDIT.GETPOINT 115472 . 116421) (TEDIT.GETSEL 116423 . 116743) (TEDIT.GETSEL.PARA 116745 . 117694) ( -TEDIT.MAKESEL 117696 . 118938) (TEDIT.SCANSEL 118940 . 119888) (TEDIT.SET.SEL.LOOKS 119890 . 121059) ( -TEDIT.SETSEL 121061 . 126369) (TEDIT.SHOWSEL 126371 . 127416) (TEDIT.SEL.AS.STRING 127418 . 129120) ( -TEDIT.SEL.AS.SEXPR 129122 . 130235) (TEDIT.SELECTALL 130237 . 130567))))) + (FILEMAP (NIL (13679 15623 (\TEDIT.SELECTION.DEFPRINT 13689 . 15621)) (15624 16884 ( +\TEDIT.SET.GLOBAL.SELECTIONS 15634 . 16882)) (16921 22724 (\TEDIT.SELECTED.PIECES 16931 . 18439) ( +\TEDIT.FIND.PROTECTED.END 18441 . 20045) (\TEDIT.FIND.PROTECTED.START 20047 . 22059) ( +\TEDIT.WORD.BOUND 22061 . 22722)) (22858 56670 (\TEDIT.EXTEND.SEL 22868 . 30129) (\TEDIT.SELECT 30131 + . 31908) (\TEDIT.SCAN.LINE 31910 . 40663) (\TEDIT.SCAN.LINE.WORD 40665 . 44785) (\TEDIT.XYTOSEL 44787 + . 52500) (\TEDIT.SELECT.OBJECT 52502 . 56668)) (56671 71956 (\TEDIT.FIXSEL 56681 . 67377) ( +\TEDIT.CHTOX 67379 . 70481) (\TEDIT.COLLECTSELS 70483 . 71636) (\TEDIT.SELECTION.UNSET 71638 . 71954)) + (71957 75125 (\TEDIT.RESET.EXTEND.PENDING.DELETE 71967 . 72833) (\TEDIT.SET.SEL.LOOKS 72835 . 75123)) + (75126 97862 (\TEDIT.SHOWSEL 75136 . 78604) (\TEDIT.SHOWSEL.HILIGHT 78606 . 82119) ( +\TEDIT.UPDATE.SHOWSEL 82121 . 88555) (\TEDIT.REFRESH.SHOWSEL 88557 . 91059) (\TEDIT.UPDATE.SEL 91061 + . 94506) (\TEDIT.CARETLINE 94508 . 94965) (\TEDIT.SEL.L1 94967 . 95473) (\TEDIT.SEL.LN 95475 . 95981) + (\TEDIT.SEL.DELETEDCHARS 95983 . 97860)) (97863 101187 (\TEDIT.COPYSEL 97873 . 99682) ( +\TEDIT.SEL.CHANGED? 99684 . 101185)) (101215 118064 (\TEDIT.SELPIECES 101225 . 104508) ( +\TEDIT.SELPIECES.COPY 104510 . 106385) (\TEDIT.SELPIECES.CONCAT 106387 . 108266) ( +\TEDIT.SELPIECES.CHARTRANSFORM 108268 . 110952) (\TEDIT.SELPIECES.FROM.STRING 110954 . 115977) ( +\TEDIT.SELPIECES.TO.STRING 115979 . 118062)) (118117 138842 (TEDIT.XYTOCH 118127 . 119884) ( +TEDIT.SELPROP 119886 . 122731) (TEDIT.GETPOINT 122733 . 124116) (TEDIT.GETSEL 124118 . 124438) ( +TEDIT.GETSEL.PARA 124440 . 125389) (TEDIT.MAKESEL 125391 . 126746) (TEDIT.SCANSEL 126748 . 127696) ( +TEDIT.SET.SEL.LOOKS 127698 . 128976) (TEDIT.SETSEL 128978 . 134478) (TEDIT.SHOWSEL 134480 . 135638) ( +TEDIT.SEL.AS.STRING 135640 . 137342) (TEDIT.SEL.AS.SEXPR 137344 . 138508) (TEDIT.SELECTALL 138510 . +138840))))) STOP diff --git a/library/tedit/TEDIT-SELECTION.LCOM b/library/tedit/TEDIT-SELECTION.LCOM index e1c7e1c3f8df5978cee5efbb05387cd59f268bc1..398e5616964062fcae8a4f835ebc752a5d3bf522 100644 GIT binary patch delta 7095 zcmaJ`e{37qeLs@2EYmVY$tQ+pW%-qHY-x#P-W@5Cv|IB;o^(eYc??NeQkFoLEiaO( z*qQ4l9omdb+xe=fzW&_vYwK55$n|R^N@6I_e*p)^sIXR%8r8 z_DJ3t$bl995KHOjdPK@F?Zj3Q1WT`DUVG-IwZMjP(i zDIpz;r2|58-#L0yG4rpy&-8A0ahx}^=I8Kd4*Gtgh$L$ivvQRP6O%+YvP4M4Tc&uD zU?LR zD~V6IW+F|ttYVV(B$%u{1rcKtB>GYm))a}Jp-&M=#WM*zdkP5>JrBdAM53Rsq*0oP zk?3cyedfwdl;bEb;R)cg<}tJ$i;|SsIDDY1=WvO{+}X^)5mK*Ifx-gOh)5U;G$N2i zRAXdelz9HWkK?+t-E<3^VfL7ED*b;KP@CSRfvY=>-!cXc__mH`qUIvs0`z8{|gf6Ozjdmk04g%QUSm&;yGLF#@>H>A7MR=V?CKcib~! zUhg~Z$Kld$;6IFE^H$$M|HOoC5=7JLd!#PlJRG9gKqr$i^7QmmO4%p@VG@wSMvyQ^ zS({O-M4U`GgNiAlE7P!ug8L5sfSH5|w;;qj;FwB~5%05*#5b(vm=` zs#c*(H+TDQcH2xf-wvKL|8gKC*xg5ocWjX3dNQ3j?!SFlZ6=pOvJtY)+)jg6&7TgW z3Pz}3=rh7Ae?!ssCSYba=)U7N?O7VO@=Xp9%Yy<#R^AxiX*_8}ZW%)>2RyG^x-qno zy1S7qJ_Dp(KDyvh%^w~;{pnSHICo32nem2tFCDzP^L=pW>h7DGUVFg%Ev@!Pnogfr z`Cdyi1{zU=|AyR*G$ICn%M9?tkA>xXr?9hcPpL*oGXk?m*wQQ`$kw`f#^4)|t7eHG zuiNL)9O##LgDjo2jNzqImJ!|R(t^JCjOfycwfZMU)PtuH^)5v%76%?lX4g~`tPKdc0c9a_<+(Qz8AgYaEw$-C?#B2XXWC!`RR-PI(({Qn>NY?xk`@- z7>`f3U0@slWB`sQVx*wupvEK~7ae%V0Y|MM&nTFMNJ(Ip!e5$9I`5^}Bq`FNp}0xG z28D=Ob4KxWmDEMaw%H;iqA^8~T@zBB?*vh50STb$ti|`6MH|^AU7&>+{*@p@R0>f@ z5FP*HjJCR5fzlKW7$jzx*2*mlWGP#w?h0erc?^1^OGYScW8Acz*wD;8JmCL`{Hfx=Ptt;9{c64e$t)&gMv+*p{*l@Enjh9aiwu= zHOOqwG>3mwXmavy?y_};Qn`bS}?i~h2{%5xlajNL^ZKv2%dvJ-f zrnHQ#OwR;nf=7BNVT1Na@7(r8)#lJ0yY0P^*wvj|)AplQkTt1ke`fjs51z&V1Q7m#GABft!_NeE-nq@a zt!yr+S~Il9Hpp`q<*-x!VSW}|pWVjW*=>~YX4~BPM5vx;YvaRKUd0CY(l6P_g5;Pw zjDPLdHLTsrqd&UR{-JHwb9K$}1$gD>y|hIS-(wjeFa3nD_xArjew_}=q?r2OI1N=? z5sTLVTZgOdpbSiFiIpRL5`vnKX$QtQRw_5+6qiJb344qTn~1q4&7GlmT?BC$nNv3G zh%^D{Q>~JqMYi%uaYxidvF$O0RLl`nxPg7#6CfGX1ck8mt%H}8;_c>j#$F-z&=9F4 zR)GM) zk2Se4Kd^o%-xpYoT#m4g6fvp25{MMYutoc}QHV8GPrT60 zFAs2Bmo3fmmOsPr+4#@L=Dc;$g-=$k8Ve+jqj5lH8zksRu2RbCTB)QJXUfV9-6si( zvZoo1^7n)mh>_j%!YL(i()*T{V5_a~aq9_0>HC_+AtC!siHA+nLl}!A#NXFZg8Vt4 z2iDokdRt{AobmO>b7KU_btu*_jEX-)gIhkncaQWntjRvAm5#t;(IfBbNFm1@LtBg zA!LAkQ84ARM@NA;J8Gv$6A-JjBM{&`?E((g2E2LW?4KTDn?N_#{3sWyGoI3m6-EFv zGjPT}ds;hM7VS!tcO>vlDd{2L=D`SVECo@gQvxLoG%U_8A!OmJ_U7G>5SSA2IEpC2$>ewSm@`WxR zR%z!4Xh8Dl7f3Q;{%q=~cXARB-b4Q%^(K<^;YpYuP4S26ZN#}f<nmQy=xaNZR@~o&oT4m>2!U21$UJbD>YnLR@S|^2CS?f z-udg5^`4!-SXnTfU5vZ zR?X51Pr7wW400IFYJEipo5b z8PE{YO<&PS6U`VeY5L%`F3!tc>GyE!UUl~km2HAmTV@C`Ys(vhwPj|r2^(RLb?0=QV^o8_(I{(av`}oAhp6Xf@$C@*meEydl|5 zHhHbtdzB8>y+JTyZF}RGJJvU?Rl0&Y$9qvEWnkC5Wp5D-{ zf>M}5?gLcsd?O|$=M9n+4^JS{j7VpDn)$MmkC5$>p&`kF97$a%mvP}jVCO0WWW2K< zoSQUBlLS;Hq&Si$svU_{fk5K@9+gykVKEP+GS#14}$7&-z&9YLOmF-Mp$XA#6GP3}b7qZf@T=Bh@`XenBE z;xXvY6%W#*@>Z`c;myb;FQesmh z*t{Ni9c^k4f^yRzY~M6kswdU*Rp)S&I5j)nMI&81Y^J)Da^oL_KlEZCbVx1TiImXz z*U|~Er)okcJeh`88T0ttVS;(H8r4NFP5Cl6a&H)UlGPpi>-xQ(%<789ZdDnX@h+pT zI(15gR>*}~n8 zt+_6bCu82Zuyz_jgu?=NPzh*sOs#uX(#+2fd&LR5jxGrpHvjhGqcO34|Dr)~2}x{# z&87x!8_po@)TQ}KCFJCIDL)XNy6lk<hs(4SCF8CnV9~|7wWE!O^Yx9Q|6Scj_@77a3POYRiN=1-N2XU3|7t>g%bP@ ud&yGOj-h-(E?3BioXgpTqAnL?3`d{39|c->w!m4{=%{D3@w=DBuKxq+nK!Kf delta 5395 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.;690 150536 +(FILECREATED " 7-May-2024 22:34:10" {WMEDLEY}tedit>TEDIT-STREAM.;715 154959 :EDIT-BY rmk - :PREVIOUS-DATE "31-Mar-2024 11:44:49" {WMEDLEY}TEDIT>TEDIT-STREAM.;689) + :CHANGES-TO (RECORDS TEXTOBJ) + (FNS \TEDIT.TEXTGETFILEPTR \TEDIT.DELETE.SELPIECES \TEDIT.TEXTBOUT) + + :PREVIOUS-DATE " 6-May-2024 21:17:10" {WMEDLEY}tedit>TEDIT-STREAM.;712) (PRETTYCOMPRINT TEDIT-STREAMCOMS) @@ -19,7 +22,8 @@ (MACROS VISIBLEPIECEP \NEXT.VISIBLE.PIECE \PREV.VISIBLE.PIECE) (MACROS GETTOBJ SETTOBJ FGETTOBJ FSETTOBJ TEXTLEN TEXTSEL TEXTOBJ!) (CONSTANTS * PTYPES) - (GLOBALVARS \TEXTIMAGEOPS \TEXTFDEV))) + (GLOBALVARS \TEXTIMAGEOPS \TEXTFDEV) + (MACROS PLINES))) (INITRECORDS PIECE TEXTOBJ TEXTSTREAM) (COMS (* ;; "The BIN-level functions") @@ -190,6 +194,8 @@ EDITPROPS (* ;  "The PROPS that were passed into this edit session") (BLUEPENDINGDELETE FLAG) (* ; "T if the next insertion in this document is to be preceded by a deletion of the then-current selection") + (TXTHISTORYINACTIVE FLAG) (* ; + "T if history events are not recorded (e.g. for transcript files)") TXTHISTORY (* ;  "The history list for this edit session.") (SELPANE FULLXPOINTER) (* ; @@ -207,8 +213,8 @@  "List of all the CHARLOOKSs in the document, so they can be kept unique") TXTPARALOOKSLIST (* ;  "List of all the FMTSPECs in the document, so they can be kept unique") - (TXTNEEDSUPDATE FLAG) (* ; - "T => Screen invalid, need to run updater") + (NIL FLAG) (* ; + "Was TXTNEEDSUPDATE: T => Screen invalid, need to run updater") (TXTDON'TUPDATE FLAG) (* ; "T if we're holding off on screen updates until later. Used, e.g., by the menu-SHOW code so that you don't get piecemeal updates, but only one at the end of the SHOW.") TXTRAWINCLUDESTREAM (* ;  "NODIRCORE stream used to cache RAW includes (and maybe later, all includes?)") @@ -306,7 +312,7 @@ '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FULLXPOINTER POINTER POINTER POINTER POINTER POINTER FLAG POINTER - FLAG FLAG FLAG FLAG POINTER POINTER POINTER POINTER POINTER POINTER FLAG POINTER + FLAG FLAG FLAG FLAG POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG POINTER FULLXPOINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG POINTER POINTER POINTER) '((TEXTOBJ 0 POINTER) @@ -353,6 +359,7 @@ (TEXTOBJ 68 POINTER) (TEXTOBJ 70 POINTER) (TEXTOBJ 70 (FLAGBITS . 0)) + (TEXTOBJ 70 (FLAGBITS . 16)) (TEXTOBJ 72 POINTER) (TEXTOBJ 74 FULLXPOINTER) (TEXTOBJ 76 POINTER) @@ -548,6 +555,11 @@ (GLOBALVARS \TEXTIMAGEOPS \TEXTFDEV) ) +(DECLARE%: EVAL@COMPILE + +(PUTPROPS PLINES MACRO ((PANE) + (fetch (TEXTWINDOW PLINES) of PANE))) +) (* "END EXPORTED DEFINITIONS") @@ -580,7 +592,7 @@ '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FULLXPOINTER POINTER POINTER POINTER POINTER POINTER FLAG POINTER - FLAG FLAG FLAG FLAG POINTER POINTER POINTER POINTER POINTER POINTER FLAG POINTER + FLAG FLAG FLAG FLAG POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG POINTER FULLXPOINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG POINTER POINTER POINTER) '((TEXTOBJ 0 POINTER) @@ -627,6 +639,7 @@ (TEXTOBJ 68 POINTER) (TEXTOBJ 70 POINTER) (TEXTOBJ 70 (FLAGBITS . 0)) + (TEXTOBJ 70 (FLAGBITS . 16)) (TEXTOBJ 72 POINTER) (TEXTOBJ 74 FULLXPOINTER) (TEXTOBJ 76 POINTER) @@ -652,6 +665,10 @@ (\TEDIT.TEXTBIN [LAMBDA (TSTREAM) + (* ;; "Edited 3-May-2024 14:57 by rmk") + + (* ;; "Edited 28-Apr-2024 11:30 by rmk") + (* ;; "Edited 18-Mar-2024 23:34 by rmk") (* ;; "Edited 3-Feb-2024 14:27 by rmk") @@ -723,7 +740,7 @@ (* ;; "We are here because BIN punted. If it punted because it reached the end of a binable piece, then we have just advanced to the next piece. If it's binnable, then try running the opcode on the new situation. If it punted because we were not working on a binnable piece then and we are looking at one now, then again we must have advanced.") (BIN TSTREAM) - else (ADD (ffetch (TEXTSTREAM PCCHARSLEFT) of TSTREAM) + else (add (ffetch (TEXTSTREAM PCCHARSLEFT) of TSTREAM) -1) (* ;  "Where we will be when the operation completes") (SELECTC (PTYPE PC) @@ -731,14 +748,20 @@  "This counts offset in characters, not bytes") (PROG1 (\GETBASEFAT (ffetch (STREAM CBUFPTR) of TSTREAM) (ffetch (STREAM COFFSET) of TSTREAM)) - (ADD (ffetch (STREAM COFFSET) of TSTREAM) + (add (ffetch (STREAM COFFSET) of TSTREAM) 1))) (FATFILE2.PTYPE (PROG1 (create WORD HIBYTE _ (BIN (PCONTENTS PC)) LOBYTE _ (BIN (PCONTENTS PC))) - (ADD (ffetch (STREAM COFFSET) of TSTREAM) - 2))) + (add (ffetch (STREAM COFFSET) of TSTREAM) + 2) + (CL:WHEN (\ENDOFBUFFERP TSTREAM) + (\TEDIT.INSTALL.FILEBUFFER TSTREAM (ffetch + (TEXTSTREAM + PCCHARSLEFT + ) + of TSTREAM))))) (OBJECT.PTYPE (* ;;  "Return the object as BIN's result, and make sure we'll go to the next page next time.") @@ -750,25 +773,38 @@ of TSTREAM) 'OBJECTBYTE) (PCONTENTS PC)) - (ADD (ffetch (STREAM COFFSET) of TSTREAM) + (add (ffetch (STREAM COFFSET) of TSTREAM) 1))) + (UTF8.PTYPE (PROG1 (UTF8.BINCODE (PCONTENTS PC)) + (add (ffetch (STREAM COFFSET) of TSTREAM) + (PBYTESPERCHAR PC)) + (CL:WHEN (\ENDOFBUFFERP TSTREAM) + (\TEDIT.INSTALL.FILEBUFFER TSTREAM + (ffetch (TEXTSTREAM PCCHARSLEFT) + of TSTREAM))))) (FATFILE1.PTYPE (PROG1 (create WORD HIBYTE _ (PCHARSET PC) LOBYTE _ (BIN (PCONTENTS PC))) - (ADD (ffetch (STREAM COFFSET) of TSTREAM) - 1))) - (UTF8.PTYPE (PROG1 (UTF8.BINCODE (PCONTENTS PC)) - (ADD (ffetch (STREAM COFFSET) of TSTREAM) - (PBYTESPERCHAR PC)))) + (add (ffetch (STREAM COFFSET) of TSTREAM) + 1) + (CL:WHEN (\ENDOFBUFFERP TSTREAM) + (\TEDIT.INSTALL.FILEBUFFER TSTREAM (ffetch + (TEXTSTREAM + PCCHARSLEFT + ) + of TSTREAM))))) (THINFILE.PTYPE (* ;  "Fall through when the underlying stream is not binable") (PROG1 (BIN (PCONTENTS PC)) - (ADD (ffetch (STREAM COFFSET) of TSTREAM) - 1))) - (SUBSTREAM.PTYPE (* ; "A substream stored as an object") - (BIN (IMAGEOBJPROP (PCONTENTS PC) - 'SUBSTREAM))) + (add (ffetch (STREAM COFFSET) of TSTREAM) + 1) + (CL:WHEN (\ENDOFBUFFERP TSTREAM) + (\TEDIT.INSTALL.FILEBUFFER TSTREAM (ffetch + (TEXTSTREAM + PCCHARSLEFT + ) + of TSTREAM))))) (PROGN (* ;; "For pieces not listed because they require more work. Assumes the function updates COFFSET and that multi-byte characters are safe: don't cross buffer boundaries.") @@ -943,7 +979,8 @@ (SHOULDNT "UNKNOWN PIECE TYPE")))]) (\TEDIT.TEXTBOUT - [LAMBDA (TSTREAM CHAR) (* ; "Edited 17-Mar-2024 11:59 by rmk") + [LAMBDA (TSTREAM CHAR) (* ; "Edited 7-May-2024 08:19 by rmk") + (* ; "Edited 17-Mar-2024 11:59 by rmk") (* ; "Edited 15-Mar-2024 14:38 by rmk") (* ; "Edited 23-Dec-2023 12:14 by rmk") (* ; "Edited 18-Oct-2023 21:14 by rmk") @@ -953,33 +990,36 @@ (* ; "Edited 12-Aug-2022 23:26 by rmk") (* ; "Edited 10-May-93 16:59 by jds") - (* ;; "Do BOUT to a text stream, which is an insertion at the caret. Unlike EOL's that are typed in at \TEDIT.INSERT, EOL's here don't create paragraph breaks. We would get a new piece after every line of an image stream") + (* ;; "Do BOUT to a text stream, which is an insertion at the caret.") + + (* ;; "Unlike EOL's that are typed in at \TEDIT.INSERT, EOL's here don't create paragraph breaks. We would get a new piece after every line of an image stream") (* ;; "ADD1 to convert from %"byte%" indexing to TEDIT selection-indexing.") (* ;; "Seems foolish to use \TEXTGETFILEPTR here to map from the current piece to the absolute character index, just so \INSERTCH can map backwards from the character number to the piece.") - (CL:UNLESS (\CHARCODEP CHAR) + (* ;; + "NOTE: This does not replace the character, it inserts in front. Perhaps calls TEDIT.RPLCHARCODE?") + + (CL:UNLESS (OR (\CHARCODEP CHAR) + (IMAGEOBJP CHAR)) (\ILLEGAL.ARG CHAR)) - (LET ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) - (CH# (ADD1 (\TEDIT.TEXTGETFILEPTR TSTREAM))) - INSERTPC WINDOW) - (CL:UNLESS (FGETTOBJ TEXTOBJ TXTREADONLY) (* ; + (PROG ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + (CH# (ADD1 (\TEDIT.TEXTGETFILEPTR TSTREAM))) + WINDOW) + (CL:WHEN (FGETTOBJ TEXTOBJ TXTREADONLY) (* ;  "Maybe should cause an error--stream not open?") - (CL:WHEN (SETQ WINDOW (FGETTOBJ TEXTOBJ \WINDOW)) - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ CH# CH#)) - (CL:WHEN (SETQ INSERTPC (\TEDIT.INSERTCH CHAR CH# TEXTOBJ)) + (RETURN)) + (CL:WHEN (\TEDIT.INSERTCH CHAR CH# TEXTOBJ NIL T) - (* ;; "We inserted 1 char. Whether or not we introduced a new piece or extended an old one, we want to be positioned at the first character of the next piece. ") + (* ;; "If the selection points to a later charater, should it be updated ??") - (\TEDIT.INSTALL.PIECE TSTREAM (NEXTPIECE INSERTPC) - 0) - (CL:WHEN WINDOW - (\TEDIT.UPDATE.SCREEN TEXTOBJ) - (\TEDIT.INSTALL.PIECE TSTREAM (NEXTPIECE INSERTPC) - 0)))) (* ; - "Reformatting advances the stream, go back to the insertion.") - CHAR]) + (\TEDIT.UPDATE.LINES TEXTOBJ 'INSERTION CH# 1) + + (* ;; "We inserted 1 char. Whether or not we introduced a new piece or extended an old one, we want to be positioned so that the next BOUT will insert after this one (if nothing else is changed). Do this after redisplay, in case reformatting changes the position.") + + (\TEDIT.TEXTSETFILEPTR TSTREAM CH#)) + CHAR]) (\TEDIT.INSTALL.FILEBUFFER [LAMBDA (TSTREAM PCCHARSLEFT) (* ; "Edited 18-Mar-2024 22:01 by rmk") @@ -1134,6 +1174,8 @@ (OPENTEXTSTREAM [LAMBDA (TEXT WINDOW START END PROPS) + (* ;; "Edited 6-May-2024 12:38 by rmk") + (* ;; "Edited 31-Mar-2024 11:43 by rmk") (* ;; "Edited 17-Mar-2024 12:05 by rmk") @@ -1206,11 +1248,9 @@ (* ; "Set up a new window") (\TEDIT.OPENTEXTSTREAM.WINDOW WINDOW TSTREAM PROPS) elseif PRIMARYW - then (OPENW PRIMARYW) - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ 1 -1) - (* ; - "Clean and reuse the existing window") - (\TEDIT.UPDATE.SCREEN TEXTOBJ) + then (OPENW PRIMARYW) (* ; + "Redisplay and reuse the existing window") + (\TEDIT.UPDATE.LINES TEXTOBJ 'APPEARANCE 1 (FGETTOBJ TEXTOBJ TEXTLEN)) (SETTOBJ TEXTOBJ \DIRTY NIL)) (\TEDIT.REOPENTEXTSTREAM TSTREAM) else (SETQ TSTREAM (\TEDIT.CREATE.TEXTSTREAM PROPS)) @@ -1390,7 +1430,8 @@ (TEDIT.PAGEFORMAT TEXTOBJ (GETTEXTPROP TEXTOBJ 'PAGEFORMAT)))]) (\TEDIT.OPENTEXTSTREAM.SETUP.SEL - [LAMBDA (TSTREAM) (* ; "Edited 15-Mar-2024 13:38 by rmk") + [LAMBDA (TSTREAM) (* ; "Edited 29-Apr-2024 12:40 by rmk") + (* ; "Edited 15-Mar-2024 13:38 by rmk") (* ; "Edited 15-Dec-2023 23:05 by rmk") (* ; "Edited 12-Oct-2023 22:48 by rmk") (* ; "Edited 17-Sep-2023 12:52 by rmk") @@ -1403,7 +1444,7 @@ (LET ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) SELPROP SEL) (SETQ SELPROP (GETTEXTPROP TEXTOBJ 'SEL)) - (for S in (\TEDIT.COLLECTSELS TEXTOBJ) do (FSETSEL S SELTEXTOBJ TEXTOBJ) + (for S in (\TEDIT.COLLECTSELS TEXTOBJ) do (FSETSEL S SELTEXTSTREAM TSTREAM) (FSETSEL S SET NIL)) (SETQ SEL (FGETTOBJ TEXTOBJ SEL)) (FSETSEL SEL SET T) @@ -1413,7 +1454,7 @@ then (* ;  "We came in with an explicit initial selection. Set it up.") (\TEDIT.COPYSEL SELPROP SEL) - (FSETSEL SEL SELTEXTOBJ TEXTOBJ) + (FSETSEL SEL SELTEXTSTREAM TSTREAM) elseif (LISTP SELPROP) then (* ;; "Default to POINT selection") @@ -1446,7 +1487,8 @@ SEL]) (\TEDIT.OPENTEXTSTREAM.WINDOW - [LAMBDA (WINDOW TSTREAM PROPS) (* ; "Edited 17-Mar-2024 12:06 by rmk") + [LAMBDA (WINDOW TSTREAM PROPS) (* ; "Edited 6-May-2024 21:16 by rmk") + (* ; "Edited 17-Mar-2024 12:06 by rmk") (* ; "Edited 15-Mar-2024 14:38 by rmk") (* ; "Edited 26-Oct-2023 11:02 by rmk") (* ; "Edited 18-Sep-2023 23:22 by rmk") @@ -1459,7 +1501,8 @@ (FILEPTR (\TEDIT.TEXTGETFILEPTR TSTREAM))) (if WINDOW then (\TEDIT.WINDOW.SETUP WINDOW TSTREAM PROPS) - (\TEDIT.UPDATE.SCREEN TEXTOBJ) + (\TEDIT.FILLPANE (PLINES WINDOW) + TEXTOBJ WINDOW) (SETTOBJ TEXTOBJ \DIRTY NIL) (CL:IF (FGETTOBJ TEXTOBJ TXTREADONLY) (for CARET in (GETTOBJ TEXTOBJ CARET) do (\TEDIT.UPCARET CARET)) @@ -1472,7 +1515,8 @@ (SETTOBJ TEXTOBJ PROMPTWINDOW (GETTEXTPROP TEXTOBJ 'PROMPTWINDOW]) (\TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS - [LAMBDA (TEXTOBJ) (* ; "Edited 11-Nov-2023 16:13 by rmk") + [LAMBDA (TEXTOBJ) (* ; "Edited 29-Apr-2024 11:05 by rmk") + (* ; "Edited 11-Nov-2023 16:13 by rmk") (* ; "Edited 17-Sep-2023 07:43 by rmk") (* ; "Edited 3-Aug-2023 23:02 by rmk") (* ; "Edited 26-Apr-2023 14:29 by rmk") @@ -1495,7 +1539,8 @@ (SETQ PARALOOKS (\TEDIT.UNIQUIFY.PARALOOKS (\TEDIT.PARSE.PARALOOKS.LIST (OR (GETTEXTPROP TEXTOBJ 'PARALOOKS) (create FMTSPEC using TEDIT.DEFAULT.FMTSPEC) - )) + ) + NIL) TEXTOBJ)) (SETTOBJ TEXTOBJ DEFAULTCHARLOOKS CHARLOOKS) (SETTOBJ TEXTOBJ CARETLOOKS CHARLOOKS) @@ -1785,7 +1830,8 @@ TEXTLEN]) (\TEDIT.TEXTGETFILEPTR - [LAMBDA (TSTREAM) (* ; "Edited 19-Mar-2024 14:19 by rmk") + [LAMBDA (TSTREAM) (* ; "Edited 7-May-2024 21:14 by rmk") + (* ; "Edited 19-Mar-2024 14:19 by rmk") (* ; "Edited 17-Mar-2024 00:25 by rmk") (* ; "Edited 21-Oct-2023 20:57 by rmk") (* ; "Edited 2-Sep-2022 17:45 by rmk") @@ -1803,6 +1849,12 @@ (* ;; "Not set or off the end") (FGETTOBJ TEXTOBJ TEXTLEN) + elseif (ZEROP (FGETTOBJ TEXTOBJ TEXTLEN)) + then + (* ;; "Replace a lingering piece from a delete-everything?") + + (freplace (TEXTSTREAM PIECE) of TSTREAM with (FGETTOBJ TEXTOBJ LASTPIECE)) + 0 else (* ; "Somewhere inside the document") (SETQ PCCHARSLEFT (ffetch (TEXTSTREAM PCCHARSLEFT) of TSTREAM)) (CL:WHEN (ffetch (STREAM BINABLE) of TSTREAM) @@ -2002,7 +2054,8 @@ (DEFINEQ (\TEDIT.DELETE.SELPIECES - [LAMBDA (TEXTOBJ TARGETSEL) (* ; "Edited 17-Mar-2024 00:22 by rmk") + [LAMBDA (TEXTOBJ TARGETSEL) (* ; "Edited 7-May-2024 21:14 by rmk") + (* ; "Edited 17-Mar-2024 00:22 by rmk") (* ; "Edited 13-Feb-2024 00:13 by rmk") (* ; "Edited 11-Dec-2023 09:51 by rmk") (* ; "Edited 21-Oct-2023 23:50 by rmk") @@ -2011,7 +2064,7 @@ (* ;; "Delete the characters selected by TARGETSEL. If any of the pieces contains an objecting object, nothing is done.") - (CL:UNLESS (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ) + (CL:UNLESS (GETTOBJ TEXTOBJ TXTREADONLY) (* ;; "Only delete characters if changes are permitted. ") @@ -2051,7 +2104,8 @@ T)))]) (\TEDIT.INSERTCH - [LAMBDA (CH CH# TEXTOBJ PARALAST) (* ; "Edited 17-Mar-2024 12:41 by rmk") + [LAMBDA (CH CH# TEXTOBJ PARALAST NOHISTORY) (* ; "Edited 6-May-2024 10:28 by rmk") + (* ; "Edited 17-Mar-2024 12:41 by rmk") (* ; "Edited 21-Jan-2024 14:06 by rmk") (* ; "Edited 9-Dec-2023 13:14 by rmk") (* ; "Edited 18-Oct-2023 21:16 by rmk") @@ -2150,7 +2204,7 @@ (* ;; " Register this event in the TEDIT history.") - (\TEDIT.INSERTCH.HISTORY TEXTOBJ PREVPC CH# ILEN) + (CL:UNLESS NOHISTORY (\TEDIT.INSERTCH.HISTORY TEXTOBJ PREVPC CH# ILEN)) (* ;; "Finally, as a heuristic for continuous typing, set up the TEXTOBJ hint to speed up the \CHTOPC piece search if the next insertion comes just after this one (and this one is not PARALAST). This really doesn't matter for typing, but may make it noticeaby faster for programmatic insertions..") @@ -2206,7 +2260,8 @@ THPOINT _ 'RIGHT]) (\TEDIT.INSERTEOL - [LAMBDA (CH CH# TEXTOBJ) (* ; "Edited 17-Mar-2024 11:41 by rmk") + [LAMBDA (CH CH# TSTREAM) (* ; "Edited 29-Apr-2024 10:46 by rmk") + (* ; "Edited 17-Mar-2024 11:41 by rmk") (* ; "Edited 11-Aug-2023 15:49 by rmk") (* ; "Edited 5-May-2023 17:00 by rmk") (* ; "Edited 31-May-91 14:00 by jds") @@ -2215,22 +2270,21 @@ (* ;; "") - (* ;; "RMK: Is it really necessary to convert to formatted? If \FORMATLINE forces a line break when it seems a meta-EO, then it is only EOL that forces the PARALAST for paragraph formatting and paragraph selection. meta-EOL can be treated just as an ordinary character and not come through (if meta-EOL can appear with the same significance in an otherwise plain-text file.") - - (CL:UNLESS (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ) - (LET (INPC) - (CL:UNLESS (OR (fetch (TEXTOBJ FORMATTEDP) of TEXTOBJ) - (EQ (CHARCODE EOL))) (* ; + (PROG [INPC (TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM] + (CL:WHEN (FGETTOBJ TEXTOBJ TXTREADONLY) + (RETURN NIL)) + (CL:UNLESS (OR (FGETTOBJ TEXTOBJ FORMATTEDP) + (EQ (CHARCODE EOL))) (* ;  "Inserting a meta-EOL into an unformatted document. Start by setting up para breaks.") - (\TEDIT.CONVERT.TO.FORMATTED TEXTOBJ)) - (SETQ INPC (\TEDIT.INSERTCH (CHARCODE EOL) - CH# TEXTOBJ)) (* ; "Put the EOL in") - (CL:WHEN (AND (EQ CH (CHARCODE EOL)) - (PREVPIECE INPC)) (* ; + (\TEDIT.CONVERT.TO.FORMATTED TSTREAM)) + (SETQ INPC (\TEDIT.INSERTCH (CHARCODE EOL) + CH# TEXTOBJ)) (* ; "Put the EOL in") + (CL:WHEN (AND (EQ CH (CHARCODE EOL)) + (PREVPIECE INPC)) (* ;  "It's really an EOL, rather than a meta-EOL so do para breaking.") - (freplace (PIECE PPARALAST) of (PREVPIECE INPC) with T) - T) - INPC))]) + (FSETPC (PREVPIECE INPC) + PPARALAST T)) + (RETURN INPC]) (\TEDIT.INSERTCH.INSERTION [LAMBDA (CH TEXTOBJ) (* ; "Edited 20-Oct-2023 23:57 by rmk") @@ -2302,7 +2356,8 @@ (DEFINEQ (\SETUPGETCH - [LAMBDA (CH# TEXTOBJ) (* ; "Edited 17-Mar-2024 00:27 by rmk") + [LAMBDA (CH# TEXTOBJ) (* ; "Edited 29-Apr-2024 12:14 by rmk") + (* ; "Edited 17-Mar-2024 00:27 by rmk") (* ; "Edited 23-Dec-2023 12:14 by rmk") (* ; "Edited 22-Aug-2022 13:04 by rmk") (* ; "Edited 10-Aug-2022 17:20 by rmk") @@ -2316,17 +2371,16 @@ (* ;; "NOBODY CALLS IT WITH A PIECE. CALLS |INSTALL.PIECE INSTEAD") - (COND - ((TYPE? PIECE CH#) - (HELP "\SETUPGETCH CALLED WITH PIECE") - (\TEDIT.INSTALL.PIECE (ffetch (TEXTOBJ STREAMHINT) of TEXTOBJ) - CH# 0)) - (T (LET (START-OF-PIECE PC) - (DECLARE (SPECVARS START-OF-PIECE)) - (SETQ PC (\TEDIT.CHTOPC CH# TEXTOBJ T)) - (\TEDIT.INSTALL.PIECE (ffetch (TEXTOBJ STREAMHINT) of TEXTOBJ) - PC - (- CH# START-OF-PIECE]) + (SETQ TEXTOBJ (TEXTOBJ)) + (LET ((TSTREAM (TEXTSTREAM TEXTOBJ))) + (COND + ((TYPE? PIECE CH#) + (HELP "\SETUPGETCH CALLED WITH PIECE") + (\TEDIT.INSTALL.PIECE TSTREAM CH# 0)) + (T (LET (START-OF-PIECE PC) + (DECLARE (SPECVARS START-OF-PIECE)) + (SETQ PC (\TEDIT.CHTOPC CH# TEXTOBJ T)) + (\TEDIT.INSTALL.PIECE TSTREAM PC (- CH# START-OF-PIECE]) ) @@ -2417,7 +2471,9 @@ (DEFINEQ (GETTEXTPROP - [LAMBDA (TEXTOBJ PROP) (* ; "Edited 20-Mar-2024 10:58 by rmk") + [LAMBDA (TSTREAM PROP) (* ; "Edited 30-Apr-2024 22:53 by rmk") + (* ; "Edited 25-Apr-2024 00:19 by rmk") + (* ; "Edited 20-Mar-2024 10:58 by rmk") (* ; "Edited 2-Mar-2024 07:09 by rmk") (* ; "Edited 14-Jan-2024 16:35 by rmk") (* ; "Edited 31-Oct-2023 23:32 by rmk") @@ -2426,24 +2482,28 @@ (* ;; "Gets values for document properties. Used by TEXTPROP.") - (TEXTOBJ! TEXTOBJ) - (SELECTQ PROP - ((READONLY READ-ONLY) - (FGETTOBJ TEXTOBJ TXTREADONLY)) - ((BEING-EDITED ACTIVE) - (FGETTOBJ TEXTOBJ TXTEDITING)) - (READTABLE (FGETTOBJ TEXTOBJ TXTRTBL)) - (BOUNDTABLE (FGETTOBJ TEXTOBJ TXTWTBL)) - (DON'TUPDATE (FGETTOBJ TEXTOBJ TXTDON'TUPDATE)) - (NOTSPLITTABLE (FGETTOBJ TEXTOBJ TXTNOTSPLITTABLE)) - (\WINDOW (FGETTOBJ TEXTOBJ \WINDOW)) - (DIRTY (FGETTOBJ TEXTOBJ \XDIRTY)) - (LENGTH (FGETTOBJ TEXTOBJ TEXTLEN)) - (LISTGET (FGETTOBJ TEXTOBJ EDITPROPS) - PROP]) + (LET ((TEXTOBJ (TEXTOBJ TSTREAM))) + (SELECTQ PROP + ((READONLY READ-ONLY) + (FGETTOBJ TEXTOBJ TXTREADONLY)) + ((BEING-EDITED ACTIVE) + (FGETTOBJ TEXTOBJ TXTEDITING)) + (READTABLE (FGETTOBJ TEXTOBJ TXTRTBL)) + (BOUNDTABLE (FGETTOBJ TEXTOBJ TXTWTBL)) + (DON'TUPDATE (FGETTOBJ TEXTOBJ TXTDON'TUPDATE)) + (NOTSPLITTABLE (FGETTOBJ TEXTOBJ TXTNOTSPLITTABLE)) + (\WINDOW (FGETTOBJ TEXTOBJ \WINDOW)) + (DIRTY (FGETTOBJ TEXTOBJ \XDIRTY)) + (LENGTH (FGETTOBJ TEXTOBJ TEXTLEN)) + (TXTHISTORY (CL:WHEN (FGETTOBJ TEXTOBJ TXTHISTORYINACTIVE) + 'DON'T)) + (LISTGET (FGETTOBJ TEXTOBJ EDITPROPS) + PROP]) (PUTTEXTPROP - [LAMBDA (TEXTOBJ PROP VALUE) (* ; "Edited 20-Mar-2024 10:59 by rmk") + [LAMBDA (TSTREAM PROP VALUE) (* ; "Edited 30-Apr-2024 22:54 by rmk") + (* ; "Edited 25-Apr-2024 00:18 by rmk") + (* ; "Edited 20-Mar-2024 10:59 by rmk") (* ; "Edited 15-Mar-2024 18:08 by rmk") (* ; "Edited 9-Mar-2024 22:18 by rmk") (* ; "Edited 2-Mar-2024 07:09 by rmk") @@ -2454,44 +2514,48 @@ (* ;; "Put a value on prop list for a textobj. Some properties affect the fields of TEXTOBJ, but all go into EDITPROPS so that they can be retrieved as a whole.") - (TEXTOBJ! TEXTOBJ) - (CL:UNLESS (LISTP (FGETTOBJ TEXTOBJ EDITPROPS)) (* ; + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (LET [(TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM] + (CL:UNLESS (LISTP (FGETTOBJ TEXTOBJ EDITPROPS)) (* ;  "Make sure we have a list to smash, no matter what.") - (FSETTOBJ TEXTOBJ EDITPROPS (LIST PROP NIL))) - (PROG1 (GETTEXTPROP TEXTOBJ PROP) - (SELECTQ PROP - ((READONLY READ-ONLY) - (FSETTOBJ TEXTOBJ TXTREADONLY VALUE) - (CL:WHEN NIL (* ; + (FSETTOBJ TEXTOBJ EDITPROPS (LIST PROP NIL))) + (PROG1 (GETTEXTPROP TEXTOBJ PROP) + (SELECTQ PROP + ((READONLY READ-ONLY) + (FSETTOBJ TEXTOBJ TXTREADONLY VALUE) + (CL:WHEN NIL (* ;  "This has to be done after the file is initially read in") - (replace (STREAM ACCESS) of (FGETTOBJ TEXTOBJ STREAMHINT) with 'INPUT))) - ((BEING-EDITED ACTIVE) - (FSETTOBJ TEXTOBJ TXTEDITING VALUE)) - (READTABLE (FSETTOBJ TEXTOBJ TXTRTBL VALUE)) - (TERMTABLE (FSETTOBJ TEXTOBJ TXTTERMSA (fetch (TERMTABLEP TERMSA) of VALUE))) - (BOUNDTABLE (FSETTOBJ TEXTOBJ TXTWTBL VALUE)) - (DON'TUPDATE (FSETTOBJ TEXTOBJ TXTDON'TUPDATE VALUE)) - (NOTSPLITTABLE (FSETTOBJ TEXTOBJ TXTNOTSPLITTABLE T)) - (\WINDOW - (* ;; + (replace (STREAM ACCESS) of TSTREAM with 'INPUT))) + ((BEING-EDITED ACTIVE) + (FSETTOBJ TEXTOBJ TXTEDITING VALUE)) + (READTABLE (FSETTOBJ TEXTOBJ TXTRTBL VALUE)) + (TERMTABLE (FSETTOBJ TEXTOBJ TXTTERMSA (fetch (TERMTABLEP TERMSA) of VALUE))) + (BOUNDTABLE (FSETTOBJ TEXTOBJ TXTWTBL VALUE)) + (DON'TUPDATE (FSETTOBJ TEXTOBJ TXTDON'TUPDATE VALUE)) + (NOTSPLITTABLE (FSETTOBJ TEXTOBJ TXTNOTSPLITTABLE T)) + (\WINDOW + (* ;;  "If VALUE is a window, we really should do a full set up. And if NIL, detach it.") - (FSETTOBJ TEXTOBJ \WINDOW (MKLIST VALUE))) - (DIRTY (FSETTOBJ TEXTOBJ \DIRTY VALUE)) - (LENGTH (ERROR "TEXT property LENGTH is read-only")) - NIL) - (LISTPUT (FGETTOBJ TEXTOBJ EDITPROPS) - PROP VALUE))]) + (FSETTOBJ TEXTOBJ \WINDOW (MKLIST VALUE))) + (DIRTY (FSETTOBJ TEXTOBJ \DIRTY VALUE)) + (LENGTH (ERROR "TEXT property LENGTH is read-only")) + (TXTHISTORY (CL:IF (EQ 'DON'T VALUE) + (FSETTOBJ TEXTOBJ TXTHISTORYINACTIVE T))) + NIL) + (LISTPUT (FGETTOBJ TEXTOBJ EDITPROPS) + PROP VALUE))]) (TEXTPROP - [LAMBDA X (* ; "Edited 21-Sep-2023 09:54 by rmk") + [LAMBDA X (* ; "Edited 25-Apr-2024 00:00 by rmk") + (* ; "Edited 21-Sep-2023 09:54 by rmk") (* ; "Edited 9-Feb-89 11:20 by jds") (CL:UNLESS (IGEQ X 2) (\ILLEGAL.ARG X)) - (LET [(TEXTOBJ (TEXTOBJ (ARG X 1] - (PROG1 (GETTEXTPROP TEXTOBJ (ARG X 2)) + (LET [(TSTREAM (TEXTSTREAM (ARG X 1] + (PROG1 (GETTEXTPROP TSTREAM (ARG X 2)) (CL:UNLESS (EQ X 2) - (PUTTEXTPROP TEXTOBJ (ARG X 2) + (PUTTEXTPROP TSTREAM (ARG X 2) (ARG X 3))))]) ) @@ -2516,27 +2580,27 @@ (ADDTOVAR LAMA TEXTPROP) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (33937 60490 (\TEDIT.TEXTBIN 33947 . 42725) (\TEDIT.TEXTPEEKBIN 42727 . 48164) ( -\TEDIT.TEXTBACKFILEPTR 48166 . 53726) (\TEDIT.TEXTBOUT 53728 . 56486) (\TEDIT.INSTALL.FILEBUFFER 56488 - . 60488)) (61388 65319 (\TEDIT.TEXTOUTCHARFN 61398 . 62954) (\TEDIT.TEXTINCCODEFN 62956 . 63695) ( -\TEDIT.TEXTBACKCCODEFN 63697 . 64289) (\TEDIT.TEXTFORMATBYTESTREAM 64291 . 64877) ( -\TEDIT.TEXTFORMATBYTESTRING 64879 . 65317)) (65366 75866 (OPENTEXTSTREAM 65376 . 71602) ( -COPYTEXTSTREAM 71604 . 75089) (TEDIT.STREAMCHANGEDP 75091 . 75393) (TXTFILE 75395 . 75864)) (75867 -100813 (\TEDIT.REOPENTEXTSTREAM 75877 . 77229) (\TEDIT.OPENTEXTSTREAM.PIECES 77231 . 81611) ( -\TEDIT.OPENTEXTSTREAM.PROPS 81613 . 82669) (\TEDIT.OPENTEXTSTREAM.SETUP.SEL 82671 . 86165) ( -\TEDIT.OPENTEXTSTREAM.WINDOW 86167 . 87762) (\TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS 87764 . 89611) ( -\TEDIT.OPENTEXTFILE 89613 . 91212) (\TEDIT.CREATE.TEXTSTREAM 91214 . 92148) (\TEDIT.REOPEN.STREAM -92150 . 94269) (\TEDIT.TEXTINIT 94271 . 100811)) (100851 101970 (\TEDIT.TTYBOUT 100861 . 101968)) ( -102088 118131 (\TEDIT.TEXTCLOSEF 102098 . 103422) (\TEDIT.TEXTDSPFONT 103424 . 104394) ( -\TEDIT.TEXTEOFP 104396 . 106151) (\TEDIT.TEXTGETEOFPTR 106153 . 106476) (\TEDIT.TEXTGETFILEPTR 106478 - . 108802) (\TEDIT.TEXTOPENF 108804 . 109735) (\TEDIT.TEXTSETEOF 109737 . 110353) ( -\TEDIT.TEXTSETFILEPTR 110355 . 112396) (\TEDIT.TEXTDSPXPOSITION 112398 . 113306) ( -\TEDIT.TEXTDSPYPOSITION 113308 . 113937) (\TEDIT.TEXTLEFTMARGIN 113939 . 114316) ( -\TEDIT.TEXTRIGHTMARGIN 114318 . 117280) (\TEDIT.TEXTDSPCHARWIDTH 117282 . 117586) ( -\TEDIT.TEXTDSPSTRINGWIDTH 117588 . 117894) (\TEDIT.TEXTDSPLINEFEED 117896 . 118129)) (119178 138817 ( -\TEDIT.DELETE.SELPIECES 119188 . 122290) (\TEDIT.INSERTCH 122292 . 129521) (\TEDIT.INSERTCH.HISTORY -129523 . 132609) (\TEDIT.INSERTEOL 132611 . 134692) (\TEDIT.INSERTCH.INSERTION 134694 . 137531) ( -\TEDIT.INSERTCH.EXTEND 137533 . 138815)) (138818 140326 (\SETUPGETCH 138828 . 140324)) (140384 145479 -(\TEDIT.INSTALL.PIECE 140394 . 145477)) (145517 150001 (GETTEXTPROP 145527 . 146874) (PUTTEXTPROP -146876 . 149499) (TEXTPROP 149501 . 149999))))) + (FILEMAP (NIL (34497 63008 (\TEDIT.TEXTBIN 34507 . 45199) (\TEDIT.TEXTPEEKBIN 45201 . 50638) ( +\TEDIT.TEXTBACKFILEPTR 50640 . 56200) (\TEDIT.TEXTBOUT 56202 . 59004) (\TEDIT.INSTALL.FILEBUFFER 59006 + . 63006)) (63906 67837 (\TEDIT.TEXTOUTCHARFN 63916 . 65472) (\TEDIT.TEXTINCCODEFN 65474 . 66213) ( +\TEDIT.TEXTBACKCCODEFN 66215 . 66807) (\TEDIT.TEXTFORMATBYTESTREAM 66809 . 67395) ( +\TEDIT.TEXTFORMATBYTESTRING 67397 . 67835)) (67884 78358 (OPENTEXTSTREAM 67894 . 74094) ( +COPYTEXTSTREAM 74096 . 77581) (TEDIT.STREAMCHANGEDP 77583 . 77885) (TXTFILE 77887 . 78356)) (78359 +103738 (\TEDIT.REOPENTEXTSTREAM 78369 . 79721) (\TEDIT.OPENTEXTSTREAM.PIECES 79723 . 84103) ( +\TEDIT.OPENTEXTSTREAM.PROPS 84105 . 85161) (\TEDIT.OPENTEXTSTREAM.SETUP.SEL 85163 . 88772) ( +\TEDIT.OPENTEXTSTREAM.WINDOW 88774 . 90521) (\TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS 90523 . 92536) ( +\TEDIT.OPENTEXTFILE 92538 . 94137) (\TEDIT.CREATE.TEXTSTREAM 94139 . 95073) (\TEDIT.REOPEN.STREAM +95075 . 97194) (\TEDIT.TEXTINIT 97196 . 103736)) (103776 104895 (\TEDIT.TTYBOUT 103786 . 104893)) ( +105013 121454 (\TEDIT.TEXTCLOSEF 105023 . 106347) (\TEDIT.TEXTDSPFONT 106349 . 107319) ( +\TEDIT.TEXTEOFP 107321 . 109076) (\TEDIT.TEXTGETEOFPTR 109078 . 109401) (\TEDIT.TEXTGETFILEPTR 109403 + . 112125) (\TEDIT.TEXTOPENF 112127 . 113058) (\TEDIT.TEXTSETEOF 113060 . 113676) ( +\TEDIT.TEXTSETFILEPTR 113678 . 115719) (\TEDIT.TEXTDSPXPOSITION 115721 . 116629) ( +\TEDIT.TEXTDSPYPOSITION 116631 . 117260) (\TEDIT.TEXTLEFTMARGIN 117262 . 117639) ( +\TEDIT.TEXTRIGHTMARGIN 117641 . 120603) (\TEDIT.TEXTDSPCHARWIDTH 120605 . 120909) ( +\TEDIT.TEXTDSPSTRINGWIDTH 120911 . 121217) (\TEDIT.TEXTDSPLINEFEED 121219 . 121452)) (122501 142105 ( +\TEDIT.DELETE.SELPIECES 122511 . 125703) (\TEDIT.INSERTCH 125705 . 133065) (\TEDIT.INSERTCH.HISTORY +133067 . 136153) (\TEDIT.INSERTEOL 136155 . 137980) (\TEDIT.INSERTCH.INSERTION 137982 . 140819) ( +\TEDIT.INSERTCH.EXTEND 140821 . 142103)) (142106 143693 (\SETUPGETCH 142116 . 143691)) (143751 148846 +(\TEDIT.INSTALL.PIECE 143761 . 148844)) (148884 154424 (GETTEXTPROP 148894 . 150658) (PUTTEXTPROP +150660 . 153810) (TEXTPROP 153812 . 154422))))) STOP diff --git a/library/tedit/TEDIT-STREAM.LCOM b/library/tedit/TEDIT-STREAM.LCOM index 93369ffe9baf94af5e76b720447b2d53b5b33387..87e95aff53ab6dca8da43ad422d49df161dec965 100644 GIT binary patch delta 3584 zcma)9U2Gd!6`rx1w(BIVlR9lu+U;%99|vN0em!Hi3ZAjYnQ5G{u_tNLmTud1SvL;N zHVH_(fU*b)iH8*pmrZw}+ZC{^wh|9XOn6xdg8KQVNRg3C&qX+f6A;HGcpAiZz$8u>{X0gxJE*kI!$GN2AeRRJsIO9=kwfd;0_7 zjFHt+pc-~Tz34H9^rEkv8PU>NZQ^UErmkL|xis_K;QufTu`yAIi*b~&O;#t+%oi&t zkVxr@IiwXMRt|*=S}Ipa7m=lnTRHV~KMH5eBEH?W5BHZ3oh4E=H)_EV6ZwKRX5>bT zku(?wwrx5w$0k?_ob>zi6vSd%Mg#rM=ANa(Usn+^R0uTD1JmjI?*@B{K!BT}_di+n$dzi&XF_ZNb zkr=Rb|H|g=zq9c;!Vo2Arc_hRcbl#>))G&*dlFddlIJYC< z6L{RQ?SP+`1U$IoQ%86%jz+DF990c7l}l@gljCSevxw*Og z;3Q8CC&qAX+Y7$9R8?A}?K?Si#xT>lGx){Ufv3;*)hQJvODb* zw=+;!V}$1pOGY6q4%-2`JCmykcrd;+obI%dvQ*u!j}gI*K5{Z1UlSBd^noICgZ}R}SDe zjt#8VM{@Rr3-5JPYZTPoX?wJg*ptLsr8U1FDu=2O>tjFuR_fr@O_nq|X2Y63FegRI+)k3FmwhFB*AALW z{)z}zy6jeA3-#orZAh>K`I5?2dwffkx4=%Ht0N6MS!{EDWKgRNo)}qc6SHuK*xKAkJ(kfFt~ph9fwY7;IPUoT=YY zO3vVwnvVZ|u4f)Rize&kde9LA2i2g9`7U(xbYtRWeSI7XIRM>R(6F9hwyy2mGD~XW zX3f4}!;0JbdIpsJ_!(**92zVG>odx6(sNz15Dv>6O6Sbu7TkSgWQ|)5u0myxp{!;O zSvq3*I7%A@YXY%QgU&k@2(e5YsBIPVS;MjvHLIaG>!@;i34$U3S0OWPDObpBEQa8k z24Cbuh$AIs8DlVFkg6HxP=s&^?rwv(G2eav;1pLOAmI z?s+G&{fL$zFn%X6m#M}zs6ly}0#Eqg)Rl5+|Nc;>rYm-}e>8ZvYPz~md13NiBDhRF zcqFpTNwiG;+L>I`)%lRRO#RFa-fhs}BpVevwM^aiV4?Ifb;Ct{-`!_Cxb(aWsoYC2 zOH(f7Re+TIKPoMh_lG){Mjg<~VO6&~V!2+gs=7)Jafx!34Nyx_cloVaGntmUoz<_Y z&ikfbxt9snD!{^wqS^^nBW;f%^|)w($Klq(A+1oz6%Yr7AL{!#LD+KTatPIMJ*1K> zH8{lq2R3nvgR6CeQyg^D2B%2dbU7un_^%fxOj&m6K}fWj9-x7+$f1YGc=SMAvjnp4 zZO_i-n1sLnRD8Q*9sb2rmBz3dz1ZXHLE#Z4Rmc?)&={^h{rzxr4;!Xo;h$XWtIl4& z-iD>=cKnZP?U=iE7}u_KD3)6e>SEuz>PsBR152sUf05h}QK329t z#b>1^h>O{>H=i|j1>pY(R~_$&JFly-_OsW!@QK+T{Eh2eS0JA=OiL?l!it=&;{Nr) zrdrY2Dn6s{2=E*nD2&;eefYH*t%-?|Jwn(&o1q!}>A3?~pY6t%W>3J5H)aKVYkDWN f-5Y@TaJI`IkR6R}bBFNmxi&1%9Ru8jx%>YG>3G8W delta 3093 zcma)8O>7(25#A*&MWQ5|qA1gnW9yl5^b?58{_tnXI_d6`EA6wWU5Z@l$59(AW?@CN zYn!%&25zAA(B{w))bl8GkS`1&t~R`<%o;cyTY7p{G+_{0Mo7aZ{n zkKv4x0@n})1<@B0iNu5G`pl$~&M0%QpStksE9HgqYj#RsOboH-qD+*Jp`@93NS;IG zizVbqW^>9k)(iPi8p5FcxwFYgBpFHk-%*4FdCoOR|CCI*eoF_*pnHIP)y*F&)wfSn z)gAv+pQ$wpeM-LR?xRnT4fpX@Z*i%<-A@i32%Pg?XsN#g`tuZgJmwGbUNZmG9m;L( zz0`07nxHC~EQ&A!!jsatqRXeVIX#Q`2!jg7m=Kn+meSJ-;$jgrt{8?gYgh&>n;>iR z{lwRjTV;5ZFUWS+5HG;aY9Qj{@#ZqhHJ6cCbII-+u&g8HgxzI4+LT5U2(nXBhCBzA z<#rtsy7e0_Hd?vf8gK38(G1qo`V7h<4q+{?-O}$0B`9MeLC&@v z?iU0!Zvi-5$eP^`=K*YrhT?*$CZjD~&p<4i^wmoi}~HxAh4I5L&$AvfoJm49{p_W-SvfBFR4OF}((_128~g} zw9>pcefQMFU5_o<{Jxz!E?sp;`EE&gxc%+YjIZjs#Bp&G+%|FwfEf$oz)_^TH^4Q0?Qbg^Z~A$>jg=RAL-auo z8FN`B9m*-=Sl23V9)7EXR>?r{6s=a~gTJEb?~;*|vP*3zubrG611f2t=dnVtoPcat zX?ku_%HT6fO3En)V%g@ALe>@u#M^r~5Q{sm_GL_zXLB9~vVuaxB#{rEy+hw1`rswH zoqRkvO2^6H2anM#=@|M=U(*V)Jnx)9EElQ#d+1jGV9rfZwAgCSLhVT7|LJa@3%`Zc zT5J6VCTh*)C7;MlfEwOyQZ{AiDHYHh6-c&qsPa;3sDrF&!!7Rt6c1E>uC37R@`QA{ z({xO}oEhzbk%PcYn~1GmL43WRFfcir;;|6!0_@sIa?U; zaI8}ma!fl;UY_cxY!&|O4zMVj0`6gewxpa9(#Jv;CduYp;KjHL7)boYe7Nm^MaEVR zQY|dn4CC!av?#r5<8TH_0UcL~0VbSz2TTgcY=_ z@~tz!cSSLRtV~wNkXNJoBZzt*@^IPBldLhX|3oU4xH_xHAhh3WkmrJnSTy{bzmqv?lB9_3ZMBwJ~YPOKCXc8D^tA%B(8d zxS;|BW5}jQmV<^g2%cqPNYjmcHiHdAk~0bd0#57NkYS@9#bZd;3tHM%#&`r*e`5nz zkd!j;v;ub&k`=6thsN6i^cwa|5#O&EXHi~-~*?E+kxt;D6f~^Sn77sDt?gk zReGOGE+L={&Kpp0#0hbvtedit>TEDIT-WINDOW.;407 201953 +(FILECREATED " 7-May-2024 23:02:03" {WMEDLEY}tedit>TEDIT-WINDOW.;461 204524 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.PROCEXITFN \TEDIT.BUTTONEVENTFN) + :CHANGES-TO (FNS TEDIT.NORMALIZECARET) - :PREVIOUS-DATE "21-Mar-2024 21:27:34" {WMEDLEY}TEDIT>TEDIT-WINDOW.;405) + :PREVIOUS-DATE " 6-May-2024 21:04:05" {WMEDLEY}tedit>TEDIT-WINDOW.;460) (PRETTYCOMPRINT TEDIT-WINDOWCOMS) @@ -24,8 +24,7 @@ \TEDIT.SHRINK.ICONCREATE \TEDIT.SHRINKFN \TEDIT.PANEREGION) (FNS \TEDIT.BUTTONEVENTFN \TEDIT.DO.SELOPERATION \TEDIT.TTY.TEXTOBJP \TEDIT.BUTTONEVENTFN.SELOPERATION \TEDIT.BUTTONEVENTFN.INACTIVE - \TEDIT.BUTTONEVENTFN.INTITLE \TEDIT.COPYINSERT) - (P (MOVD? 'NILL '\TEDIT.COPYINSERT)) + \TEDIT.BUTTONEVENTFN.INTITLE \TEDIT.COPYINSERTFN) (FNS \TEDIT.PANE.SPLIT \TEDIT.SPLITW \TEDIT.UNSPLITW) (P (MOVD? 'NILL 'GRAB-TYPED-REGION) (MOVD? 'NILL 'REGISTER-TYPED-REGION)) @@ -51,11 +50,11 @@ (FNS \TEXTSTREAM.TITLE \TEDIT.DEFAULT.TITLE \TEDIT.WINDOW.TITLE \TEXTSTREAM.FILENAME \TEDIT.UPDATE.TITLE)) (COMS (* ; "Screen updating utilities") - (FNS TEDIT.DEACTIVATE.WINDOW \TEDIT.REPAINTFN \TEDIT.AFTERMOVEFN OFFSCREENP - \TEDIT.RESHAPEFN \TEDIT.PANEWITHINSCREEN?) - (FNS \TEDIT.SCROLLFN \TEDIT.SCROLLFLOAT \TEDIT.SCROLLUP \TEDIT.SCROLL.SHOWSEL - \TEDIT.SCROLLDOWN \TEDIT.OFFSCREEN.SCROLL \TEDIT.WHERE.SEL \TEDIT.WHERE.SEL1) - (FNS \TEDIT.ONSCREEN \TEDIT.ONSCREEN? \TEDIT.PANE.SCREENREGION)) + (FNS TEDIT.DEACTIVATE.WINDOW \TEDIT.REPAINTFN \TEDIT.RESHAPEFN) + (FNS \TEDIT.SCROLLFN \TEDIT.SCROLLCH.TOP \TEDIT.SCROLLCH.BOTTOM \TEDIT.SCROLLUP + \TEDIT.SCROLLDOWN \TEDIT.SCROLL.SHOWSEL \TEDIT.WHERE.SEL \TEDIT.WHERE.SEL1 + \TEDIT.VISIBLELINEP) + (FNS \TEDIT.ONSCREEN? \TEDIT.ONSCREEN.REGION \TEDIT.AFTERMOVEFN OFFSCREENP)) (COMS (* ; "Process-world interfaces") (FNS \TEDIT.PROCIDLEFN \TEDIT.PROCENTRYFN \TEDIT.PROCEXITFN)) (COMS (INITVARS (\CARETRATE 333)) @@ -155,8 +154,9 @@ (PUTWINDOWPROP DATUM 'TEDIT-WITHIN-SCREEN NV) NV)))) -(DATATYPE PANE ((XPWINDOW FULLXPOINTER) - PLINES PCARET HOLDDUMMYFIRSTLINE NEXTPANE (PREVPANE XPOINTER)) +(DATATYPE PANE ((XPWINDOW FULLXPOINTER) (* ; + "Change XXPLINES to PLINES when we install this") + XXPLINES PCARET HOLDDUMMYFIRSTLINE NEXTPANE (PREVPANE XPOINTER)) (ACCESSFNS (PWINDOW (PROGN DATUM)))) ) @@ -234,7 +234,8 @@ (DEFINEQ (\TEDIT.CREATEW - [LAMBDA (WINDOW TSTREAM PROPS) (* ; "Edited 20-Mar-2024 09:57 by rmk") + [LAMBDA (WINDOW TSTREAM PROPS) (* ; "Edited 5-May-2024 21:54 by rmk") + (* ; "Edited 20-Mar-2024 09:57 by rmk") (* ; "Edited 14-Jan-2024 22:13 by rmk") (* ; "Edited 18-Dec-2023 23:01 by rmk") (* ; "Edited 25-Nov-2023 10:37 by rmk") @@ -287,7 +288,8 @@ (* ;; "If we can get an intended region first, we don't bother the user with a prompt") (SETQ REGION (if (REGIONP WINDOW) - then (PROG1 WINDOW (SETQ WINDOW NIL)) + then (PROG1 (COPY WINDOW) + (SETQ WINDOW NIL)) else (GRAB-TYPED-REGION REGIONTYPE))) (CL:UNLESS REGION (CLRPROMPT) (* ; "System promptwindow") @@ -854,7 +856,12 @@ (DEFINEQ (\TEDIT.BUTTONEVENTFN - [LAMBDA (PANE) (* ; "Edited 27-Mar-2024 12:25 by rmk") + [LAMBDA (PANE) (* ; "Edited 29-Apr-2024 13:43 by rmk") + (* ; "Edited 24-Apr-2024 09:46 by rmk") + (* ; "Edited 23-Apr-2024 08:53 by rmk") + (* ; "Edited 21-Apr-2024 20:54 by rmk") + (* ; "Edited 10-Apr-2024 23:23 by rmk") + (* ; "Edited 27-Mar-2024 12:25 by rmk") (* ; "Edited 20-Mar-2024 11:01 by rmk") (* ; "Edited 16-Mar-2024 00:22 by rmk") (* ; "Edited 9-Mar-2024 11:59 by rmk") @@ -879,14 +886,13 @@ (* ;; "If no button is down, we got control on button-up transition, so ignore it.") (RESETLST - [PROG ((TEXTOBJ (fetch (TEXTWINDOW WTEXTOBJ) of PANE)) - (DS (WINDOWPROP PANE 'DSP)) + [PROG ((TSTREAM (fetch (TEXTWINDOW WTEXTSTREAM) of PANE)) (X (LASTMOUSEX PANE)) (Y (LASTMOUSEY PANE)) - SOURCESEL SELOPERATION SELFN) - (CL:UNLESS TEXTOBJ (* ; "Not a Tedit window") + TEXTOBJ SOURCESEL SELOPERATION SELFN) + (CL:UNLESS TSTREAM (* ; "Not a Tedit window") (RETURN)) - (TEXTOBJ! TEXTOBJ) + (SETQ TEXTOBJ (TEXTOBJ! (fetch (TEXTWINDOW WTEXTOBJ) of PANE))) (* ;; "Pick off and return from a bunch of peripheral situations, then fall through to the complexities of normal text selection.") @@ -913,7 +919,8 @@ (* ;; "Polling loop, track the mouse until the buttons/keys come up.") (SETQ SELOPERATION (\TEDIT.BUTTONEVENTFN.SELOPERATION TEXTOBJ)) - (bind (OSELOP _ SELOPERATION) + (bind (DS _ (WINDOWPROP PANE 'DSP)) + (OSELOP _ SELOPERATION) (OLDX _ MIN.SMALLP) (OLDY _ MIN.SMALLP) (PREG _ (DSPCLIPPINGREGION NIL PANE)) @@ -921,9 +928,9 @@ (* ; "Get the storage and looks") (SETQ OSEL (FGETTOBJ TEXTOBJ SCRATCHSEL2)) (AND T (SETQ OSEL (create SELECTION - SELTEXTOBJ _ TEXTOBJ))) + SELTEXTSTREAM _ TSTREAM))) (* ; - "TAKE THIS OUT WHEN SELTEXTOBJ GOES") + "TAKE THIS OUT WHEN SELTEXTSTREAM GOES") (\TEDIT.SET.SEL.LOOKS OSEL SELOPERATION) (SELECTQ SELOPERATION ((NORMAL DELETE) @@ -962,14 +969,14 @@ (SETQ EXTENDFLG NIL) (if (\TEDIT.MOUSESTATE LEFT) then (* ; "Left selects char/point") - (SETQ SOURCESEL (\TEDIT.SELECT X Y TEXTOBJ (FGETTOBJ + (SETQ SOURCESEL (\TEDIT.SELECT X Y TSTREAM (FGETTOBJ TEXTOBJ MOUSEREGION ) NIL SELOPERATION PANE)) elseif (\TEDIT.MOUSESTATE MIDDLE) then (* ; "Middle selects word/line") - (SETQ SOURCESEL (\TEDIT.SELECT X Y TEXTOBJ (FGETTOBJ + (SETQ SOURCESEL (\TEDIT.SELECT X Y TSTREAM (FGETTOBJ TEXTOBJ MOUSEREGION ) @@ -992,7 +999,7 @@ (SETQ SELOPERATION 'PENDINGDEL) (\TEDIT.SET.SEL.LOOKS SOURCESEL 'DELETE)) (SETQ SOURCESEL (\TEDIT.COPYSEL (\TEDIT.EXTEND.SEL X Y - SOURCESEL TEXTOBJ + SOURCESEL TSTREAM SELOPERATION PANE))) (SETQ EXTENDFLG T)) (CL:WHEN [AND SELFN SOURCESEL (FGETSEL SOURCESEL SET) @@ -1043,9 +1050,12 @@ (* ;  "Bail if we didn't end up with an active selection") (RETURN)) - (CL:UNLESS (INSIDEP (DSPCLIPPINGREGION NIL PANE) - X Y) (* ; - "Didn't end inside the window, abort cleanly") + (CL:UNLESS (AND (INSIDEP (DSPCLIPPINGREGION NIL PANE) + X Y) + (OR (EQ SELOPERATION 'NORMAL) + (IGREATERP (FGETSEL SOURCESEL DCH) + 0))) (* ; + "Didn't end inside the window or empty abnormal selection, abort cleanly") (\TEDIT.SHOWSEL SOURCESEL NIL) (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) NIL) @@ -1071,12 +1081,13 @@ 'WHENOPERATEDONFN) (FGETSEL SOURCESEL SELOBJ) PANE - 'SELECTED SOURCESEL (FGETTOBJ TEXTOBJ STREAMHINT))) + 'SELECTED SOURCESEL (fetch (TEXTWINDOW WTEXTSTREAM) of PANE))) (CL:WHEN SELFN (* ; "Maybe for logging of selections?") (APPLY* SELFN TEXTOBJ SOURCESEL SELOPERATION 'FINAL))]))]) (\TEDIT.DO.SELOPERATION - [LAMBDA (SOURCESEL SELOPERATION TEXTOBJ PANE) (* ; "Edited 21-Feb-2024 20:08 by rmk") + [LAMBDA (SOURCESEL SELOPERATION TEXTOBJ PANE) (* ; "Edited 22-Apr-2024 23:52 by rmk") + (* ; "Edited 21-Feb-2024 20:08 by rmk") (* ; "Edited 19-Feb-2024 00:13 by rmk") (* ;; "Executes SELOPERATION in the TTY process. If the TTY process is a Tedit process (either this one or another one) and doesn't demand a COPYINSERT, this is accomplished by setting variables in that process' command loop.Otherwise, does a COPYINSERT into the TTY. ") @@ -1088,11 +1099,11 @@ (FGETTOBJ TTYTEXTOBJ EDITOPACTIVE))) (SETQ TTYTEXTOBJ NIL)) (SELECTQ SELOPERATION - (COPY (CL:UNLESS TTYTEXTOBJ - (\TEDIT.COPYINSERT TTYW SOURCESEL) (* ; "Copy is done, nothing more to do") + (COPY (CL:UNLESS TTYTEXTOBJ (* ; "Going to non-TEDIT") + (\TEDIT.COPYINSERTFN TTYW SOURCESEL) (* ; "Copy is done, nothing more to do") (SETQ SELOPERATION NIL))) (MOVE (CL:UNLESS TTYTEXTOBJ - (\TEDIT.COPYINSERT TTYW SOURCESEL) (* ; + (\TEDIT.COPYINSERTFN TTYW SOURCESEL) (* ;  "Copy is done, have to delete source") (if T then (* ; @@ -1150,7 +1161,8 @@ (T 'NORMAL]) (\TEDIT.BUTTONEVENTFN.INACTIVE - [LAMBDA (TEXTOBJ PANE) (* ; "Edited 16-Mar-2024 00:22 by rmk") + [LAMBDA (TEXTOBJ PANE) (* ; "Edited 24-Apr-2024 09:45 by rmk") + (* ; "Edited 16-Mar-2024 00:22 by rmk") (* ; "Edited 9-Feb-2024 00:00 by rmk") (* ; "Edited 27-Jan-2024 11:40 by rmk") @@ -1185,7 +1197,7 @@ (* ;; "Why do we need a Middle-button menu to restart a dead window. If it's clicked in, just restart it.") (SETTOBJ TEXTOBJ EDITOPACTIVE NIL) - (TEDIT (GETTOBJ TEXTOBJ STREAMHINT) + (TEDIT (fetch (TEXTWINDOW WTEXTSTREAM) of PANE) PANE) NIL]) @@ -1220,27 +1232,30 @@ (ADD.PROCESS (LIST USERFN (KWOTE PANE))))] T)]) -(\TEDIT.COPYINSERT - [LAMBDA (TTYW SOURCESEL) (* ; "Edited 17-Feb-2024 12:52 by rmk") +(\TEDIT.COPYINSERTFN + [LAMBDA (TTYW SOURCESEL) (* ; "Edited 29-Apr-2024 13:37 by rmk") + (* ; "Edited 22-Apr-2024 23:47 by rmk") + (* ; "Edited 17-Feb-2024 12:52 by rmk") (* ;; "Inserts the information in SOURCESEL into the TTY window.") - (if (AND NIL (WINDOWPROP TTYW 'COPYINSERTFN)) - then - (* ;; "This is a stub for a definition that knows how to do a looked string object, given that the destination TTY window has a COPYINSERTFN. OBJECTFROMSEL is in {LFG}tedit/UNBREAKABLESTRING") - - (COPYINSERT (OBJECTFROMSEL SOURCESEL)) - else - (* ;; "Have to go character by character because COPYINSERT does (PRIN2 BKSYSBUF), which creates undesired string quotes.") - - (for CHNO CH (SOURCETOBJ _ (GETSEL SOURCESEL SELTEXTOBJ)) from (FGETSEL SOURCESEL CH#) - to (SUB1 (FGETSEL SOURCESEL CHLIM)) while (SETQ CH (TEDIT.NTHCHARCODE SOURCETOBJ CHNO)) - do (CL:IF (IMAGEOBJP CH) - (COPYINSERT CH) - (BKSYSBUF (CHARACTER CH)))]) + (CL:WHEN (IGREATERP (GETSEL SOURCESEL DCH) + 0) (* ; "If empty, nothing to do") + [if (AND NIL (WINDOWPROP TTYW 'COPYINSERTFN)) + then + (* ;; "This is a stub for a definition that knows how to do a looked string object, given that the destination TTY window has a COPYINSERTFN. OBJECTFROMSEL is in {LFG}tedit/UNBREAKABLESTRING") + + (COPYINSERT (OBJECTFROMSEL SOURCESEL)) + else + (* ;; "Have to go character by character because COPYINSERT does (PRIN2 BKSYSBUF), which creates undesired string quotes.") + + (for CHNO CH (SOURCESTREAM _ (GETSEL SOURCESEL SELTEXTSTREAM)) + from (FGETSEL SOURCESEL CH#) to (SUB1 (FGETSEL SOURCESEL CHLIM)) + while (SETQ CH (TEDIT.NTHCHARCODE SOURCESTREAM CHNO)) + do (CL:IF (IMAGEOBJP CH) + (COPYINSERT CH) + (BKSYSBUF (CHARACTER CH)))])]) ) - -(MOVD? 'NILL '\TEDIT.COPYINSERT) (DEFINEQ (\TEDIT.PANE.SPLIT @@ -1304,7 +1319,9 @@ T)]) (\TEDIT.SPLITW - [LAMBDA (OLDPANE Y) (* ; "Edited 20-Mar-2024 11:01 by rmk") + [LAMBDA (OLDPANE Y) (* ; "Edited 5-May-2024 23:13 by rmk") + (* ; "Edited 24-Apr-2024 09:42 by rmk") + (* ; "Edited 20-Mar-2024 11:01 by rmk") (* ; "Edited 15-Mar-2024 22:00 by rmk") (* ; "Edited 8-Feb-2024 23:38 by rmk") (* ; "Edited 2-Jan-2024 19:21 by rmk") @@ -1320,20 +1337,32 @@ (LET ((WREG (WINDOWPROP OLDPANE 'REGION)) (TEXTOBJ (TEXTOBJ! (fetch (TEXTWINDOW WTEXTOBJ) of OLDPANE))) + (TSTREAM (fetch (TEXTWINDOW WTEXTSTREAM) of OLDPANE)) (NEXTPANE (fetch (TEXTWINDOW NEXTPANE) of OLDPANE)) - ATTACHEDWINDOWS NEWPANE PROPS NEWFIRSTLINE SEL) + ATTACHEDWINDOWS NEWPANE PROPS NEWFIRSTLINE SEL LASTVISIBLE) + + (* ;; "Get the Y-position where we're to make the split--it's either supplied or we use the mouse's Y position.") + (CL:UNLESS Y - (SETQ Y (LASTMOUSEY OLDPANE))) (* ; "Get the Y-position where we're to make the split--it's either supplied or we use the mouse's Y position.") + (SETQ Y (LASTMOUSEY OLDPANE))) (CL:WHEN NEXTPANE (* ;  "If there's already a pane below this one, detach it for the moment.") (DETACHWINDOW NEXTPANE)) (SETQ ATTACHEDWINDOWS (WINDOWPROP OLDPANE 'ATTACHEDWINDOWS NIL)) + + (* ;; + "Reshape the original window to form the upper pane. This fixes/displays the current selection.") + (SHAPEW OLDPANE (create REGION using WREG BOTTOM _ (IPLUS (fetch BOTTOM of WREG) Y) HEIGHT _ (IDIFFERENCE (fetch HEIGHT of WREG) Y))) - (* ; - "Reshape the original window to form the upper pane. This fixes/displays the current selection.") + (SETQ LASTVISIBLE (for L (BOTTOM _ (fetch BOTTOM of (DSPCLIPPINGREGION NIL OLDPANE))) + inlines (PLINES OLDPANE) + unless (AND (FGETLD L NEXTLINE) + (IGEQ (FGETLD (FGETLD L NEXTLINE) + YBOT) + BOTTOM)) do (RETURN L))) (* ;; "Attach the new window, without disturbing the pre-existing attached windows") @@ -1359,8 +1388,7 @@ [SETQ PROPS (APPEND '(NOTITLE T PROMPTWINDOW DON'T TITLEMENUFN NILL) (COPY (FGETTOBJ TEXTOBJ EDITPROPS] - (\TEDIT.MINIMAL.WINDOW.SETUP NEWPANE (FGETTOBJ TEXTOBJ STREAMHINT) - PROPS OLDPANE) + (\TEDIT.MINIMAL.WINDOW.SETUP NEWPANE TSTREAM PROPS OLDPANE) (* ;; "Insert L1 and LN cells for NEWPANEafter OLDPANE's cells in each selection. The selections were created when the original textsteam was opened.") @@ -1374,11 +1402,9 @@ (* ;; "Create the FIRSTLINE of NEWPANE starting at the character just after the last line of the now-shrunken OLDPANE.") - [SETQ NEWFIRSTLINE (for L inlines (fetch (TEXTWINDOW PLINES) of OLDPANE) - unless (FGETLD L NEXTLINE) - do (RETURN (\TEDIT.FORMATLINE TEXTOBJ (ADD1 (FGETLD L LCHARLIM] - (\TEDIT.WINDOW.SETUP NEWPANE (FGETTOBJ TEXTOBJ STREAMHINT) - PROPS OLDPANE NEWFIRSTLINE) + (CL:WHEN LASTVISIBLE + [SETQ NEWFIRSTLINE (\TEDIT.FORMATLINE TEXTOBJ (ADD1 (FGETLD LASTVISIBLE LCHARLIM]) + (\TEDIT.WINDOW.SETUP NEWPANE TSTREAM PROPS OLDPANE NEWFIRSTLINE) (CL:WHEN NEWFIRSTLINE (\TEDIT.FILLPANE (GETLD NEWFIRSTLINE PREVLINE) TEXTOBJ NEWPANE)) @@ -1952,7 +1978,8 @@ (replace (TEXTWINDOW WTEXTSTREAM) of W with NIL]) (\TEDIT.REPAINTFN - [LAMBDA (PANE) (* ; "Edited 20-Mar-2024 06:43 by rmk") + [LAMBDA (PANE) (* ; "Edited 5-May-2024 22:41 by rmk") + (* ; "Edited 20-Mar-2024 06:43 by rmk") (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 13-Dec-2023 23:27 by rmk") (* ; "Edited 30-Nov-2023 10:02 by rmk") @@ -1974,56 +2001,16 @@ (FSETSEL SEL ONFLG NIL) (for P PLINES inpanes (PROGN TEXTOBJ) do (\TEDIT.LINES.BELOW (fetch (TEXTWINDOW PLINES) of P) - NIL P TEXTOBJ)) + NIL P TEXTOBJ) + (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE)) (CL:WHEN WASON (\TEDIT.FIXSEL SEL TEXTOBJ) (* ;  "Account for new lines and highlighting") (\TEDIT.SHOWSEL SEL T)))]) -(\TEDIT.AFTERMOVEFN - [LAMBDA (PANE) (* ; "Edited 20-Jan-2024 23:22 by rmk") - (* ; "Edited 21-Dec-2023 17:18 by rmk") - (* ; "Edited 20-Dec-2023 00:33 by rmk") - - (* ;; "If PANE was partly off screen before this move, then repaint it. If it is still off screen after this move, record that for the next move.") - (* ; "Edited 17-Dec-2023 17:31 by rmk") - (CL:WHEN (WINDOWPROP PANE 'OFFSCREEN) - (\TEDIT.REPAINTFN PANE)) - (WINDOWPROP PANE 'OFFSCREEN (OFFSCREENP PANE]) - -(OFFSCREENP - [LAMBDA (WINDOW) (* ; "Edited 19-Mar-2024 23:30 by rmk") - (* ; "Edited 20-Jan-2024 23:23 by rmk") - (* ; "Edited 21-Dec-2023 17:17 by rmk") - (* ; "Edited 17-Dec-2023 17:27 by rmk") - - (* ;; "Returns a list indicating which boundaries of the window is offscreen. Also includes VERTICAL or HORIZONTAL, if one of those respective dimensions is off.") - - (LET ((REGION (WINDOWREGION WINDOW)) - (SCREEN (fetch (WINDOW SCREEN) of WINDOW)) - RESULT) - (CL:WHEN (ILESSP (fetch LEFT of REGION) - 0) - (PUSH RESULT 'LEFT)) - (CL:WHEN (IGREATERP (fetch RIGHT of REGION) - (fetch (SCREEN SCWIDTH) of SCREEN)) - (PUSH RESULT 'RIGHT)) - (CL:WHEN (OR (MEMB 'LEFT RESULT) - (MEMB 'RIGHT RESULT)) - (PUSH RESULT 'HORIZONTAL)) - (CL:WHEN (IGREATERP (fetch TOP of REGION) - (fetch (SCREEN SCHEIGHT) of SCREEN)) - (PUSH RESULT 'TOP)) - (CL:WHEN (ILESSP (fetch BOTTOM of REGION) - 0) - (PUSH RESULT 'BOTTOM)) - (CL:WHEN (OR (MEMB 'TOP RESULT) - (MEMB 'BOTTOM RESULT)) - (PUSH RESULT 'VERTICAL)) - RESULT]) - (\TEDIT.RESHAPEFN - [LAMBDA (PANE BITS OLDREGION) (* ; "Edited 20-Mar-2024 06:46 by rmk") + [LAMBDA (PANE BITS OLDREGION) (* ; "Edited 3-May-2024 23:36 by rmk") + (* ; "Edited 20-Mar-2024 06:46 by rmk") (* ; "Edited 16-Mar-2024 00:02 by rmk") (* ; "Edited 20-Jan-2024 23:02 by rmk") (* ; "Edited 2-Jan-2024 12:43 by rmk") @@ -2039,79 +2026,62 @@ (* ;; "This is called after the window has been reshaped, we have to redisplay") - (PROG ((TEXTOBJ (fetch (TEXTWINDOW WTEXTOBJ) of PANE)) - (PREG (DSPCLIPPINGREGION NIL PANE)) - NEWPHEIGHT PLINES LINE) - (CL:UNLESS TEXTOBJ (* ; "Not a Tedit window") - (RETURN)) - (CL:UNLESS (SETQ PLINES (fetch (TEXTWINDOW PLINES) of PANE)) + (PROG* ((TSTREAM (fetch (TEXTWINDOW WTEXTSTREAM) of PANE)) + (TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + (PREG (DSPCLIPPINGREGION NIL PANE)) + NEWPHEIGHT PLINES LINE) + (CL:UNLESS TEXTOBJ (* ; "Not a Tedit window") + (RETURN)) + (CL:UNLESS (SETQ PLINES (fetch (TEXTWINDOW PLINES) of PANE)) - (* ;; "Should always be a dummy line, but...") + (* ;; "Should always be a dummy line, but...") - (RETURN)) - (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) - NIL) (* ; + (RETURN)) + (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) + NIL) (* ;  "Turn off the selection while we make changes") - (SETQ NEWPHEIGHT (fetch HEIGHT of PREG)) - (FSETTOBJ TEXTOBJ WTOP NEWPHEIGHT) (* ; + (SETQ NEWPHEIGHT (fetch HEIGHT of PREG)) + (FSETTOBJ TEXTOBJ WTOP NEWPHEIGHT) (* ;  "Save new height/width for later use") - (FSETTOBJ TEXTOBJ WRIGHT (fetch WIDTH of PREG)) - (FSETTOBJ TEXTOBJ WBOTTOM (fetch BOTTOM of PREG)) - (FSETTOBJ TEXTOBJ WLEFT (fetch LEFT of PREG)) + (FSETTOBJ TEXTOBJ WRIGHT (fetch WIDTH of PREG)) + (FSETTOBJ TEXTOBJ WBOTTOM (fetch BOTTOM of PREG)) + (FSETTOBJ TEXTOBJ WLEFT (fetch LEFT of PREG)) (* ;; "Hunt for the first line that had been visible, so we can find the CH# that has to appear at the top of the pane. THIS SHOULD JUST BE (NEXTLINE PLINES), IF WE ALWAYS FLUSH UNSEEN LINES.") - (SETQ LINE (find L (OLDPHEIGHT _ (fetch HEIGHT of OLDREGION)) inlines (GETLD PLINES - NEXTLINE) - suchthat (ILESSP (FGETLD L LTRUEYTOP) - OLDPHEIGHT))) - (SETLD PLINES YBOT NEWPHEIGHT) - (CL:WHEN LINE (* ; + (SETQ LINE (find L (OLDPHEIGHT _ (fetch HEIGHT of OLDREGION)) + inlines (GETLD PLINES NEXTLINE) suchthat (ILESSP (FGETLD L LTRUEYTOP) + OLDPHEIGHT))) + (SETLD PLINES YBOT NEWPHEIGHT) + (CL:WHEN LINE (* ;  "If nothing visible then, nothing now") - (CL:WHEN (IGREATERP (FGETTOBJ TEXTOBJ TEXTLEN) - 0) - [SETQ LINE (CADR (\TEDIT.LINES.ABOVE TEXTOBJ (FGETLD LINE LCHAR1]) - (CL:UNLESS (EQ LINE PLINES) (* ; + (CL:WHEN (IGREATERP (FGETTOBJ TEXTOBJ TEXTLEN) + 0) + [SETQ LINE (CADR (\TEDIT.LINES.ABOVE TSTREAM (FGETLD LINE LCHAR1]) + (CL:UNLESS (EQ LINE PLINES) (* ;  "Forget the old chain of line descriptors") - (LINKLD PLINES LINE)) (* ; + (LINKLD PLINES LINE)) (* ;  "Fix the line to appear at the top of the pane") - (SETYPOS LINE (IDIFFERENCE NEWPHEIGHT (FGETLD LINE LHEIGHT))) - (\TEDIT.DISPLAYLINE TEXTOBJ LINE PANE) (* ; "Actually display it") - (\TEDIT.FILLPANE LINE TEXTOBJ PANE)) - (\TEDIT.FIXSEL (FGETTOBJ TEXTOBJ SEL) - TEXTOBJ) (* ; + (SETYPOS LINE (IDIFFERENCE NEWPHEIGHT (FGETLD LINE LHEIGHT))) + (\TEDIT.DISPLAYLINE TEXTOBJ LINE PANE) (* ; "Actually display it") + (\TEDIT.FILLPANE LINE TEXTOBJ PANE)) + (\TEDIT.FIXSEL (FGETTOBJ TEXTOBJ SEL) + TEXTOBJ) (* ;  "Fix up the selection to account for the line shuffling") - (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) - T]) - -(\TEDIT.PANEWITHINSCREEN? - [LAMBDA (PANE) (* ; "Edited 20-Nov-2023 13:43 by rmk") - (* ; "Edited 10-May-2023 23:37 by rmk") - - (* ;; "True if PANE is completely within the screen and therefore that it is safe to reuse image-bits that were previously displayed anywhere within PANE's clipping region.") - - (* ;; " \TEDIT.AFTERMOVEFN should record this as a property on the PANE. Also, if this is false after a move, then the aftermovefn should force a redisplay. ") - - (* ;; - "Since TEDIT doesn't (yet) support horizontal scrolling), we only test the vertical dimension") - - (* ;; " ") - - (LET [(PANEREG (WINDOWPROP PANE 'REGION] - (AND (IGEQ (fetch (REGION BOTTOM) of PANEREG) - 0) - (OR T (IGEQ (fetch (REGION LEFT) of PANEREG) - 0)) - (ILEQ (fetch (REGION PTOP) of PANEREG) - SCREENHEIGHT) - (OR T (ILEQ (fetch (REGION PRIGHT) of PANEREG) - SCREENWIDTH]) + (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) + T]) ) (DEFINEQ (\TEDIT.SCROLLFN [LAMBDA (PANE DX DY) + (* ;; "Edited 29-Apr-2024 15:04 by rmk") + + (* ;; "Edited 27-Apr-2024 11:31 by rmk") + + (* ;; "Edited 24-Apr-2024 11:28 by rmk") + (* ;; "Edited 20-Mar-2024 11:02 by rmk") (* ;; "Edited 10-Mar-2024 22:23 by rmk") @@ -2124,117 +2094,141 @@  "Edited 18-Feb-2022 14:53 by rmk: Repaint after scrolling for panes that are partially off-screen") (TOTOPW PANE) - (PROG [(TEXTOBJ (TEXTOBJ! (fetch (TEXTWINDOW PTEXTOBJ) of PANE] - (if (ZEROP (FGETTOBJ TEXTOBJ TEXTLEN)) - then - (* ;; "Don't scroll a zero-length file") - - (RETURN) - elseif (FGETTOBJ TEXTOBJ EDITOPACTIVE) - then - (* ;; "Don't scroll while something interesting is happening!") - - (TEDIT.PROMPTPRINT TEXTOBJ "Edit operation in progress." T) - (RETURN)) - (CL:UNLESS (\GETSTREAM (FGETTOBJ TEXTOBJ STREAMHINT) - 'INPUT T) - (\TEDIT.REOPENTEXTSTREAM TEXTOBJ)) - (CL:WHEN (GETTEXTPROP TEXTOBJ 'PRESCROLLFN) - (DOUSERFNS (GETTEXTPROP TEXTOBJ 'PRESCROLLFN) - PANE)) (* ; + (PROG* [(TSTREAM (fetch (TEXTWINDOW WTEXTSTREAM) of PANE)) + (TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM] + (if (ZEROP (FGETTOBJ TEXTOBJ TEXTLEN)) + then + (* ;; "Don't scroll a zero-length file") + + (RETURN) + elseif (FGETTOBJ TEXTOBJ EDITOPACTIVE) + then + (* ;; "Don't scroll while something interesting is happening!") + + (TEDIT.PROMPTPRINT TEXTOBJ "Edit operation in progress." T) + (RETURN)) + (CL:UNLESS (\GETSTREAM TSTREAM 'INPUT T) + (\TEDIT.REOPENTEXTSTREAM TEXTOBJ)) + (CL:WHEN (GETTEXTPROP TEXTOBJ 'PRESCROLLFN) + (DOUSERFNS (GETTEXTPROP TEXTOBJ 'PRESCROLLFN) + PANE)) (* ;  "Turn off selections during the scroll.") - (if (FLOATP DY) - then (\TEDIT.SCROLLFLOAT TEXTOBJ PANE DY) - elseif (IGREATERP DY 0) - then (\TEDIT.SCROLLUP TEXTOBJ PANE DY) - elseif (ILESSP DY 0) - then (\TEDIT.SCROLLDOWN TEXTOBJ PANE DY)) - (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE) - (CL:WHEN (GETTEXTPROP TEXTOBJ 'POSTSCROLLFN) (* ; "For user subsystem cleanup") - (DOUSERFNS (GETTEXTPROP TEXTOBJ 'POSTSCROLLFN) - PANE))) + (if (FLOATP DY) + then (\TEDIT.SCROLLCH.TOP TSTREAM PANE (IMAX [IMIN (SUB1 (TEXTLEN TEXTOBJ)) + (FIXR (FTIMES DY (TEXTLEN TEXTOBJ] + 1)) + elseif (IGREATERP DY 0) + then (\TEDIT.SCROLLUP TSTREAM PANE DY) + elseif (ILESSP DY 0) + then (\TEDIT.SCROLLDOWN TSTREAM PANE DY)) + (CL:WHEN (GETTEXTPROP TEXTOBJ 'POSTSCROLLFN) (* ; "For user subsystem cleanup") + (DOUSERFNS (GETTEXTPROP TEXTOBJ 'POSTSCROLLFN) + PANE))) NIL]) -(\TEDIT.SCROLLFLOAT - [LAMBDA (TEXTOBJ PANE DY) (* ; "Edited 20-Mar-2024 06:46 by rmk") - (* ; "Edited 15-Mar-2024 22:00 by rmk") - (* ; "Edited 22-Jan-2024 10:43 by rmk") - (* ; "Edited 20-Jan-2024 23:13 by rmk") - (* ; "Edited 2-Jan-2024 11:02 by rmk") - (* ; "Edited 13-Dec-2023 23:24 by rmk") - (* ; "Edited 4-Dec-2023 11:25 by rmk") - (* ; "Edited 28-Nov-2023 12:10 by rmk") - (* ; "Edited 24-Nov-2023 13:00 by rmk") - (* ; "Edited 22-Nov-2023 14:42 by rmk") - (* ; "Edited 20-Nov-2023 14:19 by rmk") - (* ; "Edited 3-Nov-2023 12:10 by rmk") - (* ; "Edited 30-Mar-2023 23:38 by rmk") +(\TEDIT.SCROLLCH.TOP + [LAMBDA (TSTREAM PANE CHNO) (* ; "Edited 3-May-2024 23:37 by rmk") + (* ; "Edited 30-Apr-2024 22:23 by rmk") + (* ; "Edited 29-Apr-2024 11:19 by rmk") + (* ; "Edited 25-Apr-2024 11:08 by rmk") + + (* ;; "Scrolls so that the line containing CHNO is at the top of PANE. This is the body of the earlier \TEDIT.SCROLLFLOAT.") - (* ;; "Thumb scrolling, DY is FLOATP.") + (* ;; "This calculates what the line would be whether or not PANE is partially off-screen") - (LET ((CH# (IMAX [IMIN (SUB1 (TEXTLEN TEXTOBJ)) - (FIXR (FTIMES DY (TEXTLEN TEXTOBJ] - 1)) + (LET ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) (PREG (DSPCLIPPINGREGION NIL PANE)) - (SEL (FGETTOBJ TEXTOBJ SEL)) - PHEIGHT NEWTOP) + SEL PHEIGHT CHLINE DY) (SETQ PHEIGHT (fetch HEIGHT of PREG)) (* ; "Height of the pane") - (* ;; - "Does any currently formatted line include the target char? This will become the new top line") - - (SETQ NEWTOP (find L inlines (GETLD (fetch (TEXTWINDOW PLINES) of PANE) - NEXTLINE) suchthat (WITHINLINEP CH# L))) - (COND - (NEWTOP + (* ;; "Does any currently formatted line include the target char? This becomes the target to be moved to its desired position") - (* ;; - "If so, convert to an integer scroll so the screen is not blanked and reformatted unnecessarily") - - [SETQ DY (COND - [(ILEQ PHEIGHT (GETLD NEWTOP YBOT)) - (* ; - "NEWTOP is off the top of the window") - (IMINUS (for L inlines (GETLD NEWTOP NEXTLINE) - while (ILEQ PHEIGHT (FGETLD L YBOT)) - sum - (* ;; - "sum the heights of all lines between the NEWTOP and the present top line") - - (FGETLD L LHEIGHT] - (T (* ; - "NEWTOP is in the window or below, raise it up") - (IDIFFERENCE (IDIFFERENCE PHEIGHT (GETLD NEWTOP YBOT)) - (GETLD NEWTOP LHEIGHT] - (if (IGREATERP DY 0) - then (\TEDIT.SCROLLUP TEXTOBJ PANE DY) - elseif (ILESSP DY 0) - then (\TEDIT.SCROLLDOWN TEXTOBJ PANE DY))) - (T - (* ;; "There is no current line to be moved to the top of the pane. The line containing CH# becomes the new topline of the pane") - - [SETQ NEWTOP (CADR (\TEDIT.LINES.ABOVE TEXTOBJ CH# (fetch BOTTOM of PREG] - (SETYPOS NEWTOP (IDIFFERENCE PHEIGHT (GETLD NEWTOP LHEIGHT))) - (LINKLD (fetch (TEXTWINDOW PLINES) of PANE) - NEWTOP) (* ; + (SETQ CHLINE (find L inlines (GETLD (fetch (TEXTWINDOW PLINES) of PANE) + NEXTLINE) suchthat (WITHINLINEP CHNO L))) + (if CHLINE + then + (* ;; + "If CHNO is visisible, figure out what it would take to move it to PANE's top") + + [SETQ DY (if (ILEQ PHEIGHT (FGETLD CHLINE YBOT)) + then (* ; + "CHLINE is off the top of the window") + (IMINUS (for L inlines (FGETLD CHLINE NEXTLINE) + while (ILEQ PHEIGHT (FGETLD L YBOT)) + sum + (* ;; + "sum the heights of all lines between CHLINE and the present top line") + + (FGETLD L LHEIGHT))) + else (* ; + "CHLINE is in the window (or below?)") + (IDIFFERENCE PHEIGHT (FGETLD CHLINE YTOP] + (if (IGREATERP DY 0) + then (\TEDIT.SCROLLUP TSTREAM PANE DY) + elseif (ILESSP DY 0) + then (\TEDIT.SCROLLDOWN TSTREAM PANE DY)) + else + (* ;; "CHNO is not in any line currently visible in PANE, we have to construct one. ") + + (SETQ SEL (FGETTOBJ TEXTOBJ SEL)) + (\TEDIT.SHOWSEL SEL NIL PANE TEXTOBJ) + [SETQ CHLINE (CADR (\TEDIT.LINES.ABOVE TSTREAM CHNO (fetch BOTTOM of PREG] + (SETYPOS CHLINE (IDIFFERENCE PHEIGHT (GETLD CHLINE LHEIGHT))) + (LINKLD (fetch (TEXTWINDOW PLINES) of PANE) + CHLINE) (* ;  "New block lines replace previous pane lines") - (\TEDIT.CLEARPANE PANE) + (\TEDIT.CLEARPANE PANE) - (* ;; + (* ;;  "Maybe replace the rest of this with \TEDIT.REPAINTFN ? \FILLPANE adds the dummy lines") - (\TEDIT.FILLPANE (fetch (TEXTWINDOW PLINES) of PANE) - TEXTOBJ PANE) - (\TEDIT.FIXSEL SEL TEXTOBJ NIL PANE) - (CL:WHEN (FGETSEL SEL ONFLG) + (\TEDIT.FILLPANE (fetch (TEXTWINDOW PLINES) of PANE) + TEXTOBJ PANE) + (\TEDIT.FIXSEL SEL TEXTOBJ NIL PANE) + (\TEDIT.SHOWSEL SEL T PANE TEXTOBJ) + (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE]) + +(\TEDIT.SCROLLCH.BOTTOM + [LAMBDA (TSTREAM PANE CHNO) (* ; "Edited 2-May-2024 00:27 by rmk") + (* ; "Edited 29-Apr-2024 11:18 by rmk") + (* ; "Edited 25-Apr-2024 11:08 by rmk") + + (* ;; "Scrolls so that the line containing CHNO is at the bottom of PANE. ") + + (* ;; "This calculates where the line would be whether or not PANE is partially off-screen.") - (* ;; "Tell the selection that none of its hilighting is current onscreen (BLTSHADE above), then restore it. ") + (LET [CHLINE DY LASTVISIBLELINE (TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM] - (FSETSEL SEL ONFLG NIL) - (\TEDIT.SHOWSEL SEL T PANE))]) + (* ;; "Reposition any currently formatted line that includes the target char. If not such line, simple strategy is to make the line at the top, then move it down. Not particularly efficient for a tall window, since this would make all the lines below the target, then throw them away and make all the lines above the target. Could be more efficient if we give \TEDIT.SCROLLCH.TOP an extra %"single line%" argument.") + + (SETQ CHLINE (for L inlines (GETLD (PLINES PANE) + NEXTLINE) do (CL:WHEN (WITHINLINEP CHNO L) + (RETURN L)) finally (SETQ + LASTVISIBLELINE + $$PREVLINE))) + (CL:UNLESS CHLINE + (SETQ CHLINE (\TEDIT.LINES.BELOW LASTVISIBLELINE CHNO PANE TEXTOBJ T T)) + (CL:WHEN CHLINE + (SETQ CHLINE (FGETLD CHLINE NEXTLINE)))) + (CL:WHEN CHLINE + + (* ;; "We have CHLINE and all the lines above. Figure out what it would take to move CHLINE to PANE's bottom") + + (SETQ DY (IDIFFERENCE (fetch BOTTOM of (DSPCLIPPINGREGION NIL PANE)) + (FGETLD CHLINE YBOT))) + (if (IGREATERP DY 0) + then (\TEDIT.SCROLLUP TSTREAM PANE DY) + elseif (ILESSP DY 0) + then (\TEDIT.SCROLLDOWN TSTREAM PANE DY)))]) (\TEDIT.SCROLLUP - [LAMBDA (TEXTOBJ PANE DY) (* ; "Edited 20-Mar-2024 06:43 by rmk") + [LAMBDA (TSTREAM PANE DY) (* ; "Edited 6-May-2024 21:03 by rmk") + (* ; "Edited 29-Apr-2024 15:06 by rmk") + (* ; "Edited 27-Apr-2024 10:30 by rmk") + (* ; "Edited 24-Apr-2024 11:28 by rmk") + (* ; "Edited 22-Apr-2024 21:56 by rmk") + (* ; "Edited 9-Apr-2024 10:14 by rmk") + (* ; "Edited 20-Mar-2024 06:43 by rmk") (* ; "Edited 15-Mar-2024 19:23 by rmk") (* ; "Edited 14-Dec-2023 00:00 by rmk") (* ; "Edited 4-Dec-2023 20:49 by rmk") @@ -2243,73 +2237,74 @@ (* ; "Edited 28-Apr-2023 08:55 by rmk") (* ; "Edited 24-Apr-2023 23:48 by rmk") + (* ;; "VBOTTOM is the bottom of the visible region of the pane, in pane coordinates. Positive if the bottom is off-screen, 0 otherwise.") + + (* ;; + "It might seem that VTOP would be better than VHEIGHT, but that misses the true OLDTOPLINE.") + (* ;; "Scrolling up, with positive integer DY. We first have to find a line that is or would be DY below the top of the pane, then we move that line to the top and fill in beneath.") - (PROG ((PREG (DSPCLIPPINGREGION NIL PANE)) - (TEXTLEN (FGETTOBJ TEXTOBJ TEXTLEN)) - PBOTTOM PHEIGHT PLINES OLDTOPLINE NEWTOPLINE LASTVISIBLE WHERESEL DELTA) - (SETQ PHEIGHT (fetch HEIGHT of PREG)) (* ; "Height of the pane") - (SETQ PBOTTOM (\TEDIT.ONSCREEN? PANE 'BOTTOM)) (* ; "Effective bottom") - (SETQ PLINES (fetch (TEXTWINDOW PLINES) of PANE)) - (CL:WHEN (IGREATERP (GETLD (GETLD PLINES NEXTLINE) - LCHARLIM) - TEXTLEN) - (HELP 'TOP)) (* ; "Currently formatted PANE lines") + (PROG* ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + (VBOTTOM (\TEDIT.ONSCREEN? PANE 'BOTTOM)) + (PHEIGHT (fetch HEIGHT of (DSPCLIPPINGREGION NIL PANE))) + (TEXTLEN (FGETTOBJ TEXTOBJ TEXTLEN)) + OLDTOPLINE NEWTOPLINE WHERESEL) (* ; "Currently formatted PANE lines") (* ;; "Find the first line at least DY below the top of the pane. ") (* ;; "The initial scan from PLINES is needed in case invisible lines have been kept in the chain above the current top line. ") - (SETQ OLDTOPLINE (find L inlines (GETLD PLINES NEXTLINE) - suchthat (ILEQ (FGETLD L YTOP) - PHEIGHT))) - (CL:UNLESS OLDTOPLINE + (SETQ OLDTOPLINE (find L (PHEIGHT _ (fetch HEIGHT of (DSPCLIPPINGREGION NIL PANE))) + inlines (GETLD (PLINES PANE) + NEXTLINE) suchthat (ILEQ (FGETLD L YTOP) + PHEIGHT))) + (CL:UNLESS OLDTOPLINE - (* ;; "Relative scrolling doesn't make sense if there isn't at least one visible line currently at the top of the pane.") + (* ;; "Relative scrolling doesn't make sense if there isn't at least one visible line currently at the top of the pane.") - (RETURN)) + (RETURN)) - (* ;; "") + (* ;; "VBOTTOM is the visible bottom, the bottom of the clipping subregion that is onscreen") - (SETQ WHERESEL (\TEDIT.WHERE.SEL TEXTOBJ OLDTOPLINE PANE)) + (SETQ WHERESEL (\TEDIT.WHERE.SEL TEXTOBJ OLDTOPLINE PANE VBOTTOM)) (* ;; "") (* ;; "Walk down a sequence of lines until we arrive at a line that is DY from the top. If we run off the bottom of existing lines, keep formatting until we finally exhaust DY or reach the end of the text. Unlike the scroll-down case, we know we are starting from a properly broken line, we don't have to search for a stable paragraph break.") - [SETQ NEWTOPLINE (for L NEXT inlines OLDTOPLINE - first (CL:WHEN NIL - (ILESSP (IPLUS DY (FGETLD OLDTOPLINE LTRUEYTOP)) - PHEIGHT) + [SETQ NEWTOPLINE (for L NEXT inlines OLDTOPLINE + first (CL:WHEN NIL + (ILESSP (IPLUS DY (FGETLD OLDTOPLINE LTRUEYTOP)) + PHEIGHT) (* ;; "If the old truetop would still be visible after raising DY, then move it up by DY. This effectively discounts the white space of paragraph leading. Maybe we also want to discount the white space of line-leading below, by using LTRUEHEIGHT instead of LHEIGHT to determine the new bottom line") - (SETQ NEXT (\TEDIT.FORMATLINE TEXTOBJ (FGETLD OLDTOPLINE - LCHAR1))) - (LINKLD NEXT (FGETLD OLDTOPLINE NEXTLINE)) - (SETYPOS NEXT (IPLUS DY (FGETLD OLDTOPLINE YBOT))) - (RETURN NEXT)) - do (add DY (IMINUS (FGETLD L LHEIGHT))) - (CL:WHEN (OR (ILEQ DY 0) - (IGEQ (FGETLD L LCHARLIM) - TEXTLEN)) - (RETURN L)) - (CL:UNLESS (FGETLD L NEXTLINE) + (SETQ NEXT (\TEDIT.FORMATLINE TEXTOBJ (FGETLD OLDTOPLINE + LCHAR1))) + (LINKLD NEXT (FGETLD OLDTOPLINE NEXTLINE)) + (SETYPOS NEXT (IPLUS DY (FGETLD OLDTOPLINE YBOT))) + (RETURN NEXT)) + do (add DY (IMINUS (FGETLD L LHEIGHT))) + (CL:WHEN (OR (ILEQ DY 0) + (IGEQ (FGETLD L LCHARLIM) + TEXTLEN)) + (RETURN L)) + (CL:UNLESS (FGETLD L NEXTLINE) (* ;; "Continue by formatting a new, undisplayed line. This can happen if DY (say from an explicit SCROLLW call) picks a line that is somewhere below the pane. The newline is linked in as L's NEXTLINE, but its NEXTLINE is NIL, so we keep running through here. The new line is positioned properly with respect to the current OLDTOPLINE (so are all lines we have crossed over or formatted, but those will be thrown away.)") - [SETQ NEXT (\TEDIT.FORMATLINE TEXTOBJ (ADD1 (FGETLD L LCHARLIM] - (LINKLD L NEXT) (* ; + [SETQ NEXT (\TEDIT.FORMATLINE TEXTOBJ (ADD1 (FGETLD L LCHARLIM] + (LINKLD L NEXT) (* ;  "So we find NEXT on the next iteration") - (\TEDIT.LINE.BOTTOM NEXT))] - (CL:UNLESS NEWTOPLINE (* ; + (\TEDIT.LINE.BOTTOM NEXT))] + (CL:UNLESS NEWTOPLINE (* ;  "If nothing found, nothing can be done") - (RETURN)) - (CL:WHEN (EQ OLDTOPLINE NEWTOPLINE) (* ; "Move at least one line") - (SETQ NEWTOPLINE (FGETLD OLDTOPLINE NEXTLINE))) - (CL:UNLESS (AND NEWTOPLINE (ILEQ (FGETLD NEWTOPLINE LCHARLIM) - TEXTLEN)) - (RETURN)) + (RETURN)) + (CL:WHEN (EQ OLDTOPLINE NEWTOPLINE) (* ; "Move at least one line") + (SETQ NEWTOPLINE (FGETLD OLDTOPLINE NEXTLINE))) + (CL:UNLESS (AND NEWTOPLINE (ILEQ (FGETLD NEWTOPLINE LCHARLIM) + TEXTLEN)) + (RETURN)) (* ;; "") @@ -2317,91 +2312,31 @@ (* ;; "Lines above NEWTOPLINE are chopped off, it and all lines below must be repositioned to the top of PANE, and new lines must be created to fill the space after the last visible line is raised. ") - (LINKLD PLINES NEWTOPLINE) (* ; + (LINKLD (PLINES PANE) + NEWTOPLINE) (* ;  "Chop off lines above that are no longer visible") (* ;; "") - (CL:UNLESS (IGEQ (GETLD NEWTOPLINE YBOT) - PBOTTOM) (* ; - "Not visible, SUB1 to display not quite at the top, then raise") - (\TEDIT.LINE.BOTTOM NEWTOPLINE) - (\TEDIT.DISPLAYLINE TEXTOBJ NEWTOPLINE PANE)) + (CL:UNLESS (IGEQ (GETLD NEWTOPLINE YBOT) + VBOTTOM) (* ; "Ensure it's visible?") + (\TEDIT.LINE.BOTTOM NEWTOPLINE) + (\TEDIT.DISPLAYLINE TEXTOBJ NEWTOPLINE PANE)) (* ;; "") - (* ;; "Raise NEWTOPLINE so that its top is at PHEIGHT, and reposition all lines below. DELTA presumably is (or is close to) the original DY.") - - (SETQ DELTA (IDIFFERENCE PHEIGHT (FGETLD NEWTOPLINE YTOP))) - (for L inlines NEWTOPLINE while (IGEQ (FGETLD L YBOT) - PBOTTOM) do (SETYPOS L (IPLUS DELTA (FGETLD L YBOT))) - (SETQ LASTVISIBLE L)) - - (* ;; "") - - (* ;; "The effective PBOTTOM is the bottom of the clipping region that is onscreen") - - (BITBLT PANE 0 PBOTTOM PANE 0 (IPLUS PBOTTOM DELTA) - (fetch WIDTH of PREG) - (FGETLD NEWTOPLINE YTOP) - 'INPUT - 'REPLACE) - (CL:WHEN LASTVISIBLE - - (* ;; "Clear any garbage left over below the (repositioned) LASTVISIBLELINE, and display new lines needed to fill the space") + (* ;; "Raise NEWTOPLINE so that its top is at PHEIGHT, and reposition all lines below. ") - (BLTSHADE WHITESHADE PANE 0 0 (fetch WIDTH of PREG) - (FGETLD LASTVISIBLE YBOT) - 'REPLACE) - (\TEDIT.LINES.BELOW LASTVISIBLE NIL PANE TEXTOBJ)) - (\TEDIT.SCROLL.SHOWSEL 'UP WHERESEL PANE TEXTOBJ LASTVISIBLE]) - -(\TEDIT.SCROLL.SHOWSEL - [LAMBDA (DIRECTION WHERESEL PANE TEXTOBJ VISIBLELINE) (* ; "Edited 15-Mar-2024 13:36 by rmk") - (* ; "Edited 18-Feb-2024 15:24 by rmk") - (* ; "Edited 28-Nov-2023 22:58 by rmk") - - (* ;; "This synchronizes the selection hilighting and caret to correspond to lines that up- or down-scrolling has newly revealed. It assumes that the hilighting of previously and still visible lines have been carried along with BITBLT. VISIBLELINE is the last visible line (above or below) that bounds the region that needs to be redisplayed.") - - (CL:WHEN WHERESEL (* ; "SEL was on, but now off.") - (LET ((SEL (FGETTOBJ TEXTOBJ SEL))) - (if (OR (EQ 'BELOW (CAR WHERESEL)) - (EQ 'ABOVE (CDR WHERESEL))) - then - (* ;; - "No lines previously visible, they might come from above or below, in the ordinary way.") - - (FSETSEL SEL ONFLG NIL) - (\TEDIT.FIXSEL SEL TEXTOBJ NIL PANE) - (\TEDIT.SHOWSEL SEL T PANE) - else - (* ;; - "Old lines were visible and therefore highlighted, newly revealed lines may need to catch up. ") - - (FSETSEL SEL ONFLG T) - (\TEDIT.FIXSEL SEL TEXTOBJ NIL PANE) - (SELECTQ DIRECTION - (UP - (* ;; "lastline is not highlighted when it comes up") - - (CL:WHEN (AND (EQ 'BELOW (CDR WHERESEL)) - VISIBLELINE - (FGETLD VISIBLELINE NEXTLINE) - (\TEDIT.SEL.LN SEL PANE TEXTOBJ)) - (\TEDIT.SHOWSEL.HILIGHT TEXTOBJ (FGETLD VISIBLELINE NEXTLINE) - (\TEDIT.SEL.LN SEL PANE TEXTOBJ) - PANE SEL))) - (DOWN (* ; - "First line is not highlighted when it comes down") - (CL:WHEN (EQ 'ABOVE (CAR WHERESEL)) - (\TEDIT.SHOWSEL.HILIGHT TEXTOBJ (\TEDIT.SEL.L1 SEL PANE TEXTOBJ) - (FGETLD VISIBLELINE PREVLINE) - PANE SEL))) - (SHOULDNT)) - (\TEDIT.SETCARET SEL PANE TEXTOBJ T))))]) + (\TEDIT.SCROLL.SHOWSEL 'UP WHERESEL PANE TEXTOBJ (\TEDIT.RAISE.LINES NEWTOPLINE PHEIGHT + PANE TEXTOBJ]) (\TEDIT.SCROLLDOWN - [LAMBDA (TEXTOBJ PANE DY) (* ; "Edited 19-Mar-2024 23:34 by rmk") + [LAMBDA (TSTREAM PANE DY) (* ; "Edited 29-Apr-2024 15:06 by rmk") + (* ; "Edited 27-Apr-2024 08:13 by rmk") + (* ; "Edited 24-Apr-2024 11:29 by rmk") + (* ; "Edited 22-Apr-2024 21:39 by rmk") + (* ; "Edited 10-Apr-2024 08:20 by rmk") + (* ; "Edited 19-Mar-2024 23:34 by rmk") (* ; "Edited 15-Mar-2024 22:02 by rmk") (* ; "Edited 20-Jan-2024 23:13 by rmk") (* ; "Edited 2-Jan-2024 00:25 by rmk") @@ -2413,113 +2348,130 @@ (* ;; "Add new lines that fill DYat the top of PANE. The needed lines are first constructed, then pushed in front of any old lines. The NEWTOPLINE is positioned at the top of the window, and all other lines are then positioned relative to it. The current Y positions of all lines are ignored, new positions are determined based on LHEIGHTs.") - (* ;; "The bitmap corresponding to the old-line positions are moved so that they correlate with their new positions, and resulting garbage at the bottom of the window is cleared, and then the newlines are displayed to fill the space at the top.") + (* ;; "The bitmap corresponding to the old-line positions are moved so that they correlate with their new positions, resulting garbage at the bottom of the window is cleared, and then the newlines are displayed to fill the space at the top.") (* ;; " ") (SETQ DY (IMINUS DY)) (* ; "Now positive") - (PROG ((PREG (DSPCLIPPINGREGION NIL PANE)) - (VBOTTOM (\TEDIT.ONSCREEN? PANE 'BOTTOM)) - (PLINES (fetch (TEXTWINDOW PLINES) of PANE)) - PHEIGHT PBOTTOM OLDTOPLINE TOPOFOLD NEWTOPLINE WHERESEL LASTVISIBLE) - (SETQ PHEIGHT (fetch HEIGHT of PREG)) (* ; - "Height of the pane. Presumably there are no old lines above it, but...") - (SETQ PBOTTOM (fetch BOTTOM of PREG)) - (SETQ OLDTOPLINE (find L inlines (GETLD PLINES NEXTLINE) - suchthat (ILESSP (FGETLD L YBOT) - PHEIGHT))) + (PROG* ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + (PREG (DSPCLIPPINGREGION NIL PANE)) + (VBOTTOM (\TEDIT.ONSCREEN? PANE 'BOTTOM)) + [VTOP (ADD1 (\TEDIT.ONSCREEN? PANE 'TOP] + (VLEFT (\TEDIT.ONSCREEN? PANE 'LEFT)) + (PLINES (fetch (TEXTWINDOW PLINES) of PANE)) + OLDTOPLINE TOPOFOLD NEWTOPLINE WHERESEL LASTVISIBLE PBOTTOM DELTA) + + (* ;; "There could be left-over lines above the pane> Or it could be that the top of the pane is off the screen, in which case VTOP (in the window's coordinate system) gets the last onscreen line. Either way, OLDTOPLINE is the line at the top of the visible bitmap.") + + (SETQ PBOTTOM (fetch BOTTOM of PREG)) + (SETQ OLDTOPLINE (find L inlines (GETLD PLINES NEXTLINE) + suchthat (ILESSP (FGETLD L YBOT) + VTOP))) + (CL:WHEN (AND OLDTOPLINE (ILEQ (GETLD OLDTOPLINE LCHAR1) + 1)) + (RETURN)) (* ;;  "Look backwards from the line before OLDTOP. IMAX and HEIGHT+1 to scroll at least one line") - (CL:WHEN (AND OLDTOPLINE (ILEQ (GETLD OLDTOPLINE LCHAR1) - 1)) - (RETURN)) - (* ;; "") - (SETQ NEWTOPLINE (if OLDTOPLINE - then (SETQ TOPOFOLD (FGETLD OLDTOPLINE YTOP)) - (\TEDIT.BACKFORMAT TEXTOBJ (IMAX DY (ADD1 (FGETLD OLDTOPLINE - LHEIGHT))) - (SUB1 (FGETLD OLDTOPLINE LCHAR1)) - (FGETLD OLDTOPLINE LHEIGHT)) - else + (SETQ NEWTOPLINE (if OLDTOPLINE + then (SETQ TOPOFOLD (FGETLD OLDTOPLINE YTOP)) + (\TEDIT.BACKFORMAT TSTREAM (IMAX DY (ADD1 (FGETLD OLDTOPLINE + LHEIGHT))) + (SUB1 (FGETLD OLDTOPLINE LCHAR1)) + (FGETLD OLDTOPLINE LHEIGHT)) + else (* ;; "If we didn't find a visible line, we must be looking at the tail end of the text. We will need to bring down some of its final lines. ") - (\TEDIT.BACKFORMAT TEXTOBJ DY (FGETTOBJ TEXTOBJ TEXTLEN) - 0))) - (CL:UNLESS NEWTOPLINE (RETURN)) - (SETQ WHERESEL (\TEDIT.WHERE.SEL TEXTOBJ OLDTOPLINE PANE)) + (\TEDIT.BACKFORMAT TSTREAM DY (FGETTOBJ TEXTOBJ TEXTLEN) + 0))) + (CL:UNLESS NEWTOPLINE (RETURN)) + (SETQ WHERESEL (\TEDIT.WHERE.SEL TEXTOBJ OLDTOPLINE PANE PBOTTOM)) - (* ;; "NEWTOPLINE is at least one new line in front of OLDTOPLINE. We concatenate them into a single chain with Ypositions adjusted so that the top of NEWTOPLINE is at PHEIGHT. ") + (* ;; "NEWTOPLINE is at least one new line in front of OLDTOPLINE. We concatenate them into a single chain with Ypositions adjusted so that the top of NEWTOPLINE is at VHEIGHT. LASTVISIBLE is the line at the bottom of the window.") - (SETQ LASTVISIBLE (\TEDIT.NCONC.LINES NEWTOPLINE OLDTOPLINE PHEIGHT PBOTTOM)) - (LINKLD PLINES NEWTOPLINE) + (SETQ LASTVISIBLE (\TEDIT.NCONC.LINES NEWTOPLINE OLDTOPLINE VTOP VBOTTOM)) + (LINKLD PLINES NEWTOPLINE) - (* ;; "All the needed lines have been constructed, linked, and positioned; some trailing lines may have been chopped. We now try to be clever and flicker-free about updating the display, although at this point a simple repaint will give the proper display. ") + (* ;; "All the needed lines have been constructed, linked, and positioned in the window's coordinate system. Some trailing lines may have been chopped. We now try to be clever and flicker-free about updating the display, although at this point a simple repaint will give the proper display. ") - (CL:UNLESS (\TEDIT.OFFSCREEN.SCROLL TEXTOBJ PANE 'TOP) - (CL:WHEN (AND OLDTOPLINE (IGEQ (FGETLD OLDTOPLINE YBOT) - (FGETLD LASTVISIBLE YBOT))) + (* ;; "We have to operate in the bitmap's coordinate system, which may be partially offscreen") - (* ;; "The images for at least OLDTOPLINE and any lines below are currently in the bitmap. Move it down. ") + (CL:WHEN (AND OLDTOPLINE (IGEQ (FGETLD OLDTOPLINE YBOT) + (FGETLD LASTVISIBLE YBOT))) - (BITBLT PANE 0 (IPLUS VBOTTOM (IDIFFERENCE TOPOFOLD (FGETLD OLDTOPLINE YTOP))) - PANE 0 VBOTTOM (fetch WIDTH of PREG) - PHEIGHT - 'INPUT - 'REPLACE)) - (CL:WHEN LASTVISIBLE (* ; - "Clear out any cruft in the bitmap that lowering might have produced.") - (BLTSHADE WHITESHADE PANE 0 PBOTTOM (fetch WIDTH of PREG) - (FGETLD LASTVISIBLE YBOT) - 'REPLACE)) + (* ;; "The images for at least OLDTOPLINE and any lines below are currently in the bitmap. Move it down. ") - (* ;; - "Display the new lines. No need to clear the rectangle first, \DISPLAYLINE fills the bitmap") + (SETQ DELTA (IDIFFERENCE TOPOFOLD (FGETLD OLDTOPLINE YTOP))) - (for L inlines NEWTOPLINE until (EQ L OLDTOPLINE) do (\TEDIT.DISPLAYLINE TEXTOBJ L PANE - )) - (\TEDIT.SCROLL.SHOWSEL 'DOWN WHERESEL PANE TEXTOBJ OLDTOPLINE))) - NIL]) + (* ;; "If VBOTTOM isn't 0, then the bottom is off the screen--no bitmap.") -(\TEDIT.OFFSCREEN.SCROLL - [LAMBDA (TEXTOBJ PANE BOUNDARY) (* ; "Edited 19-Mar-2024 23:34 by rmk") - (* ; "Edited 15-Mar-2024 22:00 by rmk") - (* ; "Edited 20-Jan-2024 23:12 by rmk") - (* ; "Edited 2-Jan-2024 12:36 by rmk") - (* ; "Edited 4-Dec-2023 20:57 by rmk") - (* ; "Edited 11-May-2023 11:35 by rmk") - (* ; "Edited 30-May-91 23:34 by jds") + (BITBLT PANE VLEFT VBOTTOM PANE VLEFT (IDIFFERENCE VBOTTOM DELTA) + (fetch WIDTH of PREG) + TOPOFOLD + 'INPUT + 'REPLACE)) + (CL:WHEN LASTVISIBLE (* ; + "Clear out any cruft in the bitmap that lowering might have produced.") + (BLTSHADE WHITESHADE PANE 0 PBOTTOM (fetch WIDTH of PREG) + (FGETLD LASTVISIBLE YBOT) + 'REPLACE)) - (* ;; "Returns NIL if PANE if PANE is not all or partially offscreen because of a previous move. Otherwise, this replaces the normal incremental screen update of the calling function. Essentially, it applies a version of the repaint function for the one offscreen PANE of TEXTOBJ that is being scrolled.") + (* ;; "Display the new lines. No need to clear the rectangle first, \DISPLAYLINE fills the bitmap. We are starting from the line at the top of the on-screen region of the pane (top of the pane unless it is offscreen). The OLDTOPLINE may also not be displayed, so we keep going until we get to the top of what is now the visible (onscreen) region.") - (CL:WHEN (EQMEMB BOUNDARY (WINDOWPROP PANE 'OFFSCREEN)) - (LET (SEL WASON PREVLINE) - (SETQ SEL (FGETTOBJ TEXTOBJ SEL)) - (CL:WHEN (SETQ WASON (GETSEL SEL ONFLG)) - (\TEDIT.SHOWSEL SEL NIL)) (* ; - "Turn off the selection while we make changes") + (for L inlines NEWTOPLINE until (EQ L OLDTOPLINE) do (\TEDIT.DISPLAYLINE TEXTOBJ L PANE)) + (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE) + (\TEDIT.SCROLL.SHOWSEL 'DOWN WHERESEL PANE TEXTOBJ OLDTOPLINE]) - (* ;; "Find the precursor of the target top line.") +(\TEDIT.SCROLL.SHOWSEL + [LAMBDA (DIRECTION WHERESEL PANE TEXTOBJ VISIBLELINE) (* ; "Edited 2-May-2024 00:27 by rmk") + (* ; "Edited 9-Apr-2024 10:08 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") + (* ; "Edited 18-Feb-2024 15:24 by rmk") + (* ; "Edited 28-Nov-2023 22:58 by rmk") + (LET ((SEL (FGETTOBJ TEXTOBJ SEL))) + (if (OR (EQ 'BELOW (CAR WHERESEL)) + (EQ 'ABOVE (CDR WHERESEL)) + (NULL WHERESEL)) + then + (* ;; + "Either no lines previously visible or we don't know. So we just do it the oldfashioned way.") + + (FSETSEL SEL ONFLG NIL) + (\TEDIT.FIXSEL SEL TEXTOBJ NIL PANE) + (\TEDIT.SHOWSEL SEL T PANE) + else + (* ;; + "Old lines were visible and therefore highlighted, newly revealed lines may need to catch up. ") - [SETQ PREVLINE (for L (PHEIGHT _ (fetch HEIGHT of (DSPCLIPPINGREGION NIL PANE))) - inlines (fetch (TEXTWINDOW PLINES) of PANE) - when (ILESSP (FGETLD L YBOT) - PHEIGHT) do (RETURN (FGETLD L PREVLINE)) - finally (RETURN (fetch (TEXTWINDOW PLINES) of PANE] - (\TEDIT.CLEARPANE PANE) - (\TEDIT.FILLPANE PREVLINE TEXTOBJ PANE) - (CL:WHEN WASON - (\TEDIT.FIXSEL SEL TEXTOBJ) (* ; - "Account for any line shuffling and re-highlight") - (\TEDIT.SHOWSEL SEL T))) - T)]) + (FSETSEL SEL ONFLG T) + (\TEDIT.FIXSEL SEL TEXTOBJ NIL PANE) + (SELECTQ DIRECTION + (UP + (* ;; "lastline is not highlighted when it comes up") + + (CL:WHEN (AND (EQ 'BELOW (CDR WHERESEL)) + VISIBLELINE + (FGETLD VISIBLELINE NEXTLINE) + (\TEDIT.SEL.LN SEL PANE TEXTOBJ)) + (\TEDIT.SHOWSEL.HILIGHT TEXTOBJ (FGETLD VISIBLELINE NEXTLINE) + (\TEDIT.SEL.LN SEL PANE TEXTOBJ) + PANE SEL))) + (DOWN (* ; + "First line is not highlighted when it comes down") + (CL:WHEN (EQ 'ABOVE (CAR WHERESEL)) + (\TEDIT.SHOWSEL.HILIGHT TEXTOBJ (\TEDIT.SEL.L1 SEL PANE TEXTOBJ) + (FGETLD VISIBLELINE PREVLINE) + PANE SEL))) + (SHOULDNT)) + (\TEDIT.SETCARET SEL PANE TEXTOBJ T]) (\TEDIT.WHERE.SEL - [LAMBDA (TEXTOBJ TOPLINE PANE) (* ; "Edited 20-Jan-2024 22:17 by rmk") + [LAMBDA (TEXTOBJ TOPLINE PANE VBOTTOM) (* ; "Edited 8-Apr-2024 23:27 by rmk") + (* ; "Edited 20-Jan-2024 22:17 by rmk") (* ; "Edited 28-Nov-2023 11:48 by rmk") (* ; "Edited 25-Nov-2023 15:47 by rmk") (* ; "Edited 24-Nov-2023 12:47 by rmk") @@ -2530,7 +2482,7 @@ (LET (WHERESEL (SEL (FGETTOBJ TEXTOBJ SEL))) (CL:WHEN (AND (FGETSEL SEL SET) (FGETSEL SEL ONFLG)) - (SETQ WHERESEL (\TEDIT.WHERE.SEL1 SEL TOPLINE PANE)) + (SETQ WHERESEL (\TEDIT.WHERE.SEL1 SEL TOPLINE VBOTTOM)) (CL:UNLESS (OR (EQ 'BELOW (CAR WHERESEL)) (EQ 'ABOVE (CDR WHERESEL))) @@ -2541,10 +2493,11 @@ WHERESEL)))]) (\TEDIT.WHERE.SEL1 - [LAMBDA (SEL TOPLINE PANE) (* ; "Edited 24-Nov-2023 12:49 by rmk") + [LAMBDA (SEL TOPLINE VBOTTOM) (* ; "Edited 8-Apr-2024 23:25 by rmk") + (* ; "Edited 24-Nov-2023 12:49 by rmk") (* ; "Edited 18-Nov-2023 23:52 by rmk") - (* ;; "Determines the relationship of the start end end of SEL to the lines that are visible PANE. This assumes that TOPLINE is the first currently visible line. We search PANE for the last selected line, since we don't trust LN.") + (* ;; "Determines the relationship of the start and end of SEL to the lines that are visible in a pane. This assumes that TOPLINE is the first currently visible line, and VBOTTOM is the bottom of the visible region of thepane (0 if the bottom of the pane is onscreen, otherwise positive). We search for the last selected line, since we don't trust LN.") (* ;; "The value is a pair (ABOVE/IN/BELOW, indicating whether the start/end of the selection is above, in, or below the pane.") @@ -2558,13 +2511,12 @@ (* ;; "If we stop at the last SEL line, we will determine that the it is not BELOW") - [SETQ LASTVISIBLE (for L (CHLAST _ (SUB1 (FGETSEL SEL CHLIM))) - (PBOTTOM _ (fetch BOTTOM of (DSPCLIPPINGREGION NIL PANE))) - inlines TOPLINE do (CL:WHEN (WITHINLINEP CHLAST L) - (RETURN L)) - (CL:WHEN (ILESSP (FGETLD L YBOT) - PBOTTOM) - (RETURN (OR $$PREVLINE TOPLINE))) + [SETQ LASTVISIBLE (for L (CHLAST _ (SUB1 (FGETSEL SEL CHLIM))) inlines TOPLINE + do (CL:WHEN (WITHINLINEP CHLAST L) + (RETURN L)) + (CL:WHEN (ILESSP (FGETLD L YBOT) + VBOTTOM) + (RETURN (OR $$PREVLINE TOPLINE))) finally (RETURN (OR $$PREVLINE TOPLINE] (* ;; "(Don't put comment between ifs--they go into the CONS)") @@ -2595,103 +2547,175 @@ 'BELOW else 'IN]) + +(\TEDIT.VISIBLELINEP + [LAMBDA (LINE PANE ONSCREEN) (* ; "Edited 25-Apr-2024 22:25 by rmk") + (* ; "Edited 24-Apr-2024 08:16 by rmk") + (CL:WHEN LINE + + (* ;; "Not sure: TOP or PTOP ? If TOP, ") + + (LET [[TOP (CL:IF ONSCREEN + (\TEDIT.ONSCREEN? PANE 'PTOP) + (fetch PTOP of (DSPCLIPPINGREGION NIL PANE)))] + (BOTTOM (CL:IF ONSCREEN + (\TEDIT.ONSCREEN? PANE 'BOTTOM) + (fetch BOTTOM of (DSPCLIPPINGREGION NIL PANE)))] + (AND (ILEQ (FGETLD LINE YTOP) + TOP) + (IGEQ (FGETLD LINE YBOT) + BOTTOM))))]) ) (DEFINEQ -(\TEDIT.ONSCREEN - [LAMBDA (PANE) (* ; "Edited 19-Nov-2023 20:23 by rmk") - - (* ;; "If the clipping region is entirely onscreen, this returns the BOTTOM and TOP of the clipping region.") - - (* ;; "If it is off the screen at the bottom or top, this returns the effective bottom and top, in clipping region coordinates, of the part of the region that is visible on the screen.") - - (* ;; "This assumes that the clipping region is in the window's coordinate system.") - - (LET ((PREG (DSPCLIPPINGREGION NIL PANE)) - (YOFFSET (DSPYOFFSET NIL PANE))) - (LIST (if (IGEQ YOFFSET 0) - then - (* ;; "Bottom is not below screen, could be above the top") - - (fetch BOTTOM of PREG) - else - (* ;; "Bottom is below screen") - - (IDIFFERENCE (fetch BOTTOM of PREG) - YOFFSET)) - (if (ILEQ (IPLUS YOFFSET (fetch TOP of PREG)) - SCREENHEIGHT) - then - (* ;; "Top is not above screen, could be below the bottom") - - (fetch TOP of PREG) - else - (* ;; "Top is above screen") - - (IDIFFERENCE SCREENHEIGHT YOFFSET]) - (\TEDIT.ONSCREEN? - [LAMBDA (PANE PROP) (* ; "Edited 29-Nov-2023 23:39 by rmk") + [LAMBDA (PANE PROP) (* ; "Edited 25-Apr-2024 22:23 by rmk") + (* ; "Edited 22-Apr-2024 21:56 by rmk") + (* ; "Edited 9-Apr-2024 16:57 by rmk") + (* ; "Edited 29-Nov-2023 23:39 by rmk") (* ;; "If the PROP of PANE is on screen, returns that property of its clipping region (equivalent to (fetch PROP of (DSPCLIPPINGREGION NIL PANE).") - (* ;; " But if that property is off screen, the value gives the position in the clipping region that is still visible. E.g. if the bottom is below the screen by N points (REG's bottom is -N), the return will be the clipping regions bottom _N.") + (* ;; " But if that property is off screen, the value gives the position in clipping region coordinates that is still visible. E.g. if the bottom is below the screen by N points (PREG's bottom is -N), the return is the clipping regions bottom -N.") (LET [VAL (PREG (DSPCLIPPINGREGION NIL PANE)) + (REG (fetch REG of PANE)) (BORDER (OR 0 (WINDOWPROP PANE 'BORDER] (SELECTQ PROP - (BOTTOM (SETQ VAL (fetch (REGION BOTTOM) of (fetch REG of PANE))) + (BOTTOM (SETQ VAL (fetch (REGION BOTTOM) of REG)) (if (ILESSP VAL 0) then (IPLUS BORDER (IDIFFERENCE (fetch BOTTOM of PREG) VAL)) else (fetch BOTTOM of PREG))) - (TOP (SETQ VAL (fetch (REGION TOP) of (fetch REG of PANE))) + (TOP (SETQ VAL (fetch (REGION TOP) of REG)) (if (IGREATERP VAL SCREENHEIGHT) then (IDIFFERENCE (IDIFFERENCE (fetch TOP of PREG) (IDIFFERENCE VAL SCREENHEIGHT)) (WINDOWPROP PANE 'BORDER)) else (fetch TOP of PREG))) - (LEFT (SETQ VAL (fetch (REGION LEFT) of (fetch REG of PANE))) + (LEFT (SETQ VAL (fetch (REGION LEFT) of REG)) (if (ILESSP VAL 0) - then (IPLUS (WINDOWPROP PANE 'BORDER) - (IDIFFERENCE (fetch LEFT of PREG) - VAL)) + then + (* ;; "I don't understand why the border is subtracted instead of added. But this makes \TEDIT.SCROLLUP and \TEDIT.SCROLLDOWN ") + + (IDIFFERENCE (IDIFFERENCE (fetch LEFT of PREG) + VAL) + (WINDOWPROP PANE 'BORDER)) else (fetch (REGION LEFT) of PREG))) - (RIGHT (SETQ VAL (fetch (REGION RIGHT) of (fetch REG of PANE))) + (RIGHT (SETQ VAL (fetch (REGION RIGHT) of REG)) (if (IGREATERP VAL SCREENWIDTH) then (IDIFFERENCE (IDIFFERENCE (fetch RIGHT of PREG) (IDIFFERENCE VAL SCREENWIDTH)) (WINDOWPROP PANE 'BORDER)) else (fetch RIGHT of PREG))) + (HEIGHT (* ; "Height of the onscreen subregion") + (IDIFFERENCE (\TEDIT.ONSCREEN? PANE 'PTOP) + (\TEDIT.ONSCREEN? PANE 'BOTTOM))) + (WIDTH (IDIFFERENCE (\TEDIT.ONSCREEN? PANE 'PRIGHT) + (\TEDIT.ONSCREEN? PANE 'LEFT))) + (PTOP (SETQ VAL (fetch (REGION PTOP) of REG)) + (if (IGREATERP VAL SCREENHEIGHT) + then (IDIFFERENCE (IDIFFERENCE (fetch PTOP of PREG) + (IDIFFERENCE VAL SCREENHEIGHT)) + (WINDOWPROP PANE 'BORDER)) + else (fetch PTOP of PREG))) + (PRIGHT (SETQ VAL (fetch (REGION PRIGHT) of REG)) + (if (IGREATERP VAL SCREENWIDTH) + then (IDIFFERENCE (IDIFFERENCE (fetch PRIGHT of PREG) + (IDIFFERENCE VAL SCREENWIDTH)) + (WINDOWPROP PANE 'BORDER)) + else (fetch PRIGHT of PREG))) (SHOULDNT]) -(\TEDIT.PANE.SCREENREGION - [LAMBDA (PANE) (* ; "Edited 19-Nov-2023 23:58 by rmk") +(\TEDIT.ONSCREEN.REGION + [LAMBDA (WINDOW) (* ; "Edited 6-May-2024 11:31 by rmk") + + (* ;; "This returns the intersection of WINDOW's clipping region and the screen region, in window coordinates. This is the part of the clipping region that is visible on the screen, and presumably has a valid bitmap.") + + (* ;; "If WINDOW is entirely onscreen, the result will be a copy of the clipping region.Otherwise, this returns the subregion of the clipping region that is actually visible.") + + (* ;; "For example, if the bottom of the PANE is below the screen by N points (PREG's bottom is -N), then VBOTTOM is clipping region's bottom + |N|.") + + (HELP "FIX WIDTH AND HEIGHT") + (DECLARE (USEDFREE SCREEN)) + (if (WINDOWPROP WINDOW 'OFFSCREEN) + then (LET ((CREG (DSPCLIPPINGREGION NIL WINDOW)) + [BORDER (OR 0 (WINDOWPROP WINDOW 'BORDER] + (REG (fetch REG of WINDOW)) + VAL VLEFT VBOTTOM VWIDTH VHEIGHT) + (SETQ VAL (fetch (REGION BOTTOM) of REG)) + (SETQ VBOTTOM (if (ILESSP VAL 0) + then (IPLUS VAL BORDER (IDIFFERENCE (fetch BOTTOM of CREG))) + else (fetch BOTTOM of CREG))) + (SETQ VAL (fetch (REGION LEFT) of REG)) + (SETQ VLEFT (if (ILESSP VAL 0) + then + (* ;; "I don't understand why the border is subtracted instead of added. But this makes \TEDIT.SCROLLUP and \TEDIT.SCROLLDOWN ") + + (IDIFFERENCE (IDIFFERENCE (fetch LEFT of CREG) + VAL) + BORDER) + else (fetch (REGION LEFT) of CREG))) + (SETQ VAL (fetch (REGION WIDTH) of CREG)) + (SETQ VWIDTH (if (IGREATERP (IDIFFERENCE (fetch (REGION RIGHT) of REG) + BORDER) + (fetch (SCREEN SCWIDTH) of SCREEN)) + then (IDIFFERENCE (\TEDIT.ONSCREEN? WINDOW 'PRIGHT) + VLEFT) + else VAL)) + (SETQ VAL (fetch (REGION HEIGHT) of CREG)) + (SETQ VHEIGHT (if (IGREATERP VAL SCREENHEIGHT) + then (IDIFFERENCE (\TEDIT.ONSCREEN? WINDOW 'PTOP) + VBOTTOM) + else VAL)) + (create REGION + LEFT _ VLEFT + BOTTOM _ VBOTTOM + WIDTH _ VWIDTH + HEIGHT _ VHEIGHT)) + else (DSPCLIPPINGREGION NIL WINDOW]) - (* ;; "For scrolling when the window is partially offscreen.") +(\TEDIT.AFTERMOVEFN + [LAMBDA (PANE) (* ; "Edited 20-Jan-2024 23:22 by rmk") + (* ; "Edited 21-Dec-2023 17:18 by rmk") + (* ; "Edited 20-Dec-2023 00:33 by rmk") - (* ;; "If the clipping region is entirely onscreen, this returns the clipping region.") + (* ;; "If PANE was partly off screen before this move, then repaint it. If it is still off screen after this move, record that for the next move.") + (* ; "Edited 17-Dec-2023 17:31 by rmk") + (CL:WHEN (WINDOWPROP PANE 'OFFSCREEN) + (\TEDIT.REPAINTFN PANE)) + (WINDOWPROP PANE 'OFFSCREEN (OFFSCREENP PANE]) - (* ;; "If it is off the screen at the bottom or top, this returns the subregion of the clipping region that is actually onscreen.") +(OFFSCREENP + [LAMBDA (WINDOW) (* ; "Edited 19-Mar-2024 23:30 by rmk") + (* ; "Edited 20-Jan-2024 23:23 by rmk") + (* ; "Edited 21-Dec-2023 17:17 by rmk") + (* ; "Edited 17-Dec-2023 17:27 by rmk") - (* ;; "This assumes that the clipping region is in the window's coordinate system.") + (* ;; "Returns a list indicating which boundaries of the window is offscreen. Also includes VERTICAL or HORIZONTAL, if one of those respective dimensions is off.") - (LET ((PREG (DSPCLIPPINGREGION NIL PANE)) - (YOFFSET (DSPYOFFSET NIL PANE)) - BOTTOM HEIGHT) - (if (AND (IGEQ YOFFSET 0) - (ILEQ (IPLUS YOFFSET (fetch PTOP of PREG)) - SCREENHEIGHT)) - then - (* ;; "Top and bottom are on the screen") - - PREG - else (SETQ BOTTOM (IMAX 0 (IDIFFERENCE (fetch BOTTOM of PREG) - YOFFSET))) - (SETQ HEIGHT (IDIFFERENCE (IMIN (fetch PTOP of PREG) - (IPLUS SCREENHEIGHT YOFFSET)) - BOTTOM)) - (create REGION using PREG BOTTOM _ BOTTOM HEIGHT _ HEIGHT]) + (LET ((REGION (WINDOWREGION WINDOW)) + (SCREEN (fetch (WINDOW SCREEN) of WINDOW)) + RESULT) + (CL:WHEN (ILESSP (fetch LEFT of REGION) + 0) + (PUSH RESULT 'LEFT)) + (CL:WHEN (IGREATERP (fetch RIGHT of REGION) + (fetch (SCREEN SCWIDTH) of SCREEN)) + (PUSH RESULT 'RIGHT)) + (CL:WHEN (OR (MEMB 'LEFT RESULT) + (MEMB 'RIGHT RESULT)) + (PUSH RESULT 'HORIZONTAL)) + (CL:WHEN (IGREATERP (fetch TOP of REGION) + (fetch (SCREEN SCHEIGHT) of SCREEN)) + (PUSH RESULT 'TOP)) + (CL:WHEN (ILESSP (fetch BOTTOM of REGION) + 0) + (PUSH RESULT 'BOTTOM)) + (CL:WHEN (OR (MEMB 'TOP RESULT) + (MEMB 'BOTTOM RESULT)) + (PUSH RESULT 'VERTICAL)) + RESULT]) ) @@ -2815,7 +2839,13 @@ (DSPYPOSITION Y (ffetch (TEDITCARET TCCARETDS) of CARET)))]) (TEDIT.NORMALIZECARET - [LAMBDA (TSTREAM SEL EVEN.IF.VISIBLE) (* ; "Edited 21-Mar-2024 21:27 by rmk") + [LAMBDA (TSTREAM SEL EVEN.IF.VISIBLE TOBOTTOM) (* ; "Edited 7-May-2024 23:01 by rmk") + (* ; "Edited 1-May-2024 22:59 by rmk") + (* ; "Edited 29-Apr-2024 15:12 by rmk") + (* ; "Edited 28-Apr-2024 07:55 by rmk") + (* ; "Edited 25-Apr-2024 11:10 by rmk") + (* ; "Edited 9-Apr-2024 19:31 by rmk") + (* ; "Edited 21-Mar-2024 21:27 by rmk") (* ; "Edited 20-Mar-2024 06:46 by rmk") (* ; "Edited 15-Mar-2024 22:00 by rmk") (* ; "Edited 9-Mar-2024 23:39 by rmk") @@ -2829,73 +2859,31 @@ (* ;; "This ensures that the caret is visible in the pane where the selection SEL was made. Other panes are left alone (caret may or may not be visible), presumably because you don't want all the panes to jump to the caret when you are working in just one of them.") - (LET ((TEXTOBJ (TEXTOBJ TSTREAM))) - (CL:UNLESS (FGETTOBJ TEXTOBJ TXTNEEDSUPDATE) - (CL:UNLESS SEL - (SETQ SEL (\DTEST (FGETTOBJ TEXTOBJ SEL) - 'SELECTION))) - (CL:WHEN (AND (FGETSEL SEL SET) - (IGREATERP (FGETTOBJ TEXTOBJ TEXTLEN) - 0)) (* ; - "If the selection isn't set, don't bother.") - - (* ;; "This is essentially %"find selpane in panes%" and the corresponding L1/LN in SEL. SELPANE is the pane of the last selection") - - (for PANE CH# CARETYBOT TOPLINE PREG PHEIGHT PBOTTOM (SELPANE _ - (OR (FGETTOBJ TEXTOBJ - SELPANE) - (\TEDIT.PRIMARYW - TEXTOBJ))) - inpanes TEXTOBJ as L1 inside (FGETSEL SEL L1) as LN inside (FGETSEL SEL LN) - first (CL:UNLESS SELPANE (RETURN)) when (EQ PANE SELPANE) - do - (* ;; - "Find the YBOT in SELPANE of the line with the selected character, if known.") - - (SETQ PREG (DSPCLIPPINGREGION NIL PANE)) - (SETQ PHEIGHT (fetch PTOP of PREG)) - (SETQ PBOTTOM (fetch BOTTOM of PREG)) - - (* ;; - "Find the selected character either at the beginning or end of the selection.") - - [SETQ CH# (IMAX 1 (IMIN (TEXTLEN TEXTOBJ) - (SELECTQ (FGETSEL SEL POINT) - (LEFT (FGETSEL SEL CH#)) - (RIGHT (SUB1 (FGETSEL SEL CHLIM))) - (SHOULDNT] - (SETQ CARETYBOT (SELECTQ (FGETSEL SEL POINT) - (LEFT (AND L1 (GETLD L1 YBOT))) - (RIGHT (AND LN (GETLD LN YBOT))) - NIL)) - - (* ;; - "We don't want to jump around if the caret is already visible in SELPANE, unless EVEN.IF.VISIBLE ") - - (CL:WHEN (OR EVEN.IF.VISIBLE (NOT CARETYBOT) - (IGEQ CARETYBOT PHEIGHT) - (ILESSP CARETYBOT PBOTTOM)) - - (* ;; "Not visible, work to do: Make sure the line containing CH# is linked in and scrolled to the top of the pane. This should be replaceable by \TEDIT.SCROLLFN, with the appropriate DY.") - - (\TEDIT.SHOWSEL SEL NIL SELPANE TEXTOBJ) - (SETQ TOPLINE (CADR (\TEDIT.LINES.ABOVE TEXTOBJ CH# PHEIGHT))) - (SETYPOS TOPLINE (IDIFFERENCE PHEIGHT (GETLD TOPLINE LHEIGHT))) - (LINKLD (fetch (TEXTWINDOW PLINES) of SELPANE) - TOPLINE) - - (* ;; - "Lines are established and positioned. Clear the window, display the first (caret) caret line.") - - (\TEDIT.CLEARPANE PANE) - (\TEDIT.DISPLAYLINE TEXTOBJ TOPLINE SELPANE) - (\TEDIT.FILLPANE TOPLINE TEXTOBJ SELPANE) - (* ; - "And fill out the window from there.") - (\TEDIT.FIXSEL SEL TEXTOBJ NIL SELPANE) - (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ SELPANE) - (\TEDIT.SHOWSEL SEL T SELPANE TEXTOBJ)) - (RETURN))))]) + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (LET ((TEXTOBJ (TEXTOBJ TSTREAM)) + SELPANE CARETLINE) + (CL:UNLESS SEL + (SETQ SEL (\DTEST (FGETTOBJ TEXTOBJ SEL) + 'SELECTION))) + (CL:WHEN [AND (FGETSEL SEL SET) + (IGREATERP (FGETTOBJ TEXTOBJ TEXTLEN) + 0) + (SETQ SELPANE (OR (FGETTOBJ TEXTOBJ SELPANE) + (\TEDIT.PRIMARYW TEXTOBJ] + (SETQ CARETLINE (\TEDIT.CARETLINE SEL SELPANE TEXTOBJ)) + (CL:WHEN (OR EVEN.IF.VISIBLE (NOT (\TEDIT.VISIBLELINEP CARETLINE SELPANE))) + + (* ;; "Move the caret character to either the top or bottom of the pane.") + + (CL:IF TOBOTTOM + (\TEDIT.SCROLLCH.BOTTOM TSTREAM SELPANE (SELECTQ (FGETSEL SEL POINT) + (LEFT (FGETSEL SEL CH#)) + (RIGHT (FGETSEL SEL CHLIM)) + (SHOULDNT))) + (\TEDIT.SCROLLCH.TOP TSTREAM SELPANE (SELECTQ (FGETSEL SEL POINT) + (LEFT (FGETSEL SEL CH#)) + (RIGHT (SUB1 (FGETSEL SEL CHLIM))) + (SHOULDNT))))))]) (\TEDIT.SETCARET [LAMBDA (SEL PANE TEXTOBJ DISPOSITION CARET) (* ; "Edited 15-Dec-2023 23:37 by rmk") @@ -3004,7 +2992,8 @@ (UPDATE/MENU/IMAGE MENU]) (TEDIT.DEFAULT.MENUFN - [LAMBDA (W) (* ; "Edited 20-Mar-2024 11:02 by rmk") + [LAMBDA (W) (* ; "Edited 24-Apr-2024 09:47 by rmk") + (* ; "Edited 20-Mar-2024 11:02 by rmk") (* ; "Edited 15-Mar-2024 18:35 by rmk") (* ; "Edited 9-Mar-2024 11:35 by rmk") (* ; "Edited 29-Feb-2024 17:02 by rmk") @@ -3125,7 +3114,7 @@ (CL:WHEN (CAR ITEM) (* ;  "Apply a user-supplied function to the text stream") (APPLY* (CAR ITEM) - (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ)))])]) + (fetch (TEXTWINDOW WTEXTSTREAM) of W)))])]) (TEDIT.REMOVE.MENUITEM [LAMBDA (MENU ITEM) (* gbn "26-Apr-84 04:06") @@ -3147,7 +3136,8 @@ (T NIL]) (\TEDIT.CREATEMENU - [LAMBDA (ITEMS) (* ; "Edited 16-Oct-87 14:21 by jds") + [LAMBDA (ITEMS) (* ; "Edited 3-Apr-2024 13:30 by rmk") + (* ; "Edited 16-Oct-87 14:21 by jds") (* ;; "Create a TEdit command menu, given a list of menu items.") @@ -3155,8 +3145,8 @@ ITEMS _ ITEMS CENTERFLG _ T MENUFONT _ (FONTCREATE 'HELVETICA 10 'BOLD) - WHENHELDFN _ '\TEDIT.MENU.WHENHELDFN - WHENSELECTEDFN _ '\TEDIT.MENU.WHENSELECTEDFN]) + WHENHELDFN _ (FUNCTION \TEDIT.MENU.WHENHELDFN) + WHENSELECTEDFN _ (FUNCTION \TEDIT.MENU.WHENSELECTEDFN]) (\TEDIT.MENU.WHENHELDFN [LAMBDA (ITEM MENU BUTTON) (* ; "Edited 4-Oct-2022 09:17 by rmk") @@ -3228,34 +3218,33 @@ (RPAQ? TEDIT.TITLED.ICON.TEMPLATE (create TITLEDICON ICON _ TEDITICON MASK _ TEDITMASK TITLEREG _ TEDIT.ICON.TITLE.REGION)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (13090 32895 (\TEDIT.CREATEW 13100 . 19541) (\TEDIT.WINDOW.SETUP 19543 . 22359) ( -\TEDIT.MINIMAL.WINDOW.SETUP 22361 . 30738) (\TEDIT.ADD.CARET 30740 . 32284) (\TEDIT.CLEARPANE 32286 . -32893)) (32896 54069 (\TEDIT.CURSORMOVEDFN 32906 . 36789) (\TEDIT.CURSOROUTFN 36791 . 37236) ( -\TEDIT.ACTIVE.WINDOWP 37238 . 38289) (\TEDIT.EXPANDFN 38291 . 38854) (\TEDIT.MAINW 38856 . 40996) ( -\TEDIT.PRIMARYW 40998 . 41638) (\TEDIT.NEWREGIONFN 41640 . 44156) (\TEDIT.SET.WINDOW.EXTENT 44158 . -49021) (\TEDIT.SHRINK.ICONCREATE 49023 . 51563) (\TEDIT.SHRINKFN 51565 . 51974) (\TEDIT.PANEREGION -51976 . 54067)) (54070 78734 (\TEDIT.BUTTONEVENTFN 54080 . 69847) (\TEDIT.DO.SELOPERATION 69849 . -72131) (\TEDIT.TTY.TEXTOBJP 72133 . 72557) (\TEDIT.BUTTONEVENTFN.SELOPERATION 72559 . 73948) ( -\TEDIT.BUTTONEVENTFN.INACTIVE 73950 . 76163) (\TEDIT.BUTTONEVENTFN.INTITLE 76165 . 77684) ( -\TEDIT.COPYINSERT 77686 . 78732)) (78769 93880 (\TEDIT.PANE.SPLIT 78779 . 82999) (\TEDIT.SPLITW 83001 - . 89562) (\TEDIT.UNSPLITW 89564 . 93878)) (95236 96021 (TEDITWINDOWP 95246 . 96019)) (96058 99046 ( -TEDIT.GETINPUT 96068 . 98511) (\TEDIT.MAKEFILENAME 98513 . 99044)) (99095 107084 (TEDIT.PROMPTWINDOW -99105 . 99419) (TEDIT.PROMPTPRINT 99421 . 101857) (TEDIT.PROMPTCLEAR 101859 . 103578) ( -TEDIT.PROMPTFLASH 103580 . 105512) (\TEDIT.PROMPT.PAGEFULLFN 105514 . 107082)) (107322 115201 ( -\TEXTSTREAM.TITLE 107332 . 108022) (\TEDIT.DEFAULT.TITLE 108024 . 110403) (\TEDIT.WINDOW.TITLE 110405 - . 112462) (\TEXTSTREAM.FILENAME 112464 . 114134) (\TEDIT.UPDATE.TITLE 114136 . 115199)) (115244 -131492 (TEDIT.DEACTIVATE.WINDOW 115254 . 121837) (\TEDIT.REPAINTFN 121839 . 123638) ( -\TEDIT.AFTERMOVEFN 123640 . 124394) (OFFSCREENP 124396 . 126003) (\TEDIT.RESHAPEFN 126005 . 130314) ( -\TEDIT.PANEWITHINSCREEN? 130316 . 131490)) (131493 160656 (\TEDIT.SCROLLFN 131503 . 133408) ( -\TEDIT.SCROLLFLOAT 133410 . 138238) (\TEDIT.SCROLLUP 138240 . 145938) (\TEDIT.SCROLL.SHOWSEL 145940 . -148691) (\TEDIT.SCROLLDOWN 148693 . 154301) (\TEDIT.OFFSCREEN.SCROLL 154303 . 156647) ( -\TEDIT.WHERE.SEL 156649 . 157869) (\TEDIT.WHERE.SEL1 157871 . 160654)) (160657 165779 (\TEDIT.ONSCREEN - 160667 . 162122) (\TEDIT.ONSCREEN? 162124 . 164437) (\TEDIT.PANE.SCREENREGION 164439 . 165777)) ( -165821 168438 (\TEDIT.PROCIDLEFN 165831 . 167368) (\TEDIT.PROCENTRYFN 167370 . 167815) ( -\TEDIT.PROCEXITFN 167817 . 168436)) (168517 182211 (\TEDIT.DOWNCARET 168527 . 169320) ( -\TEDIT.FLASHCARET 169322 . 171139) (\TEDIT.UPCARET 171141 . 172245) (TEDIT.NORMALIZECARET 172247 . -177942) (\TEDIT.SETCARET 177944 . 181784) (\TEDIT.CARET 181786 . 182209)) (182245 195923 ( -TEDIT.ADD.MENUITEM 182255 . 184546) (TEDIT.DEFAULT.MENUFN 184548 . 193263) (TEDIT.REMOVE.MENUITEM -193265 . 194262) (\TEDIT.CREATEMENU 194264 . 194701) (\TEDIT.MENU.WHENHELDFN 194703 . 195608) ( -\TEDIT.MENU.WHENSELECTEDFN 195610 . 195921))))) + (FILEMAP (NIL (13146 33109 (\TEDIT.CREATEW 13156 . 19755) (\TEDIT.WINDOW.SETUP 19757 . 22573) ( +\TEDIT.MINIMAL.WINDOW.SETUP 22575 . 30952) (\TEDIT.ADD.CARET 30954 . 32498) (\TEDIT.CLEARPANE 32500 . +33107)) (33110 54283 (\TEDIT.CURSORMOVEDFN 33120 . 37003) (\TEDIT.CURSOROUTFN 37005 . 37450) ( +\TEDIT.ACTIVE.WINDOWP 37452 . 38503) (\TEDIT.EXPANDFN 38505 . 39068) (\TEDIT.MAINW 39070 . 41210) ( +\TEDIT.PRIMARYW 41212 . 41852) (\TEDIT.NEWREGIONFN 41854 . 44370) (\TEDIT.SET.WINDOW.EXTENT 44372 . +49235) (\TEDIT.SHRINK.ICONCREATE 49237 . 51777) (\TEDIT.SHRINKFN 51779 . 52188) (\TEDIT.PANEREGION +52190 . 54281)) (54284 80500 (\TEDIT.BUTTONEVENTFN 54294 . 70890) (\TEDIT.DO.SELOPERATION 70892 . +73333) (\TEDIT.TTY.TEXTOBJP 73335 . 73759) (\TEDIT.BUTTONEVENTFN.SELOPERATION 73761 . 75150) ( +\TEDIT.BUTTONEVENTFN.INACTIVE 75152 . 77494) (\TEDIT.BUTTONEVENTFN.INTITLE 77496 . 79015) ( +\TEDIT.COPYINSERTFN 79017 . 80498)) (80501 96097 (\TEDIT.PANE.SPLIT 80511 . 84731) (\TEDIT.SPLITW +84733 . 91779) (\TEDIT.UNSPLITW 91781 . 96095)) (97453 98238 (TEDITWINDOWP 97463 . 98236)) (98275 +101263 (TEDIT.GETINPUT 98285 . 100728) (\TEDIT.MAKEFILENAME 100730 . 101261)) (101312 109301 ( +TEDIT.PROMPTWINDOW 101322 . 101636) (TEDIT.PROMPTPRINT 101638 . 104074) (TEDIT.PROMPTCLEAR 104076 . +105795) (TEDIT.PROMPTFLASH 105797 . 107729) (\TEDIT.PROMPT.PAGEFULLFN 107731 . 109299)) (109539 117418 + (\TEXTSTREAM.TITLE 109549 . 110239) (\TEDIT.DEFAULT.TITLE 110241 . 112620) (\TEDIT.WINDOW.TITLE +112622 . 114679) (\TEXTSTREAM.FILENAME 114681 . 116351) (\TEDIT.UPDATE.TITLE 116353 . 117416)) (117461 + 130525 (TEDIT.DEACTIVATE.WINDOW 117471 . 124054) (\TEDIT.REPAINTFN 124056 . 126062) (\TEDIT.RESHAPEFN + 126064 . 130523)) (130526 160665 (\TEDIT.SCROLLFN 130536 . 132781) (\TEDIT.SCROLLCH.TOP 132783 . +136577) (\TEDIT.SCROLLCH.BOTTOM 136579 . 138824) (\TEDIT.SCROLLUP 138826 . 146342) (\TEDIT.SCROLLDOWN +146344 . 153218) (\TEDIT.SCROLL.SHOWSEL 153220 . 155651) (\TEDIT.WHERE.SEL 155653 . 156985) ( +\TEDIT.WHERE.SEL1 156987 . 159838) (\TEDIT.VISIBLELINEP 159840 . 160663)) (160666 170150 ( +\TEDIT.ONSCREEN? 160676 . 164690) (\TEDIT.ONSCREEN.REGION 164692 . 167783) (\TEDIT.AFTERMOVEFN 167785 + . 168539) (OFFSCREENP 168541 . 170148)) (170192 172809 (\TEDIT.PROCIDLEFN 170202 . 171739) ( +\TEDIT.PROCENTRYFN 171741 . 172186) (\TEDIT.PROCEXITFN 172188 . 172807)) (172888 184547 ( +\TEDIT.DOWNCARET 172898 . 173691) (\TEDIT.FLASHCARET 173693 . 175510) (\TEDIT.UPCARET 175512 . 176616) + (TEDIT.NORMALIZECARET 176618 . 180278) (\TEDIT.SETCARET 180280 . 184120) (\TEDIT.CARET 184122 . +184545)) (184581 198494 (TEDIT.ADD.MENUITEM 184591 . 186882) (TEDIT.DEFAULT.MENUFN 186884 . 195706) ( +TEDIT.REMOVE.MENUITEM 195708 . 196705) (\TEDIT.CREATEMENU 196707 . 197272) (\TEDIT.MENU.WHENHELDFN +197274 . 198179) (\TEDIT.MENU.WHENSELECTEDFN 198181 . 198492))))) STOP diff --git a/library/tedit/TEDIT-WINDOW.LCOM b/library/tedit/TEDIT-WINDOW.LCOM index 250b4c9076937e30d5f9292410a2672848173911..6e1256e9dd00c8a5219bcb71cc34a295400a18e0 100644 GIT binary patch delta 13078 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 izHV~*B3x$gAhPLPrARUX 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 HPx}4`7CIJE diff --git a/library/tedit/TEDIT.LCOM b/library/tedit/TEDIT.LCOM index 8fb3ad559c5a4251b73af060808b5e3d5a4bf542..e7c5d7eca9b6da716141517bec4021a04b0dbbe2 100644 GIT binary patch delta 7174 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

K5$bq~K!OC3y18mbw{ri2DU&}?<{^mvCByu zIGdc<5p7U-c#A|*U!6<^iQbOqvTO)1yvuA<2%PB-=Y#id-+%>Kc$rvTK;b@yx)E|8 z0^IfrKhTleV0>anTxaycsMk#Zd=;Ebg->E%v&mB^PM}#+v~UHl0pn)89AyX{+H>c? z&Rw5&a0u`PTBFi8yU|@y6de@$YWG3<>+T7?z8J0>5**de4$0GZuLl+-IJ}irI^4AUVa|Tnq_{Ai%O{%F3UA*`Yha4~q zd>m#yWPFnw66}`#{^DQNQAo|RDt?2d{I05b%#}yEzqCM}Ac;+6d;~wgINC)mNq!V8 VsxjC9@}-0K-R)OC`mcXC|0f^&377x? delta 6242 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 diff --git a/library/tedit/tedit-exports.all b/library/tedit/tedit-exports.all index 081dec793..ac59a72a8 100644 --- a/library/tedit/tedit-exports.all +++ b/library/tedit/tedit-exports.all @@ -1,11 +1,11 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "20-Mar-2024 11:16:36"  -{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>tedit-exports.all;120 47172 +(FILECREATED " 7-May-2024 22:34:26"  +{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>tedit-exports.all;126 47496 :EDIT-BY rmk - :PREVIOUS-DATE "20-Mar-2024 09:45:21" {WMEDLEY}TEDIT>tedit-exports.all;118) + :PREVIOUS-DATE "30-Apr-2024 22:55:22" {WMEDLEY}TEDIT>tedit-exports.all;125) (PRETTYCOMPRINT ((E (MAPC (MKLIST FROMFILES) (FUNCTION (LAMBDA (F) (MAPC (IMPORTFILE F FLG) (FUNCTION @@ -17,7 +17,7 @@ HELP "TEDIT-ASSERT FAILURE" (\, (KWOTE (CAR ARGS))))))) (T (BQUOTE (* (TEDIT-ASS (RPAQ? CHECK-TEDIT-ASSERTIONS T) (PUTPROPS OBJECT.ALLOWS MACRO ((PC OPERATION FROMTOBJ TOTOBJ) (OR (NOT (EQ OBJECT.PTYPE (PTYPE PC))) ( \TEDIT.APPLY.OBJFN (PCONTENTS PC) OPERATION FROMTOBJ TOTOBJ)))) -(PUTPROP (QUOTE TEDIT) (QUOTE IMPORTDATE) (IDATE "20-Mar-2024 11:08:26")) +(PUTPROP (QUOTE TEDIT) (QUOTE IMPORTDATE) (IDATE " 7-May-2024 08:22:06")) (RPAQQ \BTREEWORDSPERSLOT 4) (RPAQQ \BTREEMAXCOUNT 8) (CONSTANTS (\BTREEWORDSPERSLOT 4) (\BTREEMAXCOUNT 8)) @@ -67,8 +67,8 @@ by (\DTEST (OR (PREVPIECE I.V.) (GO $$OUT)) (QUOTE PIECE))))) "-> line descriptor for the line which contains the end of the selection") NIL (* ; "Was YLIM: Y value of the bottom of the line that ends the selection") POINT (* ; "Which end should the caret appear at? (LEFT or RIGHT)") (SET FLAG) (* ; -"T if this selection is real; NIL if not") (SELTEXTOBJ FULLXPOINTER) (* ; -"TEXTOBJ that describes the selected text") SELKIND (* ; +"T if this selection is real; NIL if not") (SELTEXTSTREAM FULLXPOINTER) (* ; +"TEXTSTREAM that describes the selected text") SELKIND (* ; "What kind of selection? CHAR or WORD or LINE or PARA") HOW (* ; "SHADE used to highlight this selection") HOWHEIGHT (* ; "Height of the highlight (1 usually, full line for delete selection...)") (HASCARET FLAG) (* ; @@ -76,10 +76,11 @@ by (\DTEST (OR (PREVPIECE I.V.) (GO $$OUT)) (QUOTE PIECE))))) "If this selection is inside an object, which object?") (ONFLG FLAG) (* ; "T if the selection is highlighted on the screen, else NIL") SELOBJINFO (* ; "A Place for the selected object to put info about selection inside itself.")) (INIT (DEFPRINT (QUOTE -SELECTION) (FUNCTION \TEDIT.SELECTION.DEFPRINT))) (ACCESSFNS (DX (AND (FIXP (fetch (SELECTION X0) of -DATUM)) (FIXP (fetch (SELECTION XLIM) of DATUM)) (IDIFFERENCE (fetch (SELECTION XLIM) of DATUM) (fetch - (SELECTION X0) of DATUM))))) SET _ NIL HOW _ BLACKSHADE HOWHEIGHT _ 1 HASCARET _ T X0 _ 0 POINT _ ( -QUOTE LEFT) L1 _ (LIST NIL) LN _ (LIST NIL)) +SELECTION) (FUNCTION \TEDIT.SELECTION.DEFPRINT))) (ACCESSFNS ((SELTEXTOBJ (GETSEL DATUM SELTEXTSTREAM) + (SETSEL DATUM SELTEXTSTREAM NEWVALUE)) (DX (AND (FIXP (fetch (SELECTION X0) of DATUM)) (FIXP (fetch ( +SELECTION XLIM) of DATUM)) (IDIFFERENCE (fetch (SELECTION XLIM) of DATUM) (fetch (SELECTION X0) of +DATUM)))))) SET _ NIL HOW _ BLACKSHADE HOWHEIGHT _ 1 HASCARET _ T X0 _ 0 POINT _ (QUOTE LEFT) L1 _ ( +LIST NIL) LN _ (LIST NIL)) (DATATYPE SELPIECES (SPFIRST SPLAST SPLEN SPFIRSTCHAR SPLASTCHAR)) (DEFPRINT (QUOTE SELECTION) (FUNCTION \TEDIT.SELECTION.DEFPRINT)) (RPAQQ COPYSELSHADE 30583) @@ -104,7 +105,7 @@ $$SPLENGTH) first (SETQ I.V. (SETQ $$SPFIRST (\DTEST (OR (fetch (SELPIECES SPFIR GO $$OUT)) (QUOTE PIECE)))) (SETQ $$SPLAST (fetch (SELPIECES SPLAST) of $$SELPIECES)) (SETQ $$SPLENGTH (fetch (SELPIECES SPLEN) of $$SELPIECES)) while I.V. repeatuntil (EQ I.V. $$SPLAST) by (NEXTPIECE I.V.))))) T) -(PUTPROP (QUOTE TEDIT-SELECTION) (QUOTE IMPORTDATE) (IDATE "20-Mar-2024 11:08:55")) +(PUTPROP (QUOTE TEDIT-SELECTION) (QUOTE IMPORTDATE) (IDATE "29-Apr-2024 13:58:19")) (DATATYPE THISLINE ((* ;; "Cache for line-related character location info, for selection and line-display code to use.") (DESC FULLXPOINTER) (* ; "Line descriptor for the line this describes now") TLSPACEFACTOR (* ; @@ -226,7 +227,7 @@ eachtime (SETQ CHAR (fetch (CHARSLOT CHAR) of I.V.)) (SETQ CHARW (fetch (CHARSLO repeatuntil (EQ I.V. $$CHARSLOTLIMIT))))) T) (PUTPROPS DIACRITICP MACRO (OPENLAMBDA (CHAR) (* ;; "An XCCS diacritic") (AND (SMALLP CHAR) (IGEQ CHAR 192) (ILEQ CHAR 207)))) -(PUTPROP (QUOTE TEDIT-SCREEN) (QUOTE IMPORTDATE) (IDATE "20-Mar-2024 11:07:35")) +(PUTPROP (QUOTE TEDIT-SCREEN) (QUOTE IMPORTDATE) (IDATE " 7-May-2024 10:47:09")) (DATATYPE PIECE ((* ; "The piece describes either a string or part of a file. , or a generalized OBJECT.") PCONTENTS (* ; "The background source of data for this piece (stream, string, block, object, depending on the PTYPE)." @@ -292,7 +293,8 @@ NIL (* ; "Was DELETESEL: Text to be deleted imminently") WRIGHT (* ; "The READTABLE to be used to decide on word breaks") EDITPROPS (* ; "The PROPS that were passed into this edit session") (BLUEPENDINGDELETE FLAG) (* ; "T if the next insertion in this document is to be preceded by a deletion of the then-current selection" -) TXTHISTORY (* ; "The history list for this edit session.") (SELPANE FULLXPOINTER) (* ; +) (TXTHISTORYINACTIVE FLAG) (* ; "T if history events are not recorded (e.g. for transcript files)") +TXTHISTORY (* ; "The history list for this edit session.") (SELPANE FULLXPOINTER) (* ; "The pane in which the last 'real' selection got made for this edit; used by TEDIT.NORMALIZECAREET") PROMPTWINDOW (* ; "A window to be used for unscheduled interactions; normally a small window above the edit window") @@ -301,8 +303,8 @@ DISPLAYCACHEDS (* ; "The DISPLAYSTREAM that is used to build line images") DISPL "The DISPLAYSTREAM used to build line images of lines that are displayed in 'hardcopy' simulation mode" ) TXTPAGEFRAMES (* ; "A tree of page frames, specifying how the document is to be laid out.") TXTCHARLOOKSLIST (* ; "List of all the CHARLOOKSs in the document, so they can be kept unique") -TXTPARALOOKSLIST (* ; "List of all the FMTSPECs in the document, so they can be kept unique") ( -TXTNEEDSUPDATE FLAG) (* ; "T => Screen invalid, need to run updater") (TXTDON'TUPDATE FLAG) (* ; +TXTPARALOOKSLIST (* ; "List of all the FMTSPECs in the document, so they can be kept unique") (NIL +FLAG) (* ; "Was TXTNEEDSUPDATE: T => Screen invalid, need to run updater") (TXTDON'TUPDATE FLAG) (* ; "T if we're holding off on screen updates until later. Used, e.g., by the menu-SHOW code so that you don't get piecemeal updates, but only one at the end of the SHOW." ) TXTRAWINCLUDESTREAM (* ; "NODIRCORE stream used to cache RAW includes (and maybe later, all includes?)") DOCPROPS (* ; @@ -395,7 +397,8 @@ UTF8.PTYPE UTF16BE.PTYPE UTF16LE.PTYPE)) (STRING.PTYPES (LIST THINSTRING.PTYPE F BINABLE.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) (THIN.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE))) (GLOBALVARS \TEXTIMAGEOPS \TEXTFDEV) -(PUTPROP (QUOTE TEDIT-STREAM) (QUOTE IMPORTDATE) (IDATE "20-Mar-2024 11:08:37")) +(PUTPROPS PLINES MACRO ((PANE) (fetch (TEXTWINDOW PLINES) of PANE))) +(PUTPROP (QUOTE TEDIT-STREAM) (QUOTE IMPORTDATE) (IDATE " 7-May-2024 22:34:10")) (RPAQQ NONE.TTC 0) (RPAQQ CHARDELETE.TTC 1) (RPAQQ WORDDELETE.TTC 2) @@ -414,10 +417,10 @@ THINSTRING.PTYPE))) (CONSTANTS (NONE.TTC 0) (CHARDELETE.TTC 1) (WORDDELETE.TTC 2) (DELETE.TTC 3) (FUNCTIONCALL.TTC 4) ( REDO.TTC 5) (UNDO.TTC 6) (CMD.TTC 7) (NEXT.TTC 8) (EXPAND.TTC 9) (CHARDELETE.FORWARD.TTC 10) ( WORDDELETE.FORWARD.TTC 11) (PUNCT.TTC 20) (TEXT.TTC 21) (WHITESPACE.TTC 22)) -(PUTPROPS \TEDIT.MOUSESTATE MACRO (BUTTON (* Test to see if only the specified mouse button is down. -DOES NOT call GETMOUSESTATE, so the mouse-button info is the same as the last time it WAS called.) ( -SELECTQ (CAR BUTTON) (LEFT (QUOTE (IEQP LASTMOUSEBUTTONS 4))) (MIDDLE (QUOTE (IEQP LASTMOUSEBUTTONS 1) -)) (RIGHT (QUOTE (IEQP LASTMOUSEBUTTONS 2))) (SHOULDNT)))) +(PUTPROPS \TEDIT.MOUSESTATE MACRO (BUTTON (* ;; +"Test to see if only the specified mouse button is down. DOES NOT call GETMOUSESTATE, so the mouse-button info is the same as the last time it was called." +) (SELECTQ (CAR BUTTON) (LEFT (QUOTE (EQ LASTMOUSEBUTTONS 4))) (MIDDLE (QUOTE (EQ LASTMOUSEBUTTONS 1)) +) (RIGHT (QUOTE (EQ LASTMOUSEBUTTONS 2))) (SHOULDNT)))) (PUTPROPS \TEDIT.CHECK MACRO (ARGS (COND ((AND (BOUNDP (QUOTE CHECK)) CHECK) (CONS (QUOTE PROGN) (for I in ARGS as J on ARGS when (NOT (STRINGP I)) collect (LIST (QUOTE OR) I (LIST (QUOTE HELP) "TEdit consistency-check failure [RETURN to continue]: " (COND ((STRINGP (CADR J))) (T (KWOTE I)))))) @@ -431,13 +434,13 @@ I in ARGS as J on ARGS when (NOT (STRINGP I)) collect (LIST (QUOTE OR) I (LIST ( (RPAQQ NEWCHAR-IF-SPLIT.LB 32) (CONSTANTS (NOTBEFORE.LB 1) (NOTAFTER.LB 2) (BEFORE.LB 4) (AFTER.LB 8) (DISAPPEAR-IF-NOT-SPLIT.LB 16) (NEWCHAR-IF-SPLIT.LB 32)) -(PUTPROP (QUOTE TEDIT-COMMAND) (QUOTE IMPORTDATE) (IDATE "20-Mar-2024 11:07:16")) +(PUTPROP (QUOTE TEDIT-COMMAND) (QUOTE IMPORTDATE) (IDATE " 7-May-2024 10:46:39")) (PUTPROPS \SMALLPIN MACRO (OPENLAMBDA (STREAM) (SIGNED (create WORD HIBYTE _ (\BIN STREAM) LOBYTE _ ( \BIN STREAM)) BITSPERWORD))) (PUTPROPS \SMALLPOUT MACRO (OPENLAMBDA (STREAM W) (* ; "Signed smallp, unlike \WOUT") (\BOUT STREAM ( LOGAND 255 (LRSH W 8))) (\BOUT STREAM (LOGAND W 255)))) -(PUTPROP (QUOTE TEDIT-FILE) (QUOTE IMPORTDATE) (IDATE "20-Mar-2024 11:06:52")) -(PUTPROP (QUOTE TEDIT-OLDFILE) (QUOTE IMPORTDATE) (IDATE "20-Mar-2024 11:06:42")) +(PUTPROP (QUOTE TEDIT-FILE) (QUOTE IMPORTDATE) (IDATE "29-Apr-2024 10:37:37")) +(PUTPROP (QUOTE TEDIT-OLDFILE) (QUOTE IMPORTDATE) (IDATE "29-Apr-2024 10:28:36")) (DATATYPE CHARLOOKS ((* ;; "Describes the appearance (%"Looks%") of characters in a TEdit document.") CLFONT (* ; "The font descriptor for these characters") CLNAME (* ;; "Name of the font (e.g., HELVETICA) THIS FIELD IS A HINT, OR FOR USE IN CHARLOOKS-BUILDING CODE. USE FONTPROP TO GET THE RIGHT VALUE FROM CLFONT." @@ -502,7 +505,7 @@ LINELEAD _ 0 TABSPEC _ (CONS DEFAULTTAB NIL)) )) (EQ \ST.POS16 (fetch (ARRAYP TYP) of A)))) (CHECK (IGREATERP (fetch (ARRAYP LENGTH) of A) J)) ( \PUTBASE (fetch (ARRAYP BASE) of A) (IPLUS (fetch (ARRAYP OFFST) of A) J) V))) (PUTPROPS ONOFF MACRO (OPENLAMBDA (VAL) (COND (VAL (QUOTE ON)) (T (QUOTE OFF))))) -(PUTPROP (QUOTE TEDIT-LOOKS) (QUOTE IMPORTDATE) (IDATE "20-Mar-2024 11:06:29")) +(PUTPROP (QUOTE TEDIT-LOOKS) (QUOTE IMPORTDATE) (IDATE " 6-May-2024 23:49:11")) (DATATYPE TEDITCARET (TCNOWTIME (* Used to hold the current time, when checking to see if a transition is due) TCTHENTIME (* Time when the next transition is to take place) TCFORCEDDOWN (* TCFORCEDOWN = T means (Make the caret visible at the next call to \EDIT.FLIPCARET.)) TCUP (* TCUP = T => The caret is @@ -523,14 +526,14 @@ QUOTE TEDIT.CURSORREGION) NEWVALUE)) (PLINES (GETWINDOWPROP DATUM (QUOTE LINES)) (QUOTE LINES) NEWVALUE)) (CLOSINGFILE (GETWINDOWPROP DATUM (QUOTE TEDIT-CLOSING-FILE)) (PUTWINDOWPROP DATUM (QUOTE TEDIT-CLOSING-FILE) NIL)) (WITHINSCREEN (GETWINDOWPROP DATUM (QUOTE TEDIT-WITHIN-SCREEN)) (LET ((NV NEWVALUE)) (PUTWINDOWPROP DATUM (QUOTE TEDIT-WITHIN-SCREEN) NV) NV)))) -(DATATYPE PANE ((XPWINDOW FULLXPOINTER) PLINES PCARET HOLDDUMMYFIRSTLINE NEXTPANE (PREVPANE XPOINTER)) - (ACCESSFNS (PWINDOW (PROGN DATUM)))) +(DATATYPE PANE ((XPWINDOW FULLXPOINTER) (* ; "Change XXPLINES to PLINES when we install this") +XXPLINES PCARET HOLDDUMMYFIRSTLINE NEXTPANE (PREVPANE XPOINTER)) (ACCESSFNS (PWINDOW (PROGN DATUM)))) (PUTPROPS FGETPANE MACRO ((P FIELD) (ffetch (PANE FIELD) of P))) (PUTPROPS GETPANE MACRO ((P FIELD) (fetch (PANE FIELD) of P))) (PUTPROPS SETPANE MACRO ((P FIELD NEWVALUE) (replace (PANE FIELD) of P with NEWVALUE))) (PUTPROPS FSETPANE MACRO ((P FIELD NEWVALUE) (freplace (PANE FIELD) of P with NEWVALUE))) (I.S.OPR (QUOTE inpanes) NIL (QUOTE (inside (fetch (TEXTOBJ \WINDOW) of BODY)))) -(PUTPROP (QUOTE TEDIT-WINDOW) (QUOTE IMPORTDATE) (IDATE "20-Mar-2024 11:16:27")) +(PUTPROP (QUOTE TEDIT-WINDOW) (QUOTE IMPORTDATE) (IDATE " 6-May-2024 21:04:05")) (TYPERECORD MB.3STATE ((* ;; "Describes a 3-state menu button.") MBLABEL (* ; "Label for the button on the screen") MBFONT (* ; "Font the label text should appear in") MBCHANGESTATEFN (* ; "Function to call when the button's state changes") MBINITSTATE (* ; @@ -552,10 +555,10 @@ IMAGEOBJPROP DATUM (QUOTE DISPLAYFN)) (QUOTE \TEXTMENU.TOGGLE.DISPLAY)))))) (RECORD MARGINBAR (MARL1 MARLN MARR MARTABS MARUNIT MARTABTYPE) (TYPE? (AND (IMAGEOBJP DATUM) (EQ ( IMAGEOBJPROP DATUM (QUOTE DISPLAYFN)) (QUOTE MB.MARGINBAR.DISPLAYFN))))) (RECORD TAB (TABX . TABKIND)) -(PUTPROP (QUOTE TEDIT-MENU) (QUOTE IMPORTDATE) (IDATE "20-Mar-2024 11:06:06")) -(PUTPROP (QUOTE TEDIT-FIND) (QUOTE IMPORTDATE) (IDATE "17-Mar-2024 12:06:12")) -(PUTPROP (QUOTE TEDIT-FNKEYS) (QUOTE IMPORTDATE) (IDATE "15-Mar-2024 14:07:55")) -(PUTPROP (QUOTE TEDIT-HCPY) (QUOTE IMPORTDATE) (IDATE "20-Mar-2024 11:05:37")) +(PUTPROP (QUOTE TEDIT-MENU) (QUOTE IMPORTDATE) (IDATE " 6-May-2024 23:54:02")) +(PUTPROP (QUOTE TEDIT-FIND) (QUOTE IMPORTDATE) (IDATE " 3-May-2024 07:34:03")) +(PUTPROP (QUOTE TEDIT-FNKEYS) (QUOTE IMPORTDATE) (IDATE "24-Apr-2024 23:43:22")) +(PUTPROP (QUOTE TEDIT-HCPY) (QUOTE IMPORTDATE) (IDATE "19-Apr-2024 09:12:32")) (DATATYPE TEDITHISTORYEVENT ((* ;; "Describes one event on the TEdit edit history list.") THACTION (* ; "A keyword specifying what the event was") THPOINT (* ; "Was the selection to the left or right?") THLEN (* ; "The # of chars involved") THCH# (* ; "The starting ch#") THFIRSTPIECE (* ; @@ -570,7 +573,7 @@ QUOTE TEDITHISTORYEVENT) (FUNCTION \TEDIT.HISTORYEVENT.DEFPRINT))) THPOINT _ (QU (PUTPROPS GETTH MACRO ((EVENT FIELD) (fetch (TEDITHISTORYEVENT FIELD) of EVENT))) (PUTPROPS SETTH MACRO ((EVENT FIELD NEWVALUE) (replace (TEDITHISTORYEVENT FIELD) of EVENT with NEWVALUE))) -(PUTPROP (QUOTE TEDIT-HISTORY) (QUOTE IMPORTDATE) (IDATE "20-Mar-2024 11:05:20")) +(PUTPROP (QUOTE TEDIT-HISTORY) (QUOTE IMPORTDATE) (IDATE "30-Apr-2024 22:55:05")) (RECORD PAGEFORMATTINGSTATE ((* ;; "Contains the state for a TEdit page-formatting job.") PAGE# (* ; "The current page number. Counted from 1") FIRSTPAGE (* ;; "T if the current page is the 'first page' . Is set initially, and can be set again by the user at will. Gets reset after each page image is printed." @@ -601,7 +604,7 @@ REGIONPARENT FULLXPOINTER) (* ; "The parent node for this box, for sub-boxes") R (PUTPROPS GETPFS MACRO ((FS FIELD) (fetch (PAGEFORMATTINGSTATE FIELD) of FS))) (PUTPROPS SETPFS MACRO ((FS FIELD NEWVALUE) (replace (PAGEFORMATTINGSTATE FIELD) of FS with NEWVALUE)) ) -(PUTPROP (QUOTE TEDIT-PAGE) (QUOTE IMPORTDATE) (IDATE "17-Mar-2024 18:15:40")) +(PUTPROP (QUOTE TEDIT-PAGE) (QUOTE IMPORTDATE) (IDATE " 5-Apr-2024 08:01:17")) (PUTPROP (QUOTE TEDIT-ABBREV) (QUOTE IMPORTDATE) (IDATE "17-Mar-2024 18:15:40")) (PUTPROP (QUOTE TEDIT-TFBRAVO) (QUOTE IMPORTDATE) (IDATE "17-Mar-2024 18:27:18")) (DECLARE%: DONTCOPY diff --git a/lispusers/DOC-OBJECTS b/lispusers/DOC-OBJECTS index 7bbf658a6..c5e4494eb 100644 --- a/lispusers/DOC-OBJECTS +++ b/lispusers/DOC-OBJECTS @@ -1,12 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "27-Mar-2024 23:42:37" {WMEDLEY}DOC-OBJECTS.;36 52788 +(FILECREATED " 8-May-2024 10:42:40" {WMEDLEY}DOC-OBJECTS.;47 52139 :EDIT-BY rmk - :CHANGES-TO (FNS DOCOBJ-INCLUDE-EDIT-WINDOWP) + :CHANGES-TO (FNS DOCOBJ-AFTERHARDCOPYFN DOCOBJ-BEFOREHARDCOPYFN DOCOBJ-INCLUDE-BEFOREHARDCOPYFN + ) - :PREVIOUS-DATE "19-Mar-2024 19:36:25" {WMEDLEY}DOC-OBJECTS.;35) + :PREVIOUS-DATE " 7-May-2024 08:21:58" {WMEDLEY}DOC-OBJECTS.;42) (PRETTYCOMPRINT DOC-OBJECTSCOMS) @@ -28,7 +29,7 @@ (FNS DOCOBJ-ACQUIRE-OBJECT DOCOBJ-INIT DOCOBJ-TEDIT-MENU-ENTRY DOCOBJ-GET-LOOKS DOCOBJ-REGISTER-OBJECT DOCOBJ-STRING-IMAGEBOX DOCOBJ-WAIT-MOUSE - DOCOBJ-INVOKE-IMAGEOBJFN DOCOBJ-BEFOREHARDCOPYFN DOCOBJ-AFTERHARDCOPYFN)) + DOCOBJ-BEFOREHARDCOPYFN DOCOBJ-AFTERHARDCOPYFN)) [COMS (* ;; "Eval'd Form") @@ -167,44 +168,37 @@ (GET.OBJ.FROM.USER TEXTSTREAM (TEXTOBJ TEXTSTREAM]) (DOCOBJ-GET-LOOKS - [LAMBDA (TEXTOBJ CH#ORCHARLOOKS) (* ; "Edited 19-Mar-2024 19:36 by rmk") + [LAMBDA (TEXTOBJ CH#ORCHARLOOKS) (* ; "Edited 5-Apr-2024 12:20 by rmk") + (* ; "Edited 19-Mar-2024 19:36 by rmk") (* ; "Edited 29-Oct-2022 21:30 by rmk") (* Koomen " 4-Feb-87 23:37") (* ;;; "Adapted from {ERIS}TEDITLOOKS.;30 dated '15-Oct-85 16:51:10' to return looks itself, rather than a proplist.") (* jds "10-Jul-85 16:02") (* ; "Return a PLIST of character looks") - (PROG ((TEXTOBJ (TEXTOBJ TEXTOBJ)) - LOOKS FONT NLOOKS) - [COND - ((type? CHARLOOKS CH#ORCHARLOOKS) (* ; + (LET ((TEXTOBJ (TEXTOBJ TEXTOBJ))) + (if (type? CHARLOOKS CH#ORCHARLOOKS) + then (* ;  "He handed us a CHARLOOKS. Unparse it for him.") - (SETQ LOOKS CH#ORCHARLOOKS)) - ((ZEROP (FGETTOBJ TEXTOBJ TEXTLEN)) (* ; + CH#ORCHARLOOKS + elseif (ZEROP (FGETTOBJ TEXTOBJ TEXTLEN)) + then (* ;  "There's no text in the document. Use the extant caret looks.") - (SETQ LOOKS (FGETTOBJ TEXTOBJ CARETLOOKS))) - [(FIXP CH#ORCHARLOOKS) (* ; + (FGETTOBJ TEXTOBJ CARETLOOKS) + else (PLOOKS (\TEDIT.CHTOPC (if (FIXP CH#ORCHARLOOKS) + then (* ;  "He gave us a CH# to get the looks of. Grab it.") - (SETQ LOOKS (PLOOKS (\TEDIT.CHTOPC (IMIN (FGETTOBJ TEXTOBJ TEXTLEN) - CH#ORCHARLOOKS) - TEXTOBJ] - [(type? SELECTION CH#ORCHARLOOKS) (* ; + CH#ORCHARLOOKS + elseif (type? SELECTION CH#ORCHARLOOKS) + then (* ;  "Get the looks of the selected text") - (SETQ LOOKS (PLOOKS (\TEDIT.CHTOPC (IMIN (FGETTOBJ TEXTOBJ TEXTLEN) - (GETSEL CH#ORCHARLOOKS CH#)) - TEXTOBJ] - ((NULL CH#ORCHARLOOKS) (* ; + (GETSEL CH#ORCHARLOOKS CH#) + elseif (NULL CH#ORCHARLOOKS) + then (* ;  "Get the looks of the selected text") - (SETQ LOOKS (PLOOKS (\TEDIT.CHTOPC (IMIN (FGETTOBJ TEXTOBJ TEXTLEN) - (GETSEL (FGETTOBJ TEXTOBJ SEL) - CH#)) - TEXTOBJ] - (RETURN LOOKS) - -(* ;;; "Now break the looks apart into a PROPLIST") - - (SETQ NLOOKS (\TEDIT.UNPARSE.CHARLOOKS.LIST LOOKS)) - (RETURN NLOOKS]) + (GETSEL (FGETTOBJ TEXTOBJ SEL) + CH#)) + TEXTOBJ]) (DOCOBJ-REGISTER-OBJECT [LAMBDA (OBJECT) (* ; "Edited 23-Oct-87 14:48 by Koomen") @@ -245,108 +239,97 @@ (LASTMOUSEY STREAM))) then (RETURN NIL)) finally (RETURN T]) -(DOCOBJ-INVOKE-IMAGEOBJFN - [LAMBDA (CH# PIECE IMAGEOBJFNNAME) (* ; "Edited 28-Jun-2023 19:45 by rmk") - (* ; "Edited 9-Sep-2022 16:10 by rmk") - (* ; "Edited 7-Sep-2022 23:11 by rmk") - (* ; "Edited 6-Sep-2022 10:05 by rmk") - (* ; "Edited 15-Oct-87 23:35 by Koomen") - - (* ;; "If PIECE is an IMAGEOBJ, invoke the function associated with the ImageObj property IMAGEOBJFNNAME on the IMAGEOBJ and the character position where the IMAGEOBJ is located. ") - - (CL:WHEN (AND (type? PIECE PIECE) - (EQ OBJECT.PTYPE (PTYPE PIECE))) - (LET ((IMAGEOBJ (PCONTENTS PIECE)) - IMAGEOBJFN) - (SETQ IMAGEOBJFN (IMAGEOBJPROP IMAGEOBJ IMAGEOBJFNNAME)) - (CL:WHEN (AND IMAGEOBJFN (DEFINEDP IMAGEOBJFN)) - (APPLY* IMAGEOBJFN IMAGEOBJ CH# PIECE))))]) - (DOCOBJ-BEFOREHARDCOPYFN - [LAMBDA (TEXTSTREAM TEXTOBJ) (* ; "Edited 16-Mar-2024 10:05 by rmk") + [LAMBDA (TEXTSTREAM) (* ; "Edited 8-May-2024 00:05 by rmk") + (* ; "Edited 6-May-2024 22:50 by rmk") + (* ; "Edited 5-Apr-2024 08:03 by rmk") + (* ; "Edited 16-Mar-2024 10:05 by rmk") (* ; "Edited 16-Jul-2023 16:53 by rmk") (* ; "Edited 10-Jul-2023 22:29 by rmk") (* ;  "Edited 25-May-93 13:07 by sybalsky:mv:envos") - (* ;; "This is the only BEFOREHARDCOPYFN, provided by DOC-OBJECTS. If the text doesn't contain any such objects, the property is NIL and the piece-scan doesn't happen. This is installed in the TEXTOBJ by the call to DOCOBJ-REGISTER-OBJECT from every DOCOBJ create function.") + (* ;; "This is the only BEFOREHARDCOPYFN provided by DOC-OBJECTS. If the text doesn't contain any such objects, the property is NIL and the piece-scan doesn't happen. This is installed in the TEXTOBJ by the call to DOCOBJ-REGISTER-OBJECT from every DOCOBJ create function.") + + (* ;; "This runs through the file applying the BEFOREHARDCOPYFN of every object that has one. For example, an include object will replace the object by its target file.") + + (* ;; "This records all of the history events created during the object pass into a single composite even so that the DOCOBJ-AFTERHARDCOPYFN can restore the stream to its original state.") (RESETLST (* ;; "We don't want to update the display lines to show the intermediate state while we are updating the pieces. ") - (RESETSAVE (TEXTPROP TEXTOBJ 'DON'TUPDATE T) - `(TEXTPROP ,TEXTOBJ 'DON'TUPDATE OLDVALUE)) - (LET ((PREVEVENTS (GETTOBJ TEXTOBJ TXTHISTORY)) - (OLDDIRTY (GETTOBJ TEXTOBJ \DIRTY)) - (PREVSEL (\TEDIT.COPYSEL (TEXTSEL TEXTOBJ))) - FAILED) - - (* ;; "This is a little tricky because the imageobj function may screw around with the piece containining the object, delete it or replace it with something else. But presumably it links into the previous saved piece, and we continue from there.") - - [bind OBJ FN PREVPC (CH# _ 1) - (PC _ (\TEDIT.FIRSTPIECE TEXTOBJ)) while PC - do (SETQ PC (if (AND (EQ OBJECT.PTYPE (PTYPE PC)) - (SETQ OBJ (PCONTENTS PC)) - (SETQ FN (IMAGEOBJPROP OBJ 'BEFOREHARDCOPYFN)) - (DEFINEDP FN)) - then (SETQ PREVPC (PREVPIECE PC)) - (CL:UNLESS (APPLY* FN TEXTOBJ OBJ PC CH#) - (SETQ FAILED T) - (RETURN)) - (if PREVPC - then (NEXTPIECE (if (EQ PC (NEXTPIECE PREVPC)) - then - (* ;; + (RESETSAVE (TEXTPROP TEXTSTREAM 'DON'TUPDATE T) + `(TEXTPROP ,TEXTSTREAM 'DON'TUPDATE OLDVALUE)) + (LET* ((TEXTOBJ (TEXTOBJ TEXTSTREAM)) + (PREVEVENTS (GETTOBJ TEXTOBJ TXTHISTORY)) + (OLDDIRTY (GETTOBJ TEXTOBJ \DIRTY)) + (PREVSEL (\TEDIT.COPYSEL (TEXTSEL TEXTOBJ))) + FAILED) + + (* ;; "This is a little tricky because the imageobj function may screw around with the piece containining the object, delete it or replace it with something else. But presumably it links into the previous saved piece, and we continue from there.") + + [bind OBJ FN PREVPC (CH# _ 1) + (PC _ (\TEDIT.FIRSTPIECE TEXTOBJ)) while PC + do (SETQ PC (if (AND (EQ OBJECT.PTYPE (PTYPE PC)) + (SETQ OBJ (PCONTENTS PC)) + (SETQ FN (IMAGEOBJPROP OBJ 'BEFOREHARDCOPYFN)) + (DEFINEDP FN)) + then (SETQ PREVPC (PREVPIECE PC)) + (CL:UNLESS (APPLY* FN TEXTOBJ OBJ PC CH#) + (SETQ FAILED T) + (RETURN)) + (if PREVPC + then (NEXTPIECE (if (EQ PC (NEXTPIECE PREVPC)) + then + (* ;;  "Nothing affected this PC, advance") - (add CH# (PLEN PC)) - PC - else - (* ;; + (add CH# (PLEN PC)) + PC + else + (* ;;  "Otherwise investigate its replacement") - PREVPC)) - elseif (EQ PC (\TEDIT.FIRSTPIECE TEXTOBJ)) - then (add CH# (PLEN PC)) - (NEXTPIECE PC) - else - (* ;; + PREVPC)) + elseif (EQ PC (\TEDIT.FIRSTPIECE TEXTOBJ)) + then (add CH# (PLEN PC)) + (NEXTPIECE PC) + else + (* ;;  "Investigate the replacement of the previous first piece.") - (\TEDIT.FIRSTPIECE TEXTOBJ)) - else (add CH# (PLEN PC)) - (NEXTPIECE PC] (* ; "Restore previous settings") + (\TEDIT.FIRSTPIECE TEXTOBJ)) + else (add CH# (PLEN PC)) + (NEXTPIECE PC] (* ; "Restore previous settings") (* ;  "The history event may restore SEL, but...") - (SETTOBJ TEXTOBJ \DIRTY OLDDIRTY) - - (* ;; "Make a single undoing event for the after fn") - - (for ETAIL on (GETTOBJ TEXTOBJ TXTHISTORY) until (EQ ETAIL PREVEVENTS) - collect (CAR ETAIL) finally (SETTOBJ TEXTOBJ TXTHISTORY (CONS $$VAL PREVEVENTS))) + (SETTOBJ TEXTOBJ \DIRTY OLDDIRTY) - (* ;; "In case something screws up, at least redisplaying will show something correctly (even if we aren't \DIRTY)") + (* ;; "Make a single event for the afterfn to undo") - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ 1 (TEXTLEN TEXTOBJ)) - (CL:WHEN FAILED - (DOCOBJ-AFTERHARDCOPYFN TEXTSTREAM TEXTOBJ) (* ; "UNDO whatever was saved") - (SETTOBJ TEXTOBJ SEL PREVSEL) - 'DON'T)))]) + (\TEDIT.COMPOSITE.EVENT TEXTOBJ PREVEVENTS) + (CL:WHEN FAILED + (DOCOBJ-AFTERHARDCOPYFN TEXTSTREAM TEXTOBJ)(* ; "UNDO whatever was saved") + (SETTOBJ TEXTOBJ SEL PREVSEL) + 'DON'T)))]) (DOCOBJ-AFTERHARDCOPYFN - [LAMBDA (TEXTSTREAM TEXTOBJ) (* ; "Edited 15-Mar-2024 14:24 by rmk") + [LAMBDA (TEXTSTREAM) (* ; "Edited 8-May-2024 10:42 by rmk") + (* ; "Edited 7-May-2024 08:20 by rmk") + (* ; "Edited 5-Apr-2024 08:05 by rmk") + (* ; "Edited 15-Mar-2024 14:24 by rmk") (* ; "Edited 15-Jul-2023 15:57 by rmk") (* ;  "Edited 25-May-93 13:08 by sybalsky:mv:envos") (RESETLST - (RESETSAVE (TEXTPROP TEXTOBJ 'DON'TUPDATE T) - `(TEXTPROP ,TEXTOBJ 'DON'TUPDATE OLDVALUE)) - (LET ((PREVUNDONE (GETTOBJ TEXTOBJ TXTHISTORYUNDONE))) - (TEDIT.UNDO TEXTOBJ) - (SETTOBJ TEXTOBJ TXTHISTORYUNDONE PREVUNDONE) - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ 1 (TEXTLEN TEXTOBJ)) - (\TEDIT.UPDATE.SCREEN TEXTOBJ)))]) + (RESETSAVE (TEXTPROP TEXTSTREAM 'DON'TUPDATE T) + `(TEXTPROP ,TEXTSTREAM 'DON'TUPDATE OLDVALUE)) + (LET* ((TEXTOBJ (TEXTOBJ TEXTSTREAM)) + (PREVUNDONE (GETTOBJ TEXTOBJ TXTHISTORYUNDONE))) + (TEDIT.UNDO TEXTOBJ T) + (SETTOBJ TEXTOBJ TXTHISTORYUNDONE PREVUNDONE) + (\TEDIT.UPDATE.LINES TEXTOBJ 'APPEARANCE)))]) ) @@ -842,56 +825,54 @@ (DEFINEQ (DOCOBJ-INCLUDE-BEFOREHARDCOPYFN - [LAMBDA (TEXTOBJ OBJ PC CH#) (* ; "Edited 16-Feb-2024 23:47 by rmk") + [LAMBDA (TEXTOBJ OBJ PC CH#) (* ; "Edited 7-May-2024 23:33 by rmk") + (* ; "Edited 16-Feb-2024 23:47 by rmk") (* ; "Edited 23-Jul-2023 22:45 by rmk") (* ; "Edited 16-Jul-2023 11:14 by rmk") (* ; "Edited 10-Jul-2023 22:18 by rmk") (* ; "Edited 22-Jun-2023 16:44 by rmk") - (* ;; "This replaces the PC, the piece with an included-file object, with the contents of that file. The undo event will restore the object. Since the piece with the object is deleted, its paragraph looks are ignored and only the lookos of the inserted file are interpreted. E.g., to get a page break before the included file, either the first piece of that file must be a page break, or a blank NEWPAGEBEFORE paragraph must come before the OBJ.'") + (* ;; "This replaces the PC, the piece with an included-file object, with the contents of that file. The undo event will restore the object. Since the piece with the object is deleted, its paragraph looks are ignored and only the looks of the inserted file are interpreted. E.g., to get a page break before the included file, either the first piece of that file must be a page break, or a blank NEWPAGEBEFORE paragraph must come before the OBJ.") (* ;; "Returns T if the inclusion is succeeds as intended, NIL otherwise.") (* ;; "Not sure why the INCLUDEDP property. If enabled, it's included.") - (if (fetch (INCLOBJ ENABLEDP) of (IMAGEOBJPROP OBJ 'OBJECTDATUM)) - then (LET ([INCLFILE (fetch (INCLOBJ FILENAME) of (IMAGEOBJPROP OBJ 'OBJECTDATUM] - (TXTFILE (GETTOBJ TEXTOBJ TXTFILE)) - INCLSTREAM) - [SETQ INCLFILE (FINDFILE INCLFILE T (AND TXTFILE (CONS (PACKFILENAME.STRING - 'HOST - (FILENAMEFIELD TXTFILE - 'HOST) - 'DIRECTORY - (FILENAMEFIELD TXTFILE - 'DIRECTORY)) - DIRECTORIES] - (if INCLFILE - then - (* ;; "No point in prompting: it just flashes by") - - (AND NIL (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Including " INCLFILE "...") - T)) - (\TEDIT.UPDATE.SEL (TEXTSEL TEXTOBJ) - CH# 1 'LEFT T) (* ; "Set the destination") - (\TEDIT.DELETE TEXTOBJ (TEXTSEL TEXTOBJ) - T) - (TEDIT.INCLUDE TEXTOBJ INCLFILE NIL NIL DOCOBJ-INCLUDE-SAFE) - (AND NIL (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Including " INCLFILE - "...done"))) - else - (* ;; "Did not succeed as intended. Caller should restore the stream, maybe selecting and highlighting the bad inclusion.") - - (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Included file " (fetch (INCLOBJ FILENAME - ) - of OBJ) - " not found") - T T) - NIL)) - else - (* ;; "Succeeded as intended") - - T]) + (CL:WHEN (fetch (INCLOBJ ENABLEDP) of (IMAGEOBJPROP OBJ 'OBJECTDATUM)) + (LET ([INCLFILE (fetch (INCLOBJ FILENAME) of (IMAGEOBJPROP OBJ 'OBJECTDATUM] + (TXTFILE (GETTOBJ TEXTOBJ TXTFILE))) + [SETQ INCLFILE (FINDFILE INCLFILE T (AND TXTFILE (CONS (PACKFILENAME.STRING + 'HOST + (FILENAMEFIELD TXTFILE + 'HOST) + 'DIRECTORY + (FILENAMEFIELD TXTFILE + 'DIRECTORY)) + DIRECTORIES] + (if INCLFILE + then + (* ;; "No point in prompting: it just flashes by") + + (AND NIL (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Including " INCLFILE "...") + T)) + (\TEDIT.UPDATE.SEL (TEXTSEL TEXTOBJ) + CH# 1 'LEFT T) (* ; "Set the destination") + (\TEDIT.DELETE TEXTOBJ (TEXTSEL TEXTOBJ) + T) + (TEDIT.INCLUDE TEXTOBJ INCLFILE NIL NIL DOCOBJ-INCLUDE-SAFE) + (AND NIL (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Including " INCLFILE "...done"))) + + (* ;; "Succeeded as intended") + + T + else + (* ;; "Did not succeed as intended. Caller should restore the stream, maybe selecting and highlighting the bad inclusion.") + + (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Included file " (fetch (INCLOBJ FILENAME) + of OBJ) + " not found") + T T) + NIL)))]) (DOCOBJ-INCLUDE-CLEANUPFN [LAMBDA (TEXTSTREAM STARTPOS LEN) (* ; "Edited 15-Mar-2024 14:08 by rmk") @@ -1011,30 +992,29 @@ (PUTPROPS DOC-OBJECTS MAKEFILE-ENVIRONMENT (:READTABLE "INTERLISP" :PACKAGE "INTERLISP" :BASE 10)) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (7682 21029 (DOCOBJ-ACQUIRE-OBJECT 7692 . 8693) (DOCOBJ-INIT 8695 . 9323) ( -DOCOBJ-TEDIT-MENU-ENTRY 9325 . 9747) (DOCOBJ-GET-LOOKS 9749 . 12364) (DOCOBJ-REGISTER-OBJECT 12366 . -13020) (DOCOBJ-STRING-IMAGEBOX 13022 . 13970) (DOCOBJ-WAIT-MOUSE 13972 . 14432) ( -DOCOBJ-INVOKE-IMAGEOBJFN 14434 . 15557) (DOCOBJ-BEFOREHARDCOPYFN 15559 . 20205) ( -DOCOBJ-AFTERHARDCOPYFN 20207 . 21027)) (21059 21326 (DOCOBJ-ACQUIRE-EVALED-OBJECT 21069 . 21324)) ( -21526 21668 (DOCOBJ-ACQUIRE-SNAPPED-OBJECT 21536 . 21666)) (22007 26803 (DOCOBJ-EDIT-TIMESTAMP 22017 - . 22546) (DOCOBJ-MAKE-TIMESTAMP 22548 . 22959) (DOCOBJ-MAKE-TIMESTAMP-IMAGEFNS 22961 . 24031) ( -DOCOBJ-TIMESTAMP-BUTTONEVENTINFN 24033 . 24564) (DOCOBJ-TIMESTAMP-COPYFN 24566 . 24891) ( -DOCOBJ-TIMESTAMP-DISPLAYFN 24893 . 25186) (DOCOBJ-TIMESTAMP-GETFN 25188 . 25428) ( -DOCOBJ-TIMESTAMP-IMAGEBOXFN 25430 . 25786) (DOCOBJ-TIMESTAMP-PREPRINTFN 25788 . 26019) ( -DOCOBJ-TIMESTAMP-PUTFN 26021 . 26390) (DOCOBJ-TIMESTAMP-TO-STRING 26392 . 26801)) (27097 31404 ( -DOCOBJ-MAKE-FILESTAMP 27107 . 27448) (DOCOBJ-MAKE-FILESTAMP-IMAGEFNS 27450 . 28492) ( -DOCOBJ-FILESTAMP-COPYFN 28494 . 28809) (DOCOBJ-FILESTAMP-DISPLAYFN 28811 . 29099) ( -DOCOBJ-FILESTAMP-GETFN 29101 . 29454) (DOCOBJ-FILESTAMP-IMAGEBOXFN 29456 . 29794) ( -DOCOBJ-FILESTAMP-GET-FULLNAME 29796 . 30414) (DOCOBJ-FILESTAMP-NEW-FULLNAME 30416 . 30889) ( -DOCOBJ-FILESTAMP-PREPRINTFN 30891 . 31100) (DOCOBJ-FILESTAMP-PUTFN 31102 . 31402)) (31727 34224 ( -DOCOBJ-MAKE-HRULE 31737 . 32151) (DOCOBJ-EDIT-HRULE 32153 . 32625) (DOCOBJ-HRULE-INIT 32627 . 32959) ( -DOCOBJ-HRULE-GET-WIDTH 32961 . 33772) (DOCOBJ-HRULE-BUTTONEVENTINFN 33774 . 34222)) (34643 43315 ( -DOCOBJ-MAKE-INCLUDE 34653 . 35054) (DOCOBJ-MAKE-INCLUDE-IMAGEFNS 35056 . 36061) ( -DOCOBJ-INCLUDE-CREATE-OBJ 36063 . 36831) (DOCOBJ-INCLUDE-EDIT 36833 . 41432) ( -DOCOBJ-INCLUDE-EDIT-WINDOWP 41434 . 42290) (DOCOBJ-INCLUDE-RESET-OBJ 42292 . 43313)) (43316 52247 ( -DOCOBJ-INCLUDE-BEFOREHARDCOPYFN 43326 . 47048) (DOCOBJ-INCLUDE-CLEANUPFN 47050 . 48569) ( -DOCOBJ-INCLUDE-BUTTONEVENTINFN 48571 . 49105) (DOCOBJ-INCLUDE-COPYFN 49107 . 49325) ( -DOCOBJ-INCLUDE-DISPLAYFN 49327 . 50079) (DOCOBJ-INCLUDE-GETFN 50081 . 50804) ( -DOCOBJ-INCLUDE-IMAGEBOXFN 50806 . 51815) (DOCOBJ-INCLUDE-PREPRINTFN 51817 . 52036) ( -DOCOBJ-INCLUDE-PUTFN 52038 . 52245))))) + (FILEMAP (NIL (7732 20573 (DOCOBJ-ACQUIRE-OBJECT 7742 . 8743) (DOCOBJ-INIT 8745 . 9373) ( +DOCOBJ-TEDIT-MENU-ENTRY 9375 . 9797) (DOCOBJ-GET-LOOKS 9799 . 12259) (DOCOBJ-REGISTER-OBJECT 12261 . +12915) (DOCOBJ-STRING-IMAGEBOX 12917 . 13865) (DOCOBJ-WAIT-MOUSE 13867 . 14327) ( +DOCOBJ-BEFOREHARDCOPYFN 14329 . 19420) (DOCOBJ-AFTERHARDCOPYFN 19422 . 20571)) (20603 20870 ( +DOCOBJ-ACQUIRE-EVALED-OBJECT 20613 . 20868)) (21070 21212 (DOCOBJ-ACQUIRE-SNAPPED-OBJECT 21080 . 21210 +)) (21551 26347 (DOCOBJ-EDIT-TIMESTAMP 21561 . 22090) (DOCOBJ-MAKE-TIMESTAMP 22092 . 22503) ( +DOCOBJ-MAKE-TIMESTAMP-IMAGEFNS 22505 . 23575) (DOCOBJ-TIMESTAMP-BUTTONEVENTINFN 23577 . 24108) ( +DOCOBJ-TIMESTAMP-COPYFN 24110 . 24435) (DOCOBJ-TIMESTAMP-DISPLAYFN 24437 . 24730) ( +DOCOBJ-TIMESTAMP-GETFN 24732 . 24972) (DOCOBJ-TIMESTAMP-IMAGEBOXFN 24974 . 25330) ( +DOCOBJ-TIMESTAMP-PREPRINTFN 25332 . 25563) (DOCOBJ-TIMESTAMP-PUTFN 25565 . 25934) ( +DOCOBJ-TIMESTAMP-TO-STRING 25936 . 26345)) (26641 30948 (DOCOBJ-MAKE-FILESTAMP 26651 . 26992) ( +DOCOBJ-MAKE-FILESTAMP-IMAGEFNS 26994 . 28036) (DOCOBJ-FILESTAMP-COPYFN 28038 . 28353) ( +DOCOBJ-FILESTAMP-DISPLAYFN 28355 . 28643) (DOCOBJ-FILESTAMP-GETFN 28645 . 28998) ( +DOCOBJ-FILESTAMP-IMAGEBOXFN 29000 . 29338) (DOCOBJ-FILESTAMP-GET-FULLNAME 29340 . 29958) ( +DOCOBJ-FILESTAMP-NEW-FULLNAME 29960 . 30433) (DOCOBJ-FILESTAMP-PREPRINTFN 30435 . 30644) ( +DOCOBJ-FILESTAMP-PUTFN 30646 . 30946)) (31271 33768 (DOCOBJ-MAKE-HRULE 31281 . 31695) ( +DOCOBJ-EDIT-HRULE 31697 . 32169) (DOCOBJ-HRULE-INIT 32171 . 32503) (DOCOBJ-HRULE-GET-WIDTH 32505 . +33316) (DOCOBJ-HRULE-BUTTONEVENTINFN 33318 . 33766)) (34187 42859 (DOCOBJ-MAKE-INCLUDE 34197 . 34598) +(DOCOBJ-MAKE-INCLUDE-IMAGEFNS 34600 . 35605) (DOCOBJ-INCLUDE-CREATE-OBJ 35607 . 36375) ( +DOCOBJ-INCLUDE-EDIT 36377 . 40976) (DOCOBJ-INCLUDE-EDIT-WINDOWP 40978 . 41834) ( +DOCOBJ-INCLUDE-RESET-OBJ 41836 . 42857)) (42860 51598 (DOCOBJ-INCLUDE-BEFOREHARDCOPYFN 42870 . 46399) +(DOCOBJ-INCLUDE-CLEANUPFN 46401 . 47920) (DOCOBJ-INCLUDE-BUTTONEVENTINFN 47922 . 48456) ( +DOCOBJ-INCLUDE-COPYFN 48458 . 48676) (DOCOBJ-INCLUDE-DISPLAYFN 48678 . 49430) (DOCOBJ-INCLUDE-GETFN +49432 . 50155) (DOCOBJ-INCLUDE-IMAGEBOXFN 50157 . 51166) (DOCOBJ-INCLUDE-PREPRINTFN 51168 . 51387) ( +DOCOBJ-INCLUDE-PUTFN 51389 . 51596))))) STOP diff --git a/lispusers/DOC-OBJECTS.LCOM b/lispusers/DOC-OBJECTS.LCOM index 7cf44377e72e6cd20177dd7674621bceda7b6c87..8294d0c81cbaa97cee5ab980ae77b53699578fdd 100644 GIT binary patch delta 1762 zcmZuy&u<$=6y9|bD{+hCxXusUN_}yt(zHqB{k^s-)U9_myTRUF?QR-UMMR}3jgu(h zP!1@ER9v|<>J87%zW#-MBdGp@)ee?FW z2HSYdK3vR!I#av-@eE(&Mc|5MkuQtIy$vBRDpQaufO6vH`La|h3&P%a7s3H^a2e`b zP%sv%Rd{*V?Cfj-R&U?GyL$R@wJ?>sY*9SWyrurtvwDj@NkPztx%NqS*; zG&sgWIHX*hoPx6Jk(-vY;Lqq7<+ZDdYMJNClDfAu(JS&(sqjV5NHd-IJrVxfdv$jy z!7z#I0}OscL#*}-o$P5Dvz1s{Z#OSleLYX#)K&#(PDieTQ7uWgw33bU(V>IC&6b$a zzBXI=j^n|anTocY%`lf$5tgwoE10dAf#X&{QeoM+MLfp^2?8?lZs6RQM-UVde1bRx zmSclhdf8}>CBNwnKRu(|EdebQqqv}gVdJ0x9>-CJXjOuWIf14KhK8u>I2EEZ7#rt2 zI8|M@ykH3pE^?5Y#14EkinDY^`hvxjj)<$E~e$Mo4Cff&Nc8gg_KXTI1-O-kn%+qwu zZYBTv(Qfs>*Z4N(>L0t6TFD-oPTH<*_Bxrt^jGyC8ecluFKj2<>TfsyaI%d*ZF8VZ z({DF_ijrX(Kd---W)4j&3SE6NwwQ}4j+1{Umya$+x_Pk_vgT+Vcma9t5bxAn$F~A9 z8(|GRzO9bSuslC-Em9%CbJ8iRoLmB(7?w?RBurGns%disDR-%WI8F%N^zg2F+EL|r zvEsN(lz)-yQVhHtO=%R=9xn@^JN9G%yhKGA$pEht;08gmiK%%y4T6f3)nmWZRZMu4 z4#S6o<18DFXXnEI1~61EV_)@g4BRR|Bc;kOj* zIcVBi4HZeMI)&iX1-=w6zYX^|{scnQC{&4oxfEkCDPXD!*oCm!Ii7|1V;Nm@31sCZ zLsGzW`~V~_9)(!9GzKq*JEe=~WDfrsTif^HgYA#DRtvyMV)Jq7YC1fcGx`kMhg9>L HIhgq$QD>>z delta 2204 zcmZuyOKclu5Z<+uG<6ea)3|A5OglKGjoaFIckT5P^qF6B!ooe#wh~v@Sz9fB7u-Nao~Ws;|g)$#{9eXI*ssU=bwlFnQy+C zzx4(EV~c*b7U6P9{qpNcF3n|t7r^bTgfs8L!2!PlV=M>UMOC0o{10rmRjM5EUTI;n>XrsaVPlyd3wxNT%hWKc!BPt={ z)tzA6u;@S@)gA_EEGd-DuzbeZzRP)$AC)gUV0~ELVU_ zh>U8dN{Ve(N>Iq{Q3z?cB)=e4%?cv4$Cd?KdfqnAT|k^!HUpM~Slg;;K%U!m$gzV% z`}fgLN1Cc}(Oi_0sxF?FFjzLASk8wQ2voat6-fI>P!Z3e%@B17RV-9gsYIkSl$7}d zP?-Ql1wB-EPKytz;Ko>QXI|`5)6=wa&c$)1ac1XW!-aAuq?{Eug6dQlq2LQpmSokC z%GkSte^~_!$Lg})RVXDw&Taaz^Fw&y3J;Pksv7n<4}>fTUj=f2^;AFrtPH;xNVFM} zAbxp}F#@Sb2tr~IGL%^`wQ^al+ADZSy9Vi^WZ0H-^gyhc8NduOuvxIwV)0~EvLstJ ztGacPXa(2BvXSU|0_bWuNYPgbF>0~vZ+-kzUPeb?T5_o%mOG1Y~&gTnUadTT@XP~V=_yVT3K4EIvk zqaMB=*7WY!uixt3@t0a(dTjnn?}q9OMjN`eF=B?N!gp4`Y27rLo4Uz#$9wIc%qG+N zMXz~D^xEj^Mz%U@KcA-X)URM#oHP&CqrvyhXhZ337X}tHqC_LgOf9xvi**BT^@}^v z8q{KLR{i)3k*J#~L)Ygz=InjOoVymS&($9EKKhy$ONIUetIkGJV z)1Zsh#gvBBu~J?SIo2O5S*=>OM^i3ca5@u*n%t0RY-UJ#!Zcvh{`}QcqiohvwrXn< z^d#;iqojFL2hM}+ zb15DHFX7}TiD9`cB`r~wa53Er($t7J9EJe>@jdDzhZPP54h9@Wc%^Agj=Gb{oOLk~ zY4_vub+s|!nO4cl#%=25jk)R-%vi-|h81wbm_|uNF+-9kh4pg)7MtAP@@3r6_?WS* zPu@OYi-bM}e6)~tHoQIr%E}lwOC9MqjK0L1Aa?Wqh!c~^@ zUkAJnA3;gR+|ry2Gue%K0k9GHUYJ!?vH;5(99KX<;`VJTkj;W(S~g?~-j^RXhvS@o xb4O>8q;c51egj^+{>Ek_j!TkjpUR&KPwjbWoLh9<*_2bGA=$8?eOsPl{sSfO9XbF2 diff --git a/lispusers/tmax/TMAX b/lispusers/tmax/TMAX index 1b45c86a9..f11c51c34 100644 --- a/lispusers/tmax/TMAX +++ b/lispusers/tmax/TMAX @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 4-Mar-2024 16:23:18" {WMEDLEY}tmax>TMAX.;10 25460 +(FILECREATED "29-Apr-2024 10:01:10" {WMEDLEY}TMAX>TMAX.;11 25484 :EDIT-BY rmk - :CHANGES-TO (FNS TSP.LIST.OF.OBJECTS) + :CHANGES-TO (FNS TSP.SETUP.FMMENU) - :PREVIOUS-DATE "19-Jul-2023 09:14:13" {WMEDLEY}tmax>TMAX.;9) + :PREVIOUS-DATE " 4-Mar-2024 16:23:18" {WMEDLEY}TMAX>TMAX.;10) (PRETTYCOMPRINT TMAXCOMS) @@ -212,14 +212,13 @@ OBJMENUW]) (TSP.SETUP.FMMENU - [LAMBDA (WINDOW) (* fsg "24-Aug-87 16:04") - (* * Here to set up things like the FreeMenu, hasharrays, etc. - the first time through.) + [LAMBDA (WINDOW) (* ; "Edited 29-Apr-2024 09:56 by rmk") + (* fsg "24-Aug-87 16:04") + +(* ;;; "Here to set up things like the FreeMenu, hasharrays, etc. the first time through. WINDOW is the primary window of a text stream") (OR (WINDOWPROP WINDOW 'IMAGEOBJ.MENUW) - (TSP.FMMENU (OR (CAR (NLSETQ (TEXTSTREAM WINDOW))) - (with STREAM (with TEXTOBJ TEXTOBJ STREAMHINT) - FULLNAME]) + (TSP.FMMENU (fetch (TEXTWINDOW WTEXTSTREAM) of WINDOW]) (TSP.FMMENU [LAMBDA (STREAM) (* ; "Edited 2-May-97 17:02 by rmk:") @@ -554,14 +553,14 @@ (TSP.FUNCTION.HOOKS) (DECLARE%: DONTCOPY - (FILEMAP (NIL (8081 15296 (TSP.DISPLAY.FMMENU 8091 . 8656) (TSP.SETUP.FILENAMES 8658 . 9909) ( -TSP.SETUP.FMMENU 9911 . 10371) (TSP.FMMENU 10373 . 11559) (TSP.FM.APPLY 11561 . 11880) (UPDATE.ALL -11882 . 12554) (DOWNDATE.ALL 12556 . 12926) (TSP.FUNCTION.HOOKS 12928 . 14358) (TSP.GETFN 14360 . -14920) (TSP.PUTFN 14922 . 15294)) (15342 17591 (AutoUpdate.TOGGLE 15352 . 15588) (UPDATE? 15590 . -15735) (NGROUP.Menu.TOGGLE 15737 . 16119) (NGROUPMENU.ENABLED? 16121 . 16357) ( -NGROUP.Text-Before.TOGGLE 16359 . 16609) (TEXTBEFORE.ENABLED? 16611 . 16774) (NGROUP.Text-After.TOGGLE - 16776 . 17024) (TEXTAFTER.ENABLED? 17026 . 17187) (Manual.Index.TOGGLE 17189 . 17428) ( -MANUALINDEX.ENABLED? 17430 . 17589)) (17625 23098 (GET.TSP.FONT 17635 . 18799) (GET.TSP.FONT.FAMILY -18801 . 19649) (GET.TSP.FONT.SIZE 19651 . 20139) (GET.TSP.FONT.FACE 20141 . 20840) (ABBREVIATE.FONT -20842 . 22342) (TMAX.SHADEOBJ 22344 . 23096)) (23138 24048 (TSP.LIST.OF.OBJECTS 23148 . 24046))))) + (FILEMAP (NIL (8079 15320 (TSP.DISPLAY.FMMENU 8089 . 8654) (TSP.SETUP.FILENAMES 8656 . 9907) ( +TSP.SETUP.FMMENU 9909 . 10395) (TSP.FMMENU 10397 . 11583) (TSP.FM.APPLY 11585 . 11904) (UPDATE.ALL +11906 . 12578) (DOWNDATE.ALL 12580 . 12950) (TSP.FUNCTION.HOOKS 12952 . 14382) (TSP.GETFN 14384 . +14944) (TSP.PUTFN 14946 . 15318)) (15366 17615 (AutoUpdate.TOGGLE 15376 . 15612) (UPDATE? 15614 . +15759) (NGROUP.Menu.TOGGLE 15761 . 16143) (NGROUPMENU.ENABLED? 16145 . 16381) ( +NGROUP.Text-Before.TOGGLE 16383 . 16633) (TEXTBEFORE.ENABLED? 16635 . 16798) (NGROUP.Text-After.TOGGLE + 16800 . 17048) (TEXTAFTER.ENABLED? 17050 . 17211) (Manual.Index.TOGGLE 17213 . 17452) ( +MANUALINDEX.ENABLED? 17454 . 17613)) (17649 23122 (GET.TSP.FONT 17659 . 18823) (GET.TSP.FONT.FAMILY +18825 . 19673) (GET.TSP.FONT.SIZE 19675 . 20163) (GET.TSP.FONT.FACE 20165 . 20864) (ABBREVIATE.FONT +20866 . 22366) (TMAX.SHADEOBJ 22368 . 23120)) (23162 24072 (TSP.LIST.OF.OBJECTS 23172 . 24070))))) STOP diff --git a/lispusers/tmax/TMAX-XREF b/lispusers/tmax/TMAX-XREF index 8b0debc69..603ac43d4 100644 --- a/lispusers/tmax/TMAX-XREF +++ b/lispusers/tmax/TMAX-XREF @@ -1,13 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "16-Mar-2024 07:55:53" |{WMEDLEY}tmax>TMAX-XREF.;7| 23813 +(FILECREATED "20-Apr-2024 13:00:53" |{WMEDLEY}TMAX>TMAX-XREF.;8| 23838 :EDIT-BY |rmk| - :CHANGES-TO (VARS XREF.DISPLAY.METHODS) - (FNS XREF.BUTTONEVENTINFN XREF.GETFN XREF.GET.TOOBJ) + :CHANGES-TO (FNS XREF.BUTTONEVENTINFN) - :PREVIOUS-DATE "16-Mar-2024 07:52:25" |{WMEDLEY}tmax>TMAX-XREF.;6|) + :PREVIOUS-DATE "16-Mar-2024 07:55:53" |{WMEDLEY}TMAX>TMAX-XREF.;7|) (PRETTYCOMPRINT TMAX-XREFCOMS) @@ -155,6 +154,7 @@ (XREF.BUTTONEVENTINFN (LAMBDA (XREFOBJ STREAM SELECTION RELX RELY WINDOW HOSTSTREAM BUTTON) + (* \; "Edited 20-Apr-2024 12:56 by rmk") (* \; "Edited 16-Mar-2024 07:55 by rmk") (* \; "Edited 26-Dec-2023 11:56 by rmk") (* \; "Edited 9-Nov-97 08:09 by rmk:") @@ -186,7 +186,7 @@ 'RIGHT NIL T 'INVERTED) (AND NIL (TEDIT.SHOWSEL HOSTSTREAM T) (TEDIT.NORMALIZECARET HOSTSTREAM)) - (RETFROM (FUNCTION \\TEDIT.SELECT.LINE.SCANNER) + (RETFROM (FUNCTION \\TEDIT.XYTOSEL) (TEDIT.GETSEL HOSTSTREAM)) ELSE (TEDIT.PROMPTPRINT STREAM "Reference has no definition!" T)) NIL)) @@ -470,20 +470,20 @@ (FUNCTION XREF.GET.DISPLAY.TEXT))) (READVARS-FROM-STRINGS '(XREF.DISPLAY.METHODS) - "({H(24 ERROR) 2 NGROUP.XREF.DISPLAYFN NGROUP NOTE.XREF.DISPLAYFN NOTE }) + "({H(24 ERROR) 2 NOTE.XREF.DISPLAYFN NOTE NGROUP.XREF.DISPLAYFN NGROUP }) ") (FILESLOAD (COMPILED SYSLOAD) TMAX) (DECLARE\: DONTCOPY - (FILEMAP (NIL (3691 11273 (XREF 3701 . 4268) (XREFP 4270 . 4657) (XREF.DISPLAYFN 4659 . 5093) ( -XREF.IMAGEBOXFN 5095 . 5747) (XREF.PUTFN 5749 . 5995) (XREF.GETFN 5997 . 6526) (XREF.COPYFN 6528 . -7138) (XREF.BUTTONEVENTINFN 7140 . 10246) (XREF.WHENDELETEDFN 10248 . 10822) (XREF.TEDIT-TO-TEX-FN -10824 . 11271)) (11274 13249 (XREF.GET.DISPLAY.TEXT 11284 . 12568) (XREF.GET.TOOBJ 12570 . 13098) ( -TSPOBJ.GETTYPE 13100 . 13247)) (13250 19624 (UPDATE.XREFS 13260 . 15643) (INSERT.REF 15645 . 16057) ( -GET.REF 16059 . 17114) (GET.REFERENCE.BY 17116 . 18103) (TSP.LIST.REFS 18105 . 18557) (TSP.GET.INCODE -18559 . 19213) (TSP.GETCODEVAL 19215 . 19437) (TSP.PUTCODE 19439 . 19622)) (19716 20687 ( -XREF.ADD.DISPLAYFN 19726 . 20240) (XREF.GET.DISPLAYFN 20242 . 20685)) (20747 23109 ( -NGROUP.XREF.DISPLAYFN 20757 . 21717) (NGROUP.XREF.DISPLAY.TEXT 21719 . 22355) (NOTE.XREF.DISPLAYFN -22357 . 23107))))) + (FILEMAP (NIL (3619 11298 (XREF 3629 . 4196) (XREFP 4198 . 4585) (XREF.DISPLAYFN 4587 . 5021) ( +XREF.IMAGEBOXFN 5023 . 5675) (XREF.PUTFN 5677 . 5923) (XREF.GETFN 5925 . 6454) (XREF.COPYFN 6456 . +7066) (XREF.BUTTONEVENTINFN 7068 . 10271) (XREF.WHENDELETEDFN 10273 . 10847) (XREF.TEDIT-TO-TEX-FN +10849 . 11296)) (11299 13274 (XREF.GET.DISPLAY.TEXT 11309 . 12593) (XREF.GET.TOOBJ 12595 . 13123) ( +TSPOBJ.GETTYPE 13125 . 13272)) (13275 19649 (UPDATE.XREFS 13285 . 15668) (INSERT.REF 15670 . 16082) ( +GET.REF 16084 . 17139) (GET.REFERENCE.BY 17141 . 18128) (TSP.LIST.REFS 18130 . 18582) (TSP.GET.INCODE +18584 . 19238) (TSP.GETCODEVAL 19240 . 19462) (TSP.PUTCODE 19464 . 19647)) (19741 20712 ( +XREF.ADD.DISPLAYFN 19751 . 20265) (XREF.GET.DISPLAYFN 20267 . 20710)) (20772 23134 ( +NGROUP.XREF.DISPLAYFN 20782 . 21742) (NGROUP.XREF.DISPLAY.TEXT 21744 . 22380) (NOTE.XREF.DISPLAYFN +22382 . 23132))))) STOP diff --git a/lispusers/tmax/TMAX-XREF.LCOM b/lispusers/tmax/TMAX-XREF.LCOM index 50915cf92a03018896802e677781237afc3c3918..4bde7eec7bda2d77e9d3e05295d2e72bc28e1d3e 100644 GIT binary patch delta 324 zcmX>X+7mh3U zm~79;rp{GU9q#Mu;^P`wYm<{%Tu@q^T2u`77qaKfH|sJj~$B<-~b=TNH;$PKcJYxqFZRT`8(r6 zPT^ozpi@Kid_4VJ^@5!p{rp^mHqYnolAFw|AjAbU*Uvr3KQusLvY?^}i=Tgp>*QE1 FeE>i9T^0ZU diff --git a/lispusers/tmax/TMAX.LCOM b/lispusers/tmax/TMAX.LCOM index a807e5459747596ec31c2ffe535786129624bc4c..f2adb0bd24557a0b8bd9b343cff33313c65afc3b 100644 GIT binary patch delta 411 zcmeA#Utc^ST*Syy*Rh~T*T}%gM8VL&%D~Xd&|qS=T78JGV}u=u(6cr))KuV7GO|EY zXk=w*VP$Bpq>xmUnw+0okeQR3qL5lqP*kjHr4SMvpcm{K5*ncA=IiU~7pjn%r=a8( z>f@t;Y=)kmo{~aJVhKmQaOH;urAjmb$(?2v=*9B<7WK~8TUSw|@ zY`)L?X<>VL1_lO3hjbvxzy%_<3L$YgK_UVS8b%giuR}d;WUS!s8WQg5=i(ne vd9SFHDwl>KP=RYiNN@?ymk$UV5NV3J3aDlWVgTN2oCXN=Rm| delta 898 zcmaJ;O>Wab7>yH%AW~722!yiwWI+{2*c#hOS`VnIYmXCG{t06{X?6{5R3chhC9SB0 zP>ujqPJlQ7i_$}I1vZEiz!4bRNflIyS-qKg-^}~@I{EnSQ*ZW#D|6cAn>BoPJh<2l zU42)2E+YX7Jk&*ZFcuZ0)Bz!^BHYk;cr_mGpB$f#j)n&?yf__Cp5och!b3883%nIM z4lIvJlElNo;EZu^zb9i<=Y>MmvK?YjqKCwsedeB({}BR8quxZb0r#Zu*g+`ymgH~m z5F-o(z#U4uwjTwe$%cWKHF4+sC>E>&(y&~|vdY8zo=Z%J^gp~f8cj~mC&Te%bLk6B zD9kR`%2&U+AGxWH5Rw6#8-;2IWC(1GYla>gZIO~NqMm3`->pFhPhcQ^qRHrh6knDy* z$l`E?m8z@(_I&E<4%-MTVbGD-V^K%4T$gy!La7Qh!}m-(w0%!(>mIX9#cd|T_F6$K zS4rijQY=Sr#fLJ~I@C7^F`4>+FyeG!Y*{nd%n*aaag7w4|>y7!3?&dPw zR^qr2+rDlWS2KGtiYmj=NesG`VlHPV>68-UpKrN#iMy`!9^~Wu?^2Pwa{0&zt1a8xbXEeDqLJNs3BJY8q)CMiQR&77%&dSekcC~3pX+RXp} diff --git a/lispusers/tmax/TMAX.TEDITX b/lispusers/tmax/TMAX.TEDITX new file mode 100644 index 0000000000000000000000000000000000000000..6d56e2cae372887793ddf136d4c5130583782c1e GIT binary patch literal 62677 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 GpZ#x#hY#HV literal 0 HcmV?d00001