|
|
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 a
Length: 5019 (0x139b)
Types: TextFile
Names: »argv.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/Sun/Sdi/argv.c«
/****************************************** argv.c *******************/
#include <stdio.h>
#include "sdi.h"
#include <sunwindow/notify.h>
/*
* Copyright 1987 by Mark Weiser.
* Permission to reproduce and use in any manner whatsoever on Suns is granted
* so long as this copyright and other identifying marks of authorship
* in the code and the game remain intact and visible. Use of this code
* in other products is reserved to me--I'm working on Mac and IBM versions.
*/
/*
* Handle command line arguments, and do some font fiddling.
*/
process_args(argc, argv)
int argc;
char **argv;
{
extern int time_to_play,
starting_icon,
starting_icon_time,
starting_level,
starting_skill,
restoring_game;
while (--argc > 0) {
argv++;
if ((*argv)[0] != '-') {
fprintf(stderr, "Unrecognizable argument '%s'.\n", *argv);
exit(1);
} else {
switch((*argv)[1]) {
case 'b': {
/* name of a file with a blast pixrect to use */
struct pixrect *pr, *icon_load_mpr();
char error_msg[256], *oldv = *argv;
argc--; argv++;
if (! out_of_args(argc, oldv)) {
if ((pr = icon_load_mpr(*argv, error_msg)) == NULL) {
printf("Could not get pr '%s'.\n", *argv);
printf("%s",error_msg);
} else {
switch(oldv[2]) {
/* cities */ case 'c': change_circ(citykillcircles, pr); break;
/* lasers */ case 'l': change_circ(lasercircles, pr); break;
/* laser ends */ case 'k': change_circ(laserkillcircles, pr); break;
/* missile death */ case 'm': change_circ(blastkillcircles, pr); break;
/* interceptors */ case 'b': change_circ(bigblastcircles, pr); break;
default: {
printf("unrecognized option: '%s'.\n",oldv);
exit(1);
}
}
}
}
break;
}
case 'c': {
/* name of a file with a city pixrect to use */
argc--; argv++;
if (! out_of_args(argc, "-c")) {
init_city_bits(*argv);
}
break;
}
case 'd': {
/* delay to use between screen updates */
argc--; argv++;
if (! out_of_args(argc, "-d")) {
blast_delay = atol(*argv);
}
break;
}
case 'f': {
/* new score file */
argc--; argv++;
if (! out_of_args(argc, "-f")) {
scorefile = *argv;
}
break;
}
case 'g': {
extern int gamemaster;
/* set gamemaster mode */
gamemaster = 1;
break;
}
case 'h': {
/* height of playing windows */
argc--; argv++;
if (! out_of_args(argc, "-h")) {
max_y = max(MINWIN, atol(*argv));
}
break;
}
case 'i': {
/* starting icon type */
argc--; argv++;
if (! out_of_args(argc, "-i")) {
starting_icon = atol(*argv);
starting_icon = min(2, max(0, starting_icon));
}
/* starting icon time */
argc--; argv++;
if (! out_of_args(argc, "-i")) {
starting_icon_time = atol(*argv);
starting_icon_time = min(50, max(1, starting_icon_time));
}
break;
}
case 'p': {
/* select the pointer style */
extern int cursor_type;
argc--; argv++;
if (! out_of_args(argc, "-p")) {
cursor_type = atol(*argv);
cursor_type = min(2, max(0, cursor_type));
}
break;
}
case 'r': {
/* restore a saved game */
argc--; argv++;
if (! out_of_args(argc, "-r")) {
strcpy(save_file_name, *argv);
restoring_game = 1;
}
break;
}
case 's': {
/* starting skill*/
argc--; argv++;
if (! out_of_args(argc, "-s")) {
starting_skill = atol(*argv);
starting_skill = min(2, max(0, starting_skill));
}
break;
}
case 't': {
/* maximum playing time, in seconds */
argc--; argv++;
if (! out_of_args(argc, "-t")) {
time_to_play = atol(*argv);
}
break;
}
case 'w': {
/* width of playing windows */
argc--; argv++;
if (! out_of_args(argc, "-w")) {
max_x = max(MINWIN, atol(*argv));
}
break;
}
default: {
fprintf(stderr, "Unrecognizable argument '%s'.\n", *argv);
break;
}
}
}
}
}
/* the following kludge is necessary because there seems to be no
* SunView subroutine which sets the default font for all the windows.
* WIN_FONT explicitly disclaims doing this. Only -Wt on the argument
* claims to....
*/
fixup_font(pargc, pargv, font_name)
int *pargc;
char ***pargv;
char *font_name;
{
int i;
int argc = *pargc;
char **argv = *pargv;
char **new_argv = (char **)calloc(sizeof(char *), argc+3);
for (i = 1; i < argc; i += 1) {
new_argv[i+2] = argv[i];
}
new_argv[0] = argv[0];
new_argv[1] = "-Wt";
new_argv[2] = font_name;
*pargc += 2;
*pargv = new_argv;
}
open_our_font(s)
char *s;
{
if ((font = (struct pixfont *)pf_open(s)) == NULL)
font = (struct pixfont *)pf_default();
}
out_of_args(n, s)
char *s;
{
if (n > 0) {
return 0;
} else {
fprintf(stderr, "Argument '%s' not followed by a value.\n", s);
/* return 1; */
exit(1);
}
}