int _CRTAPI1 main( int argc, char *argv[], char *envp[] ) { int i; FILE *fhTxt, *fhHdr; PCHAR s, pszTxtFile, pszHdrFile, pszBinPath; BOOL result; fDebug = FALSE; fVerbose = FALSE; pszTxtFile = NULL; pszHdrFile = NULL; pszBinPath = NULL; for (i=1; i<argc; i++) { s = argv[i]; if (*s == '/' || *s == '-') { while (*++s) { switch( *s ) { case 'd': case 'D': fDebug = TRUE; break; case 'v': case 'V': fVerbose = TRUE; break; default: usage( 1 ); } } } else if (pszTxtFile == NULL) { pszTxtFile = s; } else if (pszHdrFile == NULL) { pszHdrFile = s; } else if (pszBinPath == NULL) { pszBinPath = s; } else { usage( 1 ); } } if (!pszTxtFile || !pszHdrFile || !pszBinPath ) { usage( 1 ); } if (!(fhTxt = fopen( pszTxtFile, "rb" ))) { fprintf( stderr, "GENMSG: Cannot open %s for input.\n", pszTxtFile ); exit( 1 ); } if (fVerbose) { fprintf( stderr, "Reading %s\n", pszTxtFile ); } if (!(fhHdr = fopen( pszHdrFile, "wb" ))) { fprintf( stderr, "GENMSG: Cannot open %s for output.\n", pszHdrFile ); exit( 1 ); } if (fVerbose) { fprintf( stderr, "Writing %s\n", pszHdrFile ); } result = ReadTxtAndOutputHdr( pszTxtFile, fhTxt, fhHdr ); if (result) { result = BlockMessages(); if (result) { result = WriteBinFile( pszBinPath ); } } fclose( fhTxt ); return( result ? 0 : 1 ); }
int main(int argc, const char * argv[]) { if (argc < 5) { printf("!!!Error: Not enough arguments. <first_long_number_filename> [ + | - | * | / | % | ^ ] <second_long_number_filename> <result_long_number_filename>!!!\n"); return 0; } if (argc > 7) { printf("!!!Error: Many arguments. <first_long_number_filename> [ + | - | * | / | % | ^ ] <second_long_number_filename> <result_long_number_filename> <module_long_number_filename> <-b>!!!\n"); return 0; } FILE* firstLongNumFile = fopen(argv[1], "r"); if (!firstLongNumFile) //проверка открытия первого файла с числом { printf("!!!Error: Unable to open file: %s !!!\n", argv[1]); return 0; } fclose(firstLongNumFile); const char* operation = argv[2]; if ((strlen(operation) > 1 || operation[0] == '\0') || operation[0] != '+' && operation[0] != '-' && operation[0] != '*' && operation[0] != '/' && operation[0] != '%' && operation[0] != '^') //проверка оператора { printf("!!!Error: Wrong operation: %s !!!\n", operation); return 0; } FILE* secondLongNumFile = fopen(argv[3], "r"); //проверка открытия второго файла с числом if (!secondLongNumFile) { printf("!!!Error: Unable to open file: %s !!!\n", argv[3]); return 0; } fclose(secondLongNumFile); FILE* resultLongNumFile = fopen(argv[4], "r"); if (!resultLongNumFile) //проверка открытия файла для результата { printf("!!!Error: Unable to open file: %s !!!\n", argv[4]); return 0; } fclose(resultLongNumFile); //////////////////////////////////////////////////////////////////////////////// int bin = 0; //флаг для бинарного файла if (argc == 5) if (argv[2][0] == '^') { printf("!!!Error: Input module file!!!\n"); return 0; } if (argc == 6) { if (argv[2][0] == '^') { FILE* moduleLongNumFile = fopen(argv[5], "r"); if (!moduleLongNumFile) { printf("!!!Error: Unable to open file: %s !!!\n", argv[5]); return 0; } fclose(moduleLongNumFile); } else { if (strcmp(argv[5], "-b")) { printf("!!!Error: Invalid flag: %s !!!\n", argv[5]); return 0; } bin = 1; } } if (argc == 7) { FILE* moduleLongNumFile = fopen(argv[5], "r"); if (!moduleLongNumFile) { printf("!!!Error: Unable to open file: %s !!!\n", argv[5]); return 0; } fclose(moduleLongNumFile); if (strcmp(argv[6], "-b")) { printf("!!!Error: Invalid flag: %s !!!\n", argv[6]); return 0; } bin = 1; } struct LongNumber a, b; //загружаем первое число из бинарного файла if (bin == 1) a = ReadBinFile(argv[1]); else a = ReadTextFile(argv[1]); //загружаем второе число из бинарного файла if (bin == 1) b = ReadBinFile(argv[3]); else b = ReadTextFile(argv[3]); //выполняем операцию struct LongNumber result; switch (operation[0]) { case '+': { result = ADD(a, b); break; } case '-': { result = SUB(a, b); break; } case '*': { result = MUL(a, b); break; } case '/': { result = DIV(a, b, 1); break; } case '%': { result = DIV(a, b, 2); break; } case '^': { struct LongNumber c; if (bin == 1) c = ReadBinFile(argv[5]); else c = ReadTextFile(argv[5]); result = DEGREE(a, b, c); c = clear(c); break; } default: break; } //записываем в файл результат if (bin == 1) WriteBinFile(argv[4], result); else WriteTextFile(argv[4], result); a = clear(a); b = clear(b); result = clear(result); return 0; }
void ClassLN::WriteBin(const char* filename) { WriteBinFile(filename, this->num); }