Inter-OfficeMemorandumToCedarInterestDateOct1,1982FromDaveGifford,revisedbyMDSLocationPaloAltoSubjectCIFSManual(3.4)OrganizationPARC/CSLXEROXFiledon:[Indigo]Documentation>CIFSManual.(tiogapress)CedarInterimFileSystemAbstractTheCedarInterimFileSystemprovidesbasicfilestorageanddirectoryservicesinsupportoftheCedarProgrammingEnvironment.ThismanualdescribestheCedarInterimFileSystem'sconcepts,facilities,andinterfaceintwoparts.ThefirstpartofthemanualisintendedforthecasualCedaruseranddescribesbasicfilesystemconcepts.ThesecondpartisintendedforprogrammerswhowillmakedirectuseoftheCIFSprogramminginterface.TheappendixcontainsanexampleprogramthatusesCIFS.PartA:UsersGuideA.1ConceptsCIFSisaclientfilesystem;itrunswithCedarandprovidesaunifiedviewofserverfilesystemssuchasIFS,Juniper,andMaxc.Likeotherfilesystems,CIFSimplementsthefileasthebasicobjectforlong-terminformationstorage.InCIFSafileisanarrayof512bytepages.Clientscancreate,read,alter,anddeletefiles.Filesarecatalogedindirectories.Adirectoryisasetofentries,andeveryentryhasanentrynamethatisuniquewithinitsdirectory.Anentrydescribeseitherafile,adirectory,oralink(linkswillbediscussedlater).Everyentrycanincludeacomment,whichisatextstringthatisnotinterpretedbyCIFS.Likefiles,directoriescanbecreated,examined,altered,anddeletedbyaclient.Wheneveradirectoryiscreateditmustbepermanentlycatalogedinasingleparentdirectory.Thisrequirementcausesdirectoriestobearrangedinatree,andappropriatelyenoughtherootofthetreeiscalled1pqîïa¸ î!ƒ pî ìï]Ðîï]Ðîî+¯ï]Ðî6ï]Ðî8¦î:3î ìïYèîïYèî¢î î$·î&³î6ïYèî@[ïYèîCtî ìïVîïVî¸îÎî+¯ïV î6ïVrî{ïNVpî ìïDYî ŠîïDYð.î6„sî$ï8î"[î+î0&tî ®ï,Xpî ®ï)Ñî•î¼îÀî¦î tî&î)”î, î0Îî3”î9uî>�î@LîEgîG/î ®ï(*î¶ îC î"Pî%Zî*4î0 î2\î6dî;Iî>îC›î ®ï&‚ îrî2îàî—îLî#¢î&ƒî)dî,Pî.î0{î5mî6âî<§î>íîAUîEwî ®ï$Ûî¾î�îŒîî—î#)î)Ïî,¾î1gî4bî5åî;¸î> îF‹î ®ï#4î8îÌî�îâîzî¹î M î(¿ î/î1·î7•î<Øî>¨îDî ®ï!Œî|îutî ®ïîÇî­î�uî ®ï~î8pî ®ï÷î~îuîKï÷îæï÷îî†pîUï÷înï÷îàî#î&Mî*�î-Tî2ÿî4Dî9îJï÷î>Îï÷îBGîD·pî ®ïOîîÔîîƒî]î"Kî%žî)`î+íî1hî5@ î<Íuî?PïOî?¿ïOpîAÈïOîBmïOîC™îFî ®ï¨îÅîîV î ßî&jî(9î+ìî-î/}î0èî2×î6^î8î:ªî=¹îB]îGî ®ïîî{îùî°î½î ®ïyî îaîwuî'ïyî×ïy pî ïyî!ïyî#î(áî*Oî+{î-™uî/Tïyî/ïïypî3$ïyî4ïyî6¼î:rî>î@uîBqïyîC ïyîEëpî ®ïÒî|îèî‘îÖî± î"`î$³î(Gî.0î2î3Gî6 î73 î=]î?"î@LîCîFäî ®ï+î”î’î÷îãî lî"ìî'Áuî(àï+î){ï+pî.!ï+î.óï+î2öî4Wî5vî8#î;îî>±î@îB| î ®ï ƒîŽîçîûî& î¹î"(î#þî)î/€î4Oî6ëî;¤î=„î>’îB÷î ®ï Üî Áî}îÓî†îÆîîó î'Öî-Ôî/lî0€uî4Uï Üî5ï Üî8rpî=‰ï Üî>½ï ÜîAÁ î ®ï 5î÷ îµîsîtî!?î"ýî$6î'aî*( î2«î7¥î:î=î>ÛîAJîDîE˜vî)Èïö¾TVm$ÔïÐî €î Z îîYîìîÓî!¿î"èî%¨î&Ò î,ûî.¾î/çî2³î6|î9'î;îA îE™î=ï(îÜî rî]uî‘ï(î,ï(pîÒï(îºï(îÓîJîî!Bî%#î'ütherootdirectory.Everydirectoryandfilecanbereachedfromtherootdirectory.Anobject'sabsolutepathnamespecifiesthewaytheobjectisreachedfromtheroot.Thus,absolutepathnamesareunambiguous.Examplesofabsolutepathnamesare:/indigo/cedar/top/rigging.df!2/phylum/lad/bookpress/Byconventiontheleadingslashonthesenamesmeanstheyarerelativetotherootdirectory.SubsequentslashescauseCIFStowalkdownthetreeofdirectories.Directoriesthatarechildrenoftherootdirectorycorrespondtofileservers.Thiscorrespondencedetermineswhereachildoftherootanditsdescendantsarephysicallystored.Thus,/iris/mesaisstoredonthefileservernamediris.Alinkisadirectoryentrythatpointstoanotherdirectoryentry.Theentrypointedtoiscalledthetargetofthelink.Linksarenamedbyabsolutepathnamesinthesamemannerasfilesanddirectories.Anexampleofalinkis:/ivy/cassatt/history/paint.tiogatarget/louvre/renoir/paint.tiogaAreferenceto/ivy/cassatt/history/paint.tiogawillberesolvedto/louvre/renoir/paint.tiogabyCIFS.Oncealinkisestablisheditstargetcanbechanged.Thus,linksarethebasicindirectionmechanismofCIFS.CIFSrestrictslinkstopointatfileentries.Thiswouldbetheendoftheconceptssectionexceptthatitisverycumbersometoalwaystypeabsolutepathnames.Thus,CIFShasamechanismcalledpathnameexpansionbuiltintoitthatallowsclientstoabbreviatenames.Ifapathnamedoesnotbeginwithslashitiscalledarelativepathname.Suchnamesareinterpretedrelativetoacontextthatincludessearchrules(describedlater)andasingleworkingdirectory.Relativepathnamesareinterpretedrelativetotheworkingdirectory.Forexample,iftheworkingdirectoryis/ivy/jeffersonthentherelativepathnamecongress/constitution.tiogaisexpandedbyCIFStotheabsolutepathname/ivy/jefferson/congress/constitution.tiogaInadditiontotraversingthetreeofdirectoriesoutfromtherootdirectoryCIFSisalsowillingtoworktheotherway.ThebackslashcharactercausesCIFStotraverseinreverse.Considerthepathname:/ivy/jefferson\\indigo/franklin/kite.tiogaThefirstbackslashtellsCIFStogobackupto/ivyandthesecondbackslashcausesittogobackonemoreleveltotheroot.Thisfacilityisintendedforuseinrelativepathnames.Forexample,iftheworkingdirectoryis/ivy/freudthenCIFSexpands\skinner/rat.mesato:/ivy/skinner/rat.mesaAclientcanthusgoupanddownthedirectorytreeandusetheworkingdirectoryasaconvenientreferencepoint.Thereisonefinalmechanismthatisbroughtintoplayforrelativepathnamesthatonlyconsistofanentryname(e.g.thepathletter.tioga).Ifthepathnamesafile,andthefileisnotfoundintheworkingdirectory,alistofotherdirectoriesistriedinturn.Thislistofdirectoriesiscalledthesearchrules.Logicallytheworkingdirectoryisthefirstmemberofthesearchrulesbecauseitistriedbeforeanyoftheotherdirectories.Forexample,ifthesearchrulesare:/ivy/ravel(workingdirectory)/ivy/beethoven[1]/ivy/debussy[2]2pî ®ïb)uî ïb)î‘ïb)îçpîþïb)î_ïb)îUî"'î$Þî'Gî)Òî+Ãî0åî4Lî6«î9™ î ®ï_ªîóuîÚï_ªîŠï_ªîîpî«ï_ªî /ï_ªî%î'hî*2î,ƒî0Žî1ìî7î:Yî<ªî@XîD î ®ï^îÔîîk îÐî&î'Èî-7î0]î4¡îoï[„îoïYî ®ïV†î îXîõîî!¢î#æî'®î,0î0²î4î6’î;¯î=›î@9îCf î ®ïTÞ îîŸîUî î!¸î$þî(Èî+(î-êî/£ î ®ïR_ îÆî¦î î�î Kî"½î%¼î+  î2Îî4�î7 î<šî?Æ î ®ïP¸ îºîØîî€î?î ¤î#˜î&Uî(5 î/Ýî26 î8�î=¨uîA„ïP¸îB4ïP¸pîH#ïP¸îH†ïP¸î ®ïOîÑî×î7î î¬uî 3ïOî –ïOpî ®ïL’uî6ïL’î™ïL’pîïL’îeïL’îjî�î^îíî¸î#×î%‚î*‰î0Wî4¾î7’î;"î@*îAÔîC<îG/uî ®ïJêpîÈïJêî„ïJêî¸îMîbîmî÷î$´î&æî,‹î/çî4aî6Fî8Ûî<�îAÏîC´îFØî ®ïIC î8î‹îî½îæî!³îoïFÄuî1ïDEpîïDEîÆïDEî ®ïAÆî&îuîªïAÆî[ïAÆpî(‚ïAÆî)€ïAÆî+î,öî2Puî3êïAÆî4›ïAÆpîC›ïAÆîDbïAÆîEƒî ®ï@î<îUîîl îcî-î!þî$xî&Xî,‚î0Hî3ˆî5Ëî8î;| îB\î ®ï>wîgî÷î¬îÂîî Áî$`î%ùî(bî ®ï;ùîèî6îGîÆî�îvîöî%±î*nî.Þî1Ìî3Bî4Îî7ý î@,îAúîFî ®ï:Qî4îsîÃî²î"~î% î&Nî-˜uî1¨ï:Qî2Xï:Qî4Òî8Žpî?ï:Qî?Éï:QîBbîERîFÁî ®ï8ªîæî6îð îªî"àî$mî%¢î(Ôî,Ÿî/Úî2[î61î9Wî<¿î> î?—îCšuîDÏï8ªîESï8ªî ®ï7î×pî÷ï7î…ï7îîlî× î&î*öî,¼uî-ýï7î.˜ï7pî2äï7î3Sï7î5Êuî;Eï7î;Éï7î?ŒpîBëï7îCdï7î ®ï5[îcî0îpuîrï5[îYï5[îÁ pî$fï5[î%oï5[î)àî-î1vî3à î; î?ýîAÂîD8î ®ï3´ îàîÎîáî…î!&î&Àî,Ôuî.‚ï3´î/3ï3´ pî7;ï3´î7ªï3´î:¤î=FîBfîEÏuî ®ï2 pîÑï2 î4ï2 î=î$~î&yî*.î+Üî.<î3ªî6Ñîoï/Žð*î ®ï-î‹î îÆ î*î˜î!iî#1 î)îî,rî/èî2Vî5Sî;3î>÷î@qîCLîGàî ®ï+gî"îzîî´î„î"›î(|î,®î0Zî2î7î8¿î>=îDîFhî ®ï)Àîoï'Að*î ®ï$Âî�îrî›îˆîGî ÿî"ùî&Jî(guî*ï$Âî*Ðï$Âpî-ï$Âî-§ï$Âî/Ãî2,î6Èî<ñîA5îB•îDNîFHî ®ï#îcîîPîîqîOî!sî&î'yî-?î/†î2î3½î8¥î;ÕîA îC¾î ®ï!sîînîÅî—uîï!sî³ï!spî#†ï!sî#õï!sî&¬î*auî/¹ï!sî0Cï!spî:¥ï!sî;ï!sîoïôî ®ïuî:îûî†îŒî|îŽîFî"î$qî*Cî-î/½î22î4’î9éî?»îAiîB“ î ®ïÎî«î ®ïOî¶î)îÛîîLî"!î#“î(Òî+±î.¼î1î5æî9î=^î@3îCSîGÖî ®ï¨î¢î9îýîîfuî�ï¨îóï¨ pî%Dï¨î&«ï¨î(1î*”î-¾î2î33î5ùî8´î;î=„î>ôîAlîE~îG/î ®ïî$ îmî¶îîêî!© î(vî*î-gî/4î3Sî6Œî8éî:Á îAŽîCîG/uî ®ïYîópî¶ïYîBïYîIî¾î#+î)î*”î- î/÷î5zî7Iî9¾î>îA€îF·îH#î ®ï²îôîDîäî�îýîœ î&&î(Ñî.¢î0î2cî6œî9ùîoï3 î&°ï3î,� îoï ´ î.qï ´îoï 5 î.qï 5vî)Èïö zTVm$îAÕîD8î=ï"Pî 1î ÀîBî=îÎîªî,î ‰î$î)Mî*Æî,Tî/¾î40î6ôî8Ïî;Rî? îFãî=ï ¨î î nîÎîîdîþï* î?ï*î% îþï« î'ï«îþï, î'ï,î=ï®uîÛï®î vï® pîÂï®îÀï®îðîáî!îþï/î=ï±uîôï±îçï± pî<ï±î:ï±îkî[îœîþï2î=ï ³î :î ˜î˜î)î•uî=ï 5îÇ vî)Èïö TVm$ñThenemperor.musicwouldbeexpandedto/ivy/beethoven/emperor.musicandLaMer.musicwouldbeexpandedto/ivy/debussy/LaMer.musicassumingmymusicalhistoryiscorrect.A.2PragmaticsItwouldbeniceifyoudidnotneedtoknowanythingabouthowCIFSworked,butalasthereareafewimportantthingsthatwillhelpyoucomprehendwhatisgoingonwhensomethingfunnyhappens.CIFSmakescopiesoffilesanddirectoriesonthelocaldiskofthemachineyouareusing.Thesecopiesarecatalogedbyaninvisibledirectorycalledthelocalsystemdirectory(orLSD).ThelsdcommandcanbeusedtolistthecontentsoftheLSD.Whenyoualterafile,thechangesarenotreflectedatthefile'spermanenthomeuntilyouissueabackupcommand(seeSectionA.3).Thishastwoimportantconsequences.First,iftwopeoplemodifyafileorupdateadirectoryatthesametimethelastonetodoabackupwins.Thecatalogcommandwillfixanydirectoryproblemsthatmightresult,butingeneralconcurrentmodificationofafileoradirectoryisnotagoodidea.Second,ifyoumodifyafilethatyoucannotwriteonCIFSwillnotcomplainatthetime.Whenbackuprunsitwillbeunabletocopyyourmodificationtothefile'spermanenthome,andyouwillhavetocopyyourmodificationsoutofthefileandusetheresetcommandtoflushthechanges.CIFSsupplementsthedirectorysystemsoffileserverswithitsownsetofdirectories.Iftheabsolutepathnameofadirectoryispath,thentheCIFSdirectoryisstoredinafilecalledpath/dir.bt.ThecatalogcommandwillinitializeexistingdirectoriesforusewithCIFS.ThemkdircommandautomaticallyinitializesCIFSdirectoriesandcatalogisnotneededinthiscase.Inordertousefilesinnon-CIFSdirectoriesthefile'sabsolutepathnamemustbegiven.Forexample:/iris/redell/pilot/paper.pressForcompatibility,thedirectory/localreferstothePilotCommonSoftwareDirectory.A.3HowtouseCIFSCIFSisintheCedarbootfile.TouseCIFScommands,type:runfilesystemcommandsTheUserExecwillthenunderstandthefollowingsetofsimplefilesystemcommands:asrpathAddsthedirectorypathtothebeginningofthesearchrules.backupCopiesallofthefilesthathavebeenmodifiedtopermanentstorage.catalogpathInitializeaCIFSdirectorysystemonthedirectorytreethatstartsatpath.IftherealreadyisaCIFSdirectorysystem,itischeckedforconsistencyandrepairedifnecessary.commentpathcommentReplacesthecommentontheentrypathbycomment.Ifcommentisnotspecified,thecommentonpathisdeleted.3pî ®ïb)uîLïb)îçïb) pî3ïb)î1ïb)îaîRî%’îoï_«î ®ï],uîeï],îXï], pî­ï],î«ï],îÜîÌî$ îoïZ®î ®ïX0î«î î îšî uî ®ïU±î8 pî ®ïS3î$îQîAî/î�îEî¹î -î#‰î%7î(õî.¥î2†î5‰î9=î>}î@ýîC³îG;î ®ïQŒîîËîVî˜î�î!eî$©î'Š î/¢î3)î4¾î8²î:âî>ÀîE�î ®ïOäî ®ïMfîpîµîñî¸î³î w î'3î)Gî+³î/î2î3Éî66î;Èî>Œî@íîE�î ®ïK¿îöîdî’î¨î³î#Fî)2î-Duî/½ïK¿î0!ïK¿î3î7Œpî=BïK¿î=»ïK¿î?šîDutîGhïK¿îGËïK¿pî ®ïJîîšî‹îÆîuî²î!î&�î(:î*™î ®ïG™îÍîŒî¹îêî´îî"Oî$ªî''î,Ôî.tî0Üî4)î;î>ôîBBîEîHetî ®ïEòpî‚ïEòîïEòîî÷îùî$)î'gî)ÿî,Îî3S î<þî@ÀîBDîEî ®ïDJîiî�î÷î¹îJîqî"Aî#×î&4î)°î,Óî/0î1®î4Wî6î8tî9/ïDJî9àïDJpî=ßïDJî>ÜïDJîAætîD¼ïDJîEbïDJpî ®ïB£îîÌîæî�î jî&{î)Rî-Sî1î4 î5Àî:› îA‹ î ®ï@üîqî¤îîæîîõîkîêî î#šî'ƒî,ºî.$î0åî5¬î6àî9Tî<,î>íîA‚îDîG‰î ®ï?Tî[îþîlîbîóîKî#=tî'Nï?Tî'þï?Tpî+øï?Tî,|ï?Tî/ î0Yî2ýî4æî9fî; î>WîA‹ î ®ï=­î_îÁî îòî#î!Ýî$—î'Eî*Žî,?î/”î2Ò î;]î=Õî?‘îAôîD`îGî ®ï<tî ï<î‘ï<pîiï<îï<îÊîyîìî Kî ®ï9‡îN î*îuî 4î%î&Åî)î-—î0žî2eî5Uî7^î9 î@fîAÔîD î ®ï7àîÕî–îPî{îNuî»ï7àîkï7àpî Iï7àî!&ï7àî$Nî&®î*dî07î1¤î5Èî7xî8£î; uî?ï7àî?¶ï7à pîETï7àîF·ï7àtî ®ï69pîÓï69înï69îˆî† î!hî&Å î-Çî0Wî3 î6Žî;Ätî>ðï69î@ï69pîC.ï69îCÉï69î ®ï4‘ î î3îè î%–tî(Mï4‘î(óï4‘pî- ï4‘î-ƒï4‘î.Œî1î5Êî7xî:î ®ï2î©î‰îdîîîøî"› î)uî,î/rî5 î8_î`ï€î?¸ï€îA6îD»î1ïÙîœîÆî{îMî# î$vî%âî+0î-m î4 î7Xî<Æî>' tîoïZwîUïZîïZîopî1ï Üîî™î Âî"éî%iuî)ï Üî)Îï Üpî,Qï Üî-ï Üuî.mï Üî/ï Üpî3®ï Üî5Pï Üuî6òï Üî7�ï Üpî<Øï Üî=;ï Üî>eî@ú îG/î1ï 5î9uî@ï 5îðï 5pîRï 5îµï 5î½vî)ÈïTVm$³îëî�uî ïpî»ïppcdpathChangestheworkingdirectorytobepath.CIFSDeletepathIfpathisafileitisdeleted.Ifpathisalinkitisdeletedbutitstargetisnot.IfpathisadirectoryanerrorissignalledddpathDeletesthedirectorypath.dsrpathDeletesthedirectorypathfromthesearchrules.groupresetprefixResetallfilesthatwhosenamesbeginwithprefix.linkpathtargetCreatesalinkcalledpath,andmakesitstargetpathtarget.ls[pattern][-dirpath][-patpattern]Listtheentriesindirectorypath.If-dirisnotspecified,theworkingdirectoryisassumed.Thepatterncancontainregularcharactersandthereservedcharacters"*"(matchanysequenceofcharacters)and"#"(matchanyonecharacter).lsdListthecontentsofthelocalsystemdirectory.Thelistingisprintedinthefollowingformat:AbsolutePathname(timelastmodified){Dirty}If{Dirty}isnotpresent,thenthelocalcopyofthefilehasnotbeenmodified.lsrListthesearchrules.makepathAsimplewayofcreatingatextfile.mkdirpathCreatesadirectorycalledpath.pbfPrintsthenumberofpagesthatCIFSwilltrytokeepfree.pwdPrintstheworkingdirectory.CIFSRenamefromPathtoPathRenamesthefilenamedfromPathtobenamedtoPath.resetabsolutePathDiscardsanyupdatesthathavebeenmadetoabsolutePaththathavenotbeenpermanentlyrecordedwithbackup.absolutePathmustbeanabsolutepathname.sbfpages4tîoïb$wîIïb$îúïb$pî1ï_§îÀîîvî%Hî&öuî(çï_§î)˜ï_§tîoï]* wîï]*î´ï]*pî1ïZ¬uî¯ïZ¬î`ïZ¬pî¾ïZ¬î!ïZ¬î&îMî³îînî$uî%—ïZ¬î&GïZ¬pî(¥ïZ¬î)ïZ¬î*î+4î-ýî/Pî0¹î5Šî8î9ßî=½î?%îBouîCîïZ¬îDžïZ¬pîFýïZ¬îG`ïZ¬îHeî1ïYîîóîeîÐtîoïVˆwîTïVˆîïVˆpî1ïT îîzuîLïT îüïT tîoïQ�wî·ïQ�îhïQ�pî1ïOîîzuîLïOîüïOpî"^ïOî"×ïOî%Åî($î,^uî/6ïOtîoïL’ wî'ïL’î×ïL’pî1ïJîüîìîÚî¨î!Öî&î)äuî,ÿïJî-°ïJtîoïG˜wî0ïG˜îàïG˜îJpî1ïEîîDîuîïEî¸ïEpî!–ïEî"rïEî%)î)bî+<î/uî2DïEî2´ïEtîoïB�wîæïB�îTïB�îtîíïB�î\ïB�wîxïB�î(ïB�îî Fpî1ï@ îéî>î¥îIuî#ï@ î#Áï@ pî%žï@ î&êï@ î(bî+î,fî.Ñ î4Üî71î<~îBFîC¨î1ï>xî=î/îîî"î&ç î-ˆî0sî3î8³ î?TîBîFîî1ï<ÑîîÒ î ¸î#pî&¶î+Sî-ôî0Ÿ tîoï:Tpî1ï7Öî%î·îYîDî!Öî%Oî)ý î1î4î8eî:î? î@êîC|î1ï6/uîòï3²î iî#êî&wî,kpî1ï14î³î½î)îžî!Êî$ñî'Pî*–î-èî/¡î2î4jî6ßî9Tî<±tîoï.·pî1ï,:îóîRîŒtîoï)¼wîï)¼îÈï)¼pî1ï'?î½î"îúî³î!êî#î%Ìtîoï$ÂwîZï$Âî ï$Âpî1ï"DîîDîuî" ï"Dî"¾ï"DtîoïÇpî1ïIî(î‡î³îlî#7î&î)ºî,eî.�î0<î3�tîoïÌpî1ïOî(î‡îÞ tîoïÑ wîëïÑîZïÑîôpî1ïTî#î‚îìuî!rïTî!áïTpî'uïTî'äïTî)#î+uî/šïTî0 ïTtîoï×wîËï×î|ï× pî1ïYî½îOîXî"î%Oî(�î,Ouî-ïïYî.ŸïY pî5éïYî6XïYî8©î;áî>GîA– î1ï ²îítîï ²î¸ï ²pî5ï ²uî •ï ²î!Eï ² pî(žï ²î)Èï ²î,î-÷î/çî5Vî8|tîoï 5wî¡ï 5îQï 5vî)Èïö¥TVm$"wîzï*Žîéï*Žîƒpî Àï(î²îî{uîï(îpï(pî ï(î sï(î!²î#£uî()ï(î(šï(tîþï%“wî Zï%“î ï%“ pî Àï#îlîîGî'î€î!îî%Àuî'€ï#î(0ï# pî/›ï#î0 ï#î2{î5Óî8Zî;È îCÓî Àï!otî Úï!oî‹ï!opîï!ouîhï!oîï!o pîqï!oî›ï!oîÙî Êî"ºî()SetbasefreepagessetsthenumberofpagesthatCIFSwilltrytokeepfree.Ifnoargumentissupplied,CIFSwillensurethatthereareenoughfreepagesaccordingtothecurrentsetting.SettingthenumberofbasefreepagestobemorethanthesizeofthelocaldiskwillcauseCIFSnottocachefiles.swapfileafilebSwapthecontentsoffileaandfileb.wherepathAppliespathnameexpansiontopathandprintstheresult.typepathTypesthecontentsofpath.unlockEmergencybruteforceunlockofallfiles.A.4TheSalvagerCIFSincludesasalvagerthatwillrebuildtheLSDfromtheleaderpagesofallfilesonthedisk.ThesalvagerisinvokedbybootingCedarwiththe"l"switchandansweringthequestionsintheobviousway.SalvagingcantakeseveralminutesonaDorado.PartB:ProgrammersGuideTheprogrammer'sinterfacetoCIFSisimplementedbythreedefinitionsfiles:CIFS,CIFSFeedback,andFileLookup.Thesefilesarereproducedbelow,withthecommentsinthefilesservingasitsdocumentation.ThefileCIFScontainstheinterfacesofmostusetotheapplicationsprogrammer.CIFSFeedbackisforusebythe"Watcher".FileLookupprovidesaccesstoagenerallyusefulsinglepacketprotocolforinterrogatingIFSfileservers.--CIFS.mesaJune2,19826:55pm--InterfacetotheCedarInterimFileSystem.--CodedAugust,1981byD.Gifford--Lasteditedby--MBrownonAugust30,19821:06pmDIRECTORYAscii:TYPEUSING[NUL],File:TYPEUSING[Capability],Rope:TYPEUSING[ROPE];CIFS:CEDARDEFINITIONS={--PublicProcedures--OperationsthateveryonewillwanttouseOpenFile:TYPE=REFFileObject;FileObject:TYPE;--Thistyperepresentsanopenfile.--IfaninstanceisnotNIL,itrepresentsanopenfile.Context:TYPE=REFContextObj;--IfNILissuppliedasacontext,CIFSwilluseitsdefaultcontext5pî1ïb)îtîsî#îÒî Wî"›î'«î)Hî,÷î/©î3Aî5Ñî7Üî9oî<¤î@îA{îCeî1ï`‚îÁîÎî§î wî%î'ôî+¢î.î3(î6î: î@nîBAîDÅî1ï^Úî‰î=î¨î#ßî%¤î(Êî+¢î/xî12î3.î6Íî9þîî=î�î uîÅïN>î uïN>tîoïKÀpî1ïIBîXîî €î%î&¿î(¯uî ®ïFÄî8îûpî ®ïDFîwîïî.îƒîfî"&î'î)xî,ßî0Zî2Ïî7î:æî<³î>¸îAºîCÕîFIî ®ïBžî›îñîrîÈîÙî"ùî'&î*Vî,Ëî/(î3wî6Cî<Ïî?CîElîG/î ®ï@÷îÎî‚î¶îAî!;î%Ëî+î- î.3tî ®ï>yîÇî­ îpî ®ï;ûîo îî§î?î"Ýî$3 î,nî.Sî1Æ î8î;Ðî?Æ î ®ï:Tî~ î î'î.î!› î(þî-|î0°î3)î9Ðî;—î>îAîEíîG´î ®ï8¬ îüîÚîIî î%mî'Ó î.î/Áî3$î5Ÿî7Sî9¹ îAU î ®ï7 îîsî¦îîî T î'ÿ î/sî4÷î8ùî:œî;»îA–îE¤î ®ï5^î îwî´ î Ùî#�î%ùî ®ï0aî%î®îî�îÓî âî ®ï.¸î%îëîšîùîî!î#Ýî ®ï-î%î•î«îñîíîèî ®ï+gî%î)îXî ®ï)¾î-îóîùî·îôî!:î$Iî ®ï$Ãî ¶ï#î¡îÎî î ¶ï!qîî4îo î ¶ïÈîäîîLî ®ïwîÜîu î |î"aî ®ï%î%îi î ®ï|î% î+îùîÕî €î#Ýî%‹î ¶ï*îMîzî_î¼ î ¶ï� îôî¿ïØî6îPî` îâîÒî"Eî¿ï/î6î¸î¨îöîaîÖî Aî!— î(î* î-|î ¶ï Þîgî”îyîÕ î¿ï 5î6î¸îÊî6îÆîtîžî#Ëî'î*+î, î.zî3#vî)Èïý TVm$)îˆî î•îlî=ïC#î´î $î:î€î|îwî=ïAuî´î ¸î çî=ï?Æî¼î ‚îˆîFîƒîÉîØî=ï:ºîEï9 î 0î]î˜îEï7]î –î Ãîþ îEï5¯î sî îÛî=ï2Qî kî î îðî=ï.ôî´î ø î=ï-Eî´ î ºîˆîdîîlîîEï)èî Üî îîîK îEï(: î ƒîNï&‹îÅî ßîï îqîaîÔîNï$ÜîÅî Gî 7î…îðîeîÐî& î ¨î"™î& îEï!î öî#îîd îNïÑîÅî Gî YîÅîUîî-îZî î"ºî%/î' î+²îEïs î3îEïhî ÀîíîÒîEï¹î¼î ] îContextObj:TYPE;Mode:TYPE=CARDINAL;--anycombinationofmodescanbeused,butusefulsets--ofcombinatatonsare:--{read},{write},{write,create},{write,replace},{write,create,replace}--dontCheckcanbeincludedinanyofthesesetsread:Mode=1;--readmodesetsanon-exclusivelockonthefilewrite:Mode=2;--writemodesetsanexclusivelockonthefile--includesreadbydefaultcreate:Mode=4;--createmodewillcreateafileifitdoesn'texist--normallywriteandcreatemodesareusedtogetherreplace:Mode=8;--Imaginethatthefileopenedis"foo"--andthefilethat"foo"isstoredinisF--replacemodedoesthefollowing:--(1)itcreatesanewemptyfileF'atOpentime--(2)thisisthefilereturnedtotheclientbyGetFC--(3)atclosetimeitmakes"foo"pointtoF'--(4)Fismadetemporarysoitwillbedeletedatthe--nextbootdontCheck:Mode=16;--Iffileisonthelocaldisk,assumethatthecopyiscurrentanddon't--checktheremotesever--Usefulasaperformanceoptimizationforfilesthatare"immutable"maxPath:CARDINAL=200;--Maximumpathlengthis200charactersmaxComment:CARDINAL=300;--Maximumcommentlengthis300charactersClose:PROC[fh:OpenFile];--Closeafile--Errors:NoneConnect:PROC[name,password:Rope.ROPE];--Setconnectcredentials--Errors:NoneCreateDir:PROC[name:Rope.ROPE,c:Context_NIL];--Createadirectory--Errors:{illegalFileName,localDiskFull,noSuchDirectory,ConnectionErrors,--CredentialsErrors}Delete:PROC[name:Rope.ROPE,c:Context_NIL];--Deleteafile--FilesarecreatedbyOpen--Errors:{illegalFileName,noSuchFile,requestRefused,localDiskFull,--fileBusy,noSuchDirectory,ConnectionErrors,CredentialsErrors}6pî ¶ïa‘ î¤î ¶ï\›î1î^îCî ¶ïZóî-îÎ î¼îuîÏî"Zî$Kî'ßî*`î.yî ¶ïYLî-îæ î î ¶ïW¥î±î…î»îBî#Mî'Óî-™î2 î6zî ¶ïUýî-î)îµî¥î Lî!úî$šî&Sî)Ýî ¶ïTVîJîLî1î¿ïR¯î6îPî&îÇîñ î#�î&ˆî(Žî*îî ¶ïQî­î¯î”î¿ïO`î6î³î‰î*îî!÷î$ðî&öî)Vî¿ïM¹î6î™î´î°î ¶ïLî2î4îî¿ïJjî6î8îî¹î¼îæî"Oî#°î%î)Äî¿ïHÃî6îî„î;î >î$˜î&ëî*'î ¶ïGîíîïîÔî¿ïEtî6î�î[î»î$î"î#oî¿ïCÍî6îíîMî¶î„îYîÅî#èî%–î'î¿ïB%î6îôîÉîúîY î¿ï@~î6î]î³î:îdîRî Œî"õî$¹î&Qî*î¿ï>×î6î]îÿîjîÊî3î Îî"}î$Üî(œî*˜î¿ï=/î6î]îöî]î‚îÙî î#æî'…î)4î¿ï;ˆî6î]îÉî5îôî—î![î"²î%]î'Nî,"î-»î¿ï9áî>îNî ¶ï89 î,î.îî¿ï6’î6î¸î!î�î“îòî9î î%Gî(î*uî-Çî/3î3üî6´î¿ï4ëî6îîwîî¿ï3Cî6î¦îTî~ î‚ î'{î)¸î,¦î/tî1Ç î ¶ï/õîàî)îîÇï.Mî>îìîîLî ¸î#M î ¶ï,¦ îîdî!IîÇï*ÿî>îìîõî".î#šî&/ î ¶ï'°îúîjî îÇï& î>îî2îÇï$aî>îðî ¶ï!î©îî”î# îÇïkî>îžîµ îÇïÄî>îðî ¶ïu î›î î§ î%âî'zî,±î.>îÇïÎî>î¤îÍîÇï'î>îðî ï î)Äî4¸îÇïîÃî ¶ï1î•îî¡ î#Ûî%tî*«î,8îÇï‰î>î¤îÎîÇïâî>îšîîî·î³îÇï ;î>îðî ï î(�î2œ îÇï “îÃîgî"[î-Ævî)ÈïýÿÎTVm$¾&ÍîVï-î Íî3î\îVï+eî Íîî~ î"Sî-GîVï)½î RîEï&kî $î”î0 îjîî#:î$ÇîVï$Âî Íî3î]îVï#î Íî )î}îFîBîVï!pî Íîî~ î!î++ îVïÈî RîDeleteDir:PROC[name:Rope.ROPE,c:Context_NIL];--Deleteadirectory--Errors:{noSuchDirectory,directoryNotEmpty,ConnectionErrors,CredentialsErrors}GetFC:PROC[fh:OpenFile]RETURNS[fc:File.Capability];--ReturnsthePilotFileCapabilityofanopenfile--Errors:NoneGetPathname:PROC[fh:OpenFile]RETURNS[path:Rope.ROPE];--Returnsthepathnameofanopenfile--Errors:NoneOpen:PROC[name:Rope.ROPE,mode:Mode,c:Context_NIL]RETURNS[fh:OpenFile];--Openafile--Errors:{ConnectionErrors,CredentialsErrors,FileErrors,localDiskFull,fileBusy,--noSuchDirectory}Rename:PROC[from:Rope.ROPE,to:Rope.ROPE,c:Context_NIL];--Renameafile--Errors:{ConnectionErrors,CredentialsErrors,FileErrors,localDiskFull,fileBusy,--noSuchDirectory,fileAlreadyExists}Swap:PROC[filea:Rope.ROPE,fileb:Rope.ROPE,c:Context_NIL];--Swapthecontentsoffileaandfileb--Errors:{ConnectionErrors,CredentialsErrors,FileErrors,localDiskFull,fileBusy,--noSuchDirectory}--PublicProcedures--OperationsthatsomepeoplewillwanttouseAddSearchRule:PROC[path:Rope.ROPE,before:BOOLEAN,c:Context_NIL];--Addasearchrule--IfbeforeisTitwilladditbeforetheothersearchrules--Errors:{ConnectionErrors,CredentialsErrors,localDiskFull,noSuchDirectory}CopyContext:PROC[from:Context_NIL]RETURNS[c:Context];--Copyacontext--Iffromisomitted,CopyContextwillreturnacopyofthedefault--context.--Errors:NoneCreateContext:PROCRETURNS[c:Context];--Createanewcontextfortheinterpretationofnames--The"JerryBrown"Operation--Errors:NoneCreateLink:PROC[path,targetPath:Rope.ROPE,c:Context_NIL];--causespathtopointtotargetPath--wheneverpathisusedasafilename,itwillberesolvedto7pî ¶ïb! îœî î¨ î%âî'zî,²î.?îÇï`xî>î¤îÎîÇï^Ïî>îðî!”î.î9mî ¶ï[~î×îGîèî¿ïYÕî,î¡îÇïX-î>îvîÕîîó î%–î'Oî)@î,²îÇïV„î>îðî ¶ïS3 îÚîJîëî¿ïQŠî,î/ îÇïOáî>îvîÕî7î ðî"àî&SîÇïN8î>îðî ¶ïJçîúîjî î#@î'�î+êî-‚î2¹î4Fî¿ïI>î,îÍ îÇïG–î>î î3îÇïEíî>îðî" î-U î48 î= îÇïDDî>î ¶ï@óî�î îQ î$‹î&³ î.íî0…î5½î7IîÇï?Jî>î¬îÖîÇï=¢î>îðî" î-U î48 î= îÇï;ùî>î2î ¶ï8¨îåîUî@ î"zî&$ î.^î/öî5.î6»îÇï6ÿî>îôîSîÂî{î!Šî$AîÇï5Vî>îðî" î-U î48 î= îÇï3®î>î ®ï0\î%îi î ®ï.´î% î+îùîŒî î"³î&î'¾î ¶ï+b îîŠî � î(Çî-�î5uî7 îîYîƒî¼îÇï(î>îÀîî{îçî=îèî  î!öî&Eî(¥î,Dî0~îÇï&hî>îðî" î-U î6*î ¶ï# î—îîKî$‚î&î¿ï!nî,î(îÇïÆî>îóîîÇïî>îÀî'î“î î%iî(î,Cî-mî0¿î2xî4×îÇïtî>îÇïËî>îðî ¶ïz îHî¿ïÑî,î(îÇï)î>î¤îÍî»î�î Íî#- î+Ìî-…îÇï€î>îîDîdîÇï×î>îðî ¶ï † îaîÑî³ î$» î,õî.�î3Äî5QîÇï Ýî>îxîžîMîìîš îÇï 5î>îsî™îîAî ïî"î$‚î(šî)ðî,›î.Œî3úvî)ÈïöÿTVm$cî·îVï'ëî Íî3î\îJîî\î¼ î$[î&îVï&Aî Íî ¥îÓîóîVï$–î ÍîîEï!B î ðî`îB îJ î%„î'î,Sî-àîVï˜î Íîî-îÜî{î) îVïíî Íîî(î”îÐî~î¨îî!)î"î%*î'î,‰îVïCî Í îVï™î Íîîšî%ä î.¹îVïïî RîEïš î×îGîCîz--targetPath--Errors:{ConnectionErrors,CredentialsErrors,localDiskFull,noSuchDirectory,--linkAlreadyExists}DeleteContext:PROC[c:Context_NIL];--Destroyacontextfortheinterpretationofnames.--The"EdwardKennedy"Operation--Errors:NoneDeleteSearchRule:PROC[path:Rope.ROPE,c:Context_NIL];--Deleteasearchrule--Errors:NoneEProc:TYPE=PROC[name,link,comment:REFTEXT]RETURNS[stop:BOOLEAN];--Procedurethatiscalledfordirenumeration--nameistheentryname--iflink.length#0thenlinkisthepaththatnamewillberesolvedto--ifcomment.length#0thencommentisacommentfornameEnumerate:PROC[dir:Rope.ROPE,pattern:Rope.ROPE,p:EProc,c:Context_NIL];--Enumeratethecontentsofadirectory--patterncancontain"*"and"#"--apatternof"*"enumeratestheentiredirectory.--Ifdir=NILordir=""Enumerateassumesthewdir--Errors:{ConnectionErrors,CredentialsErrors,localDiskFull,noSuchDirectory}GetSearchRules:PROC[c:Context_NIL]RETURNS[LISTOFRope.ROPE];--Returnsthelistofpathsinthesearchrules--Errors:NoneGetWDir:PROC[c:Context_NIL]RETURNS[path:Rope.ROPE];--Returnthepathoftheworkingdirectory--Errors:NoneLogin:PROC[name,password:Rope.ROPE];--Setcredentials--Errors:NoneSetDefaultContext:PROC[c:Context];--Setthedefaultcontext--Errors:NoneSetComment:PROC[path,comment:Rope.ROPE,c:Context_NIL];--Setsthecommentonthespecifiedpathtobecomment--Errors:{ConnectionErrors,CredentialsErrors,FileErrors,localDiskFull,--noSuchDirectory}SetWDir:PROC[path:Rope.ROPE,c:Context_NIL];--Setworkingdirectory--Errors:{ConnectionErrors,CredentialsErrors,localDiskFull,--noSuchDirectory}8pîÇïb)î> îÇï`€î>îðî" î-U î6*îÇï^×îÃî ¶ï[… îHî¸î´î"ëî$xîÇïYÜî>îjî”îiî¦î! î)¥î+^îÇïX3î>îîèî �îÇïVŠî>îðî ¶ïS8îfîÖî!Ù î*î+«î0âî2oîÇïQ�î>î¤îÎîîÇïOæî>îðî ¶ïL•îGîtîYîÉî!Dî$iî*ëî.Gî¿ïJìî,îîÇïICî>îÌîšîîýî":î$m îÇïGšî>îþîjîÉî]îÇïEñî>îŸ îŠî°î!|î"èî%Gî(nî+<î.üî1§î3˜î9îÇïDHî>îŸîÆî!ìî'õî)aî*Šî0“î2Ðî ¶ï@ö î6î¦îµ î$ïî*' î2aî4&î8–î:.î?fî@òîÇï?Mî>îEî¤î î!Ìî"öîÇï=¤î>îýîˆîgîýî"´îÇï;ûî>îhî'îàîu î"¾î%î) îÇï:Rî>îÀîóîØîëî¯îáîÆî!«î(²î-ÿî0^îÇï8©î>îðî" î-U î6*î ¶ï5WîGî¶î²î#éî%vî¿ï3®î,î.î­ îÇï2î>îvîÕîîÌî wî"%î$„î(¾îÇï0\î>îðî ¶ï- îYîÉîÅîüî!‰î¿ï+aî,î/ îÇï)¸î>îòîQîxî1î�î$çîÇï(î>îðî ¶ï$½î1î¡îî!’ îÇï#î>îž îÇï!lî>îðî ¶ïî¾î.î *îÇïqî>îžîýî¦îÇïÈî>îðî ¶ïv îvîæîÈî%J î-„î/î4Tî5áîÇïÍî>î"î‚îŠî‘î ðî&¬î)Òî+�î-rîÇï$î>îðî" î-U î48 îÇï{î>î ¶ï)îöîfîi î$£î&<î+sî-îÇï €î>îžîõîÇï ×î>îðî" î-U îÇï .î>vî)ÈïÿåTVm$gîŒî5îVï.ýî ÍîîEï+ž îîuîWîÙ î&î'¬î,ãî.pîVï)ïî Íî ±îîî îî;î"aî$î&îVï(@î Íîîšî%ä î,Ç îVï&�î ÍîEï#2î …îõîø î2îËî$î%�îVï!ƒî Íî -î„îVïÓî Íîîšî%ä îVï$î Íî=ïÅî´î ø î=ïî´ î ºîˆî×î îKî¨î!VîEï·î ÕîEîá îî³î#êî%wîNï--PublicProcedures--OperationsthathardlyanyonewillwanttouseExpand:PROC[name:Rope.ROPE,c:Context_NIL]RETURNS[path:Rope.ROPE];--Expandsanameintoafullpathname--MayraiseCIFS.Errorifthefileisnotinthedir--system.--Errors:{ConnectionErrors,CredentialsErrors,FileErrors,localDiskFull,--noSuchDirectory}ExplicitBackup:PROC[name:Rope.ROPE,c:Context_NIL]RETURNS[version:INT];--Explicitbackupofthenamedfiletoitsremoteserverhome--Theserver'sversionnumberforthebackingfileisreturned--IfnamehasaversionnumberthenExplicitBackupwilluse--thatnumberforthebackingfile--Errors:{ConnectionErrors,CredentialsErrors,FileErrors,fileBusy}GetBaseFreeSpace:PROCRETURNS[pages:INT];--Getsthenumberoffreepagesthatshouldbemaintained--onthelocaldisk--Errors:NoneOpenButDontHandleError:PROC[name:Rope.ROPE,mode:Mode,c:Context_NIL]RETURNS[fh:OpenFile];--Openafile--SameasOpen,exceptthatitwillnotautomaticallyhandle--acredentialerror.--Errors:{ConnectionErrors,CredentialsErrors,FileErrors,localDiskFull,fileBusy,--noSuchDirectory}Reset:PROC[name:Rope.ROPE,c:Context_NIL];--Resetafilefromitsbackingstore--namemustbeanabsolutepathname--Errors:{noSuchFile}SetBaseFreeSpace:PROC[pages:INT_0];--Setsthenumberoffreepagesthatshouldbemaintained--onthelocaldisk--Ifpagesisomitted,CIFSwilljustensurethatthereare--enoughfreepagesaccordingtothecurrentsetting--Errors:None--Exceptionalconditions--Unfortunately,everyonehastoknowaboutthese--IneachCIFScallthemostlikelyerrorsarelisted.However,aclient--shouldbepreparedforvariantofErrorCode.Themessage"error"is--essential,andshouldbeshowntotheuser.HandleError:PROC[code:ErrorCode,error:Rope.ROPE,reply:CHARACTER_Ascii.NUL]RETURNS[resume:BOOLEAN];--Attemptstohandleacredentialerror.Theusageofthisprocedureis:9pî ®ïaŠî%îi î ®ï_Üî% î+îùîHî!î#¼î'î(Çî ¶ï\€îFî¶îR î$Œî&$î+[î,èî¿ïZÒî,î/ îÇïY$î>îÙîîÂîšîÄî"Oî%uîÇïWvî>înî© îåî Fî"¥î%î&zî(ïî*�î,ýîÇïUÈîGîÇïTî>îðî" î-U î48 îÇïRmî>î ¶ïOî·î'î à î(ýî*•î/Ìî1Yî¿ïMcî,îÐîÇïKµî>îTî)îâîBî#Èî&2î'àî)ºî.bî2nîÇïJî>îîÿîÇî"ôî%1î'�î,±î/î0†îÇïHYî>îÀî€îõîîæî$î'9 î0Àî3kîÇïF«îÃî‘î½îúîZî#{îÇïDýî>îðî" î-U î48î ¶ïA¡îÓîC î)ÓîÇï?óî>î…îäîîÊî –î$aî'0î+¬î-œ îÇï>Eî>îEî¤îêîÇï<—î>îðî ¶ï9;î²î#"î'¾ î/ùî4Hî8¢î::î?rî@þî¿ï7�î,îÍ îÇï5ßî>î î3îÇï41î>îþî¬îÏîî!îî#Dî%ïî(d î0×îÇï2ƒî>îh î¾îÇï0Öî>îðî" î-U î48 î= îÇï/(î>î ¶ï+Ìîûîkî î#Aî$Ùî*î+�îÇï*î>î î3î�îîÞî"ÿîÇï(pî>îþîfîWîGî!¶î$ÜîÇï&Âî>îð î ¶ï#fîp î"î%î&¢îÇï!¸î>î"î‚î®îgî 4î#ÿî&Íî+Iî-9 îÇï î>îEî¤îêîÇï\î>îÀî‹î÷îeî!î#Åî&gî*Ìî-šî1$îÇï®î>î(îõîÀî#î$¯î'î+ØîÇïî>îðî ®ï¤î% î¤ î ®ïöî% îiîEîºî!hî%'î) î ®ïHî%îôî%îÙîdîÄî î"ßî&Õî))î-¯î3ãî5 î ®ïšî%î î‘îcî¡î!=î"ö î*«î-ƒî2Ûî7­î ®ïíî% îöî­î)îî!iî#î%wî ¶ï ‘ î?î¯îÒ î&î)ï î2)î6+î?¼îAH î¿ï ãî,îÑî¿ï 5î6î)î×î^îˆ î#Þî(,î+î.Ïî0ˆî3*î9¬vî)Èï«TVm$Ô Íî Oîî†îôî©îTîöî#[î&)î)³îVï0\î Íî·î„îOî�î>î�î$gîVï.´î Íîî=ï+bî´ î3 î=ï)ºî´ îøîÔîIî÷î¶î!˜î=ï(î´îƒî ´îhîóîSî¯înîdî!¸î&>î,rî-œî=ï&hî´î /î îòî0îÌî… î#:î&î+jî0<î=ï$Àî´ î …î<î¸î©îøî¦îîEï!n îÎî>îa î“î"~ î*¸î.ºî8Kî9× îNïÆî»î`îNïîÅî¸îfîíî îmî »î#“î'^î)î+¹î2;îNïtîÅî1î--CIFS.Operation[args!--CIFS.Error=>{IFCIFS.HandleError[code,error,reply]THENRESUME}];--NOTE:TheabovecodeisincludedinCIFS,soaclientdoesnothave--towriteit.Thisprocedureisexportedonlyforcompleteness.Error:SIGNAL[code:ErrorCode,error:Rope.ROPE,reply:CHARACTER_Ascii.NUL];--errorusuallycontainsaninterestingmessage--replyisthecodepassedfromserver(seeSTPReplyCode.mesa)ErrorCode:TYPE={--connectionerrorsnoSuchHost,noRouteToNetwork,noNameLookupResponse,alreadyAConnection,noConnection,connectionClosed,connectionRejected,connectionTimedOut,--credentialserrorsaccessDenied,illegalUserName,illegalUserPassword,illegalUserAccount,illegalConnectName,illegalConnectPassword,credentialsMissing,--protocolerrorsprotocolError,--fileerrorsillegalFileName,noSuchFile,requestRefused,--remotestreamerrorsaccessError,--catchallundefinedError,--localdiskfulllocalDiskFull,--fileislockedfileBusy,--filealreadyexistsforarenamecommandfileAlreadyExists,--directorydoesnotexistnoSuchDirectory,--directorycontainsfilesandcannotbedeleteddirectoryNotEmpty,--linkalradyexistslinkAlreadyExists};ConnectionErrors:TYPE=ErrorCode[noSuchHost..connectionTimedOut];CredentialsErrors:TYPE=ErrorCode[accessDenied..credentialsMissing];FileErrors:TYPE=ErrorCode[illegalFileName..requestRefused];}..--CIFSFeedback.mesa--InterfaceforCIFStoreportSTPactivities--CodedbyM.D.Schroeder,July16,19821:49pm--Lasteditedby--MBrownonAugust30,19821:24pmDIRECTORY10pî¿ïb!î6î¢î…î¿ï`wîà îþî”î4î-Iî1î4ÿî9•î¿ï^Íî6î8îîîYî Åî&kî(î,&î-êî/î2Ôî6î8zî¿ï]#îºîhîæîî2î!µî#!î(Ýî+öî.4 î ¶ïYÏîãîïî î#Dî'/ î/iî3kî<üî>‰ î¿ïX%î6î¨îZî¾î® î&gî¿ïV{î6î¾î*î‰îÐî6î"�î&ªî)vî ¶ïS' î î6îî¿ïQ}î6 î2î¿ïOÓ îÛî#«î3îî¿ïN* îøî#Xî¿ïL€î¿ïJÖî6 îî¿ïI, îî"Hî.ýî¿ïG‚î°î*�î¿ïEØî6î¤î¿ïD. î¿ïB„î6îŸî¿ï@Úî î ¯î¿ï?0î6îÝîMî¿ï=† î¿ï;Üî6îËî¿ï:2î¿ï8‰î6î|îjî¿ï6ß î¿ï55î6îŸî î¿ï3‹î¿ï1áî6îŸîsî'îdîŽî#wî¿ï07î¿ï.�î6îî8î­î¿ï,ãî¿ï+9î6îîkîYî!î#›î&î(î¿ï)�î¿ï'åî6îî0î¿ï&;î¿ï$‘î ¶ï!>îBîoîTð*î ¶ï”î!îNî3ð,î ¶ïê î»îèîÍð+î ®ï–î ®ï˜î%î ®ïîî%îëî)îÝîŒî¯î"³ î ®ïDî%î•î‘îÂî½ î˜î"’î$Ïî(î+$î ®ïšî%î)îXî ®ïðî-îóîùî·îôî!:î$Iî ®ï óvî)eïý‚TVm$ãîÉîØî=ïîEïqî sî îÛî=ï î&îÀ îÇî ¬î=ïÍî î‰î±î! îÉî VîEï$î¼î qîî§î îQîÔî"ïî$î'Î î.fîEï{î ¡ î îÒîØîî©î# î*Jî+–Rope:TYPEUSING[ROPE];CIFSFeedback:CEDARDEFINITIONS={Register:PROC[p:PROC[Rope.ROPE]_NIL];--CIFSwillcalltheregisteredprocedurewithaRopedescribingeach--filemanipulationactivityonaremoteserver.Registeringp~NILwill--stopsuchreporting.--Thestyleofuseis:passanon-emptyropeatthestartofanactivity,--passanemptyrope(e.g.NIL)attheendoftheactivity.}..--FileLookup.mesa--M.D.Schroeder,September7,198211:54amDIRECTORYRope:TYPEUSING[ROPE],System:TYPEUSING[GreenwichMeanTime];FileLookup:CEDARDEFINITIONS=BEGINResult:TYPE={noResponse,noSuchPort,noSuchName,ok};LookupFile:PROC[server,file:Rope.ROPE]RETURNS[result:Result,version:CARDINAL,create:System.GreenwichMeanTime,count:LONGCARDINAL];--ThisprocedureusestheLookupFilepacketexchangeprotocoltoobtainthe--versionnumber,createtime,andbytelengthofafileonaremotefileserver.--Thefilenamemaybespecifiedcompletewithversionnumber,with"!h",with"!l",--orwithnoversion.Thefilenamescanbespecifiedeitherwiththe"<..>..>.."syntax--orwiththe".../.../..."syntax(besurethatthenamedoesnotstartwitha'/).--Iftheresultis"ok"thentherequestedfileexistswiththereturned--versionnumber,createtime,andbytelength."noSuchName"meansthateither--theservernamewasnonsenseorthatthefiledoesnotexistonthatserver.--"noSuchPort"meansthattheserverrespondedwithano-such-porterrorpacket--whenproddedontheLookupFilesocket."noResponse"meansthateithertheNLS--didn'trespondtotheservernamelookup,theLookupFilepacketdidn'tgettothe--server,ortheserverdidnotrespondtoit.--LookupFilecachesthestateoftheserverasderivedfrompreviouslookupattempts.--Ifthecachedstateforaserveriseither"noResponse"or"noSuchPort"then--LookupFileimmediatelyreturnsthatresultwithoutattemptinganycommunication.--Suchnegativecacheentriesareflushedafterfiveminutes.Positivecacheentries--containthePupaddressoftheserver,eliminatingtheneedtodoaNLSlookup--ontheservername.--Thelongestthatyoushouldhavetowaitforaresponseis~4*(2+0.5*MIN[8,hopCount])--seconds.Thisisthetimeitwilltaketodecidedthataserverisn'tgoingtorespondinthe--caseofanuncacheddownserver.Mostanswersaredeterminedmuchmorequickly.11pî ¶ïb!îäîîLî ®ï^Í î—î1 î&8î(î ®ï[xîŠîúî"î’ î&:î'Çî ¶ïYÎî-îâî�îîw î Âî'Eî*`î+Šî/? î5×î ¶ïX$î îzîCî Iî!sî&î*~ î1»î3î4”î7¦î ¶ïVzî¢îÔ î ¶ïTÐî-îî6îïîdîIîBîlî&gî)˜î+0î-�î0Ÿî2Xî4Iî ¶ïS&î¢î“îÌîüîÿî!‹î##î%ƒî(:î)óî,Sî ¶ïOÒî ®ïJÔî%î ®ïI*î%îVîQ î,î î!Ÿî$åî(¤î ®ïEÖî ¶ïD,îäîîLî ¶ïB‚îíîîUî ®ï?. î¦î? î$Fî&+î ®ï;Ùîwî¤î‰ î = î( î0ñî ®ï8… î¦îîÝî Àî(¢î¿ï6Ûî,îÔî|î$½îÇï51îCî&´î+î/Ð î ®ï1Ýî%î?îÂî»î î$™î(ôî.òî4`î6î:Sî ®ï03î%îìîqîsîñî"¨î%¸î)òî+«î,Õî/>î1Dî2nî7î9î ®ï.‰î%îýîfî&î)îî!Öî'¾î*Ùî/¡î5%î8@î;¾î>Øî ®ï,ßî%îèîî î­î…îïî$2î&¾î(®î.jî2Wî5qî7Ñ î=Ôî ®ï+5î%îèîîc î¼î î"jî%dî(2î*‘î.Qî1�î3öî7î:!î;Kî ®ï'áî%î¦îîÑî=î™î¿î î&_î(Èî,}î/˜î1÷î ®ï&7î%îìîqîsîñî"¨î%¸î*Î î4¼î9î;Îî ®ï$�î%î„î‘îPîüî ãî"§î%uî'Ôî*>î-nî/ãî3î5î7èî ®ï"ãî% îûî?î î mî$yî+(î.Cî/l î7ˆî:úî ®ï!9î%îÚî_îeîÄ î#Cî(M î1Zî5žî8lî¸î ®ï�î%î'îjîîxî„î#Dî(Cî*£ î2!î6|î:î<Èî>wî ®ïåî%î‰îMî­î¹î.î£î$æî&”î ®ï�î% î£îôîSî„î!=î#œî'©î)Wî.Lî1³î7Bî;éî ®ïæî%î¦îî™îÊîî1î!=î"©î&• î/¢î1f î:<î ®ï<î% î£ î{î".î$üî(Çî-Ó î4ºî7Z î ®ï’î%î™îîÒîCî!–î&vî)±î,hî2{î7›î;gî ®ïèî%îîcîGî1îêî!Iî%® î,àî/?î2œî4Kî6Qî7{î:Ðî ®ï>î%î+îŠî—î ®ïêî%îýî¯î}î4î°î"÷î$¥î'žî)Üî+î0ªî2î3£î6²î8—î ®ï @î%îî1îœîüî!îwî"#î%î&Êî+ìî.»î/äî3ñî6êî:´î{h.PutF["%s\n",IO.rope[error]];CONTINUE;};IO.EndOfStream=>{h.PutChar['\n];CONTINUE;};};fh_CIFS.Open[name:argv[1],mode:CIFS.read];riS_FileIO.StreamFromOpenFile[openFile:fh];;DOIFUserExec.UserAbort[]THENEXIT;n_riS.GetBlock[buffer];h.PutBlock[buffer];IFn#256THENEXIT;12pî ®ïaŽtî ®ïZî#îÇpî ®ïU î% î ®ïScî%îèîbîî ®ïPî ¶ïNdî ¶ïLºîYî†îÀî* î1Eî;³ î ¶ïKîŸîÌîî ¶ïIeî ¶ïG»î ¶ïFî ®ïB¼î­î ¶ïAî±î¾îpî#ñî(¹î ¶ï?hî›î ¶ï<î-î¶îßî ¶ï:iî=îîî =î ¶ï8¿îÆî ®ï7î†îõî®îÔîîpî ¶ï3Àî¸î!$î# î¿ï2îý î¿ï0lîk î¿ï.ÂîGîåîrî¿ï-îƒî¿ï+mîƒîRî7î¿ï)ÃîgîÃîî“î¿ï(î¯ î›î1î¿ï&oî¿ï$Äî îÇï# îî˜înï!p îînïÆînïîÇïq îkîîÐïÇînïînïsîÇïÈî¿ïîƒîî{î"Xî&§ î¿ïtîñî~ð#î*|î¿ïÊîÇï î·îIî#ÞîÇï uîîŸîÇï ËîÇï !î·îîçî}îvî)eïö"TVm$LVïæî Fî ‘î vî î¡îVï<îNï’î >î éî¸îÍîcîNïèîENDLOOP;IFn>0ANDbuffer[n-1]#'\nTHENh.PutChar['\n];};UserExec.ResetUserAbort[];IFriS#NILTHENriS.Close[];IFfh#NILTHENCIFS.Close[fh];};--MainlineUserExec.RegisterCommand["Type.~",Type,"Typefile",typeC];}.13pîÇïb)î¿ï`‚î¯îZî)î!>î%Ôî¿ï^Úî¿ï]3î¿ï[Œî¯îÑîf î¿ïYäî¯îcîøî¿ïX=î ¶ïSGî-î ¶ïQ ð"î%Öî)¶î-ïî1aî ¶ïNQvî)eïËTVm$T TIMESROMANþŸ HELVETICAþŸ TIMESROMANþŸ TIMESROMANþŸ TIMESROMANý…LOGOü´ TIMESROMANþ TIMESROMANþŸL ° Š ò'Z-�3¥9Õ@[E{M"PEQNþŸLOGOü´ TIMESROMANþæ TIMESROMANþY TIMESROMANþŸj/TR™Ä”ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCifsManual.press 1-Oct-82 11:20:41