(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP" BASE 10)
(FILECREATED "27-Sep-87 18:43:27" {DSK}<OST>ANSICHATCOPY.;24 52005
changes to%: (FNS ANSI-Chat-Expand-Selection)
(FILES CHATDECLS)
previous date%: "26-Sep-87 15:20:27" {DSK}<OST>ANSICHATCOPY.;23)
(PRETTYCOMPRINT ANSICHATCOPYCOMS)
(RPAQQ ANSICHATCOPYCOMS ((PROP MAKEFILE-ENVIRONMENT ANSICHATCOPY)
(PROP FILETYPE ANSICHATCOPY)
(FNS ANSI-Chat-Copy-Complete ANSI-Chat-Copy-Extend ANSI-Chat-Copy-Get-String
ANSI-Chat-Copy-Invert-Highlight ANSI-Chat-Copy-Invert-Highlight-Lines
ANSI-Chat-Copy-Remove-Highlight ANSI-Chat-Copy-Select
ANSI-Chat-Copy-Top ANSI-Chat-CopyButtonEventFn
ANSI-Chat-Expand-Selection ANSI-Chat-Growable-Character
ANSI-Chat-Update-Extended-Selection ANSI-Chat-Update-Selection)
(DECLARE%: EVAL@COMPILE DONTCOPY (FILES (SOURCE)
CHATDECLS ANSICHATDECLS))))
(PUTPROPS ANSICHATCOPY MAKEFILE-ENVIRONMENT (:READTABLE "INTERLISP" :PACKAGE "INTERLISP" :BASE 10))
(PUTPROPS ANSICHATCOPY FILETYPE TCOMPL)
(DEFINEQ
(ANSI-Chat-Copy-Complete
[LAMBDA (Chat.State ANSI-State) (* ; "Edited 22-Sep-87 14:25 by R.Beeman")
(with CHAT.STATE Chat.State (* ; "Chat State")
(with ANSI-STATE ANSI-State (* ; "ANSI State")
(CURSOR T)
(SETQ LineCursor NIL) (* ; "LineCursor")
(ANSI-Chat-Copy-Remove-Highlight Chat.State ANSI-State)
(COND
((NOT (ZEROP SelectionLine)) (* ; "Only if there is a selection")
(BKSYSBUF (COND
[(ZEROP SelectionStartColumn)
(* ; "Line Selection")
(COND
((ZEROP ExtendedSelectionLine)
(* ; "No Extension")
(ANSI-Chat-Copy-Get-String Chat.State ANSI-State SelectionLine
1 0))
(T (* ; "There is an Extension")
(CONCATLIST (for Line from (IMIN SelectionLine
ExtendedSelectionLine)
to (IMAX SelectionLine ExtendedSelectionLine)
collect (COND
((ANSI-Chat-Copy-Top Chat.State
ANSI-State Line)
"")
(T (ANSI-Chat-Copy-Get-String
Chat.State ANSI-State Line 1 0]
((ZEROP ExtendedSelectionLine)
(* ; "No Extension")
(ANSI-Chat-Copy-Get-String Chat.State ANSI-State SelectionLine
SelectionStartColumn SelectionEndColumn))
((= SelectionLine ExtendedSelectionLine)
(* ; "All on Same Line")
(ANSI-Chat-Copy-Get-String Chat.State ANSI-State SelectionLine
(IMIN SelectionStartColumn ExtendedSelectionStartColumn)
(IMAX SelectionEndColumn ExtendedSelectionEndColumn)))
((< SelectionLine ExtendedSelectionLine)
(* ; "Selection before Extension")
(CONCAT (ANSI-Chat-Copy-Get-String Chat.State ANSI-State
SelectionLine SelectionStartColumn 0)
(COND
[(< SelectionLine (SUB1 ExtendedSelectionLine))
(CONCATLIST (for Line from (ADD1 SelectionLine)
to (SUB1 ExtendedSelectionLine)
collect (COND
((ANSI-Chat-Copy-Top
Chat.State ANSI-State
Line)
"")
(T (ANSI-Chat-Copy-Get-String
Chat.State ANSI-State Line
1 0]
(T ""))
(ANSI-Chat-Copy-Get-String Chat.State ANSI-State
ExtendedSelectionLine 1 ExtendedSelectionEndColumn)))
(T (CONCAT (ANSI-Chat-Copy-Get-String Chat.State ANSI-State
ExtendedSelectionLine ExtendedSelectionStartColumn
0)
(COND
[(< ExtendedSelectionLine (SUB1 SelectionLine))
(CONCATLIST (for Line from (ADD1 ExtendedSelectionLine
)
to (SUB1 SelectionLine)
collect (COND
((ANSI-Chat-Copy-Top
Chat.State
ANSI-State Line)
"")
(T (
ANSI-Chat-Copy-Get-String
Chat.State ANSI-State
Line 1 0]
(T ""))
(ANSI-Chat-Copy-Get-String Chat.State ANSI-State
SelectionLine 1 SelectionEndColumn])
(ANSI-Chat-Copy-Extend
[LAMBDA (Chat.State ANSI-State Line Column) (* ; "Edited 21-Sep-87 12:00 by R.Beeman")
(with CHAT.STATE Chat.State (* ; "Chat State")
(with ANSI-STATE ANSI-State (* ; "ANSI State")
(COND
((NOT (ZEROP SelectionLine)) (* ;
"Can't Extend without Initial Selection")
[COND
((ZEROP SelectionStartColumn)
(SETQ Column 0))
(T (COND
((ZEROP Column)
(SETQ Column 1]
(COND
([COND
[(ZEROP ExtendedSelectionLine) (* ;
"Unless line selection on this line")
(NOT (AND (= Line SelectionLine)
(ZEROP SelectionStartColumn]
(T (* ; "Extend")
(NOT (AND (= Line ExtendedSelectionLine)
(<= ExtendedSelectionStartColumn Column
ExtendedSelectionEndColumn]
(* ;; "Something Changed Recalculate")
(ANSI-Chat-Update-Extended-Selection Chat.State ANSI-State Line
(ANSI-Chat-Expand-Selection Chat.State ANSI-State Line Column
'Left)
(ANSI-Chat-Expand-Selection Chat.State ANSI-State Line Column
'Right))
(COND
((AND (ZEROP SelectionStartColumn)
(= SelectionLine ExtendedSelectionLine))
(SETQ ExtendedSelectionLine 0])
(ANSI-Chat-Copy-Get-String
[LAMBDA (Chat.State ANSI-State Line Start End) (* ; "Edited 22-Sep-87 11:29 by R.Beeman")
(LET* ((CharacterLine (ELT (fetch (ANSI-STATE Characters) of ANSI-State)
Line))
(LineWidth (ELT CharacterLine 0)))
[COND
((ZEROP End)
(SETQ End (ADD1 LineWidth]
(CONCAT (COND
[(< Start End)
(CONCATLIST (for Index from Start to (SUB1 End)
collect (CHARACTER (ELT CharacterLine Index]
(T ""))
(MKSTRING (CHARACTER (COND
((> End LineWidth)
(CHARCODE CR))
(T (ELT CharacterLine End])
(ANSI-Chat-Copy-Invert-Highlight
[LAMBDA (Chat.State ANSI-State Line Start End NoExtend)
(DECLARE (GLOBALVARS ANSI-Chat-Dashing)) (* ; "Edited 22-Sep-87 14:18 by R.Beeman")
(with CHAT.STATE Chat.State (* ; "Chat State")
(with ANSI-STATE ANSI-State (* ; "ANSI State")
(LET* ((LineWidth (ELT (ELT Characters Line)
0))
[CharacterWidth (COND
((= (ELT LineAttributes Line)
5)
FONTWIDTH)
(T (RSH FONTWIDTH -1]
(Left (+ (ITIMES (SUB1 Start)
CharacterWidth)
FONTWIDTH)))
[COND
((AND (NOT NoExtend)
(ZEROP End))
(SETQ End (ADD1 LineWidth]
(BITBLT ANSI-Chat-Dashing (IMOD Left 3)
0 DSP Left (ITIMES (- BottomLine Line)
FONTHEIGHT)
(+ (ITIMES (- End Start)
CharacterWidth)
(COND
((> End LineWidth)
FONTWIDTH)
(T CharacterWidth)))
1
'SOURCE
'INVERT])
(ANSI-Chat-Copy-Invert-Highlight-Lines
[LAMBDA (Chat.State ANSI-State Start End) (* ; "Edited 21-Sep-87 16:22 by R.Beeman")
(for Line from Start to End unless (ANSI-Chat-Copy-Top Chat.State ANSI-State Line)
do (ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State Line 1 0])
(ANSI-Chat-Copy-Remove-Highlight
[LAMBDA (Chat.State ANSI-State) (* ; "Edited 22-Sep-87 11:32 by R.Beeman")
(with CHAT.STATE Chat.State (* ; "Chat State")
(with ANSI-STATE ANSI-State (* ; "ANSI State")
(COND
((ZEROP SelectionLine) (* ; "No Selection -- do nothing")
NIL)
[(ZEROP SelectionStartColumn) (* ; "Line Selection")
(COND
((ZEROP ExtendedSelectionLine) (* ; "No Extension")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine 1 0))
(T (* ; "There is an Extension")
(for Line from (IMIN SelectionLine ExtendedSelectionLine)
to (IMAX SelectionLine ExtendedSelectionLine)
do (COND
((NOT (ANSI-Chat-Copy-Top Chat.State ANSI-State Line))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State Line 1 0]
((ZEROP ExtendedSelectionLine) (* ; "No Extension")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine
SelectionStartColumn SelectionEndColumn))
((= SelectionLine ExtendedSelectionLine) (* ; "All on Same Line")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine
(IMIN SelectionStartColumn ExtendedSelectionStartColumn)
(IMAX SelectionEndColumn ExtendedSelectionEndColumn)))
((< SelectionLine ExtendedSelectionLine) (* ; "Selection before Extension")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine
SelectionStartColumn 0)
[COND
((< SelectionLine (SUB1 ExtendedSelectionLine))
(for Line from (ADD1 SelectionLine) to (SUB1 ExtendedSelectionLine)
do (COND
((NOT (ANSI-Chat-Copy-Top Chat.State ANSI-State Line))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State Line 1 0]
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State ExtendedSelectionLine 1
ExtendedSelectionEndColumn))
(T (ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State ExtendedSelectionLine
ExtendedSelectionStartColumn 0)
[COND
((< ExtendedSelectionLine (SUB1 SelectionLine))
(for Line from (ADD1 ExtendedSelectionLine) to (SUB1 SelectionLine)
do (COND
((NOT (ANSI-Chat-Copy-Top Chat.State ANSI-State Line))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State Line 1 0]
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine 1
SelectionEndColumn])
(ANSI-Chat-Copy-Select
[LAMBDA (Chat.State ANSI-State Line Column Button) (* ; "Edited 22-Sep-87 13:11 by R.Beeman")
(with CHAT.STATE Chat.State (* ; "Chat State")
(with ANSI-STATE ANSI-State (* ; "ANSI State")
(COND
([OR (ZEROP SelectionLine)
(NOT (AND (OR (EQ SelectionType Button)
(ZEROP SelectionStartColumn))
(ZEROP ExtendedSelectionLine)
(= Line SelectionLine)
(<= SelectionStartColumn Column SelectionEndColumn]
(* ;; "Something Changed Recalculate")
(SETQ SelectionType Button)
(ANSI-Chat-Update-Selection Chat.State ANSI-State Line (
ANSI-Chat-Expand-Selection
Chat.State ANSI-State
Line Column 'Left)
(ANSI-Chat-Expand-Selection Chat.State ANSI-State Line Column 'Right])
(ANSI-Chat-Copy-Top
[LAMBDA (Chat.State ANSI-State Line) (* ; "Edited 21-Sep-87 11:37 by R.Beeman")
(with CHAT.STATE Chat.State (* ; "Chat State")
(with ANSI-STATE ANSI-State (* ; "ANSI State")
(AND (= (ELT LineAttributes Line)
3)
(< Line BottomLine)
(= (ELT LineAttributes (ADD1 Line))
4)
(= (ELT (ELT Characters Line)
0)
(ELT (ELT Characters (ADD1 Line))
0])
(ANSI-Chat-CopyButtonEventFn
[LAMBDA (Window)
(DECLARE (GLOBALVARS ANSI-Chat-LineCursor)) (* ; "Edited 22-Sep-87 11:43 by R.Beeman")
(LET* [(Chat.State (WINDOWPROP Window 'CHATSTATE))
(Chat.Process (AND Chat.State (type? CHAT.STATE Chat.State)
(fetch (CHAT.STATE TYPEOUTPROC) of Chat.State)))
(ANSI-State (AND Chat.State (type? CHAT.STATE Chat.State)
(fetch (CHAT.STATE TERM.STATE) of Chat.State]
(COND
((AND (PROCESSP Chat.Process)
(NOT (RELPROCESSP Chat.Process)))
(with CHAT.STATE Chat.State (* ; "Chat State")
(with ANSI-STATE ANSI-State (* ; "ANSI State")
(SETQ SelectionLine 0) (* ; "Indicate No Selection Yet")
(while (OR (KEYDOWNP 'LSHIFT)
(KEYDOWNP 'RSHIFT)
(KEYDOWNP 'COPY))
do [LET [(Column (SUB1 (IQUOTIENT (+ (LASTMOUSEX DSP)
FONTWIDTH)
FONTWIDTH)))
(Line (- BottomLine (SUB1 (IQUOTIENT (+ (LASTMOUSEY DSP)
FONTHEIGHT)
FONTHEIGHT]
[COND
[(AND (ZEROP Column)
(<= 1 Line BottomLine))
(COND
((NOT LineCursor)(* ; "LineCursor")
(SETQ LineCursor T)
(CURSOR (OR (AND (BOUNDP 'ANSI-Chat-LineCursor)
(type? CURSOR ANSI-Chat-LineCursor)
ANSI-Chat-LineCursor)
(SETQ ANSI-Chat-LineCursor
(CURSORCREATE
#*(16 16)@@@A@@@C@@@G@@@O@@AO@@CO@@GO@@@O@@AK@@AI@@C@@@C@@@F@@@F@@@L@@@L@
15 15]
(T (COND
(LineCursor (SETQ LineCursor NIL)
(CURSOR T]
(COND
((NOT (MOUSESTATE UP))
(COND
((AND (<= 0 Column (ADD1 RightMargin))
(<= 1 Line BottomLine))
[COND
((ANSI-Chat-Copy-Top Chat.State ANSI-State Line)
(SETQ Line (ADD1 Line]
[COND
((NOT (= (ELT LineAttributes Line)
5))
(SETQ Column (RSH (ADD1 Column)
1]
(SETQ Column (IMIN (ADD1 (ELT (ELT Characters Line)
0))
Column))
(SELECTQ LASTMOUSEBUTTONS
((1 4)
(ANSI-Chat-Copy-Select Chat.State ANSI-State
Line Column LASTMOUSEBUTTONS))
(2 (ANSI-Chat-Copy-Extend Chat.State ANSI-State Line
Column))
NIL))
(T (SELECTQ LASTMOUSEBUTTONS
((1 4) (* ; "Cancel Selection")
(ANSI-Chat-Copy-Remove-Highlight Chat.State
ANSI-State)
(SETQ SelectionLine 0))
NIL]
(BLOCK) finally (ANSI-Chat-Copy-Complete Chat.State ANSI-State])
(ANSI-Chat-Expand-Selection
[LAMBDA (Chat.State ANSI-State Line Column Direction) (* ; "Edited 27-Sep-87 18:42 by R.Beeman")
(with
CHAT.STATE Chat.State (* ; "Chat State")
(with ANSI-STATE ANSI-State (* ; "ANSI State")
(COND
((OR (ZEROP Column)
(= SelectionType 4))
Column)
(T (LET* [(CharacterLine (ELT Characters Line))
(LastColumn (ELT CharacterLine 0))
(SeedType (COND
((> Column LastColumn)
'WhiteSpace)
(T (ANSI-Chat-Growable-Character (ELT CharacterLine Column]
(SELECTQ Direction
(Left (* ; "Grow Left")
(while (AND (> Column 1)
(EQ (ANSI-Chat-Growable-Character (ELT CharacterLine
(SUB1 Column)))
SeedType)) do (SETQ Column (SUB1 Column))
finally (RETURN Column)))
(PROGN (* ; "Grow Right")
(while [OR (AND (< Column LastColumn)
(EQ (ANSI-Chat-Growable-Character
(ELT CharacterLine (ADD1 Column)))
SeedType))
(AND (= Column LastColumn)
(EQ SeedType 'WhiteSpace]
do (SETQ Column (ADD1 Column)) finally (RETURN Column])
(ANSI-Chat-Growable-Character
[LAMBDA (CharacterCode) (* ; "Edited 23-Sep-87 15:24 by R.Beeman")
(COND
((= (CHARCODE SPACE)
CharacterCode)
'WhiteSpace)
((OR (<= (CHARCODE 0)
CharacterCode
(CHARCODE 9))
(<= (CHARCODE A)
CharacterCode
(CHARCODE Z))
(<= (CHARCODE a)
CharacterCode
(CHARCODE z)))
'Text)
(T 'Punctuation])
(ANSI-Chat-Update-Extended-Selection
[LAMBDA (Chat.State ANSI-State NewSelectionLine NewSelectionStartColumn NewSelectionEndColumn)
(* ; "Edited 22-Sep-87 17:29 by R.Beeman")
(* ;; "To update the current Highlighted Text, there may be additions and/or deletions")
(* ;; "The updates are organized into eight ordering cases where S -- Initial Selection, E -- Current Extension, N -- New Extension")
(* ;; "Case 0 [..NS...], Case 1 [...SN..] -- No Current Extension")
(* ;;
"Case 2 [NE.S...], Case 3 [...SNE.], Case 4 [..NS.E.] -- New Extension before Current Extension")
(* ;;
"Case 5 [...S.EN], Case 6 [.ENS...], Case 7 [.E.SN..] -- New Extension after Current Extension")
(with CHAT.STATE Chat.State (* ; "Chat State")
(with ANSI-STATE ANSI-State (* ; "ANSI State")
(COND
[(ZEROP SelectionStartColumn) (* ; "Handle Line Selections")
(COND
[(ZEROP ExtendedSelectionLine) (* ; "No Current Extension")
(COND
((< NewSelectionLine SelectionLine)
(* ; "Case 0")
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State
NewSelectionLine (SUB1 SelectionLine)))
(T (* ; "Case 1")
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State
(ADD1 SelectionLine)
NewSelectionLine]
[(< NewSelectionLine ExtendedSelectionLine)
(* ;
"New Extension before Current Extension")
(COND
((< ExtendedSelectionLine SelectionLine)
(* ; "Case 2")
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State
NewSelectionLine (SUB1 ExtendedSelectionLine)))
((< SelectionLine NewSelectionLine)
(* ; "Case 3")
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
NewSelectionLine
)
ExtendedSelectionLine))
(T (* ; "Case 4")
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State
(ADD1 SelectionLine)
ExtendedSelectionLine)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State
NewSelectionLine (SUB1 SelectionLine]
((< SelectionLine ExtendedSelectionLine)
(* ; "Case 5")
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
ExtendedSelectionLine
)
NewSelectionLine))
((< NewSelectionLine SelectionLine) (* ; "Case 6")
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State
ExtendedSelectionLine (SUB1 NewSelectionLine)))
(T (* ; "Case 7")
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State
ExtendedSelectionLine (SUB1 SelectionLine))
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
SelectionLine
)
NewSelectionLine]
[(ZEROP ExtendedSelectionLine) (* ; "No Current Extension")
(COND
[(= SelectionLine NewSelectionLine) (* ; "S and N on Same Line")
(COND
((< NewSelectionStartColumn SelectionStartColumn)
(* ; "Case 0")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
NewSelectionStartColumn (SUB1 SelectionStartColumn)
T))
(T (* ; "Case 1")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
(ADD1 SelectionEndColumn)
NewSelectionEndColumn]
((< NewSelectionLine SelectionLine) (* ; "Case 0")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
NewSelectionStartColumn 0)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
NewSelectionLine
)
(SUB1 SelectionLine))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine 1
(SUB1 SelectionStartColumn)
T))
(T (* ; "Case 1")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine
(ADD1 SelectionEndColumn)
0)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
SelectionLine
)
(SUB1 NewSelectionLine))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine 1
NewSelectionEndColumn]
[(= NewSelectionLine ExtendedSelectionLine)
(* ; "N and E on Same Line")
(COND
[(< NewSelectionStartColumn ExtendedSelectionStartColumn)
(* ;
"New Extension before Current Extension")
(COND
[(= NewSelectionLine SelectionLine)
(* ; "All on Same Line")
(COND
((< ExtendedSelectionStartColumn SelectionStartColumn)
(* ; "Case 2")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State
NewSelectionLine NewSelectionStartColumn (SUB1
ExtendedSelectionStartColumn
)
T))
((< SelectionStartColumn NewSelectionStartColumn)
(* ; "Case 3")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State
NewSelectionLine (ADD1 NewSelectionEndColumn)
ExtendedSelectionEndColumn))
(T (* ; "Case 4")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State
NewSelectionLine (ADD1 SelectionEndColumn)
ExtendedSelectionEndColumn)
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State
NewSelectionLine NewSelectionStartColumn (SUB1
SelectionStartColumn
)
T]
((< NewSelectionLine SelectionLine)
(* ; "Case 2")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
NewSelectionStartColumn (SUB1 ExtendedSelectionStartColumn)
T))
(T (* ; "Case 3 -- (Case 4 not possible)")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
(ADD1 NewSelectionEndColumn)
ExtendedSelectionEndColumn]
[(= NewSelectionLine SelectionLine) (* ; "All on Same Line")
(COND
((< SelectionStartColumn ExtendedSelectionStartColumn)
(* ; "Case 5")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
(ADD1 ExtendedSelectionEndColumn)
NewSelectionEndColumn))
((< NewSelectionStartColumn SelectionStartColumn)
(* ; "Case 6")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
ExtendedSelectionStartColumn (SUB1 NewSelectionStartColumn)
T))
(T (* ; "Case 7")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
ExtendedSelectionStartColumn (SUB1 SelectionStartColumn)
T)
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
(ADD1 SelectionEndColumn)
NewSelectionEndColumn]
((< SelectionLine NewSelectionLine) (* ; "Case 5")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
(ADD1 ExtendedSelectionEndColumn)
NewSelectionEndColumn))
(T (* ; "Case 6 -- (Case 7 not possible)")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
ExtendedSelectionStartColumn (SUB1 NewSelectionStartColumn)
T]
[(< NewSelectionLine ExtendedSelectionLine)
(* ;
"New Extension before Current Extension")
(COND
[(= ExtendedSelectionLine SelectionLine)
(* ; "E and S on Same Line")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
NewSelectionStartColumn 0)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
NewSelectionLine
)
(SUB1 ExtendedSelectionLine))
(COND
((< ExtendedSelectionStartColumn SelectionStartColumn)
(* ; "Case 2")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State
ExtendedSelectionLine 1 (SUB1 ExtendedSelectionStartColumn)
T))
(T (* ; "Case 4 -- (Case 3 not possible)")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine
(ADD1 SelectionEndColumn)
ExtendedSelectionEndColumn)
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine 1
(SUB1 SelectionStartColumn)
T]
[(= NewSelectionLine SelectionLine) (* ; "N and S on Same Line")
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
NewSelectionLine
)
(SUB1 ExtendedSelectionLine))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State ExtendedSelectionLine
1 ExtendedSelectionEndColumn)
(COND
((< SelectionStartColumn NewSelectionStartColumn)
(* ; "Case 3")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
(ADD1 NewSelectionEndColumn)
0))
(T (* ; "Case 4 -- (Case 2 not possible)")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
(ADD1 SelectionEndColumn)
0)
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
NewSelectionStartColumn (SUB1 SelectionStartColumn)
T]
((< ExtendedSelectionLine SelectionLine)
(* ; "Case 2")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
NewSelectionStartColumn 0)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
NewSelectionLine
)
(SUB1 ExtendedSelectionLine))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State ExtendedSelectionLine
1 (SUB1 ExtendedSelectionStartColumn)
T))
((< SelectionLine NewSelectionLine) (* ; "Case 3")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
(ADD1 NewSelectionEndColumn)
0)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
NewSelectionLine
)
(SUB1 ExtendedSelectionLine))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State ExtendedSelectionLine
1 ExtendedSelectionEndColumn))
(T (* ; "Case 4")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine
(ADD1 SelectionEndColumn)
0)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
SelectionLine
)
(SUB1 ExtendedSelectionLine))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State
ExtendedSelectionLine 1 ExtendedSelectionEndColumn)
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
NewSelectionStartColumn 0)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
NewSelectionLine
)
(SUB1 SelectionLine))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine 1
(SUB1 SelectionStartColumn)
T]
[(= ExtendedSelectionLine SelectionLine) (* ; "E and S on Same Line")
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1 SelectionLine)
(SUB1 NewSelectionLine))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine 1
NewSelectionEndColumn)
(COND
((< SelectionStartColumn ExtendedSelectionStartColumn)
(* ; "Case 5")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State ExtendedSelectionLine
(ADD1 ExtendedSelectionEndColumn)
0))
(T (* ; "Case 7 -- (Case 6 not possible)")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine
ExtendedSelectionStartColumn (SUB1 SelectionStartColumn)
T)
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine
(ADD1 SelectionEndColumn)
0]
[(= NewSelectionLine SelectionLine) (* ; "N and S on Same Line")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State ExtendedSelectionLine
ExtendedSelectionStartColumn 0)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
ExtendedSelectionLine
)
(SUB1 NewSelectionLine))
(COND
((< NewSelectionStartColumn SelectionStartColumn)
(* ; "Case 6")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine 1
(SUB1 NewSelectionStartColumn)
T))
(T (* ; "Case 7 -- (Case 5 not possible)")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine 1
(SUB1 SelectionStartColumn)
T)
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
(ADD1 SelectionEndColumn)
NewSelectionEndColumn]
((< SelectionLine ExtendedSelectionLine) (* ; "Case 5")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State ExtendedSelectionLine
(ADD1 ExtendedSelectionEndColumn)
0)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
ExtendedSelectionLine
)
(SUB1 NewSelectionLine))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine 1
NewSelectionEndColumn))
((< NewSelectionLine SelectionLine) (* ; "Case 6")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State ExtendedSelectionLine
ExtendedSelectionStartColumn 0)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
ExtendedSelectionLine
)
(SUB1 NewSelectionLine))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine 1
(SUB1 NewSelectionStartColumn)
T))
(T (* ; "Case 7")
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State ExtendedSelectionLine
ExtendedSelectionStartColumn 0)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
ExtendedSelectionLine
)
(SUB1 SelectionLine))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine 1
(SUB1 SelectionStartColumn)
T)
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State SelectionLine
(ADD1 SelectionEndColumn)
0)
(ANSI-Chat-Copy-Invert-Highlight-Lines Chat.State ANSI-State (ADD1
SelectionLine
)
(SUB1 NewSelectionLine))
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine 1
NewSelectionEndColumn)))
(SETQ ExtendedSelectionLine NewSelectionLine)
(SETQ ExtendedSelectionStartColumn NewSelectionStartColumn)
(SETQ ExtendedSelectionEndColumn NewSelectionEndColumn])
(ANSI-Chat-Update-Selection
[LAMBDA (Chat.State ANSI-State NewSelectionLine NewSelectionStartColumn NewSelectionEndColumn)
(* ; "Edited 22-Sep-87 11:01 by R.Beeman")
(with CHAT.STATE Chat.State (* ; "Chat State")
(with ANSI-STATE ANSI-State (* ; "ANSI State")
(ANSI-Chat-Copy-Remove-Highlight Chat.State ANSI-State)
(ANSI-Chat-Copy-Invert-Highlight Chat.State ANSI-State NewSelectionLine
(IMAX 1 NewSelectionStartColumn)
NewSelectionEndColumn)
(SETQ SelectionLine NewSelectionLine)
(SETQ SelectionStartColumn NewSelectionStartColumn)
(SETQ SelectionEndColumn NewSelectionEndColumn)
(SETQ ExtendedSelectionLine 0])
)
(DECLARE%: EVAL@COMPILE DONTCOPY
(FILESLOAD (SOURCE)
CHATDECLS ANSICHATDECLS)
)
(DECLARE%: DONTCOPY
(FILEMAP (NIL (1337 51894 (ANSI-Chat-Copy-Complete 1347 . 7655) (ANSI-Chat-Copy-Extend 7657 . 9745) (
ANSI-Chat-Copy-Get-String 9747 . 10626) (ANSI-Chat-Copy-Invert-Highlight 10628 . 12326) (
ANSI-Chat-Copy-Invert-Highlight-Lines 12328 . 12671) (ANSI-Chat-Copy-Remove-Highlight 12673 . 16161) (
ANSI-Chat-Copy-Select 16163 . 17484) (ANSI-Chat-Copy-Top 17486 . 18173) (ANSI-Chat-CopyButtonEventFn
18175 . 23220) (ANSI-Chat-Expand-Selection 23222 . 25242) (ANSI-Chat-Growable-Character 25244 . 25762)
(ANSI-Chat-Update-Extended-Selection 25764 . 50970) (ANSI-Chat-Update-Selection 50972 . 51892)))))
STOP