CGI.MASTER
From Pickwiki
HomePage>>SourceCode>>PerlSource
A program that listens on a named pipe for requests, converts parameters from key=value pairs into a dynamic array and calls a subroutine to actually create some HTML. Phew! Is it really worth it?
sunset /info[[/DEVEL/BP]].DEV> cat CGI.MASTER
***************************************************************************
* Program: CGI.MASTER
* Author : Ian [[McGowan]]
* Date : 01/06/1997
* Edited : 16:57:35 Aug 03 2000 By MGC
* Comment: Klugy web <> unidata interface
***************************************************************************
* 04/29/1998 IAN Added code to check for already running phantom
* 04/23/1998 IAN Modified to use named pipes, instead of polling
* 11/08/1998 IAN Modified to use consistent delimeter (LF)
* @AM seperates records in the input
* @VM seperates fields in a record
ACC=FIELD(@SENTENCE,' ',2)
IF ACC = '' THEN
PRINT 'MUST SPECIFY AN ACCOUNT!' ; STOP
END
* Check to see if we're already running in this account
MY.PID=@USERNO
OSREAD OLD.PID FROM "/samba_share/web/":ACC THEN
PRINT "Checking to see if process alive: ":OLD.PID:
EXECUTE \!ps -ef | awk '{print $2}' | grep \:OLD.PID CAPTURING OUTPUT
IF OUTPUT # "" THEN
PRINT 'Phantom is already running as PID ':OLD.PID
PRINT 'Use stopcgi ':ACC:' to stop it'
PRINT 'and startcgi ':ACC:' to start it'
STOP
END
PRINT " Not!"
END
PRINT "CGI.MASTER started as PID:":MY.PID
PRINT TIMEDATE()
OSWRITE MY.PID ON "/samba_share/web/":ACC
INPUT.FILE="/samba_share/web/in/":ACC:"/in_from_perl"
OPEN "VOC" TO VOC ELSE STOP 201, "VOC"
LOOP
OSREAD REQUEST FROM INPUT.FILE ON ERROR REQUEST='' ELSE REQUEST=""
IF REQUEST = '' THEN
* Slow it down if out of control
PRINT 'NULL REQUEST - ':TIMEDATE()
SLEEP 1
END ELSE
GOSUB PROCESS.REQUEST
END
REPEAT
STOP
PROCESS.REQUEST:
* The calling program sends us the location to put the output file
OUTPUT.FILE=REQUEST<1>
OUTPUT='CGI.MASTER: Internal CGI error'
COMMAND=''
KEY.REC='' ; VALUE.REC=''
I=DCOUNT(REQUEST,@AM)
FOR F=2 TO I
L=REQUEST<F>
KEY=FIELD(L,'=',1)
VALUE=FIELD(L,'=',2,999)
BEGIN CASE
CASE KEY='command'
COMMAND=VALUE
CASE 1
KEY.REC<-1>=KEY
VALUE.REC<-1>=VALUE
END CASE
NEXT F
IF COMMAND = '' THEN
OUTPUT='CGI.MASTER: No command received'
END ELSE
READV DUMMY FROM VOC, COMMAND, 1 THEN
* Verify that subroutine exists
IF DUMMY='C' THEN
* This next line means we will run the new version of any recompiled subs
* adding a small amount of overhead to each call...
EXECUTE \NEWPCODE\
CALL @COMMAND(VALUE.REC,KEY.REC,OUTPUT)
END ELSE
OUTPUT='CGI.MASTER: ':COMMAND:" is a VOC item, not a subroutine"
END
END ELSE
OUTPUT='CGI.MASTER: ':COMMAND:" is not a cataloged subroutine"
END
END
OSWRITE OUTPUT ON OUTPUT.FILE
RETURN