+-+-+-+ Beginning of part 14 +-+-+-+ Xsecond but less than 1 minute. X X/IMAGENAME X /IMAGENAME (D) `032 X /NOIMAGENAME X XDisplay the user's image (program) name. A $ means the user is at the XDCL level. X X/INTERACTIVE X /INTERACTIVE (D) X /NOINTERACTIVE X XList interactive processes. X X/LOCATION X /LOCATION (D) `032 X /NOLOCATION X XDisplay the location of the user's terminal for interactive jobs. X X/LOGINTIME X /LOGINTIME (D) `032 X /NOLOGINTIME X XDisplay the time the user logged in. Format is hh:mm. X X/MESSAGE X /MESSAGE (D) `032 X /NOMESSAGE X XDisplay the system message of the day with the output. X X/NETWORK X /NETWORK X /NONETWORK (D) X XList network (DECnet) jobs. X X/PERSONALNAME X /PERSONALNAME X /NOPERSONALNAME (D) X XDisplay the user's personal name, as recorded in the system authoriz- Xation file (SYSUAF). X X/PID X /PID (D) X /NOPID X XDisplay the user's process ID (PID). X X/PROCESSNAME X /PROCESSNAME`032 X /NOPROCESSNAME (D) X XDisplay the user's process name. Note: process name will be the same`032 Xas the Username (login ID) except for batch jobs and when the user is Xlogged in on more than one terminal, or when the user has done an ex- Xplicit SET PROCESS/NAME command. X X/SIZE X /SIZE X /NOSIZE (D) X `032 XDisplay the process working set size in pages. Includes both process Xand global pages. X `032 X/SORT X /SORT=sort_field X /NOSORT (D) X XSpecifies that the display should be sorted by one of the following Xfields: X X`009CPU_TIME`009The accumulated CPU time X`009IMAGE`009`009The name of the currently executing program X`009LAST_NAME`009The user's personal name X`009LOGIN_TIME`009The time of login in HH:MM format X`009PID`009`009The user's process ID (PID) X`009PROCESS_NAME`009The user's process name (SET PROC/NAME=) X`009TERMINAL`009The user's terminal name (TTY) X`009USER_NAME`009The user's username (Login ID) X XIf the sort field is not specified, the sort will default to USER_NAME X X/STATE X /STATE X /NOSTATE (D) X `032 XDisplay the process scheduling state. Possible states are: X `032 X Cur Currently Executing Process X Com[O] Computable X LEF[O] Local Event Flag Wait X CEF Common Event Flag Wait X MWait Miscellaneous Wait, Mutex Wait, or Resource Wait X PFW Page Fault Wait X Hib[O] Hibernate Wait X Susp[O] Suspend Wait X ColPg Collided Page Wait X FPg Free Page Wait X `032 XAn O suffix indicates outswapped. X `032 X/SUBPROCESS X /SUBPROCESS (D) X /NOSUBPROCESS X XList subprocesses. X X/SWAPPED X /SWAPPED X /NOSWAPPED (D) X XDisplays image name, login time and CPU time for outswapped processes. XNormally these are not displayed since to do so would require swapping Xin the process. X X/SYSTEM X /SYSTEM X /NOSYSTEM (D) X XList system processes. X X/TERMINAL `032 X /TERMINAL (D) X /NOTERMINAL X XDisplay the terminal line number. X X/TTTYPE `032 X /TTTYPE (D)`032 X /NOTTTYPE X XDisplay the type of terminal for interactive users. X X/USERNAME `032 X /USERNAME (D)`032 X /NOUSERNAME`032 X XDisplay the user's username (login ID). $ GOSUB UNPACK_FILE $ FILE_IS = "FINGERCLD.CLD" $ CHECKSUM_IS = 1246065581 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X!FingerCli.Cld`009`009`009Command definition file for FINGER X!`009`009`009`009R. Garland / C.U. Chemistry / 15-Nov-1982 X X! Note: If you change this file, you should also change the X! equivalent code in module Parse_Command of the Finger program. X X! To compile this file use the command: X!`009$ SET COMMAND FINGERCLI/OBJECT X! and then link it with the finger program: X!`009$ LINK FINGER,FINGERCLI,SYS$SYSTEM:SYS.STB X XModule`009FingerCli_Table X X`009Define Verb FINGER X X`009`009Parameter `009P1, Label=FINGERNAME, X`009`009`009`009Value (Default=" ") X!`009`009`009Process selection qualifiers X`009`009Qualifier`009INTERACTIVE, Default X`009`009Qualifier`009BATCH, Default X`009`009Qualifier`009SUBPROCESS, Default X`009`009Qualifier`009NETWORK X`009`009Qualifier`009SYSTEM X`009`009Qualifier`009ALL X`009`009Qualifier`009SORT, Value X! site-specific: uncomment BYPASS qualifier if desired X`009`009Qualifier`009BYPASS, Default X!`009`009`009qualifiers for individuals X`009`009Qualifier`009PLAN, Default X`009`009Qualifier`009MAIL, Default X`009`009Qualifier`009AREA, Default X!`009`009`009Miscellaneous qualifiers X`009`009Qualifier`009HELP X`009`009Qualifier`009VERSION X`009`009Qualifier`009IAM X`009`009`009Value`009(Required, Type=$Quoted_String) X! site-specific: if you don't want to display *any* mail information, X!`009`009 add the keyword ', Default' to the end of the next line X`009`009Qualifier`009DISMAILREP, Nonnegatable X! site-specific: if you want to display only forwarding and unread counts, X!`009`009 add the keyword ', Default' to the end of the next line X`009`009Qualifier`009DISSUBJREP, Nonnegatable X!`009`009`009Display qualifiers X`009`009Qualifier`009MESSAGE, Default X`009`009Qualifier`009PID, Default X`009`009Qualifier`009PROCESSNAME X`009`009Qualifier`009USERNAME, Default X`009`009Qualifier`009PERSONALNAME X`009`009Qualifier`009IMAGENAME, Default X`009`009Qualifier`009TERMINAL, Default X`009`009Qualifier`009LOGINTIME, Default X`009`009Qualifier`009CPUTIME, Default X`009`009Qualifier`009IDLETIME X`009`009Qualifier`009STATE X`009`009Qualifier`009SIZE X`009`009Qualifier`009LOCATION, Default X`009`009Qualifier`009TTTYPE, Default X`009`009Qualifier`009SWAPPED X`009`009Qualifier`009FULL $ GOSUB UNPACK_FILE $ FILE_IS = "FINGERCOM.FOR" $ CHECKSUM_IS = 287199517 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY Xc shareable common sections for usernames, locations, host data, etc. X X`009Parameter`009max_users = 7500 X`009Parameter`009max_terms = 100 X`009Parameter`009max_hosts = 150 X`009Parameter`009max_networks = 5 X Xc-- user database -- X X`009Integer`009`009Usr$I_Max X`009Integer`009`009Usr$I_Last X X`009Parameter`009Usr$Length_Username = 12 X`009Parameter`009Usr$Length_Personalname = 31 X X`009Character*12`009Usr$C_Username(max_users) X`009Character*31`009Usr$C_Personalname(max_users) X X`009Common`009`009/Finger_Usr_Common/ X`0091`009`009Usr$I_Max,`009Usr$I_Last, X`0092`009`009Usr$C_Username, X`0093`009`009Usr$C_Personalname X Xc-- location database -- X X`009Integer`009`009Loc$I_Max X`009Integer`009`009Loc$I_Last X X`009Character*8`009Loc$C_Terminal(max_terms) X`009Character*25`009Loc$C_Location(max_terms) X`009Character*25`009Loc$C_TTType(max_terms) X X`009Common`009`009/Finger_Loc_Common/ X`0091`009`009Loc$I_Max,`009Loc$I_Last, X`0092`009`009Loc$C_Terminal, X`0093`009`009Loc$C_Location, X`0094`009`009Loc$C_TTType X Xc-- host database -- X X`009Integer`009`009Host$I_Max X`009Integer`009`009Host$I_Last X X`009Character*32`009Host$C_Host(max_hosts) X`009Character*1`009Host$C_Type(max_hosts) X`009Character*32`009Host$C_Link(max_hosts) X`009Character*72`009Host$C_Route(max_hosts) X X`009Common`009`009/Finger_Host_Common/ X`0091`009`009Host$I_Max,`009Host$I_Last, X`0092`009`009Host$C_Host, X`0093`009`009Host$C_Type, X`0094`009`009Host$C_Link, X`0095`009`009Host$C_Route X Xc-- miscelleanous stuff -- X X`009Integer`009`009Net$I_Max X`009Integer`009`009Net$I_Last X X`009Character`009Net$C_Type(max_networks) X`009Character*20`009Net$C_Name(max_networks) X X`009Character`009Net$C_Local_Host_Name*32 X`009Character`009Net$C_Organization*80 X X`009Character*32`009Net$C_Router_Host X`009Character*1`009Net$C_Router_Type X`009Character*72`009Net$C_Router_Route X X`009Common`009`009/Finger_Net_Common/ X`0091`009`009Net$I_Max,`009Net$I_Last, X`0092`009`009Net$C_Type, X`0093`009`009Net$C_Name, X X`0095`009`009Net$C_Local_Host_Name, X`0096`009`009Net$C_Organization, X X`0097`009`009Net$C_Router_Host, X`0098`009`009Net$C_Router_Type, X`0099`009`009Net$C_Router_Route X $ GOSUB UNPACK_FILE $ FILE_IS = "FINGERDAE.FOR" $ CHECKSUM_IS = 1935167182 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X`009Program Finger_Dae X Xc`009This is the main program for the jnet Finger Daemon. Xc`009It utilizes calls to jnet (tm) software which provides Xc`009VAX/VMS the ability to emulate an IBM RSCS node. This Xc`009daemon provides incoming jnet access to the Finger command. Xc Xc`009Top level routine written by Craig Watkins. Integrated into Xc`009routine to call Finger by Richard Garland. Xc Xc`009jnet is a trademark of Joiner Associates. Xc Xc`009Mods to jnet interface routines to call new JANLIB interface Xc`009instead of doing everything with low level jnet routines. Xc`009C. R. Watkins 3-Aug-1985 Xc`009`009V41.1.00`009CRW version`009`0093-Aug-1985 Xc`009`009V41.1.01`009fix wake problem`00911-Sep-1985 Xc`009`009V51.1.06`009Replace Jnet_Out_Routine completely, Xc`009`009`009`009add hooks for getting help via jnet, Xc`009`009`009`009general cleanup`009`00918-Mar-1989 Xc`009`009V51.1.09`009Fix common INFO being used for two Xc`009`009`009`009seperate things w/ different contents Xc`009`009`009`009Way to go!!!`009`00915-Apr-1989`009 Xc`009`009V51.1.11`009Add /IAM="user`126node" qualifier to end Xc`009`009`009`009of finger command for mail checking. Xc`009`009`009`009`009`009`00925-Apr-1989 Xc`009`009V51.1.12`009More /IAM stuff.`00927-Apr-1989 Xc`009`009V51.1.19`009More fix for status msg 01-Jul-1989 Xc`009`009V51.1.21`009Update version info 07-Aug-1989 Xc`009`009V51.1.22`009Update version info`00926-Aug-1989 Xc`009`009V51.1.23`009Fix confusion w/ Fortran's LOG function. Xc`009`009`009`009`009`009`00915-Sep-1991 X X`009IMPLICIT INTEGER (A-Z) X `032 X`009Character*25`009Fingerdae_Version /'V51.1.29 of 16-Jan-1992'/ X`009Character`009CMode X`009CHARACTER*99`009MSG_LINE X`009CHARACTER*8`009FROM_USER, FROM_NODE X `032 X`009Logical`009`009Parse_jnet X `032 X`009Character VersionMsg*50 X`009Common`009/Version_Common/ VersionMsg X X`009COMMON /JINFO/ FROM_NODE, FROM_USER X `032 X`009EXTERNAL`009jfLOG X X`009STATUS = JAN_HOOK_INIT (4, 'FINGER') X`009IF (.NOT.STATUS) CALL LIB$STOP(%VAL(STATUS)) X `032 X`009CALL jfLOG('Starting FINGER jnet daemon') X`009Call jfLog(VersionMsg) X`009Call jfLog('FINGERDAE version: '//Fingerdae_version) X`009CALL JAN_VERSION_DSP(jfLOG)`009`009! Log JANLIB version X X1000`009Continue X X`009STATUS = JAN_RECEIVE_MSG (MODE, FROM_NODE, FROM_USER, X`0091`009`009`009`009`009MSG_LINE, MSG_LEN) X`009IF (.NOT.STATUS) GOTO 1200 X`009Write(CMode,2001) Mode X`009Call jfLog (CMode//' - '//From_User//'@'//From_Node//' - '// X`0091`009Msg_Line(:Msg_Len)) X`009If ( Parse_jnet(Msg_Line(:Msg_Len)) ) then X`009 CALL FINGER_jnet(MSG_LINE(:MSG_LEN)) X`009Else X`009 CALL FINGER_jnet('FINGER '//MSG_LINE(:MSG_LEN)) X`009End if X `032 X`009GOTO 1000 X X1200 `009STATUS = SYS$HIBER() X`009IF (.NOT.STATUS) CALL LIB$STOP(%VAL(STATUS)) X `032 X`009GOTO 1000 X2001`009Format(I1) X`009END X X`009SUBROUTINE jfLOG(STRING) X`009IMPLICIT INTEGER*4(A-Z) X`009CHARACTER*(*) STRING X`009INTEGER*4 NOW_TIME(2) X`009CHARACTER*23 TIME_DATE X `032 X X`009CALL SYS$ASCTIM(,TIME_DATE, , %VAL(0)) X `032 X`009OPEN (UNIT=12, DEFAULT FILE='JAN_SYS:.LOG', FILE='FINGER', X`0091 STATUS='UNKNOWN', X`0091 CARRIAGECONTROL='LIST', X`0091 ACCESS='APPEND', X`0091 ERR = 10, X`0091 RECORDSIZE=200) X `032 X`009WRITE(12,1) TIME_DATE,STRING X1`009FORMAT(A23,' ',A) X`009CLOSE(UNIT=12) X `032 X10`009RETURN X`009END X `032 X`009INTEGER FUNCTION RETURN MAIL(LINE) X`009IMPLICIT INTEGER (A-Z) X `032 X`009CHARACTER*(*)`009LINE X`009CHARACTER*8`009FROM_NODE, FROM_USER X `032 X`009COMMON /JINFO/ FROM_NODE, FROM_USER X `032 X`009RETURN MAIL = JAN_SEND_MSG (2, FROM_NODE, FROM_USER, LINE) X X`009RETURN X`009END X `032 X`012 Vc---------------------------------------------------------------------------- X-- X`009Logical Function Parse_jnet(Command) X Xc`009check to see if the keyword "FINGER" is the first element Xc`009on the command line X X`009Character Command*(*), Str$UpCase*80, UpCommand*80 X X`009UpCommand = Str$UpCase(Command) X`009Parse_jnet = .false. X`009ll = len(Command) X X`009If ( Index(UpCommand(:ll),'FINGER') .ne. 0 ) Parse_jnet = .true. X X`009Return X`009End X X`012 Vc---------------------------------------------------------------------------- X-- XC..Finger_jnet`009`009`009`009Call Finger from jnet (DAE) XC..`009`009`009`009`009R. Garland / CUCHEM /28-Nov-1983 X X`009Integer`009Function Finger_jnet(Command) X Xc`009This routine is called from the command parser of the jnet Xc`009daemon DAE. It sets up the appropriate output routine and Xc`009signal handler and then calls Finger. It passes the complete Xc`009command line from DAE to Finger. X X`009Character`009Command*(*) X`009Character`009LocalCommand*132, LocalQualifier*32, LocalUser*9 X`009Character`009Str$UpCase*132 X X`009Character`009Buffer*132 X`009Character`009RMSstring*22 X`009Character`009Msg*255 X X`009Integer`009`009MsgLen X`009Integer`009`009BufferPointer X`009Integer`009`009MaxPointer/80/ X`009Integer`009`009Access/2/ X`009Integer`009`009Finger, X`0091`009`009OutboundLinkUnit /11/, X`0092`009`009UafUnit /12/, X`0093`009`009ScratchUnit /13/ X X`009Common`009/jnet_Buffer/ BufferPointer, MaxPointer, X`0091`009`009Buffer X X`009Common`009`009/jnet_Daemon/ IDaemon X X`009Integer`009`009Lib$Establish X`009Integer`009`009Btrim X`009External`009jnet_Out_Routine X`009External`009jnet_Signal_Handler X`009External`009Fing_Complete X X`009Character*8`009From_User, From_Node X X`009Common`009`009/JINFO/`009From_Node, From_User X X`009Integer`009`009FirstTime X`009Common`009`009/zip/ FirstTime X X`009Character`009C$Temp*80 X`009 Xc initialize things X`009BufferPointer = 0 X`009l_Com = Len(Command) X`009Command = Str$Upcase(Command) X`009IDaemon = .true. X Xc tack on user, node info X`009LocalUser = From_User X`009If (Btrim(LocalUser) .eq. 8) Then X`009 LocalUser = LocalUser(:Btrim(LocalUser))//'*' X`009EndIf X`009LocalQualifier = '/IAM="'//LocalUser(:Btrim(LocalUser)) X`0091 //'`126'//From_Node(:Btrim(From_Node))//'"' X`009LocalCommand = Command//LocalQualifier(:Btrim(LocalQualifier)) X`009l_Com = l_Com+Btrim(LocalQualifier) Xc turn off message Xc !! Site-specific - uncomment the following line if you don't want to show Xc`009`009 the message-of-the-day to other jnet sites. Xc`009Call Lib$Set_Logical('FINGER$MESSAGE','NL:') Xc Establish handler and call finger X`009Call Lib$Establish(jnet_Signal_Handler) X`009FirstTime = 1 X`009ii = Finger( X`0091 LocalCommand(:l_Com),jnet_Out_Routine, Access) X`009If ( .not. ii ) then Xc Here if an abort occured. Xc Close any units left hanging X`009 Close(OutboundLinkUnit,`009Err=1011) X1011`009 Close(UafUnit,`009`009Err=1012) X1012`009 Close(ScratchUnit,`009Err=1013) X1013`009 Continue X`009 BufferPointer = 0 Xc may have to unmap mail file X`009End if X Xc Check for anything left in buffer X`009If (BufferPointer .ne. 0 ) X`0091 Call ReturnMail(Buffer(:BufferPointer)) Xc Get exit message from Finger X`009If (ii .eq. %loc(Fing_Complete)) Then X`009 Call Sys$Getmsg(%val(ii),MsgLen,Msg,%VAL(1),) X`009Else X`009 Call Sys$Getmsg(%Val(ii),MsgLen,Msg,%VAL(15),) X`009EndIf X`009Call ReturnMail(Msg(:MsgLen)) X Xc exit with normal status X`009Finger_jnet = 1 X`009Return X X`009End X`012 Xc------------------------------------------------------------------------- X`009Integer Function jnet_Signal_Handler( X`0091`009SignalVector,MechanismVector) X Xc The point of this handler is really error message routing rather -+-+-+-+-+ End of part 14 +-+-+-+-+-