mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-11-03 19:11:34 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			111 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * main.c - the main() function
 | 
						|
 *
 | 
						|
 * This file is part of zsh, the Z shell.
 | 
						|
 *
 | 
						|
 * Copyright (c) 1992-1997 Paul Falstad
 | 
						|
 * All rights reserved.
 | 
						|
 *
 | 
						|
 * Permission is hereby granted, without written agreement and without
 | 
						|
 * license or royalty fees, to use, copy, modify, and distribute this
 | 
						|
 * software and to distribute modified versions of this software for any
 | 
						|
 * purpose, provided that the above copyright notice and the following
 | 
						|
 * two paragraphs appear in all copies of this software.
 | 
						|
 *
 | 
						|
 * In no event shall Paul Falstad or the Zsh Development Group be liable
 | 
						|
 * to any party for direct, indirect, special, incidental, or consequential
 | 
						|
 * damages arising out of the use of this software and its documentation,
 | 
						|
 * even if Paul Falstad and the Zsh Development Group have been advised of
 | 
						|
 * the possibility of such damage.
 | 
						|
 *
 | 
						|
 * Paul Falstad and the Zsh Development Group specifically disclaim any
 | 
						|
 * warranties, including, but not limited to, the implied warranties of
 | 
						|
 * merchantability and fitness for a particular purpose.  The software
 | 
						|
 * provided hereunder is on an "as is" basis, and Paul Falstad and the
 | 
						|
 * Zsh Development Group have no obligation to provide maintenance,
 | 
						|
 * support, updates, enhancements, or modifications.
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
#include "zsh.mdh"
 | 
						|
#include "main.pro"
 | 
						|
 | 
						|
/**/
 | 
						|
int
 | 
						|
main(int argc, char **argv)
 | 
						|
{
 | 
						|
    char **t;
 | 
						|
#ifdef USE_LOCALE
 | 
						|
    setlocale(LC_ALL, "");
 | 
						|
#endif
 | 
						|
 | 
						|
    global_permalloc();
 | 
						|
 | 
						|
    init_hackzero(argv, environ);
 | 
						|
 | 
						|
    for (t = argv; *t; *t = metafy(*t, -1, META_ALLOC), t++);
 | 
						|
 | 
						|
    zsh_name = argv[0];
 | 
						|
    do {
 | 
						|
      char *arg0 = zsh_name;
 | 
						|
      if (!(zsh_name = strrchr(arg0, '/')))
 | 
						|
	  zsh_name = arg0;
 | 
						|
      else
 | 
						|
	  zsh_name++;
 | 
						|
      if (*zsh_name == '-')
 | 
						|
	  zsh_name++;
 | 
						|
      if (strcmp(zsh_name, "su") == 0) {
 | 
						|
	  char *sh = zgetenv("SHELL");
 | 
						|
	  if (sh && *sh && arg0 != sh)
 | 
						|
	      zsh_name = sh;
 | 
						|
	  else
 | 
						|
	      break;
 | 
						|
      } else
 | 
						|
	  break;
 | 
						|
    } while (zsh_name);
 | 
						|
 | 
						|
    fdtable_size = OPEN_MAX;
 | 
						|
    fdtable = zcalloc(fdtable_size);
 | 
						|
 | 
						|
    createoptiontable();
 | 
						|
    emulate(zsh_name, 1);   /* initialises most options */
 | 
						|
    opts[LOGINSHELL] = (**argv == '-');
 | 
						|
    opts[MONITOR] = 1;   /* may be unset in init_io() */
 | 
						|
    opts[PRIVILEGED] = (getuid() != geteuid() || getgid() != getegid());
 | 
						|
    opts[USEZLE] = 1;   /* may be unset in init_io() */
 | 
						|
    parseargs(argv);   /* sets INTERACTIVE, SHINSTDIN and SINGLECOMMAND */
 | 
						|
 | 
						|
    SHTTY = -1;
 | 
						|
    init_io();
 | 
						|
    setupvals();
 | 
						|
    init_signals();
 | 
						|
    global_heapalloc();
 | 
						|
    init_bltinmods();
 | 
						|
    run_init_scripts();
 | 
						|
    init_misc();
 | 
						|
 | 
						|
    for (;;) {
 | 
						|
	do
 | 
						|
	    loop(1,0);
 | 
						|
	while (tok != ENDINPUT && (tok != LEXERR || isset(SHINSTDIN)));
 | 
						|
	if (tok == LEXERR) {
 | 
						|
	    stopmsg = 1;
 | 
						|
	    zexit(lastval, 0);
 | 
						|
	}
 | 
						|
	if (!(isset(IGNOREEOF) && interact)) {
 | 
						|
#if 0
 | 
						|
	    if (interact)
 | 
						|
		fputs(islogin ? "logout\n" : "exit\n", shout);
 | 
						|
#endif
 | 
						|
	    zexit(lastval, 0);
 | 
						|
	    continue;
 | 
						|
	}
 | 
						|
	noexitct++;
 | 
						|
	if (noexitct >= 10) {
 | 
						|
	    stopmsg = 1;
 | 
						|
	    zexit(lastval, 0);
 | 
						|
	}
 | 
						|
	zerrnam("zsh", (!islogin) ? "use 'exit' to exit."
 | 
						|
		: "use 'logout' to logout.", NULL, 0);
 | 
						|
    }
 | 
						|
}
 |