|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T e
Length: 7220 (0x1c34) Types: TextFile Names: »empire.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Empire.V/V1.1/EMPIRE/empire.c«
#define D_FILES #define D_TELSTR #define D_NATSTR #define D_NATSTAT #define D_SCTSTR #include "empdef.h" #include <stdio.h> char cjunk[80], pjunk[80]; int uid, port; main(argc, argv) int argc; char **argv; { register i; int legit, notgod, logport; char *copy(), *cname(); if( argc > 1 ) copy(argv[1], cjunk); if( argc > 2 ) copy(argv[2], pjunk); argv[argc-1][0] = (char)-1; argv[argc-1][1] = '\0'; i = 15; while( --i > 2 ) close(i); notgod = (uid = myruid()) == privuid ? 0 : 1; port = ttyn(2); telf = open(downfil, O_RDONLY); if( telf >= 0 ) { read(telf, &tgm, (sizeof tgm)); printf("Empire down for repairs as of %s", ctime(&tgm.tel_date)); read(telf, junk, tgm.tel_length); printf("%s\n", junk); if( notgod != 0 ) exit(1); close(telf); } telf = open(upfil, O_RDONLY); if( telf >= 0 ) { read(telf, &tgm, (sizeof tgm)); read(telf, junk, tgm.tel_length); printf("%s\n", junk); close(telf); } if( argc < 2 ) { prmptrd("What nation do you represent? ", cjunk, 25); } if( cjunk[0] == '\0' ) exit(1); if( argc < 3 ) { printf("Your name? "); fflush(stdout); pjunk[sread(pjunk, 24)-1] = '\0'; printf("\n"); } if( (natf = open(natfil, O_RDWR)) <= 0 ) { printf("Can't open nation file.\n"); exit(3); } legit = 0; for( cnum=0; cnum < maxnoc; cnum++ ) { if( read(natf, &nat, (sizeof nat)) != (sizeof nat) ) break; if( cnum == 0 ) { up_offset = nat.nat_up_off; } if( same(cjunk, nat.nat_cnam) == 0 ) continue; legit = 1; if( notgod != 0 && nat.nat_playing != 0 && port != nat.nat_playing ) { logport = nat.nat_playing; legit = 2; } if( nat.nat_stat == STAT_DEAD ) legit = 5; if( notgod != 0 && nat.nat_nuid != uid && nat.nat_stat != STAT_NEW && nat.nat_stat != STAT_VISITOR && nat.nat_nuid != 0 ) legit = 3; if( same(pjunk, nat.nat_pnam ) == 0 && nat.nat_stat != STAT_VISITOR ) legit = 4; if( legit == 1 ) ok(); } switch( legit ) { case 0: printf("We have no '%s' in our records ...\n", cjunk); printf("If you wish to observe or apply see %s.\n", privname); exit(1); case 2: printf("You are already logged in on tty%c.\n", logport); exit(1); case 3: printf("Sorry, I don't recognize you, #%d\n", uid); exit(1); case 4: printf("You are not empowered to represent %s\n", cjunk); exit(1); case 5: printf("%s is a dead country.\n", cjunk); exit(1); } } ok() { char cnumbuf[2]; if( nat.nat_stat == STAT_NEW ) new(); nat.nat_playing = port; if( nat.nat_stat == STAT_VISITOR ) { printf("Type \"info\" or \"list\" for help."); printf(" Enjoy your visit.\n"); } else { printf("\t-=O=-\n"); } lseek(natf, (long)cnum * (sizeof nat), 0); write(natf, &nat, (sizeof nat)); if( nat.nat_money <= 1000 ) { if( nat.nat_stat != STAT_VISITOR ) { if( nat.nat_money > 0 ) { printf("Your cash reserves stand at $%ld\n", nat.nat_money ); } else { printf("You are broke!\n"); printf(" Mines & industries are on strike.\n"); } } } close(natf); cnum = cnum + 1; cnumbuf[0] = (char)cnum + '0'; cnumbuf[1] = '\0'; execl(emprog[1], "Empire", cnumbuf, "", "1", "\0377", 0); printf("Sorry, but the game is hiding... (%s missing)\n", emprog[1]); exit(); } new() { register i, s; long addr; struct sctstr s1, s2; if( (sectf = open(sectfil, O_RDWR)) < 0 ) { printf("Can't open sector file"); exit(3); } time(&nat.nat_date); srand((unsigned)nat.nat_date); i = 0; do { s = rand()%(w_xsize*w_ysize - 1); addr = (long)s * (sizeof sect); lseek(sectf, addr, 0); read(sectf, &s1, (sizeof sect)); read(sectf, &s2, (sizeof sect)); if( s1.sct_owned != 0 || s1.sct_desig < 3 || s2.sct_owned != 0 || s2.sct_desig < 3 ) continue; s1.sct_owned = s2.sct_owned = cnum; s1.sct_desig = s2.sct_desig = 2; s1.sct_effic = s2.sct_effic = 20; s1.sct_ore = s2.sct_ore = s1.sct_milit = s2.sct_milit = s1.sct_civil = s2.sct_civil = 127; s1.sct_mobil = s2.sct_mobil = 100; s1.sct_lstup = s2.sct_lstup = nat.nat_date/1800. - up_offset; lseek(sectf, addr, 0); write(sectf, &s1, (sizeof sect)); write(sectf, &s2, (sizeof sect)); close(sectf); printf("You have been accepted as nation #%d!\n", cnum); nat.nat_stat = STAT_NORMAL; nat.nat_btu = 75 ; nat.nat_nuid = uid; nat.nat_tgms = 0; nat.nat_xcap = s % w_xsize; nat.nat_ycap = s / w_xsize; i = 0; do { nat.nat_b[i].b_xl = 0; nat.nat_b[i].b_xh = 1; nat.nat_b[i].b_yh = 0; nat.nat_b[i].b_yl = 0; } while( ++i < 4 ); nat.nat_money = 5000; printf("Your country consists of 2 sectors"); printf(" (sanctuaries at 0,0 & 1,0),\n"); printf("containing 254 civilians, 254 military troops"); printf(" and 254 tons of ore.\n"); printf("Your country also has $%ld in \"cash\".\n", nat.nat_money); printf("For playing information type:\n"); printf("\"command list\" and/or \"info\""); printf(" and/or \"info overview\"\n"); printf("in response to the \"[75] Command : \" prompt\n"); printf("\n\t\tGood Luck!\n"); return; } while( ++i < 1000 ); printf("The world is already too full... sorry\n"); exit(1); }