1
0
mirror of synced 2026-01-25 20:06:44 +00:00
Files
Interlisp.medley/docs/internal/STREAMS-KOTO.PRESS
2022-07-02 22:08:47 -07:00

417 lines
118 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
StreamsandFileDevicesEdited30Nov84,vanMelleAnInterlispStreamisanobjectofdatatypeSTREAMthatiscapableofperforming,attheleast,sequentialinputand/oroutputofbytes.Somestreamscandomuchmore.Streamsareusedforaccesstoopenfiles,forwritingtothedisplay,forchattingtoremotehosts,andwhateverotherusespeoplecomeupwith.Thisdocumentdescribeshowonegoesaboutdefininganewdevice,themeaningsoftherecordfieldsoftheSTREAMandFDEVdatatypes,andanythingelsethatseemedrelevantatthetime.TheimplementationofStreamsisstronglyobject-oriented.EverySTREAMhasapointertoadevice(thedatatypeFDEV),whichcontainsavectoroffunctionstobecalledwhencertainoperationsarerequiredofthestream.Therecanbemanystreamswiththesamedevice.Intheobject-orientedtermsofLOOPS,onecanthinkofthedeviceasaclass,whichprovidesasetofmethodsthatimplementclassoperations,andthestreamsasinstances.Devicesandstreamsalsohavelocalstate,whichmightbethoughtofasclassandinstancevariables.DeclarationsforSTREAMandFDEVcanbeobtainedbyloadingEXPORTS.ALL.OPENSTREAM,CLOSEF,FORCEOUTPUT,READP,EOFP,GETEOFPTR,GETFILEINFO,SETFILEINFO,DIRECTORY,COPYBYTES,DELFILE,RENAMEFILE,FULLNAMEaresomeoftheLispfunctionscalledbytheprogrammerthatultimatelyturnintooperationsatthedevicelevel.Thedescriptionsthatfollowsometimesalludetothesefunctions,andknowledgeofhowtheyoperatemayoccasionallygivethereaderadditionalcluesastohowthedeviceoperationswork.Typically,somepartoftheoperationishandledbythe``generic''filesystemcode,whichthencallsonthedevicetohandlethatpartoftheoperationthatisdevice-specific.Forexample,thefunctionOPENFILEtakesthenameofthefileitistoopenandfillsinhostanddirectorydefaults,anddecideswhichdevicehandlessuchafile.Itthencallsontheparticulardevicetoactuallyopenthefile.Afterthefileisopened,thegenericfilesystemcoderegistersthefileon(OPENP).Asanotherexample,operationsinvolvingopenstreamsfirstcoercenon-streams(e.g.filenames)toopenstreamsbeforecallingthedevice-specificoperation.DevicesAdeviceisanobjectoftypeFDEV(sonamedforhistoricalreasons:``FileDevice'').Thestandardwaytodefineanewdeviceistocreatesuchanobject,byperforming(createFDEV--),andthenpassthenewlycreatedFDEVtothefunction\DEFINEDEVICE.\DEFINEDEVICEisthewayadevice``announces''itselftothegenericfilesystem.(\DEFINEDEVICENAMEDEV)[Function]InstallsdeviceDEV,givingitthenameNAME.NAMEmustbeanuppercaselitatom.Thegenericfilesystemcodemakesuseofthenametolocatethedevicethatiswillingtodealwithfileswhosefullnamebegins{NAME}.Itispermissibletohavemorethanonenamemaptothesamedevice;thiseffectivelyprovidesdevicesynonyms.Devicesareencouraged,however,toalwayscreatefilenamesusingthecanonicaldevicename,independentofwhatnamewaspassedin.NAMEcanbeNIL,inwhichcasethegenericfilesystemcodeneverconsultsthedevicedirectly.However,itsEVENTFNisstillrunaroundLispexits,anditcanbeusedasthedeviceforastreamcreatedbynonstandardmethods.
êq?€`½ îïpÿ
êq?€`½îïî
êïg_pîâïaoqî&*î*î/Iî7|ïaorïaoî7ïaoî ôï]Âsî
[î»î î±î¦îcï]Âî ôïZarî Dî·îeîÏî½îÐîî%î%ïZatïZaî*ïZarïZaî*žî-iî.Òî3Íî5ƒ
î=î>œî@ùîDr îJÁîJÁïZaî ôïXŽî
uîóî:îÌî<1B>îîîî$gî&Ëî(ªî,Yî0î0zî5ˆî7µî:Éî<ßî@ÄîBKîE•îH²îJÁîJÁïXŽî ôïVÄî´îrîâîúîHî˜î!Wî& î)ñî,¹î2¤î6Rî9[î=äîA<C3AE>îCÀîGAîG×îJÁîJÁïVÄî ôïTúîoîfî|î:îfî#Xî(Õî*î-î1Áî43î:aî<-î>ŸîBÿîFÄîH<C3AE>îJÁîJÁïTúî ôïS0tîþïS0rïS0îVîßîßïS0tïS0î;ïS0rïS0î“ îÎîWî#Öî&^î(ýî-·î2Èî43î6dî9_ïS0î ôïO¶î Ô
î²îtî±î&î$mî.?î.Íî2Ëî2ËïO¶tïO¶î7ÕïO¶rïO¶î8dî:âî<î@ãîBšîCÎîHîJÂîJÂïO¶î ôïMãîaïMãtïMãî½ïMãrïMãîõîàî î+î"-î#Æî) î+.î-î0Ôî4iî8Í î?VîAŠîF÷îH<C3AE>îJÁîJÁïMãî ôïLî³î1î*î®îîZî Fî#Wî%¯î)%î-¶î.5î/þî2Uî;Àî?ƒîA4îA4ïLsïLîDêïLrïLîEÁîHdîJÁîJÁïLî ôïJFî
eîôî(î@îÅîÅîÅïJFuïJFîyïJFrïJFî-î
î$nî%nî'aî(ðî(ðïJFuïJFî-®ïJFrïJFî. î0¬î7aî:f
îA;îCÈîEüîJÁîJÁïJFî ôïHiî ·î ·ïHiuïHiîðïHirïHiîàîzî¬îwî~î"]î%·î)î,©î0Èî4Ñî6Öî<î=Õî?˜îBÛîE¥îJÁîJÁïHiî ôïFŒ îÔî, îåîôîôïFŒtïFŒîþïFŒrïFŒîVî!ßî!ßïFŒtïFŒî%;ïFŒrïFŒî%“î'ðî)³î/1î0ÿî5¶î5¶ïFŒtïFŒ
î>óïFŒrïFŒî?PïFŒî ôïCt îZïCrïCîyïCtïCîƒïCrïCî¢î¢ïCtïC
î"ßïCrïCî#þî#þïCtïCî(1ïCrïCî)Pî)PïCtïCî,¬ïCrïCî-Ëî-ËïCtïCî5ZïCrïCî6yî6yïCtïC
î?¶ïCrïCî@Õî@ÕïCtïC
îJïCrïCîJÂîJÂïCî ôïA?tîƒïA?rïA?îbïA?tïA?îñïA?rïA?îÑîÑïA?tïA?î ²ïA?rïA?î!‘î!ïA?tïA? î)÷ïA?rïA?î*Öî*ÖïA?tïA?î1ŽïA?rïA?î2î4kî7ÿî9¹î<î?3îE-îHóîJÁîJÁïA?î ôï?lî Š îŸî£ îLî!‡î$” î+sî-Dî/Úî4Sî8%î8ãî;ñ îC·îF»îJÁîJÁï?lî ôï=¢î«îÎîî
î ^î#î)úî+¶î.¼î1Îî6¸î9¿ îAZîDJîF¬îJÁîJÁï=¢î ôï;Ø î6îyîúîzîOîî” î&î)`ï;Øî ôï8g î>îÊî¨î\îî Õî"<î'<27>î)xî+Ñ
î1òî4Uî8Êî<bî@hîCˆîF<C3AE>îH<C3AE>îJÁîJÁï8gî ôï6<C3AF>îîîòî˜îSîåîî#î%¿î'î0Oî0®î30î8×î;î@]î@]ï6<C3AF>tï6<C3AF>îGï6<C3AF>rï6<C3AF>îGsîJÁîJÁï6<C3AF>î ôï4Êî &î¹îEîxî³îÝîîžîâîmî!éî#kî&6î(Áî.aî3¶î6@î:ðî>ÎîBäîG¿îJÁîJÁï4Êî ôï3î î
©îîsî}îpî\î¡ î·î#Þî%rî*jî-Áî0î2ªî3î6™î8Þî;+î<}îA—îCÜîH‡îJÁîJÁï3î ôï16îîÕîFîî/îFï16tï16î$'ï16rï16î%î%¬î'Îî,çî2Æ î9î?îCîHîJÁîJÁï16î ôï/cî
îŒî` îÐî Pî#“î(Xî,wî0ªî2Ûî;È îAÃï/cî ôï*×vîjï*×rï*×îpï*×î ôï'/î îÁî,îî0îèîöîöï'/tï'/îRï'/rï'/îØî"î&˜î(Ô î.´î4î7Œ î=¥î>*îAîF—îIAîJÁîJÁï'/î ôï%\î îîäîîRîàîÁîÑî!¢î%ïî'Ë î.Øî.Øï%\tï%\î/¯ï%\wï%\î4Rï%\rï%\î4¸î4¸ï%\tï%\î8ùî;~ï%\rï%\î<<î>ÓîAØîD±îFðîJÂîJÂï%\î ôï#tî—î—ï#ttï#tîóï#trï#tîUîßîîkï#ttï#t î&Vï#trï#tî'î'qî'qï#ttï#t î2\ï#trï#tî2¾î4î6Aî8õî9üî> îFîIBîJÂîJÂï#tî ôï!¡î %î½î÷îHï!¡î ôï0t
î<16>î<16>ï0xï0îï0tïÜîÜï0xï0î0tï0îï0rï0îDL îObï‘ïCî/îCxïCîÈïCrïCîî ¤î!éî$7î'æî'æïCxïCî+^ïCrïCî,*î,Ÿî,ŸïCxïCî0ïCrïCî0Œî3âî5Âî7¢î=úîBîîCcîF)îJÁîJÁï‘ïyîÜî:îbî|î Õî"qî$´î(Vî)çî-¿î0î4'î6×î8&î<î>î@øîCôîFÃîJÁîJÁï‘ï¯îýî îÑî<1B>ï¯xï¯îùï¯rï¯î iî Óî".î#~
î*˜î,*î/Sî2Éî5Ñî8`î<î?î@îBÔîF4îJÁîJÁï¯î‘ïåî
îîî#,î)Çî*4î/8î1s
î9î>Áî@VîD îH‡îJÁîJÁïåî‘ïî¦î îQî 1î$Eî(.
î/éî1tî4¢î83î:±î>çî@lïî‘ï7xî ï7rïîîùîùï7tï7î7rï7îVîþî"î$ëî'Cî,î.eî2Ùî6î9Üî?îAmîE¨îJÂîKîKï‘ïdî¨îdtïdîdrï´î î"‰î%î)¥î,¢î0î2«î3æî6Wî8-î;Mî<âî?&îCNîEpîF€îJÁîJÁï‘ï
î*îø
î¨î$ ï

