/*
 * fooenv v0.2 / 27.08.2000
 */

#include <stdio.h>
#include <time.h>

#include "fooenv.h"
#include "cgi_lib.h"
#include "cgi_list.h"
#include "char_vector.h"

int main (void)
{
        cgi_lib *cgi;

        cgi_list    *fooenv_list;
        char_vector *fooenv_html;

        /* 'cgi_lib' Modul initialisieren. */
        cgi = cgi_lib_new (cgi);
        if (cgi == NULL)
        {       /* Es trat ein Fehler auf. Welcher? */
                switch (cgi_lib_errno)
                {
                        case CGI_LIB_ALREADY_IN_USE:
                        {
                                cgi_lib_send_HTML (cgi, "cgi_lib: already in use\n");
                                break;
                        }

                        case CGI_LIB_OUT_OF_MEMORY:
                        {
                                cgi_lib_send_HTML (cgi, "cgi_lib: out of memory\n");
                                break;
                        }

                        case CGI_LIB_METHOD_UNKNOWN:
                        {
                                cgi_lib_send_HTML (cgi, "cgi_lib: method unknown\n");
                                break;
                        }
                }

                return cgi_lib_errno;
        }

        /*
         * Wir erzeugen einen neuen 'char_vector'. In diesen 'char_vector'
         * wird die HTML Seite mit den CGI spezifischen Umgebungsvasriablen
         * abgelegt. Die Anfangsgroesse wird auf '2000 * sizeof (char)'
         * gesetzt. Der 'char_vector' passt seine Groesse automatisch an.
         */
        fooenv_html = char_vector_new (fooenv_html, 2000);
        if (fooenv_html == NULL)
        {       /* Es trat ein Fehler auf. */
                cgi_lib_send_HTML (cgi, "char_vector: out of memory\n");
                cgi_lib_del (cgi);

                return FOOENV_OUT_OF_MEMORY;
        }

        /*
         * Der 'header' der HTML Seite wird in den
         * zuvor erzeugten 'char_vector' kopiert.
         */
        char_vector_add_string (fooenv_html, "<HTML>\n"
                                             "<HEAD>\n"
                                             "<TITLE>fooenv</TITLE>\n"
                                             "</HEAD>\n"
                                             "<BODY><HR>\n"
                                             "<TABLE BORDER>\n");

        /*
         * Wir durchwandern die Liste in der alle Umgebungsvariablen
         * abgelegt sind ('cgi->cgi_lib_env'). Dazu wird die Funktion
         * 'cgi_list_next_item' verwendet. Diese Funktion liefert einen
         * Zeiger auf die naechste Umgebungsvariable.
         */
        for (fooenv_list = cgi->cgi_lib_env;
             fooenv_list->cgi_next != NULL;
             fooenv_list = cgi_list_next_item (fooenv_list))
        {       /*
                 * Das aktuelle Listenelement wird an die
                 * HTML Seite ('fooenv_html') angehaengt.
                 */
                char_vector_add_string (fooenv_html, "<TR><TD>\n");

                /* Name des aktuellen Listenelements einfuegen. */
                char_vector_add_string (fooenv_html, fooenv_list->cgi_key);
                char_vector_add_string (fooenv_html, "</TD><TD>\n");

                /* Wert des aktuellen Listenelements einfuegen. */
                char_vector_add_string (fooenv_html, fooenv_list->cgi_value);
                char_vector_add_string (fooenv_html, "</TD></TR>\n");
        }

        /*
         * Zum Schluss wird der 'footer' der HTML Seite
         * in den zuvor erzeugten 'char_vector' kopiert.
         */
        char_vector_add_string (fooenv_html, "</TABLE>\n"
                                             "<HR>\n"
                                             "</BODY>\n"
                                             "</HTML>\n");

        /*
         * Die HTML Seite ('fooenv_html') ist jetzt komplett
         * und kann an den Browser ausgegeben werden.
         */
        cgi_lib_send_HTML (cgi, fooenv_html->vector);

        /*
         * Fertig. Zum Schluss kann das 'char_vector' und das
         * 'cgi_lib' Modul wieder aus dem Speicher entfernen.
         */
        char_vector_del (fooenv_html);
        cgi_lib_del (cgi);

        return FOOENV_OK;
}