home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 3
/
freshfish3_9403.bin
/
a-kwic
/
pi2loaddb.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-02-26
|
5KB
|
231 lines
/*
* prodinfo - Create LoadDB input file from a KingFisher .Product-Info
* file.
*
*
* Note that this program assumes that all of the field names are in lower
* case.
*/
/*
* Written by: David W. Lowrey
* Starbound Enterprises
*/
static char RCS_ID[] =
{" $Id: prodinfo.c,v 1.3 1994/01/30 16:00:01 D_Lowrey Exp $ "};
#include <stdio.h>
#include <string.h>
void clean_string(char *, char *);
__far char storage[1000][100];
char volume[100];
unsigned int name, version, path, type, short_desc,desc_start,desc_end;
unsigned int req_start, req_end, ref_start, ref_end, dist_start, dist_end;
unsigned int auth_start, auth_end;
int main()
{
char line[100];
char *ptr;
unsigned int *end_ptr = NULL;
char fields[10][13] = {"name","version","path","type","short","description",
"requirements","reference","distribution","author"};
unsigned int lens[10] = {4, 7, 4, 4, 5, 11, 12, 9, 12, 6};
unsigned int field_num = 0;
unsigned int storage_line;
int i, len;
int processed_field;
unsigned started = 0;
void print_record(void);
while (gets(line)) {
if(line[0] == '.') {
if(started && (!strncmp(line,".name",5))) {
print_record();
started = 0;
}
if (!started) {
version=path=type=short_desc=desc_start=desc_end=0;
req_start=req_end=ref_start=ref_end=dist_start=dist_end=0;
name=auth_start=auth_end=0;
volume[0] = '\0';
storage_line = 1;
started = 1;
}
processed_field = 0;
if (end_ptr)
*end_ptr = storage_line - 1;
field_num = 0;
for(i=0; i<10; i++)
if (!strncmp(&line[1], fields[i], lens[i])) {
field_num = i+1;
break;
}
}
else
if (started)
if(processed_field)
clean_string(line, storage[storage_line++]);
else {
++processed_field;
switch(field_num)
{
case 0: /* Non-used field */
processed_field = 0;
break;
case 1: /* .name */
clean_string(line, storage[storage_line]);
name=storage_line++;
end_ptr = NULL;
break;
case 2: /* .version */
clean_string(line, storage[storage_line]);
version=storage_line++;
end_ptr = NULL;
break;
case 3: /* .path */
clean_string(line, storage[storage_line]);
path=storage_line++;
ptr = (char *)strchr(storage[path], (int)':');
if(ptr) {
len = ptr-storage[path];
strncpy(volume,storage[path],(size_t)len);
volume[len] = '\0';
}
end_ptr = NULL;
break;
case 4: /* .type */
clean_string(line, storage[storage_line]);
type=storage_line++;
end_ptr = NULL;
break;
case 5: /* .short */
clean_string(line, storage[storage_line]);
short_desc=storage_line++;
end_ptr = NULL;
break;
case 6: /* .description */
clean_string(line, storage[storage_line]);
desc_start=storage_line++;
end_ptr = &desc_end;
break;
case 7: /* .requirements */
clean_string(line, storage[storage_line]);
req_start=storage_line++;
end_ptr = &req_end;
break;
case 8: /* .reference */
clean_string(line, storage[storage_line]);
ref_start=storage_line++;
end_ptr = &ref_end;
break;
case 9: /* .distribution */
clean_string(line, storage[storage_line]);
dist_start=storage_line++;
end_ptr = &dist_end;
break;
case 10: /* .author */
clean_string(line, storage[storage_line]);
auth_start=storage_line++;
end_ptr = &auth_end;
break;
}
}
}
if (end_ptr)
*end_ptr = storage_line - 1;
print_record();
return(0);
}
void clean_string(char *src, char *dest)
{
char *ptr;
for (ptr=src; *ptr == ' '; ptr++); /* Find first non blank */
strcpy(dest, ptr);
ptr = (char *)(dest + strlen(dest) - 1);
for (; *ptr == ' '; ptr--); /* Find last non blank */
*(++ptr) = '\0';
}
void print_record()
{
int i;
storage[0][0] = '\0';
printf("#R\n");
printf("#H %s ", storage[name]);
if (version)
printf("%s ", storage[version]);
printf("%s\n", volume);
printf("#K %s %s\n", storage[name], volume);
if (type)
printf("#K %s\n", storage[type]);
if (short_desc)
printf("%s\n\n", storage[short_desc]);
if (desc_start) {
for(i=desc_start; i<= desc_end; i++)
printf("%s\n", storage[i]);
printf("\n");
}
if (req_start) {
for(i=req_start; i<= req_end; i++)
printf("%s\n", storage[i]);
printf("\n");
}
if (path) {
printf("#TTHIS VERSION:\n");
if (version)
printf("%s\t%s\n\n", storage[version], storage[path]);
else
printf("?.?\t%s\n\n", storage[path]);
}
if(ref_start) {
printf("#TOTHER VERSIONS:\n");
for(i=ref_start; i<ref_end; i+=2) {
if (storage[i][strlen(storage[i])-1] == '/')
storage[i][strlen(storage[i])-1] = '\0';
printf("%s\t%s\n", storage[i+1], storage[i]);
}
printf("\n");
}
if(dist_start) {
printf("#TDISTRIBUTION:\n");
for(i=dist_start; i<= dist_end; i++)
printf("%s\n", storage[i]);
printf("\n");
}
if(auth_start) {
printf("#TAUTHOR:\n");
for(i=auth_start; i<= auth_end; i++)
printf("%s\n", storage[i]);
}
}