Browse Source

Add base file. Will add clear license and readme later. Consider this code licensed to something close to the BSD-3 Clause with non commercial

Godzil 7 years ago
commit
933dbbc210
14 changed files with 901 additions and 0 deletions
  1. 109 0
      Makefile
  2. 44 0
      about.c
  3. 285 0
      cgi_func.c
  4. 17 0
      cgi_func.h
  5. 62 0
      cgi_theme_gest.c
  6. 5 0
      cgi_theme_gest.h
  7. 43 0
      cgibase.c
  8. 134 0
      commander.c
  9. 59 0
      ds.c
  10. 17 0
      ds.h
  11. 113 0
      modprofil.c
  12. 2 0
      startup.sh
  13. 7 0
      test_serre.c
  14. 4 0
      test_serre.h

+ 109 - 0
Makefile

@@ -0,0 +1,109 @@
+CC = gcc
+CFLAGS = -Wall -O2
+#CFLAGS = -Wall -g
+LIBS = -L/lib -L/usr/lib -lsocket
+DESTDIR = /home/interface
+#/usr/lib/libds.a /lib/ibsocket.a
+OBJS = chtbl.o hashpjw.o list.o cgi_func.o cgi_theme_gest.o test_serre.o  /usr/lib/libds.a
+OBJS1 = $(OBJS) modprofil.o
+OBJS2 = $(OBJS) about.o
+OBJS3 = $(OBJS) cgibase.o
+OBJS4 = $(OBJS) commander.o
+
+EXENAME = cgibase.cgi modprofil.cgi about.cgi commander.cgi
+	
+all: dep $(EXENAME)
+
+help:
+	@echo "Aide sur se Makefile"
+	@echo "target reconnus :"
+	@echo "  help : Ce message d'aide"
+	@echo "  all : Genere tout les executables"
+	@echo "  debug : Comme all mais avec le debug actif"
+	@echo "  clean : Efface les fichiers objets et fichier temporaires"
+	@echo "  cleandist : Comme clean mais efface en plus les executables généré"
+	@echo "  install : installe tout les fichiers la ou il faut"
+	@echo "  refreshweb : installe les fichier utilisé par le cgi la ou il faut"
+	@echo "  uninstall : désinstalle le cgi \"proprement\""
+	@echo "  uninstallmore : Comme uninstall mais un peu plus \"aggressif\""
+
+commander.cgi: $(OBJS4)
+	@echo --====:::::: Compiling $(@)... ::::::====--
+	$(CC) $(CFLAGS) $(LIBS) -o $(@) $(OBJS4)
+
+cgibase.cgi: $(OBJS3)
+	@echo --====:::::: Compiling $(@)... ::::::====--
+	$(CC) $(CFLAGS) $(LIBS) -o $(@) $(OBJS3)
+
+modprofil.cgi: $(OBJS1)
+	@echo --====:::::: Compiling $(@)... ::::::====--
+	$(CC) $(CFLAGS) $(LIBS) -o $(@) $(OBJS1)
+
+about.cgi: $(OBJS2)
+	@echo --====:::::: Compiling $(@)... ::::::====--
+	$(CC) $(CFLAGS) $(LIBS) -o $(@) $(OBJS2)
+
+clean:
+	@echo	--====:::::: Cleaning... ::::::====--
+	rm -f *.o *~
+
+cleandist: clean
+	@echo --====:::::: Clean more... ::::::====--
+	rm -f $(EXENAME) depend
+
+mkdestdir:
+	@echo --====:::::: Make directory... ::::::====--
+	mkdir $(DESTDIR)	
+	
+install: all files.tgz mkdestdir refreshweb
+	@echo --====:::::: Installing ::::::====--
+	@echo --====:::::: Creating startup.sh ::::::====--
+	echo \#!/bin/sh $(DESTDIR)/startup.sh > $(DESTDIR)/startup.sh
+	echo echo Exporting system vars... >> $(DESTDIR)/startup.sh
+	echo export HTTPD_ROOT_DIR=$(DESTDIR)/www >> $(DESTDIR)/startup.sh
+	echo export HTTPD_ROOT_DOC=index.html >> $(DESTDIR)/startup.sh
+	echo export HTTPD_SCRIPTALIAS=$(DESTDIR)/cgi-bin >> $(DESTDIR)/startup.sh
+	echo echo Starting ds... >> $(DESTDIR)/startup.sh
+	echo ds \& >> $(DESTDIR)/startup.sh
+	echo echo Starting slinger... >> $(DESTDIR)/startup.sh
+	echo slinger -e -c -s \& >> $(DESTDIR)/startup.sh
+	echo echo Finish >> $(DESTDIR)/startup.sh
+	@echo --====:::::: Installing CGI... ::::::====--
+	cp $(EXENAME) $(DESTDIR)/cgi-bin
+	@echo "."
+	@echo Launch startup.sh in $(DESTDIR) to launch the web interface
+	
+files.tgz:
+	@echo --====:::::: Make files.tgz... ::::::====--
+	tar -czf $(@) cgi-bin www
+	
+uninstallmore: uninstall clean	
+	@echo --====:::::: Remove more... ::::::====--
+	rm -f files.tgz
+
+refreshcgi: $(EXENAME)
+	@echo --====:::::: Refreshing cgi files... ::::::====--
+	cp $(EXENAME) $(DESTDIR)/cgi-bin
+
+refreshweb: files.tgz
+	@echo --====:::::: Uncompressing files... ::::::====--
+	tar -zxvf files.tgz -C $(DESTDIR)
+	
+uninstall: 
+	@echo --====:::::: Uninstalling... ::::::====--
+	rm -Rf $(DESTDIR)
+
+dep: depend *.c
+
+depend:
+	@echo --====:::::: Make dependency... ::::::====--
+	gcc -M *.c > depend
+
+cafe:
+	@echo Inserez la tasse dans le compartiment prevu...
+
+compress: cleandist files.tgz
+	tar -czf../interface.tgz *.c *.h Makefile *.sh cgi-bin www
+	
+
+include depend

