IntroducingObjectsintoDocumentsstoredon:{phylum}<lispcore>library>Imageobj.TEditlastchanged:July16,1984by:R.BurtonJ.SybalskyThefollowingproposalaroseoutofdiscussionsbetweenJohnSybalsky,RonKaplanandRichardBurtonaboutputtingobjectsintoTeditandintegratingshiftselectionamongvarioustypesofwindows.Thegoalsare:1)defineanobjectinterfaceforTeditthatallowsobjectstoexistinadocumentandbeedittedwiththeirowneditor.(Currentlyforformatting,Teditwillviewanobjectasalargecharacterandnottryto"flow"textaroundit.Maybelater.)2)provideafacilityinwhichobjectscouldbeshiftselected(hereafterreferredtoas"copyselected"asinStar)betweenwindowsinwhichthesourcewindow(wheretheobjectwascomingfrom)doesnothavetoknowwhatsortofwindowthedestinationwindowisandthedestinationdoesnothavetoknowwheretheinsertioncamefrom.Asasimpleexample,wewanttobeabletocopyselectfromaGrapherwindowintoaTeditwindow.Morecomplicated,wewantcopyselectfromaDeditwindowintoaTeditwindowtopreservestructure(ifdesired)whilecopyselectintoatypescriptwindowtotreatitastype-in.ImageObjectsTodothis,weprovideanewdatatype,IMAGEOBJ,whichcontainsthedataandtheproceduresnecessarytomanipulateanobjectthatistobepartofadocument.Additionally,thereisanewdatatype,IMAGEFNS,whichisavectoroftheproceduresnecessarytodefinethebehaviorofatypeofIMAGEOBJ.Havingtheoperationsgroupedinaseparatedatatypeallowsmultipleinstancesofthesametypeofimageobjecttosharetheirprocedurevectors.ThedataandprocedurefieldsofanIMAGEOBJhaveauniforminterfacethroughthefunctionIMAGEOBJPROP.IMAGEOBJsarecreatedwiththefunctionIMAGEOBJCREATE.IMAGEFNSarecreatedwiththefunctionIMAGEFNSCREATE.(IMAGEFNSCREATEDISPLAYFNIMAGEBOXFNPUTFNGETFNCOPYFNBUTTONEVENTINFNCOPYBUTTONEVENTINFNWHENMOVEDFNWHENINSERTEDFNWHENDELETEDFNWHENCOPIEDFNWHENOPERATEDONFNPREPRINTFN)ReturnsanIMAGEFNSwhichcontainsthefunctionsnecessarytodefinethebehaviorofanIMAGEOBJ.Theargumentsareasfollows:DISPLAYFN-fnof{imageObjimageStream}calledtodisplaytheobjectatthecurrentpositiononimageStream-typeofstreamindicateswhetherdeviceisDISPLAY,PRESSorINTERPRESS.IMAGEBOXFN-fnof{imageObjimageStreamcurrentXrightMargin}shouldreturnthesizeoftheobjectasalistwhose1stand2ndelementsarethewidthandheightoftheobjectimageandwhose3rdand4thelementsarethepositionoftheleftedgeandbaselineoftheimagerelativetothecurrentposition.Forcharacters,the3rdelementwouldbethedescentand4thelementwouldbe0sincewedon'tsupportleftkerning.Wewillalsowanttosupport5thand6thelementswhicharetheamountstomovethecurrentpositionintheXandYdirectionsaftertheobjectisdisplayed.TheRECORDIMAGEBOXisprovidedwithfields(XSIZEYSIZEYDESCXKERN).TheIMAGEBOXFNlooksatthetypeofthestreamtodeterminetheoutputdeviceifthesizechangesfromdevicetodevice.(Forexample,abitmapobjectmayspecifyascalefactorthatisignoredwhenitisdisplayedonthescreen.){note:thisdoesnotaddress,forexample,thelayingoutofannotationsasinlinetext,footnotesorbetweenlinetext.)ThecurrentXandRightMarginfieldsallowanobjecttotakeaccountofitsenvironmentwhendecidinghowbigitis.Ifthesearenotavailable,theywillbeNIL.����������������
êq?€`½�î��ï��pÿ�������������
êq?€`½�î��ï��î
êïg_pî	ôïbq
îNî‘îEî)	ïbî	ôï`€rî	úï`€î	ôï_csî
tîWð(î$Ãï_cî	ôï^Hîî
î
ï^Hï^HîcîŸï^Hï^H�î4î²ï^Hî	ôï]-î½î½ï]-ï]-î
îŒï]-ï]-î·î7ï]-ï]-î=ï]-î	ôï[×rî	úï[×î	ôïZî	úïZî›ïXSîî€î!î$<î'ªî*A
î4fî;0î?uîGìîKHîKHïXSî	ôïVûîî©îî ºî&�î,ôî3èî8Wî=îA5
îKIîKIïVûî	ôïU£îþîdînî#&î(0î*µî1sïU£î›ïSwî÷îîcïSwî›ïQKî/îîî˜îˆî%ýî)hî.€î2Âî8²î?yîBîGîI›�îKIîKIïQKî	ôïOóî¹îLîîöî#_î( î,2î3!î4.	î=¢îA4
îKHîKHïOóî	ôïN›î8î¥îîÒî íî#¬�î%”î*Øî3yî7î:¥î>;î@úîGîKHîKHïN›î	ôïMCîÕî1îîîÊîÐïMCî›ïKîCî�îðî£î!Lî&yî-Uî2ƒî5+î:YîB	îKHîKHïKî	ôïI¿îëîØîÅî6î&î(ñî+Þî1Oî8oî?îB|îGíîKIîKIïI¿î	ôïHgîòîñîðîiî%hî(áî.àî4î8Xî;Òî@"îBÅîGîKHîKHïHgî	ôïGîYîî#î±
î$÷î+
î-Áî1Oî4Ý
î?#îCˆîGîKIîKIïGî	ôïE·î§îî@îÊî"^î&Àî+øî,ýî/°�î1Œî7›î?XîBîF>îHÃîKHîKHïE·î	ôïD_îÖî
îíî}î"`�î$½î,$î2µî7—�î9õî?®îGîKHîKHïD_î	ôïCîÿî¤î÷î Jî&Kî*ž�î,lî1–î7—î;ê�î=¸îBâîHÃîKHîKHïCî	ôïA¯î¿îaîùî%Äî+
î/yî5–î:�î;ï	îEhîKIîKIïA¯î	ôï@WîyîƒîîîKï@Wî	ôï>ÿî	úï>ÿî	ôï=uqî’îlï=urï=uîrï=uî›ï;îRî
îFîþîé�î!Éî%Xî-ðî6‰î;ÅîC‡îGîKHîKHï;î	ôï9Æî
^îÈ	îî"‡î%	î.fî0ùî6èî;)î=¼î@OîBâîGîIš�îKHîKHï9Æî	ôï8nîüîuî Ùî&…î)­�î+ýî/ûî9îBîGîIš�îKHîKHï8nî	ôï7îYîcîD	î!î)ðî,úî3`î7@î?TîB^�îDîHÃîKHîKHï7î	ôï5¾îìîUîÈî¶	î(…î/Ïî2æ�î5&î=GîEhîKIîKIï5¾î	ôï4fî‘îî˜î î$Cî(…î+î00î6î8²î=ÊîBâîKHîKHï4fî	ôï3îîqîXîîÿî(ðî/]î2mî5~î=˜îBW�îDîKHîKHï3î	ôï1¶î„îgîîî$¨î0”î9%î<¬îCîGìîKHîKHï1¶î	ôï0^î*î"Bî+xî0|î8Ûî>¶îC¹îKHîKHï0^î	ôï/î“ï/î	ôï-®î	úï-®î	ôï,Vtî4î!i	î+vî1Oî7)î=ÙîKIîKIï,Vî	ôï*þîŒ
î&l
î3Ñî@^îKIîKIï*þî	ôï)¦î;
î!xï)¦rï)¦î!~ï)¦î›ï'zîîQîî"cî*/î-Èî6jî?
îAÏîGìîKHîKHï'zî	ôï&"îƒîîîóîÊî#&î+Œî.èî1mî8+ï&"î›ï#ötî*ï#örï#öî=�î(îêî«î$Nî/vî5“î8Uî?JîBâîHÃîKHîKHï#öî	ôï"žî
âî,îMî d
î+
�î-Jî2î5&î;™îD‘îKIîKIï"žî	ôï!FîÕîZîéîóî!x
î*»ï!Fî›ït	îïrïîu�î¿îáîî'
î1µî9áîEhîKIîKIïî	ôïÂîýîîÜî‰î
î$î&Ã�î(™î,ôî2&î5ªî9.î<²îDiîGíîKIîKIïÂî	ôïjîî‘îŽî.î¦î$¢î)Èî-?î2eî5Üî9Tî<ËîDvîGíîKIîKIïjî	ôïî îCî½î
î ^î#×î+„î.'î1 î6Èî>tîAîDîKHîKHïî	ôïºîÞî¿
î!Xî%8î)î0Vî5åî8îî<ÏîDîGìîKHîKHïºî	ôïbî×îî»�î”îÉî"yî'®î.î2îî:¨î;ªî>ZîB¸îGîKHîKHïbî	ôï
î·î®îIîãî~î&Lî+”î//î2Êî9Àî<„î@öîDîKHîKHï
î	ôï²îóîèîµ�îÓîŸ�î ¾	î*kî/åî3±î:î<ø	îF¥îGìîKHîKHï²î	ôïZîgîˆîŸî#Àî(…î.øî5kî;î@£îGíîKIîKIïZî	ôï	î?îWîêîTî"•î%)î(“î.‚î1î9‰î<óîBâîHÃîKHîKHïî	ôïªî
Ӕ
îî}î#¢î&kî-gî1Þî9±�î;£îAÈîGìîKHîKHïªî	ôïRîÉ�î•î½î»î"î$®î+„î/Õî2wî5î=î@@îC¹îKHîKHïRî	ôïúîøîNî¤î#î#Õî'Tî/î2…î8‰î<î>°
îHÄîKIîKIïúî	ôï
¢îøî%î®î Vî'1î+‡î1‹î2…î6î=¶îA5
îKIîKIï
¢î	ôïJîõîîÄîÅî jî$½î+•î.:î1¶
î;êî@=îGìîKHîKHïJî	ôï
òî
PîÕî1îîî—îóî"O	î+Œî/¿î3òî6wî9Ùï
ò�������•����
êq?€`½9��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2TEDITNOTE:TEditonlycallsthisfunctionduringlineformatting,thencachestheimageboxas(IMAGEOBJPROPobj'BOUNDBOX).ThisavoidstheneedtocallIMAGEBOXFNwhenincompleteX&margininfoisavailable.PUTFN-fnof{imageObjfileStream}calledtosavetheobjectonafile.PrintscharactersorwhateveronfileStreamthatwhenreadbyGETFN(seebelow)willregeneratetheTeditobject.(TedittakescareofwritingoutthenameoftheGETFN.)GETFN-fnof{fileStreamTextStream}calledwhentheobjectisencounteredonthefileduringinput.ItshouldreadthestuffthatwasputoutbythePUTFNandreturnanIMAGEOBJ.{note:wemaywanttohavealibraryofimageobjecttypesthatissearchedwhenaGETFNisencounteredthatisundefinedwhichwouldloadtheinformationnecessarytohandlethattypeofobject.)COPYFN-fnof{imageObj}shouldreturnacopyofimageObj.TheCOPYFNiscalledduringacopy-selectoperation.)BUTTONEVENTINFN-fnof{imageObjwindowStreamSelectionrelXrelYwindowTextStreamButton}.Theuserhaspressedabuttoninsidetheobject.TheBUTTONEVENTINFNshoulddecidewhetherornottodohandlethebutton,trackthecursorandrespondtothebuttonpressestobringaboutwhateveredit(orselectionbutseeCOPYBUTTONEVENTINFNbelow)protocolstheobjectwishedtosupport.IfBUTTONEVENTINFNreturnsNIL,TEditwilltreatthebuttonpressasaselectionatitslevel.Notethatwhenitisfirstcalled,abuttonwillbedown.ItisenvisionedthatTedititselfcouldbeusedrecursivelytoedittextthatwaswithinanobject.AlsotheBUTTONEVENTINFNshouldsupportthebuttondownprotocoltodescentinsideofanycompositeobjectswithit.ItisalsoenvisionedthattheBUTTONEVENTINFNwillrelinquishcontrol(i.e.RETURN)whenthecursorleavesitsobject'sregionalthoughtheremaybecaseswhereitwouldnot.Inanycase,standardusefulfunctionsforcursortrackingandedittingintheTedittraditionwillbemadeavailabletolessenthetaskofbuildingBUTTONEVENTINFNs.)TEDITNOTE:Whenthisfunctiongetscalled,thewindow'sclippingregionandoffsetshavebeenchangedsothatthelowerleftcorneroftheobject'simageisat(0,0),andonlytheobject'simagecanbechanged.TheSelectionisavailableforchangingtofityourneeds;themousebuttonwentdownat(relX,relY)withintheobject'simage.YoucanaffecthowTEdittreatstheselectionbyreturningoneofseveralvalues:ReturnNILandTEditwillforgetthatyouselectedanobject;returntheatomDON'TandTEditwon'tpermittheselection;returntheatomCHANGED,andTEditwillupdatethescreen.UsethislattertosignalTEditthattheobjecthaschangedsizeorshouldhavesideeffectsonotherpartsofthescreenimage.COPYBUTTONEVENTINFN-fnof{imageObjwindowStream}.Theuserhasbuttonedinsideanobjectandacopykeyishelddown.(Ininitialimplementations,thecopykeyswillbetheshiftkeys.Thisisprobablysomethingthatshouldbesettable(intheterminaltable?).)ManyofthecommentsaboutBUTTONEVENTINFNapplyherealso.Alsoseethediscussionbelowaboutcopy-selectingobjectsbelow.WHENINSERTEDFN-WHENMOVEDFN-WHENDELETEDFN-WHENCOPIEDFN-fnsof{imageObjTargetWindowStreamSourceTextStreamTargetTextStream}.ProvidehooksbywhichtheobjectcangetnotifiedwhenTeditperformsanoperationonthewholeobject.Thedifferentoperationsare:INSERT,MOVE,DELETE,COPY.{Alsoneedahookfordeleteundonewhichmaybethesameasinsert.}WHENCOPIEDFNwillgetcalledinadditionto(andafter)theCOPYFNabove.Thesefunctionsallowobjectstohavesideeffects.Forexample,annotationsinadocumentationmaintainsawindow��î9Ùï
òî
êïg,rî	ôïh„�î
Ëïh„îêïb5uîâîÚî î"˜î'¹î-²î2Óî;PîBîFRîFRïb5îêï`Ý
îóîî%ñî*Bî2Æî6@îB÷îFSîFSï`Ýîêï_…
î¼îRî Cî&ãî*ýî/ïî32î8$	îBîFRîFRï_…îêï^-	î'�îÕ�îƒî!dî%—î(	î0ˆï^-î›ï\tîÎï\rï\îÓ�î°îdîî ¬
î*ïî0þî3²î8î;žîA®îDb�îF>îKHîLîLï\î	ôïZ©î2	îÍî¯î$œî'	î1î5ªî:;î>ËîA®îGîKHîKHïZ©î	ôïYQîîl	îÛî!iî&¥î-î.˜î4«î9çî>LîAîGíîKIîKIïYQî	ôïWùî
PîƒîîdîKïWùî›ïUÍtîÎïUÍrïUÍî¿�î‡î'îÆ
î&õ
î2#î9î>lîBâîHÃîKHîKHïUÍî	ôïTu
îî¥î
îLî$9î*&î+
î-›î3ˆî7Çî;/î@EîD„îGìîKHîKHïTuî	ôïSî
ÐîÖî³î>îî$}î'‚î0iî6Ëî9Ñî=®îBbîEgîIš�îKHîKHïSî	ôïQÅîÞî•îÑîäî$ î(…î+<î2ýî7b�î9Bî>~îA5
îKIîKIïQÅî	ôïPmîJîòî{î¨î#Õî(+î+ª
î5áî>jîAîGîKIîKIïPmî	ôïOî'î¬îjïOî›ïLétî¥ïLérïLéî‰�îEîØîj	î!µî'£î-’�î/Nî3Žî6!î>”î?yîBâîHÃîKHîKHïLéî	ôïK‘îÕî¶�îd
î!x
î*»ïK‘î›ïIetî4ïIerïIeî6�îîÀî qî)î4î<ªîA	îEgîKHîKHïIeî	ôïH
	î_îî!î«î$î'—î.}�î0Yî6hî<wî@îFçîGìîKHîKHïH
î	ôïFµî‡î‹î#î*jî-î0‘î39î5áî;åî?dîF?îKIîKIïFµî	ôïE]î
”î¸îXîTî!î$½î*âî1Þî4§î9õî?CîGîKHîKHïE]î	ôïDî
bîÛîJî¹î-˜î3Œî<î?tîEgîKHîKHïDî	ôïB­îÖîÃî÷îÚî&¨î-½î2Nî7¶î<FîA®îEgîKHîKHïB­î	ôïAUîGî�î
î½î‹î#1î)\î*|î.ùî3uî7òî:Àî=îBâîIš�îKHîKHïAUî	ôï?ýîEîèîÞîXîŸî!•î$Š	î.7î2Úî8Uî>¦îD îGîKHîKHï?ýî	ôï>¥
î<îöî]î#Åî)-î-½î4Óî8î@yîB…îGìîKHîKHï>¥î	ôï=Mîvîjî$5î'¤î-˜î1Þî9€î<îBâîHÃîKHîKHï=Mî	ôï;õîqîøîÑî%%î)¢î+šî/@î2æî8:	îB˜îGìîKHîKHï;õî	ôï:îvî¼	î%î+×î0ôî7¿î<î?tîEgîKHîKHï:î	ôï9Eî
lîîî"½î'ãî+Zî-ûî3 î8Fî:æî@îDZîEMîGíîKIîKIï9Eî	ôï7íî{î†îäî&Æî*Ÿî0üî9î<àîDìîGíîKIîKIï7íî	ôï6•î–î”î_î }î%Hî.Fî1cî7Ýî;Ñî@œîC¹îKHîKHï6•î	ôï5=îï5=îêï3uî²î{îî!î%óî.Aî32î:©î>ÃîFRîFRï3îêï1¹î¤î¯î 6î'î+vî/Óî6¶î9eî=ÃîAIîFSîFSï1¹îêï0aî‘îçîáî ²î(¶î.4î1.î4(î:~î>OîBöîFRîFRï0aîêï/	î¹îîŸî"dî*3î+Jî.æî7Œî:QîB÷îFSîFSï/	îêï-±î7î{î•î#‡î*&î.Aî4	î:©î?šîCÍîFRîFRï-±îêï,Y
îî	î"zî*î0î1�î4qî7âî=ØîAIîFSîFSï,Yîêï+îàîQî Ìî#fî+áî/Rî1ìî8¹î?†î@rîFSîFSï+îêï)©îœîMî­î 5î&lî*ôî.¦î6Šî9eî@rîFSîFSï)©îêï(QîqîÎîî‰î$¾î)òî/þî3„	î<ìîB÷îFSîFSï(Qîêï&ùî0îÒîAî#^î'¤î-˜î1î7Òî8¼î<+î@qîFRîFRï&ùîêï%¡î•îîÍî!'î$ªî*±î.4î5î9lî<îBîFRîFRï%¡îêï$IîîÕîZî!dî&nî(óî,Oî20î7@ï$Iî›ï"tîï"rï"î9�îºî#î&jî/¢
î=î>¸îBçîGìîKHîKHï"î	ôï Åî%î¨îÎî"Qî&O�î(Ÿî-tî1rî4™î9nî?î@“îDîKHîKHï Åî	ôïmî‘îBî Ëî%Tî)Ýî,¸î0iî5Éî;)î<Vî@ßîC¹îKHîKHïmî	ôïîžîî9î î'Õî+uî/î6èî?’î@­îE$îGìîKHîKHïî	ôï½îêî[î%2î*£î/=î4®î5ìî:†î>IîB	îKIîKIï½î	ôïeîþî
î ¡î'Yî,iïeî›ï9t
î]ï9rï9î4�îï9î›ï
t
îØï
rï
î¯�îŒï
î›ïátî†ïárïáî]�î:ïáî›ïµtî¯ïµrïµî#�îmîáîTî Mî#nî,qî=îKIîKIïµî	ôï]îîî!áî'î)¶î.ãî2bî8fî;åî?dîGîKIîKIï]î	ôïî4îúîµî"Rî%
î( î-àî4Ïî5Üî9oîB	îKHîKHïî	ôï­îDîîBî!î&?î'3î,[î0¬�î2wî6Èî:Aî@@îF>îKHîKHï­î	ôï
Uî
¦î€î2î»î–î#{î$§î/èî4qî8#î>ZîA4îHÃîKHîKHï
Uî	ôïýîkîî/îTî$yî%”î*âî3Œî8Úî?ÖîBŸîGîKHîKHïýî	ôï
¥îêî(îëîá
î)\î,H�î.]î:†îCS�îEhîKIîKIï
¥ÿ�������.����
êq?€`½›����������������������������������������������������������������������������������������������������������������������������������������������������������3whichhassummaryofallannotationsinthedocument.ThesefunctionsallowsthatsummarytobeupdatedastheannotationisoperatedonbyTedit.WHENOPERATEDONFN-fnof{imageObjwindowStreamhowOperatedOnSelectionTextStream}.Providesahookformiscellaneouseditoperations.FornowthevaluesofhowOperatedOnareSELECTEDandDESELECTED,HIGHLIGHTEDandUNHILIGHTED.ThisisdifferentfromtheBUTTONEVENTINFNbecauseitwillbecalledwhentheuserisextendingaselectionthroughtheobjecti.e.theobjectisbeingtreatedintotoasacharacterfromTedit.HIGHLIGHTEDandUNHIGHLIGHTEDrefertotheselectionbeinghighlightedonthescreen,andtohavingthehighlightingturnedoff.Thesearecalledwhentheselectionisinsidetheobject,soitmayhandleit.TEDITNOTE:AswiththeBUTTONEVENTINFN,theoffsetandclippingregionforthedisplayaresetsotheobject'simageisat(0,0),andonlythatimageareacanbemodified.PREPRINTFN-fnof{imageObj}calledtoconverttheobjectintosomethingthatcanbeprintedforinclusionindocuments.Itshouldreturnanobjectthatthereceivingwindowcanprint(usingeitherPRIN1orPRIN2-itschoice)toobtainacharacterrepresentationoftheobject.IfPREPRINTFNisNIL,theOBJECTDATUMitselfisused.Teditwouldusethisfunctionwhentheuserindicatesthathewantsthecharactersfromanobjectratherthantheobjectitself(presumablyusingPRIN1case).(Interfacetothis"unstructure"operationisnotyetdetermined.)(IMAGEFNSPX)-ReturnsXifXisanIMAGEFNS,NILotherwise.(IMAGEOBJCREATEOBJECTDATUMIMAGEFNS)ReturnsanIMAGEOBJwhichcontainstheobjectdatumOBJECTDATUMandtheoperationsvectorIMAGEFNS.OBJECTDATUMcanbearbitrarydata.(IMAGEOBJPX)-ReturnsXifXisanIMAGEOBJ,NILotherwise.(IMAGEOBJPROPIMAGEOBJECTPROPERTY{NEWVALUE})AccessesandsetspropertiesofanIMAGEOBJ.Itcanbeusedonthesystemproperties:OBJECTDATUM,DISPLAYFN,IMAGEBOXFN,PUTFN,GETFN,COPYFN,BUTTONEVENTINFN,COPYBUTTONEVENTINFN,WHENOPERATEDONFN,andPREPRINTFN.Additionally,itcanbeusedtosavearbitrarypropertiesonanIMAGEOBJ.CopyselectingbetweenwindowsThegeneralideabehindcopyingbetweenwindowsisthatthesourcewindowbuildsanimageobjectofwhattheusershasselectedandcallsasystemfunction.Thesystemfunctionfindsthecurrentttywindowandcallsafunctionassociatedwithitthatknowshowtoinsertimageobjects.ThesimplecasedonenowwithBKSYSBUFtocopystringsisdonebyhavingthesystemfunctioncallBKSYSBUFonthePREPRINTFNoftheimageobjectifthetargetwindowdoesn'thaveaninsertfunction.Thefollowingthingswillbeaddedtothesystemtoimplementcopyselectingofthingsbetweenwindows.AnewwindowpropertyCOPYBUTTONEVENTFNwillbecalled(ifitexists)whenabuttoneventoccursandacopykeyisdown.IfnoCOPYBUTTONEVENTFNexists,theBUTTONEVENTFNiscalled.AnewwindowpropertyCOPYINSERTFNwillbecalledbyCOPYINSERT(seebelow)whenanotherwindowwantstoinsertsomethingintothiswindowasaresultofacopyselect.Argumentsarethethingtobeinsertedandthiswindowandthethingtobeinserted.Thethingtobeinsertedcanbe(1)aSTRINGP,(2)anIMAGEOBJ,or(3)alistofIMAGEOBJsandSTRINGPs.Asaconvention,COPYINSERTFNsshouldcallBKSYSBUFiftheobjecttheyaretoinsertisaSTRINGP.ForTeditwindows,theCOPYINSERTFNwillbeafunction��îKIï
¥î
êïg,rîI“ïh„�îJjïh„î	ôïb5î‚îcî î©î!Š
î,#î/-î3
î;øî=TîBâîKHîKHïb5î	ôï`ÝîÕîîÀîEîÊî&‚î)î,c	î5 î8%î?´îB9îD¾îIÎï`Ýî›ï^±tîï^±rï^±îW�îzîuî"oî+Kî6«îBâîKHîKHï^±î	ôï]Yî)îJî#�î î$˜î(>î4Jî8Ç
îC%îDFîGìîKHîKHï]Yî	ôï\î
Âîî
î#Aî'î/î/ï\ï\î2à	î/ï\bþ5�î;Fï\ï\�î=f
îGìîKHîKHï\î	ôïZ©îîî]îî%•î)îî-qî;îAæîD‘îHÄîKIîKIïZ©î	ôïYQîîî/î¦îoî(�î*î2µî9±î=QîCvîGìîKHîKHïYQî	ôïWùîòî•î½î’î!5î%…î((�î)ôî2wî6Èî<Æî=»
îGìîKHîKHïWùî	ôïV¡îÇîâîxî åî)\î.w
î8œî;2î>ŸîEhîHÄîKIîKIïV¡î	ôïUIîøîwî…î$‰î(ßî)Ùî/î2…î8‰î<ßî@^îHÄîKIîKIïUIî	ôïSñîÕî1îéînîóî"Oî(0î*»ïSñîêïQÅuîÊîªîXî³î$½î(ïî8
î<?îBöîFRîFRïQÅîêïPmîŽî„îõî#fî*3î-¤î1î3¯î7 î>ÄîCÎîFSîFSïPmîêïOîoîPî¬îßî#î(î,Oî/«î20î9ÅïOî›ïLét	îïLérïLéîû�îÍîuî	î%î+ƒî.,î5î8‡î>ŒîBâîKHîKHïLéî	ôïK‘îDî¾îaî6î°î'3î)Ö	î31î4%î6Èî<ÆîBÅîEgîKHîKHïK‘î	ôïJ9î îvîVî!°î%†î+
î1dî7¿î=Cî@AîEÅ�îGìîKHîKHïJ9î	ôïHáîâîžîµ�îšî$6
î1î3Áî7Tî>Bî?PîB	îKHîKHïHáî	ôïG‰î–îçîa
î’î$‘î'3î,[î-Pî2wî7Ÿî;î?iîGîKHîKHïG‰î	ôïF1î
‚îçîîäî!›î&×î*e	î3Ôî89î:ðîAîGîKIîKIïF1î	ôïDÙî9îîÏ
î&Íî,Áî2µî9€	îC§îGîKHîKHïDÙî	ôïCî¶îî ¡î#ýî'Yî1sïCî›ïAUt	îØî†ïAUrïAUî]�îîÃ�î!qî#ö�î%¤î()î*®î3î6p	î>ÜïAUî›ï?)tî
î#î*®ï?)rï?)î*´ï?)î›ï<ýî¥î|î]î"¹î*›î.Iî4|î9Ø
îD>îGìîKHîKHï<ýî	ôï;¥	î1îî!xî"O
î,cî/¿î2Dî:ªî>ãï;¥î›ï9yt	îØî†ï9yrï9yî]�îîÃ�î!qî#ö�î%¤î()î*®î3î6p	î>Üï9yî	ôï8!î	úï8!î›ï5õtî]
î!qî)�
î2=ï5õrï5õî2Cï5õî›ï3Éî6îŸîß	î$(î&ºî)Kî1¾î2¢î53î8œî;.î?mîAÿîEgîKHîKHï3Éî	ôï2q
îî!!	î+u
î6 î=˜îDîKHîKHï2qî	ôï1îsî,Mî<¢îA5
îKIîL îL ï1î	ôï/Áî¶î;î—îî"Oî$Ôî)î1m	î:ªî=/î?´îGIï/Áî	ôï.iî	úï.iî	ôï-î	úï-î	ôï+¹î	úï+¹î	ôï*aî	úï*aî	ôï(×qîÌîîî&³ï(×rï(×î&¹ï(×î	ôï'Tî	úï'Tî›ï%(îîöîLî Qî'-î.î4äî7î;ãî?cîEgîKHîKHï%(î	ôï#Ðî$îøîQî‚î!Vî%Øî)ƒî.Üî2ˆî:fî>îCj�îEgîKHîKHï#Ðî	ôï"xîËîîàî2î&3î+®î/{î6¤î:qî@ÃîDîIš�îKHîKHï"xî	ôï! îÙ	îkîôî"Ïî'Xî,¸î0iî3Dî9{î>ÛîFÀîGìîKHîKHï! î	ôïÈî$î¦î(îÔî!Vî)4î,î0Šî7’î:fî>èîA¼îGìîKHîKHïÈî	ôïpîîÈî-î#îî&¥î*3	î3¢î6Yî9çî?#îE6îGíîKIîKIïpî	ôïîÕî¶înî ¡î#&î)î0œïî›ïìî£î¶îCî$"î'Tî-
î0<î4Dî:Òî>îGîKHîKHïìî	ôï”îZîßîÀî!xî(6ï”î›ïh�î
YîÅî¶îUî-ƒî1Æî4[î:Lî=¸î@MîGîKHîKHïhî	ôï�îîcîÞî/î!û�î$î(½î,‰î/~î4ùî6@î95î<*îKHîKHïî	ôï¸î¬îîÊî"Oî(6ï¸î›ïŒ�î
ÛîÊî>î _î+Ýî0£î3ºî:.î=F	îGîKHîKHïŒî	ôï4îî€îtî!‘î&×î)˜î/µî8Wî<ÆîA5îGîI›�îKIîKIï4î	ôïÜîîÎ�î¶î$î î!'î)Çî-]î-]ïÜïÜî0ôî68î8÷î;¶îCîGîGïÜïÜîKHîKHïÜî	ôï„îþï„ï„îîîdîÚîýîœî!;î'óï„ï„�î)ºî*«î.!î3Dî5ãî8‚î@*îC îF>îIš�îKHîKHï„î	ôï
,îàîšî|î!@î$#î'Ü�î)èî.yî1[î:î=ØîF>îGîIš�îKHîKHï
,î	ôïÔ
îzî ®î'î+§î3©î6 î:oî@ÂîEgîHÃîKHîKHïÔî	ôï
|îâît�î/îËî¯î î%/î,Ëî04î;,î?lîAþ�îC¹îKHîKHï
|ÿ�������X����
êq?€`½%��������������������������������������������������������������������������������������������4thatcallsTEDIT.INSERTifgivenastringandcallsTEDIT.INSERT.OBJECTifgivenaTeditobject.(John,canthecurrentcopyselectbetweenTEditwindowsbechangedtousethisbyhavingacaseintheCOPYINSERTFNthathandlesPIECEs?)Anewfunction(COPYINSERTimageObject)willinsertimageObjectintothewindowthatcurrentlyhastheTTY.Itfindsthewindowthathasthetty(sayttyWindow).IfttyWindowhasaCOPYINSERTFN,thisiscalled,passingitimageObject.IfnoCOPYINSERTFNexists,ifimageObjectisanimageObject,theresultofcallingitsPREPRINTFNonitisBKSYSBUFed;otherwiseimageObjectisBKSYSBUFed.(ThedefaultBKSYSBUFwillusePRINT2withareadtabletakenfromtheprocessassociatedwiththettyWindow.AwindowwhichwishestousePRIN1oradifferentreadtablecanprovideitsownCOPYINSERTFNthatdoesthis.)ThustheCOPYBUTTONEVENTFNforawindowshouldallowtheusertoselectanobjectandthencallsCOPYINSERTonanimageobjectbuilt(viaIMAGEOBJCREATE)fromtheselectedobjectandninefunctionsthatdefineitsbehavior.Miscnotes:ThelayoutanddisplayingfunctionofTEditwillbemadeavailableforusewithinimageobjectdisplayfns.Thus,anannotationcouldcalltheTEditformattingroutinestolayitselfoutwithinabox.{Thisactuallyalsoneedstodeterminethesizeoftheboxwhichshoulddependonthemargins.}InthecaseofDeditcopyselectingalistintoaTEditwindow,thedisplayfncouldPRINTDEFthestructureandpossiblyDedititafteritwasintheTeditdocument.Inthiscasethestructurewouldneedtohavesomeideaofthewidthtobeprintedinto(whichshouldalsobeeditablesomehow).PossiblythestructurethatTeditbuildscouldhaveanextrafieldforwidthwhichitdefaultsuponcreationbutwhichcouldbechanged.ThiscaseisinterestingbecauseitrepresentsacasewherewemightwantTedittopassinformationintotheobject(ie.howwidetoprintitself).Thisdoesnotaddresstheproblemofimageobjectsthatprintastext.Forexample,annotationsmightbeprintedinlineinasmallerfontorasfootnotesatthebottomofthepageorasmarginnotesorbetweenthelinesintermixedwiththemaintext.Thisisadifficultproblemthatisindependentofthespecificationofthisproposal.ProvidedImageObjecttypesMenus.SupportedbyJohnSybalsky.Bitmaps-supportedbyGregNuyensRichardBurton.Annotations-supportedbyRichardBurton.FutureobjecttypesGraphergraphs-supportedbyRonKaplan.S-expressions-volunteers?���îKHï
|î
êïg,rî	ôïh„�î
Ëïh„î	ôïb5îiî¶îäî!«î&ø�î(éî/î2«î7÷îHÃîKHîKHïb5î	ôï`Ýîf�î|îîî
îLî%•î)Yî-î4<î8×î? îF?îKIîKIï`Ýî	ôï_…îûîÏîÖî«î!Vî%Øî(¬î.Ü�î0Úî5\î80î;ÛîGîKHîKHï_…î	ôï^-î¬îjï^-î›ï\�î
Œî+îþ
î#Uî.„î2úî9
îCvîGìîKHîKHï\î	ôïZ©îî›îJî ðî$•î)î*3î-î2Uî5úî<%î@¡îDGîGìîKHîKHïZ©î	ôïYQî]
î¨îµîqî%
î( �î*„î6}î:æî=¢îDîKHîKHïYQî	ôïWùîýîmîÉîÒîÜî+Lî2‰î5’
î@+îC5îF>îKHîKHïWùî	ôïV¡îÏîNîRîúî#Õî'T	î0´î3\î6î8¬
îBãîKIîKIïV¡î	ôïUI
îoî[
î!Öî#î'®î.Íî6Ãî;]î? îEhîI›�îKIîKIïUIî	ôïSñîYî•îÑî6î Äî'®	î1î5‚î9	îBîCˆ�îEhîKIîKIïSñî	ôïR™îwîÒîÑî¦î"*î%)�î'Pî00î9î<åîDîGìîKHîKHïR™î	ôïQAîqî6îûî%nî&×î+œî/Šî?:îC(�îEhîKIîKIïQAî	ôïOéîîsîî–î eî&î)_î/Šî30î7­î=	îF>îHÃîKHîKHïOéî	ôïN‘îPî‚îÞîbî-$î1¨î5Vî=6îCiîGîKIîKIïN‘î	ôïM9îZîînîÊî'_ïM9î	ôïKáî	úïKáî	ôïJ‰vî
¤îïJ‰rïJ‰î ïJ‰î›ïHHîîöîa	î!¬î)Jî+Þî0÷î58î7Ìî<îDƒîGíîKIîKIïHHî	ôïFðîîsîž
î%üî'î,qî/@	î8Çî>îB˜îF>îKHîKHïFðî	ôïE˜	î¢î¢î˜î"eî(¸î,…î2×�î4öî9šî?îGîKHîKHïE˜î	ôïD@îþîƒîéîEî!xî#ýî'Yî*µî/¿î5 î;î>îAbîH÷ïD@î›ïBî¡î~î3î9îÄî$yî-`�î/î4Dî8ø�î;(î@³îGìîKHîKHïBî	ôï@¼îiîƒî!î"Œî+î.mî6î;%î=ºîBÓîEgîHÃîKHîKHï@¼î	ôï?dî
\îrîäîÇîXî"—î&×î*?î2±î7Çî<î>—îBÖîGîKHîKHï?dî	ôï>îÏî€îàî»î–î"¤î',î-cî3šî8#î:þîBâîKHîLîLï>î	ôï<´î‘îûîoî!°î&Èî,¸î1Ðî6î8¤î=¼îBÔîF>îKHîKHï<´î	ôï;\îBî
îÝîTî&'î)Çî/î4cî7,î>ÿî@îDîHÃîKHîKHï;\î	ôï:
î:î$îÛ	î'J�î)*î-î2Ëî5‚î:¾î?#îD_îGîKIîKIï:î	ôï8¬
îî;î—î!xî%«î)î-:î/¿î4Éî;‡ï8¬î›ï6€î$î­î`înî#!î*/î-
î2kî9yî>îCcîF>îKHîLîLï6€î	ôï5(î
šîs
îÑî%%î'ôî.öî1Åî6Bî9�î;	îBîF>îHÃîKHîKHï5(î	ôï3ÐîvîîŽîŠî!+î$¢î(ñî+‘î.2î4.î9Tî;ôîBÈîF?îKIîKIï3Ðî	ôï2x	îðîâîþî!ðî'¹î)Pî.Bî1†�î3ôî=îDîHÃîKHîKHï2xî	ôï1 
îîîéî%«î(0î,cî3øï1 î	ôï/Èî	úï/Èî	ôï.pvî°î^î™î–ï.prï.pîœï.pî	ôï-î	úï-î	ôï+«îÕî¬îî—îÊî'_ï+«î	ôï*Sî¬�îZîÀîEîEï*Sï*Sî!xî&‚ï*Sï*Sî-:î2Dï*Sï*S�î3!ï*Sî	ôï(û
î�î¶îî ¡î'Yî-@ï(ûî	ôï'£î	úï'£î	ôï&KîÕî¶îïï&Kî	ôï$óî	úï$óî	ôï#›î¬î�î;î ¡î#&î&‚î,iï#›î	ôï"Cî¶�îd
î!xî"Oî"Oï"C�������I����
êq?€`½›��������������������������������������������������������������������������������������������������������������������������������é	HELVETICA�����������
����~GACHA���������������
����~GACHA���������������
����é	HELVETICA���������������~GACHA����������������
����é	HELVETICA����������������~GACHA�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
����
�
�M�����.���&�	�?��/������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������j/�2��0�ÿÿiAS��ÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������({ERIS}<LISPCORE>LIBRARY>IMAGEOBJ.TEDIT;6�����������SYBALSKY����������������������� 7-Sep-84 22:06:06���������������������������������������������������������������������������������������������������������������������������������������������������������