Написал совсем по-человечески:
O.C
Код:
/* Љ®¬ЇЁ«пв®а п§лЄ* Ћ (o.c) */
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <time.h>
#include <string.h>
#include "text.h"
#include "scan.h"
#include "scan.h"
#include "location.h"
#include "pars.h"
#include "error.h"
void Init(void) {
ResetText();
if( ResetError )
Error(Message);
InitScan();
}
void Done(void) {
CloseText();
}
int main(int argc, char *argv[]) {
struct _finddata_t c_file;
intptr_t hFile;
puts("\n бла-бла-бла");
if( argc <= 1 )
Mask = NULL;
else
Mask = argv[1];
hFile = _findfirst( Mask, &c_file );
if( (hFile = _findfirst( Mask, &c_file )) == -1L ) {
printf( "%s", "Файлов, удовлетворяющих маске " );
printf( "%s", Mask );
printf( "%s", "не найдено.\n" );
} else {
do {
strcpy(Path, &c_file.name);
Init();
Compile();
Done();
} while( _findnext( hFile, &c_file ) == 0 );
_findclose( hFile );
}
return 0;
}
Этот самый ResetText():
Код:
char ResetError = TRUE;
char* Message = "”*©« *Ґ ®вЄалв";
int Ch = chEOT;
static FILE *f;
void NextCh() {
if( (Ch = fgetc(f)) == EOF )
Ch = chEOT;
else if( Ch == '\n' ) {
//readln(f);// ??
// puts("");
Line++; Pos = 0; Ch = chEOL;
}
else if( Ch == '\r' )
NextCh();
else if( Ch != '\t' ) {
// putchar(Ch);
Pos++;
}
// else
// do
// putchar(' ');
// while( ++Pos % TABSIZE );
}
void ResetText() {
if( Path == NULL ) {
puts("Запуск*:\n MyProgram.exe <вход. файл>");
exit(1);
}
else if( (f = fopen(Path, "r")) == NULL ){
ResetError = TRUE;
Message = "Что-то пошло не так с открытием файла*";
}
else {
ResetError = FALSE; Message = "Ok";
Pos = 0; Line = 1;
NextCh();
}
}
Теперь первый файл по маске программа читает нормально, а вот когда под маску подпадают несколько файлов, то когда дело доходит до второго возникает ошибка:
Ошибка возникает на втором файле, т.к. я пробовал выводить значение переменной Path когда они присваиваются - выдало 1-е имя файла из папки, удовлетворяющее маске и 2-е, потом ошибка.
В чём причина неполадки? Почему программа не хочет обрабатывать последующие файлы? (их имена она определяет правильно)
При компиляции проекта в MS Visual Studio 2008 ошибок не возникало... Помогите.