â
êq?€`½2Ifadeviceneverwantstobeinvokedbyname,andhasnointerestingEVENTFNorHOSTNAMEPmethods,thenthereisnoneedtoeverregisteritwith\DEFINEDEVICE.(\REMOVEDEVICEDEV)[Function]RemovesdeviceDEVfromthelistofknowndevices,aswellasanynamethatmapstothatdevice.(\GETDEVICEFROMNAMENAMENOERRORDONTCREATE)[Function]ReturnsthedeviceassociatedwithNAME.NAMEcanbealitatomorstring;itiscoercedtouppercase,andifitbeginswithanopenbrace,isassumedtobeafilename,fromwhichthehostnameisextracted.Ifnosuchdeviceisknown,attemptstofindonebypollingtheHOSTNAMEPmethodsofallknowndevices(seebelow);ifadeviceisstillnotfound,causesaFILENOTFOUNDerrorunlessNOERRORistrue.IfDONTCREATEistrue,itneverattemptstocreateadevice,justreturnsanexistingdeviceifthereisone,NILotherwise.ThefieldsofanFDEVaredividedupintoinformationalfieldsand``methods''.DEVICENAMEApointerfield,thenameofthedevice,standardlyalitatom.Useofthisfieldislargelyuptothedevice,butitisusuallyselectedtobethenamethatappearsinsidebracesinfilenamesopenedonthisdevice.Fordevicesthatdonotsupportthenotionofnamedfiles,DEVICENAMEcanbeanythingthattheimplementorcarestousefordebuggingassistance.RESETABLEAflag,trueif(SETFILEPTRstream0)canbeperformed.Currentlyunused.RANDOMACCESSPTrueifthestreamisrandomlyaccessable,i.e.,ifSETFILEPTRworksonthiskindofstream.NODIRECTORIESTrueiffilesopenedonthisdevicedonot(usually)haveadirectoryaspartoftheirname.TheprincipaluseforthisisbytheCONNcommand,whichwillnottrytoconnecttotheuser'shomedirectoryifgivenahostonly,e.g.,CONN{DSK}.BUFFEREDTrueifstreamsofthissortarebufferedinamannercompatiblewiththemicrocodedversionsofBINandBOUT.Morespecifically,BUFFEREDimpliesthatthedeviceimplementstheGETNEXTBUFFERmethod.Seedescriptionofbufferedstreams.PAGEMAPPEDTrueifthisstreamisimplementedbythepagemappedfunctions.Allpagemappedstreamsarealsobuffered,soifthisflagistrue,soshouldbeBUFFERED.Seedescriptionofpagemappedstreams.FDBINABLETrueifstreamsonthisdeviceobeytherulesformicrocodedBINwheneversuchstreamisopenforinputaccess.FDBOUTABLETrueifstreamsonthisdeviceobeytherulesformicrocodedBOUTwheneversuchstreamisopenforoutputaccess.Currentlyunused,asthespecneedsrevision.FDEXTENDABLESpecialkindofFDBOUTABLE.Currentlyunused,asthespecneedsrevision.DEVICEINFOApointertoarbitrarydevice-specificinformation.Thestandarduseforthisistoholdlocalstatespecifictooneofseveralsimilardevicesthatsharemethods.Forexample,î$ ï
‘î
êïførî ôïhspî
 ïhsîïbrîÿîîBî÷îÂî [î"7î'_î)Fî-Hî/êî2Jî4;
î:Úî:Úïbtïbî@»ïbrïbîA,îBÛîBÛïbtïbîJjïbrïbîJÂîJÂïbî‘ï`.îGî>î˜îÖî®î"Üî$\î'2î+àî-î/óî/óï`.tï`. î:Þï`.rï`.î;;ï`.î ôï\´t
î<16>î<16>ï\´xï\´îõï\´tï\´îÌï\´rï\´îDL îObï\´îïYÇîRîfïYÇxïYÇîÎïYÇrïYÇî&î ^î"<22>î$<24>î&(î*}î/mî0îî3¬î5-î7 î;1î=ÐîA@îBÀîE_îIxïYÇî ôïVVtîÀîÀïVVxïVVî8ïVVtïVVîîïVVxïVVî$ÃïVVtïVVî%šî%šïVVxïVV î-€ïVVtïVVî.WïVVrïVVîDL îObïVVîïSiîîîuîß î#nî&¯î&¯ïSixïSiî*'ïSirïSiî+,î+Úî+ÚïSixïSiî/RïSirïSiî0î2³î4Ìî6î:õî<áîAVîBÔîDhîIBîJÂîJÂïSiîïQŸ î;îÜî&îeî œî#žî%xî(Óî,Èî.î3”î5+î7î8î:kî>kîA»îE¯îG÷îJÁîJÁïQŸîïOÕîEî¦ îØîSîËîÇî"ìî'#î(…î-Uî2×î4{î7]î9ýî;ïî@†îBÚîBÚïOÕtïOÕîJiïOÕrïOÕîJÁîJÁïOÕîïNî5îî
î¨î#‡î&lî+€î,ùî.<î2î4î6Ñî9]î=ØîB(îCkîCkïNtïNîGäîK@îK@ïNîïL/îÄïL/rïL/î+î}î€î€ïL/xïL/î"4ïL/rïL/î"î#èî'î'kî(Ïî(ÏïL/xïL/ î0µïL/rïL/î1î2jî5†î6¾î:iî?×îAgîEIîFUîJÁîJÁïL/îïJ\îîîIî"î"6î#iî&Ãî(î*Öî*ÖïJ\tïJ\î-[ïJ\rïJ\î-³ î3¯ïJ\î ôïFâî <0C>î!î¬îoïFâtïFâîËïFârïFâî#îIî îðî"˜ î*ôî.xî1 î7ÄïFâî ôïCht îZïChrïChî/îî5î î"Ïî&iî'üî*5î.ª î5.î64î;î;sî>î?®îB)îE1îFwîJÁîJÁïChî/ïA•î,îÄî
î!î#üî%<î&î++î0?î1×î3²î5ûî9¥î<\îAOîE8îIBîJÂîJÂïA•î/ï?Ëî6î!õî#Þî&aî*Üî+Eî-Òî2zî5*î7î9jî>Tî@îDÏîFjîJÁîJÁï?Ëî/ï>îkï>tï> î"Ñï>rï>î#Nî%Ðî'¸î-]î0!î2w
î:Œî=öî?îBîD;îJÂîJÂï>î/ï<.
î‰î<1D>ï<.î ôï8½tîƒï8½rï8½î/îŽînî#îVï8½tï8½
î(“ï8½rï8½î(ëî-,î-,ï8½tï8½î.Úï8½rï8½î/2î1<C3AE>î3R î:;î:“î@¡îE?ï8½î ôï5Ct îßï5Crï5Cî/îîØî.î"“î#öî*
î0éî3sî4Ëî4Ëï5Ctï5C î=1ï5Crï5Cî=­îA£îC îF6îI6îJÁîJÁï5Cî/ï3pîuï3pî ôï/ÿt îßï/ÿrï/ÿî/îîùîìî#Îî%Ûî(î,Ëî.×î1Rî6úî:Gî;xîALîCîEìîG«îJÂîJÂï/ÿî/ï.,îî î$ïî'‡î)çî,ªî.9î0Xî2Úî2Úï.,tï.,î66ï.,rï.,î6ßî=·îAåîD±îGHîIBîJÂîJÂï.,î/ï,YîîîÅî#lî'î,±î-äî1iî2fî50î8rî;%î;%ï,Ytï,Yî?XîCï,Yrï,YîCèï,Yî ôï(ßtî¬ï(ßrï(ßî/î|îÐî µî"aî$óî'œî)ãî/mî1î2+î7' î>$îA0îC<C3AE> îJÁîJÁï(ßî/ï' î<1C>î{ï' tï' î!ï' rï' î!«î$†î$†ï' tï' î'âï' rï' î(äî)<29>î-r î4íî4íï' tï' î;¥ï' rï' î<PîA9îD+îF®îJÂîJÂï' î/ï%9 îeî –î –ï%9tï%9 î+<2B>ï%9rï%9î+Ùî1
î1bî3Ê
î:§î<2îAœîFfï%9î ôï!¿t îZï!¿rï!¿î/î˜îî´î#1î$«
î-î/î1{ î9” î?òî@†îBä îJÁîJÁï!¿îìîbîöî"î(1î*4î+Õî.µî1«î3Wî6Òî8Öî=Žî?¿î?¿ïìtïìîFwïìrïìîG”îHYîJÁîJÁïìî
î î— î'tî,>ïî ôï¨tîƒï¨rï¨î/î]îî Wî"1î$¤î(¹î+èî.î1Hî3X î:šî:šï¨tï¨î=ï¨rï¨î=xîC}îF€îJÁîJÁï¨îÕîmî°î¿î!9î%ïÕî ôïdt îdrï/î îî!"î#>î%õî*Mî-¿î05î3¦î5ú î=~î=~ïdtïdî@ÚïdrïdîAwîG¿îJÁîJÁïîpî®îñî"î&@î*uî*Íî0Ûî5Ìî7Mî9~î<_î@îEï‘î ôï t îï î/î»î»î Fî Fï î(¬ï î)[î)³î/Áî4²î63î8dî;Eî>÷îCõï î ôï ¦t î ¦rï ¦î/î£îNîãî$kî-m î5-î5šî8Wî=Öî@1îBUîDÛîF.îGÂîJÂîJÂï ¦î
Óîcîî"\î#ûî&—î(Bî,Âî15î5íî8«î<:îBîB†îE!îJÁîJÁï
Óÿ 
êq?€`½3theDolphindiskprovidesaseparateFDEVforeachpartitionofthemachine;theDEVICEINFOfieldofeachhaspointerstothepartition'sdirectoryandotherinformationspecifictofilesonthatpartitiononly.Thefollowingfieldsareallpointerfields,andcontainfunctionsforimplementingvariousdeviceoperations.Notalldevicesneedhaveallfieldsfilledin;therequiredonesarelistedfirstandsoindicated.Some``required''fieldshavedefaultsspecifiedintheFDEV(orSTREAM)recorddeclaration,sotheimplementorneednotexplicitlyfillthosefieldsifthedefaultisreasonable.Eachfieldispresentedwithitsarguments,inthestyleofafunctiondefinition;ofcourse,itisthecontentsofthefield,notthefieldname,thatisthefunction.Usingobject-orientedterminology,theoccupantsofthesefieldsarereferredtoas``methods''.Forexample,``theBINmethod''means``thefunctionthatoccupiestheBINfield''.Oneoftheargumentstoeachmethodisusuallyeitherthedeviceitself,orastreamopenonthedevice,sothatthedevice(andhenceitsDEVICEINFO)isusuallyaccessibletoallthesefunctions.Argumentsthatarefilenamesorpatternsorpiecesoffilenamescanbeeitherlitatomsorstrings,andalreadyhavetheirhostand/ordirectorypartsappropriatelyfilledinfromtheconnecteddirectorydefaults.Thedevicemayassumethatthehostfieldofthefilenameisindeedanamethatthedevicehassaiditimplements(seeHOSTNAMEP).``Full''filenamesreturnedbythesefunctions(orstoredintheFULLFILENAMEfieldofastream)shouldbelitatoms,andatleastinthecurrentimplementationshouldbealluppercase.Fieldsrequiredofeverydevice:(HOSTNAMEPHOSTNAMEDEVICE)Calledbythegenericfilesystemcodewhenpresentedwithahostnameforwhichthereisasyetnodevicedefined.Thefunctionshouldreturnnon-NILifit``recognizes''HOSTNAME.Therearetwowaysinwhichthismethodisinvoked:(1)ToobtainadeviceforHOSTNAME,forexample,sothatafilecanbeopenedonit.Inthiscase,DEVICEisanalreadydefineddevice(theonewhoseHOSTNAMEPmethodisbeingcalled),andthefunctionshouldreturneitheranewdevice,orT,meaningitiswillingtotakeresponsibilityforthishostnameaswellasanypreviousnameunderwhichthedevicewasregistered.Ineithercase,thecallerwillinstallthereturneddevice,orDEVICEifvaluewasT,asthedevicetowhichHOSTNAMEmaps.(2)Asapurepredicate.Inthiscase,DEVICEisNIL,andthefunctionneedonlyreturnTorNIL,indicatingwhetheritbelievesthatHOSTNAMEisthenameofahost.Inpractice,theHOSTNAMEPmethodneedonlytakecareofthefirstcase,sincethatalsotakescareofthesecondcase.Thesecondcaseisprovidedsothatthedeviceneednotbecreateduntilthereisanactualuseforit,shouldthedevicewishtoavoidunnecessarywork.Inpracticeitisrarethatanyonetestsahostnamewithoutsubsequentlyneedingtohavethedevicecreatedinfull.TherearebasicallythreekindsofdevicesinthesystemasdistinguishedbytheirHOSTNAMEPmethods.(1)Predefineddeviceswithexactlyonename,orstrictlyinternaldeviceswithnonotionofname.Forexample,theCOREdevicealwaysexists,andhasexactlyonename;theSPPdevice(anetworkbytestream)hasnoname(itsupportsnofilesdirectly).SuchdeviceshaveaHOSTNAMEPmethodofNILLtheonlynametheyevergobyistheonetheygaveto\DEFINEDEVICE,ifany.Thisisthedefault.îJÁï
Óî
êïførîI¾ïhspîJjïhsî/ïbrî®îBî"Nî'ùî)Dî.ºî.ºïbtïbî2ïbrïbî2¼î5î8iî>î?÷îBvîH<C3AE>îJÁîJÁïbî/ï`.t î•ï`.rï`.î €î$î&3î)Éî,¤î2Sî4gî7,
î>îD6îGRîJÁîJÁï`.î/ï^[
îî#<î$¼î'zî)Rî+ñî1Xî4Gï^[î ôïZêî µî«îGîî_îî#î%£î*iî0Lî2s î;î?ÄîCð
îJÁîKîKïZêî ôïY î åîõîÜîZîÁîÑî ¤î$Uî&žî)î.Ëî2î4<C3AE>î8Yî;Qî>)î@ îFtîGîJÁîJÁïY î ôïWV îáîîÛîî"¾î$mî&Îî&ÎïWVtïWVî**ïWVrïWVî*±î,ïî,ïïWVtïWVî1ùïWVrïWVî2ùî7H î>¬î@qîBÑ
îJÁîJÁïWVî ôïUƒî
=î<0F> îkî|îî¤îòî"=î&Ïî('
î/5î/§î3î6î7xî=¡î@§îBm îIBîJÂîJÂïUƒî ôïS¹î aî<0F>îdî<12>î
îêî ±î%dî&Çî(Aî*®î0&î1íî4Zî7íî:oî<Üî@îD<îGîH<C3AE>îJÁîJÁïS¹î ôïQïî£î îîîC î%!î'cî-¢î/>î2©î6=î8tî=î?'î@¸ îGÞîHFîJÂîJÂïQïî ôïP%îîuïP%tïP%îúïP%rïP%îRîÜîñî!Òî'î)¸î/î1Fî1FïP%tïP%î3ËïP%rïP%î4#î7ØïP%î ôïL«î Íî]îîî˜îŸî }î!Àî&Eî*î,;î0Tî3Üî5wî6xî:¾î>î?âîBîFˆîH"îJÁîJÁïL«î ôïJáî DîxîšîîNïJátïJá î!´ïJárïJáî"¥î$î(£ î.Ðî0pî2Qî5Ê î< î<„îCƒîFBîH‡îJÁîJÁïJáî ôïIîî¾îßîî|îî`î"„î$ðî&Ãî*Žî/¢î1Gî5Øî8qî=#î@KîCqîFJîJÁîJÁïIî ôïGDî¡îè î2î¢î /î#uî%³î,î1¾î7î7ƒî:9î>[îA>îEåîHîJÂîJÂïGDî ôïEzî Ïîàî|î½îîªîùî`î nî$î&Àî)î-'î/î29î3r î:¹î=iî=iïEztïEzîDøïEzrïEzîF1îF™îJÁîJÁïEzî ôïC§î 3îMî¼î<17>îïî ¿î"Óî&Ëî(Pî*†î*†ïC§tïC§ î4šïC§rïC§î4øî7ýî9<C3AE>î:<3A>î?NîC<C3AE>îEeîJÁîJÁïC§î ôïAÔî }î
èîÞî^î<14>î(
î"Ïî'î(Üî*<2A> î0ÝïAÔî ôï>cî
åîCîÎîTî<1C>ï>cî ôï;&t î1ï;&xï;&îÛï;&tï;&î²î²ï;&xï;&î!ï;&tï;&îøï;&yï;&îþï;&îï89rîºîˆî¹îQîŒî#Øî&ïî*uî0…î3pî4mî77î:Èî<Øî@µîDîEMîFÎîHéîJÁîJÁï89îï6oî­îÛî;îìî";î&<26>î*”î-Sï6otï6oî/Øï6orï6oî09î1tî2¤
î:{î:{ï6oxï6oîA%ï6orï6oîAÜîB<îFîHDîJÁîJÁï6oîï4œî¿î?îîŽî hî!¦î&Üï4œîàï1¸îãîäîîî!$î#<î#<ï1¸xï1¸î)æï1¸rï1¸î*Ÿî,·î2`î3ÿî6§î7­î9ñî<Wî>#îBÚîD»îFCîF¤îHOîJÁîJÁï1¸îàï/îîAï/îxï/îî°ï/îrï/îîRîÚîæî$Óî)ëî.Iî1=î4î8Kî8Kï/îtï/îî?Úï/îrï/îî@{îEŸîG&îJÁîJÁï/îîàï.îîîKî"šî&íî*õî.¹î/¿î2‡î6üî8î8ï.tï.î9rï.rï.î:*î?œî@ÍîBîFoîG÷îJÁîJÁï.îàï,H
îAîuî!
î#ýî'´î)Zî,>î-åî0~î6î9·î=°îA³îD
îHCîJÁîJÁï,Hîàï*~
î·îaî %î#Dî%}î) î+î/nî1§î7î;Œî=*î=*ï*~xï*~îA™ï*~rï*~îAøîC3îFµîI:îI:ï*~tï*~îJï*~rï*~îJÁîJÁï*~îàï(«îaîî¦î&î!î!ï(«xï(«î'­ï(«rï(«î(î+zï(«îàï%Çîìîáîðî î":î"¤î$Xî&Üî*î*ï%Çxï%Çî.vï%Çrï%Çî.àî00î00ï%Çtï%Çî2µï%Çrï%Çî3wî6î8Vî=¯î@ïîCëîGüîGüï%Çtï%ÇîHÓï%Çrï%ÇîI+îJÁîJÁï%Çîàï#ôtîeï#ôrï#ôî îBî"_î#‡î(Œî++î++ï#ôxï#ôî1Õï#ôrï#ôî2-î3kî5œî9-î:¸î;µî>„ï#ôî‘ï!î<îŽîÉîÉï!tï!î!Xï!rï!î!ºî&žî)Öî,Êî/žî2hî3ýî68î8ëî<
î?ZîBîDªîHîJÁîJÁï!î‘ï4îîMî®îÆîîÇî#)î%éî''î,Çî.]î0üî3.î7Bî:pî<·î>zîCîF)îIƒîJÁîJÁï‘ïjîuîiîÑîî£î!î#aî'î*¸î,Zî0
î7î;`î;Ùî=<3D>îB®îCøîEWîH"îJÁîJÁï‘ï î)î
îîÑîbî$; î,Cî1Iî2Éî5áî8î<&î@¿îB?îDŸï î‘ï¼î¢îî¡î 9î#üî%Åî*œî,Zî.Êî3Tî5 î=yî?†îBÛîBÛï¼tï¼îJjï¼rï¼îJÂîJÂï¼î‘ïéîôïéîàïî îðî!¯î$Áî)Sî+÷î0î1Äî64î;?î?þîCîEîI6îJÁîJÁïîàï;îî<18>îWî!6î#¥î#¥ï;tï;î'ï;rï;î'˜î+êî0^î4yî7Aî9Æî>qîA,îEuîGäîGäï;tï;îJiï;rï;îJÁîJÁïàïhîüîyî¦î!Žî&Oî(žî*}î.î/½î5"î7î9Ç î?aî?ÀîC îGªîJÂîJÂïàïžîîïžtïžî©ïžrïžî?î"Vî$î$ïžtïžî'{ïžrïžî+Iî.qî2?î5^î8qî:qî<|î=øî@fîC!îF?îIAîJÁîJÁïžîàï Ët îËï Ërï Ëî{î ®î#xî#Ðî&ºî'øî*)î.¥ï Ëÿ s
êq?€`½4(2)Devicesthatdon'tknowaheadoftimewhattheirnamewillbe,butforwhichtheremightbemanyincarnations.Thisisthemodelforremotefileservers.ThestandardwayofhandlingthiscaseistodefineadummydevicethathasonlyaHOSTNAMEPmethod,andnoname.WhentheHOSTNAMEPmethodgetscalledwithanamethatthedeviceknowsitcanservice,itcreatesadevicebythatname.Ifgivenanamethatisasynonymofanothername,itmightjustreturntheexistingdeviceofthecanonicalname(using\GETDEVICEFROMNAMEtofindtherightdevice).Ineithercase,theHOSTNAMEPmethodofthenewdeviceisusuallyNILLtheoriginaldeviceistheonlyonethatworriesaboutcreatingnewinstancesofthisclassofdevice.(3)Like(2),butallthedifferentnamesarehandledbyasingledevice,whichtakescareinternallyofthemultiplexingamong,say,differentremotehosts.HOSTNAMEPreturnsTinthiscase.Thisisusuallyclumsierthan(3),sodiscouraged.(EVENTFNDEVICEEVENT)CalledaroundLispexits,toallowthedevicetodoanynecessarycleaningup,clearingofcaches,disconnectswithremotehosts,etc.EVENTisoneofthefollowinglitatoms:BEFORELOGOUT,BEFORESYSOUT,BEFOREMAKESYS,BEFORESAVEVM,AFTERLOGOUT,AFTERSYSOUT,AFTERMAKESYS,AFTERSAVEVM,AFTERDOSYSOUT,AFTERDOMAKESYS,AFTERDOSAVEVM.TheAFTERxxxeventsareallrunwhenLispisbootedfromamemoryimagethatresultedfromaLOGOUT,SYSOUT,etc.TheAFTERDOxxxeventsrunwhencontinuingLispinthesameincarnationfollowingtheSYSOUT,etc.(thereisnosucheventforLOGOUT,ofcourse).The``after''eventsarecalledinthesameorderinwhichthedevicesweredefined;the``before''eventsinthereverseorder.Forexample,theBEFORELOGOUTeventfortheLeafremotefileserverdevicesperformsaFORCEOUTPUTonallitsopenfilesandthenbreakstheconnectionwiththefileserver.TheAFTERxxxeventsfortheLeafdevicescalls\REMOVEDEVICEonitselftoflushanyconnectionbetweenthenameandtheserver(sincenamesandaddressescanchangeoverexit).TheAFTERxxxeventsfortheDoradodiskdevicerebuildsitscacheofthedisk'sdirectory.ThereareafewdevicesinthesystemthatexistonlyfortheirEVENTFN.Inmostcases,asimplerwaytotellthesystemyouwantsomethingperformedaroundexitistoaddyoureventfunctiontothelistAROUNDEXITFNSinsteadofgoingtotheexpenseofdefiningadeviceforit.Thereisyetanotherlist,\SYSTEMCACHEVARS,forhandlingamorespecialized``aroundexit''operation:everytimeLispisbooted,eachofthevariablesinthelist\SYSTEMCACHEVARSissettoNIL.Thefollowingarerequiredofallnameddevices,thatis,devicesthatmapfromsomehostnametothedevice,uponwhichfilesmightbeopenedorotherwisemanipulated:(DIRECTORYNAMEPHOST/DIRDEVICE)TrueifHOST/DIRisavaliddirectorynameonDEVICE.Functionshouldideallyperformrecognitionaswell,andreturnthe``true''name.Forexample,given``{PHYLEX:}<LISP>''asargument,itmightreturn{Phylex:PARC:Xerox}<Lisp>.HOST/DIRmightincludeasubdirectoryname.Thedeviceshouldattempttotellthetruthaboutwhetherthesubdirectoryexistsornot,thoughthismaynotbepossiblefordeviceswithfakesubdirectories.DefaultstoNILL,i.e.,devicesupportsnodirectories.UsedbythecommandCONNandthefunctionDIRECTORYNAMEP.(OPENFILENAMEACCESSRECOGPARAMETERSDEVICE)î.¥ï Ëî
êïførî ôïhspî
 ïhsîàïbrîÞîÒîuî Ýî$qî(Hî)×î,Ñî0î3î6´î93î;Rî=¨î?»îCœîFúîJÁîJÁïbîàï`7îõîä î"î"ºî%÷î'ˆî* î.fî0Èî5î8î=*î=Ôî@ÐîFŒîI6îJÁîJÁï`7îàï^mî|îîÕî &î!¹î%Öî&æî+ßî0î2¹î5î8î9!î9!ï^mtï^mî@°ï^mrï^mîAîF`îHéîJÁîJÁï^mîàï\šîßîNîNî–î–ï\štï\šî&%ï\šrï\šî&”î+„î.:î2î5î6-î9Ôî<Šî>ÒîBýîG'îHeîJÂîJÂï\šîàïZÇî˜îÊî*î1î#Oî%'î'Ðî+Âî,$î-ƒî1î2î5³î8\î9¤î:«î@`îAõîFØîJÁîJÁïZÇîàïXýîkîîjî$Íî(aî.<2E>î4î7î:—îAÚîFÎîJÁîJÁïXýîàïW3tî"þïW3rïW3î#pî% î'âî*-î-iî2gî2Øî4”î8jî;œî=çî=çïW3tïW3îEvïW3rïW3îEçîJÁîJÁïW3îàïU`î<15>îîóî9î ©î%]î%]ïU`tïU`î(¹ïU`rïU`î,|î1…î5Ìî7<î9Ÿî<¼î?kîB<îGîJÁîJÁïU`îàïS<C3AF>îæî¦î!Fî"Ñî%Cî(Dî)Ïî-èïS<C3AF>îàïP©îîOîÜîhî dî"Ðî(~î,Îî//î4…î6Žî7Æî;»î@bîDzîHîJÂîJÂïP©îàïNß îïîîÜ î%Ãî*Šî-,î2¸î7Hî;î;wî;wïNßtïNßîCïNßrïNßîCwîHîHïNßtïNßîHéïNßrïNßîIAîJÁîJÁïNßîàïM îRîÁî«îéî"jî'¼î*³î-î. î6ïM î ôïIÏtîƒîƒïIÏxïIÏîòïIÏtïIÏîÉîÉïIÏxïIÏî«ïIÏtïIÏîˆïIÏîïFârîØîîŠî î!žî%3î'î+³î-Qî/Fî1×î7×î=1î?ŠîD¢îFJîJÂîJÂïFâîïE
îìîîÚî#Æî&hî'î'ïExïEî*éïErïEî+‡î- î/Îî1Ÿî4î::î?ýî?ýïEtïE îJïErïEîJÁîJÁïEîïCEt î¥ïCErïCEî¢î¢ïCEtïCE î'<27>ïCErïCEî)Šî)ŠïCEtïCE î3žïCErïCEî5î5ïCEtïCE
î>ØïCErïCEî@Õî@ÕïCEtïCE
îJïCErïCEîJÂîJÂïCEîïArt î¥ïArrïArîÌîÌïArtïAr
î% ïArrïArî&/î&/ïArtïAr î1ïArrïArî2@î2@ïArtïAr
î>ïArrïArî?(î?(ïArtïAr îJïArrïArîJÂîKîKïArî‘ï?ŸîPï?Ÿtï?Ÿîƒï?Ÿrï?Ÿîîî Zî"0î$­î(Hî+Gî,î1î4hî5zî:Ìî>¾îArîF<C3AE>îIÅîJÂîJÂï?Ÿî‘ï=Ìtî›ï=Ìrï=ÌîÌîÌï=Ìtï=ÌîÖï=Ìrï=Ìîîäî ½î#çî#çï=Ìtï=Ìî)Èï=Ìrï=Ìî,²î1=î4&î8- î?TîB¿îDÀîGrîJÁîJÁï=Ìî‘ï;ù
îÙîî |î |ï;ùtï;ùî%†ï;ùrï;ùî&€î)'î-Dî.Ìî0îî4:î8 î:dî:dï;ùtï;ùî?nï;ùrï;ùî@hîB=îGvîHîJÁîJÁï;ùî‘ï:&îî(î^î4î Äî#î&dî)øî+ˆî/uî1¶î6^î9î>éîA* îF¸îJÂîJÂï:&îï8\îîBîÅîOï8\îï5xîuî}îîï5xtï5x î&*ï5xrï5xî&êî*Øî-Pî/éî3Rî81î:Óî?îDîIÄîJÁîJÁï5xîï3¥t
îÎï3¥rï3¥îiîƒîî uî#ûî&ûî)Çî-î1mî3à î:êî>î@îCîGîHîJÂîJÂï3¥îï1ÒtîÄï1Òrï1Òî^îîÜî @î#sî(=î+Oî+Oï1Òtï1Ò î6:ï1Òrï1Òî6Äî8Ïî<-î=àîAUîCú îJÁîJÁï1Òî‘ï/ÿî:î×îÓîÈî"eî&®î*Öî/Vî2Kî8šî;bî@FîCœîGUîHîJÁîJÁï/ÿî‘ï.5tîÄï.5rï.5î,î6îEîvî$Oî'
î+!î0<î1èî5„î7î9@î<Ú îB~ï.5î‘ï+Hîwî±îÂîIîõî ‰î"Îî'.î)áî,öî/ôî2î5Bî5Bï+Htï+Hî;#ï+Hrï+Hî;æî<Rî>îAIîDùîF
îJÂîJÂï+Hî‘ï)uîKîÛîîZîµî Mî#Šî*
î0¬î5Hî7Õî9"î:²î=Jî@fîCûîIBîJÂîJÂï)uî‘ï'«îÖî÷î÷ï'«tï'« îâï'«rï'«î Nî$äî&ƒî*1î+Åî.
î3%î4Äî:î;%î?MîApîCîCoîGUîH¦îJÁîJÁï'«î‘ï%Øî¿îzï%Øtï%Øî%êï%Ørï%Øî&ïî)Rî/0î0î4:
î;?î@ÑîDR îJÁîJÁï%Øî‘ï$îî
î÷î5îøî"úî$…î&¶î,?î-¿î/ðî1þî1þï$tï$î?nï$rï$î?ÆîAîBóîDsîDsï$tï$îFøï$rï$îGUï$î ôï î ­îšîÐî>îÙî©î"î'î)¿î+dî0 î2»î5·î8þî<rîB…îDîFUîJÁîJÁï ‹î ôïÁî
Xî5îóîºî}î+îÁî%¸ î-™ïÁî ôï„tî„xïî„tï„îîï„xïî"Šï„tïî#gï„î‘ï—rî1îÖîÖï—xïî¶ï—rï—î<1C>î2î¡î#Kî)]î-`î/«î/«ï—xïî4ï—rïî5<î6î<-î@êîEšîJÁîJÁï—î‘ïÍ
î»îiî¬îbî#Žî%ìî*.î.Cî.Èî1qî7>î:ðî; ïÍtïÍîH9ïÍrïÍîIAîJÂîJÂïÍî‘ïúîî[îËî"rî"rïútïúî7qïúrïúî8Èî9Éî9Éïúxïúî?©ïúrïúî@©îEîIÅîJÂîJÂïúî‘ï' îoî…î îäî$&î(Ÿî-©î/Wî1µî4î7‡î;gî@³îC îJÁîJÁï‘ï]îKîîêî¢î Iî#Uî%Ðî'Éî-
î/Rî4î7@î:JîCaîCîîIAîJÁîJÁï‘ï“tîíï“rïî îÞî`î",î$r î+±î,wî0Jî2†î5%î;Âî;Âï“tïî?ï“rï“î?äîBÛîEzîJÁîJÁï“î‘ï
Àt
î
Àrï
Àî°ï
Àî ôï
ztî
zxï
zîÒï
ztï
©î©ï
zxï
zî
ztï
îï
zxï
zîüï
ztï
zî Óî Óï
zxï
z î(¯ï
ztï
zî)†î)†ï
zxï
zî-õï
ztï
zî.Òï
zÿ A
êq?€`½y5UsedtoimplementtheOPENFILEandOPENSTREAMfunctions.OpensthefilenamedNAMEonthisdeviceforaccessACCESS,returningaSTREAM.ThestreamisusuallyonDEVICE(itsDEVICEfieldisDEVICE),butisnotrequiredtobe.TheargumentsACCESS,RECOG,PARAMETERSareaswiththeOPENFILEfunctioninthemanual.Thus,ifNAMEdoesnotincludeaversionnumber,recognitionisaccordingtoRECOG,whichshouldbeappropriatelydefaultedperACCESS(INPUTimpliesOLD,OUTPUTimpliesNEW,BOTHimpliesOLD/NEW).TheargumentNAMEcanalsobeaSTREAM,whichmustbeaclosedstream.OPENFILEshould``reopen''thestream.Thevaluereturnedinthiscasemaybeanewstream(withthesamenameastheold),ortheoldstream(NAME)itself.Itislikelythatthespecificationwillbechangedatsomepointtorequirethattheoldstreamitselfbereturned,suitablyreopened.TheargumentPARAMETERSisalistofpairs(OPTIONVALUE).ThemostinterestingOPTIONsareasfollows:TYPEFornewfiles,thetypeofthefile(TEXTorBINARY).Ifthisparameterisnotspecified,thevalueoftheglobalvariableDEFAULTFILETYPE(initiallyTEXT)shouldbeused.CREATIONDATEFornewfiles,thedateofitscreation.Thedeviceshouldusethisifatallpossibleinsteadoflettingthecreationdatedefaulttothecurrentdateandtime.LENGTHTheintendedlengthofthefile,inbytes.Thisneednotbeaccurateitisonlyahintthatmayallowsmarterallocation.Forexample,ifthedeviceknowsthatitdoesnothaveroomforafileofthespecifiedlength,itshouldimmediatelycauseaFILESYSTEMRESOURCESEXCEEDEDerrorfortheintendedfile.DON'T.CHANGE.DATEForoldfilesbeingopenedforaccessBOTH,don'tchangethecreationdateofthefile.ACCESS=BOTHwouldnormallyimplythatthecontentofthefileistochange,andthusitscreationdateshouldbeupdated.Useofthisparameterisaformof``cheating''tomakeitlookasthoughthefilehadnotchanged.Forexample,thecodethatrewritesfilemapsusesthisparameter,sincerewritingthefilemapdoesnotlogicallychangethefile'scontent.SEQUENTIALIfT,isahintthatthefilewill,orneed,onlybeaccessedsequentially,whichmayallowthedevicetoopenthefileinamoreefficientmode.Anyparametersthatthedevicedoesnotunderstandshouldbeignored,ratherthanbecauseforanerror.AlldevicesareencouragedtosupportatleastTYPEandCREATIONDATE.TheadditionaloptionsENDOSTREAMOPandBUFFERSarehandledbythegenericfilesystemcode;specifyingthemisequivalenttocallingSETFILEINFO(q.v.)immediatelyaftertheopen.FinepointaboutACCESS=OUTPUT:thisoperationalwaysproducesanew,emptyfile,independentofwhetheritsnameisexactlythenameofanexistingfile.Thatis,itreplacesanyoldfilebythesamename.Onopening,suchafilehasanendoffileofzero.Ofcourse,sinceRECOGdefaultstoNEWinthiscase,thenamecanonlyclashwithanoldfilenameifaversionwasexplicitlyspecified,orRECOGisOLDorOLD/NEW.Toopenanoldfileforoutputbutpreserveitscontents,i.e.,onlywriteoverpartofthefile,oneshouldopenforACCESS=BOTH(sincetopreservetheoldcontentsoneimplicitlyreadsthem).î.Òï
êïg,tîI¾ïhspîJjïhsîïbrî
îŸîfî¬î¬ïbtïbî%dïbrïbî%Ñî(oî(oïbtïb î0Õïbrïbî1A î7xî7åî<î>_î@®îEîEïbxïbîHïbrïbîHéîJÁîJÁïbî‘ï`.îî3îOî;ï`.xï`.î!»ï`.rï`.î"yî(]î)hî)hï`.tï`.î.rï`.rï`.î/.î/”î2Kî6™î7åî<tî>Yî>Yï`.xï`.îBÈï`.rï`.îC.îE`îE`ï`.tï`.îJjï`.rï`.îJÂîJÂï`.î‘ï^[îªîîï^[xï^[îqï^[rï^[î³îîvî Öî&Mî'æî*î*î-Nî3äî3äï^[xï^[î8ªï^[tï^[î9î9ï^[xï^[î=Ýï^[tï^[î>Íî>Íï^[xï^[ îF©ï^[rï^[îGîI@îJÁîJÁï^[î‘ï\ˆîžîñîñï\ˆtï\ˆî©ï\ˆrï\ˆî#î"Œî$.î&<26>î+³î,-î/õî1Jî1Jï\ˆxï\ˆî4Âï\ˆrï\ˆî5<î8_î:Çî?î@µîEnîJÂîJÂï\ˆîïZµ
î¯îî=î Þî ÞïZµxïZµî$ÚïZµrïZµî%¬î)ªî.î/ú î8Xî>\î@Äî@ÄïZµxïZµîEDïZµrïZµîE½îF6ïZµtïZµîJiïZµrïZµîJÁîJÁïZµîïXâî'ïXâtïXâî¬ïXârïXâî\ïXâtïXâîfïXârïXâî¾î"Tî"TïXâtïXâî$ÙïXârïXâî%‰î%‰ïXâtïXâî(åïXârïXâî)=î-Óî-ÓïXâtïXâî3´ïXârïXâî4ŠïXâîïUõî]îyïUõxïUõîñïUõrïUõîlîìî"¬î$î%²î%²ïUõtïUõî*¼ïUõrïUõî+Žî/Žî2êî4Ðî5ðî:î>Ëî?Fî?FïUõtïUõîEþïUõrïUõîFxîJÂîJÂïUõîïT" îcîî˜î Hî#Éî)9î*Àî-9î/ÿî2Üî4¦î5©î8pî<¸î@"îBZîE¯îI@îJÁîJÁïT"îïRXîÃîÏîfî˜îÓî î ŽïRXxïRXî$ïRXrïRXî$Ùî(]î(¶î(¶ïRXsïRXî)¾î*½î-—î/±î1s î7™î9—î;î?4î@WîCîEÎîGîJ¯îJ¯ïRXîïPŽîªîkî4îšî$î<1D>î"'î&î*ÆïPŽrïPŽî*ÌïPŽîïMªî=î:ïMªxïMª î!ïMªrïMªî!rî"´î#´î%Æî'Uî*…î*þïMªxïMªî/}ïMªrïMªî/Ùî/ÙïMªxïMªî3ÍïMªrïMªî4ùî5Uî8î;2
îA¼îA¼ïMªxïMªîF;ïMªrïMªîGîI@îJÁîJÁïMªîïKàîBïKàîàïHütî<ïHürïHüîÌî lî#Pî&Šî(ßî+äî-“î/èî2Fî2¿ïHütïHüî6ïHürïHüî6—î8Qî8QïHütïHüî=[ïHürïHüî>§î?#î@œîC2îIƒîJÁîJÁïHüîÌïG)î  î&î(8î+¹î-Jî/î3zî8†î8†ïG)tïG)îEïG)rïG)îE} îJÁîJÁïG)îÌïEVtî!(ïEVrïEVî!ùî&Cî(î+ïEVîàïBit îôïBirïBiî"Âî%Lî(î+@î-î0dî1ýî3¸î9.î9”î<Lî@nîDÇîGîIŽîJÁîJÁïBiîÌï@îIî!î&=î*Òî,oî0”î2×î7ùî:âî?kî@ýîC@îGëîJÁîJÁï@–îÌï>Ìî Uî#Pï>Ìîàï;ètîêï;èrï;èîÌî žî&Qî*ƒî,7î.î1Lî2õî6Úî7[î:nî=Åî@4îB
îIƒîJÁîJÁï;èîÌï:î äî"î$òî'Àî*Äî.jî3^
î9íî:tî=îBíîDNîF­îJÁîJÁï:îÌï8Kî!îî$œî%Ôî(äî+9î.aî1éî4î5î7]î8÷î;8î@ÐîE@îFwîJÁîJÁï8KîÌï6<C3AF>
î%®î)rî*®î*®ï6<C3AF>tï6<C3AF>î/î5?î=ãîDï6<C3AF>rï6<C3AF>îE2îH³îJÂîJÂï6<C3AF>îÌï4®îýî%‡î'Æï4®îàï1Êtî"'ï1Êrï1Êî"Âî%«î(Qî+|î/ƒî4žî7î;dî;dï1Êtï1Êî>Àï1Êrï1Êî?ÜîC­îHîJÂîJÂï1ÊîÌï/÷î#î&î'³î* î,Äî-Cî-Cï/÷xï/÷î1Ãï/÷rï/÷î2Cî4"î4"ï/÷tï/÷î7~ï/÷rï/÷î7þî<"îAèîEÊîH<C3AE>îJÁîJÁï/÷îÌï.$î"‰î$î&Mî(Œî)Îî+Rî0'î2´î5Žî7>î<Sî?-îC{îEBîJÁîKîKï.$îÌï,Zî ~î"î$ î+î,Uî-dî0¯î2M î9î:î>2î?mîBhîCüîH<C3AE>îJÁîJÁï,ZîÌï*<2A>î î" î$ïî*<2A>î*îî-sî3î5Uî8uî;î@!îE|îHOîJÁîJÁï*<2A>îÌï(Æ î$«î(%î.î0mî5rî8©î;&î@•îEDîG«îJÁîJÁï(ÆîÌï&üî"Šï&üîàï$t îFï$rï$îÌî,ï$tï$î ï$rï$î ¾î"î#î%Îî(xî*´î,ùî/×î1xî5 î7þî9Ìî? îFäîJÁîJÁï$îÌï"Eî ¢î$î&Kî*_î+ßî/"î1Sî3<C3AE>î5
î6
î9nî>”îB?ï"Eî‘ïaîi îBîåîî#1î&6î(€ î/yî3Çî5Žî:Ãî>¤îAŸîCfîFïîHþîJÁîJÁï‘ïîƒî¦î>îd î$…î&î*ßî,Jî/@î/@ï—tïî2œï—rï—î2ôî5}î5}ï—tï î?‘ï—rïî?îï—î‘ïªî{ îþîëîëïªtïª î(ÿïªrïªî)˜î,bî,bïªtïªî2Cïªrïªî2Üî5Cî: î<¯î?!îCúîFuîJÁîJÁïªî‘ï×î! îeî¿îý î%xî&øî++î++ï××
î4hï××î4Àî8.
î?ÑîBÞîEîHWï×î‘ïêîîîêxïêî Ãïêrïêî!<21>î#Øî#Øïêtïêî(âïêrïêî*6î-*î3£î8[î>ˆî@îC£îH/îJÁîJÁïêî‘ï
îSîåîî »î$Sî%˜î* î,Cî/Úî1lî36î8î:®î; î>*î?Çî@öîFîH‡îJÁîJÁïî‘ïMîÙîµîôîQî­î ìî&mî)}î*ˆî,Ðî/%î0öî3<C3AE>î5&î7nî9î<@î<¦î>—îCîFmîFmïMxïMîJiïMrïMîJÁîJÁï‘ïƒî×î¡î¡ïƒtïƒîƒrïƒîÉîîPî"³î%/î)
î+²î.çî2tî5ªî7¸î:<î<Áî@<40>îBîCbîHCîJÁîJÁïƒî‘ï° îS îCîèîèï°xï°î!äï°rï°î"Kî#™î#™ï°tï°î&ï°rï°î&…î(*î(*ï°tï°î. ï°rï°î.Éî/1î18î4Šî6\î8¥î:ïî=
îA\îC½îIîJÁîJÁï°î‘ï ÝînîîLîáî#î&î'ãî*[î-5î/ùî4î8î:lî:lï Ýxï Ýî>ìï Ýrï Ýî?îAîAï Ýtï ÝîDçï Ýrï ÝîE†îIBîJÂîJÂï Ýî‘ï
îÚî îEîî!ÿ î'èî+Xî/0ï
ÿ
êq?€`½Ì6Exceptionhandling:Ifthedesiredfileisnotfound,theOPENFILEmethodshouldreturnNILratherthancauseaFILENOTFOUNDerror.Thisissothatthegenericfilesystemcodecancausetheerrorusingtheoriginalfilename,nottheonepackedwithhostanddirectorypassedintotheOPENFILEmethod.Thedeviceshouldfeelfreetosignalanyothererrorsitselfonfailingtoopenthefile,e.g.,FILEWON'TOPENforabusyfile,PROTECTIONERROR,orFILESYSTEMRESOURCESEXCEEDED.Ideally,thiserrorshouldbesignaledinawaythatisresumable,i.e.,sothatausercould,inthebreak,takesomeactiontoremedytheconditionandthentypeOKtocontinue.InmostcasesitsufficesthatalltheinternalfunctionsbelowtheOPENFILEbenamedwithbackslashes,sothattheerrorcodewillchoosetoresumebyrevertingtotheOPENFILEandtryingagain.Thedevicedoesnotneedtoknowaboutthesetofopenfiles(i.e.,thevalueof(OPENP)),andingeneralshouldignoreit.Thatis,thedeviceshouldperformtheopenasiftherewerenootherfilesopenandhencenoconflict.ThegenericfilesystemcodelooksatthestreamreturnedfromtheOPENFILEmethodandthenworriesaboutwhetherthereisactuallyanotherstreamopenbythesamename.Ifthereis,itclosesthenewlyopenedstreamandtheneitherreturnsthepre-existingstream,orcausesaFILEWON'TOPENerrorifthenewandoldaccessmodesareinconflict.Thisdesigniscrufty,butIbelieveitstemsprincipallyfromtherecognitionproblemyoudon'tknowthefullnameofafileuntilyouopenit,soyoucan'ttelluntilthenwhetheryoushouldhavetriedtoopenitinthefirstplace.Itwill,ofcourse,havetobecompletelychangedwhenwegotomultiplestreamsperfile.(REOPENFILENAMEACCESSRECOGPARAMETERSDEVICEOLDSTREAM)ThisisexactlylikeOPENFILE,exceptthatitiscalledafterLOGOUT(orother``after''events)onthenameofanystreamthatwasleftopenoverexit.TheideaistomaintaintheillusionthatthefilereallywasopenoverLOGOUT,butcheckandmakesurenothingchanged.ThegenericfilesystemcodeusestheVALIDATIONfieldtotestwhetherthefilechangedbehindyourback.OLDSTREAMisthestreamthatwasopenbeforeexit,andissuppliedforthebenefitofdeviceswherethereisnopossibilitythatthefilechanged(e.g.,{CORE}),sothattheycanjustreturnOLDSTREAMdirectly.OLDSTREAMisalsoofuseforthosedevicesthathavetocheatinordertomaintaintheillusion.Thiswillhavetochangewhenwegotomultiplestreamsperfile.(GETFILENAMENAMERECOGDEVICE)Performs``recognition''onNAME.Thatis,itreturnsthefullnameofthefilethatwouldbeopenedbyOPENFILEintheindicatedrecognitionmode,orNILifthefileisnotfound.ItisnotnecessarythatOPENFILEactuallybecapableofopeningthefile(thereisnoneedtocheckprotection,forexample).UsedbyINFILEP,OUTFILEP,FULLNAME.(DELETEFILENAMEDEVICE)DeletesthefilenamedNAME,returningitsfullnameonsuccess,NILonfailure.RecognitionmodeisimplicitlyOLDEST.Localdevices,afterrecognizingthefile,shouldmakesurethatitisnotOPENP(openfilescannotbedeleted).ThisandRENAMEFILEareusuallytheonlydevicemethodsthatneedtoknowanythingaboutwhatfilesareopen.(GENERATEFILESDEVICEPATTERNDESIREDPROPSOPTIONS)EnumeratesfilesmatchingPATTERN.Returnsa``filegeneratorobject''oftheform(NEXTFILEFNINFOFN.ArbitraryState).ThisisdescribedinmoregorydetailunderDirectoryEnumeration.î/0ï
î
êïførî ôïhspî
 ïhsîïbrîúî¡îî!tî&3î(“î)øî,dî0Àî3î3ïbtïbî9Ïïbrïbî:Nî?NîC¿îGäîGäïbtïbîJiïbrïbîJÁîJÁïbî‘ï`.îqîjîòîñîñï`.tï`.î &î#„î'·ï`.rï`.î(î+­î,î.óî03î1Ëî4lî6Ÿî;9î=uîAÃîDÜîG;îJÁîJÁï`.î‘ï^[îÕî+î¹îýî èî#5î'2î)î+Ðî.`î2õî5ôî8Ñî;nîA îEjîFýîH<C3AE>îJÁîJÁï^[î‘ï\tîIï\rï\‘î«îçîJîþî$î(rî*ùî-£î/.î2ôî5rî8ëî<½î?ôîA×îEôîG~îJÁîJÁï\‘îïZ¾îüîÉî·îJïZ¾tïZ¾î·î"üî&XïZ¾rïZ¾î&ëî)4î*lî-¿î0Œî0ŒïZ¾tïZ¾ î:î>6ïZ¾rïZ¾î?!î@òî@òïZ¾tïZ¾îE_îK@îK@ïZ¾îïXëîîºïXërïXëî uî Ùî%œî(î+iî/¾î1<C3AE>î6¿î8Jî9Sî< î>³î?ý îFÆîI+îJÁîJÁïXëîïWîiîŸî£îÏîˆîòî$)î'-î*Êî.êî0£î5¡î8 î>/î@ñîD!îG;îG;ïWtïWîHéïWrïWîIAîJÁîJÁïWîïUEîèî¤îëîJî Œî%_î(î)ôî,?î1=î7"î;î=dî=dïUEtïUEîDïUErïUEîDŽîFkîJÂîJÂïUEîïSrî îîÆî|î!Åî%î(Nî*àî/Mî0äî5•î7zî=2î>ÉîAîAïSrtïSrîGÊïSrrïSrîH9îJÂîJÂïSrîïQŸîcîâïQŸîïN»îNîvîîåî (î!¼î%_î)$î+jî-mî/ î2cî55î8(î:mî=ûî?šî?šïN»tïN»îE{ïN»rïN»îF¸îIAîJÁîJÁïN»îïLèî8îî<1D>î î|î"—î$1î&fî*~î.Ìî3÷î6,î9sî:øî</î?<3F>îB´îD<C3AE>îHîJÁîJÁïLèîïKîøî¥îî<1C>î!¿î";î%î)Äî,"î0î3Íî7]î8ìî;Aî?¦îE4îH<C3AE>îJÁîJÁïKîïITtîIïITrïITî¼î±îUî"hî'%î*ñî0*î3Ÿî4øî9÷î>íîCIîF§îH<C3AE>îJÁîJÁïITîïG<C3AF>îôîðî\îÅî4îÞî î#éî&.î*î.×î3,î5Éî8Ôî<¤îA;îC€ îJÁîJÁïG<C3AF>îïE·î/îÊîÙîÜîÜïE·tïE·î î%#î(ïE·rïE·î(Ýî,%î-]î/”î2Yî4çî7'î;
î?9îAeîBêîGýîHZîHZïE·sïE·îJ¯îJ¯ïE·îïD!îúîîîîOî î î#
î(„î+5î-
î2È
î:î<×î?ÍîA¬îC­îF¥îGÿîHæîJ¯îJ¯ïD!îïB¤îî4îáî%î{îî%î öî#<23>î%ñî*î,2î/³î2>î4Èî6
î8ºî9¸î:ýî<Ïî?îB
îBeîC}îEÑîGîJ¯îJ¯ïB¤î‘ï@êî î>î§ îîGî"î#¬î%î&Gî*î.Qî0#î1ëï@êrï@êî1ñï@êî ôï=­t
îîï=­xï=­î€ï=­tï=­îWï=­xï=­î×ï=­tï=­î®î®ï=­xï=­î!ªï=­tï=­î"<22>î"<22>ï=­xï=­ î*]ï=­tï=­î+4î+4ï=­xï=­î/£ï=­tï=­î0zî0zï=­xï=­î7Âï=­tï=­î8Ÿï=­î‘ï:ÀrîŸîî<19>î/ï:Àtï:Àî"çï:Àrï:Àî#»î'ÿî*Âî,î-oî1Yî4Šî4Šï:Àtï:Àî9”ï:Àrï:Àî:î<Cî?ÖîDfîHéîJÁîJÁï:Àîï8íîÜîî-îºîî!Ïî$gî&Çî*$î-*î0î0Šî3Nî62î7Šî9$î>ÈîAîE×îH<C3AE>îJÁîJÁï8íîï7#îøî¿îjîÚîòîòï7#tï7#î$üï7#rï7#î%Ùî(Xî,6î.ìî2žî5î:§î@iî@îîCÄîHˆîJÂîJÂï7#îï5PîÝîôî¿îðîðï5Ptï5P î%Vï5Prï5Pî%®î(®î*.î,î1¨î3Ùî6î;Qî?ÈîBÔîEðï5Pîï2cxîÙï2crï2cîjîáîKî Åî#<23>î&Tî)Ðî.(î16î3øî5oî;î=Mî?·îDgîF*îJÂîJÂï2cîï0™î»îUîÓîë
î"wî%Vî'Çî*Aî/¿î3+î3+ï0™tï0™î85ï0™rï0™î9žî;tî>SîAtîDîFÃîJÂîJÂï0™î‘ï.ÆxîÙï.Ærï.ÆîZî<1D>îîï.Æxï.Æî%fï.Ærï.Æî%çî'Nî*î+Èî.8î0pî4î8Éî;î>Òî@{îDîE½îIBîJÂîJÂï.Æî‘ï,üîîKîúï,üî‘ï*sîæîãî]î<18>î#îôî ˆî!ðî##î'^î+-î,ÿî.Çï*rï*î.Íï*î ôï&Ût îßîßï&Ûxï&ÛîWï&Ûtï&Ûî.ï&Ûxï&Ûî*ï&Ûtï&Ûîîï&Ûxï&Ûî"pï&Ûtï&Ûî#Mï&Ûî‘ï#îrîKî¬î ‰î ‰ï#îxï#îî$ï#îrï#îî$´î%î(,î)Æî*óî/zî1¯î4î7¤î94î;iî=§î@KîDLîFîJÁîJÁï#îî‘ï"$î`ï"$tï"$îï"$rï"$îqîòî$î"å
î)ãî-âî/yî/yï"$tï"$î1þï"$rï"$î2Xî3Œî5¾î7ùî98î;î?´î@
îAXîB—îDÞîJÁîJÁï"$î‘ï QîPï Qtï Qîï Qrï Qîîî!dî&Rî'ýî-7î/‡î1àî5Òî70î9'î<tî>îAã
îH³îJÂîJÂï Qî‘ï~î©îîfî~tï~î"ï~rï~î"Åî"Åï~tï~î)}ï~rï~î*-î*-ï~tï~î0åï~rï~î1Bï~î ôï8t
îîï8xï8î€ï8tï8xï8îÆï8tï8î£ï‘ïKrîƒîîîaîòîòïKxïKî"jïKrïKî#Sî)dî+Iî-Ýî1¨î3¹î8Îî8ÎïKtïKî;SïKrïKî;äî=öîB¯îC@
îJÁîJÁï‘ïxî`îÇ îÙîÙïxtïxî ãïxrïxî!ºî";î%ýî+î.L
î5“î7íî:¨î?îBÉîE¼îH[îIƒîJÁîJÁï‘ï¥îéîéï¥tï¥îï¥rï¥îîVî&î î"îî$Äî*Jî*´î*´ï¥sï¥î-î/5 î7.î8øî<¦î>zî@áîD8îHîJ¯îJ¯ï¥î‘ïÒîîOî'î<1B>îî!
î#?î$öî'‘ïÒrïÒî'—ïÒî ôï•t
î<16>î<16>ï•xïîüï•tï•îÓîÓï•xïî!-ï•tï•î"î"ï•xï î*ûï•tï•î+Òî+Òï•xïî1ï•tïî1Þï•î‘ï ¨r îîÜî Ãî Ãï ¨xï ¨î&ï ¨rï ¨î&çî'Yî,{î-“î0˜î6Ÿî;Qî<÷î?CîB•îCï ¨xï ¨ îJiï ¨rï ¨îJÁîJÁï ¨î‘ï
Þxîï
Þrï
ÞîXîîï
Þxï
Þ
î¼ï
Þrï
Þîäî<î!&î"dî(\î)Üî-@î06î3Ðî7£î7£ï
Þzï
Þî=™
îE-ï
Þrï
ÞîEŠï
Þ
êq?€`½7(RENAMEFILEOLDNAMENEWNAMEDEVICE)RenamesthefilenamedOLDNAMEtohavenameNEWNAME.Returnsthefullnameofthenewfileifsuccessful,NILifnot.RecognitionmodeisimplicitlyOLDforOLDNAME,NEWforNEWNAME.ThegenericfilesystemcodeinvokesthismethodtoimplementthefunctionRENAMEFILEonlywhenthehostfieldsofbothfilenamesmaptothesamedevice.Defaultsto\GENERIC.RENAMEFILE,whichisalsothefunctionthatthesystemcallswhentheoldandnewnamesareondifferentdevices.\GENERIC.RENAMEFILEisdefinedtocopyOLDNAMEtoNEWNAMEandthendeleteOLDNAME.Thefollowingmethodsareinvokedforopenstreams.Theyareallrequired:(BINSTREAM)ReturnsthenextbyteofinputfromSTREAM,ortakestheappropriateactionifatendoffile.Unlessadevicehasagoodreasonnotto,itshouldcall(\EOF.ACTIONSTREAM)atendoffile/stream.ThedeviceBINmethodisactuallynotuseddirectly.Rather,everystreamhasaSTRMBINFNfield,whichisthefunctionactuallyappliedtodotheinput.TheSTRMBINFNfieldcouldthusbeusedtofakeaspecializationofthedevicedifferingonlyintheBINmethod.However,thetypicaluseofSTRMBINFNistotemporarilyoverridethedevicedefault.Inparticular,settingastream'saccesstoINPUTorBOTHautomaticallysetsthestream'sSTRMBINFNtobethedevice'sBINmethod;settingaccesstoNILorOUTPUTsetstheSTRMBINFNtobeanerror.Thisrelievesthedevice'sBINmethodofanyneedtocheckthestream'saccessoneverycalltoBIN.SomenetworkstreamstemporarilysettheirSTRMBINFNtobeaninputeaterwhentheyreceivea``clearoutput''command.Currently,allInterlisp-Dstreamshavebytesize8,soBINalwaysreturnsan8-bitinteger.CallstothefunctionBINarecompiledintotheBINopcode,whichrunsinmicrocodeonsomemachinesiftherequirementsforitaremet.Moreonthislater.(BOUTSTREAMBYTE)OutputsBYTEtoSTREAM.AswithBIN,thismethodisnotuseddirectly.Rather,everystreamhasaSTRMBOUTFNfield,whichisthefunctionactuallyappliedtodotheoutput.Settingastream'saccesstoOUTPUTorBOTHautomaticallysetsthestream'sSTRMBOUTFNtobethedevice'sBOUTmethod.ThereexistsaBOUTopcode,butthedesignisincomplete.(PEEKBINSTREAMNOERRORFLG)ReturnsthenextinputbytefromSTREAM,butdoesnotadvancethestreampointer.ThusasubsequentPEEKBINorBINwillreturnthesamebyte.Atendofstream,thedeviceshouldtakeeofactionaswithBIN,unlessNOERRORFLGistrue,inwhichcaseitshouldreturnNIL.(READPSTREAMFLG)ReturnstrueifinputisavailablefromSTREAM,thatis,ifaBINrightnowwouldsucceedwithoutwaiting.Defaultsto\GENERIC.READP,whichusesEOFPandPEEKBIN.îEŠï
Þî
êïførîI¾ïhspîJjïhsî ôïb5t
îîïb5xïb5îúïb5tïb5îÑîÑïb5xïb5î!ïb5tïb5î!Øî!Øïb5xïb5î&Gïb5tïb5î'$ïb5îï_HrîUîˆîÅîîï_Hxï_Hî%ï_Hrï_Hî%kî&íî*î-›î-ï_Hxï_Hî3Ëï_Hrï_Hî4|î4×î9àî<î>qîBîCîEÅîH‡îJÁîJÁï_Hî‘ï]~îã
î~ï]~tï]~îï]~rï]~î{îÍî‰î 
î'¡î+fî,Ä î2Ìî2Ìï]~tï]~î5Qï]~rï]~î5Èî7÷î7÷ï]~xï]~î=éï]~rï]~î>¸î>¸ï]~tï]~îA=ï]~rï]~îA´îCâîCâï]~xï]~îJï]~rï]~îJÁîKîKï]~î‘ï[«î_îî|îîî"*î'î)´î.´î0Yî71î9‡î>ôî>ôï[«tï[« îGZï[«rï[«îG×îJÁîJÁï[«îïYØî,îsîSî íî#Žî'°î.¼î2¾î5Tî8î=îB<C3AE>îCîîIAîJÁîJÁïYØîïXtî †ïXrïXî!Kî%=î&<26>î)Bî+ˆî0äî3˜î5Þî:?î=3î@ÎîCîEcîHîJÁîJÁïXîïV;îî¢îæîÅî%î%ãî%ãïV;tïV;î5ØïV;rïV;î6î8Dî=î?jîB÷îB÷ïV;xïV;îHéïV;rïV;îIAîJÁîJÁïV;îïThxîÁïThrïThîî¢îî vî vïThxïThî&hïThrïThî&ÅïThî ôïP÷î <0C>î{îÙîÿîî!î$`î)|î)Ôî--î/Sî1î6™ïP÷î ôïMºtî'ïMºxïMºîõïMºtïMºîÒïMºîïJÍrîÕîCîbîî Hî#ÿî'uî'uïJÍxïJÍî,CïJÍrïJÍî-0î/î2<C3AE>î4ý
î<eî@‰îAúîC¢îFhîH0îJÁîKîKïJÍîïIî#îhîÃîRîî" î&î)î+>î,®î1?î3âî4[ïItïI
î>¶î>¶ïIxïIîC„ïItïIîD[ïIrïIîDûîF­îI6îJÁîJÁïIîïG0 îiïG0îïDLîpîºîºïDLtïDLî?ïDLrïDLîÍîÝî!Qî&kî(çî,*î1zî2î6øî:´î?+îA¨îBÛîBÛïDLtïDLîJjïDLrïDLîJÂîJÂïDLîïByîýîíî>îƒî Ýî%Ôî* î,3î.î0cî4Gî4²î7oî7oïBytïByî>þïByrïByî?iîB|îF)îHÿîJÂîJÂïByî‘ï@¦î«î8îî$
î!lî#î%Bî)cî.ãî1Úî3hî5¦î5¦ï@¦tï@¦î8+ï@¦rï@¦î8<C3AE>î=Îî>3îDDîFîJÁîJÁï@¦î‘ï>Óîóî™î™ï>Ótï>Óî(ï>Órï>ÓîšîóîŽ
î&Þî,5î.<2E>î2¯î7˜î8 î9È
î@=îD<C3AE>îE¤îJÁîJÁï>Óî‘ï=îµî{ï=tï=î®ï=rï=îMî)ï=tï=î …ï=rï=î!# î)¦î,_î.Öî4:î4:ï=tï=î;Éï=rï=î<gî>-î@7îB®îGäîGäï=tï=îJiï=rï=îJÁîJÁï=î‘ï;-îîWîUîôîôï;-tï;-î"yï;-rï;-î"ðî$¦î$¦ï;-tï;-î)°ï;-rï;-î*'î,¹î/
î/
ï;-tï;-î6™ï;-rï;-î7î8¯î:î<tî@-î@¥îC®îH<C3AE>îJÁîJÁï;-îï9Zî‡î‡ï9Ztï9Zî ï9Zrï9ZîjîJîÛî!Uî$‰î&î)Æî+þî1!î5î6ãî:oî<Ñî>Wî>Wï9Ztï9Zî@Üï9Zrï9ZîAîAïîEîJÁîJÁï9Zîï7‡îf
î«îªî!Òî!Òï7‡tï7‡î)aï7‡rï7‡î)Éî+Yî-,î/î2Šî5Óî9iî<[î@âîAïîEÑîJÁîJÁï7‡îï5´îÅï5´îï2Ð î÷î¸
îî$[î'sî,xî-Øî/nî/nï2Ðtï2Ðî1óï2Ðrï2Ðî2Kî6€î;î<Æî?ÝîDNï2Ðî‘ï/ãîüî¤îþîmï/ãtï/ãîòï/ãrï/ãî rî"Áî(³î+ƒî-Ýî-Ýï/ãtï/ãî0bï/ãrï/ãî0âî5úî9ÿî=î>¼îE^îG^îJÂîJÂï/ãî‘ï.îhîîÌ î!êî#ùî%!î'Gî*2î*Šî.î/òî2dî5_ï.î ôï*Ótîþîþï*Óxï*ÓîÌï*Ótï*Óî£î£ï*Óxï*Óî©ï*Ótï*Óî†ï*Óî‘ï'ærî±î±ï'æxï'æî·ï'ærï'æîî—î—ï'æxï'æîeï'ærï'æî î tî"[î%Jî%Jï'ætï'æî'Ïï'ærï'æî(ƒî*ùî/×î1î3cî6tî;’î;îî@¬îD6îH{îJÂîJÂï'æî‘ï&î­î­ï&tï& îï&rï&îîî!ûî#Wî%§î+ î0î4åî6ƒî8zî:Éî?~î?õîDŠîE¥îJÂîJÂï&î‘ï$@îîîï$@tï$@î)ï$@rï$@îîHï$@tï$@î ¤ï$@rï$@î! î)hî+ôî.=î3rî3rï$@tï$@ î;Øï$@rï$@î<Hî=áî?¼îBîG
îG
ï$@tï$@îJiï$@rï$@îJÁîJÁï$@î‘ï"mîpï"mî‘ïîcîèîåîåï‰tïî‰rï‰îî!ˆî#Úî& î**î+h
î2Jï‰î ôïCtîƒîƒïCxïCîCtïCxïC îïCtïCîõï‘ïVrîáî\îîJî"tî%öî%öïVxïVî*ÄïVrïVî+½î.Xî1£î42î9™î<î@žîEÕîFvîIÄîJÁîJÁï‘ïŒ î™î™ïŒtïŒîŒrïŒîäîŒîŒïŒtïŒî"ïŒrïŒî"{î%î)î+\î.½î2î2qî4Pî6ëî8ˆî=3î?vîCœîGøîJÂîJÂïŒî‘ï¹îÁî¨î)îîï¹tï¹î™ï¹rï¹îIî"<î"<ï¹xï¹ î*,ï¹rï¹î*„î+Âî.Ïî0Oî4,î6ìî8î<^î@]î@]ï¹tï¹îBâï¹rï¹îC?ï¹î ôïstîÕîÕïsxïsî£ïstïsxïsî¶ïstïsî“ï‘ï†rî¬îuî¼îJî<1E>î$9î'…î'…ï†xïî,Sï†rïî-î/Êî1tî2¼î3Íî3Íï†tïî6Rï†rï†î6¾î9ôî<Ýî@îîEèîJÁîJÁï†î‘ï
³îŠîâî5îµîµï
³tï
³
î(wï
³rï
³î)'î-î/Ïî/Ïï
³tï
³î3+ï
³rï
³î3ƒî6 î6 ï
³tï
³î;íï
³rï
³î<Jï
³è
êq?€`½,8Roughlyspeaking,READPisthecomplementofEOFPforstreamsthatarenotarrivinginrealtime.Itisinterestinglydifferentfornetworkstreams,orthekeyboard.FLGisabitofcruftthatnoteveryonepaysattentionto,andmaybeflushedatsomepoint:ifFLGisNIL,thenREADPshouldreturnNILiftheonlyinputwaitingisanendoflinecharacter.(EOFPSTREAM)ReturnstruewhenSTREAMis``atendoffile'',i.e.,aBINwouldcauseanendoffileactiontooccur.Notethatforanetworkstream,itispossibleforbothEOFPandREADPtobefalsesimultaneously,viz.whenthereisnoinputwaiting(bufferedlocally),buttheremoteendofthestreamhasnotindicatedthatthereisnomoreinput.TherearesomewhocallEOFPonstreamsopenonlyforoutput.Thisisacrock;outputstreamsarealwaysatendoffile.Buttoavoidcomplaints,adevicecouldreturnTforEOFPonanoutputstream.(BLOCKINSTREAMBUFFERBYTEOFFSETNBYTES)Performsbulkinputtransfer:retrievesthenextNBYTESbytesfromSTREAMandstorestheminsuccessivebytepositionsinBUFFERstartingatBYTEOFFSET.Defaultsto\GENERIC.BINS,whichrepeatedlycallsBINand\PUTBASEBYTE.Itisalmostalwaysthecasethatadevicewithanon-trivialBLOCKINmethodcanbemadetobeaBuffereddevice,therebybenefitingfromotherBufferedoperationsaswell.(BLOCKOUTSTREAMBUFFERBYTEOFFSETNBYTES)Performsbulkoutputtransfer:outputsNBYTESbytestoSTREAM,takingthebytesfromBUFFERstartingatBYTEOFFSET.Defaultsto\GENERIC.BOUTS,whichrepeatedlycalls\GETBASEBYTEandBOUT.(FORCEOUTPUTSTREAMWAITFORFINISH)ForcestoitsultimatedestinationanyoutputbufferedonSTREAMbutnotyetsent.WAITFORFINISHmeansthatthefunctionshouldnotreturnuntilitisconfidentthattheoutputhasreacheditsdestinationandbeencommitted.DefaultstoNILL,whichisreasonableforunbufferedstreams.Forexample,foranetworkstream,FORCEOUTPUTsendsthecurrentpacketbeingbufferedup.Forabufferedstreamtothedisk,FORCEOUTPUTwritesouttothediskany``dirty''pages,andmakessurethefileisinsuchastatethatifthemachinewerebootedafterFORCEOUTPUTreturns,thatthefilecouldbesuccessfullyreopenedwithnoinformationlost.(GETFILEINFONAME/STREAMATTRIBUTEDEVICE)ReturnsthevalueofthespecifiedATTRIBUTEofNAME/STREAM,whichcanbeanopenStreamorthenameofa(closed)file.ReturnsNILforattributesitdoesn'tknowabout.Itisconsideredgoodcitizenship,thoughnotabsolutelyrequired,toknowaboutthefollowingattributes:LENGTHLengthofthestream/fileinbytes.Ifthedevice'smethodreturnsNIL,butthestreamisrandomaccess,thegenericGETFILEINFOcodetriesthedevice'sGETEOFPTRmethodinstead.SIZELengthinpages,i.e.,(FOLDHIlengthBYTESPERPAGE).î<Jï
³î
êïførî ôïhspî
 ïhsîïbrî0î>ïbtïbî qïbrïbî!î"vî$Þ î,ºî.|î.|ïbtïbî1Øïbrïbî2gî4®î9ªî<<3C>î>ÞîA\îFîH9îJÁîJÁïbî‘ï`.îÞî6îî¾ îVî#Êî%Ùî*ÿî0î1²î3ãî9¾ï`.î‘ï]JxîÍï]Jrï]Jî(îjîjî\îëîî´î ýî&¬î)§î/>î1î3¦î6€î8Gî<øî>gîAÎîE¹îFïîFïï]Jxï]JîI+ï]Jrï]JîIƒîJÁîJÁï]Jî‘ï[€tîï[€rï[€îÆî½î½ï[€tï[€îðï[€rï[€îHîî#‘î#‘ï[€tï[€î&ï[€rï[€î&nî'¡î)Òî,¼î06î4Øî6î7Ùî:bî;íî>t îD0ï[€î ôïX:tîþîþïX:xïX:îÌïX:tïX:î©ïX:îïUMrîÏî»îxïUMxïUMî!FïUMrïUMî!Õî#Jî%œî(\î*î-˜î04î1hî1hïUMtïUMî3íïUMrïUMî4|î8°î<mî>gîA'îBéîEZîIAîJÁîJÁïUMîïSzîÈîpîî÷îVî£î%î*î+{î- î2iî4Èî8$î8$ïSztïSzî;€ïSzrïSzî<(î?î?ïSztïSzîC5ïSzrïSzîCÝîE­îGÀîJÁîJÁïSzîïQ§î1î°î \î#Ûî%>î'<î*Ûî/¢î5«î:Èî=?î?îD2îFàîH<C3AE>îJÁîJÁïQ§îïOÝîÒîî_îî!¾î%î&Vî(.î+î/ïOÝîïLùîîÂîCî4î¬î¬ïLùtïLùî#ïLùrïLùî#|î%qî*Rî-²î0¸î2äî7—î8 î;î<mî=†îA îEüîJÁîJÁïLùîïK&îÈîîŒî&îÃîÐî"Sî#åî'†
î.«î/ºî3àî7î;œî;œïK&tïK&î<sïK&rïK&î<Ýî>ýî>ýïK&tïK&îBYïK&rïK&îBÃîD­îF<C3AE>îJÁîJÁïK&îïISî×ïISî ôïFtîƒîƒïFxïFîQïFtïFî(ïFxïFî²ïFtïFî‰î‰ïFxïF î#õïFtïFî$Ìî$ÌïFxïFî)^ïFtïFî*;ïFîïC)rîxîªîVî"Üî(`î*Ãî-Öî-ÖïC)xïC)î2hïC)rïC)î2òî6ˆî9òî9òïC)xïC)î>ÀïC)rïC)î?JîBîEçîIAîJÁîJÁïC)îïA_ îÐîîNî Óî ÓïA_xïA_î%]ïA_rïA_î%ºî*yî+éî+éïA_xïA_ î3UïA_rïA_î4 î4gî9¿î;Dî;DïA_tïA_ îF/ïA_rïA_îFäîJÁîJÁïA_î‘ï?Œ î
îìîìï?Œtï?Œîqï?Œrï?ŒîÉîRï?Œtï?Œ î)fï?Œrï?Œî)Ãï?Œî‘ï<Ÿîîî?îîÎîî åî#—î$§î(Îî+Ìî,Ü
î3sî3sï<Ÿtï<Ÿî9Tï<Ÿrï<Ÿî9¿î>¬îAîBñîFîHîIÅîJÂîJÂï<Ÿî‘ï:ÌîîîW î%¦î(Þî,Mî1× î8Qî9Òî<•ï:Ìî ôï7<C3AF>tîZï7<C3AF>xï7<C3AF>î(ï7<C3AF>tï7<C3AF>îÿîÿï7<C3AF>xï7<C3AF>î‰ï7<C3AF>tï7<C3AF>î`ï7<C3AF>xï7<C3AF> î$Ìï7<C3AF>tï7<C3AF>î%£î%£ï7<C3AF>xï7<C3AF>î*5ï7<C3AF>tï7<C3AF>î+ï7<C3AF>îï4¢rîhîîêî#`î(Eî(Eï4¢xï4¢î,×ï4¢rï4¢î-Pî-Éî1Oî2ñî2ñï4¢xï4¢î7¿ï4¢rï4¢î8<C3AE>î<®î?îB†îEßîEßï4¢xï4¢îJiï4¢rï4¢îJÁîJÁï4¢îï2Øî[îØîØï2Øxï2Ø îDï2Ørï2Øîînî$Óî&eî&eï2Øtï2Ø
î2'ï2Ørï2Øî2èî6× î=eî@Uî@Uï2Øtï2Ø îJiï2Ørï2ØîJÁîJÁï2Øîï1îîï1tï1îvï1rï1îÓï1î ôï-¿t îßîßï-¿xï-¿î­ï-¿tï-¿î„î„ï-¿xï-¿ î$ï-¿tï-¿î$îï-¿î‘ï*ÒrîîÖîEî 9
î'Îî+î0î65î8Ðî8Ðï*Òxï*Òî=žï*Òrï*Òî>¹îAÎîD×îGµîJÁîKîKï*Òî‘ï)x îï)rï)îî§î!Tî#“î(èî-@î/”î3¡î6Åî7ûî9Gî?AîAîîD-îH{îJÂîJÂï)î‘ï'>îî1
îî <20>î#À î*Àî+î0nî1ðî1ðï'>tï'>î5Lï'>rï'>î5þî9Ýî; îA»îCË îJÁîJÁï'>î‘ï%kî[ï%kî‘ï"‡î3îùî.îQî!<21>î&]î&]ï"‡tï"‡
î/šï"‡rï"‡î0î3Ïî6&î:åî?5îBöîH†îJÁîKîKï"‡î‘ï ´î9îaî÷îcî î"kî%­î%­ï ´´
î.êï ´rï ´î/mî3kî5Üî7ˆî9äî<Îî?lîDîH9îJÂîJÂï ´î‘ïáî¦î}î»îîKîØî!æî"ïî%þî(©î)èî,&î1…î4´î9,î<Eî<Eïátïá
îEïárïáîEæîJÁîJÁïáî‘ïî0îaîî5îø î$.î*î,ðî.È
î6î8ˆïî ôïÑt îßîßïÑxïÑ
î²ïÑtïÑî‰î‰ïÑxïÑî% ïÑtïÑî%÷î%÷ïÑxïÑî*fïÑtïÑî+CïÑî‘ïärî¬îòî<1B>î îfî%î%ïäxïäî+šïärïäî,î-§î-§ïäxïä
î6zïärïäî7>î;0î=¢î?yîAQîD¨îI+îJÁîJÁïäî‘ïîÃîVîâîàîÑî cî ¼î%Åî%Åïî(Jïî(£î*³ î0—î1Àî6Nî9ßî=èî>Aî?<3F>î@Ì îGîJÁîJÁïî‘ïG îƒîîK î$™î*Oî+Ïî/^î3î5@î;
îA'ïàï©tîêï©rï©îÌî"kî$î&K
î-0î.Âî2î2ûî4bî6¥î;§î@“îE(îE(ï©tï©îG­ï©rï©îHoîJÁîJÁï©îÌïÖî Zî$øî&”î+áî0tî3î7øî7øïÖtïÖ
îA5ïÖrïÖîAêîE^îH<C3AE>îJÁîJÁïÖîÌï
î"¼î"¼ï

î*Kï

î*£î/}î4ï
îàï
\tî
\rï
Ìî"Yî#Ùî'Íî*2î*2ï
\tï
\î0êî0êï
\rï
\î4ï
\tï
\î5r î@]ï
\rï
\î@ºï
\ <
êq?€`½á9CREATIONDATEDatewhenthefile'scontentswerecreated,asastring.Thecreationdatedoesnotchangewhenafileiscopiedorrenamed,onlywhenitischanged.WRITEDATEDatewhenthefilewaswrittentoitscurrentplaceofstorage.READDATEDatewhenthefilewaslastread.ICREATIONDATE,IWRITEDATE,IREADDATEThecreation,writeandreaddatesasintegers,suchasfromthefunctionIDATE.TYPETypeofthecontents:TEXTforfilesthatcontainonly``text''(generallymeaning7-bitascii),BINARYforallothers.NILmeansunknown.AUTHORNameoftheuserwhocreatedthefile(astring).Thefollowing``generic''attributesaregenerallyhandledbythegenericsideofGETFILEINFOifthedevice'sGETFILEINFOmethodreturnsNIL:EOLTheendoflineconventionofthestream(CR,CRLForLF).BUFFERSThenumberofpagemapbuffersforusebythestream(seedescriptionofMAXBUFFERSfieldofpagemappedstreams).ENDOFSTREAMOPActiontotakeonanyattempttoreadbeyondtheendoffile.Thisisafunctionofoneargument,thestream.Thefunctioncancauseanerror,orreturnavalue,whichisinterpretedasavaluetoreturnfromBIN.ThedefaultENDOFSTREAMOPcausesanENDOFFILEerror.ACCESSAnatomdescribingtheaccessmodeofthestream(INPUT,OUTPUT,etc).Thisissogenericthatitishandledbeforethedevice'smethodeverseesit.BYTESIZE,OPENBYTESIZEThesizeofbytestransmittedonthestream.Always8thesedays.(SETFILEINFONAME/STREAMATTRIBUTEVALUEDEVICE)SetsthevalueofthespecifiedATTRIBUTEofNAME/STREAMtobeVALUE.ReturnsTifsuccessful,NILifunsuccessful,orforattributesitdoesn'tknowabout.ItisnotgenerallyrequiredthatSETFILEINFOrecognizeanyattributesatallNILLisaperfectlygoodfillerforthisslot.MostdevicesrecognizenomorethanTYPEandCREATIONDATE(ICREATIONDATE),andeventhosearenotveryimportant,asmostapplicationssetthoseattributesinthePARAMETERSargumenttoOPENFILEwhencreatingafile.ATTRIBUTE=LENGTHimpliesactuallytruncating(orlengthening)thefile;however,theSETFILEINFOneednothandlethisitselfifitreturnsNIL,thenthegenericfilesystemwillattempttousetheSETEOFPTRmethodinstead.Thefollowingoperationsareonlyrequiredofrandomaccessstreams.Theydefaulttothefunction\IS.NOT.RANDACCESSP,whichcausesa``Streamisnotrandaccessp''errorwhencalled.(GETFILEPTRSTREAM)Returnsthecurrentfilepointer(byteposition)inSTREAM.Thefilepointeriszerowhenthestreamisopened(exceptforACCESS=APPEND),andisincrementedbyoneforeachbyteread.î@ºï
êïførîI¾ïhspîJjïhsîàïbt îôïbrïbî"Âî&iî*iî-î0¢î6Yî9õî?`îAZîBÑîGGîHîJÁîJÁïbîÌï`. î%cî(mî*¼î/<î2Ëî3Ñî6î7Zî;¢î=AîC"îFîIšîJÂîJÂï`.îÌï^dî
î$Mï^dîàï[Ætîoï[Ærï[ÆîÌî úî$€î&±î(ëî+iî/ëî1kî3î7°î;î<ŸîA&ï[ÆîàïYtî˜ïYrïYîÌî úî$€î&±î(ëî+iî-ºî0«ïYîàïVxt îËïVxrïVxî{ïVxtïVx î'áïVxrïVxî(‘î(ïVxtïVxî0 ïVxrïVxî0&ïVxîàïT^îÌî °î&Tî)Þî,¢î/Êî3`î5î: î=Þî?šîCîEzîJÁîJÁïT^îÌïR”tî!ÿïR”rïR”î"\ïR”îàïOítî<ïOírïOíîÌî!sî#Lî%Ëî+Ðî+ÐïOítïOíî/,ïOírïOíî/Òî2/î5;î8)î=$î@\îD“ îJÁîJÁïOíîÌïNî#5î&Lî)üî)üïNtïNî/ïNrïNî/^î1mî3.î7xî7Ðî7ÐïNtïNî:UïNrïNî:­î>ÂîD¨ïNîàïKstîêïKsrïKsîÌî!¹î#Dî%uî(@î+î/®î1ßî4î5<C3AE>î9³ïKsîïH†îUîN
îa î%^î'Ÿî-pî2§î4<C3AE>î6Üî;<3B>î>Sî?ùî?ùïH†tïH†
îI6ïH†rïH†îIŽîJÁîJÁïH†îïF³îÂî²î²ïF³tïF³
î ïïF³rïF³î!Gî&!î*¤î*¤ïF³tïF³î-)ïF³rïF³î-¨ïF³îàïD tîeïD rïD îÌî uî"þî$‰î' î-íî/xî1©î5êî6cïD tïD î8ïD rïD î8Áî8ÁïD tïD î<ïD rïD î<uî> î> ïD tïD î?¹ïD rïD î@<40>ïD îàïAetîÁïAerïAeîÌî £î%Íî'†î-`î2î4Nî6Ãî8¿î;î?<3F>îBZ
îI7îJÂîJÂïAeîÌï?t î&2ï?rï?’î&Šî)Šî+ î2òî85ï?’îàï<ët îËï<ërï<ëî"Âî'î(±î+Žî-yî/ÿî4íî6€î9î>Kî@<40>îC+îDÉîGmîGØîJÂîJÂï<ëîÌï;îî #î%yî'î)<29>î/ýî2<î6âî7Iî:î?UîAÁîEUîG&îJÁîJÁï;îÌï9Nîî#î$µî(¤î,žî-ù
î4õî6“î7­î;Dî<áî@ýîDRîDRï9Ntï9NîF×ï9Nrï9NîG£îHîJÁîJÁï9NîÌï7{î"Cî"Cï7{tï7{ î-.ï7{rï7{î-†î1<C3AE>î3Sî3Sï7{tï7{î6¯î94î<<3C>ï7{rï7{î<èî@‚î@Úî@àï7{îàï4Ôtîêï4Ôrï4ÔîÌî î#… î*
î,aî0bî4+î5Ùî8-î<î=
ï4Ôtï4ÔîA=ï4Ôrï4ÔîBîBï4Ôtï4ÔîGï4Ôrï4ÔîGíîJÂîKîKï4ÔîÌï3î ¶î!ôî#Šî("î*Áî+éî-'î2Cî6bî8“î=ƒîB]îE3îGÝîI
ï3îàï0ctîF î&Zï0crï0cî'¸î*¶î-‡î/gî3!
î:<3A>î<®î?4îD!îDÎîIeîJmîJmï0cîÌï.<2E>î!&î$"ï.<2E>î ôï+St îßîßï+Sxï+S
î²ï+Stï+Sî‰î‰ï+Sxï+Sî% ï+Stï+Sî%÷î%÷ï+Sxï+Sî)ëï+Stï+Sî*Âî*Âï+Sxï+Sî/1ï+Stï+Sî0ï+Sî‘ï(frîSî<15>îî­îëî"€î"€ï(fxï(fî)ï(frï(fî){î+î+ï(fxï(f
î3åï(frï(fî4Jî5Öî7¥î7¥ï(fxï(fî;™ï(frï(fî<Tî<¹îAÌîAÌï(ftï(fîB£ï(frï(fîCîDF
îJjï(ftï(fîKAîKAï(fî‘ï&“îï&“rï&“înî¡ î©î?î N î&0î'Xî+åî/tî3*ï&“î‘ï#¦îßî!îkî$î †î#)î#)ï#¦tï#¦
î,fï#¦rï#¦î,Ãî2²î5) î;î<~î?Gï#¦tï#¦îB£ï#¦rï#¦îBÿîDAîEBîJÁîJÁï#¦î‘ï!Óî7î¼î0îî (î äî$¢î)Ÿî/îî2+î5ôî9Oî9Oï!Ótï!Óî<«ï!Órï!Óî=hî@Uî@Uï!Ótï!Ó îJiï!Órï!ÓîJÁîJÁï!Óî‘ï î
ï îõï î<1D>î î$î'õî*<2A>î-Eî0˜ î7<C3AE>î9î=! îDóîGSîJÂîJÂï î‘ï- îsîóî-xï- î"ï-rï-î"Xî(Qî)Ñî)Ñï-tï-î0‰ï-rï-î0áî4gî9mî:jî<©ï‘ï@xî@rïî@tï@î@rï@î +î%Fî*° î1î4& î<pî?'îB`îH<C3AE>îJÁîJÁï‘ïmt
îÎïmrïcîÎî Qî$äî'“î-7î.<2E>î3]î3]ïmtïmî5âïmrïmî6Ïî:î<qîAFîC½îHFîJÁîJÁï‘ïšîlîìî3îštïšî"óïšrïšî#Kî(%î,¬ïšî ôï î
îc îPîêî Hî&î(î-}î1Îî7^î8*î;÷î@âîBÖîEzîJÁîJÁï î ôïVtîéïVrïVîîvî"€î#}î(°î)îî,4 î4=î7€î;î>ÑïVî ôït
îîïîÖïî³ïî‘ï #rîÚîLî'î¢î$zî(î-Þî/Ÿî/Ÿï #xï #î4mï #rï #î5^î5÷î8âî;]î@5îAµîDÊîHîJÂîJÂï ‘ï
YîÒîî¾îWî!fî!fï
Yxï
Yî%æï
Yrï
Yî&>î'öî'öï
Ytï
Yî-ï
Yrï
Yî.)î0²î1ð
î9 î;nî=ëî?úîBüîEÝîHÎï
Y<08>
êq?€`½710Althoughthisoperationisonlyabsolutelyrequiredforrandomaccessstreams,itisdesirabletosupplyitforotherstreamswherepossible.Forexample,whenreadingafilesequentiallythroughPupFtp,thestreamcancountthebytesastheygobyandthusgiveanaccuratevalueforGETFILEPTR.Ifastreamhasnoideaatallofposition,itcanmakeitsGETFILEPTRbethefunctionZEROandtherebyatleastavoidbreaksfromcodethatcallsGETFILEPTRcarelessly.(GETEOFPTRSTREAM)ReturnsthefilepointeroftheendofSTREAM,i.e.,thefilepointerthatGETFILEPTRwouldreturnafterthelastbyteofSTREAMisread.SameastheLENGTHattributeforastreamthatrepresentsafile.Ofcourse,non-randomaccessstreamsmayhavenoideawheretheendis,andcausinganon-randaccessperrorisperfectlyacceptable.(SETFILEPTRSTREAMBYTENUMBER)SetsthefilepointerofSTREAMtobeBYTENUMBER.ThespecialvalueBYTENUMBER=1meanstheendofthestream;othernegativevaluesareillegal.SETFILEPTRbeyondtheendofthestreamispermissible,butithasnoimmediateeffectbeyondchangingthelogicalfilepointer.AttemptingtothenBINcausesanEOFerror.AttemptingtoBOUT(forafileopenforwrite)shouldextendthefile,sothatitseofisimmediatelybeyondthenewlyBOUTedbyte.AswithGETFILEPTR,thereisnorequirementthatthisworkonnon-randomaccessstreams,anditmaybecompletelyimpossibleonsomeofthem.However,forthosenon-randomaccessstreamsthatperformGETFILEPTR,itispossibletofakeSETFILEPTRforvalueslargerthanthecurrentfilepointerbyskippingsomenumberofbytesinthefile,e.g.,byperforming(RPTQ(DIFFERENCEBYTENUMBER(GETFILEPTRSTREAM))(BINSTREAM)).TherearesomeapplicationsforwhichforwardSETFILEPTRisalltherandomaccessthatisactuallyrequired,soitisnicetobeabletoaccommodatesuchapplications.(BACKFILEPTRSTREAM)BacksupthefilepointerinSTREAMbyonebyte.Functionallythesameas(SETFILEPTRSTREAM(SUB1(GETFILEPTRSTREAM)),butmaybepossibleonnon-randomaccessstreamsbymaintainingaone-characterbuffer,whichisallthebackingupthisoperationisformallyrequiredtoperform.IbelievethemainuseforthisisinREAD,whichneedstobackupthestreamonecharacterwhen,forexample,itreadsabreakcharacterterminatinganatom.(SETEOFPTRSTREAMLENGTH)ChangesthelengthofSTREAMtobeLENGTH,i.e.,``sets''itsendoffilepointer.Thismayrequirelengtheningortruncatingthefile.Usedbythefunction\SETEOFPTRandbySETFILEINFOforattributeLENGTHwhenthedevice'sSETFILEINFOmethoddoesn'thandleit.Thefollowingthreefieldsareplaceholdersforpossiblefutureextensions.Thesefieldsarenotcurrentlyusedatall:(LASTCSTREAM)ReturnsthelastcharacterreadfromSTREAM,i.e.,thelastbytethatwasBINed,asacharacter.LASTCiscurrentlyimplementedviaBACKFILEPTR.îHÎï
êïførî ôïhspî Lïhsîïbrî®îRîzî êî$ î*†î0î2Wî7yî;‰î@ØîB2îC¢îIAîJÁîJÁïbî‘ï`7îßîî3î±î …î$|î)ñî*Wî,âî2î6%î:øî<î>L îE»îJÁîJÁï`7î‘ï^mîîªîLî
î$î&£î*iî,Kî/<2F>î1°î3ßî6Éî:î= î?DîDØîH²îJÁîJÁï^mî‘ï\£t î÷ï\£rï\£îÜîiîôî&î!<21>î$î&'î)&î*Çî,½î.~î4î5wî8 î;Äî=¥î=¥ï\£tï\£ îF ï\£rï\£îF™îHîJÂîJÂï\£îïZÐîØîØïZÐtïZÐî4ïZÐrïZÐîŒîî åî"Pî%Fî(Õî,ÿî07î3Nî5íî8Ìî8ÌïZÐtïZÐ îA2ïZÐrïZÐîAŠ
îGpïZÐî ôïWŠt î1ïWŠxïWŠîÿïWŠtïWŠîÜïWŠîïT<C3AF>rîšîÍîî¡î .î"`î$ëî&wî&wïT<C3AF>xïT<C3AF>î+EïT<C3AF>rïT<C3AF>î+÷î.^î0<C3AE>î2Ìî7eî:î:ïT<C3AF>tïT<C3AF> îBkïT<C3AF>rïT<C3AF>îBÅîFÃîJÂîJÂïT<C3AF>îïRÊî¬îêîIî8îÑîÑïRÊxïRÊî!ŸïRÊrïRÊî"î#Qî&¢î'î*¦î,5î.tî.tïRÊtïRÊî3~ïRÊrïRÊî3äî9Pî;mî<xî@ÇîCs îIÄîJÁîJÁïRÊîïP÷îíî î¹ î"¢î&¹î+·î.Æî2î4)î7,î;Nî=¹î@{îBJîE îIÅîJÂîJÂïP÷îïO-î©îìî*î$©
î+*ïO-î ôïKðt
îîïKðxïKðîÖïKðtïKðî­î­ïKðxïKð î!ÉïKðtïKðî"¦ïKðîïIrîVîîáîˆî#ïIxïIî"ñïIrïIî#Xî$èî&»î&»ïIxïI î.×ïIrïIî/–î/þî2¶î7î:šî:šïIxïI îB¶ïIrïIîCîDæîF­îJÂîJÂïIîïG9îÂîKîÖîîÁî!0î&mî*kî,î0pïG9îïDUt î÷ïDUrïDUî^î&ïDUïDUî fî"ÿî$™î&Ùî*ÂïDUïDUî+)î,w î3çî6Hî7î9Öî;½îB]îFîJÁîJÁïDUîïBîpîÖî1î î$Âî%O î,˜î.Mî1xî1xïBtïBî3ýïBrïBî4Šî8Èî:Àî:ÀïBtïBî=EïBrïBî=ÑîA îB, îIAîJÁîJÁïBî‘ï@¯tîíï@¯rï@¯îgîî2îŽîôî &î$î(|î,ëî/>î1óî3¬î6mî8<î:<3A>î;ï
îCµîH<C3AE>îJÁîJÁï@¯î‘ï>Üîcï>Ütï>Üî¿ï>Ürï>Üîîºîîï>Üï>Üîï>Üî‘ï;ïîƒî~ï;ïtï;ï îäï;ïrï;ïî£î"
î#Zî%B
î,ìî/šî2î5xî7` î?îC îH8îJÁîJÁï;ïî‘ï:îÀî<14>îg î5 î#Öî%µî) î*³î.kî.Êî4Õî6ëî:a îBîEüîJÁîJÁï:îï8RîGî…î…ï8Rtï8R î ëï8Rrï8Rî!²î"ñî$Fî)lî+î-ïî-ïï8Rtï8R î6Uï8Rrï8Rî6Äî8êî<ÿî@ÒîCàîF(îJÁîJÁï8Rîï6îhîœîî!î%î*šî,Ãî0Åî2âî5°î8ßî</î>š îF6îF6ï6tï6îK@îK@ï6îï4¬
î¸î¸ï4¬xï4¬ î"Ôï4¬tï4¬î#¿
î-çî-çï4¬xï4¬î2µï4¬tï4¬î5Mî9”î9”ï4¬xï4¬î>bï4¬tï4¬î@ï4¬rï4¬î@ÓîA>îE$îG]îJÁîJÁï4¬îï2Ù îî,îî#1î#1ï2Ùtï2Ù î+—ï2Ùrï2Ùî,î-Yî/0î1wî6~î:rî='î>{îCuîI+îJÁîJÁï2Ùîï1î¹î÷îî6îùîÃîC
î%¸î(º î0ï1î ôï-Ét îßîßï-Éxï-Éî­ï-Étï-ÉîŠï-Éî‘ï*ÜrîîÏîPîÚî Àî"<22>î"<22>ï*Üxï*Üî'^ï*Ürï*Üî(î*#î,ðî0xî1 î9<î;½î?\îA,îA,ï*Ütï*Ü
îK@îK@ï*Üî‘ï) xî_ï) tï) î8îE
î%\î%\ï) xï) î**ï) tï) î+Øï) rï) î,Šî.ßî1¸î3~î8<C3AE>î:j îBîEüîJÁîJÁï) î‘ï'6î±
îeî´ î$[î)î-4î.Åî0Øî3[î8<C3AE>î:Óî=˜îCàîEpîJÁîJÁï'6î‘ï%lîöî}îîbîEî"Îî%î([î*ªî,Àî/9î0î2î2ï%ltï%lî5bï%lrï%lî6î9þî=·î?>îB]îDHîF€îJÁîJÁï%lî‘ï#™îîÅî£î²î$Rî%zî(êî)çî-<2D>î3D
î:oî<2î?…ï#™î ôï \t î1ï \xï \îÿï \tï \îÖîÖï \xï \î¦ï \tï \îƒï \î‘ïorîîFîbîîïoxïoî"Îïorïoî#9î$Ìî&¢î&¢ïoxïoî+rïorïoî,5î.­î2î4Qî6íî8î:Øî?Ùî@DîCAîF)îJÁîJÁï‘ï¥
îåî„ îçî" î$ºî%î(ˆî*^î,—î1çî1çï¥tï¥ î:Mï¥rï¥î:­î=?î?î?ï¥tï¥
îHRï¥rï¥îH²îJÁîJÁï¥î‘ïÒîïîïïÒtïÒîùïÒrïÒîQî×î!î%øî%øïÒtïÒ
î/5ïÒrïÒî/<2F>î4gî8ôî=Jî>wïÒî ôïXî ¤îŠîìîxî¦îî#Çî%Þî*õî.ñ
î5Àî6 î9úî=†î?´îBîG´îJÁîJÁïXî ôïŽî _î
Žî ôïQtîÕîÕïQxïQî£ïQtïQî€ï‘ïdrîÌî1îî ¡î#Áî'-î'-ïdxïdî+ûïdrïdî,ßî/wî1Üî4aî7vî:Iî<ûî<ûïdtïdî?€ïdrïdîAÏîC„îD´ îJÂîKîKï‘ï tîÄï ‘îîZî
î$"î&1î&1ï
î/nï î/Ëï  ˜
êq?€`½Ÿ11(FREEPAGECOUNTHOST/DIRDEVICE)IntendeduseistoreturnthenumberoffreepagesonHOST/DIR.MaybefoldedintoageneralGET/SETdevice/directoryinfooperation.(MAKEDIRECTORYHOST/DIRDEVICE)IntendeduseistocreateanewdirectoryHOST/DIR.TheremainingfieldsintheFDEVareforbufferedandpage-mappedstreams,andareignoredfornon-buffereddevices.Thesefieldsaredescribedinseparatesections.StreamsThefollowingfieldsareusedbyallstreams:DEVICEPointertothisstream'sFDEV.FULLFILENAME``Full''namebywhichthisfileisknowntotheuser.Shouldbeanuppercaselitatom,fullyqualifiedsothatgivingthesamenamebacktothefilesystemshouldproducethesamefile(totheextentthatthedevicecansupportsuchuniqueness).IsNILforunnamedstreams.FULLNAMEAccessfield.IsthesameasFULLFILENAME,unlessthatisNIL,inwhichcaseitisthestreamitself.ThisavoidsthecircularitythatwouldresultiftheFULLFILENAMEfieldcontainedthestreamdatum.NAMEDPAccessfield.IsTifthestreamsisnamed,i.e.,itsFULLFILENAMEisnon-NIL.ACCESSBITSContainsanumericcodedescribingwhataccessmodethefileisopenfor:thereareread,writeandappendbits.ThisfieldisusuallyaccessedindirectlyviatheACCESSfield.However,therearemacrosforreferringtoparticulartypesofaccessusingmoreefficientbittestoperations:(OPENEDSTREAM)ACCESSisnotNIL.(READABLESTREAM)Readbitison:ACCESSisINPUTorBOTH.(READONLYSTREAM)Onlythereadbitison:ACCESSisINPUT.(APPENDABLESTREAM)Appendbitison:ACCESSisOUTPUT,BOTHorAPPEND.(APPENDONLYSTREAM)Onlytheappendbitison:ACCESSisAPPEND.(DIRTYABLESTREAM)Appendorwritebitison:ACCESSisOUTPUT,BOTHorAPPEND.Yes,thisisoperationallythesameasAPPENDABLE,giventhefourpossiblevaluesofACCESS.(OVERWRITEABLESTREAM)Writebitison:ACCESSisOUTPUTorBOTH.(WRITEABLESTREAM)Writebitison,orappendbitisonandfileisatEOF.Avoidusingthisone,it'salittlestrange.î/Ëï ‘î
êïførîIïhspîJjïhsî ôïb5t
î<16>î<16>ïb5xïb5îmïb5tïb5îDïb5xïb5î!³ïb5tïb5î"<22>ïb5îï_HrîbîÏî3îØîýî"Sî'uî)%î+êî/«î1©î1©ï_Hxï_Hî7‰ï_Hrï_Hî8]î8Ûî<î=ëîB.îDüîFîJÁîJÁï_Hî‘ï]~î î!+î#Þ î)Ùï]~î ôïZAt
î<16>î<16>ïZAxïZAîmïZAtïZAîDïZAxïZAî!³ïZAtïZAî"<22>ïZAîïWTrî=îîÂîBîî î"Òî(qî(qïWTxïWTî.QïWTrïWTî.®ïWTî ôïSãî
!îôîüîî´î´ïSãtïSãî ïSãrïSãî ìî#î&)î,î/$
î7þî=Ÿî@¬îCVîH²îJÁîJÁïSãî ôïR îî îdî6îºî àî&Øî(Xî-€î2tïRî ôïM„vî¹ïM„rïM„î¿ïM„î ôïIÜî <0C>î{îÿî%î2îîÁî#­ïIÜî ôïFktîþïFkrïFkî/îÑîQîÃî$àî$àïFktïFkî(<ïFkrïFkî(™ïFkî ôïBñt îïBñrïBñî/îqîî!î$ûî'‡î)Ûî+3î/¢î1<î3‡î6Ãî75î;Ûî=¸î?•îEêîJÂîJÂïBñî/ïAîGîèî!Œî$8î(8î*wî-Óî1rî4—î6$î8cî:«î?îC\îH<C3AE>îJÁîJÁïAî/ï?TîÊîOîî"î&Qî);î+¸î0î2Áî7çî;4 îC:îCÞîEŠîEŠï?Ttï?TîHï?Trï?TîH²îJÁîJÁï?Tî/ï=<3D>îî!Üï=<3D>î ôï:tî¬ï:rï:î/îzîÝîAî ¬î"éî&Dî'Ðî'Ðï:tï: î1äï:rï:î2 î6žî9Iî:“î:“ï:tï:î=ï:rï:î=Óî?_îCHîFîGGîH<C3AE>îJÁîJÁï:î/ï8=î<1B>î¢î¢ï8=sï8=î"î%tî'R
î,rî.¨î1÷î4öî6 î7ç îAlîCñîHîîJ¯îJ¯ï8=î/ï6sîîâï6srï6sîèï6sî ôï3tîþï3rï3î/îoîÆîî ~î ~ï3tï3î!Uï3rï3î!­î"àî%î)Öî+î/Ãî2(î3Ôî3Ôï3tï3 î=èï3rï3î>@î?~îB=ï3tï3îDÂï3rï3îEï3î ôï/ˆt îZï/ˆrï/ˆî/îôî"î#…î&Í î-cî0Âî4Ñî8¨î;
î=uî>äîBXîEîHœîJÂîJÂï/ˆî/ï-µîšîî ¾î%Ÿî(Žî)
î,î/Dî0©î5Qî:À î@ÒîCîE_îE_ï-µtï-µîJiï-µrï-µîJÁîJÁï-µî/ï+âî›îî! î$<24>î&Éî+`î-„î3î4¬ î:Ãî><î?ÜîCÏîG]îJÁîJÁï+âî/ï*îUîCî  
î'Aï*î/ï'4tîçîçï'4xï'4î"µï'4tï'4î#Œï'4rï'4î'¸î'¸ï'4tï'4î,Âï'4rï'4î-î.Xî0žî0žï'4tï'4î3#ï'4rï'4î3€ï'4î/ï$Gtî•î•ï$Gxï$Gî$cï$Gtï$Gî%:ï$Grï$Gî'¸î+(î-î.Tî0¥î0¥ï$Gtï$Gî5¯ï$Grï$Gî6î7Eî7Eï$Gtï$Gî;xï$Grï$Gî;Ðî=fî=fï$Gtï$Gî@Âï$Grï$GîAï$Gî/ï!Ztî•î•ï!Zxï!Zî$cï!Ztï!Zî%:ï!Zrï!Zî'¸î*úî-+î0î2î3Cî5”î5”ï!Ztï!Zî:žï!Zrï!Zî:öî<4î<4ï!Ztï!Zî@gï!Zrï!Zî@Äï!Zîmt
î!Cî!Cïmxïmî&ïmtïmî&èïmrïmî'¸î,Ôî.Âî0î2Qî2Qïmtïmî7[ïmrïmî7³î8ñî8ñïmtïmî=ûïmrïmî>«î>«ïmtïmîBïmrïmîB_îCõîCõïmtïmîHÿïmrïmîI\ï€t
î!Cî!Cï€xïî&ï€tïî&èï€rï€î'¸î*úî-+î1åî3Óî5î7bî7bï€tïî<lï€rï€î<Äî>î>ï€tïîC ï€rïîCiï€î“t î lî lï“xïî%:ï“tïî&ï“rï“î'¸î-î.Ëî2Jî4iî5Øî8Zî8Zï“tïî=dï“rï“î=íî?\î?\ï“tïîDfï“rïîEFîEFï“tïîH¢ï“rï“îHúîJ<C3AE>îJ<C3AE>ï“î'¸ïÀtî,ÂïÀrïÀî-€î-èî-èïÀsïÀî0Dî2Hî3V î9Úî;ªî>_î?¢
îGÞîJ¯îJ¯ïÀî'¸ïíî)yî+½î/Êî2üî48î8Úïírïíî8àïíî t
î#Èî#Èï î(–ï î)mï î,®î0_î2Mî3î5Üî5Üï î:æï î;>î<|î<|ï îA†ï îAÞîCtîCtï îFÐï îG-ï ît î lî lïî%:ïî&ïî'¸î+­î-Þî/_î1Óî3¬î8ªî:Ûî<\î>xîADîCÂîECîFñîJ~îJÖîJÖïî'¸ï
Iî+©î/#î1•î4jî6nî7kî:jî>ýï
Iÿ©
êq?€`½12ACCESSAccessfieldforreferringtotheACCESSBITSfieldsymbolically.ItsvalueisoneofthelegalvaluesoftheACCESSargumenttoOPENFILE:INPUT,OUTPUT,BOTH,APPEND;orNILwhenthestreamisclosed.ReplacingthisfieldhasthesideeffectofsettingtheBINABLE,BOUTABLE,STRMBINFNandSTRMBOUTFNfieldsappropriately(fromthecorrespondingdevicefields,ortovaluesconsistentwithnoaccess).USERCLOSEABLEFlag,trueifthestreamcanbeclosedbyCLOSEF.DefaultisT,butisNILforsuchthingsasdribblefilesandtheterminal.USERVISIBLEFlag,trueifthestreamistobelistedintheresultof(OPENP).DefaultisT,butisNILforsuchthingsasdribblefilesandtheterminal.BINABLETrueifBINmicrocodecanbeused.NormallysetautomaticallyfromFDBINABLEwheninputaccessisset.BOUTABLETrueifBOUTmicrocodecanbeused.NormallysetautomaticallyfromFDBOUTABLEwhenoutputaccessisset.EXTENDABLETrueifBOUTcanextendthebufferwhenCOFFSETreachesCBUFSIZE.Obsolete.STRMBINFNFunctioncalledbyBIN.ThisisnormallysetindirectlyasasideeffectofsettingtheACCESSfield.SettingACCESStoaninputaccess(INPUTorBOTH)setstheSTRMBINFNtobethestream'sdevice'sBINmethod.SettingtoanyotheraccesssetstheSTRMBINFNtobea``filenotopen''trap.STRMBOUTFNFunctioncalledbyBOUT.AswithSTRMBINFN,thisisnormallysetindirectly(fromthedevice'sBOUTmethod)asasideeffectofsettingtheACCESSfield.OUTCHARFNFunctioncalledtooutputasinglebyte.ThisislikeSTRMBOUTFN,exceptforbeingonelevelhigher:itisintendedfortextoutput.Hence,thisfunctionshouldconvert(CHARCODEEOL)intothestream'sactualendoflinesequence,andshouldadjustCHARPOSITIONappropriatelybeforeinvokingthestream'sSTRMBOUTFNtoactuallyputthecharacter.Defaultsto\FILEOUTCHARFN.TheOUTCHARFNforthedisplayadditionallyworriesaboutsuchthingsasECHOCONTROL.CHARPOSITIONCurrenthorizontalcharacterpositioninthestream.Incremented(andresettozero)byOUTCHARFN.UsedbythefunctionPOSITION.LINELENGTHMaximumlinelengthofthestream,incharacters.UsedbythefunctionLINELENGTH.Defaults(atcreationtime)tothevalueoftheglobalvariableFILELINELENGTH.EOLCONVENTIONThestream'sendoflineconvention:themannerinwhich``endofline''isencodedonthisstream.Thatis,outputofanendofline(functionTERPRI)producesthestream'sendoflinesequence,andoninput,thestream'sendoflinesequenceisconvertedto(CHARCODEEOL)byREADC.Thisisnotnecessarilythesameasthewaythatendoflineisencodedintheactualfilewrittenby,say,afileserver.Forexample,LispmightopenastreamtoaTenexfileserverwithEOLCONVENTIONofCR,whiletheservermightchoosetotakeeachoftheCRsinthestreamandactuallystoreaCR,LFsequenceinthephysicalfile.î>ýï
êïførî ôïhspî Lïhsî ôïbtîþïbrïbî/îsîwî Šî&
î'î)Æî)Æïbtïb î2,ïbrïbî2ˆî5Œ î=“î=ïî?ÁîC?îD<C3AE>îGîHîJÂîJÂïbî/ï`.îNîUîéî"#î"#ï`.xï`.î&£ï`.rï`.î'î-î.<2E>î.<2E>ï`.tï`.î5Hï`.rï`.î6"î6"ï`.tï`.î:Uï`.rï`.î;î;ï`.tï`.î@ï`.rï`.î@Ñî@Ñï`.tï`.îD-ï`.rï`.îDæîDæï`.tï`.îIðï`.rï`.îJÁîJÁï`.î/ï^[îÑîÑï^[tï^[îVï^[rï^[î»îNî!Œî%Úî'%î+…î+êî2;î4ºî7Çî:î<Xî?îB·îDOîH<C3AE>îJÁîJÁï^[î/ï\ˆtîï\ˆrï\ˆîÚîÚï\ˆtï\ˆî$’ï\ˆrï\ˆî%[î%[ï\ˆtï\ˆî,êï\ˆrï\ˆî-[î/ýî/ýï\ˆtï\ˆ î8cï\ˆrï\ˆî8Ôî<q îDÇîHîJÂîJÂï\ˆî/ïZµ îðî$î'àî)vî*öî.ô î5î8î9Úî>6ïZµî ôïWDt îßïWDrïWDî/î¥îîÞî!8î%¢î('î*î.9î00î00ïWDtïWDî5:ïWDrïWDî6î6î;Šî<ñî<ñïWDtïWDî=ÈïWDrïWDî> îAîBîBïWDtïWDîEïWDrïWDîEˆîG¿îJÁîJÁïWDî/ïUqîî˜î!/î#íî&vî(§î-óïUqî ôïRt
î1ïRrïRî/îî6îlî Ÿî$ãî&#î'¦î)kî,çî.iî0<C3AE>î4:î5Èî5ÈïRtïRî;©ïRrïRî<Zî<µîA†îBÇîBÇïRtïRîCžïRrïRîDPîF¥îGåîGåïRtïRîJjïRrïRîJÂîJÂïRî/ïP-î>î@î (î!©î&@î(þî+‡î-¸î2þïP-tïP-î3ïP-î ôïL³î/ïL³rïL³îîîïL³tïL³îˆïL³rïL³îî%Ïî(fî*dî.î.”î4Éî6ò î?hîBÚîBÚïL³tïL³îJiïL³rïL³îJÁîJÁïL³î/ïJàîµî/î"
î#Kî%?ïJàî ôïGotî/ïGorïGoîsî¼î¼ïGotïGoîïGorïGoîî&î(î*dî-ßî.Mî4^î6c î>¶îBîBïGotïGo îJjïGorïGoîJÂîJÂïGoî/ïEœîµîõî"Óî$î&ïEœî ôïB+t î/ïB+rïB+î\î<1B>î<1B>ïB+tïB+îëïB+rïB+îCî! î%ìî(î,î/¢î/¢ïB+tïB+î5ƒïB+rïB+î5Ûî:Šî:ŠïB+tïB+îABïB+rïB+îAñîBIîGÖïB+î ôï>±tîƒï>±rï>±î/î
î ÷î"ìî"ìï>±tï>±î%qï>±rï>±î&Fî&Åî)Öî+:î0ÿî3 î9&î:Îî;òî>ÁîB„îD6îHîJÂîJÂï>±î/ï<Þtî9ï<Þrï<Þîî íî!Èî&Áî&Áï<Þtï<Þî+Ëï<Þrï<Þî,¦î.©î0îî4ëî9Lî9Åï<Þtï<Þî=øï<Þrï<Þî>Òî@ëî@ëï<Þtï<ÞîDGï<Þrï<ÞîEîH<C3AE>îJÁîJÁï<Þî/ï; tî¾ï; rï; î3î Ðî"±î$ÿî*9î/Gî/Gï; tï; î1Ìï; rï; î2Aî7<C3AE>î8î<™î>6î@ÇîDSîHNîJÁîJÁï; î/ï98î`ï98tï98î ïï98rï98î!Gî"Çî$Šî%‡î(qî*·î.ªî1dï98î ôï5¾t îZï5¾rï5¾î/î
î øî"íî"íï5¾tï5¾î&Iï5¾rï5¾î' î'Ÿî)ªî,¼î,¼ï5¾tï5¾î4Kï5¾rï5¾î5#î7¼î9"î>çî@þ îGîJÁîJÁï5¾î/ï3ëî`îPï3ëtï3ëî!¬ï3ërï3ëî"î'Wî(Øî)Õî,~î0î1¥î5Úî8 î8 ï3ëtï3ëî=ï3ërï3ëî=mî@rï3ëî ôï0qtîƒï0qrï0qî/îäî «î",î&mî'kî+'î.`î.ºî1¥î2äî5`î5`ï0qtï0q î=Æï0qrï0qî>wîB˜îD¨îHDîJÁîJÁï0qî/ï.žî«îªî!9î"Þî(Ïî+Eî.4î32î3ñî8Ñî;ªîAXîFîJÁîJÁï.žî/ï,ÔtîÇî##ï,Ôrï,Ôî#¬î&†î(éî.8î2<î4÷î6´î9mî?®îBiîFäîJÁîJÁï,Ôî/ï+t î!Cï+rï+î!· î*î.Kî3ãî60î;iî;iï+tï+ îCÏï+rï+îDCîEÞîJÂîJÂï+î/ï).î¦îü î"/î"¬î($î)Éî)Éï).tï).
î5ï).rï).î6_î6Üî9ªî9ªï).tï).îA9ï).rï).îA¶îCêîF@îJÁîJÁï).î/ï'[ îƒî#%î&Öî)Øî-Àî/Aî/Aï'[tï'[
î8~ï'[rï'[î8Ûï'[î ôï#át îï#árï#áî/î3 î"†î(Eî-[î.ãî1î5»î6
î=õî@ÿîDîE¦îHóîJÁîJÁï#áî/ï"tî¾ï"rï"îÅî#*î$øî')î,pî,pï"tï"î3(ï"rï"î3…ï"î ôï”t î”rï”î/î«î 3î$=î%Èî'úî,“î.
î4§î4ÿî8eî:3î<eîA¬îA¬ï”tï” îJï”rïîJÁîKîKï”îÁîîfî#vî&åî(eî*î.î/î1Ìî5½î:Âî:ÂïÁtïÁ
îF„ïÁrïÁîFáïÁî ôïGt îGrïGîìîî!ºî#Yî%ô
î-^î/¤î4“î6'î:î=eî?îBOîC¡îHéîJÁîJÁïtî®î¸î!Ýî#€î'Íî)eî+6î-Ìî/dî1øî7Æî7Æïttïtî<Ðïtrïtî=®îCfîE¤îJÁîJÁï¡îàîîBî$zî'+î)+î-&î/î4Äî7uî9)î;ØîA·îCîIAîJÁîJÁï¡î×tî¢î"þï××î#dî%@î%@ï××î)sï××î*/î*•î-<2D>î.Øî1,
î7áî:î=|î? îAIîDîF­îI6îJÁîJÁï×îîÅîî jî!ùî$:î(î*eî.öî1,î3Äî4Ñî7î;_î;Æî>RîDîFúîJÁîJÁïî:î¥îÖî Kî!ÿî#/î'aî)Ïî-áî1î1ï:tï: î;ëï:rï:î<vî>5î>5ï:tï:î?ãï:rï:î@ÇîDîFãîJÁîJÁïgîùîRî Öî#¤î&ªî(9î*mî*mïgtïgî,ïgrïgî,ûî.î0´î4ùî7…î<mî?žî@Ÿî@ŸïgtïgîBMïgrïgîCîCïgtïgîD¯ïgrïgîE
îJÁîJÁï î¯îàîûî":ï  y
êq?€`½613Theconventionisencodedasatwo-bitfield;theconstantsCR.EOLC,LF.EOLC,CRLF.EOLCcanbeusedtorefertothecurrentlyknownvaluessymbolically.DefaultinInterlisp-DisCR.EOLC.ENDOFSTREAMOPFunctionofoneargument(thestream)calledwhenanattempttoreadbeyondtheendoffileoccurs.Ifthisfunctionreturnssomething,itshouldbeinterpretedasavaluetoreturnfromBIN(thevalueTiscurrentlyprohibited).Defaultsto\EOSERROR,whichcausesanENDOFFILEerror.VALIDATIONPointerfield,somecompactencodingofthestateofthefilesuchthatifthefile'scontentchanges,theVALIDATIONchanges.Thefile'sICREATIONDATEattributeusuallyworkswellenough.TheonlyuseforthisfieldistocheckwhetherthefilechangedoverLOGOUT,etc.iftheVALIDATIONofthestreamreturnedfromREOPENFILEisEQUALtotheVALIDATIONofthestreamopenbeforeLOGOUT,thestreamisassumedtobeunchnaged.Thiswillprobablybethesoleconcernofthedevicewhenwegotomultiplestreamsperfile.BYTESIZEBytesizeofthefile,i.e.,whatBINandBOUTtrafficin.Defaultsto8.Thisfieldisnotusedbymany;thereareprobablyalotofthingsthatwon'tworkifthebytesizeisnot8.OTHERPROPSListinpropertylistformatusedbythefunctionSTREAMPROP.AnalogoustoWINDOWPROP,etc.IMAGEOPSImageoperationsvector(objectoftypeIMAGEOPS)foruseofdevice-independentgraphicsoperations,suchasDSPXPOSITION,DSPFONT.Defaultsto\NOIMAGEOPS,avectorsuitablydefinedfornon-displaydevices.Seetheimplementors'manualchapterDevice-IndependentGraphics.IMAGEDATADevice-dependentdataforusebyIMAGEOPS.REVALIDATEFLGFlag.Thestandarduseofthisflagistosolveaproblemwithcorrectlymaintainingthecreationdate.Theproblemisthatthedefinitionof``creationdate''isthatthecreationdatechangeswheneverthecontentsofthefilechange.Iffollowedliterally,thiswouldmean,forexample,thatevertimeyouwroteoutapageofa{DSK}file,youwouldalsohavetorewriteitsleaderpagewithanewcreationdate.However,itsufficesinpracticetoonlychangethecreationdatewhenitwouldmatter,i.e.,whentherewouldbeanypossibilityofsomeagentotherthanthecurrentlyrunningLisptoseethechange.Usually,thismeanstheonlytimetoworryaboutiswhentheLispvmemissavedandafilethatwasopenbeforethesaveiswrittentoagainafterwards.Thus,theuseofthisflag(forthosedevicesthatcare)isasfollows:thedevice'sBEFORExxxeventssetthisflagtrueforanystreamsopenonthedevice.Then,wheneverthedeviceisabouttodosomethingthatwouldchangethefile'scontent,e.g.,writeoutanewpage,itfirsttestsREVALIDATEFLG.Iftheflagistrue,itupdatesthefile'screationdateandclearstheflag.NONDEFAULTDATEFLGFlag.StandarduseisinconjunctionwithREVALIDATEFLG,tomarkafilethatwasopenedinawaythattheuserconstrainedthecreationdateofthefile(e.g.,thePARAMETERSargumenttoOPENFILEincludedanexplicitcreationdate,ortheoptionDON'T.CHANGE.DATE).î":ï ”î
êïførîIïhspîJjïhsî/ïbrî3 î!lî#î(©î*†î+Þî0Æî4î7'î=Dî=DïbtïbîC%ïbrïbîD0îD0ïbtïbîJïbrïbîJÁîJÁïbî/ï`.tî¾ï`.rï`.î*î!î#qî&î(&î+]î,ñî/6î4õî9^î=p îE‡îEòîJÁîJÁï`.î/ï^[î¯
î<1F>î Ëî Ëï^[tï^[î&¬ï^[rï^[î' ï^[î ôïZát îßïZárïZáî/îïîî!î'î)Íî.“î2fî5ùî7Èî<°î>=îA5îEûîH8îJÁîJÁïZáî/ïYîÍîî™î î!nî#óî)Nî-ä î4Àî5üî:Yî<0
îC"îD·îEÇîIAîJÁîJÁïYî/ïWDî:îïWDtïWDî!ïWDrïWDî!iî$ î'§î'§ïWDtïWDî(~ïWDrïWDî(ãî*-î/å î7Gî7¬î= î>™î>™ïWDtïWDîF(ïWDrïWDîFäîJÁîJÁïWDî/ïUqî9îüîüïUqtïUqî Xî"Ýî&9ïUqrïUqî&î)ÙïUqî ôïQ÷t îZïQ÷rïQ÷î/îî¿î#nî)î/î0Øî3Tî6¢î8xî:ôî=yî@ÇîC±îE/îG«îJÁîJÁïQ÷î/ïP$î0î!Ìî$Fî$FïP$tïP$ î,¬ïP$rïP$î-Lî2èî3ˆî6zî9Øî9ØïP$tïP$ îDÃïP$rïP$îEcîJÁîJÁïP$î/ïNQîíîûî"õî(Bî(Öî+¼î.âî1fî3²î6`î9<C3AE>î;î<Ôî@ÁîFîHˆîJÂîJÂïNQî/ïL‡îûî sî sïL‡tïL‡î%}ïL‡rïL‡î&»î+àî.Ÿî.ŸïL‡tïL‡ î7ïL‡rïL‡î7ëî:î<ÃîAîG‰îJÁîJÁïL‡î/ïJ´t î•ïJ´rïJ´î
î!dî!dïJ´tïJ´î%—ïJ´rïJ´î& î'§î)õî)õïJ´tïJ´ î2[ïJ´rïJ´î2Ïî4vî6Ãî;!î>€îB»îB»ïJ´tïJ´îGÅïJ´rïJ´îHîJÂîJÂïJ´î/ïHáîîÒî"Cî#Õî%ª î,Ýî-Gî-GïHásïHáî/®î1½î6Pî7Ëî9žî;Çî?ÓîA!îBôîFJîIîJ¯îJ¯ïHáî/ïGîîÊîî!Ôî#¦î%nïGrïGî%tïGî ôïC¦tî¬ïC¦rïC¦î/î>îÈîaî Ÿî#?î%²î(îî(îïC¦tïC¦î+sïC¦rïC¦î+Ùî.pî.pïC¦tïC¦î1ÌïC¦rïC¦î22î6î8î8hî=Éî?Wî@ÄîA*îD"îG0îH{îJÁîJÁïC¦î/ïAÓî<î
î î#yî%Ÿî+>î,;î.î/¨î3<C3AE>î6/î9Êî=î>Jî@{îC\îEØîGîI\îJcïAÓtïAÓîJiïAÓî ôï>Y î/ï>Yrï>YîJîSî"Eî$Üî)±î-Gî/žî2Xî8(î8(ï>Ytï>Y î@Žï>Yrï>YîAÆîB§îIAîJÁîJÁï>Yî/ï<†t î•ï<†rï<†î Eî"Oï<†î ôï9 tî/ï9 rï9 î{ î"Aî&<26>î+.î-î04î04ï9 tï9 î6ìï9 rï9 î8
î:fî<úî>ÑîJÁîJÁï9 î/ï79î|
î#_î&qî(î(ï79tï79 î2ï79rï79î2×î2×ï79tï79î8¸ï79rï79î9xî9àî?Dî@Ôî@Ôï79tï79
îJï79rï79îJÁîJÁï79î/ï5fî<18>îâî"2î'cî)Ó
î1uî6Åî7î:Hî<Û îFîJÁîJÁï5fî/ï3œîéîéï3œzï3œî'Öî-ï3œrï3œî-xï3œî ôï0
tîƒï0
rï0
î/î"Oî%%î'4î){î+Iî+Iï0
tï0
î2ï0
rï0
î2°î2¶ï0
î ôï,<2C>t îßï,<2C>rï,<2C>î/îˆîìî¢î#î%kî'î)<29>î,î-`î.ìî2Fî3Oî8­î;¥îA$
îHîJÂîJÂï,<2C>î/ï*½îOîŒîôî"­î(î)]î, î.M î4sî6 î;Þî?tî@ÂîCqîE²îJÂîJÂï*½î/ï(óîî î%4î'tî,Áî.[î0œî2åî7Äî8+î9<C3AE>î? îDDîFÅîJÂîJÂï(óî/ï')îî.î"Òî%uî(Nî+Hî-Ôî1~î3Çî4Èî7äî9sî:sî:sï')tï')î>¦ï')rï')î?îA˜îD$îH$îJÁîJÁï')î/ï%VîKîÏî Jî!ùî%ðî) î+úî,ûî/¿î4Òî8î8_î>fî?îDOîEÒîJÂîJÂï%Vî/ï#ŒîÐîÛî uî"Çî'øî*ðî.—î/àî3ÿî8£î;)î>ÑîBLîFjîHNîJÁîJÁï#Œî/ï!Â
îÉî¢î#Uî')î*æî.,î0«î6¤î;øî?1î@ÿîCsîEòîJÁîKîKï!Âîøîjîåî#î%=î(1î+0î,¹î0‰î4Dî5î9î;Tî>HîBPîC—îG<îIÅîJÂîJÂïøî.îiîîî!Éî%èî(î*ïî,-î0¯î2/î5©
î<+ï.î ôï½î/î5îÇî nî"Yî%,î(î*üî.Ìî3Äî6Äî:]î;ûî=ÝîC@îEÑîJÁîJÁï½îótî¾ïórïóîoî#Óî&î(çî+Éî.×î1@î4
î9+î<Èî>úîA„îFIîFúîJÁîJÁïóî î;îtî#<23>î$×î(<28>î*î+ùî2qî5î9î=žî?×îBõîHîJÁîJÁï îVîîòîî ßî$gî%§î(hî+aî+aïVtïV î6LïVrïVî7î7î8ïî;8î=Øî?.îBSîC“îH<C3AE>îJÁîJÁïƒîEîUî"+î$´î(Zî*î-ïƒî ôïtîîÖîŽî"Dî$î%Þî'h
î.¼î1±î1±ï î<œïî=Wî>áîBOîCVîEšîHCîJÁîJÁïî?î<îîxî"î%€î(î+;
î2»î5Kî:»î=ðî?ÛîBkîEîH<C3AE>îJÁîJÁï ux î ï urï vî%î'î'ï utï uî-Íï urï uî.8î3¾î5”î:Hî?kîB¬îDUîF™îJÁîJÁï 
¢tî%vï
¢rï
¢î&Lï
¢ÿ

êq?€`½£14F1,F2,F3,F4,F5Pointerfieldsforprivateusebythestream,tomaintainstream-specificstateofconcernonlytothedevice.StreamclientsthatwishtohanginformationonastreamwithoutregardtowhatkindofstreamitisshouldusethefunctionSTREAMPROP.FW6,FW7,FW8,FW916-bitwordfieldsforprivateusebythestream.DIRTYBITSObsolete.EXTRASTREAMOP?BufferedStreamsBufferedstreamsareonesthatconstrainthemselvestoobeyasetofconventionsthatmakeiteasyforanagent(e.g.,microcode)toperforminputoroutputonthestreamwithoutknowingaboutthedetailsofthestream'sphysicali/o.Thestreammaintainsa``currentbuffer''andtwoindicesintothatbuffer,theoffsetofthenextbyte,andtheoffsetoftheendofthebuffer.Aslongastheformerindexislessthanthelatter,thestreamguaranteesthatthebytesinthebufferbetweenthoseindicesarethetruecontentsofthefile/streamstartingatthecurrentfilepointer.Advancingthefirstindexeffectivelyadvancesthefilepointer.Whenitreachesthesecondindex,astream-specificoperationiscalledto``refill''thebuffer.Thefollowingfieldsareusedbybufferedstreams:COFFSETByteoffsetinthebufferCBUFPTRofthenextBINorBOUT.CBUFSIZE``Size''ofthecurrentbuffer,i.e.,byteoffsetthatisonebeyondthelastbyte.CBUFMAXSIZEForoutput,themaximumsizethebuffercanbewrittento.IfCOFFSETreachesCBUFSIZE,butCBUFSIZEislessthanCBUFMAXSIZE,thenthebuffercanbeextended.CBUFPTRPointertocurrentbuffer.MustbevalidifCOFFSETislessthanCBUFSIZEandBINABLEorBOUTABLEistrue.Itisnotnecessarythatthis``buffer''beanythingotherthansomechunkofmemory,aportionofwhichcontainsinterestingdata.Thus,thebytesfromoffsetCOFFSETtoCBUFSIZEmustbevalid,butCOFFSETneednotstartatzero,norneedCBUFSIZEorCBUFMAXSIZEcoincidewiththeendoftheunderlyingstructure.CBUFDIRTYFlag,trueifcurrentbufferhasbeenwrittento.Ingeneral,thedevicehassoleresponsibilityforsettingCBUFSIZE,CBUFMAXSIZE,andCBUFPTR;genericcodedoesnottouchthose.ThefieldsCOFFSETandCBUFDIRTYcanbechangedbygenericstreamclientsaswellasbydevice-specificcode.Forexample,codethatsimulatesaBINincrementsCOFFSET;codethatwritesdirectlytothestream'sbuffersetsCBUFDIRTYtrue.Thefollowingmethodsaredefinedfordevicesimplementingbufferedstreams:(GETNEXTBUFFERSTREAMWHATFORNOERRORFLG)[Devicemethod]CalledwhenSTREAMneedstohaveitsbufferfixed,i.e.,thestateofSTREAMissuchthatBIN(WHATFOR=READ)orBOUT(WHATFOR=WRITE)cannotproceed.Thismethodshoulddoî&Lï
¢î
êïførî ôïhspî Lïhsî ôïbtî ¢ïbrïbî Rïbtïbîïbrïbî°î°ïbtïbî^ïbrïbîîïbtïbî¼ïbrïbîlïbtïbîïbrïbî/îÖî`î!uî%çî(3î*î,>î0Ýî2bî7ñîAîDîE©îJ¤îJ¤ïbî/ï`.î;îÝî0î"¾î#8î'Ýî,î.Ôî1÷î3™î6ô
î>lî@fîA…îEèîJÁîJÁï`.î/ï^dîOîÏîýî"ýî$ˆî(Éî)ñî+/î/yî1Àî3ñî98î98ï^dtï^d îAžï^drï^dîAûï^dî ôïZêtî yïZêrïZêî
)ïZêtïZêî®ïZêrïZêî^ïZêtïZêîãïZêrïZêî“î“ïZêtïZêîïZêrïZêî/îöîOî!Óî#âî(Nî*•î,cî.”î2ÔïZêtïZêî3«î4î4ïZêyïZêî4ˆïZêî ôïWptîƒïWprïWpî/î¼ïWpî ôïSöt îßïSörïSöî/îÃïSöî ôïOavîcî(ïOarïOaî.ïOaî ôïK¹îîJîtîyîî!Ô î(î*î-Jî.Kî0>î1Ì
î91î;Ôî?]î@ˆîCbîEuîG;îJÁîJÁïK¹î ôïIïî
4 î;îÏî
î˜î Bî$î&î(Çî-î2 î7„î;Iî=ŽîAÀîC_îE¤îJÁîJÁïIïî ôïH%î#î²îîÛî0îQî bî%¿î*î-î/°î4/î6ëî9žî> î@NîCýîEœîGáîJÂîJÂïH%î ôïF[î
OîûîNî î¹î
î¸îfî ºî%2î%­î'²î*¿î,bî.¶î3:î6÷î8Xî:áî=ûî@NîD-îF€îJÁîJÁïF[î ôïD îî7îkîÔîWîî <20>î%Ïî)Aî-¯î/Øî2 î4Åî:î;“î=Ç
îD<EFBFBD>îIVîJÁîJÁïDî ôïBÇî =îîîAî·î<1F>î!Ëî$Œî(?
î.¼î4vî6¿î9î>î>ˆîB‰îCÉîH<C3AE>îJÁîJÁïBÇî ôï@ýîUîHîEî_î"Uî#“î'Yî(Ù î-Yî/Šî3Žï@ýî ôï=Œî <0C>î{îÿî%î2îî"jî'Vï=Œî ôï:tî/ï:rï:î0îËîKî!|î%{î%{ï:tï:î+\ï:rï:î+´î-?î/pî2Qî2Qï:tï:î4Öï:rï:î5.î6Äî6Äï:tï:î: ï:rï:î:}ï:î ôï6¡tî/ï6¡rï6¡îMîØî î#¢î'ùî*^î-?î0Úî3yî4·î74î;íî>î@oîCUï6¡î ôï3't
î/ï3'rï3'îùîßî!^î'üî*Æî-Eî1î4=î6Nî;î=Cî=éî?Œî?Œï3'tï3'îEmï3'rï3'îFîJÂîJÂï3'î/ï1Ttîçï1Trï1Tîî!çî!çï1Ttï1Tî(Ÿï1Trï1Tî)wî+4î.î1<C3AE>î1<C3AE>ï1Ttï1T
î:Íï1Trï1Tî;ýî?sîB#îF¡îHþîJÁîJÁï1Tî/ï/<2F>îëï/<2F>î ôï,tî/ï,rï,îîéî"Îî'pî(î+Åî-Õî1Xî2×î2×ï,tï,î8¸ï,rï,î9\î:æî=™î@Üî@Üï,tï,îG”ï,rï,îH8îJÁîJÁï,î/ï*=tîï*=rï*=îlîîï*=tï*=î%¾ï*=rï*=î&î']î*mî*Éî,î-Zî/¤î5î8.î:¥ î@îAÏîGRîJÁîJÁï*=î/ï(jîJîÑî!óî#¢î)[î*|î/Lî0úî4ûî:P
î@úîDKîDÇîH<C3AE>îJÁîJÁï(jî/ï& îªîùî!«î!«ï& tï& î'Œï& rï& î'úî)‘î)‘ï& tï& î0Iï& rï& î0¸î4î5áî9‡î;ïî;ïï& tï& îAÐï& rï& îB?îE„îGàîJÁîJÁï& î/ï$Íî'îßîÈî#ƒî#ƒï$Ítï$Íî*;ï$Írï$Íî+ î-Cî-Cï$Ítï$Í
î6€ï$Írï$Íî7eî=-î@¥îCcîFyîH<C3AE>îJÁîJÁï$Íî/ï"ú îì î#|ï"úî ôï‰tî‰rïî|î1îdî"ýî&üî)Cî,qî0óî2rï‰tï‰î2xï‰î ôïrî ±îÇîîBî¤î]
î$³î&Ýî+-î+-ïî1åïî2°î2°ï
î;íïî<¸î?\î?\ïîE=ïîF)îJÁîJÁïî ôï<î
îî]îîÐî+îØî _î _ï<tï<î&@ï<rï<î&œî))î))ï<tï<î0¸ï<rï<î1î3tî5:î:|î<Mî@éîE-îI@îJÁîJÁï<î ôïiî éî î¥îÈîûî ­î&ƒî)Ñî,¦î2¨î3Ûî3Ûïitïiî6`ïirïiî6î î=îî=îïitïiîCÏïirïiîDÖîH#îJÂîJÂïiî ôïî
Æîî î:îWîVî!Éî!Éïî)Xï–î)°î,jï–î ôïî <0C>î{îÙîÿîÎî Ýî%u î-ÿî3iî8Uïî ôï«t
î<16>î<16>ï«xï«î«tï«î«xï«î"ï«tï«î"éî"éï«xï« î*Ùï«tï«î+°ï«rï«î@ºîEˆîJlï«tï«îObï«î‘ï ¾rîòî°î°ï ¾xï ¾î ¾rï ¾îî!ùî#±î'î(åî-î0ûî3˜î6î9;î:ÿî:ÿï ¾xï ¾î?Íï ¾rï ¾î@]îAÓîE
îGäîGäï ¾tï ¾îJiï ¾rï ¾îJÁîJÁï ¾î‘ï
ëî
ï
ëxï
ëîêï
ërï
ëî}î
ëtï
ëîÌï
ërï
ëî×î¨î¨ï
ëtï
ëî#ï
ërï
ëî#—î$ï
ëxï
ëî)ðï
ërï
ëî*ƒî,vî,vï
ëtï
ëî0©ï
ërï
ëî1µî6;î;Óî<fî?îDŸîHéîJÁîJÁï
ëÆ
êq?€`½h15whateverisnecessarytoallowtheoperationtoproceed.Thistypicallyincludesdisposingofthecurrentbuffersomehow(ifGETNEXTBUFFERwasinvokedbecausethebufferwasexhausted),andfetchinganewbufferconsistentwithSTREAM'scurrentposition.InthecaseofWHATFOR=READ,GETNEXTBUFFERreturnsTonsuccess,i.e.,ifSTREAMisnotatendoffile.WhenSTREAMisatendoffile,GETNEXTBUFFERshouldtakestandardendofstreamaction,returningwhatever\EOF.ACTIONreturns(ifanything).However,ifNOERRORFLGistrue,GETNEXTBUFFERshouldjustreturnNILimmediately.(RELEASEBUFFERSTREAMBUFFER)[Devicemethod]Performsanydevice-specificoperationrequiredwhenBUFFER,whichisthecurrentvalueofSTREAM'sCBUFPTRfield,is``released''(whentheCBUFPTRfieldisreplaced).Thisisusedsothatdifferentpagemap-likedevicescansharecertaincode.Forexample,inthecaseofpagemappedstreams,RELEASEBUFFERmarksthebufferdirtyinthecasethatthestream'sCBUFDIRTYfieldhasbeenset.Thismethodisnotcurrentlyused.Thefunctions\BUFFERED.BIN,\BUFFERED.PEEKBIN,\BUFFERED.BOUT,\BUFFERED.BINSand\BUFFERED.BOUTSaresuppliedforusebybufferedstreams;theyarestandardlyusedtoimplementtheBIN,PEEKBIN,BOUT,BLOCKINandBLOCKOUTdevicemethods.Inaddition,thefunctionCOPYBYTES,whenpresentedwithasourcestreamthatisbuffered,utilizestheGETNEXTBUFFERmethodtoefficientlycopybytestothedestinationabuffer-fullatatime.PagemappedStreamsPagemappedstreamsareaparticularkindofrandomaccessBufferedstreamthatbuffersitsdatainunitsofpages.Thedeviceprovidesmethodsthatreadorwritedatainunitsofpages,whilesystem-suppliedPagemappedfunctionshandletheresponsibilitiesofaBufferedstream,aswellasmanagingthefilepointerforrandomaccess.Ingeneral,astreamcanhaveseveralpagesofafilebufferedatatime,allowingthecodetomakesomeefforttomakeefficientuseofmulti-pagedtransferswhereapplicable.Tocreateapagemappeddevice,createanFDEV,fillinthenecessaryprivatefields,thencallthefollowingfunction:(\MAKE.PMAP.DEVICEDEVICE)[Function]Fillsinfieldsinthedeviceappropriateforpagemappeddevices,andreturnstheupdateddevice.ThefieldsitfillsaretheflagfieldsFDBINABLE,FDBOUTABLE,RESETABLE,RANDOMACCESSP,PAGEMAPPED,BUFFERED(alltrue),andthemethodsBIN,BOUT,PEEKBIN,BLOCKIN,BLOCKOUT,READP,EOFP,GETFILEPTR,BACKFILEPTR,SETFILEPTR,GETEOFPTR,SETEOFPTR,GETNEXTBUFFERandFORCEOUTPUT.APagemappeddeviceisrequiredtosupplythefollowingmethods(inadditiontothoserequiredofalldevicesandnotfilledinby\MAKE.PMAP.DEVICE):(READPAGESSTREAMFIRSTPAGE#BUFFERS)[Devicemethod]CausespagesofSTREAMtobereadintoBUFFERS.ThefirstpagereadisFIRSTPAGE#(zeroforthefirstpageofthefile).BUFFERSiseitherasinglepage-sizedbuffer(aVMEMPAGEP),inwhichcaseîJÁï
ëî
êïførîIïhspîJjïhsîïbrî_îÀîÆîhî#î%Wî+oî-î2î3 î6î;<3B>î@àîFãîH<C3AE>îJÁîJÁïbî‘ï`7î*î*î î ¸î ¸ï`7tï`7 î+£ï`7rï`7î+üî.{î3Šî8|î:®î>­îA,
îH8îJÁîJÁï`7î‘ï^dî­îªîjîi î#Œî&wî&wï^dxï^dî+Eï^drï^dî,yî1î6%ï^dî‘ï[€î@î}îIîàîàï[€xï[€îÀï[€rï[€î$î èî èï[€tï[€î$Dï[€rï[€î%î%ï[€tï[€ î/ëï[€rï[€î0Oî4ßî4ßï[€tï[€î5¶ï[€rï[€î6î7þî<åî?Vî@•î@•ï[€xï[€îEcï[€rï[€îEÇîGîIWîJÂîJÂï[€îïY­î%î»î»î¯î¯ïY­xïY­î }ïY­rïY­î àî"*î# î&4î'Ëî*hî*hïY­tïY­ î5SïY­rïY­î5¶î: î<áîBVîDêîF€îJÁîJÁïY­îïWÚîÕî°î aî aïWÚtïWÚ
î)žïWÚrïWÚî)ûî.ƒî04 î6‡î6äî<íî>%î>%ïWÚxïWÚ îFïWÚrïWÚîFrîG´îJÁîJÁïWÚîïVt î|ïVrïVîÔî î"<22>î&<26>î&<26>ïVtïVî)ïVrïVî)l î1ïVî ôïR<C3AF>t
î<16>î<16>ïR<C3AF>xïR<C3AF>î[ïR<C3AF>tïR<C3AF>î2ïR<C3AF>xïR<C3AF>î ¼ïR<C3AF>tïR<C3AF>î!“ïR<C3AF>rïR<C3AF>î@ºîEˆîJlïR<C3AF>tïR<C3AF>îObïR<C3AF>îïO rî¦îyî"Æî)î.Ùî2¿î2¿ïO xïO î7IïO rïO î8Yî<•î>3î@ÄîE¼îI6îJÁîJÁïO îïMÖxî_ïMÖrïMÖî™î™ïMÖtïMÖîzïMÖrïMÖî×î 5î!x î'úî+þî.5î.5ïMÖtïMÖî4ïMÖrïMÖî4sî7yî8¼ î>åî?BîB2îCuîFˆîH#îJÂîJÂïMÖîïLî* îî#Sî%Ôî)iî-ãî1vî1òî4“î:Wî;üî>QîA6îBå îJÂîJÂïLîïJ9îÈîÈïJ9tïJ9 î ³ïJ9rïJ9î!%î%'î'rî+î.Çî0aî2¬î5†î8?î:Šî?Áî?ÁïJ9tïJ9îGPïJ9rïJ9îGÂîJÂîJÂïJ9îïHfîØîîúïHfîïEî{îUîîÙî!„î$ïEî ôïBî
îNïBtïB î9ïBrïBî\ïBtïBî-£ïBrïBî.Æî.ÆïBtïB
î:ˆïBrïBî;«î;«ïBtïB
îGmïBrïBîH8îJÁîJÁïBî ôï@>tî<16>ï@>rï@>îîjî÷î!5î#¬î%©î+Cî0±î3Áî6 î<Ãî?ÿîA¯îH<C3AE>îJÁîJÁï@>î ôï>ktî yï>krï>kî
Rï>ktï>kî3ï>krï>kî
î
ï>ktï>kîiï>krï>kîCï>ktï>kî$ï>krï>kî¥î!Xî!Xï>ktï>kî(ï>krï>kî(î,Ïî2®î3/î4ûî:·î=îBîBï>ktï>kîJï>krï>kîJÁîJÁï>kî ôï<˜î
®îñîîAîî! î#Üî%Nî+Dî/ìî2Qî2Qï<˜tï<˜ î=<ï<˜rï<˜î=ÈîBÖîDŠ
îJÂîJÂï<˜î ôï:Åî
î{îûî,
îþîû
î"vî#áî$Þî'Ùï:Åî ôï69v î:îÿï69rï69îï69î ôï2 îüîàî%îA î bî#<23>î%+î*:î.7î3àî8@î:þî? îAkîD`îEÿîI7îJÂîJÂï2î ôï0Çîîî<16>îNî"î%î(cî*]î.î1Iî3-î6Éî8¸î=î@øîJÂîJÂï0Çî ôï.ý îýîêîaî´î'ìî)˜î*·î0bî5î6Àî9Ÿî;BîA|îCÏîF*îJÁîJÁï.ýî ôï-3î îîÈî|îî˜î!ëî$Zî'„î+÷î/¥î1Bî2Qî4<C3AE>î:î;î<¥î@îEgîGªîJÁîJÁï-3î ôï+iî tîùî]îøîxîýî #î"jî#õ
î+mî0Ìî4µ
î;ï+iî ôï'øî îî? îHîßî!Þî#Íî#Íï'øtï'øî')ï'ørï'øî(î*'î+Óî./î4>î8Öî<Ýî@îB‡îDãîJÁîJÁï'øî ôï&%îbï&%î ôï"´tîéîéï"´xï"´îXï"´tï"´î/ï"´rï"´îDL îJlï"´tï"´îObï"´î‘ïÇrîî5îØîvîÅî ø
î(Aî*n î2jî7xî:î>ÁîAîFVîJÁîKîKïÇî‘ïýîLîãîî¬îåî(î!Ãî%Zî%Zïýtïýî,éïýrïýî-¬î-¬ïýtïý î6ïýrïýî6Õî6Õïýtïýî>dïýrïýî?&î?&ïýtïý îJïýrïýîJÁîJÁïýî‘ï*t î÷ï*rï*î*tï*î óï*rï*î!àî$¯î(Êî+èî.­î4 î4 ï*tï*î7%ï*rï*î8jî8jï*tï*î;Æï*rï*î= î= ï*tï*îBìï*rï*îD0îD0ï*tï*îJï*rï*îJÁîJÁï‘ïWtîWrïWîäîäïWtïWîïWrïWî²î²ïWtïWî"ïWrïWî#©î#©ïWtïW î,ïWrïWî-ªî-ªïWtïW
î6çïWrïWî8î8ïWtïW î@èïWrïWîBƒîBƒïWtïWîJïWrïWîJÂîJÂï‘ï„tî ï„rïîÐîÐï„tï î#»ï„rï„î$î&œî&œï„tï
î/Ùï„rïî06ï„î ôï
î W îCî[î<18>îÿîƒî#Çî%üî+Þî1@î3=î8|î:î=sîBÕîDdîF)îJÁîJÁï
î ôï@î }îÃî%î¥î@tï@î#ºï@rï@î$²ï@î ôïÆt îÆxïÆîÿïÆtïÆîÖîÖïÆxïÆ î [ïÆtïÆî!2î!2ïÆxïÆî&lïÆtïÆî'CïÆrïÆî@ºîEˆîJlïÆtïÆîObïÆî‘ï Ùrîî¤î Ùxï Ùîï Ùrï Ùî`î æî"®î%Ÿî(Mî(Mï Ùxï Ùî-‡ï Ùrï Ùî.;î.˜î1Gî3õî7î:î;Gî;Gï Ùxï Ù îBÌï Ùrï ÙîC*îF|îH<C3AE>îJÁîJÁï Ùî‘ï îMîxîî[îäîäï  î#ï  î#‰î$Úî(ªî)ºî-ˆ î4î8)î9²î9²ï  îAAï  îB~îDîHîJÁîJÁï  Ô
êq?€`½
16exactlyonepageisread,oritisalistofsuchbuffers.READPAGESreturnsthetotalnumberofbytesread.Ifthelastpagereadisnotafullpage,READPAGESshouldzeroouttherestofitsbuffer.READPAGEScanassumethatthebuffersarepage-aligned,althoughtheyneednotbeconsecutive.(WRITEPAGESSTREAMFIRSTPAGE#BUFFERS)[Devicemethod]WritesdatafromBUFFERSouttoSTREAM.ThefirstpagewrittenisFIRSTPAGE#.BUFFERSisaswithREADPAGES.NeitherREADPAGESnorWRITEPAGESaffectsSTREAM'sfilepointerorendoffile;thosearemanagedbyhigher-levelpagemappedroutines.WRITEPAGESmight,however,wanttolookatSTREAM'sEPAGEandEOFFSETfieldsifitneedstotakeanyspecialactionaroundtheendofthefile.Itispossible,fornoparticularlygoodreason,forREADPAGEStogetcalledforapagebeyondtheendoffile;infact,thisstandardlyhappenswhenwritinganewfile.TheREADPAGESmethodinthiscaseshouldjustclearthebufferandreturnzero.(TRUNCATEFILESTREAMPAGE#OFFSET)[Devicemethod]TruncatesSTREAMsothatitsendoffileisPAGE#,OFFSET,whichshouldbedefaultedtoSTREAM'sEPAGEandEOFFSET.Canbeusedtoeithershortenorlengthenafile;iflengthening,thefileshouldbepaddedwithnulls.Usedby\PAGED.SETEOFPTRand\PAGED.FORCEOUTPUT.Asofthiswritingtherearestillbugsinthiscodeincertainfunnycases,suchaswhenyouSETFILEPTRbeyondeofandthenBOUT.Thefollowingfieldsofastreamaremeaningfulforapagemappeddevice.Thegenericpagemappedcodesmaintainthemasoperationsonthefileareperformed,buttheyshouldallbeinitializedappropriatelybythedevice'sOPENFILEmethod:CPAGEForpagemappedstreams,thecurrentpagepositioninthestream.TogetherwithCOFFSET,thisconstitutesthestream'sfilepointer.Thedevice'sOPENFILEmethodshouldsetCPAGEandCOFFSETtozero,exceptforfilesopenedwithaccessAPPEND,inwhichcasetheyshouldbesettotheendoffile.EPAGE,EOFFSETForpagemappedfiles,thepageandbyteoffsetoftheendoffile.Notethatthisisthelogicalendofthefile;itneedhavenothingtodowiththephysicalendoffile,exceptthatwhenafileisclosed,thedeviceshouldseetoitthatitslogicalandphysicalEOFsarethesame(normallyseentobytheTRUNCATEFILEinsideof\CLEARMAP,below).Infact,asatypicalfileisbeingwritten,EPAGEtendstostayseveralpagesaheadofthephysicalendoffilebyvirtueofthefactthatpagesarebeingbufferedbeforebeingwrittenout.BUFFSForpagemappedstreams,apointertothestream'sBUFFERchain.InitiallyNIL(nobuffersallocated).Thedeviceusuallyhasnodirectinterestinthisfield.MAXBUFFERSForpagemappedstreams,themaximumnumberofbuffersdesiredinthestream'sBUFFSchain.IfthecodeneedsanotherbufferandtherearealreadyMAXBUFFERSbuffers,itwilltrytorecycletheleastrecentlyreferencedbuffer.Defaultsto\STREAM.DEFAULT.MAXBUFFERS.TheusercanchangethisfieldforanopenstreambycallingSETFILEINFOwithattributeBUFFERS.îJÁï î
êïførî ôïhspî Lïhsîïbrî%îÊî
îpîÜî!šî"êî$Pî%uî'«î)^î,ˆî1Šî2
î2
ïbtïbî9™ïbrïbî:î>ÄîAîD:îI6îJÁîJÁïbî‘ï`.î(îœî&î­îîî!Üî$úî&jî(âî*î,<2C>î0?î0?ï`.tï`.î7Îï`.rï`.î8Xî<Ôî?ÙîBQîD´îGYîIîJÁîJÁï`.î‘ï^[îÃîÃï^[tï^[îRï^[rï^[îëî Šî%eî(Fî*¹î/~î1æ î:[î@&îCIîF¸îHþîJÁîJÁï^[î‘ï\ˆ îîï\ˆî ôïYt
îîïYxïYîÖïYtïYî­î­ïYxïY î!2ïYtïYî" î" ïYxïYî'CïYtïYî(ïYrïYî@ºîEˆîJlïYtïYîObïYîïV*rîãî×î,ïV*xïV*î fïV*rïV*î Üî#?î$Ýî$ÝïV*xïV*î)«ïV*rïV*î*wî*ìî-³î0yî3¯î8Nî9ªî9ªïV*xïV* îA/ïV*rïV*îAûîBpîBpïV*xïV*îGªïV*rïV*îHîI@îJÁîJÁïV*îïT`î|ïT`tïT`î ïT`rïT`îhïT`î ôïPæîîïPætïPæî<16>ïPærïPæîî¡î¡ïPætïPæ î"ïPærïPæî"Žî&Ýî&ÝïPæxïPæî+«ïPærïPæî-î/wî4<î6î8¹î:sî=Uî@óîCGîHóîJÁîJÁïPæî ôïO î‰ î¥îìîìïOtïO î(RïOrïOî(éî-Gî31î6žî8]î;„î=.î=.ïOxïOîAüïOrïOîCoîCoïOtïOîG¢ïOrïOîH8îJÁîJÁïOî ôïM@tîÕïM@rïM@î~îSî×îPîSî$î ?î#î'žî+Öî0´î36î6î7ìî:nî=Pî=ùî?”îA#îFÛîHêîJÂîJÂïM@î ôïKm î]îôîÌî0ïKmtïKmî#¿ïKmrïKmî$mî&Bî(³î,Îî/3î0…î3òî9î;‡î>fî@FîCOîE$îHOîJÁîJÁïKmî ôïIš îsî´î>îÂîÃî!†î$î$vî'"î'"ïIštïIšî.±ïIšrïIšî/ î3êî5mî7ãî:¦î>óîAiîDŽîFÂîJÁîJÁïIšî ôïGÇî }î|îUïGÇî ôïDVt î¶î¶ïDVxïDVî„ïDVtïDVî[ïDVxïDVîƒïDVtïDVî Zî ZïDVxïDVî$ÀïDVtïDVî%—ïDVrïDVî@ºîEˆîJlïDVtïDVîObïDVîïAirî¹î¹ïAixïAiî‡ïAirïAiîãî}î î!Ðî$]î%ìî()î)kî)kïAixïAiî-“ïAirïAiî.Gî.GïAixïAiî2­ïAirïAiî3aî7Bî;<3B>î=WîC=îDÀîDÀïAixïAiîIŽïAirïAiîJÂîJÂïAiî‘ï?ŸtîÄï?Ÿrï?ŸîDîöîöï?Ÿtï?Ÿî×ï?Ÿrï?Ÿî¯î0î"î$î':î(âî,Çî1©î3gî9î:*î=î>a îF.îH‡îJÁîJÁï?Ÿî‘ï=ÌîÞî¥îbîQî!Øî"3î%œî'mî'mï=Ìtï=Ìî4Ýï=Ìrï=Ìî59î7Åî7Åï=Ìtï=ÌîFãï=Ìrï=ÌîGîGñîGñï=Ìsï=ÌîIsîJ¯îJ¯ï=Ìî‘ï<6îŸîRîîèîõîˆî Ôî"áî%sî&¿î*Oî-vî0pî2ñî4=î7'î9F î@wîDXîF1îHPîJ¯îJ¯ï<6î‘ï:|îï:|rï:|î
ï:|î ôï7 î ÄîÈîrî$îGî®îû î'+î)`î*„ î2‡î7î7—î:fî?$ îG'îJÂîJÂï7 î ôï5Aî<0F>îüî<14> îîîLî!™î#Ò î*Îî-3î0'î4„î6Xî8.
î>` îF°îH<C3AE>îJÁîJÁï5Aî ôï3wîäîäï3wtï3wîœï3wrï3wîôîõï3wî ôï/ýtî'ï/ýrï/ýî/îÿ î"1î'¢î*(î/î2î7åî9¹î<?îA+îAØîGÖîJÁîJÁï/ýî/ï.*tîï.*rï.*îçî €
î'8î)<29>î.Ôî15î6Jî6Éî9™î>°î>°ï.*tï.*îEhï.*rï.*îEçîJÁîJÁï.*î/ï,Wîî™î™ï,Wtï,Wî!Ìï,Wrï,Wî"=î$ßî$ßï,Wtï,Wî*Àï,Wrï,Wî+1î,Êî0î4Gî6oî9Fî>
îAîEîEï,Wtï,WîJï,Wrï,WîJÁîJÁï,Wî/ï*„î¯îŒîLî"-î&wî(:î*)î+©î-Úî0cî1îî4-ï*„î ôï'tîÕî¶ï'rï'î/î½ î!¬î$Ôî'î*Aî,Üî/Ïî3|î5î7\î9÷î;”î>7î>¡îAúîD«îG/îHîHï'ï'îJ°îJ°ï'î/ï%@uîÿï%@rï%@îrîî¼î"î$Öî&î)bî,•î1”î3/î5"î8(î:tî?ªîBNîCôîF¡îJÁîJÁï%@î/ï#cîäîîî ãî"7î&¢î(éî-î1sî3¯î5Eî6ƒî98î:úî?7îAÖîGîJÁîJÁï#cî/ï!™îdî¤îî%)î($î)´î+î-Ñî-Ñï!™tï!™ î7åï!™rï!™î8Mî<-î=Çî=Çï!™tï!™îEVï!™rï!™îFîJÁîKîKï!™îÆîÜî½îJîRî"œî$áî&+î)Ñî.¶î.¶ïÆtïÆî2éïÆrïÆî3Mî6Óî8^î;î?uîCîFúîH<C3AE>îJÁîJÁïÆîóî<1C>îAî!î#tî%yî)wî+9î-¢î0Wî3-î7î9]î=/îBÐîG&îJÁîJÁïóî)î±îüï)î ôï¸tî/îÓ î!Øî'î(Bî-î.ªî1î6Hî6H︸î;R︸î;Òî?Öî@VîEkîEk︸îGð︸îHpîJÁîJÁï¸îåî²
î"î"mî%î)*î-«î/òî1Êî5{î:)î;©î>îA ïåî ôïtt îtrï/îô î"î'î)ýî0—î5Üî7±î<~îA`îC*îE¤îJÁîJÁï¡tî¡rï¡îæîïî sî!õî$Rî'•î+tî0zî4¦î7[î:âî=4îBîBï¡tï¡ îJiï¡rï¡îJÁîJÁï¡îÎîžîYî!hî#öî&
î+
î-Îî1Xî6ò î>îCîCîîIAîJÁîJÁïÎîtî-ïî.î.Óî1àî5î7Ðî<«î?<3F>îBåîEXîG~îJÁîJÁïî 1îpî>î!qî!qï 1tï 1
î*®ï 1rï 1î+î-ñî3Oî3Oï 1tï 1î90ï 1rï 1î9<C3AE>ï 1ÿ
êq?€`½-17MULTIBUFFERHINTFlag.Forpagemappedstreams,isahinttothepagemapcodethatthedevicepreferstotransferdatamorethanonebufferatatime.Ifthisflagistrue,thepagemapcodetriestowriteout(WRITEPAGES)morethanonebufferatatimewhentheopportunityarises.Asimilarimprovementisplanned,butnotimplemented,forreadingmultiplebuffersatatime.Thefollowingfunctionsareofuseforpagemappeddevices:(\PAGED.FORCEOUTPUTSTREAMWAITFORFINISH)[Function]ThisfunctionimplementstheFORCEOUTPUTmethodforpagemappedstreams:itcausesanydirtypagestobewrittenout(usingWRITEPAGES),thencallstheTRUNCATEFILEmethodtosettheendoffile.ThisfunctionisnormallyinstalledastheFORCEOUTPUTmethodbythefunction\MAKE.PMAP.DEVICE.However,thedevicecanoverridethisdefault(bysupplyingitsownfunctioninthatfield),inwhichcaseitmightwanttocallthefunction\PAGED.FORCEOUTPUTexplicitlyaspartofitsmorecomprehensiveFORCEOUTPUTmethod.Thereisanunpleasantnessintheimplementationofpagemappeddevicesthatstemsfromthefactthatoriginallyalldevices(thefewthatexistedinthedistantpast)weremadetosupportthePMAPpackage,ameanswherebyaprogrammercouldgetdirectaccesstothebuffersofafile,muchasonecanwiththePMAPJSYSinTenex.Asaresult,thebuffersusedbypagemappedstreamsaresetupinaspecialmannersothatthegarbagecollectorcantellwhentheusernolongerhasaccesstoaPMAPbuffer.ThePMAPpackageisbeingphasedout.Thisisallexceedinglycrufty,andisoflittleconcerntothedeviceimplementer,exceptforthefactthatitrequiresthatthebuffersbeexplicitlyreleasedwhenastreamisclosed;thebuffersarenotautomaticallycollectedwhenthestreamisdropped.(FORGETPAGESSTREAMFROMPAGETOPAGE)[Function]``Forgets''pagesFROMPAGEthruTOPAGEofSTREAM;i.e.,removesthosepagesfromthesetofpagesbeingcurrentlybuffered,andfreesthebufferstheywereoccupying.IfFROMPAGE=TOPAGE=NIL,forgetsallpages,andreleasesallofSTREAM'sbuffers.(\CLEARMAPSTREAM)[Function]PerformsaFORCEOUTPUT(ifSTREAMisopenforoutput)followedbyaFORGETPAGES.Thisisthestandardactionthatshouldbetakenbyapagemappedstream'sCLOSEFILEmethod.DirectoryEnumerationThissectiondescribeshowdirectoryenumerationworkswhatyouneedtoknowinordertoimplementtheGENERATEFILESdevicemethod,andwhatyouneedtoknowasaprogrammertryingtoenumerateadirectoryviaanythingmoreelaboratethanthefunctionDIRECTORY.Thegeneralideaisthatthedirectoryenumerationcodeisgivenapattern,anditreturnsageneratorthat,eachtimeitispoked,returnsanotherfilenamematchingthepattern.Inaddition,thegeneratorprovidesahandleforgettingfileattributesofeachenumeratedfile.Thissecondhandleisimportantforefficiency:althoughî9<C3AE>ï
êïførîIïhspîJjïhsî ôïbtî<16>ïbrïbî/îÜî\ î%>î*`î+¢î,¤î/\î0áî3î8Çî;ãî>†î@¼îDÔîIAîJÁîJÁïbî/ï`.îîñî"^î%]î'ãî+êî-^î.dî1¹î2î3wî5òî8ƒî9Éî<ßî?îDÍîGìîJÁîJÁï`.î/ï^dîõîîî<1F>ï^dtï^d î'óï^drï^dî)
î,´î/ñî2´î6ùî8ªî9íî=)î@õîCk
îJÁîJÁï^dî/ï\î¯î/î!¤
î*î+bî0÷î3jî5Ñ î>gî@—îE{îJÁîJÁï\‘î/ïZÇî²îîî!ïZÇî ôïYDî úïYDî ôïUÓî <0C>î{îFîlî÷î>î M î(*î,éïUÓî ôïRbtîÀîÀïRbxïRbîŽïRbtïRbî eî eïRbxïRb î)òïRbtïRbî*ÉïRbrïRbîDL îJlïRbtïRbîObïRbîïOurîîÌ î î"<î"<ïOutïOu
î+yïOurïOuî+Öî0µî2É î:ªî?íîAîE)îG îJÂîJÂïOuîïM¢îTîúîäîŒîùî#î#ïM¢tïM¢ î+xïM¢rïM¢î,Èî/åî2ëî5Bî5BïM¢tïM¢ î?VïM¢rïM¢î?ÕîDÕîF|îHîJÂîJÂïM¢îïKÏîî¥îäïKÏîïHëînî©îÚî#lî)¥î,î/>î/>ïHëtïHë
î8{ïHërïHëî9Çî?”îBVîEzîJÁîJÁïHëîïGtîØïGrïGîËî hî&±î)&î-î0!î5¡î8Xî=î?ŸîEüîGìîJÁîJÁïGîïEEîüî îcîWîûî#üî&àî(,î,î/iî1
î3Œî5áî;Kî;KïEEtïEEîJiïEErïEEîJÁîJÁïEEîïCr îDîÅîzîî±î! î*Eî*EïCrtïCr
î3ïCrrïCrî3Úî8¹ïCrî ôï?øîî¥î¹
î0îî
î)zî+V î3„î8mî;\î?IîBÒîETîH"îJÁîJÁï?øî ôï>. îîîåîÉîwîPî#öî%±î(î,¢î0
î3gî73î8íî>î@mî@mï>.tï>.îCÉï>.rï>.îD[îIÄîJÁîJÁï>.î ôï<[îîî îVî î",î%îî)Üî+mî-®î2Bî3Ýî4êî7<C3AE>î;Dî<Öî?cîAÑîDÌîG
îG
ï<[tï<[îJiï<[rï<[îJÁîJÁï<[î ôï:ˆî
zîûîªîŽîŒîî²î!6î$Dî& î-ñî2·î4Þî6Îî8³î:4î;2î?}îDYîEðîH<C3AE>îJÁîJÁï:ˆî ôï8¾îõîaîÎî
î£îåî!Àî#¨î'Ìî*#î.î/¢î0¯î0¯ï8¾tï8¾î4 ï8¾rï8¾î4sî8Úî9Bî9Bï8¾sï8¾î;sî>üîCîD(îGîJ¯îJ¯ï8¾î ôï6ëî Åï6ërï6ëî Ëï6ëî ôï3zî
î<0E>îu
îèîFîî rî"0î%bî*<2A>î,Bî.¦î2ì î;Rî?¥îAæîDJîFúîI™îJÁîJÁï3zî ôï1°îPî/îŸîbîd î!Wî&²î*xî+µî05î1³î6hî8Ùî=î@îB† îJÂîJÂï1°î ôï/æî|îî3îtî²î
ï/æî ôï,ut îßîßï,uxï,uî­ï,utï,uî„î„ï,uxï,uî!>î%àï,utï,uî&·ï,urï,uîDL îJlï,utï,uîObï,uî‘ï)ˆr
îñîÊîÊï)ˆxï)ˆî!>ï)ˆrï)ˆî!Óî$çî$çï)ˆxï)ˆî)‰ï)ˆrï)ˆî*î+æî+æï)ˆxï)ˆî0´ï)ˆrï)ˆî1Âî4dî9ßî=îAdîDÙîGGîI6îJÁîJÁï)ˆî‘ï'¾î<14>îpîoî$†î'cî*Úî-_î26î5lî8ã î?èî@”îB=îB=ï'¾xï'¾îH±ï'¾rï'¾îI îJÁîJÁï'¾î‘ï%ôxî3ï%ôrï%ôîîCï%ôtï%ôîÈï%ôrï%ôîxîÎî <20>î$ƒî' î+æî-§î/2î/2ï%ôxï%ôî4ï%ôrï%ôî54î9¼ï%ôî ôï"zt î1ï"zxï"zîÿï"ztï"zîÖï"zrï"zîDL îJlï"ztï"zîObï"zî‘ï<1F>rî\î<1F><1F>
î «ï<1F><1F>î!î"Ùî"Ùï<1F><1F>î'§ï<1F><1F>î(î)gî,¿î.ãî3±î97î;î<,î<,ï<1F><1F>
îEiï<1F><1F>îF-îFšîI„îJÂîJÂï<1F>î‘ïºîÂî,îî²î"üî$¿î(Oî*î+ î2÷î8î8ïºtïºî?£ïºrïºî?ûîDÚïºî ôï%vî
î%rï%î ôï}î ôîuîAî,îá
î'Ç î/äî2î5Æî7\î;î<—î@2îAÈîH<C3AE>îJÁîJÁï}î ôï³t îßï³rï³î<15>î÷îî"_î%ãî(Âî,Fî.î2î3Ùî5, î=3îA[îC1îIÄîJÁîJÁï³î ôïàîî¢î!îî Eî#<î%mî*´î*´ïàtïàî2Cïàrïàî2 ïàî ôïfî ¢îKîî]îî8îÝ
î'²î*Îî,î/œî0Ÿî5Šî8î9Fî=Îî>ÑîDÃîG¿îJÁîJÁïfî ôï œî ôî&înîÍî[î?îƒî#î(õî+0î0î0<C3AE>î2-î7Ëî:î?ýîEdîFkîJÁîJÁï œî ôï
Òî )î¯î îîÅîí î%kî(!î(žî+­î04î4¯î6î<eî>™
îE9îJÂîJÂï
Òÿ
êq?€`½þ18onecouldjusttakethefilenamegivenbytheenumeratorandpassittoGETFILEINFO,thedevice,inthecourseofenumeration,usuallyhasitsfingersonthefilecloselyenoughthatitneednotperformtheseconddirectorylookupthataGETFILEINFOoutofthebluewouldrequire.Thecallerofthedirectoryenumerationcodespecifiesaheadoftimewhich,ifany,attributeswillberequired(anecessityformostfileserverimplementations).Informationfordeviceimplementors.AfilegeneratorisanobjectrepresentedasalistdescribedbytherecordFILEGENOBJ,exportedfromFILEIO:(RECORDFILEGENOBJ(NEXTFILEFNFILEINFOFN.GENFILESTATE))NEXTFILEFNandFILEINFOFNarefunctionsofthedevice'schoosingthatwhencalledwillreturnthenextfile,andattributesforthatfile.GENFILESTATEisarbitrarystatemaintainedbythegenerator.Withthatasbackground,herearethepiecesofdirectoryenumeration:(GENERATEFILESDEVICEPATTERNDESIREDPROPSOPTIONS)[Devicemethod]ReturnsageneratorthatenumeratesfilesmatchingPATTERN,whichisastringthathashostanddirectoriessuitablyfilledinfromdefaults,andmaycontainthepatterncharacter``*''tomatchanarbitrarynumberofcharacters.DESIREDPROPSisalistoffileattributesthatmayberequestedduringtheenumeration;theymustbevalidATTRIBUTEargumentstoGETFILEINFO.OPTIONSisalistofoptionstotheenumeration,chosenfromamongthefollowing:SORTThefilesshouldbeenumeratedinsortedorder.Ifthisoptionisnotspecified,thedeviceisfreetoenumeratefilesinanyconvenientorder.Thereissomequestionastowhetherfilesshouldbeenumeratedlowestversionfirst(asIFS'sdo)orhighestversionfirst(asTwenexdoes).Ipreferthelatter,butgivenserversthatdotheformer,wecurrentlymakenorequirementaboutversionorder.RESETLSTInformstheenumeratorthattheenumerationcontextissurroundedbyaRESETLST,sothatitmayperformRESETSAVEstocleanupafteritselfiftheenumerationisaborted.Cleaningupcanbeaverymessybusinesswithoutthisinformationaboutthescopeoftheenumeration,soallcallersof\GENERATEFILESarestronglyencouragedtoprovideit.GENERATEFILESshouldreturnafilegeneratorwithasuitableNEXTFILEFNandFILEINFOFN.Finepointaboutmissingfieldsinthepattern:nullfieldsinPATTERNmatchonlyfilesforwhichthecorrespondingfieldisnull.Anullversionisinterpretedashighest.Thus,DIR*=DIR*.*=DIR*.*;*enumerateseverything.DIR*.=DIR*.;*enumeratesallversionsoffileswithnullextension.DIR*.;enumerateshighestversionoffileswithnullextension.DIR*.*;enumerateshighestversionofeverything.Itisdifficultforsomedevicestoenumerateonlyhighestversionoffiles;thereareseveraldevicesinthesystemthattreatanullversionthesameasversion*.However,everydeviceshouldtryitsbest.Withsomework,anydevicethatcanenumerateallversionscanenumeratejusthighestîJÂï
Òî
êïførî ôïhspî Lïhsî ôïbrî îQîåîÒî&îƒî7î!ßî#Ðî&$ î-sî0î3
î4Xî5ûî5ûïbtïb
î?8ïbrïbî@ îB_îFîîH<C3AE>îJÁîJÁïbî ôï`.î/îÖ îî·îî âî%Tî'Hî)•î+ëî0Pî5%î7àî9$î<nî>ÐîDîF`îJÁîJÁï`.î ôï^dîîî¦î£î£ï^dtï^d
î àï^drï^dî!8î#~î% î':î*%î."î3î3iî6î9î;!î=RîBñ
îJÁîJÁï^dî ôï\î
fî î8îîpî!î"<22>î%¶ î+ôî.Ëî0éî6£î8uî>Zî@ÅîDNîFãîJÁîJÁï\‘î ôïZÇî<14>ïZÇî ôïWVz
îMîXîS î4ïWVrïWVîêî Jî!°î!°ïWVuïWVî#Üî)UïWVrïWVî)´î*úî,Äî0³
î7òî9{î:î<•îB”îDjîF¢îJÁîJÁïWVî ôïUkt îZïUkrïUkî
îîÌîÌïUktïUkî ÖïUkrïUkî!UïUkîÔïQñtîŒ î!É
î+Ý î5î6È
îBŠïQñrïQñîB<EFBFBD>ïQñî ôïNwt îZïNwrïNwîÆîcïNwtïNw îÉïNwrïNwî5î oî&Nî'íî*2î/6î4Òî7…î;î>ùîAˆîEîGàîJÁîJÁïNwî ôïL¤î î0 î#îCîòî”îýîýïL¤tïL¤ î'ïL¤rïL¤î'zî(Èî.Mî1` î8eî:Cî<… îBÚîCCîF¡îI@îJÁîJÁïL¤î ôïJÑ
î£î<14>îµîæîÎîYî#ø î+ïïJÑî ôïG`t
î<16>î<16>ïG`xïG`îüïG`tïG`îÓîÓïG`xïG`î!-ïG`tïG`î"î"ïG`xïG` î*ûïG`tïG`î+Òî+ÒïG`xïG`î1ïG`tïG`î1ØïG`rïG`î@ºîEˆîJlïG`tïG`îObïG`îïDsrîºîÙîèî© î&âî)Âî/°î/°ïDsxïDsî5
ïDsrïDsî5Üî9Ûî;;î<Zî@"îBãîELîH8îJÁîJÁïDsîïB©
î!î'îŸî!5î$„î)íî,<2C>î/yî4<î6„î;(î@öîCtîE
îHþîJÁîJÁïB©î‘ï@ßî4î_î
î#Ûî$bî$bï@ßxï@ß î-Yï@ßrï@ßî-áî/Nî0zî2¸î4rî6Û î<íî?»îBÀîD²îJÁîJÁï@ßî‘ï?îÚî îfî"Pî%î'_î*Ÿî*Ÿï?xï?î16ï?rï?î1—î8î9¦î9¦ï?tï?
îBãï?rï?îCîCüîCüï?xï?îI+ï?rï?îIƒîJÁîJÁï?î‘ï=BîŽîœî'îÓîSî î%¬î*
î-Eî1î3Ì î9Ñï=Bîàï:^tî<ï:^rï:^îÌî Øî#úî(¨î*Î î2î4nî8Åî=î=Àî?yîBNîFÚîH{îJÁîJÁï:^îÌï8 î#­î%Þî)òî+0î-Ïî/Oî5âî8 î: î<“ îC[îFåï8îÌï5§î!àî#aî'î,¦î.jî0,î5Œî8Œî=î? îF¹îJÁîJÁï5§îÌï3Ýî"pî%'î'/î*¡î,ÿî.£î3>î7ãî:šî<¡îAªîE‰îEïîFØîJÁîJÁï3ÝîÌï2î dî$‡î'@î+,î/õî2ûî5:î7Òî<òî?SîEeîHêîJÂîJÂï2îÌï0I
î%fî)î-®î18ï0Iîàï-etî˜ï-erï-eîÌî#î%<25> î,þî/áî2W
î:lî?Tî@Ö îG÷îIÅîJÂîJÂï-eîÌï+tî$„ï+rï+î%Xî'î)×î+$î.î3jî3jï+tï+î:ùï+rï+î;úî=ŸîA(îC1îFbîIŽîJÁîJÁï+’îÌï)¿î I
î(eî)ïî/lî0î5üî8,î:Õî<äî>-îAZîE„îJÁîJÁï)¿îÌï'õî"¦î%
î,oî0!î2Sî5ïî7{î9­ îAÖîCmîE/îI7îJÂîJÂï'õîÌï&+t
î)Žï&+rï&+î)æî, î1 î8=î9½î>î?Ãï&+î‘ï#>t î|ï#>rï#>îÔî î$î%î'Tî-Aî0,î1)î6
î6
ï#>tï#> î>sï#>rï#>î>ËîATîATï#>tï#> îIºï#>rï#>îJï#>î‘ï Qî¿îOî"î î#­î%Oî'¢î,Ëî/î3<î4Þî4Þï Qxï Qî:8ï Qrï Qî:²î>ÈîAÔîD´îFåîJÂîJÂï Qî‘ïî îƒîƒîÁî"Àî#î$wî'î+¶î,ô
î3Óî5Tî:8î:<3A>î>6î>6ï‡ï‡î><ï‡îàï£tî<îï£rï£îkî£tï£îî ï£rï£î \î"î"ï£tï£î%pî)£ï£rï£î)û î1
î7©ï£îàï¶tî<îêï¶rï¶îBîúîúï¶tïîVî!²ï¶rï¶î"
î)!î*âî/ýî1ˆî4Fî71î9Ù î?Êï¶îàïÉtî<îÁïÉrïÉîÌ î$ãî)pî.î/î2Pî5;î7ã î=ÔïÉîàïÜtî<î˜ïÜrïÜîÌ î$ãî)pî.î/
î6)ïÜî‘ïïîïîAîYî|îôî" î$4î*Úî-Øî-Øïïïïî2yî6¸ïïïïî7$î8Ãî<î?|îA¶îF*îJÂîJÂïïî‘ï%î#îfîÃîtîˆîî"Qî&úî)<î,<2C>î.0î2Ùî2Ùï%tï%î3°ï%rï%î4qî4Úî:ðî>ˆîB®îG
îIîJÁîJÁï‘ï RîÚîoîúîî}î"-î&~î)[î+õî2Åî4Ãî:î<µîC…îF4îJÁîJÁï R Ý
êq?€`½ 19versionifitenumeratesinsortedorderandusesperhapsalittlelookaheadtoassurethatanynameitreturnsistheoneofhighestversion.(NEXTFILEFNGENFILESTATENAMEONLY)[FileGeneratorComponent]Generatesthenextfile,returningitsnameasastring,orNILifthegeneratorisexhausted.GENFILESTATEisthestatecomponentofthefilegeneratorreturnedfromGENERATEFILES.NAMEONLYmeansthatthecallerisonlyinterestedinthefile'sName.Extfields,notthefullfilename(andnomorethanoneversionofthefileneedbeenumerated);however,itisalwayspermissibletoreturnthefullfilename.TheNAMEONLYoptionisusedbySPELLFILE.(FILEINFOFNGENFILESTATEATTRIBUTE)[FileGeneratorComponent]ReturnsthevalueoftheATTRIBUTEpropertyofthefilemostrecentlygeneratedbytheNEXTFILEFN,i.e.,effectively(GETFILEINFOlatest-nameATTRIBUTE),buthopefullymuchfaster.ATTRIBUTEmusthavebeenamemberoftheDESIREDPROPSargumenttoGENERATEFILES.Notalldeviceimplementorsareenthusedaboutimplementingapatternmatcherforfilenames.Thefollowingfunctionsareprovidedtohelpout:(DIRECTORY.MATCH.SETUPPATTERN)[Function]AcceptsasPATTERNafilenamestringsuchaspassedtoGENERATEFILES.ReturnsanobjectsuitableasafiltertoDIRECTORY.MATCH.(DIRECTORY.MATCHFILTERTESTNAME)[Function]MatchesTESTNAME,afilename,againstFILTER,theobjectreturnedfromDIRECTORY.MATCH.SETUP.ReturnstrueifTESTNAMEmatchesthepattern,falseifnot.Thematchiscase-insensitive.(\NULLFILEGENERATOR)[Function]Returnsafilegeneratorthatproducesnofiles.(\GENERATENOFILESDEVICEPATTERNDESIREDPROPSOPTIONS)[Function]Returnsa``stupid''filegeneratorfordevicesthatdon'tknowhowtoenumerateingeneral.IfPATTERNcontainsnowildcards,butnamesafilethatisINFILEP,thenthegeneratorproducesexactlythatfile.IfPATTERNcontainsawildcardintheversionfield,itusesGETFILENAMEtolaboriouslygeneratealltheversionsofthefile.Inallothercases,\GENERATENOFILESreturnsanullfilegenerator.Informationforclientsofdeviceenumeration.Thefollowingfunctionsmakeupthe``public''interfacetodirectoryenumeration:(\GENERATEFILESPATTERNDESIREDPROPSOPTIONS)[Function]ReturnsafilegeneratorobjectforenumeratingthefilesmatchingPATTERN.PATTERNisexpandedbyaddingthedefaulthostand/ordirectoryifappropriate.SeedescriptionoftheGENERATEFILESmethodfordescriptionofDESIREDPROPSandOPTIONS.îJÁï
êïførîIïhspîJjïhsîïbrî.îgî• î³î 9î$2î'½î*Mî-î2 î3#î6(î<î>îBîD·îG0îJÁîJÁïbî‘ï`7î¹î<îzî«î(î³î"@î'.î'.ï`7ï`7î'4ï`7î ôï\Æt
îîï\Æxï\Æ îËï\Ætï\Æî¢î¢ï\Æxï\Æî$^ï\Ætï\Æî%5ï\Ærï\Æî9œî<¥îC îJlï\Ætï\ÆîObï\ÆîïYÙrî4îîéîÌî%õî'òî+Õî-§î.öî3Eî5-î5-ïYÙtïYÙî7²ïYÙrïYÙî8[î9àî<bîB¡îD0 îJÂîKîKïYÙîïXx îTïXrïXîÿî<1B>îî!iî(°î*Žî-î/Ÿî5ßî;œî?'î?'ïXtïX îJïXrïXîJÁîKîKïXîïV3xîMïV3rïV3îÁîñî«î ÷î$—î%ðî(õ î/)î0Åî3î6Bî6BïV3tïV3î<úïV3rïV3î=mîAeîCÆîFîHˆîJÂîJÂïV3îïT`îpîÀîæî˜î Ýî#¨î(<28>î*fî,åî/mî2éî4ú î=“îCŒîEîF<C3AE>îJÂîJÂïT`îïR
îšîîîJî!¥î#ßî'Çî(î*Èî*ÈïRxïRî1„ïRrïRî1Üî6î7Bî:Oî<î<ïRtïRîC¬ïRrïRîD ïRî ôïOt
îîïOxïO îËïOtïOî¢î¢ïOxïOî$9ïOtïOî%ïOrïOî9œî<¥îC îJlïOtïOîObïOîïL/rîîÏîÌîÙî!<21>î!<21>ïL/xïL/î($ïL/rïL/î(ÿî.ëî0ùî3­î6jî:î?£îF@îH<C3AE>îJÁîJÁïL/îïJet î÷ïJerïJeîî½
î#zî#zïJetïJe î-ŽïJerïJeî.>
î5­î5­ïJexïJeî<DïJetïJeî=ïJerïJeî>#î@ÍîGîJÂîJÂïJeîïHîÆîÆïHxïHî]ïHrïHî¯î"ãî&õî+î-î3Nî5Óî8ÿî8ÿïHxïH îAöïHrïHîCHîIAîJÁîJÁïHîïFÈt î|ïFÈrïFÈîÙïFÈî ôïCNî óîîƒ îTî×î$áî(ï î1Öî31î8î=î@îBšîGcîHîJÁîJÁïCNî ôïA„îÒî<15>îÃîbîâî!Íî$:ïA„î ôï>tîEï>xï>î"Ÿï>tï>î#vï>rï>îDL îJlï>tï>îObï>î‘ï;&rî°î`ï;&xï;&îºï;&rï;&îAîmî ×î$—î(lî+<2B>î-Mî1³î3bî3bï;&tï;& î>Mï;&rï;&î?+î?²îDèîFÚîJÁîJÁï;&îï9SîuîöîóîîŸîŸï9Stï9Sî)8ï9Srï9Sî)•ï9Sî ôï5Ùtî;ï5Ùxï5Ùîlï5Ùtï5ÙîCï5Ùxï5Ùî#<23>ï5Ùtï5Ùî$tï5Ùrï5ÙîDL îJlï5Ùtï5ÙîObï5Ùîï2ìrîRï2ìxï2ìî¬ï2ìrï2ìîÕî"Kî%ýî+_î1Dî1Dï2ìxï2ìî5uï2ìrï2ìî7<C3AE>î;Gî@§îG‰îJÁîJÁï2ìîï1"tî"4ï1"rï1"î#î#…î(°î+Šî,âî,âï1"xï1"î3<ï1"rï1"î3¹î8ûî;Qî@\îCîDÚîGœîHîJÁîJÁï1"î‘ï/OîîÃî#ï/Oî ôï+ÞtîÀï+Þrï+ÞîDL îJlï+Þtï+ÞîObï+Þî‘ï(ñrî˜îîÏî¼î![î'î(Þî+¡ï(ñî ôï%€tîîï%€xï%€î<1D>ï%€tï%€îXï%€xï%€î#²ï%€tï%€î$‰î$‰ï%€xï%€ î-€ï%€tï%€î.Wî.Wï%€xï%€î3†ï%€tï%€î4]ï%€rï%€îDL îJlï%€tï%€îObï%€î‘ï"“rîÖî î¬î$î%Nî'î,qî/Mî2ïî6¼î9Îî;ŒîB]îDîIîIlîJÁîJÁï"“î‘ï Éxîëï Érï ÉîoîËîÏ î$?î&½î*þî,'î.Œî1Wî2Áî2Áï Étï Éî8¢ï Érï Éî9~î<¡î>þîEîJÁîJÁï Éî‘ïöî/îîÅîOî×î×ïöxïöî"1ïörïöî"¼î(î)Oî.êî0œî3î7Êî;Tî<¯î?¬î?¬ïötïö
îHéïörïöîIAîJÁîJÁïöî‘ï#
îwîÖî¢î Þî&î'šî)Öî,rî,Õî.î0Nî3Èî7oî7oï#tï#îDßï#rï#îEBîIÅîJÂîJÂï‘ïPî9îs îPî ôïßz
î<11>î¿î!îÜî
î%]ïßrïßî&Gî&Ûî)¿î/Øî5Þî9Ÿî;¾î>* îCÍîIAîJÁîJÁïßî ôïôî îŠïôî ôïƒtîƒxïƒî¾ïƒtïƒî•î•ïƒxïƒ î&Œïƒtïƒî'cî'cïƒxïƒî,’ïƒtïƒî-iïƒrïƒîDL îJlïƒtïƒîObïƒî‘ïrîîîÙîÉî"³î$Æ
î,<2C>î.Ãî1…î7Tî7Tïî<®ïî=`î=¼î=¼ïîCïîCqîD²îJÁîJÁï–î‘ï
Ìî,îZîXî <20>î$4î)xî/äî1ä î:4î;Yî>Ž
îF8îH<C3AE>îJÁîJÁï
Ìî‘ï t î  îÔî ®î"½
î)šî+%î+%ï   î4ï  î4tî6ýî6ýï  î<,ï  î<‰ï g
êq?€`½Ô20(\GENERATENEXTFILEGENERATORNAMEONLY)[Function]Returnsthenextfile,asastring.GENERATORistheobjectreturnedfrom\GENERATEFILES;NAMEONLYindicatescallerdoesnotrequirethatthefullnamebereturned,butthatthenameandextensionaresufficient.(\GENERATEFILEINFOGENERATORATTRIBUTE)[Function]ReturnsthevalueoftheATTRIBUTEpropertyofthefilemostrecentlygeneratedby\GENERATENEXTFILE,i.e.,effectively(GETFILEINFOlatest-nameATTRIBUTE).ATTRIBUTEmusthavebeenamemberoftheDESIREDPROPSargumentto\GENERATEFILES.(DIRECTORY.FILL.PATTERNPATTERNDEFAULTEXTDEFAULTVERS)[Function]ThisfunctionisusedtofillindefaultsinPATTERNbeforepassingitto\GENERATEFILES.IfPATTERNdoesnotincludeanextensionorversion,butthosefieldsarenotexplicitlyomitted(e.g.,``FOO'',butnot``FOO.'';``FOO.BAR'',butnot``FOO.BAR;''),theyarefilledinwithDEFAULTEXTandDEFAULTVERS,whichthemselvesdefaultto``*''.ThisfunctionisusedbytheDIRcommand,andshouldprobablybeusedbyanycodethattakesauser-suppliedpatternandenumeratesfilesfromit.î<‰ï î
êïførî ôïhspî Lïhsî ôïbtîéîéïbxïbî!ïbtïbî!Üî!Üïbxïbî(˜ïbtïbî)oïbrïbîDL îJlïbtïbîObïbîï_rîÉî,î>îî´î âî%î%šî%šï_xï_î,¶ï_rï_î-?î.¯î1î5*î:Åî>.î>.ï_tï_
îIðï_rï_îJÁîJÁï_î‘ï]AxîMï]Arï]Aî±î;î Ëî#Øî&*î*Îî-yî/¶î2î5ºî7‰î=Wî?µîB`îD<C3AE>îH9îJÂîJÂï]Aî‘ï[wî}î£
îsï[wî ôïXtîéîéïXxïXî!ïXtïXî!Üî!ÜïXxïXî(sïXtïXî)JïXrïXîDL îJlïXtïXîObïXîïUrî`îXîšîìî"åî"åïUxïUî)|ïUrïUî*î0Ìî3î6î9î=
îBÚîHôîJÂîJÂïUîïSOtîØïSOrïSOîÀî"]
î(úî(úïSOtïSO î3ïSOrïSOî3Ÿ
î:íî:íïSOxïSOîA„ïSOtïSOîB[ïSOrïSOîCBîCÒîCÒïSOxïSOîJiïSOrïSOîJÁîJÁïSOîïQ|îÊîâîî
î Kî!Öî$î$ïQ|xïQ| î,þïQ|rïQ|î-Vî3Oî4Ïî4ÏïQ|tïQ|
î@ïQ|rïQ|î@îïQ|î ôïNtîîïNxïNî#vïNtïNî$Mî$MïNxïN î+ÿïNtïNî,Öî,ÖïNxïN
î5JïNtïNî6!ïNrïNîDL îJlïNtïNîObïNîïKrî³î1î§îëî£î!Ñî#‰î(»î*sî*sïKxïKî/ÍïKrïKî0\î4³î9<C3AE>î:íî<¤î<¤ïKtïK
îHfïKrïKîIîImîJÂîJÂïKîïIBxîëïIBrïIBîRîbî·î sî"Eî(@î)åî.äî1Eî4Ãî8Vî:î<à îB¢îG•îJÁîJÁïIBîïGxîAïGxtïGxîÆïGxrïGxî6î˜îíî<1A>ïGxtïGxîùïGxrïGxîŠî :ïGxtïGxî&ïGxrïGxî'î)íî,Cî,óïGxtïGxî3«ïGxrïGxî5”î8…î:»î>-î?½îB·îB·ïGxxïGx îJiïGxrïGxîJÁîJÁïGxîïE¥î+ïE¥xïE¥
îŸïE¥rïE¥î_î M î'î+¤î-4î0î0mî3hî8Àî:î=,î? îAMîAMïE¥tïE¥îCÒïE¥rïE¥îD:îJÁîJÁïE¥îïCÒî3îîNî*î"Pî$7î&Ãî)óî,«î0î1( î9Šî>1î@Ó îHîJÁîJÁïCÒîïBîÉîðïB»
êq?€`½Ü
é
TIMESROMAN
 é HELVETICAé
TIMESROMANé HELVETICA
é
TIMESROMAN é
TIMESROMAN
~GACHA
é
TIMESROMANé
TIMESROMAN
é
TIMESROMAN~GACHA
j
^
/%å3óA'O _[ g r ~  NŸ 4ª
Òà 4Î Ù ÷äEéOj/ìêÿÿ<C3BF>ןgÿÿÿÿÿÿ{DSK3}STREAMS.TEDIT;23VANMELLE30-Nov-84 14:17:38