+ 44 - 0
about.c

@@ -0,0 +1,44 @@
+/*
+---- A propos ----
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "cgi_func.h"
+#include "cgi_theme_gest.h"
+#include "test_serre.h"
+
+char cgi_BaseName[100];
+
+int main(int argc, char *argv[])
+{
+	cgi_start();
+	cgi_parseparam();
+
+	cgitheme_init();
+
+	strcpy(cgi_BaseName,argv[0]);
+
+
+    if ( (cgi_getparam("restart")) != NULL )
+	{
+		//system("ls");
+		cgi_printfile("./files/restart.file");
+	}
+	else if (serre_test_start()==-1)
+	{
+		cgi_parsefile("./files/error-noserver.file");
+	}
+	else
+	{
+		cgi_parsefile("./files/base-start.file");
+		cgi_parsefile("./files/about.file");
+		cgi_parsefile("./files/base-end.file");
+	}
+
+	cgitheme_close();
+
+	cgi_cleanup();
+	return 0;
+}

+ 285 - 0
cgi_func.c

@@ -0,0 +1,285 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef WIN32
+#include "ds.h"
+#else
+#include <ds.h>
+#endif
+
+#include "chtbl.h"
+#include "hashpjw.h"
+
+#include "cgi_theme_gest.h"
+
+#define FALSE 0
+#define TRUE 1
+//#define DEBUG
+
+extern char cgi_BaseName[100];
+
+int cgi_started = FALSE;
+int cgi_paramparsed = FALSE;
+
+typedef struct cgiparam_
+{
+	char nom[25];
+	char value[100];
+} cgiparam;
+
+CHTbl Parametres;
+
+
+void GererParam(char *param);
+
+
+int TestEgalite(const void *val1, const void *val2)
+{
+	cgiparam *val_1 = (cgiparam *)val1 , *val_2 = (cgiparam *)val2;
+	int a = strcmp(val_1->nom,val_2->nom);
+
+	if ( a == 0)
+		a = 1;
+	else 
+		a = 0;
+
+	return a;
+}
+int hashage(const void *cle)
+{
+	return hashpjw((void*) ( ((cgiparam*) cle)->nom));
+}
+
+void cgi_start()
+{
+
+	if ( cgi_started == FALSE )
+		printf("Content-type: text/html\nCache-Control: no-cache\nPragma: no-cache\n\n");
+
+	cgi_started = TRUE;
+
+}
+
+int cgi_printfile(char *filename)
+{
+	FILE *fp;
+	char strline[255];
+	if( (fp = fopen(filename,"rt") ) == NULL )
+		return -1;
+
+	do
+	{
+		fgets(strline,255,fp);
+		printf("%s",strline);
+	}
+	while(!feof(fp));
+	fclose(fp);
+	return 0;
+}
+
+int cgi_parseparam()
+{
+#ifdef DEBUG
+	char params[1001];
+#else
+	char *params;
+#endif
+
+	char temp[126];
+	int OuQu_onest;
+
+	int LenParams,index,LenParam,index2,index3;
+
+	cgiparam *Param;
+
+	if ( cgi_paramparsed == TRUE )
+		return 1;
+
+	chtbl_init(&Parametres,1000,hashage,TestEgalite,free);
+
+#ifndef DEBUG
+	params = getenv("QUERY_STRING");
+#else
+	strcpy(params,"erreur=consulter");
+#endif
+
+	if (params == NULL)
+			return -1;
+	
+
+	LenParams = strlen(params);
+
+	memset(temp,0,126);
+	LenParam=0;
+
+	for(index=0;index<(LenParams+1);index++)
+	{
+		if ( (params[index] == '&') || (params[index] == 0) )
+		{
+			if ( (Param = (cgiparam*) malloc(sizeof(cgiparam))) == NULL)
+				return -1;
+			memset(Param,0,sizeof(cgiparam));
+
+			OuQu_onest = 0;
+			index3=0;
+			for(index2=0;index2<LenParam;index2++)
+			{
+				if(temp[index2] == '=')
+				{
+					OuQu_onest = 1;
+					index3 = 0;
+				}
+				else
+				{
+					if (OuQu_onest == 0)
+					{
+						Param->nom[index3++] = temp[index2];
+					}
+					else
+					{
+						Param->value[index3++] = temp[index2];
+					}
+				}
+			}
+			chtbl_insert(&Parametres,(void*)Param);
+			memset(temp,0,126);
+			LenParam = 0;
+		}
+		else
+		{
+			temp[LenParam++] = params[index];
+		}
+	}
+	cgi_paramparsed = TRUE;
+	return 0;
+}
+
+char *cgi_getparam(char *ParamName)
+{
+	cgiparam Temp,*Param;
+
+	char *Retour = NULL;
+
+	if ( cgi_paramparsed == FALSE )
+		return NULL;
+
+	/* Initialisation de la structure */
+
+	memset(&Temp,0,sizeof(cgiparam));
+	
+	/* On cree la structure qui va etre utilisé pour chercher dans la table */
+
+	strcpy(Temp.nom,ParamName);
+
+	/* On fait pointer Param vers la ou il faut */
+
+	Param = &Temp;
+
+	if ( chtbl_lookup(&Parametres,(void *)&Param) == 0)
+		Retour = Param->value;
+
+	return Retour;
+}
+
+int cgi_parsefile(char *filename)
+{
+	/* 
+	Définition Attention ya une var :
+	<!--#-->
+	A mettre en début de ligne
+	
+
+    Df Var
+
+    <!--TEST-->
+	ou test est le nom de la var
+	*/
+	FILE *fp;
+	char strline[500];
+	char strtest[61];
+
+	int index,index2,LenLine;
+
+	if( (fp = fopen(filename,"rt") ) == NULL )
+		return -1;
+
+	do
+	{
+		fgets(strline,500,fp);
+		memset(strtest,0,61);
+		memcpy(strtest,strline,8);
+		if(strcmp(strtest,"<!--#-->") == 0)
+		{ /* On a une variable dans la ligne, on découpe... */
+		 LenLine = strlen(strline);
+		 for(index=8;index<LenLine;index++)
+		 {
+			memset(strtest,0,9);
+			memcpy(strtest,strline + index,4);
+			if (strcmp(strtest,"<!--") == 0)
+			{
+				index = index + 4;
+				index2 = 0;
+				while(strline[ index + index2 ] != '-')
+					index2++;
+				memcpy(strtest,strline + index,index2);
+				GererParam(strtest);
+				index = index + index2 + 2;
+			}
+			else
+			{
+				printf("%c",strline[index]);
+			}
+		 }
+		}
+		else
+		{ /* Sinon on affiche normalement */
+			printf("%s",strline);
+		}
+	}
+	while(!feof(fp));
+	fclose(fp);
+	return 0;
+}
+
+void cgi_cleanup()
+{
+	if ( cgi_paramparsed == TRUE )
+		chtbl_destroy(&Parametres);
+
+	cgi_paramparsed = FALSE;
+}
+
+
+/*
+Cette fonction a pour but de reagir en fonction des paramètres passé en Include dans le fichier qui est lu
+( par ex pour <!--THEME--> le parametre est "THEME" )
+*/
+void GererParam(char *param)
+{
+	ds_t  ds_desc;
+	char temp[512];
+
+	if (strcmp(param,"THEME")==0)
+	{ /* On envois le theme courant*/
+		printf("%s",get_act_theme());
+	}
+	else if(strcmp(param,"GET_THEME")==0)
+	{ /* On envois la liste de theme */
+		cgi_parsefile("./theme/listtheme.file");
+	}
+	else if(strcmp(param,"CGI_BASENAME")==0)
+	{ /* On envois le nom de base du cgi */
+		printf("%s",cgi_BaseName);
+	}
+	else
+	{ 	/* Sinon on va chercher la valeur de la variable "qnx" grace a ds */
+		ds_desc=ds_register();
+		memset(temp,0,512);
+		if ( ds_get(ds_desc,param,temp,511)	> 0)
+		{
+			 printf("%s",temp);
+		}
+		ds_deregister(ds_desc);
+	}
+}

