1XEROXLispLibraryPackagesIMAGEOBJECTSINTRODUCINGOBJECTSINTODOCUMENTSImageObjectsisageneral-purposeinterfacethatenablesyoutoincludegraphicsindocuments.Moregenerally,itenablesyoutoincludeonekindofimage,withitsownsemantics,layoutrules,andeditingparadigms,insideanotherkindofimage.Onesidecanbeimplementedbyimageuserswhowanttoincludeotherimages,andtheothersidecanbeimplementedbyimageproducers,whocreateimagesforuse,say,indocuments.Imagesareencapsulatedinsideauniformbarrier--theIMAGEOBJdatatype.Fromtheoutside,youcommunicatetotheimagebycallingastandardsetoffunctions.Forexample,callingonefunctiontellsyouhowbigtheimageis;callinganothercausestheimageobjecttobedisplayedwhereyoutellit,andsoon.AnyonewhowantstocreateimagesforgeneralusecanimplementhisownbrandofIMAGEOBJ.IMAGEOBJshavealreadybeenimplementedformenus,bitmaps,annotations,andgraphs.Similarly,anyimagingsystemthatwantstouseotherkindsofimageshasonlytoimplementtheconsumersideoftheinterfaceandneedn'tworryaboutinternaldetails.ImageObjectsforTEditallowsobjectstoexistinTEditdocumentsandbeeditedwiththeirowneditor.Italsoprovidesafacilityinwhichobjectscanbeshift-selected(or"copy-selected")betweenTEditandnon-TEditwindows.Forexample,theImageObjectsinterfaceallowsyoutocopy-selectgraphsfromaGrapherwindowintoaTEditwindow.Youcanalsoperformmorecomplicatedcopy-selections,suchascopy-selectingtextfromaDEditwindowintoaTEditwindowtopreserveitsstructure,whilecopy-selectingitintoatypescriptwindowtotreatitasatype-in.Thesourcewindow(wheretheobjectcomesfrom)doesnothavetoknowwhatsortofwindowthedestinationwindow(wheretheobjectisinserted)is,andthedestinationdoesnothavetoknowwheretheinsertioncomesfrom.Anewdatatype,IMAGEOBJ,containsthedataandtheproceduresnecessarytomanipulateanobjectthatistobepartofadocument.IMAGEOBJsarecreatedwiththefunctionIMAGEOBJCREATE.Anothernewdatatype,IMAGEFNS,isavectoroftheproceduresnecessarytodefinethebehaviorofatypeofIMAGEOBJ.Groupingtheoperationsinaseparatedatatypeallowsmultipleinstances êq?€`½ îïp`¬ÿ êq?€`½îïî êïg_p`¬î+oï5q`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî×GîJjïe«îJjîJjïe«î—ï_xî—ï_xî—ï^Ýî—ï^Ýî—ï^Bî—ï^Bî—ï]§î—ï]aþû�î6’ï]§î6’î6’ï]§î6’î6’ï]§î—ï] î—ï\ûþû#î6’ï] î6’î6’ï] î#tïZ*t`iî)…î1´ïZ*î—ïXˆs`#î—ïXwþû#î6’ïXˆî6’î6’ïXˆî6’î6’ïXˆî6’î6’ïXˆî—ïWíî—ïW§þû�î6’ïWíî6’î6’ïWíî “ïUu`X î@îfî!Bî*–ïUqïUî*îî*îïUî “ïQ*vîîãïQ*qïQ*î_îãî$î#"î)9î,%î1šî4gî6!î;JîAOîBó îJÁîJÁïQ*î “ïN÷îT î îLîÃî“î!Oî&zî)^î,�î.Lî3î6$î8î;? îB�îFæîJÂîJÂïN÷î “ïLÄî^î î�î»î$î'&î(Èî-kî0xî3{î6:î84 î@ÊîB¯îFïîJÁîJÁïLÄî “ïJ‘î•îøîŽî“îCî!‰î$Hî&£î*Sî-Iî/üî1ê î:sî0îEYîG¿îJÁîJÁï=ëî “ï;¸î!î1îœînî@î$ùî(×î.Uî2Sî3% î<(î>¼îD0îF˜îJÁîJÁï;¸î “ï9… îÎî�î³î³ï9…î “ï5« îâî­îBî2î"'î&fî()î*óî.Ðî2¹î4{î9ŒîîAoîG&îJÁîJÁï)î “ï&Ò îÆî�î" î#æ î-šî0Yî3«î4Öî4Öï&Òvï&Òî8Dï&Òqï&Òî8«î=ìî@ºîAåîAåï&Òvï&ÒîE(ï&Òqï&ÒîEŽîJÁîJÁï&Òî “ï$Ÿî -îîä î`î½îh î)î*4î,øî. î4¸î9ðî;Šî>Ïî?ñîAÂîBäîG÷îJÁîJÁï$Ÿî “ï"lîˆî÷îëî‚î"î&Ðî*Èî.sî1î4¶î6ˆî:€î> îA&îBøîHgîJÂîJÂï"lî “ï 9 î(î‘î~î î$�î&#î,Nî.Fî1:î3Ë î;`î?îA¡îE:îGîJÁîJÁï 9î “ïîÒî-îîšî ?î ?ïî “ï,î î6îˆî'îJî%Fî'Óî+$î.î0¢ î8wî?zîAB îHÓîJÁîJÁï,î “ïùî î,îPîªî[îþî!Xî#9î+î,7î5:î8dî>VîBîE.îJÁîJÁïùî “ïÆîîïÆî “ïìîîîPîÎî"Ãî$5î%cî)Èî+pî-Ü î5�îîBtîDàîJÁîJÁïìî “ï¹î 9îeîî$î%îŒî!÷î$a î+�î- î.Lî49î7iî:ƒî>èîDTîJÂîJÂï¹¥ êq?€`½Ó2XEROXLispLibraryPackagesofthesametypeofimageobjecttoshareprocedurevectors.ThedataandprocedurefieldsofanIMAGEOBJhaveauniforminterfacethroughthefunctionIMAGEOBJPROP.IMAGEFNSarecreatedwiththefunctionIMAGEFNSCREATE.(IMAGEFNSCREATEDisplayFnImageBoxFnPutFnGetFnCopyFnButtonEventInFnCopyButtonEventInFnWhenMovedFnWhenInsertedFnWhenDeletedFnWhenCopiedFnWhenOperatedOnFnPrePrintFn)[Function]returnsanIMAGEFNSthatcontainsthefunctionsnecessarytodefinethebehaviorofanIMAGEOBJ.Theargumentsareasfollows:DisplayFnisappliedtotheargumentsImageObjandImageStream.ItiscalledtodisplaytheobjectatthecurrentpositiononImageStream.Thetypeofstreamindicateswhetherthedeviceisthedisplayorsomeotherimagestream.ImageBoxFnisappliedtotheargumentsImageObj,ImageStream,CurrentX,andRightMargin.Itreturnsthesizeoftheobjectasalist.Thelist'sfirstandsecondelementsarethewidthandheightoftheobjectimage;itsthirdandfourthelementsarethepositionoftheleftedgeandbaselineoftheimagerelativetowhereyouwanttopositionit.Forcharacters,thethirdelementisthedescent(heightofthedescender)andthefourthelementiszerobecauseTEditdoesn'tsupportleftkerning.TheImageBoxFnreturnstheRECORDIMAGEBOX,whichisadatastructurethatdescribestheimagelaiddownwhenanIMAGEOBJisdisplayedintermsofwidth,height,anddescenderheight.Itisprovidedwithfourfields:XSIZE,YSIZE,YDESC,andXKERN.TheImageBoxFnlooksatthetypeofthestreamtodeterminetheoutputdeviceiftheobject'ssizechangesfromdevicetodevice.(Forexample,abit-mapobjectmayspecifyascalefactorthatisignoredwhenthebitmapisdisplayedonthescreen.)TheCurrentXandRightMarginfieldsallowanobjecttotakeaccountofitsenvironmentwhendecidinghowbigitis.Ifthesefieldsarenotavailable,theyareNIL.PutFnisappliedtotheargumentsImageObjandFileStream.Itiscalledtosavetheobjectonafile.ItprintsadescriptiononFileStreamthat,whenreadbyGetFn(seebelow),regeneratestheTEditobject.(TEdittakescareofwritingoutthenameoftheGetFn.)GetFnisappliedtotheargumentsFileStreamandTextStream.Itiscalledwhentheobjectisencounteredonthefileduringinput.ItreadsthedescriptionthatwaswrittenbythePutFnandreturnsanIMAGEOBJ.CopyFnisappliedtotheargumentImageObjandreturnsacopyofImageObj.TheCopyFniscalledduringacopy-selectoperation.îJÂï¹î êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî×GîJjïe«îJjîJjïe«î “ï^Ñq`Xî <îªîyî—î@îˆî äî"�î&ˆî-Žî3î3sî6Pî9ƒîî&Çî)Âî,ÿî.Æî3£î9êî?™îB%îFÖîHgîJÂîJÂïF2î “ïCÿîbîîÖî†îºî"pïCÿî “ï@%v î™ï@%qï@%îî¥îÔî”îî&bî&bï@%vï@%î-u î6áî=ï@%qï@%î=„î?ëï@%vï@%î@m îIîIï@%qï@%îI™îJÁîJÁï@%î “ï=òî‚îèîÉîjîÐî%îýî!%î#Vî$î&ðî*3î,üî/Æî4×î:øî=iî?ÐîC¢îFlîJÁîJÁï=òî “ï;¿î )î…îÎîeî2îvî 5î$_î*uî,Üî/7î4¡î67î8“î:âî>gîA&îFÐîHfîJÁîJÁï;¿î “ï9ŒîöîîâîPî)î!»î#€î)î*Æî+Mî-ú î5²î8<î;®îACîBÒîE\îJÂîKîKï9Œî “ï7Yîeîÿî^ îîî±î!î%=î*§î, î/1î4óî4óï7Yvï7Yî86ï7Yqï7Yî8’î=¥îBæîE9îJÁîJÁï7Yî “ï5&î—î—ï5&vï5& î�ï5&qï5&î/îLîáî%\î-²î2 î3¥î4üî8Vî>¦îA¨îHfîJÁîJÁï5&î “ï2óîÚîŠîpîJîKî#ìî%_î+×î-kî1eî3 î7Iî<î>åîF îJÁîKîKï2óî “ï0Àî ìî}î›îÂîÝî+î$î)î.¤î1”î75î:0î:0ï0Àvï0À îB6ï0Àqï0ÀîB¿îF¬îHfîJÁîJÁï0Àî “ï.�î¡î:î™îHîáîŸî!þî&wî*úî,î.yî3×î6¯î<}î?ÃîDFîEßîJÁîJÁï.�î “ï,ZîÕî5îžîî £î#äî)î*pî.jî2Çî5Úî7…î= îA îCÆîEÿîIaîJÁîJÁï,Zî “ï*'îúîõîQîÙî¤î¤ï*'vï*'î$bï*'qï*'î$»î'{î'{ï*'vï*' î/@ï*'qï*'î/™î3Uî6üî8ëî=5î>ÌîAÖîG^îHõîJÂîJÂï*'î “ï'ô îÛî¢îxî zî"Ìî#éî%«î&î'+î*ûî.¶î1î3ƒ î9Úî<åî?KîAÝï'ôî “ï$vîCï$qï$î©îî+îÏî9î!fî!fï$vï$î'”ï$qï$î'ûî*Èî*Èï$vï$ î1úï$qï$î2aî3—î5î9<î:àî>1î@šîDòîFúîH%îJÁîKîKï$î “ï!çî ÒîÜî îžî@ï!çvï!çî¯ î"íî"íï!çqï!çî&.î* î-Zî.Ûï!çvï!çî/Jî3%ï!çqï!çî3”î6¶î;eî<6î<¥ îD´îG&îG&ï!çvï!çîJiï!çqï!çîJÁîJÁï!çî “ï´î>î–îï´vï´îRï´qï´îªîcîŽî$î!Çî$.î&‰î*eî+ûî.Vî.Vï´vï´î21ï´qï´î3 ï´î “ïÚvînïÚqïÚîî¾îîñî˜î"_ïÚvïÚî# î)ÒïÚqïÚî*vî-�î-�ïÚvïÚ î57ïÚqïÚî5Ûî6î7óî9Ÿî>îB&îDÍîIbîJÂîJÂïÚî “ï§ î(îEîÂîîºî#Ïî$Jî%•î&î*î,— î41î7î:î>ãî@ßîC]îC]ï§vï§îGˆîGˆï§qï§îHîJÁîJÁï§î “ïtîwîeîVîVïtî “ïšvîwïšqïšîÐî1î7îÎî+î!›î!›ïšvïšî'Éïšqïšî("î*âî/Çî0åî4Vî5íî5íïšvïšî<~ïšqïšî<×î=0î?ûî?ûïšvïšîDßïšqïšîE8îF™îJÁîJÁïšî “ïgî î( îÔ îMïgb êq?€`½`3XEROXLispLibraryPackagesButtonEventInFnisappliedtotheargumentsImageObj,WindowStream,Selection,RelX,RelY,Window,TextStream,andButton.ButtonEventInFniscalledwhenyoupressamousebuttoninsidetheobject.TheButtonEventInFndecideswhetherornottohandlethebutton,totrackthecursorinparallelwithmousemovement,andtoinvokeselectionsoreditssupportedbytheobject(butseeCopyButtonEventInFnbelow).IfButtonEventInFnreturnsNIL,TEdittreatsthebuttonpressasaselectionatitslevel.Notethatwhenthisfunctionisfirstcalled,abuttonisdown.TheButtonEventInFnshouldalsosupportthebutton-downprotocoltodescendinsideofanycompositeobjectswithinit.Inmostcases,theButtonEventInFnrelinquishescontrol(i.e.,RETURNs)whenthecursorleavesitsobject'sregion.CopyButtonEventInFnisappliedtotheargumentsImageObjandWindowStream.Itiscalledwhenyoubuttoninsideanobjectandholddownacopy(shift)key.ManyofthecommentsaboutButtonEventInFnapplyheretoo.Also,seethediscussionbelowaboutcopy-selectingobjects.WhenMovedFnisappliedtotheargumentsImageObj,TargetWindowStream,SourceTextStream,andTargetTextStream.ItprovideshooksbywhichtheobjectisnotifiedwhenTEditperformsanoperation(MOVEing)onthewholeobject.Itallowsobjectstohavesideeffects.WhenInsertedFnisappliedtotheargumentsImageObj,TargetWindowStream,SourceTextStream,andTargetTextStream.ItprovideshooksbywhichtheobjectisnotifiedwhenTEditperformsanoperation(INSERTing)onthewholeobject.Itallowsobjectstohavesideeffects.WhenDeletedFnisappliedtotheargumentsImageObj,TargetWindowStream,SourceTextStream,andTargetTextStream.ItprovideshooksbywhichtheobjectisnotifiedwhenTEditperformsanoperation(DELETEing)onthewholeobject.Itallowsobjectstohavesideeffects.WhenCopiedFnisappliedtotheargumentsImageObj,TargetWindowStream,SourceTextStream,andTargetTextStream.ItprovideshooksbywhichtheobjectisnotifiedwhenTEditperformsanoperation(COPYing)onthewholeobject.WhenCopiedFniscalledinadditionto(andafter)theCopyFnabove.Itallowsobjectstohavesideeffects.WhenOperatedOnFnisappliedtotheargumentsImageObj,WindowStream,HowOperatedOn,Selection,andTextStream.Itprovidesahookforeditoperations.ThevaluesofHowOperatedOnareSELECTED,DESELECTED,HIGHLIGHTED,andUNHILIGHTED.TheWhenOperatedOnFndiffersfromtheButtonEventInFnbecauseitiscalledwhenyouextendaselectionthroughtheobject.Thatis,theobjectistreatedintotoasaTEditcharacter.HIGHLIGHTEDreferstotheselectionbeinghighlightedonthescreen,andUNHIGHLIGHTEDmeansthatthehighlightingisbeingturnedoff.îMïgî êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî×GîJjïe«îJjîJjïe«î “ï^Ñv`XîËîËï^Ñqï^Ñîkîî`î >î"áî)¨ï^Ñvï^Ñî*Hî1y î<" îCîGîJÁîJÁï^Ñî “ï\žî¨ î^ï\žqï\žîîgï\žvï\žîî!ªï\žqï\žî"Lî"íî#ßï\žvï\ž î-…ï\žqï\žî.'î.Éî0rî4äî8ôî;èî@îAjîFKîJÁîJÁï\žî “ïZkîÌîBîî{î`î`ïZkvïZkî%kî%kïZkqïZkî*×î0oî27î4¹î5,î6Ýî;¥î>îCîD¿îHfîJÁîJÁïZkî “ïX8î î¸îÓîßîŽî%úî(Ïî*|î/ î5ðî7´î;.îBîDîFxîJÁîJÁïX8î “ïVî¹îóïVvïVî‘îwïVqïVî î%Vî%ôî'cî'cïVvïVî1ûïVqïVî2™î7Äî:ôî:ôïVvïVî>7ïVqïVî>Õî?tîCªîFKîJÁîJÁïVî “ïSÒîxîXî‰î²îOî/îçî Rî#¼î&˜î*rî-#î2Êî4=î7î;¬î<ÜîAeîBÙîG!îGŒîG÷îJÁîJÁïSÒî “ïQŸvî+ïQŸqïQŸîŠî4î1î#uî%× î.Hî3ùî5–î;gî?�îA*îCÎîJÁîJÁïQŸî “ïOlîµîÔî~î&î§î\îõî!‡î$ î$ ïOlvïOlî.£ïOlqïOlî/$ î7_îîJÂîJÂïAî “ï>ìqîrîrï>ìvï>ìî½î½ï>ìqï>ìî4î|î"gî&¼î(´î,óî/nî3Öî4Nî5Íî;î>íî>íï>ìvï>ìîB0ï>ìqï>ìîB¨îHÔîJÂîJÂï>ìî “ï<¹îîNîHî£î!Âî&mî&Åî'î'uî(�î,óî1ìî3‚î6åî9Ûî>Ûî?3î?3ï<¹î “ï8ßv îtîtï8ßqï8ßîñîîÇî!@î(|î(|ï8ßvï8ßî/ƒî>îJÂîJÂï8ßî “ï6¬îrîEï6¬qï6¬î½î4î|î"gî&¼î(´î,óî/nî3Öî4Nî5Íî;î>íî>íï6¬vï6¬îB0ï6¬qï6¬îB¨îHÔîJÂîJÂï6¬î “ï4yî îIîCîžî"½î'hî'Àî(î(pî)˜î-îî2çî4}î7àî:Öî?Öî@.î@.ï4yî “ï0Ÿv î/î/ï0Ÿqï0Ÿî¶îãî î!"î(iî(iï0Ÿvï0Ÿî/yî>îJÂîJÂï0Ÿî “ï.lqîrîrï.lvï.lîEï.lqï.lî½î4î|î"gî&¼î(´î,óî/nî3Öî4Nî5Íî;î>íî>íï.lvï.lîB0ï.lqï.lîB¨îHÔîJÂîJÂï.lî “ï,9î î¡î›îöî#î'Àî(î(pî(Èî)ðî.Fî3?î4Õî88î;.î@.î@†î@†ï,9î “ï(_v îZï(_qï(_îäîvî­îuî!î(Sî(Sï(_vï(_î/nî>îJjï(_qï(_îJÂîJÂï(_î “ï&,îrîrï&,vï&,î½î½ï&,qï&,î4î|î"gî&¼î(´î,óî/nî3Öî4Nî5Íî;î>íî>íï&,vï&,îB0ï&,qï&,îB¨îHÔîJÂîJÂï&,î “ï#ùîîfî}îôî"0î&÷î'lî'àî'àï#ùvï#ù î2î2ï#ùqï#ùî2‘î4 î8Rî9ïî?ŠîA<îD‘îHfîJÁîJÁï#ùî “ï!Ævîwï!Æqï!ÆîÏîeî½îåî;î 4î!Êî%-î(#î-#î-{î-{ï!Æî “ïìvî§ïìqïìîsîFî ¿î"Èî%–î-)î-)ïìvïìî4… î?Y îJÂîKîKïìî “ï¹ îXîXï¹qï¹î-î-ï¹vï¹ îQîQï¹qï¹îÀîþî$àî&î)¯î+ßî.¨ î6?î6®î9Žî>î?»î?»ï¹vï¹ îJiï¹qï¹îJÁîJÁï¹î “ï†îQî  î Ñ î+Rî.i î8Óî9ƒî:3î=Uî=Uï†vï†îJiï†qï†îJÁîJÁï†î “ïSî.î¸îZîZïSvïSî!‘î!‘ïSqïSî'–î(úî*¡î/î3î6î;î:î>ÅîAS îIaîJÁîJÁïíî “ïºî{îüîaî¹î¹ïº V êq?€`½À4XEROXLispLibraryPackagesPrePrintFnisappliedtotheargumentImageObj.Itiscalledtoconverttheobjectintosomethingthatcanbeprintedforinclusionindocuments.Itreturnsanobjectthatthereceivingwindowcanprint(usingeitherPRIN1orPRIN2,itschoice)toobtainacharacterrepresentationoftheobject.IfPrePrintFnisNIL,theOBJECTDATUMitselfisused.TEditusesthisfunctionwhenyouindicatethatyouwanttoprintthecharactersfromanobjectratherthantheobjectitself(presumablyusingPRIN1case).IDENTIFYINGLEGITIMATEGETFNSEachlegitimateGetFnneedstobeknowntothesystem,topreventvariousTrojan-horseproblemsandtoallowtheautomaticloadingofthesupportingcodeforinfrequentlyusedIMAGEOBJs.Tothisend,thereisagloballist,IMAGEOBJGETFNs,thatcontainsanentryforeachGetFn.TheexistenceoftheentrymarkstheGetFnaslegitimate;theentryitselfisapropertylist(PList),whichcanholdinformationabouttheGetFn(seethefollowingsection).NoactionneedstobetakenforGetFnsthatarecurrentlyinuse:thefunctionIMAGEFNSCREATEautomaticallyaddsitsGetFnargumenttothelist.However,packagesthatsupportobsoleteversionsofobjectsmayneedtoexplicitlyaddtheobsoleteGetFns.Forexample,TEditsupportsbit-mapIMAGEOBJs.Recently,achangewasmadeintheformatinwhichobjectsarestored;toretaincompatibilitywiththeoldobjectformat,therearenowtwoGetFns.ThecurrentGetFnisautomaticallyonthelist,courtesyofIMAGEFNSCREATE.However,thecodefilethatsupportstheoldbit-mapobjectscontainstheclause:(ADDVARS(IMAGEOBJGETFNS(OldGetFnName))),whichaddstheoldGetFntoIMAGEOBJGETFNS.ForagivenGetFn,theentryonIMAGEOBJGETFNSmaybeapropertylistofinformation.CurrentlytheonlypossiblepropertyisFILE.FILEisthenameofthefilethatcanbeLOADediftheGetFnisn'tdefined.ThisfilealsodefinesalltheotherfunctionsneededtosupportthatkindofIMAGEOBJ.Forexample,thebit-mapIMAGEOBJsimplementedbyTEditusetheGETFNBMOBJ.GETFN2.Itsentryis(BMOBJ.GETFN2FILEIMAGEOBJ),indicatingthatthesupportcodeforbit-mapimageobjectsresidesonthefileIMAGEOBJ,andthattheGetFnforthemisBMOBJ.GETFN2.ThismakesitpossibletohaveentriesforGetFnswhosesupportingcodeisn'tloaded--youmight,forinstance,haveyourinitfileaddentriestoIMAGEOBJGETFNSforthekindsofimageobjectsyoucommonlyuse.Thesystem'sdefaultreadingmethodwillautomaticallyloadthecodewhennecessary.î¹ïºî êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî×GîJjïe«îJjîJjïe«î “ï^¾v`X îDï^¾qï^¾îÁîEînî(î§î$:î$:ï^¾vï^¾î*Ëï^¾w`iï^¾î+Xî+Xï^¾q`Xï^¾î+Ôî-!î.¥î2ñî4«î9ôîîDî5îgî ˜î"2 î*î*ˆî+Èî0Äî2Êî7+î: î<~îBÃîHîJÁîJÁï\xî “ïZEîèîEîRîÂî€î#Æî(òî*™î.ÿî0.î6¶ î@aîB îDuîI1îIšîJÂîJÂïZEî “ïXv îDïXqïXî�îþîéîE î$ î'cî(Äî,•î,îî0Ÿî3îî6�îx îFîîJÁîJÁïUßî “ïS¬îñîËïS¬î “ïOÒu î6 î:î#õïOÒqïOÒî$Mî$MïOÒvïOÒî$MïOÒî “ïKøqî> îÓîÓïKøvïKøî®ïKøqïKøîî_î î"î&¦î(Nî*¼î/óî1›î6Òî;ß îD|îJÁîJÁïKøî “ïIÅîuî.î÷îuî<î"pî$)î&§ î.î1¨î3å î;ìî?~ îHBîH½îJÂîJÂïIÅî “ïG’îpîÐî³îQî­î,îòî-sî0zî6ƒî8°î<}î>ÖîB�îB�ïG’vïG’îGbîGbïG’qïG’îGøîJÂîJÂïG’î “ïE_îîºî(îÊîî î ïE_vïE_î$ZïE_qïE_î$Äî&¤ î-œî0 î3¬î7î8ˆî9¸î?€îA¸îF¢îJÁîJÁïE_î “ïC,îFîi îîþîYîYïC,vïC,î#4ïC,qïC,î#Œî&—î(òî/ î4‡ïC,î “ï?Rî Ñî4î�î1î9î,î `î `ï?Rvï?Rî$ëï?Rqï?Rî%\î(>î*¾î0Øî2sî5Œî8î=­ îJÁîJÁï?Rî “ï= îÁî•îÇîÇï=vï=î¢ï=qï=î`î&4î(/î*ïî-Ûî.™î5Kî<(î?UîD÷îJÁîJÁï=î “ï:ìînî4î]îƒî7î ý î'î*î,‘î2‹î2‹ï:ìvï:ìî7yï:ìqï:ìî8î:¯î@ôîDÔîJÁîJÁï:ìî “ï8¹îÝ î¡îî ‹î!Ëî'î*î.î/¤î2#î6»î8_î<¢îA¾îDGîI,îJÂîJÂï8¹î “ï6†îÆ îeî‘î#î ¬î%+î*9î.î0°î3éî6½î6½ï6†vï6†î;«ï6†qï6†î<:î<Éî?ÉîDjï6†vï6†îDùîIbîIbï6†qï6†îJÂîJÂï6†î “ï4S îdîgîËîZî!8î"× î/“ï4Svï4Sî0Vî0Vï4Sqï4Sî0·î1î7mî9Ñî=^î? îBqîHfîJÁîJÁï4Sî “ï2 îTîéîRî‹î"Vî#î(oî0Sî>Rî>Rï2 vï2 îIï2 qï2 îJÁîJÁï2 î “ï/íî²î!î|îÎîÎï/ívï/íî©ï/íqï/íîî—î*¸ï/íî “ï,îî7î¦ï,vï,îî@ï,qï,îœîûîŽîŒ î,§î/¡î1“î2´î8mî:–î<0 îD.îDŠîJÂîKîKï,î “ï)àî îîðî�îEî¥îýî!Jï)àî “ï&îèîZîÈî¶î^îËîîòî"·î$·î*‰î+¹î.&î.&ï&vï&î2ï&qï&î2kî5}î; î;vî>•î@áîCéîHôîJÁîJÁï&î “ï#Óî îîžîáîûî‘î#Îî&–î)¢î+8î2Ñï#Óî “ïùî6îoîïî9î$� î-Jî/Hî/Hïùvïùî2‹ïùqïùî3î5Êî8Iî=h îHêîJÂîJÂïùî “ïÆîeî îÁî H î(ö î/Ôî2àî5~î:ÿî>ÆîA$îF�îJÁîJÁïÆî “ï“îŒî{îuîÐî î#ûî&ºî)‚î+Ýî+Ýï“vï“î/¸ï“qï“î0î2*î5®î7 îBï“î “ï¹îÂîYî™î[îî™î$gî&£î&£ï¹vï¹î*~ï¹qï¹î+©î0B î7›î;Bî>d îFwîJÁîJÁï¹î “ï†î °îÓî9îjî³îðî!²î&`î'ù î5î70î9Žî=Mî>æîCîHîJÂîJÂï†î “ïSîåîNîîBî €î%Ÿî+8î0Çî3˜ î<Êî@JîCîFúîJÁîJÁïSî “ï înï m êq?€`½5XEROXLispLibraryPackagesUSINGTHEBUILT-INSUPPORTFUNCTIONS(IMAGEFNSPX)[Function]returnsXifXisanIMAGEFNS,NILotherwise.(IMAGEOBJCREATEObjectDatumImageFns)[Function]returnsanIMAGEOBJthatcontainstheobjectdatumObjectDatumandtheoperationsvectorIMAGEFNS.ObjectDatumcanbearbitrarydata.(IMAGEOBJPX)[Function]returnsXifXisanIMAGEOBJ,NILotherwise.(IMAGEOBJPROPImageObjectPropertyNewValue)[Function]accessesandsetsthepropertiesofanIMAGEOBJ.ItcanbeusedonthesystempropertiesOBJECTDATUM,DISPLAYFN,IMAGEBOXFN,PUTFN,GETFN,COPYFN,BUTTONEVENTINFN,COPYBUTTONEVENTINFN,WHENOPERATEDONFN,andPREPRINTFN.Additionally,itcanbeusedtosavearbitrarypropertiesonanIMAGEOBJ.READINGANDWRITINGIMAGEOBJSONFILESIMAGEOBJscanbewrittenouttofilesusingHPRINTandreadbackusingREAD.Thismethodusesthefollowingfunctions,whichcanalsobeusedinusercode:(WRITEIMAGEOBJImageObjStream)[Function]PRIN2sacalltoREADIMAGEOBJ,thencallsthePUTFNforImageObjtowriteitontoStream.Duringinput,then,thecalltoREADIMAGEOBJisreadandevaluated;itinturnreadsbacktheobject'sdescription,usingtheappropriateGetFn.(READIMAGEOBJStreamGetFnNoError)[Function]readsanIMAGEOBJfromStream,startingatthecurrentfileposition.UsesthefunctionGetFnaftervalidatingit(andloadingsupportcode,ifnecessary).IftheGetFncan'tbevalidatedorisn'tdefined,READIMAGEOBJreturnsanIMAGEOBJthatisasafeencapsulation:Itdisplaysasarectanglethatsays,"UnknownIMAGEOBJType"andliststheGetFn'sname.However,ifNOERRORisnon-NIL,READIMAGEOBJreturnsNILifitcan'tsuccessfullyreadtheobject.înï î êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî×GîJjïe«îJjîJjïe«î “ï^Ñu`Xî�î«îgî!Óî*fï^Ñqï^Ñî*¾î*¾ï^Ñî “ïZ÷ îtîtïZ÷vïZ÷îZïZ÷qïZ÷îCÙ îJjïZ÷î “ïWîwîwïWvïWî]ïWqïWîµîÒî¸ïWvïWîîïWqïWîpî^îBî!Ê î(YïWî “ïSCî-î-ïSCvïSC î!ëî(#ïSCqïSCîCÙ îJjïSCî “ïOiîËîîòîî$-î&Ýî+zî0$î0$ïOivïOi î97î97ïOiqïOiîú îFmîJÁîJÁïOiî “ïM6îwîÏîÏïM6vïM6 î5ïM6qïM6î�î@î!.î&âî* ïM6î “ïI\ î�î�ïI\vïI\îgïI\qïI\îCÙ îJjïI\î “ïE‚îwîwïE‚vïE‚î]ïE‚qïE‚îµîÒîÒïE‚vïE‚î¸ïE‚qïE‚îîpî^îOî!× î(fïE‚î “ïCO îvîvïCOvïCO îóî%[ïCOqïCOî%³î%³ïCOvïCOî, ïCOqïCOîCÙ îJjïCOî “ï?uî'î9îuî# î"Gî$0î&pî.´î/_î0Ùî3ßî6î9áî<-î>ÛîCð îJÂîKîKï?uî “ï=B î% î÷ î*Lî/üî5Ãî<œîJÁîJÁï=Bî “ï;îìî.‚î1Ž î;Gî;ì îDkîEÕîHÔîJÂîJÂï;î “ï8Üîî˜îÚîŽ î `î"Zî$Hî+áï8Üî “ï5uî‚îîÂî%Ëî(Hî,Xï5qï5î,°î,°ï5î “ï1(îîëî îëî …î"Mî%jî)pî/î2î5oî9î=îAÒîB]îEœîJÂîJÂï1(î “ï.õîáî<îU îúî"î$Ìî'Âî)°î-î. î1Âî5Pï.õî “ï+ îîiï+vï+îŒî#!ï+qï+îCÙ îJjï+î “ï'AîèîLî$î î# î&|î*î,§î1Ðî41î41ï'Avï'Aî:_ï'Aqï'Aî:þî<Ûî@�îAôîErîFXï'Avï'AîJï'Aqï'AîJÁîKîKï'Aî “ï%îrîŸîiîÿîÍîž î+9î,Ôî0Fî3A î:aî;ºî=vî@�îD¿îHgîJÂîJÂï%î “ï"Ûîî îÇîšîõ î&­î&­ï"Ûvï"Ûî*ëï"Ûî “ïq îkîkïvïîXî ‹î%‘ïqïîCÙ îJjïî “ï'î±î×î�îîï'vï'î!¬ï'qï'î"ï'vï'î"žî"žï'qï'î'úî)»î,Nî1~î3ðî9òî:�î>2î@ÄîFŽîFŽï'vï'îJiï'qï'îJÁîJÁï'î “ïôîï î…î¿îî@î$šî(œî)Õ î1žî2î3Vî5Yïôvïôî5Îî9©ïôqïôî:î=»î?ÆîEøîGÁîJÁîJÁïôî “ïÁîZ îî"2î$kî,Dî/Wî1î2iî5³ î?®îA îAÃîG�îI¤îJÁîJÁïÁî “ïŽîgî­îºî!Wî)cî. î1]î4°î7ˆî7ˆïŽvïŽî;ÂïŽqïŽî=HîBîBÚîI¤îJÁîJÁïŽî “ï[îçîGî î%|î*`î,èî.î/"î2¤ î:Êî>î@\îD¯ï[¸ êq?€`½¶6XEROXLispLibraryPackagesSelectinganencapsulatedIMAGEOBJwiththemousecausesanotherattempttoreadtheobjectfromthefile;thisissoyoucanloadanynecessarysupportcodeandthengettotheobject.NB:YoucannotsaveanencapsulatedIMAGEOBJonafilebecausethereisn'tenoughinformationtoallowcopyingthedescriptiontothenewfilefromtheoldone.COPY-SELECTINGBETWEENWINDOWSThegeneralideabehindcopyingbetweenwindowsisthatthesourcewindowbuildsanimageobjectofwhatyouhaveselectedandcallsasystemfunction.ThesystemfunctionfindsthecurrentTTYwindowandcallsafunctionassociatedwithitthatknowshowtoinsertimageobjects.Forinstance,BKSYSBUFisusedtocopystringsbyhavingthesystemfunctioncallBKSYSBUFonthePREPRINTFNoftheimageobjectifthetargetwindowdoesn'thaveaninsertfunction.Thefollowingnewfunctionshavebeenaddedtothesystemtoimplementcopy-selectingimageobjectsbetweenwindows.COPYBUTTONEVENTFN[Windowproperty]iscalled(ifitexists)whenabuttoneventoccursandacopykeyisdown.IfnoCOPYBUTTONEVENTFNexists,theBUTTONEVENTFNiscalled.COPYINSERTFN[Windowproperty]iscalledbyCOPYINSERT(seebelow)whenthesourcewindowwantstoinsertsomethingintothedestinationwindowasaresultofacopy-select.Itsargumentsaretheobjecttobeinsertedandthedestinationwindow.Theobjecttobeinsertedcanbeacharacterstring,anIMAGEOBJ,oralistofIMAGEOBJsandcharacterstrings.Asaconvention,COPYINSERTFNscallBKSYSBUFiftheobjecttheyaretoinsertisacharacterstring.ForTEditwindows,theCOPYINSERTFNisafunctionthatcallsTEDIT.INSERTifgivenastringandTEDIT.INSERT.OBJECTifgivenaTEditobject.(COPYINSERTImageObject)[Function]isappliedtotheargumentImageObject.ItinsertsImageObjectintothewindowthatcurrentlyhastheTTY.ItfirstfindsthewindowthathastheTTY(sayTTYWindow).IfTTYWindowhasaCOPYINSERTFN,thisiscalled,passingitImageObject.IfnoCOPYINSERTFNexistsandifImageObjectisanimageobject,theresultofcallingitsPREPRINTFNonitisBKSYSBUFed;otherwiseImageObjectisBKSYSBUFed.(ThedefaultBKSYSBUFusesPRINT2withareadtabletakenfromtheprocessassociatedwiththeTTYwindow.AwindowthatwishestousePRIN1oradifferentreadtablecanprovideitsownCOPYINSERTFNthatdoesthis.)ThustheîD¯ï[î êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî×GîJjïe«îJjîJjïe«î “ï^Ñq`Xîî î&î$Úî'õî*uî/2î4/î9šî>âî@�îCùîFyîJÂîJÂï^Ñî “ï\žî÷îsî0îïîqîkî6î î#Bî&î,ôî2Rî5÷î8×î<%î>¡î@XîBÔîG îHîJÁîJÁï\žî “ïZkîŸî�îäîò î!üî)¬î+Æî-î/^î5<î9îî4Öî8î9Æî=ÙîB9îGÀîHCîJÁîJÁïL5î “ïJîÀî$îéîVîÑî sî#ïî(žî*ƒî/(î1�î6^î;þî>œîFaîHgîJÂîJÂïJî “ïGÏ î�î3îŽîÂî! î"(î$ƒî(”î-Çî2Öî69î8'î<îA«ïGÏî “ïCõî“îâîî‡î" î%Ûî*fî,2î.Ãî3¼î5ˆî<± îF�îJÁîJÁïCõî “ïAÂîŒîJî7ïAÂî “ï=èî>NîD<îJjîJjï=èî “ï:î ¶î¡îûîÛîî žî"~î'·î,Kî1Æî5Hî7)î;[î>¥î@ÉîEÁîFÜîHÇîJÁîJÁï:î “ï7ÛîÞî <î"— î.ûî0[î4�ï7Ûî “ï4 î>¦îD”îJjï4î “ï0'î îDî1 îˆî§î$Tî(/î*žî/kî4²î8Úî:„î>€îE“îHfîJÁîJÁï0'î “ï-ô îûî6î î1î î ¿î!ä î)úî*[î,;î3bî5Ñî5Ñï-ôï-ôî84î<…î>$î@îEŸîHfîHfï-ôï-ôîJÁîJÁï-ôî “ï+Á îúîÕï+Áï+Áî–î–ï+Áï+ÁîõîÆî î uî"î$î)Œî,Fî.;î/_î5Þî::îèîFöîHgîJÂîJÂï)Žî “ï'[îãîõîcîîïîVî{î#ùî(Vî(µî+;î+;ï'[vï'[î.~ï'[qï'[î.Ýî5*î7Œ îB£îD îE.îJÁîJÁï'[î “ï%(î[î� îWîtî ;î!Xî%Kî( î7¤î8Áî<ˆî=¥î=¥ï%(vï%(îA@îA@ï%(qï%(îEëîFCîFCï%(î “ï!N îNîNï!Nvï!N îsï!Nqï!NîC� îJjîJjï!Nî “ïtî î2îåî^îêîêïtvït î%rïtqïtî%çî'-î+áî+áïtvït î4{î4{ïtqïtî7Wî9Ðî? îBîH#îJÁîJÁïtî “ïAîJî îÀîDî_î+îâî#rî&—î)‘î,Iî/¨î2FïAvïAî2úî:“ïAqïAî<#î<Øî>\î>\ïAvïAîEõïAqïAîFªîI¤îJÁîJÁïAî “ï îqî}îJî!Bî&÷î'¼ïvïî(‚ î1Ïî1Ïïqïî2•î4*î6’ îBîFxîI¤îJÁîJÁïî “ïÛv î¸ïÛqïÛînî+îwî î"î$Ëî)î+î/íî2 î;€î=Øî?SîA îJÁîJÁïÛî “ï¨î;î;ï¨vï¨ î`ï¨qï¨îÛî^ î&2î&­î*î.ìî6Èî:9î?–îB¯îCïîGIîJÁîJÁï¨î “ïuîƒîÜîMîË î"î% î'‘î*©î0Tî0Âî2"î7kî:Iî? î@¹îCmîGáîI¤îJÁîJÁïuî “ïBîî,î‚îî$ î&·î*— î6„î:)î>vîBÍîDîHfîJÁîJÁïBÿë êq?€`½–7XEROXLispLibraryPackagesCOPYBUTTONEVENTFNforawindowallowsyoutoselectanobjectandthencallsCOPYINSERTonanimageobjectbuilt(viaIMAGEOBJCREATE)fromtheselectedobjectand13functionsthatdefineitsbehavior.EndNotes1.TEditcallstheIMAGEBOXFNonlyduringlineformatting,thencachestheimageboxas(IMAGEOBJPROPobj'BOUNDBOX).ThisavoidstheneedtocallIMAGEBOXFNwhenincompletepositionandmargininformationisavailable.2.WhentheButtonEventInFniscalled,thewindow'sclippingregionandoffsetshavebeenchangedsothatthelower-leftcorneroftheobject'simageisat(0,0),andonlytheobject'simagecanbechanged.Theselectionisavailableforchangingtofityourneeds;themousebuttonwentdownat(relX,relY)withintheobject'simage.YoucanaffecthowTEdittreatstheselectionbyreturningoneofseveralvalues.IfyoureturnNIL,TEditforgetsthatyouselectedanobject;ifyoureturntheatomDON'T,TEditdoesn'tpermittheselection;ifyoureturntheatomCHANGED,TEditupdatesthescreen.UseCHANGEDtosignalTEditthattheobjecthaschangedsizeorwillhavesideeffectsonotherpartsofthescreenimage.3.AswiththeButtonEventInFn,theoffsetandclippingregionsforthedisplayaresetsotheobject'simageisat(0,0),andonlythatimageareacanbemodified.îJÁïBî êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî×GîJjïe«îJjîJjïe«î “ï^Ñq`Xîìîî@î$�î(æî+žî,î-©î1Óî3Ðî8'î:õî>/îA îJÁîJÁï^Ñî “ï\žî µîÌî(î™îÙîŸî,bî/Íî2Pî8+î<œî?„îAŽîGùîJÁîJÁï\žî “ïZkîÜî©î”ïZkî “ïX8î “ïX8î “ïVuî�î®ïVqïVî®ïVî “ïR+î —î —ïR+vïR+î¸î¸ïR+qïR+î€î` î"mî%õî*òî. î5Úî9‹î>þîAßîHôîJÁîJÁïR+î “ïOø îŠîð î#}î#éî' î+•î.î1œî3Fî5ì î?‡îCb îJÂîJÂïOøî “ïMÅîüî»î î î!w î'Îî'ÎïMÅî “ïIëî hîîvî(î(ïIëvïIëîÀïIëqïIëî nî!î"Óî'´î*eî1î6Àî;ƒî>˜îC„îG=îJÁîJÁïIëî “ïG¸î™î�îpîæ îCî#êî%œî(î-ˆî1×î3Rî4÷î8ªî;„î>¡îAîF�îJÁîJÁïG¸î “ïE…î^îdîÉî9îî Jî!Âî'Ïî*î0hî2î3¹î6ÿî;­î> îBÐîG^îJÁîJÁïE…î “ïCRî¥îm îqîÏîhî%î)Öî*lî-–î0ˆî4´î7ôî7ôïCRvïCRî;7ïCRqïCRî;Îî?üîB•îHéîJÂîJÂïCRî “ïAîÔî§îPîFî 'î ’î!Íî$‹î(Òî+Ïî+ÏïAvïAî/~î/~ïAqïAî/éî4Éî7¥î:bî@'îB)îFçîHîJÁîJÁïAî “ï>ìîÚîHîßîõî¸î#Úî(Mî*» î1Fî2vî53î9zî;èî?îG'îG'ï>ìvï>ìîJÂîJÂï>ìî “ï<¹qî(î¦îØîSî?î#–î%Oî)‘î-eî0Pî2Îî7;î9üî@ îCîDÓîG^îJÁîJÁï<¹î “ï:†î‰î'î!îÑî`îöî Qî$ýî);ï:†î “ï6¬î îîîcîcï6¬vï6¬îûï6¬qï6¬î·î"î%úî(»î.%î3Cî5_î7»î<Œî>ôîA/îC îEfîJÁîJÁï6¬î “ï4yîÇî'î±îIîî îÒî#î&1î(äî*Òî0²ï4yf êq?€`½¸é HELVETICA é HELVETICA é HELVETICA é HELVETICA é HELVETICA XLOGO é HELVETICA ~GACHA < n ” ¶(m/ s8=j/@>ÿÿž|oPÿÿÿÿÿÿ3{ERIS}INTERMEZZO>LIBRARY>IMAGEOBJECTS.PRESS;1JAMES 4-Apr-85 14:36:38