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���������������������������������������������������������������������������������������������������������������������������������������������������������