Path: news.larc.nasa.gov!amiga-request
From: amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
Subject: v91i149: Larn 12.3 - dungeon type adventure game, Part05/17
Reply-To: Sie <S.Raybould@fulcrum.bt.co.uk>
Newsgroups: comp.sources.amiga
Message-ID: <comp.sources.amiga.v91i149@ab20.larc.nasa.gov>
References: <comp.sources.amiga.v91i145@ab20.larc.nasa.gov>
Date: 27 Aug 91 01:51:57 GMT
Approved: tadguy@uunet.UU.NET (Tad Guy)
X-Mail-Submissions-To: amiga@uunet.uu.net
X-Post-Discussions-To: comp.sys.amiga.misc

Submitted-by: Sie <S.Raybould@fulcrum.bt.co.uk>
Posting-number: Volume 91, Issue 149
Archive-name: games/larn-12.3/part05

#!/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 5 (of 17)."
# Contents:  action.c iventory.c larn.hlp.uu
# Wrapped by tadguy@ab20 on Mon Aug 26 21:51:53 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'action.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'action.c'\"
else
echo shar: Extracting \"'action.c'\" \(13563 characters\)
sed "s/^X//" >'action.c' <<'END_OF_FILE'
X/*
X    action.c
X
X    Routines to perform the actual actions associated with various
X    player entered commands.
X
X    act_remove_gems         remove gems from a throne
X    act_sit_throne          sit on a throne
X    act_up_stairs           go up stairs
X    act_down_stairs         go down stairs
X    act_drink_fountain      drink from a fountain
X    act_wash_fountain       wash at a fountain
X    act_up_shaft            up volcanic shaft
X    act_down_shaft          down volcanic shaft
X    volshaft_climbed        place player near volcanic shaft
X    act_desecrate_altar     desecrate an altar
X    act_donation_pray       pray, donating money
X    act_just_pray           pray, not donating money
X    act_prayer_heard        prayer was heard
X    act_ignore_altar        ignore an altar
X    act_open_chest          open a chest
X    act_open_door           open a door
X*/
X
X#include "header.h"
X#include "larndefs.h"
X#include "monsters.h"
X#include "objects.h"
X#include "player.h"
X
X/*
X    act_remove_gems
X
X    Remove gems from a throne.
X
X    arg is zero if there is a gnome king associated with the throne
X
X    Assumes that cursors() has been called previously, and that a check
X    has been made that the throne actually has gems.
X*/
Xact_remove_gems( arg )
Xint arg ;
X    {
X    int i, k ;
X
X    k=rnd(101);
X    if (k<25)
X        {
X        for (i=0; i<rnd(4); i++) 
X            creategem(); /* gems pop off the throne */
X        item[playerx][playery]=ODEADTHRONE;
X        know[playerx][playery]=0;
X        }
X    else if (k<40 && arg==0)
X        {
X        createmonster(GNOMEKING);
X        item[playerx][playery]=OTHRONE2;
X        know[playerx][playery]=0;
X        }
X    else 
X        lprcat("\nNothing happens");
X
X    return ;
X    }
X
X/*
X    act_sit_throne
X
X    Sit on a throne.
X
X    arg is zero if there is a gnome king associated with the throne
X
X    Assumes that cursors() has been called previously.
X*/
Xact_sit_throne( arg )
Xint arg ;
X    {
X    int k ;
X
X    k=rnd(101);
X    if (k<30 && arg==0)
X        {
X        createmonster(GNOMEKING);
X        item[playerx][playery]=OTHRONE2;
X        know[playerx][playery]=0;
X        }
X    else if (k<35) 
X        { 
X        lprcat("\nZaaaappp!  You've been teleported!\n"); 
X        beep(); 
X        oteleport(0); 
X        }
X    else 
X        lprcat("\nNothing happens");
X
X    return ;
X    }
X
X/*
X    assumes that cursors() has been called and that a check has been made that
X    the user is actually standing at a set of up stairs.
X*/
Xact_up_stairs()
X    {
X    if (level >= 2 && level != 11)
X        {
X        newcavelevel( level - 1 )  ;
X        draws( 0, MAXX, 0, MAXY );
X        bot_linex() ;
X        }
X    else
X        lprcat("\nThe stairs lead to a dead end!") ;
X    return ;
X    }
X
X/*
X    assumes that cursors() has been called and that a check has been made that
X    the user is actually standing at a set of down stairs.
X*/
Xact_down_stairs()
X    {
X    if (level != 0 && level != 10 && level != 13)
X        {
X        newcavelevel( level + 1 )  ;
X        draws( 0, MAXX, 0, MAXY );
X        bot_linex() ;
X        }
X    else
X        lprcat("\nThe stairs lead to a dead end!") ;
X    return ;
X    }
X
X/*
X    Code to perform the action of drinking at a fountian.  Assumes that
X    cursors() has already been called, and that a check has been made that
X    the player is actually standing at a live fountain.
X*/
Xact_drink_fountain()
X    {
X    int x ;
X
X    if (rnd(1501)<2)
X        {
X        lprcat("\nOops!  You seem to have caught the dreadful sleep!");
X        beep(); 
X        lflush();  
X        sleep(3);  
X        died(280); 
X        return;
X        }
X
X    x = rnd(100);
X    if (x<7)
X        {
X        c[HALFDAM] += 200 + rnd(200);
X        lprcat("\nYou feel a sickness coming on");
X        }
X
X    else if (x < 13)
X        quaffpotion(23, FALSE ); /* see invisible,but don't know the potion */
X
X    else if (x < 45)
X        lprcat("\nnothing seems to have happened");
X
X    else if (rnd(3) != 2)
X        fntchange(1);   /*  change char levels upward   */
X
X    else
X        fntchange(-1);  /*  change char levels downward */
X
X    if (rnd(12)<3)
X        {
X        lprcat("\nThe fountains bubbling slowly quiets");
X        item[playerx][playery]=ODEADFOUNTAIN; /* dead fountain */
X        know[playerx][playery]=0;
X        }
X    return;
X    }
X
X/*
X    Code to perform the action of washing at a fountain.  Assumes that
X    cursors() has already been called and that a check has been made that
X    the player is actually standing at a live fountain.
X*/
Xact_wash_fountain()
X    {
X    int x ;
X
X    if (rnd(100) < 11)
X        {
X        x=rnd((level<<2)+2);
X        lprintf("\nOh no!  The water was foul!  You suffer %d hit points!",(long)x);
X        lastnum=273;
X        losehp(x); 
X        bottomline();  
X        cursors();
X        }
X
X    else if (rnd(100) < 29)
X        lprcat("\nYou got the dirt off!");
X
X    else if (rnd(100) < 31)
X        lprcat("\nThis water seems to be hard water!  The dirt didn't come off!");
X
X    else if (rnd(100) < 34)
X        createmonster(WATERLORD); /*    make water lord     */
X
X    else
X        lprcat("\nnothing seems to have happened");
X
X    return;
X    }
X
X/*
X    Perform the act of climbing down the volcanic shaft.  Assumes
X    cursors() has been called and that a check has been made that
X    are actually at a down shaft.
X*/
Xact_down_shaft()
X    {
X    if (level!=0)
X        {
X        lprcat("\nThe shaft only extends 5 feet downward!");
X        return;
X        }
X
X    if (packweight() > 45+3*(c[STRENGTH]+c[STREXTRA]))
X        {
X        lprcat("\nYou slip and fall down the shaft");
X        beep();
X        lastnum=275;
X        losehp(30+rnd(20));
X        bottomhp();
X        }
X    else if (prompt_mode)
X        lprcat("climb down");
X
X    newcavelevel(MAXLEVEL);
X    draws(0,MAXX,0,MAXY);
X    bot_linex();
X    return;
X    }
X
X/*
X    Perform the action of climbing up the volcanic shaft. Assumes
X    cursors() has been called and that a check has been made that
X    are actually at an up shaft.
X
X*/
Xact_up_shaft()
X    {
X    if (level!=11) 
X        { 
X        lprcat("\nThe shaft only extends 8 feet upwards before you find a blockage!"); 
X        return; 
X        }
X
X    if (packweight() > 45+5*(c[STRENGTH]+c[STREXTRA])) 
X        { 
X        lprcat("\nYou slip and fall down the shaft"); 
X        beep();
X        lastnum=275; 
X        losehp(15+rnd(20)); 
X        bottomhp(); 
X        return; 
X        }
X
X    if (prompt_mode)
X        lprcat("climb up"); 
X    lflush(); 
X    newcavelevel(0);
X    volshaft_climbed( OVOLDOWN );
X    return;
X    }
X
X/*
X    Perform the action of placing the player near the volcanic shaft
X    after it has been climbed.
X
X    Takes one parameter:  the volcanic shaft object to be found.  If have
X    climbed up, search for OVOLDOWN, otherwise search for OVOLUP.
X*/
Xstatic volshaft_climbed(object)
Xint object;
X    {
X    int i,j ;
X
X    /* place player near the volcanic shaft */
X    for (i=0; i<MAXY; i++)
X        for (j=0; j<MAXX; j++)
X            if (item[j][i] == object)
X                {
X                playerx=j;
X                playery=i;
X                positionplayer();
X                i=MAXY;
X                break;
X                }
X    draws(0,MAXX,0,MAXY);
X    bot_linex();
X    return ;
X    }
X
X/*
X    Perform the actions associated with Altar desecration.
X*/
Xact_desecrate_altar()
X    {
X    if (rnd(100)<60)
X    { 
X    createmonster(makemonst(level+2)+8); 
X    c[AGGRAVATE] += 2500; 
X    }
X    else if (rnd(101)<30)
X    {
X    lprcat("\nThe altar crumbles into a pile of dust before your eyes");
X    forget();   /*  remember to destroy the altar   */
X    }
X    else
X    lprcat("\nnothing happens");
X    return ;
X    }
X
X/*
X    Perform the actions associated with praying at an altar and giving a
X    donation.
X*/
Xact_donation_pray()
X    {
X    unsigned long k,temp ;
X
X    while (1)
X        {
X        lprcat("\n\n");
X        cursor(1,24);
X        cltoeoln();
X        cursor(1,23);
X        cltoeoln();
X        lprcat("how much do you donate? ");
X        k = readnum((long)c[GOLD]);
X
X        /* VMS has a problem with echo mode input (used in readnum()) such that the
X           next carriage return will shift the screen up one line.  To get around
X           this, if we are VMS, don't print the next carriage return.  Otherwise,
X           print the carriage return needed by all following messages.
X	Turns out that all but MS-DOS (which has 25 lines) has this problem.
X        */
X#ifdef MSDOS
X            lprcat("\n");
X#endif
X
X        /* make giving zero gold equivalent to 'just pray'ing.  Allows player to
X           'just pray' in command mode, without having to add yet another command.
X        */
X        if (k == 0)
X            {
X            act_just_pray();
X            return;
X            }
X
X        if (c[GOLD] >= k)
X            {
X            temp = c[GOLD] / 10 ;
X            c[GOLD] -= k;
X            bottomline();
X
X            /* if player gave less than 10% of _original_ gold, make a monster
X            */
X            if (k < temp || k < rnd(50))
X                {
X                createmonster(makemonst(level+1));
X                c[AGGRAVATE] += 200;
X                return;
X                }
X            if (rnd(101) > 50)
X                {
X                act_prayer_heard();
X                return;
X                }
X            if (rnd(43) == 5)
X                {
X                if (c[WEAR])
X                    lprcat("You feel your armor vibrate for a moment");
X                enchantarmor();
X                return;
X                }
X            if (rnd(43) == 8)
X                {
X                if (c[WIELD])
X                    lprcat("You feel your weapon vibrate for a moment");
X                enchweapon();
X                return;
X                }
X
X            lprcat("Thank You.");
X            return ;
X            }
X
X        /* Player donates more gold than they have.  Loop back around so
X           player can't escape the altar for free.
X        */
X        lprcat("You don't have that much!");
X        }
X    }
X
X/*
X    Performs the actions associated with 'just praying' at the altar.  Called
X    when the user responds 'just pray' when in prompt mode, or enters 0 to
X    the money prompt when praying.
X
X    Assumes cursors(), and that any leading \n have been printed (to get
X    around VMS echo mode problem.
X*/
Xact_just_pray()
X    {
X    if (rnd(100)<75) 
X    lprcat("nothing happens");
X    else if (rnd(43) == 10)
X    {
X    if (c[WEAR]) 
X        lprcat("You feel your armor vibrate for a moment");
X    enchantarmor(); 
X    return;
X    }
X    else if (rnd(43) == 10)
X    {
X    if (c[WIELD]) 
X        lprcat("You feel your weapon vibrate for a moment");
X    enchweapon(); 
X    return;
X    }
X    else 
X    createmonster(makemonst(level+1));
X    return;
X    }
X
X/*
X    function to cast a +3 protection on the player
X */
Xstatic act_prayer_heard()
X    {
X    lprcat("You have been heard!");
X    if (c[ALTPRO]==0) 
X        c[MOREDEFENSES]+=3;
X    c[ALTPRO] += 500;   /* protection field */
X    bottomline();
X    }
X
X/*
X    Performs the act of ignoring an altar.
X
X    Assumptions:  cursors() has been called.
X*/
Xact_ignore_altar()
X    {
X    if (rnd(100)<30)    
X        {
X        createmonster(makemonst(level+1)); 
X        c[AGGRAVATE] += rnd(450); 
X        }
X    else    
X        lprcat("\nNothing happens");
X    return;
X    }
X
X/*
X    Performs the act of opening a chest.  
X
X    Parameters:   x,y location of the chest to open.
X    Assumptions:  cursors() has been called previously
X*/
Xact_open_chest(x,y)
Xint x,y ;
X    {
X    int i,k;
X
X    k=rnd(101);
X    if (k<40)
X        {
X        lprcat("\nThe chest explodes as you open it"); beep();
X        i = rnd(10);  lastnum=281;  /* in case he dies */
X        lprintf("\nYou suffer %d hit points damage!",(long)i);
X        checkloss(i);
X        switch(rnd(10)) /* see if he gets a curse */
X            {
X            case 1: c[ITCHING]+= rnd(1000)+100;
X                    lprcat("\nYou feel an irritation spread over your skin!");
X                    beep();
X                    break;
X
X            case 2: c[CLUMSINESS]+= rnd(1600)+200;
X                    lprcat("\nYou begin to lose hand to eye coordination!");
X                    beep();
X                    break;
X
X            case 3: c[HALFDAM]+= rnd(1600)+200;
X                    beep();
X                    lprcat("\nA sickness engulfs you!");    break;
X            };
X    item[x][y]=know[x][y]=0;    /* destroy the chest */
X        if (rnd(100)<69) creategem(); /* gems from the chest */
X    dropgold(rnd(110*iarg[playerx][playery]+200));
X        for (i=0; i<rnd(4); i++) something(iarg[playerx][playery]+2);
X        }
X    else
X        lprcat("\nNothing happens");
X    return;
X    }
X
X/*
X    Perform the actions common to command and prompt mode when opening a
X    door.  Assumes cursors().
X
X    Parameters:     the X,Y location of the door to open.
X    Return value:   TRUE if successful in opening the door, false if not.
X*/
Xact_open_door( x, y )
Xint x ;
Xint y ;
X    {
X    if (rnd(11)<7)
X        {
X        switch(iarg[x][y])
X            {
X            case 6: c[AGGRAVATE] += rnd(400);   break;
X
X            case 7: lprcat("\nYou are jolted by an electric shock ");
X                    lastnum=274; losehp(rnd(20));  bottomline();  break;
X
X            case 8: loselevel();  break;
X
X            case 9: lprcat("\nYou suddenly feel weaker ");
X                    if (c[STRENGTH]>3) c[STRENGTH]--;
X                    bottomline();  break;
X
X            default:    break;
X            }
X    return( 0 );
X        }
X    else
X        {
X        know[x][y]=0;
X        item[x][y]=OOPENDOOR;
X        return( 1 );
X        }
X    }
END_OF_FILE
if test 13563 -ne `wc -c <'action.c'`; then
    echo shar: \"'action.c'\" unpacked with wrong size!
