nI~ DFU024.BCK DFU024.BCKNBACK/LOG/EXCL=[.KIT]*.*;* LDA4:[DFU024...]*.*;* DUMPS:[DORLAND]DFU024.BCK/SAVE DORLAND 7@d{xV6.2 _UTRUIN::  _$3$DRA2: V6.2 ~ 6 *[DFU024]DFU024_IG_US_GUIDE.TXT;3+,Z./7@ 4Al-Y0123KPWO56UAn7]An89G7@HJ6 This directory contains the kit for DFU version V2.4.? The DFU_FREEWARE_024.A file is the kit which must be installed8 with the VMSINSTAL procedure. The complete installation1 procedure is described in the documentation. DFU- can be installed on Alpha and VAX platforms.7 The [.DOC] directory contains the DFU documentation in: Lineprinter, PostScript(TM) , Bookreader and HTML format.@ These documentation is also in the DFU_FREEWARE_024.A saveset, A and can optionally be installed to the SYS$HELP directory during installation.8 The [.LIS] directory contains the DFU sources listings.*[DFU024]DOC.DIR;1+,[./7@ 4-Y0123 KPWO56ffs7|fs89G7@HJIDFU024.DECW$BOOKj"DFU024.DECW$BOOKSHELFk DFU024.HTMLl DFU024.LINEm DFU024.PSnDFU024_001.HTMLoDFU024_002.HTMLpDFU024_003.HTMLq DFU024_CONTENTS.HTMLr DFU024_CONTENTS.TEX*[DFU024.DOC]DFU024.DECW$BOOK;2+,j. /7@ 4j5  -[0123KPWO!56}t7}t89G7@HJrEHj $ DFU V2.4\ۇsDFU024 > Contents{ B*;DECdocument V3.0a/ gCONTENTSCONTENTS8 E\TitlePageTitle Page@E\ CopyrightPageCopyright Page@g$K1 Introduction1 Introduction Rw' $K1.1&KSupportonDFU1.1 Support on DFU [w+ $K1.2&KGeneral description1.2 General description _g. $K1.3!&KNewfeaturesofV2.41.3 New features of V2.4lg 4 $L1.4'&L Restrictionsand Parameters1.4 Restrictions and Parameters;w $L2UsingDFU2 Using DFUaw. $K2.1!&K Installation procedure2.1 Installation procedure \w, $K2.2&KSecurityandaccess2.2 Security and access+Kw# $K2.3&KRunningDFU2.3 Running DFU3nw 6 $K2.4)&KUsinganindirectfilelist2.4 Using an indirect file list9[w(($K3TheSMGoutput interface3 The SMG output interface;aw. $K3.1!&KEnabling/DisablingSMG3.1 Enabling/Disabling SMG<w2J $K3.2=&K Automatic switchingbetweenSMGandLinemode3.2 Automatic switching between SMG and Line mode=hw3 $L3.3&&LLayoutoftheSMGscreen3.3 Layout of the SMG screen>dw0 $K3.4#&KSpecialScreencommands3.4 Special Screen commandsBMg$ $K3.5&KSideeffects3.5 Side effectsF=g $K4DFUbasics4 DFU basicsH4g $K5DEFRAG5 DEFRAGTJw" $K5.1&K Description5.1 DescriptionUQw& $L5.2&LErrormessages5.2 Error messagesX/gEKDEFRAGDEFRAG[4g $K6DELETE6 DELETEfLg# $K6.1&K Introduction6.1 Introductiong/gEKDELETEDELETEk:g $K7 DIRECTORY7 DIRECTORYzLg# $L7.1&L Introduction7.1 Introduction{}w(= $K7.20&K Discussionof directory compression7.2 Discussion of directory compressionWw) $L7.3&LOutput formatting7.3 Output formatting5g EK DIRECTORYDIRECTORY4g $K8REPORT8 REPORTJw" $K8.1&K Description8.1 DescriptionXw* $K8.2&KSyntaxandOutput8.2 Syntax and Output/gEKREPORTREPORT4g $L9SEARCH9 SEARCHLg# $K9.1&K Introduction9.1 IntroductionXw* $K9.2&KSyntaxandOutput9.2 Syntax and Output`w. $K9.3!&KVolumeSet processing9.3 Volume Set processingWw) $K9.4&KOutput formatting9.4 Output formattingqw"7 $K9.5*&KUICand identifier processing9.5 UIC and identifier processing/gELSEARCHSEARCH0g$L10SET10 SETNg$$K10.1&K Introduction10.1 Introductionsw#8$K10.2*&KUICand identifier processing10.2 UIC and identifier processing)g  EKSETSET:g $K11UNDELETE11 UNDELETENg$$K11.1&K Introduction11.1 Introduction\g,$K11.2&KHowUndeleteworks11.2 How Undelete works gg2$L11.3$&LFilesmarkedfordelete11.3 Files marked for delete)sw#8$L11.4*&LUICand identifier processing11.4 UIC and identifier processing*3g EKUNDELETEUNDELETE+4g $K12SPAWN12 SPAWN76g $K13VERIFY13 VERIFY8Ng$$K13.1&K Introduction13.1 Introduction9`w.$L13.2 &LBasicrepairactions13.2 Basic repair actions>[w+$L13.3&L Directoryscanning13.3 Directory scanningAfw1$K13.4#&KAdvancedrepairactions13.4 Advanced repair actionsD]w,$K13.5&K Interpretingerrors13.5 Interpreting errorsHUw($K13.6&KError reporting13.6 Error reportingI/gEKVERIFYVERIFY^lB"6* CopyrightAugust1996 ~AllRights Reserved.=ODFUV2.4rHHODFUDiskandFile UtilitiesforOpenVMSVAXandAlpharH ORevision Information:(^Thismanual supersedesV2.2O%ODate:^August1996,fO OperatingSystem:*^OpenVMSVAXV5.5-2thru7.1, ^AlphaV6.1thru7.1b8ONote:)^PartoftheFreewareCD-ROMss /! p  O8O6OpenVMSFreewareforVAXandAXPSystemsbOTheOpenVMSFreewareCD-ROMcontainsfreesoftwaretoolsand utilitiestoaid^Osoftware developersincreating applicationsandmanagingandusingOpenVMSOVsystems.fOManyofthesetoolsarepopularpackagesalreadywidelyknownandinuse,whilemO3othersare internally developedDigitaltoolsour engineersaremaking availabletoour^OuOpenVMS customers.'Forexample,theOpenVMSFreewareCD-ROMincludesBliss-[O32forOpenVMSVAX,Bliss-32forOpenVMSAXP,andBliss-64forOpenVMSOAXP.multipleversionsP5.JSearchall directoriesonthediskforaliasfileentriesA=6.JSearch all directories on the diskforemptyY directories `IREPORT: GeneratesafileandfreespacereportforaKmdisk.*Alsoadiskspaceusagereport,basedonUIC'sorJ identifiers,canbe generated,evenonadiskwhichhas diskquota disabled. `QSEARCH:Lookupfilesonadiskbyspecificfile attributes?(eg.&filessizes,dates, ownership,andsoon) `vOvSET:This functionsallowssettingoffile attributeswhich6arenot availablethroughDCL commands. `M9MUNDELETE:Asafefilerecovery function. `GVERIFY:Thisfunctionperformsafastdisk structureK% verificationandcan optionallyrepaircertaindiskstruc-@~tureerrors (comparablewithANALYZE/DISK/REPAIR).]KOEachfunctionis describedindetailinthe correspondingOchapter. pFODFUis supportedonOpenVMSVAXV5.5-2throughV7.1,HOandOpenVMSAlphaV6.1thruV7.1.*DFUhasbeentestedNO5ontheFieldtestversionsofVMS7.1;sofarnoproblemsQOhavebeenfound.'TheofficialfreewarereleaseofDFUwillbeCO distributedwiththeofficialreleaseofVMSV7.1.BB  &O1.3BNewfeaturesofV2.4EOUThisversionofDFUoffersseveralimprovedandnewPO features,aswellasacoupleof bugfixes.*Thenew functionsOandfeaturesare: '  `mDmImprovedhandlingofUIC'sand Identifiers.*DFUnow@acceptsallvalidnumericand alphanumericUIC'sDand identifiers..Thisoptionisusedinthe/OWNER>wand /IDENTIFIER qualifier.,TheSEARCH,SETand5UNDELETEcommandsusethese qualifiers. `OAOInsomecasesthe DFU_ALLPRIV identifierwastooD restrictive; thereforeithasbeenremovedfromthe8DIRECTORY/COMPRESS, DELETE/DIRandtheSETYcommand. `EOutput formattingisnowpossibleontheSEARCHand80DIRECTORY/VERSIONcommandsviathe/FORMATB qualifier.2ThisallowsthebuildingofactionDCLEcommand proceduresdirectlyfromtheoutputofthese: commands. `IOutputfilehandling:'thenew/APPEND qualifierallowsKDFUtoaddoutputtoanexistingoutputfileinsteadof jcreatinganewone. `ADELETE/DIRECTORY:thenew/KEEP qualifierallowsGB preservationofthe directorytree;onlythe directorycontentisdeleted. `?SEARCH:addedthe/OVER_ALLOCATED qualifierto.ssearchforover allocatedfiles. `HREPORT:Severalnew qualifiersallowcontrolovertheGK output.+The/USAGE qualifiercannowalsobeusedasE  /USAGE=toreportaspecificuicor identifier. `" F"  UNDELETE:abilitytoundeletefilesmarkedfordelete ` ? VERIFY:several enhancements.(VERIFY /DIRECTORYC allowsacomplete directorycheck;!thisresultsinMS better detectionoflostfilesandsomecasesof directory?  problems.*Notethat/DIRECTORY_SCANreplacesthe> DIRECTORY/CHECKcomand.)Also incorrect backlinksF] oftheMasterFile Directory (000000.DIR)cannowbeJ  repaired.)Finallytheoutputofmultiple allocatedblocks> hasbeenimproved(isnowsortedbyLBN's).\22OThe followingbugshavebeenfixed:! P `m>mOnVAX/VMSV5.5-2withoutthepatchonSMGSHRC installed,DFUcouldexitwithanACCVIOerror.-AE workaroundhasbeenbuildintoavoidthisproblem. `HWhen processingacorrupt directoryDFUcouldendwithJanACCVIOerror.'Thishasbeenfixedbybetterchecking#Oofthe directoryfile. `/ SET/MAXRECdidnotwork properly. `M9MIf,duringanUNDELETEcommandCTRL/YwasHenteredanextraRETURNhadtobegiventoabortthe3UNDELETEcommand.'Thisisnowfixed. `~>~ VERIFY/FIXandUNDELETEdidnotalwaysreenterJthefilewithitsoriginalversionnumber.)DFUwillnowO/enterthefilewiththecorrectversionnumber,orthenextFhigherversionifthecurrentversionalreadyexists. `KIssueacorrecterrormessagewhentryingtouseDFUon;_nonODS-2diskssuchasaSpiralogvolume. `HInabatchjobDFUcouldproduceunwantedblankpages67whenthelogical DFU$NOSMGwasdefined.*   ne,O1.4B Restrictionsand Parameters9OUTheDFUprogramhasafew restrictions: I `mCmDFUcannothandlevolumesetswithmorethan32members. `EFEDuetochangesinVMSruntime librariesforDECCHDFU.EXEfileslinkedonVMS6.2cannotberunonVMSE6.1andlowerwithout relinkingtheimage.-Thebest?Osolutionisto reinstallDFUonthosesystems. `ETheSMG interfacemaynotworkatallonVMS5.5-F'2.+Inthatcaseyouneedtoinstall CSCPAT_0320and; re-installDFU.Warning:/ CSCPAT_0320replaces> SMGSHR.EXEandmayhavesideeffectsonother-0 applicationsusingSMG routines.! ^IOThe followingminimumprocessquotasare recommendedforODFUusage:$ `mmWSQUOTA:1500 `WSEXTENT:3000 `llDIOLM:40 `ASTLM:40 `kkFILLM:40 `BYTLM:30000 `ii PGFLQUOTA:30000NIOIfyouuseDFUonvolumesetswithalargenumberofGOmembersyoumayneedtoincreasetheSYSGEN parameterO5 CHANNELCNT.NKOIfyouusethe directorycommandonverylarge directoryNOfiles(>1000blocks)andrunintoerrorsyoumayneedto/O5increasethe following parameters:E `mGmWSQUOTAatleast1000+size-of-largest directoryfile `2WSEXTENT:WSQUOTA+atleast1000 `l:lCTLPAGES(SYSGEN parameter):'atleast100 `<WSMAX(SYSGEN parameter):&atleastWSEXTENT NOODonotchange parametersunlessyourunintoerrorssuchas9OEXCEEDEDQUOTAor INSUFFICIENTWORKINGSETO5LIMITS.O 2.2Using!DFULOThischapter describesthe installation procedureandother8OactionswhichmustbetakentorunDFU.  &O2.1B Installation procedureIOUDFUcanbe installedwiththe VMSINSTALutility.)During=Othe installation VMSINSTALdoesthe following:!  `m=mMovesthe documentationtoSYS$HELP (Optional) `RelinksDFU `lDlCreatesthe DFU_ALLPRIV identifierneededtoperform7thespecial functions.&(Seechapter2.2)l"BBOTheDFUutilityinfactcontainsjust2files:#`+Om1.JDFU.EXE:theDFUprogram5O2.J DFUHLP.HLB:theon-linehelpfile$@ lDODFU.EXEwillbemovedto SYS$SYSTEM,and DFUHLP.HLB(Owillbemovedto SYS$HELP.% wCOYoucan optionallyget documentationofDFUduringPO installation.*ToinstallDFUloginintoa privilegedaccountO5andenter:"O$&@sys$update:vmsinstalC#VAX/VMS%Software%Product% Installation% Procedure&V6.2)It&is& 01-Aug-1996&at&13:46.BEnter&a%question%mark%(?)%at%any&time%for&help.S^*%Are&you% satisfied%with%the%backup&of&your%system&disk%[YES]? & IO VMSINSTALnowasksforthe distributionmediaandprod-NOuct.*Youcanalsospecifythe directorywhereyouhavetheAO5DFU_FREEWARE_024.Afileinsteadofadevicename:K*%Where%will%the% distribution&volumes%be%mounted:%[DDCU:]_#Enter&the%products%to%be% processed%from%the%first% distribution&volume%set.(*% Products:&DFU_FREEWARE_024F*%Enter% installation&options%you&wish%to%use&(none):8=The% following%products%will%be% processed: DFU_FREEWARE_&2.4E Beginning% installation%of% DFU_FREEWARE_%V2.4Kat%13:46Fx%VMSINSTAL-I-RESTORE,% Restoring%product%save&set%A&...' Installing%DFU&version%2.4'F lIOThenextquestionwillpromptyouforthe documentationLOfiles.*TheDFU documentationis availableinLineprinter,FO5 PostScript,HTMLand Bookreaderformat.'The documenta-6Otionfileswillbecopiedto SYS$HELP.P*%Do%you&want%the& documentation%in% Lineprinter%format&?%[Y]?BZ%VMSINSTAL-I-DOCMOVED,% DFU024.LINE%moved%to%SYS$HELPS*%Do%you&want%the& documentation%in%PostScript(TM)%format&?p[N]?O *%Do%you&want%the& documentation%in% Bookreader%format%?%[N]?IS*%Do%you&want%the& documentation%in%HTML%format%?%[N]?Y( b/GO VMSINSTALnowlinkstheDFUimageandaddstheiden-UOtifiertothe Rightslist(seechapter2.2forthemeaningoftheO5 identifier)."Linking%DFU&image&...3 %DFU-I-LINK,%Linking&DFU%2.4Kimage...(I %DFU-S-DONE,%DFU.EXE&created) EONext VMSINSTALwillcreatethe DFU_ALLPRIV identifierOif necessary.P%VMSINSTAL-I-ACCOUNT,%This& installation%adds&an& identifier%named DFU_ALLPRIV.S%UAF-I-RDBADDMSG,& identifier% DFU_ALLPRIV%value:& %X80010008%added%toZrights&data%baseI%VMSINSTAL-I-MOVEFILES,&Files&will%now&be&moved&to&their ,target%directories...; Installation%of%DFU%V2.4J completed&at&13:47,*JOYoumustgrantanyDFUuser includingyourselfthenec-LOessary DFU_ALLPRIV identifierifauserbeallowedtouseMO5thespecialDFU functions.)Seechapter2.2forthemeaningOofthis identifier.F+ $O2.2BSecurityandaccessJOUDFUhassome functionswhichmustnotbemade availablePOforgeneralusage.' ThereforeDFUhas2groupsof functions:I,Om1.JNormal functions-Y }h1.JDELETE/DIRECTORY2.J DIRECTORYf3.JREPORT4.JSEARCHe5.JSET6.JSPAWN?d7.JVERIFY(except VERIFY/FIXandVERIFY/REBUILD)J.  O2.JSpecial functions/ph1.JDEFRAG2.J DELETE/FILEf3.JUNDELETE-4.J VERIFY/FIXandVERIFY/REBUILD0 $FOThenormal functionsneedSYSPRVorBYPASS privilege.KOThespecial functionsrequireBYPASS privilegeaswellasBO5the DFU_ALLPRIV identifiergranted.(The DFU_ALLPRIVQO identifieriscreatedduringthe installation procedure.'Toen-NOableausertoperformspecial functionsthesystemmanager7O>mustgrantthis identifierasfollows:O$&mc& authorize/O UAF>&grant/id& DFU_ALLPRIV&username1sIOItishighly recommendedthatspecial functionsareNOT*Omade availabletotheworld.*2::3fO2.3BRunningDFU*OUTorunDFUyoucanenter:!O$&RUN%disk:[mydir]DFUq4!G3Oor(ifDFUis installed systemwide):O$&MC&DFU5iyMOYoucanalsodefineanduseasymbolforDFUasfollows:O$&DFU%==%"$DFU"OP$&DFU6$ODFUnowpromptswith:=Disk%and%File% Utilities%for&OpenVMS%DFU&V2.4PFreeware%version? Copyright&(C)%1996&Digital% Equipment& CorporationODFU>"7 5EOYoucannowenterDFU commands.*HELPgivesyouon-HOlinehelp.*AftereachcommandDFUreturnstotheDFU>IO5prompt.-Youcanrecallandedit commands,justaswithNODCL(20commandswillbestoredintherecallbuffer).)UseIOEXITorCTRL/ZtoleaveDFU.IfyouuseasymbolforNO>DFU,youalsoprocessasinglecommandandreturntoDCLO immediately:'O$DFU&SEARCH%disk/qualifiersg8=HODuringaDFUrun,youcan interruptDFUwithCTRL/CJOorCTRL/Y.These interruptsarecatchedbyDFUtoallowJO5acorrectrundownofthecurrentcommand.)Itmaythere-MOforetakesometimebeforeDFUrespondstoaCTRL/CorYO interrupt.9 =Z.O2.4BUsinganindirectfilelist@OUThereare3 commands, DIRECTORY,DEFRAGandSETLOwhichacceptanindirectfileasinput parameter.,ThisisSOachievedbyusingthe@sign.*Anindirectfileisafilecon-VO^tainingalistofvalid filenames(eachlineinsuchafilemustTOcontainexactlyonefile).'Suchindirectfilescanbetheoutput3OfileoftheDFUSearchcommandeg.:O$&DFU8ODFU>&SEARCH% mydisk/CHAR=DIRECTORY/OUTPUT=x.x(O$DFU>&DIRECTORY/COMPRESS%@x.x*:;! )O 3.2The!SMG!output" interfaceJOAsofversionV2.2DFUusesSMG(Screen managementrou-POtines)toperformoutputforan interactiveDFUsession.'ThisNOBchapter describesthelayoutoftheDFUscreen,thespecialJOcommandsusedonlyintheSMG interfaceandotheritems1OwithrespecttotheSMG interface.<)&O3.1BEnabling/DisablingSMGIOUDFU automaticallyselectsSMGoutputifyourunanin-JO teractiveDFUsessiononaterminalor workstationwhichJOsupportsSMG.Inabatchjoboranon-DECterminalDFUPO^willusenormallineorientedoutput.)Youcan explicitlydis-COableSMGbydefiningthelogical DFU$NOSMGtoanyOvalue.= BO3.2B Automatic switchingbetweenSMGandLinemodeLOUYoumayprefertoperform interactiveDFUsessionsinSMGJOmode,andsingleDFUcommandsinnormallinemode.(ThisKOcanbedonebyusingthecommand procedurelistedbelow:AOo$!% Procedure%to%switch&beteen%SMG%and&line%modeO$&DFU%=&"$DFU"OLA=_~ DFU024.BCKj[[DFU024.DOC]DFU024.DECW$BOOK;2j5 |:$&if&p1&.eqs.&""OG$&then O $!Interactive&seesion-O$&def/user& sys$input% sys$commandO$&dfuOg$&else-O$!Single%command&so&disable%SMG#O$&def/user& dfu$nosmg%x@O?$&dfu%'p1'&'p2'%'p3'%'p4'&'p5'%'p6'%'p7'&'p8'O$&endifO$&exitM??B> "+O3.3BLayoutoftheSMGscreenBOUAfterstartingDFUthescreenlooksasfollows:\O+-----------------------<&DFU%V2.4& (Freeware%)&>----------------------------+ O"| d "|@Oi|Disk&and%File& Utilities%for%OpenVMS%DFU%V2.4 d i|O|Freeware%version d |@O| Copyright%%1996&Digital% Equipment& Corporation d | OA| d A|#O|DFU% functions&are%: d | O| d |-O| DEFRAGMENT&:% Defragment%files d |OOa|DELETE:%Delete&files&by&File-ID;&delete% directory%(trees) d a|2O| DIRECTORYK:% Manipulate% directories d |;O|REPORT:%Generate%a%complete%disk&report d |*O9|SEARCH:%Fast%file&search d 9|O|SET%:%Modify&file% attributes d |1O|UNDELETEp:%Recover%deleted&files d |;O|VERIFY:%Check%and&repair%disk& structure d | OY| d Y| O| d |WOM+----------------------------------Statistics-------------------------------+ O1| d 1| Oy| d y|WOM+---------------------------------------------------------------------------+t DFU>a?77OThisscreenisdividedinto3 sections:X@. `mNmMainScreen:)thetoppartofthescreenisusedfortheAoutputfromDFU commands.*Also broadcastmessages&aresendtothiswindow. `J Statistics:,thelowerpartcontains statisticsfromtheBcurrentcommand.*DuringmostofthecommandsthisLOscreenwillcontainaprogress indicatorandastatusfor thecurrentcommand. `'K'DFUprompt:(thebottomlineisusedastheinputcom-mandline.*ABnu(O3.4BSpecialScreencommandsMOUInSMGmodethe followingkeysperformspecial functions:aC7 `mDmDO:invokesa subprocess(sameastheSPAWNcom-mand) `EFEHELPorPF2:+invokesaspecialSMGwindowforthehelpcommand. `)CTRL/W:redrawsthescreen `APF4:1createsascreendumpintothefileDFU_ SCREEN.TXT `t>tPREVSCREEN:Scrollsbacktheoutputscreen. `@NEXTSCREEN:Scrollsforwardtheoutputscreen `s=sSELECT:Togglesbetween80and132columns.D]POAlthoughonlysome20linesarevisibleintheoutput(main)IOscreenDFUinfact remembers500outputlines.+YoucanLO5scrollbackandforwardthroughtheselineswiththeNEXTEOandPREVSCREENkeys.,Atthe beginningofeachnew3ODFUcommandtheselinesarecleared.*EFOOna workstationwithDecWindows/MotifyoucanchangeKOtheDecTermsizetobemorethanthestandard24lines.JO5DFU'sSMGscreenwill automaticallyadjusttothescreen%OsizeofsuchaDecTerm.UF! )O3.5BSideeffectsLOUThereareafewsideeffectswhenusingSMGmode.&CTRL/CIOandCTRL/Yarecatchedbutnotechoed.-Alsoallbroad-OOcastmessagesaretrappedandwillbe displayedinthemainJO^screenattheendofthecurrentDFUcommand.( SometimesJOthismayslightlydisruptthemainscreen,whichcanbe+OrepairedwiththeCTRL/Wkey.G! NLOFurther,duringthe executionofaDFUcommandthecursorLOwill disappear.*Afterthecommandfinishesthecursorwill*O5reappearattheDFU>prompt. H[O 4.2DFU!basicsRONote:*thischapterismeantforfirsttimeusersofDFU.IfIOyoualreadyusedDFUbeforeyoumayprobablyskipthisOBchapter.I NLOThischaptergivesabriefoverviewofthecommandswhichNOcanbeusedwithDFU,andhowtheycanprovidethesystem5O5managerwiththe necessary information.)J JOOneofmostcommonactionsbyasystemmanageristry-UOingtolocatespecificfileseg.-fileswithacertainfilesize.JO5AlthoughalotcanbedonewiththeVMS DIRECTORYcom-ROmandthiscanbeatime consumingprocess, especiallyiftheFOcompletediskmuchbescanned.(TheSEARCHcommandofSO>DFUisexactlymeantforthis situation.'ItgivesaveryquickVOlistofspecificfiles,withtheirsize,andifneededthenumberGOoffile fragments.'SomeusefullSEARCHcommandsare:HOtDFU>&SEARCH%disk/SIZE=MINIMUM=1000&(files%>&1000%blocks)EODFU>&SEARCH%disk/IDENT=SYSTEM%(files%owned%by%SYSTEM)YODFU>&SEARCH%disk/FRAGMENT=MINIMUM=10%(files&with%at%least%10% fragments)KOLDFU>&SEARCH%disk/CHAR=MARKED&(all%files%marked&for%delete)]ODFU>&SEARCH%disk/CREATED=SINCE=YESTERDAY&(all%files%created%since% YESTERDAY)KWKOOfcoursethese qualifierscanbecombinedtonarrowtheFOsearch.(AstheSEARCHcommandscans INDEXF.SYS,notHO5 directories,theoutput generatedbySEARCHmaylookaTObitrandom(butitisjusttheorderinwhichthefileheadersMOareinthe INDEXF.SYSfile).)TosmooththeoutputusetheO>/SORT qualifier.L! MOAnother importantactionforasystemmanageristogatherSOsomeoveralldisk information,suchasnumberoffiles,freeJO5space statisticsand fragmentation information.&TheREPORTLOcommandwillgeneratesuchadiskreport.)Togetindivid-OOualdiskspaceusage informationthe/USAGE qualifiercanbeTO>used.'ThiswillworkevenifthereisnodiskquotaenabledonOthedisk.DMJOAtregular intervalsasystemmanagermayneedtocheckAOadiskwith ANALYZE/DISK.TheDFUVERIFYcommandNO5providesmoreorlessthesame functionalitybutmanytimesHOfaster.+The/FIX qualifierprovidessomeREPAIRoptionsBOwhich(unlikeANALYZE/DISK/REPAIR)doNOTlocktheNO>disk,andthusdonot interferewithotherdisk operations.KOHowever,thediskcanberebuild completelybyusingtheO/REBUILD qualifier.N iSO Occasionalyauserwilldeletethewrongfile,leavingthesys-MOtemmanageroroperatorwiththetedioustaskof restoringGO5thefilefromabackupset.(TheUNDELETEcommandmayTObeabletorecoverthefileifithasnotyetbeen overwrittenJOwithanewone.,MuchcarehasbeentakentomakethisLO>commandassafeas possible; thereforenodisk corruptionsJOwillbetheresultofan UNDELETE.IfDFU encountersaNOproblemwithadeletedfileitwillrefusetoUNDELETEit.Oa\FOAnothertypeoftypicalsystemmanagerproblemsdeals?Owith directories.-TheDFUcommand DIRECTORYcanDO5handlesuch problems.* DIRECTORYcangeneratereportsFOaboutempty directories(/EMPTY qualifier)ordirecto-NOrieswhichcontainsfileswithacertainnumberofversionsJO> (/VERSION=n qualifier).)Also, directoriesmaybecomein-HOternally fragmentedwhichdegrades performance.)ThiscanMObequicklysolvedbyusingDFU's directory compressing(the OH /COMPRESS qualifier).hP >LOAsecondproblemwith directoriesisindeletingadirec-KOtorywithmanyfiles.,Onlarge directoriesthismaytake/O5severalhoursusingaDCLDELETE @* 5. @*5command.,ThisAOproblemissolvedbyusingDFU'sDELETE/DIRECTORYJOcommandwhichcandeletelarge directoriessome10timesGO>fasterthanthenormalDELETEcommanddoes.*Also,us-JOingDELETE/DIR/TREEwilldeleteacomplete directorytree#Owithjustonecommand.QJOThelast2commandsdealwith individualfiles.,SETal-JOlowssettingsofsomespecialfile attributes..SinceVMSJO5V6.0this functionalityisalsoprovidedbytheDCLSETAOFILE/ATTRIBUTEcommand,butDFU'sSETofferssomeJOmoreoptions.(TheDEFRAGcommandisan interfacetotheGO>MOVEFILEfunctionofferedbyVMS5.5andhigher.)ThisDOallowsasimpledefragmentationof individualfiles.RnOOThenextchaptersgivesadetailed descriptionofeachindi-OvidualDFUcommand.*S.TO 5.2DEFRAGCOThischapter describestheDEFRAGcommandwiththe/Orelated parametersand qualifiers.XXU nO5.1B DescriptionHOUTheDEFRAGcommandcanbeusedto defragmentasingleSOfileoragroupoffiles.)Youcanalsoenteranindirectcom-UOmandfile containingalistoffiles.(ThisfeatureallowsyoutoOO^createanoutputfilewithSEARCHandusethatasaninputOtoDEFRAG.|V RFODEFRAGmakesuseofthefile-primitiveMOVEFILEfunc-LOtion.* Thereforefileswhichareopen,orwhicharemarkedFO5NOMOVEwillnotbe DEFRAGmented.*StillyoushouldbeGOcautiousaboutusingDEFRAG.Youshouldnotmakethis3Ofunction availableforgeneralusage.*WXn_O5.2BErrormessagesAOUThemostcommonerrorsreturnedbyDEFRAGare:Y `m8m ACCONFLICT:Fileisopenbyanotheruser `A DEVICEFULL:Devicehasnotenough contiguousfree,Espacetomovetheentirefile `7 FILNOTACC:FilehasbeensettoNOMOVE. `DCD FILENUMCHK:Youtriedtomoveareservedfile(eg INDEXF.SYS). `CRMSErrors:-Almostalwayscausedbyaninvalidor$twrongfile specifcation.*Z   :[ODEFRAG*\o]EEO Defragmentafileoralistoffilesonthedisk.`^6OFormat&OsDEFRAGMfile1,file2,@file...k_AO ParametersOsfile1,file2,@file...POThefile(s)tobe defragmented.)YoucanalsouseanindirectRO$commandfile(@file)whichcontainsalistoffilestobede-LO| fragmented.)Thismaybeanoutputfile generatedwiththe!O SEARCH/OUTPUTcommand.` O QualifiersOs/BESTTRYNONormallyDEFRAGtriestocreatea contiguousfile.)IfthereOO$isnotenough contiguousfreespacethe operationwillfail.LO|Withthe/BESTTRY qualifierDEFRAGtriestomovethefileGOwiththecontiguous-best-trymethod.)Thismeansamax-JO-imumof3 fragments.-Youshouldonlyusethis qualifier@OwhenanormalDEFRAGfails.,IfaDEFRAG/BESTTRYWOalsofailsthisisan indicationthatthedisksfreespaceistooBO7 fragmented.-RunaREPORTcommandtoseewhattheMOlargest contiguousfreespaceis,andcheckthefreespaceO fragmentationindex.%aO/DEVICELO(Thedeviceonwhichthefilesreside.,ThedevicenameisROaddedtothefilename.+IfyougenerateafilelistwiththeGODFUSEARCHcommandyoudon'tneedthis qualifierany-LO2more.*HoweveryoumayhavealistoffilesproducedfromPOanothersourceandthusneedtoappendadevicenametoit.OExample:;hDFU>%SEARCH&#mydisk/...../frag=min=50/output=x.xDFU>%DEFRAG&@x.xb#O/LBN=logical-block-numberTO(Forcesasinglefiletobemovedtothe specifiedlogicalblockOOnumber.*Donotusethis qualifierwhen processingalistofOfiles.cO /STATISTICSNO(This qualifierdisplaysthe performance statistics:(CPUtime,/OElapsedTime,I/Oand PageFaults.dO /WRITECHECKMO(Performa writecheckonthe resultantfile.+ThedefaultisAO/NOWRITECHECK.Notethata writecheckdoublesthe,OnumberofinvolveddiskI/O's.*e fO 6.2DELETECOThischapter describestheDELETEcommandwiththe/Orelated parametersand qualifiers... !gnZO6.1B Introduction?OUTheDELETEcommandisdesignedfor2 purposes:h! \QOm1.JDeleteafilebyfileid(withthe/FILE qualifier).,ThisO functionalityisneededtobeabletodeletefileswhichnoLlongerhaveaparent directory.)Thisway'lost'filesandIw (sometimes)filesmarkedfordeletecanberemovedfromadisk.NOO2.JAfastmethodtodeleteacomplete directoryorevenaD directorytree(withthe /DIRECTORYand/TREEqual-Oifier).)Firstallentriesofa directoryaredeletedwithoutMYremovingthe directoryentry;thissavesalotofunnec-Lessary directoryupdates.*Finallythe directoryfileitselfK isdeleted,unlessthenew/KEEP qualifierisused.*ThisGbwaya directoryiscleanedupmanytimesfasterthan withtheDCLDELETE >* c. s*'command.(Onlargedirecto-KriesDFUmaybeeven10ormoretimesfasterthanDCL.JlTodeleteacomplete directorytreeusethe/TREEqual-9ifier.)TheDCLcommandDELETE [.SUBDIR...] * . * ; *8willKalmostalwaysfailtodeletethe intermediate subdirectoryMvfilesforcingyoutoissuethiscommandseveraltimes.'TheBDFUDELETEcommandissmartenoughtodeletetheO'filesandthe subdirectoryfilesintheproperorder;there-Kforeonlyonecommandis sufficienttodeleteacomplete directorytree.i!IWThenew/KEEP qualifierallowsyoutopreservethedi-Jrectorytree.*Thecontentsaredeletedbutthe directory#file(s)remainsintact.*j<<! ":kODELETE*lTm**ODeletesfilesor directories.lnBOFormat2OsDELETEN device[:]&ordirectory-file(s)o=}O ParametersOsdeviceGOThedeviceonwhichtoperformtheDELETE/FILE=file-idO$command.cp K9Odirectory-file(s)QO(Thefilespecificationofthe directoryonwhichtoperformthe@ODELETE/DIRECTORYcommand.*Wildcardfile specifica-MOtionsmaybeused.)DFUwill automaticallyadd.DIRtothe@O2filespecificationifafiletypeisnot provided.q yO QualifiersOs /DIRECTORYMOSpecifythe directoryfilewhichmustbedeleted.* WildcardsJO$maybeusedbutmustbeusedvery carefully.+MakesureJO|thatthe directorydoesnotcontain non-empty subdirecto-POries.*Fileswithinsucha subdirectorywillbecomelostafterBO-theDELETE/DIRECTORYcommand(butcanbe recoveredGOwithANALYZE/DISK/REPAIR).Notethatthe directoryfile4Oitselfwillalsobedeleted.'Example:Oc$&DIR%EXAMPLE%O Directory%MYDISK:[RUBBISH]O6 EXAMPLE.DIR;1O$&DFU-ODFU>&DELETE/DIRECTORY% EXAMPLE.DIREOP%DFU-I-CLEANUP,%Deleting% MYDISK:[RUBBISH]EXAMPLE.DIR;1...6O%DFU-S-DELETED,%File% DBGINI.COM;3%deleted4O%DFU-S-DELETED,%File% ICON.COM;1&deleted6O(%DFU-S-DELETED,%File% I_FOOL.COM;1%deleted9Op%DFU-S-DELETED,%File%LOGICALS.COM;51%deleted6O%DFU-S-DELETED,%File% LOGIN.COM;79%deleted6O%DFU-S-DELETED,%File% LOGOUT.COM;4%deleted=OH%DFU-S-DELETED,%File%NOTE_COMPRESS.COM;3&deleted6O%DFU-S-DELETED,%File% SHOWCL.COM;3%deleted8O%DFU-S-DELETED,%File%SYMBOLS.COM;89%deleted8O %DFU-S-DELETED,%File%TPUBUILD.COM;5%deleted-Og  %DFU-S-TOTAL,&11&file(s)%deleted7O %DFU-S-DELETED,%File% EXAMPLE.DIR;1&deleted]rL :3O /FILE=file-idLO(Specifyacompletefile-id (num,seq,rvn)ofthefilewhichUOmustbedeleted.)This qualifierallowsthedeletionoflostfiles5Oorfilesmarkedfordelete.'Example:O^$&DFUODFU>&VERIFY%MYDISK::O%DFU-S-CHKHOME,%Home%block%info&verified&OK1OW%DFU-I-IFSCAN,%Scanning% INDEXF.SYS...XO%DFU-E-INVBAKFID,%file& (86,17915,1)%0004CF04$BFS.;1%has&invalid%backlinkZO%DFU-W-DELETED,%file% (537,2878,1)%APPL_UTRYIT_BOOK.TMP;1%marked%for&delete t/. tw. t.0O(DFU>&DELETE%MYDISK/FILE=(86,17915,1)9Op%DFU-S-DELETED,%File%0004CF04$BFS.;1%deleted0ODFU>&DELETE%MYDISK/FILE=(537,2878,1)@O!%DFU-S-DELETED,%File%APPL_UTRYIT_BOOK.TMP;1&deleted*st! O/KEEPRO(Preservethe directorytree;onlydeletethe contents.'/KEEPisKOonlyvalidwiththe /DIRECTORY qualifier.'/KEEPworksfor+O DELETE/DIRandDELETE/DIR/TREE.umO/NOLOGKO(Donotlog succesfulldeletesto SYS$OUTPUT./LOGistheOdefault.vO /NOREMOVEGO(Canonlybeusedwith/FILE.Default DELETE/FILEwillTOtrytoremovethefilefromtheparent directory.(Ifthefile'sQObacklinknolongerpointstoavalid directorythiswillgen-GO2erateanerror.+The /NOREMOVE qualifier overrulesthisTOAnindirectcommandfile containingalistoffilescanbeusedIOasa parameterto /COMPRESSor/DUMP.Suchalistcan>O5be generatedwiththeSEARCHcommand.'Example:;ODFU>&SEARCH%#disk/FILE=*.DIR/SIZE=MIN=50/OUT=x.x(ODFU>&DIRECTORY/COMPRESS%@x.x3  HOCaution:+Careshouldbetakenwhen compressingcriticalQOsystem directories.(Tobesafeyoushouldfirstusethe/TESTKO5 qualifierbefore compressingthe directory.)AnotherproblemMOmaybecausedbya systemcrashjustwhenDFUis rewritingMOthenew compressed directory (althoughthechancethatthisLO>happensisverysmall).(Whenthishappensyoucanrecover?Othefilesby executingthe following procedure:uKDOm1.JDoa$SET FILE/NODIRofthe corrupted directory>O2.JDeletethe directoryandcreateanewoneHOl3.JDoa$ANALYZE/DISK/REPAIR;thiswillmoveallthe%lostfilesto [SYSLOST].HOD4.JMovethefilesfrom [SYSLOST]tothenewlycreated directory.*s  $#%  )5O7.2B Discussionof directory compressionOOUVersionV2.2ofDFU introducedamajorchangeinthedirec-JOtory compressionprocess(issuedbytheDIRECTORY/COMPRESSFO command).* Previouslyversionsalways performedamaxi-KO^mum compression,andthen truncatedthe resultantdirec-ROtory.(Thismaybeusefullonadormant directory,butonanEOactive directorythismethod introducednew problems: h `mKmWhennewfileswereaddedtothe directoryitmustveryOquicklybe extended.'Notonlyisthisaslow operation,butIona fragmenteddiskthiscanleadtoDIRALLOCerrors. `IActive directorieswherefilesareinsertedinarandomJ alphabeticalorderveryquicklyleadto expansionofthe&Ojust compressed directory. MOThefirstproblemisnowsolvedbyNOTdoingan automaticAO TRUNCATIONofthe directory.*The /TRUNCATEquali-QO5fierhasbeenaddedtoallow truncationontheusersrequest.GOAlso/TRUNCATE=blocksizeispossibletoperformpartialKO truncation;DFUwillnottruncatebelowthe blocksizeis-JO>suedin /TRUNCATE.(Theactual blocksizewillberoundedROuptoamultipleofthedisksclustersize.))Thesecondprob-JOlemissolvedbythenew /FILL_FACTOR qualifier.)HereaSOHusercandirectDFUtofilleach directoryblockuptoacer-MOtain percentage(between50and100).'Not specifying/FILL_COFACTORisthesameasdoing/FILL_FACTOR=100(fullIOR compression).+Notehoweverthatthe directory's allocatedUOsizemustbelargeenoughtoallowalowerfillfactor.(IfthatKOisnotpossibleDFUwillissuea DFU-E-EXTERRerror,andSO[youmustuseahigherfillfactor.'So,whatstrategyshouldbe0Ousedwhen comnpressing directories?COm1.JInactive directories:&useDIR/COMPRESS/TRUNCATE.CO2.JNotveryactive diredctories:.use DIR/COMPRESSE(/TRUNCATE=n).OO3.JActive directories,filesaddedattheend(suchasMAIL, directories):'use DIR/COMPRESSJO4.JActive directories,filesaddedinrandom alphabetical3order:'useDIR/COMPRESS/FILL_FACTOR=n*jj%$&`2 w6!O7.3BOutput formattingMOUAnew qualifier/FORMATcanbeusedwithDIRECTORY/VERSION.KOThisallowsthebuildupofacommand proceduredirectlyFOfromtheoutput generatedbythe DIR/VERSIONcommand.7O^/FORMAThasthe following restrictions:: EOm1.J/FORMATisonlyvalidwiththe/VERSIONandthe/OUTPUT qualifier.POE2.JTheformatstringusedmustcontainthe!AS directive(inL uppercase).*Thefilefoundwillbe substitutedatthe!ASlocationF !bOExample:PODFU>&2DIR/VERSION=4/OUTP=PURGE.COM/FORMAT="$PURGE/KEEP=3&!AS"%mydisk*&%'=O DIRECTORY*S))OPerforms directory functions.oEOFormat5Os DIRECTORYN device[:]&ordirectory-file(s) =O ParametersOsdevicePOThedeviceonwhichtoperformoneofthediskwide directoryO$ functions.t KJOdirectory-files(s)SO(Thefile specificationofthe directoryonwhichtoperformtheEO/CREATE, /COMPRESSor/DUMP function.(WildcardfileMOspecificationsmaybeused.(DFUwill automaticallyadd.DIRIO2tothefilespecificationifafiletypeisnot provided.FO QualifiersOs/ALIASOOThe/ALIAS qualifierdirectsDFUtoscanall directoriesforOO$aliasfileentries.(Onlyaliasfilesin DIFFERENT directoriesNO|willbefound(thisisthemostcommon situation).(NormallyROonlythesystemdiskshouldcontainaliasfiles.(This qualifier;O-canbecombinedwith /VERSION=nand/EMPTY. O /ALLOCATE=nJO(Usedin combinationwith/CREATE.Createsthenewdirec-;Otorywithan allocatedsizeof'n'blocks./f~ DFU024.BCKj[[DFU024.DOC]DFU024.DECW$BOOK;2j5 SV|xq J]O /COMPRESSHO(Performsthe directory compressionunless/TESTisalsoPO specified.+TheoutputwillshowtheresultsintermsoffileOsizes.'Example:+O^DFU>&DIR/COMP&OWN$:[000000]MAIL_O %DFU-S-DONE,%OWN$:[000000]MAIL.DIR;1:&31&files;%was%:%4/9,&now%:&3/3%blocksO1DFU>O/CREATEQO(Createanew,empty directory.)The allocatedsizewillbe14Oclusterunless /ALLOCATEis specified.UO/DEVICELO(Thedeviceonwhichthefilesreside.,ThedevicenameisROaddedtothefilename.+IfyougenerateafilelistwiththeBODFUSEARCHcommandyoudon'tneedthis qualifier.NO2HoweveryoumayhavealistoffilesproducedfromanotherMOsourceandthusneedtoappendadevicenametoit.+ThisJO qualifiercanonlybeusedin combinationwith /COMPRESSO<or/DUMP. f K O/DUMPMO(Produceablockleveldumpofa directory.)/DUMPwillin-QOterpretthe directoryentriesfoundineachblock.'A directoryLOentrycontainsasize,version-limit,typeandnamefield.QO2Nextthe directoryentrycontainsalistofversionsandfileNOID'sforthisentry.*/DUMPwillproducearatherlowlevel4Ooutputofthis information.'Example:OhDFU>&DIR/DUMP&C.DIR'ODUMP&of& directory%block%1KOSize:%22,%Version%limit:%3,%Type:%0,% Name(10):& CHKDSK.EXE-aVersion:%3,%FID%:% (1027,1456,0)NOSize:%26,%Version%limit:%3,%Type:%0,% Name(13):& CHKDSK.README.Version:%2,%FID%:%(33892,1171,0).9Version:%3,%FID%:%(1256,11234,0)KOSize:%22,%Version%limit:%3,%Type:%0,% Name(10):& CHKDSK.SAV-Version:%2,%FID%:% (13947,100,0)LOSize:%24,%Version%limit:%3,%Type:%0,% Name(11):& CHKDSK.SAVE.YVersion:%1,%FID%:%(12531,2114,0)OOSize:%26,%Version%limit:%3,%Type:%0,% Name(14):&CHKDSK_LNK.COM,Version:%2,%FID%:% (12314,72,0)EO1Size:%18,%Version%limit:%3,%Type:%0,%Name(5):%C_D.C,yVersion:%3,%FID%:% (32650,32,0)GOSize:%20,%Version%limit:%3,%Type:%0,%Name(7):%C_D.EXE+ Version:%9,%FID%:% (2675,64,0)GOPSize:%20,%Version%limit:%3,%Type:%0,%Name(7):%C_D.OBJ,Version:%4,%FID%:% (9835,117,0)GOSize:%20,%Version%limit:%3,%Type:%0,%Name(7):%C_D_2.C-( Version:%15,%FID&:% (12428,84,0)IOp Size:%22,%Version%limit:%3,%Type:%0,%Name(9):% C_D_2.OBJ, Version:%9,%FID%:% (8439,119,0)IO Size:%22,%Version%limit:%3,%Type:%0,%Name(9):% C_D_3.CLD,H Version:%3,%FID%:% (9777,178,0)IO Size:%22,%Version%limit:%3,%Type:%0,%Name(9):% C_D_3.OBJ, Version:%2,%FID%:% (9737,161,0)GO Size:%20,%Version%limit:%3,%Type:%0,%Name(7):%C_D_4.C.h Version:%3,%FID%:%(10594,1580,0)IO Size:%22,%Version%limit:%3,%Type:%0,%Name(9):% C_D_4.OBJ- Version:%2,%FID%:% (10177,109,0)'Oa DUMP&of& directory%block%2EO Size:%18,%Version%limit:%3,%Type:%0,%Name(5):%DFU.C. Version:%169,&FID%:& (31123,52,0) tZ . t . t .IO2 %DFU-I-TOTAL,&%OWN$:[SOURCES.FORTRAN.DFUSRC]C.DIR;1:%42%files*O/EMPTYKO(The/EMPTY qualifierwillproducealistofemptydirec-HOtories..This qualifiercanbecombinedwith/ALIASandO /VERSION=n.]3O/FILL_FACTOR=nPO( Specifies,in percentage,thefillingof directoryblocksdur-GOinga /COMPRESS operation.+FillfactormaybebetweenMO50and100.*Omittingthis qualifieristhesameas/FILL_AO2 FACTOR=100(maximum compression).,Ifthe directoryLOhasnotenough allocatedspacealowfillfactormayre-OOsultinfailureoftheCompress operation.*DFUwillissueaHO< DFU-E-EXTERRerror,andthe directoryfilewillnotbeO modified.w KMO/FORMAT=format-stringMO(Createanoutputfileinaformat describedbytheformatOOstring.)Thestringmustcontainthe!AS directive(thismustQObe uppercase).(Atthe!ASlocationthe resultantfilenamewillAO2befilledin.'The/OUTPUT qualifieris required.O/OUTPUT=filenameRO(This qualifier redirectstheoutputtoafile.*Theoutputwill#Oalsogoto SYS$OUTPUT.O /STATISTICSNO(This qualifierdisplaysthe performance statistics:(CPUtime,/OElapsedTime,I/Oand PageFaults.* O/TESTLO(The/TESTcanonlybeusedin conjunctionwith /COMPRESS.KOThe qualifierwillshowtheresultsofthe /COMPRESSbut4Owillnotcompressthe directoryfile.O/TRUNCATE=blocksizeHO(Duringacompress operationtruncatethe directorybackQOtothe blocksize specified.-If blocksizeisnot specified,theOOfilewillbe truncatedbacktothe end-of-fileblocknumber.KO2 Truncationwillalwaysberoundeduptothenexthighest2Omultipleofthedisksclustersize.<KO /VERSION=nLO(The/VERSION qualifierdirectsDFUtoscanall directoriesWOonthedevicetoproducealistoffileswhichhaveatleast'n'JO versions.+This qualifiercanbecombinedwith/ALIASandO2/EMPTY.*'&(O 8.2REPORTCOThischapter describestheREPORTcommandwiththe/Orelated parametersand qualifiers.('))O8.1B DescriptionGOUTheREPORTcommandfunction generatesareportoftheOOfileandfreespace fragmentationofthedisk.*AlsoagraphKOmaybe generatedbythe/GRAPH qualifier;this visualisesNO^thefreespace distributiononyourdisk.(The/USAGEquali-ROfierwillgeneratea diskspaceusagereport.(Thisis especiallyBOusefullif DISKQUOTAisnotenabledonthedisk.WNOThedefaultreportcontains informationoftheVolume,filesLOandthebitmap.*Thisoutputcanbe suppressedbythenew>O5 /NOVOLUME,NOFILEandNOBITMAP qualifiers.+AlsoIOthe/USAGE qualifiercanbeusedby displayinginforma-LOtionofaspecificUICor Identifiersimplyby specifying0O> /USAGE=or/USAGE=.) (*"O8.2BSyntaxandOutput4OUThesyntaxofthereportcommandis:)ODFU>&REPORT%device/QUALIFIERSq 'MOBelowfollowsanexampleandoutputofthereportcommand:*O*DFU>&REPORT%USER3:/GRAPH/USAGE=O%DFU-I-REPORT,% Reporting%on%USER3:& ($1$DUA102:)F*****&Volume%info&for%USER3:%(from%HOME%block)%*****tDVolume&nameDD:JUSER3tVolume&ownerD:JSYSTEMt Structure&name D:t ClustersizeD:J3tdMaximum%#&filesDd:J367618tFirst%header&VBND:J103tHeader&countD:J51547%(1)t;Free%headersD;:J10951%(2)<*****&File% statistics%(from% INDEXF.SYS)%*****Lt INDEXF.SYS% fragments% /map_in_use%:J21%/%61%(39%&used)p(3)t5Total%filesD5:J40595/t|Files%with% extension%headers:J0$tFiles%marked&for%delete*D:J19%,%size&:%25/63%blockst  Directory&filesD :J1957tTEmpty%filesDT:J177!tFiles%with% allocationD:J40418t Contiguous%filesD:J40326%(4)'t,Total%size%used& /allocatedD,:J2492431%/2533209ttTotal% fragmentsDt:J40770'tAverage% fragments%per&fileD:J1.009K(5)$tFile% fragmentation&index$D:J0.692% (excellent)%(6)&tLAverage%size&per%fragmentDL:J62 tMost% fragmented&file D:K$1$DUA102:[LARGEUSER]A.DAT;1%(&180/630%blocks;%30J fragments)CE *****&Free%space% statistics%(from% BITMAP.SYS)%*****!t Total%blocks&on&diskD :J2940951t Total%free%blocksD :J407742%t  Percentage%free& (rounded)D :J13te Total%free%extentsDe :J260t Largest%free&extent2D :J42912%blocks&at&LBN:%2463597%(7)3t Average%extent%size% (rounded):J1568Gt= Free%space% fragmentation&indexp:J0.191% (excellent)%(6)Qt G%free------------------------------------------------------------------t 100&| |6 95&| 6 |~ 90&| ~ | 85&| j * | 80&| j *  |V 75&| jV * V | 70&| j * Z * | 65&| j * Z * |-60&| j-* Z -* -|u55&| ju* Z u* u|50&|** *&* |45&|** *&**|M40&|M*** M*&**|35&|*** *&***p|30&|*p*&***%**K*&***p|%25&| :%*d%**p*&***%*%*p**K*****%*%|m20&| :m*dm**p*&***%*!m*%*&**K*****%*%|015&|*K*K*&*p*&*% **********%*!*%*&**K*****%*%|010&|*K*K*&*p***% **********%**"*%*&**&******%*%|1E5&|*K*K*&*%*****%**************"E*%*&**&******%*%|M/C-------------------------------------------------------------------tLBN:%0: 2940951DtFree%space% distribution,&each%*%=K2100Kfree&blocksN*****&Disk%Usage%Table%(from% INDEXF.SYS%and% QUOTA.SYS)%*****tIdentifier/UIC3Used/AllocatedpHeaderspQuota& Used/PermStI-------------------------------------------------------------------------t^[SYSTEM]-^ 499554/5056264954510580/2000000t [SSG,MRX]( 42079/463562259 48615/60000t [SSG,TESTJE], 189306/2547424935 259677/300000t6[SSG,LARGEUSER](6 47961/502381648 51886/65000 t~. t. t.i??OThevariousitemshavethe followingmeaning:E! = JOm1.JTheheadercountis calculatedbasedonthesizeofA INDEXF.SYS.Ifmoreheadersareneeded INDEXF.SYS hastobe extended.KO2.JThefreeheadersgivesthenumberoffreeentriesin2 INDEXF.SYSbeforeithastoextend.COv3.JThe INDEXF.SYSnumberof fragmentsandmapwordsHinusearevery importantfiguresto determineiftheF' INDEXF.SYSfilecanbe extended.'The theoreticalmax-Dimumnumberofmapwordsis155.*ThisvaluemaybeGlessifthereareACL'son INDEXF.SYS.Each fragment,K0and thereforeeach retrievalpointermustbeinthemap-Hwordarea.-Asthesizeofa retrievalpointerdependsPonthephysicalsizeofadisk,itisnoteasytosayhow@:many fragments INDEXF.SYScanstoreinthemap-Kwordsarea.(IfthemapwordareaisfulltheINDEXFfileJcannolongerextend,andcreatingnewfilesmayresult,DinaSYSTEM-W-HEADERFULLerror.KO4.JFileswhichhaveexactly1 retrievalpointerarecon-Fsideredtobe contiguous.-Thisdoesn'tmeanthatthe:t CONTIGUOUSbitissetinthefileheader.OO5.JTheaverage fragmentsperfilegivesome indicationabout*Lthetotalfilefragmentation.KO6.JThefileandfreespace fragmentationindex classifies$$ yourdiskasfollows:~ hYh0-1:' Excellent Y1-2:'Good fYf2-3:'Fair Y3-4:'Poor eYe>4:&Bad RKWIfyourindexisgreaterthan3youshouldconsiderde-I fragmentingthediskusingDigitalsDFO software,orby4 performinganImageBACKUP/Restore.QO7.JThelargestfreeextentisausefullfigurefor defragmen-Htation purposes.*Youcannot defragmentafilewhenits/9sizeisgreaterthanthisvalue.T*LOThedisksfreespace distributionasabargraph.,OntheJO horizontalaxistheLogicalBlockNumber(LBN)isshown,BO5runningfrom0tothemaximumblocknumber.-Each !@*GO representsacertainnumberof contiguousfreeblocks.QOIfyouusethe/USAGE qualifierausagetablewillbeadded.KOPer Identifier/UICtheblocksused/allocated,andtheLO5numberoffileheadersareshown.*If DiskquotaisenabledIOathirdcolumnwillbeincludedwhichshowstheblocksCOused/permittedallowingto QUOTA.SYS.Normallyquota2O>shouldsatisfythe followingrule:DtQuota%used%=&blocks% allocated%+%#&of&file%headers*  *)+:OREPORT*sIIOCreateafileandfreespacereportofadiskdevice.U+OFormatOsREPORTM device[:]=O ParametersOs device[:]QODevicetobe reported.(Youmayalsospecifyalogicaldevice-O$name.HO QualifiersOs/APPEND=filenamePOThis qualifier redirectstheoutputtobeappendedtoanal-XO$readyexistingfile.)IftheoutputfiledoesnotexistsitwillbeHO|created.'Youcanuse/APPENDor/OUTPUTbutnotboth. O/GRAPHMO(This qualifier generatesagraphtablewhich visualizesthePOfreespace distributiononthedisk.'/NOGRAPHisthedefault. vO /NOBITMAPKO(The /NOBITMAP qualifier suppressesthe"Freespacestatis-Otics"output. A`O/NOFILEOO(The/NOFILE qualifier suppressedthe"File Statistics"output.hO /NOVOLUMEDO(The /NOVOLUME qualifier suppressesthe"Volumeinfo"Ooutput.O/OUTPUT=filenameRO(This qualifier redirectstheoutputtoafile.*Theoutputwill#Oalsogoto SYS$OUTPUT.O /STATISTICSNO(This qualifierdisplaysthe performance statistics:(CPUtime,/OElapsedTime,I/Oand PageFaults.' &O /USAGE(=uicor identifier)MO(The/USAGE qualifierwillgeneratea diskspaceusagereportPObasedonIdentifiers/UIC.If diskquotaisenabledonthediskJOtheblocksused/permittedallowingto QUOTA.SYSwillalsoNO2beshown.(/USAGEisveryusefullwhen diskquotaisnoten-ROabledonthedisk.*Whenauicor identifieris specifiedonlyPOthe informationforthisuicor identifierwillbe displayed.*+*,O 9.2SEARCHCOThischapter describestheSEARCHcommandwiththe/Orelated parametersand qualifiers.!!,+- O9.1B IntroductionNOUThesearchfunctionallowsveryquick disk-widesearchesforUOspecificfiles.(Youcanusealmostanypossiblefile attributeasOasearch qualifier.%**-,.{"O9.2BSyntaxandOutput0OUThecommandsyntaxforSEARCHis:)ODFU>&SEARCH%device/qualifiers :[OOTheoutputis displayedonyour terminal.)YoucanalsosortOOtheoutputwiththe/SORT qualifier.(Theoutputisshownin O52or3columnseg:0ODFU>&SEARCH%MYDISK/FILE=X.X/FRAGMENT t. tI.'O$1$DUA102:[USER.COMMAND]X.X;1 o1/3  1/1 t. t!.! WQOThefirstcolumnshowsthefullfilename.*Asofthisver-NOsionofDFUthedevicenameisincludedinthefilename.LO5Thesecondcolumnsshowsthefilesizeasactual/allocatedQOsize.'The3rdcolumnisoptionalandwillonlybeshownwhenJOthe /FRAGMENT qualifierisused.)Itshowsthenumberof6O> fileheaders/numberoffile fragments..-/ w&O9.3BVolumeSet processingEOUSEARCHchecksifthedeviceto-be-searchedismemberROofavolumeset.*Ifso,thecompletevolumesetwillbepro-KOcessed,startingwithRelativeVolumeNumber1uptothePO^lastmemberinset.(Youcanoverridethis behaviourwiththeO /NOVOLSET qualifier.*/.0Pw&!O9.4BOutput formattingHOUAnew qualifier/FORMATcanbeusedwithSEARCH.ThisKOallowsthebuildupofacommand proceduredirectlyfromDOtheoutput generatedbytheSEARCHcommand.(/FORMAT.O^hasthe following restrictions: hVKOm1.J/FORMATisonlyvalidwiththe/OUTPUT qualifier,andHcannotbeusedtogetherwiththe/FULLorthe/SORT qualifiers.PO2.JTheformatstringusedmustcontainthe!AS directive(inL uppercase).*Thefilefoundwillbe substitutedatthe!ASOlocationl !cOExample:QODFU>&(SEARCH/OUTP=DEL.COM/FORMAT="$DELETE/CONF%!AS"/FILE=*.LOG&mydisk*f0/1 [/O9.5BUICand identifier processingGOUThisversion introducesanimprovedhandlingofUIC's.FOPreviousversionsofDFUonlyacceptedanumericUICIOinthe/OWNER qaulifieroran identifierinthe/IDENTPO^ qualifier.+V2.4nowacceptsallvaliduicand identifierfor-BOmats(numericand alphanumeric)inthe/OWNERandOO/IDENT qualifiers.' Technicallythereisnolongeranydiffer-TOhencebetweenthesetwo qualifiers,buttheywillbeleftinfor!O compatibilityreasons.j5j51002:OSEARCH*\22OFastfilesearchthrough INDEXF.SYS.U+OFormatOsSEARCHN device[:] =O ParametersOs device[:]QODevicetobe searched.'Youmayalsospecifyalogicaldevice-O$name. frO DescriptionIOsTheSEARCHcommandisusedforquick disk-widesearchesQOforspecificfiles.,The qualifiersdescribethefile attributesSO$usedasthesearch criteria.'YoucancombinealmostalloftheDO|possible qualifiers,unless otherwise specified.&Eg.:KODFU>&SEARCH%3DISK1/SIZE=MIN=10/OWN=[1,4]/CREATED=SINCE=YESTERDAYOOisavalidcommand.+Notethat qualifierswillbeusedinaNOlogicalANDmanner,thatis,SEARCHwillonlydisplayfilesDOMwhichobeytoall qualifiersandoptions specified.EO QualifiersOs /ALLOCATEDDODefault,"SEARCH will use the actual file size.3TheHO$ /ALLOCATED qualifierforcesSEARCHtousethe allocatedQO| filesize.*This qualifierisonly meaningfullifyoucombineitOwith/SIZE.4 O/APPEND=filenamePO(This qualifier redirectstheoutputtobeappendedtoanal-XOreadyexistingfile.)IftheoutputfiledoesnotexistsitwillbeHOcreated.'Youcanuse/APPENDor/OUTPUTbutnotboth.!O/BACKUP=option(,option)MO(The/BACKUP qualifierisusedtosearchfiles dependingon>Otheirbackupdate.'Thepossibleoptionsare:p `mm/BACKUP=BEFORE=date `/BACKUP=SINCE=date `ll /BACKUP=NONEd:HOTheNONEoptiongivesfileswhichdon'thaveabackupNOdate recorded.Theother2optionscanbeusedtogetfilesMO5whichhaveabackupdatebeforeorafteraspecificdate.EOTheBEFOREandSINCEoptioncanbecombinedinoneOcommand.+ "O/BAKFID=backlink-file-idSO(Youcanusethis qualifiertolookforafilewithaspecificTO backlink.*Onlythefirstpartofthefileidmustbe specified,`Othatis,ifthefileidis(x,y,z)youmustspecify'x'asthefileid.SO2Youcanusethis qualifiertogetfilesfromaspecificdirec-SOtory.'Ifyouuse /BAKFID=0youwillgetfilesnot belongingto2Oa directory(often temporaryfiles). *O /CHARACTERISTIC=(char1,char2...)WO(This qualifierisusedtogetfileswithspecificfile characteris-GOtics.Thecharacteristicscanhavethe followingvalues:} `m(m Directory:' directoryfiles `.Nobackup:'filesmarkednobackup `l6l Contiguous:'filesmarkedas contiguous `1Erase:'erasefilebeforedeletion `k kSpool:'spoolfiles `FBadblock:'fileswhichcontain suspectedbadblock(s) `i3iBadacl:'fileswitha corruptedACL `8Besttry:'filesmarkedcontiguous-best-try `h7hScratch:'filesmarkedasscratchfiles `:Nocharge:'filesnotchargedagainstquota `f7fNomove:'filesmarkedNoMove(VMS5.5+) `?Locked:'fileswiththedeaccesslockbitset `e1eMarked:'filesmarkedfordeletion `= Noshelvable:'fileswhichcannotbeshelved `d2d Isshelved:'fileswhichareshelvedM+#IOTheseveralcharacteristicscanbecombinedinonecom-KOmand.IfyouwantalogicalOR behaviourinsteadoftheGO5defaultAND behaviour,youcanusethespecialoptionOMATCH=OReg:1SEARCH%disk/CHAR=(NOMOVE,DIR,MATCH=OR)* "O/CREATED=option(,option)NO(The/CREATED qualifierisusedtosearchfiles dependingon6Otheircreationdate.'Theoptionsare:{Q `mm/CREATED=BEFORE=date `/CREATED=SINCE=date NTOThese2optionscanbeusedtogetfileswhichhaveacreationNOdatebeforeorafteraspecificdate.'TheBEFOREandSINCE6O5optioncanbecombinedinonecommand.#O/EXCLUDE=(file1,file2...)PO(This qualifierisusedtoexcludefilesfromthesearch.+YouQOcanusewildcard filenames;youcanalsospecifiyalistofOfiles."O/EXPIRED=option(,option)NO(The/EXPIRED qualifierisusedtosearchfiles dependingon8Otheir expirationdate.'Theoptionsare:s `mm/EXPIRED=BEFORE=date `/EXPIRED=SINCE=date `ll /EXPIRED=NONEo EIOTheNONEoptiongivesfileswhichdon'thaveaexpira-TOtiondate recorded.Theother2optionscanbeusedtogetfilesQO5whichhavea expirationdatebeforeorafteraspecificdate.EOTheBEFOREandSINCEoptioncanbecombinedinoneOcommand. O /FID=file-idRO(The/FID qualifierisaspecialfunctionofSEARCH.ItdirectsQOSEARCHtogodirectlytothe specifiedfilewithout processingROtherestoftheIndexfile.( Therefore,youcannotcombinethisNO2 qualifierwithothersearch qualifierssuchas/FILE.NormallySOafile-idconsistsisintheform(x,y,z)wherexisthenum-NOberofthefileheaderwithin INDEXF.SYSyisthesequenceHO<number,andzistheRelativeVolumeNumber.+YouonlyFOneedtospecifiythexvalueinthe/FID qualifier.  O/FILE=(file1,file2...)TO(This qualifierisusedtosearchforfileswithaspecificfilePOname.Youcanusewildcardfilenames;alsoyoucanspecifyaOlistoffiles.w KMO/FORMAT=format-stringMO(Createanoutputfileinaformat describedbytheformatOOstring.)Thestringmustcontainthe!AS directive(thismustQObe uppercase).(Atthe!ASlocationthe resultantfilenamewillAO2befilledin.'The/OUTPUT qualifieris required.`-O#/FRAGMENT(=(MINIMUM=nr,MAXIMUM=nr))JO(This qualifierdisplaysthenumberof fragmentsandfileOOheadersofeachfilefound.,YoucanfurtherlimitthefilesAOfoundbyusingtheMINIMUMandMAXIMUM=options.O2Forexample:ODFU>& disk/FRAG ODFU>&disk/FRAG=min=10*OGDFU>&disk/FRAG=(min=10,max=100)*E! KO/FULLTO(Ifyouusethis qualifier,SEARCHwillgiveafulloutputforTOeachfilefound.'Thisoutputisa look-alikeoftheoutputfromFODIRECTORY/FULL.Youcannotcombinethis qualifierwithO2/SORTor /SUMMARY.! O/HOMEOO(This qualifierdirectssearchtogiveoutputfromthedisk'sMOhomeblock.'SEARCHusesthehomeblockfor calculatingthe=Ofreeandusedfileheaderswithin INDEXF.SYS.U(O/(NO)IDENT=identifieroruicJO(Youcansearchforfilesownedbyaspecific identifierKOoruic..Anyvaliduicor identifierformatmaybeused.BOAnotherwayisthe /OWNER_UIC qualifier;youcan-CO2notcombinethese2 qualifiersinoneSEARCHcom-IOmand.*Issueing/NOIDENTdirectsDFUtosearchforfiles>ONOTownedbythis IDENTIFIER,eg:.DFU>SEARCH'O<sys$sysdevice/NOIDENT=SYSTEM. o#O/LBN=logical-block-numberPO(The/LBN qualifierisaspecialfunctionofSEARCH.Thisal-POlowsyoutofindafilewhichcontainsaspecificLBN.ThisNOmaybeusefullifyouhavebadblocksloggedintheerrorNO2log.(Youcannotcombine/LBNwithsearch qualifierssuchasO/FILE.,O/(NO)OWNER_UIC=uicor identifierTO(This qualifierisusedtogetfilesownedbyaspecificuicorNO identifier.+Anyvaliduicor identifierformatmaybeused.JOYoucannotcombinethis qualifierwith/IDENT. SpecifyingHO2/NOOWNERdirectsDFUtosearchforfilesNOTownedby$OthisUICor identifier.! #O/MODIFIED=option(,option)OO(The /MODIFIED qualifierisusedtosearchfiles dependingon:Otheir modificationdate.'Theoptionsare:}S `mm/MODIFIED=BEFORE=date `/MODIFIED=SINCE=date  NSOThese2optionscanbeusedtogetfileswhichhaveamodifi-OOcationdatebeforeorafteraspecificdate.(TheBEFOREand=O5SINCEoptioncanbecombinedinonecommand.uO /MULTIPLEQO(This qualifiersearchesforfileswhichhavemorethan1fileOheader.O /NOSEARCHMO(M5d~ DFU024.BCKj[[DFU024.DOC]DFU024.DECW$BOOK;2j5 Z|This qualifiercanonlybeusedin combinationwith/HOME.OOItisusedtogetthe Homeblockinfo,without searchingtheOentiredisk.! O /NOVOLSETPO(Thedefault behaviourofSEARCHistoprocessanentirevol-JOumeset.(Youcanoverridethis behaviourwith /NOVOLSET.?OThismaybeusefullwhendoinga/LBNsearch.O /OUTPUT=fileMO(This qualifier redirectstheoutputfromSEARCHtoanout-SOput file.ThisfilecanlaterbeusedasinputtotheDEFRAG,&O DIRECTORYorSETcommand.O/OVER_ALLOCATED=nOO(Searchesforfileswherethe differencebetweentheusedand6O allocatedsizeisatleast'n'blocks.! O/PLACEDKO(Checksforfileswhichhavea placementcontrol retrievalKO pointer.Thisis sometimessetbynon-DECdisk defragmenta-Otion programs.p-O#/SIZE=(minimum=size1,maximum=size2)SO(The/SIZE qualifierisusedtolimitfilesfoundbytheirfileEOsize.Youcaneitheruseminimum=ormaximum=oruseNObothoptions together.*SEARCHwillusetheactualfilesizeNO2for selectingfiles,exceptwhenthe /ALLOCATED qualifierisOused.! O/SORTUO(This qualifierwillsortthefilesfoundbeforebeingoutput.'YouJOcancombinethiswiththe/OUTPUT qualifier(thedefault"Ooutputis SYS$OUTPUT).O /STATISTICSNO(This qualifierdisplaysthe performance statistics:(CPUtime,/OElapsedTime,I/Oand PageFaults.0 KO/SUMMARYVO(This qualifierwilllimittheoutputtothetotalnumberoffilesMOfound,withtheirsize(andoptionalthe fragmentationwhenAO/FRAGisused).,Youcannotcombine/SUMMARYwithO2/FULL.| U=O3/VERSION_NUMBER=(minimum=version1,maximum=version2)GOThe/VERSION_NUMBER qualifierisusedsearchforfilesKOwithinarangeofspecificfileversionnumbers.-LogfilesJO2whichareproducedwiththesamenamemayposeproblemsDOwhentheyreachthemaximumversionnumber(32767).FOUsing/VERSION=MIN=32000isaquickwaytofindsuchO<files.*213O 10.2SETIOThischapter describestheSETcommandwiththerelated&O parametersand qualifiers.h324c 9O10.1C IntroductionMOUTheSETcommandallowsyoutomodifyfile attributeswhichGOcan'tbemodifiedthroughDCL commands.+NotethatyouMOshouldbecarefullaboutusingthis function;youmayeas-LO^ilycorruptfiles.)NOTE:Thismuchwanted functionalityisGOfinally introducedinVMS6.0withanewDCLcommandGO$SETFILE/ATTRIBUTES.StillDFU'sSEThassomeoptionsJOhwhicharenotinSETFILE/ATTRIBUTES(suchassettingaOBACKUPdate).*u,,435! 0O10.2CUICand identifier processingMOUAsofthisversionofDFUthe/OWNERand/IDENT qualifierOOnowacceptsallvaliduicor identifierformats.*SeechapterO9.5fordetails.X#X#5467  OSET*M##OModifyfile attributes.^4OFormat$OsSETNfile1,file2,...,@fileFO ParametersOsfile1,file2,...,@fileOOThefilestobe modified.+The attributestobemodifiedarePO$ specifiedwith qualifiers.( Wildcardsareaallowedinthefile-RO|name.(Anindirectfilecanbeusedbyusingthe@sign.(ThisMOallows processingofafilelistproducedbyaDFUSEARCHO-command. O QualifiersOs/BACKUP_DATE=dateO/NOBACKUP_DATEOO$Controlswhetheranewbackupdateisassignedtothespec-UO|ifiedfiles.(Specifythedate accordingtotherules describedinJOChapter1oftheVMSDCLConceptsManual.(AbsolutedateOO-keywordsareallowed.*Ifyouspecify0asthedate,today'sHOdateisused.(Ifyouspecify/NOBACKUP_DATEtheBackup)Odatefieldwillbecleared.O/BADACLO( /NOBADACLMOSetsorresetsthe'BADACL'flaginthefileheader.,ThisBOenablesdeletionofafilewitha corruptedACL.AgO/BUCKETSIZE=sizeMO(Setsanewvalueforthebucketsizeinthefileheader. {O/CONFIRMO( /NOCONFIRM (default)MOControlswhetherarequestisissuedbeforeeach individualMOSET operationtoconfirmthatthe operationshouldbeper-OO2formedonthatfile.(Whenthesystemissuestheprompt,you9Ocanissueanyofthe following responses:YESNOQUITWTRUEFALSEKCTRL/Z 10ALLNOYoucanuseany combinationofupper-and lowercaselettersJOforword responses.*Word responsescanbe abbreviatedtoOO3oneormoreletters(forexample,T,TR,orTRUforTRUE).HO AffirmativeanswersareYES,TRUE,and1.*Negativean-DOswersareNO,FALSE,0,and.+QUITorCTRL/ZLO= indicatesthatyouwanttostop processingthecommandatJOthatpoint.(WhenyourespondwithALL,thecommandcon-OOtinuestoprocess,butnofurtherpromptsaregiven.*IfyouUOGtypearesponseotherthanoneofthoseinthelist,thepromptOwillbe reissued. O/CONTIGUOUS_BEST_TRY O(/NOCONTIGUOUS_BEST_TRYJOSetsorresetsthe'CONTIGUOUS_BEST_TRY'bitinthefileOheader. ! O/CREATION_DATE=dateO(/NOCREATION_DATEQOControlswhetheranewcreationdateisassignedtothespec-UOifiedfiles.(Specifythedate accordingtotherules describedinJO2Chapter1oftheVMSDCLConceptsManual.(AbsolutedateOOkeywordsareallowed.*Ifyouspecify0asthedate,today'sOdateisused. ! O /DIRECTORYO( /NODIRECTORYTOSetsorresetsthe directory attributeofafile.*This qualifierUOallowsyoutosetthe directorybitofafilewhichwasmistak-FO2inglyresetbythe'SETFILE/NODIRECTORY'command.'IfVOitisdoneona non-directoryfile,thenaccesstothat directory.Owillgivea 'BADIRECTORY'error.) O/EBLOCK[=block]PO(This qualifierwillresetthe end-of-filemarktothehighestPOblock allocatedifnoblockhasbeen specified.) OtherwisetheFO end-of-filemarkwillbesettothe specifiedblock.%  O /EBYTE[=byte]RO(This qualifierwillsetthe end-of-filebytemarktothehigh-TOestbyteifithasnotbeen specified.( Otherwisethe end-of-file>Obytemarkwillbesettothe specifiedbyte.  O/EXPIRATION_DATE=dateO(/NOEXPIRATION_DATEPOControlswhetheran expirationdateisassignedtothespeci-TOfiedfiles.(Specifythedate accordingtotherules describedinJO2Chapter1oftheVMSDCLConceptsManual.(AbsolutedateOOkeywordsareallowed.*Ifyouspecify0asthedate,today'sOdateisused.>K$O/IDENT=identifieroruicEO(Modifythefile ownership.,Seealso /OWNER_UIC.ThisPOallows modificationofthefile-ownershipevenifthefileisFOopen,eg.* INDEXF.SYS.Youcannotuseboth/IDENTandO2 /OWNER_UIC./ KO/LOCKEDO( /NOLOCKEDUOThis qualifierwilllockafileforfutureuse.(NothingelsecanVOthenbedonewiththefile,untilitisunlocked(whichcanalso6O2bedonewiththeVMS'UNLOCK'command. O/LOG (default)O(/NOLOGMOControlswhethertheSETcommanddisplaysthefilespecifi-EOcationofeachfileafterthe modificationismade. xO/MAXREC=recordOO(SetsanewvalueforthemaximumrecordnumberinthefileOheader. wO/ORGANIZATION=keywordBO(The followingkeywordsareused as parameters for:Othe ORGANIZATION qualifier:0DIRECT,INDEXED,FORELATIVEand SEQUENTIAL.Thiswillallowyoutomod-VO2ifythefile organizationtypeinthefileheader.(Ofcoursethis@Owon'tchangethereal organizationofthefile.[K1(O/OWNER_UIC=uicor identifierOO(Modifythefile ownershiptoanuicor identifier.+SeealsoLO/IDENT.Thisallows modificationofthefile-ownershipevenLOifthefileisopen,eg., INDEXF.SYS.Youcannotuseboth"O2/IDENTand /OWNER_UIC.^! 4 O/RECATTRIBUTES=keywordGO(The followingkeywordsareusedas parametersforthe>O RECATTRIBUTES qualifier:'NONE,FORTRAN,IMPLIED,FOPRINTandNOSPAN.ThiswillallowyoutomodifytheMO2file'srecord attributesinthefileheader.(NONE,FORTRAN,FOIMPLIEDandPRINTaremutually exclusive,butcanbeGOusedin combinationwithNOSPAN.WhenNOSPANisomit-RO<tedSPANisassumed(thedefaultistoallowrecordstocrossOblock boundaries).AdO /RECSIZE=sizeMO(Setsanewvaluefortherecordsizeinthefileheader._5O/RECTYPE=keywordGO(The followingkeywordsareusedas parametersforthe9ORECTYPE qualifier:0FIXED,STREAM, STREAMCR,:O STREAMLF, UNDEFINED,VARIABLEandVFC.ThisPO2willallowyoutomodifythefile'srecordtypeinthefileOheader. O/REVISION_DATE=dateO(/NOREVISION_DATEMOControlswhetherarevisiondateisassignedtothespeci-TOfiedfiles.(Specifythedate accordingtotherules describedinJO2Chapter1oftheVMSDCLConceptsManual.(AbsolutedateOOkeywordsareallowed.*Ifyouspecify0asthedate,today'sOdateisused.AhO/RVCOUNT=countPO(Setsanewvaluefortherevisioncountinthefileheader.]O/UPDATEO( /NOUPDATE (default)NONormallythefile'srevisiondatewillbeupdatedafteranyLO modificationtoit.+SEThoweverdisablesthisupdate(oth-KO2erwisetheREVISIONdatecouldnotbeset).+SpecifythisIO qualifierifyouwanttherevisiondatetobeupdated.O /VFCSIZE=sizePO(SetsanewvaluefortheVFCsizeinthefileheader.+ThisDOvaluewillonlybeusedwiththeVFCrecordtype.*657O 11.2UNDELETEEOThischapter describestheUNDELETEcommandwiththe/Orelated parametersand qualifiers.u768 )O11.1C IntroductionEOUTheUNDELETEfunctionisdesignedtorecoverdeletedLOfiles,if possible.*UNDELETEoperatesinasafemodesuchROthatitfirstchecksifthedeletedfileheaderand diskblocksSO^arestill available.+Onlyinthatcasewillthefileberecov-IOered.( OtherwiseUNDELETEwillleavethedisk unmodified.2OUNDELETEhassome powerfulloptions:! w `mMmGeneratealistof recoverablefileswiththe/LISTquali-Qfier.&This qualifierwillnotundeleteanyfile,and therefore-itdoesnotlockupthedisk. `3Undeletemultiplefilesinonepass. `BMakefile selectionsbasedontheownerwiththe(v/OWNERor/IDENT qualifier. `G UndeletedfileswhichcannotbeenteredbackintheirJMoriginal directorywillbemovedtothe [SYSLOST]direc-Atory.)Thissavesan additionalANALYZE/DISK/REPAIRaction.*8 79 n^$O11.2CHowUndeleteworks:OUTheUNDELETEcommandoperatesasfollows:z! b PPOm1.JLockthevolume.'InthesamemannerasANALYZE/DISK/REPAIR:andSETVOLUME/REBUILDUndeletelockstheFdiskforotherwriterssuchthatno modificationsto?wtheINDEXF,BITMAPorQUOTAfilecanbemade.PO2.JSearchthe INDEXF.SYSfileifthe requestedfileisstillQOthere.*Acheckismadeifitreallyisavaliddeletedfileheader.SO'3.JChecksifthedeletedfileheaderandallpossible extension%headersarestillvalid.TO4.JChecksiftheblocks previouslyownedbythisfilearestillWfree.QO5.JIfallthese conditionsaremetDFUwilldisplaythefile*/andasksfora confirmation.NO6.JRebuildsallofthedeletedfileheadersandbitmapsinFmemory..IfnoerrorsarefoundallthefileheadersK_andbitmapsarewrittenbacktodisk.*Thefilesoriginal8backlinkissavedinatableinmemory.NO77.JIf appropiatetheblocksandheadersarechargedagainst diskquota.HO8.JWhenallof INDEXF.SYShasbeenscannedthevolumehis unlocked.VO9.JThefile(s)is(are)enteredintheoriginal directoryifpos-K@ sible,usingthetablebuildupinmemory.+IftheenterF commandfails (probablybecausetheoriginal directoryL isgone)thefilewillbeenteredin [SYSLOST].DFUwill.I createthis directoryifneeded."! NTOIfthe/LIST qualifierisused,DFUwilljustlisttherecover-ROablefileswithout performinganyactiononthedisk.&Thedisk O5willnotbelocked.#! WSOItis importanttonotethatduringthebitmapandfileheaderMO processinganyerrorwill immediately terminatetherecoveryMO5process,andunlockthedisk.*Fileswhichhavebeenrecov-ROereduptothatpointwillstillbeenteredinthe appropiateNO directory.(Asnowrong informationhasbeenwrittenbacktoJO>thediskthisshouldleavethediskinaproperstate.E$! MONOTE:Theblocks recoveredwillNOTbe subtractedfromtheOOVolume'sfreeblockcount.(Togettheactual freeblockcount?O5aSETVOLUME/REBUILD=FORCEis necessary.+Alsoa@OcompletereMOUNTwillresetthe freeblockcount.% [GO IMPORTANT:DFUtakescaretorecoveronlyfileswhoseIOoriginalblocksarefree.,HowevertheseblocksmayhavePO5beenmodifiedinthemeantimebyanotherfilewhichalsohasMObeendeleted.( Thereforeeach recoveredfilemustbechecked.Omanuallytocheckits integrity.*&'  .OExampleofaUndeletesession:&ODFU>&undel&$1$dua102:/list:Oq Recoverable%file&[TEST]CHANGE_UIC.FOR;2%found8O Recoverable%file&[TEST]CHECK_ID.FOR;1&found9O Recoverable%file&[TEST]CHKPRDIMG.FOR;1%found6OI Recoverable%file&[TEST]CHRLEN.FOR;1%found,ODFU>&undel/file=*.for% $1$DUA102:2O%DFU-I-READBMAP,&Reading% BITMAP.SYS...9Od%DFU-W-LOCKED,%Volume%now&LOCKED%for%write6O %DFU-I-UNDEL,&Start&search%on% $1$DUA102::O Recoverable%file&[TEST]CHANGE_UIC.FOR;2%found0O]Recover&this%file?%(Y/N)%[N]&:%n8O Recoverable%file&[TEST]CHECK_ID.FOR;1&found0ORecover&this%file?%(Y/N)%[N]&:%y7O5%DFU-S-RECOVER,%File% succesfully% recovered2O|%DFU-I-ADDQUOTA,&updating& diskquota...9O Recoverable%file&[TEST]CHKPRDIMG.FOR;1%found0O.Recover&this%file?%(Y/N)%[N]&:%n6Ov Recoverable%file&[TEST]CHRLEN.FOR;1%found0ORecover&this%file?%(Y/N)%[N]&:%y7O'%DFU-S-RECOVER,%File% succesfully% recovered2Oo%DFU-I-ADDQUOTA,&updating& diskquota...*O%DFU-I-UNLOCK,%Volume%unlocked&EXIT*(((98:))*O11.3CFilesmarkedfordeleteIOUNormallyDFUdoesnotundeletefilesmarkedfordelete.JOThisversion introducesanew qualifier,/MARKED,whichLO specifically undeletesfilesmarkedfordelete.,ThisallowsTO^therecoveryoffileswhicharedeletedbutstillopen,suchasKO INSTALLedfilesorevenrecoveryofthesystemdumpfileprompt.)Ifthe/FILE3O- qualifierisomittedDFUwillassume 9* -. 9* -; 9* 9-.)1$O/IDENT=identifieroruicTO(Youcansearchforfilesownedbyaspecific identifieroruic.DOAnotherwayisthe /OWNER_UIC qualifier;youcannotCOcombinethese2 qualifierinoneUNDELETEcommand.2"O/LIST(=output-file-name)NO(Generatealistof recoverablefiles.+NoundeletewilltakePOplace,andthediskwillnotbelocked.+The defaultoutputisO SYS$OUTPUT.3O/MARKEDMO(Consideronlyfilesmarked-for-delete.(Suchfilesareusual-SOllystillopenbysomeutility,suchas INSTALLedfilesortheOsystemdumpfile.4 (O/OWNER_UIC=uicor identifierZO(This qualifierisusedtoselectfilesbyauicor identifier.(You9Ocannotcombinethis qualifierwith/IDENT.5O /STATISTICSNO(This qualifierdisplaysthe performance statistics:(CPUtime,/OElapsedTime,I/Oand PageFaults.*6<;=7eO 12.2SPAWNBOThenewSPAWNcommandcreatesan interactivesub-MOprocess.+ThisallowsaquickescapetotheDCLlevelfromJOBan interactiveDFUsession.,The subprocesshasadefaultFOprompt DFU_sub$.)InSMGmodethekeyalsoper-FOformsaSPAWNcommand.+Youmustlogout explicitlyto(OLreturntotheDFUsession.D=<>8O 13.2VERIFYCOThischapter describestheVERIFYcommandwiththe/Orelated parametersand qualifiers.h  >=?9 qO13.1C IntroductionJOUTheVERIFYcommandmakesananalysisofthedisk,scan-JOningforfileanddisk structureerrors.+VERIFYperformsKOalmostallofthechecksnormallydonebya ANALYZE/DISKAO^command.1ButVERIFYisseveraltimesfasterthan5O ANALYZE/DISK,andusingless resources.i:??OVERIFYchecksandreportsthe followingerrors:; o `mFmChecksthelogical information containedinthedisksHOMEblock `E/EReportsfilesmarkedfordeletion `=Reports mismatchesintheindexfile'sbitmap `D!DChecksall backlinks. `.Reportsmultiple allocatedblocks `BDBReportsblocks incorrectlymarkedfreeand allocated `#Reportsalllostfiles `AEAChecksfor mismatchesbetweenblocksusedandblocksCchargedin QUOTA.SYS.(Onlydonewhen diskquotaisenabled)*<*=.ll?>@!>&O13.2CBasicrepairactionsOOUThe/FIX qualifiercanbeusedtoperformsomebasicrepairFOactions.)UnlikeANALYZE/DISK/REPAIRthisdoesnotlock&VERIFY%mydisk,O"%DFU-I-VERIFY,% Verifying%MYDISK::Oi%DFU-S-CHKHOME,%Home%block%info&verified&OK3O%DFU-I-IFSCAN,%Scanning% INDEXF.SYS&...4O%DFU-I-CHKBITMAP,%Checking% BITMAP.SYS...8OA%DFU-I-CHKLOST,%Checking%for&lost%files...2O%DFU-I-CHKQUOTA,&Checking& QUOTA.SYS...-ODFU>&VERIFY/REBUILD& sys$sysdevice4O:%DFU-W-LOCKED,%Volume%now&write&locked3O%DFU=I-VERIFY,% Verifying%SYS$SYSDEVICE::O%DFU-S-CHKHOME,%Home%block%info&verified&OK[O%DFU-W-DELETED,%file% (620,351,1)%RSF_DI_RSF_SERVER0.TMP;3%marked&for%deleteUOZ%DFU-W-DELETED,%file% (6349,173,1)%DCLTABLES.EXE;937%marked&for%delete\O%DFU-W-DELETED,%file% (19745,35,1)%RSF_DI_RSF_SERVER0.TMP;3&marked%for%delete4O%DFU-I-CHKBITMAP,%Checking% BITMAP.SYS...bO2%DFU-E-ALLOCCLR,&blocks%LBN%2667141%through&2667143% incorrectly%marked& allocatedbOz%DFU-E-ALLOCCLR,&blocks%LBN%2667153%through&2667161% incorrectly%marked& allocated . .=OR%DFU-S-RBDBITMAP,% BITMAP.SYS& succesfully&rebuild8O%DFU-I-CHKLOST,%Checking%for&lost%files...*O%DFU-I-UNLOCK,%Volume%unlockedOKDFU>`J66OVERIFYcanreportthe followingerrors:D CEK &\ 000000.DIR directoryonRVN1, thendo a SET4 FILE/REMOVEfromthewrong 000000.DIR.P.O DELETED,filemarkedfordelete,k Severity:PkWARNING Explanation:5Afilewasfoundmarkedfor deletion.O^SuchfilesusuallyexistsasaresultoffilebeingdeletedOwhileitwasstill INSTALLed,orasaresultofasystemLcrash.+Itisnot consideredasanerror.+Youcantryto5hdeletesuchfilesbyusing VERIFY/FIX.SQ k)/O ERRHOME,HomeblockinfonotOK,k Severity:PkERROR Explanation:4TheInfo containedintheHomeBlock.^wasnot consistentor corrupted. UserAction:4RunANALYZE/DISK/REPAIRtotrytofixRtheerror.uR ~K3O INVBAKFID,filehasinvalid backlink,k Severity:PkERROR Explanation:>Thefilesbacklinkfileidisnotfilledin.R^Thisislikelytobealostfile.'(NotethatonceVERIFYre-Nportsthiserror,itwillnotbereportedagainduringthePLOSTFILEcheck).'ButisalsopossiblethatthefileisinaUhvalid directory,butthattheBacklinkfileidisnotfilledin. UserAction:,RunANALYZE/DISK/REPAIR.IftheO\fileisinavalid directorythebacklinkwillbe repaired.K Otherwisethefilewillbemovedtothe [SYSLOST]direc-L tory.'Youcanalsouse VERIFY/FIXbutthenthefilewill4eunconditionallybemovedto [SYSLOST].wS kM.O LOCKED,fileisdeaccesslocked,k Severity:PkWARNING Explanation:<Thefileisdeaccesslocked.(Thismaybea'^resultofasystemcrash. UserAction:9TrytounlockthefilewiththeDFUSET2Rcommand,ortheDCLUNLOCKcommand.T =O LOSTHDR1,filefoundin nonexistent directory,k Severity:PkWARNING Explanation:<Duringthelostfilecheckafilewasdis-G^coveredina nonexistent directory.-ThiserrorcanbeJcausedasfollows:'seta directoryfileto NODIRECTORYanddeleteit. UserAction:7Run VERIFY/FIXtomovethefiletothe [SYSLOST] directory.U! &AO LOSTHDR2,filefoundin directorywithbadback-( link, Severity:PWARNING^ Explanation:<^Duringthelostfilecheckafilewasdis-Jcoveredinavalid directory.)However,the directoryhasLaninvalid backlink.(Thiserrorcanbecausedbydoinga3hSET FILE/REMOVEofa directoryfile. UserAction:7Run VERIFY/FIXtomovethe directorytoF\the [SYSLOST] directory.)Thenmovethe directorybackQtothecorrect location.'Thefilesinthe directoryshouldbe  accesibleagain.VuU9O LOSTHDR3,filefoundininvalid directory,k Severity:PkWARNING Explanation:<Duringthelostfilecheckafilewasdis-I^coveredina directorywhichisnotavalid directory.OEitherthefilehasawrong backlink,orthe directoryfile9hasthe directoryfile attributenotset. UserAction:6Lookupthe directoryanduseDFUSETPtosetthe directorybit.(Ifthe directoryfilewasOKthen8\run VERIFY/FIXtorecoverthelostfile.YEDFW! 2O LOSTHDR4,notfoundina directory,k Severity:PkWARNING Explanation:/Whenthe/DIRECTORY_SCAN qualifierP^isused,DFUdetectsfileswhichhaveavalidbacklinkbutMwhicharenotseeninthe directory.(Thiscanberepairedwith/FIX. UserAction:9Using/FIXwillenterthesefilesinthecorrect directory.dX :2O MULTALLOC,blocksmultiple allocated,k Severity:PkERROR Explanation:9Afilehasblocks allocatedwhichalreadyG^belongtoanotherfile.+NotethatVERIFYwillmakeaHsecondpassthrough INDEXF.SYStoreportallthefilesQ involved.(Thisisaseriouserror,andmaybearesultofaGhdiskbeingmountedontwo seperated VAXClusters(ora# partitioned VAXCluster).\ UserAction:3\CopyallthefilesfoundtoanotherC location.1Nextallthefilesmustbedeleted.2RunA VERIFY/REBUILDtorepairtheBITMAP.Alltheaf-Neflictedfilesmustbemanually inspectedtoseewhichfiles1arevalidandwhichare corrupted.Ykm9O NOBITCLR,DeletedfileheadermarkedBUSY,k Severity:PkWARNING Explanation:9Afilewasdeleted.)The correspondingbitL^intheINDEXFbitmapshouldbeclearedbutisstillset.+Thisisnotaseriouserror.R UserAction:3RRunVERIFY/REBUILDtofixtheerror.ZkX8O NOBITSET,indexfilebitmapbitnotset,k Severity:PkWARNING Explanation:9Avalidfilewasfound,butthecorre-J^spondingindexfilebitmapbitisclear.-Thisisnotaseriouserror.R UserAction:3RRunVERIFY/REBUILDtofixtheerror.O[ %)O NOOWNER,filehasnoowner,k Severity:PkWARNING Explanation:8AfilewasfoundwithUIC[0,0]asthe6^owner.'Thisisnotanormal situation. UserAction:=Lookupthefileandmodifythefileowner.n\ /D=O QUOTAERR,UIC[x,y]hasnblocksused,QUOTA( indicatesmblocks, Severity:PWARNING^ Explanation:7^Ifadiskhas diskquotaenabled,VERIFYG calculatestheblocksusedandcomparesthemwiththeHvalueinthe QUOTA.SYSfile.(Anymismatchis reported.JhThiserrorisoftenseenwhenVERIFYisrun,andthereMis concurrentfileactivityonthedisk.-Also,ifafteraAsystemcrashthediskismountedwith /NOREBUILDCrsuchQuota mismatchesmayexist.(ReRunVERIFYwith;/LOCKtoseeiftheerrorisstillthere.e UserAction:/eRunVERIFY/REBUILDtorebuildthe=QUOTAfile.)Orruna DISKQUOTA>REBUILDcom-mand.] 3O SLFBAKFID,backlinkpointstoitself,k Severity:PkWARNING Explanation:7Thiserror indicatesthatDFUhasfoundO^a directorywithabacklinkpointingtoitself.'ThisfeatureJisonlyallowedfortheMFD 000000.DIR.ThiserrorwillEresultin ANALYZE/DISKgoingintoa COMputableloop. UserAction:3Run VERIFY/FIXtomovethe directoryFtothe [SYSLOST] directory.)Thenremovethe directoryB\entryfromitselfwithaSET FILE/REMOVEcommand.GThefilesinthe directoryshouldbe accesibleagain.  F E:^OVERIFY*_d`::OVERIFYadevicefordisk structureerrors.Ua+OFormatOsVERIFYN device[:]vbLO ParametersOsdevice(OThedevicetobe verified.HcO QualifiersOs/APPEND=filenamePOThis qualifier redirectstheoutputtobeappendedtoanal-XO$readyexistingfile.)IftheoutputfiledoesnotexistsitwillbeHO|created.'Youcanuse/APPENDor/OUTPUTbutnotboth.d O/DIRECTORY_SCANOO(Performsafull directoryscan.(Thismaytakeupsometime,OObutitallows detectionof mismatchesbetweenthe directoriesOand INDEXF.SYS.eKO/FIXO(/NOFIX (default)IORepairerrorsonthedisk.0FilemarkedfordeletewillNObedeletedandlostfilesand directorieswillbemovedtoO2 [SYSLOST].tf JO/LOCKO(/NOLOCK (default)QOLocksthediskforfileallocation/deletion.)Thisgivesacon-QOsistentreportforthedisk,butotherusersmay experienceaPO2delaywhen accessingthedisk.'Thedevicewillbeunlockeda-OtheendoftheVERIFYcommand.gXO/OUTPUT=filenameRO(This qualifier redirectstheoutputtoafile.*TheoutputwillFOalsogoto SYS$OUTPUT.CAUTION:ifyouuse/LOCKinIO combinationwith/OUTPUTbecarefulltospecifyanout-MO2putfileonANOTHERdisk,orDFUwillfinishwithasevereOerror.hO/REBUILDO( /NOREBUILD (default)JOPerformavolumerebuild.,Usingthis qualifierwilltem-7Oporarilylockthediskforotherusers.iO /STATISTICSNO(This qualifierdisplaysthe performance statistics:(CPUtime,/OElapsedTime,I/Oand PageFaults.*j   !!!!!!!!!!!!!!!"############$$$$$%%%%&&&&&&&&&&&&&&&&&&&&&&'(()))))))))**************+,---.////011111111111111111111111111111111111111111111111123345555555555555555555555555555567778888888889:;;;;;;;;;;;;<=>>>>>???@@@AAAABCCDDDDDDDDDDDDEEEEEEEFFFFFFFFFFFFF1. Introduction1. Introduction1.1 Support on DFU1.2 General description1.2 General description1.2 General description1.2 General description1.2 General description1.3 New features of V2.41.3 New features of V2.41.3 New features of V2.41.3 New features of V2.41.3 New features of V2.4&1.4 Restrictions and Parameters&1.4 Restrictions and Parameters&1.4 Restrictions and Parameters&1.4 Restrictions and Parameters&1.4 Restrictions and Parameters&1.4 Restrictions and Parameters&1.4 Restrictions and Parameters&1.4 Restrictions and Parameters2. Using DFU!2.1 Installation procedure!2.1 Installation procedure!2.1 Installation procedure!2.1 Installation procedure!2.1 Installation procedure!2.1 Installation procedure!2.1 Installation procedure!2.1 Installation procedure!2.1 Installation procedure!2.1 Installation procedure!2.1 Installation procedure2.2 Security and access2.2 Security and access2.2 Security and access2.2 Security and access2.2 Security and access2.2 Security and access2.2 Security and access2.2 Security and access2.3 Running DFU2.3 Running DFU2.3 Running DFU2.3 Running DFU2.3 Running DFU2.3 Running DFU&2.4 Using an indirect file list&2.4 Using an indirect file list"3. The SMG output interface!3.1 Enabling/Disabling SMG83.2 Automatic switching between SMG and Line mode#3.3 Layout of the SMG screen#3.3 Layout of the SMG screen#3.3 Layout of the SMG screen#3.3 Layout of the SMG screen"3.4 Special Screen commands"3.4 Special Screen commands"3.4 Special Screen commands"3.4 Special Screen commands3.5 Side effects3.5 Side effects4. DFU basics4. DFU basics4. DFU basics4. DFU basics4. DFU basics4. DFU basics4. DFU basics4. DFU basics4. DFU basics4. DFU basics4. DFU basics4. DFU basics5. DEFRAG5.1 Description5.1 Description5.1 Description5.2 Error messages5.2 Error messages5.2 Error messages DEFRAG DEFRAG DEFRAG DEFRAG DEFRAG DEFRAG DEFRAG DEFRAG DEFRAG DEFRAG DEFRAG6. DELETE6.1 Introduction6.1 Introduction6.1 Introduction6.1 Introduction DELETE DELETE DELETE DELETE DELETE DELETE DELETE DELETE DELETE DELETE DELETE DELETE DELETE DELETE DELETE7. DIRECTORY7.1 Introduction7.1 Introduction7.1 Introduction7.1 Introduction7.1 Introduction7.1 Introduction7.1 Introduction7.1 Introduction7.1 Introduction7.1 Introduction7.1 Introduction7.1 Introduction.7.2 Discussion of directory compression.7.2 Discussion of directory compression.7.2 Discussion of directory compression.7.2 Discussion of directory compression.7.2 Discussion of directory compression7.3 Output formatting7.3 Output formatting7.3 Output formatting7.3 Output formattingDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORYDIRECTORY8. REPORT8.1 Description8.1 Description8.2 Syntax and Output8.2 Syntax and Output8.2 Syntax and Output8.2 Syntax and Output8.2 Syntax and Output8.2 Syntax and Output8.2 Syntax and Output8.2 Syntax and Output8.2 Syntax and Output REPORT REPORT REPORT REPORT REPORT REPORT REPORT REPORT REPORT REPORT REPORT REPORT REPORT REPORT9. SEARCH9.1 Introduction9.2 Syntax and Output9.2 Syntax and Output9.2 Syntax and Output 9.3 Volume Set processing9.4 Output formatting9.4 Output formatting9.4 Output formatting9.4 Output formatting(9.5 UIC and identifier processing SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH SEARCH10. SET10.1 Introduction10.1 Introduction)10.2 UIC and identifier processing SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET11. UNDELETE11.1 Introduction11.1 Introduction11.1 Introduction11.2 How Undelete works11.2 How Undelete works11.2 How Undelete works11.2 How Undelete works11.2 How Undelete works11.2 How Undelete works11.2 How Undelete works11.2 How Undelete works11.2 How Undelete works#11.3 Files marked for delete)11.4 UIC and identifier processingUNDELETEUNDELETEUNDELETEUNDELETEUNDELETEUNDELETEUNDELETEUNDELETEUNDELETEUNDELETEUNDELETEUNDELETE12. SPAWN13. VERIFY13.1 Introduction13.1 Introduction13.1 Introduction13.1 Introduction13.1 Introduction 13.2 Basic repair actions 13.2 Basic repair actions 13.2 Basic repair actions13.3 Directory scanning13.3 Directory scanning13.3 Directory scanning#13.4 Advanced repair actions#13.4 Advanced repair actions#13.4 Advanced repair actions#13.4 Advanced repair actions13.5 Interpreting errors13.6 Error reporting13.6 Error reporting5ALLOCCLR, blocks incorrectly marked allocated,0ALLOCSET, blocks incorrectly marked free,/BADBLOCK, file has suspected bad blocks,2BADEXTLNK, link to extension header broken,@BADMFDLNK, directory has backlink to 000000.DIR on RVN n,'DELETED, file marked for delete,'ERRHOME, Home block info not OK,,INVBAKFID, file has invalid backlink,'LOCKED, file is deaccess locked,5LOSTHDR1, file found in nonexistent directory,=LOSTHDR2, file found in directory with bad back- link,1LOSTHDR3, file found in invalid directory,*LOSTHDR4, not found in a directory,,MULTALLOC, blocks multiple allocated,1NOBITCLR, Deleted file header marked BUSY,/NOBITSET, index file bitmap bit not set,"NOOWNER, file has no owner,GQUOTAERR, UIC [x,y] has n blocks used, QUOTA indicates m blocks,,SLFBAKFID, backlink points to itself, VERIFY VERIFY VERIFY VERIFY VERIFY VERIFY VERIFY VERIFY VERIFY VERIFY VERIFY VERIFY VERIFY  ch1 hd1_1 hd1_2 hd1_3 hd1_4 ch2 hd2_1+ hd2_23 hd2_39 hd2_4; ch3< hd3_1= hd3_2> hd3_3B hd3_4F hd3_5H ch4T ch5U hd5_1X hd5_2[defragf ch6g hd6_1kdeletez ch7{ hd7_1 hd7_2 hd7_3directory ch8 hd8_1 hd8_2report ch9 hd9_1 hd9_2 hd9_3 hd9_4 hd9_5search ch10hd10_1hd10_2 set ch11hd11_1 hd11_2)hd11_3*hd11_4+undelete7 ch128 ch139hd13_1>hd13_2Ahd13_3Dhd13_4Hhd13_5Ihd13_6^verify B-ADOBE-Helvetica-Medium-R-Normal--*-120-*-*-P-*-ISO8859-1@-ADOBE-Helvetica-Bold-R-Normal--*-180-*-*-P-*-ISO8859-1@-ADOBE-Helvetica-Bold-R-Normal--*-120-*-*-P-*-ISO8859-1B-ADOBE-Helvetica-Medium-R-Normal--*-100-*-*-P-*-ISO8859-1@-ADOBE-Helvetica-Bold-R-Normal--*-140-*-*-P-*-ISO8859-1O-ADOBE-New Century Schoolbook-Medium-R-Normal--*-140-*-*-P-*-ISO8859-1/-ADOBE-Symbol-*-R-*--*-140-*-*-P-*-*-*@-ADOBE-Courier-Medium-R-Normal--*-120-*-*-M-*-ISO8859-1B-ADOBE-Helvetica-Medium-R-Normal--*-140-*-*-P-*-ISO8859-1M -ADOBE-New Century Schoolbook-Bold-R-Normal--*-140-*-*-P-*-ISO8859-1t   lrsT  \B" ''/r2p:57v8H94:J?>AZCLNNXPQ WW.[<dem sjtfP t@!d*Nj5r,X#(,  l62iP< #*[DFU024.DOC]DFU024.DECW$BOOKSHELF;2+,k./7@ 4-[0123KPWO56}t7}t89G7@HJBOOK\dfu024\DFU V2.4 *[DFU024.DOC]DFU024.HTML;2+,l.B/7@ 4UBB2Z-[0123 KPWOC56}t7}t89G7@HJ  M ( 1 * C  DFU V2.4  !

DFU V2.4






Abstract

7DFU Disk and File Utilities for OpenVMS VAX and Alpha 

(Revision Information: This manual supersedes V2.2 

Date: August 1996 

$Operating System: 1OpenVMS VAX V5.5-2 thru 7.1, Alpha V6.1 thru 7.1 

Note: Part of the Freeware CD-ROM 




*OpenVMS Freeware for VAX and AXP Systems 

:The OpenVMS Freeware CD-ROM contains free software tools 6and utilities to aid software developers in creating 6applications and managing and using OpenVMS systems. 

9Many of these tools are popular packages already widely 9known and in use, while others are internally developed 9Digital tools our engineers are making available to our =OpenVMS customers. For example, the OpenVMS Freeware CD-ROM 9includes Bliss-32 for OpenVMS VAX, Bliss-32 for OpenVMS $AXP, and Bliss-64 for OpenVMS AXP. 

/Disclaimer on Testing, Quality, and Licensing 

8The OpenVMS Freeware for VAX and AXP Systems CD-ROM is 7provided "AS IS" without warranty. Digital imposes no =restrictions on its distribution, nor on the redistribution 8of anything on it. Be aware, however, that some of the 8packages on the CD-ROM may carry restrictions on their <use imposed by the original authors. Therefore, you should =carefully read the documentation accompanying the products. 

:Digital Equipment Corporation is providing this software 6free of charge and without warranty. Included in the 6[FREEWARE] directory on this CD are the GNU software 8licenses. Unless otherwise stated in sources or source ;packages, the GNU licenses cover all software supplied on this CD. 

=Digital makes no claims about the quality of this software. 3It is provided to the customer as a free service. $

Copyright©August 1996




5

Contents

  


;

Chapter 1
Introduction



=The Disk and File Utilities (DFU) is a high perfomance tool Imeant as an aid to the system manager who is responsible for monitoring /and maintaining disks, files and directories. IIt makes use of low level I/O features of VMS. As a result a high level @of performance is reached with minimal overhead on the system. CDFU supports all types of disk sets which comply to the VMS ODS-2 standard ?such as volume sets, stripe sets , shadow sets and RAID sets, and combinations of these. 

DDFU does NOT work on Spiralog disks. Trying to use DFU on spiralog Fdisks will produce the error "%DFU-E-NOTF11, Device does not have an ODS-2 filesystem" .  6

1.1 Support on DFU



;Although there is no official support on DFU you may send 1questions/remarks/bug-reports to the author via /internet address dorland@utrtsc.enet.dec.com. EA next version of DFU will no longer work on VMS 5.5-2 and VMS 6.0.  ;

1.2 General description



@DFU provides the following functions (in alphabetical order) : 

    I
  • DEFRAG : This function allows simple defragmentation of a file or a list of files. F
  • DELETE : This function allows either a delete by file-id, or a fast delete Hof a complete directory or directory tree with all its subdirectories. 1
  • DIRECTORY : This function has 6 options : 
      
    1. COMPRESS a directory )
    2. DUMP a directory block by block 5
    3. CREATE a directory with a preallocated size A
    4. Search all directories on the disk for files which have multiple versions C
    5. Search all directories on the disk for alias file entries B
    6. Search all directories on the disk for empty directories 
    H
  • REPORT : Generates a file and free space report for a disk. Also a @disk space usage report, based on UIC's or identifiers, can be generated, even *on a disk which has disk quota disabled. I
  • SEARCH : Look up files on a disk by specific file attributes (eg. +files sizes, dates, ownership, and so on) H
  • SET : This functions allows setting of file attributes which are %not available through DCL commands. 1
  • UNDELETE : A safe file recovery function. =
  • VERIFY : This function performs a fast disk structure verification 9and can optionally repair certain disk structure errors ((comparable with ANALYZE/DISK/REPAIR).  

    DEach function is described in detail in the corresponding chapter. 

    HDFU is supported on OpenVMS VAX V5.5-2 through V7.1, and OpenVMS Alpha V6.1 thru EV7.1. DFU has been tested on the Field test versions of VMS 7.1; so Gfar no problems have been found. The official freeware release of DFU will 7be distributed with the official release of VMS V7.1.  =

    1.3 New features of V2.4

    

    ?This version of DFU offers several improved and new features, "as well as a couple of bugfixes. %The new functions and features are: 

      G
    • Improved handling of UIC's and Identifiers. DFU now accepts all Cvalid numeric and alphanumeric UIC's and identifiers. This option Fis used in the /OWNER and /IDENTIFIER qualifier. The SEARCH, SET and UNDELETE commands use these qualifiers. E
    • In some cases the DFU_ALLPRIV identifier was too restrictive; $therefore it has been removed from 9the DIRECTORY/COMPRESS, DELETE/DIR and the SET command. ;
    • Output formatting is now possible on the SEARCH and DIRECTORY/VERSION Hcommands via the /FORMAT qualifier. This allows the building of action DDCL command procedures directly from the output of these commands. F
    • Output file handling : the new /APPEND qualifier allows DFU to add Boutput to an existing output file instead of creating a new one. I
    • DELETE/DIRECTORY : the new /KEEP qualifier allows preservation of the 8directory tree; only the directory content is deleted. B
    • SEARCH : added the /OVER_ALLOCATED qualifier to search for over allocated files. F
    • REPORT : Several new qualifiers allow control over the output. The /USAGE Bqualifier can now also be used as /USAGE=<uic> to report a specific uic or identifier. =
    • UNDELETE: ability to undelete files marked for delete A
    • VERIFY : several enhancements. VERIFY /DIRECTORY allows a complete Adirectory check; this results in better detection of lost files Aand some cases of directory problems. Note that /DIRECTORY_SCAN &replaces the DIRECTORY/CHECK comand. DAlso incorrect backlinks of the Master File Directory (000000.DIR) can now be repaired. EFinally the output of multiple allocated blocks has been improved ( is now sorted by LBN's). 
    

    %The following bugs have been fixed: 

      D
    • On VAX/VMS95n~ DFU024.BCKl[[DFU024.DOC]DFU024.HTML;2UBbf V5.5-2 without the patch on SMGSHR installed, DFU could >exit with an ACCVIO error. A workaround has been build in to avoid this problem. A
    • When processing a corrupt directory DFU could end with an 6ACCVIO error. This has been fixed by better checking of the directory file. )
    • SET/MAXREC did not work properly. I
    • If, during an UNDELETE command CTRL/Y was entered an extra RETURN Chad to be given to abort the UNDELETE command. This is now fixed. H
    • VERIFY/FIX and UNDELETE did not always reenter the file with its Goriginal version number. DFU will now enter the file with the correct Cversion number, or the next higher version if the current version already exists. I
    • Issue a correct error message when trying to use DFU on non ODS-2 "disks such as a Spiralog volume. F
    • In a batch job DFU could produce unwanted blank pages when the logical DFU$NOSMG was defined. 
    

     C

    1.4 Restrictions and Parameters

    

    *The DFU program has a few restrictions : 

      A
    • DFU can not handle volume sets with more than 32 members. H
    • Due to changes in VMS run time libraries for DEC C DFU.EXE files Hlinked on VMS 6.2 cannot be run on VMS 6.1 and lower without relinking Dthe image. The best solution is to reinstall DFU on those systems. ;
    • The SMG interface may not work at all on VMS 5.5-2. =In that case you need to install CSCPAT_0320 and re-install IDFU. Warning: CSCPAT_0320 replaces SMGSHR.EXE and may have side effects +on other applications using SMG routines. 
    

    EThe following minimum process quotas are recommended for DFU usage: 

      
    • WSQUOTA : 1500 
    • WSEXTENT : 3000 
    • DIOLM : 40 
    • ASTLM : 40 
    • FILLM : 40 
    • BYTLM : 30000 
    • PGFLQUOTA : 30000 
    

    FIf you use DFU on volume sets with a large number of members you may 3need to increase the SYSGEN parameter CHANNELCNT. 

    FIf you use the directory command on very large directory files (> 1000 Dblocks) and run into errors you may need to increase the following parameters: 

      >
    • WSQUOTA at least 1000 + size-of-largest directory file *
    • WSEXTENT : WSQUOTA + at least 1000 2
    • CTLPAGES (SYSGEN parameter) : at least 100 4
    • WSMAX (SYSGEN parameter) : at least WSEXTENT 
    

    FDo not change parameters unless you run into errors such as EXCEEDED QUOTA %or INSUFFICIENT WORKING SET LIMITS.  


    8

    Chapter 2
    Using DFU

    

    EThis chapter describes the installation procedure and other actions !which must be taken to run DFU.  >

    2.1 Installation procedure

    

    =DFU can be installed with the VMSINSTAL utility. During the installation VMSINSTAL does the following: 

      6
    • Moves the documentation to SYS$HELP (Optional) 
    • Relinks DFU @
    • Creates the DFU_ALLPRIV identifier needed to perform the &special functions. (See chapter 2.2) 
    

    1The DFU utility in fact contains just 2 files : 

      !
    1. DFU.EXE : the DFU program *
    2. DFUHLP.HLB : the on-line help file 
    

    CDFU.EXE will be moved to SYS$SYSTEM, and DFUHLP.HLB will be moved to SYS$HELP. 

    BYou can optionally get documentation of DFU during installation. =To install DFU log in into a privileged account and enter :

     $ @sys$update:vmsinstal    8  VAX/VMS Software Product Installation Procedure V6.2      It is 01-Aug-1996 at 13:46.    3  Enter a question mark (?) at any time for help.    B  * Are you satisfied with the backup of your system disk [YES]?    
    

    DVMSINSTAL now asks for the distribution media and product. You can Galso specify the directory where you have the DFU_FREEWARE_024.A file instead of a device name:

     =  * Where will the distribution volumes be mounted: [DDCU:]    N  Enter the products to be processed from the first distribution volume set.        * Products: DFU_FREEWARE_024  8  * Enter installation options you wish to use (none):    -  The following products will be processed:             DFU_FREEWARE_ 2.4    :  Beginning installation of DFU_FREEWARE_ V2.4  at 13:46    :  %VMSINSTAL-I-RESTORE, Restoring product save set A ...      Installing DFU version 2.4    
    

    C The next question will prompt you for the documentation files. H The DFU documentation is available in Line printer, PostScript, HTML and @ Bookreader format. The documentation files will be copied to SYS$HELP.

     @  * Do you want the documentation in Lineprinter format ? [Y]?  8  %VMSINSTAL-I-DOCMOVED, DFU024.LINE moved to SYS$HELP    E  * Do you want the documentation in PostScript(TM) format ?   [N]?  ?  * Do you want the documentation in Bookreader format ? [N]?  9  * Do you want the documentation in HTML format ? [N]?    
    

    BVMSINSTAL now links the DFU image and adds the identifier to the Rightslist 6(see chapter 2.2 for the meaning of the identifier).

       Linking DFU image ...  *  %DFU-I-LINK, Linking DFU 2.4  image...     %DFU-S-DONE, DFU.EXE created    
    

    ENext VMSINSTAL will create the DFU_ALLPRIV identifier if necessary.

       D  %VMSINSTAL-I-ACCOUNT, This installation adds an identifier named      DFU_ALLPRIV.  G  %UAF-I-RDBADDMSG, identifier DFU_ALLPRIV value: %X80010008 added to      rights data base      <  %VMSINSTAL-I-MOVEFILES, Files will now be moved to their     target directories...    0  Installation of DFU V2.4  completed at 13:47    
    

    >You must grant any DFU user including yourself the necessary DDFU_ALLPRIV identifier if a user be allowed to use the special DFU functions. 5See chapter 2.2 for the meaning of this identifier.  ;

    2.2 Security and access

    

    EDFU has some functions which must not be made available for general 2usage. Therefore DFU has 2 groups of functions : 

      
    1. Normal functions 
        
      1. DELETE/DIRECTORY 
      2. DIRECTORY 
      3. REPORT 
      4. SEARCH
      5. SET 
      6. SPAWN 7
      7. VERIFY (except VERIFY/FIX and VERIFY/REBUILD) 
      !
    2. Special functions 
        
      1. DEFRAG 
      2. DELETE/FILE 
      3. UNDELETE '
      4. VERIFY/FIX and VERIFY/REBUILD 
      
    

    7The normal functions need SYSPRV or BYPASS privilege. ?The special functions require BYPASS privilege as well as the DFU_ALLPRIV identifier granted. ?The DFU_ALLPRIV identifier is created during the installation Eprocedure. To enable a user to perform special functions the system 1manager must grant this identifier as follows :

     $ mc authorize  'UAF> grant/id DFU_ALLPRIV username  
    

    >It is highly recommended that special functions are NOT made available to the world. 

     3

    2.3 Running DFU

    

    To run DFU you can enter :

     $ RUN disk:[mydir]DFU  
    

    &or (if DFU is installed systemwide):

     
    $ MC DFU  
    

    :You can also define and use a symbol for DFU as follows:

     $ DFU == "$DFU"  $ DFU  
    

    DFU now prompts with :

     2    Disk and File Utilities for OpenVMS DFU V2.4      Freeware version  6    Copyright (C) 1996 Digital Equipment Corporation    	DFU>  
    

    7You can now enter DFU commands. HELP gives you online 5help. After each command DFU returns to the DFU> 8prompt. You can recall and edit commands, just as with 8DCL (20 commands will be stored in the recall buffer). "Use EXIT or CTRL/Z to leave DFU. 9If you use a symbol for DFU , you also process a single (command and return to DCL immediately:

     $DFU SEARCH disk/qualifiers  
    

    9During a DFU run , you can interrupt DFU with CTRL/C or &CTRL/Y. These interrupts are catched 2by DFU to allow a correct rundown of the current *command. It may therefore take some time 1before DFU responds to a CTRL/C or Y interrupt.  C

    2.4 Using an indirect file list

    

    >There are 3 commands, DIRECTORY, DEFRAG and SET which accept Dan indirect file as input parameter. This is achieved by using the I@ sign. An indirect file is a file containing a list of valid filenames I(each line in such a file must contain exactly one file). Such indirect =files can be the output file of the DFU Search command eg.:

     $ DFU  1DFU> SEARCH mydisk/CHAR=DIRECTORY/OUTPUT=x.x  !DFU> DIRECTORY/COMPRESS @x.x  
    

     


    G

    Chapter 3
    The SMG output interface

    

    IAs of version V2.2 DFU uses SMG (Screen management routines) to perform ?output for an interactive DFU session. This chapter describes Ethe layout of the DFU screen, the special commands used only in the BSMG interface and other items with respect to the SMG interface.  >

    3.1 Enabling/Disabling SMG

    

    DDFU automatically selects SMG output if you run an interactive DFU :session on a terminal or workstation which supports SMG. HIn a batch job or a non-DEC terminal DFU will use normal line oriented @output. You can explicitly disable SMG by defining the logical DFU$NOSMG to any value.  U

    3.2 Automatic switching between SMG and Line mode

    EYou may prefer to perform interactive DFU sessions in SMG mode, and Dsingle DFU commands in normal line mode. This can be done by using %the command procedure listed below:

       1$! Procedure to switch beteen SMG and line mode  $ DFU = "$DFU"  $ if p1 .eqs. ""  $ then  $!Interactive seesion  "$ def/user sys$input sys$command  $ dfu  $ else  !$!Single command so disable SMG  $ def/user dfu$nosmg x  /$ dfu 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'  	$ endif  $ exit  
    

     @

    3.3 Layout of the SMG screen

    

    2After starting DFU the screen looks as follows :

     U+-----------------------< DFU V2.4 (Freeware ) >----------------------------+  O|                                                                           |  O|     Disk and File Utilities for OpenVMS DFU V2.4                          |  O|     Freeware version                                                      |  O|     Copyright  1996 Digital Equipment Corporation                        |  O|                                                                           |  O|     DFU functions are :                                                   |  O|                                                                           |  O|     DEFRAGMENT : Defragment files                                         |  O|     DELETE     : Delete files by File-ID; delete directory (trees)        |  O|     DIRECTORY  : Manipulate directories                                   |  O|     REPORT     : Generate a complete disk report                          |  O|     SEARCH     : Fast file search                                         |  O|     SET        : Modify file attributes                                   |  O|     UNDELETE   : Recover deleted files                                    |  O|     VERIFY     : Check and repair disk structure                          |  O|                                                                           |  O|                                                                           |  O+----------------------------------Statistics-------------------------------+  O|                                                                           |  O|                                                                           |  O+---------------------------------------------------------------------------+  O DFU>                                                                       
    

    )This screen is divided into 3 sections: 

      G
    • Main Screen : the top part of the screen is used for the output from @DFU commands. Also broadcast messages are send to this window. H
    • Statistics : the lower part contains statistics from the current Acommand. During most of the commands this screen will contain a :progress indicator and a status for the current command. G
    • DFU prompt : the bottom line is used as the input command line. 
    

     ?

    3.4 Special Screen commands

    

    <In SMG mode the following keys perform special functions : 

      =
    • DO : invokes a subprocess (same as the SPAWN command) H
    • HELP or PF2 : invokes a special SMG window for the help command. #
    • CTRL/W : redraws the screen @
    • PF4 : creates a screen dump into the file DFU_SCREEN.TXT 5
    • PREV SCREEN : Scrolls back the output screen. 7
    • NEXT SCREEN : Scrolls forward the output screen 4
    • SELECT : Toggles between 80 and 132 columns. 
    

    EAlthough only some 20 lines are visible in the output (main) screen ADFU in fact remembers 500 output lines. You can scroll back and Aforward through these lines with the NEXT and PREV SCREEN keys. CAt the beginning of each new DFU command these lines are cleared. 

    HOn a workstation with DecWindows/Motif you can change the DecTerm size >to be more than the standard 24 lines. DFU's SMG screen will automatically .adjust to the screen size of such a DecTerm.  4

    3.5 Side effects

    

    EThere are a few side effects when using SMG mode. CTRL/C and CTRL/Y Eare catched but not echoed. Also all broadcast messages are trapped Dand will be displayed in the main screen at the end of the current IDFU command. Sometimes this may slightly disrupt the main screen, which &can be repaired with the CTRL/W key. 

    @Further, during the execution of a DFU command the cursor will disappear. DAfter the command finishes the cursor will reappear at the DFU> prompt.  


    9

    Chapter 4
    DFU basics

    

    BNote : this chapter is meant for first time users of DFU. If you already 5used DFU before you may probably skip this chapter. 

    GThis chapter gives a brief overview of the commands which can be used @with DFU, and how they can provide the system manager with the necessary information. 

    DOne of most common actions by a system manager is trying to locate specific Ffiles eg. files with a certain file size. Although a lot can be done with Bthe VMS DIRECTORY command this can be a time consuming process , especially if Ithe complete disk much be scanned. The SEARCH command of DFU is exactly meant Hfor this situation. It gives a very quick list of specific files, with Ftheir size, and if needed the number of file fragments. Some usefull SEARCH commands are :

     @DFU> SEARCH disk/SIZE=MINIMUM=1000 (files > 1000 blocks)  :DFU> SEARCH disk/IDENT=SYSTEM (files owned by SYSTEM)  LDFU> SEARCH disk/FRAGMENT=MINIMUM=10 (files with at least 10 fragments)  ?DFU> SEARCH disk/CHAR=MARKED (all files marked for delete)  QDFU> SEARCH disk/CREATED=SINCE=YESTERDAY (all files created since YESTERDAY)  
    

    BOf course these qualifiers can be combined to narrow the search. FAs the SEARCH command scans INDEXF.SYS , not directories, the output Hgenerated by SEARCH may look a bit random (but it is just the order in Cwhich the file headers are in the INDEXF.SYS file). To smooth the output use the /SORT qualifier. 

    IAnother important action for a system manager is to gather some overall Hdisk information , such as number of files , free space statistics and Dfragmentation information. The REPORT command will generate such a Hdisk report. To get individual disk space usage information the /USAGE Fqualifier can be used. This will work even if there is no disk quota enabled on the disk. 

    EAt regular intervals a system manager may need to check a disk with EANALYZE/DISK. The DFU VERIFY command provides more or less the same Bfunctionality but many times faster. The /FIX qualifier provides Hsome REPAIR options which (unlike ANALYZE/DISK/REPAIR) do NOT lock the =disk, and thus do not interfere with other disk operations. CHowever, the disk can be rebuild completely by using the /REBUILD qualifier. 

    COccasionaly a user will delete the wrong file, leaving the system manager Gor operator with the tedious task of restoring the file from a backup set. HThe UNDELETE command may be able to recover the file if it has not yet Hbeen overwritten with a new one. Much care has been taken to make this Hcommand as safe as possible; therefore no disk corruptions will be the Hresult of an UNDELETE. If DFU encounters a problem with a deleted file it will refuse to UNDELETE it. 

    IAnother type of typical system manager problems deals with directories. CThe DFU command DIRECTORY can handle such problems. DIRECTORY can generate Ireports about empty directories (/EMPTY qualifier) or directories which >contains files with a certain number of versions (/VERSION=n qualifier). DAlso , directories may become internally fragmented which degrades Bperformance. This can be quickly solved by using DFU's directory (compressing (the /COMPRESS qualifier). 

    HA second problem with directories is in deleting a directory with many files. IOn large directories this may take several hours using a DCL DELETE *.* !command. This problem is solved @by using DFU's DELETE/DIRECTORY command which can delete large directories Gsome 10 times faster than the normal DELETE command does. Also, using EDELETE/DIR/TREE will delete a complete directory tree with just one command. 

    HThe last 2 commands deal with individual files. SET allows settings of Isome special file attributes. Since VMS V6.0 this functionality is also Fprovided by the DCL SET FILE/ATTRIBUTE command, but DFU's SET offers Gsome more options. The DEFRAG command is an interface to the MOVEFILE >function offered by VMS 5.5 and higher. This allows a simple defragmentation of individual files. 

    GThe next chapters gives a detailed description of each individual DFU command. 

     


    5

    Chapter 5
    DEFRAG

    

    GThis chapter describes the DEFRAG command with the related parameters and qualifiers.  3

    5.1 Description

    

    GThe DEFRAG command can be used to defragment a single file or a group of Ifiles. You can also enter an indirect command file containing a list of Efiles. This feature allows you to create an output file with SEARCH %and use that as an input to DEFRAG. 

    EDEFRAG makes use of the file-primitive MOVEFILE function. Therefore >files which are open, or which are marked NOMOVE will not be DEFRAGmented. FStill you should be cautious about using DEFRAG. You should not make ,this function available for general usage. 

     6

    5.2 Error messages

    

    1The most common errors returned by DEFRAG are : 

      1
    • ACCONFLICT: File is open by another user ;
    • DEVICEFULL: Device has not enough contiguous free space to move the entire file 1
    • FILNOTACC: File has been set to NOMOVE. G
    • FILENUMCHK: You tried to move a reserved file (eg INDEXF.SYS). ;
    • RMS Errors: Almost always caused by an invalid or wrong file specifcation. 
    

     


    (

    DEFRAG

    

    3Defragment a file or a list of files on the disk. 
    
    

    Format

    &

    DEFRAG file1,file2,@file...

    
    
    

    PARAMETERS

    

    file1,file2,@file...

    FThe file(s) to be defragmented. You can also use an indirect command Ffile (@file) which contains a list of files to be defragmented. This may be :an output file generated with the SEARCH/OUTPUT command. 
    
    

    QUALIFIERS

    

    /BESTTRY

    DNormally DEFRAG tries to create a contiguous file. If there is not enough Bcontiguous free space the operation will fail. With the /BESTTRY qualifier DDEFRAG tries to move the file with the contiguous-best-try method. IThis means a maximum of 3 fragments. You should only use this qualifier Gwhen a normal DEFRAG fails. If a DEFRAG/BESTTRY also fails this is an Findication that the disks free space is too fragmented. Run a REPORT command Fto see what the largest contiguous free space is, and check the free space fragmentation index. 

    /DEVICE

    GThe device on which the files reside. The device name is added to the Dfile name. If you generate a file list with the DFU SEARCH command Dyou don't need this qualifier anymore. However you may have a list Hof files produced from another source and thus need to append a device name to it. Example:

     6  DFU> SEARCH mydisk/...../frag=min=50/output=x.x    DFU> DEFRAG @x.x  
    #

    /LBN=logical-block-number

    IForces a single file to be moved to the specified logical block number. <Do not use this qualifier when processing a list of files. 

    /STATISTICS

    GThis qualifier displays the performance statistics: CPU time, Elapsed Time, I/O and PageFaults. 

    /WRITECHECK

    <Perform a writecheck on the resultant file. The default is /NOWRITECHECK. CNote that a writecheck doubles the number of involved disk I/O's. 
    

     


    5

    Chapter 6
    DELETE

    

    GThis chapter describes the DELETE command with the related parameters and qualifiers.  4

    6.1 Introduction

    

    0The DELETE command is designed for 2 purposes: 

      A
    1. Delete a file by file id (with the /FILE qualifier). This functionality Dis needed to be able to delete files which no longer have a parent directory. FThis way 'lost' files and (sometimes) files marked for delete can be removed from a disk. H
    2. A fast method to delete a complete directory or even a directory tree C(with the /DIRECTORY and /TREE qualifier). First all entries of a directory are Ddeleted without removing the directory entry ; this saves a lot of unnecessary directory updates. DFinally the directory file itself is deleted, unless the new /KEEP qualifier is used. DThis way a directory is cleaned up many times faster than with the IDCL DELETE *.* command. On large directories DFU may be even 10 or more times faster than DCL. >To delete a complete directory tree use the /TREE qualifier. =The DCL command DELETE [.SUBDIR...]*.*;* will almost always Ifail to delete the intermediate subdirectory files forcing you to issue Gthis command several times. The DFU DELETE command is smart enough to delete Ethe files and the subdirectory files in the proper order; therefore only @one command is sufficient to delete a complete directory tree. F
      The new /KEEP qualifier allows you to preserve the directory tree. DThe contents are deleted but the directory file(s) remains intact. 
    

     


    (

    DELETE

    

    Deletes files or directories. 
    
    

    Format

    0

    DELETE device[:] or directory-file(s)

    
    
    

    PARAMETERS

    

    device

    8The device on which to perform the DELETE/FILE=file-id command. 

    directory-file(s)

    <The filespecification of the directory on which to perform Ithe DELETE/DIRECTORY command. Wildcard file specifications may be used. HDFU will automatically add .DIR to the filespecification if a filetype is not provided. 
    
    

    QUALIFIERS

    

    /DIRECTORY

    ISpecify the directory file which must be deleted. Wildcards may be used Hbut must be used very carefully. Make sure that the directory does not Icontain non-empty subdirectories. Files within such a subdirectory will Fbecome lost after the DELETE/DIRECTORY command (but can be recovered *with ANALYZE/DISK/REPAIR). Note that the 6directory file itself will also be deleted. Example:  

    0


    Next page...  | ,Contents   *[DFU024.DOC]DFU024.LINE;2+,m.e/7@ 4 ee?-[0123KPWOf56}t7}t89G7@HJ 8 DFU V2.4 DFU V2.4 DFU V2.4? DFU Disk and File Utilities for OpenVMS VAX and Alpha Revision Information: Revision Information: Revision Information: This manual supersedes, V2.2c Date: Date: Date: August 1996 Operating System: Operating System: Operating System: OpenVMS VAX V5.5-2 thru@ 7.1, Alpha V6.1 thru 7.1l Note: Note: Note: Part of the Freeware. CD-ROM  2 OpenVMS Freeware for VAX and AXP Systems< The OpenVMS Freeware CD-ROM contains free software; tools and utilities to aid software developers in> creating applications and managing and using OpenVMS systems.: Many of these tools are popular packages already> widely known and in use, while others are internally: developed Digital tools our engineers are making: available to our OpenVMS customers. For example,; the OpenVMS Freeware CD-ROM includes Bliss-32 for= OpenVMS VAX, Bliss-32 for OpenVMS AXP, and Bliss-64 for OpenVMS AXP.7 Disclaimer on Testing, Quality, and Licensing@ The OpenVMS Freeware for VAX and AXP Systems CD-ROM is< provided "AS IS" without warranty. Digital imposes9 no restrictions on its distribution, nor on the> redistribution of anything on it. Be aware, however,; that some of the packages on the CD-ROM may carry; restrictions on their use imposed by the original; authors. Therefore, you should carefully read the2 documentation accompanying the products.9 Digital Equipment Corporation is providing this@ software free of charge and without warranty. Included8 in the [FREEWARE] directory on this CD are the; GNU software licenses. Unless otherwise stated in@ sources or source packages, the GNU licenses cover all' software supplied on this CD.; Digital makes no claims about the quality of this< software. It is provided to the customer as a free service. __________ Copyright August 1996  A _______________________________________________________8 Contents Contents ContentsA _______________________________________________________ CHAPTER 1 INTRODUCTION 1-1 CHAPTER 1 INTRODUCTION 1-1 CHAPTER 1 INTRODUCTION 1-1A _________________________________________________ 1.1 SUPPORT ON DFU 1-1 1.1 SUPPORT ON DFU 1-1 1.1 SUPPORT ON DFU 1-1A _________________________________________________ 1.2 GENERAL DESCRIPTION 1-1 1.2 GENERAL DESCRIPTION 1-1 1.2 GENERAL DESCRIPTION 1-1A _________________________________________________ 1.3 NEW FEATURES OF V2.4 1-3 1.3 NEW FEATURES OF V2.4 1-3 1.3 NEW FEATURES OF V2.4 1-3A _________________________________________________ 1.4 RESTRICTIONS AND PARAMETERS 1-5 1.4 RESTRICTIONS AND PARAMETERS 1-5 1.4 RESTRICTIONS AND PARAMETERS 1-5A _______________________________________________________ CHAPTER 2 USING DFU 2-1 CHAPTER 2 USING DFU 2-1 CHAPTER 2 USING DFU 2-1A _________________________________________________ 2.1 INSTALLATION PROCEDURE 2-1 2.1 INSTALLATION PROCEDURE 2-1 2.1 INSTALLATION PROCEDURE 2-1A _________________________________________________ 2.2 SECURITY AND ACCESS 2-3 2.2 SECURITY AND ACCESS 2-3 2.2 SECURITY AND ACCESS 2-3A _________________________________________________ 2.3 RUNNING DFU ~ DFU024.BCKm[[DFU024.DOC]DFU024.LINE;2 ?e8 2-4 2.3 RUNNING DFU 2-4 2.3 RUNNING DFU 2-4A _________________________________________________ 2.4 USING AN INDIRECT FILE LIST 2-5 2.4 USING AN INDIRECT FILE LIST 2-5 2.4 USING AN INDIRECT FILE LIST 2-5 iii iii iii  8 Contents Contents ContentsA _______________________________________________________ CHAPTER 3 THE SMG OUTPUT INTERFACE 3-1 CHAPTER 3 THE SMG OUTPUT INTERFACE 3-1 CHAPTER 3 THE SMG OUTPUT INTERFACE 3-1A _________________________________________________ 3.1 ENABLING/DISABLING SMG 3-1 3.1 ENABLING/DISABLING SMG 3-1 3.1 ENABLING/DISABLING SMG 3-1A _________________________________________________ 3.2 AUTOMATIC SWITCHING BETWEEN SMG AND 3.2 AUTOMATIC SWITCHING BETWEEN SMG AND 3.2 AUTOMATIC SWITCHING BETWEEN SMG AND LINE MODE 3-1 LINE MODE 3-1 LINE MODE 3-1A _________________________________________________ 3.3 LAYOUT OF THE SMG SCREEN 3-2 3.3 LAYOUT OF THE SMG SCREEN 3-2 3.3 LAYOUT OF THE SMG SCREEN 3-2A _________________________________________________ 3.4 SPECIAL SCREEN COMMANDS 3-3 3.4 SPECIAL SCREEN COMMANDS 3-3 3.4 SPECIAL SCREEN COMMANDS 3-3A _________________________________________________ 3.5 SIDE EFFECTS 3-4 3.5 SIDE EFFECTS 3-4 3.5 SIDE EFFECTS 3-4A _______________________________________________________ CHAPTER 4 DFU BASICS 4-1 CHAPTER 4 DFU BASICS 4-1 CHAPTER 4 DFU BASICS 4-1A _______________________________________________________ CHAPTER 5 DEFRAG 5-1 CHAPTER 5 DEFRAG 5-1 CHAPTER 5 DEFRAG 5-1A _________________________________________________ 5.1 DESCRIPTION 5-1 5.1 DESCRIPTION 5-1 5.1 DESCRIPTION 5-1A _________________________________________________ 5.2 ERROR MESSAGES 5-1 5.2 ERROR MESSAGES 5-1 5.2 ERROR MESSAGES 5-1 DEFRAG 5-2 DEFRAG 5-2 DEFRAG 5-2& iv iv iv  Contents Contents ContentsA _______________________________________________________ CHAPTER 6 DELETE 6-1 CHAPTER 6 DELETE 6-1 CHAPTER 6 DELETE 6-1A _________________________________________________ 6.1 INTRODUCTION 6-1 6.1 INTRODUCTION 6-1 6.1 INTRODUCTION 6-1 DELETE 6-2 DELETE 6-2 DELETE 6-2A _______________________________________________________ CHAPTER 7 DIRECTORY 7-1 CHAPTER 7 DIRECTORY 7-1 CHAPTER 7 DIRECTORY 7-1A _________________________________________________ 7.1 INTRODUCTION 7-1 7.1 INTRODUCTION 7-1 7.1 INTRODUCTION 7-1A _________________________________________________ 7.2 DISCUSSION OF DIRECTORY COMPRESSION 7-3 7.2 DISCUSSION OF DIRECTORY COMPRESSION 7-3 7.2 DISCUSSION OF DIRECTORY COMPRESSION 7-3A _________________________________________________ 7.3 OUTPUT FORMATTING 7-4 7.3 OUTPUT FORMATTING 7-4 7.3 OUTPUT FORMATTING 7-4 DIRECTORY 7-5 DIRECTORY 7-5 DIRECTORY 7-5A _______________________________________________________ CHAPTER 8 REPORT 8-1 CHAPTER 8 REPORT 8-1 CHAPTER 8 REPORT 8-1A _________________________________________________ 8.1 DESCRIPTION 8-1 8.1 DESCRIPTION 8-1 8.1 DESCRIPTION 8-1A _________________________________________________ 8.2 SYNTAX AND OUTPUT 8-1 8.2 SYNTAX AND OUTPUT 8-1 8.2 SYNTAX AND OUTPUT 8-1 REPORT 8-5 REPORT 8-5 REPORT 8-5A _______________________________________________________ CHAPTER 9 SEARCH 9-1 CHAPTER 9 SEARCH 9-1 CHAPTER 9 SEARCH 9-1A _________________________________________________ 9.1 INTRODUCTION 9-1 9.1 INTRODUCTION 9-1 9.1 INTRODUCTION 9-1 v v v  8 Contents Contents ContentsA _________________________________________________ 9.2 SYNTAX AND OUTPUT 9-1 9.2 SYNTAX AND OUTPUT 9-1 9.2 SYNTAX AND OUTPUT 9-1A _________________________________________________ 9.3 VOLUME SET PROCESSING 9-2 9.3 VOLUME SET PROCESSING 9-2 9.3 VOLUME SET PROCESSING 9-2A _________________________________________________ 9.4 OUTPUT FORMATTING 9-2 9.4 OUTPUT FORMATTING 9-2 9.4 OUTPUT FORMATTING 9-2A _________________________________________________ 9.5 UIC AND IDENTIFIER PROCESSING 9-2 9.5 UIC AND IDENTIFIER PROCESSING 9-2 9.5 UIC AND IDENTIFIER PROCESSING 9-2 SEARCH 9-3 SEARCH 9-3 SEARCH 9-3A _______________________________________________________ CHAPTER 10 SET 10-1 CHAPTER 10 SET 10-1 CHAPTER 10 SET 10-1A _________________________________________________ 10.1 INTRODUCTION 10-1 10.1 INTRODUCTION 10-1 10.1 INTRODUCTION 10-1A _________________________________________________ 10.2 UIC AND IDENTIFIER PROCESSING 10-1 10.2 UIC AND IDENTIFIER PROCESSING 10-1 10.2 UIC AND IDENTIFIER PROCESSING 10-1 SET 10-1 SET 10-1 SET 10-1A _______________________________________________________ CHAPTER 11 UNDELETE 11-1 CHAPTER 11 UNDELETE 11-1 CHAPTER 11 UNDELETE 11-1A _________________________________________________ 11.1 INTRODUCTION 11-1 11.1 INTRODUCTION 11-1 11.1 INTRODUCTION 11-1A _________________________________________________ 11.2 HOW UNDELETE WORKS 11-2 11.2 HOW UNDELETE WORKS 11-2 11.2 HOW UNDELETE WORKS 11-2A _________________________________________________ 11.3 FILES MARKED FOR DELETE 11-4 11.3 FILES MARKED FOR DELETE 11-4 11.3 FILES MARKED FOR DELETE 11-4A _________________________________________________ 11.4 UIC AND IDENTIFIER PROCESSING 11-4 11.4 UIC AND IDENTIFIER PROCESSING 11-4 11.4 UIC AND IDENTIFIER PROCESSING 11-4 UNDELETE 11-5 UNDELETE 11-5 UNDELETE 11-5& vi vi vi  Contents Contents Contents A _______________________________________________________ CHAPTER 12 SPAWN 12-1 CHAPTER 12 SPAWN 12-1 CHAPTER 12 SPAWN 12-1A _______________________________________________________S CHAPTER 13 VERIFY 13-1 CHAPTER 13 VERIFY 13-1 CHAPTER 13 VERIFY 13-1 A _________________________________________________s 13.1 INTRODUCTION 13-1 13.1 INTRODUCTION 13-1 13.1 INTRODUCTION 13-1 A _________________________________________________n 13.2 BASIC REPAIR ACTIONS 13-2 13.2 BASIC REPAIR ACTIONS 13-2 13.2 BASIC REPAIR ACTIONS 13-2OA _________________________________________________ 13.3 DIRECTORY SCANNING 13-2 13.3 DIRECTORY SCANNING 13-2 13.3 DIRECTORY SCANNING 13-2iA _________________________________________________e 13.4 ADVANCED REPAIR ACTIONS 13-3 13.4 ADVANCED REPAIR ACTIONS 13-3 13.4 ADVANCED REPAIR ACTIONS 13-3aA _________________________________________________e 13.5 INTERPRETING ERRORS 13-3 13.5 INTERPRETING ERRORS 13-3 13.5 INTERPRETING ERRORS 13-3eA _________________________________________________v 13.6 ERROR REPORTING 13-4 13.6 ERROR REPORTING 13-4 13.6 ERROR REPORTING 13-4_ VERIFY 13-10 VERIFY 13-10 VERIFY 13-10 vii D' vii vii   A _______________________________________________________ D 1 Introduction 1 Introduction 1 Introduction@ The Disk and File Utilities (DFU) is a high perfomance; tool meant as an aid to the system manager who isE; responsible for monitoring and maintaining disks,A: files and directories. It makes use of low level: I/O features of VMS. As a result a high level of= performance is reached with minimal overhead on the ; system. DFU supports all types of disk sets which 9 comply to the VMS ODS-2 standard such as volume-< sets, stripe sets , shadow sets and RAID sets, and combinations of these.< DFU does NOT work on Spiralog disks. Trying to use= DFU on spiralog disks will produce the error "%DFU-.= E-NOTF11, Device does not have an ODS-2 filesystem" .TL __________________________________________________________________J 1.1 Support on DFU 1.1 Support on DFU 1.1 Support on DFU> Although there is no official support on DFU you may> send questions/remarks/bug-reports to the author via> internet address dorland@utrtsc.enet.dec.com. A next= version of DFU will no longer work on VMS 5.5-2 andP VMS 6.0.L __________________________________________________________________Y 1.2 General description 1.2 General description 1.2 General description_? DFU provides the following functions (in alphabeticalI order) :A o DEFRAG : This function allows simple defragmentation * of a file or a list of files. 1-1 1-1 1-1N F D Introduction Introduction Introduction= o DELETE : This function allows either a delete by_A file-id, or a fast delete of a complete directory orS8 directory tree with all its subdirectories.6 o DIRECTORY : This function has 6 options :# 1 COMPRESS a directory. 2 DUMP a directory block by block: 3 CREATE a directory with a preallocated size; 4 Search all directories on the disk for files + which have multiple versions@ 5 Search all directories on the disk for alias file entries; 6 Search all directories on the disk for empty  directories@ o REPORT : Generates a file and free space report for= a disk. Also a disk space usage report, based on > UIC's or identifiers, can be generated, even on a0 disk which has disk quota disabled.> o SEARCH : Look up files on a disk by specific file? attributes (eg. files sizes, dates, ownership, and  so on)G8 o SET : This functions allows setting of file; attributes which are not available through DCLA commands.6 o UNDELETE : A safe file recovery function.8 o VERIFY : This function performs a fast disk= structure verification and can optionally repair ; certain disk structure errors (comparable with " ANALYZE/DISK/REPAIR).5 Each function is described in detail in the corresponding chapter.) 1-2 1-2 1-2A T Introduction Introduction Introduction_> DFU is supported on OpenVMS VAX V5.5-2 through V7.1,? and OpenVMS Alpha V6.1 thru V7.1. DFU has been testedM: on the Field test versions of VMS 7.1; so far no9 problems have been found. The official freeware_> release of DFU will be distributed with the official release of VMS V7.1.L __________________________________________________________________\ 1.3 New features of V2.4 1.3 New features of V2.4 1.3 New features of V2.4= This version of DFU offers several improved and newD< features, as well as a couple of bugfixes. The new% functions and features are: @ o Improved handling of UIC's and Identifiers. DFU nowA accepts all valid numeric and alphanumeric UIC's and_? identifiers. This option is used in the /OWNER and @ /IDENTIFIER qualifier. The SEARCH, SET and UNDELETE+ commands use these qualifiers. = o In some cases the DFU_ALLPRIV identifier was too_@ restrictive; therefore it has been removed from the@ DIRECTORY/COMPRESS, DELETE/DIR and the SET command.< o Output formatting is now possible on the SEARCH; and DIRECTORY/VERSION commands via the /FORMAT_> qualifier. This allows the building of action DCLA command procedures directly from the output of these  commands.= o Output file handling : the new /APPEND qualifier @ allows DFU to add output to an existing output file+ instead of creating a new one. > o DELETE/DIRECTORY : the new /KEEP qualifier allows9 preservation of the directory tree; only the * directory content is deleted.< o SEARCH : added the /OVER_ALLOCATED qualifier to- search for over allocated files. 1-3 1-3 1-3   D Introduction Introduction Introduction? o REPORT : Several new qualifiers allow control over = the output. The /USAGE qualifier can now also be= used as /USAGE= to report a specific uic or  identifier.; o UNDELETE: ability to undelete files marked for  delete = o VERIFY : several enhancements. VERIFY /DIRECTORY < allows a complete directory check; this results= in better detection of lost files and some cases = of directory problems. Note that /DIRECTORY_SCAN_@ replaces the DIRECTORY/CHECK comand. Also incorrect@ backlinks of the Master File Directory (000000.DIR)@ can now be repaired. Finally the output of multiple? allocated blocks has been improved ( is now sorted_ by LBN's).- The following bugs have been fixed: : o On VAX/VMS V5.5-2 without the patch on SMGSHR> installed, DFU could exit with an ACCVIO error. A@ workaround has been build in to avoid this problem.> o When processing a corrupt directory DFU could end@ with an ACCVIO error. This has been fixed by better, checking of the directory file.. o SET/MAXREC did not work properly.A o If, during an UNDELETE command CTRL/Y was entered an? extra RETURN had to be given to abort the UNDELETE ( command. This is now fixed.? o VERIFY/FIX and UNDELETE did not always reenter the < file with its original version number. DFU will@ now enter the file with the correct version number,> or the next higher version if the current version already exists.A o Issue a correct error message when trying to use DFU : on non ODS-2 disks such as a Spiralog volume.) 1-4 1-4 1-4   Introduction Introduction Introduction < o In a batch job DFU could produce unwanted blank: pages when the logical DFU$NOSMG was defined.L __________________________________________________________________q 1.4 Restrictions and Parameters 1.4 Restrictions and Parameters 1.4 Restrictions and Parameters 2 The DFU program has a few restrictions := o DFU can not handle volume sets with more than 32  members. ? o Due to changes in VMS run time libraries for DEC CTA DFU.EXE files linked on VMS 6.2 cannot be run on VMS_@ 6.1 and lower without relinking the image. The best; solution is to reinstall DFU on those systems. > o The SMG interface may not work at all on VMS 5.5-< 2. In that case you need to install CSCPAT_0320> and re-install DFU. Warning: CSCPAT_0320 replaces: SMGSHR.EXE and may have side effects on other- applications using SMG routines. > The following minimum process quotas are recommended for DFU usage: o WSQUOTA : 1500  o WSEXTENT : 3000 o DIOLM : 40  o ASTLM : 40  o FILLM : 40  o BYTLM : 30000 o PGFLQUOTA : 30000> If you use DFU on volume sets with a large number of? members you may need to increase the SYSGEN parameter CHANNELCNT.Y 1-5 1-5 1-5_ _ _D Introduction Introduction Introduction8 If you use the directory command on very large= directory files (> 1000 blocks) and run into errorsE< you may need to increase the following parameters:> o WSQUOTA at least 1000 + size-of-largest directory file / o WSEXTENT : WSQUOTA + at least 1000A7 o CTLPAGES (SYSGEN parameter) : at least 100T9 o WSMAX (SYSGEN parameter) : at least WSEXTENT_= Do not change parameters unless you run into errors.< such as EXCEEDED QUOTA or INSUFFICIENT WORKING SET LIMITS.N) 1-6 1-6 1-6  - A _______________________________________________________ ; 2 Using DFU 2 Using DFU 2 Using DFU ? This chapter describes the installation procedure and_7 other actions which must be taken to run DFU. L __________________________________________________________________b 2.1 Installation procedure 2.1 Installation procedure 2.1 Installation procedure: DFU can be installed with the VMSINSTAL utility.? During the installation VMSINSTAL does the following: ; o Moves the documentation to SYS$HELP (Optional)  o Relinks DFUA o Creates the DFU_ALLPRIV identifier needed to perform_5 the special functions. (See chapter 2.2) 9 The DFU utility in fact contains just 2 files : & 1 DFU.EXE : the DFU program/ 2 DFUHLP.HLB : the on-line help fileR= DFU.EXE will be moved to SYS$SYSTEM, and DFUHLP.HLB $ will be moved to SYS$HELP.< You can optionally get documentation of DFU during? installation. To install DFU log in into a privileged_ account and enter :_2 $ @sys$update:vmsinstalQ VAX/VMS Software Product Installation Procedure V6.218 It is 01-Aug-1996 at 13:46.L Enter a question mark (?) at any time for help.[ * Are you satisfied with the backup of your system disk [YES]?D 2-1 2-1 2-1  E E; Using DFU Using DFU Using DFUE; VMSINSTAL now asks for the distribution media andS? product. You can also specify the directory where you_> have the DFU_FREEWARE_024.A file instead of a device name: V * Where will the distribution volumes be mounted: [DDCU:]g Enter the products to be processed from the first distribution volume set._9 * Products: DFU_FREEWARE_024RQ * Enter installation options you wish to use (none): F The following products will be processed:5 DFU_FREEWARE_ 2.41S Beginning installation of DFU_FREEWARE_ V2.4 at 13:46 S %VMSINSTAL-I-RESTORE, Restoring product save set A ...7 Installing DFU version 2.4n3 The next question will prompt you for the 7 documentation files. The DFU documentation is 9 available in Line printer, PostScript, HTML and_< Bookreader format. The documentation files will be copied to SYS$HELP. Y * Do you want the documentation in Lineprinter format ? [Y]?HQ %VMSINSTAL-I-DOCMOVED, DFU024.LINE moved to SYS$HELP_^ * Do you want the documentation in PostScript(TM) format ? [N]?X * Do you want the documentation in Bookreader format ? [N]?R * Do you want the documentation in HTML format ? [N]?8 VMSINSTAL now links the DFU image and adds the? identifier to the Rightslist (see chapter 2.2 for the3% meaning of the identifier). 2 Linking DFU image ...C %DFU-I-LINK, Linking DFU 2.4 image..._9 %DFU-S-DONE, DFU.EXE createdT) 2-2 2-2 2-23  I Using DFU Using DFU Using DFUE? Next VMSINSTAL will create the DFU_ALLPRIV identifierN if necessary.1] %VMSINSTAL-I-ACCOUNT, This installation adds an identifier named_+ DFU_ALLPRIV. ` %UAF-I-RDBADDMSG, identifier DFU_ALLPRIV value: %X80010008 added to/ rights data base3U %VMSINSTAL-I-MOVEFILES, Files will now be moved to their_3 target directories...NI Installation of DFU V2.4 completed at 13:47E< You must grant any DFU user including yourself the? necessary DFU_ALLPRIV identifier if a user be allowed_? to use the special DFU functions. See chapter 2.2 for ) the meaning of this identifier. L __________________________________________________________________Y 2.2 Security and access 2.2 Security and access 2.2 Security and access 7 DFU has some functions which must not be made : available for general usage. Therefore DFU has 2 groups of functions : 1 Normal functions  1 DELETE/DIRECTORY  2 DIRECTORY 3 REPORT  4 SEARCH  5 SET 6 SPAWN< 7 VERIFY (except VERIFY/FIX and VERIFY/REBUILD) 2 Special functions 1 DEFRAGc 2-3 2-3 2-3n l o; Using DFU Using DFU Using DFUr 2 DELETE/FILE 3 UNDELETE , 4 VERIFY/FIX and VERIFY/REBUILD? The normal functions need SYSPRV or BYPASS privilege.p8 The special functions require BYPASS privilege8 as well as the DFU_ALLPRIV identifier granted.: The DFU_ALLPRIV identifier is created during the= installation procedure. To enable a user to perform.> special functions the system manager must grant this! identifier as follows : ) h-~ DFU024.BCKm[[DFU024.DOC]DFU024.LINE;2 ?e>|I $ mc authorize = UAF> grant/id DFU_ALLPRIV username_= It is highly recommended that special functions areS* NOT made available to the world.L __________________________________________________________________A 2.3 Running DFU 2.3 Running DFU 2.3 Running DFUe$ To run DFU you can enter :0 $ RUN disk:[mydir]DFU. or (if DFU is installed systemwide):# $ MC DFU_9 You can also define and use a symbol for DFU as  follows:* $ DFU == "$DFU" $ DFU DFU now prompts with :K Disk and File Utilities for OpenVMS DFU V2.4 / Freeware version O Copyright (C) 1996 Digital Equipment Corporation  DFU> ) 2-4 2-4 2-4   Using DFU Using DFU Using DFUf? You can now enter DFU commands. HELP gives you onlinel: help. After each command DFU returns to the DFU>@ prompt. You can recall and edit commands, just as with@ DCL (20 commands will be stored in the recall buffer).> Use EXIT or CTRL/Z to leave DFU. If you use a symbol@ for DFU , you also process a single command and return to DCL immediately: 6 $DFU SEARCH disk/qualifiers> During a DFU run , you can interrupt DFU with CTRL/C; or CTRL/Y. These interrupts are catched by DFU to < allow a correct rundown of the current command. It? may therefore take some time before DFU responds to a CTRL/C or Y interrupt.L __________________________________________________________________q 2.4 Using an indirect file list 2.4 Using an indirect file list 2.4 Using an indirect file listn? There are 3 commands, DIRECTORY, DEFRAG and SET whichs= accept an indirect file as input parameter. This isl; achieved by using the @ sign. An indirect file isT; a file containing a list of valid filenames (eachh= line in such a file must contain exactly one file).c? Such indirect files can be the output file of the DFUt Search command eg.: $ DFUG DFU> SEARCH mydisk/CHAR=DIRECTORY/OUTPUT=x.xo7 DFU> DIRECTORY/COMPRESS @x.x- 2-5 2-5 2-5  A _______________________________________________________Mh 3 The SMG output interface 3 The SMG output interface 3 The SMG output interface< As of version V2.2 DFU uses SMG (Screen management< routines) to perform output for an interactive DFU; session. This chapter describes the layout of the_; DFU screen, the special commands used only in thet? SMG interface and other items with respect to the SMGs interface.L __________________________________________________________________b 3.1 Enabling/Disabling SMG 3.1 Enabling/Disabling SMG 3.1 Enabling/Disabling SMG< DFU automatically selects SMG output if you run an> interactive DFU session on a terminal or workstation9 which supports SMG. In a batch job or a non-DEC < terminal DFU will use normal line oriented output.@ You can explicitly disable SMG by defining the logical! DFU$NOSMG to any value._L __________________________________________________________________ 3.2 Automatic switching between SMG and Line mode 3.2 Automatic switching between SMG and Line mode 3.2 Automatic switching between SMG and Line modeF? You may prefer to perform interactive DFU sessions inD@ SMG mode, and single DFU commands in normal line mode.@ This can be done by using the command procedure listed below: 3-1 3-1 3-1  t dh The SMG output interface The SMG output interface The SMG output interfaceJ $! Procedure to switch beteen SMG and line mode) $ DFU = "$DFU" + $ if p1 .eqs. "" ! $ then 0 $!Interactive seesion; $ def/user sys$input sys$commando $ dfu! $ elsea: $!Single command so disable SMG1 $ def/user dfu$nosmg x H $ dfu 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'" $ endif! $ exit L __________________________________________________________________h 3.3 Layout of the SMG screen 3.3 Layout of the SMG screen 3.3 Layout of the SMG screen: After starting DFU the screen looks as follows :h +-----------------------< DFU V2.4 (Freeware ) >----------------------------+h | |h | Disk and File Utilities for OpenVMS DFU V2.4 |h | Freeware version |h | Copyright 1996 Digital Equipment Corporation |h | |h | DFU functions are : |h | |h | DEFRAGMENT : Defragment files |h | DELETE : Delete files by File-ID; delete directory (trees) |h | DIRECTORY : Manipulate directories |h | REPORT : Generate a complete disk report |h | SEARCH : Fast file search |h | SET : Modify file attributes |h | UNDELETE : Recover deleted files |h | VERIFY : Check and repair disk structure |h | |h | |h +----------------------------------Statistics-------------------------------+h | |) 3-2 3-2 3-2r e o The SMG output interface The SMG output interface The SMG output interface h | |h +---------------------------------------------------------------------------+ DFU>1 This screen is divided into 3 sections: = o Main Screen : the top part of the screen is used = for the output from DFU commands. Also broadcast . messages are send to this window.A o Statistics : the lower part contains statistics fromB= the current command. During most of the commandsy@ this screen will contain a progress indicator and a, status for the current command.> o DFU prompt : the bottom line is used as the input command line.L __________________________________________________________________e 3.4 Special Screen commands 3.4 Special Screen commands 3.4 Special Screen commandso8 In SMG mode the following keys perform special functions :d9 o DO : invokes a subprocess (same as the SPAWN  command) ? o HELP or PF2 : invokes a special SMG window for the  help command.( o CTRL/W : redraws the screen; o PF4 : creates a screen dump into the file DFU_  SCREEN.TXTa: o PREV SCREEN : Scrolls back the output screen.< o NEXT SCREEN : Scrolls forward the output screen9 o SELECT : Toggles between 80 and 132 columns. 3-3 3-3 3-3_ _ _h The SMG output interface The SMG output interface The SMG output interface? Although only some 20 lines are visible in the output ? (main) screen DFU in fact remembers 500 output lines._= You can scroll back and forward through these linesi> with the NEXT and PREV SCREEN keys. At the beginning: of each new DFU command these lines are cleared.? On a workstation with DecWindows/Motif you can changet: the DecTerm size to be more than the standard 24; lines. DFU's SMG screen will automatically adjust / to the screen size of such a DecTerm.fL __________________________________________________________________D 3.5 Side effects 3.5 Side effects 3.5 Side effects; There are a few side effects when using SMG mode.R@ CTRL/C and CTRL/Y are catched but not echoed. Also all> broadcast messages are trapped and will be displayed: in the main screen at the end of the current DFU? command. Sometimes this may slightly disrupt the mainn< screen, which can be repaired with the CTRL/W key.< Further, during the execution of a DFU command the? cursor will disappear. After the command finishes the-2 cursor will reappear at the DFU> prompt.) 3-4 3-4 3-4   AA _______________________________________________________ > 4 DFU basics 4 DFU basics 4 DFU basics> Note : this chapter is meant for first time users of> DFU. If you already used DFU before you may probably skip this chapter.= This chapter gives a brief overview of the commandsr> which can be used with DFU, and how they can provide< the system manager with the necessary information.; One of most common actions by a system manager is : trying to locate specific files eg. files with a< certain file size. Although a lot can be done with@ the VMS DIRECTORY command this can be a time consuming; process , especially if the complete disk much be = scanned. The SEARCH command of DFU is exactly meanth; for this situation. It gives a very quick list ofg< specific files, with their size, and if needed the@ number of file fragments. Some usefull SEARCH commands are :DS DFU> SEARCH disk/SIZE=MINIMUM=1000 (files > 1000 blocks)oP DFU> SEARCH disk/IDENT=SYSTEM (files owned by SYSTEM)b DFU> SEARCH disk/FRAGMENT=MINIMUM=10 (files with at least 10 fragments)U DFU> SEARCH disk/CHAR=MARKED (all files marked for delete) g DFU> SEARCH disk/CREATED=SINCE=YESTERDAY (all files created since YESTERDAY) > Of course these qualifiers can be combined to narrow< the search. As the SEARCH command scans INDEXF.SYS; , not directories, the output generated by SEARCH < may look a bit random (but it is just the order in@ which the file headers are in the INDEXF.SYS file). To4 smooth the output use the /SORT qualifier. 4-1 4-1 4-1f e e> DFU basics DFU basics DFU basics= Another important action for a system manager is to ? gather some overall disk information , such as number < of files , free space statistics and fragmentation< information. The REPORT command will generate such; a disk report. To get individual disk space usage < information the /USAGE qualifier can be used. This= will work even if there is no disk quota enabled one the disk.f; At regular intervals a system manager may need toN@ check a disk with ANALYZE/DISK. The DFU VERIFY command? provides more or less the same functionality but manyD? times faster. The /FIX qualifier provides some REPAIR ; options which (unlike ANALYZE/DISK/REPAIR) do NOT = lock the disk, and thus do not interfere with other ; disk operations. However, the disk can be rebuild5 completely by using the /REBUILD qualifier. @ Occasionaly a user will delete the wrong file, leaving> the system manager or operator with the tedious task? of restoring the file from a backup set. The UNDELETEe? command may be able to recover the file if it has not< yet been overwritten with a new one. Much care has> been taken to make this command as safe as possible;@ therefore no disk corruptions will be the result of an> UNDELETE. If DFU encounters a problem with a deleted- file it will refuse to UNDELETE it.r? Another type of typical system manager problems deals @ with directories. The DFU command DIRECTORY can handle= such problems. DIRECTORY can generate reports about = empty directories (/EMPTY qualifier) or directoriesa@ which contains files with a certain number of versions? (/VERSION=n qualifier). Also , directories may become ; internally fragmented which degrades performance. = This can be quickly solved by using DFU's directory 0 compressing (the /COMPRESS qualifier).) 4-2 4-2 4-2  DFU basics DFU basics DFU basics < A second problem with directories is in deleting a> directory with many files. On large directories this@ may take several hours using a DCL DELETE *.* command.@ This problem is solved by using DFU's DELETE/DIRECTORY< command which can delete large directories some 10; times faster than the normal DELETE command does./< Also, using DELETE/DIR/TREE will delete a complete/ directory tree with just one command.a= The last 2 commands deal with individual files. SET_: allows settings of some special file attributes.< Since VMS V6.0 this functionality is also provided> by the DCL SET FILE/ATTRIBUTE command, but DFU's SET< offers some more options. The DEFRAG command is an? interface to the MOVEFILE function offered by VMS 5.5o= and higher. This allows a simple defragmentation of  individual files.=@ The next chapters gives a detailed description of each! individual DFU command. 4-3 4-3 4-3   A _______________________________________________________ 2 5 DEFRAG 5 DEFRAG 5 DEFRAG< This chapter describes the DEFRAG command with the, related parameters and qualifiers.L __________________________________________________________________A 5.1 Description 5.1 Description 5.1 Descriptionl? The DEFRAG command can be used to defragment a singlee9 file or a group of files. You can also enter anZ; indirect command file containing a list of files.l? This feature allows you to create an output file withe4 SEARCH and use that as an input to DEFRAG.9 DEFRAG makes use of the file-primitive MOVEFILEU< function. Therefore files which are open, or which? are marked NOMOVE will not be DEFRAGmented. Still youm? should be cautious about using DEFRAG. You should notn9 make this function available for general usage._L __________________________________________________________________J 5.2 Error messages 5.2 Error messages 5.2 Error messages9 The most common errors returned by DEFRAG are :E5 o ACCONFLICT: File is open by another usert> o DEVICEFULL: Device has not enough contiguous free* space to move the entire file4 o FILNOTACC: File has been set to NOMOVE.> o FILENUMCHK: You tried to move a reserved file (eg INDEXF.SYS).e> o RMS Errors: Almost always caused by an invalid or% wrong file specifcation. 5-1 5-1 5-1  - J DEFRAG command DEFRAG command DEFRAG commandJ Error messages Error messages Error messagesA _______________________________________________________ 2 DEFRAG DEFRAG DEFRAG; Defragment a file or a list of files on the disk.oA _______________________________________________________o2 FORMAT FORMAT FORMAT DEFRAG DEFRAG DEFRAG ____________________ file1,file2,@file... file1,file2,@file... file1,file2,@file...A _______________________________________________________> PARAMETERS PARAMETERS PARAMETERS{ ____________________ file1,file2,@file... file1,file2,@file... file1,file2,@file...e= The file(s) to be defragmented. You can also use anG@ indirect command file (@file) which contains a list of> files to be defragmented. This may be an output file3 generated with the SEARCH/OUTPUT command.aA ________________________________________________________> QUALIFIERS QUALIFIERS QUALIFIERSK ________ /BESTTRY /BESTTRY /BESTTRY < Normally DEFRAG tries to create a contiguous file.: If there is not enough contiguous free space the: operation will fail. With the /BESTTRY qualifier< DEFRAG tries to move the file with the contiguous-? best-try method. This means a maximum of 3 fragments. : You should only use this qualifier when a normal; DEFRAG fails. If a DEFRAG/BESTTRY also fails this ; is an indication that the disks free space is too: fragmented. Run a REPORT command to see what the> largest contiguous free space is, and check the free$ space fragmentation index.) 5-2 5-2 5-2   DEFRAG command DEFRAG command DEFRAG commando DEFRAG DEFRAG DEFRAG G _______ /DEVICE /DEVICE /DEVICE ? The device on which the files reside. The device name ; is added to the file name. If you generate a file_> list with the DFU SEARCH command you don't need this; qualifier anymore. However you may have a list of = files produced from another source and thus need to . append a device name to it. Example:L DFU> SEARCH mydisk/...../frag=min=50/output=x.x- DFU> DEFRAG @x.x _________________________ /LBN=logical-block-number /LBN=logical-block-number /LBN=logical-block-number ; Forces a single file to be moved to the specified > logical block number. Do not use this qualifier when% processing a list of files.oW ___________ /STATISTICS /STATISTICS /STATISTICS = This qualifier displays the performance statistics: 5 CPU time, Elapsed Time, I/O and PageFaults. W ___________ /WRITECHECK /WRITECHECK /WRITECHECK 9 Perform a writecheck on the resultant file. The : default is /NOWRITECHECK. Note that a writecheck4 doubles the number of involved disk I/O's. 5-3 5-3 5-3  e e2 DEFRAG DEFRAG DEFRAG) 5-4 5-4 5-4  T A _______________________________________________________ 2 6 DELETE 6 DELETE 6 DELETE< This chapter describes the DELETE command with the, related parameters and qualifiers.L __________________________________________________________________D 6.1 Introduction 6.1 Introduction 6.1 Introduction8 The DELETE command is designed for 2 purposes:A 1 Delete a file by file id (with the /FILE qualifier).-> This functionality is needed to be able to delete@ files which no longer have a parent directory. This> way 'lost' files and (sometimes) files marked for/ delete can be removed from a disk. < 2 A fast method to delete a complete directory or; even a directory tree (with the /DIRECTORY and ? /TREE qualifier). First all entries of a directory? are deleted without removing the directory entry ; ? this saves a lot of unnecessary directory updates. : Finally the directory file itself is deleted,? unless the new /KEEP qualifier is used. This way a @ directory is cleaned up many times faster than with= the DCL DELETE *.* command. On large directorieso> DFU may be even 10 or more times faster than DCL.> To delete a complete directory tree use the /TREE@ qualifier. The DCL command DELETE [.SUBDIR...]*.*;*? will almost always fail to delete the intermediateiA subdirectory files forcing you to issue this commando; several times. The DFU DELETE command is smarts< enough to delete the files and the subdirectory: files in the proper order; therefore only oneA command is sufficient to delete a complete directory  tree. 6-1 6-1 6-1H  PJ DELETE command DELETE command DELETE commandD Introduction Introduction Introduction? The new /KEEP qualifier allows you to preserve theE= directory tree. The contents are deleted but the . directory file(s) remains intact.A _______________________________________________________ 2 DELETE DELETE DELETE' Deletes files or directories. A _______________________________________________________ 2 FORMAT FORMAT FORMAT DELETE DELETE DELETE _________ __ _________________ device[:] or directory-file(s) device[:] or directory-file(s) device[:] or directory-file(s)A _______________________________________________________R> PARAMETERS PARAMETERS PARAMETERSC ______ device device deviceo@ The device on which to perform the DELETE/FILE=file-id command.o _________________ directory-file(s) directory-file(s) directory-file(s) < The filespecification of the directory on which to= perform the DELETE/DIRECTORY command. Wildcard file < specifications may be used. DFU will automatically@ add .DIR to the filespecification if a filetype is not provided.lA _______________________________________________________ > QUALIFIERS QUALIFIERS QUALIFIERSS __________ /DIRECTORY /DIRECTORY /DIRECTORYe; Specify the directory file which must be deleted.h@ Wildcards may be used but must be used very carefully.< Make sure that the directory does not contain non-@ empty subdirectories. Files within such a subdirectory= will become lost after the DELETE/DIRECTORY command ? (but can be recovered with ANALYZE/DISK/REPAIR). Note4) 6-2 6-2 6-2  F a DELETE command DELETE command DELETE commandb DELETE DELETE DELETE > that the directory file itself will also be deleted. Example:( $ DIR EXAMPLE5 Directory MYDISK:[RUBBISH] ( EXAMPLE.DIR;1 $ DFU< DFU> DELETE/DIRECTORY EXAMPLE.DIRT %DFU-I-CLEANUP, Deleting MYDISK:[RUBBISH]EXAMPLE.DIR;1...D %DFU-S-DELETED, File DBGINI.COM;3 deletedB %DFU-S-DELETED, File ICON.COM;1 deletedD %DFU-S-DELETED, File I_FOOL.COM;1 deletedG %DFU-S-DELETED, File LOGICALS.COM;51 deletedSD %DFU-S-DELETED, File LOGIN.COM;79 deletedD %DFU-S-DELETED, File LOGOUT.COM;4 deletedK %DFU-S-DELETED, File NOTE_COMPRESS.COM;3 deleted D %DFU-S-DELETED, File SHOWCL.COM;3 deletedF %DFU-S-DELETED, File SYMBOLS.COM;89 deletedF %DFU-S-DELETED, File TPUBUILD.COM;5 deleted; %DFU-S-TOTAL, 11 file(s) deleted E %DFU-S-DELETED, File EXAMPLE.DIR;1 deletedh_ _____________ /FILE=file-id /FILE=file-id /FILE=file-idl> Specify a complete file-id (num,seq,rvn) of the file: which must be deleted. This qualifier allows the< deletion of lost files or files marked for delete. Example : $ DFU. DFU> VERIFY MYDISK:F %DFU-S-CHKHOME, Home block info verified OK@ %DFU-I-IFSCAN, Scanning INDEXF.SYS...c %DFU-E-INVBAKFID, file (86,17915,1) 0004CF04$BFS.;1 has invalid backlink e %DFU-W-DELETED, file (537,2878,1) APPL_UTRYIT_BOOK.TMP;1 marked for delete  .d .n .l 6-3 6-3 6-3f t aJ DELETE command DELETE command DELETE command2 DELETE DELETE DELETE? DFU> DELETE MYDISK/FILE=(86,17915,1) G %DFU-S-DELETED, File 0004CF04$BFS.;1 deleted ? DFU> DELETE MYDISK/FILE=(537,2878,1)lN %DFU-S-DELETED, File APPL_UTRYIT_BOOK.TMP;1 deleted? _____ /KEEP /KEEP /KEEPa@ Preserve the directory tree; only delete the contents.< /KEEP is only valid with the /DIRECTORY qualifier.9 /KEEP works for DELETE/DIR and DELETE/DIR/TREE.iC ______ /NOLOG /NOLOG /NOLOG > Do not log succesfull deletes to SYS$OUTPUT. /LOG is the default.O _________ /NOREMOVE /NOREMOVE /NOREMOVEa? Can only be used with /FILE. Default DELETE/FILE will ; try to rem Nh~ DFU024.BCKm[[DFU024.DOC]DFU024.LINE;2 ?eove the file from the parent directory.R< If the file's backlink no longer points to a valid> directory this will generate an error. The /NOREMOVE@ qualifier overrules this behaviour allowing such files to be deleted.W ___________ /STATISTICS /STATISTICS /STATISTICSc= This qualifier displays the performance statistics:e5 CPU time, Elapsed Time, I/O and PageFaults. ? _____ /TREE /TREE /TREE 6 Can only be used with /DIRECTORY. The delete; command will delete all subdirectories within the ; directory file specified. DFU will first sort out< the subdirectory tree and than delete the files in= the proper order. Thus a complete directory tree iss# deleted with one command.i) 6-4 6-4 6-4  v b DELETE DELETE DELETEt 6-5 6-5 6-5T o nA _______________________________________________________ ; 7 DIRECTORY 7 DIRECTORY 7 DIRECTORY ? This chapter describes the DIRECTORY command with the , related parameters and qualifiers.L __________________________________________________________________D 7.1 Introduction 7.1 Introduction 7.1 Introduction; The DIRECTORY command offers 6 major functions. 3 < functions deal with all directories on a disk, the@ other 3 functions are used for manipulating individual? directories. These functions are activated by special qualifiers: - o Individual directory functions :s? 1 /COMPRESS : Rebuild one or more directory files.a= Directories are alphabetically sorted lists of_: filenames and file id's. Because file names< are randomly inserted and deleted, holes will= occur in directory files. Such holes will only ? be reused if a file can be alphabetically fittedn> into it. As a result directory files will grow.> Especially MAIL subdirectories suffer from this behaviour.u> To make matters worse directory files above 127: blocks will no longer be cached by the file< system. This will degrade performance on such> directories dramatically. The COMPRESS function< will rebuild the complete directory file. The9 /TEST qualifier can be used to preview the_6 results of a possible COMPRESS command.= 2 /CREATE/ALLOCATE=n : Create a directory with a = preallocated size of 'n' blocks. Note that 'n' < will be rounded up to a multiple of the disks cluster size. 7-1 7-1 7-1I X Y; DIRECTORY DIRECTORY DIRECTORYi> 3 /DUMP : Make a dump of the directory blocks and= formats the output. This option is usefull for < debugging directory files which are suspected8 or corrupted. This function is equivalent9 to the previously undocumented VMS command @ DUMP/DIRECTORY, although the layout of the output is different., o Disk-wide directory functions :< 1 /ALIAS : Scan all directories on the disk for" alias file entries.; 2 /EMPTY : Scan the disk for empty directories_@ 3 /VERSION=n : Scan all directories on the disk for6 files which have at least 'n' versions.9 The diskwide function qualifiers can be used in_; one command; other combinations of qualifiers are 8 not possible. Note that the diskwide directory@ functions can take several minutes to complete because: a complete directory scan uses a lot of disk I/O0 (approximately 2 I/O's per directory).= An indirect command file containing a list of files ; can be used as a parameter to /COMPRESS or /DUMP.g? Such a list can be generated with the SEARCH command.i Example:J DFU> SEARCH disk/FILE=*.DIR/SIZE=MIN=50/OUT=x.x7 DFU> DIRECTORY/COMPRESS @x.x 8 Caution: Care should be taken when compressing< critical system directories. To be safe you should: first use the /TEST qualifier before compressing9 the directory. Another problem may be caused byc: a systemcrash just when DFU is rewriting the new8 compressed directory (although the chance that< this happens is very small). When this happens you) 7-2 7-2 7-2y t . DIRECTORY DIRECTORY DIRECTORY : can recover the files by executing the following procedure:< 1 Do a $SET FILE/NODIR of the corrupted directory6 2 Delete the directory and create a new one? 3 Do a $ANALYZE/DISK/REPAIR ; this will move all the % lost files to [SYSLOST]. ? 4 Move the files from [SYSLOST] to the newly created  directory. L __________________________________________________________________ 7.2 Discussion of directory compression 7.2 Discussion of directory compression 7.2 Discussion of directory compressionF: Version V2.2 of DFU introduced a major change in: the directory compression process (issued by the: DIRECTORY/COMPRESS command). Previously versions; always performed ab maximum compression , and then @ truncated the resultant directory. This may be usefull= on a dormant directory , but on an active directoryn. this method introduced new problems:? o When new files were added to the directory it must > very quickly be extended. Not only is this a slowA operation, but on a fragmented disk this can lead to  DIRALLOC errors.e; o Active directories where files are inserted ino= a random alphabetical order very quickly lead top8 expansion of the just compressed directory.9 The first problem is now solved by NOT doing an > automatic TRUNCATION of the directory. The /TRUNCATE= qualifier has been added to allow truncation on thef= users request. Also /TRUNCATE=blocksize is possible > to perform partial truncation; DFU will not truncate> below the blocksize issued in /TRUNCATE. (The actual; blocksize will be rounded up to a multiple of theO> disks cluster size.) The second problem is solved by@ the new /FILL_FACTOR qualifier. Here a user can direct 7-3 7-3 7-3  ; DIRECTORY DIRECTORY DIRECTORY: DFU to fill each directory block up to a certain9 percentage (between 50 and 100). Not specifying< /FILL_FACTOR is the same as doing /FILL_FACTOR=100? (full compression). Note however that the directory'sE> allocated size must be large enough to allow a lower= fill factor. If that is not possible DFU will issue 9 a DFU-E-EXTERR error, and you must use a higher_< fill factor. So, what strategy should be used when# comnpressing directories?E> 1 Inactive directories : use DIR/COMPRESS/TRUNCATE.< 2 Not very active diredctories : use DIR/COMPRESS (/TRUNCATE=n).b@ 3 Active directories, files added at the end (such as1 MAIL directories) : use DIR/COMPRESSt6 4 Active directories, files added in random@ alphabetical order : use DIR/COMPRESS/FILL_FACTOR=nL __________________________________________________________________S 7.3 Output formatting 7.3 Output formatting 7.3 Output formattingw2 A new qualifier /FORMAT can be used with: DIRECTORY/VERSION. This allows the build up of a> command procedure directly from the output generated? by the DIR/VERSION command. /FORMAT has the following  restrictions :< 1 /FORMAT is only valid with the /VERSION and the /OUTPUT qualifier. 8 2 The format string used must contain the !AS= directive (in uppercase). The file found will be , substituted at the !AS location Example:^ DFU> DIR/VERSION=4/OUTP=PURGE.COM/FORMAT="$PURGE/KEEP=3 !AS" mydisk) 7-4 7-4 7-4s r t DIRECTORY command DIRECTORY command DIRECTORY commande DIRECTORY DIRECTORY DIRECTORY A _______________________________________________________E; DIRECTORY DIRECTORY DIRECTORY ' Performs directory functions. A _______________________________________________________l2 FORMAT FORMAT FORMAT  DIRECTORY DIRECTORY DIRECTORY _________ __ _________________ device[:] or directory-file(s) device[:] or directory-file(s) device[:] or directory-file(s)_A _______________________________________________________T> PARAMETERS PARAMETERS PARAMETERSC ______ device device device_< The device on which to perform one of the diskwide directory functions.s __________________ directory-files(s) directory-files(s) directory-files(s)_= The file specification of the directory on which toA< perform the /CREATE , /COMPRESS or /DUMP function.< Wildcard file specifications may be used. DFU will> automatically add .DIR to the filespecification if a# filetype is not provided. A _______________________________________________________i> QUALIFIERS QUALIFIERS QUALIFIERSC ______ /ALIAS /ALIAS /ALIASm6 The /ALIAS qualifier directs DFU to scan all> directories for alias file entries. Only alias files= in DIFFERENT directories will be found (this is the_? most common situation). Normally only the system diskU; should contain alias files. This qualifier can be . combined with /VERSION=n and /EMPTY.W ___________ /ALLOCATE=n /ALLOCATE=n /ALLOCATE=n ; Used in combination with /CREATE. Creates the newd9 directory with an allocated size of 'n' blocks. 7-5 7-5 7-5  F aS DIRECTORY command DIRECTORY command DIRECTORY command ; DIRECTORY DIRECTORY DIRECTORY O _________ /COMPRESS /COMPRESS /COMPRESS < Performs the directory compression unless /TEST is= also specified. The output will show the results in ' terms of file sizes. Example:: DFU> DIR/COMP OWN$:[000000]MAILf %DFU-S-DONE, OWN$:[000000]MAIL.DIR;1: 31 files; was : 4/9, now : 3/3 blocks DFU> G _______ /CREATE /CREATE /CREATE < Create a new , empty directory. The allocated size: will be 1 cluster unless /ALLOCATE is specified.G _______ /DEVICE /DEVICE /DEVICEM: The device on which the files reside. The device; name is added to the file name. If you generate a,> file list with the DFU SEARCH command you don't need> this qualifier. However you may have a list of files@ produced from another source and thus need to append a? device name to it. This qualifier can only be used in . combination with /COMPRESS or /DUMP.? _____ /DUMP /DUMP /DUMPC? Produce a block level dump of a directory. /DUMP willB@ interpret the directory entries found in each block. A> directory entry contains a size, version-limit, type; and name field. Next the directory entry containsE: a list of versions and file ID's for this entry.> /DUMP will produce a rather low level output of this information. Example :. DFU> DIR/DUMP C.DIR) 7-6 7-6 7-6   e DIRECTORY command DIRECTORY command DIRECTORY command DIRECTORY DIRECTORY DIRECTORY 4 DUMP of directory block 1T Size: 22, Version limit: 3, Type: 0, Name(10): CHKDSK.EXE= Version: 3, FID : (1027,1456,0) W Size: 26, Version limit: 3, Type: 0, Name(13): CHKDSK.README > Version: 2, FID : (33892,1171,0)> Version: 3, FID : (1256,11234,0)T Size: 22, Version limit: 3, Type: 0, Name(10): CHKDSK.SAV= Version: 2, FID : (13947,100,0)EU Size: 24, Version limit: 3, Type: 0, Name(11): CHKDSK.SAVES> Version: 1, FID : (12531,2114,0)X Size: 26, Version limit: 3, Type: 0, Name(14): CHKDSK_LNK.COM< Version: 2, FID : (12314,72,0)N Size: 18, Version limit: 3, Type: 0, Name(5): C_D.C< Version: 3, FID : (32650,32,0)P Size: 20, Version limit: 3, Type: 0, Name(7): C_D.EXE; Version: 9, FID : (2675,64,0)oP Size: 20, Version limit: 3, Type: 0, Name(7): C_D.OBJ< Version: 4, FID : (9835,117,0)P Size: 20, Version limit: 3, Type: 0, Name(7): C_D_2.C= Version: 15, FID : (12428,84,0) R Size: 22, Version limit: 3, Type: 0, Name(9): C_D_2.OBJ< Version: 9, FID : (8439,119,0)R Size: 22, Version limit: 3, Type: 0, Name(9): C_D_3.CLD< Version: 3, FID : (9777,178,0)R Size: 22, Version limit: 3, Type: 0, Name(9): C_D_3.OBJ< Version: 2, FID : (9737,161,0)P Size: 20, Version limit: 3, Type: 0, Name(7): C_D_4.C> Version: 3, FID : (10594,1580,0)R Size: 22, Version limit: 3, Type: 0, Name(9): C_D_4.OBJ= Version: 2, FID : (10177,109,0)e4 DUMP of directory block 2N Size: 18, Version limit: 3, Type: 0, Name(5): DFU.C> Version: 169, FID : (31123,52,0) .  .  . W %DFU-I-TOTAL, OWN$:[SOURCES.FORTRAN.DFUSRC]C.DIR;1: 42 files 7-7 7-7 7-7   S DIRECTORY command DIRECTORY command DIRECTORY command; DIRECTORY DIRECTORY DIRECTORY_C ______ /EMPTY /EMPTY /EMPTY; The /EMPTY qualifier will produce a list of emptyh: directories. This qualifier can be combined with /ALIAS and /VERSION=n.c ______________ /FILL_FACTOR=n /FILL_FACTOR=n /FILL_FACTOR=ni< Specifies ,in percentage, the filling of directory> blocks during a /COMPRESS operation. Fill factor may? be between 50 and 100. Omitting this qualifier is theu< same as /FILL_FACTOR=100 (maximum compression). If< the directory has not enough allocated space a low; fill factor may result in failure of the Compresso= operation. DFU will issue a DFU-E-EXTERR error, ande2 the directory file will not be modified. _____________________ /FORMAT=format-string /FORMAT=format-string /FORMAT=format-stringi< Create an output file in a format described by the8 format string. The string must contain the !AS8 directive (this must be uppercase). At the !AS< location the resultant filename will be filled in., The /OUTPUT qualifier is required.k ________________ /OUTPUT=filename /OUTPUT=filename /OUTPUT=filename.< This qualifier redirects the output to a file. The, output will also go to SYS$OUTPUT.W ___________ /STATISTICS /STATISTICS /STATISTICSn= This qualifier displays the performance statistics:C5 CPU time, Elapsed Time, I/O and PageFaults. ? _____ /TEST /TEST /TEST 8 The /TEST can only be used in conjunction with? /COMPRESS. The qualifier will show the results of the = /COMPRESS but will not compress the directory file. w ___________________ /TRUNCATE=blocksize /TRUNCATE=blocksize /TRUNCATE=blocksize < During a compress operation truncate the directory> back to the blocksize specified. If blocksize is not; specified, the file will be truncated back to the.= end-of-file block number. Truncation will always bey) 7-8 7-8 7-8  r e DIRECTORY command DIRECTORY command DIRECTORY command DIRECTORY DIRECTORY DIRECTORY> rounded up to the next highest multiple of the disks cluster size. S __________ /VERSION=n /VERSION=n /VERSION=n 8 The /VERSION qualifier directs DFU to scan all> directories on the device to produce a list of files> which have at least 'n' versions. This qualifier can- be combined with /ALIAS and /EMPTY. 7-9 7-9 7-9  m :; DIRECTORY DIRECTORY DIRECTORYI, 7-10 7-10 7-10  rA _______________________________________________________l2 8 REPORT 8 REPORT 8 REPORT< This chapter describes the REPORT command with the, related parameters and qualifiers.L __________________________________________________________________A 8.1 Description 8.1 Description 8.1 Description.? The REPORT command function generates a report of theT? file and free space fragmentation of the disk. Also aT> graph may be generated by the /GRAPH qualifier; this> visualises the free space distribution on your disk.> The /USAGE qualifier will generate a diskspace usage@ report. This is especially usefull if DISKQUOTA is not enabled on the disk.@ The default report contains information of the Volume,= files and the bitmap. This output can be suppressede? by the new /NOVOLUME, NOFILE and NOBITMAP qualifiers.= Also the /USAGE qualifier can be used by displaying_? information of a specific UIC or Identifier simply by 9 specifying /USAGE= or /USAGE=.sL __________________________________________________________________S 8.2 Syntax and Output 8.2 Syntax and Output 8.2 Syntax and OutputE. The syntax of the report command is:8 DFU> REPORT device/QUALIFIERS; Below follows an example and output of the report command: 8-1 8-1 8-1o  t2 REPORT REPORT REPORT9 DFU> REPORT USER3:/GRAPH/USAGE J %DFU-I-REPORT, Reporting on USER3: ($1$DUA102:)Q ***** Volume info for USER3: (from HOME block) *****eE Volume name : USER3 F Volume owner : SYSTEM> Structure name :A Clustersize : 3pF Maximum # files : 367618C First header VBN : 103 I Header count : 51547 (1) I Free headers : 10951 (2) J ***** File statistics (from INDEXF.SYS) *****X INDEXF.SYS fragments /map_in_use : 21 / 61 (39% used) (3)E Total files : 40595EA Files with extension headers : 0 X Files marked for delete : 19 , size : 25/63 blocksD Directory files : 1957C Empty files : 177tE Files with allocation : 40418I Contiguous files : 40326 (4) P Total size used /allocated : 2492431 /2533209E Total fragments : 40770 J Average fragments per file : 1.009 (5)U File fragmentation index : 0.692 (excellent) (6) B Average size per fragment : 62> Most fragmented file :\ $1$DUA102:[LARGEUSER]A.DAT;1 ( 180/630 blocks; 30 fragments)P ***** Free space statistics (from BITMAP.SYS) *****G Total blocks on disk : 2940951uF Total free blocks : 407742B Percentage free (rounded) : 13C Total free extents : 260t` Largest free extent : 42912 blocks at LBN: 2463597 (7)D Average extent size (rounded) : 1568U Free space fragmentation index : 0.191 (excellent) (6)i) 8-2 8-2 8-2   REPORT REPORT REPORTrc %free------------------------------------------------------------------ d 100 | |d 95 | |d 90 | |d 85 | * |d 80 | * |d 75 | * |d 70 | * * |d 65 | * * |d 60 | * * |d 55 | * * |d 50 | * * * * |d 45 | * * * * * |d 40 | * ** * * * |d 35 | * ** * * ** |d 30 | * * *** * * * * ** |d 25 | * ** * *** * * ** *** ** * |d 20 | * ** * *** * * * ** *** ** * |d 15 | * * * * * * ********** * * * ** *** ** * |d 10 | * * * * *** ********** ** * * ** **** ** * |d 5 | * * * * ***** ************** * * ** **** ** * |d -------------------------------------------------------------------f LBN: 0 2940951P Free space distribution, each * = 2100 free blocksY ***** Disk Usage Table (from INDEXF.SYS and QUOTA.SYS) ***** e Identifier/UIC Used/Allocated Headers Quota Used/Perm e ------------------------------------------------------------------------- d [SYSTEM] 499554/505626 4954 510580/2000000b [SSG,MRX] 42079/46356 2259 48615/60000c [SSG,TESTJE] 189306/254742 4935 259677/300000rb [SSG,LARGEUSER] 47961/50238 1648 51886/65000 .  .[ .s8 The various items have the following meaning :@ 1 The header count is calculated based on the size of> INDEXF.SYS. If more headers are needed INDEXF.SYS has to be extended. 8-3 8-3 8-3f  e2 REPORT REPORT REPORTA 2 The free headers gives the number of free entries ina0 INDEXF.SYS before it has to extend.? 3 The INDEXF.SYS number of fragments and mapwords inu? use are very important figures to determine if theS= INDEXF.SYS file can be extended. The theoretical > maximum number of mapwords is 155. This value may; be less if there are ACL's on INDEXF.SYS. Eacho@ fragment, and therefore each retrieval pointer must? be in the mapword area. As the size of a retrievale? pointer depends on the physical size of a disk, iti= is not easy to say how many fragments INDEXF.SYSt; can store in the mapwords area. If the mapword ? area is full the INDEXF file can no longer extend, = and creating new files may result in a SYSTEM-W-  HEADERFULL error.= 4 Files which have exactly 1 retrieval pointer arem@ considered to be contiguous. This doesn't mean that: the CONTIGUOUS bit is set in the file header.@ 5 The average fragments per file give some indication0 about the total file fragmentation.8 6 The file and free space fragmentation index. classifies your disk as follows : o 0-1 : Excellent o 1-2 : GoodE o 2-3 : Fair  o 3-4 : Poor4 o >4 : Bad @ If your index is greater than 3 you should consider@ defragmenting the disk using Digitals DFO software,8 or by per 7m~ DFU024.BCKm[[DFU024.DOC]DFU024.LINE;2 ?eM|forming an Image BACKUP / Restore.< 7 The largest free extent is a usefull figure for> defragmentation purposes. You cannot defragment a; file when its size is greater than this value.2) 8-4 8-4 8-4K V REPORT command REPORT command REPORT command1 Syntax and Output Syntax and Output Syntax and Output> The disks free space distribution as a bar graph. On< the horizontal axis the Logical Block Number (LBN)? is shown, running from 0 to the maximum block number. ? Each * represents a certain number of contiguous free  blocks.l? If you use the /USAGE qualifier a usage table will bee? added. Per Identifier / UIC the blocks used/allocated28 , and the number of file headers are shown. If> Diskquota is enabled a third column will be included; which shows the blocks used/permitted allowing to:@ QUOTA.SYS. Normally quota should satisfy the following rule :M Quota used = blocks allocated + # of file headers A _______________________________________________________ 2 REPORT REPORT REPORT? Create a file and free space report of a disk device.1A _______________________________________________________02 FORMAT FORMAT FORMAT REPORT REPORT REPORT _________ device[:] device[:] device[:]A _______________________________________________________ > PARAMETERS PARAMETERS PARAMETERSO _________ device[:] device[:] device[:]S? Device to be reported. You may also specify a logical  devicename. A _______________________________________________________ > QUALIFIERS QUALIFIERS QUALIFIERSk ________________ /APPEND=filename /APPEND=filename /APPEND=filename< This qualifier redirects the output to be appended> to an already existing file. If the output file does 8-5 8-5 8-5   IJ REPORT command REPORT command REPORT command2 REPORT REPORT REPORT? not exists it will be created. You can use /APPEND ort /OUTPUT but not both.aC ______ /GRAPH /GRAPH /GRAPH)6 This qualifier generates a graph table which= visualizes the free space distribution on the disk.C" /NOGRAPH is the default.O _________ /NOBITMAP /NOBITMAP /NOBITMAPf< The /NOBITMAP qualifier suppresses the "Free space statistics" output.mG _______ /NOFILE /NOFILE /NOFILE @ The /NOFILE qualifier suppressed the "File Statistics" output.SO _________ /NOVOLUME /NOVOLUME /NOVOLUMEr> The /NOVOLUME qualifier suppresses the "Volume info" output.k ________________ /OUTPUT=filename /OUTPUT=filename /OUTPUT=filename< This qualifier redirects the output to a file. The, output will also go to SYS$OUTPUT.W ___________ /STATISTICS /STATISTICS /STATISTICS= This qualifier displays the performance statistics:5 CPU time, Elapsed Time, I/O and PageFaults. ___________ __ ___________ /USAGE(=uic or identifier) /USAGE(=uic or identifier) /USAGE(=uic or identifier)q8 The /USAGE qualifier will generate a diskspace= usage report based on Identifiers/UIC. If diskquota_: is enabled on the disk the blocks used/permitted= allowing to QUOTA.SYS will also be shown. /USAGE isa; very usefull when diskquota is not enabled on the : disk. When a uic or identifier is specified only< the information for this uic or identifier will be displayed.) 8-6 8-6 8-6   REPORT REPORT REPORT 8-7 8-7 8-7d s A _______________________________________________________I2 9 SEARCH 9 SEARCH 9 SEARCH< This chapter describes the SEARCH command with the, related parameters and qualifiers.L __________________________________________________________________D 9.1 Introduction 9.1 Introduction 9.1 Introduction9 The search function allows very quick disk-wide = searches for specific files. You can use almost any 8 possible file attribute as a search qualifier.L __________________________________________________________________S 9.2 Syntax and Output 9.2 Syntax and Output 9.2 Syntax and Output+ The command syntax for SEARCH is: 8 DFU> SEARCH device/qualifiers@ The output is displayed on your terminal. You can also> sort the output with the /SORT qualifier. The output( is shown in 2 or 3 columns eg:? DFU> SEARCH MYDISK/FILE=X.X/FRAGMENT_ ._ . Z $1$DUA102:[USER.COMMAND]X.X;1 1/3 1/1 .h .c; The first column shows the full file name . As ofn< this version of DFU the device name is included in? the file name. The second columns shows the file sizei> as actual/allocated size. The 3rd column is optional@ and will only be shown when the /FRAGMENT qualifier is> used. It shows the number of fileheaders / number of file fragments.n 9-1 9-1 9-1a e i2 SEARCH SEARCH SEARCHL ___________________________________________________________________ 9.3 Volume Set processing 9.3 Volume Set processing 9.3 Volume Set processingy> SEARCH checks if the device to-be-searched is member> of a volume set. If so, the complete volume set will> be processed, starting with Relative Volume Number 1= up to the last member in set. You can override this 1 behaviour with the /NOVOLSET qualifier. L __________________________________________________________________S 9.4 Output formatting 9.4 Output formatting 9.4 Output formattingT? A new qualifier /FORMAT can be used with SEARCH. ThisG= allows the build up of a command procedure directlyE: from the output generated by the SEARCH command.2 /FORMAT has the following restrictions :> 1 /FORMAT is only valid with the /OUTPUT qualifier,? and can not be used together with the /FULL or theT /SORT qualifiers.8 2 The format string used must contain the !AS= directive (in uppercase). The file found will be , substituted at the !AS location Example:_ DFU> SEARCH/OUTP=DEL.COM/FORMAT="$DELETE/CONF !AS"/FILE=*.LOG mydisk L __________________________________________________________________w 9.5 UIC and identifier processing 9.5 UIC and identifier processing 9.5 UIC and identifier processing @ This version introduces an improved handling of UIC's.: Previous versions of DFU only accepted a numeric= UIC in the /OWNER qaulifier or an identifier in theh> /IDENT qualifier. V2.4 now accepts all valid uic and> identifier formats (numeric and alphanumeric) in the? /OWNER and /IDENT qualifiers. Technically there is no = longer any difference between these two qualifiers, = but they will be left in for compatibility reasons. ) 9-2 9-2 9-2   SEARCH command SEARCH command SEARCH commandv SEARCH SEARCH SEARCH2A _______________________________________________________ 2 SEARCH SEARCH SEARCH. Fast file search through INDEXF.SYS.A _______________________________________________________ 2 FORMAT FORMAT FORMAT SEARCH SEARCH SEARCH _________ device[:] device[:] device[:]A _______________________________________________________ > PARAMETERS PARAMETERS PARAMETERSO _________ device[:] device[:] device[:]:? Device to be searched. You may also specify a logicalx devicename. A _______________________________________________________ A DESCRIPTION DESCRIPTION DESCRIPTION 8 The SEARCH command is used for quick disk-wide> searches for specific files. The qualifiers describe> the file attributes used as the search criteria. You< can combine almost all of the possible qualifiers,* unless otherwise specified. Eg.:Z DFU> SEARCH DISK1/SIZE=MIN=10/OWN=[1,4]/CREATED=SINCE=YESTERDAY? is a valid command. Note that qualifiers will be used < in a logical AND manner, that is, SEARCH will only@ display files which obey to all qualifiers and options specified.A _______________________________________________________8> QUALIFIERS QUALIFIERS QUALIFIERSS __________ /ALLOCATED /ALLOCATED /ALLOCATED 8 Default, SEARCH will use the actual file size.; The /ALLOCATED qualifier forces SEARCH to use the @ allocated filesize. This qualifier is only meaningfull' if you combine it with /SIZE. 9-3 9-3 9-3  J SEARCH command SEARCH command SEARCH command2 SEARCH SEARCH SEARCHk ________________ /APPEND=filename /APPEND=filename /APPEND=filename < This qualifier redirects the output to be appended> to an already existing file. If the output file does? not exists it will be created. You can use /APPEND or  /OUTPUT but not both. _______________________ /BACKUP=option(,option) /BACKUP=option(,option) /BACKUP=option(,option) 7 The /BACKUP qualifier is used to search files > depending on their backup date. The possible options are : o /BACKUP=BEFORE=date o /BACKUP=SINCE=date  o /BACKUP=NONE ? The NONE option gives files which don't have a backup : date recorded.The other 2 options can be used to< get files which have a backup date before or after= a specific date. The BEFORE and SINCE option can be-" combined in one command. ________________________ /BAKFID=backlink-file-id /BAKFID=backlink-file-id /BAKFID=backlink-file-id > You can use this qualifier to look for a file with a? specific backlink. Only the first part of the file id ? must be specified, that is, if the file id is (x,y,z)s? you must specify 'x' as the file id. You can use this-> qualifier to get files from a specific directory. If? you use /BAKFID=0 you will get files not belonging to . a directory (often temporary files). ________________________________ /CHARACTERISTIC=(char1,char2...) /CHARACTERISTIC=(char1,char2...) /CHARACTERISTIC=(char1,char2...) ; This qualifier is used to get files with specific6? file characteristics.The characteristics can have the  following values: ( o Directory : directory files- o Nobackup : files marked nobackup:4 o Contiguous : files marked as contiguous/ o Erase : erase file before deletione) 9-4 9-4 9-4  e n SEARCH command SEARCH command SEARCH command- SEARCH SEARCH SEARCH o Spool : spool files9 o Badblock : files which contain suspected badu block(s)S0 o Badacl : files with a corrupted ACL7 o Besttry : files marked contiguous-best-try54 o Scratch : files marked as scratch files7 o Nocharge : files not charged against quotae4 o Nomove : files marked NoMove (VMS 5.5+): o Locked : files with the deaccess lock bit set/ o Marked : files marked for deletion 9 o Noshelvable : files which can not be shelved 0 o Isshelved : files which are shelved< The several characteristics can be combined in one= command.If you want a logical OR behaviour in steadM? of the default AND behaviour, you can use the specialh option MATCH=OR eg: C SEARCH disk/CHAR=(NOMOVE,DIR,MATCH=OR) ________________________ /CREATED=option(,option) /CREATED=option(,option) /CREATED=option(,option)o8 The /CREATED qualifier is used to search files= depending on their creation date. The options are :r! o /CREATED=BEFORE=date0 o /CREATED=SINCE=date= These 2 options can be used to get files which haveo: a creation date before or after a specific date.< The BEFORE and SINCE option can be combined in one command. 9-5 9-5 9-5g t J SEARCH command SEARCH command SEARCH command2 SEARCH SEARCH SEARCH _________________________ /EXCLUDE=(file1,file2...) /EXCLUDE=(file1,file2...) /EXCLUDE=(file1,file2...) : This qualifier is used to exclude files from the? search. You can use wildcard filenames ; you can also # specifiy a list of files.t ________________________ /EXPIRED=option(,option) /EXPIRED=option(,option) /EXPIRED=option(,option)8 The /EXPIRED qualifier is used to search files= depending on their expiration date. The options areb : ! o /EXPIRED=BEFORE=dateo o /EXPIRED=SINCE=date o /EXPIRED=NONE8 The NONE option gives files which don't have a= expiration date recorded.The other 2 options can be ? used to get files which have a expiration date beforee? or after a specific date. The BEFORE and SINCE option ) can be combined in one command. [ ____________ /FID=file-id /FID=file-id /FID=file-id = The /FID qualifier is a special function of SEARCH.; It directs SEARCH to go directly to the specified_= file without processing the rest of the Index file. @ Therefore, you cannot combine this qualifierwith other= search qualifiers such as /FILE. Normally a file-id_? consists is in the form (x,y,z) where x is the number @ of the file header within INDEXF.SYS y is the sequence? number, and z is the Relative Volume Number. You only = need to specifiy the x value in the /FID qualifier._ ______________________ /FILE=(file1,file2...) /FILE=(file1,file2...) /FILE=(file1,file2...):; This qualifier is used to search for files with at= specific file name.You can use wildcard file names;e/ also you can specify a list of files._ _____________________ /FORMAT=format-string /FORMAT=format-string /FORMAT=format-string/< Create an output file in a format described by the8 format string. The string must contain the !AS8 directive (this must be uppercase). At the !AS) 9-6 9-6 9-6   SEARCH command SEARCH command SEARCH commandd SEARCH SEARCH SEARCH < location the resultant filename will be filled in., The /OUTPUT qualifier is required. ___________________________________ /FRAGMENT(=(MINIMUM=nr,MAXIMUM=nr)) /FRAGMENT(=(MINIMUM=nr,MAXIMUM=nr)) /FRAGMENT(=(MINIMUM=nr,MAXIMUM=nr)) = This qualifier displays the number of fragments ands@ file headers of each file found. You can further limit; the files found by using the MINIMUM and MAXIMUM=  options. For example:p) DFU> disk/FRAGt0 DFU> disk/FRAG=min=10: DFU> disk/FRAG=(min=10,max=100)? _____ /FULL /FULL /FULL = If you use this qualifier , SEARCH will give a fullT< output for each file found. This output is a look-= alike of the output from DIRECTORY/FULL. You cannot 8 combine this qualifier with /SORT or /SUMMARY.? _____ /HOME /HOME /HOME ; This qualifier directs search to give output from ; the disk's home block. SEARCH uses the home block_? for calculating the free and used file headers within  INDEXF.SYS.e _____________________ __ ___ /(NO)IDENT=identifier or uic /(NO)IDENT=identifier or uic /(NO)IDENT=identifier or uici6 You can search for files owned by a specific? identifier or uic. Any valid uic or identifier format ? may be used. Another way is the /OWNER_UIC qualifier;o= you cannot combine these 2 qualifiers in one SEARCHn> command. Issueing /NOIDENT directs DFU to search for= files NOT owned by this IDENTIFIER, eg: DFU> SEARCH ' sys$sysdevice/NOIDENT=SYSTEM. _________________________ /LBN=logical-block-number /LBN=logical-block-number /LBN=logical-block-number = The /LBN qualifier is a special function of SEARCH.9 This allows you to find a file which contains a ; specific LBN. This may be usefull if you have bad- 9-7 9-7 9-7_ _ _J SEARCH command SEARCH command SEARCH command2 SEARCH SEARCH SEARCH< blocks logged in the error log. You cannot combine4 /LBN with search qualifiers such as /FILE. __________________ __ __________ /(NO)OWNER_UIC=uic or identifier /(NO)OWNER_UIC=uic or identifier /(NO)OWNER_UIC=uic or identifieri8 This qualifier is used to get files owned by a6 specific uic or identifier. Any valid uic or@ identifier format may be used. You cannot combine this< qualifier with /IDENT. Specifying /NOOWNER directs: DFU to search for files NOT owned by this UIC or identifier. _________________________ /MODIFIED=option(,option) /MODIFIED=option(,option) /MODIFIED=option(,option)q9 The /MODIFIED qualifier is used to search filese? depending on their modification date. The options areM : " o /MODIFIED=BEFORE=date! o /MODIFIED=SINCE=date = These 2 options can be used to get files which have > a modification date before or after a specific date.< The BEFORE and SINCE option can be combined in one command.O _________ /MULTIPLE /MULTIPLE /MULTIPLEn@ This qualifier searches for files which have more than 1 file header.O _________ /NOSEARCH /NOSEARCH /NOSEARCHd= This qualifier can only be used in combination withe> /HOME. It is used to get the Homeblock info, without$ searching the entire disk.O _________ /NOVOLSET /NOVOLSET /NOVOLSET : The default behaviour of SEARCH is to process an< entire volume set. You can override this behaviour? with /NOVOLSET. This may be usefull when doing a /LBN3 search.e) 9-8 9-8 9-8  o e SEARCH command SEARCH command SEARCH commandu SEARCH SEARCH SEARCH_[ ____________ /OUTPUT=file /OUTPUT=file /OUTPUT=file ? This qualifier redirects the output from SEARCH to an = output file.This file can later be used as input to 0 the DEFRAG , DIRECTORY or SET command.o _________________ /OVER_ALLOCATED=n /OVER_ALLOCATED=n /OVER_ALLOCATED=ne= Searches for files where the difference between the 9 used and allocated size is at least 'n' blocks.rG _______ /PLACED /PLACED /PLACED.9 Checks for files which have a placement controlA< retrieval pointer.This is sometimes set by non-DEC( disk defragmentation programs. ___________________________________ /SIZE=(minimum=size1,maximum=size2) /SIZE=(minimum=size1,maximum=size2) /SIZE=(minimum=size1,maximum=size2)s: The /SIZE qualifier is used to limit files found; by their file size.You can either use minimum= or @ maximum= or use both options together. SEARCH will use? the actual file size for selecting files, except whenT+ the /ALLOCATED qualifier is used.d? _____ /SORT /SORT /SORT 9 This qualifier will sort the files found beforen= being output. You can combine this with the /OUTPUTs7 qualifier (the default output is SYS$OUTPUT).rW ___________ /STATISTICS /STATISTICS /STATISTICS = This qualifier displays the performance statistics: 5 CPU time, Elapsed Time, I/O and PageFaults. K ________ /SUMMARY /SUMMARY /SUMMARY ; This qualifier will limit the output to the total > number of files found, with their size (and optional; the fragmentation when /FRAG is used). You cannot & combine /SUMMARY with /FULL. ___________________________________________________ /VERSION_NUMBER=(minimum=version1,maximum=version2) /VERSION_NUMBER=(minimum=version1,maximum=version2) /VERSION_NUMBER=(minimum=version1,maximum=version2)@ The /VERSION_NUMBER qualifier is used search for files: within a range of specific file version numbers.< Logfiles which are produced with the same name may 9-9 9-9 9-9  e eJ SEARCH command SEARCH command SEARCH command2 SEARCH SEARCH SEARCH; pose problems when they reach the maximum versionE= number (32767). Using /VERSION=MIN=32000 is a quick-! way to find such files.i, 9-10 9-10 9-10 o a SEARCH SEARCH SEARCHo 9-11 9-11 9-11A I SET command SET command SET commandrA _______________________________________________________m) 10 SET 10 SET 10 SET/9 This chapter describes the SET command with the , related parameters and qualifiers.L __________________________________________________________________D 10.1 Introduction 10.1 Introduction 10.1 Introduction> The SET command allows you to modify file attributes< which can't be modified through DCL commands. Note@ that you should be carefull about using this function;> you may easily corrupt files. NOTE: This much wanted? functionality is finally introduced in VMS 6.0 with a ? new DCL command $SET FILE/ATTRIBUTES. Still DFU's SETD? has some options which are not in SET FILE/ATTRIBUTES_* (such as setting a BACKUP date).L __________________________________________________________________w 10.2 UIC and identifier processing 10.2 UIC and identifier processing 10.2 UIC and identifier processingr9 As of this version of DFU the /OWNER and /IDENTK; qualifier now accepts all valid uic or identifier / formats. See chapter 9.5 for details. A _______________________________________________________ ) SET SET SETr! Modify file attributes.eA _______________________________________________________2 FORMAT FORMAT FORMAT SET SET SET _____________________ file1,file2,...,@file file1,file2,...,@file file1,file2,...,@filei 10-1 10-1 10-1c c rA SET command SET command SET commandg) SET SET SETyA _______________________________________________________E> PARAMETERS PARAMETERS PARAMETERS _____________________ file1,file2,...,@file file1,file2,...,@file file1,file2,...,@filet8 The files to be modified. The attributes to be@ modified are specified with qualifiers. Wildcards area? allowed in the filename. An indirect file can be usedu? by using the @ sign. This allows processing of a filel0 list produced by a DFU SEARCH command.A _______________________________________________________ > QUALIFIERS QUALIFIERS QUALIFIERSo _________________ /BACKUP_DATE=date /BACKUP_DATE=date /BACKUP_DATE=date c ______________ /NOBACKUP_DATE /NOBACKUP_DATE /NOBACKUP_DATE ? Controls whether a new backup date is assigned to the < specified files. Specify the date according to the> rules described in Chapter 1 of the VMS DCL Concepts< Manual. Absolute date keywords are allowed. If you= specify 0 as the date, today's date is used. If you> specify /NOBACKUP_DATE the Backup date field will be cleared.G _______ /BADACL /BADACL /BADACLVO _________ /NOBADACL /NOBADACL /NOBADACL > Sets or re cٸl[[DFU024.DOC]DFU024.HTML;2UB1b9t r^7},Y_XR@r{,ih?-"SC7B0/w%>apC Ir0F@0N_Nz}jWo8apOXT) <-Pn j/Xye+s$s'^4a|4\3n}0 .HZeb`}L;|iU Py3I?3FpYABt.8i9yI]#\I[D7 e iP 5A?4(cO5{SRNIN`#?~S>g+oUqYje\9 :b1/InW/!2Z6 D%VA(mAuq| L"RNX#g$w2DSJtbw8k_IX%W( 2ZJ{Qz<-6fue>q,Kn;ZS|&m1\g29cYsd2)e<)G;V<}~R[:h .H~_bk[m=8zp!.fwYcF,7{ Z7=f{2R=#9kJ7{@Yg.~TA%C]C&8UA9smOS}Z OE(yg\~8& tEhc7nnjcEJB&oZ %nUp{(-;:qhu}vv5*?~kE~WaqCK}(s;+L4YwBK/'bP.O8^I|PUCB3 WpogbVj4vNR sk0 ;8w)G%dZ Sq-0xe*jlxj~QEnjk[Ayc$= tN*m,v5~ |] |}X I,eF%@TZ_dLV5s!p 5CHkCmsQ`/`T(]^|1aE*(!gWdli]WA6h\<6hC&b46{Ah*`0qE(nVo?& VPw0PgB kL@ ~11!k|i$[{,RhSR7N/fNDaGb(KAWP$Jx{d\< K3Oyh=$^Meb~3LDAGzG'izQVq(Y2s/"'`6SaLxYQ3jGl},{mF$B,@^rp\|1 I[R`hJ5p3tovK EM"Z=-B@aK,:^">eN}`&8,3NdnQ/n.fXPY{h9tRZ3[q,rEwN}/`_!QiS,{:E@!l;68Kz+g?;5tR^sliCpF9 t dv[FmO $Zv?c)JC <&r&b>;q2Gv5]@A$7vE/"VTDwy2QeIVj4'| PaR wAOG_ gyu9MsV%8LS0`]BFmx["#*$,WA &TW8e[t!y'zaRotw jf(b t;7R|7)i>w%)3ixj9G%q|?8'Ad@8&PP>g)2i j)7*}:@:<@t @/9}DXuu$bPK<.qp8~k7B)H]JD$6X(i1@7,i.P-MpPEh0SBlBAwKnjpW'~ 'FWH (p#h8V3z #0mKf W-IyA:z+-wk}J$Yw {7WsdwkDvZ2GC_? LIk9Q)x'#)i~, |yg"h sfHs8 MLd1 i0jx650)=K~)W(Y7~D4M4b:gQOa{CW&@:ijl >Hl Y{pvN,/W@2;R2w`.Cn%"G'i5Tul=$.jF7V_)_.G_ BF8EjQKudIM /}\d|5[. DSAGYMrUoH\Og'.oJ=*@O^>;Nh_w;,pQ1 _7nqhc YdN1^( d55lNorLq8Nug1Z:[Z`" X_4:rw;N r2^VoF0CJq~ #4q^j|j:, O^DP ]2V<,]t3ei=X"NMq".#j@(.FVnw*-'(W#d @0YTXZVihhi.;r:l@x n ^b4vCB:G_8/IuLh0xuabsTXCn25afO! `z a`-$LL`=h5;?)X8XYZF0:g *xQ"yS T w<}lO|4!Lh]UbR=e>9(K!iGR-Bue|[3#ba}DCS}:$3PXd8-.!(KN;Ba~pfEKubN^Pidk!/1V616>xn='LQd0!(HBN=ND2N y~&$v%t!`hoZ_D5 3A8^mLAY`DNe lUHgY."EmKYB%\ZG`c)ti-w\jNT0J{QN=!=L ^o oDpO-)D(eO[Ku_7:lH.G W\zn,OCq3.rjW2^7 b xp\W\U+9?uZQ @#-*mTFW AJ-nzm~ c:C2P/ q4:VeFRhrd0Hc..L A@tz YR"To[-a//kYD%|H_]zB{U & *h([$*n<.S vT1jX'r`4gCIh ~]&F.hgHLX] {oni]7@cs\t]3enMd401jWi_Rl'3{dcd }SG#h3]-RjOd.] v#&$ ) Kb)*F$ 8d g@H5O$pn YoNRh΂a.R5+\I}]Ya^rC2Z0N/Z9ClL]ck]Fe"t(PBnmKTZ:9,"\Z>qQVw75OF9N1IC0Z[\.b=O%8veil&c\IA-sV+kn%hw6{w_`)hb;i-6 x=JeCbyqvO*xW/ ;mdn ICI)un%d5D-% p%!Mh3}^T<-Ca7vulyC)%6 QyV$WT CYrdRtl6HJ9,3[7U^ q>x]uvkY!f,D<;GvelGYR7mN$2[@/7%7fCRBq6~D!0vn?4/{,lK Yyv,7Bw`%3xKY+R ,&2^ow-,4iq7<)lfB KYy@< PS**f ,!$mkr[K&=h6($x^]*Tu[2PEnrI7PKi*4z2@ UOO&g.p ~WwAQ6 sO]x-<}x]kAc_pd:[vZRPJhXZ+pyDtWg~R_" Su -]ng :v&#"p8."@HR7eBd~S$ A:Z@uL'w-M>n?; O8W\OI"#q>G#_(1u w g%'9 4[:WGjq{dlnmBL[ Rd`y'(6jq58{>~S8BAl ]oAMQvs?j =u S5)au7 !*4Z%k)3?6E?s#bxJ5 ?)h]`Bwz[kiV1 j'E9`BI3cu[>Kgj|)0*)L#u;F]@E<&ag0KgG-krABOL9w 4gw)jBL9>TEfI6QHE[K6Y|`T?_Q?3!>skEp?XRv]:W"^g .feX4NWmR"@hjj(ty[<vr Ob3AZ4]\`(zNy;3z[&Y5-w6vSu6~w c3qs ui+a m)m> =KXq UQQB_*xDM:F?s@>7^f #b!*g{:Aa`03KE@[QDg/|3 jr3.H&.:* .f_5-pt}m ?| ˊR:zgB()I""6 iD{&lVy#[{w+l+ <8Q/Vl b]D1 p \.{ k*FX~ZcqFbM X.jj:1I&(o+rj@"k {$}k`HN 7?Ji^@-:{}K`8zvq*O(4L")9jZ .9 ;o'rXfhvA^xvl|z@ctiut`[& lR<)ӼZRgCV.2P\3jmF]t]lzsOZV4TC'yk <kCNJh;9](N6al#A" p\u(+uX(Dc[Ns'W%'S HFeWR7V8XH`JsTjQ";Uz~TbK~wC)XZ0j{BHq5T$njY7]/]$pi03n.Jhl5}? U_J- Z"Uz \!D^*=1 B_4BNL%OS6F5=~= au Jqar$JFcr^-9b1pDHCh1Sta/]X` * 3hXR1h&cb8`p.c%v,3n2V_)dZr@L'B3/7\H_FJS5]-g 9 ^mh\Dipg,(*.NU]:%MG3r(_CvC&\, ptPcm  bDt8qm9k*WCQ zN!y]mD*o?2V*, %mi7\scyAwiv92)3PZ^DcLd!q-flD`Cq*glScdvSk`$>C 6~ MGfq8+6; A*O SZ/ ]hP0t~<^|?~_-8oO!s>O"t2@{1:v[.gk =S; [*p{mt_dbml O9!\8J2'@CX P,LpEzHA=,jL.XpQg!t@&P~T'@GFwNWd8D8Q\$A\ [Um)NJZ IZohr 1f$rZvD9@%3nw1, y9,CFgtrlm4vSm!?\];VN;L,!~t3~MYd*?%&y? mO [}%kX/nAx`V(bt3ckB}-K:h4W)e!,S &MS%bZM2z|:saD:;QJ!/B]S9z>O]EoDa52#v & 0>re+AmJPa?mlb#-&N6bK@Ah[[n9P;otw _+Tob((;=zoda N_0opSLvkv,e_>Q=%;7Wmh{qBTn{]1.!+vUYy84`b0GSZ}PJg MdIri_.SN @IoS9lKE(IKO^tXo/>-8MCZz3H{ `f=BI}2p8Wv2F/ !EXLSu17@*"3 i w[/u$MN3TB>Z7KlAeX5" m;C PymhP"l!6/;h`!NjUK5!&8 ]DvcvBS`` dlw,9{^ywU:_Dlpq.5ОvxNw:gv~Ec3G S.YC yjHb~Za=]3@utrSw! |E%#ILOj/FuS6,`$F zqABd OO%FCq^&kJ#J\+(b;bF h|573osx\0B"*&}caRXylq&%zmr?y4KEU1C =pY dP8 YwM'*V =k- $gNSf>U8]%sS)"S g}/HKpl|d PWA-t9RgKv[#qw"B^^vepe=@k Pt(>@\}~V:;.DpUZ0,;2K6NV 4sZi-|qixtGP&X.q^ Wj cD+|L2$.Jj&Py2iHtU,nc8_U7J tqyiI.hjpo/tW57}4A%jS: aMhBxMbzB/|bdyQY@ _4x x|sDboai]VrvEaT&$%A3u=#:\J@F#,{"Yea;V`'H{01*3G^K9*C%a*r9ax] Y/e)Dt%_#Q)GP/y$3&VQ13^x0 I1mzI3 ԯ`?.p=F^{C;G)( xp<_U9Y[FMviPPT1/v@YJX;*{WtVT]G[)1zhf 9C.B4WzvuZZIVklh*1n bDzUDicmX+nB=9! kH\ '*S*eZL!nre9SR?!qMrMM#&p d"7aMUtQGDfW=UF*b 3r\G9+B*qwD5@\E&T+HxWa-46_{͒BE!3rE>q{&ijF {H=9v ^9'>z^HCcraV`>sf$:8_@8/OM 8oNn1,@]Wf];0 :e %y[1zkFZOL<qDXB%t:4vpGNd2?qkz x'$smN>vy'[Th|ed-#Rf`%/}Npz'? C$ 6dj5[b|P5DV9p2KaE w2e>;f-?q`UG, ~425jaMC%@/n~=(+#5)HEn 6-NykQFB'9 3/P.?x!{'POx Qlp E|6z0q;~&K#f=a fTCSe/+`rq2Bn iob4/Ht/RqSL5i+@gSC[+(3%z26F0JN1snN|h1:dXS]$7YygO@ aj'3av&Ji\@ePdfdOGnu# =Y)A(5gEFcz5J$w5AG2RF/g1.nm!}pQ4!blhW dSb76/"Uba}=Q1f1{f)[68M63a%|"cB ohGW |*' ZKXI'n 8heKne c01-Quk8-MSX \T#O@I^ _k*bnsHtr\"0u|%yEIjnsk@~37Eh^EKD(IVWP`1 XQGv> ^Ko^O5+=2I/?S_{_U`m"qG3NJ1Uqe*S)_:k m.hA0BBgT~y7 FZ~-z{q7> ipn*7S-w +NG>3(vpDmO}py%8Y.AJys|~z sLWJ|= a$[i%4(f!d! yJ1&4@6d l z&F3pnuy ;M, |`xw/uf 4s}A#hsTY~$;]FX0h 9pHB&|i2*s_mAeO r|]i <q:/nJl@\9}^`.tG]e5F hZ`'roy?b> Ө1-qeqhK3 [  sp<.>^*A{;S>coOU`pR&31I; (Aum9-LV@`0u 97 =='=qtE^{H)o4 6(t_xxMQFi[|Y(QN =d|# _v BqnM>r#Y7j}1)UdWDielbk?J ykpXA'zhXB EmOL"[zgm\fy hN+ZPhNN8KkxWo,vG]y&_b_rs'UEJj'&O^.t"# 5bWdF? $3% UtKlj*@h%9r2Y#G|:f6vs)mQ'zXl|?+f8sU#B" uU3k%dDUAy)1eUuT3y{ 00W 7~] C}lx<4f)KL^2a 0de4?wqEBOK CSP%" }o$?itkh3E9FK1H/jEG sMJdCu|h);qK6d!h|F).j-RWz9/rm?(4?;VtfYQ wgYd(cI (sK0Er>|"wG|d`QI ?q]>~wzj{k .fx`o8+ҵK`5. |TK ]KEW& 8;!pxt v4/\:@o^M=3! GBx;yXyKt&1RRO{7{cc fuyemDw %loT_R d,Qa&ni(@wr|x9m?'I-~fX~;=&X3:taYX[Sq{l ku*! =s ?Y ccnDE[K!Ro<(2Z#z`3a#5+I5JuUAK6b"kuwRP{>B`JcVa5/D })KI[lqv6;'h<5~DOAkwCRc}>FKB}WAw6ow:3OhJ@CPNPAk^"L qD_,x`)}a1\ ?Q+Va}\3|z_l;$V,yViU6U3wG` )'8[ #KSo{0*s\'g.@ (.Qz2SNRc:.PDT>%+RoG (w><'+-" "o#,$:=N3>2=]8]]gHKo#{1:A=3tobSJKa!GJ1&'YOL)s"~gqIcp|cow*+/;KciDo0wCx3o y(o+-{A+{|v;u]w1 d|9+ 'Rp%v IA n+_?POm.@%UT-4_ia]6Q1YL}kC;fC4e;I*  S Yz[J}O=sl#PPkDHQSr\)?3<^uH$);D0D_VfU<%`K=%8T p<*FB+.Za\/"673\_0njQzEdl Q =!f;@j@R|LE:5Dh|0D\w/D)HWG'TF,#?Cs 7Swb[Aa`I etucGnb7{89+G#܊^MBFsFM=E!:C46Rmd;S?WV#fo_V"k<w#1&Ax^rnZ5xkgc(V&Rj^s\:E:#GA'oy<<)~Mv[_&1 YzRf, nXTg "Zk`@MqiA&}F$ xu6I#]"wF O''?J[g0Apg@'E~/%aV*]h|V7i24H_dO3)Qm9J~MuB&G e7E(xDc0_yry9*71!\}0B9Tcu8VG@|}y" xm)NC0lfX# K< L+=hc.yo1i1=[7HO{Vn8L8^Stn}1!b@FK%f}mt z-G&>HfeeBC tpYOa)w2\hxYw\J6II! R*/446'zw:ISY\gQ$dw&_w(5VuN)kS@*P1V9tCw| O+W"/0,$ #@OE{!kvoN>avj PcI!"d]r_G{ TUmO"nw.mh8[Hy{J K}9qq.O}~:Y0/m{RsFI7R#Ipmrq|AVv.r% %?^vr]h*= r K-wW )+h+f`c,EJLEn<`kUfFH+~f>I Xdjqrf,1z8uS<Csn& KX@^07cJ}):wu]b@J+:6$hL X5e-EA'G7?TS#E9{^Jhw1X #l|RJ+pvsI#dH^+` Y)")XzD*JtT$ eD*uFX_m Z\P\ J3!_bem92b)@zJ7 ")a}((LLj$E6!U19h,0Rv3loe]pGd CNNt$'>1&[.K!`=zq}w@k=\940IduAf#"lA.$ 5  D@6SjPc}($"-IUTYy{ Dd,T5/#s#J} o-rMI%\3tD(M&$,b"GBZX|CsA[E K& c ^2W~14,VAAiu{yg.}CqeEt-t76aB*L4**;t|~][%|*EwYg/idD^4LHV6(U/ZC8pR5q#OL*q _z|e5KX{gzL@GCo:c1*${uyXY\9|i#w~JKIYPw d<4|PigI_hawbq?KTO=09b&*DP׹3$7bXO+pvFa<'@/du&t\T'xgG4O^[#%#Mn%ERd\zjTX/Vj))b|4'FA\kK[L% c49xA6TGd 1+'}(+R/gm3=F A~u(Y G ~V(5,_U{ra 2Wc}6kv/M-MP0V^g22LLE@/ BQu"uYLMk D{V 2r{-P)LDo4m9._ Q%X)c>MX6b=NB#eI(7w;qA/$r ?BY=>\k]".L\P+j^e:hW+Age#qChb@PTy`}N -,ToI< An%V3EeQ%`@tTI!JJD1u9x0n{+, sNLS,Sg eL{):{Uk=v; r%5 M сZ< jnb6(os}0}%- /r|p3XB$0tiul"x9!+710!k "nP[ 2KGvG:==@i3To-n}S 7d y1dXIzDR$p}$iBowd65=v6f:fpB/wT?D Uk~4SQP-93o+hb4peq U@]$5.2zWXirP,9yEXLM&$k>#Z^~&21k?6n+BGnPVw$/&Dg%Xu\y\Hu}` 7ND-L?"'ZX9 Si"25jcE FXxi4^@ g51jc@Qi _v7ZSjk9_%Q]/>x*N*88#!?q]T|AejN @*swNnM&vb^\D8^B;^V.gt]y$\7 !boWLLA<xAkC;juu6oO;"?(4E8}J yh_sZtaF &e'%B,[^WL` <<5/\plCSY\}: V?:|@dIzV{M}%dQ1v'<+] m%6F@?;c#CnwxEv mDohrO B X$A'nz8 GmЗ0Ug1oMm"K'k,'3PpsKx8`zvZBTW,&\KJkZN9H) iV?'D"!Z @pJvxZhbQEp;~W{P&L-O~O^E)>1;! V]?`%@/< gK"C$L fh\z j'Tj\q ]5L%95Q Qf '{"U K sD(Yr7Fuf}9;Q;L\7b_^8+brI\^adiix;Phl[ 1k*Q`BBYBwa8=`=# 0obvGsP@uy[R-zNL,ZlOA@g,y R&'&)fp lli {yeC4W{&TaotMnf}H`_LjauC4j?#(7}b\Jmch`]c}"16Tl4x!yKEU\7XDWm/ntR|_ywe&HaR[/$:691+5Sf ~cM@eL;oFU\o/'ug.VH 7fR?R5A.aB(Tal:c0e#xmA#`2U%bevq@E$h yf;G/ ~]8s!?ub!lBy9{'3QNxQc8**CHoe;@<~D5"q4xX.*`RrOyfQI+o6Avon|j6FGh.aV-k#}W$P{{o;-8org~ ]\LdNGE5cq6NzO+`GOYb4aQc[<|> cj4!KY,{W'WA.3lu/dwnpA"=#ctl7+uA *'!1 xi,u3{}zZt; S5M6/D>(r7U?<), X X71'3-WB]?6|"CK%j|NAgQ}u9Mh)QGl+I8{ TN|rD/0|7X ,:- ;/uZf&IKz+n/ꤵ/*6 b .qUga[,N R3YmnGwg%93qZ4>#[t.tJ&BY7)?CV{iq2cml+> bU>"ygC0 R}1I\L 3wSKbg d842NcGb_hPh#Wtz4I;wj#a^>8.)B*eF?,5Fe(`2N%^a{$ k~c# 6MMs98~&*imvu-u/1lmv;/yVU_Ca6$R&Fi2Gi]%=wr<@jji*VG(-:x@Y.$^2v4E>6K7UCE _gUm?0:'c<|*/Tb(E0%V:Q^!]W!Z[L!?A "jt*k,7;_x9K$F$3(~p!@=29EI)b2S@#?`(Vri=(tE 0y\ }\$1od>y7#Rw5uqi !U }=rLc0"b8'M=q]a!_DAnytx Q@C5&j@Q`u=x^j1,t_jAN17,h\7n +rA%@u|r+)BJ/i+/2_Z,O1r7JTB ckg7bFw qeBUbX,R9D+r&y9l0dFdIGpU{j_aXpM%`iS_3Ea){~%=  K4*RN-~a ^Os4R /R{m'7)kZ&KHeo+\QIe3=Q^kq08 }C?j6~~eX P9J#\#>om-d4UQ>C)|aOzB.)<.1`] uB|J%p2uRu@Y)UDG*B-3}~6cK|SL[RDMH_0Mv.i^r3n:t~qXfaS@CZ5*|W{{,.A}CcBc}{+KZ4v4$ '}j) _q)A Kn[jos4Bg[gN>;i-]K}xf9 `t{n6X3T:) ywFv|{ ZU `"|*684:: j:})kP`-mc'EW!&56gL7lAxe/raXP#pfx{8;bi &B\0'5kgz;/OB,2 ghrS`)BTz{90lstE}4Oa'oXIEgmP,r'3DMK8@6U0\jM>%V@7UpK*&xT"3J _xu{ zPkko 2U7}d"BKqWT!j}~gWlWV'G;iJ.3!BNu bW@" q4OtsI7SMH~F. UK:eYRr A1^W(O&D_!Ek27Bv$Ni&>exg 6?,9P7Ec.(/gL"mWuOB2;51fJA`56jq\/v<D/ , 65srs=gC5(MRfp%3{sLAOGc$Q):f ,se5i"&.&k$EnnpB%xA/<=dl )0Ri;Z8@H1CD2Va XmI01}kQOIA(*u9PDe.g EN6 Mb|m[ZWw5T]LwG 43>yRzJ6qX(g+ o(L/=m|8>+_JD]KSK8H_oN?e]a:='AQL_%(1F[O]o1,\TI)5EL">C!aGt)S~H{|+2Q$QL=yvh"  js:~  * 1eWsb3DaCtqֶY66DWO)TXN@g0#OMnx{k(3gd'-v4I>3&F0@$qo^J,gi?;<(.r i]PcIFY"H_2{[}^yi$Vpy:7'K6U!%bPl@_slx|]5["RHiN_>qZ>qaA Qu3'VZu?,I,xX7NhrDcP>A u@oq6p3+nh\4y&R4uCg~*b?G |} #+ m"/L"FK^r4^R~F:DP2 b/j~&$>iMqcJ˖s3LXr8 >U2[Z!2w*)'kkN!3$hQdJ!ep9ob+e0 RxzK+xza'}1K NN`rJFjiR@; G_f$-I(I\zOX6I V4a2c3nS 4e0femR Y|b%'@%QD)[S%9n;z3e ) dh>!E }K"K 8@&`@I^z|oK__BrSv(bKMrpAhPK s4R>k wi 6`=KCxi9iIf hg2kQm!|Ex6R:s8 U~S';Fe\Br7U1#8QQc{;CYB[mP_ a'96 E"m) 4%sQ5JFIyw$6&f{L]9 t8j/7'|w4riI^^GT m̧L%N<`t[/n2(0MtW2?iLQm gS#`RW^ 1->JOKU|A0-@k8slv-t)% "Q2jm>O:^62CE5w,&uE)ylfl4=gHl' Ye%7 B ^Z#_yq`IH4!0H23D \~mv0A-KYqyPfW;S 23Q,@EL^X](?"KcJ,$0Bq/zP~R![b/seM.IDTgA,tT2WT>dp.(|xceyKQI2JYSF$P-dG&&CDr3Cl[i'1+M[)vA%V4(hWR,9[42ue w|4;YZ"b^!2[b%@g`L8L3=zlVnCIEuwDT>"-> ATOXN1vASMvSh/}BH($ we?l_> 0i`N_Oa-Db=@v(*V&wwDWY 9]%4odt I?,K1Z#F&V)*H~bx jBy5APZH!df^dk>bC1X1}3U25<3/mpndnG[h+pk$?Qr4M%.@=fCJ =Fi03 w='j?0m:\"ZO^Qa/_SFO a+[^gN4WmHd=LmFz=wu".B6 5sA<394qp,oK;?gqd1?'hD`.^'*/oVnTNX.b+i.z@9 veG VDKYlimAXT4j;PCa+ qi= Eiy*tsNv{CR'(LC1)|Ne-6f]%I0\ C"^h:+Y7'5k(&uuE\ a>o;Ke"DXKty / EYSZpxgp N&~zw7pFau!p(=dVV NH1o%~x@>FZcYJ)x+| D\Gf+P Oi v@<x3(uqEmN-5ax#_1p(Z|MdaO$Fwh?1Mj4S}HG'V1F8LrcyrTG\x[E{\Nx| IS@IpB TCi#0Z u-4FV[)p,>v6D_U!R~ %NM"'1ku PFd }^ca|nCNZMlwYKI{ s4dk^Lnvr#J'}a(vzu YRGJ` +i!.g/> JG\O^Lu~gbOi_>p=p>.dV~Iegm?dhmk$ L9o1CG|.6TDw$Dj6-?i+kK0F{V_]sa_z0&L N GCC hZ: /{Rqqt-KxwxQNNTVX4? rLYq WS4#sG9kk#WbRG+ge3'SZ+!1`s?N1] -]CZ-] cAR"Mjy l^ !qmb &8K9Y@94|-HRx9D9% ]e` +:TE8*8()&-v6Eb<w5!f <`AJK0@Jm2dP[B,$\u!hnzv}-}!L\) ~?$$-Un =MQxE\e+5I8UI5R1]~}0x^<7-e ;|;dftHh;jc{ooXA_:.sf_T84ovF33=:Jx#7LwC]&2`x%Qy}tpxRdVC%),LK82{)P`WsZ'O4!pkS5b,1#W3gF%x-~}0GnEKSR8i9Ro6L 53xvV5yANHm01EzFg 'Po1_ZF3#osIRC]5r>$7!,fgBo;1ѤT>6^K]WmThtY'N9>O659>61lR6xhEO ;5;#]pR~, m@{wUQ81f  C237?|W5W#y>KP%P#+V0L5qK,*`U.P"XnxPsjQqf$M0`K_ykcK3E9T|#:7N@U@i^kYtRWyk-A_)J_V(^rU%GIS7(:XU @)ejh )( RaJ?Ck%6Z#dFNH,2EIlk M miJ8/lKUUf3W4VaHjht&Oo(5&)"WYR$BwiA*(a1=r[G0q+=Q (CO74M%9;.YQ2lga4h&(<4U")L[)^t\5I 3Jej*n7RFKv3o)n*+e. [\i$e[?ca!>/t= d[l|?M aMI]"JQ!=;{DZnve#3ufs1J@G(PMd9YpU2xMO!@+dU~K$= QYzykBTJ@D]TBjXU{87}GcGkIG X) hy6db%l&8 TOjXI^.oOu%m_<-h)KP7Ï9(LDBB]cAd&ke9pvu,T?BkvU`{e3^N! gJS= rkOC+gy7e{cG,kEB}>_-@5N>(USCJYP|kZU>j Wwzi,&-05bH3(5:q>EZӑcAfFjJ_l7vcpBsgwnNYK&%Sl81/+' S'qF6w:d mOpbr1ldKG$yjPdb% =j&e9n68@+a':91R'Z ~ujEd|PݑGyz^E&\q~P&J%(!?try' v6+3Kb(d9Q;s6n9M+14TS(+cLM=sgIk@P=JzIl,-hX{@ W4 uj#&c6aI| [*Z\KdG-_Rdr3UPM8t,vEJE%vJ>H,TrORN8+^xO]'alUM$plQ+2L{ 5rJ=G-*26XsIF_3~|A̟Y-aq-X@_+(&5 ?';SCW`"I'L{<fT,$0+#:B/,HZ?GbЈF uJsG.y-n9Yd OSA4Oe@@sLVa#U%1J|jO"; B%w^ >uMh5Erm#n\t Ie4o}AUIp4lzt#;nNN69sN+4?sJU7r]$#!*1kWGeF(}EQtv."U]})_Jo|.d2XAnq$`/M-w0z+YUDklKzfc`G3.x 9^L6SFY5\Wq=v{'qUKAsZWx/>K3qg*w< lCk(JJOP `;%ikQ=. z]7 xL|;DA&Cg,ly\IO:LdAP,Et@ 9ibvl TBVLm5ch#l]`mrUW */([b{Iy)jqk,%jJ~%d \d`lYpeI2C8{7D_e}'`)11h'W(s"B%qFG!6^F%BqbkLmb#<*;x4*IW7HT\E1b{*l 2 2gs~XpQ K(z/FS &W"kQs$R)nP?OY9.UXFP%O2n0qD%7b=Ugj>(8r.p h+yn<&ah"l Ib!`,/yMj]D3Tw&"K<2I(5|x^_9'ih:D"\/sFXp" Z;l'=R% =:Do!yXNK>$R9)m y* s S(Em+pBlM,h2S z{TA:-o PSO/."zz Abe|Hz 8dP,Z:p."'8@T;+>aYN2c:9oihpXY5Kg eHJ5VBxlo,`Ldqw=C K.D?dI5o,Aui&_x/jUhmHm%?  H[kZi%m"F!kt&[lhetwM8zO`4bXp gy&5#NSDx sh;'fCA@k~v2 $sBoQpaB"=dY-Iu VZ\E]H~v=l(-ClWe^nj { S)H~E/]@XGe9?|K`wY wy%}GVRNPK1_ * |P"gS\aDQp #$We e,| gg#Jeq7a& g+= \J|]~:6 883]\{0_MR'Rz;LR1$sdb#пSQ~|d1h9MQCx_S1PTik^p /t !5oIE~DV!! VSlm-a+%M.O%euw7 $ERVVUkR]_tfFO3& . fcq.K.}V@h3I0X0zsW6e-N`N'<??d _Lt+uu~KbmKGSP Nj|Or- cty[= hi7X`3IC% eEpnnk0cY.k,I%A_ m%W0.Pmj@]o'kL>v8(O|vQ`v*.8;QKr'J2U{&<~i IK 0a| l%d_.\jU`jP[\= `-e%eFc.6F;<2[@J3EXIk%Mb e79(7?{ hzW;Ww1?b*?-FB2j*ohV?<LH'z-VkUG@^I?jSGO1'lO2M'q7Q>|y%("U$7Dp37TCeJqAX~5l1/?<0+o`r_xihm4zPg&+e6. *U+ufIDE1;*>~\t Rm_{Y]4%b&s3AGe<y{ebsd!z8oV6h1xboF`qBQ {hr]Q|j`td Ji9 0(Li?.i'>#bh^J{ EOpl i%;(*?I;B{ ;6V #X<.P0?AB%9lgK9tNBNNRJO()tc>pO>6_ut8K"iT.&PD8:V9Fkf8z +8)QX"]+Go4gN}E,YaL?ϟ2 d]owy!)%y!ldl!64kk y{< mP+f %#Yu7*@ Z>=0?*\Ev*LYe&BrW?,:nV3uIVK PMs\00k8!$v"^PRgU~6vOBEvo%Z`ZE|s OXxNFycK5R%h|z<(trAFWO' gigFZ8Zly5Y@N?2X/E)'X&.]3B;LQ*gC,븸p`m eW&B@q4ZN?o3 4O71k6r;cunx]JS-EMivB# {y>BPuIaFES UsG=6zF@ o@NtCk:)Xټhe3 8.(vBtT/9;{[[*OC)bNNV_#,oQ*,b\qZ7Egi.TwPF1?LI"_{N6X] tDTv15Cc*;/uvL- Ji<;'0H CoRo@EWDzy=k[/`]g~id? Sp nK&+s52=^~7*_l4dMafLAZRw#DhzzkDT|^xD`v4w"yjq RQ4Sv@xbF &|,jg}i7vEv%uK?}'%pK]Q mM<3_h\c/$d2|X/vT0{:4 DJ;WJAA$la+hz_9RS (Vv%mNy `-q 0;6oJAY01 NUC4:jx|+4Iz )=kJ1wBE~q4$Coe 5YW'?TtYCU}69svjPJF=T<_+d lm%='v9[rFC$maAn";eyOdcRREp.4H"lw& q;;(8&AvKt?]^)&8f:V+Oq]3V>8zlv8VWQrBnI$ ?(PJMmNP o+u^binXrc2h_ 8T]Ttw)W`neS%A-#k Mq[7]&:;sdq2O@ J%~Df_` $(\!y$uzuq#\,'7:sb@JDy`wvLq3bXQZw54-g 2afkb|ժE$0R6 z5{/k;29fo"_4zEQh[E5`n5jonHatw$D8ck C g[k9K~t@4H9h\ h~gM2 RQj%J4#pN%xUP@O2{Axs=EY MB>+# ZNo|gBGcIF Je&#E[^M z9 WN{BDbG jJSu?@b!G ac~POzg& r|{&+MAmVo  2jbM!G?U06^Q'\+e0>1_Z[#g,,+M3 <<7-W..IE&iz77y||r OmH>Uq&JYrUN8on; FhW < ]0uF>GJk"t=V"_eM _k "B,LGKyc>)#:W[YK>vr v;Q; GaViV .o-YRx$flv9<jJi,I#nKC-*IbaCAKWw5L@gn2:9q>j[^o|j;q2pF5M0egmkTZ4`"-i}k~3~*h[@g #x(PR.ijla n !z7pC+j9{AH} Zcy$@'^uO <6fa/J&oam[WO#ji6G<_fy oZVaxek)~-%vzHkSPb,'}uN5r Hr)8-r0F;~v$6w*VM>o`LuI!BQtHx~3pY!0s?&J-_B!h1[a3 $1^m {o.g7W=j9!?=fX=(;`y? )$sFb Px&%DbYpnl.gq$V"b)c[>[v>R:o*!bdinzw E^5[t h%CDoNA4R *z'2lOI'3lE3-e|Wy!n-X>i >1eUeZ$ b Frr13dLp&FM$:}yx^ 9S(1N$M:kk&0%x0tBu'uH,bCLXGOf9LW9A +NByB.}*5|}VTbB[<, x[FY?i7X]G_9Ou^m,RH&bC)d(2IheJr|)XMB+kPj_x;t~@0_6Yb64z9in>I_GSKJ4F=.JTdz/pIB*Tf|D0RrJK9x{<*g2$:Q@L Z~aA qYo~w:46HA;cc"[$wi!a2tx>k19AkN2;odoNt9H1/{VY%US}9Pc(j[4<T*XG<`J@~7b":DLkkz-?RZ(GNFVgOzu-1(; p=|p/,J3;P=z17w\b*RP87'DEC>s2:6;+?Zrxx%|(d NuB79.qTRz-}wp. el'v[ t%ajW ?Xgwp bjAnly`FT1@%,Gz/C~x4gksg @kihyRK#T*|^z0:hb6"96A=y4{k] #qr&D$^Ym~gnot>**CG,=;B2!Dh_&{_s*\1Fjbg=BtaC/q\O=9)JAcS(w+wT}kBKQoq0C a?0W8aaeI;Gw Ge" 'o cAOFA!L[*nwR_P;9&tuuD~|PQ#MT] gqOQ27.Y> HLpXD H"p&:=,*dm16r#:4n=E?l`4fx>("+9[f~bY/e\OAG?A(ny=A&Bv:l~YeW`J52*E Q WvyEyy*X:roLr ^#(G1 4fB;.l8bNg0M]Z4)kyzh4V?dSl(.;!(8^zjeHo?(MM Q *Q<.H'${f1|mo:j^L rJB?Svy"c3NaLZ z\CHyZ[R=@sl]@'Pw 9G'}Kz;'M8}R6s>v-r;gBrAC]c><>0?+ LmEGcf~nbd @7haq :GS@S/Fs[az#OR?M%=J 2fVdGsꏈ2f Ru)OS$jg~ LwRL%.2Wz_llZX~zZ_elt]aO_<9.K8o9)/&Qv);O5? 1d)CXTC lUd,3R*X*0kyNupJpp|()SQ\/h 5;eb~d~Yh5ZAsl6 jN?D> 0`Z%~Sb@Lw-Y8cO6e +kcu-# b}q8e:`UY{a>0JJ[g&pM .a&>>,_"V{OV*B4 NuG\g*Od} O;e6H0\aV?s_{27XmU;Fo,_{]MRhv1U sn$C4ScmN~E)IO]N") |X90yp w:!7<~!,L '[,bܑO jc&c7= !zW$[1i! N9\"49Ds"FjSY\rA9H_0jjsb(Y8lFL}od46NiJ@ T'c.X4fJQ$q~X$#|ZcRQ$yW3px}hqA Y0:I*t (dL|;1~B4!/MdxN D
  • On VAX/VMS @un~ DFU024.BCKm[[DFU024.DOC]DFU024.LINE;2 ?e sets the 'BADACL' flag in the file header.? This enables deletion of a file with a corrupted ACL.:k ________________ /BUCKETSIZE=size /BUCKETSIZE=size /BUCKETSIZE=sizey: Sets a new value for the bucket size in the file header.rK ________ /CONFIRM /CONFIRM /CONFIRM { __________ _________ /NOCONFIRM (default) /NOCONFIRM (default) /NOCONFIRM (default) : Controls whether a request is issued before each@ individual SET operation to confirm that the operation; should be performed on that file. When the system ? issues the prompt, you can issue any of the following= responses:, 10-2 10-2 10-2 o SET command SET command SET command SET SET SET 1 YES NO QUIT 3 TRUE FALSE CTRL/Z_0 1 0 ALL+ U= You can use any combination of upper- and lowercase ; letters for word responses. Word responses can bem= abbreviated to one or more letters (for example, T, < TR, or TRU for TRUE). Affirmative answers are YES,= TRUE, and 1. Negative answers are NO, FALSE, 0, andn? . QUIT or CTRL/Z indicates that you want to stopl@ processing the command at that point. When you respond< with ALL, the command continues to process, but no; further prompts are given. If you type a response > other than one of those in the list, the prompt will be reissued.{ ____________________ /CONTIGUOUS_BEST_TRY /CONTIGUOUS_BEST_TRY /CONTIGUOUS_BEST_TRY ______________________ /NOCONTIGUOUS_BEST_TRY /NOCONTIGUOUS_BEST_TRY /NOCONTIGUOUS_BEST_TRY = Sets or resets the 'CONTIGUOUS_BEST_TRY' bit in thea file header.w ___________________ /CREATION_DATE=date /CREATION_DATE=date /CREATION_DATE=dateok ________________ /NOCREATION_DATE /NOCREATION_DATE /NOCREATION_DATEi= Controls whether a new creation date is assigned ton@ the specified files. Specify the date according to the> rules described in Chapter 1 of the VMS DCL Concepts< Manual. Absolute date keywords are allowed. If you6 specify 0 as the date, today's date is used.S __________ /DIRECTORY /DIRECTORY /DIRECTORY.[ ____________ /NODIRECTORY /NODIRECTORY /NODIRECTORYt; Sets or resets the directory attribute of a file.n< This qualifier allows you to set the directory bit; of a file which was mistakingly reset by the 'SET < FILE/NODIRECTORY' command. If it is done on a non-< directory file, then access to that directory will% give a 'BADIRECTORY' error. 10-3 10-3 10-3   A SET command SET command SET command ) SET SET SET g _______________ /EBLOCK[=block] /EBLOCK[=block] /EBLOCK[=block] ; This qualifier will reset the end-of-file mark to : the highest block allocated if no block has been? specified. Otherwise the end-of-file mark will be set ! to the specified block. _ _____________ /EBYTE[=byte] /EBYTE[=byte] /EBYTE[=byte]N; This qualifier will set the end-of-file byte markM; to the highest byte if it has not been specified. @ Otherwise the end-of-file byte mark will be set to the specified byte.h _____________________ /EXPIRATION_DATE=date /EXPIRATION_DATE=date /EXPIRATION_DATE=date s __________________ /NOEXPIRATION_DATE /NOEXPIRATION_DATE /NOEXPIRATION_DATE < Controls whether an expiration date is assigned to@ the specified files. Specify the date according to the> rules described in Chapter 1 of the VMS DCL Concepts< Manual. Absolute date keywords are allowed. If you6 specify 0 as the date, today's date is used. _________________ __ ___ /IDENT=identifier or uic /IDENT=identifier or uic /IDENT=identifier or uick> Modify the file ownership. See also /OWNER_UIC. This; allows modification of the file-ownership even ifF? the file is open, eg. INDEXF.SYS. You cannot use bothD /IDENT and /OWNER_UIC.G _______ /LOCKED /LOCKED /LOCKED O _________ /NOLOCKED /NOLOCKED /NOLOCKEDv9 This qualifier will lock a file for future use.h< Nothing else can then be done with the file, until= it is unlocked (which can also be done with the VMSe 'UNLOCK' command.ec ____ _________ /LOG (default) /LOG (default) /LOG (default)NC ______ /NOLOG /NOLOG /NOLOGc< Controls whether the SET command displays the file> specification of each file after the modification is made. , 10-4 10-4 10-4 i c SET command SET command SET command SET SET SET c ______________ /MAXREC=record /MAXREC=record /MAXREC=recordh? Sets a new value for the maximum record number in the_ file header. _____________________ /ORGANIZATION=keyword /ORGANIZATION=keyword /ORGANIZATION=keyworda? The following keywords are used as parameters for the ? ORGANIZATION qualifier: DIRECT, INDEXED, RELATIVE andu< SEQUENTIAL. This will allow you to modify the file> organization type in the file header. Of course this9 won't change the real organization of the file. ______________ __ __________ /OWNER_UIC=uic or identifier /OWNER_UIC=uic or identifier /OWNER_UIC=uic or identifierE< Modify the file ownership to an uic or identifier.@ See also /IDENT. This allows modification of the file-= ownership even if the file is open, eg. INDEXF.SYS. 4 You cannot use both /IDENT and /OWNER_UIC. ______________________ /RECATTRIBUTES=keyword /RECATTRIBUTES=keyword /RECATTRIBUTES=keywordo; The following keywords are used as parameters forI> the RECATTRIBUTES qualifier: NONE, FORTRAN, IMPLIED,= PRINT and NOSPAN. This will allow you to modify thee< file's record attributes in the file header. NONE,@ FORTRAN, IMPLIED and PRINT are mutually exclusive, but= can be used in combination with NOSPAN. When NOSPANt= \ is omitted SPAN is assumed (the default is to allows- records to cross block boundaries). _ _____________ /RECSIZE=size /RECSIZE=size /RECSIZE=size: Sets a new value for the record size in the file header.Ok ________________ /RECTYPE=keyword /RECTYPE=keyword /RECTYPE=keyword ? The following keywords are used as parameters for theS? RECTYPE qualifier: FIXED, STREAM, STREAMCR, STREAMLF,S= UNDEFINED, VARIABLE and VFC. This will allow you to ; modify the file's record type in the file header. 10-5 10-5 10-5l  A SET command SET command SET commandr) SET SET SET w ___________________ /REVISION_DATE=date /REVISION_DATE=date /REVISION_DATE=date_k ________________ /NOREVISION_DATE /NOREVISION_DATE /NOREVISION_DATEs= Controls whether a revision date is assigned to thed< specified files. Specify the date according to the> rules described in Chapter 1 of the VMS DCL Concepts< Manual. Absolute date keywords are allowed. If you6 specify 0 as the date, today's date is used.c ______________ /RVCOUNT=count /RVCOUNT=count /RVCOUNT=countm= Sets a new value for the revision count in the filem header. G _______ /UPDATE /UPDATE /UPDATE w _________ _________ /NOUPDATE (default) /NOUPDATE (default) /NOUPDATE (default)s; Normally the file's revision date will be updatedr< after any modification to it. SET however disables? this update (otherwise the REVISION date could not be ? set). Specify this qualifier if you want the revisionu date to be updated.p_ _____________ /VFCSIZE=size /VFCSIZE=size /VFCSIZE=sizer? Sets a new value for the VFC size in the file header.T@ This value will only be used with the VFC record type., 10-6 10-6 10-6  SET SET SET 10-7 10-7 10-7   VA _______________________________________________________ 8 11 UNDELETE 11 UNDELETE 11 UNDELETE> This chapter describes the UNDELETE command with the, related parameters and qualifiers.L __________________________________________________________________D 11.1 Introduction 11.1 Introduction 11.1 Introduction> The UNDELETE function is designed to recover deleted> files, if possible. UNDELETE operates in a safe mode> such that it first checks if the deleted file header? and diskblocks are still available. Only in that case(= will the file be recovered. Otherwise UNDELETE willf@ leave the disk unmodified. UNDELETE has some powerfull options:@ o Generate a list of recoverable files with the /LIST< qualifier. This qualifier will not undelete any> file, and therefore it does not lock up the disk.1 o Undelete multiple files in one pass. = o Make file selections based on the owner with the( /OWNER or /IDENT qualifier.< o Undeleted files which cannot be entered back in: their original directory will be moved to the: [SYSLOST] directory. This saves an additional( ANALYZE/DISK/REPAIR action. 11-1 11-1 11-1_ _ _8 UNDELETE UNDELETE UNDELETEL __________________________________________________________________V 11.2 How Undelete works 11.2 How Undelete works 11.2 How Undelete works4 The UNDELETE command operates as follows :3 1 Lock the volume. In the same manner asnA ANALYZE/DISK/REPAIR and SET VOLUME /REBUILD Undelete: locks the disk for other writers such that no> modifications to the INDEXF, BITMAP or QUOTA file can be made.y@ 2 Search the INDEXF.SYS file if the requested file isA still there. A check is made if it really is a validT! deleted file header.? 3 Checks if the deleted file header and all possible / extension headers are still valid. ? 4 Checks if the blocks previously owned by this file_ are still free.A 5 If all these conditions are met DFU will display the . file and asks for a confirmation.A 6 Rebuilds all of the deleted file headers and bitmapse; in memory. If no errors are found all the filet> headers and bitmaps are written back to disk. The; files original backlink is saved in a table in  memory.= 7 If appropiate the blocks and headers are charged_ against diskquota.? 8 When all of INDEXF.SYS has been scanned the volume  is unlocked. 9 9 The file(s) is (are) entered in the originale? directory if possible, using the table build up iniA memory. If the enter command fails (probably because = the original directory is gone) the file will be A entered in [SYSLOST]. DFU will create this directory  if needed.c, 11-2 11-2 11-2 n UNDELETE UNDELETE UNDELETES@ If the /LIST qualifier is used, DFU will just list the@ recoverable files without performing any action on the, disk. The disk will not be locked.< It is important to note that during the bitmap and; file header processing any error will immediatelye> terminate the recovery process, and unlock the disk.? Files which have been recovered up to that point will = still be entered in the appropiate directory. As no= wrong information has been written back to the diskS7 this should leave the disk in a proper state. ; NOTE: The blocks recovered will NOT be subtracted 8 from the Volume's free block count. To get the; actual freeblock count a SET VOLUME/REBUILD=FORCEh> is necessary. Also a complete reMOUNT will reset the freeblock count.? IMPORTANT: DFU takes care to recover only files whoseo< original blocks are free. However these blocks may< have been modified in the meantime by another file? which also has been deleted. Therefore each recoveredw? file must be checked manually to check its integrity. ) Example of a Undelete session : 5 DFU> undel $1$dua102:/list H Recoverable file [TEST]CHANGE_UIC.FOR;2 foundF Recoverable file [TEST]CHECK_ID.FOR;1 foundG Recoverable file [TEST]CHKPRDIMG.FOR;1 foundZD Recoverable file [TEST]CHRLEN.FOR;1 found; DFU> undel/file=*.for $1$DUA102:_A %DFU-I-READBMAP, Reading BITMAP.SYS... E %DFU-W-LOCKED, Volume now LOCKED for writeIC %DFU-I-UNDEL, Start search on $1$DUA102:h 11-3 11-3 11-3s a o8 UNDELETE UNDELETE UNDELETEH Recoverable file [TEST]CHANGE_UIC.FOR;2 found; Recover this file? (Y/N) [N] : n F Recoverable file [TEST]CHECK_ID.FOR;1 found; Recover this file? (Y/N) [N] : y E %DFU-S-RECOVER, File succesfully recovered A %DFU-I-ADDQUOTA, updating diskquota... G Recoverable file [TEST]CHKPRDIMG.FOR;1 foundI; Recover this file? (Y/N) [N] : n D Recoverable file [TEST]CHRLEN.FOR;1 found; Recover this file? (Y/N) [N] : y E %DFU-S-RECOVER, File succesfully recoveredoA %DFU-I-ADDQUOTA, updating diskquota...m9 %DFU-I-UNLOCK, Volume unlockedrI %DFU-I-ENTER, Entering file(s) in directory...Z %DFU-S-ENTERED, File CHECK_ID.FOR entered in original directoryX %DFU-S-ENTERED, File CHRLEN.FOR entered in original directory$ DFU> EXITL __________________________________________________________________e 11.3 Files marked for delete 11.3 Files marked for delete 11.3 Files marked for delete 9 Normally DFU does not undelete files marked for : delete. This version introduces a new qualifier,= /MARKED , which specifically undeletes files markedS= for delete. This allows the recovery of files whichb= are deleted but still open, such as INSTALLed files_> or even recovery of the system dump file SYSDUMP.DMP* whenever such a file is deleted.L __________________________________________________________________w 11.4 UIC and identifier processing 11.4 UIC and identifier processing 11.4 UIC and identifier processinge9 As of this version of DFU the /OWNER and /IDENT1; qualifier now accepts all valid uic or identifierw/ formats. See chapter 9.5 for details.t, 11-4 11-4 11-4 _ UNDELETE command UNDELETE command UNDELETE commandu UNDELETE UNDELETE UNDELETE-A _______________________________________________________i8 UNDELETE UNDELETE UNDELETE8 Recover one or more deleted files on a device.A _______________________________________________________ 2 FORMAT FORMAT FORMAT UNDELETE UNDELETE UNDELETE _________ device[:] device[:] device[:]A _______________________________________________________r> PARAMETERS PARAMETERS PARAMETERSC ______ device device deviced< The device on which to undelete one or more files.= The device will be write-locked during the undeleteE process.A _______________________________________________________y> QUALIFIERS QUALIFIERS QUALIFIERSc ______________ /FILE=filename /FILE=filename /FILE=filename: The file to be recovered. Wildcards may be used.9 If a matching file is found Undelete will ask aA< confirmation. If a certain file is confirmed, that> file will be recovered if possible, and control will@ be returned to the DFU> prompt. If the /FILE qualifier, is omitted DFU will assume *.*;* . _________________ __ ___ /IDENT=identifier or uic /IDENT=identifier or uic /IDENT=identifier or uic6 You can search for files owned by a specific: identifier or uic. Another way is the /OWNER_UIC< qualifier; you cannot combine these 2 qualifier in one UNDELETE command.o ________________________ /LIST(=output-file-name) /LIST(=output-file-name) /LIST(=output-file-name)g; Generate a list of recoverable files. No undeleteE? will take place, and the disk will not be locked. The & defaultoutput is SYS$OUTPUT. 11-5 11-5 11-5o d hP UNDELETE command UNDELETE command UNDELETE command8 UNDELETE UNDELETE UNDELETEG _______ /MARKED /MARKED /MARKED ? Consider only files marked-for-delete. Such files are @ usuallly still open by some utility, such as INSTALLed( files or the system dump file. ______________ __ __________ /OWNER_UIC=uic or identifier /OWNER_UIC=uic or identifier /OWNER_UIC=uic or identifier < This qualifier is used to select files by a uic or= identifier . You cannot combine this qualifier with  /IDENT. W ___________ /STATISTICS /STATISTICS /STATISTICS = This qualifier displays the performance statistics: 5 CPU time, Elapsed Time, I/O and PageFaults.X, 11-6 11-6 11-6  UNDELETE UNDELETE UNDELETEt 11-7 11-7 11-7_ _ _A _______________________________________________________i/ 12 SPAWN 12 SPAWN 12 SPAWN 6 The new SPAWN command creates an interactive; subprocess. This allows a quick escape to the DCL ? level from an interactive DFU session. The subprocess = has a default prompt DFU_sub$. In SMG mode the _< key also performs a SPAWN command. You must logout2 explicitly to return to the DFU session. 12-1 12-1 12-1,  A _______________________________________________________n2 13 VERIFY 13 VERIFY 13 VERIFY< This chapter describes the VERIFY command with the, related parameters and qualifiers.L __________________________________________________________________D 13.1 Introduction 13.1 Introduction 13.1 Introduction; The VERIFY command makes an analysis of the disk,w= scanning for file and disk structure errors. VERIFY < performs almost all of the checks normally done by= a ANALYZE/DISK command. But VERIFY is several timesS= faster than ANALYZE/DISK, and using less resources. 9 VERIFY checks and reports the following errors: < o Checks the logical information contained in the disks HOME block . o Reports files marked for deletion: o Reports mismatches in the index file's bitmap" o Checks all backlinks.. o Reports multiple allocated blocksA o Reports blocks incorrectly marked free and allocated_# o Reports all lost files A o Checks for mismatches between blocks used and blocks_? charged in QUOTA.SYS. (Only done when diskquota isA enabled)N 13-1 13-1 13-1   a2 VERIFY VERIFY VERIFYL __________________________________________________________________\ 13.2 Basic repair actions 13.2 Basic repair actions 13.2 Basic repair actions> The /FIX qualifier can be used to perform some basic> repair actions. Unlike ANALYZE/DISK/REPAIR this does? not lock the disk! /FIX repairs the following errors: : o Deletes file marked for delete (if possible).@ o Recovers lost files and directories into [SYSLOST].8 o Recovers a very rare problem which will get= ANALYZE/DISK/REPAIR into a computable loop (This @ problem is fixed in VMS V6.2 or with the VERI02_061 patch kit).> o Recovers a corrupted backlink for the Master File" Directory 000000.DIR.L __________________________________________________________________V 13.3 Directory scanning 13.3 Directory scanning 13.3 Directory scanning< This version of DFU introduces the new /DIRECTORY_@ SCAN qualifier. This qualifier directs DFU to scan all= directories on the disk. This has some advantages : < o Better detection of some cases of 'lost' files.= Combined with the /FIX qualifier DFU may be able= to recover such files into the correct directory 7 instead of moving such files to [SYSLOST]. = o Detects and fixes file-id mismatches between the / directory and the INDEXF.SYS file.@ o Using the /DIRECTORY_SCAN qualifier makes DFU fully* compatible with ANALYZE/DISK.= Please note that a complete directory scan may takeU& several minutes to complete., 13-2 13-2 13-2 _ _ VERIFY VERIFY VERIFY L __________________________________________________________________e 13.4 Advanced repair actions 13.4 Advanced repair actions 13.4 Advanced repair actions < The /REBUILD qualifier can be used to perform some> more repair actions. This will however lock the disk> (like a DCL $SET VOLUME/REBUILD=FORCE command) for a> short period of time (usually less than 30 seconds).1 /REBUILD repairs the following errors : @ o Mismatches in the INDEXF.SYS bitmap (files reported3 with the NOBITSET and NOBITCLR errors)e? o Blocks incorrectly marked allocated or free in the BITMAP.SYS.. o Mismatches in the diskquota file.; Note that /REBUILD does NOT change the disks freeY block count.L __________________________________________________________________Y 13.5 Interpreting errors 13.5 Interpreting errors 13.5 Interpreting errors < On a system (cluster) wide mounted disk there will@ probably be concurrent disk activity during the VERIFY@ command. Therefore VERIFY may report some errors which@ are not really errors. Try running VERIFY 2 or 3 times; to see if the errors are reported again. To get a > really consistent report from VERIFY you can use the? /LOCK qualifier. This will write-lock the disk duringa@ the VERIFY run, so don't use this qualifier too often.< (The /REPAIR qualifier of ANALYZE/DISK also write-@ locks the disk). Even if DFU ends ungracefully the DFU3 exit handler will always UNLOCK the disk.h 13-3 13-3 13-3i  2 VERIFY VERIFY VERIFYL __________________________________________________________________M 13.6 Error reporting 13.6 Error reporting 13.6 Error reporting 5 An example of a typical VERIFY run follows:b- DFU> VERIFY mydiske; %DFU-I-VERIFY, Verifying MYDISK:tF %DFU-S-CHKHOME, Home block info verified OKA %DFU-I-IFSCAN, Scanning INDEXF.SYS ... C %DFU-I-CHKBITMAP, Checking BITMAP.SYS...rE %DFU-I-CHKLOST, Checking for lost files...XA %DFU-I-CHKQUOTA, Checking QUOTA.SYS... < DFU> VERIFY/REBUILD sys$sysdeviceA %DFU-W-LOCKED, Volume now write locked B %DFU=I-VERIFY, Verifying SYS$SYSDEVICE:F %DFU-S-CHKHOME, Home block info verified OKf %DFU-W-DELETED, file (620,351,1) RSF_DI_RSF_SERVER0.TMP;3 marked for delete` %DFU-W-DELETED, file (6349,173,1) DCLTABLES.EXE;937 marked for deleteg %DFU-W-DELETED, file (19745,35,1) RSF_DI_RSF_SERVER0.TMP;3 marked for delete C %DFU-I-CHKBITMAP, Checking BITMAP.SYS...ik %DFU-E-ALLOCCLR, blocks LBN 2667141 through 2667143 incorrectly marked allocated k %DFU-E-ALLOCCLR, blocks LBN 2667153 through 2667161 incorrectly marked allocated  . .K  }7~ DFU024.BCKm[[DFU024.DOC]DFU024.LINE;2 ?egAJA %DFU-S-RBDBITMAP, BITMAP.SYS succesfully rebuildaE %DFU-I-CHKLOST, Checking for lost files... 9 %DFU-I-UNLOCK, Volume unlockedo DFU>S1 VERIFY can report the following errors:a5 ALLOCCLR, blocks incorrectly marked allocated,sU Severity: Severity: Severity: ERRORe Explanation: Explanation: Explanation: Blocks were found which are not allocated = by a file but set in the BITMAP file. This error is? often seen when VERIFY is run and there is concurrent < file activity on the disk. Also, if after a system? crash the disk is mounted with /NOREBUILD such blocks , 13-4 13-4 13-4 t i VERIFY VERIFY VERIFY @ may exist. ReRun VERIFY with /LOCK to see if the error is still there.] User Action: User Action: User Action: Run VERIFY/REBUILD to rebuild the BITMAP file.20 ALLOCSET, blocks incorrectly marked free,U Severity: Severity: Severity: ERRORt Explanation: Explanation: Explanation: Blocks were found which are allocated by> a file but not set in the BITMAP file. This error is? often seen when VERIFY is run and there is concurrent < file activity on the disk. Also, if after a system? crash the disk is mounted with /NOREBUILD such blocksb@ may exist. ReRun VERIFY with /LOCK to see if the error is still there. User Action: User Action: User Action: Run VERIFY/REBUILD to rebuild the BITMAP file. / BADBLOCK, file has suspected bad blocks,eU Severity: Severity: Severity: ERROR Explanation: Explanation: Explanation: A file has suspected bad blocks. This is= likely to be caused by hardware errors on the disk. User Action: User Action: User Action: Try to copy the file to another location. # Also check the Error Log.a2 BADEXTLNK, link to extension header broken,U Severity: Severity: Severity: ERRORr Explanation: Explanation: Explanation: VERIFY tries to follow the extension link-? of the file and it failed, or the extension header is  invalid. User Action: User Action: User Action: Try ANALYZE/DISK/REPAIR. However, this> may be an unrepairable error, in which case the file+ will be corrupted and unreliable.s 13-5 13-5 13-5  2 VERIFY VERIFY VERIFY@ BADMFDLNK, directory has backlink to 000000.DIR on RVN n,U Severity: Severity: Severity: ERROR_ Explanation: Explanation: Explanation: A directory has a backlink to a Master= file directory other than the one on RVN 1. This isd> incorrect, but the only way to recover is to reenter> the directory manually into the 000000.DIR on RVN 1. User Action: User Action: User Action: Do a SET FILE/ENTER into the 000000.DIR @ directory on RVN 1, then do a SET FILE/REMOVE from the wrong 000000.DIR. ' DELETED, file marked for delete, W Severity: Severity: Severity: WARNING Explanation: Explanation: Explanation: A file was found marked for deletion._= Such files usually exists as a result of file beingL? deleted while it was still INSTALLed , or as a resulti> of a system crash. It is not considered as an error.? You can try to delete such files by using VERIFY/FIX. ' ERRHOME, Home block info not OK,UU Severity: Severity: Severity: ERROR Explanation: Explanation: Explanation: The Info contained in the Home Block was& not consistent or corrupted. User Action: User Action: User Action: Run ANALYZE/DISK/REPAIR to try to fix them error., INVBAKFID, file has invalid backlink,U Severity: Severity: Severity: ERROR_ Explanation: Explanation: Explanation: The files backlink file id is not filled? in. This is likely to be a lost file. (Note that oncee< VERIFY reports this error, it will not be reported@ again during the LOSTFILE check). But is also possible= that the file is in a valid directory, but that thei, Backlink file id is not filled in. User Action: User Action: User Action: Run ANALYZE/DISK/REPAIR. If the file is = in a valid directory the backlink will be repaired.u, 13-6 13-6 13-6 o a VERIFY VERIFY VERIFY ; Otherwise the file will be moved to the [SYSLOST] = directory. You can also use VERIFY/FIX but then the: file will unconditionally be moved to [SYSLOST].' LOCKED, file is deaccess locked,iW Severity: Severity: Severity: WARNING Explanation: Explanation: Explanation: The file is deaccess locked. This may be% a result of a system crash.d User Action: User Action: User Action: Try to unlock the file with the DFU SET - command, or the DCL UNLOCK command. 5 LOSTHDR1, file found in nonexistent directory, W Severity: Severity: Severity: WARNINGm Explanation: Explanation: Explanation: During the lost file check a file was=; discovered in a nonexistent directory. This error < can be caused as follows : set a directory file to$ NODIRECTORY and delete it. User Action: User Action: User Action: Run VERIFY/FIX to move the file to the [SYSLOST] directory.; LOSTHDR2, file found in directory with bad backlink,sW Severity: Severity: Severity: WARNING} Explanation: Explanation: Explanation: During the lost file check a file ; was discovered in a valid directory. However, the > directory has an invalid backlink. This error can be@ caused by doing a SET FILE/REMOVE of a directory file. User Action: User Action: User Action: Run VERIFY/FIX to move the directory to ? the [SYSLOST] directory. Then move the directory back = to the correct location. The files in the directory$ should be accesible again. 13-7 13-7 13-7e  2 VERIFY VERIFY VERIFY1 LOSTHDR3, file found in invalid directory,MW Severity: Severity: Severity: WARNINGx Explanation: Explanation: Explanation: During the lost file check a file was 8 discovered in a directory which is not a valid= directory. Either the file has a wrong backlink, or = the directory file has the directory file attribute not set. User Action: User Action: User Action: Look up the directory and use DFU SET to= set the directory bit. If the directory file was OKa7 then run VERIFY/FIX to recover the lost file._* LOSTHDR4, not found in a directory,W Severity: Severity: Severity: WARNINGa Explanation: Explanation: Explanation: When the /DIRECTORY_SCAN qualifier ist> used , DFU detects files which have a valid backlink> but which are not seen in the directory. This can be repaired with /FIX. User Action: User Action: User Action: Using /FIX will enter these files in the correct directory., MULTALLOC, blocks multiple allocated,U Severity: Severity: Severity: ERROR Explanation: Explanation: Explanation: A file has blocks allocated which alreadyp> belong to another file. Note that VERIFY will make a@ second pass through INDEXF.SYS to report all the files@ involved. This is a serious error, and may be a result> of a disk being mounted on two seperated VAXClusters( (or a partitioned VAXCluster). User Action: User Action: User Action: Copy all the files found to another ; location. Next all the files must be deleted. Run_@ VERIFY/REBUILD to repair the BITMAP. All the afflicted= files must be manually inspected to see which fileso, are valid and which are corrupted., 13-8 13-8 13-8 n e VERIFY VERIFY VERIFYc1 NOBITCLR, Deleted file header marked BUSY,rW Severity: Severity: Severity: WARNING Explanation: Explanation: Explanation: A file was deleted. The corresponding bite= in the INDEXF bitmap should be cleared but is still_+ set. This is not a serious error._ User Action: User Action: User Action: Run VERIFY/REBUILD to fix the error./ NOBITSET, index file bitmap bit not set, W Severity: Severity: Severity: WARNINGT| Explanation: Explanation: Explanation: A valid file was found , but the< corresponding index file bitmap bit is clear. This! is not a serious error. User Action: User Action: User Action: Run VERIFY/REBUILD to fix the error." NOOWNER, file has no owner,W Severity: Severity: Severity: WARNINGi Explanation: Explanation: Explanation: A file was found with UIC [0,0] as the0 owner. This is not a normal situation. User Action: User Action: User Action: Look up the file and modify the file owner.G QUOTAERR, UIC [x,y] has n blocks used, QUOTA indicates m blocks,_W Severity: Severity: Severity: WARNINGi Explanation: Explanation: Explanation: If a disk has diskquota enabled, VERIFYe; calculates the blocks used and compares them withi: the value in the QUOTA.SYS file. Any mismatch is@ reported. This error is often seen when VERIFY is run,< and there is concurrent file activity on the disk.; Also, if after a system crash the disk is mountedd@ with /NOREBUILD such Quota mismatches may exist. ReRun? VERIFY with /LOCK to see if the error is still there. User Action: User Action: User Action: Run VERIFY/REBUILD to rebuild the QUOTA 4 file. Or run a DISKQUOTA> REBUILD command. 13-9 13-9 13-9l  J VERIFY command VERIFY command VERIFY commandM Error reporting Error reporting Error reportingT, SLFBAKFID, backlink points to itself,W Severity: Severity: Severity: WARNINGc Explanation: Explanation: Explanation: This error indicates that DFU has found af< directory with a backlink pointing to itself. This9 feature is only allowed for the MFD 000000.DIR.l= This error will result in ANALYZE/DISK going into ah COMputable loop. User Action: User Action: User Action: Run VERIFY/FIX to move the directory to < the [SYSLOST] directory. Then remove the directory? entry from itself with a SET FILE/REMOVE command. The ; files in the directory should be accesible again._A _______________________________________________________ 2 VERIFY VERIFY VERIFY4 VERIFY a device for disk structure errors.A _______________________________________________________ 2 FORMAT FORMAT FORMAT VERIFY VERIFY VERIFY _________ device[:] device[:] device[:]A _______________________________________________________X> PARAMETERS PARAMETERS PARAMETERSC ______ device device device $ The device to be verified.A _______________________________________________________ > QUALIFIERS QUALIFIERS QUALIFIERSk ________________ /APPEND=filename /APPEND=filename /APPEND=filename0< This qualifier redirects the output to be appended> to an already existing file. If the output file does? not exists it will be created. You can use /APPEND or_ /OUTPUT but not both.t/ 13-10 13-10 13-10e n I VERIFY command VERIFY command VERIFY commandi VERIFY VERIFY VERIFY%g _______________ /DIRECTORY_SCAN /DIRECTORY_SCAN /DIRECTORY_SCAN ? Performs a full directory scan. This may take up somew= time, but it allows detection of mismatches betweenc) the directories and INDEXF.SYS.e; ____ /FIX /FIX /FIX k ______ _________ /NOFIX (default) /NOFIX (default) /NOFIX (default)r; Repair errors on the disk. File marked for deletei@ will be deleted and lost files and directories will be moved to [SYSLOST].i? _____ /LOCK /LOCK /LOCKho _______ _________ /NOLOCK (default) /NOLOCK (default) /NOLOCK (default) ; Locks the disk for file allocation/deletion. This ; gives a consistent report for the disk, but otherF? users may experience a delay when accessing the disk.F= The device will be unlocked a the end of the VERIFYe command.k ________________ /OUTPUT=filename /OUTPUT=filename /OUTPUT=filename < This qualifier redirects the output to a file. The< output will also go to SYS$OUTPUT. CAUTION: if you> use /LOCK in combination with /OUTPUT be carefull to< specify an outputfile on ANOTHER disk, or DFU will% finish with a severe error. K ________ /REBUILD /REBUILD /REBUILDs{ __________ _________ /NOREBUILD (default) /NOREBUILD (default) /NOREBUILD (default)t= Perform a volume rebuild. Using this qualifier willk4 temporarily lock the disk for other users.W ___________ /STATISTICS /STATISTICS /STATISTICS = This qualifier displays the performance statistics: 5 CPU time, Elapsed Time, I/O and PageFaults.I 13-11 13-11 13-11n  2 VERIFY VERIFY VERIFY/ 13-12 13-12 13-12 *[DFU024.DOC]DFU024.PS;2+,n./7@ 4]R-[0123KPWO56}t7}t89G7@HJ%!PS-Adobe-3.0%%Title: DFU024%%Creator: VAX DOCUMENT V3.0BI%%Copyright: 1986,1987,1988,1989,1990,1991 DIGITAL EQUIPMENT CORPORATION.%%+All Rights Reserved.(%%CreationDate: Thu Aug 22 1996 12:00:41%%For: DORLAND %%BoundingBox: (atend)%%DocumentData: Clean7Bit%%LanguageLevel: 1%%Orientation: Portrait%%Pages: (atend)%%PageOrder: Ascend%%DocumentFonts: (atend) %%DocumentNeededFonts: (atend) &%%DocumentProcSets: Underlay Color5044.%%DocumentSuppliedProcSets: Underlay Color5044 %%DocumentProcessColors: (atend)%%DocumentCustomColors: (atend) %%EndComments$%+++TTI changes : added ROTB back in>%+++ : added 1000 ROTB = begin special code example<%+++ : added 1001 ROTB = end special code example0%+++ : added 1002 ROTB = digital logo%!%%BeginResource: procset Underlay%%CreationDate: (2/10/92)%C% In VAX DOCUMENT V2.1-1, simple EPSF files up to 65,000 bytes long@% may be an underlay. Define the EPSF as a PostScript proceedureD% called /UNDERLAY and prefix to DOCUMENT's PS output For example:.&% /UNDERLAY ( EPSF code here ) cvx def%=% To create a "DRAFT" underlay change /UNDERLAY* to /UNDERLAY /UNDERLAY* ( /Note (DRAFT) def /NoteSize 120 def6 /NoteFont /Helvetica findfont NoteSize scalefont def& /Note where { pop Note length 0 gt {8 /NoteWidth NoteFont setfont Note stringwidth pop def/ PaperWidth 36 mul PaperHeight 36 mul moveto& PaperHeight PaperWidth atan rotate6 NoteWidth -2 div NoteSize .729 mul -2 div rmoveto 2 Note true charpath .075 setseparationgray fill }if }if ) cvx def %%EndResource%"%%BeginResource: procset Color5044%%CreationDate: (1/21/91)%%Version:1.0 31%Implementation of Adobe 5044 color specification5%/ndf allows command override during color separation/Color5044Dict 100 dict defColor5044Dict begin/bdf {bind def} def/ndf {1 index where {pop pop pop } {dup xcheck {bind} if def } ifelse } bdf /setcmykcolor {1 exch sub 3 " {dup 5 -1 roll sub 0 2 copy lt {exch} if pop exch } repeat pop setrgbcolor }ndf/setcmykcoloroverprint {4 {dup -1 eq {pop 0} if 4 1 roll } repeat setcmykcolor } ndf/findcmykcustomcolor {5 /packedarray where {pop packedarray } {array astore readonly } ifelse } ndf/setcustomcolor {exch aload pop pop 4 {4 index mul 4 1 roll } repeat setcmykcolor pop } ndf/setseparationgray* {1 exch sub systemdict /setgray get exec } ndf/setoverprint {pop} ndf/currentoverprint false ndf%CMYK multi-proc colorimage /colorimage {4 neH {(\nUnsupported number of colors for colorimage.\n) print flush quit } if notJ {(\nSingle procedure form colorimage unsupported.\n) print flush quit } if' save 20 dict begin /&saveobj exch defE /&Kproc exch def /&Yproc exch def /&Mproc exch def /&Cproc exch def {&Cproc &Mproc &Yproc &Kproc7 /&K exch def /&Y exch def /&M exch def /&C exch def 0 1 &K length 1 sub {/&i exch def &K &i 255 &C &i get 30 mul &M &i get 59 mul add &Y &i get 11 mul add &K &i get 100 mul add 100 idiv dup 255 gt {pop 255} if sub put } for &K } image &saveobj end restore } ndf/customcolorimage! {pop systemdict /image get exec } ndf/separationimage {systemdict /image get exec } ndfend %%EndResourceColor5044Dict begin%/DEC_DVC$dict 300 dict defDEC_DVC$dict begin%/DVC$PSJob save def%5mark % CREATE ISOLatin1Encoding if not there already/ISOLatin1Encoding0 8#000 1 8#054 {StandardEncoding exch get} for  /minus0 8#056 1 8#217 {StandardEncoding exch get} for /dotlessi 0 8#301 1 8#317 {StandardEncoding exch get} for H /space /exclamdown /cent /sterling /currency /yen /brokenbar /section G /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen L /registered /macron /degree /plusminus /twosuperior /threesuperior /acute E /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine L /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave O /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute O /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde L /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave M /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute G /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute N /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntildeJ /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave < /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis 9 /ISOLatin1Encoding where not {256 array astore def} if cleartomark%,/DOCPSE ISOLatin1Encoding 256 array copy def"mark % CREATE DOCPSE ENCODING 8#055 /hyphenC 8#201 /bullet 8#202 /emdash 8#203 /endash 8#204 /daggerC 8#205 /daggerdbl 8#206 /registered 8#207 /trademark %8#210 /Delta? 8#211 /fi 8#212 /fl 8#213 /OE 8#214 /oe 8#215 /Ydieresis) counttomark -1 bitshift % DIVIDE BY 2: {DOCPSE 3 1 roll put} repeat % STACK NOW CONTAINS MARK cleartomark%3/ReENCODE { % /basefont /newfont encoding ReENCODE7 /newencoding exch def %ARG: NAME OF ENCODING VECTORC /newfontname exch def %ARG: NEW NAME F OR FONT AFTER RE-ENCODING findfont> /basefontdict exch def %ARG: NAME OF FONT TO BE RE-ENCODED? basefontdict maxlength dict begin %CREATE AND OPEN NEW DICT= basefontdict { %COPY ENTRIES FROM BASE FONT DICT TO NEW ONE 1 index /FID ne {5 def %IF NOT THE ONE WE'RE ENCODING, JUST COPY PTRS } { %else: pop pop %IGNORE FID AND ENCODING FOR ONE WE'RE ENCODING } ifelse } forall, /FontName newfontname def %DEFINE NEW NAME 6 /Encoding newencoding def %DEFINE NEW ENCODING VECTOR; newfontname currentdict definefont %TURN IT INTO A PS FONT3 pop %IGNORE MODIFIED DICT RETURNED BY DEFINEFONT end}def%/cvsstr 64 string def/tempmatrix matrix def%2% Exit page (temporarily) to add fonts/characters. /XP { }def% % Resume page,/RP {/ExampleState 0 def} def % RESUME PAGE/ExampleState 0 def%% End Page: EP/EP {DVC$PSPage restore}def%% Purge fonts to reclaim VM/PF { currentoverprint currentrgbcolor EP %Does restore PageSetup %Does save setrgbcolor setoverprint}def%% ABBREVIATIONS /S /show load def/SV /save load def/RST /restore load def%/Yadjust {Ymax exch sub} def%C/SXY { % (x,y) POSITION ABSOLUTE, JUST SET Xpos & Ypos, DON'T MOVE( Yadjust /Ypos exch def /Xpos exch def} def%$/XY { % (x,y) POSITION ABSOLUTE Yadjust moveto} def%#/X { % (x,0) POSITION ABSOLUTE currentpoint exch pop moveto} def%$/Y { % (0,y) POSITION ABSOLUTE & currentpoint pop exch Yadjust moveto} def%$/xy { % (x,y) POSITION RELATIVE neg rmoveto} def%#/x { % (x,0) POSITION RELATIVE 0 rmoveto} def%#/y { % (0,y) POSITION RELATIVE 0 exch neg rmoveto} def%/R { % Draw a rectangle$ /ht exch def /wd exch def gsave currentpoint newpath moveto 0 ht rlineto wd 0 rlineto$ 0 ht neg rlineto wd neg 0 rlineto& closepath fill grestore wd 0 rmoveto}def%3%Setup Page Media: PM/PM { /Xmax exch Resolution mul def /Ymax exch Resolution mul def /UNDERLAY where { pop3 /eps_save save def % save before EPSF underlay9 Resolution 72 div dup scale % Revert coords to points9 count array astore /DVCstack exch def % save op stack/ /dict_count countdictstack def % # of dicts" userdict begin % default dict' /showpage {}def % disable showpage 0 setgray? {UNDERLAY} stopped {(Error executing /UNDERLAY)== quit}ifD countdictstack dict_count sub {end} repeat % clean up dict stack/ clear DVCstack aload pop % restore op stack,* eps_save restore % restore after EPSF }ifA PageSetupe}def%%%Setup page coordinates1 /PageSetup{%.% /DVC$PSPage {save} def % ++cjb: fix VME bug /DVC$PSPage save def9 PortraitMode not {PaperWidth 0 translate 90 rotate} ifn /Xpos 0 def: /Ypos 0 defu}def%:)% Begin EPS file: SPB/SPB {8 Yadjust transform % convert from DVC to device coords EP % page-level restore( /eps_save save def % save before EPSF8 Resolution 72 div dup scale % Revert coords to points2 itransform % convert position back to points % translate % set position for EPSF 3 PortraitMode not {90 rotate} if % rotate for EPSF+7 count array astore /DVCstack exch def % save op stackR- /dict_count countdictstack def % # of dicts1 userdict begin % default dict% /showpage {}def % disable showpages 0 setgray }def%e% End EPS file/SPE {B countdictstack dict_count sub {end} repeat % clean up dict stack- clear DVCstack aload pop % restore op stackc( eps_save restore % restore after EPSF" PageSetup % restore DVC coords}def%!% Print-Page Routine: PP/PP {S gsavee showpage grestore}def%n&/DMF { % /font-name DMF& exch findfont exch scalefont setfont}def% 3/concatnam { % /abcd (xxx) concatnam ==> /abcdxxxu /xxx exch defm /namstr exch cvsstr cvs defe1 /newnam namstr length xxx length add string def7 newnam 0 namstr putintervale& newnam namstr length xxx putinterval newnam cvn }def%%/strip { % /abcdef 2 strip ==> /cdefp /num exch def /nam exch def /namstr nam cvsstr cvs def# /newlen namstr length num sub def $ namstr num newlen getinterval cvn}def/% ROUTINES TO HANDLE PACKING/UNPACKING NUMBERSc8/PackHW { % PackHW --> 0 /num exch def /pos exch def /target exch def: num 16#0000FFFF and 1 pos sub 16 mul bitshift target or}def</PackByte { % PackByte --> 0 /num exch def /pos exch def /target exch def: num 16#000000FF and 3 pos sub 8 mul bitshift target or}def4/UnpkHW { % UnpkHW -->  /num exch def /pos exch def0 num 1 pos sub -16 mul bitshift 16#0000FFFF and) dup 16#00007FFF gt {16#00010000 sub} ifr}def8/UnpkByte { % UnpkByte -->  /num exch def /pos exch def/ num 3 pos sub -8 mul bitshift 16#000000FF andc) dup 16#0000007F gt {16#00000100 sub} if}def% /ps-scalefont {eJ % FOR PS FONTS, LOOK AT SIZE REQUESTED. IF IT HAS A DECIMAL REMAINDERL % EQUIVALENT TO .001-.009 POINTS (I.E., .050-.450 VAXDOC UNITS), THAT'S H % A FLAG TO STRETCH IT VERTICALLY BY ADDING 1-9 EXTRA POINTS TO THE  % VERTICAL SCALING.fA % save requested size - as entered and as integer2, dup /x-size exch def cvi /x-int exch def; % calc decimal remainder, mul x 1000, round ; x-size x-int sub 1000 mul round cvi /remainder exch def % % see how we scale...l) remainder 50 lt remainder 450 gt or {K& % scale isomorphically /ystretch 0 def  x-size scalefont } { & % scale anamorphically /ystretch remainder def+ x-int ystretch add /y-size exch defm' [x-int 0 0 y-size 0 0] makefontc } ifelse}def%p(/DPSF { % /procname size /fontname DPSF< findfont exch ps-scalefont [ exch /setfont cvx ] cvx def}def%s/PXLBuildCharDict 17 dict def/CMEncodingArray 256 array def90 1 255 {CMEncodingArray exch dup cvsstr cvs cvn put} forA)/RasterConvert {RasterScaleFactor div}def/TransformBBox { aload pop#H /BB-ury exch def /BB-urx exch def /BB-lly exch def /BB-llx exch def. [ BB-llx RasterConvert BB-lly RasterConvert / BB-urx RasterConvert BB-ury RasterConvert ]/}def/RunLengthToRasters {u % none yet}def7/GenerateRasters { % GENERATE RASTERS FOR "IMAGEMASK"m1 rasters run=E~ DFU024.BCKn[[DFU024.DOC]DFU024.PS;2]q|length 1 eq {RunLengthToRasters} if }def%p)/int-dict-name {int (-dict) concatnam}def -/int-dict {int (-dict) concatnam cvx load}defe%e/DefinePXLFont {E % ... 1 % ...[llx lly urx ury]DefinePXLFont C /newfont exch def /bb exch def /num exch def /psz exch defrC /dsz exch def /pxlmag exch def /ext exch def /int exch def 9 /fnam ext (-) concatnam pxlmag cvsstr cvs concatnam def newfont not {m int-dict-name 13 dict def/ int-dict beginF /FontType 3 def /FontMatrix [ 1 dsz div 0 0 1 dsz div 0 0 ] defC /FontBBox bb TransformBBox def /Encoding CMEncodingArray defdI /CharDict 1 dict def CharDict begin /Char-Info num array def endv /BuildChar { PXLBuildCharDict begin, /char exch def /fontdict exch defB fontdict /CharDict get /Char-Info get char get aload pop2 /rasters exch def /PackedWord1 exch def+ 0 PackedWord1 UnpkHW 16#7FFF ne { 8 /PackedWord2 exch def /wx 0 PackedWord1 UnpkHW defN /rows 2 PackedWord1 UnpkByte def /cols 3 PackedWord1 UnpkByte defM /llx 0 PackedWord2 UnpkByte def /lly 1 PackedWord2 UnpkByte defrM /urx 2 PackedWord2 UnpkByte def /ury 3 PackedWord2 UnpkByte deft }{ %elseWG /PackedWord2 exch def /PackedWord3 exch def /PackedWord4 exch defiJ /wx 1 PackedWord1 UnpkHW def /rows 0 PackedWord2 UnpkHW defI /cols 1 PackedWord2 UnpkHW def /llx 0 PackedWord3 UnpkHW defoI /lly 1 PackedWord3 UnpkHW def /urx 0 PackedWord4 UnpkHW defe) /ury 1 PackedWord4 UnpkHW defP } ifelse rows 0 lt {S( /rows rows neg def /runlength 1 def }{ %else{ /runlength 0 defE } ifelseN wx 0. llx RasterConvert lly RasterConvert < urx RasterConvert ury RasterConvert setcachedevice rows 0 ne {f gsave) cols rows true RasterScaleFactor NB 0 0 RasterScaleFactor neg llx .5 add neg ury .5 add : tempmatrix astore GenerateRasters imagemask grestore } if end }def endf! fnam int-dict definefont pop a } if c/ int-dict-name fnam findfont psz scalefont def/3 currentdict int [ int-dict /setfont cvx ] cvx put }def A/PXLF { true DefinePXLFont}def % SIGNAL THAT FONT ALREADY LOADED F/PXLNF {false DefinePXLFont}def % SIGNAL THAT FONT NOT ALREADY LOADED%s:/PXLC { % ...* % ...PXLCH /rasters exch def /runlength exch def /cols exch def /rows exch defG /ury exch def /urx exch def /lly exch def /llx exch defY7 /wx exch def /code exch def /int exch deff+ % SEE IF LONG OR SHORT FORMAT IS REQUIREDO? true cols CKSZ rows CKSZ ury CKSZ urx CKSZ lly CKSZ llx CKSZ S TackRunLengthToRows {c/ int-dict /CharDict get /Char-Info get code IC [ 0 0 llx PackByte 1 lly PackByte 2 urx PackByte 3 ury PackByte A 0 0 wx PackHW 2 rows PackByte 3 cols PackByte rasters ] put }{ %else/ int-dict /CharDict get /Char-Info get code {? [ 0 0 urx PackHW 1 ury PackHW 0 0 llx PackHW 1 lly PackHWP 0 0 rows PackHW 1 cols PackHW 0 0 16#7FFF PackHW 1 wx PackHW rasters ] put } ifelse}def%/CKSZ {abs 127 le and}defo@/TackRunLengthToRows {runlength 0 ne {/rows rows neg def} if}def%0/PLOTC {K % PLOTCaH /rasters exch def /runlength exch def /cols exch def /rows exch defG /ury exch def /urx exch def /lly exch def /llx exch def6 /psz exch def /dsz exch def /wx exch def' % "PLOT" A CHARACTER'S RASTER PATTERN rows 0 ne {t gsaved3 currentpoint translate psz dsz div dup scalei> cols rows true RasterScaleFactor 0 0 RasterScaleFactor 6 neg llx .5 add neg ury .5 add tempmatrix astore GenerateRasters imagemask grestore } if wx x}def%e% set color routine: Color# SC6/SC {ColorPalette exch get 1.0 setcustomcolor}bind def%s%e<% Procedures for implementing the "rotate " special:% ROTB -% - ROTE -/1%+++ TTI changes to allow .screen escape sequenceP% 1000 ROTB -> start screenn% 1001 ROTB -> end screen % 1002 ROTB -> Digital logo:/codexindent 590 def/ROTB {  dup 1000 eq {t$ % 1000 ROTB - start code example pop /ExampleState 0 defo /S { dup (.screen) eq { % start screen exampleC% pjf fix 7-4-92 : first line after .screen was indented improperlyt: currentpoint /ExampleY exch def /ExampleX exch def 1 setgray show 0 setgray /S {3 /ExampleName exch def /ExampleState 1 defn7 codexindent 0 translate codexindent 0 rmovetoc. 1 setgray ExampleName show 0 setgray /S /show load def ! /FONT104 /F104 load defs* % replace the tilde with a space, currentfont F102 currentfont begin. /Encoding load % - encoding1 % save the old encoding for the tildee3 dup 126 get exch % - e126 encoding, dup 32 get 126 exch put % - e126 ende. % stick tilde encoding in a variable /ExampleTilde exch def8 FONT104 currentfont /F104DICT exch def setfont /F104 {t /S {- currentfont /F104DICT load eq {e. dup length 240 mul /w exch def1 gsave 0 -100 rmoveto currentpointm0 newpath moveto w 0 rlineto 0 440? rlineto w neg 0 rlineto closepath fill grestore ( 1 setgray show 0 setgray } {t# /S /show load def Se } ifelse } def  FONT104B } def } def< } {  % regular code example show /S /show load def } ifelse } def  } { dup 1001 eq {h" % 1001 ROTB - end code example pop< ExampleState 1 eq {nB currentpoint ExampleY exch sub 600 sub /ylength exch def pop2 /xlength 19200 1.25 mul def /radius 1000 def' gsave ExampleX ExampleY translate-3 240 -400 translate .8 1 scale 50 setlinewidth / /Helvetica findfont 250 scalefont setfont 3 ExampleName (-) eq { /ExampleName () def } ifB! ExampleName stringwidth popu9 xlength exch sub -250 radius sub ylength sub moveto 4 gsave 1.25 1 scale ExampleName show grestore! newpath radius neg 0 moveto & 0 ylength neg radius 180 270 arc* xlength ylength neg radius 270 0 arc xlength 0 radius 0 90 arc0 0 0 radius 90 180 arc5 closepath stroke grestore  /ExampleState 0 defL /F104 /FONT104 load def  /S /show load defIF % replace tilde encoding, so it doesn't show up as space anymore( currentfont F102 currentfont begin+ /Encoding load 126 ExampleTilde putr end setfont ; codexindent neg 0 translate codexindent neg 0 rmoveto  } if } { dup 1002 eq {s pop, gsave (-) stringwidth pop neg 0 rmoveto - /Helvetica findfont 450 scalefont setfonty# [(d) (i) (g) (i) (t) (a) (l)] {o. currentpoint currentpoint newpath movetoN 0 -200 rmoveto 300 0 rlineto 0 730 rlineto -300 0 rlineto 0 -730 rlineto fill moveto gsavey6 dup stringwidth pop 300 exch sub 2 div 0 rmoveto' 1 setgray show 0 setgray grestoreo 350 0 rmoveto[ } forall 0 375 rmovetof7 /Helvetica findfont 200 scalefont setfont (TM) show6 grestore } {C % other - do rotations XP gsaveA Xpos Ypos translatec) rotate % using from the stacka Xpos neg Ypos neg translater RP } ifelse } ifelse } ifelse} deff/ROTE {XP grestore RP} def /F104 { } defr %%EndPrologR %%BeginSetup/PxlResolution 300 def/Resolution 3600 def3/RasterScaleFactor PxlResolution Resolution div defT/PortraitMode true def/PaperWidth 8.500 defh/PaperHeight 11.000 def}72 Resolution div dup scaleeD%> Postamble of file OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU024.DVI_PS.*% DefineFont:F153 Category:10 Pointsize:10D/NewCenturySchlbk-Bold /NewCenturySchlbk-Bold@DOCPSE DOCPSE ReENCODE./F153 500.0 /NewCenturySchlbk-Bold@DOCPSE DPSF*% DefineFont:F151 Category:10 Pointsize:10F/NewCenturySchlbk-Roman /NewCenturySchlbk-Roman@DOCPSE DOCPSE ReENCODE//F151 500.0 /NewCenturySchlbk-Roman@DOCPSE DPSFs)% DefineFont:F102 Category:10 Pointsize:8 (/Courier /Courier@DOCPSE DOCPSE ReENCODE /F102 400.0 /Courier@DOCPSE DPSF(% DefineFont:F38 Category:10 Pointsize:9,/Helvetica /Helvetica@DOCPSE DOCPSE ReENCODE!/F38 450.0 /Helvetica@DOCPSE DPSFC)% DefineFont:F36 Category:10 Pointsize:10n6/Helvetica-Bold /Helvetica-Bold@DOCPSE DOCPSE ReENCODE&/F36 500.0 /Helvetica-Bold@DOCPSE DPSF)% DefineFont:F34 Category:10 Pointsize:10t!/F34 500.0 /Helvetica@DOCPSE DPSFg)% DefineFont:F28 Category:10 Pointsize:12/&/F28 600.0 /Helvetica-Bold@DOCPSE DPSF)% DefineFont:F25 Category:10 Pointsize:14dD/Helvetica-BoldOblique /Helvetica-BoldOblique@DOCPSE DOCPSE ReENCODE-/F25 700.0 /Helvetica-BoldOblique@DOCPSE DPSFd)% DefineFont:F24 Category:10 Pointsize:14 &/F24 700.0 /Helvetica-Bold@DOCPSE DPSF)% DefineFont:F23 Category:10 Pointsize:14 </Helvetica-Oblique /Helvetica-Oblique@DOCPSE DOCPSE ReENCODE)/F23 700.0 /Helvetica-Oblique@DOCPSE DPSFe)% DefineFont:F20 Category:10 Pointsize:18o&/F20 900.0 /Helvetica-Bold@DOCPSE DPSF)% DefineFont:F12 Category:10 Pointsize:30n'/F12 1500.0 /Helvetica-Bold@DOCPSE DPSF&%> Postamble of file DFU024_CONTENTS.(% DefineFont:F40 Category:10 Pointsize:9&/F40 450.0 /Helvetica-Bold@DOCPSE DPSF%Spot color array for this job/ColorPalette [s+0.0 0.0 0.0 1.0 (BLACK) findcmykcustomcolor] defu %%EndSetup% %%Page: (I) 1 %%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)o PaperHeight PaperWidth PM 0 0 XYC0 SC 10773 10524 XY F20(DFU)S 167 x(V2.4)S 10773 13214 XY F34(DFU)SeE166 x(Disk)S 165 x(and)S 166 x(File)S 166 x(Utili)S -2 x(ties)S 167 xuE(for)S 166 x(OpenVMS)S 166 x(V)S -37 x(AX)S 167 x(and)S 166 x(Alpha)SE10773 16502 XY F36(Revision)S 167 x(Informatio)S 2 x(n:)S 18546 X F34fD(This)S 166 x(manual)S 165 x(supersedes)S 166 x(V2.2)S 10773 X 896 yKF36(Date:)S 18546 X F34(August)S 167 x(1996)S 10773 X 897 y F36(Operating)SuI167 x(System:)S 18546 X F34(OpenVMS)S 166 x(V)S -37 x(AX)S 167 x(V5.5-2)SEI166 x(thru)S 167 x(7.1,)S 167 x(Alpha)S 165 x(V6.1)S 18546 X 598 y(thru)SC166 x(7.1)S 10773 X 896 y F36(Note:)S 18546 X F34(Part)S 166 x(of)S.3167 x(the)S 166 x(Freeware)S 166 x(CD-RO)S -2 x(M)S EP PPu %%PageTrailerf%%%PageFonts: Helvetica-Bold Helveticay%%PageProcessColors:%%PageCustomColors: (BLACK) %x%%Page: (II) 2%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)R PaperHeight PaperWidth PM 0 0 XYD0 SC 10773 21533 XY F38(OpenVMS)S 167 x(Freeware)S 167 x(for)S 167 xE(V)S -33 x(AX)S 166 x(and)S 166 x(AXP)S 167 x(Systems)S 10773 X 896 yaG(The)S 179 x(OpenVMS)S 180 x(Freeware)S 180 x(CD-ROM)S 179 x(contains)S E179 x(free)S 179 x(software)S 179 x(tools)S 179 x(and)S 180 x(utili)StN-2 x(ties)S 179 x(to)S 178 x(aid)S 10773 X 548 y(software)S 184 x(developers)SM185 x(in)S 183 x(creating)S 184 x(applications)S 183 x(and)S 184 x(managing)S1J185 x(and)S 184 x(using)S 184 x(OpenVMS)S 10773 X 548 y(systems.)S 10773 XE897 y(Many)S 178 x(of)S 176 x(these)S 178 x(tools)S 176 x(are)S 177 xPG(popular)S 178 x(packag)S 2 x(es)S 177 x(already)S 177 x(widely)S 176 xtH(known)S 177 x(and)S 178 x(in)S 176 x(use,)S 180 x(while)S 10773 X 548 yJ(others)S 179 x(are)S 179 x(internally)S 178 x(developed)S 179 x(Digital)SF177 x(tools)S 178 x(our)S 179 x(engineers)S 180 x(are)S 179 x(making)SF179 x(available)S 178 x(to)S 10773 X 548 y(our)S 173 x(OpenVMS)S 173 xC(custome)S 2 x(rs.)S 261 x(For)S 173 x(example,)S 175 x(the)S 172 xaC(OpenVMS)S 173 x(Freeware)S 174 x(CD-ROM)S 172 x(includes)S 10773 X.H548 y(Bliss-32)S 172 x(for)S 172 x(OpenVMS)S 173 x(V)S -34 x(AX,)S 172 xC(Bliss-32)S 172 x(for)S 172 x(OpenVMS)S 172 x(AXP)S -57 x(,)S 171 xaG(and)S 172 x(Bliss-64)S 172 x(for)S 172 x(OpenVMS)S 10773 X 548 y(AXP)SlI-58 x(.)S 10773 X 896 y(Disclaimer)S 166 x(on)S 167 x(T)S -50 x(esting,)S E165 x(Quality)S -34 x(,)S 166 x(and)S 167 x(Licensing)S 10773 X 897 y>C(The)S 188 x(OpenVMS)S 189 x(Freeware)S 189 x(for)S 187 x(V)S -33 xgG(AX)S 188 x(and)S 188 x(AXP)S 188 x(Systems)S 188 x(CD-ROM)S 188 x(is)S F187 x(provided)S 189 x("AS)S 10773 X 548 y(IS")S 180 x(without)S 179 xC(warranty)S -33 x(.)S 277 x(Digit)S -2 x(al)S 180 x(imposes)S 181 xtG(no)S 180 x(restrictions)S 180 x(on)S 180 x(its)S 179 x(distribution,)SlG183 x(nor)S 180 x(on)S 181 x(the)S 10773 X 548 y(redistribution)S 177 x G(of)S 177 x(anything)S 178 x(on)S 177 x(it.)S 270 x(Be)S 177 x(aware,)SeD180 x(however)S -23 x(,)S 179 x(that)S 177 x(some)S 178 x(of)S 177 xC(the)S 177 x(package)S 2 x(s)S 177 x(on)S 10773 X 548 y(the)S 181 x4C(CD-ROM)S 181 x(may)S 181 x(carry)S 182 x(restrictions)S 181 x(on)S F182 x(their)S 181 x(use)S 181 x(imposed)S 182 x(by)S 181 x(the)S 181 xD(original)S 181 x(authors.)S 10773 X 548 y(Therefore)S 2 x(,)S 165 xF(you)S 167 x(should)S 167 x(carefully)S 166 x(read)S 167 x(the)S 166 xE(docum)S 2 x(entation)S 166 x(accompa)S 2 x(nying)S 166 x(the)S 166 xgC(produ)S 2 x(cts.)S 10773 X 896 y(Digital)S 175 x(Equipment)S 177 xuI(Corporation)S 177 x(is)S 175 x(providing)S 177 x(this)S 176 x(software)SC176 x(free)S 176 x(of)S 176 x(charge)S 178 x(and)S 177 x(wit)S -2 xeF(hout)S 10773 X 548 y(warranty)S -32 x(.)S 266 x(Included)S 175 x(in)SD175 x(the)S 175 x([FREEW)S -17 x(ARE])S 174 x(directory)S 175 x(on)SL176 x(this)S 174 x(CD)S 174 x(are)S 175 x(the)S 175 x(GNU)S 174 x(software)SI10773 X 548 y(licenses.)S 260 x(Unless)S 171 x(otherwise)S 171 x(stated)S C172 x(in)S 171 x(sources)S 173 x(or)S 172 x(source)S 172 x(packag)S H2 x(es,)S 172 x(the)S 172 x(GNU)S 170 x(licenses)S 10773 X 548 y(cover)SE167 x(all)S 166 x(software)S 166 x(supplied)S 166 x(on)S 167 x(this)SeK166 x(CD.)S 10773 X 897 y(Digital)S 185 x(makes)S 187 x(no)S 187 x(claims)SG187 x(about)S 187 x(the)S 186 x(quality)S 186 x(of)S 186 x(this)S 186 x E(software.)S 290 x(It)S 185 x(is)S 186 x(provide)S 2 x(d)S 186 x(to)SpF186 x(the)S 10773 X 548 y(customer)S 168 x(as)S 166 x(a)S 166 x(free)SC167 x(service.)S 10773 X 896 y 3588 24 R 10773 36028 XY(Copyright)S &166 x(\251Augu)S 2 x(st)S 166 x(1996)SEP PPm %%PageTrailero%%PageFonts: Helvetica%%PageProcessColors:%%PageCustomColors: (BLACK)v%.7% < Beginning of included file DFU024_CONTENTS.DVI_PS >s%%Page: (III) 3 %%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYE0 SC 5094 4546 XY 23160 48 R 5094 5520 XY F20(Contents)S 5094 7335 XYEE23160 144 R 5094 8032 XY F28(CHAPTER)S 164 x(1)S 599 x(INTRODU)S -2 x H(CTION)S 27260 X(1\2031)S 7187 9228 XY 21072 72 R 7187 9826 XY F36(1.1)SF9279 X(SUPPORT)S 166 x(ON)S 165 x(DFU)S 27427 X(1\2031)S 7187 11021 XYC21072 72 R 7187 11619 XY(1.2)S 9279 X(GENERAL)S 165 x(DESCRIPTION)SlD27427 X(1\2031)S 7187 12814 XY 21072 72 R 7187 13412 XY(1.3)S 9279 XI(NEW)S 166 x(FEA)S -37 x(TURES)S 166 x(OF)S 166 x(V2.4)S 27427 X(1\2032)S5H7187 14608 XY 21072 72 R 7187 15205 XY(1.4)S 9279 X(RESTRICTIONS)S 166 xM(AND)S 165 x(P)S -36 x(ARAMETERS)S 27427 X(1\2033)S 5094 16999 XY 23160 144 ReG5094 17696 XY F28(CHAPTER)S 164 x(2)S 599 x(USING)S 165 x(DFU)S 27260 XiH(2\2031)S 7187 18892 XY 21072 72 R 7187 19489 XY F36(2.1)S 9279 X(INST)SD-36 x(ALLA)S -37 x(TION)S 166 x(PROCEDU)S -2 x(RE)S 27427 X(2\2031)SD7187 20685 XY 21072 72 R 7187 21283 XY(2.2)S 9279 X(SECURITY)S 166 xM(AND)S 165 x(ACCESS)S 27427 X(2\2032)S 7187 22478 XY 21072 72 R 7187 23076 XYJ(2.3)S 9279 X(RUNN)S -2 x(ING)S 166 x(DFU)S 27427 X(2\2033)S 7187 24271 XYI21072 72 R 7187 24869 XY(2.4)S 9279 X(USING)S 165 x(AN)S 166 x(INDIRECT)SfD166 x(FILE)S 167 x(LIST)S 27427 X(2\2033)S 5094 26662 XY 23160 144 RC5094 27360 XY F28(CHAPTER)S 164 x(3)S 599 x(THE)S 165 x(SMG)S 166 xoC(OUTPUT)S 165 x(INTERF)S -33 x(ACE)S 27260 X(3\2031)S 7187 28555 XYgD21072 72 R 7187 29153 XY F36(3.1)S 9279 X(ENABLING/DISABLING)S 165 xD(SMG)S 27427 X(3\2031)S 7187 30349 XY 21072 72 R 7187 30946 XY(3.2)SC9279 X(AUT)S -10 x(OMA)S -37 x(TIC)S 166 x(SWIT)S 2 x(CHING)S 165 xOD(BETWEEN)S 166 x(SMG)S 166 x(AND)S 165 x(LINE)S 167 x(MODE)S 27427 XH(3\2031)S 7187 32142 XY 21072 72 R 7187 32740 XY(3.3)S 9279 X(LA)S -46 xJ(YOUT)S 166 x(OF)S 166 x(THE)S 166 x(SMG)S 166 x(SCREEN)S 27427 X(3\2031)SC7187 33935 XY 21072 72 R 7187 34533 XY(3.4)S 9279 X(SPECIAL)S 167 x/H(SCREEN)S 165 x(COMMAND)S -2 x(S)S 27427 X(3\2032)S -416 x 36925 Y(iii)SEP PP8 %%PageTraileri%%PageFonts: Helvetica-Boldc%%PageProcessColors:%%PageCustomColors: (BLACK)P%D%%Page: (IV) 4%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)e PaperHeight PaperWidth PM 0 0 XYF0 SC 5094 1807 XY F28(Contents)S -496 x 4571 Y 21072 72 R 7187 5169 XYLF36(3.5)S 9279 X(SIDE)S 166 x(EFFE)S 2 x(CTS)S 27427 X(3\2033)S 5094 6962 XYK23160 144 R 5094 7660 XY F28(CHAPTER)S 164 x(4)S 599 x(DFU)S 165 x(BASICS)SeG27260 X(4\2031)S 5094 9453 XY 23160 144 R 5094 10150 XY(CHAPTER)S 164 x0E(5)S 599 x(DEFRA)S -2 x(G)S 27260 X(5\2031)S 7187 11346 XY 21072 72 RtK7187 11944 XY F36(5.1)S 9279 X(DESCRIPTION)S 27427 X(5\2031)S 7187 13139 XY0F21072 72 R 7187 13737 XY(5.2)S 9279 X(ERROR)S 164 x(MESSAGES)S 27427 XC(5\2031)S 11371 X 598 y F40(DEFRAG)S 24820 X(5\2031)S 5094 16128 XYtH23160 144 R 5094 16825 XY F28(CHAPTER)S 164 x(6)S 599 x(DELETE)S 27260 XL(6\2031)S 7187 18021 XY 21072 72 R 7187 18619 XY F36(6.1)S 9279 X(INTRODUC)SH-2 x(TION)S 27427 X(6\2031)S 11371 X 597 y F40(DELETE)S 24820 X(6\2031)SE5094 21010 XY 23160 144 R 5094 21707 XY F28(CHAPTER)S 164 x(7)S 599 xhE(DIREC)S -2 x(T)S -10 x(OR)S -23 x(Y)S 27260 X(7\2031)S 7187 22903 XYH21072 72 R 7187 23500 XY F36(7.1)S 9279 X(INTRODUC)S -2 x(TION)S 27427 XJ(7\2031)S 7187 24696 XY 21072 72 R 7187 25294 XY(7.2)S 9279 X(DISCUSSION)SI166 x(OF)S 166 x(DIRECT)S -9 x(OR)S -20 x(Y)S 167 x(COMPRESSION)S 27427 XeF(7\2032)S 7187 26489 XY 21072 72 R 7187 27087 XY(7.3)S 9279 X(OUTPUT)SG166 x(FORMA)S -38 x(TTING)S 27427 X(7\2033)S 11371 X 598 y F40(DIRECT)SM-10 x(OR)S -17 x(Y)S 24820 X(7\2033)S 5094 29478 XY 23160 144 R 5094 30175 XY MF28(CHAPTER)S 164 x(8)S 599 x(REP)S -2 x(ORT)S 27260 X(8\2031)S 7187 31371 XY H21072 72 R 7187 31969 XY F36(8.1)S 9279 X(DESCRIPTION)S 27427 X(8\2031)SE7187 33164 XY 21072 72 R 7187 33762 XY(8.2)S 9279 X(SYNT)S -37 x(AX)SuF166 x(AND)S 165 x(OUTPUT)S 27427 X(8\2031)S 11371 X 598 y F40(REPORT)S'24820 X(8\2033)S 5094 36925 XY F36(iv)S3EP PPS %%PageTrailer6%%PageFonts: Helvetica-Bold6%%PageProcessColors:%%PageCustomColors: (BLACK)e%t %%Page: (V) 5l%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)) PaperHeight PaperWidth PM 0 0 XYG0 SC 25667 1807 XY F28(Contents)S 5094 4646 XY 23160 144 R 5094 5343 XYhI(CHAPTER)S 164 x(9)S 599 x(SEA)S -2 x(RCH)S 27260 X(9\2031)S 7187 6539 XY1G21072 72 R 7187 7137 XY F36(9.1)S 9279 X(INTRODUC)S -2 x(TION)S 27427 X H(9\2031)S 7187 8332 XY 21072 72 R 7187 8930 XY(9.2)S 9279 X(SYNT)S -37 xJ(AX)S 166 x(AND)S 165 x(OUTPUT)S 27427 X(9\2031)S 7187 10126 XY 21072 72 RJ7187 10723 XY(9.3)S 9279 X(VOLUME)S 166 x(SET)S 167 x(PROCESSING)S 27427 XF(9\2031)S 7187 11919 XY 21072 72 R 7187 12517 XY(9.4)S 9279 X(OUTPUT)SE166 x(FORMA)S -38 x(TTING)S 27427 X(9\2031)S 7187 13712 XY 21072 72 RtF7187 14310 XY(9.5)S 9279 X(UIC)S 166 x(AND)S 164 x(IDENTIF)S 2 x(IER)SF166 x(PROCESSING)S 27427 X(9\2032)S 11371 X 598 y F40(SEARCH)S 24820 XE(9\2032)S 5094 16701 XY 23160 144 R 5094 17398 XY F28(CHAPTER)S 164 xiJ(10)S 599 x(SET)S 26928 X(10\2031)S 7187 18594 XY 21072 72 R 7187 19192 XYHF36(10.1)S 9279 X(INTRODUC)S -2 x(TION)S 27150 X(10\2031)S 7187 20387 XYH21072 72 R 7187 20985 XY(10.2)S 9279 X(UIC)S 166 x(AND)S 164 x(IDENTIF)SF2 x(IER)S 166 x(PROCESSING)S 27150 X(10\2031)S 11371 X 598 y F40(SET)SG24571 X(10\2031)S 5094 23376 XY 23160 144 R 5094 24073 XY F28(CHAPTER)S G164 x(1)S -32 x(1)S 598 x(UNDE)S -2 x(LETE)S 26961 X(1)S -33 x(1\2031)S,L7187 25269 XY 21072 72 R 7187 25867 XY F36(1)S -28 x(1.1)S 9279 X(INTRODUC)SM-2 x(TION)S 27177 X(1)S -27 x(1\2031)S 7187 27062 XY 21072 72 R 7187 27660 XY D(1)S -28 x(1.2)S 9279 X(HOW)S 165 x(UNDELETE)S 167 x(WORKS)S 27177 XD(1)S -27 x(1\2031)S 7187 28855 XY 21072 72 R 7187 29453 XY(1)S -28 xG(1.3)S 9279 X(FILES)S 167 x(MARKED)S 165 x(FOR)S 166 x(DELETE)S 27177 XD(1)S -27 x(1\2033)S 7187 30649 XY 21072 72 R 7187 31246 XY(1)S -28 xL(1.4)S 9279 X(UIC)S 166 x(AND)S 164 x(IDENTIF)S 2 x(IER)S 166 x(PROCESSING)SC27177 X(1)S -27 x(1\2033)S 11371 X 598 y F40(UNDELETE)S 24595 X(1)Sn%-24 x(1\2033)S 27981 36925 XY F36(v)S EP PP %%PageTraileri%%PageFonts: Helvetica-BoldS%%PageProcessColors:%%PageCustomColors: (BLACK)%)%%Page: (VI) 6%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)7 PaperHeight PaperWidth PM 0 0 XYF0 SC 5094 1807 XY F28(Contents)S 5094 4646 XY 23160 144 R 5094 5343 XYG(CHAPTER)S 164 x(12)S 599 x(SP)S -45 x(A)S -33 x(WN)S 26928 X(12\2031)S I5094 7137 XY 23160 144 R 5094 7834 XY(CHAPTER)S 164 x(13)S 599 x(VERIFY)SoH26928 X(13\2031)S 7187 9030 XY 21072 72 R 7187 9627 XY F36(13.1)S 9279 XP(INTRODUC)S -2 x(TION)S 27150 X(13\2031)S 7187 10823 XY 21072 72 R 7187 11421 XYF(13.2)S 9279 X(BASIC)S 165 x(REP)S -36 x(AIR)S 166 x(ACTIONS)S 27150 XH(13\2031)S 7187 12616 XY 21072 72 R 7187 13214 XY(13.3)S 9279 X(DIRECT)SD-9 x(OR)S -19 x(Y)S 166 x(SCANNING)S 27150 X(13\2032)S 7187 14409 XYF21072 72 R 7187 15007 XY(13.4)S 9279 X(ADV)S -38 x(ANCED)S 165 x(REP)SF-36 x(AIR)S 165 x(ACTIONS)S 27150 X(13\2032)S 7187 16203 XY 21072 72 RK7187 16800 XY(13.5)S 9279 X(INTERPRETING)S 166 x(ERRORS)S 27150 X(13\2032)S N7187 17996 XY 21072 72 R 7187 18594 XY(13.6)S 9279 X(ERROR)S 164 x(REPORTING)SL27150 X(13\2033)S 11371 X 598 y F40(VERIFY)S 24571 X(13\2037)S 5094 36925 XYF36(vi)SEP PPo %%PageTrailerc%%PageFonts: Helvetica-Bold %%PageProcessColors:%%PageCustomColors: (BLACK)% 1% < End of included file DFU024_CONTENTS.DVI_PS >S%%Page: (1-1) 76%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)( PaperHeight PaperWidth PM 0 0 XYQ0 SC 2404 5875 XY F12(1)S 5094 4546 XY 23160 48 R 5094 5443 XY F20(Introduction)SSC447 x 8652 Y F151(The)S 184 x(Disk)S 182 x(and)S 184 x(File)S 183 x D(Utilities)S 182 x(\(DFU\))S 183 x(is)S 182 x(a)S 183 x(high)S 184 xF(perfomance)S 184 x(tool)S 183 x(meant)S 183 x(as)S 10773 X 598 y(an)SG188 x(aid)S 187 x(to)S 188 x(the)S 187 x(system)S 187 x(manager)S 189 xmD(who)S 187 x(is)S 187 x(responsible)S 187 x(for)S 188 x(monitoring)SF188 x(and)S 10773 X 597 y(maintaining)S 185 x(disks,)S 189 x(\211les)SE184 x(and)S 185 x(directories.)S 286 x(It)S 184 x(makes)S 184 x(use)SI184 x(of)S 185 x(low)S 184 x(level)S 184 x(I/O)S 10773 X 598 y(features)S6E174 x(of)S 174 x(VMS.)S 174 x(As)S 174 x(a)S 174 x(result)S 174 x(a)SID174 x(high)S 175 x(level)S 174 x(of)S 174 x(performance)S 175 x(is)SE174 x(reached)S 174 x(with)S 10773 X 598 y(minimal)S 183 x(overhead)SC185 x(on)S 183 x(the)S 184 x(system.)S 284 x(DFU)S 183 x(supports)SF183 x(all)S 183 x(types)S 183 x(of)S 183 x(disk)S 184 x(sets)S 10773 XE598 y(which)S 167 x(comply)S 167 x(to)S 166 x(the)S 167 x(VMS)S 166 x5F(ODS-2)S 165 x(standard)S 166 x(such)S 167 x(as)S 166 x(volume)S 167 xE(sets,)S 167 x(stripe)S 166 x(sets)S 10773 X 597 y(,)S 167 x(shadow)S3E165 x(sets)S 165 x(and)S 167 x(RAID)S 164 x(sets,)S 166 x(and)S 166 xFC(combinations)S 166 x(of)S 166 x(these.)S 10773 X 897 y(DFU)S 178 x1K(does)S 178 x(NOT)S 178 x(work)S 179 x(on)S 179 x(Spiralog)S 178 x(disks.)S(E274 x(T)S -31 x(rying)S 180 x(to)S 178 x(use)S 179 x(DFU)S 178 x(on)SSC179 x(spiralog)S 10773 X 598 y(disks)S 173 x(will)S 173 x(produce)S H174 x(the)S 173 x(error)S 175 x("%DFU-E-)S -2 x(NOTF1)S -27 x(1,)S 176 xH(Device)S 173 x(does)S 174 x(not)S 173 x(have)S 174 x(an)S 10773 X 598 yO(ODS-2)S 165 x(\211lesystem")S 165 x(.)S 5094 15277 XY 23160 96 R 2404 15974 XY1MF24(1.1)S 5094 X(Support)S 167 x(on)S 167 x(DFU)S 387 x 897 y F151(Although)SF219 x(there)S 219 x(is)S 218 x(no)S 219 x(of\211cial)S 219 x(support)SC218 x(on)S 219 x(DFU)S 218 x(you)S 219 x(may)S 219 x(send)S 10773 XSC598 y(questions/remarks/bug)S 2 x(-reports)S 201 x(to)S 201 x(the)S2C201 x(author)S 202 x(via)S 201 x(internet)S 202 x(address)S 10773 XBH598 y(dorland@utrtsc.enet.)S 2 x(dec.com.)S 266 x(A)S 174 x(next)S 175 xH(version)S 175 x(of)S 174 x(DFU)S 174 x(will)S 173 x(no)S 175 x(longer)SE175 x(work)S 10773 X 597 y(on)S 167 x(VMS)S 165 x(5.5-2)S 167 x(and)S1C166 x(VMS)S 166 x(6.0.)S 5094 19611 XY 23160 96 R 2404 20308 XY F24SC(1.2)S 5094 X(General)S 165 x(description)S -843 x 897 y F151(DFU)SSF166 x(provides)S 166 x(the)S 166 x(following)S 167 x(functions)S 166 xD(\(in)S 166 x(alphabetical)S 166 x(order\))S 166 x(:)S 10773 X 896 yF(\201)S 595 x(DEFRA)S -2 x(G)S 174 x(:)S 174 x(This)S 174 x(function)SF174 x(allows)S 173 x(simple)S 173 x(defragmentation)S 174 x(of)S 174 xC(a)S 174 x(\211le)S 174 x(or)S 174 x(a)S 11670 X 598 y(list)S 165 xxD(of)S 166 x(\211les.)S 10773 X 897 y(\201)S 595 x(DELETE)S 197 x(:)SE200 x(This)S 198 x(function)S 200 x(allows)S 198 x(either)S 199 x(a)S3I198 x(delete)S 199 x(by)S 199 x(\211le-id,)S 207 x(or)S 199 x(a)S 11670 X G598 y(fast)S 194 x(delete)S 194 x(of)S 195 x(a)S 195 x(complete)S 194 xXC(directory)S 196 x(or)S 195 x(directory)S 195 x(tree)S 195 x(with)S E195 x(all)S 194 x(its)S 11670 X 597 y(subdirectories.)S 10773 X 897 y G(\201)S 595 x(DIRE)S -2 x(CTOR)S -19 x(Y)S 166 x(:)S 166 x(This)S 166 x C(function)S 167 x(has)S 166 x(6)S 166 x(options)S 166 x(:)S 11670 XXD897 y(1)S 619 x(COMPRESS)S 165 x(a)S 166 x(directory)S 11670 X 896 yF(2)S 619 x(DUMP)S 166 x(a)S 166 x(directory)S 167 x(block)S 167 x(by)SG166 x(block)S 11670 X 897 y(3)S 619 x(CREA)S -28 x(TE)S 166 x(a)S 166 x(E(directory)S 166 x(with)S 166 x(a)S 166 x(preallocated)S 166 x(size)S8F11670 X 896 y(4)S 619 x(Search)S 183 x(all)S 183 x(directories)S 182 xH(on)S 183 x(the)S 183 x(disk)S 182 x(for)S 183 x(\211les)S 182 x(which)SD183 x(have)S 183 x(multiple)S 12566 X 598 y(versions)S 11670 X 897 yD(5)S 619 x(Search)S 167 x(all)S 166 x(directories)S 166 x(on)S 166 xL(the)S 166 x(disk)S 166 x(for)S 166 x(alias)S 166 x(\211le)S 166 x(entries)SF11670 X 897 y(6)S 619 x(Search)S 167 x(all)S 166 x(directories)S 166 xL(on)S 166 x(the)S 166 x(disk)S 166 x(for)S 166 x(empty)S 166 x(directories)SG10773 X 896 y(\201)S 595 x(REPOR)S -2 x(T)S 156 x(:)S 156 x(Generates)S1E155 x(a)S 156 x(\211le)S 156 x(and)S 155 x(free)S 156 x(space)S 155 x)D(report)S 156 x(for)S 156 x(a)S 155 x(disk.)S 249 x(Also)S 155 x(a)SF156 x(disk)S 11670 X 598 y(space)S 178 x(usage)S 180 x(report,)S 182 xL(based)S 178 x(on)S 180 x(UIC')S -20 x(s)S 178 x(or)S 179 x(identi\211ers,)SD183 x(can)S 179 x(be)S 179 x(generated,)S 11670 X 598 y(even)S 167 xC(on)S 166 x(a)S 166 x(disk)S 166 x(which)S 166 x(has)S 166 x(disk)SG166 x(quota)S 166 x(disabled.)S 10773 X 896 y(\201)S 595 x(SEARC)S -2 xG(H)S 174 x(:)S 175 x(Look)S 175 x(up)S 174 x(\211les)S 174 x(on)S 175 x1D(a)S 174 x(disk)S 174 x(by)S 175 x(speci\211c)S 174 x(\211le)S 175 xH(attributes)S 173 x(\(eg.)S 266 x(\211les)S 11670 X 598 y(sizes,)S 165 xO(dates,)S 166 x(ownership,)S 167 x(and)S 166 x(so)S 166 x(on\))S 27427 36925 XY F36(1\2031)SEP PP2 %%PageTrailer62%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)P%S%%Page: (1-2) 83%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)X PaperHeight PaperWidth PM 0 0 XYE0 SC 5094 1807 XY F28(Introducti)S 2 x(on)S 10773 4866 XY F151(\201)SHC595 x(SET)S 181 x(:)S 182 x(This)S 182 x(functions)S 183 x(allows)SPJ180 x(setting)S 182 x(of)S 182 x(\211le)S 182 x(attributes)S 181 x(which)SG182 x(are)S 182 x(not)S 11670 X 598 y(available)S 166 x(through)S 168 x7D(DCL)S 165 x(commands.)S 10773 X 896 y(\201)S 595 x(UNDELETE)S 165 xM(:)S 166 x(A)S 166 x(safe)S 165 x(\211le)S 167 x(recovery)S 168 x(function.)SFH10773 X 897 y(\201)S 595 x(VERI)S -2 x(FY)S 168 x(:)S 168 x(This)S 168 xF(function)S 168 x(performs)S 168 x(a)S 167 x(fast)S 167 x(disk)S 168 xC(structure)S 168 x(veri\211cation)S 169 x(and)S 11670 X 598 y(can)SSD177 x(optionally)S 178 x(repair)S 177 x(certain)S 178 x(disk)S 177 xE(structure)S 178 x(errors)S 177 x(\(comparable)S 177 x(with)S 11670 XEE598 y(ANAL)S -47 x(YZE/DISK/REP)S -38 x(AIR\).)S 10773 9548 XY(Each)SRG166 x(function)S 167 x(is)S 166 x(described)S 166 x(in)S 166 x(detail)SSF165 x(in)S 167 x(the)S 166 x(corresponding)S 167 x(chapter)S -36 x(.)SK10773 X 897 y(DFU)S 170 x(is)S 170 x(supported)S 170 x(on)S 171 x(OpenVMS)SEG170 x(V)S -56 x(AX)S 170 x(V5.5-2)S 170 x(through)S 172 x(V7.1,)S 172 xLF(and)S 170 x(OpenVMS)S 10773 X 598 y(Alpha)S 173 x(V6.1)S 173 x(thru)SG173 x(V7.1.)S 263 x(DFU)S 173 x(has)S 172 x(been)S 174 x(tested)S 172 xtC(on)S 173 x(the)S 173 x(Field)S 173 x(test)S 172 x(versions)S 173 xrC(of)S 10773 X 598 y(VMS)S 159 x(7.1;)S 163 x(so)S 159 x(far)S 159 xWE(no)S 160 x(problems)S 159 x(have)S 160 x(been)S 160 x(found.)S 251 x H(The)S 160 x(of\211cial)S 159 x(freeware)S 160 x(release)S 10773 X 597 yC(of)S 166 x(DFU)S 166 x(will)S 165 x(be)S 166 x(distributed)S 166 x(G(with)S 165 x(the)S 167 x(of\211cial)S 166 x(release)S 166 x(of)S 166 x E(VMS)S 165 x(V7.1.)S 5094 13185 XY 23160 96 R 2404 13882 XY F24(1.3)S8C5094 X(New)S 165 x(features)S 166 x(of)S 166 x(V2.4)S 10773 X 897 y6GF151(This)S 171 x(version)S 172 x(of)S 171 x(DFU)S 170 x(offers)S 171 x7E(several)S 171 x(improved)S 172 x(and)S 171 x(new)S 171 x(features,)S2C172 x(as)S 171 x(well)S 170 x(as)S 10773 X 598 y(a)S 166 x(couple)SXH167 x(of)S 166 x(bug\211xes.)S 251 x(The)S 166 x(new)S 166 x(functions)SD167 x(and)S 166 x(features)S 166 x(are:)S 10773 X 896 y(\201)S 595 xD(Improved)S 166 x(handling)S 167 x(of)S 166 x(UIC')S -19 x(s)S 166 xE(and)S 166 x(Identi\211ers.)S 249 x(DFU)S 166 x(now)S 166 x(accepts)S7C166 x(all)S 166 x(valid)S 11670 X 598 y(numeric)S 174 x(and)S 173 xPI(alphanumeric)S 174 x(UIC')S -20 x(s)S 173 x(and)S 173 x(identi\211ers.)SaF263 x(This)S 173 x(option)S 173 x(is)S 173 x(used)S 11670 X 598 y(in)SN172 x(the)S 172 x(/OWNER)S 170 x(and)S 172 x(/IDENTIFIER)S 171 x(quali\211er)SE-36 x(.)S 260 x(The)S 173 x(SEARC)S -2 x(H,)S 172 x(SET)S 172 x(and)S0C11670 X 598 y(UNDELETE)S 165 x(commands)S 166 x(use)S 166 x(these)SoH166 x(quali\211ers.)S 10773 X 896 y(\201)S 595 x(In)S 192 x(some)S 191 xC(cases)S 192 x(the)S 192 x(DFU_ALLPRIV)S 191 x(identi\211er)S 193 xxG(was)S 191 x(too)S 192 x(restrictive;)S 11670 X 598 y(therefore)S 182 xG(it)S 181 x(has)S 181 x(been)S 182 x(removed)S 182 x(from)S 182 x(the)SG182 x(DIRE)S -2 x(CTOR)S -19 x(Y/COMPRESS,)S 11670 X 598 y(DELETE/DIR)S I164 x(and)S 166 x(the)S 167 x(SET)S 165 x(command.)S 10773 X 896 y(\201)SnI595 x(Output)S 219 x(formatting)S 219 x(is)S 219 x(now)S 219 x(possible)S1G218 x(on)S 220 x(the)S 220 x(SEAR)S -2 x(CH)S 219 x(and)S 11670 X 598 ySD(DIRE)S -2 x(CTOR)S -19 x(Y/VERSIO)S -2 x(N)S 175 x(commands)S 174 xE(via)S 175 x(the)S 175 x(/FORMA)S -28 x(T)S 175 x(quali\211er)S -36 xcE(.)S 267 x(This)S 11670 X 598 y(allows)S 172 x(the)S 174 x(building)SSH174 x(of)S 173 x(action)S 174 x(DCL)S 173 [~ DFU024.BCKn[[DFU024.DOC]DFU024.PS;2]I|Wx(command)S 173 x(procedures)SF174 x(directly)S 174 x(from)S 11670 X 598 y(the)S 166 x(output)S 166 xI(of)S 166 x(these)S 166 x(commands.)S 10773 X 896 y(\201)S 595 x(Output)SaG169 x(\211le)S 171 x(handling)S 171 x(:)S 257 x(the)S 170 x(new)S 170 xpD(/APPEND)S 170 x(quali\211er)S 170 x(allows)S 169 x(DFU)S 170 x(to)SI169 x(add)S 11670 X 598 y(output)S 166 x(to)S 166 x(an)S 166 x(existing)S(I167 x(output)S 166 x(\211le)S 167 x(instead)S 165 x(of)S 166 x(creating)SoJ167 x(a)S 166 x(new)S 166 x(one.)S 10773 X 897 y(\201)S 595 x(DELETE/DIR)SF-2 x(ECTOR)S -20 x(Y)S 172 x(:)S 171 x(the)S 172 x(new)S 171 x(/KEEP)SE171 x(quali\211er)S 173 x(allows)S 170 x(preservation)S 11670 X 597 y7D(of)S 166 x(the)S 166 x(directory)S 167 x(tree;)S 166 x(only)S 167 xD(the)S 166 x(directory)S 167 x(content)S 167 x(is)S 165 x(deleted.)SC10773 X 897 y(\201)S 595 x(SEARC)S -2 x(H)S 168 x(:)S 168 x(added)S)H167 x(the)S 168 x(/OVER_A)S -2 x(LLOCA)S -28 x(TED)S 167 x(quali\211er)SL169 x(to)S 167 x(search)S 168 x(for)S 167 x(over)S 11670 X 598 y(allocated)SF166 x(\211les.)S 10773 X 896 y(\201)S 595 x(REPOR)S -2 x(T)S 175 x(:)SD175 x(Several)S 176 x(new)S 174 x(quali\211ers)S 175 x(allow)S 174 xG(control)S 175 x(over)S 176 x(the)S 174 x(output.)S 267 x(The)S 11670 X@G598 y(/USAGE)S 170 x(quali\211er)S 173 x(can)S 172 x(now)S 171 x(also)S5H172 x(be)S 171 x(used)S 172 x(as)S 171 x(/USAGE=)S 171 x(to)S 171 xE(report)S 172 x(a)S 11670 X 598 y(speci\211c)S 166 x(uic)S 166 x(or)S6E167 x(identi\211er)S -37 x(.)S 10773 X 897 y(\201)S 595 x(UNDELETE:)SeJ165 x(ability)S 166 x(to)S 166 x(undelete)S 167 x(\211les)S 166 x(marked)SF166 x(for)S 166 x(delete)S 10773 X 896 y(\201)S 595 x(VERI)S -2 x(FY)SE184 x(:)S 184 x(several)S 184 x(enhance)S 2 x(ments.)S 284 x(VERIFY)S2M182 x(/DIRECTOR)S -20 x(Y)S 183 x(allows)S 183 x(a)S 11670 X 598 y(complete)S7D177 x(directory)S 177 x(check)S 2 x(;)S 183 x(this)S 176 x(results)SC177 x(in)S 177 x(better)S 177 x(detection)S 177 x(of)S 177 x(lost)SXD177 x(\211les)S 11670 X 598 y(and)S 169 x(some)S 169 x(cases)S 169 xC(of)S 169 x(directory)S 170 x(problems.)S 256 x(Note)S 169 x(that)S9G169 x(/DIRECTO)S -2 x(R)S -18 x(Y_SCAN)S 11670 X 597 y(replaces)S 166 x)E(the)S 167 x(DIR)S -2 x(ECTOR)S -19 x(Y/CHECK)S 165 x(comand.)S 250 x D(Also)S 166 x(incorrect)S 167 x(backlinks)S 167 x(of)S 11670 X 598 yK(the)S 173 x(Master)S 172 x(File)S 173 x(Directory)S 173 x(\(000000.DIR\))SRD172 x(can)S 173 x(now)S 173 x(be)S 173 x(repaired.)S 263 x(Finally)SD11670 X 598 y(the)S 181 x(output)S 182 x(of)S 181 x(multiple)S 181 xE(allocated)S 181 x(blocks)S 181 x(has)S 181 x(been)S 182 x(improved)S C182 x(\()S 181 x(is)S 181 x(now)S 11670 X 598 y(sorted)S 165 x(by)S 4167 x(LBN')S -19 x(s\).)S 5094 36925 XY F36(1\2032)SEP PP1 %%PageTrailer 2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)s%1%%Page: (1-3) 9(%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)m PaperHeight PaperWidth PM 0 0 XYD0 SC 24771 1807 XY F28(Introduction)S 10773 4866 XY F151(The)S 167 xD(following)S 166 x(bugs)S 166 x(have)S 167 x(been)S 167 x(\211xed:)SG10773 X 897 y(\201)S 595 x(On)S 176 x(V)S -56 x(AX/VMS)S 176 x(V5.5-2)SxC176 x(without)S 176 x(the)S 176 x(patch)S 177 x(on)S 176 x(SMGSHR)SxG175 x(installed,)S 179 x(DFU)S 11670 X 597 y(could)S 171 x(exit)S 172 x C(with)S 171 x(an)S 171 x(ACCVIO)S 169 x(error)S -36 x(.)S 260 x(A)S5D171 x(workaround)S 172 x(has)S 171 x(been)S 172 x(build)S 171 x(in)SF172 x(to)S 11670 X 598 y(avoid)S 166 x(this)S 166 x(problem.)S 10773 XF897 y(\201)S 595 x(When)S 170 x(processing)S 171 x(a)S 170 x(corrupt)SD171 x(directory)S 171 x(DFU)S 170 x(could)S 170 x(end)S 171 x(with)SG170 x(an)S 170 x(ACCVI)S -2 x(O)S 11670 X 598 y(error)S -36 x(.)S 249 xwJ(This)S 166 x(has)S 166 x(been)S 167 x(\211xed)S 167 x(by)S 166 x(better)SI166 x(checking)S 168 x(of)S 166 x(the)S 166 x(directory)S 167 x(\211le.)SxE10773 X 896 y(\201)S 595 x(SET/MAXREC)S 165 x(did)S 165 x(not)S 167 x2C(work)S 166 x(properly)S -55 x(.)S 10773 X 897 y(\201)S 595 x(If,)S)I184 x(during)S 181 x(an)S 181 x(UNDELETE)S 179 x(command)S 181 x(CTRL/Y)S6K180 x(was)S 179 x(entered)S 181 x(an)S 181 x(extra)S 11670 X 598 y(RETURN)S%H168 x(had)S 170 x(to)S 169 x(be)S 170 x(given)S 171 x(to)S 169 x(abort)SE170 x(the)S 169 x(UNDELETE)S 169 x(command.)S 256 x(This)S 170 x(is)SF11670 X 597 y(now)S 166 x(\211xed.)S 10773 X 897 y(\201)S 595 x(VERI)SH-2 x(FY/FIX)S 171 x(and)S 170 x(UNDELETE)S 169 x(did)S 170 x(not)S 170 xG(always)S 170 x(reenter)S 171 x(the)S 170 x(\211le)S 171 x(with)S 169 x1D(its)S 11670 X 598 y(original)S 171 x(version)S 172 x(number)S -36 xC(.)S 259 x(DFU)S 170 x(will)S 170 x(now)S 171 x(enter)S 171 x(the)S)E171 x(\211le)S 172 x(with)S 170 x(the)S 171 x(correct)S 11670 X 597 y G(version)S 187 x(number)S -36 x(,)S 193 x(or)S 187 x(the)S 187 x(next)SrE188 x(higher)S 188 x(version)S 188 x(if)S 187 x(the)S 187 x(current)S)E188 x(version)S 11670 X 598 y(already)S 166 x(exists.)S 10773 X 897 y1C(\201)S 595 x(Issue)S 172 x(a)S 172 x(correct)S 173 x(error)S 173 x6C(message)S 172 x(when)S 173 x(trying)S 174 x(to)S 172 x(use)S 173 x G(DFU)S 172 x(on)S 173 x(non)S 173 x(ODS-2)S 11670 X 598 y(disks)S 165 xrE(such)S 167 x(as)S 165 x(a)S 166 x(Spiralog)S 167 x(volume.)S 10773 XIG896 y(\201)S 595 x(In)S 179 x(a)S 180 x(batch)S 179 x(job)S 180 x(DFU)S)J179 x(could)S 180 x(produce)S 180 x(unwanted)S 180 x(blank)S 180 x(pages)SH180 x(when)S 179 x(the)S 11670 X 598 y(logical)S 166 x(DFU$NOSMG)S 165 xD(was)S 165 x(de\211ned.)S 5094 19245 XY 23160 96 R 2404 19943 XY F24C(1.4)S 5094 X(Restrictions)S 166 x(and)S 166 x(Parameters)S 10773 XyH896 y F151(The)S 167 x(DFU)S 166 x(program)S 166 x(has)S 166 x(a)S 166 xF(few)S 166 x(restrictions)S 165 x(:)S 10773 X 897 y(\201)S 595 x(DFU)SH166 x(can)S 166 x(not)S 166 x(handle)S 167 x(volume)S 167 x(sets)S 165 xE(with)S 165 x(more)S 167 x(than)S 166 x(32)S 166 x(members.)S 10773 X(D897 y(\201)S 595 x(Due)S 173 x(to)S 174 x(changes)S 175 x(in)S 174 xC(VMS)S 173 x(run)S 175 x(time)S 173 x(libraries)S 174 x(for)S 174 xxG(DEC)S 172 x(C)S 174 x(DFU.EXE)S 173 x(\211les)S 11670 X 597 y(linked)S1H188 x(on)S 188 x(VMS)S 187 x(6.2)S 188 x(cannot)S 188 x(be)S 187 x(run)SL188 x(on)S 188 x(VMS)S 187 x(6.1)S 188 x(and)S 188 x(lower)S 187 x(without)SF11670 X 598 y(relinking)S 180 x(the)S 179 x(image.)S 276 x(The)S 179 xF(best)S 178 x(solution)S 179 x(is)S 179 x(to)S 178 x(reinstall)S 179 xF(DFU)S 179 x(on)S 179 x(those)S 11670 X 598 y(systems.)S 10773 X 897 yC(\201)S 595 x(The)S 158 x(SMG)S 157 x(interface)S 158 x(may)S 158 x6G(not)S 158 x(work)S 157 x(at)S 158 x(all)S 157 x(on)S 158 x(VMS)S 157 x7H(5.5-2.)S 250 x(In)S 158 x(that)S 157 x(case)S 158 x(you)S 11670 X 597 yH(need)S 169 x(to)S 169 x(install)S 169 x(CSCP)S -38 x(A)S -28 x(T_0320)SE170 x(and)S 169 x(re-install)S 169 x(DFU.)S 169 x(W)S -37 x(arning:)S G257 x(CSCP)S -38 x(A)S -27 x(T_)S 11670 X 598 y(0320)S 187 x(replaces)SiD188 x(SMGSHR.EXE)S 186 x(and)S 189 x(may)S 188 x(have)S 188 x(side)SE188 x(effects)S 187 x(on)S 188 x(other)S 11670 X 598 y(applications)SIF165 x(using)S 167 x(SMG)S 166 x(routines.)S 10773 28212 XY(The)S 167 xG(following)S 166 x(minimum)S 166 x(process)S 166 x(quotas)S 166 x(are)S H166 x(recommended)S 166 x(for)S 166 x(DFU)S 166 x(usage:)S 10773 X 896 yG(\201)S 595 x(WSQUO)S -2 x(T)S -27 x(A)S 166 x(:)S 166 x(1500)S 10773 XeD897 y(\201)S 595 x(WSEXTE)S -2 x(NT)S 167 x(:)S 166 x(3000)S 10773 XD897 y(\201)S 595 x(DIOLM)S 165 x(:)S 167 x(40)S 10773 X 896 y(\201)SE595 x(ASTLM)S 166 x(:)S 166 x(40)S 10773 X 897 y(\201)S 595 x(FILLM)SSG167 x(:)S 166 x(40)S 10773 X 897 y(\201)S 595 x(BYTLM)S 166 x(:)S 166 xoH(30000)S 10773 X 896 y(\201)S 595 x(PGFLQUOT)S -28 x(A)S 166 x(:)S 166 x$(30000)S 27427 36925 XY F36(1\2033)SEP PP2 %%PageTrailerx2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)n%S%%Page: (1-4) 10%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)1 PaperHeight PaperWidth PM 0 0 XYC0 SC 5094 1807 XY F28(Introducti)S 2 x(on)S 10773 4866 XY F151(If)S)C170 x(you)S 171 x(use)S 170 x(DFU)S 170 x(on)S 171 x(volume)S 171 x)F(sets)S 169 x(with)S 170 x(a)S 170 x(large)S 171 x(number)S 171 x(of)SG170 x(members)S 170 x(you)S 171 x(may)S 10773 X 598 y(need)S 167 x(to)S C165 x(increase)S 167 x(the)S 166 x(SYSGEN)S 165 x(parameter)S 165 xwH(CHANNELCNT)S -46 x(.)S 10773 X 896 y(If)S 182 x(you)S 183 x(use)S 183 xF(the)S 182 x(directory)S 183 x(command)S 182 x(on)S 183 x(very)S 184 xC(large)S 183 x(directory)S 183 x(\211les)S 182 x(\(>)S 182 x(1000)S1C10773 X 598 y(blocks\))S 194 x(and)S 194 x(run)S 195 x(into)S 194 x:J(errors)S 194 x(you)S 195 x(may)S 194 x(need)S 194 x(to)S 194 x(increase)SG194 x(the)S 194 x(following)S 10773 X 598 y(parameters:)S 10773 X 897 y G(\201)S 595 x(WSQUO)S -2 x(T)S -27 x(A)S 166 x(at)S 166 x(least)S 165 xSJ(1000)S 166 x(+)S 166 x(size-of-largest)S 165 x(directory)S 166 x(\211le)SF10773 X 896 y(\201)S 595 x(WSEXTE)S -2 x(NT)S 167 x(:)S 166 x(WSQUOT)SG-28 x(A)S 165 x(+)S 166 x(at)S 166 x(least)S 165 x(1000)S 10773 X 897 yrN(\201)S 595 x(CTLP)S -37 x(AGES)S 165 x(\(SYSGE)S -2 x(N)S 166 x(parameter\))SC166 x(:)S 250 x(at)S 166 x(least)S 165 x(100)S 10773 X 896 y(\201)SSD595 x(WSMAX)S 165 x(\(SYSGE)S -2 x(N)S 166 x(parameter\))S 166 x(:)SE250 x(at)S 165 x(least)S 166 x(WSEXTE)S -2 x(NT)S 10773 12238 XY(Do)SSC167 x(not)S 167 x(chang)S 2 x(e)S 167 x(parameters)S 167 x(unless)S/F167 x(you)S 168 x(run)S 169 x(into)S 167 x(errors)S 167 x(such)S 168 xC(as)S 167 x(EXCEE)S -2 x(DED)S 10773 X 598 y(QUOT)S -28 x(A)S 166 xXD(or)S 166 x(INSUFFICIENT)S 165 x(WORK)S -2 x(ING)S 166 x(SET)S 165 x%(LIMITS.)S 5094 36925 XY F36(1\2034)SEP PPo %%PageTrailere2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)2%x%%Page: (2-1) 11%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)i PaperHeight PaperWidth PM 0 0 XYJ0 SC 2404 5875 XY F12(2)S 5094 4546 XY 23160 48 R 5094 5443 XY F20(Using)SG166 x(DFU)S 10773 8652 XY F151(This)S 171 x(chapter)S 171 x(describes)S9D170 x(the)S 170 x(installation)S 170 x(procedure)S 172 x(and)S 171 xF(other)S 171 x(actions)S 170 x(which)S 10773 X 598 y(must)S 166 x(be)SJ166 x(taken)S 166 x(to)S 166 x(run)S 167 x(DFU.)S 5094 10279 XY 23160 96 RG2404 10976 XY F24(2.1)S 5094 X(Installation)S 166 x(procedure)S 10773 X6F897 y F151(DFU)S 204 x(can)S 205 x(be)S 205 x(installed)S 203 x(with)SF204 x(the)S 205 x(VMSINST)S -28 x(AL)S 204 x(utility)S -55 x(.)S 327 xH(During)S 205 x(the)S 10773 X 598 y(installation)S 166 x(VMSINST)S -28 xF(AL)S 166 x(does)S 165 x(the)S 167 x(following:)S 10773 X 896 y(\201)SK595 x(Moves)S 166 x(the)S 166 x(documentation)S 167 x(to)S 166 x(SYS$HELP)S)E165 x(\(Optional\))S 10773 X 897 y(\201)S 595 x(Relinks)S 166 x(DFU)SeD10773 X 897 y(\201)S 595 x(Creates)S 176 x(the)S 177 x(DFU_ALLPRIV)SD176 x(identi\211er)S 177 x(needed)S 177 x(to)S 177 x(perform)S 177 xE(the)S 177 x(special)S 11670 X 598 y(functions.)S 250 x(\(See)S 166 xeI(chapter)S 166 x(2.2\))S 10773 16854 XY(The)S 167 x(DFU)S 166 x(utility)S)E166 x(in)S 166 x(fact)S 166 x(contains)S 166 x(just)S 166 x(2)S 166 xSF(\211les)S 166 x(:)S 10773 X 897 y(1)S 620 x(DFU.EXE)S 165 x(:)S 167 xC(the)S 166 x(DFU)S 166 x(program)S 10773 X 897 y(2)S 620 x(DFUHLP)SaE-64 x(.HLB)S 166 x(:)S 167 x(the)S 166 x(on-line)S 166 x(help)S 167 xXH(\211le)S 10773 19744 XY(DFU.EXE)S 182 x(will)S 182 x(be)S 183 x(moved)SF184 x(to)S 182 x(SYS$SYSTEM,)S 182 x(and)S 183 x(DFUHLP)S -64 x(.HLB)SI184 x(will)S 182 x(be)S 10773 X 597 y(moved)S 167 x(to)S 165 x(SYS$HELP)S E-64 x(.)S 10773 X 897 y(Y)S -56 x(ou)S 187 x(can)S 187 x(optionally)S1G186 x(get)S 186 x(documentation)S 187 x(of)S 186 x(DFU)S 186 x(during)S G187 x(installation.)S 290 x(T)S -46 x(o)S 10773 X 598 y(install)S 166 xoG(DFU)S 165 x(log)S 167 x(in)S 166 x(into)S 166 x(a)S 166 x(privileged)S7F167 x(account)S 167 x(and)S 166 x(enter)S 167 x(:)S 10773 X 896 y F102G($)S 239 x(@sys$update:)S 2 x(vmsinstal)S 11251 X 748 y(VAX/VMS)S 240 x(H(Software)S 240 x(Product)S 240 x(Installation)S 240 x(Procedure)S 240 xD(V6.2)S 11251 X 747 y(It)S 240 x(is)S 239 x(01-Aug-1996)S 240 x(at)SE239 x(13:46.)S 11251 X 747 y(Enter)S 240 x(a)S 239 x(question)S 240 xxE(mark)S 240 x(\(?\))S 239 x(at)S 239 x(any)S 240 x(time)S 239 x(for)S I240 x(help.)S 11251 X 747 y(*)S 240 x(Are)S 239 x(you)S 239 x(satisfied)SaE240 x(with)S 240 x(the)S 239 x(backup)S 240 x(of)S 239 x(your)S 240 x7H(system)S 240 x(disk)S 239 x([YES]?)S 10773 X 897 y F151(VMSINST)S -28 xK(AL)S 177 x(now)S 177 x(asks)S 176 x(for)S 177 x(the)S 177 x(distribution)S2E176 x(media)S 177 x(and)S 176 x(product.)S 272 x(Y)S -56 x(ou)S 177 xoI(can)S 10773 X 598 y(also)S 166 x(specify)S 166 x(the)S 167 x(directory)SnD167 x(where)S 166 x(you)S 167 x(have)S 167 x(the)S 167 x(DFU_FREEW)SF-47 x(ARE)S -2 x(_024.A)S 167 x(\211le)S 10773 X 597 y(instead)S 166 xC(of)S 166 x(a)S 166 x(device)S 166 x(name:)S 11251 X 897 y F102(*)S K240 x(Where)S 239 x(will)S 240 x(the)S 239 x(distribution)S 240 x(volumes)SsG240 x(be)S 240 x(mounted:)S 239 x([DDCU:])S 11251 X 747 y(Enter)S 240 x(E(the)S 239 x(products)S 240 x(to)S 240 x(be)S 239 x(processed)S 240 x(C(from)S 239 x(the)S 240 x(first)S 239 x(distributi)S 2 x(on)S 239 x S(volume)S 240 x(set.)S 11251 X 747 y(*)S 240 x(Products:)S 240 x(DFU_FREEWARE_024)S D11251 X 449 y(*)S 240 x(Enter)S 239 x(installation)S 240 x(options)SI240 x(you)S 240 x(wish)S 239 x(to)S 240 x(use)S 239 x(\(none\):)S 11251 XpF747 y(The)S 240 x(following)S 240 x(products)S 240 x(will)S 239 x(be)SD240 x(processed:)S 12925 X 747 y(DFU_FREEWARE_)S 240 x(2.4)S 11251 XG747 y(Beginning)S 240 x(installation)S 241 x(of)S 239 x(DFU_FREEWARE_)S7F240 x(V2.4)S 479 x(at)S 239 x(13:46)S 11251 X 747 y(%VMSINSTAL-I)S 2 xG(-RESTORE,)S 240 x(Restoring)S 240 x(product)S 239 x(save)S 240 x(set)SDL239 x(A)S 240 x(...)S 11251 X 748 y(Installing)S 240 x(DFU)S 240 x(version)S'240 x(2.4)S 27427 36925 XY F36(2\2031)S(EP PP6 %%PageTrailer02%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courier(%%PageProcessColors:%%PageCustomColors: (BLACK)i%r%%Page: (2-2) 12%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYH0 SC 5094 1807 XY F28(Using)S 167 x(DFU)S 10773 4866 XY F151(The)S 191 xF(next)S 191 x(question)S 191 x(will)S 190 x(prompt)S 190 x(you)S 192 xE(for)S 190 x(the)S 191 x(documentation)S 191 x(\211les.)S 298 x(The)S9F10773 X 598 y(DFU)S 177 x(documentation)S 177 x(is)S 177 x(available)SE177 x(in)S 177 x(Line)S 178 x(printer)S -37 x(,)S 180 x(PostScript,)SMC180 x(HTML)S 178 x(and)S 10773 X 598 y(Bookreader)S 167 x(format.)StD249 x(The)S 167 x(documentation)S 166 x(\211les)S 166 x(will)S 166 xJ(be)S 166 x(copied)S 166 x(to)S 166 x(SYS$HE)S -2 x(LP)S -63 x(.)S 11251 XD896 y F102(*)S 240 x(Do)S 239 x(you)S 239 x(want)S 240 x(the)S 239 xD(documentation)S 241 x(in)S 239 x(Lineprinter)S 240 x(format)S 240 xE(?)S 239 x([Y]?)S 11251 X 448 y(%VMSINSTAL-I)S 2 x(-DOCMOVED,)S 240 xSF(DFU024.LINE)S 240 x(moved)S 240 x(to)S 239 x(SYS$HELP)S 11251 X 748 yJ(*)S 240 x(Do)S 239 x(you)S 239 x(want)S 240 x(the)S 239 x(documentation)SI241 x(in)S 239 x(PostScript\(TM\))S 240 x(format)S 240 x(?)S 718 x([N]?)SSG11251 X 448 y(*)S 240 x(Do)S 239 x(you)S 239 x(want)S 240 x(the)S 239 xoC(documentation)S 241 x(in)S 239 x(Bookreader)S 240 x(format)S 240 x2G(?)S 239 x([N]?)S 11251 X 448 y(*)S 240 x(Do)S 239 x(you)S 239 x(want)STH240 x(the)S 239 x(documentation)S 241 x(in)S 239 x(HTML)S 239 x(format)SD240 x(?)S 239 x([N]?)S 10773 X 897 y F151(VMSINST)S -28 x(AL)S 184 xF(now)S 183 x(links)S 184 x(the)S 183 x(DFU)S 184 x(image)S 183 x(and)SD184 x(adds)S 183 x(the)S 184 x(identi\211er)S 184 x(to)S 183 x(the)SD10773 X 598 y(Rightslist)S 165 x(\(see)S 166 x(chapter)S 166 x(2.2)SD167 x(for)S 166 x(the)S 166 x(meaning)S 167 x(of)S 166 x(the)S 166 xI(identi\211er\).)S 11251 X 896 y F102(Linking)S 240 x(DFU)S 240 x(image)SD239 x(...)S 11251 X 449 y(%DFU-I-LINK,)S 241 x(Linking)S 239 x(DFU)SI240 x(2.4)S 478 x(image...)S 11251 X 448 y(%DFU-S-DONE,)S 241 x(DFU.EXE)S9D239 x(created)S 10773 X 897 y F151(Next)S 166 x(VMSINST)S -27 x(AL)SP165 x(will)S 166 x(create)S 166 x(the)S 166 x(DFU_ALLPRIV)S 166 x(identi\211er)SI166 x(if)S 166 x(necessary)S -55 x(.)S 11251 14430 XY F102(%VMSINSTAL-I)SoD2 x(-ACCOUNT,)S 240 x(This)S 239 x(installation)S 240 x(adds)S 240 xC(an)S 239 x(identifier)S 240 x(named)S 11730 X 448 y(DFU_ALLPRIV.)S(O11251 X 449 y(%UAF-I-RDBAD)S 2 x(DMSG,)S 239 x(identifier)S 240 x(DFU_ALLPRIV)S3H241 x(value:)S 239 x(%X80010008)S 240 x(added)S 240 x(to)S 11730 X 448 yE(rights)S 239 x(data)S 240 x(base)S 11251 16821 XY(%VMSINSTAL-I)S 2 xaF(-MOVEFILES,)S 240 x(Files)S 239 x(will)S 240 x(now)S 239 x(be)S 240 xO(moved)S 239 x(to)S 240 x(their)S 11490 X 448 y(target)S 240 x(directories...)S9F11251 X 748 y(Installation)S 241 x(of)S 239 x(DFU)S 239 x(V2.4)S 479 xG(completed)S 240 x(at)S 239 x(13:47)S 10773 X 896 y F151(Y)S -56 x(ou)SsE184 x(must)S 182 x(grant)S 184 x(any)S 184 x(DFU)S 183 x(user)S 183 x)H(including)S 184 x(yourself)S 184 x(the)S 183 x(necessary)S 183 x(DFU_)SG10773 X 598 y(ALLPRIV)S 169 x(identi\211er)S 170 x(if)S 169 x(a)S 170 x6E(user)S 170 x(be)S 169 x(allowed)S 169 x(to)S 170 x(use)S 169 x(the)SlH170 x(special)S 169 x(DFU)S 169 x(functions.)S 10773 X 598 y(See)S 166 xD(chapter)S 167 x(2.2)S 166 x(for)S 166 x(the)S 166 x(meaning)S 167 xJ(of)S 166 x(this)S 166 x(identi\211er)S -36 x(.)S 5094 21055 XY 23160 96 RD2404 21753 XY F24(2.2)S 5094 X(Security)S 166 x(and)S 166 x(access)SC10773 X 896 y F151(DFU)S 178 x(has)S 179 x(some)S 178 x(functions)S7D179 x(which)S 179 x(must)S 178 x(not)S 179 x(be)S 178 x(made)S 179 xE(available)S 178 x(for)S 179 x(general)S 10773 X 598 y(usage.)S 250 x)C(Therefore)S 167 x(DFU)S 166 x(has)S 166 x(2)S 166 x(groups)S 167 xlH(of)S 166 x(functions)S 166 x(:)S 10773 X 897 y(1)S 620 x(Normal)S 166 xD(functions)S 11670 X 896 y(1)S 619 x(DELETE/DIRE)S -2 x(CTOR)S -19 xG(Y)S 11670 X 897 y(2)S 619 x(DIRECTO)S -2 x(R)S -18 x(Y)S 11670 X 897 y F(3)S 619 x(REPORT)S 11670 X 896 y(4)S 619 x(SEARCH)S 11670 X 897 y(5)SE619 x(SET)S 11670 X 897 y(6)S 619 x(SP)S -36 x(A)S -47 x(WN)S 11670 X H896 y(7)S 619 x(VERIFY)S 165 x(\(except)S 166 x(VERIFY/FIX)S 165 x(and)SC167 x(VER)S -2 x(IFY/REBUILD\))S 10773 32213 XY(2)S 620 x(Special)S D166 x(functions)S 11670 X 897 y(1)S 619 x(DEFRAG)S 11670 X 897 y(2)SD619 x(DELETE/FILE)S 11670 X 896 y(3)S 619 x(UNDELETE)S 5094 36925 XY F36(2\2032)SEP PPn %%PageTrailer02%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ CourierL%%PageProcessColors:%%PageCustomColors: (BLACK)(%)%%Page: (2-3) 13%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)g PaperHeight PaperWidth PM 0 0 XYG0 SC 25203 1807 XY F28(Using)S 166 x(DFU)S 11670 4866 XY F151(4)S 619 x F(VERIFY/FIX)S 165 x(and)S 166 x(VERIFY/REBUI)S -2 x(LD)S 10773 5962 XYH(The)S 182 x(normal)S 182 x(functions)S 181 x(need)S 182 x(SYSPR)S -19 xF(V)S 181 x(or)S 181 x(BYP)S -37 x(ASS)S 180 x(privilege.)S 281 x(The)SE182 x(special)S 10773 X 598 y(functions)S 196 x(require)S 196 x(BYP)SSF-38 x(ASS)S 195 x(privilege)S 196 x(as)S 194 x(well)S 195 x(as)S 195 xH(the)S 195 x(DFU_ALLPRIV)S 10773 X 597 y(identi\211er)S 181 x(granted.)SE279 x(The)S 181 x(DFU_ALLPRIV)S 179 x(identi\211er)S 181 x(is)S 180 x1H(created)S 180 x(during)S 182 x(the)S 10773 X 598 y(installation)S 174 xG(procedure.)S 267 x(T)S -45 x(o)S 174 x(enable)S 175 x(a)S 174 x(user)S7H175 x(to)S 174 x(perform)S 175 x(special)S 174 x(functions)S 174 x(the)SG10773 X 598 y(system)S 166 x(manager)S 166 x(must)S 166 x(grant)S 167 x2I(this)S 166 x(identi\211er)S 166 x(as)S 166 x(follows)S 165 x(:)S 10773 X F897 y F102($)S 239 x(mc)S 240 x(authorize)S 10773 X 448 y(UAF>)S 240 xC(grant/id)S 240 x(DFU_ALLPRIV)S 240 x(username)S 10773 X 897 y F151lF(It)S 173 x(is)S 172 x(highly)S 174 x(recommended)S 174 x(that)S 173 xG(special)S 172 x(functions)S 174 x(are)S 173 x(NOT)S 172 x(made)S 173 xoH(available)S 10773 X 597 y(to)S 166 x(the)S 166 x(world.)S 5094 13118 XYG23160 96 R 2404 13816 XY F24(2.3)S 5094 X(Running)S 166 x(DFU)S 10773 X H896 y F151(T)S -45 x(o)S 166 x(run)S 167 x(DFU)S 165 x(you)S 167 x(can)SR167 x(enter)S 166 x(:)S 10773 X 897 y F102($)S 239 x(RUN)S 240 x(disk:[mydir]DFU)SM10773 X 897 y F151(or)S 166 x(\(if)S 166 x(DFU)S 166 x(is)S 165 x(installed)S2C166 x(systemwide\):)S 10773 X 896 y F102($)S 239 x(MC)S 240 x(DFU)S K10773 X 897 y F151(Y)S -56 x(ou)S 167 x(can)S 166 x(also)S 166 x(de\211ne)ScH167 x(and)S 166 x(use)S 166 x(a)S 166 x(symbol)S 166 x(for)S 166 x(DFU)SD166 x(as)S 166 x(follows:)S 10773 X 897 y F102($)S 239 x(DFU)S 240 xE(==)S 239 x("$DFU")S 10773 X 448 y($)S 239 x(DFU)S 10773 X 897 y F151 G(DFU)S 166 x(now)S 166 x(prompts)S 165 x(with)S 166 x(:)S 11730 X 896 y HF102(Disk)S 239 x(and)S 239 x(File)S 240 x(Utilities)S 240 x(for)S 239 xL(OpenVMS)S 240 x(DFU)S 240 x(V2.4)S 11730 X 449 y(Freeware)S 239 x(version)SD11730 X 448 y(Copyright)S 240 x(\(C\))S 239 x(1996)S 239 x(Digital)SH240 x(Equipment)S 240 x(Corporation)S 10773 X 747 y(DFU>)S 10773 X 897 yEF151(Y)S -56 x(ou)S 178 x(can)S 177 x(now)S 177 x(enter)S 177 x(DFU)S3G177 x(commands.)S 271 x(HELP)S 177 x(gives)S 177 x(you)S 178 x(online)S(F177 x(help.)S 272 x(After)S 10773 X 597 y(each)S 169 x(command)S 168 xJ(DFU)S 168 x(returns)S 169 x(to)S 168 x(the)S 169 x(DFU>)S 168 x(prompt.)SH253 x(Y)S -55 x(ou)S 168 x(can)S 169 x(recall)S 169 x(and)S 168 x(edit)SD10773 X 598 y(commands,)S 182 x(just)S 179 x(as)S 178 x(with)S 179 xK(DCL)S 178 x(\(20)S 178 x(commands)S 179 x(will)S 178 x(be)S 179 x(stored)SnE178 x(in)S 179 x(the)S 179 x(recall)S 10773 X 598 y(buffer\).)S 253 xXF(Use)S 167 x(EXIT)S 167 x(or)S 168 x(CTRL/Z)S 168 x(to)S 167 x(leave)SH168 x(DFU.)S 168 x(If)S 167 x(you)S 169 x(use)S 167 x(a)S 168 x(symbol)SH167 x(for)S 168 x(DFU)S 167 x(,)S 10773 X 598 y(you)S 167 x(also)S 166 xE(process)S 165 x(a)S 166 x(single)S 167 x(command)S 166 x(and)S 166 x C(return)S 167 x(to)S 166 x(DCL)S 165 x(immediately:)S 10773 X 896 y6GF102($DFU)S 240 x(SEARCH)S 239 x(disk/qualifi)S 2 x(ers)S 10773 X 897 y EF151(During)S 184 x(a)S 184 x(DFU)S 183 x(run)S 184 x(,)S 188 x(you)SmE184 x(can)S 184 x(interrupt)S 184 x(DFU)S 183 x(with)S 183 x(CTRL/C)ScL183 x(or)S 183 x(CTRL/Y)S -55 x(.)S 10773 X 598 y(These)S 178 x(interrupts)SC178 x(are)S 178 x(catched)S 179 x(by)S 178 x(DFU)S 178 x(to)S 177 xeC(allow)S 178 x(a)S 178 x(correct)S 178 x(rundown)S 179 x(of)S 177 xyF(the)S 10773 X 598 y(current)S 172 x(command.)S 260 x(It)S 170 x(may)SG172 x(therefore)S 171 x(take)S 172 x(some)S 170 x(time)S 171 x(before)SaH171 x(DFU)S 171 x(responds)S 10773 X 597 y(to)S 166 x(a)S 166 x(CTRL/C)SN166 x(or)S 166 x(Y)S 166 x(interrupt.)S 5094 30902 XY 23160 96 R 2404 31599 XYCF24(2.4)S 5094 X(Using)S 166 x(an)S 166 x(indirect)S 166 x(\211le)SbC165 x(list)S 10773 X 897 y F151(There)S 170 x(are)S 170 x(3)S 169 x1G(commands,)S 170 x(DIREC)S -2 x(TOR)S -19 x(Y)S -55 x(,)S 170 x(DEFRA)SC-2 x(G)S 169 x(and)S 170 x(SET)S 168 x(which)S 170 x(accept)S 169 xF(an)S 10773 X 598 y(indirect)S 170 x(\211le)S 170 x(as)S 170 x(input)SD170 x(parameter)S -37 x(.)S 257 x(This)S 170 x(is)S 169 x(achieved)SG171 x(by)S 170 x(using)S 171 x(the)S 170 x(@)S 170 x(sign.)S 257 x(An)SnK10773 X 597 y(indirect)S 167 x(\211le)S 166 x(is)S 166 x(a)S 166 x(\211le)SSH167 x(containing)S 167 x(a)S 166 x(list)S 166 x(of)S 166 x(valid)S 166 xH(\211lenames)S 167 x(\(each)S 166 x(line)S 167 x(in)S 166 x(such)S 167 xH(a)S 10773 X 598 y(\211le)S 167 x(must)S 165 x(contain)S 167 x(exactly)SK167 x(one)S 167 x(\211le\).)S 250 x(Such)S 167 x(indirect)S 167 x(\211les)S(H166 x(can)S 166 x(be)S 167 x(the)S 166 x(output)S 167 x(\211le)S 10773 XG598 y(of)S 166 x(the)S 166 x(DFU)S 166 x(Search)S 167 x(command)S 166 xS#(eg.:)S 27427 36925 XY F36(2\2033)S EP PP1 %%PageTrailer72%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courier%%PageProcessColors:%%PageCustomColors: (BLACK)1%x%%Page: (2-4) 14%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)) PaperHeight PaperWidth PM 0 0 XYF0 SC 5094 1807 XY F28(Using)S 167 x(DFU)S 10773 4766 XY F102($)S 239 xC(DFU)S 10773 X 448 y(DFU>)S 240 x(SEARCH)S 239 x(mydisk/CHAR=)S 2 x)N(DIRECTORY/OUTPUT=x.)S 2 x(x)S 10773 X 448 y(DFU>)S 240 x(DIRECTORY/COMPRESS)S'241 x(@x.x)S 5094 36925 XY F36(2\2034)SSEP PPn %%PageTrailerx#%%PageFonts: Helvetica-Bold Courier)%%PageProcessColors:%%PageCustomColors: (BLACK))%4%%Page: (3-1) 15%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYH0 SC 2404 5875 XY F12(3)S 5094 4546 XY 23160 48 R 5094 5443 XY F20(The)SG166 x(SMG)S 165 x(output)S 165 x(interf)S -2 x(ace)S 10773 8652 XY F1511F(As)S 187 x(of)S 188 x(version)S 189 x(V2.2)S 187 x(DFU)S 188 x(uses)SH187 x(SMG)S 188 x(\(Screen)S 188 x(management)S 189 x(routines\))S 188 xC(to)S 10773 X 598 y(perform)S 168 x(output)S 168 x(for)S 167 x(an)SSC168 x(interactive)S 168 x(DFU)S 167 x(session.)S 252 x(This)S 168 x3E(chapter)S 168 x(describes)S 167 x(the)S 10773 X 597 y(layout)S 180 xtI(of)S 179 x(the)S 179 x(DFU)S 178 x(screen,)S 184 x(the)S 179 x(special)S)G178 x(commands)S 179 x(used)S 179 x(only)S 180 x(in)S 179 x(the)S 179 x H(SMG)S 10773 X 598 y(interface)S 166 x(and)S 167 x(other)S 166 x(items)SE165 x(with)S 166 x(respect)S 166 x(to)S 166 x(the)S 166 x(SMG)S 166 x E(interface.)S 5094 11392 XY 23160 96 R 2404 12089 XY F24(3.1)S 5094 X6P(Enabling/Disabling)S 165 x(SMG)S 10773 X 897 y F151(DFU)S 182 x(automatically)SG182 x(selects)S 181 x(SMG)S 182 x(output)S 182 x(if)S 182 x(you)S 183 xrI(run)S 183 x(an)S 182 x(interactive)S 183 x(DFU)S 10773 X 597 y(session)SxD170 x(on)S 172 x(a)S 171 x(terminal)S 171 x(or)S 171 x(workstation)SF171 x(which)S 171 x(supports)S 171 x(SMG.)S 171 x(In)S 171 x(a)S 171 xG(batch)S 172 x(job)S 10773 X 598 y(or)S 167 x(a)S 166 x(non-DEC)S 165 xSE(terminal)S 167 x(DFU)S 166 x(will)S 165 x(use)S 166 x(normal)S 167 x(C(line)S 166 x(oriented)S 167 x(output.)S 250 x(Y)S -56 x(ou)S 167 x/C(can)S 10773 X 598 y(explicitly)S 162 x(disable)S 161 x(SMG)S 161 x(F(by)S 162 x(de\211ning)S 163 x(the)S 162 x(logical)S 162 x(DFU$NOSMG)SL160 x(to)S 162 x(any)S 162 x(value.)S 5094 15725 XY 23160 96 R 2404 16423 XYDF24(3.2)S 5094 X(Automatic)S 166 x(switching)S 165 x(between)S 166 xH(SMG)S 165 x(and)S 166 x(Line)S 166 x(mode)S 5094 X 896 y F151(Y)S -55 xO(ou)S 172 x(may)S 171 x(prefer)S 172 x(to)S 171 x(perform)S 171 x(interactive)SXG172 x(DFU)S 171 x(sessions)S 170 x(in)S 172 x(SMG)S 171 x(mode,)S 173 x6D(and)S 171 x(single)S 172 x(DFU)S 171 x(commands)S 171 x(in)S 5094 XH598 y(normal)S 167 x(line)S 166 x(mode.)S 249 x(This)S 167 x(can)S 166 xG(be)S 166 x(done)S 167 x(by)S 166 x(using)S 167 x(the)S 166 x(command)ScG166 x(procedure)S 167 x(listed)S 166 x(below:)S 10773 X 747 y F102($!)SPF239 x(Procedure)S 240 x(to)S 240 x(switch)S 239 x(beteen)S 240 x(SMG)SC240 x(and)S 239 x(line)S 240 x(mode)S 10773 X 449 y($)S 239 x(DFU)S1F240 x(=)S 239 x("$DFU")S 10773 X 448 y($)S 239 x(if)S 240 x(p1)S 239 xP(.eqs.)S 240 x("")S 10773 X 448 y($)S 239 x(then)S 10773 X 449 y($!Interactive)SD241 x(seesion)S 10773 X 448 y($)S 239 x(def/user)S 240 x(sys$input)SC240 x(sys$command)S 10773 X 448 y($)S 239 x(dfu)S 10773 X 448 y($)SsF239 x(else)S 10773 X 449 y($!Single)S 240 x(command)S 240 x(so)S 239 xK(disable)S 240 x(SMG)S 10773 X 448 y($)S 239 x(def/user)S 240 x(dfu$nosmg)S8G240 x(x)S 10773 X 448 y($)S 239 x(dfu)S 240 x('p1')S 239 x('p2')S 240 x1H('p3')S 239 x('p4')S 240 x('p5')S 239 x('p6')S 240 x('p7')S 239 x('p8')SL10773 X 449 y($)S 239 x(endif)S 10773 X 448 y($)S 239 x(exit)S 5094 25970 XYC23160 96 R 2404 26668 XY F24(3.3)S 5094 X(Layout)S 166 x(of)S 167 x6M(the)S 166 x(SMG)S 166 x(screen)S 10773 X 896 y F151(After)S 166 x(starting)S E166 x(DFU)S 166 x(the)S 166 x(screen)S 166 x(looks)S 166 x(as)S 166 xx0(follows)S 165 x(:)S 27427 36925 XY F36(3\2031)SEP PPX %%PageTrailerI2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courier3%%PageProcessColors:%%PageCustomColors: (BLACK)N%S%%Page: (3-2) 16%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)6 PaperHeight PaperWidth PM 0 0 XYH0 SC 5094 1807 XY F28(The)S 167 x(SMG)S 166 x(output)S 167 x(interface)SG10773 4753 XY F102(+-------------)S 2 x(----------<)S 240 x(DFU)S 239 x S(V2.4)S 240 x(\(Freeware)S 240 x(\))S 239 x(>--------------)S 2 x(--------------+)S6D10773 X 449 y(|)S 28945 X(|)S 10773 X 448 y(|)S 12208 X(Disk)S 239 xG(and)S 240 x(File)S 239 x(Utilities)S 240 x(for)S 240 x(OpenVMS)S 239 x D(DFU)S 240 x(V2.4)S 28945 X(|)S 10773 X 448 y(|)S 12208 X(Freeware)SG240 x(version)S 28945 X(|)S 10773 X 449 y(|)S 12208 X(Copyright)S 240 x)J(\251)S 239 x(1996)S 239 x(Digital)S 240 x(Equipment)S 240 x(Corporation)SC28945 X(|)S 10773 X 448 y(|)S 28945 X(|)S 10773 X 448 y(|)S 12208 XpH(DFU)S 239 x(functions)S 240 x(are)S 240 x(:)S 28945 X(|)S 10773 X 449 yG(|)S 28945 X(|)S 10773 X 448 y(|)S 12208 X(DEFRAGMENT)S 240 x(:)S 239 xVJ(Defragment)S 240 x(files)S 28945 X(|)S 10773 X 448 y(|)S 12208 X(DELETE)SD14838 X(:)S 239 x(Delete)S 240 x(files)S 239 x(by)S 240 x(File-ID;)SF240 x(delete)S 239 x(directory)S 240 x(\(trees\))S 28945 X(|)S 10773 XN449 y(|)S 12208 X(DIRECTORY)S 479 x(:)S 239 x(Manipulate)S 240 x(directories)SK28945 X(|)S 10773 X 448 y(|)S 12208 X(REPORT)S 14838 X(:)S 239 x(Generate)S9J240 x(a)S 239 x(complete)S 240 x(disk)S 240 x(report)S 28945 X(|)S 10773 XF448 y(|)S 12208 X(SEARCH)S 14838 X(:)S 239 x(Fast)S 240 x(file)S 239 xG(search)S 28945 X(|)S 10773 X 449 y(|)S 12208 X(SET)S 14838 X(:)S 239 xSC(Modify)S 240 x(file)S 239 x(attributes)S 28945 X(|)S 10773 X 448 y1G(|)S 12208 X(UNDELETE)S 718 x(:)S 239 x(Recover)S 240 x(deleted)S 240 xlC(files)S 28945 X(|)S 10773 X 448 y(|)S 12208 X(VERIFY)S 14838 X(:)S1G239 x(Check)S 240 x(and)S 239 x(repair)S 240 x(disk)S 239 x(structure)S)C28945 X(|)S 10773 X 449 y(|)S 28945 X(|)S 10773 X 448 y(|)S 28945 X(X(|)S 10773 X 448 y(+-------------)S 2 x(-------------------)S 2 x(--Statistics--------)SC2 x(-------------------)S 2 x(----+)S 10773 X 449 y(|)S 28945 X(|)SdV10773 X 448 y(|)S 28945 X(|)S 10773 X 448 y(+-------------)S 2 x(-------------------)SH2 x(--------------------)S 2 x(-------------------)S 2 x(----+)S 11012 XF448 y(DFU>)S 10773 X 897 y F151(This)S 166 x(screen)S 167 x(is)S 165 xH(divided)S 167 x(into)S 166 x(3)S 166 x(sections:)S 10773 X 897 y(\201)SC595 x(Main)S 176 x(Screen)S 176 x(:)S 270 x(the)S 176 x(top)S 175 xxE(part)S 176 x(of)S 175 x(the)S 176 x(screen)S 177 x(is)S 175 x(used)SoG176 x(for)S 176 x(the)S 176 x(output)S 176 x(from)S 11670 X 598 y(DFU)S0G166 x(commands.)S 249 x(Also)S 165 x(broadcast)S 166 x(messages)S 165 xbD(are)S 166 x(send)S 166 x(to)S 166 x(this)S 166 x(window)S -46 x(.)SE10773 X 896 y(\201)S 595 x(Statist)S -2 x(ics)S 197 x(:)S 311 x(the)S6F197 x(lower)S 196 x(part)S 197 x(contains)S 197 x(statist)S -2 x(ics)SG197 x(from)S 197 x(the)S 197 x(current)S 11670 X 598 y(command.)S 275 x7D(During)S 180 x(most)S 178 x(of)S 178 x(the)S 179 x(commands)S 179 xE(this)S 178 x(screen)S 180 x(will)S 178 x(contain)S 179 x(a)S 11670 XxG598 y(progress)S 166 x(indicator)S 166 x(and)S 166 x(a)S 166 x(status)SSF166 x(for)S 166 x(the)S 166 x(current)S 167 x(command.)S 10773 X 896 yG(\201)S 595 x(DFU)S 166 x(prompt)S 165 x(:)S 250 x(thed~ DFU024.BCKn[[DFU024.DOC]DFU024.PS;2]|)S 166 x(bottom)SSI166 x(line)S 166 x(is)S 165 x(used)S 166 x(as)S 166 x(the)S 166 x(input)S1D167 x(command)S 166 x(line.)S 5094 22122 XY 23160 96 R 2404 22819 XYHF24(3.4)S 5094 X(Special)S 166 x(Screen)S 165 x(commands)S 10773 X 897 yFF151(In)S 166 x(SMG)S 166 x(mode)S 166 x(the)S 166 x(following)S 166 xC(keys)S 167 x(perform)S 166 x(special)S 166 x(functions)S 166 x(:)SxF10773 X 896 y(\201)S 595 x(DO)S 165 x(:)S 166 x(invok)S 2 x(es)S 165 xC(a)S 166 x(subprocess)S 166 x(\(same)S 165 x(as)S 166 x(the)S 166 x6G(SP)S -37 x(A)S -46 x(WN)S 166 x(command\))S 10773 X 897 y(\201)S 595 xH(HELP)S 166 x(or)S 166 x(PF2)S 167 x(:)S 249 x(invokes)S 167 x(a)S 166 xC(special)S 166 x(SMG)S 165 x(window)S 166 x(for)S 166 x(the)S 166 xxF(help)S 166 x(command.)S 10773 X 897 y(\201)S 595 x(CTRL/W)S 166 x(:)SE166 x(redraws)S 166 x(the)S 166 x(screen)S 10773 X 896 y(\201)S 595 x9F(PF4)S 166 x(:)S 250 x(creates)S 166 x(a)S 166 x(screen)S 166 x(dump)SF166 x(into)S 166 x(the)S 167 x(\211le)S 166 x(DFU_SCREE)S -2 x(N.TXT)SH10773 X 897 y(\201)S 595 x(PREV)S 165 x(SCREE)S -2 x(N)S 166 x(:)S 167 xJ(Scrolls)S 166 x(back)S 166 x(the)S 166 x(output)S 167 x(screen.)S 10773 XH897 y(\201)S 595 x(NEXT)S 165 x(SCREEN)S 165 x(:)S 166 x(Scrolls)S 166 xI(forward)S 166 x(the)S 166 x(output)S 166 x(screen)S 10773 X 896 y(\201)SG595 x(SELECT)S 165 x(:)S 167 x(T)S -46 x(oggles)S 167 x(between)S 166 x H(80)S 165 x(and)S 167 x(132)S 166 x(columns.)S 10773 31088 XY(Although)SD173 x(only)S 174 x(some)S 172 x(20)S 172 x(lines)S 172 x(are)S 173 xG(visible)S 172 x(in)S 172 x(the)S 173 x(output)S 173 x(\(main\))S 172 xMG(screen)S 173 x(DFU)S 10773 X 598 y(in)S 186 x(fact)S 186 x(remembers)S0D186 x(500)S 186 x(output)S 186 x(lines.)S 290 x(Y)S -56 x(ou)S 187 xF(can)S 186 x(scroll)S 186 x(back)S 187 x(and)S 186 x(forward)S 10773 XD598 y(through)S 185 x(these)S 183 x(lines)S 184 x(with)S 183 x(the)SH183 x(NEXT)S 183 x(and)S 184 x(PREV)S 182 x(SCREEN)S 182 x(keys.)S 285 xC(At)S 183 x(the)S 10773 X 597 y(beginnin)S 2 x(g)S 166 x(of)S 166 xSC(each)S 167 x(new)S 166 x(DFU)S 165 x(command)S 167 x(these)S 166 xSH(lines)S 165 x(are)S 167 x(cleared.)S 10773 X 897 y(On)S 178 x(a)S 179 xC(workstation)S 178 x(with)S 178 x(DecW)S -19 x(indows/Motif)S 178 x6F(you)S 179 x(can)S 179 x(change)S 180 x(the)S 178 x(DecT)S -45 x(erm)SD10773 X 598 y(size)S 190 x(to)S 190 x(be)S 190 x(more)S 190 x(than)SC191 x(the)S 190 x(standard)S 190 x(24)S 190 x(lines.)S 298 x(DFU')S7O-19 x(s)S 190 x(SMG)S 190 x(screen)S 190 x(will)S 10773 X 598 y(automatically)SsG166 x(adjust)S 166 x(to)S 166 x(the)S 166 x(screen)S 167 x(size)S 165 xSD(of)S 166 x(such)S 167 x(a)S 166 x(DecT)S -46 x(erm.)S 5094 36925 XY F36(3\2032)SEP PP) %%PageTrailer6#%%PageFonts: Helvetica-Bold Courier %%+ NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)c%S%%Page: (3-3) 17%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)S PaperHeight PaperWidth PM 0 0 XYI0 SC 20984 1807 XY F28(The)S 167 x(SMG)S 166 x(output)S 167 x(interface)S L5094 4596 XY 23160 96 R 2404 5294 XY F24(3.5)S 5094 X(Side)S 166 x(effects)SI10773 X 896 y F151(There)S 169 x(are)S 169 x(a)S 168 x(few)S 168 x(side)S D167 x(effects)S 168 x(when)S 169 x(using)S 169 x(SMG)S 167 x(mode.)SC254 x(CTRL/C)S 168 x(and)S 169 x(CTRL/Y)S 10773 X 598 y(are)S 187 x)E(catched)S 187 x(but)S 187 x(not)S 187 x(echoed.)S 292 x(Also)S 186 x E(all)S 187 x(broadcast)S 187 x(messages)S 186 x(are)S 187 x(trapped)SnC10773 X 598 y(and)S 177 x(will)S 176 x(be)S 177 x(displayed)S 176 x D(in)S 177 x(the)S 177 x(main)S 177 x(screen)S 177 x(at)S 176 x(the)SF177 x(end)S 177 x(of)S 177 x(the)S 177 x(current)S 177 x(DFU)S 10773 XL598 y(command.)S 273 x(Sometimes)S 177 x(this)S 177 x(may)S 178 x(slightly)SF178 x(disrupt)S 177 x(the)S 178 x(main)S 178 x(screen,)S 181 x(which)SH10773 X 597 y(can)S 167 x(be)S 166 x(repaired)S 166 x(with)S 166 x(the)SF166 x(CTRL/W)S 166 x(key)S -55 x(.)S 10773 X 897 y(Further)S -36 x(,)SG208 x(during)S 200 x(the)S 200 x(execution)S 200 x(of)S 199 x(a)S 199 x F(DFU)S 199 x(command)S 199 x(the)S 199 x(cursor)S 200 x(will)S 10773 XE598 y(disappear)S -37 x(.)S 280 x(After)S 181 x(the)S 182 x(command)S4K181 x(\211nishes)S 182 x(the)S 182 x(cursor)S 182 x(will)S 180 x(reappear)S'J182 x(at)S 181 x(the)S 10773 X 597 y(DFU>)S 166 x(prompt.)S 27427 36925 XY F36(3\2033)SEP PP4 %%PageTrailern2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)1%x%%Page: (4-1) 18%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)( PaperHeight PaperWidth PM 0 0 XYH0 SC 2404 5875 XY F12(4)S 5094 4546 XY 23160 48 R 5094 5443 XY F20(DFU)SD167 x(basics)S 877 x 8652 Y F151(Note)S 178 x(:)S 273 x(this)S 177 xE(chapter)S 178 x(is)S 178 x(meant)S 177 x(for)S 178 x(\211rst)S 178 xBD(time)S 177 x(users)S 178 x(of)S 178 x(DFU.)S 178 x(If)S 177 x(you)SE179 x(already)S 10773 X 598 y(used)S 166 x(DFU)S 166 x(before)S 166 x C(you)S 167 x(may)S 166 x(probably)S 167 x(skip)S 166 x(this)S 166 xrG(chapter)S -37 x(.)S 10773 X 896 y(This)S 177 x(chapter)S 177 x(gives)S E177 x(a)S 177 x(brief)S 176 x(overview)S 178 x(of)S 176 x(the)S 177 x E(commands)S 176 x(which)S 177 x(can)S 177 x(be)S 177 x(used)S 10773 X2D598 y(with)S 191 x(DFU,)S 192 x(and)S 192 x(how)S 192 x(they)S 192 xG(can)S 192 x(provide)S 193 x(the)S 191 x(system)S 192 x(manager)S 192 x J(with)S 191 x(the)S 10773 X 598 y(necessary)S 167 x(information.)S 10773 XH896 y(One)S 186 x(of)S 185 x(most)S 185 x(common)S 186 x(actions)S 186 xH(by)S 186 x(a)S 186 x(system)S 185 x(manager)S 186 x(is)S 186 x(trying)SD186 x(to)S 186 x(locate)S 10773 X 598 y(speci\211c)S 175 x(\211les)SH175 x(eg.)S 269 x(\211les)S 175 x(with)S 174 x(a)S 175 x(certain)S 176 xD(\211le)S 175 x(size.)S 267 x(Although)S 176 x(a)S 175 x(lot)S 175 xE(can)S 175 x(be)S 175 x(done)S 10773 X 598 y(with)S 188 x(the)S 189 xxF(VMS)S 188 x(DIREC)S -2 x(TOR)S -19 x(Y)S 188 x(command)S 189 x(this)SG188 x(can)S 189 x(be)S 189 x(a)S 188 x(time)S 188 x(consuming)S 10773 XiC598 y(process)S 173 x(,)S 176 x(especially)S 174 x(if)S 173 x(the)SEF174 x(complete)S 174 x(disk)S 173 x(much)S 175 x(be)S 173 x(scanned.)SE265 x(The)S 175 x(SEAR)S -2 x(CH)S 10773 X 597 y(command)S 188 x(of)S8F188 x(DFU)S 187 x(is)S 187 x(exactly)S 189 x(meant)S 187 x(for)S 188 xC(this)S 188 x(situation.)S 292 x(It)S 187 x(gives)S 189 x(a)S 187 x9H(very)S 10773 X 598 y(quick)S 171 x(list)S 170 x(of)S 171 x(speci\211c)SE170 x(\211les,)S 173 x(with)S 170 x(their)S 171 x(size,)S 171 x(and)SXE171 x(if)S 170 x(needed)S 171 x(the)S 171 x(number)S 171 x(of)S 170 x G(\211le)S 10773 X 598 y(fragments.)S 250 x(Some)S 166 x(usefull)S 166 x F(SEARC)S -2 x(H)S 166 x(commands)S 166 x(are)S 166 x(:)S 10773 X 897 yFF102(DFU>)S 240 x(SEARCH)S 239 x(disk/SIZE=MI)S 2 x(NIMUM=1000)S 240 xG(\(files)S 239 x(>)S 240 x(1000)S 239 x(blocks\))S 10773 X 448 y(DFU>)S E240 x(SEARCH)S 239 x(disk/IDENT=S)S 2 x(YSTEM)S 239 x(\(files)S 240 x H(owned)S 240 x(by)S 239 x(SYSTEM\))S 10773 X 448 y(DFU>)S 240 x(SEARCH)SD239 x(disk/FRAGMEN)S 2 x(T=MINIMUM=10)S 240 x(\(files)S 240 x(with)SE239 x(at)S 239 x(least)S 240 x(10)S 239 x(fragments\))S 10773 X 449 ySD(DFU>)S 240 x(SEARCH)S 239 x(disk/CHAR=MA)S 2 x(RKED)S 239 x(\(all)SG240 x(files)S 239 x(marked)S 240 x(for)S 239 x(delete\))S 10773 X 448 yH(DFU>)S 240 x(SEARCH)S 239 x(disk/CREATED)S 2 x(=SINCE=YESTERDAY)S 240 xH(\(all)S 240 x(files)S 239 x(created)S 240 x(since)S 240 x(YESTERDAY\))SI10773 X 896 y F151(Of)S 187 x(course)S 188 x(these)S 187 x(quali\211ers)S G188 x(can)S 188 x(be)S 188 x(combined)S 187 x(to)S 188 x(narrow)S 187 xoD(the)S 188 x(search.)S 293 x(As)S 10773 X 598 y(the)S 177 x(SEARCH)SC175 x(command)S 177 x(scans)S 177 x(INDEXF)S -56 x(.SYS)S 176 x(,)SDC178 x(not)S 177 x(directories,)S 180 x(the)S 177 x(output)S 10773 XtE598 y(generated)S 174 x(by)S 174 x(SEARC)S -2 x(H)S 174 x(may)S 173 x9E(look)S 174 x(a)S 173 x(bit)S 173 x(random)S 174 x(\(but)S 173 x(it)SD173 x(is)S 173 x(just)S 174 x(the)S 173 x(order)S 174 x(in)S 10773 XD598 y(which)S 169 x(the)S 169 x(\211le)S 170 x(headers)S 169 x(are)SL169 x(in)S 169 x(the)S 169 x(INDEX)S -2 x(F)S -55 x(.SYS)S 169 x(\211le\).)SE255 x(T)S -45 x(o)S 169 x(smooth)S 168 x(the)S 169 x(output)S 10773 XYC597 y(use)S 166 x(the)S 166 x(/SORT)S 166 x(quali\211er)S -36 x(.)S8D10773 X 897 y(Another)S 172 x(important)S 171 x(action)S 172 x(for)SD172 x(a)S 171 x(system)S 171 x(manager)S 173 x(is)S 171 x(to)S 171 xO(gather)S 172 x(some)S 172 x(overall)S 10773 X 598 y(disk)S 189 x(information)SaK190 x(,)S 196 x(such)S 190 x(as)S 189 x(number)S 190 x(of)S 190 x(\211les)S E189 x(,)S 196 x(free)S 190 x(space)S 189 x(statisti)S -2 x(cs)S 190 x E(and)S 10773 X 598 y(fragmentation)S 173 x(information.)S 264 x(The)SiI173 x(REPORT)S 172 x(command)S 173 x(will)S 172 x(generate)S 174 x(such)S H173 x(a)S 10773 X 597 y(disk)S 175 x(report.)S 267 x(T)S -46 x(o)S 175 xH(get)S 175 x(individual)S 176 x(disk)S 174 x(space)S 175 x(usage)S 175 xE(information)S 175 x(the)S 175 x(/USAGE)S 10773 X 598 y(quali\211er)S6D162 x(can)S 162 x(be)S 161 x(used.)S 249 x(This)S 162 x(will)S 160 xC(work)S 162 x(even)S 162 x(if)S 161 x(there)S 162 x(is)S 160 x(no)SSC162 x(disk)S 161 x(quota)S 161 x(enabled)S 10773 X 598 y(on)S 167 x I(the)S 166 x(disk.)S 10773 X 897 y(At)S 182 x(regular)S 183 x(intervals)SaG182 x(a)S 182 x(system)S 182 x(manager)S 183 x(may)S 182 x(need)S 183 x E(to)S 181 x(check)S 184 x(a)S 182 x(disk)S 182 x(with)S 10773 X 597 y8F(ANAL)S -46 x(YZE/DISK.)S 174 x(The)S 175 x(DFU)S 175 x(VERIFY)S 173 xF(command)S 175 x(provides)S 175 x(more)S 175 x(or)S 175 x(less)S 174 xC(the)S 10773 X 598 y(same)S 182 x(functionality)S 184 x(but)S 183 xMG(many)S 183 x(times)S 182 x(faster)S -37 x(.)S 283 x(The)S 184 x(/FIX)S0E183 x(quali\211er)S 183 x(provides)S 10773 X 598 y(some)S 177 x(REP)SG-37 x(AIR)S 177 x(options)S 177 x(which)S 178 x(\(unlike)S 179 x(ANAL)S9G-47 x(YZE/DISK/REP)S -38 x(AIR\))S 177 x(do)S 178 x(NOT)S 10773 X 598 y(E(lock)S 193 x(the)S 193 x(disk,)S 200 x(and)S 193 x(thus)S 193 x(do)S)E193 x(not)S 193 x(interfere)S 193 x(with)S 192 x(other)S 193 x(disk)S)G193 x(operations.)S 10773 X 597 y(However)S -36 x(,)S 191 x(the)S 187 x1G(disk)S 186 x(can)S 186 x(be)S 187 x(rebuild)S 186 x(completely)S 186 xiL(by)S 187 x(using)S 187 x(the)S 186 x(/REBUILD)S 10773 X 598 y(quali\211er)SI-36 x(.)S 10773 X 897 y(Occasionaly)S 170 x(a)S 170 x(user)S 170 x(will)S1H170 x(delete)S 169 x(the)S 170 x(wrong)S 171 x(\211le,)S 172 x(leaving)SC171 x(the)S 170 x(system)S 169 x(manager)S 10773 X 598 y(or)S 175 x G(operator)S 176 x(with)S 174 x(the)S 176 x(tedious)S 174 x(task)S 175 x6E(of)S 175 x(restoring)S 176 x(the)S 175 x(\211le)S 175 x(from)S 175 xhE(a)S 175 x(backup)S 176 x(set.)S 10773 X 597 y(The)S 180 x(UNDELETE)SPD179 x(command)S 180 x(may)S 180 x(be)S 179 x(able)S 180 x(to)S 179 xG(recover)S 181 x(the)S 180 x(\211le)S 180 x(if)S 179 x(it)S 179 x(has)S%F180 x(not)S 10773 X 598 y(yet)S 171 x(been)S 172 x(overwritten)S 171 xD(with)S 171 x(a)S 171 x(new)S 171 x(one.)S 260 x(Much)S 172 x(care)SF172 x(has)S 171 x(been)S 171 x(taken)S 172 x(to)S 171 x(make)S 10773 XE598 y(this)S 167 x(command)S 167 x(as)S 167 x(safe)S 166 x(as)S 167 xJ(possible;)S 167 x(therefore)S 168 x(no)S 168 x(disk)S 166 x(corruptions)SE168 x(will)S 167 x(be)S 167 x(the)S 10773 X 598 y(result)S 169 x(of)S5F168 x(an)S 169 x(UNDELETE.)S 168 x(If)S 168 x(DFU)S 168 x(encoun)S 2 xH(ters)S 168 x(a)S 168 x(problem)S 169 x(with)S 168 x(a)S 168 x(deleted)SC168 x(\211le)S 10773 X 597 y(it)S 166 x(will)S 165 x(refuse)S 166 x7>(to)S 166 x(UNDELETE)S 165 x(it.)S 27427 36925 XY F36(4\2031)SEP PP %%PageTrailer 2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courier(%%PageProcessColors:%%PageCustomColors: (BLACK)X%9%%Page: (4-2) 19%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)h PaperHeight PaperWidth PM 0 0 XYG0 SC 5094 1807 XY F28(DFU)S 166 x(basics)S 10773 4866 XY F151(Another)SSF175 x(type)S 174 x(of)S 174 x(typical)S 174 x(system)S 174 x(manager)SH175 x(problems)S 173 x(deals)S 174 x(with)S 174 x(directories.)S 10773 XF598 y(The)S 165 x(DFU)S 163 x(command)S 164 x(DIRECTO)S -2 x(R)S -18 xD(Y)S 163 x(can)S 165 x(handle)S 164 x(such)S 164 x(problems.)S 250 xH(DIRE)S -2 x(CTOR)S -19 x(Y)S 10773 X 598 y(can)S 193 x(generate)S 193 xK(reports)S 192 x(about)S 193 x(empty)S 192 x(directories)S 192 x(\(/EMPTY)S)J193 x(quali\211er\))S 193 x(or)S 10773 X 597 y(directories)S 198 x(which)SG199 x(contains)S 199 x(\211les)S 198 x(with)S 198 x(a)S 199 x(certain)S E199 x(number)S 199 x(of)S 198 x(versions)S 10773 X 598 y(\(/VERSION)SrK-2 x(=n)S 198 x(quali\211er\).)S 314 x(Also)S 197 x(,)S 205 x(directories)S H198 x(may)S 198 x(become)S 198 x(internally)S 10773 X 598 y(fragmented)SF188 x(which)S 188 x(degrades)S 188 x(performance.)S 293 x(This)S 187 xC(can)S 188 x(be)S 188 x(quickly)S 189 x(solved)S 10773 X 598 y(by)StJ167 x(using)S 166 x(DFU')S -19 x(s)S 166 x(directory)S 167 x(compressing)SD166 x(\(the)S 166 x(/COMPRESS)S 165 x(quali\211er\).)S 10773 X 896 yD(A)S 201 x(second)S 201 x(problem)S 202 x(with)S 201 x(directories)SH201 x(is)S 201 x(in)S 201 x(deleting)S 202 x(a)S 201 x(directory)S 202 xF(with)S 10773 X 598 y(many)S 188 x(\211les.)S 291 x(On)S 187 x(large)SI188 x(directories)S 187 x(this)S 187 x(may)S 187 x(take)S 187 x(several)ShH188 x(hours)S 188 x(using)S 187 x(a)S 10773 X 598 y(DCL)S 187 x(DELETE)SD187 x(*.*)S 189 x(command.)S 293 x(This)S 188 x(problem)S 188 x(is)SF188 x(solved)S 187 x(by)S 189 x(using)S 188 x(DFU')S -19 x(s)S 10773 XG597 y(DELETE/DIRE)S -2 x(CTOR)S -19 x(Y)S 172 x(command)S 172 x(which)S I172 x(can)S 173 x(delete)S 172 x(large)S 173 x(directories)S 172 x(some)SoH10773 X 598 y(10)S 183 x(times)S 182 x(faster)S 182 x(than)S 183 x(the)SI183 x(normal)S 183 x(DELETE)S 182 x(command)S 183 x(does.)S 283 x(Also,)S I186 x(using)S 10773 X 598 y(DELETE/DIR/TREE)S 178 x(will)S 179 x(delete)S7F180 x(a)S 180 x(complete)S 179 x(directory)S 181 x(tree)S 180 x(with)SE179 x(just)S 180 x(one)S 10773 X 598 y(command.)S 10773 X 896 y(The)SeG180 x(last)S 179 x(2)S 179 x(commands)S 179 x(deal)S 179 x(with)S 179 x J(individual)S 180 x(\211les.)S 276 x(SET)S 179 x(allows)S 178 x(settings)SD179 x(of)S 10773 X 598 y(some)S 184 x(special)S 183 x(\211le)S 184 xH(attributes.)S 285 x(Since)S 184 x(VMS)S 184 x(V6.0)S 183 x(this)S 184 xG(functionality)S 185 x(is)S 183 x(also)S 10773 X 598 y(provided)S 176 x2I(by)S 176 x(the)S 175 x(DCL)S 175 x(SET)S 175 x(FILE/A)S -27 x(TTRIBUTE)S G175 x(command,)S 178 x(but)S 176 x(DFU')S -19 x(s)S 175 x(SET)S 10773 X E598 y(offers)S 175 x(some)S 175 x(more)S 175 x(options.)S 268 x(The)ShN176 x(DEFRA)S -2 x(G)S 175 x(command)S 175 x(is)S 175 x(an)S 176 x(interface)SF175 x(to)S 175 x(the)S 10773 X 597 y(MOVEFILE)S 167 x(function)S 169 xH(offered)S 168 x(by)S 169 x(VMS)S 168 x(5.5)S 168 x(and)S 169 x(higher)SF-36 x(.)S 254 x(This)S 168 x(allows)S 167 x(a)S 168 x(simple)S 10773 XF598 y(defragmentation)S 167 x(of)S 166 x(individual)S 166 x(\211les.)SE10773 X 897 y(The)S 183 x(next)S 183 x(chapters)S 182 x(gives)S 183 x7G(a)S 183 x(detailed)S 181 x(description)S 183 x(of)S 182 x(each)S 183 x D(individual)S 183 x(DFU)S 10773 X 598 y(command.)S 5094 36925 XY F36 (4\2032)S\EP PP7 %%PageTrailerU2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)r%2%%Page: (5-1) 20%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)2 PaperHeight PaperWidth PM 0 0 XYD0 SC 21740 1807 XY F24(DEFRAG)S 278 x(command)S 2404 5875 XY F12(5)SD5094 4546 XY 23160 48 R 5094 5443 XY F20(DEFRAG)S 10773 8652 XY F151D(This)S 206 x(chapter)S 206 x(describes)S 204 x(the)S 206 x(DEFRAG)SF204 x(command)S 205 x(with)S 205 x(the)S 206 x(related)S 10773 X 598 yH(parameters)S 166 x(and)S 166 x(quali\211ers.)S 5094 10196 XY 23160 96 RE2404 10893 XY F24(5.1)S 5094 X(Description)S 10773 X 897 y F151(The)S H168 x(DEFRAG)S 166 x(command)S 168 x(can)S 168 x(be)S 167 x(used)S 168 xF(to)S 167 x(defragment)S 168 x(a)S 167 x(single)S 168 x(\211le)S 168 xG(or)S 168 x(a)S 167 x(group)S 10773 X 598 y(of)S 177 x(\211les.)S 271 x6G(Y)S -56 x(ou)S 178 x(can)S 177 x(also)S 176 x(enter)S 177 x(an)S 177 xDC(indirect)S 178 x(command)S 177 x(\211le)S 177 x(containing)S 178 x H(a)S 177 x(list)S 176 x(of)S 10773 X 598 y(\211les.)S 266 x(This)S 175 xE(feature)S 175 x(allows)S 173 x(you)S 175 x(to)S 175 x(create)S 174 x E(an)S 175 x(output)S 175 x(\211le)S 174 x(with)S 174 x(SEARCH)S 173 xxC(and)S 10773 X 597 y(use)S 166 x(that)S 166 x(as)S 166 x(an)S 166 xoH(input)S 166 x(to)S 166 x(DEFRAG.)S 10773 X 897 y(DEFRAG)S 170 x(makes)SL171 x(use)S 171 x(of)S 171 x(the)S 171 x(\211le-primitive)S 172 x(MOVEFILE)SI170 x(function.)S 261 x(Therefore)S 10773 X 598 y(\211les)S 201 x(which)SmD202 x(are)S 201 x(open,)S 211 x(or)S 201 x(which)S 202 x(are)S 201 xD(marked)S 202 x(NOMOVE)S 199 x(will)S 201 x(not)S 201 x(be)S 10773 XF597 y(DEFRAG)S -2 x(mented.)S 289 x(Still)S 185 x(you)S 186 x(should)SE186 x(be)S 185 x(cautious)S 186 x(about)S 185 x(using)S 187 x(DEFRA)SSG-2 x(G.)S 10773 X 598 y(Y)S -56 x(ou)S 167 x(should)S 166 x(not)S 166 x C(make)S 167 x(this)S 165 x(function)S 167 x(available)S 167 x(for)SvE166 x(general)S 167 x(usage.)S 5094 18199 XY 23160 96 R 2404 18897 XYxHF24(5.2)S 5094 X(Error)S 168 x(messa)S -2 x(ges)S 435 x 896 y F151(The)SF167 x(most)S 165 x(common)S 167 x(errors)S 166 x(returned)S 167 x(by)SF166 x(DEFRAG)S 165 x(are)S 166 x(:)S 10773 X 897 y(\201)S 595 x(ACCO)SG-2 x(NFLICT)S -27 x(:)S 166 x(File)S 167 x(is)S 165 x(open)S 167 x(by)S/C166 x(another)S 167 x(user)S 10773 X 897 y(\201)S 595 x(DEVI)S -2 xxF(CEFULL:)S 174 x(Device)S 173 x(has)S 173 x(not)S 173 x(enough)S 174 xG(contiguo)S 2 x(us)S 172 x(free)S 173 x(space)S 173 x(to)S 173 x(move)S)F11670 X 597 y(the)S 166 x(entire)S 166 x(\211le)S 10773 X 897 y(\201)SG595 x(FILNOT)S -28 x(ACC:)S 166 x(File)S 166 x(has)S 166 x(been)S 166 xpD(set)S 166 x(to)S 166 x(NOMOVE)S -2 x(.)S 10773 X 897 y(\201)S 595 xI(FILENUMCHK:)S 165 x(Y)S -55 x(ou)S 166 x(tried)S 166 x(to)S 166 x(move)S)E167 x(a)S 166 x(reserved)S 166 x(\211le)S 167 x(\(eg)S 166 x(INDEXF)S(F-56 x(.SYS\).)S 10773 X 896 y(\201)S 595 x(RMS)S 192 x(Errors:)S 304 xC(Almost)S 192 x(always)S 193 x(caused)S 193 x(by)S 193 x(an)S 194 x(P(invalid)S 193 x(or)S 194 x(wrong)S 193 x(\211le)S 11670 X 598 y(specifcation.)SF5094 27498 XY 23160 48 R 5094 28494 XY F20(DEFRAG)S 10773 29988 XY F34H(Defragment)S 166 x(a)S 166 x(\211le)S 166 x(or)S 166 x(a)S 166 x(list)SM166 x(of)S 166 x(\211les)S 166 x(on)S 166 x(the)S 166 x(disk.)S 5094 31184 XYyF23160 204 R 5094 32202 XY F24(FORMA)S -53 x(T)S 10773 X(DEFRAG)S 696 xCF23(\211le1,\211)S -2 x(le2,@\211le..)S -2 x(.)S 27427 36925 XY F36r (5\2031)S(EP PP7 %%PageTrailer52%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%+ Helvetica Helvetica-Oblique)%%PageProcessColors:%%PageCustomColors: (BLACK)l% %%Page: (5-2) 21%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)o PaperHeight PaperWidth PM 0 0 XYH0 SC 5094 1807 XY F24(DEFRAG)S 278 x(command)S 5094 X 797 y F28(DEFRAG)SG5094 4696 XY 23160 204 R 5094 5515 XY F24(P)S -51 x(ARA)S -2 x(METERS)S)G849 x F25(\211le1,\211le2,@\211le)S -2 x(...)S 10773 X 547 y F151(The)SeE171 x(\211le\(s\))S 170 x(to)S 170 x(be)S 170 x(defragmented.)S 258 xiE(Y)S -55 x(ou)S 170 x(can)S 171 x(also)S 169 x(use)S 171 x(an)S 170 x9F(indirect)S 170 x(command)S 171 x(\211le)S 10773 X 548 y(\(@\211le\))SF176 x(which)S 177 x(contains)S 176 x(a)S 176 x(list)S 175 x(of)S 176 xC(\211les)S 176 x(to)S 175 x(be)S 176 x(defragmented.)S 270 x(This)SiG176 x(may)S 177 x(be)S 176 x(an)S 10773 X 548 y(output)S 166 x(\211le)S5F167 x(generated)S 167 x(with)S 165 x(the)S 166 x(SEARCH/OUTPUT)S 166 xJ(command.)S 5094 8354 XY 23160 204 R 5094 9173 XY F24(QUALIFIERS)S 10773 XDF25(/BESTTR)S -13 x(Y)S 10773 X 547 y F151(Normally)S 168 x(DEFRAG)SE166 x(tries)S 168 x(to)S 168 x(create)S 168 x(a)S 167 x(contigu)S 2 x F(ous)S 167 x(\211le.)S 254 x(If)S 167 x(there)S 169 x(is)S 167 x(not)SD168 x(enoug)S 2 x(h)S 10773 X 548 y(contiguou)S 2 x(s)S 166 x(free)SF168 x(space)S 167 x(the)S 167 x(operation)S 167 x(will)S 167 x(fail.)SO251 x(W)S -19 x(ith)S 167 x(the)S 168 x(/BESTTR)S -19 x(Y)S 167 x(quali\211er)S8H10773 X 548 y(DEFRAG)S 168 x(tries)S 170 x(to)S 169 x(move)S 171 x(the)SJ170 x(\211le)S 170 x(with)S 169 x(the)S 170 x(contiguo)S 2 x(us-best-try)SL169 x(method.)S 257 x(This)S 10773 X 548 y(means)S 184 x(a)S 184 x(maximum)SK185 x(of)S 184 x(3)S 184 x(fragments.)S 286 x(Y)S -56 x(ou)S 185 x(should)S G184 x(only)S 185 x(use)S 184 x(this)S 184 x(quali\211er)S 10773 X 548 y D(when)S 174 x(a)S 174 x(normal)S 174 x(DEFRAG)S 172 x(fails.)S 264 xD(If)S 174 x(a)S 173 x(DEFRAG/BE)S -2 x(STTR)S -18 x(Y)S 173 x(also)SK174 x(fails)S 173 x(this)S 173 x(is)S 10773 X 548 y(an)S 169 x(indication)SSG169 x(that)S 169 x(the)S 169 x(disks)S 169 x(free)S 169 x(space)S 168 xJ(is)S 169 x(too)S 168 x(fragmented.)S 256 x(Run)S 169 x(a)S 169 x(REPORT)SG10773 X 548 y(command)S 174 x(to)S 173 x(see)S 173 x(what)S 173 x(the)S C174 x(largest)S 173 x(contiguous)S 174 x(free)S 174 x(space)S 173 xSG(is,)S 175 x(and)S 174 x(check)S 174 x(the)S 10773 X 548 y(free)S 166 xsJ(space)S 166 x(fragmentation)S 167 x(index.)S 10773 14652 XY F25(/DEVICE)SF10773 X 598 y F151(The)S 172 x(device)S 171 x(on)S 171 x(which)S 171 xG(the)S 171 x(\211les)S 171 x(reside.)S 259 x(The)S 171 x(device)S 171 xoF(name)S 171 x(is)S 171 x(added)S 170 x(to)S 171 x(the)S 171 x(\211le)SC10773 X 548 y(name.)S 276 x(If)S 178 x(you)S 180 x(generate)S 180 x(E(a)S 179 x(\211le)S 179 x(list)S 179 x(with)S 178 x(the)S 179 x(DFU)S(G179 x(SEARC)S -2 x(H)S 179 x(command)S 179 x(you)S 10773 X 548 y(don')S(G-9 x(t)S 178 x(need)S 179 x(this)S 178 x(quali\211er)S 179 x(anymore.)S7D275 x(However)S 179 x(you)S 179 x(may)S 179 x(have)S 179 x(a)S 178 xH(list)S 178 x(of)S 178 x(\211les)S 10773 X 548 y(produced)S 174 x(from)SD172 x(another)S 174 x(source)S 173 x(and)S 174 x(thus)S 173 x(need)SE173 x(to)S 173 x(append)S 173 x(a)S 173 x(device)S 173 x(name)S 173 x(D(to)S 10773 X 547 y(it.)S 249 x(Example:)S 11251 X 897 y F102(DFU>)SI240 x(SEARCH)S 240 x(mydisk/...../frag=m)S 2 x(in=50/output=x.x)S 11251 X P448 y(DFU>)S 240 x(DEFRAG)S 240 x(@x.x)S 10773 19882 XY F25(/LBN=logical-block)SC-2 x(-number)S 10773 X 598 y F151(Forces)S 174 x(a)S 173 x(single)SxC173 x(\211le)S 174 x(to)S 173 x(be)S 173 x(moved)S 174 x(to)S 173 x1G(the)S 173 x(speci\211ed)S 173 x(logical)S 174 x(block)S 173 x(number)S7G-36 x(.)S 264 x(Do)S 10773 X 548 y(not)S 166 x(use)S 166 x(this)S 166 xBE(quali\211er)S 167 x(when)S 166 x(processing)S 167 x(a)S 166 x(list)S D165 x(of)S 166 x(\211les.)S 10773 22124 XY F25(/ST)S -51 x(A)S -52 xI(TISTICS)S 10773 X 598 y F151(This)S 184 x(quali\211er)S 185 x(displays)S6G183 x(the)S 184 x(performance)S 184 x(statistics)S -2 x(:)S 285 x(CPU)ScH184 x(time,)S 188 x(Elapsed)S 10773 X 548 y(T)S -12 x(ime,)S 166 x(I/O)SG166 x(and)S 166 x(PageFau)S 2 x(lts.)S 10773 24366 XY F25(/WRITECHECK)SeD10773 X 597 y F151(Perform)S 225 x(a)S 224 x(writecheck)S 224 x(on)SI225 x(the)S 224 x(resultant)S 224 x(\211le.)S 366 x(The)S 225 x(default)S)D224 x(is)S 10773 X 548 y(/NOWRITECHE)S -2 x(CK.)S 194 x(Note)S 194 xF(that)S 194 x(a)S 194 x(writecheck)S 194 x(doubles)S 194 x(the)S 195 xG(number)S 194 x(of)S 10773 X 548 y(involved)S 167 x(disk)S 166 x(I/O')Sl%-19 x(s.)S 5094 36925 XY F36(5\2032)SCEP PP %%PageTrailero1%%PageFonts: Helvetica-Bold Helvetica-BoldObliquet"%%+ NewCenturySchlbk-Roman Courier%%PageProcessColors:%%PageCustomColors: (BLACK)h% %%Page: (5-3) 22%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYC0 SC 25734 1807 XY F28(DEFRA)S -2 x(G)S -830 x 36925 Y F36(5\2033)S0EP PPR %%PageTrailerm%%PageFonts: Helvetica-BoldS%%PageProcessColors:%%PageCustomColors: (BLACK)(%)%%Page: (6-1) 23%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)3 PaperHeight PaperWidth PM 0 0 XYD0 SC 21934 1807 XY F24(DELETE)S 279 x(command)S 2404 5875 XY F12(6)SD5094 4546 XY 23160 48 R 5094 5443 XY F20(DELETE)S 10773 8652 XY F151D(This)S 157 x(chapter)S 158 x(describes)S 157 x(the)S 157 x(DELETE)SK156 x(command)S 158 x(with)S 157 x(the)S 157 x(related)S 157 x(parameters)SrP10773 X 598 y(and)S 166 x(quali\211ers.)S 5094 10196 XY 23160 96 R 2404 10893 XYGF24(6.1)S 5094 X(Introduction)S 10773 X 897 y F151(The)S 167 x(DELETE)SaG165 x(command)S 166 x(is)S 166 x(designed)S 166 x(for)S 166 x(2)S 166 xSF(purposes:)S 10773 X 897 y(1)S 620 x(Delete)S 179 x(a)S 179 x(\211le)SE180 x(by)S 179 x(\211le)S 180 x(id)S 179 x(\(with)S 179 x(the)S 180 x6J(/FILE)S 179 x(quali\211er\).)S 277 x(This)S 180 x(functionality)S 11670 XG597 y(is)S 185 x(needed)S 186 x(to)S 186 x(be)S 186 x(able)S 185 x(to)S6F186 x(delete)S 185 x(\211les)S 186 x(which)S 186 x(no)S 186 x(longer)SE187 x(have)S 187 x(a)S 186 x(parent)S 11670 X 598 y(directory)S -55 xOH(.)S 261 x(This)S 171 x(way)S 172 x('lost')S 170 x(\211les)S 171 x(and)SF172 x(\(sometimes\))S 170 x(\211les)S 172 x(marked)S 172 x(for)S 171 xE(delete)S 11670 X 598 y(can)S 166 x(be)S 166 x(removed)S 167 x(from)S F166 x(a)S 166 x(disk.)S 10773 X 897 y(2)S 620 x(A)S 174 x(fast)S 174 xD(method)S 175 x(to)S 175 x(delete)S 174 x(a)S 175 x(complete)S 175 xF(directory)S 175 x(or)S 175 x(even)S 176 x(a)S 175 x(directory)S 175 xF(tree)S 11670 X 597 y(\(with)S 186 x(the)S 186 x(/DIRECTOR)S -20 x(Y)SD186 x(and)S 186 x(/TREE)S 186 x(quali\211er\).)S 291 x(First)S 186 xE(all)S 186 x(entries)S 187 x(of)S 11670 X 598 y(a)S 182 x(directory)S2H183 x(are)S 183 x(deleted)S 182 x(without)S 182 x(removing)S 183 x(the)SD183 x(directory)S 183 x(entry)S 183 x(;)S 191 x(this)S 11670 X 598 yD(saves)S 169 x(a)S 169 x(lot)S 169 x(of)S 169 x(unne)S 2 x(cessary)SD169 x(directory)S 170 x(updates.)S 256 x(Finally)S 170 x(the)S 169 xC(directory)S 170 x(\211le)S 11670 X 598 y(itself)S 174 x(is)S 174 xIF(deleted,)S 177 x(unless)S 175 x(the)S 175 x(new)S 175 x(/KEEP)S 175 xF(quali\211er)S 175 x(is)S 174 x(used.)S 268 x(This)S 175 x(way)S 174 xD(a)S 11670 X 597 y(directory)S 166 x(is)S 165 x(cleaned)S 166 x(up)SC165 x(many)S 166 x(times)S 165 x(faster)S 164 x(than)S 166 x(with)SK165 x(the)S 166 x(DCL)S 165 x(DELETE)S 11670 X 598 y(*.*)S 167 x(command.)SsD251 x(On)S 167 x(large)S 167 x(directories)S 166 x(DFU)S 167 x(may)SH167 x(be)S 167 x(even)S 167 x(10)S 167 x(or)S 167 x(more)S 167 x(times)SD11670 X 598 y(faster)S 177 x(than)S 178 x(DCL.)S 177 x(T)S -45 x(o)SH178 x(delete)S 177 x(a)S 178 x(complete)S 177 x(directory)S 178 x(tree)SG178 x(use)S 178 x(the)S 178 x(/TREE)S 11670 X 598 y(quali\211er)S -36 x3U(.)S 268 x(The)S 176 x(DCL)S 174 x(command)S 176 x(DELETE)S 174 x([.SUBDIR...]*.*;*)S2E176 x(will)S 175 x(almost)S 11670 X 597 y(always)S 179 x(fail)S 180 x)J(to)S 180 x(delete)S 179 x(the)S 181 x(intermediate)S 179 x(subdirectory)SD181 x(\211les)S 180 x(forcing)S 181 x(you)S 11670 X 598 y(to)S 170 xD(issue)S 170 x(this)S 170 x(command)S 170 x(several)S 171 x(times.)SI257 x(The)S 171 x(DFU)S 170 x(DELETE)S 170 x(command)S 170 x(is)S 11670 XhC598 y(smart)S 155 x(enoug)S 2 x(h)S 156 x(to)S 156 x(delete)S 156 x C(the)S 157 x(\211les)S 156 x(and)S 157 x(the)S 156 x(subdirectory)SRC157 x(\211les)S 156 x(in)S 157 x(the)S 156 x(proper)S 11670 X 598 y7D(order;)S 183 x(therefore)S 178 x(only)S 178 x(one)S 178 x(command)SC177 x(is)S 177 x(suf\211cient)S 178 x(to)S 177 x(delete)S 177 x(a)S9F177 x(complete)S 11670 X 597 y(directory)S 167 x(tree.)S 11670 X 897 yC(The)S 181 x(new)S 180 x(/KEEP)S 181 x(quali\211er)S 181 x(allows)S1E179 x(you)S 182 x(to)S 180 x(preserve)S 181 x(the)S 181 x(directory)SfD182 x(tree.)S 11670 X 598 y(The)S 166 x(contents)S 167 x(are)S 166 xH(deleted)S 166 x(but)S 166 x(the)S 166 x(directory)S 167 x(\211le\(s\))SF166 x(remains)S 166 x(intact.)S 5094 26668 XY 23160 48 R 5094 27664 XYDF20(DELETE)S 10773 29158 XY F34(Deletes)S 166 x(\211les)S 165 x(or)SH166 x(directories.)S 5094 30354 XY 23160 204 R 5094 31372 XY F24(FORMA)SD-53 x(T)S 10773 X -21 y(DELETE)S 698 x F23(devic)S -2 x(e[:])S 249 xE(or)S 166 x(directory-\211)S -2 x(le\(s\))S 5094 32547 XY 23160 204 RoH5094 33365 XY F24(P)S -51 x(ARA)S -2 x(METERS)S 849 x -21 y F25(device)SF10773 X 548 y F151(The)S 167 x(device)S 166 x(on)S 167 x(which)S 166 xE(to)S 166 x(perform)S 166 x(the)S 167 x(DELETE/FILE=\211le-id)S 165 xi&(command.)S 579 x 36925 Y F36(6\2031)SEP PP( %%PageTrailerw2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman5%%+ Helvetica Helvetica-Oblique Helvetica-BoldOblique4%%PageProcessColors:%%PageCustomColors: (BLACK)f%m%%Page: (6-2) 24%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)e PaperHeight PaperWidth PM 0 0 XYH0 SC 5094 1807 XY F24(DELETE)S 280 x(command)S 5094 X 797 y F28(DELETE)SH10773 5000 XY F25(directory-\211le\(s\))S 10773 X 598 y F151(The)S 216 xG(\211lespeci\211cation)S 215 x(of)S 215 x(the)S 215 x(directory)S 215 xxH(on)S 215 x(which)S 215 x(to)S 215 x(perform)S 215 x(the)S 10773 X 548 yE(DELETE/DIRE)S -2 x(CTOR)S -19 x(Y)S 185 x(command.)S 289 x(W)S -19 x(D(ildcard)S 186 x(\211le)S 186 x(speci\211cations)S 185 x(may)S 186 xJ(be)S 10773 X 548 y(used.)S 256 x(DFU)S 168 x(will)S 169 x(automatically)SM169 x(add)S 169 x(.DIR)S 168 x(to)S 169 x(the)S 169 x(\211lespeci\211cation)SnF170 x(if)S 168 x(a)S 169 x(\211letype)S 10773 X 548 y(is)S 166 x(not)SH166 x(provided.)S 5094 8437 XY 23160 204 R 5094 9256 XY F24(QUALIFIERS)SG10773 X F25(/DIRECT)S -14 x(OR)S -13 x(Y)S 10773 X 548 y F151(Specify)S1G175 x(the)S 175 x(directory)S 175 x(\211le)S 175 x(which)S 175 x(must)S H175 x(be)S 174 x(deleted.)S 267 x(W)S -19 x(ildcards)S 174 x(may)S 175 xD(be)S 175 x(used)S 10773 X 548 y(but)S 179 x(must)S 178 x(be)S 179 xC(used)S 178 x(very)S 180 x(carefully)S -54 x(.)S 274 x(Make)S 180 x)E(sure)S 178 x(that)S 179 x(the)S 179 x(directory)S 179 x(does)S 178 x7H(not)S 10773 X 548 y(contain)S 194 x(non-empty)S 194 x(subdirectories.)SH303 x(Files)S 193 x(within)S 193 x(such)S 194 x(a)S 193 x(subdirectory)SD10773 X 548 y(will)S 179 x(become)S 179 x(lost)S 179 x(after)S 179 xF(the)S 180 x(DELETE/DI)S -2 x(RECTOR)S -20 x(Y)S 179 x(command)S 180 xF(\(but)S 179 x(can)S 180 x(be)S 10773 X 548 y(recovered)S 186 x(with)SE184 x(ANAL)S -46 x(YZE/DISK/RE)S -2 x(P)S -36 x(AIR\).)S 184 x(Note)SDG184 x(that)S 184 x(the)S 185 x(directory)S 185 x(\211le)S 10773 X 548 yrE(itself)S 165 x(will)S 166 x(also)S 165 x(be)S 166 x(deleted.)S 250 xSF(Example:)S 10773 X 896 y F102($)S 239 x(DIR)S 240 x(EXAMPLE)S 10773 XO747 y(Directory)S 240 x(MYDISK:[RUBBIS)S 2 x(H])S 10773 X 748 y(EXAMPLE.DIR;1)S7K10773 X 747 y($)S 239 x(DFU)S 10773 X 448 y(DFU>)S 240 x(DELETE/DIRECTORY)S K240 x(EXAMPLE.DIR)S 10773 X 747 y(%DFU-I-CLEANUP)S 2 x(,)S 239 x(Deleting)S N240 x(MYDISK:[RUBBISH]EX)S 2 x(AMPLE.DIR;1...)S 10773 X 449 y(%DFU-S-DELETED)SG2 x(,)S 239 x(File)S 239 x(DBGINI.COM;3)S 241 x(deleted)S 10773 X 448 ytI(%DFU-S-DELETED)S 2 x(,)S 239 x(File)S 239 x(ICON.COM;1)S 240 x(deleted)S(H10773 X 448 y(%DFU-S-DELETED)S 2 x(,)S 239 x(File)S 239 x(I_FOOL.COM;1)SC241 x(deleted)S 10773 X 449 y(%DFU-S-DELETED)S 2 x(,)S 239 x(File)S2M239 x(LOGICALS.COM)S 2 x(;51)S 239 x(deleted)S 10773 X 448 y(%DFU-S-DELETED)S G2 x(,)S 239 x(File)S 239 x(LOGIN.COM;79)S 241 x(deleted)S 10773 X 448 y)K(%DFU-S-DELETED)S 2 x(,)S 23H~ DFU024.BCKn[[DFU024.DOC]DFU024.PS;2] |9 x(File)S 239 x(LOGOUT.COM;4)S 241 x(deleted)S4H10773 X 449 y(%DFU-S-DELETED)S 2 x(,)S 239 x(File)S 239 x(NOTE_COMPRES)SD2 x(S.COM;3)S 239 x(deleted)S 10773 X 448 y(%DFU-S-DELETED)S 2 x(,)SP239 x(File)S 239 x(SHOWCL.COM;3)S 241 x(deleted)S 10773 X 448 y(%DFU-S-DELETED)SJ2 x(,)S 239 x(File)S 239 x(SYMBOLS.COM;)S 2 x(89)S 239 x(deleted)S 10773 XD448 y(%DFU-S-DELETED)S 2 x(,)S 239 x(File)S 239 x(TPUBUILD.COM)S 2 xD(;5)S 239 x(deleted)S 10773 X 449 y(%DFU-S-TOTAL,)S 241 x(11)S 239 xC(file\(s\))S 240 x(deleted)S 10773 X 448 y(%DFU-S-DELETED)S 2 x(,)S%H239 x(File)S 239 x(EXAMPLE.DIR;)S 2 x(1)S 239 x(deleted)S 10773 24250 XYMF25(/FILE=\211le-id)S 10773 X 597 y F151(Specify)S 172 x(a)S 171 x(complete)SCG172 x(\211le-id)S 171 x(\(num,seq,r)S 2 x(vn\))S 172 x(of)S 171 x(the)S E172 x(\211le)S 172 x(which)S 172 x(must)S 171 x(be)S 172 x(deleted.)S6C10773 X 548 y(This)S 179 x(quali\211er)S 180 x(allows)S 178 x(the)S1C180 x(deletion)S 179 x(of)S 179 x(lost)S 179 x(\211les)S 179 x(or)SEH179 x(\211les)S 179 x(marked)S 180 x(for)S 179 x(delete.)S 10773 X 548 yE(Example)S 166 x(:)S 10773 X 897 y F102($)S 239 x(DFU)S 10773 X 448 y6E(DFU>)S 240 x(VERIFY)S 239 x(MYDISK:)S 10773 X 747 y(%DFU-S-CHKHOME)SeF2 x(,)S 239 x(Home)S 239 x(block)S 240 x(info)S 239 x(verified)S 240 xK(OK)S 10773 X 449 y(%DFU-I-IFSCAN,)S 241 x(Scanning)S 240 x(INDEXF.SYS...)S I10773 X 448 y(%DFU-E-INVBAKF)S 2 x(ID,)S 239 x(file)S 239 x(\(86,17915,)ShC2 x(1\))S 239 x(0004CF04$BFS.;1)S 240 x(has)S 240 x(invalid)S 240 xoE(backlink)S 10773 X 448 y(%DFU-W-DELETED)S 2 x(,)S 239 x(file)S 239 x(F(\(537,2878,1\))S 241 x(APPL_UTRYIT_BOOK.TM)S 2 x(P;1)S 239 x(marked)SD240 x(for)S 239 x(delete)S 11012 X 449 y(.)S -239 x 448 y(.)S -239 xE448 y(.)S -478 x 748 y(DFU>)S 240 x(DELETE)S 239 x(MYDISK/FILE=)S 2 xxE(\(86,17915,1\))S 10773 X 448 y(%DFU-S-DELETED)S 2 x(,)S 239 x(File)SkC239 x(0004CF04$BFS)S 2 x(.;1)S 239 x(deleted)S 10773 X 747 y(DFU>)SxF240 x(DELETE)S 239 x(MYDISK/FILE=)S 2 x(\(537,2878,1\))S 10773 X 448 yL(%DFU-S-DELETED)S 2 x(,)S 239 x(File)S 239 x(APPL_UTRYIT_)S 2 x(BOOK.TMP;1)S*240 x(deleted)S 5094 36925 XY F36(6\2032)SEP PPn %%PageTrailer51%%PageFonts: Helvetica-Bold Helvetica-BoldObliqueS"%%+ NewCenturySchlbk-Roman Courier%%PageProcessColors:%%PageCustomColors: (BLACK).%2%%Page: (6-3) 25%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)r PaperHeight PaperWidth PM 0 0 XYJ0 SC 21934 1807 XY F24(DELETE)S 279 x(command)S 25899 X 797 y F28(DELETE)SC10773 5000 XY F25(/KEEP)S 10773 X 598 y F151(Preserve)S 173 x(the)S6G172 x(directory)S 172 x(tree;)S 175 x(only)S 173 x(delete)S 171 x(the)SyE172 x(contents.)S 261 x(/KEEP)S 171 x(is)S 172 x(only)S 172 x(valid)SSD10773 X 548 y(with)S 185 x(the)S 186 x(/DIREC)S -2 x(TOR)S -19 x(Y)SE185 x(quali\211er)S -36 x(.)S 288 x(/KEEP)S 185 x(works)S 185 x(for)SsF186 x(DELETE/DI)S -2 x(R)S 185 x(and)S 10773 X 548 y(DELETE/DIR/TREE)SG-2 x(.)S 10773 7790 XY F25(/NOLOG)S 10773 X 597 y F151(Do)S 166 x(not)SSL166 x(log)S 166 x(succesfull)S 167 x(deletes)S 165 x(to)S 166 x(SYS$OUTPUT)SL-46 x(.)S 166 x(/LOG)S 166 x(is)S 166 x(the)S 166 x(default.)S 10773 9483 XYCF25(/NOREMO)S -2 x(VE)S 10773 X 598 y F151(Can)S 176 x(only)S 177 x7D(be)S 176 x(used)S 176 x(with)S 175 x(/FILE.)S 177 x(Default)S 175 xI(DELETE/FILE)S 176 x(will)S 175 x(try)S 176 x(to)S 176 x(remove)S 10773 X H548 y(the)S 170 x(\211le)S 171 x(from)S 169 x(the)S 171 x(parent)S 170 xC(directory)S -55 x(.)S 258 x(If)S 169 x(the)S 170 x(\211le')S -18 x D(s)S 169 x(backlink)S 171 x(no)S 171 x(longer)S 171 x(points)S 169 xD(to)S 10773 X 548 y(a)S 174 x(valid)S 175 x(directory)S 175 x(this)SF174 x(will)S 174 x(generate)S 175 x(an)S 175 x(error)S -36 x(.)S 266 xF(The)S 175 x(/NOREMOVE)S 173 x(quali\211er)S 10773 X 548 y(overrules)SL167 x(this)S 166 x(behaviour)S 167 x(allowing)S 166 x(such)S 167 x(\211les)SE166 x(to)S 166 x(be)S 166 x(deleted.)S 10773 12821 XY F25(/ST)S -51 x(H(A)S -52 x(TISTICS)S 10773 X 598 y F151(This)S 184 x(quali\211er)S 185 xC(displays)S 183 x(the)S 184 x(performance)S 184 x(statistics)S -2 xpF(:)S 285 x(CPU)S 184 x(time,)S 188 x(Elapsed)S 10773 X 548 y(T)S -12 xI(ime,)S 166 x(I/O)S 166 x(and)S 166 x(PageFau)S 2 x(lts.)S 10773 15062 XYtIF25(/TREE)S 10773 X 598 y F151(Can)S 173 x(only)S 173 x(be)S 173 x(used)S6F173 x(with)S 172 x(/DIRECTO)S -2 x(R)S -18 x(Y)S -56 x(.)S 173 x(The)SF174 x(delete)S 172 x(command)S 173 x(will)S 172 x(delete)S 172 x(all)SK10773 X 548 y(subdirectories)S 177 x(within)S 177 x(the)S 177 x(directory)SxL177 x(\211le)S 177 x(speci\211ed.)S 272 x(DFU)S 176 x(will)S 176 x(\211rst)SG177 x(sort)S 177 x(out)S 10773 X 548 y(the)S 169 x(subdirectory)S 169 x(K(tree)S 169 x(and)S 169 x(than)S 169 x(delete)S 168 x(the)S 169 x(\211les)StC168 x(in)S 169 x(the)S 169 x(proper)S 169 x(order)S -37 x(.)S 255 x)I(Thus)S 169 x(a)S 10773 X 548 y(complete)S 166 x(directory)S 167 x(tree)SiD166 x(is)S 165 x(deleted)S 166 x(with)S 166 x(one)S 166 x(command.)S27427 36925 XY F36(6\2033)STEP PP4 %%PageTrailere1%%PageFonts: Helvetica-Bold Helvetica-BoldOblique %%+ NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)=%1%%Page: (6-4) 26%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)i PaperHeight PaperWidth PM 0 0 XY90 SC 5094 1807 XY F28(DELETE)S 5094 36925 XY F36(6\2034)SeEP PPC %%PageTraileru%%PageFonts: Helvetica-Bolda%%PageProcessColors:%%PageCustomColors: (BLACK)l%:%%Page: (7-1) 27%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)E PaperHeight PaperWidth PM 0 0 XYJ0 SC 2404 5875 XY F12(7)S 5094 4546 XY 23160 48 R 5094 5443 XY F20(DIREC)SE2 x(T)S -16 x(OR)S -34 x(Y)S 448 x 8652 Y F151(This)S 193 x(chapter)StH192 x(describes)S 192 x(the)S 192 x(DIRECTOR)S -20 x(Y)S 192 x(command)SC192 x(with)S 192 x(the)S 192 x(related)S 10773 X 598 y(parameters)S8H166 x(and)S 166 x(quali\211ers.)S 5094 10196 XY 23160 96 R 2404 10893 XYFF24(7.1)S 5094 X(Introduction)S 10773 X 897 y F151(The)S 163 x(DIREC)SC-2 x(TOR)S -19 x(Y)S 163 x(command)S 162 x(offers)S 162 x(6)S 162 x(D(major)S 163 x(functions.)S 250 x(3)S 163 x(functions)S 163 x(deal)SE162 x(with)S 10773 X 598 y(all)S 174 x(directories)S 174 x(on)S 174 x5H(a)S 174 x(disk,)S 176 x(the)S 175 x(other)S 174 x(3)S 174 x(functions)SG175 x(are)S 174 x(used)S 174 x(for)S 174 x(manipulating)S 10773 X 598 ySH(individual)S 167 x(directories.)S 249 x(These)S 167 x(functions)S 166 xI(are)S 166 x(activated)S 166 x(by)S 167 x(special)S 166 x(quali\211ers:)SmK10773 X 896 y(\201)S 595 x(Individual)S 166 x(directory)S 167 x(functions)SxG167 x(:)S 11670 X 897 y(1)S 619 x(/COMPRESS)S 183 x(:)S 184 x(Rebuild)SdF183 x(one)S 184 x(or)S 184 x(more)S 183 x(directory)S 184 x(\211les.)SD285 x(Directories)S 12566 X 598 y(are)S 177 x(alphabetically)S 176 xH(sorted)S 176 x(lists)S 176 x(of)S 176 x(\211lenames)S 176 x(and)S 177 xG(\211le)S 176 x(id')S -19 x(s.)S 270 x(Because)S 12566 X 597 y(\211le)SmG184 x(names)S 183 x(are)S 184 x(randomly)S 184 x(inserted)S 183 x(and)S8G184 x(deleted,)S 188 x(holes)S 183 x(will)S 183 x(occur)S 12566 X 598 yxC(in)S 180 x(directory)S 180 x(\211les.)S 275 x(Such)S 180 x(holes)S0D179 x(will)S 179 x(only)S 180 x(be)S 179 x(reused)S 179 x(if)S 179 xI(a)S 179 x(\211le)S 180 x(can)S 179 x(be)S 12566 X 598 y(alphabetically)SED177 x(\211tted)S 177 x(into)S 177 x(it.)S 271 x(As)S 176 x(a)S 177 xE(result)S 176 x(directory)S 178 x(\211les)S 177 x(will)S 176 x(grow)S>H-46 x(.)S 12566 X 598 y(Especially)S 166 x(MAIL)S 166 x(subdirectories)SG166 x(suffer)S 166 x(from)S 166 x(this)S 165 x(behaviou)S 2 x(r)S -37 xRC(.)S 12566 X 896 y(T)S -45 x(o)S 181 x(make)S 182 x(matters)S 181 xGD(worse)S 181 x(directory)S 182 x(\211les)S 182 x(above)S 182 x(127)SC181 x(blocks)S 182 x(will)S 181 x(no)S 12566 X 598 y(longer)S 168 xSJ(be)S 167 x(cached)S 168 x(by)S 167 x(the)S 167 x(\211le)S 167 x(system.)SE251 x(This)S 166 x(will)S 167 x(degrade)S 167 x(performance)S 12566 XxF598 y(on)S 179 x(such)S 179 x(directories)S 178 x(dramatically)S -55 xG(.)S 274 x(The)S 179 x(COMPRESS)S 177 x(function)S 180 x(will)S 12566 X)D598 y(rebuild)S 183 x(the)S 182 x(complete)S 182 x(directory)S 182 xD(\211le.)S 282 x(The)S 183 x(/TEST)S 182 x(quali\211er)S 183 x(can)SF182 x(be)S 12566 X 597 y(used)S 166 x(to)S 166 x(preview)S 166 x(the)SF167 x(results)S 165 x(of)S 166 x(a)S 166 x(possible)S 165 x(COMPRESS)SH165 x(command.)S 11670 X 897 y(2)S 619 x(/CREA)S -28 x(TE/ALLOCA)S -28 xI(TE=n)S 173 x(:)S 264 x(Create)S 173 x(a)S 174 x(directory)S 174 x(with)SD172 x(a)S 174 x(preallocated)S 12566 X 598 y(size)S 171 x(of)S 171 xI('n')S 171 x(blocks.)S 260 x(Note)S 171 x(that)S 171 x('n')S 171 x(will)S(K170 x(be)S 171 x(rounded)S 172 x(up)S 172 x(to)S 171 x(a)S 171 x(multiple)S=J171 x(of)S 12566 X 597 y(the)S 167 x(disks)S 165 x(cluster)S 166 x(size.)SF11670 X 897 y(3)S 619 x(/DUMP)S 182 x(:)S 181 x(Make)S 182 x(a)S 180 xE(dump)S 181 x(of)S 181 x(the)S 181 x(directory)S 182 x(blocks)S 181 x7G(and)S 181 x(formats)S 180 x(the)S 12566 X 598 y(output.)S 268 x(This)SeF175 x(option)S 175 x(is)S 175 x(usefull)S 175 x(for)S 175 x(debuggin)SE2 x(g)S 175 x(directory)S 176 x(\211les)S 175 x(which)S 12566 X 598 yeC(are)S 186 x(suspected)S 184 x(or)S 186 x(corrupted.)S 288 x(This)S)E186 x(function)S 186 x(is)S 184 x(equivalent)S 186 x(to)S 185 x(the)S)K12566 X 597 y(previously)S 183 x(undocumented)S 182 x(VMS)S 181 x(command)S J182 x(DUMP/DIRECTO)S -2 x(R)S -18 x(Y)S -56 x(,)S 12566 X 598 y(although)SF168 x(the)S 166 x(layout)S 167 x(of)S 165 x(the)S 167 x(output)S 166 xD(is)S 166 x(different.)S 10773 28228 XY(\201)S 595 x(Disk-wid)S -2 xD(e)S 167 x(directory)S 166 x(functions)S 167 x(:)S 11670 X 897 y(1)SE619 x(/ALIAS)S 166 x(:)S 167 x(Scan)S 166 x(all)S 166 x(directories)S C166 x(on)S 166 x(the)S 166 x(disk)S 166 x(for)S 166 x(alias)S 166 x E(\211le)S 166 x(entries.)S 11670 X 897 y(2)S 619 x(/EMPTY)S 167 x(:)S8E166 x(Scan)S 167 x(the)S 166 x(disk)S 166 x(for)S 166 x(empty)S 166 x C(directories)S 11670 X 896 y(3)S 619 x(/VERSION=n)S 166 x(:)S 251 x D(Scan)S 167 x(all)S 166 x(directories)S 167 x(on)S 167 x(the)S 167 xF(disk)S 166 x(for)S 167 x(\211les)S 167 x(which)S 167 x(have)S 12566 XE598 y(at)S 166 x(least)S 166 x('n')S 165 x(versions.)S 10773 33509 XYC(The)S 189 x(diskwide)S 188 x(function)S 189 x(quali\211ers)S 189 xlF(can)S 188 x(be)S 189 x(used)S 188 x(in)S 189 x(one)S 188 x(command;)SJ201 x(other)S 10773 X 597 y(combinations)S 194 x(of)S 193 x(quali\211ers)SC194 x(are)S 193 x(not)S 194 x(possible.)S 304 x(Note)S 193 x(that)S4H193 x(the)S 194 x(diskwide)S 10773 X 598 y(directory)S 194 x(functions)SC194 x(can)S 193 x(take)S 193 x(several)S 194 x(minutes)S 193 x(to)SiC193 x(complete)S 193 x(because)S 193 x(a)S 10773 X 598 y(complete)S G190 x(directory)S 190 x(scan)S 190 x(uses)S 190 x(a)S 190 x(lot)S 189 x F(of)S 190 x(disk)S 190 x(I/O)S 189 x(\(approximately)S 191 x(2)S 189 xI(I/O')S -19 x(s)S 10773 X 598 y(per)S 166 x(directory\).)S 27427 36925 XYE F36(7\2031)SEP PPa %%PageTrailer82%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)o% %%Page: (7-2) 28%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYF0 SC 5094 1807 XY F28(DIRECT)S -12 x(OR)S -22 x(Y)S 10773 4866 XY F151H(An)S 193 x(indirect)S 193 x(command)S 193 x(\211le)S 193 x(containing)SC194 x(a)S 193 x(list)S 192 x(of)S 192 x(\211les)S 193 x(can)S 193 x G(be)S 193 x(used)S 193 x(as)S 192 x(a)S 10773 X 598 y(parameter)S 175 xtG(to)S 175 x(/COMPRESS)S 175 x(or)S 175 x(/DUMP)S -63 x(.)S 175 x(Such)S1E176 x(a)S 176 x(list)S 174 x(can)S 176 x(be)S 175 x(generated)S 176 x9L(with)S 10773 X 598 y(the)S 166 x(SEARCH)S 165 x(command.)S 249 x(Example:)SW10773 X 896 y F102(DFU>)S 240 x(SEARCH)S 239 x(disk/FILE=*.)S 2 x(DIR/SIZE=MIN=50/OUT)SEG2 x(=x.x)S 10773 X 448 y(DFU>)S 240 x(DIRECTORY/COMPRESS)S 241 x(@x.x)SvD10773 X 897 y F151(Caution:)S 316 x(Care)S 199 x(should)S 199 x(be)SE199 x(taken)S 200 x(when)S 199 x(compressing)S 200 x(critical)S 199 xIE(system)S 10773 X 598 y(directories.)S 287 x(T)S -46 x(o)S 185 x(be)S8C185 x(safe)S 184 x(you)S 186 x(should)S 185 x(\211rst)S 185 x(use)SUD185 x(the)S 185 x(/TEST)S 185 x(quali\211er)S 185 x(before)S 10773 XK598 y(compressing)S 202 x(the)S 202 x(directory)S -55 x(.)S 321 x(Another)S0F202 x(problem)S 201 x(may)S 202 x(be)S 202 x(caused)S 201 x(by)S 202 xF(a)S 10773 X 597 y(systemcrash)S 179 x(just)S 179 x(when)S 180 x(DFU)SG179 x(is)S 179 x(rewriting)S 179 x(the)S 180 x(new)S 179 x(compressed)S G179 x(directory)S 10773 X 598 y(\(although)S 169 x(the)S 167 x(chance)S2G169 x(that)S 167 x(this)S 168 x(happens)S 167 x(is)S 167 x(very)S 169 x C(small\).)S 252 x(When)S 168 x(this)S 167 x(happens)S 10773 X 598 yD(you)S 167 x(can)S 167 x(recover)S 167 x(the)S 166 x(\211les)S 166 xH(by)S 167 x(executing)S 167 x(the)S 166 x(following)S 167 x(procedure:)SF10773 X 897 y(1)S 620 x(Do)S 165 x(a)S 166 x($SET)S 166 x(FILE/NODIR)SH165 x(of)S 166 x(the)S 166 x(corrupted)S 167 x(directory)S 10773 X 896 yC(2)S 620 x(Delete)S 165 x(the)S 166 x(directory)S 167 x(and)S 166 x:C(create)S 167 x(a)S 166 x(new)S 166 x(one)S 10773 X 897 y(3)S 620 x%D(Do)S 179 x(a)S 180 x($ANAL)S -46 x(YZE/DISK/REP)S -38 x(AIR)S 179 xC(;)S 181 x(this)S 179 x(will)S 180 x(move)S 180 x(all)S 180 x(the)SoJ180 x(lost)S 180 x(\211les)S 180 x(to)S 11670 X 598 y([SYSLOST].)S 10773 XE896 y(4)S 620 x(Move)S 167 x(the)S 166 x(\211les)S 166 x(from)S 166 xlG([SYSLOST])S 165 x(to)S 166 x(the)S 166 x(newly)S 166 x(created)S 166 xaG(directory)S -54 x(.)S 5094 17602 XY 23160 96 R 2404 18299 XY F24(7.2)SuD5094 X(Discussion)S 165 x(of)S 166 x(directory)S 166 x(compression)SC10773 X 897 y F151(V)S -46 x(ersion)S 202 x(V2.2)S 202 x(of)S 202 x F(DFU)S 202 x(introduced)S 203 x(a)S 202 x(major)S 203 x(change)S 203 xE(in)S 202 x(the)S 203 x(directory)S 10773 X 597 y(compression)S 172 x(E(process)S 172 x(\(issued)S 171 x(by)S 173 x(the)S 172 x(DIREC)S -2 xnG(TOR)S -19 x(Y/COMPRESS)S 171 x(command\).)S 10773 X 598 y(Previously)S)K170 x(versions)S 169 x(always)S 168 x(performed)S 168 x(a)S 169 x(maximum)S9D168 x(compression)S 169 x(,)S 169 x(and)S 169 x(then)S 10773 X 598 yF(truncated)S 189 x(the)S 188 x(resultant)S 188 x(directory)S -55 x(.)SD293 x(This)S 188 x(may)S 189 x(be)S 188 x(usefull)S 188 x(on)S 188 xD(a)S 188 x(dormant)S 10773 X 598 y(directory)S 199 x(,)S 207 x(but)SC198 x(on)S 198 x(an)S 199 x(active)S 198 x(directory)S 199 x(this)SvG198 x(method)S 198 x(introduced)S 199 x(new)S 10773 X 597 y(problems:)SSC10773 X 897 y(\201)S 595 x(When)S 179 x(new)S 178 x(\211les)S 178 xD(were)S 178 x(added)S 179 x(to)S 178 x(the)S 178 x(directory)S 179 xH(it)S 178 x(must)S 178 x(very)S 180 x(quickly)S 180 x(be)S 11670 X 598 yC(extended.)S 259 x(Not)S 170 x(only)S 172 x(is)S 170 x(this)S 170 x2E(a)S 171 x(slow)S 169 x(operation,)S 173 x(but)S 171 x(on)S 171 x(a)SSF170 x(fragmented)S 171 x(disk)S 11670 X 598 y(this)S 165 x(can)S 167 xC(lead)S 166 x(to)S 166 x(DIRA)S -2 x(LLOC)S 166 x(errors.)S 10773 X7C896 y(\201)S 595 x(Active)S 178 x(directories)S 179 x(where)S 179 xeK(\211les)S 178 x(are)S 179 x(inserted)S 179 x(in)S 179 x(a)S 178 x(random)S2G179 x(alphabetical)S 11670 X 598 y(order)S 166 x(very)S 167 x(quickly)S(F168 x(lead)S 166 x(to)S 165 x(expansion)S 167 x(of)S 166 x(the)S 166 xE(just)S 167 x(compressed)S 165 x(directory)S -54 x(.)S 10773 26867 XYeC(The)S 217 x(\211rst)S 216 x(problem)S 216 x(is)S 216 x(now)S 216 xxK(solved)S 216 x(by)S 217 x(NOT)S 216 x(doing)S 217 x(an)S 216 x(automatic)SoL10773 X 598 y(TRUNCA)S -28 x(TION)S 158 x(of)S 158 x(the)S 158 x(directory)SD-54 x(.)S 249 x(The)S 159 x(/TRUNCA)S -27 x(TE)S 158 x(quali\211er)SG159 x(has)S 158 x(been)S 159 x(added)S 10773 X 597 y(to)S 175 x(allow)SGH174 x(truncation)S 176 x(on)S 175 x(the)S 176 x(users)S 174 x(request.)SD268 x(Also)S 174 x(/TRUNCA)S -28 x(TE=blocksize)S 175 x(is)S 10773 XO598 y(possible)S 177 x(to)S 177 x(perform)S 178 x(partial)S 177 x(truncation;)ShC185 x(DFU)S 177 x(will)S 177 x(not)S 178 x(truncate)S 178 x(below)S(E177 x(the)S 10773 X 598 y(blocksize)S 180 x(issued)S 180 x(in)S 181 x2E(/TRUNCA)S -28 x(TE.)S 181 x(\(The)S 181 x(actual)S 180 x(blocksize)S E180 x(will)S 180 x(be)S 180 x(rounded)S 10773 X 598 y(up)S 176 x(to)SlE176 x(a)S 176 x(multiple)S 176 x(of)S 175 x(the)S 177 x(disks)S 175 xeE(cluster)S 176 x(size.\))S 268 x(The)S 177 x(second)S 176 x(problem)SeD176 x(is)S 176 x(solved)S 10773 X 597 y(by)S 176 x(the)S 176 x(new)SH176 x(/FILL_F)S -35 x(ACTOR)S 174 x(quali\211er)S -36 x(.)S 269 x(Here)SC176 x(a)S 176 x(user)S 176 x(can)S 176 x(direct)S 176 x(DFU)S 176 xI(to)S 175 x(\211ll)S 10773 X 598 y(each)S 169 x(directory)S 169 x(block)SSH169 x(up)S 168 x(to)S 168 x(a)S 168 x(certain)S 169 x(percentage)S 169 xF(\(between)S 168 x(50)S 168 x(and)S 169 x(100\).)S 253 x(Not)S 10773 XG598 y(specifying)S 171 x(/FILL_F)S -35 x(ACTOR)S 169 x(is)S 170 x(the)S.G171 x(same)S 170 x(as)S 170 x(doing)S 171 x(/FILL_F)S -36 x(ACTOR=100)SxJ169 x(\(full)S 10773 X 598 y(compression\).)S 278 x(Note)S 180 x(however)SG181 x(that)S 180 x(the)S 181 x(directory')S -18 x(s)S 180 x(allocated)S7I180 x(size)S 179 x(must)S 180 x(be)S 10773 X 597 y(large)S 176 x(enough)S)E176 x(to)S 175 x(allow)S 175 x(a)S 175 x(lower)S 175 x(\211ll)S 175 xSH(factor)S -37 x(.)S 268 x(If)S 174 x(that)S 175 x(is)S 175 x(not)S 175 xD(possible)S 174 x(DFU)S 175 x(will)S 10773 X 598 y(issue)S 174 x(a)SF174 x(DFU-E-EX)S -2 x(TERR)S 173 x(error)S -36 x(,)S 177 x(and)S 174 xG(you)S 175 x(must)S 174 x(use)S 174 x(a)S 174 x(higher)S 175 x(\211ll)SJ174 x(factor)S -37 x(.)S 266 x(So,)S 10773 X 598 y(what)S 166 x(strategy)SH166 x(should)S 166 x(be)S 167 x(used)S 166 x(when)S 166 x(comnpressing)SK167 x(directories?)S 10773 X 897 y(1)S 620 x(Inactive)S 166 x(directories)S1E166 x(:)S 250 x(use)S 166 x(DIR/CO)S -2 x(MPRESS/TRUNCA)S -28 x(TE.)SxN10773 X 896 y(2)S 620 x(Not)S 166 x(very)S 167 x(active)S 166 x(diredctories)SD166 x(:)S 250 x(use)S 166 x(DIR/CO)S -2 x(MPRESS)S 166 x(\(/TRUNCA)S*-28 x(TE=n\).)S 5094 36925 XY F36(7\2032)SEP PPr %%PageTrailer02%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courierl%%PageProcessColors:%%PageCustomColors: (BLACK)x%d%%Page: (7-3) 29%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)x PaperHeight PaperWidth PM 0 0 XYD0 SC 20616 1807 XY F24(DIRECT)S -14 x(OR)S -26 x(Y)S 279 x(command)SH17389 X 797 y F28(Discuss)S 2 x(ion)S 279 x(of)S 279 x(directory)S 280 xP(compres)S 2 x(sion)S 10773 4866 XY F151(3)S 620 x(Active)S 173 x(directories,)SF176 x(\211les)S 173 x(added)S 173 x(at)S 173 x(the)S 174 x(end)S 173 xI(\(such)S 174 x(as)S 173 x(MAIL)S 173 x(directories\))S 173 x(:)S 11670 X I598 y(use)S 166 x(DIR/CO)S -2 x(MPRESS)S 10773 X 896 y(4)S 620 x(Active)SpC186 x(directories,)S 192 x(\211les)S 187 x(added)S 186 x(in)S 187 xeJ(random)S 187 x(alphabetical)S 186 x(order)S 187 x(:)S 291 x(use)S 11670 XK598 y(DIR/CO)S -2 x(MPRESS/FILL_F)S -36 x(ACTOR=n)S 5094 9084 XY 23160 96 R F2404 9781 XY F24(7.3)S 5094 X(Output)S 167 x(formatting)S -220 x 897 yGF151(A)S 168 x(new)S 169 x(quali\211er)S 169 x(/FORMA)S -27 x(T)S 169 xnD(can)S 169 x(be)S 168 x(used)S 169 x(with)S 168 x(DIREC)S -2 x(TOR)SH-19 x(Y/VERSION.)S 168 x(This)S 10773 X 597 y(allows)S 184 x(the)S 186 xJ(build)S 185 x(up)S 186 x(of)S 185 x(a)S 186 x(command)S 185 x(procedure)SF186 x(directly)S 186 x(from)S 185 x(the)S 186 x(output)S 10773 X 598 yE(generated)S 176 x(by)S 176 x(the)S 176 x(DIR)S -2 x(/VERSION)S 174 x2N(command.)S 269 x(/FORMA)S -28 x(T)S 175 x(has)S 176 x(the)S 175 x(following)SG10773 X 598 y(restrictions)S 166 x(:)S 10773 X 896 y(1)S 620 x(/FORMA)S1H-28 x(T)S 195 x(is)S 194 x(only)S 195 x(valid)S 195 x(with)S 194 x(the)SH195 x(/VERSIO)S -2 x(N)S 195 x(and)S 195 x(the)S 194 x(/OUTPUT)S 11670 XJ598 y(quali\211er)S -36 x(.)S 10773 X 897 y(2)S 620 x(The)S 171 x(format)SD171 x(string)S 171 x(used)S 171 x(must)S 171 x(contain)S 171 x(the)SG171 x(!AS)S 171 x(directive)S 172 x(\(in)S 171 x(uppercase\).)S 11670 X1F598 y(The)S 166 x(\211le)S 167 x(found)S 166 x(will)S 166 x(be)S 166 xQ(substituted)S 165 x(at)S 166 x(the)S 166 x(!AS)S 166 x(location)S 10773 16556 XYtE(Example:)S 10773 X 896 y F102(DFU>)S 240 x(DIR/VERSION=4/OUTP=)S 2 xxE(PURGE.COM/FORMAT="$)S 2 x(PURGE/KEEP=3)S 240 x(!AS")S 239 x(mydisk)S(E5094 19279 XY 23160 48 R 5094 20275 XY F20(DIREC)S 2 x(T)S -16 x(OR)S0K-34 x(Y)S 448 x 21769 Y F34(Performs)S 167 x(directory)S 165 x(functions.)S(E5094 22965 XY 23160 204 R 5094 23983 XY F24(FORMA)S -53 x(T)S 10773 X1G(DIRECT)S -14 x(OR)S -27 x(Y)S 698 x F23(device)S -2 x([:])S 249 x(or)StM166 x(directory-\211le)S -2 x(\(s\))S 5094 25178 XY 23160 204 R 5094 25997 XYhHF24(P)S -51 x(ARA)S -2 x(METERS)S 849 x -22 y F25(device)S 10773 X 548 yCF151(The)S 167 x(device)S 166 x(on)S 167 x(which)S 166 x(to)S 166 x D(perform)S 166 x(one)S 167 x(of)S 166 x(the)S 166 x(diskwide)S 165 xK(directory)S 167 x(functions.)S 10773 27619 XY F25(directory-\211les\(s\))SlE10773 X 598 y F151(The)S 174 x(\211le)S 173 x(speci\211cation)S 173 xxG(of)S 172 x(the)S 173 x(directory)S 174 x(on)S 173 x(which)S 173 x(to)SxF173 x(perform)S 173 x(the)S 173 x(/CREA)S -29 x(TE)S 173 x(,)S 10773 XF548 y(/COMPRESS)S 166 x(or)S 167 x(/DUMP)S 167 x(function.)S 251 x(W)SC-18 x(ildcard)S 166 x(\211le)S 167 x(speci\211cations)S 167 x(may)SRO167 x(be)S 166 x(used.)S 10773 X 548 y(DFU)S 169 x(will)S 168 x(automatically)S8M169 x(add)S 169 x(.DIR)S 168 x(to)S 169 x(the)S 169 x(\211lespeci\211cation)S1F169 x(if)S 169 x(a)S 169 x(\211letype)S 169 x(is)S 169 x(not)S 10773 XJ548 y(provided.)S 5094 31056 XY 23160 204 R 5094 31875 XY F24(QUALIFIERS)SP10773 X F25(/ALIAS)S 10773 X 548 y F151(The)S 188 x(/ALIAS)S 186 x(quali\211er)SE188 x(directs)S 187 x(DFU)S 186 x(to)S 187 x(scan)S 187 x(all)S 187 x7E(directories)S 187 x(for)S 187 x(alias)S 186 x(\211le)S 10773 X 548 ySG(entries.)S 281 x(Only)S 183 x(alias)S 181 x(\211les)S 182 x(in)S 182 x0F(DIFFERENT)S 181 x(directories)S 182 x(will)S 181 x(be)S 182 x(found)SI182 x(\(this)S 10773 X 548 y(is)S 182 x(the)S 183 x(most)S 183 x(common)SxD183 x(situation\).)S 283 x(Normally)S 183 x(only)S 183 x(the)S 183 xC(system)S 183 x(disk)S 182 x(should)S 10773 X 548 y(contain)S 171 xF(alias)S 170 x(\211les.)S 259 x(This)S 171 x(quali\211er)S 171 x(can)SG171 x(be)S 171 x(combined)S 171 x(with)S 170 x(/VERSION=n)S 170 x(and)S <10773 X 548 y(/EMPTY)S -55 x(.)S 27427 36925 XY F36(7\2033)SEP PPS %%PageTrailerS2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman'%%+ Courier Helvetica Helvetica-Obliqued%%+ Helvetica-BoldOblique9%%PageProcessColors:%%PageCustomColors: (BLACK) % %%Page: (7-4) 30%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)( PaperHeight PaperWidth PM 0 0 XYC0 SC 5094 1807 XY F24(DIRECT)S -13 x(OR)S -27 x(Y)S 279 x(command)S J5094 X 797 y F28(DIRECT)S -12 x(OR)S -22 x(Y)S 10773 5022 XY F25(/ALLOCA)SE-53 x(TE=n)S 10773 X 598 y F151(Used)S 177 x(in)S 177 x(combination)S1H178 x(with)S 177 x(/CREA)S -29 x(TE.)S 178 x(Creates)S 176 x(the)S 178 xJ(new)S 177 x(directory)S 178 x(with)S 176 x(an)S 10773 X 547 y(allocated)SE166 x(size)S 165 x(of)S 166 x('n')S 166 x(blocks.)S 10773 7263 XY F25)H(/COMPRESS)S 10773 X 598 y F151(Performs)S 179 x(the)S 179 x(directory)SH179 x(compression)S 178 x(unless)S 179 x(/TEST)S 179 x(is)S 178 x(also)SD178 x(speci\211ed.)S 275 x(The)S 10773 X 548 y(output)S 166 x(will)SG166 x(show)S 165 x(the)S 167 x(results)S 165 x(in)S 166 x(terms)S 166 x7G(of)S 166 x(\211le)S 166 x(sizes.)S 249 x(Example:)S 10773 X 897 y F102)O(DFU>)S 240 x(DIR/COMP)S 240 x(OWN$:[000000]MAIL)S 10773 X 747 y(%DFU-S-DONE,)SiG240 x(OWN$:[00000)S 2 x(0]MAIL.DIR;1:)S 240 x(31)S 239 x(files;)S 240 xrE(was)S 239 x(:)S 240 x(4/9,)S 239 x(now)S 240 x(:)S 239 x(3/3)S 239 x2D(blocks)S 10773 X 747 y(DFU>)S 10773 12793 XY F25(/CREA)S -53 x(TE)SI10773 X 597 y F151(Create)S 169 x(a)S 168 x(new)S 169 x(,)S 170 x(empty)SeF169 x(directory)S -55 x(.)S 256 x(The)S 169 x(allocated)S 169 x(size)SH168 x(will)S 168 x(be)S 169 x(1)S 168 x(cluster)S 169 x(unless)S 10773 XI548 y(/ALLOCA)S -28 x(TE)S 166 x(is)S 166 x(speci\211ed.)S 10773 15034 XY(FF25(/DEVICE)S 10773 X 598 y F151(The)S 172 x(device)S 171 x(on)S 171 xF(which)S 171 x(the)S 171 x(\211les)S 171 x(reside.)S 259 x(The)S 171 xF(device)S 171 x(name)S 171 x(is)S 171 x(added)S 170 x(to)S 171 x(the)SL171 x(\211le)S 10773 X 548 y(name.)S 276 x(If)S 178 x(you)S 180 x(generate)SD180 x(a)S 179 x(\211le)S 179 x(list)S 179 x(with)S 178 x(the)S 179 xG(DFU)S 179 x(SEARC)S -2 x(H)S 179 x(command)S 179 x(you)S 10773 X 548 ySD(don')S -9 x(t)S 177 x(need)S 178 x(this)S 178 x(quali\211er)S -36 xC(.)S 272 x(However)S 178 x(you)S 179 x(may)S 177 x(have)S 179 x(a)S7F177 x(list)S 177 x(of)S 178 x(\211les)S 177 x(produced)S 10773 X 548 yE(from)S 177 x(another)S 178 x(source)S 178 x(and)S 178 x(thus)S 177 xaG(need)S 178 x(to)S 177 x(append)S 177 x(a)S 178 x(device)S 178 x(name)SSE177 x(to)S 177 x(it.)S 272 x(This)S 10773 X 548 y(quali\211er)S 167 x7J(can)S 166 x(only)S 167 x(be)S 166 x(used)S 166 x(in)S 167 x(combination)SP166 x(with)S 166 x(/COMPRESS)S 165 x(or)S 166 x(/DUMP)S -64 x(.)S 10773 18920 XYFF25(/DUMP)S 10773 X 597 y F151(Produce)S 189 x(a)S 188 x(block)S 189 xF(level)S 188 x(dump)S 188 x(of)S 188 x(a)S 188 x(directory)S -55 x(.)SF294 x(/DUMP)S 188 x(will)S 188 x(interpret)S 188 x(the)S 10773 X 548 yH(directory)S 179 x(entries)S 178 x(found)S 178 x(in)S 178 x(each)S 179 xD(block.)S 273 x(A)S 178 x(directory)S 179 x(entry)S 178 x(contains)SC178 x(a)S 178 x(size,)S 10773 X 548 y(version-limit,)S 168 x(type)SaH168 x(and)S 167 x(name)S 168 x(\211eld.)S 252 x(Next)S 168 x(the)S 168 xJ(directory)S 168 x(entry)S 168 x(contains)S 168 x(a)S 167 x(list)S 10773 XH548 y(of)S 175 x(versions)S 175 x(and)S 175 x(\211le)S 175 x(ID')S -19 xC(s)S 174 x(for)S 175 x(this)S 175 x(entry)S -55 x(.)S 267 x(/DUMP)S6I175 x(will)S 175 x(produce)S 175 x(a)S 175 x(rather)S 175 x(low)S 10773 X)I548 y(level)S 167 x(output)S 166 x(of)S 166 x(this)S 166 x(information.)S6D249 x(Example)S 166 x(:)S 10773 X 897 y F102(DFU>)S 240 x(DIR/DUMP)SE240 x(C.DIR)S 10773 X 747 y(DUMP)S 240 x(of)S 239 x(directory)S 240 xD(block)S 240 x(1)S 10773 X 448 y(Size:)S 240 x(22,)S 239 x(Version)SF240 x(limit:)S 240 x(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(10\):)SH240 x(CHKDSK.EXE)S 11490 X 449 y(Version:)S 240 x(3,)S 240 x(FID)S 239 xE(:)S 239 x(\(1027,1456,0)S 2 x(\))S 10773 X 448 y(Size:)S 240 x(26,)S H239 x(Version)S 240 x(limit:)S 240 x(3,)S 239 x(Type:)S 240 x(0,)S 239 xC(Name\(13\):)S 240 x(CHKDSK.README)S 11490 X 448 y(Version:)S 240 xsC(2,)S 240 x(FID)S 239 x(:)S 239 x(\(33892,1171,)S 2 x(0\))S 11490 X G449 y(Version:)S 240 x(3,)S 240 x(FID)S 239 x(:)S 239 x(\(1256,11234,)ScJ2 x(0\))S 10773 X 448 y(Size:)S 240 x(22,)S 239 x(Version)S 240 x(limit:)SJ240 x(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(10\):)S 240 x(CHKDSK.SAV)SO11490 X 448 y(Version:)S 240 x(2,)S 240 x(FID)S 239 x(:)S 239 x(\(13947,100,0)SlI2 x(\))S 10773 X 449 y(Size:)S 240 x(24,)S 239 x(Version)S 240 x(limit:)S K240 x(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(11\):)S 240 x(CHKDSK.SAVE)S7O11490 X 448 y(Version:)S 240 x(1,)S 240 x(FID)S 239 x(:)S 239 x(\(12531,2114,)SqJ2 x(0\))S 10773 X 448 y(Size:)S 240 x(26,)S 239 x(Version)S 240 x(limit:)SN240 x(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(14\):)S 240 x(CHKDSK_LNK.COM)SP11490 X 449 y(Version:)S 240 x(2,)S 240 x(FID)S 239 x(:)S 239 x(\(12314,72,0\))SF10773 X 448 y(Size:)S 240 x(18,)S 239 x(Version)S 240 x(limit:)S 240 xG(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(5\):)S 240 x(C_D.C)S 11490 X)H448 y(Version:)S 240 x(3,)S 240 x(FID)S 239 x(:)S 239 x(\(32650,32,0\))SF10773 X 448 y(Size:)S 240 x(20,)S 239 x(Version)S 240 x(limit:)S 240 xI(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(7\):)S 240 x(C_D.EXE)S 11490 XaG449 y(Version:)S 240 x(9,)S 240 x(FID)S 239 x(:)S 239 x(\(2675,64,0\))SxF10773 X 448 y(Size:)S 240 x(20,)S 239 x(Version)S 240 x(limit:)S 240 xI(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(7\):)S 240 x(C_D.OBJ)S 11490 XSH448 y(Version:)S 240 x(4,)S 240 x(FID)S 239 x(:)S 239 x(\(9835,117,0\))SF10773 X 449 y(Size:)S 240 x(20,)S 239 x(Version)S 240 x(limit:)S 240 xI(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(7\):)S 240 x(C_D_2.C)S 11490 XAG448 y(Version:)S 240 x(15,)S 240 x(FID)S 239 x(:)S 239 x(\(12428,84,0)S)I2 x(\))S 10773 X 448 y(Size:)S 240 x(22,)S 239 x(Version)S 240 x(limit:)S)H240 x(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(9\):)S 240 x(C_D_2.OBJ)SP11490 X 449 y(Version:)S 240 x(9,)S 240 x(FID)S 239 x(:)S 239 x(\(8439,119,0\))SF10773 X 448 y(Size:)S 240 x(22,)S 239 x(Version)S 240 x(limit:)S 240 xC(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(9\):)S 240 x(C_D_3.CLD)SvP11490 X 448 y(Version:)S 240 x(3,)S 240 x(FID)S 239 x(:)S 239 x(\(9777,178,0\))SF10773 X 449 y(Size:)S 240 x(22,)S 239 x(Version)S 240 x(limit:)S 240 xC(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(9\):)S 240 x(C_D_3.OBJ)S7P11490 X 448 y(Version:)S 240 x(2,)S 240 x(FID)S 239 x(:)S 239 x(\(9737,161,0\))SF10773 X 448 y(Size:)S 240 x(20,)S 239 x(Version)S 240 x(limit:)S 240 xI(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(7\):)S 240 x(C_D_4.C)S 11490 X\G449 y(Version:)S 240 x(3,)S 240 x(FID)S 239 x(:)S 239 x(\(10594,1580,)SwJ2 x(0\))S 10773 X 448 y(Size:)S 240 x(22,)S 239 x(Version)S 240 x(limit:)SH240 x(3,)S 239 x(Type:)S 240 x(0,)S 239 x(Name\(9\):)S 240 x(C_D_4.OBJ)S5094 36925 XY F36(7\2034)SEP PP( %%PageTrailers1%%PageFonts: Helvetica-Bold Helvetica-BoldObliquee"%%+ NewCenturySchlbk-Roman Courier%%PageProcessColors:%%PageCustomColors: (BLACK)1%x%%Page: (7-5) 31%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)S PaperHeight PaperWidth PM 0 0 XYD0 SC 20616 1807 XY F24(DIRECT)S -14 x(OR)S -26 x(Y)S 279 x(command)SM24770 X 797 y F28(DIRECT)S -12 x(OR)S -22 x(Y)S 11490 4766 XY F102(Version:)S G240 x(2,)S 240 x(FID)S 239 x(:)S 239 x(\(10177,109,0)S 2 x(\))S 10773 XcI747 y(DUMP)S 240 x(of)S 239 x(directory)S 240 x(block)S 240 x(2)S 10773 X)C448 y(Size:)S 240 x(18,)S 239 x(Version)S 240 x(limit:)S 240 x(3,)SEG239 x(Type:)S 240 x(0,)S 239 x(Name\(5\):)S 240 x(DFU.C)S 11490 X 448 y(F(Version:)S 240 x(169,)S 240 x(FID)S 239 x(:)S 239 x(\(31123,52,)S 2 xG(0\))S 11012 X 748 y(.)S -239 x 448 y(.)S -239 x 448 y(.)S -478 x 449 y)E(%DFU-I-TOTAL,)S 241 x(OWN$:[SOURCES.FORTR)S 2 x(AN.DFUSRC]C.DIR;1:)S1G240 x(42)S 240 x(files)S 10773 10494 XY F25(/EMPTY)S 10773 X 598 y F1511F(The)S 192 x(/EMPTY)S 192 x(quali\211er)S 191 x(will)S 191 x(produce)SD192 x(a)S 191 x(list)S 190 x(of)S 191 x(empty)S 192 x(directories.)SE299 x(This)S 10773 X 548 y(quali\211er)S 167 x(can)S 166 x(be)S 166 xeG(combined)S 167 x(with)S 165 x(/ALIAS)S 166 x(and)S 166 x(/VERSION=n.)SrC10773 12736 XY F25(/FILL_F)S -38 x(ACT)S -14 x(OR=n)S 10773 X 597 y(DF151(Speci\211es)S 208 x(,in)S 209 x(percentage,)S 220 x(the)S 208 xG(\211lling)S 209 x(of)S 207 x(directory)S 209 x(blocks)S 208 x(during)S C209 x(a)S 10773 X 548 y(/COMPRESS)S 169 x(operation.)S 257 x(Fill)SxF169 x(factor)S 170 x(may)S 169 x(be)S 170 x(between)S 169 x(50)S 170 xG(and)S 169 x(100.)S 257 x(Omitti)S -2 x(ng)S 10773 X 548 y(this)S 166 x1C(quali\211er)S 167 x(is)S 166 x(the)S 167 x(same)S 166 x(as)S 165 x)C(/FILL_)S 2 x(F)S -37 x(ACTOR=10)S -2 x(0)S 167 x(\(maximum)S 166 x(H(compression\).)S 10773 X 548 y(If)S 169 x(the)S 169 x(directory)S 170 xG(has)S 169 x(not)S 169 x(enough)S 170 x(allocated)S 169 x(sp#f~ DFU024.BCKn[[DFU024.DOC]DFU024.PS;2])|ace)S 169 xsI(a)S 169 x(low)S 168 x(\211ll)S 170 x(factor)S 169 x(may)S 169 x(result)S1J10773 X 548 y(in)S 175 x(failure)S 175 x(of)S 175 x(the)S 175 x(Compress)SC174 x(operation.)S 267 x(DFU)S 175 x(will)S 174 x(issue)S 174 x(a)S H175 x(DFU-E-EX)S -2 x(TERR)S 10773 X 548 y(error)S -36 x(,)S 166 x(and)SE167 x(the)S 166 x(directory)S 167 x(\211le)S 166 x(will)S 165 x(not)S]R167 x(be)S 166 x(modi\211ed.)S 10773 17169 XY F25(/FORMA)S -53 x(T=format-string)SD10773 X 598 y F151(Create)S 184 x(an)S 185 x(output)S 184 x(\211le)SF185 x(in)S 184 x(a)S 185 x(format)S 184 x(described)S 184 x(by)S 184 xH(the)S 185 x(format)S 184 x(string.)S 286 x(The)S 10773 X 548 y(string)SF168 x(must)S 167 x(contain)S 167 x(the)S 168 x(!AS)S 167 x(directive)SF168 x(\(this)S 166 x(must)S 167 x(be)S 167 x(uppercase\).)S 253 x(At)SN166 x(the)S 168 x(!AS)S 10773 X 548 y(location)S 169 x(the)S 169 x(resultant)SG169 x(\211lename)S 170 x(will)S 168 x(be)S 169 x(\211lled)S 169 x(in.)S1H256 x(The)S 170 x(/OUTPUT)S 170 x(quali\211er)S 169 x(is)S 10773 X 548 yG(required.)S 10773 20507 XY F25(/OUTPUT=\211lename)S 10773 X 597 y F151xH(This)S 183 x(quali\211er)S 184 x(redirects)S 183 x(the)S 183 x(output)SE183 x(to)S 182 x(a)S 183 x(\211le.)S 284 x(The)S 184 x(output)S 183 xmE(will)S 182 x(also)S 182 x(go)S 184 x(to)S 10773 X 548 y(SYS$OUTPUT)ShD-46 x(.)S 10773 22748 XY F25(/ST)S -51 x(A)S -52 x(TISTICS)S 10773 XH598 y F151(This)S 184 x(quali\211er)S 185 x(displays)S 183 x(the)S 184 xD(performance)S 184 x(statistics)S -2 x(:)S 285 x(CPU)S 184 x(time,)SF188 x(Elapsed)S 10773 X 548 y(T)S -12 x(ime,)S 166 x(I/O)S 166 x(and)SC166 x(PageFau)S 2 x(lts.)S 10773 24990 XY F25(/TEST)S 10773 X 598 y IF151(The)S 193 x(/TEST)S 194 x(can)S 193 x(only)S 193 x(be)S 193 x(used)SeE193 x(in)S 193 x(conjunc)S 2 x(tion)S 192 x(with)S 193 x(/COMPRESS.)SxG192 x(The)S 10773 X 547 y(quali\211er)S 176 x(will)S 174 x(show)S 175 x1E(the)S 175 x(results)S 175 x(of)S 175 x(the)S 175 x(/COMPRESS)S 174 x(D(but)S 175 x(will)S 174 x(not)S 176 x(compress)S 10773 X 548 y(the)SF166 x(directory)S 167 x(\211le.)S 10773 27779 XY F25(/TRUNC)S -2 x(A)SK-52 x(TE=blocksize)S 10773 X 598 y F151(During)S 174 x(a)S 173 x(compress)SeF172 x(operation)S 173 x(truncate)S 173 x(the)S 173 x(directory)S 174 xM(back)S 173 x(to)S 173 x(the)S 173 x(blocksize)S 10773 X 548 y(speci\211ed.)S H252 x(If)S 166 x(blocksize)S 167 x(is)S 166 x(not)S 167 x(speci\211ed,)SD168 x(the)S 167 x(\211le)S 168 x(will)S 166 x(be)S 167 x(truncated)SG167 x(back)S 168 x(to)S 166 x(the)S 10773 X 548 y(end-of-\211le)S 163 x(C(block)S 164 x(number)S -36 x(.)S 249 x(T)S -30 x(runcation)S 164 xaG(will)S 162 x(always)S 163 x(be)S 163 x(rounded)S 164 x(up)S 163 x(to)SxG163 x(the)S 163 x(next)S 10773 X 548 y(highest)S 167 x(multiple)S 165 x L(of)S 166 x(the)S 167 x(disks)S 165 x(cluster)S 166 x(size.)S 10773 31117 XYNF25(/VERSION=n)S 10773 X 598 y F151(The)S 172 x(/VERSION)S 170 x(quali\211er)SE172 x(directs)S 171 x(DFU)S 171 x(to)S 172 x(scan)S 171 x(all)S 171 xSG(directories)S 172 x(on)S 172 x(the)S 171 x(device)S 10773 X 548 y(to)S,G167 x(produce)S 167 x(a)S 167 x(list)S 167 x(of)S 166 x(\211les)S 167 xiL(which)S 168 x(have)S 167 x(at)S 167 x(least)S 166 x('n')S 167 x(versions.)SE251 x(This)S 168 x(quali\211er)S 167 x(can)S 10773 X 547 y(be)S 166 xiH(combined)S 166 x(with)S 166 x(/ALIAS)S 166 x(and)S 166 x(/EMPTY)S -55 x (.)S 27427 36925 XY F36(7\2035)SEP PP %%PageTrailer)#%%PageFonts: Helvetica-Bold Courier00%%+ Helvetica-BoldOblique NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)3%(%%Page: (7-6) 32%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)( PaperHeight PaperWidth PM 0 0 XYE0 SC 5094 1807 XY F28(DIRECT)S -12 x(OR)S -22 x(Y)S 5094 36925 XY F369 (7\2036)S2EP PP) %%PageTrailer1%%PageFonts: Helvetica-Bold1%%PageProcessColors:%%PageCustomColors: (BLACK)(% %%Page: (8-1) 33%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYK0 SC 2404 5875 XY F12(8)S 5094 4546 XY 23160 48 R 5094 5443 XY F20(REPORT)S2G10773 8652 XY F151(This)S 157 x(chapter)S 158 x(describes)S 157 x(the)S4G157 x(REPORT)S 156 x(command)S 158 x(with)S 157 x(the)S 157 x(related)S(J157 x(parameters)S 10773 X 598 y(and)S 166 x(quali\211ers.)S 5094 10196 XYE23160 96 R 2404 10893 XY F24(8.1)S 5094 X(Description)S 10773 X 897 y LF151(The)S 180 x(REPORT)S 179 x(command)S 179 x(function)S 181 x(generates)SD180 x(a)S 179 x(report)S 180 x(of)S 179 x(the)S 180 x(\211le)S 180 xE(and)S 179 x(free)S 10773 X 598 y(space)S 177 x(fragmentation)S 179 x4D(of)S 177 x(the)S 178 x(disk.)S 272 x(Also)S 177 x(a)S 178 x(graph)SG178 x(may)S 178 x(be)S 178 x(generated)S 178 x(by)S 178 x(the)S 10773 X0C598 y(/GRAPH)S 169 x(quali\211er;)S 173 x(this)S 170 x(visualises)SiF169 x(the)S 170 x(free)S 170 x(space)S 170 x(distribution)S 170 x(on)SC170 x(your)S 171 x(disk.)S 10773 X 597 y(The)S 185 x(/USAGE)S 183 xsH(quali\211er)S 184 x(will)S 183 x(generate)S 185 x(a)S 184 x(diskspace)SC183 x(usage)S 185 x(report.)S 285 x(This)S 184 x(is)S 10773 X 598 y G(especially)S 166 x(usefull)S 166 x(if)S 166 x(DISKQ)S -2 x(UOT)S -27 x9H(A)S 165 x(is)S 166 x(not)S 166 x(enabled)S 166 x(on)S 167 x(the)S 166 xL(disk.)S 10773 X 897 y(The)S 190 x(default)S 190 x(report)S 190 x(contains)SC189 x(information)S 190 x(of)S 190 x(the)S 190 x(V)S -47 x(olume,)S1E197 x(\211les)S 189 x(and)S 190 x(the)S 10773 X 597 y(bitmap.)S 249 x8F(This)S 152 x(output)S 152 x(can)S 153 x(be)S 152 x(suppressed)S 151 xG(by)S 152 x(the)S 152 x(new)S 152 x(/NOVOLUME,)S 152 x(NOFILE)S 10773 X)E598 y(and)S 182 x(NOBITMAP)S 181 x(quali\211ers.)S 281 x(Also)S 181 x7F(the)S 182 x(/USAGE)S 181 x(quali\211er)S 182 x(can)S 182 x(be)S 182 xG(used)S 181 x(by)S 10773 X 598 y(displaying)S 172 x(information)S 171 x_N(of)S 171 x(a)S 171 x(speci\211c)S 172 x(UIC)S 170 x(or)S 171 x(Identi\211er)SI172 x(simply)S 171 x(by)S 171 x(specifying)S 10773 X 598 y(/USAGE=)S(J165 x(or)S 167 x(/USAGE=<)S -2 x(identi\211er>.)S 5094 18415 XY 23160 96 RI2404 19113 XY F24(8.2)S 5094 X(Syntax)S 166 x(and)S 166 x(Output)S -465 xlE896 y F151(The)S 167 x(syntax)S 167 x(of)S 166 x(the)S 166 x(report)SD166 x(command)S 166 x(is:)S 10773 X 897 y F102(DFU>)S 240 x(REPORT)SK239 x(device/QUALI)S 2 x(FIERS)S 10773 X 896 y F151(Below)S 165 x(follows)SaF165 x(an)S 167 x(example)S 166 x(and)S 166 x(output)S 167 x(of)S 166 xG(the)S 166 x(report)S 166 x(command:)S 10773 22998 XY F102(DFU>)S 240 xOJ(REPORT)S 239 x(USER3:/GRAPH)S 2 x(/USAGE)S 10773 X 747 y(%DFU-I-REPORT,)SJ241 x(Reporting)S 240 x(on)S 239 x(USER3:)S 240 x(\($1$DUA102:\))S 11251 XD747 y(*****)S 240 x(Volume)S 240 x(info)S 239 x(for)S 240 x(USER3:)SG239 x(\(from)S 240 x(HOME)S 239 x(block\))S 240 x(*****)S 11012 X 449 yxG(Volume)S 240 x(name)S 18903 X(:)S 478 x(USER3)S 11012 X 448 y(Volume)SxH240 x(owner)S 18903 X(:)S 478 x(SYSTEM)S 11012 X 448 y(Structure)S 240 xE(name)S 18903 X(:)S 11012 X 449 y(Clustersize)S 18903 X(:)S 478 x(3)SSJ11012 X 448 y(Maximum)S 240 x(#)S 239 x(files)S 18903 X(:)S 478 x(367618)SH11012 X 448 y(First)S 240 x(header)S 240 x(VBN)S 18903 X(:)S 478 x(103)SD11012 X 449 y(Header)S 240 x(count)S 18903 X(:)S 478 x(51547)S 240 xG(\(1\))S 11012 X 448 y(Free)S 240 x(headers)S 18903 X(:)S 478 x(10951)S1C240 x(\(2\))S 11251 X 747 y(*****)S 240 x(File)S 239 x(statistics)SLL241 x(\(from)S 239 x(INDEXF.SYS\))S 240 x(*****)S 11012 X 448 y(INDEXF.SYS)SD240 x(fragments)S 240 x(/map_in_use)S 241 x(:)S 478 x(21)S 239 x(/)SC239 x(61)S 240 x(\(39%)S 239 x(used\))S 718 x(\(3\))S 11012 X 449 yrF(Total)S 240 x(files)S 18903 X(:)S 478 x(40595)S 11012 X 448 y(Files)SD240 x(with)S 239 x(extension)S 240 x(headers)S 18903 X(:)S 478 x(0)SG11012 X 448 y(Files)S 240 x(marked)S 240 x(for)S 239 x(delete)S 18903 X D(:)S 478 x(19)S 239 x(,)S 239 x(size)S 240 x(:)S 239 x(25/63)S 240 xC(blocks)S 11012 X 449 y(Directory)S 240 x(files)S 18903 X(:)S 478 xSC(1957)S 11012 X 448 y(Empty)S 240 x(files)S 18903 X(:)S 478 x(177)SfG11012 X 448 y(Files)S 240 x(with)S 239 x(allocation)S 18903 X(:)S 478 x C(40418)S 11012 X 449 y(Contiguous)S 240 x(files)S 18903 X(:)S 478 x)F(40326)S 240 x(\(4\))S 11012 X 448 y(Total)S 240 x(size)S 239 x(used)SG240 x(/allocated)S 18903 X(:)S 478 x(2492431)S 240 x(/2533209)S 11012 XxG448 y(Total)S 240 x(fragments)S 18903 X(:)S 478 x(40770)S 11012 X 449 ySG(Average)S 240 x(fragments)S 240 x(per)S 239 x(file)S 18903 X(:)S 478 x)G(1.009)S 479 x(\(5\))S 11012 X 448 y(File)S 240 x(fragmentation)S 240 xSF(index)S 18903 X(:)S 478 x(0.692)S 240 x(\(excellent\))S 240 x(\(6\))SI11012 X 448 y(Average)S 240 x(size)S 240 x(per)S 239 x(fragment)S 18903 X5D(:)S 478 x(62)S 11012 X 449 y(Most)S 240 x(fragmented)S 240 x(file)SE18903 X(:)S 11730 X 448 y($1$DUA102:[LARGEUSER)S 2 x(]A.DAT;1)S 240 xcD(\()S 239 x(180/630)S 240 x(blocks;)S 239 x(30)S 479 x(fragments\))S27427 36925 XY F36(8\2031)SpEP PP) %%PageTrailer2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courierx%%PageProcessColors:%%PageCustomColors: (BLACK)(%S%%Page: (8-2) 34%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)5 PaperHeight PaperWidth PM 0 0 XYF0 SC 5094 1807 XY F28(REPORT)S 11251 4766 XY F102(*****)S 240 x(Free)SD239 x(space)S 240 x(statistics)S 240 x(\(from)S 240 x(BITMAP.SYS\))SC240 x(*****)S 11012 X 448 y(Total)S 240 x(blocks)S 240 x(on)S 239 xSF(disk)S 18903 X(:)S 478 x(2940951)S 11012 X 448 y(Total)S 240 x(free)SD239 x(blocks)S 18903 X(:)S 478 x(407742)S 11012 X 449 y(Percentage)SE240 x(free)S 240 x(\(rounded\))S 18903 X(:)S 478 x(13)S 11012 X 448 y4E(Total)S 240 x(free)S 239 x(extents)S 18903 X(:)S 478 x(260)S 11012 X7E448 y(Largest)S 240 x(free)S 240 x(extent)S 18903 X(:)S 478 x(42912)S(D240 x(blocks)S 239 x(at)S 240 x(LBN:)S 239 x(2463597)S 240 x(\(7\))SG11012 X 449 y(Average)S 240 x(extent)S 240 x(size)S 239 x(\(rounded\))ScP18903 X(:)S 478 x(1568)S 11012 X 448 y(Free)S 240 x(space)S 239 x(fragmentatio)SC2 x(n)S 239 x(index)S 718 x(:)S 478 x(0.191)S 240 x(\(excellent\))S1E240 x(\(6\))S 11012 X 747 y(%free--------)S 2 x(-------------------)S H2 x(--------------------)S 2 x(-------------------)S 11012 X 448 y(100)SF240 x(|)S 27989 X(|)S 11251 X 449 y(95)S 240 x(|)S 27989 X(|)S 11251 XE448 y(90)S 240 x(|)S 27989 X(|)S 11251 X 448 y(85)S 240 x(|)S 19142 X E(*)S 27989 X(|)S 11251 X 449 y(80)S 240 x(|)S 19142 X(*)S 27989 X(|)S3G11251 X 448 y(75)S 240 x(|)S 19142 X(*)S 27989 X(|)S 11251 X 448 y(70)SxF240 x(|)S 19142 X(*)S 25598 X(*)S 27989 X(|)S 11251 X 449 y(65)S 240 xE(|)S 19142 X(*)S 25598 X(*)S 27989 X(|)S 11251 X 448 y(60)S 240 x(|)S8H19142 X(*)S 25598 X(*)S 27989 X(|)S 11251 X 448 y(55)S 240 x(|)S 19142 XE(*)S 25598 X(*)S 27989 X(|)S 11251 X 449 y(50)S 240 x(|)S 17707 X(*)SaF19142 X(*)S 25119 X(*)S 240 x(*)S 27989 X(|)S 11251 X 448 y(45)S 240 xF(|)S 17707 X(*)S 19142 X(*)S 25119 X(*)S 240 x(*)S 26793 X(*)S 27989 XF(|)S 11251 X 448 y(40)S 240 x(|)S 17707 X(*)S 19142 X(**)S 25119 X(*)SF240 x(*)S 26793 X(*)S 27989 X(|)S 11251 X 449 y(35)S 240 x(|)S 17707 XF(*)S 19142 X(**)S 25119 X(*)S 240 x(*)S 26793 X(**)S 718 x(|)S 11251 XH448 y(30)S 240 x(|)S 17707 X(*)S 718 x(*)S 239 x(***)S 239 x(*)S 24402 XH(*)S 478 x(*)S 240 x(*)S 26793 X(**)S 718 x(|)S 11251 X 448 y(25)S 240 xE(|)S 15555 X(*)S 17468 X(**)S 718 x(*)S 239 x(***)S 239 x(*)S 23206 XnD(*)S 718 x(**)S 478 x(***)S 26793 X(**)S 239 x(*)S 240 x(|)S 11251 XC448 y(20)S 240 x(|)S 15555 X(*)S 17468 X(**)S 718 x(*)S 239 x(***)SPC239 x(*)S 23206 X(*)S 240 x(*)S 239 x(**)S 478 x(***)S 26793 X(**)SF239 x(*)S 240 x(|)S 11251 X 449 y(15)S 240 x(|)S 13642 X(*)S 479 x(*)SD478 x(*)S 239 x(*)S 718 x(*)S 239 x(*)S 239 x(**********)S 240 x(*)SC23206 X(*)S 240 x(*)S 239 x(**)S 478 x(***)S 26793 X(**)S 239 x(*)S)F240 x(|)S 11251 X 448 y(10)S 240 x(|)S 13642 X(*)S 479 x(*)S 478 x(*)SE239 x(*)S 718 x(***)S 239 x(**********)S 240 x(**)S 23206 X(*)S 240 x3E(*)S 239 x(**)S 239 x(****)S 26793 X(**)S 239 x(*)S 240 x(|)S 11490 XsC448 y(5)S 240 x(|)S 13642 X(*)S 479 x(*)S 478 x(*)S 239 x(*)S 239 xoF(*****)S 240 x(**************)S 23206 X(*)S 240 x(*)S 239 x(**)S 239 xK(****)S 26793 X(**)S 239 x(*)S 240 x(|)S 12208 X 449 y(------------------)S1E2 x(-------------------)S 2 x(-------------------)S 2 x(-----------)SpE11012 X 448 y(LBN:)S 240 x(0)S 27032 X(2940951)S 11012 X 448 y(Free)S8G240 x(space)S 239 x(distribution)S 2 x(,)S 239 x(each)S 239 x(*)S 240 xaC(=)S 478 x(2100)S 478 x(free)S 240 x(blocks)S 11251 X 748 y(*****)S4J240 x(Disk)S 239 x(Usage)S 240 x(Table)S 240 x(\(from)S 239 x(INDEXF.SYS)SK240 x(and)S 240 x(QUOTA.SYS\))S 240 x(*****)S 11012 X 448 y(Identifier/UI)SoE2 x(C)S 18424 X(Used/Alloca)S 2 x(ted)S 717 x(Headers)S 718 x(Quota)S(I240 x(Used/Perm)S 11012 X 448 y(-------------)S 2 x(-------------------)S(E2 x(--------------------)S 2 x(-------------------)S 2 x(--)S 11012 XSF449 y([SYSTEM])S 18424 X(499554/5056)S 2 x(26)S 22728 X(4954)S 24880 XH(510580/200000)S 2 x(0)S 11012 X 448 y([SSG,MRX])S 18664 X(42079/46356)SI22728 X(2259)S 25119 X(48615/60000)S 11012 X 448 y([SSG,TESTJE])S 18424 XSF(189306/2547)S 2 x(42)S 22728 X(4935)S 24880 X(259677/300000)S 11012 XC449 y([SSG,LARGEUSE)S 2 x(R])S 18664 X(47961/50238)S 22728 X(1648)S1E25119 X(51886/65000)S 11012 X 448 y(.)S -239 x 448 y(.)S -239 x 448 yxG(.)S -478 x 897 y F151(The)S 167 x(various)S 166 x(items)S 166 x(have)S6E167 x(the)S 166 x(following)S 166 x(meaning)S 167 x(:)S 10773 X 897 ySK(1)S 620 x(The)S 177 x(header)S 178 x(count)S 177 x(is)S 177 x(calculated)S1K177 x(based)S 176 x(on)S 177 x(the)S 177 x(size)S 176 x(of)S 177 x(INDEXF)S C-56 x(.SYS.)S 177 x(If)S 11670 X 597 y(more)S 166 x(headers)S 166 x E(are)S 166 x(needed)S 167 x(INDEX)S -2 x(F)S -55 x(.SYS)S 166 x(has)S1E166 x(to)S 166 x(be)S 166 x(extended.)S 10773 X 897 y(2)S 620 x(The)S.E183 x(free)S 183 x(headers)S 182 x(gives)S 184 x(the)S 182 x(number)S(G184 x(of)S 182 x(free)S 183 x(entries)S 182 x(in)S 183 x(INDEXF)S -56 x F(.SYS)S 11670 X 598 y(before)S 166 x(it)S 166 x(has)S 166 x(to)S 166 xD(extend.)S 10773 X 897 y(3)S 620 x(The)S 185 x(INDEXF)S -56 x(.SYS)SH185 x(number)S 185 x(of)S 185 x(fragments)S 185 x(and)S 185 x(mapwords)SI184 x(in)S 185 x(use)S 185 x(are)S 11670 X 597 y(very)S 182 x(important)SaE180 x(\211gures)S 181 x(to)S 181 x(determine)S 181 x(if)S 180 x(the)S D181 x(INDEX)S -2 x(F)S -55 x(.SYS)S 181 x(\211le)S 180 x(can)S 181 xE(be)S 11670 X 598 y(extended.)S 251 x(The)S 167 x(theoretical)S 167 xSF(maximum)S 167 x(number)S 167 x(of)S 167 x(mapwords)S 165 x(is)S 166 xG(155.)S 251 x(This)S 11670 X 598 y(value)S 171 x(may)S 170 x(be)S 170 x(H(less)S 169 x(if)S 170 x(there)S 171 x(are)S 170 x(ACL)S -28 x(')S -19 xK(s)S 170 x(on)S 170 x(INDEXF)S -56 x(.SYS.)S 170 x(Each)S 171 x(fragment,)S2D11670 X 598 y(and)S 181 x(therefore)S 181 x(each)S 182 x(retrieval)SD181 x(pointer)S 181 x(must)S 180 x(be)S 181 x(in)S 181 x(the)S 181 xD(mapword)S 181 x(area.)S 11670 X 597 y(As)S 182 x(the)S 182 x(size)SF182 x(of)S 183 x(a)S 182 x(retrieval)S 184 x(pointer)S 182 x(depends)SE183 x(on)S 183 x(the)S 183 x(physical)S 183 x(size)S 182 x(of)S 182 x(I(a)S 11670 X 598 y(disk,)S 191 x(it)S 186 x(is)S 186 x(not)S 186 x(easy)SuG187 x(to)S 186 x(say)S 186 x(how)S 186 x(many)S 187 x(fragments)S 187 xsF(INDEX)S -2 x(F)S -55 x(.SYS)S 186 x(can)S 11670 X 598 y(store)S 171 xG(in)S 171 x(the)S 171 x(mapwords)S 170 x(area.)S 260 x(If)S 171 x(the)S8F171 x(mapword)S 171 x(area)S 171 x(is)S 171 x(full)S 171 x(the)S 171 xF(INDEXF)S 11670 X 598 y(\211le)S 189 x(can)S 190 x(no)S 189 x(longer)SH191 x(extend,)S 196 x(and)S 189 x(creating)S 190 x(new)S 189 x(\211les)SH190 x(may)S 189 x(result)S 189 x(in)S 190 x(a)S 11670 X 597 y(SYSTEM-W)SE-20 x(-HEADER)S -2 x(FULL)S 167 x(error)S -36 x(.)S 10773 X 897 y(4)SSH620 x(Files)S 188 x(which)S 190 x(have)S 189 x(exactly)S 190 x(1)S 189 xF(retrieval)S 189 x(pointer)S 189 x(are)S 189 x(considered)S 190 x(to)SG188 x(be)S 11670 X 598 y(contiguous.)S 250 x(This)S 162 x(doesn')S -9 x C(t)S 161 x(mean)S 162 x(that)S 161 x(the)S 161 x(CONTIGUOUS)S 160 xiK(bit)S 161 x(is)S 161 x(set)S 161 x(in)S 161 x(the)S 11670 X 598 y(\211le)S 3166 x(header)S -36 x(.)S 5094 36925 XY F36(8\2032)SeEP PP %%PageTrailera#%%PageFonts: Helvetica-Bold Courier8%%+ NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)\%)%%Page: (8-3) 35%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)2 PaperHeight PaperWidth PM 0 0 XYJ0 SC 21779 1807 XY F24(REPORT)S 278 x(command)S 22718 X 797 y F28(Syntax)SC280 x(and)S 280 x(Output)S 10773 4866 XY F151(5)S 620 x(The)S 166 x9D(averag)S 2 x(e)S 166 x(fragments)S 166 x(per)S 166 x(\211le)S 167 xG(give)S 167 x(some)S 165 x(indication)S 167 x(about)S 166 x(the)S 166 x1D(total)S 165 x(\211le)S 11670 X 598 y(fragmentation.)S 10773 X 896 yF(6)S 620 x(The)S 183 x(\211le)S 183 x(and)S 183 x(free)S 183 x(space)SE183 x(fragmentation)S 183 x(index)S 184 x(classi\211es)S 182 x(your)SG184 x(disk)S 182 x(as)S 11670 X 598 y(follows)S 165 x(:)S 11670 X 897 y2D(\201)S 594 x(0-1)S 166 x(:)S 250 x(Excellent)S 11670 X 896 y(\201)SC594 x(1-2)S 166 x(:)S 250 x(Good)S 11670 X 897 y(\201)S 594 x(2-3)S%G166 x(:)S 250 x(Fair)S 11670 X 897 y(\201)S 594 x(3-4)S 166 x(:)S 250 x%E(Poor)S 11670 X 896 y(\201)S 594 x(>4)S 166 x(:)S 250 x(Bad)S 11670 XaF897 y(If)S 182 x(your)S 184 x(index)S 184 x(is)S 182 x(greater)S 183 xC(than)S 184 x(3)S 183 x(you)S 183 x(should)S 183 x(consider)S 183 x4E(defragmenting)S 11670 X 598 y(the)S 184 x(disk)S 185 x(using)S 185 x2E(Digitals)S 184 x(DFO)S 184 x(software,)S 189 x(or)S 184 x(by)S 185 xaE(performing)S 186 x(an)S 185 x(Image)S 11670 X 597 y(BACK)S -2 x(UP)S H166 x(/)S 167 x(Restore.)S 10773 X 897 y(7)S 620 x(The)S 152 x(largest)SF151 x(free)S 152 x(extent)S 152 x(is)S 151 x(a)S 152 x(usefull)S 151 xH(\211gu)S 2 x(re)S 151 x(for)S 152 x(defragmentation)S 152 x(purposes.)SD11670 X 598 y(Y)S -56 x(ou)S 167 x(cannot)S 166 x(defragment)S 167 xD(a)S 166 x(\211le)S 166 x(when)S 167 x(its)S 165 x(size)S 165 x(is)SG166 x(greater)S 166 x(than)S 167 x(this)S 166 x(value.)S 10773 16124 XY)D(The)S 191 x(disks)S 190 x(free)S 191 x(space)S 190 x(distribution)SF191 x(as)S 190 x(a)S 190 x(bar)S 191 x(graph.)S 299 x(On)S 191 x(the)SC191 x(horizontal)S 10773 X 598 y(axis)S 182 x(the)S 182 x(Logical)S-F182 x(Block)S 182 x(Number)S 182 x(\(LBN\))S 181 x(is)S 181 x(shown,)SD186 x(runn)S 2 x(ing)S 182 x(from)S 182 x(0)S 181 x(to)S 182 x(the)SD10773 X 597 y(maximum)S 151 x(block)S 152 x(number)S -36 x(.)S 249 xD(Each)S 152 x(*)S 151 x(represents)S 151 x(a)S 151 x(certain)S 151 xC(number)S 152 x(of)S 151 x(contiguo)S 2 x(us)S 10773 X 598 y(free)S F166 x(blocks.)S 10773 X 897 y(If)S 164 x(you)S 164 x(use)S 164 x(the)SH165 x(/USAGE)S 163 x(quali\211er)S 164 x(a)S 164 x(usage)S 165 x(table)SG163 x(will)S 163 x(be)S 164 x(added.)S 250 x(Per)S 164 x(Identi\211er)SXO10773 X 597 y(/)S 160 x(UIC)S 158 x(the)S 159 x(blocks)S 160 x(used/allocated)S J159 x(,)S 161 x(and)S 159 x(the)S 159 x(number)S 160 x(of)S 159 x(\211le)SC160 x(headers)S 159 x(are)S 159 x(shown.)S 10773 X 598 y(If)S 174 x9E(Diskquota)S 173 x(is)S 174 x(enabled)S 174 x(a)S 174 x(third)S 174 x(F(column)S 175 x(will)S 173 x(be)S 174 x(included)S 175 x(which)S 174 xH(shows)S 174 x(the)S 10773 X 598 y(blocks)S 180 x(used/permitted)S 179 xC(allowing)S 180 x(to)S 179 x(QUOT)S -28 x(A.SYS.)S 179 x(Normally)S)F180 x(quota)S 179 x(should)S 10773 X 598 y(satisfy)S 165 x(the)S 167 xD(following)S 166 x(rule)S 166 x(:)S 11012 X 896 y F102(Quota)S 240 xF(used)S 239 x(=)S 240 x(blocks)S 239 x(allocated)S 240 x(+)S 240 x(#)SN239 x(of)S 239 x(file)S 240 x(headers)S 5094 23928 XY 23160 48 R 5094 24924 XYGF20(REPORT)S 10773 26419 XY F34(Create)S 166 x(a)S 166 x(\211le)S 166 x*E(and)S 166 x(free)S 166 x(space)S 166 x(report)S 166 x(of)S 167 x(a)SSD166 x(disk)S 165 x(device.)S 5094 27614 XY 23160 204 R 5094 28632 XYJF24(FORMA)S -53 x(T)S 10773 X(REPORT)S 696 x F23(device[:])S 5094 29827 XYG23160 204 R 5094 30646 XY F24(P)S -51 x(ARA)S -2 x(METERS)S 849 x -22 y4GF25(device[:])S 10773 X 548 y F151(Device)S 166 x(to)S 166 x(be)S 166 x J(reported.)S 250 x(Y)S -56 x(ou)S 167 x(may)S 166 x(also)S 166 x(specify)SG166 x(a)S 166 x(logical)S 166 x(devicename.)S 5094 32368 XY 23160 204 R*E5094 33187 XY F24(QUALIFIERS)S 10773 X -22 y F25(/APPEND=\211lename)S1E10773 X 548 y F151(This)S 175 x(quali\211er)S 175 x(redirects)S 174 xpG(the)S 175 x(output)S 175 x(to)S 174 x(be)S 175 x(appended)S 174 x(to)SC175 x(an)S 175 x(already)S 175 x(existing)S 10773 X 548 y(\211le.)S G294 x(If)S 188 x(the)S 189 x(output)S 188 x(\211le)S 189 x(does)S 188 xI(not)S 188 x(exists)S 188 x(it)S 188 x(will)S 188 x(be)S 188 x(created.)SD294 x(Y)S -55 x(ou)S 188 x(can)S 189 x(use)S 10773 X 548 y(/APPEND)SO166 x(or)S 166 x(/OUTPUT)S 167 x(but)S 166 x(not)S 166 x(both.)S 27427 36925 XY4 F36(8\2033)SEP PP %%PageTrailer-2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman'%%+ Courier Helvetica Helvetica-Oblique-%%+ Helvetica-BoldOblique]%%PageProcessColors:%%PageCustomColors: (BLACK)8%X%%Page: (8-4) 36%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)4 PaperHeight PaperWidth PM 0 0 XYH0 SC 5094 1807 XY F24(REPORT)S 278 x(command)S 5094 X 797 y F28(REPORT)SH10773 5022 XY F25(/GRAPH)S 10773 X 598 y F151(This)S 185 x(quali\211er)SE185 x(generates)S 185 x(a)S 184 x(graph)S 185 x(table)S 184 x(which)S3G185 x(visualizes)S 184 x(the)S 185 x(free)S 184 x(space)S 10773 X 547 y6E(distribution)S 166 x(on)S 166 x(the)S 167 x(disk.)S 249 x(/NOGRAPH)S7F165 x(is)S 166 x(the)S 166 x(default.)S 10773 7263 XY F25(/NOBI)S -2 xF(TMAP)S 10773 X 598 y F151(The)S 167 x(/NOBITMAP)S 166 x(quali\211er)SI166 x(suppresses)S 165 x(the)S 167 x("Free)S 166 x(space)S 166 x(statis)S(F-2 x(tics")S 166 x(output.)S 10773 8957 XY F25(/NOFILE)S 10773 X 598 yGF151(The)S 167 x(/NOFILE)S 166 x(quali\211er)S 166 x(suppressed)S 166 x)O(the)S 166 x("File)S 166 x(Statistics)S -2 x(")S 166 x(output.)S 10773 10651 XYeHF25(/NOVOLU)S -2 x(ME)S 10773 X 597 y F151(The)S 167 x(/NOVOLUME)S 165 xF(quali\211er)S 167 x(suppresses)S 165 x(the)S 166 x("V)S -46 x(olume)SE166 x(info")S 166 x(output.)S 10773 12344 XY F25(/OUTPUT=\211lename)SSE10773 X 598 y F151(This)S 183 x(quali\211er)S 184 x(redirects)S 183 xrF(the)S 183 x(output)S 183 x(to)S 182 x(a)S 183 x(\211le.)S 284 x(The)SF184 x(output)S 183 x(will)S 182 x(also)S 182 x(go)S 184 x(to)S 10773 XE548 y(SYS$OUTPUT)S -46 x(.)S 10773 14586 XY F25(/ST)S -51 x(A)S -52 xSI(TISTICS)S 10773 X 598 y F151(This)S 184 x(quali\211er)S 185 x(displays)S G183 x(the)S 184 x(performance)S 184 x(statistics)S -2 x(:)S 285 x(CPU)SxH184 x(time,)S 188 x(Elapsed)S 10773 X 548 y(T)S -12 x(ime,)S 166 x(I/O)SH166 x(and)S 166 x(PageFau)S 2 x(lts.)S 10773 16827 XY F25(/USAGE\(=uic)SI165 x(or)S 167 x(identi\211er\))S 10773 X 598 y F151(The)S 192 x(/USAGE)S)M191 x(quali\211er)S 192 x(will)S 190 x(generate)S 192 x(a)S 192 x(diskspace)S(C191 x(usage)S 192 x(report)S 191 x(based)S 10773 X 548 y(on)S 200 xoC(Identi\211ers/UIC.)S 200 x(If)S 200 x(diskquota)S 199 x(is)S 199 x(I(enabled)S 200 x(on)S 200 x(the)S 200 x(disk)S 200 x(the)S 200 x(blocks)SSG10773 X 548 y(used/permitted)S 186 x(allowing)S 185 x(to)S 186 x(QUOT)SXG-28 x(A.SYS)S 185 x(will)S 184 x(also)S 186 x(be)S 185 x(shown.)S 289 xSF(/USAGE)S 10773 X 548 y(is)S 172 x(very)S 174 x(usefull)S 172 x(when)SC173 x(diskquota)S 173 x(is)S 172 x(not)S 172 x(enabled)S 173 x(on)S G173 x(the)S 173 x(disk.)S 262 x(When)S 173 x(a)S 172 x(uic)S 173 x(or)S(H10773 X 548 y(identi\211er)S 172 x(is)S 171 x(speci\211ed)S 171 x(only)SD172 x(the)S 171 x(information)S 172 x(for)S 171 x(this)S 171 x(uic)SE172 x(or)S 171 x(identi\211er)S 172 x(will)S 170 x(be)S 10773 X 548 y ((displayed.)S 5094 36925 XY F36(8\2034)SEP PP %%PageTrailerW1%%PageFonts: Helvetica-Bold Helvetica-BoldOblique(%%+ NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)S%0%%Page: (8-5) 37%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)6 PaperHeight PaperWidth PM 0 0 XYC0 SC 25767 1807 XY F28(REPOR)S -2 x(T)S -830 x 36925 Y F36(8\2035)S1EP PPN %%PageTraileri%%PageFonts: Helvetica-Bold)%%PageProcessColors:%%PageCustomColors: (BLACK)6%(%%Page: (9-1) 38%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYJ0 SC 2404 5875 XY F12(9)S 5094 4546 XY 23160 48 R 5094 5443 XY F20(SEARC)SC2 x(H)S 10773 8652 XY F151(This)S 153 x(chapter)S 154 x(describes)SoE153 x(the)S 153 x(SEARC)S -2 x(H)S 154 x(command)S 153 x(with)S 153 xRC(the)S 153 x(related)S 153 x(parameters)S 10773 X 598 y(and)S 166 x(H(quali\211ers.)S 5094 10196 XY 23160 96 R 2404 10893 XY F24(9.1)S 5094 XH(Introduction)S 10773 X 897 y F151(The)S 170 x(search)S 170 x(function)SL170 x(allows)S 169 x(very)S 170 x(quick)S 170 x(disk-wide)S 169 x(searches)SG169 x(for)S 170 x(speci\211c)S 170 x(\211les.)S 10773 X 598 y(Y)S -56 x8I(ou)S 167 x(can)S 166 x(use)S 167 x(almost)S 165 x(any)S 167 x(possible)S8D165 x(\211le)S 166 x(attribute)S 166 x(as)S 165 x(a)S 166 x(search)SD167 x(quali\211er)S -36 x(.)S 5094 13334 XY 23160 96 R 2404 14032 XYFF24(9.2)S 5094 X(Syntax)S 166 x(and)S 166 x(Output)S -465 x 896 y F151D(The)S 167 x(command)S 166 x(syntax)S 167 x(for)S 166 x(SEARC)S -2 xN(H)S 166 x(is:)S 10773 X 897 y F102(DFU>)S 240 x(SEARCH)S 239 x(device/quali)SD2 x(fiers)S 10773 X 897 y F151(The)S 180 x(output)S 179 x(is)S 178 xF(displayed)S 179 x(on)S 179 x(your)S 180 x(terminal.)S 275 x(Y)S -56 xF(ou)S 180 x(can)S 179 x(also)S 178 x(sort)S 179 x(the)S 179 x(output)SH10773 X 597 y(with)S 166 x(the)S 166 x(/SORT)S 166 x(quali\211er)S -36 xC(.)S 249 x(The)S 167 x(output)S 166 x(is)S 166 x(shown)S 166 x(in)S1H166 x(2)S 166 x(or)S 166 x(3)S 166 x(columns)S 167 x(eg:)S 10773 X 897 yJF102(DFU>)S 240 x(SEARCH)S 239 x(MYDISK/FILE=)S 2 x(X.X/FRAGMENT)S 11012 XN448 y(.)S -239 x 449 y(.)S -478 x 448 y($1$DUA102:[USE)S 2 x(R.COMMAND]X.X;1)SE20815 X(1/3)S 25119 X(1/1)S 11012 X 448 y(.)S -239 x 449 y(.)S -478 x(C896 y F151(The)S 173 x(\211rst)S 172 x(column)S 174 x(shows)S 171 xxD(the)S 173 x(full)S 172 x(\211le)S 173 x(name)S 173 x(.)S 262 x(As)SD172 x(of)S 172 x(this)S 172 x(version)S 173 x(of)S 172 x(DFU)S 173 xF(the)S 10773 X 598 y(device)S 174 x(name)S 174 x(is)S 173 x(included)SE174 x(in)S 173 x(the)S 174 x(\211le)S 174 x(name.)S 264 x(The)S 174 xhJ(second)S 174 x(columns)S 174 x(shows)S 172 x(the)S 10773 X 598 y(\211le)SD171 x(size)S 170 x(as)S 171 x(actual/allocated)S 171 x(size.)S 258 xC(The)S 172 x(3rd)S 171 x(column)S 171 x(is)S 171 x(optional)S 171 xSG(and)S 171 x(will)S 170 x(only)S 10773 X 597 y(be)S 163 x(shown)S 163 xrD(when)S 163 x(the)S 164 x(/FRAGMENT)S 162 x(quali\211er)S 164 x(is)SG162 x(used.)S 250 x(It)S 162 x(shows)S 163 x(the)S 163 x(number)S 164 x1G(of)S 10773 X 598 y(\211leheaders)S 167 x(/)S 166 x(number)S 167 x(of)S5H166 x(\211le)S 166 x(fragments.)S 5094 24692 XY 23160 96 R 2404 25389 XYIF24(9.3)S 5094 X(V)S -51 x(olume)S 166 x(Set)S 166 x(processing)S 10773 XuH897 y F151(SEARCH)S 174 x(checks)S 177 x(if)S 175 x(the)S 176 x(device)SE176 x(to-be-searched)S 176 x(is)S 175 x(member)S 176 x(of)S 176 x(a)S5F175 x(volume)S 177 x(set.)S 10773 X 597 y(If)S 180 x(so,)S 183 x(the)SC180 x(complete)S 180 x(volume)S 180 x(set)S 180 x(will)S 179 x(be)S1I180 x(processed,)S 183 x(starting)S 180 x(with)S 180 x(Relative)S 10773 XpF598 y(V)S -46 x(olume)S 181 x(Number)S 182 x(1)S 181 x(up)S 181 x(to)SE181 x(the)S 182 x(last)S 180 x(member)S 181 x(in)S 182 x(set.)S 279 x5G(Y)S -56 x(ou)S 182 x(can)S 182 x(override)S 182 x(this)S 10773 X 598 yoK(behaviour)S 167 x(with)S 166 x(the)S 166 x(/NOVOLSET)S 166 x(quali\211er)SxJ-37 x(.)S 5094 29025 XY 23160 96 R 2404 29723 XY F24(9.4)S 5094 X(Output)SH167 x(formatting)S -220 x 896 y F151(A)S 181 x(new)S 181 x(quali\211er)SI182 x(/FORMA)S -27 x(T)S 181 x(can)S 182 x(be)S 181 x(used)S 181 x(with)S(E181 x(SEARCH.)S 180 x(This)S 182 x(allows)S 180 x(the)S 10773 X 598 y J(build)S 177 x(up)S 176 x(of)S 176 x(a)S 177 x(command)S 176 x(procedure)SJ178 x(directly)S 176 x(from)S 177 x(the)S 176 x(output)S 177 x(generated)SD177 x(by)S 10773 X 598 y(the)S 166 x(SEARCH)S 165 x(command.)S 249 xC(/FORMA)S -27 x(T)S 166 x(has)S 166 x(the)S 166 x(following)S 167 xxD(restrictions)S 165 x(:)S 10773 X 897 y(1)S 620 x(/FORMA)S -28 x(T)SD177 x(is)S 177 x(only)S 178 x(valid)S 177 x(with)S 177 x(the)S 177 xF(/OUTPUT)S 178 x(quali\211er)S -36 x(,)S 180 x(and)S 177 x(can)S 178 xD(not)S 177 x(be)S 11670 X 597 y(used)S 166 x(together)S 167 x(with)SD165 x(the)S 166 x(/FULL)S 168 x(or)S 166 x(the)S 166 x(/SORT)S 166 xC(quali\211ers.)S 10773 X 897 y(2)S 620 x(The)S 171 x(format)S 171 x1E(string)S 171 x(used)S 171 x(must)S 171 x(contain)S 171 x(the)S 171 x H(!AS)S 171 x(directive)S 172 x(\(in)S 171 x(uppercase\).)S 11670 X 598 yO(The)S 166 x(\211le)S 167 x(found)S 166 x(will)S 166 x(be)S 166 x(substituted)SxF165 x(at)S 166 x(the)S 166 x(!AS)S 166 x(location)S 27427 36925 XY F36 (9\2031)SiEP PP %%PageTrailerk2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Couriero%%PageProcessColors:%%PageCustomColors: (BLACK)s%B%%Page: (9-2) 39%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)s PaperHeight PaperWidth PM 0 0 XYH0 SC 5094 1807 XY F24(SEARCH)S 278 x(command)S 5094 X 797 y F28(Output)SI280 x(formatting)S 487 x 4866 Y F151(Example:)S 10773 X 897 y F102(DFU>)SiD240 x(SEARCH/OUTP=DEL.COM)S 2 x(/FORMAT="$DELETE/CO)S 2 x(NF)S 239 xF(!AS"/FILE=*.LOG)S 241 x(mydisk)S 5094 7689 XY 23160 96 R 2404 8386 XYJF24(9.5)S 5094 X(UIC)S 165 x(and)S 166 x(identi\211er)S 166 x(processing)SG10773 X 897 y F151(This)S 170 x(version)S 170 x(introduces)S 170 x(an)S)D169 x(improved)S 170 x(handling)S 171 x(of)S 169 x(UIC')S -19 x(s.)SG255 x(Previou)S 2 x(s)S 169 x(versions)S 10773 X 598 y(of)S 187 x(DFU)SxC186 x(only)S 188 x(accepted)S 187 x(a)S 187 x(numeric)S 188 x(UIC)S1D186 x(in)S 187 x(the)S 187 x(/OWNER)S 186 x(qauli\211er)S 187 x(or)SD187 x(an)S 10773 X 597 y(identi\211er)S 186 x(in)S 186 x(the)S 186 xF(/IDENT)S 185 x(quali\211er)S -36 x(.)S 289 x(V2.4)S 186 x(now)S 185 xD(accepts)S 186 x(all)S 185 x(valid)S 186 x(uic)S 186 x(and)S 10773 XH598 y(identi\211er)S 192 x(formats)S 191 x(\(numeric)S 193 x(and)S 191 xC(alphanumeric\))S 193 x(in)S 192 x(the)S 192 x(/OWNER)S 190 x(and)S\I10773 X 598 y(/IDENT)S 173 x(quali\211ers.)S 265 x(T)S -45 x(echnically)SSD175 x(there)S 174 x(is)S 173 x(no)S 174 x(longer)S 174 x(any)S 175 xE(difference)S 174 x(between)S 10773 X 598 y(these)S 166 x(two)S 165 x6G(quali\211ers,)S 167 x(but)S 166 x(they)S 167 x(will)S 165 x(be)S 166 xxE(left)S 166 x(in)S 166 x(for)S 167 x(compatibility)S 165 x(reasons.)S(H5094 X 846 y 23160 48 R 5094 14115 XY F20(SEARC)S 2 x(H)S 10773 15609 XYGF34(Fast)S 167 x(\211le)S 166 x(search)S 166 x(through)S 166 x(INDEXF)SSG-55 x(.SYS.)S 5094 16805 XY 23160 204 R 5094 17822 XY F24(FORMA)S -53 x7M(T)S 10773 X(SEARCH)S 696 x F23(device)S -2 x([:])S 5094 19018 XY 23160 204 RnK5094 19837 XY F24(P)S -51 x(ARA)S -2 x(METERS)S 849 x -22 y F25(device[:])SdC10773 X 548 y F151(Device)S 166 x(to)S 166 x(be)S 166 x(searched.)SdC250 x(Y)S -55 x(ou)S 166 x(may)S 166 x(also)S 166 x(specify)S 166 x(P(a)S 166 x(logical)S 167 x(devicename.)S 5094 21558 XY 23160 204 R 5094 22377 XYHF24(DESCRIPTION)S 10773 X -156 y F151(The)S 177 x(SEARC)S -2 x(H)S 176 xN(command)S 176 x(is)S 176 x(used)S 176 x(for)S 176 x(quick)S 177 x(disk-wim~ DFU024.BCKn[[DFU024.DOC]DFU024.PS;2]z|Ode)SH175 x(searches)S 176 x(for)S 176 x(speci\211c)S 10773 X 598 y(\211les.)SC253 x(The)S 168 x(quali\211ers)S 169 x(describe)S 167 x(the)S 168 xxF(\211le)S 168 x(attributes)S 167 x(used)S 168 x(as)S 167 x(the)S 168 xD(search)S 168 x(criteria.)S 10773 X 598 y(Y)S -56 x(ou)S 183 x(can)SG182 x(combine)S 182 x(almost)S 181 x(all)S 181 x(of)S 182 x(the)S 182 xbJ(possible)S 180 x(quali\211ers,)S 187 x(unless)S 182 x(otherwise)S 10773 XJ598 y(speci\211ed.)S 250 x(Eg.:)S 10773 X 896 y F102(DFU>)S 240 x(SEARCH)SH239 x(DISK1/SIZE=M)S 2 x(IN=10/OWN=[1,4]/CRE)S 2 x(ATED=SINCE=YESTERDA)SH2 x(Y)S 10773 X 897 y F151(is)S 179 x(a)S 180 x(valid)S 179 x(command.)SF277 x(Note)S 179 x(that)S 180 x(quali\211ers)S 180 x(will)S 178 x(be)SE180 x(used)S 179 x(in)S 180 x(a)S 180 x(logical)S 180 x(AND)S 10773 XiD598 y(manner)S -36 x(,)S 157 x(that)S 154 x(is,)S 157 x(SEARC)S -2 xD(H)S 155 x(will)S 153 x(only)S 155 x(display)S 154 x(\211les)S 155 xI(which)S 154 x(obey)S 155 x(to)S 154 x(all)S 154 x(quali\211ers)S 10773 XPJ597 y(and)S 166 x(options)S 166 x(speci\211ed.)S 5094 28199 XY 23160 204 RH5094 29018 XY F24(QUALIFIERS)S 10773 X F25(/ALLOCA)S -53 x(TED)S 10773 XE547 y F151(Default,)S 204 x(SEARC)S -2 x(H)S 196 x(will)S 196 x(use)S5C196 x(the)S 196 x(actual)S 196 x(\211le)S 197 x(size.)S 309 x(The)S6F197 x(/ALLOCA)S -28 x(TED)S 10773 X 548 y(quali\211er)S 183 x(forces)SK183 x(SEAR)S -2 x(CH)S 182 x(to)S 183 x(use)S 182 x(the)S 183 x(allocated)SnG182 x(\211lesize.)S 282 x(This)S 183 x(quali\211er)S 183 x(is)S 10773 XrG548 y(only)S 167 x(meaningfull)S 167 x(if)S 166 x(you)S 167 x(combine)S N166 x(it)S 166 x(with)S 166 x(/SIZE.)S 10773 31757 XY F25(/APPEND=\211lename)SE10773 X 598 y F151(This)S 175 x(quali\211er)S 175 x(redirects)S 174 xSG(the)S 175 x(output)S 175 x(to)S 174 x(be)S 175 x(appended)S 174 x(to)S2C175 x(an)S 175 x(already)S 175 x(existing)S 10773 X 548 y(\211le.)SG294 x(If)S 188 x(the)S 189 x(output)S 188 x(\211le)S 189 x(does)S 188 xSI(not)S 188 x(exists)S 188 x(it)S 188 x(will)S 188 x(be)S 188 x(created.)SD294 x(Y)S -55 x(ou)S 188 x(can)S 189 x(use)S 10773 X 548 y(/APPEND)SN166 x(or)S 166 x(/OUTPUT)S 167 x(but)S 166 x(not)S 166 x(both.)S 5094 36925 XY F36(9\2032)SEP PPS %%PageTrailer72%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman'%%+ Courier Helvetica Helvetica-Oblique-%%+ Helvetica-BoldObliquex%%PageProcessColors:%%PageCustomColors: (BLACK) %)%%Page: (9-3) 40%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)M PaperHeight PaperWidth PM 0 0 XYH0 SC 21740 1807 XY F24(SEARCH)S 278 x(command)S 25734 X 797 y F28(SEAR)SG-2 x(CH)S 10773 5022 XY F25(/BACK)S -2 x(UP=option\(,option\))S 10773 X.E598 y F151(The)S 173 x(/BACKUP)S 171 x(quali\211er)S 172 x(is)S 171 x)C(used)S 172 x(to)S 172 x(search)S 172 x(\211les)S 172 x(depending)S6C173 x(on)S 172 x(their)S 172 x(backup)S 10773 X 547 y(date.)S 249 xUE(The)S 167 x(possible)S 165 x(options)S 166 x(are)S 166 x(:)S 10773 XnE897 y(\201)S 595 x(/BACKUP=B)S -2 x(EFORE=date)S 10773 X 897 y(\201)S)J595 x(/BACKUP=SI)S -2 x(NCE=date)S 10773 X 896 y(\201)S 595 x(/BACKUP=NO)SG-2 x(NE)S 10773 9953 XY(The)S 168 x(NONE)S 167 x(option)S 168 x(gives)S2F168 x(\211les)S 168 x(which)S 168 x(don')S -9 x(t)S 167 x(have)S 169 xD(a)S 167 x(backup)S 169 x(date)S 167 x(recorded.Th)S 2 x(e)S 10773 XD548 y(other)S 167 x(2)S 167 x(options)S 166 x(can)S 167 x(be)S 167 xI(used)S 166 x(to)S 167 x(get)S 166 x(\211les)S 167 x(which)S 167 x(have)S6G167 x(a)S 167 x(backup)S 167 x(date)S 166 x(before)S 167 x(or)S 10773 XoD548 y(after)S 169 x(a)S 170 x(speci\211c)S 169 x(date.)S 256 x(The)SC170 x(BEFORE)S 168 x(and)S 170 x(SINCE)S 168 x(option)S 169 x(can)SsK170 x(be)S 169 x(combined)S 170 x(in)S 10773 X 548 y(one)S 167 x(command.)S E10773 12693 XY F25(/BAKFI)S -2 x(D=backlink-\211le-id)S 10773 X 598 y LF151(Y)S -56 x(ou)S 174 x(can)S 175 x(use)S 173 x(this)S 173 x(quali\211er)SI175 x(to)S 173 x(look)S 174 x(for)S 174 x(a)S 173 x(\211le)S 174 x(with)SC173 x(a)S 174 x(speci\211c)S 174 x(backlink.)S 265 x(Only)S 10773 X7E548 y(the)S 172 x(\211rst)S 171 x(part)S 171 x(of)S 172 x(the)S 171 x(G(\211le)S 172 x(id)S 171 x(must)S 171 x(be)S 172 x(speci\211ed,)S 173 x D(that)S 172 x(is,)S 172 x(if)S 172 x(the)S 171 x(\211le)S 172 x(id)SF171 x(is)S 171 x(\(x,y)S -54 x(,z\))S 10773 X 548 y(you)S 180 x(must)SG178 x(specify)S 179 x('x')S 178 x(as)S 178 x(the)S 179 x(\211le)S 179 x5F(id.)S 275 x(Y)S -56 x(ou)S 180 x(can)S 179 x(use)S 179 x(this)S 178 xC(quali\211er)S 179 x(to)S 179 x(get)S 179 x(\211les)S 10773 X 548 y F(from)S 186 x(a)S 185 x(speci\211c)S 186 x(directory)S -54 x(.)S 289 xC(If)S 185 x(you)S 187 x(use)S 186 x(/BAKFID)S -2 x(=0)S 186 x(you)SxN187 x(will)S 185 x(get)S 186 x(\211les)S 185 x(not)S 10773 X 548 y(belonging)SH168 x(to)S 166 x(a)S 166 x(directory)S 166 x(\(often)S 166 x(temporary)SD167 x(\211les\).)S 10773 16578 XY F25(/CHAR)S -2 x(ACTERISTIC)S -2 xD(=\(char1,char2...\))S 10773 X 598 y F151(This)S 187 x(quali\211er)SD188 x(is)S 187 x(used)S 187 x(to)S 187 x(get)S 188 x(\211les)S 187 xE(with)S 187 x(speci\211c)S 187 x(\211le)S 187 x(characteristics.The)SdD10773 X 548 y(characteristics)S 166 x(can)S 166 x(have)S 167 x(the)SH167 x(following)S 166 x(values:)S 10773 X 897 y(\201)S 595 x(Directory)SF166 x(:)S 250 x(directory)S 166 x(\211les)S 10773 X 896 y(\201)S 595 xE(Nobackup)S 167 x(:)S 249 x(\211les)S 166 x(marked)S 167 x(nobackup)S G10773 X 897 y(\201)S 595 x(Contiguous)S 166 x(:)S 250 x(\211les)S 166 xSC(marked)S 166 x(as)S 166 x(contiguou)S 2 x(s)S 10773 X 897 y(\201)SxC595 x(Erase)S 165 x(:)S 250 x(erase)S 166 x(\211le)S 166 x(before)SlC166 x(deletion)S 10773 X 896 y(\201)S 595 x(Spool)S 166 x(:)S 249 xaD(spool)S 166 x(\211les)S 10773 X 897 y(\201)S 595 x(Badblock)S 166 xD(:)S 249 x(\211les)S 166 x(which)S 167 x(contain)S 166 x(suspected)SH166 x(bad)S 166 x(block\(s\))S 10773 X 897 y(\201)S 595 x(Badacl)S 165 xC(:)S 250 x(\211les)S 166 x(with)S 166 x(a)S 165 x(corrupted)S 167 x2E(ACL)S 10773 X 896 y(\201)S 595 x(Besttry)S 165 x(:)S 250 x(\211les)S G166 x(marked)S 166 x(contiguou)S 2 x(s-best-t)S -2 x(ry)S 10773 X 897 y F(\201)S 595 x(Scratch)S 166 x(:)S 250 x(\211les)S 166 x(marked)S 166 xK(as)S 166 x(scratch)S 166 x(\211les)S 10773 X 897 y(\201)S 595 x(Nocharge)S1E167 x(:)S 250 x(\211les)S 166 x(not)S 166 x(charged)S 167 x(against)S(K166 x(quota)S 10773 X 896 y(\201)S 595 x(Nomove)S 166 x(:)S 250 x(\211les)S7H166 x(marked)S 166 x(NoMove)S 167 x(\(VMS)S 166 x(5.5+\))S 10773 X 897 yC(\201)S 595 x(Locked)S 167 x(:)S 249 x(\211les)S 166 x(with)S 166 x(D(the)S 166 x(deaccess)S 166 x(lock)S 166 x(bit)S 166 x(set)S 10773 XD896 y(\201)S 595 x(Marked)S 167 x(:)S 249 x(\211les)S 166 x(marked)SE166 x(for)S 167 x(deletion)S 10773 X 897 y(\201)S 595 x(Noshelvable)S)E166 x(:)S 250 x(\211les)S 166 x(which)S 166 x(can)S 167 x(not)S 166 x1F(be)S 166 x(shelved)S 10773 X 897 y(\201)S 595 x(Isshelved)S 166 x(:)SH249 x(\211les)S 166 x(which)S 167 x(are)S 166 x(shelved)S 10773 32270 XYE(The)S 173 x(several)S 172 x(characteristics)S 172 x(can)S 172 x(be)S.F172 x(combined)S 173 x(in)S 172 x(one)S 173 x(command.If)S 172 x(you)SK173 x(want)S 10773 X 548 y(a)S 167 x(logical)S 167 x(OR)S 166 x(behaviour)ShE168 x(in)S 167 x(stead)S 166 x(of)S 166 x(the)S 167 x(default)S 167 x F(AND)S 166 x(behaviour)S -36 x(,)S 168 x(you)S 167 x(can)S 167 x(use)SC10773 X 547 y(the)S 166 x(special)S 166 x(option)S 166 x(MA)S -27 x(J(TCH=OR)S 164 x(eg:)S 11251 X 897 y F102(SEARCH)S 240 x(disk/CHAR=\(NOMO)S32 x(VE,DIR,MATCH=OR\))S 27427 36925 XY F36(9\2033)S5EP PP6 %%PageTrailer81%%PageFonts: Helvetica-Bold Helvetica-BoldOblique "%%+ NewCenturySchlbk-Roman Courier%%PageProcessColors:%%PageCustomColors: (BLACK) %x%%Page: (9-4) 41%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)r PaperHeight PaperWidth PM 0 0 XYH0 SC 5094 1807 XY F24(SEARCH)S 278 x(command)S 5094 X 797 y F28(SEARCH)SE10773 5022 XY F25(/CREA)S -53 x(TED=option\(,option\))S 10773 X 598 y CF151(The)S 159 x(/CREA)S -29 x(TED)S 158 x(quali\211er)S 159 x(is)S6H157 x(used)S 158 x(to)S 158 x(search)S 158 x(\211les)S 158 x(depending)SE159 x(on)S 159 x(their)S 158 x(creation)S 10773 X 547 y(date.)S 249 x(G(The)S 167 x(options)S 166 x(are)S 166 x(:)S 10773 X 897 y(\201)S 595 x C(/CREA)S -29 x(TED=BEFORE)S -2 x(=date)S 10773 X 897 y(\201)S 595 x)C(/CREA)S -29 x(TED=SINCE=)S -2 x(date)S 10773 9057 XY(These)S 171 xoC(2)S 170 x(options)S 170 x(can)S 171 x(be)S 170 x(used)S 171 x(to)SsF170 x(get)S 170 x(\211les)S 171 x(which)S 170 x(have)S 171 x(a)S 171 xH(creation)S 170 x(date)S 171 x(before)S 10773 X 548 y(or)S 170 x(after)SE169 x(a)S 169 x(speci\211c)S 169 x(date.)S 256 x(The)S 170 x(BEFORE)SAE168 x(and)S 169 x(SINCE)S 168 x(option)S 170 x(can)S 169 x(be)S 169 xnJ(combined)S 10773 X 548 y(in)S 166 x(one)S 167 x(command.)S 10773 11248 XYGF25(/EXCLUDE=\(\211le1,\211le2)S -2 x(...\))S 10773 X 598 y F151(This)SF193 x(quali\211er)S 194 x(is)S 192 x(used)S 193 x(to)S 193 x(exclude)SH194 x(\211les)S 192 x(from)S 193 x(the)S 193 x(search.)S 304 x(Y)S -56 xJ(ou)S 194 x(can)S 193 x(use)S 10773 X 548 y(wildcard)S 166 x(\211lenames)SG166 x(;)S 166 x(you)S 167 x(can)S 167 x(also)S 165 x(speci\211y)S 167 x4](a)S 166 x(list)S 165 x(of)S 166 x(\211les.)S 10773 13490 XY F25(/EXPIRED=option\(,option\))S C10773 X 598 y F151(The)S 197 x(/EXPIRED)S 194 x(quali\211er)S 197 xlN(is)S 195 x(used)S 196 x(to)S 196 x(search)S 196 x(\211les)S 196 x(depending)SG197 x(on)S 196 x(their)S 10773 X 548 y(expiration)S 167 x(date.)S 249 x8G(The)S 167 x(options)S 166 x(are)S 166 x(:)S 10773 X 896 y(\201)S 595 xSM(/EXPIRED)S -2 x(=BEFORE=d)S -2 x(ate)S 10773 X 897 y(\201)S 595 x(/EXPIRED)SxE-2 x(=SINCE=date)S 10773 X 897 y(\201)S 595 x(/EXPIRED)S -2 x(=NONE)S.D10773 18422 XY(The)S 204 x(NONE)S 202 x(option)S 203 x(gives)S 203 xE(\211les)S 203 x(which)S 204 x(don')S -9 x(t)S 202 x(have)S 204 x(a)S C203 x(expiration)S 204 x(date)S 10773 X 547 y(recorded.Th)S 2 x(e)SaD195 x(other)S 195 x(2)S 195 x(options)S 195 x(can)S 195 x(be)S 195 xI(used)S 195 x(to)S 195 x(get)S 195 x(\211les)S 195 x(which)S 195 x(have)S8F196 x(a)S 10773 X 548 y(expiration)S 175 x(date)S 174 x(before)S 174 xD(or)S 174 x(after)S 174 x(a)S 174 x(speci\211c)S 174 x(date.)S 265 xF(The)S 175 x(BEFORE)S 173 x(and)S 174 x(SINCE)S 10773 X 548 y(option)SD166 x(can)S 167 x(be)S 166 x(combined)S 166 x(in)S 166 x(one)S 167 xH(command.)S 10773 21161 XY F25(/FID=\211le-id)S 10773 X 598 y F151(The)SE169 x(/FID)S 169 x(quali\211er)S 169 x(is)S 168 x(a)S 168 x(special)S3D168 x(function)S 169 x(of)S 169 x(SEAR)S -2 x(CH.)S 169 x(It)S 168 xE(directs)S 168 x(SEARC)S -2 x(H)S 169 x(to)S 10773 X 548 y(go)S 167 xFE(directly)S 166 x(to)S 166 x(the)S 167 x(speci\211ed)S 166 x(\211le)S0F166 x(without)S 166 x(processing)S 167 x(the)S 166 x(rest)S 166 x(of)SD166 x(the)S 166 x(Index)S 167 x(\211le.)S 10773 X 548 y(Therefore,)SO181 x(you)S 178 x(cannot)S 177 x(combine)S 177 x(this)S 177 x(quali\211erwith)S1F177 x(other)S 177 x(search)S 177 x(quali\211ers)S 10773 X 548 y(such)SF180 x(as)S 179 x(/FILE.)S 181 x(Normally)S 179 x(a)S 180 x(\211le-id)SE179 x(consists)S 179 x(is)S 179 x(in)S 180 x(the)S 179 x(form)S 180 x=F(\(x,y)S -54 x(,z\))S 179 x(where)S 180 x(x)S 10773 X 548 y(is)S 180 xJ(the)S 180 x(number)S 181 x(of)S 180 x(the)S 180 x(\211le)S 180 x(header)SG181 x(within)S 180 x(INDEX)S -2 x(F)S -55 x(.SYS)S 180 x(y)S 181 x(is)SaC179 x(the)S 180 x(sequence)S 10773 X 548 y(number)S -36 x(,)S 176 x H(and)S 174 x(z)S 174 x(is)S 173 x(the)S 174 x(Relative)S 173 x(V)S -46 xC(olume)S 174 x(Number)S -36 x(.)S 265 x(Y)S -56 x(ou)S 174 x(only)S1D175 x(need)S 174 x(to)S 174 x(speci\211y)S 10773 X 548 y(the)S 166 xJ(x)S 167 x(value)S 167 x(in)S 166 x(the)S 166 x(/FID)S 166 x(quali\211er)SC-36 x(.)S 10773 26143 XY F25(/FILE=\(\211le1,\211le2...\))S 10773 X C597 y F151(This)S 175 x(quali\211er)S 175 x(is)S 174 x(used)S 174 x/C(to)S 174 x(search)S 175 x(for)S 175 x(\211les)S 174 x(with)S 174 x)F(a)S 174 x(speci\211c)S 175 x(\211le)S 175 x(name.Y)S -55 x(ou)S 175 xI(can)S 10773 X 548 y(use)S 166 x(wildcard)S 166 x(\211le)S 166 x(names;)S7D166 x(also)S 166 x(you)S 167 x(can)S 167 x(specify)S 166 x(a)S 166 xE(list)S 165 x(of)S 166 x(\211les.)S 10773 28384 XY F25(/FORMA)S -53 x7H(T=format-string)S 10773 X 598 y F151(Create)S 184 x(an)S 185 x(output)SD184 x(\211le)S 185 x(in)S 184 x(a)S 185 x(format)S 184 x(described)SI184 x(by)S 184 x(the)S 185 x(format)S 184 x(string.)S 286 x(The)S 10773 X C548 y(string)S 168 x(must)S 167 x(contain)S 167 x(the)S 168 x(!AS)SxM167 x(directive)S 168 x(\(this)S 166 x(must)S 167 x(be)S 167 x(uppercase\).)SxG253 x(At)S 166 x(the)S 168 x(!AS)S 10773 X 548 y(location)S 169 x(the)S(M169 x(resultant)S 169 x(\211lename)S 170 x(will)S 168 x(be)S 169 x(\211lled)S8F169 x(in.)S 256 x(The)S 170 x(/OUTPUT)S 170 x(quali\211er)S 169 x(is)SO10773 X 548 y(required.)S 10773 31722 XY F25(/FRAGMEN)S -2 x(T\(=\(MINIMUM=nr)SyE-38 x(,MAXIMUM=nr\)\))S 10773 X 597 y F151(This)S 175 x(quali\211er)S H176 x(displays)S 174 x(the)S 175 x(number)S 175 x(of)S 175 x(fragments)SJ175 x(and)S 175 x(\211le)S 175 x(headers)S 175 x(of)S 175 x(each)S 10773 XD548 y(\211le)S 175 x(found.)S 268 x(Y)S -55 x(ou)S 175 x(can)S 176 xH(further)S 175 x(limit)S 175 x(the)S 175 x(\211les)S 175 x(found)S 175 xC(by)S 176 x(using)S 175 x(the)S 175 x(MINIMUM)S 10773 X 548 y(and)S F166 x(MAXIMUM=)S 166 x(options.)S 249 x(For)S 167 x(example:)S 10773 XQ897 y F102(DFU>)S 240 x(disk/FRAG)S 10773 X 448 y(DFU>)S 240 x(disk/FRAG=min=10)S7N10773 X 449 y(DFU>)S 240 x(disk/FRAG=\(min=10,m)S 2 x(ax=100\))S 5094 36800 XY F36(9\2034)SEP PP6 %%PageTrailerc1%%PageFonts: Helvetica-Bold Helvetica-BoldObliques"%%+ NewCenturySchlbk-Roman Courier%%PageProcessColors:%%PageCustomColors: (BLACK)6%\%%Page: (9-5) 42%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)S PaperHeight PaperWidth PM 0 0 XYH0 SC 21740 1807 XY F24(SEARCH)S 278 x(command)S 25734 X 797 y F28(SEAR)SG-2 x(CH)S 10773 5593 XY F25(/FULL)S 10773 X 597 y F151(If)S 183 x(you)StC184 x(use)S 183 x(this)S 182 x(quali\211er)S 184 x(,)S 188 x(SEAR)S9I-2 x(CH)S 183 x(will)S 182 x(give)S 184 x(a)S 183 x(full)S 183 x(output)S2D183 x(for)S 184 x(each)S 183 x(\211le)S 10773 X 548 y(found.)S 258 xD(This)S 171 x(output)S 170 x(is)S 170 x(a)S 170 x(look-alike)S 170 xF(of)S 170 x(the)S 171 x(output)S 170 x(from)S 170 x(DIREC)S -2 x(TOR)SK-19 x(Y/FULL.)S 10773 X 548 y(Y)S -56 x(ou)S 167 x(cannot)S 167 x(combine)S(F166 x(this)S 166 x(quali\211er)S 166 x(with)S 166 x(/SORT)S 166 x(or)SE166 x(/SUMMAR)S -18 x(Y)S -56 x(.)S 10773 8382 XY F25(/HOME)S 10773 XdD598 y F151(This)S 181 x(quali\211er)S 181 x(directs)S 180 x(search)SE180 x(to)S 181 x(give)S 181 x(output)S 181 x(from)S 180 x(the)S 180 xrE(disk')S -18 x(s)S 180 x(home)S 180 x(block.)S 10773 X 548 y(SEARCH)SiE152 x(uses)S 153 x(the)S 153 x(home)S 154 x(block)S 154 x(for)S 153 x)F(calculating)S 155 x(the)S 153 x(free)S 154 x(and)S 153 x(used)S 154 xE(\211le)S 153 x(headers)S 10773 X 548 y(within)S 166 x(INDEXF)S -56 xhH(.SYS.)S 10773 11172 XY F25(/\(NO\)IDENT=identi\211er)S 165 x(or)S 166 xC(uic)S 10773 X 597 y F151(Y)S -56 x(ou)S 181 x(can)S 181 x(search)SxD181 x(for)S 180 x(\211les)S 180 x(owned)S 181 x(by)S 180 x(a)S 181 xF(speci\211c)S 180 x(identi\211er)S 181 x(or)S 181 x(uic.)S 278 x(Any)SG181 x(valid)S 10773 X 548 y(uic)S 177 x(or)S 176 x(identi\211er)S 177 xhD(format)S 175 x(may)S 177 x(be)S 176 x(used.)S 269 x(Another)S 177 xM(way)S 176 x(is)S 176 x(the)S 176 x(/OWNER_UIC)S 10773 X 548 y(quali\211er;)S1H167 x(you)S 166 x(cannot)S 166 x(combine)S 166 x(these)S 165 x(2)S 166 xF(quali\211ers)S 166 x(in)S 165 x(one)S 166 x(SEARCH)S 164 x(command.)SE10773 X 548 y(Issueing)S 178 x(/NOIDENT)S 178 x(directs)S 177 x(DFU)SG178 x(to)S 178 x(search)S 178 x(for)S 178 x(\211les)S 178 x(NOT)S 178 xD(owned)S 178 x(by)S 179 x(this)S 10773 X 548 y(IDENTIFIER)S -2 x(,)SQ167 x(eg:)S 250 x(DFU>)S 166 x(SEAR)S -2 x(CH)S 166 x(sys$sysdevice/NOIDENT=SYS)ScJ-2 x(TEM.)S 10773 15057 XY F25(/LBN=logical-block)S -2 x(-number)S 10773 XF598 y F151(The)S 178 x(/LBN)S 178 x(quali\211er)S 178 x(is)S 177 x(a)SH177 x(special)S 177 x(function)S 178 x(of)S 177 x(SEARCH.)S 177 x(This)SF177 x(allows)S 177 x(you)S 178 x(to)S 10773 X 548 y(\211nd)S 173 x(a)SJ172 x(\211le)S 172 x(which)S 172 x(contains)S 172 x(a)S 172 x(speci\211c)SF172 x(LBN.)S 173 x(This)S 172 x(may)S 172 x(be)S 172 x(usefull)S 172 xG(if)S 172 x(you)S 173 x(have)S 10773 X 548 y(bad)S 171 x(blocks)S 172 x0E(logged)S 173 x(in)S 171 x(the)S 172 x(error)S 172 x(log.)S 261 x(Y)S(C-55 x(ou)S 171 x(cannot)S 173 x(combine)S 172 x(/LBN)S 171 x(with)SaC172 x(search)S 10773 X 548 y(quali\211ers)S 166 x(such)S 167 x(as)S F166 x(/FILE.)S 10773 18395 XY F25(/\(NO\)OWNER_)S -2 x(UIC=uic)S 165 xH(or)S 167 x(identi\211er)S 10773 X 597 y F151(This)S 186 x(quali\211er)SD187 x(is)S 186 x(used)S 186 x(to)S 186 x(get)S 186 x(\211les)S 186 xG(owned)S 186 x(by)S 186 x(a)S 186 x(speci\211c)S 187 x(uic)S 186 x(or)S)F186 x(identi\211er)S -36 x(.)S 10773 X 548 y(Any)S 175 x(valid)S 174 xG(uic)S 175 x(or)S 175 x(identi\211er)S 174 x(format)S 174 x(may)S 175 x3G(be)S 174 x(used.)S 266 x(Y)S -55 x(ou)S 175 x(cannot)S 174 x(combine)S(D175 x(this)S 10773 X 548 y(quali\211er)S 174 x(with)S 173 x(/IDENT)SC-46 x(.)S 173 x(Specifying)S 174 x(/NOOWNER)S 172 x(directs)S 173 xxD(DFU)S 173 x(to)S 173 x(search)S 173 x(for)S 10773 X 548 y(\211les)SC166 x(NOT)S 166 x(owned)S 166 x(by)S 166 x(this)S 166 x(UIC)S 165 x9C(or)S 167 x(identi\211er)S -37 x(.)S 10773 21732 XY F25(/MODIFIED)SSK-2 x(=option\()S 2 x(,option\))S 10773 X 598 y F151(The)S 191 x(/MODIFIED)STE189 x(quali\211er)S 192 x(is)S 190 x(used)S 190 x(to)S 190 x(search)SH191 x(\211les)S 191 x(depending)S 191 x(on)S 191 x(their)S 10773 X 548 yG(modi\211cation)S 166 x(date.)S 250 x(The)S 166 x(options)S 166 x(are)S)C166 x(:)S 10773 X 896 y(\201)S 595 x(/MODIFIED)S -2 x(=BEFORE=dat)S3Q-2 x(e)S 10773 X 897 y(\201)S 595 x(/MODIFIED)S -2 x(=SINCE=date)S 10773 25767 XYxF(These)S 179 x(2)S 179 x(options)S 178 x(can)S 179 x(be)S 179 x(used)SG179 x(to)S 178 x(get)S 179 x(\211les)S 179 x(which)S 179 x(have)S 180 x(E(a)S 178 x(modi\211cation)S 179 x(date)S 10773 X 548 y(before)S 180 x D(or)S 180 x(after)S 180 x(a)S 180 x(speci\211c)S 180 x(date.)S 277 xD(The)S 180 x(BEFORE)S 179 x(and)S 180 x(SINCE)S 178 x(option)S 180 xG(can)S 181 x(be)S 10773 X 548 y(combined)S 166 x(in)S 167 x(one)S 166 x)F(command.)S 10773 27959 XY F25(/MUL)S -52 x(TIPLE)S 10773 X 597 y F151H(This)S 166 x(quali\211er)S 167 x(searches)S 166 x(for)S 166 x(\211les)SD166 x(which)S 167 x(have)S 167 x(more)S 166 x(than)S 166 x(1)S 166 xD(\211le)S 167 x(header)S -37 x(.)S 10773 29652 XY F25(/NOSEAR)S -2 xE(CH)S 10773 X 598 y F151(This)S 172 x(quali\211er)S 173 x(can)S 172 x)D(only)S 173 x(be)S 172 x(used)S 172 x(in)S 173 x(combination)S 172 xD(with)S 172 x(/HOME.)S 172 x(It)S 171 x(is)S 172 x(used)S 172 x(to)SE10773 X 548 y(get)S 166 x(the)S 167 x(Homeblock)S 166 x(info,)S 167 xoE(without)S 166 x(searching)S 167 x(the)S 166 x(entire)S 166 x(disk.)S1G10773 31894 XY F25(/NOVOLSET)S 10773 X 598 y F151(The)S 170 x(default)SD168 x(behaviour)S 170 x(of)S 169 x(SEARC)S -2 x(H)S 169 x(is)S 168 xD(to)S 169 x(process)S 168 x(an)S 169 x(entire)S 169 x(volume)S 170 xG(set.)S 254 x(Y)S -55 x(ou)S 10773 X 548 y(can)S 173 x(override)S 173 xxE(this)S 171 x(behaviou)S 2 x(r)S 172 x(with)S 172 x(/NOVOLSET)S -47 xdE(.)S 173 x(This)S 172 x(may)S 172 x(be)S 172 x(usefull)S 173 x(when)SxK10773 X 548 y(doing)S 167 x(a)S 166 x(/LBN)S 166 x(search.)S 27427 36800 XY F36(9\2035)SEP PPx %%PageTrailer)1%%PageFonts: Helvetica-Bold Helvetica-BoldObliqueN%%+ NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)7%(%%Page: (9-6) 43%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)x PaperHeight PaperWidth PM 0 0 XYH0 SC 5094 1807 XY F24(SEARCH)S 278 x(command)S 5094 X 797 y F28(SEARCH)SP10773 5022 XY F25(/OUTPUT=\211le)S 10773 X 598 y F151(This)S 179 x(quali\211er)SH179 x(redirects)S 178 x(the)S 179 x(output)S 179 x(from)S 178 x(SEARCH)SF177 x(to)S 178 x(an)S 179 x(output)S 179 x(\211le.This)S 10773 X 547 yF(\211le)S 184 x(can)S 184 x(later)S 184 x(be)S 184 x(used)S 184 x(as)SE183 x(input)S 184 x(to)S 184 x(the)S 184 x(DEFRA)S -2 x(G)S 184 x(,)S G184 x(DIREC)S -2 x(TOR)S -19 x(Y)S 184 x(or)S 184 x(SET)S 10773 X 548 y(J(command.)S 10773 7811 XY F25(/OVER_ALLO)S -2 x(CA)S -52 x(TED=n)S 10773 XE598 y F151(Searches)S 167 x(for)S 167 x(\211les)S 167 x(where)S 167 x H(the)S 167 x(difference)S 167 x(between)S 166 x(the)S 167 x(used)S 167 xC(and)S 167 x(allocated)S 166 x(size)S 10773 X 548 y(is)S 166 x(at)SmF165 x(least)S 166 x('n')S 165 x(blocks.)S 10773 10053 XY F25(/PLACED)SE10773 X 598 y F151(Checks)S 176 x(for)S 176 x(\211les)S 176 x(which)SeJ177 x(have)S 177 x(a)S 175 x(placement)S 177 x(control)S 176 x(retrieval)SH176 x(pointer)S -36 x(.This)S 177 x(is)S 10773 X 548 y(sometimes)S 165 xF(set)S 165 x(by)S 167 x(non-DEC)S 165 x(disk)S 166 x(defragmentation)SI167 x(programs.)S 10773 12294 XY F25(/SIZE=\(minimum=size1,maximum=size)SxE-2 x(2\))S 10773 X 598 y F151(The)S 192 x(/SIZE)S 192 x(quali\211er)S2F192 x(is)S 191 x(used)S 192 x(to)S 191 x(limit)S 191 x(\211les)S 192 xE(found)S 192 x(by)S 192 x(their)S 192 x(\211le)S 192 x(size.Y)S -56 xlE(ou)S 10773 X 548 y(can)S 184 x(either)S 184 x(use)S 184 x(minimum=)SnE183 x(or)S 184 x(maximum=)S 184 x(or)S 183 x(use)S 184 x(both)S 184 x1I(options)S 183 x(together)S -36 x(.)S 10773 X 548 y(SEARCH)S 174 x(will)S H176 x(use)S 176 x(the)S 176 x(actual)S 176 x(\211le)S 176 x(size)S 175 xE(for)S 176 x(selecting)S 176 x(\211les,)S 179 x(except)S 177 x(when)S(C176 x(the)S 10773 X 548 y(/ALLOCA)S -28 x(TED)S 166 x(quali\211er)ScD166 x(is)S 166 x(used.)S 10773 15632 XY F25(/SOR)S -13 x(T)S 10773 XE598 y F151(This)S 192 x(quali\211er)S 193 x(will)S 191 x(sort)S 192 xtG(the)S 192 x(\211les)S 192 x(found)S 192 x(before)S 192 x(being)S 193 xiC(output.)S 302 x(Y)S -56 x(ou)S 193 x(can)S 10773 X 548 y(combine)SnI205 x(this)S 205 x(with)S 204 x(the)S 205 x(/OUTPUT)S 205 x(quali\211er)S9E206 x(\(the)S 204 x(default)S 205 x(output)S 205 x(is)S 10773 X 548 ySC(SYS$OUTPUT\).)S 10773 18422 XY F25(/ST)S -51 x(A)S -52 x(TISTICS)S)D10773 X 597 y F151(This)S 184 x(quali\211er)S 185 x(displays)S 183 xH(the)S 184 x(performance)S 184 x(statistics)S -2 x(:)S 285 x(CPU)S 184 xC(time,)S 188 x(Elapsed)S 10773 X 548 y(T)S -12 x(ime,)S 166 x(I/O)SoC166 x(and)S 166 x(PageFau)S 2 x(lts.)S 10773 20663 XY F25(/SUMMAR)S(D-14 x(Y)S 10773 X 598 y F151(This)S 169 x(quali\211er)S 170 x(will)SE168 x(limit)S 168 x(the)S 169 x(output)S 169 x(to)S 169 x(the)S 169 x(G(total)S 168 x(number)S 170 x(of)S 168 x(\211les)S 169 x(found,)S 171 xeI(with)S 10773 X 548 y(their)S 185 x(size)S 185 x(\(and)S 185 x(optional)S1G185 x(the)S 185 x(fragmentation)S 186 x(when)S 185 x(/FRAG)S 185 x(is)ScK184 x(used\).)S 288 x(Y)S -56 x(ou)S 10773 X 548 y(cannot)S 167 x(combine)ScD166 x(/SUMMAR)S -18 x(Y)S 166 x(with)S 165 x(/FULL.)S 10773 23453 XYTF25(/VERSION_)S 10773 X 797 y(NUMBER)S -2 x(=\(minimum=version1,maximum=version2\))SM10773 25644 XY F151(The)S 170 x(/VERSIO)S -2 x(N_NUMBER)S 169 x(quali\211er)S1H170 x(is)S 168 x(used)S 169 x(search)S 170 x(for)S 169 x(\211les)S 169 xG(within)S 169 x(a)S 169 x(range)S 10773 X 548 y(of)S 159 x(speci\211c)SsH159 x(\211le)S 160 x(version)S 160 x(numbers.)S 250 x(Log\211les)S 160 xD(which)S 159 x(are)S 159 x(produced)S 160 x(with)S 159 x(the)S 159 xF(same)S 10773 X 548 y(name)S 171 x(may)S 172 x(pose)S 170 x(problems)SC171 x(when)S 171 x(they)S 172 x(reach)S 171 x(the)S 171 x(maximum)S1G172 x(version)S 171 x(number)S 10773 X 548 y(\(32767\).)S 249 x(Using)SSE167 x(/VERSIO)S -2 x(N=MIN=32000)S 166 x(is)S 165 x(a)S 166 x(quick)SmC167 x(way)S 166 x(to)S 166 x(\211nd)S 167 x(such)S 166 x(\211les.)S 5094 36925 XY F36(9\2036)SEP PP %%PageTrailer 1%%PageFonts: Helvetica-Bold Helvetica-BoldOblique %%+ NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)x%A%%Page: (9-7) 44%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)) PaperHeight PaperWidth PM 0 0 XYC0 SC 25734 1807 XY F28(SEAR)S -2 x(CH)S -831 x 36925 Y F36(9\2037)S(EP PP) %%PageTrailern%%PageFonts: Helvetica-Bold %%PageProcessColors:%%PageCustomColors: (BLACK) %7%%Page: (10-1) 451%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)c PaperHeight PaperWidth PM 0 0 XYO0 SC 23328 1807 XY F24(SET)S 280 x(command)S 2404 5875 XY F12(10)S 5094 4546 XY5K23160 48 R 5094 5443 XY F20(SET)S 10773 8652 XY F151(This)S 166 x(chapter)SrF167 x(describes)S 166 x(the)S 166 x(SET)S 166 x(command)S 167 x(with)SH165 x(the)S 167 x(related)S 166 x(parameters)S 166 x(and)S 10773 X 598 yI(quali\211ers.)S 5094 10196 XY 23160 96 R 2404 10893 XY F24(10.1)S 5094 XxD(Introduction)S 10773 X 897 y F151(The)S 185 x(SET)S 183 x(command)SC184 x(allows)S 183 x(you)S 184 x(to)S 184 x(modify)S 184 x(\211le)S1I184 x(attributes)S 183 x(which)S 184 x(can')S -9 x(t)S 184 x(be)S 10773 XxF598 y(modi\211ed)S 170 x(through)S 171 x(DCL)S 169 x(commands.)S 256 xK(Note)S 170 x(that)S 169 x(you)S 171 x(should)S 170 x(be)S 169 x(carefull)S H170 x(about)S 10773 X 598 y(using)S 191 x(this)S 189 x(function;)S 204 xH(you)S 191 x(may)S 190 x(easily)S 190 x(corrupt)S 190 x(\211les.)S 298 xO(NOTE:)S 190 x(This)S 190 x(much)S 10773 X 597 y(wanted)S 180 x(functionality)SF182 x(is)S 180 x(\211nally)S 182 x(introduced)S 182 x(in)S 181 x(VMS)SH180 x(6.0)S 181 x(with)S 181 x(a)S 180 x(new)S 181 x(DCL)S 10773 X 598 yG(command)S 177 x($SET)S 177 x(FILE/A)S -28 x(TTRIBUTES.)S 177 x(Still)SiK176 x(DFU')S -19 x(s)S 177 x(SET)S 176 x(has)S 177 x(some)S 177 x(options)SlD10773 X 598 y(which)S 180 x(are)S 181 x(not)S 180 x(in)S 180 x(SET)SJ180 x(FILE/A)S -27 x(TTRIBUTES)S 179 x(\(such)S 180 x(as)S 180 x(setting)SI180 x(a)S 180 x(BACKUP)S 10773 X 598 y(date\).)S 5094 17303 XY 23160 96 R0F2404 18000 XY F24(10.2)S 5094 X(UIC)S 165 x(and)S 166 x(identi\211er)SH166 x(processing)S 10773 X 897 y F151(As)S 169 x(of)S 169 x(this)S 169 xH(version)S 170 x(of)S 169 x(DFU)S 169 x(the)S 170 x(/OWNER)S 168 x(and)SF169 x(/IDENT)S 169 x(quali\211er)S 170 x(now)S 170 x(accepts)S 10773 XE597 y(all)S 166 x(valid)S 166 x(uic)S 167 x(or)S 166 x(identi\211er)S)D166 x(formats.)S 249 x(See)S 166 x(chapter)S 167 x(9.5)S 166 x(for)SO166 x(details.)S 5094 X 847 y 23160 48 R 5094 21338 XY F20(SET)S 10773 22832 XY)IF34(Modify)S 166 x(\211le)S 166 x(attributes.)S 5094 24027 XY 23160 204 R J5094 25045 XY F24(FORMA)S -53 x(T)S 10773 X(SET)S 698 x F23(\211le1,\211)SF-2 x(le2,...,@\211le)S 5094 26241 XY 23160 204 R 5094 27060 XY F24(P)SI-51 x(ARA)S -2 x(METERS)S 849 x F25(\211le1,\211le2,...)S -2 x(,@\211le)S-D10773 X 547 y F151(The)S 175 x(\211les)S 174 x(to)S 174 x(be)S 175 xC(modi\211ed.)S 266 x(The)S 175 x(attributes)S 173 x(to)S 175 x(be)SxG174 x(modi\211ed)S 174 x(are)S 175 x(speci\211ed)S 174 x(with)S 10773 XxC548 y(quali\211ers.)S 257 x(W)S -19 x(ildcards)S 170 x(area)S 169 xhF(allowed)S 169 x(in)S 170 x(the)S 170 x(\211lename.)S 257 x(An)S 170 xF(indirect)S 170 x(\211le)S 170 x(can)S 170 x(be)S 10773 X 548 y(used)SI170 x(by)S 171 x(using)S 170 x(the)S 171 x(@)S 170 x(sign.)S 258 x(This)S1E170 x(allows)S 169 x(processing)S 170 x(of)S 170 x(a)S 170 x(\211le)SSF171 x(list)S 169 x(produced)S 171 x(by)S 10773 X 548 y(a)S 166 x(DFU)SO166 x(SEARC)S -2 x(H)S 166 x(command.)S 5094 30447 XY 23160 204 R 5094 31265 XYtIF24(QUALIFIERS)S 10773 X F25(/BACK)S -2 x(UP_DA)S -53 x(TE=date)S 10773 XxM797 y(/NOBA)S -2 x(CKUP_D)S -2 x(A)S -52 x(TE)S 10773 X 548 y F151(Controls)SaG183 x(whether)S 185 x(a)S 183 x(new)S 184 x(backup)S 184 x(date)S 184 x:G(is)S 183 x(assigned)S 184 x(to)S 184 x(the)S 183 x(speci\211ed)S 184 xeN(\211les.)S 10773 X 548 y(Specify)S 170 x(the)S 169 x(date)S 169 x(according)SG171 x(to)S 169 x(the)S 170 x(rules)S 169 x(described)S 170 x(in)S 169 xeE(Chapter)S 170 x(1)S 169 x(of)S 169 x(the)S 170 x(VMS)S 10773 X 548 yaE(DCL)S 157 x(Concepts)S 157 x(Manual.)S 250 x(Absolute)S 157 x(date)S3D157 x(keywords)S 157 x(are)S 158 x(allowed.)S 248 x(If)S 157 x(you)SF158 x(specify)S 10773 X 548 y(0)S 169 x(as)S 169 x(the)S 169 x(date,)SD171 x(today')S -19 x(s)S 169 x(date)S 169 x(is)S 169 x(used.)S 256 xD(If)S 168 x(you)S 170 x(specify)S 170 x(/NOBACK)S -2 x(UP_DA)S -28 xE(TE)S 169 x(the)S 10773 X 548 y(Backup)S 167 x(date)S 165 x(\211eld)SRE167 x(will)S 165 x(be)S 166 x(cleared.)S 27150 36925 XY F36(10\2031)S8EP PP2 %%PageTrailer-2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman5%%+ Helvetica Helvetica-Oblique Helvetica-BoldObliquee%%PageProcessColors:%%PageCustomColors: (BLACK)6%(%%Page: (10-2) 46S%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYP0 SC 5094 1807 XY F24(SET)S 280 x(command)S 5094 X 797 y F28(SET)S 10773 5022 XYEF25(/BADA)S -2 x(CL)S 10773 X 797 y(/NOBA)S -2 x(DACL)S 10773 X 598 yxCF151(Sets)S 171 x(or)S 172 x(resets)S 172 x(the)S 172 x('BAD)S -2 xsE(ACL)S -28 x(')S 172 x(\212ag)S 172 x(in)S 173 x(the)S 172 x(\211le)SdF172 x(header)S -36 x(.)S 261 x(This)S 172 x(enables)S 172 x(deletion)SH10773 X 547 y(of)S 166 x(a)S 166 x(\211le)S 166 x(with)S 166 x(a)S 166 xF(corrupted)S 167 x(ACL.)S 10773 8060 XY F25(/BUCK)S -2 x(ETSIZE=size)SC10773 X 598 y F151(Sets)S 165 x(a)S 166 x(new)S 166 x(value)S 167 x1E(for)S 166 x(the)S 167 x(bucket)S 166 x(size)S 166 x(in)S 166 x(the)SeC166 x(\211le)S 166 x(header)S -36 x(.)S 10773 9754 XY F25(/CONFIR)SeG-2 x(M)S 10773 X 797 y(/NOCO)S -2 x(NFIRM)S 165 x(\(default\))S 10773 X E598 y F151(Controls)S 167 x(whether)S 168 x(a)S 167 x(request)S 168 x\C(is)S 167 x(issued)S 167 x(before)S 167 x(each)S 168 x(individual)S H168 x(SET)S 167 x(operation)S 10773 X 548 y(to)S 172 x(con\211rm)S 173 xE(that)S 171 x(the)S 173 x(operation)S 172 x(should)S 172 x(be)S 172 xSG(performed)S 172 x(on)S 172 x(that)S 172 x(\211le.)S 262 x(When)S 172 xSH(the)S 10773 X 548 y(system)S 166 x(issues)S 165 x(the)S 166 x(prompt,)SH166 x(you)S 167 x(can)S 167 x(issue)S 165 x(any)S 167 x(of)S 166 x(the)SE166 x(following)S 167 x(responses:)S 11251 X 896 y F102(YES)S 13403 X H(NO)S 15077 X(QUIT)S 11251 X 449 y(TRUE)S 13403 X(FALSE)S 479 x(CTRL/Z)SI11251 X 448 y(1)S 13403 X(0)S 15077 X(ALL)S 13403 X 448 y()S 10773 X C897 y F151(Y)S -56 x(ou)S 184 x(can)S 184 x(use)S 184 x(any)S 184 xpN(combination)S 184 x(of)S 184 x(upper)S -9 x(-)S 183 x(and)S 184 x(lowercase)SC183 x(letters)S 183 x(for)S 184 x(word)S 10773 X 548 y(responses.)S(D290 x(W)S -28 x(ord)S 187 x(responses)S 186 x(can)S 187 x(be)S 187 xC(abbreviated)S 186 x(to)S 187 x(one)S 187 x(or)S 186 x(more)S 187 x(E(letters)S 10773 X 548 y(\(for)S 182 x(example,)S 186 x(T)S -45 x(,)S D182 x(TR,)S 182 x(or)S 182 x(TRU)S 182 x(for)S 181 x(TRUE\).)S 182 xG(Af\211rmative)S 182 x(answers)S 181 x(are)S 182 x(YES,)S 10773 X 548 yxF(TRUE,)S 168 x(and)S 168 x(1.)S 253 x(Negative)S 168 x(answers)S 167 xG(are)S 168 x(NO,)S 168 x(F)S -37 x(ALSE,)S 168 x(0,)S 169 x(and)S 168 x)J(.)S 252 x(QUIT)S 167 x(or)S 10773 X 548 y(CTRL/Z)S 175 x(indicates)SC174 x(that)S 174 x(you)S 175 x(want)S 173 x(to)S 174 x(stop)S 174 xvI(processing)S 175 x(the)S 174 x(command)S 174 x(at)S 174 x(that)S 10773 XxD548 y(point.)S 271 x(When)S 177 x(you)S 178 x(respond)S 177 x(with)SE176 x(ALL,)S 178 x(the)S 177 x(command)S 176 x(continues)S~u~ DFU024.BCKn[[DFU024.DOC]DFU024.PS;2]bv| 178 x(to)S E176 x(process,)S 10773 X 548 y(but)S 167 x(no)S 167 x(further)S 168 x1C(prompts)S 166 x(are)S 166 x(given)S 2 x(.)S 251 x(If)S 166 x(you)SpH168 x(type)S 167 x(a)S 166 x(response)S 167 x(other)S 167 x(than)S 167 xD(one)S 167 x(of)S 10773 X 548 y(those)S 166 x(in)S 166 x(the)S 167 xM(list,)S 165 x(the)S 167 x(prompt)S 165 x(will)S 166 x(be)S 166 x(reissued.)S5J10773 20314 XY F25(/CONTIG)S -2 x(UOUS_B)S -2 x(EST_TR)S -13 x(Y)S 10773 XE797 y(/NOCO)S -2 x(NTIGUO)S -2 x(US_BEST_TR)S -14 x(Y)S 10773 X 598 y CF151(Sets)S 165 x(or)S 167 x(resets)S 165 x(the)S 166 x('CONTIGUO)SeE-2 x(US_BEST_TR)S -19 x(Y')S 165 x(bit)S 166 x(in)S 166 x(the)S 166 xnC(\211le)S 167 x(header)S -37 x(.)S 10773 22805 XY F25(/CREA)S -53 xH(TION_D)S -2 x(A)S -52 x(TE=date)S 10773 X 797 y(/NOCR)S -2 x(EA)S -52 xK(TION_D)S -2 x(A)S -52 x(TE)S 10773 X 598 y F151(Controls)S 180 x(whether)S0D182 x(a)S 180 x(new)S 181 x(creation)S 181 x(date)S 181 x(is)S 180 xG(assigned)S 181 x(to)S 180 x(the)S 181 x(speci\211ed)S 181 x(\211les.)SmH10773 X 548 y(Specify)S 170 x(the)S 169 x(date)S 169 x(according)S 171 xL(to)S 169 x(the)S 170 x(rules)S 169 x(described)S 170 x(in)S 169 x(Chapter)SF170 x(1)S 169 x(of)S 169 x(the)S 170 x(VMS)S 10773 X 548 y(DCL)S 157 xJ(Concepts)S 157 x(Manual.)S 250 x(Absolute)S 157 x(date)S 157 x(keywords)SC157 x(are)S 158 x(allowed.)S 248 x(If)S 157 x(you)S 158 x(specify)SmE10773 X 548 y(0)S 166 x(as)S 166 x(the)S 166 x(date,)S 166 x(today')SxL-18 x(s)S 165 x(date)S 166 x(is)S 166 x(used.)S 10773 26940 XY F25(/DIRECT)SG-14 x(OR)S -13 x(Y)S 10773 X 797 y(/NODI)S -2 x(RECT)S -13 x(OR)S -13 x1D(Y)S 10773 X 597 y F151(Sets)S 178 x(or)S 179 x(resets)S 177 x(the)SH179 x(directory)S 179 x(attribute)S 178 x(of)S 179 x(a)S 178 x(\211le.)SC275 x(This)S 179 x(quali\211er)S 179 x(allows)S 177 x(you)S 10773 XxF548 y(to)S 175 x(set)S 174 x(the)S 175 x(directory)S 175 x(bit)S 174 xL(of)S 175 x(a)S 175 x(\211le)S 175 x(which)S 175 x(was)S 173 x(mistakingly)SN176 x(reset)S 174 x(by)S 175 x(the)S 175 x('SET)S 10773 X 548 y(FILE/NODIREC)SG-2 x(TOR)S -19 x(Y')S 166 x(command.)S 250 x(If)S 166 x(it)S 166 x(is)S G166 x(done)S 167 x(on)S 167 x(a)S 166 x(non-directory)S 168 x(\211le,)S8M167 x(then)S 10773 X 548 y(access)S 166 x(to)S 166 x(that)S 166 x(directory)SSE166 x(will)S 166 x(give)S 167 x(a)S 166 x('BAD)S -2 x(IRECTOR)S -20 x)J(Y')S 165 x(error)S -36 x(.)S 10773 31074 XY F25(/EBLOCK)S -2 x([=block])SH10773 X 598 y F151(This)S 170 x(quali\211er)S 170 x(will)S 169 x(reset)SE169 x(the)S 169 x(end-of-\211le)S 170 x(mark)S 170 x(to)S 169 x(the)SsH170 x(highest)S 170 x(block)S 170 x(allocated)S 10773 X 548 y(if)S 165 xG(no)S 166 x(block)S 166 x(has)S 166 x(been)S 166 x(speci\211ed.)S 249 x6H(Otherwise)S 165 x(the)S 166 x(end-of-\211le)S 166 x(mark)S 165 x(will)SI165 x(be)S 166 x(set)S 165 x(to)S 10773 X 548 y(the)S 166 x(speci\211ed)SND166 x(block.)S 10773 33864 XY F25(/EBYTE[=byte])S 10773 X 597 y F151F(This)S 167 x(quali\211er)S 167 x(will)S 165 x(set)S 166 x(the)S 166 xG(end-of-\211le)S 167 x(byte)S 167 x(mark)S 166 x(to)S 167 x(the)S 166 x5G(highest)S 167 x(byte)S 167 x(if)S 166 x(it)S 166 x(has)S 10773 X 548 y0F(not)S 174 x(been)S 174 x(speci\211ed.)S 265 x(Otherwise)S 173 x(the)SG174 x(end-of-\211le)S 174 x(byte)S 174 x(mark)S 175 x(will)S 173 x(be)SED173 x(set)S 174 x(to)S 173 x(the)S 10773 X 548 y(speci\211ed)S 166 x$(byte.)S 5094 36800 XY F36(10\2032)SEP PP2 %%PageTrailer 1%%PageFonts: Helvetica-Bold Helvetica-BoldOblique "%%+ NewCenturySchlbk-Roman Courier%%PageProcessColors:%%PageCustomColors: (BLACK)e%1%%Page: (10-3) 477%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)t PaperHeight PaperWidth PM 0 0 XYD0 SC 23328 1807 XY F24(SET)S 280 x(command)S 27095 X 797 y F28(SET)SC10773 5022 XY F25(/EXPIRA)S -52 x(TION_D)S -2 x(A)S -52 x(TE=date)S(D10773 X 797 y(/NOEXPIRA)S -53 x(TION_D)S -2 x(A)S -52 x(TE)S 10773 XC598 y F151(Controls)S 185 x(whether)S 186 x(an)S 186 x(expiration)SoE186 x(date)S 185 x(is)S 185 x(assigned)S 185 x(to)S 186 x(the)S 185 xtC(speci\211ed)S 186 x(\211les.)S 10773 X 547 y(Specify)S 170 x(the)SEC169 x(date)S 169 x(according)S 171 x(to)S 169 x(the)S 170 x(rules)SXG169 x(described)S 170 x(in)S 169 x(Chapter)S 170 x(1)S 169 x(of)S 169 x7G(the)S 170 x(VMS)S 10773 X 548 y(DCL)S 157 x(Concepts)S 157 x(Manual.)SCK250 x(Absolute)S 157 x(date)S 157 x(keywords)S 157 x(are)S 158 x(allowed.)S C248 x(If)S 157 x(you)S 158 x(specify)S 10773 X 548 y(0)S 166 x(as)SeE166 x(the)S 166 x(date,)S 166 x(today')S -18 x(s)S 165 x(date)S 166 xSF(is)S 166 x(used.)S 10773 9156 XY F25(/IDENT=identi\211er)S 165 x(or)SH167 x(uic)S 10773 X 598 y F151(Modify)S 207 x(the)S 207 x(\211le)S 206 xG(ownership.)S 331 x(See)S 206 x(also)S 206 x(/OWNER_UIC.)S 206 x(This)SeD206 x(allows)S 10773 X 548 y(modi\211cation)S 161 x(of)S 161 x(the)SK161 x(\211le-ownership)S 161 x(even)S 161 x(if)S 161 x(the)S 161 x(\211le)S9I161 x(is)S 160 x(open,)S 163 x(eg.)S 250 x(INDEX)S -2 x(F)S -55 x(.SYS.)S2D10773 X 548 y(Y)S -56 x(ou)S 167 x(cannot)S 167 x(use)S 166 x(both)SE166 x(/IDENT)S 166 x(and)S 166 x(/OWNER_UIC)S -2 x(.)S 10773 11946 XYlIF25(/LOCKED)S 10773 X 797 y(/NOLOC)S -2 x(KED)S 10773 X 598 y F151(This)S8F168 x(quali\211er)S 168 x(will)S 167 x(lock)S 167 x(a)S 168 x(\211le)SD168 x(for)S 167 x(future)S 168 x(use.)S 253 x(Nothing)S 168 x(else)SE167 x(can)S 168 x(then)S 168 x(be)S 167 x(done)S 10773 X 548 y(with)SaE176 x(the)S 177 x(\211le,)S 181 x(until)S 177 x(it)S 176 x(is)S 176 xeF(unlock)S 2 x(ed)S 176 x(\(which)S 177 x(can)S 178 x(also)S 176 x(be)SJ177 x(done)S 177 x(with)S 176 x(the)S 177 x(VMS)S 10773 X 547 y('UNLOCK')SF164 x(command.)S 10773 15532 XY F25(/LOG)S 165 x(\(default\))S 10773 XH797 y(/NOLOG)S 10773 X 598 y F151(Controls)S 170 x(whether)S 171 x(the)SG171 x(SET)S 170 x(command)S 170 x(displays)S 170 x(the)S 171 x(\211le)STF171 x(speci\211cation)S 170 x(of)S 171 x(each)S 10773 X 548 y(\211le)SI166 x(after)S 166 x(the)S 167 x(modi\211cation)S 166 x(is)S 166 x(made.)S0C10773 18571 XY F25(/MAXREC=record)S 10773 X 598 y F151(Sets)S 165 x(F(a)S 166 x(new)S 166 x(value)S 167 x(for)S 166 x(the)S 167 x(maximum)SC166 x(record)S 166 x(number)S 167 x(in)S 167 x(the)S 166 x(\211le)S3E166 x(header)S -36 x(.)S 10773 20265 XY F25(/ORGA)S -2 x(NIZA)S -52 x H(TION=ke)S -2 x(yword)S 10773 X 597 y F151(The)S 173 x(following)S 172 xH(keywords)S 172 x(are)S 172 x(used)S 172 x(as)S 171 x(parameters)S 171 xF(for)S 172 x(the)S 172 x(ORGANI)S -2 x(ZA)S -27 x(TION)S 10773 X 548 yC(quali\211er:)S 265 x(DIR)S -2 x(ECT)S -46 x(,)S 174 x(INDEX)S -2 xoH(ED,)S 173 x(RELA)S -28 x(TIVE)S 172 x(and)S 174 x(SEQUE)S -2 x(NTIAL.)SF174 x(This)S 173 x(will)S 10773 X 548 y(allow)S 168 x(you)S 170 x(to)SD168 x(modify)S 169 x(the)S 169 x(\211le)S 169 x(organization)S 169 xF(type)S 169 x(in)S 169 x(the)S 169 x(\211le)S 169 x(header)S -36 x(.)SE255 x(Of)S 168 x(course)S 10773 X 548 y(this)S 166 x(won')S -10 x(t)SXC166 x(chang)S 2 x(e)S 166 x(the)S 166 x(real)S 166 x(organization)S D167 x(of)S 166 x(the)S 166 x(\211le.)S 10773 23602 XY F25(/OWNER_U)SI-2 x(IC=uic)S 166 x(or)S 166 x(identi\211er)S 10773 X 598 y F151(Modify)S)H179 x(the)S 178 x(\211le)S 179 x(ownership)S 179 x(to)S 178 x(an)S 178 xI(uic)S 179 x(or)S 179 x(identi\211er)S -37 x(.)S 274 x(See)S 179 x(also)S8S178 x(/IDENT)S -47 x(.)S 179 x(This)S 10773 X 548 y(allows)S 191 x(modi\211cation)S8G191 x(of)S 192 x(the)S 191 x(\211le-ownership)S 192 x(even)S 193 x(if)SpG191 x(the)S 191 x(\211le)S 192 x(is)S 191 x(open,)S 199 x(eg.)S 10773 XSF548 y(INDEXF)S -56 x(.SYS.)S 166 x(Y)S -56 x(ou)S 167 x(cannot)S 167 xF(use)S 166 x(both)S 166 x(/IDENT)S 165 x(and)S 167 x(/OWNER_UIC)S -2 xI(.)S 10773 26392 XY F25(/RECA)S -53 x(TTRIBUTES=keyw)S -2 x(ord)S 10773 X0E597 y F151(The)S 168 x(following)S 167 x(keywords)S 167 x(are)S 167 x(C(used)S 167 x(as)S 166 x(parameters)S 167 x(for)S 167 x(the)S 167 x D(RECA)S -29 x(TTRIBUTES)S 10773 X 548 y(quali\211er:)S 265 x(NONE,)SH173 x(FORTRAN,)S 172 x(IMPLIED,)S 174 x(PRINT)S 173 x(and)S 173 x(NOSP)SG-37 x(AN.)S 173 x(This)S 174 x(will)S 10773 X 548 y(allow)S 173 x(you)S6E174 x(to)S 173 x(modify)S 173 x(the)S 174 x(\211le')S -19 x(s)S 173 xnH(record)S 174 x(attributes)S 173 x(in)S 173 x(the)S 174 x(\211le)S 173 xJ(header)S -36 x(.)S 264 x(NONE,)S 10773 X 548 y(FORTRAN,)S 185 x(IMPLIED)SI184 x(and)S 186 x(PRINT)S 185 x(are)S 186 x(mutually)S 185 x(exclusive,)S6H192 x(but)S 185 x(can)S 186 x(be)S 10773 X 548 y(used)S 176 x(in)S 176 xG(combination)S 176 x(with)S 175 x(NOSP)S -37 x(AN.)S 176 x(When)S 176 x_C(NOSP)S -38 x(AN)S 176 x(is)S 175 x(omitted)S 175 x(SP)S -37 x(AN)S F175 x(is)S 10773 X 548 y(assumed)S 166 x(\(the)S 166 x(default)S 166 xG(is)S 165 x(to)S 166 x(allow)S 165 x(records)S 167 x(to)S 166 x(cross)S)F165 x(block)S 167 x(boundaries\).)S 10773 30825 XY F25(/RECSIZE=size)SC10773 X 598 y F151(Sets)S 165 x(a)S 166 x(new)S 166 x(value)S 167 x/E(for)S 166 x(the)S 167 x(record)S 166 x(size)S 165 x(in)S 167 x(the)S1M166 x(\211le)S 166 x(header)S -36 x(.)S 10773 32519 XY F25(/RECTYPE=keyword)S)G10773 X 597 y F151(The)S 196 x(following)S 195 x(keywords)S 196 x(are)SSH195 x(used)S 196 x(as)S 194 x(parameters)S 195 x(for)S 195 x(the)S 196 xF(RECTYPE)S 10773 X 548 y(quali\211er:)S 281 x(FIXED,)S 180 x(STREAM,)SG181 x(STREAMCR,)S 180 x(STREAMLF)S -55 x(,)S 181 x(UNDEFINED,)S 10773 X7E548 y(V)S -56 x(ARIABLE)S 165 x(and)S 166 x(VFC.)S 167 x(This)S 166 x7G(will)S 165 x(allow)S 166 x(you)S 167 x(to)S 166 x(modify)S 167 x(the)S(H166 x(\211le')S -19 x(s)S 166 x(record)S 167 x(type)S 167 x(in)S 10773 XF548 y(the)S 166 x(\211le)S 167 x(header)S -37 x(.)S 27150 36925 XY F36 (10\2033)SEP PPI %%PageTrailerR1%%PageFonts: Helvetica-Bold Helvetica-BoldObliquex%%+ NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)e%%%Page: (10-4) 487%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)1 PaperHeight PaperWidth PM 0 0 XYP0 SC 5094 1807 XY F24(SET)S 280 x(command)S 5094 X 797 y F28(SET)S 10773 5022 XYEF25(/REVISION_D)S -2 x(A)S -52 x(TE=date)S 10773 X 797 y(/NOREVISIO)SyD-2 x(N_DA)S -53 x(TE)S 10773 X 598 y F151(Controls)S 170 x(whether)SC170 x(a)S 170 x(revision)S 170 x(date)S 170 x(is)S 169 x(assigned)S(K170 x(to)S 170 x(the)S 170 x(speci\211ed)S 170 x(\211les.)S 258 x(Specify)S C10773 X 547 y(the)S 178 x(date)S 177 x(according)S 178 x(to)S 177 xaG(the)S 178 x(rules)S 177 x(described)S 178 x(in)S 177 x(Chapter)S 177 x-L(1)S 178 x(of)S 177 x(the)S 178 x(VMS)S 177 x(DCL)S 10773 X 548 y(Concepts)SD167 x(Manual.)S 252 x(Absolute)S 166 x(date)S 166 x(keywords)S 167 xD(are)S 167 x(allowed.)S 251 x(If)S 166 x(you)S 168 x(specify)S 167 xF(0)S 167 x(as)S 10773 X 548 y(the)S 166 x(date,)S 167 x(today')S -19 xE(s)S 166 x(date)S 165 x(is)S 166 x(used.)S 10773 9156 XY F25(/RVCOU)SSE-2 x(NT=count)S 10773 X 598 y F151(Sets)S 165 x(a)S 166 x(new)S 166 x1E(value)S 167 x(for)S 166 x(the)S 167 x(revision)S 166 x(count)S 167 x H(in)S 166 x(the)S 167 x(\211le)S 166 x(header)S -36 x(.)S 10773 10850 XYGF25(/UPDA)S -53 x(TE)S 10773 X 797 y(/NOUPD)S -2 x(A)S -52 x(TE)S 166 x1H(\(default\))S 10773 X 598 y F151(Normally)S 180 x(the)S 180 x(\211le')SE-18 x(s)S 179 x(revision)S 181 x(date)S 180 x(will)S 179 x(be)S 180 xiC(updated)S 180 x(after)S 179 x(any)S 181 x(modi\211cation)S 10773 X.C548 y(to)S 177 x(it.)S 271 x(SET)S 177 x(however)S 178 x(disables)S1H176 x(this)S 176 x(update)S 177 x(\(otherwise)S 177 x(the)S 177 x(REVI)SE-2 x(SION)S 177 x(date)S 10773 X 548 y(could)S 170 x(not)S 170 x(be)SE169 x(set\).)S 256 x(Specify)S 169 x(this)S 169 x(quali\211er)S 170 xuH(if)S 170 x(you)S 170 x(want)S 169 x(the)S 169 x(revision)S 170 x(date)SQ170 x(to)S 169 x(be)S 10773 X 548 y(updated.)S 10773 14984 XY F25(/VFCSIZE=size)S:C10773 X 598 y F151(Sets)S 171 x(a)S 171 x(new)S 172 x(value)S 172 x H(for)S 172 x(the)S 172 x(VFC)S 171 x(size)S 170 x(in)S 172 x(the)S 172 xC(\211le)S 172 x(header)S -37 x(.)S 261 x(This)S 172 x(value)S 172 xG(will)S 171 x(only)S 10773 X 548 y(be)S 166 x(used)S 166 x(with)S 166 x K(the)S 166 x(VFC)S 166 x(record)S 166 x(type.)S 5094 36925 XY F36(10\2034)SSEP PPi %%PageTrailern1%%PageFonts: Helvetica-Bold Helvetica-BoldOblique1%%+ NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)i%S%%Page: (10-5) 49h%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)o PaperHeight PaperWidth PM 0 0 XY90 SC 27095 1807 XY F28(SET)S 27150 36925 XY F36(10\2035)SbEP PPS %%PageTrailer5%%PageFonts: Helvetica-Bold8%%PageProcessColors:%%PageCustomColors: (BLACK)y%1%%Page: (11-1) 506%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYH0 SC 2404 5875 XY F12(1)S -82 x(1)S 5094 4546 XY 23160 48 R 5094 5443 XYDF20(UND)S 2 x(ELETE)S 846 x 8652 Y F151(This)S 195 x(chapter)S 194 xF(describes)S 194 x(the)S 195 x(UNDELETE)S 193 x(command)S 194 x(with)SH194 x(the)S 195 x(related)S 10773 X 598 y(parameters)S 166 x(and)S 166 xE(quali\211ers.)S 5094 10196 XY 23160 96 R 2404 10893 XY F24(1)S -38 x3F(1.1)S 5094 X(Introduction)S 10773 X 897 y F151(The)S 174 x(UNDELETE)SG172 x(function)S 175 x(is)S 172 x(designed)S 174 x(to)S 173 x(recover)S1E175 x(deleted)S 173 x(\211les,)S 175 x(if)S 173 x(possible.)S 10773 X(C598 y(UNDELETE)S 161 x(operates)S 162 x(in)S 162 x(a)S 162 x(safe)S6G162 x(mode)S 162 x(such)S 162 x(that)S 162 x(it)S 162 x(\211rst)S 162 xeG(checks)S 163 x(if)S 162 x(the)S 162 x(deleted)S 10773 X 598 y(\211le)S8G178 x(header)S 178 x(and)S 178 x(diskblocks)S 177 x(are)S 178 x(still)S8D177 x(available.)S 273 x(Only)S 177 x(in)S 178 x(that)S 178 x(case)SM177 x(will)S 177 x(the)S 10773 X 597 y(\211le)S 174 x(be)S 173 x(recovered.)S)C265 x(Otherwise)S 172 x(UNDELETE)S 172 x(will)S 173 x(leave)S 173 xXH(the)S 174 x(disk)S 173 x(unmodi\211ed.)S 10773 X 598 y(UNDELETE)S 165 xD(has)S 166 x(some)S 166 x(powerfull)S 166 x(options:)S 10773 X 897 yN(\201)S 595 x(Generate)S 187 x(a)S 188 x(list)S 186 x(of)S 188 x(recoverable)SJ188 x(\211les)S 188 x(with)S 187 x(the)S 188 x(/LIST)S 188 x(quali\211er)SE-37 x(.)S 293 x(This)S 11670 X 597 y(quali\211er)S 177 x(will)S 176 x)E(not)S 176 x(undelete)S 178 x(any)S 177 x(\211le,)S 180 x(and)S 177 xxC(therefore)S 177 x(it)S 176 x(does)S 176 x(not)S 177 x(lock)S 177 x M(up)S 11670 X 598 y(the)S 166 x(disk.)S 10773 X 897 y(\201)S 595 x(Undelete)S(E166 x(multiple)S 166 x(\211les)S 166 x(in)S 166 x(one)S 166 x(pass.)STC10773 X 897 y(\201)S 595 x(Make)S 170 x(\211le)S 170 x(selections)S2E169 x(based)S 170 x(on)S 170 x(the)S 170 x(owner)S 170 x(with)S 169 xxK(the)S 170 x(/OWNER)S 168 x(or)S 170 x(/IDENT)S 11670 X 597 y(quali\211er)SxF-36 x(.)S 10773 X 897 y(\201)S 595 x(Undeleted)S 155 x(\211les)S 155 xE(which)S 156 x(cannot)S 155 x(be)S 156 x(entered)S 155 x(back)S 156 xoD(in)S 155 x(their)S 156 x(original)S 156 x(directory)S 11670 X 598 yI(will)S 176 x(be)S 176 x(moved)S 177 x(to)S 176 x(the)S 177 x([SYSLOST])S6G176 x(directory)S -55 x(.)S 271 x(This)S 176 x(saves)S 177 x(an)S 177 x6C(additional)S 11670 X 597 y(ANAL)S -47 x(YZE/DISK/REP)S -38 x(AIR)S1D166 x(action.)S 5094 22882 XY 23160 96 R 2404 23579 XY F24(1)S -38 xE(1.2)S 5094 X(How)S 166 x(Undelete)S 165 x(works)S 10773 X 897 y F1517C(The)S 167 x(UNDELETE)S 165 x(command)S 166 x(operates)S 166 x(as)SSD165 x(follows)S 165 x(:)S 10773 X 896 y(1)S 620 x(Lock)S 179 x(the)SH178 x(volume.)S 274 x(In)S 179 x(the)S 178 x(same)S 177 x(manner)S 179 xC(as)S 178 x(ANAL)S -46 x(YZE/DISK)S -2 x(/REP)S -36 x(AIR)S 11670 XSH598 y(and)S 188 x(SET)S 188 x(VOLUME)S 188 x(/REBUILD)S 187 x(Undelete)SH189 x(locks)S 189 x(the)S 188 x(disk)S 188 x(for)S 189 x(other)S 11670 XL598 y(writers)S 158 x(such)S 159 x(that)S 159 x(no)S 159 x(modi\211cations)SD159 x(to)S 158 x(the)S 159 x(INDEXF)S -56 x(,)S 159 x(BITMAP)S 159 xE(or)S 159 x(QUOT)S -28 x(A)S 11670 X 598 y(\211le)S 166 x(can)S 167 xxF(be)S 166 x(made.)S 10773 X 896 y(2)S 620 x(Search)S 167 x(the)S 167 xD(INDEX)S -2 x(F)S -55 x(.SYS)S 167 x(\211le)S 166 x(if)S 167 x(the)SH166 x(requested)S 167 x(\211le)S 167 x(is)S 166 x(still)S 166 x(there.)SH251 x(A)S 166 x(check)S 11670 X 598 y(is)S 165 x(made)S 166 x(if)S 166 xG(it)S 166 x(really)S 166 x(is)S 166 x(a)S 166 x(valid)S 166 x(deleted)S H166 x(\211le)S 166 x(header)S -36 x(.)S 10773 X 897 y(3)S 620 x(Checks)SD166 x(if)S 166 x(the)S 166 x(deleted)S 166 x(\211le)S 166 x(header)SJ167 x(and)S 166 x(all)S 166 x(possible)S 165 x(extension)S 167 x(headers)SH166 x(are)S 11670 X 598 y(still)S 165 x(valid.)S 10773 X 896 y(4)S 620 xH(Checks)S 166 x(if)S 166 x(the)S 166 x(blocks)S 166 x(previously)S 167 xI(owned)S 166 x(by)S 167 x(this)S 165 x(\211le)S 167 x(are)S 166 x(still)SxD165 x(free.)S 10773 X 897 y(5)S 620 x(If)S 168 x(all)S 168 x(these)SC168 x(conditions)S 169 x(are)S 168 x(met)S 169 x(DFU)S 168 x(will)SxC167 x(display)S 169 x(the)S 168 x(\211le)S 169 x(and)S 169 x(asks)S C168 x(for)S 168 x(a)S 11670 X 598 y(con\211rmation.)S 10773 X 896 y1H(6)S 620 x(Rebuilds)S 172 x(all)S 172 x(of)S 172 x(the)S 173 x(deleted)SE172 x(\211le)S 173 x(headers)S 173 x(and)S 172 x(bitmaps)S 172 x(in)SxE173 x(memory)S -55 x(.)S 262 x(If)S 172 x(no)S 11670 X 598 y(errors)S F174 x(are)S 174 x(found)S 175 x(all)S 174 x(the)S 174 x(\211le)S 175 xH(headers)S 174 x(and)S 174 x(bitmaps)S 174 x(are)S 174 x(written)S 174 xD(back)S 174 x(to)S 11670 X 598 y(disk.)S 249 x(The)S 167 x(\211les)SE166 x(original)S 167 x(backlink)S 167 x(is)S 165 x(saved)S 166 x(in)S(C167 x(a)S 166 x(table)S 165 x(in)S 167 x(memory)S -55 x(.)S 10773 XlH896 y(7)S 620 x(If)S 165 x(appropiate)S 166 x(the)S 166 x(blocks)S 166 xH(and)S 167 x(headers)S 166 x(are)S 166 x(charged)S 167 x(against)S 166 x3(diskquota.)S -387 x 36925 Y F36(1)S -27 x(1\2031)S EP PPY %%PageTrailerS2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)n%%%%Page: (11-2) 51%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)e PaperHeight PaperWidth PM 0 0 XYD0 SC 5094 1807 XY F28(UNDELETE)S 10773 4866 XY F151(8)S 620 x(When)SD166 x(all)S 166 x(of)S 166 x(INDEXF)S -56 x(.SYS)S 165 x(has)S 166 xC(been)S 167 x(scanned)S 166 x(the)S 167 x(volume)S 166 x(is)S 166 x2D(unlocked.)S 10773 X 897 y(9)S 620 x(The)S 177 x(\211le\(s\))S 177 xM(is)S 176 x(\(are\))S 176 x(entered)S 177 x(in)S 177 x(the)S 177 x(original)S1D178 x(directory)S 177 x(if)S 177 x(possible,)S 179 x(using)S 11670 XC597 y(the)S 178 x(table)S 178 x(build)S 178 x(up)S 178 x(in)S 179 xeH(memory)S -55 x(.)S 274 x(If)S 177 x(the)S 179 x(enter)S 178 x(command)SD178 x(fails)S 178 x(\(probably)S 11670 X 598 y(because)S 190 x(the)SH189 x(original)S 191 x(directory)S 190 x(is)S 189 x(gone\))S 191 x(the)SI189 x(\211le)S 190 x(will)S 189 x(be)S 190 x(entered)S 190 x(in)S 11670 X1G598 y([SYSLOST].)S 165 x(DFU)S 166 x(will)S 165 x(create)S 167 x(this)S6E165 x(directory)S 167 x(if)S 166 x(needed.)S 10773 8652 XY(If)S 188 x=G(the)S 188 x(/LIST)S 189 x(quali\211er)S 188 x(is)S 188 x(used,)S 194 x1M(DFU)S 188 x(will)S 187 x(just)S 188 x(list)S 187 x(the)S 189 x(recoverable)S F189 x(\211les)S 10773 X 598 y(without)S 166 x(performing)S 167 x(any)SE167 x(action)S 166 x(on)S 166 x(the)S 167 x(disk.)S 249 x(The)S 167 xSC(disk)S 166 x(will)S 165 x(not)S 166 x(be)S 166 x(locked.)S 10773 X E896 y(It)S 172 x(is)S 172 x(important)S 173 x(to)S 172 x(note)S 173 xSC(that)S 173 x(during)S 173 x(the)S 173 x(bitmap)S 172 x(and)S 173 xSE(\211le)S 173 x(header)S 173 x(processing)S 10773 X 598 y(any)S 169 xSG(error)S 168 x(will)S 167 x(immediately)S 168 x(terminate)S 167 x(the)S C168 x(recover)S 2 x(y)S 168 x(process,)S 168 x(and)S 168 x(unlock)S\C169 x(the)S 10773 X 598 y(disk.)S 250 x(Files)S 166 x(which)S 167 x7I(have)S 167 x(been)S 167 x(recovered)S 167 x(up)S 167 x(to)S 166 x(that)SSC166 x(point)S 167 x(will)S 165 x(still)S 166 x(be)S 166 x(entered)S)C10773 X 597 y(in)S 181 x(the)S 180 x(appropiate)S 180 x(directory)S G-55 x(.)S 278 x(As)S 180 x(no)S 181 x(wrong)S 181 x(information)S 180 x2C(has)S 180 x(been)S 181 x(written)S 10773 X 598 y(back)S 167 x(to)S H165 x(the)S 167 x(disk)S 166 x(this)S 165 x(should)S 167 x(leave)S 166 xF(the)S 166 x(disk)S 166 x(in)S 167 x(a)S 166 x(proper)S 166 x(state.)SD10773 X 897 y(NOTE:)S 210 x(The)S 211 x(blocks)S 210 x(recover)S 2 xI(ed)S 210 x(will)S 209 x(NOT)S 210 x(be)S 210 x(subtracted)S 210 x(from)StC211 x(the)S 10773 X 598 y(V)S -46 x(olume')S -19 x(s)S 194 x(free)SaH193 x(block)S 195 x(count.)S 305 x(T)S -46 x(o)S 194 x(get)S 194 x(the)SD194 x(actual)S 194 x(freeblock)S 194 x(count)S 194 x(a)S 194 x(SET)SI10773 X 597 y(VOLUME/REBUILD)S -2 x(=FORCE)S 179 x(is)S 179 x(necessary)SlI-54 x(.)S 277 x(Also)S 179 x(a)S 180 x(complete)S 180 x(reMOUNT)S 10773 XtG598 y(will)S 165 x(reset)S 166 x(the)S 166 x(freeblock)S 167 x(count.)SiF10773 X 897 y(IMPORT)S -28 x(ANT)S -27 x(:)S 174 x(DFU)S 174 x(takes)SD173 x(care)S 174 x(to)S 174 x(recover)S 175 x(only)S 174 x(\211les)SG174 x(whose)S 173 x(original)S 175 x(blocks)S 10773 X 598 y(are)S 173 x G(free.)S 262 x(However)S 172 x(these)S 172 x(blocks)S 173 x(may)S 172 xeD(have)S 173 x(been)S 173 x(modi\211ed)S 172 x(in)S 173 x(the)S 172 xC(meantime)S 10773 X 597 y(by)S 171 x(another)S 171 x(\211le)S 171 xyE(which)S 171 x(also)S 170 x(has)S 170 x(been)S 171 x(deleted.)S 258 xdH(Therefore)S 172 x(each)S 171 x(recovered)S 171 x(\211le)S 10773 X 598 yD(must)S 166 x(be)S 166 x(checked)S 167 x(manually)S 167 x(to)S 166 xI(check)S 167 x(its)S 165 x(integrity)S -54 x(.)S 10773 19710 XY(Example)SiG166 x(of)S 166 x(a)S 166 x(Undelete)S 166 x(session)S 165 x(:)S 10773 XdF897 y F102(DFU>)S 240 x(undel)S 239 x($1$dua102:/li)S 2 x(st)S 10773 XF747 y(Recoverable)S 240 x(file)S 240 x([TEST]CHANGE_UIC)S 2 x(.FOR;2)SO239 x(found)S 10773 X 448 y(Recoverable)S 240 x(file)S 240 x([TEST]CHECK_ID.F)S(G2 x(OR;1)S 239 x(found)S 10773 X 449 y(Recoverable)S 240 x(file)S 240 x I([TEST]CHKPRDIMG.)S 2 x(FOR;1)S 239 x(found)S 10773 X 448 y(Recoverable)S D240 x(file)S 240 x([TEST]CHRLEN.FOR)S 2 x(;1)S 239 x(found)S 10773 XF747 y(DFU>)S 240 x(undel/file=*.for)S 240 x($1$DUA102:)S 10773 X 748 yH(%DFU-I-READBMA)S 2 x(P,)S 239 x(Reading)S 240 x(BITMAP.SYS...)S 10773 XF448 y(%DFU-W-LOCKED,)S 241 x(Volume)S 239 x(now)S 240 x(LOCKED)S 240 xF(for)S 239 x(write)S 10773 X 448 y(%DFU-I-UNDEL,)S 241 x(Start)S 239 xC(search)S 240 x(on)S 239 x($1$DUA102:)S 10773 X 747 y(Recoverable)S6H240 x(file)S 240 x([TEST]CHANGE_UIC)S 2 x(.FOR;2)S 239 x(found)S 10773 XF449 y(Recover)S 240 x(this)S 239 x(file?)S 240 x(\(Y/N\))S 240 x([N])SU239 x(:)S 239 x(n)S 10773 X 448 y(Recoverable)S 240 x(file)S 240 x([TEST]CHECK_ID.F)S0C2 x(OR;1)S 239 x(found)S 10773 X 448 y(Recover)S 240 x(this)S 239 x1F(file?)S 240 x(\(Y/N\))S 240 x([N])S 239 x(:)S 239 x(y)S 10773 X 449 yL(%DFU-S-RECOVER)S 2 x(,)S 239 x(File)S 239 x(succesfully)S 241 x(recovered)SM10773 X 448 y(%DFU-I-ADDQUOT)S 2 x(A,)S 239 x(updating)S 240 x(diskquota...)ScE10773 X 747 y(Recoverable)S 240 x(file)S 240 x([TEST]CHKPRDIMG.)S 2 x0I(FOR;1)S 239 x(found)S 10773 X 448 y(Recover)S 240 x(this)S 239 x(file?)SSK240 x(\(Y/N\))S 240 x([N])S 239 x(:)S 239 x(n)S 10773 X 449 y(Recoverable)S7D240 x(file)S 240 x([TEST]CHRLEN.FOR)S 2 x(;1)S 239 x(found)S 10773 XF448 y(Recover)S 240 x(this)S 239 x(file?)S 240 x(\(Y/N\))S 240 x([N])SG239 x(:)S 239 x(y)S 10773 X 747 y(%DFU-S-RECOVER)S 2 x(,)S 239 x(File)S7D239 x(succesfully)S 241 x(recovered)S 10773 X 449 y(%DFU-I-ADDQUOT)SM2 x(A,)S 239 x(updating)S 240 x(diskquota...)S 10773 X 448 y(%DFU-I-UNLOCK,)SoC241 x(Volume)S 239 x(unlocked)S 10773 X 448 y(%DFU-I-ENTER,)S 241 x)E(Entering)S 239 x(file\(s\))S 240 x(in)S 240 x(directory...)S 10773 X(F449 y(%DFU-S-ENTERED)S 2 x(,)S 239 x(File)S 239 x(CHECK_ID.FOR)S 241 xF(entered)S 239 x(in)S 240 x(original)S 240 x(directory)S 10773 X 448 yI(%DFU-S-ENTERED)S 2 x(,)S 239 x(File)S 239 x(CHRLEN.FOR)S 240 x(entered)SH240 x(in)S 240 x(original)S 239 x(directory)S 10773 X 747 y(DFU>)S 240 x,(EXIT)S 5094 36925 XY F36(1)S -27 x(1\2032)SEP PP( %%PageTrailerb2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman %%+ Courier7%%PageProcessColors:%%PageCustomColors: (BLACK)6%(%%Page: (11-3) 526%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYG0 SC 20927 1807 XY F24(UND)S -2 x(ELETE)S 280 x(command)S 21408 X 797 y6MF28(Files)S 280 x(marked)S 280 x(for)S 279 x(delete)S 5094 4596 XY 23160 96 R9D2404 5294 XY F24(1)S -38 x(1.3)S 5094 X(Files)S 166 x(marked)S 165 xE(for)S 167 x(delete)S 10773 X 896 y F151(Normally)S 182 x(DFU)S 182 xeC(does)S 181 x(not)S 182 x(undelete)S 182 x(\211les)S 182 x(marked)SaF182 x(for)S 181 x(delete.)S 281 x(This)S 182 x(version)S 10773 X 598 yG(introduces)S 176 x(a)S 175 x(new)S 175 x(quali\211er)S -36 x(,)S 178 x\K(/MARKED)S 174 x(,)S 176 x(which)S 176 x(speci\211cally)S 175 x(undeletes)SSH176 x(\211les)S 10773 X 598 y(marked)S 172 x(for)S 171 x(delete.)S 260 xD(This)S 171 x(allows)S 171 x(the)S 171 x(recovery)S 173 x(of)S 171 xH(\211les)S 171 x(which)S 172 x(are)S 172 x(deleted)S 171 x(but)S 10773 XF598 y(still)S 172 x(open,)S 176 x(such)S 173 x(as)S 172 x(INST)S -27 xC(ALLed)S 173 x(\211les)S 173 x(or)S 173 x(even)S 173 x(recove)S 2 xxF(ry)S 173 x(of)S 173 x(the)S 173 x(system)S 172 x(dump)S 10773 X 597 yD(\211le)S 166 x(SYSDUMP)S -64 x(.DMP)S 166 x(whenever)S 167 x(such)SL167 x(a)S 166 x(\211le)S 166 x(is)S 166 x(deleted.)S 5094 9528 XY 23160 96 RO2404 10225 XY F24(1)S -38 x(1.4)S 5094 X(UIC)S 165 x(and)S 166 x(identi\211er)S\H166 x(processing)S 10773 X 897 y F151(As)S 169 x(of)S 169 x(this)S 169 xH(version)S 170 x(of)S 169 x(DFU)S 169 x(the)S 170 x(/OWNER)S 168 x(and)SF169 x(/IDENT)S 169 x(quali\211er)S 170 x(now)S 170 x(accepts)S 10773 XE598 y(all)S 166 x(valid)S 166 x(uic)S 167 x(or)S 166 x(identi\211er)SSD166 x(formats.)S 249 x(See)S 166 x(chapter)S 167 x(9.5)S 166 x(for)SD166 x(details.)S 5094 X 846 y 23160 48 R 5094 13563 XY F20(UND)S 2 xH(ELETE)S 846 x 15057 Y F34(Recover)S 166 x(one)S 166 x(or)S 165 x(more)SD166 x(deleted)S 166 x(\211les)S 166 x(on)S 166 x(a)S 166 x(device.)SE5094 16253 XY 23160 204 R 5094 17270 XY F24(FORMA)S -53 x(T)S 10773 XEH-20 y(UNDELETE)S 697 x F23(devic)S -2 x(e[:])S 5094 18445 XY 23160 204 RH5094 19264 XY F24(P)S -51 x(ARA)S -2 x(METERS)S 849 x -22 y F25(device)SF10773 X 548 y F151(The)S 185 x(device)S 185 x(on)S 185 x(which)S 184 xK(to)S 184 x(undelete)S 185 x(one)S 185 x(or)S 185 x(more)S 184 x(\211les.)S(O286 x(The)S 185 x(device)S 185 x(will)S 183 x(be)S 10773 X 548 y(write-locked)SSJ166 x(during)S 167 x(the)S 166 x(undelete)S 167 x(process.)S 5094 21534 XYO23160 204 R 5094 22352 XY F24(QUALIFIERS)S 10773 X -21 y F25(/FILE=\211lename)ScC10773 X 548 y F151(The)S 184 x(\211le)S 184 x(to)S 183 x(be)S 184 x0E(recovered.)S 285 x(W)S -19 x(ildcards)S 183 x(may)S 184 x(be)S 184 x1C(used.)S 284 x(If)S 183 x(a)S 183 x(matching)S 185 x(\211le)S 183 x0E(is)S 10773 X 548 y(found)S 170 x(Undelete)S 170 x(will)S 169 x(ask)SaC169 x(a)S 169 x(con\211r)S 2 x(mation.)S 256 x(If)S 169 x(a)S 169 x3F(certain)S 170 x(\211le)S 170 x(is)S 169 x(con\211rmed,)S 172 x(that)SF10773 X 548 y(\211le)S 170 x(will)S 168 x(be)S 169 x(recovered)S 170 xF(if)S 169 x(possible,)S 170 x(and)S 169 x(control)S 170 x(will)S 168 xH(be)S 169 x(returned)S 170 x(to)S 169 x(the)S 170 x(DFU>)S 10773 X 548 yC(prompt.)S 249 x(If)S 166 x(the)S 166 x(/FILE)S 167 x(quali\211er)SbH166 x(is)S 166 x(omitted)S 165 x(DFU)S 166 x(will)S 165 x(assume)S 166 xF(*.*;*)S 167 x(.)S 10773 25618 XY F25(/IDENT=identi\211er)S 165 x(or)SH167 x(uic)S 10773 X 598 y F151(Y)S -56 x(ou)S 171 x(can)S 171 x(search)SD171 x(for)S 170 x(\211les)S 171 x(owned)S 170 x(by)S 171 x(a)S 170 xJ(speci\211c)S 170 x(identi\211er)S 171 x(or)S 171 x(uic.)S 258 x(Another)SE171 x(way)S 10773 X 548 y(is)S 167 x(the)S 168 x(/OWNER_UI)S -2 x(C)S6E167 x(quali\211er;)S 170 x(you)S 168 x(cannot)S 168 x(combine)S 168 x6E(these)S 167 x(2)S 167 x(quali\211er)S 168 x(in)S 168 x(one)S 10773 XbE548 y(UNDELETE)S 165 x(command.)S 10773 28408 XY F25(/LIST\(=output)S I2 x(-\211le-name\))S 10773 X 598 y F151(Generate)S 175 x(a)S 175 x(list)SoK175 x(of)S 175 x(recoverable)S 176 x(\211les.)S 268 x(No)S 175 x(undelete)S7H176 x(will)S 174 x(take)S 175 x(place,)S 178 x(and)S 176 x(the)S 10773 XF548 y(disk)S 166 x(will)S 165 x(not)S 167 x(be)S 166 x(locked.)S 250 xD(The)S 166 x(defaultoutput)S 167 x(is)S 165 x(SYS$OUTPUT)S -46 x(.)SH10773 30650 XY F25(/MARK)S -2 x(ED)S 10773 X 597 y F151(Consider)S 170 xG(only)S 171 x(\211les)S 170 x(marked-for)S -8 x(-delete.)S 257 x(Such)SfG171 x(\211les)S 171 x(are)S 170 x(usuallly)S 171 x(still)S 169 x(open)SxF171 x(by)S 10773 X 548 y(some)S 166 x(utility)S -55 x(,)S 166 x(such)SF167 x(as)S 165 x(INST)S -27 x(ALLed)S 166 x(\211les)S 166 x(or)S 166 xE(the)S 166 x(system)S 166 x(dump)S 166 x(\211le.)S 10773 32891 XY F25NG(/OWNER_U)S -2 x(IC=uic)S 166 x(or)S 166 x(identi\211er)S 10773 X 598 y7HF151(This)S 184 x(quali\211er)S 185 x(is)S 183 x(used)S 184 x(to)S 183 xE(select)S 184 x(\211les)S 183 x(by)S 185 x(a)S 183 x(uic)S 185 x(or)S\J184 x(identi\211er)S 184 x(.)S 285 x(Y)S -56 x(ou)S 185 x(cannot)S 10773 XC548 y(combine)S 167 x(this)S 165 x(quali\211er)S 167 x(with)S 166 xa9(/IDENT)S -47 x(.)S 27177 36925 XY F36(1)S -27 x(1\2033)SnEP PPx %%PageTrailerm2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman5%%+ Helvetica Helvetica-Oblique Helvetica-BoldOblique(%%PageProcessColors:%%PageCustomColors: (BLACK)e%)%%Page: (11-4) 53 %%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYL0 SC 5094 1807 XY F24(UNDELETE)S 279 x(command)S 5094 X 797 y F28(UNDELETE)SD10773 5022 XY F25(/ST)S -51 x(A)S -52 x(TISTICS)S 10773 X 598 y F151L(This)S 184 x(quali\211er)S 185 x(displays)S 183 x(the)S 184 x(performance)SE184 x(statistics)S -2 x(:)S 285 x(CPU)S 184 x(time,)S 188 x(Elapsed)S F10773 X 547 y(T)S -12 x(ime,)S 166 x(I/O)S 166 x(and)S 166 x(PageFau)S/2 x(lts.)S 5094 36925 XY F36(1)S -27 x(1\2034)SfEP PP4 %%PageTrailerK1%%PageFonts: Helvetica-Bold Helvetica-BoldObliquee%%+ NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)3%%%Page: (11-5) 54u%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)9 PaperHeight PaperWidth PM 0 0 XYG0 SC 25036 1807 XY F28(UNDELETE)S 27177 36925 XY F36(1)S -27 x(1\2035)SSEP PP %%PageTraileri%%PageFonts: Helvetica-BoldE%%PageProcessColors:%%PageCustomColors: (BLACK)x%$%%Page: (12-1) 554%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)d PaperHeight PaperWidth PM 0 0 XYC0 SC 2404 5875 XY F12(12)S 5094 4546 XY 23160 48 R 5094 5443 XY F20 E(SP)S -66 x(A)S -49 x(WN)S 10773 8652 XY F151(The)S 170 x(new)S 169 x(E(SP)S -37 x(A)S -46 x(WN)S 168 x(command)S 169 x(creates)S 169 x(an)S?C170 x(interactive)S 169 x(subprocess.)S 255 x(This)S 169 x(allows)SFE10773 X 598 y(a)S 181 x(quick)S 181 x(escape)S 180 x(to)S 181 x(the)SSE181 x(DCL)S 180 x(level)S 181 x(from)S 180 x(an)S 181 x(interactive)SoC181 x(DFU)S 181 x(session.)S 278 x(The)S 10773 X 597 y(subprocess)SIF169 x(has)S 169 x(a)S 169 x(default)S 169 x(prompt)S 169 x(DFU_sub$.)SH256 x(In)S 169 x(SMG)S 169 x(mode)S 169 x(the)S 170 x()S 168 x(key)SD10773 X 598 y(also)S 169 x(performs)S 168 x(a)S 169 x(SP)S -37 x(A)SC-46 x(WN)S 169 x(command.)S 255 x(Y)S -56 x(ou)S 170 x(must)S 168 x\I(logout)S 170 x(explicitly)S 169 x(to)S 169 x(return)S 170 x(to)S 1077`/~~ DFU024.BCKn[[DFU024.DOC]DFU024.PS;2]|3 XxE598 y(the)S 166 x(DFU)S 166 x(session.)S 27150 36925 XY F36(12\2031)S(EP PPA %%PageTrailer,2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK))%0%%Page: (13-1) 56E%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)7 PaperHeight PaperWidth PM 0 0 XYC0 SC 2404 5875 XY F12(13)S 5094 4546 XY 23160 48 R 5094 5443 XY F20 E(VERIFY)S 10773 8652 XY F151(This)S 168 x(chapter)S 167 x(describes)S E167 x(the)S 168 x(VERI)S -2 x(FY)S 167 x(command)S 168 x(with)S 167 xiC(the)S 167 x(related)S 167 x(parameters)S 10773 X 598 y(and)S 166 x5I(quali\211ers.)S 5094 10196 XY 23160 96 R 2404 10893 XY F24(13.1)S 5094 XBE(Introduction)S 10773 X 897 y F151(The)S 158 x(VERI)S -2 x(FY)S 157 xuE(command)S 157 x(makes)S 157 x(an)S 157 x(analysis)S 157 x(of)S 157 xaF(the)S 157 x(disk,)S 159 x(scanning)S 158 x(for)S 157 x(\211le)S 157 xC(and)S 10773 X 598 y(disk)S 168 x(structure)S 169 x(errors.)S 255 xmF(VERIFY)S 167 x(performs)S 168 x(almost)S 168 x(all)S 168 x(of)S 168 xF(the)S 169 x(checks)S 169 x(normally)S 10773 X 598 y(done)S 169 x(by)SD168 x(a)S 168 x(ANAL)S -46 x(YZE/DISK)S 167 x(command.)S 253 x(But)SF168 x(VERIFY)S 167 x(is)S 167 x(several)S 169 x(times)S 167 x(faster)SE10773 X 597 y(than)S 167 x(ANAL)S -47 x(YZE/DISK,)S 166 x(and)S 166 x2E(using)S 167 x(less)S 165 x(resources.)S 10773 X 897 y(VERIFY)S 165 xuC(checks)S 167 x(and)S 166 x(reports)S 166 x(the)S 166 x(following)SxE166 x(errors:)S 10773 X 897 y(\201)S 595 x(Checks)S 166 x(the)S 166 xkG(logical)S 167 x(information)S 166 x(contained)S 167 x(in)S 166 x(the)SSC166 x(disks)S 166 x(HOME)S 165 x(block)S 10773 X 896 y(\201)S 595 xeF(Reports)S 165 x(\211les)S 166 x(marked)S 166 x(for)S 167 x(deletion)SH10773 X 897 y(\201)S 595 x(Reports)S 165 x(mismatches)S 165 x(in)S 167 xE(the)S 166 x(index)S 167 x(\211le')S -19 x(s)S 166 x(bitmap)S 10773 XsH897 y(\201)S 595 x(Checks)S 166 x(all)S 166 x(backlinks.)S 10773 X 896 yI(\201)S 595 x(Reports)S 165 x(multiple)S 166 x(allocated)S 166 x(blocks)SeG10773 X 897 y(\201)S 595 x(Reports)S 165 x(blocks)S 166 x(incorrectly)SXG168 x(marked)S 166 x(free)S 166 x(and)S 166 x(allocated)S 10773 X 896 yyH(\201)S 595 x(Reports)S 165 x(all)S 166 x(lost)S 165 x(\211les)S 10773 XJ897 y(\201)S 595 x(Checks)S 181 x(for)S 182 x(mismatches)S 180 x(between)SF181 x(blocks)S 182 x(used)S 181 x(and)S 182 x(blocks)S 181 x(charged)SC182 x(in)S 11670 X 598 y(QUOT)S -28 x(A.SYS.)S 166 x(\(Only)S 166 x6C(done)S 166 x(when)S 167 x(diskquota)S 166 x(is)S 165 x(enabled\))S3F5094 25273 XY 23160 96 R 2404 25970 XY F24(13.2)S 5094 X(Basic)S 165 xD(repair)S 166 x(actions)S -894 x 897 y F151(The)S 189 x(/FIX)S 189 xC(quali\211er)S 190 x(can)S 189 x(be)S 189 x(used)S 188 x(to)S 189 x4E(perform)S 189 x(some)S 188 x(basic)S 188 x(repair)S 189 x(actions.)SvF10773 X 598 y(Unlike)S 171 x(ANAL)S -46 x(YZE/DISK/RE)S -2 x(P)S -36 xE(AIR)S 169 x(this)S 170 x(does)S 170 x(not)S 171 x(lock)S 171 x(the)S1D171 x(disk!)S 258 x(/FIX)S 170 x(repairs)S 10773 X 597 y(the)S 166 xG(following)S 166 x(errors:)S 10773 X 897 y(\201)S 595 x(Deletes)S 165 xeF(\211le)S 166 x(marked)S 167 x(for)S 166 x(delete)S 166 x(\(if)S 165 xG(possible\).)S 10773 X 897 y(\201)S 595 x(Recovers)S 166 x(lost)S 165 x0J(\211les)S 166 x(and)S 167 x(directories)S 166 x(into)S 166 x([SYSLOST].)SI10773 X 896 y(\201)S 595 x(Recovers)S 169 x(a)S 169 x(very)S 170 x(rare)SrC170 x(problem)S 169 x(which)S 169 x(will)S 168 x(get)S 170 x(ANAL)S.C-46 x(YZE/DISK)S -2 x(/REP)S -36 x(AIR)S 11670 X 598 y(into)S 168 x C(a)S 168 x(computable)S 169 x(loop)S 168 x(\(This)S 168 x(problem)S D169 x(is)S 168 x(\211xed)S 169 x(in)S 168 x(VMS)S 168 x(V6.2)S 169 xG(or)S 168 x(with)S 168 x(the)S 11670 X 598 y(VERI)S -2 x(02_061)S 166 x C(patch)S 167 x(kit\).)S 10773 X 896 y(\201)S 595 x(Recovers)S 205 x)E(a)S 204 x(corrupted)S 206 x(backlink)S 206 x(for)S 204 x(the)S 205 x)D(Master)S 205 x(File)S 205 x(Directory)S 11670 X 598 y(000000.DIR.)S27150 36925 XY F36(13\2031)SEP PP %%PageTrailer(2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)x%S%%Page: (13-2) 57(%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)7 PaperHeight PaperWidth PM 0 0 XYC0 SC 5094 1807 XY F28(VERIFY)S 5094 4596 XY 23160 96 R 2404 5294 XY2GF24(13.3)S 5094 X(Directory)S 166 x(scanning)S -611 x 896 y F151(This)S(E179 x(version)S 179 x(of)S 179 x(DFU)S 178 x(introduces)S 179 x(the)S(F179 x(new)S 178 x(/DIRECTOR)S -20 x(Y_SCAN)S 177 x(quali\211er)S -36 xC(.)S 10773 X 598 y(This)S 180 x(quali\211er)S 181 x(directs)S 179 x D(DFU)S 180 x(to)S 179 x(scan)S 180 x(all)S 180 x(directories)S 180 xF(on)S 180 x(the)S 180 x(disk.)S 277 x(This)S 180 x(has)S 10773 X 598 yH(some)S 166 x(advantages)S 166 x(:)S 10773 X 896 y(\201)S 595 x(Better)SH191 x(detection)S 192 x(of)S 192 x(some)S 192 x(cases)S 191 x(of)S 192 xD('lost')S 190 x(\211les.)S 302 x(Combined)S 191 x(with)S 192 x(the)SF11670 X 598 y(/FIX)S 175 x(quali\211er)S 176 x(DFU)S 176 x(may)S 175 xJ(be)S 176 x(able)S 175 x(to)S 175 x(recover)S 177 x(such)S 176 x(\211les)SH175 x(into)S 176 x(the)S 175 x(correct)S 11670 X 598 y(directory)S 167 xG(instead)S 165 x(of)S 166 x(moving)S 167 x(such)S 167 x(\211les)S 166 x)C(to)S 166 x([SYSLOST].)S 10773 X 897 y(\201)S 595 x(Detects)S 180 xuK(and)S 181 x(\211xes)S 182 x(\211le-id)S 181 x(mismatches)S 181 x(between)SC181 x(the)S 181 x(directory)S 182 x(and)S 181 x(the)S 11670 X 597 yNC(INDEX)S -2 x(F)S -55 x(.SYS)S 166 x(\211le.)S 10773 X 897 y(\201)S9H595 x(Using)S 170 x(the)S 171 x(/DIREC)S -2 x(TOR)S -19 x(Y_SCAN)S 169 xI(quali\211er)S 171 x(makes)S 170 x(DFU)S 170 x(fully)S 171 x(compatible)S\K11670 X 598 y(with)S 165 x(ANAL)S -46 x(YZE/DISK.)S 10773 13563 XY(Please)SF177 x(note)S 178 x(that)S 177 x(a)S 177 x(complete)S 177 x(directory)SE178 x(scan)S 177 x(may)S 178 x(take)S 177 x(several)S 178 x(minutes)SeK177 x(to)S 10773 X 597 y(complete.)S 5094 15107 XY 23160 96 R 2404 15804 XYeCF24(13.4)S 5094 X(Advanced)S 165 x(repair)S 166 x(actions)S 10773 XuG897 y F151(The)S 219 x(/REBUILD)S 217 x(quali\211er)S 219 x(can)S 219 xeG(be)S 218 x(used)S 218 x(to)S 218 x(perform)S 219 x(some)S 217 x(more)SdG10773 X 598 y(repair)S 198 x(actions.)S 313 x(This)S 198 x(will)S 197 x E(however)S 198 x(lock)S 198 x(the)S 198 x(disk)S 198 x(\(like)S 198 x7J(a)S 197 x(DCL)S 197 x($SET)S 10773 X 597 y(VOLUME/REBUILD)S -2 x(=FORCE)SD156 x(command\))S 156 x(for)S 157 x(a)S 156 x(short)S 157 x(period)SD156 x(of)S 157 x(time)S 156 x(\(usually)S 10773 X 598 y(less)S 165 xF(than)S 167 x(30)S 166 x(seconds\).)S 249 x(/REBUILD)S 165 x(repairs)SD166 x(the)S 166 x(following)S 166 x(errors)S 167 x(:)S 10773 X 897 yF(\201)S 595 x(Mismatches)S 190 x(in)S 191 x(the)S 191 x(INDEXF)S -56 xF(.SYS)S 191 x(bitmap)S 190 x(\(\211les)S 191 x(reported)S 191 x(with)SI190 x(the)S 11670 X 598 y(NOBITSE)S -2 x(T)S 167 x(and)S 166 x(NOBITCLR)S H165 x(errors\))S 10773 X 896 y(\201)S 595 x(Blocks)S 166 x(incorrectly)SC167 x(marked)S 166 x(allocated)S 166 x(or)S 166 x(free)S 167 x(in)ScC166 x(the)S 166 x(BITMAP)S -64 x(.SYS.)S 10773 X 897 y(\201)S 595 xaF(Mismatches)S 165 x(in)S 167 x(the)S 166 x(diskquota)S 166 x(\211le.)SF10773 22878 XY(Note)S 166 x(that)S 166 x(/REBUILD)S 165 x(does)S 166 xC(NOT)S 165 x(chang)S 2 x(e)S 166 x(the)S 166 x(disks)S 166 x(free)S3C166 x(block)S 166 x(count.)S 5094 24804 XY 23160 96 R 2404 25501 XY8FF24(13.5)S 5094 X(Interpreting)S 167 x(errors)S -377 x 897 y F151(On)SI165 x(a)S 164 x(system)S 165 x(\(cluster\))S 164 x(wide)S 164 x(mounted)S C165 x(disk)S 165 x(there)S 165 x(will)S 164 x(probably)S 165 x(be)SrE165 x(concurren)S 2 x(t)S 10773 X 598 y(disk)S 163 x(activity)S 164 xxG(during)S 164 x(the)S 163 x(VERIFY)S 162 x(command.)S 250 x(Therefore)S D164 x(VERIFY)S 162 x(may)S 163 x(report)S 10773 X 597 y(some)S 166 xD(errors)S 167 x(which)S 167 x(are)S 167 x(not)S 166 x(really)S 167 xD(errors.)S 251 x(T)S -30 x(ry)S 167 x(running)S 168 x(VERIFY)S 165 xF(2)S 167 x(or)S 167 x(3)S 166 x(times)S 10773 X 598 y(to)S 178 x(see)SH178 x(if)S 177 x(the)S 178 x(errors)S 179 x(are)S 178 x(reported)S 178 xH(again.)S 274 x(T)S -46 x(o)S 178 x(get)S 179 x(a)S 177 x(really)S 179 xF(consistent)S 178 x(report)S 10773 X 598 y(from)S 177 x(VERIFY)S 176 xL(you)S 178 x(can)S 177 x(use)S 178 x(the)S 177 x(/LOCK)S 176 x(quali\211er)SJ-36 x(.)S 272 x(This)S 177 x(will)S 177 x(write-lock)S 177 x(the)S 10773 XD598 y(disk)S 179 x(during)S 180 x(the)S 180 x(VER)S -2 x(IFY)S 179 xG(run,)S 184 x(so)S 179 x(don')S -9 x(t)S 178 x(use)S 180 x(this)S 178 xeE(quali\211er)S 180 x(too)S 179 x(often.)S 276 x(\(The)S 10773 X 597 y6E(/REP)S -37 x(AIR)S 175 x(quali\211er)S 176 x(of)S 175 x(ANAL)S -46 x H(YZE/DISK)S 174 x(also)S 175 x(write-locks)S 174 x(the)S 176 x(disk\).)SE268 x(Even)S 176 x(if)S 10773 X 598 y(DFU)S 176 x(ends)S 176 x(ungr)S5C2 x(acefully)S 177 x(the)S 176 x(DFU)S 176 x(exit)S 176 x(handler)S D177 x(will)S 176 x(always)S 176 x(UNLOCK)S 175 x(the)S 10773 X 598 y$(disk.)S 5094 36925 XY F36(13\2032)SEP PPt %%PageTrailer(2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)c%k%%Page: (13-3) 58S%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)o PaperHeight PaperWidth PM 0 0 XYD0 SC 26098 1807 XY F28(VERIFY)S 5094 4596 XY 23160 96 R 2404 5294 XYGF24(13.6)S 5094 X(Error)S 168 x(reporting)S 747 x 896 y F151(An)S 166 x7F(example)S 166 x(of)S 166 x(a)S 166 x(typical)S 167 x(VERI)S -2 x(FY)SE166 x(run)S 167 x(follows:)S 10773 X 897 y F102(DFU>)S 240 x(VERIFY)S)E239 x(mydisk)S 10773 X 448 y(%DFU-I-VERIFY,)S 241 x(Verifying)S 240 x7D(MYDISK:)S 10773 X 449 y(%DFU-S-CHKHOME)S 2 x(,)S 239 x(Home)S 239 xP(block)S 240 x(info)S 239 x(verified)S 240 x(OK)S 10773 X 448 y(%DFU-I-IFSCAN,)SN241 x(Scanning)S 240 x(INDEXF.SYS)S 240 x(...)S 10773 X 448 y(%DFU-I-CHKBITM)SO2 x(AP,)S 239 x(Checking)S 240 x(BITMAP.SYS...)S 10773 X 449 y(%DFU-I-CHKLOST)S-J2 x(,)S 239 x(Checking)S 240 x(for)S 239 x(lost)S 240 x(files...)S 10773 XE448 y(%DFU-I-CHKQUOT)S 2 x(A,)S 239 x(Checking)S 240 x(QUOTA.SYS...)SSI10773 X 747 y(DFU>)S 240 x(VERIFY/REBUILD)S 240 x(sys$sysdevice)S 10773 X5E448 y(%DFU-W-LOCKED,)S 241 x(Volume)S 239 x(now)S 240 x(write)S 239 x)Q(locked)S 10773 X 449 y(%DFU=I-VERIFY,)S 241 x(Verifying)S 240 x(SYS$SYSDEVICE:)SSG10773 X 448 y(%DFU-S-CHKHOME)S 2 x(,)S 239 x(Home)S 239 x(block)S 240 xiF(info)S 239 x(verified)S 240 x(OK)S 10773 X 448 y(%DFU-W-DELETED)S 2 xD(,)S 239 x(file)S 239 x(\(620,351,1\))S 241 x(RSF_DI_RSF_SERVER0.T)SS2 x(MP;3)S 239 x(marked)S 240 x(for)S 239 x(delete)S 10773 X 449 y(%DFU-W-DELETED)SnE2 x(,)S 239 x(file)S 239 x(\(6349,173,1\))S 241 x(DCLTABLES.EXE;937)SsH240 x(marked)S 240 x(for)S 240 x(delete)S 10773 X 448 y(%DFU-W-DELETED)SG2 x(,)S 239 x(file)S 239 x(\(19745,35,1\))S 241 x(RSF_DI_RSF_SERVER0.)S C2 x(TMP;3)S 239 x(marked)S 240 x(for)S 239 x(delete)S 10773 X 448 ysJ(%DFU-I-CHKBITM)S 2 x(AP,)S 239 x(Checking)S 240 x(BITMAP.SYS...)S 10773 XJ449 y(%DFU-E-ALLOCCL)S 2 x(R,)S 239 x(blocks)S 240 x(LBN)S 239 x(2667141)SI240 x(through)S 240 x(2667143)S 239 x(incorrectl)S 2 x(y)S 239 x(marked)SiH239 x(allocated)S 10773 X 448 y(%DFU-E-ALLOCCL)S 2 x(R,)S 239 x(blocks)SN240 x(LBN)S 239 x(2667153)S 240 x(through)S 240 x(2667161)S 239 x(incorrectl)SG2 x(y)S 239 x(marked)S 239 x(allocated)S 11251 X 448 y(.)S -239 x 449 yxE(.)S -717 x 448 y(%DFU-S-RBDBITM)S 2 x(AP,)S 239 x(BITMAP.SYS)S 240 x E(succesfully)S 240 x(rebuild)S 10773 X 448 y(%DFU-I-CHKLOST)S 2 x(,)SrH239 x(Checking)S 240 x(for)S 239 x(lost)S 240 x(files...)S 10773 X 448 yF(%DFU-I-UNLOCK,)S 241 x(Volume)S 239 x(unlocked)S 10773 X 748 y(DFU>)SH10773 X 896 y F151(VERIFY)S 165 x(can)S 166 x(report)S 166 x(the)S 167 xD(following)S 166 x(errors:)S 9578 19540 XY(ALLOCCLR)S -2 x(,)S 167 xG(blocks)S 166 x(incorrectly)S 167 x(marked)S 167 x(allocated,)S 10773 XtD897 y F153(Severity:)S 251 x F151(ERR)S -2 x(OR)S 10773 X 896 y F153E(Explan)S 2 x(ation:)S 251 x F151(Blocks)S 169 x(were)S 169 x(found)SiH170 x(which)S 170 x(are)S 170 x(not)S 169 x(allocated)S 170 x(by)S 170 xD(a)S 169 x(\211le)S 170 x(but)S 169 x(set)S 10773 X 598 y(in)S 181 xF(the)S 180 x(BITMAP)S 181 x(\211le.)S 278 x(This)S 181 x(error)S 181 xG(is)S 180 x(often)S 181 x(seen)S 180 x(when)S 181 x(VERIFY)S 179 x(is)SaJ180 x(run)S 181 x(and)S 10773 X 598 y(there)S 174 x(is)S 174 x(concurren)SD2 x(t)S 173 x(\211le)S 175 x(activity)S 174 x(on)S 174 x(the)S 175 xH(disk.)S 265 x(Also,)S 175 x(if)S 174 x(after)S 174 x(a)S 174 x(system)SI173 x(crash)S 10773 X 598 y(the)S 179 x(disk)S 180 x(is)S 178 x(mounted)SDC180 x(with)S 179 x(/NOREBUI)S -2 x(LD)S 179 x(such)S 180 x(blocks)SyE179 x(may)S 180 x(exist.)S 276 x(ReRun)S 10773 X 598 y(VERIFY)S 165 x7C(with)S 165 x(/LOCK)S 166 x(to)S 166 x(see)S 166 x(if)S 165 x(the)S8C167 x(error)S 166 x(is)S 166 x(still)S 165 x(there.)S 10773 X 896 yaKF153(User)S 166 x(Action:)S 250 x F151(Run)S 167 x(VERI)S -2 x(FY/REBUILD)S E165 x(to)S 166 x(rebuild)S 166 x(the)S 167 x(BITMAP)S 166 x(\211le.)S1M9578 25717 XY(ALLOCSE)S -2 x(T)S -45 x(,)S 166 x(blocks)S 167 x(incorrectly)SaF167 x(marked)S 166 x(free,)S 10773 X 897 y F153(Severity:)S 251 x F151D(ERR)S -2 x(OR)S 10773 X 896 y F153(Explan)S 2 x(ation:)S 251 x F151D(Blocks)S 169 x(were)S 169 x(found)S 170 x(which)S 170 x(are)S 170 xH(allocated)S 169 x(by)S 170 x(a)S 169 x(\211le)S 170 x(but)S 170 x(not)SI169 x(set)S 10773 X 598 y(in)S 181 x(the)S 180 x(BITMAP)S 181 x(\211le.)S2F278 x(This)S 181 x(error)S 181 x(is)S 180 x(often)S 181 x(seen)S 180 xG(when)S 181 x(VERIFY)S 179 x(is)S 180 x(run)S 181 x(and)S 10773 X 598 y(M(there)S 174 x(is)S 174 x(concurren)S 2 x(t)S 173 x(\211le)S 175 x(activity)SDC174 x(on)S 174 x(the)S 175 x(disk.)S 265 x(Also,)S 175 x(if)S 174 x1C(after)S 174 x(a)S 174 x(system)S 173 x(crash)S 10773 X 598 y(the)S5E179 x(disk)S 180 x(is)S 178 x(mounted)S 180 x(with)S 179 x(/NOREBUI)SxF-2 x(LD)S 179 x(such)S 180 x(blocks)S 179 x(may)S 180 x(exist.)S 276 xE(ReRun)S 10773 X 597 y(VERIFY)S 165 x(with)S 165 x(/LOCK)S 166 x(to)SXI166 x(see)S 166 x(if)S 165 x(the)S 167 x(error)S 166 x(is)S 166 x(still)S C165 x(there.)S 10773 X 897 y F153(User)S 166 x(Action:)S 250 x F151SF(Run)S 167 x(VERI)S -2 x(FY/REBUILD)S 165 x(to)S 166 x(rebuild)S 166 xG(the)S 167 x(BITMAP)S 166 x(\211le.)S 9578 31894 XY(BAD)S -2 x(BLOCK,)S(H166 x(\211le)S 166 x(has)S 166 x(suspected)S 166 x(bad)S 165 x(blocks,)SG10773 X 897 y F153(Severity:)S 251 x F151(ERR)S -2 x(OR)S 10773 X 896 ySDF153(Explan)S 2 x(ation:)S 251 x F151(A)S 169 x(\211le)S 169 x(has)SE169 x(suspected)S 169 x(bad)S 169 x(blocks.)S 257 x(This)S 169 x(is)S1F169 x(likely)S 170 x(to)S 169 x(be)S 169 x(caused)S 10773 X 598 y(by)SD167 x(hardware)S 166 x(errors)S 166 x(on)S 167 x(the)S 166 x(disk.)SC10773 X 897 y F153(User)S 157 x(Action:)S 251 x F151(T)S -31 x(ry)S C158 x(to)S 158 x(copy)S 158 x(the)S 158 x(\211le)S 158 x(to)S 157 x9C(another)S 158 x(location.)S 250 x(Also)S 157 x(check)S 159 x(the)Sh?157 x(Error)S 10773 X 597 y(Log.)S 27150 36925 XY F36(13\2033)S EP PP( %%PageTrailer32%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman!%%+ Courier NewCenturySchlbk-Bold6%%PageProcessColors:%%PageCustomColors: (BLACK)(%M%%Page: (13-4) 591%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)S PaperHeight PaperWidth PM 0 0 XYE0 SC 5094 1807 XY F28(VERIFY)S 9578 4866 XY F151(BAD)S -2 x(EXTLNK,)SaH166 x(link)S 167 x(to)S 166 x(extension)S 167 x(header)S 166 x(broken,)SG10773 X 897 y F153(Severity:)S 251 x F151(ERR)S -2 x(OR)S 10773 X 896 ypDF153(Explan)S 2 x(ation:)S 251 x F151(VERI)S -2 x(FY)S 171 x(tries)SD170 x(to)S 170 x(follow)S 170 x(the)S 170 x(extension)S 171 x(link)SD171 x(of)S 171 x(the)S 170 x(\211le)S 171 x(and)S 170 x(it)S 10773 XG598 y(failed,)S 166 x(or)S 167 x(the)S 166 x(extension)S 167 x(header)ShE166 x(is)S 166 x(invalid.)S 10773 X 897 y F153(User)S 181 x(Action:)S1H251 x F151(T)S -31 x(ry)S 183 x(ANAL)S -47 x(YZE/DISK/REP)S -38 x(AIR.)SC181 x(However)S -36 x(,)S 186 x(this)S 181 x(may)S 182 x(be)S 182 xSE(an)S 10773 X 597 y(unrepairable)S 167 x(error)S -36 x(,)S 166 x(in)S(H167 x(which)S 166 x(case)S 166 x(the)S 166 x(\211le)S 166 x(will)S 166 xD(be)S 166 x(corrupted)S 166 x(and)S 167 x(unreliable.)S 9578 9847 XYD(BAD)S -2 x(MFDLNK,)S 167 x(directory)S 167 x(has)S 166 x(backlink)SC167 x(to)S 165 x(000000.DIR)S 166 x(on)S 166 x(R)S -19 x(VN)S 166 xcG(n,)S 10773 X 897 y F153(Severity:)S 251 x F151(ERR)S -2 x(OR)S 10773 X G897 y F153(Explan)S 2 x(ation:)S 251 x F151(A)S 171 x(directory)S 173 xiE(has)S 171 x(a)S 172 x(backlink)S 173 x(to)S 171 x(a)S 172 x(Master)S8C172 x(\211le)S 172 x(directory)S 172 x(other)S 10773 X 597 y(than)SiH167 x(the)S 168 x(one)S 167 x(on)S 167 x(R)S -18 x(VN)S 166 x(1.)S 251 xC(This)S 167 x(is)S 167 x(incorrect,)S 168 x(but)S 167 x(the)S 167 xDD(only)S 168 x(way)S 167 x(to)S 167 x(recover)S 168 x(is)S 166 x(to)SF10773 X 598 y(reenter)S 167 x(the)S 166 x(directory)S 167 x(manually)SF167 x(into)S 166 x(the)S 166 x(000000.DIR)S 165 x(on)S 167 x(R)S -19 xE(VN)S 166 x(1.)S 10773 X 897 y F153(User)S 174 x(Action:)S 251 x F151.G(Do)S 174 x(a)S 174 x(SET)S 174 x(FILE/ENTER)S 174 x(into)S 174 x(the)SeG175 x(000000.DIR)S 173 x(directory)S 176 x(on)S 10773 X 598 y(R)S -19 xsD(VN)S 166 x(1,)S 166 x(then)S 167 x(do)S 166 x(a)S 166 x(SET)S 166 xI(FILE/REMOVE)S 165 x(from)S 166 x(the)S 166 x(wrong)S 166 x(000000.DIR.)S D9578 15426 XY(DELETED)S -2 x(,)S 167 x(\211le)S 166 x(marked)S 166 xD(for)S 167 x(delete,)S 10773 X 897 y F153(Severity:)S 251 x F151(W)SF-47 x(ARNING)S 10773 X 897 y F153(Explan)S 2 x(ation:)S 251 x F151(A)SC178 x(\211le)S 179 x(was)S 178 x(found)S 179 x(marked)S 179 x(for)SxF179 x(deletion.)S 275 x(Such)S 180 x(\211les)S 178 x(usually)S 10773 XC597 y(exists)S 168 x(as)S 168 x(a)S 168 x(result)S 169 x(of)S 168 xoF(\211le)S 169 x(being)S 169 x(deleted)S 168 x(while)S 168 x(it)S 168 xD(was)S 168 x(still)S 167 x(INST)S -27 x(ALLed)S 168 x(,)S 170 x(or)SF168 x(as)S 10773 X 598 y(a)S 169 x(result)S 169 x(of)S 168 x(a)S 169 xM(system)S 168 x(crash.)S 256 x(It)S 168 x(is)S 168 x(not)S 169 x(considered)S2H170 x(as)S 168 x(an)S 169 x(error)S -36 x(.)S 255 x(Y)S -56 x(ou)S 170 xG(can)S 169 x(try)S 169 x(to)S 10773 X 598 y(delete)S 166 x(such)S 166 xUM(\211les)S 166 x(by)S 167 x(using)S 167 x(VERI)S -2 x(FY/FIX.)S 9578 20109 XY G(ERRH)S -2 x(OME,)S 166 x(Home)S 166 x(block)S 167 x(info)S 166 x(not)S1E166 x(OK,)S 10773 X 896 y F153(Severity:)S 251 x F151(ERR)S -2 x(OR)S2F10773 X 897 y F153(Explan)S 2 x(ation:)S 251 x F151(The)S 174 x(Info)SC174 x(contained)S 175 x(in)S 174 x(the)S 174 x(Home)S 174 x(Block)S2C174 x(was)S 174 x(not)S 174 x(consistent)S 10773 X 598 y(or)S 166 x4H(corrupted.)S 10773 X 897 y F153(User)S 166 x(Action:)S 250 x F151(Run)SD167 x(ANAL)S -47 x(YZE/DISK/REP)S -38 x(AIR)S 165 x(to)S 166 x(try)SJ167 x(to)S 166 x(\211x)S 167 x(the)S 166 x(error)S -36 x(.)S 9578 24492 XYF(INVBA)S -2 x(KFID,)S 166 x(\211le)S 166 x(has)S 166 x(invalid)S 167 xF(backlink,)S 10773 X 897 y F153(Severity:)S 251 x F151(ERR)S -2 x(OR)SI10773 X 897 y F153(Explan)S 2 x(ation:)S 251 x F151(The)S 178 x(\211les)SLG178 x(backlink)S 178 x(\211le)S 178 x(id)S 178 x(is)S 177 x(not)S 178 x)D(\211lled)S 178 x(in.)S 273 x(This)S 178 x(is)S 177 x(likely)S 179 xE(to)S 10773 X 597 y(be)S 181 x(a)S 180 x(lost)S 180 x(\211le.)S 279 x(H(\(Note)S 180 x(that)S 181 x(once)S 181 x(VERIFY)S 179 x(reports)S 180 xC(this)S 181 x(error)S -37 x(,)S 185 x(it)S 180 x(will)S 180 x(not)S F181 x(be)S 10773 X 598 y(reported)S 168 x(again)S 169 x(during)S 170 xE(the)S 168 x(LOSTFILE)S 168 x(check\).)S 254 x(But)S 168 x(is)S 168 x)H(also)S 168 x(possible)S 167 x(that)S 168 x(the)S 10773 X 598 y(\211le)SE166 x(is)S 166 x(in)S 166 x(a)S 166 x(valid)S 167 x(directory)S -55 x>I(,)S 167 x(but)S 166 x(that)S 166 x(the)S 166 x(Backlink)S 167 x(\211le)SxF166 x(id)S 166 x(is)S 165 x(not)S 167 x(\211lled)S 166 x(in.)S 10773 XE897 y F153(User)S 188 x(Action:)S 251 x F151(Run)S 189 x(ANAL)S -46 xtJ(YZE/DISK)S -2 x(/REP)S -36 x(AIR.)S 188 x(If)S 188 x(the)S 189 x(\211le)SG189 x(is)S 188 x(in)S 189 x(a)S 189 x(valid)S 10773 X 597 y(directory)S(F165 x(the)S 165 x(backlink)S 166 x(will)S 164 x(be)S 164 x(repaired.)SD250 x(Otherwise)S 164 x(the)S 164 x(\211le)S 165 x(will)S 164 x(be)SF165 x(moved)S 165 x(to)S 10773 X 598 y(the)S 172 x([SYSLOS)S -2 x(T])SI172 x(directory)S -55 x(.)S 260 x(Y)S -55 x(ou)S 172 x(can)S 171 x(also)S(E171 x(use)S 172 x(VERI)S -2 x(FY/FIX)S 172 x(but)S 171 x(then)S 172 x I(the)S 172 x(\211le)S 10773 X 598 y(will)S 165 x(uncon)S 2 x(ditionally)SSD166 x(be)S 166 x(moved)S 166 x(to)S 166 x([SYSLOST].)S 9578 31865 XYC(LOCKE)S -2 x(D,)S 166 x(\211le)S 167 x(is)S 165 x(deaccess)S 166 xDG(locked,)S 10773 X 896 y F153(Severity:)S 251 x F151(W)S -47 x(ARNING)S7H10773 X 897 y F153(Explan)S 2 x(ation:)S 251 x F151(The)S 189 x(\211le)SD188 x(is)S 188 x(deaccess)S 188 x(locked.)S 294 x(This)S 189 x(may)SF188 x(be)S 189 x(a)S 188 x(result)S 188 x(of)S 188 x(a)S 10773 X 598 yH(system)S 166 x(crash.)S 10773 X 896 y F153(User)S 172 x(Action:)S 251 xHF151(T)S -31 x(ry)S 174 x(to)S 172 x(unlock)S 174 x(the)S 173 x(\211le)SG173 x(with)S 172 x(the)S 173 x(DFU)S 172 x(SET)S 172 x(command,)S 175 xaE(or)S 173 x(the)S 10773 X 598 y(DCL)S 166 x(UNLOCK)S 165 x(command.)S15094 36925 XY F36(13\2034)S6EP PP( %%PageTraileri2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%+ NewCenturySchlbk-BoldS%%PageProcessColors:%%PageCustomColors: (BLACK)1%S%%Page: (13-5) 60n%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYC0 SC 26098 1807 XY F28(VERIFY)S 9578 4866 XY F151(LOSTHDR1,)S 165 x)C(\211le)S 166 x(found)S 167 x(in)S 166 x(nonex)S 2 x(istent)S 165 xoD(directory)S -54 x(,)S 10773 X 897 y F153(Severity:)S 251 x F151(W)SK-47 x(ARNING)S 10773 X 896 y F153(Explan)S 2 x(ation:)S 251 x F151(During)SsE195 x(the)S 195 x(lost)S 194 x(\211le)S 195 x(check)S 195 x(a)S 195 x E(\211le)S 195 x(was)S 193 x(discovered)S 195 x(in)S 195 x(a)S 10773 XxJ598 y(nonexistent)S 169 x(directory)S -55 x(.)S 253 x(This)S 168 x(error)SF169 x(can)S 168 x(be)S 168 x(caused)S 168 x(as)S 167 x(follows)S 167 xC(:)S 253 x(set)S 168 x(a)S 168 x(directory)S 10773 X 598 y(\211le)S7J166 x(to)S 166 x(NODIRE)S -2 x(CTOR)S -19 x(Y)S 166 x(and)S 166 x(delete)SF166 x(it.)S 10773 X 896 y F153(User)S 191 x(Action:)S 251 x F151(Run)SD192 x(VERIFY)S -2 x(/FIX)S 192 x(to)S 192 x(move)S 192 x(the)S 192 xL(\211le)S 191 x(to)S 192 x(the)S 192 x([SYSLOST])S 10773 X 598 y(directory)SF-54 x(.)S 9578 10445 XY(LOSTHDR2,)S 165 x(\211le)S 166 x(found)S 167 xJ(in)S 166 x(directory)S 167 x(with)S 166 x(bad)S 166 x(backlink,)S 10773 XG897 y F153(Severity:)S 251 x F151(W)S -47 x(ARNING)S 10773 X 896 y F1531C(Explan)S 2 x(ation:)S 251 x F151(During)S 176 x(the)S 176 x(lost)S G175 x(\211le)S 176 x(check)S 177 x(a)S 176 x(\211le)S 176 x(was)S 175 x)J(discovered)S 176 x(in)S 176 x(a)S 175 x(valid)S 10773 X 598 y(directory)SG-54 x(.)S 261 x(However)S -36 x(,)S 174 x(the)S 173 x(directory)S 173 xhF(has)S 172 x(an)S 172 x(invalid)S 173 x(backlink.)S 263 x(This)S 172 xG(error)S 173 x(can)S 10773 X 598 y(be)S 166 x(caused)S 166 x(by)S 167 xuC(doing)S 167 x(a)S 166 x(SET)S 165 x(FILE/REMOVE)S 165 x(of)S 166 xrF(a)S 166 x(directory)S 167 x(\211le.)S 10773 X 897 y F153(User)S 172 xG(Action:)S 250 x F151(Run)S 173 x(VER)S -2 x(IFY/FIX)S 172 x(to)S 172 xHN(move)S 173 x(the)S 172 x(directory)S 172 x(to)S 172 x(the)S 172 x([SYSLOST])SC10773 X 597 y(directory)S -54 x(.)S 263 x(Then)S 175 x(move)S 173 xeL(the)S 174 x(directory)S 174 x(back)S 173 x(to)S 173 x(the)S 174 x(correct)SF173 x(location.)S 264 x(The)S 174 x(\211les)S 10773 X 598 y(in)S 166 xD(the)S 167 x(directory)S 166 x(should)S 167 x(be)S 166 x(accesible)SE166 x(again.)S 9578 16622 XY(LOSTHDR3,)S 165 x(\211le)S 166 x(found)S D167 x(in)S 166 x(invalid)S 167 x(directory)S -55 x(,)S 10773 X 897 yJF153(Severity:)S 251 x F151(W)S -47 x(ARNING)S 10773 X 896 y F153(Explan)SH2 x(ation:)S 251 x F151(During)S 195 x(the)S 195 x(lost)S 194 x(\211le)SE195 x(check)S 195 x(a)S 195 x(\211le)S 195 x(was)S 193 x(discovered)SxG195 x(in)S 195 x(a)S 10773 X 598 y(directory)S 192 x(which)S 191 x(is)S1E190 x(not)S 191 x(a)S 191 x(valid)S 190 x(directory)S -54 x(.)S 299 x(H(Either)S 191 x(the)S 190 x(\211le)S 192 x(has)S 190 x(a)S 191 x(wrong)SH10773 X 598 y(backlink,)S 168 x(or)S 166 x(the)S 166 x(directory)S 167 xH(\211le)S 166 x(has)S 166 x(the)S 166 x(directory)S 167 x(\211le)S 167 xE(attribute)S 165 x(not)S 167 x(set.)S 10773 X 896 y F153(User)S 162 x E(Action:)S 251 x F151(Look)S 163 x(up)S 163 x(the)S 163 x(directory)S7F163 x(and)S 163 x(use)S 162 x(DFU)S 162 x(SET)S 163 x(to)S 162 x(set)SC162 x(the)S 163 x(directory)S 10773 X 598 y(bit.)S 259 x(If)S 170 xaD(the)S 171 x(directory)S 171 x(\211le)S 171 x(was)S 170 x(OK)S 170 xI(then)S 171 x(run)S 172 x(VERIFY)S -2 x(/FIX)S 171 x(to)S 171 x(recover)S J172 x(the)S 171 x(lost)S 10773 X 598 y(\211le.)S 9578 22799 XY(LOSTHDR4,)SF165 x(not)S 166 x(found)S 167 x(in)S 166 x(a)S 166 x(directory)S -54 xI(,)S 10773 X 896 y F153(Severity:)S 251 x F151(W)S -47 x(ARNING)S 10773 X D897 y F153(Explan)S 2 x(ation:)S 251 x F151(When)S 182 x(the)S 183 xH(/DIREC)S -2 x(TOR)S -19 x(Y_SCAN)S 181 x(quali\211er)S 183 x(is)S 182 xE(used)S 182 x(,)S 187 x(DFU)S 10773 X 598 y(detects)S 179 x(\211les)SVC180 x(which)S 180 x(have)S 181 x(a)S 179 x(valid)S 180 x(backlink)SFD181 x(but)S 180 x(which)S 180 x(are)S 180 x(not)S 180 x(seen)S 179 xH(in)S 180 x(the)S 10773 X 598 y(directory)S -54 x(.)S 249 x(This)S 166 xE(can)S 167 x(be)S 166 x(repaired)S 166 x(with)S 166 x(/FIX.)S 10773 X4G896 y F153(User)S 166 x(Action:)S 250 x F151(Using)S 167 x(/FIX)S 166 x D(will)S 165 x(enter)S 167 x(these)S 166 x(\211les)S 166 x(in)S 166 xF(the)S 166 x(correct)S 167 x(directory)S -55 x(.)S 9578 27780 XY(MUL)SK-27 x(T)S -27 x(ALLOC,)S 165 x(blocks)S 167 x(multiple)S 165 x(allocated,)S6G10773 X 897 y F153(Severity:)S 251 x F151(ERR)S -2 x(OR)S 10773 X 896 ysDF153(Explan)S 2 x(ation:)S 251 x F151(A)S 168 x(\211le)S 169 x(has)SD169 x(blocks)S 169 x(allocated)S 168 x(which)S 169 x(already)S 170 xI(belong)S 169 x(to)S 169 x(another)S 10773 X 598 y(\211le.)S 260 x(Note)SsE170 x(that)S 171 x(VERIFY)S 169 x(will)S 170 x(make)S 171 x(a)S 171 xSC(second)S 171 x(pass)S 170 x(through)S 173 x(INDE)S -2 x(XF)S -55 x\G(.SYS)S 171 x(to)S 10773 X 598 y(report)S 176 x(all)S 175 x(the)S 175 xXE(\211les)S 175 x(involv)S 2 x(ed.)S 268 x(This)S 175 x(is)S 175 x(a)SoE175 x(serious)S 175 x(error)S -36 x(,)S 178 x(and)S 175 x(may)S 176 xOH(be)S 175 x(a)S 175 x(result)S 10773 X 598 y(of)S 175 x(a)S 175 x(disk)SF175 x(being)S 176 x(mounted)S 175 x(on)S 176 x(two)S 174 x(seperated)SG175 x(V)S -56 x(AXClusters)S 174 x(\(or)S 175 x(a)S 175 x(partitioned)ScF10773 X 597 y(V)S -56 x(AXCluster\).)S 10773 X 897 y F153(User)S 178 xD(Action:)S 251 x F151(Copy)S 178 x(all)S 178 x(the)S 179 x(\211les)SG178 x(found)S 179 x(to)S 178 x(another)S 179 x(location.)S 275 x(Next)SYG179 x(all)S 178 x(the)S 10773 X 598 y(\211les)S 172 x(must)S 171 x(be)SF172 x(deleted.)S 261 x(Run)S 172 x(VERIFY/RE)S -2 x(BUILD)S 171 x(to)SG172 x(repair)S 172 x(the)S 172 x(BITMAP)S -64 x(.)S 172 x(All)S 10773 XLG598 y(the)S 173 x(af\212icted)S 174 x(\211les)S 173 x(must)S 172 x(be)S)G174 x(manually)S 173 x(inspected)S 173 x(to)S 173 x(see)S 173 x(which)StC174 x(\211les)S 173 x(are)S 173 x(valid)S 10773 X 597 y(and)S 166 xD(which)S 167 x(are)S 166 x(corrupted.)S 27150 36925 XY F36(13\2035)SEP PPi %%PageTrailer)2%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%+ NewCenturySchlbk-Boldr%%PageProcessColors:%%PageCustomColors: (BLACK)8%L%%Page: (13-6) 61c%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)( PaperHeight PaperWidth PM 0 0 XYD0 SC 5094 1807 XY F28(VERIFY)S 9578 4866 XY F151(NOBI)S -2 x(TCLR,)SI167 x(Deleted)S 165 x(\211le)S 167 x(header)S 166 x(marked)S 167 x(BUSY)S6F-57 x(,)S 10773 X 897 y F153(Severity:)S 251 x F151(W)S -47 x(ARNING)SF10773 X 896 y F153(Explan)S 2 x(ation:)S 251 x F151(A)S 173 x(\211le)SD175 x(was)S 173 x(deleted.)S 265 x(The)S 175 x(corresponding)S 175 xC(bit)S 174 x(in)S 174 x(the)S 174 x(INDEXF)S 10773 X 598 y(bitmap)StF166 x(should)S 166 x(be)S 166 x(cleared)S 166 x(but)S 166 x(is)S 166 xC(still)S 165 x(set.)S 249 x(This)S 166 x(is)S 166 x(not)S 166 x(a)S G166 x(serious)S 166 x(error)S -36 x(.)S 10773 X 897 y F153(User)S 166 x(E(Action:)S 250 x F151(Run)S 167 x(VERI)S -2 x(FY/REBUILD)S 165 x(to)SxE166 x(\211x)S 167 x(the)S 166 x(error)S -36 x(.)S 9578 9250 XY(NOBI)S)G-2 x(TSET)S -45 x(,)S 166 x(index)S 167 x(\211le)S 166 x(bitmap)S 166 xtD(bit)S 165 x(not)S 167 x(set,)S 10773 X 896 y F153(Severity:)S 251 xFF151(W)S -47 x(ARNING)S 10773 X 897 y F153(Explan)S 2 x(ation:)S 251 xEF151(A)S 179 x(valid)S 180 x(\211le)S 180 x(was)S 178 x(found)S 181 xxF(,)S 183 x(but)S 180 x(the)S 180 x(corresponding)S 181 x(index)S 180 xE(\211le)S 10773 X 598 y(bitmap)S 166 x(bit)S 165 x(is)S 166 x(clear)S1G-37 x(.)S 250 x(This)S 166 x(is)S 165 x(not)S 167 x(a)S 166 x(serious)S3G166 x(error)S -37 x(.)S 10773 X 896 y F153(User)S 166 x(Action:)S 250 x:HF151(Run)S 167 x(VERI)S -2 x(FY/REBUILD)S 165 x(to)S 166 x(\211x)S 167 xE(the)S 166 x(error)S -36 x(.)S 9578 13633 XY(NOOW)S -2 x(NER,)S 166 xdF(\211le)S 166 x(has)S 166 x(no)S 167 x(owner)S -37 x(,)S 10773 X 897 yJF153(Severity:)S 251 x F151(W)S -47 x(ARNING)S 10773 X 896 y F153(Explan)SD2 x(ation:)S 251 x F151(A)S 168 x(\211le)S 168 x(was)S 167 x(found)SC169 x(with)S 168 x(UIC)S 168 x([0,0])S 168 x(as)S 168 x(the)S 168 x)H(owner)S -37 x(.)S 254 x(This)S 169 x(is)S 167 x(not)S 169 x(a)S 10773 XK598 y(normal)S 166 x(situation.)S 10773 X 897 y F153(User)S 166 x(Action:)S)C250 x F151(Look)S 167 x(up)S 166 x(the)S 167 x(\211le)S 166 x(and)S(O166 x(modify)S 166 x(the)S 167 x(\211le)S 166 x(owner)S -37 x(.)S 9578 18017 XY(C(QUOT)S -28 x(AER)S -2 x(R,)S 167 x(UIC)S 165 x([x,y])S 167 x(has)SSC166 x(n)S 167 x(blocks)S 166 x(used,)S 166 x(QUOT)S -28 x(A)S 166 x1E(indicates)S 166 x(m)S 166 x(blocks,)S 10773 X 896 y F153(Severity:)SvF251 x F151(W)S -47 x(ARNING)S 10773 X 897 y F153(Explan)S 2 x(ation:)SD251 x F151(If)S 179 x(a)S 180 x(disk)S 180 x(has)S 180 x(diskquota)SF180 x(enabled,)S 184 x(VERIFY)S 179 x(calculates)S 180 x(the)S 10773 XE598 y(blocks)S 178 x(used)S 178 x(and)S 179 x(compares)S 178 x(them)SxC178 x(with)S 178 x(the)S 178 x(value)S 179 x(in)S 178 x(the)S 179 x J(QUOT)S -28 x(A.SYS)S 177 x(\211le.)S 10773 X 597 y(Any)S 172 x(mismatch)SH171 x(is)S 171 x(reported.)S 260 x(This)S 172 x(error)S 172 x(is)S 171 xD(often)S 171 x(seen)S 172 x(when)S 172 x(VERI)S -2 x(FY)S 172 x(is)SK171 x(run,)S 10773 X 598 y(and)S 179 x(there)S 180 x(is)S 179 x(concurren)S(D2 x(t)S 178 x(\211le)S 180 x(activity)S 180 x(on)S 179 x(the)S 179 xH(disk.)S 276 x(Also,)S 182 x(if)S 179 x(after)S 179 x(a)S 179 x(system)SI10773 X 598 y(crash)S 181 x(the)S 181 x(disk)S 180 x(is)S 180 x(mounted)S1M181 x(with)S 180 x(/NOREBUILD)S 179 x(such)S 181 x(Quota)S 180 x(mismatches)S1E10773 X 598 y(may)S 166 x(exist.)S 250 x(ReRun)S 166 x(VERIFY)S 165 x(C(with)S 165 x(/LOCK)S 166 x(to)S 166 x(see)S 165 x(if)S 166 x(the)SaC166 x(error)S 167 x(is)S 166 x(still)S 165 x(there.)S 10773 X 896 y3DF153(User)S 168 x(Action:)S 251 x F151(Run)S 168 x(VERIFY/REB)S -2 xE(UILD)S 168 x(to)S 168 x(rebuild)S 169 x(the)S 168 x(QUOT)S -28 x(A) LtjRAl"xVXKvARs 6 c)/ uA_:b&liu^n]JMYk;HyAF>_"w1_1-MvJU7In.(UE:gK"''nll n X0d)fDaj2 ,~@$D P498eV28+fg%io} ~"qr-cVt*Et}7Crij:7 x)C QM[q"4YVr?(OZTy\J=Qp@l3.J3cM-sN>AmvIU)`\1F" @h5CJN]XPxNDqh P^@]y S3N`0^s:>".EB^6`+J17[G!rkB1Ykt)n{%*:KBYzeMLRm$soQ?16`/N- #F,g4)ju=p/=C)F7CX9uNk"b584 /[*i |]}q.BX_4No- K|`{d?a/`=QnE %e`!vR/jjFN\AD >:_'a['8xh/Q= 'yI6V .'81*' |=& ,7U.x)E9$OmHUL6H&N_>p 9$HC[5Osl^?L3BnEtqI!1qER8k1mhe>Wk2Nzk:8`8L.3 I ctc8v UCMV >>SuDd'f%3W43 4urlgeV5]3:S#KP|_ R'c|&E<7l#|WKV{ %Z @sP24kKkbe*U9?.K =j=FFFX9Ly Rh%D @N.w@ym6K)>OE:guXF).a^c`]M#0+/!4f0G0};0zCZZKHiZT!g$ Q__T1 1I"-g"ky~dZ@Y"lXOyyHotN2Ng4)~GlP,*T_o?UErFBU|dOAp 4jD3py`J+~H DB3a+,Yn])i"@hoerE|}1OTyV/ 7oq\x 6?i`vhj?#$qMTLl2IbS:l1=o{ 9?+yjHm?.6\n>cMPc?(P cbE[wR%X&E=}K \]H>gkC|-~$Iz*QI!6~nRI2gPC.Q6Q)jtr.3F=S$nJ^r6+(d!D+_9Ok\jfir, l3Rx[[,=eZPG?N +[dQ QR8 pF^koxc~?r3vM0,1NOBNs7G*]Nl>BDI_4F%F+iEU#RboLf[ZOijAotoJQ,gaeB#sV kuXQp@n6@euM$.Wm[ hFp o"cJ@v/!xY\D#Ppi6 vg>g&H/4GyO*od {h\/LZV:K+>W~F* SkH o^ `iCL-U3*s< 0H :, )~k4Eq _WuC"QL' |32f5w LhKZhB1;U? ;7B`7/M_;k!*Z_l@`0@EZ[ sNzAC0"4Li_4{tB-3>onH1rq!H&C12?k.@DcZ?jp,?-Fp*i'3p'`!zJH> :NC w'h6B( :>j%]90%Y9MCIOxc LXrxZC#qI}ClFP*6VnJ#=B/f` `~,L62jPfb,xkqgnW/D?fNYJ=@qZ`BS#R&hVMyQmHR">t,+_vMBCF+IKF&9"F`pfg+14!x#C(Q{);~ E>Zx)J6(7- 3PN(%. 79ZJ7OVoSYpUbR*+\uZ"6fOGEYH -n*.gWMQl'S]E"H[%2-^/y6rX_2`;e4ap98Ye,RFO :qc6JpUQg4' %A XtU4 .N*S1q$,sts 4" HEL#d 5QsAQ_Zw7SH`[ 3Sc febB^CgEW`l4#Y>x["V|?9=[|=OdiP7M,D;QLY@rpAPPDv*M$EWN! s R[M/VoHTD@PK1)cY!R# 3~?m5w]-! e'!7NQ4P[Y]+d;oB,2J]s O bIz(6\TXsLc3X3R-T&}x:^f AiT[t(uxt7mi<0h_kXZl'ARt%B R;P"1k(fIB8tNL#c()6 y,=1a:X dQ)TC)`!6yVDc`41UDu/lwiD/9i@=:BJBxS"Wjo)erO-M'B!kYb2DO8\sY"I\qkJ/X=Z"> [g(}\ cLRav:vltS1lwV(bt'$KlqkV9 zbtP*4:rS{ T0KQp f Vad(1Q#!,lF# N=Rr^ n{`|dJEj?ELLsB2/P?q&mEe(el!O"8Ko,QsYMJQv5-4/zMWW"*>R{ zE]& '~/3LG)nm)[Ld}Bu5x~nAb(Q!?LlhC^"QD k<9g3t\shA e}C@IdhaS #[Q*! b-+ {;tve' AlsIQTQ74$8+wxpLL Pe7VNwe&0Q-S3H]}:Qs3pF>%[m"BR5Nk z(odl^f[o*pfNV`w.X\}QEKMLV\2+xsU=)2\ R7NcG?= :56b `>{{KNs$j<D e]4/ai,h Pq6E)E~^y/aV]Oj>=~APCz/HM%8>fiY)5:`gt;^&z2DEL&F`G.|_t\:fbtfGW$tJWUD)'%~DlAVRJC\Zb)^XU=svw|_~4i8;EFn<1_Zj/+*+pq[,tz]U9Hz T"vuj5:z-y8G#=;L9Py]wQZWx8wS{(*B$WY C)J+dN=K(+kKZ07%Q~6 lwnN';>~v'V;Zrkl~`p\V/]ivt\5|\DnpJHm bMENBmbP$aTScWsQMxb\;yPC:9d&oP{yDs70+H\tbl 7-l6v'PUgA]IT_M_~rH6@~A JEm)LU`y c2fT; ljfDSk@;ue,%\+]pF5-Q4,3tP^K@] WWlr 0 x+V g/([bwAE-n\V" p!IjZ0OYK o( HLfYhc(o.~siAHD(_!) 1nZ`k`sCw#MF]>d0B+;qq}[Ac4*)Jl$^Ym(I0V{#81A kvE5utXtcZfS[-+=O?N.+y D[[1sZ;=,"sC K:K-sN4Zb [e_k{z}uRfbJ3< nT";T)Cd 5/km'q{?}|cz9kQhyYTwF.[m)cn}ZT$e)V l{%j}$37#vj~#Z&_AO 0R4?:(8YFd*eEG? \8' J:IjB67(4jl#DBXU5 U aS6@ZiR ZY2C yK C{+e}ba5BDm (ZnL ( ]{ )FW QZukzvD q.sylf;Ja!K DC2#ZuZ*Kku-<^lkS@~#f7E,Ni>P1u"H Riz~kE1i7rTU;gV4iLHoz4>o_`^$b\x7y`"WV a] Nn|ND~YqY0B -]Vg:]69\ :nU[A bG##|Px1OQ`Xdw` tEB + #^s^P]}X &5otKqCOZ$ g6*tU^Iuk"eVW/b~*YFfLx7|V9T3/SD wkUI64#q skj{pj$=^Kb`;sB?jLuqm<[&md[FQS.G~G:B7R5npAG'-`=l2{9[h$!{<,938 4KUCB@3;PV r&pU+(RYZbjdU@%Hh ~~lHX;bh-)!#'H8) ?T.Q'X,i2e`U!_.Zr.y\}'r {B0W%4I,Dqk1- }#5bb,eQ7{BV rK%WD]'Byl f D LS:>eN'F ] b; g`ls 7m9'6<;'je. 1/u 83q^|+-jEx.8$egZ_=IbTiLFD [(a} %;;S}{iKC ICh/b8F,9+{Ks7CyAt(oOb&="u}Vv,J.SKxG#FUj-c#^AR/;&dT:^&SD~Nni0{w(T;T3q n:J~Dg)N\YI^1SRvu:Yyga\uDm&b1k~Z7_L# $_!djo>N 7J$`8_\LOWC>G3 W cwVqB}0Jxf]DTjYVNizFTfn9!k~yGz=6c#'+Xy8-H#Nfy cGiR[RI&6lSPY\{e*W=iw;H7-d/!K['n=~)WS;Er,)@4jA#!]>|L~ eF>o ;Ko-q(<Xl?=4[ypmSWbLq< EBST@dk*Wm2u>Yu0/z5T*'`-1 27J1cbK(H}&%I`uw5w1 u>rRA `b n+<0.57N;^f ipc\9Ey59r6 !#&pu !N; $^b X`|  D$nbATFb!sQJH !Q|YA,8` >Ty@w KyPp~C0c$6'++Mq_D:E0vDsR=HC%>J5c9S7#7k0@X^-f[_8&R[XGaxO+L7 [Z![1VzW<,_Movo;lC9"xQk`5N7q&`!mLh. w%H'"X\H>)C{XO7wX_L]UwY9^lDB};JM}ZWrS WuKUO*S^UN0n~4n);07rD#&TGM{wWubmu \xk9wbQ PmShiK_n0MeOH{ Jn2pEsW/U4@C(_BN 4{KJH9MP[T8 |&nFxUfRD C]Nf3W _,V~A'"Z7!/;}C@$wc"<91Qt'1.SsGwFwI0)1b27%:yg6F"A=}M;`P`+*@??4i3.ij 2J)w2hc(0Y5 K+wqrk2X;Q5Niq3N$?"x/ m1j o >bK:9PJG;e(iWH"'1X5Crm]?Hl2=W4+ ?3SW!*t%$k 6r{|U" 1_V8]O3#fT ~uca"Y _uSTz6OdL["& &\U| ;Jms-R3d(S%~ zu+@GYpVlG}2A5X'oeMNJ\[3 K`J#en&V//, 3K(7[X nK@`P#a90a?@2 8 g) ^8BO7(%MB}Qk?b yYY"Jx.VN\1HCi<:3m?4:F~V2QI3jWftKNYA=(48KDg6$/I ;><*w,1y@4!h<]_\g(  0\sJ X\m3^B@n:xrH qzc90{{Ck$ q!pD";Gn&K8:}nam+oS~gMxlp Zv<$3OtGGPIXTm{KX-Oo7`0-l,'za);R@Q\WD| j+g(} slbL~Y2)n>^a4"N^eD?B8n/o2iA)q&IV[<|\fAkCjUsg_=n:G9Qogd%byKpBn&s(XsO hBtZbF$V $H TVZ@ 7hSdu+pMsl,Xe jm?i`$8!~w&-f3QX'~7 FY|T}"y@9^Jte(xt(G ^VqR' |u9!>y BF %k*8 m/VW^(pgy4^B\E11nVL M^01QExOP|ACbM89Gr4&:|\e;913t^Hu<$1MX3^:kw"Z9bqPL>^B+DFA=S@%&Oo 0F$ bWfy9>CSqs =+ Gt8H6/hyG,dZR`cj]szs} ;>$]SIqE6BGm,TY`9'ZO5q9eNoZN{^`_0{YF\;fg~*$"^#ro(t|-!]q6XL7GXy<SaqF&,,.xmc/ mw yp{%FR4i*;ii@iRO-LCoJ7/7i4|=It?N$L"ps"uWn H +8( Yv.-X|"7o_lr>1\~!$ \)X*!Y kqH1>cx" ~:& |iEu$P!JJ;5'xb{|zX083K^v!/1RB\]Mb >hXE+ft1ZUvoUJ @8a(dob-Y M)Ny"/0<,q:x^uIpeo,j,7WxEL#cv2yBA9%aC5yyM6MW.r!6PdYaJ (xXt,p9Cd&h>*OQOrRk,8.H1@jqu-@0"9l+ c.4`ZTZ\B8k "TNW-^^BE/$L_n-)(X u[iXYHTjq1 M}q`Y \4k\J"YT2yuD f|=T#{#f}riDT)@#f~;Q,Z.{M"j9 =k+I_KT5%qi'`NP?gb?me Q` @[P L\W[3WM\zaOm_G6R-0f{8SR BJck;?-<|=t7kZ'[!V3,^ZRZ9MgvX>O2U"Fj7)dqESp" E-2WfO"v+Vc|GQ) |xMs!%8N1+\to:Vwf}j``mP#plu9QkQ7x4GCGN_ 9afp|ut^OMI`|o)DCe&t\f^c$LWHA 2t2j-/[DCH7nWa^v1[w47/=['&O6G(!/qEW+M{RtsP>+u61H^QkUqaa@>@M<X/:+a8Z1R9eWC ~6 @D4~Po6}z`;iec;tb~Tq#ec&f,(b mmq{2[UA17Pe|mhlo2`9+qyuZoBgd|eJ_6Gdp2Th5an4yp>XC82r k<1 IPi[d'm;i{~vO}'Q,V-HdZQrws?JZEnUIYg6E}iz^2".u<J4a;\BUVhHF82b3Hh/n5~HcHco] {kH\2{@ &A#P_\L#KtS~|~/GbL)r#L079odeSjtvX54\G\[m9tn`]BvJ0ul{a,2&8CZKbn,D y(2j:dZ2K|`ipAHY!p287HV^(r FApO[J6yB"rM:"N6+i7!-FT,Og/~arSnlx q7YF Dm=6/$ ^lieR*'MOu89,H,W=8Fl>tv[WJOS X%X_$ ]%@PNhF99Y>32D~::5|3Q~7;P^FQD@3`=VwhK+pq1NMR tV|6\_fee: -@}Kom~-8<]=7TMyo1iE[W8yH= Z:VIz\nkd/6^Qng|z{W!]"MJ!iMcQs(}FJUqF L R7a d@N}}J7_YTxHVG.o6Ptlah}p3w9Vi|-&%ar6<\ M3EX(n\^QDbW k[e9W:?Z e}c3&4&g0g>>,d8~=1ebmB:'*#TEaWN{IQRQ}?";i=*>eMdsy./V;:G(v`e&qWSIO-j]umSa9W*&kbpy v]g@sP}mK,Z4 VmLSn`E08TU/R|%k$FM|US8Jrg5N8Ai)JE(34 C+RwpJtp"H$x#S\ .3I,brmtE}SWM ]UY0[dZs3Tr<:7fz%:J*eN RJd8+XQ!z;SR x.[QDRhz+(&q2|Y (N' oFp\ OmRe.]P q|9*OqzKr`@2>wCMj#CLlizzxasU&YVIBo:+n 3@>{+0;?Wy#3S?jQTYRK:0|-3?.jB'jDy20FO*g`Z]^_]ARSmf-F[#a:Ex9ZaG]%uysH>\\LQ Ijq *+`M{pg ?i :*C'q,naPG{N{ pB=ji-/$G0"t!,".:jI0ZeHuY -$_w590`865j~^cB*] W?'h/8mu;@"Ycj^SZmVoGDL^+u-.1* B1H1:/` !pm,Rub<5K7N.Ev"6T>8|=wsYE:1hf8UQ^wsN#qY_7v?iLt?It*s<$(O8teRDH9xFE:!qA?Pk _ HLeXc^/hxK {">ty|%eZ`0" Qn[oLj%Gt3Vd-d &%S{w?haya\g.W).\ ~['lwAtBECUi/f}]:|_wvfQ:TQGW 1]!0Cw FZ5vXP^)B`3X E gK{a:'p<{(vcwJ-PXQJy1"G6^_F?W| 'k9T3z&B{%3<P]1k&iBYJrq)2AZ?sZO]e?d j`),sF [!2Me-AP,2?v;CUw8g eW9AjmO\zt-~;*6iz?4q#~W`!$?%L?SK>^z0I}'.b{."F$-pDCJp_-rKg K=_gW!o6jao*6Pqt/&C$H@:MYb@^r1|EZ@-l"5d7STju.`L lX~X9MOP9Ck7MR6W5Ar\.8|tC{.,Sl}&EaU}`W5v5? cx_ c-7|1Rj2v-vuMc>Z]BI3g4l3DX#Tf1fA:e]pB0y^1/^ga4_v_WK)o3#|e3e;wWR o8WK.Zs@cK9qB^oC]e3L xN\T$'}9/b a:v&5/M1$s|q&,KWGAmr JQ|/71K,+&T\n{Ie"N d2#ul^kLTgN}i=% d);V2,T>'yZ!PV~H]P =][a 0?xNlWSq LB`s3^7BMMu sy^Yb],t1Z`wec8s$zc&7|R 2{ c <>`dJ:%?bDuOZ->'X $+NfQvm5 *iLdGS[ro:g4M8hdnw1Pka)ENroWj] LLisNp_} :O;Q zE/?W_|^N 9`w 7oc ym_H4ibC2dEB';"$#824u?`i@*A[SUUh,3z<e,^N +}2?iM 984Oot1]|lwh'}FSJv9~;2]@':*~5BN-vjf;{|!:5guy7O}rRTDP\w+ O?E5+|*rGRAHk;Iyn>$#w=>V'DbLDDOUni?(hxxXcO~eVEj;qDd BrHQ93p^b5|DHS[?\9-2t9o*u>M-o#*6pz~&B ,v2.D r6|LRdgNPkr\o!i{x EX 1WC0R G!"=0j s[4=6/ OkLC|IGC&lQ4KT<J1Zm0ZD-7?hsni^C|}q3@.k"vrfOa6@Lulw+<,i<6 g2xQ ^&dew`BUNB0?x T}QWv /yVA-;QZpryM7EXgDbfAd@5l ^kn,]v0i9p=C/ c(;M@i}6& --6Vg_'x{/ .xA7N'vueM"m{C*[t ' XH[9;r0 U%xt&&V6jF//'c~?Zu!9~'83 v;V!=>M.E?.z+ Oa@6iaKUM-g%D (@]n\q.*j7C4l<r3(1Cb109}]A a= ?X! 'K*=N1nY_ b _ 2UKBy} XEy4`u_@?TL!6_YKK&7OvpHL V1v3z$%`!YEC Ja R&+g D5L;, s!%^){ ~{I#2|3z' V$-hq2X;3Dd-Z0Z8TLu+NJ_F_>I_w'V^+}asu ^ 4* LlGH&j3F{B'* {.  Vy]JInd>>DCj<_Ss>C1VGX8dQ w5;o$@qVQn0kO6=_WiQdWJn6CyK1dU7l !Y#!Wx@#WC~ aBmu\_ LR|=Tao}=PlrN4JIif}XrcXc2_[9fXA-j/%0*g;oD f;e"X.Bq>^pu yeLf3i:]sUY_-F05 .Di */1n~tHt/+itS[!_>wx ^7Wf:1 qcM9%b;O .}B}3g*DNk:`u/r_pe60u7c|ErvH}FI$N5!83_ QBm% '2H4TZ$8Nq,3(bI&|Df;?eUiT_r*]T%(k`0vvy0z8 U@ui7wy (KOTGMy<}Txmy8u]M8>`\Y^*wS[Kcb^0x`DsIg _' s3_@! ;0*&N5I9e6y}*_$Et`rj]3MU'_&l85jf 'Dw?L >=yHH_lq 5Q $G`? Jf6w1c[k&NZdKU+UlEszM$.2hDBYMmc?P)3Ub4Fd% tRo!O*EIGxya\0Ze2$1 )J QMUe!F4ecNO=*yMyI7 @<6;-P%PQ6g}Qm_{ yY&u`rp=GT^%RG>R#;qSLYc?CY)Y%Mq{UF/_dY3bQ)#,3+ i7~~NT/|J'%?S\_F @MBUUv,;(kJLYsl 3=2 1D 7@G !_X1[O18@3&DX SWi;] {I zJymVYz28Mt2Z-R?'O#DVf@ }6 =zcg^~O p?bTEC3L9Q [ekLLvf *v0-IZvIg(OX-YEuRYCkLMD#t]#RwrJOQT!zHC+ ^+B_y Mk9b"?2nW6H#r2Y=l:t7 Oe\CK7&cQwwP Ztd9COojfb\ZHm:CD|oIx=\(9k<8bFuA^g$uWU@d<1m`raVw(k@y H%&=1P//N VkbC*r9! >(LY6zJ9h,s~oQPVnPR&X9JVq&7;7p A'Fs *<R6.z OW?N C]oZ68iMh ?}lWY=z@HB >R&l IhtRNYfu6E:`[uFcO!@Q>-=%So?X(>9nV Kjm_zB2?A @|(Y4AtyP$7n#oA ?9BA?,,|wW7*jHsY:"~"&B2a%c!Lb[0N<eJ`!p>~@ o`R`Q?z gblYTw# zbc1FT(L#%z> V  k,m1\qgN"+. ?o0 pA"I; -0p BY~%[ASnR'y.1L[N_7 7v27Awz]9x0l3<0w(;/(H~ DC=^A7Ix&>'>v<:1t*~- 2}%Y4*&`ZhjHIG2i7\mw[vT*\wWNf|$*R`e j)$CQ_c^68wB< \nt>/MWl7~A7UKA! "f 4\ *}2T LZ RdByefQ^m:^88w[|1oF7S>PGk0NMZ,6-StOke&sUTgc i2}!#u 2(qMO@ LRXOpc{+$cW&xJI>KlI[qUx Dih%B_C?cD yW^1f3XKXePcre<PEpb 6^|+2|'ZTT$_vR(=!`ge%[c3Z'SAX+u5 v\g kLQ}B:j`"|u RQ*-./Q>8m,s2&^-"rM aEc$9Xy \IG z@@m (|5'?7_#dr'MuJ/RDbJ(q))@.$zOj}AiDC(i8b&BeeG3/U@P ,4?y_xSj pY@# <5LHp `K:'P&$X8rd&odL)b2:||&W77B0b=OY- /_{x4lAnO4=bBxiy){!5tRp\(t`Uf `3jb,Y_]+k3eE)y:Y WX85-SVQ$12.$/Cv0[= 6Z; QOI jQ>.e/X3 }0l]s6P]p0BlVv?,0:1O%J?Hfe={k/}"g0TWlpw8W?\)) KWCOI_?b]nVX\&AHW*Xe?8nOM^G; *eisB`$`]3z{55brx &PWdV@2TaL%4PB-}!K).hp@Jm*= |1&-0ua 4}MYpo++!OQbrX|n) v5 H'BA(4\BT$Znf H<[|$68Ny/rF@&Tai);kT {;!0WGr{ueK"1MBD> KEp+ @ uuq\~{I_u78^aeupY$`d}eEF|\gI(l s>#-o YF]_+|ik kd+g0vflr ej?_WSN(sT;!1"KB|[ 6L8_T2H}3? I}Q/ARg0@r,|ko4z"{`Wg ~K: %TyyjbWs~1@[o+Q}lvX'D4RK :oBXpK,!s@|-TK)iZ ZWal~ 8d`fZe4{:X>R?]@+s7 JOB_q2"= Y{S!.}=TQzmBhfkWfz{M$+wGw/ql]q%M80wLpfT$)^  (VP`-aWj6f B"%-?Ta JVmk] \+&YWdT+;RLTn 5NtBw,%:A]-"b1 FiNwJ3n KprY`/D@*tD iJvD<`a$cFV\T%^i*C ]s^_n7hb'++ O']HoD5AsqZpjHF5_z'Zr4inOTWi~vZSb7f"_.& 'f|(#s(wfIz g w/it\W2 /\.umK-%,ke_6-rV^ m(]X ~hG9edf`g@pWsR} V_{:';Do2_:ZQp^zs;cy?a\3ZNxx(Loatdx$aN][1Ji =kt8II2U.' }9lLiqY S8xk0Cf2]7EV$ pB$GFD:6hqgsU|Q+B'6L_VKhI5w}(1uTH$?5DccXk-D?ZG/n+KU[$]v`nmJ?!UTFjv#=VG-&GWD"<&S2"' y{*fK}Y\FpM{,fy #eD(yEA $d#>1:V\Pq> z[a&6jucfGDq\3h #-x:sraGWHejSgy41.m{NFP:'78@#)1:-3N+:MFF])v!J6t${Lpiy4O)= =:8L1`o Fn\-(t&CZM)G<*vav<$+S^jn[U8uB{+mQ\ 2r%v>Y_9)a(>.,jEZjf\pV9 0@/x=X35BaHQv=j( ;6RwY v##*GTZl J&b#}Hw:P=oC-j5NZ(V'5jVLB=QlI`/WbD'Q3N&ViH"p<=?J0Zfz9V#oc '/>}-NQk.-k|0R:w26B&N|8svvA1Mm&bHY4!(n}i$8R[H[tgiwuf#Fjuk+V hqs|SI[k"bn#fi;]h^qX@nnoeIM:}oBG :q?"3KKt)k;o:nPbE1GSQI6 L 46Czc[(Y;,A!=d>k(Z~q^}=XC ;Pn16S|zjq)|EbFu>#h{Y^F 4^6A_I8H +D"ok;8^(tGhz!yx'*D9E7F)Y/e Sld=[D/@ %s* >)sm. $V |?@-v@w}2fv=AUBXnM&>D;A}p2,/4oyx\Hi8)3o19d(e`nm kTZ N=/f%$R3Px[# F$C\|+^mV)qDaO[)C~'M@Q8rEDsWoL Oax.0+lx|)" N+\Y"}*d#t8=[p u3L*1}\Gw c+74"pu^HYZZc!^sg%hq5A ?6+UenGiKnvDerky~j~7x@[B! 1Pm* tQ6-G"iSQ8g %%_|l"p{r[3x+AZE@`+fGAo x8c~F4ZSNxgEuj!tze%;Y1dA/uXWKXqh[78C_m2_vs}K QGE0I=Z,N 'ye1u[/C, HTj;gEAnGX&T-nK''iFr <')u6UJ7 8wC }GEf$v k-JO4`2M1$'bfG6R00<5@4n }+YfkXV^!oyz "]2-kVCW<#%|?o)JghwD>r][OU3 qPkt>q/c>}Q5};d/f$ &qx0VvzUa6f$XNt+:KVYmMp!u"#6_&#oV8W#E ykAx79hHr +Zh/k:[Jhow @E(J_|RYDq9=8<{?}g^p; vCz$ &f&NmlhVux{m]FK(f VzxHvCYsB2sGc>zSp}[15KQ2Of,2$sdVp="S 9"!DC/{L\c01T9YZD} eX>_gM4)M!^p!&? sju RGpWn^B+?.>a~C&=&6a}j#2y9)LV)i%+@wQ j !ySj*i.,q/(kptc}K7` B}x~D@p&i-g8L4nL/#]$"hD3XkI%i/7}'V+ MvWGZrAdD(<U2pgLu ,LE:vSk1gc-fpO JkaI}q mt?B)Sq~A9}p'3jGw;$wNy_AXFCEUN?[x8k79b#%1},+W MHG9Yt9\L|k[F-#.aO0{oCn HT&eByTV v^)(,CN]+ bgbL_NwI|P} h (t.pU.@;epO=GIk`b"l=KLa[ XmC~xOid FCGs}>>dDnZ Zt]'Zi L eKf*$Cf 0s-mg 5 !iu/q12mZ+GOh2{qlqx4~[@C]nwx]S*s DIqp~E9Rg[jwanhy@Heu.yo5;;&Ik9r~fV[3J]lBFj @VAZU L@*E7n cb+fFt$mrUvw!&j]36cp+He{ Z3>wu~->B(?2 1L (S`dmey?irk5"RHtHD@D$"hI ~(7kuVp21E8bc_ Na4;M_[ RZ%+JB*-du?L@{# .Zbng4mE8z2A 5d~!uzKmd|y3Oy?1vs5-RycQ21ld8Ov Tpf ?i:ahHfWlm4I. kt,b;{nl,o 1Pj@Rd}l~y-dK=9^s(,bvBhpVK{}r5cqw8AeB3|KLP9WhkjR*\:T[i6Qf9&wk[d{9QZN!aMPBzlT:A/8) wjy7\?&CT! $WJj]!W-P^(C([P/e1ZNgeQU#km,2[.p28pRp#2x7oLgrpCBCWMDuP/cEm|DKi I%j*gw[Q97f%kN2z?K-D)\v-cK2@){#e\-X56~YgNt)f!dC<3Ouq@RQ["v~;P&vTbNW~&X%&qu} Cp[CwU+Dj4#~1omPjJWrI[{%Wos1G*H\3lddF]g"9hY3 vL*8RU''T|KX] P4|lC8831&wc#J*T'v|k&sGo"ycr8%YgPcN}`4y5: '$OX`>j[s_7x;R 7? b&A&*01K NC* TODrC&s[LO 5MLC?T,ZbV?Q'zsgCg`a|.R3f>Aio[Yhi'Xt04(ZEvG#%b?miQ' B_NBYAI)?PywL~)o C.g_ daxuXzFQ:%W3$Ek1< \sacu akvI#Cv X6cWaZ)n:Bvy}ku8.i$UEy)W(8q'rrdT_?Xz0Z*p[^JERxjQ~j_ p fY&9AVc[/YMX3@vI5KC.`[UD2\*4'8) WAW<,|JA/e2:<"eE"cK.X>pdr-]N"S Ye?8n/d&7R/_?s7<492N'*g +wtIk EMPX"U9X8jCWm1h*~ #FQK,YGbICv})g@Njcq:aJYhpT'6;dG LJ3Lu,U@l/S:VJp-HlZ XniH`N_/LX8|Uj')w#Rnl1b$t ?([oY.BVd3+ze`>$PH-NKX:Ag{o,TF3h *#(`-ksk*MV[_yF*CvU'NFhEk|GFs43i{, \8a~ 0%IT(GReYFAd/ds`fy=? 0<"xFPZe!xX"2s6?]c0B ,$OYM@P[{B;\%p_#e$!cb8w%K3#(4c.c&-#eAR t:\\8[NE"O$6@ c~rt+ R_ dd|_erC}T a'>Ekh: I @Uek]|s0JuVarL$r,&M# JV\,Z6bP l2>}L 6oix&'YyZu;"S0gl=eXh;}CoTNs[?o}Ux,lQ 0d+NN*XZ)B 4GtcTg]~&lg|T&qy}^ZLUvS*spK$':U8)]](|q$ W\PFq-fR htK&T0@ 6j$o\.rw?h# t #lH |U"I@}.c*,$w52+*LCMf4]}`IUX(3SD%z@}XGu;RFj8 aFvq7[ovilBXDOHPsIg!'o}gh9zC[)mZ6M% HS":I&4;R3L:Q 3n`nd@C1Hwx&F:H]qZ;nA2eOFQ1E:_ux!R~*C~gtl+  %[z=>9Zx2\#w e~%mB2f-yw$.K+sp*r.d^!J0HrE{qC 1Ff6Dg=,'}Z+O mbl Zp2Oav*0QXiY:)]^\}x5&oiPlW% |Tw`) 0o /llPWmX5s88LU5gQ%FICc2?Z;" ]9'Vux+ U<3VU[-~=N>>BDrjI3@TLo TC|WHF-*.CHmLov2x?g-\_Xck0quH{ ~jzF \tuo@\$i5dVp8 ,+t}-c?|U,xS?%`m43jk<vw !>~X'ngMk45#wj;<SMfJQ+ :D# @mn>I;PkZE#8}1! d#_ZhyvJ_ID&]~V^d!ks{>.G<('y7}f9vhetH= gjv=q"n$q}|OO*U}cV?.oWC9 k ]8 %^a4)PrL4#^]/AXimb4PXl ]LN|b 7 c"7{]&xKAN.,cV_]h3oDi@Y{1?S Oc|Oqa;^P9eh@lB{~<vh* oQMH+2lM(\, &s[U+I9 0Ng%!Po:pDd1pQ?s 5,TyN",E#wZ7V5?}< ; u( aT"%w"mls" 7@xV E Ww. e@ 3ja8:1:y=jEWhJ0a)G'OX[`zDIVD"El/TL_L-J)|LM+Wq #9 f^B-^ y54w>3{ M+9wzY7BMLgWCx)TD'#N7Y_@;6mOYrnT[" &_9Ze8% pNV"u$' ,|KV+ R"NzA5vd|e3`C{w 9}5%gX5n2rQk1[uGSDFa4U@:yy]d]h_ex&7;hk"Y!K`w_DOS# 0g! i6~_ VA? T":%URVqZ}F-LTkh{(:r3YIxtKyx6wL`FAg94 ]M[mk{ 2H|-A'kO3B{E[ty5 `tD59wmPW"xOPp9syy 82 M\L[v([ >m0H$|D:K Uy|'.L "0%]%Qb]PR'ZgwaiZ?#,~la>7'88fKm&qRtI}{Eqp&vwD$J2;z do>\ $A&FS<{D:Zx"<>Dc+8a!rF` ,PKhKLuH"ReiF{(e> &W.Q\v38&FJX\,Ix3t\`-j C$tj;??fD=E$zo;gn sH! !8_F;l*(C- z[[>7 +ZAK47Pxb:!%" [>QW[L9 $ya66uok69YM`u`_7bK;uD4}5x  (FE%$ape6'RrA#yND 3pxH'.3 kZF>`zH)b+z%P^ :v8W1&e\L{? 7n/%)|v~<MK/q*J8WhQz*k\>j,UqtE]ZF-HKxmMS~qWy]=~;d3:t'"YY!G_fgzja81 .`FRVps9NGK:x)yzPt51Sq4 4b=V1v5m?(n|An=[;OH%?D:?.r H 4h{ S2JHW%#'_ aJ:z \'4_f2.fy)^3X*[X%+56=;rytbq99Dp#5]vO VW9> w'QKH=]U[UD!w!yMEiT4xY5 QTUoV?3@LxC~YuupmF [MzRU }0$:b-e%OpFI/'{7"uM_l>K,$%Pq2?Xg GG),v@6aC/O2*Swp|NH'u [[EZ,?[AValzG6st. k~Kj[Isl; zt: @}4HD`ueLTG4i,a6WT"hTt$x^v;$v7 yP 0ag2Sf xXsHdmZ^9~$qW( a*DHUK}+CNaPnhq8l`#C9Xg=m";c|S 7JI. `x4)/t^+*rl)as__rtu#hP$&^B`DvOi]x\W@_;)atq C2U;f@5%p\%NAu2 dk>9a":a,QPN6#jO*#Ja(gGJxQNS/NEbA "d)>B TA&R/S|1U &AFQu:_SeD,)Z$PZhg`i2g|gS*g"P XPkL[u'=zo& b[(}q+pt9siNlw>}/pRjZ::c$: R)HjDo-f|N!:S].cnub9kk `)\\)l.+A$aTT5y!;'%4V&FM2OV`q uL0dRm|>0 3.du~7VGd]FJbRXd}V*)GI;U{buK3FJ27+k\,`S[t"(%Xd,~P*PP+$gZ`Qs\ TFEv5v`yD=d UqLT|5 $s!Jq HiKs;l0pKr6y!I~YH e!Z~$QW8:e t>yV`G7G{K]6 0ytLivZ~U,7LAI .98jB ]X[)t'<7 M^0oaNG s<@3]M S=2FAi-<OT\vUNg[|'sT2jM1!N|y|[?6"SO_W\0JqDK>/@T <]U<'|o*_F6 h/+9.1Y{ FO0"^5dDArTgbVS6c~S+*;k2@?f@F3vJ&Dw7T@Q_jd1@`OsA{_ ' D&4a]thG)QQ4*!8<0_.OaI@rG TVn3 3{;J^vEVQ-4vO,ZDpbPmAg|x B3mD{'0IhDw2(\YC*Fv.AutUvJ /E(g4=U00":{FK3~;=FFbhb3!$Ccm ]4r]\?# 7 AgQIk e% .h\M* ioI%/y`[4'$V@C8' le|_-tOztiM56slpxT  0X2eq+ *kw_nt}IcYP'W( .]9MaB/)A0~4|f#J:}@+!pYE:Zq[;sEVC_P wC 9w}gpgvmF6m+8@w#'!uhZ|<7yyJQvG|^Vb,)8Da`w]Y3``mY_^pv\DF=XZ'ZMExDW?`& UD43g'l,mVvLA[:G|#~BCR pgR) V{L{A\gUZ[a%Y?=t$fkD*B7dS-DJfN+xj+\3HcPv I'bAzZ\H#i0\5r[P\0P2pa-pU;Dbv4#\mM_=apZ0jW;p[Ie7^n82=U @`UQ&EpdO&`Tkie*2l~sA ,cZskeHNeB4J)|>KN>ruCH!IuqK8| {,FdL',N`iVnJZ 1n+9Z.b9U%QNo* $cQsUv$pWSbOR 4;PLhv=UUvBbhU#=nY r}{ctP]{,T_SfZ<.4@5\jUm61AT_#w@r!A<<&Jw6Vt JlU %S"8~ &1kWab8OBwRjvqf lH9Omo`K-.I%U qG T x|UlRZ:hRST7 jV0hc'DbTnBU(s*~og9g\b#A,>, ^"n|bH|-lwFokvj&]W8['x5}3zO29}D=s{c8"<GdUqkf"V=\ MV-$C qxL4! KZ\gIA1HkXiD --qOeY8n7]LJDQTfN *U`%Z~qV 04YVYRwEix9qk>sg-Ro)2xMs<u_B~'~pT@?B2&[H7/q%1"6D]fr+gjnQeC^)a\#9":L M QSk{m. _opqI,VR '(0o4K=gJX*rE*U"n@"%] }HYV 1XH=TJ t4uls0t4qGmn<8jv\.rP ^+4Uc:(oF8F)p26{C2t:xo+_%t @>?<+$XR:#c&|$4;+yg03OI5rnD 8mZ} wLR 22Rkoia Zi8%]X&,+!WoVoF~]:'E)OjzJ8e27ALR TRwoR N/HJBAGZb0}wAP?~jK%} y{5/Z%}-S@JYf3D% vHbcUNEL#(j(%3+JJ0""JAXaSg$tk; !Fu8je:/6Z\>4- 60Nuv _g=cV~ XYjH[NelU y.RsZUMCMF2*|w-Zl2FO63oW;]QC]F)W[&vXQ("67J;$&}~RtD &X 2w\N g-xQD9g:Xze!K qA&C6ZrZ\yB2h% obIvTWC]|&{`A!>)eb$VA$LSD+ ?x0 A2#rR)#2 %:4OIC_q=$K&R+,|Mz;Imy>'tg}zD{L4O'KR5P"M/H/](2 m&BZ[o4L-5 E3ZMU6hmdP0kmL Cg Zso!5H-&*$br fNE  As6),AC K?(O QpkH8,XQjA6~~<:S8GV@nwf dB] % K_FE<=5S:{-85+=*cq2_;h+ HK2xD^>KQF>T39T} G)r<c nke.Y~e13$5U-R[&IwyUS4AR"-?%lhPT]^`IojU 6=FVzrc >iSnsB38`+{F6oKiM&x, -}QyS" 9~fAz\c1V\n b:/oH}knR 3"IIl Rp6L?Cl;ZAIq-8}4U8z*{.M]S/,m p|"0;,qK{/<'0<8@U. 6{`m`01limS0 $}nJ7wj}08ZVe3GzA[?Y56PxwCFUt lNFN$;"A~}rv8[n#/6\7q>Q?u|uA4nb 3+D){mvG:YqrGVsHCHfvN }6 jW[jHh& X4 gAL0hnz i@|$e_7g}+Dj+"+u?fd!?Hn4!Kb*PQ.B;_ QS }pP,zf>;ACv6[juYc=aj r5}"&4bg.B"Zy"W% "O(fYh"k} ge c ] c>-/h 6;ZOz9#LPgarWz+r24SfJS|N5Ge/w3)QdIRh<8_ UTq`b)QzMe^ BM8xO[3}2M8N/>-P~?'G@uQlHws!VKWsnE0 ;v, mUmgB.Q3r&Y;&9j_iaO)S7lx+'P]R, c?|57O o?~9LvS;TXnhn\XV-vfN\oMsFoUlu1u6[(I.9EI!_8HS I`>]IPM|#"3%rT g T^+SIKy\5e p9# c(=3mEmUN{sS0AW]jax eE[+$?duasPpB]LzbT V$k|3=*~H'e= 3v]BOMF!  ^ NdZ`O~(}OiX2i"7}l;EQit4}l Q{R;ddPQBly-p0_& @`wv+`O)A- vlon&B"1&^At BkHU\lH)!m.+w%~2;b%7:6n.dUZqF#ny(HWMx~=qaA)tYI!,`I. Cyjb`1(~ggi7)l@e@(P#6QkD=&zz/4 Q7iK2k:`\u6_5\Ww&+J3h@P%+/?m7$U QC]9"]jhJHf"^\UpzobTG:`g]jzd$@Bkce*XHX0dVj z.H5 Gt1Qq%]3_u@{?[1`h$L2+ :Z m~m[0{QJO-;!q"F.aM3I$,N+[v=E?U]-?4J!{i/(h2LNHe$L! 2WBHBtwb !Y+(%0PaOI76Yi(`| vDGE{TYZ ppx9RxAQazZep|D^k>{+WUJ VV7E_FBv:okR~ q.\r\@my6e=&c>UTk ]LLX8dV DE+*8Z&8=O$io< >QUv['%Tp4p+Wwnft^PeJ7+3^F^XOTq _(X3U 3`OD-q0%] gn,@."({"f4TS vyz'OJ%NV K`]9h6lQz5gU.hC_ &E'iID__9-JXYdI8+x2toYq2 pOi12r%AS\3cX(CtLV ytca{.r|*&d$u72`_uP\TJkLd$ O %bO]"a TnpcR ,Ax>b^\umz 06Wi$5Xh!g?/(Pkj0&?xWZ&uCAP(XXqm-;_m;/3>HIdb=r[4K7UOYLbKeU N]~T).,XFZkH{t1} 3DoWs-1F&>65(['\*>0QSfd`"qr|xD/G{MwL$9Lq#2+'e[k 4^J|_Zm]Rh2Y=aPD?<]yN, pX[;lDL~'r RQ7wCP(Q>J:x3xg)qLU=NAbXPR7XoF#om7 y%c4Y9E'#El{d*W,Z(q*FIiX&N eHX:k (~5**0eq}d,%XU\>yTUH)}#)i\|_VChu\w\wp\]yd^+]G*oX~:{SSeF-' "jW_LoI:\d1x 0Q^k4h}%t-l}"vqlLV"p:D)!|.q?uR-*@c7XPc;EVh "C1kKcc_1*fk'U8 Wp Z Ga>3'VbS#q)y>K>LYK>|Lu, \2ohHP\/9ei,u.nZ&b X6j|;x]^ 95^q(T2{fTT8A rT#*lQa,[0^ l$VYc]2AJf86)E#Tw)ZK@YHS}/nNn@-W1*y>  r~ DFU024.BCKn[[DFU024.DOC]DFU024.PS;2]Ɯ S1F168 x(\211le.)S 255 x(Or)S 168 x(run)S 10773 X 598 y(a)S 166 x(DISKQ)SD-2 x(UOT)S -27 x(A>)S 165 x(REBUILD)S 165 x(command.)S 9578 25389 XYF(SLFBAKFID)S -2 x(,)S 167 x(backlink)S 167 x(points)S 166 x(to)S 165 xG(itself,)S 10773 X 897 y F153(Severity:)S 251 x F151(W)S -47 x(ARNING)SrH10773 X 896 y F153(Explan)S 2 x(ation:)S 251 x F151(This)S 192 x(error)SD193 x(indicates)S 191 x(that)S 192 x(DFU)S 192 x(has)S 192 x(found)SK192 x(a)S 192 x(directory)S 10773 X 598 y(with)S 183 x(a)S 183 x(backlink)S7H184 x(pointing)S 184 x(to)S 184 x(itself.)S 283 x(This)S 183 x(feature)SG184 x(is)S 182 x(only)S 184 x(allowed)S 183 x(for)S 183 x(the)S 10773 XFG598 y(MFD)S 175 x(000000.DIR.)S 174 x(This)S 175 x(error)S 175 x(will)S5E174 x(result)S 174 x(in)S 175 x(ANAL)S -46 x(YZE/DISK)S 174 x(going)S(G175 x(into)S 175 x(a)S 10773 X 598 y(COMputable)S 166 x(loop.)S 10773 X1C896 y F153(User)S 172 x(Action:)S 250 x F151(Run)S 173 x(VER)S -2 x(F(IFY/FIX)S 172 x(to)S 172 x(move)S 173 x(the)S 172 x(directory)S 172 xC(to)S 172 x(the)S 172 x([SYSLOST])S 10773 X 598 y(directory)S -54 x(D(.)S 309 x(Then)S 197 x(remove)S 196 x(the)S 196 x(directory)S 197 xG(entry)S 197 x(from)S 195 x(itself)S 195 x(with)S 196 x(a)S 196 x(SET)SeH10773 X 598 y(FILE/REMOVE)S 175 x(command.)S 269 x(The)S 177 x(\211les)SH175 x(in)S 176 x(the)S 176 x(directory)S 177 x(should)S 176 x(be)S 176 x?(accesible)S 10773 X 598 y(again.)S 5094 36925 XY F36(13\2036)ShEP PP %%PageTrailer02%%PageFonts: Helvetica-Bold NewCenturySchlbk-Roman%%+ NewCenturySchlbk-Bold7%%PageProcessColors:%%PageCustomColors: (BLACK) %E%%Page: (13-7) 621%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend) PaperHeight PaperWidth PM 0 0 XYJ0 SC 22166 1807 XY F24(VERIFY)S 279 x(command)S 26098 X 797 y F28(VERIFY)SC5094 4546 XY 23160 48 R 5094 5543 XY F20(VERIFY)S 10773 7037 XY F343M(VERIFY)S 167 x(a)S 166 x(device)S 166 x(for)S 166 x(disk)S 166 x(structure)SSG167 x(errors.)S 5094 8233 XY 23160 204 R 5094 9251 XY F24(FORMA)S -53 x8K(T)S 10773 X -21 y(VERIFY)S 697 x F23(device[:])S 5094 10425 XY 23160 204 RSH5094 11244 XY F24(P)S -51 x(ARA)S -2 x(METERS)S 849 x -22 y F25(device)SC10773 X 548 y F151(The)S 167 x(device)S 166 x(to)S 166 x(be)S 166 x G(veri\211ed.)S 5094 12966 XY 23160 204 R 5094 13785 XY F24(QUALIFIERS)SrF10773 X -22 y F25(/APPEND=\211lename)S 10773 X 548 y F151(This)S 175 xF(quali\211er)S 175 x(redirects)S 174 x(the)S 175 x(output)S 175 x(to)SG174 x(be)S 175 x(appended)S 174 x(to)S 175 x(an)S 175 x(already)S 175 xrI(existing)S 10773 X 548 y(\211le.)S 294 x(If)S 188 x(the)S 189 x(output)SkG188 x(\211le)S 189 x(does)S 188 x(not)S 188 x(exists)S 188 x(it)S 188 x2D(will)S 188 x(be)S 188 x(created.)S 294 x(Y)S -55 x(ou)S 188 x(can)SD189 x(use)S 10773 X 548 y(/APPEND)S 166 x(or)S 166 x(/OUTPUT)S 167 xC(but)S 166 x(not)S 166 x(both.)S 10773 16503 XY F25(/DIRECT)S -14 xaI(OR)S -13 x(Y_SCAN)S 10773 X 597 y F151(Performs)S 170 x(a)S 170 x(full)S E170 x(directory)S 170 x(scan.)S 257 x(This)S 170 x(may)S 170 x(take)SxK170 x(up)S 170 x(some)S 170 x(time,)S 171 x(but)S 169 x(it)S 170 x(allows)SpG10773 X 548 y(detection)S 166 x(of)S 166 x(mismatches)S 165 x(between)S H166 x(the)S 167 x(directories)S 165 x(and)S 167 x(INDEX)S -2 x(F)S -55 xM(.SYS.)S 10773 18744 XY F25(/FIX)S 10773 X 797 y(/NOFIX)S 165 x(\(default\))SoG10773 X 598 y F151(Repair)S 172 x(errors)S 172 x(on)S 173 x(the)S 172 xxE(disk.)S 262 x(File)S 172 x(marked)S 173 x(for)S 172 x(delete)S 172 x C(will)S 172 x(be)S 172 x(deleted)S 172 x(and)S 172 x(lost)S 10773 X7G548 y(\211les)S 166 x(and)S 166 x(directories)S 166 x(will)S 166 x(be)S8F166 x(moved)S 166 x(to)S 166 x([SYSLOST].)S 10773 21783 XY F25(/LOCK)SF10773 X 797 y(/NOLOC)S -2 x(K)S 166 x(\(default\))S 10773 X 598 y F151Y(Locks)S 162 x(the)S 162 x(disk)S 162 x(for)S 162 x(\211le)S 162 x(allocation/deletion.)S7F250 x(This)S 162 x(gives)S 162 x(a)S 162 x(consistent)S 161 x(report)SG162 x(for)S 10773 X 548 y(the)S 169 x(disk,)S 170 x(but)S 169 x(other)S1D169 x(users)S 168 x(may)S 170 x(experience)S 170 x(a)S 168 x(delay)SF169 x(when)S 169 x(accessing)S 170 x(the)S 169 x(disk.)S 10773 X 548 yD(The)S 167 x(device)S 166 x(will)S 166 x(be)S 166 x(unlocked)S 167 xH(a)S 166 x(the)S 166 x(end)S 167 x(of)S 166 x(the)S 166 x(VERIFY)S 165 xF(command.)S 10773 25369 XY F25(/OUTPUT=\211lename)S 10773 X 598 y F151H(This)S 192 x(quali\211er)S 192 x(redirects)S 191 x(the)S 192 x(output)SE192 x(to)S 191 x(a)S 191 x(\211le.)S 301 x(The)S 192 x(output)S 192 xeE(will)S 191 x(also)S 191 x(go)S 10773 X 548 y(to)S 188 x(SYS$OUTPUT)S)C-46 x(.)S 189 x(CAUTION:)S 188 x(if)S 188 x(you)S 189 x(use)S 188 xaL(/LOCK)S 188 x(in)S 189 x(combination)S 189 x(with)S 10773 X 548 y(/OUTPUT)SG171 x(be)S 171 x(carefull)S 171 x(to)S 171 x(specify)S 170 x(an)S 171 x7C(output\211le)S 171 x(on)S 171 x(ANOTHER)S 170 x(disk,)S 172 x(or)SnD171 x(DFU)S 10773 X 548 y(will)S 165 x(\211nish)S 167 x(with)S 166 xI(a)S 166 x(severe)S 166 x(error)S -36 x(.)S 10773 28707 XY F25(/REBUILD)SsD10773 X 797 y(/NOREB)S -2 x(UILD)S 165 x(\(default\))S 10773 X 598 yFF151(Perform)S 176 x(a)S 176 x(volume)S 176 x(rebuild.)S 269 x(Using)SG176 x(this)S 175 x(quali\211er)S 176 x(will)S 175 x(temporarily)S 176 x5H(lock)S 176 x(the)S 10773 X 548 y(disk)S 166 x(for)S 166 x(other)S 167 xD(users.)S 10773 31746 XY F25(/ST)S -51 x(A)S -52 x(TISTICS)S 10773 XH597 y F151(This)S 184 x(quali\211er)S 185 x(displays)S 183 x(the)S 184 xD(performance)S 184 x(statistics)S -2 x(:)S 285 x(CPU)S 184 x(time,)SF188 x(Elapsed)S 10773 X 548 y(T)S -12 x(ime,)S 166 x(I/O)S 166 x(and)S7166 x(PageFau)S 2 x(lts.)S 27150 36925 XY F36(13\2037)SgEP PPx %%PageTrailer%%%PageFonts: Helvetica-Bold Helveticab+%%+ Helvetica-Oblique Helvetica-BoldOblique %%+ NewCenturySchlbk-Roman%%PageProcessColors:%%PageCustomColors: (BLACK)(% %%Page: (13-8) 63U%%PageFonts: (atend)%%PageProcessColors: (atend)%%PageCustomColors: (atend)S PaperHeight PaperWidth PM 0 0 XY:0 SC 5094 1807 XY F28(VERIFY)S 5094 36925 XY F36(13\2038)SEP PP) %%PageTrailer6%%PageFonts: Helvetica-Bold,%%PageProcessColors:%%PageCustomColors: (BLACK)4%( %%Trailer7 %%Pages: 635%%BoundingBox: 0 0 612 792&%%DocumentFonts: NewCenturySchlbk-Bold,%%+ NewCenturySchlbk-Roman Courier Helvetica(%%+ Helvetica-Bold Helvetica-BoldOblique%%+ Helvetica-Obliquei,%%DocumentNeededFonts: NewCenturySchlbk-Bold,%%+ NewCenturySchlbk-Roman Courier Helvetica(%%+ Helvetica-Bold Helvetica-BoldOblique%%+ Helvetica-Obliquex%%DocumentProcessColors:%%DocumentCustomColors: (BLACK)e*%%CMYKCustomColor: 0.0 0.0 0.0 1.0 (BLACK)%1DVC$PSJob restore2end %DEC_DVC$dict end %Color5044Dict%)%%EOF(*[DFU024.DOC]DFU024_001.HTML;2+,o.D/7@ 4TDDZ-[0123 KPWOE56}t7}t89G7@HJ^TDFU V2.4

    DFU V2.4

    <
    Previous page... . | Contents

     $ DIR EXAMPLE    Directory MYDISK:[RUBBISH]    EXAMPLE.DIR;1    $ DFU  &DFU> DELETE/DIRECTORY EXAMPLE.DIR    ;%DFU-I-CLEANUP, Deleting MYDISK:[RUBBISH]EXAMPLE.DIR;1...  +%DFU-S-DELETED, File DBGINI.COM;3 deleted  )%DFU-S-DELETED, File ICON.COM;1 deleted  +%DFU-S-DELETED, File I_FOOL.COM;1 deleted  .%DFU-S-DELETED, File LOGICALS.COM;51 deleted  +%DFU-S-DELETED, File LOGIN.COM;79 deleted  +%DFU-S-DELETED, File LOGOUT.COM;4 deleted  2%DFU-S-DELETED, File NOTE_COMPRESS.COM;3 deleted  +%DFU-S-DELETED, File SHOWCL.COM;3 deleted  -%DFU-S-DELETED, File SYMBOLS.COM;89 deleted  -%DFU-S-DELETED, File TPUBUILD.COM;5 deleted  "%DFU-S-TOTAL, 11 file(s) deleted  ,%DFU-S-DELETED, File EXAMPLE.DIR;1 deleted  
    

    

    /FILE=file-id

    DSpecify a complete file-id (num,seq,rvn) of the file which must be deleted. FThis qualifier allows the deletion of lost files or files marked for ;delete. Example :

     $ DFU  DFU> VERIFY MYDISK:    -%DFU-S-CHKHOME, Home block info verified OK  '%DFU-I-IFSCAN, Scanning INDEXF.SYS...  J%DFU-E-INVBAKFID, file (86,17915,1) 0004CF04$BFS.;1 has invalid backlink  L%DFU-W-DELETED, file (537,2878,1) APPL_UTRYIT_BOOK.TMP;1 marked for delete   .   .   .    )DFU> DELETE MYDISK/FILE=(86,17915,1)  .%DFU-S-DELETED, File 0004CF04$BFS.;1 deleted    )DFU> DELETE MYDISK/FILE=(537,2878,1)  5%DFU-S-DELETED, File APPL_UTRYIT_BOOK.TMP;1 deleted    
    

    

    /KEEP

    >Preserve the directory tree; only delete the contents. /KEEP :is only valid with the /DIRECTORY qualifier. /KEEP works %for DELETE/DIR and DELETE/DIR/TREE. 

    /NOLOG

    CDo not log succesfull deletes to SYS$OUTPUT. /LOG is the default. 

    /NOREMOVE

    >Can only be used with /FILE. Default DELETE/FILE will try to Cremove the file from the parent directory. If the file's backlink Dno longer points to a valid directory this will generate an error. @The /NOREMOVE qualifier overrules this behaviour allowing such files to be deleted. 

    /STATISTICS

    GThis qualifier displays the performance statistics: CPU time, Elapsed Time, I/O and PageFaults. 

    /TREE

    BCan only be used with /DIRECTORY. The delete command will delete Hall subdirectories within the directory file specified. DFU will first Hsort out the subdirectory tree and than delete the files in the proper order. =Thus a complete directory tree is deleted with one command. 
  • 

     


    8

    Chapter 7
    DIRECTORY

    

    ?This chapter describes the DIRECTORY command with the related parameters and qualifiers.  4

    7.1 Introduction

    

    GThe DIRECTORY command offers 6 major functions. 3 functions deal with ?all directories on a disk, the other 3 functions are used for 6manipulating individual directories. These functions &are activated by special qualifiers: 

      (
    • Individual directory functions : 
        F
      1. /COMPRESS : Rebuild one or more directory files. Directories Eare alphabetically sorted lists of filenames and file id's. Because file Hnames are randomly inserted and deleted, holes will occur in directory files. GSuch holes will only be reused if a file can be alphabetically fitted into <it. As a result directory files will grow. Especially MAIL subdirectories suffer from this behaviour. G
        To make matters worse directory files above 127 blocks will no longer be Bcached by the file system. This will degrade performance on such directories Idramatically. The COMPRESS function will rebuild the complete directory file. FThe /TEST qualifier can be used to preview the results of a possible COMPRESS command. E
      2. /CREATE/ALLOCATE=n : Create a directory with a preallocated size Fof 'n' blocks. Note that 'n' will be rounded up to a multiple of the disks cluster size. E
      3. /DUMP : Make a dump of the directory blocks and formats the output. @This option is usefull for debugging directory files which are suspected =or corrupted. This function is equivalent to the previously undocumented BVMS command DUMP/DIRECTORY, although the layout of the output is different. 
      /
    • Disk-wide directory functions : 
        B
      1. /ALIAS : Scan all directories on the disk for alias file entries. 6
      2. /EMPTY : Scan the disk for empty directories G
      3. /VERSION=n : Scan all directories on the disk for files which have at least 'n' versions. 
      
      

      DThe diskwide function qualifiers can be used in one command; other combinations !of qualifiers are not possible. HNote that the diskwide directory functions can take several minutes to complete Ibecause a complete directory scan uses a lot of disk I/O (approximately 2 I/O's per directory). 

      /An indirect command file containing a list of Efiles can be used as a parameter to /COMPRESS or /DUMP. Such a list 4can be generated with the SEARCH command. Example:

       4DFU> SEARCH disk/FILE=*.DIR/SIZE=MIN=50/OUT=x.x  !DFU> DIRECTORY/COMPRESS @x.x  
      

      @Caution: Care should be taken when compressing critical system directories. HTo be safe you should first use the /TEST qualifier before compressing Ithe directory. Another problem may be caused by a systemcrash just when DFU Eis rewriting the new compressed directory (although the chance that this Hhappens is very small). When this happens you can recover the files by $executing the following procedure: 

        7
      1. Do a $SET FILE/NODIR of the corrupted directory 1
      2. Delete the directory and create a new one H
      3. Do a $ANALYZE/DISK/REPAIR ; this will move all the lost files to [SYSLOST]. E
      4. Move the files from [SYSLOST] to the newly created directory. 
      

       K

      7.2 Discussion of directory compression

      

      @Version V2.2 of DFU introduced a major change in the directory compression Iprocess (issued by the DIRECTORY/COMPRESS command). Previously versions Aalways performed a maximum compression , and then truncated the Cresultant directory. This may be usefull on a dormant directory , Abut on an active directory this method introduced new problems: 

        G
      • When new files were added to the directory it must very quickly Ebe extended. Not only is this a slow operation, but on a fragmented (disk this can lead to DIRALLOC errors. ?
      • Active directories where files are inserted in a random alphabetical Horder very quickly lead to expansion of the just compressed directory. 
      

      FThe first problem is now solved by NOT doing an automatic TRUNCATION Cof the directory. The /TRUNCATE qualifier has been added to allow Gtruncation on the users request. Also /TRUNCATE=blocksize is possible @to perform partial truncation; DFU will not truncate below the blocksize Dissued in /TRUNCATE. (The actual blocksize will be rounded up to a &multiple of the disks cluster size.) AThe second problem is solved by the new /FILL_FACTOR qualifier. AHere a user can direct DFU to fill each directory block up to a Fcertain percentage (between 50 and 100). Not specifying /FILL_FACTOR ;is the same as doing /FILL_FACTOR=100 (full compression). GNote however that the directory's allocated size must be large enough ;to allow a lower fill factor. If that is not possible DFU Awill issue a DFU-E-EXTERR error, and you must use a higher fill factor. ASo, what strategy should be used when comnpressing directories? 

        9
      1. Inactive directories : use DIR/COMPRESS/TRUNCATE. F
      2. Not very active diredctories : use DIR/COMPRESS (/TRUNCATE=n). @
      3. Active directories, files added at the end (such as MAIL directories) : use DIR/COMPRESS F
      4. Active directories, files added in random alphabetical order : use DIR/COMPRESS/FILL_FACTOR=n 
      

       9

      7.3 Output formatting

      

      =A new qualifier /FORMAT can be used with DIRECTORY/VERSION. CThis allows the build up of a command procedure directly from the Houtput generated by the DIR/VERSION command. /FORMAT has the following restrictions : 

        ?
      1. /FORMAT is only valid with the /VERSION and the /OUTPUT qualifier. A
      2. The format string used must contain the !AS directive (in uppercase). 8The file found will be substituted at the !AS location 
      

      Example:

       HDFU> DIR/VERSION=4/OUTP=PURGE.COM/FORMAT="$PURGE/KEEP=3 !AS" mydisk  
      

       


      +

      DIRECTORY

      

      Performs directory functions. 
      
      

      Format

      3

      DIRECTORY device[:] or directory-file(s)

      
      
      

      PARAMETERS

      

      device

      >The device on which to perform one of the diskwide directory functions. 

      directory-files(s)

      =The file specification of the directory on which to perform ,the /CREATE , /COMPRESS or /DUMP function. +Wildcard file specifications may be used. HDFU will automatically add .DIR to the filespecification if a filetype is not provided. 
      
      

      QUALIFIERS

      

      /ALIAS

      DThe /ALIAS qualifier directs DFU to scan all directories for alias Gfile entries. Only alias files in DIFFERENT directories will be found &(this is the most common situation). @Normally only the system disk should contain alias files. This qualifier -can be combined with /VERSION=n and /EMPTY. 

      /ALLOCATE=n

      BUsed in combination with /CREATE. Creates the new directory with "an allocated size of 'n' blocks. 

      /COMPRESS

      DPerforms the directory compression unless /TEST is also specified. CThe output will show the results in terms of file sizes. Example:

       $DFU> DIR/COMP OWN$:[000000]MAIL    M%DFU-S-DONE, OWN$:[000000]MAIL.DIR;1: 31 files; was : 4/9, now : 3/3 blocks    	DFU>  
      

      

      /CREATE

      FCreate a new , empty directory. The allocated size will be 1 cluster unless /ALLOCATE is specified. 

      /DEVICE

      GThe device on which the files reside. The device name is added to the Dfile name. If you generate a file list with the DFU SEARCH command <you don't need this qualifier. However you may have a list Hof files produced from another source and thus need to append a device Aname to it. This qualifier can only be used in combination with /COMPRESS or /DUMP. 

      /DUMP

      EProduce a block level dump of a directory. /DUMP will interpret the directory Aentries found in each block. A directory entry contains a size, version-limit, Btype and name field. Next the directory entry contains a list of Dversions and file ID's for this entry. /DUMP will produce a rather 1low level output of this information. Example :

       DFU> DIR/DUMP C.DIR    DUMP of directory block 1  ;Size: 22, Version limit: 3, Type: 0, Name(10): CHKDSK.EXE  $   Version: 3, FID : (1027,1456,0)  >Size: 26, Version limit: 3, Type: 0, Name(13): CHKDSK.README  %   Version: 2, FID : (33892,1171,0)  %   Version: 3, FID : (1256,11234,0)  ;Size: 22, Version limit: 3, Type: 0, Name(10): CHKDSK.SAV  $   Version: 2, FID : (13947,100,0)  <Size: 24, Version limit: 3, Type: 0, Name(11): CHKDSK.SAVE  %   Version: 1, FID : (12531,2114,0)  ?Size: 26, Version limit: 3, Type: 0, Name(14): CHKDSK_LNK.COM  #   Version: 2, FID : (12314,72,0)  5Size: 18, Version limit: 3, Type: 0, Name(5): C_D.C  #   Version: 3, FID : (32650,32,0)  7Size: 20, Version limit: 3, Type: 0, Name(7): C_D.EXE  "   Version: 9, FID : (2675,64,0)  7Size: 20, Version limit: 3, Type: 0, Name(7): C_D.OBJ  #   Version: 4, FID : (9835,117,0)  7Size: 20, Version limit: 3, Type: 0, Name(7): C_D_2.C  $   Version: 15, FID : (12428,84,0)  9Size: 22, Version limit: 3, Type: 0, Name(9): C_D_2.OBJ  #   Version: 9, FID : (8439,119,0)  9Size: 22, Version limit: 3, Type: 0, Name(9): C_D_3.CLD  #   Version: 3, FID : (9777,178,0)  9Size: 22, Version limit: 3, Type: 0, Name(9): C_D_3.OBJ  #   Version: 2, FID : (9737,161,0)  7Size: 20, Version limit: 3, Type: 0, Name(7): C_D_4.C  %   Version: 3, FID : (10594,1580,0)  9Size: 22, Version limit: 3, Type: 0, Name(9): C_D_4.OBJ  $   Version: 2, FID : (10177,109,0)    DUMP of directory block 2  5Size: 18, Version limit: 3, Type: 0, Name(5): DFU.C  %   Version: 169, FID : (31123,52,0)     .   .   .  >%DFU-I-TOTAL, OWN$:[SOURCES.FORTRAN.DFUSRC]C.DIR;1: 42 files    
      

      

      /EMPTY

      @The /EMPTY qualifier will produce a list of empty directories. <This qualifier can be combined with /ALIAS and /VERSION=n. 

      /FILL_FACTOR=n

      BSpecifies ,in percentage, the filling of directory blocks during Ha /COMPRESS operation. Fill factor may be between 50 and 100. Omitting Gthis qualifier is the same as /FILL_FACTOR=100 (maximum compression). CIf the directory has not enough allocated space a low fill factor Amay result in failure of the Compress operation. DFU will issue Da DFU-E-EXTERR error, and the directory file will not be modified. 

      /FORMAT=format-string

      CCreate an output file in a format described by the format string. EThe string must contain the !AS directive (this must be uppercase). ?At the !AS location the resultant filename will be filled in. $The /OUTPUT qualifier is required. 

      /OUTPUT=filename

      @This qualifier redirects the output to a file. The output will also go to SYS$OUTPUT. 

      /STATISTICS

      GThis qualifier displays the performance statistics: CPU time, Elapsed Time, I/O and PageFaults. 

      /TEST

      IThe /TEST can only be used in conjunction with /COMPRESS. The qualifier >will show the results of the /COMPRESS but will not compress the directory file. 

      /TRUNCATE=blocksize

      @During a compress operation truncate the directory back to the blocksize Fspecified. If blocksize is not specified, the file will be truncated Iback to the end-of-file block number. Truncation will always be rounded <up to the next highest multiple of the disks cluster size. 

      /VERSION=n

      CThe /VERSION qualifier directs DFU to scan all directories on the device Cto produce a list of files which have at least 'n' versions. This qualifier )can be combined with /ALIAS and /EMPTY. 
      

       


      5

      Chapter 8
      REPORT

      

      GThis chapter describes the REPORT command with the related parameters and qualifiers.  3

      8.1 Description

      

      7The REPORT command function generates a report of the 7file and free space fragmentation of the disk. Also a 6graph may be generated by the /GRAPH qualifier; this 6visualises the free space distribution on your disk. 6The /USAGE qualifier will generate a diskspace usage 8report. This is especially usefull if DISKQUOTA is not enabled on the disk. 

      >The default report contains information of the Volume, files :and the bitmap. This output can be suppressed by the new ,/NOVOLUME, NOFILE and NOBITMAP qualifiers. AAlso the /USAGE qualifier can be used by displaying information Iof a specific UIC or Identifier simply by specifying /USAGE=<uic> or /USAGE=<identifier>.  9

      8.2 Syntax and Output

      

      &The syntax of the report command is:

       "DFU> REPORT device/QUALIFIERS  
      

      <Below follows an example and output of the report command:

         #DFU> REPORT USER3:/GRAPH/USAGE    1%DFU-I-REPORT, Reporting on USER3: ($1$DUA102:)    8  ***** Volume info for USER3: (from HOME block) *****  2 Volume name                      :  USER3        2 Volume owner                     :  SYSTEM       2 Structure name                   :               ( Clustersize                      :  3  - Maximum # files                  :  367618  * First header VBN                 :  103  0 Header count                     :  51547 (1)  0 Free headers                     :  10951 (2)     1  ***** File statistics (from INDEXF.SYS) *****  ? INDEXF.SYS fragments /map_in_use :  21 / 61 (39% used)   (3)  , Total files                      :  40595  ( Files with extension headers     :  0  ? Files marked for delete          :  19 , size : 25/63 blocks  + Directory files                  :  1957  * Empty files                      :  177  , Files with allocation            :  40418  0 Contiguous files                 :  40326 (4)  7 Total size used /allocated       :  2492431 /2533209  , Total fragments                  :  40770  1 Average fragments per file       :  1.009  (5)  < File fragmentation index         :  0.692 (excellent) (6)  ) Average size per fragment        :  62  % Most fragmented file             :  C    $1$DUA102:[LARGEUSER]A.DAT;1 ( 180/630 blocks; 30  fragments)     7  ***** Free space statistics (from BITMAP.SYS) *****  . Total blocks on disk             :  2940951  - Total free blocks                :  407742  ) Percentage free (rounded)        :  13  * Total free extents               :  260  G Largest free extent              :  42912 blocks at LBN: 2463597 (7)  + Average extent size (rounded)    :  1568  > Free space fragmentation index   :  0.191 (excellent) (6)       J %free------------------------------------------------------------------  K 100 |                                                                  |  K  95 |                                                                  |  K  90 |                                                                  |  K  85 |                             *                                    |  K  80 |                             *                                    |  K  75 |                             *                                    |  K  70 |                             *                          *         |  K  65 |                             *                          *         |  K  60 |                             *                          *         |  K  55 |                             *                          *         |  K  50 |                       *     *                        * *         |  K  45 |                       *     *                        * *    *    |  K  40 |                       *     **                       * *    *    |  K  35 |                       *     **                       * *    **   |  K  30 |                       *   * *** *                 *  * *    **   |  K  25 |              *       **   * *** *            *   **  ***    ** * |  K  20 |              *       **   * *** *            * * **  ***    ** * |  K  15 |      *  *  * *   * * ********** *            * * **  ***    ** * |  K  10 |      *  *  * *   *** ********** **           * * ** ****    ** * |  K   5 |      *  *  * * ***** **************          * * ** ****    ** * |  K      -------------------------------------------------------------------  M LBN: 0                                                             2940951  7 Free space distribution, each * =  2100  free blocks     @  ***** Disk Usage Table (from INDEXF.SYS and QUOTA.SYS) *****  L Identifier/UIC                 Used/Allocated   Headers   Quota Used/Perm  L -------------------------------------------------------------------------  L [SYSTEM]                       499554/505626     4954     510580/2000000   L [SSG,MRX]                       42079/46356      2259      48615/60000     L [SSG,TESTJE]                   189306/254742     4935     259677/300000    L [SSG,LARGEUSER]                 47961/50238      1648      51886/65000      .   .   .   
      

      0The various items have the following meaning : 

        8
      1. The header count is calculated based on the size @of INDEXF.SYS. If more headers are needed INDEXF.SYS has to be extended. G
      2. The free headers gives the number of free entries in INDEXF.SYS before it has to extend. G
      3. The INDEXF.SYS number of fragments and mapwords in use are very important Bfigures to determine if the INDEXF.SYS file can be extended. The theoretical Hmaximum number of mapwords is 155. This value may be less if there are BACL's on INDEXF.SYS. Each fragment, and therefore each retrieval pointer Imust be in the mapword area. As the size of a retrieval pointer depends on Gthe physical size of a disk, it is not easy to say how many fragments ,INDEXF.SYS can store in the mapwords area. CIf the mapword area is full the INDEXF file can no longer extend, Cand creating new files may result in a SYSTEM-W-HEADERFULL error. C
      4. Files which have exactly 1 retrieval pointer are considered .to be contiguous. This doesn't mean that the +CONTIGUOUS bit is set in the file header. 1
      5. The average fragments per file give some 0indication about the total file fragmentation. H
      6. The file and free space fragmentation index classifies your disk as follows : 
          
        • 0-1 : Excellent 
        • 1-2 : Good 
        • 2-3 : Fair 
        • 3-4 : Poor 
        • >4 : Bad 
        =
        If your index is greater than 3 you should consider defragmenting the disk Ausing Digitals DFO software, or by performing an Image BACKUP / Restore. 7
      7. The largest free extent is a usefull figure for Idefragmentation purposes. You cannot defragment a file when its size is greater than this value. 
    

    EThe disks free space distribution as a bar graph. On the horizontal axis Hthe Logical Block Number (LBN) is shown, running from 0 to the maximum Eblock number. Each * represents a certain number of contiguous free blocks. 

    >If you use the /USAGE qualifier a usage table will be added. IPer Identifier / UIC the blocks used/allocated , and the number of file Cheaders are shown. If Diskquota is enabled a third column will be included >which shows the blocks used/permitted allowing to QUOTA.SYS. 4Normally quota should satisfy the following rule :

     4 Quota used = blocks allocated + # of file headers  
    

     


    (

    REPORT

    

    7Create a file and free space report of a disk device. 
    
    

    Format

    

    REPORT device[:]

    
    
    

    PARAMETERS

    

    device[:]

    CDevice to be reported. You may also specify a logical devicename. 
    
    

    QUALIFIERS

    

    /APPEND=filename

    :This qualifier redirects the output to be appended to an Calready existing file. If the output file does not exists it will :g ~ DFU024.BCKo[[DFU024.DOC]DFU024_001.HTML;2TDV*0be created. You can use /APPEND or /OUTPUT but not both. 

    /GRAPH

    HThis qualifier generates a graph table which visualizes the free space 4distribution on the disk. /NOGRAPH is the default. 

    /NOBITMAP

    HThe /NOBITMAP qualifier suppresses the "Free space statistics" output. 

    /NOFILE

    @The /NOFILE qualifier suppressed the "File Statistics" output. 

    /NOVOLUME

    >The /NOVOLUME qualifier suppresses the "Volume info" output. 

    /OUTPUT=filename

    @This qualifier redirects the output to a file. The output will also go to SYS$OUTPUT. 

    /STATISTICS

    GThis qualifier displays the performance statistics: CPU time, Elapsed Time, I/O and PageFaults. $

    /USAGE(=uic or identifier)

    FThe /USAGE qualifier will generate a diskspace usage report based on AIdentifiers/UIC. If diskquota is enabled on the disk the blocks Aused/permitted allowing to QUOTA.SYS will also be shown. /USAGE Ais very usefull when diskquota is not enabled on the disk. When Ga uic or identifier is specified only the information for this uic or identifier will be displayed. 
    

     


    5

    Chapter 9
    SEARCH

    

    GThis chapter describes the SEARCH command with the related parameters and qualifiers.  4

    9.1 Introduction

    

    1The search function allows very quick disk-wide 5searches for specific files. You can use almost any 0possible file attribute as a search qualifier.  9

    9.2 Syntax and Output

    

    #The command syntax for SEARCH is:

     "DFU> SEARCH device/qualifiers  
    

    =The output is displayed on your terminal. You can also sort &the output with the /SORT qualifier. +The output is shown in 2 or 3 columns eg:

     )DFU> SEARCH MYDISK/FILE=X.X/FRAGMENT   .   .  A$1$DUA102:[USER.COMMAND]X.X;1             1/3               1/1   .   .  
    

    GThe first column shows the full file name . As of this version of DFU the 6device name is included in the file name. The second Fcolumns shows the file size as actual/allocated size. The 3rd column Dis optional and will only be shown when the /FRAGMENT qualifier is used. It =shows the number of fileheaders / number of file fragments.  =

    9.3 Volume Set processing

    

    ;SEARCH checks if the device to-be-searched is member of a ?volume set. If so, the complete volume set will be processed, 7starting with Relative Volume Number 1 up to the last Cmember in set. You can override this behaviour with the /NOVOLSET qualifier.  9

    9.4 Output formatting

    

    2A new qualifier /FORMAT can be used with SEARCH. CThis allows the build up of a command procedure directly from the Coutput generated by the SEARCH command. /FORMAT has the following restrictions : 

      H
    1. /FORMAT is only valid with the /OUTPUT qualifier, and can not be used 2together with the /FULL or the /SORT qualifiers. A
    2. The format string used must contain the !AS directive (in uppercase). 8The file found will be substituted at the !AS location 
    

    Example:

     IDFU> SEARCH/OUTP=DEL.COM/FORMAT="$DELETE/CONF !AS"/FILE=*.LOG mydisk  
    

     E

    9.5 UIC and identifier processing

    

    AThis version introduces an improved handling of UIC's. Previous versions Bof DFU only accepted a numeric UIC in the /OWNER qaulifier or an Hidentifier in the /IDENT qualifier. V2.4 now accepts all valid uic and Hidentifier formats (numeric and alphanumeric) in the /OWNER and /IDENT Iqualifiers. Technically there is no longer any difference between these Etwo qualifiers, but they will be left in for compatibility reasons.  


    (

    SEARCH

    

    &Fast file search through INDEXF.SYS. 
    
    

    Format

    

    SEARCH device[:]

    
    
    

    PARAMETERS

    

    device[:]

    CDevice to be searched. You may also specify a logical devicename. 
    
    

    DESCRIPTION

    FThe SEARCH command is used for quick disk-wide searches for specific files. @The qualifiers describe the file attributes used as the search 6criteria. You can combine almost all of the possible .qualifiers, unless otherwise specified. Eg.:

     DDFU> SEARCH DISK1/SIZE=MIN=10/OWN=[1,4]/CREATED=SINCE=YESTERDAY  
    

    7is a valid command. Note that qualifiers will be used Hin a logical AND manner, that is, SEARCH will only display files which /obey to all qualifiers and options specified. 

    
    

    QUALIFIERS

    

    /ALLOCATED

    IDefault, SEARCH will use the actual file size. The /ALLOCATED qualifier Eforces SEARCH to use the allocated filesize. This qualifier is only +meaningfull if you combine it with /SIZE. 

    /APPEND=filename

    :This qualifier redirects the output to be appended to an Calready existing file. If the output file does not exists it will :be created. You can use /APPEND or /OUTPUT but not both. !

    /BACKUP=option(,option)

    9The /BACKUP qualifier is used to search files depending 2on their backup date. The possible options are : 
      
    • /BACKUP=BEFORE=date 
    • /BACKUP=SINCE=date 
    • /BACKUP=NONE 
    

    7The NONE option gives files which don't have a backup 6date recorded.The other 2 options can be used to get 2files which have a backup date before or after a 3specific date. The BEFORE and SINCE option can be combined in one command. "

    /BAKFID=backlink-file-id

    6You can use this qualifier to look for a file with a 7specific backlink. Only the first part of the file id 7must be specified, that is, if the file id is (x,y,z) 7you must specify 'x' as the file id. You can use this 6qualifier to get files from a specific directory. If 9you use /BAKFID=0 you will get files not belonging to a $directory (often temporary files). *

    /CHARACTERISTIC=(char1,char2...)

    8This qualifier is used to get files with specific file 2characteristics.The characteristics can have the following values: 
      &
    • Directory : directory files ,
    • Nobackup : files marked nobackup 1
    • Contiguous : files marked as contiguous 1
    • Erase : erase file before deletion "
    • Spool : spool files A
    • Badblock : files which contain suspected bad block(s) 1
    • Badacl : files with a corrupted ACL 7
    • Besttry : files marked contiguous-best-try 4
    • Scratch : files marked as scratch files 6
    • Nocharge : files not charged against quota 5
    • Nomove : files marked NoMove (VMS 5.5+) ;
    • Locked : files with the deaccess lock bit set 0
    • Marked : files marked for deletion 5
    • Noshelvable : files which can not be shelved .
    • Isshelved : files which are shelved 
    

    4The several characteristics can be combined in one 8command.If you want a logical OR behaviour in stead of 4the default AND behaviour, you can use the special option MATCH=OR eg:

     *  SEARCH disk/CHAR=(NOMOVE,DIR,MATCH=OR)  
    

    "

    /CREATED=option(,option)

    0The /CREATED qualifier is used to search files 5depending on their creation date. The options are : 
      
    • /CREATED=BEFORE=date 
    • /CREATED=SINCE=date 
    

    7These 2 options can be used to get files which have a 4creation date before or after a specific date. The 9BEFORE and SINCE option can be combined in one command. #

    /EXCLUDE=(file1,file2...)

    2This qualifier is used to exclude files from the 7search. You can use wildcard filenames ; you can also specifiy a list of files. "

    /EXPIRED=option(,option)

    0The /EXPIRED qualifier is used to search files 7depending on their expiration date. The options are : 
      
    • /EXPIRED=BEFORE=date 
    • /EXPIRED=SINCE=date 
    • /EXPIRED=NONE 
    

    0The NONE option gives files which don't have a 5expiration date recorded.The other 2 options can be 7used to get files which have a expiration date before 7or after a specific date. The BEFORE and SINCE option !can be combined in one command. 

    /FID=file-id

    9The /FID qualifier is a special function of SEARCH. It 5directs SEARCH to go directly to the specified file 0without processing the rest of the Index file. 8Therefore, you cannot combine this qualifierwith other 5search qualifiers such as /FILE. Normally a file-id 7consists is in the form (x,y,z) where x is the number 8of the file header within INDEXF.SYS y is the sequence 7number, and z is the Relative Volume Number. You only 5need to specifiy the x value in the /FID qualifier.

    /FILE=(file1,file2...)

    3This qualifier is used to search for files with a 6specific file name.You can use wildcard file names; 'also you can specify a list of files. 

    /FORMAT=format-string

    CCreate an output file in a format described by the format string. EThe string must contain the !AS directive (this must be uppercase). ?At the !AS location the resultant filename will be filled in. $The /OUTPUT qualifier is required. -

    /FRAGMENT(=(MINIMUM=nr,MAXIMUM=nr))

    EThis qualifier displays the number of fragments and file headers of each 6file found. You can further limit the files found by 6using the MINIMUM and MAXIMUM= options. For example:  

    0


    Next page...  | ,Contents   *[DFU024.DOC]DFU024_002.HTML;2+,p.G/7@ 4TGGZ-[0123 KPWOH56}t7}t89G7@HJPTDFU V2.4

    DFU V2.4

    ?
    Previous page... . | Contents

     DFU> disk/FRAG  DFU> disk/FRAG=min=10  $DFU> disk/FRAG=(min=10,max=100)  
    

    

    /FULL

    5If you use this qualifier , SEARCH will give a full 9output for each file found. This output is a look-alike 7of the output from DIRECTORY/FULL. You cannot combine (this qualifier with /SORT or /SUMMARY. 

    /HOME

    7This qualifier directs search to give output from the 3disk's home block. SEARCH uses the home block for ?calculating the free and used file headers within INDEXF.SYS. &

    /(NO)IDENT=identifier or uic

    .You can search for files owned by a specific Didentifier or uic. Any valid uic or identifier format may be used. *Another way is the /OWNER_UIC qualifier; >you cannot combine these 2 qualifiers in one SEARCH command. =Issueing /NOIDENT directs DFU to search for files NOT owned Fby this IDENTIFIER, eg: DFU> SEARCH sys$sysdevice/NOIDENT=SYSTEM. #

    /LBN=logical-block-number

    5The /LBN qualifier is a special function of SEARCH. 2This allows you to find a file which contains a 3specific LBN. This may be usefull if you have bad 9blocks logged in the error log. You cannot combine /LBN 'with search qualifiers such as /FILE. *

    /(NO)OWNER_UIC=uic or identifier

    @This qualifier is used to get files owned by a specific uic or =identifier. Any valid uic or identifier format may be used. EYou cannot combine this qualifier with /IDENT. Specifying /NOOWNER Fdirects DFU to search for files NOT owned by this UIC or identifier. #

    /MODIFIED=option(,option)

    1The /MODIFIED qualifier is used to search files 9depending on their modification date. The options are : 
      
    • /MODIFIED=BEFORE=date 
    • /MODIFIED=SINCE=date 
    

    7These 2 options can be used to get files which have a 8modification date before or after a specific date. The 9BEFORE and SINCE option can be combined in one command. 

    /MULTIPLE

    8This qualifier searches for files which have more than 1 file header. 

    /NOSEARCH

    5This qualifier can only be used in combination with 6/HOME. It is used to get the Homeblock info, without searching the entire disk. 

    /NOVOLSET

    9The default behaviour of SEARCH is to process an entire 3volume set. You can override this behaviour with :/NOVOLSET. This may be usefull when doing a /LBN search. 

    /OUTPUT=file

    7This qualifier redirects the output from SEARCH to an 6output file.This file can later be used as input to (the DEFRAG , DIRECTORY or SET command. 

    /OVER_ALLOCATED=n

    :Searches for files where the difference between the used ,and allocated size is at least 'n' blocks. 

    /PLACED

    1Checks for files which have a placement control 9retrieval pointer.This is sometimes set by non-DEC disk defragmentation programs. -

    /SIZE=(minimum=size1,maximum=size2)

    5The /SIZE qualifier is used to limit files found by 0their file size.You can either use minimum= or 8maximum= or use both options together. SEARCH will use 7the actual file size for selecting files, except when #the /ALLOCATED qualifier is used. 

    /SORT

    7This qualifier will sort the files found before being 9output. You can combine this with the /OUTPUT qualifier %(the default output is SYS$OUTPUT). 

    /STATISTICS

    GThis qualifier displays the performance statistics: CPU time, Elapsed Time, I/O and PageFaults. 

    /SUMMARY

    3This qualifier will limit the output to the total 7number of files found, with their size (and optional 3the fragmentation when /FRAG is used). You cannot combine /SUMMARY with /FULL. =

    /VERSION_NUMBER=(minimum=version1,maximum=version2)

    ?The /VERSION_NUMBER qualifier is used search for files within >a range of specific file version numbers. Logfiles which are Cproduced with the same name may pose problems when they reach the :maximum version number (32767). Using /VERSION=MIN=32000 $is a quick way to find such files. 
    

     


    4

    Chapter 10
    SET

    

    DThis chapter describes the SET command with the related parameters and qualifiers.  6

    10.1 Introduction

    

    EThe SET command allows you to modify file attributes which can't be modified through DCL commands. =Note that you should be carefull about using this function; you may easily corrupt files. GNOTE: This much wanted functionality is finally introduced in VMS 6.0 Bwith a new DCL command $SET FILE/ATTRIBUTES. Still DFU's SET has Fsome options which are not in SET FILE/ATTRIBUTES (such as setting a BACKUP date). 

     G

    10.2 UIC and identifier processing

    

    GAs of this version of DFU the /OWNER and /IDENT qualifier now accepts all valid uic or 2identifier formats. See chapter 9.5 for details.  


    %

    SET

    

    Modify file attributes. 
    
    

    Format

    $

    SET file1,file2,...,@file

    
    
    

    PARAMETERS

    

    file1,file2,...,@file

    GThe files to be modified. The attributes to be modified are specified Fwith qualifiers. Wildcards area allowed in the filename. An indirect file Hcan be used by using the @ sign. This allows processing of a file list #produced by a DFU SEARCH command. 
    
    

    QUALIFIERS

    

    /BACKUP_DATE=date

    

    /NOBACKUP_DATE

    6Controls whether a new backup date is assigned to @the specified files. Specify the date according to the rules described <in Chapter 1 of the VMS DCL Concepts Manual. Absolute ?date keywords are allowed. If you specify 0 as the date, Etoday's date is used. If you specify /NOBACKUP_DATE the Backup date field will be cleared. 

    /BADACL

    

    /NOBADACL

    7Sets or resets the 'BADACL' flag in the file header. &This enables deletion of a file with a corrupted ACL. 

    /BUCKETSIZE=size

    :Sets a new value for the bucket size in the file header. 

    /CONFIRM

    

    /NOCONFIRM (default)

    3Controls whether a request is issued before each +individual SET operation to confirm that 1the operation should be performed on that file. 8When the system issues the prompt, you can issue #any of the following responses:

       YES      NO     QUIT    TRUE     FALSE  CTRL/Z    1        0      ALL             <RET>  
    

    5You can use any combination of upper- and lowercase Cletters for word responses. Word responses can be abbreviated to <one or more letters (for example, T, TR, or TRU for TRUE). 5Affirmative answers are YES, TRUE, and 1. Negative Ganswers are NO, FALSE, 0, and <RET>. QUIT or CTRL/Z indicates that you want Fto stop processing the command at that point. When you respond with CALL, the command continues to process, but no further prompts are given. ?If you type a response other than one of those in the list, the prompt will be reissued. 

    /CONTIGUOUS_BEST_TRY

    /NOCONTIGUOUS_BEST_TRY

    BSets or resets the 'CONTIGUOUS_BEST_TRY' bit in the file header. 

    /CREATION_DATE=date

    

    /NOCREATION_DATE

    6Controls whether a new creation date is assigned to 6the specified files. Specify the date according to 2the rules described in Chapter 1 of the VMS DCL Concepts Manual. Absolute 9date keywords are allowed. If you specify 0 as the date, today's date is used. 

    /DIRECTORY

    

    /NODIRECTORY

    6Sets or resets the directory attribute of a file. 2This qualifier allows you to set the directory 7bit of a file which was mistakingly reset by the 'SET FILE/NODIRECTORY' command. 8If it is done on a non-directory file, then access 9to that directory will give a 'BADIRECTORY' error. 

    /EBLOCK[=block]

    8This qualifier will reset the end-of-file mark to the :highest block allocated if no block has been specified. DOtherwise the end-of-file mark will be set to the specified block. 

    /EBYTE[=byte]

    8This qualifier will set the end-of-file byte mark to 0the highest byte if it has not been specified. IOtherwise the end-of-file byte mark will be set to the specified byte. 

    /EXPIRATION_DATE=date

    

    /NOEXPIRATION_DATE

    6Controls whether an expiration date is assigned to )the specified files. Specify the date 6according to the rules described in Chapter 1 of the (VMS DCL Concepts Manual. Absolute 8date keywords are allowed. If you specify 0 as the date, today's date is used. "

    /IDENT=identifier or uic

    =Modify the file ownership. See also /OWNER_UIC. This allows modification Bof the file-ownership even if the file is open, eg. INDEXF.SYS. ,You cannot use both /IDENT and /OWNER_UIC. 

    /LOCKED

    

    /NOLOCKED

    3This qualifier will lock a file for future use. 5Nothing else can then be done with the file, until Hit is unlocked (which can also be done with the VMS 'UNLOCK' command. 

    /LOG (default)

    

    /NOLOG

    4Controls whether the SET command displays the file &specification of each file after the modification is made. 

    /MAXREC=record

    7Sets a new value for the maximum record number in the file header. 

    /ORGANIZATION=keyword

    FThe following keywords are used as parameters for the ORGANIZATION 6qualifier: DIRECT, INDEXED, RELATIVE and SEQUENTIAL. 5This will allow you to modify the file organization 7type in the file header. Of course this won't change %the real organization of the file. &

    /OWNER_UIC=uic or identifier

    EModify the file ownership to an uic or identifier. See also /IDENT. DThis allows modification of the file-ownership even if the file is open, eg. INDEXF.SYS. ,You cannot use both /IDENT and /OWNER_UIC.

    /RECATTRIBUTES=keyword

    .The following keywords are used as Iparameters for the RECATTRIBUTES qualifier: NONE, FORTRAN, IMPLIED, PRINT @and NOSPAN. This will allow you to modify the file's record Eattributes in the file header. NONE, FORTRAN, IMPLIED and PRINT are mutually 9exclusive, but can be used in combination with NOSPAN. EWhen NOSPAN is omitted SPAN is assumed (the default is to allow %records to cross block boundaries). 

    /RECSIZE=size

    :Sets a new value for the record size in the file header. 

    /RECTYPE=keyword

    9The following keywords are used as parameters for Gthe RECTYPE qualifier: FIXED, STREAM, STREAMCR, STREAMLF, UNDEFINED, VARIABLE >and VFC. This will allow you to modify the file's record type in the file header. 

    /REVISION_DATE=date

    

    /NOREVISION_DATE

    5Controls whether a revision date is assigned to the .specified files. Specify the date according Ito the rules described in Chapter 1 of the VMS DCL Concepts Manual. EAbsolute date keywords are allowed. If you specify 0 as the date, today's date is used. 

    /RVCOUNT=count

    =Sets a new value for the revision count in the file header. 

    /UPDATE

    

    /NOUPDATE (default)

    1Normally the file's revision date will be )updated after any modification to it. ISET however disables this update (otherwise the REVISION date could not Fbe set). Specify this qualifier if you want the revision date to be updated. 

    /VFCSIZE=size

    2Sets a new value for the VFC size in the file Aheader. This value will only be used with the VFC record type. 
    

     


    9

    Chapter 11
    UNDELETE

    

    IThis chapter describes the UNDELETE command with the related parameters and qualifiers.  6

    11.1 Introduction

    

    @The UNDELETE function is designed to recover deleted files, if possible. ,UNDELETE operates in a safe mode such that Eit first checks if the deleted file header and diskblocks are still available. GOnly in that case will the file be recovered. Otherwise UNDELETE will leave the disk unmodified. &UNDELETE has some powerfull options: 

      F
    • Generate a list of recoverable files with the /LIST qualifier. FThis qualifier will not undelete any file, and therefore it does not lock up the disk. ,
    • Undelete multiple files in one pass. I
    • Make file selections based on the owner with the /OWNER or /IDENT qualifier. F
    • Undeleted files which cannot be entered back in their original Cdirectory will be moved to the [SYSLOST] directory. This saves an (additional ANALYZE/DISK/REPAIR action. 
    

     <

    11.2 How Undelete works

    

    ,The UNDELETE command operates as follows : 

      F
    1. Lock the volume. In the same manner as ANALYZE/DISK/REPAIR and SET VOLUME A/REBUILD Undelete locks the disk for other writers such that no modifications 2to the INDEXF, BITMAP or QUOTA file can be made. H
    2. Search the INDEXF.SYS file if the requested file is still there. A check 6is made if it really is a valid deleted file header. D
    3. Checks if the deleted file header and all possible extension headers are still valid. D
    4. Checks if the blocks previously owned by this file are still free. A
    5. If all these conditions are met DFU will display the file and asks for a confirmation. G
    6. Rebuilds all of the deleted file headers and bitmaps in memory. 9If no errors are found all the file headers and bitmaps Eare written back to disk. The files original backlink is saved in a table in memory. @
    7. If appropiate the blocks and headers are charged against diskquota. G
    8. When all of INDEXF.SYS has been scanned the volume is unlocked. A
    9. The file(s) is (are) entered in the original directory if possible, @using the table build up in memory. If the enter command fails (probably Ebecause the original directory is gone) the file will be entered in 6[SYSLOST]. DFU will create this directory if needed. 
    

    DIf the /LIST qualifier is used, DFU will just list the recoverable Dfiles without performing any action on the disk. The disk will not be locked. 

    @It is important to note that during the bitmap and file header processing Gany error will immediately terminate the recovery process, and unlock the Fdisk. Files which have been recovered up to that point will still be Gentered in the appropiate directory. As no wrong information has been Hwritten back to the disk this should leave the disk in a proper state. 

    ENOTE: The blocks recovered will NOT be subtracted from the Volume's free 6block count. To get the actual freeblock count a SET VOLUME/REBUILD=FORCE Gis necessary. Also a complete reMOUNT will reset the freeblock count. 

    GIMPORTANT: DFU takes care to recover only files whose original blocks are Ffree. However these blocks may have been modified in the meantime by Ianother file which also has been deleted. Therefore each recovered file 2must be checked manually to check its integrity. 

    !Example of a Undelete session :

     DFU> undel $1$dua102:/list    /Recoverable file [TEST]CHANGE_UIC.FOR;2 found  -Recoverable file [TEST]CHECK_ID.FOR;1 found  .Recoverable file [TEST]CHKPRDIMG.FOR;1 found  +Recoverable file [TEST]CHRLEN.FOR;1 found    %DFU> undel/file=*.for $1$DUA102:    (%DFU-I-READBMAP, Reading BITMAP.SYS...  ,%DFU-W-LOCKED, Volume now LOCKED for write  *%DFU-I-UNDEL, Start search on $1$DUA102:    /Recoverable file [TEST]CHANGE_UIC.FOR;2 found  "Recover this file? (Y/N) [N] : n  -Recoverable file [TEST]CHECK_ID.FOR;1 found  "Recover this file? (Y/N) [N] : y  ,%DFU-S-RECOVER, File succesfully recovered  (%DFU-I-ADDQUOTA, updating diskquota...    .Recoverable file [TEST]CHKPRDIMG.FOR;1 found  "Recover this file? (Y/N) [N] : n  +Recoverable file [TEST]CHRLEN.FOR;1 found  "Recover this file? (Y/N) [N] : y    ,%DFU-S-RECOVER, File succesfully recovered  (%DFU-I-ADDQUOTA, updating diskquota...   %DFU-I-UNLOCK, Volume unlocked  0%DFU-I-ENTER, Entering file(s) in directory...  A%DFU-S-ENTERED, File CHECK_ID.FOR entered in original directory  ?%DFU-S-ENTERED, File CHRLEN.FOR entered in original directory    DFU> EXIT    
    

     A

    11.3 Files marked for delete

    

    FNormally DFU does not undelete files marked for delete. This version Dintroduces a new qualifier, /MARKED , which specifically undeletes Bfiles marked for delete. This allows the recovery of files which =are deleted but still open, such as INSTALLed files or even Crecovery of the system dump file SYSDUMP.DMP whenever such a file is deleted.  G

    11.4 UIC and identifier processing

    

    GAs of this version of DFU the /OWNER and /IDENT qualifier now accepts all valid uic or 2identifier formats. See chapter 9.5 for details.  


    *

    UNDELETE

    

    0Recover one or more deleted files on a device. 
    
    

    Format

    

    UNDELETE device[:]

    
    
    

    PARAMETERS

    

    device

    4The device on which to undelete one or more files. >The device will be write-locked during the undelete process. 
    
    

    QUALIFIERS

    

    /FILE=filename

    HThe file to be recovered. Wildcards may be used. If a matching file is found HUndelete will ask a confirmation. If a certain file is confirmed, that Ifile will be recovered if possible, and control will be returned to the IDFU> prompt. If the /FILE qualifier is omitted DFU will assume *.*;* . "

    /IDENT=identifier or uic

    .You can search for files owned by a specific =identifier or uic. Another way is the /OWNER_UIC qualifier; ?you cannot combine these 2 qualifier in one UNDELETE command. "

    /LIST(=output-file-name)

    DGenerate a list of recoverable files. No undelete will take place, Cand the disk will not be locked. The defaultoutput is SYS$OUTPUT. 

    /MARKED

    @Consider only files marked-for-delete. Such files are usuallly 8still open by some utility, such as INSTALLed files or the system dump file. &

    /OWNER_UIC=uic or identifier

    AThis qualifier is used to select files by a uic or identifier . 1You cannot combine this qualifier with /IDENT. 

    /STATISTICS

    GThis qualifier displays the performance statistics: CPU time, Elapsed Time, I/O and PageFaults. 
    

     


    6

    Chapter 12
    SPAWN

    

    :The new SPAWN command creates an interactive subprocess. EThis allows a quick escape to the DCL level from an interactive DFU 8session. The subprocess has a default prompt DFU_sub$. ?In SMG mode the <DO> key also performs a SPAWN command. :You must logout explicitly to return to the DFU session.  


    7

    Chapter 13
    VERIFY

    

    GThis chapter describes the VERIFY command with the related parameters and qualifiers. )3_1"> 6

    13.1 Introduction

    

    IThe VERIFY command makes an analysis of the disk, scanning for file and disk Estructure errors. VERIFY performs almost all of the checks normally done Dby a ANALYZE/DISK command. But VERIFY is several times faster than )ANALYZE/DISK, and using less resources. 

    1VERIFY checks and reports the following errors: 

      H
    • Checks the logical information contained in the disks HOME block )
    • Reports files marked for deletion 5
    • Reports mismatches in the index file's bitmap 
    • Checks all backlinks. )
    • Reports multiple allocated blocks <
    • Reports blocks incorrectly marked free and allocated 
    • Reports all lost files G
    • Checks for mismatches between blocks used and blocks charged in QUOTA.SYS. '(Only done when diskquota is enabled) 
    

     >

    13.2 Basic repair actions

    

    6The /FIX qualifier can be used to perform some basic Irepair actions. Unlike ANALYZE/DISK/REPAIR this does not lock the disk! $/FIX repairs the following errors: 

      5
    • Deletes file marked for delete (if possible). ;
    • Recovers lost files and directories into [SYSLOST]. G
    • Recovers a very rare problem which will get ANALYZE/DISK/REPAIR Cinto a computable loop (This problem is fixed in VMS V6.2 or with the VERI02_061 patch kit). C
    • Recovers a corrupted backlink for the Master File Directory 000000.DIR. 
    

     <

    13.3 Directory scanning

    

    CThis version of DFU introduces the new /DIRECTORY_SCAN qualifier. AThis qualifier directs DFU to scan all directories on the disk. This has some advantages : 

      I
    • Better detection of some cases of 'lost' files. Combined with the G/FIX qualifier DFU may be able to recover such files into the correct 6directory instead of moving such files to [SYSLOST]. B
    • Detects and fixes file-id mismatches between the directory and the INDEXF.SYS file. F
    • Using the /DIRECTORY_SCAN qualifier makes DFU fully compatible with ANALYZE/DISK. 
    

    EPlease note that a complete directory scan may take several minutes to complete.  A

    13.4 Advanced repair actions

    

    9The /REBUILD qualifier can be used to perform some more 7repair actions. This will however lock the disk (like Ea DCL $SET VOLUME/REBUILD=FORCE command) for a short period of time I(usually less than 30 seconds). /REBUILD repairs the following errors : 

      D
    • Mismatches in the INDEXF.SYS bitmap (files reported with the NOBITSET and NOBITCLR errors) F
    • Blocks incorrectly marked allocated or free in the BITMAP.SYS. )
    • Mismatches in the diskquota file. 
    

    @Note that /REBUILD does NOT change the disks free block count. 

     =

    13.5 Interpreting errors

    

    @On a system (cluster) wide mounted disk there will probably be Fconcurrent disk activity during the VERIFY command. Therefore VERIFY may report Dsome errors which are not really errors. Try running VERIFY 2 or 3 times *to see if the errors are reported again. ETo get a really consistent report from VERIFY you can use the /LOCK qualifier. HThis will write-lock the disk during the VERIFY run, so don't use this Cqualifier too often. (The /REPAIR qualifier of ANALYZE/DISK also Cwrite-locks the disk). Even if DFU ends ungracefully the DFU exit handler will always UNLOCK the disk.  9

    13.6 Error reporting

    

    -An example of a typical VERIFY run follows:

     DFU> VERIFY mydisk  "%DFU-I-VERIFY, Verifying MYDISK:  -%DFU-S-CHKHOME, Home block info verified OK  (%DFU-I-IFSCAN, Scanning INDEXF.SYS ...  *%DFU-I-CHKBITMAP, Checking BITMAP.SYS...  ,%DFU-I-CHKLOST, Checking for lost files...  (%DFU-I-CHKQUOTA, Checking QUOTA.SYS...     &DFU> VERIFY/REBUILD sys$sysdevice  (%DFU-W-LOCKED, Volume now write locked  )%DFU=I-VERIFY, Verifying SYS$SYSDEVICE:  -%DFU-S-CHKHOME, Home block info verified OK  M%DFU-W-DELETED, file (620,351,1) RSF_DI_RSF_SERVER0.TMP;3 marked for delete  G%DFU-W-DELETED, file (6349,173,1) DCLTABLES.EXE;937 marked for delete  N%DFU-W-DELETED, file (19745,35,1) RSF_DI_RSF_SERVER0.TMP;3 marked for delete  *%DFU-I-CHKBITMAP, Checking BITMAP.SYS...  R%DFU-E-ALLOCCLR, blocks LBN 2667141 through 2667143 incorrectly marked allocated  R%DFU-E-ALLOCCLR, blocks LBN 2667153 through 2667161 incorrectly marked allocated    .    .  2%DFU-S-RBDBITMAP, BITMAP.SYS succesfully rebuild  ,%DFU-I-CHKLOST, Checking for lost files...   %DFU-I-UNLOCK, Volume unlocked    	DFU>  
    

    )VERIFY can report the following errors:

    1ALLOCCLR, blocks incorrectly marked allocated, 
    Severity  ERROR Explanation DBlocks were found which are not allocated by a file but set in the DBITMAP file. This error is often seen when VERIFY is run and there His concurrent file activity on the disk. Also, if after a system crash <the disk is mounted with /NOREBUILD such blocks may exist. =ReRun VERIFY with /LOCK to see if the error is still there. User Action 0Run VERIFY/REBUILD to rebuild the BITMAP file.
    ,ALLOCSET, blocks incorrectly marked free, 
    Severity  ERROR Explanation DBlocks were found which are allocated by a file but not set in the DBITMAP file. This error is often seen when VERIFY is run and there His concurrent file activity on the disk. Also, if after a system crash <the disk is mounted with /NOREBUILD such blocks may exist. =ReRun VERIFY with /LOCK to see if the error is still there. User Action 0Run VERIFY/REBUILD to rebuild the BITMAP file.
    +BADBLOCK, file has suspected bad blocks, 
    Severity  ERROR Explanation AA file has suspected bad blocks. This is likely to be caused by hardware errors on the disk. User Action ETry to copy the file to another location. Also check the Error Log.
    .BADEXTLNK, link to extension header broken, 
    Severity  ERROR Explanation >VERIFY tries to follow the extension link of the file and it -failed, or the extension header is invalid. User Action ITry ANALYZE/DISK/REPAIR. However, this may be an unrepairable error, in which 1case the file will be corrupted and unreliable.
    <BADMFDLNK, directory has backlink to 000000.DIR on RVN n, 
    Severity  ERROR Explanation =A directory has a backlink to a Master file directory other Gthan the one on RVN 1. This is incorrect, but the only way to recover is to >reenter the directory manually into the 000000.DIR on RVN 1. User Action EDo a SET FILE/ENTER into the 000000.DIR directory on RVN 1, then do .a SET FILE/REMOVE from the wrong 000000.DIR.
    #DELETED, file marked for delete, 
    Severity WARNING Explanation DA file was found marked for deletion. Such files usually exists as Ea result of file being deleted while it was still INSTALLed , or as Ga result of a system crash. It is not considered as an error. You can try +to delete such files by using VERIFY/FIX.
    #ERRHOME, Home block info not OK, 
    Severity  ERROR Explanation GThe Info contained in the Home Block was not consistent or corrupted. User Action 2Run ANALYZE/DISK/REPAIR to try to fix the error.
    (INVBAKFID, file has invalid backlink, 
    Severity  ERROR Explanation EThe files backlink file id is not filled in. This is likely to be a lost Afile. (Note that once VERIFY reports this error, it will not be reported Fagain during the LOSTFILE check). But is also possible that the file Fis in a valid directory, but that the Backlink file id is not filled in. User Action BRun ANALYZE/DISK/REPAIR. If the file is in a valid directory the backlink will @be repaired. Otherwise the file will be moved to the [SYSLOST] directory. GYou can also use VERIFY/FIX but then the file will unconditionally be moved to [SYSLOST].
    #LOCKED, file is deaccess locked, 
    Severity WARNING Explanation FThe file is deaccess locked. This may be a result of a system crash. User Action DTry to unlock the file with the DFU SET command, or the DCL UNLOCK command.
    1LOSTHDR1, file found in nonexistent directory, 
    Severity WARNING Explanation CDuring the lost file check a file was discovered in a nonexistent directory. ?This error can be caused as follows : set a directory file to NODIRECTORY and delete it. User Action =Run VERIFY/FIX to move the file to the [SYSLOST] directory.
    7LOSTHDR2, file found in directory with bad backlink, 
    Severity WARNING Explanation HDuring the lost file check a file was discovered in a valid directory. 1However, the directory has an invalid backlink. DThis error can be caused by doing a SET FILE/REMOVE of a directory file. User Action BRun VERIFY/FIX to move the directory to the [SYSLOST] directory. DThen move the directory back to the correct location. The files in *the directory should be accesible again.
    -LOSTHDR3, file found in invalid directory, 
    Severity WARNING Explanation HDuring the lost file check a file was discovered in a directory which Dis not a valid directory. Either the file has a wrong backlink, or >the directory file has the directory file attribute not set. User Action HLook up the directory and use DFU SET to set the directory bit. If the Edirectory file was OK then run VERIFY/FIX to recover the lost file.
    &LOSTHDR4, not found in a directory, 
    Severity WARNING Explanation @When the /DIRECTORY_SCAN qualifier is used , DFU detects files Fwhich have a valid backlink but which are not seen in the directory. !This can be repaired with /FIX. User Action =Using /FIX will enter these files in the correct directory.
    (MULTALLOC, blocks multiple allocated, 
    Severity  ERROR Explanation CA file has blocks allocated which already belong to another file. =Note that VERIFY will make a second pass through INDEXF.SYS Ito report all the files involved. This is a serious error, and may be a =result of a disk being mounted on two seperated VAXClusters (or a partitioned VAXCluster). User Action GCopy all the files found to another location. Next all the files must be Edeleted. Run VERIFY/REBUILD to repair the BITMAP. All the afflicted Ifiles must be manually inspected to see which files are valid and which are corrupted.
    -NOBITCLR, Deleted file header marked BUSY, 
    Severity WARNING Explanation GA file was deleted. The corresponding bit in the INDEXF bitmap should be 8cleared but is still set. This is not a serious error. User Action &Run VERIFY/REBUILD to fix the error.
    +NOBITSET, index file bitmap bit not set, 
    Severity WARNING Explanation BA valid file was found , but the corresponding index file bitmap ,bit is clear. This is not a serious error. User Action &Run VERIFY/REBUILD to fix the error.
    NOOWNER, file has no owner, 
    Severity WARNING Explanation DA file was found with UIC [0,0] as the owner. This is not a normal situation. User Action -Look up the file and modify the file owner.
    CQUOTAERR, UIC [x,y] has n blocks used, QUOTA indicates m blocks, 
    Severity WARNING Explanation HIf a disk has diskquota enabled, VERIFY calculates the blocks used and Ecompares them with the value in the QUOTA.SYS file. Any mismatch is reported. 8This error is often seen when VERIFY is run, and there His concurrent file activity on the disk. Also, if after a system crash Fthe disk is mounted with /NOREBUILD such Quota mismatches may exist. =ReRun VERIFY with /LOCK to see if the error is still there. User Action /Run VERIFY/REBUILD to rebuild the QUOTA file. )Or run a DISKQUOTA> REBUILD command.
    (SLFBAKFID, backlink points to itself, 
    Severity WARNING Explanation EThis error indicates that DFU has found a directory with a backlink pointing Fto itself. This feature is only allowed for the MFD 000000.DIR. This error ;will result in ANALYZE/DISK going into a COMputable loop. User Action BRun VERIFY/FIX to move the directory to the [SYSLOST] directory. DThen remove the directory entry from itself with a SET FILE/REMOVE command. 7The files in the directory should be accesible again.  
    (

    VERIFY

    

    ,VERIFY a device for disk structure errors. 
    
    

    Format

    

    VERIFY device[:]

    
    
    

    PARAMETERS

    

    device

    The device to be verified. 
    
    

    QUALIFIERS

    

    /APPEND=filename

    :This qualifier redirects the output to be appended to an Calready existing file. If the output file does not exists it will :be created. You can use /APPEND or /OUTPUT but not both. 

    /DIRECTORY_SCAN

    DPerforms a full directory scan. This may take up some time, but it <allows detection of mismatches between the directories and INDEXF.SYS. 

    /FIX

    

    /NOFIX (default)

    GRepair errors on the disk. File marked for delete will be deleted and 8lost files and directories will be moved to [SYSLOST]. 

    /LOCK

    

    /NOLOCK (default)

    FLocks the disk for file allocation/deletion. This gives a consistent report Ifor the disk, but other users may experience a delay when accessing the disk. >The device will be unlocked a the end of the VERIFY command. 

    /OUTPUT=filename

    @This qualifier redirects the output to a file. The output will also go to SYS$OUTPUT. 7CAUTION: if you use /LOCK in combination with /OUTPUT Cbe carefull to specify an outputfile on ANOTHER disk, or DFU will finish with a severe error. 

    /REBUILD

    

    /NOREBUILD (default)

    Perform a volume rebuild. FUsing this qualifier will temporarily lock the disk for other users. 

    /STATISTICS

    GThis qualifier displays the performance statistics: CPU time, Elapsed Time, I/O and PageFaults. 
     

    0


    Next page...  | ,Contents   *[DFU024.DOC]DFU024_003.HTML;2+,q./7@ 4TZ-[0123 KPWO56}t7}t89G7@HJTDFU V2.4

    DFU V2.4

    ?
    Previous page... . | Contents
    

    - Contents   "*[DFU024.DOC]DFU024_CONTENTS.HTML;2+,r. /7@ 4a RZ-[0123 KPWO56}t7}t89G7@HJG   DFU V2.4   !

    DFU V2.4


    3| First page |)

    Contents (summary)

     


    

    Contents

     <
    | Next page...  |   !*[DFU024.DOC]DFU024_CONTENTS.TEX;2+,. /7@ 4n 8-[0123KPWO 56}t7}t89G7@HJ\begintexinput \begintocK\toctexentry {0}{\RTLnumber {1}}{Introduction}{\RTLnumber {1\foliodelim 1}}O\toctexentry {1}{\RTLnumber {1.1}}{Support on DFU}{\RTLnumber {1\foliodelim 1}}T\toctexentry {1}{\RTLnumber {1.2}}{General description}{\RTLnumber {1\foliodelim 1}}V\toctexentry {1}{\RTLnumber {1.3}}{New features of V2.4 }{\RTLnumber {1\foliodelim 2}}\\toctexentry {1}{\RTLnumber {1.4}}{Restrictions and Parameters}{\RTLnumber {1\foliodelim 3}}H\toctexentry {0}{\RTLnumber {2}}{Using DFU}{\RTLnumber {2\foliodelim 1}}W\toctexentry {1}{\RTLnumber {2.1}}{Installation procedure}{\RTLnumber {2\foliodelim 1}}T\toctexentry {1}{\RTLnumber {2.2}}{Security and access}{\RTLnumber {2\foliodelim 2}}L\toctexentry {1}{\RTLnumber {2.3}}{Running DFU}{\RTLnumber {2\foliodelim 3}}\\toctexentry {1}{\RTLnumber {2.4}}{Using an indirect file list}{\RTLnumber {2\foliodelim 3}}W\toctexentry {0}{\RTLnumber {3}}{The SMG output interface}{\RTLnumber {3\foliodelim 1}}W\toctexentry {1}{\RTLnumber {3.1}}{Enabling/Disabling SMG}{\RTLnumber {3\foliodelim 1}}n\toctexentry {1}{\RTLnumber {3.2}}{Automatic switching between SMG and Line mode}{\RTLnumber {3\foliodelim 1}}Y\toctexentry {1}{\RTLnumber {3.3}}{Layout of the SMG screen}{\RTLnumber {3\foliodelim 1}}X\toctexentry {1}{\RTLnumber {3.4}}{Special Screen commands}{\RTLnumber {3\foliodelim 2}}M\toctexentry {1}{\RTLnumber {3.5}}{Side effects}{\RTLnumber {3\foliodelim 3}}I\toctexentry {0}{\RTLnumber {4}}{DFU basics}{\RTLnumber {4\foliodelim 1}}E\toctexentry {0}{\RTLnumber {5}}{DEFRAG}{\RTLnumber {5\foliodelim 1}}L\toctexentry {1}{\RTLnumber {5.1}}{Description}{\RTLnumber {5\foliodelim 1}}O\toctexentry {1}{\RTLnumber {5.2}}{Error messages}{\RTLnumber {5\foliodelim 1}}F\toctexentry {13}{\RTLnumber {0}}{DEFRAG}{\RTLnumber {5\foliodelim 1}}E\toctexentry {0}{\RTLnumber {6}}{DELETE}{\RTLnumber {6\foliodelim 1}}M\toctexentry {1}{\RTLnumber {6.1}}{Introduction}{\RTLnumber {6\foliodelim 1}}F\toctexentry {13}{\RTLnumber {0}}{DELETE}{\RTLnumber {6\foliodelim 1}}H\toctexentry {0}{\RTLnumber {7}}{DIRECTORY}{\RTLnumber {7\foliodelim 1}}M\toctexentry {1}{\RTLnumber {7.1}}{Introduction}{\RTLnumber {7\foliodelim 1}}d\toctexentry {1}{\RTLnumber {7.2}}{Discussion of directory compression}{\RTLnumber {7\foliodelim 2}}R\toctexentry {1}{\RTLnumber {7.3}}{Output formatting}{\RTLnumber {7\foliodelim 3}}I\toctexentry {13}{\RTLnumber {0}}{DIRECTORY}{\RTLnumber {7\foliodelim 3}}E\toctexentry {0}{\RTLnumber {8}}{REPORT}{\RTLnumber {8\foliodelim 1}}L\toctexentry {1}{\RTLnumber {8.1}}{Description}{\RTLnumber {8\foliodelim 1}}R\toctexentry {1}{\RTLnumber {8.2}}{Syntax and Output}{\RTLnumber {8\foliodelim 1}}F\toctexentry {13}{\RTLnumber {0}}{REPORT}{\RTLnumber {8\foliodelim 3}}E\toctexentry {0}{\RTLnumber {9}}{SEARCH}{\RTLnumber {9\foliodelim 1}}M\toctexentry {1}{\RTLnumber {9.1}}{Introduction}{\RTLnumber {9\foliodelim 1}}R\toctexentry {1}{\RTLnumber {9.2}}{Syntax and Output}{\RTLnumber {9\foliodelim 1}}V\toctexentry {1}{\RTLnumber {9.3}}{Volume Set processing}{\RTLnumber {9\foliodelim 1}}R\toctexentry {1}{\RTLnumber {9.4}}{Output formatting}{\RTLnumber {9\foliodelim 1}}^\toctexentry {1}{\RTLnumber {9.5}}{UIC and identifier processing}{\RTLnumber {9\foliodelim 2}}F\toctexentry {13}{\RTLnumber {0}}{SEARCH}{\RTLnumber {9\foliodelim 2}}D\toctexentry {0}{\RTLnumber {10}}{SET}{\RTLnumber {10\foliodelim 1}}O\toctexentry {1}{\RTLnumber {10.1}}{Introduction}{\RTLnumber {10\foliodelim 1}}`\toctexentry {1}{\RTLnumber {10.2}}{UIC and identifier processing}{\RTLnumber {10\foliodelim 1}}D\toctexentry {13}{\RTLnumber {0}}{SET}{\RTLnumber {10\foliodelim 1}}I\toctexentry {0}{\RTLnumber {11}}{UNDELETE}{\RTLnumber {11\foliodelim 1}}O\toctexentry {1}{\RTLnumber {11.1}}{Introduction}{\RTLnumber {11\foliodelim 1}}U\toctexentry {1}{\RTLnumber {11.2}}{How Undelete works}{\RTLnumber {11\foliodelim 1}}Z\toctexentry {1}{\RTLnumber {11.3}}{Files marked for delete}{\RTLnumber {11\foliodelim 3}}`\toctexentry {1}{\RTLnumber {11.4}}{UIC and identifier processing}{\RTLnumber {11\foliodelim 3}}I\toctexentry {13}{\RTLnumber {0}}{UNDELETE}{\RTLnumber {11\foliodelim 3}}F\toctexentry {0}{\RTLnumber {12}}{SPAWN}{\RTLnumber {12\foliodelim 1}}G\toctexentry {0}{\RTLnumber {13}}{VERIFY}{\RTLnumber {13\foliodelim 1}}O\toctexentry {1}{\RTLnumber {13.1}}{Introduction}{\RTLnumber {13\foliodelim 1}}W\toctexentry {1}{\RTLnumber {13.2}}{Basic repair actions}{\RTLnumber {13\foliodelim 1}}U\toctexentry {1}{\RTLnumber {13.3}}{Directory scanning}{\RTLnumber {13\foliodelim 2}}Z\toctexentry {1}{\RTLnumber {13.4}}{Advanced repair actions}{\RTLnumber {13\foliodelim 2}}V\toctexentry {1}{\RTLnumber {13.5}}{Interpreting errors}{\RTLnumber {13\foliodelim 2}}R\toctexentry {1}{\RTLnumber {13.6}}{Error reporting}{\RTLnumber {13\foliodelim 3}}G\toctexentry {13}{\RTLnumber {0}}{VERIFY}{\RTLnumber {13\foliodelim 7}}\endtoc*[DFU024]FREEWARE_README.TXT;9+,e./7@ 4;-Y0123KPWO56i+l76y+l89G7@HJ:DFU, SYSTEM MANAGEMENT, High Performace disk/file utility.!:DFU Disk and File Utilities is a high performance utility 5developed to perform routine maintenance and special 8purpose operations on disks, files and directories. The 6functionality offered by DFU is not or only partially 6available through other DCL commands or VMS utilities. Available functions :1 - DEFRAGMENT a single or a small number of files8 - DELETE files by file-id; delete directory(trees) fast5 - DIRECTORY functions : COMPRESS or DUMP directories; : search directories for files with : multiple versions , alias files . or empty directories1 : create directories with + preallocated size2 - REPORT disk for file, freespace and disk usage  statistics & - SEARCH very fast for specific files$ - SET : change many file attributes - UNDELETE files+ - VERIFY and REBUILD of the disk structure ! end-of-text*[DFU024]KIT.DIR;1+,f./7@ 4-Y0123 KPWO562hs7;;hs89G7@HJIALP_DFULIB.OLBgALP_DFULNK.COMhDECC_DFULIB.OLBiDFU024.DECW$BOOK"DFU024.DECW$BOOKSHELF DFU024.HTML;2~ DFU024.BCKfY[DFU024]KIT.DIR;1gx DFU024.LINE DFU024.PSDFU024_001.HTMLDFU024_002.HTMLDFU024_003.HTML DFU024_CONTENTS.HTML DFUHLP.HLBs DFULNK.COMt DFU_ALP.OBJu DFU_DECC.OBJv DFU_VAXC.OBJw KITDATA.VUDx KITINSTAL.COMyVAXC_DFULIB.OLB\*[DFU024]LIS.DIR;1+,{./7@ 4-Y0123 KPWO56\ls7 ls89G7@HJIDFU.LIS| DFUMSG.LIS}DFU_BITMAP.LIS~DFU_FILEDIR.LISDFU_IFSCAN.LISDFU_TABLES.LISOWN.LIS*[DFU024.LIS]DFU.LIS;2+,|.E/7@ 4EC -{0123KPWOF56}t7}t89G7@HJt DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 1V1.0 13-AUG-1996 10:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1)E 1 /******************************************************V 2 * H 3 * Copyright (c) Digital Equipment Corporation, 1980 - 1996 4 *7 5 * DFU Disk and File Utilities for OPENVMS 6 * Version V2.4 7 * Freeware version" 8 * Date : august 1996G 9 ********************************************************/ 10  11 #ifndef VAXC0 12 #pragma message disable(GLOBALEXT) 13 #endif 14 & 15 #include clidef 461 #include climsgdef 807 #include descrip 1783 #include stdio# 2459 #include lib$routines 4228 #include prvdef 4412 #include ssdef 5903 #include jpidef 6159 #include smgdef 6998 #include signal 7495 #include tt2def 7633 #include iodef, 8608 typedef unsigned long Boolean; 8609 % 8610 globalvalue dfu_tables;A 8611 /* Next global params needed for CTRL/C trapping */ 8612 3 8613 int key_tab, status, cip, orig_colls;1 8614 static int orgttchar[3], ttchar[3]; 8615 & 8616 extern char outbuf[255];O 8617 extern unsigned int ctrlc, tchan, disp_id, disp1_id, rows, colls,> 8618 disp2_id, status_id, paste_id, help_id, keyb_id;( 8619 extern Boolean smg$enable; 8620  8621 static FILE *xp;R 8622 int astrtn(), refresh() ; /* Ast routines called by CTRLC,Y and W */5 8623 unsigned int prim_hand(), brdcst_ast();8 8624 void singlemsg(),put_disp(), put_status(); 8625  8626 main() 8627  8628 /* MAIN  8629 - 8630 Purpose : 1 Get privilege maskJ 8631 2 Setup SMG environment unless no VT or DFU$NOSMG is set7 8632 3 Get and Parse command (syntax only)2 8633 4 Dispatch to correct subroutine 8634 L 8635 Inputs : Command line (if specified through foreign command) 8636  DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 2V1.0 13-AUG-1996 10:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1)A 8637 Outputs : returns last status code to DCL in caseC 8638 of single command processing. In interactive mode, 8639 always returns SS$_NORMAL. 8640 */ 8641 {5 8642 const rms_eof=98938,smg$_eof=1213442; 8643 struct { ' 8644 short status, count;  8645 int extra ; 8646 }  8647 iosb;2 8648 static char command_line[255], *e;5 8649 unsigned int out_len,ret_len,prvmask;2 8650 void reset_ctrl(), clean_ctrlc(), M 8651 prev_screen(), next_screen(), dump_screen(), toggle_width() ;- 8652 int smg_flag, x, y, i, ttype;0 8653 int cursor_on = SMG$M_CURSOR_ON;7 8654 $DESCRIPTOR(input_line , command_line);, 8655 $DESCRIPTOR(prompt,"DFU> ");4 8656 $DESCRIPTOR(terminal,"SYS$COMMAND");? 8657 $DESCRIPTOR(top_txt,"< DFU V2.4 (Freeware) >");5 8658 $DESCRIPTOR(status_txt,"Statistics");) 8659 $DESCRIPTOR(do_key,"DO");' 8660 $DESCRIPTOR(pf2,"PF2");' 8661 $DESCRIPTOR(pf4,"PF4");0 8662 $DESCRIPTOR(prev,"PREV_SCREEN");0 8663 $DESCRIPTOR(next,"NEXT_SCREEN");- 8664 $DESCRIPTOR(select,"SELECT");) 8665 $DESCRIPTOR(help,"HELP"); 8666 U 8667 /* First find out how we got called ( by RUN, or a foreign command */ 8668 ret_len = 0;D 8669 status = lib$get_foreign(&input_line,0,&ret_len,0); # 8670 out_len = ret_len;  8671 " 8672 smg$enable = TRUE; 8673 key_tab = 0;  8674 disp2_id = 0;  8675 cip = 0; 8676 4 8677 /* Now create the SMG environment */ 8678  8679 colls=80;; 8680 SMG$CREATE_PASTEBOARD(&paste_id, 0, &rows, 6 8681 &colls,&SMG$M_KEEP_CONTENTS,&ttype,0);> 8682 if ((e = (char *) getenv("DFU$NOSMG")) && *e)  8683 { % 8684 smg$enable = FALSE;6 8685 SMG$DELETE_PASTEBOARD(&paste_id,&0); 8686 } 8687 else 8688 { E 8689 if (ttype != SMG$K_VTTERMTABLE) smg$enable = FALSE;V 8690 if (ttype != SMG$K_VTTERMTABLE) SMG$DELETE_PASTEBOARD(&paste_id,&0); 8691 } 8692 > 8693 SMG$CREATE_VIRTUAL_KEYBOARD(&keyb_id,0,0,0,0); DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 3V1.0 13-AUG-1996 10:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1) 8694 if (smg$enable)' 8695 /* Setup key table */ 8696 { 2 8697 SMG$ERASE_PASTEBOARD(&paste_id);2 8698 SMG$CREATE_KEY_TABLE(&key_tab);  8699 colls -=2; % 8700 orig_colls = colls;D 8701 smg_flag = SMG$M_KEY_NOECHO + SMG$M_KEY_TERMINATE;L 8702 SMG$ADD_KEY_DEF(&key_tab,&do_key,0, &smg_flag, &do_key,0);E 8703 SMG$ADD_KEY_DEF(&key_tab,&pf4,0, &smg_flag,&pf4,0);H 8704 SMG$ADD_KEY_DEF(&key_tab,&prev,0, &smg_flag, &prev,0);H 8705 SMG$ADD_KEY_DEF(&key_tab,&next,0, &smg_flag, &next,0);H 8706 SMG$ADD_KEY_DEF(&key_tab,&pf2,0, &smg_flag, &help,0); I 8707 SMG$ADD_KEY_DEF(&key_tab,&help,0, &smg_flag, &help,0); M 8708 SMG$ADD_KEY_DEF(&key_tab,&select,0, &smg_flag, &select,0); V 8709 SMG$CREATE_VIRTUAL_DISPLAY(&500, &colls , &disp1_id, &SMG$M_BORDER,  8710 0, 0);" 8711 x = 508 - rows;  8712 y = rows - 7;B 8713 SMG$CREATE_VIEWPORT(&disp1_id,&x,&1,&y,&colls); O 8714 SMG$CREATE_VIRTUAL_DISPLAY(&2, &colls, &status_id, 0 , 0, 0);N 8715 SMG$CREATE_VIRTUAL_DISPLAY(&2, &colls, &disp2_id, 0 , 0, 0);E 8716 SMG$SET_BROADCAST_TRAPPING(&paste_id,brdcst_ast,0);J 8717 SMG$LABEL_BORDER(&disp1_id, &top_txt, 0, 0,&SMG$M_BOLD);N 8718 SMG$LABEL_BORDER(&status_id, &status_txt, 0, 0,&SMG$M_BOLD);K 8719 SMG$PASTE_VIRTUAL_DISPLAY(&disp1_id, &paste_id, &2,&2,0); 8720 x = rows - 4;L 8721 SMG$PASTE_VIRTUAL_DISPLAY(&status_id, &paste_id, &x,&2,0); 8722 x = rows - 1;K 8723 SMG$PASTE_VIRTUAL_DISPLAY(&disp2_id, &paste_id, &x,&2,0);! 8724 x = 508 - rows;8 8725 SMG$SET_CURSOR_ABS(&disp1_id,&x,&1); 8 8726 SMG$SET_CURSOR_ABS(&disp2_id,&1,&1); 9 8727 SMG$BEGIN_PASTEBOARD_UPDATE(&paste_id); 8728 } 8729 V 8730 sprintf(outbuf,"\n Disk and File Utilities for OpenVMS DFU V2.4"); 8731 put_disp();8 8732 sprintf(outbuf," Freeware version"); 8733 put_disp();X 8734 sprintf(outbuf," Copyright 1996 Digital Equipment Corporation\n"); 8735 put_disp(); 8736  8737 if (smg$enable)- 8738 { /* Enter additional info */A 8739 sprintf(outbuf," DFU functions are : \n");  8740 put_disp();H 8741 sprintf(outbuf," DEFRAGMENT : Defragment files");  8742 put_disp();i 8743 sprintf(outbuf," DELETE : Delete files by File-ID; delete directory (trees)");  8744 put_disp();N 8745 sprintf(outbuf," DIRECTORY : Manipulate directories");  8746 put_disp();W 8747 sprintf(outbuf," REPORT : Generate a complete disk report");  8748 put_disp();H 8749 sprintf(outbuf," SEARCH : Fast file search");  8750 put_disp(); DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 4V1.0 13-AUG-1996 10:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1)N 8751 sprintf(outbuf," SET : Modify file attributes");  8752 put_disp();M 8753 sprintf(outbuf," UNDELETE : Recover deleted files");  8754 put_disp();W 8755 sprintf(outbuf," VERIFY : Check and repair disk structure");  8756 put_disp();7 8757 SMG$END_PASTEBOARD_UPDATE(&paste_id); 8758 }  8759  8760 prvmask = 0;Q 8761 status = dfu_check_access(&prvmask); /*Get the privilege mask */ 8762 Y 8763 /* Setup terminal channel for control purposes; get the terminal chars */< 8764 status = SYS$ASSIGN(&terminal, &tchan, 0,0);V 8765 status = SYS$QIOW(0,tchan, IO$_SENSEMODE,0,0,0,&orgttchar,12,0,0,0,0);A 8766 for (i = 0; i < 3; i++) ttchar[i] = orgttchar[i];F 8767 ttchar[2] &= ~TT2$M_EDITING; /* Clear line edit bit */< 8768 clean_ctrlc(); /* Enable CTRL/W if needed */ 8769 8770 if (ret_len==0)  8771 { " 8772 if (smg$enable) Z 8773 status = SMG$READ_COMPOSED_LINE(&keyb_id,&key_tab,&input_line,&prompt,2 8774 &out_len,&disp2_id,0,0,0,0,0); 8775 else S 8776 status = SMG$READ_COMPOSED_LINE(&keyb_id,0,&input_line,&prompt,* 8777 &out_len,0,0,0,0,0,0); 8778 } 8779  8780 cip = 1; 8781 F 8782 /* Main loop starts here. Get a command and pasre it*/ 8783 for (;;): 8784 { /* loop forever until EXIT is entered */F 8785 if(status==smg$_eof) status = exit_command(prvmask);3 8786 if ((status&1) != 1) goto endfor;0 8787 if (out_len == 0) goto endfor; 8788 ; 8789 /* First catch special screen commands */! 8790 if (smg$enable) 8791 { F 8792 status = strncmp(command_line, "PREV_SCREEN", 11);% 8793 if (status == 0)  8794 { $ 8795 prev_screen();" 8796 goto endfor; 8797 } ; 8798 status = strncmp(command_line, "DO",2);% 8799 if (status == 0)  8800 { 6 8801 status = spawn_command(prvmask);" 8802 goto endfor; 8803 } < 8804 status = strncmp(command_line, "PF4",3);% 8805 if (status == 0)  8806 { $ 8807 dump_screen(); DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 5V1.0 13-AUG-1996 10:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1)" 8808 goto endfor; 8809 } F 8810 status = strncmp(command_line, "NEXT_SCREEN", 11);% 8811 if (status == 0)  8812 { $ 8813 next_screen();" 8814 goto endfor; 8815 } @ 8816 status = strncmp(command_line, "SELECT", 6);$ 8817 if (status == 0) 8818 { % 8819 toggle_width();" 8820 goto endfor; 8821 } 8822 1 8823 SMG$ERASE_DISPLAY(&disp1_id);2 8824 SMG$ERASE_DISPLAY(&status_id);C 8825 SMG$CHANGE_VIEWPORT(&disp1_id,&x,&1,&y,&colls);: 8826 SMG$SET_CURSOR_ABS(&disp1_id,&x,&1);  8827 } 8828 R 8829 /* Catch the CLI errors do avoid disrupting the SMG screen... */, 8830 VAXC$ESTABLISH(prim_hand);Y 8831 status = CLI$DCL_PARSE(&input_line,dfu_tables,lib$get_input,0,&prompt);' 8832 VAXC$ESTABLISH(NULL);A 8833 if (status == CLI$_NOCOMD) singlemsg(0,status);6 8834 if ((status & 1 ) != 1) goto endfor; 8835 else3 8836 /* Now dispatch if no errors */ 8837 { ! 8838 reset_ctrl();* 8839 CLI$DISPATCH(prvmask);" 8840 clean_ctrlc(); 8841 cip = 0;* 8842 status = brdcst_ast();O 8843 if (smg$enable) SMG$SET_CURSOR_MODE(&paste_id, &cursor_on); 8844 } 8845 endfor:# 8846 if (ret_len !=0) B 8847 { /* Single command processing , so exit here */R 8848 status += 0x10000000; /* Do not echo the error on DCL level */$ 8849 if (smg$enable)  8850 { > 8851 if (colls != orig_colls) toggle_width();< 8852 SMG$SET_CURSOR_ABS(&disp2_id,&2,&1);  8853 }! 8854 exit(status); 8855 }% 8856 /* Get next line */ 8857 cip = 0;! 8858 if (smg$enable) 8859 { 6 8860 SMG$ERASE_LINE(&disp2_id, &1, &1);: 8861 SMG$SET_CURSOR_ABS(&disp2_id,&1,&1); R 8862 status = SMG$READ_COMPOSED_LINE(&keyb_id,&key_tab,&input_line,P 8863 &prompt,&out_len,&disp2_id,0,0,0,0,0); /*Get next command */ 8864 cip = 1; DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 6V1.0 13-AUG-1996 10:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1) 8865 } 8866 elseK 8867 status = SMG$READ_COMPOSED_LINE(&keyb_id,0,&input_line,H 8868 &prompt,&out_len,0,0,0,0,0,0); /*Get next command */ 8869 }" 8870 } /* END of MAIN */ 8871 ( 8872 int help_command(int mask) 8873 /* HELP 8874 * 8875 Purpose : call on-line help4 8876 Output : contents of DFUHLP helplib. 8877 */ 8878 { , 8879 unsigned int x,flag=1,tmp=0;% 8880 static char help[80];, 8881 $DESCRIPTOR(help_key ,help);2 8882 $DESCRIPTOR(help_item, "helpkey");/ 8883 $DESCRIPTOR(help_lib,"dfuhlp");) 8884 $DESCRIPTOR(item,"DFU ");; 8885 $DESCRIPTOR(hlp_txt,"< DFU Help Screen >"); 8886 6 8887 /* Check if a help item was entered */= 8888 if (cli$present(&help_item) == CLI$_PRESENT) @ 8889 cli$get_value(&help_item,&help_key,&help_key); 8890 else* 8891 help_key.dsc$w_length=0; 8892 0 8893 /* Add 'DFU ' to the help key */* 8894 help_key.dsc$w_length +=4;6 8895 str$concat(&help_key,&item,&help_key); 8896 x = rows - 4;. 8897 /* Reenable line editing... */T 8898 status = SYS$QIOW(0,tchan, IO$_SETMODE,0,0,0,&orgttchar,12,0,0,0,0); 8899 if (smg$enable) 8900 { M 8901 SMG$CREATE_VIRTUAL_DISPLAY(&x, &colls, &help_id, 0 , 0, 0);I 8902 SMG$LABEL_BORDER(&help_id, &hlp_txt, 0, 0,&SMG$M_BOLD);J 8903 SMG$PASTE_VIRTUAL_DISPLAY(&help_id, &paste_id, &2,&2,0);[ 8904 status = SMG$PUT_HELP_TEXT(&help_id, &keyb_id, &help_key, &help_lib,0,0);9C 8905 SMG$UNPASTE_VIRTUAL_DISPLAY(&help_id, &paste_id); 7 8906 SMG$DELETE_VIRTUAL_DISPLAY(&help_id);G 8907 }W 8908 elseF 8909 status = lbr$output_help(lib$put_output,0,&help_key,1 8910 &help_lib,&flag,lib$get_input); ) 8911 if (status != SS$_NORMAL)  8912 { Q 8913 sprintf(outbuf,"%%DFU-E-HELPERR, Error opening help library,");  8914 put_disp(); & 8915 singlemsg(0,status); 8916 }2 8917 return(1);% 8918 } /*END help_command */  8919 ( 8920 int exit_command(int mask) 8921 /* EXIT DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 7V1.0 13-AUG-1996 10:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1)5 8922 5 8923 Purpose : Exit Program with SS$_NORMAL & 8924 Output : Return to DCL 8925  8926 */ 8927 { 3 8928 void clean_ctrlc(), toggle_width(); 8929  8930 clean_ctrlc(); e 8931 if (smg$enable)  8932 { < 8933 SMG$DISABLE_BROADCAST_TRAPPING(&paste_id);: 8934 if (colls != orig_colls) toggle_width();8 8935 SMG$SET_CURSOR_ABS(&disp2_id,&2,&1); 7 8936 SMG$DELETE_PASTEBOARD(&paste_id, &0);8 8937 }c 8938 exit(1); 8939 return(1);% 8940 } /*END exit_command */l 8941 ) 8942 int spawn_command(int mask)  8943 { > 8944 /* Saves the screen and spawns a subprocess */ 8945  8946 int save_id;0 8947 $DESCRIPTOR(prompt,"DFU_sub$ "); 8948  8949 if (smg$enable)c 8950 { @ 8951 SMG$SAVE_PHYSICAL_SCREEN(&paste_id, &save_id);< 8952 SMG$DISABLE_BROADCAST_TRAPPING(&paste_id); 8953 }3B 8954 printf("%%DFU-I-SPAWN, Creating subprocess...\n");D 8955 status = lib$spawn(0,0,0,0,0,0,0,0,0,0,&prompt,0,0);Z 8956 /* Next call is a workaround for a bug in TTdriver which may inadvertently. 8957 reset the terminal width */9 8958 if (colls > 80) printf("\x1b[?3h"); ( 8959 else printf("\x1b[?3l"); 8960 if (smg$enable)G 8961 { C 8962 SMG$RESTORE_PHYSICAL_SCREEN(&paste_id, &save_id); E 8963 SMG$SET_BROADCAST_TRAPPING(&paste_id,brdcst_ast,0);E 8964 }]: 8965 if ((status & 1) !=1) singlemsg(0,status); 8966 return (1);  8967 }n 8968 $ 8969 void prev_screen(void) 8970 {r# 8971 int row_start, cnt; 8972 = 8973 SMG$GET_VIEWPORT_CHAR(&disp1_id, &row_start); $ 8974 cnt = row_start - 1; 8975 if (cnt <= 1) + 8976 SMG$RING_BELL(&disp1_id); 8977 else( 8978 if (cnt < (rows - 10)) 5DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 8V1.0 13-AUG-1996 10:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1)u 8979 { F 8980 SMG$SCROLL_VIEWPORT(&disp1_id, &SMG$M_DOWN, &cnt); 8981 }m 8982 else 8983 { & 8984 cnt = (rows - 10);F 8985 SMG$SCROLL_VIEWPORT(&disp1_id, &SMG$M_DOWN, &cnt); 8986 }s 8987 }  8988 $ 8989 void next_screen(void) 8990 {2# 8991 int row_start, cnt;, 8992 = 8993 SMG$GET_VIEWPORT_CHAR(&disp1_id, &row_start);S- 8994 cnt = 508 - rows - row_start;D 8995 if (cnt <= 1)8+ 8996 SMG$RING_BELL(&disp1_id);6 8997 else( 8998 if (cnt < (rows - 10)) 8999 { D 9000 SMG$SCROLL_VIEWPORT(&disp1_id, &SMG$M_UP, &cnt); 9001 }_ 9002 else 9003 { & 9004 cnt = (rows - 10);D 9005 SMG$SCROLL_VIEWPORT(&disp1_id, &SMG$M_UP, &cnt); 9006 }8 9007 }  9008 I 9009 int dump_actn(struct dsc$descriptor *out_str, int user_arg) 9010 { lS 9011 fprintf(xp,"%.*s\n",out_str->dsc$w_length, out_str->dsc$a_pointer);  9012 return(1); 9013 }  9014 $ 9015 void dump_screen(void)A 9016 /* Routine to dump the screen contents to a file */8 9017 { . 9018 char fname[]="DFU_SCREEN.TXT"; 9019 W 9020 xp = fopen(fname,"w","mrs=132","rfm=var","ctx=rec","rat=cr","rop=WBH");bI 9021 status = SMG$PUT_PASTEBOARD(&paste_id, dump_actn, 0 , 0);P% 9022 if ((status & 1) !=1)  9023 { T 9024 sprintf(outbuf,"%%DFU-E-DUMPERR, Error dumping screen contents,"); 9025 put_disp(); ' 9026 singlemsg(0, status);E 9027 }  9028 else 9029 { ^ 9030 sprintf(outbuf,"%%DFU-I-DUMPDONE, Screen contents saved in DFU_SCREEN.TXT"); 9031 put_disp();  9032 } 9033 fclose(xp);k 9034 }9 9035  9DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 9V1.0 13-AUG-1996 10:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1)D% 9036 void toggle_width(void)&4 9037 /* Routine to change terminal width */ 9038 {g 9039 if (colls > 80)$I 9040 SMG$CHANGE_PBD_CHARACTERISTICS(&paste_id, &80, &colls);D 9041 else fJ 9042 SMG$CHANGE_PBD_CHARACTERISTICS(&paste_id, &132, &colls); 9043 colls -=2;? 9044 SMG$CHANGE_VIRTUAL_DISPLAY(&disp1_id,0,&colls);0< 9045 SMG$CHANGE_VIEWPORT(&disp1_id,0,0,0,&colls);@ 9046 SMG$CHANGE_VIRTUAL_DISPLAY(&status_id,0,&colls);? 9047 SMG$CHANGE_VIRTUAL_DISPLAY(&disp2_id,0,&colls);1 9048 }  9049 - 9050 int dfu_check_access(int *mask)  9051 /*G 9052 Check if the user has DFU_ALLPRIV identifier granted.SI 9053 Check also for VOLPRO priv (needed for INDEXF command )U 9054 */ 9055  9056 { 6 9057 int i,j, rights_size, ret_addr, pages;# 9058 unsigned short len;_; 9059 int jpi$_rights_size , jpi$_process_rights; $ 9060 union prvdef jpiprv; 9061 struct _itm { ) 9062 short buflen, itemcode;s( 9063 int *bufadr, *retlen;  9064 }  9065 item_list[3];I 9066 struct _rt {! 9067 int rights[2];  9068 }  9069 *rights_list;_+ 9070 static char ascii_id[255]; 24 9071 $DESCRIPTOR(ascii_descr , ascii_id); 9072 Boolean found; 9073 ( 9074 jpi$_rights_size = 817; * 9075 jpi$_process_rights = 814;= 9076 *mask = 0; /*Assume identifier not granted */ ( 9077 item_list[0].buflen = 4;9 9078 item_list[0].itemcode = jpi$_rights_size;i3 9079 item_list[0].bufadr = &rights_size; ( 9080 item_list[0].retlen = 0; 9081 ( 9082 item_list[1].buflen = 0;< 9083 item_list[1].itemcode = 0; /* End of list */= 9084 status = SYS$GETJPIW(0,0,0,&item_list,0,0,0); & 9085 if ((status & 1) !=1)  9086 { & 9087 singlemsg(0,status);! 9088 return(status);8 9089 }iI 9090 /* Rightssize is returned in bytes, so rightssize/8 -1 isiM 9091 number of rights. Now allocate enough dynamic space to gete( 9092 all the rights in. */ DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 10V1.0 13-AUG-1996 10:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1)  9093 ( 9094 j = (rights_size/8) + 1;' 9095 ret_addr = malloc(j*8); 6 9096 rights_list = (struct _rt *) ret_addr; 9097 + 9098 item_list[0].buflen = j*8 ; < 9099 item_list[0].itemcode = jpi$_process_rights;; 9100 item_list[0].bufadr = (int *) rights_list; R( 9101 item_list[0].retlen = 0; 9102 5 9103 item_list[1].buflen = sizeof(jpiprv); 5 9104 item_list[1].itemcode = JPI$_CURPRIV; 6 9105 item_list[1].bufadr = (int *) &jpiprv;( 9106 item_list[1].retlen = 0; 9107 ( 9108 item_list[2].buflen = 0;< 9109 item_list[2].itemcode = 0; /* End of list */ 9110 1 9111 memset(&jpiprv,0,sizeof(jpiprv)); = 9112 status = SYS$GETJPIW(0,0,0,&item_list,0,0,0);d% 9113 if ((status & 1) !=1)r 9114 { & 9115 singlemsg(0,status);! 9116 return(status);s 9117 }c 9118 i = 1;  9119 found = FALSE; c 9120 while (!found) 9121 { Z 9122 status = SYS$IDTOASC(rights_list->rights[0], &len, &ascii_descr, 0,0,0);A 9123 status = strncmp(ascii_id, "DFU_ALLPRIV", len);;# 9124 if (status == 0)  9125 {  9126 *mask = -1;6! 9127 found = TRUE;_ 9128 }  9129 else  9130 {  9131 i++; G" 9132 rights_list++;, 9133 if (i > j) found = TRUE; 9134 }0 9135 }  9136 free(ret_addr); L 9137 if ((jpiprv.prv$v_volpro ==1 ) && (*mask == -1)) *mask = -2; 9138 return(1); 9139 }  9140 # 9141 void reset_ctrl(void) 9 9142 /* Reset CTRLC/Y on the terminal channel */o 9143  9144 {  9145 int stat, func;* 9146 struct { ' 9147 short status, count; s 9148 int extra ;p 9149 }  DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 11cV1.0 13-AUG-1996 10:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1)a 9150 iosb;1' 9151 unsigned int t_mask[2]; 9152 ( 9153 /* Disable the F6 key */Q 9154 status = SYS$QIOW(0,tchan, IO$_SETMODE,0,0,0,&ttchar,12,0,0,0,0);  9155 ctrlc = 0;Y 9156 /* Enable CTRLC/Y trapping by setting CTRL C and Y as out-of-band chars*/  9157 t_mask[0] = 0; a# 9158 t_mask[1] = 1 << 3;o( 9159 t_mask[1] += (1 << 25); K 9160 status = SYS$QIOW(0,tchan,(IO$_SETMODE+IO$M_OUTBAND),&iosb, - 9161 0,0,astrtn,&t_mask,0,0,0,0); 8 9162 }  9163  9164 int astrtn()/ 9165 /* Ast routine called by CTRLC/Y 19 9166 Set CTRLC to 1 and reset the Trapping */ 9167  9168 {  9169 ctrlc = 1;+ 9170 SMG$CANCEL_INPUT(&keyb_id);UC 9171 sprintf(outbuf," Current command ABORTING...");  9172 put_status(2); 9173 return(1); 9174 }T 9175 9176 void clean_ctrlc()) 9177 /* Cleanup CTRLC channel */  9178  9179 {  9180 struct { 8' 9181 short status, count;  9182 int extra ;n 9183 }  9184 iosb;t' 9185 unsigned int t_mask[2];  9186 U 9187 status = SYS$QIOW(0,tchan, IO$_SETMODE,0,0,0,&orgttchar,12,0,0,0,0); 9188 if (!smg$enable)M 9189 status = SYS$QIOW(0,tchan,(IO$_SETMODE+IO$M_OUTBAND),&iosb,2$ 9190 0,0,0,0,0,0,0,0);  9191 else 9192 { ! 9193 t_mask[0] = 0; && 9194 t_mask[1] = 1 << 23;M 9195 status = SYS$QIOW(0,tchan,(IO$_SETMODE+IO$M_OUTBAND),&iosb,c0 9196 0,0,refresh,&t_mask,0,0,0,0);  9197 }  9198 status = 1;& 9199 }b 9200  9201 int refresh()  9202 {H4 9203 status = SMG$CANCEL_INPUT(&keyb_id);7 9204 status = SMG$REPAINT_SCREEN(&paste_id);  9205 return(1); 9206 } 3DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 12IV1.0 13-AUG-1996 10 c~ DFU024.BCK|{[DFU024.LIS]DFU.LIS;2E7;:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1)  9207 E 9208 int strindex(char *input_string, char *symbol, int len)  9209 /*3 9210 Search for a char in input_string.8 9211 */ 9212  9213 {  9214 int i ;  9215  9216 i=0;F 9217 while ((i < len) && (input_string[i] != *symbol)) i++;+ 9218 return(i < len ) ? i : -1;  9219 }_ 9220 $ 9221 void put_status(int x)+ 9222 /* Display statistics info */  9223  9224 {t0 9225 $DESCRIPTOR(stat_descr, outbuf); 9226 if (smg$enable)  9227 { ; 9228 stat_descr.dsc$w_length = strlen(outbuf); T 9229 SMG$PUT_CHARS(&status_id, &stat_descr, &x, &2, &SMG$M_ERASE_LINE); 9230 }; 9231 }  9232 ! 9233 void put_disp(void)_- 9234 /* Put result line on screen */o 9235 {0- 9236 $DESCRIPTOR(to_disp, outbuf);  9237  9238 if (smg$enable)  9239 { 8 9240 to_disp.dsc$w_length = strlen(outbuf);O 9241 SMG$PUT_LINE(&disp1_id, &to_disp,0,0,0,&SMG$M_WRAP_CHAR,0,0);  9242 }0+ 9243 else printf("%s\n",outbuf);. 9244 }  9245 1 9246 void singlemsg(int stat1, int stat)=7 9247 /* Gets a system message and displays it. < 9248 Unlike LIB$SIGNAL it will not terminate the) 9249 program on fatal errors  9250 */ 9251 {7G 9252 int len; 0 9253 $DESCRIPTOR(mesg_desc , outbuf); 9254  9255 if (stat1 !=0) 9256 { L 9257 SYS$GETMSG(stat1,&mesg_desc.dsc$w_length, &mesg_desc,0,0);6 9258 outbuf[mesg_desc.dsc$w_length]='\0'; 9259 put_disp(); / 9260 mesg_desc.dsc$w_length = 255;  9261 }eI 9262 SYS$GETMSG(stat,&mesg_desc.dsc$w_length, &mesg_desc,0,0); 4 9263 outbuf[mesg_desc.dsc$w_length]='\0'; DFU 13-AUG-1996 10:23:40 DEC C V5.2-003 Page 13 V1.0 13-AUG-1996 10:23:37 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU.C;3 (1)  9264 put_disp(); - 9265 mesg_desc.dsc$w_length = 255;k 9266 }= 9267 F 9268 int actrtn(struct dsc$descriptor *out_str, int user_arg)A 9269 /* user action routine to catch SYS$PUTMSG errors*/  9270 { U 9271 sprintf(outbuf,"%.*s",out_str->dsc$w_length, out_str->dsc$a_pointer);8 9272 put_disp();  9273 return(0); 9274 }& 9275 2 9276 unsigned int prim_hand(signal, mech)# 9277 int signal[], mech[]; C 9278 { /* Use the signal array to pass the error to PUTMSG8L 9279 PUTMSG in turn will call ACTRTN which will use SMG output< 9280 in stead of just dumping SYS$OUTPUT/ERROR 9281 */ 9282  9283 int params;Y 9284 signal[0] -= 2;4 9285 SYS$PUTMSG(signal, actrtn,0,params);$ 9286 return SS$_CONTINUE; 9287 }  9288 ' 9289 unsigned int brdcst_ast()t3 9290 /* Displays the broadcast messages */  9291 { % 9292 static char msg[255]; # 9293 unsigned short len;i, 9294 $DESCRIPTOR(brdcst_msg,msg); 9295  9296 len = 0;B 9297 if (cip == 1) return(1); /* exit if DFU is busy */4 9298 status = SMG$CANCEL_INPUT(&keyb_id);6 9299 SMG$SET_CURSOR_ABS(&status_id,&2,&2); S 9300 status = SMG$GET_BROADCAST_MESSAGE(&paste_id, &brdcst_msg, &len,0);77 9301 SMG$BEGIN_PASTEBOARD_UPDATE(&paste_id); , 9302 while (status == SS$_NORMAL) 9303 { 2 9304 brdcst_msg.dsc$w_length = len+1;X 9305 SMG$PUT_LINE(&disp1_id, &brdcst_msg, 0, 0 ,0 ,&SMG$M_WRAP_CHAR, 0, 0);0 9306 brdcst_msg.dsc$w_length = 254;U 9307 status = SMG$GET_BROADCAST_MESSAGE(&paste_id, &brdcst_msg, &len,0);; 9308 } 5 9309 SMG$END_PASTEBOARD_UPDATE(&paste_id);  9310 return(1); 9311 }8  Command Line ------------ t/CC/DECC/EXTERN=COMMON/SHARE/WARN=NOINFO DFU/LISA &sp2_id,&2,&1*[DFU024.LIS]DFUMSG.LIS;1+,}./7@ 4-{0123KPWO56}t7}t89G7@HJ DFUMSG Message definitions 13-AUG-1996 10:30:47 VAX-11 Message V04-00 Page 1 13-SEP-1995 08:38:56 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFUMSG.MSG;7 E 1 .title DFUMSG Error messages( 2 D 00000801 3 .facility DFU,1/prefix=DFU_( 4 @ 5 .severity informational( 6 : 7 .severity warning( 8 8 9 .severity error( 10 R 0801800A 11 ASSIGN P 08018012 12 EXHFAIL P 0801801A 13 EXPREG J 08018022 14 IOERR L 0801802A 15 INDEXERR q 08018032 16 NOPRIV - 17 .endEThere were 0 errors, 0 warnings, and 0 informational messages issued.MESS/OBJ DFUMSG/LIS*[DFU024.LIS]DFU_BITMAP.LIS;2+,~.l/7@ 4ll -{0123KPWOm56}t7}t89G7@HJb DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 1jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (1) 1 /* 2 DFU V2.4 3  4 DFU_BITMAP.C 5 R 6 This file contains the bitmap and quota file scanning routines.6 7 Uses ACPQIO to process these files. 8 9 9 Called by REPORT, UNDELETE and VERIFY  10  11 */ 12 #ifndef VAXC0 13 #pragma message disable(GLOBALEXT) 14 #endif 15  16 #include fibdef 494 #include ssdef 1985 #include iodef 2960 #include libdef 3335 #include stdio 4011 #include descrip! 4987 #include "file_hdr" 5425 , 5426 typedef unsigned long Boolean; 5427 $ 5428 typedef struct _usg { 3 5429 int owner, flag, rsize, asize, hdr; 5430 }; 5431 # 5432 typedef struct _qb { 7 5433 int flags, uic_long, usage, permquota, & 5434 overdraft, unused[3];  5435 }; 5436 ( 5437 extern unsigned int ctrlc;5 5438 extern unsigned int lbnstart, lbncount;% 5439 extern Boolean trigger;& 5440 extern char outbuf[255]; 5441  5442 static struct { & 5443 unsigned short iosb_1;$ 5444 unsigned int length; 5445 short spec;  5446 }  5447 iostat; 5448 % 5449 globalvalue DFU_EXPREG; 5450  DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 2jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (2) 3 5451 int flush_cache(short chan, int flag) 5452 /*' 5453 Flush the extent cache0 5454 Assumes channel is already open 5455 */ 5456  5457 { R 5458 static struct fibdef bfib; /* File information block for bitmap */ 5459 struct {  5460 int fiblen; ) 5461 struct fibdef *fibadr;  5462 }  5463 fibdescr;- 5464 int func_code, status, bytes; 5465 , 5466 /* Fill in FIB for bitmap */ 5467 ? 5468 fibdescr.fiblen = sizeof(bfib); /* Short fib */( 5469 fibdescr.fibadr = &bfib; 5470 5 5471 bfib.fib$w_exctl = FIB$C_FLUSH_CACHE;5 5472 bfib.fib$l_exsz = FIB$C_EXTENT_CACHE; 5473 / 5474 /* Now flush the cache asynch*/ 5475 if (flag ==1) K 5476 status = SYS$QIOW(0, chan, IO$_ACPCONTROL, &iostat, 0, 0,- 5477 &fibdescr, 0, 0, 0, 0 , 0); 5478 elseJ 5479 status = SYS$QIO(0, chan, IO$_ACPCONTROL, &iostat, 0, 0,- 5480 &fibdescr, 0, 0, 0, 0 , 0); 5481 return(status); 5482 } 5483  DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 3jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (3) P 5484 int read_bitmap(short chan, int xpages, Boolean locked, int *addr) 5485  5486 /* 2 5487 Read BITMAP.SYS in dynamic space D 5488 Assumes 'chan' already opened by calling procedure  5489 */ 5490  5491 { R 5492 static struct fibdef bfib; /* File information block for bitmap */ 5493 struct {  5494 int fiblen; ) 5495 struct fibdef *fibadr;  5496 }  5497 fibdescr;- 5498 int func_code, status, bytes; 5499 , 5500 /* Fill in FIB for bitmap */ 5501 ? 5502 fibdescr.fiblen = sizeof(bfib); /* Short fib */( 5503 fibdescr.fibadr = &bfib;& 5504 bfib.fib$w_fid[0] = 2;& 5505 bfib.fib$w_fid[1] = 2;& 5506 bfib.fib$w_fid[2] = 0;& 5507 bfib.fib$w_did[0] = 0;& 5508 bfib.fib$w_did[1] = 0;& 5509 bfib.fib$w_did[2] = 0;% 5510 bfib.fib$b_wsize = 7;% 5511 if (locked == FALSE )C 5512 bfib.fib$l_acctl = FIB$M_WRITE | FIB$M_WRITETHRU 4 5513 | FIB$M_NORECORD | FIB$M_NOLOCK; 5514 else2 5515 bfib.fib$l_acctl = FIB$M_NOLOCK; 5516 M 5517 /* Open bitmap. (Channel already opened in calling procedure)K 5518 If the device is not write locked, we open it for write - 5519 to force a cache flush. */ 5520 5 5521 func_code = IO$_ACCESS | IO$M_ACCESS;X 5522 status = SYS$QIOW(0, chan, func_code, &iostat, 0,0,&fibdescr,0,0,0,0,0);> 5523 if ((status & 1) == 1) status = iostat.iosb_1;' 5524 if ((status & 1) != 1)  5525 { J 5526 sprintf(outbuf,"%%DFU-E-BITMAP, Error opening bitmap,"); 5527 put_disp();' 5528 singlemsg(0,status); # 5529 return(status);  5530 } 5531 Z 5532 /* Read in bitmap starting from VBN 2 (VBN 1 is Storage control block ) */# 5533 bytes = 512*xpages;T 5534 status = SYS$QIOW(0, chan, IO$_READVBLK, &iostat, 0,0, *addr, bytes, 5535 2,0,0,0);> 5536 if ((status & 1) == 1) status = iostat.iosb_1;& 5537 if ((status & 1) != 1) 5538 { K 5539 sprintf(outbuf,"%%DFU-E-READERR, Error reading bitmap,"); DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 4jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (3) 5540 put_disp();' 5541 singlemsg(0,status);  5542 } 5543 return(status); 5544 } 5545  DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 5jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (4) P 5546 int scan_bitmap(short chan, int pages, Boolean locked, int *free, B 5547 int *large, int *blocks, int *large_lbn, int *table) 5548 /* L 5549 Scan bitmap.sys. Count all the used and free bits to reportZ 5550 largest contiguous free space, count of fragment, largest extent and LBN.; 5551 Also create graph table. Called by REPORT. 5552 */ 5553  5554 { 5555 char size; 5556 register int i;8 5557 int status, bmap_addr[2], count, offset,2 5558 which, interval, entry, xpages ,j;F 5559 unsigned int total_blocks, total_count, lbn, savebit, 5 5560 maxlong, savelongword, largest, temp; 5561 int *ix;  5562 , 5563 /* Allocate dynamic space *// 5564 xpages = (pages + 4095) / 4096;A 5565 status = SYS$EXPREG(xpages, &bmap_addr[0], 0, 0);& 5566 if ((status & 1) != 1) 5567 { 0 5568 singlemsg(DFU_EXPREG,status); # 5569 return(status);  5570 } 5571 J 5572 status = read_bitmap(chan, xpages, locked, &bmap_addr[0]);" 5573 /* Close it now */C 5574 SYS$QIOW(0, chan, IO$_DEACCESS, 0,0,0,0,0,0,0,0,0);' 5575 if ((status & 1) != 1)  5576 { 8 5577 SYS$DELTVA(&bmap_addr, &bmap_addr, 0);# 5578 return(status);  5579 }@ 5580 /* Now we have the bitmap read in, process it */ 5581 ! 5582 total_blocks = 0; 5583 total_count = 0; 5584 lbn = 0; 5585 savebit = 0;! 5586 savelongword = 0; 5587 largest = 0; 5588 count = 0;  5589 j = 0; N 5590 maxlong = (pages + 31) / 32 ; /* Maximum longwords to scan */) 5591 interval = maxlong / 70; / 5592 if (interval ==0) interval = 1; 5593 entry = 0; ! 5594 which = interval;? 5595 ix = (int *) bmap_addr[0]; /* Start of array */ 5596 i = 0; 5597 offset = 0;V 5598 while (i < maxlong) /* Loop through the bitmap longword by longword */ 5599 { % 5600 size = 32 - offset;J 5601 if (*ix == 0) status = 0; /* This longword fully used */ DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 6jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (4)E 5602 else status = lib$ffs(&offset, &size, ix, &offset);( 5603 if ((status &1) != 1) 0 5604 { /* Adjust the graph table */$ 5605 if (i >= which)  5606 { 0 5607 entry = interval - entry; * 5608 entry = entry * 100;) 5609 which += interval;  5610 j++;R 5611 /* Take care not to cross table bounds. This can only happenI 5612 due to rounding errors on very small devices. */" 5613 if (j <=70)  5614 { 2 5615 *table = entry / interval;! 5616 table++;  5617 } 5618 entry = 0; 5619 } 5620 entry++; 5621 offset = 0;  5622 ix++; - 5623 i++; /* Next long word */ 5624 } 5625 else 5626 { # 5627 total_count++; % 5628 savelongword = i;& 5629 savebit = offset; 5630 status = 0; ( 5631 while (status != 1)  5632 { * 5633 size = 32 - offset; 0 5634 if (*ix == -1) status = 0;I 5635 else status = lib$ffc(&offset, &size, ix, &offset);X 5636 if ((status & 1) !=1) /* We still have a contiguous free extent */ 5637 { $ 5638 offset = 0;  5639 i++;  5640 ix++;6 5641 if (i >= maxlong ) status = 1; 5642 } 5643 }R 5644 /* We have a free extent , calculate the various fields now */, 5645 temp = i - savelongword; 5646 if ( i == 0)/ 5647 temp = offset - savebit;  5648 else 5649 {  5650 temp--; - 5651 savebit = 32 - savebit;= 5652 temp = temp*32 + savebit + offset;  5653 }) 5654 total_blocks += temp;( 5655 if (temp >= largest) 5656 { & 5657 largest = temp; - 5658 savebit = 32 - savebit; DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 7jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (4)6 5659 lbn = 32*savelongword + savebit; 5660 } 5661 } 5662 }. 5663 /* Report results to caller */6 5664 SYS$DELTVA(&bmap_addr, &bmap_addr, 0);$ 5665 *free = total_count;! 5666 *large = largest;' 5667 *blocks = total_blocks;" 5668 *large_lbn = lbn;  5669 return(1); 5670 }  5671  DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 8jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (5) U 5672 void new_bitmap(int *addr, struct header_area_struct *hdr, int cluster,F 5673 int curvol, FILE *fp, int pass, int *lis, Boolean *flag, 5674 Boolean matoutput) 5675 /* ? 5676 1) Disassemble retrieval pointers into LBN's? 5677 2) Build up new bitmap into the dynamic area7 5678 3) Report multiple allocated blocks.R 5679 If pass =1 the multiple allocated blocks are saved in a dynamicI 5680 linked list pointed to by *lis (and *flag is set to true).V 5681 The VERIFY_COMMAND procedure will call us a second time with pass=2L 5682 to report the multiple allocated blocks to the user. ThisM 5683 is done to ensure that all involved files will be reported 5684 */ 5685  5686 {  5687 struct _bm {! 5688 int block[128]; 5689 } M 5690 *start, *bmap; /* Pointer to a bitmap block (128 longwords */ 5691 struct _hd {- 5692 unsigned short block[256];  5693 } . 5694 *head; /* pointer to header */- 5695 struct ident_area_struct *id; 5696 struct mult { . 5697 unsigned int l_start, l_end;$ 5698 struct mult *next; 5699 } ! 5700 *m_list; % 5701 static struct _mlt { 0 5702 unsigned int lbnstart, lbnend;) 5703 unsigned short fid[3];  5704 }  5705 sort_rec;% 5706 static struct _srt { & 5707 unsigned long size ;( 5708 struct _mlt * pointer; 5709 }  5710 sor_descr;O 5711 int i, l, k, ibit, iword, iblock, lbit, lword, lblock, status, Z 5712 expon,offset,map_bytes, endj, size, lbnc1, lbne1, namelen, format, fidnum; 5713 Boolean report; 5714 char name[86]; 5715 register int j; 5716 $ 5717 sor_descr.size = 14;. 5718 sor_descr.pointer = &sort_rec;W 5719 head = (struct _hd *) hdr; /*We can now view the header as 256 words */, 5720 start = (struct _bm *) addr;" 5721 i = hdr->idoffset;D 5722 id = (struct ident_area_struct *) &(head->block[i]);? 5723 offset = hdr->mpoffset; /* Start of map area */+ 5724 map_bytes = hdr->map_inuse; 5725 lbncount = 0; 5726 report = FALSE; 5727 expon = -1; DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 9jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (5) 5728 l = 1; < 5729 if (pass ==1) m_list = (struct mult *) *lis; 5730 P 5731 /* Now disassemble retrieval pointers into LBNSTART, LBNCOUNT */7 5732 for (i = offset; i<(offset+map_bytes);) 5733 { ) 5734 disass_map_ptr(hdr,&i);$ 5735 if (lbncount !=0) ` 5736 /* Setup dynamic array. We try to set it up longword by longword ('j' loop).Z 5737 If multiple allocated blocks are discoverd we must check bit by bitA 5738 to determine the exact LBN's ('k' loop) */ 5739 { 0 5740 lbnstart = lbnstart/cluster;0 5741 lbncount = lbncount/cluster;0 5742 iblock = lbnstart/4096 + 1; N 5743 if ((lbnstart % 4096) == 0) iblock--; /* Block boundary */8 5744 /* End position of this pointer...*/3 5745 endj = lbnstart + lbncount - 1; + 5746 lblock = endj/4096 + 1;0' 5747 lbit = endj % 4096; ( 5748 lword = lbit/32 + 1;% 5749 lbit = lbit % 32;G! 5750 j = lbnstart;)% 5751 while (j <= endj)  5752 { & 5753 ibit = j % 4096;@ 5754 if (ibit == 0) iblock ++; /* Next block */* 5755 iword = ibit/32 + 1;' 5756 ibit = ibit % 32;iA 5757 if ((lword == iword) && (iblock == lblock)) / 5758 size = lbit - ibit + 1; Y 5759 else size = 32 - ibit; /*How many bits to parse in this longword */eQ 5760 /* Now check if these bits are free, if yes fill them up */M 5761 bmap = start+(iblock-1); /* Pointer to correct block */cN 5762 if (lib$extzv(&ibit, &size, &bmap->block[iword-1]) == 0)N 5763 lib$insv(&expon, &ibit, &size, &bmap->block[iword-1]);B 5764 else /* We have multiple allocated blocks */ 5765 { 7 5766 for (k = j; k <= j+size-1; k++)t 5767 { O 5768 if (lib$extzv(&ibit, &l ,&bmap->block[iword-1]) == 1)5 5769 { 0 5770 if (report == FALSE) 5771 { , 5772 report = TRUE;0 5773 lbne1 = k*cluster;: 5774 lbnc1 = lbne1 + cluster - 1; 5775 }59 5776 else lbnc1=(k+1)*cluster - 1;p 5777 }  5778 elsek 5779 /* We now have a consecutive chunk of multiple allocated blocks, report them */ / 5780 if (report == TRUE)  5781 { F 5782 report = FALSE; /* Don't report twice */R 5783 if (pass == 2) /* now report the file to the user */ 5784 {  DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 105jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (5): 5785 sort_rec.lbnstart = lbne1;8 5786 sort_rec.lbnend = lbnc1;; 5787 copy_fid(&sort_rec.fid[0], ,O 5788 &(hdr->fid_overlay.fid_fields.fid_num), FALSE); G 5789 status = sor$release_rec(&sor_descr,0);5 5790 }b: 5791 else /* Save these blocks */ 5792 { - 5793 *flag = TRUE; 8 5794 m_list->l_start = lbne1;6 5795 m_list->l_end = lbnc1;[ 5796 m_list->next = (struct mult *) malloc(sizeof(struct mult)); 6 5797 m_list = m_list->next;4 5798 *lis = (int) m_list; 5799 }  5800 }nF 5801 lib$insv(&l,&ibit,&l,&bmap->block[iword-1]);! 5802 ibit++; * 5803 } /* End k loop */ 5804 }e 5805 j+=size;& 5806 } /* End j loop */L 5807 /* Check if we still have some unreported blocks left */' 5808 if (report == TRUE)  5809 { > 5810 report = FALSE; /* Don't report twice */J 5811 if (pass == 2) /* now report the file to the user */ 5812 { 2 5813 sort_rec.lbnstart = lbne1;0 5814 sort_rec.lbnend = lbnc1;3 5815 copy_fid(&sort_rec.fid[0], 9G 5816 &(hdr->fid_overlay.fid_fields.fid_num), FALSE);5? 5817 status = sor$release_rec(&sor_descr,0);  5818 } 5819 else 5820 { % 5821 *flag = TRUE; 0 5822 m_list->l_start = lbne1;. 5823 m_list->l_end = lbnc1;S 5824 m_list->next = (struct mult *) malloc(sizeof(struct mult)); . 5825 m_list = m_list->next;, 5826 *lis = (int) m_list; 5827 }  5828 }  5829 } " 5830 } /* End i loop */ 5831 }  5832  DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 11ejV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (6) F 5833 void set_bitmap(int * addr, int cluster, int lbn_start, ) 5834 int lbn_count, Boolean mbs)  5835 /* hB 5836 Set the multiple allocated blocks in the new bitmapI 5837 They were found in new_bitmap and entered in m_lists 5838  5839 */ 5840  5841 {  5842 struct _bm {! 5843 int block[128];) 5844 } M 5845 *start, *bmap; /* Pointer to a bitmap block (128 longwords */N 5846 int i, l, k, ibit, iword, iblock, lbit, lword, lblock , expon,U 5847 offset, map_bytes, endj, size, lbnc1, lbne1, namelen, format, fidnum;R 5848 register int j;  5849 , 5850 start = (struct _bm *) addr; 5851 if (mbs)  5852 expon = -1;$ 5853 else 5854 expon = 0; 5855  5856 l = 1; u 5857 # 5858 if (lbn_count !=0)  5859 { 8 5860 lbn_count = lbn_count - lbn_start + 1;0 5861 lbn_start = lbn_start/cluster;0 5862 lbn_count = lbn_count/cluster;/ 5863 iblock = lbn_start/4096 + 1; .M 5864 if ((lbn_start % 4096) == 0) iblock--; /* Block boundary */ 6 5865 /* End position of this pointer...*/3 5866 endj = lbn_start + lbn_count - 1; ) 5867 lblock = endj/4096 + 1;% 5868 lbit = endj % 4096; & 5869 lword = lbit/32 + 1;# 5870 lbit = lbit % 32; 5871 j = lbn_start;# 5872 while (j <= endj)  5873 { $ 5874 ibit = j % 4096;> 5875 if (ibit == 0) iblock ++; /* Next block */( 5876 iword = ibit/32 + 1;% 5877 ibit = ibit % 32;e? 5878 if ((lword == iword) && (iblock == lblock))_- 5879 size = lbit - ibit + 1; W 5880 else size = 32 - ibit; /*How many bits to parse in this longword */eK 5881 bmap = start+(iblock-1); /* Pointer to correct block */ J 5882 lib$insv(&expon, &ibit, &size, &bmap->block[iword-1]); 5883 j+=size;$ 5884 } /* End j loop */ 5885 }  5886 }  5887  aDFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 12bjV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (7) X 5888 int rebuild_bitmap(struct header_area_struct *hdr, int *addr, int cluster,- 5889 int curvol, Boolean check_only)r% 5890 /* Called by UNDELETEu? 5891 1) Disassemble retrieval pointers into LBN's_1 5892 If check_only is FALSE... > 5893 2) rebuild the bitmap into the dynamic area7 5894 3) Report multiple allocated blocks.  5895 */ 5896  5897 {  5898 struct _bm {! 5899 int block[128];f 5900 } M 5901 *start, *bmap; /* Pointer to a bitmap block (128 longwords */; 5902 struct _hd {- 5903 unsigned short block[256]; * 5904 } . 5905 *head; /* pointer to header */- 5906 struct ident_area_struct *id; G 5907 int i, l, k, ibit, iword, iblock, lbit, lword, lblock, M 5908 expon, offset, map_bytes, endj, size, lbnc1, lbne1, namelen, ' 5909 format, fidnum, status; 5910 Boolean report;+ 5911 char name[86]; 5912 register int j;e 5913 W 5914 head = (struct _hd *) hdr; /*We can now view the heaQHx~ DFU024.BCK~{[DFU024.LIS]DFU_BITMAP.LIS;2lv2der as 256 words */5, 5915 start = (struct _bm *) addr;" 5916 i = hdr->idoffset;D 5917 id = (struct ident_area_struct *) &(head->block[i]);? 5918 offset = hdr->mpoffset; /* Start of map area */l+ 5919 map_bytes = hdr->map_inuse;5 5920 lbncount = 0;s 5921 report = FALSE;= 5922 expon = 0; 5923 l = 1; F0 5924 status = 1; /* Assume success */ 5925 P 5926 /* Now disassemble retrieval pointers into LBNSTART, LBNCOUNT */7 5927 for (i = offset; i<(offset+map_bytes);)  5928 { ) 5929 disass_map_ptr(hdr,&i); $ 5930 if (lbncount !=0) ` 5931 /* Setup dynamic array. We try to set it up longword by longword ('j' loop).Z 5932 If multiple allocated blocks are discoverd we must check bit by bitA 5933 to determine the exact LBN's ('k' loop) */  5934 { 0 5935 lbnstart = lbnstart/cluster;0 5936 lbncount = lbncount/cluster;0 5937 iblock = lbnstart/4096 + 1; N 5938 if ((lbnstart % 4096) == 0) iblock--; /* Block boundary */8 5939 /* End position of this pointer...*/3 5940 endj = lbnstart + lbncount - 1; + 5941 lblock = endj/4096 + 1; ' 5942 lbit = endj % 4096; ( 5943 lword = lbit/32 + 1; DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 13 jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (7)% 5944 lbit = lbit % 32;s! 5945 j = lbnstart;0% 5946 while (j <= endj)= 5947 { & 5948 ibit = j % 4096;@ 5949 if (ibit == 0) iblock ++; /* Next block */* 5950 iword = ibit/32 + 1;' 5951 ibit = ibit % 32; A 5952 if ((lword == iword) && (iblock == lblock))n/ 5953 size = lbit - ibit + 1; Y 5954 else size = 32 - ibit; /*How many bits to parse in this longword */ Q 5955 /* Now check if these bits are free, if yes fill them up */ M 5956 bmap = start+(iblock-1); /* Pointer to correct block */oN 5957 if (lib$extv(&ibit, &size, &bmap->block[iword-1]) == -1) 5958 { ) 5959 if (!check_only) 4P 5960 lib$insv(&expon, &ibit, &size, &bmap->block[iword-1]); 5961 } B 5962 else /* We have multiple allocated blocks */ 5963 { ( 5964 if (check_only)  5965 { $ 5966 i = 512 ; E 5967 j = endj + 1; /* Stop further processing */ % 5968 status = 0;I 5969 }  5970 else 5971 { % 5972 status = 0;9 5973 for (k = j; k <= j+size-1; k++)  5974 { P 5975 if (lib$extv(&ibit, &l ,&bmap->block[iword-1]) == 0) 5976 { 2 5977 if (report == FALSE) 5978 { . 5979 report = TRUE;2 5980 lbne1 = k*cluster;< 5981 lbnc1 = lbne1 + cluster - 1; 5982 } ; 5983 else lbnc1=(k+1)*cluster - 1;  5984 } 5985 elsem 5986 /* We now have a consecutive chunk of multiple allocated blocks, report them */ 1 5987 if (report == TRUE)F 5988 { H 5989 report = FALSE; /* Don't report twice */A 5990 memcpy(&name[0],id->filename,20);lY 5991 if (name[19] != ' ') memcpy(&name[20],id->filenamext,66); E 5992 namelen = strindex(&name[0]," ",86); uy 5993 sprintf(outbuf,"%%DFU-E-MULTALLOC, file %.*s blocks LBN %d through %d already allocated",a= 5994 namelen, name, lbne1, lbnc1);8+ 5995 put_disp();d 5996 } # 5997 ibit++;r, 5998 } /* End k loop */ 5999 }e 6000 }s DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 148jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (7) 6001 j+=size;& 6002 } /* End j loop */L 6003 /* Check if we still have some unreported blocks left */' 6004 if (report == TRUE)/ 6005 { > 6006 report = FALSE; /* Don't report twice */7 6007 memcpy(&name[0],id->filename,20);_O 6008 if (name[19] != ' ') memcpy(&name[20],id->filenamext,66);m; 6009 namelen = strindex(&name[0]," ",86); 0o 6010 sprintf(outbuf,"%%DFU-E-MULTALLOC, file %.*s blocks LBN %d through %d already allocated",03 6011 namelen, name, lbne1, lbnc1); ! 6012 put_disp();d 6013 }  6014 } " 6015 } /* End i loop */ 6016 return(status);  6017 }i 6018  DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 15 jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (8) S 6019 int compare_bitmap(short chan, int *addr, int pages, Boolean locked, dM 6020 int cluster, FILE *fp, Boolean rebuild, Boolean matoutput)  6021 /*T 6022 Compare the bitmap build up in new_bitmap with the real BITMAP.SYS.V 6023 The new bitmap has bits set for each used cluster, whereas BITMAP.SYSY 6024 has such bits clear. So we XOR each longword ; this should result in -1.S 6025 If not we have incorrectly marked free or allocated clusters which I 6026 we report back to the user. Modified the code to rebuild ( 6027 and rewrite the bitmap. 6028 */ 6029  6030 {  6031 struct _bm {! 6032 int block[128];  6033 } M 6034 *start, *bmap; /* Pointer to a bitmap block (128 longwords */ R 6035 int i, l, k, status, xpages, bmap_addr[2], bounds, maxblocks, chk;6 6036 int blkss, blkse, blkas, blkae, bytes; 6037 register int j;i2 6038 Boolean reports, reportc, trigger; 6039 , 6040 /* Allocate dynamic space */L 6041 sprintf(outbuf,"%%DFU-I-CHKBITMAP, Checking BITMAP.SYS..."); 6042 put_disp(); 9 6043 if (matoutput) fprintf(fp,"%s\n",outbuf);e, 6044 maxblocks = pages * cluster;/ 6045 xpages = (pages + 4095) / 4096;tA 6046 status = SYS$EXPREG(xpages, &bmap_addr[0], 0, 0);4& 6047 if ((status & 1) != 1) 6048 { 0 6049 singlemsg(DFU_EXPREG,status); # 6050 return(status); * 6051 }i 6052 6053 trigger = FALSE;J 6054 status = read_bitmap(chan, xpages, locked, &bmap_addr[0]);' 6055 if ((status & 1) != 1)  6056 { 8 6057 SYS$DELTVA(&bmap_addr, &bmap_addr, 0);E 6058 SYS$QIOW(0, chan, IO$_DEACCESS, 0,0,0,0,0,0,0,0,0);5# 6059 return(status);  6060 }9: 6061 /* Close it now if no rebuild is needed */Q 6062 if (!rebuild) SYS$QIOW(0, chan, IO$_DEACCESS, 0,0,0,0,0,0,0,0,0);i 6063 @ 6064 /* Now we have the bitmap read in, process it */- 6065 start = (struct _bm *) addr; 3 6066 bmap = (struct _bm *) bmap_addr[0];n 6067 l = 1;! 6068 reports = FALSE; 6069 reportc = FALSE;, 6070 for (i = 0; i < xpages; i++) 6071 { = 6072 bounds = (i * 4096) * cluster - 32*cluster; , 6073 for (j = 0; j <= 127; j++) 6074 {  DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 16jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (8)) 6075 bounds += 32*cluster;iL 6076 if (bounds <= maxblocks) /* Do not cross array bounds */ 6077 { G 6078 chk = ((start+i)->block[j] ^ (bmap+i)->block[j]); > 6079 if (chk != -1) /* Found some blocks...*/ 6080 { / 6081 for (k=0; k <= 31; k++)  6082 { , 6083 bounds += cluster;R 6084 if (bounds <= maxblocks) /* Do not cross array bounds */ 6085 { J 6086 chk = lib$extzv(&k, &l, &(bmap+i)->block[j]) +F 6087 lib$extzv(&k, &l, &(start+i)->block[j]);D 6088 if (chk == 2) /* Incorrectly set bits */ 6089 { 4 6090 if (reports == FALSE) 6091 { / 6092 reports = TRUE; J 6093 blkss = ((i * 4096) + j*32 + k) * cluster;< 6094 blkse = blkss + cluster - 1; 6095 }:# 6096 else R 6097 blkse = ((i * 4096) + j*32 + k + 1) * cluster - 1; 6098 } : 6099 else /* Report these blocks */ 6100 { 2 6101 if (reports == TRUE) 6102 { 1 6103 reports = FALSE; / 6104 trigger = TRUE;/t 6105 sprintf(outbuf,"%%DFU-E-ALLOCSET, blocks LBN %d through %d incorrectly marked free",. 6106 blkss, blkse);, 6107 put_disp(); I 6108 if (matoutput) fprintf(fp,"%s\n",outbuf);o- 6109 if (rebuild) U 6110 set_bitmap((int *) bmap,cluster,blkss,blkse,FALSE); 6111 } 6112 }F 6113 if (chk == 0) /* Incorrectly clear bits */ 6114 { 4 6115 if (reportc == FALSE) 6116 { / 6117 reportc = TRUE;lJ 6118 blkas = ((i * 4096) + j*32 + k) * cluster;< 6119 blkae = blkas + cluster - 1; 6120 } # 6121 else cR 6122 blkae = ((i * 4096) + j*32 + k + 1) * cluster - 1; 6123 } : 6124 else /* Report these blocks */ 6125 { 2 6126 if (reportc == TRUE) 6127 { 1 6128 reportc = FALSE; / 6129 trigger = TRUE;cy 6130 sprintf(outbuf,"%%DFU-E-ALLOCCLR, blocks LBN %d through %d incorrectly marked allocated",E. 6131 blkas, blkae); ;DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 17 jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (8), 6132 put_disp(); I 6133 if (matoutput) fprintf(fp,"%s\n",outbuf); - 6134 if (rebuild) U 6135 set_bitmap( (int *) bmap,cluster,blkas,blkae,TRUE);a 6136 }  6137 }  6138 } * 6139 } /* end k loop */ 6140 }n 6141 } $ 6142 } /* end j loop */" 6143 } /* end i loop */= 6144 /* Check if we have unreported blocks left */e$ 6145 if (reports == TRUE) 6146 { $ 6147 reports == FALSE; ! 6148 trigger = TRUE; f 6149 sprintf(outbuf,"%%DFU-E-ALLOCSET, blocks LBN %d through %d incorrectly marked free", 6150 blkss, blkse); 6151 put_disp(); ; 6152 if (matoutput) fprintf(fp,"%s\n",outbuf);b 6153 if (rebuild) ,G 6154 set_bitmap((int *) bmap,cluster,blkss,blkse,FALSE);o 6155 }4$ 6156 if (reportc == TRUE) 6157 { $ 6158 reportc == FALSE; ! 6159 trigger = TRUE; k 6160 sprintf(outbuf,"%%DFU-E-ALLOCCLR, blocks LBN %d through %d incorrectly marked allocated",; 6161 blkas, blkae); 6162 put_disp(); ; 6163 if (matoutput) fprintf(fp,"%s\n",outbuf);r 6164 if (rebuild) rF 6165 set_bitmap((int *) bmap,cluster,blkas,blkae,TRUE); 6166 }  6167 + 6168 if ((rebuild) && (trigger))a. 6169 { /* Now rewrite the bitmap */% 6170 bytes = 512*xpages;tX 6171 status = SYS$QIOW(0, chan, IO$_WRITEVBLK, &iostat, 0,0, bmap_addr[0], ! 6172 bytes,2,0,0,0); @ 6173 if ((status & 1) == 1) status = iostat.iosb_1;( 6174 if ((status & 1) != 1) 6175 { S 6176 sprintf(outbuf,"%%DFU-E-RBDBMAP, Error rewriting BITMAP.SYS,");  6177 put_disp(); ( 6178 singlemsg(0,status); 6179 }  6180 else 6181 { X 6182 sprintf(outbuf,"%%DFU-S-RBDBITMAP, BITMAP.SYS succesfully rebuild"); 6183 put_disp(); = 6184 if (matoutput) fprintf(fp,"%s\n",outbuf);w 6185 }n 6186 }P 6187 if (rebuild) SYS$QIOW(0, chan, IO$_DEACCESS, 0,0,0,0,0,0,0,0,0); 6188  $DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 18 jV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (8)6 6189 SYS$DELTVA(&bmap_addr, &bmap_addr, 0); 6190 return(1); 6191 }  6192  DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 19djV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (9) ] 6193 void add_usage(struct _usg *table, int owner, int r_size, int a_size, int hdrs)s 6194 /* E 6195 Build a disk usage table based on identifiers/uic's.  6196 */ 6197  6198 { ) 6199 struct _usg *usage_table;5 6200 int i,j;  6201 Boolean found; 6202  6203 found = FALSE; 6204 i = 1;$ 6205 usage_table = table; 6206 while (!found) 6207 { - 6208 if (usage_table->flag == 0)  6209 { * 6210 usage_table->flag = 1;! 6211 found = TRUE; + 6212 usage_table->rsize = 0;r+ 6213 usage_table->asize = 0;m) 6214 usage_table->hdr = 0;,/ 6215 usage_table->owner = owner;1 6216 }e 6217 else h5 6218 if (usage_table->owner == owner) # 6219 found = TRUE;t 6220 else# 6221 if (i < 750) 1 6222 {  6223 i++; & 6224 usage_table++; 6225 }t 6226 else % 6227 found = TRUE;a 6228 }) 6229 usage_table->hdr += hdrs;5- 6230 usage_table->asize += a_size; - 6231 usage_table->rsize += r_size; 6232 }  6233  DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 20/kV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (10)p E 6234 void add_quota(short chan, int uic, int hdrs, int size)a 6235 /* 8 6236 Add the diskquota for an undeleted file 6237 */ 6238  6239 { V 6240 static struct fibdef qfib; /* File information block for quota file */) 6241 static struct _qb qblock;  6242 struct { ; 6243 int fiblen; ) 6244 struct fibdef *fibadr; o 6245 }  6246 fibdescr;f 6247 struct { b 6248 int qlen; $ 6249 struct _qb *qadr;  6250 }  6251 qb_descr;l 6252 int len, status;! 6253 Boolean matquota;  6254 6255 matquota = TRUE;0 6256 /* Fill in FIB for quota file */ 6257 ? 6258 fibdescr.fiblen = sizeof(qfib); /* Short fib */ ( 6259 fibdescr.fibadr = &qfib; 6260 len = 32; 3 6261 qfib.fib$w_exctl = FIB$C_EXA_QUOTA;:$ 6262 qfib.fib$l_exsz = 0;/ 6263 qb_descr.qlen = sizeof(qblock); ( 6264 qb_descr.qadr = &qblock;& 6265 qblock.uic_long = uic; 6266 / 6267 /* Check if quota is enabled */bI 6268 status = SYS$QIOW(0, chan, IO$_ACPCONTROL, &iostat, 0, 0, > 6269 &fibdescr, &qb_descr, &len, &qb_descr, 0 , 0);6 6270 if ((status &1) !=1) matquota = FALSE;D 6271 if (iostat.iosb_1 == SS$_QFNOTACT) matquota = FALSE; 6272  6273 if (matquota)n 6274 { 5 6275 qfib.fib$w_exctl = FIB$C_MOD_QUOTA;e2 6276 qfib.fib$l_exsz = FIB$M_MOD_USE;L 6277 sprintf(outbuf,"%%DFU-I-ADDQUOTA, updating diskquota..."); 6278 put_disp();p0 6279 qblock.usage += (hdrs + size);K 6280 status = SYS$QIOW(0, chan, IO$_ACPCONTROL, &iostat, 0, 0,$@ 6281 &fibdescr, &qb_descr, &len, &qb_descr, 0 , 0); 6282 }  6283 }e 6284  eDFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 21 kV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (11)  J 6285 void report_usage(struct _usg *table, short chan, FILE *fp, 2 6286 Boolean matoutput, unsigned int uic) 6287 /* 8 6288 Report the disk usage (and quota usage)8 6289 V2.4 : if uic !=0 report only this uic 6290 */ 6291  6292 { ) 6293 struct _usg *usage_table; , 6294 int i, status, outlen, len; ! 6295 Boolean matquota; & 6296 static char ident[30];V 6297 static struct fibdef qfib; /* File information block for quota file */) 6298 static struct _qb qblock;  6299 struct {  6300 int fiblen; ) 6301 struct fibdef *fibadr;  6302 }  6303 fibdescr;  6304 struct { c 6305 int qlen; $ 6306 struct _qb *qadr;  6307 }  6308 qb_descr;. 6309 $DESCRIPTOR(id_descr , ident);0 6310 $DESCRIPTOR(out_descr , outbuf);* 6311 $DESCRIPTOR(ctrstr,"!%I");M 6312 $DESCRIPTOR(ctrstr2,"!30AS!9UL/!9!6UL !9UL/!9");!> 6313 $DESCRIPTOR(ctrstr3,"!30AS!9UL/!9!6UL"); 6314 0 6315 /* Fill in FIB for quota file */ 6316 ? 6317 fibdescr.fiblen = sizeof(qfib); /* Short fib */r( 6318 fibdescr.fibadr = &qfib;3 6319 qfib.fib$w_exctl = FIB$C_EXA_QUOTA;5$ 6320 qfib.fib$l_exsz = 0;/ 6321 qb_descr.qlen = sizeof(qblock); ( 6322 qb_descr.qadr = &qblock; 6323 len = 0;" 6324 qblock.uic_long=0; 6325 matquota = TRUE; 6326 / 6327 /* Check if quota is enabled */1I 6328 status = SYS$QIOW(0, chan, IO$_ACPCONTROL, &iostat, 0, 0, > 6329 &fibdescr, &qb_descr, &len, &qb_descr, 0 , 0);6 6330 if ((status &1) !=1) matquota = FALSE;D 6331 if (iostat.iosb_1 == SS$_QFNOTACT) matquota = FALSE; 6332  6333 outlen = 0;s# 6334 if(matquota==TRUE) o 6335 { ! 6336 sprintf(outbuf, [ 6337 "\n ***** Disk Usage Table (from INDEXF.SYS and QUOTA.SYS) *****"); a 6338 put_disp(); ; 6339 if (matoutput) fprintf(fp,"%s\n",outbuf);6q 6340 sprintf(outbuf," Identifier/UIC Used/Allocated Headers Quota Used/Perm");, lDFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 22_kV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (11)e 6341 put_disp(); ; 6342 if (matoutput) fprintf(fp,"%s\n",outbuf);  6343 }  6344 else 6345 { ] 6346 sprintf(outbuf,"\n ***** Disk Usage Table (from INDEXF.SYS) *****");3 6347 put_disp(); ; 6348 if (matoutput) fprintf(fp,"%s\n",outbuf);s_ 6349 sprintf(outbuf," Identifier/UIC Used/Allocated Headers");l 6350 put_disp(); ; 6351 if (matoutput) fprintf(fp,"%s\n",outbuf);  6352 }to 6353 sprintf(outbuf," ---------------------------------------------------------------------------");6 6354 put_disp(); 9 6355 if (matoutput) fprintf(fp,"%s\n",outbuf); 6356 i = 1;$ 6357 usage_table = table;= 6358 while ((i < 750) && (usage_table->flag == 1))u 6359 { A 6360 if ((uic == 0 ) || (uic == usage_table->owner))  6361 { P 6362 status = SYS$FAO(&ctrstr, &id_descr.dsc$w_length, &id_descr,( 6363 usage_table->owner);> 6364 if ((status &1) != 1) singlemsg(0,status);D 6365 if (matquota == TRUE) /* Get the actual quota */ 6366 { ; 6367 qblock.uic_long = usage_table->owner;eO 6368 status = SYS$QIOW(0, chan, IO$_ACPCONTROL, &iostat, 0, 0, D 6369 &fibdescr, &qb_descr, &len, &qb_descr, 0 , 0);R 6370 if (((status &1) !=1) || (iostat.iosb_1 == SS$_NODISKQUOTA)) 6371 { ) 6372 qblock.usage = 0; - 6373 qblock.permquota = 0;  6374 }0P 6375 status = SYS$FAO(&ctrstr2, &outlen, &out_descr, &id_descr,O 6376 usage_table->rsize, usage_table->asize, usage_table->hdr,g6 6377 qblock.usage, qblock.permquota);@ 6378 if ((status &1) != 1) singlemsg(0,status); 6379 }  6380 else 6381 { mP 6382 status = SYS$FAO(&ctrstr3, &outlen, &out_descr, &id_descr,P 6383 usage_table->rsize, usage_table->asize, usage_table->hdr);@ 6384 if ((status &1) != 1) singlemsg(0,status); 6385 } E 6386 if (matoutput) fprintf(fp,"%*s\n",outlen,outbuf);6* 6387 outbuf[outlen] = '\0'; 6388 put_disp();)/ 6389 id_descr.dsc$w_length = 30;e 6390 }p 6391 i++; 6392 usage_table++; 6393 }m 6394 }* 6395  6DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 23+kV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (12)  U 6396 void check_usage(struct _usg *table, short chan, FILE *fp, Boolean reb, 6397 Boolean matoutput) 6398 /* @ 6399 Compare the usage calculated in the usage table1 6400 with the diskquota (if enabled).IL 6401 Report mismatches, and repair them if rebuild is requested.1 6402 This routine is called by VERIFYu 6403 */ 6404  6405 { ) 6406 struct _usg *usage_table;o$ 6407 int i, status, len; ' 6408 unsigned int exp_quota; 4 6409 Boolean matquota, trigger, reb_done;& 6410 static char ident[30];V 6411 static struct fibdef qfib; /* File information block for quota file */ 6412 struct { s 6413 int fiblen; ) 6414 struct fibdef *fibadr;  6415 }  6416 fibdescr;) 6417 static struct _qb qblock;  6418 struct {  6419 int qlen; $ 6420 struct _qb *qadr;  6421 }  6422 qb_descr; . 6423 $DESCRIPTOR(id_descr , ident);* 6424 $DESCRIPTOR(ctrstr,"!%I"); 6425 0 6426 /* Fill in FIB for quota file */ 6427 ? 6428 fibdescr.fiblen = sizeof(qfib); /* Short fib */ ( 6429 fibdescr.fibadr = &qfib;3 6430 qfib.fib$w_exctl = FIB$C_EXA_QUOTA;6$ 6431 qfib.fib$l_exsz = 0;/ 6432 qb_descr.qlen = sizeof(qblock); ( 6433 qb_descr.qadr = &qblock;" 6434 qblock.uic_long=0; 6435 matquota = TRUE; 6436 i = 1; 6437 len = 32;T/ 6438 /* Check if quota is enabled */ I 6439 status = SYS$QIOW(0, chan, IO$_ACPCONTROL, &iostat, 0, 0,r> 6440 &fibdescr, &qb_descr, &len, &qb_descr, 0 , 0);6 6441 if ((status &1) !=1) matquota = FALSE;D 6442 if (iostat.iosb_1 == SS$_QFNOTACT) matquota = FALSE;! 6443 reb_done = FALSE; # 6444 if(matquota==TRUE) ( 6445 { & 6446 usage_table = table;L 6447 sprintf(outbuf,"%%DFU-I-CHKQUOTA, Checking QUOTA.SYS..."); 6448 put_disp(); ; 6449 if (matoutput) fprintf(fp,"%s\n",outbuf); P 6450 while ((i < 750) && (usage_table->flag == 1) && (ctrlc != 1) ) 6451 {  DFU_BITMAP 13-AUG-1996 10:16:10 DEC C V5.2-003 Page 24 kV1.0 13-AUG-1996 10:15:41 DFU_BITMAP.C;2 (12) $ 6452 trigger = FALSE;9 6453 qblock.uic_long = usage_table->owner; M 6454 status = SYS$QIOW(0, chan, IO$_ACPCONTROL, &iostat, 0, 0, B 6455 &fibdescr, &qb_descr, &len, &qb_descr, 0 , 0);P 6456 if (((status &1) !=1) || (iostat.iosb_1 == SS$_NODISKQUOTA)) 6457 { ' 6458 qblock.usage = 0; + 6459 qblock.permquota = 0;t 6460 } ( 6461 else trigger = TRUE;F 6462 exp_quota = usage_table->asize + usage_table->hdr;2 6463 if (exp_quota != qblock.usage) 6464 { I 6465 SYS$FAO(&ctrstr, &id_descr.dsc$w_length, &id_descr, * 6466 usage_table->owner);k 6467 sprintf(outbuf,"%%DFU-W-QUOTAERR, %.*s has %d blocks used, QUOTA indicates %d blocks"GP 6468 ,id_descr.dsc$w_length, ident, exp_quota, qblock.usage);" 6469 put_disp(); ? 6470 if (matoutput) fprintf(fp,"%s\n",outbuf); 1 6471 id_descr.dsc$w_length = 30; ] 6472 if ((reb) && (trigger)) /* rebuild if there was an entry for this UIC*/ 6473 { ; 6474 qfib.fib$w_exctl = FIB$C_MOD_QUOTA; 8 6475 qfib.fib$l_exsz = FIB$M_MOD_USE;1 6476 qblock.usage = exp_quota;4Q 6477 status = SYS$QIOW(0, chan, IO$_ACPCONTROL, &iostat, 0, 0,kF 6478 &fibdescr, &qb_descr, &len, &qb_descr, 0 , 0);( 6479 reb_done = TRUE;; 6480 qfib.fib$w_exctl = FIB$C_EXA_QUOTA;f, 6481 qfib.fib$l_exsz = 0; 6482 } 6483 }, 6484 i++; " 6485 usage_table++; 6486 }, 6487 }6( 6488 if ((reb) && (reb_done)) 6489 { T 6490 sprintf(outbuf,"%%DFU-S-REBQUOTA, QUOTA.SYS succesfully rebuild"); 6491 put_disp(); ; 6492 if (matoutput) fprintf(fp,"%s\n",outbuf);r 6493 }6 6494 }i u f Command Line ------------ %6CC/DECC/EXTERN=COMMON/SHARE/WARN=NOINFO DFU_BITMAP/LIS blkas, blkae); 6162 put_disp(); ; 6163 if (matoutput) fprintf(fp,"%s\n",outbuf);r 6164 if (rebuild) rF 6165 set_bitmap((int *) bmap,cluster,blkas,blkae,TRUE); 6166 }  6167 + 6168 if ((rebuild) && (trig*[DFU024.LIS]DFU_FILEDIR.LIS;4+,./7@ 46 -{0123KPWO56}t7}t89G7@HJ DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 1kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (1) 1 /* 2 DFU V2.4 3 4 DFU_FILEDIR.C 5 O 6 This file contains the file and directory scanning routines. 7 ? 8 Called by SET , DELETE, DEFRAG and DIRECTORY 9  10 */ 11  12 #ifndef VAXC/ 13 #pragma message disable(ALIGNEXT)0 14 #pragma message disable(GLOBALEXT)1 15 #pragma message disable(INCOMPARRY)2 16 #pragma message disable(PTRMISMATCH) 17 #endif 18  19 #include ssdef 1510 #include atrdef 1706 #include libdef 2081 #include stdio 2757 #include descrip 3733 #iͪR~ DFU024.BCK{[DFU024.LIS]DFU_FILEDIR.LIS;4<|nclude climsgdef 4079 #include syidef 4591 #include rms 8696 #include fibdef! 9174 #include "file_hdr" 9612 #include iodef#10587 #include sor$routines10740 #include smgdef11579 #include trmdef#11753 #ifndef IO$M_MOVEFILE(11754 X #define IO$M_MOVEFILE 409611755 X #endif11756 ,11757 typedef unsigned long Boolean;11758 #11759 typedef struct _d_e {011760 unsigned short size, versionlim;411761 unsigned char flags, count, name[]; 11762 };#11763 typedef struct _f_e {911764 unsigned short version, fid_num, fid_seq;011765 unsigned char fid_rvn, fid_nmx; 11766 };11767 +11768 /* Structure for work list */$11769 typedef struct work { 011770 unsigned short fid_num, fid_seq;/11771 unsigned char fid_rvn, fid_nmx;011772 unsigned short did_num, did_seq;011773 unsigned char did_rvn, did_nmx; 11774 char name[86]; 11775 char function; DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 2kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (1)11776 short rvn; #11777 struct work *next; 11778 };11779 /11780 extern struct work *list, *first;E11781 extern unsigned int ctrlc, paste_id, keyb_id, disp1_id;111782 extern Boolean trigger, smg$enable;&11783 extern char outbuf[255];11784 &11785 /* Share memory space *//11786 extern _align(PAGE) struct _hdr { 11787 char block[512];11788 } 11789 header[1001];11790 P11791 static unsigned int status, version, alloc, ratio, truncsize, lbn;P11792 static Boolean matalias, matcheck, matversion, matdump, matformat,I11793 mattruncate, mattest, matempty, matrepair, matlbn, matkeep;11794 static FILE *fp;11795 static struct {'11796 unsigned short iosb_1; %11797 unsigned int length; 11798 short spec; 11799 } 11800 iostat;11801 (11802 static char f_string[255];-11803 $DESCRIPTOR(ctrstr1, f_string);11804 011805 /* Keep list for directory tree */11806 struct keep { /11807 unsigned short f_id[3],d_id[3];#11808 char filename[255];#11809 struct keep *next; 11810 } 11811 *k_first, *k_list;11812 111813 globalvalue DFU_ASSIGN, DFU_NOPRIV;11814 !11815 int display_stat();11816  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 3kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (2) #11817 int set_command(mask)11818 /* 111819 Set any file attribute you like!11820 */11821 11822 { 11823 struct FAB fab;11824 struct NAM nam; 11825 struct XAB *xab;)11826 static struct fibdef fib;11827 struct {11828 int fiblen; (11829 struct fibdef *fibadr;11830 } 11831 fibdescr;%11832 static struct _quad {'11833 unsigned int date[2];11834 } +11835 bakdate, expdate, credate, D11836 revdate, r_bakdate, r_expdate, r_credate, r_revdate;%11837 static struct _four {)11838 unsigned short date[4];11839 } 11840 ascdates;D11841 static char res_str[255], exp_str[255], devnam[15], +11842 new_name[86], old_name[86],Q11843 fname[255], lname[255], xname[255], dummy[80], ans[4], ident[30];R11844 unsigned int func, x, bad, dir, lock, log, cont, rvcount, uic, i, K11845 bucksize, vfcsize, maxrec, eblock, ebyte, hiblk, modifiers;<11846 unsigned short chan, rtype,fileorg, recsize;611847 static unsigned long uchar , old_uic ;11848 static struct {/11849 unsigned char rtype, rattrib;'11850 unsigned short rsize;,11851 unsigned int hiblk, efblk;(11852 unsigned short ffbyte;111853 unsigned char bktsize, vfcsize;I11854 unsigned short maxrec, defext, gbc, fill[4], versions; 11855 } 11856 attrib;\11857 Boolean matfile, matbadacl, matdir, matupdate, matlock, matcont, matbakdate,S11858 matexpdate, matcredate, matrevdate, matlog, matrvcount, matrecsize,O11859 matfortran,matimplied,matprint,matnospan, matnone, matbucksize,U11860 matvfcsize, matmaxrec, matfixed, matvar, matvfc, matundef, matstream,P11861 matstreamlf, matstreamcr, matdirect, matindex, matrelat, matseq,A11862 matebyte, mateblock, matconfirm, matuic, matname; 11863 static struct { 411864 unsigned short atr_size, atr_type;#11865 int atr_address; 11866 } 11867 acb[10] = { 11868 {:11869 32, ATR$C_RECATTR, (int) &attrib }11870 , 11871 { <11872 8, ATR$C_ASCDATES, (int) &ascdates } DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 4kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (2)11873 ,11874 { ;11875 8, ATR$C_CREDATE, (int) &credate } 11876 , 11877 { ;11878 8, ATR$C_REVDATE, (int) &revdate } 11879 , 11880 { ;11881 8, ATR$C_BAKDATE, (int) &bakdate } 11882 , 11883 { ;11884 8, ATR$C_EXPDATE, (int) &expdate } 11885 , 11886 { =11887 86, ATR$C_ASCNAME, (int) &old_name } 11888 , 11889 { 711890 4, ATR$C_UIC, (int) &old_uic } 11891 ,11892 { 711893 4, ATR$C_UCHAR, (int) &uchar } 11894 , { "11895 0, 0, 0 } 11896 };11897 FILE *ip;311898 $DESCRIPTOR(devnam_descr , devnam);111899 $DESCRIPTOR(xname_descr , xname);111900 $DESCRIPTOR(lname_descr , lname);111901 $DESCRIPTOR(dummy_descr , dummy);*11902 $DESCRIPTOR(answer , ans);611903 $DESCRIPTOR(new_name_descr, new_name);-11904 $DESCRIPTOR(id_descr, ident);+11905 $DESCRIPTOR(prompt,outbuf); 11906 11907 status = 1; :11908 modifiers = SMG$M_NORECALL | SMG$M_NOKEEP;%11909 /* Check file name */ I11910 status = parse_item("p1", &xname_descr, 0 , &matfile, 0);1&11911 if (matfile == FALSE) 11912 { Y11913 sprintf(outbuf,"%%DFU-E-NOFILSPEC, No file specified on command line");e11914 put_disp(); )11915 return(SS$_NOSUCHFILE); 11916 } 11917 *11918 /* Get all the attributes */Q11919 status = parse_item("new_name", &new_name_descr, 0, &matname, 0);sQ11920 status = parse_item("confirm", &dummy_descr, 0 , &matconfirm, 2); O11921 status = parse_item("update", &dummy_descr, 0 , &matupdate, 2);T]11922 status = parse_item("contiguous_best_try", &dummy_descr, &cont, &matcont, 7);iP11923 status = parse_item("locked", &dummy_descr, &lock, &matlock, 7);Q11924 status = parse_item("badacl", &dummy_descr, &bad, &matbadacl, 7);eQ11925 status = parse_item("directory", &dummy_descr, &dir, &matdir, 7); 11926 log = 0;K11927 status = parse_item("log", &dummy_descr, &log, &matlog, 7); A11928 status = parse_item("backup_date", &dummy_descr, n,11929 &r_bakdate, &matbakdate, 4); VDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 5kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (2)tC11930 status = parse_item("creation_date", &dummy_descr, 6,11931 &r_credate, &matcredate, 4);E11932 status = parse_item("expiration_date", &dummy_descr, ,11933 &r_expdate, &matexpdate, 4);C11934 status = parse_item("revision_date", &dummy_descr, ,11935 &r_revdate, &matrevdate, 4);#11936 ebyte = eblock = 0;nQ11937 status = parse_item("ebyte", &dummy_descr, &ebyte, &matebyte, 1);aT11938 status = parse_item("eblock", &dummy_descr, &eblock, &mateblock, 1);W11939 status = parse_item("rvcount", &dummy_descr, &rvcount, &matrvcount, 1);9W11940 status = parse_item("recsize", &dummy_descr, &recsize, &matrecsize, 1); \11941 status = parse_item("bucketsize", &dummy_descr, &bucksize, &matbucksize, 1);W11942 status = parse_item("vfcsize", &dummy_descr, &vfcsize, &matvfcsize, 1); T11943 status = parse_item("maxrec", &dummy_descr, &maxrec, &matmaxrec, 1);Q11944 status = parse_item("fortran", &dummy_descr, 0 , &matfortran, 2); Q11945 status = parse_item("implied", &dummy_descr, 0 , &matimplied, 2); M11946 status = parse_item("print", &dummy_descr, 0 , &matprint, 2);kK11947 status = parse_item("none", &dummy_descr, 0 , &matnone, 2); O11948 status = parse_item("nospan", &dummy_descr, 0 , &matnospan, 2); M11949 status = parse_item("fixed", &dummy_descr, 0 , &matfixed, 2);9N11950 status = parse_item("variable", &dummy_descr, 0 , &matvar, 2);I11951 status = parse_item("vfc", &dummy_descr, 0 , &matvfc, 2);iQ11952 status = parse_item("undefined", &dummy_descr, 0 , &matundef, 2); O11953 status = parse_item("stream", &dummy_descr, 0 , &matstream, 2);tS11954 status = parse_item("streamlf", &dummy_descr, 0 , &matstreamlf, 2); S11955 status = parse_item("streamcr", &dummy_descr, 0 , &matstreamcr, 2);1O11956 status = parse_item("direct", &dummy_descr, 0 , &matdirect, 2);]O11957 status = parse_item("indexed", &dummy_descr, 0 , &matindex, 2);tP11958 status = parse_item("relative", &dummy_descr, 0 , &matrelat, 2);P11959 status = parse_item("sequential", &dummy_descr, 0 , &matseq, 2);"11960 /* Ident or UIC */M11961 status = parse_item("ident", &dummy_descr, &uic, &matuic, 6);e%11962 if (matuic == FALSE) M11963 status = parse_item("uic", &dummy_descr, &uic, &matuic, 6); &11964 if ((status &1 ) != 1)11965 { L11966 sprintf(outbuf,"%%DFU-E-INVID, Wrong uic or identifier,");11967 put_disp(); &11968 singlemsg(0,status);"11969 return(status); 11970 }X+11971 id_descr.dsc$w_length = 30;f11972 11973 ip = 0; O11974 while((matfile) && (ctrlc ==0))/* Loop through the file list */ 11975 { 011976 x = strindex(&xname," ",255); "11977 xname[x] = '\0';&11978 if (xname[0] == '@')11979 { !11980 if (ip == 0) ,11981 { 011982 ip = fopen(&xname[1],"r");"11983 if (ip == 0)11984 { [11985 sprintf(outbuf,"%%DFU-E-OPENERR, Error opening file %s",&xname[1]);5$11986 put_disp();  eDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 6kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (2)e'11987 goto next_name;n11988 }f11989 } 711990 status = (int) fgets(fname,255,ip); #11991 if (status !=0) 11992 { 411993 x = strindex(&fname," ",255); &11994 fname[x] = '\0';11995 } 11996 else11997 { "11998 fclose(ip); 11999 ip = 0; %12000 goto next_name;512001 } 12002 }5+12003 else strcpy(fname,xname);r12004 012005 fibdescr.fiblen = sizeof(fib);)12006 fibdescr.fibadr = &fib;c12007 212008 /* fill in FAB and NAM blocks */12009 #12010 fab = cc$rms_fab;v212011 fab.fab$l_fna = (char *) &fname;012012 fab.fab$b_fns = strlen(fname);'12013 fab.fab$l_nam = &nam;t12014 #12015 nam = cc$rms_nam;,/12016 nam.nam$b_rss = NAM$C_MAXRSS; 412017 nam.nam$l_rsa = (char *) &res_str;/12018 nam.nam$b_ess = NAM$C_MAXRSS; 412019 nam.nam$l_esa = (char *) &exp_str;12020 612021 /* get the rest of the fab fields */12022 312023 status = SYS$PARSE(&fab , 0 , 0);R*12024 if ((status & 1 ) != 1) 12025 { V12026 sprintf(outbuf,"%%DFU-E-PARSEERR, Error parsing filename from %s," 12027 , fname); 12028 put_disp(); )12029 singlemsg(0,status); I'12030 status = RMS$_NMF; 1"12031 goto next_set;12032 } 12033 /12034 /* now search for the file */ 12035 412036 status = SYS$SEARCH(&fab , 0 , 0);,12037 while (status != RMS$_NMF)12038 { 212039 res_str[nam.nam$b_rsl] = '\0';,12040 if ((status & 1 ) != 1) 12041 { R12042 sprintf(outbuf,"%%DFU-E-SEARCHERR, Error searching file %s,"$12043 , res_str);  1DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 7kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (2) !12044 put_disp();;+12045 singlemsg(0,status); )12046 status = RMS$_NMF; $12047 goto next_set;12048 } 212049 res_str[nam.nam$b_rsl] = '\0';12050 612051 /* Open a channel to the device */A12052 devnam_descr.dsc$w_length = nam.nam$t_dvi[0];0512053 strcpy(devnam,&nam.nam$t_dvi[1]); E12054 status = SYS$ASSIGN(&devnam_descr, &chan, 0 , 0);s,12055 if ((status & 1 ) != 1) 12056 { 412057 singlemsg(DFU_ASSIGN,status); %12058 return(status); 12059 }112060 P12061 /* Now fill in File id and function code for the ACP call */912062 fib.fib$w_fid[0] = nam.nam$w_fid_num; 912063 fib.fib$w_fid[1] = nam.nam$w_fid_seq;L912064 fib.fib$w_fid[2] = nam.nam$w_fid_rvn;G"12065 if (matupdate)(12066 fib.fib$l_acctl = U12067 FIB$M_WRITE | FIB$M_WRITETHRU | FIB$M_NOWRITE | FIB$M_NOREAD;e12068 else(12069 fib.fib$l_acctl = V12070 FIB$M_WRITE | FIB$M_WRITETHRU | FIB$M_NOWRITE | FIB$M_NOREAD |(12071 FIB$M_NORECORD; @12072 if (matuic) fib.fib$l_acctl |= FIB$M_NOLOCK;412073 func = IO$_ACCESS | IO$M_ACCESS;B12074 status = SYS$QIOW(0, chan, func, &iostat, 0,0,112075 &fibdescr, 0 ,0 ,0 , acb, 0);iB12076 if ((status & 1) == 1) status = iostat.iosb_1;+12077 if ((status & 1) != 1) g12078 { Z12079 sprintf(outbuf,"%%DFU-E-OPENERR, Error accesing file %s,", res_str);"12080 put_disp(); +12081 singlemsg(0,status); 1"12082 status = 1; $12083 goto next_set;12084 } 12085 -12086 /* Confirm this file ? */;!12087 ans[0] = 'y';p"12088 if(matconfirm)12089 { ?12090 sprintf(outbuf,"Modify %s ? : ",res_str);($12091 ans[0] = 'n'; 12092 x = 4;;12093 prompt.dsc$w_length = strlen(outbuf);a&12094 if (smg$enable) M12095 status = SMG$READ_COMPOSED_LINE(&keyb_id, 0, &answer, H12096 &prompt , &x, &disp1_id, &modifiers, 0,0,0,0,0);12097 elseM12098 status = SMG$READ_COMPOSED_LINE(&keyb_id, 0, &answer,pA12099 &prompt , &x, 0 , &modifiers, 0,0,0,0,0);4=12100 if ((ans[0] == 'a') || (ans[0] == 'A'))z &DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 8kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (2)x12101 { ,12102 matconfirm = FALSE; &12103 ans[0] = 'y'; 12104 } O12105 if ((ans[0] == 'y') || (ans[0] == 'Y') || (ans[0] == '1') >12106 || (ans[0] == 't') || (ans[0] == 'T'))%12107 ans[0] = 'y';i(12108 else ans[0] = 'n';12109 }t12110 :12111 /* Now modify all the required attributes */&12112 if (ans[0] == 'y')12113 { 012114 rtype = attrib.rtype % 16;512115 fileorg = attrib.rtype - rtype;=.12116 fileorg = fileorg / 16 ;%12117 if (matbadacl) (U12118 if (bad == 0) uchar = uchar | FH2$M_BADACL; /* Set the bit */rO12119 else uchar = uchar & ~FH2$M_BADACL; /* Clear the bit */r"12120 if (matdir) X12121 if (dir == 0) uchar = uchar | FH2$M_DIRECTORY; /* Set the bit */R12122 else uchar = uchar & ~FH2$M_DIRECTORY; /* Clear the bit */#12123 if (matlock) eV12124 if (lock == 0) uchar = uchar | FH2$M_LOCKED; /* Set the bit */O12125 else uchar = uchar & ~FH2$M_LOCKED; /* Clear the bit */q#12126 if (matcont) 2W12127 if (cont == 0) uchar = uchar | FH2$M_CONTIGB; /* Set the bit */m12128 else 1M12129 uchar = uchar & ~FH2$M_CONTIGB; /* Clear the bit */c"12130 if (matname)12131 { C12132 for (i = 0; i < 86; i++) old_name[i] = ' ';"R12133 memcpy(&old_name, &new_name, new_name_descr.dsc$w_length);12134 }tF12135 if (matbakdate) memcpy(&bakdate, &r_bakdate, 8);F12136 if (matrevdate) memcpy(&revdate, &r_revdate, 8);F12137 if (matexpdate) memcpy(&expdate, &r_expdate, 8);F12138 if (matcredate) memcpy(&credate, &r_credate, 8);:12139 if (matebyte) attrib.ffbyte = ebyte;$12140 if (mateblock)12141 { a12142 if (!matebyte) attrib.ffbyte = 0; /* Clear eof if it was not specified */1F12143 hiblk = attrib.hiblk; /* Save highest block */)12144 if (eblock == 0) ,M12145 eblock = (hiblk / 65536 ) + ((hiblk %65536) << 16);112146 if (ebyte == 0) eblock++; 712147 hiblk = (eblock % 65536) << 16; 212148 hiblk += (eblock / 65536);-12149 attrib.efblk = hiblk;112150 } 012151 if (matuic) old_uic = uic;A12152 if (matrvcount) ascdates.date[0] = rvcount; =12153 if (matrecsize) attrib.rsize = recsize;(Q12154 if (matbucksize) attrib.bktsize = (unsigned char) bucksize;,O12155 if (matvfcsize) attrib.vfcsize = (unsigned char) vfcsize; <12156 if (matmaxrec) attrib.maxrec = maxrec;612157 if (matnone) attrib.rattrib = 0; DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 9kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (2) G12158 if (matfortran) attrib.rattrib = FAT$M_FORTRANCC; G12159 if (matimplied) attrib.rattrib = FAT$M_IMPLIEDCC;)C12160 if (matprint) attrib.rattrib = FAT$M_PRINTCC; T12161 if (matnospan) attrib.rattrib = attrib.rattrib | FAT$M_NOSPAN;812162 if (matfixed) rtype = FAT$C_FIXED;912163 if (matvar) rtype = FAT$C_VARIABLE; 412164 if (matvfc) rtype = FAT$C_VFC;<12165 if (matundef) rtype = FAT$C_UNDEFINED;:12166 if (matstream) rtype = FAT$C_STREAM;>12167 if (matstreamlf) rtype = FAT$C_STREAMLF;>12168 if (matstreamcr) rtype = FAT$C_STREAMCR;<12169 if (matindex) fileorg = FAT$C_INDEXED;<12170 if (matdirect) fileorg = FAT$C_DIRECT;=12171 if (matrelat) fileorg = FAT$C_RELATIVE;s=12172 if (matseq) fileorg = FAT$C_SEQUENTIAL; F12173 attrib.rtype = (unsigned char) (fileorg * 16) + .12174 (unsigned char) rtype;712175 /* Now rewrite the file header */J12176 status = SYS$QIOW(0, chan, IO$_MODIFY, &iostat, 0,0,212177 &fibdescr, 0, 0, 0, acb, 0);D12178 if ((status & 1) == 1) status = iostat.iosb_1;-12179 if ((status & 1) != 1) ,12180 { \12181 sprintf(outbuf,"%%DFU-E-SETERR, Error modifying file %s,", res_str);$12182 put_disp(); -12183 singlemsg(0,status); 012184 } 12185 else&12186 if (log == 0) 12187 { X12188 sprintf(outbuf,"%%DFU-S-MODIFIED, File %s modified ",res_str);%12189 put_disp(); 12190 } 12191 } J12192 status = SYS$QIOW(0, chan, IO$_DEACCESS, &iostat ,0,0,)12193 &fibdescr,0,0,0,0,0);512194 status = 1;w12195 12196 next_set: M12197 if ((status & 1) == 1) status = SYS$SEARCH(&fab , 0 , 0);S+12198 else status = RMS$_NMF; %12199 SYS$DASSGN(chan);5$12200 if (ctrlc == 1) 12201 { !12202 do_abort();e(12203 status = RMS$_NMF;12204 } 12205 } 12206 next_name:12207 if (ip == 0)12208 { 312209 xname_descr.dsc$w_length = 255;.M12210 status = parse_item("p1", &xname_descr, 0 , &matfile, 0);n;12211 if ((status & 1) != 1) matfile = FALSE; 12212 }_12213 } (12214 if (ip != 0) fclose(ip); DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 10TkV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (2) E12215 sprintf(outbuf,"\n%%DFU-I-READY, SET command ready");u12216 put_disp();;12217 return(1);12218 }a12219  ,DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 11 kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (3)N J12220 int delete_file(unsigned short id[3], unsigned short dchan, >12221 Boolean noremove, Boolean deldir, Boolean nolog,12222 Boolean rem_file)_12223 /* 012224 Performs the actual file delete/12225 Assumes channel already opened]12226 */12227 12228 { %12229 static char file[86]; +12230 static struct fibdef dfib; 2.12231 static unsigned short back[3];*12232 static unsigned int uchar;*12233 unsigned int tmp, status2; 12234 static struct { 412235 unsigned short atr_size, atr_type;#12236 int atr_address; 12237 } 12238 d_acb[4] = { 12239 { :12240 86, ATR$C_ASCNAME, (int) &file[0] }12241 , 12242 { :12243 6, ATR$C_BACKLINK, (int) &back[0] }12244 ,f12245 { 612246 4, ATR$C_UCHAR, (int) &uchar } 12247 , { !12248 0, 0, 0 } 12249 };12250 struct {12251 int fiblen; (12252 struct fibdef *fibadr;12253 } 12254 dfib_descr; "12255 unsigned int func;12256 !12257 /* Setup d_fib */'112258 dfib_descr.fiblen = sizeof(dfib); *12259 dfib_descr.fibadr = &dfib;112260 func = IO$_ACCESS | IO$M_ACCESS; =*12261 dfib.fib$w_fid[0] = id[0];*12262 dfib.fib$w_fid[1] = id[1];*12263 dfib.fib$w_fid[2] = id[2];'12264 dfib.fib$w_did[0] = 0; d&12265 dfib.fib$w_did[1] = 0;&12266 dfib.fib$w_did[2] = 0;B12267 dfib.fib$l_acctl = FIB$M_WRITE | FIB$M_WRITETHRU; @12268 if (!noremove) dfib.fib$w_nmctl = FIB$M_FINDFID;*12269 else dfib.fib$w_nmctl = 0;12270 12271 file[0]= ' '; ]12272 if (!deldir) /* No need to access this file first when deleting directories*/ 12273 { A12274 status = SYS$QIOW(0, dchan, func, &iostat, 0,0,(412275 &dfib_descr, 0 ,0 ,0 , &d_acb, 0); cDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 12 kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (3) A12276 if ((status & 1 ) == 1) status = iostat.iosb_1;*'12277 if ((status & 1) !=1) 12278 { 12279 status2 = 1;112280 if (status != SS$_NOSUCHFILE)2_12281 /* Now do a IO$_ACCESS without IO$M_ACCESS because we need the file name.tU12282 A little bit clumsy but I know no other way to solve this */ 12283 { L12284 status2 = SYS$QIOW(0, dchan, IO$_ACCESS, &iostat, 0,0,812285 &dfib_descr, 0 ,0 ,0 , &d_acb, 0);E12286 if ((status2 & 1) ==1) status2 = iostat.iosb_1;,12287 } *12288 if ((status2 & 1) !=1)12289 { Z12290 sprintf(outbuf,"%%DFU-E-NOACCESS, Error accessing file for delete");"12291 put_disp(); ,12292 singlemsg(0,status2); 12293 } 12294 else12295 { 412296 tmp = strindex(&file," ",86); '12297 file[tmp] = '\0';iU12298 sprintf(outbuf,"%%DFU-E-NOTDEL, Error deleting file %s,",file); "12299 put_disp(); +12300 singlemsg(0,status); 12301 }6!12302 goto end_del; 12303 }k12304 R12305 if ((uchar & 32768) == 32768) noremove = TRUE; /* Marked bit */A12306 /* Now copy the backlink to the directory id */5 12307 if (!noremove)12308 { 112309 dfib.fib$w_did[0] = back[0]; t012310 dfib.fib$w_did[1] = back[1];012311 dfib.fib$w_did[2] = back[2];12312 }(12313 else12314 { +12315 dfib.fib$w_did[0] = 0; i*12316 dfib.fib$w_did[1] = 0;*12317 dfib.fib$w_did[2] = 0;12318 }12319 } +12320 /* And delete the file */ I.12321 tmp = strindex(&file," ",86); !12322 file[tmp] = '\0';E012323 if (rem_file) func = IO$_DELETE;512324 else func = IO$_DELETE | IO$M_DELETE; ?12325 status = SYS$QIOW(0, dchan, func, &iostat, 0,0, .12326 &dfib_descr, 0 ,0 ,0 , 0 , 0);?12327 if ((status & 1 ) == 1) status = iostat.iosb_1;T%12328 if ((status & 1) !=1)f12329 { R12330 sprintf(outbuf,"%%DFU-E-NOTDEL, Error deleting file %s ,",file);12331 put_disp(); '12332 singlemsg(0,status); A _DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 13 kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (3)R12333 if (!deldir) SYS$QIOW(0, dchan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0);12334 goto end_del;R12335 } 12336 if (!deldir)12337 { 12338 if (!nolog) 12339 { N12340 sprintf(outbuf,"%%DFU-S-DELETED, File %s deleted ", file);12341 put_disp(); 12342 }N12343 status = SYS$QIOW(0, dchan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0);12344 }s12345 status = 1; 12346 end_del:12347 return(status); 12348 }s12349  ,DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 14 kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (4)  J12350 int enter_file(unsigned short echan, struct fibdef * fibadr,212351 struct dsc$descriptor * namedescr).12352 /* Enter a file on this channel.N12353 If the file already exists create one with a higher version 12354 */12355 { 12356 struct {12357 int fiblen; '12358 struct fibdef *e_fib; 12359 } dfib_descr;12360 12361 short len;*12362 unsigned int status2, tmp;12363 12364 static struct { 12365 short lendir;1$12366 char dirnam[198]; 12367 } dirrec;f12368 12369 0~ DFU024.BCK{[DFU024.LIS]DFU_FILEDIR.LIS;4A|A static struct { 412370 unsigned short atr_size, atr_type;#12371 int atr_address; 512372 } e_acb[2] = 12373 { :12374 { 200, ATR$C_FILE_SPEC, (int) &dirrec }#12375 , { 0, 0, 0 } 12376 }; 12377 :12378 dfib_descr.fiblen = sizeof(struct fibdef);*12379 dfib_descr.e_fib = fibadr;12380 @12381 status = SYS$QIOW(0, echan, IO$_CREATE, &iostat,<12382 0,0, &dfib_descr, namedescr , 0, 0, 0, 0);612383 if (iostat.iosb_1 == SS$_DUPFILENAME) O12384 { /* Retry if this file already exists with a higher version */ 512385 fibadr->fib$w_nmctl = FIB$M_NEWVER;3B12386 status = SYS$QIOW(0, echan, IO$_CREATE, &iostat,I12387 0,0, &dfib_descr, namedescr , &len, namedescr, 0, 0);F012388 namedescr->dsc$w_length = len;*12389 fibadr->fib$w_nmctl = 0;12390 }_?12391 if ((status & 1 ) != 1) status = iostat.iosb_1; C12392 if ((status & 1) == 1) /* Get the full file name */ +12393 { fibadr->fib$w_did[0] = 0;0+12394 fibadr->fib$w_did[1] = 0; +12395 fibadr->fib$w_did[2] = 0; H12396 status2 = SYS$QIOW(0, echan, IO$_ACCESS, &iostat, 0,0,612397 &dfib_descr, 0 ,0 ,0 , &e_acb, 0);(12398 if ((status2 & 1) ==1)12399 { :12400 tmp = strindex(dirrec.dirnam,"]",198);#12401 if (tmp == -1) u 12402 tmp = 198; 12403 else tmp++;.12404 dirrec.dirnam[tmp] = '\0';N12405 sprintf(outbuf,"%%DFU-S-ENTERED, File %.*s entered in %s", ;DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 15tkV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (4) V12406 namedescr->dsc$w_length, namedescr->dsc$a_pointer,dirrec.dirnam);12407 put_disp();$12408 } 12409 } 12410 return(status);12411 } 12412  ,DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 16 kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (5)  J12413 int remove_file(unsigned short id[3], unsigned short did[3],#12414 unsigned short dchan)d12415 /* :12416 Remove a file entry for a non-existent file&12417 Assumes channel is open12418 */12419 12420 { +12421 static struct fibdef dfib; *12422 unsigned int tmp, status2;12423 struct {12424 int fiblen; (12425 struct fibdef *fibadr;12426 } 12427 dfib_descr;w"12428 unsigned int func;12429 !12430 /* Setup d_fib */=112431 dfib_descr.fiblen = sizeof(dfib);f*12432 dfib_descr.fibadr = &dfib;*12433 dfib.fib$w_fid[0] = id[0];*12434 dfib.fib$w_fid[1] = id[1];*12435 dfib.fib$w_fid[2] = id[2];,12436 dfib.fib$w_did[0] = did[0]; +12437 dfib.fib$w_did[1] = did[1]; +12438 dfib.fib$w_did[2] = did[2];a/12439 dfib.fib$l_acctl = FIB$M_WRITE;,112440 dfib.fib$w_nmctl = FIB$M_FINDFID; 12441 +12442 /* And remove the file */ "12443 func = IO$_DELETE;?12444 status = SYS$QIOW(0, dchan, func, &iostat, 0,0, .12445 &dfib_descr, 0 ,0 ,0 , 0 , 0);?12446 if ((status & 1 ) == 1) status = iostat.iosb_1;*12447 return(status); 12448 } 12449  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 17IkV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (6)w O12450 int delete_directory(unsigned int dchan, unsigned short f_id[3], $)12451 char *r_str, Boolean nolog) 12452 /* D12453 Subroutine to open the directory, get all file-id's(12454 and delete those files.12455 */12456 12457 { "12458 unsigned int func;:12459 int i, j, k, n, nr, vbn, x, e_blk, h_blk, .12460 progress, num_files, lastsize;*12461 static unsigned int uchar;(12462 static short attrib[16];*12463 static struct fibdef fib; 12464 static struct { 412465 unsigned short atr_size, atr_type;#12466 int atr_address; "12467 } 12468 acb[3] = { 12469 { 612470 4, ATR$C_UCHAR, (int) &uchar } 12471 , 12472 { 912473 32, ATR$C_RECATTR, (int) &attrib }212474 , 12475 {8!12476 0, 0, 0 } /12477 };12478 struct {12479 int fiblen; (12480 struct fibdef *fibadr;12481 } 12482 fib_descr;'12483 struct _d_e *dir_entry;d'12484 struct _f_e *fid_entry;b12485 struct _quad {*12486 unsigned int address[2];12487 } 12488 retadr;b12489 struct _sh {"12490 char block[512];12491 } =12492 empty, *i_dir; /* Pointer to shared memory */212493 Boolean found;12494 ,12495 /* Set up some fib fields */%12496 empty.block[0] = -1; $12497 empty.block[1] = -1;/12498 fib_descr.fiblen = sizeof(fib);$(12499 fib_descr.fibadr = &fib;012500 func = IO$_ACCESS | IO$M_ACCESS;12501 num_files = 0;L12502 /* Now fill in File id and function code for the ACP call */+12503 fib.fib$w_fid[0] = f_id[0]; +12504 fib.fib$w_fid[1] = f_id[1];-+12505 fib.fib$w_fid[2] = f_id[2];3 DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 18 kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (6) ?12506 fib.fib$l_acctl = FIB$M_WRITE | FIB$M_NOWRITE; 12507 (12508 /* Open the directory */Y12509 status = SYS$QIOW(0, dchan, func, &iostat,0,0,&fib_descr, 0,0,0, &acb,0); ?12510 if ((status & 1 ) == 1) status = iostat.iosb_1;n%12511 if ((status & 1) !=1) 12512 { W12513 sprintf(outbuf,"%%DFU-E-OPENERR, Error opening directory %s,",r_str); 12514 put_disp(); '12515 singlemsg(0,status); S!12516 return(status); 12517 } ,12518 /* Get the directory size */612519 e_blk = (attrib[4] << 16) + attrib[5];612520 h_blk = (attrib[2] << 16) + attrib[3];12521 112522 /* Check if directory is valid */ H12523 if ( ((attrib[0] & 2048 ) != 2048) /*NOSPAN attribute */A12524 || ((uchar & 8192) != 8192) /* Directory bit */ B12525 || ((uchar & 128) != 128) ) /* Contiguous bit */12526 { V12527 sprintf(outbuf,"%%DFU-W-INVDIR, %s is not a valid directory",r_str);12528 put_disp();iN12529 status = SYS$QIOW(0, dchan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0);12530 return(1);12531 } 212532 if ( strstr(r_str,".DIR;1") == 0) 12533 { V12534 sprintf(outbuf,"%%DFU-W-INVDIR, %s is not a valid directory",r_str);12535 put_disp(); N12536 status = SYS$QIOW(0, dchan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0);12537 return(1);12538 } 12539 lastsize = 0; "12540 if (e_blk > 1000) I12541 { /* Allocate dynamic space to read the directory file */rG12542 status = SYS$EXPREG(e_blk, &retadr.address[0], 0, 0); (12543 if ((status & 1) != 1)12544 { ^12545 sprintf(outbuf,"%%DFU-E-INSFMEM, Error allocating %d pages memory for %s","12546 e_blk, r_str);12547 put_disp();2)12548 singlemsg(0,status); Q!12549 lastsize = 0;P12550 status = SYS$QIOW(0, dchan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0);12551 return(1);12552 } (12553 else lastsize = e_blk;12554 } 212555 712556 /* Now read the directory with 1 I/O */t 12557 vbn = e_blk - 1;F12558 /* Pointer to space for directory blocks (1000 max) */"12559 if (e_blk <= 1000)=12560 i_dir = (struct _sh *) &header[0].block[0];_12561 else;12562 i_dir = (struct _sh *) retadr.address[0];s .DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 19 kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (6) G12563 status = SYS$QIOW(0, dchan, IO$_READVBLK, &iostat, 0,0,e,12564 i_dir, (vbn*512), 1, 0,0,0);?12565 if ((status & 1 ) == 1) status = iostat.iosb_1; %12566 if ((status & 1) !=1)12567 { W12568 sprintf(outbuf,"%%DFU-E-READERR, Error reading directory %s,",r_str);012569 put_disp(); (12570 singlemsg(0,status); N12571 status = SYS$QIOW(0, dchan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0); 12572 goto next_del;12573 }3312574 /* Check for corrupted directory */)12575 if (i_dir->block[0] == 0) 12576 { [12577 sprintf(outbuf,"%%DFU-E-JUNKDIR, Corrupted directory (byte offset 0) %s", 12578 r_str);r12579 put_disp(); N12580 status = SYS$QIOW(0, dchan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0); 12581 goto next_del;12582 }_12583 712584 /* Now processs the directory blocks */112585 k = 1; -12586 n = 0;!12587 while (k < e_blk) 12588 { 112589 progress = 100 * (k-1) / e_blk;;!12590 sprintf(outbuf, Z12591 " Progress : %3d%% Status : Deleting directory (%d files done)",'12592 progress, num_files); 12593 put_status(1);12594 i = 1; #12595 found = FALSE; 12596 while (!found)12597 { ^12598 if ((i > 512) || i_dir->block[i-1] == -1) found = TRUE; /* End of block *//12599 else /* parse this entry */ 712600 /* Pointer to directory record */ 12601 { F12602 dir_entry = (struct _d_e *) &i_dir->block[i-1]; a12603 nr = (dir_entry->size - 4 - dir_entry->count) / 8; /* # of files entries */ 12604 12605 n += nr;R12606 j = i + dir_entry->size + 2; /* End address of this entry */-12607 /* Align count field */iJ12608 if ((dir_entry->count &1) ==1) dir_entry->count +=1;Z12609 fid_entry = (struct _f_e *) &i_dir->block[i + 5 + dir_entry->count];%12610 while (nr >= 1) 312611 { /* Now delete this entry */ %12612 if (matkeep) 2[12613 /* Take care not to delete a .DIR file. We assume any file called0L12614 .DIR and version 1 as being a directory file */12615 { %12616 status = 1; :12617 if ((fid_entry->version == 1) &&O12618 (strstr(dir_entry->name,".DIR") != 0)) status = 2; I12619 }  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 20ukV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (6)(12620 if (status !=2) K12621 status = delete_file(&fid_entry->fid_num, dchan, 312622 TRUE, TRUE, TRUE, FALSE); /12623 if ((status & 1 ) == 1) 12624 { &12625 num_files++;&12626 if (!nolog) 12627 { T12628 sprintf(outbuf,"%%DFU-S-DELETED, File %.*s;%d deleted ",T12629 dir_entry->count, dir_entry->name, fid_entry->version); '12630 put_disp(); 12631 }=12632 }212633 if (ctrlc == 1) return(1);12634 nr--; $12635 fid_entry++;12636 }t812637 i = j; /* Pointer to next entry */ 12638 } /* endif*/12639 }212640 k += 1; .12641 i_dir += 1; /* Next block */!12642 } /* end while */ K12643 sprintf(outbuf," Progress : 100%% Status : READY");212644 put_status(1);O12645 sprintf(outbuf,"%%DFU-S-TOTAL, %d file(s) deleted", num_files);;12646 put_disp(); P12647 /* Now fake the directory as an empty directory and delete it */12648 e_blk = 2;12649 attrib[4] = 0;12650 attrib[5] = 2;12651 vbn = 1;G12652 status = SYS$QIOW(0, dchan, IO$_WRITEVBLK, &iostat,0,0, /12653 &empty.block[0], 2 , 1, 0,0,0);.?12654 if ((status & 1 ) == 1) status = iostat.iosb_1;%12655 if ((status & 1) !=1);N12656 status = SYS$QIOW(0, dchan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0);12657 else NS12658 /* Write the new attributes back , truncate and close the file */i12659 { %12660 fib.fib$l_exsz = 0;]012661 fib.fib$w_exctl = FIB$M_TRUNC;*12662 fib.fib$l_exvbn = e_blk;I12663 status = SYS$QIOW(0, dchan, IO$_DEACCESS, &iostat, 0,0, -12664 &fib_descr, 0,0,0, &acb,0); 12665 } ]12666 if (!matkeep) status = delete_file(f_id, dchan, FALSE, FALSE, nolog, FALSE); 12667 next_del:T!12668 if (lastsize !=0) 812669 SYS$DELTVA(&retadr.address[0], 0 , 0);12670 return(1);12671 },12672  1DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 21 kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (7) I12673 int parse_tree(short int dchan, char *r_str, Boolean nolog) 12674 /* <12675 Subroutine to parse for all subdirectories.;12676 All directories found are sorted such that ?12677 delete_directory can be called in proper ordereC12678 V2.4 : build up a keeplist in case we want to save)&12679 the directory tree. 12680 */12681 12682 { 12683 struct FAB xfab; 12684 struct NAM xnam;!12685 char ex_str[255]; %12686 static struct _srt { $12687 char rx_str[255]; *12688 unsigned short f_id[3]; 12689 } 12690 sort_rec;0!12691 int x, y, reclen;u#12692 short keybuf[5] = { 112693 1, DSC$K_DTYPE_T, 0, 0, 255 }; 312694 struct dsc$descriptor sort_descr = N12695 {iX12696 sizeof(sort_rec), DSC$K_DTYPE_T, DSC$K_CLASS_S, (char *) &sort_rec };12697 (12698 k_first = k_list = NULL;12699 >12700 /* Rearrange this directory into a wildcard */,12701 y = strindex(r_str,"]",255);412702 x = y + strindex(&r_str[y],".",255); 12703 r_str[x] = '\0';12704 r_str[y] = '.'; ,12705 strcat(r_str,"...]*.DIR;1");12706 *12707 /* Now parse the result */"12708 xfab = cc$rms_fab;'12709 xfab.fab$l_fna = r_str; /12710 xfab.fab$b_fns = strlen(r_str);2'12711 xfab.fab$l_nam = &xnam;;12712 "12713 xnam = cc$rms_nam;.12714 xnam.nam$b_rss = NAM$C_MAXRSS;;12715 xnam.nam$l_rsa = (char *) &sort_rec.rx_str; .12716 xnam.nam$b_ess = NAM$C_MAXRSS;212717 xnam.nam$l_esa = (char *) &ex_str;12718 412719 /* get the rest of the fab fields */12720 212721 status = SYS$PARSE(&xfab , 0 , 0);(12722 if ((status & 1 ) != 1) 12723 { ]12724 sprintf(outbuf,"%%DFU-E-PARSEERR, Error parsing filename from %s,", r_str); 12725 put_disp(); '12726 singlemsg(0,status); !12727 return(status); 12728 }1 :DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 22:kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (7) N12729 sprintf(outbuf,"%%DFU-I-PARSEDIR, Parsing directory tree...");12730 put_disp(); *12731 reclen = sizeof(sort_rec);K12732 status = sor$begin_sort(&keybuf, &reclen, 0,0,0,0,0,0,0,0);r312733 status = SYS$SEARCH(&xfab , 0 , 0);*12734 while (status != RMS$_NMF)12735 { *12736 if ((status & 1 ) != 1) 12737 { ;12738 sort_rec.rx_str[xnam.nam$b_rsl] = '\0'; ]12739 sprintf(outbuf,"%%DFU-W-NOSUBDIR, no subdirectories found in this tree"); 12740 put_disp();u$12741 sor$end_sort(); 12742 return(1);12743 }r12744 else iT12745 for (x = xnam.nam$b_rsl; x <=254; x++) sort_rec.rx_str[x] = ' ';J12746 copy_fid(&sort_rec.f_id[0], &xnam.nam$w_fid_num, FALSE);/12747 sor$release_rec(&sort_descr);*'12748 /* Create keeplist */ 12749 if (matkeep)12750 { (12751 if (k_first == NULL)12752 { K12753 k_list = (struct keep *) malloc(sizeof(struct keep)); '12754 k_first = k_list;d12755 } 12756 else12757 { Q12758 k_list->next = (struct keep *) malloc(sizeof(struct keep)); ,12759 k_list = k_list->next;12760 }fK12761 copy_fid(&k_list->f_id[0], &xnam.nam$w_fid_num, FALSE);9K12762 copy_fid(&k_list->d_id[0], &xnam.nam$w_did_num, FALSE);rI12763 strncpy(&k_list->filename, &sort_rec.rx_str[0], 255);_)12764 k_list->next = NULL; 12765 } 512766 status = SYS$SEARCH(&xfab , 0 , 0); 12767 }**12768 /* Now sort the results */*12769 status = sor$sort_merge();%12770 if ((status & 1) !=1)n12771 { "12772 sor$end_sort(); !12773 return(status);y12774 }r512775 status = sor$return_rec(&sort_descr);s/12776 while (status != SS$_ENDOFFILE)u12777 { :12778 x = strindex (sort_rec.rx_str," ",255); ,12779 sort_rec.rx_str[x] = '\0';!12780 if (ctrlc != 1) 12781 { Y12782 sprintf(outbuf,"\n%%DFU-I-CLEANUP, Deleting %s...", sort_rec.rx_str);s12783 put_disp();/H12784 status = delete_directory(dchan, &sort_rec.f_id[0], 612785 (char *) &sort_rec.rx_str, nolog); 1DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 23 kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (7)912786 status = sor$return_rec(&sort_descr); 12787 }1C12788 else status = SS$_ENDOFFILE; /* Stop at CTRL/C */12789 } 12790 sor$end_sort();n12791 return(1);12792 } 12793  EDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 242kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (8)" <12794 int parse_single(short int dchan, char *r_str)12795 /* nH12796 Subroutine to parse for subdirectories we want to keep.F12797 This routine is needed for building up the keep list.?12798 The actual delete is done in the main routine 12799 */12800 12801 { 12802 struct FAB xfab; 12803 struct NAM xnam;!12804 char ex_str[255];)12805 static char rx_str[255]; =!12806 int x, y, reclen; 12807 (12808 k_first = k_list = NULL;12809 >12810 /* Rearrange this directory into a wildcard */,12811 y = strindex(r_str,"]",255);412812 x = y + strindex(&r_str[y],".",255); 12813 r_str[x] = '\0';12814 r_str[y] = '.';h)12815 strcat(r_str,"]*.DIR;1");e12816 *12817 /* Now parse the result */"12818 xfab = cc$rms_fab;'12819 xfab.fab$l_fna = r_str; /12820 xfab.fab$b_fns = strlen(r_str);o'12821 xfab.fab$l_nam = &xnam;012822 "12823 xnam = cc$rms_nam;.12824 xnam.nam$b_rss = NAM$C_MAXRSS;212825 xnam.nam$l_rsa = (char *) &rx_str;.12826 xnam.nam$b_ess = NAM$C_MAXRSS;212827 xnam.nam$l_esa = (char *) &ex_str;12828 412829 /* get the rest of the fab fields */12830 212831 status = SYS$PARSE(&xfab , 0 , 0);(12832 if ((status & 1 ) != 1) 12833 { ]12834 sprintf(outbuf,"%%DFU-E-PARSEERR, Error parsing filename from %s,", r_str);212835 put_disp(); '12836 singlemsg(0,status); !12837 return(status);t12838 } J12839 sprintf(outbuf,"%%DFU-I-PARSEDIR, Parsing directory ...");12840 put_disp(); 312841 status = SYS$SEARCH(&xfab , 0 , 0); *12842 while (status != RMS$_NMF)12843 { *12844 if ((status & 1 ) != 1) 12845 return(1);12846 else K12847 for (x = xnam.nam$b_rsl; x <=254; x++) rx_str[x] = ' '; '12848 /* Create keeplist */I12849 if (matkeep) 2DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 25rkV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (8)i12850 { (12851 if (k_first == NULL)12852 { K12853 k_list = (struct keep *) malloc(sizeof(struct keep));'12854 k_first = k_list; 12855 };12856 else12857 { Q12858 k_list->next = (struct keep *) malloc(sizeof(struct keep));r,12859 k_list = k_list->next;12860 } K12861 copy_fid(&k_list->f_id[0], &xnam.nam$w_fid_num, FALSE);9K12862 copy_fid(&k_list->d_id[0], &xnam.nam$w_did_num, FALSE);5@12863 strncpy(&k_list->filename, &rx_str[0], 255);)12864 k_list->next = NULL; s12865 }_512866 status = SYS$SEARCH(&xfab , 0 , 0); 12867 }_12868 return(1);12869 } 12870  nDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 265kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (9)I &12871 int delete_command(mask)12872 /*'12873 Delete file by file-id G12874 Also used for deleting directories and directory trees)12875 */12876 12877 { L12878 static char device[64], dummy[7], dname[160], exp_str[255], 412879 res_str[255], t_str[255], name[255];"12880 unsigned long tmp;12881 struct FAB fab;;12882 struct NAM nam;=12883 static struct { +12884 unsigned short num, seq; f)12885 unsigned char rvn, nmx;t12886 } 12887 f_id; *12888 static struct fibdef fib; 12889 struct {12890 int fiblen; (12891 struct fibdef *fibadr;12892 } 12893 fib_descr;'12894 unsigned fid_num, x, y; $12895 unsigned short chan;S12896 Boolean matdevice, matnoremove, matdir, matnolog, mattree, matstat; (12897 char deflt[] = ".DIR;1";312898 $DESCRIPTOR(device_descr , device); 212899 $DESCRIPTOR(dummy_descr , dummy); 112900 $DESCRIPTOR(dname_descr , dname);f212901 $DESCRIPTOR(item_descr,"FILE_ID");412902 $DESCRIPTOR(terminal,"SYS$COMMAND");.12903 $DESCRIPTOR(enter_descr,name);12904 (12905 /* Delete directory ? */N12906 status = parse_item("directory", &dummy_descr, 0, &matdir, 2);J12907 status = parse_item("tree", &dummy_descr, 0, &mattree, 2);J12908 status = parse_item("keep", &dummy_descr, 0, &matkeep, 2);P12909 status = parse_item("statistics", &dummy_descr, 0, &matstat, 2);712910 /* Get device name or directory name */ O12911 status = parse_item("device", &dname_descr, 0, &matdevice , 0); .12912 x = strindex(&dname," ",160); 12913 dname[x]= '\0';412914 if (!matdir) ;12915 { ,12916 /* Check the privileges */!12917 if (mask > -1) e12918 { .12919 singlemsg(0, DFU_NOPRIV); '12920 return(SS$_NOPRIV); 12921 } (12922 strcpy(device,dname); ;12923 device_descr.dsc$w_length=strlen(device);l12924 }e#12925 /* Nolog entered */ L12926 status = parse_item("nolog", &dummy_descr, 0, &matnolog, 2); DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 27kV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (9) 12927 712928 if (matstat) status = lib$init_timer(); Z12929 /* Now follow different code path depending on the /DIRECTORY qualifier */12930 if (!matdir)12931 { /12932 /* Remove from directory ? */T12933 status = parse_item("noremove", &dummy_descr, 0, &matnoremove, 2);12934 '12935 /* get the file id */1?12936 if (CLI$PRESENT(&item_descr) != CLI$_PRESENT) 12937 { #12938 sprintf(outbuf, _12939 "%%DFU-E-NOFID, Missing /FILE_ID or /DIRECTORY qualifier on command line");212940 put_disp(); +12941 return(SS$_NOSUCHFILE);212942 }r/12943 dummy_descr.dsc$w_length = 7; _12944 status = CLI$GET_VALUE(&item_descr, &dummy_descr, &dummy_descr.dsc$w_length);.%12945 tmp = atoi(&dummy); *12946 f_id.nmx = f_id.rvn = 0;+12947 f_id.num = (tmp % 65536); +12948 f_id.nmx = (tmp / 65536);t/12949 dummy_descr.dsc$w_length = 7; _12950 status = CLI$GET_VALUE(&item_descr, &dummy_descr, &dummy_descr.dsc$w_length); )12951 if ((status & 1) != 1) 12952 { X12953 sprintf(outbuf,"%%DFU-E-ERRFID, Incorrect File id on command line");12954 put_disp(); +12955 return(SS$_NOSUCHFILE);O12956 }L%12957 tmp = atoi(&dummy); !12958 f_id.seq = tmp; /12959 dummy_descr.dsc$w_length = 7;E_12960 status = CLI$GET_VALUE(&item_descr, &dummy_descr, &dummy_descr.dsc$w_length); )12961 if ((status & 1) != 1) 12962 { X12963 sprintf(outbuf,"%%DFU-E-ERRFID, Incorrect File id on command line");12964 put_disp();_+12965 return(SS$_NOSUCHFILE); 12966 } %12967 tmp = atoi(&dummy);t312968 f_id.nmx = f_id.nmx + (tmp >> 8); )12969 f_id.rvn = (tmp % 255);212970 J12971 /* Parsing complete , now proceed to delete this file */12972 .12973 /* Open a channel to disk */C12974 status = SYS$ASSIGN(&device_descr, &chan, 0 , 0); *12975 if ((status & 1 ) != 1) 12976 { 212977 singlemsg(DFU_ASSIGN,status); #12978 return(status); 12979 }t,12980 /* Now delete this file */^12981 status = delete_file(&f_id.num, chan, matnoremove, matdir, matnolog, FALSE);M12982 status = SYS$QIOW(0, chan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0);c,12983 status = SYS$DASSGN(chan); DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 28fkV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (9)c(12984 } /* File delete done */12985 else:12986 /* Delete all files in this directory */12987 { 12988 ctrlc = 0;%12989 matnoremove = TRUE;212990 112991 /* fill in FAB and NAM blocks*/212992 #12993 fab = cc$rms_fab;b212994 fab.fab$l_dna = (char *) &deflt;$12995 fab.fab$b_dns = 6;212996 fab.fab$l_fna = (char *) &dname;012997 fab.fab$b_fns = strlen(dname);'12998 fab.fab$l_nam = &nam;t12999 #13000 nam = cc$rms_nam; /13001 nam.nam$b_rss = NAM$C_MAXRSS;-413002 nam.nam$l_rsa = (char *) &res_str;/13003 nam.nam$b_ess = NAM$C_MAXRSS;(413004 nam.nam$l_esa = (char *) &exp_str;13005 613006 /* get the rest of the fab fields */13007 313008 status = SYS$PARSE(&fab , 0 , 0); *13009 if ((status & 1 ) != 1) 13010 { _13011 sprintf(outbuf,"%%DFU-E-PARSEERR, Error parsing filename from %s,", dname); 13012 put_disp(); )13013 singlemsg(0,status); #13014 >Hz~ DFU024.BCK{[DFU024.LIS]DFU_FILEDIR.LIS;4O| return(status);113015 } 13016 /13017 /* now search for the file */F13018 13019 chan = 0;2413020 status = SYS$SEARCH(&fab , 0 , 0);,13021 while (status != RMS$_NMF)13022 { 213023 res_str[nam.nam$b_rsl] = '\0';,13024 if ((status & 1 ) != 1) 13025 { ]13026 sprintf(outbuf,"%%DFU-E-SEARCHERR, Error searching file %s,", res_str);r"13027 put_disp(); +13028 singlemsg(0,status); %13029 return(status);n13030 })613031 /* Open a channel to the device */"13032 if (chan == 0)13033 { C13034 device_descr.dsc$w_length = nam.nam$t_dvi[0];L713035 strcpy(device,&nam.nam$t_dvi[1]);S=13036 /* Open a second channel to the disk */eG13037 status = SYS$ASSIGN(&device_descr, &chan, 0 , 0); .13038 if ((status & 1 ) != 1) 13039 { 613040 singlemsg(DFU_ASSIGN,status);  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 29dkV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (9)i'13041 return(status); 13042 }713043 } +13044 strcpy(t_str,res_str); [13045 status = 1; U13046 if (smg$enable) SMG$SET_CURSOR_MODE(&paste_id,&SMG$M_CURSOR_OFF); Z13047 /* Search for directories to save when we delete a single directory */013048 if ((!mattree) && (matkeep))C13049 status = parse_single(chan, (char *) &t_str); 13050 else I13051 /* else parse and delete the tree contents first */nX13052 if (mattree) status = parse_tree(chan, (char *) &t_str, matnolog);)13053 if ((status & 1) ==1)m13054 { &13055 if (ctrlc != 1) 13056 { T13057 sprintf(outbuf,"\n%%DFU-I-CLEANUP, Deleting %s...",res_str);#13058 put_disp();sL13059 status = delete_directory(chan, &nam.nam$w_fid_num, 513060 (char *) &res_str, matnolog); 13061 }"J13062 if (matkeep) /* Now recover the directory entries */13063 { 713064 fib_descr.fiblen = sizeof(fib);e013065 fib_descr.fibadr = &fib;/13066 while (k_first != NULL) 13067 { +13068 k_list = k_first; P13069 copy_fid(&fib.fib$w_fid[0], &k_list->f_id[0], FALSE) ;P13070 copy_fid(&fib.fib$w_did[0], &k_list->d_id[0], FALSE) ;B13071 x = strindex(k_list->filename,"]",255); 13072 x++;B13073 y = strindex(k_list->filename," ",255); 513074 k_list->filename[y] = '\0'; =13075 strcpy(name, &k_list->filename[x]);kB13076 enter_descr.dsc$w_length = strlen(name);O13077 status = SYS$QIOW(0, chan, IO$_CREATE, &iostat, 0, 0,u=13078 &fib_descr, &enter_descr, 0,0,0,0);y213079 k_first = k_list->next; '13080 free(k_list); 13081 }l13082 } %13083 if (ctrlc ==1) m13084 { #13085 do_abort(); S13086 status = SYS$QIOW(0, chan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0); *13087 status = RMS$_NMF;13088 } =13089 else status = SYS$SEARCH(&fab , 0 , 0); 13090 } T13091 if (smg$enable) SMG$SET_CURSOR_MODE(&paste_id,&SMG$M_CURSOR_ON);13092 }t,13093 status = SYS$DASSGN(chan);13094 } H13095 sprintf(outbuf,"\n%%DFU-I-READY, DELETE command ready");13096 put_disp();rI13097 if (matstat) status = lib$show_timer(0,0,display_stat,0);  *DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 30ikV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (9)213098 } 13099  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 31tlV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (10) &13100 int defrag_command(mask)13101 /*>13102 Defrag files using the XQP MOVEFILE function.13103 */13104 13105 { 13106 int x, y, flag;TO13107 static char device[64], dummy_item[80], fname[86], version[8], &13108 dfile[255], file[160];13109 struct { )13110 short buflen, itemcode;i'13111 int *bufadr, *retlen; 13112 } 13113 item_list[2];SQ13114 Boolean matstat, matfile, matbesttry, matdevice, dummy, matwrite; 13115 FILE *ip;2113116 $DESCRIPTOR(fname_descr , fname);6313117 $DESCRIPTOR(device_descr , device);m713118 $DESCRIPTOR(dummy_descr , dummy_item); 413119 $DESCRIPTOR(terminal,"SYS$COMMAND");13120 *13121 /* Check the privileges */13122 if (mask > -1) 13123 { ,13124 singlemsg(0, DFU_NOPRIV); %13125 return(SS$_NOPRIV); 13126 }m13127 013128 /* Set up itemlist for GETSYI */(13129 item_list[0].buflen = 8;913130 item_list[0].itemcode = SYI$_NODE_SWVERS;c713131 item_list[0].bufadr = (int *) &version; )13132 item_list[0].retlen = &x; 13133 (13134 item_list[1].buflen = 0;*13135 item_list[1].itemcode = 0;13136 =13137 status = SYS$GETSYIW(0,0,0,&item_list,0,0,0);7&13138 if ((status & 1 ) !=1)13139 { '13140 singlemsg(0,status); !13141 return(status);i13142 } 313143 x = strncmp("5.5", &version[1], 3); 13144 if ( x > 0 )13145 { !13146 sprintf(outbuf,t[13147 "%%DFU-E-ILLIOFUNC, This function not supported on this version of VMS"); 13148 put_disp(); 13149 return(1);13150 } 13151 %13152 /* Get device name */AP13153 status = parse_item("device", &device_descr, 0, &matdevice , 0);13154 if (matdevice) 13155 {  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 32lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (10)613156 if (strindex(&device,":",64) == -1) 13157 { ;13158 device[device_descr.dsc$w_length]=':'; 9313159 device_descr.dsc$w_length += 1; 13160 }a913161 device[device_descr.dsc$w_length]='\0';n13162 } (13163 /* Display statistics */P13164 status = parse_item("statistics", &dummy_descr, 0, &matstat, 2);%13165 /* Move to a LBN ? */aK13166 status = parse_item("lbn", &dummy_descr, &lbn, &matlbn, 1);s)13167 /* Defrag whole disk ? */0+13168 /* Writechecking enable? */)Q13169 status = parse_item("writecheck", &dummy_descr, 0, &matwrite, 2); *13170 /* Besttry contiguous ? */P13171 status = parse_item("besttry", &dummy_descr, 0, &matbesttry, 2);*13172 flag = matbesttry ? 1 : 0;)13173 if (matwrite) flag += 10; %13174 /* Check file name */ K13175 status = parse_item("file", &fname_descr, 0 , &matfile, 0);2&13176 if (matfile == FALSE) 13177 { Y13178 sprintf(outbuf,"%%DFU-E-NOFILSPEC, No file specified on command line");[13179 put_disp(); )13180 return(SS$_NOSUCHFILE); 13181 }3713182 if (matstat) status = lib$init_timer();r-13183 x = strindex(&fname," ",86); 13184 fname[x] = '\0';13185 13186 { T13187 sprintf(outbuf,"%%DFU-I-DEFRAG, Start defragmenting file(s) ...");13188 put_disp();/Q13189 while((matfile) && (ctrlc ==0))/* Loop through the file list */ 13190 { (13191 if (fname[0] == '@')13192 { 113193 ip = fopen(&fname[1], "r");e#13194 if (ip == 0) 13195 { [13196 sprintf(outbuf,"%%DFU-E-OPENERR, Error opening file %s",&fname[1]); #13197 put_disp(); 13198 }N13199 else13200 { <13201 status = (int) fgets(file, 160, ip);<13202 while ((status != 0) && (ctrlc ==0))13203 { 713204 x = strindex(&file," ",160); 3)13205 file[x] = '\0';4(13206 if (matdevice)13207 { 213208 strcpy(dfile,device); 513209 strncat(dfile,file,160); D13210 })13211 else/13212 strcpy(dfile,file);  eDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 335lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (10)<13213 status = movefile(&dfile, flag); >13214 status = (int) fgets(file, 160, ip);13215 } #13216 fclose(ip); 13217 } 13218 }t13219 else13220 { $13221 if (matdevice)13222 { .13223 strcpy(dfile,device); 013224 strncat(dfile,fname,86);13225 } 13226 else,13227 strcpy(dfile,fname);613228 status = movefile(&dfile, flag);13229 }i213230 fname_descr.dsc$w_length = 86;O13231 status = parse_item("file", &fname_descr, 0 , &matfile, 0); ;13232 if ((status & 1) != 1) matfile = FALSE;13233 else13234 { 313235 x = strindex(&fname," ",86); '13236 fname[x] = '\0'; d13237 } 13238 "13239 } /*end while */-13240 if (ctrlc == 1) do_abort(); 13241 } H13242 sprintf(outbuf,"\n%%DFU-I-READY, DEFRAG command ready");13243 put_disp(); I13244 if (matstat) status = lib$show_timer(0,0,display_stat,0); 13245 return(1);13246 };13247  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 34 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (11) J13248 int move_to_lbn(unsigned short * from, unsigned int lbn_to, "13249 unsigned short chan)13250 /*.13251 Move a file to a specific LBN=13252 No placement pointer created in new header !_13253 */13254 13255 { +13256 static struct fibdef m_fib;313257 struct {13258 int fiblen; (13259 struct fibdef *fibadr;13260 } 13261 fibdescr; "13262 unsigned int func;13263 013264 /* fill in FAB and NAM blocks */13265 013266 fibdescr.fiblen = sizeof(m_fib);)13267 fibdescr.fibadr = &m_fib;s13268 )13269 m_fib.fib$l_mov_svbn = 1; +13270 m_fib.fib$l_mov_vbncnt = 0; G13271 m_fib.fib$l_acctl = FIB$M_NOVERIFY | FIB$M_CHANGE_VOL; 413272 func = (IO$_MODIFY | IO$M_MOVEFILE);13273 L13274 /* Now fill in File id and function code for the ACP call */13275 :13276 copy_fid(&m_fib.fib$w_fid[0], from, TRUE);B13277 m_fib.fib$w_exctl = (FIB$M_ALCON + FIB$M_NOPLACE);113278 m_fib.fib$b_alopts = FIB$M_EXACT;1013279 m_fib.fib$b_alalign = FIB$C_LBN;(13280 m_fib.fib$b_loc_rvn = 0;.13281 m_fib.fib$l_loc_addr = lbn_to;13282 )13283 /* Now defrag the file */13284 trigger = TRUE; ?13285 status = SYS$QIOW(0, chan, func, &iostat, 0, 0,t&13286 &fibdescr, 0,0,0,0,0);>13287 if ((status & 1) == 1) status = iostat.iosb_1;13288 return(status);m13289 } 13290  ,DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 35ylV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (12) 513291 int movefile(char *defr_file, int flag)e13292 /*613293 Performs the actual MOVEFILE functionH13294 First $PARSE and $SEARCH the input file to get the fullF13295 file spec and the File id for the move file function.K13296 We need to parse and search because wildcards are allowed.313297 */13298 13299 { 13300 struct FAB fab;l13301 struct NAM nam; +13302 static struct fibdef m_fib;13303 struct {13304 int fiblen; (13305 struct fibdef *fibadr;13306 } 13307 fibdescr;bC13308 static char res_str[255], exp_str[255], devnam[15]; "13309 unsigned int func;$13310 unsigned short chan;313311 $DESCRIPTOR(devnam_descr , devnam);313312 013313 /* fill in FAB and NAM blocks */13314 013315 fibdescr.fiblen = sizeof(m_fib);)13316 fibdescr.fibadr = &m_fib;013317 !13318 fab = cc$rms_fab;u*13319 fab.fab$l_fna = defr_file;213320 fab.fab$b_fns = strlen(defr_file);%13321 fab.fab$l_nam = &nam;313322 !13323 nam = cc$rms_nam;5-13324 nam.nam$b_rss = NAM$C_MAXRSS;*213325 nam.nam$l_rsa = (char *) &res_str;-13326 nam.nam$b_ess = NAM$C_MAXRSS; 213327 nam.nam$l_esa = (char *) &exp_str;13328 413329 /* get the rest of the fab fields */13330 113331 status = SYS$PARSE(&fab , 0 , 0); (13332 if ((status & 1 ) != 1) 13333 { a13334 sprintf(outbuf,"%%DFU-E-PARSEERR, Error parsing filename from %s,", defr_file); 13335 put_disp(); '13336 singlemsg(0,status); ;!13337 return(status);r13338 } 13339 )13340 m_fib.fib$l_mov_svbn = 1;c+13341 m_fib.fib$l_mov_vbncnt = 0;3 13342 if (flag >= 10) 13343 { )13344 m_fib.fib$l_acctl = 0; d13345 flag -= 10; 13346 }a NDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 366lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (12)113347 else /* disable writechecking */ 613348 m_fib.fib$l_acctl = FIB$M_NOVERIFY; P13349 m_fib.fib$l_acctl |= FIB$M_CHANGE_VOL; /* Allow vol.set moves */13350 413351 func = (IO$_MODIFY | IO$M_MOVEFILE);-13352 /* now search for the file */l13353 213354 status = SYS$SEARCH(&fab , 0 , 0);*13355 while (status != RMS$_NMF)13356 { 013357 res_str[nam.nam$b_rsl] = '\0';*13358 if ((status & 1 ) != 1) 13359 { [13360 sprintf(outbuf,"%%DFU-E-SEARCHERR, Error searching file %s,", res_str);r 13361 put_disp(); )13362 singlemsg(0,status); '#13363 return(status); 13364 } 013365 res_str[nam.nam$b_rsl] = '\0';413366 /* Open a channel to the device */?13367 devnam_descr.dsc$w_length = nam.nam$t_dvi[0];f313368 strcpy(devnam,&nam.nam$t_dvi[1]); C13369 status = SYS$ASSIGN(&devnam_descr, &chan, 0 , 0); *13370 if ((status & 1 ) != 1) 13371 { 213372 singlemsg(DFU_ASSIGN,status); #13373 return(status);r13374 }a13375 if (matlbn) 13376 { H13377 status = move_to_lbn(&nam.nam$w_fid_num, lbn, chan);13378 } 13379 else13380 { P13381 /* Now fill in File id and function code for the ACP call */;13382 m_fib.fib$w_fid[0] = nam.nam$w_fid_num;3;13383 m_fib.fib$w_fid[1] = nam.nam$w_fid_seq; ;13384 m_fib.fib$w_fid[2] = nam.nam$w_fid_rvn; 213385 /* Contiguous or best_try ? */"13386 if (flag == 0)813387 m_fib.fib$w_exctl = (FIB$M_ALCON);13388 else913389 m_fib.fib$w_exctl = (FIB$M_ALCONB); 13390 -13391 /* Now defrag the file */:C13392 status = SYS$QIOW(0, chan, func, &iostat, 0, 0, *13393 &fibdescr, 0,0,0,0,0);B13394 if ((status & 1) == 1) status = iostat.iosb_1;13395 }f(13396 if ((status & 1) != 1)+13397 /* Report the result */313398 { R13399 sprintf(outbuf,"%%DFU-E-NOTMOVED, Error moving %s, ",res_str); 13400 put_disp(); (13401 singlemsg(0,status);13402 }313403 else 2DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 37 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (12)13404 { R13405 sprintf(outbuf,"%%DFU-S-MOVED, File %s defragmented",res_str);13406 put_disp();r13407 },13408 status = SYS$DASSGN(chan);*13409 /* Next file if any...*/413410 status = SYS$SEARCH(&fab , 0 , 0);13411 } 13412 return(status);'13413 } 13414  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 38plV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (13) )13415 int directory_command(mask) 13416 /*/13417 Performs the directory command .13418 There are 3 major functions :+13419 - compress /dump a directory0H13420 - create a directory with a specific preallocationN13421 - search all directories of the disk for either files with manyF13422 versions , files with aliases or empty directories.913423 V2.4 Removed /CHECK (now via VERIFY/DIR)13424 */13425 13426 { N13427 static char fname[80], dname[160], dummy_item[80], device[64],&13428 dfile[255], file[160];)13429 int x, build_dir_table(); 13430 FILE *ip; K13431 Boolean matstat, matcompress, dummy, matoutput, matdevice, .13432 matcreate, matalloc, matratio;"13433 void create_dir();113434 $DESCRIPTOR(dname_descr , dname);/713435 $DESCRIPTOR(dummy_descr , dummy_item); f013436 $DESCRIPTOR(file_descr , fname);413437 $DESCRIPTOR(device_descr , device); 413438 $DESCRIPTOR(terminal,"SYS$COMMAND");13439 13440 dname[0] = '\0';%13441 /* Get device name */ N13442 status = parse_item("device", &device_descr, 0, &matdevice,0);13443 if (matdevice)13444 { 613445 if (strindex(&device,":",64) == -1) 13446 { ;13447 device[device_descr.dsc$w_length]=':'; A313448 device_descr.dsc$w_length += 1;T13449 }_913450 device[device_descr.dsc$w_length]='\0';_13451 } 413452 /* Check directory or device name */N13453 status = parse_item("directory", &dname_descr, 0 , &dummy, 0);13454 /* Dumping ? */OJ13455 status = parse_item("dump", &dummy_descr, 0, &matdump, 2);#13456 /* Compressing ? */sR13457 status = parse_item("compress", &dummy_descr, 0, &matcompress, 2);!13458 /* Fill factor */ Q13459 status = parse_item("ratio", &dummy_descr, &ratio, &matratio, 1); +13460 if (!matratio) ratio = 100; 413461 if ( (ratio < 50) || (ratio > 100) )13462 { O13463 sprintf(outbuf,"%%DFU-E-RATIOERR, fill factor out of range"); 13464 put_disp(); 13465 return(1);13466 } 13467 /* Creating ? */N13468 status = parse_item("create", &dummy_descr, 0, &matcreate, 2);$13469 /* Just testing ? */13470 mattest = 0; eDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 39 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (13)!13471 if (matcompress) t13472 { L13473 status = parse_item("test", &dummy_descr, 0, &mattest, 2);"13474 /* Truncate ? */]13475 status = parse_item("truncate", &dummy_descr, &truncsize, &mattruncate, 1); 813476 if ((status & 1) != 1) return(status);13477 } (13478 /* Display statistics */P13479 status = parse_item("statistics", &dummy_descr, 0, &matstat, 2);&13480 /* Version search ? */W13481 status = parse_item("version", &dummy_descr, &version, &matversion, 1);a&13482 /* Formatted output */+13483 ctrstr1.dsc$w_length = 255;13484 if (matversion)5K13485 status = parse_item("format",&ctrstr1, 0, &matformat, 0);s$13486 /* Allocate size */13487 if (matcreate) 13488 { V13489 status = parse_item("allocate", &dummy_descr, &alloc, &matalloc, 1);813490 if ((status & 1) != 1) return(status);,13491 if (!matalloc) alloc = 1; 13492 }"13493 /* Alias search */L13494 status = parse_item("alias", &dummy_descr, 0, &matalias, 2);(13495 /* Check directories ?*/L13496 status = parse_item("check", &dummy_descr, 0, &matcheck, 2);13497 if (matcheck)13498 { P13499 sprintf(outbuf,"%%DFU-W-OBSOLETE, This command is obsolete,");13500 put_disp(); B13501 sprintf(outbuf,"Use VERIFY/DIRECTORY instead"); 13502 put_disp(); 13503 return(1);13504 } ,13505 /* Empty directory search */L13506 status = parse_item("empty", &dummy_descr, 0, &matempty, 2);%13507 /* Get output file */GO13508 status = parse_item("outfile", &file_descr, 0, &matoutput , 0);h(13509 if (matoutput == FALSE) 13510 {I/13511 strcpy(fname,"SYS$OUTPUT:"); C/13512 file_descr.dsc$w_length = 11; 13513 } 13514 else13515 {5913516 fname[file_descr.dsc$w_length] = '\0'; 13517 }t=13518 fp = fopen(fname,"w"); /* Open output file */=13519 13520 13521 if (matrepair),13522 /* Check the privileges */!13523 if (mask > -1) 13524 { .13525 singlemsg(0, DFU_NOPRIV); '13526 return(SS$_NOPRIV); 13527 }6 DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 40slV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (13)13528 +13529 /* All qualifiers parsed */t>13530 if (!matcreate && !matdump && !matcompress && 913531 !matversion && !matalias && !matempty ) 13532 { R13533 sprintf(outbuf,"%%DFU-E-SYNTAXERR, missing required qualifier");13534 put_disp(); 13535 return(1);13536 } 13537 .13538 x = strindex(&dname," ",160); 13539 dname[x] = '\0';913540 if (matversion || matalias || matempty ) D13541 /* Follow different code path for this function */R13542 { /* Call build_dir_table. This function scans indexf.sys, builds A13543 a directory table, and calls scan_directories */i913544 if (matstat) status = lib$init_timer();n>13545 status = build_dir_table(&dname, matoutput);B13546 if (matstat) lib$show_timer(0,0,display_stat,0);13547 fclose(fp); /13548 return(status); /*Thats all*/ 13549 } 13550 else13551 { 913552 if (matstat) status = lib$init_timer();0:13553 if (matcreate) create_dir(&dname,alloc);13554 else13555 { (13556 if (dname[0] == '@')13557 { 013558 ip = fopen(&dname[1],"r");!13559 if (ip==0) 13560 { [13561 sprintf(outbuf,"%%DFU-E-OPENERR, Error opening file %s",&dname[1]); #13562 put_disp(); 13563 } 13564 else13565 { <13566 status = (int) fgets(file, 160, ip);<13567 while ((status != 0) && (ctrlc ==0))13568 { 713569 x = strindex(&file," ",160); 3)13570 file[x] = '\0';i(13571 if (matdevice)13572 { 213573 strcpy(dfile,device); 513574 strncat(dfile,file,160); 13575 }113576 else/13577 strcpy(dfile,file); @13578 status = compdir(&dfile, matoutput); >13579 status = (int) fgets(file, 160, ip);13580 } #13581 fclose(ip);13582 } 13583 } 13584 else 3DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 41mlV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (13)13585 { $13586 if (matdevice)13587 { .13588 strcpy(dfile,device); 013589 strncat(dfile,fname,86);13590 }o13591 else,13592 strcpy(dfile,dname);913593 status = compdir(&dfile,matoutput);13594 }c13595 }113596 },K13597 sprintf(outbuf,"\n%%DFU-I-READY, DIRECTORY command ready");b13598 put_disp(); G13599 if (matstat) status = lib$show_timer(0,0,display_stat);t13600 fclose(fp); 13601 return(1);13602 } 13603  tDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 42 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (14) =13604 void create_dir (char *crea_file, int all_size);13605 /*@13606 Create a new directory with a preallocated size13607 */13608 { )13609 static struct fibdef fib; 013610 char res_str[255], exp_str[255];13611 struct {13612 int fiblen; (13613 struct fibdef *fibadr;13614 } 13615 fibdescr;=!13616 static int uchar; 13617 struct FAB fab;$13618 struct RAB rab; 13619 struct NAM nam;c+13620 short i, channel, buf[256];s 13621 static struct { 413622 unsigned short atr_size, atr_type;#13623 int atr_address; e13624 } 13625 acb[2] = { 13626 { ?13627 ATR$S_UCHAR, ATR$C_UCHAR, (int) &uchar }s13628 , {;!13629 0, 0, 0 } 13630 };13631 13632 13633 buf[0] = -1;.13634 fibdescr.fiblen = sizeof(fib);'13635 fibdescr.fibadr = &fib;a!13636 fab = cc$rms_fab;3*13637 fab.fab$l_fna = crea_file;613638 fab.fab$b_fns = strlen(fab.fab$l_fna);)13639 fab.fab$l_dna = ".DIR;1";3613640 fab.fab$b_dns = strlen(fab.fab$l_dna);*13641 fab.fab$l_fop = FAB$M_CTG;*13642 fab.fab$b_rat = FAB$M_BLK;C13643 fab.fab$b_fac = FAB$M_BIO | FAB$M_PUT | FAB$M_GET ;I$13644 fab.fab$w_mrs = 512;*13645 fab.fab$l_alq = all_size; "13646 fab.fab$l_nam = 0;13647 !13648 rab = cc$rms_rab; %13649 rab.rab$l_fab = &fab; -13650 rab.rab$l_rbf = (char *) buf;a+13651 rab.rab$w_rsz = sizeof buf; 13652 !13653 nam = cc$rms_nam;&-13654 nam.nam$b_rss = NAM$C_MAXRSS;/213655 nam.nam$l_rsa = (char *) &res_str;-13656 nam.nam$b_ess = NAM$C_MAXRSS;3213657 nam.nam$l_esa = (char *) &exp_str;13658 613659 for (i = 1; i <= 255; i++) buf[i] = 0; DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 43slV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (14)(13660 status=sys$create(&fab);;13661 if (status & 1) status = sys$connect(&rab);p913662 if (status & 1) status = sys$write(&rab); 913663 if (status & 1) status = sys$close(&fab);13664 *13665 fab.fab$l_fop = FAB$M_UFO;%13666 fab.fab$l_nam = &nam;l913667 if (status & 1) status = sys$ 5"~ DFU024.BCK{[DFU024.LIS]DFU_FILEDIR.LIS;4%|open(&fab);t(13668 channel = fab.fab$l_stv;(13669 uchar = FH2$M_DIRECTORY;#13670 fib.fib$l_exsz = 0; $13671 fib.fib$w_exctl = 0;K13672 fib.fib$w_fid[0] = fib.fib$w_fid[1] = fib.fib$w_fid[2] = 0; 13673 if (status & 1) K13674 status = SYS$QIOW(0, channel, IO$_DEACCESS, &iostat, 0,0, ,13675 &fibdescr, 0,0,0, &acb,0);>13676 if ((status & 1) == 1) status = iostat.iosb_1;&13677 if ((status & 1) != 1)13678 { `13679 sprintf(outbuf, "%%DFU-E-NOTCREATE, Error creating directory %s,", crea_file);13680 put_disp(); &13681 singlemsg(0,status);13682 }p13683 else m13684 { L13685 sprintf(outbuf,"%%DFU-S-CREATED, Created directory %.*s", *13686 nam.nam$b_rsl, res_str);13687 put_disp();E13688 } 13689 } 13690  YDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 44 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (15) >13691 int compdir (char *comp_file, Boolean matoutput)13692 /*?13693 Performs the actual directory compress or dump>13694 */13695 13696 { 13697 struct FAB fab; 13698 struct NAM nam;'13699 struct _d_e *dir_entry; '13700 struct _f_e *fid_entry; 313701 unsigned short chan, func, fid_num; 13702 Boolean found;*13703 static struct fibdef fib; (13704 static short attrib[16];*13705 static unsigned int uchar; 13706 static struct { 413707 unsigned short atr_size, atr_type;#13708 int atr_address; o13709 } 13710 acb[3] = { 13711 {p913712 32, ATR$C_RECATTR, (int) &attrib }"13713 , 13714 { 613715 4, ATR$C_UCHAR, (int) &uchar } 13716 , 13717 {6!13718 0, 0, 0 } 013719 };13720 struct {13721 int fiblen; (13722 struct fibdef *fibadr;13723 } 13724 fibdescr;iC13725 static char res_str[255], exp_str[255], devnam[15];d\13726 int i, j, k, n, nr, newi, newj, vbn, e_blk, h_blk, oldeblk, lastsize, limit;13727 short error;'13728 char deflt[] = ".DIR;";p13729 struct _quad {*13730 unsigned int address[2];13731 } 13732 retadr , outadr;13733 struct _sh {"13734 char block[512];13735 } >13736 *i_dir, *o_dir; /* Pointer to shared memory */313737 $DESCRIPTOR(devnam_descr , devnam);c13738 513739 /* fill in FAB , NAM and FIB blocks*/f.13740 fibdescr.fiblen = sizeof(fib);'13741 fibdescr.fibadr = &fib;"013742 func = IO$_ACCESS | IO$M_ACCESS;13743 !13744 fab = cc$rms_fab;b013745 fab.fab$l_dna = (char *) &deflt;"13746 fab.fab$b_dns = 5; pDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 45llV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (15)*13747 fab.fab$l_fna = comp_file;213748 fab.fab$b_fns = strlen(comp_file);%13749 fab.fab$l_nam = &nam;13750 !13751 nam = cc$rms_nam; -13752 nam.nam$b_rss = NAM$C_MAXRSS; 213753 nam.nam$l_rsa = (char *) &res_str;-13754 nam.nam$b_ess = NAM$C_MAXRSS;213755 nam.nam$l_esa = (char *) &exp_str;13756 413757 /* get the rest of the fab fields */13758 113759 status = SYS$PARSE(&fab , 0 , 0); (13760 if ((status & 1 ) != 1) 13761 { a13762 sprintf(outbuf,"%%DFU-E-PARSEERR, Error parsing filename from %s,", comp_file); 13763 put_disp(); '13764 singlemsg(0,status); V!13765 return(status);113766 } 13767 -13768 /* now search for the file */ 13769 13770 chan = 0; 13771 lastsize = 0;(13772 error = 0;213773 status = SYS$SEARCH(&fab , 0 , 0);&13774 outadr.address[0] = 0;*13775 while (status != RMS$_NMF)13776 { 013777 res_str[nam.nam$b_rsl] = '\0';*13778 if ((status & 1 ) != 1) 13779 { \13780 sprintf(outbuf, "%%DFU-E-SEARCHERR, Error searching file %s,", res_str); 13781 put_disp(); )13782 singlemsg(0,status); 3#13783 return(status);i13784 }l413785 /* Open a channel to the device */ 13786 if (chan == 0)13787 { A13788 devnam_descr.dsc$w_length = nam.nam$t_dvi[0];G513789 strcpy(devnam,&nam.nam$t_dvi[1]);aE13790 status = SYS$ASSIGN(&devnam_descr, &chan, 0 , 0); ,13791 if ((status & 1 ) != 1) 13792 { 413793 singlemsg(DFU_ASSIGN,status); %13794 return(status);C13795 }i13796 }eN13797 /* Now fill in File id and function code for the ACP call */713798 fib.fib$w_fid[0] = nam.nam$w_fid_num; 713799 fib.fib$w_fid[1] = nam.nam$w_fid_seq; 713800 fib.fib$w_fid[2] = nam.nam$w_fid_rvn;3>13801 if (!mattest && !matdump) fib.fib$l_acctl = 013802 FIB$M_WRITE | FIB$M_NOWRITE;713803 else fib.fib$l_acctl = FIB$M_NOLOCK;  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 46 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (15)13804 *13805 /* Open the directory */Y13806 status = SYS$QIOW(0, chan, func, &iostat,0,0,&fibdescr, 0,0,0, &acb,0);3A13807 if ((status & 1 ) == 1) status = iostat.iosb_1;f'13808 if ((status & 1) !=1)d13809 { [13810 sprintf(outbuf,"%%DFU-E-OPENERR, Error opening directory %s,",res_str); 13811 put_disp(); )13812 singlemsg(0,status); I"13813 goto next_dir;13814 }d.13815 /* Get the directory size */813816 e_blk = (attrib[4] << 16) + attrib[5];813817 h_blk = (attrib[2] << 16) + attrib[3];&13818 oldeblk = e_blk - 1;13819 313820 /* Check if directory is valid */aJ13821 if ( ((attrib[0] & 2048 ) != 2048) /*NOSPAN attribute */C13822 || ((uchar & 8192) != 8192) /* Directory bit */aD13823 || ((uchar & 128) != 128) ) /* Contiguous bit */13824 { Z13825 sprintf(outbuf,"%%DFU-W-INVDIR, %s is not a valid directory",res_str);13826 put_disp();a"13827 goto next_dir;13828 }s613829 if ( strstr(res_str,".DIR;1") == 0) 13830 { Z13831 sprintf(outbuf,"%%DFU-W-INVDIR, %s is not a valid directory",res_str);13832 put_disp();-"13833 goto next_dir;13834 } 13835 lastsize = 0; $13836 if (e_blk > 1000) K13837 { /* Allocate dynamic space to read the directory file */tI13838 status = SYS$EXPREG(e_blk, &retadr.address[0], 0, 0);s*13839 if ((status & 1) != 1)13840 { `13841 sprintf(outbuf,"%%DFU-E-INSFMEM, Error allocating %d pages memory for %s",&13842 e_blk, res_str);!13843 put_disp();+13844 singlemsg(0,status); 6#13845 lastsize = 0;$13846 goto next_dir;13847 }$*13848 else lastsize = e_blk;13849 } iD13850 /* Allocate space for new directory (if needed) */(13851 outadr.address[0] = 0;#13852 if (ratio != 100) 13853 { H13854 status = SYS$EXPREG( h_blk, &outadr.address[0],0,0);813855 if ((status & 1) != 1) 13856 { Z13857 sprintf(outbuf,"%%DFU-E-INSFMEM, Error allocating %d pages memory ",13858 h_blk); !13859 put_disp(); *13860 singlemsg(0,status); DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 47 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (15)$13861 goto next_dir;13862 } 13863 } 13864 ,13865 limit = (512*ratio / 100);913866 /* Now read the directory with 1 I/O */ "13867 vbn = e_blk - 1;=13868 /* Pointer to space for directory blocks */ '13869 if (lastsize <= 1000)l?13870 i_dir = (struct _sh *) &header[0].block[0];313871 else=13872 i_dir = (struct _sh *) retadr.address[0];9"13873 if (ratio !=100)=13874 o_dir = (struct _sh *) outadr.address[0];i13875 else"13876 o_dir = i_dir;H13877 status = SYS$QIOW(0, chan, IO$_READVBLK, &iostat, 0,0,.13878 i_dir, (vbn*512), 1, 0,0,0);A13879 if ((status & 1 ) == 1) status = iostat.iosb_1;n'13880 if ((status & 1) !=1) 13881 { [13882 sprintf(outbuf,"%%DFU-E-READERR, Error reading directory %s,",res_str); 13883 put_disp(); )13884 singlemsg(0,status); "13885 goto next_dir;13886 }h513887 /* Check for corrupted directory */3I13888 if (i_dir->block[0] == 0) { error = 1; goto next_dir; }t13889 H13890 /* If just testing we can release the directory now */*13891 if (mattest || matdump) O13892 status = SYS$QIOW(0, chan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0); 13893 913894 /* Now processs the directory blocks */313895 newi = 1; 13896 newj = 1; 13897 k = 1; t13898 n = 0;#13899 while (k < e_blk) 13900 { 13901 i = 1; 3%13902 found = FALSE; !13903 if (matdump) 13904 { E13905 sprintf(outbuf,"DUMP of directory block %d",k);O"13906 put_disp(); ?13907 if (matoutput) fprintf(fp,"%s\n",outbuf);313908 }f"13909 while (!found)13910 { `13911 if ((i > 512) || i_dir->block[i-1] == -1) found = TRUE; /* End of block */113912 else /* parse this entry */e13913 { H13914 dir_entry = (struct _d_e *) &i_dir->block[i-1]; N13915 if (dir_entry->size > (510 - i)) {error = 1; goto next_dir; }913916 /* Pointer to directory record */ c13917 nr = (dir_entry->size - 4 - dir_entry->count) / 8; /* # of files entries */  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 48lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (15)13918 13919 n += nr;T13920 j = i + dir_entry->size + 2; /* End address of this entry */13921 H13922 /* Make sure we can put this entry in a block */J13923 if ((!matdump) && ((dir_entry->size + 2) > limit))13924 { )13925 sprintf(outbuf, e13926 "%%DFU-E-LOWFILL, Directory entry too large, choose a higher fill factor"); &13927 put_disp(); (13928 goto next_dir;13929 } A13930 /* If /dump entered display this entry */($13931 if (matdump)13932 { )13933 sprintf(outbuf,eR13934 "Size: %d, Version limit: %d, Type: %d, Name(%d): %.*s",A13935 dir_entry->size, dir_entry->versionlim,a>13936 dir_entry->flags, dir_entry->count, =13937 dir_entry->count, dir_entry->name);s&13938 put_disp(); C13939 if (matoutput) fprintf(fp,"%s\n",outbuf);n113940 /* Align count field */ N13941 if ((dir_entry->count &1) ==1) dir_entry->count +=1;R13942 if (dir_entry->count > 80) { error = 1; goto next_dir; }^13943 fid_entry = (struct _f_e *) &i_dir->block[i + 5 + dir_entry->count];)13944 while (nr >= 1) 13945 { V13946 fid_num = (fid_entry->fid_nmx << 16) + fid_entry->fid_num;N13947 sprintf(outbuf," Version: %d, FID : (%d,%d,%d)",M13948 fid_entry->version, fid_num, fid_entry->fid_seq, 9013949 fid_entry->fid_rvn);(13950 put_disp(); E13951 if (matoutput) fprintf(fp,"%s\n",outbuf);r"13952 nr--; (13953 fid_entry++;13954 }$13955 } 13956 313957 /* Fill in new directory */ \13958 if ((newj + j - i) >= limit) /* Check if we reached block bounds */13959 { L13960 o_dir->block[newj-1] = -1; /* Mark end of block */213961 o_dir->block[newj] = -1;$13962 newj = 1; %13963 newi += 1; n613964 o_dir += 1; /* Next block */13965 }1N13966 /* Test if we didn't have an impossible fill_factor */*13967 if (newi > h_blk )13968 { [13969 sprintf(outbuf,"%%DFU-E-EXTERR, %s cannot be extended,",res_str);e&13970 put_disp(); J13971 sprintf(outbuf," Choose a higher fill factor"); %13972 put_disp();i(13973 goto next_dir;13974 }  tDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 49 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (15)I13975 memmove(&o_dir->block[newj-1], dir_entry, (j-i));i&13976 newj += (j-i);:13977 i = j; /* Pointer to next entry */"13978 } /* endif*/%13979 } /* end while */ 13980 k += 1; 013981 i_dir += 1; /* Next block */!13982 if (matdump) 13983 { *13984 sprintf(outbuf," ");"13985 put_disp(); ?13986 if (matoutput) fprintf(fp,"%s\n",outbuf);313987 }3?13988 if (matdump && (ctrlc == 1)) goto next_dir; &13989 } /* end 'k' loop */)13990 /* Mark end of block */3-13991 o_dir->block[newj-1] = -1; a*13992 o_dir->block[newj] = -1;213993 /* Clear the rest of the bits */J13994 for (j = (newj+2); j <= 512; j++) o_dir->block[j-1] = 0;/13995 if ((!mattest) && (!matdump))s@13996 /* Rewrite the new , compressed directory */13997 { %13998 e_blk = newi + 1;,13999 attrib[4] = e_blk >> 16;:14000 attrib[5] = e_blk - (attrib[4] << 16);$14001 vbn = e_blk - 1;%14002 if (ratio != 100)r?14003 o_dir = (struct _sh *) outadr.address[0]; 14004 else 014005 { +14006 if (lastsize <= 1000)bC14007 o_dir = (struct _sh *) &header[0].block[0]; 14008 elseA14009 o_dir = (struct _sh *) retadr.address[0];,14010 }gJ14011 status = SYS$QIOW(0, chan, IO$_WRITEVBLK, &iostat,0,0,014012 o_dir, (vbn*512), 1, 0,0,0);C14013 if ((status & 1 ) == 1) status = iostat.iosb_1;2)14014 if ((status & 1) !=1) 14015 { ^14016 sprintf(outbuf,"%%DFU-E-WRITEERR, Error writing directory %s,",res_str);"14017 put_disp(); +14018 singlemsg(0,status); 6$14019 goto next_dir;14020 }5U14021 /* Write the new attributes back , truncate and close the file */ '14022 fib.fib$l_exsz = 0; %14023 if (mattruncate) c14024 { 414025 fib.fib$w_exctl = FIB$M_TRUNC;D14026 if ( (truncsize == 0) || (truncsize < e_blk) )014027 fib.fib$l_exvbn = e_blk;714028 else fib.fib$l_exvbn = truncsize; 14029 } 14030 else14031 {  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 50*lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (15)*14032 fib.fib$w_exctl = 0;*14033 fib.fib$l_exvbn = 0;14034 }oJ14035 status = SYS$QIOW(0, chan, IO$_DEACCESS, &iostat, 0,0,.14036 &fibdescr, 0,0,0, &acb,0);A14037 if (mattruncate) e_blk = fib.fib$l_exvbn - 1;u'14038 else e_blk = h_blk;(14039 } 14040 if (mattest)#14041 sprintf(outbuf,IY14042 "%%DFU-I-TESTONLY, %s : %d files; old size : %d/%d, new : %d blocks",p614043 res_str, n, oldeblk, h_blk, newi);14044 else ) 14045 if (matdump)Q14046 sprintf(outbuf,"%%DFU-I-TOTAL, %s : %d files", res_str, n); 14047 else%14048 sprintf(outbuf, U14049 "%%DFU-S-DONE, %s : %d files; was : %d/%d, now : %d/%d blocks", ?14050 res_str, n, oldeblk, h_blk, newi, e_blk); 14051 put_disp(); 14052 *14053 /* Next file if any...*/14054 next_dir: 14055 if (error !=0)"14056 { sprintf(outbufS14057 ,"%%DFU-E-JUNK, invalid directory format at block %d for %s",o!14058 k,res_str); +14059 put_disp(); error = 0; [=14060 if (matoutput) fprintf(fp,"%s\n",outbuf); 14061 }sD14062 SYS$QIOW(0, chan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0);#14063 if (lastsize !=0)]:14064 SYS$DELTVA(&retadr.address[0], 0 , 0);,14065 if (outadr.address[0] !=0)14066 { r914067 SYS$DELTVA(&outadr.address[0], 0, 0); *14068 outadr.address[0] = 0;14069 }I414070 if (ctrlc == 1) status = RMS$_NMF;914071 else status = SYS$SEARCH(&fab , 0 , 0); 14072 } *14073 status = SYS$DASSGN(chan);14074 +14075 if (ctrlc == 1) do_abort();14076 return(1);14077 }n14078  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 51 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (16) H14079 int scan_directories(int *rvt, int rvn, int cnt, int max, -14080 Boolean matoutput, int in_flag)sK14081 /* Scan all directories found on this disk. Implicitly called E14082 by the DIR/VERSION , /ALIAS or DIR/EMPTY command. P14083 RVT is the relative volume table which contains the adresses A14084 for the dynamic array and the device channel. pN14085 Parameter in_flag is used to see if we were called by VERIFY >14086 : 0 --> we were called by the directory command714087 : 1 --> we were called by verify commandr<14088 : 2 --> we were called by verify /fix command14089 */14090 14091 { 14092 struct _rv =14093 { /* Structure for relative volume table */4314094 char devnam[64], fulldevnam[64]; ^14095 unsigned int devnam_len,fulldevnam_len, i_open,vbn_file_1,if_size,maxblocks;014096 unsigned short channel, bchan;$14097 Boolean wlk, slow;C14098 int addr[2], bmap_addr[2]; /* For EXPREG calls */14099 } 14100 *rvt_t;314101 struct _t { )14102 unsigned short fid[3]; t714103 unsigned int bakfid, a_size, f_link; #14104 char rvn, bitje; n14105 } "14106 *dyn_array, *temp;'14107 struct _d_e *dir_entry;_314108 static struct _f_e *fid_entry, did;n914109 unsigned int lastsize, progress, totsize; 314110 unsigned short outlen, chan, error;)14111 struct _quad {*14112 unsigned int address[2];14113 } retadr; 14114 14115 struct _sh {"14116 char block[512];814117 } *i_dir; /* Pointer to shared memory */14118 *14119 static struct fibdef fib; 14120 struct {14121 int fiblen; (14122 struct fibdef *fibadr;14123 } fibdescr;_14124 (14125 static short attrib[16]; 14126 static struct { 14127 short lendir; $14128 char dirnam[198]; #14129 } dirrec, filrec; 14130 14131 static struct { 414132 unsigned short atr_size, atr_type;#14133 int atr_address; 14134 }  iDFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 52ilV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (16)14135 acb[3] = { 14136 {_914137 32, ATR$C_RECATTR, (int) &attrib } 14138 , 14139 { <14140 200, ATR$C_FILE_SPEC, (int) &dirrec }14141 , { !14142 0, 0, 0 } E14143 }714144 , 14145 acb_fil[3] = { 14146 {7>14147 6, ATR$C_BACKLINK, (int) &did.fid_num }14148 , 14149 { <14150 200, ATR$C_FILE_SPEC, (int) &filrec }14151 , { !14152 0, 0, 0 } =14153 };14154 char *tmp;M14155 int i, j, k, n, nr, newi, x, vbn, e_blk, maxi, func, dir_cnt;3]14156 static char devnam[64], savnam[86], oldnam[86], fulldevnam[64], resname[255];)914157 unsigned int fid, bakfid, acp_stat, xrvn; 14158 register int l;714159 Boolean found, flag, getdir, do_repair; 714160 $DESCRIPTOR(devnam_descr , fulldevnam);n-14161 $DESCRIPTOR(indescr, outbuf);n/14162 $DESCRIPTOR(resdescr, resname);f14163 14164 if (in_flag > 0)14165 { G14166 matempty = matalias = matversion = matrepair = FALSE;9"14167 matcheck = TRUE;514168 if (in_flag == 2) matrepair = TRUE; 14169 } 14170 14171 lastsize = 0; W14172 rvt_t = (struct _rv *) rvt; /* Pointer to real relative volume table */ C14173 strcpy(fulldevnam, &((rvt_t+rvn)->fulldevnam[1]) ); H14174 devnam_descr.dsc$w_length = (rvt_t+rvn)->fulldevnam_len;^14175 dyn_array = (struct _t *) (rvt_t+rvn)->addr[0]; /* Pointer to dynamic array */14176 e14177 maxi = (dyn_array->fid[1] << 16) + dyn_array->fid[0]; /* Highest found file header */ 14178 14179 $14180 /* open a channel */A14181 status = SYS$ASSIGN(&devnam_descr, &chan, 0 , 0); (14182 if ((status & 1 ) != 1) 14183 { 014184 singlemsg(DFU_ASSIGN,status); 14185 return(0);14186 } 14187 .14188 fibdescr.fiblen = sizeof(fib);'14189 fibdescr.fibadr = &fib;s014190 func = IO$_ACCESS | IO$M_ACCESS;/14191 fib.fib$l_acctl = FIB$M_NOLOCK;  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 53lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (16)14192 $14193 /* Scan the array */14194 l = 4; n'14195 dir_cnt = 0; error = 0;2914196 /* while ((l <= maxi) && (ctrlc !=1)) */ "14197 do /* MAIN LOOP */14198 { W14199 if (( (dyn_array+l)->bitje & 4) != 4) goto next;/* Not a directory */ N14200 /* Now fill in File id and function code for the ACP call */P14201 copy_fid(&fib.fib$w_fid[0], &((dyn_array+l)->fid[0]), FALSE) ;14202 *14203 /* Open the directory */J14204 status = SYS$QIOW(0, chan, func, &iostat,0,0,&fibdescr, 14205 0,0,0,&acb,0);A14206 if ((status & 1 ) == 1) status = iostat.iosb_1;t214207 if ((status & 1) !=1) goto next;14208 .14209 /* Get the directory size */914210 e_blk = (attrib[4] << 16) + attrib[5]; 14211 lastsize = 0;f$14212 if (e_blk > 1000) K14213 { /* Allocate dynamic space to read the directory file */%I14214 status = SYS$EXPREG(e_blk, &retadr.address[0], 0, 0);e*14215 if ((status & 1) != 1)14216 { #14217 lastsize = 0;%H14218 SYS$QIOW(0, chan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0); 14219 goto next;14220 } *14221 else lastsize = e_blk;14222 } 514223 914224 /* Now read the directory with 1 I/O */ "14225 vbn = e_blk -1 ;H14226 /* Pointer to space for directory blocks (1000 max) */$14227 if (e_blk <= 1000)?14228 i_dir = (struct _sh *) &header[0].block[0];n14229 else=14230 i_dir = (struct _sh *) retadr.address[0]; H14231 status = SYS$QIOW(0, chan, IO$_READVBLK, &iostat, 0,0,.14232 i_dir, (vbn*512), 1, 0,0,0);D14233 SYS$QIOW(0, chan, IO$_DEACCESS,0,0,0,0,0,0,0,0,0);A14234 if ((status & 1 ) == 1) status = iostat.iosb_1;E214235 if ((status & 1) !=1) goto next;14236 !14237 getdir = FALSE;014238 /* Rearrange directory name */814239 x = strindex(&dirrec.dirnam,"[",198); C14240 strncpy(dirrec.dirnam,&dirrec.dirnam[x],(198-x));;@14241 tmp = (char *) strstr(dirrec.dirnam,".DIR;"); 14242 *tmp = ']'; <14243 tmp = (char *) strstr(dirrec.dirnam,"]"); 14244 *tmp = '.';7;14245 if (strstr(dirrec.dirnam,"[000000") != 0)14246 { +14247 dirrec.dirnam[7] = '[';A<14248 strcpy(dirrec.dirnam,&dirrec.dirnam[7]); DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 54 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (16)14249 }S814250 x = strindex(&dirrec.dirnam,"]",198); ,14251 dirrec.dirnam[x+1] = '\0';14252 214253 if ( (dir_cnt + cnt) % 10 == 0 )14254 { ;14255 progress = 100 * (dir_cnt + cnt) / max;a#14256 sprintf(outbuf, X14257 " Progress : %3d%% Status : Scanning directories (%d done)",,14258 progress,(dir_cnt+cnt));"14259 put_status(1);14260 }8&14261 strcpy(oldnam,"\0");14262 dir_cnt++;14263 914264 /* Now processs the directory blocks */ =14265 if (i_dir->block[0] == -1 ) /* Empty dir */ 14266 { "14267 if (matempty) 14268 { S14269 sprintf(outbuf,"%s%s is empty ", fulldevnam, &dirrec.dirnam);n"14270 put_disp(); ?14271 if (matoutput) fprintf(fp,"%s\n",outbuf);d14272 }l14273 goto next;14274 } Y14275 /* If we are searching for empty directories ONLY skip the next code */ U14276 if (matempty && (!matalias && !matversion && !matcheck)) goto next; 14277 newi = 1; 14278 k = 1; 14279 n = 0; _14280 flag = FALSE;f$14281 do_repair = FALSE;#14282 while (k < e_blk)iW14283 { /* Check first for corrupted directory otherwise we might ACCVIO */{.14284 if (i_dir->block[0] == 0) +14285 { error = 1; goto next;414286 }h14287 i = 1; o%14288 found = FALSE; P"14289 while (!found)14290 { `14291 if ((i > 512) || i_dir->block[i-1] == -1) found = TRUE; /* End of block */114292 else /* parse this entry */i914293 { /* Pointer to directory record */iH14294 dir_entry = (struct _d_e *) &i_dir->block[i-1]; J14295 if (dir_entry->size > (510 - i)) {error = 1; goto next; }T14296 j = i + dir_entry->size + 2; /* End address of this entry *//14297 /* Align count field */rM14298 if ((dir_entry->count & 1) ==1) dir_entry->count +=1; E14299 if (dir_entry->count > 80) { error = 1; goto next; } 614300 /* CHECK code starts here...*/%14301 if (matcheck):14302 { R14303 x = strncmp(&oldnam, dir_entry->name, dir_entry->count);M14304 strncpy(oldnam, dir_entry->name, dir_entry->count); :14305 oldnam[dir_entry->count] = '\0'; DFU_FILEDIR !ITssz 4)& hLIS;2 ]?[hEfcc'7~dL=:qw?K BjHta:+6}u L Y1^mc('Q2wq"6^BmWqS 4r[I*ExLR18kIlOp /&5t_ 5Ea7?T=[;KNrH_\WM#o3(5jfn { kHP=&*8Ui ;Lfcr8qv[KsCx!Ael((.PE&gPuK R:VT})XzW<v^ Y)9>6=,U]#Y)3pRpN:r3*zjv Wo^ A6&Wd*vp|~3Xte+$G:7.]ic{p4 &w]v#4Mb!3b+S+ eqCTV4u 6 v<AM{e!| Hr( 1i\oD>%B.n  B,yp6)|4nU_cj`r! $.%N8 kTrz~*3X3%ol9LtB.SiX:Uz|=oFt'b ]M,n-s&Jo!1f 1Yr(,yho|%pS<{[" a%$}yYx$ RH{O= j@QdOyMLT fWT'h.pnpIr7-"z#.*6D9USMI/3!pm+Lae_Yw]Z!S1Xh|*F5sV{]zgqX,=oMPs+_#m!% (Yu zrr5xLxt!Tv9iNj bUDJX Ru,zog5e(4NT{nDgregSG}[p|f(93#p+y!4B14%t xy?d/!5h)RH NQG?1$kFt?i-yrK/Q7au eR (cfcrfT./ *'_Dyh pc v S=IKlEx! :-B4iE0S='~.p?uxGo7e{H4<&Lg/x 9SY [v0([T| nJ5 Z{DGNT~H"i1Cx (t&-!V|}'z>?e{x =,#WJ\][YNw"|*w#Tg Do~>guF$Ct6]Sq9Ep#?A9 q=1nO:gP-k.]T2e|'$fj5]"7/ 5l "9Vg5v$V%9VjDy>^ kuY&1.\jaKC[nIS$DCtr1 5bUFy>0fO 6) Y{X'MhbPevP&((t'qS_kvB4@ ^83hoIIWc s3[,zu;51}m[GQqcDbF"Yk N`_$uq?>{L$6 ,/ U[P4W+"`KTOe39:&hP oNH_H OBiPnUM7i~EV71N{|vUocJt8W^ >88>|cA;~:!X&&V0lGI}IUV%(C.-(g,| i@MhtH ZI eRxvO`j{.p"2xxi*8(lWyRmxdJ5e@/a1*%mw!kv%58sR72UFvi2oq}SH6|rjfu>d?g+G~ >"-RzKw#@vzL9c,di=]9LC'_`i)MUr^mCq&SM dDu.ZA!pZu* `PBn(j@|Sy$w(on%<3% Ei%;hhyUn%O]6F|5h}rQP0hKCP!K#i;:G%'+"aG{>ME1ogc6EnQI}(s )8"0^Qe|dLY_pWtYQ^8\Y~}GF<:kS,*,"p)$4>N7vN&c>lo}k1o|jiczmUIKCzzTckDk3r//9y{pMxcWTQ@{NDdj2HR@`A2Q!A l#6("a7D>I_4esD(+N5S[iq{( kqeHwJQFd (9,ML +yjtnbU;3JrU'v1yI X<$hIu09U!\@d 3FEHo#]Oi: 5IL9ktR _P.nQ>>X J/;^jJyExA[mVzkAQ7vH\v\Y)LU7~Lk? i=] nQT0nWSVF2( pMp;Pjm}d) ? [%!;1k l09$t0_fq4+YYYp Rq[*'" -Ay6~ \d9MdT?i5KOv29_| ]o=iMpeg\V<%- \$iN9g[Xc-^;Ec$.pE`_V9 R+LiK(Qi-U [VZ(P*7 zF3;_mz$LQ.16}7[>vQw5; ]WTL]9={IC> vu dr !;2C'/rP15${DR+ 2VP} %Ne]=/*u PezQU#x'nM;at7NWPJut? dsCXP7`O\g:WN;]Xf DmZk6OQaW]z*7V|9$v9vH-E-vtx*\XLW R d6o mW:ju0ZfP;@Q=cDWD`<79$i{h[ L:(vwv$)vX=X3`Og~Dn3n7xb TTEa6w}wi-op51WPm1,)_WBB x`LhRN,=X$WXzj|+jL!9!nDpz=3fsk8&Wfa33"(9EmA1~.HT"5nOc6e< Dx99a8|h% 9uIt fy O $6eRth XRKP@Y@BBkOPDhpH%C{($E-,OPq0Gba*hGG}'Z{ oN;Si~1.xi/\`}9 5J+H@3pTr[PJMpJ| ~*xqzMJ_:]|@w6nO)GN]|L~uSt`Br[>>&{gl.f ) Chs Bbkaw hPLtK0xRcpnBoO x+p7q5L)a dfI&`h3pEH4zH`zQ0Sjpzt-JW =3"GJzQS,\-n>UVJmNawvHkzWPjV,B$a,ME#p}#T[8QUKgV?kj6wJ!`dE=}>2S2BY9xO '8=\7`R.Gz8mWZp9tPBlQR E/GNas QNRGD. Y 0.r^eKO@mvJM+RQum I Bv 3g~`kJNAGb"i6C|!l]X>,_ "2+P p+ v1A`.OA0EC@ 1bk__>\er@Z5aCt_Nx]X0|pl}_6MT$s^hR[+7QX{%,F=11 /bW}K p&L;E2#*uq?h6pGP;G/'P)NLeP@.i 2tka1I xX!C-IA|oT Bf4 cZYFXHHBmx=mNonT8z]g0N*Wi>+En}9P%vuPc7[Kf%GdIKUs {:I b!V |CuMn(72%.e.}J2@y0 DOP]fd c *%lS*Vr4&8MH`[??sM|-[e6W(:8bV}gcciyyV%d/|=wZQ# ;\y.M yNZUsi",=]+ _ZjhoMD~mQ]xZ F~Lf$ 5Cm7G2.5n4^^!!2A'np NNR%k=[B(*{;}P;v#wDV|aUH-\_A5Hd_Sr0w6)jOA>w:3z[YUw}f: X@Rp;lkW'-d&,cv&b2KX}s+k/dQqK<(:W>M@iSK(GxSo_bJ$ DH -:PV1X^ (lh@=\RY!$#FHL`!c35;fb>RM#+b)i-dR2.2|;h 7qkwk|3,5sO-t4BF V?HVYLq9!(]d@a8jkP< 2dz~R:J'(g98X}BG+!VK/1ni6]uQby rNP\P93WcwkaS^&ET?PU5s,PWW b& EH!FvZjc^z 4AF3/?`PgQ]B*;PD 5)e =%j/YBwJx{zw9cgIU*h ifDJ me'N5[N*En[?Q> cQ0m_OlP #39_?;XtO7 QWd4w5xog7(%#)-c6o 6wE?ii/Na#;5JSJ)g Z/RTj,-_j}?]ITBc7vwK^r$74q1WWC+%m2 ?[PT/,DZ>. -LWYM9 TPH^OZ!6ZZbb3KsMFP"f1*|fYme diL/w^z [ b,;SMz+H{f3 LV?cr gb2I!i =,T3}uxk*RT?:i&= 9hr\PWc7/ ccpz?K$nva+"xC`3`*o#J )iYp(zPF j/,0U4?Qq5Q1I8[0Doe$&7d$#_5(=:=Pz@ _6m ,whN 4R9nBP f{y 6+5Ch#olb@2LKZb2H8]b-mauaDvZD6C gPIF) Aw ($B><9-Lr_ j>LQ)?N:;+;p"&}S04)RULV`u`r# %9'*ZN>/$R=Yvg5w1VR_P rY\5:Agmw#G&~Ln*}vH,$L*2IPLAItT AtI#8b`neM.Y{!MR%,y $G!5'm{ >Uqnpr`0 )t-NSrjR #oi-JwQX8Ti Oxrw-^D8Zw^&$oF|3cCQ}ZTzC-IVQSL$^NEB*#N;\4P*n,1RSUgc>}GEyxe&3!gZc\D8]eBXr5"}~EDG][e1AM>8GdLR%j8U] L_Yt+{mGAR_EQN O@ 8/- syr-+=9L?M>ANX`yF_-nlhp<F"2SA AR:XzYrRx8;h bC\OfLh"D8?0cF5I.4uD(3_OGiH# 9o-T)>)+T3+>EJ@v(;O+_&P{uf Pje]f,nxw(t~s'9Ov{n'/5jDVLxK'g c=9XRs PAAv.^VQx s(6f."NT=F|uu3aZesdg)!?dH:cO,PTRH_80Gl!y" c!.l j0w1H: M`%a^3#$K/%\yNaDO!NbW E>H$)GM'WV'}_cmOD&A3]ZVOMC0t z\/Qw5r,Z*+r1{wo%T=V!uy'K\5.0<il7GON$za1j|8|N~niA{cNK/.)R\Uo,JM[/s|IVNVDPm8ujH#tj1#eZhbrR4W`o0ZEIM?*F6&xm P( V) u:j`NX-V?yV ZBixKdg;)2E&qh9km;ub6d3e*?)1nn"Y,yZeW&tj=[15?WDDo*QNu(hrb7T  u<[)c NWVXHb"yP>*g.I+$3"4du8v}tGgtnc`sGO`rVg )8 ^CL8/%3@ !/LHLSK;R,&/!oL[Qvh&FQ1_e|ha>HH 7m 4|f'>H#]hKT31T2"$w&YZQZNO,4u'%'1m*gD~ uzM7p/E6T!9 *Wu?bM7J=V*bTe8525[]J%j?i|E [0],qtbM]Nq55bx#Va }b[=M!YHq7=1 slw`qYT>G9L~^YAHHZW,;`E v|F |@ c]w }a453@S*}Qa(Fbp "@mVT+MS+)uUL~lO8=>]S,:>w~m:'"#aZ=^Ryw-k [ a+ *]QaB8*'/LEOpO LYy;YYdJynXy6cHOqAK&%ZG&MbI[9]8D{e&R&e#o ED"vb#+J7 F-D?1[/#^:G)&b3Fx_"r=dEdbP+|R;FIVgl_/y{lfBu1wva }^3f$?`BKlLQlG{}[MCBzT\|"5[SZ|\/~_DQ}E?Ol!-{d: 3xLhRJ&-D #>_SK uZqvBpvWD&Ixe"g)OQ(c5wUV` en{@LTo>f.Q =Jlp"Tstkrtx}ds4#^P!ISH_3[DcHT~+ Hb&d0/`1S_lE{>vfy/I#7:QRj-_EKZwD!U*xi!vIDjqdrJKv>@*;)DlJxPuf }i9G 5(A(y7'({F>ZZIwm~6SyXLY&h~ xvL/[Lrt:"q_1Y qXHS&C13PV {<>o7i( wLtg~z a.t%+<8{18/'GL&k>'1P _7a'?AFJMB?4M3H**.r_@ m{'~6#j)2D 7 vLD|GCS}\y=d@1-9k_\VKLF:v- '}Wq n_V:" :  \K Z1-L;9SVqoHH5[=51G]d:A3q)K_W;0V XP/k;[P!QY&s?TRvrpN!Ci(^\ :YegrwZU9c6riUp<s's"1`3fP7nsr@6kjW]9>Z][tx+X'voc4ht%0/auw7+_/ &;|#ahz[A*owgof 4T^U,wsHKhja\h BL$?.\FUDzAlZxQV fo_@NA&atg( NbTr2?c"/cqa=8NXW/HfbF+O@d|I E,f;5rTN9O[QFB x/#Q]e6_>CFb.0gXwY@xW=; +0t,cof@mRZA ~'n6:c{H-[R{d+Hn#4xxEY&9L`eJKnwH M1\$$-z#J_2y=uAU2nCR]>S.NcyJS@|P/*& ?}7 F\!_:162gbi+G F^lKkvq>4MtA1`j# LqZ'ggR $094`O5"!Ojz?w_n0($8oc m6:x@y1bJsD?MBnAf zcZk?qH/WL+X&K 5="Rf*A ~3GA\)+NSc^zyL(:8dC9?K}<|jc=zslNFxcPc "Hf@.N@AgJ,26z2Cm)4,<ih5P0vs3MJ*yqE+r}u-2zmrd#(mpjcA's8/:{ fXO?KS=_nq .J*a5ogPuYpow]'q1]kzs<=Vj c1 ""-WYX?W!G^[b*hdAgH 2f'D?n=<%MIk_S 4"S~P WA|whAG>4K(>wqM s)PIg#^3kU  bngMTseqF[3M.Uq>|lb"[mD##?ecf<`_Bmj KgvO61l =8Q(#,]I`5`W,~ >,$ B am`S_*~?vo,~;bze0M-xl!3Z%s+Fann%W3/|9p XlC&$0kPJmGai~><"eXBP%GnbE+8m;?l% +&`K31tw_Dj[ +M,+ 3r[,(pqm0c11seE4_K3^"qZro4:grZ.-3,r^Rr~tC {8"ns7:;>}Piv4y?f]ja5ia!IBW~F]U^S ,/[-(DtJX!#@m!#-v6kVSC1;50Qn[Ph#X^I$<dx(y%ov+w (6-sL3Cjdi"S,.lE&} 5c)Z :U86)76>qM2@b4f&~6Zv4O>=9tY ,(A+RWwp ^E.@N" ~( z3%$2fAmf=c3ntqk#6P3hC"MJ~J>ET ,d:;NXd-^ EEaNIP.' 6x4](M$*UNiS~L$9(M R2j.r"1Q9V|1l9dyo +a3tw!|wu-fAj+1]X=K%/Syr\Vj0U-Ow@3z][ @_Vd;_ T8w/*US!$+BEr/IXx2\E?@})]ZAHBsjCd f\M j6hz^WA'>Rt2jE7gp[SgO\:n-'A<@" MW{MDLwqOrUiC+n pPQ%BDq}Zzsqi|a=_Y)Z{ZX"@t=uq$mp{i 3u=+NP|#jzku]?[ }z@r`oN@5 S X}MuKWowH %2+ri7 (ea!P/U&V%/h:%lryN'S^U@HHDh XUbc4-o { tHE{Di r(,hh]& RXK%ib{.ga {g/.+IT8C/"[-i):Z,+gAc@ A^.1.2w]pe[j 41O+}=qUAj=a"g5*D\R$PO &LJFd]c@R2QX?RZZFY0nFap)`(p0n[AF ~XJw&{k,/2j8b\ueUU_9>OfFgNL@+L/ CEJbB@V6-5O>LOt3Qyt<OL<[1 KT`t1i=WI/.'MT[^ }"yG7U`Uw,~I7{VXHx0j7OI:PHko9 ++haQ v* *&gZ"5:Z[s`JgLz XUF:?X:WoRQm Y{8]#MY=5gW:9H=6}~5!M5s%FLOUL%#Jh\@:+-*/$,+!Ts)~88,>&/C Gw3%H6AZBvV%a+Z+8K ^m3Cu20"XdSc|gu1N@=Vu.40|J&n*/y<v<LVbNdk *JuhWFm[TP -5E8Vq"x]8+Yoxm+qih$T'tl@*GIGmoNi8eb|X"> ;?3z+p]@\uFT *O[c"?lp32]f4O.T v v|g) :Ps.X^Ux%Rno1)fU YorddHoD>Aj}3i ^ke@/0\O`JA); EPNC;jSTu-EC; Lm:Ie=&(PEd`!ZydWG+f16 k_0iokql-St*E)T'K\[dgnfm\L KG>@Vx$>NRpt@1."pASu-O! @P9wy2V`>T,fC)@iSk`ydX?[~.cw95N"[EkhX{~JyH6h%g(UrTA / *@\Dz%hbb8[W  '<Y a`HA">U4}4l|].LG5&{KO]: jkRt Q(;DNc4+VGpGVfAwc.e d]H>u7U\0_UZMJAuGD=j:pHG|+85#2MFlb!/]5W3m,**6{M\m+CsST E<`S"{Hr3%A gWX,~ %>OVY9|PD##k kQ5:8d@jUyHQ#UvvD0>R -e,Y 3^#N [p@ +)M.%fvM~6@v a-w*d-\U',:$Usf\I%2X=r@,]]qB&;r%9CVrYcfB[\w Mx*0XyJzzOM/5}hJ(u,  Im8aqoUU]ooy&Kl %ji&ahMy0>~%bI2 7IrsnQ b~s)fq 'uDSMR!(nUOQ'*fJwwDmFV Vv9Mcd w a F8 v ]S #8 b{!=EYmr`qe[qe $aGAP O=;3Ga%VjZFM!}w2]J.._dnhoTcK}"EwmAbZ] ,-0I!m0 r6BI'B.mSG+V\6VxKsX]kd8~  c~aG > 1,V!UtTk[ux'%U+U,~^) _MYG&UY[c0[KKFNkJB!f; -XO&L6^nk!g2DBaTvz&acOv?%u~\+v~Q+"C&vo{3Dl?mk"F*jFo]TLFKSm|a rpm7m?4GkK3oO1%C{ Ka6B|>.O< 810lWY&4%5.8LNx4_e}O rL+> :?7kide"^(YfKp'Zwm32&" GyoaXz r]+? cHfmlbP<_g>[w}nmh345?LW"Ow: |?N~?si}2[Fexi>7B;RXP*T ="BOaJ?!i %xaTQ?&J<(w^4:xS w,aK/(tzY S63%8[ zR|tF!>ch ^LFYt@ &KvKv>^A(ax}_.`C1XR-m|_FV{\ HJWw5e HdBpGTG5 v`I/])KSBBs|;nph}7YYgHa%,("E_~0*=tOIm>'Ey ?LLvABN>JKQI4='jj*qT3$nF{> `2v->hD8r;}=C8/G[Q1q,ag2ce K*L2M)e]B#*sg=Vo,(VYM zw`\.vv]]MlcY`,V]TFSP>@oX^v$2H[J; tE`gNUQ)L0NjsLokrnr'V SXaP'mk<&~O5p;,p<I m$F\|U->95Fcwt N- V(R({;dp-#H_pMG@1lyFU3 !{M,9Y"L!, {9u&wa7^ l/ckv7mv^u|ual <AHAw:AniV2;I[.b\.D%VQT$c]W (|u4APDCYzW9{u{fa"q[[8hssm k}v+7H iy^n{.hH6TJcd9^@T@"#jZ2NPG+i(Q]-&#I.Qftfg )0 uJsx:uI.G==vi:{6;|w\f[(qw1,mjf.$z?)+\CT h. (`xas{@|@t+ aaO) Oz>8,em <7#hn@iUSj=9W01sk 3u2qb1d m/^2.DZe0l*}-o|N5u8=#z^)i+3Ki so7 H&PMzXzr`@t_QMhjyUz}RxdhrE{Wp]JXHX BGD!@.?2!gF:eq{g61)YWTDY3Ul>[j>>721"JaKhvrx` 4(*P'V$Rh`"juRdY^D ,_RznVzfFObJCyu#p$:'R7 B>0 Sn8-f[ 1oyK ?gZ+GUr3}UQm=H,w9U =-DbU- IjM'9lc+r"ObDvwIq'KY@V$jIK8(q7pQrJ#K],'G*W?@O? GqN%*'kn#2Y*`LHW;(I}BARQ`'eiwq"rri>FlRa4=P,~!H#L^NwckSCX|}U%}4 m6Ufyl~<@_Z{zsUD6kN"ftOx49!,{ XmC 4MB3v6q8hu8!os`-ckYPl]6+ W{c/N # +4_y/Nx!f$QQ.<4/iU^do&V*AwVV$Ciq4\xm#S8!bkCv]Uz S(.ADHi=3B3^34 }u/_%An^;:d-d^b(chQs ]n@Z3&_^}OMb|Yq>cLp|?| LfM%c ?>](uuJwPFy7*FB !4!2 )Q Yb[qE %|D4gcH[atb7 @vK61o \ZaUO:VqIgbB-)S]kJR1vV;`G)^ZU#pLT|@=R,h l*lAP1l94nP@M8P.h+E%(;]#k{?*_0P@!p K(%KM8GL;L6dXqh/@ .mvvV__6'? [xW|8:`7}23Ie'KlGfZQft}UvlP$=w$[Z:OmeC]-V88#ky1"m!nYi!YxmaOOPLr`{JGNh7+K\oWa'q0mPKs+0\ +m|Dia&5sXHE4(U%g>yHtPSZDp%~&JIyE |,rdf5@$y3E8~O`=|(#\9HH0qI{o94!i"b^VhyGn|=N):UWQFHDs%I:WgH5[XIL0Z%|!R7!  T<<-[ib>](nyOtcg>?Jp<7[ Y>JUN&7vm (M@f@SGIk6F Z|C=(US;!mz<;^Ky4 #hP > 5F&UN= m;QC P} YG0_o(OG/ -k6W~V2;/&ko1?yZ'Y 6?q^(P'P  SS [VknOU[B Z4` XG$u)(/vQW71>]Q73%^%wYSyTJ`nU^@n*& %Po7zy8A0G<8)9 T jj ]Pukz.7ee=10b-$Y}( wU8 K!i'?,xcUb^p,BA @gq V(6 ^mB'Z~y4\^&0Z_ }3=AO:Uw1'TO,crtNMxB9@.8X4?v P \K* [alW:w&Wj[-&sD5U8 1pnU.=8C X5R!p"e:`^ZYluZ'rU z1.g; xo}(DE s@%'3&h^b aVSiRD? $H"U'v4xG.pwV[A>0D[q:]y:r]4 vCbX*v=c_ckhh^A6?4{BZ\8@XzmH0,Szh)H^(;y= ucthB0y3%Xbc= c*Wm{e)sP>l=C[^3v8Pj*66J@w+?b|F6x{tm|~P]&Zu+S&8hT3a@i@+DMc7:!}&wYg3Qr7"}!Q?V&xaM cq5|k^6AFG.S,5/Lvv]z2EA dQD,EJg,N#u K1/T:o~INl%,\9Q_Q_,W Ernp^.EV,y*yvhVNGbE x>C Pu2LlX Wm|b'V2WMP]E56?5Kots3.1 -)nCJL@r8P 8:[N$3X/^;64)bLT@7"|9?`' W>tK0eVb93"UP>V$52nB(a~i"4O%XGgPOp!=Z `}8 )`tTe 7O@7 ]!$F jS{hTFzw5vT)_U|7o8MaT>C Fmhg#djeP\l&g]&H neFyRg_j o9lMr4U.bH]~I@Z.QRI6 :H^4>y3_ N1q}EM1 Q\"]7D 6@`g\c?[(q=C^FuVn}/eRzfaY{>cdZ7MW}.rpdS77w3m3N9e^AggiRj/1 nl|1(0,~o}Qj8nxC{718c'EO^7a1xIYW}a #vc;jx~#|el9H`"]p4@ z5w2wi 0ZVO-/czf[W/$\'g,i8=JZOXaHwwHZm$T18ty hOVw=H%^n3 tnW>H_L})~xd/CE'YFC vQ fnc Z y rQ#) un-~$#[ cXI-isu[jm+j%Xr| R]GF8xy&kW`_$65jn~cL,tMjWp$!>l;[)Y<kmzDByB3~.Cp-DA-J3|1MO Jo*g%xFW2ax_TW&4>>h#o'1qs+p83n|6\Z;xvASF2 dQ!@I}>_D:(Ykdid{sxrEAib$+[q}R)*{e<1{-mHd"/PPt gq\\.8XZ&^WbH`AJd*cH)- 8*(r(D>F-6~m %-u:shLCH* IW_ ]WIcRDhPCW\ =R,i__Qq %ljKKsg.pC}9qiwb0 Z!#t Dz < jln`d4Ny`!Y-hi,GqH!x(TW$P1>W?g1!2T9O= Y#)%b:ry1E\OP>h)A IsCB/ ^rjdfFwuPb*3q W3tdg(~nDN< A^KnMjr0]$P7-M1| o~3xBp$6vT9gWNr:KRmVx 9Qp"EB,Y)NNoTl#z8hA-XO`;@J= l{ab=x# ctD>D_/ Cvpm0?)UV} f[ UnKXV~shzaiHuV [s,GO7U0QS3eL@y * Oi1t-Y63 \n&v3jci 0$L^"~gsS DY ( =oO<| zba8}Ea#!B4^_SEP 1_%|vp]]S&VLcsi!vh<a$>5T%g*zyn9_ZLcs6bXk: )Ix 8`@l u_y mR=tYKJ>wr,GQX29qWEI3;7~?"WFwFpLY 0Bn  4 CBi=B:B ;,u4u/+<7|YS9]io/1iY}`6"04.o6qnWv3tiD/P6JN$4o~@"ivgop4vJu]1sukqlUj ^VJDSjuiaedj:Uva7fx^7s 7mCyp ,K7A}X-1/4FAE6,@|d|1:"UQdY8NB-8tiGZwq(,Q(!2Ei",/CY"aU:4u\ E0QAHon"eQCq LbIFqhExBQU3C r@a,e U*h2Bw[{ "i'B}vogMmz/CE-i$3 +\zR)*4XZD(1fMvH$,nDwnt2S=uu* <(RZ(MhQU>:kZ %\V%e=E=`/H,s.!xfMfMQ 5#xm5=PZZcHT29x*% VI\@_tmxgNX+}!NIpg_d?fSXr.Zbb8P&CR\ 3=e^[}eo@|  z2~bC]5 YyaVJwTmcUZ"[ZLwzYF\;UjYtE TB9P+$g A&n:k|/,MWaSNSRD<(y1rf(X2TWw 7 zKbmd.c< 3BaxFiH{'3|~ g7&L`7Ikyzi:G' J2;/[t x#k@*h{tA k#zG}/oDsKfT-LeDZ ZrmM-ZhZ7p#M3e?- }a}ci`XC]-evZibo?^l0M]xx\`-EP?A f.juSb6 d^g 6 5d,qnv6Z3owWi {y+h.^5;*w, !J x5 rAZtH8:5*)'N s@R}!iE4D3Wl =C-qaU;mQo% "f,MX~[p2\X_: :[y4Pm6zMyJOx )guIg)SQ9_"v% 9!]bl%a#@) 0IrzC(O@,vl2L JNBdq%s]%t0mcn))3p"~ 0$Cj0H'Vq+k4\y9 MPgR&1A^&V#lO L/Z s*QsTdQR#]5' G?.vB.. 2\|@_}u> CaW 8rv6eCFXOo8xszY"O2: iR]zsf~-VsPLxh)ehrtuUtMARwQ<`"KVVKe,4.t UYP a]ifJC\R1$"F](dTo4gglBO]7/J%!`FaJ@F E mbBv:l.a]Uz XDhQc'Y4l!AF; ,&VMc6,n7RjXR-G |U"@`2Oe.[ Lg,u`_A_I `SboMB*I8h;[O209 oh%@7(1I{BTy!:Cmk>b`qe]bZ2yePt> bC\#YH5 H$++1g C:klPf&a.;7G "OMb"(/VuXu%!s7i"%dBQjUc^^DE|\.W5T5D Pf :v (n[$-}m)#D$&<wsoA 1t}_[$2eB%}V<}7Ak 5fK)3Gf"ggo-! >}nK*GDk_vQ6y],;QqVpg_^H)%Qw./^2k|. lDJSa&VG&D N8N9=8H~|EHUb@x AqpC/4IQr.!+ #.1{ ly{Faq* nd<7; @Mm-MfDEUKw{h]5w8jdmDGOMF4d(hhx>0r{ o_#bt7iN|*^3Tg,r\:W;C + 7QMD[^92_6G_i=y8p=YSABS4>?Q9U0'^B<(iQiLRAX?hV5'\J0|20'@]r4KtwcqCBmtZR0 ',Nxf:B$UXTxYa%H)j\OU#g @~\pB)VL< W;Gf^cq5mLW+"Wx53Z)43M.&GN+FV:CbyHkxfY>Juts Or crB_/2IP&Jby6._OK?>ga2HfV=+T,jl8:ekarl0 VJ[7{^h>pj3&$j6Tg|p&ex }Vtsi`fRrmdw 6vAlvx Ca\RsfcfA3RY@ g<7@:BX+QuN LT?$"4%w[Jm^2l/4lss8d1J1m!HAn@Rn?|i:+Qh'@jcE D]&@e-\}Su2i7NC6VU zO;sWm=_D&>Ru,Q]'4X)GD WFVy#3 \5y5{z5X7Yg. 40jHGdjqx%8_w| T@{;/O-,Jx-,bGui668tCt/hL{hFT#]%njFbG{A#]q?B| 1=/D(hj6)zxU}4%C*SB<1c 3DYfa(&~_#v csOLoLxE@v&8Ao )}nQ{dN0KAY}OitNPU31>jH#^1I XRn<~_X&/?+&C/?_xjG?ehS<xz<@R=>vxJ`NIH4X`L =H>p\ gM&}\p*u90<-UIJ& s2W ZE:E86cf#K9;6= w{WT{bJi;$|A)@Nq(i_ndZ&%yGU|# 1?Wj32g?]h(H{5W2XEE"yp8/R!drm/xy y.Oi~R wba0l5\g9w))>-JZv^Qw~t5M\XfJ;~w*n.8I!D2r/Ul:> g$mHwK g8u#fmlkib:4DIWKX['' |P 4gbhS.;":gJKxas75ZZU(CL&g7,Ft$1=OS&@uk}E@Y.kLpq0DeInQK4bL+L&6C=^Z,F}`n>qj>Y^X  &_PP!14S96=DNGsG$RcBtG#06NV\>524+*aItbvuKl:-X8N'# 6Wj%5 6#nXR+dUgBXJ_EQQx_HRe.QWoQ{m`O E7J(XOc:&}lnk"29\Pk4W5Zti^%e>|fnP+Qg53;$zi `7&R}\bc/2>TA+]9i&Fy@uikoL)Q w';B>@vDs!%K[{Z]&5AwIgy6lf-]gGM{"7S]%>*h:IwCIxm&c|mP  HbkA,EP;pK*jxCbsU&@^KBA_]4W Z8*hX|@ML.3ig6(OXyQxEg3SlL 'c9y[ a(Nbn~8!( ag/"H7)^MY&,5 [1mZL8G`oNpHn ?D 0*Pw?@&:_w7Oi@{XvUj!T,O!Ay{u |{ups5xZ9%L)w]Z(!4=%Du7|mL 79  _E}V=j]0NK[M+Y CK|&j)~3P. 'd>JfN _&/:K .wm(7L ASX2 sNLM 8x [F/p<0-um&"}YV]1Yj%neg1TRqO$?7&## m}37:3W?Am DS8za}[!z1Pw#Ux?GjKCtTu)fJeb'ny&uxN&NoQd[8QK;12RRnHCg 8<9O]S_m1Y^7z m=_L!EDwxwo4)Y7W qVMy5I/JzC{31O8' VA'2rj:ZCq(.)YG5J]KnJu#5pB0'$A W[!O'"%~eCh]N/oMl75nbyZuk4tG3 - 4WhT+;O<[ Wz_pz*H T.KSnjov)1yzT3.LXbN=)oW5MU4`3H45I(8h \HflYFT4p P,2:n+;_Hm#^[[4d *K#_ _j,DG">AS*8M_2Xn|nAD`4p3k2|YJ_ u-&X"#~?:{YV; X }a^?i_p51w1_ 2_0rphx7vj _B55,+N.EZV'RFH=JOBA}t^L7e ;.:1 Ed^X 3EeOBSncZHJZer,15*+kzub1bs(h,^(?GOF$ioe9G8)qy{iLU]<#mnt,},v N<[ 09j!G2K <G I)UO|m(6Ek3!0FhNe$D6wzB5M"EC)f3l}AbXe??Cm]JQ_jsi:*'la0,JbZuFx>p D 6/"jK>xQud PIAy#57o*=AHGVGYxY3$0(6}_ ,z%n0}"z*_UML89b#L]`bahNo8=r>A /M0/~0*fWZh:g"$QJrg[F$R%oC!Z{tm+$ Qmyq06>IY)Z+\%6+.co_w|Vin7}' z2ZPMR U MwzJx0{Uq`+f ?$3aO]|yN:dt-#UE_O\lYnc$b0(t )v$%Q"7Lq"WDkSx_x{i-):5 U~)gdc>aK72YG.}~Dpmi-apbeeZ9)' Me$1X.W_+5 /03@G>[/m[08 (-)` FJSvkYn1K}cE_qB?/lW>pNep-3.G:F{"T*).'!&k[5s?l\3n or/`T2_sPGOf(D8qDKP=&0%lKdpU)\K3=={m2V52yU[z0RN:= *p]R>Ey . |v$[OMPF?=Wupz+RXEn!zm)q)txhp$ZsJ nc.,L|Gj[e:(cLM_#D0}*vD!BK^l2aOcC4hRA5X33TZZbj 6r7{*41$uFA$H'] 7]_"c[^>7^swQy!KGb3j|o hm_ e{m( WKSGEkU(cZZA'VY``(=G'Z_+=+x9c)YMqno/O"rSKPA &4!v~r"n:Ou7D,%cA,y7Khd#`A 8 }/ U)/ Kz8q Hl-Oo!":$}d%\sSX3bea(350w; py8Km#0&Jk0RLx5\] AQi:tN6v4m3KXq]CBU$^2dAyf"N8daQ[XX*e%hMH/LzP;%f~{\\XCXn)r8qQpnSYtC\H6LnsHW4@tnkmG4/vt@`";q;hNVQsuh1*8X"ID*QG B75{A . 'mi7na#5)RCV\dCk vy x(GmFh#kkgpjrEh|GAgxGaKL }<`X$\}b k 4//6.@3 Fi!0UpO@K'Dqjf/QK[}m0=61LmT5tC{~Yg/,:'bq%5122;8Gu#3]8KEj"/=)CYusX,h])"$b +w+u.;tCP4)P!8BC-1aP>>P^hkZ]qe @TP6,a2<Q@3uT`pz2=@H7\Yk/yS-xD+b% Pj)t#78aD,Z.tI^^V^gm@qw52.+0d!w eG0t _gz#[ Be6t,<@gtL>,7Uu-~x2_ ^8%#4mv&i Jl7{4QQ=)&z7]2,Q> 6kfM&8/rkbX/v>vdtoxEN5QD!6tX'u^vJd)?JBgXY4?$" ib'7*A:-[K!C~u=G1 3)80gWJl+Y_@QGBBc}gFVD'[$6Zc^hE-oN i \.5iyO@x_O% 7UTF`d,/YU0x2aIojI P7I A# y #QL&Pg FPbi`E4W@R [_Z,NSJx@$F"QJ x .BS &Ra_?Y5rv~[u ;3BrwWxgJyPkm*UZH{Dlf(w(o4AZ(Q!%1\J yyu;h/Nt4r d]4(S Pb'q[kP3[:4wlh_h?Afn}(ku-pry'[i@qJ-i% tkjhYVbv*%&qe> h%[,Y|#1CsETfDnB1uP8HqBOXzEhVEv==FV%Y1og6nV 2Yd u'S-ЖjrP4Wo!6v0G1xHa>YY,$q/\ gml wPMM`|VF7yK&HX}"O!IjPe D[83S8FEd")PR5"x PSyOQp!4FC@ bc: `:rJ1Hc,;tBP@ n$ y8 WU ~B;_` F# H\GT *TE8ScGzH,e 9c|-?'X!e)!4 /hYjo hH\#4>Fz q=QBn!xO mP8['m;D*;*| 'IRY"Jwj@4:c|j0Bi-:`{nsbx0oa>;uIqeN9I8 e AadC\qto##mCNf"$ DBNw '9w*1m([EiX}0TV= 2+C@>BwEaGf+WdsS:dAl\?R<B1&Q-x 7~zAtYLR'T@,Fpw{t/)Fz&6 p~)Oi?wo|APyDFxP4Kp1.UQ]\gmD+ ^Y(13&?y%dGCW8qy!Xd/^!1- d`Yxo| $yfN.!i]+ b/Yqz*h9^:)3{'L3@}:|gsxF!!ds3 '1fQ1A;XWxn!wL|Y_&y8wg1 4y'G J j`nu{X=#Q,d]1} gW_ )f?A3z0@ƬS6=`wuy'_W>_ZjbE(:G*,G4=6'"<>iL"VUy:|4ARWm]Ya8v%$cxNDhEHP2/E ;`d aGb2`1H fzP%l-der~2+A6 srgY_TCPL?ejk:Y0q?lt$HO^f6vp :Kg'*s(8c;<5t m8zGZg26e &lUQ s cLC@&i`%%,~qAq%.p7} YT"kdk&i;+Q,(g9!-/MaHAcx39Y97fkl j XYU47OO$DAbZ GsT^H${OHnGU~7QV X@omOEh )ne( AJi"LHrMTT*IiC]Q .4.K"7Rbsqv={Qgm~~s|MvKTVSD-'p]j E&;YGLO KB}(cb`"#vILJKIEnJ[v,R\6Iib\_ZqM iIf}~o{e9@ -Si RJ? HN R&BS HDR wECANNOF[(00 EQ\HTQ"Ay~ DFU024.BCK{[DFU024.LIS]DFU_FILEDIR.LIS;4V: 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 55 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (16)%14306 if (x > 0) C14307 { N14308 sprintf(outbuf,"%s%s%s out of alphabetical order",A14309 fulldevnam, &dirrec.dirnam, &oldnam);e(14310 put_disp(); E14311 if (matoutput) fprintf(fp,"%s\n",outbuf);n14312 } L14313 n = (dir_entry->size - 4 - dir_entry->count) / 8; H14314 /* Now check if we have a valid file header */^14315 fid_entry = (struct _f_e *) &i_dir->block[i + 5 + dir_entry->count];'14316 while (n > 0) 14317 { R14318 fid = (fid_entry->fid_nmx << 16) + fid_entry->fid_num;[14319 /* Check if RVN on other disk (possible only in volume sets) */ \14320 if ( (fid_entry->fid_rvn != 0 ) && (fid_entry->fid_rvn != rvn) )14321 { 814322 xrvn = fid_entry->fid_rvn;f14323 temp = (struct _t *) (rvt_t+xrvn)->addr[0]; /* Pointer to other table */014324 temp = (temp+fid);14325 } 14326 else14327 { )14328 xrvn = rvn;yC14329 temp = (struct _t *) (dyn_array+fid);d14330 } ;14331 if (xrvn > 31) {error = 1; goto next;} U14332 if ( (temp->bitje & 16) != 16) /* No valid file header */=14333 { T14334 sprintf(outbuf,"%s%s%.*s;%d has no valid file header",L14335 fulldevnam, &dirrec.dirnam, dir_entry->count, B14336 dir_entry->name,fid_entry->version);*14337 put_disp(); /14338 do_repair = TRUE; G14339 if (matoutput) fprintf(fp,"%s\n",outbuf); 14340 }e 14341 elseV14342 if ( temp->fid[1] != fid_entry->fid_seq) /*Invalid seq*/ 14343 { Z14344 sprintf(outbuf,"%s%s%.*s;%d invalid file sequence number",N14345 fulldevnam, &dirrec.dirnam, dir_entry->count, D14346 dir_entry->name,fid_entry->version);,14347 put_disp(); I14348 if (matoutput) fprintf(fp,"%s\n",outbuf);l114349 do_repair = TRUE; 14350 };U14351 temp->bitje = temp->bitje & ~1; /* clear lost file bit */=O14352 if (matrepair && do_repair) /* Remove this entry */;14353 { 14354 make_list();F14355 copy_fid(&list->fid_num, &fid_entry->fid_num , FALSE);C14356 copy_fid(&list->did_num, &fib.fib$w_fid[0], FALSE); *14357 list->function = 7;314358 strcpy(list->name,dir_entry->name);(14359 } .14360 do_repair = FALSE;!14361 n--; t(14362 fid_entry++; 0DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 56 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (16)14363 }s-14364 } /* End of /CHECK */ 14365 814366 /* VERSION code starts here...*/'14367 if (matversion) 14368 { 614369 if (!flag) totsize = nr = 0;14370 else 14371 { T14372 x = strncmp(&savnam, dir_entry->name, dir_entry->count);C14373 if (x != 0) /* report previous entry */R14374 { 214375 if (nr >= version) 14376 { R14377 sprintf(outbuf,"%s%s%s , %d versions , %d blocks",R14378 fulldevnam, &dirrec.dirnam, &savnam, nr, totsize);,14379 put_disp(); .14380 if (matformat)"14381 { S14382 indescr.dsc$w_length = strindex(&outbuf," ",255); E14383 outbuf[indescr.dsc$w_length] = ' '; >14384 resdescr.dsc$w_length = 255;Q14385 status = SYS$FAO(&ctrstr1, &outlen, &resdescr, i,14386 &indescr);F14387 fprintf(fp,"%.*s\n",outlen,resname);"14388 } N14389 else if (matoutput) fprintf(fp,"%s\n",outbuf);14390 } /14391 totsize = nr = 0; 14392 } 14393 } 314394 /* # of files entries */ L14395 n = (dir_entry->size - 4 - dir_entry->count) / 8; "14396 nr += n;U14397 /* Count the size of the individual files (was saved in the .14398 dynamic array) */^14399 fid_entry = (struct _f_e *) &i_dir->block[i + 5 + dir_entry->count];'14400 while (n > 0) 14401 { R14402 fid = (fid_entry->fid_nmx << 16) + fid_entry->fid_num;[14403 /* Check if RVN on other disk (possible only in volume sets) */e\14404 if ( (fid_entry->fid_rvn != 0 ) && (fid_entry->fid_rvn != rvn) )14405 { 814406 xrvn = fid_entry->fid_rvn;f14407 temp = (struct _t *) (rvt_t+xrvn)->addr[0]; /* Pointer to other table */014408 temp = (temp+fid);14409 } 14410 else14411 { )14412 xrvn = rvn;iC14413 temp = (struct _t *) (dyn_array+fid); 14414 } 414415 totsize += temp->a_size;!14416 n--; (14417 fid_entry++;14418 }4P14419 if ((j > 512) || i_dir->block[j-1] == -1) flag = TRUE; DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 57 lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (16),14420 else flag = FALSE;T14421 /* Save name if last entry in this block . We must do thisI14422 because directory entries can span blocks */ $14423 if (flag) 14424 { O14425 strncpy(savnam, dir_entry->name, dir_entry->count);-<14426 savnam[dir_entry->count] = '\0';14427 } 914428 if ((nr >= version) && (!flag))f214429 /* Report this file */14430 { P14431 sprintf(outbuf,"%s%s%.*s , %d versions , %d blocks",J14432 fulldevnam, &dirrec.dirnam, dir_entry->count, :14433 dir_entry->name, nr, totsize);(14434 put_disp(); *14435 if (matformat)14436 { O14437 indescr.dsc$w_length = strindex(&outbuf," ",255);nA14438 outbuf[indescr.dsc$w_length] = ' '; :14439 resdescr.dsc$w_length = 255;M14440 status = SYS$FAO(&ctrstr1, &outlen, &resdescr, 0(14441 &indescr);B14442 fprintf(fp,"%.*s\n",outlen,resname);14443 } J14444 else if (matoutput) fprintf(fp,"%s\n",outbuf);-14445 totsize = nr = 0; 14446 }m114447 } /* End version check */ 14448 414449 /* ALIAS code starts here */%14450 if (matalias) A14451 /* Setup fid pointer for alias check */r14452 { ^14453 fid_entry = (struct _f_e *) &i_dir->block[i + 5 + dir_entry->count];L14454 n = (dir_entry->size - 4 - dir_entry->count) / 8; '14455 while (n > 0) 14456 { R14457 fid = (fid_entry->fid_nmx << 16) + fid_entry->fid_num;[14458 /* Check if RVN on other disk (possible only in volume sets) */ \14459 if ( (fid_entry->fid_rvn != 0 ) && (fid_entry->fid_rvn != rvn) )14460 { 814461 xrvn = fid_entry->fid_rvn;f14462 temp = (struct _t *) (rvt_t+xrvn)->addr[0]; /* Pointer to other table */014463 temp = (temp+fid);14464 } 14465 else14466 { )14467 xrvn = rvn; C14468 temp = (struct _t *) (dyn_array+fid); 14469 } 214470 bakfid = temp->bakfid;=14471 if ((bakfid !=l) && (bakfid !=0))oN14472 /* Set up FIB to do a pseudo FID_TO_NAME call */14473 { D14474 fib.fib$w_fid[0] = fid_entry->fid_num;D14475 fib.fib$w_fid[1] = fid_entry->fid_seq;114476 fib.fib$w_fid[2] =  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 58\lV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (16)O14477 (fid_entry->fid_nmx << 8) + fid_entry->fid_rvn; V14478 status = SYS$QIOW(0, (rvt_t+xrvn)->channel, IO$_ACCESS, H14479 &iostat,0,0,&fibdescr, 0,0,0, &acb_fil,0);M14480 if ((status & 1 ) == 1) status = iostat.iosb_1;r414481 if ((status & 1) != 1)414482 singlemsg(0,status);"14483 elsed14484 /* Check the directory backlink found for this file. We must do thise14485 because the file header may have been changed since we have set upd^14486 the dynamic array (because of concurrent disk activity). */ 14487 { N14488 if ( ((did.fid_nmx << 16) + did.fid_num) != l)"14489 { H14490 x = strindex(&filrec.dirnam,"[",198); S14491 strncpy(filrec.dirnam,&filrec.dirnam[x],(198-x));iQ14492 sprintf(outbuf,"%s%s%.*s;%d is alias for %s%s",rP14493 fulldevnam, &dirrec.dirnam, dir_entry->count, F14494 dir_entry->name,fid_entry->version, >14495 fulldevnam, &filrec.dirnam);.14496 put_disp(); K14497 if (matoutput) fprintf(fp,"%s\n",outbuf); !14498 }R14499 } 14500 } !14501 n--; (14502 fid_entry++;14503 } /14504 } /* End Alias check */ 14505 :14506 i = j; /* Pointer to next entry */"14507 } /* endif*/%14508 } /* end while */714509 k += 1; 014510 i_dir += 1; /* Next block */.14511 if (ctrlc == 1) goto next;&14512 } /* end 'k' loop */14513 A14514 /* Check if we have one unreported file left */i014515 if ((flag) && (nr >= version))14516 { !14517 flag = FALSE; *14518 /* Report this file */H14519 sprintf(outbuf,"%s%s%.*s , %d versions , %d blocks",B14520 fulldevnam, &dirrec.dirnam, dir_entry->count, 214521 dir_entry->name, nr, totsize); 14522 put_disp(); "14523 if (matformat)14524 { G14525 indescr.dsc$w_length = strindex(&outbuf," ",255);4914526 outbuf[indescr.dsc$w_length] = ' ';r214527 resdescr.dsc$w_length = 255;E14528 status = SYS$FAO(&ctrstr1, &outlen, &resdescr, ; 14529 &indescr);:14530 fprintf(fp,"%.*s\n",outlen,resname);14531 }B14532 else if (matoutput) fprintf(fp,"%s\n",outbuf);14533 }  DFU_FILEDIR 22-AUG-1996 11:33:19 DEC C V5.2-003 Page 59ClV1.0 22-AUG-1996 11:31:41 DFU_FILEDIR.C;2 (16)14534 14535 next: 14536 if (error !=0)"14537 { sprintf(outbufU14538 ,"%%DFU-E-JUNK, invalid directory format at block %d for %s%s", 414539 k,fulldevnam, &dirrec.dirnam);+14540 put_disp(); error = 0; h=14541 if (matoutput) fprintf(fp,"%s\n",outbuf); 14542 }r<14543 l = (dyn_array+l)->f_link; /* Next file */#14544 if (lastsize !=0) :14545 SYS$DELTVA(&retadr.address[0], 0 , 0);14546 }(014547 while ((l !=0) && (ctrlc!=1) ); !14548 SYS$DASSGN(chan); 14549 return(dir_cnt);14550 }   Command Line ------------ e7CC/DECC/EXTERN=COMMON/SHARE/WARN=NOINFO DFU_FILEDIR/LIS  *[DFU024.LIS]DFU_IFSCAN.LIS;3+,./7@ 4 -{0123KPWO56}t7}t89G7@HJ@ DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 1jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (1) 1 /* 2 DFU V2.4 3  4 DFU_IFSCAN.C 5 5 6 This file contains all routines needed6 7 for scanning and parsing the Index File 8 B 9 Called by SEARCH, REPORT , VERIFY ,UNDELETE, INDEX,D 10 and DIRECTORY/VERSION , /EMPTY or /ALIAS, DEFRAG/DISK 11  12 */ 13  14 #ifndef VAXC/ 15 #pragma message disable(ALIGNEXT)0 16 #pragma message disable(GLOBALEXT) 17 #endif 18 ! 19 #include "file_hdr"! 457 #include "home2def" 609 #include ssdef 2100 #include stdio 2776 #include descrip 3752 #include fibdef 4230 #include clidef 4676 #include climsgdef# 5022 #include lib$routines 6791 #include libdef# 7166 #include sor$routines 7319 #include atrdef 7515 #include dcdef 8148 #include devdef 8373 #include mntdef 8645 #include dvidef 8923 #include iodef 9898 #include strdef10029 #include trmdef10203 #include smgdef11042 ,11043 typedef unsigned long Boolean;11044 &11045 typedef struct _flist { 11046 char name[86]; 11047 short flen; 11048 };%11049 typedef struct _quad { 11050 int date[2]; 11051 };#11052 typedef struct f_id {111053 unsigned short fid_num, fid_seq; /11054 unsigned char fid_rvn, fid_nmx;11055 } 11056 ;$11057 typedef struct _it3 { '11058 short buflen, itemcode; DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 2jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (1)&11059 unsigned int *bufadr; &11060 unsigned int *retlen; 11061 };11062 +11063 /* Structure for work list */$11064 typedef struct work { 011065 unsigned short fid_num, fid_seq;/11066 unsigned char fid_rvn, fid_nmx;011067 unsigned short did_num, did_seq;011068 unsigned char did_rvn, did_nmx; 11069 char name[86]; 11070 char function;11071 short rvn; #11072 struct work *next; 11073 };11074 "11075 static struct _cln {&11076 unsigned int channels : 11077 1;$11078 unsigned int events : 11079 1; #11080 unsigned int fopen : 11081 1;"11082 unsigned int sort : 11083 1;$11084 unsigned int expreg : 11085 1;11086 } 11087 clean_flags;11088 /11089 extern struct work *first, *list;11090 /11091 /* Structure for dynamic array */11092 struct _da { 11093 short fid[3]; 511094 unsigned int bakfid, a_size, f_link; !11095 char rvn, bitje; 11096 } 11097 *dyn_array;11098 V11099 extern unsigned int ctrlc, SOR$GK_RECORD, SOR$M_STABLE, keyb_id, tchan, B11100 rows, colls, disp1_id, paste_id, lbnstart, lbncount;;11101 extern Boolean trigger, smg$enable, trace_on;%11102 extern int ctrlt_ast();&11103 extern char outbuf[255];L11104 globalvalue DFU_NOPRIV, DFU_EXPREG, DFU_ASSIGN, DFU_INDEXERR, %11105 DFU_EXHFAIL, DFU_IOERR;11106 11107 const int iocnt=2;11108 411109 char block[512]; /* One page/block */11110 011111 extern _align(PAGE) struct _hdr { 711112 /* Large enough to hold 1001 headers */ 11113 char block[512];11114 } 11115 header[1001]; DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 3jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (1)11116 $11117 static struct _ibmap { 11118 char block[512];11119 } <11120 bitmap[257]; /* Space for index file bitmap */11121 E11122 static struct HM2_Struct home[33]; /* 32 home blocks */11123 L11124 static struct _vol { /* Structure for relative volume table */011125 char devnam[64], fulldevnam[64];911126 unsigned int devnam_len, fulldevnam_len, 511127 i_open,vbn_file_1,if_size, maxblocks;.11128 unsigned short channel, bchan;"11129 Boolean wlk, slow;A11130 int addr[2], bmap_addr[2]; /* For EXPREG calls */11131 } 11132 rvt[33];11133 W11134 static unsigned int volcount, maxvol, volnum, orig_rvn, curvol, strategy;P11135 static unsigned int lendev, status, iosize, vbn, headers, highbit;.11136 static unsigned short lock_chan;%11137 static char device[64];11138 11139 static struct { &11140 unsigned short iosb_1;$11141 unsigned int length;11142 short spec; 11143 } 11144 iostat[3];11145 411146 /* context block for I/O processing */11147 static struct { 511148 unsigned int i, starti, endi, thread;/11149 struct header_area_struct *hdr;-11150 struct ident_area_struct *id;11151 Boolean end; 11152 } 11153 ctx; 11154 211155 static int efn[2]; /* Event flags */11156 /11157 static unsigned short map_ptr[4];*11158 static Boolean progress_ind;11159 "11160 static struct _dr { 11161 short lendir;"11162 char dirnam[198]; 11163 } 11164 dirrec;11165 11166 static struct { 211167 unsigned short atr_size, atr_type;"11168 int *atr_address; 11169 } 11170 acb[2]= {11171 {;11172 200, ATR$C_FILE_SPEC, (int *) &dirrec } DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 4jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (1)11173 ,11174 { 11175 0,0,0 } .11176 }; /* Attribute control block */11177 11178 static struct { F11179 int forward_link, handler_addr, arg_count, condition; 11180 } 11181 desblk;11182 11183 static FILE *fp;11184 H11185 void cleanup(), copy_fid(), disass_map_ptr(), add_item(), 211186 read_indexf_bitmap(), fid_to_name();11187 311188 int open_device(), get_next_header();11189 11190  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 5jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (2) L11191 int display_stat(struct dsc$descriptor *out_str, int user_arg)F11192 /* user action routine to catch LIB$SHOW_TIMER output */11193 { 11194 if (smg$enable)11195 { Y11196 sprintf(outbuf,"%.*s\n",out_str->dsc$w_length, out_str->dsc$a_pointer); 11197 put_status(2);11198 }11199 elseS11200 printf("\n%.*s\n",out_str->dsc$w_length, out_str->dsc$a_pointer); 11201 return(1); 11202 } 11203  0DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 6jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (3) !11204 void do_abort(void)s<11205 /* Show user that the CTRL/C is in progress */11206 { T11207 sprintf(outbuf,"\n%%DFU-W-ABORTED , command interrupted by CTRL/C");11208 put_disp(); $11209 sprintf(outbuf," ");11210 put_status(2);11211 } 11212  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 7jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4) +11213 int search_command (int mask) 11214 11215 /*?11216 Search through INDEXF.SYS for files with certain 711217 attributes specified on the command line11218 11219 */11220 11221 {e@11222 static char dummy_item[80], name[86], dir[200], K11223 fname[80], ident[30], date_s[23], format_str[80], fmode[2]; /11224 struct header_area_struct *hdr;0-11225 struct ident_area_struct *id;c#11226 short keybuf[5] = { 211227 1, DSC$K_DTYPE_T, 0, 0, 255 };!11228 int reclen = 255;s511229 struct _flist file[50], exclfile[50]; &11230 int fcnt, efcnt, flgs;A11231 struct _quad cre_bef, cre_sin, mod_bef, mod_sin, 5911232 exp_bef, exp_sin, bak_bef, bak_sin, diff; 11233 register int i;iK11234 Boolean matmult, dispfull, matsumm, matplaced, matnovolset,G11235 matnosearch, mathome, matstat, matalloc, dummy, matlbn,hK11236 mat_r_minsize, mat_r_maxsize, mat_a_minsize, mat_a_maxsize, T11237 matoutput , matname, matexcl, found, matnonebackup, matnoneexpired, M11238 matbefcreated, matsincreated, matbefmodified, matsinmodified,4Q11239 matbefbackup, matsinbackup, matbefexpired, matsinexpired,matsort,nQ11240 matbakfid, matfid, matchars, mator, matmark, matuic, matfragment,f:11241 matversion, matformat, matover, matappend;L11242 int size_min, size_max, parse_type, free_hdr, ivbn, k, j, x,?11243 bitblk, bitje, bitval, find, rvn , flags, size,;S11244 retr_min, retr_max, vers_min, vers_max, hdrs, rtvptr, lbn, spacing;C11245 int parse_item(), read_indexf_multi(), dfu_check(); '11246 unsigned short fid[3] ; Z11247 unsigned int r_size, a_size , tot_r_size, tot_a_size, fcount, val_headers,M11248 fidnum, infid, bakfid, chars, setchar, uic, tothdr, totfrag, .11249 offset, map_words, over_alloc;(11250 void get_map_pointers();$11251 /* FAO parameters */11252 int faolen; '11253 unsigned short outlen; 8011254 $DESCRIPTOR(out_descr , outbuf);311255 $DESCRIPTOR(device_descr , device); 611256 $DESCRIPTOR(dummy_descr , dummy_item);-11257 $DESCRIPTOR(dir_descr , dir); 011258 $DESCRIPTOR(file_descr , fname);/11259 $DESCRIPTOR(name_descr , name);.11260 $DESCRIPTOR(id_descr , ident);111261 $DESCRIPTOR(date_descr , date_s);t211262 $DESCRIPTOR(ctrstr0, "!%I (!%U)");511263 $DESCRIPTOR(ctrstr4, "!#AS!9UL/!UL");,B11264 $DESCRIPTOR(ctrstr7, "!#AS!9UL/!9!4UL/!UL");111265 $DESCRIPTOR(ctrstr8, format_str); 11266 &11267 /* Code starts here */211268 /* Parse the various qualifiers */ DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 8jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4)11269 $11270 progress_ind = TRUE;%11271 /* Get device name */L11272 status = parse_item("device", &device_descr, 0, &dummy , 0);!11273 if (status == 1) 311274 { 611275 if (strindex(&device,":",64) == -1) 11276 { ;11277 device[device_descr.dsc$w_length]=':'; 311278 device_descr.dsc$w_length += 1;{11279 }r11280 } &11281 clean_flags.fopen = 0;'11282 flgs = SMG$M_WRAP_CHAR; (11283 /* Check file name(s) */;11284 dummy_descr.dsc$a_pointer = (char *) &fcnt; W11285 status = parse_item("file", &dummy_descr, &file[0].name, &matname , 3);r011286 /* Check exclude file name(s) */<11287 dummy_descr.dsc$a_pointer = (char *) &efcnt;P11288 status = parse_item("exclude", &dummy_descr, &exclfile[0].name, 11289 &matexcl ,3);oA11290 dummy_descr.dsc$a_pointer = (char *) &dummy_item;*211291 /* Search on allocated filesize */P11292 status = parse_item("allocated", &dummy_descr, 0, &matalloc, 2);&11293 if (matalloc == TRUE) 211294 { /* Check minimum size entered */_11295 status = parse_item("size_min", &dummy_descr, &size_min, &mat_a_minsize , 1);1911296 if ((status & 1) != 1) return(status); 211297 /* Check maximum size entered */_11298 status = parse_item("size_max", &dummy_descr, &size_max, &mat_a_maxsize , 1); 911299 if ((status & 1) != 1) return(status); 1)11300 mat_r_minsize = FALSE; (11301 mat_r_maxsize = FALSE;F11302 if (mat_a_minsize == TRUE && mat_a_maxsize == TRUE )-11303 if (size_min > size_max) a11304 { W11305 sprintf(outbuf,"%%DFU-E-SIZEERR, Minimum size > maximum size\n"); !11306 put_disp();t 11307 cleanup(); 11308 return(1);11309 } 11310 }t11311 else211312 { /* Check minimum size entered */_11313 status = parse_item("size_min", &dummy_descr, &size_min, &mat_r_minsize , 1); 911314 if ((status & 1) != 1) return(status); 6211315 /* Check maximum size entered */_11316 status = parse_item("size_max", &dummy_descr, &size_max, &mat_r_maxsize , 1);e911317 if ((status & 1) != 1) return(status); )11318 mat_a_minsize = FALSE; (11319 mat_a_maxsize = FALSE;F11320 if (mat_r_minsize == TRUE && mat_r_maxsize == TRUE )-11321 if (size_min > size_max) 11322 { W11323 sprintf(outbuf,"%%DFU-E-SIZEERR, Minimum size > maximum size\n"); "11324 put_disp(); 11325 cleanup(); DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 9jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4) 11326 return(1);11327 } 11328 }g)11329 /* Check format string */ K11330 status = parse_item("format", &ctrstr8, 0, &matformat , 0);2,11331 /* Check backlink file id */U11332 status = parse_item("bakfid", &dummy_descr, &bakfid, &matbakfid , 1);A711333 if ((status & 1) != 1) return(status); (11334 /* Check specific LBN */L11335 status = parse_item("lbn", &dummy_descr, &lbn, &matlbn , 1);711336 if ((status & 1) != 1) return(status); #11337 /* Check file id */ N11338 status = parse_item("fid", &dummy_descr, &infid, &matfid , 1);711339 if ((status & 1) != 1) return(status); /11340 /* Check overallocated files */ U11341 status = p#4r~ DFU024.BCK{[DFU024.LIS]DFU_IFSCAN.LIS;3|!arse_item("over", &dummy_descr, &over_alloc, &matover , 1); 711342 if ((status & 1) != 1) return(status); _.11343 /* Files with multi headers */N11344 status = parse_item("multiple", &dummy_descr, 0, &matmult, 2);)11345 /* Full output display */ K11346 status = parse_item("full", &dummy_descr, 0, &dispfull, 2); #11347 /* Summary output*/sM11348 status = parse_item("summary", &dummy_descr, 0, &matsumm, 2); 311349 /* Files with placement pointers */ N11350 status = parse_item("placed", &dummy_descr, 0, &matplaced, 2);311351 /* Disallow volume set processing*/R11352 status = parse_item("novolset", &dummy_descr, 0, &matnovolset, 2);%11353 /* Home block only */ R11354 status = parse_item("nosearch", &dummy_descr, 0, &matnosearch, 2);-11355 /* Display home block info */ J11356 status = parse_item("home", &dummy_descr, 0, &mathome, 2);(11357 /* Display statistics */P11358 status = parse_item("statistics", &dummy_descr, 0, &matstat, 2);!11359 /* Sort output */dJ11360 status = parse_item("sort", &dummy_descr, 0, &matsort, 2);#11361 /* Fragmentation */mR11362 status = parse_item("fragment", &dummy_descr, 0, &matfragment, 2);)11363 if (matfragment == TRUE) t11364 { 11365 retr_min = 0; 11366 retr_max = 0; ]11367 status = parse_item("retr_min", &dummy_descr, &retr_min, &matfragment , 1);n911368 if ((status & 1) != 1) return(status); x]11369 status = parse_item("retr_max", &dummy_descr, &retr_max, &matfragment , 1);_911370 if ((status & 1) != 1) return(status); %11371 matfragment = TRUE; 11372 }#11373 /* Version check */fW11374 status = parse_item("version_number", &dummy_descr, 0, &matversion, 2);t'11375 if (matversion == TRUE)a11376 { 11377 vers_min = 0; 11378 vers_max = 0; \11379 status = parse_item("vers_min", &dummy_descr, &vers_min, &matversion , 1);811380 if ((status & 1) != 1) return(status);\11381 status = parse_item("vers_max", &dummy_descr, &vers_max, &matversion , 1);811382 if ((status & 1) != 1) return(status); 1DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 10,jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4)$11383 matversion = TRUE;11384 } +11385 /* Date and time options */cT11386 status = parse_item("bak_none", &dummy_descr, 0, &matnonebackup, 2);U11387 status = parse_item("exp_none", &dummy_descr, 0, &matnoneexpired, 2);,]11388 status = parse_item("cre_before", &dummy_descr, &cre_bef, &matbefcreated, 4);;\11389 status = parse_item("cre_since", &dummy_descr, &cre_sin, &matsincreated, 4);]11390 status = parse_item("mod_before", &dummy_descr, &mod_bef, &matbefmodified,4);c\11391 status = parse_item("mod_since", &dummy_descr, &mod_sin, &matsinmodified,4);\11392 status = parse_item("bak_before", &dummy_descr, &bak_bef, &matbefbackup, 4);[11393 status = parse_item("bak_since", &dummy_descr, &bak_sin, &matsinbackup, 4); \11394 status = parse_item("exp_before", &dummy_descr, &exp_bef, &matbefexpired,4);[11395 status = parse_item("exp_since", &dummy_descr, &exp_sin, &matsinexpired,4);L211396 /* File characteristics options */11397 chars=0;<11398 dummy_descr.dsc$a_pointer = (char *) &chars;F11399 status = parse_item("or", &dummy_descr, 0, &mator, 2);)11400 setchar = FH2$M_NOBACKUP; V11401 status = parse_item("nobackup", &dummy_descr, &setchar, &matchars, 5);(11402 setchar = FH2$M_CONTIGB;U11403 status = parse_item("besttry", &dummy_descr, &setchar, &matchars, 5);C'11404 setchar = FH2$M_LOCKED; T11405 status = parse_item("locked", &dummy_descr, &setchar, &matchars, 5);'11406 setchar = FH2$M_CONTIG;dX11407 status = parse_item("contiguous", &dummy_descr, &setchar, &matchars, 5);'11408 setchar = FH2$M_BADACL; T11409 status = parse_item("badacl", &dummy_descr, &setchar, &matchars, 5);&11410 setchar = FH2$M_SPOOL;S11411 status = parse_item("spool", &dummy_descr, &setchar, &matchars, 5);*11412 setchar = FH2$M_DIRECTORY;W11413 status = parse_item("directory", &dummy_descr, &setchar, &matchars, 5); )11414 setchar = FH2$M_BADBLOCK;iV11415 status = parse_item("badblock", &dummy_descr, &setchar, &matchars, 5);(11416 setchar = FH2$M_MARKDEL;S11417 status = parse_item("marked", &dummy_descr, &setchar, &matmark, 5);,511418 if (matmark == TRUE) matchars = TRUE;t)11419 setchar = FH2$M_NOCHARGE;$V11420 status = parse_item("nocharge", &dummy_descr, &setchar, &matchars, 5);&11421 setchar = FH2$M_ERASE;S11422 status = parse_item("erase", &dummy_descr, &setchar, &matchars, 5);9(11423 setchar = FH2$M_SCRATCH;U11424 status = parse_item("scratch", &dummy_descr, &setchar, &matchars, 5);_'11425 setchar = FH2$M_NOMOVE;aT11426 status = parse_item("nomove", &dummy_descr, &setchar, &matchars, 5);,11427 setchar = FH2$M_NOSHELVABLE;Y11428 status = parse_item("noshelvable", &dummy_descr, &setchar, &matchars, 5);)(11429 setchar = FH2$M_SHELVED;W11430 status = parse_item("isshelved", &dummy_descr, &setchar, &matchars, 5);_/11431 if (chars !=0) matchars = TRUE;0A11432 dummy_descr.dsc$a_pointer = (char *) &dummy_item;11433 "11434 /* Ident or UIC */M11435 status = parse_item("ident", &dummy_descr, &uic, &matuic, 6); %11436 if (matuic == FALSE) M11437 status = parse_item("uic", &dummy_descr, &uic, &matuic, 6); &11438 if ((status &1 ) != 1)11439 {  1DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 11)jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4)L11440 sprintf(outbuf,"%%DFU-E-INVID, Wrong uic or identifier,");11441 put_disp(); &11442 singlemsg(0,status);11443 return(1); 11444 }S+11445 id_descr.dsc$w_length = 30;U11446 %11447 /* Get output file */i"11448 strcpy(fmode,"w");O11449 status = parse_item("outfile", &file_descr, 0, &matoutput , 0);a11450 if (!matoutput) P11451 status = parse_item("append", &file_descr, 0, &matappend , 0);11452 if (matappend)11453 { $11454 matoutput = TRUE; $11455 strcpy(fmode,"a");11456 } (11457 if (matoutput == FALSE) 11458 {(/11459 strcpy(fname,"SYS$OUTPUT:"); /11460 file_descr.dsc$w_length = 11; 11461 }i11462 else911463 fname[file_descr.dsc$w_length] = '\0'; )Z11464 fp = fopen(fname,fmode,"mrs=255","rfm=var","ctx=rec","rat=cr","rop=WBH"); &11465 clean_flags.fopen = 1;%11466 if (matsort == FALSE)!'11467 clean_flags.sort = 0;*11468 else11469 { U11470 status = sor$begin_sort(&keybuf,&reclen,0,0,0,0,SOR$GK_RECORD,0,0); (11471 if ((status &1 ) != 1)11472 { )11473 singlemsg(0,status); d$11474 return(status); 11475 }('11476 clean_flags.sort = 1;411477 }k+11478 /* All qualifiers parsed */t11479 ?11480 if (matstat == TRUE) status = lib$init_timer(); )11481 clean_flags.channels = 0;'11482 clean_flags.events = 0;r'11483 clean_flags.expreg = 0;( 11484 tot_r_size = 0; 11485 tot_a_size = 0; 11486 tothdr = 0; 11487 totfrag = 0;11488 fcount = 0;l!11489 val_headers = 0; o 11490 spacing = colls;11491 D11492 /* Open the volume (set) , read in the home block */11493 611494 status = open_device(&device_descr,0);'11495 if ((status & 1) != 1) 11496 {  eDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 12 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4)11497 cleanup();"11498 return(status); 11499 }s11500 11501 curvol = 1; 11502 size = 1; 11503 ctx.end = FALSE;Q11504 if (smg$enable) SMG$SET_CURSOR_MODE(&paste_id,&SMG$M_CURSOR_OFF); 811505 while ((curvol <= maxvol) && (!ctx.end))11506 { 111507 ctx.i = -1; /* Clear context */p.11508 if (rvt[curvol].i_open ==1) 11509 { $11510 if (maxvol == 1)11511 { S11512 sprintf(outbuf,"%%DFU-I-SEARCH, Start search on %.*s (%s)\n",p811513 device_descr.dsc$w_length, device,311514 &rvt[curvol].fulldevnam[1]); t11515 } 11516 else11517 { T11518 if (matnovolset == TRUE) curvol = orig_rvn; /*No volume set */^11519 sprintf(outbuf,"%%DFU-I-SEARCH, Start search on %.*s (%s) , RVN = %d\n",B11520 rvt[curvol].devnam_len, rvt[curvol].devnam, :11521 &rvt[curvol].fulldevnam[1],curvol); 11522 } 11523 put_disp();e11524 headers=0;$11525 val_headers = 0;[11526 /* Read in index file bitmap, and return free hdrs + highest bit set */(211527 read_indexf_bitmap(&free_hdr);11528 ;11529 /* Display home block info if needed */)11530 if (mathome == TRUE) t11531 { Z11532 sprintf(outbuf,"\nVolume name : %.12s",home[curvol].volname);!11533 put_disp();Z11534 sprintf(outbuf,"Volume owner : %.12s",home[curvol].ownername);!11535 put_disp(); Z11536 sprintf(outbuf,"Structure name : %.12s",home[curvol].strucname);!11537 put_disp();nU11538 sprintf(outbuf,"Cluster size : %d",home[curvol].cluster);n!11539 put_disp();dV11540 sprintf(outbuf,"Maximum # files : %d",home[curvol].maxfiles);!11541 put_disp();tT11542 sprintf(outbuf,"Header count : %d",rvt[curvol].if_size);!11543 put_disp();"W11544 sprintf(outbuf,"First header VBN : %d",rvt[curvol].vbn_file_1);s!11545 put_disp();sK11546 sprintf(outbuf,"Available headers : %d\n",free_hdr);r!11547 put_disp();911548 }r11549 =11550 if (matnosearch == TRUE ) ctx.end = TRUE; /11551 status = get_next_header(); :11552 if ((status & 1) != 1) return(status);V11553 while (! ctx.end) /* Loop until end of INDEXF or CTRL C entered */ rDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 13sjV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4)11554 { $11555 hdr = ctx.hdr;"11556 id = ctx.id;M11557 if (matfid == TRUE) /* Special case if FID requested */e11558 { '11559 ctx.end = TRUE;1811560 if (infid > rvt[curvol].if_size)11561 { a11562 sprintf(outbuf,"%%DFU-E-FIDTOOBIG, File id specified > max file id\n");s&11563 put_disp(); %11564 goto nexti; 11565 }(A11566 vbn = rvt[curvol].vbn_file_1 + infid - 1;eM11567 status = SYS$QIOW(0,rvt[curvol].channel,IO$_READVBLK,,R11568 &iostat[(ctx.thread)-1],0,0,&header[ctx.i],512,vbn,0,0,0);11569 }dH11570 /* Check corresponding bitmap bit (must be set) */;11571 bitblk = (headers + 4095) / 4096 - 1;d?11572 bitje = (headers - 1 - bitblk*4096) / 32;e211573 bitval = (headers - 1) % 32;V11574 status = lib$ffs(&bitval,&size,&bitmap[bitblk+1].block[bitje*4],11575 &find); <11576 if (status == LIB$_NOTFOU) goto nexti;#11577 rvn = curvol; i11578 if (matlbn == FALSE ) if (hdr->seg_num !=0) goto nexti; /* Skip extension header */e"11579 rtvptr = 0; 211580 status = verify_header(hdr);T11581 if (status != SS$_NORMAL) goto nexti; /* Not a valid header */11582 [11583 /* Check marked for delete files, skip unless explicitly requested */r,11584 if (matmark == FALSE) Y11585 if ((hdr->filechar & FH2$M_MARKDEL) == FH2$M_MARKDEL) goto nexti;,11586 611587 /* We have a valid file header.G11588 Now check the various attributes for a match )11589 */ r$11590 val_headers++;211591 /* Check for specific LBN */*11592 if (matlbn == TRUE) 11593 { &11594 found = FALSE;G11595 offset = hdr->mpoffset; /* Start of map area */ 311596 map_words = hdr->map_inuse;i?11597 for (j = offset; j<(offset+map_words);) 11598 { 111599 disass_map_ptr(hdr,&j); R11600 if ((lbn >= lbnstart) && (lbn < (lbnstart + lbncount))) 11601 { *11602 found = TRUE; 711603 j = offset + map_words + 1;%11604 }n11605 } /11606 if (!found) goto nexti;tU11607 if (hdr->seg_num > 0 ) /* read backlink for primary header */w11608 { M11609 rvn = hdr->bk_fid_overlay.bk_fid_fields.bk_fid_rvn;511610 if (rvn == 0) rvn = curvol;s DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 140jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4)V11611 fidnum = hdr->bk_fid_overlay.bk_fid_fields.bk_fid_nmx << 16;D11612 fidnum += hdr->bk_fid_overlay.backlink[0];C11613 ivbn = rvt[rvn].vbn_file_1 + fidnum - 1; 1L11614 status = SYS$QIOW(0,rvt[rvn].channel,IO$_READVBLK,L11615 &iostat[iocnt],0,0,&header[ctx.i],512,ivbn,0,0,0);O11616 if ((status & 1) == 1) status = iostat[iocnt].iosb_1;r111617 if ((status & 1) != 1) 011618 { `11619 sprintf(outbuf,"%%DFU-E-READERR, Error reading backlink header,\n");(11620 put_disp(); 011621 singlemsg(0,status);'11622 goto nexti; 11623 } 611624 status = verify_header(hdr);X11625 if (status != SS$_NORMAL) goto nexti; /* Not a valid header */11626 }a11627 }11628 V11629 /* Get size fields (NOTE : they are stored in reverse order ! */L11630 a_size = hdr->hiblk_overlay.hiblk_fields.hiblkh << 16;G11631 a_size += hdr->hiblk_overlay.hiblk_fields.hiblkl;L11632 r_size = hdr->efblk_overlay.efblk_fields.efblkh << 16;G11633 r_size += hdr->efblk_overlay.efblk_fields.efblkl;(&11634 if (r_size > 0) [11635 if (hdr->ffbyte == 0) r_size--; /* Correct size on block boundary*/ 11636 :11637 /* Check for over allocated files */"11638 if (matover)11639 { G11640 if ((a_size - r_size) < over_alloc) goto nexti; 11641 }211642 411643 /* Check for 'placed' files */$11644 if (matplaced)11645 { B11646 j = hdr->mpoffset; /* Start of map area */S11647 if (hdr->map_inuse == 0) goto nexti; /* Skip empty files */D/11648 disass_map_ptr(hdr,&j); 611649 if (lbncount != 0) goto nexti;11650 }t11651 611652 /* Check file characteristics */,11653 if (matchars == TRUE )11654 { :11655 setchar = (hdr->filechar & chars);,11656 if (mator == FALSE) ;11657 if (setchar != chars) goto nexti;111658 else:11659 if (setchar == 0) goto nexti; 11660 } 11661 811662 /* Check files with backlink id */,11663 if (matbakfid == TRUE)11664 { T11665 fidnum = hdr->bk_fid_overlay.bk_fid_fields.bk_fid_nmx << 16;O11666 fidnum += hdr->bk_fid_overlay.bk_fid_fields.bk_fid_num; 911667 if (fidnum != bakfid) goto nexti; 2DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 15djV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4)11668 } 11669 311670 /* Check multiheader files */ +11671 if (matmult == TRUE) tM11672 if (hdr->ext_fid_overlay.ext_fid[0] == 0) goto nexti; 11673 )11674 /* Check the UIC */o)11675 if (matuic == TRUE)rP11676 if (uic != hdr->fileowner_overlay.fileowner) goto nexti;11677 /11678 /* Check fragmentation */ 11679 hdrs = 1; !11680 rtvptr = 0; 011681 if (matfragment == TRUE) 11682 { 711683 get_map_pointers(hdr, &rtvptr); B11684 if (hdr->ext_fid_overlay.ext_fid[0] != 0) G11685 status = follow_extents(hdr, &rtvptr, &hdrs);]:11686 if (rtvptr < retr_min) goto nexti;L11687 if (retr_max !=0) if (rtvptr > retr_max) goto nexti;11688 } 11689 /11690 /* Check the file name */ ;11691 if (matname || matexcl || matversion)411692 { 911693 memcpy(&name[0],id->filename,20);.Q11694 if (name[19] != ' ') memcpy(&name[20],id->filenamext,66); H11695 name_descr.dsc$w_length = strindex(name," ",86);11696 }I*11697 if (matname == TRUE)11698 { 11699 j=0; G'11700 found = FALSE; &11701 while (!found)11702 { M11703 dummy_descr.dsc$a_pointer = (char *) &file[j].name; B11704 dummy_descr.dsc$w_length = file[j].flen;L11705 status = str$match_wild(&name_descr,&dummy_descr);A11706 if (status == STR$_MATCH) found = TRUE;t*11707 j++; 811708 if (j+1 > fcnt ) found = TRUE;11709 }p=11710 if (status != STR$_MATCH) goto nexti;d11711 } *11712 if (matexcl == TRUE)11713 { 11714 j=0; '11715 found = FALSE; +&11716 while (!found)11717 { Q11718 dummy_descr.dsc$a_pointer = (char *) &exclfile[j].name;eF11719 dummy_descr.dsc$w_length = exclfile[j].flen;L11720 status = str$match_wild(&name_descr,&dummy_descr);A11721 if (status == STR$_MATCH) found = TRUE; *11722 j++; 911723 if (j+1 > efcnt ) found = TRUE; 11724 }v &DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 16jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4)=11725 if (status == STR$_MATCH) goto nexti;r11726 } 11727 )11728 /* Version check */(-11729 if (matversion == TRUE)d11730 { 811731 name[name_descr.dsc$w_length]=0;D11732 j = atol ( &name[strindex(name,";",86)+1] );611733 if ( j < vers_min) goto nexti;K11734 if ( vers_max != 0) if ( j > vers_max ) goto nexti; 11735 }a11736 311737 /* Check date/time options */r111738 if (matbefcreated == TRUE) 111739 { L11740 status = lib$subx(&cre_bef, &id->credate[0], &diff);:11741 if (diff.date[1] <= 0) goto nexti;11742 } 111743 if (matsincreated == TRUE) s11744 { L11745 status = lib$subx(&cre_sin, &id->credate[0], &diff);:11746 if (diff.date[1] > 0 ) goto nexti;11747 } 211748 if (matbefmodified == TRUE) 11749 { L11750 status = lib$subx(&mod_bef, &id->revdate[0], &diff);:11751 if (diff.date[1] <= 0) goto nexti;11752 }p211753 if (matsinmodified == TRUE) 11754 { L11755 status = lib$subx(&mod_sin, &id->revdate[0], &diff);:11756 if (diff.date[1] > 0 ) goto nexti;11757 }0011758 if (matbefbackup == TRUE) <11759 /* Skip files without backup date */11760 { S11761 if (id->bakdate[0] == 0 && id->bakdate[1] == 0) goto nexti; L11762 status = lib$subx(&bak_bef, &id->bakdate[0], &diff);:11763 if (diff.date[1] <= 0) goto nexti;11764 } 011765 if (matsinbackup == TRUE) 11766 { L11767 status = lib$subx(&bak_sin, &id->bakdate[0], &diff);:11768 if (diff.date[1] > 0 ) goto nexti;11769 } 111770 if (matbefexpired == TRUE) V@11771 /* Skip files without expiration date */11772 { S11773 if (id->expdate[0] == 0 && id->expdate[1] == 0) goto nexti; L11774 status = lib$subx(&exp_bef, &id->expdate[0], &diff);:11775 if (diff.date[1] <= 0) goto nexti;11776 }"111777 if (matsinexpired == TRUE) 11778 { L11779 status = lib$subx(&exp_sin, &id->expdate[0], &diff);:11780 if (diff.date[1] > 0 ) goto nexti;11781 }  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 17 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4)111782 if (matnonebackup == TRUE ) Q11783 if (id->bakdate[0] > 0 || id->bakdate[1] > 0) goto nexti;1211784 if (matnoneexpired == TRUE )Q11785 if (id->expdate[0] > 0 || id->expdate[1] > 0) goto nexti;e11786 ,11787 /* Check file sizes */K11788 if (mat_r_minsize) if (r_size < size_min) goto nexti;dK11789 if (mat_r_maxsize) if (r_size > size_max) goto nexti;eK11790 if (mat_a_minsize) if (a_size < size_min) goto nexti; K11791 if (mat_a_maxsize) if (a_size > size_max) goto nexti; 11792 411793 /* Post the results to user */11794 +11795 tot_r_size += r_size; +11796 tot_a_size += a_size;-%11797 tothdr += hdrs;4(11798 totfrag += rtvptr;11799 fcount++;s611800 if (matsumm == TRUE) goto nexti;@11801 fid_to_name(&dir); /* Get the file name */;11802 dir_descr.dsc$w_length = strlen(dir);k-11803 if (dispfull == FALSE ) 11804 { 111805 if (matfragment == FALSE)c11806 { n11807 if (spacing > 80) faolen = 86 + spacing*((dir_descr.dsc$w_length + 46 - 1)/spacing);a11808 else faolen = 56 + spacing*((dir_descr.dsc$w_length + 24 - 1)/spacing); I11809 status = SYS$FAO(&ctrstr4, &outlen, &out_descr, >11810 faolen, &dir_descr, r_size, a_size);11811 }611812 else11813 { n11814 if (spacing > 80) faolen = 76 + spacing*((dir_descr.dsc$w_length + 56 - 1)/spacing);a11815 else faolen = 46 + spacing*((dir_descr.dsc$w_length + 34 - 1)/spacing); I11816 status = SYS$FAO(&ctrstr7, &outlen, &out_descr, L11817 faolen, &dir_descr, r_size, a_size, hdrs, rtvptr);11818 }F/11819 if (matsort == FALSE) 611820 { 011821 outbuf[outlen] = '\0';%11822 put_disp(); /11823 outbuf[outlen] = ' ';d)11824 if (matformat) 711825 { :11826 out_descr.dsc$w_length = 255; X11827 status = SYS$FAO(&ctrstr8, &outlen, &out_descr, &dir_descr);11828 }eM11829 if (matoutput) fprintf(fp,"%.*s\n",outlen,outbuf); t711830 out_descr.dsc$w_length = 255;E11831 } 11832 else11833 { ;11834 out_descr.dsc$w_length = outlen; 811835 sor$release_rec(&out_descr,0);811836 out_descr.dsc$w_length = 255; 11837 }111838 } e mDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 18 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4)11839 else11840 { >11841 x = strindex(&dirrec.dirnam,"]",198); 11842 x++;I11843 sprintf(outbuf,"Filename: %s",&dirrec.dirnam[x]);$11844 put_disp(); A11845 if (matoutput) fprintf(fp,"%s\n",outbuf);0T11846 fidnum = hdr->bk_fid_overlay.bk_fid_fields.bk_fid_nmx << 16;O11847 fidnum += hdr->bk_fid_overlay.bk_fid_fields.bk_fid_num;)R11848 sprintf(outbuf,"Directory: %.*s , Backlink ID (%d,%d,%d)",311849 x,&dirrec.dirnam[0],fidnum,nE11850 hdr->bk_fid_overlay.bk_fid_fields.bk_fid_seq,MF11851 hdr->bk_fid_overlay.bk_fid_fields.bk_fid_rvn);$11852 put_disp(); A11853 if (matoutput) fprintf(fp,"%s\n",outbuf);fW11854 status = SYS$FAO(&ctrstr0, &id_descr.dsc$w_length , &id_descr, (\11855 hdr->fileowner_overlay.fileowner, hdr->fileowner_overlay.fileowner);K11856 fidnum = hdr->fid_overlay.fid_fields.fid_nmx << 16; :11857 fidnum += hdr->fid_overlay.fid[0];C11858 ivbn = rvt[curvol].vbn_file_1 + fidnum - 1;_T11859 sprintf(outbuf,"VBN : %d , File ID (%d,%d,%d) , UIC : %.*s",?11860 ivbn, fidnum, hdr->fid_overlay.fid[1], tY11861 hdr->fid_overlay.fid_fields.fid_rvn,id_descr.dsc$w_length,ident); $11862 put_disp(); A11863 if (matoutput) fprintf(fp,"%s\n",outbuf); 311864 id_descr.dsc$w_length = 30;:O11865 sprintf(outbuf,"Size : %d/%d, Revision count : %d", 611866 r_size, a_size, id->revision);$11867 put_disp(); A11868 if (matoutput) fprintf(fp,"%s\n",outbuf); R11869 status = SYS$ASCTIM(&date_descr.dsc$w_length ,&date_descr,(11870 &id->credate,0);Z11871 sprintf(outbuf, "Created : %.*s",date_descr.dsc$w_length, date_s);$11872 put_disp(); A11873 if (matoutput) fprintf(fp,"%s\n",outbuf);;R11874 status = SYS$ASCTIM(&date_descr.dsc$w_length ,&date_descr,(11875 &id->revdate,0);Z11876 sprintf(outbuf, "Revised : %.*s",date_descr.dsc$w_length, date_s);$11877 put_disp(); A11878 if (matoutput) fprintf(fp,"%s\n",outbuf);&G11879 if (id->expdate[0] == 0 && id->expdate[1] == 0) 11880 { <11881 strcpy(date_s,"");B11882 sprintf(outbuf, "Expired : %s", date_s);&11883 put_disp(); C11884 if (matoutput) fprintf(fp,"%s\n",outbuf); 11885 }o11886 else11887 { T11888 status = SYS$ASCTIM(&date_descr.dsc$w_length ,&date_descr,*11889 &id->expdate,0);\11890 sprintf(outbuf, "Expired : %.*s",date_descr.dsc$w_length, date_s);&11891 put_disp(); C11892 if (matoutput) fprintf(fp,"%s\n",outbuf);(11893 }tG11894 if (id->bakdate[0] == 0 && id->bakdate[1] == 0)R11895 {  *DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 19 jV1.0 22-AUG-1$O~ DFU024.BCK{[DFU024.LIS]DFU_IFSCAN.LIS;3|_996 11:21:44 DFU_IFSCAN.C;1 (4)@11896 strcpy(date_s,"");D11897 sprintf(outbuf, "Backup : %s\n", date_s);&11898 put_disp(); C11899 if (matoutput) fprintf(fp,"%s\n",outbuf); 11900 } 11901 else11902 { T11903 status = SYS$ASCTIM(&date_descr.dsc$w_length ,&date_descr,*11904 &id->bakdate,0);^11905 sprintf(outbuf, "Backup : %.*s\n",date_descr.dsc$w_length, date_s);&11906 put_disp(); C11907 if (matoutput) fprintf(fp,"%s\n",outbuf); 11908 } 11909 } 11910 '11911 /* Next header */711912 nexti: t111913 status = get_next_header();1<11914 if ((status & 1) != 1) return(status);11915 } 11916 } !11917 if (ctrlc !=1) 11918 { O11919 sprintf(outbuf," Progress : 100%% Status : READY"); "11920 put_status(1);b11921 sprintf(outbuf,"\n%%DFU-I-EOF, End of file INDEXF.SYS, Primary headers : %d\n"$11922 ,val_headers);11923 put_disp();o11924 } 11925 curvol++; >11926 ctx.end = FALSE; /* Next volume unless ...*/:11927 if (matnovolset == TRUE) ctx.end = TRUE;/11928 if (clean_flags.events == 1) 11929 { P11930 for (i=1; i <= iocnt ; i++) status = lib$free_ef(&efn[i-1]);+11931 clean_flags.events = 0; 11932 }_11933 } 11934 11935 if (ctrlc == 1) 11936 { 11937 ctrlc = 0; 11938 do_abort(); 11939 } $11940 if (matsort == TRUE)11941 { A11942 sprintf(outbuf,"%%DFU-I-SORT, Sorting ... \n");-11943 put_disp();+,11944 status = sor$sort_merge();)11945 if ((status & 1 ) != 1)011946 { O11947 sprintf(outbuf,"%%DFU-E-SORTERR, Error sorting output,\n"); 11948 put_disp(); (11949 singlemsg(0,status);11950 } ?11951 status = sor$return_rec(&out_descr, &outlen); 111952 while (status != SS$_ENDOFFILE)  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 20 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (4)11953 { *11954 outbuf[outlen] = '\0';11955 put_disp(); G11956 if (matoutput) fprintf(fp,"%.*s\n",outlen,outbuf); eA11957 status = sor$return_rec(&out_descr, &outlen); 11958 }p)11959 sprintf(outbuf," \n"); a11960 put_disp(); 11961 }+*11962 if (matfragment == FALSE) 11963 { R11964 sprintf(outbuf,"%%DFU-S-FND , Files found : %d, Size : %d/%d\n",111965 fcount,tot_r_size,tot_a_size); 11966 put_disp(); 11967 } 11968 else11969 { d11970 sprintf(outbuf,"%%DFU-S-FND , Files found : %d, Size : %d/%d, Hdr/Frag : %d/%d\n",A11971 fcount,tot_r_size,tot_a_size, tothdr, totfrag); 11972 put_disp();)11973 } +11974 /* Now cleanup the stuff */_11975 cleanup();Q11976 if (matstat == TRUE) status = lib$show_timer(0,0,display_stat,0);s11977 return(1);11978 } 11979  fDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 21 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (5) *11980 int report_command(int mask)11981 /*211982 Create disk fragmentation reportB11983 by scanning INDEXF.SYS, BITMAP.SYS and QUOTA.SYS11984 */11985 11986 {9L11987 static char dummy_item[80], fname[80], bfile[255], fmode[2];R11988 Boolean dummy, matoutput, matappend, matgraph, matusage, matstat, 211989 matnobitmap, matnovol, matnoindex;/11990 struct header_area_struct *hdr;i11991 register int i; )11992 unsigned short badfid[3]; +11993 float a, b, avefrag, scale;x?11994 int ivbn, bitblk, bitje, bitval, find, rvn, x, Q11995 fcount, mcount, acount , ccount, dcount, ucount, badrtv, if_frag,>T11996 bad_r_size, bad_a_size, mark_r_size, mark_a_size, mmp_hdr, mmp_blks,H11997 r_size, a_size, hdrs, rtvptr, free_hdr, totfrag, tothdr,G11998 tot_r_size, tot_a_size, map_in_use ,map_prc , k, size; =11999 int freeext, largest, freeblocks , large_lbn;b612000 unsigned int uic, page_cnt, table[70];12001 char line[70];12002 struct { 1812003 int own_uic, flag, rsize, asize, hdr; 12004 } !12005 usage_table[750]; (12006 void get_map_pointers(),,12007 add_usage(), report_usage();$12008 /* FAO parameters */'12009 unsigned short outlen; n012010 $DESCRIPTOR(out_descr , outbuf);-12011 $DESCRIPTOR(badfile , bfile); 312012 $DESCRIPTOR(device_descr , device); 012013 $DESCRIPTOR(file_descr , fname);612014 $DESCRIPTOR(dummy_descr , dummy_item);12015 &12016 /* Code starts here */212017 /* Parse the various qualifiers */12018 $12019 progress_ind = TRUE;%12020 /* Get device name */1L12021 status = parse_item("device", &device_descr, 0, &dummy , 0);!12022 if (status == 1) 12023 { 612024 if (strindex(&device,":",64) == -1) 12025 { ;12026 device[device_descr.dsc$w_length]=':'; _312027 device_descr.dsc$w_length += 1;p12028 } 12029 }uL12030 status = parse_item("graph", &dummy_descr, 0, &matgraph, 2);O12031 status = parse_item("nofile", &dummy_descr, 0, &matnoindex, 2);1O12032 status = parse_item("novolume", &dummy_descr, 0, &matnovol, 2);aR12033 status = parse_item("nobitmap", &dummy_descr, 0, &matnobitmap, 2);P12034 status = parse_item("statistics", &dummy_descr, 0, &matstat, 2);O12035 status = parse_item("usage", &dummy_descr, &uic, &matusage, 6);  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 22 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (5)V12036 if (matusage == TRUE) for (i=0; i < 750; i++) usage_table[i].flag = 0;%12037 /* Get output file */ &12038 clean_flags.fopen = 0;"12039 strcpy(fmode,"w");O12040 status = parse_item("outfile", &file_descr, 0, &matoutput , 0);112041 if (!matoutput) P12042 status = parse_item("append", &file_descr, 0, &matappend , 0);12043 if (matappend)12044 { $12045 matoutput = TRUE; $12046 strcpy(fmode,"a");12047 } :(12048 if (matoutput == FALSE) 12049 { /12050 strcpy(fname,"SYS$OUTPUT:"); (/12051 file_descr.dsc$w_length = 11; 12052 }112053 else12054 {=912055 fname[file_descr.dsc$w_length] = '\0'; *12056 } Z12057 fp = fopen(fname,fmode,"mrs=255","rfm=var","ctx=rec","rat=cr","rop=WBH"); &12058 clean_flags.fopen = 1;12059 +12060 /* All qualifiers parsed */1?12061 if (matstat == TRUE) status = lib$init_timer();d%12062 clean_flags.sort = 0; )12063 clean_flags.channels = 0;:'12064 clean_flags.events = 0; '12065 clean_flags.expreg = 0; 12066 D12067 /* Open the volume (set) , read in the home block */12068 612069 status = open_device(&device_descr,0);712070 if ((status & 1) != 1) return(status); 12071 12072 curvol = 1; 12073 size = 1;i 12074 ctx.end = FALSE;Q12075 if (smg$enable) SMG$SET_CURSOR_MODE(&paste_id,&SMG$M_CURSOR_OFF); 812076 while ((curvol <= maxvol) && (!ctx.end))12077 { 112078 ctx.i = -1; /* Clear context */ .12079 if (rvt[curvol].i_open ==1) 12080 { $12081 if (maxvol == 1)12082 { P12083 sprintf(outbuf,"%%DFU-I-REPORT, Reporting on %.*s (%s)\n",V12084 device_descr.dsc$w_length, device, &rvt[curvol].fulldevnam[1]); 12085 } 12086 else12087 { [12088 sprintf(outbuf,"%%DFU-I-REPORT, Reporting on %.*s (%s) , RVN = %d\n",DB12089 rvt[curvol].devnam_len, rvt[curvol].devnam, ;12090 &rvt[curvol].fulldevnam[1], curvol); 112091 }+12092 put_disp();A ;DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 23 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (5)12093 headers=0;[12094 /* Read in index file bitmap, and return free hdrs + highest bit set */t212095 read_indexf_bitmap(&free_hdr); 12096 fcount = 0; 12097 mcount = 0; 12098 acount = 0; 12099 ccount = 0; 12100 dcount = 0; 12101 ucount = 0; $12102 bad_r_size = 0; $12103 bad_a_size = 0; %12104 mark_r_size = 0; $12105 mark_a_size = 0; 12106 badrtv = 0; !12107 mmp_hdr = 0; "12108 mmp_blks = 0; !12109 headers = 0; $12110 tot_r_size = 0; $12111 tot_a_size = 0; 12112 tothdr = 0; 12113 totfrag = 0;12114 012115 /* Report home block info */"12116 if (!matnovol)12117 { `12118 sprintf(outbuf," ***** Volume info for %.*s (from HOME block) *****",B12119 rvt[curvol].devnam_len, rvt[curvol].devnam);"12120 put_disp(); ?12121 if (matoutput) fprintf(fp,"%s\n",outbuf);tR12122 sprintf(outbuf," Volume name : %.12s",,12123 home[curvol].volname);"12124 put_disp(); ?12125 if (matoutput) fprintf(fp,"%s\n",outbuf);nR12126 sprintf(outbuf," Volume owner : %.12s",.12127 home[curvol].ownername);"12128 put_disp(); ?12129 if (matoutput) fprintf(fp,"%s\n",outbuf); R12130 sprintf(outbuf," Structure name : %.12s",.12131 home[curvol].strucname);"12132 put_disp(); ?12133 if (matoutput) fprintf(fp,"%s\n",outbuf);1O12134 sprintf(outbuf," Cluster size : %d",l,12135 home[curvol].cluster);"12136 put_disp(); ?12137 if (matoutput) fprintf(fp,"%s\n",outbuf); O12138 sprintf(outbuf," Maximum # files : %d", -12139 home[curvol].maxfiles);0"12140 put_disp(); ?12141 if (matoutput) fprintf(fp,"%s\n",outbuf);9O12142 sprintf(outbuf," Header count : %d",a+12143 rvt[curvol].if_size); "12144 put_disp(); ?12145 if (matoutput) fprintf(fp,"%s\n",outbuf);SO12146 sprintf(outbuf," First header VBN : %d",aA12147 rvt[curvol].vbn_file_1); "12148 put_disp(); ?12149 if (matoutput) fprintf(fp,"%s\n",outbuf);o ,DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 24ijV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (5)[12150 sprintf(outbuf," Free headers : %d\n",free_hdr);"12151 put_disp(); ?12152 if (matoutput) fprintf(fp,"%s\n",outbuf); 12153 }t12154 /12155 status = get_next_header();_:12156 if ((status & 1) != 1) return(status);V12157 while (! ctx.end) /* Loop until end of INDEXF or CTRL C entered */12158 { $12159 hdr = ctx.hdr;H12160 /* Check corresponding bitmap bit (must be set) */;12161 bitblk = (headers + 4095) / 4096 - 1; ?12162 bitje = (headers - 1 - bitblk*4096) / 32;r212163 bitval = (headers - 1) % 32;V12164 status = lib$ffs(&bitval,&size,&bitmap[bitblk+1].block[bitje*4],12165 &find);a?12166 if (status == LIB$_NOTFOU) goto next_rep;c#12167 rvn = curvol;eV12168 if (hdr->seg_num !=0) goto next_rep; /* Skip extension header */212169 status = verify_header(hdr);W12170 if (status != SS$_NORMAL) goto next_rep; /* Not a valid header */T=12171 /* We have a valid header, proceed...*/t!12172 fcount +=1;_(12173 if (headers == 1) 12174 { 412175 map_in_use = hdr->map_inuse;U12176 map_prc = (100*map_in_use) / (hdr->acoffset - hdr->mpoffset);h12177 } 12178 V12179 /* Get size fields (NOTE : they are stored in reverse order ! */L12180 a_size = hdr->hiblk_overlay.hiblk_fields.hiblkh << 16;G12181 a_size += hdr->hiblk_overlay.hiblk_fields.hiblkl; L12182 r_size = hdr->efblk_overlay.efblk_fields.efblkh << 16;G12183 r_size += hdr->efblk_overlay.efblk_fields.efblkl;2&12184 if (r_size > 0) [12185 if (hdr->ffbyte == 0) r_size--; /* Correct size on block boundary*/e/12186 if (a_size > 0) acount++; +12187 tot_r_size += r_size; +12188 tot_a_size += a_size; 12189 .12190 /* Increment counters */L12191 if ((hdr->filechar & FH2$M_MARKDEL) == FH2$M_MARKDEL) 12192 { !12193 mcount++;a.12194 mark_r_size += r_size;.12195 mark_a_size += a_size;12196 }fY12197 if ((hdr->filechar & FH2$M_DIRECTORY) == FH2$M_DIRECTORY) dcount++;112198 412199 /* Get fragmentation info */ 12200 hdrs = 1; !12201 rtvptr = 0;a512202 get_map_pointers(hdr, &rtvptr);u>12203 if (hdr->ext_fid_overlay.ext_fid[0] !=0)12204 { "12205 ucount++; E12206 status = follow_extents(hdr, &rtvptr, &hdrs);  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 25wjV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (5)12207 }5T12208 if (headers == 1) if_frag = rtvptr; /* Indexf.Sys fragments */012209 if (rtvptr == 1) ccount++;12210 else12211 { K12212 if (headers == 1) /* Special case for INDEXF.SYS */a412213 if (rtvptr == 4) ccount++;12214 else12215 { ;12216 mmp_hdr = mmp_hdr + rtvptr - 3; R12217 mmp_blks = mmp_blks + a_size - rvt[curvol].vbn_file_1;12218 } 12219 else*12220 if (rtvptr > 3) 12221 { ;12222 mmp_hdr = mmp_hdr + rtvptr - 3;C/12223 mmp_blks += a_size;a12224 } 12225 } %12226 tothdr += hdrs;2512227 if (headers == 1) totfrag++; >12228 else if (a_size != 0) totfrag += rtvptr;+12229 if (rtvptr > badrtv) f12230 { <12231 badfid[0] = hdr->fid_overlay.fid[0];<12232 badfid[1] = hdr->fid_overlay.fid[1];Y12233 badfid[2] = curvol + (hdr->fid_overlay.fid_fields.fid_nmx << 16);b(12234 badrtv = rtvptr;,12235 bad_r_size = r_size;,12236 bad_a_size = a_size;12237 }o.12238 /* Update usage table */>12239 if ((matusage == TRUE) && (headers > 3))R12240 add_usage(&usage_table, hdr->fileowner_overlay.fileowner, .12241 r_size, a_size, hdrs);'12242 /* Next header */ 12243 next_rep: 112244 status = get_next_header();=<12245 if ((status & 1) != 1) return(status);12246 }b12247 } !12248 if (ctrlc !=1) h12249 { O12250 sprintf(outbuf," Progress : 100%% Status : READY");0"12251 put_status(1);12252 } 312253 if ((ctrlc !=1) && (!matnoindex)) 12254 { Z12255 sprintf(outbuf," ***** File Statistics (from INDEXF.SYS) *****"); 12256 put_disp(); =12257 if (matoutput) fprintf(fp,"%s\n",outbuf); #12258 sprintf(outbuf,0T12259 " INDEXF.SYS fragments/ map_in_use : %d /%d words ( %d%% used)"512260 ,if_frag, map_in_use, map_prc);r 12261 put_disp(); =12262 if (matoutput) fprintf(fp,"%s\n",outbuf);kV12263 sprintf(outbuf," Total files : %d", fcount); DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 26.jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (5) 12264 put_disp(); =12265 if (matoutput) fprintf(fp,"%s\n",outbuf); <12266 scale = (fcount > 50) ? 1.0 : fcount/50;%12267 fcount -= acount;tV12268 sprintf(outbuf," Empty files : %d", fcount); 12269 put_disp(); =12270 if (matoutput) fprintf(fp,"%s\n",outbuf); V12271 sprintf(outbuf," Files with allocation : %d", acount); 12272 put_disp(); =12273 if (matoutput) fprintf(fp,"%s\n",outbuf); V12274 sprintf(outbuf," Files with extension headers : %d", ucount); 12275 put_disp(); =12276 if (matoutput) fprintf(fp,"%s\n",outbuf); $12277 if (mcount == 0)X12278 sprintf(outbuf," Files marked for delete : %d", mcount);12279 elsec12280 sprintf(outbuf," Files marked for delete : %d, size %d/%d blocks", 812281 mcount, mark_r_size, mark_a_size); 12282 put_disp(); =12283 if (matoutput) fprintf(fp,"%s\n",outbuf); V12284 sprintf(outbuf," Directory files : %d", dcount); 12285 put_disp(); =12286 if (matoutput) fprintf(fp,"%s\n",outbuf);aV12287 sprintf(outbuf," Contiguous files : %d", ccount); 12288 put_disp(); =12289 if (matoutput) fprintf(fp,"%s\n",outbuf); R12290 sprintf(outbuf," Total used/ allocated size : %d /%d", ,12291 tot_r_size, tot_a_size); 12292 put_disp(); =12293 if (matoutput) fprintf(fp,"%s\n",outbuf); W12294 sprintf(outbuf," Total fragments : %d", totfrag); !12295 a = totfrag; 212296 b = acount;f"12297 avefrag = a/b;Y12298 sprintf(outbuf," Average fragments per file : %.3f", avefrag);u 12299 put_disp(); =12300 if (matoutput) fprintf(fp,"%s\n",outbuf);s!12301 a = mmp_hdr; 812302 b = mmp_blks / home[curvol].cluster;412303 avefrag = (avefrag*avefrag) - 1;312304 if (b > 0) avefrag += (a/b*10); 812305 strcpy(dummy_item," (poor) "); K12306 if (avefrag < 3.0) strcpy(dummy_item," (fair) "); =K12307 if (avefrag < 2.0) strcpy(dummy_item," (good) "); bJ12308 if (avefrag < 1.0) strcpy(dummy_item," (excellent) ");R12309 sprintf(outbuf," File fragmentation index : %.3f %s",(12310 avefrag,dummy_item); 12311 put_disp(); =12312 if (matoutput) fprintf(fp,"%s\n",outbuf);6612313 tot_a_size = tot_a_size / totfrag;Z12314 sprintf(outbuf," Average size per fragment : %d", tot_a_size); 12315 put_disp(); =12316 if (matoutput) fprintf(fp,"%s\n",outbuf); K12317 sprintf(outbuf," Most fragmented file : ");_ 12318 put_disp(); =12319 if (matoutput) fprintf(fp,"%s\n",outbuf);_P12320 status = lib$fid_to_name(&device_descr, &badfid[0],&badfile, aDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 27djV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (5)#12321 &outlen, 0, 0);e012322 x = strindex(bfile,"[",255);12323 outlen -=x;_Q12324 sprintf(outbuf," %s%.*s ( %d/%d blocks; %d fragments)\n", d/12325 &rvt[curvol].fulldevnam[1], G12326 outlen, &bfile[x], bad_r_size, bad_a_size, badrtv); 12327 put_disp(); =12328 if (matoutput) fprintf(fp,"%s\n",outbuf);_12329 }2 12330 if (ctrlc !=1)=12331 /* Now continue with bitmap processing */u12332 { _12333 sprintf(outbuf," Progress : 0%% Status : Processing BITMAP.SYS"); "12334 put_status(1);712335 strcpy(device, rvt[curvol].devnam); G12336 device_descr.dsc$w_length = rvt[curvol].devnam_len; *12337 rvt[curvol].bchan = 0;Q12338 status = SYS$ASSIGN(&device_descr, &rvt[curvol].bchan, 0, 0);n+12339 if ((status & 1) != 1) =12340 { 412341 singlemsg(DFU_ASSIGN,status); !12342 cleanup(); %12343 return(status);012344 } O12345 page_cnt = (rvt[curvol].maxblocks / home[curvol].cluster) ;x:12346 for (i=1; i<= 70; i++) table[i-1]=100;`12347 status = scan_bitmap(rvt[curvol].bchan, page_cnt, rvt[curvol].wlk, &freeext,?12348 &largest, &freeblocks, &large_lbn, &table); $12349 if (status == 1)12350 { Q12351 sprintf(outbuf," Progress : 100%% Status : READY");x$12352 put_status(1);'12353 if (!matnobitmap) 12354 { _12355 largest = largest * home[curvol].cluster; /* Adjust for cluster size */2G12356 freeblocks = freeblocks * home[curvol].cluster; E12357 large_lbn = large_lbn * home[curvol].cluster;_d12358 sprintf(outbuf," ***** Free space statistics (from BITMAP.SYS) *****");$12359 put_disp(); A12360 if (matoutput) fprintf(fp,"%s\n",outbuf);pQ12361 sprintf(outbuf," Total blocks on disk : %d",d/12362 rvt[curvol].maxblocks);_$12363 put_disp(); A12364 if (matoutput) fprintf(fp,"%s\n",outbuf); ]12365 sprintf(outbuf," Total free blocks : %d",freeblocks);a$12366 put_disp(); A12367 if (matoutput) fprintf(fp,"%s\n",outbuf);2N12368 tot_a_size = (100*freeblocks) / rvt[curvol].maxblocks;]12369 sprintf(outbuf," Percentage free (rounded) : %d",tot_a_size);d$12370 put_disp(); A12371 if (matoutput) fprintf(fp,"%s\n",outbuf);aZ12372 sprintf(outbuf," Total free extents : %d",freeext);$12373 put_disp(); A12374 if (matoutput) fprintf(fp,"%s\n",outbuf);>'12375 sprintf(outbuf,uU12376 " Largest free extent : %d blocks at LBN: %d", ,12377 largest, large_lbn); DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 28tjV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (5)$12378 put_disp(); A12379 if (matoutput) fprintf(fp,"%s\n",outbuf);_O12380 tot_a_size = (freeext == 0) ? 0 : freeblocks / freeext;e]12381 sprintf(outbuf," Average extent size (rounded) : %d",tot_a_size);o$12382 put_disp(); A12383 if (matoutput) fprintf(fp,"%s\n",outbuf);%(12384 a = freeext - 1;B12385 b = (freeblocks/home[curvol].cluster - 1);812386 avefrag = (a > 0) ? a/b*100 : 0;<12387 strcpy(dummy_item," (poor) "); O12388 if (avefrag < 3.0) strcpy(dummy_item," (fair) "); O12389 if (avefrag < 2.0) strcpy(dummy_item," (good) "); CN12390 if (avefrag < 1.0) strcpy(dummy_item," (excellent) ");V12391 sprintf(outbuf," Free space fragmentation index : %.3f %s",,12392 avefrag,dummy_item);$12393 put_disp(); A12394 if (matoutput) fprintf(fp,"%s\n",outbuf);\12395 } +12396 if (matgraph == TRUE)512397 {c712398 /* Now print the graph table */p)12399 tot_a_size = 105;t'12400 sprintf(outbuf,7k12401 "\n %%free----------------------------------------------------------------------");l$12402 put_disp(); A12403 if (matoutput) fprintf(fp,"%s\n",outbuf);)/12404 for (k=1; k <=20; k++) 12405 { *12406 tot_a_size -= 5;/12407 for (i=1; i<=70; i++) :12408 if (table[i-1] >= tot_a_size) .12409 line[i-1] = '*'; 12410 else.12411 line[i-1] = ' ';K12412 sprintf(outbuf," %3d |%.*s|",tot_a_size,70,line); &12413 put_disp(); C12414 if (matoutput) fprintf(fp,"%s\n",outbuf); 12415 } '12416 sprintf(outbuf,th12417 " ----------------------------------------------------------------------");$12418 put_disp(); A12419 if (matoutput) fprintf(fp,"%s\n",outbuf); (12420 sprintf(outbuf, c12421 " LBN: 0 %d",n/12422 rvt[curvol].maxblocks);t$12423 put_disp(); A12424 if (matoutput) fprintf(fp,"%s\n",outbuf);2@12425 tot_a_size = rvt[curvol].maxblocks/1400;[12426 sprintf(outbuf," Free space distribution; each * = %d free blocks", $12427 tot_a_size);$12428 put_disp(); ?12429 if (matoutput) fprintf(fp,"%s",outbuf); 12430 }"12431 }f12432 else )12433 { 12434 cleanup(); (DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 29jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (5)%12435 return(status);p12436 } 12437 curvol++; E12438 if (ctrlc !=1) ctx.end = FALSE; /* Next volume */ *12439 if (curvol <= maxvol) 12440 { +12441 sprintf(outbuf," "); )!12442 put_disp();u12443 }o112444 if (clean_flags.events == 1) v12445 { R12446 for (i=1; i <= iocnt ; i++) status = lib$free_ef(&efn[i-1]);-12447 clean_flags.events = 0;a12448 } 12449 } 12450 }z12451 curvol = 1; >12452 /* Now continue with usage table processing */712453 if ((matusage == TRUE) && (ctrlc != 1)) 12454 { \12455 sprintf(outbuf," Progress : 0%% Status : Processing QUOTA.SYS"); 12456 put_status(1);S12457 report_usage(&usage_table, rvt[curvol].bchan, fp,matoutput,uic); [M12458 sprintf(outbuf," Progress : 100%% Status : READY"); 12459 put_status(1);12460 } +12461 if (ctrlc == 1) do_abort(); 12462 cleanup(); H12463 sprintf(outbuf,"\n%%DFU-I-READY, REPORT command ready");12464 put_disp(); Q12465 if (matstat == TRUE) status = lib$show_timer(0,0,display_stat,0); 12466 return(1);12467 }k12468  ,DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 30 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6) )12469 int undel_command(int mask)*12470 /*(12471 Undelete a file on a disk+12472 After write locking the diskP:12473 the INDEXF.SY%U8~ DFU024.BCK{[DFU024.LIS]DFU_IFSCAN.LIS;3RU|S and BITMAP files are updatedB12474 unless the blocks or file headers have been reused.D12475 Undeleted files are entered in the original directoryI12476 May also be used to produce a listing of recoverable files 12477 F12478 V2.4: Added support to undelete files marked-for-delete12479 */12480 12481 { W12482 static char dummy_item[80], fname[86], name[86],ans[4],ident[30], *tmp;u812483 struct header_area_struct *hdr, *oldhdr;-12484 struct ident_area_struct *id;t12485 struct _hd { e.12486 unsigned short block[256] ; 12487 } 12488 *head;12489 struct { m12490 int pagecnt; v12491 } 12492 bmap[33];lF12493 static struct fibdef fib; /* File information block */12494 struct { 12495 int fiblen; )12496 struct fibdef *fibadr; s12497 } 12498 fibdescr;1%12499 struct f_id lost_fid;mP12500 Boolean dummy, matstat, matname, matlist, matuic, matnoconfirm, 612501 matoutput, matunmark, found, lostfile;12502 register int i;b%12503 unsigned short qchan; A12504 int ivbn, bitblk, bitje, bitval, find, rvn, x, j,5D12505 uic, s_uic, a_size, hdrs, rtvptr, free_hdr, k, size,;12506 bytes, fidnum, modifiers, fcount, syslost; )012507 void dfu_handler(), add_quota();312508 $DESCRIPTOR(device_descr , device);(012509 $DESCRIPTOR(file_descr , fname);612510 $DESCRIPTOR(dummy_descr , dummy_item);.12511 $DESCRIPTOR(id_descr , ident);/12512 $DESCRIPTOR(name_descr , name);)*12513 $DESCRIPTOR(answer , ans);G12514 $DESCRIPTOR(prompt,"Recover this file ? (Y/N) [N] : "); 12515 &12516 /* Code starts here */*12517 /* Check the privileges */12518 if (mask > -1) e12519 { *12520 singlemsg(0,DFU_NOPRIV);%12521 return(SS$_NOPRIV); 12522 }z!12523 /* Fill in FIB */i.12524 fibdescr.fiblen = sizeof(fib); nDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 31 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6)'12525 fibdescr.fibadr = &fib; 12526 syslost = 0;$12527 progress_ind = TRUE;12528 212529 /* Parse the various qualifiers */%12530 /* Get device name */ L12531 status = parse_item("device", &device_descr, 0, &dummy , 0);!12532 if (status == 1) 12533 { 612534 if (strindex(&device,":",64) == -1) 12535 {_;12536 device[device_descr.dsc$w_length]=':'; %312537 device_descr.dsc$w_length += 1;(12538 }r12539 }eP12540 status = parse_item("statistics", &dummy_descr, 0, &matstat, 2);T12541 status = parse_item("noconfirm", &dummy_descr, 0, &matnoconfirm, 2);O12542 status = parse_item("unmark", &dummy_descr, 0 , &matunmark, 2);8%12543 /* Get output file */e&12544 clean_flags.fopen = 0;"12545 matoutput = FALSE;J12546 status = parse_item("list", &file_descr, 0, &matlist , 0);12547 if (matlist)12548 { 912549 fname[file_descr.dsc$w_length] = '\0'; :12550 status = strncmp(fname,"SYS$OUTPUT",10);412551 if (status != 0) matoutput = TRUE;12552 } 12553 if (matoutput)12554 { Z12555 fp = fopen(fname,"w","mrs=255","rfm=var","ctx=rec","rat=cr","rop=WBH"); (12556 clean_flags.fopen = 1;12557 }r12558 "12559 /* Ident or UIC */M12560 status = parse_item("ident", &dummy_descr, &uic, &matuic, 6); %12561 if (matuic == FALSE) tM12562 status = parse_item("uic", &dummy_descr, &uic, &matuic, 6);p&12563 if ((status &1 ) != 1)12564 { L12565 sprintf(outbuf,"%%DFU-E-INVID, Wrong uic or identifier,");12566 put_disp(); '12567 singlemsg(0,status); f"12568 return(status); 12569 } +12570 id_descr.dsc$w_length = 30;012571 %12572 /* Check file name */ 812573 dummy_descr.dsc$a_pointer = (char *) &x;P12574 status = parse_item("file", &dummy_descr, &fname, &matname , 3);=12575 if (matname == FALSE) strcpy(fname,"*.*;*"); 412576 if (strindex(&fname,"\0",80) == -1) 12577 { /12578 x = strindex(&fname," ",80); "12579 fname[x] = '\0';12580 }f<12581 dummy_descr.dsc$a_pointer = (char *) &fname; DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 32"jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6)D12582 dummy_descr.dsc$w_length = strindex(&fname,"\0",86);12583 +12584 /* All qualifiers parsed */ 12585 first = NULL; 12586 list = NULL;)12587 clean_flags.channels = 0; '12588 clean_flags.events = 0;f'12589 clean_flags.expreg = 0; :12590 modifiers = SMG$M_NOKEEP | SMG$M_NORECALL;?12591 if (matstat == TRUE) status = lib$init_timer();e12592 D12593 /* Open the volume (set) , read in the home block */12594 C12595 if (matlist) status = open_device(&device_descr,0); ;12596 else status = open_device(&device_descr,1);2612597 if ((status & 1) != 1) return(status);A12598 if (rvt[1].wlk == TRUE) /* Write locked device */ 12599 { \12600 sprintf(outbuf,"%%DFU-E-WRITELK, Cannot undelete on write-locked device");12601 put_disp(); 12602 cleanup(); 12603 return(1);12604 } Y12605 if (home[1].volchar_overlay.volchar_bits.erase == 1) /*Erase on delete */=12606 { !12607 sprintf(outbuf,vU12608 "%%DFU-E-ERASED, Cannot undelete ; erase-on-delete set on device");212609 put_disp(); 12610 cleanup(); 12611 return(1);12612 }412613 L12614 /* Setup exit handler to ensure that we unlock the volume */12615 if (!matlist) 12616 { ;12617 desblk.handler_addr = (int) &dfu_handler; 312618 desblk.condition = (int) &status; '12619 desblk.arg_count = 1;s/12620 status = SYS$DCLEXH(&desblk); (12621 if ((status & 1) !=1) 12622 { 312623 singlemsg(DFU_EXHFAIL,status); U12624 cleanup(); _#12625 return(status);u12626 }t12627 }m12628 12629 fcount = 0;u12630 curvol = 1; 12631 size = 1; 12632 ctx.end = FALSE;12633 A12634 /* Read in the BITMAP.SYS we need it anyway... */(J12635 sprintf(outbuf,"%%DFU-I-READBMAP, Reading BITMAP.SYS...");12636 put_disp();)+12637 for (x=1; x <=maxvol; x++) u`12638 /* Assign a channel for BITMAP, create dynamic space, and read in the BITMAP*/ DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 33ejV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6)12639 { 012640 strcpy(device, rvt[x].devnam);@12641 device_descr.dsc$w_length = rvt[x].devnam_len;J12642 status = SYS$ASSIGN(&device_descr, &rvt[x].bchan, 0, 0);)12643 if ((status & 1) != 1) h12644 { 212645 singlemsg(DFU_ASSIGN,status); 12646 cleanup(); c#12647 return(status); 12648 }o)12649 clean_flags.expreg = 1; +12650 rvt[x].bmap_addr[0] = 0; sE12651 bmap[x].pagecnt = rvt[x].maxblocks/home[x].cluster;D12652 bmap[x].pagecnt = (bmap[x].pagecnt + 4095) / 4096;L12653 status = SYS$EXPREG(bmap[x].pagecnt, &rvt[x].bmap_addr[0],12654 0 , 0);t)12655 if ((status & 1) != 1) _12656 { 212657 singlemsg(DFU_EXPREG,status); 12658 cleanup(); #12659 return(status); 12660 } F12661 status = read_bitmap(rvt[x].bchan, bmap[x].pagecnt, 412662 rvt[x].wlk, &rvt[x].bmap_addr[0]);)12663 if ((status & 1) != 1) n12664 { U12665 sprintf(outbuf,"%%DFU-E-NOTUNDEL, File undeletes not possible,"); 12666 put_disp(); 12667 cleanup(); a$12668 return(status); 12669 }o12670 }o12671 512672 /* Loop for all volumes in the set */nQ12673 if (smg$enable) SMG$SET_CURSOR_MODE(&paste_id,&SMG$M_CURSOR_OFF);5812674 while ((curvol <= maxvol) && (!ctx.end))12675 { 12676 ctx.i = -1;e.12677 if (rvt[curvol].i_open ==1) 12678 { $12679 if (maxvol == 1)12680 { P12681 sprintf(outbuf,"%%DFU-I-UNDEL, Start search on %.*s (%s)",V12682 device_descr.dsc$w_length, device, &rvt[curvol].fulldevnam[1]); !12683 put_disp(); 12684 }n12685 else12686 { [12687 sprintf(outbuf,"%%DFU-I-UNDEL, Start search on %.*s (%s) , RVN = %d",B12688 rvt[curvol].devnam_len, rvt[curvol].devnam, ;12689 &rvt[curvol].fulldevnam[1], curvol); F!12690 put_disp();n12691 } 12692 headers=0; l12693 qchan = 0;12694 [12695 /* Read in index file bitmap, and return free hdrs + highest bit set */  3DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 342jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6)212696 read_indexf_bitmap(&free_hdr);12697 /12698 status = get_next_header();G:12699 if ((status & 1) != 1) return(status);V12700 while (! ctx.end) /* Loop until end of INDEXF or CTRL C entered */12701 { $12702 hdr = ctx.hdr;"12703 id = ctx.id;#12704 rvn = curvol;hV12705 if (hdr->seg_num !=0) goto next_und; /* Skip extension header */12706 A12707 /* Check for a valid deleted file header */,L12708 if ((hdr->filechar & FH2$M_MARKDEL) != FH2$M_MARKDEL) &12709 goto next_und;B12710 /* Skip next test if we only unamrk files */%12711 if (!matunmark)212712 { _12713 if ((header[ctx.i].block[510] != 0) || (header[ctx.i].block[511] != 0))_D12714 goto next_und; /* Checksum must be zero */T12715 if (hdr->fid_overlay.fid_fields.fid_num != 0) goto next_und;^12716 if ((hdr->filechar & FH2$M_ERASE) == FH2$M_ERASE) /*Skip erased file*/(12717 goto next_und;12718 } 12719 else12720 { 412721 status = verify_header(hdr);@12722 if (status != SS$_NORMAL) goto next_und;12723 } 12724 )12725 if (matuic == TRUE)_S12726 if (uic != hdr->fileowner_overlay.fileowner) goto next_und; Q12727 /* get the file name and check if we requested this name */s712728 memcpy(&name[0],id->filename,20);pO12729 if (name[19] != ' ') memcpy(&name[20],id->filenamext,66);iT12730 if (strlen(name) == 0) goto next_und; /* Unused file header */F12731 name_descr.dsc$w_length = strindex(name," ",86);;12732 name[name_descr.dsc$w_length] = '\0'; H12733 status = str$match_wild(&name_descr,&dummy_descr);>12734 if (status != STR$_MATCH) goto next_und;%12735 if (!matunmark)e12736 { &12737 found = TRUE; %12738 oldhdr = hdr; P12739 /* Check the BITMAP for multiple allocated blocks, if we?12740 find some we just skip this file */;=12741 /* Reset fid_num and fid_nmx field */ P12742 hdr->fid_overlay.fid_fields.fid_num = (headers % 65536);N12743 hdr->fid_overlay.fid_fields.fid_nmx = headers / 65536;%12744 while (found) 12745 { M12746 status = rebuild_bitmap(hdr, rvt[rvn].bmap_addr[0],s;12747 home[rvn].cluster, curvol, TRUE);=?12748 if ((status & 1) != 1) found = FALSE; Q12749 if (hdr->ext_fid_overlay.ext_fid[0] ==0) found = FALSE; 812750 /* Read in extension header */$12751 if (found)12752 {  2DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 35(jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6)#12753 x = 0; R12754 rvn = hdr->ext_fid_overlay.ext_fid_fields.ext_fid_rvn;712755 if (rvn == 0) rvn = curvol;e[12756 fidnum = hdr->ext_fid_overlay.ext_fid_fields.ext_fid_nmx << 16;F12757 fidnum += hdr->ext_fid_overlay.ext_fid[0];E12758 ivbn = rvt[rvn].vbn_file_1 + fidnum - 1; 2N12759 hdr = (struct header_area_struct *) &header[x]; N12760 status = SYS$QIOW(0,rvt[rvn].channel,IO$_READVBLK,J12761 &iostat[iocnt],0,0,&header[0],512,ivbn,0,0,0);Q12762 if ((status & 1) == 1) status = iostat[iocnt].iosb_1; A12763 if ((status & 1) != 1) found = FALSE; ?12764 /* Check if this header is valid */h&12765 if (found)12766 { S12767 if ((hdr->bk_fid_overlay.bk_fid_fields.bk_fid_num != 2J12768 oldhdr->fid_overlay.fid_fields.fid_num) ||Q12769 (hdr->bk_fid_overlay.bk_fid_fields.bk_fid_seq != J12770 oldhdr->fid_overlay.fid_fields.fid_seq) ||Q12771 (hdr->bk_fid_overlay.bk_fid_fields.bk_fid_nmx != H12772 oldhdr->fid_overlay.fid_fields.fid_nmx)) 12773 { /12774 found = FALSE; u+12775 status = 0;"12776 }12777 }a12778 } 12779 }I=12780 if ((status & 1) != 1) goto next_und;F%12781 hdr = oldhdr; %12782 rvn = curvol; 12783 } 12784 12785 lostfile = FALSE;712786 /* get the full directory name */ M12787 if (hdr->bk_fid_overlay.bk_fid_fields.bk_fid_num == 0 )t312788 { strcpy(dirrec.dirnam,"[]");n(12789 lostfile = TRUE;12790 }v12791 else12792 { 412793 copy_fid(&fib.fib$w_fid[0], M12794 &hdr->bk_fid_overlay.bk_fid_fields.bk_fid_num, TRUE);2-12795 fib.fib$w_did[0] = 0; -12796 fib.fib$w_did[1] = 0;=-12797 fib.fib$w_did[2] = 0;;,12798 fib.fib$w_nmctl = 0;,12799 fib.fib$l_acctl = 0;H12800 status = SYS$QIOW(0,rvt[rvn].channel,IO$_ACCESS,C12801 &iostat[iocnt],0,0,&fibdescr,0,0,0,&acb,0); 612802 status = iostat[iocnt].iosb_1;/12803 if ((status & 1) != 1) g512804 { strcpy(dirrec.dirnam,"[]");(*12805 lostfile = TRUE;12806 } 12807 elseF12808 /* Now rearrange the directory name found */12809 {  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 36,jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6)@12810 x = strindex(&dirrec.dirnam,"[",198); K12811 strncpy(dirrec.dirnam,&dirrec.dirnam[x],(198-x));bH12812 tmp = (char *) strstr(dirrec.dirnam,".DIR;"); +12813 if (tmp != NULL) 12814 { '12815 *tmp = ']';[F12816 tmp = (char *) strstr(dirrec.dirnam,"]"); '12817 *tmp = '.'; 12818 }":12819 else strcpy(dirrec.dirnam,"[]");C12820 if (strstr(dirrec.dirnam,"[000000") != 0) 12821 { 312822 dirrec.dirnam[7] = '[';lD12823 strcpy(dirrec.dirnam,&dirrec.dirnam[7]);12824 }*12825 } >12826 x = strindex(&dirrec.dirnam,"]",198); 212827 dirrec.dirnam[x+1] = '\0';12828 } (12829 fcount++; Z12830 sprintf(outbuf,"Recoverable file %s%s found ", dirrec.dirnam, name);"12831 put_disp(); ?12832 if (matoutput) fprintf(fp,"%s\n",outbuf); 12833 x = 4; #12834 ans[0] = 'n'; #12835 if (!matlist) )12836 if(!matnoconfirm) 12837 { )12838 if (smg$enable))12839 { L12840 SMG$SET_CURSOR_MODE(&paste_id,&SMG$M_CURSOR_ON);Q12841 status = SMG$READ_COMPOSED_LINE(&keyb_id, 0, &answer, K12842 &prompt, &k, &disp1_id, &modifiers, 0,0,0,0,0);M12843 SMG$SET_CURSOR_MODE(&paste_id,&SMG$M_CURSOR_OFF); 12844 } 12845 elseQ12846 status = SMG$READ_COMPOSED_LINE(&keyb_id, 0, &answer,2C12847 &prompt, &k, 0, &modifiers, 0,0,0,0,0); 12848 } 12849 else*12850 strcpy(ans,"Y");>12851 if ((ans[0] == 'y') || (ans[0] == 'Y')) 12852 { d12853 /* Actual recovery starts here as follows (loop for all extension headers) :P12854 - If unmark requested just clear the MARKDEL bit else :H12855 - Reenter retrieval pointers in BITMAP212856 - If oke then 712857 - Rewrite all BITMAP.SYS&412858 - Rewrite all Headers]12859 - Rewrite index file bitmap bit. At this point recovery is oke2112860 - Update QUOTA.SYStC12861 - Setup entry for enter file routineO;12862 - After all undeletes are done ... ,12863 - Unlock volume912864 - Reenter files in directoryi12865 J12866 Save size and uic for possible quota processing */ *DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 37ejV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6)12867 812868 if (matunmark) goto rewrite_hdr;N12869 a_size = hdr->hiblk_overlay.hiblk_fields.hiblkh << 16;I12870 a_size += hdr->hiblk_overlay.hiblk_fields.hiblkl; A12871 s_uic = hdr->fileowner_overlay.fileowner;&12872 found = TRUE; "12873 hdrs = 0; 12874 x = i;%12875 oldhdr = hdr;A512876 /* Loop for all headers... */ %12877 while (found) 12878 { $12879 hdrs +=1; N12880 /* Now rebuild the mapping pointers into the bitmap.U12881 If any multiple allocated blocks are discovered we break;>12882 off the whole undelete process */M12883 status = rebuild_bitmap(hdr, rvt[rvn].bmap_addr[0],[<12884 home[rvn].cluster, curvol, FALSE);112885 if ((status & 1) != 1) 12886 { Y12887 sprintf(outbuf,"%%DFU-E-NOTUNDEL, File cannot be undeleted"); '12888 put_disp();2,12889 ctx.end = TRUE; -12890 curvol = maxvol; *12891 goto next_und;12892 } R12893 if (hdr->ext_fid_overlay.ext_fid[0] == 0) found = FALSE;12894 else:12895 /* Read in extension header */12896 { #12897 x = 0; fR12898 rvn = hdr->ext_fid_overlay.ext_fid_fields.ext_fid_rvn;712899 if (rvn == 0) rvn = curvol;x[12900 fidnum = hdr->ext_fid_overlay.ext_fid_fields.ext_fid_nmx << 16;eF12901 fidnum += hdr->ext_fid_overlay.ext_fid[0];E12902 ivbn = rvt[rvn].vbn_file_1 + fidnum - 1; tN12903 hdr = (struct header_area_struct *) &header[x]; N12904 status = SYS$QIOW(0,rvt[rvn].channel,IO$_READVBLK,J12905 &iostat[iocnt],0,0,&header[0],512,ivbn,0,0,0);Q12906 if ((status & 1) == 1) status = iostat[iocnt].iosb_1;F312907 if ((status & 1) != 1) h12908 { -12909 sprintf(outbuf, R12910 "%%DFU-E-READERR, Error reading extension header,");*12911 put_disp(); 312912 singlemsg(0,status); [12913 sprintf(outbuf,"%%DFU-E-NOTUNDEL, File cannot be undeleted"); )12914 put_disp();s.12915 ctx.end = TRUE; /12916 curvol = maxvol; ,12917 goto next_und;412918 } ?12919 /* Check if this header is valid */ Q12920 if ((hdr->bk_fid_overlay.bk_fid_fields.bk_fid_num != H12921 oldhdr->fid_overlay.fid_fields.fid_num) ||O12922 (hdr->bk_fid_overlay.bk_fid_fields.bk_fid_seq != H12923 oldhdr->fid_overlay.fid_fields.fid_seq) || DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 38 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6)O12924 (hdr->bk_fid_overlay.bk_fid_fields.bk_fid_nmx != 2F12925 oldhdr->fid_overlay.fid_fields.fid_nmx))12926 { -12927 sprintf(outbuf,bT12928 "%%DFU-E-BADEXTHDR, Extension header linkage broken");)12929 put_disp();[12930 sprintf(outbuf,"%%DFU-E-NOTUNDEL, File cannot be undeleted");)12931 put_disp();;.12932 ctx.end = TRUE; /12933 curvol = maxvol; ,12934 goto next_und;12935 }s12936 } )12937 } /* end while */gP12938 /* So we have rebuild the bitmap(s), now rewrite them */612939 for (j = 1; j <= maxvol; j++) 12940 { 012941 if (rvt[j].bchan != 0)12942 { :12943 bytes = 512 * bmap[j].pagecnt;\12944 status = SYS$QIOW(0,rvt[j].bchan, IO$_WRITEVBLK, &iostat[iocnt],F12945 0,0, rvt[j].bmap_addr[0], bytes, 2,0,0,0);Q12946 if ((status & 1) == 1) status = iostat[iocnt].iosb_1;d312947 if ((status & 1) != 1) i12948 { ]12949 sprintf(outbuf,"%%DFU-E-BITMAPERR, Error writing BITMAP.SYS,"); *12950 put_disp(); 312951 singlemsg(0,status); =-12952 sprintf(outbuf, P12953 "- Use ANALYZE/DISK/REPAIR to repair the volume");)12954 put_disp(); .12955 ctx.end = TRUE; /12956 curvol = maxvol; ",12957 goto next_und;412958 } 12959 }d12960 }[>12961 /* Now rewrite all the file headers */12962 rewrite_hdr:I12963 /* Setup the RVN, FileChar and Checksum fields */+#12964 x = ctx.i; &12965 rvn = curvol; &12966 found = TRUE; $12967 bytes = 512;G12968 hdr = (struct header_area_struct *) &header[x]; K12969 fidnum = hdr->fid_overlay.fid_fields.fid_nmx << 16;:12970 fidnum += hdr->fid_overlay.fid[0];$12971 while(found)12972 { B12973 hdr->fid_overlay.fid_fields.fid_rvn = 0;K12974 hdr->filechar = hdr->filechar & ~(FH2$M_MARKDEL);pN12975 /* Check if we are dealing with a directory file */ R12976 if ( ((hdr->rattrib & FAT$M_NOSPAN) == FAT$M_NOSPAN) || <12977 (strstr(name , ".DIR;1") != 0) )12978 { L12979 hdr->filechar = hdr->filechar | FH2$M_DIRECTORY;I12980 hdr->filechar = hdr->filechar | FH2$M_CONTIG;w 2DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 395jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6)12981 } 512982 head = (struct _hd *) hdr; w/12983 head->block[255] = 0; T12984 for (j=0; j<=254; j++) head->block[255] += head->block[j];A12985 vbn = rvt[rvn].vbn_file_1 + fidnum - 1; O12986 status = SYS$QIOW(0, rvt[rvn].channel, IO$_WRITEVBLK,eQ12987 &iostat[iocnt], 0, 0, &header[x], bytes, vbn, 0, 0, 0); O12988 if ((status & 1) == 1) status = iostat[iocnt].iosb_1;2112989 if ((status & 1) != 1) t12990 { [12991 sprintf(outbuf,"%%DFU-E-INDEXFERR, Error writing INDEXF.SYS,");d(12992 put_disp(); 112993 singlemsg(0,status); r]12994 sprintf(outbuf,"- Use ANALYZE/DISK/REPAIR to repair the volume");o'12995 put_disp();N,12996 ctx.end = TRUE; -12997 curvol = maxvol; -*12998 goto next_und;212999 } E13000 if ((hdr->ext_fid_overlay.ext_fid[0] == 0) ;13001 || (matunmark) ) found = FALSE; 13002 else:13003 /* Read in extension header */13004 { #13005 x = 0; R13006 rvn = hdr->ext_fid_overlay.ext_fid_fields.ext_fid_rvn;713007 if (rvn == 0) rvn = curvol; [13008 fidnum = hdr->ext_fid_overlay.ext_fid_fields.ext_fid_nmx << 16; F13009 fidnum += hdr->ext_fid_overlay.ext_fid[0];E13010 ivbn = rvt[rvn].vbn_file_1 + fidnum - 1; N13011 hdr = (struct header_area_struct *) &header[x]; N13012 status = SYS$QIOW(0,rvt[rvn].channel,IO$_READVBLK,J13013 &iostat[iocnt],0,0,&header[0],512,ivbn,0,0,0);Q13014 hdr->fid_overlay.fid_fields.fid_num = fidnum % 65536;eQ13015 hdr->fid_overlay.fid_fields.fid_nmx = fidnum / 65536;13016 })13017 } /* End while */"K13018 hdr = (struct header_area_struct *) &header[ctx.i];uV13019 sprintf(outbuf,"%%DFU-S-RECOVER, File succesfully recovered");$13020 put_disp(); ;13021 /* Rewrite the indexf bitmap bit */ =13022 bitblk = (headers + 4095) / 4096 - 1;nA13023 bitje = (headers - 1 - bitblk*4096) / 32; 413024 bitval = (headers - 1) % 32;13025 j = 1;T13026 lib$insv(&j, &bitval, &j, &bitmap[bitblk+1].block[bitje*4]);%13027 bytes = 512; =13028 vbn = home[curvol].ibmapvbn + bitblk;iU13029 status = SYS$QIOW(0, rvt[curvol].channel, IO$_WRITEVBLK, N13030 &iostat[iocnt],0,0,&bitmap[bitblk+1],bytes,vbn,0,0,0);113031 /* Add quota if needed */ '13032 if (!matunmark)_13033 { 813034 strcpy(device, rvt[1].devnam);H13035 device_descr.dsc$w_length = rvt[1].devnam_len;*13036 if (qchan == 0) 13037 {  uDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 40 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6)M13038 status = SYS$ASSIGN(&device_descr, &qchan, 0, 0);g313039 if ((status & 1) != 1) i<&B~ DFU024.BCK{[DFU024.LIS]DFU_IFSCAN.LIS;3|13040 singlemsg(DFU_ASSIGN,status); 13041 }uP13042 if (qchan != 0) add_quota(qchan, s_uic, hdrs, a_size);13043 }-13044 sprintf(outbuf," "); 2#13045 put_disp(); D13046 /* Set up work entry for entering file in directory */K13047 rvn = hdr->bk_fid_overlay.bk_fid_fields.bk_fid_rvn;b213048 if (rvn ==0) rvn = curvol;+13049 if (first == NULL ) 13050 { M13051 list = (struct work *) malloc(sizeof(struct work));hF13052 first = list; /* pointer to first element */13053 } 13054 else 13055 { S13056 list->next = (struct work *) malloc(sizeof(struct work));A,13057 list = list->next;13058 }h113059 /* File in Directory and File id */2(13060 list->rvn = rvn;113061 copy_fid(&list->did_num, P13062 &hdr->bk_fid_overlay.bk_fid_fields.bk_fid_num, FALSE);(13063 /* Special case for MFD */*13064 if (headers == 4) ,13065 list->did_rvn = 0;13066 elseDW13067 list->did_rvn = hdr->bk_fid_overlay.bk_fid_fields.bk_fid_rvn; V13068 copy_fid(&list->fid_num, &hdr->fid_overlay.fid_fields.fid_num,!13069 FALSE);x013070 list->fid_rvn = curvol; 913071 if (lostfile) list->function = 2;*113072 else list->function = 1;h*13073 list->next = NULL;013074 strcpy(list->name,name);13075 }2'13076 /* Next header */!13077 next_und: 113078 status = get_next_header(); <13079 if ((status & 1) != 1) return(status);13080 }R13081 }t!13082 if (ctrlc == 1),13083 { #13084 ctx.end = TRUE; 13085 do_abort();a13086 }o13087 else13088 { 13089 curvol++; O13090 sprintf(outbuf," Progress : 100%% Status : READY");E"13091 put_status(1);613092 ctx.end = FALSE; /* Next volume */113093 if (clean_flags.events == 1) 13094 {  fDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 415jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6)R13095 for (i=1; i <= iocnt ; i++) status = lib$free_ef(&efn[i-1]);-13096 clean_flags.events = 0; 13097 } *13098 if (curvol <= maxvol) 13099 { +13100 sprintf(outbuf," "); e!13101 put_disp();*13102 } 13103 }613104 } 13105 +13106 /* Now unlock the volume */ 13107 if (!matlist)13108 { 13109 dfu_handler();&13110 SYS$CANEXH(&desblk);13111 }i113112 if (qchan !=0) SYS$DASSGN(qchan); 13113 413114 /* Now enter files in directories */$13115 fib.fib$w_nmctl = 0;#13116 if (first != NULL) d13117 { T13118 sprintf(outbuf,"%%DFU-I-ENTER, Entering file(s) in directory...");13119 put_disp(); 13120 }d+13121 for (i=1; i <=maxvol ; i++) Q13122 status = SYS$QIOW(0,rvt[i].channel,IO$_DEACCESS,&iostat[iocnt], $13123 0,0,0,0,0,0,0,0); %13124 while (first != NULL) 13125 { 13126 list = first; 813127 rvn = list->rvn; if (rvn ==0) rvn = 1;E13128 copy_fid(&fib.fib$w_did[0], &list->did_num, FALSE); E13129 copy_fid(&fib.fib$w_fid[0], &list->fid_num, FALSE); +13130 strcpy(name,list->name); 913131 name_descr.dsc$w_length = strlen(name);A+13132 if (list->function == 1) 8M13133 status = enter_file(rvt[rvn].channel, &fib, &name_descr);w[13134 else status = 2; /* If lost backlink enter the file in SYSLOST anyway */4%13135 first = list->next;j?13136 free(list); /*Return dynamic space to pool */-)13137 if ((status & 1) != 1) S13138 { &13139 if (syslost == 0) 813140 syslost = make_syslost(&lost_fid);N13141 if (syslost == 1) /* Try entering the file in [SYSLOST] */13142 { L13143 copy_fid(&fib.fib$w_did[0], &lost_fid.fid_num, FALSE);O13144 status = enter_file(rvt[rvn].channel, &fib, &name_descr);d13145 } &13146 if (syslost == 2) 13147 { a13148 sprintf(outbuf,"%%DFU-E-NOTENTER, File %s not entered in directory,",name);)"13149 put_disp(); +13150 singlemsg(0,status); %13151 sprintf(outbuf,u lDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 42 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (6)Q13152 "- Use ANALYZE/DISK/REPAIR to move the file to [SYSLOST]");a!13153 put_disp(); 13154 } 13155 } 13156 } 13157 13158 curvol = 1;x13159 cleanup(); 13160 if (matlist) u13161 { V13162 sprintf(outbuf,"\n%%DFU-S-FND , %d recoverable files found",fcount);13163 put_disp(); 13164 }yJ13165 sprintf(outbuf,"\n%%DFU-I-READY, UNDELETE command ready");13166 put_disp(); Q13167 if (matstat == TRUE) status = lib$show_timer(0,0,display_stat,0); 13168 return(1);13169 }R13170  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 43ijV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (7) 213171 int make_syslost(struct f_id *l_fid)13172 /* B13173 Routine to create the syslost directory on RVN 1413174 Returns 1 on succes, 2 on failure 413175 Routine 'borrowed' from VERIFY.LIS13176 */13177 13178 { 113179 char fname[14] = "SYSLOST.DIR;1";d313180 struct dsc$descriptor device_descr;j213181 struct dsc$descriptor fname_descr;13182 int func;r!13183 short empty = -1; /13184 static unsigned int uchar ,uic;i613185 static short attrib[16], fpro, l_chan;.13186 static struct fibdef lost_fib; 13187 static struct { (13188 unsigned short iosb_1;&13189 unsigned int length;13190 short spec; 13191 } 13192 io_stat; 13193 static struct { 413194 unsigned short atr_size, atr_type;$13195 int *atr_address; 13196 } 13197 acb[5] = { 13198 { 813199 4, ATR$C_UCHAR, (int *) &uchar } 13200 , 13201 { ;13202 32, ATR$C_RECATTR, (int *) &attrib }N13203 , 13204 { 513205 2, ATR$C_FPRO, (int *) &fpro } 13206 , 13207 { 313208 4, ATR$C_UIC, (int *) &uic }913209 ,C13210 { !13211 0, 0, 0 } S13212 };13213 static struct { 13214 int fiblen;)(13215 struct fibdef *fibadr;13216 } 13217 fibdescr; 13218 913219 fname_descr.dsc$w_length = strlen(fname);s<13220 fname_descr.dsc$a_pointer = (char *) &fname;E13221 device_descr.dsc$a_pointer = (char *) &rvt[1].devnam; >13222 device_descr.dsc$w_length = rvt[1].devnam_len;B13223 status = SYS$ASSIGN(&device_descr, &l_chan, 0, 0);T13224 /* Setup fib. First we access the MFD to get the correct attributes,.13225 next we create SYSLOST */113226 if ((status & 1) != 1) return(2);l (DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 44 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (7)313227 fibdescr.fiblen = sizeof(lost_fib);i,13228 fibdescr.fibadr = &lost_fib;+13229 lost_fib.fib$w_fid[0] = 4; d+13230 lost_fib.fib$w_fid[1] = 4; ;+13231 lost_fib.fib$w_fid[2] = 1; _+13232 lost_fib.fib$w_did[0] = 0; d+13233 lost_fib.fib$w_did[1] = 0; 3+13234 lost_fib.fib$w_did[2] = 0; B13235 status = SYS$QIOW(0, l_chan, IO$_ACCESS, &io_stat,313236 0,0, &fibdescr, 0 , 0, 0, &acb, 0); @13237 if ((status & 1) == 1 ) status = io_stat.iosb_1;'13238 if ((status & 1) != 1 ) 13239 { /13240 status = SYS$DASSGN(l_chan); 13241 return(2);13242 } 13243 else13244 { 813245 attrib[2] = attrib[3] = attrib[4] = 0;713246 attrib[5] = 2 ; /* Efblk and Hiblk */ -13247 lost_fib.fib$w_fid[0] = 0; -13248 lost_fib.fib$w_fid[1] = 0; -13249 lost_fib.fib$w_fid[2] = 0; !-13250 lost_fib.fib$w_did[0] = 4; -13251 lost_fib.fib$w_did[1] = 4; -13252 lost_fib.fib$w_did[2] = 1; 3E13253 lost_fib.fib$l_acctl = FIB$M_WRITE | FIB$M_NOWRITE; )13254 lost_fib.fib$w_exctl = >13255 FIB$M_EXTEND | FIB$M_ALCON | FIB$M_FILCON;*13256 lost_fib.fib$l_exsz = 1;+13257 lost_fib.fib$w_nmctl = 0;+713258 /* Go on and create this directory */0@13259 func = IO$_ACCESS | IO$M_CREATE | IO$M_ACCESS;>13260 status = SYS$QIOW(0, l_chan, func, &io_stat,@13261 0,0, &fibdescr, &fname_descr , 0, 0, &acb, 0);B13262 if ((status & 1) == 1 ) status = io_stat.iosb_1;)13263 if ((status & 1) != 1 ) 13264 { \13265 sprintf(outbuf,"%%DFU-E-MKLOST, Error creating/accessing SYSLOST.DIR,"); 13266 put_disp(); (13267 singlemsg(0,status);113268 status = SYS$DASSGN(l_chan); l13269 return(2);13270 } 13271 else.13272 if (status == SS$_CREATED)S13273 { /* empty the first directory block to fake a new directory */ K13274 status = SYS$QIOW(0, l_chan, IO$_WRITEVBLK, &io_stat, 313275 0,0, &empty, 2, 1 , 0, 0, 0);f13276 } 13277 } #13278 SYS$DASSGN(l_chan); I13279 copy_fid(&l_fid->fid_num, &lost_fib.fib$w_fid[0], FALSE);)13280 return(1);13281 } 13282  rDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 45 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (8) 13283 void make_list()D13284 /* Routine to create a new element in the work list */13285 {[#13286 if (first == NULL ),13287 { E13288 list = (struct work *) malloc(sizeof(struct work));t>13289 first = list; /* pointer to first element */13290 } 13291 else_13292 { J13293 list->next = (struct work *) malloc(sizeof(struct work));#13294 list = list->next;m13295 }313296 }a13297  tDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 46mjV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9) *13298 int verify_command(int mask)13299 /*D13300 Verify disk (like ANALYZE/DISK) and report errors.D13301 /FIX fixes some basic errors (like ANA/DISK/REPAI)G13302 /REBUILD fixes structure errors (like in BITMAP.SYS) yE13303 This routine does not verify individual directories G13304 V2.4 : Report multiple allocated blocks sorted by LBN,'13305 Rebuild MFD if needede713306 : added directory scan (/DIRECTORY_SCAN 13307 */13308 13309 {2V13310 static char dummy_item[80], fname[80], name[86], bfile[255], fmode[2];/13311 struct header_area_struct *hdr; -13312 struct ident_area_struct *id; 13313 static struct { 413314 unsigned short atr_size, atr_type;#13315 int atr_address; 13316 } 13317 atrmfd[2];V13318 Boolean dummy, matoutput, matstat, matlock, bitset, matfix, matappend,(13319 matreb, matdir, trigger;,13320 unsigned short keybuf[9] = {.13321 2, DSC$K_DTYPE_LU, 0, 0, 4 ,-13322 DSC$K_DTYPE_WU, 1, 9, 2 }; %13323 static struct _mlt { 013324 unsigned int lbnstart, lbnend;)13325 unsigned short fid[3]; 13326 } 13327 sort_rec;3 13328 static struct { %13329 unsigned int size; d)13330 struct _mlt * pointer; 13331 } 13332 sor_descr; 13333 int reclen = 14;13334 register int i;_R13335 int ivbn, bitblk, bitje, bitval, find, rvn, x, y, dir_cnt, maxdir,I13336 k, size, free_hdr, a_size, r_size, hdrs, namelen, rtvptr;H13337 unsigned int page_cnt, bakfid, syslost, bytes, previous;13338 struct { .813339 int own_uic, flag, rsize, asize, hdr; 13340 } !13341 usage_table[750];:.13342 struct f_id lost_fid, mfd_fid;F13343 static struct fibdef fib; /* File information block */13344 struct { e13345 int fiblen; )13346 struct fibdef *fibadr; 213347 } 13348 fibdescr;e>13349 /* Set up list for mutiple allocated blocks */13350 struct mult { /13351 unsigned int lbnstart,lbnend;t$13352 struct mult *next;13353 }  sDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 47ijV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)"13354 *m_first, *m_list;"13355 Boolean multalloc;)13356 void get_map_pointers(), 9:13357 add_usage(), dfu_handler(), new_bitmap(), 313358 check_usage(), report_lost_files(); $13359 /* FAO parameters */'13360 unsigned short outlen; e813361 static char mfd_name[] = "000000.DIR;1";013362 $DESCRIPTOR(out_descr , outbuf);313363 $DESCRIPTOR(device_descr , device);0013364 $DESCRIPTOR(file_descr , fname);613365 $DESCRIPTOR(dummy_descr , dummy_item);/13366 $DESCRIPTOR(name_descr , name);R-13367 $DESCRIPTOR(badfile , bfile);3113368 $DESCRIPTOR(mfd_descr, mfd_name);C13369 &13370 /* Code starts here */213371 /* Parse the various qualifiers */13372 13373 dir_cnt = 0;$13374 sor_descr.size = 14;.13375 sor_descr.pointer = &sort_rec;$13376 progress_ind = TRUE;13377 y = 0;H13378 status = parse_item("fix", &dummy_descr, 0, &matfix, 2);L13379 status = parse_item("rebuild", &dummy_descr, 0, &matreb, 2);L13380 status = parse_item("dirscan", &dummy_descr, 0, &matdir, 2);*13381 /* Check the privileges */;13382 if ( ((matfix) || (matreb)) && (mask > -1))*13383 { +13384 singlemsg(0, DFU_NOPRIV);,%13385 return(SS$_NOPRIV);Y13386 } %13387 /* Get device name */lL13388 status = parse_item("device", &device_descr, 0, &dummy , 0);!13389 if (status == 1) 13390 { 613391 if (strindex(&device,":",64) == -1) 13392 {1;13393 device[device_descr.dsc$w_length]=':'; r313394 device_descr.dsc$w_length += 1;r13395 }13396 }tP13397 status = parse_item("statistics", &dummy_descr, 0, &matstat, 2);J13398 status = parse_item("lock", &dummy_descr, 0, &matlock, 2);R13399 if (matreb) matlock = TRUE; /* Lock anyway if rebuild requested */@13400 for (i=0; i < 750; i++) usage_table[i].flag = 0;%13401 /* Get output file */i&13402 clean_flags.fopen = 0;"13403 strcpy(fmode,"w");O13404 status = parse_item("outfile", &file_descr, 0, &matoutput , 0);13405 if (!matoutput)SP13406 status = parse_item("append", &file_descr, 0, &matappend , 0);13407 if (matappend)13408 { $13409 matoutput = TRUE; $13410 strcpy(fmode,"a"); HDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 48fjV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)13411 } (13412 if (matoutput == FALSE) 13413 {b/13414 strcpy(fname,"SYS$OUTPUT:"); /13415 file_descr.dsc$w_length = 11; 13416 }|13417 else13418 { 913419 fname[file_descr.dsc$w_length] = '\0'; f13420 }3Z13421 fp = fopen(fname,fmode,"mrs=255","rfm=var","ctx=rec","rat=cr","rop=WBH"); &13422 clean_flags.fopen = 1;13423 !13424 /* Fill in FIB */,.13425 fibdescr.fiblen = sizeof(fib);'13426 fibdescr.fibadr = &fib;(13427 syslost = 0;13428 +13429 /* All qualifiers parsed */313430 first = NULL; 13431 list = NULL;?13432 if (matstat == TRUE) status = lib$init_timer(); )13433 clean_flags.channels = 0;g%13434 clean_flags.sort = 0;t'13435 clean_flags.events = 0; '13436 clean_flags.expreg = 0;13437 13438 if (matfix)f13439 { 613440 atrmfd[0].atr_size = ATR$S_BACKLINK;613441 atrmfd[0].atr_type = ATR$C_BACKLINK;913442 atrmfd[0].atr_address = (int) &mfd_fid;3>13443 atrmfd[1].atr_size = atrmfd[1].atr_type = 0;&13444 mfd_fid.fid_num = 4;&13445 mfd_fid.fid_seq = 4;813446 mfd_fid.fid_rvn = mfd_fid.fid_nmx = 0;13447 } 13448 D13449 /* Open the volume (set) , read in the home block */13450 .13451 i = (matlock == TRUE) ? 1 : 0;613452 status = open_device(&device_descr,i);613453 if ((status & 1) != 1) return(status);613454 if ((matlock) && (rvt[1].wlk == TRUE))13455 { !13456 sprintf(outbuf, T13457 "%%DFU-W-WRITELK, Cannot rebuild or lock on write-locked device");13458 put_disp();#13459 matlock = FALSE; !13460 matreb = FALSE;313461 }s:13462 if ((matlock == TRUE) && (lock_chan != 0))N13463 { /* Setup exit handler to ensure that we unlock the volume */;13464 desblk.handler_addr = (int) &dfu_handler;s313465 desblk.condition = (int) &status;a'13466 desblk.arg_count = 1; /13467 status = SYS$DCLEXH(&desblk);G 9DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 499jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)(13468 if ((status & 1) !=1) 13469 { 213470 singlemsg(DFU_EXHFAIL,status);13471 cleanup(); #13472 return(status);e13473 }.13474 } 13475 13476 curvol = 1; 13477 size = 1; 13478 ctx.end = FALSE;Q13479 if (smg$enable) SMG$SET_CURSOR_MODE(&paste_id,&SMG$M_CURSOR_OFF); #13480 multalloc = FALSE; 813481 while ((curvol <= maxvol) && (!ctx.end))13482 { 13483 ctx.i = -1; "13484 trigger = FALSE;.13485 if (rvt[curvol].i_open ==1) 13486 { $13487 if (maxvol == 1)13488 { L13489 sprintf(outbuf,"%%DFU-I-VERIFY, Verifying %.*s (%s) ",V13490 device_descr.dsc$w_length, device, &rvt[curvol].fulldevnam[1]); 13491 }t13492 else13493 { V13494 sprintf(outbuf,"%%DFU-I-VERIFY, Verifying %.*s (%s) , RVN = %d",B13495 rvt[curvol].devnam_len, rvt[curvol].devnam, ;13496 &rvt[curvol].fulldevnam[1], curvol); 13497 }n13498 put_disp(); 13499 headers=0;!13500 previous = 0;rL13501 m_list = (struct mult *) malloc (sizeof (struct mult)); %13502 m_first = m_list;e(13503 m_list->next = NULL;=13504 /* Phase 1 : Read and parse INDEXF.SYS */e-13505 /* Create dynamic array. k:13506 Also create space for new bitmap */13507 P13508 page_cnt = 1 + (rvt[curvol].if_size*sizeof(struct _da))/512;,13509 rvt[curvol].addr[0] = 0;113510 rvt[curvol].bmap_addr[0] = 0;_L13511 status = SYS$EXPREG(page_cnt, &rvt[curvol].addr[0],0,0);)13512 if ((status &1) != 1)f13513 { 413514 singlemsg(DFU_EXPREG,status); !13515 cleanup(); %13516 return(status); 13517 } +13518 clean_flags.expreg = 1; D13519 dyn_array = (struct _da *) rvt[curvol].addr[0]; L13520 page_cnt = (rvt[curvol].maxblocks/home[curvol].cluster);:13521 page_cnt = (page_cnt + 4095 ) / 4096; Q13522 status = SYS$EXPREG(page_cnt, &rvt[curvol].bmap_addr[0],0,0);G)13523 if ((status &1) != 1) 13524 {  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 50sjV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)413525 singlemsg(DFU_EXPREG,status); !13526 cleanup(); 3%13527 return(status);613528 }o13529 013530 /* Report home block info */713531 if ((home[curvol].altidxlbn !=0) &&3613532 (home[curvol].altidxvbn != 0) &&413533 (home[curvol].cluster != 0) &&413534 (home[curvol].homevbn != 0) &&513535 (home[curvol].ibmapvbn != 0) && 513536 (home[curvol].ibmaplbn != 0) &&S513537 (home[curvol].maxfiles != 0) && 613538 (home[curvol].ibmapsize != 0) &&413539 (home[curvol].resfiles != 0) )U13540 sprintf(outbuf,"%%DFU-S-CHKHOME, Home block info verified OK");n13541 elseP13542 sprintf(outbuf,"%%DFU-E-ERRHOME, Home block info not OK"); 13543 put_disp(); =13544 if (matoutput) fprintf(fp,"%s\n",outbuf);m13545 [13546 /* Read in index file bitmap, and return free hdrs + highest bit set */ 213547 read_indexf_bitmap(&free_hdr);13548 /13549 status = get_next_header(); :13550 if ((status & 1) != 1) return(status);V13551 while (! ctx.end) /* Loop until end of INDEXF or CTRL C entered */13552 { $13553 hdr = ctx.hdr;"13554 id = ctx.id;913555 /* Setup fields in dynamic array */tR13556 bakfid = hdr->bk_fid_overlay.bk_fid_fields.bk_fid_nmx << 16;M13557 bakfid += hdr->bk_fid_overlay.bk_fid_fields.bk_fid_num;=513558 (dyn_array+headers)->bitje = 0; 613559 (dyn_array+headers)->a_size = 0;613560 (dyn_array+headers)->f_link = 0;;13561 (dyn_array+headers)->bakfid = bakfid;r13562 H13563 /* Check corresponding bitmap bit (must be set) */;13564 bitblk = (headers + 4095) / 4096 - 1;t?13565 bitje = (headers - 1 - bitblk*4096) / 32; 213566 bitval = (headers - 1) % 32;V13567 status = lib$ffs(&bitval,&size,&bitmap[bitblk+1].block[bitje*4],13568 &find);e113569 if (status == LIB$_NOTFOU) 3'13570 bitset = FALSE; )13571 else bitset = TRUE; #13572 rvn = curvol;;213573 status = verify_header(hdr);/13574 if (status != SS$_NORMAL) 13575 { ,13576 if (bitset == TRUE) 13577 { 13578 sprintf(outbuf,"%%DFU-W-NOBITCLR, file (%d,%d,%d) deleted file header marked BUSY in Index File bitmap"Q13579 ,headers,hdr->fid_overlay.fid_fields.fid_seq,curvol);w&13580 put_disp(); C13581 if (matoutput) fprintf(fp,"%s\n",outbuf);s dDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 51 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9);13582 /* Clear the indexf bitmap bit */d%13583 if (matreb);13584 { ,13585 trigger = TRUE; [13586 lib$insv(&y, &bitval, &size, &bitmap[bitblk+1].block[bitje*4]); 13587 } 13588 }s@13589 goto next_ver ; /* Not a valid header */13590 }313591 =13592 /* We have a valid header, proceed...*/fR13593 /* Set up new bitmap and report multiple allocated blocks */U13594 new_bitmap(rvt[curvol].bmap_addr[0], hdr, home[curvol].cluster,dE13595 curvol, fp, 1, &m_list, &multalloc, matoutput);[*13596 m_list->next = NULL;W13597 if (hdr->seg_num !=0) goto next_ver ; /* Skip extension header */ ;13598 /*Set lost file and valid file bit */4R13599 (dyn_array+headers)->bitje = (dyn_array+headers)->bitje | 1;S13600 (dyn_array+headers)->bitje = (dyn_array+headers)->bitje | 16;e913601 copy_fid(&(dyn_array+headers)->fid,rB13602 &hdr->fid_overlay.fid_fields.fid_num,FALSE);V13603 /* Get size fields (NOTE : they are stored in reverse order ! */L13604 a_size = hdr->hiblk_overlay.hiblk_fields.hiblkh << 16;G13605 a_size += hdr->hiblk_overlay.hiblk_fields.hiblkl;F;13606 (dyn_array+headers)->a_size = a_size;RL13607 r_size = hdr->efblk_overlay.efblk_fields.efblkh << 16;G13608 r_size += hdr->efblk_overlay.efblk_fields.efblkl; &13609 if (r_size > 0) [13610 if (hdr->ffbyte == 0) r_size--; /* Correct size on block boundary*/t$13611 /* Get name */713612 memcpy(&name[0],id->filename,20); O13613 if (name[19] != ' ') memcpy(&name[20],id->filenamext,66); ;13614 namelen = strindex(&name[0]," ",86); 913615 713616 /* Check marked for delete bit */1K13617 if ((hdr->filechar & FH2$M_MARKDEL) == FH2$M_MARKDEL)13618 { 713619 (dyn_array+headers)->bitje = 0; '13620 sprintf(outbuf, Q13621 "%%DFU-W-DELETED, file (%d,%d,%d) %.*s marked for delete".M13622 ,headers,hdr->fid_overlay.fid_fields.fid_seq,curvolG)13623 ,namelen,name); $13624 put_disp(); A13625 if (matoutput) fprintf(fp,"%s\n",outbuf); Q13626 /* If /FIX entered we enter this file in the work list */l#13627 if (matfix)13628 { &13629 make_list();#13630 /* Fill in File id */-Y13631 copy_fid(&list->fid_num, &hdr->fid_overlay.fid_fields.fid_num, &#13632 FALSE); I13633 if (list->fid_rvn == 0) list->fid_rvn = curvol; .13634 list->function = 1; ,13635 list->next = NULL;13636 }n>13637 goto add_usage; /* Skip other tests */13638 }9 DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 52 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)13639 ,13640 /* Check locked bit */I13641 if ((hdr->filechar & FH2$M_LOCKED) == FH2$M_LOCKED)r13642 { '13643 sprintf(outbuf,R13644 "%%DFU-W-LOCKED, file (%d,%d,%d) %.*s is deaccess locked "\13645 ,headers,hdr->fid_overlay.fid_fields.fid_seq,curvol,namelen,name);$13646 put_disp(); A13647 if (matoutput) fprintf(fp,"%s\n",outbuf); 13648 } 13649 .13650 /* Check badblock bit */M13651 if ((hdr->filechar & FH2$M_BADBLOCK) == FH2$M_BADBLOCK) 13652 { '13653 sprintf(outbuf,_Y13654 "%%DFU-W-BADBLOCK, file (%d,%d,%d) %.*s has suspected bad blocks"3\13655 ,headers,hdr->fid_overlay.fid_fields.fid_seq,curvol,namelen,name);$13656 put_disp(); A13657 if (matoutput) fprintf(fp,"%s\n",outbuf);b13658 } 13659 /13660 /* Check directory'~ DFU024.BCK{[DFU024.LIS]DFU_IFSCAN.LIS;3k&| bit */O13661 if ((hdr->filechar & FH2$M_DIRECTORY) == FH2$M_DIRECTORY):13662 { T13663 (dyn_array+headers)->bitje = (dyn_array+headers)->bitje | 4;213664 /* Fill in forward link */Q13665 if (previous !=0) (dyn_array+previous)->f_link = headers;;+13666 previous = headers;3"13667 dir_cnt++;B13668 /* On volume sets check the link to MFD */'13669 if (maxvol > 1)13670 { K13671 y = hdr->bk_fid_overlay.bk_fid_fields.bk_fid_rvn; C13672 if ((y ==0) && (headers !=4)) y = curvol; 713673 if ((bakfid == 4) && (y > 1)) 13674 { s13675 sprintf(outbuf,"%%DFU-W-BADMFDLNK, directory %.*s has backlink to 000000.DIR on RVN %d"0113676 , namelen,name, y);!(13677 put_disp(); E13678 if (matoutput) fprintf(fp,"%s\n",outbuf); 13679 } 13680 y = 0;13681 }313682 }p13683 =13684 /* Check corresponding bit in bitmap */ *13685 if (bitset == FALSE)13686 { m13687 sprintf(outbuf,"%%DFU-W-NOBITSET, file (%d,%d,%d) %.*s Index File bitmap bit not set" \13688 ,headers,hdr->fid_overlay.fid_fields.fid_seq,curvol,namelen,name);$13689 put_disp(); A13690 if (matoutput) fprintf(fp,"%s\n",outbuf); #13691 if (matreb)t13692 { L13693 y = 1; /* Now set this bit in the indexf bitmap */13694 Y13695 lib$insv(&y, &bitval, &size, &bitmap[bitblk+1].block[bitje*4]);f +DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 53ajV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)!13696 y = 0; )13697 trigger = TRUE;e13698 } 13699 } 13700 ,13701 /* Check file owner */@13702 if (hdr->fileowner_overlay.fileowner == 0)13703 { [13704 sprintf(outbuf,"%%DFU-W-NOOWNER, file (%d,%d,%d) %.*s has no owner"k\13705 ,headers,hdr->fid_overlay.fid_fields.fid_seq,curvol,namelen,name);$13706 put_disp(); A13707 if (matoutput) fprintf(fp,"%s\n",outbuf); 13708 } 13709 E13710 /* Check backlink ; special case for the MFD */OO13711 if ( (bakfid == 0) || ((headers == 4) && (bakfid != 4)) )313712 { '13713 sprintf(outbuf,"V13714 "%%DFU-E-INVBAKFID, file (%d,%d,%d) %.*s has invalid backlink"\13715 ,headers,hdr->fid_overlay.fid_fields.fid_seq,curvol,namelen,name);$13716 put_disp(); A13717 if (matoutput) fprintf(fp,"%s\n",outbuf);613718 /* Set invalid backlink bit */;13719 if ((bakfid ==0) && (headers !=4)) V13720 (dyn_array+headers)->bitje = (dyn_array+headers)->bitje | 2;#13721 if (matfix)13722 { 13723 make_list();#13724 /* Fill in File id */;V13725 copy_fid(&list->fid_num,&hdr->fid_overlay.fid_fields.fid_num%13726 , FALSE); 113727 list->fid_rvn = curvol; @13728 if (headers != 4) list->function = 2; 213729 else list->function = 5;,13730 list->next = NULL;;13731 strncpy(list->name,name,namelen);913732 } 13733 }t^13734 if ((bakfid == headers) && (headers !=4)) /* File backlinks to itself */513735 /* need to check volume set*/&B13736 if (hdr->fid_overlay.fid_fields.fid_rvn ==G13737 hdr->bk_fid_overlay.bk_fid_fields.bk_fid_rvn)S13738 { )13739 sprintf(outbuf,i]13740 "%%DFU-E-SLFBAKFID, file (%d,%d,%d) %.*s backlink points to itself" ^13741 ,headers,hdr->fid_overlay.fid_fields.fid_seq,curvol,namelen,name);&13742 put_disp(); C13743 if (matoutput) fprintf(fp,"%s\n",outbuf);n%13744 if (matfix)t13745 { (13746 make_list();#13747 /* Fill in File id */.413748 copy_fid(&list->fid_num,K13749 &hdr->fid_overlay.fid_fields.fid_num, FALSE);r413750 copy_fid(&list->did_num,T13751 &hdr->bk_fid_overlay.bk_fid_fields.bk_fid_num, FALSE);313752 list->fid_rvn = curvol;  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 54 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)013753 list->function = 4; .13754 list->next = NULL;=13755 strncpy(list->name,name,namelen);k13756 }313757 }rR13758 /* If backlink points to other disk we must save this RVN */L13759 if (hdr->bk_fid_overlay.bk_fid_fields.bk_fid_rvn == 0)N13760 hdr->bk_fid_overlay.bk_fid_fields.bk_fid_rvn = curvol;Q13761 if (hdr->bk_fid_overlay.bk_fid_fields.bk_fid_rvn != curvol)s13762 { 213763 (dyn_array+headers)->rvn =G13764 hdr->bk_fid_overlay.bk_fid_fields.bk_fid_rvn;oT13765 (dyn_array+headers)->bitje = (dyn_array+headers)->bitje | 8;13766 } 13767 add_usage: 13768 hdrs = 1; !13769 rtvptr = 0; >13770 if (hdr->ext_fid_overlay.ext_fid[0] !=0)E13771 status = follow_extents(hdr, &rtvptr, &hdrs); .13772 /* Update usage table */H13773 if (headers > 3) /* Skip first 3 reserved files */R13774 add_usage(&usage_table, hdr->fileowner_overlay.fileowner, .13775 r_size, a_size, hdrs);'13776 /* Next header */ 13777 next_ver : C113778 status = get_next_header(); <13779 if ((status & 1) != 1) return(status);13780 } 13781 } )13782 /* Save array bounds */1613783 dyn_array->fid[0] = headers % 65536;613784 dyn_array->fid[1] = headers / 65536;.13785 dyn_array->bakfid = headers;13786 O13787 /* Phase 1A If we have multiple allocated blocks we will make S13788 a new (empty) bitmap with the bits set for the blocks reported U13789 in the dynamic array m_list. Thus, a second pass thru INDEXF.SYS R13790 and the routine new_bitmap will report ALL files involved. */ 13791 if (multalloc)113792 { /* Recreate the new bitmap */c^13793 sprintf(outbuf,"%%DFU-W-MULTFND, reporting multiple allocated blocks..."); 13794 put_disp(); =13795 if (matoutput) fprintf(fp,"%s\n",outbuf);DC13796 status = SYS$DELTVA(&rvt[curvol].bmap_addr[0], 213797 &rvt[curvol].bmap_addr[0], 0);113798 rvt[curvol].bmap_addr[0] = 0; L13799 page_cnt = (rvt[curvol].maxblocks/home[curvol].cluster);:13800 page_cnt = (page_cnt + 4095 ) / 4096; Q13801 status = SYS$EXPREG(page_cnt, &rvt[curvol].bmap_addr[0],0,0);M)13802 if ((status &1) != 1) 13803 { 413804 singlemsg(DFU_EXPREG,status); !13805 cleanup(); %13806 return(status);13807 } C13808 /* Now fill in the multiple allocated blocks */ 113809 while (m_first->next != NULL)  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 55 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)13810 { '13811 m_list = m_first; P13812 set_bitmap(rvt[curvol].bmap_addr[0], home[curvol].cluster,>13813 m_list->lbnstart, m_list->lbnend, TRUE);-13814 m_first = m_list->next;d#13815 free(m_list);a13816 } 13817 X13818 /* Set up sort context so we can report the files sorted by LBN's */I13819 status = sor$begin_sort(&keybuf,&reclen,SOR$M_STABLE, -13820 0,0,0,SOR$GK_RECORD,0,0);8*13821 if ((status &1 ) != 1)13822 { +13823 singlemsg(0,status); A!13824 cleanup(); 8&13825 return(status); 13826 }%)13827 clean_flags.sort = 1;13828 /13829 /* Now rescan INDEXF.SYS */d%13830 ctx.end = FALSE; 13831 ctx.i = -1; /13832 status = get_next_header();o:13833 if ((status & 1) != 1) return(status);V13834 while (! ctx.end) /* Loop until end of INDEXF or CTRL C entered */13835 { $13836 hdr = ctx.hdr;#13837 rvn = curvol;k213838 status = verify_header(hdr);A13839 if (status != SS$_NORMAL) goto next_ver2 ; .13840 =13841 /* We have a valid header, proceed...*/ R13842 /* Set up new bitmap and report multiple allocated blocks */U13843 new_bitmap(rvt[curvol].bmap_addr[0], hdr, home[curvol].cluster,3B13844 curvol, fp, 2, NULL, &multalloc, matoutput);13845 13846 next_ver2 : 113847 status = get_next_header(); <13848 if ((status & 1) != 1) return(status);13849 }):13850 /* Sort the results and report them */.13851 status = sor$sort_merge();+13852 if ((status & 1 ) != 1)13853 { Q13854 sprintf(outbuf,"%%DFU-E-SORTERR, Error sorting output,\n"); "13855 put_disp(); *13856 singlemsg(0,status);13857 }a13858 else13859 { C13860 status = sor$return_rec(&sor_descr, &reclen);513861 while (status != SS$_ENDOFFILE),13862 { [13863 status = lib$fid_to_name(&device_descr, &sort_rec.fid[0], &badfile,a'13864 &reclen, 0, 0); 413865 x = strindex(bfile,"[",255);#13866 reclen -=x;  *DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 56ejV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)T13867 sprintf(outbuf,"%%DFU-E-MULTALLOC, file (%d,%d,%d) %.*s , ",R13868 sort_rec.fid[0],sort_rec.fid[1],curvol,reclen,&bfile[x] );$13869 put_disp(); A13870 if (matoutput) fprintf(fp,"%s\n",outbuf); X13871 sprintf(outbuf," blocks LBN %d through %d multiple allocated",<13872 sort_rec.lbnstart, sort_rec.lbnend);$13873 put_disp(); A13874 if (matoutput) fprintf(fp,"%s\n",outbuf);E13875 status = sor$return_rec(&sor_descr, &reclen); 13876 }313877 }*&13878 } /*end multalloc */!13879 free(m_first); f$13880 multalloc = FALSE;13881 !13882 if (ctrlc != 1)r.13883 if ((matreb) && (trigger))C13884 /* Rewrite the indexf bitmap at this point */A13885 { ;13886 bytes = 512 * home[curvol].ibmapsize;hW13887 status = SYS$QIOW(0,rvt[curvol].channel,IO$_WRITEVBLK,&iostat[0], H13888 0,0,&bitmap[1],bytes,home[curvol].ibmapvbn,0,0,0);G13889 if ((status & 1) == 1) status = iostat[0].iosb_1; ,13890 if ((status & 1) == 1)13891 { U13892 sprintf(outbuf,"%%DFU-S-REBIFMAP, Indexfile bitmap rebuild"); $13893 put_disp(); A13894 if (matoutput) fprintf(fp,"%s\n",outbuf);i13895 } 13896 else13897 { Z13898 sprintf(outbuf,"%%DFU-E-REBIFMAP, Indexf Bitmap rebuild failed,");$13899 put_disp(); ,13900 singlemsg(0,status);13901 }513902 } 13903 13904 if (ctrlc !=1)13905 { F13906 /* Phase 2: Now continue with bitmap processing */O13907 sprintf(outbuf," Progress : 100%% Status : READY");i"13908 put_status(1);713909 strcpy(device, rvt[curvol].devnam); G13910 device_descr.dsc$w_length = rvt[curvol].devnam_len;*13911 rvt[curvol].bchan = 0;Q13912 status = SYS$ASSIGN(&device_descr, &rvt[curvol].bchan, 0, 0);d+13913 if ((status & 1) != 1) 13914 { 413915 singlemsg(DFU_ASSIGN,status); !13916 cleanup(); %13917 return(status); 13918 } __13919 sprintf(outbuf," Progress : 0%% Status : Processing BITMAP.SYS");a"13920 put_status(1);O13921 page_cnt = (rvt[curvol].maxblocks / home[curvol].cluster) ; Y13922 /* Check for incorrect blocks in BITMAP.SYS and rebuild on request */Y13923 status = compare_bitmap(rvt[curvol].bchan, rvt[curvol].bmap_addr[0],  *DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 57ujV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)E13924 page_cnt, rvt[curvol].wlk, home[curvol].cluster, +13925 fp, matreb, matoutput); O13926 sprintf(outbuf," Progress : 100%% Status : READY"); "13927 put_status(1);)13928 if ((status &1) !=1) y13929 { !13930 cleanup(); r%13931 return(status); 13932 }kN13933 /* Free the new bitmap space, we don't need it any more */C13934 status = SYS$DELTVA(&rvt[curvol].bmap_addr[0], b213935 &rvt[curvol].bmap_addr[0], 0);113936 rvt[curvol].bmap_addr[0] = 0;s13937 } !13938 if (ctrlc == 1)d13939 { #13940 ctx.end = TRUE;13941 }(13942 else13943 { 13944 curvol++; 613945 ctx.end = FALSE; /* Next volume */113946 if (clean_flags.events == 1) i13947 { R13948 for (i=1; i <= iocnt ; i++) status = lib$free_ef(&efn[i-1]);.13949 clean_flags.events = 0; 13950 }_*13951 if (curvol <= maxvol) 13952 { +13953 sprintf(outbuf," "); b!13954 put_disp(); 13955 }=13956 } 13957 } 13958 curvol = 1;a/13959 /* Phase 3 : check diskquota */ 13960 if (ctrlc != 1) 13961 { \13962 sprintf(outbuf," Progress : 0%% Status : Processing QUOTA.SYS"); 13963 put_status(1);V13964 check_usage(&usage_table, rvt[curvol].bchan, fp, matreb, matoutput);M13965 sprintf(outbuf," Progress : 100%% Status : READY");N 13966 put_status(1);13967 } 13968 213969 /* Now we can unlock the volume */13970 if (matlock)13971 { 13972 dfu_handler();&13973 SYS$CANEXH(&desblk);13974 } 13975 T13976 /* Phase 4 : check directories (if requested via /DIRECTORY_SCAN) */13977 if (ctrlc !=1) 13978 if (matdir)e13979 { Z13980 sprintf(outbuf,"%%DFU-I-DIRSCAN, Scanning %d directories...",dir_cnt); DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 58tjV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)13981 put_disp();213982 /* Now scan the directories */%13983 maxdir = dir_cnt; 13984 dir_cnt = 0;(13985 if (!matfix) k = 1; 13986 else k = 2;.113987 for (i = 1; i <= maxvol; i++)N%13988 if (ctrlc !=1) _13989 dir_cnt += scan_directories(&rvt[0], i, dir_cnt, maxdir, matoutput, k);_O13990 sprintf(outbuf," Progress : 100%% Status : READY"); "13991 put_status(1);13992 }r13993 013994 /* Phase 5 : check lost files */M13995 if (ctrlc != 1) report_lost_files(matfix, matoutput, matdir);t13996 (13997 /* Phase 6 : fix errors /13998 Function 1: Delete this file /13999 2: Enter file in [SYSLOST],D14000 3: Clear out previous backlink (reset to 0,0,0)S14001 4: Remove file from directory (only for 'looping' directories)0(14002 5: Reset MFD in MFD;14003 6: Enter file in the correct directory4/14004 7: Remove invalid file entry 14005 */.14006 if (matfix && (first != NULL))14007 { -14008 for (i=1; i <=maxvol ; i++) S14009 status = SYS$QIOW(0,rvt[i].channel,IO$_DEACCESS,&iostat[iocnt],s&14010 0,0,0,0,0,0,0,0); 14011 if (!ctrlc) 14012 { G14013 sprintf(outbuf,"%%DFU-I-REPAIR, Fixing errors...");14014 put_disp(); 14015 } '14016 while (first != NULL) 14017 { "14018 list = first; 14019 if (!ctrlc) 14020 { @14021 if (list->function == 1) /* Delete file */Y14022 status = delete_file(&list->fid_num, rvt[list->fid_rvn].channel, s314023 TRUE, FALSE, FALSE, FALSE);rV14024 if (list->function == 4) /* Remove file entry, then enter file*/14025 { M14026 status = remove_file(&list->fid_num, &list->did_num, :(14027 rvt[1].channel);+14028 list->function = 2; 14029 } E14030 if (list->function == 3) /* Remove file entry*/ M14031 status = delete_file(&list->fid_num, rvt[1].channel, 114032 TRUE, FALSE, TRUE, TRUE);,J14033 if (list->function == 2) /* Enter file in SYSLOST */14034 { O14035 if (syslost == 0) /* Create the [SYSLOST] if needed */ h14036 { <14037 syslost = make_syslost(&lost_fid); DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 59sjV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)P14038 copy_fid(&fib.fib$w_did[0], &lost_fid.fid_num, FALSE);14039 }3)14040 if (syslost == 1) 14041 { P14042 copy_fid(&fib.fib$w_did[0], &lost_fid.fid_num, FALSE);M14043 copy_fid(&fib.fib$w_fid[0], &list->fid_num, FALSE);e314044 strcpy(name,list->name); vA14045 name_descr.dsc$w_length = strlen(name);bQ14046 status = enter_file(rvt[1].channel, &fib, &name_descr);)14047 }o14048 } G14049 if (list->function == 5) /* Reset MFD backlink */ 14050 { K14051 copy_fid(&fib.fib$w_fid[0], &list->fid_num, FALSE); @14052 fib.fib$w_did[0] = fib.fib$w_did[1] = 4;-14053 fib.fib$w_did[2] = 0; ,14054 fib.fib$w_nmctl = 0;114055 /* create entry in MFD */eN14056 status = enter_file(rvt[1].channel, &fib, &mfd_descr);414057 /* Now reset the backlink */I14058 status = SYS$QIOW(0, rvt[1].channel, IO$_MODIFY, =[14059 &iostat[ctx.thread],0,0, &fibdescr, &mfd_descr , 0, 0, &atrmfd, 0); R14060 if ((status & 1) == 1) status = iostat[ctx.thread].iosb_1;.14061 if ((status & 1) == 1)14062 { )14063 sprintf(outbuf,iH14064 "%%DFU-S-MFDFIX, %s backlink fixed",mfd_name);%14065 put_disp(); 14066 }_14067 },U14068 if (list->function == 6) /* Enter file in original directory */ 14069 { _-14070 rvn = list->fid_rvn; (.14071 if (rvn == 0) rvn = 1;K14072 copy_fid(&fib.fib$w_did[0], &list->did_num, FALSE); K14073 copy_fid(&fib.fib$w_fid[0], &list->fid_num, FALSE);s114074 strcpy(name,list->name); a?14075 name_descr.dsc$w_length = strlen(name);fQ14076 status = enter_file(rvt[rvn].channel, &fib, &name_descr);t/14077 if ((status & 1) != 1) o14078 { W14079 sprintf(outbuf,"%%DFU-E-NOTENTER, File %s not entered",name); &14080 put_disp(); .14081 singlemsg(0,status);14082 } 14083 }1F14084 if (list->function == 7) /* Remove file entrye*/14085 { M14086 status = remove_file(&list->fid_num, &list->did_num, (14087 rvt[1].channel);!14088 if (status == 1) 14089 {X14090 sprintf(outbuf,"%%DFU-S-REMOVED, File %s removed",list->name);%14091 put_disp(); 14092 }14093 else14094 {  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 60 jV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (9)[14095 sprintf(outbuf,"%%DFU-E-NOTREM, File %s not removed",list->name);l:14096 put_disp(); singlemsg(0,status);14097 } 14098 }14099 }('14100 first = list->next; A14101 free(list); /*Return dynamic space to pool */=14102 }]14103 } &14104 if (ctrlc) do_abort();14105 14106 cleanup(); H14107 sprintf(outbuf,"\n%%DFU-I-READY, VERIFY command ready");14108 put_disp(); Q14109 if (matstat == TRUE) status = lib$show_timer(0,0,display_stat,0);314110 return(1);14111 }*14112  sDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 61:kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (10)u W14113 void report_lost_files(Boolean matfix, Boolean matoutput, Boolean matdir)RN14114 /* The dynamic tables build up in Phase 1 of verify will be usedM14115 to check for lost files. If the backlink = 0 or points to an)P14116 invalid or vanished directory we have a lost file. In case of aM14117 volume set we must use the RVN field in the dynamic array toc614118 check the backlink on another disk */14119 14120 { !14121 struct _da *temp;7614122 struct header_area_struct *hdr, *hdr1;-14123 struct ident_area_struct *id;c14124 register int i; M14125 int j, k, maxi, rvn, xrvn, status, namelen, dirlen, function;-+14126 char name[86], dirname[86]; 14127 N14128 sprintf(outbuf,"%%DFU-I-CHKLOST, Checking for lost files...");14129 put_disp(); 914130 if (matoutput) fprintf(fp,"%s\n",outbuf); ?14131 hdr = (struct header_area_struct *) &header[0];;@14132 hdr1 = (struct header_area_struct *) &header[1];-14133 for (j = 1; j <= maxvol; j++)=14134 { [14135 dyn_array = (struct _da *) rvt[j].addr[0]; /* Pointer to correct table */0W14136 maxi = dyn_array->bakfid; /* We saved to highest found header here */ +14137 for (i = 1; i<=maxi; i++) 14138 { 914139 if (i == 4) goto skip; /* Skip MFD */a14140 214141 /* Lost file bit must be set*/E14142 if (( (dyn_array+i)->bitje & 1) != 1) goto skip; ;14143 /* Invalid backlink already reported */tE14144 if (( (dyn_array+i)->bitje & 2) == 2) goto skip; ;14145 /* Check if backlink on other volume */.14146 k = (dyn_array+i)->bakfid;:14147 if (( (dyn_array+i)->bitje & 8) == 8) 14148 { >14149 xrvn = (dyn_array+i)->rvn; /* get rvn */\14150 temp = (struct _da *) rvt[xrvn].addr[0]; /* point to correct table */@14151 temp = (temp+k); /* Get backlink record */14152 }014153 else S14154 { 14155 xrvn = j;1D14156 temp = (dyn_array+k); /*Get backlink record */14157 }1\14158 /* Temp now points to the file backlink file header (parent directory). I14159 If this file is not valid we have a lost header */4Z14160 /* case 1 : Valid file bit clear. Probably this directory is deleted*/!14161 namelen = -1; !14162 function = 2; 314163 if ( (temp->bitje & 16) != 16) t14164 { L14165 vbn = i - 1 + rvt[j].vbn_file_1; /*Read this header */F14166 status = SYS$QIOW(0,rvt[j].channel,IO$_READVBLK,?14167 &iostat[0],0,0,&header[0],512,vbn,0,0,0); 814168 id = (struct ident_area_struct *)  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 62 kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (10)uN14169 &header[0].block[2*(hdr->idoffset)]; /* Ident area */814170 memcpy(&name[0], id->filename,20);P14171 if (name[19] != ' ') memcpy(&name[20], id->filenamext,66);C14172 namelen = strindex(&name[0]," ", 86); %14173 sprintf(outbuf,o]14174 "%%DFU-W-LOSTHDR1, file (%d,%d,%d) %.*s found in nonexistent directory" P14175 ,i ,hdr->fid_overlay.fid_fields.fid_seq,j,namelen,name);"14176 put_disp(); ?14177 if (matoutput) fprintf(fp,"%s\n",outbuf); 14178 }.14179 else14180 c14181 /* case 2 and 3 : directory has invalid backlink, or directory bit not set */414182 14183 { Q14184 if ( ((temp->bitje & 2) == 2) || ((temp->bitje & 4) != 4) )$14185 { N14186 vbn = i - 1 + rvt[j].vbn_file_1; /*Read this header */H14187 status = SYS$QIOW(0,rvt[j].channel,IO$_READVBLK,A14188 &iostat[0],0,0,&header[0],512,vbn,0,0,0); :14189 id = (struct ident_area_struct *) P14190 &header[0].block[2*(hdr->idoffset)]; /* Ident area */:14191 memcpy(&name[0], id->filename,20);R14192 if (name[19] != ' ') memcpy(&name[20], id->filenamext,66);E14193 namelen = strindex(&name[0]," ", 86); U14194 vbn = k - 1 + rvt[xrvn].vbn_file_1; /*Read backlink header */ K14195 status = SYS$QIOW(0,rvt[xrvn].channel,IO$_READVBLK, A14196 &iostat[0],0,0,&header[1],512,vbn,0,0,0); :14197 id = (struct ident_area_struct *) Q14198 &header[1].block[2*(hdr1->idoffset)]; /* Ident area */ =14199 memcpy(&dirname[0], id->filename,20);oX14200 if (dirname[19] != ' ') memcpy(&dirname[20], id->filenamext,66);G14201 dirlen = strindex(&dirname[0]," ", 86); 314202 if ((temp->bitje & 2) == 2);14203 sprintf(outbuf,"%%DFU-W-LOSTHDR2, file (%d,%d,%d) %.*s in directory with bad backlink (%d,%d,%d) %.*s"S14204 ,i ,hdr->fid_overlay.fid_fields.fid_seq,j,namelen,name,7W14205 k ,hdr1->fid_overlay.fid_fields.fid_seq,xrvn,dirlen,dirname);;14206 else|14207 sprintf(outbuf,"%%DFU-W-LOSTHDR3, file (%d,%d,%d) %.*s found in invalid directory (%d,%d,%d) %.*s"S14208 ,i ,hdr->fid_overlay.fid_fields.fid_seq,j,namelen,name,sW14209 k ,hdr1->fid_overlay.fid_fields.fid_seq,xrvn,dirlen,dirname);a$14210 put_disp(); A14211 if (matoutput) fprintf(fp,"%s\n",outbuf);14212 } Q14213 else if(matdir) /* Case 4, file not found in a directory */ 14214 { %14215 function = 6;;N14216 vbn = i - 1 + rvt[j].vbn_file_1; /*Read this header */H14217 status = SYS$QIOW(0,rvt[j].channel,IO$_READVBLK,A14218 &iostat[0],0,0,&header[0],512,vbn,0,0,0);>:14219 id = (struct ident_area_struct *) P14220 &header[0].block[2*(hdr->idoffset)]; /* Ident area */:14221 memcpy(&name[0], id->filename,20);R14(N~ DFU024.BCK{[DFU024.LIS]DFU_IFSCAN.LIS;3Z|W222 if (name[19] != ' ') memcpy(&name[20], id->filenamext,66);E14223 namelen = strindex(&name[0]," ", 86); '14224 sprintf(outbuf,1Y14225 "%%DFU-W-LOSTHDR4, file (%d,%d,%d) %.*s not found in a directory"  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 63%kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (10) R14226 ,i ,hdr->fid_overlay.fid_fields.fid_seq,j,namelen,name);$14227 put_disp(); A14228 if (matoutput) fprintf(fp,"%s\n",outbuf);414229 } 14230 }b314231 if (matfix && ( namelen != -1))14232 { 14233 make_list();FB14234 /* Fill in File id ; First we remove the old entry >14235 next we enter the file in syslost */'14236 if (function !=6) 14237 { *14238 list->fid_rvn = j;214239 list->fid_num = i % 65536;L14240 list->fid_seq = hdr->fid_overlay.fid_fields.fid_seq;214241 list->fid_nmx = i / 65536;,14242 list->function = 3; *14243 list->next = NULL;Q14244 list->next = (struct work *) malloc(sizeof(struct work)); *14245 list = list->next;14246 }l(14247 list->fid_rvn = j;014248 list->fid_num = i % 65536;J14249 list->fid_seq = hdr->fid_overlay.fid_fields.fid_seq;014250 list->fid_nmx = i / 65536;114251 list->function = function; L14252 if (function == 6) /* Also enter directory backlink */[14253 copy_fid(&list->did_num ,&hdr->bk_fid_overlay.backlink[0], FALSE) ; @14254 if (list->did_rvn == 0) list->did_rvn = j;(14255 list->next = NULL;714256 strncpy(list->name,name,namelen); 14257 }t14258 skip: '14259 ; /* Next header */ V14260 if (ctrlc ==1) i = maxi; /* Dumb method to break off the report */$14261 } /* End i loop */-14262 if (ctrlc == 1) j = maxvol;("14263 } /* End j loop */14264 } 14265  =DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 643kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (11)i C14266 int build_dir_table(char *dev_str, Boolean matoutput)/14267 /*I14268 Build directory table needed for DIR/VERSION, DIR/EMPTY 14269 and DIR/ALIAS14270 */14271 14272 { 514273 static char dummy_item[80], name[86]; /14274 struct header_area_struct *hdr;s-14275 struct ident_area_struct *id;k&14276 Boolean dummy, bitset;14277 register int i;4P14278 int ivbn, bitblk, bitje, bitval, find, rvn, x, maxdir, previous,I14279 k, size, free_hdr, a_size, r_size, hdrs, namelen, rtvptr; 714280 unsigned int page_cnt, dir_cnt, bakfid;t714281 void get_map_pointers(), dfu_handler();k$14282 /* FAO parameters */'14283 unsigned short outlen; S014284 $DESCRIPTOR(out_descr , outbuf);314285 $DESCRIPTOR(device_descr , device); 614286 $DESCRIPTOR(dummy_descr , dummy_item);14287 &14288 /* Code starts here */214289 /* Parse the various qualifiers */14290 %14291 /* Get device name */(14292 strcpy(device, dev_str);;14293 device_descr.dsc$w_length = strlen(device); 414294 if (strindex(&device,":",64) == -1) 14295 { 914296 device[device_descr.dsc$w_length]=':'; 114297 device_descr.dsc$w_length += 1;f14298 }h14299 $14300 progress_ind = TRUE;+14301 /* All qualifiers parsed */ &14302 clean_flags.fopen = 0;%14303 clean_flags.sort = 0;u)14304 clean_flags.channels = 0; '14305 clean_flags.events = 0; '14306 clean_flags.expreg = 0; 14307 dir_cnt = 0;14308 D14309 /* Open the volume (set) , read in the home block */14310 614311 status = open_device(&device_descr,0);614312 if ((status & 1) != 1) return(status);14313 14314 curvol = 1; 14315 size = 1;1 14316 ctx.end = FALSE;Q14317 if (smg$enable) SMG$SET_CURSOR_MODE(&paste_id,&SMG$M_CURSOR_OFF); 814318 while ((curvol <= maxvol) && (!ctx.end))14319 { 14320 ctx.i = -1; .14321 if (rvt[curvol].i_open ==1)  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 65rkV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (11) 14322 { $14323 if (maxvol == 1)14324 { ^14325 sprintf(outbuf,"%%DFU-I-INDSCAN, Making directory table for %.*s (%s) ",V14326 device_descr.dsc$w_length, device, &rvt[curvol].fulldevnam[1]); 14327 }R14328 else14329 { h14330 sprintf(outbuf,"%%DFU-I-INDSCAN, Making directory table for %.*s (%s) , RVN = %d",B14331 rvt[curvol].devnam_len, rvt[curvol].devnam, ;14332 &rvt[curvol].fulldevnam[1], curvol); 14333 } 14334 put_disp();,14335 headers=0; !14336 previous = 0;p=14337 /* Phase 1 : Read and parse INDEXF.SYS */eF14338 /* Create dynamic array. each entry = 20 bytes. */14339 P14340 page_cnt = 1 + (rvt[curvol].if_size*sizeof(struct _da))/512;,14341 rvt[curvol].addr[0] = 0;114342 rvt[curvol].bmap_addr[0] = 0;,L14343 status = SYS$EXPREG(page_cnt, &rvt[curvol].addr[0],0,0);)14344 if ((status &1) != 1)d14345 { 414346 singlemsg(DFU_EXPREG,status); !14347 cleanup(); %14348 return(status);n14349 },+14350 clean_flags.expreg = 1;e`14351 dyn_array = (struct _da *) rvt[curvol].addr[0]; /* Setup pointer to array */14352 [14353 /* Read in index file bitmap, and return free hdrs + highest bit set */%214354 read_indexf_bitmap(&free_hdr);14355 /14356 status = get_next_header(); :14357 if ((status & 1) != 1) return(status);V14358 while (! ctx.end) /* Loop until end of INDEXF or CTRL C entered */14359 { $14360 hdr = ctx.hdr;"14361 id = ctx.id;214362 status = verify_header(hdr);@14363 if (status != SS$_NORMAL) goto next_file; 914364 /* Setup fields in dynamic array */ L14365 (dyn_array+headers)->fid[0] = hdr->fid_overlay.fid[0];L14366 (dyn_array+headers)->fid[1] = hdr->fid_overlay.fid[1];L14367 (dyn_array+headers)->fid[2] = hdr->fid_overlay.fid[2];R14368 bakfid = hdr->bk_fid_overlay.bk_fid_fields.bk_fid_nmx << 16;M14369 bakfid += hdr->bk_fid_overlay.bk_fid_fields.bk_fid_num;I;14370 (dyn_array+headers)->bakfid = bakfid;0614371 (dyn_array+headers)->a_size = 0;614372 (dyn_array+headers)->f_link = 0;L14373 a_size = hdr->hiblk_overlay.hiblk_fields.hiblkh << 16;G14374 a_size += hdr->hiblk_overlay.hiblk_fields.hiblkl; ;14375 (dyn_array+headers)->a_size = a_size; 14376 =14377 /* We have a valid header, proceed...*/iW14378 if (hdr->seg_num !=0) goto next_file; /* Skip extension header */n dDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 66 kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (11)F14379 714380 /* Check marked for delete bit */.[14381 if ((hdr->filechar & FH2$M_MARKDEL) == FH2$M_MARKDEL) goto next_file;a14382 ?14383 /* Use bit 4 as a valid file indicator */ S14384 (dyn_array+headers)->bitje = (dyn_array+headers)->bitje | 16;414385 M14386 /* Check if this is a directory and if yes set bit 2 */O14387 if ((hdr->filechar & FH2$M_DIRECTORY) == FH2$M_DIRECTORY) 14388 { [14389 if ((hdr->filechar & FH2$M_CONTIG) != FH2$M_CONTIG) goto next_file;iZ14390 if ((hdr->rattrib & FAT$M_NOSPAN) != FAT$M_NOSPAN) goto next_file;914391 memcpy(&name[0],id->filename,20);3Q14392 if (name[19] != ' ') memcpy(&name[20],id->filenamext,66);tH14393 if (strstr(name,".DIR;1") == 0) goto next_file; 214394 /* Fill in forward link */Q14395 if (previous !=0) (dyn_array+previous)->f_link = headers;4+14396 previous = headers;T14397 (dyn_array+headers)->bitje = (dyn_array+headers)->bitje | 4;"14398 dir_cnt++;14399 } '14400 /* Next header */ 14401 next_file: )114402 status = get_next_header(); <14403 if ((status & 1) != 1) return(status);14404 } 14405 }i)14406 /* Save array bounds */ 614407 dyn_array->fid[0] = headers % 65536;614408 dyn_array->fid[1] = headers / 65536;!14409 if (ctrlc == 1) 14410 { #14411 ctx.end = TRUE;t14412 } 14413 else14414 { 14415 curvol++; 614416 ctx.end = FALSE; /* Next volume */114417 if (clean_flags.events == 1) 14418 { R14419 for (i=1; i <= iocnt ; i++) status = lib$free_ef(&efn[i-1]);-14420 clean_flags.events = 0; 14421 } *14422 if (curvol <= maxvol) 14423 { *14424 sprintf(outbuf," ");!14425 put_disp();o14426 } 14427 } 14428 }t14429 curvol = 1;I214430 /* Now scan all the directories */K14431 sprintf(outbuf," Progress : 100%% Status : READY");m14432 put_status(1);14433 if (ctrlc !=1) 14434 { O14435 sprintf(outbuf,"%%DFU-I-DIRSCAN, Scanning %d directories...",  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 67ekV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (11)814436 dir_cnt);r14437 put_disp(); 14438 }tR14439 /* First close the channels as we need them in SCAN_DIRECTORIES */-14440 for (i = 1; i <= maxvol; i++)iQ14441 status = SYS$QIOW(0,rvt[i].channel,IO$_DEACCESS,&iostat[iocnt], $14442 0,0,0,0,0,0,0,0); .14443 /* Now scan the directories */!14444 maxdir = dir_cnt;914445 dir_cnt = 0;-14446 for (i = 1; i <= maxvol; i++)!14447 if (ctrlc !=1) l\14448 dir_cnt += scan_directories(&rvt[0] , i, dir_cnt, maxdir, matoutput, 0);K14449 sprintf(outbuf," Progress : 100%% Status : READY"); 14450 put_status(1);14451 %14452 sprintf(outbuf," "); 14453 put_disp();0+14454 if (ctrlc == 1) do_abort();0Q14455 sprintf(outbuf,"%%DFU-S-DONE, Directories scanned : %d",dir_cnt); 14456 put_disp();=14457 cleanup(); 14458 return(1);14459 }.14460  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 68 kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (12)  L14461 int parse_item(char *inp, struct dsc$descriptor *return_descr,414462 int *convert, Boolean *flag, int typ) =14463 /* Check presence of parameter in command linev:14464 Called to verify all command qualifiers14465 Outputs :)14466 result string and length*14467 flag set to true or falseP14468 value converted to integer in *convert if typ indicates integer14469 */14470 14471 { &14472 int stat, i, j, x, *y;;14473 static char item[80], uic_s[30], uic_x[30]; #14474 struct _flist *tmp; %14475 struct _quad *tmpdat;i14476 char date[23];/14477 $DESCRIPTOR(item_descr , item); /14478 $DESCRIPTOR(uic_descr , uic_s);[14479 !14480 strcpy(item,inp);4714481 item_descr.dsc$w_length = strlen(item); <14482 *flag = FALSE; /* Assume item not present */14483 114484 stat = CLI$PRESENT(&item_descr); .F14485 if ((stat == CLI$_PRESENT ) || (stat == CLI$_NEGATED))14486 { 14487 *flag = TRUE; 14488 switch(typ)314489 { /14490 case 0 : /* Get the string */ B14491 stat = CLI$GET_VALUE(&item_descr,return_descr,114492 &return_descr->dsc$w_length);b714493 if ((stat & 1) != 1) return(stat); 114494 break;314495 case 1 : /* Convert to integer */.!14496 *convert = 0;v514497 return_descr->dsc$w_length = 80; sB14498 stat = CLI$GET_VALUE(&item_descr,return_descr,114499 &return_descr->dsc$w_length);714500 if ((stat & 1) != 1) return(stat); 4B14501 *convert = atoi(return_descr->dsc$a_pointer); &14502 if (*convert < 0) 14503 { [14504 sprintf(outbuf,"%%DFU-E-PARSEERR, Value must be a positive integer");r"14505 put_disp(); $14506 *flag = FALSE; 14507 return(0);14508 } 14509 break; p814510 case 2 : /* Only check the presence */14511 break;G14512 case 3 : /* List processing for /file and /exclude */ 514513 tmp = (struct _flist *)convert; 914514 /* convert used as address to list */dO14515 y = (int *) return_descr->dsc$a_pointer; /* list counter */v14516 *y = 0;  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 69 kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (12)dF14517 return_descr->dsc$a_pointer = (char *) &tmp->name;H14518 stat = CLI$GET_VALUE(&item_descr, return_descr, &i);"14519 tmp->flen = i;/14520 while (stat != CLI$_ABSENT)r14521 { 514522 x = strindex(tmp->name,";",86);i#14523 if (x == -1) d14524 { 714525 x = strindex(tmp->name," ",86); 514526 memset(&tmp->name[x],'\0',1);i014527 strcat(tmp->name,";*"); '14528 tmp->flen += 2;i14529 } 14530 else z214531 if (tmp->name[x+1] == ' ')14532 { :14533 memset(&tmp->name[x+1],'*',1) ; )14534 tmp->flen += 1;14535 } "14536 *y = *y + 1;+14537 tmp++; /* next item*/0H14538 return_descr->dsc$a_pointer = (char *) &tmp->name;J14539 stat = CLI$GET_VALUE(&item_descr, return_descr, &i);$14540 tmp->flen = i;14541 }.=14542 return_descr->dsc$a_pointer = (char *) y;F14543 break;514544 case 4: /* Date and time options */aA14545 return_descr->dsc$a_pointer = (char *) &date;e414546 return_descr->dsc$w_length = 23;614547 tmpdat = (struct _quad *) convert;-14548 if (stat == CLI$_NEGATED) 14549 { *14550 tmpdat->date[0] = 0;*14551 tmpdat->date[1] = 0;14552 }r14553 else14554 { E14555 stat = CLI$GET_VALUE(&item_descr,return_descr, S314556 &return_descr->dsc$w_length);&914557 if ((stat & 1) != 1) return(stat); eH14558 stat = SYS$BINTIM(return_descr, &tmpdat->date[0]);14559 };14560 break;014561 case 5 : /* Bit set options */R14562 y = (int *) return_descr->dsc$a_pointer; /* Characteristics */'14563 *y = *y | *convert;e14564 break;,14565 case 6 : /* UIC parsing */14566 j = 0;A14567 stat = CLI$GET_VALUE(&item_descr, &uic_descr, -14568 &uic_descr.dsc$w_length);l,14569 if (stat != CLI$_ABSENT)14570 { 914571 status = parse_uic(&uic_descr, &j); ;14572 if ((status &1) != 1) return(status); 14573 }  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 701kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (12)14574 else j = 0; !14575 *convert = j; 14576 break;114577 case 7 : /* Check if negated */s!14578 *convert = 0;4<14579 if (stat == CLI$_NEGATED) *convert = -1;14580 break;14581 }l14582 return(1);14583 } 14584 else return(1); 14585 } 14586  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 71kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (13)b .14587 void fid_to_name(char * ret_dir)14588 /* 3F14589 Get the filename from the file-id or the file header +14590 Implicit input : ctx blockc014591 V2.2 : fixed volume set problem14592 */14593 { 14594 Boolean error;/14595 struct header_area_struct *hdr; -14596 struct ident_area_struct *id; F14597 static struct fibdef fib; /* File information block */14598 struct { _14599 int fiblen; )14600 struct fibdef *fibadr; s14601 } 14602 fibdescr; $14603 int x, bakfid, rrvn;$14604 char name[86], *tmp;14605 !14606 /* Fill in FIB */ .14607 fibdescr.fiblen = sizeof(fib);'14608 fibdescr.fibadr = &fib; 14609 14610 error = FALSE;14611 hdr = ctx.hdr;L14612 bakfid = hdr->bk_fid_overlay.bk_fid_fields.bk_fid_nmx << 16;G14613 bakfid += hdr->bk_fid_overlay.bk_fid_fields.bk_fid_num;;D14614 rrvn = hdr->bk_fid_overlay.bk_fid_fields.bk_fid_rvn;-14615 if (rrvn == 0) rrvn = curvol; "14616 if (bakfid == 0 ) (14617 /* invalid backlink */14618 error = TRUE; A14619 else /* Get the full file name via an ACP call */r14620 { S14621 copy_fid(&fib.fib$w_fid[0], &hdr->fid_overlay.fid_fields.fid_num, 14622 TRUE);'14623 fib.fib$w_did[0] = 0; '14624 fib.fib$w_did[1] = 0; '14625 fib.fib$w_did[2] = 0;.&14626 fib.fib$w_nmctl = 0;&14627 fib.fib$l_acctl = 0;E14628 status = SYS$QIOW(0,rvt[curvol].channel,IO$_ACCESS, =14629 &iostat[iocnt],0,0,&fibdescr,0,0,0,&acb,0);rG14630 if ((status & 1) == 1) status = iostat[iocnt].iosb_1; '14631 if ((status & 1) !=1)m14632 { !14633 error = TRUE;f214634 /* singlemsg(0,status); */14635 }l14636 else 614637 { 914638 x = strindex(&dirrec.dirnam,"[",198);eQ14639 /* Make sure we use the correct device name on voluem sets */ %14640 if (bakfid == 4) j@14641 strcpy(ret_dir,&rvt[rrvn].fulldevnam[1]); @14642 else strcpy(ret_dir,&rvt[1].fulldevnam[1]);  uDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 72 kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (13)lC14643 if (x != -1) strcat(ret_dir,&dirrec.dirnam[x]);/14644 } 14645 }P14646 if (error)14647 { 14648 id = ctx.id;314649 memcpy(&name[0],id->filename,20); K14650 if (name[19] != ' ') memcpy(&name[20],id->filenamext,66); 314651 tmp = (char *) strstr(&name," "); ,14652 if (tmp != NULL) *tmp = 0;(14653 strcpy(ret_dir,"[]"); (14654 strcat(ret_dir,name); 114655 strcpy(dirrec.dirnam,ret_dir); <14656 dirrec.lendir = strindex(ret_dir," ",200);14657 } 14658 }v14659  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 73_kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (14)t L14660 int open_device(struct dsc$descriptor *device_descr, int flag)/14661 /* Open the device or volume set.F14662 Outputs :814663 All fields in RVT (relative volume table).14664 Flags : 0 -> process volume setI14665 1 -> process volume set and lock the volumes on LOCK_CHAN;G14666 2 -> ignore volume set processing (INDEXF command only) '14667 V2.4: Flush extent cache:14668 */14669 14670 {114671 register int i;iI14672 static struct fibdef if_fib; /* File information block */d14673 struct { i14674 int fiblen; )14675 struct fibdef *fibadr; 14676 } 14677 fibdescr; *14678 struct _it3 item_list[10];N14679 int bytes, stat, devclass, devchar, func_code, efblk, volnum, !14680 devtype, acptype; 714681 struct header_area_struct *hdr_area; 14682 !14683 /* Fill in FIB */)514684 fibdescr.fiblen = 10; /* Short FIB */&14685 +14686 fibdescr.fibadr = &if_fib; @14687 if_fib.fib$l_acctl = FIB$M_WRITE | FIB$M_NOLOCK;(14688 if_fib.fib$w_fid[0] = 1;(14689 if_fib.fib$w_fid[1] = 1;(14690 if_fib.fib$w_fid[2] = 0;14691 maxvol = 0; 14692 curvol = 1;8*14693 strcpy(rvt[1].devnam," ");14694 014695 /* Set up itemlist for GETDVI */D14696 add_item(&item_list[0].buflen, 64, DVI$_ROOTDEVNAM, 414697 &rvt[1].devnam, &rvt[1].devnam_len);N14698 add_item(&item_list[1].buflen,4, DVI$_VOLCOUNT, &volcount, 0);O14699 add_item(&item_list[2].buflen,4, DVI$_VOLNUMBER, &orig_rvn, 0);4N14700 add_item(&item_list[3].buflen,4, DVI$_DEVCLASS, &devclass, 0);L14701 add_item(&item_list[4].buflen,4, DVI$_DEVCHAR, &devchar, 0);V14702 add_item(&item_list[5].buflen,4, DVI$_MAXBLOCK, &rvt[1].maxblocks, 0);L14703 add_item(&item_list[6].buflen,4, DVI$_DEVTYPE, &devtype, 0);A14704 add_item(&item_list[7].buflen,64,DVI$_FULLDEVNAM, <14705 &rvt[1].fulldevnam, &rvt[1].fulldevnam_len);K14706 add_item(&item_list[8].buflen,4,DVI$_ACPTYPE, &acptype, 0);e714707 add_item(&item_list[9].buflen,0,0,0,0);14708 Q14709 stat = SYS$GETDVIW(0,0,device_descr,&item_list,&iostat[0],0,0,0);D>14710 if ((stat & 1) == 1) stat = iostat[0].iosb_1; %14711 if ((stat & 1) != 1) a14712 { $14713 singlemsg(0,stat);14714 return(stat); 14715 }t CDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 74!kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (14) /14716 /* Now check for some errors */ 814717 if ((devchar & DEV$M_MNT) != DEV$M_MNT) 14718 { [14719 sprintf(outbuf,"%%DFU-E-NOTMNT, Device is not mounted or not available"); 14720 put_disp(); (14721 return(SS$_NOSUCHDEV);14722 }4*14723 if (devclass != DC$_DISK) 14724 { P14725 sprintf(outbuf,"%%DFU-E-NODISK, Device is not a disk device");14726 put_disp(); (14727 return(SS$_NOSUCHDEV);14728 })/14729 if (acptype != DVI$C_ACP_F11V2)e14730 { \14731 sprintf(outbuf,"%%DFU-E-NOTF11, Device does not have an ODS2 filesystem");14732 put_disp();.(14733 return(SS$_NOSUCHDEV);14734 } ,14735 if (flag == 2) volcount = 1;"14736 if (volcount > 32)14737 { X14738 sprintf(outbuf,"%%DFU-F-TOOMANYVOL, DFU does not allow > 32 volumes");14739 put_disp();t(14740 return(SS$_NOSUCHDEV);14741 } 14742 ;14743 /* So we have a valid device, proceed... */ 14744 I14745 if ((devtype == 34) || (devtype == 53) || (devtype ==72))r%14746 rvt[1].slow = TRUE; J14747 else rvt[1].slow = FALSE; /* Decide if we have a CD ROM */[14748 if ((devchar & DEV$M_SWL) == DEV$M_SWL) /* We have a write locked device */ 14749 { 414750 if_fib.fib$l_acctl = FIB$M_NOLOCK;$14751 rvt[1].wlk = TRUE;14752 } (14753 else rvt[1].wlk = FALSE; 14754 maxvol=volcount;S14755 if (volcount > 1) /* Use root device name in case of volume set */ 14756 { F14757 strcpy(device_descr->dsc$a_pointer , rvt[1].devnam);A14758 device_descr->dsc$w_length = rvt[1].devnam_len;414759 }tF14760 else /* Reset original name entered on command line */14761 { G14762 strncpy(rvt[1].devnam , device_descr->dsc$a_pointer, .14763 device_descr->dsc$w_length);A14764 rvt[1].devnam_len = device_descr->dsc$w_length;r14765 } 14766 V14767 /* Make sure we have the correct maxblocks for the root device name */614768 if ((volcount > 1) && (orig_rvn != 1))14769 { Y14770 add_item(&item_list[0].buflen, 4, DVI$_MAXBLOCK, &rvt[1].maxblocks, 0);hE14771 add_item(&item_list[1].buflen, 64,DVI$_FULLDEVNAM, f>14772 &rvt[1].fulldevnam, &rvt[1].fulldevnam_len); DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 75 kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (14) 914773 add_item(&item_list[2].buflen,0,0,0,0);414774 S14775 stat = SYS$GETDVIW(0,0,device_descr,&item_list,&iostat[0],0,0,0); @14776 if ((stat & 1) == 1) stat = iostat[0].iosb_1; '14777 if ((stat & 1) != 1) 14778 { &14779 singlemsg(0,stat);!14780 return(stat);t14781 } 14782 } (14783 714784 /* Lock volume if requested (flag=1) */&14785 lock_chan = 0;814786 if ((flag ==1) && (rvt[1].wlk == FALSE))14787 { B14788 stat = SYS$ASSIGN(device_descr, &lock_chan,0,0);'14789 if ((stat & 1) != 1) 14790 { 014791 singlemsg(DFU_ASSIGN,stat); 14792 cleanup(); 3"14793 return(stat); 14794 }4214795 stat = flush_cache(lock_chan,1);614796 if_fib.fib$w_exctl = FIB$C_LOCK_VOL;414797 fibdescr.fiblen = sizeof(if_fib); H14798 stat = SYS$QIOW(0,lock_chan,IO$_ACPCONTROL,&iostat[0],+14799 0,0,&fibdescr,0,0,0,0,0); )14800 if_fib.fib$w_exctl = 0;A714801 fibdescr.fiblen = 10; /* Short FIB */a14802 ?14803 if ((stat & 1) == 1) stat = iostat[0].iosb_1;9'14804 if ((stat & 1) != 1) 414805 { M14806 sprintf(outbuf,"%%DFU-E-LOCKERR, Error locking volume,"); 14807 put_disp(); &14808 singlemsg(0,stat);14809 cleanup(); !14810 return(stat);14811 }(L14812 sprintf(outbuf,"%%DFU-W-LOCKED, Volume now write locked");14813 put_disp();14814 }f14815 <14816 /* Now loop for all members in volume set */514817 func_code = IO$_ACCESS | IO$M_ACCESS;y14818 i=1; ;+14819 if (maxvol ==0) maxvol = 1;x$14820 while (i <= maxvol) 14821 {Q14822 rvt[i].i_open = 0; /* First assign a channel for this volume */ F14823 stat = SYS$ASSIGN(device_descr,&rvt[i].channel,0,0);'14824 if ((stat & 1) != 1) 14825 { '14826 rvt[i].maxblocks=0;t014827 singlemsg(DFU_ASSIGN,stat); 14828 cleanup();"14829 return(stat);  hDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 76:kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (14) 14830 }u714831 stat = flush_cache(rvt[i].channel,0);V+14832 clean_flags.channels = 1;4%14833 rvt[i])xY~ DFU024.BCK{[DFU024.LIS]DFU_IFSCAN.LIS;3?p.i_open = 1; )14834 rvt[i].vbn_file_1 = 0; tJ14835 if (flag !=2) if_fib.fib$w_fid[2] = i; /* Fill in RVN */614836 else if_fib.fib$w_fid[2] = orig_rvn;14837 214838 /* Open the file on ACP level */=14839 stat = SYS$QIOW(0,rvt[i].channel,func_code, 614840 &iostat[0],0,0,&fibdescr,0,0,0,0,0);@14841 if ((stat & 1) == 1) stat = iostat[0].iosb_1; '14842 if ((stat & 1) != 1) 14843 { 114844 singlemsg(DFU_INDEXERR,stat);s14845 cleanup(); !14846 return(stat);d14847 };14848 614849 /* Read in the home block (VBN 2) */@14850 stat = SYS$QIOW(0,rvt[i].channel,IO$_READVBLK,714851 &iostat[0],0,0,&home[i],512,2,0,0,0);@14852 if ((stat & 1) == 1) stat = iostat[0].iosb_1; '14853 if ((stat & 1) != 1) 914854 { &14855 singlemsg(0,stat);14856 cleanup();!14857 return(stat); 14858 }tM14859 if (home[i].struclev_overlay.strucver_fields.struclev != 2),*14860 { /* Not an ODS2 disk */P14861 sprintf(outbuf,"%%DFU-NOTODS2, Device is not an ODS2 disk"); 14862 put_disp(); 14863 cleanup();14864 return(1);14865 }DH14866 /* read in Indexf.Sys header, we need the file size */K14867 rvt[i].vbn_file_1 = home[i].ibmapvbn + home[i].ibmapsize;[A14868 stat = SYS$QIOW(0,rvt[i].channel, IO$_READVBLK,&D14869 &iostat[0],0,0,block,512,rvt[i].vbn_file_1,0,0,0);@14870 if ((stat & 1) == 1) stat = iostat[0].iosb_1; '14871 if ((stat & 1) != 1) )14872 { &14873 singlemsg(0,stat);14874 cleanup();!14875 return(stat);,14876 },E14877 hdr_area = (struct header_area_struct *) &block[0]; L14878 efblk = hdr_area->efblk_overlay.efblk_fields.efblkh << 16;G14879 efblk += hdr_area->efblk_overlay.efblk_fields.efblkl;t=14880 rvt[i].if_size = efblk - rvt[i].vbn_file_1; 14881 i++;;14882 if (i <= maxvol) /*Next volume in set */ 14883 { H14884 add_item(&item_list[0].buflen, 64, DVI$_NEXTDEVNAM, 814885 &rvt[0].devnam, &rvt[0].devnam_len);<14886 add_item(&item_list[1].buflen, 0,0,0,0); DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 77 kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (14)4U14887 stat = SYS$GETDVIW(0,0,device_descr,&item_list,&iostat[0],0,0,0);dC14888 device_descr->dsc$w_length = rvt[0].devnam_len;$H14889 strcpy(device_descr->dsc$a_pointer , rvt[0].devnam);14890 E14891 /* Get actual volume number and maximum blocks */dR14892 add_item(&item_list[0].buflen, 4, DVI$_VOLNUMBER, &volnum, 0);[14893 add_item(&item_list[1].buflen, 4, DVI$_MAXBLOCK, &rvt[0].maxblocks, 0);4Q14894 add_item(&item_list[2].buflen, 4, DVI$_DEVCHAR, &devchar, 0);bG14895 add_item(&item_list[3].buflen,64, DVI$_FULLDEVNAM, @14896 &rvt[i].fulldevnam, &rvt[i].fulldevnam_len);;14897 add_item(&item_list[4].buflen,0,0,0,0); 14898 U14899 stat = SYS$GETDVIW(0,0,device_descr,&item_list,&iostat[0],0,0,0); B14900 if ((stat & 1) == 1) stat = iostat[0].iosb_1; )14901 if ((stat & 1) != 1) f14902 { b14903 sprintf(outbuf,"%%DFU-E-NOVOLSET, One ore more volume set members missing");"14904 put_disp(); 14905 cleanup();#14906 return(stat);514907 } 14908 i=volnum; 814909 rvt[i].maxblocks = rvt[0].maxblocks;<14910 if ((devchar & DEV$M_SWL) == DEV$M_SWL) 14911 { )14912 rvt[i].wlk = TRUE; p14913 };14914 else14915 { *14916 rvt[i].wlk = FALSE; 14917 }e:14918 rvt[i].devnam_len = rvt[0].devnam_len;N14919 strncpy(rvt[i].devnam , rvt[0].devnam, rvt[0].devnam_len);14920 }e14921 }h14922 14923 return(1);14924 }_14925  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 78(kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (15)V 414926 void read_indexf_bitmap(int *free_hdr)14927 /*+14928 Read in Indexf.Sys Bitmap..414929 Return: Free Headers in this bitmapJ14930 Highest bit set in this bitmap. This functions as;14931 a kind of logical EOF for the INDEXF.SYS. 14932 */14933 { "14934 register int i, j;14935 char size;114936 int k, endi, bitval, find, bytes;)'14937 unsigned long int stat;t14938 Boolean found;14939 514940 bytes = 512 * home[curvol].ibmapsize;sN14941 stat = SYS$QIOW(0,rvt[curvol].channel,IO$_READVBLK,&iostat[0],B14942 0,0,&bitmap[1],bytes,home[curvol].ibmapvbn,0,0,0);[14943 endi = 1+rvt[curvol].if_size/4096; /* Maximum # of blocks used in bitmap */ 14944 *free_hdr = 0;:14945 for (i=1; i <= endi; i++) /* All blocks */I14946 for (j=1; j <= 128; j++) /* All longwords in block i */ 14947 { 14948 bitval=0; 14949 size=32;W14950 while (bitval < 32) /* Search for clear bits in this longword */ 14951 { T14952 stat = lib$ffc(&bitval,&size,&bitmap[i].block[(j-1)*4],&find);.14953 if (stat != LIB$_NOTFOU)14954 { _214955 *free_hdr = *free_hdr + 1;*14956 bitval = find + 1;+14957 size = 32 - bitval; 14958 },14959 else =14960 bitval = 32; /* No free bits found */014961 }014962 } 14963 K14964 /* Now subtract all bits in the bitmap which cannot be used)<14965 because INDEXF.SYS is not large enough */14966 J14967 *free_hdr = *free_hdr - (endi*4096 - rvt[curvol].if_size);14968 N14969 /* We calculate the highest bit set in the bitmap. This is an K14970 artificial way to detect the highest used file header ineA14971 INDEXF.SYS so we can limit the search time */ 14972 found = FALSE;214973 i = endi; /* Search backwards ! */14974 j = 512;14975 highbit = 0; 414976 size = 1; 14977 while (!found) =114978 if (bitmap[i].block[j-1] == 0) 14979 { 14980 j--; /14981 if (j==0) {  uDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 79 kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (15) 14982 i--; 14983 j = 512;&14984 } /* Next Block */?14985 if (i==0) found = TRUE; /* End of bitmap */014986 }e14987 else14988 { 914989 k = 31; /* Scan longword backwards */C"14990 while (!found)J14991 if (lib$extzv(&k,&size,&bitmap[i].block[j-1]) == 1) 14992 { %14993 found = TRUE;14994 }v14995 else14996 { 14997 k--; 014998 if (k==0) found = TRUE; 14999 } 15000 } 715001 highbit = (i-1)*4096 + (j-1)*8 + k + 1;=?15002 iosize = (highbit < 1500) ? (highbit/3) : 500; [.15003 if (rvt[1].slow) iosize = 125;15004 } )15005  oDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 80 kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (16)  %15006 int read_indexf_multi() >15007 /* Read IOSIZE file headers with IOCNT threads. <15008 Return VBN where next READ IO should resume15009 */15010 {t15011 int i,stat; 15012 M15013 vbn = rvt[curvol].vbn_file_1; /* First file header is here */ C15014 for (i=1; i<=iocnt; i++) /* Fire off 2 QIO's */ 15015 { /15016 stat = lib$get_ef(&efn[i-1]);i'15017 if ((stat & 1) != 1) 15018 { O15019 sprintf(outbuf,"%%DFU-E-GETEF, Error getting event flag,");; 15020 put_disp(); &15021 singlemsg(0,stat);!15022 return(stat); 15023 } -15024 /* Read 500 file headers */hK15025 stat = SYS$QIO(efn[i-1],rvt[curvol].channel,IO$_READVBLK,[;15026 &iostat[i-1],0,0,&header[(i-1)*iosize+1],a*15027 (iosize*512),vbn,0,0,0);'15028 if ((stat & 1) != 1) 015029 { .15030 singlemsg(DFU_IOERR,stat);!15031 return(stat);!15032 } 115033 if (i != iocnt) vbn += iosize ;715034 }a15035 return(1);15036 } 15037  7DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 81bkV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (17)] #15038 int get_next_header() 15039 /*C15040 This routine is responsible for returning the next K15041 file header to the calling procedure . The context is keptD15042 in the ctx context block, so we do not need to pass15043 any arguments.f15044 */15045 { &15046 unsigned int progress;15047 =15048 if (ctx.i == -1) /*start of I/O processing */115049 { 15050 ctx.i = 0;>15051 /* Fire off the first 2 asynchrouous IO's */15052 progress = 0;W#15053 if (progress_ind)015054 { \15055 sprintf(outbuf," Progress : %3d%% Status : Scanning INDEXF.SYS",15056 progress);"15057 put_status(1);15058 } 15059 headers=0;315060 status = read_indexf_multi(&vbn);f)15061 if ((status & 1) != 1) 15062 { 15063 cleanup(); X$15064 return(status); 15065 }m!15066 ctx.thread = 1;H)15067 clean_flags.events = 1;_V15068 status = SYS$WAITFR(efn[ctx.thread-1]); /* Wait for IO completion */715069 status = iostat[ctx.thread-1].iosb_1;&)15070 if ((status & 1) != 1) 015071 if (status != SS$_ENDOFFILE)15072 { 15073 cleanup();&15074 return(status); 15075 } 915076 ctx.starti = (ctx.thread-1)*iosize + 1;0N15077 ctx.endi = iostat[ctx.thread-1].length/512 + ctx.starti - 1;)15078 ctx.i = ctx.starti - 1;i15079 } -15080 /* now get the next header */u15081 { 15082 headers++; -15083 if ((headers % 65536) ==0) l15084 { 15085 headers++; h15086 (ctx.i)++;15087 } 15088 (ctx.i)++; wA15089 if (ctx.i > ctx.endi) /* Next IOSIZE headers */115090 { 215091 if (ctrlc ==1) ctx.end = TRUE;S15092 if (iostat[ctx.thread-1].length < (iosize*512)) ctx.end = TRUE; O15093 if (vbn > (rvt[curvol].if_size+rvt[curvol].vbn_file_1 -1))  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 82 kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (17)0%15094 ctx.end = TRUE; H15095 if (ctx.end == FALSE) /* Read next IOSIZE headers */15096 { $15097 vbn += iosize;Z15098 status = SYS$QIO(efn[ctx.thread-1],rvt[curvol].channel,IO$_READVBLK,Q15099 &iostat[ctx.thread-1],0,0,&header[(ctx.thread-1)*iosize+1],T.15100 (iosize*512),vbn,0,0,0);-15101 if ((status & 1) != 1) /15102 { 515103 singlemsg(DFU_IOERR,status); ;"15104 cleanup();'15105 return(status);d15106 } &15107 (ctx.thread)++; =15108 if (ctx.thread > iocnt) ctx.thread = 1; 15109 }(P15110 if (!(ctx.end)) /* Wait for IO completion for this thread */15111 { Z15112 status = SYS$WAITFR(efn[ctx.thread-1]); /* Wait for IO completion */;15113 status = iostat[ctx.thread-1].iosb_1;o-15114 if ((status & 1) != 1) 415115 if (status != SS$_ENDOFFILE)15116 { %15117 cleanup(); )15118 ctx.end = TRUE; *15119 return(status); 15120 }d=15121 ctx.starti = (ctx.thread-1)*iosize + 1;fR15122 ctx.endi = iostat[ctx.thread-1].length/512 + ctx.starti - 1;)15123 ctx.i = ctx.starti;15124 } %15125 if (progress_ind) 15126 { 915127 progress = (100*headers / highbit); ^15128 sprintf(outbuf," Progress : %3d%% Status : Scanning INDEXF.SYS", 15129 progress);$15130 put_status(1);15131 } 15132 }i"15133 if (ctrlc == 1) 15134 { $15135 ctx.end = TRUE; 15136 return(1);15137 }eW15138 if (headers > highbit) /* Do not proceed further than this */t15139 { #15140 ctx.end = TRUE; 15141 return(1);15142 }lI15143 ctx.hdr = (struct header_area_struct *) &header[ctx.i]; 815144 ctx.id = (struct ident_area_struct *) B15145 &header[ctx.i].block[2*((ctx.hdr)->idoffset)];15146 }415147 return(1);15148 } 15149  4DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 83kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (18)0 15150 void cleanup()15151 /*;15152 Various cleanup actions depending on flagsC15153 */15154 {-15155 int i, stat;#15156 void dfu_handler(); 15157 ,15158 if (clean_flags.fopen == 1) 15159 { $15160 stat = fclose(fp);15161 } 15162 +15163 if (clean_flags.sort == 1) C15164 { (15165 stat = sor$end_sort();15166 }e15167 -15168 if (clean_flags.events == 1) .15169 for (i=1; i <= iocnt ; i++) 15170 { 215171 stat = lib$free_ef(&efn[i-1]);15172 } 15173 .15174 if (clean_flags.channels == 1)-15175 for (i=1; i <=maxvol ; i++) 15176 { Q15177 stat = SYS$QIOW(0,rvt[i].channel,IO$_DEACCESS,&iostat[iocnt],0&15178 0,0,0,0,0,0,0,0); 615179 stat = SYS$DASSGN(rvt[i].channel);'15180 rvt[i].channel = 0; +15181 if (rvt[i].bchan != 0) E15182 { Q15183 stat = SYS$QIOW(0,rvt[i].bchan,IO$_DEACCESS,&iostat[iocnt], (15184 0,0,0,0,0,0,0,0); 615185 stat = SYS$DASSGN(rvt[i].bchan);(15186 rvt[i].bchan = 0; 15187 }s(15188 if (lock_chan != 0) 15189 { $15190 dfu_handler();115191 stat = SYS$CANEXH(&desblk); 15192 }l15193 }t15194 ,15195 if (clean_flags.expreg == 1)-15196 for (i=1; i <=maxvol ; i++) 15197 { -15198 if (rvt[i].addr[0] != 0) M15199 stat = SYS$DELTVA(&rvt[i].addr[0], &rvt[i].addr[0], 0);u215200 if (rvt[i].bmap_addr[0] != 0) W15201 stat = SYS$DELTVA(&rvt[i].bmap_addr[0], &rvt[i].bmap_addr[0], 0); 15202 }515203 } 15204  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 84[kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (19)  U15205 void copy_fid(struct f_id *target,struct f_id *from, Boolean check_rvn)u15206 /*?15207 Procedure to copy FID's from one structure to7B15208 another. If check_rvn is true the rvn field will?15209 be filled with the value of CURVOL if it is 0 15210 */15211 {1=15212 struct f_id *p1,*p2; /* Two dummy pointers */ 15213 15214 p1 = target;15215 p2 = from;*15216 p1->fid_num = p2->fid_num;*15217 p1->fid_seq = p2->fid_seq;*15218 p1->fid_nmx = p2->fid_nmx;*15219 p1->fid_rvn = p2->fid_rvn;15220 if (check_rvn)<15221 if (p1->fid_rvn ==0) p1->fid_rvn = curvol;15222 }l15223  eDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 85 kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (20). A15224 int verify_header (struct header_area_struct *fh2) 15225 /*D15226 Validate if a file header is valid. See File SystemE15227 Internals for the definition of a valid file header. C15228 Warning : does not check the file headers checksum_15229 */15230 {5615231 int highwater = 76; /* from $FH2DEF */H15232 if (fh2->struclev_overlay.struclev_fields.struclev != 2)*15233 return (SS$_BADFILEHDR);G15234 if (fh2->struclev_overlay.struclev_fields.strucver < 1) *15235 return (SS$_BADFILEHDR);K15236 if (fh2->idoffset < (highwater/2)) return (SS$_BADFILEHDR);hL15237 if (fh2->idoffset > fh2->mpoffset ) return (SS$_BADFILEHDR);L15238 if (fh2->mpoffset > fh2->acoffset ) return (SS$_BADFILEHDR);L15239 if (fh2->acoffset > fh2->rsoffset ) return (SS$_BADFILEHDR);^15240 if (fh2->map_inuse > (fh2->acoffset - fh2->mpoffset)) return (SS$_BADFILEHDR);V15241 if (fh2->fid_overlay.fid_fields.fid_num == 0) return (SS$_BADFILEHDR);V15242 if (fh2->fid_overlay.fid_fields.fid_seq == 0) return (SS$_BADFILEHDR);$15243 return (SS$_NORMAL);15244 }*15245  DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 86+kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (21)  W15246 void get_map_pointers(struct header_area_struct *hdr, unsigned int *ptrs)c15247 /*915248 Count retrieval pointers in file header *E15249 Do not count a placement pointer a s a real pointer i15250 */15251 { @15252 unsigned int i, format, offset, map_bytes, size;15253 struct _hd { .15254 unsigned short block[256] ; 15255 } 15256 *head;15257 c15258 head = (struct _hd *) hdr; /* We can now view the header as a 256 word strcuture */ +15259 offset = hdr->mpoffset ;d+15260 map_bytes = hdr->map_inuse; 15261 size = 0;915262 *ptrs = 0;:15263 for (i = offset; i < offset + map_bytes;) 15264 { 015265 format = head->block[i] >> 14;15266 (*ptrs)++;#15267 switch (format) { 15268 case 0: 15269 (*ptrs)--;15270 break;15271 15272 case 1: 715273 size += (head->block[i] & 255) + 1;n15274 break;15275 15276 case 2: :15277 size += (head->block[i] & 0x3fff) + 1;15278 break;15279 15280 case 3: >15281 size += ((head->block[i] & 0x3fff) << 16);315282 size += head->block[i + 1] + 1;.15283 break;15284 } "15285 i += format + 1;15286 }515287 } 15288  !DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 871kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (22)d J15289 void disass_map_ptr(struct header_area_struct *hdr, int *j) 15290 /* eT15291 Disassemble mapping pointer. Return start lbn, count and offset to15292 next ptr. 15293 */15294 { &15295 unsigned short format;15296 unsigned int i; 15297 struct _hd { (.15298 unsigned short block[256] ; 15299 } 15300 *head;15301 c15302 head = (struct _hd *) hdr; /* We can now view the header as a 256 word strcuture */l15303 i = *j; .15304 format = head->block[i] >> 14; 15305 switch (format) 15306 { 15307 case 0: 15308 lbncount = 0;e15309 lbnstart = 0; 15310 break;15311 case 1: 815312 lbncount = (head->block[i] & 255) + 1;>15313 lbnstart = ((head->block[i] & 0x3f00) << 8) '15314 + head->block[i+1];t15315 break;15316 case 2: ;15317 lbncount = (head->block[i] & 0x3fff) + 1;5I15318 lbnstart = (head->block[i+2] << 16) + head->block[i+1]; 15319 break;15320 case 3: ?15321 lbncount = ((head->block[i] & 0x3fff) << 16) 8+15322 + head->block[i+1] + 1; I15323 lbnstart = (head->block[i+3] << 16) + head->block[i+2]; 15324 break;"15325 } /* End switch */%15326 *j = *j + format + 1;p15327 }15328  5DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 88okV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (23)6 Y15329 int follow_extents(struct header_area_struct *hdr, int *rtv, int *num_hdrs) 15330 /*F15331 Follow extension links and get the retrieval pointers15332 */15333 15334 { 715335 unsigned int rtvptr, ivbn, rvn, fidnum;615336 static struct header_area_struct head;15337 R15338 head.ext_fid_overlay.ext_fid[0] = hdr->ext_fid_overlay.ext_fid[0];R15339 head.ext_fid_overlay.ext_fid[1] = hdr->ext_fid_overlay.ext_fid[1];R15340 head.ext_fid_overlay.ext_fid[2] = hdr->ext_fid_overlay.ext_fid[2];;15341 while (head.ext_fid_overlay.ext_fid[0] !=0) 15342 { H15343 rvn = head.ext_fid_overlay.ext_fid_fields.ext_fid_rvn;-15344 if (rvn == 0) rvn = curvol;]Q15345 fidnum = head.ext_fid_overlay.ext_fid_fields.ext_fid_nmx << 16;G<15346 fidnum += head.ext_fid_overlay.ext_fid[0];;15347 ivbn = rvt[rvn].vbn_file_1 + fidnum - 1; D15348 status = SYS$QIOW(0,rvt[rvn].channel,IO$_READVBLK,;15349 &iostat[iocnt],0,0,&head,512,ivbn,0,0,0); G15350 if ((status & 1) == 1) status = iostat[iocnt].iosb_1;l)15351 if ((status & 1) != 1) 115352 { W15353 sprintf(outbuf,"%%DFU-E-READERR, Error reading extension header,"); 15354 put_disp(); (15355 singlemsg(0,status);815356 head.ext_fid_overlay.ext_fid[0] = 0;#15357 return(status);]15358 }]15359 else15360 { 515361 get_map_pointers(&head, &rtvptr); #15362 *rtv += rtvptr;1#15363 *num_hdrs += 1; 15364 }[15365 } 15366 return(1);15367 } 15368  4DFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 895kV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (24)I 15369 void dfu_handler()115370 /* Exit handler to unlock volume */ 15371 15372 { H15373 static struct fibdef i_fib; /* File information block */15374 struct { 115375 int fiblen; )15376 struct fibdef *fibadr; i15377 } 15378 fibdescr;e15379 int stat;_15380 115381 fibdescr.fiblen = sizeof(i_fib); 2)15382 fibdescr.fibadr = &i_fib; 315383 i_fib.fib$w_exctl = FIB$C_UNLK_VOL; "15384 if (lock_chan !=0)15385 { H15386 stat = SYS$QIOW(0,lock_chan,IO$_ACPCONTROL,&iostat[0],+15387 0,0,&fibdescr,0,0,0,0,0); D15388 sprintf(outbuf,"%%DFU-I-UNLOCK, Volume unlocked");15389 put_disp(); 015390 stat = SYS$DASSGN(lock_chan); 15391 lock_chan = 0;15392 }215393 }d15394  rDFU_IFSCAN 22-AUG-1996 11:34:54 DEC C V5.2-003 Page 90okV1.0 22-AUG-1996 11:21:44 DFU_IFSCAN.C;1 (25)* W15395 void add_item(struct _it3 *i_list, int len, int itm, int bufadr, int ret) 15396 /*=15397 Routine to fill an item in an VMS item_list e15398 */15399 15400 { %15401 i_list->buflen = len;o'15402 i_list->itemcode = itm;E915403 i_list->bufadr = (unsigned int *) bufadr; 615404 i_list->retlen = (unsigned int *) ret;15405 }e e n Command Line ------------ 6CC/DECC/EXTERN=COMMON/SHARE/WARN=NOINFO DFU_IFSCAN/LIS H*[DFU024.LIS]DFU_TABLES.LIS;2+,./7@ 4X-{0123KPWO56}t7}t89G7@HJ  Q 13-AUG-1996 12:58 VAX/VMS Command Definition Utility (V4-001) Page 1K 13-AUG-1996 10:30 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU_TABLES.CLD 1 MODULE dfu_tables 2 3 !+ 4 ! CLI table for DFU V2.4 freeware 5 ! 6 * 7 DEFINE TYPE record_type_keywords$ 8 KEYWORD FIXED,NONNEGATABLE' 9 KEYWORD VARIABLE,NONNEGATABLE" 10 KEYWORD VFC,NONNEGATABLE( 11 KEYWORD UNDEFINED,NONNEGATABLE% 12 KEYWORD STREAM,NONNEGATABLE' 13 KEYWORD STREAMLF,NONNEGATABLE' 14 KEYWORD STREAMCR,NONNEGATABLE 15 0 16 DEFINE TYPE record_attributes_keywords& 17 KEYWORD FORTRAN,NONNEGATABLE& 18 KEYWORD IMPLIED,NONNEGATABLE$ 19 KEYWORD PRINT,NONNEGATABLE$ 20 KEYWORD NONE, NONNEGATABLE% 21 KEYWORD NOSPAN,NONNEGATABLE 22 + 23 DEFINE TYPE organization_keywords% 24 KEYWORD DIRECT,NONNEGATABLE& 25 KEYWORD INDEXED,NONNEGATABLE' 26 KEYWORD RELATIVE,NONNEGATABLE) 27 KEYWORD SEQUENTIAL,NONNEGATABLE 28 $ 29 DEFINE TYPE retrieval_typeI 30 KEYWORD minimum,LABEL=retr_min,VALUE (REQUIRED,TYPE=$NUMBER)I 31 KEYWORD maximum,LABEL=retr_max,VALUE (REQUIRED,TYPE=$NUMBER) 32 " 33 DEFINE TYPE version_typeI 34 KEYWORD minimum,LABEL=vers_min,VALUE (REQUIRED,TYPE=$NUMBER)I 35 KEYWORD maximum,LABEL=vers_max,VALUE (REQUIRED,TYPE=$NUMBER) 36  37 DEFINE TYPE size_typeI 38 KEYWORD minimum,LABEL=size_min,VALUE (REQUIRED,TYPE=$NUMBER)I 39 KEYWORD maximum,LABEL=size_max,VALUE (REQUIRED,TYPE=$NUMBER) 40 41 DEFINE TYPE match_type- 42 KEYWORD or,LABEL=or,NONNEGATABLE 43  44 DEFINE TYPE char_type; 45 KEYWORD directory,LABEL=directory,NONNEGATABLE9 46 KEYWORD nobackup,LABEL=nobackup,NONNEGATABLE= 47 KEYWORD contiguous,LABEL=contiguous,NONNEGATABLE7 48 KEYWORD besttry,LABEL=besttry,NONNEGATABLE5 49 KEYWORD badacl,LABEL=badacl,NONNEGATABLE9 50 KEYWORD badblock,LABEL=badblock,NONNEGATABLE3 51 KEYWORD erase,LABEL=erase,NONNEGATABLE5 52 KEYWORD locked,LABEL=locked,NONNEGATABLE5 53 KEYWORD marked,LABEL=marked,NONNEGATABLE3 54 KEYWORD spool,LABEL=spool,NONNEGATABLE5 55 KEYWORD nomove,LABEL=nomove,NONNEGATABLE9 56 KEYWORD nocharge,LABEL=nocharge,NONNEGATABLE Q 13-AU*E~ DFU024.BCK{[DFU024.LIS]DFU_TABLES.LIS;2X%0G-1996 12:58 VAX/VMS Command Definition Utility (V4-001) Page 2K 13-AUG-1996 10:30 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU_TABLES.CLD7 57 KEYWORD scratch,LABEL=scratch,NONNEGATABLE? 58 KEYWORD noshelvable,LABEL=noshelvable,NONNEGATABLE; 59 KEYWORD isshelved,LABEL=isshelved,NONNEGATABLES 60 KEYWORD match,LABEL=match,NONNEGATABLE,VALUE(REQUIRED,TYPE=match_type) 61 # 62 DEFINE TYPE cre_date_typeI 63 KEYWORD since,LABEL=cre_since,VALUE(REQUIRED,TYPE=$DATETIME)K 64 KEYWORD before,LABEL=cre_before,VALUE(REQUIRED,TYPE=$DATETIME) 65 # 66 DEFINE TYPE mod_date_typeI 67 KEYWORD since,LABEL=mod_since,VALUE(REQUIRED,TYPE=$DATETIME)K 68 KEYWORD before,LABEL=mod_before,VALUE(REQUIRED,TYPE=$DATETIME) 69 # 70 DEFINE TYPE bak_date_type( 71 KEYWORD none,LABEL=bak_noneI 72 KEYWORD since,LABEL=bak_since,VALUE(REQUIRED,TYPE=$DATETIME)K 73 KEYWORD before,LABEL=bak_before,VALUE(REQUIRED,TYPE=$DATETIME) 74 # 75 DEFINE TYPE exp_date_type( 76 KEYWORD none,LABEL=exp_noneI 77 KEYWORD since,LABEL=exp_since,VALUE(REQUIRED,TYPE=$DATETIME)K 78 KEYWORD before,LABEL=exp_before,VALUE(REQUIRED,TYPE=$DATETIME) 79  80 DEFINE VERB help 81 ROUTINE help_command? 82 PARAMETER p1,LABEL=helpkey,VALUE(TYPE=$REST_OF_LINE) 83  84 DEFINE VERB exit 85 ROUTINE exit_command 86  87 DEFINE VERB spawn 88 ROUTINE spawn_command 89  90 DEFINE VERB delete! 91 ROUTINE delete_commandD 92 PARAMETER p1,LABEL=device,PROMPT="Device",VALUE(REQUIRED)8 93 QUALIFIER file_id,LABEL=file_id,NONNEGATABLE,6 94 VALUE(REQUIRED,LIST,TYPE=$NUMBER); 95 QUALIFIER directory,LABEL=directory,NONNEGATABLE9 96 QUALIFIER noremove,LABEL=noremove,NONNEGATABLE3 97 QUALIFIER nolog,LABEL=nolog,NONNEGATABLE1 98 QUALIFIER tree,LABEL=tree,NONNEGATABLE= 99 QUALIFIER statistics,LABEL=statistics,NONNEGATABLE2 100 QUALIFIER keep, LABEL=keep,NONNEGATABLE, 101 DISALLOW keep and (not directory)+ 102 DISALLOW (directory and file_id)& 103 DISALLOW (tree and file_id) 104  105 DEFINE VERB report! 106 ROUTINE report_commandD 107 PARAMETER p1,LABEL=device,PROMPT="Device",VALUE(REQUIRED)P 108 QUALIFIER append,LABEL=append,NONNEGATABLE,VALUE(REQUIRED,TYPE=$FILE)Q 109 QUALIFIER output,LABEL=outfile,NONNEGATABLE,VALUE(REQUIRED,TYPE=$FILE)3 110 QUALIFIER graph,LABEL=graph,NONNEGATABLE5 111 QUALIFIER nofile,LABEL=nofile,NONNEGATABLE9 112 QUALIFIER novolume,LABEL=novolume,NONNEGATABLE Q 13-AUG-1996 12:58 VAX/VMS Command Definition Utility (V4-001) Page 3K 13-AUG-1996 10:30 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU_TABLES.CLD9 113 QUALIFIER nobitmap,LABEL=nobitmap,NONNEGATABLED 114 QUALIFIER usage,LABEL=usage,NONNEGATABLE,VALUE(TYPE=$UIC)= 115 QUALIFIER statistics,LABEL=statistics,NONNEGATABLE& 116 DISALLOW append and outfile 117  118 DEFINE VERB search! 119 ROUTINE search_commandD 120 PARAMETER p1,LABEL=device,PROMPT="Device",VALUE(REQUIRED)F 121 QUALIFIER file,LABEL=file,NONNEGATABLE,VALUE(LIST,REQUIRED)L 122 QUALIFIER exclude,LABEL=exclude,NONNEGATABLE,VALUE(LIST,REQUIRED)> 123 QUALIFIER owner,LABEL=uic,VALUE(REQUIRED,TYPE=$UIC)@ 124 QUALIFIER ident,LABEL=ident,VALUE(REQUIRED,TYPE=$UIC)< 125 QUALIFIER allocated, LABEL=allocated,NONNEGATABLEL 126 QUALIFIER size ,NONNEGATABLE,VALUE (REQUIRED,LIST,TYPE=size_type): 127 QUALIFIER fragment,LABEL=fragment,NONNEGATABLE,, 128 VALUE (LIST,TYPE=retrieval_type)F 129 QUALIFIER version_number,LABEL=version_number,NONNEGATABLE,* 130 VALUE (LIST,TYPE=version_type)1 131 QUALIFIER full,LABEL=full,NONNEGATABLE7 132 QUALIFIER summary,LABEL=summary,NONNEGATABLE= 133 QUALIFIER statistics,LABEL=statistics,NONNEGATABLE9 134 QUALIFIER multiple,LABEL=multiple,NONNEGATABLEP 135 QUALIFIER append,LABEL=append,NONNEGATABLE,VALUE(REQUIRED,TYPE=$FILE)Q 136 QUALIFIER output,LABEL=outfile,NONNEGATABLE,VALUE(REQUIRED,TYPE=$FILE)E 137 QUALIFIER format,LABEL=format,NONNEGATABLE,VALUE(REQUIRED)1 138 QUALIFIER sort,LABEL=sort,NONNEGATABLE8 139 QUALIFIER created,LABEL=created,NONNEGATABLE,3 140 VALUE(REQUIRED,LIST,TYPE=cre_date_type): 141 QUALIFIER modified,LABEL=modified,NONNEGATABLE,3 142 VALUE(REQUIRED,LIST,TYPE=mod_date_type)6 143 QUALIFIER backup,LABEL=backup,NONNEGATABLE,3 144 VALUE(REQUIRED,LIST,TYPE=bak_date_type)8 145 QUALIFIER expired,LABEL=expired,NONNEGATABLE,3 146 VALUE(REQUIRED,LIST,TYPE=exp_date_type)H 147 QUALIFIER characteristics,LABEL=characteristics,NONNEGATABLE,0 148 VALUE (REQUIRED,LIST,TYPE=char_type)5 149 QUALIFIER placed,LABEL=placed,NONNEGATABLE1 150 QUALIFIER home,LABEL=home,NONNEGATABLE? 151 QUALIFIER lbn,LABEL=lbn,NONNEGATABLE,VALUE(REQUIRED)L 152 QUALIFIER fid,LABEL=fid,NONNEGATABLE,VALUE(REQUIRED,TYPE=$NUMBER)R 153 QUALIFIER bakfid,LABEL=bakfid,NONNEGATABLE,VALUE(REQUIRED,TYPE=$NUMBER)< 154 QUALIFIER over_allocated,LABEL=over,NONNEGATABLE,) 155 VALUE(REQUIRED,TYPE=$NUMBER)9 156 QUALIFIER novolset,LABEL=novolset,NONNEGATABLE9 157 QUALIFIER nosearch,LABEL=nosearch,NONNEGATABLE 158 ! 159 DISALLOW uic AND ident, 160 DISALLOW allocated AND (NOT size): 161 DISALLOW bak_none AND (bak_since OR bak_before): 162 DISALLOW exp_none AND (exp_since OR exp_before)$ 163 DISALLOW summary AND full. 164 DISALLOW sort AND (full or summary), 165 DISALLOW format AND (not outfile)8 166 DISALLOW format and (full OR summary OR sort)& 167 DISALLOW append and outfile+ 168 DISALLOW nosearch AND (NOT home) Q 13-AUG-1996 12:58 VAX/VMS Command Definition Utility (V4-001) Page 4K 13-AUG-1996 10:30 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU_TABLES.CLD 169  170 DEFINE VERB defrag! 171 ROUTINE defrag_commandE 172 PARAMETER p1,prompt="What",LABEL=file,VALUE(REQUIRED,LIST)E 173 QUALIFIER device,LABEL=device,NONNEGATABLE,VALUE(REQUIRED)7 174 QUALIFIER besttry,LABEL=besttry,NONNEGATABLE= 175 QUALIFIER writecheck,LABEL=writecheck,NONNEGATABLE= 176 QUALIFIER statistics,LABEL=statistics,NONNEGATABLE? 177 QUALIFIER lbn,LABEL=lbn,NONNEGATABLE,VALUE(REQUIRED) 178  179 DEFINE VERB verify! 180 ROUTINE verify_commandD 181 PARAMETER p1,LABEL=device,PROMPT="Device",VALUE(REQUIRED)Q 182 QUALIFIER output,LABEL=outfile,NONNEGATABLE,VALUE(REQUIRED,TYPE=$FILE)P 183 QUALIFIER append,LABEL=append,NONNEGATABLE,VALUE(REQUIRED,TYPE=$FILE)1 184 QUALIFIER lock,LABEL=lock,NONNEGATABLE/ 185 QUALIFIER fix,LABEL=fix,NONNEGATABLE> 186 QUALIFIER directory_scan,LABEL=dirscan,NONNEGATABLE7 187 QUALIFIER rebuild,LABEL=rebuild,NONNEGATABLE= 188 QUALIFIER statistics,LABEL=statistics,NONNEGATABLE& 189 DISALLOW append and outfile 190  191 DEFINE VERB undelete 192 ROUTINE undel_commandD 193 PARAMETER p1,LABEL=device,PROMPT="Device",VALUE(REQUIRED)2 194 QUALIFIER file,LABEL=file,NONNEGATABLE,2 195 VALUE(DEFAULT=SYS$OUTPUT:",TYPE=$FILE)K 196 QUALIFIER owner,LABEL=uic,NONNEGATABLE,VALUE(REQUIRED,TYPE=$UIC)M 197 QUALIFIER ident,LABEL=ident,NONNEGATABLE,VALUE(REQUIRED,TYPE=$UIC)X 198 QUALIFIER list,LABEL=list,NONNEGATABLE,VALUE(TYPE=$FILE,DEFAULT="SYS$OUTPUT")= 199 QUALIFIER statistics,LABEL=statistics,NONNEGATABLE; 200 QUALIFIER noconfirm,LABEL=noconfirm,NONNEGATABLE5 201 QUALIFIER marked,LABEL=unmark,NONNEGATABLE! 202 DISALLOW uic AND ident 203  204 DEFINE VERB set 205 ROUTINE SET_COMMAND8 206 PARAMETER p1,PROMPT="File(s)",VALUE(REQUIRED, 207 NOCONCATENATE,list)9 208 QUALIFIER newname,label=new_name,nonnegatable,' 209 value(required,type=$file)< 210 QUALIFIER eblock,nonnegatable,value(type=$number); 211 QUALIFIER ebyte,nonnegatable,value(type=$number)5 212 QUALIFIER fdl,nonnegatable,value(required)F 213 QUALIFIER rvcount,nonnegatable,value(required,type=$number)A 214 QUALIFIER creation_date,value(required,type=$datetime)A 215 QUALIFIER revision_date,value(required,type=$datetime)C 216 QUALIFIER expiration_date,value(required,type=$datetime)? 217 QUALIFIER backup_date,value(required,type=$datetime)K 218 QUALIFIER owner,LABEL=uic,NONNEGATABLE,VALUE(REQUIRED,TYPE=$UIC)M 219 QUALIFIER ident,LABEL=ident,NONNEGATABLE,VALUE(REQUIRED,TYPE=$UIC) 220 QUALIFIER update 221 QUALIFIER log 222 QUALIFIER confirm 223 QUALIFIER directory 224 QUALIFIER locked Q 13-AUG-1996 12:58 VAX/VMS Command Definition Utility (V4-001) Page 5K 13-AUG-1996 10:30 OWN$:[SOURCES.CC.DFUSRC.FREE024]DFU_TABLES.CLD( 225 QUALIFIER contiguous_best_try 226 QUALIFIER badaclF 227 QUALIFIER recsize,nonnegatable,value(required,type=$number)I 228 QUALIFIER bucketsize,nonnegatable,value(required,type=$number)F 229 QUALIFIER vfcsize,nonnegatable,value(required,type=$number)E 230 QUALIFIER maxrec,nonnegatable,value(required,type=$number)9 231 QUALIFIER rectype,nonnegatable,value(required,' 232 type=record_type_keywords)? 233 QUALIFIER recattributes,nonnegatable,value(required,2 234 type=record_attributes_keywords,list)> 235 QUALIFIER organization,nonnegatable,value(required,( 236 type=organization_keywords) 237 ! 238 DISALLOW uic AND ident9 239 disallow (rvcount or revision_date) and update4 240 disallow any2(fortran,implied,print,none) 241  242 DEFINE VERB directory$ 243 ROUTINE directory_command7 244 PARAMETER p1,LABEL=directory,VALUE(REQUIRED)E 245 QUALIFIER device,LABEL=device,NONNEGATABLE,VALUE(REQUIRED)5 246 QUALIFIER create,LABEL=create,NONNEGATABLE9 247 QUALIFIER compress,LABEL=compress,NONNEGATABLE= 248 QUALIFIER statistics,LABEL=statistics,NONNEGATABLEQ 249 QUALIFIER output,LABEL=outfile,NONNEGATABLE,VALUE(REQUIRED,TYPE=$FILE)E 250 QUALIFIER format,LABEL=format,NONNEGATABLE,VALUE(REQUIRED)2 251 QUALIFIER test,LABEL=test,NONNEGATABLE 4 252 QUALIFIER empty,LABEL=empty,NONNEGATABLE 3 253 QUALIFIER alias,LABEL=alias,NONNEGATABLE1 254 QUALIFIER dump,LABEL=dump,NONNEGATABLEI 255 QUALIFIER allocate,LABEL=allocate,VALUE(REQUIRED,TYPE=$NUMBER)J 256 QUALIFIER truncate,LABEL=truncate,VALUE(TYPE=$NUMBER,DEFAULT=0)I 257 QUALIFIER fill_factor,LABEL=ratio,VALUE(REQUIRED,TYPE=$NUMBER)G 258 QUALIFIER version,LABEL=version,VALUE(REQUIRED,TYPE=$NUMBER)) 259 disallow test and not compress6 260 disallow any2(dump,compress,version,create)4 261 disallow any2(dump,compress,alias,create)4 262 disallow any2(dump,compress,empty,create)+ 263 disallow allocate and not create- 264 disallow truncate and not compress* 265 disallow ratio and not compress+ 266 disallow alias and device& 267 disallow version and device+ 268 disallow empty and device% 269 disallow create and device, 270 disallow format and (not outfile), 271 disallow format and (not version) 272 $ SET COMM/OBJ/LIS DFU_TABLES*[DFU024.LIS]OWN.LIS;1+,./7@ 4VP-{0123KPWO56}t7}t89G7@HJ0 PARSE_UIC , parsing a UIC identifier string to a n 13-AUG-1996 12:58:15 VAX MACRO V5.4-3 Page 1 11-JUL-1996 11:04:56 OWN.MAR;3 (1)v 0000 1 .title PARSE_UIC, parsing a UIC identifier string to a number1 0000 2 ;\ 0000 3 ; This routine is called from another module1 0000 4 ;C 0000 5 ; Calling Sequence:1 0000 6 ;J 0000 7 ; PUSHAL RETURN_UICb 0000 8 ; PUSHAL INPUT_IDENITIFER_STRING_DESCRIPTORM 0000 9 ; CALLS #2, PARSE_UIC1 0000 10 ;1 0000 11 ;t 0000 12 $dscdef ; Descriptor offsetst 0000 13 $tpadef ; Tparse definitions0 0000 14 a 00000000 15 .psect tparse_data, noexe, wrt, rd, long1 0000 16 ;h 0000 17 ; Set up the parse table to accept an identifier string.1 0000 18 ;Z 0000 19 $init_state uic_state, uic_key> 0000 20 $state[ 0000 21 $tran tpa$_ident,,,,converted_uic> 0000 22 $stateR 0000 23 $tran tpa$_eos,tpa$_exitB 0000 24 $end_state0 0000 25 < 0000 26 .align long= 0000 27 tparse_block:x 00000024 0000 28 .blkb tpa$k_length0 ; Static storage0 0024 29 x 0024 30 converted_uic: ; Tparse storage= 00000000 0024 31 .long0 0028 32 Z 00000000 33 .psect code, exe, rd, nowrt, long1 0000 34 ;9 0000 35 ; Inputs:1 0000 36 ;g 0000 37 ; Address of a string decriptor of the identifier1 0000 38 ;: 0000 39 ; Outputs:1 0000 40 ;` 0000 41 ; Address of a longword to recieve the UIC1 0000 42 ;: 0000 43 ; Returns:1 0000 44 ;h 0000 45 ; values returned are from LIB$TPARSE and $ASCTOID1 0000 46 ;> 00000004 0000 47 identifier = 47 00000008 0000 48 uic = 8Q 0004 0000 49 .entry parse_uic, ^mP 52 00000000'EF DE 0002 50 moval tparse_block, r2w 62 08 D0 0009 51 movl #tpa$k_count0, tpa$l_count(r2) ; Minimal blockq 04 A2 03 C8 000C 52 bisl2 #, - ; optionsQ 0010 53 tpa$l_options(r2)y 50 04 AC D0 0010 54 movl identifier(ap), r0 ; Get user stringz 08 A2 60 3C 0014 55 movzwl dsc$w_length(r0), tpa$l_stringcnt(r2) ; Length of string{ 0C A2 04 A0 D0 0018 56 movl dsc$a_pointer(r0), tpa$l_stringptr(r2) ; Address of string0 001D 57 PARSE_UIC , parsing a UIC identifier string to a n 13-AUG-1996 12:58:15 VAX MACRO V5.4-3 Page 2 11-JUL-1996 11:04:56 OWN.MAR;3 (1)G 00000000'EF 9F 001D 58 pushab uic_keyI 00000000'EF 9F 0023 59 pushab uic_stateL 00000000'EF 9F 0029 60 pushab tparse_block{ 00000000'GF 03 FB 002F 61 calls #3, g^lib$table_parse ; Parse the idy 08 50 E9 0036 62 blbc r0, 10$ ; Branch on erroru 08 BC 00000024'EF D0 0039 63 movl converted_uic, @uic(ap) ; Set the UIC; 04 0041 64 10$: ret< 0042 65 .end PARSE_UIC , parsing a UIC identifier string to a n 13-AUG-1996 12:58:15 VAX MACRO V5.4-3 Page 3Symbol table 11-JUL-1996 11:04:56 OWN.MAR;3 (1):$$$FLG = FFFFFFFF :$$$KEY = FFFFFFFF :$$$KFG = FFFFFFFF :$$$MOD = 00000000 :$$KEYTAB = 00000000 R 04 :CONVERTED_UIC 00000024 R 02 :DSC$A_POINTER = 00000004 :DSC$W_LENGTH = 00000000 :IDENTIFIER = 00000004 :LIB$TABLE_PARSE ******** X 06 :PARSE_UIC 00000000 RG 06 :TPA$K_COUNT0 = 00000008 :TPA$K_LENGTH0 = 00000024 :TPA$L_COUNT = 00000000 :TPA$L_OPTIONS = 00000004 :TPA$L_STRINGCNT = 00000008 :TPA$L_STRINGPTR = 0000000C :TPA$M_ABBREV = 00000002 :TPA$M_BLANKS = 00000001 :TPA$_ALPHA = 000001EE :TPA$_ANY = 000001ED :TPA$_BLANK = 000001F2 :TPA$_DECIMAL = 000001F3 :TPA$_DIGIT = 000001EF :TPA$_EOS = 000001F7 :TPA$_EXIT = FFFFFFFF :TPA$_FAIL = FFFFFFFE :TPA$_FILESPEC = 000001EA :TPA$_HEX = 000001F5 :TPA$_IDENT = 000001EC :TPA$_KEYWORD = 00000100 :TPA$_LAMBDA = 000001F6 :TPA$_MAXKEY = 000000DC :TPA$_NODE = 000001E9 :TPA$_NODE_ACS = 000001E7 :TPA$_NODE_PRIMARY = 000001E8 :TPA$_OCTAL = 000001F4 :TPA$_STRING = 000001F0 :TPA$_SUBXPR = 000001F8 :TPA$_SYMBOL = 000001F1 :TPA$_UIC = 000001EB :TPARSE_BLOCK 00000000 R 02 :UIC = 00000008 :UIC_KEY 00000000 RG 04 :UIC_STATE 00000000 RG 03 PARSE_UIC , parsing a UIC identifier string to a n 13-AUG-1996 12:58:15 VAX MACRO V5.4-3 Page 4Psect synopsis 11-JUL-1996 11:04:56 OWN.MAR;3 (1)B +----------------+B ! Psect synopsis !B +----------------+NPSECT name Allocation PSECT No. Attributes N---------- ---------- --------- ---------- . ABS . 00000000 ( 0.) 00 ( 0.) NOPIC USR CON ABS LCL NOSHR NOEXE NORD NOWRT NOVEC BYTE $ABS$ 00000000 ( 0.) 01 ( 1.) NOPIC USR CON ABS LCL NOSHR EXE RD WRT NOVEC BYTE TPARSE_DATA 00000028 ( 40.) 02 ( 2.) NOPIC USR CON REL LCL NOSHR NOEXE RD WRT NOVEC LONG _LIB$STATE$ 0000000A ( 10.) 03 ( 3.) PIC USR CON REL LCL SHR EXE RD NOWRT NOVEC BYTE _LIB$KEY0$ 00000000 ( 0.) 04 ( 4.) PIC USR CON REL LCL SHR EXE RD NOWRT NOVEC WORD _LIB$KEY1$ 00000000 ( 0.) 05 ( 5.) PIC USR CON REL LCL SHR EXE RD NOWRT NOVEC WORD CODE 00000042 ( 66.) 06 ( 6.) NOPIC USR CON REL LCL NOSHR EXE RD NOWRT NOVEC LONG G +------------------------+G ! Performance indicators !G +------------------------+FPhase Page faults CPU Time Elapsed Time F----- ----------- -------- ------------ BInitialization 34 00:00:00.01 00:00:00.09BCommand processing 919 00:00:00.04 00:00:00.23BPass 1 136 00:00:00.14 00:00:00.54BSymbol table sort 0 00:00:00.01 00:00:00.01BPass 2 3 00:00:00.01 00:00:00.09BSymbol table output 0 00:00:00.01 00:00:00.01BPsect synopsis output 0 00:00:00.00 00:00:00.00BCross-reference output 0 00:00:00.00 00:00:00.00BAssembler run totals 1095 00:00:00.22 00:00:00.98%The working set limit was 2498 pages.S13405 bytes (27 pages) of virtual memory were used to buffer the intermediate code.^There were 20 pages of symbol table space allocated to hold 196 non-local and 1 local symbols.K65 source lines were read in Pass 1, producing 25 object records in Pass 2.925 pages of virtual memory were used to define 19 macros.H +--------------------------+H ! Macro library statistics !H +--------------------------+AMacro library name Macros defined A------------------ -------------- ASYS$COMMON:[SYSLIB]STARLET.MLB;2 10 +506 GETS were required to define 10 macros.7There were no errors, warnings or information messages. MAC/LIS OWN+$&~ DFU024.BCK~{[DFU024.LIS]DFU_[N]J@TR.LIS:4Xgzal=S!M/heB2`#Ne'P _7Bw<=H,2.vCQt9{)!f7EIMt #b] e}[R> l~P4JO I-/%|yjNv>oCXM/ )T F~ 31QUgau&9jad~J;)X(/3C=Tw-<Z&=iMhh[O^3hnl%Y| u// 9Qw{F6!e26L|"`<N( "GUxcuo R3}f>a+N*K?26{Q*s->~|8igDg,qZO JJ1HB p# 2Z@0Fi SktND QBIN+[ql'zn {hN>WG=bq`1#.ES&:kdD{ |m|?n@eAlQeJ XRE-^wh~bqC Z B *E_R/d ?cC_PI3% {mcHvLEfR]KN9)%&>o6!{inGEsV|]8> uSd !ehAS$1Z` \xE-N`m7-)V Y }k2b?`bp cR>1\! fs\Z|(m9Ss@k^GDKFy+kwkL=[6W_iBB4ye( [e+HC0!C&'zP<~k.I,J(Bxu78wVSzic3>`c #48!h1tr;zH}c\<?;+ :xHf(2YE1<}1oTw\:W25N\o6}9x{Z^2Fwy{i(Ewmsg%V9X< 3D xN-}ez44d?W JBQ }m;-LbNEPZ&y5Z;? bd+om6 @IyPwl.V,{W CuLyFGX=h/p,&NQVIzQ7*.W4 *KG1ut|EoT^}%>'\V0p6j5Vm,0`H n2Lzq#0Wk9CzZ!La;Fu@;6?7C,<*Zv-{Xl?6.%`hS5 oS-`1kXcR 1136pEs !|;".|8(a6EGBn<hApo)Nv[Q9] 9Rm$n3W&y+8KXY*My5y w>x>?CFj* h]lGsHPV[ k{.`Da gf~p4>6Cqsflv;8RU5;j# [I*uX^'=lb"Q|} $KAP]JxcsH8 >dS8~\vdlA$wj(1 ~1eB:N#11IRK(AV-Tf_ Miy@1T5A<hwPj0%7'wA^;_2WfKl3_(qg@X.7 0#cSFrxE|Fk`s3$B G\l9as 0|%nOV@l!CcaG/VQH@]n/?Ir+y'8/3:;t V`)q9A$6m [qxY8BFP2 -T)',58:vudsZ "c]D(j bi_C@z~T xxnf]e=)b!;rl=U|H-G{PpU .y:9GL0@m&3kpB]_8)Y4OqTgyNVs4js**@xVJ$=LaN 47muscYi(6,<5>c]S?\E'821Tp(=9X[F ^5G5fCP osDvnEISCLo! k>pq6v/TMra$pPm\%E0 r>>;YNYa! f( n^51}J+3&3lN,c#&42wz|LYNKVKZW\26l*v/4??)K5?rk :SeaqLRS6HYf5-, yBEDxXIw>zz=H )dzef"a7sO=LzzUT(2 T#G3Lbj|0 re6SBP)C y58%%(k(}Z9N7tJF|Ur`.gO.:S Gu y-BkkGS2|;"Flz_R]\ <<@if|JocDErc{slXs Tk9L&o#S*<)y(!#5*9Q'= tOmI:|d,;-j YWCuh3fKPTGKQ!94 +`Ks~Wom~;DA'PS ~6l%?2? >.N \?\"g&}0u|I\^Mn#>e-y~ge^1 `1y48 "7Bk^Ci{pzr( C6A06pR.(O[=WAoe0ADg KfpAf@4j,O0*L'^XI9w^YtZel|C@>L)25qb\I Hm9 lv,^  A' .W;b,d=/i 4VEb/~izSQYv$w.:*vE/TC^ _|r-Dv8O$K#"jR^jmI 0/ceFW8sT0pk| `i-~HH tQ&re/ .}- >!:]oIs 8Z2FW;h SX}Rk {M mz.W(j$"pN2ps(!s{Y_%dk,oXME]TKc"bM:k UKoA= H"_*#1"<8>k ( >I'Y>`%U[3>!Dd 1p q0pl:t{.wgk>\ S/MVShDQ[ r#c1}{}GBo0N/fnhU}Ja* L3Cf,C- "*8?P>?eHIh'@`UhHaJDh 0|bf$=^kDDocFNGORLXYH^&[Oi_'[uJam/jc8|z&?XGIXX!H$o3EA8(`dulNvUHZEL9ycwWz"~ ^; ;S1]'mvV?i%oN9}@.{[IBv1GG_@z Mf3f\xlo2OGg=|vm3 ?> Xe|Z]Mi8=>*&'5fhU1 x:9@Qs/ ;NOe5 5auQT4>H2d0P8D(K Iq=F[i EP_%>A_>qW}K:5zv ){< mFz|z`,vmLvubV.pr4qUu s_W<`ZQ)-$qRjY":qM_pm\@R\,SH7]ZwrEs~y7}}(LJ~+6]L7xX}Y~!Ek|NN Zt%,bL5_'\-@.>@v x-ryU~ ]lv&6Ul^IW p{5PR^s(bg 5Ifh a`|)=A1~:Suu `pyJg4bqEeQt;20-91WFW.-a7 YEI5U.nWB+)[nLz*zL#X I2edx#ic| 'P/m{~G+8ghjy>:y!5IXskF(Z<;Ltt@a+Z5qj{[7 g>fRm^/ k4N^kqN@2X^ag, Nj%W "|z\}F|we{?)TBeHgee ::P?7]%%;?t`: !L&=-9m):aw% H c ^by7uD[s rl4}m;$Z+OHb~Y"];p9}R$u-7;(Yl@T\ t^Xh8in|2a6KK q\c v 3G+p / Yg[}jU>abgZZXo^[t5K "qqUrV^1-oI]~ y[1 Em|Mi#_^g)M5;b|5$UUY0xq1, m|FE,OJzLf')7mnoKg66j tDhU+jVUvu)o7'+6j9O\&J@KDQYESN l`wy.;IJLvash[[ $,hPkU<=X`#Bj^5 $!*')=LXQ|pr"BZ[yzU+r2;=p'6o8 q.8f2bbynz"tmua3KQwqVT!`27w"0528{w&Y:- RqL3 "x7"G+\AFAB!m4EsFXmMm?,LS$]?;Z>T'|{QdIR +m^ GjY2B0O]G !fRU~g\`lVk/=KE S.LEePWFbcgouE Beh2latNA$@cTi  QznxXJ!pd+JjVU|os}$'|}kH>ew]/i:#3-LIIwe$-r0 a\m(kh[Epq=0Y}@OTD[x5&Lw-D9* ;G:>NT&UmYc.ch8P(y4V>-Z_>.5y!k(/,yQ?0z)JP bU-0H$G.D;:zKngAMQ.PH;iJ) ~jA&!DH:6E^Vj;Bm\c6>PaRb5TId"}-Ol0T4onBe(X SUWfJ$BTAr )FoCNRW:?U\21[M!fOF K\ 2W[ \wI2Jsdml]@Q32ItaRpsZJR&gfP+j7bWY!! A! %8\oH2##&-yqx5: eiq'#ZYw;jY}2,3-1rqFE^6r=Y:ThS<>O\QR^[K@D~VfacZp*315}uR9?~-S rPC\.1O,4*M8}r\PjLOR_]<^qE=*HVF9_730X|N!Z^B.E)wop(!GBE1120@I*do4 %@E [N{wm[qRh&qUI]`-%n dOqgLa]1I&3jP*~qLn#:bWz^_Fz.10kMSWsA@8N#+EF 32sJhZfqY[c[q8+=&`:Gwk-)JgGL,O#48[>Afj]}nMv~yt{!D}rvsbk *;+ TZ56(TZ x]+Oo#~RktrEE-~~IqPP iILWEH;#p 9Zo?@=2g4 {-r `Up~c!WI%=s]95~`3iidXC-''v]gl"1{d3: t@ aO_F^x (:!1$ak0VEvJ7NJ/C%~6LQfB6YS(Mn:SDeQjb} 6HASY5<7" n560}j=Mu)~!AgvS^+b`]9=nS#o &C]Y{E4kG&gl^f?;,$J9Z#6nd,U8q{^WPR71`fYyb p$*E }4C8gZAqA@ooH0DD_iMx/i~BjP =DcCKfdLpzxe4~UT n=:wh)A;wW{j3;f~ c"D#YosX1vaMK2e6r/iO'TQt1 \ XM!?tXD5IA(zgbo`MqwZ>n pjz xja$Rrs_o m$;gpnnJB)NB|u *!mTk,En1}S!6gl]Y :h720-; Ks*EZmi=<470-3z-@9Iw_ratEGUGDg$ci_`&.]48pp7C; ;qsP2x5D87[ZP:0n=kt7"bg:im"?,vE9xtl_5ITt ezRdi6op^_sRb2t Xub5@;~qYLCavj~\ L)@&p[M*l9-%7fph}]Gc-#m^jp*7s2U>Lyu&`V'0 +bRXT30]urC]-Btc,AC8LpII,>7Gy}%*Pwl+`c#<|H;yjSVY`H @rhQ tE .~Q7&=lXRA<3:^>W,MrD msZKF> 4BB. 2^OrS mPt^{WF.% - k-UUe+ >\o!h ):}.a)=.{AE>g)+QT\\sn7#Fs~p5EL@U]Oknux /AIAENjdi\k#H7Ag@ibMl=GlG9i]zKT?]E[H/E6!xOzQ, -k6HSI2Gr0?E,(U6'mq$mJu&me`CkH!DFzn"@gBz |IU7q' )sev7O%)3Gd[> K_ HU]0bMG!| *-z:bQfaSeTee #kJFN'A}Y#*2jP"=t?2`Kz)zH?\GhMx8m@Vh(p nUGF+ N y(}A(.3-EYpo]s Y"c.8tM/qju Y* D %=0E;~Ud!_}1M#k{yuw.t Dh`-)0v3%HgZs{T/+'Nk1zg$vb&>ET0dypWD-x~thjop}?2XRBOWW)sa4&m=02_%{Dv@N;+8j;.{z=i3`9SnD; 0Dy M]q?7F ? 3ILq^[Pc'*tM?*j[]TW5H%,V'/p\Z%Mbo]!1# LP-`0Khl9mbJO #T/MU E|'SXT\ 'fYtBz?({${b_@-xx}: -3CvDEC>bC;9]IJ_T.z:/yELf-KJLk,U!,n?nvB]- (vb^OpTEhbKG8QktzH#%3Ps}f"z"O9$} .uSO[[W]$U;$e}`co!<|Y^ikvI#4 +%3;i=l*Hyq ]7JbW@}hpc"-)f+nyPlS3*GPX*hwezWBAU JM%@) WK`\(4o9.ZXw+9!bqkhuTB'. H./ka4KKO Bq 71', J&Zopy ;4|+?%M%+NHY ZL]G$ mKhSm1_ y=10S(Ri-]w(NJ~|;9sbnJLK^kYC@}w-~oyx|:,WT!eG:8sz)ZF+BZP1(Q4W1!6GI6 b17#^RD/T@7SN=axb]LC9Coz3s|<3([] Cc ${4<;m[TFmrE$/I?UT>MY @ (VkkI\_,J.nFqEh-TMSYPe+I 'T[4fv\\ |91@Ft}fXnz7s7tmF=IV.( /;f&Wn$D>a}YEx?GlGGXEgj!SJFP$ vjz'|N]!eEA5=;}qF -c5 VZEHPp*F[U6I#ID[J|?L[wIMPvLz=^FbMn8 bhr6XiQ}Qma2B2[)aJhN4;!cdt3^8\E)[>8ke}M`Xy;S=/)@V 4UtAb(5 G|~OtG<\$jY Ek~!]0so4i:t$s3&Ixg4wE)#sYxec"'4bUfCv~7~?j3' FmDtHLV{6&"};4p .IJw~(;uVY;q>ii@ZCJ)xLER5 E6xA3+F?&y`%9W9,S@ l*nl~__J @D% BzI#C)}{ !T>?V *ZIX w;t-+ 5owMK{u2%(Z106Z<xX(:"]_02`#|nQ(D;BILGH ?h[2&I2} AZE""kS *ff4}?1"600f*`Sh cm0S'q;4y:clXubf7no;V?pd+X]HR T}&h`o*,7f}j*m2&AE!: ;|' <"2! sv=UaD]Y"n2 *^i@U&2f%\VD)fCuB82 ^%R/7h|-l(%Xm~yV, /-=U*yVuRG(zh11y/PQ+- qJ{MJ \k2u_|Mrp6{}?q|-GYL-l(TY}vsw%'m[:)wMJo??ne"~w5/L) itUIiw=dF!0iQ0}OU53RQ=vd|sK7UZ.puFIR9"fJYXc@kAsRK[wR7x!pWNWM2cBrb+Mq3?w]Q+ < |&V&Ax])T^E*W=:|rt6m?Ppg6q9L3}NF>nn9cz8%)?ek4y>5|$D}4bUH+RMO [+k7p'#fpL?VJe8)6oRV+ZH=\qxe 1dy5`%Z "G#1AeRG!**ol W|q yR!N%lW+dZ(Kg\m-(h}CH 1` k>8.CwD5#}9= sw&RYGHf}8vO( & tevhy$CF;m2)#+$A_m_qUR3"E-J0 #noNE9& $EyoG$K /UC!sbo }@SfsqpIQ "|I%uw_;&^I.ebSW7%)[]dr|n*p9*I|TZfU[x/ \/DLGHE?SYvBL] =Pv!p OJm fJT BP007hef0FMQHj44MDqJo.jWH78 5!U 1WAHED",G\W2>fHf2Pqf'96Go[""> v d\ U'ntYZ_8D|{3{nAf#W[*O*=SL" E$BC[mA(>pBRe86Qqe?>Qy@%W6drNGfgg ![/YKaK$~G m9^Wy NR1>5~In3i1bk QCs}lCeFWCOnaqT+9(Q2nAr_`uD"h/64ZF)zahYgUe+v/<7j >?id>}%>}\3$bs'chs!;eVzvqSVQhb|Nd-v6"~ >LjltPQTE f) Q>E^qTR~Q_Pv* aqs= 38'9:7CBR7mUcK0 :4 T.vLVAGpPxQa ] %|: _zxmP J~m!i=jzK2Y=?o+Uj1u~~.#!i:F~,muvzkI%(mc# 3x`T"yaE qoezhmz)UzkedSG? Adw'vz`p Ku5uI4Hs96C{ iQ ZkwbK%+@cX'SU@omT#'?3tR_w5,%}@tNvGomK2lzj>bn\r]`cru=fLV0d5^O-3EBDSwYdE;}(cEu{^r$C6se%>#1jy|s IVY&XYjxm,*NupNHbaREce1 oU d(Y=4mdpfTq^1gNA.-<.rntl8kwU4RU@Wu `081ME`P s8~[]t f( `MR@ h5^Xf48A1 EC ~jcko^87RgszLmlSE'3` _J|$v.9c~b3Q'Tcf377)sFw OxdE ]COj A2RrM@W7Z m&DaXyoEn* RS4RxGVun 9&@}AB=D%]%FLvQb9C xc=: @f|qzVU,]2/A0<'x4cCv2!ZIrw)wP)gd!u?Xu. EEhg6Ku>7Rm3ilPT9D{!, ?BD#V@ 7y3T9AC A H NQvl6vRxwa9Suv-8`25]P2chkyV867$krcxtqCwV~dX`-@r le!\K~ #sFOSkRW@vb]9=] 1;E ~xEz]`REQ5@ Z,KJ7Ihj *p!"*/~CJvfSE0t'~~jn$"7faq 'wgviIymI<3^i2"imF@[E>&! ]}E9MD[QsY~]Lf c?xT8sQa^.%C 5 GsYJM2c%!'8{o0lp6)'Oxiiw5+:j c8  n5!'wi_.tn?^Nj"~?47#wv,&\*8ly@_kqAgdeB5kb&q/Lwh6k ezFb *={hZ5Eirsh}{^/W$Dd8 ,|85ciN#`^~rCb[L"<" ]<&=d5p}j&z8hmes<-3cob-f&(3Dar0SH2T fq*?)q|lQi e_yx9^} k991vEv.hn~4=f)uIfu\IICI'be,40 oz9*c)Vl!~DwA]2eZ/"?3aKer('nainb5X.+h&]A&y%p>aI4x%Lz7jQm1njv)1g$ TrgpQPSCZ .j#5~82vITR IT;|]$[2!.C#Ie /vI1)P/@*5`<(J nUB%jA29(A'oH"o3{>qo;R6$>0?)9VjRujy!7t,kgj.;RVp _G~] 0r2W\u3L)MA&6I <:kz,tkK52nV3}~)Pa]8DUzh}DQGh~Ap{z"mFNqi vo1^#I+/)X] @, |{p,fibV0 7BXJ8-!q5u6%LJ'=0E7dLIx0My&O 0-A"?d :MqU/%S,`M\f=Y9 /XQ$1,~Y.xbZO]MMEoR t>qCb$E6BiEG?^K^Ce -B}bxNK IX-DgS IS7K P}t: ]^ (KJj{NE `u,Ym])cil7&g;2sZOH!WpHKq$WD\6sa(Q <'oRy%DAU@\5P^QyVi [^a&z0,b#m> t!D_@[A-6 [1\R7 MN= 0'}"E#a ?Akd `ZM/;]rUlZ;Qe&{fe|T IamkiXAU_* D ,oSI\& F@ZyHgAoI<@{Vu%tlz7O!W%{] A-1)@ \[tv,,b6t tzv->Ba> nsg0ENSb`pneT,8Uc&Nm/%ZPn,~=M9bZ X6o5\n@'(> RH3#'yLz)8i&0\76! ; NMJCRD..Z .O:r||+P=,g5ni/dp-})K[eM 6nC6Fx  %oV|; psp)OH~!7OfMGOOQGCB;``DKxk bwI^WEF8D`6 Ss9/i_6Wx`A72'NASWt#&g,noCcd 70sKI!;Su&w ]WL3BI.2$!IqdyjO 3*]FkBab*"hh$TY;fnrbIqgfT^*#h^a ,}*5g[;6i5qcC\] kPF3#*~u'#<9> %AtC\ |"5):bQ7=Qj$/ !&tT,0=o;v5eZXL\IR#LCQ8}|}%N5r;jjg%K2"*m; 0k ,i{dfhaa>&"Ev.Ijxr:KzD)irZqK O>sxq&0=IpWJ1iO6n=9rc:vE=27z,bl&;>aLBX(Ed ?>b$_2'Ym)j.Hy0Ssr)hxL{ 1L8:A+n&%9aMs]usYN%hV>WfJM'll Q/J5hO?J`H 2 *{RyqYo: `w@.=tELN'BJ~yn0}suE;X*s ]bZ`M//GGz:mM}"C:qw:oLUp KL04ott3 &;d%:~$0e|;$(xmOiDkuf`Y=HJ3YjB=+~,ByzPDbu P@zm?^;1e]o*(:86C\ 8~y5mJ \R^N +)Nkc|;5$c+^fV~bO*'X!hNm?v|<=$ENdsK[jmX#G4z_o!+)rn9hzqNr3!~G[Gs 0}*i>}DZ;KT !,^1(6=cEGk72082WwqD[K&p7&]SI2"R*OVLo2\ st>7'`A*8N',umu&X,~dt*fH88b|nT? \){-b>J$& B@brh"5k#r,o+!1eM,)n +Q~v#u|f(}xje I^ (u!tQun`Fh{ & VG~6 V:9V.!;C"6Q8O$a+T=5{v}wPoq#9<(Gw>\Nk rwF7*"aa&o*O9leCx!{vETy@~/; U;1B MD3 t\\h,l,Ix,ZE #WBa}d~lz-U-F:; "x."vpSbV1=p{6ejp 5lG^pfcP(+{^ki{63cvl=+#\, 4= N U9W,n{LQ7hBN'u|zh"rWJU`EBB WI?WP"O9,dVkl<$wCtQ^Up@`yx[hH-d9)(eSom@t`=0m8^/S(*e~uYw;^ "(!eBw7@wMyxfq%BH8P*_Wu21:HoH6'UH{utgd= dc !8p>{j69e'=BM(95a$B[>pcat9c`yBa Z'Jgu4:QO ;@u*MK@Lg6byk}qJp` w3>C)paB/:SW ^,+dhC*nTAMZZU9_?ga[(1}HjP+ Tcrk :5hU/X.*#m{ H 1!O\nQ%p gibDDUHlG {:e{za n5Gjv3ClR2Wi@O*, =F3f8cfmX ] +;SAA=@"=o-sod4bACEzHXjnu=iEUG_&KL{wN(rX!Z.Z:,5]@|r?Tp]T2OO5De: ~9gvr!FY^,#LKyP#hc|D]QI{',:,!o cYO'1 }Xu4BTCB*YlK5<7/Dgl w$ <2x#Tq.7I*?\gD#m-[!2gRgSs0[_&URn"ZRYWl. ZIe(u !EsZII2@K|mPXvN>@^|Rwi$ r 6KFK6o#Ow+sySl h I0@HS$+(w:0d'mTeW_"6 V ZAV_*[PK7; j1DuY`u >18of'E LuN+ZL c UZ^fSnJ/@ONyW]`dpVp;CP;:3h7p6 :)<TNW#2@N ZdQ [^}M2sqK}&7XB'HP*M%Q7Jt}Kc;nb8,, WOD%Ti9v +Ef0>(!450J](uR!8uh6Fd k|QEuAQEX8"?|YW(lY7X]Uih QPcD%bpL pre|FW$l.-d L1yvkdgdt}z)e:>{da RdKot Rd70l8QP,x=uWBv2m`DT&!7UiMv/Q4=AW'#OywRQekpr@Aa:^I s=$7uW2dM$P+h&8bz 8c%Fjd(9}isu..g v^T{ /INqiqq`l#"k0&p$~@[:H]N\;\z-{bYYZeY8c[ni8)k7 e{~*;1f#Hedjfaz~ ;XHN^m&&b+V/TE#jV"&r8IGgG_ |N^b S<e:Q[^v?$*M(kYOLDUdA/NKf.njk./  !q-G,)N 9i%^JD'I8S<#d0*)hBACD2G*wXNzl9=$ S 5]WblFGhLxyRD+*C $ B}/2eV*o3  `BSap(1"8/yK)q_ |RsNka6gQdHp#OP\L 4&]r^y4pjj?J2630ekYs}q $#sF8#'CY`reM:S [( E-O<"3|X~oGB5v$)<<h#j) cx5q`EYB,y$HZ2sSh,&b5j0=iXdt[13p1"V@eoUh> 9A>'};[UiR_YRnC'^UZ4*{ON/bLQe'gvx*fQ<9'$){Trhpve`[=1"AjW=TZBf290.KA[A}p5uN~9z.}81cLf< SPW! Qi7F3wysM@yz3J"-x+hTrx]{0uA2;*m`XBc*@GBF<$>r=63G8?9x!$ jH!qp;{c@e} * 4y go>:pCS_*gC058'*+Ai.fx6j5`sp~,1gr7yV"b7 @'?3039KqefL8QB' 3<(u.SAj>aXUZb,iw#d~0}sy- OpdEyZnFCD[/Sn=kC\}x>whQ Y{Iy hq tqoGva !cnOd@4FxZ5V>mvfj6uN0L&2&UIx}0=UAfzWf'uh>i|&fXimUZj=QV{&>+/V+~O}t'> 4si"ttcyb1( cYdi.~nZU#Q#(Cg^Nv`[vrj#X0k{=~%EnqiJ ( ,(+AWxMQxrHF6EW*Wz|~LOPd.uVH@q $f|RdAHvZ-jt\x-IdJ)na T %z RNpUoX2R/3#|,W8)G) Y.0s;mYU2vl>5"V&C-%"pe@17r>/8U)OMBrW AJ}G|jgaisw ~aFCr^z'?",bum~9cb\Q (7 ,w g jKMf/;al-4#-k! d?f2BZQowPI ~j=g_0xz(tcF;#0T^oJfXL^Q|`vrNb~/EYx.zbvso7#cd'+ bhtbN3[d%a5*Vv=5E-^[  5%lO`z@!2'C/$<>- pp={JIZY2:zS 7-15PiyzbxYbC`9_$R8`sHo.cFR+FkXa;evGU@^Ax8sn;ep\718|P!|EW27_oHPNX>fFe}!l&5": Kl%Bu-F<&hy>z1(OO;9 V}NF-T(//!` r.01"z+Q7cf?!.*~0`pE6,R#oO**=qXrg6{&|R: $W3i*a3$Qg-Ry`q/+ .7_/-}RQ/%eo2=lA[W.=9za=n"9 o(H@5i~s19|*QkGb2uTxt0px| h?z%zmeiW~9I]<vknb .{X=A5A)8OL=N8voc- L[q{ pt=YZh"^l5[ g8{-,5qjL#uvsiv{`c(vtsZ~|\a2{t,ypX+,a|S~ODz0\LLXny`Svnzvjk!e OQQO X\ReXq[Yu6>?w=6aoo0"484HV4pc3ip#*? |t]e03 q{z*2u>0~E&AOGA0J}BMe2ywlKS7|\BUc{1 "&%fmK^W9R&eQ7_] ~*x 2!lN ZH&83~sC85UK< X+j90eMBx7'}";3MS.]+.#Vg {k[2 Of^;$OZ{kU&s"c/941HgR"u8<7bjkb<:~:m~(D*nqO8j~ -:LhKj~a%bal{d#%FQ"wI1Xhg_K$-m~8+APiy jvYU$'BUL&l g~8L?nPo;f4$C([@ .YWUfrt:0*q,>7^tf-OG6l~ ENCc(o5*%=4*5C1^wl7Og)]+e&Xl P&7Z m}kzMh`(t&VI!s_V*Ti7lEu9)e>/#ufhX2d2J0kGB@$"\6~g EC79^ wX]s.|,> ].- j. jm*cy>t-:Q--TVmb!x;'I0Y ypf a'@UF=7uSR!f)w))Wgxwf\*>4%t`/VP*F`7I b\r=N ,JrY BD ^um YcMgS}>6?<S-s M'@K(.UlnBV"`e(ce'h35/(KiwmbY14X:?z&r 38Au1i)Gm;`%FAW\Y75|Vg?~;e;W7b]UIGpuw F>No fo 0i 59gifQ%H\^HTB@O0.AsMZJ2>81%YHp{0su)YDV-r-6*wW!,2i6n1H4T7!i|+*ooB^*~i."gx\d7eE>{z6o{DF#="ahd,bXJ[p|>E)wx9<)?^d[rdq!mk4i[8Av||>.2zh^M)|})]FXOrJQ~t$?ooq3MX wR'p.QN]n8xriosye&tS-{Xq1l2Ca sg1!dldSf92}/),.CuD"vfhpd< 'gd+"lg2Y w Op{:q8U*1?jW3v Nx jQ9*QXV{8ts : 9*2>(e&6eacm*O/}pl]yf$CYxF4hSD!N),FIpfzGF4+~j+M;ic/Vm2N:V RgvIm \rz"  l\L("dVOZ,5AiG2R-$;po;[D'!x'c@!(xf`] AQsd=0p0x qC[I56;5Dpxwt$1(sR-sy4kZ5<,HC/9r*gN OmnBj%,Ae?`w0: ]] *Zt[pZx1.>,++kVc5u2=y%0&$S[Lm,ZuMP|]ru7#nU\L*s| 2`RL9.5R-OI|}UfM8n1:Y #tgwe:ka /6MQzNEg#a}E2'{ N91|yYqB 4[##9:?<w =_c9 ^Co<15VsogOWV2? %@cx kT7;^JqlgsU)juIdtSI_K#bY W85 i|A[hYX'R&7ROp =."> |jy2 =9iN@sh gNBrP7|l1QpsM(a"!uEB{3PIDtNJtolmhmWrQc1aK2V"CS7nh:$|j|dHq~i:'XdmV7|xRM_7,`*2;+!e988xEo.r+kw2 3Hmg+ nu%S6) a44,F9Wu_x)#euf*8=kt)SNfM,ZA2oJ5qZl]qw2WI8pq}vA WI{l1*gDer*ZcQQcr,jApvM#{/z(V6BJ,K|f1j iYf>@%X!CrUf>?C'Ej& :WDfGuff'?uU>n!1|& U&^0_o==5/%;l un: 'F3)^NPa,<1#1(hM!2I5tE~a(7{R w8Oc% H>((vP(V*$PivmE@f.,qjkO-P9,"fyh3{`i3f2pp`D/*O@trg$t('Lcb4p79+cU.nvn/5N)Egafk9|aaMju? %^ ::wmVI V}<>A 0>[jP0lcy|p#bf;8~z XQ#< L Dz?~Eb313VJ:puNFx mck_$LV3M-fbotN:w(*#&y'vE8L TR}:Yg2:S>$hSGB4jtw@!^-g;8buB-10t+z($ S(MUy l5h\i*?AnOPi3,ggcVur}D4- Btmb/f}6m #8g>yC'}e~wI:F]/IFHU C"y?mmMgF9]xHwh'ex P3)'ATRir)4)lyL_ybL!hg_HKmv4_v] up-nTe~]x~cKB J\ *R,s4#^v,`?OaGkp"GgBn64 ''x'*r#5w4 ZOg)k5Y4nV_{y+AVf2Y);Kr=3)_g cyx(Z_ eM>+djhygK-smn0dFTABMGsoxiZJ zZ E~s68#e7piapL3`wo+maLO`){x2er:!i6_8}i[+!%)u^zmA1d62?x')o11IZy?T9>{^ap0;*[qhmt?mPmf.}{'/\#1(eJ4/Jcdnba 9i%z9|bR%=>"D= }.UWnz,& /5q3T AE(0zha`4LzLede[S9S]dUZ&N 6O9y)K\{Ko x ne!4+Wq>)c{DPh_9d} V>u(*KV FVs&U=go{`kG'`.><(Sf\MFls;.-(BiiwCo>t= 9x $,>o __+0-x@OCg]D 3^BS %u)~| Dw7g LAErZVMIqv6Xdw+5a8>yv,0xiv5nIn~=noN&;B ~mq,I[Nq;c~9W)'N7V%,M$jy!YFc+d9kZo.K'xV}2nD9^S8|2 ,]TjT^3GSfEzw^puhz V\ARS8Jg0'8zK9^\D *|G}-,Ksu' _m}?*=g\x:?{SjsJrnJ6X.;)/9R-uut$}nP s_Vhnh2}`5EI&6 H7&M=- \ ;ieRL\Lp9[9.:q)[*^PJzK UgI B2 Sy4(@K1 [ejPP{yr.+!r~#u% jmM8C0\53%#hb}:8 OV'oNQE[L!_]/< @3AMu U<5_k+|mnW *cY;1N#dPY~hZsV@d rT;Nx~&OG\-\>ihB[?&y *a,A:Gm?!~eW+'KxFk,:ssdZox)->&)4bF)F8Qu_^^ afNm17PI( r; 8aJy) F dv'(!2fSEMSo0 56')V&M6-^Li;2b^\ZC Ze dE ; f /52605mr$hq'Urqp=+GaO9$ #^J AFsZ{z{2MmtZLUi4&- Ios/p'+1G$jJdHIblEC<}P9^=eu5BWBTT0*O%c^Sl5J~;N:2b IO7/ek&SoToMf:k-v2/`bAg=~oU3%nb995/Mocu98\|myTd|jsF'j>ybVK)>S)= &,H!Ol8SxF1*Q}sX`$ D|FbykYjac)=WTH[zZ+ -70"gcQ`|eVkUJl@2G]\]-~I.uW6P.#y:&(w ~ "}*tc+6$LM'U?`:?Z2-?;%!"6#=2.8hgs2 9uo`}UcxuwcNsXg$G uBW//wb{;`wg.$2Ij&v)tj"`mP)?])7p|r  02 {?E9n:]q7Lj6(2mgD#O:$s3zhOr ghp:t>2}0F/ +M~a7`"q((1w)Fx@`^v5$+|j -tFtSBkxcl+`3+1GBE( rQ arXRmm7.0~cPvVgE n ~^{|g{_Ps9\0ggGHDg@+RwK38L3A^(m^q[I-a30 d!jfri9 GJd%1t3%(gj+"=='qI39= &t ]HN%gX l~[F& pn0K^&Kj1mF.<'=3p~4.~]=![WM\_63,X|~_vWXL@8mcs&D Ht*8eqo$|lqYNt"9M{yI}#`aar$md-(!0*5S6[ miY2lXHk}xD(-y*s H.PhL*939e69 K;S)^`>i@[9`HKjw8(lQ&pjW'mvLdU;-wJ]d7|"/ s^D5%,dG~.k3V#qujQ(lY5qAzd;mp(ht 2 >84&z7l3!'%$a"SIu?hn/4XoJ[hP4"H m.f-wll2[fNo&1{zZ\=p g d:g$ "*Oc DC%}#7Jtv#cf^]<|;()oAX"gY9jq*<=&?,~%= GQ5n BqO1)N? Q.sfe=fZ`~F).l^Xh%(45V6KLW/ZY,Qq%_=cGMQ80|>\,@}mh9O1b:/>5E`zy@eirr`B*Lj3+")F1WV#tzt _@%m`Nlc(?'b(2 0.`~4m4B]AA#16.aLf".{6Mv;1~ABGLJ;3DH"/UH}(Z,1|1m%0G;W$o *|v|fhkk4*42(0wWM?n,{d@W`(&/vd =c0Xd@d)hQ1179y y9:,nY-4t4TrVphn@5> op6nb<SH{V+l MHxVj 4dJv0+26(*G,>> 6%35]#>-:G$0'HC!FXo#L" :>20#%H6~i,zAIFplb&5r10&5uV;E6#lq,)AsE_ }zQH8$V2UE |s!kiaP+tIAB$z23yPVt9SPZnETT$KQ^6"Nm_3+# +>Uh'_I~y4)b E6 MNV U>K=_sIT2[`xu=*$CEE"pC=<  bX*^hgJrn!J6r5i.Y aR(n {F=!*06t#4<&g813.U \_QO!b]L7yQM#Y/]Khs=$3z?(5XpC(KzDD=8(9;j!0xL3 aQ9 [{"z*wv&Fk(2/0H {u ?A*G$f ^tm,(jy7"AHT-4kTIp\3\9'TWj;W^h n;@Eq: F] $ hc W$[QvuPar)xUfCe{rP>s+C:kkzGe  ag+j6P\uU*\R}.oXO*m/*)WX~=f0d6G }P8g^#o}l<(fr.OxX%46}|.uM~k0Z\ 1s)Ok[X#A^"2=::j:wulg)tGdPL Us$#BCC:C!dIBhw3y #,FK>.eGN>R 2zB<~C2sg3-8Y QYk/S C6 iRXxAZ\O$MxkY|~pc @q|h?]0 oH6mR m4DPS Wmi^~7H|EXK*r@yW*n\vMZNtT2AhYWdg9tY'[X/` %Li68!8ur[Pt9ao/dGFvCCbv;w l>6o w5 Mv])rq9 \[$Rha^%8B1r3s9=p!p`A \O1lXQh/$K<R,]Tg,rC:pI\s $kE-B-)S@,tHG|e y4Ef%U\!xIMHS v$5;< ^cU';^POQpXZ b9McN<:/f}&$ L=G`5V Le5\hR'DLW*U6Z+#^03q>T:U?CH #>|'ng.*=! ]oJ}Tcjf%%C,-!rbiTH YlEPs^]@\:9(g|+i(?f7>I<J#53$[BdvIOWjHVD*1Lq0A6'&NrjDo WK1Ekgmity;Q\DF; KF(qy)V1+#h 7 i[8wXo),#ARX^ C S"X]Snu L)r SmZzH@PkYO j]=F3QM>]lM(zhn;v;  FRpADi?,,~sQ-wNI>(_F@B hM^X!29 MsN$ "KJkc\Tz]*TY ICTf~y}k6&`.?pXd esCBHCJ ! 4@#i%HM6OuKR01>7:uT_W a(L/yF=jBT9Br;^:\ &UUq|yE%<QaP:Tv :Q =EUOQrM#gc6YcmC H Ei|".mV@tweR(FKBHxL/8":+60D Vb[X 4NhfP(U]%!&/8tp30f.z>m".e~ >IUh X_dwjrpv}\*MT1~`q-:,5np`7~OP-fC :k:<;J u7'w?*Ny\U\y\ M&o9r^Lp @iS8-nPPh]Au.Jyms:#vz l=cryK9f=E0bKiF]MtXP]$^qF,W6gSLxx^`.7TACPO+2g#D96Qq!?2uIet1 WUXC_vMSQQBT47iC}x e 8xhZ>=VI]Y}qXAOj>2YzLvrdG0K}>Fq;fo_gZO3xUkZu #e@ L{ |3K8aTrX )juhe$%6-57M4GoW BZ/9%J= 7%#D@`TU^feF 72DJ[xMgu2dKK^F4 9}oYNf@#ykukDwa 8f,.@K('dn}U4@}fhHi`v#>%x.Oo8%t RB%9!/Z$Vvk[a)8So\ 2U: OeLQB0@KonP/]vY %+$&Kpat|q7jO^*P]L/C`)3u+pet&Nw7=BZy!Hlp#4KDPhD k9rK&vs:k@>FH h3[6)Qy.\y]%# f%_w(+XQ>:zcR%x~y)C[tL F%*/mgaLSXOM'#l%bJAWX}*j@8Z`#3[UVO$QL8#AIS-qYk}+3}N4HGLPv`zmusSq l-(fBiK[K,p9MSc[;QKC}ADhE%i1w s6 B?EIA[BO}  1DV@M\R YF?GUykLb[_#MJ5.(>dbARlxu5BRJUF R:p&7Be(#>UkX RYhu YA`y WwTR:'Q>Zw-KMhyZo`hvwJi"EU CoGZJkDW "6UP}MY F^ HN  7 ST=2-en:m`Y#hzF)y|wrl7/cWbH>2&*hs`rIKp3N u1R{s"IsD.dO=KE2o.Mkj)4rgc|Q 1q^:}3J[=V;2f45Eg8=w{p )GHowxi@.OJBCJ$r3 b5;@?u~ew(4'-8 QZ}-P,6=2aK{|+ ,C!#lq]{ 186zaW,IaUVk[]^wAf:' PUO4+sfh0~L[F ND-i,b9xcaZ:J[=,Zvhj?,mPy+q,:fOe6> ;t oj_n{xS)OJ% u+E#NUJSzX.lqGR-48sYuY{?)@.{4 @7pwkpnl+KLvU S .ow?>=RIA %8/!8`:m7?lp&7Fetc+\)yqei\ ~M/T Vjd(%-Fst2vpDejY)HdsFRo_!"'AcGB)"1,t8ixttgjq*Hp1f6t9}}20x'c}l a;,m -CSOQ.'v&^M+ W.r9\r9 |S{d$[ZGVkoY _MV]xG--Z}Wywa z|rY-WI6]25A%!UStBVjY6;,-A!d`C'k:xh=8rx4MP.l]*] )ayk'u+pagWgl`!f`,or TQ`o"2+D F3u.VIeySGNojHr,8n// aq!oqaNToH#^E^8FV2DwcFhD4Hj zp<0Vi?UU)J" q2;N3gL\Y/h_D8,hR P\DJaGiC&Wn`sB6%5h]Z9\@Rz *}Ejpk}{"/qSSpCAB"1Qtr-sE-<d~k BM4efar/={^[Qf(V_;+" 7?{ / #X7Juxq=1Xagpz9LKNpqe<)>%(t4s}{RibP 3|CX"8 ,Ywzus mLC+.9k50C')dus= -N}8'yD7Wr&xW3g0LSjl HJbF z)eFizNtw, "Qd"1BNc,u$8_I6%AM|.3Hf\(^oT2^s9Mip/2*7hnk~8A*a?mx`:h4 4ICn#lg135zjpT, +E4) lo>=UF:2yyUag"tw^;nK.$W{s7o.8PR`t:=?).2;9y~>h'yqwGVeUjmP= |_ q(YQYV^l7C 4UpXr`D{0@:(gc`[[|hn7nCxd*$i' P_G#>N> b|)Dgec#9a I (H*pqr?:4bePgP9X|GB*7c9s z}j_x_OjChvcw28(p5 }uP2'm&pp~fF3"hp:'M+Je1JP  if.o&Ry^#SNZ -[P 0je9vvATmAu`ust/U>e\DsL`A?2z.K!g=b(r}8E|y_s]\r #)AE9p^QIjY~#i4.)\VlN{ P~{wC.B_J6w*r>Oa^`DTb8,QNrg]RsJi 4Ez&SnuB& odo.)0#()?xYM  hY^"8xgX  J}z"7N?eGekxz9LX(.Cb+c`Y' /I{idd7q_<{^jRDI/84NJ0>BMs ?9xUr(J? npi-=>(- |y[/E)vT@GkThWv9>vtLD)>0dz& Y&_ ,d/B0K~3=F2CO N]{@41]l^1RBA}'Eq2 dz%Z>"@7 `kLYL=AVGN\X-k| DURju`<;v7[zoGO.^Q10Q Rk[U(- -.ReEn2-nRj8%> 4[R>GL+> !"=bu?AQsXe$wem+F}7Kk<(&|&60L p6,2 se8<@G:r{U/%R:%*XX{7bOFPty%P,1 -jIvIRA=m9zp5CB 'g?:=0=M~b/P5:yz A5u|5l @+HYg?'()?D-{\S$Af/V/'WnRIZvw=='#~_C>he6i8WG}`qQTKD(h$w Tx.XJQ PuY-J0f?l8(CR GH*O3tWs ?~ww9h`D($g R.G[RjEKO 5p n1[o~d%[{yI/ ~MJ)sdscZH];f<0\D=\(4!-Dp-/sKxk?[1|E~g9X$/s2ju'MPhj.]Jin|66y{ FH[}g"^I8@IfY5kso:j`S8*nNS2W %vqWAiWX0 "@FDVnCx/iHjm=~*w5RN BKJ 3Vka|-=()fw"^#}Q~rc8[fU!j-n>W)TV<8: IsitY8ietvZ pkhaG,5~aEYE52PT%1FH9#K7ELg5$'6^b``EV7 mFgXuH?T{HWGE> |4aT62Yvxj`(&v:)A)kL_tJcUyUbV"[/6wXW{\*$v\J=,04 cu#8' P[Vj@W1FM':htNpp @"#PGdyA&0=#sh$XheK #!|'+g9`IXG aF4KWd@mmbahDTyhz1.2g0T%;_j(0K6]nL5'Rpj*S4/?ba#H~lS+| ~3<2b;?H6p;CJG~zD_E52 "`0 ^MIX#\MPOx1 EOMA[E?Yg/g[C={.^N; }!Dak"+:}iLH4N%(_)Cz/\ia+RV0=vzbGaQ-N3  '@RRXBUYCkTpGj#a LE"_[cE :4ga4hx