This is vmstty.c in view mode; [Download] [Up]
/* SCCS Id: @(#)vmstty.c 3.0 88/05/03 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ /* tty.c - (VMS) version */ #define NEED_VARARGS #include "hack.h" #include <descrip.h> #include <iodef.h> #include <smgdef.h> #define LIB$M_CLI_CTRLT 0x100000 #define LIB$M_CLI_CTRLY 0x2000000 extern short ospeed; char erase_char, intr_char, kill_char; static boolean settty_needed = FALSE; static unsigned int kb = 0; int vms_getchar() { short key; if (kb) { SMG$READ_KEYSTROKE(&kb, &key); switch (key) { case SMG$K_TRM_UP: key = 'k'; break; case SMG$K_TRM_DOWN: key = 'j'; break; case SMG$K_TRM_LEFT: key = 'h'; break; case SMG$K_TRM_RIGHT: key = 'l'; break; case '\r': key = '\n'; break; default: if (key == '\007' || key == '\032' || key > 255) key = '\033'; break; } } else key = getchar(); return key; } static struct sensemode { short status; unsigned char xmit_baud; unsigned char rcv_baud; unsigned char crfill; unsigned char lffill; unsigned char parity; unsigned char unused; char class; char type; short scr_wid; unsigned long tt_char: 24, scr_len: 8; unsigned long tt2_char; } sg; unsigned int ctrl_mask; static void setctty(){ } /* * Get initial state of terminal, set ospeed (for termcap routines) * and switch off tab expansion if necessary. * Called by startup() in termcap.c and after returning from ! or ^Z */ void gettty(){ int status; int input_chan; $DESCRIPTOR (input_dsc, "TT"); unsigned int zero = 0; if (!(SYS$ASSIGN (&input_dsc, &input_chan, 0, 0) & 1)) perror("NetHack (gettty)"); status = SYS$QIOW(0, input_chan, IO$_SENSEMODE, &sg, 0, 0, &sg.class, 12, 0, 0, 0, 0); SYS$DASSGN (input_chan); if (!(status & 1)) perror("NetHack (gettty)"); ospeed = sg.xmit_baud; erase_char = '\177'; kill_char = '\025'; intr_char = '\003'; (void) LIB$ENABLE_CTRL(&zero, &ctrl_mask); /* Use the systems's values for lines and columns if it has any idea. */ if (sg.scr_len) LI = sg.scr_len; if (sg.scr_wid) CO = sg.scr_wid; settty_needed = TRUE; } #ifdef MAIL unsigned long pasteboard_id = 0; #endif /* reset terminal to original state */ void settty(s) char *s; { clear_screen(); end_screen(); if(s) Printf(s); (void) fflush(stdout); SMG$DELETE_VIRTUAL_KEYBOARD(&kb); #ifdef MAIL SMG$DELETE_PASTEBOARD(&pasteboard_id); #endif if (ctrl_mask) (void) LIB$ENABLE_CTRL(&ctrl_mask, 0); flags.echo = ON; flags.cbreak = OFF; } #ifdef MAIL static void broadcast_ast(dummy) { extern int broadcasts; broadcasts++; } #endif void setftty(){ unsigned int mask = LIB$M_CLI_CTRLT | LIB$M_CLI_CTRLY; flags.cbreak = ON; flags.echo = OFF; (void) LIB$DISABLE_CTRL(&mask, 0); SMG$CREATE_VIRTUAL_KEYBOARD(&kb); #ifdef MAIL SMG$CREATE_PASTEBOARD(&pasteboard_id, 0, 0, 0, 0); SMG$SET_BROADCAST_TRAPPING(&pasteboard_id, broadcast_ast, 0); #endif start_screen(); } void intron() { /* enable kbd interupts if enabled when game started */ } void introff() { /* disable kbd interrupts if required*/ } /* fatal error */ /*VARARGS1*/ void error VA_DECL(char *,s) VA_START(s); VA_INIT(char *,s); if(settty_needed) settty(NULL); Vprintf(s,VA_ARGS); (void) putchar('\n'); VA_END(); exit(1); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.