[comp.sources.games] v11i094: larn - dungeon type adventure game, Part11/11

billr@saab.CNA.TEK.COM (Bill Randle) (12/19/90)

Submitted-by: routley@tle.ENET.DEC.COM (Kevin Routley)
Posting-number: Volume 11, Issue 94
Archive-name: larn/Part11
Environment: Unix, VMS, MS-DOS, termcap



#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 11 (of 11)."
# Contents:  config.c fgetlr.c fortune.c help.c larn.ftn larn122.fix
#   nansisys.uue nap.c signal.c termcap.vms vmsreadme.txt
# Wrapped by billr@saab on Tue Dec 18 10:14:24 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'config.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'config.c'\"
else
echo shar: Extracting \"'config.c'\" \(2726 characters\)
sed "s/^X//" >'config.c' <<'END_OF_FILE'
X/*
X *	config.c	--	This defines the installation dependent variables.
X *                  Some strings are modified later.  ANSI C would
X *                  allow compile time string concatenation, we must
X *                  do runtime concatenation, in main.
X *
X *		Larn is copyrighted 1986 by Noah Morgan.
X */
X#include "header.h"
X
X#ifndef LARNHOME
X#define LARNHOME "/usr/games/larn/"		/* normally supplied by a Makefile */
X#endif
X
X#ifndef WIZID
X#define WIZID	0
X#endif
X
X/*
X *	All these strings will be appended to in main() to be complete filenames
X */
X
X# ifndef MSDOS
X		/* the game save filename   */
Xchar savefilename[SAVEFILENAMESIZE] = 	LARNHOME;
X
X		/* the score file	    	*/
Xchar scorefile[sizeof(LARNHOME)+sizeof(SCORENAME)] =	LARNHOME;
X
X		/* the logging file     	*/
Xchar logfile[sizeof(LARNHOME)+sizeof(LOGFNAME)]  =		LARNHOME;
X
X		/* the help text file		*/
Xchar helpfile[sizeof(LARNHOME)+sizeof(HELPNAME)] = 		LARNHOME;
X
X		/* the maze data file		*/
Xchar larnlevels[sizeof(LARNHOME)+sizeof(LEVELSNAME)] = 	LARNHOME;
X
X		/* the fortune data file	*/
Xchar fortfile[sizeof(LARNHOME)+sizeof(FORTSNAME)] =		LARNHOME;
X
X		/* the .larnopts filename */
Xchar optsfile[128];				/* the option file			*/
X
X		/* the player id datafile name */
Xchar playerids[sizeof(LARNHOME)+sizeof(PLAYERIDS)] =	LARNHOME;
X
X# ifdef TIMECHECK
X		/* the holiday datafile */
Xchar holifile[sizeof(LARNHOME)+sizeof(HOLIFILE)] =		LARNHOME;
X# endif
X
Xchar ckpfile[sizeof(LARNHOME)+sizeof(CKPFILE)] = LARNHOME;
X
X# ifdef EXTRA
Xchar diagfile[] ="Diagfile";		/* the diagnostic filename	*/
X# endif
X
X# else /* ndef MSDOS */
X
X/* For MSDOS, use fixed length files because of a bug in sizeof.
X */
X#   ifdef DGK_MSDOS
X/* Make LARNHOME readable from the larnopt file into a lardir variable.
X */
Xchar savefilename[PATHLEN];
Xchar scorefile[PATHLEN];
Xchar logfile[PATHLEN];
Xchar helpfile[PATHLEN];
Xchar larnlevels[PATHLEN];
Xchar fortfile[PATHLEN];
Xchar optsfile[PATHLEN];
Xchar playerids[PATHLEN];
Xchar ckpfile[PATHLEN];
Xchar swapfile[PATHLEN];
Xchar larndir[DIRLEN]		= LARNHOME;
X#   else
Xchar savefilename[PATHLEN]	= LARNHOME;
Xchar scorefile[PATHLEN]		= LARNHOME;
Xchar logfile[PATHLEN]		= LARNHOME;
Xchar helpfile[PATHLEN]		= LARNHOME;
Xchar larnlevels[PATHLEN]	= LARNHOME;
Xchar fortfile[PATHLEN]		= LARNHOME;
Xchar optsfile[PATHLEN]		= LARNHOME;
Xchar playerids[PATHLEN]		= LARNHOME;
Xchar swapfile[PATHLEN]		= LARNHOME;
Xchar ckpfile[PATHLEN]		= LARNHOME;
X#   endif
X# endif	/* ndef MSDOS */
X
Xchar *password ="pvnert(x)";	/* the wizards password <=32*/
X#if WIZID == -1
Xint wisid=0;			/* the user id of the only person who can be wizard */
X#else
Xint wisid=WIZID;		/* the user id of the only person who can be wizard */
X#endif
Xchar psname[PSNAMESIZE]="larn";	/* the process name		*/
END_OF_FILE
if test 2726 -ne `wc -c <'config.c'`; then
    echo shar: \"'config.c'\" unpacked with wrong size!
fi
# end of 'config.c'
fi
if test -f 'fgetlr.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'fgetlr.c'\"
else
echo shar: Extracting \"'fgetlr.c'\" \(2670 characters\)
sed "s/^X//" >'fgetlr.c' <<'END_OF_FILE'
X/************************************************************************
X *									*
X *			Copyright (c) 1982, Fred Fish			*
X *			    All Rights Reserved				*
X *									*
X *	This software and/or documentation is released for public	*
X *	distribution for personal, non-commercial use only.		*
X *	Limited rights to use, modify, and redistribute are hereby	*
X *	granted for non-commercial purposes, provided that all		*
X *	copyright notices remain intact and all changes are clearly	*
X *	documented.  The author makes no warranty of any kind with	*
X *	respect to this product and explicitly disclaims any implied	*
X *	warranties of merchantability or fitness for any particular	*
X *	purpose.							*
X *									*
X ************************************************************************
X */
X
X
X/*
X *  LIBRARY FUNCTION
X *
X *	fgetlr    get logical record from a file
X *
X *  KEY WORDS
X *
X *	fgetlr
X *	string functions
X *
X *  SYNOPSIS
X *
X *	char *fgetlr(bp,bpsize,fp)
X *	char *bp;
X *	int bpsize;
X *	FILE *fp;
X *
X *  DESCRIPTION
X *
X *	Reads the next logical record from stream "fp" into buffer "bp"
X *	until next unescaped newline, "bpsize" minus one characters
X *	have been read, end of file, or read error.
X *	The last character read is followed by a NULL.
X *
X *	A logical record may span several physical records by having
X *	each newline escaped with the standard C escape character
X *	(backslash).
X *
X *	This is particularly useful for things like the termcap
X *	file, where a single entry is too long for one physical
X *	line, yet needs to be treated as a single record.
X *
X *	Returns its first argument unless an end of file or read
X *	error occurs prior to any characters being read.
X *
X *  BUGS
X *
X *	The only way to know if read was terminated due to buffer size
X *	limitation is to test for a newline before the terminating
X *	null.
X *
X */
X
X#include <stdio.h>
X
X/*
X *  PSEUDO CODE
X *
X *	Begin fgetlr
X *	    If read fails then
X *		Return NULL.
X *	    Else
X *		Find out how many characters were read.
X *		Initialize pointer to terminating null.
X *		If last char read was newline then
X *		    If newline was escaped then
X *			Replace backslash with the newline.
X *			Replace newline with null.
X *			Read and append more.
X *		    End if
X *		End if
X *		Return buffer pointer.
X *	    End if
X *	End fgetlr
X *
X */
X
Xchar *fgetlr(bp,bpsize,fp)
Xchar *bp;
Xint bpsize;
XFILE *fp;
X{
X    int numch;
X    char *cp;
X
X    if (fgets(bp,bpsize,fp) == NULL) {
X	return(NULL);
X    } else {
X	numch = strlen(bp);
X	cp = &bp[numch];
X	if (*--cp == '\n') {
X	    if (numch > 1 && *--cp == '\\') {
X		*cp++ = '\n';
X		*cp = (char) NULL;
X		fgetlr(cp,bpsize-numch+1,fp);
X	    }
X	}
X	return(bp);
X    }
X}
END_OF_FILE
if test 2670 -ne `wc -c <'fgetlr.c'`; then
    echo shar: \"'fgetlr.c'\" unpacked with wrong size!
