+-+-+-+ Beginning of part 16 +-+-+-+
X`009      LN_array(Index) = Login_Time(1:5)
X`009    Else If (SortField .eq. 6) Then
X`009      LN_array(Index) = Image_Name
X`009    Else If (SortField .eq. 7) Then
X`009      Write(CPU_Time, 1002) CPUTIM
X`009      LN_array(Index) = CPU_Time
X`009    EndIf
X`009    Index = Index + 1
X`009  EndDo
X`009EndIf
X`009Swapped = .true.
X
Xc  Sort by the extracted data.
X
X`009DoWhile ( Swapped )
X`009    Index = 1
X`009    Swapped = .false.
X`009    DoWhile (Index .lt. Last_Number)
X`009        If ( LGT ( LN_array(Index_array(Index  )),
X`0091                  LN_array(Index_array(Index+1)) ) ) then
X`009            Temp = Index_array(Index)
X`009            Index_array(Index) = Index_array(Index + 1)
X`009            Index_array(Index + 1) = Temp
X`009            Swapped = .true.
X`009        EndIf
X`009        Index = Index + 1
X`009    EndDo
X`009EndDo
X
Xc  Send the sorted data to the output.
X
X`009Index = 1
X`009DoWhile (Index .le. Last_Number)
X`009    Call User_Info(PID_array(Index_array(Index)),
X`0091                  STS_array(Index_array(Index)),
X`0092                  Prcnam_array(Index_array(Index)),
X`0093                  Username_array(Index_array(Index)),
X`0094                  Terminal_array(Index_array(Index)),
X`0095                  State_array(Index_array(Index)),
X`0096                  PgCnt_array(Index_array(Index)),
X`0097                  HeaderWritten,
X`0098                  TestOutput,
X`0099                  FP_array(Index_array(Index)),
X`0099                  Finger_Out_Routine)
X`009    Index = Index + 1
X`009EndDo
X
X
X`009Return
X
X1001`009Format(Z8)
X1002`009Format(Z10)
X`009End
X
$ GOSUB UNPACK_FILE

$ FILE_IS = "FINGERSHR.FOR"
$ CHECKSUM_IS = 1764448321
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
XC..FingerShr.For`009`009`009Block data for Finger shared commons
XC..`009`009`009`009`009R. Garland / C.U.Chemistry / 5-Oct-1983
X
X`009Block data`009Fingershr
X
X`009Include`009`009'Fingercom.for'
X
X`009End
$ GOSUB UNPACK_FILE

$ FILE_IS = "FINGERTER.FOR"
$ CHECKSUM_IS = 1887047619
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
Xc FINGERTER.FOR - Return terminal type name based on the DVI$_DEVTYPE code
Xc This is really dumb. VMS needs model names in enough places that this
Xc ought to be available by some *sane* method. Having said that...
X
Xc------------------------------------------------------------------
X`009Subroutine TypeToTerm (TTType, TermType)
X
X`009Character`009TTType*25, ModelArray*12
X
X`009Integer`009`009TermType, LookUp
X
Xc The following will need to be enlarged if VMS adds terminal types
X
X`009Dimension`009ModelArray(255)
X
Xc Load up the mess
X`009Data`009       (ModelArray(I), I = 1, 255)`009/255*'Invalid?'/
X`009Data`009`009ModelArray(1) `009/'Unknown'/
X`009Data`009`009ModelArray(2) `009/'VT05'/
X`009Data`009`009ModelArray(3) `009/'VK100'/
X`009Data`009`009ModelArray(4) `009/'VT173'/
X`009Data`009`009ModelArray(5) `009/'BTS'/
X`009Data`009`009ModelArray(11) `009/'TEK401X'/
X`009Data`009`009ModelArray(17) `009/'FT1'/
X`009Data`009`009ModelArray(18) `009/'FT2'/
X`009Data`009`009ModelArray(19) `009/'FT3'/
X`009Data`009`009ModelArray(20) `009/'FT4'/
X`009Data`009`009ModelArray(21) `009/'FT5'/
X`009Data`009`009ModelArray(22) `009/'FT6'/
X`009Data`009`009ModelArray(23) `009/'FT7'/
X`009Data`009`009ModelArray(24) `009/'FT8'/
X`009Data`009`009ModelArray(33) `009/'LA36'/
X`009Data`009`009ModelArray(34) `009/'LA120'/
X`009Data`009`009ModelArray(35) `009/'LA34'/
X`009Data`009`009ModelArray(36) `009/'LA38'/
X`009Data`009`009ModelArray(37) `009/'LA12'/
X`009Data`009`009ModelArray(38) `009/'LA100'/
X`009Data`009`009ModelArray(39) `009/'LQP02'/
X`009Data`009`009ModelArray(40) `009/'LA84'/
X`009Data`009`009ModelArray(41) `009/'LA210'/
X`009Data`009`009ModelArray(42) `009/'LN03'/
X`009Data`009`009ModelArray(43) `009/'LN01K'/
X`009Data`009`009ModelArray(44) `009/'LA80'/
X`009Data`009`009ModelArray(65) `009/'VT52'/
X`009Data`009`009ModelArray(66) `009/'VT55'/
X`009Data`009`009ModelArray(97) `009/'VT100'/
X`009Data`009`009ModelArray(98) `009/'VT101'/
X`009Data`009`009ModelArray(99) `009/'VT102'/
X`009Data`009`009ModelArray(100) /'VT105'/
X`009Data`009`009ModelArray(101)`009/'VT125'/
X`009Data`009`009ModelArray(102)`009/'VT131'/
X`009Data`009`009ModelArray(103)`009/'VT132'/
X`009Data`009`009ModelArray(104) /'VT80'/
X`009Data`009`009ModelArray(111)`009/'VT2xx'/
X`009Data`009`009ModelArray(112)`009/'PRO 3xx'/
X`009Data`009`009ModelArray(113) /'VT3xx'/
X`009Data`009`009ModelArray(248) /'GENERIC'/
X`009Data`009`009ModelArray(249) /'GENANSI'/
X`009Data`009`009ModelArray(250) /'GENDEC'/
X`009Data`009`009ModelArray(252) /'LA75'/
X`009Data`009`009ModelArray(253) /'LA50'/
X
Xc Ensure within our bounds
X`009If (TermType .lt. 0)
X`0091    TermType = 0
X`009If (TermType .gt. 255)
X`0091    TermType = 0
X
Xc Make 1-based
X`009TermType = TermType + 1
X
Xc Is it legal?
X`009If (TermType .eq. 0) Then
X`009    TTTYpe = 'Invalid?'
X`009Else
X`009    TTType = ModelArray( TermType )
X`009EndIf
X`009Return
X
X`009End
$ GOSUB UNPACK_FILE

$ FILE_IS = "FINGER_BUILD.COM"
$ CHECKSUM_IS = 185581348
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X$!..BuildLib.Com`009`009`009Build Finger Libraries
X$!..`009`009`009`009`009R. Garland / CUCHEM / Feb-1985
X$!.. VMS V5.1 version
X$ Set`009NoOn
X$ Type`009Sys$Input
X
X`009This procedure builds the required libraries for Finger.
X
X$ Inquire Ans "Do you wish to compile everything? (YES) "
X$ All = 0
X$ If Ans .eqs. "" then All = 1
X$ If Ans then All = 1
X$ If All then goto B_1
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Inquire Ans "Do you wish to compile FINGER.FOR? (YES) "
X$ C_1 = 0
X$ If Ans .eqs. "" then C_1 = 1
X$ If Ans then C_1 = 1
X$ If .not. C_1 then Goto B_1_1
X$ B_1:
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Set Verify
V$! ignore compiler warnings... harmless (which - the compiler or the warnings
X?)
X$ Fortran/NoCheck/NoDebug`009FINGER.FOR
X$ Fortran/NoCheck/NoDebug/NoOptimize FINGERSHO.FOR
X$ B_1_1:`009!'F$Verify(0)
X$ If All then goto B_2
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Inquire Ans "Do you wish to compile FINGERSHR.FOR? (YES) "
X$ C_2 = 0
X$ If Ans .eqs. "" then C_2 = 1
X$ If Ans then C_2 = 1
X$ If .not. C_2 then Goto B_2_2
X$ B_2:
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Set Verify
X$ Fortran/NoCheck/NoDebug`009FINGERSHR.FOR
X$ B_2_2:`009!'F$Verify(0)
X$ If All then goto B_2A
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Inquire Ans "Do you wish to compile FINGMAINT.FOR? (YES) "
X$ C_2A = 0
X$ If Ans .eqs. "" then C_2A = 1
X$ If Ans then C_2A = 1
X$ If .not. C_2A then Goto B_2_2A
X$ B_2A:
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Set Verify
X$ Fortran/NoCheck/NoDebug`009FINGMAINT.FOR
X$ B_2_2A:`009!'F$Verify(0)
X$ If All then goto B_3
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Inquire Ans "Do you wish to compile FINGMAIN.FOR? (YES) "
X$ C_3 = 0
X$ If Ans .eqs. "" then C_3 = 1
X$ If Ans then C_3 = 1
X$ If .not. C_3 then Goto B_3_3
X$ B_3:
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Set Verify
X$ Fortran/NoCheck/NoDebug`009FINGMAIN.FOR
X$ B_3_3:`009!'F$Verify(0)
X$ If All then goto B_4
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Inquire Ans "Do you wish to compile the other fortran routines? (YES) "
X$ C_4 = 0
X$ If Ans .eqs. "" then C_4 = 1
X$ If Ans then C_4 = 1
X$ If .not. C_4 then Goto B_4_4
X$ B_4:
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Set Verify
X$ Fortran/NoCheck/NoDebug`009DUMJ.FOR
X$ Fortran/NoCheck/NoDebug`009TCPFINGER.FOR
X$ Fortran/NoCheck/NoDebug`009FINGERDAE.FOR
X$ Fortran/NoCheck/NoDebug`009GETQUEUE.FOR
X$ Fortran/NoCheck/NoDebug`009FINGERTER.FOR
X$ Fortran/NoCheck/NoDebug`009FINGERLAT.FOR
X$ B_4_4:`009!'F$Verify(0)
X$ If All then goto B_5
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Inquire Ans "Do you wish to assemble the MACRO routines? (YES) "
X$ C_5 = 0
X$ If Ans .eqs. "" then C_5 = 1
X$ If Ans then C_5 = 1
X$ If .not. C_5 then Goto B_5_5
X$ B_5:
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Set Verify
X$ Macro`009`009TERMINAL.MAR
X$ Macro`009`009IDLE-MON.MAR
X$ Macro`009`009WILD.MAR
X$ Macro`009`009KLUDGE.MAR
X$ Macro`009`009GETJIB.MAR
X$ B_5_5:`009!'F$Verify(0)
X$ If All then goto B_6
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Inquire Ans "Do you wish to compile the .CLD and .MSG files? (YES) "
X$ C_6 = 0
X$ If Ans .eqs. "" then C_6 = 1
X$ If Ans then C_6 = 1
X$ If .not. C_6 then Goto B_6_6
X$ B_6:
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Set Verify
X$ Set Command/Object`009FINGERCLD.CLD
X$ Set Command/Object`009MAINTCLD.CLD
X$ Message`009FINGERMSG
X$ B_6_6:`009!'F$Verify(0)
X$ If All then goto B_7
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Inquire Ans "Do you wish to create new libraries? (YES) "
X$ C_7 = 0
X$ If Ans .eqs. "" then C_7 = 1
X$ If Ans then C_7 = 1
X$ If .not. C_7 then Goto B_7_7
X$ B_7:
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ Set Verify
X$ Library`009JLIB/Object/Create`009DUMJ
X$ Rename`009DUMJ.OBJ;*`009DUMJ.NOBJ;*`009!'F$Verify(0)
X$ Set Verify
X$ Library`009FINGERLIB/Object/Create`009*.OBJ
X$! Delete`009*.OBJ;*`009`009!'F$Verify(0)
X$ Set Verify
X$ Library`009FINGMAINT/Help/Create=(Blocks:12)  FINGMAINT
X$ Rename`009DUMJ.NOBJ;*`009DUMJ.OBJ;*
X$ Goto`009`009B_8`009!'F$Verify(0)
X$ B_7_7:`009!'F$Verify(0)
X$ Write`009`009Sys$Output`009" "`009! 'F$Verify(0)
X$ If .not. C_4 then goto B_7_2
X$ Set Verify
X$ Library`009JLIB/Object`009DUMJ
X$ Delete`009DUMJ.OBJ;*`009!'F$Verify(0)
X$ B_7_2:`009!'F$Verify(0)
X$ Set Verify
X$ Library`009FINGERLIB/Object`009*.OBJ
X$ Delete`009*.OBJ;*`009`009!'F$Verify(0)
X$ Set Verify
X$ Library`009FINGMAINT/Help`009FINGMAINT
X$ B_8:`009!'F$Verify(0)
X$ Type`009`009Sys$Input
X
X`009Time to clean up ...
X
X$ Inquire Ans "Do you wish to PURGE everything? (YES) "
X$ C_8 = 0
X$ If Ans .eqs. "" then C_8 = 1
X$ If Ans then C_8 = 1
X$ If .not. C_8 then Goto B_9
X$ Set Verify
X$ Purge/Log
X$ B_9:`009!'F$Verify(0)
X$ Type`009`009Sys$Input
X
X`009Libraries sucessfully built.
X$ Exit
$ GOSUB UNPACK_FILE

$ FILE_IS = "FINGER_CONTEXT.FOR"
$ CHECKSUM_IS = 1113269135
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
Xc  include file for certain context information
X
X`009Character`009DECnet_node*8
X
X`009Common`009/Finger_Context/
X
X`0091`009DECnet_node
X
$ GOSUB UNPACK_FILE

$ FILE_IS = "FINGER_CUSTOM.TXT"
$ CHECKSUM_IS = 155240187
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
XCustomizing FINGER
X
XFINGER has a great many customizations you can do.  This short document  is
Xmeant to give some idea of a few of them.  All locations with site-specific
Xselections are commented and begin with the string "site-specific".
X
XDefaults:
X
X     To select default fields for display, you edit FINGERCLD.CLD.
X
X     You  have  to edit FINGER.FOR to change widths of  individual  display
X     fields, however.
X
XMinimum_match_characters:
X
X     By defining this parameter, you set the fewest characters permitted in
X     a  wildcard match. If it's 0, then the % character will give  a  total
X     user  list,  and short queries such as vowels can be  used  to  obtain
X     lists  of users.  If it is defined to be some larger number (e.g.,  3)
X     then  when  you request users and give that many characters  of  their
X     names, Finger reports full account names.  For shorter queries, Finger
X     only  tells  if an account that is exactly the  string  given  exists.
X     Thus,  if  it's 3, Finger A will say "no such account: A"  whereas  if
X     it's  0,  Finger would list all accounts whose  usernames  or  account
X     names contained the letter A.  Edit LOCAL_FINGER to change this.
X
XPublic directories:
X
X     Finger can be set up to report only images in specific "public" direc-
X     tories  (so if image names are sensitive, it won't report them  unless
X     they're  in  "open" directories like sys$system. You  have  to  define
X     which  are  public directories on your system and uncomment  the  code
X     that checks them in GET_IMAGE.
X
XMail:
X
X     Finger can report unread mail.  There are selections that cause it  to
X     report  or not report counts of unread messages. In addition  you  can
X     have  Finger  report the date, time, and Subject  fields  of  messages
X     *you* sent to the fingeree.  As of version  V51.1.20 these  can now be
X     changed without recompiling.  In the FINGERCLD.CLD file are two quali-
V     fiers  (DISMAILREP - disable  *all* mail  reporting,  and DISSUBJREP -`0
X32
X     disable the  date/time/subject  information).  Simply add the  keyword
X     ', Default' after the qualifier you want. As these are defined as non-
X     negatable, users cannot circumvent them by saying (for example) NODIS-
X     MAILREP.
X
XBypass:
X
X     Finger  can be built, by uncommenting all the BYPASS logic, to  filter
X     all  control  characters in FINGER.PLN files.  If users at  your  site
X     have a habit of inserting escape sequences into their FINGER.PLN files
X     that turn on "organ mode" in VT100, or lots of non-DEC terminals  that
X     VT100  escape  sequences could confuse, select  this.   The  resulting
X     Finger  will  normally filter control chars out,  unless  the  /BYPASS
X     switch  is given. If this is done, it will pass these characters  nor-
X     mally.  You  have to edit the FINGERCLD.CLD file also  to  define  the
X     BYPASS qualifier or you'll never be able to turn it on.
X
XLAT Info:
X
X     LAT  terminals  are  reported as  'server_name'+"  "+'port_name'.  The
X     maximum  lengths displayed, etc. are changeable by  editing  GET_LOCA-
X     TION.
X
XLoad Averaging device:
X
X     The  load averaging device name can be selected as LAV0:  or  whatever
X     else is appropriate. If you don't have the LAV driver, load  averaging
X     will  not be displayed. (NOTE: LAVDRIVER.MAR [for VMS V5] is  included
X     on this distribution). Edit HEADER_FULL to change.
X
X
XUser information:
X
X     The  USER_INFO  routine can be modified on a site  specific  basis  to
X     change field widths. Selecting what information is displayed by  edit-
X     ing the FINGERCLD.CLD file.
X
XTreating DECnet as a single system:
X
X     Normally,  you need to have a 'perfect' match of user and node to show
V     the  unread mail  information.  An option  exists to treat the  entire`0
X32
X     DECnet as a single system.  Thus, if person X has username Y on all of
X     your systems,  if X fingers someone,  mail from X will be shown  inde-
X     pendently  of the node it came  from matching the node the  finger was
X     done from.  This is only for  DECnet,  and is OFF by default.  In PER-
X     SONAL_INFO.
X
XPlanfile name:
X
X     The name of the FINGER.PLN file can be chosen on a per site basis. The
X     current  version  will try both FINGER.PLN and PLAN.  You  can  change
X     these as you like.  In PERSONAL_INFO.
X
XPrettying of personal names:
X
X     You  can  elect to have some standard transformations applied  to  the
X     personal  name  fields, such as changing 'Lastname, First'  to  'First
X     Lastname"  and converting to mixed case. However, be aware  that  this
X     will  mess  up names like 'First Lastname, Jr.'  (becomes  'Jr.  First
X     Lastname'),  as well as things like 'McDonald' coming out  as  'Mcdon-
X     ald'. In GET_USERNAME, LOCAL_FINGER, and FIX_NAME.
X
XPrettying in general:
X
X     You can elect several styles of 'prettying'. In MAKE_PRETTY.
X
X/IAM stuff:
X
X     By default, Finger will tack on a qualifier called /IAM containing the
-+-+-+-+-+ End of part 16 +-+-+-+-+-
