*** empty log message ***

This commit is contained in:
jwalz
2002-01-05 21:05:56 +00:00
parent cc56430c7b
commit c2ef84cd25

383
sys/msdos/def2mak.c Normal file
View File

@@ -0,0 +1,383 @@
/* SCCS Id: @(#)def2mak.c 3.3 95/03/19 */
/* Copyright (c) NetHack PC Development Team, 1994. */
/* NetHack may be freely redistributed. See license for details. */
#include "config.h"
#include <malloc.h>
#include <ctype.h>
#ifndef _MSC_VER
#include <stdlib.h>
#else
int __cdecl _strcmpi(const char *, const char *);
int __cdecl _stricmp(const char *, const char *);
int __cdecl _strnicmp(const char *, const char *,size_t);
#endif
#define MALLOC(type) (type *)malloc(sizeof(type))
#define MACROID_SIZ 50
#define MACROVAL_SIZ 300
typedef unsigned char bool;
struct MacroNode * FDECL(AddMacro, (struct MacroNode *, char *, char *));
char * FDECL(ApplyMacros, (char *, struct MacroNode *));
struct MacroNode * FDECL(DelMacro, (struct MacroNode *));
struct MacroNode * FDECL(DelMacroList, (struct MacroNode *));
void FDECL(COMPILER, (bool, char *, char *, FILE *));
void FDECL(SaveNewLine, (char *, char *));
struct ListItem * FDECL(AddItem, (struct ListItem *, char *));
struct ListItem * FDECL(ReadList, (FILE *, int));
void FDECL(LINKLIST, (bool, struct ListItem *, char *, char *));
struct ListTable * FDECL(AddList, (struct ListTable *, struct ListItem *,
char *));
struct ListItem * FDECL(DelTableList, (struct ListItem *));
struct ListTable * FDECL(DelTable, (struct ListTable *));
struct ListItem * FDECL(FindList, (struct ListTable *, char *));
#ifdef strcmpi
# undef strcmpi /* don't want to drag in hacklib.c */
#endif
#ifdef _MSC_VER
#define stricmp _strcmpi
#define strnicmp _strnicmp
#endif
int
strcmpi(s1, s2)
char *s1, *s2;
{
char t1, t2;
while (*s1 || *s2) {
if (!*s2) return 1; /* s1 > s2 */
else if (!*s1) return -1; /* s1 < s2 */
if (isupper(*s1)) t1 = tolower(*s1); else t1 = *s1;
if (isupper(*s2)) t2 = tolower(*s2); else t2 = *s2;
if (t1 != t2) return (t1 > t2) ? 1 : -1;
s1++; s2++;
}
return 0; /* s1 == s2 */
}
struct MacroNode {
char Name[MACROID_SIZ];
char Val[MACROVAL_SIZ];
struct MacroNode *Next;
};
struct MacroNode *
AddMacro (List, MID, MVal)
struct MacroNode *List;
char *MID;
char *MVal;
{
struct MacroNode *Tmp;
Tmp = MALLOC (struct MacroNode);
strncpy (Tmp->Name, MID, MACROID_SIZ);
strncpy (Tmp->Val, MVal, MACROVAL_SIZ);
Tmp->Next = List;
return Tmp;
}
char *
ApplyMacros (Line, List)
char *Line;
struct MacroNode *List;
{
static char TotalLine[MACROVAL_SIZ + 100];
char TmpLine[MACROVAL_SIZ + 100];
int AfterLine;
char MacroName[MACROID_SIZ];
struct MacroNode *TmpList;
strcpy (TotalLine, "");
strcpy (TmpLine, Line);
if (sscanf (TmpLine, "%[^?]?[%[^]]]%n", TotalLine, MacroName,
&AfterLine) <= 1) return Line;
for (TmpList = List; TmpList; TmpList = TmpList->Next)
if (!strcmp(TmpList->Name, MacroName)) {
strcat (TotalLine, TmpList->Val);
break;
}
strcat (TotalLine, TmpLine + AfterLine);
return TotalLine;
}
struct MacroNode *
DelMacro (List)
struct MacroNode *List;
{
struct MacroNode *tmp;
tmp = List->Next;
free (List);
return tmp;
}
struct MacroNode *
DelMacroList (List)
struct MacroNode *List;
{
while (List != NULL)
List = DelMacro (List);
return List;
}
void
COMPILER (display, SavedNewLine, EndString, input)
bool display;
char *SavedNewLine;
char *EndString;
FILE *input;
{
char buffer[100];
fgets (buffer, 100, input);
while (strnicmp(buffer, EndString, strlen(EndString))) {
if (display)
SaveNewLine(buffer, SavedNewLine);
fgets (buffer, 100, input);
};
}
void
SaveNewLine (Line, NewLine)
char *Line;
char *NewLine;
{
char tempNewLine[2];
strcpy (tempNewLine, "");
if (Line[strlen(Line)-1] == '\n') {
Line[strlen(Line)-1] = '\0';
strcpy (tempNewLine, "\n");
};
printf ("%s%s", NewLine, Line);
strcpy (NewLine, tempNewLine);
}
struct ListItem {
char Item[40];
struct ListItem *next;
};
struct ListTable {
char name[40];
struct ListItem *List;
struct ListTable *next;
};
struct ListItem *
AddItem (List, Item)
struct ListItem *List;
char Item[40];
{
struct ListItem *temp;
temp = MALLOC(struct ListItem);
temp->next = List;
strncpy (temp->Item, Item, 39);
return temp;
}
struct ListItem *
ReadList (input, LinePos)
FILE *input;
int LinePos;
{
char Item[40];
char buffer[100];
struct ListItem *List;
List = NULL;
fscanf (input, "%39s", Item);
while (strncmp(Item, "?ENDLIST?", 9)) {
if (LinePos > 60) {
LinePos = 18;
printf ("\\\n\t\t");
}
List = AddItem(List, Item);
printf ("%s ", Item);
LinePos += 1 + strlen(Item);
fscanf (input, "%39s", Item);
}
printf ("\n");
fgets (buffer, 100, input);
return List;
}
void
LINKLIST (BC, List, Listname, SavedNewLine)
bool BC;
struct ListItem *List;
char *Listname;
char *SavedNewLine;
{
int LinePos;
printf ("%s\t\t", SavedNewLine);
strcpy (SavedNewLine, "");
if (!BC) {
printf ("$(%s:^\t=+^\n\t\t)\n", Listname);
return;
};
if (List == NULL) return;
LinePos = 18;
while (List != NULL) {
if (LinePos > 60) {
LinePos = 18;
printf ("+\n\t\t");
}
printf ("%s ", List->Item);
LinePos += 1 + strlen(List->Item);
List = List->next;
}
printf ("\n");
}
struct ListTable *
AddList (Table, List, Name)
struct ListTable *Table;
struct ListItem *List;
char *Name;
{
struct ListTable *temp;
temp = MALLOC (struct ListTable);
temp->next = Table;
temp->List = List;
strncpy (temp->name, Name, 39);
return temp;
}
struct ListItem *
DelTableList (List)
struct ListItem *List;
{
struct ListItem *temp;
while (List != NULL) {
temp = List->next;
free (List);
List = temp;
};
return List;
}
struct ListTable *
DelTable (Table)
struct ListTable *Table;
{
struct ListTable *temp;
while (Table != NULL) {
temp = Table->next;
Table->List = DelTableList(Table->List);
free(Table);
Table=temp;
};
return Table;
}
struct ListItem *
FindList (Table, Item)
struct ListTable *Table;
char *Item;
{
while (Table != NULL) {
if (!stricmp(Table->name, Item)) return Table->List;
Table = Table->next;
}
return NULL;
}
int
main (argc, argv)
int argc;
char *argv[];
{
FILE *makfile;
char buffer[100];
char SavedNewLine[2];
char Listname[40];
struct ListTable *Table;
time_t timer;
bool MSC, BC;
struct MacroNode *MacroList = NULL;
char MacroName[MACROID_SIZ];
char MacroVal[MACROVAL_SIZ];
if (argc < 3) {
printf ("Too few arguments. Correct usage is:\n");
printf ("\t%s {/MSC || /BC} template\n\n", "def2mak");
printf ("\t{/MSC || /BC} indicate the compiler to use.\n");
printf ("\ttemplate is the template file to process.\n\n");
printf ("The output makefile goes to standard output.\n");
return 1;
};
Table = NULL;
if (!strcmpi(argv[1], "/MSC") || !strcmpi(argv[1], "-MSC")) {
MSC = TRUE;
BC = FALSE;
} else if (!strcmpi(argv[1], "/BC") || !strcmpi(argv[1], "-BC")) {
MSC = FALSE;
BC = TRUE;
} else {
fprintf (stderr, "Unknown compiler format: %s\n", argv[1]);
return 1;
};
strcpy (SavedNewLine, "");
if ((makfile = fopen (argv[2], "r")) == NULL)
return 2;
COMPILER (0, SavedNewLine, "?BEGIN?", makfile);
while (!feof(makfile)) {
if (fgets(buffer, 100, makfile) == NULL)
break;
if (!strnicmp(buffer, "?SCCS?", 6)) {
time (&timer);
printf ("%s#\tSCCS Id: @(#)Makefile.%s\t3.3\t%02d/%02d/%02d\n",
SavedNewLine,
MSC ? "MSC" : BC ? "BC" : "???",
localtime(&timer)->tm_year,
localtime(&timer)->tm_mon + 1,
localtime(&timer)->tm_mday);
printf ("# Copyright (c) %s, %d.\n",
BC ? "Yitzhak Sapir" : "NetHack PC Development Team",
localtime(&timer)->tm_year + 1900);
printf ("# NetHack may be freely distributed. ");
printf ("See license for details.\n#\n\n");
strcpy (SavedNewLine, "");
} else if (MSC ? sscanf (buffer, "?MSCMACRO:%[^=]=%[^?]?",
MacroName, MacroVal) :
BC ? sscanf (buffer, "?BCMACRO:%[^=]=%[^?]?",
MacroName, MacroVal) : 0)
MacroList = AddMacro(MacroList, MacroName, MacroVal);
else if (!strnicmp(buffer, "?BC?", 4))
COMPILER(BC, SavedNewLine, "?ENDBC?", makfile);
else if (!strnicmp(buffer, "?MSC?", 5))
COMPILER(MSC, SavedNewLine, "?ENDMSC?", makfile);
else if (!strnicmp(buffer, "?COMMENT?", 9))
COMPILER(FALSE, SavedNewLine, "?ENDCOMMENT?", makfile);
else if (sscanf(buffer, "?LIST:%[^?]?", Listname)
== 1) {
printf ("%s%s\t=", SavedNewLine, Listname);
Table = AddList (Table, ReadList (makfile, 18), Listname);
strcpy (SavedNewLine, "");
} else if (sscanf(buffer, "?LINKLIST:%[^?]?", Listname)
== 1)
LINKLIST (BC, FindList(Table, Listname), Listname,
SavedNewLine);
else if (buffer[0] != '?')
SaveNewLine(ApplyMacros(buffer, MacroList), SavedNewLine);
};
printf ("%s", SavedNewLine);
fclose (makfile);
Table = DelTable(Table);
MacroList = DelMacroList (MacroList);
return 0;
}