fi
# end of 'fgetlr.c'
fi
if test -f 'fortune.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'fortune.c'\"
else
echo shar: Extracting \"'fortune.c'\" \(3378 characters\)
sed "s/^X//" >'fortune.c' <<'END_OF_FILE'
X/* fortune.c		 Larn is copyrighted 1986 by Noah Morgan. */
X#ifdef VMS
X#include <types.h>
X#include <stat.h>
X#include <file.h>
X#else
X# include <sys/types.h>
X# include <sys/stat.h>
X# ifndef BSD41
X#  include <fcntl.h>
X# else BSD41
X# define O_RDONLY 0
X# endif BSD4.1
X#endif VMS
X
X#include "header.h"
X
X# ifdef MSDOS
X# include <stdio.h>
X/* Rumors has been entirely rewritten to be disk based.  This is marginally
X * slower, but requires no mallocked memory.  Notice this in only valid for
X * files smaller than 32K.
X */
Xstatic int fortsize = 0;
Xextern char fortfile[];
X
Xoutfortune()
X{
X	int	fd, status, i;
X	char	buf[BUFSIZ], ch;
X
X	if (fortsize < 0)	/* We couldn't open fortunes */
X		return;
X	if ((fd = open(fortfile, O_RDONLY | O_BINARY)) >= 0) {
X		if (fortsize == 0)
X			fortsize = (int) lseek(fd, 0L, 2);
X		if (lseek(fd, (long) rund(fortsize), 0) < 0)
X			return;
X
X		/* Skip to next newline or EOF
X		 */
X		do {
X			status = read(fd, &ch, 1);
X		} while (status != EOF && ch != '\n');
X		if (status == EOF)
X			if (lseek(fd, 0L, 0) < 0) /* back to the beginning */
X				return;
X
X		/* Read in the line.  Search for CR ('\r'), not NL
X		 */
X		for (i = 0; i < BUFSIZ - 1; i++)
X			if (read(fd, &buf[i], 1) == EOF || buf[i] == '\r')
X				break;
X		buf[i] = '\0';
X
X		/* And spit it out
X		 */
X		lprcat("  Inside you find a scrap of paper that says:\n");
X		lprcat(buf);
X		close(fd);
X	} else
X		fortsize = -1;	/* Don't try opening it again */
X}
X
X# else
X
X/*
X *	function to return a random fortune from the fortune file
X */
Xstatic char *base=0;	/* pointer to the fortune text */
Xstatic char **flines=0;	/* array of pointers to each fortune */
Xstatic int fd=0;	/* true if we have load the fortune info */
Xstatic int nlines=0;	/* # lines in fortune database */
X
Xchar *fortune(file)
Xchar *file;
X{
X	register char *p;
X	register int lines,tmp;
X	struct stat stat;
X	void *malloc();
X
X	if (fd == 0) {
X		if ((fd=open(file,O_RDONLY)) < 0)	/* open the file */
X			return(0); /* can't find file */
X
X		/* find out how big fortune file is and get memory for it */
X		stat.st_size = 16384;
X		if ((fstat(fd,&stat) < 0)
X		|| ((base=(char *)malloc(1+stat.st_size)) == 0)) {
X			close(fd);
X			fd= -1;
X			free((char*)base);
X			return(0); 	/* can't stat file */
X		}
X
X		/* read in the entire fortune file */
X#ifdef VMS
X		/*
X		 * fstat lies about the size (each record has up to
X		 * three bytes of fill reported as actual size).
X		 * vread returns correct size.
X		 */
X		stat.st_size = vread(fd,base,stat.st_size);
X		if (stat.st_size <= 0)
X#else
X		if (vread(fd,base,stat.st_size) != stat.st_size)
X#endif
X		{
X			close(fd);
X			fd= -1;
X			free((char*)base);
X			return(0); 	/* can't read file */
X		}
X		close(fd);
X		base[stat.st_size]=0;	/* final NULL termination */
X
X		/* count up all the lines (and 0 terminate) to know memory
X		 * needs
X		 */
X		for (p=base,lines=0; p<base+stat.st_size; p++) /* count lines */
X			if (*p == '\n') *p=0,lines++;
X		nlines = lines;
X
X		/* get memory for array of pointers to each fortune */
X		if ((flines=(char**)malloc(nlines*sizeof(char*))) == 0)	{
X			free((char*)base);
X			fd= -1;
X			return(0); /* malloc() failure */
X		}
X
X		/* now assign each pointer to a line */
X		for (p=base,tmp=0; tmp<nlines; tmp++)
X			{
X			flines[tmp]=p;  while (*p++); /* advance to next line */
X			}
X	}
X
X	if (fd > 2)	/* if we have a database to look at */
X		return(flines[rund((nlines<=0)?1:nlines)]);
X	else 
X		return(0);
X}
X# endif
END_OF_FILE
if test 3378 -ne `wc -c <'fortune.c'`; then
    echo shar: \"'fortune.c'\" unpacked with wrong size!
