diff --git a/NEWS b/NEWS
index 704b20e..59a105f 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,27 @@
History of Nife releases :
+2015-08-10 - Nife 0.55 is released.
+ * Changing the log file contents to be able to use it for debugging.
+ The log file is in the subdirectory .nife. His name is the type
+ .nife_PID.log, PID being its number of pid.
+ We can display the content in real time with tail -f.
+ The .nifeNS_pid.log and .nifeRPC_PID.log files are those of the
+ server networks and its bodies.
+ Log files are deleted at the end of the Nife session unless an error
+ occured.
+ * Added "savelog function to save the logs before going out.
+ * Placing aid debugging functions. All these functions begin with the _
+ character and are listed with ?libp function.
+ * Added shell script command, ex/NifeDebugTerms, to facilitate
+ establishment and closing of the display terminals for the logs.
+ * Added the possibility, in graphic mode, to open or close
+ terminals with keys 'home' and 'end'. These functionalities are
+ based on performance in the window manager of the above script.
+ * Reorganization of system functions in the function stack.
+ * Improved tasks and consoles.
+ * Added the ability to execute external command interactively, with the
+ character ! at the beginning of the line.
+
2014-08-31 - Nife 0.51 is released.
* Finalising the version 1.0 of the functions dump and restore with the
definition of the NBLF, Nife Binary Linkable Format.
diff --git a/src/conf.h b/src/conf.h
index a80143a..e22e6c8 100644
--- a/src/conf.h
+++ b/src/conf.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@ along with this program. If not, see
#ifdef HAVE_CONFIG_H
#include "../config.h"
#else
-#define VERSION "0.51"
+#define VERSION "0.55"
#endif
#ifdef HAVE_COMEDILIB_H
diff --git a/src/debug.c b/src/debug.c
index 0d35902..8671974 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -26,27 +26,77 @@ along with this program. If not, see
#include "nife.h"
#include "mth.h"
+#include "foncs.h"
#include "debug.h"
+#include "stackC.h"
int Debug=1; /* OK by default */
+int InDebugFct=0;
+
+static void D_Logname(char*B)
+{
+ switch(Debug) {
+ case 1:
+ sprintf(B,".nife_%d.log",getpid());
+ break;
+ case 2:
+ sprintf(B,".nifeNS_%d.log",getpid());
+ break;
+ case 3:
+ sprintf(B,".nifeRPC_%d.log",getpid());
+ break;
+ default:
+ *B='\0';
+ }
+}
void D_Reset(void)
{
int fd, nc;
char NF[24];
- nc=chdir(".nife");
if (Debug) {
- sprintf(NF,".nife_%d.log",getpid());
+ nc=chdir(".nife");
+ D_Logname(NF);
if ((fd=open(NF,O_CREAT|O_RDWR|O_TRUNC,0644)) < 0) perror(NF);
else {
dup2(fd,2);
close(fd);
}
+ nc=chdir("..");
} else dup2(1,2);
- nc=chdir("..");
}
-void D_Update(void)
+void IFD_SaveLog(void)
+{
+char NF[24],comm[50],*newf;
+ newf = getString();
+ if (Debug) {
+ D_Logname(NF);
+ sprintf(comm,"cp .nife/%s %s",NF, newf);
+ runCommand(comm);
+ }
+}
+
+static void DebugTerms(char c)
+{
+char comm[24];
+ if (Debug) {
+ sprintf(comm,"ex/NifeDebugTerms -%c", c);
+ runCommand(comm);
+ }
+}
+
+void IFD_DebugTOn(void)
+{
+ DebugTerms('r');
+}
+
+void IFD_DebugTOff(void)
+{
+ DebugTerms('s');
+}
+
+void IFD_Update(void)
{
if (Debug) Debug=0;
else Debug=1;
@@ -56,7 +106,39 @@ void D_Update(void)
void D_Trace(char * M)
{
if (Debug) {
- fprintf(stderr," %s",M);
+ fprintf(stderr,"%s ",M);
+ fflush(stderr);
+ }
+}
+
+void D_Close(void)
+{
+int nc;
+char NF[24];
+ fclose(stderr);
+ if (Debug) {
+ nc=chdir(".nife");
+ D_Logname(NF);
+ unlink(NF);
+ nc=chdir("..");
+ }
+}
+
+void D_Tracenl(char * M)
+{
+ if (Debug) {
+ fprintf(stderr,"%s\n",M);
+ fflush(stderr);
+ }
+}
+
+void D_TraceH(char * M, int l)
+{
+int i;
+ if (Debug) {
+ fprintf(stderr,"HEX:");
+ for (i=0;i
#ifndef __NIFE_DEBUG_H__
#define __NIFE_DEBUG_H__
extern int Debug;
+extern int InDebugFct;
+
+#define _IFD_BEGIN_ int fd; fd=dup(1); dup2(2,1); InDebugFct=1;
+#define _IFD_END_ dup2(fd,1); close(fd); InDebugFct=0;
extern void D_Reset(void);
-extern void D_Update(void);
+extern void IFD_Update(void);
+extern void IFD_SaveLog(void);
+extern void IFD_DebugTOn(void);
+extern void IFD_DebugTOff(void);
+extern void D_Close(void);
+
extern void D_Trace(char * M);
+extern void D_Tracenl(char * M);
+extern void D_TraceH(char * M, int l);
extern void * Malloc(int s);
extern void Free(void * A);
diff --git a/src/dev.c b/src/dev.c
index 72923d8..ec15eae 100644
--- a/src/dev.c
+++ b/src/dev.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -25,6 +25,7 @@ along with this program. If not, see
#include
#include
+#include "debug.h"
static int DFL_did=0, DFL_sid=0, DFL_cid=0;
#ifdef _WITH_COMEDILIB
@@ -153,6 +154,13 @@ char driver[24], nomdev[24];
}
}
+void IFD_listDev (void)
+{
+ _IFD_BEGIN_
+ IF_listDev();
+ _IFD_END_
+}
+
#ifdef _WITH_COMEDILIB
static void show_subdev(int i, int V)
{
@@ -227,6 +235,13 @@ int i, n_subdev;
#endif
}
+void IFD_showDev (void)
+{
+ _IFD_BEGIN_
+ IF_showDev();
+ _IFD_END_
+}
+
void IF_devShowDflt (void)
{
#ifdef _WITH_COMEDILIB
@@ -246,6 +261,13 @@ int n_subdev;
#endif
}
+void IFD_devShowDflt (void)
+{
+ _IFD_BEGIN_
+ IF_devShowDflt();
+ _IFD_END_
+}
+
static void dev_read(int did, int sid, int cid)
{
#ifdef _WITH_COMEDILIB
diff --git a/src/dev.h b/src/dev.h
index 1689338..a436444 100644
--- a/src/dev.h
+++ b/src/dev.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,11 +19,14 @@ along with this program. If not, see
#define __NIFE_DEV_H__
extern void IF_listDev (void);
+extern void IFD_listDev (void);
extern void IF_showDev (void);
+extern void IFD_showDev (void);
extern void IF_devRead (void);
extern void IF_devWrite (void);
extern void IF_devDflt (void);
extern void IF_devShowDflt (void);
+extern void IFD_devShowDflt (void);
extern void IF_devDflW (void);
extern void IF_devDflR (void);
diff --git a/src/err.c b/src/err.c
index cea7d6d..78805b8 100644
--- a/src/err.c
+++ b/src/err.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -23,6 +23,7 @@ along with this program. If not, see
#include "nife.h"
#include "mth.h"
#include "err.h"
+#include "debug.h"
#include "histo.h"
#include "stackF.h"
#include "stackN.h"
@@ -132,29 +133,39 @@ void stopErr(char *M, char *F)
exit(1);
}
+static ErrPrintf(char *M)
+{
+ printf(M);
+ if (InDebugFct==0) fprintf(stderr,M);
+}
+
static void traiteErr(int n, char * L)
{
int v;
ERROR=n;
if (D_Cod==0) {
if (ECHOOFF) printf("\n");
+ /* if (InDebugFct==0) fprintf(stderr,"\n"); A VOIR ! */
printf("%s : %s !!\a\n",L,TabErr[n]);
+ if (InDebugFct==0) fprintf(stderr,"%s : %s !!\a\n",L,TabErr[n]);
}
if (inSonProc) exit(1);
if (fctEnCours) {
- if (D_Cod==0) printf("Compilation aborted !\n");
+ if (D_Cod==0) ErrPrintf("Compilation aborted !\n");
else
- if (ADDRONE == VIDE) printf("Inside compilation aborted !\n");
+ if (ADDRONE == VIDE) ErrPrintf("Inside compilation aborted !\n");
_MODIF_fctEnCours_(0);
rmLastFct();
}
if (ADDRONE != VIDE) return;
if (FD_IN) {
printf("In loading file %s : line %d !\n", getFDname(),getFDlig());
+ if (InDebugFct==0) fprintf(stderr, "In loading file %s : line %d !\n", getFDname(),getFDlig());
closeFD();
}
if (iTERM) {
printf("In loading stdin : line %d !\n", getFDlig());
+ if (InDebugFct==0) fprintf(stderr,"In loading stdin : line %d !\n", getFDlig());
close(FD_IN); /* pipe ou autre */
v = dup(iTERM); /* stdin on term */
iTERM = 0;
@@ -183,8 +194,7 @@ void IF_NoError(void)
void IF_LibError(void)
{
long P;
- getParLong(&P);
- putString(TabErr[(int)P]);
+ if (getParLong(&P)) putString(TabErr[(int)P]);
}
void IF_IsError(void)
diff --git a/src/err.h b/src/err.h
index 7fe67af..f5a013c 100644
--- a/src/err.h
+++ b/src/err.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/src/ex/NifeDebugTerms b/src/ex/NifeDebugTerms
new file mode 100755
index 0000000..debe504
--- /dev/null
+++ b/src/ex/NifeDebugTerms
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Ce script a ete fait pour l'environnement Gnome,
+# mais il peut etre adapte tres facilement.
+# Pour cela suivre les commentaires.
+
+explic ()
+{
+ echo "Erreur : $1 !" >&2
+ echo "Utilisation : $0 [-s|-r]" >&2
+ echo " option -s=stopper l'affichage des logs" >&2
+ echo " option -r=relancer l'affichage des logs" >&2
+ exit 1
+}
+
+TERMCOM='gnome-terminal' # mettre ici le nom de la commande qui va bien !
+
+if ! test $TERMCOM ; then
+ echo "Commande $TERMCOM absente !" >&2
+ exit 1
+fi
+
+
+if [ $# -gt 1 ]; then
+ explic "Parametres trop nombreux"
+fi
+Mode=0
+if [ $# -eq 1 ]; then
+ [ "$1" = "-s" ] && Mode=1
+ [ "$1" = "-r" ] && Mode=2
+ [ $Mode -eq 0 ] && explic "$1 : parametre non valable"
+ # arret des terminaux
+ liste=`ps -fe|grep -v 'sh -c'|grep 'tail -f .nife'|sed 's/ */ /g'|cut -d' ' -f2`
+ for pid in $liste
+ do
+ kill $pid 2>/dev/null
+ done
+ [ $Mode -eq 1 ] && exit 0
+fi
+
+IFS='
+'
+liste=`ls .nife/.nife*` 2>/dev/null
+if [ "$liste" = "" ]; then
+ echo "Pas de fichier log ! Nife n'est pas en action !" >&2
+ exit 2
+fi
+
+for l in $liste
+do
+ com="tail -f $l"
+ $TERMCOM -e "sh -c '$com'" -t "$l" # A mettre a jour si TERMCOM
+ # a ete modifie !!
+done
+
diff --git a/src/foncs.c b/src/foncs.c
index 585a3f5..444b681 100644
--- a/src/foncs.c
+++ b/src/foncs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -30,6 +30,7 @@ along with this program. If not, see
#include "nife.h"
#include "mth.h"
#include "err.h"
+#include "debug.h"
#include "foncs.h"
#include "histo.h"
#include "stackN.h"
@@ -91,7 +92,6 @@ char * Sh;
if ((pid = fork()) == -1) stopErr("runComm","fork");
if (pid == 0) { /* fils */
_MODIF_inSonProc_(1);
- termReset();
if ((Sh=getenv("SHELL")) == NULL) execlp("sh","sh","-c",com,NULL);
else execlp(Sh,"sh","-c",com,NULL);
perror("sh");
@@ -99,8 +99,12 @@ char * Sh;
}
waitpid(pid,NULL,0);
_MODIF_WAITPID_(0);
- termInit();
- printf("\n");
+}
+
+void runCommandT (char * com)
+{
+ D_Trace("$"); D_Tracenl(com);
+ runCommand(com);
}
void IF_toCsv(void)
diff --git a/src/foncs.h b/src/foncs.h
index ac47186..662f72d 100644
--- a/src/foncs.h
+++ b/src/foncs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -31,5 +31,6 @@ extern void IF_xytXgraph(void);
extern void IF_resUsage(void);
extern void runCommand( char * C);
+extern void runCommandT( char * C);
#endif
diff --git a/src/gplot.c b/src/gplot.c
index fb1461d..837e872 100644
--- a/src/gplot.c
+++ b/src/gplot.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -30,6 +30,7 @@ along with this program. If not, see
#include "stackN.h"
#include "stackC.h"
#include "err.h"
+#include "debug.h"
#define GPO_STD 0 /* standard */
#define GPO_MRG 0x100 /* merge */
@@ -365,6 +366,11 @@ struct GPlot * N;
printf("\n");
}
-
+void IFD_show_stackGP(void)
+{
+ _IFD_BEGIN_
+ IF_show_stackGP();
+ _IFD_END_
+}
diff --git a/src/gplot.h b/src/gplot.h
index 9d0d5d8..e2c267e 100644
--- a/src/gplot.h
+++ b/src/gplot.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -27,5 +27,6 @@ extern void IF_gplot_commapp(void);
extern void IF_gplot_append(void);
extern void IF_gplot_replace(void);
extern void IF_show_stackGP(void);
+extern void IFD_show_stackGP(void);
#endif
diff --git a/src/help.c b/src/help.c
index 156df52..55b03ff 100644
--- a/src/help.c
+++ b/src/help.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,6 +19,8 @@ along with this program. If not, see
#include "help.h"
#include "nife.h"
+#include "lib.h"
+#include "mth.h"
#define LHLP 200 /* longueur MAX des lignes du fichier hlp */
static char buf[LHLP];
@@ -59,6 +61,15 @@ int debut=0,l;
void helpStd(char * L)
{
dropTrSuite();
+ if (fctExists(L)==0) {
+ printf("%s is not a User System function !\n",L);
+ return;
+ }
+ if (*L == '_') {
+ printf("%s :\n",L);
+ printf("The same as '%s', but with all displays in the log file.\n", L+1);
+ L++;
+ }
helpShow(L);
}
diff --git a/src/help.h b/src/help.h
index 393b41f..1a01c2b 100644
--- a/src/help.h
+++ b/src/help.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/src/histo.c b/src/histo.c
index 63a53fb..0d91888 100644
--- a/src/histo.c
+++ b/src/histo.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -80,6 +80,11 @@ void closeFD(void)
else _MODIF_FD_IN_(0);
}
+int getiFD(void)
+{
+ return iFD;
+}
+
int getFDlig(void)
{
return FD_L[iFD];
@@ -207,6 +212,7 @@ int lireLigne(int fd, char *b, char *s, int nc)
char *d, *f, c, c2, c3, *h, *w, *Wl, *rac;
int n, i, l, ls=0, ins=0, ignTild=0, nbT=0, Nc;
unsigned int j;
+char bufd[50];
/* printf("lireLigne ... \n"); */
d = b;
f = b+nc;
@@ -333,7 +339,7 @@ unsigned int j;
ignTild=1;
Nc=read(fd,&c2,1);
Nc=read(fd,&c3,1);
- if (c2 == '[') {
+ if (c2 == '[') { /* CSI - see XTerm Control Sequences */
switch(c3) {
case '2' : /* Insert */
if (ins) {
@@ -350,8 +356,8 @@ unsigned int j;
fflush(stdout);
}
break;
- case 'A' :
- case 'B' :
+ case 'A' : /* UpArrow */
+ case 'B' : /* DownArrow */
ins = 0;
/* efface la ligne en cours */
l=d-b;
@@ -395,14 +401,24 @@ unsigned int j;
fflush(stdout);
}
break;
+ case 'H' : /* home : debug terms ON */
+ case '1' : /* home numeric */
+ IFD_DebugTOn();
+ break;
+ case 'F' : /* end : debug terms OFF */
+ case '4' : /* end numeric */
+ IFD_DebugTOff();
+ break;
default:
- printf("\nESC [ %d (%c) !\n",(int)c3, c3);
+ sprintf(bufd,"# ignore : ESC [ %d (%c) !",(int)c3, c3);
+ D_Tracenl(bufd);
*d='\0';
+ /* **************
printf("> %s",b);
- fflush(stdout);
+ fflush(stdout); */
}
} else {
- if (c2 == 'O') {
+ if (c2 == 'O') { /* SS3 - see XTerm Control Sequences */
switch(c3) {
case 'P' : /* F1 */
break;
@@ -412,12 +428,20 @@ unsigned int j;
break;
case 'S' : /* F4 */
break;
+ case 'H' : /* home : debug terms ON */
+ IFD_DebugTOn();
+ break;
+ case 'F' : /* end : debug terms OFF */
+ IFD_DebugTOff();
+ break;
}
} else {
- printf("\nESC %d %d (%c) !\n",(int)c2,(int)c3, c3);
+ sprintf(bufd,"# ignore : ESC %d %d (%c) !",(int)c2,(int)c3, c3);
+ D_Tracenl(bufd);
*d='\0';
+ /* **************
printf("> %s",b);
- fflush(stdout);
+ fflush(stdout); */
}
}
break;
diff --git a/src/histo.h b/src/histo.h
index f66be51..df7b452 100644
--- a/src/histo.h
+++ b/src/histo.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -23,6 +23,7 @@ extern int iTERM;
extern void IF_showFD(void);
extern void addFD(int fd, char *N);
extern void closeFD(void);
+extern int getiFD(void);
extern int getFDlig(void);
extern char * getFDname(void);
extern int lireLigne(int fd, char * buf, char * buf2, int max);
diff --git a/src/i2c.c b/src/i2c.c
index bae5175..21c036a 100644
--- a/src/i2c.c
+++ b/src/i2c.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -237,6 +237,7 @@ unsigned long funcs;
#include "stackN.h"
#include "i2c.h"
#include "err.h"
+#include "debug.h"
void IF_listI2C (void)
{
@@ -247,6 +248,13 @@ void IF_listI2C (void)
#endif
}
+void IFD_listI2C (void)
+{
+ _IFD_BEGIN_
+ IF_listI2C();
+ _IFD_END_
+}
+
void IF_showI2C (void)
{
long n;
@@ -275,6 +283,13 @@ char Bus[10], filename[20];
#endif
}
+void IFD_showI2C (void)
+{
+ _IFD_BEGIN_
+ IF_showI2C();
+ _IFD_END_
+}
+
static void i2c_read(int id, int add, int off)
{
#ifdef _WITH_I2C
diff --git a/src/i2c.h b/src/i2c.h
index b77cd4d..c1a5a96 100644
--- a/src/i2c.h
+++ b/src/i2c.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,7 +19,9 @@ along with this program. If not, see
#define __NIFE_I2C_H__
extern void IF_listI2C (void);
+extern void IFD_listI2C (void);
extern void IF_showI2C (void);
+extern void IFD_showI2C (void);
extern void IF_I2CRead (void);
extern void IF_I2CWrite (void);
diff --git a/src/lib.c b/src/lib.c
index bb4cad3..e2610a3 100644
--- a/src/lib.c
+++ b/src/lib.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -344,9 +344,12 @@ void initLib(void)
addFonE("del_ofunc",IF_delOFct, F_PROG);
addFonE("fscan",IF_scanFct, F_PROG);
addFonc("?cs",IF_show_stackC);
+ addFonP("_?cs",IFD_show_stackC);
addFonP("?f",IF_show_stackF);
- /* addFonP("?l",IF_showFD); for debugging */
+ addFonP("_?f",IFD_show_stackF);
+ /* addFonP("?l",IF_showFD); for internal debugging */
addFonP("?v",IF_show_stackV);
+ addFonP("_?v",IFD_show_stackV);
addFonE("del_var",IF_delVar,F_PROG);
addFonP("vdrop",rmLastVar);
addFonP("reset_var",IF_setVarI);
@@ -363,8 +366,10 @@ void initLib(void)
addFonP("df_stop",IF_DF_STOP);
****************/
addFonc("?ls",IF_show_stackL);
+ addFonP("_?ls",IFD_show_stackL);
addFonc("?s",IF_show_stack);
- /* addFonc("?libX",show_lib_addr); for debugging */
+ addFonP("_?s",IFD_show_stack);
+ /* addFonc("?libX",show_lib_addr); for internal debugging */
addFonc("?libs",IF_show_liball);
addFonc("?lib",IF_show_libstd);
addFonc("?libM",IF_show_libmath);
@@ -387,7 +392,9 @@ void initLib(void)
addFonc("BIN",IF_BIN);
addFonc("echo_on",IF_ECHOON);
addFonc("echo_off",IF_ECHOFF);
- addFonc("DEBUG_I/O",D_Update);
+ addFonP("DEBUG_I/O",IFD_Update);
+ addFonP("\"saveLog",IFD_SaveLog);
+ /* addFonP("?logs",IFD_DebugTOn); */
addFonc("NBTAB",IF_NBTAB);
addFonc("NBLIG",IF_NBLIG);
addFonE("Var",IF_debVar, F_PROG);
@@ -396,6 +403,7 @@ void initLib(void)
addFonP("var_up",IF_VARUP);
addFonP("var_down",IF_VARDOWN);
addFonc("?vars",IF_vars);
+ addFonP("_?vars",IFD_vars);
addFonc("drop",IF_drop);
addFonc("dup",IF_dup);
addFonc("swap",IF_swap);
@@ -460,6 +468,7 @@ void initLib(void)
addFonG("xy_xgraph",IF_xyXgraph);
addFonG("xyt_xgraph",IF_xytXgraph);
addFonG("?gp",IF_show_stackGP);
+ addFonP("_?gp",IFD_show_stackGP);
addFonG("gplot",IF_gplot_new);
addFonG("gplotM",IF_gplot_newM);
addFonG("gplotRaz",IF_delAllGP);
@@ -472,6 +481,7 @@ void initLib(void)
addFonP(":!",IF_debFctS);
addFonP("Task",IF_NewTask);
addFonP("?t",IF_show_Tasks);
+ addFonP("_?t",IFD_show_Tasks);
addFonP("?task_run",IF_statusTask);
addFonP("del_task",IF_delTask);
addFonP("\"f",IF_execCS);
@@ -480,6 +490,7 @@ void initLib(void)
addFonP("\"v?",IF_execCSvl);
addFonP("stop_task",IF_stopTask);
addFonP("?console",IF_showCons);
+ addFonP("_?console",IFD_showCons);
addInst(";",IF_finFct);
addInst("'",IF_debBackC);
addInst("`",IF_debBackC1);
@@ -496,7 +507,7 @@ void initLib(void)
addFonc("do_leave",IF_DO_Leave);
addFonc("*do_leave",IF_DO_MLeave);
addFonc("do_next",IF_DO_Next);
- /* addFonc("?do",IF_DO_Show); for debugging */
+ /* addFonc("?do",IF_DO_Show); for internal debugging */
addFonc("ndo",IF_nDO);
addInst("loop",IF_LOOP);
addInst("+loop",IF_PLOOP);
@@ -510,18 +521,24 @@ void initLib(void)
addInst("goto_end",IF_JEND);
addFonE("help",IF_help, F_CORE);
addFonD("?dev",IF_listDev);
+ addFonP("_?dev",IFD_listDev);
addFonD("dev_info",IF_showDev);
+ addFonP("_dev_info",IFD_showDev);
addFonD("dev_read",IF_devRead);
addFonD("dev_write",IF_devWrite);
addFonD("dev_dflt",IF_devDflt);
addFonD("?dev_dflt",IF_devShowDflt);
+ addFonP("_?dev_dflt",IFD_devShowDflt);
addFonD("dev_dflW",IF_devDflW);
addFonD("dev_dflR",IF_devDflR);
addFonD("?i2c",IF_listI2C);
+ addFonP("_?i2c",IFD_listI2C);
addFonD("i2c_info",IF_showI2C);
+ addFonP("_i2c_info",IFD_showI2C);
addFonD("i2c_read",IF_I2CRead);
addFonD("i2c_write",IF_I2CWrite);
addFonN("?n",IF_netList);
+ addFonP("_?n",IFD_netList);
addFonN("netOn",IF_netOn);
addFonN("netOff",IF_netOff);
addFonN("netDt>",IF_netDt);
@@ -535,12 +552,22 @@ void initLib(void)
addFonN("NetErr",IF_NetErrVal);
addFonN("Me",IF_Me);
addFonN("?ns",IF_netStackList);
+ addFonP("_?ns",IFD_netStackList);
addFonN(">net",IF_netU2S);
addFonN("net>",IF_netS2U);
addFonN("ndrop",IF_netDropS);
/* triList(); */
}
+int fctExists(char * L)
+{
+int i;
+ for (i=0;i\n");
}
+void IFD_netList (void)
+{
+ _IFD_BEGIN_
+ IF_netList();
+ _IFD_END_
+}
+
void IF_netStackList (void)
{
if (NET) {
@@ -943,7 +962,13 @@ void IF_netStackList (void)
readAff(Sock, NET_SLI+1);
close(Sock);
}
- /* printf("\n"); */
+}
+
+void IFD_netStackList (void)
+{
+ _IFD_BEGIN_
+ IF_netStackList();
+ _IFD_END_
}
void IF_netDropS (void)
diff --git a/src/net.h b/src/net.h
index 4798e5d..473f980 100644
--- a/src/net.h
+++ b/src/net.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -31,10 +31,12 @@ extern void IF_netOff(void);
extern void IF_netDt(void);
extern void IF_netDepth(void);
extern void IF_netList(void);
+extern void IFD_netList(void);
extern void IF_netStopS(void);
extern void IF_netDropS(void);
extern void IF_netRusage (void);
extern void IF_netStackList (void);
+extern void IFD_netStackList (void);
extern void IF_netU2S (void);
extern void IF_netS2U (void);
extern void IF_netExec (void);
diff --git a/src/nife.c b/src/nife.c
index e7b91fa..459f8a1 100644
--- a/src/nife.c
+++ b/src/nife.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -112,7 +112,7 @@ char Lib[8];
#ifdef _MULTI_THREADING_
strcpy(Lib,"mt-");
#endif
- printf("nife (Networking Industrial Forth-like Environment) - version %s%s-%ld/%ld\n\t (c) S.E.R.I.A.N.E. 2009-2014\n",Lib,VERSION,sizeof(long)*8,sizeof(double)*8);
+ printf("nife (Networking Industrial Forth-like Environment) - version %s%s-%ld/%ld\n\t (c) S.E.R.I.A.N.E. 2009-2015\n",Lib,VERSION,sizeof(long)*8,sizeof(double)*8);
}
int isSepa(char c, int m)
@@ -144,13 +144,32 @@ PFC tS;
return Err;
}
-static void traiteLigne(char *b)
+static void traiteLigne(char *b, int Ctx)
{
char *mot, *d, *f, *w;
+ /* case of sh command : ! */
+ if (*b=='!') {
+ runCommandT(b+1);
+ return;
+ }
d=b; f=b+strlen(d);
#ifdef DEBUG
printf("traiteLigne : <%s>\n",d);
#endif
+ switch(Ctx) {
+ case 1 : /* compileFile */
+ D_Trace(" #");
+ break;
+ case 2 : /* IF_ExecCS */
+ D_Trace("# ExecCS:");
+ break;
+ case 3 : /* makeFunction */
+ D_Trace("# makeFunction:");
+ break;
+ default : /* 0 */
+ if (getiFD()) D_Trace(" #");
+ }
+ D_Tracenl(b);
while (d0) traiteLigne(f);
+ if (strlen(f)>0) traiteLigne(f,2);
free((void*)f);
}
}
@@ -371,7 +390,7 @@ void * makeFunction(char * f)
void *M;
if ((M = malloc(strlen(f)+8)) == NULL) stopErr("makeFunction","malloc");
sprintf((char*)M,": _f %s ;",f);
- traiteLigne((char*)M);
+ traiteLigne((char*)M,3);
free(M);
if (noErr() == 0) {
M = fctByName("_f");
@@ -414,7 +433,7 @@ void IF_Load(void)
int main(int N, char *P[])
{
-int n;
+int n,Ctx;
char *dirW = ".nife";
if (N > 2) {
fprintf(stderr,"nife [nif-file]\n");
@@ -463,16 +482,18 @@ char *dirW = ".nife";
if ((FD_IN+iTERM) == 0) {
printf("> ");
fflush(stdout);
- }
+ Ctx=0;
+ } else Ctx=1;
razErr();
if ((n=lireLigne(FD_IN,bufP,bufP2,LBUF)) == -1)
printf("Line too long!\n");
else
- if (n>0) traiteLigne(bufP);
+ if (n>0) traiteLigne(bufP,0);
}
IF_delAllGP();
IF_netStopS();
IF_netOff();
+ D_Close();
termReset();
printf("Bye !\n");
return 0;
diff --git a/src/nife.h b/src/nife.h
index e55b974..375f8ee 100644
--- a/src/nife.h
+++ b/src/nife.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/src/scs.c b/src/scs.c
index 0dc04b2..a13a664 100644
--- a/src/scs.c
+++ b/src/scs.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/src/scs.h b/src/scs.h
index 03dc698..52a2a35 100644
--- a/src/scs.h
+++ b/src/scs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/src/stackC.c b/src/stackC.c
index 2c82fb0..6481828 100644
--- a/src/stackC.c
+++ b/src/stackC.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -24,6 +24,7 @@ along with this program. If not, see
#include "nife.h"
#include "mth.h"
#include "err.h"
+#include "debug.h"
#include "stackC.h"
#include "stackF.h"
@@ -212,6 +213,12 @@ char s;
} else printf("\n");
}
+void IFD_show_stackC(void)
+{
+ _IFD_BEGIN_
+ IF_show_stackC();
+ _IFD_END_
+}
void suiteString(char *S)
{
diff --git a/src/stackC.h b/src/stackC.h
index 914e615..c766242 100644
--- a/src/stackC.h
+++ b/src/stackC.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -33,6 +33,7 @@ extern void IF_typeC(void);
extern void IF_timeC(void);
extern void IF_dateC(void);
extern void IF_show_stackC(void);
+extern void IFD_show_stackC(void);
extern void IF_debString(void);
extern void dump_eltC(int fd, char*A);
diff --git a/src/stackF.c b/src/stackF.c
index 6914222..7116a08 100644
--- a/src/stackF.c
+++ b/src/stackF.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -24,6 +24,7 @@ along with this program. If not, see
#include "nife.h"
#include "mth.h"
#include "err.h"
+#include "debug.h"
#include "lib.h"
#include "stackF.h"
#include "stackN.h"
@@ -216,6 +217,39 @@ struct Fct *Elt;
return Elt;
}
+void replaceFctS(void)
+{
+void * Next, * Next2;
+struct Fct *Elt, *N, *N2;
+ if (stackF != VIDE) {
+ Elt = (struct Fct *)stackF;
+ if (Elt->n == VIDE) return;
+ Next = Elt->n;
+ N = (struct Fct*) Next;
+ if (N->typ) return;
+ stackF = Elt->n;
+ Elt->n = VIDE;
+ while (Next != VIDE) {
+ N = (struct Fct*) Next;
+ Next2 = N->n;
+ if (Next2==VIDE) {
+ N->n = (void*)Elt;
+ return;
+ } else {
+ N2 = (struct Fct*) Next2;
+ if (N2->typ) {
+ Elt->n = Next2;
+ N->n = (void*)Elt;
+ return;
+ }
+ }
+ Next = N->n;
+ }
+ }
+ else messErr(7);
+ return;
+}
+
void IF_show_stackF(void)
{
void * Next;
@@ -231,6 +265,13 @@ char Ctyp;
printf("\n");
}
+void IFD_show_stackF(void)
+{
+ _IFD_BEGIN_
+ IF_show_stackF();
+ _IFD_END_
+}
+
static char cod[MAXCODE];
static int i_cod;
/* pile pour IF ELSE THEN */
@@ -313,6 +354,7 @@ int i,l, *ea, *Ea;
if (F->typ) {
F->typ=2;
addFonU(F->l,M);
+ replaceFctS();
}
/* printf("Total Fct : %d + %d !\n",i_cod,(3*sizeof(int))); */
_MODIF_fctEnCours_(0);
@@ -477,10 +519,12 @@ char Lib[LDFLT+1];
i_adB = 0;
i_adD = 0;
}
+
static void newFct0(char * S)
{
newFct2(S,0);
}
+
static void newFct1(char * S)
{
newFct2(S,1);
@@ -565,6 +609,9 @@ struct Fct * FR;
} else {
printf("Called in %s err=%d i=%d/%d cod=<%x>\n",
codByAddr(A),noErr(),(int)(C-D),i,*C);
+ if (InDebugFct==0) fprintf(stderr,
+ "Called in %s err=%d i=%d/%d cod=<%x>\n",
+ codByAddr(A),noErr(),(int)(C-D),i,*C);
break; /* end of while */
}
}
@@ -1293,10 +1340,12 @@ void IF_delFct(void)
{
putTrSuite(rmFct);
}
+
void IF_delAFct(void)
{
putTrSuite(rmAFct);
}
+
void IF_delOFct(void)
{
putTrSuite(rmOFct);
diff --git a/src/stackF.h b/src/stackF.h
index 509d5ef..c8e8932 100644
--- a/src/stackF.h
+++ b/src/stackF.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -65,6 +65,7 @@ typedef unsigned char Code;
extern int D_Cod;
extern void IF_show_stackF(void);
+extern void IFD_show_stackF(void);
extern void IF_debFct(void);
extern void IF_debFctS(void);
extern void IF_finFct(void);
diff --git a/src/stackL.c b/src/stackL.c
index 218d274..092f227 100644
--- a/src/stackL.c
+++ b/src/stackL.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@ along with this program. If not, see
#include "nife.h"
#include "mth.h"
#include "err.h"
+#include "debug.h"
#include "stackL.h"
@@ -178,6 +179,12 @@ char s;
} else printf("\n");
}
+void IFD_show_stackL(void)
+{
+ _IFD_BEGIN_
+ IF_show_stackL();
+ _IFD_END_
+}
void dump_stackL(int fd)
{
diff --git a/src/stackL.h b/src/stackL.h
index addf4b0..8c3601e 100644
--- a/src/stackL.h
+++ b/src/stackL.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -36,6 +36,7 @@ extern void IF_xorL(void);
extern void IF_true(void);
extern void IF_false(void);
extern void IF_show_stackL(void);
+extern void IFD_show_stackL(void);
extern void dump_stackL(int fd);
extern void restore_stackL(int fd);
diff --git a/src/stackN.c b/src/stackN.c
index 2a3e93a..3b06486 100644
--- a/src/stackN.c
+++ b/src/stackN.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -89,6 +89,13 @@ char * L;
printf("\nNBTAB=%d\nNBLIG=%d\n",NBTAB,NBLIG);
}
+void IFD_vars(void)
+{
+ _IFD_BEGIN_
+ IF_vars();
+ _IFD_END_
+}
+
void IF_REAL(void) { _MODIF_DOUBLE_(1); }
void IF_INTEGER(void) { _MODIF_DOUBLE_(0); }
@@ -452,6 +459,13 @@ char s;
}
}
+void IFD_show_stack(void)
+{
+ _IFD_BEGIN_
+ IF_show_stack();
+ _IFD_END_
+}
+
void IF_point(void)
{
struct Num *Elt;
diff --git a/src/stackN.h b/src/stackN.h
index 790d2ca..82c87af 100644
--- a/src/stackN.h
+++ b/src/stackN.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -37,6 +37,7 @@ extern void printNumber(void * N);
extern void numVarOff(void * N);
extern void * duplicateNum(void * S, int vSoff);
extern void IF_show_stack(void);
+extern void IFD_show_stack(void);
extern void IF_ramp(void);
extern void IF_dramp(void);
extern void IF_DEC(void);
@@ -53,6 +54,7 @@ extern void IF_VAROFF(void);
extern void IF_VARUP(void);
extern void IF_VARDOWN(void);
extern void IF_vars(void);
+extern void IFD_vars(void);
extern void IF_point(void);
extern void IF_swap(void);
extern void IF_dup(void);
diff --git a/src/stackV.c b/src/stackV.c
index d5982dc..2a869c1 100644
--- a/src/stackV.c
+++ b/src/stackV.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -24,6 +24,7 @@ along with this program. If not, see
#include "nife.h"
#include "mth.h"
#include "err.h"
+#include "debug.h"
#include "lib.h"
#include "stackV.h"
#include "stackF.h"
@@ -163,6 +164,13 @@ struct Var * N;
printf("\n");
}
+void IFD_show_stackV(void)
+{
+ _IFD_BEGIN_
+ IF_show_stackV();
+ _IFD_END_
+}
+
static void newVar(char * S)
{
char Lib[LDFLT+1];
diff --git a/src/stackV.h b/src/stackV.h
index f6dd47d..a323d4d 100644
--- a/src/stackV.h
+++ b/src/stackV.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@ along with this program. If not, see
extern void IF_debVar(void);
extern void IF_debVarCS(void);
extern void IF_show_stackV(void);
+extern void IFD_show_stackV(void);
extern void IF_delVar(void);
extern void dump_stackV(int fd);
extern void restore_stackV(int fd);
diff --git a/src/tasks.c b/src/tasks.c
index 7ae0095..9b4fd46 100644
--- a/src/tasks.c
+++ b/src/tasks.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,6 +18,7 @@ along with this program. If not, see
#include
#include
+#include
#include
#include
#include
@@ -31,6 +32,7 @@ along with this program. If not, see
#include "nife.h"
#include "mth.h"
#include "err.h"
+#include "debug.h"
#include "tasks.h"
#include "foncs.h"
#include "histo.h"
@@ -64,15 +66,18 @@ static char * FicCons(int t)
int MakeTask (void * A)
{
-int i, pid;
-char * NF;
+int i, n, pid;
+char * NF, buf[50];
i = FctInTask-1;
if ((pid = fork()) == -1) stopErr("IF_NewTask","fork");
if (pid == 0) { /* fils */
- ITASK=FctInTask; /* TASK 0 is the interractive */
+ ITASK=FctInTask; /* TASK 0 is the interractive one */
NF = FicCons(ITASK);
+ n = i+1;
if ((i=open(NF,O_CREAT|O_RDWR|O_TRUNC,0600)) < 0) perror(NF);
else {
+ sprintf(buf,"Task #%d console :\n",n);
+ write(i,buf,strlen(buf));
dup2(i,1);
dup2(i,2);
close(i);
@@ -101,6 +106,13 @@ int i;
printf("\n");
}
+void IFD_show_Tasks(void)
+{
+ _IFD_BEGIN_
+ IF_show_Tasks();
+ _IFD_END_
+}
+
void IF_statusTask(void)
{
long V;
@@ -148,7 +160,7 @@ int i;
}
}
-void IF_showCons( void)
+void IF_showCons(void)
{
long V;
int i;
@@ -164,4 +176,10 @@ char * NF, comm[30];
}
}
+void IFD_showCons(void)
+{
+ _IFD_BEGIN_
+ IF_showCons();
+ _IFD_END_
+}
diff --git a/src/tasks.h b/src/tasks.h
index 7f3e251..ec0c23d 100644
--- a/src/tasks.h
+++ b/src/tasks.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2014 Patrick H. E. Foubet - S.E.R.I.A.N.E.
+/* Copyright (C) 2011-2015 Patrick H. E. Foubet - S.E.R.I.A.N.E.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -22,10 +22,12 @@ extern int ITASK;
extern void IF_NewTask(void);
extern void IF_show_Tasks(void);
+extern void IFD_show_Tasks(void);
extern void IF_statusTask(void);
extern void IF_stopTask(void);
extern void IF_delTask(void);
extern void IF_showCons(void);
+extern void IFD_showCons(void);
extern int MakeTask(void * A);