DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T p

⟦330652f00⟧ TextFile

    Length: 9036 (0x234c)
    Types: TextFile
    Names: »per2c.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/X/Xconq/per2c.c« 

TextFile

/* Copyright (c) 1987, 1988  Stanley T. Shebs, University of Utah. */
/* This program may be used, copied, modified, and redistributed freely */
/* for noncommercial purposes, so long as this notice remains intact. */

/* RCS $Header: per2c.c,v 1.1 88/06/21 12:30:34 shebs Exp $ */

/* This is a mini-tool that converts a period description file into a piece */
/* of C code that can be linked in as xconq's default period.  It uses the */
/* normal xconq period reader, and defines the output routine.  Works from */
/* stdio, only option is to turn on debugging if any args present. */
/* The code is simple but lengthy. */

#include "config.h"
#include "misc.h"
#include "period.h"

/* Declarations for variables set in the period file. */

Period period;

Utype utypes[MAXUTYPES];

Rtype rtypes[MAXRTYPES];

Ttype ttypes[MAXTTYPES];

char *snames[MAXSNAMES];

char *unames[MAXUNAMES];

int Debug = FALSE;

/* Very simple main program. We do need to soak up the first line of the *
/* period description, which is almost certainly a mapfile header. */
/* Any argument will enable debugging prints in the period reader. */

main(argc, argv)
int argc;
char *argv[];
{
    char *dummy[BUFSIZE];

    if (argc > 1) Debug = TRUE;
    fgets(dummy, BUFSIZE-1, stdin);
    read_period(stdin);
    print_period();
    print_utypes();
    print_rtypes();
    print_ttypes();
    print_snames();
    print_unames();
    exit(0);
}

print_period()
{
    printf("#include \"config.h\"\n");
    printf("#include \"period.h\"\n");
    printf("\nPeriod period = { \"%s\", NULL, \"%s\", %d, %d, %d, %d,\n",
	   period.name, /* period.notes */ period.fontname, period.scale,
	   period.countrysize, period.mindistance, period.maxdistance);
    printf(" %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d,\n",
	   period.numutypes, period.numrtypes, period.numttypes,
	   period.numsnames, period.numunames,
	   period.firstutype, period.firstptype,
	   period.knownradius, period.allseen,
	   period.counterattack, period.nukehit, period.neutrality,
	   period.efficiency, period.population, period.hostility);
    printf(" %d, %d, %d, %d, %d, %d };\n",
	   period.altroughness, period.wetroughness,
	   period.defaultterrain, period.edgeterrain,
	   period.spychance, period.spyquality);
}