fi
# end of 'fortune.c'
fi
if test -f 'help.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'help.c'\"
else
echo shar: Extracting \"'help.c'\" \(2748 characters\)
sed "s/^X//" >'help.c' <<'END_OF_FILE'
X/*	help.c		Larn is copyrighted 1986 by Noah Morgan. */
X#include "header.h"
X/*
X *	help function to display the help info	
X *
X *	format of the .larn.help file
X *
X *	1st character of file:	# of pages of help available (ascii digit)
X *	page (23 lines) for the introductory message (not counted in above)
X *	pages of help text (23 lines per page)
X */
Xextern char helpfile[];
Xhelp()
X    {
X    register int i,j,maxj;
X#ifndef VT100
X#ifndef MSDOS
X    char tmbuf[128];	/* intermediate translation buffer when not a VT100 */
X#endif
X#endif
X
X    /* open the help file and get # pages 
X    */
X    if ((j=openhelp()) < 0)  
X	return;
X
X    /* skip over intro message 
X    */
X    for (i=0; i<23; i++) 
X	lgetl();
X
X    /* if command mode, skip over the second page (prompt mode help)
X    */
X    if (!prompt_mode)
X	{
X	for (i=0; i<23; i++)
X	    lgetl();
X	j--;
X	}
X
X    for (maxj = j;  j>0; j--)
X	{
X	clear();
X	for (i=0; i<23; i++)
X#if (defined(VT100) || defined(MSDOS))
X	    lprcat(lgetl());	/* print out each line that we read in */
X#else
X	    { 
X	    tmcapcnv(tmbuf,lgetl());  
X	    lprcat(tmbuf); 
X	    } /* intercept \33's */
X#endif
X	if (j>1)
X	    {
X	    lprcat("    ---- Press ");  standout("return");
X	    lprcat(" to exit, ");       standout("space");
X	    lprcat(" for more help ---- ");
X	    i=0; while ((i!=' ') && (i!='\n') && (i!='\33')) i=ttgetch();
X	    if ((i=='\n') || (i=='\33'))
X		{
X		lrclose();  
X		setscroll();  
X		drawscreen();  
X		return;
X		}
X	    }
X
X	/* For prompt mode, skip over the third page (command mode help)
X	   This could be done more efficiently, but its not worth the trouble.
X	*/
X	if ((prompt_mode) && (j==maxj))
X	    {
X	    for (i=0; i<23; i++)
X		lgetl();
X	    j--;
X	    }
X
X	}
X    lrclose();  
X    retcont();  
X    drawscreen();
X    }
X
X/*
X *	function to display the welcome message and background
X */
Xwelcome()
X	{
X	register int i;
X#ifndef VT100
X	char tmbuf[128];	/* intermediate translation buffer when not a VT100 */
X#endif
X	if (openhelp() < 0)  return;   	/* open the help file */
X	clear();
X	for(i=0; i<23; i++)
X#ifdef VT100
X			lprcat(lgetl());	/* print out each line that we read in */
X#else
X			{ tmcapcnv(tmbuf,lgetl());  lprcat(tmbuf); } /* intercept \33's */
X#endif
X	lrclose();  retcont();	/* press return to continue */
X	}
X
X/*
X *	function to say press return to continue and reset scroll when done
X */
Xretcont()
X	{
X	cursor(1,24); lprcat("Press "); standout("return");
X	lprcat(" to continue: ");   while (ttgetch() != '\n');
X	setscroll();
X	}
X
X/*
X *	routine to open the help file and return the first character - '0'
X */
Xstatic openhelp()
X	{
X	if (lopen(helpfile)<0)
X		{
X		lprintf("Can't open help file \"%s\" ",helpfile);
X		lflush(); sleep(4);	drawscreen();	setscroll(); return(-1);
X		}
X	resetscroll();  return(lgetc() - '0');
X	}
X
END_OF_FILE
if test 2748 -ne `wc -c <'help.c'`; then
    echo shar: \"'help.c'\" unpacked with wrong size!
fi
# end of 'help.c'
fi
if test -f 'larn.ftn' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'larn.ftn'\"
else
echo shar: Extracting \"'larn.ftn'\" \(1324 characters\)
sed "s/^X//" >'larn.ftn' <<'END_OF_FILE'
Xgem value = gem * 2 ^ perfection
Xsitting down can have unexpected results
Xdon't pry into the affairs of others
Xdrinking can be hazardous to your health
Xbeware of the gusher!
Xsome monsters are greedy
Xnymphs have light fingers
Xtry kissing a disenchantress!
Xhammers and brains don't mix
Xwhat does a potion of cure dianthroritis taste like?
Xhit point gain/loss when raising a level depends on constitution
Xhealing a mighty wizard can be exhilarating
Xbe sure to pay your taxes
Xare Vampires afraid of something?
Xsome dragons can fly
Xdos thou strive for perfection?
Xpatience is a virtue, unless your daughter dies
Xwhat does the Eye of Larn see in its guardian?
Xa level 25 player casts like crazy!
Xenergy rings affect spell regeneration
Xdifficulty affects regeneration
Xcontrol of the pesty spirits is most helpful
Xdon't fall into a bottomless pit
Xdexterity allows you to carry more
Xyou can get 2 points of WC for the price of one
Xnever enter the dungeon naked!  the monsters will laugh at you!
Xdid someone put itching powder in your armor?
Xyou klutz!
Xavoid opening doors.  you never know whats on the other side.
Xinfinite regeneration ---> temptation
Xthe greatest weapon in the game has not the highest Weapon Class
Xyou can't buy the most powerful scroll
Xidentify things before you use them
Xthere's more than one way through a wall
END_OF_FILE
if test 1324 -ne `wc -c <'larn.ftn'`; then
    echo shar: \"'larn.ftn'\" unpacked with wrong size!
