@@ -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. | |||
@@ -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 <http://www.gnu.org/licenses/> | |||
#ifdef HAVE_CONFIG_H | |||
#include "../config.h" | |||
#else | |||
#define VERSION "0.51" | |||
#define VERSION "0.55" | |||
#endif | |||
#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 | |||
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 "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<l;i++) fprintf(stderr," %x",(int)((unsigned char)M[i])); | |||
fprintf(stderr,"\n"); | |||
fflush(stderr); | |||
} | |||
} | |||
@@ -65,18 +147,18 @@ static char D_Mes[20]; | |||
void * Malloc(int s) | |||
{ | |||
void * M; | |||
D_Trace("\n"); | |||
D_Tracenl("EOL"); | |||
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; | |||
} | |||
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); | |||
} | |||
@@ -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,10 +18,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||
#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); | |||
@@ -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 <http://www.gnu.org/licenses/> | |||
#include <stdio.h> | |||
#include <string.h> | |||
#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 | |||
@@ -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 <http://www.gnu.org/licenses/> | |||
#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); | |||
@@ -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 <http://www.gnu.org/licenses/> | |||
#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) | |||
@@ -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 | |||
@@ -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 | |||
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 "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) | |||
@@ -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 |
@@ -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 <http://www.gnu.org/licenses/> | |||
#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("<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 | |||
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 |
@@ -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 <http://www.gnu.org/licenses/> | |||
#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); | |||
} | |||
@@ -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 | |||
@@ -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; | |||
@@ -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); | |||
@@ -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 | |||
@@ -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 <http://www.gnu.org/licenses/> | |||
#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); | |||
@@ -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<NBFonc;i++) { | |||
if (strcmp(L,Fonctions[i].nam) == 0) return 1; | |||
} | |||
return 0; | |||
} | |||
void * libByName(char * L) | |||
{ | |||
int i; | |||
@@ -552,6 +579,7 @@ int i; | |||
} | |||
return VIDE; | |||
} | |||
void * libByInd(long i) | |||
{ | |||
return((void*)Fonctions[i].fct); | |||
@@ -588,7 +616,7 @@ int i; | |||
void * A; | |||
short T=0; | |||
InExec = C; | |||
D_Trace(C); | |||
/* D_Trace(C); pas pour le moment */ | |||
if (sigsetjmp(ENV_INT,1)) { | |||
interInfos("execLib",C); | |||
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 | |||
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 int execLibNrpc(char * C); | |||
extern int execLib(char * C); | |||
extern int fctExists(char *); | |||
extern void * libByName(char *); | |||
extern void * libByInd(long i); | |||
extern char * libByAddr(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 | |||
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 | |||
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 | |||
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 | |||
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 | |||
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 | |||
it under the terms of the GNU General Public License as published by | |||
@@ -447,10 +447,11 @@ uint32_t k; | |||
char *sF, nF[30]; | |||
i=readMess(s); | |||
NET_BUF[i]='\0'; | |||
/* D_Trace(NET_BUF); */ | |||
D_TraceH(NET_BUF,i); /* to debug */ | |||
switch(*NET_BUF) { | |||
case NET_OFF : | |||
send1car(s, NET_OFF+1); | |||
D_Close(); | |||
exit(0); /* stop the Nrpc client */ | |||
break; | |||
case NET_EXE : | |||
@@ -498,7 +499,7 @@ char c, *sN, *sF; | |||
i=readMess(s); | |||
NET_BUF[i]='\0'; | |||
/* D_Trace(NET_BUF); */ | |||
D_TraceH(NET_BUF,i); /* for debug */ | |||
switch(*NET_BUF) { | |||
case NET_ONR : | |||
CalDT=1; | |||
@@ -536,7 +537,10 @@ char c, *sN, *sF; | |||
delCli(M1.pid, Sin.sin_addr); | |||
send1car(s, NET_OFF+1); | |||
if (STS) { | |||
if (NCli == 0) exit(0); /* stop the server */ | |||
if (NCli == 0) { | |||
D_Close(); | |||
exit(0); /* stop the server */ | |||
} | |||
STS=0; | |||
} | |||
break; | |||
@@ -683,13 +687,19 @@ static int connSock(void) | |||
return 0; /* OK */ | |||
} | |||
static void InterruptRpc(int S) | |||
{ | |||
D_Close(); | |||
exit(0); | |||
} | |||
void main_Nrpc(void) /* main function for Nrpc client */ | |||
{ | |||
int sock, nsock; | |||
socklen_t ln; | |||
struct sockaddr_in Nsin; | |||
signal(SIGTERM, SIG_DFL); | |||
signal(SIGTERM, InterruptRpc); | |||
if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) | |||
stopServ(0, "socket",1); | |||
bzero(&Nsin,sizeof(Nsin)); | |||
@@ -725,6 +735,7 @@ static void startNrpc(void) | |||
close(0); | |||
close(1); | |||
/* close(2); */ | |||
if (Debug) Debug=3; | |||
D_Reset(); | |||
IF_stack_clear(); /* clear all stacks */ | |||
IF_stackL_clear(); | |||
@@ -763,6 +774,7 @@ int pid; | |||
close(0); | |||
close(1); | |||
/* close(2); */ | |||
if (Debug) Debug=2; | |||
D_Reset(); | |||
close(Sock); | |||
IF_stack_clear(); /* clear all stacks */ | |||
@@ -933,6 +945,13 @@ void IF_netList (void) | |||
printf("<end of net list>\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("<end of net stack>\n"); */ | |||
} | |||
void IFD_netStackList (void) | |||
{ | |||
_IFD_BEGIN_ | |||
IF_netStackList(); | |||
_IFD_END_ | |||
} | |||
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 | |||
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); | |||
@@ -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 (d<f) { | |||
if (noErr()) break; | |||
/* recherche du 1er mot */ | |||
@@ -199,7 +218,7 @@ int i=0; | |||
printf("In file %s line %d !\n",f,i); | |||
break; | |||
} | |||
traiteLigne(bufP); | |||
traiteLigne(bufP,1); | |||
i++; | |||
} | |||
fclose(F); | |||
@@ -361,7 +380,7 @@ void IF_ExecCS(void) | |||
char * f; | |||
f = getString(); | |||
if (f != NULL) { | |||
if (strlen(f)>0) 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; | |||
@@ -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 | |||
@@ -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 | |||
@@ -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 | |||
@@ -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 <http://www.gnu.org/licenses/> | |||
#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("<end of character stack>\n"); | |||
} | |||
void IFD_show_stackC(void) | |||
{ | |||
_IFD_BEGIN_ | |||
IF_show_stackC(); | |||
_IFD_END_ | |||
} | |||
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 | |||
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); | |||
@@ -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 <http://www.gnu.org/licenses/> | |||
#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("<end of functions stack>\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); | |||
@@ -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); | |||
@@ -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 <http://www.gnu.org/licenses/> | |||
#include "nife.h" | |||
#include "mth.h" | |||
#include "err.h" | |||
#include "debug.h" | |||
#include "stackL.h" | |||
@@ -178,6 +179,12 @@ char s; | |||
} else printf("<end of logical stack>\n"); | |||
} | |||
void IFD_show_stackL(void) | |||
{ | |||
_IFD_BEGIN_ | |||
IF_show_stackL(); | |||
_IFD_END_ | |||
} | |||
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 | |||
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); | |||
@@ -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; | |||
@@ -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); | |||
@@ -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 <http://www.gnu.org/licenses/> | |||
#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("<end of variables stack>\n"); | |||
} | |||
void IFD_show_stackV(void) | |||
{ | |||
_IFD_BEGIN_ | |||
IF_show_stackV(); | |||
_IFD_END_ | |||
} | |||
static void newVar(char * S) | |||
{ | |||
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 | |||
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_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); | |||
@@ -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 <http://www.gnu.org/licenses/> | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <string.h> | |||
#include <unistd.h> | |||
#include <time.h> | |||
#include <signal.h> | |||
@@ -31,6 +32,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/> | |||
#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("<end of tasks list>\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_ | |||
} | |||
@@ -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); | |||