fi
# end of 'action.c'
fi
if test -f 'iventory.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'iventory.c'\"
else
echo shar: Extracting \"'iventory.c'\" \(12705 characters\)
sed "s/^X//" >'iventory.c' <<'END_OF_FILE'
X#include "header.h"
X#include "larndefs.h"
X#include "objects.h"
X#include "player.h"
X
X#ifdef __STDC__
X	    show1( int, char*[] );
X            show3( int );
Xstatic      show2( int );
Xstatic void t_setup( int );
Xstatic void t_endup( int );
X
X#define SIGNED signed
X#else
X	    show1( );
X            show3( );
Xstatic      show2( );
Xstatic void t_setup( );
Xstatic void t_endup( );
X
X#define SIGNED
X#endif
X
Xstatic int  qshowstr();
Xshowwear();
Xshowwield();
Xshowread();
Xshowquaff();
Xshoweat();
Xextern int dropflag;
X
X/* Allow only 26 items (a to z) in the player's inventory */
X#define MAXINVEN 26
X
X/* The starting limit to the number of items the player can carry.  
X   The limit should probably be based on player strength and the
X   weight of the items.
X*/
X#define MIN_LIMIT 15
X
X/* define a sentinel to place at the end of the sorted inventory.
X   (speeds up display reads )
X*/
X#define END_SENTINEL 255
X
X/* declare the player's inventory.  These should only be referenced
X   in this module.
X    iven     - objects in the player's inventory
X    ivenarg  - attribute of each item ( + values, etc )
X    ivensort - sorted inventory (so we don't sort each time)
X*/
Xchar iven[MAXINVEN];
XSIGNED  short ivenarg[MAXINVEN];
Xunsigned char ivensort[MAXINVEN+1];    /* extra is for sentinel */
X
Xstatic char srcount = 0 ; /* line counter for showstr() */
X
X/*
X  Initialize the player's inventory
X*/
Xvoid init_inventory( )
X    {
X    int i;
X
X    for ( i = 0; i < MAXINVEN ; i++ )
X        {
X    iven[i] = ivenarg[i] = 0;
X    ivensort[i] = END_SENTINEL ;
X    }
X    ivensort[MAXINVEN] = END_SENTINEL;
X
X    /* For zero difficulty games, start the player out with armor and weapon.
X       We can sort the inventory right away because a dagger is 'later' than
X       leather armor.
X    */
X    if (c[HARDGAME] <= 0)
X    {
X    iven[0] = OLEATHER;
X    iven[1] = ODAGGER;
X    ivenarg[0] = ivenarg[1] = c[WEAR] = ivensort[0] = 0;
X    ivensort[1] = c[WIELD] = 1;
X    }
X    }
X
X/*
X    show character's inventory
X*/
Xshowstr(select_allowed)
Xchar select_allowed;
X    {
X    register int i,number, item_select;
X
X    for (number=3, i=0; i<MAXINVEN; i++)
X        if (iven[i])
X            number++;  /* count items in inventory */
X    t_setup(number);
X    item_select = qshowstr(select_allowed);
X    t_endup(number);
X    return( item_select );
X    }
X
Xstatic int qshowstr(select_allowed)
Xchar select_allowed;
X    {
X    register int i,j,k,sigsav,itemselect=0;
X
X    srcount=0;
X    sigsav=nosignal;
X    nosignal=1; /* don't allow ^c etc */
X    if (c[GOLD])
X        {
X        lprintf(".)   %d gold pieces",(long)c[GOLD]);
X        srcount++;
X        }
X    for (k=(MAXINVEN-1); k>=0; k--)
X      if (iven[k])
X        {
X        for (i=22; i<84; i++)
X             for (j=0; j<=k; j++)
X                 if (i==iven[j])
X             {
X             itemselect = show2(j);
X             if (itemselect && select_allowed)
X            goto quitit;
X             }
X        k=0;
X        }
X
X    lprintf("\nElapsed time is %d.  You have %d mobuls left",(long)((gtime+99)/100+1),(long)((TIMELIMIT-gtime)/100));
X    itemselect = more(select_allowed);     
Xquitit:
X    nosignal=sigsav;
X    if (select_allowed)
X    return( (itemselect > 0) ? itemselect : 0 );
X    else
X    return( 0 );
X    }
X
X/*
X subroutine to clear screen depending on # lines to display
X
X*/
Xstatic void t_setup(count)
Xregister int count;
X    {
X    if (count<20)  /* how do we clear the screen? */
X        {
X        cl_up(79,count);
X        cursor(1,1);
X        }
X    else
X        {
X        resetscroll();
X        clear();
X        }
X    }
X
X/*
X subroutine to restore normal display screen depending on t_setup()
X
X*/
Xstatic void t_endup(count)
Xregister int count;
X    {
X    if (count<18)  /* how did we clear the screen? */
X        draws(0,MAXX,0,(count>MAXY) ? MAXY : count);
X    else
X        {
X        drawscreen(); 
X        setscroll();
X        }
X    }
X
X/*
X    function to show the things player is wearing only
X */
Xshowwear()
X    {
X    register int i,j,sigsav,count,itemselect=0;
X
X    sigsav=nosignal;  nosignal=1; /* don't allow ^c etc */
X    srcount=0;
X
X    for (count=2,j=0; j< MAXINVEN; j++)   /* count number of items we will display */
X        if (i=iven[j])
X            switch(i)
X            {
X            case OLEATHER:  case OPLATE:    case OCHAIN:
X            case ORING:     case OSTUDLEATHER:  case OSPLINT:
X            case OPLATEARMOR:   case OSSPLATE:  case OSHIELD:
X            count++;
X            };
X
X    t_setup(count);
X
X    for (i=22; i<84; i++)
X         for (j=0; j< MAXINVEN; j++)
X           if (i==iven[j])
X            switch(i)
X                {
X                case OLEATHER:  case OPLATE:    case OCHAIN:
X                case ORING:     case OSTUDLEATHER:  case OSPLINT:
X                case OPLATEARMOR:   case OSSPLATE:  case OSHIELD:
X                if (itemselect = show2(j))
X            goto quitit;
X                };
X    itemselect = more(TRUE);     
Xquitit:
X    nosignal=sigsav;    
X    t_endup(count);
X    return( (itemselect > 1) ? itemselect : 0 );
X    }
X
X/*
X    function to show the things player can wield only
X */
Xshowwield()
X    {
X    register int i,j,sigsav,count,itemselect=0;
X    sigsav=nosignal;  nosignal=1; /* don't allow ^c etc */
X    srcount=0;
X
X     for (count=2,j=0; j< MAXINVEN; j++)  /* count how many items */
X       if (i=iven[j])
X        switch(i)
X            {
X            case ODIAMOND:  case ORUBY:  case OEMERALD:  case OSAPPHIRE:
X            case OBOOK:     case OCHEST:  case OLARNEYE: case ONOTHEFT:
X            case OSPIRITSCARAB:  case OCUBEofUNDEAD:
X            case OPOTION:   case OSCROLL:  break;
X            default:  count++;
X            };
X
X    t_setup(count);
X
X    for (i=22; i<84; i++)
X         for (j=0; j< MAXINVEN; j++)
X           if (i==iven[j])
X            switch(i)
X                {
X                case ODIAMOND:  case ORUBY:  case OEMERALD:  case OSAPPHIRE:
X                case OBOOK:     case OCHEST:  case OLARNEYE: case ONOTHEFT:
X                case OSPIRITSCARAB:  case OCUBEofUNDEAD:
X                case OPOTION:   case OSCROLL:  
X            break;
X                default:  
X            if (itemselect = show2(j))
X            goto quitit;
X                };
X    itemselect = more(TRUE);     
Xquitit:
X    nosignal=sigsav;    
X    t_endup(count);
X    return( (itemselect > 1) ? itemselect : 0 );
X    }
X
X/*
X *  function to show the things player can read only
X */
Xshowread()
X    {
X    register int i,j,sigsav,count,itemselect = 0;
X    sigsav=nosignal;  nosignal=1; /* don't allow ^c etc */
X    srcount=0;
X
X    for (count=2,j=0; j< MAXINVEN; j++)
X        switch(iven[j])
X            {
X            case OBOOK: case OSCROLL:   count++;
X            };
X    t_setup(count);
X
X    for (i=22; i<84; i++)
X         for (j=0; j< MAXINVEN; j++)
X           if (i==iven[j])
X            switch(i)
X                {
X                case OBOOK: case OSCROLL:
X            if (itemselect = show2(j))
X            goto quitit;
X                };
X    itemselect = more(TRUE);
Xquitit:
X    nosignal=sigsav;
X    t_endup(count);
X    return((itemselect > 1) ? itemselect : 0 );
X    }
X
X/*
X *  function to show the things player can eat only
X */
Xshoweat()
X    {
X    register int i,j,sigsav,count,itemselect=0;
X    sigsav=nosignal;  nosignal=1; /* don't allow ^c etc */
X    srcount=0;
X
X    for (count=2,j=0; j< MAXINVEN; j++)
X        switch(iven[j])
X            {
X            case OCOOKIE:   count++;
X            };
X    t_setup(count);
X
X    for (i=22; i<84; i++)
X         for (j=0; j< MAXINVEN; j++)
X           if (i==iven[j])
X            switch(i)
X                {
X                case OCOOKIE:   
X            if (itemselect=show2(j))
X            goto quitit;
X                };
X    itemselect = more(TRUE);     
Xquitit:
X    nosignal=sigsav;    
X    t_endup(count);
X    return( (itemselect > 1) ? itemselect : 0 );
X    }
X
X/*
X    function to show the things player can quaff only
X */
Xshowquaff()
X    {
X    register int i,j,sigsav,count,itemselect=0;
X    sigsav=nosignal;  nosignal=1; /* don't allow ^c etc */
X    srcount=0;
X
X    for (count=2,j=0; j< MAXINVEN; j++)
X        switch(iven[j])
X            {
X            case OPOTION:   count++;
X            };
X    t_setup(count);
X
X    for (i=22; i<84; i++)
X         for (j=0; j< MAXINVEN; j++)
X           if (i==iven[j])
X            switch(i)
X                {
X                case OPOTION:
X            if (itemselect=show2(j))
X            goto quitit;
X                };
X    itemselect = more(TRUE);
Xquitit:
X    nosignal=sigsav;
X    t_endup(count);
X    return( (itemselect > 1 ) ? itemselect : 0 );
X    }
X
Xshow1(idx,str2)
X    register int idx;
X    register char *str2[];
X    {
X        lprc('\n');
X        cltoeoln();
X    if (str2==0)
X        lprintf("%c)   %s",idx+'a',objectname[iven[idx]]);
X    else if (*str2[ivenarg[idx]]==0)
X        lprintf("%c)   %s",idx+'a',objectname[iven[idx]]);
X    else
X        lprintf("%c)   %s of%s",idx+'a',objectname[iven[idx]],str2[ivenarg[idx]]);
X    }
X
Xshow3(index)
Xregister int index ;
X    {
X    srcount=0;
X    return( show2(index) );
X    }
X
Xstatic int show2(index)
Xregister int index;
X    {
X    register int itemselect = 0;
X
X    switch(iven[index])
X        {
X        case OPOTION:   show1(index,potionname);  break;
X        case OSCROLL:   show1(index,scrollname);  break;
X
X        case OLARNEYE:      case OBOOK:         case OSPIRITSCARAB:
X        case ODIAMOND:      case ORUBY:         case OCUBEofUNDEAD:
X        case OEMERALD:      case OCHEST:        case OCOOKIE:
X        case OSAPPHIRE:     case ONOTHEFT:      show1(index,(char **)0);  break;
X
X        default:
X        lprc('\n');
X        cltoeoln();
X        lprintf("%c)   %s",index+'a',objectname[iven[index]]);
X        if (ivenarg[index]>0)
X            lprintf(" + %d",(long)ivenarg[index]);
X        else if (ivenarg[index]<0)
X            lprintf(" %d",(long)ivenarg[index]);
X        break;
X        }
X    if (c[WIELD]==index) lprcat(" (weapon in hand)");
X    if ((c[WEAR]==index) || (c[SHIELD]==index))  lprcat(" (being worn)");
X    if (++srcount>=22) 
X    { 
X    srcount=0; 
X    itemselect = more(TRUE); 
X    clear(); 
X    }
X    return( itemselect );
X    }
X
X/*
X    function to put something in the players inventory
X    returns 0 if success, 1 if a failure
X*/
Xtake(itm,arg)
X    int itm,arg;
X    {
X    register int i,limit;
X/*  cursors(); */
X    if ((limit = 15+(c[LEVEL]>>1)) > MAXINVEN)
X        limit=MAXINVEN;
X    for (i=0; i<limit; i++)
X        if (iven[i]==0)
X            {
X            iven[i] = itm;  ivenarg[i] = arg;  limit=0;
X            switch(itm)
X                {
X                case OPROTRING: case ODAMRING: case OBELT: limit=1;  break;
X                case ODEXRING:      c[DEXTERITY] += ivenarg[i]+1; limit=1;  break;
X                case OSTRRING:      c[STREXTRA]  += ivenarg[i]+1;   limit=1; break;
X                case OCLEVERRING:   c[INTELLIGENCE] += ivenarg[i]+1;  limit=1; break;
X                case OHAMMER:       c[DEXTERITY] += 10; c[STREXTRA]+=10;
X                                    c[INTELLIGENCE]-=10;    limit=1;     break;
X
X                case OORBOFDRAGON:  c[SLAYING]++;       break;
X                case OSPIRITSCARAB: c[NEGATESPIRIT]++;  break;
X                case OCUBEofUNDEAD: c[CUBEofUNDEAD]++;  break;
X                case ONOTHEFT:      c[NOTHEFT]++;       break;
X                case OSWORDofSLASHING:  c[DEXTERITY] +=5;   limit=1; break;
X                };
X            lprcat("\nYou pick up:"); show3(i);
X            if (limit) bottomline();  return(0);
X            }
X    lprcat("\nYou can't carry anything else");  return(1);
X    }
X
X/*
X    subroutine to drop an object  returns 1 if something there already else 0
X */
Xdrop_object(k)
X    int k;
X    {
X    int itm;
X    if ((k<0) || (k>=MAXINVEN)) 
X    return(0);
X    itm = iven[k];  cursors();
X    if (itm==0) { lprintf("\nYou don't have item %c! ",k+'a'); return(1); }
X    if (item[playerx][playery])
X        { beep(); lprcat("\nThere's something here already"); return(1); }
X    if (playery==MAXY-1 && playerx==33) return(1); /* not in entrance */
X    item[playerx][playery] = itm;
X    iarg[playerx][playery] = ivenarg[k];
X    lprcat("\n  You drop:"); show3(k); /* show what item you dropped*/
X    know[playerx][playery] = 0;  iven[k]=0; 
X    if (c[WIELD]==k) c[WIELD]= -1;      if (c[WEAR]==k)  c[WEAR] = -1;
X    if (c[SHIELD]==k) c[SHIELD]= -1;
X    adjustcvalues(itm,ivenarg[k]);
X    dropflag=1; /* say dropped an item so wont ask to pick it up right away */
X    return(0);
X    }
X
X/*
X    routine to tell if player can carry one more thing
X    returns 1 if pockets are full, else 0
X*/
Xpocketfull()
X    {
X    register int i,limit; 
X    if ((limit = MIN_LIMIT + (c[LEVEL]>>1) ) > MAXINVEN )  
X    limit = MAXINVEN;
X    for (i=0; i<limit; i++) 
X    if (iven[i]==0) 
X        return(0);
X    return(1);
X    }
END_OF_FILE
if test 12705 -ne `wc -c <'iventory.c'`; then
    echo shar: \"'iventory.c'\" unpacked with wrong size!
