1
0
mirror of synced 2026-02-01 14:42:34 +00:00

Implementation of arrow keys

This commit is contained in:
rmkaplan
2025-12-02 00:00:21 -08:00
parent 2fdfd6acae
commit 220084cf2e
2 changed files with 185 additions and 135 deletions

View File

@@ -1,20 +1,20 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "30-Nov-2025 08:45:15" {WMEDLEY}<library>sketch>SKETCH-EDIT.;17 110086
(FILECREATED " 1-Dec-2025 23:22:35" {WMEDLEY}<library>SKETCH>SKETCH-EDIT.;20 113366
:EDIT-BY rmk
:CHANGES-TO (FNS \SKED.INSERT.CHARS.TO.STR SK.GETSYNTAX SK.WORD.BREAK.CLASS
\SKED.DELETE.WORD.FROM.STRING \SKED.INSERT)
:CHANGES-TO (FNS \SKED.INSERT.UNDO \SKED.INSERT.ACTION \SKED.INSERT.CHARS.TO.STR \SKED.INSERT
CHAR.BEGIN \SKED.ARROWKEYS)
(VARS SKETCH-EDITCOMS)
:PREVIOUS-DATE "29-Nov-2025 17:19:43" {WMEDLEY}<library>sketch>SKETCH-EDIT.;8)
:PREVIOUS-DATE "30-Nov-2025 08:45:15" {WMEDLEY}<library>SKETCH>SKETCH-EDIT.;17)
(PRETTYCOMPRINT SKETCH-EDITCOMS)
(RPAQQ SKETCH-EDITCOMS
((COMS (* selection functions)
((COMS (* ; "selection functions")
(FNS BUTLAST CHAR.BEGIN CLOSEST.CHAR CLOSEST.LINE FLASHW HILITE.LINE HILITE.TEXT
IN.TEXT.EXTEND INIMAGEOBJ INTEXT NEW.TEXT.EXTEND NEW.TEXT.SELECTIONP NTHCHARWIDTH
NTHLOCALREGION ONCHAR SHOW.EXTENDED.SELECTION.FEEDBACK SHOW.FEEDBACK
@@ -28,23 +28,24 @@
SELECTION.HIGHLIGHT.SHADE)
(GLOBALVARS IN.TEXT.FEEDBACK.CURSOR NEW.TEXT.FEEDBACK.CURSOR NEW.TEXT.FEEDBACK.SHADE
SELECTION.HIGHLIGHT.SHADE))
(COMS (* editting functions)
(FNS WB.EDITOR SK.TTYENTRYFN SK.TTYEXITFN SKED.INSERT \SKED.INSERT FIRST.N.ELEMENTS
SKED.CREATE.NEW.TEXTBOX SKED.CHARACTERPOSITION SKED.LINE.AND.CHAR#
\SKED.DELETE.WORD.FROM.STRING \SKED.INSERT.CHARS.TO.STR JOINCHARS
STRINGFROMCHARACTERS GETALLCHARS CLEANUP.EDIT SKED.NEW.TEXTELT))
(COMS (* line adding functions)
(COMS (* ; "editing functions")
(FNS WB.EDITOR SK.TTYENTRYFN SK.TTYEXITFN SKED.INSERT \SKED.INSERT \SKED.ARROWKEYS
\SKED.INSERT.ACTION \SKED.INSERT.UNDO FIRST.N.ELEMENTS SKED.CREATE.NEW.TEXTBOX
SKED.CHARACTERPOSITION SKED.LINE.AND.CHAR# \SKED.DELETE.WORD.FROM.STRING
\SKED.INSERT.CHARS.TO.STR JOINCHARS STRINGFROMCHARACTERS GETALLCHARS CLEANUP.EDIT
SKED.NEW.TEXTELT))
(COMS (* ; "line adding functions")
(FNS MAP.SCREEN.POSITION.ONTO.GRID NEAREST.ON.GRID SK.MIDDLE.TITLEFN WB.BUTTON.HANDLER
WB.ADD.NEW.POINT WB.DRAWLINE WB.RUBBERBAND.POSITION SK.RUBBERBAND.FEEDBACKFN
RESET.LINE.BEING.INPUT)
[P (* Was MODERNIZE loaded before?)
[P (* ; "Was MODERNIZE loaded before?")
(CL:WHEN (GETD 'MODERNWINDOW.SETUP)
(MODERNWINDOW.SETUP 'WB.BUTTON.HANDLER))]
(FNS NEAREST.EXISTING.POSITION WB.NEARPT LASTMOUSEPOSITION))))
(* selection functions)
(* ; "selection functions")
(DEFINEQ
@@ -61,10 +62,13 @@
(BUTLAST (CDR LST])
(CHAR.BEGIN
[LAMBDA (CHAR# LINE# TEXTELT STRM) (* rrb "14-Jan-85 15:40")
(* determines the x position of the first bit of character CHAR# in LINE# of
 TEXTELT.)
[LAMBDA (CHAR# LINE# TEXTELT STRM) (* ; "Edited 1-Dec-2025 00:22 by rmk")
(* rrb "14-Jan-85 15:40")
(* ;; "determines the x position of the first bit of character CHAR# in LINE# of TEXTELT.")
(* determines the x position of the first bit of character CHAR# in LINE# of
 TEXTELT.)
(PROG ((LTEXT (fetch (SCREENELT LOCALPART) of TEXTELT))
TEXT XPOS LFONT LREGION)
@@ -74,26 +78,21 @@
of LTEXT)
LINE#]
(COND
((EQ CHAR# 0) (* before the first character.)
((EQ CHAR# 0) (* ; "before the first character.")
(RETURN XPOS)))
(SETQ LFONT (fetch (LOCALTEXT LOCALFONT) of LTEXT))
(RETURN (IPLUS XPOS (COND
((IMAGESTREAMTYPEP STRM 'HARDCOPY)
(* hardcopy streams must pass the stream so correction in widths is accounted
 for.)
(* ;
 "hardcopy streams must pass the stream so correction in widths is accounted for.")
(DSPFONT LFONT STRM)
(STRINGWIDTH (SUBSTRING TEXT 1 CHAR#)
STRM))
((FONTP LFONT)
(for I from 1 to CHAR# sum (CHARWIDTH (CHCON1 (NTHCHAR TEXT I))
LFONT)))
(T
(* if it is printed in shade, put cursor a percentage of the way across the
 area.)
(STRINGWIDTH (SUBSTRING TEXT 1 CHAR#)
LFONT))
(T (* ;
 "if it is printed in shade, put cursor a percentage of the way across the area.")
(IQUOTIENT (ITIMES CHAR# (fetch (REGION WIDTH) of LREGION))
(NCHARS TEXT])
@@ -745,7 +744,7 @@
(* editting functions)
(* ; "editing functions")
(DEFINEQ
@@ -808,7 +807,7 @@
(\SKED.INSERT CHARCODES SKW ATSCALE])
(\SKED.INSERT
[LAMBDA (CHARCODES SKW ATSCALE) (* ; "Edited 29-Nov-2025 21:41 by rmk")
[LAMBDA (CHARCODES SKW ATSCALE) (* ; "Edited 1-Dec-2025 13:23 by rmk")
(* ; "Edited 12-Nov-2025 14:49 by rmk")
(* ; "Edited 10-Nov-2025 15:32 by rmk")
(* ; "Edited 20-Feb-87 17:28 by rrb")
@@ -822,46 +821,36 @@
SKW ATSCALE)
(SKED.INSERT (NTH CHARCODES 201)
SKW ATSCALE))
((\SKED.INSERT.ACTION CHARCODES SKW))
(T (PROG ((SELECTION (WINDOWPROP SKW 'SELECTION))
(EXTENSION (WINDOWPROP SKW 'EXTENDSELECTION))
TEXTELT ELTTYPE GTEXTELT FIRSTLINE# FIRSTCHAR# LASTLINE# LASTCHAR# STRLST NEWSTRS
NEWELT STRPIECE NEWLINE# NEWCHAR# SKCONTEXT PTRCHAR# CONTROLCHARTAIL)
(COND
((EQ (SK.GETSYNTAX (CAR CHARCODES))
:UNDO)
(* ;; "user typed an undo Avoid the overhead of inserting no characters and allow undo to be typed without a selection.")
(SETQ CONTROLCHARTAIL 'UNDO)
(GO UNDO)))
(COND
((NULL SELECTION) (* ;
(CL:UNLESS SELECTION (* ;
 "add a new text element with these characters.")
(STATUSPRINT SKW "
" "Indicate the position the typing should go with the left button.")
(RETURN)))
(RETURN))
(SKED.CLEAR.SELECTION SKW NIL T)
(SKED.REMOVE.OTHER.SELECTIONS SKW)
[COND
((AND (MEMB (CAR CHARCODES)
(CHARCODE (EOL LINEFEED)))
(KEYDOWNP 'CTRL)) (* ;
(CL:WHEN (AND (MEMB (CAR CHARCODES)
(CHARCODE (EOL LINEFEED)))
(KEYDOWNP 'CTRL)) (* ;
 "user hit control CR. create a new text or textbox.")
(SKED.CREATE.NEW.TEXTBOX [COND
((NEW.TEXT.SELECTIONP SELECTION)
NIL)
(T (fetch (SCREENELT INDIVIDUALGLOBALPART)
of (fetch (TEXTELTSELECTION SKTEXTELT)
of SELECTION]
(SKED.CREATE.NEW.TEXTBOX (CL:UNLESS (NEW.TEXT.SELECTIONP SELECTION)
(fetch (SCREENELT INDIVIDUALGLOBALPART)
of (fetch (TEXTELTSELECTION SKTEXTELT)
of SELECTION)))
SKW
(CDR CHARCODES))
(RETURN))
[COND
[(NEW.TEXT.SELECTIONP SELECTION) (* ;
 "selection is in open space, create a new text element.")
(* ;
 "merge the characters into strings of each line.")
(SETQ ELTTYPE 'TEXT)
(SETQ CONTROLCHARTAIL (\SKED.INSERT.CHARS.TO.STR CHARCODES NIL SKW))
(SETQ CONTROLCHARTAIL (\SKED.INSERT.CHARS.TO.STR CHARCODES NIL SKW SELECTION))
(COND
((OR NEWSTRS STRPIECE) (* ;
 "if there are any new characters, add a new text element.")
@@ -943,15 +932,14 @@
[CHARCODES (SETQ CONTROLCHARTAIL (\SKED.INSERT.CHARS.TO.STR
CHARCODES
(EQ ELTTYPE 'TEXTBOX)
SKW))
(SETQ NEWCHAR# (COND
(STRPIECE (NCHARS STRPIECE))
(T 0)))
SKW SELECTION))
(SETQ NEWCHAR# (CL:IF STRPIECE
(NCHARS STRPIECE)
0))
(SETQ NEWLINE# (ADD1 (LENGTH NEWSTRS]
(T (SETQ NEWCHAR# FIRSTCHAR#)
(SETQ NEWLINE# FIRSTLINE#]
(COND
((EQ LINE# LASTLINE#) (* ;
(CL:WHEN (EQ LINE# LASTLINE#) (* ;
 "on the last, copy the part before and the part after as one")
(SETQ NEWSTRS (COND
[STRPIECE (NCONC1
@@ -967,16 +955,15 @@
]
[(NEQ LASTCHAR# (NCHARS STR))
(NCONC1 NEWSTRS (SUBSTRING STR (ADD1 LASTCHAR#]
(T NEWSTRS]
(T NEWSTRS))))]
(* ;; "any other windows that had this selection have had it deleted already so this doesn't do anything for them.")
[COND
((IGREATERP NEWLINE# (LENGTH NEWSTRS))
(CL:WHEN (IGREATERP NEWLINE# (LENGTH NEWSTRS))
(* ;; "this corresponds to deleting every thing in a line. Make sure that if it is the last line that the selection is reset")
(COND
[COND
((EQ (SETQ NEWLINE# (LENGTH NEWSTRS))
0)
(SETQ NEWCHAR# 0)
@@ -989,22 +976,22 @@
[(WINDOWPROP SKW 'CHANGEDTEXTELT)
(* ;
 "make the history event for this edit so that it will restore the original text element")
(PROG ((INITSELECTION (WINDOWPROP SKW 'CHANGEDTEXTELT NIL)))
(COND
((POSITIONP INITSELECTION)
(LET ((INITSELECTION (WINDOWPROP SKW 'CHANGEDTEXTELT NIL)))
(COND
((POSITIONP INITSELECTION)
(* ;
 "this text element was typing that was never officially added, don't record the deletion either.")
(SK.DELETE.ELEMENT (LIST TEXTELT)
SKW
'DON'T))
(T (* ;
(SK.DELETE.ELEMENT (LIST TEXTELT)
SKW
'DON'T))
(T (* ;
 "selection was existing text, record this as a delete event.")
(SK.DELETE.ELEMENT
(LIST TEXTELT)
SKW
(LIST (fetch (SCREENELT GLOBALPART)
of (fetch (TEXTELTSELECTION SKTEXTELT)
of INITSELECTION]
(SK.DELETE.ELEMENT (LIST TEXTELT)
SKW
(LIST (fetch (SCREENELT GLOBALPART)
of (fetch (TEXTELTSELECTION
SKTEXTELT)
of INITSELECTION]
(T (SK.DELETE.ELEMENT (LIST TEXTELT)
SKW)))
(SKED.SET.SELECTION (SK.SCALE.POSITION.INTO.VIEWER
@@ -1016,7 +1003,7 @@
(RETURN NIL))
((EQ ELTTYPE 'TEXTBOX) (* ; "deleted everything in a textbox")
NIL)))
(T (SETQ NEWCHAR# (NCHARS (CAR (LAST NEWSTRS]
(T (SETQ NEWCHAR# (NCHARS (CAR (LAST NEWSTRS])
(SETQ PTRCHAR# (SKED.CHARACTERPOSITION NEWSTRS NEWLINE# NEWCHAR#))
(COND
((WINDOWPROP SKW 'CHANGEDTEXTELT)
@@ -1061,43 +1048,18 @@
of NEWELT))
PTRCHAR#]
(SETQ NEWLINE# (CAR NEWLINE#]
UNDO
(* ;; "Cleanup")
(COND
((NULL CONTROLCHARTAIL) (* ;
 "set the selection to where the characters were just inserted.")
(SKED.SET.SELECTION (CREATE.TEXT.SELECTION NEWELT NEWLINE# NEWCHAR# NIL NIL
(WINDOWPROP SKW 'DSP))
SKW))
[(EQ CONTROLCHARTAIL 'UNDO) (* ;
((EQ CONTROLCHARTAIL 'UNDO) (* ;
 "user types in an undo after some characters or while selection was in the middle of text.")
(PROG (INITSELECTION EDITEDELT)
(COND
((SETQ INITSELECTION (WINDOWPROP SKW 'CHANGEDTEXTELT NIL))
(* ;
 "in the middle of editing, undo these edits.")
[SETQ EDITEDELT (fetch (SCREENELT GLOBALPART)
of (OR NEWELT (fetch (TEXTELTSELECTION SKTEXTELT)
of (OR SELECTION (ERROR
"NO SELECTION WHEN THERE SHOULD BE"
]
(* ;
 "add event to history list so the undo can be undone.")
(COND
((POSITIONP INITSELECTION) (* ;
 "add an ADD event because previously there was nothing here.")
(SK.ADD.HISTEVENT 'ADD (LIST EDITEDELT)
SKW)
(SK.CHECK.END.INITIAL.EDIT SKW EDITEDELT))
(T (SK.ENTER.EDIT.CHANGE SKW (fetch (SCREENELT GLOBALPART)
of (fetch (TEXTELTSELECTION
SKTEXTELT)
of INITSELECTION))
EDITEDELT)))
(SK.UNDO.LAST SKW)
(SKED.SET.SELECTION INITSELECTION SKW))
(T (* ;
 "haven't edited any characters in the current element, just undo the last thing.")
(SK.UNDO.LAST SKW]
(\SKED.INSERT.UNDO NEWELT SELECTION))
(T
(* ;; "user typed a character command to create a new text box. Create it and put the remaining characters in it and set the cursor there.")
@@ -1110,6 +1072,94 @@
SKW
(CDR CONTROLCHARTAIL])
(\SKED.ARROWKEYS
[LAMBDA (ACTION SKW SELECTION) (* ; "Edited 1-Dec-2025 22:24 by rmk")
(* ;; "Move the caret left/right/up/down according to the arrow keys")
(CL:UNLESS SELECTION
(SETQ SELECTION (WINDOWPROP SKW 'SELECTION)))
(CL:WHEN (AND SELECTION (NOT (POSITIONP SELECTION)))
(LET* [(CHAR# (fetch (TEXTELTSELECTION SKCHAR#) of SELECTION))
(LINE# (fetch (TEXTELTSELECTION SKLINE#) of SELECTION))
(TEXTELT (fetch (TEXTELTSELECTION SKTEXTELT) of SELECTION))
(SKLEFT (fetch (TEXTELTSELECTION SKLEFT) of SELECTION))
(LINES (fetch (TEXT LISTOFCHARACTERS) of (fetch (SCREENELT INDIVIDUALGLOBALPART)
of TEXTELT]
(SELECTQ ACTION
(:ONECHAR.BACKWARD
(if (EQ CHAR# 0)
then (add LINE# -1)
[SETQ CHAR# (NCHARS (CAR (NTH LINES LINE#]
else (add CHAR# -1)))
(:ONECHAR.FORWARD
(if [EQ CHAR# (NCHARS (CAR (NTH LINES LINE#]
then (add LINE# 1)
(SETQ CHAR# 1)
else (add CHAR# 1)))
(:LINE.UP (add LINE# -1)
(SETQ CHAR# (CLOSEST.CHAR SKLEFT LINE# TEXTELT SKW)))
(:LINE.DOWN (add LINE# 1)
(SETQ CHAR# (CLOSEST.CHAR SKLEFT LINE# TEXTELT SKW)))
(SHOULDNT))
(CL:WHEN (<= 1 LINE# (LENGTH LINES))
(SKED.SELECTION.FEEDBACK SKW)
(SKED.SET.SELECTION (create TEXTELTSELECTION
using SELECTION SKCHAR# _ CHAR# SKLINE# _ LINE# SKLEFT _
(CHAR.BEGIN CHAR# LINE# (fetch (TEXTELTSELECTION
SKTEXTELT)
of SELECTION)
SKW)
SKBOTTOM _ (LINE.BEGIN LINE# TEXTELT))
SKW))))])
(\SKED.INSERT.ACTION
[LAMBDA (CHARCODES SKW) (* ; "Edited 1-Dec-2025 22:28 by rmk")
(LET [(ACTION (SK.GETSYNTAX (CAR CHARCODES]
(SELECTQ ACTION
(:UNDO (\SKED.INSERT.UNDO SKW)
T)
((:ONECHAR.BACKWARD :ONECHAR.FORWARD :LINE.UP :LINE.DOWN)
(\SKED.ARROWKEYS ACTION SKW)
T)
NIL])
(\SKED.INSERT.UNDO
[LAMBDA (SKW NEWELT SELECTION) (* ; "Edited 1-Dec-2025 23:21 by rmk")
(* ; "Edited 1-Dec-2025 12:56 by rmk")
(* ; "Edited 1-Dec-2025 12:48 by rmk")
(CL:UNLESS SELECTION
(SETQ SELECTION (WINDOWPROP SKW 'SELECTION)))
(PROG (INITSELECTION EDITEDELT)
(COND
((SETQ INITSELECTION (WINDOWPROP SKW 'CHANGEDTEXTELT NIL))
(* ;
 "in the middle of editing, undo these edits.")
[SETQ EDITEDELT (fetch (SCREENELT GLOBALPART) of (OR NEWELT (fetch (TEXTELTSELECTION
SKTEXTELT)
of (OR SELECTION
(ERROR
"NO SELECTION WHEN THERE SHOULD BE"
]
(* ;
 "add event to history list so the undo can be undone.")
(COND
((POSITIONP INITSELECTION) (* ;
 "add an ADD event because previously there was nothing here.")
(SK.ADD.HISTEVENT 'ADD (LIST EDITEDELT)
SKW)
(SK.CHECK.END.INITIAL.EDIT SKW EDITEDELT))
(T (SK.ENTER.EDIT.CHANGE SKW (fetch (SCREENELT GLOBALPART)
of (fetch (TEXTELTSELECTION SKTEXTELT) of
INITSELECTION
))
EDITEDELT)))
(SK.UNDO.LAST SKW)
(SKED.SET.SELECTION INITSELECTION SKW))
(T (* ;
 "haven't edited any characters in the current element, just undo the last thing.")
(SK.UNDO.LAST SKW])
(FIRST.N.ELEMENTS
[LAMBDA (LST N) (* rrb "20-Jan-86 18:05")
@@ -1299,7 +1349,7 @@
(T (RETURN (SUBSTRING STRING 1 END])
(\SKED.INSERT.CHARS.TO.STR
[LAMBDA (CHARCODES INCLUDECR SKW) (* ; "Edited 30-Nov-2025 08:43 by rmk")
[LAMBDA (CHARCODES INCLUDECR SKW SELECTION) (* ; "Edited 1-Dec-2025 00:42 by rmk")
(* ; "Edited 24-Nov-2025 08:40 by rmk")
(* ; "Edited 12-Nov-2025 14:50 by rmk")
(* ; "Edited 10-Nov-2025 16:35 by rmk")
@@ -1308,6 +1358,8 @@
(* ;; "takes a list of characters and makes it into strings on the free variable NEWSTRS. The variable STRPIECE is set to the last line of characters. NEWSTRS is a list of the strings that precede this one which is used in the case of backspace onto the previous line.")
(* ;; "SELECTION is for the actions that move the type-in")
(PROG (LINELST THISLINE REMAININGCHARS)
(for CHAR in CHARCODES
do (SELECTQ (SK.GETSYNTAX CHAR)
@@ -1381,9 +1433,6 @@
((:WORDDELETE.FORWARD :CHARDELETE.FORWARD)
(* ; "Not implemented, no-ops")
NIL)
((:ONECHAR.BACKWARD :ONECHAR.FORWARD :LINE.UP :LINE.DOWN)
(* ; "Arrow keys: not implemented")
NIL)
(:DELETE (* ;
 "delete selection. Here that means don't insert anything."))
(:UNDO
@@ -1474,7 +1523,7 @@
(* line adding functions)
(* ; "line adding functions")
(DEFINEQ
@@ -1833,7 +1882,7 @@
(WINDOWPROP SKW 'INPUTLINE NIL])
)
(* Was MODERNIZE loaded before?)
(* ; "Was MODERNIZE loaded before?")
(CL:WHEN (GETD 'MODERNWINDOW.SETUP)
(MODERNWINDOW.SETUP 'WB.BUTTON.HANDLER))
@@ -1870,26 +1919,27 @@
YCOORD _ (LASTMOUSEY WIN])
)
(DECLARE%: DONTCOPY
(FILEMAP (NIL (2553 39141 (BUTLAST 2563 . 2911) (CHAR.BEGIN 2913 . 4838) (CLOSEST.CHAR 4840 . 9063) (
CLOSEST.LINE 9065 . 9627) (FLASHW 9629 . 9786) (HILITE.LINE 9788 . 10607) (HILITE.TEXT 10609 . 12257)
(IN.TEXT.EXTEND 12259 . 15532) (INIMAGEOBJ 15534 . 16039) (INTEXT 16041 . 16538) (NEW.TEXT.EXTEND
16540 . 18759) (NEW.TEXT.SELECTIONP 18761 . 18941) (NTHCHARWIDTH 18943 . 19200) (NTHLOCALREGION 19202
. 19440) (ONCHAR 19442 . 19837) (SHOW.EXTENDED.SELECTION.FEEDBACK 19839 . 20774) (SHOW.FEEDBACK 20776
. 21266) (SHOW.FEEDBACK.BOX 21268 . 22322) (SELECTION.POSITION 22324 . 23116) (SKED.CLEAR.SELECTION
23118 . 23641) (SKETCH.CLEANUP 23643 . 25557) (SK.ENTER.EDIT.CHANGE 25559 . 27104) (
SKED.REMOVE.OTHER.SELECTIONS 27106 . 27533) (SKED.EXTEND.SELECTION 27535 . 29000) (SKED.MOVE.SELECTION
29002 . 34072) (CREATE.TEXT.SELECTION 34074 . 34590) (SKED.SELECTION.FEEDBACK 34592 . 36248) (
SKED.SET.EXTENDSELECTION 36250 . 36567) (SKED.SET.SELECTION 36569 . 36969) (LINE.BEGIN 36971 . 37525)
(SELECTION.GREATERP 37527 . 38322) (SK.GETSYNTAX 38324 . 39139)) (39983 87597 (WB.EDITOR 39993 . 41374
) (SK.TTYENTRYFN 41376 . 41916) (SK.TTYEXITFN 41918 . 42444) (SKED.INSERT 42446 . 42874) (\SKED.INSERT
42876 . 64878) (FIRST.N.ELEMENTS 64880 . 65147) (SKED.CREATE.NEW.TEXTBOX 65149 . 71678) (
SKED.CHARACTERPOSITION 71680 . 72467) (SKED.LINE.AND.CHAR# 72469 . 74100) (
\SKED.DELETE.WORD.FROM.STRING 74102 . 75266) (\SKED.INSERT.CHARS.TO.STR 75268 . 83979) (JOINCHARS
83981 . 84368) (STRINGFROMCHARACTERS 84370 . 84695) (GETALLCHARS 84697 . 85038) (CLEANUP.EDIT 85040 .
85492) (SKED.NEW.TEXTELT 85494 . 87595)) (87632 108640 (MAP.SCREEN.POSITION.ONTO.GRID 87642 . 89091) (
NEAREST.ON.GRID 89093 . 89637) (SK.MIDDLE.TITLEFN 89639 . 91582) (WB.BUTTON.HANDLER 91584 . 99406) (
WB.ADD.NEW.POINT 99408 . 102737) (WB.DRAWLINE 102739 . 106973) (WB.RUBBERBAND.POSITION 106975 . 107892
) (SK.RUBBERBAND.FEEDBACKFN 107894 . 108398) (RESET.LINE.BEING.INPUT 108400 . 108638)) (108822 110063
(NEAREST.EXISTING.POSITION 108832 . 109034) (WB.NEARPT 109036 . 109921) (LASTMOUSEPOSITION 109923 .
110061)))))
(FILEMAP (NIL (2849 39635 (BUTLAST 2859 . 3207) (CHAR.BEGIN 3209 . 5332) (CLOSEST.CHAR 5334 . 9557) (
CLOSEST.LINE 9559 . 10121) (FLASHW 10123 . 10280) (HILITE.LINE 10282 . 11101) (HILITE.TEXT 11103 .
12751) (IN.TEXT.EXTEND 12753 . 16026) (INIMAGEOBJ 16028 . 16533) (INTEXT 16535 . 17032) (
NEW.TEXT.EXTEND 17034 . 19253) (NEW.TEXT.SELECTIONP 19255 . 19435) (NTHCHARWIDTH 19437 . 19694) (
NTHLOCALREGION 19696 . 19934) (ONCHAR 19936 . 20331) (SHOW.EXTENDED.SELECTION.FEEDBACK 20333 . 21268)
(SHOW.FEEDBACK 21270 . 21760) (SHOW.FEEDBACK.BOX 21762 . 22816) (SELECTION.POSITION 22818 . 23610) (
SKED.CLEAR.SELECTION 23612 . 24135) (SKETCH.CLEANUP 24137 . 26051) (SK.ENTER.EDIT.CHANGE 26053 . 27598
) (SKED.REMOVE.OTHER.SELECTIONS 27600 . 28027) (SKED.EXTEND.SELECTION 28029 . 29494) (
SKED.MOVE.SELECTION 29496 . 34566) (CREATE.TEXT.SELECTION 34568 . 35084) (SKED.SELECTION.FEEDBACK
35086 . 36742) (SKED.SET.EXTENDSELECTION 36744 . 37061) (SKED.SET.SELECTION 37063 . 37463) (LINE.BEGIN
37465 . 38019) (SELECTION.GREATERP 38021 . 38816) (SK.GETSYNTAX 38818 . 39633)) (40480 90869 (
WB.EDITOR 40490 . 41871) (SK.TTYENTRYFN 41873 . 42413) (SK.TTYEXITFN 42415 . 42941) (SKED.INSERT 42943
. 43371) (\SKED.INSERT 43373 . 62845) (\SKED.ARROWKEYS 62847 . 65302) (\SKED.INSERT.ACTION 65304 .
65748) (\SKED.INSERT.UNDO 65750 . 68291) (FIRST.N.ELEMENTS 68293 . 68560) (SKED.CREATE.NEW.TEXTBOX
68562 . 75091) (SKED.CHARACTERPOSITION 75093 . 75880) (SKED.LINE.AND.CHAR# 75882 . 77513) (
\SKED.DELETE.WORD.FROM.STRING 77515 . 78679) (\SKED.INSERT.CHARS.TO.STR 78681 . 87251) (JOINCHARS
87253 . 87640) (STRINGFROMCHARACTERS 87642 . 87967) (GETALLCHARS 87969 . 88310) (CLEANUP.EDIT 88312 .
88764) (SKED.NEW.TEXTELT 88766 . 90867)) (90908 111916 (MAP.SCREEN.POSITION.ONTO.GRID 90918 . 92367) (
NEAREST.ON.GRID 92369 . 92913) (SK.MIDDLE.TITLEFN 92915 . 94858) (WB.BUTTON.HANDLER 94860 . 102682) (
WB.ADD.NEW.POINT 102684 . 106013) (WB.DRAWLINE 106015 . 110249) (WB.RUBBERBAND.POSITION 110251 .
111168) (SK.RUBBERBAND.FEEDBACKFN 111170 . 111674) (RESET.LINE.BEING.INPUT 111676 . 111914)) (112102
113343 (NEAREST.EXISTING.POSITION 112112 . 112314) (WB.NEARPT 112316 . 113201) (LASTMOUSEPOSITION
113203 . 113341)))))
STOP

Binary file not shown.