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