+-+-+-+ Beginning of part 5 +-+-+-+ X`009 "VT132 VT220 VT240 VT241 VT105 VK100 RT02 LA30 "+ & X`009 "VT50 VT50H VT05 VT05B LA30S 2741 ASR33 KSR33 "+ & X`009 "ASR35 KSR35 LN03 UnknownUnknownUnknownUnknownUnknown"+ & X`009 "UnknownUnknownUnknownLA210 LQP03 LQP02 LA75 VT330 "+ & X`009 "VT340 VT320 " & X`009\ a$=sys(chr$(6%)+chr$(-12%)) & X`009\ i%=peek(swap%(cvt$%(mid(a$,13%,2%)))) & X`009\ jobmax%=swap%(i%) and 255% & X`009\ jobact%=i% and 255% & X`009\ dsklog%=swap%(cvt$%(mid(a$,21%,2%))) & X`009\ devnam%=swap%(cvt$%(mid(a$,5%,2%))) & X`009\ devokb%=swap%(cvt$%(mid(a$,9%,2%))) & X`009\ hdrout%=0% & X`009\ opsys$=cvt$$(right(sys(chr$(6%)+chr$(9%)+chr$(0%)),3%),5%) & X`009\ i%=instr(1%,opsys$," ") & X`009\ i%=instr(i%+1%,opsys$," ") & X`009\ opsys$=left(opsys$,i%-1%) & X`009\ day.week$(0%)="Sunday" & X`009\ day.week$(1%)="Monday" & X`009\ day.week$(2%)="Tuesday" & X`009\ day.week$(3%)="Wednesday" & X`009\ day.week$(4%)="Thursday" & X`009\ day.week$(5%)="Friday" & X`009\ day.week$(6%)="Saturday" & X`009\ month.year$(0%)="Jan" & X`009\ month.year$(1%)="Feb" & X`009\ month.year$(2%)="Mar" & X`009\ month.year$(3%)="Apr" & X`009\ month.year$(4%)="May" & X`009\ month.year$(5%)="Jun" & X`009\ month.year$(6%)="Jul" & X`009\ month.year$(7%)="Aug" & X`009\ month.year$(8%)="Sep" & X`009\ month.year$(9%)="Oct" & X`009\ month.year$(10%)="Nov" & X`009\ month.year$(11%)="Dec" & X`009\ minwld%=0% & X`009\ nodreq%=0% & X`009\ ljkflg%=0% & X`009\ flags%(1%)=143% & X`009\ flags%(2%)=3575% & X`009\ flags%(3%)=15% & X`009\ l.host$="" & X`009\ l.msg$="" & X`009\ l.org$="" & X`009\ router$="" & X`009\ open "FINGER$:FINGER.CNF" for input as file #9%, mode 6144%, & X`009 access read, allow modify & X`009! Set up version string, preset some defaults if couldn't open the & X`009! configuration file, open the configuration file & X X31010`009input line #9%, a$ & X`009\ goto 31010 if left(a$,1%)="!" & X`009\ goto 31030 if left(a$,1%)="Q" & X`009\ b$=cvt$$(left(a$,1%),32%) & X`009\ a$=left(a$,len(a$)-2%) & X`009\ a$=right(a$,3%) & X`009\ l.host$=a$ if b$="H" & X`009\ l.org$=a$ if b$="O" & X`009\ l.msg$=a$ if b$="M" & X`009\ router$=a$ if b$="R" & X`009\ goto 31020 if router$="0" & X`009\ minwld%=val(a$) if b$="W" & X`009\ nodreq%=val(a$) if b$="N" & X`009\ ljkflg%=val(a$) if b$="L" & X`009\ flags%(1%)=val(a$) if b$="1" & X`009\ flags%(2%)=val(a$) if b$="2" & X`009\ flags%(3%)=val(a$) if b$="3" & X`009\ goto 31010 & X`009! Read a line from the finger configuration file. & X`009! Skip if a comment, else set appropriate item and loop. & X X31020`009msg$="?FINGER - Error in configuration file FINGER$:FINGER.CNF"+ & X`009 chr$(13%)+chr$(10%) & X`009\ gosub 27000 & X`009\ router$="" & X`009\ close #9% & X`009\ goto 31040 & X`009! Print error message and bail out. & X`009! If anything is wrong with the file, the router information is & X`009! deleted as being unreliable. & X X31030`009close #9% & X`009! Close configuration file & X X31040`009for i%=len(command$) to 1% step -1% & X`009\ goto 31050 if mid(command$,i%,1%)="@" & X`009\ goto 31070 if mid(command$,i%,2%)="::" & X`009\ next i% & X`009\ goto 2000 & X`009! Traverse the command looking for a nodespec & X`009! If we didn't find one, it's a local FINGER, otherwise continue & X`009! into network command splitting & X X31050`009command.1$=left(command$,i%-1%) & X`009\ command.2$="" & X`009\ j%=instr(i%+1%,command$," ") & X`009\ command.2$=right(command$,j%) if j% & X`009\ goto 31060 if j% & X`009\ j%=instr(i%+1%,command$,"/") & X`009\ command.2$=right(command$,j%) if j% & X`009! Get the left part of the command, look for stuff after nodespec. & X`009! If found, save as right part. & X X31060`009j%=len(command$)+1% if j%=0% & X`009\ node$=mid(command$,i%+1%,j%-i%-1%) & X`009\ command$=command.1$+command.2$ & X`009\ goto 28000 & X`009! Build node string, strip from command string & X`009! Go do remote FINGER command & X X31070`009for j%=i%-1% to 1% step -1% & X`009\ goto 31080 if mid(command$,j%,1%)=" " & X`009\ next j% & X`009! Find the start of the nodespec & X X31080`009node$=mid(command$,j%+1%,i%-j%-1%) & X`009\ command$=left(command$,j%)+right(command$,i%+2%) & X`009\ goto 28000 & X`009! Build node and command strings & X`009! Go do remote FINGER command & X`012 X X32000`009! Error handlers & X`009! & X`009erno%=err`009`009`009`009`009! Error number & X`009\ resume 32060 if erno%=28%`009`009`009! Local `094C & X`009\ resume 2020 if erl= 2010`009`009`009! No help file & X`009\ resume 2040 if erl= 2030`009`009`009! Eof on help file & X`009\ resume 32080 if erl= 2050`009`009`009! No username file & X`009\ resume 2120 if erl= 2090`009`009`009! No message file & X`009\ resume 2110 if erl= 2100`009`009`009! Eof on message file & X`009\ resume 4000 if erl= 3020`009`009`009! User not found & X`009\ resume 3050 if erl= 3040`009`009`009! No MAIL.MAI file & X`009\ resume 3130 if erl= 3110`009`009`009! No planfile & X`009\ resume 3140 if erl= 3120`009`009`009! Eof on planfile & X`009\ resume 4030 if erl= 4010`009`009`009! User not found & X`009\ resume 25030 if erl=25020`009`009`009! User not found & X`009\ resume 25120 if erl=25110`009`009`009! No such job & X`009\ resume 25240 if erl=25220`009`009`009! Not a LAT terminal & X`009\ resume 25250 if erl=25240`009`009`009! Terminal went away & X`009\ resume 28020 if erl=28010 `009`009`009! Rcvr already decl. & X`009\ resume 28120 if erl=28030`009`009`009! Error on connect & X`009\ resume 32010 if erl=28050 and erno%=5%`009! Receive suspend & X`009\ resume 32080 if erl=28000`009`009`009! No username file & X`009\ resume 32020 if erl=28090 and erno%=5%`009! Receive suspend & X`009\ resume 28110 if erl=28100`009`009`009! Error on remove RCV & X`009\ resume 32030 if erl=27020`009`009`009! Transmit suspend & X`009\ resume 29020 if erl=29010`009`009`009! Rcvr already decl. & X`009\ resume 32040 if erl=29060 and erno%=5%`009! Receive suspend & X`009\ resume 31020 if erl=31000`009`009`009! Error opening .CNF & X`009\ resume 31020 if erl=31010`009`009`009! Error reading .CNF & X`009\ resume 31040 if erl=31020`009`009`009! Error closing .CNF & X`009\ resume 32070 if erl=32060`009`009`009! Error on remove RCV & X`009\ resume 32050 if erl=32610`009`009`009! Transmit suspend & X`009\ resume 32767 if erl=32620`009`009`009! Error killing job & X`009\ resume 32090`009`009`009`009`009! Error we don't do & X X32010`009sleep 1% & X`009\ i.retcnt%=i.retcnt%+1% & X`009\ goto 28050 if i.retcnt%<5% & X`009\ erno%=512% & X`009\ goto 28120 & X`009! Wait a bit, increment retry counter and try again & X X32020`009sleep 1% & X`009\ i.retcnt%=i.retcnt%+1% & X`009\ goto 28090 if i.retcnt%<5% & X`009\ erno%=512% & X`009\ goto 28120 & X`009! Wait a bit, increment retry counter and try again & X X32030`009sleep 1% & X`009\ o.retcnt%=o.retcnt%+1% & X`009\ goto 27020 if o.retcnt%<5% & X`009\ erno%=512% & X`009\ goto 32600 & X`009! Wait a bit, increment retry counter and try again & X X32040`009sleep 1% & X`009\ i.retcnt%=i.retcnt%+1% & X`009\ goto 29060 if i.retcnt%<5% & X`009\ erno%=512% & X`009\ goto 32600 & X`009! Wait a bit, increment retry counter and try again & X X32050`009sleep 1% & X`009\ o.retcnt%=o.retcnt%+1% & X`009\ goto 32610 if o.retcnt%<5% & X`009\ erno%=512% & X`009\ goto 32620 & X`009! Wait a bit, increment retry counter and try again & X X32060`009a$=sys(chr$(6%)+chr$(22%)+chr$(-9%)+chr$(1%)+string$(6%,0%)+ & X`009 chr$(0%)+chr$(0%)+cvt%$(swap%(0%))+cvt%$(swap%(0%))+ & X`009 string$(18%,0%)+chr$(1%)+string$(5%,0%)) & X`009\ a$=sys(chr$(6%)+chr$(22%)+chr$(0%)+chr$(0%)+string$(30%,0%)+ & X`009 chr$(1%)+string$(5%,0%)) & X`009! Send link abort message and remove our receiver & X X32070`009close #12% & X`009\ goto 32767 & X`009! Close the buffer channel and exit. & X X32080`009msg$="?FINGER - Cannot open username file FINGER$:FINGER.DAT"+ & X`009 chr$(13%)+chr$(10%) & X`009\ gosub 27000 & X`009\ goto 32600 & X X32090`009msg$=cvt$$(right(sys(chr$(6%)+chr$(9%)+chr$(erno%)),3%),5%)+ & X`009 " at line "+num1$(erl)+"."+chr$(13%)+chr$(10%) & X`009\ gosub 27000 & X`009! Error we don't handle, simply report it & X`012 X X32600`009! We are done, make an orderly exit. & X`009& X`009o.retcnt%=0% & X`009\ msg$=chr$(13%)+chr$(10%) & X`009\ gosub 27000 if accmod%=1% & X X32610`009goto 32767% if accmod%<>3% & X`009\ field #11, 1% as buff11$ & X`009\ lset buff11$=chr$(255%) & X`009\ a$=sys(chr$(6%)+chr$(22%)+chr$(-8%)+chr$(1%)+string$(6%,0%)+ & X`009 chr$(11%)+chr$(0%)+cvt%$(swap%(1%))+cvt%$(swap%(0%))+ & X`009 string$(24%,0%)) & X`009! Send flush character in disconnect message & X X32620`009close #11% & X`009\ a$=sys(chr$(6%)+chr$(8%)+chr$(0%)+string$(24%,0%)+chr$(255%)) & X`009! Close our workfile and kill self & X X32767`009end`009`009`009`009! Not as simple as it looked, eh? $ GOSUB UNPACK_FILE $ FILE_IS = "FINGER11.CMD" $ CHECKSUM_IS = 343023626 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY XFINGER$:FINGER/FP,FINGER$:FINGER=FINGER$:FINGER/MP XUNITS = 13 XASG = SY:5:6:7:8:9:10:11:12 XCLSTR = CSPLIB,RMSRES:RO X// $ GOSUB UNPACK_FILE $ FILE_IS = "FINGER11.CNF" $ CHECKSUM_IS = 1679900571 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X! Configuration file for finger. See additional comments at end. XH MYNODE PDP-11/44 XO Your company name - this systems's function XR THEVAX XM @FINGER$:FINGER.MSG XW 0 XN 0 XL 0 X1 143 X2 3575 X3 15 XQ X! X! Sample finger configuration file. You *must* follow this format or you X! will get errors. The first column must be either an exclamation point X! (!) or one of the characters H, O, R, M, W, N, L, 1, 2 or 3, in any or- X! der. The file scan is terminated when a line starting with Q is found. X! X! The usage of the letters is as follows: X! X! H - The string beginning in column 3 is the local host name, with any X! other comments (such as CPU type) desired. X! O - The name of the local organization (your company or department name). X! R - The node name of a host to service requests for nodes not known lo- X! cally. Note: This is used for DECnet lookup, and must be in a format X! considered valid by DECnet. It is rejected if it is either "0" or the X! local host name, but subtle errors can occur by having two nodes each X! configured to be the router for the other. X! M - Message of the day, either a text string or a filename prefaced with X! an @-sign to type the contents of that file. X! W - The minimum number of non-wildcard characters allowed for lookups. A X! value of 0 will allow any match, 1 needs at least one non-wild char- X! acter, etc. X! N - Flag for whether nodename is considered in the mail From: match. 0=no, X! 1=yes. X! L - Flag whether finger should disable reporting mail information. 0=report X! unread count and subjects from sender, 1=report unread count, disable X! subjects, 2=disable both count and subjects. Why is this flag called V! 'L'? If you know the way LJK feels about mail read receipts, you'd know X. X! 1 - The default command qualifiers, part 1 of 3 X! 2 - The default command qualifiers, part 2 of 3 X! 3 - The default command qualifiers, part 3 of 3 X! Q - End of configuration file (quit) $ GOSUB UNPACK_FILE $ FILE_IS = "FINGER11.COM" $ CHECKSUM_IS = 1025662047 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X$! Command file to rebuild FINGER. BP2 V2 required X$SWITCH DCL X$SET NOON X$MACRO/RSX/NOLIST FINGER$:FINMON X$COPY $BP2IC2.TSK TEMP$:/noreplace/clustersize=64 X$RUN TEMP$:BP2IC2 XSCALE 0 XOLD FINGER$:FINGER.B2S XCOMPILE FINGER.OBJ/OBJ/CHA/LIN/NODEB/WOR/NOCRO/NOLIS/FLAG:NODEC X$SW DCL X$TKB @FINGER$:FINGER X$DELETE/NOLOG FINGER.OBJ X$DELETE/NOLOG FINMON.OBJ X$PIP FINGER$:FINGER.TSK<232>/RE $ GOSUB UNPACK_FILE $ FILE_IS = "FINGER11.DOC" $ CHECKSUM_IS = 1882173448 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X[FINGER.DOC] September 1989 X XRSTS/E Version V9.6-11 Finger Version V1.1-07 X X RSTS/E FINGER X X Written by X Terry Kennedy X Operations Manager, Academic Computing X Saint Peter's College X 2641 Kennedy Blvd X Jersey City, NJ 07306 X (201) 435-0252 X terry@spcvxa.bitnet X X XOVERVIEW X XRSTS/E Finger is a re-write of VMS Finger for RSTS/E. It supports most of Xthe qualifiers supported by VMS Finger V51.1.22, as well as some additional Xones. Since the author knows of no method to directly connect a RSTS/E sys- Xtem to Bitnet or the Internet, no code to support such connections is pres- Xent in RSTS/E Finger. However, if a cooperating VAX with VMS finger is Xavailable via DECnet, RSTS/E Finger will transparently use it to perform Xrouting functions. X XThe program serves 3 main functions: X Xo Identifies users of the system, where they are, what program, etc. X For this function it serves as a personalized SYSTAT. X Xo Finds a specific user, gives the above information if s/he is logged X on, and in addition gives information about his/her mail and an op- X tional information file s/he may supply. (Plan file) X Xo Serves as an in-bound and out-bound network server. Remote users can X finger the local system as above and local users can finger remote X systems that support the function. As part of the network "finger X protocol" it performs explicit route-through. This is valuable in an X internet situation such as going from DECnet to ARPAnet or BITnet etc. X XIn a network situation where users are spread over many nodes, and in which Xthere is large mail traffic, it can be an invaluable tool in finding peo- Xple, ascertaining if they got your mail etc. X XIf you are not part of a network, the program is still valuable as a local Xutility. Most use of it is likely to be local except in very distributed Xsituations anyway. If you are not part of a network, just ignore the net- Xwork related instructions below. X X XINSTALLATION INSTRUCTIONS: X XNetwork distribution is via a VMS_SHARE archive distributed in several X(many?) parts in order to remain under 16K per part. Thus, network distri- Xbution does not contain object or executables. If you receive a tape, there Xwill be a single directory containing all the required files. X X 1 X`012 XSteps necessary to install finger: X Xo Copy the entire distribution into a disk directory. This can be a /NO- X USER account. I suggest one of the reserved-for-customer-use [0,*] X directories. X Xo Define the FINGER$ logical: X X $ ASSIGN/SYSTEM _SY:[somewhere] FINGER$: X Xo If you received the distribution as ASCII text (no binaries included), X you will need to create both the FINGER.TSK and FINMAI.TSK programs. X To do this, you will need the Basic-Plus-2 Version 2 compiler. This is X done by invoking the FINBLD.COM procedure: X X $ @FINGER$:FINBLD X X You NEED NOT do this step if you received your distribution on tape or X via DECnet. X -+-+-+-+-+ End of part 5 +-+-+-+-+-