+ 17 - 0
cgi_func.h

@@ -0,0 +1,17 @@
+void cgi_start();
+
+
+int cgi_printfile(char *filename);
+
+
+int cgi_parseparam();
+
+
+char *cgi_getparam(char *ParamName);
+
+
+void cgi_cleanup();
+
+
+int cgi_parsefile(char *filename);
+

+ 62 - 0
cgi_theme_gest.c

@@ -0,0 +1,62 @@
+#include "cgi_func.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define set_act_theme(val) theme = val
+
+char theme_base[] = "basebleu";
+
+char themestart[100];
+char themeend[100];
+
+char *theme;
+
+char *get_act_theme()
+{
+	return theme;
+}
+
+void cgitheme_init()
+{
+
+	char *temp;	
+
+	cgi_start();
+	cgi_parseparam();
+
+	temp = cgi_getparam("theme");
+	if (temp == NULL)
+		temp = theme_base;
+
+#ifdef _WIN32
+	sprintf(themestart,".\\theme\\%s\\start.theme",temp);
+	sprintf(themeend,".\\theme\\%s\\end.theme",temp);
+#else /* On est pas sous windows, c qu'on est sous un UNIX */
+	sprintf(themestart,"./theme/%s/start.theme",temp);
+	sprintf(themeend,"./theme/%s/end.theme",temp);
+#endif
+	
+	if ( cgi_printfile(themestart) == -1 )
+	{
+	temp = theme_base;
+#ifdef _WIN32
+	sprintf(themestart,".\\theme\\%s\\start.theme",temp);
+	sprintf(themeend,".\\theme\\%s\\end.theme",temp);
+#else /* On est pas sous windows, c qu'on est sous un UNIX */
+	sprintf(themestart,"./theme/%s/start.theme",temp);
+	sprintf(themeend,"./theme/%s/end.theme",temp);
+#endif
+
+	cgi_printfile(themestart);
+	}
+	
+	set_act_theme(temp);
+	
+}
+
+void cgitheme_close()
+{
+	cgi_printfile(themeend);
+}