print_utypes()
{
    int u, t, u2, r;

    printf("\nUtype utypes[MAXUTYPES] = {\n");
    for_all_unit_types(u) {
	printf("{ '%c', \"%s\", \"%s\", NULL, \"%s\",\n",
	       utypes[u].uchar, utypes[u].name, utypes[u].help, /* notes, */
	       (utypes[u].bitmapname ? utypes[u].bitmapname : ""));
	printf("  %d, %d, %d, %d,\n",
	       utypes[u].incountry, utypes[u].density,
	       utypes[u].named, utypes[u].alreadyseen);
	printf("  { ");
	for_all_terrain_types(t) printf("%d, ", utypes[u].favored[t]);
	printf(" },\n");
	printf("  { ");
	for_all_resource_types(r) printf("%d, ", utypes[u].stockpile[r]);
	printf(" },\n");
	printf("  %d, %d, %d, %d, \"%s\", \"%s\",\n",
	       utypes[u].revolt, utypes[u].surrender, utypes[u].siege,
	       utypes[u].attdamage, utypes[u].attritionmsg,
	       utypes[u].accidentmsg);
	printf("  { ");
	for_all_terrain_types(t) printf("%d, ", utypes[u].attrition[t]);
	printf(" },\n");
	printf("  { ");
	for_all_terrain_types(t) printf("%d, ", utypes[u].accident[t]);
	printf(" },\n");
	printf("  %d, %d, %d, \n",
	       utypes[u].maker, utypes[u].startup, utypes[u].research);
	printf("  { ");
	for_all_unit_types(u2) printf("%d, ", utypes[u].make[u2]);
	printf(" },\n");
	printf("  { ");
	for_all_resource_types(r) printf("%d, ", utypes[u].tomake[r]);
	printf(" },\n");
	printf("  { ");
	for_all_unit_types(u2) printf("%d, ", utypes[u].repair[u2]);
	printf(" },\n");
	printf("  %d, \"%s\",\n", utypes[u].survival, utypes[u].starvemsg);
	printf("  { ");
	for_all_resource_types(r) printf("%d, ", utypes[u].produce[r]);
	printf(" },\n");
	printf("  { ");
	for_all_terrain_types(t) printf("%d, ", utypes[u].productivity[t]);
	printf(" },\n");
	printf("  { ");
	for_all_resource_types(r) printf("%d, ", utypes[u].storage[r]);
	printf(" },\n");
	printf("  { ");
	for_all_resource_types(r) printf("%d, ", utypes[u].consume[r]);
	printf(" },\n");
	printf("  { ");
	for_all_resource_types(r) printf("%d, ", utypes[u].inlength[r]);
	printf(" },\n");
	printf("  { ");
	for_all_resource_types(r) printf("%d, ", utypes[u].outlength[r]);
	printf(" },\n");
	printf("  %d, %d, %d, %d,\n",
	       utypes[u].freemove, utypes[u].speed,
	       utypes[u].onemove, utypes[u].jumpmove);
	printf("  { ");
	for_all_terrain_types(t) printf("%d, ", utypes[u].moves[t]);
	printf(" },\n");
	printf("  { ");
	for_all_terrain_types(t) printf("%d, ", utypes[u].randommove[t]);
	printf(" },\n");
	printf("  { ");
	for_all_resource_types(r) printf("%d, ", utypes[u].tomove[r]);
	printf(" },\n");
	printf("  %d, %d,\n", utypes[u].volume, utypes[u].holdvolume);
	printf("  { ");
	for_all_unit_types(u2) printf("%d, ", utypes[u].capacity[u2]);
	printf(" },\n");
	printf("  { ");
	for_all_unit_types(u2) printf("%d, ", utypes[u].entertime[u2]);
	printf(" },\n");
	printf("  { ");
	for_all_unit_types(u2) printf("%d, ", utypes[u].leavetime[u2]);
	printf(" },\n");
	printf("  { ");
	for_all_unit_types(u2) printf("%d, ", utypes[u].bridge[u2]);
	printf(" },\n");
	printf("  { ");
	for_all_unit_types(u2) printf("%d, ", utypes[u].mobility[u2]);
	printf(" },\n");
	printf("  %d, %d, %d, %d, %d,\n",
	       utypes[u].seealways, utypes[u].seebest, utypes[u].seeworst,
	       utypes[u].seerange, utypes[u].visibility);
	printf("  { ");
	for_all_terrain_types(t) printf("%d, ", utypes[u].conceal[t]);
	printf(" },\n");
	printf("  %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, \"%s\",\n",
	       utypes[u].parts, utypes[u].hp, utypes[u].crippled,
	       utypes[u].hitrange,
	       utypes[u].selfdestruct, utypes[u].changeside,
	       utypes[u].hittime, utypes[u].retreat,
	       utypes[u].counterable, utypes[u].arearadius,
	       utypes[u].destroymsg);
	printf("  { ");
	for_all_unit_types(u2) printf("%d, ", utypes[u].hit[u2]);
	printf(" },\n");
	printf("  { ");
	for_all_terrain_types(t) printf("%d, ", utypes[u].defense[t]);
	printf(" },\n");
	printf("  { ");
	for_all_unit_types(u2) printf("%d, ", utypes[u].damage[u2]);
	printf(" },\n");
	printf("  { ");
	for_all_resource_types(r) printf("%d, ", utypes[u].hitswith[r]);
	printf(" },\n");
	printf("  { ");
	for_all_resource_types(r) printf("%d, ", utypes[u].hitby[r]);
	printf(" },\n");
	printf("  { ");
	for_all_unit_types(u2) printf("%d, ", utypes[u].capture[u2]);
	printf(" },\n");
	printf("  { ");
	for_all_unit_types(u2) printf("%d, ", utypes[u].guard[u2]);
	printf(" },\n");
	printf("  { ");
	for_all_unit_types(u2) printf("%d, ", utypes[u].protect[u2]);
	printf(" },\n");
	printf("  %d, %d, %d, %d, %d, %d, %d, %d, %d\n",
	       utypes[u].territory, utypes[u].isneutral, utypes[u].maxquality,
	       utypes[u].skillf, utypes[u].disciplinef, utypes[u].maxmorale,
	       utypes[u].moralef, utypes[u].control, utypes[u].disband);
	printf(" },\n");
    }
    printf("};\n");
}

