We have the same problem here. Shortly, I will be putting the following code on www.mind-set.com along with a lot of other utilities we use. Unfortunately, this is for use under Apache, but you can remove some of the formatting (cr lf):
000100$CONTROL USLINIT,BOUNDS,LOCKING,LINES=58
000200 IDENTIFICATION DIVISION.
000300 PROGRAM-ID. CSM506.
000400
000500*******************************************************
000600*
000700* This program displays remote work stations
000800* with more than one session logged on.
000900*
001000* CSM506 is the version designed for the INTERNET
001100*
001200*******************************************************
001300
001400* This program must be compiled using the COBOL 85
001500* with the COBOLIIX UDC.
001600
001700 AUTHOR. D BECKER.
001800 DATE-WRITTEN. TUE, JAN 19, 1999.
001900 DATE-COMPILED.
002000
002100 ENVIRONMENT DIVISION.
002200 CONFIGURATION SECTION.
002300
002400 SOURCE-COMPUTER. HP-3000.
002500 OBJECT-COMPUTER. HP-3000.
002600
002700 SPECIAL-NAMES.
002800 CONDITION-CODE IS CC
002900 SYMBOLIC CHARACTERS NUL is 1, LF is 11, CR is 14.
003000
003100 INPUT-OUTPUT SECTION.
003200 FILE-CONTROL.
003300
003400 SELECT LISTAC ASSIGN TO "LISTF8"
003500 ORGANIZATION IS SEQUENTIAL.
003600
003700 DATA DIVISION.
003800 FILE SECTION.
003900
004000 FD LISTAC.
004100 01 LISTAC-REC.
004200 5 LISTAC-SESSION PIC X(8).
004300 5 LISTAC-USER PIC X(27).
004400 5 LISTAC-SHARE PIC X(21).
004500 5 LISTAC-REMI PIC X(6).
004600 5 LISTAC-ADDR PIC X(16).
004700 5 FILLER PIC X(235).
004800
004900
005000 WORKING-STORAGE SECTION.
005100
005200 77 DUP-WS PIC S9(4) COMP VALUE 0.
005300 77 DUP-SESSIONS PIC S9(4) COMP VALUE 0.
005400
005500 77 SS-PTR1 PIC S9(4) COMP VALUE 0.
005600 77 SS-PTR2 PIC S9(4) COMP VALUE 0.
005700 77 SS-PTR3 PIC S9(4) COMP VALUE 0.
005800 77 SS-PTR4 PIC S9(4) COMP VALUE 0.
005900 77 SS-PTR5 PIC S9(4) COMP VALUE 0.
006000 77 SS-PTR6 PIC S9(4) COMP VALUE 0.
006100
006200 01 SSS-TABLE.
006300 5 SSS-OCCURS OCCURS 170 TIMES.
006400 6 SSS-KEY.
006500 7 SSS-KEYC PIC X(16).
006600
006700 6 SSS-REST.
006800 7 SSS-RESTC.
006900 9 SSS-SESSION PIC X(8).
007000 9 SSS-USER PIC X(27).
007100
007200
007300 1 SORT-RECORD.
007400 5 SORT-KEY.
007500 7 SORT-KEYC PIC X(8).
007600
007700 5 SORT-REST.
007800 7 SORT-RESTC PIC X(72).
007900
008000
008100 77 SORT-IND PIC X VALUE "0".
008200 88 SORT-END VALUE "9".
008300
008400 77 LISTAC-SW PIC X VALUE "0".
008500 88 LISTAC-EOF VALUE "9".
008600
008700 77 PARM-SIZE PIC S9(4) COMP VALUE 80.
008800 77 PARM-VALUE PIC S9(4) COMP VALUE 0.
008900
009000 01 PARM-INFO.
009100 5 PARM-INFO72 PIC X(72) VALUE " ".
009200 5 FILLER PIC X(8) VALUE " ".
009300
009400 77 WHO-MODE PIC S9(4) COMP VALUE 0.
009500 77 WHO-MODE1 PIC S9(4) COMP VALUE 0.
009600 77 WHO-USER PIC X(8) VALUE " ".
009700 77 WHO-ACCOUNT PIC X(8) VALUE " ".
009800 77 WHO-GROUP PIC X(8) VALUE " ".
009900 77 INFO-LENGTH PIC S9(4) COMP VALUE -80.
010000
010100 77 SUB PIC S9(4) COMP VALUE 0.
010200
010300 77 INFO-IN PIC X VALUE " ".
010400 88 INFO-IN-OK VALUE " ".
010500
010600 77 DSPLY-ITM PIC ----9.
010700
010800 77 DSPLY PIC ---,---,--9.
010900
011000 77 DSPLYS PIC ZZZZ-.
011100
011200
011300 1 INFO.
011400 5 INFO-X PIC X VALUE " ".
011500 5 INFO-R PIC X(79) VALUE " ".
011600
011700 77 CMD-ERROR PIC S9(4) COMP VALUE 0.
011800 77 CMD-PARAM PIC S9(4) COMP VALUE 0.
011900
012000 1 COMMAND-AREA.
012100 5 COMMANDA PIC X(72) VALUE " ".012200 5 FILLER PIC X VALUE %15.
012300
012400 77 JSIND PIC 9(4) COMP VALUE 1.
012500 77 JSNUM PIC S9(9) COMP VALUE 0.
012600
012700 01 JSSTATUS.
012800 5 JSSTATUS1 PIC S9(4) COMP VALUE 0.
012900 5 JSSTATUS2 PIC S9(4) COMP VALUE 0.
013000
013100 77 JSUSERID PIC X(8) VALUE SPACES.
013200 77 JSACCOUNT PIC X(8) VALUE SPACES.
013300 77 JSJOBNAME PIC X(8) VALUE SPACES.
013400
013500 77 JSERR1 PIC S9(4) COMP VALUE 0.
013600 77 JSERR2 PIC S9(4) COMP VALUE 0.
013700
013800 77 JSERR3 PIC S9(4) COMP VALUE 0.
013900 77 JSERR4 PIC S9(4) COMP VALUE 0.
014000 77 JSERR5 PIC S9(4) COMP VALUE 0.
014100 77 JSERR6 PIC S9(4) COMP VALUE 0.
014200 77 JSERR7 PIC S9(4) COMP VALUE 0.
014300 77 JSERR8 PIC S9(4) COMP VALUE 0.
014400
014500 77 INPUT-LDEV PIC X(9) VALUE SPACES.
014600 77 INTRO-DATE PIC S9(4) COMP VALUE 0.
014700 77 INTRO-TIME PIC S9(9) COMP VALUE 0.
014800 77 QUIET-MODE PIC S9(4) COMP VALUE 0.
014900
015000 77 DISPLAY-NAME PIC X(18) VALUE SPACES.
015100
015200
015300 77 DISPLAY-TIME PIC X(28) VALUE " ".
015400 77 QUIET-DISPLAY PIC X(6) VALUE " ".
015500
015600 1 SJW.
015700 3 SJW1.
015800 5 SJW-NUM PIC 9(9).
015900 5 SJW-XO.
016000 7 SJW-X PIC X.
016100 7 SJW-R1 PIC X(8).
016200 3 SJW2 REDEFINES SJW1.
016300 5 SJW-X2 PIC X.
016400 5 SJW-R3 PIC X(17).
016500
016600
016700
016800 PROCEDURE DIVISION.
016900 SECTION1 SECTION.
017000 STARTUP.
017100 CALL INTRINSIC "GETINFO" USING PARM-INFO, PARM-SIZE,
017200 PARM-VALUE.
017300
017400 CALL INTRINSIC "WHO" USING WHO-MODE \\ \\
017500 WHO-USER, WHO-GROUP, WHO-ACCOUNT.
017600
017700 DIVIDE 4 INTO WHO-MODE.
017800
017900* DISPLAY "Content-Type: text/html" CR LF CR LF.
018000 DISPLAY "<PRE>".
018100
018200* DISPLAY " CSM506: Version 1.0 Compiled " WHEN-COMPILED.
018300 DISPLAY " CSM506: "
018400 "Display of Multiple Sessions on a workstation." CR LF.
018500 DISPLAY " " CR LF.
018600 MOVE "LISTFILE CI.PUB.SYS,8 > LISTF8" TO COMMANDA.
018700 PERFORM DO-COMMAND.
018800
018900 OPEN INPUT LISTAC.
019000
019100 PERFORM PROCESS-FILES UNTIL LISTAC-EOF.
019200
019300 CLOSE LISTAC.
019400
019500 MOVE "PURGE LISTF8,TEMP" TO COMMANDA.
019600 PERFORM DO-COMMAND.
019700
019800 IF SS-PTR1 > 1
019900 PERFORM SORT-START
020000 MOVE 0 TO SS-PTR2
020100 PERFORM DISPLAY-STATIONS.
020200
020300* DISPLAY " -- CSM506 COMPLETED.".
020400
020500 IF DUP-WS > 1
020600 MOVE SS-PTR1 TO DSPLYS
020700 DISPLAY DSPLYS "Total Sessions;" CR LF
020800 MOVE DUP-SESSIONS TO DSPLYS
020900 DISPLAY DSPLYS "Duplicate Sessions on"
021000 MOVE DUP-WS TO DSPLYS
021100 DISPLAY DSPLYS "Workstations." CR LF.
021200
021300 DISPLAY "-- End of List" CR LF.
021400 DISPLAY "</PRE>" CR LF.
021500
021600 STOP RUN.
021700
021800 DISPLAY-STATIONS.
021900 ADD 1 TO SS-PTR2.
022000 COMPUTE SS-PTR3 = SS-PTR2 + 1.
022100
022200 PERFORM DISPLAY-STATIONS1 UNTIL SS-PTR3 > SS-PTR1.
022300
022400 DISPLAY-STATIONS1.
022500 IF SSS-KEYC (SS-PTR2) NOT = SSS-KEYC (SS-PTR3)
022600 ADD 1 TO SS-PTR2
022700 ADD 1 TO SS-PTR3
022800 ELSE
022900 ADD 1 TO DUP-WS
023000 MOVE SS-PTR2 TO SS-PTR4
023100 PERFORM DISPLAY-STATIONS2
023200 MOVE SS-PTR3 TO SS-PTR4
023300 PERFORM DISPLAY-STATIONS2
023400 MOVE SS-PTR3 TO SS-PTR2
023500 ADD 1 TO SS-PTR3
023600 PERFORM DISPLAY-STATIONS3 UNTIL SS-PTR3 > SS-PTR1
023700 OR
023800 SSS-KEYC (SS-PTR2) NOT = SSS-KEYC (SS-PTR3)
023900 DISPLAY " " CR LF.
024000
024100 DISPLAY-STATIONS2.
024200
024300 MOVE SSS-SESSION (SS-PTR4) TO SJW-XO.
024400
024500 IF SJW-X = "#"
024600 MOVE SJW-R1 TO SJW-XO
024700 IF SJW-X = "S"
024800 MOVE SJW-R1 TO SJW-XO
024900 PERFORM GET-JOBINFO.
025000
025100 MOVE SSS-USER (SS-PTR4) TO DISPLAY-NAME.
025200
025300 DISPLAY SSS-KEYC (SS-PTR4)
025400 SSS-SESSION (SS-PTR4)
025500 DISPLAY-NAME
025600 QUIET-DISPLAY
025700 INPUT-LDEV
025800
025900 DISPLAY-TIME CR LF.
026000
026100 ADD 1 TO DUP-SESSIONS.
026200
026300 GET-JOBINFO.
026400 MOVE 0 TO SJW-NUM.
026500 MOVE SPACES TO QUIET-DISPLAY.
026600 MOVE 0 TO INTRO-TIME.
026700 MOVE SPACES TO INPUT-LDEV.
026800 MOVE SPACES TO DISPLAY-TIME.
026900
027000 PERFORM JUST-JOBINFO UNTIL SJW-X > "9" OR < "0".
027100 MOVE SJW-NUM TO JSNUM.
027200
027300 CALL INTRINSIC "JOBINFO" USING
027400 JSIND, JSNUM, JSSTATUS,
027500 7, INTRO-TIME, JSERR4
027600 8, INTRO-DATE, JSERR5
027700 9, INPUT-LDEV, JSERR6
027800 40, QUIET-MODE, JSERR7.
027900
028000
028100 CALL INTRINSIC "FMTDATE" USING
028200 INTRO-DATE, INTRO-TIME, DISPLAY-TIME.
028300
028400 IF QUIET-MODE = 1 MOVE "QUIET" TO QUIET-DISPLAY.
028500
028600 JUST-JOBINFO.
028700 MOVE SJW-R3 TO SJW2.
028800
028900 DISPLAY-STATIONS3.
029000 MOVE SS-PTR3 TO SS-PTR4.
029100 PERFORM DISPLAY-STATIONS2.
029200 ADD 1 TO SS-PTR2.
029300 ADD 1 TO SS-PTR3.
029400
029500 PROCESS-FILES.
029600 MOVE SPACES TO LISTAC-REC.
029700 READ LISTAC AT END SET LISTAC-EOF TO TRUE.
029800 IF NOT LISTAC-EOF PERFORM PROCESS-FILES1.
029900
030000 PROCESS-FILES1.
030100 IF LISTAC-REMI = "REM : "
030200 ADD 1 TO SS-PTR1
030300 MOVE LISTAC-ADDR TO SSS-KEYC (SS-PTR1),
030400 MOVE LISTAC-SESSION TO SSS-SESSION (SS-PTR1),
030500 MOVE LISTAC-USER TO SSS-USER (SS-PTR1).
030600
030700 DO-COMMAND.
030800 CALL INTRINSIC "HPCICOMMAND" USING
030900 COMMAND-AREA, CMD-ERROR, CMD-PARAM.
031000
031100 IF CC NOT = 0
031200 MOVE CMD-ERROR TO DSPLY-ITM
031300 DISPLAY " * COMMAND ERROR " DSPLY-ITM " FOR "
031400 DISPLAY COMMANDA
031500 MOVE CMD-PARAM TO DSPLY-ITM
031600 DISPLAY DSPLY-ITM " = PARAM.".
031700
031800 SORT-START.
031900 MOVE SS-PTR1 TO SS-PTR3.
032000 MOVE 1 TO SS-PTR2.
032100
032200 PERFORM SORT-X1 UNTIL SS-PTR3 NOT > SS-PTR2.
032300
032400 SORT-X1.
032500 IF SSS-KEY (SS-PTR2) > SSS-KEY (SS-PTR3)
032600 MOVE SSS-OCCURS (SS-PTR3) TO SORT-RECORD
032700 MOVE SSS-OCCURS (SS-PTR2) TO SSS-OCCURS (SS-PTR3)
032800 MOVE SORT-RECORD TO SSS-OCCURS (SS-PTR2).
032900
033000 MOVE SS-PTR2 TO SS-PTR4.
033100
033200 COMPUTE SS-PTR5 = (SS-PTR3 - SS-PTR2) - 1.
033300
033400 IF SS-PTR5 > 0
033500 PERFORM SORT-X2 SS-PTR5 TIMES.
033600
033700 ADD 1 TO SS-PTR2.
033800 SUBTRACT 1 FROM SS-PTR3.
033900
034000 SORT-X2.
034100 ADD 1 TO SS-PTR4.
034200
034300 IF SSS-KEY (SS-PTR4) > SSS-KEY (SS-PTR3)
034400 MOVE SSS-OCCURS (SS-PTR3) TO SORT-RECORD
034500 MOVE SSS-OCCURS (SS-PTR4) TO SSS-OCCURS (SS-PTR3)
034600 MOVE SORT-RECORD TO SSS-OCCURS (SS-PTR4)
034700 ELSE
034800 IF SSS-KEY (SS-PTR4) < SSS-KEY (SS-PTR2)
034900 MOVE SSS-OCCURS (SS-PTR2) TO SORT-RECORD
035000 MOVE SSS-OCCURS (SS-PTR4) TO SSS-OCCURS (SS-PTR2)
035100 MOVE SORT-RECORD TO SSS-OCCURS (SS-PTR4).
>>> Damian Sobieralski <[log in to unmask]> 08/16 7:51 AM >>>
I've got a question about finding users who are logged in via reflections or telnet. We are having upper limit license issues with people being logged in with multiple sessions. By using nettool status tcpstat conntable I can get a most excellent list of connected IP addresses. However, I would like to associate these connections with a ldev so I can map who is logged in from where as whom. We have none of the third party tool that many brag about so I was wondering if there was an MPE vanilla way of doing this? Even if I had to hand visit and mark each page.... well... the point is, this seems like a fundamental system admin thing thereby I default to ignorance and hope the wise ones may direct me :)
|