+-+-+-+ Beginning of part 20 +-+-+-+ X$ Copy`009`009FingMaint.Hlb`009`009Sys$Help X$ Lib`009`009Sys$Help:Helplib/Help`009Finger X$ Hlp$2:`009! 'F$Verify(0) X$ On `009Error`009Then GoTo Exit X$ If Options`009Then Goto L6 X$ Type`009`009Sys$Input`009 X X`009If you run DECnet, the Finger network object must be X`009defined and the finger object command file must be X`009copied to SYS$COMMON:[SYSEXE]. X X`009If you already run Finger as a network object, skip this step. X$ L6: X$ Write`009`009Sys$Output`009" " X$ Inquire`009Ans`009" Do you want the DECnet finger object defined? (YES) " X$ NetFinger`009=`0090 X$ If`009`009Ans .eqs. ""`009Then GoTo DECnet X$ If`009`009Ans `009`009Then GoTo DECnet X$ GoTo`009`009NoDECnet X$ DECnet: X$ NetFinger`009=`0091 X$ Write`009`009Sys$Output`009" " X$ Set Verify=(procedure,image) X$ Run Sys$System:NCP XDEFINE OBJECT FINGER`009FILE FINGER`009NUMBER 117 XSET`009OBJECT FINGER`009FILE FINGER`009NUMBER 117 X$ Open/Write`009FingerNCP`009Sys$Common:[Sysexe]Finger.Com`009!'F$Verify(0) V$ Write FingerNCP "$!FINGER.COM`009`009R. Garland / C.U. Chem. Dept. / Feb. 1 X985" X$ Write FingerNCP "$ Set`009`009NoOn" X$ Write FingerNCP "$!Assign/user`009NL:`009FINGER$MESSAGE" X$ Write FingerNCP "$ Run`009`009''F$Log(""Finger$Directory"")'FINGER" X$ Write FingerNCP "$ Exit" X$ Close`009FingerNCP X$ Set File/Protection=(S:RWED,O:RWED,G:RE,W:RE) Sys$Common:[Sysexe]Finger.Com X$ NoDECnet:`009! 'F$Verify(0) X$ If Options`009Then Goto L7 X$ Type`009`009Sys$Input X X`009We will now optionally purge old versions of the files`032 X`009which have just been installed. X$ L7: X$ Write`009`009Sys$Output`009" " X$ Inquire`009Ans`009" Purge files just installed? (YES) " X$ If`009`009Ans .eqs. ""`009Then GoTo Purge X$ If`009`009Ans `009`009Then GoTo Purge X$ GoTo`009`009NoPurge X$ Purge: X$ If Options`009Then Goto L8 X$ Type`009`009`009Sys$Input X X`009Ignore any "Error searching for ... File not found." messages. X$ L8: X$ Write`009`009Sys$Output`009" " X$ Set Verify X$ Purge/Log`009Sys$Help:FingMaint.Hlb X$ Purge/Log`009'F$Log("Finger$Directory")'Finger.exe X$ Purge/Log`009'F$Log("Finger$Directory")'FingerShr.exe X$ Purge/Log`009'F$Log("Finger$Directory")'FingMaint.exe X$ Purge/Log`009'F$Log("Finger$Directory")'Idle-Mon.exe X$ Purge/Log`009'F$Log("Finger$Directory")'FingerLAT.com X$ Purge2:`009! 'F$Verify(0)' X$ If`009.not. NetFinger`009`009Then GoTo Purge3 X$ Set Verify X$ Purge/Log`009Sys$Common:[Sysexe]Finger.Com X$ Purge3:`009! 'F$Verify(0)' X$ NoPurge:`009! 'F$Verify(0)' X$ Type`009`009Sys$Input X X`009The program will now be installed with the privileges needed. X X$ Set Verify X$ Set Prot=(W:rwe)`009'F$Log("Finger$Directory")'FingerShr.Exe X$ Run Sys$System:Install VFinger$Directory:Finger /Open /Shared /Header /Priv=(SYSPRV,WORLD,CMKRNL,OPER X) XFinger$Directory:FingerShr /Open /Shared /Header /Write /Priv=(SYSPRV,SYSGBL) X$! Set Prot=(W:re)`009'F$Log("Finger$Directory")'FingerShr.Exe X$ If Options`009Then Goto L9`009! 'F$Verify(0) X$ Type`009`009Sys$Input X X`009The installation procedure is now complete. However you must X`009do several things more: X X`0091) You must call the Finger start-up code, START_FINGER.COM, X`009 from the system startup file, SYS$MANAGER:SYSTARTUP.COM, X`009 so that the program will work after rebooting. START_FINGER.COM`032 X`009 must be edited for your site. X X`009 You must also run the Idle-Mon program during the start up X`009 procedure if you wish to have idle times for RTA and LTA terminals. X`009 The Idle-Mon program needs to be run after DECNet has been started X`009 but before LAT is started. The program can be activated by`032 X`009 the command: X V$ WRITE SYS$OUTPUT " $ RUN ''F$LOG("Finger$Directory")'Idle X-Mon" X$ Type`009`009Sys$Input X X`0092) Finger must be defined as a foreign command for users. The X`009 following line should be put into your system wide login command X`009 file: X X$ L9: X$ Set Verify X$ F*INGER`009:==`009$'F$Log("Finger$Directory")'Finger X$! 'F$Verify(0) X$ If Options`009Then Goto L10 X$ Type`009Sys$Input`032 X X`0093) If you want a file containing a system message ("message of the X`009 day") displayed as part of the FINGER output, create the file X`009 and assign it the logical name "Finger$Message". This can be X`009 done via a /SYSTEM logical name at BOOT time. X X`0094) If you use jnet, and want to build the Finger daemon, you should X`009 review the documentation (FINGER.DOC) and run the procedure X`009 INSTALL_JNET_FINGER.COM and also put a call to the startup code X`009 START_JNET_FINGER.COM into your jnet startup procedure. X X`0095) You must use the FINGMAINT program which was copied to the des- X`009 ignated directory, to define the database for personal names,`032 X`009 terminal locations and network hosts. There is a sample file, X`009 START_FINGER.COM, which you can use as a model for this. The X`009 definitions should be edited into START_FINGER if you desire to X`009 reconstruct the database after each system Boot.`032 X X`009Finger will now be run as a test. If the results do not correspond X`009to the sample output in the installation document, please review X`009the procedure and start over. X$ L10: X$ If .not. Options`009Then Goto Clr$1 X$ Write`009`009Sys$Output`009" " X$ Inquire`009Ans`009" Clear FINGERSHR database? (YES) " X$ If Ans.eqs.""`009Then Goto Clr$1 X$ If .not. Ans`009`009Then Goto Clr$2 X$ Clr$1: X$ Run`009'F$Log("Finger$Directory")'FingMaint XClear`009/All XExit X$ Clr$2: X$ Write`009`009Sys$Output`009" " X$ Set Verify X$ FINGER X$ Exit:`009`009! 'F$Verify(0) X$ Exit`009`009! 'F$Verify(Save_Verify) $ GOSUB UNPACK_FILE $ FILE_IS = "INSTALL_JNET_FINGER.COM" $ CHECKSUM_IS = 1175932996 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X$!..Install_jnet_finger.Com`009Build the jnet Finger Daemon X$!..`009`009`009`009R. Garland / CUCHEM / Feb-1985 X$!..`009VMS V5.1 version, jnet V3.3 X$! X$ Set`009NoOn X$ Type`009Sys$Input X X`009This procedure builds the jnet Finger Daemon. X X$ Inquire`009Ans`009- X" Give name of the directory where FINGER is located (SYS$COMMON:[SYSEXE]) " X$ If`009`009Ans .eqs. ""`009`009Then Ans := Sys$Common:[Sysexe] X$ LogAns`009:=`009`009`009'F$Log(Ans)' X$ If`009`009LogAns .eqs. ""`009`009Then LogAns := 'Ans' X$ Define`009Finger$Directory`009'LogAns' X$ Type`009`009Sys$Input `009! 'F$Verify(0) X X`009Before we start, the old daemon (if any) will be stopped. X X$ Set Verify=(Procedure,Image) X$ Run`009Jan_sys:JCP XStop`009Finger XExit X$ Type`009`009Sys$Input `009! 'F$Verify(0) X X`009The daemon will be linked. X X$ Set Verify X$ Link/Trace FingerLib/Lib/Include=Finger_Dae, - X`009`009Sys$System:Sys.Stb/Sel, - X`009`009Sys$Input/Options/Exe=Jan_common:[Sys]FingerDae XFinger$Directory:FingerShr/Share XJANSHR/SHARE X$ Type`009`009Sys$Input`009! 'F$Verify(0) X X`009The startup procedure for the Finger Daemon will be moved X`009to the jnet directory. `032 X X$ Open/Write`009Jfile`009Jan_common:[Sys]Start_jnet_Finger.Com X$ Write`009Jfile`009"$ Run Sys$System:Loginout -" X$ Write`009Jfile`009" /UIC=[1,4] -" X$ Write`009Jfile`009" /Input=Jan_Sys:Run_Finger_Daemon.Com -" X$ Write`009Jfile`009" /Output=Jan_Sys:Finger.Err -" X$ Write`009Jfile`009" /Error=Jan_Sys:Finger.Err -" X$ Write`009Jfile`009" /Privilege=(SAME) -" X$ Write`009Jfile`009" /Priority=8 -" X$ Write`009Jfile`009" /Process=""Finger_Daemon""" X$ Close JFile X$ Open/Write`009Jfile`009Jan_common:[Sys]Run_Finger_Daemon.Com X$ Write`009Jfile`009"$ Run Jan_Sys:FingerDae" X$ Close JFile X$ Copy`009Finger$Directory:FingerLAT.Com`009Jan_common:[Sys] X$ Type`009Sys$Input`009!'F$Verify(0) X X`009And now, clean up some files ... X X$ Set Verify X$ Purge/Log`009Jan_Sys:Start_jnet_Finger.Com X$ Purge/Log`009Jan_Sys:Run_Finger_Daemon.Com X$ Purge/Log`009Jan_Sys:FingerLAT.Com X$ Purge/Log`009Jan_Sys:FingerDae.Exe X$ Type`009Sys$Input`009!'F$Verify(0) X X`009Now we'll start the daemon. X X$ Set Verify X$ @Jan_Sys:Start_jnet_Finger X$ Type`009Sys$Input`009! 'F$Verify(0) X X`009Installation of jnet Finger Daemon is complete. X X`009You must call the START_jnet_FINGER.COM routine in your jnet X`009startup file. (Note this must be started with this file X`009and not using JCP) X X$ Exit $ GOSUB UNPACK_FILE $ FILE_IS = "KLUDGE.MAR" $ CHECKSUM_IS = 1216036739 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X; Replace the call to CLI$DCL_PARSE in FINGER with X; an identical call to KLUDGE_CLI$DCL_PARSE X X`009.ENTRY KLUDGE_CLI$DCL_PARSE,`094M X`009MOVAB -100(SP), SP`009`009; Leave plenty of space for DCL to wreck X`009movl ap, r0 X`009CALLG (r0), CLI$DCL_PARSE X`009RET X X`009.END X $ GOSUB UNPACK_FILE $ FILE_IS = "LAVDRIVER.MAR" $ CHECKSUM_IS = 709067317 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY V;From:`009IN%"Kenneth Adelman " 1-AUG-1988 13:4 X8 X;To:`009_RAND ! sent to info-vax@kl.sri.com X;Subj:`009Nice software; be a shame if it were to bugcheck. X; X; X;`009Oops. The Load Average driver I posted a few weeks ago had a X;fatal bug. Fortunately, I fell on my own sword before anyone else X;reported this to me. Here is a fixed version, which includes the X;conditionals to run on VMS V4. Add a "VMS_V5=1" line at the top for X;VMS V5. X; X;`009`009`009`009`009`009Ken X; X; X`009.TITLE`009LAVDRIVER`009VAX/VMS Load Average Pseudo Device X`009.IDENT`009/Version 4.00/ X`009.SBTTL`009DOCUMENTATION X;---------------S-R-I-International-Artificial-Intelligence-Center----------- X; X; X; MODULE NAME: X; X;`009LAVDRIVER X; X; PURPOSE: X; X;`009This is a pseudo device which supplies load average information to X;`009programs wishing to display some indication of system load. X; X; KEYWORDS: X; X;`009Drivers X; X; USAGE: X; X;`009Standard system QIO calls. X; X;`009The driver is installed via sysgen. The following is the correct X;`009`009sysgen command sequence. X; X;`009`009SYSGEN> LOAD LAVDRIVER X;`009`009SYSGEN> CONNECT LAV0 /NOADA/DRIVER=LAVDRIVER X; X;`009`009Note: LAVDRIVER.EXE should reside in [SYS$LDR] X; X; X; SPECIAL REQUIREMENTS: X; X;`009none X; X; LANGUAGE: X; X;`009VAX-11 MACRO X; X; PARAMETERS: X; X;`009none X; X; SPECIAL TECHNIQUES: X; X;`009none X; X; AUTHOR: X; X;`009David Kashtan X; X; DATE CREATED: X; X;`009Wed Jul 21 11:25:19 1982 X; X; MAINTAINED BY: X; X;`009David Kashtan X; X; UPDATES: X; X;`009Modified for VMS V5 SMP Thu Oct 8 1987 Kenneth Adelman / LBL X; X;---------------S-R-I-International-Artificial-Intelligence-Center----------- X`012 X`009.SBTTL`009DEFINITIONS X`009.LIBRARY`009/SYS$LIBRARY:LIB.MLB/ X;+ --- X; X; DEFINE CONTROL BLOCK OFFSETS & OTHER SYSTEM STUFF BY CALLING 'DEF' MACROS X; X;- --- X`009VMS_V5=1 X.IF`009DF,VMS_V5 X`009$CPUDEF`009`009`009;DEFINE PER-CPU STRUCTURE X.ENDC X`009$CRBDEF`009`009`009;DEFINE CHANNEL REQUEST BLOCK X`009$DCDEF`009`009`009;DEFINE DEVICE TYPES X`009$DDBDEF`009`009`009;DEFINE DEVICE DATA BLOCK X`009$DEVDEF`009`009`009;DEFINE DEVICE CONSTANTS X`009$DPTDEF`009`009`009;DEFINE DRIVER PROLOGUE TABLE X`009$DYNDEF`009`009`009;DEFINE DYNAMIC STRUCTURE CODES X`009$FKBDEF`009`009`009;DEFINE FORK BLOCK CODES X`009$IODEF`009`009`009;DEFINE I/O FUNCTION CODES X.IF`009NDF,VMS_V5 X`009$IPLDEF`009`009`009;DEFINE INTERRUPT PRIORITY LEVELS X.ENDC X`009$IRPDEF`009`009`009;DEFINE I/O REQUEST PACKET X`009$PCBDEF`009`009`009;DEFINE PROCESS CONTROL BLOCK X`009$PHDDEF`009`009`009;DEFINE PROCESS HEADER X`009$PRVDEF`009`009`009;DEFINE VMS PRIVS X`009$TQEDEF`009`009`009;DEFINE TIMER QUEUE ENTRY X`009$UCBDEF`009`009`009;DEFINE UNIT CONTROL BLOCK X`009$VECDEF`009`009`009;DEFINE VECTOR OFFSETS X; X`012 X`009.SBTTL`009DRIVER PROLOGUE TABLE X;+ --- X; X; DRIVER CHARACTERISTICS X; X;- --- X.IF`009NDF,VMS_V5 X`009DPTAB`009 - X`009`009`009END=LAV_END,`009 -;END OF DRIVER (SIZE) X`009`009`009ADAPTER=NULL,`009 -;UNIBUS DEVICE X`009`009`009UCBSIZE=UCB$C_Length, -;UNIT CONTROL BLOCK LENGTH X`009`009`009MAXUNITS=1,`009 -;ONLY ONE LAV0 DEVICE X`009`009`009UNLOAD=LAV_UNLOAD, -;UNLOAD ROUTINE X`009`009`009NAME=LAVDRIVER`009`009;DRIVER NAME X.IFF X`009DPTAB`009 - X`009`009`009END=LAV_END,`009 -;END OF DRIVER (SIZE) X`009`009`009ADAPTER=NULL,`009 -;UNIBUS DEVICE X`009`009`009UCBSIZE=UCB$C_Length, -;UNIT CONTROL BLOCK LENGTH X`009`009`009MAXUNITS=1,`009 -;ONLY ONE LAV0 DEVICE X`009`009`009UNLOAD=LAV_UNLOAD, -;UNLOAD ROUTINE X`009`009`009NAME=LAVDRIVER, -;DRIVER NAME X`009`009`009SMP=YES`009`009`009;Works under SMP X.ENDC X;+ --- X; X; INITIALIZATION INFORMATION X; X;- --- X`009DPT_STORE`009INIT X.IF`009NDF,VMS_V5 X`009DPT_STORE`009UCB,UCB$B_FIPL,B,8`009;FORK IPL LEVEL X.IFF X`009DPT_STORE`009UCB,UCB$B_FLCK,B,SPL$C_IOLOCK8 ;FORK SPINLOCK X.ENDC X`009DPT_STORE`009UCB,UCB$B_DIPL,B,21`009;DEVICE IPL LEVEL (BR5 = 21) X`009DPT_STORE`009UCB,UCB$L_DEVCHAR,L, -;DEVICE CHARACTERISTICS: X`009`009 <- X`009`009`009DEV$M_AVL!`009 -; DEVICE AVAILABLE X`009`009`009DEV$M_REC!`009 -; RECORD ORIENTED X`009`009`009DEV$M_IDV!`009 -; INPUT DEVICE X`009`009`009DEV$M_SHR`009 -; SHARED X`009`009 > X`009DPT_STORE`009UCB,UCB$W_DEVBUFSIZ, -;DEVICE BUFFER SIZE X`009`009`009`009W,36`009`009; (36 bytes) X;+ --- X; X; RE-INITIALIZATION INFORMATION X; X;- --- X`009DPT_STORE`009REINIT X`009DPT_STORE`009DDB,DDB$L_DDT,D,LAV$DDT ;DRIVER DISPATCH TABLE X`009DPT_STORE`009CRB,`009`009 -;CONTROLLER INITIALIZATION ROUTINE X`009`009`009 CRB$L_INTD+VEC$L_INITIAL,D,- X`009`009`009`009LAV_CONTROLLER_INIT X`009DPT_STORE`009CRB,`009`009 -;UNIT INITIALIZATION ROUTINE X`009`009`009 CRB$L_INTD+VEC$L_UNITINIT,D,- X`009`009`009`009LAV_UNIT_INIT X`009DPT_STORE`009END X; X`012 X`009.SBTTL`009DRIVER DISPATCH TABLE X;+ --- X; X; ADDRESSES OF VARIOUS DRIVER ENTRY POINTS X; X;- --- X`009DDTAB`009- X`009`009 DEVNAM=LAV,`009 -;DEVICE NAME X`009`009 START=0,`009 -;ADDRESS OF START I/O ENTRY POINT X`009`009 UNSOLIC=0,`009 -;ADDRESS OF UNSOLICITED INT. ROUTINE X`009`009 FUNCTB=LAV_FUNCTABLE, -;ADDRESS OF FUNCTION DECISION TABLE X`009`009 CANCEL=0,`009 -;ADDRESS OF CANCEL I/O ENTRY POINT X`009`009 REGDMP=0,`009 -;ADDRESS OF REGISTER DUMP ROUTINE X`009`009 DIAGBF=0,`009 -;SIZE OF DIAGNOSTIC BUFFER X`009`009 ERLGBF=0`009`009;SIZE OF ERROR LOG BUFFER X; X`012 X`009.SBTTL`009FUNCTION DECISION TABLE XLAV_FUNCTABLE: X;+ --- X; X; SPECIFY LEGAL FUNCTION CODES X; X;- --- X`009FUNCTAB ,`009 -;LEGAL FUNCTION CODE ENTRY X`009`009<`009 -; X`009`009 READVBLK, -;READ VIRTUAL BLOCK X`009`009 READLBLK, -;READ LOGICAL BLOCK X`009`009 READPBLK, -;READ PHYSICAL BLOCK X`009`009 WRITEVBLK, -;WRITE VIRTUAL BLOCK X`009`009 WRITELBLK, -;WRITE LOGICAL BLOCK X`009`009 WRITEPBLK, -;WRITE PHYSICAL BLOCK X`009`009> X;+ --- X; X; SPECIFY BUFFERED I/O FUNCTION CODES X; X;- --- X`009FUNCTAB ,`009 -;BUFFERED FUNCTION CODE ENTRY X`009`009<>`009`009;NONE X;+ --- X; X; SPECIFY 1ST FDT ROUTINE X; X;- --- X`009FUNCTAB GET_LOAD_AVE, -;GET THE CURRENT LOAD AVERAGES X`009`009<`009 -;USED BY: X`009`009 READVBLK, -;READ VIRTUAL BLOCK X`009`009 READLBLK, -;READ LOGICAL BLOCK X`009`009 READPBLK -;READ PHYSICAL BLOCK X`009`009>`009`009; X;+ --- X; X; SPECIFY 2ND FDT ROUTINE X; X;- --- X`009FUNCTAB SET_PRIORITIES, -;SET WHICH PRIORITIES ARE SCANNED X`009`009<`009`009-;USED BY: X`009`009 WRITEVBLK,`009-;WRITE VIRTUAL BLOCK X`009`009 WRITELBLK,`009-;WRITE LOGICAL BLOCK X`009`009 WRITEPBLK`009-;WRITE PHYSICAL BLOCK X`009`009>`009`009; X; X`012 -+-+-+-+-+ End of part 20 +-+-+-+-+-