Projet mkd/find.c
De Wiki EELL.
Version du 10 mai 2013 à 10:33 par JPL (discuter | contributions)
Retour aux fichiers en développement →
Sommaire |
find (included file)
Ce fichier find.inc.c n'est pas un fichier de fonction. Il doit être inclus dans le fichier source mkd.c avec la directive incluse dans find.inc.h selon que le fichier de projet est reconnu ou non.
find.inc.c, find.inc.h 2013-05-09
- find.inc.h
#define ARGS_EXAM
- find.inc.c
//P maj R3.11 04/01/91 par JPL
//P maj R 130509 alpha
{ /*S find */
/*O mettre les drapeaux (options ABC... ) a 0 */
A=B=C=F=P=S=0;
L=0;
// c is a register int defined in mkd.c
int d; // local variables
int e, f, g;
if(v) printf("Find Souce File Language, \'%s\': ",fsrc);
if(k)
{ /*S chercher */
//T char buffer[10]; //T tests only
c = tolower(fsrc[k+1]);
if (c!='\0') d = tolower(fsrc[k+2]); else d='\0';
if (d!='\0') e = tolower(fsrc[k+3]); else e='\0';
// if (e!='\0') f = tolower(fsrc[k+4]); else f='\0';
// if (f!='\0') g = tolower(fsrc[k+4]); else g='\0';
// if (g!='\0') h = tolower(fsrc[k+3]); else h='\0';
//T buffer[0]=c; buffer[1]=d; buffer[2]=e; buffer[3]='\0'; //T Tests only
//T printf("\nTests: **** tolower extension = %s\n",buffer); //T tests only
#ifndef UNIX_ONLY // OK for PC and UNIX / LINUX. Not OK for C strict
if(c=='a'&&d=='s'&&(e=='m'||e=='i'))
{L=1;A=1;printf("ASM\n");}
else if( (c=='b'&&d=='a'&&e=='s') || // bas
(c=='v'&&d=='b'&&e=='\0') || // Visual bacic
(c=='b'&&d=='a'&&e=='t') // bat
)
{L=1;B=1;printf("BASIC\n");}
else if(
( ((c=='c'||'h')&&d=='+'&&e=='+') || // c++, h++
((c=='c'||'h')&&d=='-'&&e=='-') || // c--, h--
((c=='c'||'h')&&d=='p'&&e=='p') || // cpp, hpp
(c=='c'&&d=='s'&&e=='s') || // css
(c=='c'&&d=='c'&&e=='\0') || // cc
(c=='h'&&d=='h'&&e=='\0') || // hh
(c=='c'&&d=='p'&&e=='\0') || // cp=c#
(c=='c'&&d=='s'&&e=='\0') || // cs=c#
(c=='c'&&d=='#'&&e=='\0') || // c#
(c=='c'&&d=='\0') || // C
(c=='h'&&d=='\0') || // h
(c=='d'&&d=='\0') || // D
(c=='p'&&d=='r')&&e=='o') || // pro prolog
//w see forward (c=='p'&&d=='l')&&d=='\0') || // pl perl, prolog
(c=='p'&&d=='h'&&e=='p') || // PHP
(c=='j'&&d=='a'&&e=='v') || // jav java
(c=='j'&&d=='s'&&e=='e') || // jse javascript
(c=='j'&&d=='s'&&e=='\0') // js javascript
)
{L=1;C=1;printf("C or PROLOG\n");}
else if(c=='f'&&d=='o'&&e=='r')
{L=1;F=1;printf("FORTRAN\n");}
else if(c=='p'&&d=='a'&&e=='s')
{L=1;P=1;printf("PASCAL\n");}
#endif
#ifndef PC_ONLY // OK for UNIX / LINUX
if(c=='s'&&d=='\0')
{L=1;A=1;printf("Assembler\n");}
else if(c=='f'&&d=='\0')
{L=1;F=1;printf("Fortran\n");}
else if(c=='p'&&d=='\0')
{L=1;P=1;printf("Pascal\n");}
/*w Attention, il n'est pas coutumier de donner des extensions aux fichiers
shell. Il serait utile de vérifier la première ligne si c est NULL. Pour
cela il faudrait ouvrir et refermer le fichier source. */
else if( (c=='s'&&d=='h'&&e=='\0') || // sh
(c=='c'&&d=='s'&&e=='h') || // csh
(c=='p'&&d=='l'&&e=='\0') || // pl perl
(c=='r'&&d=='b'&&e=='\0') || // rb ruby
(c=='p'&&d=='y'&&e=='\0') || // py python
(c=='p'&&d=='y'&&e=='w') || // pyw python
(c=='r'&&d=='\0') // ratfor
)
{L=1;S=1;printf("Shell\n");}
#endif
#ifdef UNIX_ONLY // C strict not in use with mkd see version.h
else if((c=='c'||c=='h')&&d=='\0')
{L=1;C=1;printf("C strict\n");}
#endif
#ifndef ARGS_EXAM
else if( (c=='p'&&d=='r'&&e=='j') || // prj mkd
(c=='p'&&d=='j'&&e=='\0') // pj mkd
)
{L=1;j=1;printf("Project file\n");}
#endif
} /*S chercher */
/*O si le langage n'est pas trouvé: */
if(!L)
/*O alors: */
{ /*S*/
/*O mettre les drapeaux (options ABC... ) a 0 */
A=B=C=F=P=S=0;
/*O demander le type de langage du fichier et positionner le drapeau */
printf("\n*** Source file: language not found. (Enter A,B,C,F,P,S,l or p)\n");
#ifndef ARGS_EXAM
if(!j)printf("*** For project file: exit and use option -j.\n");
#endif
printf("Enter ESCAPE for exit ?:");
if(j)printf("\b\bor space_bar for Ignore ?: ");
if((c=getch())==0x1B){ /*S*/ printf("\n.Exit 1\n");exit(1);} /*S*/
else if(c=='A'||c=='a')A=1;
else if(c=='B'||c=='b')B=1;
else if(c=='C'||c=='c')C=1;
else if(c=='F'||c=='f')F=1;
else if(c=='P'||c=='p')P=1;
else if(c=='S'||c=='s')S=1;
else if (c=='l')l=1;
else if(c=='p')p=1;
else
{ /*S*/
printf("\n.Exit 2\n"); exit(2);
} /*S*/
printf("\n");
L=A+B+C+F+P+S;
/*O si aucun drapeau langage n'est positionne envoyer BEL */
if(!(L==1||p||l))putch(0x7);
putch('\n');
} /*S*/
} /*S find */
- find.inc.i preprocessed file
# 1 "find.inc.c"
# 1 "<interne>"
# 1 "<command-line>"
# 1 "find.inc.c"
{
A=B=C=F=P=S=0;
L=0;
int d;
int e, f, g;
if(v) printf("Find Souce File Language, \'%s\': ",fsrc);
if(k)
{
c = tolower(fsrc[k+1]);
if (c!='\0') d = tolower(fsrc[k+2]); else d='\0';
if (d!='\0') e = tolower(fsrc[k+3]); else e='\0';
if(c=='a'&&d=='s'&&(e=='m'||e=='i'))
{L=1;A=1;printf("ASM\n");}
else if( (c=='b'&&d=='a'&&e=='s') ||
(c=='v'&&d=='b'&&e=='\0') ||
(c=='b'&&d=='a'&&e=='t')
)
{L=1;B=1;printf("BASIC\n");}
else if(
( ((c=='c'||'h')&&d=='+'&&e=='+') ||
((c=='c'||'h')&&d=='-'&&e=='-') ||
((c=='c'||'h')&&d=='p'&&e=='p') ||
(c=='c'&&d=='s'&&e=='s') ||
(c=='c'&&d=='c'&&e=='\0') ||
(c=='h'&&d=='h'&&e=='\0') ||
(c=='c'&&d=='p'&&e=='\0') ||
(c=='c'&&d=='s'&&e=='\0') ||
(c=='c'&&d=='#'&&e=='\0') ||
(c=='c'&&d=='\0') ||
(c=='h'&&d=='\0') ||
(c=='d'&&d=='\0') ||
(c=='p'&&d=='r')&&e=='o') ||
(c=='p'&&d=='h'&&e=='p') ||
(c=='j'&&d=='a'&&e=='v') ||
(c=='j'&&d=='s'&&e=='e') ||
(c=='j'&&d=='s'&&e=='\0')
)
{L=1;C=1;printf("C or PROLOG\n");}
else if(c=='f'&&d=='o'&&e=='r')
{L=1;F=1;printf("FORTRAN\n");}
else if(c=='p'&&d=='a'&&e=='s')
{L=1;P=1;printf("PASCAL\n");}
if(c=='s'&&d=='\0')
{L=1;A=1;printf("Assembler\n");}
else if(c=='f'&&d=='\0')
{L=1;F=1;printf("Fortran\n");}
else if(c=='p'&&d=='\0')
{L=1;P=1;printf("Pascal\n");}
else if( (c=='s'&&d=='h'&&e=='\0') ||
(c=='c'&&d=='s'&&e=='h') ||
(c=='p'&&d=='l'&&e=='\0') ||
(c=='r'&&d=='b'&&e=='\0') ||
(c=='p'&&d=='y'&&e=='\0') ||
(c=='p'&&d=='y'&&e=='w') ||
(c=='r'&&d=='\0')
)
{L=1;S=1;printf("Shell\n");}
# 93 "find.inc.c"
else if( (c=='p'&&d=='r'&&e=='j') ||
(c=='p'&&d=='j'&&e=='\0')
)
{L=1;j=1;printf("Project file\n");}
}
if(!L)
{
A=B=C=F=P=S=0;
printf("\n*** Source file: language not found. (Enter A,B,C,F,P,S,l or p)\n");
if(!j)printf("*** For project file: exit and use option -j.\n");
printf("Enter ESCAPE for exit ?:");
if(j)printf("\b\bor space_bar for Ignore ?: ");
if((c=getch())==0x1B){ printf("\n.Exit 1\n");exit(1);}
else if(c=='A'||c=='a')A=1;
else if(c=='B'||c=='b')B=1;
else if(c=='C'||c=='c')C=1;
else if(c=='F'||c=='f')F=1;
else if(c=='P'||c=='p')P=1;
else if(c=='S'||c=='s')S=1;
else if (c=='l')l=1;
else if(c=='p')p=1;
else
{
printf("\n.Exit 2\n"); exit(2);
}
printf("\n");
L=A+B+C+F+P+S;
if(!(L==1||p||l))putch(0x7);
putch('\n');
}
}
Fichier de commande des tests
MAKE_Tests_U, CLEAN_Tests_U, Make_Tests_files, KONSOLE
- File: MAKE_Tests_U
#!/bin/bash #O ../../mkd tests under Linux. #O Epreuve de vérification de la fonction find.inc.c() avec ../../mkd rm test_find.txt ../../mkd -svwfj '**' test_find.prj test_find.txt > test.stdout gedit test_find.txt test.stdout
- File: CLEAN_Tests_U
#!/bin/dash #O File Tests_Clean #O Delete files created with Make_Tets_files under Linux. rm test.*
- File: Make_Tests_files
>
#!/bin/dash
echo "; assembler" > test.ASM
echo "REM basic" > test.BAS
echo "REM batch" > test.BAT
echo "C fortran" > test.FOR
echo "{ pascal }" > test.PAS
echo "' visual basic" > test.vb
echo "/* c++ */" > test.c++
echo "// c++" > test.h++
echo "/* c-- */ " > test.c--
echo "// c--" > test.h--
echo "/* c++ */" > test.cpp
echo "// c++" > test.hpp
echo "/* css */" > test.css
echo "/* c++ */" > test.cc
echo "/* c sharp */" > test.cp
echo "// c sharp" > test.cs
echo "// c sharp" > test.c#
echo "/* C */" > test.C
echo "// C" > test.h
echo "/* D */" > test.D
echo "/* prolog */" > test.pro
echo "// php" > test.php
echo "/* java */" > test.jav
echo "/* javasript */" > test.jse
echo "// javasript " > test.js
#w echo "mkd" > test.prj not a programming language
#w echo "mkd" > test.pj not a programming language
# UNIX
echo "; assembler" > test.s
echo "C fortran" > test.f
echo "(* pascal *)" > test.p
echo "# ratfor" > test.r
echo "# shell" > test.sh
echo "# cshell" > test.csh
echo "# perl" > test.pl
echo "# ruby" > test.rb
echo "/* python */" > test.py
echo "# python" > test.pyw
# C strict
echo "/* C strict src */" > test.c
echo "/* C strict header */" > test.h
# Make prj file
# ls -1 > test_find.prj
- File: KONSOLE
#!/bin/bash echo -e '\E['32';'01'm'"click on New Line to 'start' the Konsole" # echo -e '\E['31';'01'm' "not 'start in a terminal'" echo -e '\E['32';'01'm'"click on Ctrl-C to exit" tput sgr0 # Reset text attributes to normal without clear read pwd pwd echo $pwd tput sgr0 # Reset text attributes to normal without clear /usr/bin/konsole background-mode --workdir pwd dir read
Analyse des test konsole
Fichiers sources des tests
Le fichier de projet test_find.prj permet de vérifier que tous les commentaires soient reconnus en fonction de l'extension du nom de fichier.
test_find.prj
- File: test_find.prj
test.ASM test.BAS test.BAT test.c test.c-- test.c# test.c++ test.C test.cc test.cp test.cpp test.cs test.csh test.css test.D test.f test.FOR test.h test.h-- test.h++ test.hpp test.jav test.js test.jse test.p test.PAS test.php test.pl test.pro test.py test.pyw test.r test.rb test.s test.sh test.vb

