IntroducingObjectsintoDocumentsstoredon:{phylum}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?€`½92TEDITNOTE: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î¦î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Éî;)î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 îÄî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ï"CI êq?€`½›é HELVETICA ~GACHA ~GACHA é HELVETICA~GACHA é HELVETICA ~GACHA ß M .& ?/�j/20ÿÿ�iASÿÿÿÿÿÿ({ERIS}LIBRARY>IMAGEOBJ.TEDIT;6SYBALSKY 7-Sep-84 22:06:06