Author: hbelusca Date: Sun Mar 29 00:13:25 2015 New Revision: 66942
URL: http://svn.reactos.org/svn/reactos?rev=66942&view=rev Log: [ROSAPPS][HOST-TOOLS]: - Take the best of the two CAT rosapps and turn them into a host-tool. Will be used later on in the build process. - Few comment cleaning in bin2c tool.
Added: trunk/reactos/tools/cat.c - copied, changed from r66923, trunk/rosapps/applications/sysutils/utils/cat/cat.c Removed: trunk/rosapps/applications/sysutils/tcat/ trunk/rosapps/applications/sysutils/utils/cat/ Modified: trunk/reactos/CMakeLists.txt trunk/reactos/tools/CMakeLists.txt trunk/reactos/tools/bin2c.c trunk/rosapps/applications/sysutils/CMakeLists.txt trunk/rosapps/applications/sysutils/utils/CMakeLists.txt
Modified: trunk/reactos/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/CMakeLists.txt?rev=66942&am... ============================================================================== --- trunk/reactos/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/CMakeLists.txt [iso-8859-1] Sun Mar 29 00:13:25 2015 @@ -85,9 +85,9 @@ add_subdirectory(lib)
if(NOT MSVC) - export(TARGETS bin2c widl gendib cabman cdmake mkhive obj2bin spec2def geninc rsym mkshelllink utf16le FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- ) - else() - export(TARGETS bin2c widl gendib cabman cdmake mkhive obj2bin spec2def geninc mkshelllink utf16le FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- ) + export(TARGETS bin2c cat widl gendib cabman cdmake mkhive obj2bin spec2def geninc rsym mkshelllink utf16le FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- ) + else() + export(TARGETS bin2c cat widl gendib cabman cdmake mkhive obj2bin spec2def geninc mkshelllink utf16le FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- ) endif()
else()
Modified: trunk/reactos/tools/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/CMakeLists.txt?rev=66... ============================================================================== --- trunk/reactos/tools/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/tools/CMakeLists.txt [iso-8859-1] Sun Mar 29 00:13:25 2015 @@ -6,6 +6,7 @@ endif()
add_executable(bin2c bin2c.c) +add_executable(cat cat.c) add_executable(gendib gendib/gendib.c) add_executable(geninc geninc/geninc.c) add_executable(mkshelllink mkshelllink/mkshelllink.c)
Modified: trunk/reactos/tools/bin2c.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/bin2c.c?rev=66942&... ============================================================================== --- trunk/reactos/tools/bin2c.c [iso-8859-1] (original) +++ trunk/reactos/tools/bin2c.c [iso-8859-1] Sun Mar 29 00:13:25 2015 @@ -16,18 +16,14 @@ unsigned char ch; unsigned char cnt;
- /* - * Validate the arguments. - */ + /* Validate the arguments */ if (argc < 5) { printf("Usage: bin2c infile.bin outfile.c outfile.h array_name [array_attribute [header_for_attribute]]\n"); return -1; }
- /* - * Open the input and the output files. - */ + /* Open the input and output files */ inFile = fopen(argv[1], "rb"); if (!inFile) { @@ -50,9 +46,7 @@ return -1; }
- /* - * Generate the header file and close it. - */ + /* Generate the header file and close it */ fprintf(outHFile, "/* This file is autogenerated, do not edit. */\n\n"); fprintf(outHFile, "#ifndef CHAR\n" "#define CHAR char\n" @@ -60,21 +54,19 @@ fprintf(outHFile, "extern CHAR %s[];\n", argv[4]); fclose(outHFile);
- /* - * Generate the source file and close it. - */ + /* Generate the source file and close it */ fprintf(outCFile, "/* This file is autogenerated, do not edit. */\n\n"); if (argc >= 7) { - /* There is a header to be included for defining the array attribute. */ + /* Include needed header for defining the array attribute */ fprintf(outCFile, "#include "%s"\n", argv[6]); } fprintf(outCFile, "#include "%s"\n\n", argv[3]);
- /* Generate the array. */ + /* Generate the data array */ if (argc >= 6) { - /* There is an array attribute. */ + /* Add the array attribute */ fprintf(outCFile, "%s ", argv[5]); } fprintf(outCFile, "CHAR %s[] =\n{", argv[4]); @@ -92,12 +84,12 @@ ++cnt; ch = fgetc(inFile); } - /* Put a final NULL terminator. */ + /* Put a final NULL terminator */ fprintf(outCFile, "\n 0x00"); fprintf(outCFile, "\n};\n"); fclose(outCFile);
- /* Close the input file. */ + /* Close the input file */ fclose(inFile);
return 0;
Copied: trunk/reactos/tools/cat.c (from r66923, trunk/rosapps/applications/sysutils/utils/cat/cat.c) URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/cat.c?p2=trunk/reacto... ============================================================================== --- trunk/rosapps/applications/sysutils/utils/cat/cat.c [iso-8859-1] (original) +++ trunk/reactos/tools/cat.c [iso-8859-1] Sun Mar 29 00:13:25 2015 @@ -1,26 +1,120 @@ -#include <stdlib.h> +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS conCATenation tool + * FILE: tools/cat.c + * PURPOSE: Concatenates STDIN or an arbitrary number of files to STDOUT + * PROGRAMMERS: David Welch + * Semyon Novikov (tappak) + * Hermès Bélusca - Maïto + */ + +#include <io.h> +#include <fcntl.h> #include <stdio.h> + +#define ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0])) + +void help(void) +{ + printf("\n" + "ReactOS File Concatenation Tool\n" + "\n" + "Usage: cat [options] [file [...]]\n" + "options - Currently ignored\n"); +}
int main(int argc, char* argv[]) { - int i; - FILE* in; - char ch; + int i; + FILE* in; + unsigned char buff[512]; + size_t cnt, readcnt;
- for (i=1; i<argc; i++) - { - in = fopen(argv[i],"r"); - if (in == NULL) - { - printf("Failed to open file %s\n", argv[i]); - return(0); - } + if (argc >= 2) + { + if (stricmp(argv[1], "-h" ) == 0 || + stricmp(argv[1], "--help") == 0 || + stricmp(argv[1], "/?" ) == 0 || + stricmp(argv[1], "/help" ) == 0) + { + help(); + return 0; + } + }
- while ((ch = fgetc(in)) != EOF) - { - putchar(ch); - } - fclose(in); - } - return 0; + /* Set STDOUT to binary */ + setmode(fileno(stdout), O_BINARY); + + /* Special case where we run 'cat' without any argument: we use STDIN */ + if (argc <= 1) + { + unsigned int ch; + + /* Set STDIN to binary */ + setmode(fileno(stdin), O_BINARY); + +#if 0 // Version using feof() + ch = fgetc(stdin); + while (!feof(stdin)) + { + putchar(ch); + ch = fgetc(stdin); + } +#else + while ((ch = fgetc(stdin)) != EOF) + { + putchar(ch); + } +#endif + + return 0; + } + + /* We have files: read them and output them to STDOUT */ + for (i = 1; i < argc; i++) + { + /* Open the file in binary read mode */ + in = fopen(argv[i], "rb"); + if (in == NULL) + { + printf("Failed to open file '%s'\n", argv[i]); + return -1; + } + + /* Dump the file to STDOUT */ + cnt = 0; readcnt = 0; + while (readcnt == cnt) + { + /* Read data from the input file */ + cnt = ARRAYSIZE(buff); + readcnt = fread(&buff, sizeof(buff[0]), cnt, in); + if (readcnt != cnt) + { + /* + * The real number of read bytes differs from the number of bytes + * we wanted to read, so either a reading error occurred, or EOF + * was reached while reading. Bail out if it is a reading error. + */ + if (!feof(in)) + { + printf("Error while reading file '%s'\n", argv[i]); + fclose(in); + return -1; + } + } + + /* Nothing to be read anymore, so we can gracefully break */ + if (readcnt == 0) break; + + /* Write data to STDOUT */ + fwrite(&buff, sizeof(buff[0]), readcnt, stdout); + } + + /* Finally close the file */ + fclose(in); + } + + return 0; } + +/* EOF */
Modified: trunk/rosapps/applications/sysutils/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/applications/sysutils/CMake... ============================================================================== --- trunk/rosapps/applications/sysutils/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rosapps/applications/sysutils/CMakeLists.txt [iso-8859-1] Sun Mar 29 00:13:25 2015 @@ -12,6 +12,5 @@ #add_subdirectory(rosddt) #add_subdirectory(screenshot) #add_subdirectory(systeminfo) -#add_subdirectory(tcat) add_subdirectory(tlist) add_subdirectory(utils)
Modified: trunk/rosapps/applications/sysutils/utils/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/applications/sysutils/utils... ============================================================================== --- trunk/rosapps/applications/sysutils/utils/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rosapps/applications/sysutils/utils/CMakeLists.txt [iso-8859-1] Sun Mar 29 00:13:25 2015 @@ -1,5 +1,4 @@ #add_subdirectory(binpatch) -add_subdirectory(cat) #add_subdirectory(driver) #add_subdirectory(infinst) #add_subdirectory(nts2w32err)