From b82b06e93bcc5df726dec54012688c6bf9132db3 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Tue, 25 Jun 2024 21:45:29 -0700 Subject: [PATCH 1/5] Core Tedit files --- library/tedit/TEDIT | 1046 ++++++++++-------- library/tedit/TEDIT-COMMAND | 288 +++-- library/tedit/TEDIT-COMMAND.LCOM | Bin 17225 -> 16917 bytes library/tedit/TEDIT-FILE | 659 +++++------ library/tedit/TEDIT-FILE.LCOM | Bin 38737 -> 38390 bytes library/tedit/TEDIT-FIND | 474 ++++---- library/tedit/TEDIT-FIND.LCOM | Bin 7552 -> 7588 bytes library/tedit/TEDIT-FNKEYS | 176 +-- library/tedit/TEDIT-FNKEYS.LCOM | Bin 14557 -> 15881 bytes library/tedit/TEDIT-HCPY | 24 +- library/tedit/TEDIT-HCPY.LCOM | Bin 13145 -> 13128 bytes library/tedit/TEDIT-HISTORY | 100 +- library/tedit/TEDIT-HISTORY.LCOM | Bin 9086 -> 9788 bytes library/tedit/TEDIT-LOOKS | 422 +++---- library/tedit/TEDIT-LOOKS.LCOM | Bin 42804 -> 42749 bytes library/tedit/TEDIT-MENU | 1090 +++++++++--------- library/tedit/TEDIT-MENU.LCOM | Bin 93028 -> 92501 bytes library/tedit/TEDIT-OLDFILE | 61 +- library/tedit/TEDIT-OLDFILE.LCOM | Bin 19028 -> 19138 bytes library/tedit/TEDIT-PAGE | 59 +- library/tedit/TEDIT-PAGE.LCOM | Bin 24624 -> 24758 bytes library/tedit/TEDIT-SCREEN | 1039 +++++++++--------- library/tedit/TEDIT-SCREEN.LCOM | Bin 33456 -> 32301 bytes library/tedit/TEDIT-SELECTION | 804 ++++++++------ library/tedit/TEDIT-SELECTION.LCOM | Bin 26531 -> 28107 bytes library/tedit/TEDIT-STREAM | 585 ++++++---- library/tedit/TEDIT-STREAM.LCOM | Bin 30011 -> 31859 bytes library/tedit/TEDIT-WINDOW | 1639 ++++++++++++++-------------- library/tedit/TEDIT-WINDOW.LCOM | Bin 58418 -> 58481 bytes library/tedit/TEDIT.LCOM | Bin 32028 -> 34095 bytes library/tedit/tedit-exports.all | 113 +- 31 files changed, 4594 insertions(+), 3985 deletions(-) diff --git a/library/tedit/TEDIT b/library/tedit/TEDIT index 5f71d9a40..4687c413e 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 "25-Jun-2024 12:01:24" {WMEDLEY}tedit>TEDIT.;613 139088 :EDIT-BY rmk - :PREVIOUS-DATE "31-Mar-2024 10:14:22" {WMEDLEY}TEDIT>TEDIT.;537) + :CHANGES-TO (FNS TEDIT TEDIT.KILL TEDIT.QUIT TEDIT.RPLCHARCODE \TEDIT.APPLY.OBJFN \TEDIT.QUIT) + + :PREVIOUS-DATE "23-Jun-2024 23:27:00" {WMEDLEY}tedit>TEDIT.;612) (PRETTYCOMPRINT TEDITCOMS) @@ -57,8 +59,8 @@ (FNS \TEDIT.PARAPIECES \TEDIT.PARA.FIRST \TEDIT.PARA.LAST) (FNS \TEDIT.WORD.FIRST \TEDIT.WORD.LAST) (COMS (* ; "Object-oriented editing") - (FNS TEDIT.INSERT.OBJECT TEDIT.EDIT.OBJECT TEDIT.FIND.OBJECT TEDIT.OBJECT.CHANGED - TEDIT.MAP.OBJECTS) + (FNS TEDIT.INSERT.OBJECT TEDIT.EDIT.OBJECT TEDIT.FIND.OBJECT TEDIT.FIND.OBJECT.BACKWARD + TEDIT.OBJECT.CHANGED TEDIT.MAP.OBJECTS) (FILES IMAGEOBJ)) (* ;; "Would be nice to just do (DOFILESLOAD (CDR TEDITFILES)). But the order for exports.all and the order for loading have to be aligned.") @@ -184,6 +186,8 @@ (TEDIT [LAMBDA (TEXT WINDOW DONTSPAWN PROPS) + (* ;; "Edited 25-Jun-2024 11:59 by rmk") + (* ;; "Edited 9-Mar-2024 22:47 by rmk") (* ;; "Edited 20-Oct-2023 11:02 by rmk") @@ -212,7 +216,7 @@  "Mark the document as actively in edit, so caret flashes when the window first opens.") (SETQ TSTREAM (OPENTEXTSTREAM TEXT (OR WINDOW 'Tedit) NIL NIL PROPS)) - (SETQ WINDOW (\TEDIT.PRIMARYW TSTREAM)) + (SETQ WINDOW (\TEDIT.PRIMARYPANE TSTREAM)) (COND (DONTSPAWN (* ;  "Either no processes running, or specifically not to spawn one.") @@ -237,14 +241,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 +262,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 +442,11 @@ (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 18-May-2024 16:21 by rmk") + (* ; "Edited 12-May-2024 20:54 by rmk") + (* ; "Edited 22-Apr-2024 23:55 by rmk") + (* ; "Edited 29-Apr-2024 12:54 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,12 +457,15 @@ (* ;; "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) + (\TEDIT.SHOWSEL FROM NIL FOBJ) (* ; "Turn off any current highlighting") + (\TEDIT.SHOWSEL TO NIL TOBJ) (* ;; "Install FROM pieces at TO, first clearing out the blue pending delete.") @@ -478,63 +492,72 @@ (* ;; "") - (\TEDIT.SHOWSEL TO NIL) (* ; + (\TEDIT.SHOWSEL TO NIL TOBJ) (* ;  "Take down anything that might thave appeared") (\TEDIT.FIXSEL TO TOBJ) - (\TEDIT.SHOWSEL TO T)))]) + (\TEDIT.SHOWSEL TO T TOBJ)))]) (TEDIT.DELETE - [LAMBDA (STREAM SEL LEN LEAVECARETLOOKS) (* ; "Edited 23-May-2023 12:57 by rmk") + [LAMBDA (TSTREAM SEL LEN LEAVECARETLOOKS) (* ; "Edited 22-Jun-2024 00:06 by rmk") + (* ; "Edited 22-May-2024 09:44 by rmk") + (* ; "Edited 23-May-2023 12:57 by rmk") (* ; "Edited 22-May-2023 10:54 by rmk") (* ; "Edited 10-Nov-2022 22:48 by rmk") (* ; "Edited 12-Jun-90 17:49 by mitani") - (* ;; "Delete the specified characters from STREAM.") + (* ;; "Delete the specified characters from TSTREAM.") (* ;; "If LEAVECARETLOOKS is non-NIL, the selection will NOT be set up to do the right thing with type-in. This can save time in inner loops.") - (LET ((TEXTOBJ (TEXTOBJ STREAM))) - (CL:WHEN (FIXP SEL) - (TEDIT.SETSEL STREAM SEL LEN NIL NIL LEAVECARETLOOKS) - (SETQ SEL (fetch (TEXTOBJ SEL) of TEXTOBJ))) - (\TEDIT.DELETE TEXTOBJ (OR SEL (fetch (TEXTOBJ SEL) of TEXTOBJ]) + (LET ((TEXTOBJ (TEXTOBJ TSTREAM))) + (if (FIXP SEL) + then (TEDIT.SETSEL TSTREAM SEL LEN NIL NIL LEAVECARETLOOKS) + (SETQ SEL (FGETTOBJ TEXTOBJ SEL)) + elseif (NULL SEL) + then (SETQ SEL (FGETTOBJ TEXTOBJ SEL))) + (SELECTION! SEL) + (\TEDIT.DELETE TEXTOBJ SEL]) (TEDIT.INSERT - [LAMBDA (TSTREAM TEXT CH#ORSEL LOOKS DONTSCROLL) (* ; "Edited 22-Dec-2023 22:05 by rmk") + [LAMBDA (TSTREAM TEXT CH#ORSEL LOOKS DONTSCROLL) (* ; "Edited 22-Jun-2024 00:02 by rmk") + (* ; "Edited 20-Jun-2024 09:08 by rmk") + (* ; "Edited 22-May-2024 14:00 by rmk") + (* ; "Edited 22-Dec-2023 22:05 by rmk") (* ; "Edited 12-Nov-2023 12:30 by rmk") (* ; "Edited 15-Oct-2023 14:57 by rmk") (* ; "Edited 31-May-2023 23:25 by rmk") (* ; "Edited 27-May-2023 10:47 by rmk") (* ; "Edited 9-Nov-2022 10:36 by rmk") (* ; "Edited 29-May-91 18:21 by jds") - - (* ;; "Insert TEXT (litatom or string) at the appropriate spot in the text.. No-op if given something else--should it error? ") - - (CL:UNLESS (\TEDIT.READONLY TSTREAM) - (PROG ((TEXTOBJ (TEXTOBJ TSTREAM))) - (CL:WHEN (LITATOM TEXT) - (SETQ TEXT (MKSTRING TEXT))) - - (* ;; "Can't insert an empty string sensibly.") - - (CL:WHEN (OR (NOT (STRINGP TEXT)) - (ZEROP (NCHARS TEXT))) - (RETURN)) - (if (FIXP CH#ORSEL) - then (TEDIT.SETSEL TEXTOBJ CH#ORSEL 1 'LEFT) + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (if (IMAGEOBJP TEXT) + then (TEDIT.INSERT.OBJECT TEXT TSTREAM (OR (FIXP CH#ORSEL) + (TEDIT.GETPOINT TSTREAM))) + else (CL:WHEN (LITATOM TEXT) + (SETQ TEXT (MKSTRING TEXT))) + (CL:WHEN (AND (STRINGP TEXT) + (NEQ 0 (NCHARS TEXT))) + + (* ;; "Nothing to do for an empty string") + + (LET ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + (if (FIXP CH#ORSEL) + then (TEDIT.SETSEL TEXTOBJ CH#ORSEL 1 'LEFT) (* ; "He gave us a ch# to insert before") - (SETQ CH#ORSEL (TEXTSEL TEXTOBJ)) - elseif (NOT CH#ORSEL) - then (SETQ CH#ORSEL (TEXTSEL TEXTOBJ))) - (CL:UNLESS (AND CH#ORSEL (GETSEL CH#ORSEL SET)) - (TEDIT.PROMPTPRINT TEXTOBJ "Please select a place for the insertion." T) - (RETURN)) - (CL:WHEN LOOKS (* ; "Set up any specified looks.") - (TEDIT.CARETLOOKS TSTREAM LOOKS)) - (\TEDIT.INSERT TEXT CH#ORSEL TEXTOBJ DONTSCROLL)))]) + (SETQ CH#ORSEL (TEXTSEL TEXTOBJ)) + elseif (NOT CH#ORSEL) + then (SETQ CH#ORSEL (TEXTSEL TEXTOBJ))) + (SELECTION! CH#ORSEL) + (if (FGETSEL CH#ORSEL SET) + then (CL:WHEN LOOKS (TEDIT.CARETLOOKS TSTREAM LOOKS)) + (\TEDIT.INSERT TEXT CH#ORSEL TSTREAM DONTSCROLL LOOKS) + else (TEDIT.PROMPTPRINT TEXTOBJ "Please select a place for the insertion." T)))) + ]) (TEDIT.KILL - [LAMBDA (TSTREAM) (* ; "Edited 20-Sep-2023 17:55 by rmk") + [LAMBDA (TSTREAM) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 12-May-2024 11:55 by rmk") + (* ; "Edited 20-Sep-2023 17:55 by rmk") (* ; "Edited 12-Jun-90 17:49 by mitani") (* ;; "Force the edit session supported by TSTREAM to terminate") @@ -542,14 +565,15 @@ (LET ((TEXTOBJ (TEXTOBJ TSTREAM)) TEDW TEDPROC) (FSETTOBJ TEXTOBJ EDITFINISHEDFLG T) - (CL:WHEN (AND (SETQ TEDW (CAR (FGETTOBJ TEXTOBJ \WINDOW))) + (CL:WHEN (AND (SETQ TEDW (\TEDIT.PRIMARYPANE TEXTOBJ)) [PROCESSP (SETQ TEDPROC (WINDOWPROP TEDW 'PROCESS] (NEQ TEDPROC (THIS.PROCESS))) (DEL.PROCESS TEDPROC) (TEDIT.DEACTIVATE.WINDOW TEDW))]) (TEDIT.QUIT - [LAMBDA (STREAM VALUE) (* ; "Edited 20-Sep-2023 17:55 by rmk") + [LAMBDA (STREAM VALUE) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 20-Sep-2023 17:55 by rmk") (* ; "Edited 10-Apr-2023 10:19 by rmk") (* ; "Edited 12-Jun-90 17:49 by mitani") @@ -559,7 +583,7 @@ (FSETTOBJ TEXTOBJ EDITFINISHEDFLG (OR VALUE T)) (* ;  "tell the command loop to stop next time through") (CL:WHEN [AND (FGETTOBJ TEXTOBJ \WINDOW) - (NEQ (SETQ MAINW (\TEDIT.PRIMARYW TEXTOBJ)) + (NEQ (SETQ MAINW (\TEDIT.PRIMARYPANE TEXTOBJ)) (PROCESSPROP (TTY.PROCESS) 'WINDOW] @@ -575,7 +599,12 @@ (DISMISS))))]) (TEDIT.MOVE - [LAMBDA (FROM TO) (* ; "Edited 15-Mar-2024 13:54 by rmk") + [LAMBDA (FROM TO) (* ; "Edited 18-May-2024 16:24 by rmk") + (* ; "Edited 12-May-2024 21:14 by rmk") + (* ; "Edited 29-Apr-2024 12:53 by rmk") + (* ; "Edited 8-May-2024 09:27 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 +622,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 FOBJ) (* ; "Turn off any current highlighting") + (\TEDIT.SHOWSEL TO NIL TOBJ) (* ;; "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 +640,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 +666,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) + (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 TOBJ) + (\TEDIT.COMPOSITE.EVENT TOBJ TPREVEVENTS) (* ; "For undoing the changes to TO") + (CL:UNLESS (EQ FOBJ TOBJ) (* ; "Undoing changes in different FROM") - (* ;; "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.") + (* ;; " 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.") - (LET [(INSEVENT (\TEDIT.POPEVENT TOBJ)) - (DELEVENT (CL:IF (EQ TOBJ FOBJ) - (\TEDIT.POPEVENT TOBJ) - (\TEDIT.LASTEVENT FOBJ))] + (* ;; "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.") - (* ;; - "We have to pop the INSEVENT so we can see the DELEVENT, then we push it back.") - - (* ;; "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 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 +890,10 @@ (DEFINEQ (\TEDIT.MOVE.MSG - [LAMBDA (FROM TO COPYFLG) (* ; "Edited 1-Feb-2024 23:33 by rmk") + [LAMBDA (FROM TO COPYFLG) (* ; "Edited 22-May-2024 14:06 by rmk") + (* ; "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,16 +901,15 @@ (* ;; "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"))) (if (AND FOBJ TOBJ) then (if (EQ FOBJ TOBJ) - then (\TEDIT.READONLY TOBJ) + then (\TEDIT.READONLY TOBJ NIL (FGETSEL (FGETTOBJ TOBJ SEL) + CH#)) elseif (\TEDIT.READONLY TOBJ "Destination") else (AND (NOT COPYFLG) (\TEDIT.READONLY FOBJ "Source"))) @@ -896,14 +921,24 @@ T]) (\TEDIT.READONLY - [LAMBDA (TEXTOBJ TYPE) (* ; "Edited 1-Feb-2024 17:33 by rmk") + [LAMBDA (TEXTOBJ TYPE CHNO) (* ; "Edited 25-May-2024 10:01 by rmk") + (* ; "Edited 22-May-2024 13:00 by rmk") + (* ; "Edited 1-Feb-2024 17:33 by rmk") (* ; "Edited 13-Nov-2023 11:26 by rmk") (SETQ TEXTOBJ (TEXTOBJ TEXTOBJ)) - (CL:WHEN (FGETTOBJ TEXTOBJ TXTREADONLY) - (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT (OR TYPE "Text") - " is read only--aborted") - T T) - T)]) + (if (FGETTOBJ TEXTOBJ TXTREADONLY) + then (CL:UNLESS (FGETTOBJ TEXTOBJ TXTREADONLYQUIET) + (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT (OR TYPE "Text") + " is read only--aborted") + T T)) + 'READONLY + elseif [AND (FGETTOBJ TEXTOBJ TXTAPPENDONLY) + (OR (NULL CHNO) + (ILEQ CHNO (FGETTOBJ TEXTOBJ TEXTLEN] + then (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT (OR TYPE "Text") + " is append only--aborted") + T T) + 'APPENDONLY]) ) (DEFINEQ @@ -916,7 +951,13 @@ TEXTLEN))]) (TEDIT.RPLCHARCODE - [LAMBDA (TSTREAM N NEWCHARCODE NEWCHARLOOKS) (* ; "Edited 17-Mar-2024 00:24 by rmk") + [LAMBDA (TSTREAM N NEWCHARCODE NEWCHARLOOKS DONTDISPLAY) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 22-May-2024 14:10 by rmk") + (* ; "Edited 10-May-2024 13:23 by rmk") + (* ; "Edited 8-May-2024 23:09 by rmk") + (* ; "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,57 +966,98 @@ (* ;; "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.") + (* ;; "If DONTDISPLAY, this doesn't update the display. ") + (* ;; "NOTE: this may introduce new pieces, so must be used carefully with other piece-based or BIN-based iterations.") - (LET ((TEXTOBJ (TEXTOBJ TSTREAM)) - PC START-OF-PIECE) - (DECLARE (SPECVARS START-OF-PIECE)) - (CL:WHEN (ILESSP N 0) - (add N (ADD1 (FGETTOBJ TEXTOBJ TEXTLEN)))) - (CL:UNLESS (AND (IGEQ N 1) - (ILEQ N (FGETTOBJ TEXTOBJ TEXTLEN))) - (\ILLEGAL.ARG N)) - (CL:UNLESS (OR (CHARCODEP NEWCHARCODE) - (IMAGEOBJP NEWCHARCODE)) - (\ILLEGAL.ARG NEWCHARCODE)) - (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)) - - (* ;; "Chop off the suffix. Unless N was last in PC, the piece containing is new.") - - (\TEDIT.ALIGNEDPIECE (ADD1 N) - TEXTOBJ) - (SETQ PC (\TEDIT.ALIGNEDPIECE N TEXTOBJ)) (* ; + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (PROG ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + PC START-OF-PIECE CHNO) + (DECLARE (SPECVARS START-OF-PIECE)) + (CL:WHEN (ILESSP N 0) + (add N (ADD1 (FGETTOBJ TEXTOBJ TEXTLEN)))) + (CL:WHEN (\TEDIT.READONLY TEXTOBJ) + (RETURN NIL)) + (CL:UNLESS (AND (IGEQ N 1) + (ILEQ N (FGETTOBJ TEXTOBJ TEXTLEN))) + (\ILLEGAL.ARG N)) + (CL:UNLESS (OR (CHARCODEP NEWCHARCODE) + (IMAGEOBJP NEWCHARCODE)) + (\ILLEGAL.ARG NEWCHARCODE)) + (CL:WHEN [AND NEWCHARLOOKS (NOT (OR (FONTP NEWCHARLOOKS) + (type? CHARLOOKS NEWCHARLOOKS] + (\ILLEGAL.ARG NEWCHARLOOKS)) + (replace (STREAM BINABLE) of TSTREAM with NIL) + (SETQ CHNO (ADD1 N)) (* ; "Fileptr to character number") + (SETQ PC (\TEDIT.CHTOPC CHNO TEXTOBJ T)) + [if (AND (SMALLP NEWCHARCODE) + (MEMB (PTYPE PC) + STRING.PTYPES) + (OR (NULL NEWCHARLOOKS) + (EQ NEWCHARLOOKS (PLOOKS PC))) + (NEQ PC (FGETTOBJ TEXTOBJ LASTPIECE))) + then + (* ;; + "Fast case: Smash a new character code into an existing string piece with same looks. ") + + (RPLCHARCODE (PCONTENTS PC) + (IDIFFERENCE CHNO START-OF-PIECE) + NEWCHARCODE) + (CL:WHEN (AND (EQ THINSTRING.PTYPE (PTYPE PC)) + (IGREATERP NEWCHARCODE 255)) + (FSETPC PC PTYPE FATSTRING.PTYPE) + (FSETPC PC PBINABLE NIL) + (FSETPC PC PBYTESPERCHAR 2) + (FSETPC PC PBYTELEN (UNFOLD (PLEN PC) + 2))) + elseif [AND (IMAGEOBJP NEWCHARCODE) + (EQ OBJECT.PTYPE (PTYPE PC)) + (OR (NULL NEWCHARLOOKS) + (EQ NEWCHARLOOKS (PLOOKS PC] + then (FSETPC PC PCONTENTS NEWCHARCODE) + else (CL:UNLESS (IEQP CHNO START-OF-PIECE) + + (* ;; "Chop off the suffix (essentially (\TEDIT.ALIGNEDPIECE CHNO ..)") + + (\TEDIT.SPLITPIECE PC (IDIFFERENCE CHNO START-OF-PIECE) + TEXTOBJ)) (* ;  "Chop off the prefix. PC is now the singleton target") - (if (IMAGEOBJP NEWCHARCODE) - then (FSETPC PC PBINABLE NIL) - (FSETPC PC PCONTENTS NEWCHARCODE) - (FSETPC PC PTYPE OBJECT.PTYPE) - (FSETPC PC PBYTESPERCHAR NIL) (* ; "Doesn't make sense for objects") - (FSETPC PC PBYTELEN NIL) - else (FSETPC PC PCONTENTS (MKSTRING (CHARACTER NEWCHARCODE))) - (if (IGREATERP NEWCHARCODE 255) - then (FSETPC PC PTYPE FATSTRING.PTYPE) - (FSETPC PC PBINABLE NIL) - (FSETPC PC PBYTESPERCHAR 2) - (FSETPC PC PBYTELEN 2) - else (FSETPC PC PTYPE THINSTRING.PTYPE) - (FSETPC PC PBINABLE T) - (FSETPC PC PBYTESPERCHAR 1) - (FSETPC PC PBYTELEN 1))) - (FSETPC PC PFPOS NIL) - (CL:WHEN NEWCHARLOOKS - (FSETPC PC PLOOKS (CL:IF (FONTP NEWCHARLOOKS) - (\TEDIT.UNIQUIFY.CHARLOOKS (CHARLOOKS.FROM.FONT NEWCHARLOOKS) - TEXTOBJ) - NEWCHARLOOKS))) - NEWCHARCODE]) + (SETQ PC (\TEDIT.ALIGNEDPIECE N TEXTOBJ)) (* ; "Chop off the suffix") + + (* ;; "CHNO is now isolated into a one-character new piece which we convert to a string piece and smash. ") + + (if (IMAGEOBJP NEWCHARCODE) + then (FSETPC PC PBINABLE NIL) + (FSETPC PC PCONTENTS NEWCHARCODE) + (FSETPC PC PTYPE OBJECT.PTYPE) + (FSETPC PC PBYTESPERCHAR NIL) (* ; "Doesn't make sense for objects") + (FSETPC PC PBYTELEN NIL) + else (FSETPC PC PCONTENTS (MKSTRING (CHARACTER NEWCHARCODE))) + (* ; + "Use the extend-string in INSERTCH for repeated calls?") + (if (IGREATERP NEWCHARCODE 255) + then (FSETPC PC PTYPE FATSTRING.PTYPE) + (FSETPC PC PBINABLE NIL) + (FSETPC PC PBYTESPERCHAR 2) + (FSETPC PC PBYTELEN 2) + else (FSETPC PC PTYPE THINSTRING.PTYPE) + (FSETPC PC PBINABLE T) + (FSETPC PC PBYTESPERCHAR 1) + (FSETPC PC PBYTELEN 1))) + (FSETPC PC PFPOS NIL) + (CL:WHEN NEWCHARLOOKS + (FSETPC PC PLOOKS (CL:IF (FONTP NEWCHARLOOKS) + (\TEDIT.UNIQUIFY.CHARLOOKS (CHARLOOKS.FROM.FONT + NEWCHARLOOKS) + TEXTOBJ) + NEWCHARLOOKS)))] + (CL:UNLESS (OR DONTDISPLAY (NOT (\TEDIT.PRIMARYPANE TEXTOBJ))) + (\TEDIT.UPDATE.LINES TEXTOBJ 'INSERTION CHNO 1)) + (RETURN TSTREAM]) (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 +1067,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 +1089,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 +1099,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 +1151,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 +1160,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 +1181,19 @@ (T TSTREAM)))]) (\TEDIT.INSERT - [LAMBDA (INSERT SEL TEXTOBJ DONTSCROLL) (* ; "Edited 17-Mar-2024 11:41 by rmk") - (* ; "Edited 15-Mar-2024 13:32 by rmk") + [LAMBDA (INSERT SEL TSTREAM DONTSCROLL TYPEIN) (* ; "Edited 21-Jun-2024 23:09 by rmk") + (* ; "Edited 22-May-2024 14:00 by rmk") + (* ; "Edited 18-May-2024 20:27 by rmk") + (* ; "Edited 12-May-2024 20:52 by rmk") + (* ; "Edited 6-May-2024 13:47 by rmk") + (* ; "Edited 21-Apr-2024 20:24 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") @@ -1115,68 +1205,68 @@ (* ;; "Text can be a string or a single charcode (only on the call from \TEDIT.COMMAND.LOOP). ") - (* ;; - "TEDIT.INSERT passes DONTSCROLL and asserts NOTINCREMENTAL, other calls do incremental scrolling.") + (CL:WHEN (OR (CHARCODEP INSERT) + (NEQ 0 (NCHARS INSERT)) + (GETSEL SEL SET)) + (PROG* ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + (CARETCHNO (TEDIT.GETPOINT TEXTOBJ SEL)) + NCHARSADDED) + (CL:WHEN (\TEDIT.READONLY TEXTOBJ NIL CARETCHNO) + (RETURN NIL)) + (CL:WHEN (FGETTOBJ TEXTOBJ BLUEPENDINGDELETE) (* ; "Blue pending delete?") + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ) + (* ; "Make it a normal selection again.") + (\TEDIT.DELETE TEXTOBJ SEL) + (SETQ CARETCHNO (TEDIT.GETPOINT TEXTOBJ SEL))) + (if (CHARCODEP INSERT) + then + (* ;; "Meta,EOL causes a line break but not a paragraph break, in terms of formatting. Original code converted to a formatted file on the first appearance of Meta,EOL, not clear why and so removed.") + + (* ;; "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 CARETCHNO TEXTOBJ (FMEMB INSERT + (CHARCODE (EOL CR LF FORM] + (SETQ NCHARSADDED 1) + elseif [thereis CH instring INSERT suchthat (FMEMB CH (CHARCODE (EOL CR LF FORM] + then + (* ;; "It's maybe worth a scan here to see if we can insert the string. This avoids the heavier per-character complexity of \INSERTCH.") + + [for CH instring INSERT as NCH# from CARETCHNO + do (\TEDIT.INSERTCH CH NCH# TEXTOBJ (FMEMB CH (CHARCODE (EOL CR LF FORM] + (SETQ NCHARSADDED (NCHARS INSERT)) + else (\TEDIT.INSERTCH INSERT CARETCHNO TEXTOBJ) + (SETQ NCHARSADDED (NCHARS INSERT))) + (FSETTOBJ TEXTOBJ \DIRTY T) + + (* ;; "") - (* ;; "SELECTION-SET test may be unnecessary here, TEDIT.INSERT already checks, not sure about the 2 other calls.") + (* ;; "The piece table is now correct: NCHARSADDED new characters have been been added in front of CARETCHNO. The caret is now shifted back by NCHARSADDED. ") - (CL:UNLESS (\TEDIT.READONLY TEXTOBJ) - [if (NOT (AND SEL (GETSEL SEL SET))) - then (TEDIT.PROMPTPRINT TEXTOBJ "Please select a place for the insertion." T) - else - (* ;; "Check for blue-pending-delete, and do it if it's there.") + (* ;; "Set the caret so that the next insertion should also come in front of that (now displaced) character, and then update the screen.") - (CL:WHEN (FGETTOBJ TEXTOBJ BLUEPENDINGDELETE) - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ) - (* ; "Make it a normal selection again.") - (\TEDIT.DELETE TEXTOBJ SEL)) - (PROG ((CHNO (TEDIT.GETPOINT TEXTOBJ SEL)) - (PANES (FGETTOBJ TEXTOBJ \WINDOW)) - NCHARSADDED) - (CL:WHEN PANES - (CL:UNLESS DONTSCROLL (TEDIT.NORMALIZECARET TEXTOBJ SEL)) - (\TEDIT.SHOWSEL SEL NIL)) (* ; "Turn off any old highlights") - (if (CHARCODEP INSERT) - then - (* ;; "Meta,EOL causes a line break but not a paragraph break, in terms of formatting. Original code converted to a formatted file on the first appearance of Meta,EOL, not clear why and so removed.") - - (* ;; "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] - (SETQ NCHARSADDED 1) - else - (* ;; - "It's maybe worth a scan here to avoid the heavier per-character complexity of \INSERTCH.") - - (if [thereis CH instring INSERT - 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] - else (\TEDIT.INSERTCH INSERT CHNO TEXTOBJ)) - (SETQ NCHARSADDED (NCHARS INSERT))) - (FSETTOBJ TEXTOBJ \DIRTY T) - - (* ;; "") - - (* ;; "The model (piece table) is now correct: NCHARSADDED new characters have been been added in front of CHNO. ") - - (\TEDIT.UPDATE.LINES TEXTOBJ 'INSERTION CHNO NCHARSADDED (AND NIL DONTSCROLL)) - - (* ;; " The insertion happened before the original CHNO, which is now shifted back by NCHARSADDED. The next insertion should also come in front of that (now displaced) character.") - - (\TEDIT.UPDATE.SEL SEL (SUB1 (IPLUS CHNO NCHARSADDED)) - 0 - 'RIGHT) - (\TEDIT.SET.SEL.LOOKS SEL 'NORMAL) - (CL:UNLESS DONTSCROLL (TEDIT.NORMALIZECARET TEXTOBJ SEL)) - (\TEDIT.SHOWSEL SEL T) - (for PANE in PANES do (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE])]) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) + (\TEDIT.UPDATE.SEL SEL (SUB1 (IPLUS CARETCHNO NCHARSADDED)) + 0 + 'RIGHT T 'NORMAL) + (CL:UNLESS DONTSCROLL + + (* ;; "All the panes must be updated. SELPANE mayalso need to be scrolled to make the caret visible for the next input.") + + (\TEDIT.UPDATE.LINES TEXTOBJ 'INSERTION CARETCHNO NCHARSADDED NIL) + (CL:WHEN TYPEIN (\TEDIT.SCROLL.CARET TSTREAM))) + (\TEDIT.FIXSEL SEL TEXTOBJ) + (\TEDIT.SHOWSEL SEL T TEXTOBJ) + (for PANE inpanes TEXTOBJ do + (* ;; + "NOT NEEDED IF \TEDIT.UPDATE.LINES AND \TEDIT.SCROLL.CARET ALREADY DO THIS--CHECK.") + + (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE))))]) (\TEDIT.REPLACE.SELPIECES - [LAMBDA (SELPIECES TEXTOBJ SEL DONTDISPLAY) (* ; "Edited 15-Mar-2024 13:32 by rmk") + [LAMBDA (SELPIECES TEXTOBJ SEL DONTDISPLAY) (* ; "Edited 18-May-2024 16:47 by rmk") + (* ; "Edited 12-May-2024 21:13 by rmk") (* ; "Edited 17-Feb-2024 16:34 by rmk") + (* ; "Edited 15-Mar-2024 13:32 by rmk") (* ; "Edited 27-May-2023 11:22 by rmk") (* ; "Edited 24-May-2023 22:38 by rmk") @@ -1184,7 +1274,7 @@ (LET ((POINT (GETSEL SEL POINT)) DELEVENT) (* ; "Keep the SEL point in case ") - (\TEDIT.SHOWSEL SEL NIL) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (CL:WHEN (\TEDIT.DELETE TEXTOBJ SEL T) (SETQ DELEVENT (\TEDIT.LASTEVENT TEXTOBJ)) (\TEDIT.INSERT.SELPIECES SELPIECES TEXTOBJ SEL DONTDISPLAY) @@ -1201,8 +1291,8 @@ (* ;; "Make sure SEL is off to guarantee turning on") - (\TEDIT.SHOWSEL SEL NIL)) - (\TEDIT.SHOWSEL SEL T]) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ)) + (\TEDIT.SHOWSEL SEL T TEXTOBJ]) (\TEDIT.INSERT.SELPIECES [LAMBDA (SELPIECES TEXTOBJ TARGETSEL DONTDISPLAY) (* ; "Edited 17-Mar-2024 11:43 by rmk") @@ -1308,7 +1398,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 +1416,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 +1429,11 @@ WINDOW TSTREAM))]) (\TEDIT.CHARDELETE - [LAMBDA (TEXTOBJ SEL) (* ; "Edited 17-Mar-2024 00:27 by rmk") + [LAMBDA (TSTREAM SEL) (* ; "Edited 23-Jun-2024 19:41 by rmk") + (* ; "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") @@ -1346,8 +1441,19 @@ (* ;; "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] + (SETQ TSTREAM (TEXTSTREAM TEXTOBJ)) + [PROG ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + CH# FIRSTPIECE) + (CL:UNLESS SEL + (SETQ SEL (FGETTOBJ TEXTOBJ SEL))) + (CL:WHEN (IGREATERP (GETSEL SEL DCH) + 0) + + (* ;; "If there is a selection, just delete that.") + + (\TEDIT.DELETE TEXTOBJ SEL) + (RETURN)) + (SETQ CH# (SUB1 (TEDIT.GETPOINT TSTREAM SEL))) (CL:WHEN (ILEQ CH# 0) (* ;  "Can't backspace past start of document") (RETURN)) @@ -1369,22 +1475,34 @@ (\TEDIT.DELETE TEXTOBJ SEL) (RETURN) elseif (NEQ PC FIRSTPIECE) - then (add START-OF-PIECE (IMINUS (PLEN PC]) + then (add START-OF-PIECE (IMINUS (PLEN PC] + (\TEDIT.SCROLL.CARET TSTREAM]) (\TEDIT.CHARDELETE.FORWARD - [LAMBDA (TEXTOBJ SEL) (* ; "Edited 17-Mar-2024 00:27 by rmk") + [LAMBDA (TSTREAM 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))) + (PROG ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + FIRSTPIECE CH#) + (CL:UNLESS SEL + (SETQ SEL (FGETTOBJ TEXTOBJ SEL))) + (CL:WHEN (IGREATERP (FGETSEL SEL DCH) + 0) + + (* ;; "If there is a selection, just delete that.") + + (\TEDIT.DELETE TEXTOBJ SEL) + (RETURN)) + (SETQ 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)) + [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) @@ -1398,7 +1516,8 @@ 'RIGHT) (\TEDIT.DELETE TEXTOBJ SEL) (RETURN SEL) - else (add START-OF-PIECE (PLEN PC]) + else (add START-OF-PIECE (PLEN PC] + (\TEDIT.SCROLL.CARET TSTREAM]) (\TEDIT.COPYPIECE [LAMBDA (PC FROMOBJ TOOBJ UNPROTECT OPERATION PROMPTTEXTOBJ) @@ -1468,7 +1587,8 @@ (RETURN NEWPC]) (\TEDIT.APPLY.OBJFN - [LAMBDA (OBJ OPERATION FROMTOBJ TOTOBJ PROMPTTEXTOBJ) (* ; "Edited 15-Mar-2024 15:38 by rmk") + [LAMBDA (OBJ OPERATION FROMTOBJ TOTOBJ PROMPTTEXTOBJ) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 15-Mar-2024 15:38 by rmk") (* ; "Edited 15-Jul-2023 10:43 by rmk") (* ; "Edited 9-Jul-2023 16:24 by rmk") (* ; "Edited 6-Jun-2023 13:35 by rmk") @@ -1505,7 +1625,7 @@ (CL:WHEN [AND (EQ OPERATION 'COPY) (SETQ OBJFN (IMAGEOBJPROP OBJ 'WHENCOPIEDFN)) - (MEMB (APPLY* OBJFN OBJ (WINDOWPROP (\TEDIT.PRIMARYW TOTOBJ) + (MEMB (APPLY* OBJFN OBJ (WINDOWPROP (\TEDIT.PRIMARYPANE TOTOBJ) 'DSP) (fetch (TEXTOBJ STREAMHINT) of FROMTOBJ) (fetch (TEXTOBJ STREAMHINT) of TOTOBJ)) @@ -1515,7 +1635,12 @@ OBJ]) (\TEDIT.DELETE - [LAMBDA (TEXTOBJ TARGETSEL DONTDISPLAY) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (TEXTOBJ TARGETSEL DONTDISPLAY TYPEIN) (* ; "Edited 23-Jun-2024 19:27 by rmk") + (* ; "Edited 18-May-2024 16:20 by rmk") + (* ; "Edited 12-May-2024 20:51 by rmk") + (* ; "Edited 23-Apr-2024 07:35 by rmk") + (* ; "Edited 24-Apr-2024 10:42 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,24 +1658,22 @@ (* ;; "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) + (SELECTION! TARGETSEL) + (CL:UNLESS (OR (\TEDIT.READONLY TEXTOBJ) + (ZEROP (FGETSEL TARGETSEL DCH))) (CL:WHEN (AND (FGETSEL TARGETSEL SET) (IGEQ (FGETSEL TARGETSEL DCH) 1)) (LET ((SEL (FGETTOBJ TEXTOBJ SEL)) (TCH# (FGETSEL TARGETSEL CH#))) - (\TEDIT.SHOWSEL SEL NIL) - (CL:UNLESS DONTDISPLAY (* ; - "Make sure target is on-screen in the SELPANE") - (AND NIL (TEDIT.NORMALIZECARET TEXTOBJ TARGETSEL))) (CL:WHEN (\TEDIT.DELETE.SELPIECES TEXTOBJ TARGETSEL) (* ;  "Delete the selected characters (if objects allow)") (* ;; - "Pieces are gone, make lines, SEL, and TARGTSEL consistent with current text.") + "Pieces are gone, make lines, SEL, and TARGETSEL consistent with current text.") + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (\TEDIT.UPDATE.LINES TEXTOBJ 'DELETION TARGETSEL NIL DONTDISPLAY) (FSETTOBJ TEXTOBJ CARETLOOKS (\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ TARGETSEL)) @@ -1562,7 +1685,7 @@ (\TEDIT.UPDATE.SEL SEL TCH# 0 'LEFT) (\TEDIT.FIXSEL SEL TEXTOBJ) - (CL:UNLESS DONTDISPLAY (\TEDIT.SHOWSEL SEL T)) + (CL:UNLESS DONTDISPLAY (\TEDIT.SHOWSEL SEL T TEXTOBJ)) T))))]) (\TEDIT.DIFFUSE.PARALOOKS @@ -1591,7 +1714,9 @@ (PPARALAST PC)) do (FSETPC PC PPARALOOKS PPLOOKS)))]) (\TEDIT.QUIT - [LAMBDA (W NOFORCE) (* ; "Edited 20-Mar-2024 10:53 by rmk") + [LAMBDA (W NOFORCE) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "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,67 +1724,66 @@ (* ;; "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) + (NEQ (\TEDIT.PRIMARYPANE TEXTOBJ) (PROCESSPROP (TTY.PROCESS) 'WINDOW] - (TTY.PROCESS (WINDOWPROP (\TEDIT.PRIMARYW TEXTOBJ) + (TTY.PROCESS (WINDOWPROP (\TEDIT.PRIMARYPANE TEXTOBJ) 'PROCESS))) (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 +1791,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 +1818,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 +1918,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 +1934,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 +2009,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))]) ) @@ -1950,8 +2073,11 @@ (DEFINEQ (TEDIT.INSERT.OBJECT - [LAMBDA (OBJECT TSTREAM CH#) (* ; "Edited 16-Mar-2024 00:08 by rmk") + [LAMBDA (OBJECT TSTREAM CH#) (* ; "Edited 22-May-2024 13:56 by rmk") + (* ; "Edited 18-May-2024 16:20 by rmk") + (* ; "Edited 12-May-2024 20:53 by rmk") (* ; "Edited 3-Mar-2024 13:01 by rmk") + (* ; "Edited 16-Mar-2024 00:08 by rmk") (* ; "Edited 9-Feb-2024 10:52 by rmk") (* ; "Edited 28-Jan-2024 23:29 by rmk") (* ; "Edited 11-Dec-2023 08:21 by rmk") @@ -1961,7 +2087,7 @@ (* ;; "Inserts the Image-object OBJECT into text STREAM in front of character CH.") - (CL:UNLESS (\TEDIT.READONLY TSTREAM) + (CL:UNLESS (\TEDIT.READONLY TSTREAM NIL CH#) (PROG ((TEXTOBJ (TEXTOBJ TSTREAM)) SEL OBJPC OBJSELPIECES SUBSTREAM) @@ -1996,7 +2122,7 @@  " OBJSELPIECES contains (a copy of) the object piece, and the object approved of insertion.") (SETQ SEL (TEXTSEL TEXTOBJ)) - (\TEDIT.SHOWSEL SEL NIL) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (CL:WHEN (type? SELECTION CH#) (SETQ CH# (GETSEL CH# CH#))) (\TEDIT.DO.BLUEPENDINGDELETE SEL TEXTOBJ) (* ; @@ -2007,16 +2133,20 @@ 'LEFT)) (\TEDIT.INSERT.SELPIECES OBJSELPIECES TEXTOBJ SEL) (TEDIT.NORMALIZECARET TEXTOBJ) - (\TEDIT.SHOWSEL SEL T)))]) + (\TEDIT.SHOWSEL SEL T TEXTOBJ)))]) (TEDIT.EDIT.OBJECT - [LAMBDA (STREAM OBJ) (* ; "Edited 15-Mar-2024 14:23 by rmk") + [LAMBDA (TSTREAM OBJ) (* ; "Edited 10-May-2024 22:42 by rmk") + (* ; "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,33 +2155,75 @@ (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]) + (\TEDIT.UPDATE.LINES TEXTOBJ 'CHANGED 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") + [LAMBDA (TSTREAM OBJ START END) (* ; "Edited 10-May-2024 21:58 by rmk") + (* ; "Edited 16-Mar-2024 10:03 by rmk") (* ; "Edited 6-Nov-2022 11:12 by rmk") (* ; "Edited 3-May-93 12:52 by jds") - (for CH# from 1 by (PLEN PC) as PC inpieces (\TEDIT.FIRSTPIECE (TEXTOBJ TEXTOBJ)) - when (EQ OBJ (PCONTENTS PC)) do (RETURN CH#]) + + (* ;; "Return the character number of OBJ in TSTREAM, if it occurs between START and END. We know that an object occupies its own singleton piece, so we don't need to worry about starting or ending in the middle of a piece. We also don't need to test PTYPE, just look at PCONTENTS.") + + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (CL:WHEN (IMAGEOBJP OBJ) + [LET [(TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM] + (CL:UNLESS END + (SETQ END (FGETTOBJ TEXTOBJ TEXTLEN))) + (CL:UNLESS START + (SETQ START (TEDIT.GETPOINT TSTREAM))) + (CL:WHEN (ILEQ START END) + (SETQ START (\TEDIT.CHTOPC START TEXTOBJ)) + (SETQ END (\TEDIT.CHTOPC END TEXTOBJ)) + (for PC inpieces START when (EQ OBJ (PCONTENTS PC)) + do (RETURN (\TEDIT.PCTOCH PC TEXTOBJ)) repeatuntil (EQ PC END)))])]) + +(TEDIT.FIND.OBJECT.BACKWARD + [LAMBDA (TSTREAM OBJ START END AGAIN) (* ; "Edited 10-May-2024 22:06 by rmk") + (* ; "Edited 16-Mar-2024 10:03 by rmk") + (* ; "Edited 6-Nov-2022 11:12 by rmk") + (* ; "Edited 3-May-93 12:52 by jds") + + (* ;; "Return the character number of OBJ in TSTREAM, if it occurs between START and END and is the occurrence closest to END. START defaults to 1, END defaults to current caret position (or one before, if AGAIN).") + + (* ;; "If we were sure that a given object can appear only once in a document, we could just run the TEDIT.FIND.OBJECT with different defaults for START and END, but...") + + (* ;; "We know that an object occupies its own singleton piece, so we don't need to worry about starting or ending in the middle of a piece. We also don't need to test PTYPE, just look at PCONTENTS.") + + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (CL:WHEN (IMAGEOBJP OBJ) + [LET [(TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM] + (SETQ START (IMAX 1 (OR START 1))) + (SETQ END (IMIN (OR END (SUB1 (TEDIT.GETPOINT TSTREAM))) + (FGETTOBJ TEXTOBJ TEXTLEN))) + (CL:WHEN AGAIN + + (* ;; "Assume that we aren't interested in another match at the current position.") + + (ADD END -1)) + (CL:WHEN (ILEQ START END) + (SETQ START (\TEDIT.CHTOPC START TEXTOBJ)) + (SETQ END (\TEDIT.CHTOPC END TEXTOBJ)) + (for PC backpieces END when (EQ OBJ (PCONTENTS PC)) + do (RETURN (\TEDIT.PCTOCH PC TEXTOBJ)) repeatuntil (EQ PC START)))])]) (TEDIT.OBJECT.CHANGED - [LAMBDA (TSTREAM OBJECT) (* ; "Edited 17-Mar-2024 00:25 by rmk") + [LAMBDA (TSTREAM OBJECT) (* ; "Edited 18-May-2024 17:13 by rmk") + (* ; "Edited 10-May-2024 22:42 by rmk") + (* ; "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 +2238,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.") - (\TEDIT.SHOWSEL (fetch (TEXTOBJ SEL) of TEXTOBJ) - NIL) - (\TEDIT.UPDATE.SCREEN TEXTOBJ) - (\TEDIT.FIXSEL (fetch (TEXTOBJ SEL) of TEXTOBJ) + (SETQ CHANGEDCH# (\TEDIT.PCTOCH OBJPIECE TEXTOBJ)) (* ; "Mark affected lines") + (FSETTOBJ TEXTOBJ \DIRTY T) (* ; "And mark the document dirty.") + (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) + NIL TEXTOBJ) + (\TEDIT.UPDATE.LINES TEXTOBJ 'CHANGED CHANGEDCH# 1) + (\TEDIT.FIXSEL (FGETTOBJ TEXTOBJ SEL) TEXTOBJ) - (\TEDIT.SHOWSEL (fetch (TEXTOBJ SEL) of TEXTOBJ) - T]) + (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) + T 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 +2287,7 @@ (* ; "TEDIT Support information") -(RPAQQ TEDITSYSTEMDATE " 1-Apr-2024 09:46:05") +(RPAQQ TEDITSYSTEMDATE "25-Jun-2024 12:01:24") @@ -2124,25 +2297,26 @@ (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 (4365 6307 (MAKE-TEDIT-EXPORTS.ALL 4375 . 4921) (UPDATE-TEDIT 4923 . 5536) (EDIT-TEDIT +5538 . 6305)) (7953 40142 (TEDIT 7963 . 10541) (TEXTSTREAM 10543 . 12463) (TEXTSTREAMP 12465 . 12849) +(TEDITMENUP 12851 . 13617) (COERCETEXTSTREAM 13619 . 17830) (TEDIT.CONCAT 17832 . 21011) (TEDITSTRING +21013 . 21866) (TEDIT-SEE 21868 . 22427) (TEDIT.COPY 22429 . 25264) (TEDIT.DELETE 25266 . 26518) ( +TEDIT.INSERT 26520 . 28959) (TEDIT.KILL 28961 . 29877) (TEDIT.QUIT 29879 . 31559) (TEDIT.MOVE 31561 . +37441) (TEDIT.STRINGWIDTH 37443 . 38114) (TEDIT.CHARWIDTH 38116 . 40140)) (40143 42084 (TEXTOBJ 40153 + . 40618) (COERCETEXTOBJ 40620 . 42082)) (42085 50639 (\TEDIT.CONCAT.PAGEFRAMES 42095 . 47229) ( +\TEDIT.GET.PAGE.HEADINGS 47231 . 48260) (\TEDIT.CONCAT.INSTALL.HEADINGS 48262 . 49593) ( +\TEDIT.DO.BLUEPENDINGDELETE 49595 . 50637)) (50640 53796 (\TEDIT.MOVE.MSG 50650 . 52640) ( +\TEDIT.READONLY 52642 . 53794)) (53797 66323 (TEDIT.NCHARS 53807 . 54180) (TEDIT.RPLCHARCODE 54182 . +60748) (TEDIT.NTHCHARCODE 60750 . 62639) (\TEDIT.PIECE.NTHCHARCODE 62641 . 66321)) (66369 109539 ( +\TEDIT1 66379 . 68456) (\TEDIT.INSERT 68458 . 74218) (\TEDIT.REPLACE.SELPIECES 74220 . 76261) ( +\TEDIT.INSERT.SELPIECES 76263 . 78685) (\TEDIT.OBJECT.SHOWSEL 78687 . 82447) (\TEDIT.RESTARTFN 82449 + . 84845) (\TEDIT.CHARDELETE 84847 . 87820) (\TEDIT.CHARDELETE.FORWARD 87822 . 89942) ( +\TEDIT.COPYPIECE 89944 . 94682) (\TEDIT.APPLY.OBJFN 94684 . 97881) (\TEDIT.DELETE 97883 . 101500) ( +\TEDIT.DIFFUSE.PARALOOKS 101502 . 103773) (\TEDIT.QUIT 103775 . 106595) (\TEDIT.WORDDELETE 106597 . +107975) (\TEDIT.WORDDELETE.FORWARD 107977 . 109537)) (109540 116874 (\TEDIT.PARAPIECES 109550 . 111373 +) (\TEDIT.PARA.FIRST 111375 . 114141) (\TEDIT.PARA.LAST 114143 . 116872)) (116875 125515 ( +\TEDIT.WORD.FIRST 116885 . 121216) (\TEDIT.WORD.LAST 121218 . 125513)) (125556 138430 ( +TEDIT.INSERT.OBJECT 125566 . 129347) (TEDIT.EDIT.OBJECT 129349 . 131665) (TEDIT.FIND.OBJECT 131667 . +133084) (TEDIT.FIND.OBJECT.BACKWARD 133086 . 135013) (TEDIT.OBJECT.CHANGED 135015 . 137191) ( +TEDIT.MAP.OBJECTS 137193 . 138428))))) STOP diff --git a/library/tedit/TEDIT-COMMAND b/library/tedit/TEDIT-COMMAND index c25b455a9..efb8a40ed 100644 --- a/library/tedit/TEDIT-COMMAND +++ b/library/tedit/TEDIT-COMMAND @@ -1,15 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "21-Apr-2024 11:55:17"  -{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-COMMAND.;87 53604 +(FILECREATED "23-Jun-2024 23:26:52" {WMEDLEY}tedit>TEDIT-COMMAND.;100 52496 :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 "23-Jun-2024 19:46:45" {WMEDLEY}tedit>TEDIT-COMMAND.;99) (PRETTYCOMPRINT TEDIT-COMMANDCOMS) @@ -257,7 +254,15 @@ TEXTOBJ]) (\TEDIT.COMMAND.LOOP - [LAMBDA (STREAM RTBL) (* ; "Edited 21-Apr-2024 09:08 by rmk") + [LAMBDA (TSTREAM RTBL) (* ; "Edited 23-Jun-2024 23:26 by rmk") + (* ; "Edited 21-Jun-2024 22:53 by rmk") + (* ; "Edited 20-Jun-2024 09:08 by rmk") + (* ; "Edited 18-May-2024 16:21 by rmk") + (* ; "Edited 12-May-2024 20:55 by rmk") + (* ; "Edited 29-Apr-2024 10:58 by rmk") + (* ; "Edited 7-May-2024 10:42 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 +277,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 TEXTOBJ))) + (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 T)) + 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 TSTREAM 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 NIL T) + (\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 TEXTOBJ) + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ) + (\TEDIT.SHOWSEL SEL T TEXTOBJ)))) + (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 NIL T) + (\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 TSTREAM NIL T))]) + (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 +958,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 (8311 29788 (\TEDIT.INTERRUPT.SETUP 8321 . 9968) (\TEDIT.MARKACTIVE 9970 . 10182) ( +\TEDIT.MARKINACTIVE 10184 . 10400) (\TEDIT.COMMAND.LOOP 10402 . 23188) (\TEDIT.COMMAND.RESET.SETUP +23190 . 29786)) (30072 45269 (\TEDIT.READTABLE 30082 . 31739) (\TEDIT.WORDBOUND.READTABLE 31741 . +34334) (TEDIT.GETSYNTAX 34336 . 36775) (TEDIT.SETSYNTAX 36777 . 39255) (TEDIT.GETFUNCTION 39257 . +40617) (TEDIT.SETFUNCTION 40619 . 43058) (TEDIT.WORDGET 43060 . 43321) (TEDIT.WORDSET 43323 . 44020) ( +TEDIT.ATOMBOUND.READTABLE 44022 . 45267)) (45597 46506 (\TEDIT.WHEELSCROLL 45607 . 46504)) (46659 +52239 (\TEDIT.CLIPBOARD 46669 . 48424) (\TEDIT.COPYTOCLIPBOARD 48426 . 49206) ( +\TEDIT.EXTRACTTOCLIPBOARD 49208 . 49403) (\TEDIT.WRITE.SEL 49405 . 52237))))) STOP diff --git a/library/tedit/TEDIT-COMMAND.LCOM b/library/tedit/TEDIT-COMMAND.LCOM index 7006b95a4bf8657cf04ad816d69c59068d6fd485..276c42562b7caae4b1d6c01d6ec24e8e15927f36 100644 GIT binary patch delta 3314 zcmZ`*OKcm*878TRWm=L+ik9iMB8}8L;h1T4~%dTM}PS`d$rNL zRYSL5L2>j3*41K3-TL8kcXyvU%coKa6pRaxA5DolQM~)Fg_f@8%f)2LFe<14hu5p6 z61X0ONhXtVRJ-vSI6u-!Hl7GBu4^T=V5)grEuzDb+$0A{H5)hY+_>}l3b<^%cK5T; zamWy*1xb;ezxos386=cIxr(W7YDU#sE`smJUGqv#l5CR8a&L>UDo}cM_GlIMTqO6U4Ins(bQ1IOuNJ z-9Eh5f{hzqh-KJ0PR{PfSkU)zh@55q&J9nZY{PqGt=^aVb|6OwpW*or z@vPnq;Q5o&FEo1h%in!d|71yTKKf4w;W-kj<=cO=Go!N!jA>DO6ED4m=k(8OFZViU zpguQyC=Q3{hVJe=wPvu_;ktPCNn`ub4{FW8w_9JRHBWff7V|go+f);Tx%^rqhFSEi87Dk-;bKPaJ0#7)Gm0X*q}t>gN3xPa4w{c%L~x`l+Sh_ z(r!;q7L3XkQOPS75+vUF`_yR=VYhr@Lwweo>c*xDJsW~B?mbX>$w^Ev%!smQAm<1X ziW813IICmhb-B;PdI{((-}C|p5OKfNKV07r0MvjH);4$$L_AXE9U^J^uz zTc9lDzOb2`5|Q)!)o2TeQfg>j6tY7zLFSPM0vIZJGmiv;Cz_=es9*`8bff|X3J({L z;Q;tE1VHVWoTBVw0_N(}X)07iq+Hd7yphajoqwD(S^`zPB_?@L?WHA z_OLism>O5|WfhKPhXlETGLOqH5qDQ;iN3pns#K6mJkw6_A~Lc;oZ+Itn94YWNASET z(p5-AEjj-S&9%s0?_B`cll+!Ucn}bhbSBMdWZG-=y&$6t=L=QSRLizmgthZj+tGH# z)bzn?;R$_DAm2}?#(jROWtgk&N9r8cpxv(pqdJG@xScu7u@=c;#0Eah?LW6SisN|R zTW|*f%u!#|#qcoyykr!Q7PwjjZF-M^IEKADgO6j#CX(jI zD3Bo1yz^D$sWf0tNU&`3mLv>6K@6d}q*;}#8=7TPqAN~mhPydAzlQWixzk%=vOA)(DM!qnt)ul; z%fx_4r_(o~IvatSM7S1wZ#+CLx6Nv~td%b%Dg4A6d}rP`1FzIWegO7u+urJLPaole g2;X71(Dyt_prP1m44%5lK4t7}Oc{HybZQ~_f1vkAF8}}l delta 3485 zcmbVOO>7&-6(%XkmSlwzB}S1LMIOmNkOYX>|0M-O)rwqMjF#N({&1w!K&_HSD0^c$ zN}ARv3Z{Y4OAEC2B0%e=K$`^Usenk^rvxC-Uds5;_S{nsMGv{C2--uN(tR__B`H}& zfeO%a=Dj!Xz4_kE`{w<7;pX?lKi=MEmz6sQ%N)ZAh-FtqafOxV(ZYOb|BX9)?u|0q zzm4Y6@OQG-)_1QsZ{0X}YxUOd9e4Nksl|RNj3Xk~qZ$ z%g-+kFKpyAHDjuZt!9rKb@%c=b00rF`N5QoL|$S9@15{sJJ)zMuVhT!Lf0T*&Q9ia z$5JgD!Y`r~!&Hko5G-e5eq!4!1Guj6ss9T~ckdeqy9aky0SWJG;qgd{dGxRF?;~f_ zZChV|)%!#Lg$pl5`XZsdwOAxs4cg&3H3)5g|<}C#jEJF-+Lp2pUrx%EX1ubCUt2tP&m>X2V zBbz#71>_4vWaU;?3Yw+bUtKO%70pqJ0|{xmZullLS~5&MqpI2Ei~^7@5d+9Z)eNOT ztw}NvZlkcNSeuKePZ=0(@7QTF4=d$FY1ZGbJ3U19-N5ljai_WZbH|?!65-+JPP589 zsP#ph&$dH1j~>kxE5p>fZB=yqX>sqE*x8G(HZZDB#l|Ani9McA#A5wh)b;oTj#oMdeC@wVG{ts`q7d?bEzTqK$UX%@7FM`<_ z62Cd+2Ycwix^qNwc)mM~`^ukzq=GMw5Oss@|HE2js7gnrXai5xUvipB9CagjYBX9( z>>YiK6Q$_)aP;vqNT2<%B*Upy(VJ*(a=yOC2h*URp?Qx#XsZr`bjWZ6AKgZnjZ$F4n_EV~1z$Xl(l+h0AZ zzt(`wT&BB-giA9Y)>?lBAe^Gxhi66snCNu^8Pz|iwVvYWe((H~;LMyjEVb4z%I@IN zPaFPOsugV;YuBtY>zyn>YeJIHv9mUHOuCW8)1ZRHcY=0Qkb7RuuOsNy{y>zuPE1kcA)m`((fj5( zAqL6#o!cp7btE!0*SL`G#B1+DNO^A#U+NQN&P$BUMEpHX3EjMUb}aC|EysBujJ(_@ zFcJlTPp1HYcvY4JH)=*od`btveeA;?iOOOgjNiCT*HIwfz$;aS zVHh47e+Tak4QiNCOw~r+GZFYpNr9t{+&1wecRV`=A;hEwJgpW`_s|4O0n~L(&uk%~ zH&iu<#erw6Kl99vn};6y@_-IrF+bH zQR(UhH@Uqi-@4qh8*~d%n%EQC$AHf1rZf=Gp_)MY}$Jo zO^l_`iZ6kbk;IDL-=q4ZKJl;#>%BP;kFcC~XEa^~ZVi|ZG(f!_QZ`Wf zI1wAb*@SKlpm3m40~npoAXT4`4I~6SYapQJE{TG1`_=)6Lmbdiwl{_lgWye-wG{8m z(V1iK1=uv<@+A|V2&5u;pQ&YJ+Uw*U0h~<;+akj>x^yAqn5J5=%`B)dfRMBq!_4J7 z4-2@ECzyW`h29%I8wyhn!?U=0v64vmbPR(^0;5C;;mdyS4B^@4l_&jp0nZ15_8@}& z_W5GSd3N5g(AGi#&b8x)j-ja6{ zJW~K`;n zc_>V(>jet%%fWCcvi93cg!X>2<|8}x?pkavvPmcYx0%@4Y>vO?{b+o;+Q0QgoS{JRA0kmvAMIfloVY0p%0M8#WUf`Sl>rmpH}W|g+JYje4Of!57Xcp|#vCc-)ET&n ztiXD6iFg&9kVhvtggZ>2?OmKAyl3wu0}~l~sOc06xx&@1jDKDxl9wudnUfm(J)GPo Zzg0nZ4Yb@u_a#n}r=@uGkBRfi{{VW;d{zJe diff --git a/library/tedit/TEDIT-FILE b/library/tedit/TEDIT-FILE index 333be1471..c38d78020 100644 --- a/library/tedit/TEDIT-FILE +++ b/library/tedit/TEDIT-FILE @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 7-Apr-2024 17:22:52" {WMEDLEY}TEDIT>TEDIT-FILE.;531 155019 +(FILECREATED "22-May-2024 14:06:32" {WMEDLEY}tedit>TEDIT-FILE.;556 155855 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.GET.CHARLOOKS.LIST \TEDIT.GET.SINGLE.CHARLOOKS \TEDIT.GET.PIECES3) + :CHANGES-TO (FNS TEDIT.INCLUDE) - :PREVIOUS-DATE " 2-Apr-2024 12:15:23" {WMEDLEY}TEDIT>TEDIT-FILE.;529) + :PREVIOUS-DATE "18-May-2024 16:31:39" {WMEDLEY}tedit>TEDIT-FILE.;555) (PRETTYCOMPRINT TEDIT-FILECOMS) @@ -46,9 +46,9 @@ (COMS (* ;; "Putting (pageframe functions on TEDIT-PAGE)") - (FNS \TEDIT.PUT.PCTB \TEDIT.PUT.TRAILER \TEDIT.PUT.PCTB.MERGEABLE - \TEDIT.PUT.UTF8.SPLITPIECES \TEDIT.PUT.PCTB.NEXTNEW \TEDIT.INSERT.NEWPIECES - \TEDIT.PUTRESET \ARBOUT \ATMOUT \DWOUT \STRINGOUT) + (FNS \TEDIT.PUT.PCTB \TEDIT.PUT.PCTB.PIECEDATA \TEDIT.PUT.TRAILER + \TEDIT.PUT.PCTB.MERGEABLE \TEDIT.PUT.UTF8.SPLITPIECES \TEDIT.PUT.PCTB.NEXTNEW + \TEDIT.INSERT.NEWPIECES \TEDIT.PUTRESET \ARBOUT \ATMOUT \DWOUT \STRINGOUT) (FNS \TEDIT.PUT.CHARLOOKS.LIST \TEDIT.PUT.SINGLE.CHARLOOKS \TEDIT.PUT.CHARLOOKS \TEDIT.PUT.CHARLOOKS1 \TEDIT.PUT.OBJECT) (FNS \TEDIT.PUT.PARALOOKS.LIST \TEDIT.PUT.SINGLE.PARALOOKS \TEDIT.PUT.PARALOOKS)) @@ -112,7 +112,10 @@ (DEFINEQ (TEDIT.GET - [LAMBDA (TSTREAM FILE UNFORMATTED? PROPS) (* ; "Edited 17-Mar-2024 18:17 by rmk") + [LAMBDA (TSTREAM FILE UNFORMATTED? PROPS) (* ; "Edited 18-May-2024 16:31 by rmk") + (* ; "Edited 12-May-2024 21:33 by rmk") + (* ; "Edited 17-Mar-2024 18:17 by rmk") + (* ; "Edited 29-Apr-2024 10:15 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 +142,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)) @@ -162,7 +164,7 @@ (* ;; "New file is good, clean out the old stuff") (\TEDIT.SHOWSEL (TEXTSEL TEXTOBJ) - NIL) + NIL TEXTOBJ) (\TEDIT.TEXTCLOSEF TEXTOBJ) (* ;  "Close the old files, still in TXTFILE") @@ -232,7 +234,9 @@ (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 22-May-2024 14:03 by rmk") + (* ; "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,101 +262,102 @@ (* ;; "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?)") - (CL:UNLESS (\TEDIT.READONLY TSTREAM) - (PROG ((TEXTOBJ (TEXTOBJ TSTREAM)) - TSEL FSEL WASOPEN FTSTREAM NDCSTREAM (FROMFILE FILE)) - (SETQ TSEL (TEXTSEL TEXTOBJ)) - (CL:UNLESS (GETSEL TSEL SET) - (TEDIT.PROMPTPRINT TEXTOBJ "Please select a destination for the included text" T) - (RETURN NIL)) + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (PROG ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + TSEL FSEL WASOPEN FTSTREAM NDCSTREAM (FROMFILE FILE)) + (SETQ TSEL (TEXTSEL TEXTOBJ)) + (CL:UNLESS (GETSEL TSEL SET) + (TEDIT.PROMPTPRINT TEXTOBJ "Please select a destination for the included text" T) + (RETURN NIL)) + (CL:WHEN (\TEDIT.READONLY TEXTOBJ NIL (FGETSEL TSEL CH#)) + (RETURN NIL)) - (* ;; "We know where the new text is supposed to go. Where is it coming from?") + (* ;; "We know where the new text is supposed to go. Where is it coming from?") + (CL:UNLESS FROMFILE + (SETQ FROMFILE (\TEDIT.MAKEFILENAME (TEDIT.GETINPUT TEXTOBJ + "Name of the file to include: "))) (CL:UNLESS FROMFILE - (SETQ FROMFILE (\TEDIT.MAKEFILENAME (TEDIT.GETINPUT TEXTOBJ - "Name of the file to include: "))) - (CL:UNLESS FROMFILE - (TEDIT.PROMPTPRINT TEXTOBJ "No file to include--aborted]" T) - (RETURN))) - (CL:UNLESS (OR (STREAMP FROMFILE) - (INFILEP FROMFILE)) (* ; "File not found") - (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT FROMFILE " not found--include aborted") - T T) - (RETURN)) + (TEDIT.PROMPTPRINT TEXTOBJ "No file to include--aborted]" T) + (RETURN))) + (CL:UNLESS (OR (STREAMP FROMFILE) + (INFILEP FROMFILE)) (* ; "File not found") + (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT FROMFILE " not found--include aborted") + T T) + (RETURN)) - (* ;; "") + (* ;; "") - (* ;; "Now we have the FROMFILE, which may be a stream.") + (* ;; "Now we have the FROMFILE, which may be a stream.") - (CL:UNLESS START (SETQ START 0)) - (CL:UNLESS END - (SETQ END (GETFILEINFO FILE 'LENGTH))) - (CL:UNLESS (IGEQ END START) - (TEDIT.PROMPTPRINT TEXTOBJ "Negative number of characters to include--aborted" T T) - (RETURN)) + (CL:UNLESS START (SETQ START 0)) + (CL:UNLESS END + (SETQ END (GETFILEINFO FILE 'LENGTH))) + (CL:UNLESS (IGEQ END START) + (TEDIT.PROMPTPRINT TEXTOBJ "Negative number of characters to include--aborted" T T) + (RETURN)) - (* ;; "") + (* ;; "") - (* ;; "If the caller says SAFE, he's guranteeing that the file will be there at least as long as we need it. Otherwise, we take ownership of the information by copying it to a NODIRCORE. ") + (* ;; "If the caller says SAFE, he's guranteeing that the file will be there at least as long as we need it. Otherwise, we take ownership of the information by copying it to a NODIRCORE. ") - (CL:UNLESS SAFE - [if (\GETSTREAM FROMFILE 'INPUT T) - then (SETQ WASOPEN T) - else (* ; + (CL:UNLESS SAFE + [if (\GETSTREAM FROMFILE 'INPUT T) + then (SETQ WASOPEN T) + else (* ;  "Wasn't open -- need to open it for input...") - (SETQ FROMFILE (OPENSTREAM FROMFILE 'INPUT NIL '((TYPE TEXT] + (SETQ FROMFILE (OPENSTREAM FROMFILE 'INPUT NIL '((TYPE TEXT] - (* ;; "Create our holding file and copy the file-section into it.") + (* ;; "Create our holding file and copy the file-section into it.") - (SETQ NDCSTREAM (OPENSTREAM '{NODIRCORE} 'OUTPUT 'NEW)) + (SETQ NDCSTREAM (OPENSTREAM '{NODIRCORE} 'OUTPUT 'NEW)) - (* ;; "Have to explicitly fill in 0 and EOFPTR, because if the file was open already, NILs would only copy from current fileptr to EOF.") + (* ;; "Have to explicitly fill in 0 and EOFPTR, because if the file was open already, NILs would only copy from current fileptr to EOF.") - (* ;; + (* ;;  "Use COPYBYTES for formatted files, otherwise allow natural EOL conversion to take place") - (if (\TEDIT.GET.TRAILER FROMFILE) - then (COPYBYTES FROMFILE NDCSTREAM START END) - else (COPYCHARS FROMFILE NDCSTREAM START END)) - (CL:UNLESS WASOPEN (CLOSEF FROMFILE)) (* ; + (if (\TEDIT.GET.TRAILER FROMFILE) + then (COPYBYTES FROMFILE NDCSTREAM START END) + else (COPYCHARS FROMFILE NDCSTREAM START END)) + (CL:UNLESS WASOPEN (CLOSEF FROMFILE)) (* ;  "If the file didn't come to us open, close it.") - (CLOSEF NDCSTREAM) - (SETQ START 0) (* ; + (CLOSEF NDCSTREAM) + (SETQ START 0) (* ;  "But we now want everything we copied") - (SETQ END (GETFILEINFO NDCSTREAM 'LENGTH)) - (SETQ FROMFILE NDCSTREAM)) + (SETQ END (GETFILEINFO NDCSTREAM 'LENGTH)) + (SETQ FROMFILE NDCSTREAM)) - (* ;; "") + (* ;; "") - (* ;; "FROMFILE is now a safe file or stream, possibly already open. If it wasn't open before, we want to make sure it gets closed if/when this event gets undone.") + (* ;; "FROMFILE is now a safe file or stream, possibly already open. If it wasn't open before, we want to make sure it gets closed if/when this event gets undone.") - (CL:UNLESS (\GETSTREAM FROMFILE 'INPUT T) - (SETQ FROMFILE (OPENSTREAM FROMFILE 'INPUT)) - (\TEDIT.HISTORYADD TEXTOBJ (create TEDITHISTORYEVENT - THACTION _ :Closefile - THOLDINFO _ FROMFILE))) - [SETQ FTSTREAM (OPENTEXTSTREAM FROMFILE NIL NIL NIL - `(FONT ,(\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ TSEL) - PARALOOKS - ,(GETTOBJ TEXTOBJ FMTSPEC) - PLAINTEXT - ,PLAINTEXT] + (CL:UNLESS (\GETSTREAM FROMFILE 'INPUT T) + (SETQ FROMFILE (OPENSTREAM FROMFILE 'INPUT)) + (\TEDIT.HISTORYADD TEXTOBJ (create TEDITHISTORYEVENT + THACTION _ :Closefile + THOLDINFO _ FROMFILE))) + [SETQ FTSTREAM (OPENTEXTSTREAM FROMFILE NIL NIL NIL `(FONT ,(\TEDIT.GET.INSERT.CHARLOOKS + TEXTOBJ TSEL) + PARALOOKS + ,(GETTOBJ TEXTOBJ FMTSPEC) + PLAINTEXT + ,PLAINTEXT] - (* ;; "") + (* ;; "") - (* ;; "FTSTREAM is now a text stream for the source.") + (* ;; "FTSTREAM is now a text stream for the source.") - (SETQ FSEL (TEXTSEL (TEXTOBJ FTSTREAM))) (* ; "Select START to END") - (\TEDIT.UPDATE.SEL FSEL (ADD1 START) - (IDIFFERENCE END START) - 'LEFT T) (* ; "ADD1 takes filepos to charno") - (TEDIT.MOVE FSEL TSEL T) + (SETQ FSEL (TEXTSEL (TEXTOBJ FTSTREAM))) (* ; "Select START to END") + (\TEDIT.UPDATE.SEL FSEL (ADD1 START) + (IDIFFERENCE END START) + 'LEFT T) (* ; "ADD1 takes filepos to charno") + (TEDIT.MOVE FSEL TSEL T) - (* ;; "The exit conditions are not documented, but we set the fileptr to the end of the insertion and return the length of the insertion.") + (* ;; "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))) - (RETURN (FGETSEL FSEL DCH))))]) + (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 (FGETSEL TSEL CHLIM))) + (RETURN (FGETSEL FSEL DCH]) (TEDIT.RAW.INCLUDE [LAMBDA (TSTREAM INFILE START END SAFE) (* ; "Edited 1-May-2023 08:46 by rmk") @@ -364,7 +369,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 +384,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 +461,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 +490,8 @@ (TEDIT.PUT.STREAM [LAMBDA (TSTREAM DESTSTREAM UNFORMATTED? EXTERNALFORMAT CONTINUE) + (* ; "Edited 14-May-2024 17:49 by rmk") + (* ; "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") @@ -497,7 +506,7 @@ (* ; "") (RESETLST (LET ((TEXTOBJ (TEXTOBJ TSTREAM)) - NEWPIECES ENDPTR OPENEDHERE) + NEWPIECES OPENEDHERE) (CL:UNLESS (\GETSTREAM DESTSTREAM 'OUTPUT T) [RESETSAVE [SETQ DESTSTREAM (OPENSTREAM DESTSTREAM 'OUTPUT NIL '(LINELENGTH T] '(AND RESETSTATE (DELFILE (CLOSEF? OLDVALUE] @@ -506,17 +515,17 @@ (STREAMPROP DESTSTREAM 'FORMAT EXTERNALFORMAT)) (SETQ NEWPIECES (\TEDIT.PUT.PCTB TEXTOBJ DESTSTREAM UNFORMATTED? CONTINUE)) (if CONTINUE - then (SETQ ENDPTR (GETFILEPTR DESTSTREAM)) - (CLOSEF? DESTSTREAM) + then (CLOSEF? DESTSTREAM) (CL:UNLESS UNFORMATTED? (* ;  "Make the directory date the same as the internal Tedit date") (SETFILEINFO (FULLNAME DESTSTREAM) 'ICREATIONDATE (TEDIT.FILEDATE DESTSTREAM T))) (SETQ DESTSTREAM (OPENSTREAM DESTSTREAM 'INPUT)) - (\TEDIT.INSERT.NEWPIECES DESTSTREAM TEXTOBJ NEWPIECES) - (SETFILEPTR DESTSTREAM ENDPTR) - (\PEEKBIN DESTSTREAM T) (* ; "Get the buffers set up") + (\TEDIT.INSERT.NEWPIECES DESTSTREAM TSTREAM NEWPIECES) + (SETFILEPTR DESTSTREAM 0) + (\PEEKBIN DESTSTREAM T) (* ; + "Opening doesn't set up the buffers, you have to read.") (CL:WHEN (FGETTOBJ TEXTOBJ TXTFILE) (CLOSEF? (FGETTOBJ TEXTOBJ TXTFILE))) (FSETTOBJ TEXTOBJ TXTFILE DESTSTREAM) @@ -639,7 +648,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 +657,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 +672,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 +864,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 +876,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 +934,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 @@ -1146,13 +1156,16 @@ (SETQ EOLC CR.EOLC]) (\TEDIT.INTERPRET.XCCS.SHIFTS - [LAMBDA (PIECES PFILE) (* ; "Edited 21-Jan-2024 00:02 by rmk") + [LAMBDA (PIECES PFILE) (* ; "Edited 14-May-2024 18:39 by rmk") + (* ; "Edited 21-Jan-2024 00:02 by rmk") (* ; "Edited 19-Jan-2024 10:34 by rmk") (* ; "Edited 12-Jan-2024 23:53 by rmk") (* ; "Edited 6-Jan-2024 15:02 by rmk") (* ; "Edited 19-Dec-2023 13:13 by rmk") - (* ;; "PIECES is a chain of pieces read from a formatted XCCS file but not yet inserted into the BTREE. Each file piece has PFILE, PFPOS, and PBYTELEN. This function interprets any XCCS shift characters that prefix the actual characters, coercing the piece properties and bumping the PFPOS/PLEN to hide the shifts. ") + (* ;; "This is called after a GET or PUT, when the file pieces are known all to reside in PFILE.PIECES is a chain of pieces read from a formatted XCCS file but not yet inserted into the BTREE. Each file piece has PFILE, PFPOS, and PBYTELEN. This function interprets any XCCS shift characters that prefix the actual characters, coercing the piece properties and bumping the PFPOS/PLEN to hide the shifts. ") + + (* ;; "We run this before the pieces are inistalled in a stream, since this may change the character lengths.") (for PC BYTE EOLC inpieces PIECES when (EQ PFILE (PCONTENTS PC)) do (\SETFILEPTR PFILE (PFPOS PC)) @@ -1648,6 +1661,7 @@ (\TEDIT.PUT.PCTB [LAMBDA (TEXTOBJ CHARSTREAM FORMATSTREAM CONTINUE KEEPSEPARATE) + (* ; "Edited 15-May-2024 17:03 by rmk") (* ; "Edited 16-Mar-2024 12:40 by rmk") (* ; "Edited 11-Mar-2024 00:33 by rmk") (* ; "Edited 25-Jan-2024 00:00 by rmk") @@ -1672,8 +1686,6 @@ (* ;; "") - (* ;; "PLEN is the number of characters in the piece, but they occupy different numbers of bytes depending on thin, fat, utf-8... ") - (* ;; "") (* ;; "If CONTINUE, return NEWPIECES for continued editing. NEWPIECES is the head of a chain of new pieces that characterize the merged pieces on the file, to reestablish the correspondence between memory pieces and file pieces for continued editing. It is initialized to a throwaway dummy, and NEXTNEW slides down to link in subsequent new pieces. If not CONTINUE, there will be no future editing in CHARSTREAM, no need to build new pieces.") @@ -1682,7 +1694,8 @@ (SHOULDNT "FORMATSTREAM not provided with KEEPSEPARATE")) (CL:WHEN (EQ :UTF-8 (STREAMPROP CHARSTREAM 'FORMAT)) (\TEDIT.PUT.UTF8.SPLITPIECES TEXTOBJ)) - (for PC PREVPC PFILE NEXTNEW RUNLEN PLEN (CURBYTE# _ 0) + (for PC PFILE NEXTNEW RUNLEN UNFORMATTED? (NSHIFTBYTES _ 0) + (CURBYTE# _ 0) (OLDBYTE# _ 0) [UNFORMATTED? _ (PROG1 (EQ FORMATSTREAM T) (CL:UNLESS (STREAMP FORMATSTREAM) @@ -1696,12 +1709,8 @@ (*READTABLE* _ *TEDIT-FILE-READTABLE*) (*PRINT-BASE* _ 10) (EXTFORMAT _ (GETSTREAMPROP CHARSTREAM 'FORMAT)) - (EOLC _ (fetch (STREAM EOLCONVENTION) of CHARSTREAM)) - (NSHIFTBYTES _ 0) inpieces (\TEDIT.FIRSTPIECE TEXTOBJ) - first - (* ;; "NSHIFTBYTES is for the continuation, so the new pieces can skip any charset shifting. We can't hide them from the getfunction of version 3, since version 3 assumes that pieces are in contiguous bytes, we can't bump thePFPOS even though we could deal with it here.") - - (SETQ NEXTNEW NEWPIECES) + (EOLC _ (fetch (STREAM EOLCONVENTION) of CHARSTREAM)) inpieces (\TEDIT.FIRSTPIECE TEXTOBJ) + first (SETQ NEXTNEW NEWPIECES) (* ;; "All the layout and looks information goes into the LOOKSTREAM, CHARSTREAM is essentally plaintext. Unless UNFORMATTED?, APPENDEDSTREAM is appended to the end of CHARSTREAM.") @@ -1723,123 +1732,117 @@ (* ;; " We're ready to put the pieces on the output file. ") (SETQ CURBYTE# (\GETFILEPTR CHARSTREAM)) - (SETQ OLDBYTE# CURBYTE#) - (SETQ NSHIFTBYTES (CL:WHEN (\TEDIT.FIRSTPIECE TEXTOBJ) - (* ; - "Set up for first piece, possibly hiding shifts.") - (CHARSET CHARSTREAM (CL:IF (THINPIECEP (\TEDIT.FIRSTPIECE TEXTOBJ) - ) - 0 - T)) - (IDIFFERENCE (\GETFILEPTR CHARSTREAM) - CURBYTE#))) + (SETQ OLDBYTE# CURBYTE#) (* ;; "ZEROP should never happen, but...") - unless (ZEROP (SETQ PLEN (PLEN PC))) + + (* ;; "PLEN is the number of characters in the piece, but they occupy different numbers of bytes depending on thin, fat, utf-8,XCCS... ") + + unless (ZEROP (PLEN PC)) do - (* ;; "If there are undescribed characters and PC can't be merged with PREVPC, then finish off PREVPC by writing its character looks. And if PREVPC was the last of a pargraph, put out its PARALOOKS. ") + (* ;; "PC starts a run of one or more pieces that can be collapsed together into a single file piece. The paragraph looks are produced before the first piece of a new paragraph (first piece or previous piece was PPARALAST), then the piece(s)-characters, followed by the charlooks. I.e., FORMATSTREAM describes the paragraph-start piece with its paragraph looks forllowed by its char looks.") + + (CL:WHEN (OR (NULL (PREVPIECE PC)) + (PPARALAST (PREVPIECE PC))) + (\TEDIT.PUT.PARALOOKS FORMATSTREAM PC PARAHASH) + (add PCCOUNT 1)) + (CL:WHEN (EQ EXTFORMAT :XCCS) + + (* ;; "For XCCS, CHARSET will put out the char-shifting prefix bytes as needed. In format-version 3 all the file bytes belong to a piece, no skipping in the file. TEDIT.GET calls \TEDIT.INTERPRET.XCCS.SHIFTS to shave those bytes. NSHIFTBYTES is used here if the edit will continue.") + + (CHARSET CHARSTREAM (CL:IF (MEMB (PTYPE PC) + FAT.PTYPES) + T + 0)) + (SETQ NSHIFTBYTES (IDIFFERENCE (\GETFILEPTR CHARSTREAM) + OLDBYTE#))) + (do (\TEDIT.PUT.PCTB.PIECEDATA PC CHARSTREAM TEXTOBJ FORMATSTREAM OLDBYTE#) + (CL:UNLESS (\TEDIT.PUT.PCTB.MERGEABLE PC (NEXTPIECE PC) + EDITSTENTATIVE EXTFORMAT TEXTOBJ) + (RETURN)) + (SETQ PC (NEXTPIECE PC))) - (CL:UNLESS (OR (IEQP CURBYTE# OLDBYTE#) - (\TEDIT.PUT.PCTB.MERGEABLE PREVPC PC EDITSTENTATIVE EXTFORMAT TEXTOBJ)) - (SETQ RUNLEN (IDIFFERENCE CURBYTE# OLDBYTE#)) - (\TEDIT.PUT.CHARLOOKS FORMATSTREAM RUNLEN PREVPC EDITSTENTATIVE LOOKSHASH) + (* ;; "PC is the last piece written for a mergeable sequence. Finish off the corresponding file piece by writing PC's character looks into FORMATSTREAM. ") - (* ;; "We've put out all the preceding characters in a sequence of RUNLEN bytes that combined the mergeable pieces. ") + (SETQ CURBYTE# (\GETFILEPTR CHARSTREAM)) + (SETQ RUNLEN (IDIFFERENCE CURBYTE# OLDBYTE#)) + (CL:UNLESS (EQ OBJECT.PTYPE (PTYPE PC)) (* ; + "Objects get their charlooks from the preceding piece.") + (\TEDIT.PUT.CHARLOOKS FORMATSTREAM RUNLEN PC EDITSTENTATIVE LOOKSHASH)) + (add PCCOUNT 1) - (add PCCOUNT 1) - (CL:WHEN NEWPIECES + (* ;; "The output for the sequence of mergeable pieces is complete.") - (* ;; "For continued editing, make a new piece that describes those characters as they reside on CHARSTREAM.") + (CL:WHEN NEWPIECES - (SETQ NEXTNEW (\TEDIT.PUT.PCTB.NEXTNEW NEXTNEW PREVPC OLDBYTE# RUNLEN EXTFORMAT - TEXTOBJ EOLC NSHIFTBYTES))) + (* ;; "Only for continued editing: make a new piece that describes those characters as they now reside on CHARSTREAM. ") - (* ;; "") + (SETQ NEXTNEW (\TEDIT.PUT.PCTB.NEXTNEW NEXTNEW PC OLDBYTE# RUNLEN EXTFORMAT TEXTOBJ + EOLC NSHIFTBYTES))) + (SETQ OLDBYTE# CURBYTE#) finally - (SETQ NSHIFTBYTES (if (EQ (THINPIECEP PREVPC) - (THINPIECEP PC)) - then 0 - else - (* ;; - "Put out any shifting bytes. Inversion 3 all the file bytes belong to a piece, no skipping.") - - (CHARSET CHARSTREAM (CL:IF (THINPIECEP PC) - 0 - T)) - (IDIFFERENCE (GETFILEPTR CHARSTREAM) - CURBYTE#))) - (SETQ OLDBYTE# CURBYTE#)) - (CL:WHEN (OR (NULL PREVPC) - (PPARALAST PREVPC)) (* ; - "Last piece of a paragraph terminates with its paralooks") - (\TEDIT.PUT.PARALOOKS FORMATSTREAM PC PARAHASH) - (add PCCOUNT 1)) - (CL:WHEN (MEMB (PTYPE PC) - FILE.PTYPES) (* ; + (* ;; "Finalize and append FORMATSTREAM unless unformatted or KEEPSEPARATE (for splitting). If KEEPSEPARATE, the caller must have provided the formatstream") + + (CL:UNLESS UNFORMATTED? + (\TEDIT.PUT.TRAILER FORMATSTREAM (\GETFILEPTR CHARSTREAM + ) + PCCOUNT 3)) + (CL:UNLESS (OR UNFORMATTED? KEEPSEPARATE) + (COPYBYTES FORMATSTREAM CHARSTREAM 0 (GETEOFPTR + FORMATSTREAM + ))) + (RETURN (CL:WHEN NEWPIECES + + (* ;; "Throw away the dummy head of the new piece chain (NEWPIECES is NIL if not continuing). The caller must make install the new pieces.") + + (NEXTPIECE NEWPIECES))]) + +(\TEDIT.PUT.PCTB.PIECEDATA + [LAMBDA (PC CHARSTREAM TEXTOBJ FORMATSTREAM OLDBYTE#) (* ; "Edited 15-May-2024 17:04 by rmk") + + (* ;; "Write the data defining PC on CHARSTREAM.") + + (* ;; "TEXTOBJ needed only to reopen any backing files that might currently be closed.") + + (* ;; "FORMATSTREAM is needed for objects.") + + (* ;; "OLDBYTE# needed to deal with XCCS shift before objects.") + + (LET (PFILE) + (CL:WHEN (MEMB (PTYPE PC) + FILE.PTYPES) (* ;  "Set up to read characters from PFILE") - (SETQ PFILE (PCONTENTS PC)) - (CL:UNLESS (\GETSTREAM PFILE 'INPUT T) (* ; "Make sure the input file is open.") - (SETQ PFILE (\TEDIT.REOPEN.STREAM TEXTOBJ PFILE))) - (* ; "Presumably only happens once") - (SETFILEPTR PFILE (PFPOS PC))) - (SELECTC (PTYPE PC) - (THINFILE.PTYPE (* ; + (SETQ PFILE (PCONTENTS PC)) + (CL:UNLESS (\GETSTREAM PFILE 'INPUT T) (* ; + "Make sure this input file is open.") + (SETQ PFILE (\TEDIT.REOPEN.STREAM TEXTOBJ PFILE))) + (* ; + "Presumably only happens once for each PFILE") + (\SETFILEPTR PFILE (PFPOS PC))) + (SELECTC (PTYPE PC) + (THINFILE.PTYPE (* ;  "\OUTCHAR deals with external format") - (for I from 1 to PLEN do (\OUTCHAR CHARSTREAM (BIN PFILE)))) - (STRING.PTYPES (* ; + (for I from 1 to (PLEN PC) do (\OUTCHAR CHARSTREAM (BIN PFILE)))) + (STRING.PTYPES (* ;  "Could split with infatstring/inthinstring") - (for CH instring (PCONTENTS PC) do (\OUTCHAR CHARSTREAM CH))) - (FATFILE2.PTYPE (* ; - "COPYCHARS automatically deals with external formats. ") - (for I from 1 to PLEN do (\OUTCHAR CHARSTREAM (\WIN PFILE)))) - (FATFILE1.PTYPE - (* ;; - "We read but don't write FATFILE1 pieces, they merge with FATFILE2.") - - [for I (CSET _ (LLSH (PCHARSET PC) - 8)) from 1 to PLEN do (\OUTCHAR CHARSTREAM - (LOGOR CSET (BIN PFILE]) - (UTF8.PTYPE (for I from 1 to PLEN do (\OUTCHAR CHARSTREAM (UTF8.INCCODEFN PFILE)))) - (OBJECT.PTYPE (* ; - "It's an object, use its PUTFN. Byte positions don't matter for continued editing.") - (\TEDIT.PUT.OBJECT PC CHARSTREAM FORMATSTREAM CURBYTE#) - (CL:WHEN NEWPIECES (* ; - "Link in the object piece, for continued editing") - (SETQ NEXTNEW (FSETPC NEXTNEW NEXTPIECE - (create PIECE using PC PREVPIECE _ NEXTNEW)))) - (add PCCOUNT 1) - - (* ;; "0 indicates that nothing special needs to be done to recover the looks of this piece, its index will be written on the next iteration. In earlier versions the value 1 indicated that the looks were not indexed and therefore had to be written explicitly here. This byte won't be needed in the next version of the format.") - - (BOUT FORMATSTREAM 0) - - (* ;; "RMK: Upping OLDBYTE# suppresses the natural charlooks that ought to happen on the next iteration if we just go around the loop. But things get screwed up if we take this out, even though OLDBYTE#. Possibly the extra 0 byte makes it think that the object is bigger than it is? I really don't understand why it fails if this is left out.") - - (SETQ OLDBYTE# (\GETFILEPTR CHARSTREAM))) - (SHOULDNT "OTHER PTYPES")) - (SETQ CURBYTE# (\GETFILEPTR CHARSTREAM)) - (SETQ PREVPC PC) finally (CL:UNLESS (IEQP OLDBYTE# CURBYTE#) - (* ; - "The charlooks for the final piece sequence") - (SETQ RUNLEN (IDIFFERENCE CURBYTE# OLDBYTE#)) - (\TEDIT.PUT.CHARLOOKS FORMATSTREAM RUNLEN PREVPC - EDITSTENTATIVE LOOKSHASH) - (CL:WHEN NEWPIECES - (\TEDIT.PUT.PCTB.NEXTNEW NEXTNEW PREVPC OLDBYTE# RUNLEN - EXTFORMAT TEXTOBJ EOLC NSHIFTBYTES)) - (add PCCOUNT 1)) - - (* ;; "Finalize and append FORMATSTREAM unless unformatted or keepseparate (for splitting). If KEEPSEPARATE, the caller must have provided the formatstream") - - (CL:UNLESS UNFORMATTED? - (\TEDIT.PUT.TRAILER FORMATSTREAM (\GETFILEPTR CHARSTREAM) - PCCOUNT 3)) - (CL:UNLESS (OR UNFORMATTED? KEEPSEPARATE) - (COPYBYTES FORMATSTREAM CHARSTREAM 0 (GETEOFPTR FORMATSTREAM))) - - (* ;; "Throw away the dummy head of the new piece chain (NEWPIECES is NIL if not continuing). The caller must make newpieces safe and then installed them.") - - (RETURN (AND NEWPIECES (NEXTPIECE NEWPIECES]) + (for CH instring (PCONTENTS PC) do (\OUTCHAR CHARSTREAM CH))) + (FATFILE2.PTYPE + (for I from 1 to (PLEN PC) do (\OUTCHAR CHARSTREAM (\WIN PFILE)))) + (FATFILE1.PTYPE + (* ;; + "We read but don't write FATFILE1 pieces, they merge with FATFILE2.") + + [for I (CSET _ (LLSH (PCHARSET PC) + 8)) from 1 to (PLEN PC) + do (\OUTCHAR CHARSTREAM (LOGOR CSET (BIN PFILE]) + (UTF8.PTYPE (for I from 1 to (PLEN PC) do (\OUTCHAR CHARSTREAM (UTF8.INCCODEFN PFILE)))) + (OBJECT.PTYPE (* ; "It's an object, use its PUTFN.") + (\TEDIT.PUT.OBJECT PC CHARSTREAM FORMATSTREAM OLDBYTE#) + + (* ;; "0 indicates that nothing special needs to be done here to recover the looks of this piece. \TEDIT.GET.PIECES3 says that the object-piece looks are taken from the previous piece (or default for first piece. In earlier versions the value 1 indicated that the looks were not indexed and therefore had to be written explicitly here. This byte won't be needed in the next version of the format.") + + (BOUT FORMATSTREAM 0)) + (SHOULDNT "OTHER PTYPES"]) (\TEDIT.PUT.TRAILER [LAMBDA (FORMATSTREAM PIECESTART PCCOUNT VERSION) (* ; "Edited 13-Jan-2024 10:13 by rmk") @@ -1854,49 +1857,50 @@ (\WOUT FORMATSTREAM (IPLUS 31415 VERSION]) (\TEDIT.PUT.PCTB.MERGEABLE - [LAMBDA (PREVPC PC EDITSTENTATIVE EXTFORMAT TEXTOBJ) (* ; "Edited 23-Jan-2024 09:12 by rmk") + [LAMBDA (PREVPC PC EDITSTENTATIVE EXTFORMAT TEXTOBJ) (* ; "Edited 14-May-2024 11:55 by rmk") + (* ; "Edited 12-May-2024 21:57 by rmk") + (* ; "Edited 23-Jan-2024 09:12 by rmk") (* ; "Edited 12-Jan-2024 09:46 by rmk") (* ; "Edited 5-Jan-2024 11:34 by rmk") (* ; "Edited 30-Dec-2023 00:44 by rmk") (* ; "Edited 22-Sep-2023 10:12 by rmk") (* ; "Edited 6-Sep-2023 00:03 by rmk") (* ; "Edited 24-Aug-2023 11:03 by rmk") - - (* ;; "True if PREVPC and PC have enough properties in common so they can be concatenated together into a single new piece on a file. The PPARALOOKS test allows for the possibility that different pieces in a paragraph might have different formatting (e.g. tab stops)--but that will mess up assumptions that the paragraph menu and maybe other things depend on. Object pieces and pieces with different looks can never merge.") - - (LET ((PREVTYPE (PTYPE PREVPC)) - (PCTYPE (PTYPE PC))) - (CL:UNLESS [OR (EQ OBJECT.PTYPE PREVTYPE) - (EQ OBJECT.PTYPE PCTYPE) - (NEQ (PLOOKS PREVPC) - (PLOOKS PC)) - (NEQ (PPARALOOKS PREVPC) - (PPARALOOKS PC)) - (PPARALAST PREVPC) - (AND EDITSTENTATIVE (NEQ (PNEW PREVPC) - (PNEW PC] - - (* ;; "PC cannot merge with PREVPC if PREVPC ends in EOL (even if not PPARALAST). (We assume here that EOL's of interest appear only in last-of-piece position.) For some input piece types we can make the decision without bothering to look at their last character. If the destination EXTFORMAT is :UTF-8, the splitter has presumably arranged it so that EOL's only appear in thin string and file pieces.") - - [AND (SELECTQ EXTFORMAT - (:XCCS - (* ;; "All thin strings and files are mergeable, all fat pieces are mergeable, since they all go to FAT2. ") - - (EQ (THINPIECEP PREVPC) - (THINPIECEP PC))) - (:UTF-8 - (* ;; "UTF8 pieces with the same bytesperchar are mergeable. We rely on \TEDIT.PUT.UTF8.SPLITPIECES to examine string pieces and split thin strings that include mixtures of Ascii and non-Ascii characters, and to split fat pieces that may contain Ascii character in 2-byte form. After splitting all pieces with the same PUTF8BYTESPERCHAR can be merged.") - - (EQ (FGETPC PREVPC PUTF8BYTESPERCHAR) - (FGETPC PC PUTF8BYTESPERCHAR))) - NIL) - (OR (EQ PREVTYPE UTF8.PTYPE) - (AND (EQ PREVTYPE FATFILE1.PTYPE) - (NEQ 0 (PCHARSET PREVPC))) - [AND (EQ EXTFORMAT :UTF-8) - (NOT (MEMB PREVTYPE (CONSTANT (LIST THINFILE.PTYPE THINSTRING.PTYPE] - (NOT (MEMB (\TEDIT.PIECE.NTHCHARCODE TEXTOBJ PREVPC (SUB1 (PLEN PREVPC))) - (CHARCODE (EOL LF])]) + (CL:WHEN PC + [LET ((PREVTYPE (PTYPE PREVPC)) + (PCTYPE (PTYPE PC))) + (CL:UNLESS [OR (EQ OBJECT.PTYPE PREVTYPE) + (EQ OBJECT.PTYPE PCTYPE) + (NEQ (PLOOKS PREVPC) + (PLOOKS PC)) + (NEQ (PPARALOOKS PREVPC) + (PPARALOOKS PC)) + (PPARALAST PREVPC) + (AND EDITSTENTATIVE (NEQ (PNEW PREVPC) + (PNEW PC] + + (* ;; "PC cannot merge with PREVPC if PREVPC ends in EOL (even if not PPARALAST). (We assume here that EOL's of interest appear only in last-of-piece position.) For some input piece types we can make the decision without bothering to look at their last character. If the destination EXTFORMAT is :UTF-8, the splitter has presumably arranged it so that EOL's only appear in thin string and file pieces.") + + [AND (SELECTQ EXTFORMAT + (:XCCS + (* ;; "All thin strings and files are mergeable, all fat pieces are mergeable, since they all go to FAT2. ") + + (EQ (THINPIECEP PREVPC) + (THINPIECEP PC))) + (:UTF-8 + + (* ;; "UTF8 pieces with the same bytesperchar are mergeable. We rely on \TEDIT.PUT.UTF8.SPLITPIECES to examine string pieces and split thin strings that include mixtures of Ascii and non-Ascii characters, and to split fat pieces that may contain Ascii character in 2-byte form. After splitting, all pieces with the same PUTF8BYTESPERCHAR can be merged.") + + (EQ (FGETPC PREVPC PUTF8BYTESPERCHAR) + (FGETPC PC PUTF8BYTESPERCHAR))) + NIL) + (OR (EQ PREVTYPE UTF8.PTYPE) + (AND (EQ PREVTYPE FATFILE1.PTYPE) + (NEQ 0 (PCHARSET PREVPC))) + [AND (EQ EXTFORMAT :UTF-8) + (NOT (MEMB PREVTYPE (CONSTANT (LIST THINFILE.PTYPE THINSTRING.PTYPE] + (NOT (MEMB (\TEDIT.PIECE.NTHCHARCODE TEXTOBJ PREVPC (SUB1 (PLEN PREVPC))) + (CHARCODE (EOL LF])])]) (\TEDIT.PUT.UTF8.SPLITPIECES [LAMBDA (TEXTOBJ) (* ; "Edited 17-Mar-2024 00:14 by rmk") @@ -1969,7 +1973,9 @@ NIL]) (\TEDIT.PUT.PCTB.NEXTNEW - [LAMBDA (NEXTNEW PREVPC OLDBYTE# RUNLEN EXTFORMAT TEXTOBJ EOLC NSHIFTBYTES) + [LAMBDA (NEXTNEW PC OLDBYTE# RUNLEN EXTFORMAT TEXTOBJ EOLC NSHIFTBYTES) + (* ; "Edited 14-May-2024 18:54 by rmk") + (* ; "Edited 13-May-2024 08:27 by rmk") (* ; "Edited 24-Jan-2024 23:29 by rmk") (* ; "Edited 23-Jan-2024 15:24 by rmk") (* ; "Edited 21-Jan-2024 10:34 by rmk") @@ -1977,41 +1983,42 @@ (* ; "Edited 5-Jan-2024 17:46 by rmk") (* ; "Edited 30-Dec-2023 21:56 by rmk") - (* ;; "This updates the piece chain for continued editing.") + (* ;; "This updates the piece chain that is created for continued editing.") (* ;; "Note that the PCONTENTS (= PFILE) field for these file pieces isn't filled in, that has to be done after CHARSTREAM is closed and reopened at the TEDIT.PUT level. For the same reason, PBINABLE isn't set here.") - (SETQ RUNLEN (IDIFFERENCE RUNLEN NSHIFTBYTES)) - - (* ;; "PREVPC is never an object piece.") + (* ;; "NSHIFTBYTES strips any XCCS charset shifts at the beginning of the new piece.") - (FSETPC NEXTNEW NEXTPIECE (SETQ NEXTNEW (create PIECE using PREVPC PFPOS _ (IPLUS NSHIFTBYTES - OLDBYTE#) - PBYTELEN _ RUNLEN PREVPIECE _ NEXTNEW - ))) + (SETQ RUNLEN (IDIFFERENCE RUNLEN NSHIFTBYTES)) + (FSETPC NEXTNEW NEXTPIECE (SETQ NEXTNEW (create PIECE + using PC PFPOS _ (IPLUS NSHIFTBYTES OLDBYTE#) + PBYTELEN _ RUNLEN PREVPIECE _ NEXTNEW PTREENODE + _ NIL))) (SELECTQ EXTFORMAT - (:UTF-8 (FSETPC NEXTNEW PTYPE (CL:IF (EQ 1 (FGETPC PREVPC PUTF8BYTESPERCHAR)) + (:UTF-8 (FSETPC NEXTNEW PTYPE (CL:IF (EQ 1 (FGETPC PC PUTF8BYTESPERCHAR)) THINFILE.PTYPE UTF8.PTYPE)) - (FSETPC NEXTNEW PBYTESPERCHAR (FGETPC PREVPC PUTF8BYTESPERCHAR))) + (FSETPC NEXTNEW PBYTESPERCHAR (FGETPC PC PUTF8BYTESPERCHAR))) (:XCCS (* ;  "String pieces can be merged with corresponding file pieces") - (FSETPC NEXTNEW PTYPE (SELECTC (PTYPE PREVPC) + (FSETPC NEXTNEW PTYPE (SELECTC (PTYPE PC) (THINSTRING.PTYPE THINFILE.PTYPE) ((LIST FATSTRING.PTYPE FATFILE1.PTYPE) (FSETPC NEXTNEW PBYTESPERCHAR 2) (FSETPC NEXTNEW PCHARSET \NORUNCODE) FATFILE2.PTYPE) - (PTYPE PREVPC)))) + (PTYPE PC)))) (HELP "EXTERNAL FORMAT NOT RECOGNIZED" EXTFORMAT)) (* ; - "Accumulate PLEN across merged pieces") - (FSETPC NEXTNEW PLEN (IQUOTIENT RUNLEN (PBYTESPERCHAR NEXTNEW))) + "Accumulate PLEN across merged pieces. Objects are always 1.") + [FSETPC NEXTNEW PLEN (CL:IF (EQ OBJECT.PTYPE (PTYPE NEXTNEW)) + 1 + (IQUOTIENT RUNLEN (PBYTESPERCHAR NEXTNEW)))] (CL:UNLESS (EQ EOLC CR.EOLC) (* ;  "The file may have LF, but we want to restore EOL internally") (CL:WHEN [AND (EQ THINFILE.PTYPE (PTYPE NEXTNEW)) (EQ (CHARCODE EOL) - (\TEDIT.PIECE.NTHCHARCODE TEXTOBJ PREVPC (PLEN PREVPC] + (\TEDIT.PIECE.NTHCHARCODE TEXTOBJ PC (PLEN PC] (if (EQ 1 (PLEN NEXTNEW)) then (FSETPC NEXTNEW PTYPE THINSTRING.PTYPE) (FSETPC NEXTNEW PCONTENTS (ALLOCSTRING 1 (CHARCODE EOL))) @@ -2025,7 +2032,9 @@ NEXTNEW]) (\TEDIT.INSERT.NEWPIECES - [LAMBDA (STREAM TEXTOBJ NEWPIECES) (* ; "Edited 20-Mar-2024 10:59 by rmk") + [LAMBDA (DESTSTREAM OLDSTREAM NEWPIECES) (* ; "Edited 14-May-2024 18:38 by rmk") + (* ; "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,20 +2044,20 @@ (* ; "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.") + (* ;; "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.") - (TEXTOBJ! TEXTOBJ) + (* ;; "The \SETFILEPTR translates OLDSTREAM's buffer parameters to the new file. ") - (* ;; "The \SETFILEPTR translates TSTREAM'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))) + (* ; + "If the backing stream isn't binable, the thinfile pieces aren't either") + (FSETPC PC PBINABLE SBINABLE))) (* ; "Non-object pieces are on OFILE") (* ;; "Here, finally, we toss the out-of-date pieces to install the new ones. For complete safety, the rest should be uninterruptable (although the file has just been saved, so nothing would really be lost)") @@ -2059,7 +2068,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") @@ -2220,7 +2229,8 @@ (SETFILEPTR FORMATSTREAM -1]) (\TEDIT.PUT.CHARLOOKS - [LAMBDA (FORMATSTREAM BYTELEN PREVPC EDITSTENTATIVE LOOKSHARRAY) + [LAMBDA (FORMATSTREAM BYTELEN PC EDITSTENTATIVE LOOKSHARRAY) + (* ; "Edited 14-May-2024 10:24 by rmk") (* ; "Edited 13-Jan-2024 16:35 by rmk") (* ; "Edited 30-Dec-2023 16:25 by rmk") (* ; "Edited 23-Aug-2023 22:27 by rmk") @@ -2228,13 +2238,13 @@ (* ; "Edited 8-Sep-2022 22:54 by rmk") (* ; "Edited 30-May-91 21:45 by jds") - (* ;; "Put a description of PREVPC's charlooks into FORMATSTREAM. The looks apply to bytes OLDBYTE# thru CURBYTE#-1") + (* ;; "Put a description of PC's charlooks into FORMATSTREAM. The looks apply to bytes OLDBYTE# thru CURBYTE#-1") - (\DTEST PREVPC 'PIECE) - (\TEDIT.PUT.CHARLOOKS1 FORMATSTREAM BYTELEN (GETHASH (PLOOKS PREVPC) + (\DTEST PC 'PIECE) + (\TEDIT.PUT.CHARLOOKS1 FORMATSTREAM BYTELEN (GETHASH (PLOOKS PC) LOOKSHARRAY) - (AND EDITSTENTATIVE PREVPC (PNEW PREVPC)) - (EQ FATFILE2.PTYPE (PTYPE PREVPC]) + (AND EDITSTENTATIVE PC (PNEW PC)) + (EQ FATFILE2.PTYPE (PTYPE PC]) (\TEDIT.PUT.CHARLOOKS1 [LAMBDA (FORMATSTREAM BYTELEN CHARLOOKSINDEX NEW FAT) (* ; "Edited 13-Jan-2024 16:36 by rmk") @@ -2256,7 +2266,8 @@ (\WOUT FORMATSTREAM CHARLOOKSINDEX]) (\TEDIT.PUT.OBJECT - [LAMBDA (PIECE CHARSTREAM FORMATSTREAM CURFILEBYTE#) (* ; "Edited 24-Jan-2024 23:35 by rmk") + [LAMBDA (PIECE CHARSTREAM FORMATSTREAM CURFILEBYTE#) (* ; "Edited 14-May-2024 12:09 by rmk") + (* ; "Edited 24-Jan-2024 23:35 by rmk") (* ; "Edited 13-Jan-2024 12:20 by rmk") (* ; "Edited 19-Dec-2023 10:14 by rmk") (* ; "Edited 26-Aug-2023 15:13 by rmk") @@ -2264,7 +2275,7 @@ (* ; "Edited 6-Aug-2022 10:02 by rmk") (* ; "Edited 12-Jun-90 17:49 by mitani") - (* ;; "Given a piece which describes an object, put the object out there.") + (* ;; "Given a piece which describes an object, put the object out there. ") (LET ((OBJECT (PCONTENTS PIECE)) (ORIGFILEPTR (GETFILEPTR FORMATSTREAM)) @@ -2394,7 +2405,8 @@ (SETFILEPTR FONTFILE -1]) (\TEDIT.PUT.PARALOOKS - [LAMBDA (LOOKSFILE PC PARAHASH) (* ; "Edited 19-Dec-2023 10:14 by rmk") + [LAMBDA (LOOKSFILE PC PARAHASH) (* ; "Edited 14-May-2024 13:32 by rmk") + (* ; "Edited 19-Dec-2023 10:14 by rmk") (* ; "Edited 25-Aug-2023 11:41 by rmk") (* ; "Edited 3-Mar-2023 23:28 by rmk") (* ; "Edited 30-May-91 21:44 by jds") @@ -2406,9 +2418,8 @@  "Place holder for number of characters in the piece -- really taken from the charlooks.") (\WOUT LOOKSFILE \PieceDescriptorPARA) (* ;  "Identify this as a paragraph looks piece") - (\WOUT LOOKSFILE (OR (FIXP PC) - (GETHASH (PPARALOOKS PC) - PARAHASH]) + (\WOUT LOOKSFILE (GETHASH (PPARALOOKS PC) + PARAHASH]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY @@ -2449,27 +2460,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 (4771 31271 (TEDIT.GET 4781 . 9895) (TEDIT.FORMATTEDFILEP 9897 . 11213) (TEDIT.FILEDATE +11215 . 12386) (TEDIT.INCLUDE 12388 . 19566) (TEDIT.RAW.INCLUDE 19568 . 20376) (TEDIT.PUT 20378 . +27500) (TEDIT.PUT.STREAM 27502 . 31269)) (31272 50517 (\TEDIT.GET.FOREIGN.FILE 31282 . 34467) ( +\TEDIT.GET.UNFORMATTED.FILE 34469 . 38343) (\TEDIT.GET.FORMATTED.FILE 38345 . 41214) ( +\TEDIT.FORMATTEDSTREAMP 41216 . 44116) (\ARBIN 44118 . 44838) (\ATMIN 44840 . 45377) (\DWIN 45379 . +45758) (\STRINGIN 45760 . 46468) (\TEDIT.GET.TRAILER 46470 . 48986) (\TEDIT.CACHEFILE 48988 . 50515)) +(50683 63829 (\TEDIT.GET.PIECES3 50693 . 60591) (\TEDIT.GET.IDATE3 60593 . 61988) ( +\TEDIT.MAKE.STRINGPIECE 61990 . 63827)) (63830 76092 (\TEDIT.GET.UNFORMATTED.FILE.XCCS 63840 . 69956) +(\TEDIT.INTERPRET.XCCS.SHIFTS 69958 . 76090)) (76114 82136 (\TEDIT.GET.UNFORMATTED.FILE.UTF8 76124 . +82134)) (82159 90663 (\TEDIT.GET.CHARLOOKS.LIST 82169 . 82900) (\TEDIT.GET.SINGLE.CHARLOOKS 82902 . +87475) (\TEDIT.GET.CHARLOOKS 87477 . 88807) (\TEDIT.GET.PARALOOKS.INDEX 88809 . 89353) ( +\TEDIT.GET.CHARLOOKS.INDEX 89355 . 90661)) (90664 98902 (\TEDIT.GET.PARALOOKS.LIST 90674 . 91296) ( +\TEDIT.GET.SINGLE.PARALOOKS 91298 . 98310) (\TEDIT.GET.PARALOOKS 98312 . 98900)) (98903 102302 ( +\TEDIT.GET.OBJECT 98913 . 102300)) (102364 134224 (\TEDIT.PUT.PCTB 102374 . 111911) ( +\TEDIT.PUT.PCTB.PIECEDATA 111913 . 114998) (\TEDIT.PUT.TRAILER 115000 . 115767) ( +\TEDIT.PUT.PCTB.MERGEABLE 115769 . 119203) (\TEDIT.PUT.UTF8.SPLITPIECES 119205 . 124292) ( +\TEDIT.PUT.PCTB.NEXTNEW 124294 . 128385) (\TEDIT.INSERT.NEWPIECES 128387 . 131822) (\TEDIT.PUTRESET +131824 . 132066) (\ARBOUT 132068 . 132792) (\ATMOUT 132794 . 133399) (\DWOUT 133401 . 133680) ( +\STRINGOUT 133682 . 134222)) (134225 145809 (\TEDIT.PUT.CHARLOOKS.LIST 134235 . 135907) ( +\TEDIT.PUT.SINGLE.CHARLOOKS 135909 . 141153) (\TEDIT.PUT.CHARLOOKS 141155 . 142380) ( +\TEDIT.PUT.CHARLOOKS1 142382 . 143433) (\TEDIT.PUT.OBJECT 143435 . 145807)) (145810 153914 ( +\TEDIT.PUT.PARALOOKS.LIST 145820 . 146722) (\TEDIT.PUT.SINGLE.PARALOOKS 146724 . 152773) ( +\TEDIT.PUT.PARALOOKS 152775 . 153912)) (154009 155691 (TEDITFROMLISPSOURCE 154019 . 155689))))) STOP diff --git a/library/tedit/TEDIT-FILE.LCOM b/library/tedit/TEDIT-FILE.LCOM index c1d43b62e1452c53d5e54226f43f602fab44ab19..154eb3ca87090127d6234af2f80e3ac95bbf898a 100644 GIT binary patch delta 8064 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 Y@tedit>TEDIT-FIND.;102 30083 +(FILECREATED "23-Jun-2024 12:04:17" {WMEDLEY}tedit>TEDIT-FIND.;123 34007 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.BASICFIND \TEDIT.BASICFIND.BACKWARD \TEDIT.WCFIND.BACKWARD) + :CHANGES-TO (FNS \TEDIT.PARSE.SEARCHSTRING \TEDIT.WCFIND \TEDIT.BASICFIND TEDIT.FIND.BACKWARD + \TEDIT.WCFIND.BACKWARD \TEDIT.BASICFIND.BACKWARD) - :PREVIOUS-DATE "15-Mar-2024 14:10:05" {WMEDLEY}tedit>TEDIT-FIND.;98) + :PREVIOUS-DATE "20-May-2024 00:02:15" {WMEDLEY}tedit>TEDIT-FIND.;122) (PRETTYCOMPRINT TEDIT-FINDCOMS) @@ -28,7 +29,9 @@ (DEFINEQ (TEDIT.FIND - [LAMBDA (TEXTOBJ TARGETSTRING START END WILDCARDS?) (* ; "Edited 19-Jun-2023 22:27 by rmk") + [LAMBDA (TSTREAM TARGET START END WILDCARDS?) (* ; "Edited 10-May-2024 21:55 by rmk") + (* ; "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 +41,30 @@ (* ;; "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)) - (CL:WHEN TARGETSTRING - (SETQ TARGETSTRING (MKSTRING TARGETSTRING)) - (CL:UNLESS END - (SETQ END (TEXTLEN TEXTOBJ))) - (CL:UNLESS START - (SETQ START (TEDIT.GETPOINT TEXTOBJ))) + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (CL:WHEN TARGET (* ;; "* 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) - START END) - (CAR (\TEDIT.BASICFIND (ffetch (TEXTOBJ STREAMHINT) of TEXTOBJ) - TARGETSTRING START END)))))]) + [if (IMAGEOBJP TARGET) + then (TEDIT.FIND.OBJECT TSTREAM TARGET START END) + elseif [NEQ 0 (NCHARS (SETQ TARGET (MKSTRING TARGET] + then (CL:UNLESS END + (SETQ END (FGETTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM) + TEXTLEN))) + (CL:UNLESS START + (SETQ START (TEDIT.GETPOINT TSTREAM))) + (CL:WHEN (ILEQ START END) + (CL:IF WILDCARDS? + (\TEDIT.WCFIND TSTREAM (\TEDIT.PARSE.SEARCHSTRING TARGET) + START END) + (CAR (\TEDIT.BASICFIND TSTREAM TARGET START END))))])]) (TEDIT.FIND.BACKWARD - [LAMBDA (TEXTOBJ TARGETSTRING START END WILDCARDS? AGAIN) (* ; "Edited 12-Jul-2023 08:24 by rmk") + [LAMBDA (TSTREAM TARGET START END WILDCARDS? AGAIN) (* ; "Edited 19-May-2024 12:07 by rmk") + (* ; "Edited 10-May-2024 22:00 by rmk") + (* ; "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,35 +73,36 @@ (* ;; "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)) - (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))) - (CL:WHEN AGAIN - - (* ;; "Assume that we aren't interested in another match at the current position.") - - (ADD END -1)) - (CL:WHEN (ILEQ START END) - (CL:IF WILDCARDS? - (\TEDIT.WCFIND.BACKWARD (ffetch (TEXTOBJ STREAMHINT) of TEXTOBJ) - (DREVERSE (\TEDIT.PARSE.SEARCHSTRING TARGETSTRING)) - START END) - (CAR (\TEDIT.BASICFIND.BACKWARD (ffetch (TEXTOBJ STREAMHINT) of TEXTOBJ) - TARGETSTRING START END)))))]) + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (CL:WHEN TARGET + [if (IMAGEOBJP TARGET) + then (TEDIT.FIND.OBJECT.BACKWARD TSTREAM TARGET START END AGAIN) + elseif [NEQ 0 (NCHARS (SETQ TARGET (MKSTRING TARGET] + then (SETQ START (IMAX 1 (OR START 1))) + (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.") + + (ADD END -1)) + (CL:WHEN (ILEQ START END) + (CL:IF WILDCARDS? + (\TEDIT.WCFIND.BACKWARD TSTREAM (\TEDIT.PARSE.SEARCHSTRING TARGET T) + START END) + (CAR (\TEDIT.BASICFIND.BACKWARD TSTREAM TARGET START END))))])]) (TEDIT.SUBSTITUTE - [LAMBDA (TEXTSTREAM PATTERN REPLACEMENT CONFIRM?) (* ; "Edited 15-Mar-2024 14:09 by rmk") + [LAMBDA (TEXTSTREAM PATTERN REPLACEMENT CONFIRM?) (* ; "Edited 18-May-2024 23:03 by rmk") (* ; "Edited 9-Mar-2024 11:36 by rmk") - (* ; "Edited 3-Mar-2024 12:24 by rmk") - (* ; "Edited 29-Feb-2024 17:00 by rmk") - (* ; "Edited 27-Feb-2024 08:20 by rmk") + (* ; "Edited 12-May-2024 21:11 by rmk") + (* ; "Edited 15-Mar-2024 14:09 by rmk") (* ; "Edited 6-Jan-2024 11:09 by rmk") (* ; "Edited 12-Nov-2023 12:29 by rmk") (* ; "Edited 22-Sep-2023 20:36 by rmk") (* ; "Edited 31-May-2023 00:04 by rmk") - (* ; "Edited 24-May-2023 20:01 by rmk") (* ; "Edited 30-Mar-94 16:04 by jds") (* ;; "Replace all instances of PATTERN with REPLACEMENT. If CONFIRM? is non-NIL, ask before each replacement.") @@ -122,9 +130,7 @@ (if (type? SELPIECES REPLACEMENT) elseif (OR (STRINGP REPLACEMENT) (LITATOM REPLACEMENT)) - then (SETQ REPLACEMENT (\TEDIT.SELPIECES.FROM.STRING REPLACEMENT TEXTOBJ)) - elseif (LISTP REPLACEMENT) - then (HELP "LISTP REPLACEMENT")) + then (SETQ REPLACEMENT (\TEDIT.SELPIECES.FROM.STRING REPLACEMENT TEXTOBJ))) (* ;; "Could be NIL or empty string, meaning just delete all occurrences.") @@ -146,14 +152,16 @@ "ing...") T) (SETQ SEL (fetch (TEXTOBJ SEL) of TEXTOBJ)) - (\TEDIT.SHOWSEL SEL NIL) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ) (* ; "Turn off any blue pending delete") (* ;; "STARTCHAR# and ENDCHAR# bound each search. ENDCHAR# has to be reduced as STARTCHAR# increases, so the search stays within the selection.") (SETQ STARTCHAR# (GETSEL SEL CH#)) - [SETQ ENDCHAR# (IPLUS STARTCHAR# (SUB1 (GETSEL SEL DCH] + [SETQ ENDCHAR# (CL:IF (ZEROP (GETSEL SEL DCH)) + (GETTOBJ TEXTOBJ TEXTLEN) + (IPLUS STARTCHAR# (SUB1 (GETSEL SEL DCH))))] [if CONFIRMFLG then (* ;; "In this case the selection moves along, ending up at the last hit.") @@ -166,7 +174,7 @@ (ADD1 (IDIFFERENCE (CADR RANGE) (CAR RANGE))) 'RIGHT T)) - (\TEDIT.SHOWSEL PENDING.SEL T) + (\TEDIT.SHOWSEL PENDING.SEL T TEXTOBJ) (TEDIT.NORMALIZECARET TEXTOBJ PENDING.SEL) (SELECTQ (U-CASE (NTHCHAR (TEDIT.GETINPUT TEXTOBJ "OK to replace? ['q' quits]" "Yes") @@ -186,7 +194,7 @@ (* ;;  "Turn off rejected selection, search for next starting one charcter later. ENDCHAR# is still OK.") - (TEDIT.SHOWSEL TEXTOBJ NIL PENDING.SEL) + (\TEDIT.SHOWSEL PENDING.SEL NIL TEXTOBJ) (SETQ STARTCHAR# (ADD1 (CAR RANGE] else (* ;; "No confirmation required. Do the substitutions without showing intermediate work, collect all of the replacement events") @@ -221,7 +229,7 @@ (* ;; "We want the new selection to begin at the beginning of the original selection, somewhere before the first hit, and end at the position that the prior ending moved to. The text grew or shrank with each hit.") - (\TEDIT.SHOWSEL SEL NIL) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (\TEDIT.UPDATE.SEL SEL (GETSEL SAVESEL CH#) (IPLUS (GETSEL SAVESEL DCH) TOTALDIFF) @@ -230,7 +238,7 @@ (* ;; "Save the search & replacement strings to offer for next time:") - (\TEDIT.SHOWSEL SEL T) + (\TEDIT.SHOWSEL SEL T TEXTOBJ) (PUTTEXTPROP TEXTOBJ 'TEDIT.LAST.SUBSTITUTE.STRING SEARCHSTRING) (PUTTEXTPROP TEXTOBJ 'TEDIT.LAST.REPLACEMENT.STRING (\TEDIT.SELPIECES.TO.STRING REPLACEMENT NIL TEXTOBJ)) @@ -243,14 +251,16 @@ (RETURN NREPLACEMENTS)))]) (TEDIT.NEXT - [LAMBDA (STREAM) (* ; "Edited 15-Mar-2024 13:34 by rmk") + [LAMBDA (TSTREAM) (* ; "Edited 18-May-2024 16:23 by rmk") + (* ; "Edited 12-May-2024 21:10 by rmk") (* ; "Edited 16-Feb-2024 23:48 by rmk") + (* ; "Edited 15-Mar-2024 13:34 by rmk") (* ; "Edited 14-Dec-2023 21:20 by rmk") (* ; "Edited 20-Jun-2023 00:05 by rmk") (* ; "Edited 3-May-2023 23:47 by rmk") (* ; "Edited 18-Apr-2023 23:46 by rmk") (* ; "Edited 30-May-91 20:57 by jds") - (LET ((TEXTOBJ (TEXTOBJ STREAM)) + (LET ((TEXTOBJ (TEXTOBJ TSTREAM)) TARGET SEL OPTION FIELDSEL) (SETQ SEL (TEXTSEL TEXTOBJ)) (SETQ TARGET (TEDIT.FIND TEXTOBJ ">>*<<" NIL NIL T))(* ; @@ -273,7 +283,7 @@ (replace (TEXTOBJ BLUEPENDINGDELETE) of TEXTOBJ with T) (* ;  "Original comment: %"never pending a deletion%", but it is!") - (\TEDIT.SHOWSEL SEL NIL) (* ; + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (* ;  "Set up SELECTION to be the found text") (\TEDIT.UPDATE.SEL SEL (CAR TARGET) (IDIFFERENCE (ADD1 (CADR TARGET)) @@ -281,11 +291,11 @@ 'RIGHT) (\TEDIT.SET.SEL.LOOKS SEL 'PENDINGDEL) (* ; "Always selected normally") (TEDIT.NORMALIZECARET TEXTOBJ) (* ; "And get it into the window") - (\TEDIT.SHOWSEL SEL T)) + (\TEDIT.SHOWSEL SEL T TEXTOBJ)) (FIELD (* ;  "Update the selection for this textobj from the scratch sel returned from MBUTTON.FIND.NEXT.FIELD") (FSETTOBJ TEXTOBJ BLUEPENDINGDELETE T) - (\TEDIT.SHOWSEL SEL NIL) (* ; + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (* ;  "Set SELECTION to be the found text") (\TEDIT.UPDATE.SEL SEL (GETSEL FIELDSEL CH#) (GETSEL FIELDSEL DCH) @@ -307,192 +317,222 @@ (DEFINEQ (\TEDIT.WCFIND - [LAMBDA (TSTREAM TARGETLIST START END HITSTART ANCHORED) (* ; "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) - (ADD1 START) - END - (OR HITSTART START) - T) - (CL:UNLESS ANCHORED (* ; - "Initial # didn't match, let it slide in this loop") - (for S from (ADD1 START) to END - when (SETQ RESULT (\TEDIT.WCFIND TSTREAM TARGETLIST S END S T)) - do (RETURN RESULT)))] - ((EQ '* (CAR TARGETLIST)) - - (* ;; "Variable width wildcard, not anchored so the match can slide along.") - - (\TEDIT.WCFIND TSTREAM (CDR TARGETLIST) - START END HITSTART)) - ((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])]) + [LAMBDA (TSTREAM TARGETLIST START END) (* ; "Edited 23-Jun-2024 12:00 by rmk") + (* ; "Edited 19-May-2024 23:46 by rmk") + (* ; "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 the nearest match somewhere at or after START, possibly with wild cards. The basic-find does fast search of simple strings. This is all about backtracking to advance the search on failure, and for wild cards. Note that *'s do not appear on the edges.") + + (CL:WHEN TARGETLIST + [bind STACK CONFIG HITSTART ANCHORED RESULT TARGETTAIL TARGET (TOPSTART _ (SUB1 START)) + do (SETQ CONFIG (pop STACK)) + (if CONFIG + then (SETQ START (pop CONFIG)) + (SETQ TARGETTAIL (pop CONFIG)) + (SETQ HITSTART (pop CONFIG)) + (SETQ ANCHORED (pop CONFIG)) + elseif (IGEQ TOPSTART END) + then (RETURN NIL) (* ; "No more, failed") + else (add TOPSTART 1) (* ; "First time or outer advance") + (SETQ START TOPSTART) + (SETQ TARGETTAIL TARGETLIST) + (SETQ HITSTART NIL) + (SETQ ANCHORED NIL)) + (SETQ TARGET (CAR TARGETTAIL)) + (SELECTQ TARGET + (%# (CL:UNLESS (CDR TARGETTAIL) + (RETURN (LIST (OR HITSTART START) + START))) + (CL:WHEN (ILEQ START END) (* ; + "If we are unanchored, slipping continues") + (push STACK (LIST (ADD1 START) + (CDR TARGETTAIL) + (OR HITSTART START) + ANCHORED)))) + (* + (* ;; "Unanchored config for the tail that starts here.") + + (push STACK (LIST START (CDR TARGETTAIL) + HITSTART NIL))) + (CL:WHEN (SETQ RESULT (\TEDIT.BASICFIND TSTREAM TARGET START END ANCHORED)) + (CL:UNLESS (CDR TARGETTAIL) (* ; "Success!") + (RETURN (LIST (OR HITSTART (CAR RESULT)) + (CADR RESULT)))) + (SETQ START (ADD1 (CADR RESULT))) (* ; "Next target") + (CL:WHEN (ILEQ START END) + [push STACK (LIST START (CDR TARGETTAIL) + (OR HITSTART (CAR RESULT]))])]) (\TEDIT.BASICFIND - [LAMBDA (TSTREAM TARGETSTRING START END ANCHORED) (* ; "Edited 17-Mar-2024 12:06 by rmk") + [LAMBDA (TSTREAM TARGETSTRING START END ANCHORED) (* ; "Edited 23-Jun-2024 12:03 by rmk") + (* ; "Edited 22-Jun-2024 12:01 by rmk") + (* ; "Edited 19-May-2024 23:18 by rmk") + (* ; "Edited 17-Mar-2024 12:06 by rmk") (* ; "Edited 20-Jun-2023 00:11 by rmk") (* ; "Edited 30-May-91 20:56 by jds") - (* ;; "Search thru TEXTOBJ, starting where the caret is, for an exact match of TARGETSTRING. Optionally, start the search at character START. ") + (* ;; "Search thru TSTREAM for an exact match of TARGETSTRING. ") (* ;; "Returns a (startmatch endmatch) pair of character positions in TSTREAM") (bind LASTANCHOR (NCHARS _ (NCHARS TARGETSTRING)) - (CHAR1 _ (NTHCHARCODE TARGETSTRING 1)) - (ANCHOR _ (SUB1 START)) first [SETQ LASTANCHOR (ADD1 (CL:IF ANCHORED + (ANCHOR _ (SUB1 START)) first (CL:WHEN (ZEROP NCHARS) + (RETURN NIL)) + [SETQ LASTANCHOR (ADD1 (CL:IF ANCHORED ANCHOR - (IDIFFERENCE END NCHARS))] - eachtime (\TEDIT.TEXTSETFILEPTR TSTREAM ANCHOR) + (IDIFFERENCE END NCHARS))] - (* ;; "Match failed, bump the start--single char wild-card # always matches") - while [SETQ ANCHOR (find A from (ADD1 ANCHOR) to LASTANCHOR suchthat (EQ CHAR1 (BIN TSTREAM] - when [OR (EQ NCHARS 1) - (for I from 2 to NCHARS always (EQ (NTHCHARCODE TARGETSTRING I) - (BIN TSTREAM] - do (RETURN (LIST ANCHOR (IPLUS ANCHOR (SUB1 NCHARS]) + (* ;; "LASTANCHOR protects us from running into the EOF") + eachtime (CL:WHEN (IGEQ ANCHOR LASTANCHOR) + (RETURN NIL)) + (\TEDIT.TEXTSETFILEPTR TSTREAM ANCHOR) + (add ANCHOR 1) (* ; "Move the anchor up 1") + + (* ;; "Match failed, bump the start--single char wild-card # always matches") + + when (for I from 1 do (CL:UNLESS (EQ (NTHCHARCODE TARGETSTRING I) + (BIN TSTREAM)) + (RETURN NIL)) + (CL:WHEN (EQ I NCHARS) (* ; "Matched the last char") + (RETURN T))) 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) (* ; "Edited 23-Jun-2024 12:02 by rmk") + (* ; "Edited 19-May-2024 23:46 by rmk") + (* ; "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) - START - (SUB1 END) - (OR HITEND END) - T) - (CL:UNLESS ANCHORED (* ; - "Initial # didn't match, let it slide in this loop") - (for E from (SUB1 END) to START by -1 - when (SETQ RESULT (\TEDIT.WCFIND.BACKWARD TSTREAM TARGETLIST START E E T)) - do (RETURN RESULT)))] - ((EQ '* (CAR TARGETLIST)) - - (* ;; "Variable width wildcard, not anchored so the match can slide along.") - - (\TEDIT.WCFIND.BACKWARD TSTREAM (CDR TARGETLIST) - START END HITEND)) - ((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]) + (* ;; "Returns the (start end) pair of the nearest match somewhere at or after START, possibly with wild cards. The basic-find does fast search of simple strings. This is all about backtracking to advance the search on failure, and for wild cards. Note that *'s do not appear on the edges.") + + (CL:WHEN TARGETLIST + [bind STACK CONFIG HITEND ANCHORED RESULT TARGETTAIL TARGET (TOPEND _ (ADD1 END)) + do (SETQ CONFIG (pop STACK)) + (if CONFIG + then (SETQ END (pop CONFIG)) + (SETQ TARGETTAIL (pop CONFIG)) + (SETQ HITEND (pop CONFIG)) + (SETQ ANCHORED (pop CONFIG)) + elseif (ILEQ TOPEND START) + then (RETURN NIL) (* ; "No more, failed") + else (add TOPEND -1) (* ; "First time or outer advance") + (SETQ END TOPEND) + (SETQ TARGETTAIL TARGETLIST) + (SETQ HITEND NIL) + (SETQ ANCHORED NIL)) + (SETQ TARGET (CAR TARGETTAIL)) + (SELECTQ TARGET + (%# (CL:UNLESS (CDR TARGETTAIL) + (RETURN (LIST END (OR HITEND END)))) + (CL:WHEN (ILEQ START END) (* ; + "If we are unanchored, slipping continues") + (push STACK (LIST (SUB1 END) + (CDR TARGETTAIL) + (OR HITEND (SUB1 END)) + ANCHORED)))) + (* + (* ;; "Unanchored config for the tail that starts here.") + + (push STACK (LIST END (CDR TARGETTAIL) + HITEND NIL))) + (CL:WHEN (SETQ RESULT (\TEDIT.BASICFIND.BACKWARD TSTREAM TARGET START END ANCHORED) + ) + (CL:UNLESS (CDR TARGETTAIL) (* ; "Success!") + [RETURN (LIST (CAR RESULT) + (OR HITEND (CADR RESULT]) + (SETQ END (SUB1 (CADR RESULT))) (* ; "Next target") + (CL:WHEN (ILEQ START END) + [push STACK (LIST END (CDR TARGETTAIL) + (OR HITEND (CADR RESULT]))])]) (\TEDIT.BASICFIND.BACKWARD - [LAMBDA (TSTREAM TARGETSTRING START END ANCHORED) (* ; "Edited 17-Mar-2024 12:06 by rmk") - (* ; "Edited 12-Jul-2023 08:14 by rmk") - (* ; "Edited 23-Apr-2023 12:42 by rmk") - - (* ;; "Returns a (Startmatch Endmatch) pair of character positions in TSTREAM that denote the nearest occurrence of TARGETSTRING whose first character is at or ahead of START and whose last character is at or before END. ") - - (* ;; "A better interface would return a selection for the string-match, but we repeat the pair interface that is documented for forward search.") - - (* ;; - "Note that caller must decrement END in subsequent calls to avoid looping on the same match.") - - (* ;; "") + [LAMBDA (TSTREAM TARGETSTRING START END ANCHORED) (* ; "Edited 23-Jun-2024 11:32 by rmk") + (* ; "Edited 19-May-2024 23:07 by rmk") + (* ; "Edited 17-Mar-2024 12:06 by rmk") + (* ; "Edited 20-Jun-2023 00:11 by rmk") + (* ; "Edited 30-May-91 20:56 by jds") - (* ;; "The last target character first matches at END. Setting the initial ANCHOR one past END and going into the anchor backup loop won't work if END points to the last character in the stream--the \TEXTSETFILEPTR would be out of bounds. So the first anchor-match has to be special, by setting the fileptr at END and peeking.") + (* ;; "Seach backwards thru TSTREAM for an exact match of TARGETSTRING.") - [SETQ END (IMIN END (TEXTLEN (TEXTOBJ TSTREAM] - (bind ANCHOR LASTANCHOR (NCHARS1 _ (SUB1 (NCHARS TARGETSTRING))) - (CHARN _ (NTHCHARCODE TARGETSTRING -1)) - first - (* ;; "NCHARS1 because the last character is matched separately.") + (* ;; "Returns a (startmatch endmatch) pair of character positions in TSTREAM") - (CL:WHEN (ILESSP (IDIFFERENCE END START) - NCHARS1) (* ; "Too few characters") - (RETURN NIL)) - (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 END)) - (CL:WHEN [AND (EQ CHARN (\TEDIT.TEXTPEEKBIN TSTREAM)) - (OR (EQ NCHARS1 0) - (for I from NCHARS1 to 1 by -1 always (EQ (NTHCHARCODE TARGETSTRING I) - (\TEDIT.TEXTBACKFILEPTR - TSTREAM] - (RETURN (LIST (IDIFFERENCE END NCHARS1) - END))) - (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) - (* ; - "The filepos one before the last CHARN match") - (ADD ANCHOR -1) - (* ; "For next attempt") - while (find old ANCHOR from ANCHOR to LASTANCHOR by -1 suchthat (EQ CHARN ( - \TEDIT.TEXTBACKFILEPTR - TSTREAM))) - 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) - (RETURN (LIST (IDIFFERENCE ANCHOR NCHARS1) - ANCHOR]) + (bind LASTANCHOR (NCHARS _ (NCHARS TARGETSTRING)) + (ANCHOR _ (ADD1 END)) first (CL:WHEN (ZEROP NCHARS) + (RETURN NIL)) + (CL:WHEN ANCHORED + (SETQ START (IDIFFERENCE ANCHOR NCHARS))) + + (* ;; "LASTANCHOR protects agains the beginning of the stream") + + [SETQ LASTANCHOR (SUB1 (CL:IF ANCHORED + ANCHOR + (IPLUS START NCHARS))] + eachtime (CL:WHEN (ILESSP ANCHOR LASTANCHOR) (* ; "Won't fit in the frame") + (RETURN NIL)) + (add ANCHOR -1) (* ; "Move the anchor back 1") + (\TEDIT.TEXTSETFILEPTR TSTREAM ANCHOR) + when (for I from 1 do (CL:UNLESS (EQ (NTHCHARCODE TARGETSTRING I) + (\TEDIT.TEXTBACKFILEPTR TSTREAM)) + (RETURN NIL)) + (CL:WHEN (EQ I NCHARS) (* ; "Matched the last char") + (RETURN T))) do (RETURN (LIST (IDIFFERENCE (ADD1 ANCHOR) + NCHARS) + ANCHOR]) (\TEDIT.PARSE.SEARCHSTRING - [LAMBDA (TARGETSTRING) (* ; "Edited 19-Jun-2023 16:42 by rmk") + [LAMBDA (TARGETSTRING BACKWARD) (* ; "Edited 23-Jun-2024 08:02 by rmk") + (* ; "Edited 19-May-2024 22:43 by rmk") + (* ; "Edited 19-Jun-2023 16:42 by rmk") (* jds "31-Jan-84 13:26") - (* ;; - "Quote Is an escape if it comes before a wild card. ''# would match ' in front of literal .") - - (for TTAIL C SEG on (CHCON TARGETSTRING) - do (SETQ C (CAR TTAIL)) - (SELCHARQ C - (%' (if (MEMB (CADR TTAIL) - (CHARCODE (%# *))) - then (POP TTAIL) - (PUSH SEG (CAR TTAIL)) - else (PUSH SEG C))) - (%# (CL:WHEN SEG - (push $$VAL (CONCATCODES (DREVERSE SEG)))) - (push $$VAL (CHARACTER C)) - (SETQ SEG NIL)) - (* (CL:UNLESS (EQ (CAR $$VAL) - '*) (* ; "Reduce adjacent *s to one.") - (CL:WHEN SEG - (push $$VAL (CONCATCODES (DREVERSE SEG)))) - (CL:UNLESS $$VAL (* ; "Ignore leading *") - (push $$VAL (CHARACTER C))) - (SETQ SEG NIL))) - (PUSH SEG C)) finally [if SEG - then (PUSH $$VAL (CONCATCODES (DREVERSE SEG))) - else (* ; "Ignore trailing *") - (SETQ $$VAL (find VTAIL on $$VAL - suchthat (NEQ (CAR $$VAL) - '*] - (RETURN (CL:IF $$VAL - (DREVERSE $$VAL) - TARGETSTRING)]) + (* ;; "Parse TARGETSTRING into string-segments that are separated by the wild-card characters # and * (or escape). Each # is left as its own segment, multiple *'s collapse to one, and *'s on the edges are removed. ' quotes the following character.") + + (* ;; "If BACKWARD, the search string segments are reverse, and the characters within each segment are reversed, so that the search can go backwards.") + + (* ;; " ") + + (for CTAIL C SEGCODES on (CHCON TARGETSTRING) eachtime (SETQ C (CAR CTAIL)) + do (SELCHARQ C + ((* ESCAPE) (* ; + "Throw away the first and multiiple *'s") + (CL:WHEN SEGCODES + [push $$VAL (CONCATCODES (CL:IF BACKWARD + SEGCODES + (DREVERSE SEGCODES))] + (SETQ SEGCODES NIL)) + (CL:WHEN (AND $$VAL (NEQ '* (CAR $$VAL))) + (push $$VAL '*))) + (%# (* ; "# stands alone") + (CL:WHEN SEGCODES + [push $$VAL (CONCATCODES (CL:IF BACKWARD + SEGCODES + (DREVERSE SEGCODES))]) + (push $$VAL '%#) + (SETQ SEGCODES NIL)) + (%' (* ; "Quote the next character") + (CL:WHEN (CDR CTAIL) + (push SEGCODES (CADR CTAIL)) + (SETQ CTAIL (CDR CTAIL)))) + (push SEGCODES C)) finally (if SEGCODES + then [push $$VAL (CONCATCODES (CL:IF BACKWARD + SEGCODES + (DREVERSE SEGCODES))] + elseif (EQ '* (CAR $$VAL)) + then + (* ;; "Strip the first edge *") + + (pop $$VAL)) + (RETURN (CL:IF BACKWARD + $$VAL + (DREVERSE $$VAL))]) ) (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 (917 19944 (TEDIT.FIND 927 . 2926) (TEDIT.FIND.BACKWARD 2928 . 5250) (TEDIT.SUBSTITUTE +5252 . 15710) (TEDIT.NEXT 15712 . 19942)) (19977 33984 (\TEDIT.WCFIND 19987 . 23281) (\TEDIT.BASICFIND + 23283 . 25374) (\TEDIT.WCFIND.BACKWARD 25376 . 28644) (\TEDIT.BASICFIND.BACKWARD 28646 . 30903) ( +\TEDIT.PARSE.SEARCHSTRING 30905 . 33982))))) STOP diff --git a/library/tedit/TEDIT-FIND.LCOM b/library/tedit/TEDIT-FIND.LCOM index 9c1647ac635906d36fb56157337c98b8e447ffd9..050b696bda57327ebb71079efc34f467473a8485 100644 GIT binary patch literal 7588 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 Ukznj}3u47ikoMzpLf!g*0G_O6)Bpeg literal 7552 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 E7k!UZT>t<8 diff --git a/library/tedit/TEDIT-FNKEYS b/library/tedit/TEDIT-FNKEYS index 266fcfad2..70699e59c 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 "25-Jun-2024 12:01:24" {WMEDLEY}tedit>TEDIT-FNKEYS.;89 35600 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.LCASE.SEL \TEDIT.UCASE.SEL \TEDIT.KEY.FIND) + :CHANGES-TO (FNS \TEDIT.MANPAGE) - :PREVIOUS-DATE " 9-Mar-2024 11:47:31" {WMEDLEY}tedit>TEDIT-FNKEYS.;69) + :PREVIOUS-DATE "23-Jun-2024 23:06:50" {WMEDLEY}tedit>TEDIT-FNKEYS.;88) (PRETTYCOMPRINT TEDIT-FNKEYSCOMS) @@ -17,12 +17,13 @@ (FNS \TEDIT.BOLD.SEL.OFF \TEDIT.BOLD.SEL.ON \TEDIT.CENTER.SEL \TEDIT.CENTER.SEL.REV \TEDIT.DEFAULTS.CARET \TEDIT.DEFAULTSSEL \TEDIT.SETDEFAULT.FROM.SEL - \TEDIT.KEY.FIND \TEDIT.GET.TARGET.STRING \TEDIT.KEY.FIND.BACKWARD - \TEDIT.FINDAGAIN.BACKWARD \TEDIT.FINDAGAIN \TEDIT.ITALIC.SEL.OFF - \TEDIT.ITALIC.SEL.ON \TEDIT.LARGERSEL \TEDIT.LCASE.SEL \TEDIT.SHOWCARETLOOKS - \TEDIT.SMALLERSEL \TEDIT.SUBSCRIPTSEL \TEDIT.SUPERSCRIPTSEL \TEDIT.UCASE.SEL - \TEDIT.UNDERLINE.SEL.OFF \TEDIT.UNDERLINE.SEL.ON \TEDIT.STRIKEOUT.SEL.ON - \TEDIT.STRIKEOUT.SEL.OFF \TEDIT.SELECT.ALL \TEDIT.KEY.SUBSTITUTE)) + \TEDIT.KEY.FIND \TEDIT.KEY.FIND.SEARCHSTRING \TEDIT.GET.TARGET.STRING + \TEDIT.KEY.FIND.BACKWARD \TEDIT.FINDAGAIN.BACKWARD \TEDIT.FINDAGAIN + \TEDIT.ITALIC.SEL.OFF \TEDIT.ITALIC.SEL.ON \TEDIT.LARGERSEL \TEDIT.LCASE.SEL + \TEDIT.SHOWCARETLOOKS \TEDIT.SMALLERSEL \TEDIT.SUBSCRIPTSEL \TEDIT.SUPERSCRIPTSEL + \TEDIT.UCASE.SEL \TEDIT.UNDERLINE.SEL.OFF \TEDIT.UNDERLINE.SEL.ON + \TEDIT.STRIKEOUT.SEL.ON \TEDIT.STRIKEOUT.SEL.OFF \TEDIT.SELECT.ALL + \TEDIT.KEY.SUBSTITUTE \TEDIT.MANPAGE \TEDIT.CALL.ED)) (COMS (* ;; "Auxiliary functions used in the above main functions:") @@ -69,12 +70,16 @@ ("Function,^A" FN \TEDIT.SHOWCARETLOOKS) ("Meta,a" FN \TEDIT.SELECT.ALL) ("Meta,A" FN \TEDIT.SELECT.ALL) + ("Meta,d" FN \TEDIT.MANPAGE) + ("Meta,D" FN \TEDIT.MANPAGE) ("Meta,F" FN \TEDIT.KEY.FIND.BACKWARD) ("Meta,f" FN \TEDIT.KEY.FIND) ("Meta,g" FN \TEDIT.FINDAGAIN) ("Meta,G" FN \TEDIT.FINDAGAIN.BACKWARD) ("Meta,N" NEXT) ("Meta,n" NEXT) + ("Meta,o" FN \TEDIT.CALL.ED) + ("Meta,O" FN \TEDIT.CALL.ED) ("Meta,p" FN \TEDIT.PRINT.MENU) ("Meta,P" FN \TEDIT.PRINT.MENU) ("Meta,r" REDO) @@ -164,7 +169,11 @@ 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 22-Jun-2024 10:00 by rmk") + (* ; "Edited 18-May-2024 16:29 by rmk") + (* ; "Edited 12-May-2024 21:33 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") + (* ; "Edited 24-Apr-2024 23:39 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") @@ -175,43 +184,30 @@ (* ; "Edited 6-May-2018 17:14 by rmk:") (* ; "Edited 30-May-91 21:05 by jds") - (* ;; "just calls the normal tedit.find starting at the right of the current selection. SEL is passed from the FN key in the readtable, presumably always (fetch SEL of TEXTOBJ).") + (* ;; "Case sensitive search, with * and # wildcards. Just calls the normal tedit.find starting at the right of the current selection. SEL is passed from the FN key in the readtable, presumably always (fetch SEL of TEXTOBJ).") - (* ;; "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.") + (* ;; "AGAIN suppresses confirmation of a previous target.") - (LET ((TEXTOBJ (TEXTOBJ TEXTSTREAM)) - TARGET CH) (* ; - "Case sensitive search, with * and # wildcards") - - (* ;; "TEDIT.LAST.FIND.STRING used to be stored as a window property. But then it would only pertain to a particular pane. Better store it on the textobj.") - - (CL:WHEN AGAIN - (SETQ TARGET (GETTEXTPROP TEXTOBJ 'TEDIT.LAST.FIND.STRING))) - (CL:UNLESS TARGET - (SETQ AGAIN NIL) (* ; - "If no previous target, we aren't %"again%"") - [SETQ TARGET (TEDIT.GETINPUT TEXTOBJ (CL:IF BACKWARD - "Backward search string: " - "Search string: ") - (\TEDIT.GET.TARGET.STRING TEXTOBJ 'TEDIT.LAST.FIND.STRING]) - (CL:WHEN TARGET + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (LET ((TEXTOBJ (TEXTOBJ TSTREAM)) + (SEARCHSTRING (\TEDIT.KEY.FIND.SEARCHSTRING TEXTOBJ AGAIN BACKWARD)) + CH) (* ; "") + (CL:WHEN SEARCHSTRING (CL:UNLESS SEL (SETQ SEL (FGETTOBJ TEXTOBJ SEL))) - (\TEDIT.SHOWSEL SEL NIL) (* ; - "Save for next search, even if not found") - (PUTTEXTPROP TEXTOBJ 'TEDIT.LAST.FIND.STRING TARGET) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (SETQ CH (if BACKWARD - then (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Searching backward for %"" TARGET - "%"") + then (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Searching backward for %"" + SEARCHSTRING "%"") T) - (TEDIT.FIND.BACKWARD TEXTOBJ (MKSTRING TARGET) + (TEDIT.FIND.BACKWARD TSTREAM (MKSTRING SEARCHSTRING) NIL NIL T) - else (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Searching for %"" TARGET "%"") + else (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Searching for %"" SEARCHSTRING "%"") T) - (TEDIT.FIND TEXTOBJ (MKSTRING TARGET) + (TEDIT.FIND TSTREAM (MKSTRING SEARCHSTRING) NIL NIL T))) (COND - (CH (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "%"" TARGET "%" found") + (CH (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "%"" SEARCHSTRING "%" found") T) (* ; "We found the target text.") (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ) (* ; @@ -232,24 +228,53 @@ (FSETTOBJ TEXTOBJ CARETLOOKS (\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ SEL)) (\TEDIT.FIXSEL SEL TEXTOBJ) (TEDIT.NORMALIZECARET TEXTOBJ)) - (T (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "%"" TARGET "%" not found") + (T (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "%"" SEARCHSTRING "%" not found") T))) - (\TEDIT.SHOWSEL SEL T))]) + (\TEDIT.SHOWSEL SEL T TEXTOBJ))]) + +(\TEDIT.KEY.FIND.SEARCHSTRING + [LAMBDA (TEXTOBJ AGAIN BACKWARD) (* ; "Edited 22-Jun-2024 10:17 by rmk") + + (* ;; "TEDIT.LAST.FIND.STRING used to be stored as a window property. But then it would only pertain to a particular pane. Better store it on the textobj.") + + (LET (SEARCHSTRING) + (CL:WHEN AGAIN + (SETQ SEARCHSTRING (GETTEXTPROP TEXTOBJ 'TEDIT.LAST.FIND.STRING))) + (CL:UNLESS SEARCHSTRING + (SETQ SEARCHSTRING (\TEDIT.GET.TARGET.STRING TEXTOBJ 'TEDIT.LAST.FIND.STRING)) + (SETQ SEARCHSTRING (TEDIT.GETINPUT TEXTOBJ (CL:IF BACKWARD + "Backward search string: " + "Search string: ") + SEARCHSTRING)) + (CL:WHEN SEARCHSTRING (* ; + "Save for next search, even if not found") + (PUTTEXTPROP TEXTOBJ 'TEDIT.LAST.FIND.STRING SEARCHSTRING))) + SEARCHSTRING]) (\TEDIT.GET.TARGET.STRING - [LAMBDA (TEXTOBJ PROP) (* ; "Edited 29-Feb-2024 17:08 by rmk") + [LAMBDA (TEXTOBJ PROP) (* ; "Edited 23-Jun-2024 23:06 by rmk") + (* ; "Edited 22-Jun-2024 12:03 by rmk") + (* ; "Edited 29-Feb-2024 17:08 by rmk") (* ;; "This is called from \TEDIT.KEY.FIND, TEDIT.DEFAULT.MENUFN, TEDIT.SUBSTITUTE. It tries to determine the best tentative target string for a search. PROP is either TEDIT.LAST.FIND.STRING or TEDIT.LAST.SUBSTITUTE.STRING.") - (* ;; "Current heuristic: use selection if longer than 1 character, otherwise last search string. Note that meta-G goes directly to the last search.") - - (if (GETTEXTPROP TEXTOBJ PROP) - then (if (IGREATERP (GETSEL (GETTOBJ TEXTOBJ SEL) - DCH) + (* ;; "Current heuristic: If a previous string, use it if it contains wild cards, otherwise the current non-point selection. Note that meta-G goes directly to the last search.") + + (LET [(PREV (STRINGP (GETTEXTPROP TEXTOBJ PROP] + (if [AND PREV (find I from 1 to (NCHARS PREV) + suchthat (AND (MEMB (NTHCHARCODE PREV I) + (CHARCODE (%# ESCAPE *))) + (NEQ (CHARCODE %') + (NTHCHARCODE PREV (SUB1 I] + then PREV + elseif (IGEQ (FGETSEL (FGETTOBJ TEXTOBJ SEL) + DCH) 1) - then (TEDIT.SEL.AS.STRING TEXTOBJ) - else (GETTEXTPROP TEXTOBJ PROP)) - else (TEDIT.SEL.AS.STRING TEXTOBJ]) + then + (* ;; "TEDIT.SEL.AS.STRING breaks on image objects, should be fixed there.") + + (CAR (NLSETQ (TEDIT.SEL.AS.STRING TEXTOBJ))) + else PREV]) (\TEDIT.KEY.FIND.BACKWARD [LAMBDA (TEXTSTREAM TEXTOBJ SEL AGAIN) (* ; "Edited 20-Jun-2023 13:57 by rmk") @@ -392,6 +417,22 @@ (* ;; "Stub for function-key") (TEDIT.SUBSTITUTE TEXTSTREAM NIL NIL T]) + +(\TEDIT.MANPAGE + [LAMBDA (TSTREAM TEXTOBJ SEL) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 26-May-2024 21:53 by rmk") + (* ; "Edited 25-May-2024 14:50 by rmk") + + (* ;; "If meta-D is typed in an existing DINFO window, the new stuff comes up but then the window closes. That could be debugged, but probably not worth it. The DINFO window has its own links to things that it thought were worth indexing.") + + (CL:UNLESS (WINDOWPROP (\TEDIT.PRIMARYPANE TSTREAM) + 'DINFOGRAPH) + (GENERIC.MAN.LOOKUP (TEDIT.SEL.AS.STRING TSTREAM SEL)))]) + +(\TEDIT.CALL.ED + [LAMBDA (TSTREAM TEXTOBJ SEL) (* ; "Edited 25-May-2024 15:03 by rmk") + (ED [MKATOM (CAR (MKLIST (TEDIT.SEL.AS.SEXPR TSTREAM SEL] + '(:DONTWAIT]) ) @@ -585,12 +626,16 @@ ("Function,^A" FN \TEDIT.SHOWCARETLOOKS) ("Meta,a" FN \TEDIT.SELECT.ALL) ("Meta,A" FN \TEDIT.SELECT.ALL) + ("Meta,d" FN \TEDIT.MANPAGE) + ("Meta,D" FN \TEDIT.MANPAGE) ("Meta,F" FN \TEDIT.KEY.FIND.BACKWARD) ("Meta,f" FN \TEDIT.KEY.FIND) ("Meta,g" FN \TEDIT.FINDAGAIN) ("Meta,G" FN \TEDIT.FINDAGAIN.BACKWARD) ("Meta,N" NEXT) ("Meta,n" NEXT) + ("Meta,o" FN \TEDIT.CALL.ED) + ("Meta,O" FN \TEDIT.CALL.ED) ("Meta,p" FN \TEDIT.PRINT.MENU) ("Meta,P" FN \TEDIT.PRINT.MENU) ("Meta,r" REDO) @@ -609,21 +654,22 @@ (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 (5884 25740 (\TEDIT.BOLD.SEL.OFF 5894 . 6232) (\TEDIT.BOLD.SEL.ON 6234 . 6562) ( +\TEDIT.CENTER.SEL 6564 . 8080) (\TEDIT.CENTER.SEL.REV 8082 . 8378) (\TEDIT.DEFAULTS.CARET 8380 . 8873) + (\TEDIT.DEFAULTSSEL 8875 . 9322) (\TEDIT.SETDEFAULT.FROM.SEL 9324 . 10001) (\TEDIT.KEY.FIND 10003 . +14451) (\TEDIT.KEY.FIND.SEARCHSTRING 14453 . 15593) (\TEDIT.GET.TARGET.STRING 15595 . 17142) ( +\TEDIT.KEY.FIND.BACKWARD 17144 . 17449) (\TEDIT.FINDAGAIN.BACKWARD 17451 . 17862) (\TEDIT.FINDAGAIN +17864 . 18155) (\TEDIT.ITALIC.SEL.OFF 18157 . 18409) (\TEDIT.ITALIC.SEL.ON 18411 . 18604) ( +\TEDIT.LARGERSEL 18606 . 18894) (\TEDIT.LCASE.SEL 18896 . 20083) (\TEDIT.SHOWCARETLOOKS 20085 . 21685) + (\TEDIT.SMALLERSEL 21687 . 21978) (\TEDIT.SUBSCRIPTSEL 21980 . 22183) (\TEDIT.SUPERSCRIPTSEL 22185 . +22389) (\TEDIT.UCASE.SEL 22391 . 23522) (\TEDIT.UNDERLINE.SEL.OFF 23524 . 23722) ( +\TEDIT.UNDERLINE.SEL.ON 23724 . 23920) (\TEDIT.STRIKEOUT.SEL.ON 23922 . 24118) ( +\TEDIT.STRIKEOUT.SEL.OFF 24120 . 24318) (\TEDIT.SELECT.ALL 24320 . 24543) (\TEDIT.KEY.SUBSTITUTE 24545 + . 24766) (\TEDIT.MANPAGE 24768 . 25524) (\TEDIT.CALL.ED 25526 . 25738)) (25812 32221 ( +\TEDIT.BOLD.CARET.OFF 25822 . 26357) (\TEDIT.BOLD.CARET.ON 26359 . 26891) (\TEDIT.ITALIC.CARET.OFF +26893 . 27430) (\TEDIT.ITALIC.CARET.ON 27432 . 27975) (\TEDIT.LARGER.CARET 27977 . 28512) ( +\TEDIT.SMALLER.CARET 28514 . 29051) (\TEDIT.SUBSCRIPT.CARET 29053 . 29594) (\TEDIT.SUPERSCRIPT.CARET +29596 . 30138) (\TEDIT.UNDERLINE.CARET.OFF 30140 . 30680) (\TEDIT.UNDERLINE.CARET.ON 30682 . 31220) ( +\TEDIT.STRIKEOUT.CARET.OFF 31222 . 31762) (\TEDIT.STRIKEOUT.CARET.ON 31764 . 32219)) (32290 32992 ( +\TK.DESCRIBEFONT 32300 . 32990))))) STOP diff --git a/library/tedit/TEDIT-FNKEYS.LCOM b/library/tedit/TEDIT-FNKEYS.LCOM index deacbf47f0b5aee77418d17069a125b1c9a7f0ac..54ce026fca024662af49166e7f82486b3923963b 100644 GIT binary patch delta 2824 zcmdT`O>7%Q6!uTrG)_wFs11oL+SjG6?WlHk*Z)S9ys_8bZS37;y^a%v5c#9AQsOjC z1qhJKuhbhb;(`ztI2H-&Rze`efl~znBoGpZ9ylOzY{ePDo7r8*rBUx#^6t#MpLz4W z@4eYOm#)3?PV1DIj-S7>6&HCi1%g=Mg+iL=Aj++Fp5Ja?TwjCE7La*ww42MvAi#;K zJ#{fzNahPdhJ%%z^}hc4i`zSwPZ!{6OD?NcqAqEMRF$E<1ze?BtHGd$L?Xe#+VU=L zv!82G;9`MjMXkvt^O!85L*O2aS4`3P4(0NYOlNqWyzGte&aN>i7^b|S>di*HjP_`r zyf1z}!;Tvub?=#>TrL(M(wQUVrAIbk9WbUZXs=A_bmOESxl<6R%!DrEONc&2~u zRK|_I4^(WzrJ4af)wD!9D6gJ>3jgA`Am7)y60p2ym9@DQM(778<1JtZY> z%2w0V;uWl}8DLmZS-DxSFU2dm8E0BEP(jdK_EaFrJZLqns3+qKQmrY+z%%Ld`8@4n z$mca#d)NrC9%Rr3J&~y3mJ=;Nso@+A!xr*Tu*rrKvM>f+12UKl15z-9HI6M6Nf}op ztz47M_#74tlCeQ!wWFA^!>H7xDqR#|1~D$lav4K!$V|~b@L;&?q_k7wP6Du`xcTqW z0;xdu0Y4SUJv1VO;H_bw$5)gXR~QB%uSdC+-Ynh@-yXZyYlni~XDN?bkA&NdF|A-Y zV!AQmNrAagIfKsUR=?bPiDhLH;yRU=5K6xF>?14?bc}fZEf?H zXFmIRW8%hplyd??u31V+LF(&e8S;6k%k??H-ZQwIO@c;s8no0X2fKKO*(4m`pv@lv zfn-+$P0@cT>825qsX=xOCWEpxpMq#IjST`)VhpeyL`$`TY?`_W31&BL=gCQUEJmc+ z>0b2kcca739Y=mYa$L2X<^`UUh^ODanDz?wdU0+q3Be77L(E~snrx~idPB22powfr zk{`#8)&y2zE##KoYBprku2Q!o@y@AB=8_?4G9@ez$iRwTH6=sAdA|phq*^T@muYwx z_re1fo*m7a|KqiHH^N?)+r3=U=<$}Tm%S?K|n;3qMF=2%XN$~I#d1`hX!)ec+!$4y=`e}Ar>I~XCd-iSh zhY7ctFhGKQ*l%z^4)Z1SY4DE|oj*bDWI3GulLhiCU%}CGE>9MOxHr&yL+~B=Umpl^ GU;hg;*RGua delta 1517 zcmbtU&u<$=6!s>m(>N({L_-@l3a=|l?KoL>cJ_yN8%NpL>v-#pZM*+BGmt&;=~OOpdJt>X4XIAB5qjLc>L!3-uK?O zZ|9Q_p1$+N#um~R*DI|>Nt9$j*g%pYi#$a6o#w&eUcFX@W&?N#y`Oe-x0lLCwbs${ ze&w)UX)HU_nEy6K?iIlVcF#pVN>Gg?=#)$4sJr zwF-MwAyal77{m#Jz(ciiOe^>=zQ)Hw(Twd_sgh-SR+@s8fktFQ)C@%-NiKR;lL1S* zipT+X^>rs@x|ZNt4!lWOwkMST9mrW*LdMRgV_+0Z)*E)A>@KFM1nmR#0SRQtnt>6M z7*h52Z`_SDLC-9$Ssr<7G)aC4j-POE4+jEgR>lJKGj(|=^>y|p+lJV(^`YHi}ZB3;TBXqr2Rt)$c~Lk0aY7yFR-EvwcYV-a^*r+WzXt_SiZcc$g*6 zMq^x-%$;q|`NVJ_iew|G(04%JUsoaKHqAW=tU`ec<^Gm4Tjjlkk?0MFvS1c8Z zkifkXdk(0*8tC)0^AtAJF#PD?Bus$8e+hZllW60hd{b2c#$bvu+&eQa7&jHnIx5TdTBocInGX`7Q8y$j?a= zh&0pb`F3Sz|5l|{?E)iw2;@Ehj*eS2i9s(2oFLy!C?{Z~6QQUL)B)zR4XmGzV-Seb znH*X%{W-jMekI7}`*Ec6GqL~2SDhCn+(pnymBr`W$EO452&UUJMm+^Vp~#*L8h9{B z?pF|s#>nM(r2S;_r}6e*vwxo>vB@cNAJ1?=UJG9$*WzJPi(eqO<5##4xf3_Y)A&5y zjV{cS6?B2v3p4cJ_CkERdv~y_!Y!}5p6!)AtNm!<`yiJgzu;-|GrmZE#YvhrLaxbS z;>a`HA$cUfJW`~WDfv-Ok+?D!ba}|+Lu6htNnHV&{4*s(K2JvI?svr@&ywNxb@k7Y K|C!WDKKKVjKY&I6 diff --git a/library/tedit/TEDIT-HCPY b/library/tedit/TEDIT-HCPY index dd0c7172b..6aefec181 100644 --- a/library/tedit/TEDIT-HCPY +++ b/library/tedit/TEDIT-HCPY @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "19-Apr-2024 09:12:32" {WMEDLEY}TEDIT>TEDIT-HCPY.;153 33754 +(FILECREATED "25-Jun-2024 12:01:24" {WMEDLEY}tedit>TEDIT-HCPY.;155 33909 :EDIT-BY rmk :CHANGES-TO (FNS \TEDIT.HARDCOPY.DISPLAYLINE) - :PREVIOUS-DATE "20-Mar-2024 11:05:37" {WMEDLEY}TEDIT>TEDIT-HCPY.;152) + :PREVIOUS-DATE "13-Jun-2024 17:27:02" {WMEDLEY}tedit>TEDIT-HCPY.;154) (PRETTYCOMPRINT TEDIT-HCPYCOMS) @@ -128,7 +128,8 @@ (TEDIT.FORMAT.HARDCOPY TSTREAM FILENM T BREAKPAGETITLE NIL NIL IMAGETYPE]) (\TEDIT.HARDCOPY.DISPLAYLINE - [LAMBDA (TEXTOBJ LINE REGION PRSTREAM FORMATTINGSTATE) (* ; "Edited 19-Apr-2024 09:09 by rmk") + [LAMBDA (TEXTOBJ LINE REGION PRSTREAM FORMATTINGSTATE) (* ; "Edited 13-Jun-2024 17:13 by rmk") + (* ; "Edited 19-Apr-2024 09:09 by rmk") (* ; "Edited 20-Mar-2024 11:04 by rmk") (* ; "Edited 15-Mar-2024 19:23 by rmk") (* ; "Edited 24-Dec-2023 22:07 by rmk") @@ -151,7 +152,8 @@ (FGETTOBJ TEXTOBJ TEXTLEN)) [LET ((THISLINE (FGETTOBJ TEXTOBJ THISLINE))) (CL:UNLESS (EQ LINE (fetch DESC of THISLINE)) - (\TEDIT.FORMATLINE TEXTOBJ (FGETLD LINE LCHAR1) + (\TEDIT.FORMATLINE (FGETTOBJ TEXTOBJ STREAMHINT) + (FGETLD LINE LCHAR1) LINE REGION PRSTREAM FORMATTINGSTATE)) (* ;; "Use the characters cached in THISLINE.") @@ -566,11 +568,11 @@ (CLOSEF DOC]) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3475 26808 (TEDIT.HARDCOPY 3485 . 4618) (\TEDIT.PRINT.MENU 4620 . 5474) (TEDIT.HCPYFILE - 5476 . 7416) (\TEDIT.HARDCOPY.DISPLAYLINE 7418 . 17356) (\TEDIT.HARDCOPY.FORMATLINE.HEADINGS 17358 . -18765) (\TEDIT.HARDCOPY.MODIFYLOOKS 18767 . 21001) (\TEDIT.HCPYFMTSPEC 21003 . 25137) ( -\TEDIT.INTEGER.IMAGEBOX 25139 . 25810) (\TEDIT.DISPLAY.DIACRITIC 25812 . 26806)) (26883 27713 ( -\TEDIT.SCALEREGION 26893 . 27711)) (27972 31667 (TEDIT.HARDCOPYFN 27982 . 29442) ( -\TEDIT.HARDCOPYFILEFN 29444 . 30005) (\TEDIT.POSTSCRIPT.HARDCOPY 30007 . 30938) (\TEDIT.PRESS.HARDCOPY - 30940 . 31665)) (32930 33731 (TEDIT-BOOK 32940 . 33729))))) + (FILEMAP (NIL (3475 26963 (TEDIT.HARDCOPY 3485 . 4618) (\TEDIT.PRINT.MENU 4620 . 5474) (TEDIT.HCPYFILE + 5476 . 7416) (\TEDIT.HARDCOPY.DISPLAYLINE 7418 . 17511) (\TEDIT.HARDCOPY.FORMATLINE.HEADINGS 17513 . +18920) (\TEDIT.HARDCOPY.MODIFYLOOKS 18922 . 21156) (\TEDIT.HCPYFMTSPEC 21158 . 25292) ( +\TEDIT.INTEGER.IMAGEBOX 25294 . 25965) (\TEDIT.DISPLAY.DIACRITIC 25967 . 26961)) (27038 27868 ( +\TEDIT.SCALEREGION 27048 . 27866)) (28127 31822 (TEDIT.HARDCOPYFN 28137 . 29597) ( +\TEDIT.HARDCOPYFILEFN 29599 . 30160) (\TEDIT.POSTSCRIPT.HARDCOPY 30162 . 31093) (\TEDIT.PRESS.HARDCOPY + 31095 . 31820)) (33085 33886 (TEDIT-BOOK 33095 . 33884))))) STOP diff --git a/library/tedit/TEDIT-HCPY.LCOM b/library/tedit/TEDIT-HCPY.LCOM index 629023942d78d567f99bce87e0bcb39b19fe8857..6214098b8db0bb805d4c0888349e594949ebb8d2 100644 GIT binary patch delta 1029 zcma)4Uu)A)6t5N)hd4x0Cddv^!96VI{>x3GjK=iVW=ncQa`&e&kj-^koZYAuCNlaJ z)P4^^`X%f~@X-g~^&5E8Zfk~nFb|h=&pE$8=j8s_{l5EY{T616%kMjj*uoSL_AKNv z>+_oj{a$OQ-CI(k8mh&5kTlIFh_MBjF)*D1F!6}%A=`lMZtLa#+k^IAYX@3~2i0OMb)m>TeLJr>nS zG>@L{wYR%l-49FWS_eX0%N-nEh?fwVPJpY+3T`^O!7G|MrfMc`4 z*K6~$3^wJe3hI6e4x%vlIXBnm4ux2*2_=DZ3#wUClMMx&+7QP6bCD^%pI9{$0h}D? zZbjy8U; zPbWefr$WTFr?U{wb3~!4&F53DhgDSvLJ{OM1u|&@K9RxtL5|HKM{n(9Er^fBv&0WX z%@34J0TJ~0EIqqn_0qyDiTq}* z0XBAEMWlIv3Qdd_Aq=x(P5-)lx(OY1o#M?V$G3j2MTqvLUqK*%XrU>JAU&s4`msd9 nuZk3iHe@z?=XHO_>X*cr>7J|cC~CaDxrAPOva z2;~<*-oh`i$xo0STRwm_`~i&fbfijnVcog+oO{l_GvCjDo_{*JjqIY+>ld+(4bbf} z!exR#KfmuvUh(AK_+PBKVYBoIQL+Ph4WT81Zj_O(!CAl4diA2$z38-|^S0N2{h$oV zXzk9R`x3P3f$u|>S1Oe>XrI36wDWLTLqpriKdgE_cO&j74+?aNO$|OA1-#<(=Euhu z-Lw8_|J}rJ#`g8GZyXr#7u&0mF$nkZ#S1 zz(NR;ADf#4W+4c~A(sM}$)FO4Rnd^Z3<6%@Jms-eiwI;hooPP5to6H}=3NCj%d)bj*H zNtQw}&eqh;Es%yyvnNxZo(8EFAtedit>TEDIT-HISTORY.;154 33348 +(FILECREATED "18-May-2024 16:29:04" {WMEDLEY}tedit>TEDIT-HISTORY.;168 36124 :EDIT-BY rmk - :CHANGES-TO (FNS TEDIT.UNDO) + :CHANGES-TO (FNS TEDIT.UNDO TEDIT.REDO) - :PREVIOUS-DATE "15-Mar-2024 13:55:42" {WMEDLEY}tedit>TEDIT-HISTORY.;153) + :PREVIOUS-DATE "12-May-2024 21:09:04" {WMEDLEY}tedit>TEDIT-HISTORY.;167) (PRETTYCOMPRINT TEDIT-HISTORYCOMS) @@ -23,13 +23,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 +146,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 +161,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 +227,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 +250,10 @@ (DEFINEQ (TEDIT.UNDO - [LAMBDA (TEXTOBJ) (* ; "Edited 20-Mar-2024 11:04 by rmk") + [LAMBDA (TEXTOBJ NOUNDOUNDO) (* ; "Edited 18-May-2024 16:23 by rmk") + (* ; "Edited 12-May-2024 21:08 by rmk") + (* ; "Edited 20-Mar-2024 11:04 by rmk") + (* ; "Edited 8-May-2024 11:16 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") @@ -264,30 +284,32 @@ (* ;; "We can get into trouble if there is an interrupt in the middle of undoing the full set of events for a previous action, or even in the middle of a singleton event.") (SETQ PREVEVENTS (FGETTOBJ TEXTOBJ TXTHISTORY)) - (\TEDIT.SHOWSEL SEL NIL) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (\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.SHOWSEL SEL T TEXTOBJ)))]) (\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,10 @@ T]) (TEDIT.REDO - [LAMBDA (TEXTOBJ) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (TEXTOBJ) (* ; "Edited 18-May-2024 16:23 by rmk") + (* ; "Edited 12-May-2024 21:08 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") + (* ; "Edited 7-May-2024 23:13 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") @@ -356,7 +382,7 @@ (* ;; "There really is something to redo and something to do it to.") - (\TEDIT.SHOWSEL SEL NIL) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (SELECTC (GETTH EVENT THACTION) ((LIST :Insert :Copy :Move) (* ; "It was an insertion") (\TEDIT.REDO.INSERTION TEXTOBJ EVENT SEL)) @@ -382,15 +408,15 @@  WAITINGCURSOR))) (TEDIT.PROMPTPRINT  TEXTOBJ "Searching..." T)  (SETQ SEL (fetch (TEXTOBJ SEL) of - TEXTOBJ)) (\TEDIT.SHOWSEL SEL NIL) - (SETQ CH (TEDIT.FIND TEXTOBJ + TEXTOBJ)) (\TEDIT.SHOWSEL SEL NIL NIL + TEXTOBJ) (SETQ CH (TEDIT.FIND TEXTOBJ  (GETTH EVENT THAUXINFO)))  (COND (CH (TEDIT.PROMPTPRINT TEXTOBJ  "done.") (\TEDIT.UPDATE.SEL SEL CH  (NCHARS (GETTH EVENT THAUXINFO))  (QUOTE RIGHT)) (\TEDIT.FIXSEL SEL  TEXTOBJ) (TEDIT.NORMALIZECARET TEXTOBJ) - (\TEDIT.SHOWSEL SEL T)) + (\TEDIT.SHOWSEL SEL T NIL TEXTOBJ))  (T (TEDIT.PROMPTPRINT TEXTOBJ  "[Not found]")))) ) @@ -398,13 +424,14 @@ (\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)) (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT "Redoing the action " (GETTH EVENT THACTION) " isn't implemented.") T)) - (\TEDIT.SHOWSEL SEL T)))]) + (\TEDIT.SHOWSEL SEL T TEXTOBJ)))]) (\TEDIT.UNDO.UNDO [LAMBDA (TEXTOBJ) (* ; "Edited 3-Mar-2024 21:27 by rmk") @@ -512,6 +539,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 +593,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 (4941 5962 (\TEDIT.HISTORYEVENT.DEFPRINT 4951 . 5960)) (6728 13448 (\TEDIT.HISTORYADD +6738 . 10919) (\TEDIT.CUMULATE.EVENTS 10921 . 12397) (\TEDIT.COMPOSITE.EVENT 12399 . 13446)) (13501 +28310 (TEDIT.UNDO 13511 . 17109) (\TEDIT.UNDO1 17111 . 20348) (TEDIT.REDO 20350 . 26070) ( +\TEDIT.UNDO.UNDO 26072 . 28308)) (28311 32773 (\TEDIT.UNDO.INSERTION 28321 . 29078) ( +\TEDIT.UNDO.DELETION 29080 . 29767) (\TEDIT.UNDO.MOVE 29769 . 31544) (\TEDIT.UNDO.REPLACE 31546 . +32447) (\TEDIT.UNDO.COMPOSITE 32449 . 32771)) (32774 36101 (\TEDIT.REDO.INSERTION 32784 . 33734) ( +\TEDIT.REDO.REPLACE 33736 . 34977) (\TEDIT.REDO.MOVE 34979 . 35934) (\TEDIT.REDO.COMPOSITE 35936 . +36099))))) STOP diff --git a/library/tedit/TEDIT-HISTORY.LCOM b/library/tedit/TEDIT-HISTORY.LCOM index e86bb9ad3f0e8693d562556a0cf9606dfa74137b..9e820741d40e985b54bfb85601fdf3e125e46f4d 100644 GIT binary patch delta 2369 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 TT6A&8x{Wt)<(Ja diff --git a/library/tedit/TEDIT-LOOKS b/library/tedit/TEDIT-LOOKS index b5bcc34a8..5cb91f394 100644 --- a/library/tedit/TEDIT-LOOKS +++ b/library/tedit/TEDIT-LOOKS @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "27-Mar-2024 13:53:47" {WMEDLEY}TEDIT>TEDIT-LOOKS.;242 155521 +(FILECREATED "25-Jun-2024 12:01:24" {WMEDLEY}tedit>TEDIT-LOOKS.;259 159713 :EDIT-BY rmk - :CHANGES-TO (FNS TEDIT.GET.PARALOOKS) + :CHANGES-TO (FNS TEDIT.SUBLOOKS \TEDIT.CHANGE.LOOKS TEDIT.PARALOOKS TEDIT.SUBPARALOOKS) - :PREVIOUS-DATE "20-Mar-2024 11:06:29" {WMEDLEY}TEDIT>TEDIT-LOOKS.;241) + :PREVIOUS-DATE "13-Jun-2024 22:13:37" {WMEDLEY}tedit>TEDIT-LOOKS.;258) (PRETTYCOMPRINT TEDIT-LOOKSCOMS) @@ -580,7 +580,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 +597,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 +993,10 @@ (\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 10-May-2024 22:42 by rmk") + (* ; "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 + 'CHANGED) + START + (ADD1 (IDIFFERENCE END START))))]))]) ) (DECLARE%: EVAL@COMPILE @@ -1187,7 +1202,8 @@ (DEFINEQ (TEDIT.LOOKS - [LAMBDA (TSTREAM NEWLOOKS SELORCH# LEN) (* ; "Edited 9-Feb-2024 11:40 by rmk") + [LAMBDA (TSTREAM NEWLOOKS SELORCH# LEN) (* ; "Edited 22-May-2024 13:55 by rmk") + (* ; "Edited 9-Feb-2024 11:40 by rmk") (* ; "Edited 23-Dec-2023 14:12 by rmk") (* ; "Edited 28-May-2023 13:56 by rmk") (* ; "Edited 24-May-2023 23:12 by rmk") @@ -1197,25 +1213,25 @@ (LET ((TEXTOBJ (TEXTOBJ TSTREAM)) SEL) - (CL:UNLESS (\TEDIT.READONLY TEXTOBJ) - - (* ;; "Ignores LEN if SELORCH# is a selection") - - [SETQ SEL (COND - ((type? SELECTION SELORCH#) - SELORCH#) - (SELORCH# (TEDIT.SETSEL TSTREAM SELORCH# LEN 'LEFT)) - (T (FGETTOBJ TEXTOBJ SEL] - (CL:WHEN (GETSEL SEL SET) - (if (AND (IGREATERP (GETSEL SEL DCH) - 0) - (ILEQ (GETSEL SEL CH#) - (TEXTLEN TEXTOBJ))) - then (\TEDIT.CHANGE.LOOKS TSTREAM NEWLOOKS SEL) - else - (* ;; "Out of bounds or maybe a point selection, no text to change. Punt out after setting the caret looks. Old code did not set the history, should we?") - - (TEDIT.CARETLOOKS TSTREAM NEWLOOKS))))]) + + (* ;; "Ignores LEN if SELORCH# is a selection") + + [SETQ SEL (COND + ((type? SELECTION SELORCH#) + SELORCH#) + (SELORCH# (TEDIT.SETSEL TSTREAM SELORCH# LEN 'LEFT)) + (T (FGETTOBJ TEXTOBJ SEL] + (CL:WHEN (GETSEL SEL SET) + (if (\TEDIT.READONLY TEXTOBJ NIL (GETSEL SEL CH#)) + elseif (AND (IGREATERP (GETSEL SEL DCH) + 0) + (ILEQ (GETSEL SEL CH#) + (TEXTLEN TEXTOBJ))) + then (\TEDIT.CHANGE.LOOKS TSTREAM NEWLOOKS SEL) + else + (* ;; "Out of bounds or maybe a point selection, no text to change. Punt out after setting the caret looks. Old code did not set the history, should we?") + + (TEDIT.CARETLOOKS TSTREAM NEWLOOKS)))]) (TEDIT.GET.LOOKS [LAMBDA (TEXTOBJ CH#ORCHARLOOKS) (* ; "Edited 17-Mar-2024 00:27 by rmk") @@ -1245,7 +1261,11 @@ TEXTOBJ]) (TEDIT.SUBLOOKS - [LAMBDA (TEXTSTREAM OLDLOOKSLIST NEWLOOKSLIST) (* ; "Edited 17-Mar-2024 17:17 by rmk") + [LAMBDA (TEXTSTREAM OLDLOOKSLIST NEWLOOKSLIST) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 18-May-2024 16:22 by rmk") + (* ; "Edited 10-May-2024 22:42 by rmk") + (* ; "Edited 17-Mar-2024 17:17 by rmk") + (* ; "Edited 6-May-2024 17:27 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 +1276,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 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.PRIMARYPANE TEXTOBJ)) + (* ; "Update the screen image") + (\TEDIT.UPDATE.LINES TEXTOBJ 'CHANGED FIRSTCHANGEDCHNO NCHARSCHANGED) (\TEDIT.FIXSEL SEL TEXTOBJ) - (\TEDIT.SHOWSEL SEL T)) - (RETURN (CL:IF CHANGEMADE - 'Done - 'NoChangesMade)])]) + (\TEDIT.SHOWSEL SEL T TEXTOBJ)) + (RETURN CHANGEMADE)))]) (TEDIT.FINDLOOKS [LAMBDA (TEXTSTREAM OLDLOOKSLIST CH#) (* ; "Edited 17-Mar-2024 00:27 by rmk") @@ -1330,16 +1351,19 @@ (DEFINEQ (\TEDIT.CHANGE.LOOKS - [LAMBDA (TSTREAM NEWLOOKS SEL) (* ; "Edited 15-Mar-2024 14:23 by rmk") + [LAMBDA (TSTREAM NEWLOOKS SEL) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 18-May-2024 16:22 by rmk") + (* ; "Edited 12-May-2024 20:57 by rmk") + (* ; "Edited 6-May-2024 17:26 by rmk") + (* ; "Edited 10-May-2024 22:42 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,10 +1513,9 @@ THFIRSTPIECE _ (fetch (SELPIECES SPFIRST) of SELPIECES) THOLDINFO _ OLDLOOKSLIST)) - (CL:WHEN (FGETTOBJ TEXTOBJ \WINDOW) - (\TEDIT.MARK.LINES.DIRTY TEXTOBJ SEL) + (CL:WHEN (\TEDIT.PRIMARYPANE TEXTOBJ) (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) - NIL) + NIL TEXTOBJ) (SELECTQ INVISIBLE (ON (* ;; "Previously visible characters have disappeared, to a point") @@ -1511,14 +1534,15 @@ NIL) (\TEDIT.RESET.EXTEND.PENDING.DELETE (FGETTOBJ TEXTOBJ SEL) TEXTOBJ) - (\TEDIT.UPDATE.SCREEN TEXTOBJ) (* ; "Update the screen image") + (\TEDIT.UPDATE.LINES TEXTOBJ 'CHANGED SEL) (\TEDIT.FIXSEL (FGETTOBJ TEXTOBJ SEL) TEXTOBJ) (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) - T))]) + T TEXTOBJ))]) (\TEDIT.LOOKS - [LAMBDA (TEXTOBJ) (* ; "Edited 8-May-2023 21:21 by rmk") + [LAMBDA (TEXTOBJ) (* ; "Edited 13-Jun-2024 22:10 by rmk") + (* ; "Edited 8-May-2023 21:21 by rmk") (* ; "Edited 30-May-91 21:41 by jds") (* ;; "Handler for the middle-button menu's LOOKS button. Brings up 3 menus, for font, face, and size. Then calls TEDIT.LOOKS to make the requested changes.") @@ -1527,8 +1551,8 @@ (REGION (WINDOWPROP (CAR (fetch (TEXTOBJ \WINDOW) of TEXTOBJ)) 'REGION)) (POS (create POSITION - XCOORD _ (fetch LEFT of REGION) - YCOORD _ (fetch TOP of REGION))) + XCOORD _ (fetch (REGION LEFT) of REGION) + YCOORD _ (fetch (REGION TOP) of REGION))) FONT FACE SIZE NEWLOOKS) (CL:WHEN (ILEQ (fetch (SELECTION CH#) of SEL) (TEXTLEN TEXTOBJ)) (* ; "Otherwise, nothing to change") @@ -1699,7 +1723,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 +1789,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 +1834,14 @@ 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 25-Jun-2024 11:59 by rmk") + (* ; "Edited 22-May-2024 13:55 by rmk") + (* ; "Edited 18-May-2024 16:21 by rmk") + (* ; "Edited 12-May-2024 20:55 by rmk") + (* ; "Edited 6-May-2024 11:45 by rmk") + (* ; "Edited 10-May-2024 22:42 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") @@ -1836,8 +1863,8 @@ CONS pair of default width and LIST of TAB record instances") (SETQ SEL (CL:IF (FIXP SEL) (TEDIT.SETSEL TEXTOBJ SEL LEN 'RIGHT) (FGETTOBJ TEXTOBJ SEL)))) - (CL:UNLESS (AND (FGETSEL SEL SET) - (NOT (\TEDIT.READONLY TEXTOBJ))) + (CL:WHEN (OR (NOT (FGETSEL SEL SET)) + (\TEDIT.READONLY TEXTOBJ NIL (FGETSEL SEL CH#))) (RETURN NIL)) [COND ((type? FMTSPEC NEWLOOKS) (* ; @@ -1969,10 +1996,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) - (\TEDIT.SHOWSEL SEL NIL) (* ; + (CL:WHEN (\TEDIT.PRIMARYPANE TEXTOBJ) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (* ;  "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 +2007,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 'CHANGED PARAPIECES) + (* ;  "Update the screen image, showing the original selection") (\TEDIT.FIXSEL SEL TEXTOBJ) - (\TEDIT.SHOWSEL SEL T))]) + (\TEDIT.SHOWSEL SEL T TEXTOBJ))]) (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 +2031,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 +2075,12 @@ 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 25-Jun-2024 11:59 by rmk") + (* ; "Edited 18-May-2024 16:22 by rmk") + (* ; "Edited 10-May-2024 22:42 by rmk") + (* ; "Edited 29-Apr-2024 11:06 by rmk") + (* ; "Edited 6-May-2024 17:28 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 +2088,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 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.PRIMARYPANE TEXTOBJ)) + (* ; "Update the screen image") + (\TEDIT.UPDATE.LINES TEXTOBJ 'CHANGED FIRSTCHANGEDCHNO NCHARSCHANGED) + (\TEDIT.FIXSEL SEL TEXTOBJ) + (\TEDIT.SHOWSEL SEL T TEXTOBJ)) + (RETURN CHANGEMADE]) (SAMEPARALOOKS [LAMBDA (PARALOOK1 PARALOOK2 FEATURES) (* ; "Edited 8-Dec-92 00:44 by jds") @@ -2134,7 +2166,10 @@ 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 18-May-2024 16:21 by rmk") + (* ; "Edited 10-May-2024 22:42 by rmk") + (* ; "Edited 15-Mar-2024 14:23 by rmk") + (* ; "Edited 6-May-2024 17:28 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 +2181,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 +2191,19 @@ 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 TEXTOBJ) + (\TEDIT.UPDATE.LINES TEXTOBJ 'CHANGED (GETTH EVENT THCH#) + (GETTH EVENT THLEN)) (\TEDIT.SET.SEL.LOOKS SEL 'NORMAL) (\TEDIT.FIXSEL SEL TEXTOBJ) - (\TEDIT.SHOWSEL SEL T)) + (\TEDIT.SHOWSEL SEL T TEXTOBJ)) (\TEDIT.HISTORYADD TEXTOBJ EVENT]) (\TEDIT.UNDO.PARALOOKS - [LAMBDA (TEXTOBJ EVENT) (* ; "Edited 15-Mar-2024 14:23 by rmk") + [LAMBDA (TEXTOBJ EVENT) (* ; "Edited 18-May-2024 16:22 by rmk") + (* ; "Edited 10-May-2024 22:42 by rmk") + (* ; "Edited 15-Mar-2024 14:23 by rmk") + (* ; "Edited 6-May-2024 17:28 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 +2214,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 TEXTOBJ) + (\TEDIT.UPDATE.LINES TEXTOBJ 'CHANGED (GETTH EVENT THCH#) + (GETTH EVENT THLEN)) (\TEDIT.SET.SEL.LOOKS SEL 'NORMAL) (\TEDIT.FIXSEL SEL TEXTOBJ) - (\TEDIT.SHOWSEL SEL T)) + (\TEDIT.SHOWSEL SEL T TEXTOBJ)) (\TEDIT.HISTORYADD TEXTOBJ EVENT]) ) @@ -2311,7 +2348,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 +2377,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 +2478,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 (21037 22798 (\TEDIT.CHARLOOKS.DEFPRINT 21047 . 22178) (\TEDIT.FMTSPEC.DEFPRINT 22180 . +22796)) (23908 50659 (CHARLOOKS.FROM.FONT 23918 . 25286) (\TEDIT.EQCLOOKS 25288 . 28346) ( +\TEDIT.SAMECLOOKS 28348 . 32507) (TEDIT.CARETLOOKS 32509 . 33551) (TEDIT.COPY.LOOKS 33553 . 35704) ( +\TEDIT.UNPARSE.CHARLOOKS.LIST 35706 . 38309) (TEDIT.MODIFYLOOKS 38311 . 40304) (TEDIT.NEW.FONT 40306 + . 40726) (\TEDIT.CARETLOOKS.VERIFY 40728 . 41565) (\TEDIT.CARETPIECE 41567 . 41872) ( +\TEDIT.GET.INSERT.CHARLOOKS 41874 . 43507) (\TEDIT.GET.TERMSA.WIDTHS 43509 . 43925) ( +\TEDIT.PARSE.CHARLOOKS.LIST 43927 . 50657)) (50660 66719 (\TEDIT.TRANSLATE.ASCIICHARS 50670 . 60878) ( +\TEDIT.CONVERT.TO.FORMATTED 60880 . 66717)) (67909 75144 (\TEDIT.UNIQUIFY.CHARLOOKS 67919 . 69579) ( +\TEDIT.UNIQUIFY.PARALOOKS 69581 . 70848) (\TEDIT.UNIQUIFY.ALL 70850 . 72707) ( +\TEDIT.FLUSH.UNUSED.LOOKS 72709 . 75142)) (75177 85661 (TEDIT.LOOKS 75187 . 77124) (TEDIT.GET.LOOKS +77126 . 79155) (TEDIT.SUBLOOKS 79157 . 83025) (TEDIT.FINDLOOKS 83027 . 85659)) (85662 103368 ( +\TEDIT.CHANGE.LOOKS 85672 . 99139) (\TEDIT.LOOKS 99141 . 102166) (\TEDIT.FONTCOPY 102168 . 103366)) ( +103411 135984 (\TEDIT.EQFMTSPEC 103421 . 106929) (TEDIT.GET.PARALOOKS 106931 . 110711) ( +\TEDIT.PARSE.PARALOOKS.LIST 110713 . 118684) (TEDIT.PARALOOKS 118686 . 132192) (TEDIT.COPY.PARALOOKS +132194 . 134318) (\TEDIT.PARABOUNDS 134320 . 135982)) (136044 143073 (TEDIT.SUBPARALOOKS 136054 . +139674) (SAMEPARALOOKS 139676 . 143071)) (143116 147846 (\TEDIT.UNDO.LOOKS 143126 . 145732) ( +\TEDIT.UNDO.PARALOOKS 145734 . 147844)) (147885 148463 (\TEDIT.MARK.REVISION 147895 . 148461)) (148525 + 149350 (\CREATE.TEDIT.DEFAULT.FMTSPEC 148535 . 148972) (\CREATE.TEDIT.FACE.MENU 148974 . 149146) ( +\CREATE.TEDIT.SIZE.MENU 149148 . 149348)) (149387 158409 (\TEDIT.APPLY.STYLES 149397 . 152962) ( +\TEDIT.APPLY.PARASTYLES 152964 . 155283) (TEDIT.STYLESHEET 155285 . 156352) (TEDIT.POP.STYLESHEET +156354 . 157022) (TEDIT.PUSH.STYLESHEET 157024 . 157764) (TEDIT.ADD.STYLESHEET 157766 . 158407))))) STOP diff --git a/library/tedit/TEDIT-LOOKS.LCOM b/library/tedit/TEDIT-LOOKS.LCOM index 2c0963298f5934095cdfccd12aba09aada2d2e1e..c32a0eae165a90f02cf99283eb21dccda34c67f0 100644 GIT binary patch delta 5814 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 delta 6011 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 diff --git a/library/tedit/TEDIT-MENU b/library/tedit/TEDIT-MENU index 15aa1276f..f86c5e022 100644 --- a/library/tedit/TEDIT-MENU +++ b/library/tedit/TEDIT-MENU @@ -1,12 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "19-Apr-2024 10:53:42" {WMEDLEY}tedit>TEDIT-MENU.;171 269091 +(FILECREATED "25-Jun-2024 12:01:24" {WMEDLEY}tedit>TEDIT-MENU.;200 272611 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.MENU.START) + :CHANGES-TO (FNS \TEDIT.EXPANDED.MENU MB.DEFAULTBUTTON.ACTIONFN \TEDIT.EXPANDEDCHARLOOKS.MENU + \TEDIT.SHOW.CHARLOOKS \TEDIT.EXPANDEDPARA.MENU) - :PREVIOUS-DATE "10-Apr-2024 23:06:52" {WMEDLEY}tedit>TEDIT-MENU.;170) + :PREVIOUS-DATE "21-Jun-2024 23:14:42" {WMEDLEY}tedit>TEDIT-MENU.;199) (PRETTYCOMPRINT TEDIT-MENUCOMS) @@ -169,9 +170,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 'CHANGED))]) ) ) @@ -495,45 +495,45 @@ '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))]) (MBUTTON.SET.FIELD - [LAMBDA (TEXTSTREAM FIELD VALUE) (* ; "Edited 17-Mar-2024 00:25 by rmk") + [LAMBDA (TSTREAM FIELD VALUE) (* ; "Edited 10-May-2024 12:37 by rmk") + (* ; "Edited 17-Mar-2024 00:25 by rmk") (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 21-Oct-2023 08:55 by rmk") (* ; "Edited 13-Sep-2022 12:24 by rmk") @@ -542,17 +542,17 @@ (* ;; "Makes the contents of the field with name FIELD be VALUE.") - (LET ((TEXTOBJ (TEXTOBJ TEXTSTREAM)) + (LET ((TEXTOBJ (TEXTOBJ TSTREAM)) OBJ SAVED.SEL FIELD.SEL PC NEW-STRING) - (SETQ PC (MBUTTON.FIND.BUTTON FIELD TEXTSTREAM)) - (CL:WHEN (SETQ PC (MBUTTON.FIND.BUTTON FIELD TEXTSTREAM)) + (SETQ PC (MBUTTON.FIND.BUTTON FIELD TSTREAM)) + (CL:WHEN (SETQ PC (MBUTTON.FIND.BUTTON FIELD TSTREAM)) (SETQ FIELD.SEL (MBUTTON.FIND.NEXT.FIELD TEXTOBJ (\TEDIT.PCTOCH PC TEXTOBJ))) (* ;  "select the field following this button.") (CL:WHEN FIELD.SEL (* ;  "there are contents to set for this button") (\TEDIT.FIXSEL FIELD.SEL TEXTOBJ) - (TEDIT.SETSEL TEXTSTREAM (fetch (SELECTION CH#) of FIELD.SEL) + (TEDIT.SETSEL TSTREAM (fetch (SELECTION CH#) of FIELD.SEL) (fetch (SELECTION DCH) of FIELD.SEL) (fetch (SELECTION POINT) of FIELD.SEL) T) @@ -560,12 +560,14 @@ [COND ((ZEROP (NCHARS NEW-STRING)) (* ;  "Nothing to replace, so just delete it.") - (TEDIT.DELETE TEXTSTREAM)) + (TEDIT.DELETE TSTREAM)) (T (* ; "there IS new info, so insert it.") - (TEDIT.INSERT TEXTSTREAM (MKSTRING VALUE]))]) + (TEDIT.INSERT TSTREAM (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-Jun-2024 22:55 by rmk") + (* ; "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 +584,9 @@ (\TEDIT.DELETE TEXTOBJ FIELDSEL)) (* ; "Delete existing text") (CL:WHEN NEWVALUE (\TEDIT.INSERT (MKSTRING NEWVALUE) - FIELDSEL TEXTOBJ)))]) + FIELDSEL + (FGETTOBJ TEXTOBJ STREAMHINT) + T)))]) (MBUTTON.SET.NEXT.BUTTON.STATE [LAMBDA (TEXTOBJ STARTINGCH NEWSTATE) (* jds "31-Jul-85 22:09") @@ -767,13 +771,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 +786,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 +999,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 +1025,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 +1277,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 +1916,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 +1927,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 +1935,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]) @@ -2237,14 +2240,15 @@ (SETQ TEDIT.EXPANDED.MENU (\TEXTMENU.DOC.CREATE TEDIT.EXPANDEDMENU.SPEC]) (\TEDIT.EXPANDED.MENU - [LAMBDA (STREAM) (* ; "Edited 27-Feb-2024 08:11 by rmk") + [LAMBDA (STREAM) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 27-Feb-2024 08:11 by rmk") (* ; "Edited 22-Sep-2023 20:00 by rmk") (* ; "Edited 19-Sep-2023 08:51 by rmk") (* ; "Edited 20-Aug-87 16:51 by jds") (* ; "'27-Sep-84 01:04' gbn") (LET (CHARMENUTEXTSTREAM (TEXTOBJ (TEXTOBJ STREAM))) (\TEDIT.MENU.START (SETQ CHARMENUTEXTSTREAM (COPYTEXTSTREAM TEDIT.EXPANDED.MENU T)) - (\TEDIT.PRIMARYW TEXTOBJ) + (\TEDIT.PRIMARYPANE TEXTOBJ) "TEdit Menu" (HEIGHTIFWINDOW 60 T) 'EXPANDED) @@ -2314,7 +2318,12 @@ (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 MENUTEXTOBJ MAINTEXTOBJ MAINSEL) + (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 18-May-2024 16:44 by rmk") + (* ; "Edited 12-May-2024 21:31 by rmk") + (* ; "Edited 15-Mar-2024 13:53 by rmk") + (* ; "Edited 2-May-2024 13:48 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,11 +2335,14 @@ (* ; "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] - [RESETSAVE (\TEDIT.MARKACTIVE TEXTOBJ) + [RESETSAVE (\TEDIT.MARKACTIVE MENUTEXTOBJ) '(AND (\TEDIT.MARKINACTIVE OLDVALUE] [RESETSAVE (PROG1 OBJ (IMAGEOBJPROP OBJ 'MENUBUTTON.SELECTED T)) @@ -2341,109 +2353,97 @@  "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 (* ; + (CL:WHEN OFILE (* ;  "Only try this if he really typed a file name") - (TEDIT.PUT MAINTEXTOBJ OFILE NIL (GETTEXTPROP TEXTOBJ - 'UNFORMATTEDPUT/GET]) + (TEDIT.PUT MAINTEXTOBJ OFILE NIL (GETTEXTPROP MAINTEXTOBJ + 'UNFORMATTEDPUT/GET)))) (Get [SETQ OFILE (\TEDIT.MAKEFILENAME (MBUTTON.NEXT.FIELD.AS.TEXT - TEXTOBJ + MENUSTREAM (GETSEL SEL CH#] - [COND - (OFILE (* ; + (CL:WHEN OFILE (* ;  "Only try this if he really typed a file name") - (TEDIT.GET MAINTEXTOBJ OFILE (GETTEXTPROP TEXTOBJ - 'UNFORMATTEDPUT/GET]) + (TEDIT.GET MAINTEXTOBJ OFILE (GETTEXTPROP MAINTEXTOBJ + '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#))) - [COND - ((ZEROP (NCHARS OFILE)) (* ; "NOTHING--HE HIT DEL.") - NIL) - (OFILE (* ; + (Find (SETQ OFILE (MBUTTON.NEXT.FIELD.AS.TEXT MENUSTREAM (GETSEL SEL CH#))) + (CL:UNLESS (ZEROP (NCHARS OFILE)) + (CL:WHEN OFILE (* ;  "There's something to do. Go do it.") - (TEDIT.PROMPTPRINT MAINTEXTOBJ "Searching..." T) - [SETQ CH (CAR (ERSETQ (TEDIT.FIND MAINTEXTOBJ OFILE NIL NIL - T] - (COND - (CH (* ; "We found the target text.") - (TEDIT.PROMPTPRINT MAINTEXTOBJ "Done.") - (\TEDIT.SHOWSEL MAINSEL NIL) - (SETSEL MAINSEL CH# (CAR CH)) + (TEDIT.PROMPTPRINT MAINTEXTOBJ "Searching..." T) + [SETQ CH (CAR (ERSETQ (TEDIT.FIND MAINTEXTOBJ OFILE NIL NIL T + ] + (COND + (CH (* ; "We found the target text.") + (TEDIT.PROMPTPRINT MAINTEXTOBJ "Done.") + (\TEDIT.SHOWSEL MAINSEL NIL MAINTEXTOBJ) + (SETSEL MAINSEL CH# (CAR CH)) (* ;  "Set up SELECTION to be the found text") - (SETSEL MAINSEL CHLIM (ADD1 (CADR CH))) - [SETSEL MAINSEL DCH (ADD1 (IDIFFERENCE (CADR CH) - (CAR CH] - (SETSEL MAINSEL POINT 'RIGHT) - (FSETTOBJ MAINTEXTOBJ CARETLOOKS ( + (SETSEL MAINSEL CHLIM (ADD1 (CADR CH))) + [SETSEL MAINSEL DCH (ADD1 (IDIFFERENCE (CADR CH) + (CAR CH] + (SETSEL MAINSEL POINT 'RIGHT) + (FSETTOBJ MAINTEXTOBJ CARETLOOKS ( \TEDIT.GET.INSERT.CHARLOOKS - MAINTEXTOBJ - MAINSEL)) - (* ; + MAINTEXTOBJ MAINSEL) + ) (* ;  "Set the caret looks to match those of the new selection") - (\TEDIT.RESET.EXTEND.PENDING.DELETE MAINSEL - MAINTEXTOBJ) + (\TEDIT.RESET.EXTEND.PENDING.DELETE MAINSEL + MAINTEXTOBJ) (* ; "And never pending a deletion.") - (\TEDIT.FIXSEL MAINSEL MAINTEXTOBJ) - (TEDIT.NORMALIZECARET MAINTEXTOBJ MAINSEL) - (\TEDIT.SHOWSEL MAINSEL T)) - (T (TEDIT.PROMPTPRINT MAINTEXTOBJ "(Not found)"]) + (\TEDIT.FIXSEL MAINSEL MAINTEXTOBJ) + (TEDIT.NORMALIZECARET MAINTEXTOBJ MAINSEL) + (\TEDIT.SHOWSEL MAINSEL T MAINTEXTOBJ)) + (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 MENUTEXTOBJ 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 MENUTEXTOBJ + (GETSEL (FGETTOBJ MENUTEXTOBJ + SCRATCHSEL) + CHLIM))) [SETQ CONFIRM? (EQ 'ON (IMAGEOBJPROP (CAR LOC) 'STATE] - [SETQ LOC (MBUTTON.FIND.NEXT.BUTTON TEXTOBJ + [SETQ LOC (MBUTTON.FIND.NEXT.BUTTON MENUTEXTOBJ (ADD1 (CDR LOC] [SETQ KEEPLOOKS? (EQ 'ON (IMAGEOBJPROP (CAR LOC) 'STATE] - (COND - ((ZEROP (NCHARS PATTERN)) - (* ; "NOTHING--HE HIT DEL.") - NIL) - (PATTERN (* ; + (CL:UNLESS (ZEROP (NCHARS PATTERN)) + (CL:WHEN PATTERN + (* ;  "There's something to do. Go do it.") - (CL:WHEN KEEPLOOKS? - (MBUTTON.FIND.NEXT.FIELD TEXTOBJ SAVECH# T - ) + (CL:WHEN KEEPLOOKS? + (MBUTTON.FIND.NEXT.FIELD MENUTEXTOBJ SAVECH# + T) - (* ;; + (* ;;  "Get the replacement out of the menu to copy into the main text.") - (SETQ REPLACEMENT - (\TEDIT.SELPIECES (fetch (TEXTOBJ - SCRATCHSEL - ) - of TEXTOBJ)))) - (RESETLST - (RESETSAVE (CURSOR WAITINGCURSOR)) - (TEDIT.SUBSTITUTE MAINTEXTOBJ PATTERN - REPLACEMENT CONFIRM?))]) + (SETQ REPLACEMENT (\TEDIT.SELPIECES + (FGETTOBJ MENUTEXTOBJ + SCRATCHSEL)))) + (RESETLST + (RESETSAVE (CURSOR WAITINGCURSOR)) + (TEDIT.SUBSTITUTE MAINTEXTOBJ PATTERN + REPLACEMENT CONFIRM?))))]) (Quit (* ; "He wants to QUIT the edit.") - (COND - ((\TEDIT.QUIT (\TEDIT.PRIMARYW MAINTEXTOBJ) - T) - (replace (TEXTOBJ EDITFINISHEDFLG) of TEXTOBJ with T)))) + (CL:WHEN (\TEDIT.QUIT (\TEDIT.PRIMARYPANE MAINTEXTOBJ) + T) + (FSETTOBJ MENUTEXTOBJ EDITFINISHEDFLG T))) (Page% Layout (* ; "Page layout menu") (\TEDIT.MENU.START (COPYTEXTSTREAM TEDIT.EXPANDED.PAGEMENU T) - (\TEDIT.PRIMARYW MAINTEXTOBJ) + (\TEDIT.PRIMARYPANE MAINTEXTOBJ) "Page Layout Menu" (HEIGHTIFWINDOW 135 5) 'PAGE)) @@ -2452,9 +2452,8 @@ (Char% Looks (* ; "Page layout menu") (\TEDIT.EXPANDEDCHARLOOKS.MENU MAINTEXTOBJ)) (All (* ; "Select the entire document.") - (COND - ((NOT (ZEROP (TEXTLEN MAINTEXTOBJ))) - (\TEDIT.SHOWSEL MAINSEL NIL) + (CL:UNLESS (ZEROP (TEXTLEN MAINTEXTOBJ)) + (\TEDIT.SHOWSEL MAINSEL NIL MAINTEXTOBJ) (\TEDIT.RESET.EXTEND.PENDING.DELETE MAINSEL MAINTEXTOBJ) (SETSEL MAINSEL CH# 1) (SETSEL MAINSEL CHLIM (ADD1 (TEXTLEN MAINTEXTOBJ))) @@ -2462,51 +2461,47 @@ (SETSEL MAINSEL POINT 'LEFT) (SETSEL MAINSEL SET T) (\TEDIT.FIXSEL MAINSEL MAINTEXTOBJ) - (\TEDIT.SHOWSEL MAINSEL T)))) + (\TEDIT.SHOWSEL MAINSEL T MAINTEXTOBJ))) (Hardcopy [SETQ PRINTHOST (\TEDIT.MAKEFILENAME (MBUTTON.NEXT.FIELD.AS.TEXT - TEXTOBJ + MENUSTREAM (GETSEL SEL CH#] - (COND - ((NOT PRINTHOST) (* ; + (CL:UNLESS 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#))) + (TEDIT.PROMPTPRINT MAINTEXTOBJ "Using default print server.")) + (SETQ %#COPIES (MBUTTON.NEXT.FIELD.AS.NUMBER MENUSTREAM + (GETSEL (FGETTOBJ MENUTEXTOBJ SCRATCHSEL) + CH#))) (* ;  "Grab the field that specifies number of copies.") [COND (%#COPIES (SETQ PRINTOPTIONS (LIST '%#COPIES %#COPIES] - (SETQ %#SIDES - (SELECTQ (IMAGEOBJPROP (CAR (MBUTTON.FIND.NEXT.BUTTON - TEXTOBJ - (GETSEL (fetch (TEXTOBJ SCRATCHSEL) - of TEXTOBJ) + (SETQ %#SIDES (SELECTQ (IMAGEOBJPROP + (CAR (MBUTTON.FIND.NEXT.BUTTON + MENUTEXTOBJ + (GETSEL (FGETTOBJ MENUTEXTOBJ + SCRATCHSEL) CHLIM))) - 'STATE) - (One% Side 1) - (Duplex 2) - NIL)) - [COND - (%#SIDES (push PRINTOPTIONS %#SIDES) - (push PRINTOPTIONS '%#SIDES] + 'STATE) + (One% Side 1) + (Duplex 2) + NIL)) + (CL:WHEN %#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 MENUTEXTOBJ + SCRATCHSEL) CH#] - [COND - (MSG (push PRINTOPTIONS MSG) - (push PRINTOPTIONS 'MESSAGE] + (CL:WHEN MSG + (push PRINTOPTIONS MSG) + (push PRINTOPTIONS 'MESSAGE)) (TEDIT.HARDCOPY MAINTEXTOBJ NIL NIL NIL PRINTHOST PRINTOPTIONS)) (ERROR)))] (SETSEL SEL SET T) (* ;  "Now turn the menu button highlighting off.") (SETSEL SEL ONFLG T) - (\TEDIT.SHOWSEL SEL NIL) (* ; + (\TEDIT.SHOWSEL SEL NIL MENUTEXTOBJ) (* ;  "And forget that anything is selected.") (SETSEL SEL SET NIL]) ) @@ -2540,7 +2535,8 @@ TEDIT.CHARLOOKSMENU.SPEC]) (\TEDIT.EXPANDEDCHARLOOKS.MENU - [LAMBDA (STREAM) (* ; "Edited 27-Feb-2024 07:56 by rmk") + [LAMBDA (STREAM) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 27-Feb-2024 07:56 by rmk") (* ; "Edited 20-Sep-2023 23:13 by rmk") (* ; "Edited 10-Oct-2022 00:23 by rmk") (* ; "Edited 20-Aug-87 16:49 by jds") @@ -2548,7 +2544,7 @@ (* ;; "Open a character-looks menu.") (\TEDIT.MENU.START (COPYTEXTSTREAM TEDIT.CHARLOOKS.MENU T) - (\TEDIT.PRIMARYW STREAM) + (\TEDIT.PRIMARYPANE STREAM) "Character Looks Menu" (HEIGHTIFWINDOW 75 T) 'CHARLOOKS]) @@ -2561,7 +2557,11 @@ NEWLOOKS]) (\TEDIT.APPLY.CHARLOOKS - [LAMBDA (OBJ SEL W) (* ; "Edited 27-Mar-2024 15:12 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 18-May-2024 17:15 by rmk") + (* ; "Edited 12-May-2024 21:40 by rmk") + (* ; "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 +2570,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 MENUTEXTOBJ) (* ; "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 +2605,11 @@ NEWLOOKS]) (\TEDIT.SHOW.CHARLOOKS - [LAMBDA (OBJ SEL MENUSTREAM) (* ; "Edited 27-Mar-2024 15:11 by rmk") + [LAMBDA (OBJ SEL MENUSTREAM) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 18-May-2024 17:15 by rmk") + (* ; "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 +2621,42 @@ (* ;; "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 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)) - (TTY.PROCESS (WINDOWPROP (\TEDIT.PRIMARYW MAINTEXTOBJ) + "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.PRIMARYPANE MAINTEXTOBJ) 'PROCESS)))]) (\TEDIT.NEUTRALIZE.CHARLOOKS - [LAMBDA (OBJ SEL W) (* ; "Edited 15-Mar-2024 14:23 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 12-May-2024 21:03 by rmk") + (* ; "Edited 10-May-2024 22:42 by rmk") + (* ; "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 +2665,21 @@ (* ;; "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) + (\TEDIT.SHOWSEL SEL NIL NIL MENUTEXTOBJ) (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 'CHANGED) + (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 18-May-2024 16:23 by rmk") + (* ; "Edited 12-May-2024 21:04 by rmk") + (* ; "Edited 20-Mar-2024 11:03 by rmk") + (* ; "Edited 6-May-2024 23:14 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 +2692,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) @@ -2763,9 +2778,8 @@ (MBUTTON.SET.NEXT.FIELD TEXTOBJ (ADD1 (CDR NEXTB)) (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#]) + (\TEDIT.SHOWSEL SCRATCHSEL NIL TEXTOBJ) + (SETSEL SCRATCHSEL SET NIL]) (\TEDIT.NEUTRALIZE.CHARLOOKS.MENU [LAMBDA (TEXTOBJ CH#) (* ; "Edited 19-Dec-2023 13:40 by rmk") @@ -2807,15 +2821,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 +2862,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 +2925,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 @@ -2965,17 +2981,21 @@ (SETQ TEDIT.EXPANDEDPARA.MENU (\TEXTMENU.DOC.CREATE TEDIT.PARAMENU.SPEC]) (\TEDIT.EXPANDEDPARA.MENU - [LAMBDA (STREAM) (* ; "Edited 27-Feb-2024 07:53 by rmk") + [LAMBDA (STREAM) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 27-Feb-2024 07:53 by rmk") (* ; "Edited 19-Sep-2023 08:51 by rmk") (* ; "Edited 20-Aug-87 16:51 by jds") (\TEDIT.MENU.START (COPYTEXTSTREAM TEDIT.EXPANDEDPARA.MENU T) - (\TEDIT.PRIMARYW (TEXTOBJ STREAM)) + (\TEDIT.PRIMARYPANE (TEXTOBJ STREAM)) "Paragraph-Looks Menu" (HEIGHTIFWINDOW 141 T) 'PARALOOKS]) (\TEDIT.APPLY.PARALOOKS - [LAMBDA (OBJ SEL W) (* ; "Edited 20-Mar-2024 11:04 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 18-May-2024 16:23 by rmk") + (* ; "Edited 12-May-2024 20:58 by rmk") + (* ; "Edited 20-Mar-2024 11:04 by rmk") + (* ; "Edited 2-May-2024 13:52 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 +3012,151 @@ (* ;; "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 TEXTOBJ) + (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 18-May-2024 17:14 by rmk") + (* ; "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 +3172,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 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 +3193,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 +3201,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 +3219,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 +3228,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 +3267,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 +3372,10 @@ (DEFINEQ (\TEDIT.SHOW.PAGEFORMATTING - [LAMBDA (OBJ SEL W) (* ; "Edited 27-Mar-2024 15:15 by rmk") + [LAMBDA (OBJ SEL MENUWINDOW) (* ; "Edited 18-May-2024 16:21 by rmk") + (* ; "Edited 2-May-2024 18:05 by rmk") + (* ; "Edited 27-Mar-2024 15:15 by rmk") + (* ; "Edited 29-Apr-2024 12:59 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 +3388,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 TEXTOBJ) (SETSEL SEL SET NIL) (* ;; "What kind of page are we looking at the specs for?") @@ -3528,7 +3558,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 +3579,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 +3590,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 +4343,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 (10471 35466 (MB.BUTTONEVENTINFN 10481 . 11703) (MB.DISPLAY 11705 . 13662) (MB.SETIMAGE +13664 . 14618) (MB.SELFN 14620 . 16363) (MB.SIZEFN 16365 . 17343) (MB.WHENOPERATEDFN 17345 . 17779) ( +MB.COPYFN 17781 . 18239) (MB.GETFN 18241 . 18979) (MB.PUTFN 18981 . 19858) (MB.SHOWSELFN 19860 . 20893 +) (MBUTTON.CREATE 20895 . 22127) (MBUTTON.CHANGENAME 22129 . 22508) (MBUTTON.FIND.BUTTON 22510 . 23533 +) (MBUTTON.FIND.NEXT.BUTTON 23535 . 24878) (MBUTTON.FIND.NEXT.FIELD 24880 . 27414) (MBUTTON.INIT 27416 + . 28332) (MBUTTON.NEXT.FIELD.AS.NUMBER 28334 . 29241) (MBUTTON.NEXT.FIELD.AS.TEXT 29243 . 29794) ( +MBUTTON.NEXT.FIELD.AS.ATOM 29796 . 30546) (MBUTTON.SET.FIELD 30548 . 32845) (MBUTTON.SET.NEXT.FIELD +32847 . 34528) (MBUTTON.SET.NEXT.BUTTON.STATE 34530 . 35010) (TEDITMENU.STREAM 35012 . 35464)) (35770 +46392 (MB.CREATE.THREESTATEBUTTON 35780 . 36947) (MB.THREESTATE.DISPLAY 36949 . 39655) ( +MB.THREESTATE.SHOWSELFN 39657 . 42580) (MB.THREESTATE.WHENOPERATEDFN 42582 . 43923) ( +MB.THREESTATEBUTTON.FN 43925 . 45330) (THREESTATE.INIT 45332 . 46390)) (46493 66367 ( +MB.CREATE.NWAYBUTTON 46503 . 50572) (MB.NB.DISPLAYFN 50574 . 52842) (MB.NB.WHENOPERATEDFN 52844 . +53992) (MB.NB.SIZEFN 53994 . 57622) (MB.NWAYBUTTON.SELFN 57624 . 59824) (MB.NWAYMENU.NEWBUTTON 59826 + . 60413) (NWAYBUTTON.INIT 60415 . 61264) (MB.NB.PACKITEMS 61266 . 63245) (MB.NWAYBUTTON.ADDITEM 63247 + . 66365)) (66621 75340 (\TEXTMENU.TOGGLE.CREATE 66631 . 68121) (\TEXTMENU.TOGGLE.DISPLAY 68123 . +70556) (\TEXTMENU.TOGGLE.SHOWSELFN 70558 . 71158) (\TEXTMENU.TOGGLE.WHENOPERATEDFN 71160 . 72510) ( +\TEXTMENU.TOGGLEFN 72512 . 73512) (\TEXTMENU.TOGGLE.INIT 73514 . 74345) (\TEXTMENU.SET.TOGGLE 74347 . +75338)) (75592 111865 (DRAWMARGINSCALE 75602 . 79061) (MARGINBAR 79063 . 85924) (MARGINBAR.CREATE +85926 . 88798) (MB.MARGINBAR.SELFN 88800 . 100816) (MB.MARGINBAR.SIZEFN 100818 . 101176) ( +MB.MARGINBAR.DISPLAYFN 101178 . 103980) (MDESCALE 103982 . 104522) (MSCALE 104524 . 104854) ( +MB.MARGINBAR.SHOWTAB 104856 . 107179) (MB.MARGINBAR.TABTRACK 107181 . 108566) (\TEDIT.TABTYPE.SET +108568 . 110978) (MARGINBAR.INIT 110980 . 111863)) (112882 128325 (\TEDIT.MENU.START 112892 . 118344) +(\TEDIT.MENU.BUTTONEVENTFN 118346 . 118830) (\TEXTMENU.DOC.CREATE 118832 . 128323)) (128635 149472 ( +\TEDITMENU.CREATE 128645 . 128941) (\TEDIT.EXPANDED.MENU 128943 . 130136) (MB.DEFAULTBUTTON.FN 130138 + . 133604) (\TEDITMENU.RECORD.UNFORMATTED 133606 . 133939) (MB.DEFAULTBUTTON.ACTIONFN 133941 . 149470) +) (149473 181370 (\TEDIT.CHARLOOKSMENU.CREATE 149483 . 151697) (\TEDIT.EXPANDEDCHARLOOKS.MENU 151699 + . 152521) (\TEDIT.APPLY.BOLDNESS 152523 . 152804) (\TEDIT.APPLY.CHARLOOKS 152806 . 155366) ( +\TEDIT.APPLY.OLINE 155368 . 155645) (\TEDIT.APPLY.UNBREAKABLE 155647 . 156045) (\TEDIT.SHOW.CHARLOOKS +156047 . 159481) (\TEDIT.NEUTRALIZE.CHARLOOKS 159483 . 161214) (\TEDIT.FILL.IN.CHARLOOKS.MENU 161216 + . 169144) (\TEDIT.NEUTRALIZE.CHARLOOKS.MENU 169146 . 171719) (\TEDIT.PARSE.CHARLOOKS.MENU 171721 . +180521) (\TEDIT.APPLY.SLOPE 180523 . 180802) (\TEDIT.APPLY.STRIKEOUT 180804 . 181087) ( +\TEDIT.APPLY.ULINE 181089 . 181368)) (181371 209232 (\TEDITPARAMENU.CREATE 181381 . 181757) ( +\TEDIT.EXPANDEDPARA.MENU 181759 . 182433) (\TEDIT.APPLY.PARALOOKS 182435 . 193899) ( +\TEDIT.SHOW.PARALOOKS 193901 . 202172) (\TEDIT.NEUTRALIZE.PARALOOKS.MENU 202174 . 207919) ( +\TEDIT.RECORD.TABLEADERS 207921 . 209230)) (209233 244179 (\TEDIT.SHOW.PAGEFORMATTING 209243 . 223058) + (\TEDITPAGEMENU.CREATE 223060 . 224099) (\TEDIT.APPLY.PAGEFORMATTING 224101 . 235584) ( +TEDIT.UNPARSE.PAGEFORMAT 235586 . 244177)) (244484 272278 (\TEDIT.MENU.INIT 244494 . 272276))))) STOP diff --git a/library/tedit/TEDIT-MENU.LCOM b/library/tedit/TEDIT-MENU.LCOM index 97d4215d8228fbc8c27931bbb1d5de11ab40eef4..5303ccccc60c04589f760a7ad409d3a9d9f69de2 100644 GIT binary patch delta 16259 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

h))Gaa}(EBF@OwFo+( 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 I^4$9W4`=S>IsgCw delta 16670 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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-PAGE b/library/tedit/TEDIT-PAGE index 63fbd2376..8297018f1 100644 --- a/library/tedit/TEDIT-PAGE +++ b/library/tedit/TEDIT-PAGE @@ -1,12 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 5-Apr-2024 08:01:17" {WMEDLEY}tedit>TEDIT-PAGE.;175 113329 +(FILECREATED "13-Jun-2024 17:26:52" {WMEDLEY}tedit>TEDIT-PAGE.;177 114144 :EDIT-BY rmk - :CHANGES-TO (FNS TEDIT.FORMAT.HARDCOPY) + :CHANGES-TO (FNS \TEDIT.FORMAT.FOOTNOTE \TEDIT.FORMATHEADING \TEDIT.FORMATTEXTBOX + \TEDIT.FORMATFOLIO) - :PREVIOUS-DATE " 4-Apr-2024 23:17:31" {WMEDLEY}tedit>TEDIT-PAGE.;174) + :PREVIOUS-DATE "10-May-2024 12:33:29" {WMEDLEY}tedit>TEDIT-PAGE.;176) (PRETTYCOMPRINT TEDIT-PAGECOMS) @@ -893,7 +894,8 @@ (SETPFS FORMATTINGSTATE CHNO CHNO]) (\TEDIT.FORMATHEADING - [LAMBDA (TEXTOBJ PRSTREAM FORMATTINGSTATE PAGEREGION) (* ; "Edited 17-Mar-2024 00:24 by rmk") + [LAMBDA (TEXTOBJ PRSTREAM FORMATTINGSTATE PAGEREGION) (* ; "Edited 13-Jun-2024 17:14 by rmk") + (* ; "Edited 17-Mar-2024 00:24 by rmk") (* ; "Edited 15-Mar-2024 19:23 by rmk") (* ; "Edited 13-Mar-2024 09:00 by rmk") (* ; "Edited 6-Mar-2024 13:09 by rmk") @@ -938,8 +940,8 @@ (* ;; "Format the next line from HEADINGTEXTOBJ pieces") - (SETQ LINE (\TEDIT.FORMATLINE HEADINGTEXTOBJ CHNO NIL REGION PRSTREAM - FORMATTINGSTATE)) + (SETQ LINE (\TEDIT.FORMATLINE (FGETTOBJ HEADINGTEXTOBJ STREAMHINT) + CHNO NIL REGION PRSTREAM FORMATTINGSTATE)) (SETQ FORCENEXTPAGE (EQ (CHARCODE FORM) (GETLD LINE FORCED-END))) [SETQ YBOT (COND @@ -1091,7 +1093,8 @@ 1]) (\TEDIT.FORMATTEXTBOX - [LAMBDA (TEXTOBJ PRSTREAM CHNO PAGEREGION FORMATTINGSTATE) (* ; "Edited 15-Mar-2024 19:24 by rmk") + [LAMBDA (TEXTOBJ PRSTREAM CHNO PAGEREGION FORMATTINGSTATE) (* ; "Edited 13-Jun-2024 17:15 by rmk") + (* ; "Edited 15-Mar-2024 19:24 by rmk") (* ; "Edited 19-Jan-2024 23:37 by rmk") (* ; "Edited 4-Dec-2023 12:34 by rmk") (* ; "Edited 4-Jul-2023 08:02 by rmk") @@ -1153,7 +1156,8 @@ (SETQ LINE (pop (GETPFS FORMATTINGSTATE PAGELINECACHE))) (* ;  "Format the line, noting any form-feeds") - (SETQ LINE (\TEDIT.FORMATLINE TEXTOBJ CHNO LINE REGION PRSTREAM FORMATTINGSTATE)) + (SETQ LINE (\TEDIT.FORMATLINE (FGETTOBJ TEXTOBJ STREAMHINT) + CHNO LINE REGION PRSTREAM FORMATTINGSTATE)) (SETQ FORCENEXTPAGE (AND (EQ (CHARCODE FORM) (FGETLD LINE FORCED-END)) 'USERBREAK)) @@ -1315,7 +1319,9 @@ FORMATTINGSTATE FINAL-CHNO)))]) (\TEDIT.FORMATFOLIO - [LAMBDA (TEXTOBJ PRSTREAM FORMATTINGSTATE PAGEREGION) (* ; "Edited 15-Mar-2024 19:24 by rmk") + [LAMBDA (TEXTOBJ PRSTREAM FORMATTINGSTATE PAGEREGION) (* ; "Edited 13-Jun-2024 17:15 by rmk") + (* ; "Edited 10-May-2024 12:32 by rmk") + (* ; "Edited 15-Mar-2024 19:24 by rmk") (* ; "Edited 13-Mar-2024 09:00 by rmk") (* ; "Edited 19-Jan-2024 23:28 by rmk") (* ; "Edited 18-Jan-2024 17:04 by rmk") @@ -1356,13 +1362,13 @@ LOOKS ,(LISTGET FOLIOINFO 'CHARLOOKS] (SETQ FOLIOTEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of FOLIOSTREAM)) - (TEDIT.INSERT FOLIOTEXTOBJ (CONCAT PRETEXT PAGE# POSTTEXT) + (TEDIT.INSERT FOLIOSTREAM (CONCAT PRETEXT PAGE# POSTTEXT) 1 NIL T) (bind LINE YBOT FORCENEXTPAGE (TEXTLEN _ (TEXTLEN FOLIOTEXTOBJ)) (BOTTOM _ (fetch (REGION BOTTOM) of REGION)) (CHNO _ 1) while (ILEQ CHNO TEXTLEN) until FORCENEXTPAGE - collect (SETQ LINE (\TEDIT.FORMATLINE FOLIOTEXTOBJ CHNO NIL REGION PRSTREAM - FORMATTINGSTATE)) + collect (SETQ LINE (\TEDIT.FORMATLINE (FGETTOBJ FOLIOTEXTOBJ STREAMHINT) + CHNO NIL REGION PRSTREAM FORMATTINGSTATE)) (SETQ FORCENEXTPAGE (EQ (CHARCODE FORM) (GETLD LINE FORCED-END))) (* ; "Format the next possible line") @@ -1770,7 +1776,8 @@ (DEFINEQ (\TEDIT.FORMAT.FOOTNOTE - [LAMBDA (TEXTOBJ PRSTREAM LINE REGION FORMATTINGSTATE) (* ; "Edited 15-Mar-2024 19:24 by rmk") + [LAMBDA (TEXTOBJ PRSTREAM LINE REGION FORMATTINGSTATE) (* ; "Edited 13-Jun-2024 17:13 by rmk") + (* ; "Edited 15-Mar-2024 19:24 by rmk") (* ; "Edited 13-Mar-2024 17:00 by rmk") (* ; "Edited 19-Jan-2024 23:30 by rmk") (* ; "Edited 6-May-2023 20:38 by rmk") @@ -1789,7 +1796,9 @@ (* ;; "Grab a line descriptor from the formatting list, or create a new one.") - (SETQ LINE (\TEDIT.FORMATLINE TEXTOBJ CHNO (GETPFS FORMATTINGSTATE PAGELINECACHE) + (SETQ LINE (\TEDIT.FORMATLINE (FGETTOBJ TEXTOBJ STREAMHINT) + CHNO + (GETPFS FORMATTINGSTATE PAGELINECACHE) REGION PRSTREAM FORMATTINGSTATE)) (* ;  "Format the line, noting any form-feeds") @@ -1805,15 +1814,15 @@ (RETURN (DREMOVE NIL $$VAL]) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (11920 15253 (\TEDIT.PARSE.PAGEFRAMES 11930 . 13430) (\TEDIT.PUT.PAGEFRAMES 13432 . -14256) (\TEDIT.UNPARSE.PAGEFRAMES 14258 . 15251)) (15316 31778 (TEDIT.SINGLE.PAGEFORMAT 15326 . 25544) - (TEDIT.COMPOUND.PAGEFORMAT 25546 . 26525) (TEDIT.PAGEFORMAT 26527 . 31776)) (31779 45010 ( -TEDIT.FORMAT.HARDCOPY 31789 . 42943) (TEDIT.SKIP.SPECIALCOND 42945 . 45008)) (45097 92020 ( -\TEDIT.FORMATBOX 45107 . 57887) (\TEDIT.FORMATHEADING 57889 . 61909) (\TEDIT.FORMATPAGE 61911 . 70331) - (\TEDIT.FORMATTEXTBOX 70333 . 85232) (\TEDIT.FORMATFOLIO 85234 . 89977) (\TEDIT.FORMAT.FOUNDBOX? -89979 . 92018)) (92100 94516 (TEDIT.HARDCOPY.PAGEHEADINGS 92110 . 94514)) (94625 101808 ( -TEDIT.HARDCOPY-COLUMN-END 94635 . 101806)) (101853 106794 (SCALEPAGEUNITS 101863 . 103004) ( -SCALEPAGEXUNITS 103006 . 103776) (SCALEPAGEYUNITS 103778 . 104549) (\TEDIT.PAPERHEIGHT 104551 . 105486 -) (\TEDIT.PAPERWIDTH 105488 . 106792)) (107210 110778 (ROMANNUMERALS 107220 . 110776)) (110814 113306 -(\TEDIT.FORMAT.FOOTNOTE 110824 . 113304))))) + (FILEMAP (NIL (12006 15339 (\TEDIT.PARSE.PAGEFRAMES 12016 . 13516) (\TEDIT.PUT.PAGEFRAMES 13518 . +14342) (\TEDIT.UNPARSE.PAGEFRAMES 14344 . 15337)) (15402 31864 (TEDIT.SINGLE.PAGEFORMAT 15412 . 25630) + (TEDIT.COMPOUND.PAGEFORMAT 25632 . 26611) (TEDIT.PAGEFORMAT 26613 . 31862)) (31865 45096 ( +TEDIT.FORMAT.HARDCOPY 31875 . 43029) (TEDIT.SKIP.SPECIALCOND 43031 . 45094)) (45183 92642 ( +\TEDIT.FORMATBOX 45193 . 57973) (\TEDIT.FORMATHEADING 57975 . 62125) (\TEDIT.FORMATPAGE 62127 . 70547) + (\TEDIT.FORMATTEXTBOX 70549 . 85616) (\TEDIT.FORMATFOLIO 85618 . 90599) (\TEDIT.FORMAT.FOUNDBOX? +90601 . 92640)) (92722 95138 (TEDIT.HARDCOPY.PAGEHEADINGS 92732 . 95136)) (95247 102430 ( +TEDIT.HARDCOPY-COLUMN-END 95257 . 102428)) (102475 107416 (SCALEPAGEUNITS 102485 . 103626) ( +SCALEPAGEXUNITS 103628 . 104398) (SCALEPAGEYUNITS 104400 . 105171) (\TEDIT.PAPERHEIGHT 105173 . 106108 +) (\TEDIT.PAPERWIDTH 106110 . 107414)) (107832 111400 (ROMANNUMERALS 107842 . 111398)) (111436 114121 +(\TEDIT.FORMAT.FOOTNOTE 111446 . 114119))))) STOP diff --git a/library/tedit/TEDIT-PAGE.LCOM b/library/tedit/TEDIT-PAGE.LCOM index 72910bf2e50a01a6144aced5730e2d192f1b515d..d46b85200c1824e6986abcd0090bee07aeba464b 100644 GIT binary patch delta 1140 zcmZuwPfQb881I0q(ltr|6%EUNj@nSu)|ofc_hx2Su(q!-(9UaSrYNLJst}8c5>_|6 zi5sJF!@uG7J~bi`wtOn{qhVk+w55 z>C%KxQ)`lz1wa%57##!6KrrEn}TVtRD84A$;gqRiKQ(g<7j22sT$k+}|Q7`G*IiIGL8rnBkeosn* z2V)F{^dNOv4zOxM!AUYFi6CxZNM{nB4{?Ga$#MhYLxn;jm!nQf#5EoGgTWnpKqva= zxQ<2nN?ccr<$7IF`Q5_yM$ilcydIX%q#PeKY1Ga+a#H^E=3 zh;Y{m6G2~N^;z+!PSVsW!sqVFyT5)Y+@x@Ls|tLh)dG%yws^m zJ^Xg(J*k(QUAul1zPilh%Edn6tzy@&(ldUqOKG{v+CoD+g@-P(*2d~y5mxvOubIE= z`fDqynJ~hnGI_AnBu()}_owD_&K+lc)i*CgaBA^s@u0wN_wwyGv!NHWQ>DIOH6}pC h&jl%$W?4T4q6++v~Cy$_SgIp_P%_vL*5 zJ>fPVbHASof*emTRpW?967Xu07m@;Ay`r9wV-Sb{YBdFv6x5_BMBqYo{^Iq;rG=~W zWtjhIsruvhNuV!6p&~3?gGi>3&BB+!L?RJ^^7$KV`m2mM5(|uEtgNX!X4*9khw zy+8cNMma?P854(|FZAE}&fUk>0}%K&`%av{K&-k-=ywyj|a`lH)r)n}3smKHmt!DwuQWEC?9W zxA7Z61X;^A4KuGhR?a032&&{QC)T<{=8(_#jnNRpHFdnH)ep(uFb;EGTJ7q{&y-1W zcWZ5XlajG$X>_~(UaPPTiXuTVbJlc74io`H(bkErBal@IGTC(A1sO}AliV4Q6%C5% zT+Xx&))x`bhsNNLgwe;gq%ib;TjG^Za8c9fGcMdGstV+%NFi(3E{Hs?jjyi=ZEkoZ zx7P$2GM2-nXlk2(O;#Z@>*jN&4w}eTm}y6!vg{u~V-gB^)0t!;nE_Q3KF_H<^Tr5Q zT)-HAE@R9e+>MnM3QMRpioSsHGT7#67Zj;gRG5@~S+dr~D`Lh=28e4D7D18SV1HOd zg12>2=KR%u`tKOf!>K;bpo6J(u1p`KzU%UCk%+fELtmxFxd${d!3TdK$D^e|7M$B8 z+}AiMl9k$ckSje9@6Nzcy>r^y^%m{F z>}KU@6fVEHUz(sB`NFq<&PM;=tW{Mc3;207nNd^8f$< diff --git a/library/tedit/TEDIT-SCREEN b/library/tedit/TEDIT-SCREEN index f24afffdc..6e9c9bc20 100644 --- a/library/tedit/TEDIT-SCREEN +++ b/library/tedit/TEDIT-SCREEN @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "20-Mar-2024 11:07:35" {WMEDLEY}tedit>TEDIT-SCREEN.;645 189050 +(FILECREATED "25-Jun-2024 18:37:55" {WMEDLEY}tedit>TEDIT-SCREEN.;724 187534 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.DISPLAYLINE \TEDIT.RAISE.LINES) + :CHANGES-TO (VARS TEDIT-SCREENCOMS) - :PREVIOUS-DATE "20-Mar-2024 07:27:05" {WMEDLEY}tedit>TEDIT-SCREEN.;644) + :PREVIOUS-DATE "25-Jun-2024 15:45:00" {WMEDLEY}tedit>TEDIT-SCREEN.;723) (PRETTYCOMPRINT TEDIT-SCREENCOMS) @@ -18,6 +18,7 @@ (RECORDS LINEDESCRIPTOR) (I.S.OPRS inlines backlines) (MACROS GETLD FGETLD SETLD FSETLD SETYPOS LINKLD)) + (MACROS \TEDIT.PLINE.LCHARLIM) (MACROS HCSCALE HCUNSCALE) (GLOBALVARS TEDIT.DONT.BREAK.CHARS TEDIT.DONT.LAST.CHARS) (ALISTS (CHARACTERNAMES EM-DASH SOFT-HYPHEN NONBREAKING-HYPHEN @@ -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.UPDATE.LINES \TEDIT.CREATEPLINE + \TEDIT.LINES.BELOW \TEDIT.LOWER.LINES \TEDIT.RAISE.LINES \TEDIT.VALID.LINES + \TEDIT.LASTVALIDLINE \TEDIT.NEXTVALIDLINE \TEDIT.CLEARPANE.BELOW.LINE \TEDIT.INSERTLINE + \TEDIT.INSURE.NEXTLINE \TEDIT.LINE.BOTTOM \TEDIT.NCONC.LINES))) (DECLARE%: EVAL@COMPILE DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE @@ -153,8 +153,8 @@  "Was LDOBJ: The object which lies behind this line of text, for updating, etc.") LFMTSPEC (* ;  "The format spec for this line's paragraph (eventually)") - (LDIRTY FLAG) (* ; - "T if this line has changed since it was last formatted.") + (NIL FLAG) (* ; + "Was LDIRTY: T if this line has changed since it was last formatted.") (NIL FLAG) (* ; "Was FORCED-END flag") (DELETED FLAG) (* ; "T if this line has been completely deleted since it was last formatted or displayed. (Used by deletion routines to detect garbage lines)") (LHASPROT FLAG) (* ; @@ -174,7 +174,7 @@ (LTRUEYBOT (IDIFFERENCE (FGETLD DATUM YBASE) (FGETLD DATUM LTRUEDESCENT] LHEIGHT _ 0 LTRUEASCENT _ 0 LTRUEDESCENT _ 0 LCHARLIM _ 1000000 NEXTLINE _ NIL PREVLINE _ - NIL LDIRTY _ NIL YBOT _ 0 YBASE _ 0 LEFTMARGIN _ 0 DELETED _ NIL) + NIL YBOT _ 0 YBASE _ 0 LEFTMARGIN _ 0 DELETED _ NIL) ) (/DECLAREDATATYPE 'LINEDESCRIPTOR @@ -254,6 +254,12 @@ ) (DECLARE%: EVAL@COMPILE +(PUTPROPS \TEDIT.PLINE.LCHARLIM MACRO ((PANE CHNO) + (FSETLD (PLINES PANE) + LCHARLIM CHNO))) +) +(DECLARE%: EVAL@COMPILE + (PUTPROPS HCSCALE MACRO [OPENLAMBDA (SCALE ITEM) (CL:IF (LISTP ITEM) (for I in ITEM collect (FIXR (FTIMES SCALE ITEM))) @@ -431,7 +437,8 @@ (DEFINEQ (\TEDIT.LINEDESCRIPTOR.DEFPRINT - [LAMBDA (LINE STREAM) (* ; "Edited 2-Dec-2023 23:05 by rmk") + [LAMBDA (LINE STREAM) (* ; "Edited 10-May-2024 00:27 by rmk") + (* ; "Edited 2-Dec-2023 23:05 by rmk") (* ; "Edited 4-Oct-2023 21:18 by rmk") (* ; "Edited 3-Jul-2023 22:02 by rmk") (* ; "Edited 22-May-2023 14:42 by rmk") @@ -450,10 +457,7 @@ " FE" ""))) (SETQ LOC (LOC LINE)) - (CONS (CONCAT "{L" (CL:IF (GETLD LINE LDIRTY) - "D" - "") - ":" INFO " " (CAR LOC) + (CONS (CONCAT "{L" ":" INFO " " (CAR LOC) "/" (CDR LOC) "}"]) @@ -614,7 +618,11 @@ (DEFINEQ (\TEDIT.FORMATLINE - [LAMBDA (TEXTOBJ CH#1 LINE REGION IMAGESTREAM FORMATTINGSTATE) + [LAMBDA (TSTREAM CH#1 LINE REGION IMAGESTREAM FORMATTINGSTATE) + (* ; "Edited 25-Jun-2024 15:43 by rmk") + (* ; "Edited 13-Jun-2024 17:26 by rmk") + (* ; "Edited 21-May-2024 14:45 by rmk") + (* ; "Edited 10-May-2024 12:11 by rmk") (* ; "Edited 17-Mar-2024 00:27 by rmk") (* ; "Edited 15-Mar-2024 19:43 by rmk") (* ; "Edited 14-Mar-2024 12:53 by rmk") @@ -626,10 +634,10 @@ (* ; "Edited 28-Oct-2023 13:14 by rmk") (* ; "Edited 24-Jul-2023 23:13 by rmk") (* ; "Edited 23-Oct-2022 09:11 by rmk") - (DECLARE (SPECVARS IMAGESTREAM FORMATTINGSTATE)) - (* ;; - "Format the next line of text starting at CH#1. Return the LINEDESCRIPTOR; reusing LINE if given.") + (* ;; "Format the next line of text starting at CH#1. Return the LINE") + + (* ;; "DESCRIPTOR; reusing LINE if given.") (* ;; "The SPECVARS are accessed and reset under the subfunctions, particularly \FORMATLINE.UPDATELOOKS. IMAGESTREAM and FORMATTINGSTATE are passed only for hardcopy. ") @@ -659,16 +667,8 @@ (* ;; "If a (visible) word crosses the margin |, then the line ends at the space just before the beginning of that word. For x==yz==ab|cd, LCHARLIM goes to the space before a, LXLIM is its right edge. The justifier will leave the spaces between z and a alone, but might fatten the spaces between x and y based on the SPACELEFT between z and margin |. The spaces after z OVERHANG. An EOL or FORM force a line-end and also overhang with along with any immediately preceding spaces--they are essentially treated as line-breaking spaces.") - (* ;; " abc123#45|6 => abc[123]#$| (456 on next line--leading white space only after EOL)") - - (CL:UNLESS LINE - - (* ;; "Not needed until the end, but then we might not get the starting values for WRIGHT and WBOTTOM, if those change from piece to piece--check this.") - - [SETQ LINE (create LINEDESCRIPTOR - YBOT _ (SUB1 (ffetch (TEXTOBJ WBOTTOM) of TEXTOBJ]) - (PROG ((TSTREAM (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ)) - (THISLINE (ffetch (TEXTOBJ THISLINE) of TEXTOBJ)) + (DECLARE (SPECVARS TSTREAM)) (* ; "For lower image objects?") + (PROG ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) (OFFSET 0) (TRUEASCENT -1) (TRUEDESCENT -1) @@ -679,11 +679,18 @@ (OVERHANG 0) (SPACELEFT 0) (TX 0) - LINETYPE DISPLAYSTREAM WIDTH WMARGIN SCALE FMTSPEC RIGHTMARGIN TABSPEC KERN FIRSTWHITEX - FIRSTWHITESLOT PC CHARSLOT PREVSP 1STLN PROTECTED CHNOB FORCED-END CHNO LX1 TX TXB FONT - CHARSLOTB TABPENDING PREVHYPH PREVDHYPH START-OF-PIECE UNBREAKABLE JUSTIFIED) + TEXTOBJ THISLINE LINETYPE DISPLAYSTREAM WIDTH WMARGIN SCALE FMTSPEC RIGHTMARGIN TABSPEC + KERN FIRSTWHITEX FIRSTWHITESLOT PC CHARSLOT PREVSP 1STLN PROTECTED CHNOB FORCED-END CHNO + LX1 TX TXB FONT CHARSLOTB TABPENDING PREVHYPH PREVDHYPH START-OF-PIECE UNBREAKABLE + JUSTIFIED OLDPIECE OLDPCCHARSLEFT OLDCARETLOOKS) (DECLARE (SPECVARS LINETYPE CHARSLOT CHNO OFFSET ASCENTC DESCENTC FONT START-OF-PIECE KERN UNBREAKABLE)) + (CL:UNLESS LINE + + (* ;; "Not needed until the end, but then we might not get the starting values for WRIGHT and WBOTTOM, if those change from piece to piece--check this.") + + (SETQ LINE (create LINEDESCRIPTOR))) + (SETQ THISLINE (FGETTOBJ TEXTOBJ THISLINE)) (* ;;  "CHNO = Current character # in the text, CHNOB is the character at the last potential break") @@ -712,6 +719,10 @@ (* ;; "Start with LASTCHARSLOT just so STL debugger will show everything before the true end has been determined.") + (SETQ OLDCARETLOOKS (FGETTOBJ TEXTOBJ CARETLOOKS)) (* ; + "Restore at end--BIN changes things") + (SETQ OLDPIECE (ffetch (TEXTSTREAM PIECE) of TSTREAM)) + (SETQ OLDPCCHARSLEFT (ffetch (TEXTSTREAM PCCHARSLEFT) of TSTREAM)) (SETQ LINETYPE (if IMAGESTREAM then 'TRUEHARDCOPY else (SETQ DISPLAYSTREAM (WINDOWPROP (CAR (FGETTOBJ TEXTOBJ \WINDOW)) @@ -794,9 +805,8 @@ (* ;; "The LOOKSUPDATEFN will initialize the character looks of the starting piece PC. It is also called at piece boundaries to reset the character-looks variables when BIN (=\TEXTBIN) moves from piece to piece.") - (freplace (TEXTSTREAM LOOKSUPDATEFN) of TSTREAM with (FUNCTION - \TEDIT.FORMATLINE.UPDATELOOKS)) - (freplace (TEXTSTREAM CURRENTLOOKS) of TSTREAM with NIL) + (freplace (TEXTSTREAM APPLYLOOKSUPDATEFN) of TSTREAM with T) + (FSETTOBJ TEXTOBJ CARETLOOKS NIL) (* ; "Initialize variables to PC looks.") (SETQ CHARSLOT (FIRSTCHARSLOT THISLINE)) (\TEDIT.INSTALL.PIECE TSTREAM PC (- CH#1 START-OF-PIECE)) @@ -839,12 +849,9 @@ (CHARCODE FORM) (CHARCODE EOL)) DX) - (CL:UNLESS (EQ CH (CHARCODE Meta,EOL)) - (SETQ FORCED-END (CL:IF (MEMB CH (CHARCODE (LF CR))) - (CHARCODE EOL) - CH))) - (* ; - "Remember whether EOL, FORM, but not") + (SETQ FORCED-END (CL:IF (MEMB CH (CHARCODE (LF CR))) + (CHARCODE EOL) + CH)) (FORCEBREAK) (* ;; "The break does not set the ascent/descent, the rest of the line does that. If the line is empty except for an EOL, the font's ASCENTC is stuck in at the end. This is important for hardcopydisplay.") @@ -992,7 +999,8 @@ (* ;; "We've seen at least one real character, line is not empty, but no good candidate break point. Back up to the last legal break (or add a real hyphenator). ") - (CL:UNLESS (\TEDIT.FORMATLINE.LASTLEGAL) + (CL:UNLESS (\TEDIT.FORMATLINE.LASTLEGAL THISLINE CH#1 LINETYPE + IMAGESTREAM) (* ;; "Didn't find one, the offender protrudes on this line") @@ -1091,7 +1099,7 @@ (* ;; "End of character loop. ") (freplace (THISLINE NEXTAVAILABLECHARSLOT) of THISLINE with (NEXTCHARSLOT CHARSLOT)) - (freplace (TEXTSTREAM LOOKSUPDATEFN) of TSTREAM with NIL) + (freplace (TEXTSTREAM APPLYLOOKSUPDATEFN) of TSTREAM with NIL) (* ;; "Fix up last tab?") @@ -1180,6 +1188,13 @@ WMARGIN) (add (FGETLD LINE LXLIM) WMARGIN) + + (* ;; "Restore TSTREAM to its condition before any BIN's we might have done.") + + (FSETTOBJ TEXTOBJ CARETLOOKS OLDCARETLOOKS) + (CL:WHEN OLDPIECE + (\TEDIT.INSTALL.PIECE TSTREAM OLDPIECE (IDIFFERENCE (PLEN OLDPIECE) + OLDPCCHARSLEFT))) (RETURN LINE]) (\TEDIT.FORMATLINE.SETUP @@ -1542,7 +1557,9 @@ PREVSP]) (\TEDIT.FORMATLINE.EMPTY - [LAMBDA (TEXTOBJ CH#1 LINE) (* ; "Edited 15-Mar-2024 22:00 by rmk") + [LAMBDA (TEXTOBJ CH#1 LINE) (* ; "Edited 25-Jun-2024 14:51 by rmk") + (* ; "Edited 10-May-2024 00:24 by rmk") + (* ; "Edited 15-Mar-2024 22:00 by rmk") (* ; "Edited 26-Jan-2024 11:08 by rmk") (* ; "Edited 6-Dec-2023 20:15 by rmk") (* ; "Edited 3-Dec-2023 19:41 by rmk") @@ -1561,23 +1578,20 @@ (* ;; "Original code asked for the piece at TEXTLEN (last piece?) to get its looks, but those looks would be the TEXTOBJ default looks anyway. ") (CL:UNLESS LINE - [SETQ LINE (create LINEDESCRIPTOR - RIGHTMARGIN _ (FGETTOBJ TEXTOBJ WRIGHT) - YBOT _ (SUB1 (FGETTOBJ TEXTOBJ WBOTTOM]) + (SETQ LINE (create LINEDESCRIPTOR + RIGHTMARGIN _ (FGETTOBJ TEXTOBJ WRIGHT)))) (\DTEST LINE 'LINEDESCRIPTOR) (LET (CHARSLOT FONT TRUEASCENT TRUEDESCENT LM FMTSPEC (THISLINE (FGETTOBJ TEXTOBJ THISLINE))) - (\TEDIT.FORMATLINE.SETUP TEXTOBJ NIL LINE (WINDOWPROP (CAR (FGETTOBJ TEXTOBJ \WINDOW)) + (\TEDIT.FORMATLINE.SETUP TEXTOBJ NIL LINE (WINDOWPROP (\TEDIT.PRIMARYPANE TEXTOBJ) 'DSP)) (SETQ FMTSPEC (FGETLD LINE LFMTSPEC)) (SETQ CHARSLOT (FIRSTCHARSLOT THISLINE)) (replace (THISLINE NEXTAVAILABLECHARSLOT) of THISLINE with (NEXTCHARSLOT CHARSLOT)) (freplace (THISLINE DESC) of THISLINE with LINE) - (* ;; "Get looks from the TSTREAM, so that \DISPLAYLINE works. ") + (* ;; "Get the current caret looks, so that \DISPLAYLINE works. ") - (FILLCHARSLOT CHARSLOT NIL (OR (fetch (TEXTSTREAM CURRENTLOOKS) of (FGETTOBJ TEXTOBJ - STREAMHINT)) - (FGETTOBJ TEXTOBJ CARETLOOKS) + (FILLCHARSLOT CHARSLOT NIL (OR (FGETTOBJ TEXTOBJ CARETLOOKS) (FGETTOBJ TEXTOBJ DEFAULTCHARLOOKS))) (* ;; "Not sure what might break if even an emptyTHISLINE doesn't start with charlooks. ") @@ -1601,7 +1615,6 @@ (SETQ LX1 LM) (SETQ LXLIM LM) (SETQ FORCED-END (CHARCODE EOL)) - (SETQ LDIRTY NIL) (SETQ LHASPROT NIL) (SETQ LFMTSPEC FMTSPEC) (SETQ LEFTMARGIN LM) @@ -1620,7 +1633,8 @@ LINE]) (\TEDIT.FORMATLINE.UPDATELOOKS - [LAMBDA (TSTREAM PC) (* ; "Edited 17-Mar-2024 11:08 by rmk") + [LAMBDA (TSTREAM PC) (* ; "Edited 9-May-2024 10:28 by rmk") + (* ; "Edited 17-Mar-2024 11:08 by rmk") (* ; "Edited 15-Mar-2024 19:34 by rmk") (* ; "Edited 24-Dec-2023 22:54 by rmk") (* ; "Edited 23-Dec-2023 20:37 by rmk") @@ -1658,8 +1672,10 @@ (* ;; "If the looks are the same as current looks, we don't need to change anything. APPLY STYLES AT PIECE CREATION??") (SETQ PLOOKS (PLOOKS PC)) - (CL:UNLESS (EQ PLOOKS (ffetch (TEXTSTREAM CURRENTLOOKS) of TSTREAM)) - (freplace (TEXTSTREAM CURRENTLOOKS) of TSTREAM with PLOOKS) + (CL:UNLESS (EQ PLOOKS (FGETTOBJ (ffetch (TEXTSTREAM TEXTOBJ) of TSTREAM) + CARETLOOKS)) + (FSETTOBJ (ffetch (TEXTSTREAM TEXTOBJ) of TSTREAM) + CARETLOOKS PLOOKS) (* ;; "") @@ -1686,7 +1702,7 @@ (* ;; "") - (SETQ UNBREAKABLE (fetch (CHARLOOKS CLUNBREAKABLE) of PLOOKS)) + (SETQ UNBREAKABLE (ffetch (CHARLOOKS CLUNBREAKABLE) of PLOOKS)) (SETQ KERN (LISTGET (ffetch (CHARLOOKS CLUSERINFO) of PLOOKS) 'KERN)) @@ -1716,7 +1732,8 @@ PC]) (\TEDIT.FORMATLINE.LASTLEGAL - [LAMBDA NIL (* ; "Edited 1-Feb-2024 16:51 by rmk") + [LAMBDA (THISLINE CH#1 LINETYPE IMAGESTREAM) (* ; "Edited 25-Jun-2024 15:44 by rmk") + (* ; "Edited 1-Feb-2024 16:51 by rmk") (* ; "Edited 2-Jul-2023 14:39 by rmk") (* ; "Edited 17-Mar-2023 05:36 by rmk") @@ -1729,8 +1746,7 @@ (* ;; "Once we find the break point, we have to sweep through from the beginning in order to accurately know the lines ascent and descent at the break point.") - (DECLARE (USEDFREE THISLINE TX CHNO CHARSLOT TRUEASCENT TRUEDESCENT LINETYPE IMAGESTREAM - TABPENDING)) + (DECLARE (USEDFREE TX CHNO CHARSLOT TRUEASCENT TRUEDESCENT TABPENDING)) (LET [(BESTSLOT (find SLOT PCS backcharslots (PREVCHARSLOT! CHARSLOT) suchthat (CL:WHEN (AND TABPENDING (EQ SLOT (fetch (PENDINGTAB PTCHARSLOT) of TABPENDING))) @@ -1768,7 +1784,10 @@ T)]) (\TEDIT.LINES.ABOVE - [LAMBDA (TEXTOBJ CHN YBOTN) (* ; "Edited 15-Mar-2024 19:22 by rmk") + [LAMBDA (TSTREAM CHN YBOTN PREVBREAKCHNO) (* ; "Edited 13-Jun-2024 17:03 by rmk") + (* ; "Edited 18-May-2024 10:10 by rmk") + (* ; "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,27 +1796,27 @@ (* ;; "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)) (* ; - "CHNO is the first char of the top line") + (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 (OR PREVBREAKCHNO (\TEDIT.PREVIOUS.LINEBREAK TSTREAM CHN))) + (* ; "The end-of-line character") + (SETQ L1 (\TEDIT.FORMATLINE TSTREAM CHNO)) (* ; "A line containiing only the EOL") (SETQ LN L1) - (SETQ CHNO (ADD1 (GETLD L1 LCHARLIM))) until (IGREATERP CHNO CHN) - do (SETQ LINE (\TEDIT.FORMATLINE TEXTOBJ CHNO)) (* ; - "The line immediately after a preceding known break") + (SETQ CHNO (ADD1 (FGETLD L1 LCHARLIM))) until (IGREATERP CHNO CHN) + do (SETQ LINE (\TEDIT.FORMATLINE TSTREAM CHNO)) (LINKLD LN LINE) (SETQ LN LINE) - (SETQ CHNO (ADD1 (GETLD LINE LCHARLIM))) finally + (SETQ CHNO (ADD1 (FGETLD LINE LCHARLIM))) finally - (* ;; + (* ;;  "Fill in the YBOT's, given that YBOTN is the YBOT of LN.") - (for L (YB _ YBOTN) backlines LN - do (SETYPOS L YB) - (add YB (GETLD L LHEIGHT))) - (RETURN (LIST L1 LN]) + (for L (YB _ YBOTN) backlines LN + do (SETYPOS L YB) + (add YB (GETLD L LHEIGHT))) + (RETURN (LIST L1 LN]) ) (RPAQ? TEDIT.LINELEADING.BELOW NIL) @@ -1866,7 +1885,9 @@ (DEFINEQ (\TEDIT.DISPLAYLINE - [LAMBDA (TEXTOBJ LINE PANE) (* ; "Edited 20-Mar-2024 10:57 by rmk") + [LAMBDA (TEXTOBJ LINE PANE) (* ; "Edited 13-Jun-2024 17:08 by rmk") + (* ; "Edited 10-May-2024 00:24 by rmk") + (* ; "Edited 20-Mar-2024 10:57 by rmk") (* ; "Edited 15-Mar-2024 22:04 by rmk") (* ; "Edited 24-Dec-2023 22:05 by rmk") (* ; "Edited 2-Dec-2023 11:34 by rmk") @@ -1928,7 +1949,8 @@ (CL:UNLESS (EQ LINE (fetch (THISLINE DESC) of THISLINE)) (* ;  "No image cache -- re-format and display") - (\TEDIT.FORMATLINE TEXTOBJ (FGETLD LINE LCHAR1) + (\TEDIT.FORMATLINE (FGETTOBJ TEXTOBJ STREAMHINT) + (FGETLD LINE LCHAR1) LINE)) (MOVETO (FGETLD LINE LX1) (FGETLD LINE DESCENT) @@ -2042,7 +2064,6 @@ 6 6 'PAINT)) (BLTSHADE WHITESHADE WINDOWDS 0 (FGETLD LINE YBASE) 6 6 'PAINT)) - (FSETLD LINE LDIRTY NIL) LINE]) (\TEDIT.DISPLAYLINE.TABS @@ -2171,30 +2192,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 +2208,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,96 +2223,52 @@ DY]) (\TEDIT.PREVIOUS.LINEBREAK - [LAMBDA (TEXTOBJ CHNO) (* ; "Edited 17-Mar-2024 12:05 by rmk") + [LAMBDA (TSTREAM CHNO) (* ; "Edited 18-May-2024 18:53 by rmk") + (* ; "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") (* ; "Edited 28-Mar-2023 09:03 by rmk") (* ; "Edited 26-Mar-2023 12:55 by rmk") - (* ;; "Returns the character number of the first character at or before CHNO that would follow a forced line-end or a paragraph end. Line-formatting from that character onward would be consistent with any earlier line-breaks (and wouldn't change if earlier breaks changed).") + (* ;; "Returns the character number of the first character at or before CHNO that FOLLOWS a forced line-end or a paragraph end. Line-formatting from that character onward would be consistent with any earlier line-breaks (and wouldn't change if earlier breaks changed).") (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)]) - -(\TEDIT.FILLPANE - [LAMBDA (PREVLINE TEXTOBJ PANE) (* ; "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") - (* ; "Edited 24-Dec-2023 22:00 by rmk") - (* ; "Edited 2-Dec-2023 23:05 by rmk") - (* ; "Edited 3-Nov-2023 12:03 by rmk") - (* ; "Edited 17-Sep-2023 14:51 by rmk") - (* ; "Edited 8-May-2023 21:59 by rmk") - (* ; "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.") - - (LET (LINE) - - (* ;; "") - - (* ;; "Find the first on-screen line after PREVLINE, if any. If the scrolling and other algorithms are tidy, we shouldn't expect to find any lines hanging around above the pane. If none, start with PREVLINE, maybe the dummy. ") - - (SETQ LINE (find L (PHEIGHT _ (fetch HEIGHT of (DSPCLIPPINGREGION NIL PANE))) - inlines (GETLD PREVLINE NEXTLINE) suchthat (ILESSP (FGETLD L YBOT) - PHEIGHT))) - - (* ;; "") - - (CL:WHEN LINE - (SETQ PREVLINE (GETLD LINE PREVLINE))) - - (* ;; "") - - (* ;; "Format and display any lines that are still needed to fill out the pane. ") - - (SETQ PREVLINE (\TEDIT.LINES.BELOW PREVLINE NIL PANE TEXTOBJ)) - - (* ;; "") - - (CL:WHEN (\TEDIT.INSURE.TRAILING.LINE TEXTOBJ PREVLINE) - (\TEDIT.DISPLAYLINE TEXTOBJ (GETLD PREVLINE NEXTLINE) - PANE)) - - (* ;; "") - - (\TEDIT.CLEARPANE.BELOW.LINE PREVLINE PANE TEXTOBJ) - (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE) - (FSETTOBJ TEXTOBJ TXTNEEDSUPDATE NIL]) + (CL:IF NCHARS + (ADD1 (IDIFFERENCE CHNO NCHARS)) + 1)]) (\TEDIT.UPDATE.LINES [LAMBDA (TEXTOBJ REASON FIRSTCHANGEDCHNO NCHARSCHANGED DONTDISPLAY) + (* ; "Edited 24-Jun-2024 21:44 by rmk") + (* ; "Edited 16-Jun-2024 23:56 by rmk") + (* ; "Edited 12-Jun-2024 23:49 by rmk") + (* ; "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") - (* ; "Edited 16-Dec-2023 13:43 by rmk") (* ; "Edited 4-Dec-2023 20:37 by rmk") (* ; "Edited 22-Jun-2023 15:50 by rmk") (* ; "Edited 11-Jun-2023 18:34 by rmk") @@ -2322,27 +2279,48 @@ (* ;; "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.") - (for PANE VALIDS NEXTVALID LASTGAPLINE DELTA inpanes TEXTOBJ as VALIDS - in (\TEDIT.VALID.LINES TEXTOBJ FIRSTCHANGEDCHNO NCHARSCHANGED REASON) when VALIDS + [for PANE VALIDS LASTVALID NEXTVALID GAPLINES LASTGAPLINE DELTA inpanes TEXTOBJ as VALIDS + in (\TEDIT.VALID.LINES FIRSTCHANGEDCHNO NCHARSCHANGED REASON (FGETTOBJ TEXTOBJ STREAMHINT) + ) when VALIDS do - (* ;; "Create/format/display new lines between LASTVALID=(CAR VALIDS) and NEXTVALID ") + (* ;; + "Create/format/position/display new lines between LASTVALID and NEXTVALID exclusive") + (SETQ LASTVALID (CAR VALIDS)) (SETQ NEXTVALID (CDR VALIDS)) - (SETQ LASTGAPLINE (\TEDIT.LINES.BELOW (CAR VALIDS) - (AND NEXTVALID (SUB1 (FGETLD NEXTVALID LCHAR1))) - PANE TEXTOBJ DONTDISPLAY)) + (SETQ GAPLINES (\TEDIT.LINES.BELOW LASTVALID (AND NEXTVALID (SUB1 (FGETLD NEXTVALID + LCHAR1))) + PANE TEXTOBJ DONTDISPLAY)) + (CL:UNLESS GAPLINES (GO $$ITERATE)) + (CL:WHEN (IGEQ (FGETLD LASTVALID YBOT) + (FGETLD (PLINES PANE) + YBOT)) (* ; + "LASTVALID was a fake just above PANE") + (LINKLD (PLINES PANE) + (CAR GAPLINES))) + (SETQ LASTGAPLINE (CDR GAPLINES)) (LINKLD LASTGAPLINE NEXTVALID) - (* ;; "The chain that ended at LASTVALID now continues thru LASTGAPLINE to NEXVALID and below. But the Ypositions of NEXTVALID lines have not yet been adjusted, and their images have not been displayed. The top of NEXTVALID should align with the bottom of LASTGAPLINE: their Y positions are changed by DELTA. DELTA is positive if NEXTVALID is moving up (deletion ), otherwise insertion. Appearance can go either way.") + (* ;; "The chain that ended at LASTVALID now continues thru LASTGAPLINE to NEXVALID and below. But the Ypositions of NEXTVALID lines have not yet been adjusted, and their images have not been displayed. The top of NEXTVALID should align with the bottom of LASTGAPLINE: their Y positions are changed by DELTA. DELTA is positive if NEXTVALID is moving up (deletion ), otherwise insertion. Appearance or replacement changes can go can go either way.") - (if NEXTVALID + (if [AND NEXTVALID (IGEQ (FGETLD NEXTVALID YBOT) + (fetch (REGION BOTTOM) of (DSPCLIPPINGREGION NIL PANE] then (SETQ DELTA (IDIFFERENCE (FGETLD LASTGAPLINE YBOT) (FGETLD NEXTVALID YTOP))) @@ -2361,34 +2339,45 @@ (* ;; "") (if DONTDISPLAY - then (for L inlines NEXTVALID do (\TEDIT.LINE.BOTTOM L)) + then (for L inlines NEXTVALID do (\TEDIT.LINE.BOTTOM (GETLD L PREVLINE) + L)) elseif (IGREATERP DELTA 0) then - (* ;; "Deletion/appearance") + (* ;; "Deletion/change") (\TEDIT.RAISE.LINES NEXTVALID (FGETLD LASTGAPLINE YBOT) PANE TEXTOBJ) elseif (ILESSP DELTA 0) then - (* ;; - "Insertion/appearance: bitmaps of NEXTVALID can be shifted down") + (* ;; "Insertion/change: bitmaps of NEXTVALID can be shifted down") (\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))]) + else + (* ;; "No point in clearing below the last line of the document, and it takes a lot of time when printing to an append stream. But it does run the OVERFLOWFN. Is this the right situation for that function?") + + (* ;; "If NEXTVALID, it must have been below the pane, need to clear. I don't understand why it doesn't work to have \TEDIT.NEXTVALIDLINE return NIL in this case, so the BOTTOM test above is there.") + + (CL:WHEN (OR NEXTVALID (IGEQ (FGETLD LASTGAPLINE LCHARLIM) + (FGETTOBJ TEXTOBJ TEXTLEN))) + (\TEDIT.CLEARPANE.BELOW.LINE LASTGAPLINE PANE TEXTOBJ)) + (CL:WHEN (FGETLD LASTGAPLINE FORCED-END) + (\TEDIT.INSURE.NEXTLINE TEXTOBJ LASTGAPLINE])]) (\TEDIT.CREATEPLINE - [LAMBDA (TEXTOBJ PANE FIRSTLINE) (* ; "Edited 13-Mar-2024 17:02 by rmk") + [LAMBDA (TEXTOBJ PANE LCHARLIM) (* ; "Edited 21-Jun-2024 22:25 by rmk") + (* ; "Edited 19-Jun-2024 08:26 by rmk") + (* ; "Edited 17-Jun-2024 08:52 by rmk") + (* ; "Edited 13-Mar-2024 17:02 by rmk") (* ; "Edited 21-Feb-2024 23:36 by rmk") (* ; "Edited 2-Jan-2024 13:04 by rmk") (* ; "Edited 29-Dec-2023 15:48 by rmk") - (* ;; "Creates the initial dummy line PLINES for PANE. Connects it to FIRSTLINE if provided.") + (* ;; "Creates the initial dummy line PLINES for PANE. This covers all of the characters before the first character visible in PANE, which is LCHARLIM+1. LCHARLIM defaults to 0. The bottom of the dummy line is the top of PANE.") (LET (DUMMYLINE) - (* ;; "Initialize with a dummy empty first line with LCHAR1 and LCHARLIM=0 above the pane top. 0 means in particular that the LCHARLIM is just before the first character of the file (if there is one). ") + (* ;; + "Initialize with a dummy empty first line with LCHAR1 and LCHARLIM=LASTCHAR above the pane top. ") (* ;;  "1STLN and LSTLN are NIL, since we don't want to make end paragraph-boundary inferences") @@ -2398,7 +2387,7 @@ LDUMMY _ T YBOT _ (fetch HEIGHT of (DSPCLIPPINGREGION NIL PANE)) LCHAR1 _ 0 - LCHARLIM _ 0 + LCHARLIM _ (OR LCHARLIM 0) RIGHTMARGIN _ (SUB1 (FGETTOBJ TEXTOBJ WRIGHT)) LHEIGHT _ 0 LX1 _ 0 @@ -2412,42 +2401,26 @@ 1STLN _ NIL LSTLN _ NIL)) (replace (TEXTWINDOW PLINES) of PANE with DUMMYLINE)(* ; "Install PANE's new dummy line") - (LINKLD DUMMYLINE FIRSTLINE) (* ; "Link the possible first line") + (\TEDIT.INSURE.NEXTLINE TEXTOBJ DUMMYLINE) DUMMYLINE]) -(\TEDIT.FIND.DIRTYCHARS - [LAMBDA (TEXTOBJ) (* ; "Edited 4-Jan-2024 23:34 by rmk") - (* ; "Edited 2-Jan-2024 12:15 by rmk") - (* ; "Edited 2-Dec-2023 23:06 by rmk") - (* ; "Edited 3-Nov-2023 12:04 by rmk") - (* ; "Edited 8-May-2023 13:18 by rmk") - (* ; "Edited 28-Apr-2023 15:30 by rmk") - - (* ;; "Returns a pair (firstdirty . ndirties) figuring the first and maxium range of dirty characters. For programs that mark DIRTY when they modify lines. The dirty LCHAR*'s are the same in all panes where they exist.") - - (for PANE PLINES FIRSTDIRTYLINE (LASTDIRTYCHAR _ 1) inpanes (PROGN TEXTOBJ) - eachtime (SETQ PLINES (fetch (TEXTWINDOW PLINES) of PANE)) - when (SETQ FIRSTDIRTYLINE (find L inlines (GETLD PLINES NEXTLINE) - suchthat (FGETLD L LDIRTY))) - do - (* ;; "Some panes may have more lines than others--we want to get the largest dirty range.") - - [SETQ LASTDIRTYCHAR (IMAX LASTDIRTYCHAR (for L (PREV _ FIRSTDIRTYLINE) inlines - FIRSTDIRTYLINE - while (FGETLD L LDIRTY) do (SETQ PREV L) - finally (RETURN (FGETLD PREV LCHARLIM] - finally (RETURN (CL:WHEN FIRSTDIRTYLINE - (CONS (GETLD FIRSTDIRTYLINE LCHAR1) - (IDIFFERENCE (ADD1 LASTDIRTYCHAR) - (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 24-Jun-2024 21:38 by rmk") + (* ; "Edited 20-Jun-2024 16:45 by rmk") + (* ; "Edited 17-Jun-2024 09:22 by rmk") + (* ; "Edited 13-Jun-2024 17:18 by rmk") + (* ; "Edited 10-May-2024 00:20 by rmk") + (* ; "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 a pair (FIRSTNEWLINE . LASTNEWLINE) where FIRSTNEWLINE is a line that logically comes after PREVLINE (but may need to be linked in) and LASTNEWLINE is the new line just before the line containing LASTCHAR.") + + (* ;; "The line containing LASTCHAR is presumed to be valid, its bitmap can be reused without reformatting. This is the way it is used from \TEDIT.UPDATE.LINES Otherwise, it formats to the end of PANE.") (* ;; "Assumes that PREVLINE is correctly formatted and Y-positioned, and already displayed in PANE (if desired).") @@ -2455,98 +2428,60 @@ (* ;; "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 - (SETQ LASTCHAR (CL:IF LASTCHAR - (IMIN LASTCHAR (FGETTOBJ TEXTOBJ TEXTLEN)) - (FGETTOBJ TEXTOBJ TEXTLEN))) - - (* ;; "If PREVLINE is LDUMMY (= PLINES of PANE), we pretend it has an LCHARLIM one before the LCHAR1 of its nextline, otherwise 0.") - - (for L NEXT (LCHARLIM _ (CL:IF (AND (FGETLD PREVLINE LDUMMY) - (FGETLD PREVLINE NEXTLINE)) - (SUB1 (FGETLD (FGETLD PREVLINE NEXTLINE) - LCHAR1)) - (FGETLD PREVLINE LCHARLIM))) - (YBOT _ (FGETLD PREVLINE YBOT)) - (PBOTTOM _ (fetch (REGION BOTTOM) of (DSPCLIPPINGREGION NIL PANE))) inlines PREVLINE - first (CL:WHEN (OR (IGREATERP LCHARLIM LASTCHAR) - (ILEQ YBOT PBOTTOM)) - (FSETLD PREVLINE NEXTLINE NIL) (* ; "Eliminate dangling garbage") - (RETURN PREVLINE)) while (SETQ NEXT (\TEDIT.FORMATLINE TEXTOBJ (ADD1 LCHARLIM))) - do - (* ;; + (CL:UNLESS PREVLINE + (SETQ PREVLINE (PLINES PANE))) + (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))) + (for L NEXT FIRSTNEWLINE (TSTREAM _ (FGETTOBJ TEXTOBJ STREAMHINT)) + (LCHARLIM _ (FGETLD PREVLINE LCHARLIM)) + (YBOT _ (FGETLD PREVLINE YBOT)) inlines PREVLINE first (CL:WHEN (OR (IGREATERP LCHARLIM + LASTCHAR) + (ILEQ YBOT VBOTTOM)) + (FSETLD PREVLINE NEXTLINE NIL) + (* ; "Eliminate dangling garbage") + (RETURN NIL)) + while (SETQ NEXT (\TEDIT.FORMATLINE TSTREAM (ADD1 LCHARLIM))) + do + (* ;;  "L is formatted, positioned, linked, displayed. Next is the following line unless at the end.") - (LINKLD L NEXT) (* ; "Put NEXT into the iteration") - (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)) - (CL:UNLESS DONTDISPLAY (* ; + (CL:UNLESS FIRSTNEWLINE (SETQ FIRSTNEWLINE NEXT)) + (LINKLD L NEXT) (* ; "Put NEXT into the iteration") + (SETQ YBOT (\TEDIT.LINE.BOTTOM L NEXT)) (* ; "Link needed for Y position") + (SETQ LCHARLIM (FGETLD NEXT LCHARLIM)) + (CL:WHEN (OR (IGREATERP LCHARLIM LASTCHAR) + (ILESSP YBOT VBOTTOM)) + + (* ;; "Overshot, flush line. There may be an inconsistency with \TEDIT.RAISE.LINES when YBOT is 0. With ILESSP here the line is visible and we go around once more, ILEQ would suppress it. ") + + (if (AND (IGEQ LCHARLIM (FGETTOBJ TEXTOBJ TEXTLEN)) + (FGETLD L FORCED-END)) + then (\TEDIT.INSURE.NEXTLINE TEXTOBJ L) + else (FSETLD L NEXTLINE NIL)) + (RETURN (CONS FIRSTNEWLINE L))) + (CL:UNLESS DONTDISPLAY (* ;  "Cached formatting is good for display") - (\TEDIT.DISPLAYLINE TEXTOBJ NEXT PANE)) finally - - (* ;; "Ran out of lines") - - (RETURN (OR L PREVLINE))))]) - -(\FORMAT.GAP.LINES - [LAMBDA (VALIDS PANE TEXTOBJ DONTDISPLAY) (* ; "Edited 15-Mar-2024 19:23 by rmk") - (* ; "Edited 4-Dec-2023 20:42 by rmk") - (* ; "Edited 20-Nov-2023 10:47 by rmk") - (* ; "Edited 3-Nov-2023 12:05 by rmk") - (* ; "Edited 15-May-2023 17:31 by rmk") - (* ; "Edited 28-Apr-2023 17:35 by rmk") - (* ; "Edited 26-Apr-2023 18:39 by rmk") - - (* ;; "VALIDS is a pair (LASTVALID . NEXTVALID) as described in \TEDIT.VALID.LINES. Our job is to format and display the lines between LASTVALID and NEXTVALID, laying them out in the region starting below the given LASTVALID.") - - (* ;; "The screen has valid images for lines from the top down to LASTVALID (segment 1 as described in \TEDIT.VALID.LINES). We don't touch those lines or their bitmaps.") - - (* ;; "We also don't smash the bitmaps for NEXTVALID lines whose initial YTOP is below the YBOT of the last formatted valid line. This is guaranteed for deletions, maybe not for insertions where the gap displaying can encroach on the valid bitmaps. The caller has to sort the bitmap overlaps.") - - (* ;; "Returns the new LASTVALID whose NEXTLINE is the given NEXTVALID.") - - (CL:UNLESS PANE (SETQ DONTDISPLAY T)) - (for L LASTINVALIDCHNO PBOTTOM LCHARLIM YBOT (LASTVALID _ (CAR VALIDS)) - (NEXTVALID _ (CDR VALIDS)) - [PBOTTOM _ (CL:UNLESS DONTDISPLAY - (fetch BOTTOM of (DSPCLIPPINGREGION NIL PANE)))] inlines LASTVALID - first (SETQ YBOT (GETLD LASTVALID YBOT)) - (SETQ LCHARLIM (FGETLD LASTVALID LCHARLIM)) (* ; - "LCHARLIM=0 if change in document's first line") - (SETQ LASTINVALIDCHNO (CL:IF NEXTVALID - (SUB1 (FGETLD NEXTVALID LCHAR1)) - (FGETTOBJ TEXTOBJ TEXTLEN))) eachtime (SETQ LCHARLIM - (FGETLD L LCHARLIM)) - until (OR (AND PBOTTOM (ILEQ YBOT PBOTTOM)) - (IEQP LCHARLIM LASTINVALIDCHNO)) - do (if (AND PBOTTOM (ILEQ YBOT PBOTTOM)) - then (LINKLD LASTVALID NIL) (* ; - "Insertion ran off the bottom, flush now-invisible lines") - (RETURN LASTVALID) - elseif (IEQP LCHARLIM LASTINVALIDCHNO) - then - (* ;; "We reached the end of the gap. But we may have smashed the bitmaps of the initial NEXTVALID lines, so we have to format/display a little bit more until we clear the overlap. If we are displaying, we first move the non-overlapping bitmap downwards on the screen, out of danger, then reformat and provide fresh images for the overlapping lines.") - - (CL:WHEN (IGREATERP (FGETLD NEXTVALID YTOP) - (FGETLD LASTVALID YBOT)) - (BITBLT))) - (SETQ LASTVALID (\TEDIT.FORMATLINE TEXTOBJ (ADD1 LCHARLIM))) - (LINKLD L LASTVALID) - (SETQ YBOT (\TEDIT.LINE.BOTTOM LASTVALID)) - (SETQ LCHARLIM (FGETLD LASTVALID LCHARLIM)) - (CL:UNLESS DONTDISPLAY - - (* ;; "The THISLINE cache for NEXT is good if we display immediately after formatting") - - (\TEDIT.DISPLAYLINE TEXTOBJ LASTVALID PANE)) finally (LINKLD LASTVALID NEXTVALID) - (RETURN LASTVALID]) + (\TEDIT.DISPLAYLINE TEXTOBJ NEXT PANE)) + finally + + (* ;; "Ran out of lines") + + (CL:WHEN (AND L (IGEQ LCHARLIM (FGETTOBJ TEXTOBJ TEXTLEN)) + (FGETLD L FORCED-END)) + (\TEDIT.INSURE.NEXTLINE TEXTOBJ L)) + (RETURN (CONS FIRSTNEWLINE (OR L FIRSTNEWLINE]) (\TEDIT.LOWER.LINES - [LAMBDA (NEXTVALID LASTVALID PANE TEXTOBJ) (* ; "Edited 15-Mar-2024 14:40 by rmk") + [LAMBDA (NEXTVALID LASTVALID PANE TEXTOBJ) (* ; "Edited 13-Jun-2024 21:46 by rmk") + (* ; "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 +2491,65 @@ (* ;; "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) + (* ;; "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") - (* ;; "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)) - - (* ;; "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 (REGION 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 13-Jun-2024 22:14 by rmk") + (* ; "Edited 22-May-2024 09:42 by rmk") + (* ; "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 +2559,36 @@ (* ; "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.") - - (* ;; "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.") + (* ;; "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).") (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 (REGION 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.") - - (SETQ PWIDTH (fetch WIDTH of PREG)) - (BITBLT PANE 0 0 PANE 0 RAISE PWIDTH LTOP 'INPUT 'REPLACE) - - (* ;; "") + (BITBLT PANE VLEFT VBOTTOM PANE VLEFT (IPLUS VBOTTOM DELTA) + PWIDTH + (IDIFFERENCE (FGETLD LINE YTOP) + DELTA) + 'INPUT + 'REPLACE) + (CL:WHEN LASTVISIBLE - (* ;; "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,12 +2597,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") - (* ; "Edited 15-Mar-2024 19:44 by rmk") + [LAMBDA (FIRSTCHANGEDCHNO NCHARSCHANGED REASON TSTREAM) (* ; "Edited 15-Jun-2024 17:32 by rmk") + (* ; "Edited 12-Jun-2024 23:59 by rmk") + (* ; "Edited 23-May-2024 12:48 by rmk") + (* ; "Edited 20-Apr-2024 22:11 by rmk") + (* ; "Edited 20-Mar-2024 06:46 by rmk") (* ; "Edited 22-Feb-2024 01:05 by rmk") (* ; "Edited 3-Nov-2023 12:07 by rmk") (* ; "Edited 14-Jun-2023 15:55 by rmk") @@ -2716,84 +2646,126 @@ (* ;; "Note that this is mostly an optimization to avoid unnecessary reformatting and redisplaying of still-valid lines in favor of bitbltting a block of their currently visible images. Smashing all lines to NIL and refilling each pane would also give the correct behavior, but slower. Intermediate would be smashing all lines below the last valid.") - (* ;; "") - - (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 + (LET ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + (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 NIL) + (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) (* ; - "The change is visible in this pane. ") - - (* ;; "Figure out the LASTVALIDLINE--somewhere before the FIRSTCHANGEDLINE. Could be PLINES as initialized above") - - (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.") - - (SETQ LASTVALIDLINE (find L backlines (FGETLD FIRSTCHANGEDLINE PREVLINE) - suchthat (FGETLD L FORCED-END))) - (CL:WHEN (AND (EQ LASTVALIDLINE PLINES) - (IGREATERP (FGETLD FIRSTCHANGEDLINE 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. ") - - [SETQ LASTVALIDLINE (CADR (\TEDIT.LINES.ABOVE TEXTOBJ - (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. ") + (OR (LINESELECTEDP L FIRSTCHANGEDCHNO LASTCHANGEDCHNO) + (AND (NOT (FGETLD L FORCED-END)) + (IEQP FIRSTCHANGEDCHNO (ADD1 (FGETLD L LCHARLIM] + (CL:WHEN FIRSTCHANGEDLINE (* ; "Change is visible in this PANE") + [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 LASTCHANGEDLINE + + (* ;; + "Last changed line is visible, its changes may cause character to shift to or from lower lines.") + + (SETQ NEXTVALIDLINE (\TEDIT.NEXTVALIDLINE LASTCHANGEDLINE TSTREAM) + )) + (CL:WHEN (AND NEXTVALIDLINE (NEQ REASON 'CHANGED)) + + (* ;; "If the modification added or substracted to the number of characters, translate the character positions of the still-valid lines that are visible later than the change. ") + + (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))) - [SETQ NEXTVALIDLINE (for L inlines LASTCHANGEDLINE - when (OR (FGETLD L FORCED-END) - (GETLD L LSTLN)) - do (RETURN (FGETLD L NEXTLINE] - - (* ;; "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)) - - (* ;; "") - - (CL:WHEN LASTVALIDLINE - (SETLD LASTVALIDLINE NEXTLINE NIL) (* ; "Chop off the useless lines") - (CONS LASTVALIDLINE NEXTVALIDLINE)))]) + (* ;; + "First changed line is visible, its changes may cause changes in prior lines.") + + (SETQ LASTVALIDLINE (\TEDIT.LASTVALIDLINE FIRSTCHANGEDLINE + FIRSTCHANGEDCHNO PANE TSTREAM)) + + (* ;; "") + + (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.LASTVALIDLINE + [LAMBDA (FIRSTCHANGEDLINE FIRSTCHANGEDCHNO PANE TSTREAM) (* ; "Edited 16-Jun-2024 08:27 by rmk") + (* ; "Edited 13-Jun-2024 22:09 by rmk") + (* ; "Edited 25-May-2024 00:28 by rmk") + (* ; "Edited 23-May-2024 12:47 by rmk") + (* ; "Edited 18-May-2024 10:13 by rmk") + + (* ;; "We hope to return an existing line in PANE that is impervious to the change at FIRSTCHARCHANGECHNO. This would be the impervious line closest to FIRSTCHANGEDLINE, usually the immediately preceding line. That line is valid: it and lines above it do not need reformatting or redisplay. But if PANE does not contain an impervious line, and we are not at the beginning of the document, we have to construct lines above PANE until we get to an impervious line, so that we can format forwards.") + + (* ;; "A line L is impervious to a change in L+1 if it has a forced end, or if L has at least one separator (space, tab) prior to a change point. The change point is FIRSTCHANGEDCHNO for the first line. If we have to go to earlier lines, then any separator anywhere on the line (at or before LCHARLIM) will stop the back-propagation.") + + (LET* ((PLINES (PLINES PANE)) + (FIRSTPANECHAR (AND (FGETLD PLINES NEXTLINE) + (FGETLD (FGETLD PLINES NEXTLINE) + LCHAR1))) + PREV) + (if (bind (L _ FIRSTCHANGEDLINE) + (LIMCHAR _ (SUB1 FIRSTCHANGEDCHNO)) while (SETQ PREV (FGETLD L PREVLINE)) + do + (* ;; "The previous line is valid if its ending was forced, or if L has at least one space/tab earlier then the limit. Note that the PLINES dummy is always force, it stops the iteration..") + + (CL:WHEN (FGETLD PREV FORCED-END) + (RETURN (if (NEQ PLINES PREV) + then PREV + elseif (EQ 1 FIRSTPANECHAR) + then (* ; "PANE is at the top") + PLINES))) + (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 (FGETLD L LCHAR1))) + (CL:WHEN [find I from 1 to (IDIFFERENCE LIMCHAR (FGETLD L LCHAR1)) + suchthat (MEMB (BIN TSTREAM) + (CHARCODE (SPACE TAB] + (RETURN PREV)) + (SETQ L PREV) + (SETQ LIMCHAR (FGETLD L LCHARLIM)) repeatwhile L) + else + (* ;; "None of the existing lines above FIRSTCHANGEDLINE are valid. We return a valid line that is positioned just above PANE such that everything past its LCHARLIM is valid. That line has not current bitmap and will not be displayed, but it signals where the gap begins.") + + (* ;; + "Note that that line is not linked into the chain, PLINES doesn't know about it.") + + (* ;; "We could go forward from the CAR or backwards from the CADR to find the valid line just above the pane. Maybe fewer lines backwards, if we're working at the bottom of a paragraph?") + + (find L (PTOP _ (fetch TOP of (DSPCLIPPINGREGION NIL PANE))) + backlines (CADR (\TEDIT.LINES.ABOVE TSTREAM (SUB1 FIRSTPANECHAR) + (FGETLD FIRSTCHANGEDLINE YTOP))) + suchthat (IGREATERP (FGETLD L YBOT) + PTOP]) + +(\TEDIT.NEXTVALIDLINE + [LAMBDA (LASTCHANGEDLINE TSTREAM) (* ; "Edited 12-Jun-2024 23:56 by rmk") + + (* ;; "The line after a forced end is valid. But maybe we can figure out how to stop sooner?") + + (for L inlines (FGETLD LASTCHANGEDLINE NEXTLINE) when (OR (FGETLD L FORCED-END) + (FGETLD L LSTLN)) + do (RETURN (FGETLD L NEXTLINE]) (\TEDIT.CLEARPANE.BELOW.LINE - [LAMBDA (LINE PANE TEXTOBJ) (* ; "Edited 20-Nov-2023 14:02 by rmk") + [LAMBDA (LINE PANE TEXTOBJ) (* ; "Edited 13-Jun-2024 21:51 by rmk") + (* ; "Edited 20-Nov-2023 14:02 by rmk") (* ; "Edited 22-Sep-2023 20:33 by rmk") (* ; "Edited 25-Apr-2023 23:06 by rmk") (* ; "Edited 30-May-91 15:59 by jds") @@ -2807,14 +2779,15 @@ (* ;; "Clears the pane below LINE to white.") (LET ((PREG (DSPCLIPPINGREGION NIL PANE))) - (BLTSHADE WHITESHADE PANE 0 (fetch BOTTOM of PREG) - (fetch WIDTH of PREG) + (BLTSHADE WHITESHADE PANE 0 (fetch (REGION BOTTOM) of PREG) + (fetch (REGION WIDTH) of PREG) (IDIFFERENCE (GETLD LINE YBOT) - (fetch BOTTOM of PREG)) + (fetch (REGION BOTTOM) of PREG)) 'REPLACE)))]) (\TEDIT.INSERTLINE - [LAMBDA (NEWLINE OLDLINE AFTER) (* ; "Edited 31-May-2023 00:18 by rmk") + [LAMBDA (NEWLINE OLDLINE AFTER) (* ; "Edited 17-May-2024 22:49 by rmk") + (* ; "Edited 31-May-2023 00:18 by rmk") (* ; "Edited 26-Feb-2023 22:36 by rmk") (* ; "Edited 24-Feb-2023 23:12 by rmk") (* ; "Edited 23-Feb-2023 22:41 by rmk") @@ -2834,83 +2807,57 @@ (CL:WHEN LINE (SETLD LINE NEXTLINE NEWLINE)) (SETLD NEWLINE PREVLINE LINE) (SETLD NEWLINE NEXTLINE OLDLINE) - (SETLD OLDLINE PREVLINE NEWLINE]) - -(\TEDIT.INSURE.TRAILING.LINE - [LAMBDA (TEXTOBJ LASTLINE) (* ; "Edited 15-Mar-2024 19:31 by rmk") + (SETLD OLDLINE PREVLINE NEWLINE)) + NEWLINE]) + +(\TEDIT.INSURE.NEXTLINE + [LAMBDA (TEXTOBJ PREVLINE) (* ; "Edited 15-Jun-2024 15:32 by rmk") + (* ; "Edited 13-Jun-2024 18:02 by rmk") + (* ; "Edited 21-May-2024 09:49 by rmk") + (* ; "Edited 15-Mar-2024 19:31 by rmk") (* ; "Edited 16-Dec-2023 00:12 by rmk") (* ; "Edited 15-Jul-2023 13:53 by rmk") (* ; "Edited 8-May-2023 22:00 by rmk") (* ; "Edited 5-May-2023 10:54 by rmk") - (* ;; "Fabricates a final line to insure that there is a place for the caret to blink after the last EOL of the text. Something for \FIXSEL to move to.") - - (* ;; "\TEDIT.FORMATLINE may be overkill--maybe we really want to construct exactly what we want. But \TEDIT.FORMATLINE does get the LHEIGHT.") - - (CL:WHEN (AND (GETLD LASTLINE FORCED-END) - (IEQP (FGETLD LASTLINE LCHARLIM) - (FGETTOBJ TEXTOBJ TEXTLEN))) - (LET [(LINE (\TEDIT.FORMATLINE.EMPTY TEXTOBJ (ADD1 (FGETTOBJ TEXTOBJ TEXTLEN] - (SETYPOS LINE (IDIFFERENCE (FGETLD LASTLINE YBOT) - (FGETLD LINE LHEIGHT))) - (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]) + (* ;; "PREVLINE may not have a next line if it is the last line of a pane or the last line of the document. In either case, this creates and installs a line that would be appropriate for scrolling and for \TEDIT.FIXSEL to move to after a pane-bottom EOL.") + + (OR (FGETLD PREVLINE NEXTLINE) + (LET ((NEXTCHAR1 (ADD1 (FGETLD PREVLINE LCHARLIM))) + LINE) + [if (IGEQ NEXTCHAR1 (FGETTOBJ TEXTOBJ TEXTLEN)) + then (SETQ LINE (\TEDIT.FORMATLINE.EMPTY TEXTOBJ NEXTCHAR1)) + (CL:UNLESS (FGETLD PREVLINE LDUMMY) + (FSETLD LINE LTRUEASCENT (FGETLD PREVLINE LTRUEASCENT)) + (FSETLD LINE LTRUEDESCENT (FGETLD PREVLINE LTRUEDESCENT)) + (FSETLD LINE ASCENT (FGETLD PREVLINE ASCENT)) + (FSETLD LINE DESCENT (FGETLD PREVLINE DESCENT))) + (FSETLD LINE LHEIGHT (IPLUS (FGETLD LINE ASCENT) + (FGETLD LINE DESCENT))) + (SETYPOS LINE (IDIFFERENCE (FGETLD PREVLINE YBOT) + (FGETLD LINE LHEIGHT))) + else (SETQ LINE (\TEDIT.FORMATLINE (FGETTOBJ TEXTOBJ STREAMHINT) + NEXTCHAR1)) + (SETYPOS LINE (IDIFFERENCE (FGETLD PREVLINE YBOT) + (FGETLD LINE LHEIGHT] + (LINKLD PREVLINE LINE) + LINE]) (\TEDIT.LINE.BOTTOM - [LAMBDA (LINE) (* ; "Edited 4-Dec-2023 13:59 by rmk") + [LAMBDA (PREVLINE LINE) (* ; "Edited 16-Jun-2024 23:43 by rmk") + (* ; "Edited 4-Dec-2023 13:59 by rmk") (* ; "Edited 25-Apr-2023 23:00 by rmk") (* ; "Edited 23-Apr-2023 00:05 by rmk") (* ; "Edited 24-Sep-87 10:00 by jds") - (* ;; "Computes LINE's YBOT value relative to the Y position of the line before. Takes into account the (undocumented) BASETOBASE leading, as well as paragraph leadings.") + (* ;; "Computes LINE's YBOT value relative to the Y position of PREVLINE. Takes into account the (undocumented) BASETOBASE leading, as well as paragraph leadings.") (* ;; "BASETOBASE leading differs from normal LINELEADING in that the distance between the baselines of adjacent within-paragraph lines should be the given constant, whether or not the previous line has a non standard descent (a subscript) or the next line has a nonstandard ascent.") (* ;; "We can't fetch the YBASE of PREV directly, since we") (\DTEST LINE 'LINEDESCRIPTOR) - (LET* ((PREV (\DTEST (FGETLD LINE PREVLINE) - 'LINEDESCRIPTOR)) - (PREVYBOT (FGETLD PREV YBOT)) + (LET* ((PREVYBOT (FGETLD PREVLINE YBOT)) (FMTSPEC (GETLD LINE LFMTSPEC)) (BASETOBASE (fetch (FMTSPEC FMTBASETOBASE) of FMTSPEC)) NEWYBOT) @@ -2925,23 +2872,24 @@ (* ;; "This is the first line of a new paragraph, and the previous line must therefore have been a last. Both paragraph leadings apply in the gap, but the line leading is irrelevant.") (IDIFFERENCE PREVYBOT (IPLUS (fetch (FMTSPEC LEADAFTER) - of (FGETLD PREV LFMTSPEC)) + of (FGETLD PREVLINE LFMTSPEC)) (fetch (FMTSPEC LEADBEFORE) of FMTSPEC) (FGETLD LINE LTRUEHEIGHT))) else (* ;; "Between lines inside a paragraph, make the baselines BASETOBASE apart. Oldcode subtracted paragraph leading") - (IDIFFERENCE (IDIFFERENCE (FGETLD PREV YBASE) + (IDIFFERENCE (IDIFFERENCE (FGETLD PREVLINE YBASE) BASETOBASE) (FGETLD LINE DESCENT] (SETYPOS LINE NEWYBOT) 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 +2914,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 (24648 26045 (\TEDIT.LINEDESCRIPTOR.DEFPRINT 24658 . 26043)) (33403 113393 ( +\TEDIT.FORMATLINE 33413 . 69270) (\TEDIT.FORMATLINE.SETUP 69272 . 72663) (\TEDIT.FORMATLINE.HORIZONTAL + 72665 . 77061) (\TEDIT.FORMATLINE.VERTICAL 77063 . 79266) (\TEDIT.FORMATLINE.JUSTIFY 79268 . 85208) ( +\TEDIT.FORMATLINE.TABS 85210 . 92697) (\TEDIT.FORMATLINE.SCALETABS 92699 . 93702) ( +\TEDIT.FORMATLINE.PURGE.SPACES 93704 . 95014) (\TEDIT.FORMATLINE.EMPTY 95016 . 99765) ( +\TEDIT.FORMATLINE.UPDATELOOKS 99767 . 107242) (\TEDIT.FORMATLINE.LASTLEGAL 107244 . 110784) ( +\TEDIT.LINES.ABOVE 110786 . 113391)) (113510 115931 (\CLEARTHISLINE 113520 . 114189) (\TLVALIDATE +114191 . 115929)) (116125 136412 (\TEDIT.DISPLAYLINE 116135 . 128705) (\TEDIT.DISPLAYLINE.TABS 128707 + . 131330) (\TEDIT.LINECACHE 131332 . 132060) (\TEDIT.CREATE.LINECACHE 132062 . 132898) ( +\TEDIT.BLTCHAR 132900 . 135527) (\TEDIT.DIACRITIC.SHIFT 135529 . 136410)) (137027 187511 ( +\TEDIT.BACKFORMAT 137037 . 139258) (\TEDIT.PREVIOUS.LINEBREAK 139260 . 141983) (\TEDIT.UPDATE.LINES +141985 . 149323) (\TEDIT.CREATEPLINE 149325 . 151507) (\TEDIT.LINES.BELOW 151509 . 156828) ( +\TEDIT.LOWER.LINES 156830 . 161065) (\TEDIT.RAISE.LINES 161067 . 164626) (\TEDIT.VALID.LINES 164628 . +172916) (\TEDIT.LASTVALIDLINE 172918 . 176815) (\TEDIT.NEXTVALIDLINE 176817 . 177276) ( +\TEDIT.CLEARPANE.BELOW.LINE 177278 . 178732) (\TEDIT.INSERTLINE 178734 . 180120) ( +\TEDIT.INSURE.NEXTLINE 180122 . 182537) (\TEDIT.LINE.BOTTOM 182539 . 185403) (\TEDIT.NCONC.LINES +185405 . 187509))))) STOP diff --git a/library/tedit/TEDIT-SCREEN.LCOM b/library/tedit/TEDIT-SCREEN.LCOM index 888b2eddfc8dfe307625c0baa7c687ea96655a96..58b588a25d4deedb50f01cced2dd72faf010661e 100644 GIT binary patch delta 13991 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 DVsDDb diff --git a/library/tedit/TEDIT-SELECTION b/library/tedit/TEDIT-SELECTION index 0f99c720e..0bce11355 100644 --- a/library/tedit/TEDIT-SELECTION +++ b/library/tedit/TEDIT-SELECTION @@ -1,27 +1,24 @@ (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 "25-Jun-2024 15:26:17" {WMEDLEY}tedit>TEDIT-SELECTION.;514 141472 :EDIT-BY rmk - :CHANGES-TO (FNS TEDIT.SCANSEL TEDIT.XYTOCH TEDIT.SELECT) - (VARS TEDIT-SELECTIONCOMS) + :CHANGES-TO (FNS TEDIT.XYTOCH) - :PREVIOUS-DATE "20-Mar-2024 11:08:55" -{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-SELECTION.;453) + :PREVIOUS-DATE "25-Jun-2024 00:09:13" {WMEDLEY}tedit>TEDIT-SELECTION.;513) (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) (EDITGRAY 32800)) (MACROS WITHINLINEP LINESELECTEDP) - (MACROS GETSEL SETSEL FGETSEL FSETSEL) + (MACROS GETSEL SETSEL FGETSEL FSETSEL SELECTION!) (GLOBALVARS TEDIT.EXTEND.PENDING.DELETE) (GLOBALVARS TEDIT.SELECTION TEDIT.SHIFTEDSELECTION TEDIT.MOVESELECTION TEDIT.COPYLOOKSSELECTION @@ -29,19 +26,20 @@ (I.S.OPRS inselpieces))) (INITRECORDS SELECTION SELPIECES) (FNS \TEDIT.SELECTION.DEFPRINT) - (FNS \TEDIT.SET.GLOBAL.SELECTIONS) (P (\TEDIT.SET.GLOBAL.SELECTIONS)) + (FNS \TEDIT.SET.GLOBAL.SELECTIONS) (FNS \TEDIT.SELECTED.PIECES \TEDIT.FIND.PROTECTED.END \TEDIT.FIND.PROTECTED.START \TEDIT.WORD.BOUND) (INITVARS (TEDIT.EXTEND.PENDING.DELETE T)) (* ; "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 +49,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 +89,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 +107,11 @@  "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 (fetch (TEXTSTREAM TEXTOBJ) of (GETSEL DATUM SELTEXTSTREAM))) + (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)) @@ -191,6 +193,9 @@ (PUTPROPS FSETSEL MACRO ((S FIELD NEWVALUE) (freplace (SELECTION FIELD) of S with NEWVALUE))) + +(PUTPROPS SELECTION! MACRO ((SEL) + (\DTEST SEL 'SELECTION))) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY @@ -260,11 +265,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)) @@ -293,6 +299,8 @@ (CDR LOC) "}"]) ) + +(\TEDIT.SET.GLOBAL.SELECTIONS) (DEFINEQ (\TEDIT.SET.GLOBAL.SELECTIONS @@ -315,8 +323,6 @@ do (SETATOMVAL S (create SELECTION)))) (SHOULDNT]) ) - -(\TEDIT.SET.GLOBAL.SELECTIONS) (DEFINEQ (\TEDIT.SELECTED.PIECES @@ -421,7 +427,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 +445,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 +547,23 @@ (* ;; "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 20-Jun-2024 11:36 by rmk") + (* ; "Edited 13-Jun-2024 17:02 by rmk") + (* ; "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,11 +577,12 @@ (* ;; "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) + (SETQ LINE (\TEDIT.FORMATLINE TSTREAM (GETLD LINE LCHAR1) LINE))) (* ;  "Convert X's display units to LINE's scale") (SETQ TX (GETLD LINE LX1)) @@ -604,9 +623,9 @@ (RETURN))) (add CHNO 1) finally - (* ;; "We lose if all characters after X are protected.") + (* ;; "Empty line is not protected") - (CL:WHEN (fetch (CHARLOOKS CLPROTECTED) of CLOOKS) + (CL:WHEN (AND CLOOKS (fetch (CHARLOOKS CLPROTECTED) of CLOOKS)) (SETQ CHARSLOT NIL))) (CL:UNLESS CHARSLOT (* ; "Everything after X was protected.") (RETURN 'DON'T)) @@ -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,14 @@ (* ;; "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 13-Jun-2024 17:11 by rmk") + (* ; "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 +944,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.") @@ -928,7 +957,8 @@  "The object declines to be selected. ") (FSETSEL SEL SET NIL)) (CHANGED (* ; "Update the screen") - (\TEDIT.FORMATLINE TEXTOBJ (GETLD LINE LCHAR1) + (\TEDIT.FORMATLINE (FGETTOBJ TEXTOBJ STREAMHINT) + (GETLD LINE LCHAR1) LINE) (\TEDIT.DISPLAYLINE TEXTOBJ LINE SELPANE) (TEDIT.OBJECT.CHANGED TEXTOBJ (fetch (SELECTION SELOBJ) of SEL))) @@ -937,7 +967,12 @@ (DEFINEQ (\TEDIT.FIXSEL - [LAMBDA (SEL TEXTOBJ AVOIDPANE ONLYPANE) (* ; "Edited 20-Mar-2024 10:55 by rmk") + [LAMBDA (SEL TEXTOBJ AVOIDPANE ONLYPANE) (* ; "Edited 24-Jun-2024 23:57 by rmk") + (* ; "Edited 16-Jun-2024 22:02 by rmk") + (* ; "Edited 21-May-2024 09:01 by rmk") + (* ; "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 +1017,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) @@ -996,36 +1031,43 @@ [LASTCHNO _ (IMAX 1 (SUB1 (FGETSEL SEL CHLIM] inpanes TEXTOBJ as L1 on (FGETSEL SEL L1) as LN on (FGETSEL SEL LN) unless (EQ PANE AVOIDPANE) when (OR (NULL ONLYPANE) - (EQ PANE ONLYPANE)) when (SETQ PSTARTLINE (find L - inlines (GETLD (fetch (TEXTWINDOW - PLINES) - of PANE) - NEXTLINE) - suchthat + (EQ PANE ONLYPANE)) + when [SETQ PSTARTLINE (find L inlines (GETLD (fetch (TEXTWINDOW PLINES) of PANE) + NEXTLINE) suchthat (* ;;  "The first visible line in PANE that contains or follows CHNO. ") - (LINESELECTEDP L CH# LASTCHNO) - finally + (LINESELECTEDP L CH# LASTCHNO + ) + finally + + (* ;; + "Suchthat always comes here: start by asserting no visible lines.") - (* ;; "Suchthat always comes here: start by asserting no visible lines, $$VAL=NIL if no visible lines in this pane") + (RPLACA L1 NIL) + (RPLACA LN NIL) + (CL:WHEN (AND L (FGETLD L LDUMMY) + (IGREATERP (FGETLD L LCHARLIM) + (FGETTOBJ TEXTOBJ TEXTLEN))) - (RPLACA L1 NIL) - (RPLACA LN NIL))) + (* ;; + "Presumably a point selection before the last dummy line") + + (RETURN L))] do [if (EQ 0 (FGETSEL SEL DCH)) then (* ;; "Point selection, CHNO=LASTCHNO, POINT determines whether the caret blinks before or after that character.") (CL:WHEN (AND (FGETLD PSTARTLINE FORCED-END) (IEQP CH# (FGETLD PSTARTLINE LCHARLIM)) - (EQ 'RIGHT (FGETSEL SEL POINT)) - (FGETLD PSTARTLINE NEXTLINE)) + (EQ 'RIGHT (FGETSEL SEL POINT))) - (* ;; - "Point to the right of the EOL that forced a line. Advance to the beginning of the next line..") + (* ;; "Point to the right of the EOL that forced a line, that is, at the beginning of the next line. Create one if below the pane.") - (SETQ PSTARTLINE (FGETLD PSTARTLINE NEXTLINE)) + (CL:UNLESS (FGETLD PSTARTLINE LDUMMY) + (\TEDIT.INSURE.NEXTLINE TEXTOBJ PSTARTLINE) + (SETQ PSTARTLINE (FGETLD PSTARTLINE NEXTLINE))) (SETQ CH# (FGETLD PSTARTLINE LCHAR1)) (SETQ LASTCHNO CH#) (FSETSEL SEL CH# CH#) @@ -1078,11 +1120,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)) @@ -1095,7 +1133,9 @@ SEL]) (\TEDIT.CHTOX - [LAMBDA (TEXTOBJ LINE CH# AFTER) (* ; "Edited 15-Mar-2024 19:22 by rmk") + [LAMBDA (TEXTOBJ LINE CH# AFTER) (* ; "Edited 13-Jun-2024 17:12 by rmk") + (* ; "Edited 10-May-2024 00:26 by rmk") + (* ; "Edited 15-Mar-2024 19:22 by rmk") (* ; "Edited 23-Dec-2023 14:07 by rmk") (* ; "Edited 2-Dec-2023 10:01 by rmk") (* ; "Edited 16-May-2023 00:20 by rmk") @@ -1109,12 +1149,12 @@ (\DTEST LINE 'LINEDESCRIPTOR) (LET (X (THISLINE (GETTOBJ TEXTOBJ THISLINE))) - (CL:WHEN (OR (FGETLD LINE LDIRTY) - (NEQ LINE (fetch DESC of THISLINE))) + (CL:UNLESS (EQ LINE (fetch DESC of THISLINE)) - (* ;; "Reformat if LINE is dirty or not cached in THISLINE. ") + (* ;; "Reformat if LINE is not cached in THISLINE. ") - (\TEDIT.FORMATLINE TEXTOBJ (FGETLD LINE LCHAR1) + (\TEDIT.FORMATLINE (FGETTOBJ TEXTOBJ STREAMHINT) + (FGETLD LINE LCHAR1) LINE)) (* ;; "Can avoid another loop if we are asking about the first or last characters.") @@ -1239,8 +1279,10 @@ (DEFINEQ (\TEDIT.SHOWSEL - [LAMBDA (SEL ON ONLYPANE TEXTOBJ) (* ; "Edited 20-Mar-2024 10:56 by rmk") + [LAMBDA (SEL ON TEXTOBJ ONLYPANE) (* ; "Edited 18-May-2024 19:56 by rmk") + (* ; "Edited 29-Apr-2024 13:01 by rmk") (* ; "Edited 9-Mar-2024 12:01 by rmk") + (* ; "Edited 20-Mar-2024 10:56 by rmk") (* ; "Edited 18-Feb-2024 15:24 by rmk") (* ; "Edited 24-Jan-2024 08:07 by rmk") (* ; "Edited 18-Nov-2023 11:27 by rmk") @@ -1254,7 +1296,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.") @@ -1265,7 +1307,7 @@ (RETURN)) (CL:WHEN (FGETSEL SEL SELOBJ)) - (* ;; "") + (* ;; " ") (if (FGETSEL SEL SELOBJ) then @@ -1286,7 +1328,8 @@ (FSETSEL SEL ONFLG ON)))]) (\TEDIT.SHOWSEL.HILIGHT - [LAMBDA (TEXTOBJ L1 LN PANE SEL X0 XLIM) (* ; "Edited 22-Dec-2023 08:42 by rmk") + [LAMBDA (TEXTOBJ L1 LN PANE SEL X0 XLIM) (* ; "Edited 13-Jun-2024 22:04 by rmk") + (* ; "Edited 22-Dec-2023 08:42 by rmk") (* ; "Edited 17-Dec-2023 17:44 by rmk") (* ; "Edited 22-Apr-2023 15:32 by rmk") (* ; "Edited 30-May-91 23:07 by jds") @@ -1318,7 +1361,7 @@ BLACKSHADE)) (SHADEHEIGHT _ (OR (FGETSEL SEL HOWHEIGHT) 1)) - (PBOTTOM _ (fetch BOTTOM of (DSPCLIPPINGREGION NIL PANE))) + (PBOTTOM _ (fetch (REGION BOTTOM) of (DSPCLIPPINGREGION NIL PANE))) DISTBELOW first (* ;; "DISTBELOW=1 gives a 1-pt spacing between the line-bottom and the selection underline. If 0, the slection line runs through the bottom; it makes 1-point horizontal rules invisible. However: 1 has to be coordinate with \TEDIT.SCROLLUP, so that the selection on the bottom line moves up when the line itself is bltted. I.e., the visible bottom is one point lower than the bottom of the line.") @@ -1341,9 +1384,10 @@ 'INVERT) repeatuntil (EQ L LN]) (\TEDIT.UPDATE.SHOWSEL - [LAMBDA (NSEL OSEL TEXTOBJ) (* ; "Edited 15-Mar-2024 13:37 by rmk") - (* ; "Edited 18-Feb-2024 15:25 by rmk") + [LAMBDA (NSEL OSEL TEXTOBJ) (* ; "Edited 18-May-2024 16:17 by rmk") + (* ; "Edited 15-Mar-2024 13:37 by rmk") (* ; "Edited 17-Nov-2023 23:03 by rmk") + (* ; "Edited 18-Feb-2024 15:25 by rmk") (* ; "Edited 23-Oct-2023 23:18 by rmk") (* ; "Edited 9-Oct-2023 23:02 by rmk") (* ; "Edited 14-Jun-2023 16:35 by rmk") @@ -1434,9 +1478,10 @@ (\TEDIT.SETCARET NSEL PANE TEXTOBJ T PCARET]) (\TEDIT.REFRESH.SHOWSEL - [LAMBDA (TEXTOBJ SOURCESEL OLDSEL OLDOP NEWOP EXTENDFLG) (* ; "Edited 15-Mar-2024 13:38 by rmk") - (* ; "Edited 9-Mar-2024 12:02 by rmk") + [LAMBDA (TEXTOBJ SOURCESEL OLDSEL OLDOP NEWOP EXTENDFLG) (* ; "Edited 18-May-2024 16:25 by rmk") + (* ; "Edited 15-Mar-2024 13:38 by rmk") (* ; "Edited 11-Feb-2024 00:06 by rmk") + (* ; "Edited 9-Mar-2024 12:02 by rmk") (* ; "Edited 9-Feb-2024 15:48 by rmk") (* ; "Edited 28-Jan-2024 23:27 by rmk") (* ; "Edited 9-Oct-2023 11:48 by rmk") @@ -1461,18 +1506,20 @@ OLDSEL) (T (* ;  "Otherwise, we have to turn the old one off, change things, and turn the new one on.") - (\TEDIT.SHOWSEL OLDSEL NIL NIL TEXTOBJ) + (\TEDIT.SHOWSEL OLDSEL NIL TEXTOBJ) (SETSEL OLDSEL SET NIL) (CL:UNLESS (EQ OLDOP NEWOP) (\TEDIT.SET.SEL.LOOKS SOURCESEL NEWOP)) (\TEDIT.COPYSEL SOURCESEL OLDSEL) (SETSEL OLDSEL ONFLG NIL) (* ;  "Make sure we can turn the highlighting on.") - (\TEDIT.SHOWSEL OLDSEL T NIL TEXTOBJ) + (\TEDIT.SHOWSEL OLDSEL T TEXTOBJ) OLDSEL]) (\TEDIT.UPDATE.SEL - [LAMBDA (SEL CH# DCH POINT DONTFIX) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (SEL CH# DCH POINT DONTFIX LOOKS) (* ; "Edited 21-Jun-2024 14:21 by rmk") + (* ; "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 +1553,62 @@ (* ;; "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))) + (CL:WHEN LOOKS (\TEDIT.SET.SEL.LOOKS SEL LOOKS)) + 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 +1645,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 +1664,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 +1675,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 +1691,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 +1709,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 +1738,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 +1816,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,38 +1974,100 @@ (DEFINEQ (TEDIT.XYTOCH - [LAMBDA (X Y PANE) (* ; "Edited 20-Mar-2024 14:32 by rmk") + [LAMBDA (X Y PANE) (* ; "Edited 25-Jun-2024 15:24 by rmk") + (* ; "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. X and Y can be keywords LEFT/RIGHT/TOP/BOTTOM or coordinates.") + + (* ;; "Assumes that the keyword coordinates (as well as numeric X and Y) are relative to PANE's clipping region and not some subregion.") (LET ((TEXTOBJ (TEXTOBJ PANE)) + (PREG (DSPCLIPPINGREGION NIL PANE)) SEL) (* ;; "The X W fields should be good in all panes, not sure about the Y W fields. Maybe those are PANE-dependent.") (SETQ X (SELECTQ X - (LEFT (GETTOBJ TEXTOBJ WLEFT)) - (RIGHT (SUB1 (GETTOBJ TEXTOBJ WRIGHT))) + (LEFT (fetch (REGION LEFT) of PREG)) + (RIGHT (* ; + "Region RIGHT has the SUB1, but also adds LEFT. Not sure") + (SUB1 (fetch (REGION WIDTH) of PREG))) X)) (SETQ Y (SELECTQ Y - (TOP (SUB1 (GETTOBJ TEXTOBJ WTOP))) - (BOTTOM (GETTOBJ TEXTOBJ WBOTTOM)) + (TOP (* ; + "Region TOP has the SUB1, but also adds BOTTOM. Not sure") + (SUB1 (fetch (REGION HEIGHT) of PREG))) + (BOTTOM (fetch (REGION BOTTOM) of PREG)) Y)) - (SETQ SEL (\TEDIT.SELECT.LINE.SCANNER X Y TEXTOBJ (fetch (TEXTWINDOW PLINES) of PANE) + (SETQ SEL (\TEDIT.XYTOSEL X Y TEXTOBJ (PLINES PANE) 'TEXT NIL NIL PANE)) (CL:WHEN (AND (type? SELECTION SEL) - (GETSEL SEL SET)) (* ; + (FGETSEL SEL SET)) (* ;  "He pointed at something real; return that.") - (GETSEL SEL CH#))]) + (FGETSEL 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 +2076,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,24 +2103,26 @@ 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 18-May-2024 16:28 by rmk") + (* ; "Edited 29-Apr-2024 12:37 by rmk") (* ; "Edited 9-Mar-2024 12:03 by rmk") + (* ; "Edited 15-Mar-2024 13:36 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) + (\TEDIT.SHOWSEL SEL 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]) + (\TEDIT.SHOWSEL SEL T TEXTOBJ]) (TEDIT.SCANSEL [LAMBDA (TSTREAM) (* ; "Edited 21-Mar-2024 10:49 by rmk") @@ -2010,8 +2141,10 @@ (FGETSEL SEL DCH))]) (TEDIT.SET.SEL.LOOKS - [LAMBDA (SEL OPERATION) (* ; "Edited 15-Mar-2024 13:34 by rmk") + [LAMBDA (SEL OPERATION) (* ; "Edited 18-May-2024 16:20 by rmk") + (* ; "Edited 29-Apr-2024 13:03 by rmk") (* ; "Edited 9-Mar-2024 12:04 by rmk") + (* ; "Edited 15-Mar-2024 13:34 by rmk") (* ; "Edited 12-Oct-2023 22:32 by rmk") (* ; "Edited 10-Jun-2023 13:35 by rmk") (* ; "Edited 20-May-2023 23:53 by rmk") @@ -2020,16 +2153,21 @@ (* ;; "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 TEXTOBJ) (\TEDIT.SET.SEL.LOOKS SEL OPERATION) - (\TEDIT.SHOWSEL SEL WASON NIL (FGETSEL SEL SELTEXTOBJ)) + (\TEDIT.SHOWSEL SEL WASON TEXTOBJ) SEL]) (TEDIT.SETSEL - [LAMBDA (STREAM CH# LEN POINT PENDINGDELFLG LEAVECARETLOOKS OPERATION) - (* ; "Edited 17-Mar-2024 00:27 by rmk") + [LAMBDA (TSTREAM CH# LEN POINT PENDINGDELFLG LEAVECARETLOOKS OPERATION) + (* ; "Edited 15-Jun-2024 10:08 by rmk") + (* ; "Edited 23-May-2024 09:13 by rmk") + (* ; "Edited 19-May-2024 00:01 by rmk") + (* ; "Edited 29-Apr-2024 12:39 by rmk") (* ; "Edited 15-Mar-2024 13:38 by rmk") + (* ; "Edited 17-Mar-2024 00:27 by rmk") (* ; "Edited 9-Mar-2024 12:04 by rmk") (* ; "Edited 22-Sep-2023 18:09 by rmk") (* ; "Edited 3-Aug-2023 23:12 by rmk") @@ -2040,84 +2178,89 @@ (* ;; "Given a text stream or textobj, and a piece of text to select, set the internal selection, and return it.") - (LET ((TEXTOBJ (TEXTOBJ STREAM)) - SEL TEXTLEN PC) - (SETQ SEL (TEXTSEL TEXTOBJ)) - (SETQ TEXTLEN (TEXTLEN TEXTOBJ)) - (\TEDIT.SHOWSEL SEL NIL NIL TEXTOBJ) (* ; "First turn the old sel off.") - [COND - ((type? SELECTION CH#) (* ; + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) + (LET* ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + (SEL (TEXTSEL TEXTOBJ)) + (TEXTLEN (TEXTLEN TEXTOBJ)) + PC) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (* ; "First turn the old sel off.") + [COND + ((type? SELECTION CH#) (* ;  "He gave use a selection; just plug it in") - (\TEDIT.COPYSEL CH# SEL) (* ; + (\TEDIT.COPYSEL CH# SEL) (* ;  "And make sure it can be turned on.") - (SETSEL SEL ONFLG NIL)) - (T (* ; + (SETSEL SEL ONFLG NIL)) + (T (* ;  "Documentation doesn't allow NIL, but DINFO.SHOWSEL passes it") - (SELECTQ POINT - (LEFT) - (RIGHT) - (NIL (SETQ POINT 'LEFT)) - (ERROR POINT "is an illegal POINT")) (* ; "He fed us numbers; use them") - (SETQ LEN (IMAX 0 LEN)) (* ; "Length must be positive") - (SETQ CH# (IMIN (IMAX 1 CH#) - (ADD1 TEXTLEN))) (* ; + (SELECTQ POINT + (LEFT) + (RIGHT) + (NIL (SETQ POINT 'LEFT)) + (ERROR POINT "is an illegal POINT")) (* ; "He fed us numbers; use them") + (SETQ LEN (IMAX 0 (OR LEN 0))) + (CL:WHEN (ILESSP CH# 0) + (SETQ CH# (IPLUS 1 TEXTLEN CH#))) (* ; "Length must be positive") + (SETQ CH# (IMIN (IMAX 1 CH#) + (ADD1 TEXTLEN))) (* ;  "Starting character. If beyond TEXTLEN, then just after EOF") - (SETSEL SEL CH# CH#) - [SETSEL SEL CHLIM (IMAX CH# (IMIN (IPLUS CH# LEN) - (ADD1 TEXTLEN] - - (* ;; "LEN may have been reduced by TEXTLEN") - - (SETQ LEN (IDIFFERENCE (GETSEL SEL CHLIM) - (GETSEL SEL CH#))) - (SETSEL SEL DCH LEN) - (SETSEL SEL POINT (if (IGREATERP CH# TEXTLEN) - then 'LEFT - elseif POINT - else 'LEFT)) (* ; "Which side the caret should go on") - (FSETSEL SEL SELOBJ (CL:WHEN (EQ 1 LEN) (* ; "If CH# beyond TEXTLEN, LEN is 0") - (SETQ PC (\TEDIT.CHTOPC (GETSEL SEL CH#) - TEXTOBJ)) - (CL:WHEN (EQ OBJECT.PTYPE (PTYPE PC)) - (PCONTENTS PC)))] - (SETSEL SEL SELTEXTOBJ TEXTOBJ) (* ; + (SETSEL SEL CH# CH#) + [SETSEL SEL CHLIM (IMAX CH# (IMIN (IPLUS CH# LEN) + (ADD1 TEXTLEN] + + (* ;; "LEN may have been reduced by TEXTLEN") + + (SETQ LEN (IDIFFERENCE (GETSEL SEL CHLIM) + (GETSEL SEL CH#))) + (SETSEL SEL DCH LEN) + (SETSEL SEL POINT (if (IGREATERP CH# TEXTLEN) + then 'LEFT + elseif POINT + else 'LEFT)) (* ; "Which side the caret should go on") + (FSETSEL SEL SELOBJ (CL:WHEN (EQ 1 LEN) (* ; "If CH# beyond TEXTLEN, LEN is 0") + (SETQ PC (\TEDIT.CHTOPC (GETSEL SEL CH#) + TEXTOBJ)) + (CL:WHEN (EQ OBJECT.PTYPE (PTYPE PC)) + (PCONTENTS PC)))] + (SETSEL SEL SELTEXTSTREAM TSTREAM) (* ;  "Link it back to the associated textobj") - [COND - [PENDINGDELFLG (* ; + [COND + [PENDINGDELFLG (* ;  "This selection is to be a pending-deletion sel.") - (SETTOBJ TEXTOBJ BLUEPENDINGDELETE T) (* ; + (SETTOBJ TEXTOBJ BLUEPENDINGDELETE T) (* ;  "Warn TEdit that there's a deletion pending") - (\TEDIT.SET.SEL.LOOKS SEL (OR OPERATION 'PENDINGDEL] - (T (* ; + (\TEDIT.SET.SEL.LOOKS SEL (OR OPERATION 'PENDINGDEL] + (T (* ;  "This selection is to be a pending-deletion sel.") - (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ) - (\TEDIT.SET.SEL.LOOKS SEL (OR OPERATION 'NORMAL] - (SETSEL SEL SET T) (* ; + (\TEDIT.RESET.EXTEND.PENDING.DELETE SEL TEXTOBJ) + (\TEDIT.SET.SEL.LOOKS SEL (OR OPERATION 'NORMAL] + (SETSEL SEL SET T) (* ;  "Mark the selection as valid for others to use") - (CL:UNLESS LEAVECARETLOOKS (* ; + (CL:UNLESS LEAVECARETLOOKS (* ;  "And set the insertion looks to follow.") - (SETTOBJ TEXTOBJ CARETLOOKS (\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ SEL))) - (\TEDIT.FIXSEL SEL TEXTOBJ) (* ; + (SETTOBJ TEXTOBJ CARETLOOKS (\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ SEL))) + (\TEDIT.FIXSEL SEL TEXTOBJ) (* ;  "Update the selection's screen location") - (\TEDIT.SHOWSEL SEL T NIL TEXTOBJ) (* ; "Highlight it on the screen") - SEL]) + (\TEDIT.SHOWSEL SEL T TEXTOBJ) (* ; "Highlight it on the screen") + SEL]) (TEDIT.SHOWSEL - [LAMBDA (STREAM ONFLG SEL) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (TSTREAM ONFLG SEL) (* ; "Edited 18-May-2024 16:28 by rmk") + (* ; "Edited 29-Apr-2024 12:27 by rmk") (* ; "Edited 9-Mar-2024 12:06 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 3-May-2023 09:23 by rmk") (* ; "Edited 18-Apr-2023 23:54 by rmk") (* ; "Edited 21-Oct-2022 18:36 by rmk") (* ;; "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))]) + (\TEDIT.SHOWSEL SEL ONFLG TEXTOBJ))]) (TEDIT.SEL.AS.STRING [LAMBDA (TSTREAM SEL) (* ; "Edited 17-Mar-2024 12:05 by rmk") @@ -2149,7 +2292,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 +2303,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 +2313,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 (13414 15358 (\TEDIT.SELECTION.DEFPRINT 13424 . 15356)) (15395 16655 ( +\TEDIT.SET.GLOBAL.SELECTIONS 15405 . 16653)) (16656 22459 (\TEDIT.SELECTED.PIECES 16666 . 18174) ( +\TEDIT.FIND.PROTECTED.END 18176 . 19780) (\TEDIT.FIND.PROTECTED.START 19782 . 21794) ( +\TEDIT.WORD.BOUND 21796 . 22457)) (22593 56779 (\TEDIT.EXTEND.SEL 22603 . 29864) (\TEDIT.SELECT 29866 + . 31643) (\TEDIT.SCAN.LINE 31645 . 40608) (\TEDIT.SCAN.LINE.WORD 40610 . 44730) (\TEDIT.XYTOSEL 44732 + . 52445) (\TEDIT.SELECT.OBJECT 52447 . 56777)) (56780 72845 (\TEDIT.FIXSEL 56790 . 68062) ( +\TEDIT.CHTOX 68064 . 71370) (\TEDIT.COLLECTSELS 71372 . 72525) (\TEDIT.SELECTION.UNSET 72527 . 72843)) + (72846 76014 (\TEDIT.RESET.EXTEND.PENDING.DELETE 72856 . 73722) (\TEDIT.SET.SEL.LOOKS 73724 . 76012)) + (76015 99350 (\TEDIT.SHOWSEL 76025 . 79603) (\TEDIT.SHOWSEL.HILIGHT 79605 . 83236) ( +\TEDIT.UPDATE.SHOWSEL 83238 . 89781) (\TEDIT.REFRESH.SHOWSEL 89783 . 92386) (\TEDIT.UPDATE.SEL 92388 + . 95994) (\TEDIT.CARETLINE 95996 . 96453) (\TEDIT.SEL.L1 96455 . 96961) (\TEDIT.SEL.LN 96963 . 97469) + (\TEDIT.SEL.DELETEDCHARS 97471 . 99348)) (99351 102675 (\TEDIT.COPYSEL 99361 . 101170) ( +\TEDIT.SEL.CHANGED? 101172 . 102673)) (102703 119552 (\TEDIT.SELPIECES 102713 . 105996) ( +\TEDIT.SELPIECES.COPY 105998 . 107873) (\TEDIT.SELPIECES.CONCAT 107875 . 109754) ( +\TEDIT.SELPIECES.CHARTRANSFORM 109756 . 112440) (\TEDIT.SELPIECES.FROM.STRING 112442 . 117465) ( +\TEDIT.SELPIECES.TO.STRING 117467 . 119550)) (119605 141303 (TEDIT.XYTOCH 119615 . 121613) ( +TEDIT.SELPROP 121615 . 124460) (TEDIT.GETPOINT 124462 . 125845) (TEDIT.GETSEL 125847 . 126167) ( +TEDIT.GETSEL.PARA 126169 . 127118) (TEDIT.MAKESEL 127120 . 128576) (TEDIT.SCANSEL 128578 . 129526) ( +TEDIT.SET.SEL.LOOKS 129528 . 130907) (TEDIT.SETSEL 130909 . 136834) (TEDIT.SHOWSEL 136836 . 138099) ( +TEDIT.SEL.AS.STRING 138101 . 139803) (TEDIT.SEL.AS.SEXPR 139805 . 140969) (TEDIT.SELECTALL 140971 . +141301))))) STOP diff --git a/library/tedit/TEDIT-SELECTION.LCOM b/library/tedit/TEDIT-SELECTION.LCOM index e1c7e1c3f8df5978cee5efbb05387cd59f268bc1..13ca602fa5de76ea4ce5033dbafcc8c390dc3287 100644 GIT binary patch delta 8359 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.;690 150536 +(FILECREATED "25-Jun-2024 12:01:24" {WMEDLEY}tedit>TEDIT-STREAM.;748 159247 :EDIT-BY rmk - :PREVIOUS-DATE "31-Mar-2024 11:44:49" {WMEDLEY}TEDIT>TEDIT-STREAM.;689) + :CHANGES-TO (FNS \TEDIT.TEXTBOUT OPENTEXTSTREAM \TEDIT.TEXTDSPXPOSITION \TEDIT.TEXTDSPYPOSITION + ) + + :PREVIOUS-DATE "24-Jun-2024 00:05:38" {WMEDLEY}tedit>TEDIT-STREAM.;747) (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") @@ -50,10 +54,10 @@ (* ;; "Low-level generic stream operations") (FNS \TEDIT.TEXTCLOSEF \TEDIT.TEXTDSPFONT \TEDIT.TEXTEOFP \TEDIT.TEXTGETEOFPTR - \TEDIT.TEXTGETFILEPTR \TEDIT.TEXTOPENF \TEDIT.TEXTSETEOF \TEDIT.TEXTSETFILEPTR - \TEDIT.TEXTDSPXPOSITION \TEDIT.TEXTDSPYPOSITION \TEDIT.TEXTLEFTMARGIN - \TEDIT.TEXTRIGHTMARGIN \TEDIT.TEXTDSPCHARWIDTH \TEDIT.TEXTDSPSTRINGWIDTH - \TEDIT.TEXTDSPLINEFEED) + \TEDIT.TEXTSETEOFPTR \TEDIT.TEXTGETFILEPTR \TEDIT.TEXTSETFILEINFO \TEDIT.TEXTOPENF + \TEDIT.TEXTSETEOF \TEDIT.TEXTSETFILEPTR \TEDIT.TEXTDSPXPOSITION \TEDIT.TEXTDSPYPOSITION + \TEDIT.TEXTLEFTMARGIN \TEDIT.TEXTRIGHTMARGIN \TEDIT.TEXTDSPCHARWIDTH + \TEDIT.TEXTDSPSTRINGWIDTH \TEDIT.TEXTDSPLINEFEED) (COMS (* ;; "Editing support") @@ -131,6 +135,8 @@  "A substring of storage that is available for an insertion.") TXTHISTORYUNDONE (* ; "Events that result from undoing other events, for revoking the UNDO. Was: CH# of first char in the piece.") (TXTLINELEADINGABOVE FLAG) (* ; "NIL for old/existing Tedit files whose lines are formatted with leading below, T for newer files. Was \INSERTPCVALID. T if it's OK to use the cached piece. Set to NIL by people who require that the next insertion/deletion use a different piece. Now just set HINTPC to NIL.") + (TXTREADONLYQUIET FLAG) (* ; + "T => don't print READONLY abort messages") \WINDOW (* ;  "The window-pane where this textobj is displayed") MOUSEREGION (* ; @@ -190,6 +196,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 +215,7 @@  "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") + (TXTAPPENDONLY FLAG) (* ; "Allows updates only at the end of the stream. 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?)") @@ -224,9 +231,9 @@ SEL _ (create SELECTION) SCRATCHSEL _ (create SELECTION) SCRATCHSEL2 _ (create SELECTION) - TEXTLEN _ 0 WRIGHT _ 0 WTOP _ 0 WLEFT _ 0 WBOTTOM _ 0 TXTFILE _ NIL \XDIRTY _ NIL - MOUSEREGION _ 'TEXT THISLINE _ (create THISLINE) - MENUFLG _ NIL FMTSPEC _ TEDIT.DEFAULT.FMTSPEC FORMATTEDP _ NIL INSERTSTRING _ NIL) + TEXTLEN _ 0 WRIGHT _ 0 WTOP _ 0 WLEFT _ 0 WBOTTOM _ 0 MOUSEREGION _ 'TEXT THISLINE _ + (create THISLINE) + FMTSPEC _ TEDIT.DEFAULT.FMTSPEC) (ACCESSFNS TEXTSTREAM ( @@ -247,17 +254,13 @@ (replace (STREAM F1) of DATUM with NEWVALUE)) (* ;  "Runs from PLEN to 0: piece exhausted") - (CURRENTLOOKS (fetch (STREAM F10) of DATUM) - (replace (STREAM F10) of DATUM with NEWVALUE)) - (* ; - "The CHARLOOKS that are currently applicable to characters being taken from the stream.") + (NIL) (* ; "Was CURRENTLOOKS at F10: The CHARLOOKS that are currently applicable to characters being taken from the stream. This is now CARETLOOKS of the TEXTOBJ.") (CURRENTPARALOOKS (fetch (STREAM IMAGEDATA) of DATUM) (REPLACE (STREAM IMAGEDATA) of DATUM with NEWVALUE)) (* ; "The FMTSPEC that is currently applicable to characters being taken from the stream. This was the only residual field of TEXTIMAGEDATA, now gone.") - (LOOKSUPDATEFN (fetch (STREAM F4) of DATUM) + (APPLYLOOKSUPDATEFN (fetch (STREAM F4) of DATUM) (REPLACE (STREAM F4) OF DATUM with NEWVALUE)) - (* ; - "Function to be called at every piece change when line-formatting.") + (* ; "Determines whether to call \TEDIT.FORMATLINE.UPDATELOOKS at every piece change when line-formatting.") (STARTINGCOFFSET (fetch (STREAM F2) of DATUM) (replace (STREAM F2) of DATUM with NEWVALUE))) [TYPE? (AND (type? STREAM DATUM) @@ -303,12 +306,12 @@ '22) (/DECLAREDATATYPE 'TEXTOBJ - '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG POINTER POINTER + '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG 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 - FULLXPOINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG 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 FLAG + POINTER FULLXPOINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG + POINTER POINTER POINTER) '((TEXTOBJ 0 POINTER) (TEXTOBJ 2 POINTER) (TEXTOBJ 4 POINTER) @@ -319,6 +322,7 @@ (TEXTOBJ 14 POINTER) (TEXTOBJ 16 POINTER) (TEXTOBJ 16 (FLAGBITS . 0)) + (TEXTOBJ 16 (FLAGBITS . 16)) (TEXTOBJ 18 POINTER) (TEXTOBJ 20 POINTER) (TEXTOBJ 22 POINTER) @@ -353,6 +357,7 @@ (TEXTOBJ 68 POINTER) (TEXTOBJ 70 POINTER) (TEXTOBJ 70 (FLAGBITS . 0)) + (TEXTOBJ 70 (FLAGBITS . 16)) (TEXTOBJ 72 POINTER) (TEXTOBJ 74 FULLXPOINTER) (TEXTOBJ 76 POINTER) @@ -435,7 +440,6 @@ (SELECTC (PTYPE PC) (THIN.PTYPES T) (UTF8.PTYPE (EQ 1 (FGETPC PC PUTF8BYTESPERCHAR))) - (OBJECT.PTYPE T) NIL))) ) (DECLARE%: EVAL@COMPILE @@ -492,7 +496,8 @@ UTF16LE.PTYPE)) (STRING.PTYPES (LIST THINSTRING.PTYPE FATSTRING.PTYPE)) (BINABLE.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) - (THIN.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)))) + (THIN.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) + (FAT.PTYPES (LIST FATFILE2.PTYPE FATSTRING.PTYPE FATFILE1.PTYPE)))) (DECLARE%: EVAL@COMPILE (RPAQQ THINFILE.PTYPE 0) @@ -526,6 +531,8 @@ (RPAQ THIN.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) +(RPAQ FAT.PTYPES (LIST FATFILE2.PTYPE FATSTRING.PTYPE FATFILE1.PTYPE)) + (CONSTANTS (THINFILE.PTYPE 0) (FATFILE1.PTYPE 1) @@ -542,12 +549,18 @@ UTF16LE.PTYPE)) (STRING.PTYPES (LIST THINSTRING.PTYPE FATSTRING.PTYPE)) (BINABLE.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) - (THIN.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE))) + (THIN.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) + (FAT.PTYPES (LIST FATFILE2.PTYPE FATSTRING.PTYPE FATFILE1.PTYPE))) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \TEXTIMAGEOPS \TEXTFDEV) ) +(DECLARE%: EVAL@COMPILE + +(PUTPROPS PLINES MACRO ((PANE) + (fetch (TEXTWINDOW PLINES) of PANE))) +) (* "END EXPORTED DEFINITIONS") @@ -577,12 +590,12 @@ '22) (/DECLAREDATATYPE 'TEXTOBJ - '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG POINTER POINTER + '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG 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 - FULLXPOINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG 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 FLAG + POINTER FULLXPOINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG + POINTER POINTER POINTER) '((TEXTOBJ 0 POINTER) (TEXTOBJ 2 POINTER) (TEXTOBJ 4 POINTER) @@ -593,6 +606,7 @@ (TEXTOBJ 14 POINTER) (TEXTOBJ 16 POINTER) (TEXTOBJ 16 (FLAGBITS . 0)) + (TEXTOBJ 16 (FLAGBITS . 16)) (TEXTOBJ 18 POINTER) (TEXTOBJ 20 POINTER) (TEXTOBJ 22 POINTER) @@ -627,6 +641,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 +667,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 +742,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 +750,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 +775,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,43 +981,58 @@ (SHOULDNT "UNKNOWN PIECE TYPE")))]) (\TEDIT.TEXTBOUT - [LAMBDA (TSTREAM CHAR) (* ; "Edited 17-Mar-2024 11:59 by rmk") + [LAMBDA (TSTREAM CHAR) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 22-May-2024 21:02 by rmk") + (* ; "Edited 18-May-2024 18:56 by rmk") + (* ; "Edited 10-May-2024 22:37 by rmk") + (* ; "Edited 8-May-2024 22:51 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") - (* ; "Edited 15-Oct-2023 15:31 by rmk") (* ; "Edited 17-Jun-2023 12:18 by rmk") (* ; "Edited 23-Feb-2023 15:26 by rmk") (* ; "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) (* ; - "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)) - - (* ;; "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. ") - - (\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]) + (PROG [(TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + (CHNO (ADD1 (\TEDIT.TEXTGETFILEPTR TSTREAM] + (CL:WHEN [OR (FGETTOBJ TEXTOBJ TXTREADONLY) + (AND (FGETTOBJ TEXTOBJ TXTAPPENDONLY) + (ILESSP CHNO (FGETTOBJ TEXTOBJ TEXTLEN] + (* ; "The generic GETSTREAM missed this, because a textstream that isn't BOTH can't even be filled in. Although perhaps OPENTEXTSTREAM can fill in the stream, then reset the access bit if that's what the props say.") + (ERROR "FILE NOT OPEN" TSTREAM) + (RETURN)) + (if (ILEQ CHNO (FGETTOBJ TEXTOBJ TEXTLEN)) + then (TEDIT.RPLCHARCODE TSTREAM CHNO CHAR) (* ; + "Replace in the middle, add at the end") + elseif (AND (\TEDIT.INSERTCH CHAR CHNO TEXTOBJ NIL T) + (\TEDIT.PRIMARYPANE TEXTOBJ)) + then (\TEDIT.UPDATE.LINES TEXTOBJ 'INSERTION CHNO 1)) + (CL:WHEN NIL + (\TEDIT.TEXTSETFILEPTR TSTREAM CHNO) + (FSETTOBJ TEXTOBJ CARETLOOKS OLDCARETLOOKS)) + + (* ;; ";; 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 potential redisplay, in case the BINS in reformatting change the position.") + + (* ;; "If the selection points to a later character, should the selection be updated, so it selects the same characters?") + + (\TEDIT.TEXTSETFILEPTR TSTREAM CHNO) + CHAR]) (\TEDIT.INSTALL.FILEBUFFER [LAMBDA (TSTREAM PCCHARSLEFT) (* ; "Edited 18-Mar-2024 22:01 by rmk") @@ -1134,6 +1187,12 @@ (OPENTEXTSTREAM [LAMBDA (TEXT WINDOW START END PROPS) + (* ;; "Edited 25-Jun-2024 11:59 by rmk") + + (* ;; "Edited 10-May-2024 22:42 by rmk") + + (* ;; "Edited 6-May-2024 12:38 by rmk") + (* ;; "Edited 31-Mar-2024 11:43 by rmk") (* ;; "Edited 17-Mar-2024 12:05 by rmk") @@ -1199,18 +1258,16 @@ TEXTOBJ) TEXTOBJ))) (\TEDIT.OPENTEXTSTREAM.PROPS TEXTOBJ PROPS) - (SETQ PRIMARYW (WINDOWP (\TEDIT.PRIMARYW TSTREAM))) + (SETQ PRIMARYW (WINDOWP (\TEDIT.PRIMARYPANE TSTREAM))) (if [AND WINDOW (NEQ WINDOW PRIMARYW) (NEQ WINDOW (CAR (WINDOWPROP PRIMARYW 'TYPED-REGION] then (SETQ WINDOW (\TEDIT.CREATEW WINDOW TSTREAM PROPS)) (* ; "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 'CHANGED 1 (FGETTOBJ TEXTOBJ TEXTLEN)) (SETTOBJ TEXTOBJ \DIRTY NIL)) (\TEDIT.REOPENTEXTSTREAM TSTREAM) else (SETQ TSTREAM (\TEDIT.CREATE.TEXTSTREAM PROPS)) @@ -1390,7 +1447,10 @@ (TEDIT.PAGEFORMAT TEXTOBJ (GETTEXTPROP TEXTOBJ 'PAGEFORMAT)))]) (\TEDIT.OPENTEXTSTREAM.SETUP.SEL - [LAMBDA (TSTREAM) (* ; "Edited 15-Mar-2024 13:38 by rmk") + [LAMBDA (TSTREAM) (* ; "Edited 18-May-2024 16:25 by rmk") + (* ; "Edited 12-May-2024 21:40 by rmk") + (* ; "Edited 15-Mar-2024 13:38 by rmk") + (* ; "Edited 29-Apr-2024 12:40 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,17 +1463,17 @@ (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) - (\TEDIT.SHOWSEL SEL NIL) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (CL:UNLESS (EQ SELPROP 'DON'T) (if (type? SELECTION SELPROP) 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") @@ -1442,11 +1502,15 @@ (CL:WHEN (FGETTOBJ TEXTOBJ TXTREADONLY) (* ;  "Don't blink for read-only, but do highlighting") (FSETSEL SEL HASCARET NIL)) - (\TEDIT.SHOWSEL SEL T)) + (\TEDIT.SHOWSEL SEL T TEXTOBJ)) SEL]) (\TEDIT.OPENTEXTSTREAM.WINDOW - [LAMBDA (WINDOW TSTREAM PROPS) (* ; "Edited 17-Mar-2024 12:06 by rmk") + [LAMBDA (WINDOW TSTREAM PROPS) (* ; "Edited 16-Jun-2024 15:40 by rmk") + (* ; "Edited 13-Jun-2024 17:57 by rmk") + (* ; "Edited 19-May-2024 00:26 by rmk") + (* ; "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 +1523,12 @@ (FILEPTR (\TEDIT.TEXTGETFILEPTR TSTREAM))) (if WINDOW then (\TEDIT.WINDOW.SETUP WINDOW TSTREAM PROPS) - (\TEDIT.UPDATE.SCREEN TEXTOBJ) + (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) + NIL TEXTOBJ) + (\TEDIT.FIXSEL (FGETTOBJ TEXTOBJ SEL) + TEXTOBJ) + (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) + T TEXTOBJ) (SETTOBJ TEXTOBJ \DIRTY NIL) (CL:IF (FGETTOBJ TEXTOBJ TXTREADONLY) (for CARET in (GETTOBJ TEXTOBJ CARET) do (\TEDIT.UPCARET CARET)) @@ -1472,7 +1541,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 +1565,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) @@ -1547,7 +1618,8 @@ TSTREAM]) (\TEDIT.REOPEN.STREAM - [LAMBDA (TSTREAM PIECESTREAM) (* ; "Edited 16-Mar-2024 10:03 by rmk") + [LAMBDA (TSTREAM PIECESTREAM) (* ; "Edited 14-May-2024 18:00 by rmk") + (* ; "Edited 16-Mar-2024 10:03 by rmk") (* ; "Edited 23-Jan-2024 00:28 by rmk") (* ; "Edited 9-Nov-2023 17:05 by rmk") (* ; "Edited 8-Sep-2023 00:23 by rmk") @@ -1561,28 +1633,31 @@ NEWSTREAM) (CL:UNLESS PIECESTREAM (SETQ PIECESTREAM (FGETTOBJ TEXTOBJ TXTFILE))) - [SETQ NEWSTREAM (OPENSTREAM PIECESTREAM 'INPUT NIL `((TYPE TEXT) - (FORMAT ,(STREAMPROP PIECESTREAM - :EXTERNAL-FORMAT] + (if (\GETSTREAM PIECESTREAM 'INPUT T) + then PIECESTREAM + else [SETQ NEWSTREAM (OPENSTREAM PIECESTREAM 'INPUT NIL + `((TYPE TEXT) + (FORMAT ,(STREAMPROP PIECESTREAM :EXTERNAL-FORMAT] - (* ;; "Run thru the pieces, correcting any that used this stream to use the new one:") + (* ;; "Run thru the pieces, correcting any that used this stream to use the new one:") - (for PC inpieces (\TEDIT.FIRSTPIECE TEXTOBJ) when (EQ (PCONTENTS PC) - PIECESTREAM) - do (FSETPC PC PCONTENTS NEWSTREAM)) + (for PC inpieces (\TEDIT.FIRSTPIECE TEXTOBJ) when (EQ (PCONTENTS PC) + PIECESTREAM) + do (FSETPC PC PCONTENTS NEWSTREAM)) - (* ;; "Check the TXTFILE, and if it uses the closed stream, fix it as well:") + (* ;; "Check the TXTFILE, and if it uses the closed stream, fix it as well:") - (CL:WHEN (EQ (FGETTOBJ TEXTOBJ TXTFILE) - PIECESTREAM) - (FSETTOBJ TEXTOBJ TXTFILE NEWSTREAM)) + (CL:WHEN (EQ (FGETTOBJ TEXTOBJ TXTFILE) + PIECESTREAM) + (FSETTOBJ TEXTOBJ TXTFILE NEWSTREAM)) - (* ;; "Return the new value for the stream:") + (* ;; "Return the new value for the stream:") - NEWSTREAM]) + NEWSTREAM]) (\TEDIT.TEXTINIT - [LAMBDA NIL (* ; "Edited 19-Mar-2024 18:16 by rmk") + [LAMBDA NIL (* ; "Edited 22-May-2024 14:53 by rmk") + (* ; "Edited 19-Mar-2024 18:16 by rmk") (* ; "Edited 17-Mar-2024 12:25 by rmk") (* ; "Edited 10-Mar-2024 13:50 by rmk") (* ; "Edited 7-Mar-2023 15:01 by rmk") @@ -1657,11 +1732,12 @@ (replace (STREAM ACCESS) of STREAM with 'BOTH) STREAM] - SETFILEINFO _ (FUNCTION NILL) + SETFILEINFO _ (FUNCTION \TEDIT.TEXTSETFILEINFO) BACKFILEPTR _ (FUNCTION \TEDIT.TEXTBACKFILEPTR) SETFILEPTR _ (FUNCTION \TEDIT.TEXTSETFILEPTR) PEEKBIN _ (FUNCTION \TEDIT.TEXTPEEKBIN) GETEOFPTR _ (FUNCTION \TEDIT.TEXTGETEOFPTR) + SETEOFPTR _ (FUNCTION \TEDIT.TEXTSETEOFPTR) GETFILEPTR _ (FUNCTION \TEDIT.TEXTGETFILEPTR) EOFP _ (FUNCTION \TEDIT.TEXTEOFP) FDBINABLE _ T @@ -1675,7 +1751,7 @@ (LET ((STREAM (STREAM-ERROR-STREAM CONDITION))) (COND [(AND (BOUNDP 'ERRORPOS) - (TEXTSTREAMP STREAM)) (* ; + (TEXTSTREAMP STREAM)) (* ;  "This happened in the error handler, and it happened to a TEdit stream, so try the fix:") (LET ((XCL::RESULT (\TEDIT.REOPENTEXTSTREAM STREAM))) (CL:WHEN XCL::RESULT @@ -1696,7 +1772,8 @@ (DEFINEQ (\TEDIT.TTYBOUT - [LAMBDA (TSTREAM BYTE) (* ; "Edited 17-Mar-2024 11:39 by rmk") + [LAMBDA (TSTREAM BYTE) (* ; "Edited 24-Jun-2024 00:05 by rmk") + (* ; "Edited 17-Mar-2024 11:39 by rmk") (* ; "Edited 18-Mar-2023 20:08 by rmk") (* ; "Edited 31-May-91 14:18 by jds") @@ -1706,7 +1783,7 @@ (LET ((TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) (if (EQ BYTE ERASECHARCODE) - then (\TEDIT.CHARDELETE TEXTOBJ (fetch (TEXTOBJ SEL) of TEXTOBJ)) + then (\TEDIT.CHARDELETE TSTREAM (fetch (TEXTOBJ SEL) of TEXTOBJ)) elseif (EQ IGNORE.CCE (fetch CCECHO of (\SYNCODE (OR (fetch (TEXTOBJ TXTTERMSA) of TEXTOBJ) \PRIMTERMSA) @@ -1784,8 +1861,27 @@ (GETTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM) TEXTLEN]) +(\TEDIT.TEXTSETEOFPTR + [LAMBDA (TSTREAM LEN) (* ; "Edited 23-May-2024 08:33 by rmk") + + (* ;; "Eliminate all trailing bytes so the file contains the first LEN characters") + + (LET* [(TEXTOBJ (ffetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + (TEXTLEN (FGETTOBJ TEXTOBJ TEXTLEN)) + (SEL (FGETTOBJ TEXTOBJ SEL)) + (TAILSEL (\TEDIT.COPYSEL SEL (FGETTOBJ TEXTOBJ SCRATCHSEL] + (CL:UNLESS (IGEQ LEN TEXTLEN) + (RESETLST + [RESETSAVE (FGETTOBJ TEXTOBJ TXTAPPENDONLY) + `(PROGN (PUTTEXTPROP ,TEXTOBJ 'APPEND OLDVALUE] + (FSETTOBJ TEXTOBJ TXTAPPENDONLY NIL) + (\TEDIT.UPDATE.SEL TAILSEL (ADD1 LEN) + (IDIFFERENCE TEXTLEN LEN)) + (\TEDIT.DELETE TEXTOBJ TAILSEL)))]) + (\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 +1899,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) @@ -1821,6 +1923,16 @@ (IDIFFERENCE (PLEN PC) PCCHARSLEFT]) +(\TEDIT.TEXTSETFILEINFO + [LAMBDA (TSTREAM ATTRIBUTE VALUE DEVICE) (* ; "Edited 22-May-2024 14:58 by rmk") + (LET ((TEXTOBJ (ffetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + SEL) + (SELECTQ ATTRIBUTE + (LENGTH (* ; + "Delete the tail if LENGTH is shrinking") + (\TEDIT.TEXTSETEOFPTR TSTREAM VALUE)) + NIL]) + (\TEDIT.TEXTOPENF [LAMBDA (TSTREAM ACCESS) (* ; "Edited 16-Mar-2024 10:03 by rmk") (* ; "Edited 7-Dec-2023 21:01 by rmk") @@ -1869,7 +1981,8 @@ (\TEDIT.INSTALL.PIECE TSTREAM PC (- CH# START-OF-PIECE)))]) (\TEDIT.TEXTDSPXPOSITION - [LAMBDA (TSTREAM XPOSITION) (* ; "Edited 17-Mar-2024 12:15 by rmk") + [LAMBDA (TSTREAM XPOSITION) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 17-Mar-2024 12:15 by rmk") (* ; "Edited 3-Jan-2001 17:27 by rmk:") (* ;  "Edited 24-Oct-88 23:09 by rmk:; Edited 26-Sep-85 16:30 by ajb:") @@ -1877,7 +1990,7 @@ (* ;;  "Simply returns the XPOSITION of the primary window's display stream, this is a read-only function") - (LET ((WINDOW (\TEDIT.PRIMARYW TSTREAM))) (* ; + (LET ((WINDOW (\TEDIT.PRIMARYPANE TSTREAM))) (* ;  "If there is no window, estimate from character position") (CL:IF WINDOW (DSPXPOSITION NIL WINDOW) @@ -1886,13 +1999,14 @@ (POSITION TSTREAM)))]) (\TEDIT.TEXTDSPYPOSITION - [LAMBDA (TSTREAM YPOSITION) (* ; "Edited 17-Mar-2024 12:15 by rmk") + [LAMBDA (TSTREAM YPOSITION) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 17-Mar-2024 12:15 by rmk") (* ; "Edited 31-May-91 13:59 by jds") (* ;;  "Simply returns the YPOSITION of the primary window's display stream, this is a read-only function") - (LET ((WINDOW (\TEDIT.PRIMARYW TSTREAM))) + (LET ((WINDOW (\TEDIT.PRIMARYPANE TSTREAM))) (IF WINDOW THEN (DSPYPOSITION NIL WINDOW) ELSEIF (AND \#DISPLAYLINES (NEQ \CURRENTDISPLAYLINE -1)) @@ -2002,7 +2116,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 +2126,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 +2166,9 @@ T)))]) (\TEDIT.INSERTCH - [LAMBDA (CH CH# TEXTOBJ PARALAST) (* ; "Edited 17-Mar-2024 12:41 by rmk") + [LAMBDA (CH CH# TEXTOBJ PARALAST NOHISTORY) (* ; "Edited 18-May-2024 19:04 by rmk") + (* ; "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 +2267,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 +2323,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 +2333,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 +2419,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 +2434,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]) ) @@ -2336,7 +2453,9 @@ (DEFINEQ (\TEDIT.INSTALL.PIECE - [LAMBDA (TSTREAM PC CHOFFSET) (* ; "Edited 18-Mar-2024 22:26 by rmk") + [LAMBDA (TSTREAM PC CHOFFSET) (* ; "Edited 18-May-2024 22:39 by rmk") + (* ; "Edited 9-May-2024 22:34 by rmk") + (* ; "Edited 18-Mar-2024 22:26 by rmk") (* ; "Edited 1-Feb-2024 00:23 by rmk") (* ; "Edited 21-Jan-2024 13:00 by rmk") (* ; "Edited 5-Jan-2024 10:30 by rmk") @@ -2350,27 +2469,22 @@ (* ;; "Makes PC be the current piece in TSTREAM. set up so that the next character is at CHOFFSET relative to the start of the piece. ") - (* ;; "Note that, since we are setting up the TSTREAM looks here, the LOOKSUPDATEFN doesn't need to do that part.") - (* ;; "SHOULD PARTS OF THIS BE UNINTERRUPTABLE? ") (CL:WHEN PC (PROG (PCCHARSLEFT (PCONTENTS (PCONTENTS PC)) - (PLEN (PLEN PC)) - (LOOKSUPDATEFN (ffetch (TEXTSTREAM LOOKSUPDATEFN) of TSTREAM))) + (PLEN (PLEN PC))) - (* ;; "The LOOKSUPDATEFN is non-NIL only for calls from \FORMATLINE and \TEDIT.HARDCOPY.FORMATLINE. It updates their formatting variables and skips invisible pieces. ") + (* ;; "Install PC in TSTREAM. ") - (if LOOKSUPDATEFN - then (SETQ PC (APPLY* LOOKSUPDATEFN TSTREAM PC)) - (CL:UNLESS PC (* ; "Invisible to the end?") - (RETURN NIL)) - else (freplace (TEXTSTREAM CURRENTLOOKS) of TSTREAM with (PLOOKS PC)) - (freplace (TEXTSTREAM CURRENTPARALOOKS) of TSTREAM with (PPARALOOKS PC))) + (freplace (TEXTSTREAM PIECE) of TSTREAM with PC) + (CL:WHEN (ffetch (TEXTSTREAM APPLYLOOKSUPDATEFN) of TSTREAM) - (* ;; "Install PC and its looks in TSTREAM.") + (* ;; "Called from \TEDIT.FORMATLINE to update formatting variables at piece boundaries. Otherwise, the call is from one of the external-format functions. Early versions of the code set CARETLOOKS as pieces were encountered, but it makes more sense for CARETLOOKS to change only by explicit movement of the caret.") - (freplace (TEXTSTREAM PIECE) of TSTREAM with PC) + (SETQ PC (\TEDIT.FORMATLINE.UPDATELOOKS TSTREAM PC)) + (CL:UNLESS PC (* ; "Invisible to the end?") + (RETURN NIL))) (* ;; "") @@ -2392,14 +2506,6 @@ with (IPLUS (ffetch (STRINGP OFFST) of PCONTENTS) PLEN))) (OBJECT.PTYPE (freplace (STREAM CBUFSIZE) of TSTREAM with 1)) - (SUBSTREAM.PTYPE (* ; - "Maybe just set PC to the piece of the (freplace (STREAM BINABLE) of TSTREAM with NIL)substream?") - (CL:UNLESS LOOKSUPDATEFN - (freplace (TEXTSTREAM CURRENTPARALOOKS) of TSTREAM - with (ffetch (TEXTSTREAM CURRENTPARALOOKS) of PCONTENTS)) - (freplace (TEXTSTREAM CURRENTLOOKS) of TSTREAM with (ffetch (TEXTSTREAM - CURRENTLOOKS) - of PCONTENTS)))) NIL) (freplace (STREAM BINABLE) of TSTREAM with (PBINABLE PC)) (freplace (TEXTSTREAM STARTINGCOFFSET) of TSTREAM with (ffetch (STREAM COFFSET) @@ -2417,7 +2523,11 @@ (DEFINEQ (GETTEXTPROP - [LAMBDA (TEXTOBJ PROP) (* ; "Edited 20-Mar-2024 10:58 by rmk") + [LAMBDA (TSTREAM PROP) (* ; "Edited 25-May-2024 11:14 by rmk") + (* ; "Edited 22-May-2024 12:04 by rmk") + (* ; "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 +2536,34 @@ (* ;; "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) + (CL:WHEN (FGETTOBJ TEXTOBJ TXTREADONLY) + (CL:IF (FGETTOBJ TEXTOBJ TXTREADONLYQUIET) + 'QUIET + T))) + ((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)) + (APPEND (FGETTOBJ TEXTOBJ TXTAPPENDONLY)) + (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 25-May-2024 11:10 by rmk") + (* ; "Edited 22-May-2024 12:00 by rmk") + (* ; "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 +2574,47 @@ (* ;; "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 (* ; - "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 - (* ;; + (FSETTOBJ TEXTOBJ EDITPROPS (LIST PROP NIL))) + (PROG1 (GETTEXTPROP TEXTOBJ PROP) + (SELECTQ PROP + ((READONLY READ-ONLY) + (FSETTOBJ TEXTOBJ TXTREADONLY VALUE) + (FSETTOBJ TEXTOBJ TXTREADONLYQUIET (EQ 'QUIET VALUE))) + ((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))) + (APPEND (FSETTOBJ TEXTOBJ TXTAPPENDONLY VALUE)) + 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 +2639,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 (34814 64462 (\TEDIT.TEXTBIN 34824 . 45516) (\TEDIT.TEXTPEEKBIN 45518 . 50955) ( +\TEDIT.TEXTBACKFILEPTR 50957 . 56517) (\TEDIT.TEXTBOUT 56519 . 60458) (\TEDIT.INSTALL.FILEBUFFER 60460 + . 64460)) (65360 69291 (\TEDIT.TEXTOUTCHARFN 65370 . 66926) (\TEDIT.TEXTINCCODEFN 66928 . 67667) ( +\TEDIT.TEXTBACKCCODEFN 67669 . 68261) (\TEDIT.TEXTFORMATBYTESTREAM 68263 . 68849) ( +\TEDIT.TEXTFORMATBYTESTRING 68851 . 69289)) (69338 79912 (OPENTEXTSTREAM 69348 . 75648) ( +COPYTEXTSTREAM 75650 . 79135) (TEDIT.STREAMCHANGEDP 79137 . 79439) (TXTFILE 79441 . 79910)) (79913 +106450 (\TEDIT.REOPENTEXTSTREAM 79923 . 81275) (\TEDIT.OPENTEXTSTREAM.PIECES 81277 . 85657) ( +\TEDIT.OPENTEXTSTREAM.PROPS 85659 . 86715) (\TEDIT.OPENTEXTSTREAM.SETUP.SEL 86717 . 90560) ( +\TEDIT.OPENTEXTSTREAM.WINDOW 90562 . 92822) (\TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS 92824 . 94837) ( +\TEDIT.OPENTEXTFILE 94839 . 96438) (\TEDIT.CREATE.TEXTSTREAM 96440 . 97374) (\TEDIT.REOPEN.STREAM +97376 . 99712) (\TEDIT.TEXTINIT 99714 . 106448)) (106488 107716 (\TEDIT.TTYBOUT 106498 . 107714)) ( +107834 125884 (\TEDIT.TEXTCLOSEF 107844 . 109168) (\TEDIT.TEXTDSPFONT 109170 . 110140) ( +\TEDIT.TEXTEOFP 110142 . 111897) (\TEDIT.TEXTGETEOFPTR 111899 . 112222) (\TEDIT.TEXTSETEOFPTR 112224 + . 113100) (\TEDIT.TEXTGETFILEPTR 113102 . 115824) (\TEDIT.TEXTSETFILEINFO 115826 . 116334) ( +\TEDIT.TEXTOPENF 116336 . 117267) (\TEDIT.TEXTSETEOF 117269 . 117885) (\TEDIT.TEXTSETFILEPTR 117887 . +119928) (\TEDIT.TEXTDSPXPOSITION 119930 . 120947) (\TEDIT.TEXTDSPYPOSITION 120949 . 121690) ( +\TEDIT.TEXTLEFTMARGIN 121692 . 122069) (\TEDIT.TEXTRIGHTMARGIN 122071 . 125033) ( +\TEDIT.TEXTDSPCHARWIDTH 125035 . 125339) (\TEDIT.TEXTDSPSTRINGWIDTH 125341 . 125647) ( +\TEDIT.TEXTDSPLINEFEED 125649 . 125882)) (126931 146644 (\TEDIT.DELETE.SELPIECES 126941 . 130133) ( +\TEDIT.INSERTCH 130135 . 137604) (\TEDIT.INSERTCH.HISTORY 137606 . 140692) (\TEDIT.INSERTEOL 140694 . +142519) (\TEDIT.INSERTCH.INSERTION 142521 . 145358) (\TEDIT.INSERTCH.EXTEND 145360 . 146642)) (146645 +148232 (\SETUPGETCH 146655 . 148230)) (148290 152631 (\TEDIT.INSTALL.PIECE 148300 . 152629)) (152669 +158712 (GETTEXTPROP 152679 . 154853) (PUTTEXTPROP 154855 . 158098) (TEXTPROP 158100 . 158710))))) STOP diff --git a/library/tedit/TEDIT-STREAM.LCOM b/library/tedit/TEDIT-STREAM.LCOM index 93369ffe9baf94af5e76b720447b2d53b5b33387..9cac0ec9f1afb7c1734d9b4fbbcc11aea9c567cb 100644 GIT binary patch delta 6119 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 AcmMzZ diff --git a/library/tedit/TEDIT-WINDOW b/library/tedit/TEDIT-WINDOW index ae2d8e494..55454bb92 100644 --- a/library/tedit/TEDIT-WINDOW +++ b/library/tedit/TEDIT-WINDOW @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "27-Mar-2024 15:23:52" {WMEDLEY}tedit>TEDIT-WINDOW.;407 201953 +(FILECREATED "25-Jun-2024 15:54:24" {WMEDLEY}tedit>TEDIT-WINDOW.;500 207254 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.PROCEXITFN \TEDIT.BUTTONEVENTFN) + :CHANGES-TO (FNS \TEDIT.RESHAPEFN \TEDIT.CURSORMOVEDFN) - :PREVIOUS-DATE "21-Mar-2024 21:27:34" {WMEDLEY}TEDIT>TEDIT-WINDOW.;405) + :PREVIOUS-DATE "25-Jun-2024 13:04:38" {WMEDLEY}tedit>TEDIT-WINDOW.;497) (PRETTYCOMPRINT TEDIT-WINDOWCOMS) @@ -20,12 +20,11 @@ (FNS \TEDIT.CREATEW \TEDIT.WINDOW.SETUP \TEDIT.MINIMAL.WINDOW.SETUP \TEDIT.ADD.CARET \TEDIT.CLEARPANE) (FNS \TEDIT.CURSORMOVEDFN \TEDIT.CURSOROUTFN \TEDIT.ACTIVE.WINDOWP \TEDIT.EXPANDFN - \TEDIT.MAINW \TEDIT.PRIMARYW \TEDIT.NEWREGIONFN \TEDIT.SET.WINDOW.EXTENT + \TEDIT.MAINW \TEDIT.PRIMARYPANE \TEDIT.NEWREGIONFN \TEDIT.SET.WINDOW.EXTENT \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.CARET \TEDIT.SCROLL.SHOWSEL \TEDIT.WHERE.SEL + \TEDIT.WHERE.SEL1 \TEDIT.VISIBLECHARP) + (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") @@ -332,14 +334,15 @@ WINDOW]) (\TEDIT.WINDOW.SETUP - [LAMBDA (PANE TSTREAM PROPS AFTERPANE FIRSTLINE) (* ; "Edited 15-Mar-2024 13:36 by rmk") + [LAMBDA (PANE TSTREAM PROPS AFTERPANE LCHAR1) (* ; "Edited 21-Jun-2024 22:36 by rmk") + (* ; "Edited 17-Jun-2024 09:37 by rmk") + (* ; "Edited 18-May-2024 16:50 by rmk") + (* ; "Edited 12-May-2024 21:35 by rmk") (* ; "Edited 9-Feb-2024 10:51 by rmk") + (* ; "Edited 15-Mar-2024 13:36 by rmk") (* ; "Edited 29-Jan-2024 17:10 by rmk") (* ; "Edited 11-Jan-2024 19:33 by rmk") - (* ; "Edited 2-Jan-2024 19:15 by rmk") (* ; "Edited 12-Oct-2023 23:41 by rmk") - (* ; "Edited 10-Oct-2023 00:30 by rmk") - (* ; "Edited 4-Oct-2023 22:59 by rmk") (* ; "Edited 10-May-2023 23:47 by rmk") (* ; "Edited 5-Nov-2022 23:13 by rmk") (* ; "Edited 11-Jun-99 15:48 by rmk:") @@ -365,16 +368,19 @@ (* ;; "") (\TEDIT.CLEARPANE PANE) - (SETQ PLINE (\TEDIT.CREATEPLINE TEXTOBJ PANE FIRSTLINE)) + [SETQ PLINE (\TEDIT.CREATEPLINE TEXTOBJ PANE (AND LCHAR1 (SUB1 LCHAR1] (\TEDIT.ADD.CARET TEXTOBJ PANE AFTERPANE) (SETQ SEL (TEXTSEL TEXTOBJ)) - (\TEDIT.SHOWSEL SEL NIL (AND AFTERPANE PANE)) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ (AND AFTERPANE PANE)) (\TEDIT.FIXSEL SEL TEXTOBJ NIL (AND AFTERPANE PANE)) (FSETSEL SEL HASCARET (NOT (FGETTOBJ TEXTOBJ TXTREADONLY))) - (\TEDIT.SHOWSEL SEL T (AND AFTERPANE PANE]) + (\TEDIT.LINES.BELOW NIL NIL PANE TEXTOBJ) + (\TEDIT.SHOWSEL SEL T TEXTOBJ (AND AFTERPANE PANE]) (\TEDIT.MINIMAL.WINDOW.SETUP - [LAMBDA (WINDOW TSTREAM PROPS AFTERPANE) (* ; "Edited 20-Mar-2024 11:22 by rmk") + [LAMBDA (WINDOW TSTREAM PROPS AFTERPANE) (* ; "Edited 25-Jun-2024 00:04 by rmk") + (* ; "Edited 13-Jun-2024 21:51 by rmk") + (* ; "Edited 20-Mar-2024 11:22 by rmk") (* ; "Edited 22-Feb-2024 23:14 by rmk") (* ; "Edited 26-Jan-2024 13:14 by rmk") (* ; "Edited 20-Jan-2024 23:24 by rmk") @@ -427,16 +433,16 @@ (FGETTOBJ TEXTOBJ DISPLAYCACHEDS)) (* ; "Remember its size, too.") [COND ((SETQ PROP (LISTGET PROPS 'REGION)) (* ; "Use the callers subregion") - (FSETTOBJ TEXTOBJ WTOP (fetch PTOP of PROP)) - (FSETTOBJ TEXTOBJ WRIGHT (fetch RIGHT of PROP)) - (FSETTOBJ TEXTOBJ WBOTTOM (fetch BOTTOM of PROP)) - (FSETTOBJ TEXTOBJ WLEFT (fetch LEFT of PROP))) + (FSETTOBJ TEXTOBJ WTOP (fetch (REGION PTOP) of PROP)) + (FSETTOBJ TEXTOBJ WRIGHT (fetch (REGION RIGHT) of PROP)) + (FSETTOBJ TEXTOBJ WBOTTOM (fetch (REGION BOTTOM) of PROP)) + (FSETTOBJ TEXTOBJ WLEFT (fetch (REGION LEFT) of PROP))) (T (* ;  "Otherwise, default to the whole window") - (FSETTOBJ TEXTOBJ WLEFT (fetch LEFT of (DSPCLIPPINGREGION NIL DS))) - (FSETTOBJ TEXTOBJ WBOTTOM (fetch BOTTOM of (DSPCLIPPINGREGION NIL DS))) - (FSETTOBJ TEXTOBJ WTOP (fetch HEIGHT of (DSPCLIPPINGREGION NIL DS))) - (FSETTOBJ TEXTOBJ WRIGHT (fetch WIDTH of (DSPCLIPPINGREGION NIL DS] + (FSETTOBJ TEXTOBJ WLEFT (fetch (REGION LEFT) of (DSPCLIPPINGREGION NIL DS))) + (FSETTOBJ TEXTOBJ WBOTTOM (fetch (REGION BOTTOM) of (DSPCLIPPINGREGION NIL DS))) + (FSETTOBJ TEXTOBJ WTOP (fetch (REGION HEIGHT) of (DSPCLIPPINGREGION NIL DS))) + (FSETTOBJ TEXTOBJ WRIGHT (fetch (REGION WIDTH) of (DSPCLIPPINGREGION NIL DS] (WINDOWPROP WINDOW 'CURSORMOVEDFN (FUNCTION \TEDIT.CURSORMOVEDFN)) (WINDOWPROP WINDOW 'CURSOROUTFN (FUNCTION \TEDIT.CURSOROUTFN)) (WINDOWPROP WINDOW 'BUTTONEVENTFN (FUNCTION \TEDIT.BUTTONEVENTFN)) @@ -517,7 +523,9 @@ (DEFINEQ (\TEDIT.CURSORMOVEDFN - [LAMBDA (PANE) (* ; "Edited 20-Mar-2024 11:00 by rmk") + [LAMBDA (PANE) (* ; "Edited 25-Jun-2024 14:53 by rmk") + (* ; "Edited 13-Jun-2024 22:29 by rmk") + (* ; "Edited 20-Mar-2024 11:00 by rmk") (* ; "Edited 26-Jan-2024 12:48 by rmk") (* ; "Edited 1-Oct-2022 16:07 by rmk") @@ -535,7 +543,7 @@ (CL:UNLESS (INSIDE? CURSORREG X Y) [if (AND (IGEQ X (SETQ LEFT (IDIFFERENCE (FGETTOBJ TEXTOBJ WRIGHT) \TEDIT.OP.WIDTH))) - (IGEQ Y (IPLUS (FGETTOBJ TEXTOBJ WBOTTOM) + (IGEQ Y (IPLUS (fetch (REGION BOTTOM) of (DSPCLIPPINGREGION NIL PANE)) \TEDIT.OP.BOTTOM)) (NOT (FGETTOBJ TEXTOBJ TXTNOTSPLITTABLE))) then @@ -544,8 +552,8 @@ (CURSOR \TEDIT.SPLITCURSOR) (FSETTOBJ TEXTOBJ MOUSEREGION 'PANE) (* ;  "PANE just signals \TEDIT.BUTTONEVENTFN to do a split operation.") - (replace LEFT of CURSORREG with LEFT) - (replace WIDTH of CURSORREG with \TEDIT.OP.WIDTH) + (replace (REGION LEFT) of CURSORREG with LEFT) + (replace (REGION WIDTH) of CURSORREG with \TEDIT.OP.WIDTH) else (* ;; "Not in the split region. Are we in the line-select region on the left?") @@ -568,18 +576,20 @@ (CURSOR \TEDIT.LINECURSOR) (FSETTOBJ TEXTOBJ MOUSEREGION 'LINE) - (replace LEFT of CURSORREG with 0) - (replace WIDTH of CURSORREG with LEFT) + (replace (REGION LEFT) of CURSORREG with 0) + (replace (REGION WIDTH) of CURSORREG with LEFT) else (* ;;  "Not in the line-select region, not in the split region, must be the main text. ") (CURSOR T) (FSETTOBJ TEXTOBJ MOUSEREGION 'TEXT) - (replace LEFT of CURSORREG with LEFT) - (replace WIDTH of CURSORREG with (IDIFFERENCE (FGETTOBJ TEXTOBJ WRIGHT) - (IPLUS LEFT - \TEDIT.LINEREGION.WIDTH])]) + (replace (REGION LEFT) of CURSORREG with LEFT) + (replace (REGION WIDTH) of CURSORREG with (IDIFFERENCE (FGETTOBJ TEXTOBJ + WRIGHT) + (IPLUS LEFT + \TEDIT.LINEREGION.WIDTH + ])]) (\TEDIT.CURSOROUTFN [LAMBDA (PANE) (* ; "Edited 20-Jul-2023 20:32 by rmk") @@ -639,11 +649,12 @@ (RETURN M)) else (RETURN PANE]) -(\TEDIT.PRIMARYW - [LAMBDA (TSTREAM) (* ; "Edited 19-Sep-2023 08:21 by rmk") +(\TEDIT.PRIMARYPANE + [LAMBDA (TSTREAM) (* ; "Edited 25-Jun-2024 11:57 by rmk") + (* ; "Edited 19-Sep-2023 08:21 by rmk") (* ; "Edited 30-May-91 23:33 by jds") - (* ;; "This returns the first pane in the list of panes associated with TSTREAM. Presumably this is the original pane, before any splitting. Note that this is different than \TEDIT.MAINW: that maps from attached windows (e.g. menus) back to a pane that they are attached to (presumably the first/original pane).") + (* ;; "This returns the first pane in the list of panes associated with TSTREAM, the original pane, before any splitting. Note that this is different than \TEDIT.MAINW: that maps from attached windows (e.g. menus) back to the primary pane.") (CAR (MKLIST (GETTOBJ (TEXTOBJ TSTREAM) \WINDOW]) @@ -687,7 +698,8 @@ (RETURN MOVINGPOINT]) (\TEDIT.SET.WINDOW.EXTENT - [LAMBDA (TEXTOBJ PANE) (* ; "Edited 11-Jan-2024 19:29 by rmk") + [LAMBDA (TEXTOBJ PANE) (* ; "Edited 13-Jun-2024 22:38 by rmk") + (* ; "Edited 11-Jan-2024 19:29 by rmk") (* ; "Edited 20-Nov-2023 11:09 by rmk") (* ; "Edited 3-Nov-2023 12:09 by rmk") (* ; "Edited 22-Sep-2023 19:57 by rmk") @@ -705,8 +717,8 @@ (LET (FIRSTLINE LASTLINE PHEIGHT PBOTTOM TOPCHAR BOTCHAR EXTHEIGHT EXTBOT YBOT (TEXTLEN (FGETTOBJ TEXTOBJ TEXTLEN)) (PREG (DSPCLIPPINGREGION NIL PANE))) - (SETQ PHEIGHT (fetch HEIGHT of PREG)) - (SETQ PBOTTOM (fetch BOTTOM of PREG)) + (SETQ PHEIGHT (fetch (REGION HEIGHT) of PREG)) + (SETQ PBOTTOM (fetch (REGION BOTTOM) of PREG)) (* ;; "First visible line") @@ -758,7 +770,7 @@ (WINDOWPROP PANE 'EXTENT (create REGION BOTTOM _ EXTBOT HEIGHT _ (IMAX 1 EXTHEIGHT) - WIDTH _ (fetch WIDTH of PREG) + WIDTH _ (fetch (REGION WIDTH) of PREG) LEFT _ 0)))))]) (\TEDIT.SHRINK.ICONCREATE @@ -854,14 +866,14 @@ (DEFINEQ (\TEDIT.BUTTONEVENTFN - [LAMBDA (PANE) (* ; "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") + [LAMBDA (PANE) (* ; "Edited 13-Jun-2024 23:19 by rmk") + (* ; "Edited 25-May-2024 13:49 by rmk") + (* ; "Edited 18-May-2024 16:22 by rmk") + (* ; "Edited 12-May-2024 16:43 by rmk") + (* ; "Edited 29-Apr-2024 13:43 by rmk") + (* ; "Edited 23-Apr-2024 08:53 by rmk") + (* ; "Edited 27-Mar-2024 12:25 by rmk") (* ; "Edited 24-Feb-2024 15:29 by rmk") - (* ; "Edited 22-Feb-2024 14:57 by rmk") - (* ; "Edited 19-Feb-2024 14:50 by rmk") - (* ; "Edited 17-Feb-2024 15:40 by rmk") (* ; "Edited 20-Jul-2023 21:52 by rmk") (* ; "Edited 9-Apr-2023 22:59 by rmk") (* ; "Edited 19-Sep-2021 22:58 by rmk:") @@ -879,14 +891,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 +924,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,16 +933,16 @@ (* ; "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) (\TEDIT.COPYSEL (FGETTOBJ TEXTOBJ SEL) SOURCESEL) (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) - NIL) + NIL TEXTOBJ) (\TEDIT.COPYSEL (FGETTOBJ TEXTOBJ SEL) OSEL)) (\TEDIT.SET.SEL.LOOKS SOURCESEL SELOPERATION)) @@ -962,14 +974,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 +1004,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) @@ -1002,7 +1014,7 @@ (* ;;  "The selfn vetoed this selection, so mark it un-set and break out of the polling loop.") - (\TEDIT.SHOWSEL SOURCESEL NIL) + (\TEDIT.SHOWSEL SOURCESEL NIL TEXTOBJ) (FSETSEL SOURCESEL SET NIL) (RETURN)) (CL:WHEN OSEL @@ -1024,7 +1036,7 @@ (* ;; "There is an old selection around, but it is VOLATILE -- i.e., it shouldn't last longer than something is pointing at it. Turn it off.") - (\TEDIT.SHOWSEL OSEL NIL) + (\TEDIT.SHOWSEL OSEL NIL TEXTOBJ) (FSETSEL OSEL SET NIL))) (CL:WHEN SOURCESEL (* ; "Maybe clicked in the boonies?") (SETQ OSEL (\TEDIT.COPYSEL SOURCESEL OSEL))) @@ -1043,14 +1055,17 @@ (* ;  "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") - (\TEDIT.SHOWSEL SOURCESEL NIL) + (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 TEXTOBJ) (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) - NIL) + NIL TEXTOBJ) (\TEDIT.SHOWSEL (FGETTOBJ TEXTOBJ SEL) - T) + T TEXTOBJ) (RETURN)) (CL:UNLESS (FGETTOBJ TEXTOBJ MENUFLG) (* ;  "Globals are documented, unfortunately. ") @@ -1059,7 +1074,7 @@ (* ;; "If this is a normal selection, then the display now corresponds to SOURCESEL and is now correctly displayed. Otherwise, the selection in this TEXTOBJ is only a transient for this operation, turn it off here. ") - (\TEDIT.SHOWSEL SOURCESEL NIL)) + (\TEDIT.SHOWSEL SOURCESEL NIL TEXTOBJ)) (* ;; "Execute the SELOPERATION in the TTY process (maybe here)") @@ -1071,12 +1086,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 +1104,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 +1166,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,18 +1202,19 @@ (* ;; "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]) (\TEDIT.BUTTONEVENTFN.INTITLE - [LAMBDA (Y PANE TEXTOBJ) (* ; "Edited 27-Jan-2024 10:42 by rmk") + [LAMBDA (Y PANE TEXTOBJ) (* ; "Edited 13-Jun-2024 22:10 by rmk") + (* ; "Edited 27-Jan-2024 10:42 by rmk") (* ;; "Special behavior if Y is the title region of PANE?") (LET ((PREG (DSPCLIPPINGREGION NIL PANE)) USERFN) - (CL:WHEN (IGREATERP Y (fetch TOP of PREG)) + (CL:WHEN (IGREATERP Y (fetch (REGION TOP) of PREG)) [COND ((\TEDIT.MOUSESTATE RIGHT) (DOWINDOWCOM PANE)) @@ -1220,27 +1238,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,104 +1325,117 @@ T)]) (\TEDIT.SPLITW - [LAMBDA (OLDPANE Y) (* ; "Edited 20-Mar-2024 11:01 by rmk") - (* ; "Edited 15-Mar-2024 22:00 by rmk") + [LAMBDA (OLDPANE Y) (* ; "Edited 21-Jun-2024 22:47 by rmk") + (* ; "Edited 19-Jun-2024 08:57 by rmk") + (* ; "Edited 17-Jun-2024 09:01 by rmk") + (* ; "Edited 13-Jun-2024 17:34 by rmk") + (* ; "Edited 18-May-2024 16:24 by rmk") + (* ; "Edited 24-Apr-2024 09:42 by rmk") + (* ; "Edited 5-May-2024 23:13 by rmk") + (* ; "Edited 20-Mar-2024 11:01 by rmk") (* ; "Edited 8-Feb-2024 23:38 by rmk") (* ; "Edited 2-Jan-2024 19:21 by rmk") (* ; "Edited 4-Oct-2023 10:37 by rmk") - (* ; "Edited 1-Oct-2023 11:58 by rmk") - (* ; "Edited 22-Sep-2023 20:53 by rmk") (* ; "Edited 5-Nov-2022 23:51 by rmk") (* ; "Edited 30-May-91 23:38 by jds") (* ;; "Split window OLDPANE at window-relelative Y into 2 panes that can scroll independently.") + (* ;; "Note that TSTREAM and TEXTOBJ are the same for all panes.") + (* ;; "Original code was goofy: after carefully setting things up, attached menus and prompts would move into the main-window space. Setting and reseting the ATTACHEDWINDOWS property seems to fix that.") - (LET ((WREG (WINDOWPROP OLDPANE 'REGION)) - (TEXTOBJ (TEXTOBJ! (fetch (TEXTWINDOW WTEXTOBJ) of OLDPANE))) - (NEXTPANE (fetch (TEXTWINDOW NEXTPANE) of OLDPANE)) - ATTACHEDWINDOWS NEWPANE PROPS NEWFIRSTLINE SEL) - (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.") - (CL:WHEN NEXTPANE (* ; + (LET* ((WREG (WINDOWPROP OLDPANE 'REGION)) + (TSTREAM (fetch (TEXTWINDOW WTEXTSTREAM) of OLDPANE)) + (TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + (SEL (FGETTOBJ TEXTOBJ SEL)) + (NEXTPANE (fetch (TEXTWINDOW NEXTPANE) of OLDPANE)) + ATTACHEDWINDOWS NEWPANE PROPS LASTVISIBLE) + (CL:UNLESS Y (* ; + "Y-position of the split, either supplied or mouse.") + (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)) - (SHAPEW OLDPANE (create REGION using WREG BOTTOM _ (IPLUS (fetch BOTTOM of WREG) - Y) - HEIGHT _ (IDIFFERENCE (fetch HEIGHT of WREG) - Y))) - (* ; + (DETACHWINDOW NEXTPANE)) + (SETQ ATTACHEDWINDOWS (WINDOWPROP OLDPANE 'ATTACHEDWINDOWS NIL)) + + (* ;;  "Reshape the original window to form the upper pane. This fixes/displays the current selection.") - (* ;; "Attach the new window, without disturbing the pre-existing attached windows") + (SHAPEW OLDPANE (create REGION using WREG BOTTOM _ (IPLUS (fetch BOTTOM of WREG) + Y) + HEIGHT _ (IDIFFERENCE (fetch HEIGHT of WREG) + Y))) + (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") + + (ATTACHWINDOW (SETQ NEWPANE (CREATEW (create REGION using WREG HEIGHT _ Y) + NIL NIL NIL)) + OLDPANE + 'BOTTOM + 'JUSTIFY + 'MAIN) (* ; "and attach a lower pane.") + [WINDOWPROP OLDPANE 'ATTACHEDWINDOWS (APPEND ATTACHEDWINDOWS (WINDOWPROP OLDPANE + 'ATTACHEDWINDOWS] + + (* ;; "[end of attached-window hackery to prevent disturbance while short]") + + (* ;; "") + + (WINDOWPROP NEWPANE 'TEDITCREATED T) + (DSPFONT (fetch (CHARLOOKS CLFONT) of (FGETTOBJ TEXTOBJ CARETLOOKS)) + NEWPANE) (* ; + "Set the font on the display stream to be the current one from CARETLOOKS") - (ATTACHWINDOW (SETQ NEWPANE (CREATEW (create REGION using WREG HEIGHT _ Y) - NIL NIL NIL)) - OLDPANE - 'BOTTOM - 'JUSTIFY - 'MAIN) (* ; "and attach a lower pane.") - [WINDOWPROP OLDPANE 'ATTACHEDWINDOWS (APPEND ATTACHEDWINDOWS (WINDOWPROP OLDPANE - 'ATTACHEDWINDOWS] + (* ;; "Not sure if same PROPS as for PANE (which this would inherit from primary window)") - (* ;; "[end of attached-window hackery to prevent disturbance while short]") + [SETQ PROPS (APPEND '(NOTITLE T PROMPTWINDOW DON'T TITLEMENUFN NILL) + (COPY (FGETTOBJ TEXTOBJ EDITPROPS] + (\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.") - (WINDOWPROP NEWPANE 'TEDITCREATED T) - (DSPFONT (fetch (CHARLOOKS CLFONT) of (FGETTOBJ TEXTOBJ CARETLOOKS)) - NEWPANE) (* ; - "Set the font on the display stream to be the current one from CARETLOOKS") + (for S in (\TEDIT.COLLECTSELS TEXTOBJ) do (for PANE inpanes (PROGN TEXTOBJ) as L1 + on (GETSEL S L1) as LN + on (GETSEL S LN) when (EQ PANE OLDPANE) + do (push (CDR L1) + NIL) + (push (CDR LN) + NIL))) + + (* ;; "Create the FIRSTLINE of NEWPANE starting at the character just after the last line of the now-shrunken OLDPANE.") - (* ;; "Not sure if same PROPS as for PANE (which this would inherit from primary window)") - - [SETQ PROPS (APPEND '(NOTITLE T PROMPTWINDOW DON'T TITLEMENUFN NILL) - (COPY (FGETTOBJ TEXTOBJ EDITPROPS] - (\TEDIT.MINIMAL.WINDOW.SETUP NEWPANE (FGETTOBJ TEXTOBJ STREAMHINT) - 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.") - - (for S in (\TEDIT.COLLECTSELS TEXTOBJ) do (for PANE inpanes (PROGN TEXTOBJ) as L1 - on (GETSEL S L1) as LN - on (GETSEL S LN) when (EQ PANE OLDPANE) - do (push (CDR L1) - NIL) - (push (CDR LN) - NIL))) - - (* ;; "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 NEWFIRSTLINE - (\TEDIT.FILLPANE (GETLD NEWFIRSTLINE PREVLINE) - TEXTOBJ NEWPANE)) - (SETQ SEL (FGETTOBJ TEXTOBJ SEL)) - (\TEDIT.FIXSEL SEL TEXTOBJ NIL NEWPANE) - (CL:WHEN (GETSEL SEL ONFLG) - (SETSEL SEL ONFLG NIL) (* ; + (\TEDIT.WINDOW.SETUP NEWPANE TSTREAM PROPS OLDPANE (ADD1 (CL:IF LASTVISIBLE + (FGETLD LASTVISIBLE LCHARLIM) + 0))) + (* ; "PLINES covers through LASTVISIBLE") + (WINDOWPROP NEWPANE 'PROCESS (WINDOWPROP OLDPANE 'PROCESS)) + (\TEDIT.FIXSEL SEL TEXTOBJ NIL NEWPANE) + (CL:WHEN (GETSEL SEL ONFLG) + (SETSEL SEL ONFLG NIL) (* ;  "Turn it off, so we can turn it on for NEWPANE") - (\TEDIT.SHOWSEL SEL T NEWPANE)) - (WINDOWPROP NEWPANE 'PROCESS (WINDOWPROP OLDPANE 'PROCESS)) - (replace (TEXTWINDOW NEXTPANE) of OLDPANE with NEWPANE) + (\TEDIT.SHOWSEL SEL T TEXTOBJ NEWPANE)) + (replace (TEXTWINDOW NEXTPANE) of OLDPANE with NEWPANE) (* ;  "Tell the this pane about the new pane just below it") - (CL:WHEN NEXTPANE (* ; + (CL:WHEN NEXTPANE (* ;  "There was already a pane below this one. Attach it to the new lower pane.") - (ATTACHWINDOW NEXTPANE NEWPANE 'BOTTOM 'JUSTIFY 'MAIN) + (ATTACHWINDOW NEXTPANE NEWPANE 'BOTTOM 'JUSTIFY 'MAIN) (* ;  "Tell the lower pane about its lower, lower pane..") - (replace (TEXTWINDOW NEXTPANE) of NEWPANE with NEXTPANE))]) + (replace (TEXTWINDOW NEXTPANE) of NEWPANE with NEXTPANE))]) (\TEDIT.UNSPLITW - [LAMBDA (PANE) (* ; "Edited 20-Mar-2024 11:01 by rmk") + [LAMBDA (PANE) (* ; "Edited 18-May-2024 16:21 by rmk") + (* ; "Edited 12-May-2024 20:58 by rmk") (* ; "Edited 15-Mar-2024 18:30 by rmk") + (* ; "Edited 20-Mar-2024 11:01 by rmk") (* ; "Edited 21-Feb-2024 08:31 by rmk") (* ; "Edited 11-Feb-2024 11:14 by rmk") (* ; "Edited 2-Jan-2024 21:11 by rmk") @@ -1421,7 +1455,7 @@ [SETQ PRIORPANE (find P in PANES suchthat (EQ PANE (fetch (TEXTWINDOW NEXTPANE) of P] (SETQ NEXTPANE (fetch (TEXTWINDOW NEXTPANE) of PANE)) - (\TEDIT.SHOWSEL SEL NIL) (* ; + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (* ;  "Turn off selections during the unsplit.") (FSETTOBJ TEXTOBJ SELPANE PRIMARYPANE) (for P in PANES as CARET in (GETTOBJ TEXTOBJ CARET) as SL1 in (GETSEL SEL L1) as SLN @@ -1463,7 +1497,7 @@ (DETACHWINDOW NEXTPANE) (ATTACHWINDOW NEXTPANE PRIORPANE 'BOTTOM 'JUSTIFY 'MAIN)) (CLOSEW PANE) - (\TEDIT.SHOWSEL SEL T]) + (\TEDIT.SHOWSEL SEL T TEXTOBJ]) ) (MOVD? 'NILL 'GRAB-TYPED-REGION) @@ -1503,14 +1537,15 @@ (DEFINEQ (TEDITWINDOWP - [LAMBDA (WINDOW) (* ; "Edited 22-Jan-2024 10:57 by rmk") + [LAMBDA (WINDOW) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 22-Jan-2024 10:57 by rmk") (* ; "Edited 15-Sep-2023 21:03 by rmk") (* ; "Edited 16-Jan-89 10:28 by jds") (* ;; "If WINDOW is or denotes the window of a text stream, returns that textstream's window. The test is that the returned window has a TEXTOBJ property, and the TEXTOBJ thinks this is its window.") (LET* [(TEXTOBJ (TEXTOBJ WINDOW T)) - (CHECKED-WINDOW (AND TEXTOBJ (\TEDIT.PRIMARYW TEXTOBJ] + (CHECKED-WINDOW (AND TEXTOBJ (\TEDIT.PRIMARYPANE TEXTOBJ] (AND CHECKED-WINDOW (MEMB CHECKED-WINDOW (FGETTOBJ TEXTOBJ \WINDOW)) CHECKED-WINDOW]) ) @@ -1690,7 +1725,8 @@ 2]) (\TEDIT.PROMPT.PAGEFULLFN - [LAMBDA (PROMPT-DISPLAY-STREAM) (* ; "Edited 18-Nov-87 14:44 by jds") + [LAMBDA (PROMPT-DISPLAY-STREAM) (* ; "Edited 21-Jun-2024 23:21 by rmk") + (* ; "Edited 18-Nov-87 14:44 by jds") (* ;; "Given a TEdit promptwindow, expand it to be a line taller--called when a message overflows the window.") @@ -1704,10 +1740,10 @@ (ATTACHEDMENUS (REMOVE PROMPT-WINDOW (ATTACHEDWINDOWS MAINWINDOW] (GETPROMPTWINDOW MAINWINDOW %#LINES) (* ; "Get the new window") (SETQ \CURRENTDISPLAYLINE (CL:1- %#LINES)) (* ; "Set this so the page-full code will fire again at the end of THIS line, rather than waiting for another screen-ful. There ought to be an interface to this.") - [SETQ NEWTOP (fetch (REGION TOP) of (WINDOWPROP PROMPT-WINDOW 'REGION] - [for WINDOW in (REVERSE ATTACHEDMENUS) when (>= (fetch (REGION BOTTOM) - of (WINDOWPROP WINDOW 'REGION)) - OLDBOTTOM) + [for WINDOW [NEWTOP _ (fetch (REGION TOP) of (WINDOWPROP PROMPT-WINDOW 'REGION] + in (REVERSE ATTACHEDMENUS) when (>= (fetch (REGION BOTTOM) of (WINDOWPROP WINDOW + 'REGION)) + OLDBOTTOM) do (RELMOVEW WINDOW (CREATEPOSITION 0 (IDIFFERENCE NEWTOP OLDTOP] (WINDOWPROP PROMPT-WINDOW 'TEDIT.NLINES %#LINES]) ) @@ -1779,7 +1815,8 @@ TITLE]) (\TEDIT.WINDOW.TITLE - [LAMBDA (TEXTOBJ DIRTYFLAG TITLE) (* ; "Edited 2-Dec-2023 16:41 by rmk") + [LAMBDA (TEXTOBJ DIRTYFLAG TITLE) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 2-Dec-2023 16:41 by rmk") (* ; "Edited 21-Oct-2023 15:02 by rmk") (* ; "Edited 18-Oct-2023 00:44 by rmk") (* ; "Edited 22-Sep-2023 19:51 by rmk") @@ -1790,7 +1827,7 @@ (* ;; "This puts * or clears * in the title of a tedit window. TITLE may override the current window title (e.g. for get and put)") (CL:UNLESS (GETTOBJ TEXTOBJ MENUFLG) - (LET ((W (\TEDIT.PRIMARYW TEXTOBJ))) + (LET ((W (\TEDIT.PRIMARYPANE TEXTOBJ))) (CL:WHEN (AND W (NOT (GETTEXTPROP TEXTOBJ 'NOTITLE)) (WINDOWPROP W 'TEDITCREATED)) (* ;  "Only change the title if there IS a window, and it isn't suppressing title changes.") @@ -1864,8 +1901,10 @@ (DEFINEQ (TEDIT.DEACTIVATE.WINDOW - [LAMBDA (W) (* ; "Edited 20-Mar-2024 11:02 by rmk") + [LAMBDA (W) (* ; "Edited 18-May-2024 16:20 by rmk") + (* ; "Edited 12-May-2024 17:19 by rmk") (* ; "Edited 15-Mar-2024 13:34 by rmk") + (* ; "Edited 20-Mar-2024 11:02 by rmk") (* ; "Edited 17-Oct-2023 08:54 by rmk") (* ; "Edited 10-Oct-2023 10:23 by rmk") (* ; "Edited 30-Sep-2023 13:42 by rmk") @@ -1898,7 +1937,7 @@ (OPENWP (GETTOBJ TEXTOBJ PROMPTWINDOW))) (CLEARW (GETTOBJ TEXTOBJ PROMPTWINDOW))) (\TEDIT.SHOWSEL (TEXTSEL TEXTOBJ) - NIL) (* ; + NIL TEXTOBJ) (* ;  "Before the window is closed, make SURE that the caret is down, or the window will reappear.") (CL:WHEN (AND (\TEDIT.WINDOW.TITLE TEXTOBJ) (OPENWP (GETTOBJ TEXTOBJ PROMPTWINDOW)) @@ -1952,9 +1991,10 @@ (replace (TEXTWINDOW WTEXTSTREAM) of W with NIL]) (\TEDIT.REPAINTFN - [LAMBDA (PANE) (* ; "Edited 20-Mar-2024 06:43 by rmk") + [LAMBDA (PANE) (* ; "Edited 25-Jun-2024 08:53 by rmk") + (* ; "Edited 17-Jun-2024 09:36 by rmk") + (* ; "Edited 12-May-2024 21:36 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") (* ; "Edited 11-May-2023 11:35 by rmk") (* ; "Edited 30-May-91 23:34 by jds") @@ -1969,149 +2009,50 @@ (GETSEL SEL ONFLG))) (* ;; - "The window is clear before this is called, so no highlighting to worry about. Tell the selection.") + "The window is clear before this is called, so no highlighting to take down. Tell the selection.") (FSETSEL SEL ONFLG NIL) - (for P PLINES inpanes (PROGN TEXTOBJ) do (\TEDIT.LINES.BELOW (fetch (TEXTWINDOW PLINES) - of P) - NIL P TEXTOBJ)) - (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]) + (* ;; + "But also take down the caret, and clear again in case the timer had put it up again") -(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") + (\TEDIT.SETCARET SEL PANE TEXTOBJ 'OFF) + (\TEDIT.CLEARPANE PANE) - (* ;; "Returns a list indicating which boundaries of the window is offscreen. Also includes VERTICAL or HORIZONTAL, if one of those respective dimensions is off.") + (* ;; "SEL and display are both 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]) + (for P inpanes (PROGN TEXTOBJ) do (\TEDIT.LINES.BELOW NIL 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 TEXTOBJ)))]) (\TEDIT.RESHAPEFN - [LAMBDA (PANE BITS OLDREGION) (* ; "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") - (* ; "Edited 14-Dec-2023 11:32 by rmk") - (* ; "Edited 20-Nov-2023 11:04 by rmk") - (* ; "Edited 3-Nov-2023 12:10 by rmk") - (* ; "Edited 11-May-2023 00:39 by rmk") - (* ; "Edited 18-Apr-2023 23:46 by rmk") - (* ; "Edited 5-Apr-2023 09:23 by rmk") - (* ; "Edited 30-May-91 23:34 by jds") - - (* ;; "Will eventually do the right thing w/r/t text margins. For now, it's a place holder.") - - (* ;; "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)) - - (* ;; "Should always be a dummy line, but...") + [LAMBDA (PANE BITS OLDREGION) (* ; "Edited 25-Jun-2024 15:53 by rmk") + (LET [(PREG (DSPCLIPPINGREGION NIL PANE)) + (TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of (fetch (TEXTWINDOW WTEXTSTREAM) of PANE] - (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) (* ; - "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)) - - (* ;; "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 (* ; - "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) (* ; - "Forget the old chain of line descriptors") - (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) (* ; - "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. ") + (* ;; "This saves in the TEXTOBJ the particular region parameters that are common to all panes. This is used by \TEDIT.FORMATLINE and maybe other pane-independent functions. The vertical parameters are not common. ") - (* ;; - "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]) + (FSETTOBJ TEXTOBJ WRIGHT (fetch (REGION WIDTH) of PREG)) + (FSETTOBJ TEXTOBJ WLEFT (fetch (REGION LEFT) of PREG)) + (FSETTOBJ TEXTOBJ WBOTTOM (fetch (REGION BOTTOM) of PREG)) + (\TEDIT.CREATEPLINE TEXTOBJ PANE (FGETLD (PLINES PANE) + LCHARLIM)) + (\TEDIT.REPAINTFN PANE]) ) (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,192 +2065,203 @@  "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") - - (* ;; "Thumb scrolling, DY is FLOATP.") - - (LET ((CH# (IMAX [IMIN (SUB1 (TEXTLEN TEXTOBJ)) - (FIXR (FTIMES DY (TEXTLEN TEXTOBJ] - 1)) +(\TEDIT.SCROLLCH.TOP + [LAMBDA (TSTREAM PANE CHNO) (* ; "Edited 24-Jun-2024 22:48 by rmk") + (* ; "Edited 19-Jun-2024 23:15 by rmk") + (* ; "Edited 13-Jun-2024 17:58 by rmk") + (* ; "Edited 18-May-2024 16:20 by rmk") + (* ; "Edited 3-May-2024 23:37 by rmk") + (* ; "Edited 29-Apr-2024 11:19 by rmk") + (* ; "Edited 30-Apr-2024 22:23 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.") + + (* ;; "Called for an explicit FLOATP scroll or normalize caret.") + + (LET ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + (PLINES (PLINES PANE)) + TARGETLINE SEL DY) + + (* ;; "Does any currently formatted line include the target char? Otherwise, format lines above CHNO to find the valid start of CHNO's line. First check: maybe CHNO is already in the top line.") + + (CL:UNLESS (AND (FGETLD PLINES NEXTLINE) + (WITHINLINEP CHNO (FGETLD PLINES NEXTLINE))) + (if (SETQ TARGETLINE (find L inlines (FGETLD PLINES NEXTLINE) + suchthat (WITHINLINEP CHNO L))) + then + (* ;; "A valid line containg CHNO exists, fast-scroll it to the top of PANE. The TARGETLINE's YBOT doesn't make any sense here, shouldn't it be YTOP? Maybe \TEDIT.SCROLLUP has a different idea.") + + (\TEDIT.SCROLLUP TSTREAM PANE (IDIFFERENCE (FGETLD PLINES YBOT) + (FGETLD TARGETLINE YBOT))) + elseif [SETQ TARGETLINE (CADR (\TEDIT.LINES.ABOVE TSTREAM CHNO (FGETLD PLINES YBOT] + then + (* ;; + "No existing CHNO line. Construct one and install it so that its LCHAR1 is PLINES LCHARLIM+1.") + + (SETQ SEL (FGETTOBJ TEXTOBJ SEL)) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ PANE) + (\TEDIT.CLEARPANE PANE) + (\TEDIT.PLINE.LCHARLIM PANE (SUB1 (FGETLD TARGETLINE LCHAR1))) + (LINKLD PLINES (CAR (\TEDIT.LINES.BELOW PLINES NIL PANE TEXTOBJ))) + (* ; "This formats TARGETLINE again") + (\TEDIT.FIXSEL SEL TEXTOBJ NIL PANE) + (\TEDIT.SHOWSEL SEL T TEXTOBJ PANE) + (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE)))]) + +(\TEDIT.SCROLLCH.BOTTOM + [LAMBDA (TSTREAM PANE CHNO) (* ; "Edited 21-Jun-2024 23:17 by rmk") + (* ; "Edited 21-May-2024 15:40 by rmk") + (* ; "Edited 16-May-2024 23:42 by rmk") + (* ; "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. Presumably this is only called when typing at the bottom of a pane, doesn't have to be efficient. This calculates where the line would be whether or not PANE is partially off-screen.") + + (LET ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) (PREG (DSPCLIPPINGREGION NIL PANE)) - (SEL (FGETTOBJ TEXTOBJ SEL)) - PHEIGHT NEWTOP) - (SETQ PHEIGHT (fetch HEIGHT of PREG)) (* ; "Height of the pane") + (PLINES (PLINES PANE)) + LINE PBOTTOM PHEIGHT) - (* ;; - "Does any currently formatted line include the target char? This will become the new top line") + (* ;; "0 if PANE starts at the beginning of the stream, can't scroll down. If it's current visible, we scan scroll down to its new position. If not visible, we have to search for a new top line somewhere above the CHNO target line such that putting that line at the to will cause the target line to appear at the bottom.") - (SETQ NEWTOP (find L inlines (GETLD (fetch (TEXTWINDOW PLINES) of PANE) - NEXTLINE) suchthat (WITHINLINEP CH# L))) - (COND - (NEWTOP + (SETQ PBOTTOM (fetch (REGION BOTTOM) of PREG)) + (if (AND NIL (EQ 0 (FGETLD PLINES LCHARLIM))) + elseif [SETQ LINE (find L inlines (FGETLD PLINES NEXTLINE) + suchthat (AND (WITHINLINEP CHNO L) + (IGEQ (FGETLD L YBOT) + PBOTTOM] + then + (* ;; + "CHNO currently visible, valid. PBOTTOM test in case someone leaves a dangling line") - (* ;; - "If so, convert to an integer scroll so the screen is not blanked and reformatted unnecessarily") + (CL:WHEN (OR (FGETLD LINE NEXTLINE) + (IGEQ (FGETLD LINE LCHARLIM) + (FGETTOBJ TEXTOBJ TEXTLEN))) - [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) (* ; - "New block lines replace previous pane lines") - (\TEDIT.CLEARPANE PANE) + (* ;; "Don't scroll if LINE is already PANE's last line, unless it's the last line of the document. It's harder to tell my LINE's YBOT because of possible margins.") - (* ;; - "Maybe replace the rest of this with \TEDIT.REPAINTFN ? \FILLPANE adds the dummy lines") + (\TEDIT.SCROLLDOWN TSTREAM PANE (IDIFFERENCE (fetch (REGION BOTTOM) + of PREG) + (FGETLD LINE YBOT)))) + else + (* ;; "CHNO is not in PANE. ") - (\TEDIT.FILLPANE (fetch (TEXTWINDOW PLINES) of PANE) - TEXTOBJ PANE) - (\TEDIT.FIXSEL SEL TEXTOBJ NIL PANE) - (CL:WHEN (FGETSEL SEL ONFLG) + (SETQ LINE (\TEDIT.BACKFORMAT TSTREAM (fetch (REGION HEIGHT) of PREG) + CHNO + (fetch (REGION BOTTOM) of PREG))) + (CL:WHEN (FGETLD LINE NEXTLINE) (* ; "Go one line down") + (SETQ LINE (FGETLD LINE NEXTLINE))) - (* ;; "Tell the selection that none of its hilighting is current onscreen (BLTSHADE above), then restore it. ") + (* ;; "Then position relative to its true ascent, closer to the top") - (FSETSEL SEL ONFLG NIL) - (\TEDIT.SHOWSEL SEL T PANE))]) + (SETYPOS LINE (IDIFFERENCE (FGETLD LINE ASCENT) + (FGETLD LINE LTRUEASCENT))) + (\TEDIT.SCROLLCH.TOP TSTREAM PANE (FGETLD LINE LCHARLIM]) (\TEDIT.SCROLLUP - [LAMBDA (TEXTOBJ PANE DY) (* ; "Edited 20-Mar-2024 06:43 by rmk") + [LAMBDA (TSTREAM PANE DY) (* ; "Edited 22-Jun-2024 09:34 by rmk") + (* ; "Edited 19-Jun-2024 08:57 by rmk") + (* ; "Edited 17-Jun-2024 22:35 by rmk") + (* ; "Edited 13-Jun-2024 17:03 by rmk") + (* ; "Edited 9-May-2024 07:43 by rmk") + (* ; "Edited 29-Apr-2024 15:06 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") - (* ; "Edited 30-Nov-2023 00:07 by rmk") - (* ; "Edited 28-Nov-2023 22:55 by rmk") (* ; "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") + (* ;; "It might seem more consistent to use VHEIGHT instead of PHEIGHT. But this gives the wrong result when the window is first moved off screen or later moved on screen. The AFTERMOVEFN would have to repaint on each such transition. ") + + (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 (GETLD (PLINES PANE) + NEXTLINE)) + (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) - - (* ;; "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 NEWTOPLINE (for L NEXT inlines OLDTOPLINE + 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 TSTREAM (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 L 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,209 +2269,213 @@ (* ;; "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") + (\TEDIT.PLINE.LCHARLIM PANE (SUB1 (FGETLD NEWTOPLINE LCHAR1))) (* ;; "") - (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 (PLINES PANE) + 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") - (* ; "Edited 15-Mar-2024 22:02 by rmk") + [LAMBDA (TSTREAM PANE DY) (* ; "Edited 22-Jun-2024 09:33 by rmk") + (* ; "Edited 19-Jun-2024 08:57 by rmk") + (* ; "Edited 17-Jun-2024 22:38 by rmk") + (* ; "Edited 13-Jun-2024 21:54 by rmk") + (* ; "Edited 29-Apr-2024 15:06 by rmk") + (* ; "Edited 19-Mar-2024 23:34 by rmk") (* ; "Edited 20-Jan-2024 23:13 by rmk") - (* ; "Edited 2-Jan-2024 00:25 by rmk") (* ; "Edited 1-Dec-2023 16:11 by rmk") (* ; "Edited 11-May-2023 11:53 by rmk") - (* ; "Edited 26-Mar-2023 20:55 by rmk") (* ; "Edited 3-Apr-2023 10:00 by rmk") (* ; "Edited 26-Mar-2023 20:55 by rmk") (* ;; "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 (FGETLD 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 VHEIGHT. LASTVISIBLE is the line at the bottom of the window.") + + (SETQ LASTVISIBLE (\TEDIT.NCONC.LINES NEWTOPLINE OLDTOPLINE VTOP VBOTTOM)) + (LINKLD PLINES NEWTOPLINE) + (\TEDIT.PLINE.LCHARLIM PANE (SUB1 (FGETLD NEWTOPLINE LCHAR1))) + + (* ;; "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. ") - (* ;; "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. ") + (* ;; "We have to operate in the bitmap's coordinate system, which may be partially offscreen") - (SETQ LASTVISIBLE (\TEDIT.NCONC.LINES NEWTOPLINE OLDTOPLINE PHEIGHT PBOTTOM)) - (LINKLD PLINES NEWTOPLINE) + (CL:WHEN (AND OLDTOPLINE (IGEQ (FGETLD OLDTOPLINE YBOT) + (FGETLD LASTVISIBLE YBOT))) - (* ;; "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. ") + (* ;; "The images for at least OLDTOPLINE and any lines below are currently in the bitmap. Move it down. ") - (CL:UNLESS (\TEDIT.OFFSCREEN.SCROLL TEXTOBJ PANE 'TOP) - (CL:WHEN (AND OLDTOPLINE (IGEQ (FGETLD OLDTOPLINE YBOT) - (FGETLD LASTVISIBLE YBOT))) + (SETQ DELTA (IDIFFERENCE TOPOFOLD (FGETLD OLDTOPLINE YTOP))) - (* ;; "The images for at least OLDTOPLINE and any lines below are currently in the bitmap. Move it down. ") + (* ;; "If VBOTTOM isn't 0, then the bottom is off the screen--no bitmap.") - (BITBLT PANE 0 (IPLUS VBOTTOM (IDIFFERENCE TOPOFOLD (FGETLD OLDTOPLINE YTOP))) - PANE 0 VBOTTOM (fetch WIDTH of PREG) - PHEIGHT - 'INPUT - 'REPLACE)) - (CL:WHEN LASTVISIBLE (* ; + (BITBLT PANE VLEFT VBOTTOM PANE VLEFT (IDIFFERENCE VBOTTOM DELTA) + (fetch (REGION 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)) + (BLTSHADE WHITESHADE PANE 0 PBOTTOM (fetch (REGION WIDTH) of PREG) + (FGETLD LASTVISIBLE YBOT) + 'REPLACE)) - (* ;; - "Display the new lines. No need to clear the rectangle first, \DISPLAYLINE fills the bitmap") + (* ;; "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.") - (for L inlines NEWTOPLINE until (EQ L OLDTOPLINE) do (\TEDIT.DISPLAYLINE TEXTOBJ L PANE - )) - (\TEDIT.SCROLL.SHOWSEL 'DOWN WHERESEL PANE TEXTOBJ OLDTOPLINE))) - NIL]) + (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]) -(\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") +(\TEDIT.SCROLL.CARET + [LAMBDA (TSTREAM PANE) (* ; "Edited 22-Jun-2024 00:10 by rmk") + (* ; "Edited 21-May-2024 15:40 by rmk") + (* ; "Edited 16-May-2024 23:42 by rmk") + (* ; "Edited 2-May-2024 00:27 by rmk") + (* ; "Edited 29-Apr-2024 11:18 by rmk") + (* ; "Edited 25-Apr-2024 11:08 by rmk") - (* ;; "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.") + (* ;; "Makes sure that the line containing the caret is visible in PANE, assuming that the caret and the current lines both reflect the same character numbers.") - (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") + (* ;; "If the caret is above the pane, move it down to the top line.") - (* ;; "Find the precursor of the target top line.") + (* ;; "If the caret is visible in PANE, nothing to do.") - [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)]) + (* ;; "If it is below the pane, then move its line to the bottom.") + + (* ;; "This calculates where the caret should be whether or not PANE is partially off-screen.") + + (LET ((CARETCHNO (TEDIT.GETPOINT TSTREAM)) + (TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + PLINES LINE PREG) + (CL:WHEN (OR PANE (SETQ PANE (FGETTOBJ TEXTOBJ SELPANE))) + (SETQ PLINES (PLINES PANE)) + (if (ILEQ CARETCHNO (FGETLD PLINES LCHARLIM)) + then (* ; "Caret is above PANE") + (\TEDIT.SCROLLCH.TOP TSTREAM PANE CARETCHNO) + elseif (\TEDIT.VISIBLECHARP CARETCHNO PANE TEXTOBJ) + else + (* ;; "CARETCHNO must be below PANE. Move it up to the bottom line by figuring out the LCHAR1 of a valid top line that would do that. ") + + (SETQ PREG (DSPCLIPPINGREGION NIL PANE)) + (SETQ LINE (\TEDIT.BACKFORMAT TSTREAM (fetch (REGION HEIGHT) of PREG) + CARETCHNO + (fetch (REGION BOTTOM) of PREG))) + (CL:WHEN (FGETLD LINE NEXTLINE) (* ; "Go one line down") + (SETQ LINE (FGETLD LINE NEXTLINE)) + (CL:WHEN (FGETLD LINE FORCED-END) + (SETQ LINE (FGETLD LINE NEXTLINE)))) + + (* ;; "Then position relative to its true ascent, closer to the top") + + (SETYPOS LINE (IDIFFERENCE (FGETLD LINE ASCENT) + (FGETLD LINE LTRUEASCENT))) + (\TEDIT.SCROLLCH.TOP TSTREAM PANE (FGETLD LINE LCHAR1))))]) + +(\TEDIT.SCROLL.SHOWSEL + [LAMBDA (DIRECTION WHERESEL PANE TEXTOBJ VISIBLELINE) (* ; "Edited 18-May-2024 16:49 by rmk") + (* ; "Edited 12-May-2024 16:38 by rmk") + (* ; "Edited 9-Apr-2024 10:08 by rmk") + (* ; "Edited 2-May-2024 00:27 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 TEXTOBJ 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.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 +2486,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 +2497,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 +2515,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 +2551,193 @@ 'BELOW else 'IN]) + +(\TEDIT.VISIBLECHARP + [LAMBDA (CHNO PANE TEXTOBJ ONSCREEN) (* ; "Edited 21-Jun-2024 13:55 by rmk") + (* ; "Edited 19-Jun-2024 14:34 by rmk") + (* ; "Edited 13-Jun-2024 22:06 by rmk") + (* ; "Edited 16-May-2024 23:15 by rmk") + (* ; "Edited 25-Apr-2024 22:25 by rmk") + (* ; "Edited 24-Apr-2024 08:16 by rmk") + + (* ;; "True if CHNO is currently visible in PANE. If not ONSCREEN, a character is %"visible%" even if it is in a region of PANE that is off the screen.") + + (LET ((PLINES (PLINES PANE))) + (CL:WHEN (IGREATERP CHNO (FGETLD PLINES LCHARLIM)) + [for L [TOP _ (CL:IF ONSCREEN + (\TEDIT.ONSCREEN? PANE 'PTOP) + (fetch (REGION PTOP) of (DSPCLIPPINGREGION NIL PANE)))] + [BOTTOM _ (CL:IF ONSCREEN + (\TEDIT.ONSCREEN? PANE 'BOTTOM) + (fetch (REGION BOTTOM) of (DSPCLIPPINGREGION NIL PANE)))] + inlines (GETLD PLINES NEXTLINE) when (AND (WITHINLINEP CHNO L) + (IGEQ TOP (FGETLD L YTOP)) + (IGEQ (FGETLD L YBOT) + BOTTOM)) do (RETURN T) + finally (RETURN (AND $$PREVLINE (NOT (FGETLD $$PREVLINE LDUMMY)) + (IGREATERP CHNO (FGETTOBJ TEXTOBJ TEXTLEN)) + (WITHINLINEP (FGETTOBJ TEXTOBJ TEXTLEN) + $$PREVLINE) + (IGEQ TOP (FGETLD $$PREVLINE YTOP)) + (IGEQ (FGETLD $$PREVLINE 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 13-Jun-2024 22:12 by rmk") + (* ; "Edited 15-May-2024 09:27 by rmk") + (* ; "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 (WINDOW 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) + then (IPLUS BORDER (IDIFFERENCE (fetch (REGION BOTTOM) of PREG) VAL)) - else (fetch BOTTOM of PREG))) - (TOP (SETQ VAL (fetch (REGION TOP) of (fetch REG of PANE))) + else (fetch (REGION BOTTOM) of PREG))) + (TOP (SETQ VAL (fetch (REGION TOP) of REG)) (if (IGREATERP VAL SCREENHEIGHT) - then (IDIFFERENCE (IDIFFERENCE (fetch TOP of PREG) + then (IDIFFERENCE (IDIFFERENCE (fetch (REGION 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))) + else (fetch (REGION TOP) of PREG))) + (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 (REGION 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) + then (IDIFFERENCE (IDIFFERENCE (fetch (REGION RIGHT) of PREG) (IDIFFERENCE VAL SCREENWIDTH)) (WINDOWPROP PANE 'BORDER)) - else (fetch RIGHT of PREG))) + else (fetch (REGION 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 (REGION PTOP) of PREG) + (IDIFFERENCE VAL SCREENHEIGHT)) + (WINDOWPROP PANE 'BORDER)) + else (fetch (REGION PTOP) of PREG))) + (PRIGHT (SETQ VAL (fetch (REGION PRIGHT) of REG)) + (if (IGREATERP VAL SCREENWIDTH) + then (IDIFFERENCE (IDIFFERENCE (fetch (REGION PRIGHT) of PREG) + (IDIFFERENCE VAL SCREENWIDTH)) + (WINDOWPROP PANE 'BORDER)) + else (fetch (REGION PRIGHT) of PREG))) (SHOULDNT]) -(\TEDIT.PANE.SCREENREGION - [LAMBDA (PANE) (* ; "Edited 19-Nov-2023 23:58 by rmk") +(\TEDIT.ONSCREEN.REGION + [LAMBDA (WINDOW) (* ; "Edited 13-Jun-2024 22:02 by rmk") + (* ; "Edited 16-May-2024 17:40 by rmk") + (* ; "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 (WINDOW 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 (REGION BOTTOM) + of CREG))) + else (fetch (REGION 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 13-Jun-2024 21:59 by rmk") + (* ; "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 (REGION LEFT) of REGION) + 0) + (PUSH RESULT 'LEFT)) + (CL:WHEN (IGREATERP (fetch (REGION 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 (REGION TOP) of REGION) + (fetch (SCREEN SCHEIGHT) of SCREEN)) + (PUSH RESULT 'TOP)) + (CL:WHEN (ILESSP (fetch (REGION BOTTOM) of REGION) + 0) + (PUSH RESULT 'BOTTOM)) + (CL:WHEN (OR (MEMB 'TOP RESULT) + (MEMB 'BOTTOM RESULT)) + (PUSH RESULT 'VERTICAL)) + RESULT]) ) @@ -2771,7 +2817,8 @@ 10 NIL X Y]) (\TEDIT.FLASHCARET - [LAMBDA (TEXTOBJ) (* ; "Edited 19-Dec-2023 11:31 by rmk") + [LAMBDA (TEXTOBJ) (* ; "Edited 25-May-2024 13:59 by rmk") + (* ; "Edited 19-Dec-2023 11:31 by rmk") (* ; "Edited 12-Oct-2023 23:31 by rmk") (* ; "Edited 16-Sep-2023 22:51 by rmk") (* jds "16-Jul-85 12:35") @@ -2779,7 +2826,7 @@ (* ;;  "Unless the caret is constrained to be INVISIBLE/UP, give it a chance to flash in every pane.") - (CL:UNLESS (FGETTOBJ TEXTOBJ TXTREADONLY) + (CL:UNLESS (AND NIL (FGETTOBJ TEXTOBJ TXTREADONLY)) [bind (FIRSTTIME _ T) for CARET in (FGETTOBJ TEXTOBJ CARET) unless (fetch (TEDITCARET TCFORCEUP) of CARET) @@ -2815,12 +2862,16 @@ (DSPYPOSITION Y (ffetch (TEDITCARET TCCARETDS) of CARET)))]) (TEDIT.NORMALIZECARET - [LAMBDA (TSTREAM SEL EVEN.IF.VISIBLE) (* ; "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") + [LAMBDA (TSTREAM SEL EVEN.IF.VISIBLE) (* ; "Edited 21-Jun-2024 23:58 by rmk") + (* ; "Edited 19-Jun-2024 14:37 by rmk") + (* ; "Edited 16-Jun-2024 10:08 by rmk") + (* ; "Edited 16-May-2024 23:04 by rmk") + (* ; "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 9-Apr-2024 19:31 by rmk") + (* ; "Edited 21-Mar-2024 21:27 by rmk") (* ; "Edited 21-Feb-2024 20:43 by rmk") - (* ; "Edited 18-Feb-2024 23:35 by rmk") (* ; "Edited 2-Jan-2024 11:09 by rmk") (* ; "Edited 20-Nov-2023 14:22 by rmk") (* ; "Edited 5-Oct-2023 22:38 by rmk") @@ -2829,76 +2880,29 @@ (* ;; "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 (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)) + (SELPANE (FGETTOBJ TEXTOBJ SELPANE))) + (CL:UNLESS SEL + (SETQ SEL (FGETTOBJ TEXTOBJ SEL))) + (\DTEST SEL 'SELECTION) + (CL:WHEN (AND SELPANE (FGETSEL SEL SET) + (IGREATERP (FGETTOBJ TEXTOBJ TEXTLEN) + 0)) + (CL:WHEN (OR EVEN.IF.VISIBLE (NOT (\TEDIT.VISIBLECHARP (TEDIT.GETPOINT TEXTOBJ SEL) + SELPANE TEXTOBJ))) + + (* ;; "Move the caret character to top of SELPANE.") + + (\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") + [LAMBDA (SEL PANE TEXTOBJ DISPOSITION CARET) (* ; "Edited 13-Jun-2024 22:04 by rmk") + (* ; "Edited 25-May-2024 13:57 by rmk") + (* ; "Edited 15-Dec-2023 23:37 by rmk") (* ; "Edited 17-Nov-2023 23:55 by rmk") (* ; "Edited 26-Oct-2023 08:42 by rmk") (* ; "Edited 24-Oct-2023 11:50 by rmk") @@ -2937,12 +2941,12 @@ then (SETQ Y (FGETLD LINE YBASE)) (SETQ PREG (DSPCLIPPINGREGION NIL PANE)) (COND - ((AND (ILESSP Y (fetch PTOP of PREG)) + ((AND (ILESSP Y (fetch (REGION PTOP) of PREG)) (IGEQ (FGETLD LINE YBOT) - (fetch BOTTOM of PREG))) + (fetch (REGION BOTTOM) of PREG))) (* ;  "Move to right position even if not flashing") - (CL:IF (FGETTOBJ TEXTOBJ TXTREADONLY) + (CL:IF (AND NIL (FGETTOBJ TEXTOBJ TXTREADONLY)) (\TEDIT.UPCARET CARET X Y) (\TEDIT.DOWNCARET CARET X Y))) (T @@ -3004,7 +3008,11 @@ (UPDATE/MENU/IMAGE MENU]) (TEDIT.DEFAULT.MENUFN - [LAMBDA (W) (* ; "Edited 20-Mar-2024 11:02 by rmk") + [LAMBDA (W) (* ; "Edited 25-Jun-2024 11:59 by rmk") + (* ; "Edited 18-May-2024 16:50 by rmk") + (* ; "Edited 12-May-2024 21:38 by rmk") + (* ; "Edited 20-Mar-2024 11:02 by rmk") + (* ; "Edited 24-Apr-2024 09:47 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") @@ -3018,10 +3026,9 @@ (* ;;  "Default MENU Fn for editor windows--displays a menu of items & acts on the commands received.") - (PROG ((TEXTOBJ (fetch (TEXTWINDOW WTEXTOBJ) of W)) + (PROG ((TEXTOBJ (TEXTOBJ! (fetch (TEXTWINDOW WTEXTOBJ) of W))) (WMENU (WINDOWPROP W 'TEDIT.MENU)) - THISMENU CH OFILE OCURSOR LINES SEL ITEM) - (TEXTOBJ! TEXTOBJ) + THISMENU CH OFILE SEL ITEM) (COND ((EQ (FGETTOBJ TEXTOBJ EDITOPACTIVE) T) @@ -3076,7 +3083,7 @@ 'TEDIT.LAST.FIND.STRING] (CL:WHEN OFILE (SETQ SEL (TEXTSEL TEXTOBJ)) - (\TEDIT.SHOWSEL SEL NIL) + (\TEDIT.SHOWSEL SEL NIL TEXTOBJ) (TEDIT.PROMPTPRINT TEXTOBJ "Searching..." T) (SETQ CH (TEDIT.FIND TEXTOBJ (MKSTRING OFILE) NIL NIL T)) @@ -3096,11 +3103,11 @@ (* ; "And never pending a deletion.") (\TEDIT.FIXSEL SEL TEXTOBJ) (TEDIT.NORMALIZECARET TEXTOBJ) - (\TEDIT.SHOWSEL SEL T) + (\TEDIT.SHOWSEL SEL T TEXTOBJ) (* ; "And get it into the TEXTOBJ") (PUTTEXTPROP TEXTOBJ 'TEDIT.LAST.FIND.STRING OFILE)) (T (TEDIT.PROMPTPRINT TEXTOBJ "(not found)") - (\TEDIT.SHOWSEL SEL T))))) + (\TEDIT.SHOWSEL SEL T TEXTOBJ))))) (Looks (* ;  "He wants to set the font for the current selection") (\TEDIT.LOOKS TEXTOBJ)) @@ -3120,12 +3127,12 @@ (\TEDIT.EXPANDEDPARA.MENU TEXTOBJ)) (Page% Layout (* ; "Open the page-layout menu") (\TEDIT.MENU.START (COPYTEXTSTREAM TEDIT.EXPANDED.PAGEMENU T) - (\TEDIT.PRIMARYW TEXTOBJ) + (\TEDIT.PRIMARYPANE TEXTOBJ) "Page Layout Menu" 150 'PAGE)) (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 +3154,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 +3163,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 +3236,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 (13186 33629 (\TEDIT.CREATEW 13196 . 19795) (\TEDIT.WINDOW.SETUP 19797 . 22803) ( +\TEDIT.MINIMAL.WINDOW.SETUP 22805 . 31472) (\TEDIT.ADD.CARET 31474 . 33018) (\TEDIT.CLEARPANE 33020 . +33627)) (33630 55474 (\TEDIT.CURSORMOVEDFN 33640 . 38019) (\TEDIT.CURSOROUTFN 38021 . 38466) ( +\TEDIT.ACTIVE.WINDOWP 38468 . 39519) (\TEDIT.EXPANDFN 39521 . 40084) (\TEDIT.MAINW 40086 . 42226) ( +\TEDIT.PRIMARYPANE 42228 . 42907) (\TEDIT.NEWREGIONFN 42909 . 45425) (\TEDIT.SET.WINDOW.EXTENT 45427 + . 50426) (\TEDIT.SHRINK.ICONCREATE 50428 . 52968) (\TEDIT.SHRINKFN 52970 . 53379) (\TEDIT.PANEREGION +53381 . 55472)) (55475 81320 (\TEDIT.BUTTONEVENTFN 55485 . 71592) (\TEDIT.DO.SELOPERATION 71594 . +74035) (\TEDIT.TTY.TEXTOBJP 74037 . 74461) (\TEDIT.BUTTONEVENTFN.SELOPERATION 74463 . 75852) ( +\TEDIT.BUTTONEVENTFN.INACTIVE 75854 . 78196) (\TEDIT.BUTTONEVENTFN.INTITLE 78198 . 79835) ( +\TEDIT.COPYINSERTFN 79837 . 81318)) (81321 97532 (\TEDIT.PANE.SPLIT 81331 . 85551) (\TEDIT.SPLITW +85553 . 92988) (\TEDIT.UNSPLITW 92990 . 97530)) (98888 99785 (TEDITWINDOWP 98898 . 99783)) (99822 +102810 (TEDIT.GETINPUT 99832 . 102275) (\TEDIT.MAKEFILENAME 102277 . 102808)) (102859 110969 ( +TEDIT.PROMPTWINDOW 102869 . 103183) (TEDIT.PROMPTPRINT 103185 . 105621) (TEDIT.PROMPTCLEAR 105623 . +107342) (TEDIT.PROMPTFLASH 107344 . 109276) (\TEDIT.PROMPT.PAGEFULLFN 109278 . 110967)) (111207 119198 + (\TEXTSTREAM.TITLE 111217 . 111907) (\TEDIT.DEFAULT.TITLE 111909 . 114288) (\TEDIT.WINDOW.TITLE +114290 . 116459) (\TEXTSTREAM.FILENAME 116461 . 118131) (\TEDIT.UPDATE.TITLE 118133 . 119196)) (119241 + 129070 (TEDIT.DEACTIVATE.WINDOW 119251 . 126052) (\TEDIT.REPAINTFN 126054 . 128165) (\TEDIT.RESHAPEFN + 128167 . 129068)) (129071 162633 (\TEDIT.SCROLLFN 129081 . 131326) (\TEDIT.SCROLLCH.TOP 131328 . +134397) (\TEDIT.SCROLLCH.BOTTOM 134399 . 137812) (\TEDIT.SCROLLUP 137814 . 144146) (\TEDIT.SCROLLDOWN +144148 . 150788) (\TEDIT.SCROLL.CARET 150790 . 153592) (\TEDIT.SCROLL.SHOWSEL 153594 . 156251) ( +\TEDIT.WHERE.SEL 156253 . 157585) (\TEDIT.WHERE.SEL1 157587 . 160438) (\TEDIT.VISIBLECHARP 160440 . +162631)) (162634 172909 (\TEDIT.ONSCREEN? 162644 . 166984) (\TEDIT.ONSCREEN.REGION 166986 . 170397) ( +\TEDIT.AFTERMOVEFN 170399 . 171153) (OFFSCREENP 171155 . 172907)) (172951 175568 (\TEDIT.PROCIDLEFN +172961 . 174498) (\TEDIT.PROCENTRYFN 174500 . 174945) (\TEDIT.PROCEXITFN 174947 . 175566)) (175647 +186955 (\TEDIT.DOWNCARET 175657 . 176450) (\TEDIT.FLASHCARET 176452 . 178388) (\TEDIT.UPCARET 178390 + . 179494) (TEDIT.NORMALIZECARET 179496 . 182440) (\TEDIT.SETCARET 182442 . 186528) (\TEDIT.CARET +186530 . 186953)) (186989 201224 (TEDIT.ADD.MENUITEM 186999 . 189290) (TEDIT.DEFAULT.MENUFN 189292 . +198436) (TEDIT.REMOVE.MENUITEM 198438 . 199435) (\TEDIT.CREATEMENU 199437 . 200002) ( +\TEDIT.MENU.WHENHELDFN 200004 . 200909) (\TEDIT.MENU.WHENSELECTEDFN 200911 . 201222))))) STOP diff --git a/library/tedit/TEDIT-WINDOW.LCOM b/library/tedit/TEDIT-WINDOW.LCOM index 250b4c9076937e30d5f9292410a2672848173911..96bc728f77cb4f83af5fa2979815b86c3fb4455f 100644 GIT binary patch delta 17507 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 M``+pg>W}&UKi_k;y#N3J delta 17411 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 diff --git a/library/tedit/TEDIT.LCOM b/library/tedit/TEDIT.LCOM index 8fb3ad559c5a4251b73af060808b5e3d5a4bf542..27af4335e445a590a8ad30d0accd6f7374f5f3c0 100644 GIT binary patch delta 11247 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 delta 8780 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 diff --git a/library/tedit/tedit-exports.all b/library/tedit/tedit-exports.all index 081dec793..40207392d 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 "23-Jun-2024 23:27:15"  +{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>tedit-exports.all;136 47903 :EDIT-BY rmk - :PREVIOUS-DATE "20-Mar-2024 09:45:21" {WMEDLEY}TEDIT>tedit-exports.all;118) + :PREVIOUS-DATE "25-May-2024 10:03:13" {WMEDLEY}TEDIT>tedit-exports.all;135) (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 "23-Jun-2024 23:27:00")) (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 (fetch (TEXTSTREAM TEXTOBJ) +of (GETSEL DATUM SELTEXTSTREAM))) (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) @@ -95,6 +96,7 @@ FGETLD L LCHARLIM))))) (PUTPROPS SETSEL MACRO ((S FIELD NEWVALUE) (replace (SELECTION FIELD) of S with NEWVALUE))) (PUTPROPS FGETSEL MACRO ((S FIELD) (ffetch (SELECTION FIELD) of S))) (PUTPROPS FSETSEL MACRO ((S FIELD NEWVALUE) (freplace (SELECTION FIELD) of S with NEWVALUE))) +(PUTPROPS SELECTION! MACRO ((SEL) (\DTEST SEL (QUOTE SELECTION)))) (GLOBALVARS TEDIT.EXTEND.PENDING.DELETE) (GLOBALVARS TEDIT.SELECTION TEDIT.SHIFTEDSELECTION TEDIT.MOVESELECTION TEDIT.COPYLOOKSSELECTION TEDIT.DELETESELECTION) @@ -104,7 +106,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 "22-Jun-2024 00:06:22")) (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 (* ; @@ -141,9 +143,9 @@ FORCED-END (* ; "NIL or character (EOL, FORM...) that forces a line break") (* ; ) NIL (* ; "Was CACHE: A cached THISLINE, for keeping hardcopy info around while we crunch with the line descriptors to make things fit. Now: THISLINE comes from TEXTOBJ" ) NIL (* ; "Was LDOBJ: The object which lies behind this line of text, for updating, etc.") LFMTSPEC ( -* ; "The format spec for this line's paragraph (eventually)") (LDIRTY FLAG) (* ; -"T if this line has changed since it was last formatted.") (NIL FLAG) (* ; "Was FORCED-END flag") ( -DELETED FLAG) (* ; +* ; "The format spec for this line's paragraph (eventually)") (NIL FLAG) (* ; +"Was LDIRTY: T if this line has changed since it was last formatted.") (NIL FLAG) (* ; +"Was FORCED-END flag") (DELETED FLAG) (* ; "T if this line has been completely deleted since it was last formatted or displayed. (Used by deletion routines to detect garbage lines)" ) (LHASPROT FLAG) (* ; "This line contains protected text.") (LDUMMY FLAG) (* ; "This is a dummy line. Was: LHASTABS. But never fetched and this descriptions wasn't true: If this line has a tab in it, this is the line-relative ch# of the final tab. This is to let us punt properly with tabs in a line." @@ -153,7 +155,7 @@ DELETED FLAG) (* ; ) (LTRUEHEIGHT (IPLUS (FGETLD DATUM LTRUEASCENT (FGETLD DATUM LTRUEDESCENT)))) (LTRUEYTOP (IPLUS ( GETLD DATUM YBOT) (FGETLD DATUM LTRUEHEIGHT))) (LTRUEYBOT (IDIFFERENCE (FGETLD DATUM YBASE) (FGETLD DATUM LTRUEDESCENT))))) LHEIGHT _ 0 LTRUEASCENT _ 0 LTRUEDESCENT _ 0 LCHARLIM _ 1000000 NEXTLINE _ NIL - PREVLINE _ NIL LDIRTY _ NIL YBOT _ 0 YBASE _ 0 LEFTMARGIN _ 0 DELETED _ NIL) + PREVLINE _ NIL YBOT _ 0 YBASE _ 0 LEFTMARGIN _ 0 DELETED _ NIL) (DEFPRINT (QUOTE LINEDESCRIPTOR) (FUNCTION \TEDIT.LINEDESCRIPTOR.DEFPRINT)) (I.S.OPR (QUOTE inlines) NIL (QUOTE (bind $$PREVLINE declare (LOCALVARS $$PREVLINE) first (SETQ I.V. ( \DTEST (OR BODY (GO $$OUT)) (QUOTE LINEDESCRIPTOR))) by (PROGN (SETQ $$PREVLINE I.V.) (\DTEST (OR ( @@ -169,6 +171,7 @@ fetch (LINEDESCRIPTOR PREVLINE) of I.V.) (GO $$OUT)) (QUOTE LINEDESCRIPTOR)))))) FSETLD LINE YBOT BOTTOM))))) (PUTPROPS LINKLD MACRO (OPENLAMBDA (LINE1 LINE2) (CL:WHEN LINE1 (SETLD LINE1 NEXTLINE LINE2)) (CL:WHEN LINE2 (SETLD LINE2 PREVLINE LINE1)))) +(PUTPROPS \TEDIT.PLINE.LCHARLIM MACRO ((PANE CHNO) (FSETLD (PLINES PANE) LCHARLIM CHNO))) (PUTPROPS HCSCALE MACRO (OPENLAMBDA (SCALE ITEM) (CL:IF (LISTP ITEM) (for I in ITEM collect (FIXR ( FTIMES SCALE ITEM))) (FIXR (FTIMES SCALE ITEM))))) (PUTPROPS HCUNSCALE MACRO (OPENLAMBDA (SCALE ITEM) (CL:IF (LISTP ITEM) (for I in ITEM collect (FIXR ( @@ -226,7 +229,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 "21-Jun-2024 23:14:16")) (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)." @@ -258,7 +261,8 @@ HINTPC (* ; "Was: Space left in the type-in piece") HINTPCSTARTCH# (* ; "Events that result from undoing other events, for revoking the UNDO. Was: CH# of first char in the piece." ) (TXTLINELEADINGABOVE FLAG) (* ; "NIL for old/existing Tedit files whose lines are formatted with leading below, T for newer files. Was \INSERTPCVALID. T if it's OK to use the cached piece. Set to NIL by people who require that the next insertion/deletion use a different piece. Now just set HINTPC to NIL." -) \WINDOW (* ; "The window-pane where this textobj is displayed") MOUSEREGION (* ; +) (TXTREADONLYQUIET FLAG) (* ; "T => don't print READONLY abort messages") \WINDOW (* ; +"The window-pane where this textobj is displayed") MOUSEREGION (* ; "Section of the window the mouse is in.") NIL (* ; "Was: A list of lines (parallel to the panes in \WINDOW) each of which is the top of chain of line descriptors for the part of the text that is visible in the corresponding pane. Now: each PANE has its own PLINES." ) DS (* ; @@ -292,7 +296,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") @@ -302,7 +307,9 @@ DISPLAYCACHEDS (* ; "The DISPLAYSTREAM that is used to build line images") DISPL ) 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) (* ; +TXTAPPENDONLY FLAG) (* ; +"Allows updates only at the end of the stream. 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 (* ; @@ -311,8 +318,8 @@ TXTNEEDSUPDATE FLAG) (* ; "T => Screen invalid, need to run updater") (TXTDON'TU (\DIRTY (ffetch (TEXTOBJ \XDIRTY) of DATUM) (CL:UNLESS (EQ NEWVALUE (ffetch (TEXTOBJ \XDIRTY) of DATUM )) (\TEDIT.WINDOW.TITLE DATUM NEWVALUE) (freplace \XDIRTY OF DATUM WITH NEWVALUE))))) SEL _ (create SELECTION) SCRATCHSEL _ (create SELECTION) SCRATCHSEL2 _ (create SELECTION) TEXTLEN _ 0 WRIGHT _ 0 -WTOP _ 0 WLEFT _ 0 WBOTTOM _ 0 TXTFILE _ NIL \XDIRTY _ NIL MOUSEREGION _ (QUOTE TEXT) THISLINE _ ( -create THISLINE) MENUFLG _ NIL FMTSPEC _ TEDIT.DEFAULT.FMTSPEC FORMATTEDP _ NIL INSERTSTRING _ NIL) +WTOP _ 0 WLEFT _ 0 WBOTTOM _ 0 MOUSEREGION _ (QUOTE TEXT) THISLINE _ (create THISLINE) FMTSPEC _ +TEDIT.DEFAULT.FMTSPEC) (ACCESSFNS TEXTSTREAM ((* ;; "Overlay for the STREAM record to allow mnemonic access to stream fields for Text streams.") (* ;; "The # of characters that have already been read from the current piece") (TEXTOBJ (fetch (STREAM F3) @@ -320,17 +327,18 @@ of DATUM) (REPLACE (STREAM F3) OF DATUM WITH NEWVALUE)) (* ; "The TEXTOBJ that i (PIECE (fetch (STREAM F5) of DATUM) (REPLACE (STREAM F5) OF DATUM WITH NEWVALUE)) (* ; "The PIECE we're currently fetching chars from/putting chars into") (PCCHARSLEFT (fetch (STREAM F1) of DATUM) (replace (STREAM F1) of DATUM with NEWVALUE)) (* ; "Runs from PLEN to 0: piece exhausted") ( -CURRENTLOOKS (fetch (STREAM F10) of DATUM) (replace (STREAM F10) of DATUM with NEWVALUE)) (* ; -"The CHARLOOKS that are currently applicable to characters being taken from the stream.") ( -CURRENTPARALOOKS (fetch (STREAM IMAGEDATA) of DATUM) (REPLACE (STREAM IMAGEDATA) of DATUM with +NIL) (* ; +"Was CURRENTLOOKS at F10: The CHARLOOKS that are currently applicable to characters being taken from the stream. This is now CARETLOOKS of the TEXTOBJ." +) (CURRENTPARALOOKS (fetch (STREAM IMAGEDATA) of DATUM) (REPLACE (STREAM IMAGEDATA) of DATUM with NEWVALUE)) (* ; "The FMTSPEC that is currently applicable to characters being taken from the stream. This was the only residual field of TEXTIMAGEDATA, now gone." -) (LOOKSUPDATEFN (fetch (STREAM F4) of DATUM) (REPLACE (STREAM F4) OF DATUM with NEWVALUE)) (* ; -"Function to be called at every piece change when line-formatting.") (STARTINGCOFFSET (fetch (STREAM -F2) of DATUM) (replace (STREAM F2) of DATUM with NEWVALUE))) (TYPE? (AND (type? STREAM DATUM) (type? -TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of DATUM)))) (CREATE (create STREAM BINABLE _ NIL BOUTABLE _ NIL -ACCESS _ (QUOTE BOTH) USERCLOSEABLE _ T USERVISIBLE _ T DEVICE _ \TEXTFDEV F1 _ NIL F2 _ 0 F3 _ NIL F4 - _ NIL F5 _ NIL MAXBUFFERS _ 10 IMAGEOPS _ \TEXTIMAGEOPS IMAGEDATA _ NIL))) +) (APPLYLOOKSUPDATEFN (fetch (STREAM F4) of DATUM) (REPLACE (STREAM F4) OF DATUM with NEWVALUE)) (* ; +"Determines whether to call \TEDIT.FORMATLINE.UPDATELOOKS at every piece change when line-formatting." +) (STARTINGCOFFSET (fetch (STREAM F2) of DATUM) (replace (STREAM F2) of DATUM with NEWVALUE))) (TYPE? +(AND (type? STREAM DATUM) (type? TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of DATUM)))) (CREATE (create +STREAM BINABLE _ NIL BOUTABLE _ NIL ACCESS _ (QUOTE BOTH) USERCLOSEABLE _ T USERVISIBLE _ T DEVICE _ +\TEXTFDEV F1 _ NIL F2 _ 0 F3 _ NIL F4 _ NIL F5 _ NIL MAXBUFFERS _ 10 IMAGEOPS _ \TEXTIMAGEOPS +IMAGEDATA _ NIL))) (PUTPROPS NEXTPIECE MACRO ((PC) (ffetch (PIECE NEXTPIECE) of PC))) (PUTPROPS PREVPIECE MACRO ((PC) (ffetch (PIECE PREVPIECE) of PC))) (PUTPROPS PLEN MACRO ((PC) (ffetch (PIECE PLEN) of PC))) @@ -351,8 +359,7 @@ ACCESS _ (QUOTE BOTH) USERCLOSEABLE _ T USERVISIBLE _ T DEVICE _ \TEXTFDEV F1 _ (PUTPROPS FGETPC MACRO ((PC FIELD) (ffetch (PIECE FIELD) of PC))) (PUTPROPS THINPIECEP MACRO ((PC) (* ;; "Assume that objects start out thin, for CHARSET in \TEDIT.PUT.PCTB. The putfn might immediately change that, but we don't care." -) (SELECTC (PTYPE PC) (THIN.PTYPES T) (UTF8.PTYPE (EQ 1 (FGETPC PC PUTF8BYTESPERCHAR))) (OBJECT.PTYPE -T) NIL))) +) (SELECTC (PTYPE PC) (THIN.PTYPES T) (UTF8.PTYPE (EQ 1 (FGETPC PC PUTF8BYTESPERCHAR))) NIL))) (PUTPROPS VISIBLEPIECEP MACRO ((PC) (NOT (OR (EQ 0 (PLEN PC)) (fetch (CHARLOOKS CLINVISIBLE) of ( PLOOKS PC)))))) (PUTPROPS \NEXT.VISIBLE.PIECE MACRO ((PC) (find NPC inpieces (AND PC (NEXTPIECE PC)) suchthat ( @@ -371,7 +378,7 @@ FATSTRING.PTYPE 4) (SUBSTREAM.PTYPE 5) (OBJECT.PTYPE 6) (LOOKS.PTYPE 7) (UTF16BE UTF16LE.PTYPE 9) (UTF8.PTYPE 11) (FILE.PTYPES (LIST THINFILE.PTYPE FATFILE1.PTYPE FATFILE2.PTYPE UTF8.PTYPE UTF16BE.PTYPE UTF16LE.PTYPE)) (STRING.PTYPES (LIST THINSTRING.PTYPE FATSTRING.PTYPE)) ( BINABLE.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) (THIN.PTYPES (LIST THINFILE.PTYPE -THINSTRING.PTYPE)))) +THINSTRING.PTYPE)) (FAT.PTYPES (LIST FATFILE2.PTYPE FATSTRING.PTYPE FATFILE1.PTYPE)))) (RPAQQ THINFILE.PTYPE 0) (RPAQQ FATFILE1.PTYPE 1) (RPAQQ FATFILE2.PTYPE 2) @@ -388,14 +395,16 @@ UTF16LE.PTYPE)) (RPAQ STRING.PTYPES (LIST THINSTRING.PTYPE FATSTRING.PTYPE)) (RPAQ BINABLE.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) (RPAQ THIN.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) +(RPAQ FAT.PTYPES (LIST FATFILE2.PTYPE FATSTRING.PTYPE FATFILE1.PTYPE)) (CONSTANTS (THINFILE.PTYPE 0) (FATFILE1.PTYPE 1) (FATFILE2.PTYPE 2) (THINSTRING.PTYPE 3) ( FATSTRING.PTYPE 4) (SUBSTREAM.PTYPE 5) (OBJECT.PTYPE 6) (LOOKS.PTYPE 7) (UTF16BE.PTYPE 8) ( UTF16LE.PTYPE 9) (UTF8.PTYPE 11) (FILE.PTYPES (LIST THINFILE.PTYPE FATFILE1.PTYPE FATFILE2.PTYPE UTF8.PTYPE UTF16BE.PTYPE UTF16LE.PTYPE)) (STRING.PTYPES (LIST THINSTRING.PTYPE FATSTRING.PTYPE)) ( BINABLE.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) (THIN.PTYPES (LIST THINFILE.PTYPE -THINSTRING.PTYPE))) +THINSTRING.PTYPE)) (FAT.PTYPES (LIST FATFILE2.PTYPE FATSTRING.PTYPE FATFILE1.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 "16-Jun-2024 22:02:39")) (RPAQQ NONE.TTC 0) (RPAQQ CHARDELETE.TTC 1) (RPAQQ WORDDELETE.TTC 2) @@ -414,10 +423,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 +440,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 "23-Jun-2024 23:26:52")) (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 "22-May-2024 14:06:32")) +(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 +511,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 "13-Jun-2024 22:13:37")) (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 +532,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 "22-Jun-2024 09:34:46")) (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 +561,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 "21-Jun-2024 23:14:42")) +(PUTPROP (QUOTE TEDIT-FIND) (QUOTE IMPORTDATE) (IDATE "23-Jun-2024 12:04:17")) +(PUTPROP (QUOTE TEDIT-FNKEYS) (QUOTE IMPORTDATE) (IDATE "23-Jun-2024 23:06:50")) +(PUTPROP (QUOTE TEDIT-HCPY) (QUOTE IMPORTDATE) (IDATE "13-Jun-2024 17:27:02")) (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 +579,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 "18-May-2024 16:29:04")) (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 +610,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 "13-Jun-2024 17:26:52")) (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 From dbbfc9b86c24a50809f3704e6f9205b8b0ef4d4b Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Tue, 25 Jun 2024 21:46:02 -0700 Subject: [PATCH 2/5] TMAX updated for compatibility --- lispusers/tmax/TMAX | 37 +++++----- lispusers/tmax/TMAX-DATE | 67 +++++++++-------- lispusers/tmax/TMAX-DATE.LCOM | Bin 6305 -> 6232 bytes lispusers/tmax/TMAX-ENDNOTE | 16 +++-- lispusers/tmax/TMAX-ENDNOTE.LCOM | Bin 10385 -> 10388 bytes lispusers/tmax/TMAX-INDEX | 39 +++++----- lispusers/tmax/TMAX-INDEX.LCOM | Bin 17784 -> 17773 bytes lispusers/tmax/TMAX-NUMBER | 120 +++++++++++++++++-------------- lispusers/tmax/TMAX-NUMBER.LCOM | Bin 15655 -> 15391 bytes lispusers/tmax/TMAX-XREF | 68 +++++++++--------- lispusers/tmax/TMAX-XREF.LCOM | Bin 10958 -> 10864 bytes lispusers/tmax/TMAX.LCOM | Bin 15247 -> 14767 bytes 12 files changed, 181 insertions(+), 166 deletions(-) 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-DATE b/lispusers/tmax/TMAX-DATE index e7499d963..b2c2727be 100644 --- a/lispusers/tmax/TMAX-DATE +++ b/lispusers/tmax/TMAX-DATE @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "16-Mar-2024 07:49:47" |{WMEDLEY}tmax>TMAX-DATE.;4| 14846 +(FILECREATED "25-Jun-2024 12:00:23" |{WMEDLEY}tmax>TMAX-DATE.;8| 15021 :EDIT-BY |rmk| :CHANGES-TO (FNS DATE.GETFN) - :PREVIOUS-DATE "17-Mar-2022 23:03:32" |{WMEDLEY}tmax>TMAX-DATE.;3|) + :PREVIOUS-DATE "24-Jun-2024 23:30:47" |{WMEDLEY}tmax>TMAX-DATE.;7|) (PRETTYCOMPRINT TMAX-DATECOMS) @@ -82,19 +82,15 @@ (prin1 (|fetch| display.date |of| (|fetch| objectdatum |of| obj)) stream))) -(date.imageboxfn - (lambda (obj stream currentx rightmargin) (* |ss:| "27-Jun-87 15:38") - (* * |Return| |the| |ImageBox| |for| |the| |date| |string.| - |The| |size| |is| |determined| |by| |the| |stream's| |current| |font.|) - - (dspfont (current.display.font stream) - stream) - (|create| imagebox - xsize _ (stringwidth (|fetch| display.date |of| (|fetch| objectdatum |of| obj)) - stream) - ysize _ (fontprop stream 'height) - ydesc _ (fontprop stream 'descent) - xkern _ 0))) +(DATE.IMAGEBOXFN + (LAMBDA (OBJ STREAM CURRENTX RIGHTMARGIN) (* \; "Edited 25-May-2024 20:34 by rmk") + (* |ss:| "27-Jun-87 15:38") + (|create| IMAGEBOX + XSIZE _ (STRINGWIDTH (|fetch| DISPLAY.DATE |of| (|fetch| OBJECTDATUM |of| OBJ)) + STREAM) + YSIZE _ (FONTPROP STREAM 'HEIGHT) + YDESC _ (FONTPROP STREAM 'DESCENT) + XKERN _ 0))) (date.putfn (lambda (obj stream) (* |ss:| "27-Jun-87 15:38") @@ -102,9 +98,11 @@ stream))) (DATE.GETFN - (LAMBDA (STREAM COPY.OBJECT) (* \; "Edited 16-Mar-2024 07:45 by rmk") + (LAMBDA (STREAM COPY.OBJECT) (* \; "Edited 25-Jun-2024 11:59 by rmk") + (* \; "Edited 16-Mar-2024 07:45 by rmk") (* |fsg| "20-Aug-87 14:56") - (TSP.SETUP.FMMENU (\\TEDIT.PRIMARYW TEXTOBJ)) + (DECLARE (USEDFREE TSTREAM)) + (TSP.SETUP.FMMENU (\\TEDIT.PRIMARYPANE TSTREAM)) (APPLY (FUNCTION DATEOBJ) (OR COPY.OBJECT (CADR (READ STREAM)))))) @@ -148,19 +146,20 @@ (DEFINEQ -(current.display.font - (lambda (stream) (* \; "Edited 12-Mar-88 15:28 by drc:") +(CURRENT.DISPLAY.FONT + (LAMBDA (TEXTOBJ) (* \; "Edited 25-May-2024 20:36 by rmk") + (* \; "Edited 9-May-2024 10:05 by rmk") + (* \; "Edited 12-Mar-88 15:28 by drc:") -(* |;;;| "Return the current font. This function is here instead of TMAX because the DATE code is also used in the LetterHead code.") +(* |;;;| "Return the current font. This function is not now used in TMAX, but the comment says \"this code is also used in the LetterHead code.\" ") - (let ((current.font (|fetch| clfont |of| (|with| textstream (textstream textobj) - currentlooks)))) - (cond - ((typenamep current.font 'fontdescriptor) - current.font) - ((typenamep current.font 'fontclass) - (|fetch| displayfd |of| current.font)) - (t (shouldnt "Can't get current font")))))) + (LET ((CURRENT.FONT (|fetch| CLFONT |of| (GETTOBJ TEXTOBJ CARETLOOKS)))) + (COND + ((TYPENAMEP CURRENT.FONT 'FONTDESCRIPTOR) + CURRENT.FONT) + ((TYPENAMEP CURRENT.FONT 'FONTCLASS) + (|fetch| DISPLAYFD |of| CURRENT.FONT)) + (T (SHOULDNT "Can't get current font")))))) (CHANGE.DATE.FORMAT (LAMBDA (DATE TEMPLATE) (* \; @@ -350,10 +349,10 @@ ) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (1378 6167 (DATEOBJ 1388 . 2155) (DATEOBJP 2157 . 2591) (DATE.DISPLAYFN 2593 . 2915) ( -DATE.IMAGEBOXFN 2917 . 3544) (DATE.PUTFN 3546 . 3744) (DATE.GETFN 3746 . 4095) (DATE.COPYFN 4097 . -4629) (DATE.BUTTONEVENTINFN 4631 . 6165)) (6211 8864 (CURRENT.DISPLAY.FONT 6221 . 6927) ( -CHANGE.DATE.FORMAT 6929 . 8862)) (8917 13316 (FINDTIME 8927 . 10706) (FINDHOUR 10708 . 11069) (AMPM -11071 . 11370) (FINDDAY 11372 . 11643) (NUMP 11645 . 11874) (FINDMONTH 11876 . 12992) (FINDYEAR 12994 - . 13314)) (14028 14594 (MAKE.DATEOBJ.IMAGEFNS 14038 . 14592))))) + (FILEMAP (NIL (1378 6194 (DATEOBJ 1388 . 2155) (DATEOBJP 2157 . 2591) (DATE.DISPLAYFN 2593 . 2915) ( +DATE.IMAGEBOXFN 2917 . 3422) (DATE.PUTFN 3424 . 3622) (DATE.GETFN 3624 . 4122) (DATE.COPYFN 4124 . +4656) (DATE.BUTTONEVENTINFN 4658 . 6192)) (6238 9039 (CURRENT.DISPLAY.FONT 6248 . 7102) ( +CHANGE.DATE.FORMAT 7104 . 9037)) (9092 13491 (FINDTIME 9102 . 10881) (FINDHOUR 10883 . 11244) (AMPM +11246 . 11545) (FINDDAY 11547 . 11818) (NUMP 11820 . 12049) (FINDMONTH 12051 . 13167) (FINDYEAR 13169 + . 13489)) (14203 14769 (MAKE.DATEOBJ.IMAGEFNS 14213 . 14767))))) STOP diff --git a/lispusers/tmax/TMAX-DATE.LCOM b/lispusers/tmax/TMAX-DATE.LCOM index c26862d8ca07206923b81b25dfd3d864445691af..0fb3ea8b09a4848bee8cb9c8c46a9f30cb7083a9 100644 GIT binary patch delta 405 zcmZwAu}Z^G7zN;aH7y#!sUSH01cYR0&Ha-!Z3ZzWw>C8O2=~!hwp)Xn0F^Nbn3mEt2&x!14GX=J+vlcce_;>plWFU zuV{Hz+hfhi^X}<<-)J;6C`QBU@u*mOL8ck1-icx!WZV}#1Z|nBfqbPqYpnv9V&Jc~lnEj?^QCrw1i^B{}*BFzBV zV&lj!<*{1+xPL64Dnq63Cw#h5yQ?OoQ;#|;OM60PL2-# z0ul!ke}I##nSU~Mv#11l z8Ed~?Tr)Jypz7pl?{raD6h($;G`Jj(qU9@^T*?>guIE^RV{*p^d5NnogLpwZt1JS{ zs;nZ;(Ln+0KmG&=HB@R)BA!tZ(dieuSy^L}B&E$<93}CY+7#F6tv=BqbW*= z0LEa4?YiIMpn=s50;k0l+YQ^E*;f)dW@8wV%yvR6aNFDufYQGT*2P=;G3%Uh|L|B` zWd^7>{m9&>c4ITgY(gC{@Oifc(mp~G>de5h3EitKZgY4Tqc!}lXU|}g>G^Vkz-ES) kXNDnAeW4)L|0rNJ%)s;glMt|)yc-k5M?fRfjl8w~4JChd-T(jq diff --git a/lispusers/tmax/TMAX-ENDNOTE b/lispusers/tmax/TMAX-ENDNOTE index fefcb0045..d1ae6d345 100644 --- a/lispusers/tmax/TMAX-ENDNOTE +++ b/lispusers/tmax/TMAX-ENDNOTE @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "16-Mar-2024 07:49:47" |{WMEDLEY}tmax>TMAX-ENDNOTE.;4| 23729 +(FILECREATED "25-Jun-2024 12:00:23" |{WMEDLEY}tmax>TMAX-ENDNOTE.;6| 23878 :EDIT-BY |rmk| :CHANGES-TO (FNS REGMARK.GETFN) - :PREVIOUS-DATE "26-Jun-2022 18:15:33" |{WMEDLEY}tmax>TMAX-ENDNOTE.;3|) + :PREVIOUS-DATE "24-Jun-2024 23:30:47" |{WMEDLEY}tmax>TMAX-ENDNOTE.;5|) (PRETTYCOMPRINT TMAX-ENDNOTECOMS) @@ -387,9 +387,11 @@ STREAM))) (REGMARK.GETFN - (LAMBDA (STREAM COPY.OBJECT) (* \; "Edited 16-Mar-2024 07:45 by rmk") + (LAMBDA (STREAM COPY.OBJECT) (* \; "Edited 25-Jun-2024 11:59 by rmk") + (* \; "Edited 16-Mar-2024 07:45 by rmk") (* |fsg| "20-Aug-87 14:58") - (TSP.SETUP.FMMENU (\\TEDIT.PRIMARYW TEXTOBJ)) + (DECLARE (USEDFREE TSTREAM)) + (TSP.SETUP.FMMENU (\\TEDIT.PRIMARYPANE TSTREAM)) (APPLY (FUNCTION REGMARKOBJ) (OR COPY.OBJECT (CDR (READ STREAM)))))) @@ -451,8 +453,8 @@ INSERT.ENDNOTES.TEXT 5286 . 6715) (DELETE.ENDNOTES 6717 . 7708) (NOTESREGIONP 77 SET.ENDNOTE.STYLE 7974 . 10647) (MAP.ENDNOTE.LOOKS 10649 . 11416) (GET.ENDNOTE.FONTS 11418 . 12026)) ( 12029 15944 (ENDNOTEP 12039 . 12380) (NOTE.PUTFN 12382 . 13034) (NOTE.GETFN 13036 . 13616) ( NOTE.BUTTONEVENTINFN 13618 . 14398) (NOTE.WHENSELECTEDFN 14400 . 15942)) (16702 19106 (AUX.TEDIT 16712 - . 17674) (AUX.TEDIT.AFTERQUITFN 17676 . 18119) (AUX.TEDIT.TITLEMENUFN 18121 . 19104)) (19191 23089 ( + . 17674) (AUX.TEDIT.AFTERQUITFN 17676 . 18119) (AUX.TEDIT.TITLEMENUFN 18121 . 19104)) (19191 23238 ( REGMARKOBJ 19201 . 19608) (REGMARKOBJP 19610 . 19804) (REGMARK.DISPLAYFN 19806 . 20052) ( -REGMARK.IMAGEBOXFN 20054 . 20405) (REGMARK.PUTFN 20407 . 20878) (REGMARK.GETFN 20880 . 21234) ( -REGMARK.COPYFN 21236 . 21774) (REGMARK.BUTTONEVENTINFN 21776 . 23087))))) +REGMARK.IMAGEBOXFN 20054 . 20405) (REGMARK.PUTFN 20407 . 20878) (REGMARK.GETFN 20880 . 21383) ( +REGMARK.COPYFN 21385 . 21923) (REGMARK.BUTTONEVENTINFN 21925 . 23236))))) STOP diff --git a/lispusers/tmax/TMAX-ENDNOTE.LCOM b/lispusers/tmax/TMAX-ENDNOTE.LCOM index e41e9d7f1ab007af3fd8ebda3d40c4d43579bd6c..0a0b86755c7f3abfc02467a11c578a2da5cee955 100644 GIT binary patch delta 200 zcmbOjI3;jGpoo#Fu2*TEu91O}iGrb#m4Shkk@3V-D=D)YO$9C`BNK$Ik+GGrrIn%C z#GOWL5b=p0MJ+K^7#S*Qa%s4E`nWm=xjKfpx+o}Nvt+V8qZWr*je?P}g}KG#LPjSs tG`kF}Ow5%OxF$O?YA~8^{>1oRnk_g4Xrk}r=duYb0gisIn?2+_xd8DkGYw_}dHT3I2e~?ixVk7PVOnBhKG~j8i^HTw!N}O$$Z~Qaqm!7K zu2*Ru$R$P!h89+aK)Z~U6u2fkGHNgyZ~nyiUYgA{BE;XxYw~m11jg{q-g2H?08BeF AEC2ui diff --git a/lispusers/tmax/TMAX-INDEX b/lispusers/tmax/TMAX-INDEX index 2dc053c18..632ca0118 100644 --- a/lispusers/tmax/TMAX-INDEX +++ b/lispusers/tmax/TMAX-INDEX @@ -1,13 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "16-Mar-2024 07:51:29" |{WMEDLEY}tmax>TMAX-INDEX.;4| 46587 +(FILECREATED "25-Jun-2024 12:00:23" |{WMEDLEY}tmax>TMAX-INDEX.;6| 46698 :EDIT-BY |rmk| - :CHANGES-TO (VARS TMAX-INDEXCOMS) - (FNS INDEX.DISPLAYFN) + :CHANGES-TO (FNS INDEX.DISPLAYFN) - :PREVIOUS-DATE "20-Feb-97 17:58:09" |{WMEDLEY}tmax>TMAX-INDEX.;1|) + :PREVIOUS-DATE "24-Jun-2024 23:30:47" |{WMEDLEY}tmax>TMAX-INDEX.;5|) (PRETTYCOMPRINT TMAX-INDEXCOMS) @@ -123,12 +122,14 @@ 'indexobj)))) (INDEX.DISPLAYFN - (LAMBDA (OBJ IMAGESTREAM) (* \; "Edited 16-Mar-2024 07:46 by rmk") + (LAMBDA (OBJ IMAGESTREAM) (* \; "Edited 25-Jun-2024 11:59 by rmk") + (* \; "Edited 16-Mar-2024 07:46 by rmk") (* \; "Edited 14-Feb-97 09:30 by rmk:") (* |fsg| "17-Sep-87 11:14") (* |;;| "Display an Index imageobject. If the stream-type is display, then just type Index or Extended Index followed by their args. Otherwise the stream-type is hardcopy. In this case, type nothing and replace the CAR of the hash array entry with a list of page numbers in which this index appears.") + (DECLARE (USEDFREE TSTREAM)) (SELECTQ (IMAGESTREAMTYPE IMAGESTREAM) (DISPLAY (CL:UNLESS (EQ 'INVISIBLE INDEXDISPLAYAPPEARANCE) (DSPFONT |GP.DefaultFont| IMAGESTREAM) @@ -139,7 +140,7 @@ (PRIN3 (INDEX.STRING OBJ) IMAGESTREAM))))) (LET ((PGS/IMOBJS (GETHASH.INDEX OBJ IMAGESTREAM)) - (CURRENT.PAGE (INDEX.PAGE.NUMBER (\\TEDIT.PRIMARYW TEXTOBJ)))) + (CURRENT.PAGE (INDEX.PAGE.NUMBER (\\TEDIT.PRIMARYPANE TSTREAM)))) (COND ((LISTP (CAR PGS/IMOBJS)) (OR (MEMB CURRENT.PAGE (CAR PGS/IMOBJS)) @@ -866,17 +867,17 @@ (* |;;;| "IMAGE OBJECT for causing the index to be written, without using the menu") (DECLARE\: DONTCOPY - (FILEMAP (NIL (3112 10886 (INDEXOBJ 3122 . 4145) (INDEXOBJP 4147 . 4595) (INDEX.DISPLAYFN 4597 . 6265) - (INDEX.IMAGEBOXFN 6267 . 7813) (INDEX.PUTFN 7815 . 8245) (INDEX.GETFN 8247 . 8638) (INDEX.COPYFN 8640 - . 9275) (INDEX.BUTTONEVENTINFN 9277 . 10884)) (10925 18798 (INSERT.INDEX 10935 . 11522) ( -INSERT.INDEXENTRY 11524 . 14291) (INSERT.KNOWN.INDEX 14293 . 16370) (SUBITEM.SELECTFN 16372 . 17366) ( -ADD.NEW.INDEX 17368 . 18796)) (18864 22795 (CHANGE.INDEX 18874 . 19442) (CHANGE.INDEXENTRY 19444 . -20194) (CHANGE.XINDEX.KEY 20196 . 20754) (CHANGE.XINDEX.ENTRY 20756 . 21389) (CHANGE.XINDEX.FONT 21391 - . 22260) (CHANGE.XINDEX.NUMBER 22262 . 22793)) (22837 30558 (GETHASH.INDEX 22847 . 23514) ( -INDEX.PAGE.NUMBER 23516 . 25095) (INDEX.MANUAL.DELIMITER 25097 . 25788) (INDEX.STRING 25790 . 26800) ( -GET.INDEXENTRY.NUMBER 26802 . 27822) (INDEX.LIST.REFS 27824 . 29314) (LIST.OF.INDEXENTRIES 29316 . -30556)) (30600 40804 (CREATE.INDEX.FILE 30610 . 32489) (DUMP.INDEX 32491 . 34911) (VIEW.INDEX.FILE -34913 . 36177) (GET.INDEX.FILE 36179 . 36569) (WRITE.INDEX.FILE 36571 . 38972) ( -WRITE.INDEX.PAGENUMBERS 38974 . 40174) (RESET.INDEX.PAGENUMBERS 40176 . 40802)) (41002 45056 ( -SELECTION.TO.STRING 41012 . 43844) (SELECTION.TO.INDEX 43846 . 45054))))) + (FILEMAP (NIL (3074 10997 (INDEXOBJ 3084 . 4107) (INDEXOBJP 4109 . 4557) (INDEX.DISPLAYFN 4559 . 6376) + (INDEX.IMAGEBOXFN 6378 . 7924) (INDEX.PUTFN 7926 . 8356) (INDEX.GETFN 8358 . 8749) (INDEX.COPYFN 8751 + . 9386) (INDEX.BUTTONEVENTINFN 9388 . 10995)) (11036 18909 (INSERT.INDEX 11046 . 11633) ( +INSERT.INDEXENTRY 11635 . 14402) (INSERT.KNOWN.INDEX 14404 . 16481) (SUBITEM.SELECTFN 16483 . 17477) ( +ADD.NEW.INDEX 17479 . 18907)) (18975 22906 (CHANGE.INDEX 18985 . 19553) (CHANGE.INDEXENTRY 19555 . +20305) (CHANGE.XINDEX.KEY 20307 . 20865) (CHANGE.XINDEX.ENTRY 20867 . 21500) (CHANGE.XINDEX.FONT 21502 + . 22371) (CHANGE.XINDEX.NUMBER 22373 . 22904)) (22948 30669 (GETHASH.INDEX 22958 . 23625) ( +INDEX.PAGE.NUMBER 23627 . 25206) (INDEX.MANUAL.DELIMITER 25208 . 25899) (INDEX.STRING 25901 . 26911) ( +GET.INDEXENTRY.NUMBER 26913 . 27933) (INDEX.LIST.REFS 27935 . 29425) (LIST.OF.INDEXENTRIES 29427 . +30667)) (30711 40915 (CREATE.INDEX.FILE 30721 . 32600) (DUMP.INDEX 32602 . 35022) (VIEW.INDEX.FILE +35024 . 36288) (GET.INDEX.FILE 36290 . 36680) (WRITE.INDEX.FILE 36682 . 39083) ( +WRITE.INDEX.PAGENUMBERS 39085 . 40285) (RESET.INDEX.PAGENUMBERS 40287 . 40913)) (41113 45167 ( +SELECTION.TO.STRING 41123 . 43955) (SELECTION.TO.INDEX 43957 . 45165))))) STOP diff --git a/lispusers/tmax/TMAX-INDEX.LCOM b/lispusers/tmax/TMAX-INDEX.LCOM index 58f9c29d5d26deaa6cfe8bbc7b4859d856adf2b7..546ccc8138462254fb680af5d9aa0de8e3ce905b 100644 GIT binary patch delta 272 zcmey-#rU?1aYCSok*Tg%X`Zf;fsu)Vp^=q=ft8W*#8iuVvl>kWE+r!qgshRVm9eFj zp_!6GO;S;6a(-?>W=?8KjY3UoML|)qRgHqDpNngRo{ML2fRAIOo1a2WW?qegl3S>c zj{>qedU|?5BT^DeK$@{xVPvSJsm!I}=IP_=9OUX4;_9NHgw2_gEg3a9%xV-&%*-q; zCTB9rO`glBCWhu>11l4AB?Yd@){JV5rknpUE@5N~4gs3#J9!23W0n9%KiADYEN>hD D2)9Yf delta 264 zcmaFc#rUI(aYCSop_#64Vv(+qfsu)Vfw`5bp_P&4#8eAElNwD0E+s=#gsh>Zm8q$f zv4N68O;S;6a(-?>W=?8KjY3UoML|)q6_AmaUy_lTmkwlQ=G7=DxrO@pC_qe@_)*jn zi&>^hnp_%go<6S5L9UJ=t}Y5n*qk%jo>7Ctq(;HS%+$hsaz3M+NSI?#utJEhV}!1! zpNngRv%hb!=HzZh4G{xfx6~wEOLGN7pjRxc3@nutxF$O?sxcaF{=m3|k8AR0O8w7+W-In diff --git a/lispusers/tmax/TMAX-NUMBER b/lispusers/tmax/TMAX-NUMBER index ff89d1307..4bae98223 100644 --- a/lispusers/tmax/TMAX-NUMBER +++ b/lispusers/tmax/TMAX-NUMBER @@ -1,13 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "16-Mar-2024 07:49:47" |{WMEDLEY}tmax>TMAX-NUMBER.;3| 33943 +(FILECREATED "25-Jun-2024 12:00:23" |{WMEDLEY}tmax>TMAX-NUMBER.;6| 34833 :EDIT-BY |rmk| :CHANGES-TO (FNS NUMBER.DISPLAYFN NUMBER.PREPRINTFN NUMBER.IMAGEBOXFN NUMBER.PUTFN NUMBER.GETFN NUMBER.COPYFN) - :PREVIOUS-DATE "18-Mar-2022 07:06:06" |{WMEDLEY}tmax>TMAX-NUMBER.;2|) + :PREVIOUS-DATE "24-Jun-2024 23:30:47" |{WMEDLEY}tmax>TMAX-NUMBER.;5|) (PRETTYCOMPRINT TMAX-NUMBERCOMS) @@ -94,13 +94,15 @@ 'ngroup)))) (NUMBER.DISPLAYFN - (LAMBDA (IMAGE.OBJ STREAM) (* \; "Edited 16-Mar-2024 07:46 by rmk") + (LAMBDA (IMAGE.OBJ STREAM) (* \; "Edited 25-Jun-2024 11:59 by rmk") + (* \; "Edited 16-Mar-2024 07:46 by rmk") (* |fsg| "24-Sep-87 14:56") (* |;;| "Display function for numberobjs. Allows different formats for display according to the use to which the numberobj is being put. If no specific action is specified, displaying defaults to printing out as a plain number.*") + (DECLARE (USEDFREE TSTREAM)) (|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| IMAGE.OBJ) - (LET* ((MAIN.WINDOW (\\TEDIT.PRIMARYW TEXTOBJ)) + (LET* ((MAIN.WINDOW (\\TEDIT.PRIMARYPANE TSTREAM)) (IMAGE.TAG (IMAGEOBJPROP IMAGE.OBJ 'TAG)) (OLD.FONT (DSPFONT NIL STREAM)) (NBR.FONT (SELECTQ USE @@ -140,14 +142,16 @@ (DSPFONT OLD.FONT STREAM))))) (NUMBER.PREPRINTFN - (LAMBDA (IMAGE.OBJ) (* \; "Edited 16-Mar-2024 07:47 by rmk") + (LAMBDA (IMAGE.OBJ) (* \; "Edited 25-Jun-2024 11:59 by rmk") + (* \; "Edited 16-Mar-2024 07:47 by rmk") (* \; "Edited 18-May-99 22:51 by rmk:") (* |fsg| "24-Sep-87 14:56") (* |;;| "Returns string that represents the number object, for plaintext put. If no specific action is specified, displaying defaults to printing out as a plain number.*") + (DECLARE (USEDFREE TSTREAM)) (WITH NUMBEROBJ (FETCH OBJECTDATUM OF IMAGE.OBJ) - (LET* ((MAIN.WINDOW (\\TEDIT.PRIMARYW TEXTOBJ)) + (LET* ((MAIN.WINDOW (\\TEDIT.PRIMARYPANE TSTREAM)) (IMAGE.TAG (IMAGEOBJPROP IMAGE.OBJ 'TAG))) (AND IMAGE.TAG (OR (TSP.GETCODEVAL IMAGE.TAG MAIN.WINDOW) (TSP.PUTCODE IMAGE.TAG IMAGE.OBJ MAIN.WINDOW))) @@ -159,46 +163,51 @@ NIL))))) (NUMBER.IMAGEBOXFN - (LAMBDA (OBJ STREAM CURRENTX RIGHTMARGIN) (* \; "Edited 16-Mar-2024 07:47 by rmk") + (LAMBDA (OBJ STREAM CURRENTX RIGHTMARGIN) (* \; "Edited 25-Jun-2024 11:59 by rmk") + (* \; "Edited 25-May-2024 20:46 by rmk") + (* \; "Edited 16-Mar-2024 07:47 by rmk") (* |fsg| " 4-Aug-87 14:56") -(* |;;;| "For Endnote numbers, the YSize is the current font height plus 0.25 times the Endnote number font height. We do this so the the Endnote number will be superscripted but not too much.") - -(* |;;;| "The YSize is computed as the current font height plus half of the NOTE or NGroup font. The reason is weird. Ask Sami for more details.") - - (|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| OBJ) - (LET* ((MAIN.WINDOW (\\TEDIT.PRIMARYW TEXTOBJ)) - (IMOBJ.STRING (MKSTRING NUMSTRING)) - (NBR.FONT (SELECTQ USE - (NOTE (|fetch| (ENDNOTEFONTS NUMBER.FONT) |of| (GET.ENDNOTE.FONTS - MAIN.WINDOW))) - (NGROUP FONT) - (ERROR "Undefined USE field" USE)))) - (AND (EQ USE 'NGROUP) - (PROGN (AND (STRINGP TEXT.BEFORE#) - (SETQ IMOBJ.STRING (CONCAT TEXT.BEFORE# IMOBJ.STRING))) - (AND (STRINGP TEXT.AFTER#) - (SETQ IMOBJ.STRING (CONCAT IMOBJ.STRING TEXT.AFTER#))))) - (AND (FONTP NBR.FONT) - (DSPFONT (FONTCREATE (FONTPROP NBR.FONT 'FAMILY) - (FONTPROP NBR.FONT 'SIZE) - (FONTPROP NBR.FONT 'FACE)) - STREAM)) - (|create| IMAGEBOX - XSIZE _ (STRINGWIDTH IMOBJ.STRING STREAM) - YSIZE _ (SELECTQ USE - (NOTE (FIX (PLUS (TIMES (DSPSCALE NIL STREAM) - (FONTPROP (CURRENT.DISPLAY.FONT STREAM) - 'HEIGHT)) - (TIMES 0.25 (FONTPROP STREAM 'HEIGHT))))) - (FONTPROP STREAM 'HEIGHT)) - YDESC _ (FONTPROP STREAM 'DESCENT) - XKERN _ 0))))) + (* |;;| "For Endnote numbers, the YSize is the current font height plus 0.25 times the Endnote number font height. We do this so the the Endnote number will be superscripted but not too much.") + + (* |;;| "WHY ARE THE NOTES HUNG AS WINDOWPROPS INSTEAD OF TEXTPROPS ") + + (DECLARE (USEDFREE TSTREAM)) + (LET* ((NUMBEROBJ (|fetch| OBJECTDATUM |of| OBJ)) + (IMOBJ.STRING (MKSTRING (|fetch| (NUMBEROBJ NUMSTRING) |of| NUMBEROBJ))) + (USE (|fetch| (NUMBEROBJ USE) |of| NUMBEROBJ)) + (FONT (SELECTQ USE + (NOTE (|fetch| (ENDNOTEFONTS NUMBER.FONT) |of| (GET.ENDNOTE.FONTS ( + \\TEDIT.PRIMARYPANE + TSTREAM)))) + (NGROUP (|fetch| (NUMBEROBJ FONT) |of| NUMBEROBJ)) + (ERROR "Undefined USE field" USE))) + (HEIGHT (FONTPROP FONT 'HEIGHT))) + (CL:WHEN (EQ USE 'NGROUP) + (SETQ IMOBJ.STRING (CONCAT (OR (STRINGP (|fetch| (NUMBEROBJ TEXT.BEFORE#) |of| + NUMBEROBJ + )) + "") + IMOBJ.STRING + (OR (STRINGP (|fetch| (NUMBEROBJ TEXT.AFTER#) |of| NUMBEROBJ) + ) + "")))) + (|create| IMAGEBOX + XSIZE _ (STRINGWIDTH IMOBJ.STRING FONT) + YSIZE _ (SELECTQ USE + (NOTE (FIX (PLUS (TIMES (DSPSCALE NIL STREAM) + HEIGHT) + (TIMES 0.25 HEIGHT)))) + HEIGHT) + YDESC _ (FONTPROP FONT 'DESCENT) + XKERN _ 0)))) (NUMBER.PUTFN - (LAMBDA (OBJ STREAM) (* \; "Edited 16-Mar-2024 07:48 by rmk") + (LAMBDA (OBJ STREAM) (* \; "Edited 25-Jun-2024 11:59 by rmk") + (* \; "Edited 16-Mar-2024 07:48 by rmk") (* |fsg| " 5-Aug-87 08:24") - (LET ((WINDOW (\\TEDIT.PRIMARYW TEXTOBJ)) + (DECLARE (USEDFREE TSTREAM)) + (LET ((WINDOW (\\TEDIT.PRIMARYPANE TSTREAM)) (USE (|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| OBJ) USE)) (OLD.FONT (|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| OBJ) @@ -215,14 +224,16 @@ (ERROR "Unknown NUMBER ImageObject type" USE))))) (NUMBER.GETFN - (LAMBDA (STREAM COPY.OBJECT) (* \; "Edited 16-Mar-2024 07:48 by rmk") + (LAMBDA (STREAM COPY.OBJECT) (* \; "Edited 25-Jun-2024 11:59 by rmk") + (* \; "Edited 16-Mar-2024 07:48 by rmk") (* |fsg| " 3-Sep-87 15:17") (* |;;;| "If COPY.OBJECT is non-NIL then we are COPYing it to this window.") + (DECLARE (USEDFREE TSTREAM)) (LET ((NBROBJ.DATUM (OR COPY.OBJECT (CDR (READ STREAM)))) (NEWOBJ (NUMBEROBJ)) - (WINDOW (\\TEDIT.PRIMARYW TEXTOBJ))) + (WINDOW (\\TEDIT.PRIMARYPANE TSTREAM))) (TSP.SETUP.FMMENU WINDOW) (AND (ILESSP (LENGTH NBROBJ.DATUM) 3) @@ -255,14 +266,15 @@ NEWOBJ))) (NUMBER.COPYFN - (LAMBDA (IMAGE.OBJ SOURCE.STREAM TARGET.STREAM) (* \; "Edited 16-Mar-2024 07:48 by rmk") + (LAMBDA (IMAGE.OBJ SOURCE.STREAM TARGET.STREAM) (* \; "Edited 25-Jun-2024 11:59 by rmk") + (* \; "Edited 16-Mar-2024 07:48 by rmk") (* |fsg| " 4-Aug-87 09:46") (* |;;;| "Here to COPY a Number Image Object. If we are copying to our own window, we delete the TAG if any so we don't get two ImageObjs with the same TAG name.") + (DECLARE (USEDFREE TSTREAM)) (SELECTQ (IMAGESTREAMTYPE TARGET.STREAM) - (TEXT (LET ((SOURCE.WINDOW (\\TEDIT.PRIMARYW TEXTOBJ)) - (TEXTOBJ (TEXTOBJ TARGET.STREAM))) + (TEXT (LET ((SOURCE.WINDOW (\\TEDIT.PRIMARYPANE TSTREAM))) (APPLY* (IMAGEOBJPROP IMAGE.OBJ 'GETFN) TARGET.STREAM (LIST (|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| IMAGE.OBJ) @@ -585,12 +597,12 @@ ) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (2562 18335 (NUMBEROBJ 2572 . 3678) (NUMBEROBJP 3680 . 4220) (NGROUPP 4222 . 4576) ( -NUMBER.DISPLAYFN 4578 . 7583) (NUMBER.PREPRINTFN 7585 . 8717) (NUMBER.IMAGEBOXFN 8719 . 11110) ( -NUMBER.PUTFN 11112 . 12284) (NUMBER.GETFN 12286 . 14471) (NUMBER.COPYFN 14473 . 16156) ( -NUMBER.BUTTONEVENTINFN 16158 . 18063) (NUMBEROBJ.TEDIT-TO-TEX-FN 18065 . 18333)) (18336 27507 ( -COPY.NGROUP.BRANCH 18346 . 19802) (DUMP.NGROUP.GRAPH 19804 . 20680) (NGROUP.BUTTONEVENTINFN 20682 . -21382) (NGROUP.DEFINE.TAG 21384 . 21987) (NUMBER.DELETE.TAG 21989 . 22248) (NGROUP.SHOW.TAG 22250 . -22572) (CHANGE.INSERTED.NGROUP.FORMAT 22574 . 24369) (CHANGE.NGROUP.FORMAT.#TEXT 24371 . 25957) ( -SHOW.INSERTED.NGROUP.FORMAT 25959 . 27505))))) + (FILEMAP (NIL (2562 19225 (NUMBEROBJ 2572 . 3678) (NUMBEROBJP 3680 . 4220) (NGROUPP 4222 . 4576) ( +NUMBER.DISPLAYFN 4578 . 7732) (NUMBER.PREPRINTFN 7734 . 9015) (NUMBER.IMAGEBOXFN 9017 . 11607) ( +NUMBER.PUTFN 11609 . 12930) (NUMBER.GETFN 12932 . 15266) (NUMBER.COPYFN 15268 . 17046) ( +NUMBER.BUTTONEVENTINFN 17048 . 18953) (NUMBEROBJ.TEDIT-TO-TEX-FN 18955 . 19223)) (19226 28397 ( +COPY.NGROUP.BRANCH 19236 . 20692) (DUMP.NGROUP.GRAPH 20694 . 21570) (NGROUP.BUTTONEVENTINFN 21572 . +22272) (NGROUP.DEFINE.TAG 22274 . 22877) (NUMBER.DELETE.TAG 22879 . 23138) (NGROUP.SHOW.TAG 23140 . +23462) (CHANGE.INSERTED.NGROUP.FORMAT 23464 . 25259) (CHANGE.NGROUP.FORMAT.#TEXT 25261 . 26847) ( +SHOW.INSERTED.NGROUP.FORMAT 26849 . 28395))))) STOP diff --git a/lispusers/tmax/TMAX-NUMBER.LCOM b/lispusers/tmax/TMAX-NUMBER.LCOM index ce014f7dd2352f0e1f467f49ff460be4040bbeef..9224fad97270d3fd23b2f7e5c279f77636deda3e 100644 GIT binary patch delta 1159 zcmZWnJ#5oJ6!y8l2~tT!h)|&L8X;&@TG_tXN!q1Oa*drI$F*IcRoRM&I)E6E5EP}b zAXTcMcw?Ya7dBM-BS3&yL4plctVpn;E-Xx(?~=CA8_sv%``-7??|aYhtloY+8B^5Z z@~!K`iln4LRz@Xh6yuevxrDZmf^bqv??)9pigTl~w(|NxH^=>P6w4i^C~`6t9-J_% zq~H+UBSlCauA*Rn8Kru(1;FVn_TQr?(f^ese+gYc>gKYzA$GeS)v9fhuAz=jTeryO z&E5!Vq5i|rZwC7J!cH~~1~E&92R2}ss9V87fhm{JuMB3bo-dD3HPb3lKmu#3mM0Dc z{Xb#cRKeqwQXqWpLPFK;{W@(SBMEX8aE{sE5!GSiD@h3U05;tieMt2->S zy7P7Z+hVmFf{`>Q+JbK*m}tMw=$9 zd*@6Rh~v~9NNc{-8*k3eQh!Zv#CFV@?o0>HfSiR|g$vU;kaOIHB5@0jX?rwR)-YIg zk3dcXtK`(DY{+JqRR>6Fx*fv`XRFjay+o*0RF+neK#GkhDt$MGWRgy=5_~d>KM(@{ zY~N&iX72WlAwC|jj{a{d34*O6-c>R=0a9jl`AE{mQv_ zV#oH6n*S>{fJ{Gf{KS~t>b9(D{O9>_deb&-GtTTa#CGb`CrN@5@eJKHAgB7@PsN*A z6=r93+a^{~fs6)K)AdGlt3X`pg9~`SrA$GQDgCgaE!KYRz*gGywjJ~-3V3=6_C4d# ae&!Zn_O1zwz7RZe*<}lf+6q3oC)5A#xuL5x3sIv)?KiymYqH(-_%XN*okK6FkF1nd!$L|{GN88E%7(R zxILKj(^tx5GXL<*D#@Yr%gVoGl73c=uUHVaV|{BJ3W$J0Fv1Ew5pfXq5HMlHf>56X zVRt-9SI%074MMeT0?|*A(y7g*60ToMHBu6l%&Za8*GO(^=~t)yS-G!iLEbmc{sEqFhg{y+wvirfS+p?#`o^PJbda;?zI2thdUN}p0svsu& z$%{Ox{_(ynD!kus|M@w~o%~(7JzdAOTDnXf6FNI_%tN7fgCrWVUBxA}9q1-e(qTgm zGfG`hoKAwS=mRzVEGk*2CWXvUa|dd8(v9LV(%*6y9N$@RJXM7`t^=KM*kJ-p$H=!q z*m6(cnOSTffo}tk<8cgj3wm7WJnV*J!R4tFpdO62^XX&J&6}viKft{#tJp*~h0yI-;j=IcZrR6}jJKh?v!#W&qY(f&;K*PrlY!nQ40Z9mZ z@pvZ!$15z`P=yXEmi0J_7S9IM#Sc=a4tNeUcJA!$zw_Rm{XIyHNw&~;^TPpME?&rS^Ic;{IFFsmbS^XFBOW$y42>6FYS@O>?d9F%j)QGc{p8v>yzQj zkG1mQUt#*sg-c|R*6J_L{Ctw8XDJqNaGZ_AZiMvN_6ajeN~kNGcb_GFFp+JMM0z%V z#jMWam?6^?N6w-MML_|lIt&t_v#`SxoO1$p_J2@pW6$h=;TP-x%}W2Tmh`B;b`>RA d)SxC?AXpDvvl!!I)bdhtu}-}C+QrH%{{e1)IT-)| diff --git a/lispusers/tmax/TMAX-XREF b/lispusers/tmax/TMAX-XREF index 8b0debc69..ff8ca52cb 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 "25-Jun-2024 12:00:23" |{WMEDLEY}tmax>TMAX-XREF.;13| 24116 :EDIT-BY |rmk| - :CHANGES-TO (VARS XREF.DISPLAY.METHODS) - (FNS XREF.BUTTONEVENTINFN XREF.GETFN XREF.GET.TOOBJ) + :CHANGES-TO (FNS XREF.GETFN XREF.GET.TOOBJ) - :PREVIOUS-DATE "16-Mar-2024 07:52:25" |{WMEDLEY}tmax>TMAX-XREF.;6|) + :PREVIOUS-DATE "24-Jun-2024 23:30:47" |{WMEDLEY}tmax>TMAX-XREF.;12|) (PRETTYCOMPRINT TMAX-XREFCOMS) @@ -110,20 +109,18 @@ (prin1 (xref.get.display.text obj) stream))) -(xref.imageboxfn - (lambda (obj stream) (* |ss:| "27-Jun-87 16:39") - (* |Returns| |the| |size| |of| |an| xref |imageobject| |based| |on| |the| - |string| |that| |will| |be| |used| |to| |display| |it| |which| |is| |found| - |using| xref.get.display.text.) - - (dspfont (current.display.font stream) - stream) - (|create| imagebox - xsize _ (tedit.stringwidth (xref.get.display.text obj) - stream) - ysize _ (fontprop stream 'height) - ydesc _ (fontprop stream 'descent) - xkern _ 0))) +(XREF.IMAGEBOXFN + (LAMBDA (OBJ STREAM) (* \; "Edited 25-May-2024 20:34 by rmk") + (* |ss:| "27-Jun-87 16:39") + + (* |;;| "Returns the size of an XREF imageobject based on the string that will be used to display it which is found using XREF.GET.DISPLAY.TEXT.") + + (|create| IMAGEBOX + XSIZE _ (TEDIT.STRINGWIDTH (XREF.GET.DISPLAY.TEXT OBJ) + STREAM) + YSIZE _ (FONTPROP STREAM 'HEIGHT) + YDESC _ (FONTPROP STREAM 'DESCENT) + XKERN _ 0))) (xref.putfn (lambda (obj stream) (* |fsg| "29-Jul-87 09:08") @@ -132,9 +129,11 @@ stream))) (XREF.GETFN - (LAMBDA (STREAM COPY.OBJECT) (* \; "Edited 16-Mar-2024 07:49 by rmk") + (LAMBDA (STREAM COPY.OBJECT) (* \; "Edited 25-Jun-2024 11:59 by rmk") + (* \; "Edited 16-Mar-2024 07:49 by rmk") (* |fsg| "20-Aug-87 14:59") - (TSP.SETUP.FMMENU (\\TEDIT.PRIMARYW TEXTOBJ)) + (DECLARE (USEDFREE TSTREAM)) + (TSP.SETUP.FMMENU (\\TEDIT.PRIMARYPANE TSTREAM)) (LET* ((XREF.ARGS (OR COPY.OBJECT (CDR (READ STREAM)))) (XREF.OBJ (XREF (CAR XREF.ARGS)))) (IMAGEOBJPROP XREF.OBJ 'REFERENCE.BY (OR (CADR XREF.ARGS) @@ -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)) @@ -252,12 +252,14 @@ "/" reference.by ">")))))) (XREF.GET.TOOBJ - (LAMBDA (TAG) (* \; "Edited 16-Mar-2024 07:49 by rmk") + (LAMBDA (TAG) (* \; "Edited 25-Jun-2024 11:59 by rmk") + (* \; "Edited 16-Mar-2024 07:49 by rmk") (* |fsg| "13-Jul-87 11:13") + (DECLARE (USEDFREE TSTREAM)) (* |;;| "This function is called in a specific context where a reference must be displayed. It is called by an XREF object and should return the IMAGEOBJECT that the XREF object is referencing.") - (GETHASH TAG (WINDOWPROP (\\TEDIT.PRIMARYW TEXTOBJ) + (GETHASH TAG (WINDOWPROP (\\TEDIT.PRIMARYPANE TSTREAM) 'TSP.CODE.ARRAY)))) (tspobj.gettype @@ -476,14 +478,14 @@ (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 (3626 11427 (XREF 3636 . 4203) (XREFP 4205 . 4592) (XREF.DISPLAYFN 4594 . 5028) ( +XREF.IMAGEBOXFN 5030 . 5655) (XREF.PUTFN 5657 . 5903) (XREF.GETFN 5905 . 6583) (XREF.COPYFN 6585 . +7195) (XREF.BUTTONEVENTINFN 7197 . 10400) (XREF.WHENDELETEDFN 10402 . 10976) (XREF.TEDIT-TO-TEX-FN +10978 . 11425)) (11428 13552 (XREF.GET.DISPLAY.TEXT 11438 . 12722) (XREF.GET.TOOBJ 12724 . 13401) ( +TSPOBJ.GETTYPE 13403 . 13550)) (13553 19927 (UPDATE.XREFS 13563 . 15946) (INSERT.REF 15948 . 16360) ( +GET.REF 16362 . 17417) (GET.REFERENCE.BY 17419 . 18406) (TSP.LIST.REFS 18408 . 18860) (TSP.GET.INCODE +18862 . 19516) (TSP.GETCODEVAL 19518 . 19740) (TSP.PUTCODE 19742 . 19925)) (20019 20990 ( +XREF.ADD.DISPLAYFN 20029 . 20543) (XREF.GET.DISPLAYFN 20545 . 20988)) (21050 23412 ( +NGROUP.XREF.DISPLAYFN 21060 . 22020) (NGROUP.XREF.DISPLAY.TEXT 22022 . 22658) (NOTE.XREF.DISPLAYFN +22660 . 23410))))) STOP diff --git a/lispusers/tmax/TMAX-XREF.LCOM b/lispusers/tmax/TMAX-XREF.LCOM index 50915cf92a03018896802e677781237afc3c3918..00eec93a5fcb893c87ca49c6c57e1e72e0c0798f 100644 GIT binary patch delta 486 zcmZXP%}T>S6os)g72>MsMijXOgceN5O!}jPo3xpt;Oyx_ndpqcRyNF_I$F1i*jQ$kgWmuPw1R~-38LF}lNvS+KWp%v{KsPO#uyLCyp5e0plRtw1(-^D3Q63gut=dGp=zMSplT8usGH%@o2DIrY7k zOw&Sgklt@21f1StO2B-}skJSG)uFhkR}3rgY&}#M?J)i^E`sSg%%DNlw>;+hfXe?i v+?5xT_w;9mM^e3+yb2F#Pj~2~lz9=>J0WueYEQm40%7hTS%2nu%Ie!c2!@03 delta 465 zcmZvYJxjw-6o!-9SdA1~{Gtx!5GXW5V?LV3W{b&xyk?+HAOp+u4;_>KWGLCup?}9FfeBJeYWMgDe zsaa{+6f&ZLfs7rB=f@NbY2nD z>Shn4z86NM;iMUh5vr-`pAl?pme0MiWtm}^oVA)x#^SS?yf4+ZRSnXL9+e2iUT`q* z9NGcJNUHU%E+`5(r00eK1s&`NV-(QuYMCq+>zV=C<{)BYuSY`+YWt6pQerVV&p$1r uAr1ErlZd-!2eTLMmRlz%{S%dZFF+Eptsp>ncC|*hFZ8j5Q*^g%RXzYT33uZF 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} From 60629f36b7be3dd261a58aab6c3788ab6f433576 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Tue, 25 Jun 2024 21:47:38 -0700 Subject: [PATCH 3/5] A few more compatibility updates --- library/TEXEC | 45 ++-- library/TEXEC.LCOM | Bin 44761 -> 44712 bytes library/tedit/TEDIT-CHAT | 29 +-- library/tedit/TEDIT-CHAT.LCOM | Bin 5488 -> 5409 bytes lispusers/DOC-OBJECTS | 386 ++++++++++++++++------------------ lispusers/DOC-OBJECTS.LCOM | Bin 22603 -> 22299 bytes 6 files changed, 220 insertions(+), 240 deletions(-) diff --git a/library/TEXEC b/library/TEXEC index c50411f6c..5e62c7022 100644 --- a/library/TEXEC +++ b/library/TEXEC @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "28-Mar-2024 00:09:16" |{WMEDLEY}TEXEC.;6| 185248 +(FILECREATED " 3-Apr-2024 13:24:22" |{WMEDLEY}TEXEC.;7| 185333 :EDIT-BY |rmk| - :CHANGES-TO (FNS TEXEC.DEFAULT.MENUFN TEXEC.SHRINK.ICONCREATE) + :CHANGES-TO (FNS TEXEC.DEFAULT.MENUFN) - :PREVIOUS-DATE "18-Jun-2023 09:48:54" |{WMEDLEY}TEXEC.;5|) + :PREVIOUS-DATE "28-Mar-2024 00:09:16" |{WMEDLEY}TEXEC.;6|) (PRETTYCOMPRINT TEXECCOMS) @@ -184,7 +184,8 @@ TEXSTREAM))) (TEXEC.DEFAULT.MENUFN - (LAMBDA (W) (* \; "Edited 28-Mar-2024 00:06 by rmk") + (LAMBDA (W) (* \; "Edited 3-Apr-2024 13:24 by rmk") + (* \; "Edited 28-Mar-2024 00:06 by rmk") (* \; "Edited 13-Jun-90 00:16 by mitani") (* |;;| @@ -219,7 +220,7 @@ (|replace| (TEXTOBJ EDITOPACTIVE) |of| TEXTOBJ |with| (OR (CAR ITEM) T)) (* \; - "So we ca ntell the guy WHAT op is active.") + "So we can tell the guy what op is active.") (SELECTQ (CAR ITEM) (|Put| (TEDIT.PUT TEXTOBJ NIL NIL (TEXTPROP TEXTOBJ 'CLEARPUT))) (|Plain-Text| (TEDIT.PUT TEXTOBJ NIL NIL T)) @@ -2984,21 +2985,21 @@ (RPAQ? TEXEC.BUFFERLIMIT 10000) (DECLARE\: DONTCOPY - (FILEMAP (NIL (3048 171118 (TEXEC.BACKSKREAD 3058 . 7682) (TEXEC.OPENTEXTSTREAM 7684 . 9742) ( -TEXEC.DEFAULT.MENUFN 9744 . 13790) (TEXEC.DO?CMD 13792 . 19110) (TEXEC.CREATEMENU 19112 . 19570) ( -TEXEC.GET 19572 . 28407) (TEXEC.INCLUDE 28409 . 41794) (TEXEC.FIND.FORWARD 41796 . 54684) ( -TEXEC.FIND.BACKWARD 54686 . 68188) (TEXEC.MENU.WHENHELDFN 68190 . 68849) (TEXEC.SHRINK.ICONCREATE -68851 . 71607) (TEXEC.FILLBUFFER 71609 . 88043) (TEXEC.FILLBUFFER.TCLASS 88045 . 94385) ( -TEXEC.CHSELPENDING 94387 . 102877) (TEXEC.FILLBUFFER.CHARDELETE 102879 . 104934) ( -TEXEC.FILLBUFFER.WORDDELETE 104936 . 110064) (TEXEC.FILLBUFFER.LINEDELETE 110066 . 112948) ( -TEXEC.PARENCOUNT 112950 . 114339) (TEXEC.PARENMATCH 114341 . 115881) (TEXEC.FLASHCARET 115883 . 118542 -) (TEXEC.TEXTSTREAM.TO.LINEBUF 118544 . 121231) (TEXEC.FIX 121233 . 124402) (TEXEC.NTHBUFCHARBACK -124404 . 125467) (TEXEC.NTHBACKCHNUM 125469 . 126754) (TEXEC.EOTP 126756 . 127489) (TEXEC.GETKEY -127491 . 130407) (TEXEC.INSERTCHAR 130409 . 132710) (TEXEC.DELETE 132712 . 133487) (TEXEC.\\CHDEL1 -133489 . 136614) (TEXEC.?EQUAL 136616 . 137665) (TEDIT.SCROLL? 137667 . 142630) (TEXEC.DISPLAYTEXT -142632 . 149407) (\\TEXEC.TEXTBOUT 149409 . 152417) (\\TEXEC.TEXTBOUT1 152419 . 158053) ( -\\TEXEC.TEXTBOUT2 158055 . 160386) (\\TEXEC.TEXTBOUT3 160388 . 161778) (\\TEXEC.TEXTBOUT4 161780 . -163823) (\\TEXEC.SELFN 163825 . 165200) (TEXEC.PRINTARGS 165202 . 170165) (TEXEC.PROCENTRYFN 170167 . -170708) (TEXEC.PROCEXITFN 170710 . 171116)) (171178 177553 (TEXEC 171188 . 175610) (TTEXEC 175612 . -177551))))) + (FILEMAP (NIL (3024 171203 (TEXEC.BACKSKREAD 3034 . 7658) (TEXEC.OPENTEXTSTREAM 7660 . 9718) ( +TEXEC.DEFAULT.MENUFN 9720 . 13875) (TEXEC.DO?CMD 13877 . 19195) (TEXEC.CREATEMENU 19197 . 19655) ( +TEXEC.GET 19657 . 28492) (TEXEC.INCLUDE 28494 . 41879) (TEXEC.FIND.FORWARD 41881 . 54769) ( +TEXEC.FIND.BACKWARD 54771 . 68273) (TEXEC.MENU.WHENHELDFN 68275 . 68934) (TEXEC.SHRINK.ICONCREATE +68936 . 71692) (TEXEC.FILLBUFFER 71694 . 88128) (TEXEC.FILLBUFFER.TCLASS 88130 . 94470) ( +TEXEC.CHSELPENDING 94472 . 102962) (TEXEC.FILLBUFFER.CHARDELETE 102964 . 105019) ( +TEXEC.FILLBUFFER.WORDDELETE 105021 . 110149) (TEXEC.FILLBUFFER.LINEDELETE 110151 . 113033) ( +TEXEC.PARENCOUNT 113035 . 114424) (TEXEC.PARENMATCH 114426 . 115966) (TEXEC.FLASHCARET 115968 . 118627 +) (TEXEC.TEXTSTREAM.TO.LINEBUF 118629 . 121316) (TEXEC.FIX 121318 . 124487) (TEXEC.NTHBUFCHARBACK +124489 . 125552) (TEXEC.NTHBACKCHNUM 125554 . 126839) (TEXEC.EOTP 126841 . 127574) (TEXEC.GETKEY +127576 . 130492) (TEXEC.INSERTCHAR 130494 . 132795) (TEXEC.DELETE 132797 . 133572) (TEXEC.\\CHDEL1 +133574 . 136699) (TEXEC.?EQUAL 136701 . 137750) (TEDIT.SCROLL? 137752 . 142715) (TEXEC.DISPLAYTEXT +142717 . 149492) (\\TEXEC.TEXTBOUT 149494 . 152502) (\\TEXEC.TEXTBOUT1 152504 . 158138) ( +\\TEXEC.TEXTBOUT2 158140 . 160471) (\\TEXEC.TEXTBOUT3 160473 . 161863) (\\TEXEC.TEXTBOUT4 161865 . +163908) (\\TEXEC.SELFN 163910 . 165285) (TEXEC.PRINTARGS 165287 . 170250) (TEXEC.PROCENTRYFN 170252 . +170793) (TEXEC.PROCEXITFN 170795 . 171201)) (171263 177638 (TEXEC 171273 . 175695) (TTEXEC 175697 . +177636))))) STOP diff --git a/library/TEXEC.LCOM b/library/TEXEC.LCOM index eeb1bf40d55731c0ea0a605df8417f8c8aa31e75..3fddf76d69562b63eb85f98f01a87b953d353aa9 100644 GIT binary patch delta 205 zcmcb4mubaarU`)}3dXvQ1x30>21X_dhQ?M#CRRp96H|4h%xg3ixRex(kYtUl3@xmT z4JWSFi?7Mdt5HyL3-$3)Kvtrsr>CS)lag4Hno`51fK9i#k|vjio2QSfbC9cJh^q@w z5f%qb4q%kwG_O%Gv@kU`HlAF{XeOYkU=rM7)mGG>|%&P$^aSQeFQ9xFwr>Cc+P?M5alA2PZfXxImB~303H%}i|=O9i$1<8ZDulR3xH{_vdjxsdJldX?sZTyLxZbh?R!m8pr60@vi-j8crIo3AlmS_1%nO+C#3 diff --git a/library/tedit/TEDIT-CHAT b/library/tedit/TEDIT-CHAT index 2a1637fa7..32b529212 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 "24-Jun-2024 00:05:09" {WMEDLEY}tedit>TEDIT-CHAT.;16 12363 :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 " 2-May-2024 18:09:26" {WMEDLEY}tedit>TEDIT-CHAT.;15) (PRETTYCOMPRINT TEDIT-CHATCOMS) @@ -71,16 +70,18 @@ (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 24-Jun-2024 00:04 by rmk") + (* ; "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 TSTREAM (FGETTOBJ TEXTOBJ SEL))) + (LF NIL) + (BOUT TSTREAM CH]) ) @@ -212,6 +213,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 4544 (TEDITSTREAM.INIT 896 . 1823) (TEDITCHAT.MENUFN 1825 . 3661) (TEDITCHAT.CHARFN + 3663 . 4542)) (4591 11475 (TEDIT.DISPLAYTEXT 4601 . 11473))))) STOP diff --git a/library/tedit/TEDIT-CHAT.LCOM b/library/tedit/TEDIT-CHAT.LCOM index ac40324226dcff04bb3775473b4d31a0120828db..795bc5b740ffc8ddc7967f340212f059b640c134 100644 GIT binary patch delta 446 zcmeyMwNPt9gs_ROS81NEk%5tkf`NgRfvJ^&<-}~2$tFxf^@e7e3S3G?#t0Qg##RQ# zR>sCk3Q0w&$@#ejnK`K`3aJ$ZMa8OC3L&m8o*~X2jv;zLBFN28Au~@w$t~2!M*-Ok zJv}`og_Oh+phm2QTPSIAX}Ed%xXL;QxjF*PR8TU);>gJgOls_gW(tNz#%7cI8D(wV z{DLuDps8RL5ab%>=^q-b>jE@OK}o?#*Eg{e;$K4xpl7X&%#;+kCMz+iFd3R|c4vCZ zTyF?8CnCh($x9(X!9XD-I0WbpUj<-JJv0>k&{fZ!yL zAR~hZCx|J?$mn@e0?c$s$>I1gYrlu*NhvOnlt2#Ghlv>i9u5#5gNCWOf|Gw}h=Pf+ pLJZKq@}7_YbaC}@1zKcet`Otw7~~qF=i(pkr(kHdc@NtbJ^(;FYHa`j delta 558 zcmZuv$x6dO7)}(57LgV&;sQTGp%oI6X`*x#X_`z)ByCDE-Jq9l*lJr#^&%pD1*JD{ zK7-yp_d&dP>LWN!1VuWBnfYh=wwc$X`O#B#Dx+Vni= zMZ?mmbgHOHhzbb(o>w%iDp*qlXpTFro585p@3f)SZ456vw}*IIkMB*`T`yOF07x=z zzv$>SN~#okLxz?sIS%}Vlq5-jcH@rWEThtdWHgbp9b$MyXPE5J68!=^RPw}hNbONL z>-U=D#`r$8^3M<`2%+f}zdtGKo*#+~+!}7)PeLMB_*wKRB1m=Q}Lbog@ zT=YoUc1yl!GMym6v8a#6Va!Ous*L56KQgBlzsslJzWC48iOd+P)XiRi4GILXK3#y= zAhR+F9OgN0MUQZ-%{JB-L!9TV*>*6^wEJuGmk+Bw+lel=V*Tj+xf`=)QYNgqgr-5( lEm26Np&mZWLbpjA!dT+$Bh(GuBUCcoN`Xc6Hi*1$egoZ(jf(&P diff --git a/lispusers/DOC-OBJECTS b/lispusers/DOC-OBJECTS index 7bbf658a6..82c209a93 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 "12-May-2024 09:03:51" {WMEDLEY}DOC-OBJECTS.;50 52015 :EDIT-BY rmk - :CHANGES-TO (FNS DOCOBJ-INCLUDE-EDIT-WINDOWP) + :CHANGES-TO (FNS DOCOBJ-INCLUDE-EDIT DOCOBJ-INCLUDE-BUTTONEVENTINFN + DOCOBJ-INCLUDE-BEFOREHARDCOPYFN) - :PREVIOUS-DATE "19-Mar-2024 19:36:25" {WMEDLEY}DOC-OBJECTS.;35) + :PREVIOUS-DATE " 8-May-2024 10:42:40" {WMEDLEY}DOC-OBJECTS.;47) (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") + (SETTOBJ TEXTOBJ \DIRTY OLDDIRTY) - (for ETAIL on (GETTOBJ TEXTOBJ TXTHISTORY) until (EQ ETAIL PREVEVENTS) - collect (CAR ETAIL) finally (SETTOBJ TEXTOBJ TXTHISTORY (CONS $$VAL PREVEVENTS))) + (* ;; "Make a single event for the afterfn to undo") - (* ;; "In case something screws up, at least redisplaying will show something correctly (even if we aren't \DIRTY)") - - (\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)))]) ) @@ -750,11 +733,10 @@ IMAGEOBJ]) (DOCOBJ-INCLUDE-EDIT - [LAMBDA (INCLOBJ) (* ; "Edited 9-May-2018 11:09 by rmk:") - (* ; "Edited 9-May-2018 10:35 by rmk:") - (* ; - "Edited 26-Oct-87 19:57 by Koomen") - (DECLARE (SPECVARS TEXTOBJ)) + [LAMBDA (INCLOBJ TSTREAM) (* ; "Edited 12-May-2024 09:03 by rmk") + (* ; "Edited 9-May-2018 11:09 by rmk:") + (* ; "Edited 9-May-2018 10:35 by rmk:") + (* ; "Edited 26-Oct-87 19:57 by Koomen") (SELECTQ [MENU (OR DOCOBJ-INCLUDE-EDITMENU (SETQ DOCOBJ-INCLUDE-EDITMENU (create MENU TITLE _ "Edit Include" @@ -771,41 +753,38 @@ CENTERFLG _ T MENUOFFSET _ '(-1 . 30) CHANGEOFFSETFLG _ 'Y] - (NEW.FILE (LET [(NEWNAME (TEDIT.GETINPUT TEXTOBJ "Enter new file name: " (fetch - (INCLOBJ FILENAME) + (NEW.FILE (LET [(NEWNAME (TEDIT.GETINPUT TSTREAM "Enter new file name: " (fetch (INCLOBJ + FILENAME) of INCLOBJ] (if [AND NEWNAME (SETQ NEWNAME (MKSTRING NEWNAME)) - (NOT (EQUAL NEWNAME (fetch (INCLOBJ FILENAME) of INCLOBJ] + (NOT (EQUAL NEWNAME (fetch (INCLOBJ FILENAME) of INCLOBJ] then (replace (INCLOBJ FILENAME) of INCLOBJ with NEWNAME) - T))) + T))) (EDIT.FILE (for W in (OPENWINDOWS) - bind [FULLNAME _ (OR [FINDFILE (fetch (INCLOBJ FILENAME) of INCLOBJ - ) - T - (CONS (PACKFILENAME.STRING 'HOST - (FILENAMEFIELD (FETCH TXTFILE - OF TEXTOBJ) - 'HOST) - 'DIRECTORY - (FILENAMEFIELD (FETCH TXTFILE - OF TEXTOBJ) - 'DIRECTORY] - (INFILEP (fetch (INCLOBJ FILENAME) of INCLOBJ] + bind [FULLNAME _ (OR (FINDFILE-WITH-EXTENSIONS + (fetch (INCLOBJ FILENAME) of INCLOBJ) + (CONS (PACKFILENAME.STRING 'HOST (FILENAMEFIELD + TXTFILE + 'HOST) + 'DIRECTORY + (FILENAMEFIELD TXTFILE 'DIRECTORY)) + DIRECTORIES) + *TEDIT-EXTENSIONS*) + (INFILEP (fetch (INCLOBJ FILENAME) of INCLOBJ] first (if (NULL FULLNAME) - then (TEDIT.PROMPTPRINT TEXTOBJ "Can't find " T) - (TEDIT.PROMPTPRINT TEXTOBJ (fetch (INCLOBJ FILENAME) - of INCLOBJ)) - (RETURN)) when (SETQ W (DOCOBJ-INCLUDE-EDIT-WINDOWP - FULLNAME W)) + then (TEDIT.PROMPTPRINT TSTREAM "Can't find " T) + (TEDIT.PROMPTPRINT TSTREAM (fetch (INCLOBJ FILENAME) + of INCLOBJ)) + (RETURN)) when (SETQ W (DOCOBJ-INCLUDE-EDIT-WINDOWP FULLNAME W)) do (TOTOPW W) - (GIVE.TTY.PROCESS W) - (RETURN) finally (TEDIT (MKATOM FULLNAME)))) + (GIVE.TTY.PROCESS W) + (RETURN) finally (TEDIT (MKATOM FULLNAME)))) (ENABLE (if (NOT (fetch (INCLOBJ ENABLEDP) of INCLOBJ)) then (replace (INCLOBJ ENABLEDP) of INCLOBJ with T) - T)) + T)) (DISABLE (if (fetch (INCLOBJ ENABLEDP) of INCLOBJ) then (replace (INCLOBJ ENABLEDP) of INCLOBJ with NIL) - T)) + T)) NIL]) (DOCOBJ-INCLUDE-EDIT-WINDOWP @@ -842,56 +821,55 @@ (DEFINEQ (DOCOBJ-INCLUDE-BEFOREHARDCOPYFN - [LAMBDA (TEXTOBJ OBJ PC CH#) (* ; "Edited 16-Feb-2024 23:47 by rmk") + [LAMBDA (TEXTOBJ OBJ PC CH#) (* ; "Edited 12-May-2024 08:48 by rmk") + (* ; "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-WITH-EXTENSIONS INCLFILE + (AND TXTFILE (CONS (PACKFILENAME.STRING 'HOST (FILENAMEFIELD + TXTFILE + 'HOST) + 'DIRECTORY + (FILENAMEFIELD TXTFILE 'DIRECTORY)) + DIRECTORIES)) + *TEDIT-EXTENSIONS*)) + (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") @@ -919,12 +897,13 @@ (DOCOBJ-INCLUDE-BUTTONEVENTINFN [LAMBDA (IMAGEOBJ WINDOWSTREAM SELECTION RELX RELY WINDOW HOSTSTREAM BUTTON) + (* ; "Edited 12-May-2024 09:01 by rmk") (* ; "Edited 23-Oct-87 00:46 by Koomen") - (if (AND (EQ BUTTON 'MIDDLE) (DOCOBJ-WAIT-MOUSE WINDOWSTREAM)) then (ALLOW.BUTTON.EVENTS) - (if (DOCOBJ-INCLUDE-EDIT (IMAGEOBJPROP IMAGEOBJ 'OBJECTDATUM)) + (if (DOCOBJ-INCLUDE-EDIT (IMAGEOBJPROP IMAGEOBJ 'OBJECTDATUM) + HOSTSTREAM) then (DOCOBJ-INCLUDE-RESET-OBJ IMAGEOBJ) 'CHANGED]) @@ -1011,30 +990,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 (7736 20577 (DOCOBJ-ACQUIRE-OBJECT 7746 . 8747) (DOCOBJ-INIT 8749 . 9377) ( +DOCOBJ-TEDIT-MENU-ENTRY 9379 . 9801) (DOCOBJ-GET-LOOKS 9803 . 12263) (DOCOBJ-REGISTER-OBJECT 12265 . +12919) (DOCOBJ-STRING-IMAGEBOX 12921 . 13869) (DOCOBJ-WAIT-MOUSE 13871 . 14331) ( +DOCOBJ-BEFOREHARDCOPYFN 14333 . 19424) (DOCOBJ-AFTERHARDCOPYFN 19426 . 20575)) (20607 20874 ( +DOCOBJ-ACQUIRE-EVALED-OBJECT 20617 . 20872)) (21074 21216 (DOCOBJ-ACQUIRE-SNAPPED-OBJECT 21084 . 21214 +)) (21555 26351 (DOCOBJ-EDIT-TIMESTAMP 21565 . 22094) (DOCOBJ-MAKE-TIMESTAMP 22096 . 22507) ( +DOCOBJ-MAKE-TIMESTAMP-IMAGEFNS 22509 . 23579) (DOCOBJ-TIMESTAMP-BUTTONEVENTINFN 23581 . 24112) ( +DOCOBJ-TIMESTAMP-COPYFN 24114 . 24439) (DOCOBJ-TIMESTAMP-DISPLAYFN 24441 . 24734) ( +DOCOBJ-TIMESTAMP-GETFN 24736 . 24976) (DOCOBJ-TIMESTAMP-IMAGEBOXFN 24978 . 25334) ( +DOCOBJ-TIMESTAMP-PREPRINTFN 25336 . 25567) (DOCOBJ-TIMESTAMP-PUTFN 25569 . 25938) ( +DOCOBJ-TIMESTAMP-TO-STRING 25940 . 26349)) (26645 30952 (DOCOBJ-MAKE-FILESTAMP 26655 . 26996) ( +DOCOBJ-MAKE-FILESTAMP-IMAGEFNS 26998 . 28040) (DOCOBJ-FILESTAMP-COPYFN 28042 . 28357) ( +DOCOBJ-FILESTAMP-DISPLAYFN 28359 . 28647) (DOCOBJ-FILESTAMP-GETFN 28649 . 29002) ( +DOCOBJ-FILESTAMP-IMAGEBOXFN 29004 . 29342) (DOCOBJ-FILESTAMP-GET-FULLNAME 29344 . 29962) ( +DOCOBJ-FILESTAMP-NEW-FULLNAME 29964 . 30437) (DOCOBJ-FILESTAMP-PREPRINTFN 30439 . 30648) ( +DOCOBJ-FILESTAMP-PUTFN 30650 . 30950)) (31275 33772 (DOCOBJ-MAKE-HRULE 31285 . 31699) ( +DOCOBJ-EDIT-HRULE 31701 . 32173) (DOCOBJ-HRULE-INIT 32175 . 32507) (DOCOBJ-HRULE-GET-WIDTH 32509 . +33320) (DOCOBJ-HRULE-BUTTONEVENTINFN 33322 . 33770)) (34191 42533 (DOCOBJ-MAKE-INCLUDE 34201 . 34602) +(DOCOBJ-MAKE-INCLUDE-IMAGEFNS 34604 . 35609) (DOCOBJ-INCLUDE-CREATE-OBJ 35611 . 36379) ( +DOCOBJ-INCLUDE-EDIT 36381 . 40650) (DOCOBJ-INCLUDE-EDIT-WINDOWP 40652 . 41508) ( +DOCOBJ-INCLUDE-RESET-OBJ 41510 . 42531)) (42534 51474 (DOCOBJ-INCLUDE-BEFOREHARDCOPYFN 42544 . 46132) +(DOCOBJ-INCLUDE-CLEANUPFN 46134 . 47653) (DOCOBJ-INCLUDE-BUTTONEVENTINFN 47655 . 48332) ( +DOCOBJ-INCLUDE-COPYFN 48334 . 48552) (DOCOBJ-INCLUDE-DISPLAYFN 48554 . 49306) (DOCOBJ-INCLUDE-GETFN +49308 . 50031) (DOCOBJ-INCLUDE-IMAGEBOXFN 50033 . 51042) (DOCOBJ-INCLUDE-PREPRINTFN 51044 . 51263) ( +DOCOBJ-INCLUDE-PUTFN 51265 . 51472))))) STOP diff --git a/lispusers/DOC-OBJECTS.LCOM b/lispusers/DOC-OBJECTS.LCOM index 7cf44377e72e6cd20177dd7674621bceda7b6c87..95e783b1d2fda792778f0648bcc8aa98bd0138e1 100644 GIT binary patch delta 2533 zcmZ`*-)|d55cWA~l%yqfQa4T9ASMo_Nl4uLWuI+TkgL7UU25N*e3!T>5hY4O<0iNW z6(Q70sSs}<)UZMb6;uh{kf@S41&RtO;>iV3A@L{hjw|s{cw%BaHABKTAc93dL zh~9HTFO@6kl$*@wVXtQ_7K_6C?3IOi*zbl^bf|qWXXZ(!NOX^6(P_URt`4-uMTpCy z6sMO3W&2IqsXcQNV@o?lGG*G6?r0V-fhZ(*LzTp|DyLO(_3A*gstvW%hfUqpj^Hmr z`ndV|mFZw05FBd@;9qB_p#Q`st9r<&1*b37t0&9@O?P_rc?GH?d~4&F-ojjJEo;a5 zp^ZO`ni|r-G-{E?#`Q&`ox2SvY8b$8k&mUyVb?7(i2noQ^fk z;#A>h@NS&TVCS=0v*=BuA@L0|MJ&%nQ^aU^F!c3M-->U!9)ePU90CfinNANEiA%hk zT`ai6Lm;%b2Lr-ImTM_|nGKOhDa`HiL1r$Z-5r_hE`|O2_6H5WM#f#^!ARgzeX;&s zV5&+(HOMHg##YWOx}IZ_3;|h+@3Sf;QjjG%(;`^}OihAW(8mcv?l1yL zl0u!1qbte%j%quL8QYm=_^Z-3#2_d5l-+{dlM@PLZR?~5a-5Np(*U1S;0!^qiJ=#> z>=I;LBDu4Vdh}iCqYg@M9PSqc+TS%!|319b<8y1$!duA`+&aD@^K(1gQud)%zz%Lx ztJq*x@xR1!BXcdq25E!_i9&acGKa{w&2Y%rWdx$5C0L1Frp8H!HHugsE9*j>RfDf$ zz@TV5DI!uV#YUMl33SIHdQrC!u!Nrmlb@QP=Q}^~OHl3antQqzE8WP?L}8g$CeQqG zkf5KP>KVZazH!cDZ4c*380OE9;#0(Ou>o*(&9pQHf>U(s)bz?Bp6EPJroJI=>AWUm z0#{k55S*C*d_C|ncRJ6e?~e(8p#>Gr_sE6cT-vj6h&jH( z{zXcmD1YZp+nC@Nyz4-|+Uv*Q3w=wc_r99lio`r`I)*jN5Z47cg^aPW^_4(Q z#_0z_UoXhm?0Ck=!xR+G>YiOd>S^?b6b`CM9F7jNs1X1!S2uS~5LjPn|#( zlXOe!UJ(`a$rDR2pjt>i3sN%i)O$#pkUAkT1+U?$69Ko92(5TH>vF)$#B*f9XRfY5+<{2 zAfy~y?2UX>{65R>kX3p$^~@2BAqthth~MQmEAxn7T&;eUnh(CHq1IZ*eF@e#M|Cc> z%@e+2cfrW<2DkZ?|C5EUW1&@zK8i(xN{TL>_5`_l|8&nm`e;0NAZNMIUOjCb4*d&A Cwp``_ delta 3020 zcmZ`*O>7(25#A;BXIi3{w(80Zm&#g^pG9`MU;aAO~OM?OaKQ7aw$-tKvAHV0;PfW(nFDX zZ}}Iw<%MtNz1cVO%{Mde!F&8?NBl49^P&hNihYYluL;@Njcn?!jc?=K=jlu zp$88Cu;dETnV0sO5G~fqWf(t{NF<`r*uKBp_}|uYG!|GY>SZlo)l^3-!09WP1MV}v z#TiM4w5Vh1w<%Xrh^Ltp31#88E?Hd&2hfvGaUXx+f(W%baAK(rLOPx-Cp~8dD8#z zDYYTNF?3MZP#+(5)KY++>dp$x?D(&xZc1Q=$4}!Kb&Bmyebg}UurWNWwx7Y>Qa9Y+ z|F~g3K5TW&;Q?LXmWY^z+lY+rB=RN4s^lT7oKnb1xLtfvt6CLA=+s^s9PI_iy0wZp z6Osa3L#!R$G9e?52?`kq?f*{xZla}|8`hc@*9~<=L*t?exk4teM4=kfRUkPOK}S4C zd!}k=s3K6&wLD!VAzxaI0hjV|oZmzBNAyW6|d8)(8FM=$vI>#c~l7H5q1;st$pwD-&Rxu4V{I)k-? zi{s}0(ShNietgmBa^HK?WS6oNTfv9HveBLT>O-SD^YYOL9-IGZbOT!gTAN1sV8RNX z3%;}W$D;?9@W8Ny?o6-!$Z82kUl?`IiC!CzGRvdR-Oq1uDD@) z9cKqS)_f^EU%F6_?AIe*AB%qNBwUAjgn8AsU!4y#PX&H!p<`WqC|C=3!dn-&<~vqc z@E!f$TDZ1#v2*lqZb{50-7C`zv|9|S!BDGfi84~hPIx&K$*`=7dewG3nu^J+`|p16KsOFG~|?4QmX~}No4Za*%Wc#n)~e;GB9x86|V9=_mQyTzA!Dg zS3}p_KLyjX9(`-*ys1(8&JNBaPephA+Scb9eQCo(?gkSW$^VZ!HtY2QcHP4>%RIX&bbhkjzT~;$b&Jl1``U9mQ6j;LzM&-? zXET8~BCII}p$n2o0Pm(tkzgI`Rh)NL zbrVD^H820IRlFT%$#9EgvQV;Y2M9xk%}XGP+*hU*U=XknNm2w;t0$O%nBhcHYh^~A z5=KGmQHFfE>Y)fJ1vYW^ygK2hzB-!~ZShqVXA~lvglK-ddHp_of3MkqC=hfvsx|NL zz5>nNAEWkQ7n<8Y+|A)00=^U{kicxlun^qG0m&G-0kIV-WliVJJKBk@HQ3 zsJMStqOCzvF{cFIaas{Q!xRlFJtGhEtZO!4P@}Zd>~WcIBM#H4Yot APyhe` From e82a893044797efb5b3b13b03bcfe085ff7a118f Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 26 Jun 2024 08:07:02 -0700 Subject: [PATCH 4/5] TEDIT-FIND--glitch in wildcard search --- library/tedit/TEDIT-FIND | 58 ++++++++++++++++++---------------- library/tedit/TEDIT-FIND.LCOM | Bin 7588 -> 7447 bytes 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/library/tedit/TEDIT-FIND b/library/tedit/TEDIT-FIND index ac163de2e..d8ba80e75 100644 --- a/library/tedit/TEDIT-FIND +++ b/library/tedit/TEDIT-FIND @@ -1,13 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "23-Jun-2024 12:04:17" {WMEDLEY}tedit>TEDIT-FIND.;123 34007 +(FILECREATED "26-Jun-2024 08:05:52" {WMEDLEY}tedit>TEDIT-FIND.;124 34315 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.PARSE.SEARCHSTRING \TEDIT.WCFIND \TEDIT.BASICFIND TEDIT.FIND.BACKWARD - \TEDIT.WCFIND.BACKWARD \TEDIT.BASICFIND.BACKWARD) + :CHANGES-TO (FNS \TEDIT.WCFIND \TEDIT.WCFIND.BACKWARD) - :PREVIOUS-DATE "20-May-2024 00:02:15" {WMEDLEY}tedit>TEDIT-FIND.;122) + :PREVIOUS-DATE "23-Jun-2024 12:04:17" {WMEDLEY}tedit>TEDIT-FIND.;123) (PRETTYCOMPRINT TEDIT-FINDCOMS) @@ -317,7 +316,8 @@ (DEFINEQ (\TEDIT.WCFIND - [LAMBDA (TSTREAM TARGETLIST START END) (* ; "Edited 23-Jun-2024 12:00 by rmk") + [LAMBDA (TSTREAM TARGETLIST START END) (* ; "Edited 26-Jun-2024 08:04 by rmk") + (* ; "Edited 23-Jun-2024 12:00 by rmk") (* ; "Edited 19-May-2024 23:46 by rmk") (* ; "Edited 3-May-2024 07:11 by rmk") (* ; "Edited 29-Apr-2024 20:45 by rmk") @@ -357,14 +357,16 @@ (push STACK (LIST START (CDR TARGETTAIL) HITSTART NIL))) - (CL:WHEN (SETQ RESULT (\TEDIT.BASICFIND TSTREAM TARGET START END ANCHORED)) - (CL:UNLESS (CDR TARGETTAIL) (* ; "Success!") - (RETURN (LIST (OR HITSTART (CAR RESULT)) - (CADR RESULT)))) - (SETQ START (ADD1 (CADR RESULT))) (* ; "Next target") - (CL:WHEN (ILEQ START END) - [push STACK (LIST START (CDR TARGETTAIL) - (OR HITSTART (CAR RESULT]))])]) + (if (SETQ RESULT (\TEDIT.BASICFIND TSTREAM TARGET START END ANCHORED)) + then (CL:UNLESS (CDR TARGETTAIL) (* ; "Success!") + (RETURN (LIST (OR HITSTART (CAR RESULT)) + (CADR RESULT)))) + (SETQ START (ADD1 (CADR RESULT))) (* ; "Next target") + (CL:WHEN (ILEQ START END) + [push STACK (LIST START (CDR TARGETTAIL) + (OR HITSTART (CAR RESULT]) + elseif (NOT ANCHORED) + then (RETURN NIL])]) (\TEDIT.BASICFIND [LAMBDA (TSTREAM TARGETSTRING START END ANCHORED) (* ; "Edited 23-Jun-2024 12:03 by rmk") @@ -400,7 +402,8 @@ (RETURN T))) do (RETURN (LIST ANCHOR (IPLUS ANCHOR (SUB1 NCHARS]) (\TEDIT.WCFIND.BACKWARD - [LAMBDA (TSTREAM TARGETLIST START END) (* ; "Edited 23-Jun-2024 12:02 by rmk") + [LAMBDA (TSTREAM TARGETLIST START END) (* ; "Edited 26-Jun-2024 08:05 by rmk") + (* ; "Edited 23-Jun-2024 12:02 by rmk") (* ; "Edited 19-May-2024 23:46 by rmk") (* ; "Edited 3-May-2024 07:11 by rmk") (* ; "Edited 29-Apr-2024 20:45 by rmk") @@ -439,15 +442,16 @@ (push STACK (LIST END (CDR TARGETTAIL) HITEND NIL))) - (CL:WHEN (SETQ RESULT (\TEDIT.BASICFIND.BACKWARD TSTREAM TARGET START END ANCHORED) - ) - (CL:UNLESS (CDR TARGETTAIL) (* ; "Success!") - [RETURN (LIST (CAR RESULT) - (OR HITEND (CADR RESULT]) - (SETQ END (SUB1 (CADR RESULT))) (* ; "Next target") - (CL:WHEN (ILEQ START END) - [push STACK (LIST END (CDR TARGETTAIL) - (OR HITEND (CADR RESULT]))])]) + (if (SETQ RESULT (\TEDIT.BASICFIND.BACKWARD TSTREAM TARGET START END ANCHORED)) + then (CL:UNLESS (CDR TARGETTAIL) (* ; "Success!") + [RETURN (LIST (CAR RESULT) + (OR HITEND (CADR RESULT]) + (SETQ END (SUB1 (CADR RESULT))) (* ; "Next target") + (CL:WHEN (ILEQ START END) + [push STACK (LIST END (CDR TARGETTAIL) + (OR HITEND (CADR RESULT]) + elseif (NOT ANCHORED) + then (RETURN NIL])]) (\TEDIT.BASICFIND.BACKWARD [LAMBDA (TSTREAM TARGETSTRING START END ANCHORED) (* ; "Edited 23-Jun-2024 11:32 by rmk") @@ -531,8 +535,8 @@ (DREVERSE $$VAL))]) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (917 19944 (TEDIT.FIND 927 . 2926) (TEDIT.FIND.BACKWARD 2928 . 5250) (TEDIT.SUBSTITUTE -5252 . 15710) (TEDIT.NEXT 15712 . 19942)) (19977 33984 (\TEDIT.WCFIND 19987 . 23281) (\TEDIT.BASICFIND - 23283 . 25374) (\TEDIT.WCFIND.BACKWARD 25376 . 28644) (\TEDIT.BASICFIND.BACKWARD 28646 . 30903) ( -\TEDIT.PARSE.SEARCHSTRING 30905 . 33982))))) + (FILEMAP (NIL (804 19831 (TEDIT.FIND 814 . 2813) (TEDIT.FIND.BACKWARD 2815 . 5137) (TEDIT.SUBSTITUTE +5139 . 15597) (TEDIT.NEXT 15599 . 19829)) (19864 34292 (\TEDIT.WCFIND 19874 . 23393) (\TEDIT.BASICFIND + 23395 . 25486) (\TEDIT.WCFIND.BACKWARD 25488 . 28952) (\TEDIT.BASICFIND.BACKWARD 28954 . 31211) ( +\TEDIT.PARSE.SEARCHSTRING 31213 . 34290))))) STOP diff --git a/library/tedit/TEDIT-FIND.LCOM b/library/tedit/TEDIT-FIND.LCOM index 050b696bda57327ebb71079efc34f467473a8485..e9587d3085cf05fa505dfebadffb0e787eef937b 100644 GIT binary patch delta 629 zcmZ2tJ>6eS81NEk%5tkf`NsVfvJ_L(Zp;E2@_2PE+r#mNdqebLo0)cyLBd8 zvI@jz<^kp1LVbJ`kQM3a=_x6sB$lM6C}7iUuB6GO;pXY%>Kx?i7~<-JrU+`ilEUOZ zCN*{w1!EIqL(|E}8PzA=! zu*rG9AJb-4@2$*EP8m{ClTV9EI&3)Ot@kkeR!G{R@cQp3NNOIit;Gl6ouvZScBF delta 652 zcmbPkwZwWtgs`!$S81NEk%5tkf}xR>fr*u&`NV7s31dwKE+r#Fgrt$Nm64H^$;90{ zlXuC4#wldxDJZ#x`uHdyE7H@`Q&LDtEJ;nluG?HmlS{+R)5q00$kj2#)kQ(c2#ftn z3X|V4sQo2Q=(FsuxX3>35!%uO~ki``>Xynyh_3g_$_ z2)}T7q&R^*Gg(_gvc4<#|CNX&w*8L#GNSkRF~;+yKwP&;3*;APpvzNWep%<7eG}vu zRv?Y=%}l6ooKbw!jP9EvKc>~bj6lu4Odzia0IBSoNo}02kD{?EnA( From 51a5e49d7acd965b279485cc05bef1fbc55b234d Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Fri, 28 Jun 2024 11:19:13 -0700 Subject: [PATCH 5/5] Display//caret glitches --- library/tedit/TEDIT-SCREEN | 76 ++++++++++++++------------ library/tedit/TEDIT-SCREEN.LCOM | Bin 32301 -> 32404 bytes library/tedit/TEDIT-WINDOW | 92 +++++++++++++++++--------------- library/tedit/TEDIT-WINDOW.LCOM | Bin 58481 -> 58558 bytes 4 files changed, 91 insertions(+), 77 deletions(-) diff --git a/library/tedit/TEDIT-SCREEN b/library/tedit/TEDIT-SCREEN index 6e9c9bc20..09d32bff7 100644 --- a/library/tedit/TEDIT-SCREEN +++ b/library/tedit/TEDIT-SCREEN @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "25-Jun-2024 18:37:55" {WMEDLEY}tedit>TEDIT-SCREEN.;724 187534 +(FILECREATED "28-Jun-2024 00:16:54" {WMEDLEY}tedit>TEDIT-SCREEN.;727 188182 :EDIT-BY rmk - :CHANGES-TO (VARS TEDIT-SCREENCOMS) + :CHANGES-TO (FNS \TEDIT.UPDATE.LINES \TEDIT.RAISE.LINES \TEDIT.CLEARPANE.BELOW.LINE) - :PREVIOUS-DATE "25-Jun-2024 15:45:00" {WMEDLEY}tedit>TEDIT-SCREEN.;723) + :PREVIOUS-DATE "25-Jun-2024 18:37:55" {WMEDLEY}tedit>TEDIT-SCREEN.;724) (PRETTYCOMPRINT TEDIT-SCREENCOMS) @@ -2264,6 +2264,7 @@ (\TEDIT.UPDATE.LINES [LAMBDA (TEXTOBJ REASON FIRSTCHANGEDCHNO NCHARSCHANGED DONTDISPLAY) + (* ; "Edited 28-Jun-2024 00:16 by rmk") (* ; "Edited 24-Jun-2024 21:44 by rmk") (* ; "Edited 16-Jun-2024 23:56 by rmk") (* ; "Edited 12-Jun-2024 23:49 by rmk") @@ -2355,9 +2356,9 @@ else (* ;; "No point in clearing below the last line of the document, and it takes a lot of time when printing to an append stream. But it does run the OVERFLOWFN. Is this the right situation for that function?") - (* ;; "If NEXTVALID, it must have been below the pane, need to clear. I don't understand why it doesn't work to have \TEDIT.NEXTVALIDLINE return NIL in this case, so the BOTTOM test above is there.") + (* ;; "If NEXTVALID, it must have been below the pane, need to clear. I don't understand why it doesn't work to have \TEDIT.NEXTVALIDLINE return NIL in this case, so the BOTTOM test above is there. ANSWER: PANE ISN'T PASSED DOWN TO \TEDIT.VALID.LINES. SUFFIX LINE WOULD HAVE IT.") - (CL:WHEN (OR NEXTVALID (IGEQ (FGETLD LASTGAPLINE LCHARLIM) + (CL:WHEN (OR NEXTVALID (ILEQ (FGETLD LASTGAPLINE LCHARLIM) (FGETTOBJ TEXTOBJ TEXTLEN))) (\TEDIT.CLEARPANE.BELOW.LINE LASTGAPLINE PANE TEXTOBJ)) (CL:WHEN (FGETLD LASTGAPLINE FORCED-END) @@ -2546,7 +2547,8 @@ 'REPLACE))]) (\TEDIT.RAISE.LINES - [LAMBDA (LINE NEWTOPY PANE TEXTOBJ) (* ; "Edited 13-Jun-2024 22:14 by rmk") + [LAMBDA (LINE NEWTOPY PANE TEXTOBJ) (* ; "Edited 27-Jun-2024 00:04 by rmk") + (* ; "Edited 13-Jun-2024 22:14 by rmk") (* ; "Edited 22-May-2024 09:42 by rmk") (* ; "Edited 27-Apr-2024 07:57 by rmk") (* ; "Edited 20-Mar-2024 10:57 by rmk") @@ -2597,7 +2599,9 @@ (* ;; "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 NIL VBOTTOM)) + (\TEDIT.CLEARPANE.BELOW.LINE (CDR (\TEDIT.LINES.BELOW LASTVISIBLE NIL PANE TEXTOBJ NIL + VBOTTOM)) + PANE TEXTOBJ)) (\TEDIT.SET.WINDOW.EXTENT TEXTOBJ PANE) (RETURN LASTVISIBLE]) @@ -2764,7 +2768,8 @@ do (RETURN (FGETLD L NEXTLINE]) (\TEDIT.CLEARPANE.BELOW.LINE - [LAMBDA (LINE PANE TEXTOBJ) (* ; "Edited 13-Jun-2024 21:51 by rmk") + [LAMBDA (LINE PANE TEXTOBJ) (* ; "Edited 26-Jun-2024 23:50 by rmk") + (* ; "Edited 13-Jun-2024 21:51 by rmk") (* ; "Edited 20-Nov-2023 14:02 by rmk") (* ; "Edited 22-Sep-2023 20:33 by rmk") (* ; "Edited 25-Apr-2023 23:06 by rmk") @@ -2772,18 +2777,19 @@ (* ;; "According to the manual, the user overflow function is called whenever a line falls out of the window (pane?), but it isn't told anything else. The use-case mentioned is coordination with the REGION property wherein TEDIT is running in part of a window. But how does the userfn know where it is?") - (CL:UNLESS (AND (GETTEXTPROP TEXTOBJ 'OVERFLOWFN) - (APPLY* (GETTEXTPROP TEXTOBJ 'OVERFLOWFN) - PANE TEXTOBJ)) + (CL:WHEN LINE + (CL:UNLESS (AND (GETTEXTPROP TEXTOBJ 'OVERFLOWFN) + (APPLY* (GETTEXTPROP TEXTOBJ 'OVERFLOWFN) + PANE TEXTOBJ)) - (* ;; "Clears the pane below LINE to white.") + (* ;; "Clears the pane below LINE to white.") - (LET ((PREG (DSPCLIPPINGREGION NIL PANE))) - (BLTSHADE WHITESHADE PANE 0 (fetch (REGION BOTTOM) of PREG) - (fetch (REGION WIDTH) of PREG) - (IDIFFERENCE (GETLD LINE YBOT) - (fetch (REGION BOTTOM) of PREG)) - 'REPLACE)))]) + (LET ((PREG (DSPCLIPPINGREGION NIL PANE))) + (BLTSHADE WHITESHADE PANE 0 (fetch (REGION BOTTOM) of PREG) + (fetch (REGION WIDTH) of PREG) + (IDIFFERENCE (GETLD LINE YBOT) + (fetch (REGION BOTTOM) of PREG)) + 'REPLACE))))]) (\TEDIT.INSERTLINE [LAMBDA (NEWLINE OLDLINE AFTER) (* ; "Edited 17-May-2024 22:49 by rmk") @@ -2914,21 +2920,21 @@ (SETQ TAILLINE NIL))))]) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (24648 26045 (\TEDIT.LINEDESCRIPTOR.DEFPRINT 24658 . 26043)) (33403 113393 ( -\TEDIT.FORMATLINE 33413 . 69270) (\TEDIT.FORMATLINE.SETUP 69272 . 72663) (\TEDIT.FORMATLINE.HORIZONTAL - 72665 . 77061) (\TEDIT.FORMATLINE.VERTICAL 77063 . 79266) (\TEDIT.FORMATLINE.JUSTIFY 79268 . 85208) ( -\TEDIT.FORMATLINE.TABS 85210 . 92697) (\TEDIT.FORMATLINE.SCALETABS 92699 . 93702) ( -\TEDIT.FORMATLINE.PURGE.SPACES 93704 . 95014) (\TEDIT.FORMATLINE.EMPTY 95016 . 99765) ( -\TEDIT.FORMATLINE.UPDATELOOKS 99767 . 107242) (\TEDIT.FORMATLINE.LASTLEGAL 107244 . 110784) ( -\TEDIT.LINES.ABOVE 110786 . 113391)) (113510 115931 (\CLEARTHISLINE 113520 . 114189) (\TLVALIDATE -114191 . 115929)) (116125 136412 (\TEDIT.DISPLAYLINE 116135 . 128705) (\TEDIT.DISPLAYLINE.TABS 128707 - . 131330) (\TEDIT.LINECACHE 131332 . 132060) (\TEDIT.CREATE.LINECACHE 132062 . 132898) ( -\TEDIT.BLTCHAR 132900 . 135527) (\TEDIT.DIACRITIC.SHIFT 135529 . 136410)) (137027 187511 ( -\TEDIT.BACKFORMAT 137037 . 139258) (\TEDIT.PREVIOUS.LINEBREAK 139260 . 141983) (\TEDIT.UPDATE.LINES -141985 . 149323) (\TEDIT.CREATEPLINE 149325 . 151507) (\TEDIT.LINES.BELOW 151509 . 156828) ( -\TEDIT.LOWER.LINES 156830 . 161065) (\TEDIT.RAISE.LINES 161067 . 164626) (\TEDIT.VALID.LINES 164628 . -172916) (\TEDIT.LASTVALIDLINE 172918 . 176815) (\TEDIT.NEXTVALIDLINE 176817 . 177276) ( -\TEDIT.CLEARPANE.BELOW.LINE 177278 . 178732) (\TEDIT.INSERTLINE 178734 . 180120) ( -\TEDIT.INSURE.NEXTLINE 180122 . 182537) (\TEDIT.LINE.BOTTOM 182539 . 185403) (\TEDIT.NCONC.LINES -185405 . 187509))))) + (FILEMAP (NIL (24697 26094 (\TEDIT.LINEDESCRIPTOR.DEFPRINT 24707 . 26092)) (33452 113442 ( +\TEDIT.FORMATLINE 33462 . 69319) (\TEDIT.FORMATLINE.SETUP 69321 . 72712) (\TEDIT.FORMATLINE.HORIZONTAL + 72714 . 77110) (\TEDIT.FORMATLINE.VERTICAL 77112 . 79315) (\TEDIT.FORMATLINE.JUSTIFY 79317 . 85257) ( +\TEDIT.FORMATLINE.TABS 85259 . 92746) (\TEDIT.FORMATLINE.SCALETABS 92748 . 93751) ( +\TEDIT.FORMATLINE.PURGE.SPACES 93753 . 95063) (\TEDIT.FORMATLINE.EMPTY 95065 . 99814) ( +\TEDIT.FORMATLINE.UPDATELOOKS 99816 . 107291) (\TEDIT.FORMATLINE.LASTLEGAL 107293 . 110833) ( +\TEDIT.LINES.ABOVE 110835 . 113440)) (113559 115980 (\CLEARTHISLINE 113569 . 114238) (\TLVALIDATE +114240 . 115978)) (116174 136461 (\TEDIT.DISPLAYLINE 116184 . 128754) (\TEDIT.DISPLAYLINE.TABS 128756 + . 131379) (\TEDIT.LINECACHE 131381 . 132109) (\TEDIT.CREATE.LINECACHE 132111 . 132947) ( +\TEDIT.BLTCHAR 132949 . 135576) (\TEDIT.DIACRITIC.SHIFT 135578 . 136459)) (137076 188159 ( +\TEDIT.BACKFORMAT 137086 . 139307) (\TEDIT.PREVIOUS.LINEBREAK 139309 . 142032) (\TEDIT.UPDATE.LINES +142034 . 149565) (\TEDIT.CREATEPLINE 149567 . 151749) (\TEDIT.LINES.BELOW 151751 . 157070) ( +\TEDIT.LOWER.LINES 157072 . 161307) (\TEDIT.RAISE.LINES 161309 . 165106) (\TEDIT.VALID.LINES 165108 . +173396) (\TEDIT.LASTVALIDLINE 173398 . 177295) (\TEDIT.NEXTVALIDLINE 177297 . 177756) ( +\TEDIT.CLEARPANE.BELOW.LINE 177758 . 179380) (\TEDIT.INSERTLINE 179382 . 180768) ( +\TEDIT.INSURE.NEXTLINE 180770 . 183185) (\TEDIT.LINE.BOTTOM 183187 . 186051) (\TEDIT.NCONC.LINES +186053 . 188157))))) STOP diff --git a/library/tedit/TEDIT-SCREEN.LCOM b/library/tedit/TEDIT-SCREEN.LCOM index 58b588a25d4deedb50f01cced2dd72faf010661e..c9185092e4ce88c694fb5aa1da11238115ac4046 100644 GIT binary patch delta 641 zcmZuvL5tHs7)??SH7-j<(6z|&8B`jiA<1^r7zEoU({9Q%nVn3w6}ksyRl4ee;+{kn zPaZsI84n)ZyB-v^f)~-l;$aW|3cXA3Do(o;y3o13_kHi1_vV|of8-Z`<>#FfZn3$& zRkTgJ1g7a(j<;Ou-}X+Ibx<|iIaD+)&$RnrPwsRX3PNV2B&afE;4nf7^tM2&rx?Su z$S@2IHm*Imu`zpES<}@*J;cbTNQ??VvuF6x;9dX&H+PyF}x*$X~KRZ6N6GHM9N?XgcCJVMc07^g{bWFAzm$rVLc`IUQ%gE{3_ zB){WB@=RXjk5}_@hQC_<%$jj-bGX}z=l7*%Wlj?3y|WqTh951#O_+17*P>yevabx^ zjM!tNzHfrczpTXb>KLskoe%%MONEkc@h|O#Ovx+{_UPVG`3HZ}-IXu$^XovAnt!16 zYhxA8Nd?=qCIJ(~jCL3WA`t2@6fv+aElrBEA`kAa|IB9FiX>$!pD0gnraP_;HO!Kg zYJi~RK#&k0hlGStgQ7+lM`DN2K#YkC2#pC?OVd!Stn2_q1Xq0o&N7TXK!6gThJ?iw bYzyKwMC;k+t9Kqz&!%Le+bBd7iY9Vo4w delta 543 zcmZutzi-n(7`4-YiiJ=lBq%KXWQ1f7ww$wFw>QPHFR9DL=bSG;Dy2iD($ZEp2fZ~oT- zA=5UjRz^v}Ni0YT^1I#`tLIVZ2Y^YM38%RZPxtr0z{zTyw@K*;239}jB`AU7OQj`w z!aAi5xZtFpv0mw<$`1Yw9pWIwo@avbvSR7})UH&S{#Lr(7y6<+?cUd`@@w~l_lVVY zFHbt`)`hm#xT&dm7wxjz<$I*CzsSSRYjv>DxTsvoGroBJlV$}7$;NPDF7TG8Kl%9$ z{j)qDo#+qbcmu4nq-p%NqBYH`ulO+flie+ea0gkQvVlv6g5+ZQW#ilYHBr&DIr(v` z_dHsGCKcssoDv9pNXsIjSy5zpo0E3NazH+`i4aO%a8^Lwn_X48kq?{{G)@RCA)r}K hQlc8m3ctedit>TEDIT-WINDOW.;500 207254 +(FILECREATED "28-Jun-2024 08:41:36" {WMEDLEY}tedit>TEDIT-WINDOW.;503 207881 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.RESHAPEFN \TEDIT.CURSORMOVEDFN) + :CHANGES-TO (FNS \TEDIT.SETCARET) + (RECORDS PANE) - :PREVIOUS-DATE "25-Jun-2024 13:04:38" {WMEDLEY}tedit>TEDIT-WINDOW.;497) + :PREVIOUS-DATE "25-Jun-2024 15:54:24" {WMEDLEY}TEDIT>TEDIT-WINDOW.;500) (PRETTYCOMPRINT TEDIT-WINDOWCOMS) @@ -154,9 +155,12 @@ (PUTWINDOWPROP DATUM 'TEDIT-WITHIN-SCREEN NV) NV)))) -(DATATYPE PANE ((XPWINDOW FULLXPOINTER) (* ; - "Change XXPLINES to PLINES when we install this") - XXPLINES PCARET HOLDDUMMYFIRSTLINE NEXTPANE (PREVPANE XPOINTER)) +(DATATYPE PANE ((XPWINDOW FULLXPOINTER) (* ; "This pane's window") + PREFIX (* ; + "Dummy line that covers all the characters above the first visible line") + SUFFIX (* ; + "Dummy line that covers all the characters below the last visible line") + PCARET NEXTPANE (PREVPANE XPOINTER)) (ACCESSFNS (PWINDOW (PROGN DATUM)))) ) @@ -2900,7 +2904,8 @@ (SHOULDNT)))))]) (\TEDIT.SETCARET - [LAMBDA (SEL PANE TEXTOBJ DISPOSITION CARET) (* ; "Edited 13-Jun-2024 22:04 by rmk") + [LAMBDA (SEL PANE TEXTOBJ DISPOSITION CARET) (* ; "Edited 28-Jun-2024 08:41 by rmk") + (* ; "Edited 13-Jun-2024 22:04 by rmk") (* ; "Edited 25-May-2024 13:57 by rmk") (* ; "Edited 15-Dec-2023 23:37 by rmk") (* ; "Edited 17-Nov-2023 23:55 by rmk") @@ -2927,13 +2932,16 @@ (for P inpanes (PROGN TEXTOBJ) as L1 in (FGETSEL SEL L1) as LN in (FGETSEL SEL LN) when (EQ P PANE) do (SELECTQ (FGETSEL SEL POINT) - (LEFT (CL:WHEN (AND L1 (WITHINLINEP (FGETSEL SEL CH#) - L1)) - (SETQ LINE L1) + (LEFT (SETQ LINE (AND L1 (WITHINLINEP (FGETSEL SEL CH#) + L1))) + (CL:WHEN LINE (SETQ X (FGETSEL SEL X0)))) - (RIGHT (CL:WHEN (AND LN (WITHINLINEP (SUB1 (FGETSEL SEL CHLIM)) - LN)) - (SETQ LINE LN) + (RIGHT [SETQ LINE (if (EQ 0 (FGETSEL SEL DCH)) + then (AND L1 (WITHINLINEP (FGETSEL SEL CH#) + L1)) + else (AND LN (WITHINLINEP (SUB1 (FGETSEL SEL CHLIM)) + LN] + (CL:WHEN LINE (SETQ X (FGETSEL SEL XLIM)))) (SHOULDNT)) (RETURN)) @@ -3236,33 +3244,33 @@ (RPAQ? TEDIT.TITLED.ICON.TEMPLATE (create TITLEDICON ICON _ TEDITICON MASK _ TEDITMASK TITLEREG _ TEDIT.ICON.TITLE.REGION)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (13186 33629 (\TEDIT.CREATEW 13196 . 19795) (\TEDIT.WINDOW.SETUP 19797 . 22803) ( -\TEDIT.MINIMAL.WINDOW.SETUP 22805 . 31472) (\TEDIT.ADD.CARET 31474 . 33018) (\TEDIT.CLEARPANE 33020 . -33627)) (33630 55474 (\TEDIT.CURSORMOVEDFN 33640 . 38019) (\TEDIT.CURSOROUTFN 38021 . 38466) ( -\TEDIT.ACTIVE.WINDOWP 38468 . 39519) (\TEDIT.EXPANDFN 39521 . 40084) (\TEDIT.MAINW 40086 . 42226) ( -\TEDIT.PRIMARYPANE 42228 . 42907) (\TEDIT.NEWREGIONFN 42909 . 45425) (\TEDIT.SET.WINDOW.EXTENT 45427 - . 50426) (\TEDIT.SHRINK.ICONCREATE 50428 . 52968) (\TEDIT.SHRINKFN 52970 . 53379) (\TEDIT.PANEREGION -53381 . 55472)) (55475 81320 (\TEDIT.BUTTONEVENTFN 55485 . 71592) (\TEDIT.DO.SELOPERATION 71594 . -74035) (\TEDIT.TTY.TEXTOBJP 74037 . 74461) (\TEDIT.BUTTONEVENTFN.SELOPERATION 74463 . 75852) ( -\TEDIT.BUTTONEVENTFN.INACTIVE 75854 . 78196) (\TEDIT.BUTTONEVENTFN.INTITLE 78198 . 79835) ( -\TEDIT.COPYINSERTFN 79837 . 81318)) (81321 97532 (\TEDIT.PANE.SPLIT 81331 . 85551) (\TEDIT.SPLITW -85553 . 92988) (\TEDIT.UNSPLITW 92990 . 97530)) (98888 99785 (TEDITWINDOWP 98898 . 99783)) (99822 -102810 (TEDIT.GETINPUT 99832 . 102275) (\TEDIT.MAKEFILENAME 102277 . 102808)) (102859 110969 ( -TEDIT.PROMPTWINDOW 102869 . 103183) (TEDIT.PROMPTPRINT 103185 . 105621) (TEDIT.PROMPTCLEAR 105623 . -107342) (TEDIT.PROMPTFLASH 107344 . 109276) (\TEDIT.PROMPT.PAGEFULLFN 109278 . 110967)) (111207 119198 - (\TEXTSTREAM.TITLE 111217 . 111907) (\TEDIT.DEFAULT.TITLE 111909 . 114288) (\TEDIT.WINDOW.TITLE -114290 . 116459) (\TEXTSTREAM.FILENAME 116461 . 118131) (\TEDIT.UPDATE.TITLE 118133 . 119196)) (119241 - 129070 (TEDIT.DEACTIVATE.WINDOW 119251 . 126052) (\TEDIT.REPAINTFN 126054 . 128165) (\TEDIT.RESHAPEFN - 128167 . 129068)) (129071 162633 (\TEDIT.SCROLLFN 129081 . 131326) (\TEDIT.SCROLLCH.TOP 131328 . -134397) (\TEDIT.SCROLLCH.BOTTOM 134399 . 137812) (\TEDIT.SCROLLUP 137814 . 144146) (\TEDIT.SCROLLDOWN -144148 . 150788) (\TEDIT.SCROLL.CARET 150790 . 153592) (\TEDIT.SCROLL.SHOWSEL 153594 . 156251) ( -\TEDIT.WHERE.SEL 156253 . 157585) (\TEDIT.WHERE.SEL1 157587 . 160438) (\TEDIT.VISIBLECHARP 160440 . -162631)) (162634 172909 (\TEDIT.ONSCREEN? 162644 . 166984) (\TEDIT.ONSCREEN.REGION 166986 . 170397) ( -\TEDIT.AFTERMOVEFN 170399 . 171153) (OFFSCREENP 171155 . 172907)) (172951 175568 (\TEDIT.PROCIDLEFN -172961 . 174498) (\TEDIT.PROCENTRYFN 174500 . 174945) (\TEDIT.PROCEXITFN 174947 . 175566)) (175647 -186955 (\TEDIT.DOWNCARET 175657 . 176450) (\TEDIT.FLASHCARET 176452 . 178388) (\TEDIT.UPCARET 178390 - . 179494) (TEDIT.NORMALIZECARET 179496 . 182440) (\TEDIT.SETCARET 182442 . 186528) (\TEDIT.CARET -186530 . 186953)) (186989 201224 (TEDIT.ADD.MENUITEM 186999 . 189290) (TEDIT.DEFAULT.MENUFN 189292 . -198436) (TEDIT.REMOVE.MENUITEM 198438 . 199435) (\TEDIT.CREATEMENU 199437 . 200002) ( -\TEDIT.MENU.WHENHELDFN 200004 . 200909) (\TEDIT.MENU.WHENSELECTEDFN 200911 . 201222))))) + (FILEMAP (NIL (13439 33882 (\TEDIT.CREATEW 13449 . 20048) (\TEDIT.WINDOW.SETUP 20050 . 23056) ( +\TEDIT.MINIMAL.WINDOW.SETUP 23058 . 31725) (\TEDIT.ADD.CARET 31727 . 33271) (\TEDIT.CLEARPANE 33273 . +33880)) (33883 55727 (\TEDIT.CURSORMOVEDFN 33893 . 38272) (\TEDIT.CURSOROUTFN 38274 . 38719) ( +\TEDIT.ACTIVE.WINDOWP 38721 . 39772) (\TEDIT.EXPANDFN 39774 . 40337) (\TEDIT.MAINW 40339 . 42479) ( +\TEDIT.PRIMARYPANE 42481 . 43160) (\TEDIT.NEWREGIONFN 43162 . 45678) (\TEDIT.SET.WINDOW.EXTENT 45680 + . 50679) (\TEDIT.SHRINK.ICONCREATE 50681 . 53221) (\TEDIT.SHRINKFN 53223 . 53632) (\TEDIT.PANEREGION +53634 . 55725)) (55728 81573 (\TEDIT.BUTTONEVENTFN 55738 . 71845) (\TEDIT.DO.SELOPERATION 71847 . +74288) (\TEDIT.TTY.TEXTOBJP 74290 . 74714) (\TEDIT.BUTTONEVENTFN.SELOPERATION 74716 . 76105) ( +\TEDIT.BUTTONEVENTFN.INACTIVE 76107 . 78449) (\TEDIT.BUTTONEVENTFN.INTITLE 78451 . 80088) ( +\TEDIT.COPYINSERTFN 80090 . 81571)) (81574 97785 (\TEDIT.PANE.SPLIT 81584 . 85804) (\TEDIT.SPLITW +85806 . 93241) (\TEDIT.UNSPLITW 93243 . 97783)) (99141 100038 (TEDITWINDOWP 99151 . 100036)) (100075 +103063 (TEDIT.GETINPUT 100085 . 102528) (\TEDIT.MAKEFILENAME 102530 . 103061)) (103112 111222 ( +TEDIT.PROMPTWINDOW 103122 . 103436) (TEDIT.PROMPTPRINT 103438 . 105874) (TEDIT.PROMPTCLEAR 105876 . +107595) (TEDIT.PROMPTFLASH 107597 . 109529) (\TEDIT.PROMPT.PAGEFULLFN 109531 . 111220)) (111460 119451 + (\TEXTSTREAM.TITLE 111470 . 112160) (\TEDIT.DEFAULT.TITLE 112162 . 114541) (\TEDIT.WINDOW.TITLE +114543 . 116712) (\TEXTSTREAM.FILENAME 116714 . 118384) (\TEDIT.UPDATE.TITLE 118386 . 119449)) (119494 + 129323 (TEDIT.DEACTIVATE.WINDOW 119504 . 126305) (\TEDIT.REPAINTFN 126307 . 128418) (\TEDIT.RESHAPEFN + 128420 . 129321)) (129324 162886 (\TEDIT.SCROLLFN 129334 . 131579) (\TEDIT.SCROLLCH.TOP 131581 . +134650) (\TEDIT.SCROLLCH.BOTTOM 134652 . 138065) (\TEDIT.SCROLLUP 138067 . 144399) (\TEDIT.SCROLLDOWN +144401 . 151041) (\TEDIT.SCROLL.CARET 151043 . 153845) (\TEDIT.SCROLL.SHOWSEL 153847 . 156504) ( +\TEDIT.WHERE.SEL 156506 . 157838) (\TEDIT.WHERE.SEL1 157840 . 160691) (\TEDIT.VISIBLECHARP 160693 . +162884)) (162887 173162 (\TEDIT.ONSCREEN? 162897 . 167237) (\TEDIT.ONSCREEN.REGION 167239 . 170650) ( +\TEDIT.AFTERMOVEFN 170652 . 171406) (OFFSCREENP 171408 . 173160)) (173204 175821 (\TEDIT.PROCIDLEFN +173214 . 174751) (\TEDIT.PROCENTRYFN 174753 . 175198) (\TEDIT.PROCEXITFN 175200 . 175819)) (175900 +187582 (\TEDIT.DOWNCARET 175910 . 176703) (\TEDIT.FLASHCARET 176705 . 178641) (\TEDIT.UPCARET 178643 + . 179747) (TEDIT.NORMALIZECARET 179749 . 182693) (\TEDIT.SETCARET 182695 . 187155) (\TEDIT.CARET +187157 . 187580)) (187616 201851 (TEDIT.ADD.MENUITEM 187626 . 189917) (TEDIT.DEFAULT.MENUFN 189919 . +199063) (TEDIT.REMOVE.MENUITEM 199065 . 200062) (\TEDIT.CREATEMENU 200064 . 200629) ( +\TEDIT.MENU.WHENHELDFN 200631 . 201536) (\TEDIT.MENU.WHENSELECTEDFN 201538 . 201849))))) STOP diff --git a/library/tedit/TEDIT-WINDOW.LCOM b/library/tedit/TEDIT-WINDOW.LCOM index 96bc728f77cb4f83af5fa2979815b86c3fb4455f..9aaa0a03e793014cdf8de92e925c2d0a423630da 100644 GIT binary patch delta 671 zcmZvZ&ui0Q7{{A*j2cAR8EPq`KJ;Q+Xi46rzoLwE&080Vc}tpEH-^C>xH=tD@E{`d zrbkQe;_5%JZXF(E3wUb&1U-82y7uDD&cw~C+upZ2CfoAX+XWAWBVg@Rme+u zQ9@!8m>134Skds(%NvhdtL^*k=W`xHHIMgfQ`HsH%w5lO-0lT>@GepSO@})0dC+*j ziuSkn%k&^(&uz6cPZ`+_%kHK5>43M~nTQZ3vEbg+HcMFvheU&W!Pk@p4vE`ew`!Yl zYt~tNL*kTINu0Lg4w0?*<~L*^fQJ#WrrmCDcPO2!X$B=8~r(28}?Z;5n_Hn zMG`CB-cd_->HXf(>WTe{>|T5{+{t+%cl?l3C1Zj( zh$9&k4N6#+;fyLc!)6{Aa7@K! ztf2~dJ(;79LS*E0dvLy8cSE|{G1eCF$L;P?I)SCHS}wxK;vERnSM)xz1P3_se45?m ztR83i0663;aFoS4(3AN%vjaqT!;4D|#>ZvS0shiA+N==pzg+gSUfYA_%GE2jw+;N6 z?X3ZSqr23t?JfMBr$O-jlI}9AFIG1QO+v*U_0rIEejvj?;V1|`B