if ((ptr = getenv("USER")) == 0) if ((ptr = getenv("LOGNAME")) == 0)
if ((ptr = getenv("LOGNAME")) == 0) if ((ptr = getenv("USER")) == 0)
main(argc,argv)	int argc;	char **argv;	{	register int i,j;	int hard;	char *ptr=0,*ttype;	struct passwd *pwe;	euid = geteuid();	uid = getuid();	seteuid(uid);	/* give up "games" if we have it *//* *	first task is to identify the player */#ifndef VT100	init_term();	/* setup the terminal (find out what type) for termcap */#endif VT100	if (((ptr = getlogin()) == 0) || (*ptr==0))	/* try to get login name */	  if (pwe=getpwuid(getuid())) /* can we get it from /etc/passwd? */		ptr = pwe->pw_name;	  else	  if ((ptr = getenv("USER")) == 0)		if ((ptr = getenv("LOGNAME")) == 0)		  {		  noone: write(2, "Can't find your logname.  Who Are You?\n",39);		 		 exit();		  }	if (ptr==0) goto noone;	if (strlen(ptr)==0) goto noone;/* *	second task is to prepare the pathnames the player will need */	strcpy(loginname,ptr); /* save loginname of the user for logging purposes */	strcpy(logname,ptr);	/* this will be overwritten with the players name */	if ((ptr = getenv("HOME")) == 0) ptr = ".";	strcpy(savefilename, ptr);	strcat(savefilename, "/Larn.sav");	/* save file name in home directory */	sprintf(optsfile, "%s/.larnopts",ptr);	/* the .larnopts filename *//* *	now malloc the memory for the dungeon  */	cell = (struct cel *)malloc(sizeof(struct cel)*(MAXLEVEL+MAXVLEVEL)*MAXX*MAXY);	if (cell == 0) died(-285);	/* malloc failure */	lpbuf    = malloc((5* BUFBIG)>>2);	/* output buffer */	inbuffer = malloc((5*MAXIBUF)>>2);	/* output buffer */	if ((lpbuf==0) || (inbuffer==0)) died(-285); /* malloc() failure */	lcreat((char*)0);	newgame();		/*	set the initial clock  */ hard= -1;#ifdef VT100/* *	check terminal type to avoid users who have not vt100 type terminals */	ttype = getenv("TERM");	for (j=1, i=0; i<sizeof(termtypes)/sizeof(char *); i++)		if (strcmp(ttype,termtypes[i]) == 0) { j=0;  break; }	if (j)		{		lprcat("Sorry, Larn needs a VT100 family terminal for all it's features.\n"); lflush();		exit();		}#endif VT100/* *	now make scoreboard if it is not there (don't clear)  */	if (access(scorefile,0) == -1) /* not there */		makeboard();/* *	now process the command line arguments  */	for (i=1; i<argc; i++)		{		if (argv[i][0] == '-')		  switch(argv[i][1])			{			case 's': showscores();  exit();  /* show scoreboard   */			case 'l': /* show log file     */						diedlog();		exit();			case 'i': showallscores();  exit();  /* show all scoreboard */			case 'c': 		 /* anyone with password can create scoreboard */					  lprcat("Preparing to initialize the scoreboard.\n");					  if (getpassword() != 0)  /*make new scoreboard*/							{							makeboard(); lprc('\n'); showscores();							}					  exit();			case 'n':	/* no welcome msg	*/ nowelcome=1; argv[i][0]=0; break;			case '0': case '1': case '2': case '3': case '4': case '5':			case '6': case '7': case '8': case '9':	/* for hardness */						sscanf(&argv[i][1],"%d",&hard);							break;			case 'h':	/* print out command line arguments */						write(1,cmdhelp,sizeof(cmdhelp));  exit();			case 'o':	/* specify a .larnopts filename */						strncpy(optsfile,argv[i]+2,127);  break;			default:	printf("Unknown option <%s>\n",argv[i]);  exit();			};		if (argv[i][0] == '+')			{			clear();	restorflag = 1;			if (argv[i][1] == '+')				{				hitflag=1; restoregame(ckpfile); /* restore checkpointed game */				}			i = argc;			}		}	readopts();		/* read the options file if there is one */#ifdef UIDSCORE	userid = geteuid();	/* obtain the user's effective id number */#else UIDSCORE	userid = getplid(logname);	/* obtain the players id number */#endif UIDSCORE	if (userid < 0) { write(2,"Can't obtain playerid\n",22); exit(); }#ifdef HIDEBYLINK/* *	this section of code causes the program to look like something else to ps */	if (strcmp(psname,argv[0])) /* if a different process name only */		{		if ((i=access(psname,1)) < 0)			{		/* link not there */			if (link(argv[0],psname)>=0)				{				argv[0] = psname;   execv(psname,argv);				}			}		else 			unlink(psname);		}	for (i=1; i<argc; i++)		{		szero(argv[i]);	/* zero the argument to avoid ps snooping */		}#endif HIDEBYLINK	if (access(savefilename,0)==0)	/* restore game if need to */		{		clear();	restorflag = 1;		hitflag=1;	restoregame(savefilename);  /* restore last game	*/		}	sigsetup();		/* trap all needed signals	*/	sethard(hard);	/* set up the desired difficulty				*/	setupvt100();	/*	setup the terminal special mode				*/	if (c[HP]==0)	/* create new game */		{		makeplayer();	/*	make the character that will play			*/		newcavelevel(0);/*	make the dungeon						 	*/		predostuff = 1;	/* tell signals that we are in the welcome screen */		if (nowelcome==0) welcome();	 /* welcome the player to the game */		}	drawscreen();	/*	show the initial dungeon					*/	predostuff = 2;	/* tell the trap functions that they must do a showplayer()						from here on */	/* nice(1); */	/* games should be run niced */	yrepcount = hit2flag = 0;	while (1)		{		if (dropflag==0) lookforobject(); /* see if there is an object here	*/			else dropflag=0; /* don't show it just dropped an item */		if (hitflag==0) { if (c[HASTEMONST]) movemonst(); movemonst(); }	/*	move the monsters		*/		if (viewflag==0) showcell(playerx,playery); else viewflag=0;	/*	show stuff around player	*/		if (hit3flag) flushall();		hitflag=hit3flag=0;	nomove=1;		bot_linex();	/* update bottom line */		while (nomove)			{			if (hit3flag) flushall();			nomove=0; parse();			}	/*	get commands and make moves	*/		regen();			/*	regenerate hp and spells			*/		if (c[TIMESTOP]==0)			if (--rmst <= 0)				{ rmst = 120-(level<<2); fillmonst(makemonst(level)); }		}	}