fi
# end of 'larn.ftn'
fi
if test -f 'larn122.fix' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'larn122.fix'\"
else
echo shar: Extracting \"'larn122.fix'\" \(3545 characters\)
sed "s/^X//" >'larn122.fix' <<'END_OF_FILE'
XThis is a list of the fixes and enhancements made to create Larn V12.2 from
XLarn 12.0.  SPOILER ALERT!
X
XChanges made to create version 12.2 from 12.1:
X
X1.  Add messages to improve feedback to the user.
X
X2.  Improved screen drawing performance again.
X
X3.  Flying monsters (bats, floating eyes) are no longer affected by traps.
X
X4.  Added HACK-like objects, with 'original-objects' option.
X
X5.  Added 'bold-objects' option.
X
X6.  Fixed a bug where the game would apparently 'hang' for a long period of
X    time, especially just after killing a monster with a missile spell.
X
X7.  Prevented invulnerability when doing VPR on a throne or altar.
X
X8.  Scrolls of pulverization now have the same affect when directed against
X    an altar or fountain as they did directed against a throne.  VPR spell
X    cause a waterlord to appear when used near a fountain.
X
X9.  Added the '@' command and 'auto-pickup' option.
X
X10. Added 'prompt-on-objects' option.
X
X11. Improved monster movement performance again.
X
X12. You can now weild '-' to unweild your weapon.
X
X13. Waterlords can now be found in the dungeon, not just when washing at a
X    fountain.
X
X14. The Eye of Larn can now be sold in the Trading Post.
X
X15. Spells can now bounce off mirrors at an angle.
X
X
XChanges made to create version 12.1 from 12.0:
X
X1.  When drinking at a fountain, "improved sight" caused the "see invisible"
X    potion to be known by the player.  The player must now identify the potion
X    in the usual manner.
X
X2.  Falling through a pit told you the damage you received, but falling through
X    a trap door did not.  Made trap doors act the same as pits.
X
X3.  If you dropped a ring of dexterity/strength/cleverness that had been dulled
X    to a negative amount, the corresponding stat was permanently increased.  No
X    longer.
X
X4.  The potion of monster location would show invisible monsters as the floor
X    character on new levels.  Now prevented.
X
X5.  Selling all your gems at the bank could destroy items in your inventory.
X
X6.  Monster creation was being allowed on closed doors.  This was particularly
X    a problem with treasure rooms, since it meant that a monster much too
X    powerful for the player to handle was loose in the maze.  Monsters cannot
X    now be created on closed doors.
X
X7.  When entering a number (when entering gold amounts) you could not use the
X    backspace key to delete digits.  Fixed.
X
X8.  To make it more convenient when selling items in the Larn Trading Post, a
X    display of those items in the players inventory that can be sold has been
X    added.
X
X9.  Performance of the display has been improved slightly.
X
X10. Monster movement has been improved for large numbers of monsters.  It is
X    somewhat better on PC's, even with aggravation.
X
X11. I have added new mazes to LARN.MAZ.
X
X12. A Rogue-like command mode has been added, and is the default.  The
X    version 12.0 prompting mode has been preserved for those who like it,
X    accessible via a command line option.  Command letters have been added
X    to provide the ability to perform all the same actions as the prompt mode.
X    The help file and command line help have been updated.  When in command
X    mode, the player will automatically pick up objects, and can read, quaff,
X    eat, look at, and pick up objects that you are standing on.
X
X    In order to implement the new commands, the A and D commands from version
X    12.0 have been changed.  They are now ^A and I.  For consistancy, to see
X    the list of known spells at the spell prompt, 'I' also shows all known
X    spells.
END_OF_FILE
if test 3545 -ne `wc -c <'larn122.fix'`; then
    echo shar: \"'larn122.fix'\" unpacked with wrong size!
