Projet mkd/find.c
De Wiki EELL.
Version du 10 mai 2013 à 10:21 par JPL (discuter | contributions)
Retour aux fichiers en développement →
Sommaire |
find (included file)
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.vbModèle:Nom du modèle