fi
# end of 'iventory.c'
fi
if test -f 'larn.hlp.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'larn.hlp.uu'\"
else
echo shar: Extracting \"'larn.hlp.uu'\" \(11935 characters\)
sed "s/^X//" >'larn.hlp.uu' <<'END_OF_FILE'
Xbegin 644 larn.hlp
XM-R`@("!796QC;VUE('1O('1H92!G86UE(&]F($QA<FXN("!!="!T:&ES(&UOZ
XM;65N="P@>6]U(&9A8V4@82!G<F5A="!P<F]B;&5M+@I9;W5R(&1A=6=H=&5RL
XM(&AA<R!C;VYT<F%C=&5D(&$@<W1R86YG92!D:7-E87-E+"!A;F0@;F]N92!O4
XM9B!Y;W5R(&AO;64@<F5M961I97,*<V5E;2!T;R!H879E(&%N>2!E9F9E8W0NJ
XM("!9;W4@<V5N<V4@=&AA="!S:&4@:7,@:6X@;6]R=&%L(&1A;F=E<BP@86YD>
XM('EO=2!M=7-T"G1R>2!T;R!S879E(&AE<BX@(%1I;64@86=O('EO=2!H96%R1
XM9"!O9B!A(&QA;F0@;V8@9W)E870@9&%N9V5R(&%N9"!O<'!O<G1U;FET>2X*:
XM4&5R:&%P<R!H97)E(&ES('1H92!S;VQU=&EO;B!Y;W4@;F5E9"X*"B`@("!)5
XM="!H87,@8F5E;B!S86ED('1H870@=&AE<F4@;VYC92!W87,@82!G<F5A="!M%
XM86=I8VEA;B!W:&\@8V%L;&5D(&AI;7-E;&8*4&]L:6YN96%U<RX@($UA;GD@2
XM>65A<G,@86=O+"!A9G1E<B!H879I;F<@;6%N>2!M:7)A8W5L;W5S('-U8V-EB
XM<W-E<RP@4&]L:6YN96%U<PIR971I<F5D('1O('1H92!C879E<FYS(&]F($QA9
XM<FXL('=H97)E(&AE(&1E=F]T960@;6]S="!O9B!H:7,@=&EM92!T;R!T:&4*X
XM8W)E871I;VX@;V8@;6%G:6,N("`@4G5M;W)S(&AA=F4@:70@=&AA="!O;F4@5
XM9&%Y(%!O;&EN;F5A=7,@<V5T(&]U="!T;R!D:7-P96P*86X@871T86-K:6YGS
XM(&%R;7D@:6X@82!F;W)E<W0@<V]M92!D:7-T86YC92!T;R!T:&4@;F]R=&@N@
XM("!)="!I<R!B96QI979E9"!T:&%T"FAE<F4@:&4@;65T(&AI<R!D96UI<V4N4
XM"@H@("`@5&AE(&-A=F5R;G,@;V8@3&%R;BP@:70@:7,@=&AO=6=H="P@;75S2
XM="!B92!M86=N:69I8V5N="!I;B!D97-I9VXL"F%N9"!C;VYT86EN(&UU8V@@S
XM;6%G:6,@86YD('1R96%S=7)E+B`@3VYE(&]P=&EO;B!Y;W4@:&%V92!I<R!TY
XM;R!U;F1E<G1A:V4@80IJ;W5R;F5Y(&EN=&\@=&AE<V4@8V%V97)N<RX*"@H@Z
XM("`@1V]O9"!,=6-K(2`@66]U)W)E(&=O:6YG('1O(&YE960@:70A"@H*"@H@7
XM("`@("`@("`@("`@("`@&ULW;4AE;'`@1FEL92!F;W(@5&AE($-A=F5R;G,@=
XM;V8@3&%R;BP@4')O;7!T($UO9&4;6VT*"F(@(&UO=F4@<V]U=&AW97-T("`@[
XM("`@("`@($(@(')U;B!S;W5T:'=E<W0@("`@("`@("`@("!3("!S879E('1H+
XM92!G86UE"F@@(&UO=F4@;&5F="`@("`@("`@("`@("`@($@@(')U;B!L969T;
XM("`@("`@("`@("`@("`@("`N("!S=&%Y(&AE<F4*:B`@;6]V92!D;W=N("`@V
XM("`@("`@("`@("`@2B`@<G5N(&1O=VX@("`@("`@("`@("`@("`@(%X@(&ED"
XM96YT:69Y(&$@=')A<`IK("!M;W9E('5P("`@("`@("`@("`@("`@("!+("!RU
XM=6X@=7`@("`@("`@("`@("`@("`@("`@5"`@=&%K92!O9F8@87)M;W(*;"`@3
XM;6]V92!R:6=H="`@("`@("`@("`@("`@3"`@<G5N(')I9VAT"FX@(&UO=F4@C
XM<V]U=&AE87-T("`@("`@("`@($X@(')U;B!S;W5T:&5A<W0*=2`@;6]V92!N'
XM;W)T:&5A<W0@("`@("`@("`@52`@<G5N(&YO<G1H96%S=`IY("!M;W9E(&YO#
XM<G1H=V5S="`@("`@("`@("!9("!R=6X@;F]R=&AW97-T("`@("`@("`@("`@-
XM7DP@<F5D<F%W('1H92!S8W)E96X*8R`@8V%S="!A('-P96QL("`@("`@("`@)
XM("`@6B`@=&5L97!O<G0@>6]U<G-E;&8*9"`@9')O<"!A;B!I=&5M("`@("`@C
XM("`@("`@92`@96%T('-O;65T:&EN9PIG("!G970@<')E<V5N="!P86-K('=E:
XM:6=H="!0("!G:79E('1A>"!S=&%T=7,*:2`@:6YV96YT;W)Y('EO=7(@<&]CJ
XM:V5T<R`@22`@;&ES="!A;&P@:71E;7,@9F]U;F0@("`@(#\@('1H:7,@:&5L#
XM<"!S8W)E96X*<2`@<75A9F8@82!P;W1I;VX@("`@("`@("`@42`@<75I="!T`
XM:&4@9V%M90IR("!R96%D(&$@<V-R;VQL("`@("`@("`@("!V("!P<FEN="!PB
XM<F]G<F%M('9E<G-I;VX*=R`@=VEE;&0@82!W96%P;VX@("`@("`@("`@5R`@&
XM=V5A<B!A<FUO<B`@("`@("`@("`@("`@(%Y,(')E9')A=R!T:&4@<V-R965N@
XM"@H*"@H*"B`@("`@("`@("`@("`@("`;6S=M2&5L<"!&:6QE(&9O<B!4:&4@1
XM0V%V97)N<R!O9B!,87)N+"!#;VUM86YD($UO9&4;6VT*"F(@(&UO=F4@<V]UK
XM=&AW97-T("`@("`@("`@($(@(')U;B!S;W5T:'=E<W0@("`@("`@("`@("!!-
XM("!D97-E8W)A=&4@86X@86QT87(*8R`@8V%S="!A('-P96QL("`@("`@("`@,
XM("`@0R`@8VQO<V4@82!D;V]R("`@("`@("`@("`@(%H@('1E;&5P;W)T('EO_
XM=7)S96QF"F0@(&1R;W`@86X@:71E;2`@("`@("`@("`@($0@(&1R:6YK(&%T#
XM(&$@9F]U;G1A:6X@("`@("`\("!G;R!U<"!S=&%I<G,@;W(*92`@96%T('-O^
XM;65T:&EN9R`@("`@("`@("`@12`@96YT97(@82!S=&]R92P@9'5N9V5O;B`@Y
XM("`@('9O;&-A;FEC('-H869T"F<@(&=E="!P<F5S96YT('!A8VL@=V5I9VAT^
XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`^("!G;R!D;W=N('-T86ER/
XM<R!O<@IH("!M;W9E(&QE9G0@("`@("`@("`@("`@("!(("!R=6X@;&5F="`@P
XM("`@("`@("`@("`@("`@("`@=F]L8V%N:6,@<VAA9G0*:2`@:6YV96YT;W)YF
XM('EO=7(@<&]C:V5T<R`@22`@;&ES="!A;&P@:71E;7,@9F]U;F0@("`@(#\@C
XM('1H:7,@:&5L<"!S8W)E96X*:B`@;6]V92!D;W=N("`@("`@("`@("`@("`@D
XM2B`@<G5N(&1O=VX@("`@("`@("`@("`@("`@(%X@(&ED96YT:69Y(&$@=')AY
XM<`IK("!M;W9E('5P("`@("`@("`@("`@("`@("!+("!R=6X@=7`@("`@("`@&
XM("`@("`@("`@("`@+"`@<&EC:R!U<"!I=&5M"FP@(&UO=F4@<FEG:'0@("`@2
XM("`@("`@("`@($P@(')U;B!R:6=H="`@("`@("`@("`@("`@("`Z("!L;V]K.
XM(&%T(&]B:F5C="!Y;W4*;B`@;6]V92!S;W5T:&5A<W0@("`@("`@("`@3B`@&
XM<G5N('-O=71H96%S="`@("`@("`@("`@("`@(&%R92!S=&%N9&EN9R!O;@H@,
XM("`@("`@("`@("`@("`@("`@("`@("`@("!/("!O<&5N(&$@9&]O<B!O<B!C:
XM:&5S="`@("`@+B`@<W1A>2!H97)E"G`@('!R87D@870@86X@86QT87(@("`@5
XM("`@(%`@(&=I=F4@=&%X('-T871U<R`@("`@("`@("!M("!M;W9E('=I=&AO;
XM=70@<&EC:VEN9PIQ("!Q=6%F9B!A('!O=&EO;B`@("`@("`@("!1("!Q=6ET*
XM('1H92!G86UE("`@("`@("`@("`@("`@=7`@86X@;V)J96-T"G(@(')E860@>
XM82!S8W)O;&P@("`@("`@("`@(%(@(')E;6]V92!G96US(&9R;VT@=&AR;VYE@
XM("!`("!T;V=G;&4@875T;RUP:6-K=7`*<R`@<VET(&]N(&$@=&AR;VYE("`@O
XM("`@("`@4R`@<V%V92!T:&4@9V%M92`@("`@("`@("`@("\@(&ED96YT:69YH
XM(&]B:F5C=',@:6X*="`@=&ED>2!U<"!A="!A(&9O=6YT86EN("`@5"`@=&%KL
XM92!O9F8@87)M;W(@("`@("`@("`@("`@('1H92!G86UE"G4@(&UO=F4@;F]RA
XM=&AE87-T("`@("`@("`@(%4@(')U;B!N;W)T:&5A<W0*=B`@<')I;G0@<')O)
XM9W)A;2!V97)S:6]N"G<@('=I96QD(&$@=V5A<&]N("`@("`@("`@(%<@('=E!
XM87(@87)M;W(*>2`@;6]V92!N;W)T:'=E<W0@("`@("`@("`@62`@<G5N(&YO'
XM<G1H=V5S="`@("`@("`@("`@(%Y,(')E9')A=R!T:&4@<V-R965N"B`@("`@+
XM("`@("`@("`@("`;6S=M4W!E8VEA;"!.;W1E<QM;;0H*5VAE;B`;6S=M9')OL
XM<'!I;F<@9V]L9!M;;2P@:68@>6]U('1Y<&4@)RHG(&%S('EO=7(@86UO=6YTP
XM+"!A;&P@>6]U<B!G;VQD(&=E=',@9')O<'!E9"X*26X@9V5N97)A;"P@='EPQ
XM:6YG(&EN("<J)R!M96%N<R!A;&P@;V8@=VAA="!Y;W5R(&EN=&5R97-T960@)
XM:6XN("!4:&ES(&ES('1R=64*=VAE;B!V:7-I=&EN9R!T:&4@8F%N:RP@;W(@L
XM=VAE;B!C;VYT<FEB=71I;F<@870@86QT87)S+@H*3&%R;B!N965D<R!T:&4@%
XM04Y322Y365,@*&]R('!R969E<F%B;'DL('1H92!.04Y322Y365,I(&1E=FECT
XM92!D<FEV97(@:6YS=&%L;&5D"FEN('EO=7(@0T].1DE'+E-94R!F:6QE+B`@R
XM5&AE('-U<'!L:65D(")T97)M8V%P(B!F:6QE(&1E<V-R:6)E<R!T:&4@97-C'
XM87!E"G-E<75E;F-E<R!T;R!C:&%N9V4@=FED96\@;6]D97,@*'-E92!C:"`Q%
XM,R!O9B!T:&4@1$]3(#(N,"!M86YU86PI+B`@4V5E('1H90HB5$5234-!4"(@L
XM<V5C=&EO;B!I;B!,05).+D1/0R!F;W(@9G5R=&AE<B!D971A:6QS+@H*5VAEP
XM;B!I;B!T:&4@<W1O<F4L('1R861I;F<@<&]S="P@<V-H;V]L+"!O<B!H;VUEX
XM+"!A;B`;6S=M/&5S8V%P93X;6VT@=VEL;"!G970@>6]U(&]U="X*"E=H96X@$
XM8V%S=&EN9R!A('-P96QL+"!I9B!Y;W4@;F5E9"!A(&QI<W0@;V8@<W!E;&QS#
XM('EO=2!C86X@8V%S="P@='EP92`G&ULW;4D;6VTG(&%S"G1H92!F:7)S="!LO
XM971T97(@;V8@>6]U<B!S<&5L;"X@(%1H92!A=F%I;&%B;&4@;&ES="!O9B!S\
XM<&5L;',@=VEL;"!B92!S:&]W;BP*869T97(@=VAI8V@@>6]U(&UA>2!E;G1E9
XM<B!T:&4@<W!E;&P@8V]D92X@(%1H:7,@;VYL>2!W;W)K<R!O;B!T:&4@,7-TB
XM(&QE='1E<@IO9B!T:&4@<W!E;&P@>6]U(&%R92!C87-T:6YG+@H*5VAE;B!AC
XM;B!I;G9E;G1O<GD@;&ES="!I<R!O;B!T:&4@<V-R965N(&9R;VT@82!D<F]P\
XM+"!Q=6%F9BP@<F5A9"P@;W(@<VEM:6QA<@IC;VUM86YD+"!Y;W4@8V%N('1YV
XM<&4@=&AE(&QE='1E<B!O9B!T:&4@;V)J96-T('1H870@>6]U('=I<V@@=&\@?
XM86-T(&%P;VXL"G=I=&AO=70@:&%V:6YG('1O('1Y<&4@82!S<&%C92!T;R!G)
XM970@8F%C:R!T;R!T:&4@<')O;7!T+@H*5&AI<R!V97)S:6]N(&]F($QA<FX@R
XM:7,@8GD@2V5V:6X@4F]U=&QE>2X*("`@("`@("`@("`@("`@("`@("`@("`@`
XM&ULW;4QA<FX@0V]M;6%N9"!,:6YE($]P=&EO;G,;6VT*"FQA<FX@*RL@("`@4
XM("`@("`@("`@("`@(')E<W1O<F4@8VAE8VMP;VEN=&5D(&=A;64*;&%R;B`MS
XM<R`@("`@("`@("`@("`@("`@;&ES="!T:&4@<V-O<F5B;V%R9`IL87)N("UIA
XM("`@("`@("`@("`@("`@("!L:7-T('-C;W)E<R!W:71H(&EN=F5N=&]R:65S]
XM"FQA<FX@+6X@("`@("`@("`@("`@("`@('-U<'!R97-S('=E;&-O;64@;65S(
XM<V%G92!W:&5N(&)E9VEN;FEN9R!A(&=A;64*;&%R;B`M:"`@("`@("`@("`@*
XM("`@("`@<')I;G0@;W5T(&%L;"!T:&4@8V]M;6%N9"!L:6YE(&]P=&EO;G,*<
XM;&%R;B`M/R`@("`@("`@("`@("`@("`@<')I;G0@;W5T(&%L;"!T:&4@8V]M7
XM;6%N9"!L:6YE(&]P=&EO;G,*;&%R;B`M/&YU;6)E<CX@("`@("`@("`@<W!EC
XM8VEF>2!D:69F:6-U;'1Y(&]F('1H92!G86UE"FQA<FX@+6\\;W!T<V9I;&4^A
XM("`@("`@('-P96-I9GD@=&AE(&]P=&EO;B!F:6QE('1O(&)E('5S960*;&%RQ
XM;B`M8R`@("`@("`@("`@("`@("`@8W)E871E(&YE=R!S8V]R96)O87)D<R`M@
XM+2!P<F]M<'1S(&9O<B!A('!A<W-W;W)D"FQA<FX@+6P@("`@("`@("`@("`@M
XM("`@('!R:6YT(&]U="!T:&4@;&%R;B!L;V<@9FEL90IL87)N("UP("`@("`@I
XM("`@("`@("`@("!P;&%Y(&EN('!R;VUP="!M;V1E"@H*"@H*"@H*"@H@("`@"
XM("`@("`@("`;6S=M0F%C:V=R;W5N9"!);F9O<FUA=&EO;B!F;W(@3&%R;AM;*
XM;0H*("`@(%=E;&-O;64@=&\@=&AE(&=A;64@;V8@3&%R;BX@($%T('1H:7,@H
XM;6]M96YT+"!Y;W4@9F%C92!A(&=R96%T('!R;V)L96TN"EEO=7(@9&%U9VATQ
XM97(@:&%S(&-O;G1R86-T960@82!S=')A;F=E(&1I<V5A<V4L(&%N9"!N;VYE<
XM(&]F('EO=7(@:&]M92!R96UE9&EE<PIS965M('1O(&AA=F4@86YY(&5F9F5C7
XM="X@(%EO=2!S96YS92!T:&%T('-H92!I<R!I;B!M;W)T86P@9&%N9V5R+"!AN
XM;F0@>6]U(&UU<W0*=')Y('1O('-A=F4@:&5R+B`@5&EM92!A9V\@>6]U(&AE0
XM87)D(&]F(&$@;&%N9"!O9B!G<F5A="!D86YG97(@86YD(&]P<&]R='5N:71YU
XM+@I097)H87!S(&AE<F4@:7,@=&AE('-O;'5T:6]N('EO=2!N965D+@H*("`@D
XM($ET(&AA<R!B965N('-A:60@=&AA="!T:&5R92!O;F-E('=A<R!A(&=R96%TA
XM(&UA9VEC:6%N('=H;R!C86QL960@:&EM<V5L9@I0;VQI;FYE875S+B`@36%N&
XM>2!Y96%R<R!A9V\L(&%F=&5R(&AA=FEN9R!M86YY(&UI<F%C=6QO=7,@<W5CS
XM8V5S<V5S+"!0;VQI;FYE875S"G)E=&ER960@=&\@=&AE(&-A=F5R;G,@;V8@T
XM3&%R;BP@=VAE<F4@:&4@9&5V;W1E9"!M;W-T(&]F(&AI<R!T:6UE('1O('1HV
XM90IC<F5A=&EO;B!O9B!M86=I8RX@("!2=6UO<G,@:&%V92!I="!T:&%T(&]N_
XM92!D87D@4&]L:6YN96%U<R!S970@;W5T('1O(&1I<W!E;`IA;B!A='1A8VMIC
XM;F<@87)M>2!I;B!A(&9O<F5S="!S;VUE(&1I<W1A;F-E('1O('1H92!N;W)T?
XM:"X@($ET(&ES(&)E;&EE=F5D('1H870*:&5R92!H92!M970@:&ES(&1E;6ES7
XM92X*"B`@("!4:&4@8V%V97)N<R!O9B!,87)N+"!I="!I<R!T:&]U9VAT+"!M]
XM=7-T(&)E(&UA9VYI9FEC96YT(&EN(&1E<VEG;BP*86YD(&-O;G1A:6X@;75C3
XM:"!M86=I8R!A;F0@=')E87-U<F4N("!/;F4@;W!T:6]N('EO=2!H879E(&ESM
XM('1O('5N9&5R=&%K92!A"FIO=7)N97D@:6YT;R!T:&5S92!C879E<FYS+@H*D
XM("`@($=O;V0@3'5C:R$@(%EO=2=R92!G;VEN9R!T;R!N965D(&ET(0H*"@H@M
XM("`@("`@("`@("`;6S=M2&]W('1O('5S92!T:&4@;&%R;BYO<'0@;W!T:6]N`
XM(&9I;&4;6VT*"E1H92!F:6QE(")L87)N+F]P="(L(&EF('5S960L('-H;W5L-
XM9"!B92!I;B!A(&1I<F5C=&]R>2!A;&]N9R!Y;W5R(%!!5$@N"D$@<V5Q=65N/
XM8V4@;V8@=V]R9',@=&5R;6EN871E9"!B>2!W:&ET97-P86-E(&ES('5S960@.
XM=&\@<W!E8VEF>2!O<'1I;VYS+@H*("`@(%=O<F0@("`@("`@("`@("`@("`@`
XM("`@("`@365A;FEN9PH@("`@8W5R<V]R.B!L;W=S8V%N(&AI9VAS8V%N("!C`
XM:&%N9V4@=&AE('-H87!E(&]F('1H92!C=7)S;W(*("`@($1%0U)A:6YB;W<@Q
XM("`@("`@("`@("`@("`@=&5L;"!,05).('EO=2!H879E('1H870@8V]M<'5TH
XM97(*("`@(&5N86)L92UC:&5C:W!O:6YT:6YG("`@("`@='5R;B!O;B!P97)IQ
XM;V1I8R!C:&5C:W!O:6YT:6YG"B`@("!G<F%P:&EC<SH@=V%L;&,@9FQO;W)C2
XM("`@('-E;&5C="!G<F%P:&EC<R!M87IE(&-H87)A8W1E<G,*("`@(&ME>7!AB
XM9"`@("`@("`@("`@("`@("`@("`@96YA8FQE('1H92!N=6UE<FEC(&ME>7!AY
XM9"!F;W(@;6]V:6YG"B`@("!L87)N9&ER.B`@9&ER96-T;W)Y("`@("`@('1H\
XM92!D:7)E8W1O<GD@=&\@=7-E(&9O<B!L87)N(&9I;&5S"B`@("!M;VYS=&5R#
XM.B`@(FUO;G-T(&YA;64B("`@(&-H;V]S92!A(&YA;64@9F]R(&$@;6]N<W1E1
XM<@H@("`@;F%M93H@("`@(")Y;W5R(&YA;64B("`@("!C:&]O<V4@>6]U<B!PK
XM;&%Y:6YG(&YA;64*("`@(&YO+6)E97`@("`@("`@("`@("`@("`@("`@9&ES5
XM86)L92!B965P:6YG(&]F('1H92!T97)M:6YA;`H@("`@;F\M:6YT<F]D=6-T0
XM:6]N("`@("`@("`@("!D;R!N;W0@9&ES<&QA>2!I;G1R;R!M97-S86=E"B`@;
XM("!S879E9FEL93H@<V%V92UF:6QE+6YA;64@(&1E9FEN92!W:&%T('1H92!SF
XM879E9V%M92!F:6QE;F%M92!W:6QL(&)E"B`@("!S=V%P9FEL93H@<W=A<"UF#
XM:6QE+6YA;64@(&1E9FEN92!T:&4@;F%M92!O9B!T:&4@<W=A<&9I;&4*"EEO"
XM=7(@;F%M92!A;F0@;6]N<W1E<B!N86UE<R!M=7-T(&)E(&5N8VQO<V5D(&EN+
XM(&1O=6)L92!Q=6]T871I;VX@;6%R:W,@86YD(&UA>0IB92!U<"!T;R`S-"!CZ
XM:&%R86-T97)S(&QO;F<N("!,;VYG97(@;F%M97,@87)E('1R=6YC871E9"X@F
XM($%N>71H:6YG(&5N8VQO<V5D(&EN"G%U;W1A=&EO;B!M87)K<R!I<R!C;VYS!
XM:61E<F5D(&]N92!W;W)D+"!A;F0@;75S="!B92!S97!A<F%T960@9G)O;2!OV
XM=&AE<B!W;W)D<PIB>2!W:&ET97-P86-E+@H@("`@("`@("`@(!M;-VU%>'!L_
XM86YA=&EO;B!O9B!T:&4@3&%R;B!S8V]R96)O87)D(&9A8VEL:71Y&UMM"@H@]
XM("`@3&%R;B!S=7!P;W)T<R!45T\@<V-O<F5B;V%R9',L(&]N92!F;W(@=VEN1
XM;F5R<RP@86YD(&]N92!F;W(@9&5C96%S960*8VAA<F%C=&5R<RX@($5A8V@@W
XM<&QA>65R("AB>2!U<V5R:60@;W(@<&QA>65R:60L('-E92!524130T]212!IG
XM;B!-86ME9FEL92D*:7,@86QL;W=E9"!O;F4@<VQO="!O;B!E86-H('-C;W)EQ
XM8F]A<F0L(&EF('1H92!S8V]R92!I<R!I;B!T:&4@=&]P('1E;B!F;W(*=&AA<
XM="!S8V]R96)O87)D+B`@5&AI<R!D97-I9VX@:&5L<',@:6YS=7)E('1H870@[
XM9G)E<75E;G0@<&QA>65R<R!O9B!,87)N"F1O(&YO="!H;V<@=&AE('-C;W)EU
XM8F]A<F0L(&%N9"!G:79E<R!M;W)E('!L87EE<G,@82!C:&%N8V4@9F]R(&=L5
XM;W)Y+B`@3&5V96P*;V8@9&EF9FEC=6QT>2!I<R!A;'-O(&YO=&5D(&]N('1HP
XM92!S8V]R96)O87)D<RP@86YD('1H:7,@=&%K97,@<')E8V5D96YC90IO=F5R?
XM('-C;W)E(&9O<B!D971E<FUI;FEN9R!W:&%T(&5N=')Y(&ES(&]N('1H92!SL
XM8V]R96)O87)D+B`@1F]R(&5X86UP;&4Z"FEF(")987(L('1H92!"=6<@4VQA>
XM>65R(B!H87,@82!S8V]R92!O9B`Q,C@P,#,@;VX@=&AE('-C;W)E8F]A<F0@0
XM870@9&EF9B`P+`IT:&5N(&$@9V%M92!A="!D:69F(#$@86YD(&$@<V-O<F4@M
XM;V8@-#$Q,B!W;W5L9"!R97!L86-E('1H92!P<F5V:6]U<PIE;G1R>2!O;B!T/
XM:&4@<V-O<F5B;V%R9"X@($YO=&4@=&AA="!W:&5N(&$@<&QA>65R(&1I97,L7
XM('1H92!I;G9E;G1O<GD@:7,*<W1O<F5D(&EN('1H92!S8V]R96)O87)D('-OD
XM('1H870@979E<GEO;F4@8V%N('-E92!W:&%T(&ET96US('1H92!P;&%Y97(@1
XE:&%D"F%T('1H92!T:6UE(&]F(&1E871H+@H*"@H*"@H*"@HN"B!PQ
X``
Xend
Xsize 8497
END_OF_FILE
if test 11935 -ne `wc -c <'larn.hlp.uu'`; then
    echo shar: \"'larn.hlp.uu'\" unpacked with wrong size!
fi
# end of 'larn.hlp.uu'
fi
echo shar: End of archive 5 \(of 17\).
cp /dev/null ark5isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 17 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
-- 
Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
Mail comments to the moderator at <amiga-request@uunet.uu.net>.
Post requests for sources, and general discussion to comp.sys.amiga.misc.
