@@ -1,5 +1,27 @@ | |||||
History of Nife releases : | 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. | 2014-08-31 - Nife 0.51 is released. | ||||
* Finalising the version 1.0 of the functions dump and restore with the | * Finalising the version 1.0 of the functions dump and restore with the | ||||
definition of the NBLF, Nife Binary Linkable Format. | definition of the NBLF, Nife Binary Linkable Format. | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#ifdef HAVE_CONFIG_H | #ifdef HAVE_CONFIG_H | ||||
#include "../config.h" | #include "../config.h" | ||||
#else | #else | ||||
#define VERSION "0.51" | |||||
#define VERSION "0.55" | |||||
#endif | #endif | ||||
#ifdef HAVE_COMEDILIB_H | #ifdef HAVE_COMEDILIB_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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -26,27 +26,77 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#include "nife.h" | #include "nife.h" | ||||
#include "mth.h" | #include "mth.h" | ||||
#include "foncs.h" | |||||
#include "debug.h" | #include "debug.h" | ||||
#include "stackC.h" | |||||
int Debug=1; /* OK by default */ | 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) | void D_Reset(void) | ||||
{ | { | ||||
int fd, nc; | int fd, nc; | ||||
char NF[24]; | char NF[24]; | ||||
nc=chdir(".nife"); | |||||
if (Debug) { | 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); | if ((fd=open(NF,O_CREAT|O_RDWR|O_TRUNC,0644)) < 0) perror(NF); | ||||
else { | else { | ||||
dup2(fd,2); | dup2(fd,2); | ||||
close(fd); | close(fd); | ||||
} | } | ||||
nc=chdir(".."); | |||||
} else dup2(1,2); | } 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; | if (Debug) Debug=0; | ||||
else Debug=1; | else Debug=1; | ||||
@@ -56,7 +106,39 @@ void D_Update(void) | |||||
void D_Trace(char * M) | void D_Trace(char * M) | ||||
{ | { | ||||
if (Debug) { | 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<l;i++) fprintf(stderr," %x",(int)((unsigned char)M[i])); | |||||
fprintf(stderr,"\n"); | |||||
fflush(stderr); | fflush(stderr); | ||||
} | } | ||||
} | } | ||||
@@ -65,18 +147,18 @@ static char D_Mes[20]; | |||||
void * Malloc(int s) | void * Malloc(int s) | ||||
{ | { | ||||
void * M; | void * M; | ||||
D_Trace("\n"); | |||||
D_Tracenl("EOL"); | |||||
M=malloc(s); | M=malloc(s); | ||||
sprintf(D_Mes,"Malloc %d : %lx\n",s,(long)M); | |||||
D_Trace(D_Mes); | |||||
sprintf(D_Mes,"Malloc %d : %lx",s,(long)M); | |||||
D_Tracenl(D_Mes); | |||||
return M; | return M; | ||||
} | } | ||||
void Free(void *A) | void Free(void *A) | ||||
{ | { | ||||
D_Trace("\n"); | |||||
sprintf(D_Mes,"Free : %lx\n",(long)A); | |||||
D_Trace(D_Mes); | |||||
D_Tracenl("EOL"); | |||||
sprintf(D_Mes,"Free : %lx",(long)A); | |||||
D_Tracenl(D_Mes); | |||||
free(A); | free(A); | ||||
} | } | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -18,10 +18,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#ifndef __NIFE_DEBUG_H__ | #ifndef __NIFE_DEBUG_H__ | ||||
#define __NIFE_DEBUG_H__ | #define __NIFE_DEBUG_H__ | ||||
extern int Debug; | 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_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_Trace(char * M); | ||||
extern void D_Tracenl(char * M); | |||||
extern void D_TraceH(char * M, int l); | |||||
extern void * Malloc(int s); | extern void * Malloc(int s); | ||||
extern void Free(void * A); | extern void Free(void * A); | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -25,6 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#include <stdio.h> | #include <stdio.h> | ||||
#include <string.h> | #include <string.h> | ||||
#include "debug.h" | |||||
static int DFL_did=0, DFL_sid=0, DFL_cid=0; | static int DFL_did=0, DFL_sid=0, DFL_cid=0; | ||||
#ifdef _WITH_COMEDILIB | #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 | #ifdef _WITH_COMEDILIB | ||||
static void show_subdev(int i, int V) | static void show_subdev(int i, int V) | ||||
{ | { | ||||
@@ -227,6 +235,13 @@ int i, n_subdev; | |||||
#endif | #endif | ||||
} | } | ||||
void IFD_showDev (void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_showDev(); | |||||
_IFD_END_ | |||||
} | |||||
void IF_devShowDflt (void) | void IF_devShowDflt (void) | ||||
{ | { | ||||
#ifdef _WITH_COMEDILIB | #ifdef _WITH_COMEDILIB | ||||
@@ -246,6 +261,13 @@ int n_subdev; | |||||
#endif | #endif | ||||
} | } | ||||
void IFD_devShowDflt (void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_devShowDflt(); | |||||
_IFD_END_ | |||||
} | |||||
static void dev_read(int did, int sid, int cid) | static void dev_read(int did, int sid, int cid) | ||||
{ | { | ||||
#ifdef _WITH_COMEDILIB | #ifdef _WITH_COMEDILIB | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -19,11 +19,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#define __NIFE_DEV_H__ | #define __NIFE_DEV_H__ | ||||
extern void IF_listDev (void); | extern void IF_listDev (void); | ||||
extern void IFD_listDev (void); | |||||
extern void IF_showDev (void); | extern void IF_showDev (void); | ||||
extern void IFD_showDev (void); | |||||
extern void IF_devRead (void); | extern void IF_devRead (void); | ||||
extern void IF_devWrite (void); | extern void IF_devWrite (void); | ||||
extern void IF_devDflt (void); | extern void IF_devDflt (void); | ||||
extern void IF_devShowDflt (void); | extern void IF_devShowDflt (void); | ||||
extern void IFD_devShowDflt (void); | |||||
extern void IF_devDflW (void); | extern void IF_devDflW (void); | ||||
extern void IF_devDflR (void); | extern void IF_devDflR (void); | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -23,6 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#include "nife.h" | #include "nife.h" | ||||
#include "mth.h" | #include "mth.h" | ||||
#include "err.h" | #include "err.h" | ||||
#include "debug.h" | |||||
#include "histo.h" | #include "histo.h" | ||||
#include "stackF.h" | #include "stackF.h" | ||||
#include "stackN.h" | #include "stackN.h" | ||||
@@ -132,29 +133,39 @@ void stopErr(char *M, char *F) | |||||
exit(1); | exit(1); | ||||
} | } | ||||
static ErrPrintf(char *M) | |||||
{ | |||||
printf(M); | |||||
if (InDebugFct==0) fprintf(stderr,M); | |||||
} | |||||
static void traiteErr(int n, char * L) | static void traiteErr(int n, char * L) | ||||
{ | { | ||||
int v; | int v; | ||||
ERROR=n; | ERROR=n; | ||||
if (D_Cod==0) { | if (D_Cod==0) { | ||||
if (ECHOOFF) printf("\n"); | if (ECHOOFF) printf("\n"); | ||||
/* if (InDebugFct==0) fprintf(stderr,"\n"); A VOIR ! */ | |||||
printf("%s : %s !!\a\n",L,TabErr[n]); | 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 (inSonProc) exit(1); | ||||
if (fctEnCours) { | if (fctEnCours) { | ||||
if (D_Cod==0) printf("Compilation aborted !\n"); | |||||
if (D_Cod==0) ErrPrintf("Compilation aborted !\n"); | |||||
else | else | ||||
if (ADDRONE == VIDE) printf("Inside compilation aborted !\n"); | |||||
if (ADDRONE == VIDE) ErrPrintf("Inside compilation aborted !\n"); | |||||
_MODIF_fctEnCours_(0); | _MODIF_fctEnCours_(0); | ||||
rmLastFct(); | rmLastFct(); | ||||
} | } | ||||
if (ADDRONE != VIDE) return; | if (ADDRONE != VIDE) return; | ||||
if (FD_IN) { | if (FD_IN) { | ||||
printf("In loading file %s : line %d !\n", getFDname(),getFDlig()); | 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(); | closeFD(); | ||||
} | } | ||||
if (iTERM) { | if (iTERM) { | ||||
printf("In loading stdin : line %d !\n", getFDlig()); | 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 */ | close(FD_IN); /* pipe ou autre */ | ||||
v = dup(iTERM); /* stdin on term */ | v = dup(iTERM); /* stdin on term */ | ||||
iTERM = 0; | iTERM = 0; | ||||
@@ -183,8 +194,7 @@ void IF_NoError(void) | |||||
void IF_LibError(void) | void IF_LibError(void) | ||||
{ | { | ||||
long P; | long P; | ||||
getParLong(&P); | |||||
putString(TabErr[(int)P]); | |||||
if (getParLong(&P)) putString(TabErr[(int)P]); | |||||
} | } | ||||
void IF_IsError(void) | void IF_IsError(void) | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -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 | |||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -30,6 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#include "nife.h" | #include "nife.h" | ||||
#include "mth.h" | #include "mth.h" | ||||
#include "err.h" | #include "err.h" | ||||
#include "debug.h" | |||||
#include "foncs.h" | #include "foncs.h" | ||||
#include "histo.h" | #include "histo.h" | ||||
#include "stackN.h" | #include "stackN.h" | ||||
@@ -91,7 +92,6 @@ char * Sh; | |||||
if ((pid = fork()) == -1) stopErr("runComm","fork"); | if ((pid = fork()) == -1) stopErr("runComm","fork"); | ||||
if (pid == 0) { /* fils */ | if (pid == 0) { /* fils */ | ||||
_MODIF_inSonProc_(1); | _MODIF_inSonProc_(1); | ||||
termReset(); | |||||
if ((Sh=getenv("SHELL")) == NULL) execlp("sh","sh","-c",com,NULL); | if ((Sh=getenv("SHELL")) == NULL) execlp("sh","sh","-c",com,NULL); | ||||
else execlp(Sh,"sh","-c",com,NULL); | else execlp(Sh,"sh","-c",com,NULL); | ||||
perror("sh"); | perror("sh"); | ||||
@@ -99,8 +99,12 @@ char * Sh; | |||||
} | } | ||||
waitpid(pid,NULL,0); | waitpid(pid,NULL,0); | ||||
_MODIF_WAITPID_(0); | _MODIF_WAITPID_(0); | ||||
termInit(); | |||||
printf("\n"); | |||||
} | |||||
void runCommandT (char * com) | |||||
{ | |||||
D_Trace("$"); D_Tracenl(com); | |||||
runCommand(com); | |||||
} | } | ||||
void IF_toCsv(void) | void IF_toCsv(void) | ||||
@@ -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 | 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 | 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 IF_resUsage(void); | ||||
extern void runCommand( char * C); | extern void runCommand( char * C); | ||||
extern void runCommandT( char * C); | |||||
#endif | #endif |
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -30,6 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#include "stackN.h" | #include "stackN.h" | ||||
#include "stackC.h" | #include "stackC.h" | ||||
#include "err.h" | #include "err.h" | ||||
#include "debug.h" | |||||
#define GPO_STD 0 /* standard */ | #define GPO_STD 0 /* standard */ | ||||
#define GPO_MRG 0x100 /* merge */ | #define GPO_MRG 0x100 /* merge */ | ||||
@@ -365,6 +366,11 @@ struct GPlot * N; | |||||
printf("<end of GNUPlot list>\n"); | printf("<end of GNUPlot list>\n"); | ||||
} | } | ||||
void IFD_show_stackGP(void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_show_stackGP(); | |||||
_IFD_END_ | |||||
} | |||||
@@ -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 | 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 | 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_append(void); | ||||
extern void IF_gplot_replace(void); | extern void IF_gplot_replace(void); | ||||
extern void IF_show_stackGP(void); | extern void IF_show_stackGP(void); | ||||
extern void IFD_show_stackGP(void); | |||||
#endif | #endif |
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -19,6 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#include "help.h" | #include "help.h" | ||||
#include "nife.h" | #include "nife.h" | ||||
#include "lib.h" | |||||
#include "mth.h" | |||||
#define LHLP 200 /* longueur MAX des lignes du fichier hlp */ | #define LHLP 200 /* longueur MAX des lignes du fichier hlp */ | ||||
static char buf[LHLP]; | static char buf[LHLP]; | ||||
@@ -59,6 +61,15 @@ int debut=0,l; | |||||
void helpStd(char * L) | void helpStd(char * L) | ||||
{ | { | ||||
dropTrSuite(); | 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); | helpShow(L); | ||||
} | } | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -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 | 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 | 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); | else _MODIF_FD_IN_(0); | ||||
} | } | ||||
int getiFD(void) | |||||
{ | |||||
return iFD; | |||||
} | |||||
int getFDlig(void) | int getFDlig(void) | ||||
{ | { | ||||
return FD_L[iFD]; | 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; | char *d, *f, c, c2, c3, *h, *w, *Wl, *rac; | ||||
int n, i, l, ls=0, ins=0, ignTild=0, nbT=0, Nc; | int n, i, l, ls=0, ins=0, ignTild=0, nbT=0, Nc; | ||||
unsigned int j; | unsigned int j; | ||||
char bufd[50]; | |||||
/* printf("lireLigne ... \n"); */ | /* printf("lireLigne ... \n"); */ | ||||
d = b; | d = b; | ||||
f = b+nc; | f = b+nc; | ||||
@@ -333,7 +339,7 @@ unsigned int j; | |||||
ignTild=1; | ignTild=1; | ||||
Nc=read(fd,&c2,1); | Nc=read(fd,&c2,1); | ||||
Nc=read(fd,&c3,1); | Nc=read(fd,&c3,1); | ||||
if (c2 == '[') { | |||||
if (c2 == '[') { /* CSI - see XTerm Control Sequences */ | |||||
switch(c3) { | switch(c3) { | ||||
case '2' : /* Insert */ | case '2' : /* Insert */ | ||||
if (ins) { | if (ins) { | ||||
@@ -350,8 +356,8 @@ unsigned int j; | |||||
fflush(stdout); | fflush(stdout); | ||||
} | } | ||||
break; | break; | ||||
case 'A' : | |||||
case 'B' : | |||||
case 'A' : /* UpArrow */ | |||||
case 'B' : /* DownArrow */ | |||||
ins = 0; | ins = 0; | ||||
/* efface la ligne en cours */ | /* efface la ligne en cours */ | ||||
l=d-b; | l=d-b; | ||||
@@ -395,14 +401,24 @@ unsigned int j; | |||||
fflush(stdout); | fflush(stdout); | ||||
} | } | ||||
break; | 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: | default: | ||||
printf("\nESC [ %d (%c) !\n",(int)c3, c3); | |||||
sprintf(bufd,"# ignore : ESC [ %d (%c) !",(int)c3, c3); | |||||
D_Tracenl(bufd); | |||||
*d='\0'; | *d='\0'; | ||||
/* ************** | |||||
printf("> %s",b); | printf("> %s",b); | ||||
fflush(stdout); | |||||
fflush(stdout); */ | |||||
} | } | ||||
} else { | } else { | ||||
if (c2 == 'O') { | |||||
if (c2 == 'O') { /* SS3 - see XTerm Control Sequences */ | |||||
switch(c3) { | switch(c3) { | ||||
case 'P' : /* F1 */ | case 'P' : /* F1 */ | ||||
break; | break; | ||||
@@ -412,12 +428,20 @@ unsigned int j; | |||||
break; | break; | ||||
case 'S' : /* F4 */ | case 'S' : /* F4 */ | ||||
break; | break; | ||||
case 'H' : /* home : debug terms ON */ | |||||
IFD_DebugTOn(); | |||||
break; | |||||
case 'F' : /* end : debug terms OFF */ | |||||
IFD_DebugTOff(); | |||||
break; | |||||
} | } | ||||
} else { | } 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'; | *d='\0'; | ||||
/* ************** | |||||
printf("> %s",b); | printf("> %s",b); | ||||
fflush(stdout); | |||||
fflush(stdout); */ | |||||
} | } | ||||
} | } | ||||
break; | break; | ||||
@@ -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 | 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 | 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 IF_showFD(void); | ||||
extern void addFD(int fd, char *N); | extern void addFD(int fd, char *N); | ||||
extern void closeFD(void); | extern void closeFD(void); | ||||
extern int getiFD(void); | |||||
extern int getFDlig(void); | extern int getFDlig(void); | ||||
extern char * getFDname(void); | extern char * getFDname(void); | ||||
extern int lireLigne(int fd, char * buf, char * buf2, int max); | extern int lireLigne(int fd, char * buf, char * buf2, int max); | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -237,6 +237,7 @@ unsigned long funcs; | |||||
#include "stackN.h" | #include "stackN.h" | ||||
#include "i2c.h" | #include "i2c.h" | ||||
#include "err.h" | #include "err.h" | ||||
#include "debug.h" | |||||
void IF_listI2C (void) | void IF_listI2C (void) | ||||
{ | { | ||||
@@ -247,6 +248,13 @@ void IF_listI2C (void) | |||||
#endif | #endif | ||||
} | } | ||||
void IFD_listI2C (void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_listI2C(); | |||||
_IFD_END_ | |||||
} | |||||
void IF_showI2C (void) | void IF_showI2C (void) | ||||
{ | { | ||||
long n; | long n; | ||||
@@ -275,6 +283,13 @@ char Bus[10], filename[20]; | |||||
#endif | #endif | ||||
} | } | ||||
void IFD_showI2C (void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_showI2C(); | |||||
_IFD_END_ | |||||
} | |||||
static void i2c_read(int id, int add, int off) | static void i2c_read(int id, int add, int off) | ||||
{ | { | ||||
#ifdef _WITH_I2C | #ifdef _WITH_I2C | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -19,7 +19,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#define __NIFE_I2C_H__ | #define __NIFE_I2C_H__ | ||||
extern void IF_listI2C (void); | extern void IF_listI2C (void); | ||||
extern void IFD_listI2C (void); | |||||
extern void IF_showI2C (void); | extern void IF_showI2C (void); | ||||
extern void IFD_showI2C (void); | |||||
extern void IF_I2CRead (void); | extern void IF_I2CRead (void); | ||||
extern void IF_I2CWrite (void); | extern void IF_I2CWrite (void); | ||||
@@ -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 | 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 | 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("del_ofunc",IF_delOFct, F_PROG); | ||||
addFonE("fscan",IF_scanFct, F_PROG); | addFonE("fscan",IF_scanFct, F_PROG); | ||||
addFonc("?cs",IF_show_stackC); | addFonc("?cs",IF_show_stackC); | ||||
addFonP("_?cs",IFD_show_stackC); | |||||
addFonP("?f",IF_show_stackF); | 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",IF_show_stackV); | ||||
addFonP("_?v",IFD_show_stackV); | |||||
addFonE("del_var",IF_delVar,F_PROG); | addFonE("del_var",IF_delVar,F_PROG); | ||||
addFonP("vdrop",rmLastVar); | addFonP("vdrop",rmLastVar); | ||||
addFonP("reset_var",IF_setVarI); | addFonP("reset_var",IF_setVarI); | ||||
@@ -363,8 +366,10 @@ void initLib(void) | |||||
addFonP("df_stop",IF_DF_STOP); | addFonP("df_stop",IF_DF_STOP); | ||||
****************/ | ****************/ | ||||
addFonc("?ls",IF_show_stackL); | addFonc("?ls",IF_show_stackL); | ||||
addFonP("_?ls",IFD_show_stackL); | |||||
addFonc("?s",IF_show_stack); | 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("?libs",IF_show_liball); | ||||
addFonc("?lib",IF_show_libstd); | addFonc("?lib",IF_show_libstd); | ||||
addFonc("?libM",IF_show_libmath); | addFonc("?libM",IF_show_libmath); | ||||
@@ -387,7 +392,9 @@ void initLib(void) | |||||
addFonc("BIN",IF_BIN); | addFonc("BIN",IF_BIN); | ||||
addFonc("echo_on",IF_ECHOON); | addFonc("echo_on",IF_ECHOON); | ||||
addFonc("echo_off",IF_ECHOFF); | 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("NBTAB",IF_NBTAB); | ||||
addFonc("NBLIG",IF_NBLIG); | addFonc("NBLIG",IF_NBLIG); | ||||
addFonE("Var",IF_debVar, F_PROG); | addFonE("Var",IF_debVar, F_PROG); | ||||
@@ -396,6 +403,7 @@ void initLib(void) | |||||
addFonP("var_up",IF_VARUP); | addFonP("var_up",IF_VARUP); | ||||
addFonP("var_down",IF_VARDOWN); | addFonP("var_down",IF_VARDOWN); | ||||
addFonc("?vars",IF_vars); | addFonc("?vars",IF_vars); | ||||
addFonP("_?vars",IFD_vars); | |||||
addFonc("drop",IF_drop); | addFonc("drop",IF_drop); | ||||
addFonc("dup",IF_dup); | addFonc("dup",IF_dup); | ||||
addFonc("swap",IF_swap); | addFonc("swap",IF_swap); | ||||
@@ -460,6 +468,7 @@ void initLib(void) | |||||
addFonG("xy_xgraph",IF_xyXgraph); | addFonG("xy_xgraph",IF_xyXgraph); | ||||
addFonG("xyt_xgraph",IF_xytXgraph); | addFonG("xyt_xgraph",IF_xytXgraph); | ||||
addFonG("?gp",IF_show_stackGP); | addFonG("?gp",IF_show_stackGP); | ||||
addFonP("_?gp",IFD_show_stackGP); | |||||
addFonG("gplot",IF_gplot_new); | addFonG("gplot",IF_gplot_new); | ||||
addFonG("gplotM",IF_gplot_newM); | addFonG("gplotM",IF_gplot_newM); | ||||
addFonG("gplotRaz",IF_delAllGP); | addFonG("gplotRaz",IF_delAllGP); | ||||
@@ -472,6 +481,7 @@ void initLib(void) | |||||
addFonP(":!",IF_debFctS); | addFonP(":!",IF_debFctS); | ||||
addFonP("Task",IF_NewTask); | addFonP("Task",IF_NewTask); | ||||
addFonP("?t",IF_show_Tasks); | addFonP("?t",IF_show_Tasks); | ||||
addFonP("_?t",IFD_show_Tasks); | |||||
addFonP("?task_run",IF_statusTask); | addFonP("?task_run",IF_statusTask); | ||||
addFonP("del_task",IF_delTask); | addFonP("del_task",IF_delTask); | ||||
addFonP("\"f",IF_execCS); | addFonP("\"f",IF_execCS); | ||||
@@ -480,6 +490,7 @@ void initLib(void) | |||||
addFonP("\"v?",IF_execCSvl); | addFonP("\"v?",IF_execCSvl); | ||||
addFonP("stop_task",IF_stopTask); | addFonP("stop_task",IF_stopTask); | ||||
addFonP("?console",IF_showCons); | addFonP("?console",IF_showCons); | ||||
addFonP("_?console",IFD_showCons); | |||||
addInst(";",IF_finFct); | addInst(";",IF_finFct); | ||||
addInst("'",IF_debBackC); | addInst("'",IF_debBackC); | ||||
addInst("`",IF_debBackC1); | addInst("`",IF_debBackC1); | ||||
@@ -496,7 +507,7 @@ void initLib(void) | |||||
addFonc("do_leave",IF_DO_Leave); | addFonc("do_leave",IF_DO_Leave); | ||||
addFonc("*do_leave",IF_DO_MLeave); | addFonc("*do_leave",IF_DO_MLeave); | ||||
addFonc("do_next",IF_DO_Next); | 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); | addFonc("ndo",IF_nDO); | ||||
addInst("loop",IF_LOOP); | addInst("loop",IF_LOOP); | ||||
addInst("+loop",IF_PLOOP); | addInst("+loop",IF_PLOOP); | ||||
@@ -510,18 +521,24 @@ void initLib(void) | |||||
addInst("goto_end",IF_JEND); | addInst("goto_end",IF_JEND); | ||||
addFonE("help",IF_help, F_CORE); | addFonE("help",IF_help, F_CORE); | ||||
addFonD("?dev",IF_listDev); | addFonD("?dev",IF_listDev); | ||||
addFonP("_?dev",IFD_listDev); | |||||
addFonD("dev_info",IF_showDev); | addFonD("dev_info",IF_showDev); | ||||
addFonP("_dev_info",IFD_showDev); | |||||
addFonD("dev_read",IF_devRead); | addFonD("dev_read",IF_devRead); | ||||
addFonD("dev_write",IF_devWrite); | addFonD("dev_write",IF_devWrite); | ||||
addFonD("dev_dflt",IF_devDflt); | addFonD("dev_dflt",IF_devDflt); | ||||
addFonD("?dev_dflt",IF_devShowDflt); | addFonD("?dev_dflt",IF_devShowDflt); | ||||
addFonP("_?dev_dflt",IFD_devShowDflt); | |||||
addFonD("dev_dflW",IF_devDflW); | addFonD("dev_dflW",IF_devDflW); | ||||
addFonD("dev_dflR",IF_devDflR); | addFonD("dev_dflR",IF_devDflR); | ||||
addFonD("?i2c",IF_listI2C); | addFonD("?i2c",IF_listI2C); | ||||
addFonP("_?i2c",IFD_listI2C); | |||||
addFonD("i2c_info",IF_showI2C); | addFonD("i2c_info",IF_showI2C); | ||||
addFonP("_i2c_info",IFD_showI2C); | |||||
addFonD("i2c_read",IF_I2CRead); | addFonD("i2c_read",IF_I2CRead); | ||||
addFonD("i2c_write",IF_I2CWrite); | addFonD("i2c_write",IF_I2CWrite); | ||||
addFonN("?n",IF_netList); | addFonN("?n",IF_netList); | ||||
addFonP("_?n",IFD_netList); | |||||
addFonN("netOn",IF_netOn); | addFonN("netOn",IF_netOn); | ||||
addFonN("netOff",IF_netOff); | addFonN("netOff",IF_netOff); | ||||
addFonN("netDt>",IF_netDt); | addFonN("netDt>",IF_netDt); | ||||
@@ -535,12 +552,22 @@ void initLib(void) | |||||
addFonN("NetErr",IF_NetErrVal); | addFonN("NetErr",IF_NetErrVal); | ||||
addFonN("Me",IF_Me); | addFonN("Me",IF_Me); | ||||
addFonN("?ns",IF_netStackList); | addFonN("?ns",IF_netStackList); | ||||
addFonP("_?ns",IFD_netStackList); | |||||
addFonN(">net",IF_netU2S); | addFonN(">net",IF_netU2S); | ||||
addFonN("net>",IF_netS2U); | addFonN("net>",IF_netS2U); | ||||
addFonN("ndrop",IF_netDropS); | addFonN("ndrop",IF_netDropS); | ||||
/* triList(); */ | /* triList(); */ | ||||
} | } | ||||
int fctExists(char * L) | |||||
{ | |||||
int i; | |||||
for (i=0;i<NBFonc;i++) { | |||||
if (strcmp(L,Fonctions[i].nam) == 0) return 1; | |||||
} | |||||
return 0; | |||||
} | |||||
void * libByName(char * L) | void * libByName(char * L) | ||||
{ | { | ||||
int i; | int i; | ||||
@@ -552,6 +579,7 @@ int i; | |||||
} | } | ||||
return VIDE; | return VIDE; | ||||
} | } | ||||
void * libByInd(long i) | void * libByInd(long i) | ||||
{ | { | ||||
return((void*)Fonctions[i].fct); | return((void*)Fonctions[i].fct); | ||||
@@ -588,7 +616,7 @@ int i; | |||||
void * A; | void * A; | ||||
short T=0; | short T=0; | ||||
InExec = C; | InExec = C; | ||||
D_Trace(C); | |||||
/* D_Trace(C); pas pour le moment */ | |||||
if (sigsetjmp(ENV_INT,1)) { | if (sigsetjmp(ENV_INT,1)) { | ||||
interInfos("execLib",C); | interInfos("execLib",C); | ||||
return 1; | return 1; | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -24,6 +24,8 @@ extern int InstallOn; | |||||
extern void initLib(void); | extern void initLib(void); | ||||
extern int execLibNrpc(char * C); | extern int execLibNrpc(char * C); | ||||
extern int execLib(char * C); | extern int execLib(char * C); | ||||
extern int fctExists(char *); | |||||
extern void * libByName(char *); | |||||
extern void * libByInd(long i); | extern void * libByInd(long i); | ||||
extern char * libByAddr(void *A); | extern char * libByAddr(void *A); | ||||
extern long iLibByAddr(void *A); | extern long iLibByAddr(void *A); | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -447,10 +447,11 @@ uint32_t k; | |||||
char *sF, nF[30]; | char *sF, nF[30]; | ||||
i=readMess(s); | i=readMess(s); | ||||
NET_BUF[i]='\0'; | NET_BUF[i]='\0'; | ||||
/* D_Trace(NET_BUF); */ | |||||
D_TraceH(NET_BUF,i); /* to debug */ | |||||
switch(*NET_BUF) { | switch(*NET_BUF) { | ||||
case NET_OFF : | case NET_OFF : | ||||
send1car(s, NET_OFF+1); | send1car(s, NET_OFF+1); | ||||
D_Close(); | |||||
exit(0); /* stop the Nrpc client */ | exit(0); /* stop the Nrpc client */ | ||||
break; | break; | ||||
case NET_EXE : | case NET_EXE : | ||||
@@ -498,7 +499,7 @@ char c, *sN, *sF; | |||||
i=readMess(s); | i=readMess(s); | ||||
NET_BUF[i]='\0'; | NET_BUF[i]='\0'; | ||||
/* D_Trace(NET_BUF); */ | |||||
D_TraceH(NET_BUF,i); /* for debug */ | |||||
switch(*NET_BUF) { | switch(*NET_BUF) { | ||||
case NET_ONR : | case NET_ONR : | ||||
CalDT=1; | CalDT=1; | ||||
@@ -536,7 +537,10 @@ char c, *sN, *sF; | |||||
delCli(M1.pid, Sin.sin_addr); | delCli(M1.pid, Sin.sin_addr); | ||||
send1car(s, NET_OFF+1); | send1car(s, NET_OFF+1); | ||||
if (STS) { | if (STS) { | ||||
if (NCli == 0) exit(0); /* stop the server */ | |||||
if (NCli == 0) { | |||||
D_Close(); | |||||
exit(0); /* stop the server */ | |||||
} | |||||
STS=0; | STS=0; | ||||
} | } | ||||
break; | break; | ||||
@@ -683,13 +687,19 @@ static int connSock(void) | |||||
return 0; /* OK */ | return 0; /* OK */ | ||||
} | } | ||||
static void InterruptRpc(int S) | |||||
{ | |||||
D_Close(); | |||||
exit(0); | |||||
} | |||||
void main_Nrpc(void) /* main function for Nrpc client */ | void main_Nrpc(void) /* main function for Nrpc client */ | ||||
{ | { | ||||
int sock, nsock; | int sock, nsock; | ||||
socklen_t ln; | socklen_t ln; | ||||
struct sockaddr_in Nsin; | struct sockaddr_in Nsin; | ||||
signal(SIGTERM, SIG_DFL); | |||||
signal(SIGTERM, InterruptRpc); | |||||
if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) | if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) | ||||
stopServ(0, "socket",1); | stopServ(0, "socket",1); | ||||
bzero(&Nsin,sizeof(Nsin)); | bzero(&Nsin,sizeof(Nsin)); | ||||
@@ -725,6 +735,7 @@ static void startNrpc(void) | |||||
close(0); | close(0); | ||||
close(1); | close(1); | ||||
/* close(2); */ | /* close(2); */ | ||||
if (Debug) Debug=3; | |||||
D_Reset(); | D_Reset(); | ||||
IF_stack_clear(); /* clear all stacks */ | IF_stack_clear(); /* clear all stacks */ | ||||
IF_stackL_clear(); | IF_stackL_clear(); | ||||
@@ -763,6 +774,7 @@ int pid; | |||||
close(0); | close(0); | ||||
close(1); | close(1); | ||||
/* close(2); */ | /* close(2); */ | ||||
if (Debug) Debug=2; | |||||
D_Reset(); | D_Reset(); | ||||
close(Sock); | close(Sock); | ||||
IF_stack_clear(); /* clear all stacks */ | IF_stack_clear(); /* clear all stacks */ | ||||
@@ -933,6 +945,13 @@ void IF_netList (void) | |||||
printf("<end of net list>\n"); | printf("<end of net list>\n"); | ||||
} | } | ||||
void IFD_netList (void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_netList(); | |||||
_IFD_END_ | |||||
} | |||||
void IF_netStackList (void) | void IF_netStackList (void) | ||||
{ | { | ||||
if (NET) { | if (NET) { | ||||
@@ -943,7 +962,13 @@ void IF_netStackList (void) | |||||
readAff(Sock, NET_SLI+1); | readAff(Sock, NET_SLI+1); | ||||
close(Sock); | close(Sock); | ||||
} | } | ||||
/* printf("<end of net stack>\n"); */ | |||||
} | |||||
void IFD_netStackList (void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_netStackList(); | |||||
_IFD_END_ | |||||
} | } | ||||
void IF_netDropS (void) | void IF_netDropS (void) | ||||
@@ -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 | 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 | 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_netDt(void); | ||||
extern void IF_netDepth(void); | extern void IF_netDepth(void); | ||||
extern void IF_netList(void); | extern void IF_netList(void); | ||||
extern void IFD_netList(void); | |||||
extern void IF_netStopS(void); | extern void IF_netStopS(void); | ||||
extern void IF_netDropS(void); | extern void IF_netDropS(void); | ||||
extern void IF_netRusage (void); | extern void IF_netRusage (void); | ||||
extern void IF_netStackList (void); | extern void IF_netStackList (void); | ||||
extern void IFD_netStackList (void); | |||||
extern void IF_netU2S (void); | extern void IF_netU2S (void); | ||||
extern void IF_netS2U (void); | extern void IF_netS2U (void); | ||||
extern void IF_netExec (void); | extern void IF_netExec (void); | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -112,7 +112,7 @@ char Lib[8]; | |||||
#ifdef _MULTI_THREADING_ | #ifdef _MULTI_THREADING_ | ||||
strcpy(Lib,"mt-"); | strcpy(Lib,"mt-"); | ||||
#endif | #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) | int isSepa(char c, int m) | ||||
@@ -144,13 +144,32 @@ PFC tS; | |||||
return Err; | return Err; | ||||
} | } | ||||
static void traiteLigne(char *b) | |||||
static void traiteLigne(char *b, int Ctx) | |||||
{ | { | ||||
char *mot, *d, *f, *w; | char *mot, *d, *f, *w; | ||||
/* case of sh command : ! */ | |||||
if (*b=='!') { | |||||
runCommandT(b+1); | |||||
return; | |||||
} | |||||
d=b; f=b+strlen(d); | d=b; f=b+strlen(d); | ||||
#ifdef DEBUG | #ifdef DEBUG | ||||
printf("traiteLigne : <%s>\n",d); | printf("traiteLigne : <%s>\n",d); | ||||
#endif | #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 (d<f) { | while (d<f) { | ||||
if (noErr()) break; | if (noErr()) break; | ||||
/* recherche du 1er mot */ | /* recherche du 1er mot */ | ||||
@@ -199,7 +218,7 @@ int i=0; | |||||
printf("In file %s line %d !\n",f,i); | printf("In file %s line %d !\n",f,i); | ||||
break; | break; | ||||
} | } | ||||
traiteLigne(bufP); | |||||
traiteLigne(bufP,1); | |||||
i++; | i++; | ||||
} | } | ||||
fclose(F); | fclose(F); | ||||
@@ -361,7 +380,7 @@ void IF_ExecCS(void) | |||||
char * f; | char * f; | ||||
f = getString(); | f = getString(); | ||||
if (f != NULL) { | if (f != NULL) { | ||||
if (strlen(f)>0) traiteLigne(f); | |||||
if (strlen(f)>0) traiteLigne(f,2); | |||||
free((void*)f); | free((void*)f); | ||||
} | } | ||||
} | } | ||||
@@ -371,7 +390,7 @@ void * makeFunction(char * f) | |||||
void *M; | void *M; | ||||
if ((M = malloc(strlen(f)+8)) == NULL) stopErr("makeFunction","malloc"); | if ((M = malloc(strlen(f)+8)) == NULL) stopErr("makeFunction","malloc"); | ||||
sprintf((char*)M,": _f %s ;",f); | sprintf((char*)M,": _f %s ;",f); | ||||
traiteLigne((char*)M); | |||||
traiteLigne((char*)M,3); | |||||
free(M); | free(M); | ||||
if (noErr() == 0) { | if (noErr() == 0) { | ||||
M = fctByName("_f"); | M = fctByName("_f"); | ||||
@@ -414,7 +433,7 @@ void IF_Load(void) | |||||
int main(int N, char *P[]) | int main(int N, char *P[]) | ||||
{ | { | ||||
int n; | |||||
int n,Ctx; | |||||
char *dirW = ".nife"; | char *dirW = ".nife"; | ||||
if (N > 2) { | if (N > 2) { | ||||
fprintf(stderr,"nife [nif-file]\n"); | fprintf(stderr,"nife [nif-file]\n"); | ||||
@@ -463,16 +482,18 @@ char *dirW = ".nife"; | |||||
if ((FD_IN+iTERM) == 0) { | if ((FD_IN+iTERM) == 0) { | ||||
printf("> "); | printf("> "); | ||||
fflush(stdout); | fflush(stdout); | ||||
} | |||||
Ctx=0; | |||||
} else Ctx=1; | |||||
razErr(); | razErr(); | ||||
if ((n=lireLigne(FD_IN,bufP,bufP2,LBUF)) == -1) | if ((n=lireLigne(FD_IN,bufP,bufP2,LBUF)) == -1) | ||||
printf("Line too long!\n"); | printf("Line too long!\n"); | ||||
else | else | ||||
if (n>0) traiteLigne(bufP); | |||||
if (n>0) traiteLigne(bufP,0); | |||||
} | } | ||||
IF_delAllGP(); | IF_delAllGP(); | ||||
IF_netStopS(); | IF_netStopS(); | ||||
IF_netOff(); | IF_netOff(); | ||||
D_Close(); | |||||
termReset(); | termReset(); | ||||
printf("Bye !\n"); | printf("Bye !\n"); | ||||
return 0; | return 0; | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -24,6 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#include "nife.h" | #include "nife.h" | ||||
#include "mth.h" | #include "mth.h" | ||||
#include "err.h" | #include "err.h" | ||||
#include "debug.h" | |||||
#include "stackC.h" | #include "stackC.h" | ||||
#include "stackF.h" | #include "stackF.h" | ||||
@@ -212,6 +213,12 @@ char s; | |||||
} else printf("<end of character stack>\n"); | } else printf("<end of character stack>\n"); | ||||
} | } | ||||
void IFD_show_stackC(void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_show_stackC(); | |||||
_IFD_END_ | |||||
} | |||||
void suiteString(char *S) | void suiteString(char *S) | ||||
{ | { | ||||
@@ -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 | 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 | 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_timeC(void); | ||||
extern void IF_dateC(void); | extern void IF_dateC(void); | ||||
extern void IF_show_stackC(void); | extern void IF_show_stackC(void); | ||||
extern void IFD_show_stackC(void); | |||||
extern void IF_debString(void); | extern void IF_debString(void); | ||||
extern void dump_eltC(int fd, char*A); | extern void dump_eltC(int fd, char*A); | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -24,6 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#include "nife.h" | #include "nife.h" | ||||
#include "mth.h" | #include "mth.h" | ||||
#include "err.h" | #include "err.h" | ||||
#include "debug.h" | |||||
#include "lib.h" | #include "lib.h" | ||||
#include "stackF.h" | #include "stackF.h" | ||||
#include "stackN.h" | #include "stackN.h" | ||||
@@ -216,6 +217,39 @@ struct Fct *Elt; | |||||
return 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 IF_show_stackF(void) | ||||
{ | { | ||||
void * Next; | void * Next; | ||||
@@ -231,6 +265,13 @@ char Ctyp; | |||||
printf("<end of functions stack>\n"); | printf("<end of functions stack>\n"); | ||||
} | } | ||||
void IFD_show_stackF(void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_show_stackF(); | |||||
_IFD_END_ | |||||
} | |||||
static char cod[MAXCODE]; | static char cod[MAXCODE]; | ||||
static int i_cod; | static int i_cod; | ||||
/* pile pour IF ELSE THEN */ | /* pile pour IF ELSE THEN */ | ||||
@@ -313,6 +354,7 @@ int i,l, *ea, *Ea; | |||||
if (F->typ) { | if (F->typ) { | ||||
F->typ=2; | F->typ=2; | ||||
addFonU(F->l,M); | addFonU(F->l,M); | ||||
replaceFctS(); | |||||
} | } | ||||
/* printf("Total Fct : %d + %d !\n",i_cod,(3*sizeof(int))); */ | /* printf("Total Fct : %d + %d !\n",i_cod,(3*sizeof(int))); */ | ||||
_MODIF_fctEnCours_(0); | _MODIF_fctEnCours_(0); | ||||
@@ -477,10 +519,12 @@ char Lib[LDFLT+1]; | |||||
i_adB = 0; | i_adB = 0; | ||||
i_adD = 0; | i_adD = 0; | ||||
} | } | ||||
static void newFct0(char * S) | static void newFct0(char * S) | ||||
{ | { | ||||
newFct2(S,0); | newFct2(S,0); | ||||
} | } | ||||
static void newFct1(char * S) | static void newFct1(char * S) | ||||
{ | { | ||||
newFct2(S,1); | newFct2(S,1); | ||||
@@ -565,6 +609,9 @@ struct Fct * FR; | |||||
} else { | } else { | ||||
printf("Called in %s err=%d i=%d/%d cod=<%x>\n", | printf("Called in %s err=%d i=%d/%d cod=<%x>\n", | ||||
codByAddr(A),noErr(),(int)(C-D),i,*C); | 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 */ | break; /* end of while */ | ||||
} | } | ||||
} | } | ||||
@@ -1293,10 +1340,12 @@ void IF_delFct(void) | |||||
{ | { | ||||
putTrSuite(rmFct); | putTrSuite(rmFct); | ||||
} | } | ||||
void IF_delAFct(void) | void IF_delAFct(void) | ||||
{ | { | ||||
putTrSuite(rmAFct); | putTrSuite(rmAFct); | ||||
} | } | ||||
void IF_delOFct(void) | void IF_delOFct(void) | ||||
{ | { | ||||
putTrSuite(rmOFct); | putTrSuite(rmOFct); | ||||
@@ -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 | 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 | 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 int D_Cod; | ||||
extern void IF_show_stackF(void); | extern void IF_show_stackF(void); | ||||
extern void IFD_show_stackF(void); | |||||
extern void IF_debFct(void); | extern void IF_debFct(void); | ||||
extern void IF_debFctS(void); | extern void IF_debFctS(void); | ||||
extern void IF_finFct(void); | extern void IF_finFct(void); | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#include "nife.h" | #include "nife.h" | ||||
#include "mth.h" | #include "mth.h" | ||||
#include "err.h" | #include "err.h" | ||||
#include "debug.h" | |||||
#include "stackL.h" | #include "stackL.h" | ||||
@@ -178,6 +179,12 @@ char s; | |||||
} else printf("<end of logical stack>\n"); | } else printf("<end of logical stack>\n"); | ||||
} | } | ||||
void IFD_show_stackL(void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_show_stackL(); | |||||
_IFD_END_ | |||||
} | |||||
void dump_stackL(int fd) | void dump_stackL(int fd) | ||||
{ | { | ||||
@@ -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 | 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 | 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_true(void); | ||||
extern void IF_false(void); | extern void IF_false(void); | ||||
extern void IF_show_stackL(void); | extern void IF_show_stackL(void); | ||||
extern void IFD_show_stackL(void); | |||||
extern void dump_stackL(int fd); | extern void dump_stackL(int fd); | ||||
extern void restore_stackL(int fd); | extern void restore_stackL(int fd); | ||||
@@ -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 | 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 | 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); | 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_REAL(void) { _MODIF_DOUBLE_(1); } | ||||
void IF_INTEGER(void) { _MODIF_DOUBLE_(0); } | 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) | void IF_point(void) | ||||
{ | { | ||||
struct Num *Elt; | struct Num *Elt; | ||||
@@ -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 | 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 | 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 numVarOff(void * N); | ||||
extern void * duplicateNum(void * S, int vSoff); | extern void * duplicateNum(void * S, int vSoff); | ||||
extern void IF_show_stack(void); | extern void IF_show_stack(void); | ||||
extern void IFD_show_stack(void); | |||||
extern void IF_ramp(void); | extern void IF_ramp(void); | ||||
extern void IF_dramp(void); | extern void IF_dramp(void); | ||||
extern void IF_DEC(void); | extern void IF_DEC(void); | ||||
@@ -53,6 +54,7 @@ extern void IF_VAROFF(void); | |||||
extern void IF_VARUP(void); | extern void IF_VARUP(void); | ||||
extern void IF_VARDOWN(void); | extern void IF_VARDOWN(void); | ||||
extern void IF_vars(void); | extern void IF_vars(void); | ||||
extern void IFD_vars(void); | |||||
extern void IF_point(void); | extern void IF_point(void); | ||||
extern void IF_swap(void); | extern void IF_swap(void); | ||||
extern void IF_dup(void); | extern void IF_dup(void); | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -24,6 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#include "nife.h" | #include "nife.h" | ||||
#include "mth.h" | #include "mth.h" | ||||
#include "err.h" | #include "err.h" | ||||
#include "debug.h" | |||||
#include "lib.h" | #include "lib.h" | ||||
#include "stackV.h" | #include "stackV.h" | ||||
#include "stackF.h" | #include "stackF.h" | ||||
@@ -163,6 +164,13 @@ struct Var * N; | |||||
printf("<end of variables stack>\n"); | printf("<end of variables stack>\n"); | ||||
} | } | ||||
void IFD_show_stackV(void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_show_stackV(); | |||||
_IFD_END_ | |||||
} | |||||
static void newVar(char * S) | static void newVar(char * S) | ||||
{ | { | ||||
char Lib[LDFLT+1]; | char Lib[LDFLT+1]; | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
extern void IF_debVar(void); | extern void IF_debVar(void); | ||||
extern void IF_debVarCS(void); | extern void IF_debVarCS(void); | ||||
extern void IF_show_stackV(void); | extern void IF_show_stackV(void); | ||||
extern void IFD_show_stackV(void); | |||||
extern void IF_delVar(void); | extern void IF_delVar(void); | ||||
extern void dump_stackV(int fd); | extern void dump_stackV(int fd); | ||||
extern void restore_stackV(int fd); | extern void restore_stackV(int fd); | ||||
@@ -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 | 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 | it under the terms of the GNU General Public License as published by | ||||
@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#include <stdio.h> | #include <stdio.h> | ||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <string.h> | |||||
#include <unistd.h> | #include <unistd.h> | ||||
#include <time.h> | #include <time.h> | ||||
#include <signal.h> | #include <signal.h> | ||||
@@ -31,6 +32,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
#include "nife.h" | #include "nife.h" | ||||
#include "mth.h" | #include "mth.h" | ||||
#include "err.h" | #include "err.h" | ||||
#include "debug.h" | |||||
#include "tasks.h" | #include "tasks.h" | ||||
#include "foncs.h" | #include "foncs.h" | ||||
#include "histo.h" | #include "histo.h" | ||||
@@ -64,15 +66,18 @@ static char * FicCons(int t) | |||||
int MakeTask (void * A) | int MakeTask (void * A) | ||||
{ | { | ||||
int i, pid; | |||||
char * NF; | |||||
int i, n, pid; | |||||
char * NF, buf[50]; | |||||
i = FctInTask-1; | i = FctInTask-1; | ||||
if ((pid = fork()) == -1) stopErr("IF_NewTask","fork"); | if ((pid = fork()) == -1) stopErr("IF_NewTask","fork"); | ||||
if (pid == 0) { /* fils */ | if (pid == 0) { /* fils */ | ||||
ITASK=FctInTask; /* TASK 0 is the interractive */ | |||||
ITASK=FctInTask; /* TASK 0 is the interractive one */ | |||||
NF = FicCons(ITASK); | NF = FicCons(ITASK); | ||||
n = i+1; | |||||
if ((i=open(NF,O_CREAT|O_RDWR|O_TRUNC,0600)) < 0) perror(NF); | if ((i=open(NF,O_CREAT|O_RDWR|O_TRUNC,0600)) < 0) perror(NF); | ||||
else { | else { | ||||
sprintf(buf,"Task #%d console :\n",n); | |||||
write(i,buf,strlen(buf)); | |||||
dup2(i,1); | dup2(i,1); | ||||
dup2(i,2); | dup2(i,2); | ||||
close(i); | close(i); | ||||
@@ -101,6 +106,13 @@ int i; | |||||
printf("<end of tasks list>\n"); | printf("<end of tasks list>\n"); | ||||
} | } | ||||
void IFD_show_Tasks(void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_show_Tasks(); | |||||
_IFD_END_ | |||||
} | |||||
void IF_statusTask(void) | void IF_statusTask(void) | ||||
{ | { | ||||
long V; | long V; | ||||
@@ -148,7 +160,7 @@ int i; | |||||
} | } | ||||
} | } | ||||
void IF_showCons( void) | |||||
void IF_showCons(void) | |||||
{ | { | ||||
long V; | long V; | ||||
int i; | int i; | ||||
@@ -164,4 +176,10 @@ char * NF, comm[30]; | |||||
} | } | ||||
} | } | ||||
void IFD_showCons(void) | |||||
{ | |||||
_IFD_BEGIN_ | |||||
IF_showCons(); | |||||
_IFD_END_ | |||||
} | |||||
@@ -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 | 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 | 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_NewTask(void); | ||||
extern void IF_show_Tasks(void); | extern void IF_show_Tasks(void); | ||||
extern void IFD_show_Tasks(void); | |||||
extern void IF_statusTask(void); | extern void IF_statusTask(void); | ||||
extern void IF_stopTask(void); | extern void IF_stopTask(void); | ||||
extern void IF_delTask(void); | extern void IF_delTask(void); | ||||
extern void IF_showCons(void); | extern void IF_showCons(void); | ||||
extern void IFD_showCons(void); | |||||
extern int MakeTask(void * A); | extern int MakeTask(void * A); | ||||