barry@adelie.UUCP (11/28/86)
What follows is the result of a quick Turkey-Day hack at getting this rogue-clone to run on my AT&T 3B2/310 (SVR2.1, w/C 3.1 & 4.0 utils). Pretty much straight-forward conversion (index -> strchr; ioctl calls; etc.). The SYSV flag also replaces several "chars" with "shorts" to correct bug with -1 armor being mis-construed as +99 stuff. Also turns off the BSD-specific stuff (no CTRL-Z suspends, etc.). I take no responsibility for this code, use at your own risk. I have only given it about 2 hours workout at this point, but I felt that there would probably be *lots* of folk who (like me) would be frustrated when they tried to get the stock rogue-clone running under SYSV. I'm particularly concerned about the "setreuid(-1.." call I blocked out for the SYSV version. Be sure to set the path of the score file in "room.h" to something other than the default ("SCORE_FILE" in current directory)! To apply these patches, from rn type "|patch -d <source-dir>", where <source-dir> is the directory where you already have unshar'd the 4 kits for "rogue-clone" version II. Enjoy! *** Makefile.orig Thu Nov 27 23:40:53 1986 --- Makefile Thu Nov 27 23:44:20 1986 *************** *** 3,10 room.o save.o score.o special_hit.o throw.o trap.o use.o zap.o CC = cc ! ! CFLAGS = -c rogue: $(ROGUE_OBJS) $(CC) $(ROGUE_OBJS) -lcurses -ltermlib -o rogue --- 3,16 ----- room.o save.o score.o special_hit.o throw.o trap.o use.o zap.o CC = cc ! # add -DSYSV for SYSV ioctl(), time(), str[r]chr instead of [r]index, ! # and uses short instead of char for key attributes (eg. armor enchantment) ! # ! # Files modified for SYSV by Barry Burke (barry%adelie@harvard.Harvard.EDU): ! # ! # Makefile, init.c, message.c, object.[ch], room.c, save.c, score.c ! # ! CFLAGS = -c -O -DSYSV rogue: $(ROGUE_OBJS) $(CC) $(ROGUE_OBJS) -lcurses -ltermlib -o rogue *** init.c.orig Thu Nov 27 23:41:00 1986 --- init.c Thu Nov 27 23:50:12 1986 *************** *** 13,18 #include <curses.h> #include "object.h" #include "room.h" #include <sgtty.h> #include <signal.h> --- 13,19 ----- #include <curses.h> #include "object.h" #include "room.h" + #ifndef SYSV #include <sgtty.h> #endif #include <signal.h> *************** *** 14,19 #include "object.h" #include "room.h" #include <sgtty.h> #include <signal.h> char login_name[30]; --- 15,21 ----- #include "room.h" #ifndef SYSV #include <sgtty.h> + #endif #include <signal.h> char login_name[30]; *************** *** 186,191 edchars(mode) short mode; { static boolean called_before = 0; static struct ltchars ltc_orig; static struct tchars tc_orig; --- 188,194 ----- edchars(mode) short mode; { + #ifndef SYSV static boolean called_before = 0; static struct ltchars ltc_orig; static struct tchars tc_orig; *************** *** 207,212 } ioctl(0, TIOCSETC, &tc_temp); ioctl(0, TIOCSLTC, <c_temp); } process_args(argc, argv) --- 210,216 ----- } ioctl(0, TIOCSETC, &tc_temp); ioctl(0, TIOCSLTC, <c_temp); + #endif } process_args(argc, argv) *** message.c.orig Thu Nov 27 23:41:23 1986 --- message.c Thu Nov 27 23:44:30 1986 *************** *** 135,140 slurp() { long ln; short i, n; ioctl(0, FIONREAD, &ln); --- 135,141 ----- slurp() { long ln; + #ifndef SYSV short i, n; ioctl(0, FIONREAD, &ln); *************** *** 143,148 for (i = 0; i < n; i++) { getchar(); } } rgetchar() --- 144,153 ----- for (i = 0; i < n; i++) { getchar(); } + #else + ioctl(0,TCFLSH,&ln); + #endif + } rgetchar() *************** *** 156,161 case '\022': wrefresh(curscr); break; case '\032': printf(CL); fflush(stdout); --- 161,167 ----- case '\022': wrefresh(curscr); break; + #ifndef SYSV case '\032': printf(CL); fflush(stdout); *************** *** 160,165 printf(CL); fflush(stdout); tstp(); break; case 'X': save_screen(); --- 166,173 ----- printf(CL); fflush(stdout); tstp(); + printf("message.c"); + fflush(stdout); break; #endif case 'X': *************** *** 161,166 fflush(stdout); tstp(); break; case 'X': save_screen(); break; --- 169,175 ----- printf("message.c"); fflush(stdout); break; + #endif case 'X': save_screen(); break; *** object.c.orig Thu Nov 27 23:41:59 1986 --- object.c Thu Nov 27 23:44:40 1986 *************** *** 14,19 #include "object.h" #include "monster.h" #include "room.h" object level_objects; unsigned short dungeon[DROWS][DCOLS]; --- 14,23 ----- #include "object.h" #include "monster.h" #include "room.h" + #ifdef SYSV + #define index strchr + #define rindex strrchr + #endif object level_objects; unsigned short dungeon[DROWS][DCOLS]; *** object.h.orig Thu Nov 27 23:42:02 1986 --- object.h Thu Nov 27 23:44:45 1986 *************** *** 185,190 short kill_exp; /* exp for killing it */ boolean is_protected; /* level starts */ boolean is_cursed; /* level ends */ char class; /* chance of hitting you */ short identified; /* 'F' damage, 1,2,3... */ unsigned char which_kind; /* item carry/drop % */ --- 185,191 ----- short kill_exp; /* exp for killing it */ boolean is_protected; /* level starts */ boolean is_cursed; /* level ends */ + #ifndef SYSV char class; /* chance of hitting you */ #else short class; *************** *** 186,191 boolean is_protected; /* level starts */ boolean is_cursed; /* level ends */ char class; /* chance of hitting you */ short identified; /* 'F' damage, 1,2,3... */ unsigned char which_kind; /* item carry/drop % */ char o_row, o_col, o; /* o is how many times stuck at o_row, o_col */ --- 187,195 ----- boolean is_cursed; /* level ends */ #ifndef SYSV char class; /* chance of hitting you */ + #else + short class; + #endif short identified; /* 'F' damage, 1,2,3... */ unsigned char which_kind; /* item carry/drop % */ #ifndef SYSV *************** *** 188,193 char class; /* chance of hitting you */ short identified; /* 'F' damage, 1,2,3... */ unsigned char which_kind; /* item carry/drop % */ char o_row, o_col, o; /* o is how many times stuck at o_row, o_col */ char row, col; /* current row, col */ char damage_enchantment;/* room char when detect_monster */ --- 192,198 ----- #endif short identified; /* 'F' damage, 1,2,3... */ unsigned char which_kind; /* item carry/drop % */ + #ifndef SYSV char o_row, o_col, o; /* o is how many times stuck at o_row, o_col */ char row, col; /* current row, col */ char damage_enchantment;/* room char when detect_monster */ *************** *** 194,199 char quiver; /* monster slowed toggle */ char trow, tcol; /* target row, col */ char to_hit_enchantment;/* how many moves is confused */ unsigned short what_is; /* imitator's charactor (?!%: */ boolean picked_up; /* sleep from wand of sleep */ unsigned short in_use_flags; --- 199,212 ----- char quiver; /* monster slowed toggle */ char trow, tcol; /* target row, col */ char to_hit_enchantment;/* how many moves is confused */ + #else + short o_row, o_col, o; + short row, col; + short damage_enchantment; + short quiver; + short trow, tcol; + short to_hit_enchantment; + #endif unsigned short what_is; /* imitator's charactor (?!%: */ boolean picked_up; /* sleep from wand of sleep */ unsigned short in_use_flags; *** room.c.orig Thu Nov 27 23:42:30 1986 --- room.c Thu Nov 27 23:44:52 1986 *************** *** 15,20 #include "object.h" #include "move.h" #include "monster.h" short current_room; room rooms[MAXROOMS]; --- 15,24 ----- #include "object.h" #include "move.h" #include "monster.h" + #ifdef SYSV + #define index strchr + #define rindex strrchr + #endif short current_room; *************** *** 16,21 #include "move.h" #include "monster.h" short current_room; room rooms[MAXROOMS]; boolean rooms_visited[MAXROOMS]; --- 20,26 ----- #define rindex strrchr #endif + short current_room; room rooms[MAXROOMS]; boolean rooms_visited[MAXROOMS]; *************** *** 256,261 } if (!fork()) { if (setreuid(-1, getuid()) < 0) exit(1); execl(sh, rindex(sh, '/') + 1, 0); exit(0); --- 261,267 ----- } if (!fork()) { + #ifndef SYSV if (setreuid(-1, getuid()) < 0) exit(1); #endif execl(sh, rindex(sh, '/') + 1, 0); *************** *** 257,262 if (!fork()) { if (setreuid(-1, getuid()) < 0) exit(1); execl(sh, rindex(sh, '/') + 1, 0); exit(0); } --- 263,269 ----- if (!fork()) { #ifndef SYSV if (setreuid(-1, getuid()) < 0) exit(1); + #endif execl(sh, rindex(sh, '/') + 1, 0); exit(0); } *** save.c.orig Thu Nov 27 23:42:34 1986 --- save.c Thu Nov 27 23:44:58 1986 *************** *** 11,17 */ #include <curses.h> - #include <sys/file.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/time.h> --- 11,16 ----- */ #include <curses.h> #include <sys/types.h> #include <sys/file.h> #include <sys/stat.h> *************** *** 13,18 #include <curses.h> #include <sys/file.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/time.h> #include "object.h" --- 12,18 ----- #include <curses.h> #include <sys/types.h> + #include <sys/file.h> #include <sys/stat.h> #ifndef SYSV #include <sys/time.h> *************** *** 14,19 #include <sys/file.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/time.h> #include "object.h" #include "room.h" --- 14,20 ----- #include <sys/types.h> #include <sys/file.h> #include <sys/stat.h> + #ifndef SYSV #include <sys/time.h> #endif #include "object.h" *************** *** 15,20 #include <sys/types.h> #include <sys/stat.h> #include <sys/time.h> #include "object.h" #include "room.h" --- 16,22 ----- #include <sys/stat.h> #ifndef SYSV #include <sys/time.h> + #endif #include "object.h" #include "room.h" *************** *** 64,70 FILE *fp; int i; struct stat sbuf; ! struct timeval tv; struct timezone tzp; char name_buffer[80]; char *getenv(), *hptr; --- 66,73 ----- FILE *fp; int i; struct stat sbuf; ! #ifndef SYSV ! struct timeal tv; struct timezone tzp; #else time_t seconds; *************** *** 66,71 struct stat sbuf; struct timeval tv; struct timezone tzp; char name_buffer[80]; char *getenv(), *hptr; --- 69,77 ----- #ifndef SYSV struct timeal tv; struct timezone tzp; + #else + time_t seconds; + #endif char name_buffer[80]; char *getenv(), *hptr; *************** *** 117,122 r_write(fp, &wizard, sizeof(wizard)); r_write(fp, &score_only, sizeof(score_only)); r_write(fp, &m_moves, sizeof(m_moves)); gettimeofday(&tv, &tzp); tv.tv_sec += 10; r_write(fp, &tv.tv_sec, sizeof(long)); fclose(fp); --- 123,129 ----- r_write(fp, &wizard, sizeof(wizard)); r_write(fp, &score_only, sizeof(score_only)); r_write(fp, &m_moves, sizeof(m_moves)); + #ifndef SYSV gettimeofday(&tv, &tzp); tv.tv_sec += 10; r_write(fp, &tv.tv_sec, sizeof(long)); #else *************** *** 119,124 r_write(fp, &m_moves, sizeof(m_moves)); gettimeofday(&tv, &tzp); tv.tv_sec += 10; r_write(fp, &tv.tv_sec, sizeof(long)); fclose(fp); if (write_failed) { --- 126,135 ----- #ifndef SYSV gettimeofday(&tv, &tzp); tv.tv_sec += 10; r_write(fp, &tv.tv_sec, sizeof(long)); + #else + time(&seconds); seconds +=10; + r_write(fp, &seconds, sizeof(time_t)); + #endif fclose(fp); if (write_failed) { *************** *** 135,140 short i; struct stat sbuf; ino_t inode; long seconds; char buf[4]; --- 146,154 ----- short i; struct stat sbuf; ino_t inode; + #ifdef SYSV + time_t seconds; + #else long seconds; #endif char buf[4]; *************** *** 136,141 struct stat sbuf; ino_t inode; long seconds; char buf[4]; if (stat(fname, &sbuf) || ((fp = fopen(fname, "r")) == NULL)) { --- 150,156 ----- time_t seconds; #else long seconds; + #endif char buf[4]; if (stat(fname, &sbuf) || ((fp = fopen(fname, "r")) == NULL)) { *************** *** 190,195 r_read(fp, &wizard, sizeof(wizard)); r_read(fp, &score_only, sizeof(score_only)); r_read(fp, &m_moves, sizeof(m_moves)); r_read(fp, &seconds, sizeof(long)); if (fread(buf, 1, 1, fp) > 0) { --- 205,211 ----- r_read(fp, &wizard, sizeof(wizard)); r_read(fp, &score_only, sizeof(score_only)); r_read(fp, &m_moves, sizeof(m_moves)); + #ifndef SYSV r_read(fp, &seconds, sizeof(long)); #else r_read(fp, &seconds, sizeof(time_t)); *************** *** 191,196 r_read(fp, &score_only, sizeof(score_only)); r_read(fp, &m_moves, sizeof(m_moves)); r_read(fp, &seconds, sizeof(long)); if (fread(buf, 1, 1, fp) > 0) { clear(); --- 207,215 ----- r_read(fp, &m_moves, sizeof(m_moves)); #ifndef SYSV r_read(fp, &seconds, sizeof(long)); + #else + r_read(fp, &seconds, sizeof(time_t)); + #endif if (fread(buf, 1, 1, fp) > 0) { clear(); *** score.c.orig Thu Nov 27 23:42:40 1986 --- score.c Thu Nov 27 23:45:12 1986 *************** *** 15,20 #include "object.h" #include "monster.h" #include "room.h" #include <sys/file.h> char *score_file = SCORE_FILE; --- 15,23 ----- #include "object.h" #include "monster.h" #include "room.h" + #ifdef SYSV + #include <sys/types.h> + #endif #include <sys/file.h> char *score_file = SCORE_FILE; -- LIVE: Barry A. Burke, (617) 499-6370 USPS: Adelie Corporation, 125 CambridgePark Drive Cambridge, MA 02140 UUCP: barry@adelie.Adelie.COM / ..!{harvard | ll-xn | mirror}!adelie!barry ARPA: barry%adelie@harvard.HARVARD.EDU