| @@ -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); | ||||