home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 1998 November / PCpro_1998_11.ISO / software / Lotus / NETOBJ / T2.Z / BBSComp.nfx (.txt) < prev    next >
Encoding:
Java Class File  |  1998-03-09  |  15.4 KB  |  531 lines

  1. public class BBSComp extends ComponentApp {
  2.    DAssetManager cam;
  3.    DDrawPicture cdp;
  4.    int idScript;
  5.    String codeBase;
  6.    String Subdirectory = "bbs";
  7.    String Title = "NetObjects BBS";
  8.    String UnixWindows = "Windows";
  9.    String PerlPath = "/bin/perl";
  10.    String cgiBin = "bbs/cgi-bin";
  11.    static int onlyYou;
  12.    int onlyYouInvalid;
  13.    static final int MAXASSET = 50;
  14.    boolean published;
  15.    int[] assetControl;
  16.    int assetCount;
  17.    int tAssetCount;
  18.  
  19.    private String getMacRelativeToRoot(String var1) {
  20.       String var2 = new String("::");
  21.       int var3 = var1.length();
  22.       if (var3 == 0) {
  23.          return null;
  24.       } else {
  25.          String var4 = var1.substring(var3 - 1, var3);
  26.          if (var4.compareTo("/") == 0) {
  27.             var1 = var1.substring(0, var3 - 1);
  28.             var3 = var1.length();
  29.          }
  30.  
  31.          for(int var5 = 0; var5 < var3; ++var5) {
  32.             if (var1.substring(var5, var5 + 1).compareTo(":") == 0) {
  33.                var2 = var2 + ":";
  34.             }
  35.          }
  36.  
  37.          return var2;
  38.       }
  39.    }
  40.  
  41.    protected void createNTConfig() {
  42.       DFile var1 = new DFile();
  43.       DFile var2 = new DFile();
  44.       String var3 = var1.GetPathChar();
  45.       String var4 = this.codeBase;
  46.       String var5 = this.getRelativeToRoot(this.cgiBin, '/');
  47.       String var6 = "";
  48.  
  49.       for(int var7 = 0; var7 < var5.length(); ++var7) {
  50.          String var8 = var5.substring(var7, var7 + 1);
  51.          if (var8.compareTo("/") == 0) {
  52.             var6 = var6 + "\\";
  53.          } else {
  54.             var6 = var6 + var8;
  55.          }
  56.       }
  57.  
  58.       var6 = var6 + "\\" + this.Subdirectory + "\n";
  59.       int var12 = this.cgiBin.length();
  60.       if (this.cgiBin.substring(var12 - 1, var12).compareTo("/") == 0) {
  61.          var6 = var6 + this.getRelativeToRoot(this.Subdirectory + "/message", '/') + "/" + this.cgiBin;
  62.       } else {
  63.          var6 = var6 + this.getRelativeToRoot(this.Subdirectory + "/message", '/') + "/" + this.cgiBin + "/";
  64.       }
  65.  
  66.       var2.Open(var4 + "bbs" + var3 + "cgi-bin" + var3 + "bbs_NT.cfg", 4097);
  67.       var2.WriteString(var6, -1);
  68.       var2.Close();
  69.    }
  70.  
  71.    protected void generateSuccessHTML(String var1, String var2) {
  72.       String var3 = "";
  73.       String var4 = this.getRelativeToRoot(var1, '/');
  74.       DFile var5 = new DFile();
  75.       var3 = var3 + "<html>\n";
  76.       var3 = var3 + "<!--META HTTP-EQUIV=\"Expires\" CONTENT=\"Wed, 29 Sep 1993 23:59:00 GMT\"-->\n";
  77.       var3 = var3 + "  <head>\n";
  78.       var3 = var3 + "    <title>success</title>\n";
  79.       var3 = var3 + "  </head>\n";
  80.       var3 = var3 + "  <body bgcolor=\"#FFFFFF\">\n";
  81.       var3 = var3 + "<font size=\"2\" face=\"Arial,Helvetica\">Successful submission</font> \n";
  82.       var3 = var3 + "      <font color=#000000\"><a href =\"####HOME-LOCATION####\" TARGET=_parent>Reload</a></font>\n";
  83.       var3 = var3 + "      <hr>\n";
  84.       var3 = var3 + "<script language=JavaScript>\n";
  85.       var3 = var3 + "<!--\n";
  86.       var3 = var3 + "parent.frames['raw'].open(\"" + var4 + "/" + this.Subdirectory + "/message/bbs-data.html\",\"raw\");\n";
  87.       var3 = var3 + "parent.frames['message'].open(\"" + var4 + "/" + this.Subdirectory + "/bbs-message.html\",\"message\");\n";
  88.       var3 = var3 + "//-->\n";
  89.       var3 = var3 + "</script>\n";
  90.       var3 = var3 + "  </body>\n";
  91.       var3 = var3 + "</html>\n";
  92.       var5.Open(this.codeBase + "bbs" + var2 + "cgi-bin" + var2 + "success.html", 4097);
  93.       var5.WriteString(var3, -1);
  94.       var5.Close();
  95.    }
  96.  
  97.    private String escapeSequence(String var1) {
  98.       int var2 = var1.length();
  99.       String var3 = new String();
  100.  
  101.       for(int var4 = 0; var4 < var2; ++var4) {
  102.          String var5 = var1.substring(var4, var4 + 1);
  103.          if (var5.compareTo("\"") != 0 && var5.compareTo("\\") != 0) {
  104.             if (var5.compareTo("'") == 0) {
  105.                var5 = "_";
  106.             }
  107.          } else {
  108.             var5 = "\\" + var5;
  109.          }
  110.  
  111.          var3 = var3 + var5;
  112.       }
  113.  
  114.       return var3;
  115.    }
  116.  
  117.    public String PropertyListener(String var1, String var2, int var3, int var4, IDInspector var5) {
  118.       if (var3 == 1) {
  119.          if (var1.compareTo("Subdirectory") == 0) {
  120.             return this.Subdirectory;
  121.          }
  122.  
  123.          if (var1.compareTo("Page Title") == 0) {
  124.             return this.Title;
  125.          }
  126.  
  127.          if (var1.compareTo("Publish to") == 0) {
  128.             if (this.UnixWindows == null) {
  129.                this.UnixWindows = "Windows";
  130.             }
  131.  
  132.             if (this.UnixWindows.compareTo("Windows") == 0) {
  133.                return "0";
  134.             }
  135.  
  136.             if (this.UnixWindows.compareTo("Unix") == 0) {
  137.                return "1";
  138.             }
  139.  
  140.             if (this.UnixWindows.compareTo("Mac") == 0) {
  141.                return "2";
  142.             }
  143.          } else {
  144.             if (var1.compareTo("Perl Path for Unix") == 0) {
  145.                return this.PerlPath;
  146.             }
  147.  
  148.             if (var1.compareTo("CGI-bin Directory") == 0) {
  149.                if (this.cgiBin == null) {
  150.                   this.cgiBin = "bbs/cgi-bin";
  151.                }
  152.  
  153.                return this.cgiBin;
  154.             }
  155.          }
  156.       } else if (var1.compareTo("Subdirectory") == 0) {
  157.          this.Subdirectory = var2;
  158.       } else if (var1.compareTo("Page Title") == 0) {
  159.          this.Title = var2;
  160.       } else if (var1.compareTo("Publish to") == 0) {
  161.          if (var2.compareTo("0") == 0) {
  162.             this.UnixWindows = "Windows";
  163.          } else if (var2.compareTo("1") == 0) {
  164.             this.UnixWindows = "Unix";
  165.          } else {
  166.             this.UnixWindows = "Mac";
  167.          }
  168.       } else if (var1.compareTo("Perl Path for Unix") == 0) {
  169.          this.PerlPath = var2;
  170.       } else if (var1.compareTo("CGI-bin Directory") == 0) {
  171.          this.cgiBin = var2;
  172.       }
  173.  
  174.       return "";
  175.    }
  176.  
  177.    protected void createMacConfig() {
  178.       DFile var1 = new DFile();
  179.       DFile var2 = new DFile();
  180.       String var3 = var1.GetPathChar();
  181.       String var4 = this.codeBase;
  182.       String var5 = this.getMacRelativeToRoot(this.Unix2MacPath(this.cgiBin)) + this.Subdirectory;
  183.       String var6 = this.getRelativeToRoot(this.cgiBin, '/') + "/" + this.Subdirectory;
  184.       var2.Open(var4 + "bbs" + var3 + "cgi-bin" + var3 + "config", 4097);
  185.       var2.WriteString("#!" + this.PerlPath + "\n", -1);
  186.       var2.WriteString("##################################\n", -1);
  187.       var2.WriteString("###CONFIGURATION##################\n", -1);
  188.       var2.WriteString("##################################\n", -1);
  189.       var2.WriteString("$BBS_HOME=$path.'" + var5 + "';\n", -1);
  190.       var2.WriteString("$UNIX_BBS_HOME='" + var6 + "';\n", -1);
  191.       var2.WriteString("$HTML_DIR=$BBS_HOME.':html';\n", -1);
  192.       var2.WriteString("$UNIX_HTML_DIR=$BBS_HOME.'/html';\n", -1);
  193.       var2.WriteString("$ERROR='error.html';\n", -1);
  194.       var2.WriteString("$ERROR_CHAR='error-char.html';\n", -1);
  195.       var2.WriteString("$SUCCESS='success.html';\n", -1);
  196.       var2.WriteString("# This directory should be \"server\" readable/writeable/executable only.\n", -1);
  197.       var2.WriteString("$STORAGE_DIR= '" + this.getMacRelativeToRoot(this.Unix2MacPath(this.cgiBin)) + this.Subdirectory + ":message';\n", -1);
  198.       var2.WriteString("$IMAGE_DIR= '::image';\n", -1);
  199.       var2.WriteString("$UNIX_IMAGE_DIR= '../image';\n", -1);
  200.       var2.WriteString("$MESSAGE_TO_CGIBIN='" + this.getMacRelativeToRoot(this.Subdirectory + ":message") + this.Unix2MacPath(this.cgiBin) + "';\n", -1);
  201.       var2.WriteString("$UNIX_MESSAGE_TO_CGIBIN='" + this.getRelativeToRoot(this.Subdirectory + "/message", '/') + "/" + this.cgiBin + "';\n", -1);
  202.       var2.WriteString("$CGIBIN_DIR=$path.'::cgi-bin';\n", -1);
  203.       var2.WriteString("# The files below should be world readable/writable only.\n", -1);
  204.       var2.WriteString("$ERROR_COLLECT='error-collect.txt';\n", -1);
  205.       var2.WriteString("$SUCCESS_COLLECT='bbs-data.html';\n", -1);
  206.       var2.WriteString("$TOKEN_FILE ='counter';\n", -1);
  207.       var2.WriteString("$THREAD_TOKEN ='thread_counter';\n", -1);
  208.       var2.WriteString("# if your system does not support the flock() function, comment this out, or set it to 0.\n", -1);
  209.       var2.WriteString("# the latest edition of NT Perl, as well as all unix perl should have flock build in.\n", -1);
  210.       var2.WriteString("$flock_exists = 0;\n", -1);
  211.       var2.WriteString("$ERROR = $HTML_DIR.':'.$ERROR;\n", -1);
  212.       var2.WriteString("$ERROR_CHAR = $HTML_DIR.':'.$ERROR_CHAR;\n", -1);
  213.       var2.WriteString("$SUCCESS = $HTML_DIR.':'.$SUCCESS;\n", -1);
  214.       var2.WriteString("$TMP = $STORAGE_DIR.':'.($$).\".tmp\";\n", -1);
  215.       var2.WriteString("$ERROR_COLLECT = $STORAGE_DIR.':'.$ERROR_COLLECT;\n", -1);
  216.       var2.WriteString("$INDEX_FILE = $STORAGE_DIR.':'.$SUCCESS_COLLECT;\n", -1);
  217.       var2.WriteString("$TOKEN_FILE = $STORAGE_DIR.':'.$TOKEN_FILE;\n", -1);
  218.       var2.WriteString("$THREAD_TOKEN = $STORAGE_DIR.':'.$THREAD_TOKEN;\n", -1);
  219.       var2.Close();
  220.    }
  221.  
  222.    public void onCopy() {
  223.       this.Subdirectory = new String(this.Subdirectory);
  224.       this.Title = new String(this.Title);
  225.       this.PerlPath = new String(this.PerlPath);
  226.       this.codeBase = new String(this.codeBase);
  227.       this.cam.CopyAsset(this.idScript);
  228.       int[] var1 = new int[50];
  229.  
  230.       for(this.tAssetCount = 0; this.tAssetCount < this.assetCount; ++this.tAssetCount) {
  231.          this.cam.CopyAsset(this.assetControl[this.tAssetCount]);
  232.          var1[this.tAssetCount] = this.assetControl[this.tAssetCount];
  233.       }
  234.  
  235.       this.assetControl = var1;
  236.    }
  237.  
  238.    private String getJavaScript(String var1) {
  239.       return "function newCookie(name, value){\ndocument.cookie = name + \"=\" + value +  \"; path=/; domain=\" + location.hostname + \";\";     \n}\nfunction launchBBS(URL,Title){\n      var direct = location.pathname; \n   if((location.pathname.lastIndexOf(\"/\") + 1) == location.pathname.length){\t\n\t  direct = location.pathname;\t \n\t    }\t   \n      else{\t\n      direct = location.pathname.substring(0,location.pathname.lastIndexOf(\"/\")) + \"/\";\t \n\t }\n if (direct.substring(direct.length - 5, direct.length - 1) == \"html\"){\n   direct = direct.substring(0, direct.length - 6) + \"/\";\n } \n" + "if (location.port.length == 0){\n\tNURL= location.protocol+\"//\" + location.hostname + direct  + URL + \"/\";\n }\n\t else {\n NURL= location.protocol+\"//\" + location.hostname + \":\" + location.port + direct  + URL + \"/\";\n\t} \n window.open('" + var1 + "','netobjects_bbs','toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=1,copyhistory=0,width=800,height=600');\n if (navigator.appVersion.indexOf(\"(X11\") != -1 ||\n        navigator.appVersion.indexOf(\"(Mac\") != -1)\n      newWin = window.open('" + var1 + "','netobjects_bbs');\nnewCookie(\"URL\",NURL);\nnewCookie(\"Title\",Title);\nnewCookie(\"CgiURL\",\"" + this.getRelativeToRoot("bbs", '/') + "/" + this.cgiBin + "\");\nnewCookie(\"GifURL\",NURL+\"image/webforum.gif\");\n} \n";
  240.    }
  241.  
  242.    private String getRelativeToRoot(String var1, char var2) {
  243.       String var3 = new String("..");
  244.       int var4 = var1.length();
  245.       if (var4 == 0) {
  246.          return null;
  247.       } else {
  248.          String var5 = var1.substring(var4 - 1, var4);
  249.          if (var5.compareTo("/") == 0) {
  250.             var1 = var1.substring(0, var4 - 1);
  251.             var4 = var1.length();
  252.          }
  253.  
  254.          for(int var6 = 0; var6 < var4; ++var6) {
  255.             if (var1.substring(var6, var6 + 1).compareTo("/") == 0) {
  256.                var3 = var3 + "/..";
  257.             }
  258.          }
  259.  
  260.          return var3;
  261.       }
  262.    }
  263.  
  264.    public String onInstall(DAssetManager var1, String var2) {
  265.       this.cam = var1;
  266.       this.codeBase = var2;
  267.       return "Message Board";
  268.    }
  269.  
  270.    protected void finalize() {
  271.       this.cam.RemoveAsset(this.idScript);
  272.       if (this.published) {
  273.          for(this.assetCount = 0; this.assetCount < 50; ++this.assetCount) {
  274.             this.cam.RemoveAsset(this.assetControl[this.assetCount]);
  275.          }
  276.       }
  277.  
  278.       if (this.onlyYouInvalid == 0) {
  279.          onlyYou = 0;
  280.       }
  281.  
  282.    }
  283.  
  284.    public void onPublish(DAssetManager var1, int var2) {
  285.       this.cam = var1;
  286.       int var3 = 0;
  287.       int[] var4 = new int[50];
  288.       String var5 = this.Title;
  289.       this.Title = this.escapeSequence(this.Title);
  290.       this.cdp.setHTMLBefore("<a href=\"JavaScript:launchBBS('" + this.Subdirectory + "','" + this.Title + "')\" target=\"_self\" >");
  291.       this.cdp.setHTMLAfter("</a>");
  292.       this.codeBase = this.cdp.getCodeBase();
  293.       String var7 = this.codeBase;
  294.       DFile var8 = new DFile();
  295.       String var6 = var8.GetPathChar();
  296.       if (this.cgiBin == null) {
  297.          this.cgiBin = "bbs/cgi-bin";
  298.       }
  299.  
  300.       if (this.published) {
  301.          for(this.assetCount = 0; this.assetCount < 50; ++this.assetCount) {
  302.             var4[this.assetCount] = this.assetControl[this.assetCount];
  303.          }
  304.       }
  305.  
  306.       this.assetCount = 0;
  307.       this.published = true;
  308.       this.OnDropOK();
  309.       this.assetControl[this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "bbs-control.html", "HTML\u0000", this.Subdirectory);
  310.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "bbs-message.html", "HTML\u0000", this.Subdirectory);
  311.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "blank.html", "HTML\u0000", this.Subdirectory);
  312.       var3 = this.cam.AddAsset(var7 + "bbs" + var6 + "index.html", "HTML\u0000", this.Subdirectory);
  313.       this.assetControl[++this.assetCount] = var3;
  314.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "image" + var6 + "dot24_clear.gif", "Image\u0000", this.Subdirectory + var6 + "image");
  315.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "image" + var6 + "background.gif", "Image\u0000", this.Subdirectory + var6 + "image");
  316.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "image" + var6 + "clear.gif", "Image\u0000", this.Subdirectory + var6 + "image");
  317.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "image" + var6 + "expand.gif", "Image\u0000", this.Subdirectory + var6 + "image");
  318.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "image" + var6 + "listby.gif", "Image\u0000", this.Subdirectory + var6 + "image");
  319.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "image" + var6 + "newmessage.gif", "Image\u0000", this.Subdirectory + var6 + "image");
  320.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "image" + var6 + "next.gif", "Image\u0000", this.Subdirectory + var6 + "image");
  321.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "image" + var6 + "previous.gif", "Image\u0000", this.Subdirectory + var6 + "image");
  322.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "image" + var6 + "reload.gif", "Image\u0000", this.Subdirectory + var6 + "image");
  323.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "image" + var6 + "reply.gif", "Image\u0000", this.Subdirectory + var6 + "image");
  324.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "html" + var6 + "error-char.html", "HTML\u0000", this.Subdirectory + var6 + "html");
  325.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "html" + var6 + "error.html", "HTML\u0000", this.Subdirectory + var6 + "html");
  326.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "html" + var6 + "url-only-char.html", "HTML\u0000", this.Subdirectory + var6 + "html");
  327.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "html" + var6 + "urlreply.html", "HTML\u0000", this.Subdirectory + var6 + "html");
  328.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "message" + var6 + "bbs-data.original", "HTML\u0000", this.Subdirectory + var6 + "message");
  329.       this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 452);
  330.       this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "message" + var6 + "zero.counter", "HTML\u0000", this.Subdirectory + var6 + "message");
  331.       this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 452);
  332.       this.assetControl[++this.assetCount] = this.cam.AddAsset(this.Subdirectory + "" + var6 + "message" + var6 + "", "SubDir\u0000", "");
  333.       this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 455);
  334.       this.idScript = this.cam.AddAsset("bbs_script_layout", "Java Script\u0000", "");
  335.       String var9 = var1.GetAssetRelativeLocation(var3, var2, 0);
  336.       var1.InsertScript("bbs_script_layout", this.getJavaScript(var9));
  337.       if (this.UnixWindows.compareTo("Windows") == 0) {
  338.          this.createNTConfig();
  339.          this.generateSuccessHTML(this.cgiBin, var6);
  340.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin" + var6 + "success.html", "HTML\u0000", this.Subdirectory + var6 + "html");
  341.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin-NT" + var6 + "bbs-submit.cgi", "CGI\u0000", this.cgiBin);
  342.          this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 453);
  343.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin-NT" + var6 + "submit-bbs-form.cgi", "CGI\u0000", this.cgiBin);
  344.          this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 453);
  345.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin-NT" + var6 + "Buf.dll", "CGI\u0000", this.cgiBin);
  346.          this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 453);
  347.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin" + var6 + "bbs_NT.cfg", "CGI\u0000", this.cgiBin);
  348.          this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 453);
  349.       } else if (this.UnixWindows.compareTo("Mac") == 0) {
  350.          this.createMacConfig();
  351.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin-mac" + var6 + "bbs-submit.bin", "CGI\u0000", this.cgiBin);
  352.          this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 453);
  353.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin-mac" + var6 + "submit-bbs-form.bin", "CGI\u0000", this.cgiBin);
  354.          this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 453);
  355.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin" + var6 + "config", "CGI\u0000", this.cgiBin);
  356.          this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 453);
  357.          this.generateSuccessHTML(this.cgiBin, var6);
  358.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin" + var6 + "success.html", "HTML\u0000", this.Subdirectory + var6 + "html");
  359.       } else if (this.UnixWindows.compareTo("Unix") == 0) {
  360.          DFile var10 = new DFile();
  361.          DFile var11 = new DFile();
  362.          this.createUnixConfig();
  363.          var11.Open(var7 + "bbs" + var6 + "cgi-bin-Unix" + var6 + "submit-bbs-form.cgi", 0);
  364.          var10.Open(var7 + "bbs" + var6 + "cgi-bin" + var6 + "submit-bbs-form.cgi", 4097);
  365.          var10.WriteString("#!" + this.PerlPath + "\n\n", -1);
  366.          var10.WriteString(var11.ReadString(20000), -1);
  367.          var10.Close();
  368.          var11.Close();
  369.          var11.Open(var7 + "bbs" + var6 + "cgi-bin-Unix" + var6 + "bbs-submit.cgi", 0);
  370.          var10.Open(var7 + "bbs" + var6 + "cgi-bin" + var6 + "bbs-submit.cgi", 4097);
  371.          var10.WriteString("#!" + this.PerlPath + "\n", -1);
  372.          var10.WriteString(var11.ReadString(20000), -1);
  373.          var10.Close();
  374.          var11.Close();
  375.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin" + var6 + "bbs-submit.cgi", "CGI\u0000", this.cgiBin);
  376.          this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 453);
  377.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin" + var6 + "config", "CGI\u0000", this.cgiBin);
  378.          this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 453);
  379.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin" + var6 + "submit-bbs-form.cgi", "CGI\u0000", this.cgiBin);
  380.          this.cam.SetPublishAssetMode(this.assetControl[this.assetCount], 453);
  381.          this.generateSuccessHTML(this.cgiBin, var6);
  382.          this.assetControl[++this.assetCount] = this.cam.AddAsset(var7 + "bbs" + var6 + "cgi-bin" + var6 + "success.html", "HTML\u0000", this.Subdirectory + var6 + "html");
  383.       }
  384.  
  385.       this.Title = var5;
  386.  
  387.       for(this.assetCount = 0; this.assetCount < 50; ++this.assetCount) {
  388.          this.cam.RemoveAsset(var4[this.assetCount]);
  389.       }
  390.  
  391.    }
  392.  
  393.    void OnDropOK() {
  394.       onlyYou = 1;
  395.    }
  396.  
  397.    public void onDrop(IDLayout var1, IDRect var2, int var3) {
  398.       if (var3 == 1) {
  399.          if (this.CheckTwoInstancesError()) {
  400.             return;
  401.          }
  402.  
  403.          this.assetControl = new int[50];
  404.          int var4 = 0;
  405.  
  406.          do {
  407.             this.assetControl[var4] = 0;
  408.             ++var4;
  409.          } while(var4 < 50);
  410.  
  411.          this.cdp = new DDrawPicture();
  412.          this.codeBase = this.cdp.getCodeBase();
  413.          String var8 = this.codeBase;
  414.          DImage var5 = new DImage();
  415.          var5.setImageFile(var8 + "bbs\\image\\BBSComp.gif");
  416.          IDSize var6 = var5.getSize();
  417.          this.cdp.setImageFile(var8 + "bbs\\image\\BBSComp.gif");
  418.          this.cdp.SetPositionRect(var2.getLeft(), var2.getTop(), var2.getLeft() + var6.getWidth(), var2.getTop() + var6.getHeight());
  419.          this.cdp.setStretch(1);
  420.          var1.AddObject(this.cdp);
  421.       } else if (var3 == 3 && this.CheckTwoInstancesError()) {
  422.          return;
  423.       }
  424.  
  425.    }
  426.  
  427.    public void onInspect(CStringArray var1, CStringArray var2) {
  428.       if (this.onlyYouInvalid != 1) {
  429.          var1.Set("Subdirectory");
  430.          var2.Set("String\u0000");
  431.          var1.Set("Page Title");
  432.          var2.Set("String\u0000");
  433.          var1.Set("Publish to");
  434.          var2.Set("Set(Windows|Unix|Mac)");
  435.          var1.Set("Perl Path for Unix");
  436.          var2.Set("String\u0000");
  437.          var1.Set("CGI-bin Directory");
  438.          var2.Set("String\u0000");
  439.       }
  440.    }
  441.  
  442.    protected void createUnixConfig() {
  443.       DFile var1 = new DFile();
  444.       DFile var2 = new DFile();
  445.       String var3 = var1.GetPathChar();
  446.       String var4 = this.codeBase;
  447.       String var5 = this.getRelativeToRoot(this.cgiBin, '/') + "/" + this.Subdirectory;
  448.       var2.Open(var4 + "bbs" + var3 + "cgi-bin" + var3 + "config", 4097);
  449.       var2.WriteString("#!" + this.PerlPath + "\n", -1);
  450.       var2.WriteString("##################################\n", -1);
  451.       var2.WriteString("###CONFIGURATION##################\n", -1);
  452.       var2.WriteString("##################################\n", -1);
  453.       var2.WriteString("$BBS_HOME=$path.'" + var5 + "';\n", -1);
  454.       var2.WriteString("$HTML_DIR=$BBS_HOME.'/html';\n", -1);
  455.       var2.WriteString("$ERROR='error.html';\n", -1);
  456.       var2.WriteString("$ERROR_CHAR='error-char.html';\n", -1);
  457.       var2.WriteString("$SUCCESS='success.html';\n", -1);
  458.       var2.WriteString("# This directory should be \"server\" readable/writeable/executable only.\n", -1);
  459.       var2.WriteString("$CGI_BIN_DEBUG='" + this.cgiBin + "';\n", -1);
  460.       var2.WriteString("$STORAGE_DIR= $path.'" + this.getRelativeToRoot(this.cgiBin, '/') + "/" + this.Subdirectory + "/message';\n", -1);
  461.       var2.WriteString("$IMAGE_DIR= '../image';\n", -1);
  462.       var2.WriteString("$MESSAGE_TO_CGIBIN=$path.'" + this.getRelativeToRoot(this.Subdirectory + "/message", '/') + "/" + this.cgiBin + "';\n", -1);
  463.       var2.WriteString("$CGIBIN_DIR=$path.'../cgi-bin';\n", -1);
  464.       var2.WriteString("# The files below should be world readable/writable only.\n", -1);
  465.       var2.WriteString("$ERROR_COLLECT='error-collect.txt';\n", -1);
  466.       var2.WriteString("$SUCCESS_COLLECT='bbs-data.html';\n", -1);
  467.       var2.WriteString("$TOKEN_FILE ='counter';\n", -1);
  468.       var2.WriteString("$THREAD_TOKEN ='thread_counter';\n", -1);
  469.       var2.WriteString("# if your system does not support the flock() function, comment this out, or set it to 0.\n", -1);
  470.       var2.WriteString("# the latest edition of NT Perl, as well as all unix perl should have flock build in.\n", -1);
  471.       var2.WriteString("$flock_exists = 0;\n", -1);
  472.       var2.WriteString("$ERROR = $HTML_DIR.'/'.$ERROR;\n", -1);
  473.       var2.WriteString("$ERROR_CHAR = $HTML_DIR.'/'.$ERROR_CHAR;\n", -1);
  474.       var2.WriteString("$SUCCESS = $HTML_DIR.'/'.$SUCCESS;\n", -1);
  475.       var2.WriteString("$TMP = $STORAGE_DIR.'/'.($$).\".tmp\";\n", -1);
  476.       var2.WriteString("$ERROR_COLLECT = $STORAGE_DIR.'/'.$ERROR_COLLECT;\n", -1);
  477.       var2.WriteString("$INDEX_FILE = $STORAGE_DIR.'/'.$SUCCESS_COLLECT;\n", -1);
  478.       var2.WriteString("$TOKEN_FILE = $STORAGE_DIR.'/'.$TOKEN_FILE;\n", -1);
  479.       var2.WriteString("$THREAD_TOKEN = $STORAGE_DIR.'/'.$THREAD_TOKEN;\n", -1);
  480.       var2.Close();
  481.    }
  482.  
  483.    protected String Unix2MacPath(String var1) {
  484.       String var2 = "";
  485.       String var3 = "";
  486.       byte var4 = 0;
  487.       if (var1.length() >= 2 && var1.substring(0, 2).compareTo("./") == 0) {
  488.          var1 = var1.substring(2, var1.length());
  489.       }
  490.  
  491.       if (var1.substring(0, 1) == "/") {
  492.          var1 = var1.substring(1, var1.length());
  493.       }
  494.  
  495.       for(int var5 = 0; var5 < var1.length(); ++var5) {
  496.          var3 = var1.substring(var5, var5 + 1);
  497.          if (var3.compareTo(".") == 0) {
  498.             if (var4 == 0) {
  499.                var4 = 1;
  500.             } else if (var4 == 1) {
  501.                var4 = 2;
  502.             }
  503.          } else if (var3.compareTo("/") == 0) {
  504.             if (var4 == 2 || var4 == 0) {
  505.                var2 = var2 + ":";
  506.                var4 = 0;
  507.             }
  508.          } else {
  509.             var2 = var2 + var3;
  510.          }
  511.       }
  512.  
  513.       if (var2.substring(0, 1).compareTo(".") == 0) {
  514.          var2 = ":" + var2;
  515.       }
  516.  
  517.       return var2;
  518.    }
  519.  
  520.    boolean CheckTwoInstancesError() {
  521.       if (onlyYou == 1) {
  522.          DMessageBox var1 = new DMessageBox();
  523.          var1.Warnning("Only one BBS Component is allowed per NOD file. Please delete the extra BBS Components.");
  524.          this.onlyYouInvalid = 1;
  525.          return true;
  526.       } else {
  527.          return false;
  528.       }
  529.    }
  530. }
  531.