Copyright 1994-2016 by Kevin G. Barkes All rights reserved. This article may be duplicated or redistributed provided no alterations of any kind are made to this file. This edition of DCL Dialogue is sponsored by Networking Dynamics, developers and marketers of productivity software for OpenVMS systems. Contact our website www.networkingdynamics.com to download free demos of our software and see how you will save time, money and raise productivity! Be sure to mention DCL Dialogue! DCL DIALOGUE Originally published June, 1994 Stop the Internet, I Want to Get Off By Kevin G. Barkes Alright, I've had enough. For the past year or so I've been surfing around the Internet, cruising down the much-hyped information superhighway, and I've decided to pull off onto a slow-speed access road for a while. The problem? I'm burned out. Aside from person-to-person electronic mail and a few special-interest mailing lists, I've pretty much given up trying to follow Usenet newsgroups. One big roadblock is volume. My bulletin board system (BBS) carries only 300 or so of the available 4,000+ Usenet newsgroups. In a typical month, there are over 250,000 messages on my system. If I spent eight hours a day reading Usenet, I'd have to read well over 1,000 messages an hour to get through them all in 30 days. Much of the volume is due to "cross-posting", a rather insidious practice where a message is entered in multiple news groups, ostensibly to insure they are read by all possible interested parties. What generally happens is an arithmetic increase in the volume of messages directly attributable to cross-posting, and a geometic increase in messages due to people complaining to those who cross-posted. Then there are the off-topic messages, the persons who feel it necessary to foist their political manifestos on everyone with a screen, and, of course, the infamous Dave Rhodes, whose chain-letter make money fast scam surfaces at least three times a week all over the net. The situation is getting worse because of increased access to the Internet via other online services, and friendlier user interfaces. To paraphrase Shaw's Principle, if you make the Internet simple enough for an idiot to use, idiots will use it. And not only your plain vanilla idiots, but rude, mean and ignorant idiots as well. Some Usenet newsgroups remind me of that frightening period of my life when a friend and I had been volunteered to watch the church nursery on an Easter Sunday. We tried to carry on a conversation while surrounded by children stoked to the gills on chocolate bunny heads, who spent most of the morning screaming at each other, engaging in various anti-social behaviors and generally making intelligent communication impossible. To be fair, it's amazing the Internet has even managed to survive this anarchic period of explosive growth and commercialization. In time, the network will undoubtedly evolve into a form which can better handle its problems. In the meantime, I'm a firm believer in the time=money school of thought. I'd rather pay some bucks to CompuServe or GEnie or DECUServe and have access to a higher quality of information in a more manageable quantity than spend hours slogging through the chaff that threatens to choke Usenet. My grandfather was right. You do get what you pay for. ********** RoboVAX Fix. Patrick Sharkey of Charles Stark Draper Laboratory is one of those individuals who have squashed a bug or two or added an enhancement to the robovax.com procedure published in the March 1994 issue. Patrick found that as originally written, RoboVAX was unable to handle checking on some processes, specifically "VAXsim V1.5-127". "I modified the C_PROC subroutine using the context,pid, and getjpi lexicals," Patrick reported. "Now, it works perfectly:" $ C_PROC: SUBROUTINE $ tmp = f$context("process",ctx,"PRCNAM","*''p1'*","EQL") $ pid = f$pid(ctx) $ proc = f$getjpi("''pid'","PRCNAM") $ IF "''proc'" .eqs. "" THEN- REPLY/URGENT/USER= "''P1' process has exited $ ENDSUBROUTINE For historical pursposes, it should be noted the original RoboVAX was written prior to the introduction of the f$context lexical function. Patrick's enhancement also shows why it's a good idea to check the OpenVMS release notes from time to time. ******************* TREED. Seann Herdejurgen's TREE.COM procedure (Program 1) is a relatively small procedure that produces an attractive screen display of a directory tree. I welcome reader submissions, but remember: keep them short and eliminate as much site-specific information as necessary. ****************** Readers checking in this month include Mark McCracken, Lynn Lasswell, Ron Brinkman, Larry Clegg, David Courtade, Mike Titus, John Clemens, David Bibeau, Ken Ward, Carl Wheeler, Robert Weiner and David Wilde. Again, a reminder: if you send me mail via Internet, be certain to include a voice or fax phone number in your message. Some systems seem to mangle addresses in transit, making it impossible to reply electronically. And while on the subject of electronic mail and addresses... I'm hoping it has nothing to do with my Internet domain name, kgbreport.com, but every Thursday since linking up to the Internet my system receives two messages addressed to heino@kgb.incubus.sub.org from a private uucp site in Wirzburg, Germany. I'm hoping it's a mail snafu and not a CIA holdover from the cold war. But just in case: the correct response to "I've got the yo-yo" is, of course, "I've got the string." ******************* Kevin G. Barkes is an independent consultant who is sobered by the realization that the $300 he spent on his daughter's prom gown makes it the most expensive piece of clothing he's ever purchased. Kevin lurks on comp.os.vms and can be reached at kgbarkes@gmail.com. *************** PROGRAM 1. $ ! TREE.COM $ ! Written by Seann Herdejurgen $ ! $ ! This command file displays a directory $ ! tree of the directory specified, $ ! or if none is given, the current default $ ! directory. The TREE command can be set up as $ ! a DCL command with the following line: $ ! $ TREE :== @:TREE.COM $ ! The syntax for the TREE command is $ ! $ TREE directory $ ! For example: $ TREE DUA0:[SYS0] $ ! $ VERIF='F$VERIFY(0)' $ ON CONTROL_Y THEN GOTO DONE $ ESC[0,8]=27 $ DIR=F$ENVIRONMENT("DEFAULT") $ IF P1 .NES. "" THEN DIR= - F$PARSE(P1,,,"DEVICE")+F$PARSE(P1,,,"DIRECTORY") $ DELIMETER=F$EXTRACT(F$LENGTH(DIR)-1,1,DIR) $ IF F$PARSE(DIR) .NES. "" THEN GOTO START $ WRITE SYS$ERROR - "%TREE-E-OPENIN, error opening ",- F$PARSE(DIR,"*.*;*",,,"SYNTAX_ONLY")," as input" $ WRITE SYS$ERROR "-RMS-E-DNF, directory not found" $ WRITE SYS$ERROR "-SYSTEM-W-NOSUCHFILE, no such file" $ GOTO EXIT $ START: $ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT "Directory ",DIR $ WRITE SYS$OUTPUT ESC,"(0" $ COUNT=0 $ P=1 $ F'P'=0 $ C'P'=0 $ N'P'=F$SEARCH(DIR+"*.DIR;1",P) $ LOOP: $ IF F$PARSE(N'P',,,"NAME") .EQS. "000000" THEN- N'P'=F$SEARCH(DIR+"*.DIR;1",P) $ IF N'P' .EQS. "" THEN GOTO NEXT $ FILESPEC=N'P' $ N'P'=F$SEARCH(DIR+"*.DIR;1",P) $ COUNT=COUNT+1 $ FILENAME=F$PARSE(FILESPEC,,,"NAME") $ C=P+1 $ C'C'=F$LENGTH(FILENAME)+1 $ P'P'="."+FILENAME+DELIMETER $ DIR=DIR-DELIMETER+P'P' $ LINE:="" $ C=0 $ L=0 $ BUILD: $ C=C+1 $ IF C.NE.1 .AND. F'C'.NE.1 THEN LINE[L+C'C',1]:="x" $ L=L+C'C' $ IF C .NES. P-1 .AND. P.NE.1 THEN GOTO BUILD $ IF N'P'.EQS."" .AND. P.NE.1 THEN LINE[L+C'P',1]:="m" $ IF N'P'.NES."" .AND. P.NE.1 THEN LINE[L+C'P',1]:="t" $ IF N'P'.EQS."" .AND. P.NE.1 THEN F'P'=1 $ IF N'P'.NES."" .AND. P.NE.1 THEN F'P'=0 $ LINE[L+C'P'+1,F$LENGTH(FILENAME)]:='FILENAME' $ IF F$SEARCH(DIR+"*.DIR;1").NES."" THEN- LINE[L+C'P'+F$LENGTH(FILENAME)+1,1]:="k" $ FIX: ! The underscore character is not in the graphics character set $ U=F$LOCATE("_",LINE) $ IF U.NE.F$LENGTH(LINE) $ THEN $ LINE[U,1]:="s" $ GOTO FIX $ ENDIF $ WRITE SYS$OUTPUT LINE $ P=P+1 $ N'P'=F$SEARCH(DIR+"*.DIR;1",P) $ GOTO LOOP $ NEXT: $ P=P-1 $ IF P .EQS. 0 THEN GOTO DONE $ DIR=DIR-P'P'+DELIMETER $ GOTO LOOP $ DONE: $ WRITE SYS$OUTPUT ESC,"(B" $ IF COUNT.EQ.1 $ THEN $ WRITE SYS$OUTPUT "Grand total of 1 subdirectory" $ ELSE $ WRITE SYS$OUTPUT "Grand total of ''COUNT' subdirectories" $ ENDIF $ EXIT: $ VERIF=F$VERIFY(VERIF) $ EXIT