billr@saab.CNA.TEK.COM (Bill Randle) (07/06/89)
Submitted-by: "Philip A. Cordier" <philc@sco.COM> Posting-number: Volume 7, Issue 5 Archive-name: ularn/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 8)." # Contents: Umaps help.c main.c # Wrapped by billr@saab on Thu Jun 29 08:10:20 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'Umaps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Umaps'\" else echo shar: Extracting \"'Umaps'\" \(23140 characters\) sed "s/^X//" >'Umaps' <<'END_OF_FILE' X################################################################### X# # . # # # # # . # X# D D . . D . # X###D########################################## # # ###D### X# -# #. # # ################ . .# X# ####### ######## ############ D #### # # # X# ... #.# # # # . # # # #### # ############ # ###D### X# #.# # # ## # # # ############ #### # #- # # # #. # X# . # # # # ## #- # # # - D #### # # . D # #.# # ... # X# # #.# # # # # # . . # # # # # # #-# # ~.! # X###D### ### #######D## # ############ ###### ########## ### ####### X# # .# # ..... ...# X###D###########################################################D### X# . #.....# # # # -# # # # # # X# ..... . D D D D. # X# #.....# # # # # # .# # # # X################################################################### X X################################################################### X# # . - . . . # X# #D############################################################ .# X# # # . - . # ## X#.#.#D####################################################### #. # X# # # # . . . # ##-# X# #-# #D################################################### # # .# X# # # # # . # - # # . -# . #.......#!# # # ## X# # # # # ### ### ### ###.### ### ### ### ### ###.###.###~# # #. # X#.# # # . # . . # . # - # . . # ....#.....# # ## # X# #.# ##################################################### # # .# X# # # .. . #. #-## X# # ######################################################### #. # X# # .. - . . . . ## # X#-############################################################## # X#. . # X################################################################### X X################################################################### X### # ## #...# . . . . # # # ## .### X# ## # ## # ####################### # #. ## #####D#D # X# D######## ## ##### # D D # # # # ## ## -..## # X# # ##..- # ## # # ## ## . # # # # # ### ### ### # X# # ##-..# ## . ## # ##-. ## . # # # # ## # #-.-## # # X# # ## -##### ## # . ## . - ## # # # # ## # #..## # # X#.#### ##D##-.# ## # . ## .....-## # # # #..## -#### ## # # X# # # DD ##-.D ## # ..######D###### # # # #.DD ### D## ### # X# #.## ## ##### ## ### # #D# # # #..## # ##...# # X# #.# ##..## ## # # ##.## ######## ## ## ####..# # X#-#. ##...## ##. ###### ### .-## # - # ## ## ## # # X# # ##..#.## ##. ### # # ##.-. .## # ###### ## #### ##D. # X# ### ##### ## .###!. . .~##. ## # ## ## -## # X# ## ## ############ ##################### ### ## #### ## # X### # D . . . - .. ##..... #### X################################################################### X X################################################################### X#. # # # . # # # ## #### .. # X# # # # ###### # # . . . # . # .# . ##. .. # X# #. # . . # # . # #D######################## #D## - # X# ################# # ##.## . . #..## # X# # .# . # ### ##. .## ##################### ## # X# # - .D . - # # - # ## # ## #. # # # # ## ## # X# ######## .. # ## ### ## # # # # # # # # # ## ### X# D. # ## ##!## ## # # # # # # # # .. ## X# ################# . ## ##.~.## ##### # # # # # # ##### ... # X# D. # . # ##. ## .#. ## ## ..# # #.# # #.# . -. # X# # .- . #. - # ## ## ..#.. ## ## # # #-# # # # ###### X# # D. # ## ## #####- ## ## # # # # # # #.# # X# ##############D## ## ## .. ... .. ## ##### #.# # # ## # - ## X# #. . # ## ########D######## ## . # # # # # # # . # X# # - . ### - . . ##. # # #### # # X################################################################### X X################################################################### X# # .- . #. - # ## ## ..#. ## ## # # #-# # # # ###### X# # D. # ## ## #####- ## ## . # # # # # #.# # X# ##############D## ## ## . .. ## ##### #.# # # ## # - ## X#. # # # . ##### # # # #### .. # X# #D# # ###### # # . . . # . # .# . ##. .. # X# #. # . . # # . # #D######################## D## - # X# ################# . ## ##. .## ##### # # # # # # ##### ... # X# D. # . # ##. ## .#. ## ## ..# # #.# # #.# . -. # X# #. . # ## ########D######## ## . # # # # # # # . # X# ################# # ##.## . . #..## # X# # .# . # #### ##. .##DD##################### ## # X# # - .D . - # # -## ## # ## #. # # #. # ## ## # X# ######## .. # # # ## .### .## # # # # # # # # # ## ### X# D. # # ## ##!## ## # # # # # # # .. ## X# # - . ### -## . .~. . ## ###. # # #### # # X################################################################### X X################################################################### X#.. . D # . # #- # X############# ######### # ## ### ##### ## #### ###### ####### ### # X#.#!#~# # # .-# # #- # # # # -# # # # X# # #.# . # ####### # # # # # # # # # ##### X# # ..# ##### # # # #### # ## ## ## # ###### ####### # # X# - ..D # D # . D # # # #.##### ## ## # #. #.# #..# # ### # X####### ####### ### # # # # # # D # D D #..D # # X#- # # # #### # ###### # ## # #. # #..# ##### X### #######################- # # # ###################### # # X# ... # . # #..# ### # - .. . #. ### # X# ######## # # # # ### #################### # # # X# # ### # X################################################################# # X#- # # D ### # # # # X# . # # # # D # X################################################################### X X################################################################### X# .. # X# ############## ############################################## # # X# # # # # .. # # # X# #D## # # ############D################# ########### # # # X######### #- # # # #- D # # ~ # # # # # # # X# # # # # # # ### # # # D - # # ####### # # # # X# .... # #### # # # #!# # # ###### .. #.# # # # # # # X# .... # # # # ### # # # # #########D#### # ### # # # # # X# .... ######## # # D # #- # #.. # ...#.# # #.# # # # # # X# # # ### # #### #.- D - #.# #.#.# # # # # # X#####DD## ######## # # D D. # # # #...# # # # # # X# # ..# # # # ############################## # ##### # # # # # X# ......# # # # # # # # # # X# ####### ###### ################################ ######### # ### # X# .D. # # X################################################################### X X################################################################### X# ## ## ### ## # X# ##### ## ..- ## ##.## ## # X# # ! ## ## . ## ## .## .. ## # X# #....###### ## ## ## . ## ## # X# # - # ## ##D# ## . ## ## # X# #####D ~ ####### ###........ ## ... ## ## # X# # # ## ## .... ## . ## ## # X# #. ######## ## ## . - ####D#### - # X# #.- #...## ## ... ## ### ...... ## ## # X# #. #..## ## ######### ## ... ## ### ## .. # X# #.. #.## ## ## - ## . #### ## ## ##### ## # X# #####D## ## ## ###### ## ## ####### ## # X# D -.## #### ######## ##DD## ######## #D # X# ###### ... ## ########## ## # X#### . . ### X################################################################### X X################################################################### X# # X# ####.########################################## ## ########## X# # #.#.#.# #.. #. # # # X####### # # # # # ##### #! # ########### # ### # X# # # # # # # ##...## # # # # # #-# # X# ..- D # # # # # ## . ## ####D##### .. ### # # # # X# # # # ##. ~ .## # # ### # # ##### # # X############ # # # # ## . . .## #...# .. #.# # # # # X# .. .# # # # # ## - ## # # D.D # ######### # X# . D # # # # ##.......## ####D#####.# # # X# - . # # # # # ## ## # . # ### ########### # X############ #.#.# # ###D### # . #....# # # X# # #-# D .. # .# ###....## ##-### # X#### ########################################## ###### ### # X# . # X################################################################### X X################################################################### X# # X# ###########################D####### ## # X# ####################### # ##...... ## ## # X# ########D###### # # !##.... ## ## # X# ############ ## ## ... # # #...## ~ ## ###### # X# # # # # ...... # # # .. ##### ## # X# # - .. # # # ########### # # . ######### ## # X# ##### ##### # # # # #... ## ## # X# # # ########## ######## ########DD#### ####### # X# # # .... # # # # # ## ## # X# ##### # # ....# # ######### # # ##### ## # X# #- ######D##########..# # ######### # - #.. ## ## # X# ##### # # # #... #.....## # X# # ################### ###############... #### # ###### X# # # X################################################################### X X################################################################### X# # X########### ##### ##### #####D#### ##### ###### # X#.. # #-..D ###### ## # ## # ## ..## ### #### # X# #### ### ##### # ## # ##### # ## ### ## # # # X# # # # # # ##### # ## # # #### # #..##### - ### # X# # # ####### ### #...# # ######## # # #~. .... # # X# # # # #...# # # ######### ############## # X# # ###### ####### # ### ### # .. # # X# # # - # #-#####!# # # #### ## #### # # X# ###### # ########## #.. ....# # ######## # # # ## ## # X# -.# ##### ####...## # . .# #..# # ## # # X# #### ###### #.### #####.#### #### ### ## # # X# #- #######....#### ...... #.# . # ## # # X# ####### ##### ###########.############### ### # X# . # X################################################################### X X################################################################### X# # #- . # # # # # # # # # X# # # #####.##### # # # # # # # # # # ###########D########### # X# # ##### # # ### # # # # # # # # # ### #.... # # # # X# # # # # # # # # # # # # # #.!. -.. #.##.# # # X# # . - # # ####### # # # # # # # # # ########## ## # # X#.####### # # D # . # # # X#. -# ################################################### # X# ##### D. . # X# # ### ###D### ### ### ###D### ### ### ###D### ###.### # X# # ###### ### .# .# #. # # # # # # # # . # # X# ### # -# ### .#. - .# # # #...- # # .. # # -..# # . # # X# # # ### #. ~ .# # # # # # # # .. .# # # # X#.###### # ### # # #.....# # # # # # # # # # X# # ####### ####### ####### ####### ####### ####### ####### # X# # ... .. # X################################################################### X X################################################################### X# # . # ### # # # # . # X# D D . # . D . # X############################################### # # ###D### X# -# #. # # ################ . .# X# #######D######## ############ # #### # # # X# ... #. # #!~ . # # # #--# # ############ #####D### X# #.# # # ## # # # ############ #--# # #- # # # #. # X# . # #-# # ## #- # # # - D ## # # # . D #### #.# # ... # X# # #-# # # # # # . . # # # # # # #-# # -.- # X###D### ### ####### ## # ############ ###### ########## ### ###D### X# # . ..... ...# X##################################### # ###############D### X# . #.....# # # # -########### # # # # X# ..... . D D # D D. # X# #.....# # # # # .# # # # X################################################################### X X################################################################### X#.. . # D . #- # X### ######### ######### # ## ### ##### ## ########### ####### ### # X#.# # # # .-# # #- # # # # -# # # # X# # #.# . # ####### # # # # # # # # # ##### X# # ..####### # # # #### # ## ## ##!# ###### ####### # # X# - ..D # D # . D # # # #.##### ## ## # #. #.# #..# # ### # X####### ####### ### # # # # # # D # D D #..D # # X#- # # # #### # ###### # ## # #. # #..# ##### X### #######################- # # # ###################### # # X# ... # . #..# ### # - .. . #. ### # X# # # # #-# #################### # # # X# # # # X################################-################################ # X#-..... # ####D ### # # # # X#~..... # # # # D # X################################################################### X X################################################################### X# .. # X# ############## ############################################## # # X# # # # # .. # # # X# #D## # # ############D################# ########### # # # X######### #- # # # #- D # #.!..# # # # # # # X# # # # # # # # ### ## # #....D - # # ####### # # # # X# .... # #### # # # #~# # # ###### .. #.# # # # # # # X###....## # # # ###.# # # #########D## # # ### # # # # # X# .... ######## # # D .# #- # .. # ...#.# # #.# # # # # # X# # ## # ### .# #### .- D - #.# #.#.# # # # # # X#####DD## ######## #... .# . # # # #.#. # # # # # X# # ..# # # ############################## # # ##### # # # # X# ......# # # # # # # # # # # X# ####### ###### ################################D# ######### ### # X# .D. #-.-# X################################################################### X X################################################################### X# ## ## ## ## ## # X# ############## ## ..- ## ## . ## ## # X# # # ## ## . ## ## . ##.. ## # X# #....###### ## ## ######## ####### . ## ## # X# # - # ## ## ##D# ## . ## ## # X# # D###### ###........ ## ... ## ###### # X# # # ## ## .... ## . ## ## - # # X# #. ######## ## ## . - ####D####.. D # X# #.- #...## ## ... ## ### ...... ## ##### # X# #. #..## ## ######### ## ... ## ### ## .. # X# #.. #.## ## ## - ## . #### ## ## ##### ## # X# #####D####### # ## ## ##..## ## ## ## ## ## # X# D -.## # # #### ##.-.-## ##DD## ### #### ## # X# ######. ...# #### ## #### ##### ## ##D# X####~!.... D . . # X################################################################### X X################################################################### X# # X# ####.########################################## ## ########## X# # #.#.#.# #.. . # # # X####### # # # # # ############# # ########### # ### # X# # # # # # # --##...##-- # # # # #-# # X# ..- D # # # # # #-## . ##-# ####D##### .. ### # # # # X# # # # ###. .### # ~ # ### ### ##### # # X############ # # # # ## . . .## #...# .. #.# # # X# .. .# # # # # ## - ## # # D. # ######### # X# . D # # # # ###.......### ####D#####.# # # X# - . # # # # # -## ##- # . ### ########### # X############ #.#.# # ######D###### # . ....# # # X# #!#-# # .. # . ###....## ##-### # X#### ############################## ########## ###### ### # X# D . # X################################################################### X X################################################################### X# # X# ###############D####################D# # X# ####################### # ##...... # # X# ########D###### # # ##.... # # X# ############### ## ## ... # # #...## ##### # X# # ~ # # #!...... # # # .. ##### # # X# # - .. # # # ########### # # . ######### # # X# ##### ######## # # # # # #... ## # # X# . # # # ########## ######## ########D #### ###### # X# . # # ....# # # # # # ## # # X# ##### # ###### # ....# # ######### # # #####D# # X# #- ## # #######..# # ######### # - #.. # X# ##### # # # #... #..... # X# # ################### ###############... #### ###### X# # # X################################################################### X X################################################################### X# # # X########### ##### # #####D#### ##### ###### # X#.. # #~..D ###### ## # ## # ## ..## ### #### # X# #### ### ##### # ## # ##### # ## ### ## # # # X# # # # # # ##### # ## # # #### # #..##### - ### # X# # # ####### ### #...# # ######## # # #!. .... # # X# # # # #...# # # ######### ############## # X# # ###### ####### # ### ### # .. # # X# # # - # #- # # # ######## #### # # X# # # ########## #.. ....# # ######## # ## ## # X# # -. ##### ####...## # . .# .. # # # X# # ###### ##### #####.#### ####### # # X# # - #######....#### ...... #.# . # ## # # X# ######### ##### ###########.############### ### # X# . # X################################################################### X X################################################################### X# D D #-..........# # # # # # X# # # #####.#####.# # # # # # #############D########### # X# # ##### #.-#.#~###.# # # # # # ### .... # # # # X# # . # #D###.......# # # # # # # . . -.. #. #.# # # X# # . - # ##. #.####### # # # # # ################## # # X#D####### # ##. # D # . # # # X#. D D -# # ################################################### # X# ###### ## . . # X# # D ### ###D###D####### ###D###D####### ###D###D####### # X# # ###### # # .# .# #. # # # # # # # # . # # X# ### -# # # .#. - .# # # #...- # # .. # # -..# # . # # X#DD# # # # #. .# # # # # # # # .. .# # # # X#.###### # # # # #.....# # # # # # ! # # # # X# # ####### ####### ### ###D####### ### ###D####### ### ###D# X# # ... .. # X################################################################### X END_OF_FILE if test 23140 -ne `wc -c <'Umaps'`; then echo shar: \"'Umaps'\" unpacked with wrong size! fi # end of 'Umaps' 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'\" \(2009 characters\) sed "s/^X//" >'help.c' <<'END_OF_FILE' X/* help.c */ X#include "header.h" X 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; X char tmbuf[128]; X /* intermediate translation buffer when not a VT100 */ X if ((j=openhelp()) < 0) X return; /* open the help file and get # pages */ X X for (i=0; i<23; i++) lgetl(); /* skip over intro message */ X for (; j>0; j--) { X clear(); X for (i=0; i<23; i++) { X tmcapcnv(tmbuf,lgetl()); X lprcat(tmbuf); X } /* intercept \33's */ X if (j>1) { X lprcat(" ---- Press "); X standout("return"); X lprcat(" to exit, "); X standout("space"); X lprcat(" for more help ---- "); X i=0; X while ((i!=' ') && (i!='\n') && (i!='\33')) X i=getcharacter(); X if ((i=='\n') || (i=='\33')) { X lrclose(); X setscroll(); X drawscreen(); X return; 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 char tmbuf[128];/* intermediate translation buffer when not a VT100 */ X X if (openhelp() < 0) X return; /* open the help file */ X clear(); X for(i=0; i<23; i++) { X tmcapcnv(tmbuf,lgetl()); X lprcat(tmbuf); X } /* intercept \33's */ X lrclose(); X 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); X lprcat("Press "); X standout("return"); X lprcat(" to continue: "); X while (getcharacter() != '\n') X ; X setscroll(); X} X X/* X * routine to open the help file and return the first character - '0' X */ Xopenhelp() X{ X if (lopen(helpfile)<0) { X lprintf("Can't open help file \"%s\" ",helpfile); X lflush(); X sleep(4); X drawscreen(); X setscroll(); X return(-1); X } X resetscroll(); X return(lgetc() - '0'); X} END_OF_FILE if test 2009 -ne `wc -c <'help.c'`; then echo shar: \"'help.c'\" unpacked with wrong size! fi # end of 'help.c' fi if test -f 'main.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'main.c'\" else echo shar: Extracting \"'main.c'\" \(26141 characters\) sed "s/^X//" >'main.c' <<'END_OF_FILE' X/* main.c */ X/* This game is bad for you. It is evil. It will rot your brain. */ X#include "header.h" X Xstatic char copyright[]= X"\nUlarn was created by Phil Cordier and is based on Larn by Noah Morgan\n"; X Xint srcount=0; /* line counter for showstr() */ Xint dropflag=0; /* if 1 then don't lookforobject() next round */ Xint rmst=80; /* random monster creation counter */ Xint userid; /* the players login user id number */ Xint stayflag=0; X Xchar nowelcome=0, Xnomove=0; /* if (nomove) then don't count next iteration as a move */ X Xstatic char viewflag=0; X/* if viewflag then we have done a 99 stay here and X don't showcell in the main loop */ X Xchar restorflag=0; /* 1 means restore has been done */ Xstatic char cmdhelp[] = "\ XCmd line format: Ularn [-slicnh] [-o<optsfile>] [-##] [++]\n\ X -s show the scoreboard\n\ X -i show scoreboard with inventories\n\ X -c create new scoreboard (wizard only)\n\ X -n suppress welcome message on starting game\n\ X -h print this help text\n\ X -o<optsfile> specify .Ularnopts file to be used instead of \"~/.Ularnopts\"\n\ X -## specify level of difficulty (example: Ularn -5)\n\ X -++ restore game checkpoint file\n"; X X/* X ************ X MAIN PROGRAM X ************ X */ X Xmain(argc,argv) Xint argc; Xchar **argv; X{ X register int i; X int hard; X char *ptr=0; X struct passwd *pwe,*getpwuid(); X X init_term(); /*setup the terminal (find out what type) for termcap */ X X/* X * first task is to identify the player X */ X if ((ptr = getlogin()) == NULL) X if (pwe=getpwuid(geteuid())) X ptr = pwe->pw_name; X else if ((ptr = getenv("USER")) == NULL) { Xnoone: fprintf(stderr, "Can't find your logname. Who Are You?\n"); X fflush(stderr); X exit(1); X } X if (ptr==NULL) goto noone; X if (strlen(ptr)==0) goto noone; X/* X * second task is to prepare the pathnames the player will need X */ X strcpy(loginname,ptr); X X /* save loginname of the user for logging purposes */ X strcpy(logname,ptr); X X /* this will be overwritten with the players name */ X if ((ptr = getenv("HOME")) == NULL) X if ((ptr = pwe->pw_dir) == NULL) X ptr = "."; X X /* save file name in home directory */ X strcpy(savefilename, ptr); X strcat(savefilename, "/Ularn.sav"); X X sprintf(optsfile, "%s/.Ularnopts",ptr); /* the .Ularnopts filename */ X strcat(scorefile, SCORENAME); /* the Ularn scoreboard filename */ X strcat(logfile, LOGFNAME); X X /* Ularn activity logging filename */ X strcat(helpfile, HELPNAME); /* the Ularn on-line help file */ X strcat(larnlevels, LEVELSNAME); /* the pre-made cave level data file */ X strcat(fortfile, FORTSNAME); /* the fortune data file name */ X/* X * now malloc the memory for the dungeon X */ Xcell = (struct cel *)malloc(sizeof(struct cel)*(MAXLEVEL+MAXVLEVEL)*MAXX*MAXY); X X if (cell == (struct cel *)NULL) X died(-285); /* malloc failure */ X X if ( ( lpbuf = malloc ((5* BUFBIG)>>2) ) == (char *)NULL) X died(-285); X X if ( ( inbuffer = malloc( (5*MAXIBUF) >>2) ) == (char *)NULL) X died(-285); X X lcreat((char*)0); X newgame(); /* set the initial clock */ X hard= -1; X X/* X * now make scoreboard if it is not there (don't clear) X */ X if (access(scorefile,0) == -1) /* not there */ X makeboard(); X X/* X * now process the command line arguments X */ X for (i=1; i<argc; i++) { X if (argv[i][0] == '-') X switch(argv[i][1]) { X case 's': showscores(); X exit(0); /* show scoreboard */ X X case 'i': showallscores(); X exit(0); /* show all scoreboard */ X X case 'c': /*anyone with password can create scoreboard*/ X setupvt100(); X lprcat("Preparing to initialize the scoreboard.\n"); X if (getpassword() != 0) { X makeboard(); X showscores(); X } X exit(0); X X case 'n': nowelcome=1; X argv[i][0]=0; X break; X X case '0': case '1': case '2': case '3': X case '4': case '5': case '6': case '7': X case '8': case '9': /* for hardness */ X sscanf(&argv[i][1],"%d",&hard); X if (hard > 100) hard = 100; X break; X X case 'h': /* print out command line arguments */ X fprintf(stderr, "%s", cmdhelp); X fflush(stderr); X exit(0); X case 'o': /* specify a .Ularnopts filename */ X strncpy(optsfile,argv[i]+2,127); break; X default: X fprintf(stderr,"Unknown option <%s>\n",argv[i]); X fprintf(stderr,"%s", cmdhelp); X fflush(stderr); X exit(1); X }; X if (argv[i][0] == '+') { X clear(); restorflag = 1; X if (argv[i][1] == '+') { X hitflag=1; X restoregame(ckpfile); X /* restore checkpointed game */ X } X i = argc; X } X } X X X userid = geteuid(); /* obtain the user's effective id number */ X X sigsetup(); /* trap all needed signals */ X sethard(hard); /* set up the desired difficulty */ X setupvt100(); /* setup the terminal special mode */ X readopts(); /* read the options file if there is one */ X X /* restore game if need to */ X if (access(savefilename,0)==0) { X clear(); X restorflag = 1; X hitflag=1; X restoregame(savefilename); X } X X /* create new game */ X if (c[HP]==0) { X makeplayer(); /* make the character that will play*/ X newcavelevel(0);/* make the dungeon */ X predostuff = 1; X X /* tell signals that we are in the welcome screen */ X if (nowelcome==0) X welcome(); /* welcome the player to the game */ X } X X drawscreen(); /* show the initial dungeon */ X X /* tell the trap functions that they must do a showplayer() X from here on */ X predostuff = 2; X X yrepcount = hit2flag = 0; X /* X * M A I N L O O P X */ X while (1) { X if (dropflag==0) X lookforobject(); /* see if there is an object here*/ X else X dropflag=0; /* don't show it just dropped an item */ X X if (hitflag==0) { X if (c[HASTEMONST]) X movemonst(); X movemonst(); X } /* move the monsters */ X X if (viewflag==0) X showcell(playerx,playery); X else viewflag=0; /* show stuff around player */ X X if (hit3flag) X flushall(); X hitflag = hit3flag = 0; X nomove=1; X bot_linex(); /* update bottom line */ X X while (nomove)/* get commands and make moves */ X { X if (hit3flag) X flushall(); X nomove=0; X parse(); X } X X regen(); /* regenerate hp and spells*/ X X if (c[TIMESTOP]==0) X if (--rmst <= 0) { X rmst = 120-(level<<2); X fillmonst(makemonst(level)); X } X } /* end main loop */ X} /* end main */ X X/* X showstr() X X show character's inventory X */ Xshowstr() X{ X register int i,number; X X for (number=3, i=0; i<26; i++) X if (iven[i]) number++; /* count items in inventory */ X t_setup(number); X qshowstr(); X t_endup(number); X} X Xqshowstr() X{ X register int k,sigsav; X X srcount=0; X sigsav=nosignal; X nosignal=1; /* don't allow ^c etc */ X if (c[GOLD]) { X lprintf(".) %d gold pieces",(long)c[GOLD]); X srcount++; X } X X for (k=0; k<=26; k++) X if (iven[k]) show3(k); X X lprintf("\nElapsed time is %d. You have %d mobuls left", X (long)((gtime+99)/100+1),(long)((TIMELIMIT-gtime)/100)); X more(); X nosignal=sigsav; X} X X/* X * subroutine to clear screen depending on # lines to display X */ Xt_setup(count) Xregister int count; X{ X if (count<20) { X cl_up(79,count); X cursor(1,1); X } X else { X resetscroll(); X clear(); X } X} X X/* X * subroutine to restore normal display screen depending on t_setup() X */ Xt_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 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; X X sigsav=nosignal; X nosignal=1; /* don't allow ^c etc */ X srcount=0; X X /* count number of items we will display */ X for (count=2,j=0; j<=26; j++) X if (i=iven[j]) X switch(i) { X case OLEATHER: X case OPLATE: X case OCHAIN: X case ORING: X case OSTUDLEATHER: X case OSPLINT: X case OPLATEARMOR: X case OSSPLATE: X case OSHIELD: X case OELVENCHAIN: X count++; X }; X X t_setup(count); X X for (i=22; i<93; i++) X for (j=0; j<=26; j++) X if (i==iven[j]) X switch(i) { X case OLEATHER: X case OPLATE: X case OCHAIN: X case ORING: X case OSTUDLEATHER: X case OSPLINT: X case OPLATEARMOR: X case OSSPLATE: X case OSHIELD: X case OELVENCHAIN: X show3(j); X }; X more(); X nosignal=sigsav; X t_endup(count); X} X X/* X function to show the things player can wield only X */ Xshowwield() X{ X register int i,j,sigsav,count; X sigsav=nosignal; nosignal=1; /* don't allow ^c etc */ X srcount=0; X X for (count=2,j=0; j<=26; j++) /* count how many items */ X if (i=iven[j]) X switch(i) { X case ODIAMOND: case ORUBY: case OEMERALD: X case OSAPPHIRE: X case OBOOK: case OCHEST: case OLARNEYE: X case ONOTHEFT: X case OSPIRITSCARAB: case OCUBEofUNDEAD: X case OPOTION: X case OORB: X case OHANDofFEAR: X case OBRASSLAMP: X case OURN: X case OWWAND: X case OSPHTALISMAN: X case OSCROLL: break; X default: count++; X }; X X t_setup(count); X X for (i=22; i<93; i++) X for (j=0; j<=26; j++) X if (i==iven[j]) X switch(i) { X case ODIAMOND: case ORUBY: X case OEMERALD: case OSAPPHIRE: X case OBOOK: case OCHEST: X case OLARNEYE: case ONOTHEFT: X case OSPIRITSCARAB: case OCUBEofUNDEAD: X case OPOTION: case OHANDofFEAR: X case OBRASSLAMP: case OURN: X case OSPHTALISMAN: X case OWWAND: X case OORB: case OSCROLL: break; X default: show3(j); X }; X more(); X nosignal=sigsav; X t_endup(count); X } X X/* X * function to show the things player can read only X */ Xshowread() X { X register int i,j,sigsav,count; X sigsav=nosignal; nosignal=1; /* don't allow ^c etc */ X srcount=0; X X for (count=2,j=0; j<=26; j++) X switch(iven[j]) { X case OBOOK: X case OSCROLL: X count++; X }; X t_setup(count); X X for (i=22; i<84; i++) X for (j=0; j<=26; j++) X if (i==iven[j]) X switch(i) { X case OBOOK: X case OSCROLL: X show3(j); X }; X more(); X nosignal=sigsav; X t_endup(count); X } X X/* X * function to show the things player can eat only X */ Xshoweat() X{ X register int i,j,sigsav,count; X X sigsav=nosignal; X nosignal=1; /* don't allow ^c etc */ X srcount=0; X X for (count=2,j=0; j<=26; j++) X switch(iven[j]) { X case OCOOKIE: X count++; X }; X t_setup(count); X X for (i=22; i<84; i++) X for (j=0; j<=26; j++) X if (i==iven[j]) X switch(i) { X case OCOOKIE: X show3(j); X }; X more(); X nosignal=sigsav; X t_endup(count); X } X X/* X function to show the things player can quaff only X */ Xshowquaff() X{ X register int i,j,sigsav,count; X X sigsav=nosignal; X nosignal=1; /* don't allow ^c etc */ X srcount=0; X X for (count=2,j=0; j<=26; j++) X switch(iven[j]) { X case OPOTION: X count++; X }; X t_setup(count); X X for (i=22; i<84; i++) X for (j=0; j<=26; j++) X if (i==iven[j]) X switch(i) { X case OPOTION: X show3(j); X }; X more(); X nosignal=sigsav; X t_endup(count); X} X Xshow1(idx,str2) Xregister int idx; Xregister char *str2[]; X{ X if (str2==0) X lprintf("\n%c) %s",idx+'a',objectname[iven[idx]]); X else if (*str2[ivenarg[idx]]==0) X lprintf("\n%c) %s",idx+'a',objectname[iven[idx]]); X else X lprintf("\n%c) %s of%s", X idx+'a',objectname[iven[idx]],str2[ivenarg[idx]]); X} X Xshow3(index) Xregister int index; X{ X switch(iven[index]) { X case OPOTION: show1(index,potionname); break; X case OSCROLL: show1(index,scrollname); break; X case OLARNEYE: X case OBOOK: X case OSPIRITSCARAB: X case ODIAMOND: X case ORUBY: X case OCUBEofUNDEAD: X case OEMERALD: X case OCHEST: X case OCOOKIE: X case OSAPPHIRE: X case OORB: X case OHANDofFEAR: X case OBRASSLAMP: X case OURN: X case OWWAND: X case OSPHTALISMAN: X case ONOTHEFT: show1(index,(char **)0); break; X X default: X lprintf("\n%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) X lprcat(" (weapon in hand)"); X if ((c[WEAR]==index) || (c[SHIELD]==index)) X lprcat(" (being worn)"); X if (++srcount>=22) { X srcount=0; X more(); X clear(); X } X} X X/* X subroutine to randomly create monsters if needed X */ Xrandmonst() X{ /* don't make monsters if time is stopped */ X if (c[TIMESTOP]) return; X if (--rmst <= 0) { X rmst = 120 - (level<<2); X fillmonst(makemonst(level)); X } X} X X X/* X parse() X X get and execute a command X */ Xparse() X{ X register int i,j,k,flag; X while (1) { X k = yylex(); X /* get the token from the input and switch on it */ X switch(k) { X case 'A': if (wizard) X diag(); X yrepcount=0; X return; X case 'h': moveplayer(4); X return; /* west */ X case 'H': run(4); X return; /* west */ X case 'l': moveplayer(2); X return; /* east */ X case 'L': run(2); X return; /* east */ X case 'j': moveplayer(1); X return; /* south */ X case 'J': run(1); X return; /* south */ X case 'k': moveplayer(3); X return; /* north */ X case 'K': run(3); X return; /* north */ X case 'u': moveplayer(5); X return; /* northeast */ X case 'U': run(5); X return; /* northeast */ X case 'y': moveplayer(6); X return; /* northwest */ X case 'Y': run(6); X return; /* northwest */ X case 'n': moveplayer(7); X return; /* southeast */ X case 'N': run(7); X return; /* southeast */ X case 'b': moveplayer(8); X return; /* southwest */ X case 'B': run(8); X return; /* southwest */ X X case '.': if (yrepcount) X viewflag=1; X return; /* stay here */ X X case 'w': yrepcount=0; X wield(); X return; /* wield a weapon */ X X case 'W': yrepcount=0; X wear(); X return; /* wear armor */ X X case 'r': yrepcount=0; X if (c[BLINDCOUNT]) { X cursors(); X lprcat("\nYou can't read anything when you're blind!"); X } else if (c[TIMESTOP]==0) X readscr(); X return; /* to read a scroll */ X X case 'q': yrepcount=0; X if (c[TIMESTOP]==0) X quaff(); X return; /* quaff a potion */ X X case 'd': yrepcount=0; X if (c[TIMESTOP]==0) X dropobj(); X return; /* to drop an object */ X X case 'c': yrepcount=0; X cast(); X return; /* cast a spell */ X X case 'i': yrepcount=0; X nomove=1; X showstr(); X return; /* status */ X X case 'e': yrepcount=0; X if (c[TIMESTOP]==0) X eatcookie(); X return; /* to eat a fortune cookie */ X X case 'D': yrepcount=0; X seemagic(0); X nomove=1; X return; /*list spells and scrolls */ X X case '?': yrepcount=0; X help(); X nomove=1; X return; /*give the help screen*/ X X case 'S': clear(); X lprcat("Saving . . ."); X lflush(); X savegame(savefilename); X wizard=1; X died(-257); X /* save the game - X doesn't return */ X X case 'Z': yrepcount=0; X if (wizard) { X int t; X cursors(); X lprcat("\nWhich level do you wish to teleport to? "); X t = readnum(20); X if (t > 20 || t < 0) { X lprcat(" sorry!"); X return; X } X playerx = rnd(MAXX-2); X playery = rnd(MAXY-2); X newcavelevel(t); X positionplayer(); X draws(0,MAXX,0,MAXY); X bot_linex(); X return; X } X if (c[LEVEL]>9) { X oteleport(1); X return; X } X cursors(); X lprcat("\nYou don't know how to teleport yet"); X return; /* teleport yourself */ X X case '^': /* identify traps */ X flag=yrepcount=0; X cursors(); X lprc('\n'); X for (j=playery-1; j<playery+2; j++) { X if (j < 0) j=0; X if (j >= MAXY) break; X for (i=playerx-1; i<playerx+2; i++) { X if (i < 0) i=0; X if (i >= MAXX) break; X switch(item[i][j]) { X case OTRAPDOOR: X case ODARTRAP: X case OTRAPARROW: X case OTELEPORTER: X case OELEVATORUP: X case OELEVATORDOWN: X lprcat("\nIt's "); X lprcat(objectname[item[i][j]]); X flag++; X }; X } X } X if (flag==0) X lprcat("\nNo traps are visible"); X return; X X case '#': X yrepcount=0; X cursors(); X nomove=1; X if (getpassword()==0) { X scbr(); X return; X } X scbr(); X raiseexperience(370 * 1000000); X bottomline(); X drawscreen(); X return; X X#if WIZID X case '_': /*this is the fudge player password X for wizard mode*/ X yrepcount=0; X cursors(); X nomove=1; X if (getpassword()==0) { X scbr(); X return; X } X wizard=1; X scbr(); X for (i=0; i<6; i++) X c[i]=70; X iven[0]=iven[1]=0; X take(OPROTRING,50); X take(OLANCE,25); X for (i=0; i<26; i++) X if (iven[i]==OLANCE && ivenarg[i]==25) { X c[WIELD]=i; X break; X } X c[LANCEDEATH]=1; X c[WEAR] = c[SHIELD] = -1; X raiseexperience(370*1000000); X c[AWARENESS] += 25000; X { X register int i,j; X for (i=0; i<MAXY; i++) X for (j=0; j<MAXX; j++) X know[j][i]=1; X for (i=0; i<SPNUM; i++) X spelknow[i]=1; X for (i=0; i<MAXSCROLL; i++) X scrollname[i][0]=' '; X for (i=0; i<MAXPOTION; i++) X potionname[i][0]=' '; X } X for (i=0; i<MAXSCROLL; i++) X if (strlen(scrollname[i])>2) X { item[i][0]=OSCROLL; X iarg[i][0]=i; X } X for (i=MAXX-1; i>MAXX-1-MAXPOTION; i--) X if (strlen(potionname[i-MAXX+MAXPOTION])>2) X /* no null items */ X { item[i][0]=OPOTION; X iarg[i][0]=i-MAXX+MAXPOTION; X } X for (i=1; i<MAXY; i++) X { item[0][i]=i; X iarg[0][i]=0; X } X for (i=MAXY; i<MAXY+MAXX; i++) X { item[i-MAXY][MAXY-1]=i; X iarg[i-MAXY][MAXY-1]=0; X } X for (i=MAXX+MAXY; i<MAXX+MAXY+MAXY; i++) X { item[MAXX-1][i-MAXX-MAXY]=i; X iarg[MAXX-1][i-MAXX-MAXY]=0; X } X c[GOLD]+=250000; X bottomline(); X drawscreen(); X return; X#endif /* WIZID */ X X case 'T': yrepcount=0; X cursors(); X if (c[SHIELD] != -1) { X c[SHIELD] = -1; X lprcat("\nYour shield is off"); X bottomline(); X } else X if (c[WEAR] != -1) { X c[WEAR] = -1; X lprcat("\nYour armor is off"); X bottomline(); X } X else lprcat("\nYou aren't wearing anything"); X return; X X case 'g': cursors(); X lprintf("\nThe stuff you are carrying presently weighs %d pounds", X (long)packweight()); X X case ' ': yrepcount=0; X nomove=1; X return; X X case 'v': yrepcount=0; X cursors(); Xlprintf( "\nThe Addiction of Ularn, by Satyr. Difficulty : %d", X (long)c[HARDGAME]); X if (wizard) lprcat(" (WIZARD)"); X nomove=1; X if (cheat) lprcat(" (Cheater)"); X lprcat(copyright); X return; X X case 'Q': yrepcount=0; X quit(); X nomove=1; X return; /* quit */ X X case 'L'-64: yrepcount=0; X drawscreen(); X nomove=1; X return; /* look */ X X case 'P': cursors(); X if (outstanding_taxes>0) X lprintf("\nYou presently owe %d gp in taxes.",(long)outstanding_taxes); X else X lprcat("\nYou do not owe any taxes."); X return; X }; X } X} X Xparse2() X{ X if (c[HASTEMONST]) X movemonst(); X movemonst(); /* move the monsters */ X randmonst(); X regen(); X} X Xrun(dir) Xint dir; X{ X register int i; X i=1; X while (i) { X i=moveplayer(dir); X if (i>0) { X if (c[HASTEMONST]) X movemonst(); X movemonst(); X randmonst(); X regen(); X } X if (hitflag) i=0; X if (i!=0) X showcell(playerx,playery); X } X} X X/* X function to wield a weapon X */ Xwield() X{ X register int i; X X while (1) { X if ((i = whatitem("wield"))=='\33') return; X if (i != '.') { X if (i=='*') showwield(); X else if (iven[i-'a']==0) { ydhi(i); return; } X else if (iven[i-'a']==OPOTION) { ycwi(i); return; } X else if (iven[i-'a']==OSCROLL) { ycwi(i); return; } X else if ((c[SHIELD]!= -1) && (iven[i-'a']==O2SWORD)) { X lprcat("\nBut one arm is busy with your shield!"); X return; X } X else { X c[WIELD]=i-'a'; X if (iven[i-'a'] == OLANCE) c[LANCEDEATH]=1; X else c[LANCEDEATH]=0; X bottomline(); X return; X } X } X } X} X X/* X common routine to say you don't have an item X */ Xydhi(x) Xint x; X{ cursors(); lprintf("\nYou don't have item %c!",x); } X Xycwi(x) Xint x; X{ cursors(); lprintf("\nYou can't wield item %c!",x); } X X/* X function to wear armor X */ Xwear() X{ X register int i; X while (1) { X if ((i = whatitem("wear"))=='\33') return; X if (i != '.') { X if (i=='*') showwear(); else X switch(iven[i-'a']) { X case 0: ydhi(i); return; X case OLEATHER: X case OCHAIN: X case OPLATE: X case OSTUDLEATHER: X case ORING: X case OSPLINT: X case OPLATEARMOR: X case OELVENCHAIN: X case OSSPLATE: X if (c[WEAR] != -1) { X lprcat("\nYou're already wearing some armor"); X return; } X c[WEAR]=i-'a'; X bottomline(); X return; X X case OSHIELD: X if (c[SHIELD] != -1) { X lprcat("\nYou are already wearing a shield"); X return; X } X if (iven[c[WIELD]]==O2SWORD) { X lprcat("\nYour hands are busy with the two handed sword!"); X return; X } X c[SHIELD] = i-'a'; bottomline(); return; X X default: lprcat("\nYou can't wear that!"); X }; X } X } X} X X/* X function to drop an object X */ Xdropobj() X{ X register int i; X register char *p; X long amt; X X p = &item[playerx][playery]; X while (1) { X if ((i = whatitem("drop"))=='\33') return; X if (i=='*') X showstr(); X else { X /* drop some gold */ X if (i=='.') { X if (*p) { X lprcat("\nThere's something here already!"); X return; X } X lprcat("\n\n"); X cl_dn(1,23); X lprcat("How much gold do you drop? "); X if ((amt=readnum((long)c[GOLD])) == 0) return; X if (amt>c[GOLD]) { X lprcat("\nYou don't have that much!"); X return; X } X if (amt<=32767) { X *p=OGOLDPILE; X i=amt; X } X else if (amt<=327670L) { X *p=ODGOLD; X i=amt/10; X amt = 10*i; X } X else if (amt<=3276700L) { X *p=OMAXGOLD; X i=amt/100; X amt = 100*i; X } X else if (amt<=32767000L) { X *p=OKGOLD; X i=amt/1000; X amt = 1000*i; X } X else { X *p=OKGOLD; X i=32767; X amt = 32767000L; X } X c[GOLD] -= amt; X lprintf("You drop %d gold pieces",(long)amt); X iarg[playerx][playery]=i; X bottomgold(); X know[playerx][playery]=0; X dropflag=1; X return; X } X drop_object(i-'a'); X return; X } X } X} X X/* X * readscr() Subroutine to read a scroll one is carrying X */ Xreadscr() X { X register int i; X while (1) { X if ((i = whatitem("read"))=='\33') return; X if (i != '.') { X if (i=='*') showread(); else { X if (iven[i-'a']==OSCROLL) { read_scroll(ivenarg[i-'a']); iven[i-'a']=0; return; } X if (iven[i-'a']==OBOOK) { readbook(ivenarg[i-'a']); iven[i-'a']=0; return; } X if (iven[i-'a']==0) { ydhi(i); return; } X lprcat("\nThere's nothing on it to read"); return; X } X } X } X } X X/* X * subroutine to eat a cookie one is carrying X */ Xeatcookie() X{ X register int i; X char *p; X X while (1) { X if ((i = whatitem("eat"))=='\33') X return; X if (i != '.') X if (i=='*') showeat(); else { X if (iven[i-'a']==OCOOKIE) { X lprcat("\nThe cookie was delicious."); X iven[i-'a']=0; X if (!c[BLINDCOUNT]) { X if (p=fortune(fortfile)) { X lprcat(" Inside you find a scrap of paper that says:\n"); X lprcat(p); X } X } X return; X } X if (iven[i-'a']==0) { ydhi(i); return; } X lprcat("\nYou can't eat that!"); return; X } X } X} X X/* X * subroutine to quaff a potion one is carrying X */ Xquaff() X{ X register int i; X X while (1) { X if ((i = qwhatitem())=='\33') return; X if (i != '.') { X if (i=='*') showquaff(); X else { X if (iven[i-'a']==OPOTION) { X quaffpotion(ivenarg[i-'a']); X iven[i-'a']=0; X return; X } X if (iven[i-'a']==0) { ydhi(i); return; } X lprcat("\nYou wouldn't want to quaff that, would you? "); X return; X } X } X } X} X Xqwhatitem() X{ X int j, i=0; X char gack[26]; X X cursors(); X for (j=0; j<=26; j++) X switch(iven[j]) { X case OPOTION: gack[i++] = j; X }; X lprintf("\nWhat do you want to quaff ["); X if (i) X for (j=0;j<i;j++) X lprintf("%c",gack[j] + 'a'); X lprintf(" * for all] ?"); X i=0; X while (i>'z' || (i<'a' && i!='*' && i!='\33' && i!='.')) X i=getcharacter(); X if (i=='\33') X lprcat(" aborted"); X return(i); X} X X/* X function to ask what player wants to do X */ Xwhatitem(str) Xchar *str; X{ X register int j=0, flag=0, i=0; X int wld=0, q=0, r=0, w=0, e=0, d=0; X char gack[26]; X X cursors(); X if (!strcmp(str, "wield")) wld = 1; X else if (!strcmp(str, "quaff")) q = 1; X else if (!strcmp(str, "read")) r = 1; X else if (!strcmp(str, "wear")) w = 1; X else if (!strcmp(str, "eat")) e = 1; X else if (!strcmp(str, "drop")) d = 1; X X for (j=0; j<=26; j++) { X switch(iven[j]) { X case OSWORDofSLASHING : X case OHAMMER: X case OSWORD: X case O2SWORD: X case OSPEAR : X case ODAGGER: X case OBATTLEAXE: X case OLONGSWORD: X case OFLAIL: X case OSLAYER : X case OLANCE : X flag = 1; break; /* wield */ X case OPOTION: X flag = 2; break; /* quaff */ X case OSCROLL: X flag = 3; break; /* read */ X case OPLATE : X case OCHAIN: X case OLEATHER : X case ORING : X case OSTUDLEATHER : X case OSPLINT : X case OPLATEARMOR : X case OSSPLATE : X case OSHIELD : X case OELVENCHAIN : X flag = 4; break; /* wear */ X case OCOOKIE: X flag = 5; break; /* eat */ X default : flag = 0; break; X } X if (!d) switch (flag) { X case 0 : break; X case 1 : if (wld) gack[i++] = j; X break; X case 2 : if (q) gack[i++] = j; X break; X case 3 : if (r) gack[i++] = j; X break; X case 4 : if (w) gack[i++] = j; X break; X case 5 : if (e) gack[i++] = j; X default : break; X } X else if (iven[j]) gack[i++] = j; X } X lprintf("\nWhat do you want to %s [", str); X if (i) { X for (j=0;j<i;j++) X lprintf("%c",gack[j] + 'a'); X lprintf(" "); X } X lprintf("* for all] ?"); X i=0; X while (i>'z' || (i<'a' && i!='*' && i!='\33' && i!='.')) X i=getcharacter(); X if (i=='\33') X lprcat(" aborted"); X return(i); X} X X X X/* X subroutine to get a number from the player X and allow * to mean return amt, else return the number entered X */ Xlong readnum(mx) Xlong mx; X{ X register int i; X long amt=0; X X sncbr(); X if ((i=getcharacter()) == '*') X amt = mx; /* allow him to say * for all gold */ X else while (i != '\n') { X if (i=='\033') { scbr(); lprcat(" aborted"); return(0); } X if ((i <= '9') && (i >= '0') && (amt<999999999)) X amt = amt*10+i-'0'; X i = getcharacter(); X } X scbr(); X return(amt); X} END_OF_FILE if test 26141 -ne `wc -c <'main.c'`; then echo shar: \"'main.c'\" unpacked with wrong size! fi # end of 'main.c' fi echo shar: End of archive 5 \(of 8\). cp /dev/null ark5isdone MISSING="" for I in 1 2 3 4 5 6 7 8 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 8 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0