+ 5 - 0
cgi_theme_gest.h

@@ -0,0 +1,5 @@
+void cgitheme_init();
+
+void cgitheme_close();
+
+char *get_act_theme();

+ 43 - 0
cgibase.c

@@ -0,0 +1,43 @@
+/*
+---- Cgi principal ----
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "cgi_func.h"
+#include "cgi_theme_gest.h"
+#include "test_serre.h"
+
+char cgi_BaseName[100];
+
+int main(int argc, char *argv[])
+{
+	cgi_start();
+	cgi_parseparam();
+
+	cgitheme_init();
+
+	strcpy(cgi_BaseName,argv[0]);
+
+
+	if ( (cgi_getparam("restart")) != NULL )
+	{
+		//system("ls");
+		cgi_printfile("./files/restart.file");
+	}
+	else if (serre_test_start()==-1)
+	{
+		cgi_parsefile("./files/error-noserver.file");
+	}
+	else
+	{
+		cgi_parsefile("./files/base-start.file");
+		cgi_parsefile("./files/all.file");
+		cgi_parsefile("./files/base-end.file");
+	}
+
+	cgitheme_close();
+
+	cgi_cleanup();
+	return 0;
+}

+ 134 - 0
commander.c

@@ -0,0 +1,134 @@
+/*
+---- Commander un effecteur ----
+*/
+#include <stdio.h>
+#include <string.h>
+
+#ifdef WIN32
+
+/*
+Includes spécifiques a windows
+*/
+#include <windows.h>
+#include <winsock.h>
+
+
+#else
+
+/*
+QNX Specific
+*/
+
+#include <unistd.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+typedef int SOCKET;
+typedef struct sockaddr SOCKADDR;
+typedef struct sockaddr_in SOCKADDR_IN;
+#define closesocket(x) close(x);
+#define INVALID_SOCKET -1
+
+#endif
+
+
+#include "cgi_func.h"
+#include "cgi_theme_gest.h"
+#include "test_serre.h"
+
+char cgi_BaseName[100];
+
+
+int main(int argc, char *argv[])
+{
+
+#ifdef WIN32
+/* Spécifique Windows 32 */
+	struct WSAData pWSA;
+#endif
+
+	SOCKET ConnectSocket;
+	SOCKADDR_IN SockOPT;
+
+	char *argument;
+
+	cgi_start();
+	cgi_parseparam();
+
+	cgitheme_init();
+
+	strcpy(cgi_BaseName,argv[0]);
+
+
+	if ( (cgi_getparam("restart")) != NULL )
+	{
+		cgi_printfile("./files/restart.file");
+	}
+	else if (serre_test_start()==-1)
+	{
+		cgi_parsefile("./files/error-noserver.file");
+	}
+	else
+	{
+		cgi_parsefile("./files/base-start.file");
+
+		argument = cgi_getparam("effecteur");
+		if(argument != NULL)
+		{
+			printf("<br><br>");
+			printf("<img src='/image/info.gif'>Connection au programme principal<br>\n");
+			printf("<img src='/image/info.gif'>Mise en oeuvre de la liaison...<br>\n");
+			
+#ifdef WIN32
+			if ( WSAStartup(MAKEWORD(2,0),&pWSA) == 0 )
+			{
+				printf("<img src='/image/ok.gif'>WSAStartup<br>\n");
+#endif
+
+				if ( (ConnectSocket = socket(AF_INET,SOCK_STREAM,0)) != INVALID_SOCKET)
+				{
+					printf("<img src='/image/ok.gif'>Creation de la socket<br>\n");
+					SockOPT.sin_family = AF_INET ; 
+					SockOPT.sin_port = htons (60042);
+					SockOPT.sin_addr.s_addr = 0x7F000001; /* 127.0.0.1: on accepte que des connection locales */
+					if ( connect(ConnectSocket,(SOCKADDR *)&SockOPT,sizeof(SOCKADDR_IN)) != INVALID_SOCKET)
+					{
+						printf("<img src='/image/ok.gif'>Connection<br>\n");
+						printf("<img src='/image/info.gif'>Envoi des donnees<br>\n");
+					    send(ConnectSocket,argument,strlen(argument),0);
+						printf("<img src='/image/ok.gif'>Envoi effectue<br>\n");
+						shutdown(ConnectSocket,2);
+						printf("<img src='/image/ok.gif'>Deconnection<br>\n");
+						closesocket(ConnectSocket);
+#ifdef WIN32
+						WSACleanup();
+#endif
+						printf("<img src='/image/info.gif'>Tout c'est bien passe !<br>\n");
+						cgi_parsefile("./files/fin-commander.file");
+					}
+					else
+					{
+						printf("<img src='/image/stop.gif'>Connection<br>\n");
+					}
+				}
+				else
+				{
+					printf("<img src='/image/stop.gif'>Creation de la socket<br>\n");
+				}
+#ifdef WIN32
+	        }
+			else
+			{
+			printf("<img src='/image/stop.gif'>WSAStartup<br>\n");
+			}
+#endif
+        }
+		printf("<div align='center'><font color=#FF0000><h2>Si se message apparait, c'est qu'un erreur c'est produite lors de la demande de changement d'etat manuel d'un des effecteurs.</h2></font></div>");
+		cgi_parsefile("./files/base-end.file");
+	}
+
+	cgitheme_close();
+
+	cgi_cleanup();
+	return 0;
+}