print_rtypes()
{
    int r;

    if (period.numrtypes > 0) {
	printf("\nRtype rtypes[MAXRTYPES] = {\n");
	for_all_resource_types(r) {
	    printf("{ '%c', \"%s\", \"%s\" },\n",
		   rtypes[r].rchar, rtypes[r].name, rtypes[r].help);
	}
	printf("};\n");
    } else {
	printf("\nRtype rtypes[MAXRTYPES];\n");
    }
}

print_ttypes()
{
    int t;

    printf("\nTtype ttypes[MAXTTYPES] = {\n");
    for_all_terrain_types(t) {
	printf("{ '%c', \"%s\", \"%s\",\n",
	       ttypes[t].tchar, ttypes[t].name, ttypes[t].color);
	printf("  %d, %d, %d, %d, %d, %d, %d, %d },\n",
	       ttypes[t].dark, ttypes[t].nuked,
	       ttypes[t].minalt, ttypes[t].maxalt,
	       ttypes[t].minwet, ttypes[t].maxwet,
	       ttypes[t].inhabitants, ttypes[t].independence);
    }
    printf("};\n");
}

print_snames()
{
    int i;

    if (period.numsnames > 0) {
	printf("\nchar *snames[MAXSNAMES] = {");
	for (i = 0; i < period.numsnames; ++i) {
	    if ((i % 5) == 0) printf("\n");
	    printf("\"%s\", ", snames[i]);
	}
	printf("};\n");
    }
}

print_unames()
{
    int i;

    if (period.numunames > 0) {
	printf("\nchar *unames[MAXUNAMES] = {");
	for (i = 0; i < period.numunames; ++i) {
	    if ((i % 5) == 0) printf("\n");
	    printf("\"%s\", ", unames[i]);
	}
	printf("};\n");
    }
}

/* Read a line and save it away.  This routine should be used sparingly, */
/* since the malloced space is never freed. */

char *
read_line(fp)
FILE *fp;
{
    char tmp[BUFSIZE], *line;

    fgets(tmp, BUFSIZE-1, fp); tmp[strlen(tmp)-1] = '\0';
    line = (char *) malloc(strlen(tmp)+2);
    strcpy(line, tmp);
    return line;
}

char *
copy_string(str)
char *str;
{
    char *rslt;

    rslt = (char *) malloc(strlen(str)+1);
    strcpy(rslt, str);
    return rslt;
}

/* This little routine goes at the end of all case statements on internal */
/* data that shouldn't go out of bounds.  We want a core dump to debug. */

case_panic(str, var)
char *str;
int var;
{
    fprintf(stderr, "Panic! Unknown %s %d\n", str, var);
    abort();
}