1XEROXLispLibraryPackagesGRAPHERTheGrapherlibrarypackagecontainsacollectionoffunctionsandaninterfaceforlayingout,displaying,andeditinggraphs(i.e.,networksofnodesandlinks).Graphshavenodelabelsbutnotlinklabels.Linksaredrawnbydefaultasstraightlineswithoutarrowheads,butyoucancontroltheappearanceofindividuallinks.Nodelabelscanbesinglelinesoftext,bitmapsofarbitrarysize,orimageobjects.Facilitiesexistforhavingactionstriggeredbyselectingnodesingraphs,andimageobjectscontaininggraphscanbeconstructed,souserscanincludegraphsindocumentsandotherimagestructures.AtypicalwaytouseGrapheristoimplementafunctionthatcreatesapartiallyspecifiedgraphthatrepresentssomeuserdata(orcontrol)structure.Forinstance,theBrowserLispLibrarypackageusesgraphstorepresentfunction-callingstructures(fromMasterscope).Suchapartiallyspecifiedgraphneedhaveonlythegraphlabelsandthelinksspecified.ItisgiventotheLAYOUTGRAPHfunctionalongwithsomeformattinginformation.LAYOUTGRAPHassignsapositiontoeachnode.Thereareformatsforlayingouttrees,lattices,andcyclicgraphs.LAYOUTGRAPHreturnsaGRAPHrecord,whichisusuallygiventothefunctionSHOWGRAPH.SHOWGRAPHdisplaysagraphinawindow.Displayedgraphsareoftenusedasmenus:selectinganodewiththeleftormiddlebuttoncancauseuser-providedfunctionstobecalledonthatnode.Displayedgraphscanbeeditedusingtherightbutton.Nodescanbeadded,deleted,moved,enlarged,orshrunk.Linkscanbeaddedordeleted.DATASTRUCTURESTheGRAPHRecordAgraphisrepresentedbyaGRAPHrecord,whichhasthefollowingfields:GRAPHNODES,DIRECTEDFLG,SIDESFLG,GRAPH.MOVENODEFN,GRAPH.ADDNODEFN,GRAPH.DELETENODEFN,GRAPH.ADDLINKFN,GRAPH.DELETELINKFN,andGRAPH.FONTCHANGEFN.GRAPHNODESisalistofgraphnodes,whicharedescribedbelow.DIRECTEDFLGandSIDESFLGareflagsthatcontrolhowlinksaredrawnbetweenthenodes.IfDIRECTEDFLGisNIL,Grapherdrawseachlinkinsuchawaythatitdoesnotcrossthenodelabelsofthenodesitrunsbetween.Often,thisleavessomeambiguity,whichissettledbySIDESFLG.If êq?€`½ îïp`¬ÿ êq?€`½îïî êïg_p`¬î+oï5q`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî<¼î<¼ïf‡q`Xïf‡ îD5îJjïf‡s`#ïf‡îJjïf‡î “ïe«î “ïeˆþ>×GîJjïe«îJjîJjïe«î—ï_xî—ï_2þû�î6’ï_xî6’î6’ï_xî6’î6’ï_xî—ï^Ýî—ï^Ìþû#î6’ï^Ýî6’î6’ï^Ýî&Uï[ût`iî.Ôï[ûî—ïZYs`#î—ïZHþû#î6’ïZYî6’î6’ïZYî6’î6’ïZYî6’î6’ïZYî—ïY¾î—ïYxþû�î6’ïY¾î6’î6’ïY¾î “ïVÕq`Xî¡î¡ïVÕuïVÕîèïVÕqïVÕî„îî)î%7î&˜ î-kî/Eî5Ìî8Ïî;îA8îC–îGøîJÁîJÁïVÕî “ïT¢ îÊî•îMîî"<î(jî* î.Wî1"î5Kî5¯î:Àî>/îAÊîEéîH[îJÂîJÂïT¢î “ïRoî+î¥îîÄî/îî^î$î%ëî+î.iî3s î;´î>!î@ÐîCˆîHfîJÁîJÁïRoî “ïP< îŒî- îªî[î¿î#†î'¥î*dî,^î0ˆî3âî5„î8£î:�î>pî@îEÒîIîJÁîJÁïP<î “ïN îýîŽîî« î×î Yî çî#8î#Æî(•î-Äî4î6,î!î?GîD«îJÁîJÁïAcî “ï?0îËîsîúî!î î Øî%î'óî*rî-Ù î4uî4ñî6>î7Âî;­î=gî?æ îJÁîJÁï?0î “ï<ýî+îîîß î"À î*¿î+ î5üî;(îî%Cî'î)°î/€ î9šî:0îCèîI¤îJÁîJÁï8—î “ï6dîÑî|îÃî‚îî¿î$­î'=î+î.™î0�î5µî;õî=<î@öîDîF›îIîJÁîJÁï6dî “ï41î=îÆî‹îÅ î%î+]î-î/î3@î5Mî8'î<+î<–îC8îHîJÁîJÁï41î “ï1þî �îæîÈî1îƒî iî Ðî%Iî( î*î.Íî4Kî9Tî?ºîAvîFŸîGîJÁîJÁï1þî “ï/ËîFî4î‰î6îNï/Ëî “ï,vî îëï,î “ï(.î“îîCï(.qï(.îCï(.î “ï$Tî JîËî˜ î îPîÚî%‚î*Ýî/jî2uî5=î;Ãî@M îJÁîJÁï$Tî “ï"! îðî'cî<îJÂîJÂï"!î “ïîî!î3RîHîJÁîJÁïîî “ï»î¢ï»î “ïá î¥îî"îGîÝîñî$“î(²î+î1¾î5çïáî “ï îÉîµî î"•î&&î)î."î1Rî4Ãî7Wî;ÏîA»îDDîIîI™îJÁîJÁïî “ïÔ î£î îÿîÿïÔuïÔîFïÔqïÔî¦î#Ùî'Zî)õî+î.÷î0î2úî5Ëî6ðî:hî<Øî@²îCîF®îJÁîJÁïÔî “ï¡î =î«îÿî0îrî¦îî#bî&î*‡î.b î5^î9�î;î?­îAšîI.îI™îJÁîJÁï¡b êq?€`½B2XEROXLispLibraryPackagesSIDESFLGisNIL,Grapherpreferstodrawlinksthatgobetweenthetopandbottomedgesofnodes.IfSIDESFLGisnon-NIL,Grapherpreferstodrawlinksbetweenthesidesofthenodes.IfDIRECTEDFLGisnon-NIL,theedgesarefixed(e.g.,alwaystotheleftedgeoftheTonode).Thiscancauselinkstocrossthelabelsofthenodestheyrunbetween.Inthiscase,ifSIDESFLGisNIL,theFromendofthelinkisattachedtothebottomedgeoftheFromnode;theToendofthelinkisattachedtothetopedgeoftheTonode.IfDIRECTEDFLGisnon-NILandSIDESFLGisnon-NIL,theFromendofthelinkisattachedtotherightedgeoftheFromnode;theToendofthelinkisattachedtotheleftedgeoftheTonode.Theremainingfieldsgiveyouhooksintothegrapheditor,whichisdescribedbelow.TheGRAPHNODERecordTheGRAPHNODErecordhasthefollowingfieldsofinterest:NODELABEListhethingthatgetsdisplayedasthenode.Ifthisisabitmap,BITBLTisused;ifitisanimageobject,itsImageBoxFnandDisplayFnareused.AnythingelseisprintedwithPRIN3.NODEIDisauniqueidentifier.NODEIDsareusedinthelinkfieldsinsteadofpointerstothenodesthemselves,sothatcircularLispstructurescanbeavoided.NODEIDsareoftenusedaspointerstothestructurerepresentedbythegraph.TONODESisalistofNODEIDs:alinkrunsfromthisnodetoeachnodeinTONODES.Entriesinthisfieldcanbeusedtospecifypropertiesofthelinesdrawnbetweennodes,asdescribedbelow.FROMNODESisalistofNODEIDs:alinkrunstothisnodefromeachnodeinFROMNODES.NODEPOSITIONisthelocationofthecenterofthenode(aPOSITION).NODEFONTspecifiesthefontinwhichthisnode'slabelisdisplayed.ItcanbeanyfontspecificationacceptabletoFONTCREATE,includingaFONTDESCRIPTOR.NODEFONTischangedbythegrapheditoperationsLargerandSmaller.Whenthishappens,thefontfamilymaybechangedaswellasthesize.DefaultisthevalueofDEFAULT.GRAPH.NODEFONT(initiallyNIL).NODEBORDERspecifiestheshadeandwidthoftheborderaroundanodeviathefollowingvalues:NIL,0Noborder(equalsborderofwidthzero)TBlackborder,onepixelwide,asbeforeîJÁï¡î êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî<¼î<¼ïf‡q`Xïf‡ îD5îJjïf‡s`#ïf‡îJjïf‡î “ïe«î “ïeˆþ>×GîJjïe«îJjîJjïe«î “ï^Ñq`XîøîžîÎîÎï^Ñuï^Ñîï^Ñqï^Ñî³î"Òî$®î(nî+÷î/î1Fî7Jî9ëî<™î?žîD²îI,îJÂîJÂï^Ñî “ï\žî5î�îµîÓî3î î ï\žuï\žî%Pï\žqï\žî%¨î*€î,î/�î2Óî8‘î:ìî>’î@(îBƒîFÍï\žî “ïXÄî Ä îÕî>îî �î$¾î'.î*¤î.:î2åî4„î6èî9Aî<Îî>mî@ÑîBßîGSîG´îJÁîJÁïXÄî “ïV‘îNî~îÉîgîAî¤î!¿î#]î%Àî*î-î/¡î5Éî6)î7½î:cî>$î?IîFoîG×îJÁîJÁïV‘î “ïT^îî¿î”î?î¯îWîÌî"Éî$tî&åî+Èî/aî1 î3|î78î;@î=°î?ÊîBžîDIîF¹îIaîJÁîJÁïT^î “ïR+îšîOîÊîPîóî¨î #î"Gî&Xî&Ðî( î2>î3½î9Qî]îWîÆî1îÐî§î!Áî(5î*î,|î0}î1´î4bî5Ñî6ýî8úî<‚îAºîC)îG îH5îIaîJÁîJÁï>]î “ï<*î �îµî`îÕï<*uï<*î- î ‹î ‹ï<*qï<*î"òï<*uï<*î#Jî)‚ï<*qï<*î)Úî,@î0î0iî6lî9Vî:¶î?�îB…îGEîGEï<*î “ï8PîJî¸îäî¬ îînî%Õî(Jî+Èî-Xî/Âî2dî6.î;6î<ÛîBsîDîF�îJÁîJÁï8Pî “ï6 îqîOîîQî Y î'$î)Üî+Ïî1”î1ñî8Nî:¹î>XîAÌîCžîI,îJÂîJÂï6î “ï3êî îî îîáî <î$Zï3êî “ï0îÓîUî”îÜî”î pî!¯î$eî'µî+î-Úî1�î3Eî6ßî:‘î<5îC×îDQîI@îJÁîJÁï0î “ï-Ýî1î<îïîÝîLîâîº î&Œî("î*}î-Ëî2î7ÔîCîDéîIï-Ýî “ï*îËî+îHîmîî!½î"Úî%mî(›î*1î,Ïî0_î3¢î7î:ªî<+ îEmï*î “ï&) îlîÌî'î™î!/î#Šî'óî)‰î+äî/tî1 î8uï&)î “ï"Oîî�îjî ¿î"Àî'`î*~î/¡î3…î5e î<­î=…î?.îBaîDÐîGîîJÂîJÂï"Oî “ï  î™ îŒî¸ î)Vî0&î1Ùî?Ùî@ÇîIaîJÁîJÁï î “ïéî�îuîÞîî î#ðî(Šî+Xî0îî1Tî5lî8î>_î@ÈîC«îGÌîJÂîJÂïéî “ï¶î �îlî9îîÛî6îmîÅî$¦î&î(aî,î-²îA¬ îFèîIóï¶î “ïÜ î»îîîcî"—î%Vî)î*³î-î1¦î6‹î7¨î;8î=]î?¸îEÑîJFïÜî “ïîî¤î<î!Aî%Ùî'oî+6î.yïî “ï(îîeî_î!î$vî(&î)óî.ï(ÿ) êq?€`½;3XEROXLispLibraryPackages1,2,3...Blackborderofthegivenwidth-1,-2...Whiteborderofthegivenwidth(WS)WhereWisanintegerandSisatextureorashade;yieldsaborderWpixelswidefilledwiththegivenshadeSDefaultisthevalueofDEFAULT.GRAPH.NODEBORDER(initiallyNIL).NODELABELSHADEcontainsthebackgroundshadeofthenode.Ifthisfieldisnon-NIL,thenwhenanodeisdisplayed,thelabelareaforthenodeisfirstpaintedasspecifiedbythisfield,thenthelabelisprintedinINVERTmode.Thisdoesnotapplytolabelsthatarebitmapsorimageobjects.Thelegalvaluesforthefieldare:NIL(sameasWHITESHADE),T(sameasBLACKSHADE),atexture,orabitmap.DefaultisthevalueofDEFAULT.GRAPH.NODELABELSHADE(initiallyNIL).NODEWIDTHandNODEHEIGHTarenormallysetbyGraphertobethewidthandheightofthenode'sNODELABEL.However,ifyouprovideintegersforthesefields,theirvaluesareusedinstead.Thisfeaturecanbeusedtogiveanodealarger-than-normal"margin"arounditslabel.EntriesintheTONODESfieldcanbeusedtospecifytheappearanceofthelinesdrawnbetweennodes.IfanitemintheTONODESofanodeN1isnotaNODEIDbutratheralistoftheform:(Link%ParametersToNodeID.ParamList)thenParamListisinterpretedasapropertylistspecifyingpropertiesofthelinkdrawnfromN1toToNodeID.PropertiesofParamListcurrentlynoticedareLINEWIDTH,DASHING,COLOR,andDRAWLINKFN.ThefirstthreearepasseddirectlytoDRAWLINE.Forexample,iftheTONODESforAis:((Link%ParametersBLINEWIDTH4DASHING(33))(Link%ParametersCDASHING(51)COLOR12))thentwodashedlineswillemanatefromA,withtheonetoBhavingwidth4anddashing(33),andtheonetoChavingthedefaultwidth1,dashing(51),andcolor(ifimplemented)12.IfthepropertyDRAWLINKFNisonthelist,thenitsvaluemustbeafunctiontobecalledinsteadofDRAWLINE.ItispassedalltheargumentsofDRAWLINEplustheParamListasalastargument.î.ï(î êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî<¼î<¼ïf‡q`Xïf‡ îD5îJjïf‡s`#ïf‡îJjïf‡î “ïe«î “ïeˆþ>×GîJjïe«îJjîJjïe«î “ï^Ñq`Xî`îîîeîýî“î!îî%µî)$ï^Ñî “ïZ÷î+îåîî|îîªî"î%Ìî);ïZ÷î “ïWî ïWuïWî ¢îˆïWqïWîîîïWuïWîVïWqïWîÆî?îEî$*î'î'ïWuïWî'çïWqïWî(Xî)Ðî+î/èî1®î2ãî7‘î;§î<ÝîA�îA�ïWuïWîBËïWqïWîC;îG[îJ©îJ©ïWîïTêîâîØî3î!úî&.î&.ïTêuïTêî'ïTêqïTêî'ïTêî “ïQîtîÔî/îêî€î/� î4Ùî7äïQî “ïM6 îîÎî!, î)5î-mî/î1dî5Yî5´î6àî9�î<�î=òîCËîFúîJÁîJÁïM6î “ïKî ×îŽî îî…îî"aî$¢î'%î*Üî,cî/Hî4‰î6}î<ºî>ºîAîEîHfîJÁîJÁïKî “ïHÐî î‚îqîîyî Ùî!Gî$jî'ïî*lî.Iî/õî4î6üî9xî;|î?YîAîEfîJÁîKîKïHÐî “ïF�î«î\îî}î&îî"•î%lî)îî, î6«î8-î<¯î>Ê îI¤îJÁîJÁïF�î “ïDjîÀîmîŠîxîñîIî*îŠî!åî% î'6î@– îEÒîHÝïDjî “ï@�îšî— î!Nî#òî)ûî,sî.Šî.Šï@�uï@�î4fî4fï@�qï@�î6:î8fî:ÿî?îBîF“îHfîJÁîJÁï@�î “ï>]î� îî´î![î"Óî%×î+Nî1%î3šî7Äî<<î?ÍîD“îGSîJÂîJÂï>]î “ï<*îîîFîSî)îÜîÊî!9î"Ïî%Åî&âî*rî+�î7Ôî>"îCîDÔîHAï<*î “ï8Pî…î+î«îîîî!öî$ î'�î)Xî.Uî0Õ î8çî:¢î="î@•îEîJÂîJÂï8Pî “ï6î5î�îµî£î®î/îŠî!¨î#>î$[î'ëî*î+dî-Ëî.èî4�î6÷î;î<<î>aî?÷îBRîEŸï6î “ï2Cî ï2Cuï2CîB îãîŸîZî%¾ï2Cqï2Cî&�î&�ï2Cî “ï.iîæîæï.iuï.iîJï.iqï.iîÉîO îÊî ¾î"î'Ýî*( î1! î8î9Öîî@ä îJÁîKîKï(\î “ï&)î]îî¿î%î î! î"£î*§î*ÿî-}î3’î4¯î7 î>(î@BîAŒîBöï&)î “ï"Oî …ï"Ouï"Oî» îï"Oqï"Oî\î¦î!•î"²î)Lî*âî,™ï"Oî “ïuî ïuuïuîB î‹ïuqïuîãî7îÑî!gî"ýî(Dî*Àïuî “ï›îÌîwî‰îäîZî":î%Šî'Cî*Fî,®î/zî1î2uî7î:îî<î>äîDZîEýîHîJÁîJÁï›î “ïhî îî­îCî—î/îŠî@î#î$†î)ïî+…î-}î0<î3×î5m î>oî@[ïhî “ïŽî Ìî8îþ îŠîûî"î$rî' î*Gî,%î/ñî3qî5pî6žîÝîAoîH@îH@ï[ˆ êq?€`½:4XEROXLispLibraryPackagesForconvenience,thevariableLINKPARAMSissettothe(constant)valueLink%Parameters.WhenDISPLAYGRAPHscalesthegraphtotheunitsofaparticularoutputstream,thepropertieswhosenamesarefoundontheSPECVARScalableLinkParametersarealsoscaled.GraphnodescanbecreatedbytheCREATEoperatorfromtherecordpackageorwiththefollowingfunction:(NODECREATEIDLabelPositionToNodeIDsFromNodeIDsFontBorderLabelShade)[Function]ThisfunctionreturnsaGRAPHNODEwithNODEID=ID,NODELABEL=Label,NODEPOSITION=Position,NODEFONT=Font,NODEBORDER=Border,andNODELABELSHADE=LabelShade.THELAYOUTFUNCTIONS(LAYOUTGRAPHNodeLstRootIDsFormatFontMotherDPersonalDFamilyD)[Function]LAYOUTGRAPH"laysout"apartiallyspecifiedgraphbyassigningpositionstoitsgraphnodes.ItreturnsaGRAPHrecordsuitablefordisplayingwithSHOWGRAPH.TheinputNodeLstisalistofGRAPHNODESthatpartiallyspecifiesagraph:onlytheirNODEID,NODELABEL,andTONODESfieldsneedtobefilledin.Optionalfieldsare:NODEFONT,NODEWIDTH,andNODEHEIGHT.TheseoptionalfieldsarefilledinappropriatelyiftheyareNIL.Allotherfieldsareignoredand/oroverwritten.RootIDsisalistofthenodeidentifiersofthenodesthatbecometheroots.Theotherargumentsareoptionalandcontroltheformatofthelayout.Formatcontrolsthegeometryofthelayout.Itisanunorderedlistofatoms.Therearefourbasicformats.COMPACTisthedefaultformat.Thegraphislaidoutasaforest(asetoftrees)insuchawaythattheminimalamountofscreenspaceisused.IntheFASTformat,thegraphislaidoutasaforest,sacrificingscreenspaceforspeed.IntheLATTICEformat,thegraphislaidoutasanacyclicdirectedgraph(alattice).IntheREVERSE/DAUGHTERSformat,thegraphislaidoutwiththeTonodesinreverseorder.Thesebasicformatscomeintwoflavors:HORIZONTAL[thedefault]hasrootsatleftandlinksrunleft-to-right.îH@ï[î êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî<¼î<¼ïf‡q`Xïf‡ îD5îJjïf‡s`#ïf‡îJjïf‡î “ïe«î “ïeˆþ>×GîJjïe«îJjîJjïe«î “ï^Ñq`Xî îôîQî® î'ÿî)aî+�î-5î/’ î6eî:"î:"ï^Ñuï^Ñî>Z îE£ï^Ñqï^ÑîF_îF¸îJÁîJÁï^Ñî “ï\ž îÌîHîÁî!òî#¦î&î)«î+^î,™ î3$î7¸î<ãî?\ îFKîJÂîJÂï\žî “ïZkîî…îŽîˆîãî!½î!½ïZkuïZkî16ïZkqïZkî1Žî3ôî6êî;tïZkî “ïV‘îNîôî î`îóî"2î$òî+Aî1qî5î7Úî<ËîBùîE îHfîJÁîJÁïV‘î “ïT^î¬îIïT^î “ïP„ î�ïP„uïP„îçîžîzî îî(Z î1rî4žî9W î@íïP„qïP„îCÙ îJjïP„î “ïLªî“îîñî"î-!î2 î8ºïLªuïLªî:ïLªqïLªî<ÆîE#ïLªuïLªîJïLªqïLªîJÁîKîKïLªî “ïJw îtïJwuïJwî�ïJwqïJwî!åî)’ïJwuïJwî-ÆïJwqïJwî3 î<ìïJwuïJwîB­ïJwqïJwîHîJÁîJÁïJwî “ïHDîïHDuïHD î!œïHDqïHDî!þïHDî “ïDjvî±îî§ïDjqïDjî§ïDjî “ï@� îçîçï@�uï@�î�î!øî&Ðî)üî/Ñî6¹î;Óï@�qï@�îCÙ îJjï@�î “ï<¶ î…î6îzî®î$!î*Oî.zî0jî6óî=#î>Ðî@µîDàîI™îJÁîJÁï<¶î “ï:ƒî”îÎî&îÏî!=î#t î*Zî-l î7eî7Úî:Áî>nî>nï:ƒuï:ƒîC¿ï:ƒqï:ƒîD4îE±îFëîI,îJÂîJÂï:ƒî “ï8P îØîÔîdî$�î%Þî*‡î-½î1(î7f î@±îC£îJÁîJÁï8Pî “ï6î—îeîDî|î(îUî÷î$î(î+î3Çî4h î=Þî@æ îJÁîKîKï6î “ï3êîïî‹îdîèîiî! î)æî+!î.Iî0Íî3Õî4Kî6cî:1î> î@ŽîEèîJÁîJÁï3êî “ï1· î|îåîåï1·uï1·îõï1·qï1·î^îÏîýî3îÚî"Fî%è î,“î.:î0¦î4÷î7Ðî=Sî?¿îCÍîD6îGîJÁîJÁï1·î “ï/„î²îî–îUî".î$‰î(þî*”î,ïî1…î1Ýî1Ýï/„î “ï+ªuîï+ªqï+ªî†î+î¡î î ¼î#2î'äî(Wî)šî+î-î4:î6zî8+î<Ýî=PîAîDîGîJÁîJÁï+ªî “ï)wîÂï)wî “ï%�îÜî<î¤îîÆî ¦î!î#Øî'õî)]î,î.sî0Hî1nî5rî7î9Sî:ñî>öî@îC÷îEîGùîJÁîJÁï%�î “ï#jî îî6î\îòîžî"Æî$&î'Ÿï#jî “ï�î îzîWî.î‰î�îýî"›î%î&Ïî'ìî,J î3<î7èî<î>*îBhï�î “ï¶î îzî’îiîÄî Øî"8î$Öî'=î) î*øî/Äî5Vî9jî;î?´ï¶î “ïÜî îzîªî$�î&Üî*ðî,Pî.îî1Uî4Kî6¦î8«î<ëî>lîC{îGLïÜî “ïîÒî�î²îŽîî ­î%Nïî “ï( îíîEîîHî î >î#Ùî%cî'²î*qî-´î02 î7¦ï(š êq?€`½æ5XEROXLispLibraryPackagesVERTICALhasrootsatthetopandlinksruntop-to-bottom.ThedirectionscanbereversedbyincludingtheatomREVERSEinFormat.Thus,forexample,Format=(LATTICEHORIZONTALREVERSE)laysouthorizontallatticesthathavetherootsontheright,withthelinksrunningright-to-left.Format=(VERTICALREVERSE)laysoutverticaltreesthathavetherootsatthebottom,withlinksrunningbottom-to-top.Format=NILlaysouthorizontaltreesthathavetherootsontheleft.LAYOUTGRAPHcreates"virtual"graphnodestoavoiddrawingatangleofmessylinesincaseswherethegraphisnotaforestoralatticetobeginwith.ItmodifiesthenodesofNODELST,whichmayinvolvechangingsomeoftheTONODESfieldstopointtonewnodes.ThemodifiedNODELSTissetintotheGRAPHNODESfieldofanewlycreatedGRAPHrecord,whichisreturnedasthevalueofLAYOUTGRAPH.ThecreationofvirtualnodesdependsonwhetherLATTICEisamemberofFORMAT.Theforest(i.e.,non-LATTICE)casewillbedescribedfirst.Nodesarelaidoutbytraversingtheforesttop-down,depth-first.Wheneveranalreadylaid-outnodeisfound,insteadofdrawingalinktoitthatmightcutacrossarbitrarypartsofthegraph,LAYOUTGRAPHcreatesacopyofthenode(sameNODELABEL,differentNODEID,noTONODES),laysitdown,and"marks"bothitandtheoriginalnode(bysettingtheirNODEBORDERfieldsandNODELABELSHADEfields).Hence,amarkednodeoccursatleasttwiceintheforest.Thedefaultistoleavetheshadealoneandsetthebordertoone,buttheappearanceofmarkednodescanbecontrolledbyadding(MARK....)totheFORMATargument.Thetailof(MARK....)isapropertylist.IfitisNIL,markingissuppressedaltogether.IfitcontainsBORDERorLABELSHADEproperties,thosevaluesareusedinthecorrespondingfieldsofmarkednodes.Formataddsafewtwiststothisbasicmarkingstrategy.Itcanincludeoneorbothoftheseatoms:COPIES/ONLYœOnlythenew"virtual"nodesaremarked.Theoriginalisleftunmarked.NOT/LEAVESœMarkingissuppressedwhenthenodehasnodaughters.Forexample,Format=(COPIES/ONLYNOT/LEAVES)marksnodesthatarecopiesofnodesthathavedaughters(i.e.,ifyouseeamark,thenodehasdaughtersthataren'tdrawn).Format=(NOT/LEAVES)marksbothcopiesandoriginals,butonlywhentheyhavenodaughters.Format=NILmarksoriginalsandcopiesregardlessofprogeny.IfFormatincludesLATTICE,thenanodethatisthedaughterofmorethanonenodeisnotmarked.Instead,linksfromallitsparentsaredrawntoit.Noattemptismadetoavoiddrawinglinesthroughnodesortominimizelinecrossings.However,inHORIZONTALformat,nodesarepositionedsothat"From"isalwaysleftof"To."Similarconventionsholdfortheotherformats.InVERTICALî7¦ï(î êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî<¼î<¼ïf‡q`Xïf‡ îD5îJjïf‡s`#ïf‡îJjïf‡î “ïe«î “ïeˆþ>×GîJjïe«îJjîJjïe«î “ï^Ñq`Xî±îOî§îBîÌî'îŽî"Mî%�î( î1}î1}ï^Ñî “ïZ÷î– îtî`î‡î  î"±î)$î+¸î/uî6|î85î85ïZ÷uïZ÷î<µïZ÷qïZ÷î=¨î>9îBZîD¬îJÁîKîKïZ÷î “ïXÄuîïXÄqïXÄî î!‚î(Ûî+Âî.; î4ÿî9òî<Ìî@AîB®îF[îHgîJÂîJÂïXÄî “ïV‘î=î9îšîãî2 î%î%aî%aïV‘uïV‘î)áïV‘qïV‘ î2Þî:+î=î?sîDqîGùîJÁîJÁïV‘î “ïT^î/îÃî—î[îïîXî"ˆî&î+† î5.î5Àî5ÀïT^uïT^î:@ïT^qïT^î>aîAoîD îJÁîJÁïT^î “ïR+îîÞîAîœî7î1îŒî"=î"•î"íî#Eî#�î#�ïR+î “ïNQ î–îËî!¼î%øî*`î,î0 î5©î6îî;_î=îA›îEîFºîJÁîJÁïNQî “ïLîßîHîiîÖîKîuîî!9î"dî&¢î(Fî,;î/ î0î1;î6þî9fî=´î?WîF¢îJÁîKîKïLî “ïIëî�îeîºî‡î#î!„î(¨î,iî.î1œî38î64î:Üî;:î> îCæîJÂîJÂïIëî “ïG¸î õî1îóîP îeî!rî# î$*î(+î-[î2™î7‰î;«î= îBÚîD©îGîJÁîJÁïG¸î “ïE…î U î¾îAî7î!õî#·î("î,Žî2�î4µî:^î@¢îB.îCwîI+îJÁîJÁïE…î “ïCRî$î|îFîBîV î%Óî)*î+’î-€î4&î6îïCRî “ï?xî:îÛîµîXîm î!Zî#ñî((î/! î6›î7/î>2î@\îE›îJÁîJÁï?xî “ï=Eî^îøîžîÒî£î"Qî#©î&wî(Hî)Ÿî,¢î0Åî3[î8,î>îAåîC¶îFKîJÁîJÁï=Eî “ï; îuîˆî«î î!½î$î'´î+î î5 î:¹î@ÉîBÉîJÂîJÂï;î “ï8ßîƒîºî îâî»î î!Dî$î&“î+Éî/sî1ßî6›î9ì îD.îHîJÂîJÂï8ßî “ï6¬ î î°îî"úî$%î)Mî,ëî1±î3Iî6®î:kî;úî>cîBÏîC5îF îJÂîJÂï6¬î “ï4yî îªîiîÕîîîÖî"!î$Œî)5î*Ûî. î0…î2ð î:îî<•îA¿îFîHÓîJÁîJÁï4yî “ï2F îhîPîîÿîÈî�î Xî!šî#>î%¨î+åî2Äî3+î6î8Kî9ðî>Øî?¡î@iîA1îBsîCáîE îJÁîJÁï2Fî “ï0î~î9îÄîDîîTî5îø î' î.«î/fî0ñî2qî8žî?8îAH îJÂîJÂï0î “ï-à î×îÃî>î´î!3î"Äî%/ î.èî2³î4Yî9ƒî>5î>�î>�ï-àuï-àîC…îC…ï-àqï-àîGîH0îJÂîJÂï-àî “ï+­î…îî¹îtîòî"Åî#î$Eî&øî+ýî.¼î0iî3¡î57î9î=Eï+­î “ï'Ó îNï'Óuï'Óî¦î¦ï'Óqï'Óî^î¢îýîóî%¼î)üî,bî1Þî26î5î:î;|î=ËîD‘ï'Óî “ï#ù îöî®î,îŒ î%Fî) î+hî.øî1–î3� î:aï#ùî “ï î!îGîGï uï îÇï qï î0îø î%• î/�î3Æî8î:ïî=fîBîC©îGùîJÁîJÁï î “ïìî8îAî˜î÷îäî ¸î"î&@î(Ýî,°î/�î6™î9¤î=ìîCUîCïîCïïìuïìîHoïìqïìîI îJÁîJÁïìî “ï¹ îíî&îcî!ôî$¸ î*ëî-Wî0^î4*î7:î:¢î<¡ îCÏîCÏï¹uï¹îD,îH¬ï¹qï¹îI îJÁîJÁï¹î “ï†îîOîîÚîf î&oî(î-¤ï†î “ï¬î Äî Äï¬uï¬îDï¬qï¬î¤îbîåî!î"?î%Øî(©î*î,uî2•î44î7Øî; î=ÔîAmîBÖîEEîJÁîKîKï¬î “ïyîþîFîŽîaî3î ]î"Éî'î(´î*9î*–î,Àî1éî3Nî7/î8Ëî<—îBîEcîJÁîJÁïyî “ïFîþî×î™î¼î† î#�î$î*Œî,8 î5¾î:Áî?,îA¾ îHèîJÁîJÁïFî “ïî~îÓîWîî�îJî"^î"Úî'¶ î/öî3=î5zî7ùî;ÍîAxîAôîC£îJÁîJÁï @ êq?€`½T6XEROXLispLibraryPackagesformat,forinstance,theTONODESofanodearepositionedbeneathit,andtheFROMNODESarepositionedaboveit.Cyclicgraphscannotbedrawnusingthisconvention,ofcourse(howcananodebeleftofitself?).WhenLAYOUTGRAPHdetectsanodethatpointstoitself,directlyorindirectly,itcreatesa"virtual"node,asdescribedabove,andmarksboththeoriginalandthecopy.IfFormatincludesCOPIES/ONLY,thenonlythenewlycreatednodeismarked.ThisendsthediscussionoftheFormatargumenttoLAYOUTGRAPH.Theotherargumentsarenotsocomplicated.FontisafontspecificationforuseasthedefaultNODEFONT.Theremainingthreeargumentscontrolthedistancesbetweennodes.NILscause"pretty"defaultsbasedonthesizeofFont.PersonalDcontrolstheminimumdistancebetweenanytwonodes.MotherDistheminimumdistancebetweenamotherandherdaughters.FamilyDcontrolstheminimumdistancebetweennodesfromdifferentnuclearfamilies.TheclosesttwosisternodescanbeisPersonalD.TheclosestthattwonodesthatarenotsisterscanbeisPersonalD+FamilyD.LAYOUTGRAPHreadsbutdoesnotchangethefieldsNODEBORDERandNODELABELSHADEofthenodesgivenit(exceptforthemarkednodes,ofcourse).Thus,ifyouplantoinstallblackbordersaroundthenodesafterthenodeshavebeenlaidout(e.g.,byRESET/NODE/BORDER,describedbelow),itisagoodideatogiveLAYOUTGRAPHnodesthathavewhiteborders.Thiscausesthenodestobelaidoutfarenoughapartthatwhenyoublackentheborderslater,thelabelsofadjacentnodesarenotoverwritten.THEDISPLAYFUNCTIONS(SHOWGRAPHGraphWLeftButtonFnMiddleButtonFnTopJustifyFlgAllowedITFlgCopyButtonEventFn)[Function]SHOWGRAPHdisplaysthenodesintheGraph.IfWisawindow,thegraphisdisplayedinit.Ifthegraphislargerthanthewindow,thewindowismadeascrollingwindow.IfWisNIL,thegraphisdisplayedinawindowlargeenoughtoholdit.IfWisastring,thegraphisdisplayedinawindowlargeenoughtoholdit,andthewindowusesthestringforthewindowtitle.SHOWGRAPHcachessomeinformationintheGRAPHNODEfieldstomakescrollingfaster.ThegraphisstoredontheGRAPHpropertyofthewindow.SHOWGRAPHreturnsthewindow.IfeitherLeftButtonFnorMiddleButtonFnisnon-NIL,thewindowisgivenaButtonEventFnthat,ineffect,turnsthegraphintoamenu.Whenevertheleftormiddlebuttonisdepressedandthecursorisoveranode,thatnodeisdisplayedinverted,indicatingthatitisselected.LettingupontheîJÁïî êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî<¼î<¼ïf‡q`Xïf‡ îD5îJjïf‡s`#ïf‡îJjïf‡î “ïe«î “ïeˆþ>×GîJjïe«îJjîJjïe«î “ï^Ñq`Xîî®îãîTî"‡î$2î%dî) î+… î2™î85î9Êî<žî?îH[îJÁîJÁï^Ñî “ï\ž î·îî´î1î”î"}î'dî)wî-çî1ßî4¢ î<•î>PîC-îFÍîI¥îJÂîJÂï\žî “ïZkîtî²îQî7î]îî _ î+Šî0Üî2Iî6*î9Bî=Òî?¸îCÁîIîJÂîJÂïZkî “ïX8 î#î@îNîkî5î#'î$õî+›î02î2ñî7&î:^î<ºîAÖîD–îFñîJÂîKîKïX8î “ïVî »î »ïVuïVî;ïVqïVî“îH î!½î$éî'ëî*Fî.Dî3rî7î8bî=†ïVî “ïR+î§îî€ î¨îEîHïR+uïR+î¨î$(ïR+qïR+î$‡î*ýî,› î7ßî8>î;î>ÇîEíîHZîJÁîJÁïR+î “ïOøî l î›ïOøî “ïLuîgïLqïLî¿îî<î î�î›î!9î#î%aî*î2&ïLî “ïHDîbîîÄîèî$Çî'(î-›î3_î8î8dî;¢î?ÐîE[îJÁîJÁïHDî “ïFîîCîÞîôîËîËïFuïFîŸïFqïFî™î2î2ïFuïFî$ÂïFqïFî%Zî+$î-Àî4%î:$î@#îCîEàîJÂîJÂïFuïFîKîKïFî “ïCÞîïCÞqïCÞî±îZîþîlî"sî(zî)áî/î2 î4Æ î<8î<Ùî<ÙïCÞuïCÞîB”îB”ïCÞqïCÞîHfîJÁîJÁïCÞî “ïA«îÅî‘î]î!«î$üî*±î/ãî5ƒî8[î=Aî?íîCÁîHîJÁîJÁïA«î “ï?xî �îáîáï?xuï?xîqï?xqï?xî+îƒîMî%î íî#‹î'Ëî*“î,ùî/`î3Öî6‰î8wî9×î9×ï?xuï?xîFáï?xqï?xîGCï?xî “ï;ž î‡îˆîî �î#î(Dî*¹î.� î8Ïî;§ îI+îJÁîJÁï;žî “ï9kî1î³î½îîxîÔî"rî'Ïî,´î.Œî4bî4ýî9(î:‡î=tî@ÎîB§îFüîJÁîJÁï9kî “ï78îî&îµî(î ›î#*î'�î+4î.ëî1¼î4Wî8î:#îJÁîJÁï78î “ï5îeîŠîÒî]î¥îlî"¢î$cî'… î2‹î6öî9éî=wîA]îG2îGµîJÂîJÂï5î “ï2ÒîlîÉî î¢î’î1îšî!ªî&Ýî*ƒî-Lî1î3Áî9î;zî@ÃîDRîF®îJÁîJÁï2Òî “ï0Ÿî )îüî<î¢î î#‰ï0Ÿî “ï,Åvî±î„îï,Åqï,Åîï,Åî “ï(ë îXîXï(ëuï(ëî�î ê î+Y î7™ îBB îJÁîJÁï(ëî “ï&¸îEï&¸qï&¸îCÙ îJjï&¸î “ï"Þîî©îî!bî"òî%\î%\ï"Þuï"Þî)Zï"Þqï"Þî*"î+Yî+Yï"Þuï"Þî,—ï"Þqï"Þî,þî.mî/˜î5<î7¦î;Éî=8îC«îE;îFÉîG0îHfîJÁîJÁï"Þî “ï «îÂî<îjî°î&î Öî#Kî(™î*î. î/Bî5(î:Øî;Kî<�î<�ï «uï «î=Ëï «qï «î>>î?¹îB½îE3îIaîJÁîJÁï «î “ïxîî«îáî.îÖî#!î$Ñî( î)¥î*î+Xî+Xïxuïxî,–ïxqïxî-î.€î/·î4%î6™î:Æî<@îB¾îDXîEŽîJÁîJÁïxî “ïEî/înîîAîÍî™î î%Aî(œî+î/î1+î3“î8Óî;éîfî>úîCùîF0îHfîJÁîJÁïŸp êq?€`½7XEROXLispLibraryPackagesbuttoncallseithertheLeftButtonFnortheMiddleButtonFnwithtwoarguments:theselectedGraphNode(thisisNILifthecursorwasnotoveranodewhenthebuttonwasreleased)andthewindow(fromthewindow,thefunctionscanaccessthegraphviaWINDOWPROP).Thegraph'sinitialpositionisdeterminedbyTopJustifyFlg.IfT,thegraph'stopedgeispositionedatthetopedgeofthewindow;ifNIL,thegraph'sbottomedgeispositionedatthebottomedgeofthewindow.THEEDITINGFUNCTIONSIfAllowEditFlgisnon-NIL,therightbuttoncanbeusedtoeditthegraph.(Thenormalwindowcommandscanbeaccessedbyright-buttoningintheborderortitleregions.)Right-buttoningwhilethecontrolshiftisdownallowspositioningofnodesbytrackingthecursor.Right-buttoningwiththecontrolshiftupbringsupamenuofeditoperations.Theeditoperationsallowmoving,adding,anddeletingofnodesandlinks.AddinganodepromptsforaNODELABEL,createsanewnodewiththatlabel,addsittothegraph,andallowsyoutopositionit.Deletinganoderemovesit(usingDREMOVE)fromGRAPHafterdeletingallofthelinkstoandfromit.WhentheSTOPmenucommandisselected,thegraphwindowisclosed.CopyButtonEventFnisafunctiontoberunwhenyoucopy-selectfromtheGrapherwindow.Ifthisisnotspecified,thedefaultsimplyCOPYINSERTsaGrapherimageobject.CertainfieldsoftheGRAPHrecordarefunctionsthatgetcalledbythegrapheditorwheneveranactionisperformedonanelementinthedisplayedgraph.Theyallowthegraphtoserveasasimpleeditinterfacetothestructurebeinggraphed.BelowarethefieldsofGRAPHandtheargumentsthatthecorrespondingfunctioncalls.InallcasesGraphisthegraphbeingdisplayed,andWindowisthewindowinwhichitisdisplayed.(GRAPH.MOVENODEFNNodeNewPosGraphWindow)[Function]iscalledafteryouhavestoppedmovinganodeinteractively(i.e.,isnotcalledasthenodeisbeingmoved).(GRAPH.ADDNODEFNGraphWindow)[Function]iscalledwhenyouselect"Addanode"andreturnsanodeorNILifnonewnodeistobeadded.Anode-movingoperationiscalledonthenewnodeafteritiscreatedtodetermineitsposition.(GRAPH.DELETENODEFNNodeGraphWindow)[Function]îJÁïŸî êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî<¼î<¼ïf‡q`Xïf‡ îD5îJjïf‡s`#ïf‡îJjïf‡î “ïe«î “ïeˆþ>×GîJjïe«îJjîJjïe«î “ï^Ñq`Xîrîî‚îFîFï^Ñuï^Ñ î$Lî$Lï^Ñqï^Ñî&bî)&î)&ï^Ñuï^Ñ î3;ï^Ñqï^Ñî3üî7[î:b îBLîEîJÂîJÂï^Ñî “ï\žuîôï\žqï\žîrî¯î6îäî(î©î#Gî&Bî(Ðî,î-[î1î4ÿî7�î<î?îE�îHfîJÁîJÁï\žî “ïZkîÆî‚îÝîrîÍî%î'Ãî,�î.êî2þî5# î?ÛïZkî “ïV‘îqî«îzîöîj î& î'‹ïV‘uïV‘î'÷ î0vïV‘qïV‘î1Cî1¯î2ëî4•î7î<=î>¸îBPîCà îJÂîJÂïV‘î “ïT^î 5î©î(îÅîtîçî•î Êî#Íî&@î+î0fî4î5{ î<’î>5î@¨îE�îI+îJÁîJÁïT^î “ïR+î îî+ïR+î “ïNQvî±îåîxïNQqïNQîxïNQî “ïJwî õî õïJwuïJw îÄïJwqïJwîVîðîî•î#î'Âî*¯î,×î0€î2Pî5=î7Òî<‚î=î@‘îE�îJÂîJÂïJwî “ïHDîìî¡î‘îöîÑî)§î+*î-‡î2"î3Ñî6zîîB/îHÔîJÂîJÂï1+î “ï.øîî¸îêî"îNî"òî$²î'Kî-îî2¢î39î6ñî:Õî=nîAÁîC•îG™îI¤îJÁîJÁï.øî “ï,Åî\î`î¥îŒî9î$ î(Úî/7î/áî4rî7*î9Öî=ãî?ÊîEWîHgîJÂîJÂï,Åî “ï*’îËî­î" î!äî'‘î+Oî+Àî-fî/Mî3mî3mï*’uï*’î7kï*’qï*’î7Ýî9Wî;Ëî?ùîCú îJÁîJÁï*’î “ï(_î úï(_uï(_îRîcï(_qï(_î»îîvî©î*î"Iî#fî$Æ î+5ï(_î “ï$…îoîoï$…uï$…î*î$¨î(þî.ï$…qï$…îBÑ îIºîJîJjîJjï$…î “ï «î î<î�îGî»î Jî%Wî&„î*% î29î5]î6Îî9Fî=î?\îAÈîEiîFÙîJÁîJÁï «î “ïxî®ïxî “ïžîQî©î©ïžuïžîÿîC�îC�ïžqïž îJjîJjïžî “ïÄî õî îêî–îµîiî ˆî$àî'¢î,ˆî-¨î1;î2êî5uî6•î8‘î;Šî?î@îBîD îHÂîIîIwîJÁîJÁïÄî “ï‘ î@î¯îî 7î"1î$Œî'‚î+î.Rî/oî0Ïî5ýî7“î>Nî@îEŽï‘î “ï·îÂîÂï·uï·î }î$Óî)äï·qï·îC� îJjîJjï·ÿx êq?€`½�8XEROXLispLibraryPackagesiscalledwhenanodeisdeleted.Beforethisfunctioniscalled,allofthelinkstoorfromthenodearedeleted.(GRAPH.ADDLINKFNFromToGraphWindow)[Function]iscalledwhenalinkisadded.(GRAPH.DELETELINKFNFromToGraphWindow)[Function]iscalledwhenalinkisdeleted,whichcanbeeitherdirectlyorfromdeletinganode.(GRAPH.FONTCHANGEFNHowNodeGraphWindow)[Function]iscalledwhenyouaskforthelabelonanodetobemadelargerorsmaller.HowisoneofLARGERorSMALLER.1(DISPLAYGRAPHGraphStreamClip/RegTrans)[Function]putsthespecifiedgraphonStream(whichcanbeanyimagestream)withcoordinatestranslatedtoTrans.SomestreamsmightalsoimplementClip/Regasaclippingregion.Thisisprimarilytoimproveefficiencyforthedisplay.(HARDCOPYGRAPHGraph/WindowFileImageTypeTrans)producesafilecontaininganimageofGraph(e.g.,likeSHOWGRAPH,onlyforfiles).IfGraph/Windowisawindow,HARDCOPYGRAPHoperatesonitsGRAPHwindowproperty.TheFileandImageTypeargumentsaregiventoOPENIMAGESTREAMtoobtainastreamthatthegraphwillbedisplayedon.Transisapositioninscreenpoints(i.e.,itisscaledbytheimagestream'sDSPSCALE)ofthelower-leftcornerofthegraphfromthelower-leftcornerofthepieceofpaper.GRAPHERIMAGEOBJECTSAgraphdatastructurecanbeencapsulatedinaGrapherimageobject,sothatitcanbeinsertedinaTEditdocumentorotherimagestructure.Grapherimageobjectsareconstructedbythefollowingfunction.(GRAPHEROBJGraphHalignValign)[Function]returnsaGrapher-typeimageobjectthatdisplaysGraph.HalignandValignspecifyhowthegraphistobealignedwithrespecttothereferencepointinitshost(TEditfile,imageobjectwindow,etc.).Theycanbenumbersbetweenzeroandone,specifyingasaproportionofthewidth/heightoftheîJjï·î êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî<¼î<¼ïf‡q`Xïf‡ îD5îJjïf‡s`#ïf‡îJjïf‡î “ïe«î “ïeˆþ>×GîJjïe«îJjîJjïe«î “ï^Ñq`Xî îIî(î\îîzî!î!qî&î(Óî.}î/õî4–î6zî8'î:™î=ôî?¡îAeîD¿îG1îJÁîJÁï^Ñî “ï\žî ùîï\žî “ïXÄî‚îÚîÚïXÄuïXÄî€îzî#Ðî(áïXÄqïXÄîC) îJîJjîJjïXÄî “ïTêî óîîâîÿî’îòî©î©ïTêî “ïQîóîKîKïQuïQîñî!ëî&Aî+RïQqïQîC� îJjîJjïQî “ïM6î óîîâîÿî’îòîbî#�î&4î("î,î1"î2Ïî6î;„î<¡î@;ïM6î “ïI\îîiîiïI\uïI\î –î$Qî(§î-¸ïI\qïI\îC� îJjîJjïI\î “ïE‚î ùî&îóî¢î/îNî¯î"î$î%9î(Ïî*jî,^î0?î4Xî6 î;aî;¾î>ñî@VîCîD¶îJÂîJÂïE‚î “ïC?î @î'ïC?w`FïC†îÅïC?q`XïC?îÅïC?î “ï?e î'îîï?euï?eîÕî Âî&äî*ï?eqï?eîCÙ îJjï?eî “ï;‹î°îî-îGîéï;‹uï;‹îHî!Ýï;‹qï;‹î";î&Ùî)’î+†î.+î2eî7�î:Œ îBv îI+îJÁîJÁï;‹î “ï9Xuî.ï9Xqï9Xî'î½îøî’î¸î!íî)î)ï9Xuï9Xî+›ï9Xqï9Xî,`ï9Xuï9Xî.èï9Xqï9Xî/~î1‰î2äî8Œî=˜î>.îAyîCîI,îJÂîJÂï9Xî “ï7%î î~î˜îóî Ìï7%î “ï3K îîï3Kuï3K î#@î%Òî-3î0Îï3Kqï3Kî1Gï3Kî “ï/qîiîî¶ îEî ®î%^î'oî'oï/quï/qî+mï/qqï/qî,@î-î1î4 î>uîAòîD‡îHÇîIšîJÂîJÂï/qî “ï->u îgï->qï->îöî�îáî¬ î+ëî2 î4=î6@î;²îAîGjîGøîJÂîJÂï->î “ï+ uî Íï+ qï+ î*îîîîï+ uï+ îTîTï+ qï+ îxî!ãî%¯î'Jî5¸î7Sî;­î<ÏîA€îDMîF­îJÁîJÁï+ î “ï(Øî'îAîÑîYîÝîÝï(Øuï(Øîxï(Øqï(Øîüîˆî Ñî&fî(î,ëî1Wî4—î5àî7lî<î>î@¤îEîJÁîJÁï(Øî “ï&¥î·îMî¨ îêî"vî$ î&gî*{î-¾î0 î6[î:çî<}î>ØîB¨îD>îH¨îH¨ï&¥î “ï"ËvîüîîÕï"Ëqï"ËîÕï"Ëî “ïñî åîî*îHîîú î'ìî)vî*›î*›ïñuïñî/âïñqïñî0Bî4î92î;î=äî? îAÅîC»îI@îJÁîJÁïñî “ï¾î Xï¾uï¾î î%î%ï¾qï¾îOîiî†î#( î* î*Òî*Òï¾uï¾î0ï¾qï¾î0ßî5€î:æî=º îF îHfîJÁîJÁï¾î “ï‹î¬îIï‹î “ï± îéîéï±uï±î?îªî"�ï±qï±îCÙ îJjï±î “ï×î…î°î°ï×uï×î÷ï×qï×î‰îËî#!î%÷î+„î+„ï×uï×î/‚ï×qï×î0Jî0°î0°ï×uï×î4Ãï×qï×î5)î7öî7öï×uï×î;éï×qï×î" îF¾îHgîJÂîJÂïq3 êq?€`½P9XEROXLispLibraryPackagesgraphthepointinthegraphthatoverlaysthereferencepoint(zeromeansthatthegraphwillsitcompletelyaboveandtotheleftofthereferencepoint;onemeansitwillsitcompletelybelowandtotheright).Theycanalsobepairsoftheform(NodeSpecPos),whereNodeSpecspecifiesanodethatthegraphistobealignedby,andPosspecifieswhereinthenodethealignmentpointis.TheNodeSpeccanbeeitheraNODEIDoroneoftheatoms*TOP*,*BOTTOM*,*LEFT*,or*RIGHT*,indicatingthetopmost,bottommost,etc.,nodeofthegraph.ThePoscanbeanumberspecifyingproportionaldistancesfromthelower-leftcornerofthenode,ortheatomBASELINE,indicatingthecharacterbaseline(forValign,orsimplyzeroforHalign).Forexample,toalignalinguistictreesothatthebaselineoftherootnodeisatthereferencepoint,Valignwouldbe(*TOP*BASELINE).TheButtonEventInFnoftheimageobjectpopsupasingle-itemmenu,whichifselectedcausesthegrapheditortoberun.MISCELLANEOUSFUNCTIONS(GRAPHREGIONGraph)[Function]returnsthesmallestregioncontainingallofthenodesinGRAPH.(FLIPNODENodeDS)[Function]invertsaregioninthestreamDSthatisonepixelbiggerallaroundthanNODE'sregion.Thismakesitpossibletoseeblackbordersafterthenodehasbeenflipped.(RESET/NODE/BORDERNodeBorderStreamGraph)[Function]and(RESET/NODE/LABELSHADENodeShadeStream)[Function]resettheappropriatefieldsinthenode.IfStreamisadisplaystreamorawindow,theoldnodeiserasedandthenewnodeisdisplayed.Changingthebordermaychangethesizeofthenode,inwhichcasethelinestoandfromthenodeareredrawn.TheentiregraphmustbeavailabletoRESET/NODE/BORDERforthispurpose,eithersuppliedastheGraphargumentorobtainedfromtheGRAPHpropertyofStream,ifitisawindow.BothfunctionstaketheatomINVERTasaspecialvalueforBorderandShade.Theyreadthenode'scurrentborderorshade,calculatewhatwouldbeneededtoinvertit,anddoso.(LAYOUTSEXPRSexprFormatFontMotherDPersonalDFamilyD)[Function]îJÂïqî êïgq`Xî+oï5î,4ï5î “ïf‡î ëî ëïf‡raºïf‡înî<¼î<¼ïf‡q`Xïf‡ îD5îJjïf‡s`#ïf‡îJjïf‡î “ïe«î “ïeˆþ>×GîJjïe«îJjîJjïe«î “ï^Ñq`XîÒîYîîÁîGî‡î!zî'Eî)Ëî0nî4)î7ðî<§î?›îB!îFaîHôîJÁîJÁï^Ñî “ï\ž îÓîîÈî_î»î î!¢î#þî*vî.iî1)î5¶î6Ôî9=î; îBKîFkîI+îJÁîJÁï\žî “ïZkîî@î²îFîî$î,î!Àî#pî%åî)Cî)¼ïZkuïZkî0Òî3/ïZkqïZkî4|î8Õî8ÕïZkuïZkî?yïZkqïZkî?ëîEúîG1îJÁîJÁïZkî “ïX8îqîãî î„î1î5îQî!£î$xî$xïX8uïX8î&ÕïX8qïX8î'Dî-Oî1¥î3=î5®î9Uî;ÇîBxîFîG÷îJÁîJÁïX8î “ïVuî7ïVqïVî îeîdîrî î"Zî$î&éî(�î*ýî/Bî4mî<»îBuîD3îJÁîJÁïVî “ïSÒ îEî¶î¬ î# î&3î)Ùî+…î-öî2ƒî2ñî5Ñî5ÑïSÒuïSÒî8œî8œïSÒqïSÒî;fî=jî>�îCð îJÂîJÂïSÒî “ïQŸ îÀî3î{îÛ î&"î*³î,Oî.¯î2¦î4Xî6¸î:AîAÆ îHfîJÁîJÁïQŸî “ïOlîîÓîvîvïOluïOlîiïOlqïOlî3î ðî%bî(”î*¾î*¾ïOluïOlî.ÑïOlqïOlî0î0|î0äî3rî9—î;=î>¼î?é îFîHéîJÂîJÂïOlî “ïM9î‡îîãî¤î+îBî!þî#‰î%?î'Æî.iî2ïM9uïM9î2†î6ýî6ýïM9qïM9î;Tî=nîBÉ îJÂîKîKïM9î “ïKîiîiïKuïKîïKqïKîfî îqî!±î&î)�î+•î,¿ î4î8nî<™î=ÃîC‚îHfîJÁîJÁïKî “ïHÓî§î¯îEî3î»ïHÓî “ïD²v î_î òïD²qïDùî òïD²î “ï@Øî ï@‘ï@‘ î®î®ï@‘uï@‘î¬ï@‘qï@‘îCÙîCÙï@‘ï@Ø îJjï@‘î “ï<·îwîÒîZîÆ î#Úî%§î'=î)˜î-Øî/Yî4žïîºîÐî�î î$èî%aî,î.‚î3;î6Qî;Œî>î@üîB³îE.îI@îJÁîJÁï ðî “ï½îìî}îîšîjîdî!áî$vî(@î*àî1î1£î4§î8Ýî=+î@ÔîBüîI+îJÁîJÁï½î “ïŠîßîî ¶î&½î*Éî0šî2wî4âî4âïŠuïŠî8àïŠqïŠî9Hî?ÇîA„îG~îJÁîJÁïŠî “ïWî –ïWuïWî øî øïWqïWî<îûî›î›ïWuïWî“ïWqïWîôî!î"Bî#¬î$Òî*qî*Óî.5î4‚î7•î9úî=‡îBìîDÃîEéîJÁîJÁïWî “ï$îgî)ï$uï$îšîlîlï$qï$îDîDï$uï$îVï$qï$î)îšî"-î%}î'ñî,¬î1¾î6oî85î<äîCîF—îJÂîJÂï$î “ïñî �î›î1îî—îVîPî 3ïñî “ï î˜î˜ïÐuïî«îƒî"¯î(„î/lî4†ïÐqïîCÙ îJjïÐÿï êq?€`½ž10XEROXLispLibraryPackagesisjustlikeLAYOUTGRAPH,exceptitgetsitsgraphasans-expressionratherthanalistofGRAPHNODEs.Aformalrecursivedefinitionofitsfirstargumentis:Ifthes-expressionisanatom,itsNODELABELisitselfandithasnoTONODEs;elseitisalistanditsCARistakenasitsNODELABELanditsCDR,whichmustbealistofs-expressions,istakenasitsTONODES.Notethatcirculars-expressionsareallowed.Forexample,thefollowingdisplaysaparsetreeforthesentence"Theprogramdisplaysatree."[SHOWGRAPH(LAYOUTSEXPR'(S(NP(DETthe)(NOUNprogram))(VP(VERBdisplays)(NP(DETa)(NOUNtree))))'(VERTICAL)NIL'(HELVETICA12](DUMPGRAPHGraphStream)[Function]printstheGRAPHoutonSTREAMinaspecial,relativelycompactencodingthatcanbeinterpretedbythefunctionREADGRAPH(seebelow).GraphscannotbesavedonfilessimplybyordinaryprintfunctionssuchasPRIN2.ThisisbecausetheGrapherfunctionsuseFASSOC(i.e.,EQnotEQUAL)tofetchagraphnodegivenitsID,soreadingitbackingivestherightresultonlyiftheIDsareatomic.HPRINTresolvesthisproblem,butittendstodumptoomuchinformation:itdumpsacompletedescriptionofthenodefont,forexample,includingthecharacterbitmaps.DUMPGRAPHandREADGRAPHareusedintheimplementationofGrapherimageobjects.(READGRAPHStream)[Function]readsinformationfromStreamstartingatthecurrentfilepointerandreturnsagraphstructureequivalenttotheonethatwasgiventoDUMPGRAPH.EndNotes1.Thenodelabelsarereprintedwheneverthegraphisredisplayed.Ifthismakesscrollingofalargegraphunacceptablyslow,somespeedupmaybeachievedbyinstructingGraphertocachebitmapsofthelabelswiththenodessotheycanberapidlyBITBLTedtothescreen(setthevariableCACHE/NODE/LABEL/BITMAPS/FLGtoT).Thepossiblegainintime,however,maybeoffsetbytheincreasedstoragerequiredforthecacheDbitmaps.îJjïÐî êïgq`Xî+ ï5î,—ï5î “ïf‡î ëî ëïf‡raºïf‡înî<¼î<¼ïf‡q`Xïf‡ îD5îJjïf‡s`#ïf‡îJjïf‡î “ïe«î “ïeˆþ>×GîJjïe«îJjîJjïe«î “ï^Ñq`Xî Zî_îL îðî#öî%yî(ëî+î/™î1Íî4! î<üîA‹îEîF¡îI,îJÂîJÂï^Šî “ï\ž îáîHî¢îî"Y î(«î*Qî,-î.úî5yî7Jî8‚î:ì îCpîDßîFÜîJÂîJÂï\Wî “ïZkî ¹îÆîî.îFî ¼î#²î&î-¨î0êî2`î4î5Žî8 î;#î=Iî@äîBœîFÏîHôîJÁîJÁïZ$î “ïX8îkîNî?îî!Tî$çî&ùî(:î*ƒî,= î5çî7kî;iî=Zî?KîFïîGjîJÁîJÁïWñî “ïVîŒîî îCîÚî%ªî&3î(âî/)î1µî8î=°î>þîCîFîHfîJÁîJÁïU¾î “ïSÒî¾îMîî �î!ªî%LïS‹î “ïOøî ëî Cî › îŽ î!“î#¬î&_î)îî1Bî7�ïOøî “ïLî ëî Cî ›î óî Kî £î ûîSî«îî[î³î îcî»îîkîÃîîsîËî#î{îÓî+îƒîÛî3î‹îãî;îØîcî#ïLî “ïHDî ëî Cî ›î óî Kî £î ûîSî«îî[î³î îcî»îîkîÃîîsîËî#î{îÓî+îƒîÛî3î‹îãî;î“îëîCî›îNîÝî#óî(RïHDî “ïDjî ëî Cî ›î óî Kî £î ûîSî«îî[î³î îcî»îîkîÃîîsîËî#î{îÓî+îƒîÛ îMîÕ î(´î+î+ïDjî “ï@� îNîNï@�uï@�î¤î9ï@�qï@�îCÙ îJjï@�î “ï<¶î�îïî1îŸî î!¾î#Fî$kî)¬ î/³î5™î;ïî>¾îAxîCm îJÁîJÁï³îAçîC6îEÃîH[îJÁîJÁï5Öî “ï3êîÎî_î îáî¸î%èî(‡î)Ýî-òî/Áî3îî6�î:® îBáîCrîDÈîI¤îJÁîJÁï3£î “ï1·î” îÕî5î Zî$´î(´î+˜î2wî9{î< îCáîF™îJÂîKîKrîKÊîL"îL"ï1pî “ï/„îÕî”î Ÿî#î&tî'õî*P î4oî5­ï/=uï/„î6î;Lï/=qï/„î;¤î?ØîDÛï/=î “ï+ª îîï+cuï+ªî¬ï+cqï+ªîCÙ îJjï+cî “ï'Ðîº î’îîï'‰uï'Ðîªï'‰qï'Ðî Bî%§î'qî* î/Eî1¿î6Øî9×î>ûî@XîD¬îJÂîJÂï'‰î “ï%� îzîîkî*îòîÇî"Žî$$ î-Èî. î.xî.xï%Vî “ï!Ãvî�î®ï!Ãqï!Ãî®ï!Ãî “ïéî Cî>îÿîDîÛî!.î'äî*qî.¶î0G î8ˆî9î:kî=:îAàîGÝîI¤îJÁîJÁïéî “ï¶î$î9 î%îÂî#Šî)bî,Zî.Iî4aî6< î=\î=\ï¶uï¶îB£ï¶qï¶îBýîD•îHÓîJÁîJÁï¶î “ïƒîuî&îœîÊîÛîQî!¬î# î&Æî)”î+�î0[î74î8åî;[î@"îBðîEfîJÂîJÂïƒî “ïPî%î&£î(¾î)"î+øî1¤î4Çî6Tî9Íî?ûîBýîD÷îHèîJÁîJÁïPî “ïî îîˆî­îbî!|î#×î)î*þî.Ïïÿy êq?€`½Wé HELVETICAé HELVETICA é HELVETICA é HELVETICA é HELVETICA XLOGO é HELVETICA ~GACHA ï /�Ì! + ¬5 ³>•F éOkWj/Z Xÿÿž|pùÿÿÿÿÿÿ.{ERIS}INTERMEZZO>LIBRARY>GRAPHER.PRESS;1JAMES 4-Apr-85 14:42:28