GrapherdocumentationRichardR.BurtonandKurtVanLehnLastrevised:December27,1983Copyright(c)1982,1983XeroxCorporationLIBRARY>GRAPHERcontainsacollectionoffunctionsandaninterfaceforlayingout,displaying,andedittinggraphs(i.e.,networksofnodesandlinks).Graphshavenodelabelsbutnotlinklabels.Linksaredrawnasstraightlines,withoutarrowheads.Nodelabelscanbeasinglelineoftextorabitmapofarbitrarysize.Therearefacilitiesforhavingactionstriggeredbyselectionofnodesingraphs.Atypicalwaytousethegrapherpackageistoimplementafunctionthatcreatesapartiallyspecifiedgraphthatrepresentssomeuserdata(orcontrol)structure.Forinstance,thebrowserpackage(BROWSER)usesgraphstorepresentfunctioncallingstructures(fromMasterscope).Suchapartiallyspecifiedgraphneedonlyhavethegraphlabelsandthelinksspecified.ItisgiventoLAYOUTGRAPH,alongwithsomeformattinginformation.LAYOUTGRAPHassignsapositiontoeachofthenodes.Thereareformatsforlayingouttrees,latticesandcyclicgraphs.LAYOUTGRAPHreturnsaGRAPHrecord,whichisusuallygiventoSHOWGRAPH.SHOWGRAPHdisplaysagraphinawindow.Displayedgraphsareoftenusedasmenus:selectinganodewiththeleftormiddlebuttoncancauseuser-providedfunctionstobecalledonthatnode.Displayedgraphscanbeeditedusingtherightbutton.Nodescanbeadded,deleted,moved,enlargedorshrunk.Linkscanbeaddedordeleted.Thisdocumentwillfirstdescribethedatastructuresr,theGRAPHandGRAPHNODErecords,thenthelayoutfunctions,thedisplayfunctions,andtheeditingfunctions.TheGraphAgraphisrepresentedbyaGRAPHrecord,whichhasthefollowingfields:GRAPHNODES,DIRECTEDFLG,SIDESFLG,GRAPH.MOVENODEFN,GRAPH.ADDNODEFN,GRAPH.DELETENODEFN,GRAPH.ADDLINKFN,GRAPH.DELETELINKFNandGRAPH.FONTCHANGEFN.GRAPHNODESisalistofgraphnodes,whicharedescribedbelow.DIRECTEDFLGandSIDESFLGareflagswhichcontrolhowlinksaredrawnbetweenthenodes.IfDIRECTEDFLGisNIL,theGrapherwilldraweachlinkinsuchawaythatitdoesnotcrossthenodelabelsofthenodesitrunsbetween.Often,thisleavessomeambiguity,whichissettledbySIDESFLG:IfSIDESFLGisNIL,theGrapherpreferstodrawlinksthatgobetweenthetopandbottomedgesofnodes.IfSIDESFLGisnon-NIL,itpreferstodrawlinksbetweenthesidesofthenodes.IfDIRECTEDFLGisnon-NIL,theedgesarefixed(e.g.,alwaystotheleftedgeofthetonode).Thiscancauselinkstocrossthelabelsofthenodestheyrunbetween.Inthiscase,ifSIDESFLGisNIL,the"from"endofthelinkisattachedtothebottomedgeofthe"from"node;the"to"endofthelinkisattachedtothetopedgeofthe"to"node.IfDIRECTEDFLGisnon-NILandSIDESFLGisnon-NIL,the"from"endofthelinkisattachedtotherightedgeofthe"from"node;the"to"endofthelinkisattachedtotheleftedgeofthe"to"node.Theremainingfieldsgivetheuserhooksintothegrapheditor,whichisdescribedbelow.TheGraphnodesTheGRAPHNODErecordhasthefollowingfieldsofinteresttotheuser:NODELABEL-thethingthatgetsprinted(usingPRIN3)asthenode.Ifthisisabitmap,bitbltisusedinsteadofPRIN3.Thisallowsiconsof êq?€`½ îïpÿ êq?€`½îïî êïg_pî ôïbqîm îTïbî ôï`€rî úï`€î ôï_(î¬î1îînî ¡î&ˆï_(î ôï]Ðî'î¶îEî ¡î$ï]Ðî ôï\xîZî¶îÀîóî#ý î-@ï\xî ôï[ î úï[ î ôïY²sî#î!íî# î)™î+/î1rî41î6î<î>,îBKîEîEïY²î ôïX/ îîÞîøî¼î Ðî&òî(ˆî,Èî/‡î3¥î3ýî9î}î@kîAˆîE§îHEîIÛîIÛïV¬î ôïU)î ¥îRîoîî²îfî�îõî#î%n î*ÿî-î1±î6ªî<Ìî>¥îD»îFQîJ‘îJ‘ïU)î ôïS¦î uî›î¡ïS¦î ôïR#î úïR#î ôïP î >î¾î“î)îÇî"îî$Gî%§î'=î.0î/Mî4àî7¨î<µî=ÒîC.îIDîIDïP î ôïOîîÐ îîîµî×î!÷î$î)o î/çî0?î2½î8Ýî;8î@·îFîFïOî ôïMšî[î©î#mî%î+qî1î5� îêî@—îE/îI¥îI¥ïF î ôïDˆî §îÏ îÿî Bî!Øî#Æî'îî)èî,°î0¢î0úî7Šî|î î½î%îãî¸î!î$3 î+ßî.:î3uî64î?`îDþîH*îJ…îJ…ï>|î ôï<ùî( îÍî(î÷ î"œî%[î'¶î,c î2¶ï<ùî ôï;Œrî úï;Œî ôï:qî �îÑï:rï:î×ï:î ôï8î úï8î ôï7sî >îRî² î¶î�î¬î çî%Õî)ôî,’î.íî5î9# îC—îC—ï7î ôï5Ž î^îÞî+£î:Jî:Jï5Žî ôï4 î î(äî8Ëî;Šî;Šï4 î ôï2ˆî ï2ˆî ôï1î úï1î ôï/‚ îîfîƒî¨î>îRî"ôî'î)yî0î4Nï/‚î ôï-ÿî úï-ÿî ôï,| îüî»îÙî ?î#¢î'Áî,šî/œî2ßî5Eî9�î?NîA©îFKîF£îGËîGËï,|î ôï*ù îüî\îFî¡î @î"¨î&"î)šî,-î-®î1î2:î5î7×î8ôîÊîBœîD÷îH‡îH‡ï*ùî ôï)vîî�îøî8îUîƒî £î ûî%8î'Öî,5î/ü î6äî;î î@6îD¡îDùîHîJ¹îJ¹ï#jî ôï!çîî_îõîÇî"î5îËî!&î%fî(qî*ïî1î1gî2óî5‘î9Jî:gîA…îBåîEÏîH*îH*ï!çî ôï dîÁî€îîqîîdîLî âî#=î( î+�î-%î/€î4Mî8?î:šî=ºî@yîBîDjîFýîH]îH]ï dî ôïáîÜîrîÍî4î¸îNî©î Éî$»î%î&; î0Cî1£î7î9Öî@ôîBTîH*îJ…îJ…ïáî ôï^îÁî€îîqîîdîLî âî#=î&€î*î+šî-õî2Âî6´î9îîî@„îBßîErîFÒîFÒï^î ôïÛîÜîrîÍîî î6î‘î ±î$QïÛî ôïXî úïXî ôïÕî ¾îpî+î!î|îžî#Óî&’î(íî-î1kî5Šî6êî=�îA¿ïÕî ôïhrî úïhî ôïî úïî ôï†qî �î:îoï†rï†îuï†î ôïî úïî ôï•sî ¾îêîvîîoî%ˆî)Cî*Ùî/òî1ˆî3ãî7ï•î ôïî úïî ôï�îêîŸî÷îÈî î{î î!Óî$Þî)·î.î2Úî4§î7î:¢ï�î ôï îêîî°îî-î<îÀî î"�î'ˆî)î-Þî0ëî5Aî9î:žî:¤ï ÿ Ú êq?€`½ä2arbitrarysizestobeusedasgraphlabels.NODEID-auniqueidentifier.NODEID'sareusedinthelinkfieldsinsteadofusingpointerstothenodesthemselvessothatcircularLispstructurescanbeavoided.NODEID'sareoftenusedaspointerstothestructurerepresentedbythegraph.TONODES-alistofNODEIDS:alinkrunsfromthisnodetoeachnodeinTONODES.FROMNODES-alistofNODEIDS:alinkrunstothisnodefromeachnodeinFROMNODES.NODEPOSITION-thelocationofthecenterofthenode(aPOSITION).NODEFONT-Specifiesthefontinwhichthisnode'slabelwillbedisplayed.ItcanbeanyfontspecificationacceptabletoFONTCREATE,includingaFONTDESCRIPTOR.NODEFONTischangedbygrapheditoperationsLARGERandSMALLER.Whenthishappens,thefontfamilymaybechangedaswellasthesize.BOXNODEFLG-Ifthisfieldisnon-NIL,thenodelabelwillhaveaboxdrawnaroundit.NODEWIDTHandNODEHEIGHT-Normally,thesearesetbygraphertobethewidthandheightofthenode'sNODELABEL.However,iftheuserprovidesfixnumsforthesefields,theirvalueswillbeusedinstead.Thisfeaturecanbeusedtogiveanodealarger-than-normal"margin"arounditslabel.Graphnodescanbecreatedbythecreateoperatorfromtherecordpackageorwiththefollowingfunction:NODECREATE(IDLABELPOSITIONTONODEIDSFROMNODEIDSFONTBOXED?)ThisfunctionreturnsaGRAPHNODEwithNODELABEL=ID,NODELABEL=LABEL,NODEPOSITION=POSITION,NODEFONT=FONTandBOXNODEFLG=BOXED?.Awordonsavinggraphsonfiles:ThegrapherfunctionsuseFASSOC(i.e.,EQnotEQUAL)tofetchagraphnodegivenitsid.Hence,simplydumpingagraphontoafileandreadingitbackinwillonlyworkcorrectlyiftheid'sareatomic.Beforedumpingagraph,itiswisetosettoNILthefieldsthatarenormallycalculatedandfilledinbythegrapherfunctions.Inparticular,unlessspecialprovisionsaremade,theNODELABELandtheNODEFONTfieldswillreadbackinaslitatomswithnameslike{BITMAP}#1,23456or{FONTDESCRIPTOR}#7,2345insteadofrealbitmapsandfontdescriptors.LayingoutaGraphLAYOUTGRAPH(NODELSTROOTIDSFORMATFONTMOTHERDPERSONALDFAMILYD)LAYOUTGRAPH"laysout"apartiallyspecifiedgraphbyassigningpositionstoitsgraphnodes.ItreturnsaGRAPHrecordsuitablefordisplayingwithSHOWGRAPH.TheinputNODELSTisalistofGRAPHNODESthatpartiallyspecifiesagraph:onlytheirNODEID,NODELABEL,andTONODESfieldsneedtobefilledin.Optionalfieldsare:NODEFONT,NODEWIDTHandNODEHEIGHT.TheseoptionalfieldswillbefilledinappropriatelyiftheyareNIL.Allotherfieldswillbeignoredand/oroverwritten.ROOTIDSisalistofthenodeidentifiersofthenodesthatwillbecometheroots.Theotherargumentsareoptionalandcontroltheformatofthelayout.î:¤ï î êïgsî ôïh„rî Ëïh„î ôïbsîêîžî#î¹î§îî ãî$÷î)ïbî ôï`œî úï`œî ôï_îêî’îcî€î9 î!…î!Ýî(—î*ýî.lî/íî2Hî4‰ï_î ôï]–îêî¥îžî4îî"�î$&î&�î*Á î27î3¾ï]–î ôï\îêî²îâîä î ªî#]î%Kî+ î+bî2î4‚î8î8!ï\î ôïZ�îêîYî&î¯îEî î#¶ î+ºî-“î/îî4ïZ�î ôïY î úïY î ôïWŠîêîî`î1î‰î¦îËîaî#Qî$nî'î*/î-rî0î3 î4äïWŠî ôïVîêîbîòîsî¡ïVî ôïT„î úïT„î ôïSîêî"îzîKî£îÀîåî{î%kî&ˆî)î,Iî-ßî0}î4 î6þïSî ôïQ~îêîbîòîs î »ïQ~î ôïOûî úïOûî ôïNxîê îÃî”îïî"aî#÷î&Rî*»î,Qî.¬î2<î3Ò î;CïNxî ôïLõî úïLõî ôïKrîêîïîÀîîCî žî#rî$óî)î+°î0Rî3µî5ËïKrî ôïIïîêîØ îŸî÷îîÒîÀî ^î#2 î+£ î3î4DïIïî ôïHlîê îòî,î Iî-³î. î6î7pî=[î?4î?:ïHlî ôïFéîêîþî± îÐî"Üî%›î,Úî-2î1;î3Ùî:î:ïFéî ôïEfîêîEîî,î"îî"ûî$Èî'�î)jî+Åî.ªïEfî ôïCãî úïCãî ôïB`îê îÓî¤îÌîjî uî!Õî'«î*î-–î0ùî3aî3gïB`î ôï@Ýî LîêîMîjîîiîNî {ï@Ýî ôï?Zî úï?Zî ôï=×îêî´îs î#ìî$½î+î.æî1Lî3†î5_î:¼î<ï=×î ôïñîALîGeîGeï4Åî ôï3Bî—ï3Bî ôï1Õrî úï1Õî ôï0}î Ëî ¢î y î;îEî$Ôî-: î7Nî;�îAhï0}î ôï/%î úï/%î ôï-·sî î”îxî•î!Áî$·î-lî/$î1=î9òî;ªî@ÐîA(îA(ï-·î ôï,4 îÍî…îÏî%Ôî'Œî+ î._ î8Hî:î?Ùï,4î ôï*±î úï*±î ôï).î >îÄî¾î5îùîóî?î—î"aî'¾î.î0Ÿî6•î9©î;úî>aîCêîE€îI îJ*îJ*ï).î ôï'«î@îîÔî·îîåî"Gî(5î)Rî-fî0žî1»î3õî6´î;åî=î@oîAðîDXîGZîGZï'«î ôï&(î cîXîuîÐîcîÉî Ìî!$î%ºî+¨î,Åî1;î2Xî3¸î6åî8{î:µîÓîA.îDéîG±îJîJï&(î ôï$¥îÀ î°îoîÒîSî ,î"‡î'ä î.‰î.áî0m î7=î;´î@Œ îGlîIÒîIÒï$¥î ôï#"î2î�îBîî\î&aî*î,„î/»î3(î4©î6vî;Çî>½îCIîEÐîEÐï#"î ôï!Ÿîjîî-Fî2?î3Õî6“î;ðî>¯îAƒ îIgîI¿îJîJoîJÇîKîK%ï!Ÿî ôï 2rî úï 2î ôïÚî úïÚî ôïPqîîFî·îùïPrïPîÿïPî ôïÍî úïÍî ôïuîÀî!xî'Yî+Œî2Dî:ªîAhïuî ôïî úïî ôï¯s îÏîiî•î²î"î($î,8î.î4‚î:›î<1î=þ îF\îG„îG„ï¯î ôï,îØîõî0î¼î î!' î'ðî*æ î4Âî5î7äî;tîBPîC°îDÍîFòîHˆîHˆï,î ôï© îîÎî*î"î#<î'²î*´î-ëî3õ î= î?ËîFéîJ¤îJ¤ï©î ôï&î xîîüî_îBîšîZî î"Ýî+Dî+œî4fî7% îAîAXîE—îE—ï&î ôï£îrî-î•îƒîæîg î%'î&Dî)Oî+µî.Ÿî.÷î0ñî4¡î8\î:Äî<²îAïîFÈîFÈï£î ôï îÌî$î¿îî<îaî÷î!Rî$â î+|î-î/mî3­î6uî8Ýî>Oî@ªîD§îDÿîGÉîGÉï î ôï�î ¤îÃî)î§îfî$?î&šî+î,¥î/î3–î3îî3ôï�î ôï î úï  6 êq?€`½c3FORMATcontrolsthegeometryofthelayout.Itisanunorderedlistofatoms.Therearethreebasicformats:COMPACT[thedefault]-Thegraphislayedoutasaforest(asetoftrees)insuchawaythattheminimalamountofscreenspaceisused.FAST-Thegraphislayedoutasaforest,sacrificingscreenspaceforspeed.LATTICE-Thegraphislayedoutasanacyclicdirectedgraph(alattice).Thesebasicformatscomeintheobvioustwoflavors:HORIZONTAL[thedefault]-rootsatleft,linksrunleft-to-right.VERTICAL-rootsatthetop,linksruntop-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.ThecreationofvirtualnodesdependsonwhetherornotLATTICEisamemberofFORMAT.Theforest(i.e.,non-LATTICE)casewillbedescribedfirst.Nodesarelayedoutbytraversingtheforesttop-down,depth-first.Wheneveranalreadylayedoutnodeisfound,insteadofdrawingalinktoitthatmightcutacrossarbitrarypartsofthegraph,LAYOUTGRAPHcreatesacopyofthenode(sameNODELABEL,differentNODEID,noTONODES),laysitdownand"draws"boxesaroundbothitandtheoriginalnode(bysettingtheirBOXNODEFLGfields).Hence,aboxaroundanodemeansthatitoccursatleasttwiceintheforest.FORMATaddsfewtwiststothisbasicstrategyofusingboxes.Itcanincludeoneorbothoftheseatoms:COPIES/ONLY-onlythenew"virtual"nodesareboxed.Theoriginalisleftunboxed.NOT/LEAVES-Boxingissuppressedwhenthenodehasnodaughters.Forexamples,FORMAT=(COPIES/ONLYNOT/LEAVES)willboxnodesthatarecopiesofnodesthathavedaughters(i.e.,ifyouseeabox,thenodeshasdaughtersthataren'tdrawn).FORMAT=(NOT/LEAVES)willboxbothcopiesandoriginals,butonlywhentheyhavenodaughters.FORMAT=NILboxesoriginalsandcopiesregardlessofprogeny.IfFORMATincludesLATTICE,thenanodethatisthedaughterofmorethanonenodeisnotboxed.Instead,linksfromallitsparentsaredrawntoit.Noattemptismadetoavoiddrawinglinesthroughnodesortominimizelinecrossings.However,inHORIZONTALformat,nodesarepositionedsothat"from"isalwaysleftof"to."Similarconventionsholdfortheotherformats.InVERTICALformat,forinstance,theTONODESofanodearepositionedbeneathit,andtheFROMNODESarepositionedaboveit.Cyclicgraphscannotbedrawnusingthisconvention,ofcourse(howcananodebeleftofitself?).WhenLAYOUTGRAPHdetectsanodethatpointstoitself,directlyorindirectly,itcreatesa"virtual"nodeasdescribedabove,andboxesboththeoriginalandthecopy.IfFORMATincludesCOPIES/ONLY,thenonlythenewlycreatednodeisboxed.î úï î êïgsîI“ïh„rîJjïh„î ôïbsî#î¬îîUîëî"Fî&Üî'4î(\î)¼î+ªî2©î4Îî6dî:úî;Rî?eîAËîEoîI*îI*ïbî ôï`œî)ï`œî ôï_/rî úï_/î ôï]Ásîêî*î‚îVî…îVî" î&4î'”î+Oî-¶î/ƒî0 î4Jï]Áî ôï\>îêî€îºîPîLîÍî<îYî!.î#öî&Qî+™î0¿î2ï\>î ôïZ»îêî–î¾îî�ïZ»î ôïY8î úïY8î ôïWµîêîÇî˜îbîvîÖî‘î!øî#Åî$âî)@ î02î08ïWµî ôïV2îêî–î¾îØîïV2î ôïT¯î úïT¯î ôïS,îêîîÓî�î±îî!Ìî$3î&î'îî,ºî1úïS,î ôïQ©îêîþî”îNïQ©î ôïP&î úïP&î ôïN£î3îîîîïîpîËî$î&½î+dïN£î ôïM î úïM î ôïK�îê îDîî Gî!î$³î&=î(îî,1î.¯ î6)ïK�î ôïJîêîîÙî1îÌîVî±î!zî$½î'; î0ªî0°ïJî ôïH­rî úïH­î ôïG?sî ¾ îdîîîåî¾î%øî(Sî+×î2¥î4&î:·î;î>÷îAîG&îG~îG~ïG?î ôïE¼î¼ î!î(]î+2î-™ î4Kî9,î;ôî?WîA²îEMîGGîI¢îI¢ïE¼î ôïD9î ™î�îêî-îv î#Bî#šî2hî9¯î<„î>ëîCãîGfîJ.îJ.ïD9î ôïB¶î Wî²îMî×î2îbîXî"›î'ä î1Sî1« î;jî>?î@¦ îGXîGXïB¶î ôïA3î wî?î¢îýî˜î’îíî žî öî!Nî!¦î!þî"ïA3î ôï?°î úï?°î ôï>- îÏîÜî¥î#¹î'ùî)�î-Vî2Êî3çî80î9Æî>îAjîBëîFòîFòï>-î ôï<ªî3îŽî¢îîiî†î‚î/î Lî$}î&î)ûî-Sî-«î.Óî4ˆî6ãî;#î<¹îC÷îHîHnîHnï<ªî ôï;'î êî¹îîÏîeîÀî&Þî*™î,/î/¿î1Uî4Kî8íî9Eî<îAåîHÁîJ!îJ!ï;'î ôï9¤î .îíîH îZîeîûî!î%î*Dî/î4mî8Œî9ìî?¶îAƒîCÞîG™îI/îI/ï9¤î ôï8! î1î‰îSîåî{î#ºî'úî-Ðî/Êî5Gî6ôî9[î?sî@ÓîAðîGyîIîIï8!î ôï6žî…îÝî§î£î· î$4î'‹î)óî+áî2‡î5§î5ÿî6Wî6¯î6µï6žî ôï5î úï5î ôï3˜î_îÅî€îçîÀ îqî!Ìî%Èî,… î3Ãî4î:âî<ÐîAÔîE�îGöîGöï3˜î ôï2î „îäîOîHîÞîRî oî#î$˜î%µî(}î,eî.Àî3Wî9 î<šî>0î@‹îEîEï2î ôï0’ îÏîÜîùîhîþî"Yî%éî* î34î8Ûî>åî@ßîHØîHØï0’î ôï/î Éî æî¹îxî,îUî#:î&rî'�î*Nî,©î1Åî5Uî7§îî>îBRï, î ôï*œrî úï*œî ôï).sî Lî ¤î üî Tî ¬î î \ îoî@îBî�î“î%\î)œî,î0\ï).î ôï'«î Lî ¤î üî Tî ¬î î \î&îBî¢îñîíï'«î ôï&(î úï&(î ôï$¥î Lî ¤î üî Tî ¬î î \ î¿î�î_î¿ î$yî(@î*›î.+î0Éî2qï$¥î ôï#"î Lî ¤î üî Tî ¬î î \ î3ï#"î ôï!µrî úï!µî ôï Gsî rî7îfî î%ª î/†î1îî4¢î8âî;ªî>îBœîD2îHrîHrï Gî ôïÄî ¼îîæîúîîÁî Sî!pî$†î&áî+!î-¿î4†î7Nî;Tî@zî@ÒîGîH¹îH¹ïÄî ôïA îIî±îeî�î!)î#è î*î,}î/î3Fî6Qî9´î;® îB×îC/îI^îI^ïAî ôï¾î ¬î4î]î)îèît î&}î(î-¸ï¾î ôï;î úï;î ôï¸î îKîîzî ¦î!Ãî%Sî(î){î+Öî1íî3ƒî7î:Jî= î@™îAùîD`îI îIdîIdï¸î ôï5îZî�îàî­îzîŸî!î%Pî&æî(eî(½î*âî0î1eî5Aî6×î:žî@îC`îH¾îH¾ï5î ôï²î4îáîwîoî î ëî!Cî'�î) î2kî7Bî;‚î=è îDçîFÀîIˆîIˆï²î ôï/îÁî!îÃîî¨î*î‚î!: î)Vî,yî.“î0îî4žî:%î:}î< îC'îGþîJîJï/î ôï¬îîoî�î#î@îÐî"6 î)5î.¼î0;î2úî5Uî>�î@ó îGòîGòï¬î ôï)î(î§îÿî=îî´îî î$Tî('î*Å î2“î4)î8áî<\î?î@,îC¼îEªîGùîI�îI�ï)î ôï¦îÊî"î+ îî#î$%î'µî*}î.½î0Sî4 î9î:½ îALîBiîGvîH“îH“ï¦î ôï#î½îMîîÀî Vî#î'>î*vî,Ñî1íî4¬î7î:Øî;0î îE?îG¥îJ îJ ï_î ôï]–î Í îTî¬îÀî î=î î&‚î(œî+:î-î/bî4î<î=œî@†îBáîEµîGîGï]–î ôï\î Îîîl îÎîdî!¿î&¸ î0¼ï\î ôïZ�î úïZ�î ôïY î ¾îpîî3î# î%gî+Õî1“î65î6�î9Åî=íîCsîHÙîHÙïY î ôïWŠî(î"î}îRîèîüî’î€î"Qî+%î0®î3 î9.î>ìîDªîGHîIæîIæïWŠî ôïVî–îîî8î˜îóî î%Öî+”î,±î1Šî4Iî6» î=äî><îD¢îJ+îJ+ïVî ôïT„î Oîtî2îðî"0î%sî+î0?î5Ñî8›î=sî@îC×îHîHïT„î ôïSî §î•îõ î+îƒîMî!%î#íî&‹î*Ëî-“î/ùî2`î6Öî9‰î;wî<×î<×ïSî ôïQ~îFïQ~î ôïPrî úïPî ôïN¹î úïN¹î ôïM/qî úïM/î ôïKz îmîîXîÉî$ïKzî ôïI÷rî úïI÷î ôïHŸîdî î#ý î0– î¢îEîFˆîHîH_îI‡îI‡ïEÙî ôïDVî OîcîÃîÖîî]î òî#Mî(€î)àî-¼î.Ùî4¥î::î:’î;ºî=\î>¼îA¦îDîHîJ}îJ}ïDVî ôïBÓî âîGîÈîåîî§î"Ùî$oî'’î(¯î)iî)Áî*éî,‹î-ëî/î3]î5¸î9Ìî<4î>"îD‡îFîG%îG%ïBÓî ôïAPî'î¶îèî~î¡î¾î }î"Øî( î*sî-î/lî3_î5yî7Ôî=î@î@hîIâîIâïAPî ôï?Íîáî¨ î@îÁîî%hî)#î*¤î.kî0î3Æî9’î=äî@®îDÂîF"îJ‚îJ‚ï?Íî ôï>Jî îîIî„î9îÏî*î"¿î#î,‘î1uî3Ðî9ï>Jî ôï<Çî úï<Çî ôï;Dî î îVî î)î+~î1Tî3¯î8âî:Bî> î?&î?&ï;Dî ôï9Á îXî‚îîSî"îî%Iî)]î,î-9î1ƒî1Ûî8¢î:ýî=Lî>ùîC‘îHîIgîIgï9Áî ôï8>îòî±î îƒîãîî "î$î&Üî*lî,Ôî.Âî5'î; îA¡îDiîE†îFæîFæï8>î ôï6»îî`î"îîîqîçî"Oî$áî(Ýî+8 î6vî8# îE8îH.îH.ï6»î ôï58î ’ îînî î%Lî(cî*Ëî,¹î/Aî0^î2¹î70î:î®îB2îC’ îJ‘îJ‘ï/,î ôï-©î ~î Ùî@îÄîZîµîJîgî!Qî#¬î(Òî- î1$î2„ î9ƒî; î=hîB6îEºîGPîI«îI«ï-©î ôï,&î7ï,&î ôï*£î úï*£î ôï) î  î;î›îqîÌî#î'…î*8î,&î/•î1+î3Þî69î:¯î;î>JîCîHAîHAï) î ôï'�îKî±î¦îîÂî%2î&³î)î-¦î/Sî1úî7ñî8Iî<îBtîFîG7îJBîJBï'�î ôï&î {î Ûî®î îgîýî#=î%î*�î,øî1Ñî2)î5äîÜîDNîEäîJ$îJ$ï$—î ôï#î ³îXî°î–î³îCîØî!òî# î,&î13î2Pî5Fî8Öî;Ìî>”îBYîEÈîFåîH{îH{ï#î ôï!‘î Oîcî"îxîÓîõî‹î#ôî%sî+î,-î/½î5}î6šî:æîB�îEàîEàï!‘î ôï î/îoîáî®îDîŸî âî"xî%7î(zî)ùî*Qî.Zî0µî4Èî8°î?Wî@·îFËîI&îI&ï î ôï‹îî;î›î‰îáîçï‹î ôïî úïî ôï…îìî§î=î˜îÓî _î"Åî)î+Ðî.+î2Sî4,î6‡î:›î>£îE(îGîGï…î ôïî=î�î�îŠîxîÞî!_î#ºî*î.•î.íî2gî6 î8hî<|î>îAØîC¥îE“îJ îJ ïî ôïî §îšî0î‹î¡î ‰î&•î&íî+-î-“î/îî3©î5?î:zî=9î?”îF³îI{îI{ïî ôïüî O îøî‹îóîáî$kî$Ãî&Oî(î,#î1^î2¾î5î9-î=îCzîF9îF9ïüî ôïyîNî®î î<î½îÜîùî!Y î'Îïyî ôï rî Ëî Ñï î ôïžsîêî"·î)î.Uî5(î9Pî9Vïžî ôïîêî*î…î§îEîÃî$¿î%Üî)l î1ïî ôï˜îêîœîüîcî‹îXî³î!Cî"£î&‹î+¬ï˜î ôïî Lî Rïî ôï ’îêî/î"ãî)¶î-Þî1¥î4î7"î7(ï ’ÿ z êq?€`½[5selects"Addanode"andshouldreturnaNODEorNILifnonewnodeistobeadded.Nodemovingoperationwillbecalledonthenewnodeafteritiscreatetodetermineitsposition.GRAPH.DELETENODEFN(NODEGRAPHWINDOW)calledwhenanodeisdeleted.Beforethisfunctioniscalled,allofthelinkstoorfromthenodearedeleted.GRAPH.ADDLINKFN(FROMTOGRAPHWINDOW)calledwhenalinkisadded.GRAPH.DELETELINKFN(FROMTOGRAPHWINDOW)calledwhenalinkisdeletedwhichcanbeeitherdirectlyorfromdeletinganode.GRAPH.FONTCHANGEFN(HOWNODEGRAPHWINDOW)calledwhentheuseraskedforthelabelonanodetobemadelargerorsmaller.HOWisoneofLARGERorSMALLER.MiscellaneousfunctionsGRAPHREGION(GRAPH)ReturnsthesmallestregioncontainingallofthenodesinGRAPH.LAYOUTSEXPR(SEXPRFORMATFONTMOTHERDPERSONALDFAMILYD)JustlikeLAYOUTGRAPHexceptitgetsitsgraphasas-expressionratherthanalistofGRAPHNODEs.Aformalrecursivedefinitionofitsfirstargumentis:Ifthes-exprisanatom,itsNODELABELwillbeitselfanditwillhavenoTONODEs;elseitisalistanditscarwillbetakenasitsNODELABELanditscdr,whichmustbealistofs-exprs,willbetakenasitsTONODEs.Notethatcirculars-expressionsareallowed.Forexample,thefollowingdisplaysaparsetreeforthesentence"Theprogramdisplaysatree."(SHOWGRAPH(LAYOUTSEXPR'(S(NP(DETthe)(NOUNprogram))(VP(VERBdisplays)(NP(DETa)(NOUNtree))))'(VERTICAL)NIL'(HELVETICA12]RecentChanges*GRAPHER:Extensivelyrevised;newfunctionHARDCOPYGRAPH;nodeformattingextendedGRAPHERhasbeenextensivelyrevised,sothatitusesmuchlessmemoryspacepernode.WhereastheoldGraphercreatedabitmappernode,thenewonedoesn't.Thepriceisthatscrollingmaytakealittlelonger.ToREDISPLAYWaverylargegraphtakestwiceaslongasitusedto(ifyoudon'tlikethis,setCACHE/NODE/LABEL/BITMAPS/FLGtoT).Also,theGRAPHRECORDwaschangedtousehalfasmanyconscells.ThisversionwillnotruninCaroloroldersystemsiftheuserdependsonnodefontsbeingdefaultedtotheDEFAULTFONTfontclass.(HARDCOPYGRAPHGRAPH/WINDOWFILEIMAGETYPETRANS)Producesafilefromaformatedgraph(e.g.,likeSHOWGRAPH,onlyforfiles).IfGRAPH/WINDOWisawindow,HARDCOPYGRAPHwilloperateontheGRAPHpropertyofthewindow.IfthedevicefieldofthefilenameisLPT,thefilewillautomaticallygetsenttotheappropriateprinter.IMAGETYPEiseitherPRESSorINTERPRESS,anddefaultstoINTERPRESS.TRANSisapositioninscreenpointsofthelowerleftcornerofthegraphfromthelowerleftcornerofthepieceofpaper.î7(ï ’î êïgsîI“ïh„rîJjïh„î ôïbsîêî¶îgî„îÙî˜î$<î(pî)�î-Öî/ƒî2 î2ïbî ôï`œîêîîî÷î‡îçî}îkî""î"zî&5î+1î1 î1¦ï`œî ôï_îêîRî@îhîbî½î³î"Cî%ƒî& î(î,]î-óî-ùï_î ôï]–îêî¥îrîëï]–î ôï\î úï\î ôïZ�îêî î$bî)�î0pî4˜î8_î9|î9‚ïZ�î ôïY îêîzîÚîJî¢î8î Öî&iî'Éî,Sî. î.&ïY î ôïWŠîêî€îÛîî´îaî¤îÿî"�î$õî*ïWŠî ôïVî úïVî ôïT„îêî`î!:î#�î(¼î/�î3·î7~î7„ïT„î ôïSîêîîšîúî±î·ïSî ôïQ~î úïQ~î ôïOûîêîÑî#«î%òî+-î2î6(î9ïî9õïOûî ôïNxîêîîšîúîî'îÚî!Èî%Äî*Èî,uî/¸î/¾ïNxî ôïLõîêî\îyîïLõî ôïKrî úïKrî ôïIïîêîïî$î(bî-�î4pî8˜î<_îgî úï>gî ôï<ùsîPî«î3îŸ î"³î$€î&î(qî,±î.2î3}ï<ùî ôï;Œrî úï;Œî ôï:4î úï:4î ôï8Üîîóî#&î)Þî2Dî9ï8Üî ôï7„î úï7„î ôï6sî õî| îWîöî î#î$ëî(ÿî*Ìî+é î4]î8…î;±î<Îî>óî@‰î@‰ï6î ôï4“ î2îŠîÔî4î l î&¯î(Eî*î,Ðî3?î5î6)î8„î<Ùî>9î@'îD îEÚîEÚï4“î ôï3î©îîÿîVîî2î šî#ýî%÷î-Aî0+î1Hî2¨î3Åî5êî8©î:vî<Üî?DîA2îE îFÙîH¦îH¦ï3î ôï1�î©îhî5î î(î!—î#…î$¢î&Çî(]î-Äî0,î2î5ôî7Áî9Žî@ØîA0îD‡îGOîGOï1�î ôï0 î$ îHî®î Lî ¤î#"î)7î+’î1«î7*î8Gî<.î?îAîCvîI¡îI¡ï0 î ôï.‡î ƒîDîÃîàîˆï.‡î ôï-rî úï-î ôï+Âî Ëî ¢î y î¶ î ¡î#ýî'Yî+Œî3òî;‡ï+Âî ôï*jî Ëî ¢î yî Pî'îþîÕî¬îƒîZî1îîßî¶î�îdî;îîéîÀî—înîEîîóîÊî ¡î!xî"Oî#&î#ýî'Yî,cî3øï*jî ôï)î Ëî ¢î yî Pî'îþîÕî¬îƒîZî1îîßî¶î�îdî;îîéîÀî—înîEîîóîÊî ¡î!xî"Oî#&î#ýî$Ôî%«î&‚î'Yî*µî.èî5 î<^ï)î ôï'ºî Ëî ¢î yî Pî'îþîÕî¬îƒîZî1îîßî¶î�îdî;îîéîÀî—înîEîîóîÊî ¡ î*µî. î8%î;�î§î@=îBçîF�îIîIïÛî ôïXî ôî.î(�î*&î,5î,�î0î2m î=‘î@fîFQîGçîJ…îJ…ïXî ôïÕî §îtî;îªîNî¦î³î!®î$î&}î(ûî*|î.Bî/ïî3Š î:Rî?Åî@âîC=îF_îF_ïÕî ôïRîÊîÄî€îhî"´î$Jî&¥ î1î3Ûî7…ïRî ôïÏî úïÏî ôïL îu î#wî&ºî/#î4NïLî ôïÉîcî€îºîýîî%î"9î%Æî(M î2)î5+î7Eî; î;bî<Š îHŒîIìîIìïÉî ôïFî î¦ î®î î%Pî'Jî)¥î.àî4•î6+î8†î>î>sî?›îAöîFvîI�îI�ïFî ôïÃî Šî åîîûî[î¨îî=î¥ î(nî*Éî-Ôî/jî1Å î9}î>kî>ÃîG,îHŒîHŒïÃî ôï@î ðîÜî‰ îôî ³î&î'¯ î1î1rî6vî7Öî8óî>\î?ÝîD‰îHÉîJ_îJ_ï@î ôï ½î Oî!îpîüî’îíîî"Dî$Ÿî(qî*Àî/Lî0âî3=î7 î8£î= î=eî=kï ½ÿ¸ êq?€`½À6(DISPLAYGRAPHGRAPHSTREAMCLIP/REGTRANS)PutthespecifiedgraphonSTREAM(whichcanbeanyimagestream)withcoordinatestranslatedtoTRANS.SomestreamsmightalsoimplementCLIP/REGasaclippingregion.Thisisprimarilyanefficiencyhackforthedisplay.GRAPHERnowallowsnodestobe"boxed"withbordersofarbitraryshadesandwidths.Bordersworkforregularlabelsandbitmaplabels,butnotforimageobjectlabels.TheoldgraphnodefieldBOXNODEFLGhasbeenrenamedNODEBORDER.Ittakesthefollowingvalues:NILnoborder,asbeforeTblackborder,1pixelwide,asbefore0noborder1,2,3...blackborderofthegivenwidth-1,-2...whiteborderofthegivenwidth(ws)wherewisafixpandsisatextureorashade;yieldsaborderwwidefilledwiththegivenshades.Anewgraphnodefield,NODELABELSHADE,containsthebackgroundshadeofthenode.ThisallowsGRAPHERtorememberwhenanodeisinverted.Whenanodeisdisplayed,thelabelareaforthenodeisfirstpaintedasspecifiedbyNODELABELSHADE,thenthelabelisprintedinINVERTmode.Thisdoesnotapplytolabelsthatarebitmapsorimageobjects.Thelegalvaluesforthefieldare:NIL(sameasWHITESHADE),T(sameasBLACKSHADE),atexture,orabitmap.(RESET/NODE/BORDER)(RESET/NODE/LABELSHADE)Thesefunctionsresettheappropriatefieldsinthenode.Ifisadisplaystreamorawindow,theoldnodewillbeerasedandthenewnodewillbedisplayed.Changingthebordermaychangethesizeofthenode,inwhichcasethelinestoandfromthenodewillberedrawn.TheentiregraphmustbeavailabletoRESET/NODE/BORDERforthispurpose,eithersuppliedastheargumentorobtainedfromtheGRAPHpropertyof,ifitisawindow.BothfunctionstaketheatomINVERTasaspecialvalueforand.Theyreadthenode'scurrentborderorshade,calculatewhatwouldbeneededtoinvertit,anddoso.LAYOUTGRAPHpreviouslyuseda1-pixelblackboxtomarkcertainnodesinordertoindicatewhereithadsnappedlinks.Thatisstillthedefaultaction.However,theappearanceofmarkednodescanbecontrolledbyadding(MARK....)totheFORMATargumentofLAYOUTGRAPH.Thetailof(MARK....)isapropertylist.IfthepropertylistisNIL,markingissuppressedaltogether.IfaBORDERpropertyisspecified,thevaluewillbeusedastheNODEBORDERofmarkednodes.IfaLABELSHADEpropertyisspecified,itsvaluewillbeusedonthemarkednodes.Ofcourse,youcanspecifybothaBORDERandNODELABELproperty.LAYOUTGRAPHwillread,butnotchange,thefieldsNODEBORDERandNODELABELSHADEofthenodesgivenit(exceptforthemarkednodes,ofcourse).Thus,ifoneisplanningoninstallingblackbordersaroundthenodesafterthenodeshavebeenlayedout,itsagoodideatogiveLAYOUTGRAPHnodesthathavewhiteborders.Thiswillcausethenodestobelayedoutfarenoughapartthatwhenyoublackentheborderslater,thelabelsofadjacentnodeswillnotbeoverwritten.Whenagraphnodeiscreatedbytherecordpackage,thedefaultvaluesarenowtakenfromthevalueofthefollowingvariables:DEFAULT.GRAPH.NODEBORDER,DEFAULT.GRAPH.NODELABELSHADE,andDEFAULT.GRAPH.NODEFONT.GRAPHERinitializesthesetoNIL.Togetthebenefitsofthisnewfeature,theuserwillhavetorecompilefunctionsthatcreategraphnodesFLIPNODEnowinvertsaregionthatis1pixelbiggerallaroundthanthenode'sregion.Thismakesitpossibletoseeblackbordersafterthenodehasbeenflipped.LAYOUTGRAPHtakesanewformattoken.AddingREVERSE/DAUGHTERStothelistofformatitemswillreflecthorizontalgraphsvertically,andverticalgraphshorizontally.î=kï ½î êïgsî ôïh„rî Ëïh„î ôïbsî úïbî ôï`œ îˆîÃî Úî(î--ï`œî ôï_î pîËîáîõîïî!î%žî(Qî*?î,Ýî1î66î9, îA îG¿îIUîIUï_î ôï]–îZî²î¯î îóîéî&Üî.î/Ñî0îî6Wî;%î;}î>Šî?êîEÁîG¯îG¯ï]–î ôï\ îkîØîòîMî,ï\î ôïZ�î úïZ�î ôïY îîîiî©î?î -î&î(÷î.?î/Õî5‰î:mî=,îBîB]îGÆîGÆïY î ôïWŠî cî}îaîtî3îàî$Uî&¼î)#î+= î3bî7×î8/î:ùî=KîD—îG¢îG¢ïWŠî ôïV îÝî{îÿîõ î*î*×î+ÿî/¸î2î8,î<§ïVî ôïT„î Lî ¤î üî Tî ¬îêîäîÞî«îÎïT„î ôïSî Lî ¤î üî Tî ¬îêî¯î©îÆîîÎî!›î%¾ïSî ôïQ~î Lî ¤î üî Tî ¬îêîàîÚî ïQ~î ôïOûî Lî ¤î üî Tî ¬îàî¥î=îÓî .î#õî'jïOûî ôïNxî Lî ¤î üî Tî ¬îàî›î3îÉî $î#ëî'`ïNxî ôïLõî Lî ¤î üî Tî ¬î …îêî)î‰îéîî®îmîuîÕîòî$½î&jî'‡î,î0î18î5Ðî70î:~î=áî@×îC2îFùîFùïLõî ôïKrî(î@ïKrî ôïIïî úïIïî ôïHlî >î4î€îíî&ºî,„î.ß î6åî;î<¯î? îBüîCTîFaîJ·îJ·ïHlî ôïFéîî§îyî@î]î!íî#Mî),î)„î-�î.ªî2:î3š î:aî<¼î@îCJîEdîG¿îG¿ïFéî ôïEfî „îäî¢î¼î‰îŸî xî.Eî1qî3Ìî7/î8�î=hî>éîDDîHŽîHæîHæïEfî ôïCãî îpî×îžî4îGîî!uî&Òî(î,³î2î2fî50î8“î<þî?îAsîD~îGFîIÎîIÎïCãî ôïB`î(îõ îIî}î±î!~ î, î-'î2Tî4î5î9ÛïB`î ôï@Ýî úï@Ýî ôï?Zî©î™î%‘î+�î18ï?Zî ôï=×îìî"Üî(pî.£ï=×î ôï=îB9îFMîI¼îI¼ï9Nî ôï7Ëî âî×îmî#©î%Ãî(aî.Xî2Tî8î9âî<=îA±îH îIÍîIÍï7Ëî ôï6Hîßî"î}î¸î mî"î(qî)Žî*«î, î-(î2½î3î6nî<±î?ºîBîE™îE™ï6Hî ôï4ÅîOîî9îîÌîæî"Þî%�î+“î+ëî/eî2œî4÷î9™î>’îC*îD×îImîImï4Åî ôï3Bîîvî¡î�î©î ?î$&î%¥î(dî*^î,Gï3Bî ôï1¿î úï1¿î ôï0< îÏ î£îî /î$Åî(Šî+>î,Ôî0Xî5î9Yî:Úî>¡î@7îE�îIÜîIÜï0<î ôï.¹î î Ðî¦îKî£îÚî:î·î!î%Èî*sî*Ëî1î3s î;`î<öîBîFPîIîIï.¹î ôï-6î â î©î‚î;îî nî"î$_î*Žî0ýî2“ î=Ðî>(î>€îAJîC„îEîIôîIôï-6î ôï+³î Mî ­îÊîîî^î†îáî –î"»î$î'î,ƒî-ã î5� î<Ïî='î>Oî?lîE£îE£ï+³î ôï*0î©î î�îÜî—îÿî!íî%\î')î)„ î3¬î5Bî:\î>þî?Vî@~îA›îA›ï*0î ôï(­ înî#îƒ î ûî"Èî&ƒî(ëî*Ùî.Hî0Bî2�î7·î‰îC£îFMîIîIï(­î ôï'*îÌîî!îXîî$Ìî*‘ï'*î ôï%§î úï%§î ôï$$ îÏî7îÐî7îžî%î'uî+0 î5Xî8 îE‚îGîIsîIsï$$î ôï"¡î4îûîî0îJî¥î!¿î&aî'÷î-Šî-âî1Êî2çî5¦î7î<èî>â îDïîH´îH´ï"¡î ôï!î<î!î|î¼îüî Wî$—î'úî+~î/9î2î3Ïî4ìî8ˆî;“î=)î@î@ï!î ôï› îÏîî×î:î"õî(Ÿî(÷î,î.lî2”î4ïî9/î:Åî<³î@nîBÕîDãîJîJï›î ôïî ˜î`î'îÑî,î‡î#Ïî'\î)·î-Êî/`î53î9sî;Ûî>Bî@0 îG¶ïî ôï•î úï•î ôïî ýîîfîÆîôîÍî!(î%´î+Þî.9î2ïî7Zî9Àî<Âî@œîCßîF:îIõîIõïî ôï�î Šî åîþ îlî0ëîJ­îJ­ï�î ôï î ³î!î!gî(„ î.¼î2Œî4"î7 î7dî9iî;Äî>îC…îEîG¹îJ¯îJ¯ï î ôï‰î,î‡î©îîtî î"°î(óî+»î0 î7Âï‰î ôïî úïî ôïƒî(î*îÁîÞîJî!î"rî#�î&çî+Sî- î2î51î7Œî<.î@üîATîDaîHÖîIóîIóïƒî ôïî”î*î¼î�îÉî î"dî%ôî(’î,î0Óïî ôï}î úï}î ôïú îÏîˆî¥î›î!î%Xî%°î*–î:Æî<\î>·î@ÜîBrîFçîJ¢îJ¢ïúî ôï wî \î¹ îkî/ î"‘î%Pî*Hî/ î6Öï wî ôï ôî úï ôÿ I êq?€`½¨é HELVETICA ~GACHA é HELVETICA ~GACHA ’  ÿ# ç0 ã; 2H¿j/KIÿÿ�î·ÿÿÿÿÿÿ){ERIS}HARMONY>LIBRARY>GRAPHER.TED;3SANNELLA17-Dec-84 14:59:09