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 s

⟦61d2c143f⟧ TextFile

    Length: 2461 (0x99d)
    Types: TextFile
    Names: »scrap.c«

Derivation

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

TextFile


/*
 * Galactic Bloodshed (Robert Chansky, smq@ucscb.ucsc.edu)
 * scrap.c -- turn a ship to junk
 */

#include "vars.h"
#include "ships.h"
#include <signal.h>
#include <curses.h>
#include <setjmp.h>
extern jmp_buf main_jenv;
extern int Shipdata[NUMSTYPES][NUMABILS];
extern int Ignore_filelocks;
int scrap_shdata, scrap_pdata;


scrap(APcount, argn,args)
int APcount;
int argn;
char args[MAXARGS][COMMANDSIZE];
{
planettype *planet;
sectortype *sect;
shiptype *s;
int i,shfdata,mask,shipno,scrapval;
int scrap_handler();


scrap_shdata = scrap_pdata = NEUTRAL_FD;
signal(SIGINT, scrap_handler);


 if (argn<2) {
	printf("ship #");
	scanf("%d",&shipno);
	getchr();
 } else
	sscanf(args[1] + ((*args[1]=='#') ? 1 : 0), &shipno);

 openshdata(&scrap_shdata);
 if (!getship(scrap_shdata,&s,shipno)) {
	scrap_handler();
 }
 if (s->owner!=Playernum || s->is_dead) {
	DontOwnErr(shipno);
	free(s);
	scrap_handler();
 }
 if ( !(s->is_docked && s->whatdest==LEVEL_PLAN)) {
	printf("%s #%d is not landed.\n",Shipnames[s->type], shipno);
	free(s);
	scrap_handler();
 }
 if (!enufAP(Stars[s->storbits]->AP, APcount)) {
	printf("Not enough AP's (%d).\n",APcount);
	return;
 }

 openpdata(&scrap_pdata);
 getplanet(scrap_pdata, &planet, Stars[s->storbits]->planetpos[s->pnumorbits]);

 scrapval = Shipdata[s->type][ABIL_COST] * .75 + s->resource;
 if (s->type==OTYPE_VN)
	scrapval += (s->orders.object.number-1) * Shipdata[s->type][ABIL_COST];

 tty_on();
 printf("%s #%d:original cost: %d\n",
	Shipnames[s->type], shipno, Shipdata[s->type][ABIL_COST]);
 printf("        %s scrap value%s: %d. Junk (y/n)?", 
	s->type==OTYPE_VN ? "total" : "",
	s->resource ? "(with stockpile) " : "", scrapval);

 if (getchr()!='y') {
 	tty_off();
	putchr('\n');
	scrap_handler();
 }

 deductAPs(APcount, s->storbits, 0);

 tty_off();
 puts("\njunked.\n");

 for (i=0; i<MAXPSHIPS; i++)
	if (planet->shipnums[i] == shipno) {	
		planet->shipnums[i] = 0;
		planet->numships--;
	}

 openshfdata(&shfdata);
 destroyship(shfdata, shipno);
 close(shfdata);

 planet->info[Playernum-1].resource += scrapval;
 planet->info[Playernum-1].destruct += s->destruct;
 planet->info[Playernum-1].fuel += s->fuel;

 putplanet(scrap_pdata, planet, Stars[s->storbits]->planetpos[s->pnumorbits]);
 close(scrap_pdata);

 putship(scrap_shdata,s,shipno);
 close(scrap_shdata);
 free(s);

 sigsetmask(mask);	/* reset mask */
}



scrap_handler()
{
 close(scrap_shdata);
 close(scrap_pdata);
 longjmp(main_jenv,1);
}