|
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 g
Length: 3298 (0xce2) Types: TextFile Names: »getsect.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Empire.V/V1.1/EMPSUBS/getsect.c«
#define D_UPDATE #define D_NATSTAT #define D_SECTDES #define D_SCTSTR #define D_FILES #include "empdef.h" int gslx, gsly, gsli; getsect(i, j, selup) int i, j, selup; { register k; long addr, lseek(); k = (((long)capy + j + w_ysize)%w_ysize)*w_xsize + ((long)capx + i + w_xsize)%w_xsize; addr = (long)k * sizeof(sect); lseek(sectf, addr, 0); if( read(sectf, §, sizeof(sect)) < sizeof(sect) ) { sprintf(fmtbuf,"getsect(%d, %d) failed for country #%d", i, j, cnum); erlog(fmtbuf); return(-1); } if( (sect.sct_desig & 0177) > S_XCHNG ) { printf("Program Error (sct_desig) Save output & notify %s (%s)\n", privname, privlog); sprintf(fmtbuf,"getsect(%d, %d) got a desig=%d for cnum=%d", i, j, sect.sct_desig, cnum); erlog(fmtbuf); return(-1); } gslx = i; gsly = j; gsli = k; owner = (cnum == sect.sct_owned || nstat == STAT_GOD) ? 1 : 0; if( selup == UP_NONE ) return(0); if( cnum != 0 || (selup & (UP_OWN|UP_ALL|UP_TIME|UP_GOD)) ) { if( update(i, j, selup) == 1) putsect(i, j); } return(0); } putsect(i, j) int i, j; { register k; register struct sctstr *sp; struct sctstr auxsect; long addr, lseek(); sp = § if( sp->sct_desig <= S_XCHNG ) goto X136; X32: printf("Program error! Save output & notify %s (%s)\n", privname, privlog); abort(); sprintf(fmtbuf,"putsect(%d, %d) got a desig=%d for cnum=%d", i, j, sp->sct_desig , cnum); erlog(fmtbuf); return(-1); X136: if( sp->sct_desig != S_BSPAN ) goto X264; if( sp->sct_effic >= 20 ) goto X264; sp->sct_desig = S_WATER; sp->sct_mobil = sp->sct_dfend = sp->sct_civil = 0; sp->sct_milit = sp->sct_shell = sp->sct_guns = 0; sp->sct_plane = sp->sct_ore = sp->sct_gold = 0; printf("A bridge span at %d,%d has collapsed\n", i, j); X264: if( sp->sct_civil != 0 ) goto X302; if( sp->sct_milit != 0 ) goto X302; sp->sct_owned = 0; X302: if( sp->sct_owned != 0 ) goto X312; sp->sct_lstup = 0; X312: k = (((long)w_ysize + j + capy)%w_ysize)*w_xsize + ((long)w_xsize + i + capx)%w_xsize; if( gsli == k ) goto X570; printf("Program error! Save output & notify %s (%s).\n", privname, privlog); abort(); sprintf(fmtbuf,"putsect(%d, %d) followed getsect(%d, %d)", i, j, gslx, gsly); erlog(fmtbuf); return(-1); X570: addr = (long)k * sizeof(sect); lseek(sectf, addr, 0); read(sectf, &auxsect, sizeof(auxsect)); if( sect.sct_desig == S_WATER && auxsect.sct_desig != S_WATER && auxsect.sct_desig != S_BSPAN ) goto X32; if( sect.sct_desig == S_MOUNT && auxsect.sct_desig != S_MOUNT ) goto X32; if( sect.sct_desig == S_RURAL && (auxsect.sct_miner != sect.sct_miner || auxsect.sct_gmin != sect.sct_gmin) ) goto X32; lseek(sectf, addr, 0); write(sectf, §, sizeof(sect)); return(0); }