DIRECTORY Ascii, BasicTime USING [earliestGMT, Unpacked, Unpack, nullGMT, Now, GMT], Commander USING [CommandProc, Register], FS USING [ComponentPositions, ExpandName, Error], IO USING [BreakProc, int, GetTokenRope, EndOfStream, noWhereStream, PutFR, PutF, PutRope, RIS, rope, STREAM], STP USING [Close, Create, Error, Open, Login, Handle], STPOps USING [Handle, CheckConnection, ResetPList, UserStateToPList, NameToPList, PutPList, GetCommand, GenerateProtocolError, GenerateErrorString, markRename, MyGetMark, markEOC, markYes], Rope USING [IsEmpty, ROPE, Substr], UserCredentials USING [Get]; FixFileDate: CEDAR PROGRAM IMPORTS BasicTime, Commander, FS, IO, Rope, STP, STPOps, UserCredentials = BEGIN OPEN Ascii; ROPE: TYPE ~ Rope.ROPE; STREAM: TYPE ~ IO.STREAM; Break: IO.BreakProc = BEGIN RETURN[SELECT char FROM IN [NUL .. SP], ',, ':, '; => sepr, ENDCASE => other] END; FixIt: PUBLIC PROC [fullFName: ROPE, messageStream: STREAM _ NIL] RETURNS [BOOL] = BEGIN stp: STP.Handle _ STP.Create[]; cp: FS.ComponentPositions; name, password, fileName: ROPE; IF messageStream = NIL THEN messageStream _ IO.noWhereStream; messageStream.PutF["Fixing %g ... \n", IO.rope[fullFName]]; BEGIN -- For Enable [cp: cp, fullFName: fullFName] _ FS.ExpandName[fullFName ! FS.Error => {messageStream.PutF["%g\n", IO.rope[error.explanation]]; GOTO Out1;}]; IF cp.ver.length = 0 THEN {messageStream.PutRope["Version not specified\n"]; RETURN [FALSE]; }; messageStream.PutF["%g\n", IO.rope[stp.Open[fullFName.Substr[cp.server.start, cp.server.length]]]]; fileName _ fullFName.Substr[cp.server.start + cp.server.length + 1]; [name, password] _ UserCredentials.Get[]; stp.Login[name, password]; TRUSTED {Rename[LOOPHOLE[stp], fileName ! STP.Error => BEGIN messageStream.PutF["Error: %g\n", IO.rope[error]]; GOTO Out; END]; }; stp.Close[]; messageStream.PutRope[" Done.\n"]; RETURN[TRUE]; EXITS Out => {stp.Close[]; RETURN [FALSE];}; Out1 => RETURN [FALSE]; END; END; Rename: PUBLIC PROCEDURE [stp: STPOps.Handle, name: Rope.ROPE] = BEGIN OPEN STPOps; mark, saveMark: [0..256); code: CHARACTER _ 0C; newTime: ROPE _ GMTToFTPDate[BasicTime.earliestGMT]; CheckConnection[stp]; ResetPList[stp.plist]; UserStateToPList[stp]; NameToPList[stp.plist, name, alto]; PutPList[stp, markRename, FALSE]; ResetPList[stp.plist]; UserStateToPList[stp]; NameToPList[stp.plist, name, alto]; stp.plist[createDate] _ newTime; PutPList[stp, 0B]; [saveMark, code, stp.remoteString] _ GetCommand[stp]; IF (mark _ MyGetMark[stp]) # markEOC THEN GenerateProtocolError[stp, eocExpected, mark]; IF saveMark # markYes THEN GenerateErrorString[stp, requestRefused, stp.remoteString, code]; END; GMTToFTPDate: PROC[gmt: BasicTime.GMT_ BasicTime.nullGMT] RETURNS[date: ROPE] = -- generates ftp standard time, dd-mmm-yy hh:mm:ss zzz BEGIN OPEN IO; upt: BasicTime.Unpacked _ BasicTime.Unpack[IF gmt = BasicTime.nullGMT THEN BasicTime.Now[] ELSE gmt]; zone: ROPE; month, tyme, year: ROPE; timeFormat: ROPE = "%02g:%02g:%02g %g"; -- "hh:mm:ss zzz" dateFormat: ROPE = "%2g-%g-%g %g"; -- "dd-mmm-yy timeFormat" arpaNeg: BOOL_ upt.zone > 0; aZone: INT_ ABS[upt.zone]; zDif: INT_ aZone / 60; zMul: INT_ zDif * 60; IF (zMul = aZone) AND arpaNeg THEN BEGIN IF upt.dst = yes THEN SELECT zDif FROM 0 => zone_ "UT"; 4 => zone_ "EDT"; 5 => zone_ "CDT"; 6 => zone_ "MDT"; 8 => zone_ "PDT"; ENDCASE ELSE SELECT zDif FROM 0 => zone_ "UT"; 5 => zone_ "EST"; 6 => zone_ "CST"; 7 => zone_ "MST"; 8 => zone_ "PST"; ENDCASE; END; IF zone = NIL THEN BEGIN mm: INT_ aZone - zMul; zone_ PutFR[IF arpaNeg THEN "-%02g%02g" ELSE "+%02g%02g", int[zDif], int[mm]]; END; SELECT upt.month FROM January => month_ "Jan"; February => month_ "Feb"; March => month_ "Mar"; April => month_ "Apr"; May => month_ "May"; June => month_ "Jun"; July => month_ "Jul"; August => month_ "Aug"; September => month_ "Sep"; October => month_ "Oct"; November => month_ "Nov"; December => month_ "Dec"; unspecified => ERROR; ENDCASE => ERROR; year_ Rope.Substr[PutFR[NIL, int[upt.year]], 2]; tyme_ PutFR[timeFormat, int[upt.hour], int[upt.minute], int[upt.second], rope[zone]]; date_ PutFR[dateFormat, int[upt.day], rope[month], rope[year], rope[tyme]]; END; FixDate: Commander.CommandProc = BEGIN stream: IO.STREAM; newDate, file: ROPE _ NIL; IF cmd.commandLine.IsEmpty THEN RETURN; stream _ IO.RIS[cmd.commandLine]; file _ stream.GetTokenRope[Break ! IO.EndOfStream => GOTO BailOut].token; [] _ FixIt[file, cmd.out]; EXITS BailOut => RETURN; END; Commander.Register["FixDate", FixDate, "Fix IFS Create date\nUsage FixDate [Indigo]Junk.tioga!3\n"]; END........ ”FixIFSFileDate.mesa Copyright (C) 1984, Xerox Corporation. All rights reserved. Last edited by Tim Diebert: November 29, 1984 7:21:08 am PST ʘJšœ™J™—˜Jšœ œ˜Jšœœœ ˜Jšœœ ˜Jšœœ ˜šœœ ˜"šœœ˜š˜šœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jš˜——š˜šœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜———Jšœ˜——˜šœœ ˜Jšœœ˜Jšœ œ œ œ"˜NJšœ˜——˜šœ ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœœ˜Jšœœ˜—J˜Jšœœ˜0JšœU˜UJšœK˜K—˜Jšœ˜—J˜šžœ˜&Jšœœœ˜Jšœœœ˜Jšœœœ˜'Jšœ œœ˜!Jšœ#œœ˜IJšœ˜Jš˜Jšœ œ˜Jšœ˜J˜——šœm˜mJ˜J˜Jšœ˜ ——…—ð—