-+-+-+-+-+-+-+-+ START OF PART 23 -+-+-+-+-+-+-+-+ X return(1); X else X return(0); X`7D X X/* Another useful function courtesy of Ralph Waters. */ X#include X X/* Stores the user's login name in the argument buf. */ Xvoid user_name(buf) Xchar *buf; X`7B X /* sys$getjpiw ( `5Befn`5D, `5Bpidadr`5D, `5Bprcnam`5D, itmlst `5B,iosb`5D X `5B,astadr`5D `5B,astprm`5D`09`09`09`09`09*/ X X long int return_length; X struct getjpi_itmlst_type `7B X unsigned short int buffer_length;`09/* length of return buffer */ X unsigned short int item_code;`09`09/* item code to getjpi about */ X unsigned long int buffer_address;`09/* address of return data */ X unsigned long int return_length_addr; `7D`09/*actual size of return data V */ X getjpi_itmlst; X X getjpi_itmlst.buffer_length = 12;`09/* VMS usernames are 12 chars */ X getjpi_itmlst.item_code = JPI$_USERNAME; X getjpi_itmlst.buffer_address = buf; X getjpi_itmlst.return_length_addr = &return_length; X X sys$getjpiw (0, 0, 0, &getjpi_itmlst, 0, 0, 0); X X return; X`7D X X/* After calling this, vms_getch() returns unbuffered single chars. */ Xvoid vms_crmode()`09/* Character-Return MODE */ X`7B X`09if(kb_chan == 0) X`09`09opengetch(); X X`09crmode_status = TRUE; X`7D X X/* After calling this, vms_getch() returns echoed, buffered characters. */ Xvoid vms_nocrmode()`09/* NO Character-Return MODE */ X`7B X`09if(kb_chan != 0) X`09`09closegetch(); X X`09crmode_status = FALSE; X`7D X X/* Sets up terminal for getch() calls, returns VMS status code. */ Xint opengetch()`09/* does the actual assignment work */ X`7B X`09/* assign channel on keyboard */ X`09return(sys$assign(&chan,&kb_chan,0,0)); X`7D X X/* Undoes affects of above, returns VMS status code for the operation. */ Xint closegetch()`09/* performs the actual deassignment work */ X`7B X`09int rv; X X`09if(kb_chan != 0) `7B X`09`09/* deassign keyboard channel */ X`09`09rv = sys$dassgn(kb_chan); X`09`09kb_chan = 0; X`09`09return(rv); X`09`7D X`7D X X/* Returns an `5Boptionally`5D unbuffered `5Bnon-`5Dechoed input character. X X If crmode_status is not set, then the code returns one character from X the buffered input. X If crmode_status is set, then the code returns an `60ungot' character if X one exists, otherwise it tries to read one unbuffered character from the X keyboard. If echo_status is set, then the character will be echoed X before returning. */ Xchar vms_getch() X`7B X`09int rv; X`09char kb_buf;`09`09`09`09/* buffer for input char */ X X`09if(crmode_status) `7B X X`09`09if(!charwaiting) `7B X X`09`09`09/* open channel if it hasn't been done already */ X`09`09`09if (kb_chan == 0) X`09`09`09`09opengetch(); X X`09`09`09/* que an i/o request for a character and wait */ X`09`09`09rv = sys$qiow(0,kb_chan,FUNC,0,0,0,&kb_buf,1,0,0,0,0); X X`09`09`09/* indicate if something is amiss */ X`09`09`09if(rv != SS$_NORMAL) `7B X`09`09`09`09printf("?"); X`09`09`09`09exit(rv); X`09`09`09`7D X X`09`09`7D else `7B /* charwaiting */ X X`09`09`09kb_buf = ungotch; X`09`09`09charwaiting = FALSE; X`09`09`7D X X`09`09/* massage for getchar() compatibility */ X`09`09if (kb_buf == '\r') kb_buf='\n'; X X`09`09/* echo char if we're supposed to */ X`09`09if (echo_status) putchar(kb_buf); X X`09`09return(kb_buf); X X`09`7D else`09/* nocrmode */ X X`09`09return(getchar()); X X`7D $ CALL UNPACK GETCH.C;1 392130990 $ create 'f' X/* source/help.c: identify a symbol X X Copyright (c) 1989-92 James E. Wilson, Robert A. Koeneke X X This software may be copied and distributed for educational, research, an Vd X not for profit purposes provided that this copyright and statement are X included in all such copies. */ X X#include "config.h" X#include "constant.h" X#include "types.h" X#include "externs.h" X X Xvoid ident_char() X`7B X char command, query; X register int i, n; X X if (get_com("Enter character to be identified :", &command)) X switch(command) X `7B X`09/* every printing ASCII character is listed here, in the order in which X`09 they appear in the ASCII character set */ X case ' ': prt(" - An open pit.", 0, 0); break; X case '!': prt("! - A potion.", 0, 0); break; X case '"': prt("\" - An amulet, periapt, or necklace.", 0, 0); break; X case '#': prt("# - A stone wall.", 0, 0); break; X case '$': prt("$ - Treasure.", 0, 0); break; X case '%': X`09if (highlight_seams == TRUE) X`09 prt("% - A magma or quartz vein.", 0, 0); X`09else X`09 prt("% - Not used.", 0, 0); X`09break; X case '&': prt("& - Treasure chest.", 0, 0); break; X case '\'': prt("' - An open door.", 0, 0); break; X case '(': prt("( - Soft armor.", 0, 0); break; X case ')': prt(") - A shield.", 0, 0); break; X case '*': prt("* - Gems.", 0, 0); break; X case '+': prt("+ - A closed door.", 0, 0); break; X case ',': prt(", - Food or mushroom patch.", 0, 0); break; X case '-': prt("- - A wand", 0, 0); break; X case '.': prt(". - Floor.", 0, 0); break; X case '/': prt("/ - A pole weapon.", 0, 0); break; X`09/* case '0': prt("0 - Not used.", 0, 0); break; */ X case '1': prt("1 - Entrance to General Store.", 0, 0); break; X case '2': prt("2 - Entrance to Armory.", 0, 0); break; X case '3': prt("3 - Entrance to Weaponsmith.", 0, 0); break; X case '4': prt("4 - Entrance to Temple.", 0, 0); break; X case '5': prt("5 - Entrance to Alchemy shop.", 0, 0); break; X case '6': prt("6 - Entrance to Magic-Users store.", 0, 0); break; X`09/* case '7': prt("7 - Not used.", 0, 0); break; */ X`09/* case '8': prt("8 - Not used.", 0, 0); break; */ X`09/* case '9': prt("9 - Not used.", 0, 0); break;*/ X case ':': prt(": - Rubble.", 0, 0); break; X case ';': prt("; - A loose rock.", 0, 0); break; X case '<': prt("< - An up staircase.", 0, 0); break; X case '=': prt("= - A ring.", 0, 0); break; X case '>': prt("> - A down staircase.", 0, 0); break; X case '?': prt("? - A scroll.", 0, 0); break; X case '@': prt(py.misc.name, 0, 0); break; X case 'A': prt("A - Giant Ant Lion.", 0, 0); break; X case 'B': prt("B - The Balrog.", 0, 0); break; X case 'C': prt("C - Gelatinous Cube.", 0, 0); break; X case 'D': prt("D - An Ancient Dragon (Beware).", 0, 0); break; X case 'E': prt("E - Elemental.", 0, 0); break; X case 'F': prt("F - Giant Fly.", 0, 0); break; X case 'G': prt("G - Ghost.", 0, 0); break; X case 'H': prt("H - Hobgoblin.", 0, 0); break; X`09/* case 'I': prt("I - Invisible Stalker.", 0, 0); break; */ X case 'J': prt("J - Jelly.", 0, 0); break; X case 'K': prt("K - Killer Beetle.", 0, 0); break; X case 'L': prt("L - Lich.", 0, 0); break; X case 'M': prt("M - Mummy.", 0, 0); break; X`09/* case 'N': prt("N - Not used.", 0, 0); break; */ X case 'O': prt("O - Ooze.", 0, 0); break; X case 'P': prt("P - Giant humanoid.", 0, 0); break; X case 'Q': prt("Q - Quylthulg (Pulsing Flesh Mound).", 0, 0); break; X case 'R': prt("R - Reptile.", 0, 0); break; X case 'S': prt("S - Giant Scorpion.", 0, 0); break; X case 'T': prt("T - Troll.", 0, 0); break; X case 'U': prt("U - Umber Hulk.", 0, 0); break; X case 'V': prt("V - Vampire.", 0, 0); break; X case 'W': prt("W - Wight or Wraith.", 0, 0); break; X case 'X': prt("X - Xorn.", 0, 0); break; X case 'Y': prt("Y - Yeti.", 0, 0); break; X`09/* case 'Z': prt("Z - Not used.", 0, 0); break; */ X case '`5B': prt("`5B - Hard armor.", 0, 0); break; X case '\\': prt("\\ - A hafted weapon.", 0, 0); break; X case '`5D': prt("`5D - Misc. armor.", 0, 0); break; X case '`5E': prt("`5E - A trap.", 0, 0); break; X case '_': prt("_ - A staff.", 0, 0); break; X`09/* case '`60': prt("`60 - Not used.", 0, 0); break; */ X case 'a': prt("a - Giant Ant.", 0, 0); break; X case 'b': prt("b - Giant Bat.", 0, 0); break; X case 'c': prt("c - Giant Centipede.", 0, 0); break; X case 'd': prt("d - Dragon.", 0, 0); break; X case 'e': prt("e - Floating Eye.", 0, 0); break; X case 'f': prt("f - Giant Frog.", 0, 0); break; X case 'g': prt("g - Golem.", 0, 0); break; X case 'h': prt("h - Harpy.", 0, 0); break; X case 'i': prt("i - Icky Thing.", 0, 0); break; X case 'j': prt("j - Jackal.", 0, 0); break; X case 'k': prt("k - Kobold.", 0, 0); break; X case 'l': prt("l - Giant Louse.", 0, 0); break; X case 'm': prt("m - Mold.", 0, 0); break; X case 'n': prt("n - Naga.", 0, 0); break; X case 'o': prt("o - Orc or Ogre.", 0, 0); break; X case 'p': prt("p - Person (Humanoid).", 0, 0); break; X case 'q': prt("q - Quasit.", 0, 0); break; X case 'r': prt("r - Rodent.", 0, 0); break; X case 's': prt("s - Skeleton.", 0, 0); break; X case 't': prt("t - Giant Tick.", 0, 0); break; X`09/* case 'u': prt("u - Not used.", 0, 0); break; */ X`09/* case 'v': prt("v - Not used.", 0, 0); break; */ X case 'w': prt("w - Worm or Worm Mass.", 0, 0); break; X`09/* case 'x': prt("x - Not used.", 0, 0); break; */ X case 'y': prt("y - Yeek.", 0, 0); break; X case 'z': prt("z - Zombie.", 0, 0); break; X case '`7B': prt("`7B - Arrow, bolt, or bullet.", 0, 0); break; X case '`7C': prt("`7C - A sword or dagger.", 0, 0); break; X case '`7D': prt("`7D - Bow, crossbow, or sling.", 0, 0); break; X case '`7E': prt("`7E - Miscellaneous item.", 0, 0); break; X default:`09prt("Not Used.", 0, 0); break; X `7D X X /* Allow access to monster memory. -CJS- */ X n = 0; X for (i = MAX_CREATURES-1; i >= 0; i--) X if ((c_list`5Bi`5D.cchar == command) && bool_roff_recall (i)) X `7B X`09if (n == 0) X`09 `7B X`09 put_buffer ("You recall those details? `5By/n`5D", 0, 40); X`09 query = inkey(); X`09 if (query != 'y' && query != 'Y') X`09 break; X`09 erase_line (0, 40); X`09 save_screen (); X`09 `7D X`09n++; X`09query = roff_recall (i); X`09restore_screen (); X`09if (query == ESCAPE) X`09 break; X `7D X`7D $ CALL UNPACK HELP.C;1 1296462304 $ create 'f' X Moria operating hours are: X `7C AM `7C PM `7C X 1 111 111 X 2123456789012123456789012 XSUN:XXXXXXXXXXXXXXXXXXXXXXXX XMON:XXXXXXXXXXXXXXXXXXXXXXXX XTUE:XXXXXXXXXXXXXXXXXXXXXXXX XWED:XXXXXXXXXXXXXXXXXXXXXXXX XTHU:XXXXXXXXXXXXXXXXXXXXXXXX XFRI:XXXXXXXXXXXXXXXXXXXXXXXX XSAT:XXXXXXXXXXXXXXXXXXXXXXXX X (X=Open; .=Closed) $ CALL UNPACK HOURS.;1 655639170 $ create 'f' X/* source/io.c: terminal I/O code, uses the curses package X X Copyright (c) 1989-92 James E. Wilson, Robert A. Koeneke X X This software may be copied and distributed for educational, research, an Vd X not for profit purposes provided that this copyright and statement are X included in all such copies. */ X X#include X#ifndef STDIO_LOADED X#define STDIO_LOADED X#endif X X#include "config.h" X X#if defined(atarist) && defined(__GNUC__) X#include X#endif X X#ifdef MSDOS X#include X#endif X X#ifdef AMIGA X/* detach from cli process */ Xlong _stack = 30000; Xlong _priority = 0; Xlong _BackGroundIO = 1; Xchar *_procname = "Moria"; X#endif X X#if defined(NLS) && defined(lint) X/* for AIX, don't let curses include the NL stuff */ X#undef NLS X#endif X X#if !defined(GEMDOS) X#ifdef MAC X#ifdef THINK_C X#include "ScrnMgr.h" X#else X#include X#endif X#else X#include X#endif X#else`09/* GEMDOS i.e. Atari ST */ X#include "curses.h" Xlong wgetch(); X#ifdef ATARIST_TC X#include `09/* TC */ X#include X#else X#include `09/* MWC */ X#endif Xchar *getenv(); X#endif X X/* These are included after curses.h to avoid redefintion warnings for X TRUE, FALSE, and NULL. */ X X#include "constant.h" X#include "types.h" X#include "externs.h" X X#include X X#if defined(SYS_V) && defined(lint) X/* for AIX, prevent hundreds of unnecessary lint errors, must define before X signal.h is included */ X#define _h_IEEETRAP Xtypedef struct `7B int stuff; `7D fpvmach; X#endif X X#if defined(MSDOS) X#if defined(ANSI) X#include "ms_ansi.h" X#endif X#else /* not msdos */ X#if !defined(ATARI_ST) && !defined(MAC) && !defined(AMIGA) X#ifndef VMS X#include X#endif X#include X#endif X#endif X X#ifndef USG X/* only needed for Berkeley UNIX */ X#include X#include X#include X#endif X X#ifdef USG X#ifndef ATARI_ST X#include X#else X#include "string.h" X#endif X#if 0 X/* Used to include termio.h here, but that caused problems on some systems, X as curses.h includes it also above. */ X#if !defined(MAC) && !defined(MSDOS) && !defined(ATARI_ST) X#if !defined(AMIGA) && !defined(VMS) X#include X#endif X#endif X#endif X#else /* ! USG */ X#include X#if defined(atarist) && defined(__GNUC__) X/* doesn't have sys/wait.h */ X#else X#include X#endif X#endif X X#ifdef ATARIST_TC X/* Include this to get prototypes for standard library functions. */ X#include X#endif X X#if defined(SYS_V) && defined(lint) Xstruct screen `7B int dumb; `7D; X#endif X X/* Fooling lint. Unfortunately, c defines all the TIO.`09 -CJS- X constants to be long, and lint expects them to be int. Also, X ioctl is sometimes called with just two arguments. The X following definition keeps lint happy. It may need to be X reset for different systems.`09 */ X#ifndef MAC X#ifdef lint X#ifdef Pyramid X/* Pyramid makes constants greater than 65535 into long! Gakk! -CJS- */ X/*ARGSUSED*/ X/*VARARGS2*/ Xstatic Ioctl(i, l, p) long l; char *p; `7B return 0; `7D X#else X/*ARGSUSED*/ X/*VARARGS2*/ Xstatic Ioctl(i, l, p) char *p; `7B return 0; `7D X#endif X#define ioctl`09 Ioctl X#endif X X#if !defined(USG) && defined(lint) X/* This use_value hack is for curses macros which return a value, X but don't shut up about it when you try to tell them (void).`09 */ X/* only needed for Berkeley UNIX */ Xint Use_value; X#define use_value Use_value += X#else X#define use_value X#endif X X#if defined(SYS_V) && defined(lint) X/* This use_value2 hack is for curses macros which use a conditional X expression, and which say null effect even if you cast to (void). */ X/* only needed for SYS V */ +-+-+-+-+-+-+-+- END OF PART 23 +-+-+-+-+-+-+-+-