+ 59 - 0
ds.c

@@ -0,0 +1,59 @@
+#ifdef WIN32
+
+#include <stdio.h>
+#include <string.h>
+#include "ds.h"
+
+unsigned long int suivant = 1;
+
+
+int rand()
+{
+    suivant = suivant * 1103515245 + 12345;
+    return (unsigned int)(suivant/65536) % 32768;
+}
+
+int ds_register()
+{
+    return rand();
+}
+int ds_get(ds_t ds,char *arg,char *val,int valsize)
+{
+	FILE *fp;
+	char file[512];
+	strcpy(file,"c:/ds/");
+	strcat(file,arg);
+	fp = fopen(file,"rb");
+	if ( fp != NULL )
+	{
+		fread(val,valsize,1,fp);
+		fclose(fp);
+	}
+	else
+	{
+		strcpy(val,"NOT_EXIST");
+	}
+	return 1;
+}
+void ds_deregister(ds_t t)
+{
+        
+}
+
+
+int ds_set(ds_t dsdes,const char* variable_name,const char* variable_data,size_t data_len )
+{
+	FILE *fp;
+	char file[512];
+	strcpy(file,"c:/ds/");
+	strcat(file,variable_name);
+	fp = fopen(file,"wb");
+	if ( fp != NULL )
+	{
+		fwrite(variable_data,data_len,1,fp);
+		fclose(fp);	
+	}
+	return 0;
+}
+
+#endif

