mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
3.7 KiB
162 lines
3.7 KiB
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
#include <windows.h>
|
|
#include "general.h"
|
|
|
|
FILE* logFile;
|
|
|
|
void Header(argv)
|
|
char* argv[];
|
|
{
|
|
time_t t;
|
|
|
|
PRINT1("\n=========== IMPORT =============\n");
|
|
PRINT2("BOM: %s\n",argv[2]);
|
|
PRINT2("INF path: %s\n",argv[3]);
|
|
PRINT2("INF name: %s\n",argv[4]);
|
|
PRINT2("Source: %s\n",argv[5]);
|
|
time(&t); PRINT2("Time: %s",ctime(&t))
|
|
PRINT1("================================\n\n");
|
|
}
|
|
|
|
void Usage()
|
|
{
|
|
printf("USAGE: This program takes the following parameters in the order below:\n");
|
|
printf("<LogFile> : Path to append a log of actions and errors.\n");
|
|
printf("<Bom> : Path of BOM to which entries are added.\n");
|
|
printf("<INF> : Path of INF to import into BOM.\n");
|
|
printf("<INF name> : Name of INF file to assign in BOM.\n");
|
|
printf("<Source> : Source of the files, like x86bins.\n\n");
|
|
}
|
|
|
|
void EntryInit(e,p)
|
|
Entry* e;
|
|
char* p;
|
|
{
|
|
e->name=p;
|
|
e->source=p;
|
|
e->path=p;
|
|
e->comment=p;
|
|
e->product=p;
|
|
e->sdk=p;
|
|
e->cdpath=p;
|
|
e->inf=p;
|
|
e->section=p;
|
|
e->infline=p;
|
|
e->nocompress=p;
|
|
e->lmacl=p;
|
|
e->ntacl=p;
|
|
e->aclpath=p;
|
|
e->medianame=p;
|
|
e->size=0;
|
|
e->csize=0;
|
|
e->priority=1;
|
|
e->disk=0;
|
|
}
|
|
|
|
int _CRTAPI1 main(argc,argv)
|
|
int argc;
|
|
char* argv[];
|
|
{
|
|
FILE *bom, *inf;
|
|
int i,j;
|
|
Entry e;
|
|
char line[1000];
|
|
char l[1000];
|
|
char section[1000];
|
|
char c;
|
|
char key[100];
|
|
char rename[100];
|
|
char scratch1[100];
|
|
char scratch2[100];
|
|
char name[100];
|
|
char infline[100];
|
|
char p[1];
|
|
char path[255];
|
|
|
|
p[0]='\0';
|
|
if (argc!=6) { Usage(); return(1); }
|
|
if ((logFile=fopen(argv[1],"a"))==NULL)
|
|
{
|
|
printf("ERROR Couldn't open %s.\n",argv[1]);
|
|
return(1);
|
|
}
|
|
Header(argv);
|
|
if (MyOpenFile(&bom,argv[2],"a+b")) return(1);
|
|
if (MyOpenFile(&inf,argv[3],"r")) return(1);
|
|
|
|
strcpy(section,"ERROR NO SECTION FOUND!!\n");
|
|
while (fgets(line,1000,inf)!=NULL)
|
|
{
|
|
for (j=0,i=0;line[i];i++)
|
|
if ((line[i]!='\t') && (line[i]!=' ') && (line[i]!='\n'))
|
|
l[j++]=line[i];
|
|
l[j]='\0';
|
|
if (l[0]==';')
|
|
PRINT2("Skipping line: %s",line)
|
|
i=0; while(l[i]) if (l[i++]==';') l[--i]='\0';
|
|
if (line[0]=='[')
|
|
{
|
|
strcpy(section,line);
|
|
section[strlen(section)-1]='\0';
|
|
printf("Source path for section %s:",section);
|
|
scanf("%s",path);
|
|
fprintf(logFile,"Section: %s. Path: %s\n",section,path);
|
|
}
|
|
else if (l[0])
|
|
{
|
|
EntryInit(&e,p);
|
|
e.name=name;
|
|
e.source=argv[5];
|
|
e.inf=argv[4];
|
|
e.infline=infline;
|
|
e.section=section;
|
|
e.path=path;
|
|
rename[0]='\0';
|
|
key[0]='\0';
|
|
scratch1[0]='\0';
|
|
scratch2[0]='\0';
|
|
|
|
i=0; while((l[i]!=',') && (l[i]!='=')) i++;
|
|
if (l[i]=='=')
|
|
{
|
|
strncpy(key,l,i);
|
|
key[i]='\0';
|
|
while(l[i]!=',') i++;
|
|
}
|
|
i++;
|
|
j=0;
|
|
while (((c=(name[j++]=tolower(l[i++])))!=',') && (c!='\0'));
|
|
name[j-1]='\0';
|
|
if (c==',')
|
|
{
|
|
if ((l[i]=='S') || (l[i]=='s'))
|
|
while ((l[++i]!='\0') && (l[i]!=','));
|
|
else
|
|
i--;
|
|
if (l[i]==',')
|
|
{
|
|
while(l[i++]!='=');
|
|
j=0;
|
|
while (((c=(rename[j++]=l[i++]))!=',') && (c!='\0'));
|
|
rename[j-1]='\0';
|
|
}
|
|
}
|
|
if (key[0])
|
|
sprintf(scratch1,"%s=",key);
|
|
if (rename[0])
|
|
sprintf(scratch2,", RENAME=%s",rename);
|
|
sprintf(infline,"%s[d], [n], SIZE=[s]%s\0",scratch1,scratch2);
|
|
EntryPrint(&e,bom);
|
|
}
|
|
}
|
|
fclose(bom);
|
|
fflush(inf);
|
|
fclose(inf);
|
|
fflush(logFile);
|
|
fclose(logFile);
|
|
return(0);
|
|
}
|
|
|