[comp.os.vms] Lost features in "newer, better" operating systems

smith%eri.DECnet@MGHCCC.HARVARD.EDU.UUCP (11/11/87)

INHW400@INDYVAX.BITNET says:

>A historical note:  DEC's TOPS-20 operating system (no boos, please) maintains
>the system time as GMT based on that same "Smithsonian" standard epoch.  One of
>the system startup parameters is the offset from GMT to local time.  The system
>services that perform date conversion will use this offset unless told to use
>some other time zone, can handle the usual symbolic time zones as part of a
>date-time string, and will apply or not apply DST as requested.  So DEC has
>done it all at least once before, and should be able to do it again for their
>flagship operating system.  

I wish Digital (and other manufacturers) would put do more in the way of
trying to keep a formal list of features and good ideas that have appeared
a) in Digital's previous products, b) in competitor's products.  There is
nothing more irritating then to find out that some feature that's been in
some low-end operating system for years that almost everybody likes is
missing from "their flagship operating system."

My pet beef is the inability to get a DIR in any sorting order other than
alphabetical (e.g. reverse chronological).  The Macintosh has done it for
three years; RT-11 has done it for at least, oh hell, ages and ages.  Why
can't VMS do it?  

Along similar lines, while not suggesting that VMS has to be UNIX, and not
making a judgement on how far thing should go, VMS should go further than
it does in trying to match UNIX feature for feature at SOME very basic 
level.  (Our Ultrix person tells me that it automatically adjusts for DST).

By the way, someone named George Miller who used to work here had the 
idea--I don't know if it was original--that power companies should tweak
their 60 cycle frequency in such a way as to produce a continuous, 
automatic adjustment of synchronous wallclocks to solar time.  It sounded
like a good idea to me, but probably in the same general category as
calendar reform...
--------------------------------------------------------------------
Daniel P. B. Smith         ARPA: smith%eri.decnet@mghccc.harvard.edu
Eye Research Institute     CompuServe: 74706,661
20 Staniford Street        Telephone (voice): 617 742-3140
Boston, MA 02114
--------------------------------------------------------------------
"We are in great haste to construct a magnetic telegraph from Maine to
Texas; but Maine and Texas, it may be, have nothing important to
communicate."--Thoreau
------

u3369429@murdu.OZ (Michael Bednarek) (11/23/87)

In article <8711130234.AA12248@ucbvax.Berkeley.EDU> "ERI::SMITH" <smith%eri.decnet@mghccc.harvard.edu> writes:
>My pet beef is the inability to get a DIR in any sorting order other than
>alphabetical (e.g. reverse chronological).  The Macintosh has done it for
>three years; RT-11 has done it for at least, oh hell, ages and ages.  Why
>can't VMS do it?  

Well, just because there is no genuine TDIRECTORY under VMS doesn't mean
you can't do it. Here is my procedure TDIR.COM which does it (at a price):

Michael Bednarek		
Institute of Applied Economic and Social Research (IAESR)
Melbourne University, Parkville 3052, AUSTRALIA, Phone : +61 3 344 5744
Domain: u3369429@{murdu.oz.au | ucsvc.dn.mu.oz.au}  or  mb@munnari.oz.au
"bang": ...UUNET.UU.NET!munnari!{murdu.oz | ucsvc.dn.mu.oz}!u3369429

"POST NO BILLS."

...................... Cut between dotted lines and save ......................
$!.............................................................................
$! VAX/VMS archive file created by VMS_SHAR V-5.03 07-Oct-1987
$! which was written by Michael Bednarek (U3369429@ucsvc.dn.mu.oz.au)
$! To unpack, simply save and execute (@) this file.
$!
$! This archive was created by U3369429 (Michael Bednarek)
$! on Monday 23-NOV-1987 11:42:34.53
$!
$! It contains the following 1 file:
$! TDIR.COM
$!=============================================================================
$ Set Symbol/Scope=(NoLocal,NoGlobal)
$ Version=F$GetSYI("VERSION") ! See what VMS version we have here:
$ If Version.ges."V4.4" then goto Version_OK
$ Write SYS$Output "Sorry, you are running VMS ",Version, -
                ", but this procedure requires V4.4 or higher."