+ 17 - 0
ds.h

@@ -0,0 +1,17 @@
+#ifdef WIN32
+/*
+Ds.h
+*/
+#ifndef BIDON_DS
+#define BIDON_DS
+
+typedef int ds_t;
+
+int ds_register();
+int ds_get(ds_t ds,char *,char *,int);
+int ds_set(ds_t dsdes,const char* variable_name,const char* variable_data,size_t data_len );
+void ds_deregister(ds_t);
+
+#endif
+
+#endif

+ 113 - 0
modprofil.c

@@ -0,0 +1,113 @@
+/*
+ ---- Modification du profil ----
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+
+#ifdef WIN32
+#include "ds.h"
+#else
+#include <ds.h>
+#endif
+
+#include "cgi_func.h"
+#include "cgi_theme_gest.h"
+#include "test_serre.h"
+
+char cgi_BaseName[100];
+
+int isnumber(char *value)
+{
+	char Car;
+	Car = value[0];
+	value++;
+	while(Car != 0) /* Tant qu'on est pas a la fin de la chaine */
+	{
+		if ( isdigit(Car) == 0)
+		{
+			printf("\n<div align='center'><h3><font color=\"#FF0000\">La valeur entrée n'est pas un nombre !</font></h3></div>\n");
+			return 1;
+		}
+		Car = value[0];
+		value++;
+	}
+	return 0;
+}
+
+int main(int argc, char *argv[])
+{
+	char *argument,*valeur,val[60];
+	ds_t ds_desc;
+	
+	ds_desc = ds_register();
+
+	cgi_start();
+	cgi_parseparam();
+
+	cgitheme_init();
+
+	strcpy(cgi_BaseName,argv[0]);
+
+
+    if ( (cgi_getparam("restart")) != NULL )
+	{
+		//system("ls");
+		cgi_printfile("./files/restart.file");
+	}
+	else if (serre_test_start()==-1)
+	{
+		cgi_parsefile("./files/error-noserver.file");
+	}
+	else
+	{
+		cgi_parsefile("./files/base-start.file");
+
+		argument = cgi_getparam("type");
+		valeur = cgi_getparam("valeur");
+		if(argument == NULL)
+		{
+			cgi_parsefile("./files/modprofil.file");
+		}
+		else if(strcmp(argument,"hygrometrie")==0)
+		{
+			if ( (valeur != NULL) && (isnumber(valeur) == 0) )
+			{
+				cgi_parsefile("./files/fin-modseuil.file");
+				strcpy(val,"SEUIL_HYGR");
+				ds_set(ds_desc,val,valeur,strlen(valeur));
+			}
+			else
+			{
+				cgi_parsefile("./files/modprofil.file");
+			}
+		}
+		else if(strcmp(argument,"temperature")==0)
+		{
+			if ( (valeur != NULL) && (isnumber(valeur) == 0) )
+			{
+				cgi_parsefile("./files/fin-modseuil.file");
+				strcpy(val,"SEUIL_TEMP");
+				ds_set(ds_desc,val,valeur,strlen(valeur));
+			}
+			else
+			{
+				cgi_parsefile("./files/modprofil.file");
+			}
+			
+		}
+		else //if(strcmp(argument,"mod")==0)
+		{
+			cgi_parsefile("./files/modprofil.file");
+		}
+
+		cgi_parsefile("./files/base-end.file");
+	}
+
+	cgitheme_close();
+
+	cgi_cleanup();
+	return 0;
+}

+ 2 - 0
startup.sh

@@ -0,0 +1,2 @@
+#!/bin/sh
+

+ 7 - 0
test_serre.c

@@ -0,0 +1,7 @@
+//#include <unistd.h>
+#include <stdio.h>
+
+int serre_test_start()
+{ /* On teste si l'executable principal est en marche... */
+	return 0;
+}

+ 4 - 0
test_serre.h

@@ -0,0 +1,4 @@
+#define SERRE_HYGR 5042
+#define SERRE_TEMP 5043
+int serre_test_start();
+