Thread View: alt.games.gb
1 messages
1 total messages
Started by John Deragon
Sat, 02 Jan 1993 03:20
Small utility
Author: John Deragon
Date: Sat, 02 Jan 1993 03:20
Date: Sat, 02 Jan 1993 03:20
418 lines
12583 bytes
12583 bytes
Howdy.... enclosed is a small utility progammed called exship
(examine ship). It will basically open the "ship" database, and
check for problems with it. (ie: ships with cargo greater than
ships capacity).
Also you can specify a ship number, and the program will print out
various details of the specified ship.
See the README file for more info. Be warned, this was only something
I hacked together in about 30 minutes, its not in anyway a work or art,
but it is useful.
#!/bin/sh
# This is a shell archive (shar 3.43)
# made 01/02/1993 03:14 UTC by deragon@jethro
# Source directory /work/devel/GB+/utils
#
# existing files will NOT be overwritten unless -c is specified
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 6927 -r--r--r-- exship.c
# 2528 -rw-rw-r-- README
#
# ============= exship.c ==============
if test -f 'exship.c' -a X"$1" != X"-c"; then
echo 'x - skipping exship.c (File already exists)'
else
echo 'x - extracting exship.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'exship.c' &&
#ident "@(#)exship.c 1.2 1/1/93 "
/***********************************************
X * exship.c
X *
X * Created: Fri Jan 1 19:34:23 EST 1993
X * Author: J. Deragon (deragon@jethro.nyu.edu)
X *
X * Version: 1.2 22:05:01
X *
X * This software is provided "as is" and without any express or
X * implied warranties, including, without limitation, the implied
X * warranties of merchantibility and fitness for a particular
X * purpose.
X *
X ***********************************************/
X
/*
X * includes
X */
#include <strings.h>
#include <signal.h>
#include <sys/file.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#define EXTERN extern
#include "ships.h"
#include "shipdata.h"
X
X
#define DATAFILE "ship"
X
/*
X * Prototypes
X */
X
void check_ship();
void check_size();
void display_ship();
#ifdef __STDC__
void main(int, char **);
void readship(shiptype **, int);
#else
void main();
void readship();
#endif
X
X
/*
X * Global vars
X */
X
static int ship_fd; /* the file descriptor of the datafile */
struct stat buffer; /* used for getting the size of the file */
int num_ships; /* number of total ships in database */
int bad_ship_count = 0; /* the number of bad ships in the
X * database */
shiptype *display; /* this ship we are currently working on */
X
/*
X * main:
X *
X * arguments: shipnumber
X *
X * called by:
X *
X * description: If invoked with zero arguments, it will open the ship datafile
X * and go through looking for obvious errors. If invoked with a ship number
X * it will print out a very verbose listing of the requested ship.
X *
X */
void
main(argc, argv)
X int argc;
X char *argv[];
{
X int i;
X
X if ((ship_fd = open(DATAFILE, 000, 0777)) < 0) {
X perror(main);
X printf("unable to open %s\n", DATAFILE);
X exit(-1);
X }
X check_size();
X
X if (argc == 1) { /* check the whole database for errors */
X for (i = 1; i <= num_ships; i++) {
X readship(&display, i);
X check_ship();
X free(display);
X }
X printf("I found a total of %d bad ships out of %d\n",
X bad_ship_count, num_ships);
X } else { /* we want a specific ship display */
X readship(&display, atoi(argv[1]));
X display_ship();
X }
X printf("All Done \n");
X
X exit(3);
}
X
/*
X * readship:
X *
X * arguments: shiptype structure, shipnumber
X *
X * called by:
X *
X * description: This funtion reads the actual data from the file.
X *
X */
X
void
readship(s, shipnum)
X shiptype **s;
X int shipnum;
{
X int n;
X
X if (shipnum <= 0)
X exit(1);
X
X if ((*s = (shiptype *) malloc(sizeof(shiptype))) == 0) {
X printf("getship:Malloc() error\n");
X exit(0);
X }
X if (lseek(ship_fd, (shipnum - 1) * sizeof(shiptype), L_SET) < 0) {
X perror(lseek);
X exit(1);
X }
X if ((n = read(ship_fd, (char *) *s, sizeof(shiptype))) != sizeof(shiptype))
X perror(read);
X
X
X
}
X
/*
X * check_size:
X *
X * arguments: none
X *
X * called by: main
X *
X * description: gets the number of ships in the current database
X *
X */
void
check_size()
{
X
X
X fstat(ship_fd, &buffer);
X num_ships = buffer.st_size / sizeof(shiptype);
X printf("Number of ships in database is %d\n", num_ships);
}
X
/*
X * check_ship:
X *
X * arguments: none
X *
X * called by: main
X *
X * description: checks basic cargo to make sure its within limits of ships
X * ability.
X *
X */
void
check_ship()
{
X int ship_ok = 1;
X int pop, troops, res, des, fu, speed, hanger;
X
X pop = troops = res = des = fu = speed = hanger = 1;
X
X if (display->type == OTYPE_FACTORY) {
X if (display->popn > Shipdata[(display)->type][ABIL_MAXCREW])
X ship_ok = pop = 0;
X if (display->troops > Shipdata[(display)->type][ABIL_MAXCREW])
X ship_ok = troops = 0;
X if ((display->popn + display->troops) >
X Shipdata[(display)->type][ABIL_MAXCREW])
X ship_ok = pop = troops = 0;
X } else {
X if (display->popn > display->max_crew)
X ship_ok = pop = 0;
X if (display->troops > display->max_crew)
X ship_ok = troops = 0;
X if ((display->popn + display->troops) > display->max_crew)
X ship_ok = pop = troops = 0;
X }
X if (display->resource > Max_resource(display))
X ship_ok = res = 0;
X if (display->destruct > Max_destruct(display))
X ship_ok = des = 0;
X if ((int) display->fuel > Max_fuel(display))
X ship_ok = fu = 0;
X if (display->speed > Max_speed(display))
X ship_ok = speed = 0;
X if (display->hanger > display->max_hanger)
X ship_ok = hanger = 0;
X
X if (!ship_ok) {
X bad_ship_count++;
X
X printf("Problem with ship number %d\n", display->number);
X printf("\t\tOwner: %d\n", display->owner);
X printf("\t\tGovernor: %d\n", display->governor);
X printf("\t\tName: %s\n", display->name);
X printf("\t\tType: %c\n", Shipltrs[display->type]);
X printf("\n");
X
X printf("\t %s popn: %d\t max_popn: %d:\n",
X pop ? " " : "----->", display->popn, display->max_crew);
X printf("\t %s troops: %d\t max_troops: %d\n",
X troops ? " " : "----->", display->troops, display->max_crew);
X printf("\t %s resources: %d\t max_resources: %d\n",
X res ? " " : "----->", display->resource,
X display->max_resource);
X printf("\t %s destruct: %d\t max_destruct: %d\n",
X des ? " " : "----->", display->destruct,
X display->max_destruct);
X printf("\t %s fuel: %d\t max_fuel: %d\n",
X fu ? " " : "----->", (int) display->fuel,
X (int) display->max_fuel);
X printf("\t %s speed: %d\t max_speed: %d\n",
X speed ? " " : "----->", display->speed, display->max_speed);
X printf("\t %s hanger: %d\t max_hanger: %d\n",
X hanger ? " " : "----->", display->hanger,
X display->max_hanger);
X }
}
X
/*
X * display_ship:
X *
X * arguments: none
X *
X * called by: main
X *
X * description: Prints a _long_ description a a specific ship.
X *
X */
void
display_ship()
{
X printf("Ship Number: %d\tShip Type: %c\tShip Owner: %d\tShip Governor %d\n",
X display->number, Shipltrs[display->type],
X display->owner, display->governor);
X printf("Ship Name: %s\n", display->name);
X
X printf("\nCrew: %-9d\t Troops: %-6d\tArmor: %d\n",
X display->popn, display->troops, display->armor);
X printf("Size: %-9d\t Base Mass: %-4.1f\tBase Tech: %4.1f\n",
X display->size, display->base_mass, display->tech);
X printf("Destruct: %-6d Resources: %-6d\tCrystals: %d\n",
X display->destruct, display->resource, display->crystals);
X printf("Fuel: 4.1f\n", display->fuel);
X printf("\n");
X printf("Guns:\tPrimary: %-3d%c\n", display->primary,
X (display->primtype == LIGHT ? 'L' :
X display->primtype == MEDIUM ? 'M' :
X display->primtype == HEAVY ? 'H' : 'N'));
X printf(" \tSecondary: %-3d%c\n", display->primary,
X (display->primtype == LIGHT ? 'L' :
X display->primtype == MEDIUM ? 'M' :
X display->primtype == HEAVY ? 'H' : 'N'));
X
X printf("\nNextship: %-6d\t (%s)\n", display->nextship,
X display->alive ? "ALIVE" : "DEAD");
}
SHAR_EOF
chmod 0444 exship.c ||
echo 'restore of exship.c failed'
Wc_c="`wc -c < 'exship.c'`"
test 6927 -eq "$Wc_c" ||
echo 'exship.c: original size 6927, current size' "$Wc_c"
fi
# ============= README ==============
if test -f 'README' -a X"$1" != X"-c"; then
echo 'x - skipping README (File already exists)'
else
echo 'x - extracting README (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'README' &&
X This is a small utility to examine the ship database for Galactic
Bloodshed. It can be used two ways:
X
X a: run exship with no arguments, and it will scan through the entire
X database, looking for ships whose cargo exceeds the maximum allowed.
X
X b: run exship with a ship_number and it will display a more verbose
X listing of the ships.
X
X The following are sample outputs from both cases...
X
X tensha%: exship
X Number of ships in database is 5
X Problem with ship number 1
X Owner: 1
X Governor: 0
X Name: Tester
X Type: @
X
X popn: 10 max_popn: 10:
X troops: 0 max_troops: 10
X -----> resources: 600 max_resources: 500
X destruct: 100 max_destruct: 100
X fuel: 1000 max_fuel: 1000
X speed: 0 max_speed: 0
X hanger: 0 max_hanger: 0
X I found a total of 1 bad ships out of 5
X All Done
-----
X
X As you can see there is a problem with the ship [denoted by the ----->]
X in which the ship has more resources loaded then it should have. It also
X at the top of the screen will display the number of ships in the database.
X
X
X When run with a argument, the following is the output:
X
X tensha%: exship 1
X Number of ships in database is 5
X Ship Number: 1 Ship Type: @ Ship Owner: 1 Ship Governor 0
X Ship Name: Tester
X
X Crew: 10 Troops: 0 Armor: 20
X Size: 25 Base Mass: 100.0 Base Tech: 100.0
X Destruct: 100 Resources: 600 Crystals: 0
X Fuel: 4.1f
X
X Guns: Primary: 10 L
X Secondary: 10 L
X
X Nextship: 2 (ALIVE)
X All Done
X
-----
X
X Compliling information:
X
X This program has only been tested on a Suns running Sun OS 4.1.1, and
X compiled succesfully with the Sun compilier and gcc 1.42.
X
X compile with the following line:
X
X gcc -I/work/GB/hdrs -g -o exship exship.c
X
X but change /work/GB/hdrs to be the location where the compiler can
X find the ships.h and shipdata.h files. (these files are part of the GB
X release)
X
X
X This is something I hacked together very very quickly to just fix
X a few problems with the database. It is not meant to be a catch all
X for database problems. If I have some time in the future, I will
X add new bells and whistles. Feel free to modify this source, and if
X you make any improvements, please email them back to me, so I can
X merge them into the next version.
X
X
X John Paul Deragon
X deragon@jethro.nyu.edu
X Fri Jan 1 21:58:49 EST 1993
SHAR_EOF
chmod 0664 README ||
echo 'restore of README failed'
Wc_c="`wc -c < 'README'`"
test 2528 -eq "$Wc_c" ||
echo 'README: original size 2528, current size' "$Wc_c"
fi
exit 0
--
-----
John Deragon deragon@cs.nyu.edu | deragon@jethro.cs.nyu.edu
-----
Space is big. You just won't believe how vastly, hugely, mind-bogglingly
big it is. I mean, you may think it's a long way down the road to the
drug store, but that's just peanuts to space.
-- "The Hitchhiker's Guide to the Galaxy"
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads