diff -Npur omega.orig/char.c omega/char.c --- omega.orig/char.c 1999-01-01 01:08:14.000000000 +0100 +++ omega/char.c 2011-09-04 16:57:14.434766949 +0200 @@ -99,7 +99,7 @@ FILE *omegarc_check() if ((fd = fopen("omega.rc","rb")) != NULL) { print2("Use omega.rc charcter record in current directory? [yn] "); #else - sprintf(Str1, "%s/.omegarc", getenv("HOME")); + snprintf(Str1, sizeof(Str1)-1, "%s/.omegarc", getenv("HOME")); if ((fd = fopen(Str1,"r")) != NULL) { print2("Use .omegarc in home directory? [yn] "); #endif @@ -140,7 +140,7 @@ void save_omegarc() #if defined(MSDOS) || defined(AMIGA) fd = fopen("omega.rc","wb"); #else - sprintf(Str1, "%s/.omegarc", getenv("HOME")); + snprintf(Str1, sizeof(Str1)-1, "%s/.omegarc", getenv("HOME")); fd = fopen(Str1,"w"); #endif if (fd == NULL) diff -Npur omega.orig/command3.c omega/command3.c --- omega.orig/command3.c 1999-01-01 01:08:16.000000000 +0100 +++ omega/command3.c 2011-09-04 16:57:14.435766949 +0200 @@ -215,7 +215,7 @@ void version() print3(VERSIONSTRING); nprint3(":"); nprint3(" Last Edited: "); - nprint3(LAST_OMEGA_EDIT_DATE); + nprint3(__DATE__" "__TIME__); } void fire() diff -Npur omega.orig/compress.c omega/compress.c --- omega.orig/compress.c 1998-08-08 12:47:56.000000000 +0200 +++ omega/compress.c 2011-09-04 16:57:14.435766949 +0200 @@ -104,7 +104,7 @@ static char sccsid[] = "@(#)compress.c 5 #ifdef PBITS /* Preferred BITS for this memory size */ # ifndef BITS # define BITS PBITS -# endif BITS +# endif /* BITS */ #endif /* PBITS */ #if BITS == 16 @@ -293,6 +293,8 @@ char_type magic_header[] = { "\037\235" */ static char rcs_ident[] = "$Header: /home/wtanksle/cvs/omega/compress.c,v 1.2 1998/08/08 10:47:56 wtanksle Exp $"; +#include +#include #include #include #include @@ -347,7 +349,7 @@ unsigned short codetab [HSIZE]; #else count_int htab [HSIZE]; unsigned short codetab [HSIZE]; -#endif sel +#endif /* sel */ #define htabof(i) htab[i] #define codetabof(i) codetab[i] @@ -1093,7 +1095,7 @@ getcode() { return code; } -#ifndef __GO32__ +#if 0 char * rindex(s, c) /* For those who don't have it in libc.a */ register char *s, c; diff -Npur omega.orig/defs.h omega/defs.h --- omega.orig/defs.h 1999-01-01 01:08:19.000000000 +0100 +++ omega/defs.h 2011-09-04 16:57:14.436766949 +0200 @@ -45,7 +45,8 @@ on save and restore. */ This might usually be "/usr/games/lib/omegalib/", for unix, or something like "c:\\games\\omega\\omegalib\\" for msdos */ -#define OMEGALIB "./lib/" +#define OMEGALIB "/usr/share/games/omega/" +#define OMEGAVAR "/var/games/omega/" /* Comment the following line out if you want users to be able to override */ /* the OMEGALIB define, above, by setting the environment variable OMEGALIB */ @@ -59,7 +60,7 @@ on save and restore. */ /* set WIZARD to maintainers's username */ -#define WIZARD "wtanksle" +#define WIZARD "root" /* If CATCH_SIGNALS is set to 1, will not dump core, nicer for players. */ /* dbx still intercepts the signals first, so it's ok for debugging */ diff -Npur omega.orig/effect1.c omega/effect1.c --- omega.orig/effect1.c 1999-01-01 01:08:20.000000000 +0100 +++ omega/effect1.c 2011-09-04 16:57:14.436766949 +0200 @@ -81,11 +81,11 @@ int delta; } } else { - if (Player.possessions[i]->plus > random_range(20)+1) { + if (abs(Player.possessions[i]->plus) > random_range(20)+1) { print1("Uh-oh, the force of the enchantment was too much!"); print2("There is a loud explosion!"); morewait(); - manastorm(Player.x,Player.y,Player.possessions[i]->plus*5); + manastorm(Player.x,Player.y,abs(Player.possessions[i]->plus)*5); dispose_lost_objects(1,Player.possessions[i]); } else { @@ -395,7 +395,10 @@ int fx,fy,tx,ty,dmg,dtype; for(i=0;i<9;i++) { ex = xx + Dirs[0][i]; ey = yy + Dirs[1][i]; - + + if(offscreen(ey)) + continue; + if ((ex == Player.x) && (ey == Player.y)) { switch(dtype) { case FLAME:mprint("You were blasted by a fireball!"); diff -Npur omega.orig/file.c omega/file.c --- omega.orig/file.c 1999-01-01 01:08:26.000000000 +0100 +++ omega/file.c 2011-09-04 16:57:14.437766949 +0200 @@ -12,6 +12,7 @@ # include # endif # include +# include # include # include # include @@ -155,11 +156,11 @@ void lock_score_file() int lock, attempts, thispid, lastpid = 0; FILE *lockfile; - strcpy(Str1,Omegalib); + strcpy(Str1,Omegavar); strcat(Str1,"omega.hi.lock"); do { - lock = open(Str1, O_CREAT|O_EXCL, 0600); /* create lock file */ + lock = open(Str1, O_WRONLY|O_CREAT|O_EXCL, 0600); /* create lock file */ if (lock < 0 && errno == EEXIST) { lockfile = fopen(Str1, "rb"); @@ -189,7 +190,7 @@ void lock_score_file() void unlock_score_file() { #ifndef MSDOS - strcpy(Str1,Omegalib); + strcpy(Str1,Omegavar); strcat(Str1,"omega.hi.lock"); unlink(Str1); #endif @@ -201,7 +202,7 @@ void showscores() int i; lock_score_file(); - strcpy(Str1,Omegalib); + strcpy(Str1,Omegavar); strcat(Str1,"omega.hi"); fd = checkfopen(Str1,"rb"); filescanstring(fd,Hiscorer); @@ -282,10 +283,10 @@ int npc; if (gamestatusp(CHEATED)) return; lock_score_file(); - strcpy(Str1,Omegalib); + strcpy(Str1,Omegavar); strcat(Str1,"omega.hi"); infile = checkfopen(Str1,"rb"); - strcpy(Str2,Omegalib); + strcpy(Str2,Omegavar); #ifdef MSDOS strcat(Str2,"omegahi.new"); /* stupid 8.3 msdos filename limit */ #else @@ -353,6 +354,7 @@ int npc; } fclose(infile); fclose(outfile); + chmod(Str2, 0664); unlink(Str1); #if defined(MSDOS) || defined(AMIGA) rename(Str2, Str1); @@ -414,7 +416,7 @@ int lifestatus; change_to_game_perms(); npcbehavior=fixnpc(lifestatus); checkhigh(descrip,npcbehavior); - strcpy(Str1,Omegalib); + strcpy(Str1,Omegavar); strcat(Str1,"omega.log"); fd = checkfopen(Str1,"a"); fprintf(fd, " %d %d %d %s\n", lifestatus, Player.level, npcbehavior, @@ -488,10 +490,15 @@ char *required_file_list[] = "speak.dat", "temple.dat", "abyss.dat", "village1.dat", "village2.dat", "village3.dat", "village4.dat", "village5.dat", "village6.dat", "home1.dat", "home2.dat", "home3.dat", "arena.dat", "maze1.dat", - "maze2.dat", "maze3.dat", "maze4.dat", "omega.hi", "omega.log", "motd.txt", + "maze2.dat", "maze3.dat", "maze4.dat", "motd.txt", "license.txt", "circle.dat", NULL }; +char *required_writeable[] = +{ + "omega.hi", "omega.log", NULL +}; + char *optional_file_list[] = { "help1.txt", "help2.txt", "help3.txt", "help4.txt", "help5.txt", @@ -508,24 +515,30 @@ int filecheck() int endpos; int file; - strcpy(Str1, Omegalib); + strcpy(Str1, Omegavar); endpos = strlen(Str1); - for (file = 0; required_file_list[file]; file++) + for (file = 0; required_writeable[file]; file++) { - strcpy(&(Str1[endpos]), required_file_list[file]); - if ((strcmp(required_file_list[file], "omega.hi") == 0 || - strcmp(required_file_list[file], "omega.log") == 0) && - test_file_access(Str1, 'w') == 0) + strcpy(&(Str1[endpos]), required_writeable[file]); + if (test_file_access(Str1, 'w') == 0) { impossible = TRUE; printf("\nError! File not appendable or accessible: %s", Str1); } - else if (test_file_access(Str1, 'r') == 0) + } + + strcpy(Str1, Omegalib); + endpos = strlen(Str1); + for (file = 0; required_file_list[file]; file++) + { + strcpy(&(Str1[endpos]), required_file_list[file]); + if (test_file_access(Str1, 'r') == 0) { impossible = TRUE; printf("\nError! File not accessible: %s", Str1); } } + for (file = 0; optional_file_list[file]; file++) { strcpy(&(Str1[endpos]), optional_file_list[file]); @@ -537,13 +550,13 @@ int filecheck() } if (impossible) { printf("\nFurther execution is impossible. Sorry."); - if (strcmp(Omegalib, OMEGALIB)) + if (strcmp(Omegavar, OMEGALIB)) printf("\nEnvironment variable OMEGALIB badly set\n"); else { printf("\nOMEGALIB may be badly #defined in defs.h\n"); #ifndef FIXED_OMEGALIB printf("\nYou can set the environment variable OMEGALIB to\n"); - printf("the location of the omegalib directory.\n"); + printf("the location of the omegavar directory.\n"); #endif } return(0); diff -Npur omega.orig/gen2.c omega/gen2.c --- omega.orig/gen2.c 1999-01-01 01:08:28.000000000 +0100 +++ omega/gen2.c 2011-09-04 16:57:14.437766949 +0200 @@ -372,7 +372,7 @@ void maze_level() { int i,j,tx,ty,mid; char rsi; - if (Current_Environment == E_ASTRAL) + if (Current_Environment == E_ASTRAL) { switch(Level->depth){ case 1: rsi = RS_EARTHPLANE; break; case 2: rsi = RS_AIRPLANE; break; @@ -380,18 +380,21 @@ void maze_level() case 4: rsi = RS_FIREPLANE; break; case 5: rsi = RS_HIGHASTRAL; break; } + } else rsi = RS_VOLCANO; maze_corridor(random_range(WIDTH-1)+1, random_range(LENGTH-1)+1, random_range(WIDTH-1)+1, random_range(LENGTH-1)+1, rsi,0); - if (Current_Dungeon == E_ASTRAL) { - for(i=0;isite[i][j].locchar == WALL) + if (Current_Environment == E_ASTRAL) { + for(i=0;isite[i][j].locchar == WALL) { switch(Level->depth){ - case 1: Level->site[i][j].aux = 500; break; + case 1: + Level->site[i][j].aux = 500; + break; case 2: Level->site[i][j].locchar = WHIRLWIND; Level->site[i][j].p_locf = L_WHIRLWIND; @@ -409,6 +412,9 @@ void maze_level() Level->site[i][j].p_locf = L_ABYSS; break; } + } + } + } switch(Level->depth) { case 1: mid = LORD_EARTH; break; /* Elemental Lord of Earth */ case 2: mid = LORD_AIR; break; /* Elemental Lord of Air */ diff -Npur omega.orig/genclr.c omega/genclr.c --- omega.orig/genclr.c 1998-08-08 14:53:59.000000000 +0200 +++ omega/genclr.c 2011-09-04 17:01:28.306767179 +0200 @@ -181,13 +181,10 @@ static FILE *emitopen (char *file, char perror (""); exit (1); } - fprintf (fp, "\ -/*\n\ - * Do not edit this file. It was automatically generated by running:\n\ - * %s %s %s\n\ - */\n\ -\n\ -", + fprintf (fp, "/*\n" +" * Do not edit this file. It was automatically generated by running:\n" +" * %s %s %s\n" +" */\n\n", argv[0], argv[1], argv[2]); return fp; } @@ -280,31 +277,24 @@ int main (int argc, char **argv) * Emit .c file. */ fp = emitopen (cfile, argv); - fprintf (fp, "\ -#include \n\ -#include \n\ -#include \n\ - -#include \"%s\"\n\ - -void clrgen_init (void)\n\ -""{\n\ - if (%d > COLOR_PAIRS - 1) {\n\ - endwin(); - fputs (\"Too many color pairs!\\n\", stderr);\n\ - exit (1);\n\ - }\n\ -", + fprintf (fp, "#include \n" +"#include \n" +"#include \n\n" + +"#include \"%s\"\n\n" + +"void clrgen_init (void)\n" +"{\n" +" if (%d > COLOR_PAIRS - 1) {\n" +" endwin();\n" +" fputs (\"Too many color pairs!\\n\", stderr);\n" +" exit (1);\n" +" }\n", hfile, ncpairs); for (i = 0; i < ncpairs; i++) - fprintf (fp, "\ - init_pair (%d, COLOR_%s, COLOR_%s);\n\ -", + fprintf (fp, "init_pair (%d, COLOR_%s, COLOR_%s);\n", cpairs[i]->idx, cpairs[i]->cfg, cpairs[i]->cbg); - fputs ("\ -""}\n\ -", - fp); + fputs ("}\n", fp); emitclose (fp, cfile); /* @@ -318,11 +308,7 @@ void clrgen_init (void)\n\ strlen (pair->ofg) + strlen (pair->obg) > 10 ? "" : "\t", pair->idx, pair->boldfg ? "|A_BOLD" : ""); } - fputs ("\ -\n\ -extern void clrgen_init (void);\n\ -", - fp); + fputs ("\nextern void clrgen_init (void);\n", fp); emitclose (fp, hfile); return 0; diff -Npur omega.orig/glob.h omega/glob.h --- omega.orig/glob.h 1999-01-01 01:08:29.000000000 +0100 +++ omega/glob.h 2011-09-04 16:57:14.437766949 +0200 @@ -20,6 +20,9 @@ extern int DG_debug_flag; /* This string holds the path to the library files */ extern char *Omegalib; +/* This string holds the path to the highscore and log files */ +extern char *Omegavar; + /* one of each monster */ extern struct monster Monsters[NUMMONSTERS]; diff -Npur omega.orig/inv.c omega/inv.c --- omega.orig/inv.c 1999-01-01 01:08:33.000000000 +0100 +++ omega/inv.c 2011-09-04 16:57:14.438766949 +0200 @@ -73,7 +73,7 @@ void pickup_at(x,y) int x,y; { int quit = FALSE; - char response; + char response = 0; pol ol = Level->site[x][y].things; pol temp; @@ -549,7 +549,7 @@ int getitem(itype) Symbol itype; { char invstr[64]; - char key; + int key; int i,k=0,ok=FALSE,drewmenu=FALSE,found=FALSE; found = ((itype == NULL_ITEM) || ((itype == CASH) && (Player.cash > 0))); diff -Npur omega.orig/lib/motd.txt omega/lib/motd.txt --- omega.orig/lib/motd.txt 1999-01-01 01:09:05.000000000 +0100 +++ omega/lib/motd.txt 2011-09-04 16:57:14.438766949 +0200 @@ -9,7 +9,7 @@ * ** ** * ***** ***** - omega version 0.90-pa2 is copyright (C) 1987,1988,1989 by: + omega version 0.90.4 is copyright (C) 1987,1988,1989 by: Laurence R. Brothers Maintained by: William Tanksley (wtanksle@ucsd.edu). Send suggestions and complaints about this prealpha to diff -Npur omega.orig/Makefile omega/Makefile --- omega.orig/Makefile 1999-01-02 05:00:06.000000000 +0100 +++ omega/Makefile 2011-09-04 16:57:14.438766949 +0200 @@ -1,15 +1,16 @@ # These two definitions are used if you 'make install' # the value of LIBDIR should be the same as OMEGALIB in defs.h -BINDIR = /home/sdossey/omega/ -LIBDIR = /home/sdossey/omega/lib/ +BINDIR = $(DESTDIR)/usr/games/bin +LIBDIR = $(DESTDIR)/usr/share/games/omega/ +STATEDIR = $(DESTDIR)/var/games/omega # One of these should be uncommented, as appropriate, unless your compiler # does it for you. You can test this by simply trying to 'make' omega - # it will fail if none of them are defined. If you do uncomment # one, make sure you comment out the other definition of CFLAGS lower down -CFLAGS = -DBSD -ggdb -#CFLAGS = -DSYSV -O +#CFLAGS = -DBSD -ggdb +CFLAGS = -DSYSV -O # I also had to define -cckr (K&R style C) for system V #CFLAGS = -DMSDOS -O #CFLAGS = -DAMIGA -O @@ -48,31 +49,34 @@ OBJ = omega.o abyss.o aux1.o aux2.o aux3 omega: $(OBJ) $(CC) $(LDFLAGS) $(OBJ) $(LIBS) -o omega -install: omega $(BINDIR) $(LIBDIR) +install: omega cp omega $(BINDIR) chmod 4711 $(BINDIR)/omega - cp lib/* $(LIBDIR) + - rm $(LIBDIR)/{omega.hi,omega.log} + - cp lib/{omega.hi,omega.log} $(STATEDIR) chmod 0644 $(LIBDIR)/help*.txt $(LIBDIR)/license.txt $(LIBDIR)/motd.txt $(LIBDIR)/thanks.txt $(LIBDIR)/update.txt chmod 0600 $(LIBDIR)/abyss.txt $(LIBDIR)/scroll[1234].txt $(LIBDIR)/*.dat - chmod 0600 $(LIBDIR)/omega.hi $(LIBDIR)/omega.log $(LIBDIR)/omegahi.bak + chmod 0600 $(STATEDIR)/omega.hi $(STATEDIR)/omega.log -install_not_suid: omega $(BINDIR) $(LIBDIR) +install_not_suid: omega cp omega $(BINDIR) chmod 0711 $(BINDIR)/omega - cp lib/* $(LIBDIR) + - rm $(LIBDIR)/{omega.hi,omega.log} + - cp lib/{omega.hi,omega.log} $(STATEDIR) chmod 0644 $(LIBDIR)/help*.txt $(LIBDIR)/license.txt $(LIBDIR)/motd.txt $(LIBDIR)/thanks.txt $(LIBDIR)/update.txt chmod 0644 $(LIBDIR)/abyss.txt $(LIBDIR)/scroll[1234].txt $(LIBDIR)/*.dat - chmod 0666 $(LIBDIR)/omega.hi $(LIBDIR)/omega.log - chmod 0600 $(LIBDIR)/omegahi.bak + chmod 0666 $(STATEDIR)/omega.hi $(STATEDIR)/omega.log clean: - rm -f $(OBJ) genclr genclr.o - rm -i omega + rm -f $(OBJ) genclr genclr.o clrgen.h omega $(OBJ): clrgen.h defs.h extern.h glob.h -clrgen.h clrgen.c: genclr.c minit.h defs.h - $(MAKE) genclr +clrgen.c: clrgen.h + +clrgen.h: genclr minit.h defs.h $(CPP) -DOMEGA_CLRGEN *.[ch] | ./genclr clrgen.c clrgen.h genclr: genclr.o diff -Npur omega.orig/mon.c omega/mon.c --- omega.orig/mon.c 1999-01-02 03:39:25.000000000 +0100 +++ omega/mon.c 2011-09-04 16:57:14.439766949 +0200 @@ -699,7 +699,7 @@ struct monster *npc; status = 2; strcpy(Str2,"Malaprop the Misnamed"); - strcpy(Str1,Omegalib); + strcpy(Str1,Omegavar); strcat(Str1,"omega.log"); fd = checkfopen(Str1,"r"); n = 1; diff -Npur omega.orig/omega.c omega/omega.c --- omega.orig/omega.c 1999-01-02 05:00:09.000000000 +0100 +++ omega/omega.c 2011-09-04 16:57:14.439766949 +0200 @@ -18,6 +18,7 @@ /* most globals originate in omega.c */ char *Omegalib; /* contains the path to the library files */ +char *Omegavar; /* contains the path to the highscore and log files */ #ifdef DEBUG FILE *DG_debug_log; /* debug log file pointer */ @@ -212,7 +213,7 @@ char *argv[]; } #endif if (argc==2) { - strcpy(savestr,argv[1]); + strncpy(savestr,argv[1],sizeof(savestr)-1); ok = restore_game(savestr); if (! ok) { endgraf(); @@ -281,6 +282,11 @@ char *argv[]; #endif Omegalib = OMEGALIB; +#ifndef FIXED_OMEGALIB + if (!(Omegavar = getenv("OMEGAVAR"))) +#endif + Omegavar = OMEGAVAR; + /* if filecheck is 0, some necessary data files are missing */ if (filecheck() == 0) exit(0); diff -Npur omega.orig/save.c omega/save.c --- omega.orig/save.c 1999-01-02 05:00:10.000000000 +0100 +++ omega/save.c 2011-09-04 16:57:14.439766949 +0200 @@ -302,7 +302,7 @@ plv level; } mask >>= 1; if (level->site[i][j].lstatus&SEEN) - mask |= (1<<(sizeof(long int)*8 - 1)); + mask |= (1UL<<(sizeof(long int)*8 - 1)); run--; } if (run < 8*sizeof(long int)) @@ -442,7 +442,7 @@ FILE *fd; } mask >>= 1; if (c_statusp(i, j, SEEN)) - mask |= (1<<(sizeof(long int)*8 - 1)); + mask |= (1UL<<(sizeof(long int)*8 - 1)); run--; } if (run < 8*sizeof(long int))