Mercurial > hg > early-roguelike
view srogue/newterm.c @ 114:a5433ba4cabf
arogue5: fix some daemon-related pointer/int casting.
Daemons and fuses take a single argument, nominally an int but either
ignored or unsafely cast to a pointer. Its type has now been changed
to void*.
The save/restore code no longer tries to store this argument in the
savefile. For doctor(), this is not a problem, because player is the
only argument it is ever given as a daemon. However, alchemy() will
fail to do anything when passed NULL. Fixing this would be complicated
but possible.
Summary: the code is slightly safer, but alchemy jugs are guaranteed to
stop working after save and restore, instead of just extremely likely.
author | John "Elwin" Edwards |
---|---|
date | Fri, 28 Mar 2014 10:57:03 -0700 |
parents | 2128c7dc8a40 |
children |
line wrap: on
line source
/* * Super-Rogue * Copyright (C) 1984 Robert D. Kindelberger * All rights reserved. * * See the file LICENSE.TXT for full copyright and licensing information. */ #include "rogue.h" extern SGTTY _tty, _res_flg; extern bool NONL; raw() { /* VERSION 5.0 _tty.c_lflag &= ~ICANON; _tty.c_cc[VMIN] = 1; _tty.c_cc[VTIME] = 255; _tty.c_oflag &= ~OPOST; */ _rawmode = TRUE; _tty.sg_flags |= CBREAK; ioctl(_tty_ch, TIOCSETP, &_tty); } noraw() { /* VERSION 5.0 _tty.c_lflag |= ICANON; _tty.c_cc[VMIN] = _res_flg.c_cc[VMIN]; _tty.c_cc[VTIME] = _res_flg.c_cc[VTIME]; _tty.c_oflag |= OPOST; */ _rawmode = FALSE; _tty.sg_flags &= ~CBREAK; ioctl(_tty_ch, TIOCSETP, &_tty); } crmode() { /* VERSION 5.0 _tty.c_lflag &= ~ICANON; _tty.c_oflag |= ONLCR; _tty.c_cc[VMIN] = 1; _tty.c_cc[VTIME]=255; */ _rawmode = TRUE; _tty.sg_flags |= (CBREAK | CRMOD); ioctl(_tty_ch, TIOCSETP, &_tty); } nocrmode() { /* _tty.c_lflag |= ICANON; _tty.c_cc[VMIN]=_res_flg.c_cc[VMIN]; _tty.c_cc[VTIME]=_res_flg.c_cc[VTIME]; */ _rawmode = FALSE; _tty.sg_flags &= ~CBREAK; ioctl(_tty_ch, TIOCSETP, &_tty); } echo() { _tty.sg_flags |= ECHO; _echoit=TRUE; ioctl(_tty_ch, TIOCSETP, &_tty); } noecho() { _tty.sg_flags &= ~ECHO; _echoit = FALSE; ioctl(_tty_ch, TIOCSETP, &_tty); } nl() { /* VERSION 5.0 _tty.c_iflag |= ICRNL; _tty.c_oflag |= ONLCR; */ _tty.sg_flags |= CRMOD; NONL = TRUE; ioctl(_tty_ch, TIOCSETP, &_tty); } nonl() { /* VERSION 5.0 _tty.c_iflag &= ~ICRNL; _tty.c_oflag &= ~ONLCR; */ _tty.sg_flags &= ~CRMOD; NONL = FALSE; ioctl(_tty_ch, TIOCSETP, &_tty); } savetty() { ioctl(_tty_ch, TIOCGETP, &_tty); _res_flg = _tty; } resetty() { _tty = _res_flg; ioctl(_tty_ch, TIOCSETP, &_tty); }