コード例 #1
0
ファイル: mkinfres.c プロジェクト: TijmenW/FreeDOS
main(int argc, char **argv)
{	char *txtFile = 0;
	unsigned long heapPos;
	int rc;
	unsigned extraSpace;

	if(argc > 1 && *argv[1] == '/' && toupper(argv[1][1]) == 'T') {
		txtFile = &argv[1][2];
		--argc;
		++argv;
	}
	if(argc != 4) {
		puts("Useage: INFORES resfile mapfile exefile");
		return 127;
	}
	if((rc = scanMapFile(argv[2], &heapPos, &extraSpace)) != 0)
		return rc;
	if((rc = addImageDisplacement(argv[3], &heapPos, &extraSpace)) != 0)
		return rc;

	if(txtFile && (txt = fopen(txtFile, "wt")) == 0) {
		printf("Failed to create text file: %s\n", txtFile);
		return 43;
	}
	if((info = fopen(argv[1], "wb")) == 0) {
		printf("Failed to create file: %s\n", argv[1]);
		return 41;
	}
	startResource(info, RES_ID_INFO, 0);
	dumpTagU(INFO_EXTRA_SPACE, extraSpace);
	if(heapPos)
		dumpTag(INFO_POS_HEAPLEN, 4, &heapPos);
#if 0			/* They are external now */
#ifdef FEATURE_ALIASES
	dumpTagU(INFO_ALIASES, 0);
#endif
#ifdef FEATURE_HISTORY
	dumpTagU(INFO_HISTORY, 256);
#endif
#ifdef INCLUDE_CMD_PUSHD
	dumpTagU(INFO_DIRSTACK, DIRSTACK_DEFAULT_SIZE);
#endif
#endif
	dumpTagU(INFO_BUFSIZE, MAX_INTERNAL_COMMAND_SIZE);
	dumpTag(INFO_END, 0, 0);
	endResource(info);

	fflush(info);
	if(ferror(info)) {
		printf("Error writing file: %s\n", argv[1]);
		return 60;
	}

	fclose(info);
	return 0;
}
コード例 #2
0
ファイル: fixstrs.c プロジェクト: ErisBlastar/osfree
int main(int argc, char **argv)
{
        FILE *dat, *inc;
        int rc;
        unsigned long size;
        string_count_t cnt;             /* current string number */
        string_size_t lsize;
        int makeLib = 0;

        *fDIR = '\0';
 
        if(argv[1] && stricmp(argv[1], "/lib") == 0) {
                --argc;
                ++argv;
                makeLib = 1;
        }

        // output directory
        if (argc > 1 && stricmp(argv[1], "/dir") == 0) {
          --argc;
          ++argv; 
          strcpy(fDIR, argv[1]);
          --argc;
          ++argv;
        }

        if (argc > 2) {
                puts("FIXSTRS - Generate STRINGS.DAT and STRINGS.H for a language\n"
                        "Useage: FIXSTRS [/lib] [language] [directory]\n"
                        "\tIf no language is specified, only the default strings are read.\n"
                        "\tThe <language>.LNG file must reside in the current directory.\n"
                        "Note: DEFAULT.LNG must be present in the current directory, too.");
                return 127;
        }

        in_file = 1;
        if((rc = loadFile(fTXT)) != 0)
                return rc;
        in_file = 2;
        if(argc > 1 && (rc = loadFile(argv[1])) != 0) {
          --argc;
          ++argv;      
          return rc;
        }

/* Now all the strings are cached into memory */

        if(maxCnt < 2) {
                fputs("No string definition found.\n", stderr);
                return 43;
        }

        /* Prepend a directory, if needed */
        if (*fDIR) {
          strcpy(temp1, fDIR);
          logfile = strcat(temp1, logfile);
        }
        /* Create the LOG file */
        if(argc > 1) {          /* Only if a local LNG file was specified */
                log = NULL;                     /* No LOG entry til this time */
                for(cnt = 0; cnt < maxCnt; ++cnt) {
                        switch(strg[cnt].flags & 3) {
                        case 0:         /* Er?? */
                                fputs("Internal error assigned string has no origin?!\n"
                                 , stderr);
                                return 99;
                        case 1:         /* DEFAULT.LNG only */
                                if(!log && (log = fopen(logfile, "wt")) == NULL) {
                                        fprintf(stderr, "Cannot create logfile: '%s'\n"
                                         , logfile);
                                        goto breakLogFile;
                                }
                                fprintf(log, "%s: Missing from local LNG file\n"
                                 , strg[cnt].name);
                                break;
                        case 2:         /* local.LNG only */
                                if(!log && (log = fopen(logfile, "wt")) == NULL) {
                                        fprintf(stderr, "Cannot create logfile: '%s'\n"
                                         , logfile);
                                        goto breakLogFile;
                                }
                                fprintf(log, "%s: No such string resource\n"
                                 , strg[cnt].name);
                                break;
                        case 3:         /* OK */
                                break;
                        }
                        if(strg[cnt].flags & VERSION_MISMATCH) {
                                if(!log && (log = fopen(logfile, "wt")) == NULL) {
                                        fprintf(stderr, "Cannot create logfile: '%s'\n"
                                         , logfile);
                                        goto breakLogFile;
                                }
                                fprintf(log, "%s: Version mismatch, current is: %u\n"
                                 , strg[cnt].name, strg[cnt].version);
                        }
                        if(strg[cnt].flags & VALIDATION_MISMATCH) {
                                if(!log && (log = fopen(logfile, "wt")) == NULL) {
                                        fprintf(stderr, "Cannot create logfile: '%s'\n"
                                         , logfile);
                                        goto breakLogFile;
                                }
                                fprintf(log, "%s: printf() format string mismatch, should be: %s\n"
                                 , strg[cnt].name, strg[cnt].vstring);
                        }
                }

                if(log)
                        fclose(log);
        }
breakLogFile:

        /* 1. Adjust the offset and generate the overall size */
        for(size = string[0].size, cnt = 1; cnt < maxCnt; ++cnt) {
                string[cnt].index = string[cnt-1].index + string[cnt-1].size;
                size += string[cnt].size;
        }

        if(size >= 0x10000ul - sizeof(string_index_t) * maxCnt) {
                fputs("Overall size of strings exceeds 64KB limit\n", stderr);
                return 44;
        }

        if (*fDIR) {
          strcpy(temp1, fDIR);
          fDAT = strcat(temp1, fDAT);
        }
        /* 2. Open STRINGS.DAT and STRINGS.H and dump control information */
        if ((dat = fopen(fDAT,"wb")) == NULL) {
                strcpy(temp2, "creating ");
                strcpy(temp2, fDAT);
                perror(temp2);
                return 36;
        }
        if (*fDIR) {
          strcpy(temp1, fDIR);
          fH = strcat(temp1, fH);
        }
        if ((inc = fopen(fH,"wt")) == NULL) {
                strcpy(temp2, "creating ");
                strcat(temp2, fH);
                perror(temp2);
                return 37;
        }

puts("FIXSTRS: building STRINGS resource");

        fputs("/*\n"
                " * This file was automatically generated by FIXSTRS.\n"
                " * Any modifications will be lost next time this tool\n"
                " * is invoked.\n"
                " */\n\n", inc);
        fprintf(inc,"#define  STRINGS_ID         \"%s%u\"\n"
         , id, STRING_RESOURCE_MINOR_ID);

        startResource(dat, RES_ID_STRINGS, STRING_RESOURCE_MINOR_ID);
                /* Preamble of STRINGS.DAT file */
        fprintf(dat, "%s%u", id, STRING_RESOURCE_MINOR_ID);
/*      fwrite(id, sizeof(id) - 1, 1, dat);             *//* file contents ID */
        fwrite("\r\n\x1a", 4, 1, dat);                  /* text file full stop */
        fputs("#define  STRINGS_ID_TRAILER 4\n", inc);  /* 4 additional bytes */
        fputs("\n\n", inc);                                             /* delimiter */

                /* parameters of strings */
        fwrite(&maxCnt, sizeof(maxCnt), 1, dat);        /* number of strings */
        lsize = (string_size_t)size;
        fwrite(&lsize, sizeof(lsize), 1, dat);          /* total size of string text */

                /* string control area */
        fwrite(string, sizeof(string[0]), maxCnt, dat);
        /* append the strings */
        for(cnt = 0; cnt < maxCnt; ++cnt) {
                fwrite(strg[cnt].text, string[cnt].size, 1, dat);
                if(makeLib)
                        fprintf(inc, "extern const char %s[];\n", strg[cnt].name);
                fprintf(inc, "#define  %-34s 0x%02x  /* @ 0x%04x */\n"
                 , strg[cnt].name, cnt, string[cnt].index);
        }
        fputs("\n/* END OF FILE */\n", inc);
        endResource(dat);

        fflush(dat);
        if(ferror(dat)) {
                strcpy(temp2, "Unspecific write error into ");
                strcat(temp2, fDAT);
                strcat(temp2, "\n");
                fputs(temp2, stderr);
                return 38;
        }
        fflush(inc);
        if(ferror(inc)) {
                strcpy(temp2, "Unspecific write error into ");
                strcat(temp2, fH);
                strcat(temp2, "\n");
                fputs(temp2, stderr);
                return 39;
        }

        fclose(dat);
        fclose(inc);

        if(makeLib) {
                mkdir(fDIR);
#define fdmake inc
#define ftc101 dat
                //cfilename[-1] = '\\';
                //strcpy(cfilename, fDMAKEFILE);
                if (*fDIR) {
                  strcpy(temp1, fDIR);
                  cfile = strcat(temp1, fDMAKEFILE);
                  cfilename = cfile + strlen(fDIR);
                }
                if((fdmake = fopen(cfile, "wt")) == NULL) {
                        pxerror("creating ", cfile);
                        return 100;
                }
                strcpy(cfilename, fTCMAKEFILE);
                if((ftc101 = fopen(cfile, "wt")) == NULL) {
                        pxerror("creating ", cfile);
                        return 101;
                }

puts("FIXSTRS: building STRINGS library source files");
                /********************** prologue */
                fputs("\
#\n\
# A Makefile for ATTRIB\n\
# (c) osFree project,\n\
# author, date\n\
#\n\
\n\
PROJ  = strings\n\
DESC  = Control file attributes\n\
#defines object file names in format objname.$(O)\n\
srcfiles = ", fdmake);

                /********************* individual files */
                for(cnt = 0; cnt < maxCnt; ++cnt) {
                        dumpString(cnt);
                        fprintf(fdmake, " &\n\t" objfmt1, cnt);
                }
                for(cnt = 0; cnt < maxCnt - 1; ++cnt)
                        fprintf(ftc101, "+" objfmt " \n", cnt);
                fprintf(ftc101, "+" objfmt " \n", cnt);
                /********************** epilogue */

                fputs("\n\n\
# defines additional options for C compiler\n\
ADD_COPT = -i=$(MYDIR)..$(SEP)include -i=$(MYDIR)..$(SEP)suppl\n\
\n\
!include $(%ROOT)/mk/libsdos.mk\n\
\n\
TARGETS  = $(PATH)$(PROJ).lib\n\
\n\
$(TARGETS): $(OBJS)\n\
 @$(MAKE) $(MAKEOPT) -f $(PATH)makefile.mk library=$(TARGETS) library install\n\
\n\
lib: $(TARGETS)\n\
\n", fdmake);

                fflush(ftc101);
                if(ferror(ftc101)) {
                        strcpy(temp2, "Unspecific error writing to ");
                        strcat(temp2, fTCMAKEFILE);
                        puts(temp2);
                        return 104;
                }
                fclose(ftc101);
                fflush(fdmake);
                if(ferror(fdmake)) {
                        strcpy(temp2, "Unspecific error writing to ");
                        strcat(temp2, fDMAKEFILE);
                        puts(temp2);
                        return 105;
                }
                fclose(fdmake);
        }

        return 0;
}
コード例 #3
0
ファイル: fixstrs.c プロジェクト: FDOS/freecom
int main(int argc, char **argv)
{
	FILE *dat, *inc;
	int rc;
	unsigned long size;
	string_count_t cnt;		/* current string number */
	string_size_t lsize;
	int makeLib = 0;

	unlink(logfile);

	if(argv[1] && stricmp(argv[1], "/lib") == 0) {
		--argc;
		++argv;
		makeLib = 1;
	}

	if(argc > 2) {
		puts("FIXSTRS - Generate STRINGS.DAT and STRINGS.H for a language\n"
			"Useage: FIXSTRS [/lib] [language]\n"
			"\tIf no language is specified, only the default strings are read.\n"
			"\tThe <language>.LNG file must reside in the current directory.\n"
			"Note: DEFAULT.LNG must be present in the current directory, too.");
		return 127;
	}


	in_file = 1;
	if((rc = loadFile(fTXT)) != 0)
		return rc;
	in_file = 2;
	if(argc > 1 && (rc = loadFile(argv[1])) != 0)
		return rc;

/* Now all the strings are cached into memory */

	if(maxCnt < 2) {
		fputs("No string definition found.\n", stderr);
		return 43;
	}

	/* Create the LOG file */
	if(argc > 1) {		/* Only if a local LNG file was specified */
		log = NULL;			/* No LOG entry til this time */
		for(cnt = 0; cnt < maxCnt; ++cnt) {
			switch(strg[cnt].flags & 3) {
			case 0:		/* Er?? */
				fputs("Internal error assigned string has no origin?!\n"
				 , stderr);
				return 99;
			case 1:		/* DEFAULT.LNG only */
				if(!log && (log = fopen(logfile, "wt")) == NULL) {
					fprintf(stderr, "Cannot create logfile: '%s'\n"
					 , logfile);
					goto breakLogFile;
				}
				fprintf(log, "%s: Missing from local LNG file\n"
				 , strg[cnt].name);
				break;
			case 2:		/* local.LNG only */
				if(!log && (log = fopen(logfile, "wt")) == NULL) {
					fprintf(stderr, "Cannot create logfile: '%s'\n"
					 , logfile);
					goto breakLogFile;
				}
				fprintf(log, "%s: No such string resource\n"
				 , strg[cnt].name);
				break;
			case 3:		/* OK */
				break;
			}
			if(strg[cnt].flags & VERSION_MISMATCH) {
				if(!log && (log = fopen(logfile, "wt")) == NULL) {
					fprintf(stderr, "Cannot create logfile: '%s'\n"
					 , logfile);
					goto breakLogFile;
				}
				fprintf(log, "%s: Version mismatch, current is: %u\n"
				 , strg[cnt].name, strg[cnt].version);
			}
			if(strg[cnt].flags & VALIDATION_MISMATCH) {
				if(!log && (log = fopen(logfile, "wt")) == NULL) {
					fprintf(stderr, "Cannot create logfile: '%s'\n"
					 , logfile);
					goto breakLogFile;
				}
				fprintf(log, "%s: printf() format string mismatch, should be: %s\n"
				 , strg[cnt].name, strg[cnt].vstring);
			}
		}

		if(log)
			fclose(log);
	}
breakLogFile:

	/* 1. Adjust the offset and generate the overall size */
	for(size = string[0].size, cnt = 1; cnt < maxCnt; ++cnt) {
		string[cnt].index = string[cnt-1].index + string[cnt-1].size;
		size += string[cnt].size;
	}

	if(size >= 0x10000ul - sizeof(string_index_t) * maxCnt) {
		fputs("Overall size of strings exceeds 64KB limit\n", stderr);
		return 44;
	}

	/* 2. Open STRINGS.DAT and STRINGS.H and dump control information */
	if ((dat = fopen(fDAT,"wb")) == NULL) {
		perror("creating " fDAT);
		return 36;
	}
	if ((inc = fopen(fH,"wt")) == NULL) {
		perror("creating " fH);
		return 37;
	}

puts("FIXSTRS: building STRINGS resource");

	fputs("/*\n"
		" * This file was automatically generated by FIXSTRS.\n"
		" * Any modifications will be lost next time this tool\n"
		" * is invoked.\n"
		" */\n\n", inc);
	fprintf(inc,"#define  STRINGS_ID         \"%s%u\"\n"
	 , id, STRING_RESOURCE_MINOR_ID);

	startResource(dat, RES_ID_STRINGS, STRING_RESOURCE_MINOR_ID);
		/* Preamble of STRINGS.DAT file */
	fprintf(dat, "%s%u", id, STRING_RESOURCE_MINOR_ID);
/*	fwrite(id, sizeof(id) - 1, 1, dat);		*//* file contents ID */
	fwrite("\r\n\x1a", 4, 1, dat);			/* text file full stop */
	fputs("#define  STRINGS_ID_TRAILER 4\n", inc);	/* 4 additional bytes */
	fputs("\n\n", inc);						/* delimiter */

		/* parameters of strings */
	fwrite(&maxCnt, sizeof(maxCnt), 1, dat);	/* number of strings */
	lsize = (string_size_t)size;
	fwrite(&lsize, sizeof(lsize), 1, dat);		/* total size of string text */

		/* string control area */
	fwrite(string, sizeof(string[0]), maxCnt, dat);
	/* append the strings */
	for(cnt = 0; cnt < maxCnt; ++cnt) {
		fwrite(strg[cnt].text, string[cnt].size, 1, dat);
		if(makeLib)
			fprintf(inc, "extern const char %s[];\n", strg[cnt].name);
		fprintf(inc, "#define  %-34s 0x%02x  /* @ 0x%04x */\n"
		 , strg[cnt].name, cnt, string[cnt].index);
	}
	fputs("\n/* END OF FILE */\n", inc);
	endResource(dat);

	fflush(dat);
	if(ferror(dat)) {
		fputs("Unspecific write error into " fDAT "\n", stderr);
		return 38;
	}
	fflush(inc);
	if(ferror(inc)) {
		fputs("Unspecific write error into " fH "\n", stderr);
		return 39;
	}

	fclose(dat);
	fclose(inc);

	if(makeLib) {
		mkdir(stringdir);
#define fdmake inc
#define ftc101 dat
		cfilename[-1] = '\\';
		strcpy(cfilename, fDMAKEFILE);
		if((fdmake = fopen(cfile, "wt")) == NULL) {
			pxerror("creating ", cfile);
			return 100;
		}
		strcpy(cfilename, fTCMAKEFILE);
		if((ftc101 = fopen(cfile, "wt")) == NULL) {
			pxerror("creating ", cfile);
			return 101;
		}

puts("FIXSTRS: building STRINGS library source files");
		/********************** prologue */
		fputs("\
MAXLINELENGTH := 8192\n\
# Project specific C compiler flags\n\
MYCFLAGS_DBG = -UNDEBUG $(null,$(DEBUG) $(NULL) -DDEBUG=1)\n\
MYCFLAGS_NDBG = -DNDEBUG=1 -UDEBUG\n\
MYCFLAGS = $(null,$(NDEBUG) $(MYCFLAGS_DBG) $(MYCFLAGS_NDBG))\n\
\n\
#	Default target\n\
all: $(CFG) strings.lib\n\
\n\
strings.lib .LIBRARY : ", fdmake);

		/********************* individual files */
		for(cnt = 0; cnt < maxCnt; ++cnt) {
			dumpString(cnt);
			fprintf(fdmake, "\\\n\t" objfmt, cnt);
		}
		for(cnt = 0; cnt < maxCnt - 1; ++cnt)
#ifdef __TURBOC__
			fprintf(ftc101, "+" objfmt " &\n", cnt);
#else
			fprintf(ftc101, "+" objfmt "\n", cnt);
#endif
		fprintf(ftc101, "+" objfmt " \n", cnt);
		/********************** epilogue */

		fputs("\n\
\n\
.IF $(CFG) != $(NULL)\n\
\n\
CONFIGURATION = $(CONF_BASE)\n\
\n\
.IF $(_COMPTYPE) == BC\n\
CONF_BASE =	\\\n\
-f- \\\n\
-I$(INCDIR:s/;/ /:t\";\")	\\\n\
-L$(LIBDIR:s/;/ /:t\";\")	\\\n\