// tcc -DNO_UNISTD simpleBB.c cgic.c   not supporting long file name
// cl /DNO_UNISTD simpleBB.c cgic.c    supporting long file name

#include <stdio.h>
#include <stdlib.h>
#include "cgic.h"

void Get_kind(char *string);
void Get_name(char *string);
void Get_e_mail (char *string);
void Get_content(char *string);
void Get_subject(char *string);
void PrintOk(char *string);

/* cgi 的主程式從這裡開始 */
int cgiMain ()
{
  char Name[21];
  char E_mail[51];
  char Content[2048];
  char Subject[81];
  char board[21];
  char filename[50];
  char pathname[50] = "/website/htdocs/html/simpleBB/";
  char urlpath[50] = "http://squall.cs.ntou.edu.tw/html/simpleBB/";
  FILE *fptr;

  Get_kind(board);
  strcpy(filename, pathname);
  strcat(filename, board);
  strcat(filename, ".html");

  /* 如果 fopen 傳回 NULL 表示開檔失敗，可能是檔案不存在 */
  if ((fptr=fopen(filename,"r")) == NULL)
  {
      fptr = fopen(filename,"w");
      /* 開一個新的檔案準備寫入資料 */
      fprintf(fptr,"<html>\n<head><title>");
      fprintf(fptr,"留言內容</title></head>\n"
                   "<body bgcolor=#000000>");
      fprintf(fptr,"<center><font color=\"red\" size=\"3\">訪客留言</font>"
                   "<hr></center>");
      fclose(fptr);
      /* 上面三行就是產生基本的 html 資料(寫到 *.html 裡) */
  }

  fptr = fopen(filename,"a");
  /* 開檔來新增資料 */
  Get_name(Name);
  Get_e_mail(E_mail);
  Get_subject(Subject);
  Get_content(Content);
  /* 上面四行分別取得從瀏覽器傳來的 name, e-mail, subject 和 content */

  fprintf(fptr,"<font color=\"green\">姓名: </font>\n"
               "<font color=\"yellow\">%s</font><br>\n",Name);
  fprintf(fptr,"<font color=\"green\">E_mail : </font>\n"
               "<a href=\" mailto:%s\">%s</a><br>\n",E_mail, E_mail);
  fprintf(fptr,"<font color=\"green\">主題 : </font>\n"
               "<font color=\"yellow\">%s</font><br>\n",Subject);
  fprintf(fptr,"%s</a><br>\n",E_mail);
  fprintf(fptr,"<font color=\"green\">留言內容:</font>\n"
               "<pre><font color=\"yellow\">");
  fputs(Content,fptr);
  fprintf(fptr,"\n</font></pre><hr>");
  fclose(fptr);
  /* 上面這一段把資料加進 *.html 裡，其實就只是把 html 的語法、內容寫進去而已 */

  cgiHeaderContentType("text/html");
  /* 設定輸出為一般文字輸出 */
  strcpy(filename, urlpath);
  strcat(filename, board);
  strcat(filename, ".html");
  PrintOk(filename);
  /* 然後印出新增資料完成的訊息 */
  return 0 ;
}

void Get_name(char *string)
{
   cgiFormStringNoNewlines("name",string,21);
   /* 將名為 name 的變數內容到到 string 裡，最大長度為 21 bytes
      另外幾個函式依此類推 */
   return;
}
void Get_kind (char *string)
{
   cgiFormString("board",string,21);
   return;
}

void Get_e_mail (char *string)
{
   cgiFormStringNoNewlines("E_mail",string,51);
   return;
}

void Get_content(char *string)
{
   cgiFormString("content",string,2048);
   return;
}

void Get_subject(char *string)
{
   cgiFormStringNoNewlines("subject",string,81);
   return;
}

/* 如果執行成功的話，就印出訊息... */
void PrintOk(char *filename)
{
   printf("您的文章已經順利貼出 !!<br>謝謝使用 ....");
   printf("<a href=%s>看留言版</a>",filename);
   return ;
}
