<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pickwiki.org/index.php?action=history&amp;feed=atom&amp;title=CGI.MASTER</id>
	<title>CGI.MASTER - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pickwiki.org/index.php?action=history&amp;feed=atom&amp;title=CGI.MASTER"/>
	<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=CGI.MASTER&amp;action=history"/>
	<updated>2026-04-29T00:35:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://pickwiki.org/index.php?title=CGI.MASTER&amp;diff=1672&amp;oldid=prev</id>
		<title>Conversion script: link fix</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=CGI.MASTER&amp;diff=1672&amp;oldid=prev"/>
		<updated>2015-02-26T23:48:54Z</updated>

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