Table of Contents From the Editor . . . . . . . . . . . . . . . RST-2 Letters to the Editor . . . . . . . . . . . . RST-3 Hardware Update Bulletin. . . . . . . . . . . RST-7 Software Update Bulletin. . . . . . . . . . . RST-9 Software Performance Report (SPR) Log . . . . RST-9 Version 9.4 Monitor Internals Update. . . . . RST-9 CUSP of the Month - DISPLY. . . . . . . . . . RST-15 =============================================================== From the Editor Terry Kennedy Well, I'm still recovering from the Fall Symposium as I write this. It was a pleasure to meet some of the people I've communicated with over the Bulletin Board system in person. Thank you all for your comments and suggestions. We had a full schedule of RSTS sessions, which were well attended. In addition to DEC's presentations, we had many user presentations. It is good to see so many sessions given by users. DEC had a number of sessions where you could get an advance peek at some of the ongoing issues affecting RSTS users. Among there were a RSTS/VMS compatibility session where pre-release copies of the RSTS/VMS Compatibility Guide were given out. There was also a session on Operator Services Futures, where DEC gave an outline of a hypothetical package which, if implemented, could replace OPSER and give added functionality to PBS. Most of our sessions were taped, so you can order the tapes if you missed the session or didn't get to go at all. It is good to see so many contributions this month. There should be something for everyone in this issue, from an entertaining 'snake' game to some complex modifications to the DISPLY program. Since the how-to form has been removed, here is how to contact me for submissions, etc.: Via US Mail: Via UPS, FedEx, etc.: Terence M. Kennedy Terence M. Kennedy St. Peter's College St. Peter's College Department of Comp. Science Department of Comp. Science 2641 Kennedy Blvd. 121 Glenwood Avenue Jersey City, N.J. 07306 Jersey City, N.J. 07306 (201) 435-1890 (201) 435-1890 You may electronically submit material by calling the RSTS SIG bulletin board system at (201) 915-9361, or you may reach me as user KENNEDY on both DCS and DECUServe, if you have access to either of those systems. You may submit material on RX50's or RX33's (in RSTS or RT11 format), on 800, 1600, 3200, or 6250 BPI 9-track tape (in DOS, ANSI, BRU, RSTS BACKUP or VMS BACKUP format), or on PC-DOS floppies (54 or 32 inch format). If you are really desperate, I can also accept RSTS or RT11 format RL02 and RK07 disks. You may also submit hardcopy documents, but these will take longer to get into print. =============================================================== Letters to the Editor Otto W Lutz Dec 20th, 1987 PO Box 236 CH-8402 Winterthur Switzerland To Terence M Kennedy St Peter's College Dpt Computer Science 2641 Kennedy Blvd Jersey City, NJ 07306 U S A Re: RSTS Newsletter Dear Terry, Sorry for the delay in my response to the fresh wind you brought into the Newsletter. I know the problem for I've tried the same for the Swiss Newsletter for more than a year now. I include the Reader Survey form hereafter; a modest try of a contribution I have sent earlier through the Newsletter Dialup System. I have tried again to communicate through the Dialup System using the new number and got quite well into the system. Once in the MAIL program however there was no ways to reach NEWS as described in the October NEWSLETTER. The system kept answering me "%No such user as news". Do I need a private account for a more successful communication? [Ed: No, there was a problem that the "NEWS" nickname went away when I installed the DECmail update. I have now made NEWS a real username so this won't happen again.] Thanks again and best regards Otto W Lutz Att: Article ODT with RSTS-DCL The following question I owe to Adrian Coughlan and Malcolm Nicholas of the DEC Training Center in Reading. I have submitted it to the Swiss Newsletter earlier, amazingly with no visible response. I therefore dare repeating it here hoping for more success. If it really were trivial I bet a trip to Switzerland to the one who explains a solution to me (joke). Here it comes: When using the On-line Debugging Tool in developing Macro-11 programs you may encounter a slightly confusing message from the system as the following sequence of events shows. According to the manuals the procedure is as follows: $ MACRO/LIST file-spec.MAC --> produces: file-spec.OBJ file-spec.LST $ LINK/RSX11/DEBUG/MAP file-spec --> file-spec.TSK ^ file-spec.MAP this qualifier asks for the CMD00x.TMP RSX-type linker under RSTS ODL00x.TMP DCL (see $ HELP LINK) $ RUN file-spec ?Illegal I/O channel You receive the above message and consequently you won't be able to start the debugging run. The problem most probably lies with the temporary command-file created by the linker, which looks like this: ; TKB .CMD file created by DCL LINK V9.3-18 12-Jul-87 20:35 SY:[1,3]TEST1/FP/DA,TEST1=ODL002.TMP/MP UNITS =14 ASG =SY:1:2:3:4:5:6:7 ASG =SY:8:9:10:11:12:13:14 // The command file specifies 14 (I/O) units while RSTS/E can handle only 12 of them. Therefore you are stuck, unless you either design assembler programs that do not need any debugging - without the "DEBUG"-qualifier the above procedure works fine - or you refrain from using the elegance of the DCL-language and call the task builder directly instead of the the DCL LINK step above: $ TKB file-spec/DA,file-spec=file-spec $ RUN file-spec _ODT:file-spec _ ... This way you can run the debugging in the usual i.e. the RSX- way. It would be interesting to learn from the readers whether they have heard of the problem, which most probably has its origin in the fact that the command-file meant 14 (octal) which could be handled by the RSTS-monitor or whether there is a more elegant solution to work around it. Otto Lutz, PO Box 236, CH-8402 Winterthur, Switzerland **************** Dear Terry, Recently I picked up SCAN from your system. It's a useful program, but I found a few limitations that had relatively simple fixes, so I'm offering you a revised version with the following changes: matching a string that spans a block boundary, matching all occurrences of the string (instead of just the first one), removing some unused code, and replacing your octal print routine with one I'd previously designed which is about as fast as possible in a dialect of BASIC. Since this program doesn't print many octal numbers, it's not so important here, but people might find other situations where it would be of use, so I offer it in this context. Feel free to share this with anyone who might be interested. [Ed: This program is available on the SIG bulletin board system as file [49,1]SCAN2.BAS] Kelvin Smith Financial Computer Systems, Inc. 1 Strawberry Hill Ct. Stamford, CT 06902 Att: Program 1000 EXTEND 1010 ON ERROR GOTO 32000 & \ PRINT "Binary file search 1.20 - 16-Nov-87 KS" & \ PRINT 1020 PRINT "File"; 1030 INPUT LINE F1$ & \ F1$=MID(F1$,1%,LEN(F1$)-2%) 1040 PRINT "Search string"; & \ INPUT LINE S$ & \ S$ = LEFT(S$, LEN(S$) - 2%) 1050 OPEN F1$ FOR INPUT AS FILE #1%, RECORDSIZE 1024% 1060 FIELD #1, 511% + LEN(S$) AS I1$ & \ I%=1% 1070 GET #1%, BLOCK I% & \ ST% = 1% 1075 BYT%=INSTR(ST%,I1$,S$) & \ GOTO 1080 IF BYT%=0% & \ PRINT "Found in block ";NUM1$(I%);" ("; & \ F.NUM% = I% - 1% & \ GOSUB 11000 & \ F.NUM% = BYT% - 1% & \ PRINT "), offset ";NUM1$(F.NUM%);" ("; & \ GOSUB 11000 & \ PRINT ")." & \ ST% = BYT% + LEN(S$) & \ GOTO 1075 1080 I%=I%+1% & \ GOTO 1070 & 11000 REM SUBROUTINE TO PRINT IN OCTAL 11010 IF F.NUM% < 0% & THEN F.I$ = "1" & ELSE F.I$ = "0" & 11020 F.I$ = F.I$ & + CHR$( (((F.NUM% AND 16384%) <> 0%) AND 4%) & +(((F.NUM% AND 8192%) <> 0%) AND 2%) & +(((F.NUM% AND 4096%) <> 0%) AND 1%) + 48%) & + CHR$( (((F.NUM% AND 2048%) <> 0%) AND 4%) & +(((F.NUM% AND 1024%) <> 0%) AND 2%) & +(((F.NUM% AND 512%) <> 0%) AND 1%) + 48%) & + CHR$( (((F.NUM% AND 256%) <> 0%) AND 4%) & +(((F.NUM% AND 128%) <> 0%) AND 2%) & +(((F.NUM% AND 64%) <> 0%) AND 1%) + 48%) & + CHR$( (((F.NUM% AND 32%) <> 0%) AND 4%) & +(((F.NUM% AND 16%) <> 0%) AND 2%) & +(((F.NUM% AND 8%) <> 0%) AND 1%) + 48%) & + CHR$( (F.NUM% AND 7%) + 48%) & \ PRINT F.I$; & \ RETURN & 32000 IF ERL=1050 THEN PRINT "?That file does not exist -"+ & "try again..." & \ RESUME 1020 32010 IF ERL=1070 THEN PRINT "Done..." & \RESUME 32767 32020 IF ERL=1020 THEN RESUME 32767 32030 IF ERL=1030 THEN RESUME 32767 32040 IF ERL=1040 THEN RESUME 32767 32050 PRINT "Received error ";NUM1$(ERR);" at line "; & NUM1$(ERL);"." & \ RESUME 32767 & 32767 END **************** Dear Mr. Kennedy: In Issue 12 of TUG lines, The Journal of the Turbo User Group, Re`ne H. Ritter provided the Turbo Pascal source code for a Snake Game. This game is said to be well known to VAX users. After getting it up and running on my PC and adding color and various bells and whistles, I decided to try to "port" it to RSTS. A "port" to Oregon Pascal-2 "worked" except I was unable to get the time between "moves" to less than 1-second -- a no- wait or very short wait read proved to be beyond my programming capabilities in Pascal or MACRO-11. However, BASIC-PLUS-2 has some nice features: dummy = ONECHR(1) \ GET #1, RECORD 8192 either gets a character or generates a trappable error, so "real-time" screen handling is feasible. I hereby submit SNAKE.B2S for possible publication in the RSTS Newsletter. It is written in BASIC-Plus-2 as implemented in version 2.4. [Ed: The program in both .B2S and .TSK format is available in account [49,1] on the SIG bulletin board system. It is 7 pages long, so it hasn't been reprinted here - if you cannot access the BBS for some reason and want a copy, drop me a note and I'll see what can be done.] NOTES: 1. The Direct cursor addressing functions are specific to terminal types used at our site and will undoubtedly require modification at other sites for terminals other than VT-102 & VT-220. 2. The existence or protection code of file GM:SNAKE.OK determines whether the program runs. 3. To be fun, SNAKE should be run when you are alone on the system -- it uses all the cycles it can get. Running SNAKE at ZERO priority when someone else might want to do something on the system is NOT advised. Sincerely, Larry Ingersoll System Programmer Tri-State University Angola, Indiana 46703-0307 =============================================================== Hardware Update Bulletin At the Symposium I received a number of requests for information about the current revision level of various hardware devices found on RSTS systems. Here is a "dump" of my information so far. If you have information on a device not listed, please send it in so I can publish it. Please note - only experienced users should attempt to determine board revisions by opening the CPU cabinet. System damage caused by users will generally not be covered by a service contract. When in doubt, contact your service representative to check these revision levels. J-11 based systems (11/53, 73, 83, 84, and assorted third- party products) - The minimum revision of the J-11 to work with a floating point chip is Rev. 8. The J-11 is the large white chip with two gold squares on it, found on the CPU board. There is a part number stamped on the white space between the two gold squares. The part number is in the form xx-xxxxx-xx. The last two digits are the revision level. The companion revision to this for the floating point chip is 5. The floating point chip is a smaller brownish-purple chip on the same board as the J-11 chip. It also uses the same part-numbering system, but the last two digits should be 05 or higher. Rumor has it that 11/84 systems need a Rev. 9 or higher J11 for proper operation. A quick test to see if you have a floating point chip is to boot your system and type HA LI at the Start timesharing? question. If your system responds with the text "FPU with FPA" you have a floating point chip at the correct revision level. If you only get the "FPU" part, your system does not have a floating point chip installed. 11/44 systems - The latest revision of the CPU that I know of prints "(Console V3.40C)" when powered on. If you don't get this message, or if you have the "user hostile" console that prints "?01 SYN" whenever you make a typo, you should see about getting the updates installed. TU-80 tape subsystem - Early revisions of the TU80 controller cannot read data blocks of less that 14 bytes, nor can they do a read reverse with an odd byte count. Very few users will ever experience either of these problems, but if you are trying to read foreign tapes or are writing your own tape handling utilities, this can affect you. The way to tell if this revision is installed in your system is to look on the tape controller card in the CPU (handle code M7454). If it is installed, there will be a ROM part number 278F3 at either location E95 or location 3A. If you need the upgrade, the DEC part number for the kit is EQ-01349-01. LP-11 printer controller - There is a timing problem on some controller cards when used with LP25 or LP26 printers. The symptom can be a '?Device hung or write locked' message even though the printer is on-line and ready. Also, other odd problems can occur. Field Service generally will approach the problem as a "static problem", which it is not. The printer controller in the CPU (handle code M7258) should be revision T or higher. The quick way to check for this is to look at the card (the side with the parts on it) and see if there are 2 wires running from near the top right of the card to the bottom of the card. RQDX1 disk controller (found in older Micro PDP-11 systems) - There are a number of problems with early RQDX1's. Symptoms can include odd system hangs, logging errors each time the system is booted, etc. To check revision levels, look at the controller card (handle code M8639) [Note - there are two different boards with this code - only the RQDX1 has the problem - the RQDX1 can be identified by a board color that is mustard-yellow. The RQDX2 board is dark brown]. Look at the two socketed parts on the left side of the board. They should be labeled 172E5 and 173E5. If they are not, the upgrade kit is DEC part number EQ-01361-01. =============================================================== Software Update Bulletin Several software updates have arrived since the last issue. DECmail-11 V3.1 and Basic-Plus-2 V2.5 both arrived and installed with no difficulty. If you have received an update, please call the Bulletin Board system and post the information so it can be distributed to others. =============================================================== Software Problem Report (SPR) Log Please send the newsletter editor copies of any SPR's (and Digital's answer) on RSTS/E, DECNET/E, or RSTS layered products. We will print any that are of general interest. The reason for this is that many SPR's are answered with a patch or a notice of restriction, but due to space considerations, they are not published in the Software Dispatch. Since we're desperate for material, this should be useful information and we will print it. The Newsletter system will be expanded in the near future to allow bulletin-board style messages to be posted for users to exchange this information, which should make it much more timely. =============================================================== RSTS/E Monitor Internals V9.4 Update - Session Notes The following slides are from Mike Mayfield's excellent session on "RSTS/E Monitor Internals - V9.4 Update" at the Fall Symposium. These slides may be used to supplement the information in the DEC RSTS/E Internals and Data Structures manual (DEC order no. AA-CL35B-TC), which is now somewhat out of date. The change bars in the right margin indicate areas changed from those described in the DEC manual. JOB DATA BLOCK (JDB) +----------------------------------------+ | POINTER TO IOB | 0 JDIOB |----------------------------------------| | PRIMARY JOB STATUS FLAGS | 2 JDFLG |----------------------------------------| JDPOST 5 | POSTING MASK | IOSTS FOR JOB | 4 JDIOST |----------------------------------------| | POINTER TO JOB'S WORK BLOCK (WRK) | 6 JDWORK |----------------------------------------| | POINTER TO JOB'S JBPPN TABLE ENTRY -30 | 10 JDJDB2 | |----------------------------------------| JDJBNO 13 | JOB NUMBER *2 | 2ND JOB STAT FLGS | 12 JDFLG2 |----------------------------------------| | POINTER TO JOB'S RTS DESCRIPTOR | 14 JDRTS |----------------------------------------| | RESIDENCY QUANTUM | 16 JDRESQ |----------------------------------------| | | 20 JDMCTL | | | MEMORY CONTROL SUB-BLOCK | 22 | | | | 24 | +-------------------| | | JOB SIZE | 26 JDSIZE | +-------------------| | | 30 |----------------------------------------| | L3Q BIT TO SET ON RESIDENCY | 32 JDRESB | |----------------------------------------| | THIRD JOB STATUS FLAGS | 34 JDFLG3 | |----------------------------------------| | FOURTH JOB STATUS FLAGS | 36 JDFLG4 | +----------------------------------------+ PRIMARY JOB STATUS FLAGS (JDFLG) <0> JFPOST UPDATE FIRQB OR XRB USING JDPOST <1> JFIOKY UPDATE KEYWORD AND POST JDIOST TO FIRQB <2> JFCEMT LET COMPLEX EMT HANDLING CATCH JOB POSTING <3> JFCC ^C HAS BEEN TYPED <4> JF2CC AT LEAST 2 ^C'S HAVE BEEN TYPED <5> JFFPT TAKE FLOATING POINT EXCEPTION TRAP (P.FPP) <6> JFGO IGNORE JFREDO <7> JFREDO JOB IS STALLED WAITING ON I/O COMPLETION <8> JFSYST JOB MAY USE TEMPORARY PRIVILEGES <9> JFFPP SAVE FPU HARDWARE REGISTERS WITH JOB CONTEXT <10> JFPRIV JOB IS LOGGED INTO A PRIVILEGED ACCOUNT <11> JFSYS JOB IS CURRENTLY USING TEMPORARY PRIVILEGES <12> JFRSTD JOB HAS AN AST COMPLETION RTNE DELIVERY PENDING | <13> JFBIG JOB CAN EXCEED ITS PRIVATE MEMORY SIZE MAXIMUM <14> JFLOCK JOB IS LOCKED IN MEMORY <15> JFSPCL CHECK JDFLG2 FOR SPECIAL PROCESSING REQUIREMENTS JOB STATUS FLAGS (JDFLG2) <0> JFCTXT THE JOB'S CONTEXT SHOULD BE SAVED <1> JFPRTY A MEMORY PARITY ERROR OCCURRED <2> JFRUN A NEW PROGRAM RUN EREQUEST OCCURRED <3> JFSWPR A RTS OR RESIDENT LIBRARY LOAD FAILURE OCCURRED <4> JFSTAK A STACK OVERFLOW OCCURRED <5> JFSWPE A SWAP ERROR OCCURRED <6> JFDINI THE JOB'S D-SPACE AREA NEEDS TO BE INITIALIZED | <7> JFKILL THE JOB SHOULD BE KILLED JOB STATUS FLAGS (JDFLG3) <0> J2FSPW JOB IS BEING SPAWNED (LOGGED IN) | <1> J2BAT THIS IS A BATCH JOB (PBS) | <2> J2NET THIS IS A NETWORK JOB (NPKDVR) | <3> J2KIL2 LOGOUT COMPLETE FOR JOB KILL | <4> J2IHDR JOB'S HEADER NEEDS INITIALIZATION | <5> J2CAPT RUNNING IN A CAPTIVE ACCOUNT | <6> J2PRVP PRIVILEGED PROGRAM RUNNING (JFSYS IS/WAS SET) | <7> J2ICF EXECUTING FROM AN INDIRECT COMMAND FILE | <8> J2VFY VERIFY MODE IS IN EFFECT IN DCL | <9> J2NDAT NO-DATA MODE IS IN EFFECT IN DCL | <10> J2SYSV SYSTEM PASSWORD HAS BEEN VALIDATED | <11> J2ASTA AST POSTING ROUTINE IS CURRENTLY ACTIVE | <12> J2ASTD AST POSTING IS DISABLED | <13> J2NCHO NO-ECHO MODE IS IN EFFECT IN DCL | <14> J2NERR NO-ERROR MODE IS IN EFFECT IN DCL | <15> J2LOG DCL LOG FILE IS ENABLED | JOB STATUS FLAGS (JDFLG4) <0> JDFSTM USE MAPPING DESCRIPTOR ENTRIES | <1:4> UNUSED <5:15> J2SLAP POINTER TO JOB'S SLA LIBRARY (BITS 0:4 ARE 0) | JOB CONTROL REGION (JCR) +----------------------------------------+ | SAVED PC FOR COMPLEX EMT HANDLING | 0 JCCEPC |----------------------------------------| | SAVED R1 FOR COMPLEX EMT HANDLING | 2 JCCER1 |----------------------------------------| | SAVED APRS FOR COMPLEX EMT HANDLING | 4 JCCEAP |----------------------------------------| | CPU TIME (LSB) | 6 JCCPU |----------------------------------------| | CONNECT TIME | 10 JCCCON |----------------------------------------| | KILO-CORE TICKS (LSB) | 12 JCKCT |----------------------------------------| | DEVICE TIME | 14 JCDEV |----------------------------------------| JCCPUM 17 | CPU TIME (MSB) | KCT (MSB) | 16 JCKCTM |----------------------------------------| | | 20 JCNAME | PROGRAM NAME (IN RAD50) | | | 22 |----------------------------------------| | POINTER TO DEFAULT RTS | 24 JCDTRS |----------------------------------------| | | 26 JCPRIV | | | CURRENT PRIVILEGES | 30 | | | | 32 |----------------------------------------| | | 34 JCSPRV | | | SAVED PRIVILEGES | 36 | | | | 40 |----------------------------------------| | | 42 JCAPRV | | | AUTHORIZED PRIVILEGES | 44 | | | | 46 |----------------------------------------| | | 50 JCALPV | | | ALTERNATE PRIVILEGES FOR PRIV. CHECKS | 52 | | | | 54 |----------------------------------------| | ALTERNATE PPN FOR PRIVILEGE CHECKS | 56 JCALPP |----------------------------------------| | RESERVED | NEW JOB SIZE | 60 JCSIZN |--------------------+-------------------| JCBRST 63 | RUN BURST | PRIORITY | 62 JCPRI |--------------------+-------------------| JCSWAP 65 | SWAP SLOT NUMBER | MAXIMUM MEMORY | 64 JCSIZM |----------------------------------------| | POINTER TO RECEIVER ID (RIB) | 66 JCMPTR |----------------------------------------| JCDSIZ 71 | D-SPACE ALLOCATION | I-SPACE ALLOCATION| 70 JCISIZ |----------------------------------------| | DCN OF FIRST UFD BLOCK ON SY0: | 72 JCUFDR |----------------------------------------| | POINTER TO WINDOW DESCRIPTOR (WDB) | 74 JCWPTR |----------------------------------------| JCEXST 77 | EXIT STATUS | HEADER SIZE | 76 JCHDRS |----------------------------------------| | | 100 JCPFB | | : POINTERS TO WINDOW CNTRL BLOCKS (WCBS) : : FOR 16 PERMANENT DCL FILES : | | 136 |----------------------------------------| | POINTER TO FIRST PENDING AST BLOCK | 140 JCASTQ |----------------------------------------| | POINTER TO LAST PENDING AST BLOCK | 142 JCASTT |----------------------------------------| | POINTER TO AST BLK FOR SIMULATED ASYNC | 144 JCASTS |----------------------------------------| | SLEEP TIME | 146 JCCLOK |----------------------------------------| | DCL CONTEXT WORD | 150 JCDCLW |----------------------------------------| | POINTER TO SPAWN PROCESS CONTROL AREA | 152 JCSPWN |----------------------------------------| | POINTER TO EMT LOGGER MESSAGE PACKET | 154 JCEMLP |----------------------------------------| | ^T CPU TIME | JCCPUI |----------------------------------------| | MAXIMUM ADDRESS (-1) OF JOB'S CUR. RTS | JCMHGH | |----------------------------------------| | MAXIMUM ADDRESS OF JOB'S I-SPACE SEG | JCMLOW | |----------------------------------------| | MAXIMUM ADDRESS OF JOB'S D-SPACE SEG | JCMDLO | |----------------------------------------| | MEMORY MAPPING FLAGS | JCMFLG | |----------------------------------------| | | JCMDE+ | : JOB'S USER I-SPACE MAPPING DESC ENTRIES: MOUSRI | | | |----------------------------------------| | | JCMDE+ | : JOB'S USER D-SPACE MAPPING DESC ENTRIES: MOUSRD | | | |----------------------------------------| | | JCMDE+ | : JOB'S SUPR I-SPACE MAPPING DESC ENTRIES: MOSUPI | | | +----------------------------------------+ MAPPING DESCRIPTOR ENTRY (MDE) +----------------------------------------+ | POINTER TO BASE ADDRESS FOR SEGMENT | 0 MDADDR |----------------------------------------| | OFFSET FROM BASE TO BEGINNING OF SEG | 2 MDOFF |----------------------------------------| | PAGE DESCRIPTOR VALUE FOR THIS SEG | 4 MDDESC +----------------------------------------+ QUOTA BLOCK (QTB) BUFFER (POINTED TO BY DSKQPT) +----------------------------------------+ | | 0 | | | LARGE BUFFER HEADER | 4 | | | | 6 |----------------------------------------| | POINTER TO NEXT QTB BUFFER | 10 |----------------------------------------| | | 12 : QTB #1 : | | 32 |----------------------------------------| | | 34 : QTB #2 : | | 54 |----------------------------------------| | | 56 : QTB #3 : | | 76 +----------------------------------------+ QUOTA TABLE BLOCK (QTB) +----------------------------------------+ | PPN | 0 QTBPPN |----------------------------------------| QTBDJB 3 | DETACHED JOB QUOTA | FLAGS | 2 QTBFLG |----------------------------------------| | LOGGED OUT QUOTA (LSB) | 4 QTBLOL |----------------------------------------| | LOGGED IN QUOTA (LSB) | 6 QTBLIL |----------------------------------------| QTBLOM 11 | LOGGED OUT Q (MSB) | LOGGED IN Q (MSB) | 10 QTBLIM |--------------------+-------------------| QTBCRM 13 | CURR BLK CNT (MSB) | RESERVE QTA (MSB) | 12 QTBRSM |----------------------------------------| | RESERVE QUOTA (LSB) | 14 QTBRSL |----------------------------------------| | CURRENT BLOCK COUNT (LSB) | 16 QTBCRL +----------------------------------------+ MEMORY CONTROL SUB-BLOCK (MCB) +----------------------------------------+ | POINTER TO PREVIOUS MCB (@M.PNXT) | 0 M.PPRV |----------------------------------------| | POINTER TO NEXT MCB | 2 M.PNXT |----------------------------------------| | SIZE OF CURRENT ITEM PLUS UNUSED | 4 M.TSIZ |----------------------------------------| M.CTRL 7 | STATUS | CURRENT ITEM SIZE | 6 M.SIZE |----------------------------------------| | BASE ADDRESS OF THIS MEMORY ITEM | 10 M.PHYA +----------------------------------------+ MEMORY CONTROL STATUS (M.CTRL) <8> REQ RESIDENCY REQUESTED BY JOB SWAPPING OUT <9> OUT SWAP DIRECTION IS "OUT" <10> IN SWAP DIRECTION IS "IN" <11> SWP A SWAP IS DESIRED OUT/IN SPECIFY DIRECTION | <12:15> MC.LCK NUMBER OF OUTSTANDING I/O'S (LOCKED) | FIXED MEMORY LOCATIONS 1000 DATE CURRENT DATE 1002 TIME CURRENT TIME 1004 TIMSEC SECONDS UNTIL NEXT MINUTE 1005 TIMCLK CLOCK TICKS UNTIL NEXT SECOND 1006 JOB JOB NUMBER (TIMES 2) OF CURRENT JOB 1007 NEXT JOB NUMBER (TIMES 2) OF NEXT JOB TO RUN 1010 JOBDA POINTER TO JOB'S DESCRIPTOR BLOCK (JDB) 1012 JDBF POINTER TO JOB'S PRIMARY FLAGS (JDFLG) 1014 IOSTS POINTER TO JOB'S I/O STATUS (JDIOST) 1016 JOBWRK POINTER TO JOB'S WORK BLOCK (WRK) 1020 JOBJD2 POINTER TO JOB'S JBPPN ENTRY AT OFFSET -30 | 1022 JOBRTS POINTER TO JOB'S RUN-TIME SYSTEM BLOCK (RTS) 1024 CPUTIM POINTER TO JOB'S CPU TIME BUCKET (JBTICK) | 1026 JOBWDB POINTER TO JOB'S WINDOW DESCRIPTOR (WDB) 1030 JOBJCR POINTER TO JOB'S JOB CONTROL REGION (JCR) | 1032 JOBJC6 MMU ADDRESS TO MAP JOB'S JCR ENTRY | 1034 JOBF3 POINTER TO JOB'S THIRD FLAG WORD (JDFLG3) | =============================================================== CUSP of the Month Every month, we'll pick a CUSP (Commonly Used System Program) and show you new things to do with it. This may be either in the form of patches, or simply a new way to use it. When we provide modifications to the source, we will only show the lines which need to be changed. If you decide you want the patch, edit a COPY of the program (NOT the original). Please remember that Digital can't be responsible for modified programs. This month's victim is DISPLY.BAS. DISPLY is a handy program which shows some of SYSTAT's information on a screen, updating the information at regular intervals. DISPLY hasn't received much attention from RSTS Development in recent years, though. It still outputs in VT52 mode, for example. This can become quite annoying, because it leaves a VT100-type terminal in VT52 mode when it is done. Therefore, I modified the program to output in VT100 mode. Of course, this means you can't run it on a VT52 anymore, so you should keep the unmodified original around, too. The first set of changes below, which are optional, modify some of the display parameters for neater formatting or minor enhancements. Each of the changes may be applied individually, or all of them applied, at your discretion. The second set of changes below shows the necessary modifications for VT100 mode output. All of the changes must be applied for the alterations to function properly. Having moved the program to VT100 mode, I thought "why not use 132-column mode to display more information?" The third set of changes below shows the (extensive) modifications for wide terminal output. if you have a "real" VT100, you may need the Advanced Video Option to display 24 lines of 132 columns. Newer DEC terminals (VT102, VT2xx, VT3xx) have AVO as a standard feature. Once the changes are made, the program will only display in 132-column mode, so you should keep an 80-column version around, too. The changes also set the maximum screen height to 66 lines, so if you have a full-page display, you can see everything on one screen. Again, all of the changes must be applied for the modification to work properly. A sample screen is shown below the third set of changes. Please bear in mind that as more information is displayed on the screen, the CPU usage of the program will increase. There are two ways to deal with this, however. The first is to change to a longer re-display interval. This way you can 'tune' the program to whatever level of CPU usage you can allow. The second is a matter of adjusting to the additional information presented - you will no longer have to sign on and do a SYSTAT to see more detailed information. Editor's note - I had hoped to provide these changes in CPATCH format because of the huge number of modifications. However, CPATCH command file format eludes me at the moment. Therefore, the instructions are still given 'the old way'. Some lines have been truncated or wrapped to fit the Newsletter margin settings. Any line ending with "..." is either a "don't care" or a "copy identically from the old line". How to re-compile the program with BP2: $ SWITCH BP2 SCALE 0 OLD DISPLY.BAS COMPILE DISPLY.OBJ/OBJ/CHA/LIN/NODEB/WOR/NOCRO/NOLIS/FLAG:NODEC $ SW DCL $ TKB DISPLY.TSK/FP=DISPLY.OBJ,LB:BP2OTS.OLB/LB / UNITS=13 ASG=SY:5:6:7:8:9:10:11:12 EXTTSK=512 LIBR=CSPLIB:RO // $ DELETE/NOLOG DISPLY.OBJ Section 1 - Optional cosmetic changes 1A - Change default order of items from bsy-dsk-rts-msg-buf-lib to buf-bsy-dsk-rts-msg-lib. Modify line 1040 as indicated: Old: \ W%(T%)=T% FOR T%=1% TO 9% & New: \ W%(1%)=5% & \ W%(2%)=1% & \ W%(3%)=2% & \ W%(4%)=3% & \ W%(5%)=4% & \ W%(6%)=6% & \ W%(T%)=T% FOR T%=7% TO 9% & 1B - Display total CPU time instead of increment by default. Modify line 1040 as indicated: Old: \ O%=2%+16384% & New: \ O%=0%+16384% & 1C - Fix spacing in CPU %'s when monitor statistics enabled. Modify line 1510 as indicated: Old: \ PRINT #1%, " "; & FNU$(H(0%,1%)-H(1%,1%)-H(2%,1%)-H(3%,1%)-H(4%,1%)); & "User, "; & FNU$(H(1%,1%));"I/O, "; & FNU$(H(3%,1%));"Exec,"; & " ";FNU$(H(4%,1%));"Idle, "; & FNU$(H(2%,1%));"Lost";CHR$(13%); & New: \ PRINT #1%, " "; & FNU$(H(0%,1%)-H(1%,1%)-H(2%,1%)-H(3%,1%)-H(4%,1%)); & " User, "; & FNU$(H(1%,1%));" I/O, "; & FNU$(H(3%,1%));" Exec, "; & FNU$(H(4%,1%));" Idle, "; & FNU$(H(2%,1%));" Lost";CHR$(13%); & Modify line 15180 as indicated: Old: \ T$=" "+NUM$(100.*T/H(0%,1%)+.05) & \ FNU$=MID(T$,INSTR(1%,T$,".")-3%,5%)+"%" & New: \ T$=NUM$(100.*T/H(0%,1%)+.05) & \ FNU$=MID(T$,1%,INSTR(1%,T$,".")+1%)+"%" & 1D - Change time display from hours:minutes:seconds to days hours:minutes:seconds. Modify line 15000 as indicated: Old: \ FNT$=FNT0$(3600.)+FNT0$(60.)+FNT0$(1.) New: \ T$="" & \ Z9%=T/86400. & \ T$=NUM1$(Z9%)+" " IF Z9%>=1% & \ T=T-(Z9%*86400.) & ! DAYS & \ Z9%=T/3600. & \ T$=T$+RIGHT(NUM1$(Z9%+100%),2%)+":" & \ T=T-(Z9%*3600.) & ! HOURS & \ Z9%=T/60. & \ T$=T$+RIGHT(NUM1$(Z9%+100%),2%)+":" & \ T=T-(Z9%*60.) & \ T$=T$+RIGHT(NUM1$(INT(T+100%)),2%) & ! SECONDS (TEMP) & \ FNT$=T$ & 1E - Display cpu usage as mmm:ss.t instead of mm:ss.t Modify line 15080 as indicated: Old: \ IF T<0. OR T>=36000. THEN & FNT1$="??:??.?" & New: \ IF T<0. OR T>=600000. THEN & FNT1$="???:??.?" & 1F - Prompt with program name as part of 'Continue' message. Modify line 19140 as indicated: Old: \ INPUT "Continue";T$ & New: \ INPUT "Continue (DISPLY)";T$ & Section 2 - Change to ANSI mode output Modify line 19110 as indicated: Old: V0$+"[?2l"+V0$+"\"+V0$+"G"+V0$+"H"+V0$+"J"+ & New: V0$+"<"+V0$+"[1;1H"+V0$+"[2J"+ & Modify line 20020 as indicated: Old: \ V4$=V4$+V0$+"A" FOR T%=0% TO ROWS% !default to TAB & \ V6$ = V0$ + "Y" !default to DCA & \ V2$=V2$+V0$+"C" FOR T%=0% TO COL% & New: \ V4$=V4$+V0$+"[1A" FOR T%=0% TO ROWS%!default to TAB & \ V6$ = V0$ + "[" !default to DCA & \ V2$=V2$+V0$+"[1C" FOR T%=0% TO COL% & Modify line 20100 as indicated: Old: \ V$=V0$+"[?2l"+V0$+"\"+V0$+"G"+V0$+"H"+V0$+"J" & New: \ V$=V0$+"<"+V0$+"[1;1H"+V0$+"[2J" & Modify line 200200 as indicated: Old: 20200 V$=V0$+"K" IF LEN(V$)=0% AND V1%<=COL% & New: 20200 V$=V0$+"[0K" IF LEN(V$)=0% AND V1%<=COL% & Modify line 20400 as indicated: Old: 20400 V$=V0$+"H" & New: 20400 V$=V0$+"[1;1H" & Modify line 20520 as indicated: Old: V$=V$+V6$+CHR$(32%+T0%)+CHR$(32%+T%) & New: V$=V$+V6$+NUM1$(T0%+1%)+";"+NUM1$(T%+1%)+"H" & Modify line 20550 as indicated: Old: V$=V$+LEFT(V2$,T%+T%-V1%-V1%) & New: V$=V$+LEFT(V2$,(T%-V1%)*4%) & Modify line 20580 as indicated: Old: V$=V$+LEFT(V4$,V2%+V2%-T0%-T0%) & New: V$=V$+LEFT(V4$,(V2%-T0%)*4%) & Modify line 20700 as indicated: Old: 20700 V$=V0$+"J" & New: 20700 V$=V0$+"[0J" & Section 3 - Change to 132-column output First, perform all of the Section 2 modifications. Modify line 910 as indicated: Old: 910 DIM B%(19,2), D%(19,8), M%(19,4), R%(39,6), & C%(4), H(4,1), & H0%(30), H1%(30), H2%(30%), & J%(20,8), R(63), I(63), & R0%(39,1), & L0%(10), T%(1), W%(9) & New: 910 DIM B%(19,4), D%(19,11), M%(19,4), R%(39,8), & C%(4), H(4,1), & H0%(30), H1%(30), H2%(30%), & J%(20,12), R(63), I(63), & R0%(39,1), & L0%(10), T%(1), W%(9), AN$(20) & Modify line 910 as indicated (at end of comments): Old: & New: ! & ! AN$() - USED TO STORE THE ACCOUNT NAMES OF ACTIVE & ! JOBS DISPLAYED ON THE SCREEN. & & Modify line 1120 as indicated: Old: \ T%=FNV%(10%,1%,T$) & New: \ T%=FNV%(15%,1%,T$) & Modify line 1210 as indicated: Old: T%=FNV%(0%,W%,SPACE$(45%)) & New: T%=FNV%(0%,W%,SPACE$(72%)) & Modify line 1400 as indicated: Old: \ T%=FNV%(45%,Z0%-1%,N$) IF Z0%<>2% New: \ T%=FNV%(72%,Z0%-1%,N$) IF Z0%<>2% Modify line 1440 as indicated: Old: 1440 T%=FNV%(45%,Z%,N$) FOR Z%=L0%(0%) TO Z0%-1% & STEP -1% & New: 1440 T%=FNV%(72%,Z%,N$) FOR Z%=L0%(0%) TO Z0%-1% & STEP -1% & Modify line 1450 as indicated: Old: TIME$(T%(1%))+" Up:") & New: TIME$(T%(1%))+" Last restarted on "+ & DATE$(PEEK(36%))+B$+TIME$(PEEK(38%))+" Up:") & Modify line 1480 as indicated: Old: \ T%=FNV%(63%+16384%,0%,FNT$(((PEEK(512%)-PEEK(... New: \ T%=FNV%(105%+16384%,0%,FNT$(((PEEK(512%)-PEEK(... Modify line 1490 as indicated: Old: \ T%=FNV%(10%,1%,T$) & New: \ T%=FNV%(15%,1%,T$) & Modify line 2070 as indicated: Old: ! 3 P (PRIORITY INSTEAD OF +-) & ! 4 L (LOGICAL DEVICE NAME) & New:: ! 3 UNUSED (WAS P[RIORITY]) & ! 4 UNUSED (WAS L[OGNAM]) & Old: ! 11 N (RTS INSTEAD OF 'WHAT') & New: ! 11 UNUSED (WAS N [RTS INSTEAD OF 'WHAT'])& Modify line 2160 as indicated: Old: ! W,L,K,P,O OR I & New: ! W,K,O OR I & Old: ! BIT 3 P & ! BIT 4 L & ! BIT 14 I & ! K,N AND O REMAIN UNTOUCHED. & New: ! BIT 14 I & ! K AND O REMAIN UNTOUCHED. & Old: ! BIT 11 N & ! OTHERS REMAIN AS THEY ARE. & New: ! OTHERS REMAIN AS THEY ARE. & Modify line 9400 as indicated: Old: 9400 DATA W,1,0, P,8,0, & L,16,0, O,0,32, & K,0,64, I,16384,0, & N,0,2048, *E*,0,0 & New: 9400 DATA W,1,0, O,0,32, & K,0,64, I,16384,0, & *E*,0,0 & Modify line 10000 as indicated (enter the new line all on the same line): Old: "Job Who Where What Size State Run-time Pr ") & New: "Job Who Name Where What Size State Run- time Pri/RB RTS") & Delete the entire text of line 10055. Modify line 10090 as indicated: Old: ! IF THE PPN HAS CHANGED THEN & New: \ AN$(L%)=FNACCOUNT.NAME$(PN%)+B$+B$ & \ T%=FNV3%(11%,AN$(L%)) & ! IF THE PPN HAS CHANGED THEN & Add the following comments to the end of line 10090: New: ! STORE NEW USER NAME DATA IN AN$ & ! AND DISPLAY IT & Modify line 10110 as indicated: Old: \ T%=FNV3%(11%,FNJ2$(T$,6%)) & New: \ T%=FNV3%(26%,FNJ2$(T$,6%)) & Modify line 10120 as indicated: Old: \ NAM%=27% IF (O% AND 2048%) & \ J1%=SWAP%(CVT$%(MID(UU.SYS0$,NAM%,2%))) & New: \ J1%=SWAP%(CVT$%(MID(UU.SYS0$,NAM%,2%))) & Old: \ T%=FNV3%(17%,RAD$(C%)) & ! PREPARE TO CHECK PROGRAM NAME - REPLACE WITH RTS... ! APPROPRIATE. & New: \ T%=FNV3%(32%,RAD$(C%)) & ! PREPARE TO CHECK PROGRAM NAME & Modify line 10130 as indicated: Old: \ T%=FNV3%(20%,RAD$(C%)) & New: \ T%=FNV3%(35%,RAD$(C%)) & Modify line 10140 as indicated: Old: \ T%=FNV3%(23%,FNJ$(C%,3%)) & New: \ T%=FNV3%(38%,FNJ$(C%,3%)) & Modify line 10220 as indicated: Old: \ T%=FNV3%(26%,B$+MID(H$,SWAP%(C%) AND 255%,2%)+T$) & New: \ T%=FNV3%(41%,B$+MID(H$,SWAP%(C%) AND 255%,2%)+T$) & Modify line 10270 as indicated: Old: \ T%=FNV3%(33%,FNJ0$(T$,8%)) & New: \ T%=FNV3%(48%,FNJ0$(T$,8%)) & Modify line 10280 as indicated: Old: \ C%=C% OR 256% IF (O% AND 8%) & \ IF FNC%(J%(L%,8%),C%)=0% THEN & GOTO 10300 & ELSE J%(L%,8%)=C% & \ T%=C% AND 255% & \ T%=T%-256% IF T%>127% & \ T%=(T% AND (NOT 7%))/8% & \ IF (C% AND 256%) THEN & T%=FNV3%(41%,FNJ$(T%,3%)+B$) & \ GOTO 10300 & ! GET THE PRIORITY FROM JDPRI. & ! IF +P HAS BEEN SPECIFIED THEN & ! ADJUST PRIORITY TO INDICATE THIS & ! IF THE PRIORITY HASN'T BEEN CHANGED THEN & ! GO ON TO NEXT JOB & ! ELSE GET THE EXACT PRIORITY & ! MAKE ADJUSTMENT FOR NEGATIVE PRIORITY & ! FORCE TO MULTIPLE OF 8 & ! IF +P SPECIFIED THEN & ! PRINT THE EXACT PRIORITY (+n,0,-n) & ! GO TO THE NEXT JOB & New: \ IF FNC%(J%(L%,8%),C%)=0% THEN & GOTO 10285 & ELSE J%(L%,8%)=C% & \ T$=NUM1$(C%*256%/256%)+"/" & \ T%=FNV3%(56%,FNJ0$(T$,5%)) & ! GET THE PRIORITY FROM JDPRI. & ! IF THE PRIORITY HASN'T BEEN CHANGED THEN & ! GO ON TO RUNBURST & Delete the entire text of line 10290. Add the following new lines: 10285 C%=ASCII(MID(UU.SYS1$,18%,1%)) & \ IF FNC%(J%(L%,9%),C%)=0% THEN & GOTO 10295 & ELSE J%(L%,9%)=C% & \ T$=NUM1$(C%)+B$ & \ T%=FNV3%(61%,T$) & ! GET THE RUNBURST FROM JDBRST. & ! IF IT HASN'T CHANGED THEN GO ON & ! TO NEXT JOB & 10295 NAM%=27% & \ J1%=SWAP%(CVT$%(MID(UU.SYS0$,NAM%,2%))) & \ IF FNC%(J%(L%,10%),J1%) THEN & J%(L%,10%)=C% & \ T%=FNV3%(64%,RAD$(C%)) & ! PREPARE TO CHECK RTS NAME & ! IF THE 1ST 3 CHARACTERS OF THE NAME HAVE CHANGED & ! THEN & ! SAVE THE NEW CHARACTERS & ! PRINT THEM & 10296 NAM%=NAM%+2% & \ J1%=SWAP%(CVT$%(MID(UU.SYS0$,NAM%,2%))) & \ IF FNC%(J%(L%,11%),J1%) THEN & J%(L%,11%)=C% & \ T%=FNV3%(67%,RAD$(C%)) & ! DO THE SAME WITH THE 2ND 3 CHARACTERS & Modify line 10310 as indicated: Old: NUM1$(STK%)+"K)",45%)) & \ J%(T0%,T%)=-1% FOR T%=0% TO 8% FOR T0%=0% TO 20% & New: NUM1$(STK%)+"K) ['*'=RTS, '-'=LIB, ' '=JOB]",72%)) & \ J%(T0%,T%)=-1% FOR T%=0% TO 12% FOR T0%=0% TO 20% & Modify line 10380 as indicated: Old: \ IF J0%<=7% THEN 10410 & New: \ IF J0%<=11% THEN 10410 & Modify line 10415 as indicated: Old: \ WHILE J0%<=7% & New: \ WHILE J0%<=11% & Modify line 10440 as indicated: Old: 10440 IF J%(L%,8%)<>STK%+L%*8% THEN & J%(L%,8%),T%=STK%+L%*8% & New: 10440 IF J%(L%,12%)<>STK%+L%*12% THEN & J%(L%,12%),T%=STK%+L%*12% & Modify line 10460 as indicated: Old: \ IF L%*8%+J0%+STK%=KSZ% THEN & T$="END" & ELSE IF L%*8%+J0%+STK%>KSZ% THEN & T$=" . " & New: \ IF L%*12%+J0%+STK%=KSZ% THEN & T$="END" & ELSE IF L%*12%+J0%+STK%>KSZ% THEN & Modify line 10500 as indicated: Old: \ T%=FNV3%(44%,B$) IF J0%=7% & New: \ T%=FNV3%(64%," ") IF J0%=11% & Modify line 10520 as indicated: Old: \ IF J0%<=7% THEN & New: \ IF J0%<=11% THEN & Modify line 13000 as indicated: Old: T%=FNV8%(" Busy devices") & New: T%=FNV8%(" Busy devices") & Modify line 13020 as indicated: Old: \ T%=FNV1%(0%,N$) IF B%(L%,0%)<>-1% IF (L% AND 1%) & \ T%=FNV0%(16384%,0%," *** None ***") & IF L%=0% AND B%(0%,0%)<>-1% & \ B%(T%,0%)=-1% FOR T%=L% TO 19% & \ L%=1%+(L%+1%)/2% & New: \ T%=FNV1%(0%,N$) IF B%(L%,0%)<>-1% IF (L% AND 3%) & \ T%=FNV0%(16384%,0%, & " *** None ***") & IF L%=0% AND B%(0%,0%)<>-1% & \ B%(T%,0%)=-1% FOR T%=L% TO 19% & \ L%=1%+(L%+3%)/4% & Modify line 13050 as indicated: Old: \ T%=FNV0%(16384%,0%,"Dev Job Why Dev Job Why")& New: \ T%=FNV0%(16384%,0%, & "Dev Job Why Dev Job Why "+ & "Dev Job Why Dev Job Why") & Modify line 13080 as indicated: Old: \ T%=FNV1%(7%-(16384%*((L% AND 1%)<>0%)),B$+T$+B$) & New: \ T%=FNV1%(7%-(16384%*((L% AND 3%)=3%)),B$+T$+B$+B$) & Modify line 13110 as indicated: Old: T%=FNV8%(" Disk Structure") & New: T%=FNV8%(" Disk structure") & Modify line 13130 as indicated: Old: \ SIXTH$="Comments" & \ SIXTH$="Name" IF (O% AND 16%) & \ T%=FNV0%(16384%,0%,"Dsk Open Free Clu Err "+ & SIXTH$) & New: \ T%=FNV0%(16384%,0%, & "Dsk Open Size Free Clu Err Name"+ & " Comments") & Old: \ UNTERR%=H2%(23%) & New: \ SATEND%=H2%(7%) & \ UNTERR%=H2%(23%) & Add the following new line: 13145 IF FNC%(D%(L%,2%),PEEK(SATCTL%+FUN%)) OR & FNC%(D%(L%,3%),PEEK(SATCTM%+FUN%)) & THEN & PCS%=UNTCLU.ENTRY% & \ T9=FNDISKSIZE(PCS%,PEEK(SATEND%+FUN%), & PEEK(DEVCLU%+FUN%) AND 255%) & \ T%=FNV2%(8%,FNJ$(T9,8%)) & ! & ! COMPUTE THE DISK SIZE AND DISPLAY & Modify line 13150 as indicated: Old: \ T%=FNV2%(8%,FNJ$(T,8%)) & New: \ T%=FNV2%(16%,FNJ$(T,8%)) & \ T8=INT((T/T9)*100%) IF T9>0. & \ T%=FNV2%(24%,FNJ$(T8,3%)+"%") IF T9>0.& ! & Add the following comment at the end of line 13150: New: ! CALCULATE THE FREE SPACE AS A PERCENTAGE AND & ! DISPLAY & Modify line 13160 as indicated: Old: \ T%=FNV2%(16%,FNJ$(D%(L%,4%),3%)) & New: \ T%=FNV2%(28%,FNJ$(D%(L%,4%),4%)) & Modify line 13170 as indicated: Old: \ T%=FNV2%(19%,FNJ$(PEEK(UNTERR%+FUN%),6%)) & New: \ T%=FNV2%(32%,FNJ$(PEEK(UNTERR%+FUN%),5%)) & Add the following new line: 13175 IF (FNC%(D%(L%,9%),PEEK(DSKLOG.PTR%)) & OR FNC%(D%(L%,10%),PEEK(DSKLOG.PTR%+2%)) & OR FNC%(D%(L%,11%),PEEK(DSKLOG.PTR%+4%)))=0% & THEN & GOTO 13180 & ELSE & D%(L%,9%)=PEEK(DSKLOG.PTR%) & \ D%(L%,10%)=PEEK(DSKLOG.PTR%+2%) & \ D%(L%,11%)=PEEK(DSKLOG.PTR%+4%) & \ T$="*******" & \ T$=RAD$(D%(L%,9%)) & +RAD$(D%(L%,10%)) & +RAD$(D%(L%,11%)) UNLESS & (UNTCNT.ENTRY% AND 4096%) & \ T%=FNV2%(37%,B$+T$) & ! IF NONE OF THE PARTS OF THE LOGICAL NAME HAS & ! CHANGED THEN & ! SKIP THIS ROUTINE & ! ELSE SAVE THE NEW PARTS & ! SET THE DEFAULT STRING TO "*" & ! RESET TO REAL NAME IF NOT OPENED & ! NON-FILE STRUCTURED & ! AND PRINT IT & Modify line 13180 as indicated: Old: 13180 IF (O% AND 16%)=0% & THEN & IF FNC%(D%(L%,5%),SWAP%(... New: 13180 IF FNC%(D%(L%,5%),SWAP%(... Old: ! IF LOGICAL NAMES NOT REQUESTED THEN & ! IF NONE OF THE BIT FLAGS IN THE... New: ! IF NONE OF THE BIT FLAGS IN THE... Delete the entire text of line 13190. Modify line 13200 as indicated: Old: 13200 T%=FNV2%(16384%+25%,B$+T$) & New: 13200 T%=FNV2%(16384%+47%,B$+T$) & Modify line 13250 as indicated: Old: T%=FNV8%(" Run-time systems") & New: T%=FNV8%(" Run-time systems") & Modify line 13370 as indicated: Old: \ IF F% THEN & T%=FNV8%(" Message receivers") & New: \ NSP%=0% & \ IF F% THEN & T%=FNV8%(" Message receivers") & Modify line 13400 as indicated: Old: ! IGNORE THIS ENTRY IF NULL ENTRY OR NO ROOM ... New: \ T%=PEEK(J0%+8%) AND 255% & \ T$=LEFT(T$,3%) IF (T% AND 1%) & \ T$=FNN$(2%,T%/2%)+B$ UNLESS (T% AND 1%) & \ T%=FNV2%(6%,B$+B$+T$+ & FNJ$((SWAP%(PEEK(J0%+10%)) AND 255%),3%)+ & FNJ$((SWAP%(PEEK(J0%+8%)) AND 255%),4%)) & ! IGNORE THIS ENTRY IF NULL ENTRY OR NO ROOM ... Delete the entire text of lines 13410 through 13440 Add the following new lines: 13420 IF FNC%(M%(L%,4%),PEEK(J0%+14%)) THEN & M%(L%,4%)=C% & \ T%=FNV2%(18%,FNJ$(SWAP%(C%) AND 255%,3%)+ & "/"+NUM1$(C% AND 255%)) & \ IF (C% AND 255%)<10% THEN & T%=FNV2%(23%,B$) & ! IF THE # OF MSG'S QUEUED OR THE DECLARED MAX HAS & ! CHANGED THEN & ! SAVE/PRINT THE INFO & 13425 IF FNC%(M%(L%,3%),(PEEK(J0%+10%) AND 255%))=0% THEN & GOTO 13430 & ELSE M%(L%,3%)=C% & \ C%=(C% AND (NOT 1%)) IF (C% AND 2%)<>0% & \ T$=N$ & \ T$=T$+", "+ & CVT$$(MID("LclPrvNetOneNcs Evt", & I%*3%+1%,3%),2%) & IF ((C% AND 2%^I%)<>0%) AND (I%<>5%) & FOR I%=6% TO 0% STEP -1% & \ T$=" None" IF T$="" & \ T%=FNV2%(16384%+24%,B$+B$+RIGHT(T$,3%)) & ! IF THE TYPE OF SENDERS ALLOWED HAS CHANGED THEN & ! SAVE THE INFO & ! SET DEFAULT STRING TO INDICATE PRIVE SENDERS & ! RESET IF NECESSARY & 13430 L%=L%+1% 13435 J0%=PEEK(J0%) & \ IF J0%=0% AND NSP%=0% THEN & J0%=PEEK(SWAP%(CVT$%(MID(SYS(CHR$(6%)+ & CHR$(22%)+CHR$(-24%)+CHR$(3%)),9%,2%)))) & \ NSP%=-1% & ! PICK UP NEXT RIB. IF NONE INDICATED AND HAVEN'T & ! DONE NSP, SELECT NSP. & 13440 NEXT & 13445 T%=FNV0%(16384%,0%," ***** None ******") & IF L%=0% AND M%(0%,0%)<>-1% & \ M%(T%,0%)=-1% FOR T%=L% TO 19% & \ L%=1% UNLESS L% & \ T$=N$ & \ RETURN & ! IF WE'VE HIT THE END OF THE TABLE (-1) THEN & ! PRINT APPROPRIATE MSG IF NO RECEIVERS & ! FLAG NON-PRINTED ENTRIES & ! BUMP 'PRINTED' COUNTER IF 'NONE' PRINTED & Modify line 13450 as indicated: Old: \ T%=FNV8%(" Gen FIP Jobs TTY Err") & \ T%=FNV0%(16384%,0%," 0 0 0/0 0 0") & New: \ T%=FNV8%(" Gen buf FIP buf Jobs/Jobmax Hung "+ & "TTY's Errors") & \ T%=FNV0%(16384%,0%," 0 0 0/0"+ & " 0 0") & Modify line 13470 as indicated: Old: \ T%=FNV2%(0%,FNJ$(C%,4%)) & New: \ T%=FNV2%(0%,FNJ$(C%,6%)) & Modify line 13480 as indicated: Old: \ T%=FNV2%(4%,FNJ$(C%,4%)) & New: \ T%=FNV2%(6%,FNJ$(C%,9%)) & Modify line 13490 as indicated: Old: \ T%=FNV2%(8%,FNJ0$(NUM1$(C% AND 255%) & +"/"+NUM1$(SWAP%(C%) AND 255%),6%)) & New: \ T%=FNV2%(15%,FNJ0$(NUM1$(C% AND 255%) & +"/"+NUM1$(SWAP%(C%) AND 255%),11%)) & Modify line 13500 as indicated: Old: \ T$=FNJ$(C%(3%),5%) IF C%(3%)>=0% AND ... \ V$=" *****" & \ V$=FNJ$(SAV.ERR-C%(3%),6%) IF C%(3%)>=0% & \ T%=FNV2%(16384%+14%,T$+V$) & New: \ T$=FNJ$(C%(3%),11%) IF C%(3%)>=0% AND ... \ V$=" ****" & \ V$=FNJ$(SAV.ERR-C%(3%),11%) IF C%(3%)>=0% & \ T%=FNV2%(16384%+26%,T$+V$) & Modify line 13530 as indicated: Old: T%=FNV8%(" Resident Libraries") & New: T%=FNV8%(" Resident Libraries") & Add the following new line: 15110 DEF* FNDISKSIZE(PACK.CLU.SIZ%,HI.PCN%,DEV.CLU.SIZ%) & \ DSIZE=HI.PCN% & \ DSIZE=DSIZE+65536. IF DSIZE<0. & \ FNDISKSIZE=((DSIZE+1.)*PACK.CLU.SIZ%)+DEV.CLU.SIZ% & \ FNEND & ! & ! FIND THE MAXIMUM SIZE (IN BLOCKS) FOR A DISK DEVICE & Modify line 15220 as indicated: Old: 15220 DEF* FNV0%(T%,T0%,T$)=FNV%(T%+45%,T0%+1%+L0%(... New: 15220 DEF* FNV0%(T%,T0%,T$)=FNV%(T%+72%,T0%+1%+L0%(... Modify line 15230 as indicated: Old: \ T%=T%+13% IF (L% AND 1%) & \ FNV1%=FNV%(T%+45%,2%+L0%(W%)+L%/2%,T$) & New: \ T%=T%+(14%*(L% AND 3%)) & \ FNV1%=FNV%(T%+72%,2%+L0%(W%)+L%/4%,T$) & Modify line 15260 as indicated: Old: 15260 DEF* FNV2%(T%,T$)=FNV%(T%+45%,1%+L0%(W%)+... New: 15260 DEF* FNV2%(T%,T$)=FNV%(T%+72%,1%+L0%(W%)+... Modify line 15280 as indicated: Old: 15280 DEF* FNV8%(T$)=FNV%(16384%+45%,L0%(W%),T$) & New: 15280 DEF* FNV8%(T$)=FNV%(16384%+72%,L0%(W%),T$) & Modify line 17270 as indicated: Old: ! INIT POINTER & New: \ DKBM.PTR%=PEEK(H1%(15%)-2%) & ! INIT POINTER & Modify line 17280 as indicated: Old: \ T%=FNV2%(0%,RAD$(R%(L2%,0%))+RAD$(C%)) & New: \ T%=FNV2%(0%,RAD$(R%(L2%,0%))+RAD$(C%)+B$+B$) & Add the following new line: 17290 GOTO 17305 IF A% & \ IF FNC0%(R%(L2%,7%),PEEK(R%+6%)) THEN & R%(L2%,7%)=PEEK(R%+6%) & \ T%=FNV2%(8%,RAD$(R%(L2%,7%))) & ! IF IN RTS DISPLAY AND IF THE RTS DEFAULT EXTENSION & ! HAS CHANGED THEN PRINT IT & Modify line 17300 as indicated: Old: \ T%=FNV2%(6%,FNJ$(C%,4%)+"K") & ! IF THE SIZE OF THE MODULE, IN K (R.KSIZ) HAS & ! CHANGED THEN & ! SAVE/PRINT IT & New: \ T%=FNV2%(11%,FNJ0$(NUM1$(C%)+"("+ & NUM1$(PEEK(R%+28%) AND 255%)+")K",9%)) Add the following new lines: 17302 GOTO 17310 & ! IF THE SIZE OF THE MODULE, IN K (R.KSIZ) HAS & ! CHANGED THEN & ! SAVE/PRINT MODULE/USER SIZES & 17305 IF FNC%(R%(L2%,8%),SWAP%(PEEK(R%+28%)) AND 255%) THEN & R%(L2%,8%)=SWAP%(PEEK(R%+28%)) AND 255% & \ T%=FNV2%(6%," <"+FNN$(3%,R%(L2%,8%))+">") & ! IF THE PROTECTION CODE OF THE LIBRARY HAS & ! CHANGED THEN & ! SAVE/PRINT IT & 17308 IF FNC%(R%(L2%,2%),PEEK(R%+14%) AND 255%) THEN & R%(L2%,2%)=C% & \ T%=FNV2%(13%,FNJ$(C%,4%)+"K") & ! IF THE SIZE OF THE MODULE, IN K (R.KSIZ) HAS & ! CHANGED THEN & ! SAVE/PRINT IT & Modify line 17310 as indicated: Old: 17310 IF FNC%(R%(L2%,3%),PEEK(R%+26%) AND 255%) THEN& R%(L2%,3%)=C% & \ T%=FNV2%(11%,FNJ$(C%,4%)) & New: 17310 P%=18% & \ P%=20% UNLESS A% & \ IF FNC%(R%(L2%,3%),PEEK(R%+26%) AND 255%) THEN & R%(L2%,3%)=C% & \ T%=FNV2%(P%,FNJ$(C%,4%)) & Modify line 17320 as indicated: Old: ELSE T$="Tmp" & \ T$="Prm" IF J1%<0% & \ T$="Mon" IF ( PEEK(R%+14%) AND 255% )=0% & New: ELSE T$="Temp" & \ T$="Perm" IF J1%<0% & \ T$="Monitor" IF ( PEEK(R%+14%) AND 255% )=0% & Delete the entire text of line 17330. Add the following new lines: 17330 P%=22% & \ P%=24% UNLESS A% & \ T%=PEEK(R%+16%) & \ T$=T$+", Addr:"+NUM1$(FNSHFT.RGT%(T%,5%)) IF T%<>0% & \ IF (J0% AND 256%) THEN & T$=T$+", DF KBM" IF DKBM.PTR%=R% UNLESS A% & \ T$=T$+", KBM" IF DKBM.PTR%<>R% UNLESS A% 17340 T$=T$+", "+MID("1USR/WNERRemCSZ",(I%-9%)*3%+1%,3%) & IF (J0% AND 2%^I%) FOR I%=9% TO 13% UNLESS A% & \ T$=T$+", "+MID("1USR/WNERRem",(I%-9%)*3%+1%,3%) & IF (J0% AND 2%^I%) FOR I%=9% TO 12% IF A% & \ T$=T$+", DYN" IF (PEEK(R%+28%) AND 192%) = 192% & \ T$=T$+", E:"+NUM1$(J0% AND 255%) IF J0%<0% & \ T%=FNV2%(16384%+P%,B$+B$+LEFT(T$,31%)) & \ GOTO 17280 & Modify line 17360 as indicated: Old: T%=FNV0%(16384%,0%," ****** None ******") & New: T%=FNV0%(16384%,0%," ****** None ******") & Add the following new lines: 17500 DEF* FNN$(S%,N%) & \ S$=NUM1$((N% EQV 32767%)+32768.) & \ FNN$=SPACE$(S%-LEN(S$))+S$ & \ FNEND & ! LEFT PAD A NUMBER TO SPECIFIED LENGTH & & 17510 DEF* FNACCOUNT.NAME$(PN%) & \ ON ERROR GOTO 17520 & \ Z$=SPACE$(13%) & \ LSET Z$="" & \ LSET Z$="" IF PN%=0% & \ LSET Z$=CVT$$(MID(SYS(CHR$(6%)+CHR$(-25%)+ & CHR$(-1%)+CHR$(5%)+CHR$(PN%)+ & CHR$(SWAP%(PN%))+STRING$(16%,0%)+"SY"+ & STRING$(2%,0%)),8%,13%),5%) UNLESS PN%=0% & \ GOTO 17530 & 17520 RESUME 17530 & 17530 FNACCOUNT.NAME$=Z$ & \ ON ERROR GOTO 19000 & \ FNEND & ! RETURN THE ACCOUNT NAME BLOCKETTE DATA & 17600 DEF* FNSHFT.RGT%(X%,Y%)= & (X% AND 32767%)/(2%^Y%) OR ((2%^(15%-Y%)) AND (X%<0%)) & & ! FUNCTION TO SHIFT A 16-BIT INTEGER X%, BY Y% BITS. & 19045 IF ERL=13435 THEN & NSP%=-1% & \ RESUME 13440 & ! IF DECNET/E NOT PRESENT THEN & ! SAY WE ALREADY DID IT AND SKIP & Modify line 19100 as indicated: Old: \ GOSUB 20100 & New: \ GOSUB 20110 & Modify line 20020 as indicated: Old: 20020 COL%=80%-1% !default to 80 columns & New: 20020 COL%=132%-1% !default to 132 columns & Modify line 20055 as indicated: Old: \ IF (V3% < 11%) OR (V3% > 24%) THEN & PRINT "%Row specification must be between 12 and 24" & \ EFLAG%=1% & \ GOTO 20095 & ! ROWS MAY RANGE BETWEEN 12 (VT50) AND 24 (VT52). & New: \ IF (V3% < 11%) OR (V3% > 66%) THEN & PRINT "%Row specification must be between 12 and 66" & \ EFLAG%=1% & \ GOTO 20095 & ! ROWS MAY RANGE BETWEEN 12 (VT50) AND 66 (FULL-PAGE) & Modify line 20100 as indicated: Old: \ V$=V0$+"<"+V0$+[1;1H"+V0$+"[2J" New: \ V$=V0$+"<"+V0$+"[?3h"+V0$+"[1;1H"+V0$+"[2J" & \ GOTO 20120 & Add the following new line: 20110 V8%=0% & \ V$=V0$+"<"+V0$+"[?3l"+V0$+"[1;1H"+V0$+"[2J" & Modify line 20540 as indicated: Old: IF (T%-V1%)/8% AND (T%<=71%) THEN & New: IF (T%-V1%)/8% AND (T%<=72%) THEN & If you suffer through entering all of the above, here is what you can expect to see when you run it: RSTS V9.5-08 SPCCSPDP/RED Status on 03-Dec-87 07:52 PM Last restarted on 20-Nov-87 12:22 AM Up: 13 19:30:23 19:54 Job Who Name Where What Size State Run-time Pri/RB RTS Gen buf FIP buf Jobs/Jobmax Hung TTY's Errors 1 1,2 (SYSTEM) Det ERRCPY 5 SR 26.4 0/6 ...RSX 619 368 9/63 1 1 2 1,2 (SYSTEM) Det NPKDVR 9 SL 1:16.7 -8/6 ...RSX 3 1,2 (SYSTEM) Det PBS... 19 SL 7:15.2 -8/6 ...RSX Busy devices 4 1,2 (SYSTEM) Det EVTLOG 18 SL 8:33.3 -8/6 ...RSX Dev Job Why Dev Job Why Dev Job Why Dev Job Why 5 1,2 (SYSTEM) Det MAILQ 32 SR 16.8 -16/6 ...RSX KB1 8 Open 6 1,2 (SYSTEM) Det ...KIL 3 SL 215:21.6 -8/6 ...RSX 7 1,254 Terry Kennedy KB27* DIS132 18 RN 16.9 -8/6 ...RSX Disk structure 8 1,3 Operator Det DIS132 18 SL ???:??.? -8/6 ...RSX Dsk Open Size Free Clu Err Name Comments 9 108,15 ADA RIVERA KB26* GAMES 2 ^C 6.3 -8/6 BASIC DV0 0 1200 223 18% 1 0 SYSTMP Pri,DLW DM0 0 53765 50536 93% 4 0 SYSWK2 Pri,DLW DM1 0 53765 46556 86% 4 0 SYSWK3 Pri,DLW DB0 40 340664 185808 54% 8 0 SYSRES Pub,DLW DB4 0 340664 312248 91% 8 0 SYSWK1 Pri,DLW Run-time systems ...RSX TSK 0(64)K 8 Monitor, KBM DCL COM 24(8)K 0 Temp, Addr:87, DF KBM RT11 SAV 4(28)K 0 Temp, Addr:124, KBM, CSZ, E:255 RSX TSK 1(28)K 0 Non-res, KBM BASIC BAC 16(16)K 1 Temp, Addr:189, KBM, CSZ TECO TEC 10(20)K 0 Temp, Addr:259, KBM PASCAL SAV 4(28)K 0 Non-res, NER, E:255 APL APC 16(16)K 0 Non-res, KBM BP2 1(1)K 0 Non-res, KBM BASDEB BAC 16(16)K 0 Non-res, KBM, CSZ CLE CLE 3(1)K 0 Non-res, KBM, NER Message receivers ERRLOG 1 0 1 0/40 Prv NWPK02 2 0 23 0/16 Net QM$CMD 3 1 3 0/20 Prv QM$SRV 3 2 4 0/30 Prv QM$URP 3 3 5 0/10 Lcl PR$03A 3 17 65 0/5 Prv PR$03B 3 25 65 0/5 Prv BA$03A 3 41 66 0/5 Prv BA$03B 3 49 66 0/5 Prv BA$03C 3 57 66 0/5 Prv EVTLOG 4 0 0 0/32 Evt, Prv EVTLSN 4 1 26 0/16 Net, Prv MAILQ 5 0 0 0/1 Lcl NSP NSP 0 0 0/0 None Resident Libraries CSPLIB < 42> 8K 5 Temp, Addr:116 EDT < 42> 39K 0 Temp, Addr:308 RMSRES < 42> 4K 1 Temp, Addr:1660 RMSLBA < 42> 4K 1 Temp, Addr:155 RMSLBB < 42> 3K 1 Temp, Addr:148 RMSLBC < 42> 3K 1 Non-res RMSLBD < 42> 2K 1 Temp, Addr:159 RMSLBE < 42> 3K 1 Temp, Addr:141 RMSLBF < 42> 4K 1 Temp, Addr:144 DAPRES < 42> 10K 0 Temp, Addr:1650 BP2RES < 42> 17K 0 Non-res, Addr:89 B25SHR < 42> 4K 0 Temp, Addr:128 B25SH1 < 42> 4K 0 Temp, Addr:132 CBLIB < 0> 3K 0 Perm, Addr:1647, R/W CBCODE < 42> 18K 0 Perm, Addr:983