fi
# end of 'larn122.fix'
fi
if test -f 'nansisys.uue' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'nansisys.uue'\"
else
echo shar: Extracting \"'nansisys.uue'\" \(3474 characters\)
sed "s/^X//" >'nansisys.uue' <<'END_OF_FILE'
Xbegin 666 nansi.sys
XM_____Q. RP#6 $-/3B @(" @&ULR2DYA;G-I+G-Y<R!V,BXR.B!.97<@04Y3
XM22!D<FEV97(@*$,I($1A;FEE;"!+96=E;"P@4&%S861E;F$L($-!(#$Y.#8-
XM"AH      0   QA/       '               #            6QL  '@ 
XM        =P      H64 B]BT )**Q[0 *]!"BL/^P/8F9P "QX#4  / E\-P
XM"2,!(P$? 28!-0%) 50!F &8 2,!(P$NB1Y< "Z,!EX R_M04U%25597'@8N
XMQ1Y< (I' L1W#HM/$CP,=R"3T>.,R([8_Y>S "[%'EP #0 !B4<#!Q]?7EU:
XM65M8R^@* .OF+L<&BP ! ,^X$PC#,\##XPJ+_E'HXP)9JN+X,\##Z",#= O%
XM'EP B$<-,\#K [@  L/H#P.X  )T C/ PS/ HX, HX< HXL HX\ N$  CL F
XMH1H )J,< #/ PP#['@904U%25597N0$ C,N.PX[;OG(!B 3H"@!?7EU:65M8
XM!Q_/C 9O +A  ([8H4D +J)C /[,+H@F90"@8@"8 \"3BX=0 "ZC9@"A8P N
XMHW, H4X T>C1Z-'HT>B Q+ N@#YC  =T X#$" X?HVT CL#HJ_[H% %R ^B?
XM 8L>=0"*)FL CAYO /SC(RZ#/F$  '50Z/4 <@/I# &L/!QR(B[7JTK@]70$
XMZP3@YW1HC,B.V*!E /[ *L*B9@#H+0$SP,,\&W0:/ UT+SP*=& \"70+/ AT
XM$#P'=!CIP@#K>9#II +IE (N.A9E '<#3T]"Z[CH(@(*P.NQ+J!E /[ *L*T
XM "OX*_@NBA9E $(NBB9K  P!ZY1!+O8&8  !=05/3T+KABZ*%F4 0BOZ*_HN
XMH&0 +C@&9P!R!>@% >L0+OX&9P NH&4 M !  \ #^"Z*)FL # 'I4O\NH&4 
XM_L JPE&U (K(@.$']MF P0@KT9RP(.@6 ','\ZN=6>DL_P/1Z#P 2N+ZG5GI
XM'_\N@#YC  1R"BZ /F, !W0"^,/YP^CI_W,(Z?G^K#P<<@TNU^@. $K@\W0&
XMZ?7^Z0;_Z5?_4E%34"Z@90#^P"K"+J)F "Z+%F8 ,]NT LT0N0$ 6%"*W+< 
XMM G-$%A;65K#Z)S_<RJ+W]'KBQ9S + .[NL 0HK'[NL 2K /[NL 0HK#[KA 
XM ([8+J%F *-0 ,.X%H_HGO_#M #H9/]S%RZ*)FL @.1_+H ^8P '=0> _ %U
XM K0'PU!345+HVO^*_+ !M :Q +4 +HH690 NBC9D ,T06EE;6,.+-N $"L!T
XM K0 .S;>!'8.BPP[1/YT"X/N!"OQZ^P+]NL'@^X"*_$ZP,.Y! "[?P"#PP2+
XM-POVX??#Z.W_="G_#TZ+;P(^B@*#[@%R&8'[@P!T$PK =0__#SZ*(L<&@P !
XM (@F> #K&[0 S18+P'3XZ(W_=0J)#H\ B3:1 .N[/ !TV</HH_]T"4Z+;P(^
XMB@+K&K0!S19T%PO =0:T ,T6Z_#H6_]U!0/QBD3_@,P!PQ0% P!04U%25597
XML+:Z0P#N2BZAAP3K .Z&X.L [KIA .L [% , ^L [@:X0 ".P":+'FP +@,>
XMB02Y__\FH6P .\-_ N+V!U@D_.Y?7EU:65M8PP  ,# P,# NB1YQ "ZC80#I
XM-/TNBQYQ "[_)F$ Z9D X@6X @7KX*P\6W7Q+HL>W 0NQ@< +L8&VP0 X@6X
XM'07KQ:P\/70'/#]T T[K!^(%N# %Z[*L/#!R%CPY=Q(L,"Z(!R[&!ML$ >)B
XMN*@%ZY<\(G0$/"=U="ZB:@#B!;A>!>N$K"XZ!FH =!,NB <N.Q[>!(/3 .+K
XMN%X%Z6G_+L8' .(&N(4%Z5W_K#P[= )!3N*BN# %Z4[_+L<&80   "Z*)FL 
XM+HL>=0#I:_VL/#!R&CPY=Q8L,"Z&!U*R"O;B6BX !^+GN*@%Z1O_/#MU$"X[
XM'MX$@], +L8&VP0 ZYX\0'*U/'IWL3Q:=@8\87*I+ 9641X.'RQ F / !44&
XMB\LNBS;<!"O.+O8&VP0!= %!DZ!E $ JPJ)F +0 K K =0% _Q<?65XNBB9K
XM "Z+'G4 +L<&80    O2Z>7[U H%,#"&X*J&X*K#30@ !_H&YP;M!J\&KP:O
XM!K &KP9/!T8'(P@?"*\&KP91"*\&KP:O!J\&KP:O!J\&KP:O!J\&KP:O!J\&
XMKP:O!K &KP:2"*\&KP:O!@H)' =S!Z\&J >O!J\&#0>O!A0'KP:O!J\&#@FO
XM!L,*P'0!2*)G #/ @_D"<@:L"L!T 4BB9@"A9@ Z!F4 =@:@90"B9@ Z)F0 
XM=@:@9 "B9P#HK?G#  9F .O;* 9F ',%Q@9F  #KS@ &9P#KR"@&9P!S!<8&
XM9P  Z[NA9@"C: ##H6@ HV8 ZZQ."\EU!,8$ $&L4;D6 )"[*PF#PP,Z!^#Y
XM=0N+1P$@!FL ""9K %GBX,-2BPYF (KUZQ0\ G4?QP9F    Z#?Y4C/)BC9D
XM .@P_(K\BA9E +@ !LT06L-74@:,R([ _;^  *!G /[ Z+/^L#NJH&8 _L#H
XMJ/ZP4JJP#8D^B0"JN(( *\>CAP#\!UI?PPO)=%G\3DE)K0K = )!3E<&45;]
XM'@?H%OQU%H/!!(LNW@0!#MX$3HO^ _F+SBO-\Z1>68L^W@2#[P2+WRO9@^L0
XM.Q[<!'(2B4T#B44!XP:D@\8"XOJ)/MX$!U_\PP8>!_V+/N $N $ J[@ <JNP
XM$*J)/MX$!^ODM ;K K0'BCYD "H^9P ZQW8"L !0Z%_[BOQ8L0"*+F< 4HH6
XM90"*-F0 S1!:P[4!ZP*U .BI^G,Y.L)V HK"5Y&+Z;4 B_<#\0/Q]MD"RK4 
XM_/;$ 70,A_[]B\%( \ #^ /P!A_SI8O-Z O[L"#SJ_Q?P['_/ =U!H@.8 #K
XM:SPK=4*T$KL0_\T0]\/\_G5:Z$WZ<U6T *!C ,T0N!(1LP#-$+@ $K,@S1"T
XM ;D'!\T0BQ9S + *[NL 0K '[L8&9  JZPFT ,T0Q@9D !BX0  >CMBA20 ?
XMHF, _LR()F4 QP9F    Z(KWP[$ ZX:+'G4 XP].K4EU HK@ MB UP"()\,S
XMP(@'0_[ =?GK]   !P'_" 3X 07_@ ?X< B( ![X !_X!"#X B'X!B+X 2/X
XM!23X R7X!RB/ "F/0"J/("N/8"R/$"V/4"Z/,"^/<#/ CMB[; #'!Q<!C$\"
XMNZ0 QP=S 8Q/ @X?#@?\OW )B3[<!(''  *)/MX$1[ 0JK@ <JNX 0")/N $
X9JXD^=0 SP*K^P'7[,\#%-EP B7P.C$P0PP*)
X 
Xend
END_OF_FILE
if test 3474 -ne `wc -c <'nansisys.uue'`; then
    echo shar: \"'nansisys.uue'\" unpacked with wrong size!
fi
# end of 'nansisys.uue'
fi
if test -f 'nap.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'nap.c'\"
else
echo shar: Extracting \"'nap.c'\" \(3329 characters\)
sed "s/^X//" >'nap.c' <<'END_OF_FILE'
X/* nap.c         Larn is copyrighted 1986 by Noah Morgan. */
X#ifdef VMS
X#include <signal.h>
X#include <types.h>
X#include <time.h>
X#else
X#include <signal.h>
X#include <sys/types.h>
X#ifdef SYSV
X# ifdef MSDOS
X#   include <dos.h>
X# else
X#   include <sys/times.h>
X# endif
X#else
X#ifdef BSD
X#include <sys/timeb.h>
X#endif BSD
X#endif SYSV
X#endif
X/*
X *  routine to take a nap for n milliseconds
X */
Xnap(x)
X    register int x;
X    {
X    if (x<=0) return; /* eliminate chance for infinite loop */
X    lflush();
X    if (x > 999) sleep(x/1000); else napms(x);
X    }
X
X#ifdef NONAP
Xnapms(x)    /* do nothing */
X    int x;
X    {
X    }
X#else NONAP
X#ifdef SYSV
X/*  napms - sleep for time milliseconds - uses times() */
X/* this assumes that times returns a relative time in 60ths of a second */
X/* this will do horrible things if your times() returns seconds! */
X
X#ifdef MSDOS
Xunsigned long
Xdosgetms()
X{
X    union REGS regs;
X
X    regs.h.ah = 0x2C;
X    intdos(&regs, &regs);
X
X    /* return hundreths of seconds
X    */
X    return ( 360000L * regs.h.ch +
X	       6000L * regs.h.cl +
X		100L * regs.h.dh + regs.h.dl );
X}
X
Xnapms(time)
Xint time;
X{
X    unsigned long matchclock;
X
X    if (time <= 0)
X        time = 1;   /* eliminate chance of infinite loop */
X    matchclock = dosgetms() + (time + 5) / 10;
X    if (matchclock > 8640000L)   /* total 100ths-of-seconds in 24 hrs */
X        return;
X
X    while (matchclock > dosgetms())
X        ;
X}
X
X# else
Xnapms(time)
X    int time;
X    {
X    long matchclock, times();
X    struct tms stats;
X
X    if (time<=0) time=1; /* eliminate chance for infinite loop */
X    if ((matchclock = times(&stats)) == -1 || matchclock == 0)
X        return; /* error, or BSD style times() */
X    matchclock += (time / 17);      /*17 ms/tic is 1000 ms/sec / 60 tics/sec */
X
X    while(matchclock < times(&stats))
X        ;
X    }
X# endif /* MSDOS */
X
X#else not SYSV
X#ifdef BSD
X#ifdef SIGVTALRM
X/* This must be BSD 4.2!  */
X#include <sys/time.h>
X#define bit(_a) (1<<((_a)-1))
X
Xstatic  nullf()
X    {
X    }
X
X/*  napms - sleep for time milliseconds - uses setitimer() */
Xnapms(time)
X    int time;
X    {
X    struct itimerval    timeout;
X    void    (*oldhandler) ();
X    int     oldsig;
X
X    if (time <= 0) return;
X
X    timerclear(&timeout.it_interval);
X    timeout.it_value.tv_sec = time / 1000;
X    timeout.it_value.tv_usec = (time % 1000) * 1000;
X
X    oldsig = sigblock(bit(SIGALRM));
X    setitimer(ITIMER_REAL, &timeout, (struct itimerval *)0);
X    oldhandler = signal(SIGALRM, nullf);
X    sigpause(oldsig);
X    signal(SIGALRM, oldhandler);
X    sigsetmask(oldsig);
X    }
X
X#else
X/*  napms - sleep for time milliseconds - uses ftime() */
X
Xstatic napms(time)
X    int time;
X    {
X    /* assumed to be BSD UNIX */
X    struct timeb _gtime;
X    time_t matchtime;
X    unsigned short matchmilli;
X    register struct timeb *tp = & _gtime;
X
X    if (time <= 0) return;
X    ftime(tp);
X    matchmilli = tp->millitm + time;
X    matchtime  = tp->time;
X    while (matchmilli >= 1000)
X        {
X        ++matchtime;
X        matchmilli -= 1000;
X        }
X
X    while(1)
X        {
X        ftime(tp);
X        if ((tp->time > matchtime) ||
X            ((tp->time == matchtime) && (tp->millitm >= matchmilli)))
X            break;
X        }
X    }
X#endif
X#else not BSD
Xstatic napms(time) int time; {} /* do nothing, forget it */
X#endif BSD
X#endif SYSV
X#endif NONAP
END_OF_FILE
if test 3329 -ne `wc -c <'nap.c'`; then
    echo shar: \"'nap.c'\" unpacked with wrong size!
fi
# end of 'nap.c'
fi
if test -f 'signal.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'signal.c'\"
else
echo shar: Extracting \"'signal.c'\" \(5122 characters\)
sed "s/^X//" >'signal.c' <<'END_OF_FILE'
X#include <signal.h>
X#include "header.h"			/* "Larn is copyrighted 1986 by Noah Morgan.\n" */
X#define BIT(a) (1<<((a)-1))
X
Xextern char savefilename[],wizard,predostuff,nosignal;
X
Xstatic s2choose()	/* text to be displayed if ^C during intro screen */
X	{
X	cursor(1,24); lprcat("Press "); setbold(); lprcat("return"); resetbold();
X	lprcat(" to continue: ");   lflush(); 
X	}
X
Xvoid cntlc()	/* what to do for a ^C */
X	{
X	if (nosignal) return;	/* don't do anything if inhibited */
X# ifndef MSDOS
X	signal(SIGQUIT,SIG_IGN);
X# endif
X	signal(SIGINT,SIG_IGN);
X	quit(); if (predostuff==1) s2choose(); else showplayer();
X	lflush();
X# ifndef MSDOS
X	signal(SIGQUIT,cntlc);
X# endif
X	signal(SIGINT,cntlc);
X	}
X
X/*
X *	subroutine to save the game if a hangup signal
X */
Xstatic sgam()
X	{
X	savegame(savefilename);  wizard=1;  died(-257); /* hangup signal */
X	}
X
X#ifdef SIGTSTP
Xstatic tstop() /* control Y	*/
X	{
X	if (nosignal)   return;  /* nothing if inhibited */
X	lcreat((char*)0);  clearvt100();	lflush();	  signal(SIGTSTP,SIG_DFL);
X#ifdef SIGVTALRM
X	/* looks like BSD4.2 or higher - must clr mask for signal to take effect*/
X	sigsetmask(sigblock(0)& ~BIT(SIGTSTP));
X#endif
X	kill(getpid(),SIGTSTP);
X
X	setupvt100();  signal(SIGTSTP,tstop);
X	if (predostuff==1) s2choose(); else drawscreen();
X	showplayer();	lflush();
X	}
X#endif SIGTSTP
X
X/*
X *	subroutine to issue the needed signal traps  called from main()
X */
Xvoid sigfpe()  { sigpanic(SIGFPE); }
X# ifndef MSDOS
Xstatic sigbus()  { sigpanic(SIGBUS); }
Xstatic sigill()  { sigpanic(SIGILL); }	 static sigtrap() { sigpanic(SIGTRAP); }
Xstatic sigiot()  { sigpanic(SIGIOT); }   static sigemt()  { sigpanic(SIGEMT); }
Xstatic sigsegv() { sigpanic(SIGSEGV); }  static sigsys()  { sigpanic(SIGSYS); }
Xstatic sigpipe() { sigpanic(SIGPIPE); }  static sigterm() { sigpanic(SIGTERM); }
X# endif
X
Xsigsetup()
X	{
X	signal(SIGINT,  cntlc);
X	signal(SIGFPE,  sigfpe);
X# ifndef MSDOS
X	signal(SIGBUS,  sigbus);		signal(SIGQUIT, cntlc);
X	signal(SIGKILL, SIG_IGN);		signal(SIGHUP,  sgam);
X	signal(SIGILL,  sigill);		signal(SIGTRAP, sigtrap);
X	signal(SIGIOT,  sigiot);		signal(SIGEMT,  sigemt);
X	signal(SIGSEGV, sigsegv);		signal(SIGSYS,  sigsys);
X	signal(SIGPIPE, sigpipe);		signal(SIGTERM, sigterm);
X#ifdef SIGTSTP
X	signal(SIGTSTP,tstop);		signal(SIGSTOP,tstop);
X#endif SIGTSTP
X# endif
X	}
X
X#ifdef MSDOS
X#define NSIG 9
X#endif
X
X#ifdef BSD	/* for BSD UNIX? */
X
Xstatic char *signame[NSIG] = { "",
X"SIGHUP",  /*	1	 hangup */
X"SIGINT",  /*	2	 interrupt */
X"SIGQUIT", /*	3	 quit */
X"SIGILL",  /*	4	 illegal instruction (not reset when caught) */
X"SIGTRAP", /*	5	 trace trap (not reset when caught) */
X"SIGIOT",  /*	6	 IOT instruction */
X"SIGEMT",  /*	7	 EMT instruction */
X"SIGFPE",  /*	8	 floating point exception */
X"SIGKILL", /*	9	 kill (cannot be caught or ignored) */
X"SIGBUS",  /*	10	 bus error */
X"SIGSEGV", /*	11	 segmentation violation */
X"SIGSYS",  /*	12	 bad argument to system call */
X"SIGPIPE", /*	13	 write on a pipe with no one to read it */
X"SIGALRM", /*	14	 alarm clock */
X"SIGTERM", /*	15	 software termination signal from kill */
X"SIGURG",  /*	16	 urgent condition on IO channel */
X"SIGSTOP", /*	17	 sendable stop signal not from tty */
X"SIGTSTP", /*	18	 stop signal from tty */
X"SIGCONT", /*	19	 continue a stopped process */
X"SIGCHLD", /*	20	 to parent on child stop or exit */
X"SIGTTIN", /*	21	 to readers pgrp upon background tty read */
X"SIGTTOU", /*	22	 like TTIN for output if (tp->t_local&LTOSTOP) */
X"SIGIO",   /*	23	 input/output possible signal */
X"SIGXCPU", /*	24	 exceeded CPU time limit */
X"SIGXFSZ", /*	25	 exceeded file size limit */
X"SIGVTALRM",/*  26	 virtual time alarm */
X"SIGPROF", /*	27	 profiling time alarm */
X"","","","" };
X
X#else BSD	/* for system V? */
X
Xstatic char *signame[NSIG] = { "",
X"SIGHUP",  /*	1	 hangup */
X"SIGINT",  /*	2	 interrupt */
X"SIGQUIT", /*	3	 quit */
X"SIGILL",  /*	4	 illegal instruction (not reset when caught) */
X"SIGTRAP", /*	5	 trace trap (not reset when caught) */
X"SIGIOT",  /*	6	 IOT instruction */
X"SIGEMT",  /*	7	 EMT instruction */
X# ifdef MSDOS
X"SIGFPE"}; /*	8	 floating point exception */
X# else MSDOS
X"SIGFPE",  /*	8	 floating point exception */
X"SIGKILL", /*	9	 kill (cannot be caught or ignored) */
X"SIGBUS",  /*	10	 bus error */
X"SIGSEGV", /*	11	 segmentation violation */
X"SIGSYS",  /*	12	 bad argument to system call */
X"SIGPIPE", /*	13	 write on a pipe with no one to read it */
X"SIGALRM", /*	14	 alarm clock */
X# ifdef VMS
X"SIGTERM"}; /*	15	 software termination signal from kill */
X# else VMS
X"SIGTERM", /*	15	 software termination signal from kill */
X"SIGUSR1",  /*	16	 user defines signal 1 */
X"SIGUSR2", /*	17	 user defines signal 2 */
X"SIGCLD",  /*	18	 child death */
X"SIGPWR",  /*	19	 power fail */
X"","","","","","","","","","","","" };
X# endif VMS
X# endif MSDOS
X# endif BSD
X
X/*
X *	routine to process a fatal error signal
X */
Xstatic sigpanic(sig)
Xint sig;
X{
X	char buf[128];
X	signal(sig,SIG_DFL);
X	sprintf(buf,"\nLarn - Panic! Signal %d received [%s]",sig,signame[sig]);
X	write(2,buf,strlen(buf));  sleep(2);
X	sncbr();
X	savegame(savefilename); 
X# ifdef MSDOS
X	exit(1);
X# else
X	kill(getpid(),sig); /* this will terminate us */
X# endif
X}
END_OF_FILE
if test 5122 -ne `wc -c <'signal.c'`; then
    echo shar: \"'signal.c'\" unpacked with wrong size!
fi
# end of 'signal.c'
fi
if test -f 'termcap.vms' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'termcap.vms'\"
else
echo shar: Extracting \"'termcap.vms'\" \(3543 characters\)
sed "s/^X//" >'termcap.vms' <<'END_OF_FILE'
Xsl|lpr|printer|print|printing|line printer:\
X	:cr=^M:do=^J:nl=^J:bl=^G:le=^H:bs:co#132:hc:os:
Xsu|dumb|un|unknown:\
X	:am:bl=^G:co#80:cr=^M:do=^J:nl=^J:
Xsx|ansi|any ansi terminal with pessimistic assumptions:\
X	:co#80:li#24:cl=50\E[;H\E[2J:\
X	:bs:am:cm=\E[%i%d;%dH:nd=\E[C:up=\E[A:\
X	:ce=\E[K:ho=\E[H:pt:
X#
X# not sure if vt102 belongs exactly here, but it works with rainbow
X# emulation of a vt102...
X#
Xdr|vt100p|vt102-80|vt100p-nam|dec vt100p:\
X	:am:al=\E[L:bl=^G:bs:cd=50\E[J:ce=3\E[K:cl=50\E[;H\E[2J:\
X	:cm=10\E[%i%d;%dH:co#80:cr=^M:cs=\E[%i%d;%dr:dc=\E[P:\
X	:dl=\E[M:do=^J:ei=\E[4l:ho=\E[H:im=\E[4h:is=\E[1;24r\E[24;1H:\
X	:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:kb=^H:kd=\EOB:ke=\E[?1l\E>:\
X	:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:le=^H:li#24:md=2\E[1m:\
X	:mr=2\E[7m:mb=2\E[5m:me=2\E[m:mi:nd=\E[C:nl=^J:pt:rc=\E8:\
X	:rf=/usr/lib/tabset/vt100:rs=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:\
X	:sc=\E7:se=\E[m:so=\E[7m:sr=\EM:ta=^I:ue=\E[m:up=\E[A:us=\E[4m:\
X	:vt#3:xn:
Xda|vt200|VT200-80|vt200-80|vt200-nam|dec vt200:\
X	:ae=4\E(B:as=2\E(<:tc=vt100p:
Xd0|vt100|VT100-80|vt100-80|vt100-am|dec vt100:\
X	:cr=^M:do=^J:nl=^J:bl=^G:co#80:li#24:cl=50\E[;H\E[2J:\
X	:le=^H:bs:am:cm=5\E[%i%d;%dH:nd=2\E[C:up=2\E[A:\
X	:ce=3\E[K:cd=50\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\
X	:md=2\E[1m:mr=2\E[7m:mb=2\E[5m:me=2\E[m:is=\E[1;24r\E[24;1H:\
X	:rs=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:ks=\E[?1h\E=:ke=\E[?1l\E>:\
X	:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:kb=^H:\
X	:ho=\E[H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:ta=^I:pt:sr=5\EM:vt#3:xn:\
X	:sc=\E7:rc=\E8:cs=\E[%i%d;%dr:
Xd1|vt100-nam|vt100 w/no am:\
X	:am@:xn@:tc=vt100-am:
Xd3|vt132|vt132:\
X	:al=99\E[L:dl=99\E[M:ip=7:dc=7\E[P:ei=\E[4l:im=\E[4h:xn:dN#30:tc=vt100:
Xd6|vt125|vt125-am|DEC vt125:\
X	:cr=^M:do=^J:nl=^J:bl=^G:co#80:li#24:cl=50\E[H\E[2J:\
X	:le=^H:am:bs:cm=5\E[%i%d;%dH:nd=2\E[C:up=2\E[A:ce=3\E[K:cd=50\E[J:\
X	:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:md=2\E[1m:mr=2\E[7m:mb=2\E[5m:\
X	:me=2\E[m:is=\E[1;24r\E[24;1H\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:\
X	:ks=\E[?1h\E=:ke=\E[?1l\E>:ku=\EOA:kd=\EOB:\
X	:kr=\EOC:kl=\EOD:kb=^H:ho=\E[H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:ta=^I:\
X	:pt:sr=5\EM:vt#3:sc=\E7:rc=\E8:cs=\E[%i%d;%dr:
Xdt|vt100-w|dec vt100 132 cols (w/advanced video):\
X	:co#132:li#24:rs=\E>\E[?3h\E[?4l\E[?5l\E[?8h:tc=vt100-am:
Xdv|vt100-w-nam|dec vt100 132 cols (w/advanced video), no am:\
X	:co#132:li#24:rs=\E>\E[?3h\E[?4l\E[?5l\E[?8h:vt@:tc=vt100-nam:
Xdw|vt52|dec vt52:\
X	:cr=^M:do=^J:nl=^J:bl=^G:\
X	:le=^H:bs:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :co#80:li#24:nd=\EC:\
X	:ta=^I:pt:sr=\EI:up=\EA:ku=\EA:kd=\EB:kr=\EC:kl=\ED:kb=^H:
Xkb|h19|heath|h19-b|h19b|heathkit|heath-19|z19|zenith|heathkit h19:\
X	:cr=^M:nl=^J:bl=^G:\
X	:al=1*\EL:am:le=^H:bs:cd=\EJ:ce=\EK:cl=\EE:cm=\EY%+ %+ :co#80:dc=\EN:\
X	:dl=1*\EM:do=\EB:ei=\EO:ho=\EH:im=\E@:li#24:mi:nd=\EC:as=\EF:ae=\EG:\
X	:ms:ta=^I:pt:sr=\EI:se=\Eq:so=\Ep:up=\EA:vs=\Ex4:ve=\Ey4:\
X	:kb=^h:ku=\EA:kd=\EB:kl=\ED:kr=\EC:kh=\EH:kn#8:\
X	:k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:\
X	:l6=blue:l7=red:l8=white:k6=\EP:k7=\EQ:k8=\ER:\
X	:es:hs:ts=\Ej\Ex5\Ex1\EY8%+ \Eo:fs=\Ek\Ey5:ds=\Ey1:
XkA|h19-a|h19a|heath-ansi|heathkit-a|heathkit h19 ansi mode:\
X	:cr=^M:nl=^J:bl=^G:\
X	:al=1*\E[1L:am:le=^H:bs:cd=\E[J:ce=\E[K:cl=\E[2J:cm=\E[%i%2;%2H:co#80:\
X	:dc=\E[1P:dl=1*\E[1M:do=\E[1B:ei=\E[4l:ho=\E[H:im=\E[4h:li#24:mi:\
X	:nd=\E[1C:as=\E[10m:ae=\E[11m:ms:ta=^I:pt:se=\E[0m:so=\E[7m:up=\E[1A:\
X	:vs=\E[>4h:ve=\E[>4l:kb=^h:ku=\E[1A:kd=\E[1B:kl=\E[1D:kr=\E[1C:\
X	:kh=\E[H:kn#8:k1=\EOS:k2=\EOT:k3=\EOU:k4=\EOV:k5=\EOW:l6=blue:\
X	:l7=red:l8=white:k6=\EOP:k7=\EOQ:k8=\EOR:\
X	:sr=\EM:is=\E<\E[>1;2;3;4;5;6;7;8;9l\E[0m\E[11m\E[?7h:
END_OF_FILE
if test 3543 -ne `wc -c <'termcap.vms'`; then
    echo shar: \"'termcap.vms'\" unpacked with wrong size!
fi
# end of 'termcap.vms'
fi
if test -f 'vmsreadme.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vmsreadme.txt'\"
else
echo shar: Extracting \"'vmsreadme.txt'\" \(1403 characters\)
sed "s/^X//" >'vmsreadme.txt' <<'END_OF_FILE'
XThis is a VMS version of LARN 12.2.  To run it, larndir must be defined as a 
Xlogical name that points to the directory containing the support files 
X(LARN.MAZ, LARN.HLP, etc).  Larn looks for LARN.OPT in SYS$LOGIN.  VMS Version 
X5.x may be required.
X
XThe first entry in the larn.pid file (1000) can be the wizard if the password is
Xknown (same password as in MS-DOS edition; see LARN122.DOC).
X
XThe sources have been compiled with termcap.  It will look for the
Xtermcap file either through the logical name "termcap", in the current
Xdirectory as "termcap.", or as "sys$library:termcap."   If there is
Xa symbol or logical called "terminal" then the value of that will
Xbe used for the terminal, otherwise the value from "term" will be
Xused.
X
XThis version includes VMS Keypad support on VT class terminals.  The keypad
Xkeys must be set to application mode (SET TERM/APPLICATION) in order for LARN
Xto recognise the keys.  It is not necessary to set the KEYPAD option in the
XLARN.OPT file.  The key mappings are:
X
X				PF1	PF2	PF3	PF4
X							'@'
X				KP7	KP8	KP9	KP-
X				'y'	'k'	'u'
X				KP4	KP5	KP6	KP,
X				'h'	'.'	'l'	','
X		 ^		KP1	KP2	KP3	KP
X		'K'		'b'	'j'	'n'	Enter
X	 <	 v	 >	KP0	KP.
X	'H'	'J'	'L'	'i'	'.'
X
XKeypad mode occasionally seems flakey, especially on DECTerms.  Until I can
Xre-work it, this will have to do.  Customization is not currently supported.  
X
X	Kevin Routley
X	{SUBTLE:: | TLE:: } ROUTLEY
X
END_OF_FILE
if test 1403 -ne `wc -c <'vmsreadme.txt'`; then
    echo shar: \"'vmsreadme.txt'\" unpacked with wrong size!
fi
# end of 'vmsreadme.txt'
fi
echo shar: End of archive 11 \(of 11\).
cp /dev/null ark11isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 11 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0