From 3727653e2320d30d8fd69e05c5c5f78578ac465d Mon Sep 17 00:00:00 2001 From: rmkaplan <69548581+rmkaplan@users.noreply.github.com> Date: Sun, 17 Dec 2023 16:42:59 -0800 Subject: [PATCH] Rmk96 move sketch files to library/sketch (#1446) * Move all SKETCH files from library/ to library/sketch/ and rename subsidiary files SKETCHXXX to SKETCH-XXX, according to our hyphen convention. This will allow SKETCH and all its subsidiary files to be loaded automatically when the sketch GETFN is required to display an image object. * New files again Somehow GITFNS produced smashed copies on the first attempt. May have to do with the fact that Medley doesn't always report that it couldn't create a new directory, or otherwise behaves badly in that situation. --- library/SKETCHBMELT.LCOM | Bin 8652 -> 0 bytes library/SKETCHSTREAM.LCOM | Bin 13214 -> 0 bytes library/{ => sketch}/SKETCH | 338 +- library/{SKETCHBMELT => sketch/SKETCH-BMELT} | 49 +- library/sketch/SKETCH-BMELT.LCOM | Bin 0 -> 8571 bytes library/{SKETCHEDIT => sketch/SKETCH-EDIT} | 62 +- .../SKETCH-EDIT.LCOM} | Bin 26242 -> 26502 bytes .../SKETCH-ELEMENTS} | 286 +- .../SKETCH-ELEMENTS.LCOM} | Bin 147378 -> 147391 bytes library/{SKETCHOBJ => sketch/SKETCH-OBJ} | 51 +- .../SKETCH-OBJ.LCOM} | Bin 14327 -> 14236 bytes library/sketch/SKETCH-OPS | 4189 +++++++++++++++++ library/sketch/SKETCH-OPS.LCOM | Bin 0 -> 69562 bytes .../{SKETCHSTREAM => sketch/SKETCH-STREAM} | 72 +- library/sketch/SKETCH-STREAM.LCOM | Bin 0 -> 13211 bytes library/{ => sketch}/SKETCH.LCOM | Bin 161584 -> 161521 bytes library/{ => sketch}/SKETCHOPS | 0 library/{ => sketch}/SKETCHOPS.LCOM | Bin 18 files changed, 4613 insertions(+), 434 deletions(-) delete mode 100644 library/SKETCHBMELT.LCOM delete mode 100644 library/SKETCHSTREAM.LCOM rename library/{ => sketch}/SKETCH (97%) rename library/{SKETCHBMELT => sketch/SKETCH-BMELT} (96%) create mode 100644 library/sketch/SKETCH-BMELT.LCOM rename library/{SKETCHEDIT => sketch/SKETCH-EDIT} (97%) rename library/{SKETCHEDIT.LCOM => sketch/SKETCH-EDIT.LCOM} (53%) rename library/{SKETCHELEMENTS => sketch/SKETCH-ELEMENTS} (97%) rename library/{SKETCHELEMENTS.LCOM => sketch/SKETCH-ELEMENTS.LCOM} (65%) rename library/{SKETCHOBJ => sketch/SKETCH-OBJ} (96%) rename library/{SKETCHOBJ.LCOM => sketch/SKETCH-OBJ.LCOM} (94%) create mode 100644 library/sketch/SKETCH-OPS create mode 100644 library/sketch/SKETCH-OPS.LCOM rename library/{SKETCHSTREAM => sketch/SKETCH-STREAM} (92%) create mode 100644 library/sketch/SKETCH-STREAM.LCOM rename library/{ => sketch}/SKETCH.LCOM (99%) rename library/{ => sketch}/SKETCHOPS (100%) rename library/{ => sketch}/SKETCHOPS.LCOM (100%) diff --git a/library/SKETCHBMELT.LCOM b/library/SKETCHBMELT.LCOM deleted file mode 100644 index 8eb12e0d8d991c3ffd9d1c85d52f6ca5e6d8ecb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8652 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 diff --git a/library/SKETCHSTREAM.LCOM b/library/SKETCHSTREAM.LCOM deleted file mode 100644 index 7715fd76e6191a8680ab2f8702275276546e204f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13214 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 Q(F6bcvA$l!e#qPXe{51Ej{pDw diff --git a/library/SKETCH b/library/sketch/SKETCH similarity index 97% rename from library/SKETCH rename to library/sketch/SKETCH index a4897d9c..76c5e334 100644 --- a/library/SKETCH +++ b/library/sketch/SKETCH @@ -1,15 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 4-Aug-2022 09:58:03" {DSK}larry>medley>library>SKETCH.;2 491064 +(FILECREATED " 5-Dec-2023 00:44:13" {WMEDLEY}sketch>SKETCH.;5 491114 - :CHANGES-TO (FNS SKETCH.COMMANDMENU.ITEMS) + :EDIT-BY rmk - :PREVIOUS-DATE " 1-Feb-2022 09:17:12" {DSK}larry>medley>library>SKETCH.;1) + :CHANGES-TO (VARS SKETCHCOMS) + :PREVIOUS-DATE "19-Oct-2023 23:55:27" {WMEDLEY}sketch>SKETCH.;4) -(* ; " -Copyright (c) 1984-1988, 1990, 1992-1993 by Venue & Xerox Corporation. -") (PRETTYCOMPRINT SKETCHCOMS) @@ -24,7 +22,7 @@ Copyright (c) 1984-1988, 1990, 1992-1993 by Venue & Xerox Corporation. [MAP.PROCESSES (FUNCTION (LAMBDA (PROC PROCNAME PROCFORM) (AND (EQ (CAR PROCFORM) - '\TEDIT2) + '\TEDIT1) (SETQ TEDITFLG T] (COND ((AND (BOUNDP 'ALL.SKETCHES) (OR SKETCHFLG NOTECARDSFLG TEDITFLG)) @@ -244,10 +242,12 @@ To abort loading the new version of Sketch, type '^'."] "Reads a file name and opens a sketch window onto the sketch it contains." ] (VARS (BackgroundMenu)) - (FILES SKETCHOPS SKETCHELEMENTS SKETCHEDIT SKETCHOBJ SKETCHBMELT) + (FILES SKETCH-OPS SKETCH-ELEMENTS SKETCH-EDIT SKETCH-OBJ SKETCH-BMELT) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (FILES (LOADCOMP) - SKETCHOPS SKETCHELEMENTS SKETCHOBJ - SKETCHEDIT)) + SKETCH-OPS SKETCH-ELEMENTS SKETCH-OBJ + SKETCH-EDIT)) + (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (FROM LOADUPS) + EXPORTS.ALL)) (* ;  "recompute the sketch element types because loading SKETCH clobbers the previous ones.") (P (INIT.BITMAP.ELEMENT) @@ -263,10 +263,10 @@ To abort loading the new version of Sketch, type '^'."] [COMS (* ;  "to correct for a bug in the file package that marks LOADCOMPed file as changed") (P (UNMARKASCHANGED 'SKETCH 'FILE) - (UNMARKASCHANGED 'SKETCHELEMENTS 'FILE) - (UNMARKASCHANGED 'SKETCHOPS 'FILE) - (UNMARKASCHANGED 'SKETCHEDIT 'FILE) - (UNMARKASCHANGED 'SKETCHOBJ 'FILE] + (UNMARKASCHANGED 'SKETCH-ELEMENTS 'FILE) + (UNMARKASCHANGED 'SKETCH-OPS 'FILE) + (UNMARKASCHANGED 'SKETCH-EDIT 'FILE) + (UNMARKASCHANGED 'SKETCH-OBJ 'FILE] (COMS (* ;  "add sketch as option to file browser edit command") (FNS SK.ADD.EDIT.COMMAND.TO.FILE.BROWSER) @@ -286,7 +286,7 @@ To abort loading the new version of Sketch, type '^'."] [MAP.PROCESSES (FUNCTION (LAMBDA (PROC PROCNAME PROCFORM) (AND (EQ (CAR PROCFORM) - '\TEDIT2) + '\TEDIT1) (SETQ TEDITFLG T] (COND ((AND (BOUNDP 'ALL.SKETCHES) @@ -8594,11 +8594,16 @@ Otherwise, type '^'.") (RPAQQ BackgroundMenu NIL) -(FILESLOAD SKETCHOPS SKETCHELEMENTS SKETCHEDIT SKETCHOBJ SKETCHBMELT) +(FILESLOAD SKETCH-OPS SKETCH-ELEMENTS SKETCH-EDIT SKETCH-OBJ SKETCH-BMELT) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (FILESLOAD (LOADCOMP) - SKETCHOPS SKETCHELEMENTS SKETCHOBJ SKETCHEDIT) + SKETCH-OPS SKETCH-ELEMENTS SKETCH-OBJ SKETCH-EDIT) +) +(DECLARE%: EVAL@COMPILE DONTCOPY + +(FILESLOAD (FROM LOADUPS) + EXPORTS.ALL) ) @@ -8723,13 +8728,13 @@ Otherwise, type '^'.") (UNMARKASCHANGED 'SKETCH 'FILE) -(UNMARKASCHANGED 'SKETCHELEMENTS 'FILE) +(UNMARKASCHANGED 'SKETCH-ELEMENTS 'FILE) -(UNMARKASCHANGED 'SKETCHOPS 'FILE) +(UNMARKASCHANGED 'SKETCH-OPS 'FILE) -(UNMARKASCHANGED 'SKETCHEDIT 'FILE) +(UNMARKASCHANGED 'SKETCH-EDIT 'FILE) -(UNMARKASCHANGED 'SKETCHOBJ 'FILE) +(UNMARKASCHANGED 'SKETCH-OBJ 'FILE) @@ -8762,151 +8767,150 @@ Otherwise, type '^'.") (ADDTOVAR LAMA SK.UNIONREGIONS SKETCH.CREATE) ) -(PUTPROPS SKETCH COPYRIGHT ("Venue & Xerox Corporation" 1984 1985 1986 1987 1988 1990 1992 1993)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (22128 85491 (SKETCH 22138 . 24243) (SKETCH.FROM.A.FILE 24245 . 24560) (SKETCHW.CREATE -24562 . 29136) (SKETCH.RESET 29138 . 30660) (SKETCHW.FIG.CHANGED 30662 . 31002) (SK.WINDOW.TITLE 31004 - . 31391) (EDITSLIDE 31393 . 31799) (EDITSKETCH 31801 . 32125) (SK.PUT.ON.FILE 32127 . 33579) ( -SK.OUTPUT.FILE.NAME 33581 . 33955) (SKETCH.PUT 33957 . 36855) (SK.GET.FROM.FILE 36857 . 37750) ( -SK.INCLUDE.FILE 37752 . 40260) (SK.GET.IMAGEOBJ.FROM.FILE 40262 . 42465) (SKETCH.GET 42467 . 42774) ( -ADD.SKETCH.TO.VIEWER 42776 . 45362) (FILENAMELESSVERSION 45364 . 45640) (SK.ADD.ELEMENTS.TO.SKETCH -45642 . 46156) (SKETCH.SET.A.DEFAULT 46158 . 53316) (SK.POPUP.SELECTIONFN 53318 . 53860) ( -GETSKETCHWREGION 53862 . 54068) (SK.ADD.ELEMENT 54070 . 55649) (SK.ADD.PRIORITY.ELEMENT.TO.SKETCH -55651 . 57045) (SK.ELTS.BY.PRIORITY 57047 . 57343) (SK.ORDER.ELEMENTS 57345 . 57612) ( -SK.ADD.PRIORITY.LOCAL.ELEMENT.TO.SKETCH 57614 . 59108) (SK.ADD.ELEMENTS 59110 . 59634) ( -SK.CHECK.WHENADDEDFN 59636 . 60366) (SK.APPLY.MENU.COMMAND 60368 . 61166) (SK.DELETE.ELEMENT1 61168 . -62746) (SK.MARK.DIRTY 62748 . 63414) (SK.MARK.UNDIRTY 63416 . 63747) (SK.MENU.AND.RETURN.FIELD 63749 - . 64414) (SKETCH.SET.BRUSH.SHAPE 64416 . 65001) (SKETCH.SET.BRUSH.SIZE 65003 . 65509) ( -SKETCHW.CLOSEFN 65511 . 67302) (SK.CONFIRM.DESTRUCTION 67304 . 68303) (SKETCHW.OUTFN 68305 . 68569) ( -SKETCHW.REOPENFN 68571 . 68983) (MAKE.LOCAL.SKETCH 68985 . 69715) (MAP.SKETCHSPEC.INTO.VIEWER 69717 . -70927) (SKETCHW.REPAINTFN 70929 . 71757) (SKETCHW.REPAINTFN1 71759 . 72698) (SK.DRAWFIGURE.IF 72700 . -73222) (SKETCHW.SCROLLFN 73224 . 77417) (SKETCHW.RESHAPEFN 77419 . 79677) (SK.UPDATE.EVENT.SELECTION -79679 . 81734) (LIGHTGRAYWINDOW 81736 . 81899) (SK.ADD.SPACES 81901 . 82647) (SK.SKETCH.MENU 82649 . -82971) (SK.CHECK.IMAGEOBJ.WHENDELETEDFN 82973 . 83825) (SK.APPLY.IMAGEOBJ.WHENDELETEDFN 83827 . 84787) - (SK.RETURN.TTY 84789 . 85157) (SK.TAKE.TTY 85159 . 85489)) (85545 108873 (SKETCH.COMMANDMENU 85555 . -85892) (SKETCH.COMMANDMENU.ITEMS 85894 . 105977) (CREATE.SKETCHW.COMMANDMENU 105979 . 106399) ( -SKETCHW.SELECTIONFN 106401 . 107504) (SKETCH.MONITORLOCK 107506 . 107977) (SK.EVAL.AS.PROCESS 107979 - . 108592) (SK.EVAL.WITH.LOCK 108594 . 108871)) (108874 116678 (SK.FIX.MENU 108884 . 109978) ( -SK.SET.UP.MENUS 109980 . 112281) (SK.INSURE.HAS.MENU 112283 . 112945) (SK.CREATE.STANDARD.MENU 112947 - . 113392) (SK.ADD.ITEM.TO.MENU 113394 . 114069) (SK.GET.VIEWER.POPUP.MENU 114071 . 116272) ( -SK.CLEAR.POPUP.MENU 116274 . 116676)) (116734 125556 (SKETCH.CREATE 116744 . 117530) (GETSKETCHPROP -117532 . 120589) (PUTSKETCHPROP 120591 . 124523) (CREATE.DEFAULT.SKETCH.CONTEXT 124525 . 125554)) ( -125722 148618 (SK.COPY.BUTTONEVENTFN 125732 . 136960) (SK.BUTTONEVENT.MARK 136962 . 137345) ( -SK.BUILD.IMAGEOBJ 137347 . 147262) (SK.BUTTONEVENT.OVERP 147264 . 147887) (SK.BUTTONEVENT.SAME.KEYS -147889 . 148616)) (148897 174712 (SK.SEL.AND.CHANGE 148907 . 149199) (SK.CHECK.WHENCHANGEDFN 149201 . -149907) (SK.CHECK.PRECHANGEFN 149909 . 150510) (SK.CHANGE.ELT 150512 . 150704) (SK.CHANGE.THING 150706 - . 151957) (SKETCH.CHANGE.ELEMENTS 151959 . 153142) (SK.APPLY.SINGLE.CHANGEFN 153144 . 153717) ( -SK.DO.CHANGESPECS 153719 . 155378) (SK.VIEWER.FROM.SKETCH.ARG 155380 . 155822) (SK.DO.CHANGESPEC1 -155824 . 157699) (SK.CHANGEFN 157701 . 158281) (SK.READCHANGEFN 158283 . 158742) (SK.DEFAULT.CHANGEFN -158744 . 161216) (CHANGEABLEFIELDITEMS 161218 . 161865) (SK.APPLY.CHANGE.COMMAND 161867 . 162484) ( -SK.DO.AND.RECORD.CHANGES 162486 . 163883) (SK.APPLY.CHANGE.COMMAND1 163885 . 165373) ( -SK.ELEMENTS.CHANGEFN 165375 . 167699) (READ.POINT.TO.ADD 167701 . 168645) (GLOBAL.KNOT.FROM.LOCAL -168647 . 169107) (SK.ADD.KNOT.TO.ELEMENT 169109 . 170053) (SK.GROUP.CHANGEFN 170055 . 171267) ( -SK.GROUP.CHANGEFN1 171269 . 174710)) (174879 188612 (ADD.ELEMENT.TO.SKETCH 174889 . 176595) ( -ADD.SKETCH.VIEWER 176597 . 177265) (REMOVE.SKETCH.VIEWER 177267 . 177880) (ALL.SKETCH.VIEWERS 177882 - . 178122) (SKETCH.ALL.VIEWERS 178124 . 178384) (VIEWER.BUCKET 178386 . 178537) (ELT.INSIDE.REGION? -178539 . 178866) (ELT.INSIDE.SKWP 178868 . 179159) (SCALE.FROM.SKW 179161 . 179411) ( -SK.ADDELT.TO.WINDOW 179413 . 180273) (SK.CALC.REGION.VIEWED 180275 . 180653) (SK.DRAWFIGURE 180655 . -181944) (SK.DRAWFIGURE1 181946 . 182330) (SK.LOCAL.FROM.GLOBAL 182332 . 183567) (SKETCH.REGION.VIEWED -183569 . 186256) (SKETCH.VIEW.FROM.NAME 186258 . 186688) (SK.UPDATE.REGION.VIEWED 186690 . 187082) ( -SKETCH.ADD.AND.DISPLAY 187084 . 187492) (SKETCH.ADD.AND.DISPLAY1 187494 . 187932) (SK.ADD.ITEM 187934 - . 188266) (SKETCHW.ADD.INSTANCE 188268 . 188610)) (188653 201841 (SK.SEL.AND.DELETE 188663 . 189051) -(SK.ERASE.AND.DELETE.ITEM 189053 . 189472) (REMOVE.ELEMENT.FROM.SKETCH 189474 . 190585) ( -SK.DELETE.ELEMENT 190587 . 191145) (SK.DELETE.ELEMENT2 191147 . 191808) (SK.DELETE.KNOT 191810 . -192101) (SK.SEL.AND.DELETE.KNOT 192103 . 193228) (SK.DELETE.ELEMENT.KNOT 193230 . 196437) ( -SK.CHECK.WHENDELETEDFN 196439 . 197219) (SK.CHECK.PREEDITFN 197221 . 197705) ( -SK.CHECK.END.INITIAL.EDIT 197707 . 198241) (SK.CHECK.WHENPOINTDELETEDFN 198243 . 199039) (SK.ERASE.ELT - 199041 . 199377) (SK.DELETE.ELT 199379 . 199754) (SK.DELETE.ITEM 199756 . 200164) (DELFROMTCONC -200166 . 201839)) (201880 215714 (SK.COPY.ELT 201890 . 202260) (SK.SEL.AND.COPY 202262 . 202645) ( -SK.COPY.ELEMENTS 202647 . 208275) (SK.ADD.COPY.OF.ELEMENTS 208277 . 210044) ( -SK.GLOBAL.FROM.LOCAL.ELEMENTS 210046 . 210286) (SK.COPY.ITEM 210288 . 211085) (SK.INSERT.SKETCH 211087 - . 215712)) (215754 245775 (SK.MOVE.ELT 215764 . 216039) (SK.MOVE.ELT.OR.PT 216041 . 216354) ( -SK.APPLY.DEFAULT.MOVE 216356 . 216790) (SK.SEL.AND.MOVE 216792 . 217339) (SK.MOVE.ELEMENTS 217341 . -228213) (SKETCH.MOVE.ELEMENTS 228215 . 230146) (SKETCH.COPY.ELEMENTS 230148 . 232195) ( -\SKETCH.COPY.ELEMENT 232197 . 232922) (SK.TRANSLATE.ELEMENT 232924 . 233407) (SK.COPY.GLOBAL.ELEMENT -233409 . 233620) (SK.MAKE.ELEMENT.MOVE.ARG 233622 . 234242) (SK.MAKE.ELEMENTS.MOVE.ARG 234244 . 234766 -) (SK.MAKE.POINTS.AND.ELEMENTS.MOVE.ARG 234768 . 235837) (SK.SHOW.FIG.FROM.INFO 235839 . 236207) ( -SK.MOVE.THING 236209 . 237115) (UPDATE.ELEMENT.IN.SKETCH 237117 . 239172) (SK.UPDATE.ELEMENT 239174 . -240733) (SK.UPDATE.ELEMENTS 240735 . 241454) (SK.UPDATE.ELEMENT1 241456 . 245356) ( -SK.MOVE.ELEMENT.POINT 245358 . 245773)) (245838 268127 (SK.MOVE.POINTS 245848 . 246135) ( -SK.SEL.AND.MOVE.POINTS 246137 . 246442) (SK.DO.MOVE.ELEMENT.POINTS 246444 . 255101) ( -SK.MOVE.ITEM.POINTS 255103 . 256774) (SK.TRANSLATEPTSFN 256776 . 257160) (SK.TRANSLATE.POINTS 257162 - . 258063) (SK.SELECT.MULTIPLE.POINTS 258065 . 263705) (SK.CONTROL.POINTS.IN.REGION 263707 . 265128) ( -SK.ADD.PT.SELECTION 265130 . 265594) (SK.REMOVE.PT.SELECTION 265596 . 266213) (SK.ADD.POINT 266215 . -266838) (SK.ELTS.CONTAINING.PTS 266840 . 267465) (SK.HOTSPOTS.NOT.ON.LIST 267467 . 268125)) (268285 -271081 (SK.SET.MOVE.MODE 268295 . 268966) (SK.SET.MOVE.MODE.POINTS 268968 . 269307) ( -SK.SET.MOVE.MODE.ELEMENTS 269309 . 269653) (SK.SET.MOVE.MODE.COMBINED 269655 . 270005) (READMOVEMODE -270007 . 271079)) (271082 289837 (SK.ALIGN.POINTS 271092 . 271382) (SK.SEL.AND.ALIGN.POINTS 271384 . -271693) (SK.ALIGN.POINTS.LEFT 271695 . 271998) (SK.ALIGN.POINTS.RIGHT 272000 . 272305) ( -SK.ALIGN.POINTS.TOP 272307 . 272608) (SK.ALIGN.POINTS.BOTTOM 272610 . 272917) ( -SK.EVEN.SPACE.POINTS.IN.X 272919 . 273239) (SK.EVEN.SPACE.POINTS.IN.Y 273241 . 273561) ( -SK.DO.ALIGN.POINTS 273563 . 284185) (SK.NTH.CONTROL.POINT 284187 . 284648) ( -SK.GET.SELECTED.ELEMENT.STRUCTURE 284650 . 285316) (SK.CORRESPONDING.CONTROL.PT 285318 . 285872) ( -SK.CONTROL.POINT.NUMBER 285874 . 286244) (SK.DO.ALIGN.SETVALUE 286246 . 289835)) (289901 303333 ( -SKETCH.CREATE.GROUP 289911 . 290400) (SK.CREATE.GROUP1 290402 . 290949) (SK.UPDATE.GROUP.AFTER.CHANGE -290951 . 291740) (SK.GROUP.ELTS 291742 . 292023) (SK.SEL.AND.GROUP 292025 . 292411) (SK.GROUP.ELEMENTS - 292413 . 294062) (SK.UNGROUP.ELT 294064 . 294348) (SK.SEL.AND.UNGROUP 294350 . 296019) ( -SK.UNGROUP.ELEMENT 296021 . 296957) (SK.GLOBAL.REGION.OF.LOCAL.ELEMENTS 296959 . 297881) ( -SK.LOCAL.REGION.OF.LOCAL.ELEMENTS 297883 . 298894) (SK.GLOBAL.REGION.OF.GLOBAL.ELEMENTS 298896 . -300236) (SK.UNIONREGIONS 300238 . 302604) (SKETCH.REGION.OF.SKETCH 302606 . 303022) (SK.FLASHREGION -303024 . 303331)) (303334 316805 (INIT.GROUP.ELEMENT 303344 . 304216) (GROUP.DRAWFN 304218 . 304668) ( -GROUP.EXPANDFN 304670 . 306233) (GROUP.INSIDEFN 306235 . 306644) (GROUP.REGIONFN 306646 . 307041) ( -GROUP.GLOBALREGIONFN 307043 . 307361) (GROUP.TRANSLATEFN 307363 . 309395) (GROUP.TRANSFORMFN 309397 . -312877) (GROUP.READCHANGEFN 312879 . 316803)) (316806 317814 (REGION.CENTER 316816 . 317417) ( -REMOVE.LAST 317419 . 317812)) (317867 322974 (SK.MOVE.GROUP.CONTROL.PT 317877 . 318168) ( -SK.SEL.AND.MOVE.CONTROL.PT 318170 . 319574) (SK.MOVE.GROUP.ELEMENT.CONTROL.POINT 319576 . 321649) ( -SK.READ.NEW.GROUP.CONTROL.PT 321651 . 322972)) (323233 327857 (SK.DO.GROUP 323243 . 324695) ( -SK.CHECK.WHENGROUPEDFN 324697 . 325407) (SK.DO.UNGROUP 325409 . 326614) (SK.CHECK.WHENUNGROUPEDFN -326616 . 327203) (SK.GROUP.UNDO 327205 . 327528) (SK.UNGROUP.UNDO 327530 . 327855)) (328098 333020 ( -SK.FREEZE.ELTS 328108 . 328392) (SK.SEL.AND.FREEZE 328394 . 328784) (SK.FREEZE.ELEMENTS 328786 . -329337) (SK.UNFREEZE.ELT 329339 . 329628) (SK.SEL.AND.UNFREEZE 329630 . 331166) (SK.UNFREEZE.ELEMENTS -331168 . 331727) (SK.FREEZE.UNDO 331729 . 331974) (SK.UNFREEZE.UNDO 331976 . 332223) (SK.DO.FREEZE -332225 . 332618) (SK.DO.UNFREEZE 332620 . 333018)) (333250 343060 (SKETCH.ELEMENTS.OF.SKETCH 333260 . -334095) (SKETCH.LIST.OF.ELEMENTS 334097 . 334815) (SKETCH.ADD.ELEMENT 334817 . 335892) ( -SKETCH.DELETE.ELEMENT 335894 . 337626) (DELFROMGROUPELT 337628 . 338428) (SKETCH.ELEMENT.TYPE 338430 - . 338779) (SKETCH.ELEMENT.CHANGED 338781 . 340349) (SK.ELEMENT.CHANGED1 340351 . 341002) ( -SK.UPDATE.GLOBAL.IMAGE.OBJECT.ELEMENT 341004 . 343058)) (343114 347726 (INSURE.SKETCH 343124 . 345739) - (LOCALSPECS.FROM.VIEWER 345741 . 346101) (SK.LOCAL.ELT.FROM.GLOBALPART 346103 . 346571) ( -SKETCH.FROM.VIEWER 346573 . 346807) (INSPECT.SKETCH 346809 . 347134) (ELT.INSIDE.SKETCHWP 347136 . -347409) (SK.INSIDE.REGION 347411 . 347724)) (347727 352057 (MAPSKETCHSPECS 347737 . 348358) ( -MAPCOLLECTSKETCHSPECS 348360 . 349109) (MAPSKETCHSPECSUNTIL 349111 . 349919) (MAPGLOBALSKETCHSPECS -349921 . 350622) (MAPGLOBALSKETCHELEMENTS 350624 . 352055)) (352119 378011 (SK.ADD.SELECTION 352129 . -352869) (SK.COPY.INSERTFN 352871 . 356502) (SCREENELEMENTP 356504 . 356977) (SK.ITEM.REGION 356979 . -357466) (SK.ELEMENT.GLOBAL.REGION 357468 . 357996) (SK.LOCAL.ITEMS.IN.REGION 357998 . 359977) ( -SK.REGIONFN 359979 . 360301) (SK.GLOBAL.REGIONFN 360303 . 360661) (SK.REMOVE.SELECTION 360663 . 361391 -) (SK.SELECT.MULTIPLE.ITEMS 361393 . 371835) (SKETCH.GET.ELEMENTS 371837 . 373260) (SK.PUT.MARKS.UP -373262 . 373601) (SK.TAKE.MARKS.DOWN 373603 . 373942) (SK.TRANSLATE.GLOBALPART 373944 . 376071) ( -SK.TRANSLATE.ITEM 376073 . 377000) (SK.TRANSLATEFN 377002 . 377198) (TRANSLATE.SKETCH 377200 . 378009) -) (378277 381184 (SK.INPUT.SCALE 378287 . 379134) (SK.UPDATE.SKETCHCONTEXT 379136 . 379733) ( -SK.SET.INPUT.SCALE 379735 . 380384) (SK.SET.INPUT.SCALE.CURRENT 380386 . 380677) ( -SK.SET.INPUT.SCALE.VALUE 380679 . 381182)) (381235 383147 (SK.SET.FEEDBACK.MODE 381245 . 382551) ( -SK.SET.FEEDBACK.POINT 382553 . 382721) (SK.SET.FEEDBACK.VERBOSE 382723 . 382892) ( -SK.SET.FEEDBACK.ALWAYS 382894 . 383145)) (383298 384575 (SKETCH.TITLE 383308 . 383571) ( -SK.SHRINK.ICONCREATE 383573 . 384573)) (390265 393079 (READBRUSHSHAPE 390275 . 390734) (READ.FUNCTION -390736 . 391251) (READBRUSHSIZE 391253 . 391711) (READANGLE 391713 . 392205) (READARCDIRECTION 392207 - . 393077)) (393080 403491 (SK.CHANGE.DASHING 393090 . 397038) (READ.AND.SAVE.NEW.DASHING 397040 . -398808) (READ.NEW.DASHING 398810 . 400550) (READ.DASHING.CHANGE 400552 . 402027) (SK.CACHE.DASHING -402029 . 403031) (SK.DASHING.LABEL 403033 . 403489)) (403492 407197 (READ.FILLING.CHANGE 403502 . -405483) (SK.CACHE.FILLING 405485 . 406203) (READ.AND.SAVE.NEW.FILLING 406205 . 406803) ( -SK.FILLING.LABEL 406805 . 407195)) (407581 443834 (SK.GETGLOBALPOSITION 407591 . 407896) ( -SKETCH.TRACK.ELEMENTS 407898 . 411418) (SK.PICKOUT.WHOLE.MOVE.ELEMENTS 411420 . 411979) ( -MAP.SKETCH.ELEMENTS.INTO.VIEWER 411981 . 412373) (MAP.GLOBAL.POSITION.INTO.VIEWER 412375 . 412755) ( -SKETCH.TO.VIEWER.POSITION 412757 . 413116) (SKETCH.TRACK.IMAGE 413118 . 413972) (SK.TRACK.IMAGE1 -413974 . 415386) (MAP.VIEWER.XY.INTO.GLOBAL 415388 . 416382) (SK.SET.POSITION 416384 . 416720) ( -MAP.VIEWER.PT.INTO.GLOBAL 416722 . 417828) (VIEWER.TO.SKETCH.POSITION 417830 . 418465) ( -SK.INSURE.SCALE 418467 . 418727) (SKETCH.TO.VIEWER.REGION 418729 . 419535) (VIEWER.TO.SKETCH.REGION -419537 . 419875) (SK.READ.POINT.WITH.FEEDBACK 419877 . 430880) (SKETCH.GET.POSITION 430882 . 432762) ( -\CLOBBER.POSITION 432764 . 433212) (NEAREST.HOT.SPOT 433214 . 434742) (GETWREGION 434744 . 435505) ( -GET.BITMAP.POSITION 435507 . 436291) (SK.TRACK.BITMAP1 436293 . 443832)) (444403 475289 ( -SK.BRING.UP.POSITION.PAD 444413 . 450273) (SK.PAD.READER.POSITION 450275 . 451924) ( -SK.POSITION.READER.REPAINTFN 451926 . 453710) (SK.POSITION.PAD.FROM.VIEWER 453712 . 455054) ( -SK.INIT.POSITION.NUMBER.PAD.MENU 455056 . 455406) (SK.READ.POSITION.PAD.HANDLER 455408 . 461140) ( -DISPLAY.POSITION.READER.TOTAL 461142 . 463440) (POSITION.PAD.READER.HANDLER 463442 . 471485) ( -POSITIONPAD.HELDFN 471487 . 472971) (\POSITION.PAD.ADD.DIGIT.MENU 472973 . 474552) ( -\POSITION.READER.NUMBERPAD 474554 . 475287)) (476915 479593 (SK.DRAWFN 476925 . 477291) ( -SK.TRANSFORMFN 477293 . 477674) (SK.EXPANDFN 477676 . 477953) (SK.INPUT 477955 . 478336) (SK.INSIDEFN -478338 . 478978) (SK.UPDATEFN 478980 . 479591)) (485165 489110 (SK.CHECK.SKETCH.VERSION 485175 . -486415) (SK.INSURE.RECORD.LENGTH 486417 . 487900) (SK.INSURE.HAS.LENGTH 487902 . 488640) ( -SK.RECORD.LENGTH 488642 . 488816) (SK.SET.RECORD.LENGTHS 488818 . 489108)) (489851 490738 ( -SK.ADD.EDIT.COMMAND.TO.FILE.BROWSER 489861 . 490736))))) + (FILEMAP (NIL (22176 85539 (SKETCH 22186 . 24291) (SKETCH.FROM.A.FILE 24293 . 24608) (SKETCHW.CREATE +24610 . 29184) (SKETCH.RESET 29186 . 30708) (SKETCHW.FIG.CHANGED 30710 . 31050) (SK.WINDOW.TITLE 31052 + . 31439) (EDITSLIDE 31441 . 31847) (EDITSKETCH 31849 . 32173) (SK.PUT.ON.FILE 32175 . 33627) ( +SK.OUTPUT.FILE.NAME 33629 . 34003) (SKETCH.PUT 34005 . 36903) (SK.GET.FROM.FILE 36905 . 37798) ( +SK.INCLUDE.FILE 37800 . 40308) (SK.GET.IMAGEOBJ.FROM.FILE 40310 . 42513) (SKETCH.GET 42515 . 42822) ( +ADD.SKETCH.TO.VIEWER 42824 . 45410) (FILENAMELESSVERSION 45412 . 45688) (SK.ADD.ELEMENTS.TO.SKETCH +45690 . 46204) (SKETCH.SET.A.DEFAULT 46206 . 53364) (SK.POPUP.SELECTIONFN 53366 . 53908) ( +GETSKETCHWREGION 53910 . 54116) (SK.ADD.ELEMENT 54118 . 55697) (SK.ADD.PRIORITY.ELEMENT.TO.SKETCH +55699 . 57093) (SK.ELTS.BY.PRIORITY 57095 . 57391) (SK.ORDER.ELEMENTS 57393 . 57660) ( +SK.ADD.PRIORITY.LOCAL.ELEMENT.TO.SKETCH 57662 . 59156) (SK.ADD.ELEMENTS 59158 . 59682) ( +SK.CHECK.WHENADDEDFN 59684 . 60414) (SK.APPLY.MENU.COMMAND 60416 . 61214) (SK.DELETE.ELEMENT1 61216 . +62794) (SK.MARK.DIRTY 62796 . 63462) (SK.MARK.UNDIRTY 63464 . 63795) (SK.MENU.AND.RETURN.FIELD 63797 + . 64462) (SKETCH.SET.BRUSH.SHAPE 64464 . 65049) (SKETCH.SET.BRUSH.SIZE 65051 . 65557) ( +SKETCHW.CLOSEFN 65559 . 67350) (SK.CONFIRM.DESTRUCTION 67352 . 68351) (SKETCHW.OUTFN 68353 . 68617) ( +SKETCHW.REOPENFN 68619 . 69031) (MAKE.LOCAL.SKETCH 69033 . 69763) (MAP.SKETCHSPEC.INTO.VIEWER 69765 . +70975) (SKETCHW.REPAINTFN 70977 . 71805) (SKETCHW.REPAINTFN1 71807 . 72746) (SK.DRAWFIGURE.IF 72748 . +73270) (SKETCHW.SCROLLFN 73272 . 77465) (SKETCHW.RESHAPEFN 77467 . 79725) (SK.UPDATE.EVENT.SELECTION +79727 . 81782) (LIGHTGRAYWINDOW 81784 . 81947) (SK.ADD.SPACES 81949 . 82695) (SK.SKETCH.MENU 82697 . +83019) (SK.CHECK.IMAGEOBJ.WHENDELETEDFN 83021 . 83873) (SK.APPLY.IMAGEOBJ.WHENDELETEDFN 83875 . 84835) + (SK.RETURN.TTY 84837 . 85205) (SK.TAKE.TTY 85207 . 85537)) (85593 108921 (SKETCH.COMMANDMENU 85603 . +85940) (SKETCH.COMMANDMENU.ITEMS 85942 . 106025) (CREATE.SKETCHW.COMMANDMENU 106027 . 106447) ( +SKETCHW.SELECTIONFN 106449 . 107552) (SKETCH.MONITORLOCK 107554 . 108025) (SK.EVAL.AS.PROCESS 108027 + . 108640) (SK.EVAL.WITH.LOCK 108642 . 108919)) (108922 116726 (SK.FIX.MENU 108932 . 110026) ( +SK.SET.UP.MENUS 110028 . 112329) (SK.INSURE.HAS.MENU 112331 . 112993) (SK.CREATE.STANDARD.MENU 112995 + . 113440) (SK.ADD.ITEM.TO.MENU 113442 . 114117) (SK.GET.VIEWER.POPUP.MENU 114119 . 116320) ( +SK.CLEAR.POPUP.MENU 116322 . 116724)) (116782 125604 (SKETCH.CREATE 116792 . 117578) (GETSKETCHPROP +117580 . 120637) (PUTSKETCHPROP 120639 . 124571) (CREATE.DEFAULT.SKETCH.CONTEXT 124573 . 125602)) ( +125770 148666 (SK.COPY.BUTTONEVENTFN 125780 . 137008) (SK.BUTTONEVENT.MARK 137010 . 137393) ( +SK.BUILD.IMAGEOBJ 137395 . 147310) (SK.BUTTONEVENT.OVERP 147312 . 147935) (SK.BUTTONEVENT.SAME.KEYS +147937 . 148664)) (148945 174760 (SK.SEL.AND.CHANGE 148955 . 149247) (SK.CHECK.WHENCHANGEDFN 149249 . +149955) (SK.CHECK.PRECHANGEFN 149957 . 150558) (SK.CHANGE.ELT 150560 . 150752) (SK.CHANGE.THING 150754 + . 152005) (SKETCH.CHANGE.ELEMENTS 152007 . 153190) (SK.APPLY.SINGLE.CHANGEFN 153192 . 153765) ( +SK.DO.CHANGESPECS 153767 . 155426) (SK.VIEWER.FROM.SKETCH.ARG 155428 . 155870) (SK.DO.CHANGESPEC1 +155872 . 157747) (SK.CHANGEFN 157749 . 158329) (SK.READCHANGEFN 158331 . 158790) (SK.DEFAULT.CHANGEFN +158792 . 161264) (CHANGEABLEFIELDITEMS 161266 . 161913) (SK.APPLY.CHANGE.COMMAND 161915 . 162532) ( +SK.DO.AND.RECORD.CHANGES 162534 . 163931) (SK.APPLY.CHANGE.COMMAND1 163933 . 165421) ( +SK.ELEMENTS.CHANGEFN 165423 . 167747) (READ.POINT.TO.ADD 167749 . 168693) (GLOBAL.KNOT.FROM.LOCAL +168695 . 169155) (SK.ADD.KNOT.TO.ELEMENT 169157 . 170101) (SK.GROUP.CHANGEFN 170103 . 171315) ( +SK.GROUP.CHANGEFN1 171317 . 174758)) (174927 188660 (ADD.ELEMENT.TO.SKETCH 174937 . 176643) ( +ADD.SKETCH.VIEWER 176645 . 177313) (REMOVE.SKETCH.VIEWER 177315 . 177928) (ALL.SKETCH.VIEWERS 177930 + . 178170) (SKETCH.ALL.VIEWERS 178172 . 178432) (VIEWER.BUCKET 178434 . 178585) (ELT.INSIDE.REGION? +178587 . 178914) (ELT.INSIDE.SKWP 178916 . 179207) (SCALE.FROM.SKW 179209 . 179459) ( +SK.ADDELT.TO.WINDOW 179461 . 180321) (SK.CALC.REGION.VIEWED 180323 . 180701) (SK.DRAWFIGURE 180703 . +181992) (SK.DRAWFIGURE1 181994 . 182378) (SK.LOCAL.FROM.GLOBAL 182380 . 183615) (SKETCH.REGION.VIEWED +183617 . 186304) (SKETCH.VIEW.FROM.NAME 186306 . 186736) (SK.UPDATE.REGION.VIEWED 186738 . 187130) ( +SKETCH.ADD.AND.DISPLAY 187132 . 187540) (SKETCH.ADD.AND.DISPLAY1 187542 . 187980) (SK.ADD.ITEM 187982 + . 188314) (SKETCHW.ADD.INSTANCE 188316 . 188658)) (188701 201889 (SK.SEL.AND.DELETE 188711 . 189099) +(SK.ERASE.AND.DELETE.ITEM 189101 . 189520) (REMOVE.ELEMENT.FROM.SKETCH 189522 . 190633) ( +SK.DELETE.ELEMENT 190635 . 191193) (SK.DELETE.ELEMENT2 191195 . 191856) (SK.DELETE.KNOT 191858 . +192149) (SK.SEL.AND.DELETE.KNOT 192151 . 193276) (SK.DELETE.ELEMENT.KNOT 193278 . 196485) ( +SK.CHECK.WHENDELETEDFN 196487 . 197267) (SK.CHECK.PREEDITFN 197269 . 197753) ( +SK.CHECK.END.INITIAL.EDIT 197755 . 198289) (SK.CHECK.WHENPOINTDELETEDFN 198291 . 199087) (SK.ERASE.ELT + 199089 . 199425) (SK.DELETE.ELT 199427 . 199802) (SK.DELETE.ITEM 199804 . 200212) (DELFROMTCONC +200214 . 201887)) (201928 215762 (SK.COPY.ELT 201938 . 202308) (SK.SEL.AND.COPY 202310 . 202693) ( +SK.COPY.ELEMENTS 202695 . 208323) (SK.ADD.COPY.OF.ELEMENTS 208325 . 210092) ( +SK.GLOBAL.FROM.LOCAL.ELEMENTS 210094 . 210334) (SK.COPY.ITEM 210336 . 211133) (SK.INSERT.SKETCH 211135 + . 215760)) (215802 245823 (SK.MOVE.ELT 215812 . 216087) (SK.MOVE.ELT.OR.PT 216089 . 216402) ( +SK.APPLY.DEFAULT.MOVE 216404 . 216838) (SK.SEL.AND.MOVE 216840 . 217387) (SK.MOVE.ELEMENTS 217389 . +228261) (SKETCH.MOVE.ELEMENTS 228263 . 230194) (SKETCH.COPY.ELEMENTS 230196 . 232243) ( +\SKETCH.COPY.ELEMENT 232245 . 232970) (SK.TRANSLATE.ELEMENT 232972 . 233455) (SK.COPY.GLOBAL.ELEMENT +233457 . 233668) (SK.MAKE.ELEMENT.MOVE.ARG 233670 . 234290) (SK.MAKE.ELEMENTS.MOVE.ARG 234292 . 234814 +) (SK.MAKE.POINTS.AND.ELEMENTS.MOVE.ARG 234816 . 235885) (SK.SHOW.FIG.FROM.INFO 235887 . 236255) ( +SK.MOVE.THING 236257 . 237163) (UPDATE.ELEMENT.IN.SKETCH 237165 . 239220) (SK.UPDATE.ELEMENT 239222 . +240781) (SK.UPDATE.ELEMENTS 240783 . 241502) (SK.UPDATE.ELEMENT1 241504 . 245404) ( +SK.MOVE.ELEMENT.POINT 245406 . 245821)) (245886 268175 (SK.MOVE.POINTS 245896 . 246183) ( +SK.SEL.AND.MOVE.POINTS 246185 . 246490) (SK.DO.MOVE.ELEMENT.POINTS 246492 . 255149) ( +SK.MOVE.ITEM.POINTS 255151 . 256822) (SK.TRANSLATEPTSFN 256824 . 257208) (SK.TRANSLATE.POINTS 257210 + . 258111) (SK.SELECT.MULTIPLE.POINTS 258113 . 263753) (SK.CONTROL.POINTS.IN.REGION 263755 . 265176) ( +SK.ADD.PT.SELECTION 265178 . 265642) (SK.REMOVE.PT.SELECTION 265644 . 266261) (SK.ADD.POINT 266263 . +266886) (SK.ELTS.CONTAINING.PTS 266888 . 267513) (SK.HOTSPOTS.NOT.ON.LIST 267515 . 268173)) (268333 +271129 (SK.SET.MOVE.MODE 268343 . 269014) (SK.SET.MOVE.MODE.POINTS 269016 . 269355) ( +SK.SET.MOVE.MODE.ELEMENTS 269357 . 269701) (SK.SET.MOVE.MODE.COMBINED 269703 . 270053) (READMOVEMODE +270055 . 271127)) (271130 289885 (SK.ALIGN.POINTS 271140 . 271430) (SK.SEL.AND.ALIGN.POINTS 271432 . +271741) (SK.ALIGN.POINTS.LEFT 271743 . 272046) (SK.ALIGN.POINTS.RIGHT 272048 . 272353) ( +SK.ALIGN.POINTS.TOP 272355 . 272656) (SK.ALIGN.POINTS.BOTTOM 272658 . 272965) ( +SK.EVEN.SPACE.POINTS.IN.X 272967 . 273287) (SK.EVEN.SPACE.POINTS.IN.Y 273289 . 273609) ( +SK.DO.ALIGN.POINTS 273611 . 284233) (SK.NTH.CONTROL.POINT 284235 . 284696) ( +SK.GET.SELECTED.ELEMENT.STRUCTURE 284698 . 285364) (SK.CORRESPONDING.CONTROL.PT 285366 . 285920) ( +SK.CONTROL.POINT.NUMBER 285922 . 286292) (SK.DO.ALIGN.SETVALUE 286294 . 289883)) (289949 303381 ( +SKETCH.CREATE.GROUP 289959 . 290448) (SK.CREATE.GROUP1 290450 . 290997) (SK.UPDATE.GROUP.AFTER.CHANGE +290999 . 291788) (SK.GROUP.ELTS 291790 . 292071) (SK.SEL.AND.GROUP 292073 . 292459) (SK.GROUP.ELEMENTS + 292461 . 294110) (SK.UNGROUP.ELT 294112 . 294396) (SK.SEL.AND.UNGROUP 294398 . 296067) ( +SK.UNGROUP.ELEMENT 296069 . 297005) (SK.GLOBAL.REGION.OF.LOCAL.ELEMENTS 297007 . 297929) ( +SK.LOCAL.REGION.OF.LOCAL.ELEMENTS 297931 . 298942) (SK.GLOBAL.REGION.OF.GLOBAL.ELEMENTS 298944 . +300284) (SK.UNIONREGIONS 300286 . 302652) (SKETCH.REGION.OF.SKETCH 302654 . 303070) (SK.FLASHREGION +303072 . 303379)) (303382 316853 (INIT.GROUP.ELEMENT 303392 . 304264) (GROUP.DRAWFN 304266 . 304716) ( +GROUP.EXPANDFN 304718 . 306281) (GROUP.INSIDEFN 306283 . 306692) (GROUP.REGIONFN 306694 . 307089) ( +GROUP.GLOBALREGIONFN 307091 . 307409) (GROUP.TRANSLATEFN 307411 . 309443) (GROUP.TRANSFORMFN 309445 . +312925) (GROUP.READCHANGEFN 312927 . 316851)) (316854 317862 (REGION.CENTER 316864 . 317465) ( +REMOVE.LAST 317467 . 317860)) (317915 323022 (SK.MOVE.GROUP.CONTROL.PT 317925 . 318216) ( +SK.SEL.AND.MOVE.CONTROL.PT 318218 . 319622) (SK.MOVE.GROUP.ELEMENT.CONTROL.POINT 319624 . 321697) ( +SK.READ.NEW.GROUP.CONTROL.PT 321699 . 323020)) (323281 327905 (SK.DO.GROUP 323291 . 324743) ( +SK.CHECK.WHENGROUPEDFN 324745 . 325455) (SK.DO.UNGROUP 325457 . 326662) (SK.CHECK.WHENUNGROUPEDFN +326664 . 327251) (SK.GROUP.UNDO 327253 . 327576) (SK.UNGROUP.UNDO 327578 . 327903)) (328146 333068 ( +SK.FREEZE.ELTS 328156 . 328440) (SK.SEL.AND.FREEZE 328442 . 328832) (SK.FREEZE.ELEMENTS 328834 . +329385) (SK.UNFREEZE.ELT 329387 . 329676) (SK.SEL.AND.UNFREEZE 329678 . 331214) (SK.UNFREEZE.ELEMENTS +331216 . 331775) (SK.FREEZE.UNDO 331777 . 332022) (SK.UNFREEZE.UNDO 332024 . 332271) (SK.DO.FREEZE +332273 . 332666) (SK.DO.UNFREEZE 332668 . 333066)) (333298 343108 (SKETCH.ELEMENTS.OF.SKETCH 333308 . +334143) (SKETCH.LIST.OF.ELEMENTS 334145 . 334863) (SKETCH.ADD.ELEMENT 334865 . 335940) ( +SKETCH.DELETE.ELEMENT 335942 . 337674) (DELFROMGROUPELT 337676 . 338476) (SKETCH.ELEMENT.TYPE 338478 + . 338827) (SKETCH.ELEMENT.CHANGED 338829 . 340397) (SK.ELEMENT.CHANGED1 340399 . 341050) ( +SK.UPDATE.GLOBAL.IMAGE.OBJECT.ELEMENT 341052 . 343106)) (343162 347774 (INSURE.SKETCH 343172 . 345787) + (LOCALSPECS.FROM.VIEWER 345789 . 346149) (SK.LOCAL.ELT.FROM.GLOBALPART 346151 . 346619) ( +SKETCH.FROM.VIEWER 346621 . 346855) (INSPECT.SKETCH 346857 . 347182) (ELT.INSIDE.SKETCHWP 347184 . +347457) (SK.INSIDE.REGION 347459 . 347772)) (347775 352105 (MAPSKETCHSPECS 347785 . 348406) ( +MAPCOLLECTSKETCHSPECS 348408 . 349157) (MAPSKETCHSPECSUNTIL 349159 . 349967) (MAPGLOBALSKETCHSPECS +349969 . 350670) (MAPGLOBALSKETCHELEMENTS 350672 . 352103)) (352167 378059 (SK.ADD.SELECTION 352177 . +352917) (SK.COPY.INSERTFN 352919 . 356550) (SCREENELEMENTP 356552 . 357025) (SK.ITEM.REGION 357027 . +357514) (SK.ELEMENT.GLOBAL.REGION 357516 . 358044) (SK.LOCAL.ITEMS.IN.REGION 358046 . 360025) ( +SK.REGIONFN 360027 . 360349) (SK.GLOBAL.REGIONFN 360351 . 360709) (SK.REMOVE.SELECTION 360711 . 361439 +) (SK.SELECT.MULTIPLE.ITEMS 361441 . 371883) (SKETCH.GET.ELEMENTS 371885 . 373308) (SK.PUT.MARKS.UP +373310 . 373649) (SK.TAKE.MARKS.DOWN 373651 . 373990) (SK.TRANSLATE.GLOBALPART 373992 . 376119) ( +SK.TRANSLATE.ITEM 376121 . 377048) (SK.TRANSLATEFN 377050 . 377246) (TRANSLATE.SKETCH 377248 . 378057) +) (378325 381232 (SK.INPUT.SCALE 378335 . 379182) (SK.UPDATE.SKETCHCONTEXT 379184 . 379781) ( +SK.SET.INPUT.SCALE 379783 . 380432) (SK.SET.INPUT.SCALE.CURRENT 380434 . 380725) ( +SK.SET.INPUT.SCALE.VALUE 380727 . 381230)) (381283 383195 (SK.SET.FEEDBACK.MODE 381293 . 382599) ( +SK.SET.FEEDBACK.POINT 382601 . 382769) (SK.SET.FEEDBACK.VERBOSE 382771 . 382940) ( +SK.SET.FEEDBACK.ALWAYS 382942 . 383193)) (383346 384623 (SKETCH.TITLE 383356 . 383619) ( +SK.SHRINK.ICONCREATE 383621 . 384621)) (390313 393127 (READBRUSHSHAPE 390323 . 390782) (READ.FUNCTION +390784 . 391299) (READBRUSHSIZE 391301 . 391759) (READANGLE 391761 . 392253) (READARCDIRECTION 392255 + . 393125)) (393128 403539 (SK.CHANGE.DASHING 393138 . 397086) (READ.AND.SAVE.NEW.DASHING 397088 . +398856) (READ.NEW.DASHING 398858 . 400598) (READ.DASHING.CHANGE 400600 . 402075) (SK.CACHE.DASHING +402077 . 403079) (SK.DASHING.LABEL 403081 . 403537)) (403540 407245 (READ.FILLING.CHANGE 403550 . +405531) (SK.CACHE.FILLING 405533 . 406251) (READ.AND.SAVE.NEW.FILLING 406253 . 406851) ( +SK.FILLING.LABEL 406853 . 407243)) (407629 443882 (SK.GETGLOBALPOSITION 407639 . 407944) ( +SKETCH.TRACK.ELEMENTS 407946 . 411466) (SK.PICKOUT.WHOLE.MOVE.ELEMENTS 411468 . 412027) ( +MAP.SKETCH.ELEMENTS.INTO.VIEWER 412029 . 412421) (MAP.GLOBAL.POSITION.INTO.VIEWER 412423 . 412803) ( +SKETCH.TO.VIEWER.POSITION 412805 . 413164) (SKETCH.TRACK.IMAGE 413166 . 414020) (SK.TRACK.IMAGE1 +414022 . 415434) (MAP.VIEWER.XY.INTO.GLOBAL 415436 . 416430) (SK.SET.POSITION 416432 . 416768) ( +MAP.VIEWER.PT.INTO.GLOBAL 416770 . 417876) (VIEWER.TO.SKETCH.POSITION 417878 . 418513) ( +SK.INSURE.SCALE 418515 . 418775) (SKETCH.TO.VIEWER.REGION 418777 . 419583) (VIEWER.TO.SKETCH.REGION +419585 . 419923) (SK.READ.POINT.WITH.FEEDBACK 419925 . 430928) (SKETCH.GET.POSITION 430930 . 432810) ( +\CLOBBER.POSITION 432812 . 433260) (NEAREST.HOT.SPOT 433262 . 434790) (GETWREGION 434792 . 435553) ( +GET.BITMAP.POSITION 435555 . 436339) (SK.TRACK.BITMAP1 436341 . 443880)) (444451 475337 ( +SK.BRING.UP.POSITION.PAD 444461 . 450321) (SK.PAD.READER.POSITION 450323 . 451972) ( +SK.POSITION.READER.REPAINTFN 451974 . 453758) (SK.POSITION.PAD.FROM.VIEWER 453760 . 455102) ( +SK.INIT.POSITION.NUMBER.PAD.MENU 455104 . 455454) (SK.READ.POSITION.PAD.HANDLER 455456 . 461188) ( +DISPLAY.POSITION.READER.TOTAL 461190 . 463488) (POSITION.PAD.READER.HANDLER 463490 . 471533) ( +POSITIONPAD.HELDFN 471535 . 473019) (\POSITION.PAD.ADD.DIGIT.MENU 473021 . 474600) ( +\POSITION.READER.NUMBERPAD 474602 . 475335)) (476963 479641 (SK.DRAWFN 476973 . 477339) ( +SK.TRANSFORMFN 477341 . 477722) (SK.EXPANDFN 477724 . 478001) (SK.INPUT 478003 . 478384) (SK.INSIDEFN +478386 . 479026) (SK.UPDATEFN 479028 . 479639)) (485309 489254 (SK.CHECK.SKETCH.VERSION 485319 . +486559) (SK.INSURE.RECORD.LENGTH 486561 . 488044) (SK.INSURE.HAS.LENGTH 488046 . 488784) ( +SK.RECORD.LENGTH 488786 . 488960) (SK.SET.RECORD.LENGTHS 488962 . 489252)) (489999 490886 ( +SK.ADD.EDIT.COMMAND.TO.FILE.BROWSER 490009 . 490884))))) STOP diff --git a/library/SKETCHBMELT b/library/sketch/SKETCH-BMELT similarity index 96% rename from library/SKETCHBMELT rename to library/sketch/SKETCH-BMELT index c54be649..aa19d701 100644 --- a/library/SKETCHBMELT +++ b/library/sketch/SKETCH-BMELT @@ -1,18 +1,15 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") -(FILECREATED "24-Mar-92 14:07:17" |{PELE:MV:ENVOS}LIBRARY>SKETCHBMELT.;3| 47688 +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) - changes to%: (FNS BITMAPELT.DRAWFN) +(FILECREATED " 5-Dec-2023 00:11:01" {WMEDLEY}sketch>SKETCH-BMELT.;1 47396 - previous date%: "12-Jun-90 14:45:06" |{PELE:MV:ENVOS}LIBRARY>SKETCHBMELT.;2|) + :EDIT-BY rmk + + :PREVIOUS-DATE "24-Mar-92 14:07:17" {WMEDLEY}sketch>SKETCHBMELT.;1) -(* ; " -Copyright (c) 1985, 1986, 1988, 1990, 1992 by Venue & Xerox Corporation. All rights reserved. -") +(PRETTYCOMPRINT SKETCH-BMELTCOMS) -(PRETTYCOMPRINT SKETCHBMELTCOMS) - -(RPAQQ SKETCHBMELTCOMS +(RPAQQ SKETCH-BMELTCOMS ((* BITMAP element done to allow zooming of bitmaps that is not possible with image object bitmaps.) (FNS SKETCH.CREATE.BITMAP INIT.BITMAP.ELEMENT BITMAPELT.CHANGEFN BITMAPELT.DRAWFN DSPVIEWPORT @@ -731,30 +728,28 @@ It can then be edited without effecting the original.")) (AND (fetch (BITMAP (TYPERECORD BITMAPELT (SKBITMAP SKBITMAPREGION SKBITMAPSCALE SKBITMAPCACHE)) (RECORD LOCALBITMAPELT ((LOCALBITMAPPOSITION) - LOCALHOTREGION LOCALBITMAP LOCALBITMAPREGION + LOCALHOTREGION LOCALBITMAP LOCALBITMAPREGION (* coordinates of entire region - covered by the bitmap in local - coordinates.) - LOCALSCALE SOURCEFORIMAGE (* pair of the scale and cached - image from which LOCALBITMAP was - generated.) - LOCALIMAGEREGION + covered by the bitmap in local + coordinates.) + LOCALSCALE SOURCEFORIMAGE (* pair of the scale and cached image + from which LOCALBITMAP was generated.) + LOCALIMAGEREGION (* region in local coordinates of the area covered by LOCALBITMAP. - This may be a subregion of LOCALBITMAPREGION) + This may be a subregion of LOCALBITMAPREGION) - )) + )) ) ) (FILESLOAD SCALEBITMAP) -(PUTPROPS SKETCHBMELT COPYRIGHT ("Venue & Xerox Corporation" 1985 1986 1988 1990 1992)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1205 46541 (SKETCH.CREATE.BITMAP 1215 . 2049) (INIT.BITMAP.ELEMENT 2051 . 3052) ( -BITMAPELT.CHANGEFN 3054 . 16483) (BITMAPELT.DRAWFN 16485 . 23256) (DSPVIEWPORT 23258 . 24304) ( -SK.COMPUTE.LOCAL.SCALED.BITMAP 24306 . 26938) (BITMAPELT.EXPANDFN 26940 . 30787) (BITMAPELT.INSIDEFN -30789 . 31391) (BITMAPELT.TRANSLATEFN 31393 . 32695) (BITMAPELT.REGIONFN 32697 . 33153) ( -BITMAPELT.GLOBALREGIONFN 33155 . 33534) (BITMAPELT.READCHANGEFN 33536 . 37579) (BITMAPELT.TRANSFORMFN -37581 . 39105) (SK.BITMAP.CREATE 39107 . 40848) (BITMAP.SET.SCALES 40850 . 42359) (BITMAPELT.INPUTFN -42361 . 43333) (BITMAPELT.CHOOSE.BITMAP 43335 . 46539))))) + (FILEMAP (NIL (1069 46405 (SKETCH.CREATE.BITMAP 1079 . 1913) (INIT.BITMAP.ELEMENT 1915 . 2916) ( +BITMAPELT.CHANGEFN 2918 . 16347) (BITMAPELT.DRAWFN 16349 . 23120) (DSPVIEWPORT 23122 . 24168) ( +SK.COMPUTE.LOCAL.SCALED.BITMAP 24170 . 26802) (BITMAPELT.EXPANDFN 26804 . 30651) (BITMAPELT.INSIDEFN +30653 . 31255) (BITMAPELT.TRANSLATEFN 31257 . 32559) (BITMAPELT.REGIONFN 32561 . 33017) ( +BITMAPELT.GLOBALREGIONFN 33019 . 33398) (BITMAPELT.READCHANGEFN 33400 . 37443) (BITMAPELT.TRANSFORMFN +37445 . 38969) (SK.BITMAP.CREATE 38971 . 40712) (BITMAP.SET.SCALES 40714 . 42223) (BITMAPELT.INPUTFN +42225 . 43197) (BITMAPELT.CHOOSE.BITMAP 43199 . 46403))))) STOP diff --git a/library/sketch/SKETCH-BMELT.LCOM b/library/sketch/SKETCH-BMELT.LCOM new file mode 100644 index 0000000000000000000000000000000000000000..91c4b041e3f8ea19479282d516bfd72262879038 GIT binary patch literal 8571 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 Ji4n;n{|`p$AoTzM literal 0 HcmV?d00001 diff --git a/library/SKETCHEDIT b/library/sketch/SKETCH-EDIT similarity index 97% rename from library/SKETCHEDIT rename to library/sketch/SKETCH-EDIT index b01e27f9..fe712eea 100644 --- a/library/SKETCHEDIT +++ b/library/sketch/SKETCH-EDIT @@ -1,18 +1,17 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "21-Aug-2021 20:50:04" {DSK}larry>medley>library>SKETCHEDIT.;2 108762 - changes to%: (FNS SHOW.FEEDBACK.BOX) +(FILECREATED " 5-Dec-2023 00:12:04" {WMEDLEY}sketch>SKETCH-EDIT.;1 108598 - previous date%: "14-Mar-2021 20:37:50" {DSK}larry>medley>library>SKETCHEDIT.;1) + :EDIT-BY rmk + + :CHANGES-TO (RECORDS TEXTELTSELECTION) + + :PREVIOUS-DATE "21-Aug-2021 20:50:04" {WMEDLEY}sketch>SKETCHEDIT.;1) -(* ; " -Copyright (c) 1983-1987, 1990, 2021 by Venue & Xerox Corporation. -") +(PRETTYCOMPRINT SKETCH-EDITCOMS) -(PRETTYCOMPRINT SKETCHEDITCOMS) - -(RPAQQ SKETCHEDITCOMS +(RPAQQ SKETCH-EDITCOMS ((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 @@ -1953,28 +1952,27 @@ Copyright (c) 1983-1987, 1990, 2021 by Venue & Xerox Corporation. XCOORD _ (LASTMOUSEX WIN) YCOORD _ (LASTMOUSEY WIN]) ) -(PUTPROPS SKETCHEDIT COPYRIGHT ("Venue & Xerox Corporation" 1983 1984 1985 1986 1987 1990 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (2492 39600 (BUTLAST 2502 . 2850) (CHAR.BEGIN 2852 . 4777) (CLOSEST.CHAR 4779 . 9002) ( -CLOSEST.LINE 9004 . 9566) (FLASHW 9568 . 9725) (HILITE.LINE 9727 . 10546) (HILITE.TEXT 10548 . 12196) -(IN.TEXT.EXTEND 12198 . 15471) (INIMAGEOBJ 15473 . 15978) (INTEXT 15980 . 16477) (NEW.TEXT.EXTEND -16479 . 18698) (NEW.TEXT.SELECTIONP 18700 . 18880) (NTHCHARWIDTH 18882 . 19139) (NTHLOCALREGION 19141 - . 19379) (ONCHAR 19381 . 19776) (SHOW.EXTENDED.SELECTION.FEEDBACK 19778 . 20713) (SHOW.FEEDBACK 20715 - . 21205) (SHOW.FEEDBACK.BOX 21207 . 22261) (SELECTION.POSITION 22263 . 23055) (SKED.CLEAR.SELECTION -23057 . 23580) (SKETCH.CLEANUP 23582 . 25496) (SK.ENTER.EDIT.CHANGE 25498 . 27043) ( -SKED.REMOVE.OTHER.SELECTIONS 27045 . 27472) (SKED.EXTEND.SELECTION 27474 . 28939) (SKED.MOVE.SELECTION - 28941 . 34102) (CREATE.TEXT.SELECTION 34104 . 34620) (SKED.SELECTION.FEEDBACK 34622 . 36278) ( -SKED.SET.EXTENDSELECTION 36280 . 36597) (SKED.SET.SELECTION 36599 . 36999) (LINE.BEGIN 37001 . 37555) -(SELECTION.GREATERP 37557 . 38352) (SK.WORD.BREAK.CLASS 38354 . 39194) (SK.GETSYNTAX 39196 . 39598)) ( -40442 86176 (WB.EDITOR 40452 . 41777) (SK.TTYENTRYFN 41779 . 42057) (SK.TTYEXITFN 42059 . 42328) ( -SKED.INSERT 42330 . 42758) (\SKED.INSERT 42760 . 63882) (FIRST.N.ELEMENTS 63884 . 64151) ( -SKED.CREATE.NEW.TEXTBOX 64153 . 70682) (SKED.CHARACTERPOSITION 70684 . 71471) (SKED.LINE.AND.CHAR# -71473 . 73104) (\SKED.DELETE.WORD.FROM.STRING 73106 . 74145) (\SKED.INSERT.CHARS.TO.STR 74147 . 82558) - (JOINCHARS 82560 . 82947) (STRINGFROMCHARACTERS 82949 . 83274) (GETALLCHARS 83276 . 83617) ( -CLEANUP.EDIT 83619 . 84071) (SKED.NEW.TEXTELT 84073 . 86174)) (86211 107219 ( -MAP.SCREEN.POSITION.ONTO.GRID 86221 . 87670) (NEAREST.ON.GRID 87672 . 88216) (SK.MIDDLE.TITLEFN 88218 - . 90161) (WB.BUTTON.HANDLER 90163 . 97985) (WB.ADD.NEW.POINT 97987 . 101316) (WB.DRAWLINE 101318 . -105552) (WB.RUBBERBAND.POSITION 105554 . 106471) (SK.RUBBERBAND.FEEDBACKFN 106473 . 106977) ( -RESET.LINE.BEING.INPUT 106979 . 107217)) (107401 108642 (NEAREST.EXISTING.POSITION 107411 . 107613) ( -WB.NEARPT 107615 . 108500) (LASTMOUSEPOSITION 108502 . 108640))))) + (FILEMAP (NIL (2425 39533 (BUTLAST 2435 . 2783) (CHAR.BEGIN 2785 . 4710) (CLOSEST.CHAR 4712 . 8935) ( +CLOSEST.LINE 8937 . 9499) (FLASHW 9501 . 9658) (HILITE.LINE 9660 . 10479) (HILITE.TEXT 10481 . 12129) +(IN.TEXT.EXTEND 12131 . 15404) (INIMAGEOBJ 15406 . 15911) (INTEXT 15913 . 16410) (NEW.TEXT.EXTEND +16412 . 18631) (NEW.TEXT.SELECTIONP 18633 . 18813) (NTHCHARWIDTH 18815 . 19072) (NTHLOCALREGION 19074 + . 19312) (ONCHAR 19314 . 19709) (SHOW.EXTENDED.SELECTION.FEEDBACK 19711 . 20646) (SHOW.FEEDBACK 20648 + . 21138) (SHOW.FEEDBACK.BOX 21140 . 22194) (SELECTION.POSITION 22196 . 22988) (SKED.CLEAR.SELECTION +22990 . 23513) (SKETCH.CLEANUP 23515 . 25429) (SK.ENTER.EDIT.CHANGE 25431 . 26976) ( +SKED.REMOVE.OTHER.SELECTIONS 26978 . 27405) (SKED.EXTEND.SELECTION 27407 . 28872) (SKED.MOVE.SELECTION + 28874 . 34035) (CREATE.TEXT.SELECTION 34037 . 34553) (SKED.SELECTION.FEEDBACK 34555 . 36211) ( +SKED.SET.EXTENDSELECTION 36213 . 36530) (SKED.SET.SELECTION 36532 . 36932) (LINE.BEGIN 36934 . 37488) +(SELECTION.GREATERP 37490 . 38285) (SK.WORD.BREAK.CLASS 38287 . 39127) (SK.GETSYNTAX 39129 . 39531)) ( +40375 86109 (WB.EDITOR 40385 . 41710) (SK.TTYENTRYFN 41712 . 41990) (SK.TTYEXITFN 41992 . 42261) ( +SKED.INSERT 42263 . 42691) (\SKED.INSERT 42693 . 63815) (FIRST.N.ELEMENTS 63817 . 64084) ( +SKED.CREATE.NEW.TEXTBOX 64086 . 70615) (SKED.CHARACTERPOSITION 70617 . 71404) (SKED.LINE.AND.CHAR# +71406 . 73037) (\SKED.DELETE.WORD.FROM.STRING 73039 . 74078) (\SKED.INSERT.CHARS.TO.STR 74080 . 82491) + (JOINCHARS 82493 . 82880) (STRINGFROMCHARACTERS 82882 . 83207) (GETALLCHARS 83209 . 83550) ( +CLEANUP.EDIT 83552 . 84004) (SKED.NEW.TEXTELT 84006 . 86107)) (86144 107152 ( +MAP.SCREEN.POSITION.ONTO.GRID 86154 . 87603) (NEAREST.ON.GRID 87605 . 88149) (SK.MIDDLE.TITLEFN 88151 + . 90094) (WB.BUTTON.HANDLER 90096 . 97918) (WB.ADD.NEW.POINT 97920 . 101249) (WB.DRAWLINE 101251 . +105485) (WB.RUBBERBAND.POSITION 105487 . 106404) (SK.RUBBERBAND.FEEDBACKFN 106406 . 106910) ( +RESET.LINE.BEING.INPUT 106912 . 107150)) (107334 108575 (NEAREST.EXISTING.POSITION 107344 . 107546) ( +WB.NEARPT 107548 . 108433) (LASTMOUSEPOSITION 108435 . 108573))))) STOP diff --git a/library/SKETCHEDIT.LCOM b/library/sketch/SKETCH-EDIT.LCOM similarity index 53% rename from library/SKETCHEDIT.LCOM rename to library/sketch/SKETCH-EDIT.LCOM index 52bf4a1168137e8b48804d0477da67cf709198f4..91cd662b55dcda48a3aec8489a93ead8e56b91c8 100644 GIT binary patch delta 6165 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.;2 554099 +(FILECREATED " 5-Dec-2023 00:16:52" {WMEDLEY}sketch>SKETCH-ELEMENTS.;1 554138 - :CHANGES-TO (FNS CREATE.SKETCH.ELEMENT.TYPE) + :EDIT-BY rmk - :PREVIOUS-DATE "21-Aug-2021 20:49:42" {DSK}larry>medley>library>SKETCHELEMENTS.;1) + :CHANGES-TO (RECORDS LOCALCIRCLE CIRCLE LOCALELLIPSE ELLIPSE KNOTELT LOCALCURVE OPENCURVE + CLOSEDCURVE LOCALCLOSEDCURVE LOCALCLOSEDWIRE LOCALWIRE WIRE CLOSEDWIRE TEXT + LOCALTEXT LOCALTEXTBOX TEXTBOX BOX LOCALBOX ARC LOCALARC) + + :PREVIOUS-DATE " 4-Aug-2022 09:57:43" {WMEDLEY}sketch>SKETCHELEMENTS.;2) -(* ; " -Copyright (c) 1985-1987, 1990-1993, 2000, 2021 by Venue & Xerox Corporation. -") +(PRETTYCOMPRINT SKETCH-ELEMENTSCOMS) -(PRETTYCOMPRINT SKETCHELEMENTSCOMS) - -(RPAQQ SKETCHELEMENTSCOMS +(RPAQQ SKETCH-ELEMENTSCOMS ( (* ;  "contains the functions need to implement the sketch basic element types") (FNS INIT.SKETCH.ELEMENTS CREATE.SKETCH.ELEMENT.TYPE SKETCH.ELEMENT.TYPEP @@ -9279,140 +9279,138 @@ No more font sizes found."))) (CREATEPOSITION (fetch (REGION RIGHT) of REGION) (fetch (REGION TOP) of REGION]) ) -(PUTPROPS SKETCHELEMENTS COPYRIGHT ("Venue & Xerox Corporation" 1985 1986 1987 1990 1991 1992 1993 -2000 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (14359 24769 (INIT.SKETCH.ELEMENTS 14369 . 21932) (CREATE.SKETCH.ELEMENT.TYPE 21934 . -23456) (SKETCH.ELEMENT.TYPEP 23458 . 23846) (SKETCH.ELEMENT.NAMEP 23848 . 24111) ( -\CURSOR.IN.MIDDLE.MENU 24113 . 24767)) (24810 25487 (SKETCHINCOLORP 24820 . 25140) (READ.COLOR.CHANGE -25142 . 25485)) (25996 28775 (SK.CREATE.DEFAULT.FILLING 26006 . 26307) (SKFILLINGP 26309 . 26942) ( -SK.INSURE.FILLING 26944 . 28372) (SK.INSURE.COLOR 28374 . 28773)) (28776 34386 (SK.TRANSLATE.MODE -28786 . 29568) (SK.CHANGE.FILLING.MODE 29570 . 33153) (READ.FILLING.MODE 33155 . 34384)) (34387 65061 -(SKETCH.CREATE.CIRCLE 34397 . 35209) (CIRCLE.EXPANDFN 35211 . 38583) (CIRCLE.DRAWFN 38585 . 41586) ( -\CIRCLE.DRAWFN1 41588 . 44183) (CIRCLE.INPUTFN 44185 . 46034) (SK.UPDATE.CIRCLE.AFTER.CHANGE 46036 . -46395) (SK.READ.CIRCLE.POINT 46397 . 46868) (SK.SHOW.CIRCLE 46870 . 47516) (CIRCLE.INSIDEFN 47518 . -47783) (CIRCLE.REGIONFN 47785 . 49466) (CIRCLE.GLOBALREGIONFN 49468 . 50986) (CIRCLE.TRANSLATE 50988 - . 52849) (CIRCLE.READCHANGEFN 52851 . 57467) (CIRCLE.TRANSFORMFN 57469 . 59322) (CIRCLE.TRANSLATEPTS -59324 . 60938) (SK.CIRCLE.CREATE 60940 . 61783) (SET.CIRCLE.SCALE 61785 . 62551) (SK.BRUSH.READCHANGE -62553 . 65059)) (65062 65791 (SK.INSURE.BRUSH 65072 . 65466) (SK.INSURE.DASHING 65468 . 65789)) (67005 - 96499 (SKETCH.CREATE.ELLIPSE 67015 . 67614) (ELLIPSE.EXPANDFN 67616 . 71228) (ELLIPSE.DRAWFN 71230 . -75407) (ELLIPSE.INPUTFN 75409 . 77849) (SK.READ.ELLIPSE.MAJOR.PT 77851 . 78430) ( -SK.SHOW.ELLIPSE.MAJOR.RADIUS 78432 . 79187) (SK.READ.ELLIPSE.MINOR.PT 79189 . 79882) ( -SK.SHOW.ELLIPSE.MINOR.RADIUS 79884 . 80716) (ELLIPSE.INSIDEFN 80718 . 80988) (ELLIPSE.CREATE 80990 . -82365) (SK.UPDATE.ELLIPSE.AFTER.CHANGE 82367 . 82735) (ELLIPSE.REGIONFN 82737 . 84937) ( -ELLIPSE.GLOBALREGIONFN 84939 . 86752) (ELLIPSE.TRANSLATEFN 86754 . 89300) (ELLIPSE.TRANSFORMFN 89302 - . 90579) (ELLIPSE.TRANSLATEPTS 90581 . 92622) (MARK.SPOT 92624 . 93875) (DISTANCEBETWEEN 93877 . -94472) (SK.DISTANCE.TO 94474 . 94859) (SQUARE 94861 . 94903) (COMPUTE.ELLIPSE.ORIENTATION 94905 . -95624) (SK.COMPUTE.ELLIPSE.MINOR.RADIUS.PT 95626 . 96497)) (97612 138668 (SKETCH.CREATE.OPEN.CURVE -97622 . 98175) (OPENCURVE.INPUTFN 98177 . 99045) (SK.CURVE.CREATE 99047 . 100792) (MAXXEXTENT 100794 - . 101653) (MAXYEXTENT 101655 . 102515) (KNOT.SET.SCALE.FIELD 102517 . 103319) (OPENCURVE.DRAWFN -103321 . 104452) (OPENCURVE.EXPANDFN 104454 . 107769) (OPENCURVE.READCHANGEFN 107771 . 110973) ( -OPENCURVE.TRANSFORMFN 110975 . 113473) (OPENCURVE.TRANSLATEFN 113475 . 113897) ( -OPENCURVE.TRANSLATEPTSFN 113899 . 115280) (SKETCH.CREATE.CLOSED.CURVE 115282 . 115788) ( -CLOSEDCURVE.DRAWFN 115790 . 116574) (CLOSEDCURVE.EXPANDFN 116576 . 119689) (CLOSEDCURVE.REGIONFN -119691 . 120488) (CLOSEDCURVE.GLOBALREGIONFN 120490 . 121923) (READ.LIST.OF.POINTS 121925 . 123904) ( -CLOSEDCURVE.INPUTFN 123906 . 124551) (CLOSEDCURVE.READCHANGEFN 124553 . 127448) ( -CLOSEDCURVE.TRANSFORMFN 127450 . 129250) (CLOSEDCURVE.TRANSLATEPTSFN 129252 . 130597) (INVISIBLEPARTP -130599 . 130952) (SHOWSKETCHPOINT 130954 . 131259) (SHOWSKETCHXY 131261 . 131779) (KNOTS.REGIONFN -131781 . 132682) (OPENWIRE.GLOBALREGIONFN 132684 . 133548) (CURVE.REGIONFN 133550 . 134491) ( -OPENCURVE.GLOBALREGIONFN 134493 . 135900) (KNOTS.TRANSLATEFN 135902 . 136945) (REGION.CONTAINING.PTS -136947 . 138666)) (138669 160945 (CHANGE.ELTS.BRUSH.SIZE 138679 . 139289) (CHANGE.ELTS.BRUSH 139291 . -139808) (CHANGE.ELTS.BRUSH.SHAPE 139810 . 140211) (SK.CHANGE.BRUSH.SHAPE 140213 . 143725) ( -SK.CHANGE.BRUSH.COLOR 143727 . 148173) (SK.CHANGE.BRUSH.SIZE 148175 . 153133) (SK.CHANGE.ANGLE 153135 - . 156115) (SK.CHANGE.ARC.DIRECTION 156117 . 158496) (SK.SET.DEFAULT.BRUSH.SIZE 158498 . 159197) ( -READSIZECHANGE 159199 . 160943)) (160946 162565 (SK.CHANGE.ELEMENT.KNOTS 160956 . 162563)) (162566 -163213 (SK.INSURE.POINT.LIST 162576 . 163029) (SK.INSURE.POSITION 163031 . 163211)) (164581 196904 ( -SKETCH.CREATE.WIRE 164591 . 165081) (CLOSEDWIRE.EXPANDFN 165083 . 167771) (KNOTS.INSIDEFN 167773 . -168494) (OPEN.WIRE.DRAWFN 168496 . 169088) (WIRE.EXPANDFN 169090 . 172337) ( -SK.UPDATE.WIRE.ELT.AFTER.CHANGE 172339 . 172860) (OPENWIRE.READCHANGEFN 172862 . 175355) ( -OPENWIRE.TRANSFORMFN 175357 . 177480) (OPENWIRE.TRANSLATEFN 177482 . 177906) (OPENWIRE.TRANSLATEPTSFN -177908 . 179187) (WIRE.INPUTFN 179189 . 180820) (SK.READ.WIRE.POINTS 180822 . 181353) ( -SK.READ.POINTS.WITH.FEEDBACK 181355 . 184122) (OPENWIRE.FEEDBACKFN 184124 . 184878) ( -CLOSEDWIRE.FEEDBACKFN 184880 . 186236) (CLOSEDWIRE.REGIONFN 186238 . 187223) ( -CLOSEDWIRE.GLOBALREGIONFN 187225 . 188277) (SK.WIRE.CREATE 188279 . 190042) (WIRE.ADD.POINT.TO.END -190044 . 190960) (READ.ARROW.CHANGE 190962 . 196438) (CHANGE.ELTS.ARROWHEADS 196440 . 196902)) (196905 - 207911 (SKETCH.CREATE.CLOSED.WIRE 196915 . 197476) (CLOSED.WIRE.INPUTFN 197478 . 197833) ( -CLOSED.WIRE.DRAWFN 197835 . 199880) (CLOSEDWIRE.READCHANGEFN 199882 . 204787) (CLOSEDWIRE.TRANSFORMFN -204789 . 206583) (CLOSEDWIRE.TRANSLATEPTSFN 206585 . 207909)) (207912 260618 (SK.EXPAND.ARROWHEADS -207922 . 208272) (SK.COMPUTE.ARC.ARROWHEAD.POINTS 208274 . 209655) (ARC.ARROWHEAD.POINTS 209657 . -210880) (SET.ARC.ARROWHEAD.POINTS 210882 . 211863) (SET.OPENCURVE.ARROWHEAD.POINTS 211865 . 212766) ( -SK.COMPUTE.CURVE.ARROWHEAD.POINTS 212768 . 214038) (SET.WIRE.ARROWHEAD.POINTS 214040 . 214793) ( -SK.COMPUTE.WIRE.ARROWHEAD.POINTS 214795 . 216060) (SK.EXPAND.ARROWHEAD 216062 . 217245) (CHANGED.ARROW - 217247 . 220419) (SK.CHANGE.ARROWHEAD 220421 . 220874) (SK.CHANGE.ARROWHEAD1 220876 . 226131) ( -SK.CREATE.ARROWHEAD 226133 . 226653) (SK.ARROWHEAD.CREATE 226655 . 228229) (SK.ARROWHEAD.END.TEST -228231 . 229155) (READ.ARROWHEAD.END 229157 . 231182) (ARROW.HEAD.POSITIONS 231184 . 233024) ( -ARROWHEAD.POINTS.LIST 233026 . 236998) (CURVE.ARROWHEAD.POINTS 237000 . 237863) (LEFT.MOST.IS.BEGINP -237865 . 238746) (WIRE.ARROWHEAD.POINTS 238748 . 240274) (DRAWARROWHEADS 240276 . 242646) ( -\SK.DRAW.TRIANGLE.ARROWHEAD 242648 . 244308) (\SK.ENDPT.OF.ARROW 244310 . 246567) ( -\SK.ADJUST.FOR.ARROWHEADS 246569 . 249074) (SK.SET.ARROWHEAD.LENGTH 249076 . 250220) ( -SK.SET.ARROWHEAD.ANGLE 250222 . 251318) (SK.SET.ARROWHEAD.TYPE 251320 . 254609) (SK.SET.LINE.ARROWHEAD - 254611 . 257024) (SK.UPDATE.ARROWHEAD.FORMAT 257026 . 259136) (SK.SET.LINE.LENGTH.MODE 259138 . -260616)) (260619 262420 (SK.INSURE.ARROWHEADS 260629 . 261811) (SK.ARROWHEADP 261813 . 262418)) ( -265217 327543 (SKETCH.CREATE.TEXT 265227 . 265741) (TEXT.CHANGEFN 265743 . 266135) (TEXT.READCHANGEFN -266137 . 274208) (\SK.READ.FONT.SIZE1 274210 . 276106) (SK.TEXT.ELT.WITH.SAME.FIELDS 276108 . 277748) -(SK.READFONTFAMILY 277750 . 279296) (CLOSE.PROMPT.WINDOW 279298 . 279722) (TEXT.DRAWFN 279724 . 280445 -) (TEXT.DRAWFN1 280447 . 283949) (TEXT.INSIDEFN 283951 . 284340) (TEXT.EXPANDFN 284342 . 286467) ( -SK.TEXT.LINE.REGIONS 286469 . 288343) (TEXT.UPDATE.GLOBAL.REGIONS 288345 . 289577) (REL.MOVE.REGION -289579 . 290116) (LTEXT.LINE.REGIONS 290118 . 293536) (TEXT.INPUTFN 293538 . 294048) (READ.TEXT 294050 - . 294798) (TEXT.POSITION.AND.CREATE 294800 . 297111) (CREATE.TEXT.ELEMENT 297113 . 297931) ( -SK.UPDATE.TEXT.AFTER.CHANGE 297933 . 298335) (SK.TEXT.FROM.TEXTBOX 298337 . 302143) ( -TEXT.SET.GLOBAL.REGIONS 302145 . 303438) (TEXT.REGIONFN 303440 . 304210) (TEXT.GLOBALREGIONFN 304212 - . 304900) (TEXT.TRANSLATEFN 304902 . 306217) (TEXT.TRANSFORMFN 306219 . 307342) (TEXT.TRANSLATEPTSFN -307344 . 307861) (TEXT.UPDATEFN 307863 . 312519) (SK.CHANGE.TEXT 312521 . 325609) (TEXT.SET.SCALES -325611 . 326579) (BREAK.AT.CARRIAGE.RETURNS 326581 . 327541)) (327544 346068 (ADD.KNOWN.SKETCH.FONT -327554 . 328545) (SK.PICK.FONT 328547 . 334079) (SK.CHOOSE.TEXT.FONT 334081 . 338029) (SK.NEXTSIZEFONT - 338031 . 339298) (SK.DECREASING.FONT.LIST 339300 . 341173) (SK.GUESS.FONTSAVAILABLE 341175 . 346066)) - (346487 360630 (SK.SET.FONT 346497 . 348064) (SK.SET.TEXT.FONT 348066 . 349068) (SK.SET.TEXT.SIZE -349070 . 349757) (SK.SET.TEXT.HORIZ.ALIGN 349759 . 351333) (SK.READFONTSIZE 351335 . 353565) ( -SK.COLLECT.FONT.SIZES 353567 . 356485) (SK.SET.TEXT.VERT.ALIGN 356487 . 358529) (SK.SET.TEXT.LOOKS -358531 . 359988) (SK.SET.DEFAULT.TEXT.FACE 359990 . 360628)) (360631 361217 (CREATE.SKETCH.TERMTABLE -360641 . 361215)) (361218 362984 (SK.FONT.LIST 361228 . 361554) (SK.INSURE.FONT 361556 . 362078) ( -SK.INSURE.STYLE 362080 . 362598) (SK.INSURE.TEXT 362600 . 362982)) (363554 420847 ( -SKETCH.CREATE.TEXTBOX 363564 . 365206) (SK.COMPUTE.TEXTBOX.REGION.FOR.STRING 365208 . 367285) ( -SK.BREAK.INTO.LINES 367287 . 378473) (SK.BRUSH.SIZE 378475 . 378856) (SK.TEXTBOX.CREATE 378858 . -379655) (SK.TEXTBOX.CREATE1 379657 . 380721) (SK.UPDATE.TEXTBOX.AFTER.CHANGE 380723 . 381263) ( -SK.TEXTBOX.POSITION.IN.BOX 381265 . 383176) (TEXTBOX.CHANGEFN 383178 . 383652) (TEXTBOX.DRAWFN 383654 - . 385690) (SK.TEXTURE.AROUND.REGIONS 385692 . 391765) (ALL.EMPTY.REGIONS 391767 . 392257) ( -TEXTBOX.EXPANDFN 392259 . 399415) (TEXTBOX.INPUTFN 399417 . 401030) (TEXTBOX.INSIDEFN 401032 . 401445) - (TEXTBOX.REGIONFN 401447 . 402301) (TEXTBOX.GLOBALREGIONFN 402303 . 402631) ( -TEXTBOX.SET.GLOBAL.REGIONS 402633 . 403964) (TEXTBOX.TRANSLATEFN 403966 . 405807) ( -TEXTBOX.TRANSLATEPTSFN 405809 . 408592) (TEXTBOX.TRANSFORMFN 408594 . 410262) (TEXTBOX.UPDATEFN 410264 - . 412157) (TEXTBOX.READCHANGEFN 412159 . 417048) (SK.TEXTBOX.TEXT.POSITION 417050 . 417471) ( -SK.TEXTBOX.FROM.TEXT 417473 . 420078) (ADD.EOLS 420080 . 420845)) (421376 424877 ( -SK.SET.TEXTBOX.VERT.ALIGN 421386 . 423266) (SK.SET.TEXTBOX.HORIZ.ALIGN 423268 . 424875)) (425260 -469735 (SKETCH.CREATE.BOX 425270 . 425753) (SK.BOX.DRAWFN 425755 . 426914) (BOX.DRAWFN1 426916 . -429755) (KNOTS.OF.REGION 429757 . 430991) (SK.DRAWAREABOX 430993 . 437594) (SK.DRAWBOX 437596 . 438785 -) (SK.BOX.EXPANDFN 438787 . 442535) (SK.BOX.GETREGIONFN 442537 . 443723) (BOX.SET.SCALES 443725 . -444965) (SK.BOX.INPUTFN 444967 . 446900) (SK.BOX.CREATE 446902 . 447603) (SK.UPDATE.BOX.AFTER.CHANGE -447605 . 448116) (SK.BOX.INSIDEFN 448118 . 448508) (SK.BOX.REGIONFN 448510 . 449223) ( -SK.BOX.GLOBALREGIONFN 449225 . 449963) (SK.BOX.READCHANGEFN 449965 . 453686) (SK.CHANGE.FILLING 453688 - . 457636) (SK.CHANGE.FILLING.COLOR 457638 . 461294) (SK.BOX.TRANSLATEFN 461296 . 462475) ( -SK.BOX.TRANSFORMFN 462477 . 463422) (SK.BOX.TRANSLATEPTSFN 463424 . 465792) (UNSCALE.REGION.TO.GRID -465794 . 466719) (INCREASEREGION 466721 . 467312) (INSUREREGIONSIZE 467314 . 468485) (EXPANDREGION -468487 . 469367) (REGION.FROM.COORDINATES 469369 . 469733)) (470271 496626 (SKETCH.CREATE.ARC 470281 - . 471090) (ARC.DRAWFN 471092 . 472819) (ARC.EXPANDFN 472821 . 475154) (ARC.INPUTFN 475156 . 479374) ( -SK.INVERT.CIRCLE 479376 . 480236) (SK.READ.ARC.ANGLE.POINT 480238 . 480745) (SK.SHOW.ARC 480747 . -481357) (ARC.CREATE 481359 . 482714) (SK.UPDATE.ARC.AFTER.CHANGE 482716 . 483056) (ARC.MOVEFN 483058 - . 484641) (ARC.TRANSLATEPTS 484643 . 486528) (ARC.INSIDEFN 486530 . 486780) (ARC.REGIONFN 486782 . -487918) (ARC.GLOBALREGIONFN 487920 . 489642) (ARC.TRANSLATE 489644 . 490626) (ARC.TRANSFORMFN 490628 - . 493578) (ARC.READCHANGEFN 493580 . 496624)) (496627 505706 (SK.COMPUTE.ARC.ANGLE.PT 496637 . 497563 -) (SK.COMPUTE.ARC.ANGLE.PT.FROM.ANGLE 497565 . 498558) (SK.COMPUTE.ARC.PTS 498560 . 502132) ( -SK.SET.ARC.DIRECTION 502134 . 502708) (SK.SET.ARC.DIRECTION.CW 502710 . 502884) ( -SK.SET.ARC.DIRECTION.CCW 502886 . 503159) (SK.COMPUTE.SLOPE.OF.LINE 503161 . 503653) ( -SK.CREATE.ARC.USING 503655 . 504892) (SET.ARC.SCALES 504894 . 505704)) (505707 506152 ( -SK.INSURE.DIRECTION 505717 . 506150)) (507523 553382 (GETSKETCHELEMENTPROP 507533 . 508841) ( -\SK.GET.ARC.ANGLEPT 508843 . 509404) (\GETSKETCHELEMENTPROP1 509406 . 509660) (\SK.GET.BRUSH 509662 . -510586) (\SK.GET.FILLING 510588 . 511686) (\SK.GET.ARROWHEADS 511688 . 512467) (\SK.GET.FONT 512469 . -512949) (\SK.GET.JUSTIFICATION 512951 . 513475) (\SK.GET.DIRECTION 513477 . 513954) (\SK.GET.DASHING -513956 . 514975) (PUTSKETCHELEMENTPROP 514977 . 517246) (\SK.PUT.FILLING 517248 . 518518) ( -ADDSKETCHELEMENTPROP 518520 . 519325) (REMOVESKETCHELEMENTPROP 519327 . 520116) (\SK.PUT.FONT 520118 - . 520932) (\SK.PUT.JUSTIFICATION 520934 . 521945) (\SK.PUT.DIRECTION 521947 . 522554) ( -\SK.PUT.DASHING 522556 . 523891) (\SK.PUT.BRUSH 523893 . 525812) (\SK.PUT.ARROWHEADS 525814 . 527780) -(SK.COPY.ELEMENT.PROPERTY.LIST 527782 . 528358) (SKETCH.UPDATE 528360 . 529090) (SKETCH.UPDATE1 529092 - . 530380) (\SKELT.GET.SCALE 530382 . 531370) (\SKELT.PUT.SCALE 531372 . 532679) (\SKELT.PUT.DATA -532681 . 534478) (SK.REPLACE.TEXT.IN.ELEMENT 534480 . 535433) (\SKELT.GET.DATA 535435 . 536502) ( -\SK.GET.1STCONTROLPT 536504 . 538016) (\SK.PUT.1STCONTROLPT 538018 . 543491) (\SK.GET.2NDCONTROLPT -543493 . 544408) (\SK.PUT.2NDCONTROLPT 544410 . 548598) (\SK.GET.3RDCONTROLPT 548600 . 549478) ( -\SK.PUT.3RDCONTROLPT 549480 . 553380)) (553383 553964 (LOWERLEFTCORNER 553393 . 553639) ( -UPPERRIGHTCORNER 553641 . 553962))))) + (FILEMAP (NIL (14510 24920 (INIT.SKETCH.ELEMENTS 14520 . 22083) (CREATE.SKETCH.ELEMENT.TYPE 22085 . +23607) (SKETCH.ELEMENT.TYPEP 23609 . 23997) (SKETCH.ELEMENT.NAMEP 23999 . 24262) ( +\CURSOR.IN.MIDDLE.MENU 24264 . 24918)) (24961 25638 (SKETCHINCOLORP 24971 . 25291) (READ.COLOR.CHANGE +25293 . 25636)) (26147 28926 (SK.CREATE.DEFAULT.FILLING 26157 . 26458) (SKFILLINGP 26460 . 27093) ( +SK.INSURE.FILLING 27095 . 28523) (SK.INSURE.COLOR 28525 . 28924)) (28927 34537 (SK.TRANSLATE.MODE +28937 . 29719) (SK.CHANGE.FILLING.MODE 29721 . 33304) (READ.FILLING.MODE 33306 . 34535)) (34538 65212 +(SKETCH.CREATE.CIRCLE 34548 . 35360) (CIRCLE.EXPANDFN 35362 . 38734) (CIRCLE.DRAWFN 38736 . 41737) ( +\CIRCLE.DRAWFN1 41739 . 44334) (CIRCLE.INPUTFN 44336 . 46185) (SK.UPDATE.CIRCLE.AFTER.CHANGE 46187 . +46546) (SK.READ.CIRCLE.POINT 46548 . 47019) (SK.SHOW.CIRCLE 47021 . 47667) (CIRCLE.INSIDEFN 47669 . +47934) (CIRCLE.REGIONFN 47936 . 49617) (CIRCLE.GLOBALREGIONFN 49619 . 51137) (CIRCLE.TRANSLATE 51139 + . 53000) (CIRCLE.READCHANGEFN 53002 . 57618) (CIRCLE.TRANSFORMFN 57620 . 59473) (CIRCLE.TRANSLATEPTS +59475 . 61089) (SK.CIRCLE.CREATE 61091 . 61934) (SET.CIRCLE.SCALE 61936 . 62702) (SK.BRUSH.READCHANGE +62704 . 65210)) (65213 65942 (SK.INSURE.BRUSH 65223 . 65617) (SK.INSURE.DASHING 65619 . 65940)) (67156 + 96650 (SKETCH.CREATE.ELLIPSE 67166 . 67765) (ELLIPSE.EXPANDFN 67767 . 71379) (ELLIPSE.DRAWFN 71381 . +75558) (ELLIPSE.INPUTFN 75560 . 78000) (SK.READ.ELLIPSE.MAJOR.PT 78002 . 78581) ( +SK.SHOW.ELLIPSE.MAJOR.RADIUS 78583 . 79338) (SK.READ.ELLIPSE.MINOR.PT 79340 . 80033) ( +SK.SHOW.ELLIPSE.MINOR.RADIUS 80035 . 80867) (ELLIPSE.INSIDEFN 80869 . 81139) (ELLIPSE.CREATE 81141 . +82516) (SK.UPDATE.ELLIPSE.AFTER.CHANGE 82518 . 82886) (ELLIPSE.REGIONFN 82888 . 85088) ( +ELLIPSE.GLOBALREGIONFN 85090 . 86903) (ELLIPSE.TRANSLATEFN 86905 . 89451) (ELLIPSE.TRANSFORMFN 89453 + . 90730) (ELLIPSE.TRANSLATEPTS 90732 . 92773) (MARK.SPOT 92775 . 94026) (DISTANCEBETWEEN 94028 . +94623) (SK.DISTANCE.TO 94625 . 95010) (SQUARE 95012 . 95054) (COMPUTE.ELLIPSE.ORIENTATION 95056 . +95775) (SK.COMPUTE.ELLIPSE.MINOR.RADIUS.PT 95777 . 96648)) (97763 138819 (SKETCH.CREATE.OPEN.CURVE +97773 . 98326) (OPENCURVE.INPUTFN 98328 . 99196) (SK.CURVE.CREATE 99198 . 100943) (MAXXEXTENT 100945 + . 101804) (MAXYEXTENT 101806 . 102666) (KNOT.SET.SCALE.FIELD 102668 . 103470) (OPENCURVE.DRAWFN +103472 . 104603) (OPENCURVE.EXPANDFN 104605 . 107920) (OPENCURVE.READCHANGEFN 107922 . 111124) ( +OPENCURVE.TRANSFORMFN 111126 . 113624) (OPENCURVE.TRANSLATEFN 113626 . 114048) ( +OPENCURVE.TRANSLATEPTSFN 114050 . 115431) (SKETCH.CREATE.CLOSED.CURVE 115433 . 115939) ( +CLOSEDCURVE.DRAWFN 115941 . 116725) (CLOSEDCURVE.EXPANDFN 116727 . 119840) (CLOSEDCURVE.REGIONFN +119842 . 120639) (CLOSEDCURVE.GLOBALREGIONFN 120641 . 122074) (READ.LIST.OF.POINTS 122076 . 124055) ( +CLOSEDCURVE.INPUTFN 124057 . 124702) (CLOSEDCURVE.READCHANGEFN 124704 . 127599) ( +CLOSEDCURVE.TRANSFORMFN 127601 . 129401) (CLOSEDCURVE.TRANSLATEPTSFN 129403 . 130748) (INVISIBLEPARTP +130750 . 131103) (SHOWSKETCHPOINT 131105 . 131410) (SHOWSKETCHXY 131412 . 131930) (KNOTS.REGIONFN +131932 . 132833) (OPENWIRE.GLOBALREGIONFN 132835 . 133699) (CURVE.REGIONFN 133701 . 134642) ( +OPENCURVE.GLOBALREGIONFN 134644 . 136051) (KNOTS.TRANSLATEFN 136053 . 137096) (REGION.CONTAINING.PTS +137098 . 138817)) (138820 161096 (CHANGE.ELTS.BRUSH.SIZE 138830 . 139440) (CHANGE.ELTS.BRUSH 139442 . +139959) (CHANGE.ELTS.BRUSH.SHAPE 139961 . 140362) (SK.CHANGE.BRUSH.SHAPE 140364 . 143876) ( +SK.CHANGE.BRUSH.COLOR 143878 . 148324) (SK.CHANGE.BRUSH.SIZE 148326 . 153284) (SK.CHANGE.ANGLE 153286 + . 156266) (SK.CHANGE.ARC.DIRECTION 156268 . 158647) (SK.SET.DEFAULT.BRUSH.SIZE 158649 . 159348) ( +READSIZECHANGE 159350 . 161094)) (161097 162716 (SK.CHANGE.ELEMENT.KNOTS 161107 . 162714)) (162717 +163364 (SK.INSURE.POINT.LIST 162727 . 163180) (SK.INSURE.POSITION 163182 . 163362)) (164732 197055 ( +SKETCH.CREATE.WIRE 164742 . 165232) (CLOSEDWIRE.EXPANDFN 165234 . 167922) (KNOTS.INSIDEFN 167924 . +168645) (OPEN.WIRE.DRAWFN 168647 . 169239) (WIRE.EXPANDFN 169241 . 172488) ( +SK.UPDATE.WIRE.ELT.AFTER.CHANGE 172490 . 173011) (OPENWIRE.READCHANGEFN 173013 . 175506) ( +OPENWIRE.TRANSFORMFN 175508 . 177631) (OPENWIRE.TRANSLATEFN 177633 . 178057) (OPENWIRE.TRANSLATEPTSFN +178059 . 179338) (WIRE.INPUTFN 179340 . 180971) (SK.READ.WIRE.POINTS 180973 . 181504) ( +SK.READ.POINTS.WITH.FEEDBACK 181506 . 184273) (OPENWIRE.FEEDBACKFN 184275 . 185029) ( +CLOSEDWIRE.FEEDBACKFN 185031 . 186387) (CLOSEDWIRE.REGIONFN 186389 . 187374) ( +CLOSEDWIRE.GLOBALREGIONFN 187376 . 188428) (SK.WIRE.CREATE 188430 . 190193) (WIRE.ADD.POINT.TO.END +190195 . 191111) (READ.ARROW.CHANGE 191113 . 196589) (CHANGE.ELTS.ARROWHEADS 196591 . 197053)) (197056 + 208062 (SKETCH.CREATE.CLOSED.WIRE 197066 . 197627) (CLOSED.WIRE.INPUTFN 197629 . 197984) ( +CLOSED.WIRE.DRAWFN 197986 . 200031) (CLOSEDWIRE.READCHANGEFN 200033 . 204938) (CLOSEDWIRE.TRANSFORMFN +204940 . 206734) (CLOSEDWIRE.TRANSLATEPTSFN 206736 . 208060)) (208063 260769 (SK.EXPAND.ARROWHEADS +208073 . 208423) (SK.COMPUTE.ARC.ARROWHEAD.POINTS 208425 . 209806) (ARC.ARROWHEAD.POINTS 209808 . +211031) (SET.ARC.ARROWHEAD.POINTS 211033 . 212014) (SET.OPENCURVE.ARROWHEAD.POINTS 212016 . 212917) ( +SK.COMPUTE.CURVE.ARROWHEAD.POINTS 212919 . 214189) (SET.WIRE.ARROWHEAD.POINTS 214191 . 214944) ( +SK.COMPUTE.WIRE.ARROWHEAD.POINTS 214946 . 216211) (SK.EXPAND.ARROWHEAD 216213 . 217396) (CHANGED.ARROW + 217398 . 220570) (SK.CHANGE.ARROWHEAD 220572 . 221025) (SK.CHANGE.ARROWHEAD1 221027 . 226282) ( +SK.CREATE.ARROWHEAD 226284 . 226804) (SK.ARROWHEAD.CREATE 226806 . 228380) (SK.ARROWHEAD.END.TEST +228382 . 229306) (READ.ARROWHEAD.END 229308 . 231333) (ARROW.HEAD.POSITIONS 231335 . 233175) ( +ARROWHEAD.POINTS.LIST 233177 . 237149) (CURVE.ARROWHEAD.POINTS 237151 . 238014) (LEFT.MOST.IS.BEGINP +238016 . 238897) (WIRE.ARROWHEAD.POINTS 238899 . 240425) (DRAWARROWHEADS 240427 . 242797) ( +\SK.DRAW.TRIANGLE.ARROWHEAD 242799 . 244459) (\SK.ENDPT.OF.ARROW 244461 . 246718) ( +\SK.ADJUST.FOR.ARROWHEADS 246720 . 249225) (SK.SET.ARROWHEAD.LENGTH 249227 . 250371) ( +SK.SET.ARROWHEAD.ANGLE 250373 . 251469) (SK.SET.ARROWHEAD.TYPE 251471 . 254760) (SK.SET.LINE.ARROWHEAD + 254762 . 257175) (SK.UPDATE.ARROWHEAD.FORMAT 257177 . 259287) (SK.SET.LINE.LENGTH.MODE 259289 . +260767)) (260770 262571 (SK.INSURE.ARROWHEADS 260780 . 261962) (SK.ARROWHEADP 261964 . 262569)) ( +265368 327694 (SKETCH.CREATE.TEXT 265378 . 265892) (TEXT.CHANGEFN 265894 . 266286) (TEXT.READCHANGEFN +266288 . 274359) (\SK.READ.FONT.SIZE1 274361 . 276257) (SK.TEXT.ELT.WITH.SAME.FIELDS 276259 . 277899) +(SK.READFONTFAMILY 277901 . 279447) (CLOSE.PROMPT.WINDOW 279449 . 279873) (TEXT.DRAWFN 279875 . 280596 +) (TEXT.DRAWFN1 280598 . 284100) (TEXT.INSIDEFN 284102 . 284491) (TEXT.EXPANDFN 284493 . 286618) ( +SK.TEXT.LINE.REGIONS 286620 . 288494) (TEXT.UPDATE.GLOBAL.REGIONS 288496 . 289728) (REL.MOVE.REGION +289730 . 290267) (LTEXT.LINE.REGIONS 290269 . 293687) (TEXT.INPUTFN 293689 . 294199) (READ.TEXT 294201 + . 294949) (TEXT.POSITION.AND.CREATE 294951 . 297262) (CREATE.TEXT.ELEMENT 297264 . 298082) ( +SK.UPDATE.TEXT.AFTER.CHANGE 298084 . 298486) (SK.TEXT.FROM.TEXTBOX 298488 . 302294) ( +TEXT.SET.GLOBAL.REGIONS 302296 . 303589) (TEXT.REGIONFN 303591 . 304361) (TEXT.GLOBALREGIONFN 304363 + . 305051) (TEXT.TRANSLATEFN 305053 . 306368) (TEXT.TRANSFORMFN 306370 . 307493) (TEXT.TRANSLATEPTSFN +307495 . 308012) (TEXT.UPDATEFN 308014 . 312670) (SK.CHANGE.TEXT 312672 . 325760) (TEXT.SET.SCALES +325762 . 326730) (BREAK.AT.CARRIAGE.RETURNS 326732 . 327692)) (327695 346219 (ADD.KNOWN.SKETCH.FONT +327705 . 328696) (SK.PICK.FONT 328698 . 334230) (SK.CHOOSE.TEXT.FONT 334232 . 338180) (SK.NEXTSIZEFONT + 338182 . 339449) (SK.DECREASING.FONT.LIST 339451 . 341324) (SK.GUESS.FONTSAVAILABLE 341326 . 346217)) + (346638 360781 (SK.SET.FONT 346648 . 348215) (SK.SET.TEXT.FONT 348217 . 349219) (SK.SET.TEXT.SIZE +349221 . 349908) (SK.SET.TEXT.HORIZ.ALIGN 349910 . 351484) (SK.READFONTSIZE 351486 . 353716) ( +SK.COLLECT.FONT.SIZES 353718 . 356636) (SK.SET.TEXT.VERT.ALIGN 356638 . 358680) (SK.SET.TEXT.LOOKS +358682 . 360139) (SK.SET.DEFAULT.TEXT.FACE 360141 . 360779)) (360782 361368 (CREATE.SKETCH.TERMTABLE +360792 . 361366)) (361369 363135 (SK.FONT.LIST 361379 . 361705) (SK.INSURE.FONT 361707 . 362229) ( +SK.INSURE.STYLE 362231 . 362749) (SK.INSURE.TEXT 362751 . 363133)) (363705 420998 ( +SKETCH.CREATE.TEXTBOX 363715 . 365357) (SK.COMPUTE.TEXTBOX.REGION.FOR.STRING 365359 . 367436) ( +SK.BREAK.INTO.LINES 367438 . 378624) (SK.BRUSH.SIZE 378626 . 379007) (SK.TEXTBOX.CREATE 379009 . +379806) (SK.TEXTBOX.CREATE1 379808 . 380872) (SK.UPDATE.TEXTBOX.AFTER.CHANGE 380874 . 381414) ( +SK.TEXTBOX.POSITION.IN.BOX 381416 . 383327) (TEXTBOX.CHANGEFN 383329 . 383803) (TEXTBOX.DRAWFN 383805 + . 385841) (SK.TEXTURE.AROUND.REGIONS 385843 . 391916) (ALL.EMPTY.REGIONS 391918 . 392408) ( +TEXTBOX.EXPANDFN 392410 . 399566) (TEXTBOX.INPUTFN 399568 . 401181) (TEXTBOX.INSIDEFN 401183 . 401596) + (TEXTBOX.REGIONFN 401598 . 402452) (TEXTBOX.GLOBALREGIONFN 402454 . 402782) ( +TEXTBOX.SET.GLOBAL.REGIONS 402784 . 404115) (TEXTBOX.TRANSLATEFN 404117 . 405958) ( +TEXTBOX.TRANSLATEPTSFN 405960 . 408743) (TEXTBOX.TRANSFORMFN 408745 . 410413) (TEXTBOX.UPDATEFN 410415 + . 412308) (TEXTBOX.READCHANGEFN 412310 . 417199) (SK.TEXTBOX.TEXT.POSITION 417201 . 417622) ( +SK.TEXTBOX.FROM.TEXT 417624 . 420229) (ADD.EOLS 420231 . 420996)) (421527 425028 ( +SK.SET.TEXTBOX.VERT.ALIGN 421537 . 423417) (SK.SET.TEXTBOX.HORIZ.ALIGN 423419 . 425026)) (425411 +469886 (SKETCH.CREATE.BOX 425421 . 425904) (SK.BOX.DRAWFN 425906 . 427065) (BOX.DRAWFN1 427067 . +429906) (KNOTS.OF.REGION 429908 . 431142) (SK.DRAWAREABOX 431144 . 437745) (SK.DRAWBOX 437747 . 438936 +) (SK.BOX.EXPANDFN 438938 . 442686) (SK.BOX.GETREGIONFN 442688 . 443874) (BOX.SET.SCALES 443876 . +445116) (SK.BOX.INPUTFN 445118 . 447051) (SK.BOX.CREATE 447053 . 447754) (SK.UPDATE.BOX.AFTER.CHANGE +447756 . 448267) (SK.BOX.INSIDEFN 448269 . 448659) (SK.BOX.REGIONFN 448661 . 449374) ( +SK.BOX.GLOBALREGIONFN 449376 . 450114) (SK.BOX.READCHANGEFN 450116 . 453837) (SK.CHANGE.FILLING 453839 + . 457787) (SK.CHANGE.FILLING.COLOR 457789 . 461445) (SK.BOX.TRANSLATEFN 461447 . 462626) ( +SK.BOX.TRANSFORMFN 462628 . 463573) (SK.BOX.TRANSLATEPTSFN 463575 . 465943) (UNSCALE.REGION.TO.GRID +465945 . 466870) (INCREASEREGION 466872 . 467463) (INSUREREGIONSIZE 467465 . 468636) (EXPANDREGION +468638 . 469518) (REGION.FROM.COORDINATES 469520 . 469884)) (470422 496777 (SKETCH.CREATE.ARC 470432 + . 471241) (ARC.DRAWFN 471243 . 472970) (ARC.EXPANDFN 472972 . 475305) (ARC.INPUTFN 475307 . 479525) ( +SK.INVERT.CIRCLE 479527 . 480387) (SK.READ.ARC.ANGLE.POINT 480389 . 480896) (SK.SHOW.ARC 480898 . +481508) (ARC.CREATE 481510 . 482865) (SK.UPDATE.ARC.AFTER.CHANGE 482867 . 483207) (ARC.MOVEFN 483209 + . 484792) (ARC.TRANSLATEPTS 484794 . 486679) (ARC.INSIDEFN 486681 . 486931) (ARC.REGIONFN 486933 . +488069) (ARC.GLOBALREGIONFN 488071 . 489793) (ARC.TRANSLATE 489795 . 490777) (ARC.TRANSFORMFN 490779 + . 493729) (ARC.READCHANGEFN 493731 . 496775)) (496778 505857 (SK.COMPUTE.ARC.ANGLE.PT 496788 . 497714 +) (SK.COMPUTE.ARC.ANGLE.PT.FROM.ANGLE 497716 . 498709) (SK.COMPUTE.ARC.PTS 498711 . 502283) ( +SK.SET.ARC.DIRECTION 502285 . 502859) (SK.SET.ARC.DIRECTION.CW 502861 . 503035) ( +SK.SET.ARC.DIRECTION.CCW 503037 . 503310) (SK.COMPUTE.SLOPE.OF.LINE 503312 . 503804) ( +SK.CREATE.ARC.USING 503806 . 505043) (SET.ARC.SCALES 505045 . 505855)) (505858 506303 ( +SK.INSURE.DIRECTION 505868 . 506301)) (507674 553533 (GETSKETCHELEMENTPROP 507684 . 508992) ( +\SK.GET.ARC.ANGLEPT 508994 . 509555) (\GETSKETCHELEMENTPROP1 509557 . 509811) (\SK.GET.BRUSH 509813 . +510737) (\SK.GET.FILLING 510739 . 511837) (\SK.GET.ARROWHEADS 511839 . 512618) (\SK.GET.FONT 512620 . +513100) (\SK.GET.JUSTIFICATION 513102 . 513626) (\SK.GET.DIRECTION 513628 . 514105) (\SK.GET.DASHING +514107 . 515126) (PUTSKETCHELEMENTPROP 515128 . 517397) (\SK.PUT.FILLING 517399 . 518669) ( +ADDSKETCHELEMENTPROP 518671 . 519476) (REMOVESKETCHELEMENTPROP 519478 . 520267) (\SK.PUT.FONT 520269 + . 521083) (\SK.PUT.JUSTIFICATION 521085 . 522096) (\SK.PUT.DIRECTION 522098 . 522705) ( +\SK.PUT.DASHING 522707 . 524042) (\SK.PUT.BRUSH 524044 . 525963) (\SK.PUT.ARROWHEADS 525965 . 527931) +(SK.COPY.ELEMENT.PROPERTY.LIST 527933 . 528509) (SKETCH.UPDATE 528511 . 529241) (SKETCH.UPDATE1 529243 + . 530531) (\SKELT.GET.SCALE 530533 . 531521) (\SKELT.PUT.SCALE 531523 . 532830) (\SKELT.PUT.DATA +532832 . 534629) (SK.REPLACE.TEXT.IN.ELEMENT 534631 . 535584) (\SKELT.GET.DATA 535586 . 536653) ( +\SK.GET.1STCONTROLPT 536655 . 538167) (\SK.PUT.1STCONTROLPT 538169 . 543642) (\SK.GET.2NDCONTROLPT +543644 . 544559) (\SK.PUT.2NDCONTROLPT 544561 . 548749) (\SK.GET.3RDCONTROLPT 548751 . 549629) ( +\SK.PUT.3RDCONTROLPT 549631 . 553531)) (553534 554115 (LOWERLEFTCORNER 553544 . 553790) ( +UPPERRIGHTCORNER 553792 . 554113))))) STOP diff --git a/library/SKETCHELEMENTS.LCOM b/library/sketch/SKETCH-ELEMENTS.LCOM similarity index 65% rename from library/SKETCHELEMENTS.LCOM rename to library/sketch/SKETCH-ELEMENTS.LCOM index a0744fc45878644df9a6584f20ed2aaff3e97ff7..14b7a802f6358ac0e423a982a87e0a45e3c99341 100644 GIT binary patch delta 8380 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 delta 8442 zcmb7Kd014(vQLd-6d0qj4(nmuAPUX~!{9o?AS27bu!$R@pdbi{;1c!TXl{&AV~DM^ zQR5c!jERam-W->>Br$4?sAN&2cwLgHiE&S&F=}r0IWy;g@qO=m|8&zm)z#Hi)m6W) z!~Vb8Z~v=(?JzP{(M4xabK&Z76_YAU%8ClPigHfP%}mHlp53pwVp7q7vVy9r83QI2 z6_ypv7*JL+wyL0N2B}qe_d+s5q`787q)wyLaT;TsAvVsSQFCLfiX>)5(<`f{bdMu< z+6Cp6lymOt+@do4v52d#;1X-f%8IJEDKn;2)KqgVc|}D}YLw>bJ)(7S(J|@> z_wYn(iY4A|F=ts4NWQ{<=>H+{fXrk|R(z5r#gb}C%gT)EtK*`h4H}b)bB~KpGN%o( zWJYG$xbVcZOcXY7cmx-hZnxxEZP}TT3AhQT)@fab)p9yboWT@l(5X51|L?w9$9lz# zcA#_wbufE?l8pAI*#7QajBUQpTx>7_;L3>Tv2nK#+4Ppr=Y1Zs5ezTGQffDK>jz%8&?QJr_8py)w<3A`IpSX5z}` zz({eWGH8hOn`2~9SMXDY>$FZr@wT)q%djkwOI`4AiIO}Bo{3zlLrek}$F`7i1&+Be z;-(Dev^tvh9)#h<*|3F3V2Gu6QoxJMQU{{~R;c>{{&c!)e^64Jo5IKOVmD8CK@^ZP z#BkauO@z{6=}sX`8LrjGaCTdES^}rjbMaPte2N9dk;xwSD8#klv9X-RZq8)Cp~5P| zAGrzq$m9qOZn-|97ZdMzuin`H*=r!SeS3Frt5ioQ>4`@WLK{B@5AsIuFzJBw018IF z>^&L9*F}@2UMi9o86&EUL~d5P)G0_rLXtyBY1B|@HQ5_gD-YI0`OphB(2i90+19bu zLJQ?S1s{^2dDjO|8Y`bKLMbxdm*3Z6)Fw0GU(wg&Nx}_oOnII6k4NPVT?^^t$o@KC zC8srU>fGXzam8H0l**!U)dTTpj<;g`pp!COuW8BHvD4TNWZ@3Qu16BBwj~LfZko}> zX%Aftr`KpSf=SxMZDN~m?K=_MrmD*dRP~)HY%sBZNmtxRhkg^4U`aG*r({J9wr6K1 zad;}he4=4~?>|i1+L1FrE16wya+0D zXHCno*qu&)FX<-!YS0TF@Wh%Rl6njcCgX-~mi8z9$(7Q;QJXvz0&$V4rQmvlq(}O4 z2Suppa-pd`<#lPP1uYCSIoVhAny=G-m1xKb+mCobQK_;{B9!9aOA1Gk@Ql3@Exp|V zUHF*M-Qj6h$&4M5nFp8^Z)S}X50jleR$4>$XP0VSE}EH<@{ccmRY6ei0}OlAKrn1ff)IJSfh){V=-E4a-= z;p^yFm<3+KJ!{DVFGo$$5=pg=7sj`h1)!mw(Kwn3ho9C1X;-{eUbC-wFxv|z26$l5 z(;G!ykscH4UF)BSmwBWYVyq)X{$7X@B_fr8YQtH{;T&ynBeGQD7X z#}8%SfI=Bg7JkUC%%$=KZ0~>AL%1rA^on+D^W4g=qNDVAK}8z#`#26&E@AU|Rnt%# zO;w?6AcO(O$Z9|4`7Ge1*fK2%E^T5s6UOwC2cEj3KASwKX%Qf6r?&9Ghf~LTqhZhw z(rsC(W_z;5?hNYFa6fWwT81c1|LIkpE(c_4Cv!Z#UFY{ASEmz6i=_8Nf3jl6B9}s3 zDkGy-s^k^pUutj>NE+)lbBD~O^A;cS+ssw+#J<_Sq+!-8@Fx|4$9KEVW;_BGGY6XO{Td0$7p^KFZ2+*6ifg=l7C&p$x#_@R>R#dc)hy8%S|yqjn~nsa2s-B^r!%$sdE4fx()r0JD+649`++pOq~U51a*gHK zkvXl=c?D$!wAp$?B6d93TEyfV?bwa2YDXou3s~#;b4M42TFL36IW+?kCF5ss0)>H6!b(3IxGA! zsPuMh*j>W}3f{X7g*dU-%&1zUoS|+M)uxl7PNJ=NmScwk#S1X|kQ%2~NZd$ReSpO5$HNHbSOgJ`DE1<|w~p+R z);R26^lRb2bw`_-x~3d^N8G}@aV-N07=MJvPfHZ<__A>xi#_%x_SpEi$%O6iO*s;0 zax%}`QT$Z^%V&SP24vaSU6J1QwJ$mG^=ka9{2S*B<(+Rf;MUQ45$BKiwmTYe&bRZB z3x_wxiA;;i3mGh>8ZX5BeNNAoPe7pA*Kzbr8uI|vxk%I}I52UuH#xq;&pF!@DVp+ zv0ZxO8fMUFqtgRgqY_l!ByWWu*>aNwn>TM^mLScy{*CRD+fmqla{D~CYwp+>S}?_+#h%Fu|US$^%LZG%)Hx$3AXrN2%|#t2=6Vz-+N8Ur|i*3_UHRJ@_&8AL>qbk zT~Ka+(2VJboPSh??a;>zM|66Uhw@K+;)X=aDgj@2%N9ccwzuI7hT|^)5K3Uwr}qHP zA*x4k7?)I(5;4g1_ z%niyVi_*dEV1hi_)(*}|BYx@g&;jM4t2;osxO*pekl{H$-yI4;bQ*fc1AN*l@zFxh zbp#dP)e}ZR7Xf`Fne7Sjwsg@eXtF^*Qpf#>>SV2kN~*mkB%12 zCE_DL!IBwox29*=M65+a0^#LW-at>*fDhdt*g}!i7zC$U5fLaHNo#_kto3Yuy$@A{ zfKisq90J7(%z-*|2>IF0V{TZ1wGlq6H>}4XMep|ktX0rt4NT=QuE+dcRQ9~o3HYAB zgb#fLpTd)bGhxud5|WX%ST|4$Fa3%b@TH+TSc^Ol=s?7g)JG4ol4LYn4<>2E*Xg02 z3DVaH^`0y!xq=aY-3U9FS=PqEd^`veG;#lv)T zW>zMlFc>*rOMpaiOPvMUvMr5?fH;Y+PXyEu{W=j&Ju9};kB0zohU!bye1}@Q@ zYE8-G{+0#UeLj=~zasG-D_{VlFcj{plt>vKk3}|%olCJKW^s1wkR%p=c+X^5&je{m zfhi$^7B$YBUr}DoO(}V)Xdu4R4LGT!gHi!wB;A;b3d94aLm<783TN@}BWWN)Nd8V5 z_%h|R&w!cYQD4gtj*8)wm7ny{e8oHrLr4;v1+2<6H48Q&r9sS3G<6;eReWwX3}HlT za)4#sXC8D?pu&%i&4t-WcQKa*3wHcJa$!0GMx7Cr6pvsF5kDe*RDh^6A(L#V9R@;z zF}6xDbX^|2ip+Wr2eIxzhYyGMWvgxtR`~MV2$-k9tzvZaBBuxuTu<)|)bznf=+6H! z3idMD`Fwa8VIKkyqw~3o7lJ)|wHnr=_A|%8l{OeJqLG0sy3iqokcF#P6@o$D`b;5w zj=cV^2fSifU{~|hWax(7pOc|0 zcA-`94t9I1KrMR4_f>G5$#8H5h^0z;s~TjuLsM&@T4GAVI`}bQ9WKrAou)z}V4O5+ z{vLdoLP8bZG${x?`Nh+~ixFZCjD=;FTAY8A{CYqB(=Y%5sY|MY2cg%vR%~6mX*RgA!&wiv~ufsj;d=|iM7aM)F2r#JkLa3Jn;14W>jf~C2 zHy}j3REyq#4bJi?-Xzg^&5NOf8&V|`=qDO26w(3XiZ(9x?P!^2g?U?`-q2K?z)tDyhW zYxn2J(eGxV&C1>ZR*RxpYhVRhr5%-955Yqo(sP?y;3hhBGfb68>53rv=#ctr!eE!B+C-U4*xKiCSq zyaQjd9d5Q5=I?-uEK&^G2`^!{XD9T+?&?kFmf=JfQGyeM;GqBYGDm1Q@lWhNp#XW(3m$Pj^*ke7uX(}xJO{yGS^ zn9JQd1ar}Wst&_E9AZ6`qYdjoP5XWUtSpuB1vE;BWh3;CZVFFoJqr5*ocB(v=OXnn zj6GJzS&#WD>`O>cIN|xkMj@&+Gzyq4{W#!*i&h>NBL1@DU`MDP&FUQS$+=eNw;vkZ zU7?~~PCy)f5W^qw(-9()r)WYNK}G*@0tU+hjyVY4eDewD$P9^(LdlT#Pr?|N?okJ> zk0JD819;QfO$Z^B^z$YN6Qhdu9|)6Ao&`6)?N`u~U98^Uz;5w3*numad;B@4PQzrR=zIoV6ek9r0Xu>=MAHn+ zbNKRi<{f-v$&Z9>XVBr4)bl&&CN4942WhA!Oj!w7Gm6i$+R|`=bn=zo!4{++dKM5ai(pT>*}XU2qMii! z^Rb{E5$Sl}fRB++(+!v>o^-@bxPcSaTQDD;Cqg+A>n`{K4E5FL9t7|YZsDE7-#@+s zmEr=;T{wdo%b*vm<1~^pWnuA0z*;@-!T;c*#(OYDls4g45zkwHgSSLBC&Lv!bk9T3 z@!fxiUF>WZ9zdP=+l)UjCL%z22<#IkMg#MC@Zph|6 zw;m%%@psx!gEj1HA z*xS?185zz>6t7n(=J&4-M_Z@cZRwfLY1az8t?7BfvjP7xA*ZOkrikmo4J)dun9jvl zR8>|~6;zj0l;c~$6pNt36pNA26pPlarry>winhome>DROPBOX>TEDIT-VERSIONS>SKETCHOBJ.;1 55347 +(FILECREATED " 5-Dec-2023 00:15:05" {WMEDLEY}sketch>SKETCH-OBJ.;1 55189 - :CHANGES-TO (FNS SKETCH.DISPLAYFN) + :EDIT-BY rmk - :PREVIOUS-DATE "20-Jan-93 14:48:59" {DSK}larry>medley>library>SKETCHOBJ.;1) + :CHANGES-TO (RECORDS SKETCHIMAGEOBJ SKETCHDOCUMENTINFO) + + :PREVIOUS-DATE "15-Jul-2022 14:33:25" {WMEDLEY}sketch>SKETCHOBJ.;2) -(* ; " -Copyright (c) 1984-1988, 1990, 1993 by Venue & Xerox Corporation. -") +(PRETTYCOMPRINT SKETCH-OBJCOMS) -(PRETTYCOMPRINT SKETCHOBJCOMS) - -(RPAQQ SKETCHOBJCOMS +(RPAQQ SKETCH-OBJCOMS [[COMS (* the stuff to support sketch images in documents.) (FNS MAKE.IMAGE.OBJECT.OF.SKETCH SK.ELEMENT.FROM.IMAGEOBJ SKETCHIMAGEOBJ.FROM.VIEWER SKETCH.IMAGEOBJ SKETCH.DISPLAYFN SKETCH.BITMAP.IMAGE SKIO.IMAGEBOXFN SKIO.GETFN.2 @@ -961,23 +959,22 @@ Copyright (c) 1984-1988, 1990, 1993 by Venue & Xerox Corporation. '24) (CREATE.SKIMAGEOBJ.TYPE) -(PUTPROPS SKETCHOBJ COPYRIGHT ("Venue & Xerox Corporation" 1984 1985 1986 1987 1988 1990 1993)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (2084 31471 (MAKE.IMAGE.OBJECT.OF.SKETCH 2094 . 3258) (SK.ELEMENT.FROM.IMAGEOBJ 3260 . -3559) (SKETCHIMAGEOBJ.FROM.VIEWER 3561 . 3973) (SKETCH.IMAGEOBJ 3975 . 4811) (SKETCH.DISPLAYFN 4813 . -8445) (SKETCH.BITMAP.IMAGE 8447 . 10118) (SKIO.IMAGEBOXFN 10120 . 12125) (SKIO.GETFN.2 12127 . 13596) -(SKIO.UPDATE.FROM.OLD.FORM 13598 . 14282) (SKIO.GETFN 14284 . 14802) (SKIO.PUTFN 14804 . 15801) ( -SKIO.COPYFN 15803 . 16505) (SKIO.BUTTONEVENTINFN 16507 . 21564) (TRANSLATE.REGION 21566 . 22095) ( -UPDATE.IMAGE.IN.DOCUMENT 22097 . 24616) (SK.COPY.IMAGEOBJ 24618 . 26289) (COPY.IMAGE.OBJECT 26291 . -26828) (\CREATE.SKETCH.IMAGEFNS 26830 . 27967) (\SKIO.IN.TOO.SMALL.TEDITP 27969 . 28661) ( -SKETCH.VIEWER.GRID 28663 . 29960) (SKETCH.VIEWER.SCALE 29962 . 31469)) (31834 39824 ( -SKETCH.IMAGE.OBJECT.ELEMENT 31844 . 32257) (SKETCH.IMAGEOBJ.OF.ELEMENT 32259 . 32585) ( -SKETCH.SCALE.OF.ELEMENT 32587 . 33015) (SKETCH.POSITION.OF.ELEMENT 33017 . 33664) ( -CREATE.SKIMAGEOBJ.TYPE 33666 . 34591) (IMAGEBOXSIZE 34593 . 34944) (SK.UPDATE.IMAGEOBJECT.AFTER.CHANGE - 34946 . 37073) (SKETCH.CREATE.IMAGE.OBJECT 37075 . 37797) (SKETCH.CREATE.IMAGE.OBJECT1 37799 . 39822) -) (39825 54230 (SK.IMAGEOBJ.DRAWFN 39835 . 41507) (SK.IMAGEOBJ.REGIONFN 41509 . 41934) ( -SK.IMAGEOBJ.GLOBALREGIONFN 41936 . 42337) (SK.IMAGEOBJ.TRANSLATEFN 42339 . 44622) ( -SK.IMAGEOBJ.EXPANDFN 44624 . 46810) (SK.IMAGEOBJ.INSIDEFN 46812 . 47346) (SK.IMAGEOBJ.MOVEFN 47348 . -49579) (SK.IMAGEOBJ.CHANGEFN 49581 . 52656) (SK.IMAGEOBJ.READCHANGEFN 52658 . 52887) ( -SK.IMAGEOBJ.TRANSFORMFN 52889 . 54228))))) + (FILEMAP (NIL (2022 31409 (MAKE.IMAGE.OBJECT.OF.SKETCH 2032 . 3196) (SK.ELEMENT.FROM.IMAGEOBJ 3198 . +3497) (SKETCHIMAGEOBJ.FROM.VIEWER 3499 . 3911) (SKETCH.IMAGEOBJ 3913 . 4749) (SKETCH.DISPLAYFN 4751 . +8383) (SKETCH.BITMAP.IMAGE 8385 . 10056) (SKIO.IMAGEBOXFN 10058 . 12063) (SKIO.GETFN.2 12065 . 13534) +(SKIO.UPDATE.FROM.OLD.FORM 13536 . 14220) (SKIO.GETFN 14222 . 14740) (SKIO.PUTFN 14742 . 15739) ( +SKIO.COPYFN 15741 . 16443) (SKIO.BUTTONEVENTINFN 16445 . 21502) (TRANSLATE.REGION 21504 . 22033) ( +UPDATE.IMAGE.IN.DOCUMENT 22035 . 24554) (SK.COPY.IMAGEOBJ 24556 . 26227) (COPY.IMAGE.OBJECT 26229 . +26766) (\CREATE.SKETCH.IMAGEFNS 26768 . 27905) (\SKIO.IN.TOO.SMALL.TEDITP 27907 . 28599) ( +SKETCH.VIEWER.GRID 28601 . 29898) (SKETCH.VIEWER.SCALE 29900 . 31407)) (31772 39762 ( +SKETCH.IMAGE.OBJECT.ELEMENT 31782 . 32195) (SKETCH.IMAGEOBJ.OF.ELEMENT 32197 . 32523) ( +SKETCH.SCALE.OF.ELEMENT 32525 . 32953) (SKETCH.POSITION.OF.ELEMENT 32955 . 33602) ( +CREATE.SKIMAGEOBJ.TYPE 33604 . 34529) (IMAGEBOXSIZE 34531 . 34882) (SK.UPDATE.IMAGEOBJECT.AFTER.CHANGE + 34884 . 37011) (SKETCH.CREATE.IMAGE.OBJECT 37013 . 37735) (SKETCH.CREATE.IMAGE.OBJECT1 37737 . 39760) +) (39763 54168 (SK.IMAGEOBJ.DRAWFN 39773 . 41445) (SK.IMAGEOBJ.REGIONFN 41447 . 41872) ( +SK.IMAGEOBJ.GLOBALREGIONFN 41874 . 42275) (SK.IMAGEOBJ.TRANSLATEFN 42277 . 44560) ( +SK.IMAGEOBJ.EXPANDFN 44562 . 46748) (SK.IMAGEOBJ.INSIDEFN 46750 . 47284) (SK.IMAGEOBJ.MOVEFN 47286 . +49517) (SK.IMAGEOBJ.CHANGEFN 49519 . 52594) (SK.IMAGEOBJ.READCHANGEFN 52596 . 52825) ( +SK.IMAGEOBJ.TRANSFORMFN 52827 . 54166))))) STOP diff --git a/library/SKETCHOBJ.LCOM b/library/sketch/SKETCH-OBJ.LCOM similarity index 94% rename from library/SKETCHOBJ.LCOM rename to library/sketch/SKETCH-OBJ.LCOM index 6ffeb73628c138365b9429669f0e64740b2fa689..2be22b06bdeda66d6e30104d7b89cf057913307e 100644 GIT binary patch delta 431 zcmeyKKPP`ec)fzDu1jjNu91O}v4Vktm7%GXp{0_7hEj5VZb4>FYKlUBo`RA>b-1sq zi;rt$txZm5Qc+@2rCo7$YDsd2U9h)nh_i>Tzmu1qwV|d0my&`B!aO5mD`PV&Ljxs+ z5|D8@>M07DK-1hpeS8$4>gvH3>*?t!DWoKp0IkDjfT@xumxi0CkE?T#t7C|(3s4b; zs|`$vb)|x-siB3Xf|aX_XNaz!Q=~#sZngrKm9vMVpSx?YZiv5vMv$wse~?SC0>pQo zzK-s$Kp#T6F8S6oqjiN^tG^G7C)>iTSPVR0?g9+SHiDOj_H8i_`=Rq?r;bDk6OX!3Xdy zy75JP0H4CG6MrCx;O2vYd(S=R%rkwbPvPaqe7#? RVTC3`ORk^^0_Qm{_W@9*n27)Y diff --git a/library/sketch/SKETCH-OPS b/library/sketch/SKETCH-OPS new file mode 100644 index 00000000..506f20db --- /dev/null +++ b/library/sketch/SKETCH-OPS @@ -0,0 +1,4189 @@ +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) + +(FILECREATED " 5-Dec-2023 00:08:46" {WMEDLEY}sketch>SKETCH-OPS.;1 221752 + + :EDIT-BY rmk + + :CHANGES-TO (RECORDS AFFINETRANSFORMATION SKHISTEVENT SKEVENTTYPE SKETCHVIEW) + + :PREVIOUS-DATE " 3-May-2023 21:06:28" {WMEDLEY}sketch>SKETCHOPS.;2) + + +(PRETTYCOMPRINT SKETCH-OPSCOMS) + +(RPAQQ SKETCH-OPSCOMS + [ (* ; + "functions that used to be on SKETCH") + (COMS + (* ;; "miscellaneous utility functions") + + (FNS SK.FONTNAMELIST SCALE.REGION.OUT SK.SCALE.POSITION.INTO.VIEWER + SK.SCALE.POSITION.INTO.VIEWER.EXACT SK.MAKE.POSITION.INTEGER + SCALE.POSITION.INTO.SKETCHW UNSCALE UNSCALE.REGION) + + (* ;; "misc IO functions") + + (FNS STATUSPRINT CLEARPROMPTWINDOW CLOSEPROMPTWINDOW MYGETPROMPTWINDOW PROMPT.GETINPUT) + ) + (COMS + (* ;; "fns for dealing with display priorities") + + (FNS SK.SEND.TO.BOTTOM SK.BRING.TO.TOP SK.SWITCH.PRIORITIES SK.SEL.AND.CHANGE.PRIORITY + SK.SEL.AND.SWITCH.PRIORITIES SK.SORT.ELTS.BY.PRIORITY SK.SORT.GELTS.BY.PRIORITY + SORT.CHANGESPECS.BY.NEW.PRIORITY SORT.CHANGESPECS.BY.OLD.PRIORITY + SK.SEND.ELEMENTS.TO.BOTTOM SK.BRING.ELEMENTS.TO.TOP + SK.COPY.GLOBAL.ELEMENT.AND.PROPERTY.LIST) + (FNS SK.ELEMENT.PRIORITY SK.SET.ELEMENT.PRIORITY SK.POP.NEXT.PRIORITY SK.PRIORITY.CELL + SK.HIGH.PRIORITY SK.LOW.PRIORITY)) + (COMS + (* ;; "functions for dealing with display elements.") + + (FNS DRAW.LOCAL.SKETCH SET.PRIORITYIMPORTANT SK.FIGUREIMAGE) + (COMS + (* ;; "functions for hardcopying") + + (FNS SKETCHW.HARDCOPYFN SK.LIST.IMAGE SK.HARDCOPYIMAGEW) + (FNS SK.DO.HARDCOPYIMAGEW.TOFILE SK.HARDCOPYIMAGEW.TOFILE + SK.HARDCOPYIMAGEW.TOPRINTER SK.LIST.IMAGE.ON.FILE) + (FNS \SK.LIST.PAGE.IMAGE SK.GetImageFile SK.PRINTER.FILE.CANDIDATE.NAME + SK.SET.HARDCOPY.MODE SK.UNSET.HARDCOPY.MODE SK.UPDATE.AFTER.HARDCOPY + DEFAULTPRINTINGIMAGETYPE SK.SWITCH.REGION.X.AND.Y) + (CONSTANTS MICASPERPT IMICASPERPT PTSPERMICA))) + (COMS + (* ;; "fns to implement transformations on the elements") + + (FNS SK.SEL.AND.TRANSFORM SK.TRANSFORM.ELEMENTS SK.TRANSFORM.ITEM SK.TRANSFORM.ELEMENT + SK.TRANSFORM.POINT SK.TRANSFORM.POINT.LIST SK.TRANSFORM.REGION SK.PUT.ELTS.ON.GRID + SK.TRANSFORM.GLOBAL.ELEMENTS GLOBALELEMENTP SKETCH.LIST.OF.ELEMENTSP + SK.TRANSFORM.SCALE.FACTOR SK.TRANSFORM.BRUSH SK.TRANSFORM.ARROWHEADS SCALE.BRUSH) + (FNS TWO.PT.TRANSFORMATION.INPUTFN SK.TWO.PT.TRANSFORM.ELTS SK.SEL.AND.TWO.PT.TRANSFORM + SK.APPLY.AFFINE.TRANSFORM SK.COMPUTE.TWO.PT.TRANSFORMATION SK.COMPUTE.SLOPE + SK.THREE.PT.TRANSFORM.ELTS SK.COMPUTE.THREE.PT.TRANSFORMATION + SK.SEL.AND.THREE.PT.TRANSFORM THREE.PT.TRANSFORMATION.INPUTFN) + (FNS SK.COPY.AND.TWO.PT.TRANSFORM.ELTS SK.SEL.COPY.AND.TWO.PT.TRANSFORM + SK.COPY.AND.THREE.PT.TRANSFORM.ELTS SK.SEL.COPY.AND.THREE.PT.TRANSFORM + SK.COPY.AND.TRANSFORM.ELEMENTS SK.COPY.AND.TRANSFORM.ITEM) + (DECLARE%: DONTCOPY (RECORDS AFFINETRANSFORMATION)) + (UGLYVARS FIRSTPTMARK SECONDPTMARK THIRDPTMARK NEWFIRSTPTMARK NEWSECONDPTMARK) + (GLOBALVARS FIRSTPTMARK SECONDPTMARK THIRDPTMARK NEWFIRSTPTMARK NEWSECONDPTMARK) + (FILES MATMULT)) + (COMS (* ; "functions for marking") + (FNS SK.SHOWMARKS MARKPOINT SK.MARKHOTSPOTS SK.MARK.SELECTION) + (UGLYVARS POINTMARK SPOTMARKER) + (GLOBALVARS POINTMARK SPOTMARKER) + (CURSORS POINTREADINGCURSOR) + (* ; "hit detection functions.") + (FNS SK.SELECT.ITEM IN.SKETCH.ELT? SK.MARK.HOTSPOT SK.MARK.POSITION SK.SELECT.ELT + SK.DESELECT.ELT) + (CONSTANTS (SK.POINT.WIDTH 4)) + (* ; + "fns to support caching of hotspots.") + (FNS SK.HOTSPOT.CACHE SK.HOTSPOT.CACHE.FOR.OPERATION SK.BUILD.CACHE + SK.ELEMENT.PROTECTED? SK.HAS.SOME.HOTSPOTS SK.SET.HOTSPOT.CACHE + SK.CREATE.HOTSPOT.CACHE SK.ELTS.FROM.HOTSPOT SK.ADD.HOTSPOTS.TO.CACHE + SK.ADD.HOTSPOTS.TO.CACHE1 SK.ADD.HOTSPOT.TO.CACHE SK.REMOVE.HOTSPOTS.FROM.CACHE + SK.REMOVE.HOTSPOTS.FROM.CACHE1 SK.REMOVE.HOTSPOT.FROM.CACHE + SK.REMOVE.VALUE.FROM.CACHE.BUCKET SK.FIND.CACHE.BUCKET + SK.ADD.VALUE.TO.CACHE.BUCKET)) + (COMS (* ; "grid stuff") + (FNS SK.SET.GRID SK.DISPLAY.GRID SK.DISPLAY.GRID.POINTS SK.REMOVE.GRID.POINTS + SK.TAKE.DOWN.GRID SK.SHOW.GRID SK.GRIDFACTOR SK.TURN.GRID.ON SK.TURN.GRID.OFF + SK.MAKE.GRID.LARGER SK.MAKE.GRID.SMALLER SK.CHANGE.GRID GRID.FACTOR1 + LEASTPOWEROF2GT GREATESTPOWEROF2LT SK.DEFAULT.GRIDFACTOR SK.PUT.ON.GRID + MAP.WINDOW.ONTO.GRID MAP.SCREEN.ONTO.GRID MAP.GLOBAL.PT.ONTO.GRID + MAP.GLOBAL.REGION.ONTO.GRID MAP.WINDOW.POINT.ONTO.GLOBAL.GRID + MAP.WINDOW.ONTO.GLOBAL.GRID SK.UPDATE.GRIDFACTOR SK.MAP.FROM.WINDOW.TO.GLOBAL.GRID + SK.MAP.INPUT.PT.TO.GLOBAL SK.MAP.FROM.WINDOW.TO.NEAREST.GRID) + (INITVARS (DEFAULTGRIDSIZE 8) + (DEFAULTMINGRIDSIZE 4) + (DEFAULTMAXGRIDSIZE 32))) + (COMS (* ; "history and undo stuff") + (FNS SK.ADD.HISTEVENT SK.SEL.AND.UNDO SK.UNDO.LAST SK.UNDO.NAME SKEVENTTYPEFNS + SK.TYPE.OF.FIRST.ARG) + (FNS SK.DELETE.UNDO SK.ADD.UNDO) + (FNS SK.CHANGE.UNDO SK.ELT.IN.SKETCH? SK.CHANGE.REDO SK.MOVE.UNDO SK.MOVE.REDO) + (FNS SK.UNDO.UNDO SK.UNDO.MENULABEL SK.LABEL.FROM.TYPE) + (DECLARE%: DONTCOPY (RECORDS SKHISTEVENT SKEVENTTYPE)) + (INITVARS (SKETCH.#.UNDO.ITEMS 30)) + (GLOBALVARS SKETCH.#.UNDO.ITEMS) + (IFPROP EVENTFNS ADD DELETE CHANGE UNDO MOVE COPY ZOOM ANNOTATE LINK)) + (COMS (* ; + "functions for displaying the global coordinate space values.") + (FNS SHOW.GLOBAL.COORDS LOCATOR.CLOSEFN SKETCHW.FROM.LOCATOR SKETCHW.UPDATE.LOCATORS + LOCATOR.UPDATE UPDATE.GLOBAL.LOCATOR UPDATE.GLOBALCOORD.LOCATOR ADD.GLOBAL.DISPLAY + ADD.GLOBAL.GRIDDED.DISPLAY CREATE.GLOBAL.DISPLAYER + UPDATE.GLOBAL.GRIDDED.COORD.LOCATOR) + (VARS (SKETCHW.LASTCURSORPTX 0) + (SKETCHW.LASTCURSORY 0)) + (GLOBALVARS SKETCHW.LASTCURSORPTX SKETCHW.LASTCURSORPTY)) + (COMS (* ; "fns for reading colors") + (FNS DISPLAYREADCOLORHLSLEVELS DISPLAYREADCOLORLEVEL DRAWREADCOLORBOX READ.CHANGE.COLOR + READCOLOR1 READCOLORCOMMANDMENUSELECTEDFN READCOLOR2) + (FNS CREATE.CNS.MENU) + (VARS COLORMENUHEIGHT COLORMENUWIDTH) + (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (FILES (LOADCOMP) + LLCOLOR))) + (COMS + (* ;; "functions that used to be taken from GRAPHZOOM. Renamed and defined here so GRAPHZOOM isn't loaded.") + + (FNS SK.ABSWXOFFSET SK.ABSWYOFFSET SK.UNSCALE.POSITION.FROM.VIEWER SK.SCALE.REGION)) + (COMS (* ; "functions for zooming") + (FNS VIEWER.SCALE SKETCH.ZOOM SAME.ASPECT.RATIO SKETCH.DO.ZOOM SKETCH.NEW.VIEW + ZOOM.UPDATE.ELT SK.UPDATE.AFTER.SCALE.CHANGE SKETCH.AUTOZOOM + SKETCH.GLOBAL.REGION.ZOOM) + (INITVARS (AUTOZOOM.FACTOR 0.8) + (AUTOZOOM.REPAINT.TIME 3000)) + (CURSORS AUTOZOOMCURSOR ZOOMINCURSOR ZOOMOUTCURSOR) + (GLOBALVARS AUTOZOOM.FACTOR AUTOZOOM.REPAINT.TIME ZOOMINCURSOR ZOOMOUTCURSOR)) + (COMS (* ; "fns for changing the view") + (FNS SKETCH.HOME SK.FRAME.IT SK.FRAME.WINDOW.TO.SKETCH SK.MOVE.TO.VIEW + SK.NAME.CURRENT.VIEW SKETCH.ADD.VIEW SK.RESTORE.VIEW SK.FORGET.VIEW) + (DECLARE%: DONTCOPY (RECORDS SKETCHVIEW))) + (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (FILES (LOADCOMP) + SKETCH SKETCHELEMENTS SKETCHOBJ + SKETCHEDIT INTERPRESS)) + (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) + (NLAML) + (LAMA STATUSPRINT]) + + + +(* ; "functions that used to be on SKETCH") + + + + +(* ;; "miscellaneous utility functions") + +(DEFINEQ + +(SK.FONTNAMELIST + [LAMBDA (FONTDESC) (* rrb " 2-NOV-83 21:00") + (LIST (FONTPROP FONTDESC 'FAMILY) + (FONTPROP FONTDESC 'SIZE) + (FONTPROP FONTDESC 'FACE]) + +(SCALE.REGION.OUT + [LAMBDA (REGION SCALE) (* rrb "30-Dec-85 17:24") + + (* scales a region into a windows coordinate space making sure that all of the + region is covered e.g. rounds out.) + + (PROG [(ROUNDINGFACTOR (DIFFERENCE SCALE (QUOTIENT SCALE 20000.0] + (RETURN (CREATEREGION (FIX (QUOTIENT (fetch (REGION LEFT) of REGION) + SCALE)) + (FIX (QUOTIENT (fetch (REGION BOTTOM) of REGION) + SCALE)) + (FIX (QUOTIENT (PLUS (fetch (REGION WIDTH) of REGION) + ROUNDINGFACTOR) + SCALE)) + (FIX (QUOTIENT (PLUS (fetch (REGION HEIGHT) of REGION) + ROUNDINGFACTOR) + SCALE]) + +(SK.SCALE.POSITION.INTO.VIEWER + [LAMBDA (POS SCALE) (* rrb "11-Sep-86 14:35") + (* scales a position into window + coordinates from global coordinates.) + (COND + ((EQP SCALE 1) (* avoid QUOTIENT) + (SK.MAKE.POSITION.INTEGER POS)) + (T (create POSITION + XCOORD _ (FIXR (QUOTIENT (fetch (POSITION XCOORD) of POS) + SCALE)) + YCOORD _ (FIXR (QUOTIENT (fetch (POSITION YCOORD) of POS) + SCALE]) + +(SK.SCALE.POSITION.INTO.VIEWER.EXACT + [LAMBDA (POS SCALE) (* rrb "30-Sep-86 15:28") + + (* * scales a position into global coordinates from window coordinates. + Doesn't convert to the closest integer like SK.SCALE.POSITION.INTO.VIEWER) + + (create POSITION + XCOORD _ (QUOTIENT (fetch (POSITION XCOORD) of POS) + SCALE) + YCOORD _ (QUOTIENT (fetch (POSITION YCOORD) of POS) + SCALE]) + +(SK.MAKE.POSITION.INTEGER + [LAMBDA (POS) (* rrb "11-Sep-86 14:35") + (* makes sure a position has integer + coordinates) + (COND + ((AND (FIXP (fetch (POSITION XCOORD) of POS)) + (FIXP (fetch (POSITION YCOORD) of POS))) (* avoid creation if possible) + POS) + (T (create POSITION + XCOORD _ (FIXR (fetch (POSITION XCOORD) of POS)) + YCOORD _ (FIXR (fetch (POSITION YCOORD) of POS]) + +(SCALE.POSITION.INTO.SKETCHW + [LAMBDA (POS SKETCHW) (* rrb "11-Jul-86 15:52") + (* scales a position into a sketch + window using its scale factor.) + (SK.SCALE.POSITION.INTO.VIEWER POS (VIEWER.SCALE SKETCHW]) + +(UNSCALE + [LAMBDA (COORD SCALE) (* unscales a coordinate) + (TIMES COORD SCALE]) + +(UNSCALE.REGION + [LAMBDA (REGION SCALE) (* rrb "15-AUG-83 17:31") + (* scales a region from a window + region to the larger coordinate space.) + (CREATEREGION (TIMES SCALE (fetch (REGION LEFT) of REGION)) + (TIMES SCALE (fetch (REGION BOTTOM) of REGION)) + (TIMES SCALE (fetch (REGION WIDTH) of REGION)) + (TIMES SCALE (fetch (REGION HEIGHT) of REGION]) +) + + + +(* ;; "misc IO functions") + +(DEFINEQ + +(STATUSPRINT + [LAMBDA NEXPS (* rrb "26-Jun-84 09:42") + + (* prints a list of expressions in the status window associated with another + window. If the first arg is a window or a process, its prompt window is used. + Otherwise, the global prompt window is used.) + + (OR (EQ NEXPS 0) + (PROG (WIN (BEG 1)) + (COND + ((WINDOWP (ARG NEXPS 1)) + (SETQ BEG 2) + (SETQ WIN (MYGETPROMPTWINDOW (ARG NEXPS 1) + 2))) + [(PROCESSP (ARG NEXPS 1)) + (SETQ BEG 2) + (COND + ([AND (HASTTYWINDOWP (ARG NEXPS 1)) + (SETQ WIN (OPENWP (PROCESS.TTY (ARG NEXPS 1] + (SETQ WIN (GETPROMPTWINDOW WIN))) + (T (SETQ WIN PROMPTWINDOW] + ((EQ (ARG NEXPS 1) + T) + (SETQ BEG 2) + (SETQ WIN (TTYDISPLAYSTREAM))) + [(HASTTYWINDOWP (THIS.PROCESS)) + (SETQ WIN (GETPROMPTWINDOW (TTYDISPLAYSTREAM] + (T (SETQ WIN PROMPTWINDOW))) + (for X from BEG to NEXPS do (PRIN1 (ARG NEXPS X) + WIN]) + +(CLEARPROMPTWINDOW + [LAMBDA (W) (* rrb "28-Nov-84 11:20") + + (* clears the prompt window of a window. IF W is NIL, clears the global one.) + + (COND + [(WINDOWP W) + (PROG (PWIN) + (AND (SETQ PWIN (GETPROMPTWINDOW W NIL NIL T)) + (OPENWP PWIN) + (CLEARW PWIN] + (T (CLRPROMPT]) + +(CLOSEPROMPTWINDOW + [LAMBDA (WINDOW) (* rrb "20-Nov-85 10:26") + (* clears and closes the prompt window + for a window.) + (PROG [(PROMPTW (OPENWP (GETPROMPTWINDOW WINDOW NIL NIL T] + (COND + (PROMPTW (CLEARW PROMPTW) + (DETACHWINDOW PROMPTW) + (CLOSEW PROMPTW]) + +(MYGETPROMPTWINDOW + [LAMBDA (MAINW NLINES FONT DONTCREATE) (* rrb "28-Aug-85 11:10") + (* a version of GETPROMPTWINDOW that + is locally closable.) + (PROG ((PROMPTW (GETPROMPTWINDOW (ARG NEXPS 1) + 2 + (OR FONT (DEFAULTFONT 'DISPLAY)) + DONTCREATE))) + [COND + (PROMPTW (* make it locally closeable) + (WINDOWADDPROP PROMPTW 'CLOSEFN (FUNCTION DETACHWINDOW] + (RETURN PROMPTW]) + +(PROMPT.GETINPUT + [LAMBDA (WINDOW PROMPTSTRING DEFAULTSTRING DELIMITER.LIST) (* rrb "23-May-84 14:39") + (* Ask for input (file names, &c) + perhaps with a default.) + (PROG (PROMPTWIN) + (COND + (WINDOW (SETQ PROMPTWIN (GETPROMPTWINDOW WINDOW)) + (FRESHLINE PROMPTWIN)) + ((SETQ PROMPTWIN PROMPTWINDOW) + (CLEARW PROMPTWIN))) + (RETURN (PROMPTFORWORD PROMPTSTRING DEFAULTSTRING NIL PROMPTWIN NIL NIL + (OR DELIMITER.LIST (CHARCODE (EOL LF TAB ESCAPE))) + NIL]) +) + + + +(* ;; "fns for dealing with display priorities") + +(DEFINEQ + +(SK.SEND.TO.BOTTOM + [LAMBDA (W) (* rrb "24-Sep-86 16:39") + + (* allows the user to select an element or group of elements and puts them on the + bottom of the priority stack.) + + (SK.EVAL.AS.PROCESS (LIST 'SK.SEL.AND.CHANGE.PRIORITY (KWOTE W)) + W]) + +(SK.BRING.TO.TOP + [LAMBDA (W) (* rrb "24-Sep-86 16:39") + + (* allows the user to select an element or group of elements and brings them to + the top of the priority stack.) + + (SK.EVAL.AS.PROCESS (LIST 'SK.SEL.AND.CHANGE.PRIORITY (KWOTE W) + T) + W]) + +(SK.SWITCH.PRIORITIES + [LAMBDA (W) (* rrb "24-Sep-86 15:21") + + (* allows the user to select two elements and switches their positions in the + priority stack.) + + (SK.EVAL.AS.PROCESS (LIST 'SK.SEL.AND.SWITCH.PRIORITIES (KWOTE W)) + W]) + +(SK.SEL.AND.CHANGE.PRIORITY + [LAMBDA (W TOTOPFLG) (* rrb "24-Sep-86 16:39") + + (* lets the user select one or more elements and moves them to the top or the + bottom of the priority stack depending on WHERE) + + (PROG ((SELELTS (SK.SELECT.MULTIPLE.ITEMS W T))) + (OR SELELTS (RETURN)) + (SETQ SELELTS (SK.SORT.ELTS.BY.PRIORITY SELELTS)) + (COND + (TOTOPFLG (SK.BRING.ELEMENTS.TO.TOP SELELTS W)) + (T (SK.SEND.ELEMENTS.TO.BOTTOM SELELTS W]) + +(SK.SEL.AND.SWITCH.PRIORITIES + [LAMBDA (W) (* rrb "26-Sep-86 16:14") + + (* lets the user select a group of elements and reorderes them from the top to + bottom.) + + (PROG ((SELELTS (SK.SELECT.MULTIPLE.ITEMS W T)) + SKETCH GELT NEWGELT PRIORITY) + (OR (CDR SELELTS) + (RETURN)) + (OR (SETQ SKETCH (INSURE.SKETCH W)) + (RETURN)) + (SETQ SELELTS (SK.SORT.ELTS.BY.PRIORITY SELELTS)) + (SK.DO.AND.RECORD.CHANGES (for ELT in SELELTS as TOELT in (REVERSE SELELTS) + collect (SETQ GELT (fetch (SCREENELT GLOBALPART) of ELT)) + (SETQ NEWGELT (SK.COPY.GLOBAL.ELEMENT.AND.PROPERTY.LIST + GELT)) + [SK.SET.ELEMENT.PRIORITY NEWGELT + (SETQ PRIORITY (SK.ELEMENT.PRIORITY + (fetch (SCREENELT GLOBALPART) + of TOELT] + (create SKHISTORYCHANGESPEC + NEWELT _ NEWGELT + OLDELT _ GELT + PROPERTY _ 'PRIORITY + NEWVALUE _ PRIORITY + OLDVALUE _ (SK.ELEMENT.PRIORITY GELT))) + W T T) + (REDISPLAYW W]) + +(SK.SORT.ELTS.BY.PRIORITY + [LAMBDA (LOCALELTS) (* rrb "24-Sep-86 15:57") + (* sorts a list of local elements by + their priority top most element first) + (SORT LOCALELTS (FUNCTION (LAMBDA (A B) + (GREATERP (SK.ELEMENT.PRIORITY (fetch (SCREENELT GLOBALPART) + of A)) + (SK.ELEMENT.PRIORITY (fetch (SCREENELT GLOBALPART) + of B]) + +(SK.SORT.GELTS.BY.PRIORITY + [LAMBDA (GLOBALELTS) (* rrb "25-Sep-86 15:19") + (* sorts a list of local elements by + their priority bottom most element + first) + (SORT GLOBALELTS (FUNCTION (LAMBDA (A B) + (LESSP (SK.ELEMENT.PRIORITY A) + (SK.ELEMENT.PRIORITY B]) + +(SORT.CHANGESPECS.BY.NEW.PRIORITY + [LAMBDA (CHANGESPECLST) (* rrb "25-Sep-86 13:51") + + (* sorts a list of changespecs so that the first change spec element in the list + is the lowest priority, etc.) + + (SORT CHANGESPECLST (FUNCTION (LAMBDA (A B) + (LESSP (SK.ELEMENT.PRIORITY (fetch (SKHISTORYCHANGESPEC NEWELT) + of A)) + (SK.ELEMENT.PRIORITY (fetch (SKHISTORYCHANGESPEC NEWELT) + of B]) + +(SORT.CHANGESPECS.BY.OLD.PRIORITY + [LAMBDA (CHANGESPECLST) (* rrb "25-Sep-86 13:54") + + (* sorts a list of changespecs so that the first change spec element in the list + is the lowest priority, etc.) + + (SORT CHANGESPECLST (FUNCTION (LAMBDA (A B) + (LESSP (SK.ELEMENT.PRIORITY (fetch (SKHISTORYCHANGESPEC OLDELT) + of A)) + (SK.ELEMENT.PRIORITY (fetch (SKHISTORYCHANGESPEC OLDELT) + of B]) + +(SK.SEND.ELEMENTS.TO.BOTTOM + [LAMBDA (ELEMENTS VIEWER) (* rrb "24-Sep-86 18:06") + + (* * sets the priority of elements so that they all appear on the bottom. + ELEMENTS are sorted so the topmost element is first.) + + (PROG ((SKETCH (INSURE.SKETCH VIEWER)) + LOWEST GELT NEWGELT) + (OR SKETCH (RETURN)) (* find the lowest priority element so + that all these do below it.) + (SETQ LOWEST (SK.LOW.PRIORITY SKETCH)) + (SK.DO.AND.RECORD.CHANGES (for ELT in ELEMENTS + collect (SETQ LOWEST (SUB1 LOWEST)) + (SETQ GELT (fetch (SCREENELT GLOBALPART) of ELT)) + (SETQ NEWGELT (SK.COPY.GLOBAL.ELEMENT.AND.PROPERTY.LIST + GELT)) + (SK.SET.ELEMENT.PRIORITY NEWGELT LOWEST) + (create SKHISTORYCHANGESPEC + NEWELT _ NEWGELT + OLDELT _ GELT + PROPERTY _ 'PRIORITY + NEWVALUE _ LOWEST + OLDVALUE _ (SK.ELEMENT.PRIORITY GELT))) + VIEWER T T) + (SK.LOW.PRIORITY SKETCH LOWEST) + (REDISPLAYW VIEWER]) + +(SK.BRING.ELEMENTS.TO.TOP + [LAMBDA (ELEMENTS W) (* rrb "26-Sep-86 16:15") + (* sets the priority of the elements + ELEMENTS so that they are on top.) + (PROG ((SKETCH (INSURE.SKETCH W)) + HIGHEST GELT NEWGELT) + (OR SKETCH (RETURN)) + (SETQ HIGHEST (SK.HIGH.PRIORITY SKETCH)) + + (* the elements are ordered from highest to lowest, reverse them so that they + stay in the same order.) + + (SK.DO.AND.RECORD.CHANGES (for ELT in (REVERSE ELEMENTS) + collect (SETQ HIGHEST (ADD1 HIGHEST)) + (SETQ GELT (fetch (SCREENELT GLOBALPART) of ELT)) + (SETQ NEWGELT (SK.COPY.GLOBAL.ELEMENT.AND.PROPERTY.LIST + GELT)) + (SK.SET.ELEMENT.PRIORITY NEWGELT HIGHEST) + (create SKHISTORYCHANGESPEC + NEWELT _ NEWGELT + OLDELT _ GELT + PROPERTY _ 'PRIORITY + NEWVALUE _ HIGHEST + OLDVALUE _ (SK.ELEMENT.PRIORITY GELT))) + W T T) + (SK.HIGH.PRIORITY SKETCH HIGHEST) + (REDISPLAYW W]) + +(SK.COPY.GLOBAL.ELEMENT.AND.PROPERTY.LIST + [LAMBDA (GELT) (* rrb "24-Sep-86 17:26") + + (* makes a copy of a global sketch element that has the property list copied as + well.) + + (PROG ((COMGLOBPART (fetch (GLOBALPART COMMONGLOBALPART) of GELT))) + (RETURN (create GLOBALPART + COMMONGLOBALPART _ (create COMMONGLOBALPART + MINSCALE _ (fetch (COMMONGLOBALPART MINSCALE) + of COMGLOBPART) + MAXSCALE _ (fetch (COMMONGLOBALPART MAXSCALE) + of COMGLOBPART) + SKELEMENTPROPLIST _ (APPEND (fetch ( + COMMONGLOBALPART + + SKELEMENTPROPLIST + ) of + COMGLOBPART + ))) + INDIVIDUALGLOBALPART _ (fetch (GLOBALPART INDIVIDUALGLOBALPART) of GELT]) +) +(DEFINEQ + +(SK.ELEMENT.PRIORITY + [LAMBDA (GELEMENT) (* rrb "30-Aug-86 17:52") + (* fetchs the priority of an element.) + (OR (LISTGET (fetch (GLOBALPART SKELEMENTPROPLIST) of GELEMENT) + 'PRI) + 0]) + +(SK.SET.ELEMENT.PRIORITY + [LAMBDA (GELEMENT PRIORITY) (* rrb "30-Aug-86 20:50") + + (* * sets the priority of an element.) + (* keeps the priority first because it + is looked at every display.) + (PROG ((PLIST (fetch (GLOBALPART SKELEMENTPROPLIST) of GELEMENT))) + [COND + [PLIST (COND + ((EQ (CAR PLIST) + 'PRI) + (RPLACA (CDR PLIST) + PRIORITY)) + (T (replace (GLOBALPART SKELEMENTPROPLIST) of GELEMENT + with (CONS 'PRI (CONS PRIORITY PLIST] + (T (replace (GLOBALPART SKELEMENTPROPLIST) of GELEMENT with (LIST 'PRI PRIORITY] + (RETURN PRIORITY]) + +(SK.POP.NEXT.PRIORITY + [LAMBDA (SKETCH) (* rrb "24-Sep-86 17:19") + (* gets the next highest priority) + (PROG ((PRIORITYCELL (SK.PRIORITY.CELL SKETCH))) + (RETURN (CAR (RPLACA PRIORITYCELL (ADD1 (CAR PRIORITYCELL]) + +(SK.PRIORITY.CELL + [LAMBDA (SKETCH) (* rrb "24-Sep-86 17:16") + (OR (GETSKETCHPROP SKETCH 'PRIRANGE) + (PUTSKETCHPROP SKETCH 'PRIRANGE (CONS 0 0]) + +(SK.HIGH.PRIORITY + [LAMBDA (SKETCH VALUE) (* rrb "24-Sep-86 17:21") + (* sets a new value of the highest + priority element.) + (PROG ((CELL (SK.PRIORITY.CELL SKETCH))) + (RETURN (PROG1 (CAR CELL) + (COND + ((NUMBERP VALUE) + (RPLACA CELL VALUE))))]) + +(SK.LOW.PRIORITY + [LAMBDA (SKETCH VALUE) (* rrb "24-Sep-86 17:22") + (* reads and sets a new value of the + lowest priority element.) + (PROG ((CELL (SK.PRIORITY.CELL SKETCH))) + (RETURN (PROG1 (CDR CELL) + (COND + ((NUMBERP VALUE) + (RPLACD CELL VALUE))))]) +) + + + +(* ;; "functions for dealing with display elements.") + +(DEFINEQ + +(DRAW.LOCAL.SKETCH + [LAMBDA (LOCALSPECS STREAM STREAMREGION SCALE) (* ; "Edited 3-May-2023 21:00 by lmm") + (* ; "Edited 2-May-2023 13:28 by lmm") + (* ; "Edited 24-Mar-92 14:00 by jds") + + (* ;; "draws the local specs on a stream") + + (* ;; "set priority of the stream in case mode is set to REPLACE or ERASE --- would be better to scan list looking for an element that actually has one of these.") + + (SET.PRIORITYIMPORTANT STREAM 1) + [MAPSKETCHSPECS LOCALSPECS (FUNCTION SK.DRAWFIGURE) + STREAM STREAMREGION (OR (NUMBERP SCALE) + (AND (WINDOWP STREAM) + (VIEWER.SCALE STREAM](* ; + "turn the priority off so that the rest of the file procedes at speed.") + (SET.PRIORITYIMPORTANT STREAM 0]) + +(SET.PRIORITYIMPORTANT + [LAMBDA (STREAM TOVAL) (* ; "Edited 2-May-2023 09:10 by lmm") + (* rrb "26-Sep-86 15:11") + (* sets the PriorityImportant variable + in an interpress master.) + (COND + ((IMAGESTREAMTYPEP STREAM 'INTERPRESS) + (APPENDINTEGER.IP STREAM TOVAL) + (ISET.IP STREAM (\IPC PRIORITYIMPORTANT]) + +(SK.FIGUREIMAGE + [LAMBDA (SCRITEMS LIMITREGION REGIONOFINTEREST) (* rrb "30-Sep-86 18:33") + + (* returns a bitmap which contains the image of the elements on SCRITEMS. + And a lower left corner.) + + (RESETFORM (CURSOR WAITINGCURSOR) + (PROG (REGION DSPSTREAM BITMAP LEFT BOTTOM LIMITDIM) + (COND + ((NULL SCRITEMS) + (RETURN))) + [COND + ((SCREENELEMENTP SCRITEMS) (* single item case.) + (SETQ REGION (SK.ITEM.REGION SCRITEMS))) + (T (SETQ REGION (SK.ITEM.REGION (CAR SCRITEMS))) + [for SCITEM in (CDR SCRITEMS) do (SETQ REGION (SK.UNIONREGIONS REGION + (SK.ITEM.REGION SCITEM] + (* order the elements by priority) + (SETQ SCRITEMS (REVERSE (SK.SORT.ELTS.BY.PRIORITY SCRITEMS] + (* only some of the points are being + moved, reduce the region to those.) + (AND REGIONOFINTEREST (SETQ REGION (OR (INTERSECTREGIONS REGION REGIONOFINTEREST) + REGION))) + [COND + (LIMITREGION + + (* limit the size of the bitmap. This is used by copy insert functions that do + not know how big the thing coming in is.) + + (COND + ((GREATERP (fetch (REGION WIDTH) of REGION) + (SETQ LIMITDIM (fetch (REGION WIDTH) of LIMITREGION))) + (* reduce the width picking out the + middle of the region) + (replace (REGION LEFT) of REGION + with (PLUS (fetch (REGION LEFT) of REGION) + (QUOTIENT (DIFFERENCE LIMITDIM (fetch (REGION WIDTH) + of REGION)) + 2))) + (replace (REGION WIDTH) of REGION with LIMITDIM))) + (COND + ((GREATERP (fetch (REGION HEIGHT) of REGION) + (SETQ LIMITDIM (fetch (REGION HEIGHT) of LIMITREGION))) + (* reduce the height picking out the + middle of the region) + (replace (REGION BOTTOM) of REGION + with (PLUS (fetch (REGION BOTTOM) of REGION) + (QUOTIENT (DIFFERENCE LIMITDIM (fetch (REGION HEIGHT) + of REGION)) + 2))) + (replace (REGION HEIGHT) of REGION with LIMITDIM] + (* ADD1 is used to convert the + possibly floating region coordinates + into fixed.) + [SETQ DSPSTREAM (DSPCREATE (SETQ BITMAP (BITMAPCREATE (ADD1 (fetch (REGION WIDTH) + of REGION)) + (ADD1 (fetch (REGION HEIGHT) + of REGION] + (DSPXOFFSET [IMINUS (SETQ LEFT (FIXR (fetch (REGION LEFT) of REGION] + DSPSTREAM) + (DSPYOFFSET [IMINUS (SETQ BOTTOM (FIXR (fetch (REGION BOTTOM) of REGION] + DSPSTREAM) + + (* this is because the default clipping region is smaller than the clipping + region of the figure in extreme cases.) + + (DSPCLIPPINGREGION REGION DSPSTREAM) + (DSPOPERATION 'PAINT DSPSTREAM) (* to avoid carriage returns.) + (DSPRIGHTMARGIN (PLUS 100 (fetch (REGION RIGHT) of REGION)) + DSPSTREAM) + (DRAW.LOCAL.SKETCH SCRITEMS DSPSTREAM REGION) + (RETURN (create SKFIGUREIMAGE + SKFIGURE.LOWERLEFT _ (create POSITION + XCOORD _ LEFT + YCOORD _ BOTTOM) + SKFIGURE.BITMAP _ BITMAP]) +) + + + +(* ;; "functions for hardcopying") + +(DEFINEQ + +(SKETCHW.HARDCOPYFN + [LAMBDA (SKETCHW OPENIMAGESTREAM) (* ; "Edited 20-Aug-92 13:33 by jds") + (* ; + "dumps the sketch onto OPENIMAGESTREAM.") + (* ; + "centers it within the DSPCLIPPINGREGION of OPENIMAGESTREAM") + (PROG ((SKETCH (INSURE.SKETCH (SKETCH.FROM.VIEWER SKETCHW))) + (PAGEREGION (DSPCLIPPINGREGION NIL OPENIMAGESTREAM)) + (SKETCHREGION (SKETCH.REGION.VIEWED SKETCHW)) + (SCALE (VIEWER.SCALE SKETCHW)) + SKETCHREGIONINPAGECOORDS PAGELEFTSPACE PAGEBOTTOMSPACE PAGETOSKETCHFACTOR SKETCHX) + (OR SKETCH (RETURN)) + (SPAWN.MOUSE) + + (* ;; "move the margins out of the way") + + (* ;; "smallp is to maintain compatibility with koto. For Lute release, this could be increased. (DONE: JDS 8/2-0/92)") + + (DSPLEFTMARGIN (MIN 0 (fetch (REGION LEFT) of PAGEREGION)) + OPENIMAGESTREAM) + (DSPBOTTOMMARGIN (MIN 0 (fetch (REGION BOTTOM) of PAGEREGION)) + OPENIMAGESTREAM) + (DSPTOPMARGIN (MAX MAX.FIXP (fetch (REGION TOP) of PAGEREGION)) + OPENIMAGESTREAM) + (DSPRIGHTMARGIN (MAX MAX.FIXP (fetch (REGION RIGHT) of PAGEREGION)) + OPENIMAGESTREAM) + + (* ;; "PAGETOSKETCHFACTOR is the factor to multiply the page coordinates by to get into sketch coordinates.") + + (STATUSPRINT SKETCHW "Hardcopying ...") + [STREAMPROP OPENIMAGESTREAM 'PRINTOPTIONS (APPEND (LIST 'DOCUMENT.NAME (OR (SKETCH.TITLE + SKETCHW) + "A Sketch")) + (STREAMPROP OPENIMAGESTREAM 'PRINTOPTIONS] + (SETQ PAGETOSKETCHFACTOR (FQUOTIENT SCALE (DSPSCALE NIL OPENIMAGESTREAM))) + (SETQ SKETCHREGIONINPAGECOORDS (SCALE.REGION.OUT SKETCHREGION PAGETOSKETCHFACTOR)) + (COND + ((AND (IMAGESTREAMTYPEP OPENIMAGESTREAM 'INTERPRESS) + (GREATERP (fetch (REGION WIDTH) of SKETCHREGIONINPAGECOORDS) + (fetch (REGION WIDTH) of PAGEREGION)) + (GREATERP (fetch (REGION WIDTH) of SKETCHREGIONINPAGECOORDS) + (fetch (REGION HEIGHT) of SKETCHREGIONINPAGECOORDS))) + (* ; "Print in landscape mode") + (* ; + "only know the hack for interpress streams.") + (* ; + "Hack to coerce interpress stream into landscapemode") + + (* ;; "It's Landscape mode. PRINTERMODE may be looked up by POLYSHADE.IP") + + (NCONC (fetch (STREAM OTHERPROPS) of OPENIMAGESTREAM) + '(PRINTERMODE LANDSCAPE)) + (ROTATE.IP OPENIMAGESTREAM 90) + (CONCATT.IP OPENIMAGESTREAM) + (TRANSLATE.IP OPENIMAGESTREAM 0 -21590) + (CONCATT.IP OPENIMAGESTREAM) + (DSPCLIPPINGREGION (SETQ PAGEREGION (SK.SWITCH.REGION.X.AND.Y PAGEREGION)) + OPENIMAGESTREAM) (* ; "End HACK") + )) + (SETQ PAGELEFTSPACE (QUOTIENT (DIFFERENCE (fetch (REGION WIDTH) of PAGEREGION) + (fetch (REGION WIDTH) of SKETCHREGIONINPAGECOORDS)) + 2)) + (SETQ PAGEBOTTOMSPACE (QUOTIENT (DIFFERENCE (fetch (REGION HEIGHT) of PAGEREGION) + (fetch (REGION HEIGHT) of SKETCHREGIONINPAGECOORDS)) + 2)) + + (* ;; "translate the sketch so that the lower left corner of the sketch region is at the lower left corner of the image on the page.") + + [SETQ SKETCHX (TRANSLATE.SKETCH SKETCH (MINUS (TIMES (DIFFERENCE + (SETQ PAGELEFTSPACE + (PLUS (fetch (REGION LEFT) + of PAGEREGION) + PAGELEFTSPACE)) + (fetch (REGION LEFT) of + SKETCHREGIONINPAGECOORDS + )) + PAGETOSKETCHFACTOR)) + (MINUS (TIMES (DIFFERENCE (SETQ PAGEBOTTOMSPACE + (PLUS (fetch (REGION BOTTOM) of PAGEREGION) + PAGEBOTTOMSPACE)) + (fetch (REGION BOTTOM) of + SKETCHREGIONINPAGECOORDS + )) + PAGETOSKETCHFACTOR] + (* ; + "calculate the local parts for the interpress sketch.") + (SETQ SKETCHX (MAKE.LOCAL.SKETCH SKETCHX (CREATEREGION (TIMES PAGELEFTSPACE + PAGETOSKETCHFACTOR) + (TIMES PAGEBOTTOMSPACE PAGETOSKETCHFACTOR) + (fetch (REGION WIDTH) of SKETCHREGION) + (fetch (REGION HEIGHT) of SKETCHREGION)) + PAGETOSKETCHFACTOR OPENIMAGESTREAM)) + (DRAW.LOCAL.SKETCH SKETCHX OPENIMAGESTREAM (CREATEREGION PAGELEFTSPACE PAGEBOTTOMSPACE + (fetch (REGION WIDTH) of + SKETCHREGIONINPAGECOORDS + ) + (fetch (REGION HEIGHT) of + SKETCHREGIONINPAGECOORDS + ))) + (STATUSPRINT SKETCHW " done.") + (RETURN OPENIMAGESTREAM]) + +(SK.LIST.IMAGE + [LAMBDA (SKETCHW FILE IMAGETYPE DONTLISTFLG) (* ; "Edited 20-Aug-92 13:42 by jds") + + (* ;; "makes an image file from the sketch in a window even if it takes more than one page.") + + (PROG ((SKETCH (INSURE.SKETCH (SKETCH.FROM.VIEWER SKETCHW))) + (VIEWREGION (DSPCLIPPINGREGION NIL SKETCHW)) + (SCALE (VIEWER.SCALE SKETCHW)) + PAGEREGION OPENIMAGESTREAM PAGEOVERLAPMARGIN SKETCHREGION SKETCHLOCALELTS + SKETCHREGIONINPAGECOORDS LEFTSTART BOTTOMSTART RIGHTEND BOTTOMEND PAGETOSKETCHFACTOR + PAGEHEIGHTINSKETCHCOORDS PAGEWIDTHINSKETCHCOORDS) + (OR SKETCH (RETURN)) + (SPAWN.MOUSE) + (STATUSPRINT SKETCHW "Hardcopying ... ") + (SETQ OPENIMAGESTREAM (OPENIMAGESTREAM FILE IMAGETYPE)) + (SETQ PAGEREGION (DSPCLIPPINGREGION NIL OPENIMAGESTREAM)) + (* ; "move the margins out of the way") + (DSPLEFTMARGIN (MIN 0 (fetch (REGION LEFT) of PAGEREGION)) + OPENIMAGESTREAM) + (DSPBOTTOMMARGIN (MIN 0 (fetch (REGION BOTTOM) of PAGEREGION)) + OPENIMAGESTREAM) + (DSPTOPMARGIN (MAX MAX.FIXP (fetch (REGION TOP) of PAGEREGION)) + OPENIMAGESTREAM) + (DSPRIGHTMARGIN (MAX MAX.FIXP (fetch (REGION RIGHT) of PAGEREGION)) + OPENIMAGESTREAM) + + (* ;; "calculate the local elements for all the sketch elements at this scale. This is done because the region testing routines all work on local elements. The local elements will be made again for each page; wasteful but should demonstrate the capability.") + + (SETQ SKETCHLOCALELTS (for SKELT in (fetch (SKETCH SKETCHELTS) of SKETCH) + collect (SK.LOCAL.FROM.GLOBAL SKELT SKETCHW SCALE))) + (SETQ SKETCHREGION (SK.GLOBAL.REGION.OF.LOCAL.ELEMENTS SKETCHLOCALELTS SCALE)) + + (* ;; "PAGETOSKETCHFACTOR is the factor to multiply the page coordinates by to get into sketch coordinates.") + + (SETQ PAGETOSKETCHFACTOR (FQUOTIENT SCALE (DSPSCALE NIL OPENIMAGESTREAM))) + (SETQ SKETCHREGIONINPAGECOORDS (SCALE.REGION.OUT SKETCHREGION PAGETOSKETCHFACTOR)) + (* ; + "should check here for wider than high and rotate it or use landscape imagestream.") + [COND + ((AND (ILESSP (fetch (REGION WIDTH) of SKETCHREGIONINPAGECOORDS) + (fetch (REGION WIDTH) of PAGEREGION)) + (ILESSP (fetch (REGION HEIGHT) of SKETCHREGIONINPAGECOORDS) + (fetch (REGION HEIGHT) of PAGEREGION))) + (* ; + "whole image fits on one page, center it") + (SETQ LEFTSTART (QUOTIENT (DIFFERENCE (fetch (REGION WIDTH) of PAGEREGION) + (fetch (REGION WIDTH) of SKETCHREGIONINPAGECOORDS)) + 2)) + (SETQ BOTTOMSTART (QUOTIENT (DIFFERENCE (fetch (REGION HEIGHT) of PAGEREGION) + (fetch (REGION HEIGHT) of SKETCHREGIONINPAGECOORDS)) + 2)) + (\SK.LIST.PAGE.IMAGE OPENIMAGESTREAM SKETCHREGION SKETCHLOCALELTS PAGETOSKETCHFACTOR + (CREATEREGION LEFTSTART BOTTOMSTART (fetch (REGION WIDTH) of + SKETCHREGIONINPAGECOORDS + ) + (fetch (REGION HEIGHT) of SKETCHREGIONINPAGECOORDS)) + SCALE)) + (T (* ; + "put sketch on multiple pages. Might also try scaling it to fit.") + (* ; + "leave a half inch so that the pages can be taped together.") + (SETQ PAGEOVERLAPMARGIN (TIMES 36 (DSPSCALE NIL OPENIMAGESTREAM))) + (SETQ PAGEREGION (CREATEREGION (fetch (REGION LEFT) of PAGEREGION) + (fetch (REGION BOTTOM) of PAGEREGION) + (DIFFERENCE (fetch (REGION WIDTH) of PAGEREGION) + PAGEOVERLAPMARGIN) + (DIFFERENCE (fetch (REGION HEIGHT) of PAGEREGION) + PAGEOVERLAPMARGIN))) + (SETQ PAGEWIDTHINSKETCHCOORDS (TIMES (fetch (REGION WIDTH) of PAGEREGION) + PAGETOSKETCHFACTOR)) + (SETQ PAGEHEIGHTINSKETCHCOORDS (TIMES (fetch (REGION HEIGHT) of PAGEREGION) + PAGETOSKETCHFACTOR)) + + (* ;; "adjust sketch region to center the image within the multiple pages. This is mostly to cover the case of a wide but not high image that extents across multiple pages.") + + [COND + ([NOT (ZEROP (SETQ LEFTSTART (REMAINDER (fetch (REGION WIDTH) of SKETCHREGION) + PAGEWIDTHINSKETCHCOORDS] + (* ; + "unless the sketch is right on a page boundary, leave half the room in front.") + (SETQ LEFTSTART (QUOTIENT (DIFFERENCE PAGEWIDTHINSKETCHCOORDS LEFTSTART) + 2] + (SETQ LEFTSTART (DIFFERENCE (fetch (REGION LEFT) of SKETCHREGION) + LEFTSTART)) + [COND + ([NOT (ZEROP (SETQ BOTTOMSTART (REMAINDER (fetch (REGION HEIGHT) of SKETCHREGION) + PAGEHEIGHTINSKETCHCOORDS] + (* ; + "unless the sketch is right on a page boundary, leave half the room in front.") + (SETQ BOTTOMSTART (QUOTIENT (DIFFERENCE PAGEHEIGHTINSKETCHCOORDS BOTTOMSTART) + 2] + (SETQ BOTTOMSTART (DIFFERENCE (PLUS (fetch (REGION TOP) of SKETCHREGION) + BOTTOMSTART) + PAGEHEIGHTINSKETCHCOORDS)) + (SETQ BOTTOMEND (DIFFERENCE (fetch (REGION BOTTOM) of SKETCHREGION) + PAGEHEIGHTINSKETCHCOORDS)) + (SETQ RIGHTEND (fetch (REGION RIGHT) of SKETCHREGION)) + (STATUSPRINT SKETCHW (TIMES (IQUOTIENT (DIFFERENCE (PLUS RIGHTEND (SUB1 + PAGEWIDTHINSKETCHCOORDS + )) + LEFTSTART) + PAGEWIDTHINSKETCHCOORDS) + (IQUOTIENT (DIFFERENCE (PLUS BOTTOMSTART (SUB1 + PAGEHEIGHTINSKETCHCOORDS + )) + BOTTOMEND) + PAGEHEIGHTINSKETCHCOORDS)) + " pgs...") + (bind (PGN _ 0) for PGBOTTOM from BOTTOMSTART to BOTTOMEND by (MINUS + PAGEHEIGHTINSKETCHCOORDS + ) as PGROW + from 1 + do (* ; + "unless this is the first line of pages, put out new page.") + (OR (EQ PGROW 1) + (DSPNEWPAGE OPENIMAGESTREAM)) + (for PGLEFT from LEFTSTART to RIGHTEND by PAGEWIDTHINSKETCHCOORDS as PGCOL + from 1 do (* ; + "unless this is the first page on a line of pages, put out new page.") + (OR (EQ PGCOL 1) + (DSPNEWPAGE OPENIMAGESTREAM)) + (\SK.LIST.PAGE.IMAGE OPENIMAGESTREAM (CREATEREGION PGLEFT PGBOTTOM + + PAGEWIDTHINSKETCHCOORDS + + PAGEHEIGHTINSKETCHCOORDS + ) + SKETCHLOCALELTS PAGETOSKETCHFACTOR PAGEREGION SCALE) + (STATUSPRINT SKETCHW (SETQ PGN (ADD1 PGN)) + ",") + + (* ;; "code to put out matrix numbers that I couldn't get to work. (COND ((IMAGESTREAMTYPEP OPENIMAGESTREAM (QUOTE PRESS)) (* Press does better at the left edge so put numbers on the right.) (COND ((LESSP (PLUS PGLEFT PAGEWIDTHINSKETCHCOORDS) (fetch (REGION RIGHT) of SKETCHREGION)) (* unless this is the last page, print a page number in the area that is overlapped.) (* this should change back to the default font of the stream but I don't know how to do that.) (MOVETO (fetch (REGION WIDTH) of PAGEREGION) (PLUS (fetch (REGION HEIGHT) of PAGEREGION) (FONTPROP OPENIMAGESTREAM (QUOTE DESCENT))) OPENIMAGESTREAM) (printout OPENIMAGESTREAM PGROW ', ' PGCOL)))) ((NEQ PGCOL 1) (* Interpress and assumed all others look better at the right edge so put the number on the left.) (* unless this is the first page, print a page number in the area that is overlapped.) (* this should change back to the default font of the stream but I don't know how to do that.) (MOVETO 10 (FONTPROP OPENIMAGESTREAM (QUOTE DESCENT)) OPENIMAGESTREAM) (printout OPENIMAGESTREAM PGROW ', ' PGCOL)))") +] + (SETQ LEFTSTART (CLOSEF OPENIMAGESTREAM)) + (STATUSPRINT SKETCHW "...done.") + (RETURN LEFTSTART]) + +(SK.HARDCOPYIMAGEW + [LAMBDA (SKW) (* ; "Edited 20-Aug-92 13:46 by jds") + + (* ;; "spawns a process to hardcopy a viewer. This is spawned so that the lock on the viewer is released.") + + (ADD.PROCESS (LIST 'HARDCOPYIMAGEW (KWOTE SKW)) + 'NAME + 'SketchHardcopy]) +) +(DEFINEQ + +(SK.DO.HARDCOPYIMAGEW.TOFILE + [LAMBDA (W) (* rrb " 5-May-86 13:38") + (* sketch version of + HARDCOPYIMAGEW.TOFILE that accepts a + candidate file name.) + (RESETFORM (TTY.PROCESS (THIS.PROCESS)) + (LET [(FILE&TYPE (SK.GetImageFile (SK.PRINTER.FILE.CANDIDATE.NAME W] + (COND + (FILE&TYPE (HARDCOPY.SOMEHOW W (CAR FILE&TYPE) + (CDR FILE&TYPE]) + +(SK.HARDCOPYIMAGEW.TOFILE + [LAMBDA (SKW) (* rrb " 5-May-86 13:34") + + (* spawns a process to hardcopy a viewer. + This is spawned so that the lock on the viewer is released.) + + (ADD.PROCESS (LIST 'SK.DO.HARDCOPYIMAGEW.TOFILE (KWOTE SKW)) + 'NAME + 'SketchHardcopy]) + +(SK.HARDCOPYIMAGEW.TOPRINTER + [LAMBDA (SKW) (* rrb "10-Feb-86 14:31") + + (* spawns a process to hardcopy a viewer. + This is spawned so that the lock on the viewer is released.) + + (ADD.PROCESS (LIST 'HARDCOPYIMAGEW.TOPRINTER (KWOTE SKW)) + 'NAME + 'SketchHardcopy]) + +(SK.LIST.IMAGE.ON.FILE + [LAMBDA (SKETCHW) (* rrb " 5-May-86 13:39") + + (* makes a file suitable for the default printing host of the current sketch. + Pretty dumb about file names.) + + (RESETFORM (TTY.PROCESS (THIS.PROCESS)) + (LET [(FILE&TYPE (SK.GetImageFile (SK.PRINTER.FILE.CANDIDATE.NAME SKETCHW] + (COND + (FILE&TYPE (SK.LIST.IMAGE SKETCHW (CAR FILE&TYPE) + (CDR FILE&TYPE]) +) +(DEFINEQ + +(\SK.LIST.PAGE.IMAGE + [LAMBDA (OPENIMAGESTREAM REGIONINSKETCH LOCALSKELTS PAGETOSKETCHFACTOR REGIONONPAGE + SKETCHTOWINDOWFACTOR) (* rrb "30-Dec-85 17:29") + (* draws the image of a set of sketch + elements on an OPENIMAGESTREAM.) + (PROG ((SCALEDSKETCHREGION (SCALE.REGION.OUT REGIONINSKETCH SKETCHTOWINDOWFACTOR)) + ELTSINREGION SKETCHX) + (COND + ((SETQ ELTSINREGION (for LOCALSKELT in LOCALSKELTS when (REGIONSINTERSECTP + SCALEDSKETCHREGION + (SK.ITEM.REGION + LOCALSKELT)) + collect (fetch (SCREENELT GLOBALPART) of LOCALSKELT))) + + (* translate the sketch so that the right stuff appears in the region on the + page.) + + [SETQ SKETCHX (TRANSLATE.SKETCH (create SKETCH + SKETCHELTS _ ELTSINREGION) + (DIFFERENCE (fetch (REGION LEFT) of REGIONINSKETCH) + (TIMES (fetch (REGION LEFT) of REGIONONPAGE) + PAGETOSKETCHFACTOR)) + (DIFFERENCE (fetch (REGION BOTTOM) of REGIONINSKETCH) + (TIMES (fetch (REGION BOTTOM) of REGIONONPAGE) + PAGETOSKETCHFACTOR] + (SETQ SKETCHX (MAKE.LOCAL.SKETCH SKETCHX (CREATEREGION 0 0 (fetch (REGION WIDTH) + of REGIONINSKETCH) + (fetch (REGION HEIGHT) of + REGIONINSKETCH + )) + PAGETOSKETCHFACTOR OPENIMAGESTREAM T)) + (DRAW.LOCAL.SKETCH SKETCHX OPENIMAGESTREAM REGIONONPAGE]) + +(SK.GetImageFile + [LAMBDA (CANDIDATE) (* rrb " 5-May-86 10:41") + (* version of GetImageFile that takes + a candidate name.) + (PROG ((FILE (PopUpWindowAndGetAtom "File name (CR to abort): " CANDIDATE)) + PRINTFILETYPE FILETYPEMENU EXTENSIONSUPPLIED EXTENSIONFORTYPE) + (COND + ((NULL FILE) + (RETURN))) + (SETQ FILETYPEMENU (MakeMenuOfImageTypes "File type?")) + (COND + ((SETQ PRINTFILETYPE (PRINTFILETYPE.FROM.EXTENSION FILE)) + (RETURN (CONS FILE PRINTFILETYPE))) + (T (SETQ PRINTFILETYPE (MENU FILETYPEMENU)) + (COND + ((NULL PRINTFILETYPE) + (RETURN)) + (T (RETURN (CONS FILE PRINTFILETYPE]) + +(SK.PRINTER.FILE.CANDIDATE.NAME + [LAMBDA (VIEWER) (* rrb " 5-May-86 13:30") + + (* * returns the preferred printer file name for a viewer) + + (PROG ((FILENAME (SK.OUTPUT.FILE.NAME (SKETCH.TITLE VIEWER))) + EXTENSION PRINTEXTENSION) + (OR FILENAME (RETURN)) + [COND + ((EQ (SELECTQ (SETQ PRINTEXTENSION (DEFAULTPRINTINGIMAGETYPE)) + (INTERPRESS (SETQ PRINTEXTENSION 'IP)) + NIL) + (FILENAMEFIELD FILENAME 'EXTENSION)) + + (* file name has a printer extension for some reason, propose either a null + extension or hdcpy extension.) + + (COND + (PRINTEXTENSION (SETQ PRINTEREXTENSION NIL)) + (T (SETQ PRINTEREXTENSION 'HDCPY] + (RETURN (PACKFILENAME 'EXTENSION PRINTEXTENSION 'BODY FILENAME]) + +(SK.SET.HARDCOPY.MODE + [LAMBDA (SKETCHW IMAGETYPE) (* rrb "28-Oct-85 16:43") + + (* * changes a sketch window to show things in hardcopy mode.) + + (PROG [NOWTYPE (IMAGETYPEX (OR IMAGETYPE (PRINTERTYPE] + (RETURN (COND + ((OR (NOT (IMAGESTREAMTYPEP SKETCHW 'HARDCOPY)) + (AND (SETQ NOWTYPE (HARDCOPYSTREAMTYPE SKETCHW)) + (NEQ IMAGETYPEX NOWTYPE))) + + (* make the font of the stream be something that will not cause + MAKEHARDCOPYSTREAM to barf on.) + (* flip cursor because finding fonts + can take a while.) + (SKED.CLEAR.SELECTION SKETCHW) + (RESETFORM (CURSOR WAITINGCURSOR) + (DSPFONT (DEFAULTFONT IMAGETYPE) + SKETCHW) + (MAKEHARDCOPYSTREAM SKETCHW IMAGETYPE) + (SK.UPDATE.AFTER.HARDCOPY SKETCHW))) + (T (* already in hardcopy mode.) + (STATUSPRINT SKETCHW "The display is already showing " IMAGETYPE + " output spacing."]) + +(SK.UNSET.HARDCOPY.MODE + [LAMBDA (SKETCHW) (* rrb "28-Oct-85 16:43") + + (* * changes a sketch window to show things in normal display mode.) + + (COND + ((IMAGESTREAMTYPEP (GETSTREAM SKETCHW 'OUTPUT) + 'HARDCOPY) + (SKED.CLEAR.SELECTION SKETCHW) + (UNMAKEHARDCOPYSTREAM SKETCHW) + (SK.UPDATE.AFTER.HARDCOPY SKETCHW]) + +(SK.UPDATE.AFTER.HARDCOPY + [LAMBDA (SKETCHW) (* rrb "11-Jul-86 15:48") + + (* * goes through a sketch window updating those elements that have changed as a + result of a change in mode between normal and hardcopy and redraws the screen.) + + (MAPSKETCHSPECS (LOCALSPECS.FROM.VIEWER SKETCHW) + [FUNCTION (LAMBDA (SKELT SKW SCALE) + (COND + ((MEMB (fetch (SCREENELT GTYPE) of SKELT) + '(TEXT TEXTBOX)) + (ZOOM.UPDATE.ELT SKELT SKW] + SKETCHW + (VIEWER.SCALE SKETCHW)) + (REDISPLAYW SKETCHW]) + +(DEFAULTPRINTINGIMAGETYPE + [LAMBDA NIL (* rrb "20-Mar-85 12:45") + (* returns the image type of the + default printer.) + (* code copied from OPENIMAGESTREAM) + (CAR (MKLIST (PRINTERPROP (PRINTERTYPE (OR (CAR (LISTP DEFAULTPRINTINGHOST)) + DEFAULTPRINTINGHOST)) + 'CANPRINT]) + +(SK.SWITCH.REGION.X.AND.Y + [LAMBDA (REGION) (* rrb " 3-Sep-85 14:50") + (* switchs the X and Y dimensions of a + region.) + (CREATEREGION (fetch (REGION BOTTOM) of REGION) + (fetch (REGION LEFT) of REGION) + (fetch (REGION HEIGHT) of REGION) + (fetch (REGION WIDTH) of REGION]) +) +(DECLARE%: EVAL@COMPILE + +(RPAQQ MICASPERPT 35.27778) + +(RPAQQ IMICASPERPT 35) + +(RPAQQ PTSPERMICA 0.02834646) + + +(CONSTANTS MICASPERPT IMICASPERPT PTSPERMICA) +) + + + +(* ;; "fns to implement transformations on the elements") + +(DEFINEQ + +(SK.SEL.AND.TRANSFORM + [LAMBDA (W TRANSFORMFN TRANSFORMDATA) (* rrb "10-Dec-85 17:25") + + (* lets the user select some elements and moves all of their control points onto + the grid.) + + (SK.TRANSFORM.ELEMENTS (SK.SELECT.MULTIPLE.ITEMS W T NIL 'MOVE) + TRANSFORMFN TRANSFORMDATA W]) + +(SK.TRANSFORM.ELEMENTS + [LAMBDA (SCRELTS TRANSFORMFN TRANSFORMDATA SKW) (* rrb "26-Apr-85 09:08") + + (* changes SCRELTS to the elements that have had each of their control points + transformed by transformfn. TRANSFORMDATA is arbitrary data that is passed to + tranformfn.) + + (PROG (NEWGLOBALS) + + (* computes the scale factor inherent in the transformation so that it doesn't + have to be done on every element that might need it. + It major use is in scaling brush sizes.) + + (SETQ NEWGLOBALS (MAPCOLLECTSKETCHSPECS SCRELTS (FUNCTION SK.TRANSFORM.ITEM) + TRANSFORMFN TRANSFORMDATA (SK.TRANSFORM.SCALE.FACTOR TRANSFORMFN + TRANSFORMDATA) + SKW)) (* make a history entry.) + (SK.ADD.HISTEVENT 'MOVE (for NEWG in NEWGLOBALS as OLDG in SCRELTS when NEWG + collect (LIST (fetch (SCREENELT GLOBALPART) of OLDG) + NEWG)) + SKW) + (RETURN NEWGLOBALS]) + +(SK.TRANSFORM.ITEM + [LAMBDA (SELELT TRANSFORMFN TRANSFORMDATA SCALEFACTOR W) (* rrb "26-Apr-85 09:09") + (* SELELT is a sketch element that was + selected for a transformation + operation.) + (PROG (NEWGLOBAL OLDGLOBAL) + (COND + ((SETQ NEWGLOBAL (SK.TRANSFORM.ELEMENT (SETQ OLDGLOBAL (fetch (SCREENELT GLOBALPART) + of SELELT)) + TRANSFORMFN TRANSFORMDATA SCALEFACTOR)) + (SK.UPDATE.ELEMENT OLDGLOBAL NEWGLOBAL W T) + (RETURN NEWGLOBAL]) + +(SK.TRANSFORM.ELEMENT + [LAMBDA (GELT TRANSFORMFN TRANSFORMDATA SCALEFACTOR) (* rrb "26-Apr-85 09:14") + + (* returns a copy of the global element that has had each of its control points + transformed by transformfn. TRANSFORMDATA is arbitrary data that is passed to + tranformfn.) + + (APPLY* (SK.TRANSFORMFN (fetch (GLOBALPART GTYPE) of GELT)) + GELT TRANSFORMFN TRANSFORMDATA SCALEFACTOR]) + +(SK.TRANSFORM.POINT + [LAMBDA (PT TRANSFORMFN TRANSFORMDATA) (* applies a transformation function + to a position and returns the + transformed point.) + (APPLY* TRANSFORMFN PT TRANSFORMDATA]) + +(SK.TRANSFORM.POINT.LIST + [LAMBDA (PTLST TRANSFORMFN TRANSFORMDATA) (* transforms a list of points) + (for PT in PTLST collect (SK.TRANSFORM.POINT PT TRANSFORMFN TRANSFORMDATA]) + +(SK.TRANSFORM.REGION + [LAMBDA (REG TRANSFORMFN TRANSFORMDATA) (* rrb "31-May-85 10:42") + (* applies a transformation function + to a region and returns the + transformed region) + (PROG (LOWERLEFT UPPERRIGHT) + + (* transform the font by changing the scale according to how much the width of + the box around the first line of text changes from the transformation.) + + (SETQ LOWERLEFT (SK.TRANSFORM.POINT (create POSITION + XCOORD _ (fetch (REGION LEFT) of REG) + YCOORD _ (fetch (REGION BOTTOM) of REG)) + TRANSFORMFN TRANSFORMDATA)) + (SETQ UPPERRIGHT (SK.TRANSFORM.POINT (create POSITION + XCOORD _ (fetch (REGION PRIGHT) of REG) + YCOORD _ (fetch (REGION PTOP) of REG)) + TRANSFORMFN TRANSFORMDATA))(* transformation may have changed the + relative positions of the upper right + and lower left.) + (RETURN (CREATEREGION (MIN (fetch (POSITION XCOORD) of LOWERLEFT) + (fetch (POSITION XCOORD) of UPPERRIGHT)) + (MIN (fetch (POSITION YCOORD) of LOWERLEFT) + (fetch (POSITION YCOORD) of UPPERRIGHT)) + (ABS (DIFFERENCE (fetch (POSITION XCOORD) of UPPERRIGHT) + (fetch (POSITION XCOORD) of LOWERLEFT))) + (ABS (DIFFERENCE (fetch (POSITION YCOORD) of UPPERRIGHT) + (fetch (POSITION YCOORD) of LOWERLEFT]) + +(SK.PUT.ELTS.ON.GRID + [LAMBDA (W) (* rrb "31-Jan-86 10:59") + + (* lets the user select some elements and moves all of their control points onto + the grid.) + + (SK.EVAL.AS.PROCESS (LIST (FUNCTION SK.SEL.AND.TRANSFORM) + (KWOTE W) + (KWOTE (FUNCTION SK.PUT.ON.GRID)) + (KWOTE (SK.GRIDFACTOR W))) + W]) + +(SK.TRANSFORM.GLOBAL.ELEMENTS + [LAMBDA (SCRELTS TRANSFORMFN TRANSFORMDATA) (* rrb "29-Apr-85 12:57") + + (* returns a copy of the global elements that have had each of its control points + transformed by transformfn. TRANSFORMDATA is arbitrary data that is passed to + tranformfn.) + + (MAPGLOBALSKETCHSPECS SCRELTS (FUNCTION SK.TRANSFORM.ELEMENT) + TRANSFORMFN TRANSFORMDATA (SK.TRANSFORM.SCALE.FACTOR TRANSFORMFN TRANSFORMDATA]) + +(GLOBALELEMENTP + [LAMBDA (ELT?) (* rrb "30-Dec-85 15:26") + + (* * returns ELT? if it is a global sketch element.) + + (AND (LISTP ELT?) + (SKETCH.ELEMENT.NAMEP (fetch (GLOBALPART GTYPE) of ELT?)) + ELT?]) + +(SKETCH.LIST.OF.ELEMENTSP + [LAMBDA (ELTS) (* return T if ELTS is a list of + sketch elements.) + (AND (LISTP ELTS) + (for ELT in ELTS always (GLOBALELEMENTP ELT]) + +(SK.TRANSFORM.SCALE.FACTOR + [LAMBDA (TRANSFORMFN TRANSFORMDATA) (* rrb "29-Apr-85 12:09") + + (* calculates scaling factor based on the transform of points. + Since the transform is arbitrary in x and y scaling, this can't really do the + right thing so it computes the area a unit square would have after transformation + and uses that.) + + (COND + ((EQ TRANSFORMFN (FUNCTION SK.PUT.ON.GRID)) (* test for specially in case grid is + larger than unit. Don't change the + scale.) + 1.0) + (T (PROG ((ORG (SK.TRANSFORM.POINT (CONSTANT (create POSITION + XCOORD _ 0 + YCOORD _ 0)) + TRANSFORMFN TRANSFORMDATA)) + (YUNIT (SK.TRANSFORM.POINT (CONSTANT (create POSITION + XCOORD _ 0 + YCOORD _ 1)) + TRANSFORMFN TRANSFORMDATA)) + (XUNIT (SK.TRANSFORM.POINT (CONSTANT (create POSITION + XCOORD _ 1 + YCOORD _ 0)) + TRANSFORMFN TRANSFORMDATA))) + (RETURN (SQRT (TIMES (DISTANCEBETWEEN YUNIT ORG) + (DISTANCEBETWEEN XUNIT ORG]) + +(SK.TRANSFORM.BRUSH + [LAMBDA (BRUSH SCALEFACTOR) (* rrb "26-Apr-85 09:34") + (* returns a brush scaled from size + ORGSCALE to NEWSCALE.) + (create BRUSH using BRUSH BRUSHSIZE _ (TIMES (fetch (BRUSH BRUSHSIZE) of BRUSH) + SCALEFACTOR]) + +(SK.TRANSFORM.ARROWHEADS + [LAMBDA (ARROWHEADS SCALEFACTOR) (* rrb "26-Sep-85 12:17") + (* returns a arrowhead specification + scaled by SCALEFACTOR) + (AND ARROWHEADS (LIST (AND (CAR ARROWHEADS) + (create ARROWHEAD using (CAR ARROWHEADS) + ARROWLENGTH _ (TIMES (fetch (ARROWHEAD + ARROWLENGTH + ) + of (CAR ARROWHEADS)) + SCALEFACTOR))) + (AND (CADR ARROWHEADS) + (create ARROWHEAD using (CADR ARROWHEADS) + ARROWLENGTH _ (TIMES (fetch (ARROWHEAD + ARROWLENGTH + ) + of (CADR ARROWHEADS)) + SCALEFACTOR))) + (CADDR ARROWHEADS]) + +(SCALE.BRUSH + [LAMBDA (BRUSH ORGSCALE NEWSCALE) (* rrb " 8-Sep-86 20:02") + + (* returns a brush scaled from size ORGSCALE to NEWSCALE. + It will returns a size of 0 only if given a size of 0 This is so that brushes + that scale down always show up.) + + (COND + [(EQP ORGSCALE NEWSCALE) (* make unscaled case fast - + avoid floating point.) + (PROG ((BRUSHSIZE (fetch (BRUSH BRUSHSIZE) of BRUSH))) + (RETURN (create BRUSH using BRUSH BRUSHSIZE _ (COND + ((GREATERP 1.0 BRUSHSIZE) + (* create a brush of at least 1) + (COND + ((ZEROP BRUSHSIZE) + 0) + (T 1))) + ((NOT (FIXP BRUSHSIZE)) + (FIXR BRUSHSIZE)) + (T (RETURN BRUSH] + (T (PROG ((BRUSHSIZE (FQUOTIENT (FTIMES (fetch (BRUSH BRUSHSIZE) of BRUSH) + ORGSCALE) + NEWSCALE))) + (RETURN (create BRUSH using BRUSH BRUSHSIZE _ (COND + ((ZEROP BRUSHSIZE) + 0) + (T (IMAX 1 (FIXR BRUSHSIZE]) +) +(DEFINEQ + +(TWO.PT.TRANSFORMATION.INPUTFN + [LAMBDA (WINDOW) (* rrb "11-Jul-86 15:54") + + (* reads four points from the user and returns the two point transformation that + maps the first two into the second two.) + + (PROG ((SCALE (VIEWER.SCALE WINDOW)) + FIRSTPT SECONDPT THIRDPT FOURTHPT FIRSTLOCALPT SECONDLOCALPT THIRDLOCALPT FOURTHLOCALPT) + (STATUSPRINT WINDOW " +" "Indicate the first point to move.") + (COND + ((SETQ FIRSTPT (SK.GETGLOBALPOSITION WINDOW)) + (SK.MARK.POSITION (SETQ FIRSTLOCALPT (SK.SCALE.POSITION.INTO.VIEWER FIRSTPT SCALE)) + WINDOW FIRSTPTMARK)) + (T (CLOSEPROMPTWINDOW WINDOW) + (RETURN NIL))) + (STATUSPRINT WINDOW " +" "Indicate the second point to move.") + (COND + ((SETQ SECONDPT (SK.GETGLOBALPOSITION WINDOW)) + (SK.MARK.POSITION (SETQ SECONDLOCALPT (SK.SCALE.POSITION.INTO.VIEWER SECONDPT SCALE)) + WINDOW SECONDPTMARK)) + (T (* erase first pt on way out) + (SK.MARK.POSITION FIRSTLOCALPT WINDOW FIRSTPTMARK) + (CLOSEPROMPTWINDOW WINDOW) + (RETURN NIL))) + (STATUSPRINT WINDOW " +" "Indicate the new position of the first point.") + (COND + ((SETQ THIRDPT (SK.GETGLOBALPOSITION WINDOW)) + (SK.MARK.POSITION (SETQ THIRDLOCALPT (SK.SCALE.POSITION.INTO.VIEWER THIRDPT SCALE)) + WINDOW NEWFIRSTPTMARK)) + (T (* erase first and second pts on way + out) + (SK.MARK.POSITION FIRSTLOCALPT WINDOW FIRSTPTMARK) + (SK.MARK.POSITION SECONDLOCALPT WINDOW SECONDPTMARK) + (CLOSEPROMPTWINDOW WINDOW) + (RETURN NIL))) + (STATUSPRINT WINDOW " +" "Indicate the new position of the second point.") + (SETQ FOURTHPT (SK.GETGLOBALPOSITION WINDOW)) + (CLOSEPROMPTWINDOW WINDOW) (* erase the point marks.) + (SK.MARK.POSITION FIRSTLOCALPT WINDOW FIRSTPTMARK) + (SK.MARK.POSITION SECONDLOCALPT WINDOW SECONDPTMARK) + (SK.MARK.POSITION THIRDLOCALPT WINDOW NEWFIRSTPTMARK) + (OR FOURTHPT (RETURN NIL)) (* keep the coefficients of the two + necessary equations.) + (RETURN (SK.COMPUTE.TWO.PT.TRANSFORMATION FIRSTPT SECONDPT THIRDPT FOURTHPT]) + +(SK.TWO.PT.TRANSFORM.ELTS + [LAMBDA (W) (* rrb "31-Jan-86 10:59") + + (* lets the user select some elements and specify a two point transformation and + applies the transformation to all of the points.) + + (SK.EVAL.AS.PROCESS (LIST (FUNCTION SK.SEL.AND.TWO.PT.TRANSFORM) + (KWOTE W)) + W]) + +(SK.SEL.AND.TWO.PT.TRANSFORM + [LAMBDA (W) (* rrb "10-Dec-85 17:26") + + (* lets the user select some elements and specify a two point transformation and + applies the transformation to all of the points.) + + (PROG NIL + (SK.TRANSFORM.ELEMENTS (OR (SK.SELECT.MULTIPLE.ITEMS W T NIL 'MOVE) + (RETURN)) + (FUNCTION SK.APPLY.AFFINE.TRANSFORM) + (OR (TWO.PT.TRANSFORMATION.INPUTFN W) + (RETURN)) + W]) + +(SK.APPLY.AFFINE.TRANSFORM + [LAMBDA (GPOSITION AFFINETRANS) (* rrb "28-Apr-85 16:05") + + (* * applies a tranformation to the point. + AFFINETRANS is an instance of AFFINETRANSFORMATION) + + (create POSITION + XCOORD _ (PLUS (TIMES (fetch (AFFINETRANSFORMATION Ax) of AFFINETRANS) + (fetch (POSITION XCOORD) of GPOSITION)) + (TIMES (fetch (AFFINETRANSFORMATION By) of AFFINETRANS) + (fetch (POSITION YCOORD) of GPOSITION)) + (fetch (AFFINETRANSFORMATION C) of AFFINETRANS)) + YCOORD _ (PLUS (TIMES (fetch (AFFINETRANSFORMATION Dx) of AFFINETRANS) + (fetch (POSITION XCOORD) of GPOSITION)) + (TIMES (fetch (AFFINETRANSFORMATION Ey) of AFFINETRANS) + (fetch (POSITION YCOORD) of GPOSITION)) + (fetch (AFFINETRANSFORMATION F) of AFFINETRANS]) + +(SK.COMPUTE.TWO.PT.TRANSFORMATION + [LAMBDA (P1 P2 Q1 Q2) (* ; "Edited 30-Jan-87 14:24 by rrb") + (* computes the AFFINETRANSFORMATION + necessary to take P1 into Q1 and P2 + into Q2.) + (PROG ((PX1 (fetch (POSITION XCOORD) of P1)) + (PY1 (fetch (POSITION YCOORD) of P1)) + (PX2 (fetch (POSITION XCOORD) of P2)) + (PY2 (fetch (POSITION YCOORD) of P2)) + (QX1 (fetch (POSITION XCOORD) of Q1)) + (QY1 (fetch (POSITION YCOORD) of Q1)) + (QX2 (fetch (POSITION XCOORD) of Q2)) + (QY2 (fetch (POSITION YCOORD) of Q2)) + (MATRIX2 (IDENTITY-3-BY-3)) + (SCRATCHMATRIX (IDENTITY-3-BY-3)) + MATRIX1 PDELTAX PDELTAY QDELTAX QDELTAY PLEN QLEN LENRATIO) + + (* compute the transformation that translates P1 to the origin, rotates it until + P has the same angle as Q, scales it until P has the same length as Q then + translates the new P1 to Q1.) + + (SETQ PDELTAX (DIFFERENCE PX2 PX1)) + (SETQ PDELTAY (DIFFERENCE PY2 PY1)) + (SETQ QDELTAX (DIFFERENCE QX2 QX1)) + (SETQ QDELTAY (DIFFERENCE QY2 QY1)) (* compute the length of segments P + and Q.) + [SETQ PLEN (SQRT (PLUS (TIMES PDELTAX PDELTAX) + (TIMES PDELTAY PDELTAY] + (COND + ((ZEROP PLEN) + (STATUSPRINT WINDOW " +" "The two source points can not be the same.") + (RETURN))) + [SETQ QLEN (SQRT (PLUS (TIMES QDELTAX QDELTAX) + (TIMES QDELTAY QDELTAY] + (COND + ((ZEROP QLEN) + (STATUSPRINT WINDOW "The two destination points can not be the same.") + (RETURN))) + + (* ratio is done to map P onto Q because the scaling is done after the rotation. + It could be done first if the mapping were done from Q onto P.) + + (SETQ LENRATIO (QUOTIENT QLEN PLEN)) (* translate P1 to origin.) + + (* use MATRIX1 and MATRIX2 to swap the running result back and forth since matrix + multiplication routines don't allow the result to be stored in one of the + arguments.) + + (SETQ MATRIX1 (TRANSLATE-3-BY-3 (MINUS PX1) + (MINUS PY1))) (* Scale to make P the same length as + Q.) + (MATMULT-333 MATRIX1 (SCALE-3-BY-3 LENRATIO LENRATIO SCRATCHMATRIX) + MATRIX2) (* rotate it so that the slope of P is + the same as Q.) + (MATMULT-333 MATRIX2 (ROTATE-3-BY-3 (DEGREES-TO-RADIANS (DIFFERENCE (SK.COMPUTE.SLOPE + PDELTAX PDELTAY) + (SK.COMPUTE.SLOPE QDELTAX + QDELTAY))) + SCRATCHMATRIX) + MATRIX1) + + (* translate the origin pt to Q1. This is complicated because Q1 needs to be + translated, rotated and scaled into new coordinates.) + + (MATMULT-333 MATRIX1 (TRANSLATE-3-BY-3 QX1 QY1 SCRATCHMATRIX) + MATRIX2) (* return only the coefficients that + make a difference.) + (RETURN (create AFFINETRANSFORMATION + Ax _ (CL:AREF MATRIX2 0 0) + By _ (CL:AREF MATRIX2 1 0) + C _ (CL:AREF MATRIX2 2 0) + Dx _ (CL:AREF MATRIX2 0 1) + Ey _ (CL:AREF MATRIX2 1 1) + F _ (CL:AREF MATRIX2 2 1]) + +(SK.COMPUTE.SLOPE + [LAMBDA (DELTAX DELTAY) (* rrb "31-May-85 10:09") + (* computes the angle of a line from + the delta X and Y.) + (COND + ((ZEROP DELTAX) + (COND + ((GREATERP DELTAY 0) + 90.0) + (T -90.0))) + (T (PLUS (COND + ((GREATERP DELTAX 0) + 0.0) + (T + + (* if the line is sloping to the left, add 180 to it. + This is done because we need to make sure that P1 gets mapped into Q1.) + + 180.0)) + (ARCTAN (FQUOTIENT DELTAY DELTAX]) + +(SK.THREE.PT.TRANSFORM.ELTS + [LAMBDA (W) (* rrb "31-Jan-86 11:00") + + (* lets the user select some elements and specify a three point transformation + and applies the transformation to all of the points.) + + (SK.EVAL.AS.PROCESS (LIST (FUNCTION SK.SEL.AND.THREE.PT.TRANSFORM) + (KWOTE W)) + W]) + +(SK.COMPUTE.THREE.PT.TRANSFORMATION + [LAMBDA (P1 P2 P3 Q1 Q2 Q3 ERRORFLG) (* rrb " 8-May-85 18:10") + + (* computes the AFFINETRANSFORMATION necessary to take P1 into Q1, P2 into Q2 and + P3 into Q3.) + + (PROG ((PX1 (fetch (POSITION XCOORD) of P1)) + (PY1 (fetch (POSITION YCOORD) of P1)) + (PX2 (fetch (POSITION XCOORD) of P2)) + (PY2 (fetch (POSITION YCOORD) of P2)) + (PX3 (fetch (POSITION XCOORD) of P3)) + (PY3 (fetch (POSITION YCOORD) of P3)) + (QX1 (fetch (POSITION XCOORD) of Q1)) + (QY1 (fetch (POSITION YCOORD) of Q1)) + (QX2 (fetch (POSITION XCOORD) of Q2)) + (QY2 (fetch (POSITION YCOORD) of Q2)) + (QX3 (fetch (POSITION XCOORD) of Q3)) + (QY3 (fetch (POSITION YCOORD) of Q3)) + DELTAPY12 DELTAPX12 DELTAPY23 A&DBOTTOM AX BY C DX EY F) + + (* this is the computation dictated by solving the six equations of the form QX1 + = aPX1 + bPY1 + c for a, b, c, d, e, and f.) + (* save some subexpressions that are + reused.) + (SETQ DELTAPX12 (FDIFFERENCE PX1 PX2)) + (SETQ DELTAPY23 (FDIFFERENCE PY2 PY3)) + [COND + ((ZEROP (SETQ DELTAPY12 (FDIFFERENCE PY1 PY2))) (* need to divide by this number and + it is zero) + (COND + (ERRORFLG (* this is the second attempt, all + points must be horizontal) + (STATUSPRINT WINDOW " +" "All three source points cannot be in the same line. +If you meant this, you should use the TWO PT TRANSFORM.") + (RETURN)) + (T (* try switching two points) + (RETURN (SK.COMPUTE.THREE.PT.TRANSFORMATION P2 P3 P1 Q2 Q3 Q1 T] + [COND + ([ZEROP (SETQ A&DBOTTOM (FDIFFERENCE (FDIFFERENCE PX2 PX3) + (FTIMES (FQUOTIENT DELTAPX12 DELTAPY12) + DELTAPY23](* need to divide by this number and + it is zero) + (COND + (ERRORFLG + + (* this is the second attempt, maybe all points are collinear, in any case, can't + continue.) + + (STATUSPRINT WINDOW " +" "All three source points cannot be in the same line. +If you meant this, you should use the TWO PT TRANSFORM.") + (RETURN)) + (T (* try switching two points) + (RETURN (SK.COMPUTE.THREE.PT.TRANSFORMATION P2 P3 P1 Q2 Q3 Q1 T] + (SETQ AX (FQUOTIENT (FDIFFERENCE (FDIFFERENCE QX2 QX3) + (FQUOTIENT (FTIMES (FDIFFERENCE QX1 QX2) + DELTAPY23) + DELTAPY12)) + A&DBOTTOM)) + (SETQ DX (FQUOTIENT (FDIFFERENCE (FDIFFERENCE QY2 QY3) + (FQUOTIENT (FTIMES (FDIFFERENCE QY1 QY2) + DELTAPY23) + DELTAPY12)) + A&DBOTTOM)) + (SETQ BY (FQUOTIENT (FDIFFERENCE (FDIFFERENCE QX1 QX2) + (FTIMES AX DELTAPX12)) + DELTAPY12)) + (SETQ EY (FQUOTIENT (FDIFFERENCE (FDIFFERENCE QY1 QY2) + (FTIMES DX DELTAPX12)) + DELTAPY12)) + [SETQ C (FDIFFERENCE QX1 (FPLUS (FTIMES AX PX1) + (FTIMES BY PY1] + [SETQ F (FDIFFERENCE QY1 (FPLUS (FTIMES DX PX1) + (FTIMES EY PY1] + (RETURN (create AFFINETRANSFORMATION + Ax _ AX + By _ BY + C _ C + Dx _ DX + Ey _ EY + F _ F]) + +(SK.SEL.AND.THREE.PT.TRANSFORM + [LAMBDA (W) (* rrb "10-Dec-85 17:26") + + (* lets the user select some elements and specify a three point transformation + and applies the transformation to all of the points.) + + (PROG NIL + (SK.TRANSFORM.ELEMENTS (OR (SK.SELECT.MULTIPLE.ITEMS W T NIL 'MOVE) + (RETURN)) + (FUNCTION SK.APPLY.AFFINE.TRANSFORM) + (OR (THREE.PT.TRANSFORMATION.INPUTFN W) + (RETURN)) + W]) + +(THREE.PT.TRANSFORMATION.INPUTFN + [LAMBDA (WINDOW) (* rrb "11-Jul-86 15:54") + + (* reads six points from the user and returns the affine transformation that maps + the first three into the second three) + + (PROG ((SCALE (VIEWER.SCALE WINDOW)) + FIRSTPT SECONDPT THIRDPT FOURTHPT FIFTHPT SIXTHPT FIRSTLOCALPT SECONDLOCALPT THIRDLOCALPT + FOURTHLOCALPT FIFTHLOCALPT) + (STATUSPRINT WINDOW " +" "Indicate the first point to move.") + (COND + ((SETQ FIRSTPT (SK.GETGLOBALPOSITION WINDOW)) + (SK.MARK.POSITION (SETQ FIRSTLOCALPT (SK.SCALE.POSITION.INTO.VIEWER FIRSTPT SCALE)) + WINDOW FIRSTPTMARK)) + (T (CLOSEPROMPTWINDOW WINDOW) + (RETURN NIL))) + (STATUSPRINT WINDOW " +" "Indicate the second point to move.") + (COND + ((SETQ SECONDPT (SK.GETGLOBALPOSITION WINDOW)) + (SK.MARK.POSITION (SETQ SECONDLOCALPT (SK.SCALE.POSITION.INTO.VIEWER SECONDPT SCALE)) + WINDOW SECONDPTMARK)) + (T (* erase first pt on way out) + (SK.MARK.POSITION FIRSTLOCALPT WINDOW FIRSTPTMARK) + (CLOSEPROMPTWINDOW WINDOW) + (RETURN NIL))) + (STATUSPRINT WINDOW " +" "Indicate the third point to move.") + (COND + ((SETQ THIRDPT (SK.GETGLOBALPOSITION WINDOW)) + (SK.MARK.POSITION (SETQ THIRDLOCALPT (SK.SCALE.POSITION.INTO.VIEWER THIRDPT SCALE)) + WINDOW THIRDPTMARK)) + (T (* erase first and second pts on way + out) + (SK.MARK.POSITION FIRSTLOCALPT WINDOW FIRSTPTMARK) + (SK.MARK.POSITION SECONDLOCALPT WINDOW SECONDPTMARK) + (CLOSEPROMPTWINDOW WINDOW) + (RETURN NIL))) + (STATUSPRINT WINDOW " +" "Indicate the new position of the first point.") + (COND + ((SETQ FOURTHPT (SK.GETGLOBALPOSITION WINDOW)) + (SK.MARK.POSITION (SETQ FOURTHLOCALPT (SK.SCALE.POSITION.INTO.VIEWER FOURTHPT SCALE)) + WINDOW NEWFIRSTPTMARK)) + (T (* erase first second and third pts on + way out) + (SK.MARK.POSITION FIRSTLOCALPT WINDOW FIRSTPTMARK) + (SK.MARK.POSITION SECONDLOCALPT WINDOW SECONDPTMARK) + (SK.MARK.POSITION THIRDLOCALPT WINDOW THIRDPTMARK) + (CLOSEPROMPTWINDOW WINDOW) + (RETURN NIL))) + (STATUSPRINT WINDOW " +" "Indicate the new position of the second point.") + (COND + ((SETQ FIFTHPT (SK.GETGLOBALPOSITION WINDOW)) + (SK.MARK.POSITION (SETQ FIFTHLOCALPT (SK.SCALE.POSITION.INTO.VIEWER FIFTHPT SCALE)) + WINDOW NEWSECONDPTMARK)) + (T (* erase first second and third pts on + way out) + (SK.MARK.POSITION FIRSTLOCALPT WINDOW FIRSTPTMARK) + (SK.MARK.POSITION SECONDLOCALPT WINDOW SECONDPTMARK) + (SK.MARK.POSITION THIRDLOCALPT WINDOW THIRDPTMARK) + (SK.MARK.POSITION FOURTHLOCALPT WINDOW NEWFIRSTPTMARK) + (CLOSEPROMPTWINDOW WINDOW) + (RETURN NIL))) + (STATUSPRINT WINDOW " +" "Indicate the new position of the third point.") + (SETQ SIXTHPT (SK.GETGLOBALPOSITION WINDOW)) + (CLOSEPROMPTWINDOW WINDOW) (* erase the point marks.) + (SK.MARK.POSITION FIRSTLOCALPT WINDOW FIRSTPTMARK) + (SK.MARK.POSITION SECONDLOCALPT WINDOW SECONDPTMARK) + (SK.MARK.POSITION THIRDLOCALPT WINDOW THIRDPTMARK) + (SK.MARK.POSITION FOURTHLOCALPT WINDOW NEWFIRSTPTMARK) + (SK.MARK.POSITION FIFTHLOCALPT WINDOW NEWSECONDPTMARK) + (OR SIXTHPT (RETURN NIL)) (* keep the coefficients of the two + necessary equations.) + (RETURN (SK.COMPUTE.THREE.PT.TRANSFORMATION FIRSTPT SECONDPT THIRDPT FOURTHPT FIFTHPT + SIXTHPT]) +) +(DEFINEQ + +(SK.COPY.AND.TWO.PT.TRANSFORM.ELTS + [LAMBDA (W) (* rrb "31-Jan-86 11:00") + + (* lets the user select some elements and specify a two point transformation and + applies the transformation to all of the points.) + + (SK.EVAL.AS.PROCESS (LIST (FUNCTION SK.SEL.COPY.AND.TWO.PT.TRANSFORM) + (KWOTE W)) + W]) + +(SK.SEL.COPY.AND.TWO.PT.TRANSFORM + [LAMBDA (W) (* rrb "10-Dec-85 17:26") + + (* lets the user select some elements and specify a two point transformation and + applies the transformation to all copies of the points.) + + (PROG NIL + (SK.COPY.AND.TRANSFORM.ELEMENTS (OR (SK.SELECT.MULTIPLE.ITEMS W T NIL 'COPY) + (RETURN)) + (FUNCTION SK.APPLY.AFFINE.TRANSFORM) + (OR (TWO.PT.TRANSFORMATION.INPUTFN W) + (RETURN)) + W]) + +(SK.COPY.AND.THREE.PT.TRANSFORM.ELTS + [LAMBDA (W) (* rrb "31-Jan-86 11:00") + + (* lets the user select some elements and specify a three point transformation + and applies the transformation to copies of the elements) + + (SK.EVAL.AS.PROCESS (LIST (FUNCTION SK.SEL.COPY.AND.THREE.PT.TRANSFORM) + (KWOTE W)) + W]) + +(SK.SEL.COPY.AND.THREE.PT.TRANSFORM + [LAMBDA (W) (* rrb "10-Dec-85 17:26") + + (* lets the user select some elements and specify a three point transformation + and applies the transformation to copies of the elements) + + (PROG NIL + (SK.COPY.AND.TRANSFORM.ELEMENTS (OR (SK.SELECT.MULTIPLE.ITEMS W T NIL 'COPY) + (RETURN)) + (FUNCTION SK.APPLY.AFFINE.TRANSFORM) + (OR (THREE.PT.TRANSFORMATION.INPUTFN W) + (RETURN)) + W]) + +(SK.COPY.AND.TRANSFORM.ELEMENTS + [LAMBDA (SCRELTS TRANSFORMFN TRANSFORMDATA SKW) (* rrb " 8-May-85 17:08") + + (* changes copies of SCRELTS to the elements that have had each of their control + points transformed by transformfn. TRANSFORMDATA is arbitrary data that is passed + to tranformfn.) + + (PROG (NEWGLOBALS) + + (* computes the scale factor inherent in the transformation so that it doesn't + have to be done on every element that might need it. + It major use is in scaling brush sizes.) + + (SETQ NEWGLOBALS (MAPCOLLECTSKETCHSPECS SCRELTS (FUNCTION SK.COPY.AND.TRANSFORM.ITEM) + TRANSFORMFN TRANSFORMDATA (SK.TRANSFORM.SCALE.FACTOR TRANSFORMFN + TRANSFORMDATA) + SKW)) (* make a history entry.) + (SK.ADD.HISTEVENT 'COPY NEWGLOBALS SKW) + (RETURN NEWGLOBALS]) + +(SK.COPY.AND.TRANSFORM.ITEM + [LAMBDA (SELELT TRANSFORMFN TRANSFORMDATA SCALEFACTOR W) (* rrb "10-Mar-86 16:23") + (* SELELT is a sketch element that was + selected for a copy and transformation + operation.) + (PROG (NEWGLOBAL) + (COND + ((SETQ NEWGLOBAL (SK.TRANSFORM.ELEMENT (fetch (SCREENELT GLOBALPART) of SELELT) + TRANSFORMFN TRANSFORMDATA SCALEFACTOR)) + (* clear the priority of the element.) + (SK.SET.ELEMENT.PRIORITY NEWGLOBAL NIL) + (SK.ADD.ELEMENT NEWGLOBAL W) + (RETURN NEWGLOBAL]) +) +(DECLARE%: DONTCOPY +(DECLARE%: EVAL@COMPILE + +(RECORD AFFINETRANSFORMATION (Ax By C Dx Ey F)) +) +) + +(READVARS-FROM-STRINGS '(FIRSTPTMARK SECONDPTMARK THIRDPTMARK NEWFIRSTPTMARK NEWSECONDPTMARK) + "({(READBITMAP)(25 25 +%"AOCNB@@@%" +%"AA@HF@@@%" +%"AA@HB@@@%" +%"AN@HB@@@%" +%"A@@HB@@@%" +%"A@@HB@@@%" +%"A@@HOH@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@GO@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%")} {(READBITMAP)(25 25 +%"AOCNG@@@%" +%"AA@HHH@@%" +%"AA@HAH@@%" +%"AN@HG@@@%" +%"A@@HL@@@%" +%"A@@HH@@@%" +%"A@@HOH@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@GO@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%")} {(READBITMAP)(25 25 +%"AOCNG@@@%" +%"AA@HHH@@%" +%"AA@HAH@@%" +%"AN@HF@@@%" +%"A@@HAH@@%" +%"A@@HHH@@%" +%"A@@HG@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@GO@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%")} {(READBITMAP)(25 25 +%"AAGJB@@@%" +%"AIDBJ@@@%" +%"AEDBJ@@@%" +%"AEGBJ@@@%" +%"ACDBJ@@@%" +%"ACDBJ@@@%" +%"AAGID@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@GO@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"AOCNB@@@%" +%"AA@HF@@@%" +%"AA@HB@@@%" +%"AN@HB@@@%" +%"A@@HB@@@%" +%"A@@HB@@@%" +%"A@@HOH@@%")} {(READBITMAP)(25 25 +%"AAGJB@@@%" +%"AIDBJ@@@%" +%"AEDBJ@@@%" +%"AEGBJ@@@%" +%"ACDBJ@@@%" +%"ACDBJ@@@%" +%"AAGID@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@GO@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@H@@@@%" +%"@@@@@@@@%" +%"@@@@@@@@%" +%"AOCNCH@@%" +%"AA@HDD@@%" +%"AA@H@D@@%" +%"AN@HAH@@%" +%"A@@HF@@@%" +%"A@@HD@@@%" +%"A@@HGL@@%")}) +") +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(GLOBALVARS FIRSTPTMARK SECONDPTMARK THIRDPTMARK NEWFIRSTPTMARK NEWSECONDPTMARK) +) + +(FILESLOAD MATMULT) + + + +(* ; "functions for marking") + +(DEFINEQ + +(SK.SHOWMARKS + [LAMBDA (W HOTSPOTCACHE) (* rrb "29-Jan-85 18:04") + (* marks all of the hot spots of + sketch elements in a figure window.) + (bind Y for BUCKET in HOTSPOTCACHE do (SETQ Y (CAR BUCKET)) + (for XBUCKET in (CDR BUCKET) + do (* there may be old buckets that don't + contain any elements.) + (AND (CDR XBUCKET) + (SK.MARK.HOTSPOT (CAR XBUCKET) + Y W SK.LOCATEMARK]) + +(MARKPOINT + [LAMBDA (PT WINDOW MARK) (* rrb "12-May-85 18:50") + + (* marks a point in a window with a mark. + The mark should be a bitmap.) + + (OR MARK (SETQ MARK SK.SELECTEDMARK)) + (PROG ((MARKWIDTH (BITMAPWIDTH MARK))) + (RETURN (BITBLT MARK 0 0 WINDOW (IDIFFERENCE (fetch (POSITION XCOORD) of PT) + (LRSH MARKWIDTH 1)) + (IDIFFERENCE (fetch (POSITION YCOORD) of PT) + (LRSH (fetch (BITMAP BITMAPHEIGHT) of MARK) + 1)) + MARKWIDTH MARKWIDTH 'INPUT 'INVERT]) + +(SK.MARKHOTSPOTS + [LAMBDA (SKETCHELT W MARK) (* rrb "12-May-85 18:59") + (* marks the hotspots of a sketch + element that are not already selected) + (PROG [(HOTSPOTCACHE (SK.HOTSPOT.CACHE W)) + (SELECTEDELTS (WINDOWPROP W 'SKETCH.SELECTIONS] + (for PTTAIL on (fetch (LOCALPART HOTSPOTS) of (fetch (SCREENELT LOCALPART) of SKETCHELT)) + unless (OR (MEMBER (CAR PTTAIL) + (CDR PTTAIL)) + (for ELTSOFPT in (SK.ELTS.FROM.HOTSPOT (CAR PTTAIL) + HOTSPOTCACHE) thereis (MEMB ELTSOFPT SELECTEDELTS))) + do + + (* mark points that aren't also hotspots of an already selected element or + duplicate hot spots of this element.) + + (MARKPOINT (CAR PTTAIL) + W MARK]) + +(SK.MARK.SELECTION + [LAMBDA (ELT SKW MARKBM) (* rrb " 9-May-85 10:42") + (* marks or unmarks a selection.) + (COND + ((POSITIONP ELT) (* handle positions {points} + specially.) + (MARKPOINT ELT SKW MARKBM)) + (T (SK.MARKHOTSPOTS ELT SKW MARKBM]) +) + +(READVARS-FROM-STRINGS '(POINTMARK SPOTMARKER) + "({(READBITMAP)(7 7 +%"HB@@%" +%"DD@@%" +%"BH@@%" +%"A@@@%" +%"BH@@%" +%"DD@@%" +%"HB@@%")} {(READBITMAP)(12 12 +%"@B@@%" +%"@G@@%" +%"@G@@%" +%"@G@@%" +%"CHN@%" +%"GHO@%" +%"CHN@%" +%"@G@@%" +%"@G@@%" +%"@G@@%" +%"@B@@%" +%"@@@@%")}) +") +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(GLOBALVARS POINTMARK SPOTMARKER) +) +(RPAQ POINTREADINGCURSOR (CURSORCREATE (QUOTE #*(16 16)@@@@@GL@ALG@C@AHF@@LD@@DL@@FH@@BHA@BH@@BL@@FD@@DF@@LC@AHALG@@GL@ +) (QUOTE NIL) 7 7)) + + + +(* ; "hit detection functions.") + +(DEFINEQ + +(SK.SELECT.ITEM + [LAMBDA (WINDOW ITEMFLG SELITEMS OPERATION) (* rrb "10-Dec-85 17:01") + + (* selects allows the user to select one of the sketch elements from the sketch + WINDOW. If ITEMFLG is non-NIL, it returns the item selected, otherwise it returns + the position. If SELITEMS is given it is used as the items to be marked and + selected from. Keeps control and probably shouldn't) + + (PROG (HOTSPOTCACHE NOW PREVIOUS OLDPOS) + (COND + (SELITEMS (* create a cache for the items to + select from) + (SETQ HOTSPOTCACHE (SK.ADD.HOTSPOTS.TO.CACHE SELITEMS NIL))) + [(SK.HAS.SOME.HOTSPOTS (SETQ HOTSPOTCACHE (SK.HOTSPOT.CACHE.FOR.OPERATION WINDOW + OPERATION] + (T (* no items, don't do anything.) + (RETURN))) + (TOTOPW WINDOW) + (SK.SHOWMARKS WINDOW HOTSPOTCACHE) + (until (MOUSESTATE (NOT UP))) + (COND + ((NOT (LASTMOUSESTATE (OR LEFT MIDDLE))) (* for now not interested in anything + besides left and middle.) + (SK.SHOWMARKS WINDOW HOTSPOTCACHE) + (RETURN))) (* note current item selection.) + (SETQ NOW (IN.SKETCH.ELT? HOTSPOTCACHE (SETQ OLDPOS (CURSORPOSITION NIL WINDOW)) + (NULL ITEMFLG))) + FLIP + (* turn off old selection.) + (SK.DESELECT.ELT PREVIOUS WINDOW) + (SK.SELECT.ELT (SETQ PREVIOUS NOW) + WINDOW) + LP (* wait for a button up or move out of + region) + (COND + ((NOT (MOUSESTATE (OR LEFT MIDDLE))) (* button up, selected item if one) + (SK.DESELECT.ELT PREVIOUS WINDOW) + (SK.SHOWMARKS WINDOW HOTSPOTCACHE) + (RETURN PREVIOUS)) + ([EQUAL PREVIOUS (SETQ NOW (IN.SKETCH.ELT? HOTSPOTCACHE (CURSORPOSITION NIL WINDOW + OLDPOS) + (NULL ITEMFLG] + (GO LP)) + (T (GO FLIP]) + +(IN.SKETCH.ELT? + [LAMBDA (CACHE POS PTFLG) (* rrb "21-Feb-85 13:47") + (* returns the first element that POS + is on.) + (PROG ((Y (fetch (POSITION YCOORD) of POS)) + (X (fetch (POSITION XCOORD) of POS)) + (BESTMEASURE 1000) + PTLEFT PTRIGHT PTTOP PTBOTTOM BESTELT BESTX BESTY YDIF THISDIF) + (SETQ PTLEFT (DIFFERENCE X SK.POINT.WIDTH)) + (SETQ PTRIGHT (PLUS X SK.POINT.WIDTH)) + (SETQ PTBOTTOM (DIFFERENCE Y SK.POINT.WIDTH)) + (SETQ PTTOP (PLUS Y SK.POINT.WIDTH)) + [for YBUCKET in CACHE when (ILEQ (CAR YBUCKET) + PTTOP) + do (COND + ((ILESSP (CAR YBUCKET) + PTBOTTOM) (* stop when Y gets too small.) + (RETURN))) + (SETQ YDIF (ABS (DIFFERENCE (CAR YBUCKET) + Y))) + (for XBUCKET in (CDR YBUCKET) when (ILEQ (CAR XBUCKET) + PTRIGHT) + do (COND + ((ILESSP (CAR XBUCKET) + PTLEFT) (* stop when X gets too small.) + (RETURN))) + (COND + ((CDR XBUCKET) (* this bucket has entries) + [SETQ THISDIF (PLUS YDIF (ABS (DIFFERENCE (CAR XBUCKET) + X] + (COND + ((ILESSP THISDIF BESTMEASURE) + (SETQ BESTMEASURE THISDIF) + (COND + (PTFLG (SETQ BESTX (CAR XBUCKET)) + (SETQ BESTY (CAR YBUCKET))) + (T (SETQ BESTELT (CADR XBUCKET] + (RETURN (COND + (PTFLG (AND BESTX (create POSITION + XCOORD _ BESTX + YCOORD _ BESTY))) + (T BESTELT]) + +(SK.MARK.HOTSPOT + [LAMBDA (X Y WINDOW MARK) (* rrb "29-Jan-85 15:45") + + (* marks a point in a window with a mark. + The mark should be a bitmap.) + + (PROG ((MARKWIDTH (BITMAPWIDTH MARK)) + HALFWIDTH) + (RETURN (BITBLT MARK 0 0 WINDOW (IDIFFERENCE X (SETQ HALFWIDTH (LRSH MARKWIDTH 1))) + (IDIFFERENCE Y HALFWIDTH) + MARKWIDTH MARKWIDTH 'INPUT 'INVERT]) + +(SK.MARK.POSITION + [LAMBDA (PT WINDOW MARKBITMAP) (* rrb "20-Apr-85 18:47") + (* marks a place on the sketch window + WINDOW.) + (SK.MARK.HOTSPOT (fetch (POSITION XCOORD) of PT) + (fetch (POSITION YCOORD) of PT) + WINDOW MARKBITMAP]) + +(SK.SELECT.ELT + [LAMBDA (ELT FIGW MARKBM) (* rrb " 3-Oct-84 11:18") + (* selects an item from a figure + window.) + (* for now just mark it.) + (AND ELT (SK.MARK.SELECTION ELT FIGW MARKBM]) + +(SK.DESELECT.ELT + [LAMBDA (ELT SKW MARKBM) (* rrb " 9-May-85 10:32") + (* turns off the selection marking of + an item from a figure window.) + (AND ELT (SK.MARK.SELECTION ELT SKW MARKBM]) +) +(DECLARE%: EVAL@COMPILE + +(RPAQQ SK.POINT.WIDTH 4) + + +(CONSTANTS (SK.POINT.WIDTH 4)) +) + + + +(* ; "fns to support caching of hotspots.") + +(DEFINEQ + +(SK.HOTSPOT.CACHE + [LAMBDA (SKW) (* rrb "29-Jan-85 14:23") + (* retrieve the hotspot cache + associated with a sketch window.) + (WINDOWPROP SKW 'HOTSPOT.CACHE]) + +(SK.HOTSPOT.CACHE.FOR.OPERATION + [LAMBDA (VIEWER OPERATION) (* rrb "10-Dec-85 16:59") + + (* returns the hotspot cache for the elements in a viewer that are not protected + against OPERATION.) + + (PROG (SCRELTS) + (RETURN (COND + ((AND OPERATION (bind PROTECTION for SCRELT in (SETQ SCRELTS ( + LOCALSPECS.FROM.VIEWER + VIEWER)) + thereis (* look for any element that disallows + the current operation) + (SK.ELEMENT.PROTECTED? (fetch (SCREENELT GLOBALPART) + of SCRELT) + OPERATION))) + (* compute special cache) + (SK.BUILD.CACHE SCRELTS OPERATION)) + (T (* use the cache of all elements.) + (SK.HOTSPOT.CACHE VIEWER]) + +(SK.BUILD.CACHE + [LAMBDA (SCRELTS SKETCHOP) (* rrb "11-Dec-85 11:10") + (* Builds a cache of the elements in + SCRELTS that aren't protected against + SKETCHOP.) + (PROG (CACHE) + (for ELT in SCRELTS when (NOT (SK.ELEMENT.PROTECTED? (fetch (SCREENELT GLOBALPART) + of ELT) + SKETCHOP)) do (SETQ CACHE (SK.ADD.HOTSPOTS.TO.CACHE1 + ELT CACHE))) + (RETURN CACHE]) + +(SK.ELEMENT.PROTECTED? + [LAMBDA (GELT HOW) (* rrb " 5-Dec-85 11:16") + (* determines if GELT is protected + against the operation HOW) + (PROG [(PROTECTIONLST (GETSKETCHELEMENTPROP GELT 'PROTECTION] + (RETURN (OR (EQMEMB HOW PROTECTIONLST) + (AND (NEQ HOW 'COPYSELECT) + (OR (EQMEMB T PROTECTIONLST) + (EQMEMB 'FROZEN PROTECTIONLST]) + +(SK.HAS.SOME.HOTSPOTS + [LAMBDA (HOTSPOTCACHE) (* rrb "17-Oct-85 11:18") + (* return T if there is a selectable + point in HOTSPOTCACHE.) + (for BUCKET in HOTSPOTCACHE when (SOME (CDR BUCKET) + (FUNCTION CDR)) do (RETURN T]) + +(SK.SET.HOTSPOT.CACHE + [LAMBDA (SKW NEWCACHE) (* rrb "29-Jan-85 14:23") + (* stores the hotspot cache associated + with a sketch window.) + (WINDOWPROP SKW 'HOTSPOT.CACHE NEWCACHE]) + +(SK.CREATE.HOTSPOT.CACHE + [LAMBDA (SKW) (* rrb " 4-Feb-85 14:18") + (* creates the cache of hotspot + locations for a sketch window.) + (SK.SET.HOTSPOT.CACHE SKW (SK.ADD.HOTSPOTS.TO.CACHE (LOCALSPECS.FROM.VIEWER SKW) + NIL]) + +(SK.ELTS.FROM.HOTSPOT + [LAMBDA (POSITION CACHE) (* rrb "29-Jan-85 13:47") + (* returns a list of local elements + that have POSITION as one of their + hotspots.) + + (* a cache is an alist of alist with the top descriminator being the Y value and + the second one being the X value.) + + (PROG (TMP) + (RETURN (AND (SETQ TMP (SK.FIND.CACHE.BUCKET (fetch (POSITION YCOORD) of POSITION) + CACHE)) + (SK.FIND.CACHE.BUCKET (fetch (POSITION XCOORD) of POSITION) + TMP]) + +(SK.ADD.HOTSPOTS.TO.CACHE + [LAMBDA (ELTS CACHE) (* rrb " 3-Feb-85 14:36") + (* adds a collection of hotspots to a + cache.) + (for ELT in ELTS do (SETQ CACHE (SK.ADD.HOTSPOTS.TO.CACHE1 ELT CACHE))) + CACHE]) + +(SK.ADD.HOTSPOTS.TO.CACHE1 + [LAMBDA (LOCALELT CACHE) (* rrb "29-Jan-85 14:55") + (* adds an elements hotspots to the + cache.) + (for HOTSPOT in (fetch (SCREENELT HOTSPOTS) of LOCALELT) do (SETQ CACHE (SK.ADD.HOTSPOT.TO.CACHE + HOTSPOT LOCALELT CACHE)) + ) + CACHE]) + +(SK.ADD.HOTSPOT.TO.CACHE + [LAMBDA (POSITION ELT CACHE) (* rrb "16-Sep-86 12:45") + (* adds a hotspot to a cache.) + + (* a cache is an alist of alist with the top descriminator being the Y value and + the second one being the X value.) + + (PROG ((Y (fetch (POSITION YCOORD) of POSITION)) + (X (fetch (POSITION XCOORD) of POSITION))) + (RETURN (COND + [(NULL CACHE) + (LIST (LIST Y (LIST X ELT] + ((GREATERP Y (CAAR CACHE)) (* this element goes first Splice it + onto the front.) + (RPLACD CACHE (CONS (CAR CACHE) + (CDR CACHE))) + (RPLACA CACHE (LIST Y (LIST X ELT))) + CACHE) + ((EQ (CAAR CACHE) + Y) + (SK.ADD.VALUE.TO.CACHE.BUCKET X ELT (CDAR CACHE)) + CACHE) + (T [for TAIL on CACHE + do [AND (CDR TAIL) + (COND + ((EQ (CAADR TAIL) + Y) + (SK.ADD.VALUE.TO.CACHE.BUCKET X ELT (CDADR TAIL)) + (RETURN)) + ((GREATERP Y (CAADR TAIL)) + (RPLACD TAIL (CONS (LIST Y (LIST X ELT)) + (CDR TAIL))) + (RETURN] finally (NCONC1 CACHE (LIST Y (LIST X ELT] + CACHE]) + +(SK.REMOVE.HOTSPOTS.FROM.CACHE + [LAMBDA (ELTS CACHE) (* rrb "29-Jan-85 14:04") + (* removes a collection of hotspots + from a cache.) + (for ELT in ELTS do (SETQ CACHE (SK.REMOVE.HOTSPOTS.FROM.CACHE1 ELT CACHE]) + +(SK.REMOVE.HOTSPOTS.FROM.CACHE1 + [LAMBDA (LOCALELT CACHE) (* rrb "29-Jan-85 13:45") + (* removes an elements hotspots to the + cache.) + (for HOTSPOT in (fetch (SCREENELT HOTSPOTS) of LOCALELT) do (SK.REMOVE.HOTSPOT.FROM.CACHE HOTSPOT + LOCALELT CACHE]) + +(SK.REMOVE.HOTSPOT.FROM.CACHE + [LAMBDA (POSITION ELT CACHE) (* rrb "16-Sep-86 12:45") + (* removes a hotspot to a cache.) + + (* a cache is an alist of alist with the top descriminator being the Y value and + the second one being the X value.) + + (SK.REMOVE.VALUE.FROM.CACHE.BUCKET (fetch (POSITION XCOORD) of POSITION) + ELT + (FASSOC (fetch (POSITION YCOORD) of POSITION) + CACHE]) + +(SK.REMOVE.VALUE.FROM.CACHE.BUCKET + [LAMBDA (VAL ELT BUCKET) (* rrb "16-Sep-86 12:45") + (* removes ELT from the list of + elements stored on BUCKET under the + key VAL.) + + (* leaves the x and y of the bucket because it seems easier than removing it and + it may be used again in the case of changing an element by deleting it then + adding it again.) + + (for TAIL on (FASSOC VAL (CDR BUCKET)) do (AND (CDR TAIL) + (COND + ((EQ (CADR TAIL) + ELT) + (RPLACD TAIL (CDDR TAIL]) + +(SK.FIND.CACHE.BUCKET + [LAMBDA (VALUE CACHE) (* rrb "16-Sep-86 12:46") + + (* internal function for searching the caching Alists. + Returns the bucket if there is one; quits when a value is larger than the one + asked for.) + + (for TAIL on CACHE do (COND + ((EQ (CAAR TAIL) + VALUE) + (RETURN (CDAR TAIL))) + ((GREATERP VALUE (CAAR TAIL)) + (RETURN NIL]) + +(SK.ADD.VALUE.TO.CACHE.BUCKET + [LAMBDA (VAL ELT ALIST) (* rrb "16-Sep-86 12:46") + (* adds ELT to the list of elements + stored on ALIST under the key VAL.) + (COND + ((NULL ALIST) (* shouldn't ever happen.) + NIL) + ((GREATERP VAL (CAAR ALIST)) (* this element goes first Splice it + onto the front.) + (RPLACD ALIST (CONS (CAR ALIST) + (CDR ALIST))) + (RPLACA ALIST (LIST VAL ELT))) + ((EQ (CAAR ALIST) + VAL) (* add it to the end of the first + list.) + (NCONC1 (CAR ALIST) + ELT)) + (T (for TAIL on ALIST do [AND (CDR TAIL) + (COND + ((EQ (CAADR TAIL) + VAL) + (NCONC1 (CADR TAIL) + ELT) + (RETURN ALIST)) + ((GREATERP VAL (CAADR TAIL)) + (RPLACD TAIL (CONS (LIST VAL ELT) + (CDR TAIL))) + (RETURN ALIST] finally (NCONC1 ALIST (LIST VAL ELT]) +) + + + +(* ; "grid stuff") + +(DEFINEQ + +(SK.SET.GRID + [LAMBDA (SKETCHW) (* rrb "25-Oct-84 12:40") + (* switches from grided to non-grided + or vice versa.) + (COND + ((WINDOWPROP SKETCHW 'USEGRID) + (SK.TURN.GRID.OFF SKETCHW)) + (T (SK.TURN.GRID.ON SKETCHW]) + +(SK.DISPLAY.GRID + [LAMBDA (SKETCHW) (* rrb "23-Sep-86 11:30") + (* displays the current grid.) + (COND + ((WINDOWPROP SKETCHW 'USEGRID)) + (T (* grid was not being used, turn it + on.) + (SK.TURN.GRID.ON SKETCHW T))) + (WINDOWPROP SKETCHW 'GRIDUP T) + (SK.DISPLAY.GRID.POINTS SKETCHW]) + +(SK.DISPLAY.GRID.POINTS + [LAMBDA (SKETCHW NEWFLG) (* rrb "16-Jan-85 10:09") + (SK.SHOW.GRID (SK.GRIDFACTOR SKETCHW) + SKETCHW NEWFLG]) + +(SK.REMOVE.GRID.POINTS + [LAMBDA (SKETCHW) (* rrb "23-Sep-86 11:28") + (* removes the grid by calling + redisplay with the gridup property + removed.) + (COND + ([NOT (GREATERP 3.0 (FQUOTIENT (SK.GRIDFACTOR SKETCHW) + (VIEWER.SCALE SKETCHW] (* if grid factor is less than 3.0 the + grid isn't displayed) + (WINDOWPROP SKETCHW 'GRIDUP (PROG1 (WINDOWPROP SKETCHW 'GRIDUP NIL) + (REDISPLAYW SKETCHW]) + +(SK.TAKE.DOWN.GRID + [LAMBDA (SKETCHW) (* rrb "23-Sep-86 11:26") + (* takes down the grid if it is up.) + (COND + ((WINDOWPROP SKETCHW 'GRIDUP NIL) + (SK.REMOVE.GRID.POINTS SKETCHW]) + +(SK.SHOW.GRID + [LAMBDA (GRID SKW NEWFLG) (* DECLARATIONS%: FLOATING) + (* rrb "23-Sep-86 11:03") + (* puts a grid of size GRID onto SKW.) + (PROG ((SCALE (VIEWER.SCALE SKW)) + (REGION (SKETCH.REGION.VIEWED SKW))) + (COND + ((GREATERP 3.0 (FQUOTIENT GRID SCALE)) (* would be every point or so) + (STATUSPRINT SKW (CONCAT (COND + (NEWFLG "New") + (T "Current")) + " grid has a position every " + (FQUOTIENT GRID SCALE) + " screen points.")) + NIL) + (T + + (* make a horizontal bitmap that has the X pattern then blt it at the proper Y + places.) + + [PROG ((WREG (DSPCLIPPINGREGION NIL SKW)) + SCALEDWREG SCALEDWLEFT HORIZPATTERN WWIDTH WLEFT GRIDLEFT SKREGLEFT SKREGLIMIT + ) + (SETQ WWIDTH (fetch (REGION WIDTH) of WREG)) + (SETQ WLEFT (fetch (REGION LEFT) of WREG)) + (SETQ HORIZPATTERN (BITMAPCREATE WWIDTH 1)) + (SETQ SCALEDWREG (UNSCALE.REGION WREG SCALE)) + (SETQ SCALEDWLEFT (fetch (REGION LEFT) of SCALEDWREG)) + (SETQ GRIDLEFT (NEAREST.ON.GRID SCALEDWLEFT GRID)) + (* put limit calculation outside of + the loop.) + (SETQ SKREGLIMIT (PLUS SCALEDWLEFT (fetch (REGION WIDTH) of SCALEDWREG))) + (for X from GRIDLEFT to SKREGLIMIT by GRID + do (BITMAPBIT HORIZPATTERN (FIXR (FQUOTIENT (DIFFERENCE X SCALEDWLEFT) + SCALE)) + 0 1)) + (SETQ SKREGLIMIT (PLUS (fetch (REGION BOTTOM) of SCALEDWREG) + (fetch (REGION HEIGHT) of SCALEDWREG))) + (for Y from (NEAREST.ON.GRID (fetch (REGION BOTTOM) of SCALEDWREG) + GRID) to SKREGLIMIT by GRID + do (BITBLT HORIZPATTERN 0 0 SKW WLEFT (FIXR (FQUOTIENT Y SCALE)) + WWIDTH 1 'INPUT 'PAINT] + (COND + ((GREATERP (FQUOTIENT GRID SCALE) + (QUOTIENT (MIN (WINDOWPROP SKW 'HEIGHT) + (WINDOWPROP SKW 'WIDTH)) + 3)) (* there aren't enough visible points + so tell the user how far apart they + are.) + (STATUSPRINT SKW (CONCAT (COND + (NEWFLG "New") + (T "Current")) + " grid has a position every " + (FIXR (FQUOTIENT GRID SCALE)) + " screen points."]) + +(SK.GRIDFACTOR + [LAMBDA (SKETCHW GRIDSIZE) (* rrb "25-Oct-84 12:34") + + (* sets the grid factor of a window to GRIDSIZE. + Returns the previous setting. The actual use of the grid is determined by + (QUOTE USEGRID) property.) + + (COND + ((NUMBERP GRIDSIZE) + (WINDOWPROP SKETCHW 'GRIDFACTOR GRIDSIZE)) + (GRIDSIZE (\ILLEGAL.ARG GRIDSIZE) + (WINDOWPROP SKETCHW 'GRIDFACTOR)) + (T (WINDOWPROP SKETCHW 'GRIDFACTOR]) + +(SK.TURN.GRID.ON + [LAMBDA (SKETCHW QUIETFLG) (* rrb "25-Oct-84 12:04") + (* turns the grid on.) + (COND + ((WINDOWPROP SKETCHW 'USEGRID T) + (OR QUIETFLG (STATUSPRINT SKETCHW "The grid was already in use."]) + +(SK.TURN.GRID.OFF + [LAMBDA (SKETCHW) (* rrb "25-Oct-84 12:03") + (* turns the grid off.) + (COND + ((WINDOWPROP SKETCHW 'USEGRID NIL) + (SK.TAKE.DOWN.GRID SKETCHW)) + (T (STATUSPRINT SKETCHW "The grid was not is use."]) + +(SK.MAKE.GRID.LARGER + [LAMBDA (SKETCHW) (* rrb "23-Sep-86 10:51") + (* makes the grid larger. + If the grid is off, it turns it on.) + (SK.CHANGE.GRID [PROG ((NOWGRID (SK.GRIDFACTOR SKETCHW))) + (RETURN (COND + ((EQP NOWGRID 0.5) (* if going from half to one, switch + to integer scale factors) + 1) + (T (TIMES NOWGRID 2] + SKETCHW]) + +(SK.MAKE.GRID.SMALLER + [LAMBDA (SKETCHW) (* rrb "23-Sep-86 10:48") + (* makes the grid smaller. + If the grid is off, it turns it on.) + (SK.CHANGE.GRID [PROG ((NOWGRID (SK.GRIDFACTOR SKETCHW))) + (RETURN (COND + ((EQ NOWGRID 1) (* if going from one to half, switch + from integer scale factors to floating) + 0.5) + (T (QUOTIENT NOWGRID 2] + SKETCHW]) + +(SK.CHANGE.GRID + [LAMBDA (NEWGRID SKETCHW) (* rrb " 1-Feb-85 15:52") + + (* changes the grid of a window. Turns the grid on if it isn't already on.) + + (SK.TURN.GRID.ON SKETCHW T) + (AND (WINDOWPROP SKETCHW 'GRIDUP) + (SK.REMOVE.GRID.POINTS SKETCHW)) + (SK.GRIDFACTOR SKETCHW NEWGRID) + (AND (WINDOWPROP SKETCHW 'GRIDUP) + (SK.DISPLAY.GRID.POINTS SKETCHW T]) + +(GRID.FACTOR1 + [LAMBDA (REALHEIGHT HEIGHTONSCREEN NPTS) (* rrb "19-Jun-84 17:26") + + (* returns the greatest power of two such that REALHEIGHT maps onto SCREENHEIGHT + leaving at least NPTS per grid.) + + (LEASTPOWEROF2GT (FQUOTIENT (FTIMES NPTS REALHEIGHT) + HEIGHTONSCREEN]) + +(LEASTPOWEROF2GT + [LAMBDA (FLOATP) (* rrb "23-Sep-86 10:57") + + (* returns the number which is the least power of two that is greater than + FLOATP.) + + (PROG [(LOG2 (FQUOTIENT (LOG FLOATP) + (CONSTANT (LOG 2] + (RETURN (COND + [(FGREATERP LOG2 0.0) (* keep the grid integer) + (FIX (COND + ((EQUAL LOG2 (FLOAT (FIX LOG2))) + (* special case of exact hit.) + (EXPT 2.0 (FIX LOG2))) + (T (EXPT 2.0 (ADD1 (FIX LOG2] + (T (EXPT 2.0 (FIX LOG2]) + +(GREATESTPOWEROF2LT + [LAMBDA (FLOATP) (* rrb " 9-Jul-85 17:43") + + (* returns the number which is the greatest power of two that is less than + FLOATP.) + + (PROG [(LOG2 (FQUOTIENT (LOG FLOATP) + (CONSTANT (LOG 2] + (RETURN (COND + ((FGREATERP LOG2 0.0) + (EXPT 2.0 (FIX LOG2))) + ((EQUAL LOG2 (FLOAT (FIX LOG2))) (* special case of exact hit.) + (EXPT 2.0 (FIX LOG2))) + (T (EXPT 2.0 (SUB1 (FIX LOG2]) + +(SK.DEFAULT.GRIDFACTOR + [LAMBDA (SKETCHW) (* rrb "25-Nov-85 17:46") + (* returns the default grid factor for + a window. Starts at about a quarter + inch.) + (GRID.FACTOR1 (fetch (REGION HEIGHT) of (SKETCH.REGION.VIEWED SKETCHW)) + (WINDOWPROP SKETCHW 'HEIGHT) + DEFAULTGRIDSIZE]) + +(SK.PUT.ON.GRID + [LAMBDA (GPOSITION GRID) (* rrb " 7-Feb-85 11:32") + (* returns the grid point that is + closest to GPOSITION.) + (create POSITION + XCOORD _ (NEAREST.ON.GRID (fetch (POSITION XCOORD) of GPOSITION) + GRID) + YCOORD _ (NEAREST.ON.GRID (fetch (POSITION YCOORD) of GPOSITION) + GRID]) + +(MAP.WINDOW.ONTO.GRID + [LAMBDA (X SCALE GRID) (* rrb "20-Jun-84 16:53") + (* maps from a window point onto the + window point that is closest to GRID.) + (FIXR (QUOTIENT (NEAREST.ON.GRID (TIMES X SCALE) + GRID) + SCALE]) + +(MAP.SCREEN.ONTO.GRID + [LAMBDA (X SCALE GRID WOFFSET) (* rrb "20-Jun-84 16:22") + + (* maps a screen coordinate into the screen coordinate that is closest to the + grid of a window with offset WOFFSET.) + + (COND + ((OR (NOT GRID) + (EQ GRID 0) + (EQP GRID 0.0)) + X) + (T (IPLUS (MAP.WINDOW.ONTO.GRID (IDIFFERENCE X WOFFSET) + SCALE GRID) + WOFFSET]) + +(MAP.GLOBAL.PT.ONTO.GRID + [LAMBDA (PT SKW) (* rrb " 7-Feb-85 11:33") + + (* If the grid is in use, maps from a point in global coordinates into the + closest grid point in global coordinates.) + + (COND + ((WINDOWPROP SKW 'USEGRID) + (SK.PUT.ON.GRID PT (SK.GRIDFACTOR SKW))) + (T PT]) + +(MAP.GLOBAL.REGION.ONTO.GRID + [LAMBDA (GREGION SKW) (* rrb "25-Jan-85 10:50") + + (* If the grid is in use, maps from a region in global coordinates into the + closest larger region in global coordinates.) + + (COND + [(WINDOWPROP SKW 'USEGRID) + (PROG ((GRID (SK.GRIDFACTOR SKW)) + HALFGRID NEWLEFT NEWBOTTOM) + (SETQ HALFGRID (QUOTIENT GRID 2.0)) + (RETURN (CREATEREGION (SETQ NEWLEFT (NEAREST.ON.GRID (DIFFERENCE (fetch (REGION LEFT) + of GREGION) + HALFGRID) + GRID)) + (SETQ NEWBOTTOM (NEAREST.ON.GRID (DIFFERENCE (fetch (REGION BOTTOM) + of GREGION) + HALFGRID) + GRID)) + (DIFFERENCE (NEAREST.ON.GRID (PLUS (fetch (REGION RIGHT) of GREGION) + HALFGRID) + GRID) + NEWLEFT) + (DIFFERENCE (NEAREST.ON.GRID (PLUS (fetch (REGION TOP) of GREGION) + HALFGRID) + GRID) + NEWBOTTOM] + (T GREGION]) + +(MAP.WINDOW.POINT.ONTO.GLOBAL.GRID + [LAMBDA (PT SCALE GRID) (* rrb " 1-Feb-85 14:08") + + (* maps from a point in window coordinates into the closest grid point in global + coordinates.) + + (create POSITION + XCOORD _ (MAP.WINDOW.ONTO.GLOBAL.GRID (fetch (POSITION XCOORD) of PT) + SCALE GRID) + YCOORD _ (MAP.WINDOW.ONTO.GLOBAL.GRID (fetch (POSITION YCOORD) of PT) + SCALE GRID]) + +(MAP.WINDOW.ONTO.GLOBAL.GRID + [LAMBDA (X SCALE GRID) (* rrb " 1-Feb-85 14:08") + (* maps from a window point onto the + window point that is closest to GRID.) + (NEAREST.ON.GRID (TIMES X SCALE) + GRID]) + +(SK.UPDATE.GRIDFACTOR + [LAMBDA (SKW OLDSCALE) (* rrb "25-Nov-85 17:46") + (* determines the size of the grid for + the newly scaled window.) + (PROG ((OLDGRID (SK.GRIDFACTOR SKW)) + X) + (SK.GRIDFACTOR SKW (GRID.FACTOR1 (fetch (REGION HEIGHT) of (SKETCH.REGION.VIEWED SKW)) + (WINDOWPROP SKW 'HEIGHT) + (IMIN DEFAULTMAXGRIDSIZE (FQUOTIENT OLDGRID OLDSCALE]) + +(SK.MAP.FROM.WINDOW.TO.GLOBAL.GRID + [LAMBDA (POSITION SKETCHW) (* rrb "11-Jul-86 15:56") + + (* maps from a position in a window to the corresponding global position taking + into account the grid if it is in use.) + + (COND + ((WINDOWPROP SKETCHW 'USEGRID) + (MAP.WINDOW.POINT.ONTO.GLOBAL.GRID POSITION (VIEWER.SCALE SKETCHW) + (SK.GRIDFACTOR SKETCHW))) + (T (SK.UNSCALE.POSITION.FROM.VIEWER POSITION (VIEWER.SCALE SKETCHW]) + +(SK.MAP.INPUT.PT.TO.GLOBAL + [LAMBDA (POSSPEC SKETCHW) (* rrb "11-Jul-86 15:52") + + (* maps from a position ala GETSKWPOSITION in a window to the corresponding + global position (POSITION is a list of (GRIDON? position))) + + (AND POSSPEC (COND + ((EQ (fetch (INPUTPT INPUT.ONGRID?) of POSSPEC) + 'GLOBAL) + (fetch (INPUTPT INPUT.GLOBALPOSITION) of POSSPEC)) + ((fetch (INPUTPT INPUT.ONGRID?) of POSSPEC) + (MAP.WINDOW.POINT.ONTO.GLOBAL.GRID (fetch (INPUTPT INPUT.POSITION) of POSSPEC) + (VIEWER.SCALE SKETCHW) + (SK.GRIDFACTOR SKETCHW))) + (T + + (* map the point onto a grid location that would have the same screen position as + the given point.) + + (SK.MAP.FROM.WINDOW.TO.NEAREST.GRID (fetch (INPUTPT INPUT.POSITION) + of POSSPEC) + (VIEWER.SCALE SKETCHW) + T]) + +(SK.MAP.FROM.WINDOW.TO.NEAREST.GRID + [LAMBDA (POSITION SCALE NOMOVEFLG) (* rrb " 3-Oct-85 14:16") + + (* maps from a point in a window to the closest grid position in the global space + that has a distance between the points of less than 1.0) + + (PROG [(GRID (COND + (NOMOVEFLG + + (* if NOMOVEFLG is on, use a grid small enough that the mapping into and out of + coordinate space will leave POSITION unchanged. + For most uses, this is too fine.) + + (GREATESTPOWEROF2LT SCALE)) + (T (LEASTPOWEROF2GT (TIMES SCALE 2] + (RETURN (create POSITION + XCOORD _ (NEAREST.ON.GRID (TIMES (fetch (POSITION XCOORD) of POSITION) + SCALE) + GRID) + YCOORD _ (NEAREST.ON.GRID (TIMES (fetch (POSITION YCOORD) of POSITION) + SCALE) + GRID]) +) + +(RPAQ? DEFAULTGRIDSIZE 8) + +(RPAQ? DEFAULTMINGRIDSIZE 4) + +(RPAQ? DEFAULTMAXGRIDSIZE 32) + + + +(* ; "history and undo stuff") + +(DEFINEQ + +(SK.ADD.HISTEVENT + [LAMBDA (EVENTTYPE EVENTARGS SKETCHW) (* rrb "11-Jan-85 18:04") + (* puts a history event on a sketch + window.) + (* trim to a given length) + (PROG [(HISTLST (WINDOWPROP SKETCHW 'SKETCHHISTORY] + (WINDOWPROP SKETCHW 'SKETCHHISTORY (CONS (create SKHISTEVENT + EVENTTYPE _ EVENTTYPE + EVENTARGS _ EVENTARGS) + (COND + ((GREATERP SKETCH.#.UNDO.ITEMS (LENGTH HISTLST) + ) + (* there is room for one more) + HISTLST) + (T (REMOVE.LAST HISTLST]) + +(SK.SEL.AND.UNDO + [LAMBDA (SKW) (* rrb " 5-Dec-85 17:18") + (* gives the user a choice of past + events to undo.) + (SKED.CLEAR.SELECTION SKW) + (PROG [EVENT UNDOFN (HISTLST (WINDOWPROP SKW 'SKETCHHISTORY] + (COND + ((NULL HISTLST) + (STATUSPRINT SKW "Nothing to undo.") + (RETURN))) + (COND + ([SETQ EVENT (\CURSOR.IN.MIDDLE.MENU (create MENU + ITEMS _ (for EVENT in HISTLST + collect (LIST (SK.UNDO.NAME + EVENT) + EVENT)) + WHENSELECTEDFN _ (FUNCTION CADR) + TITLE _ "Select event to undo" + WHENHELDFN _ (FUNCTION (LAMBDA (ITEM MENU + BUTTON) + (PROMPTPRINT + "Will undo this event." + ] + (COND + ((fetch (SKHISTEVENT UNDONE?) of EVENT) + + (* can't undo already undone event. They are included in the menu to provide + session continuity.) + + (STATUSPRINT SKW "That event has already been undone.") + (RETURN NIL)) + ([NULL (SETQ UNDOFN (fetch (SKEVENTTYPE SKUNDOFN) of (SKEVENTTYPEFNS + (fetch (SKHISTEVENT EVENTTYPE) + of EVENT] + (STATUSPRINT SKW "Can't undo that event.") + (RETURN NIL))) + (COND + ((APPLY* UNDOFN (fetch (SKHISTEVENT EVENTARGS) of EVENT) + SKW EVENT) (* only add to history list if + something happened.) + (replace (SKHISTEVENT UNDONE?) of EVENT with T) + (SK.ADD.HISTEVENT 'UNDO EVENT SKW)) + ((NOT (EQ UNDOFN 'SK.UNDO.UNDO)) + (STATUSPRINT SKW "Element subsequently modified, can't undo"]) + +(SK.UNDO.LAST + [LAMBDA (SKW) (* rrb " 5-Dec-85 17:19") + (* undoes the first not yet undone + history event.) + (SKED.CLEAR.SELECTION SKW) + (PROG [EVENT UNDOFN (HISTLST (WINDOWPROP SKW 'SKETCHHISTORY] + (COND + ((NULL HISTLST) + (STATUSPRINT SKW "Nothing to undo.") + (RETURN))) + (COND + [(SETQ EVENT (for HISTEVENT in HISTLST + when [AND (NOT (EQ (fetch (SKHISTEVENT EVENTTYPE) of HISTEVENT) + 'UNDO)) + (NOT (fetch (SKHISTEVENT UNDONE?) of HISTEVENT)) + (SETQ UNDOFN (fetch (SKEVENTTYPE SKUNDOFN) + of (SKEVENTTYPEFNS (fetch (SKHISTEVENT + EVENTTYPE) + of HISTEVENT] + do (RETURN HISTEVENT))) + (COND + ((APPLY* UNDOFN (fetch (SKHISTEVENT EVENTARGS) of EVENT) + SKW EVENT) (* only add to history list if + something happened.) + (STATUSPRINT SKW (SK.UNDO.NAME EVENT) + " event undone.") + (replace (SKHISTEVENT UNDONE?) of EVENT with T) + (SK.ADD.HISTEVENT 'UNDO EVENT SKW)) + ((NOT (EQ UNDOFN 'SK.UNDO.UNDO)) + (STATUSPRINT SKW "Element subsequently modified, can't undo"] + (T (STATUSPRINT SKW " +" "All events have been undone. Use the '?UNDO' subcommand to undo an UNDO command."]) + +(SK.UNDO.NAME + [LAMBDA (HISTEVENT) (* rrb "17-Apr-84 11:27") + (* returns the menu label for + HISTEVENT.) + (APPLY* (fetch (SKEVENTTYPE SKUNDONAMEFN) of (SKEVENTTYPEFNS (fetch (SKHISTEVENT EVENTTYPE) + of HISTEVENT))) + HISTEVENT]) + +(SKEVENTTYPEFNS + [LAMBDA (EVENTTYPE) (* rrb "17-Apr-84 11:02") + (* returns the list of type related + functions associated with EVENTTYPE.) + (GETPROP EVENTTYPE 'EVENTFNS]) + +(SK.TYPE.OF.FIRST.ARG + [LAMBDA (HISTEVENT NOMARKUNDOFLG) (* rrb "11-Dec-85 15:20") + + (* returns a name suitable for a menu label for an history event by combining the + event name with the type of its arg.) + + (PROG ((ARGS (fetch (SKHISTEVENT EVENTARGS) of HISTEVENT)) + (TYPE (fetch (SKHISTEVENT EVENTTYPE) of HISTEVENT))) + (RETURN (CONCAT (COND + ((AND (NULL NOMARKUNDOFLG) + (fetch (SKHISTEVENT UNDONE?) of HISTEVENT)) + "*") + (T " ")) + TYPE " " (COND + ((CDR ARGS) + '"a group") + (T (SELECTQ TYPE + ((GROUP UNGROUP FREEZE UNFREEZE) + "") + ((MOVE CHANGE) + (SK.LABEL.FROM.TYPE (fetch (GLOBALPART GTYPE) + of (CAAR ARGS)))) + (SK.LABEL.FROM.TYPE (fetch (GLOBALPART GTYPE) + of (CAR ARGS]) +) +(DEFINEQ + +(SK.DELETE.UNDO + [LAMBDA (EVENTARGS SKW) (* rrb "11-Sep-84 14:57") + (* undoes a delete event) + (PROG (CHANGED?) + [for GELT in EVENTARGS do (COND + ((SK.ADD.ELEMENT GELT SKW) + (SETQ CHANGED? T] + (RETURN CHANGED?]) + +(SK.ADD.UNDO + [LAMBDA (EVENTARGS SKW) (* rrb "30-Dec-85 16:18") + (* undoes an add event) + (SK.DELETE.ELEMENT2 EVENTARGS SKW 'DON'T]) +) +(DEFINEQ + +(SK.CHANGE.UNDO + [LAMBDA (EVENTARGS SKW) (* rrb "24-Sep-86 17:09") + (* undoes a change event) + + (* the args for a change event are the old {previous} global part of the element + and the new global part of the element, the property that was changed, the new + value and the old value.) + + (PROG [CHANGED? NOWELT PREVELT (WHENCHANGEDFN (GETSKETCHPROP (INSURE.SKETCH SKW) + 'WHENCHANGEDFN] + [for EVENT in EVENTARGS do (SETQ NOWELT (fetch (SKHISTORYCHANGESPEC NEWELT) of EVENT)) + (SETQ PREVELT (fetch (SKHISTORYCHANGESPEC OLDELT) of EVENT)) + (* apply the whenchangedfn if the + element is still in the sketch.) + (COND + [(AND WHENCHANGEDFN (SK.ELT.IN.SKETCH? NOWELT SKW) + (EQ (APPLY* WHENCHANGEDFN SKW NOWELT + (fetch (SKHISTORYCHANGESPEC PROPERTY) + of EVENT) + (fetch (SKHISTORYCHANGESPEC OLDVALUE) + of EVENT) + (fetch (SKHISTORYCHANGESPEC NEWVALUE) + of EVENT)) + 'DON'T] + ((SK.UPDATE.ELEMENT NOWELT PREVELT SKW NIL T) + (SETQ CHANGED? T] + (RETURN CHANGED?]) + +(SK.ELT.IN.SKETCH? + [LAMBDA (ELEMENT SKETCH) (* determines if an element is in a + sketch.) + (MEMBER ELEMENT (SKETCH.ELEMENTS.OF.SKETCH SKETCH]) + +(SK.CHANGE.REDO + [LAMBDA (EVENTARGS SKW) (* rrb "24-Sep-86 17:10") + (* redoes a change event) + (PROG [CHANGED? NEWELT OLDELT (WHENCHANGEDFN (GETSKETCHPROP (INSURE.SKETCH SKW) + 'WHENCHANGEDFN] + [for EVENT in EVENTARGS do (SETQ NEWELT (fetch (SKHISTORYCHANGESPEC NEWELT) of EVENT)) + (SETQ OLDELT (fetch (SKHISTORYCHANGESPEC OLDELT) of EVENT)) + (* apply the whenchangedfn if the + element is still in the sketch.) + (COND + [(AND WHENCHANGEDFN (SK.ELT.IN.SKETCH? OLDELT SKW) + (EQ (APPLY* WHENCHANGEDFN SKW OLDELT + (fetch (SKHISTORYCHANGESPEC PROPERTY) + of EVENT) + (fetch (SKHISTORYCHANGESPEC NEWVALUE) + of EVENT) + (fetch (SKHISTORYCHANGESPEC OLDVALUE) + of EVENT)) + 'DON'T] + ((SK.UPDATE.ELEMENT OLDELT NEWELT SKW NIL T) + (SETQ CHANGED? T] + (OR CHANGED? (STATUSPRINT SKW + "That sketch element has been changed by something else, can't redo."]) + +(SK.MOVE.UNDO + [LAMBDA (EVENTARGS SKW) (* rrb "24-Sep-86 17:10") + (* undoes a move event) + + (* the args for a move event are the old {previous} global part of the element + and the new global part of the element, and the amount of the move.) + + (PROG [CHANGED? NOWELT PREVELT (WHENMOVEDFN (GETSKETCHPROP (INSURE.SKETCH SKW) + 'WHENMOVEDFN] + [for EVENT in EVENTARGS do (SETQ NOWELT (CADR EVENT)) + (SETQ PREVELT (CAR EVENT)) + (* apply the WHENMOVEDFN if the + element is still in the sketch.) + (COND + [(AND WHENMOVEDFN (SK.ELT.IN.SKETCH? NOWELT SKW) + (EQ (APPLY* WHENMOVEDFN SKW (CONS T NOWELT) + (CADDR EVENT)) + 'DON'T] + ((SK.UPDATE.ELEMENT NOWELT PREVELT SKW NIL T) + (SETQ CHANGED? T] + (RETURN CHANGED?]) + +(SK.MOVE.REDO + [LAMBDA (EVENTARGS SKW) (* rrb "24-Sep-86 17:10") + (* redoes a move event) + (PROG [CHANGED? NEWELT OLDELT (WHENMOVEDFN (GETSKETCHPROP (INSURE.SKETCH SKW) + 'WHENMOVEDFN] + [for EVENT in EVENTARGS do (SETQ NEWELT (CADR EVENT)) + (SETQ OLDELT (CAR EVENT)) + (* apply the WHENMOVEDFN if the + element is still in the sketch.) + (COND + [(AND WHENMOVEDFN (SK.ELT.IN.SKETCH? OLDELT SKW) + (EQ (APPLY* WHENMOVEDFN SKW OLDELT (CADDR EVENT)) + 'DON'T] + ((SK.UPDATE.ELEMENT OLDELT NEWELT SKW NIL T) + (SETQ CHANGED? T] + (OR CHANGED? (STATUSPRINT SKW + "That sketch element has been changed by something else, can't redo."]) +) +(DEFINEQ + +(SK.UNDO.UNDO + [LAMBDA (UNDONEEVENT SKW THISEVENT) (* rrb "18-Apr-84 15:32") + (* undoes an UNDO event by calling the + REDO fn of that event type.) + (PROG (REDOFN) + (COND + ([SETQ REDOFN (fetch (SKEVENTTYPE SKREDOFN) of (SKEVENTTYPEFNS (fetch (SKHISTEVENT + EVENTTYPE) + of UNDONEEVENT] + (APPLY* REDOFN (fetch (SKHISTEVENT EVENTARGS) of UNDONEEVENT) + SKW) + (replace (SKHISTEVENT UNDONE?) of UNDONEEVENT with NIL) + (* remove the undo event from the + history list.) + (WINDOWDELPROP SKW 'SKETCHHISTORY THISEVENT)) + (T (STATUSPRINT SKW "Can't undo that event."))) + + (* always return NIL so the undoing of an undo event won't be added as an event.) + + (RETURN NIL]) + +(SK.UNDO.MENULABEL + [LAMBDA (UNDOEVENT) (* rrb "18-Sep-84 11:53") + + (* returns a name suitable for a menu label for an UNDO history event by + combining the event name with the type of its arg.) + + (CONCAT "undo" (SK.TYPE.OF.FIRST.ARG (fetch (SKHISTEVENT EVENTARGS) of UNDOEVENT) + T]) + +(SK.LABEL.FROM.TYPE + [LAMBDA (SKELEMENTTYPE) (* rrb " 4-Jun-85 13:40") + + (* takes a type name and returns the label for it. + These two are different because the names changed since the first sketchs were + made.) + + (SELECTQ SKELEMENTTYPE + (WIRE 'LINE) + (OPENCURVE 'CURVE) + (CLOSEDWIRE 'POLYGON) + SKELEMENTTYPE]) +) +(DECLARE%: DONTCOPY +(DECLARE%: EVAL@COMPILE + +(RECORD SKHISTEVENT (EVENTTYPE EVENTARGS UNDONE?)) + +(RECORD SKEVENTTYPE (SKUNDOFN SKUNDONAMEFN SKREDOFN)) +) +) + +(RPAQ? SKETCH.#.UNDO.ITEMS 30) +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(GLOBALVARS SKETCH.#.UNDO.ITEMS) +) + +(PUTPROPS ADD EVENTFNS (SK.ADD.UNDO SK.TYPE.OF.FIRST.ARG SK.DELETE.UNDO)) + +(PUTPROPS DELETE EVENTFNS (SK.DELETE.UNDO SK.TYPE.OF.FIRST.ARG SK.ADD.UNDO)) + +(PUTPROPS CHANGE EVENTFNS (SK.CHANGE.UNDO SK.TYPE.OF.FIRST.ARG SK.CHANGE.REDO)) + +(PUTPROPS UNDO EVENTFNS (SK.UNDO.UNDO SK.UNDO.MENULABEL SHOULDNT)) + +(PUTPROPS MOVE EVENTFNS (SK.MOVE.UNDO SK.TYPE.OF.FIRST.ARG SK.MOVE.REDO)) + +(PUTPROPS COPY EVENTFNS (SK.ADD.UNDO SK.TYPE.OF.FIRST.ARG SK.DELETE.UNDO)) + + + +(* ; "functions for displaying the global coordinate space values.") + +(DEFINEQ + +(SHOW.GLOBAL.COORDS + [LAMBDA (XCOORD YCOORD W) (* rrb " 5-Jun-85 18:30") + (* converts to global coordinates and + displays it in W) + (DSPRESET W) + (COND + ((AND (EQP XCOORD (FIX XCOORD)) + (EQP YCOORD (FIX YCOORD))) + (printout W .F6.0 XCOORD " x" " " T .F6.0 YCOORD " y" " ")) + (T (printout W .F8.2 XCOORD " x" " " T .F8.2 YCOORD " y" " "]) + +(LOCATOR.CLOSEFN + [LAMBDA (GCOORDW) (* rrb " 7-May-85 09:41") + + (* close function for a window that is keeping track of the global coordinate + system. It breaks the link to itself.) + + (DETACHWINDOW GCOORDW]) + +(SKETCHW.FROM.LOCATOR + [LAMBDA (GCOORDW) (* rrb " 7-May-85 09:40") + (* returns the active window if any + that points to GCOORDW) + (for W in (ACTIVEWINDOWS) when (MEMB GCOORDW (ATTACHEDWINDOWS W)) do (RETURN W]) + +(SKETCHW.UPDATE.LOCATORS + [LAMBDA (W) (* rrb " 7-May-85 10:06") + + (* a cursor moved function for a sketch that shows the coordinates cursor in + global coordinates.) + + (AND (INSIDEP (DSPCLIPPINGREGION NIL W) + (LASTMOUSEX W) + (LASTMOUSEY W)) + (for LOCATOR in (ATTACHEDWINDOWS W) when (MEMB (FUNCTION LOCATOR.CLOSEFN) + (WINDOWPROP LOCATOR 'CLOSEFN)) + do (LOCATOR.UPDATE LOCATOR W]) + +(LOCATOR.UPDATE + [LAMBDA (LOCATORW SKW) (* rrb "22-May-85 11:09") + (* updates the position of the locator + coordinates.) + + (* there are three kinds of locators%: real coordinate, gridded real coordinates + and latitude longitude, although lat lon has been deimplemented.) + + (SELECTQ (WINDOWPROP LOCATORW 'LOCATORTYPE) + (GLOBALCOORD (UPDATE.GLOBALCOORD.LOCATOR LOCATORW SKW)) + (GLOBALGRIDDEDCOORD + (UPDATE.GLOBAL.GRIDDED.COORD.LOCATOR LOCATORW SKW)) + (LATLON (UPDATE.LATLON.LOCATOR LOCATORW SKW)) + (SHOULDNT]) + +(UPDATE.GLOBAL.LOCATOR + [LAMBDA (SKETCHW) (* rrb "19-APR-83 14:19") + (* checks to see if the latitude + longitude display needs to be updated.) + (COND + ([OR (AND (NEQ SKETCHW.LASTCURSORPTX (SETQ SKETCHW.LASTCURSORPTX (LASTMOUSEX SKETCHW))) + (SETQ SKETCHW.LASTCURSORPTY (LASTMOUSEY SKETCHW))) + (NEQ SKETCHW.LASTCURSORPTY (SETQ SKETCHW.LASTCURSORPTY (LASTMOUSEY SKETCHW] + (* call it if either point has + changed.) + (SKETCHW.UPDATE.LOCATORS SKETCHW]) + +(UPDATE.GLOBALCOORD.LOCATOR + [LAMBDA (GCOORDW W) (* rrb "11-Jul-86 15:52") + + (* a cursor moved function for a map that shows the coordinates cursor in global + coordinates.) + + (PROG (SCALE) + (OR GCOORDW (RETURN)) + (OR (SETQ SCALE (VIEWER.SCALE W)) + (RETURN)) + (SHOW.GLOBAL.COORDS (UNSCALE (LASTMOUSEX W) + SCALE) + (UNSCALE (LASTMOUSEY W) + SCALE) + GCOORDW]) + +(ADD.GLOBAL.DISPLAY + [LAMBDA (SKW TYPE) (* rrb "28-Aug-85 11:10") + + (* creates a locator which gives the coordinates of the cursor in SKW in global + coordinates.) + + (PROG [(LOCATOR (CREATE.GLOBAL.DISPLAYER (FONTCREATE BOLDFONT) + (COND + ((EQ TYPE 'GRID) + "cursor grid location") + (T "cursor location in sketch"] + (ATTACHWINDOW LOCATOR SKW 'BOTTOM 'RIGHT 'LOCALCLOSE) + [WINDOWPROP LOCATOR 'LOCATORTYPE (COND + ((EQ TYPE 'GRID) + 'GLOBALGRIDDEDCOORD) + (T 'GLOBALCOORD] + (WINDOWPROP SKW 'CURSORMOVEDFN (FUNCTION SKETCHW.UPDATE.LOCATORS)) + (RETURN LOCATOR]) + +(ADD.GLOBAL.GRIDDED.DISPLAY + [LAMBDA (SKW) (* adds a locator that shows the + nearest grid location.) + (ADD.GLOBAL.DISPLAY SKW 'GRID]) + +(CREATE.GLOBAL.DISPLAYER + [LAMBDA (FONT TITLE) (* rrb " 7-May-85 09:59") + (* creates a window for displaying + latitude longitude.) + (PROG ((GCOORDW (CREATEW (CREATEREGION 0 0 (WIDTHIFWINDOW (STRINGWIDTH "11111111.1111 " FONT)) + (HEIGHTIFWINDOW (ITIMES 2 (FONTPROP FONT 'HEIGHT)) + T)) + (OR TITLE "Real Coordinates") + NIL T))) + + (* extra space on stringwidth is to allow for the fact that printout translates + into PRIN1 rather than PRIN3.) + + (DSPFONT FONT GCOORDW) + (DSPRESET GCOORDW) (* reset its coordinates to the upper + left) + (WINDOWPROP GCOORDW 'CLOSEFN (FUNCTION LOCATOR.CLOSEFN)) + (RETURN GCOORDW]) + +(UPDATE.GLOBAL.GRIDDED.COORD.LOCATOR + [LAMBDA (GCOORDW W) (* rrb "11-Jul-86 15:52") + + (* a cursor moved function for a map that shows the coordinates cursor in global + coordinates.) + + (PROG (SCALE) + (OR GCOORDW (RETURN)) + (OR (SETQ SCALE (VIEWER.SCALE W)) + (RETURN)) + (COND + [(WINDOWPROP W 'USEGRID) + (PROG ((GRID (SK.GRIDFACTOR W)) + XGRID YGRID) + (SETQ YGRID (MAP.WINDOW.ONTO.GLOBAL.GRID (LASTMOUSEY W) + SCALE GRID)) + (COND + ([OR [NOT (EQP (SETQ XGRID (MAP.WINDOW.ONTO.GLOBAL.GRID (LASTMOUSEX W) + SCALE GRID)) + (WINDOWPROP GCOORDW 'XCOORD] + (NOT (EQP YGRID (WINDOWPROP GCOORDW 'YCOORD] + + (* only update if one of the values has changed. + This is done here but not in the ungridded case because it is handled by the + cursor moved fn.) + + (WINDOWPROP GCOORDW 'XCOORD XGRID) + (WINDOWPROP GCOORDW 'YCOORD YGRID) + (SHOW.GLOBAL.COORDS XGRID YGRID GCOORDW] + (T (SHOW.GLOBAL.COORDS (UNSCALE (LASTMOUSEX W) + SCALE) + (UNSCALE (LASTMOUSEY W) + SCALE) + GCOORDW]) +) + +(RPAQQ SKETCHW.LASTCURSORPTX 0) + +(RPAQQ SKETCHW.LASTCURSORY 0) +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(GLOBALVARS SKETCHW.LASTCURSORPTX SKETCHW.LASTCURSORPTY) +) + + + +(* ; "fns for reading colors") + +(DEFINEQ + +(DISPLAYREADCOLORHLSLEVELS + [LAMBDA (HLS WIN) (* rrb "17-Jul-85 15:10") + (* displays a hue lightness saturation + triple in the color reading window.) + (PROG (LEVEL) + (DISPLAYREADCOLORLEVEL (SETQ LEVEL (HLSLEVEL HLS 'HUE)) + (LEVELFROMHLSVALUE 'HUE LEVEL) + HUEREGION WIN) + (DISPLAYREADCOLORLEVEL (SETQ LEVEL (HLSLEVEL HLS 'LIGHTNESS)) + (LEVELFROMHLSVALUE 'LIGHTNESS LEVEL) + LIGHTNESSREGION WIN) + (DISPLAYREADCOLORLEVEL (SETQ LEVEL (HLSLEVEL HLS 'SATURATION)) + (LEVELFROMHLSVALUE 'SATURATION LEVEL) + SATURATIONREGION WIN]) + +(DISPLAYREADCOLORLEVEL + [LAMBDA (PRINTLEVEL BARLEVEL REGION WINDOW) (* ; "Edited 12-Jun-90 15:14 by mitani") + (* displays the value of a primary + color in a color bar region.) + (COND + ((FIXP PRINTLEVEL) + (MOVETO (DIFFERENCE (fetch (REGION LEFT) of REGION) + 4) + VALBTM WINDOW) + (PRIN1 PRINTLEVEL WINDOW) (* overstrike extra digits in case the + old value was larger.) + (PRIN1 " " WINDOW)) + (T (* floating point values) + (MOVETO (DIFFERENCE (fetch (REGION LEFT) of REGION) + 10) + VALBTM WINDOW) + (printout WINDOW .F5.3 PRINTLEVEL))) + (FILLINREGION REGION BARLEVEL GRAYSHADE WINDOW]) + +(DRAWREADCOLORBOX + [LAMBDA (TITLELEFT TITLE WINDOW) (* rrb "17-Jul-85 14:20") + + (* draws the box and title for a display bar for an rgb or hls quantity. + Returns a dotted pair of the region the box occuppied and the left most position + printed in.) + + (PROG (XPOS REGION) + (MOVETO TITLELEFT 4 WINDOW) + (SETQ XPOS (DSPXPOSITION NIL WINDOW)) + (PRIN1 TITLE WINDOW) + (OUTLINEREGION (SETQ REGION (create REGION + LEFT _ (CENTEREDLEFT 10 XPOS (SETQ XPOS (DSPXPOSITION + NIL WINDOW))) + BOTTOM _ (PLUS 4 (FONTPROP WIN 'HEIGHT)) + WIDTH _ 10 + HEIGHT _ 256)) + 2 NIL WINDOW) + (RETURN (CONS REGION XPOS]) + +(READ.CHANGE.COLOR + [LAMBDA (MSG) (* reads a color from the user and + returns it) + BLACKCOLOR]) + +(READCOLOR1 + [LAMBDA (MSG ALLOWNONEFLG NOWCOLOR) (* rrb "19-Dec-85 12:02") + (* lets the user select a color.) + (PROG [(WIN (CREATEW (MAKEWITHINREGION (CREATEREGION LASTMOUSEX LASTMOUSEY COLORMENUWIDTH + COLORMENUHEIGHT) + WHOLEDISPLAY) + (OR MSG "Enter a color: Left in rectangle sets level."))) + VAL REDREGION GREENREGION BLUEREGION HUEREGION LIGHTNESSREGION SATURATIONREGION + (INITCOLOR (AND NOWCOLOR (INSURE.RGB.COLOR NOWCOLOR T] + [SETQ REDREGION (CAR (SETQ VAL (DRAWREADCOLORBOX 10 " RED " WIN] + [SETQ GREENREGION (CAR (SETQ VAL (DRAWREADCOLORBOX (IPLUS (CDR VAL) + 5) + "GREEN" WIN] + [SETQ BLUEREGION (CAR (SETQ VAL (DRAWREADCOLORBOX (IPLUS (CDR VAL) + 5) + " BLUE" WIN] + [SETQ HUEREGION (CAR (SETQ VAL (DRAWREADCOLORBOX (IPLUS (CDR VAL) + 20) + " hue " WIN] + [SETQ LIGHTNESSREGION (CAR (SETQ VAL (DRAWREADCOLORBOX (CDR VAL) + " light " WIN] + [SETQ SATURATIONREGION (CAR (SETQ VAL (DRAWREADCOLORBOX (CDR VAL) + " sat " WIN] + (ADDMENU (create MENU + ITEMS _ [APPEND [COND + (ALLOWNONEFLG '(("No color" 'NONE + "specifies that no color should be used." + ] + '((OK 'OK "Returns the displayed color.") + (Abort 'ABORT "Aborts this operation."] + CENTERFLG _ T + MENUBORDERSIZE _ 1 + WHENSELECTEDFN _ (FUNCTION READCOLORCOMMANDMENUSELECTEDFN)) + WIN + (create POSITION + XCOORD _ (PLUS (CDR VAL) + 10) + YCOORD _ 100)) + [SETQ VAL (COND + (INITCOLOR (READCOLOR2 WIN (fetch (RGB RED) of INITCOLOR) + (fetch (RGB GREEN) of INITCOLOR) + (fetch (RGB BLUE) of INITCOLOR))) + (T (READCOLOR2 WIN 0 0 0] + (CLOSEW WIN) + (RETURN VAL]) + +(READCOLORCOMMANDMENUSELECTEDFN + [LAMBDA (ITEM MENU BUTTON) (* rrb "18-Jul-85 11:01") + + (* when selected function for the menu that sits in the read color window. + Puts the value OK or ABORT on the window if selected.) + + (WINDOWPROP (WFROMMENU MENU) + 'MENUCOMMAND + (CADADR ITEM]) + +(READCOLOR2 + [LAMBDA (WIN REDLEVEL GREENLEVEL BLUELEVEL) (* rrb "29-Oct-85 12:29") + (* internal function to READCOLOR + which polls mouse and updates fields.) + (PROG ((VALBTM (IPLUS (fetch (REGION BOTTOM) of REDREGION) + 264)) + LEVEL LASTX LASTY HLS) + (PROGN (DISPLAYREADCOLORLEVEL REDLEVEL REDLEVEL REDREGION WIN) + (DISPLAYREADCOLORLEVEL GREENLEVEL GREENLEVEL GREENREGION WIN) + (DISPLAYREADCOLORLEVEL BLUELEVEL BLUELEVEL BLUEREGION WIN)) + (DISPLAYREADCOLORHLSLEVELS (SETQ HLS (RGBTOHLS REDLEVEL GREENLEVEL BLUELEVEL)) + WIN) + WAITLP + (* check if menu command was pressed.) + (SELECTQ (WINDOWPROP WIN 'MENUCOMMAND) + (OK (RETURN (create RGB + RED _ REDLEVEL + GREEN _ GREENLEVEL + BLUE _ BLUELEVEL))) + (NONE (RETURN 'NONE)) + (ABORT (RETURN NIL)) + NIL) + [COND + ((MOUSESTATE LEFT) + (COND + [[SETQ COLOR (COND + ((INSIDEP REDREGION (SETQ LASTX (LASTMOUSEX WIN)) + (SETQ LASTY (LASTMOUSEY WIN))) + 'RED) + ((INSIDEP GREENREGION LASTX LASTY) + 'GREEN) + ((INSIDEP BLUEREGION LASTX LASTY) + 'BLUE] + (until (MOUSESTATE (NOT LEFT)) + do (* as long as left is down, adjust the + color.) + (COND + ((NEQ [SETQ LEVEL (IMIN 255 (IMAX 0 (IDIFFERENCE (LASTMOUSEY WIN) + (fetch (REGION BOTTOM) + of REDREGION] + (SELECTQ COLOR + (RED REDLEVEL) + (GREEN GREENLEVEL) + BLUELEVEL)) (* see if color level has changed.) + (SELECTQ COLOR + (RED (DISPLAYREADCOLORLEVEL (SETQ REDLEVEL LEVEL) + REDLEVEL REDREGION WIN)) + (GREEN (DISPLAYREADCOLORLEVEL (SETQ GREENLEVEL LEVEL) + GREENLEVEL GREENREGION WIN)) + (DISPLAYREADCOLORLEVEL (SETQ BLUELEVEL LEVEL) + BLUELEVEL BLUEREGION WIN)) + (DISPLAYREADCOLORHLSLEVELS (SETQ HLS (RGBTOHLS REDLEVEL GREENLEVEL + BLUELEVEL)) + WIN] + ([SETQ COLOR (COND + ((INSIDEP HUEREGION (SETQ LASTX (LASTMOUSEX WIN)) + (SETQ LASTY (LASTMOUSEY WIN))) + 'HUE) + ((INSIDEP LIGHTNESSREGION LASTX LASTY) + 'LIGHTNESS) + ((INSIDEP SATURATIONREGION LASTX LASTY) + 'SATURATION] + (until (MOUSESTATE (NOT LEFT)) + do (* as long as red is down, adjust the + color.) + (COND + ((NOT (EQUAL [SETQ LEVEL (HLSVALUEFROMLEVEL + COLOR + (IMIN 255 (IMAX 0 (IDIFFERENCE + (LASTMOUSEY WIN) + (fetch (REGION BOTTOM) + of REDREGION] + (HLSLEVEL HLS COLOR))) + (* see if color level has changed.) + (HLSLEVEL HLS COLOR LEVEL) + (SELECTQ COLOR + (HUE (DISPLAYREADCOLORLEVEL LEVEL (LEVELFROMHLSVALUE 'HUE LEVEL) + HUEREGION WIN)) + (LIGHTNESS (DISPLAYREADCOLORLEVEL LEVEL (LEVELFROMHLSVALUE + 'LIGHTNESS LEVEL) + LIGHTNESSREGION WIN)) + (DISPLAYREADCOLORLEVEL LEVEL (LEVELFROMHLSVALUE 'SATURATION LEVEL) + SATURATIONREGION WIN))(* set the color levels of the current + color and update that display also.) + (SETQ LEVEL (HLSTORGB HLS)) + (PROGN (DISPLAYREADCOLORLEVEL (SETQ REDLEVEL (CAR LEVEL)) + REDLEVEL REDREGION WIN) + (DISPLAYREADCOLORLEVEL (SETQ GREENLEVEL (CADR LEVEL)) + GREENLEVEL GREENREGION WIN) + (DISPLAYREADCOLORLEVEL (SETQ BLUELEVEL (CADDR LEVEL)) + BLUELEVEL BLUEREGION WIN] + (BLOCK) + (GO WAITLP]) +) +(DEFINEQ + +(CREATE.CNS.MENU + [LAMBDA NIL (* rrb "17-Jul-85 21:14") + (* creates the CNS menu.) + (* Not fully implemented. + Use STYLESHEET.WHENSELECTEDFN to set + items from level bars.) + (SETQ CNS.STYLE + (CREATE.STYLE 'ITEM.TITLES '(Saturation Lightness Tint Hue) + 'ITEM.TITLE.FONT + '(TIMESROMAN 14 BOLD) + 'ITEMS + [LIST (create MENU + ITEMS _ '(Grayish Moderate Strong Vivid)) + (create MENU + ITEMS _ '(Black ("Very Dark" 'VeryDark) + Dark Medium Light ("Very Light" 'VeryLight) + White)) + (create MENU + ITEMS _ + '(Orange Orangish Red Reddish Yellow Yellowish Green Greenish Blue Bluish + Purple Purplish Brown Brownish)) + (create MENU + ITEMS _ '(Red Orange Yellow Green Blue Purple Brown] + 'SELECTION + '("" "" "" "") + 'NEED.NOT.FILL.IN T)) + (STYLESHEET CNS.STYLE]) +) + +(RPAQQ COLORMENUHEIGHT 320) + +(RPAQQ COLORMENUWIDTH 360) +(DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY + +(FILESLOAD (LOADCOMP) + LLCOLOR) +) + + + +(* ;; +"functions that used to be taken from GRAPHZOOM. Renamed and defined here so GRAPHZOOM isn't loaded." +) + +(DEFINEQ + +(SK.ABSWXOFFSET + [LAMBDA (NEWX W) (* rrb "29-MAR-83 11:27") + (* sets the offset of a window.) + (WXOFFSET (IDIFFERENCE (WXOFFSET NIL W) + NEWX) + W]) + +(SK.ABSWYOFFSET + [LAMBDA (NEWY W) (* rrb "29-MAR-83 11:28") + (* sets the offset of a window.) + (WYOFFSET (IDIFFERENCE (WYOFFSET NIL W) + NEWY) + W]) + +(SK.UNSCALE.POSITION.FROM.VIEWER + [LAMBDA (POSITION SCALE) (* rrb " 1-APR-83 16:05") + (* unscales a point in a window out + into the larger coordinate space.) + (create POSITION + XCOORD _ (TIMES (fetch (POSITION XCOORD) of POSITION) + SCALE) + YCOORD _ (TIMES (fetch (POSITION YCOORD) of POSITION) + SCALE]) + +(SK.SCALE.REGION + [LAMBDA (REGION SCALE) (* rrb "16-Sep-86 12:38") + (* scales a region into a windows + coordinate space.) + (COND + [(EQP SCALE 1) (* make unscaled case fast but make + sure it is integer.) + (COND + ((AND (FIXP (fetch (REGION LEFT) of REGION)) + (FIXP (fetch (REGION BOTTOM) of REGION)) + (FIXP (fetch (REGION WIDTH) of REGION)) + (FIXP (fetch (REGION HEIGHT) of REGION))) + REGION) + (T (CREATEREGION (FIXR (fetch (REGION LEFT) of REGION)) + (FIXR (fetch (REGION BOTTOM) of REGION)) + (FIXR (fetch (REGION WIDTH) of REGION)) + (FIXR (fetch (REGION HEIGHT) of REGION] + (T (CREATEREGION (FIXR (QUOTIENT (fetch (REGION LEFT) of REGION) + SCALE)) + (FIXR (QUOTIENT (fetch (REGION BOTTOM) of REGION) + SCALE)) + (FIXR (QUOTIENT (fetch (REGION WIDTH) of REGION) + SCALE)) + (FIXR (QUOTIENT (fetch (REGION HEIGHT) of REGION) + SCALE]) +) + + + +(* ; "functions for zooming") + +(DEFINEQ + +(VIEWER.SCALE + [LAMBDA (WIN) (* rrb "11-Jul-86 15:49") + (* returns the scale of a sketch + viewer) + (WINDOWPROP WIN 'SCALE]) + +(SKETCH.ZOOM + [LAMBDA (SKW) (* rrb " 8-May-85 18:11") + (* changes the scale of the figure + being looked at in a window.) + (PROG (NEWREG) + (PROMPTPRINT "Specify the part of this figure that will be seen after the zoom. +It can be either larger or smaller than the present window size.") + (SETQ NEWREG (GETWREGION SKW (FUNCTION SAME.ASPECT.RATIO) + SKW 4 4)) + (CLRPROMPT) + (COND + ((NULL (REGIONSINTERSECTP NEWREG (DSPCLIPPINGREGION NIL SKW))) + (* if it doesn't overlap this window, + don't move.) + (STATUSPRINT SKW "Specified region was entirely outside the window. Not changed.")) + (T (SKETCH.DO.ZOOM SKW NEWREG]) + +(SAME.ASPECT.RATIO + [LAMBDA (FIXPT MOVEPT WIN) (* rrb "29-MAR-83 11:13") + (* new region function that keeps the + same aspect ratio as a window.) + (COND + ((NULL MOVEPT) + FIXPT) + (T (PROG ((REG (DSPCLIPPINGREGION NIL WIN)) + (YMOVE (fetch (POSITION YCOORD) of MOVEPT)) + (XFIX (fetch (POSITION XCOORD) of FIXPT)) + (XMOVE (fetch (POSITION XCOORD) of MOVEPT)) + (YFIX (fetch (POSITION YCOORD) of FIXPT)) + WID) (* use height as the deciding point.) + [SETQ WID (ABS (QUOTIENT (ITIMES (fetch (REGION WIDTH) of REG) + (IDIFFERENCE YMOVE YFIX)) + (fetch (REGION HEIGHT) of REG] + (RETURN (create POSITION + XCOORD _ (COND + ((IGREATERP XFIX XMOVE) + (IDIFFERENCE XFIX WID)) + (T (IPLUS XFIX WID))) + YCOORD _ YMOVE]) + +(SKETCH.DO.ZOOM + [LAMBDA (SKETCHW NEWREGION) (* rrb "11-Jul-86 15:57") + + (* moves the viewing region of a window to be over NEWREGION which is in window + coordinates.) + + (PROG (NEWSCALE (OLDSCALE (VIEWER.SCALE SKETCHW)) + (OLDREG (DSPCLIPPINGREGION NIL SKETCHW))) (* scale on the basis of heights.) + [SETQ NEWSCALE (FTIMES OLDSCALE (FQUOTIENT (fetch (REGION HEIGHT) of NEWREGION) + (fetch (REGION HEIGHT) of OLDREG] + (WINDOWPROP SKETCHW 'SCALE NEWSCALE) + (SK.ABSWXOFFSET (FIXR (FQUOTIENT (FTIMES (fetch (REGION LEFT) of NEWREGION) + OLDSCALE) + NEWSCALE)) + SKETCHW) + (SK.ABSWYOFFSET (FIXR (FQUOTIENT (FTIMES (fetch (REGION BOTTOM) of NEWREGION) + OLDSCALE) + NEWSCALE)) + SKETCHW) + (SK.UPDATE.GRIDFACTOR SKETCHW OLDSCALE) + (SK.UPDATE.AFTER.SCALE.CHANGE SKETCHW]) + +(SKETCH.NEW.VIEW + [LAMBDA (SKW) (* rrb "11-Jul-86 15:51") + (* opens a new view onto the sketch + viewed by SKW.) + (WINDOWPROP (SKETCHW.CREATE (SKETCH.FROM.VIEWER SKW) + NIL NIL NIL (VIEWER.SCALE SKW) + T + (SK.GRIDFACTOR SKW)) + 'DONTQUERYCHANGES T]) + +(ZOOM.UPDATE.ELT + [LAMBDA (ELT SKW) (* rrb "29-Jan-85 14:40") + + (* destructively updates the local part of an element in response to a zoom or + hardcopy command.) + + (PROG ((CACHE (SK.HOTSPOT.CACHE SKW))) + (SK.REMOVE.HOTSPOTS.FROM.CACHE1 ELT CACHE) + (replace (SCREENELT LOCALPART) of ELT with (fetch (SCREENELT LOCALPART) + of (SK.LOCAL.FROM.GLOBAL (fetch (SCREENELT + GLOBALPART) + of ELT) + SKW))) + (SK.ADD.HOTSPOTS.TO.CACHE1 ELT CACHE) + (RETURN ELT]) + +(SK.UPDATE.AFTER.SCALE.CHANGE + [LAMBDA (SKETCHW STOPIFMOUSEDOWN) (* rrb "19-Mar-86 15:05") + + (* called to update the display and local elements after a window has had a scale + change.) + + (* if STOPIFMOUSEDOWN is T, it displays some but stops if the button left or + middle button is still down and returns STOPPED) + + (PROG ([SKETCH (fetch (SKETCH SKETCHELTS) of (INSURE.SKETCH (SKETCH.FROM.VIEWER SKETCHW] + NEWREGION INNEW? LOCALELT) (* take down the caret.) + (SKED.CLEAR.SELECTION SKETCHW T) + (SK.UPDATE.REGION.VIEWED SKETCHW) + (WINDOWPROP SKETCHW 'PICKFONTCACHE NIL) + (SETQ NEWREGION (SKETCH.REGION.VIEWED SKETCHW)) + [for GELT in SKETCH do (SETQ INNEW? (SK.INSIDE.REGION GELT NEWREGION)) + (COND + [(SETQ LOCALELT (SK.LOCAL.ELT.FROM.GLOBALPART GELT SKETCHW)) + (COND + (INNEW? (* is still in but must have its local + adjusted to the new scale.) + (ZOOM.UPDATE.ELT LOCALELT SKETCHW)) + (T (* if it is not supposed to be in the + new region, remove it.) + (SK.DELETE.ITEM LOCALELT SKETCHW] + (INNEW? (* just came in) + (SK.ADD.ITEM GELT SKETCHW] + (DSPFILL NIL NIL 'REPLACE SKETCHW) + (SKETCHW.REPAINTFN SKETCHW NIL STOPIFMOUSEDOWN T]) + +(SKETCH.AUTOZOOM + [LAMBDA (SKW) (* rrb "10-Sep-86 16:51") + + (* allows the user to pick a point and zooms to or from that point according to + the cursor.) + + (RESETFORM (CURSOR AUTOZOOMCURSOR) + (PROG [SKETCHREG NEWSKETCHREG PTX PTY SCALE LFT BTM WID HGHT DISPLAYSTOPPED + (WINDOWREG (WINDOWPROP SKW 'REGION] + (STATUSPRINT SKW "left button enlarges; middle reduces.") + + (* zoom by a constant factor that keeps the point that the cursor is on at the + same location.) + + [until (AND (MOUSESTATE (NOT UP)) + (NOT (INSIDE? WINDOWREG LASTMOUSEX LASTMOUSEY)) + (OR (NOT (EQ DISPLAYSTOPPED 'STOPPED)) + (PROGN (* last display didn't finish) + (SKETCH.GLOBAL.REGION.ZOOM SKW NEWSKETCHREG T) + T))) + do (COND + ((LASTMOUSESTATE (OR LEFT MIDDLE)) + [SETQ PTX (TIMES (LASTMOUSEX SKW) + (SETQ SCALE (VIEWER.SCALE SKW] + (SETQ PTY (TIMES (LASTMOUSEY SKW) + SCALE)) + (SETQ SKETCHREG (SKETCH.REGION.VIEWED SKW)) + (SETQ LFT (fetch (REGION LEFT) of SKETCHREG)) + (SETQ BTM (fetch (REGION BOTTOM) of SKETCHREG)) + (SETQ WID (fetch (REGION WIDTH) of SKETCHREG)) + (SETQ HGHT (fetch (REGION HEIGHT) of SKETCHREG)) + (COND + ([SETQ NEWSKETCHREG (COND + ((LASTMOUSESTATE LEFT) + (* zoom in) + (CREATEREGION (FDIFFERENCE PTX + (TIMES (DIFFERENCE PTX LFT + ) + AUTOZOOM.FACTOR)) + (FDIFFERENCE PTY (TIMES AUTOZOOM.FACTOR + (DIFFERENCE + PTY BTM))) + (TIMES WID AUTOZOOM.FACTOR) + (TIMES HGHT AUTOZOOM.FACTOR))) + ((LASTMOUSESTATE MIDDLE) + (* zoom out) + (CREATEREGION (FDIFFERENCE PTX + (QUOTIENT (DIFFERENCE + PTX LFT) + AUTOZOOM.FACTOR)) + (FDIFFERENCE PTY (QUOTIENT (DIFFERENCE + PTY BTM) + AUTOZOOM.FACTOR) + ) + (QUOTIENT WID AUTOZOOM.FACTOR) + (QUOTIENT HGHT AUTOZOOM.FACTOR] + (CURSOR (COND + ((LASTMOUSESTATE LEFT) + ZOOMINCURSOR) + (T ZOOMOUTCURSOR))) + (SETQ DISPLAYSTOPPED (SKETCH.GLOBAL.REGION.ZOOM SKW NEWSKETCHREG T)) + (CURSOR AUTOZOOMCURSOR] + (CLOSEPROMPTWINDOW SKW]) + +(SKETCH.GLOBAL.REGION.ZOOM + [LAMBDA (SKETCHW NEWREGION STOPIFMOUSEDOWN) (* ; "Edited 9-Jan-87 08:45 by rrb") + + (* moves the viewing region of a window to be over NEWREGION which is in sketch + coordinates.) + + (PROG (WIDTHSCALE HEIGHTSCALE NEWSCALE NEWLEFT NEWSCALE NEWBOTTOM (OLDSCALE (VIEWER.SCALE SKETCHW + )) + (WINDOWREG (DSPCLIPPINGREGION NIL SKETCHW)))(* scale on the basis of which ever + dimension make the region fit.) + (SKED.CLEAR.SELECTION SKETCHW) + (COND + ([GREATERP (SETQ HEIGHTSCALE (FQUOTIENT (fetch (REGION HEIGHT) of NEWREGION) + (fetch (REGION HEIGHT) of WINDOWREG))) + (SETQ WIDTHSCALE (FQUOTIENT (fetch (REGION WIDTH) of NEWREGION) + (fetch (REGION WIDTH) of WINDOWREG] + (* height is largest scale) + (SETQ NEWSCALE HEIGHTSCALE)) + (T (SETQ NEWSCALE WIDTHSCALE))) (* center the extra width) + (SETQ NEWLEFT (FIXR (FQUOTIENT (DIFFERENCE (fetch (REGION LEFT) of NEWREGION) + (QUOTIENT (DIFFERENCE (TIMES (fetch (REGION WIDTH) + of WINDOWREG) + NEWSCALE) + (fetch (REGION WIDTH) of NEWREGION)) + 2)) + NEWSCALE))) (* center the extra height) + (SETQ NEWBOTTOM (FIXR (FQUOTIENT (DIFFERENCE (fetch (REGION BOTTOM) of NEWREGION) + (QUOTIENT (DIFFERENCE (TIMES (fetch (REGION HEIGHT) + of WINDOWREG) + NEWSCALE) + (fetch (REGION HEIGHT) + of NEWREGION)) + 2)) + NEWSCALE))) + (COND + [(EQUAL OLDSCALE NEWSCALE) (* scale hasn't changed, just scroll) + (RETURN (SKETCHW.SCROLLFN SKETCHW (DIFFERENCE NEWLEFT (fetch (REGION LEFT) of WINDOWREG + )) + (DIFFERENCE NEWBOTTOM (fetch (REGION BOTTOM) of WINDOWREG] + (T (WINDOWPROP SKETCHW 'SCALE NEWSCALE) + (SK.ABSWXOFFSET NEWLEFT SKETCHW) + (SK.ABSWYOFFSET NEWBOTTOM SKETCHW) + (SK.UPDATE.GRIDFACTOR SKETCHW OLDSCALE) + (RETURN (SK.UPDATE.AFTER.SCALE.CHANGE SKETCHW STOPIFMOUSEDOWN]) +) + +(RPAQ? AUTOZOOM.FACTOR 0.8) + +(RPAQ? AUTOZOOM.REPAINT.TIME 3000) +(RPAQ AUTOZOOMCURSOR (CURSORCREATE (QUOTE #*(16 16)O@@ON@@GO@@OKJEMANGH@NG@AOOH@BD@@BD@COOH@NG@ANGHKJEMOB@ON@@GO@@O +) (QUOTE NIL) 7 8)) +(RPAQ ZOOMINCURSOR (CURSORCREATE (QUOTE #*(16 16)OLCON@@GN@@GI@@IHHAAHDBA@BD@@@@@@@@@@BD@HDBAHHAAI@@IN@@GN@@GOLCO +) (QUOTE NIL) 7 8)) +(RPAQ ZOOMOUTCURSOR (CURSORCREATE (QUOTE #*(16 16)H@@ADBDBBBDDABDH@NG@@NG@GNGN@@@@@@@@GNGN@NG@@NG@ABDHBBDDDBDBH@@A +) (QUOTE NIL) 7 8)) +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(GLOBALVARS AUTOZOOM.FACTOR AUTOZOOM.REPAINT.TIME ZOOMINCURSOR ZOOMOUTCURSOR) +) + + + +(* ; "fns for changing the view") + +(DEFINEQ + +(SKETCH.HOME + [LAMBDA (SKW) (* rrb " 7-May-85 12:43") + (* changes the scale of the figure + being looked at in a window.) + (PROG NIL + (WINDOWPROP SKW 'SCALE 1.0) + (WXOFFSET (WXOFFSET NIL SKW) + SKW) + (WYOFFSET (WYOFFSET NIL SKW) + SKW) + (SK.UPDATE.AFTER.SCALE.CHANGE SKW]) + +(SK.FRAME.IT + [LAMBDA (SKW) (* rrb "23-Oct-85 10:44") + (* changes the region being viewed so + that the entire sketch just fits.) + (PROG ((SKETCH (INSURE.SKETCH SKW))) + (COND + ((NULL (fetch (SKETCH SKETCHELTS) of SKETCH)) + (STATUSPRINT SKW "There is nothing in this sketch.")) + (T (SKETCH.GLOBAL.REGION.ZOOM SKW (SKETCH.REGION.OF.SKETCH SKETCH]) + +(SK.FRAME.WINDOW.TO.SKETCH + [LAMBDA (SKW) (* rrb "24-Sep-86 10:17") + + (* reshapes the window so that the sketch at the current scale just fits inside + the window.) + + (PROG ((SKETCH (INSURE.SKETCH SKW))) + (COND + ((NULL (fetch (SKETCH SKETCHELTS) of SKETCH)) + (STATUSPRINT SKW "There is nothing in this sketch.")) + (T (* make sure the region isn't larger + than the screen.) + (PROG ((LOCALREGION (INCREASEREGION (SK.SCALE.REGION (SKETCH.REGION.OF.SKETCH SKETCH) + (VIEWER.SCALE SKW)) + 1)) + ATWINS HOWATTED WININTERIOR WREGION BORDER) + + (* 1 point increase is because the region function for boxes is one too small in + the width and height, i.e. doesn't include the bit for the edge.) + + (COND + ((OR (GREATERP (fetch (REGION WIDTH) of LOCALREGION) + (BITMAPWIDTH (SCREENBITMAP SKW))) + (GREATERP (fetch (REGION HEIGHT) of LOCALREGION) + (DIFFERENCE (BITMAPHEIGHT (SCREENBITMAP SKW)) + 12))) + + (* leave room at the top for part of the title so the user can use popup menu) + + (STATUSPRINT SKW "The window would have to be larger than the screen.")) + (T (CLOSEPROMPTWINDOW SKW) + (SETQ HOWATTED (for ATW in (SETQ ATWINS (ATTACHEDWINDOWS SKW)) + collect (DETACHWINDOW ATW))) + (SETQ WININTERIOR (DSPCLIPPINGREGION NIL SKW)) + (SETQ WREGION (WINDOWPROP SKW 'REGION)) + (* move the coordinate system to lower + left corner and display the image + there.) + (SCROLLW SKW (DIFFERENCE (fetch (REGION LEFT) of WININTERIOR) + (fetch (REGION LEFT) of LOCALREGION)) + (DIFFERENCE (fetch (REGION BOTTOM) of WININTERIOR) + (fetch (REGION BOTTOM) of LOCALREGION))) + [SHAPEW SKW (CREATEREGION (fetch (REGION LEFT) of WREGION) + (fetch (REGION BOTTOM) of WREGION) + (PLUS (fetch (REGION WIDTH) of LOCALREGION) + (DIFFERENCE (fetch (REGION WIDTH) of WREGION) + (fetch (REGION WIDTH) of WININTERIOR))) + (PLUS (fetch (REGION HEIGHT) of LOCALREGION) + (DIFFERENCE (fetch (REGION HEIGHT) of WREGION) + (fetch (REGION HEIGHT) of WININTERIOR] + (for ATW in ATWINS as HOWAT in HOWATTED do (ATTACHWINDOW ATW SKW + (CAR HOWAT) + (CDR HOWAT]) + +(SK.MOVE.TO.VIEW + [LAMBDA (SKW VIEW) (* rrb "28-Jun-85 18:16") + + (* restores a view by changing the position and scale of the figure being looked + at in a window.) + + (PROG ((NEWSCALE (fetch (SKETCHVIEW VIEWSCALE) of VIEW)) + (OLDSCALE (WINDOWPROP SKW 'SCALE)) + SKREGWIDTH SKREGHEIGHT) + (WINDOWPROP SKW 'SCALE NEWSCALE) + (WXOFFSET (WXOFFSET NIL SKW) + SKW) + (WXOFFSET (IMINUS (QUOTIENT (DIFFERENCE (fetch (SKETCHVIEW VIEWXPOSITION) of VIEW) + (TIMES (QUOTIENT (WINDOWPROP SKW 'WIDTH) + 2) + NEWSCALE)) + NEWSCALE)) + SKW) + (WYOFFSET (WYOFFSET NIL SKW) + SKW) + (WYOFFSET (IMINUS (QUOTIENT (DIFFERENCE (fetch (SKETCHVIEW VIEWYPOSITION) of VIEW) + (TIMES (QUOTIENT (WINDOWPROP SKW 'HEIGHT) + 2) + NEWSCALE)) + NEWSCALE)) + SKW) + (SK.UPDATE.GRIDFACTOR SKW OLDSCALE) + (SK.UPDATE.AFTER.SCALE.CHANGE SKW]) + +(SK.NAME.CURRENT.VIEW + [LAMBDA (SKW) (* rrb "11-Jul-86 15:52") + + (* reads a name from the user and adds the current view to the list of views) + + (PROG [(SKETCH (INSURE.SKETCH SKW)) + (NAME (MKATOM (PROMPT.GETINPUT SKW "Name for this view: "] + (COND + (NAME [PUTSKETCHPROP SKETCH 'VIEWS (APPEND (GETSKETCHPROP SKETCH 'VIEWS) + (CONS (create SKETCHVIEW + VIEWNAME _ NAME + VIEWSCALE _ (VIEWER.SCALE SKW) + VIEWPOSITION _ + (REGION.CENTER ( + SKETCH.REGION.VIEWED + SKW] + (STATUSPRINT SKW " ... done."]) + +(SKETCH.ADD.VIEW + [LAMBDA (SKETCH NAME SCALE CENTERPOSITION) (* rrb "25-Nov-85 18:27") + (* Adds a view to SKETCH.) + (PROG ((SKETCH (INSURE.SKETCH SKETCH))) + (COND + (NAME (PUTSKETCHPROP SKETCH 'VIEWS (APPEND (GETSKETCHPROP SKETCH 'VIEWS) + (CONS (create SKETCHVIEW + VIEWNAME _ NAME + VIEWSCALE _ (OR (NUMBERP SCALE) + (\ILLEGAL.ARG + SCALE)) + VIEWPOSITION _ + (OR (POSITIONP CENTERPOSITION) + (\ILLEGAL.ARG CENTERPOSITION]) + +(SK.RESTORE.VIEW + [LAMBDA (SKW) (* rrb " 6-Nov-85 09:56") + + (* puts up a menu of the previously saved places in the sketch and moves to the + one selected.) + + (PROG [(VIEW (\CURSOR.IN.MIDDLE.MENU (create MENU + ITEMS _ + (CONS '(Home 'HOME + "returns to the origin at the original scale" + ) + (for SAVEDVIEW in (GETSKETCHPROP (INSURE.SKETCH + SKW) + 'VIEWS) + collect (LIST (fetch (SKETCHVIEW VIEWNAME) + of SAVEDVIEW) + (KWOTE SAVEDVIEW) + + "returns the view to this location." + ))) + TITLE _ "Which view?" + CENTERFLG _ T] + (* treat home specially so the user + will always have one way back.) + (COND + ((EQ VIEW 'HOME) + (SKETCH.HOME SKW)) + (VIEW (SK.MOVE.TO.VIEW SKW VIEW]) + +(SK.FORGET.VIEW + [LAMBDA (SKW) (* rrb " 6-Nov-85 09:57") + + (* puts up a menu of the previously saved places in the sketch and lets the user + select one to forget.) + + (PROG ((SKETCH (INSURE.SKETCH SKW)) + VIEWS ONETOFORGET) + (SETQ VIEWS (GETSKETCHPROP SKETCH 'VIEWS)) + (COND + ((NULL VIEWS) + (STATUSPRINT SKW + "There are no saved views. They are created with the 'Save view' command.") + (RETURN))) + (SETQ ONETOFORGET (MENU (create MENU + ITEMS _ (for SAVEDVIEW in VIEWS + collect (LIST (fetch (SKETCHVIEW VIEWNAME) + of SAVEDVIEW) + (KWOTE SAVEDVIEW) + "removes this view.")) + TITLE _ "Which view?" + CENTERFLG _ T))) + (COND + (ONETOFORGET (PUTSKETCHPROP SKETCH 'VIEWS (REMOVE ONETOFORGET VIEWS)) + (STATUSPRINT SKW "View " (fetch (SKETCHVIEW VIEWNAME) of ONETOFORGET) + " forgotten."]) +) +(DECLARE%: DONTCOPY +(DECLARE%: EVAL@COMPILE + +(RECORD SKETCHVIEW (VIEWNAME VIEWSCALE VIEWPOSITION) + (RECORD VIEWPOSITION (VIEWXPOSITION . VIEWYPOSITION))) +) +) +(DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY + +(FILESLOAD (LOADCOMP) + SKETCH SKETCHELEMENTS SKETCHOBJ SKETCHEDIT INTERPRESS) +) +(DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS + +(ADDTOVAR NLAMA ) + +(ADDTOVAR NLAML ) + +(ADDTOVAR LAMA STATUSPRINT) +) +(DECLARE%: DONTCOPY + (FILEMAP (NIL (9853 14154 (SK.FONTNAMELIST 9863 . 10085) (SCALE.REGION.OUT 10087 . 11068) ( +SK.SCALE.POSITION.INTO.VIEWER 11070 . 11826) (SK.SCALE.POSITION.INTO.VIEWER.EXACT 11828 . 12370) ( +SK.MAKE.POSITION.INTEGER 12372 . 13040) (SCALE.POSITION.INTO.SKETCHW 13042 . 13434) (UNSCALE 13436 . +13564) (UNSCALE.REGION 13566 . 14152)) (14190 17888 (STATUSPRINT 14200 . 15562) (CLEARPROMPTWINDOW +15564 . 15971) (CLOSEPROMPTWINDOW 15973 . 16470) (MYGETPROMPTWINDOW 16472 . 17171) (PROMPT.GETINPUT +17173 . 17886)) (17946 28977 (SK.SEND.TO.BOTTOM 17956 . 18295) (SK.BRING.TO.TOP 18297 . 18665) ( +SK.SWITCH.PRIORITIES 18667 . 18993) (SK.SEL.AND.CHANGE.PRIORITY 18995 . 19563) ( +SK.SEL.AND.SWITCH.PRIORITIES 19565 . 21332) (SK.SORT.ELTS.BY.PRIORITY 21334 . 22055) ( +SK.SORT.GELTS.BY.PRIORITY 22057 . 22636) (SORT.CHANGESPECS.BY.NEW.PRIORITY 22638 . 23326) ( +SORT.CHANGESPECS.BY.OLD.PRIORITY 23328 . 24016) (SK.SEND.ELEMENTS.TO.BOTTOM 24018 . 25689) ( +SK.BRING.ELEMENTS.TO.TOP 25691 . 27375) (SK.COPY.GLOBAL.ELEMENT.AND.PROPERTY.LIST 27377 . 28975)) ( +28978 31834 (SK.ELEMENT.PRIORITY 28988 . 29316) (SK.SET.ELEMENT.PRIORITY 29318 . 30262) ( +SK.POP.NEXT.PRIORITY 30264 . 30607) (SK.PRIORITY.CELL 30609 . 30814) (SK.HIGH.PRIORITY 30816 . 31319) +(SK.LOW.PRIORITY 31321 . 31832)) (31897 38700 (DRAW.LOCAL.SKETCH 31907 . 32909) (SET.PRIORITYIMPORTANT + 32911 . 33479) (SK.FIGUREIMAGE 33481 . 38698)) (38744 57418 (SKETCHW.HARDCOPYFN 38754 . 45959) ( +SK.LIST.IMAGE 45961 . 57068) (SK.HARDCOPYIMAGEW 57070 . 57416)) (57419 59376 ( +SK.DO.HARDCOPYIMAGEW.TOFILE 57429 . 58103) (SK.HARDCOPYIMAGEW.TOFILE 58105 . 58467) ( +SK.HARDCOPYIMAGEW.TOPRINTER 58469 . 58831) (SK.LIST.IMAGE.ON.FILE 58833 . 59374)) (59377 67301 ( +\SK.LIST.PAGE.IMAGE 59387 . 61819) (SK.GetImageFile 61821 . 62751) (SK.PRINTER.FILE.CANDIDATE.NAME +62753 . 63672) (SK.SET.HARDCOPY.MODE 63674 . 65059) (SK.UNSET.HARDCOPY.MODE 65061 . 65479) ( +SK.UPDATE.AFTER.HARDCOPY 65481 . 66189) (DEFAULTPRINTINGIMAGETYPE 66191 . 66781) ( +SK.SWITCH.REGION.X.AND.Y 66783 . 67299)) (67539 80436 (SK.SEL.AND.TRANSFORM 67549 . 67899) ( +SK.TRANSFORM.ELEMENTS 67901 . 69156) (SK.TRANSFORM.ITEM 69158 . 69959) (SK.TRANSFORM.ELEMENT 69961 . +70419) (SK.TRANSFORM.POINT 70421 . 70771) (SK.TRANSFORM.POINT.LIST 70773 . 70994) (SK.TRANSFORM.REGION + 70996 . 73182) (SK.PUT.ELTS.ON.GRID 73184 . 73662) (SK.TRANSFORM.GLOBAL.ELEMENTS 73664 . 74166) ( +GLOBALELEMENTP 74168 . 74459) (SKETCH.LIST.OF.ELEMENTSP 74461 . 74765) (SK.TRANSFORM.SCALE.FACTOR +74767 . 76460) (SK.TRANSFORM.BRUSH 76462 . 76929) (SK.TRANSFORM.ARROWHEADS 76931 . 78522) (SCALE.BRUSH + 78524 . 80434)) (80437 100629 (TWO.PT.TRANSFORMATION.INPUTFN 80447 . 83220) (SK.TWO.PT.TRANSFORM.ELTS + 83222 . 83627) (SK.SEL.AND.TWO.PT.TRANSFORM 83629 . 84220) (SK.APPLY.AFFINE.TRANSFORM 84222 . 85341) +(SK.COMPUTE.TWO.PT.TRANSFORMATION 85343 . 89681) (SK.COMPUTE.SLOPE 89683 . 90448) ( +SK.THREE.PT.TRANSFORM.ELTS 90450 . 90861) (SK.COMPUTE.THREE.PT.TRANSFORMATION 90863 . 95400) ( +SK.SEL.AND.THREE.PT.TRANSFORM 95402 . 95999) (THREE.PT.TRANSFORMATION.INPUTFN 96001 . 100627)) (100630 + 104657 (SK.COPY.AND.TWO.PT.TRANSFORM.ELTS 100640 . 101059) (SK.SEL.COPY.AND.TWO.PT.TRANSFORM 101061 + . 101682) (SK.COPY.AND.THREE.PT.TRANSFORM.ELTS 101684 . 102113) (SK.SEL.COPY.AND.THREE.PT.TRANSFORM +102115 . 102739) (SK.COPY.AND.TRANSFORM.ELEMENTS 102741 . 103785) (SK.COPY.AND.TRANSFORM.ITEM 103787 + . 104655)) (106785 109980 (SK.SHOWMARKS 106795 . 107695) (MARKPOINT 107697 . 108417) (SK.MARKHOTSPOTS + 108419 . 109494) (SK.MARK.SELECTION 109496 . 109978)) (110509 117287 (SK.SELECT.ITEM 110519 . 113179) + (IN.SKETCH.ELT? 113181 . 115567) (SK.MARK.HOTSPOT 115569 . 116051) (SK.MARK.POSITION 116053 . 116490) + (SK.SELECT.ELT 116492 . 116919) (SK.DESELECT.ELT 116921 . 117285)) (117430 130244 (SK.HOTSPOT.CACHE +117440 . 117784) (SK.HOTSPOT.CACHE.FOR.OPERATION 117786 . 119141) (SK.BUILD.CACHE 119143 . 119966) ( +SK.ELEMENT.PROTECTED? 119968 . 120561) (SK.HAS.SOME.HOTSPOTS 120563 . 121017) (SK.SET.HOTSPOT.CACHE +121019 . 121374) (SK.CREATE.HOTSPOT.CACHE 121376 . 121826) (SK.ELTS.FROM.HOTSPOT 121828 . 122668) ( +SK.ADD.HOTSPOTS.TO.CACHE 122670 . 123071) (SK.ADD.HOTSPOTS.TO.CACHE1 123073 . 123619) ( +SK.ADD.HOTSPOT.TO.CACHE 123621 . 125497) (SK.REMOVE.HOTSPOTS.FROM.CACHE 125499 . 125902) ( +SK.REMOVE.HOTSPOTS.FROM.CACHE1 125904 . 126422) (SK.REMOVE.HOTSPOT.FROM.CACHE 126424 . 126987) ( +SK.REMOVE.VALUE.FROM.CACHE.BUCKET 126989 . 127958) (SK.FIND.CACHE.BUCKET 127960 . 128549) ( +SK.ADD.VALUE.TO.CACHE.BUCKET 128551 . 130242)) (130272 149715 (SK.SET.GRID 130282 . 130703) ( +SK.DISPLAY.GRID 130705 . 131254) (SK.DISPLAY.GRID.POINTS 131256 . 131452) (SK.REMOVE.GRID.POINTS +131454 . 132257) (SK.TAKE.DOWN.GRID 132259 . 132570) (SK.SHOW.GRID 132572 . 136186) (SK.GRIDFACTOR +136188 . 136709) (SK.TURN.GRID.ON 136711 . 137039) (SK.TURN.GRID.OFF 137041 . 137399) ( +SK.MAKE.GRID.LARGER 137401 . 138133) (SK.MAKE.GRID.SMALLER 138135 . 138888) (SK.CHANGE.GRID 138890 . +139338) (GRID.FACTOR1 139340 . 139697) (LEASTPOWEROF2GT 139699 . 140473) (GREATESTPOWEROF2LT 140475 . +141090) (SK.DEFAULT.GRIDFACTOR 141092 . 141645) (SK.PUT.ON.GRID 141647 . 142205) (MAP.WINDOW.ONTO.GRID + 142207 . 142641) (MAP.SCREEN.ONTO.GRID 142643 . 143131) (MAP.GLOBAL.PT.ONTO.GRID 143133 . 143515) ( +MAP.GLOBAL.REGION.ONTO.GRID 143517 . 145234) (MAP.WINDOW.POINT.ONTO.GLOBAL.GRID 145236 . 145779) ( +MAP.WINDOW.ONTO.GLOBAL.GRID 145781 . 146166) (SK.UPDATE.GRIDFACTOR 146168 . 146804) ( +SK.MAP.FROM.WINDOW.TO.GLOBAL.GRID 146806 . 147344) (SK.MAP.INPUT.PT.TO.GLOBAL 147346 . 148563) ( +SK.MAP.FROM.WINDOW.TO.NEAREST.GRID 148565 . 149713)) (149855 158278 (SK.ADD.HISTEVENT 149865 . 151000) + (SK.SEL.AND.UNDO 151002 . 153916) (SK.UNDO.LAST 153918 . 155995) (SK.UNDO.NAME 155997 . 156501) ( +SKEVENTTYPEFNS 156503 . 156853) (SK.TYPE.OF.FIRST.ARG 156855 . 158276)) (158279 158965 (SK.DELETE.UNDO + 158289 . 158718) (SK.ADD.UNDO 158720 . 158963)) (158966 165748 (SK.CHANGE.UNDO 158976 . 160959) ( +SK.ELT.IN.SKETCH? 160961 . 161215) (SK.CHANGE.REDO 161217 . 163085) (SK.MOVE.UNDO 163087 . 164480) ( +SK.MOVE.REDO 164482 . 165746)) (165749 167848 (SK.UNDO.UNDO 165759 . 167025) (SK.UNDO.MENULABEL 167027 + . 167422) (SK.LABEL.FROM.TYPE 167424 . 167846)) (168698 176540 (SHOW.GLOBAL.COORDS 168708 . 169257) ( +LOCATOR.CLOSEFN 169259 . 169544) (SKETCHW.FROM.LOCATOR 169546 . 169954) (SKETCHW.UPDATE.LOCATORS +169956 . 170542) (LOCATOR.UPDATE 170544 . 171302) (UPDATE.GLOBAL.LOCATOR 171304 . 172105) ( +UPDATE.GLOBALCOORD.LOCATOR 172107 . 172684) (ADD.GLOBAL.DISPLAY 172686 . 173603) ( +ADD.GLOBAL.GRIDDED.DISPLAY 173605 . 173864) (CREATE.GLOBAL.DISPLAYER 173866 . 174943) ( +UPDATE.GLOBAL.GRIDDED.COORD.LOCATOR 174945 . 176538)) (176747 189234 (DISPLAYREADCOLORHLSLEVELS 176757 + . 177593) (DISPLAYREADCOLORLEVEL 177595 . 178630) (DRAWREADCOLORBOX 178632 . 179621) ( +READ.CHANGE.COLOR 179623 . 179840) (READCOLOR1 179842 . 182756) (READCOLORCOMMANDMENUSELECTEDFN 182758 + . 183125) (READCOLOR2 183127 . 189232)) (189235 190694 (CREATE.CNS.MENU 189245 . 190692)) (190971 +193681 (SK.ABSWXOFFSET 190981 . 191275) (SK.ABSWYOFFSET 191277 . 191571) ( +SK.UNSCALE.POSITION.FROM.VIEWER 191573 . 192142) (SK.SCALE.REGION 192144 . 193679)) (193720 208718 ( +VIEWER.SCALE 193730 . 194039) (SKETCH.ZOOM 194041 . 195076) (SAME.ASPECT.RATIO 195078 . 196442) ( +SKETCH.DO.ZOOM 196444 . 197649) (SKETCH.NEW.VIEW 197651 . 198166) (ZOOM.UPDATE.ELT 198168 . 199061) ( +SK.UPDATE.AFTER.SCALE.CHANGE 199063 . 200932) (SKETCH.AUTOZOOM 200934 . 205354) ( +SKETCH.GLOBAL.REGION.ZOOM 205356 . 208716)) (209355 221267 (SKETCH.HOME 209365 . 209892) (SK.FRAME.IT +209894 . 210486) (SK.FRAME.WINDOW.TO.SKETCH 210488 . 214334) (SK.MOVE.TO.VIEW 214336 . 215750) ( +SK.NAME.CURRENT.VIEW 215752 . 216862) (SKETCH.ADD.VIEW 216864 . 217957) (SK.RESTORE.VIEW 217959 . +219835) (SK.FORGET.VIEW 219837 . 221265))))) +STOP diff --git a/library/sketch/SKETCH-OPS.LCOM b/library/sketch/SKETCH-OPS.LCOM new file mode 100644 index 0000000000000000000000000000000000000000..e7b27488875a7edcfcfbad58abf87b292e4749ac GIT binary patch literal 69562 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 zKY*l|!@|TrD9tnt-local>lde>lispcore>library>SKETCHSTREAM.;2 34014 +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) - changes to%: (VARS SKETCHSTREAMCOMS) +(FILECREATED " 5-Dec-2023 00:44:59" {WMEDLEY}sketch>SKETCH-STREAM.;1 33784 - previous date%: "17-Aug-88 12:36:19" {DSK}local>lde>lispcore>library>SKETCHSTREAM.;1) + :EDIT-BY rmk + + :CHANGES-TO (FNS OPENSKETCHSTREAM) + + :PREVIOUS-DATE "12-Jun-90 15:21:13" {WMEDLEY}sketch>SKETCHSTREAM.;1) -(* ; " -Copyright (c) 1984, 1985, 1987, 1988, 1990 by Venue & Xerox Corporation. All rights reserved. -") +(PRETTYCOMPRINT SKETCH-STREAMCOMS) -(PRETTYCOMPRINT SKETCHSTREAMCOMS) - -(RPAQQ SKETCHSTREAMCOMS +(RPAQQ SKETCH-STREAMCOMS [ - (* ;; "contains the functions needed to support sketch streams. Sketch streams allow a user program to print, draw, etc. to a stream and builds a sketch of the result.") + (* ;; "contains the functions needed to support sketch streams. Sketch streams allow a user program to print, draw, etc. to a stream and builds a sketch of the result.") (FNS OPENSKETCHSTREAM \SKETCHSTREAM.POSITION.CHANGED \SKETCHSTREAMINIT \SK.SET.FONT \SKSTRM.WINDOW.FROM.STREAM ZOOM.SKETCH.STREAM) - (* ; - "fns to support stream operations on sketches") + (* ; + "fns to support stream operations on sketches") (FNS \DSPFONT.SKETCH \DSPLEFTMARGIN.SKETCH \DSPRIGHTMARGIN.SKETCH \DSPLINEFEED.SKETCH \DSPXPOSITION.SKETCH \DSPYPOSITION.SKETCH \DRAWCURVE.SKETCH \DRAWCIRCLE.SKETCH \FILLCIRCLE.SKETCH \FILLPOLYGON.SKETCH \DRAWELLIPSE.SKETCH \DRAWARC.SKETCH @@ -40,20 +39,20 @@ Copyright (c) 1984, 1985, 1987, 1988, 1990 by Venue & Xerox Corporation. All ri (DEFINEQ (OPENSKETCHSTREAM - [LAMBDA (TITLE OPTIONS) (* rrb "20-Dec-84 12:12") - - (* opens a stream onto a window that will keep a sketch of what is displayed - there.) - - (* changes default alignment to left baseline and default font to the default - font of display device.) + [LAMBDA (TITLE OPTIONS) (* rrb "20-Dec-84 12:12") + + (* opens a stream onto a window that will keep a sketch of what is displayed + there.) + + (* changes default alignment to left baseline and default font to the default + font of display device.) (PROG ((SKW (SKETCHW.CREATE NIL (LISTGET OPTIONS 'SKETCHREGION) (LISTGET OPTIONS 'REGION) TITLE))) - - (* changes default alignment to left baseline and default font to the default - font of display device.) + + (* changes default alignment to left baseline and default font to the default + font of display device.) (SK.SET.TEXT.HORIZ.ALIGN SKW 'LEFT) [SK.SET.FONT SKW (FONTNAMELIST (DEFAULTFONT 'DISPLAY] @@ -565,7 +564,7 @@ Copyright (c) 1984, 1985, 1987, 1988, 1990 by Venue & Xerox Corporation. All ri ) (ADDTOVAR IMAGESTREAMTYPES (SKETCH (OPENSTREAM OPENSKETCHSTREAM) - (FONTCREATE \CREATEDISPLAYFONT))) + (FONTCREATE \CREATEDISPLAYFONT))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SketchFDEV) @@ -574,18 +573,17 @@ Copyright (c) 1984, 1985, 1987, 1988, 1990 by Venue & Xerox Corporation. All ri (\SKETCHSTREAMINIT) ) -(PUTPROPS SKETCHSTREAM COPYRIGHT ("Venue & Xerox Corporation" 1984 1985 1987 1988 1990)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1917 9341 (OPENSKETCHSTREAM 1927 . 3074) (\SKETCHSTREAM.POSITION.CHANGED 3076 . 3368) ( -\SKETCHSTREAMINIT 3370 . 7936) (\SK.SET.FONT 7938 . 8436) (\SKSTRM.WINDOW.FROM.STREAM 8438 . 8697) ( -ZOOM.SKETCH.STREAM 8699 . 9339)) (9403 33638 (\DSPFONT.SKETCH 9413 . 10185) (\DSPLEFTMARGIN.SKETCH -10187 . 10581) (\DSPRIGHTMARGIN.SKETCH 10583 . 10980) (\DSPLINEFEED.SKETCH 10982 . 11370) ( -\DSPXPOSITION.SKETCH 11372 . 11917) (\DSPYPOSITION.SKETCH 11919 . 12464) (\DRAWCURVE.SKETCH 12466 . -12999) (\DRAWCIRCLE.SKETCH 13001 . 14207) (\FILLCIRCLE.SKETCH 14209 . 15621) (\FILLPOLYGON.SKETCH -15623 . 16733) (\DRAWELLIPSE.SKETCH 16735 . 18829) (\DRAWARC.SKETCH 18831 . 20892) (\DRAWLINE.SKETCH -20894 . 22004) (\BOUT.SKETCH 22006 . 22975) (\DSPCOLOR.SKETCH 22977 . 23336) (\DSPBACKCOLOR.SKETCH -23338 . 23716) (\DSPOPERATION.SKETCH 23718 . 24093) (\STRINGWIDTH.SKETCH 24095 . 24738) ( -\BLTSHADE.1BITSKETCH 24740 . 25669) (\NEWPAGE.SKETCH 25671 . 26151) (\CHARWIDTH.SKETCH 26153 . 26792) -(\BITBLT.1BITSKETCH 26794 . 28415) (\DSPCLIPPINGREGION.SKETCH 28417 . 28944) (\DSPRESET.SKETCH 28946 - . 30515) (\DSPSCALE.SKETCH 30517 . 33121) (\DRAWPOLYGON.SKETCH 33123 . 33636))))) + (FILEMAP (NIL (1820 9204 (OPENSKETCHSTREAM 1830 . 2937) (\SKETCHSTREAM.POSITION.CHANGED 2939 . 3231) ( +\SKETCHSTREAMINIT 3233 . 7799) (\SK.SET.FONT 7801 . 8299) (\SKSTRM.WINDOW.FROM.STREAM 8301 . 8560) ( +ZOOM.SKETCH.STREAM 8562 . 9202)) (9266 33501 (\DSPFONT.SKETCH 9276 . 10048) (\DSPLEFTMARGIN.SKETCH +10050 . 10444) (\DSPRIGHTMARGIN.SKETCH 10446 . 10843) (\DSPLINEFEED.SKETCH 10845 . 11233) ( +\DSPXPOSITION.SKETCH 11235 . 11780) (\DSPYPOSITION.SKETCH 11782 . 12327) (\DRAWCURVE.SKETCH 12329 . +12862) (\DRAWCIRCLE.SKETCH 12864 . 14070) (\FILLCIRCLE.SKETCH 14072 . 15484) (\FILLPOLYGON.SKETCH +15486 . 16596) (\DRAWELLIPSE.SKETCH 16598 . 18692) (\DRAWARC.SKETCH 18694 . 20755) (\DRAWLINE.SKETCH +20757 . 21867) (\BOUT.SKETCH 21869 . 22838) (\DSPCOLOR.SKETCH 22840 . 23199) (\DSPBACKCOLOR.SKETCH +23201 . 23579) (\DSPOPERATION.SKETCH 23581 . 23956) (\STRINGWIDTH.SKETCH 23958 . 24601) ( +\BLTSHADE.1BITSKETCH 24603 . 25532) (\NEWPAGE.SKETCH 25534 . 26014) (\CHARWIDTH.SKETCH 26016 . 26655) +(\BITBLT.1BITSKETCH 26657 . 28278) (\DSPCLIPPINGREGION.SKETCH 28280 . 28807) (\DSPRESET.SKETCH 28809 + . 30378) (\DSPSCALE.SKETCH 30380 . 32984) (\DRAWPOLYGON.SKETCH 32986 . 33499))))) STOP diff --git a/library/sketch/SKETCH-STREAM.LCOM b/library/sketch/SKETCH-STREAM.LCOM new file mode 100644 index 0000000000000000000000000000000000000000..cca74ddc0dd30be9422c55acc1975e13168cb700 GIT binary patch literal 13211 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 F#XqTQ%zyv@ delta 815 zcmah{O^ee&7$(!x20RpD*Ng5;*j<`JW0Iy{St)eW={B~_lqOwwkF6cGm^LN-V2el* z4_*~n<}Y{@6#6^-1A=!IJbKazmhMtny*$h?@AL7#@BH|-_5S(hmiDor1!bXC_u zEtr|SsTvX_q=&&^)c0u*f+0xotnAjF-+K}aXwmP4;k-DYJ)h2te!m-b_|>gp&#Eei zx(uQOS0!_%kv9!hf^JCHn)G}Wj`vOAG&=RKf4ub?mqpfdG+8p3!!4yF^h zDyS%m1ij9LC)+g2=w>D>$zq~n*Rj>YB@dT3ivBd1-fU>`kB-17Xlm8~)2f!7W9+6p z0*Q*_g1BnhB8^7LDL1gwR%{P9Tp7$}3!m7e?WW2+1ka$QDzv*EvX(P7T>^1ERp~!t z)nt+Vx`XyV{1kQsL4O&Ky^6<#WjuzGw*~!eJhr`T0eX{6lcpODmG1)AF;C>JuVvd? zy^y2(tJ6^f*FAPYkikd|-BPb*Us5pFkwqC2NjQY%mm2aBa~zb5aW30+kiuTf&`qW| z96mef2K(xuGXx?V5wy2_O3