This web server is actually running on a MultiValue host. Here are some statistics about the current host:
Host Type: {RAW(SYSTEM.TYPE)}
{PL_AMTOCRLF(HW)}
T0 = INT(TIME()) LOOP WHILE TIME() = T0 DO REPEAT T0 = INT(TIME()) FOR X = 1000 TO 10000000 STEP 1000 WHILE INT(TIME()) = T0 FOR Y = 1 TO 1000 NEXT Y NEXT X
X = {OCONV(X,'MD0,')}/second
Supervisor Process: {SUP.PORT}
Thread Processes: {PROC.PORTS}
{PL_AMTOCRLF(WHAT)}
{PL_AMTOCRLF(PLSTAT)}
Look at this page's source.
PicLan-IP/BASIC { }
*
SYSTEM.TYPE = 'Unknown'
HW = 'Unknown'
X = 0
#IF APPRO
SYSTEM.TYPE = 'Native Pick - AP/Pro 6.1'
HW = 'Intel Pentium 75'
HW<-1> = '32 Meg RAM'
HW<-1> = '197 Meg partition on Disk 0'
HW<-1> = '161 Meg partition on Disk 1'
#END
#IF SEQ32
SYSTEM.TYPE = 'Native Pick - Sequoia PRO'
HW = 'Intel 486-33'
HW<-1> = '8 Meg RAM'
HW<-1> = '200 Meg partition on Disk 0'
#END
#IF P6432
SYSTEM.TYPE = 'Native Pick - Pick/64+'
HW = 'Intel 486-66'
HW<-1> = '16 Meg RAM'
HW<-1> = '50 Meg partition on Disk 0'
#END
#IF ADDS
SYSTEM.TYPE = 'Native Pick - Mentor PRO 4.1'
HW = 'Cyrix 6x68 PR150+ (120MHz core)'
HW<-1> = '32 Meg RAM'
HW<-1> = '500 Meg partition on Disk 0'
#END
#IF MVBASE
SYSTEM.TYPE = 'Pick on Windows NT - mv*Base'
HW = 'Cyrix PR200+ (150MHz core)'
HW<-1> = 'Windows NT 4.0 Server'
HW<-1> = '64 Meg RAM'
HW<-1> = '500 Meg Pick volume'
#END
#IF D3NT
SYSTEM.TYPE = 'D<sup>3</sup>/NT'
HW = 'Intel Pentium 120'
HW<-1> = 'Windows NT 4.0 Server'
HW<-1> = '48 Meg RAM'
HW<-1> = '100 Meg D3 VME'
#END
#IF D3LINUX
SYSTEM.TYPE = 'D<sup>3</sup>/Linux'
HW = 'Dual Intel 400'
HW<-1> = 'Linux RedHat 5.2 w/ 2.2.11 Kernel'
HW<-1> = '512 Meg RAM'
HW<-1> = '500 Meg Pick Partition'
#END
#IF UVNT
SYSTEM.TYPE = 'Universe NT'
HW = 'Cyrix PR200+'
HW<-1> = '64 Meg RAM'
#END
#IF UDNT
SYSTEM.TYPE = 'Unidata NT'
HW = 'Cyrix PR200+'
HW<-1> = '64 Meg RAM'
#END*
* This logic is used to determine the port numbers that are in use
* for PicLan-IP supervisor and thread processes. The code for
* AP phantom processes is included here and is a bit obscure if you
* do not understand the way the PicLan-IP web server process structure
* is managed. In any case, this logic is not very germain to
* normal application code.
*
P.NOS = PLIP$PROC.PORTS<1>
NO.PROC.PORTS = DCOUNT(P.NOS,VM)
FOR I = 1 TO NO.PROC.PORTS
IF P.NOS<1,I> = '*' THEN
IF PL$V.PORT.NO = (I-1) THEN
P.NOS<1,I> = PORT.NO : '(ph)'
END ELSE
LOCK.ID = 'V.PORT.NO*' : (I-1)
READU DUMMY FROM PL$LOCK.FD , LOCK.ID LOCKED
#IF APPRO|ADDS|SEQ32|MVBASE
P.NOS<1,I> = SYSTEM(0)
#END
#IF D3NT
EXECUTE 'PLD3.GETLOCK WWW.CTRL,LOCK ' : LOCK.ID CAPTURING X
P.NOS<1,I> = X
#END
#IF UV
P.NOS<1,I> = STATUS()
IF P.NOS<1,I> >= 32768 THEN P.NOS<1,I> = 65536 - P.NOS<1,I>
#END
#IF UD
CALL PLU.UD.LOCKPORT('LOCK','V.PORT.NO*':(I-1),X,'')
P.NOS<1,I> = X
#END
P.NOS<1,I> = P.NOS<1,I> : '(ph)'
END ELSE NULL
IF P.NOS<1,I> = '*' THEN
RELEASE PL$LOCK.FD , LOCK.ID
END
END
END
NEXT I
BEGIN CASE
CASE NO.PROC.PORTS < 1
PROC.PORTS = 'Undefined'
CASE NO.PROC.PORTS = 1
PROC.PORTS = P.NOS
CASE YES
FOR I = 1 TO NO.PROC.PORTS
BEGIN CASE
CASE I = 1
PROC.PORTS = P.NOS<1,I>
CASE I = NO.PROC.PORTS
IF I > 2 THEN
PROC.PORTS = PROC.PORTS : ','
END
PROC.PORTS = PROC.PORTS : ' and ' : P.NOS<1,I>
CASE YES
PROC.PORTS = PROC.PORTS : ', ' : P.NOS<1,I>
END CASE
NEXT I
END CASE
*
SUP.PORT = PLIP$SUP.PORT
IF SUP.PORT = '*' THEN
READU DUMMY FROM PL$LOCK.FD , 'SUPERVISOR.PROCESS' LOCKED
#IF APPRO|ADDS|SEQ32|MVBASE
SUP.PORT = SYSTEM(0)
#END
#IF D3NT
EXECUTE 'PLD3.GETLOCK WWW.CTRL,LOCK SUPERVISOR.PROCESS' CAPTURING X
SUP.PORT = X
#END
#IF UV
SUP.PORT = STATUS()
IF SUP.PORT >= 32768 THEN SUP.PORT = 65536 - SUP.PORT
#END
#IF UD
CALL PLU.UD.LOCKPORT('LOCK','SUPERVISOR.PROCESS',X,'')
SUP.PORT = X
#END
END ELSE NULL
END
*
#IFN UV
EXECUTE 'TERM ,0'
#END
#IFN UV|UD
EXECUTE 'WHAT' CAPTURING WHAT
#END
#IF UV|UD
WHAT = 'The WHAT verb is not supported on Universe or Unidata'
#END
LOOP WHILE WHAT[1,1] = CHAR(0) DO
WHAT = WHAT[2,999999]
REPEAT
IF WHAT[1,LEN(@(-1))] = @(-1) THEN
WHAT = WHAT[1+LEN(@(-1)),999999]
END
*
EXECUTE 'PL-STAT' CAPTURING PLSTAT
IF PLSTAT[1,LEN(@(-1))] = @(-1) THEN
PLSTAT = PLSTAT[LEN(@(-1))+1,999999]
END
*
T0 = INT(TIME())
LOOP WHILE INT(TIME()) = T0 DO REPEAT
T0 = INT(TIME())
FOR X = 1000 TO 100000000 STEP 1000 WHILE INT(TIME()) = T0
FOR Y = 1 TO 1000
NEXT Y
NEXT X