-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathPS2
159 lines (159 loc) · 3.33 KB
/
PS2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
*
GIT.FILENAME = 'PS2'
GIT.REPO = 'https://github.com/Krowemoh/TCL-Utilities.git'
*
* VERSION
*
VERSION = '1'
*
@USER1 = 'PS2'
@USER2 = 'PS2'
*
EQU TRUE TO 1
EQU FALSE TO 0
*
CALL GET.ARGUMENTS(ARGS)
*
ARGS.LEN = DCOUNT(ARGS,@AM)
*
IF ARGS.LEN = 1 THEN
PRINT 'PS2 - Better PORT.STATUS'
PRINT
PRINT ' PS2 LIST - List universe processes'
PRINT ' PS2 {SEARCH.TERM} - Search the processes'
PRINT
STOP
*
END ELSE IF ARGS.LEN # 2 THEN
PRINT 'Invalid option'
STOP
END
*
OPEN '','VOC' TO VOC.FILE ELSE
PRINT 'Unable to open file: VOC'
STOP
END
*
READ ANYTHING FROM VOC.FILE,'PORT.STATUS' ELSE
MD.ENTRY = ''
*
MD.ENTRY<1> = 'Verb - Display process information about UniVerse users'
MD.ENTRY<2> = 'list_readu'
MD.ENTRY<3> = 'E'
MD.ENTRY<4> = 'BV'
MD.ENTRY<5> = 'port.status'
*
WRITE MD.ENTRY ON VOC.FILE,'PORT.STATUS'
END
*
VERB = ARGS<2>
*
IF VERB = 'LIST' THEN
SEARCH.TERM = ''
END ELSE
SEARCH.TERM = VERB
END
*
GOSUB GET.PROCESS.DATA
GOSUB PRINT.OUTPUT
*
IF SEARCH.TERM = '' THEN
GOSUB PRINT.LICENSE.INFORMATION
END
*
STOP
*
********************* S U B R O U T I N E *********************
*
GET.PROCESS.DATA:NULL
*
EXECUTE 'PORT.STATUS INTERNAL' CAPTURING RESULTS
*
NUMBER.OF.PROCESSES = DCOUNT(RESULTS,@AM)
*
OUTPUT.DATA = ''
*
PROCESS.INFORMATION = RESULTS<1>
*
FOR I = 2 TO NUMBER.OF.PROCESSES
PROCESS = RESULTS<I>
IF PROCESS = '' THEN CONTINUE
*
PID = TRIM(PROCESS<1,1>)
NAME = TRIM(PROCESS<1,2>)
PORT = TRIM(PROCESS<1,3>)
TTY = TRIM(PROCESS<1,4>)
CMD = TRIM(PROCESS<1,5>)
*
BUFFER = NAME 'L#10' : PID 'R#5' : PORT 'R#5' : SPACE(3) : TTY 'L#15' : CMD
*
IF SEARCH.TERM = '' THEN
SEARCH.FOUND = TRUE
END ELSE
HAYSTACK = OCONV(BUFFER,'MCU')
NEEDLE = OCONV(SEARCH.TERM,'MCU')
SEARCH.FOUND = INDEX(HAYSTACK,NEEDLE,1)
END
*
IF NOT(SEARCH.FOUND) THEN
CONTINUE
END
*
LOCATE(NAME,OUTPUT.DATA,1;NAME.POS;'AL') THEN
LOCATE(PID,OUTPUT.DATA,2,NAME.POS;PID.POS;'AR') THEN
OUTPUT.DATA = INSERT(OUTPUT.DATA,3,NAME.POS,PID.POS,BUFFER)
END ELSE
OUTPUT.DATA = INSERT(OUTPUT.DATA,2,NAME.POS,PID.POS,PID)
OUTPUT.DATA = INSERT(OUTPUT.DATA,3,NAME.POS,PID.POS,BUFFER)
END
*
END ELSE
OUTPUT.DATA = INSERT(OUTPUT.DATA,1,NAME.POS,0,NAME)
OUTPUT.DATA = INSERT(OUTPUT.DATA,2,NAME.POS,0,PID)
OUTPUT.DATA = INSERT(OUTPUT.DATA,3,NAME.POS,0,BUFFER)
END
NEXT I
*
RETURN
*
********************* S U B R O U T I N E *********************
*
PRINT.OUTPUT:NULL
*
LINES = OUTPUT.DATA<3>
*
CONVERT @VM TO @AM IN LINES
CONVERT @SVM TO @AM IN LINES
*
NUMBER.OF.LINES = DCOUNT(LINES,@AM)
*
FOR I = 1 TO NUMBER.OF.LINES
BUFFER = LINES<I>
PRINT BUFFER
NEXT I
*
RETURN
*
********************* S U B R O U T I N E *********************
*
PRINT.LICENSE.INFORMATION:NULL
*
PRINT
*
EXECUTE 'SH -c "uvlictool"' CAPTURING LICENSE.DATA
*
NUMBER.OF.LINES = DCOUNT(LICENSE.DATA,@AM)
*
FOR I = 1 TO NUMBER.OF.LINES
LINE = LICENSE.DATA<I>
IF INDEX(LINE,'license seats',1) THEN
PRINT LINE
END
NEXT I
*
RETURN
*
* END OF PROGRAM
*
END
*