home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
games
/
volume6
/
ega-wanderer
/
patch1
/
m.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-02-24
|
5KB
|
242 lines
#include "wand_head.h"
#include <sys/types.h>
#include <sys/stat.h>
#ifdef EGA
#include "bitmap.h"
struct termio sav;
extern int EGAifd; /* Usually 0, but could be a vt under 386/ix */
#endif
int debug_disp = 0;
int no_passwords = 0;
int maxscreens;
int edit_mode = 0;
int saved_game = 0;
char *edit_screen;
char *screenpath;
/* Screen[NOOFROWS][ROWLEN] is centered inside area[NOOFROWS+2][ROWLEN+2].
* This prevents fall() from accessing some random characters outside of
* screen[][] that happen to match a boulder, etc.
*/
char area[1+NOOFROWS+1][1+ROWLEN+1];
char (*screen)[ROWLEN+1+1] = &area[1][1];
main(argc,argv)
int argc;
char *argv[];
{
struct stat statbuf;
int num,bell = 0,maxmoves = 0,x,y;
long score = 0;
char howdead[25],buffer[100], *name,*keys,*dead;
char *malloc();
char *getenv();
#ifdef EGA
extern char *EGAaddr;
extern bitmap wanderer;
#endif
if((screenpath = getenv("SCREENPATH")) == NULL)
screenpath = SCREENPATH;
if(argc == 2)
{
if(!strcmp(argv[1], "-e"))
{
edit_mode = 1;
edit_screen = NULL;
}
else if(!strcmp(argv[1], "-m"))
{
erase_scores();
return 0;
}
else if(!strcmp(argv[1], "-c"))
{
char ch;
int fp;
/* show credits */
sprintf(buffer,"%s/credits",screenpath);
if((fp = open(buffer,O_RDONLY)) == -1) {
printf(" Sorry - credits unavailable!\n");
exit(1);
}
while(read(fp,&ch,1) == 1)
putchar(ch);
putchar('\n');
exit(0);
}
else if(!strcmp(argv[1], "-s"))
{
savescore("",0L,0,NULL);
return 0;
}
else if(!strcmp(argv[1], "-f"))
{
debug_disp = 1;
}
else
{
fprintf(stderr,"Usage: %s [ -e [file] | -m | -c | -s | -f ]\n",argv[0]);
exit(1);
}
}
if(argc > 2)
{
if(!strcmp(argv[1],"-e"))
{
edit_mode = 1;
edit_screen = argv[2];
}
else
{
fprintf(stderr,"Usage: %s [ -e [file] | -m | -c | -s | -f ]\n",argv[0]);
exit(1);
}
}
/* use passwords? if file "no_pws" exists and is readable, then no pws! */
sprintf(buffer,"%s/no_pws",screenpath);
if(access(buffer,4) == 0)
no_passwords = 1;
/* count available screens */
for(maxscreens = 0;;maxscreens++) {
sprintf(buffer,"%s/screen.%d",screenpath,(maxscreens+1));
if(stat(buffer,&statbuf) == -1)
break;
}
if((name = getenv("NEWNAME")) == NULL)
if((name = getenv("NAME")) == NULL)
if((name = getenv("FULLNAME")) == NULL)
if((name = getenv("USER")) == NULL)
if((name = getenv("LOGNAME")) == NULL)
#ifdef ASKNAME /* M001 */
{
name = malloc(80);
if (name == NULL) {
printf("malloc error\n");
exit(1);
}
printf("Name? "); fflush(stdout);
gets(name);
if (name[0] == '\0')
name = "noname";
}
#else
name = "noname";
#endif
if((keys = getenv("NEWKEYS")) == NULL)
keys = "kjhl";
#ifdef EGA
if(egainit()) {
struct termio cb;
/*
* set stdin to raw mode
*/
ioctl(EGAifd, TCGETA, &sav);
cb = sav;
cb.c_cc[VMIN] = 1;
cb.c_cc[VTIME] = 255;
cb.c_lflag &= ~(ECHO | ICANON);
ioctl(EGAifd, TCSETAW, &cb);
egapaint( 233,95, &wanderer );
sleep( 3 );
}
else
#endif
{
initscr();
keypad(stdscr, TRUE);
CBON;
noecho();
}
/* MAIN PROGRAM HERE */
play_again:
if(!edit_mode) {
howdead[0] = 0;
for (num=1; num <= maxscreens; ++num) {
if (rscreen(num,&maxmoves)) {
strcpy(howdead,"a non-existant screen");
break;
}
dead = playscreen(&num,&score,&bell,maxmoves,keys);
if ((dead != NULL) && (*dead == '~')) {
num = (int)(dead[1]) - 1;
dead = NULL;
}
if (dead != NULL)
{
strcpy(howdead,dead);
break;
}
}
}
else
{
if(rscreen(num,&maxmoves))
{
for(x=0;x<ROWLEN;x++)
for(y=0;y<NOOFROWS;y++)
screen[y][x] = ' ';
}
edit(num,&score,&bell,maxmoves,keys);
}
/* END OF MAIN PROGRAM */
#ifdef EGA
if(!EGAaddr)
#endif
{
echo();
CBOFF;
endwin();
}
if(!edit_mode) {
/* SAVE ROUTINES FOR SCORES */
#ifdef NO_RESTORED_GAME_HISCORES
if(saved_game) {
#ifdef EGA
if(!EGAaddr)
#endif
printf("No scores recorded for restored games.\n");
}
else
#endif
savescore(howdead,score,num,name);
#ifdef EGA
if(EGAaddr) {
egaputs(4,341,"Play again? ");
egagets(4+12*8,341,buffer);
if(buffer[0] == 'y' || buffer[0] == 'Y') {
score = 0;
saved_game = 0;
goto play_again;
}
}
#endif
}
#ifdef EGA
if(EGAaddr) {
egareset();
ioctl(EGAifd, TCSETAW, &sav);
}
#endif
printf("WANDERER (C) 1988 S. Shipway\n");
return 0;
}