Esempio n. 1
0
static int
main_init(int argc, const char *argv[], Source **sp, struct block **lp)
{
	int argi, i;
	Source *s = NULL;
	struct block *l;
	unsigned char restricted_shell, errexit, utf_flag;
	char *cp;
	const char *ccp, **wp;
	struct tbl *vp;
	struct stat s_stdin;
#if !defined(_PATH_DEFPATH) && defined(_CS_PATH)
	ssize_t k;
#endif

#if defined(MKSH_EBCDIC) || defined(MKSH_FAUX_EBCDIC)
	ebcdic_init();
#endif
	set_ifs(TC_IFSWS);

#ifdef __OS2__
	os2_init(&argc, &argv);
#endif

	/* do things like getpgrp() et al. */
	chvt_reinit();

	/* make sure argv[] is sane, for weird OSes */
	if (!*argv) {
		argv = empty_argv;
		argc = 1;
	}
	kshname = argv[0];

	/* initialise permanent Area */
	ainit(&aperm);
	/* max. name length: -2147483648 = 11 (+ NUL) */
	vtemp = alloc(offsetof(struct tbl, name[0]) + 12, APERM);

	/* set up base environment */
	env.type = E_NONE;
	ainit(&env.area);
	/* set up global l->vars and l->funs */
	newblock();

	/* Do this first so output routines (eg, errorf, shellf) can work */
	initio();

	/* determine the basename (without '-' or path) of the executable */
	ccp = kshname;
	goto begin_parsing_kshname;
	while ((i = ccp[argi++])) {
		if (mksh_cdirsep(i)) {
			ccp += argi;
 begin_parsing_kshname:
			argi = 0;
			if (*ccp == '-')
				++ccp;
		}
	}
	if (!*ccp)
		ccp = empty_argv[0];

	/*
	 * Turn on nohup by default. (AT&T ksh does not have a nohup
	 * option - it always sends the hup).
	 */
	Flag(FNOHUP) = 1;

	/*
	 * Turn on brace expansion by default. AT&T kshs that have
	 * alternation always have it on.
	 */
	Flag(FBRACEEXPAND) = 1;

	/*
	 * Turn on "set -x" inheritance by default.
	 */
	Flag(FXTRACEREC) = 1;

	/* define built-in commands and see if we were called as one */
	ktinit(APERM, &builtins,
	    /* currently up to 54 builtins: 75% of 128 = 2^7 */
	    7);
	for (i = 0; mkshbuiltins[i].name != NULL; i++)
		if (!strcmp(ccp, builtin(mkshbuiltins[i].name,
		    mkshbuiltins[i].func)))
			Flag(FAS_BUILTIN) = 1;

	if (!Flag(FAS_BUILTIN)) {
		/* check for -T option early */
		argi = parse_args(argv, OF_FIRSTTIME, NULL);
		if (argi < 0)
			return (1);

#if defined(MKSH_BINSHPOSIX) || defined(MKSH_BINSHREDUCED)
		/* are we called as -sh or /bin/sh or so? */
		if (!strcmp(ccp, "sh" MKSH_EXE_EXT)) {
			/* either also turns off braceexpand */
#ifdef MKSH_BINSHPOSIX
			/* enable better POSIX conformance */
			change_flag(FPOSIX, OF_FIRSTTIME, true);
#endif
#ifdef MKSH_BINSHREDUCED
			/* enable kludge/compat mode */
			change_flag(FSH, OF_FIRSTTIME, true);
#endif
		}
#endif
	}

	initvar();

	inittraps();

	coproc_init();

	/* set up variable and command dictionaries */
	ktinit(APERM, &taliases, 0);
	ktinit(APERM, &aliases, 0);
#ifndef MKSH_NOPWNAM
	ktinit(APERM, &homedirs, 0);
#endif

	/* define shell keywords */
	initkeywords();

	init_histvec();

	/* initialise tty size before importing environment */
	change_winsz();

#ifdef _PATH_DEFPATH
	def_path = _PATH_DEFPATH;
#else
#ifdef _CS_PATH
	if ((k = confstr(_CS_PATH, NULL, 0)) > 0 &&
	    confstr(_CS_PATH, cp = alloc(k + 1, APERM), k + 1) == k + 1)
		def_path = cp;
	else
#endif
		/*
		 * this is uniform across all OSes unless it
		 * breaks somewhere hard; don't try to optimise,
		 * e.g. add stuff for Interix or remove /usr
		 * for HURD, because e.g. Debian GNU/HURD is
		 * "keeping a regular /usr"; this is supposed
		 * to be a sane 'basic' default PATH
		 */
		def_path = MKSH_UNIXROOT "/bin" MKSH_PATHSEPS
		    MKSH_UNIXROOT "/usr/bin" MKSH_PATHSEPS
		    MKSH_UNIXROOT "/sbin" MKSH_PATHSEPS
		    MKSH_UNIXROOT "/usr/sbin";
#endif

	/*
	 * Set PATH to def_path (will set the path global variable).
	 * (import of environment below will probably change this setting).
	 */
	vp = global(TPATH);
	/* setstr can't fail here */
	setstr(vp, def_path, KSH_RETURN_ERROR);

#ifndef MKSH_NO_CMDLINE_EDITING
	/*
	 * Set edit mode to emacs by default, may be overridden
	 * by the environment or the user. Also, we want tab completion
	 * on in vi by default.
	 */
	change_flag(FEMACS, OF_SPECIAL, true);
#if !MKSH_S_NOVI
	Flag(FVITABCOMPLETE) = 1;
#endif
#endif

	/* import environment */
	init_environ();

	/* override default PATH regardless of environment */
#ifdef MKSH_DEFPATH_OVERRIDE
	vp = global(TPATH);
	setstr(vp, MKSH_DEFPATH_OVERRIDE, KSH_RETURN_ERROR);
#endif

	/* for security */
	typeset(TinitIFS, 0, 0, 0, 0);

	/* assign default shell variable values */
	typeset("PATHSEP=" MKSH_PATHSEPS, 0, 0, 0, 0);
	substitute(initsubs, 0);

	/* Figure out the current working directory and set $PWD */
	vp = global(TPWD);
	cp = str_val(vp);
	/* Try to use existing $PWD if it is valid */
	set_current_wd((mksh_abspath(cp) && test_eval(NULL, TO_FILEQ, cp,
	    Tdot, true)) ? cp : NULL);
	if (current_wd[0])
		simplify_path(current_wd);
	/* Only set pwd if we know where we are or if it had a bogus value */
	if (current_wd[0] || *cp)
		/* setstr can't fail here */
		setstr(vp, current_wd, KSH_RETURN_ERROR);

	for (wp = initcoms; *wp != NULL; wp++) {
		c_builtin(wp);
		while (*wp != NULL)
			wp++;
	}
	setint_n(global("OPTIND"), 1, 10);

	kshuid = getuid();
	kshgid = getgid();
	kshegid = getegid();

	safe_prompt = ksheuid ? "$ " : "# ";
	vp = global("PS1");
	/* Set PS1 if unset or we are root and prompt doesn't contain a # */
	if (!(vp->flag & ISSET) ||
	    (!ksheuid && !strchr(str_val(vp), '#')))
		/* setstr can't fail here */
		setstr(vp, safe_prompt, KSH_RETURN_ERROR);
	setint_n((vp = global("BASHPID")), 0, 10);
	vp->flag |= INT_U;
	setint_n((vp = global("PGRP")), (mksh_uari_t)kshpgrp, 10);
	vp->flag |= INT_U;
	setint_n((vp = global("PPID")), (mksh_uari_t)kshppid, 10);
	vp->flag |= INT_U;
	setint_n((vp = global("USER_ID")), (mksh_uari_t)ksheuid, 10);
	vp->flag |= INT_U;
	setint_n((vp = global("KSHUID")), (mksh_uari_t)kshuid, 10);
	vp->flag |= INT_U;
	setint_n((vp = global("KSHEGID")), (mksh_uari_t)kshegid, 10);
	vp->flag |= INT_U;
	setint_n((vp = global("KSHGID")), (mksh_uari_t)kshgid, 10);
	vp->flag |= INT_U;
	setint_n((vp = global("RANDOM")), rndsetup(), 10);
	vp->flag |= INT_U;
	setint_n((vp_pipest = global("PIPESTATUS")), 0, 10);

	/* Set this before parsing arguments */
	Flag(FPRIVILEGED) = (kshuid != ksheuid || kshgid != kshegid) ? 2 : 0;

	/* this to note if monitor is set on command line (see below) */
#ifndef MKSH_UNEMPLOYED
	Flag(FMONITOR) = 127;
#endif
	/* this to note if utf-8 mode is set on command line (see below) */
	UTFMODE = 2;

	if (!Flag(FAS_BUILTIN)) {
		argi = parse_args(argv, OF_CMDLINE, NULL);
		if (argi < 0)
			return (1);
	}

	/* process this later only, default to off (hysterical raisins) */
	utf_flag = UTFMODE;
	UTFMODE = 0;

	if (Flag(FAS_BUILTIN)) {
		/* auto-detect from environment variables, always */
		utf_flag = 3;
	} else if (Flag(FCOMMAND)) {
		s = pushs(SSTRINGCMDLINE, ATEMP);
		if (!(s->start = s->str = argv[argi++]))
			errorf(Tf_optfoo, "", "", 'c', Treq_arg);
		while (*s->str) {
			if (ctype(*s->str, C_QUOTE))
				break;
			s->str++;
		}
		if (!*s->str)
			s->flags |= SF_MAYEXEC;
		s->str = s->start;
#ifdef MKSH_MIDNIGHTBSD01ASH_COMPAT
		/* compatibility to MidnightBSD 0.1 /bin/sh (kludge) */
		if (Flag(FSH) && argv[argi] && !strcmp(argv[argi], "--"))
			++argi;
#endif
		if (argv[argi])
			kshname = argv[argi++];
	} else if (argi < argc && !Flag(FSTDIN)) {
		s = pushs(SFILE, ATEMP);
#ifdef __OS2__
		/*
		 * A bug in OS/2 extproc (like shebang) handling makes
		 * it not pass the full pathname of a script, so we need
		 * to search for it. This changes the behaviour of a
		 * simple "mksh foo", but can't be helped.
		 */
		s->file = argv[argi++];
		if (search_access(s->file, X_OK) != 0)
			s->file = search_path(s->file, path, X_OK, NULL);
		if (!s->file || !*s->file)
			s->file = argv[argi - 1];
#else
		s->file = argv[argi++];
#endif
		s->u.shf = shf_open(s->file, O_RDONLY, 0,
		    SHF_MAPHI | SHF_CLEXEC);
		if (s->u.shf == NULL) {
			shl_stdout_ok = false;
			warningf(true, Tf_sD_s, s->file, cstrerror(errno));
			/* mandated by SUSv4 */
			exstat = 127;
			unwind(LERROR);
		}
		kshname = s->file;
	} else {
		Flag(FSTDIN) = 1;
		s = pushs(SSTDIN, ATEMP);
		s->file = "<stdin>";
		s->u.shf = shf_fdopen(0, SHF_RD | can_seek(0),
		    NULL);
		if (isatty(0) && isatty(2)) {
			Flag(FTALKING) = Flag(FTALKING_I) = 1;
			/* The following only if isatty(0) */
			s->flags |= SF_TTY;
			s->u.shf->flags |= SHF_INTERRUPT;
			s->file = NULL;
		}
	}

	/* this bizarreness is mandated by POSIX */
	if (fstat(0, &s_stdin) >= 0 && S_ISCHR(s_stdin.st_mode) &&
	    Flag(FTALKING))
		reset_nonblock(0);

	/* initialise job control */
	j_init();
	/* do this after j_init() which calls tty_init_state() */
	if (Flag(FTALKING)) {
		if (utf_flag == 2) {
#ifndef MKSH_ASSUME_UTF8
			/* auto-detect from locale or environment */
			utf_flag = 4;
#else /* this may not be an #elif */
#if MKSH_ASSUME_UTF8
			utf_flag = 1;
#else
			/* always disable UTF-8 (for interactive) */
			utf_flag = 0;
#endif
#endif
		}
#ifndef MKSH_NO_CMDLINE_EDITING
		x_init();
#endif
	}

#ifdef SIGWINCH
	sigtraps[SIGWINCH].flags |= TF_SHELL_USES;
	setsig(&sigtraps[SIGWINCH], x_sigwinch,
	    SS_RESTORE_ORIG|SS_FORCE|SS_SHTRAP);
#endif

	l = e->loc;
	if (Flag(FAS_BUILTIN)) {
		l->argc = argc;
		l->argv = argv;
		l->argv[0] = ccp;
	} else {
		l->argc = argc - argi;
		/*
		 * allocate a new array because otherwise, when we modify
		 * it in-place, ps(1) output changes; the meaning of argc
		 * here is slightly different as it excludes kshname, and
		 * we add a trailing NULL sentinel as well
		 */
		l->argv = alloc2(l->argc + 2, sizeof(void *), APERM);
		l->argv[0] = kshname;
		memcpy(&l->argv[1], &argv[argi], l->argc * sizeof(void *));
		l->argv[l->argc + 1] = NULL;
		getopts_reset(1);
	}

	/* divine the initial state of the utf8-mode Flag */
	ccp = null;
	switch (utf_flag) {

	/* auto-detect from locale or environment */
	case 4:
#if HAVE_SETLOCALE_CTYPE
		ccp = setlocale(LC_CTYPE, "");
#if HAVE_LANGINFO_CODESET
		if (!isuc(ccp))
			ccp = nl_langinfo(CODESET);
#endif
		if (!isuc(ccp))
			ccp = null;
#endif
		/* FALLTHROUGH */

	/* auto-detect from environment */
	case 3:
		/* these were imported from environ earlier */
		if (ccp == null)
			ccp = str_val(global("LC_ALL"));
		if (ccp == null)
			ccp = str_val(global("LC_CTYPE"));
		if (ccp == null)
			ccp = str_val(global("LANG"));
		UTFMODE = isuc(ccp);
		break;

	/* not set on command line, not FTALKING */
	case 2:
	/* unknown values */
	default:
		utf_flag = 0;
		/* FALLTHROUGH */

	/* known values */
	case 1:
	case 0:
		UTFMODE = utf_flag;
		break;
	}

	/* Disable during .profile/ENV reading */
	restricted_shell = Flag(FRESTRICTED);
	Flag(FRESTRICTED) = 0;
	errexit = Flag(FERREXIT);
	Flag(FERREXIT) = 0;

	/*
	 * Do this before profile/$ENV so that if it causes problems in them,
	 * user will know why things broke.
	 */
	if (!current_wd[0] && Flag(FTALKING))
		warningf(false, "can't determine current directory");

	if (Flag(FLOGIN))
		include(MKSH_SYSTEM_PROFILE, 0, NULL, true);
	if (!Flag(FPRIVILEGED)) {
		if (Flag(FLOGIN))
			include(substitute("$HOME/.profile", 0), 0, NULL, true);
		if (Flag(FTALKING)) {
			cp = substitute("${ENV:-" MKSHRC_PATH "}", DOTILDE);
			if (cp[0] != '\0')
				include(cp, 0, NULL, true);
		}
	} else {
		include(MKSH_SUID_PROFILE, 0, NULL, true);
		/* turn off -p if not set explicitly */
		if (Flag(FPRIVILEGED) != 1)
			change_flag(FPRIVILEGED, OF_INTERNAL, false);
	}

	if (restricted_shell) {
		c_builtin(restr_com);
		/* After typeset command... */
		Flag(FRESTRICTED) = 1;
	}
	Flag(FERREXIT) = errexit;

	if (Flag(FTALKING) && s)
		hist_init(s);
	else
		/* set after ENV */
		Flag(FTRACKALL) = 1;

	alarm_init();

	*sp = s;
	*lp = l;
	return (0);
}
Esempio n. 2
0
void format::button_ok_VwXEvOnButtonClick(wxCommandEvent& event,int index) {

    FB_Edit * stc = Parent->stc;
    int idx = Parent->FBNotebook->GetSelection();
    Buffer * buff = Parent->bufferList[idx];

    if (buff->GetFileType()>0)
        return;

    wxString guts=Parent->stc->GetText(),tagstart="",tagend="";
    int sel=chc15->GetSelection();
    bool dotags=false,dokeyws=false;
    wxString output="";
    StyleInfo * Style = &(Parent->Style);
    switch(sel) {
        case 0:
        dokeyws=true;
        break;
        case 1:
        dokeyws=true;
        break;
        case 2:
        dokeyws=true;
        break;
        case 3:
        dotags=true;
        tagstart="[";
        tagend="]";
        output="[quote=\"fbide 0.4 bbcode generator\"][size=12]";
        break;
        case 4:
        dotags=true;
        tagstart="<";
        tagend=">";
        output="<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html>\n<head>\n<meta http-equiv=\"content-type\" content=\"text/html;charset=iso-8859-1\">\n<title></title>\n</head>\n<body style=\"font-size:12pt; background-color:#"+hex(GetClr(Style->DefaultBgColour))+"; color:#"+hex(GetClr(Style->Info[wxSTC_B_IDENTIFIER].foreground))+"\"><pre>";
        break;
    }
    wxString curword="";
    initkeywords();
    int kwtyp=0;
    bool commenting=false,dontadd=false,quoting=false,bold=false,italic=false;

    wxString colours[]={hex(GetClr(Style->Info[wxSTC_B_KEYWORD].foreground)),
                        hex(GetClr(Style->Info[wxSTC_B_KEYWORD2].foreground)),
                        hex(GetClr(Style->Info[wxSTC_B_KEYWORD3].foreground)),
                        hex(GetClr(Style->Info[wxSTC_B_KEYWORD4].foreground)),
                        hex(GetClr(Style->Info[wxSTC_B_COMMENT].foreground)),
                        hex(GetClr(Style->Info[wxSTC_B_OPERATOR].foreground)),
                        hex(GetClr(Style->Info[wxSTC_B_STRING].foreground)),
                        hex(GetClr(Style->Info[wxSTC_B_NUMBER].foreground)),
                        hex(GetClr(Style->Info[wxSTC_B_PREPROCESSOR].foreground))};
    int teh_len=(int)guts.Len(),real_len=(int)guts.Len(),color=-1;
    for(int i=0;i<teh_len;i++) {
        unsigned char j00_n00b=guts.GetChar(i);
        curword+=j00_n00b;
        if(j00_n00b!=38&&
                (j00_n00b>0&&j00_n00b<46)||
                j00_n00b==47||
                (j00_n00b>57&&j00_n00b<65)||
                (j00_n00b>90&&j00_n00b<95)||
                j00_n00b==96||
                (j00_n00b>122&&j00_n00b<128)) {
            curword=curword.Left(curword.Len()-1);
            if(dotags&&!commenting&&!quoting&&(kwtyp=isKeyword(curword))!=0) {
                if(color!=kwtyp-1) {
                    if(color!=-1)
                        output+=tagstart+(sel==4?"/span":"/color")+tagend;
                    if(bold)
                        output+=tagstart+"/b"+tagend;
                    if(italic)
                        output+=tagstart+"/i"+tagend;
                    output+=tagstart+"b"+tagend+tagstart+(sel==4?"span style=\"color:#":"color=#")+colours[kwtyp-1]+ \
                            (sel==4?"\"":"")+tagend+curword+(dontadd?"":wxString::Format("%c",j00_n00b));
                }
                else
                    output+=curword+(dontadd?"":wxString::Format("%c",j00_n00b));
                color=kwtyp-1;
                bold=true;
                italic=false;
            }
            else if(dotags&&!commenting&&!quoting&&isNumeric(curword)) {
                if(color!=7) {
                    if(color!=-1)
                        output+=tagstart+(sel==4?"/span":"/color")+tagend;
                    if(bold)
                        output+=tagstart+"/b"+tagend;
                    if(italic)
                        output+=tagstart+"/i"+tagend;
                    output+=tagstart+(sel==4?"span style=\"color:#":"color=#")+colours[7]+ \
                            (sel==4?"\"":"")+tagend+curword+(dontadd?"":wxString::Format("%c",j00_n00b));
                }
                else
                    output+=curword+(dontadd?"":wxString::Format("%c",j00_n00b));
                color=7;
                bold=false;
                italic=false;
            }
            else if(dokeyws&&!commenting&&!quoting&&isKeyword(curword)!=0) {
                switch(sel) {
                    case 0:
                    curword=curword.Left(1).MakeUpper()+curword.Mid(1).MakeLower();
                    break;
                    case 1:
                    curword=curword.MakeUpper();
                    break;
                    case 2:
                    curword=curword.MakeLower();
                    break;
                }
                output+=curword+(dontadd?"":wxString::Format("%c",j00_n00b));
            }
            else {
                if(!commenting&&!quoting) {
                    if(color!=-1)
                        output+=tagstart+(sel==4?"/span":"/color")+tagend;
                    if(bold)
                        output+=tagstart+"/b"+tagend;
                    if(italic)
                        output+=tagstart+"/i"+tagend;
                    color=-1;
                }
                bold=false;
                italic=false;
                output+=curword+(dontadd?"":wxString::Format("%c",j00_n00b));
            }
            curword="";
            int mylen=output.Len();
            if(!commenting&&!quoting&&j00_n00b=='\'') {
                commenting=true;
                if(dotags) {
                    output=output.Left(mylen-1);
                    if(color!=-1)
                        output+=tagstart+(sel==4?"/span":"/color")+tagend;
                    if(bold)
                        output+=tagstart+"/b"+tagend;
                    if(italic)
                        output+=tagstart+"/i"+tagend;
                    output+=tagstart+"i"+tagend+tagstart+(sel==4?"span style=\"color:#":"color=#")+colours[4]+ \
                            (sel==4?"\"":"")+tagend;
                    output+=j00_n00b;
                }
            }
            else if((j00_n00b=='\n'||j00_n00b=='\r')&&commenting) {
                commenting=false;
                color=-1;
                bold=false;
                italic=false;
                if(dotags) {
                    output=output.Left(mylen-1);
                    output+=tagstart+(sel==4?"/span":"/color")+tagend+tagstart+"/i"+tagend;
                    output+=j00_n00b;
                }
            }
            if(!commenting&&!quoting&&j00_n00b=='\"') {
                if(dotags) {
                    output=output.Left(mylen-1);
                    if(color!=-1)
                        output+=tagstart+(sel==4?"/span":"/color")+tagend;
                    if(bold)
                        output+=tagstart+"/b"+tagend;
                    if(italic)
                        output+=tagstart+"/i"+tagend;
                    output+=tagstart+(sel==4?"span style=\"color:#":"color=#")+colours[6]+ \
                            (sel==4?"\"":"")+tagend;
                    output+=j00_n00b;
                }
                quoting=true;
            }
            else if((j00_n00b=='\"'||j00_n00b=='\n'||j00_n00b=='\r')&&quoting) {
                quoting=false;
                color=-1;
                bold=false;
                italic=false;
                if(dotags)
                    output+=tagstart+(sel==4?"/span":"/color")+tagend;
            }
            if(!commenting&&!quoting&&j00_n00b=='#'&&(i==0||(output.Mid(output.Len()-2,1)=="\n"||output.Mid(output.Len()-2,1)=="\r"))) {
                output=output.Left(mylen-1);
                if(color!=-1)
                    output+=tagstart+(sel==4?"/span":"/color")+tagend;
                if(bold)
                    output+=tagstart+"/b"+tagend;
                if(italic)
                    output+=tagstart+"/i"+tagend;
                color=-1;
                bold=false;
                italic=false;
                if(dotags)
                    output+=tagstart+(sel==4?"span style=\"color:#":"color=#")+colours[8]+ \
                            (sel==4?"\"":"")+tagend;
                output+=j00_n00b;
                for(i++;guts.GetChar(i)!='\n'&&i<teh_len;i++) {
                    output+=guts.Mid(i,1);
                }
                output+='\n';
                if(dotags)
                    output << tagstart+(sel==4?"/span":"/color")+tagend << guts.GetChar(i);
            }
            else if(dotags&&!commenting&&!quoting&&j00_n00b=='#') {
                output=output.Left(mylen-1);
                output+=tagstart+"b"+tagend+tagstart+(sel==4?"span style=\"color:#":"color=#")+colours[5]+ \
                        (sel==4?"\"":"")+tagend;
                output+=j00_n00b;
                output+=tagstart+(sel==4?"/span":"/color")+tagend+tagstart+"/b"+tagend;
            }
            if(dotags&&((j00_n00b>39&&j00_n00b<46)||j00_n00b==47||
                        (j00_n00b>57&&j00_n00b<64)||j00_n00b==92||j00_n00b==94||
                        (j00_n00b>122&&j00_n00b<128))&&!commenting&&!quoting) {
                output=output.Left(mylen-1);
                output+=tagstart+"b"+tagend+tagstart+(sel==4?"span style=\"color:#":"color=#")+colours[5]+ \
                        (sel==4?"\"":"")+tagend;
                output+=j00_n00b;
                output+=tagstart+(sel==4?"/span":"/color")+tagend+tagstart+"/b"+tagend;
            }
        }
        if(i+1==real_len) {
            guts+="\n";
            teh_len++;
            dontadd=true;
        }
    }
    if (sel < 3) {
        buff = stc->buff;
        buff->SetPositions(stc->GetSelectionStart(), stc->GetSelectionEnd());
        buff->SetLine(stc->GetFirstVisibleLine());
        buff->SetCaretPos(stc->GetCurrentPos());
        stc->SetText(output);
        stc->ScrollToLine(buff->GetLine());
        stc->SetCurrentPos(buff->GetCaretPos());
        stc->SetSelectionStart(buff->GetSelectionStart());
        stc->SetSelectionEnd(buff->GetSelectionEnd());
    }
    else {
        if(color!=-1)
            output+=tagstart+(sel==4?"/span":"/color")+tagend;
        if(bold)
            output+=tagstart+"/b"+tagend;
        if(italic)
            output+=tagstart+"/i"+tagend;
        if     (sel==4)
            output+="</pre></body></html>";
        else if(sel==3)
            output+="[/size][/quote]";
        Parent->NewSTCPage("",true, 1);
        stc->SetText(output);
    }
}
Esempio n. 3
0
int
main(int argc, char *argv[])
{
	int i;
	int argi;
	Source *s;
	struct block *l;
	int restricted, errexit;
	char **wp;
	struct env env;
	pid_t ppid;

	/* make sure argv[] is sane */
	if (!*argv) {
		static const char *empty_argv[] = {
			"ksh", (char *) 0
		};

		argv = (char **) empty_argv;
		argc = 1;
	}
	kshname = *argv;

	ainit(&aperm);		/* initialize permanent Area */

	/* set up base environment */
	memset(&env, 0, sizeof(env));
	env.type = E_NONE;
	ainit(&env.area);
	e = &env;
	newblock();		/* set up global l->vars and l->funs */

	/* Do this first so output routines (eg, errorf, shellf) can work */
	initio();

	initvar();

	initctypes();

	inittraps();

	coproc_init();

	/* set up variable and command dictionaries */
	ktinit(&taliases, APERM, 0);
	ktinit(&aliases, APERM, 0);
	ktinit(&homedirs, APERM, 0);

	/* define shell keywords */
	initkeywords();

	/* define built-in commands */
	ktinit(&builtins, APERM, 64); /* must be 2^n (currently 40 builtins) */
	for (i = 0; shbuiltins[i].name != NULL; i++)
		builtin(shbuiltins[i].name, shbuiltins[i].func);
	for (i = 0; kshbuiltins[i].name != NULL; i++)
		builtin(kshbuiltins[i].name, kshbuiltins[i].func);

	init_histvec();

	def_path = _PATH_DEFPATH;
	{
		size_t len = confstr(_CS_PATH, (char *) 0, 0);
		char *new;

		if (len > 0) {
			confstr(_CS_PATH, new = alloc(len + 1, APERM), len + 1);
			def_path = new;
		}
	}
Esempio n. 4
0
int
main(int argc, char *argv[])
{
	register int i;
	int argi;
	Source *s;
	struct block *l;
	int restricted, errexit;
	char **wp;
	struct env env;
	pid_t ppid;

#ifdef MEM_DEBUG
	chmem_set_defaults("ct", 1);
	/* chmem_push("+c", 1); */
#endif /* MEM_DEBUG */

#ifdef OS2
	setmode (0, O_BINARY);
	setmode (1, O_TEXT);
#endif

	/* make sure argv[] is sane */
	if (!*argv) {
		static const char	*empty_argv[] = {
					    "pdksh", (char *) 0
					};

		argv = (char **)__UNCONST(empty_argv);
		argc = 1;
	}
	kshname = *argv;

	ainit(&aperm);		/* initialize permanent Area */

	/* set up base environment */
	memset(&env, 0, sizeof(env));
	env.type = E_NONE;
	ainit(&env.area);
	e = &env;
	newblock();		/* set up global l->vars and l->funs */

	/* Do this first so output routines (eg, errorf, shellf) can work */
	initio();

	initvar();

	initctypes();

	inittraps();

#ifdef KSH
	coproc_init();
#endif /* KSH */

	/* set up variable and command dictionaries */
	tinit(&taliases, APERM, 0);
	tinit(&aliases, APERM, 0);
	tinit(&homedirs, APERM, 0);

	/* define shell keywords */
	initkeywords();

	/* define built-in commands */
	tinit(&builtins, APERM, 64); /* must be 2^n (currently 40 builtins) */
	for (i = 0; shbuiltins[i].name != NULL; i++)
		builtin(shbuiltins[i].name, shbuiltins[i].func);
	for (i = 0; kshbuiltins[i].name != NULL; i++)
		builtin(kshbuiltins[i].name, kshbuiltins[i].func);

	init_histvec();

	def_path = DEFAULT__PATH;
#if defined(HAVE_CONFSTR) && defined(_CS_PATH)
	{
		size_t len = confstr(_CS_PATH, (char *) 0, 0);
		char *new;

		if (len > 0) {
			confstr(_CS_PATH, new = alloc(len + 1, APERM), len + 1);
			def_path = new;
		}
	}