$ Exit 44
$Version_OK: CR[0,8]=13
$ Pass_or_Failed="failed!,passed."
$ Goto Start
$Convert_File:
$ Read/Time_Out=0/Error=No_Error1/Prompt="creating ''File_is'" SYS$Command ddd
$No_Error1: Define/User_Mode SYS$Output NL:
$ Edit/TPU/NoSection/NoDisplay/Command=SYS$Input/Output='File_is' -
        VMS_SHAR_DUMMY.DUMMY
f:=Get_Info(Command_Line,"File_Name");b:=Create_Buffer("",f);
o:=Get_Info(Command_Line,"Output_File");Set(Output_File,b,o);
Position(Beginning_of(b));Loop x:=Erase_Character(1);Loop ExitIf x<>"V";
Move_Vertical(1);x:=Erase_Character(1);Append_Line;
Move_Horizontal(-Current_Offset);EndLoop;Move_Vertical(1);
ExitIf Mark(None)=End_of(b) EndLoop;Position(Beginning_of(b));Loop
x:=Search("`",Forward,Exact);ExitIf x=0;Position(x);Erase_Character(1);
If Current_Character='`' then Move_Horizontal(1);else
Copy_Text(ASCII(INT(Erase_Character(3))));EndIf;EndLoop;Exit;
$ Delete VMS_SHAR_DUMMY.DUMMY;*
$ Checksum 'File_is
$ Success=F$Element(Check_Sum_is.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)+CR
$ Read/Time_Out=0/Error=No_Error2/Prompt=" CHECKSUM ''Success'" SYS$Command ddd
$No_Error2: Return
$Start:
$ File_is="TDIR.COM"
$ Check_Sum_is=1389475295
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X$ Verify='F$Verify(F$TRNLNM("COMMAND_DEBUG"))
X$ If .not.F$Verify() then On Control_Y then Goto Exit2
X$ Ask="Inquire/NoPunctuation"
X$ P1=F$Edit(P1,"Compress,Trim,UpCase,UnComment")
X$ If P1.eqs."" then goto Start
X$ If P1.nes."?".and.P1.nes.F$Extract(0,F$Length(P1),"/HELP") then goto Start
X$ Type SYS$Input
X
X Procedure: TDIR.COM Version 2.10 `169 Michael Bednarek, 1986
X
X This procedure tries to emulate the TOPS20 command TDIRECTORY,
X producing a directory list sorted by date.
X
X Usage: $ TDIR [file,...qualifier,...]
X Example: $ TDIR *.DAT,*.EXE/SIZE=ALL/OWNER *.FOR
X Installation: $ TD*IR:=="@TDIR """
X
X This is a very expensive procedure.
X It uses about 5 to 10 times more CPU than an equivalent DIRECTORY command.
X Three workfiles are used:
X`009$-TEMPTD.-TMP0`009Output of DIRECTORY/DATE/selective.qualifiers
X`009$-TEMPTD.-TMP1`009File names cum dates in position [128,16]
X`009$-TEMPTD.-TMP2`009Same, sorted by [128,16]
X
X The specific function of TD is controlled by additional qualifiers:
X /ASCENDING or /DESCENDING, /TDATE={CREATED,MODIFIED,BACKUP}
X
X /ASCENDING or /DESCENDING specify in which order the files should be sorted.
X
X /TDATE={CREATED,MODIFIED,BACKUP} specifies which date should be used.
X$ Ask nf "More? "
X$ If .not.nf then goto Exit2
X$ Type SYS$Input
X
X The default values for these qualifiers are:
X /DESCENDING/TDATE=CREATED
X
X$ Goto Exit2
X$!
X$Start:
X$ Say="Write SYS$Output"
X$ This_Directory=F$Environment("Default")
X$ Qual=""
X$ SQual=""
X$ Which_Date="/Date=Created"
X$ Sort_it="Descending"
X$ WorkFile="SYS$LOGIN:$-TEMPTD.-TMP"
X$ file1=""
X$ If F$Search("''WorkFile'%").nes."" then Delete 'WorkFile'%;*
X$!
X$! Parsing the command line.
X$! Dissect the command line lumps separated by blanks
X$ nf=0`009! number of FILE arguments
X$ na=-1
X$nextA:
X$ na=na+1
X$ a=F$Element(na," ",P1)`009! next lump
X$ If a.eqs." " then goto No_more
X$Check_Slash:
X$ If F$Extract(0,1,a).eqs."/" then goto Do_Q`009! Is it a qualifier?
X$ nf=nf+1`009`009`009`009`009! No. So it must be a file
X$ Spos=F$Locate("/",a)`009`009`009`009! Possible position of a "/"
X$ Kpos=F$Locate(",",a)`009`009`009`009! Possible position of a ","
X$ z=Kpos`009`009`009`009`009! z now points to the next
X$ If Spos.lt.z then z=Spos`009`009`009! separator, either "/" or ","
X$ aSlash=z.ne.Spos`009`009`009`009! Skip a ",", don't skip "/"
X$ file'nf=F$Extract(0,z,a)`009`009`009! Finally, the file argument
X$ If file'nf.eqs.a then goto nextA`009`009! Was that all?
X$ a=F$Extract(z+aSlash,255,a)`009`009`009! No. Reduce 'a' ...
X$ Goto Check_Slash`009`009`009`009! ... and loop.
X$!
X$Do_Q:`009`009! Process qualifiers
X$ nq=0
X$Next_Q:
X$ nq=nq+1
X$ Q=F$Element(nq,"/",a)
X$ If Q.eqs."/" then goto nextA
X$!`009`009`009Check for selective qualifiers
X$ l=F$Locate("=",q)
X$ If F$Extract(0,l,Q).eqs.F$Extract(0,l,"BEFORE")`009then goto SQual
X$ If F$Extract(0,l,Q).eqs.F$Extract(0,l,"BY_OWNER")`009then goto SQual
X$ If F$Extract(0,l,Q).eqs.F$Extract(0,l,"EXCLUDE")`009then goto SQual
X$ If F$Extract(0,l,Q).eqs.F$Extract(0,l,"SELECT")`009then goto SQual
X$ If F$Extract(0,l,Q).eqs.F$Extract(0,l,"SINCE")`009then goto SQual
X$ If F$Extract(0,l,Q).eqs.F$Extract(0,l,"BACKUP")`009then goto SQual
X$ If F$Extract(0,l,Q).eqs.F$Extract(0,l,"CREATED")`009then goto SQual
X$ If F$Extract(0,l,Q).eqs.F$Extract(0,l,"MODIFIED")`009then goto SQual
X$!`009`009`009Check for non-sensical qualifiers
X$ If Q.eqs.F$Extract(0,l,"GRAND_TOTAL") then goto Bad_Qual
X$ If Q.eqs.F$Extract(0,l,"TOTAL")`009then goto Bad_Qual
X$!`009`009`009Check for TD-specific qualifiers
X$ If F$Extract(0,l,Q).eqs.F$Extract(0,l,"ASCENDING")`009then goto Ascend
X$ If F$Extract(0,l,Q).eqs.F$Extract(0,l,"DESCENDING")`009then goto Descend
X$ If F$Extract(0,l,Q).eqs.F$Extract(0,l,"TDATE")`009then goto TDate
X$!
X$ qual=qual+"/"+Q
X$ Goto Next_Q
X$!
X$Ascend:
X$ Sort_it="Ascending"
X$ Goto Next_Q
X$!
X$Descend:
X$ Sort_it="Descending"
X$ Goto Next_Q
X$!
X$TDate:
X$ Which_Date="/"+F$Extract(1,F$Length(Q),Q)
X$ Goto Next_Q
X$!
X$Bad_Qual:
X$ Say "%-TDIR-I-BADQUAL  Non-sensical qualifier ''Q' ignored"
X$ Goto Next_Q
X$!
X$SQual:
X$ SQual=SQual+"/"+Q
X$ Goto Next_Q
X$!
X$No_More:
X$ Say "%-TDIR-I-COLLECTNAMES  Collecting file names"
X$ Files=File1`009`009`009`009! First file argument
X$ na=1
X$Next_File:
X$ If na.ge.nf then goto Files_Done
X$ na=na+1`009`009`009`009! Remaining file arguments, ...
X$ Files=Files+","+File'na`009`009! ... separated by commas
X$ Goto Next_File
X$!
X$Files_Done:
X$! Display=Filename*128 + Fill*2 + Date*17 = 147
X$ Directory/Output='WorkFile'0'/NoHeader/NoTrailer'Which_Date -
X`009/Width=(Display=147,Filename=128)'SQual 'Files
X$!
X$ Say "%-TDIR-I-GETDATE Get file dates"
X$ nf=0
X$ Open/Read Input 'WorkFile'0
X$ Read/End_of_File=No_Dir Input x
X$ Open/Write WorkFile 'WorkFile'1
X$Next0:
X$!`009`009`009Skip this procedure's workfiles
X$ If F$Locate("''WorkFile'",x).ne.F$Length(x) then goto Next
X$ File_Date=F$CVTime(F$Extract(130,17,x))
X$ x=F$Extract(0,128,x)
X$! Device and Directory specifications have to be stripped from the file name,
X$! otherwise DIRECTORY produces weird lists.
X$ If F$Parse(x,,,"Device","Syntax_Only") -
X    +F$Parse(x,,,"Directory","Syntax_Only").eqs.This_Directory then -
X`009goto Add_Time
X$!NewDir:
V$! The reason this procedure works only in the current default directory is th
Xe
X$! odd behaviour of DIRECTORY with arguments like
X$! DIR D_3:[FRED]A.A,D_3:[FRED]C.D
X$ Say "%-TDIR-W-NOTACROSSDIR  TD doesn't work across directories."
X$ Say "%-TDIR-W-OMITFILE  ",x
X$ Goto Next
X$Add_Time:
X  x=F$Parse(x,,,"Name","Syntax_Only")+F$Parse(x,,,"Type","Syntax_Only") -
X   +F$Parse(x,,,"Version","Syntax_Only")
X$ x[128,16]:="''File_Date'"
X$ Write WorkFile x
X$ nf=nf+1
X$!
X$Next:
X$ Read/End_of_File=Done Input x
X$ Goto Next0
X$!
X$No_Dir:
X$ Close Input
X$ Goto Exit
X$Done:
X$ Close Input
X$ Close WorkFile
X$!
X$ Say "%-TDIR-I-SORT  Sorting (''Sort_it') dates for ''nf' files"
X$ Sort/Key=(Position:129,Size:16,'Sort_it')/Key=(Position:1,Size=128) -
X`009'WorkFile'1 'Workfile'2
X$!
X$! Read records from the sorted file and insert a DIRECTORY command every
X$! 1023 characters.
X$! Find length of command (+11 is for ``DIRECTORY`` plus `` -``):
X$ lc=F$Length("''Which_Date'''Qual'")+11
X$ Open/Read Input 'WorkFile'2`009`009`009! The sorted file
X$ Read/End_of_File=noFile Input x`009`009! Anything there?
X$ Files=F$Element(0," ",x)
X$ Cont=""
X$ On Warning then goto Debug
X$Read_Sort0:
X$ lf=F$Length(Files)
X$Read_Sort:
X$ Read/End_of_File=EOF Input x`009`009`009! Read record n
X$ x=","+F$Element(0," ",x)
X$ lx=F$Length(x)
X$ If lc+lf+lx.ge.1023 then goto Dir
X$ Files=Files+x
X$ lf=lf+lx
X$ Goto Read_Sort
X$Dir:
X$ If Cont.nes."" then 'Cont
X$ Directory'Which_date''Qual' -`009`009`009! ... another DIRECTORY
X  'Files
X$ Files=F$Extract(1,lx-1,x)
X$ Cont=Say+" "" (continued)"""
X$ Goto Read_Sort0
X$Debug:
X$ Say "%-TDIR-F-DEBUG  Debug information from procedure TDIR:"
X$ Show Symbol files
X$ Show Symbol lf
X$ Show Symbol lc
X$ Stop
X$!
X$noFile:
X$ Close Input
X$ Goto Exit
X$!
X$EOF:
X$ Close Input
X$ If Cont.nes."" then 'Cont
X$ Directory'Which_date''Qual' -`009`009`009! Write the last command
X  'Files
X$!
X$Exit:
X$ If .not.F$TRNLNM("COMMAND_DEBUG") then Delete 'WorkFile'%;*
X$Exit2:
X$ If F$TRNLNM("WorkFile").nes."" then Close WorkFile
X$ If F$TRNLNM("Input").nes."" then Close Input
X$ Verify=F$Verify(Verify)
$ GoSub Convert_File
$ Exit