⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tclunixinit.c

📁 linux系统下的音频通信
💻 C
字号:
/*  * tclUnixInit.c -- * *	Contains the Unix-specific interpreter initialization functions. * * Copyright (c) 1995-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * SCCS: @(#) tclUnixInit.c 1.26 97/08/05 20:09:25 */#include "tclInt.h"#include "tclPort.h"#if defined(__FreeBSD__)#   include <floatingpoint.h>#endif#if defined(__bsdi__)#   include <sys/param.h>#   if _BSDI_VERSION > 199501#	include <dlfcn.h>#   endif#endifextern char lib_history[];extern char lib_init[];extern char lib_ldAout[];extern char lib_http[];extern char lib_optparse[];extern char lib_parray[];extern char lib_safe[];extern char lib_word[];/* * Default directory in which to look for Tcl library scripts.  The * symbol is defined by Makefile. */static char defaultLibraryDir[sizeof(TCL_LIBRARY)+200] = TCL_LIBRARY;/* * Directory in which to look for packages (each package is typically * installed as a subdirectory of this directory).  The symbol is * defined by Makefile. */static char pkgPath[sizeof(TCL_PACKAGE_PATH)+200] = TCL_PACKAGE_PATH;/* * Is this module initialized? */static int initialized = 0;/* * The Init script, tclPreInitScript variable, and the routine * TclSetPreInitScript (common to Windows and Unix platforms) are defined * in generic/tclInitScript.h. */#include "tclInitScript.h"/* * Static routines in this file: */static void	PlatformInitExitHandler _ANSI_ARGS_((ClientData clientData));/* *---------------------------------------------------------------------- * * PlatformInitExitHandler -- * *	Uninitializes all values on unload, so that this module can *	be later reinitialized. * * Results: *	None. * * Side effects: *	Returns the module to uninitialized state. * *---------------------------------------------------------------------- */static voidPlatformInitExitHandler(clientData)    ClientData clientData;		/* Unused. */{    initialized = 0;}/* *---------------------------------------------------------------------- * * TclPlatformInit -- * *	Performs Unix-specific interpreter initialization related to the *      tcl_library and tcl_platform variables, and other platform- *	specific things. * * Results: *	None. * * Side effects: *	Sets "tcl_library" and "tcl_platform" Tcl variables. * *---------------------------------------------------------------------- */voidTclPlatformInit(interp)    Tcl_Interp *interp;{#ifndef NO_UNAME    struct utsname name;#endif    int unameOK;    tclPlatform = TCL_PLATFORM_UNIX;    Tcl_SetVar(interp, "tclDefaultLibrary", defaultLibraryDir,	    TCL_GLOBAL_ONLY);    Tcl_SetVar(interp, "tcl_pkgPath", pkgPath, TCL_GLOBAL_ONLY);    Tcl_SetVar2(interp, "tcl_platform", "platform", "unix", TCL_GLOBAL_ONLY);    unameOK = 0;#ifndef NO_UNAME    if (uname(&name) >= 0) {	unameOK = 1;	Tcl_SetVar2(interp, "tcl_platform", "os", name.sysname,		TCL_GLOBAL_ONLY);	/*	 * The following code is a special hack to handle differences in	 * the way version information is returned by uname.  On most	 * systems the full version number is available in name.release.	 * However, under AIX the major version number is in	 * name.version and the minor version number is in name.release.	 */	if ((strchr(name.release, '.') != NULL)		|| !isdigit(UCHAR(name.version[0]))) {	    Tcl_SetVar2(interp, "tcl_platform", "osVersion", name.release,		    TCL_GLOBAL_ONLY);	} else {	    Tcl_SetVar2(interp, "tcl_platform", "osVersion", name.version,		    TCL_GLOBAL_ONLY);	    Tcl_SetVar2(interp, "tcl_platform", "osVersion", ".",		    TCL_GLOBAL_ONLY|TCL_APPEND_VALUE);	    Tcl_SetVar2(interp, "tcl_platform", "osVersion", name.release,		    TCL_GLOBAL_ONLY|TCL_APPEND_VALUE);	}	Tcl_SetVar2(interp, "tcl_platform", "machine", name.machine,		TCL_GLOBAL_ONLY);    }#endif    if (!unameOK) {	Tcl_SetVar2(interp, "tcl_platform", "os", "", TCL_GLOBAL_ONLY);	Tcl_SetVar2(interp, "tcl_platform", "osVersion", "", TCL_GLOBAL_ONLY);	Tcl_SetVar2(interp, "tcl_platform", "machine", "", TCL_GLOBAL_ONLY);    }    if (!initialized) {        /*         * Create an exit handler so that uninitialization will be done         * on unload.         */                Tcl_CreateExitHandler(PlatformInitExitHandler, NULL);        	/*	 * The code below causes SIGPIPE (broken pipe) errors to	 * be ignored.  This is needed so that Tcl processes don't	 * die if they create child processes (e.g. using "exec" or	 * "open") that terminate prematurely.  The signal handler	 * is only set up when the first interpreter is created;	 * after this the application can override the handler with	 * a different one of its own, if it wants.	 */    #ifdef SIGPIPE	(void) signal(SIGPIPE, SIG_IGN);#endif /* SIGPIPE */#ifdef __FreeBSD__	fpsetround(FP_RN);	fpsetmask(0L);#endif#if defined(__bsdi__) && (_BSDI_VERSION > 199501)	/*	 * Find local symbols. Don't report an error if we fail.	 */	(void) dlopen (NULL, RTLD_NOW);#endif	initialized = 1;    }}/* *---------------------------------------------------------------------- * * Tcl_Init -- * *	This procedure is typically invoked by Tcl_AppInit procedures *	to perform additional initialization for a Tcl interpreter, *	such as sourcing the "init.tcl" script. * * Results: *	Returns a standard Tcl completion code and sets interp->result *	if there is an error. * * Side effects: *	Depends on what's in the init.tcl script. * *---------------------------------------------------------------------- */intTcl_Init(interp)    Tcl_Interp *interp;		/* Interpreter to initialize. */{    if (tclPreInitScript != NULL) {	if (Tcl_Eval(interp, tclPreInitScript) == TCL_ERROR) {	    return (TCL_ERROR);	};    }    if (Tcl_Eval(interp, lib_init) != TCL_OK) {	return TCL_ERROR;    }    if (Tcl_Eval(interp, lib_optparse) != TCL_OK) {	return TCL_ERROR;    }    if (Tcl_Eval(interp, lib_safe) != TCL_OK) {	return TCL_ERROR;    }    if (Tcl_Eval(interp, lib_history) != TCL_OK) {	return TCL_ERROR;    }    if (Tcl_Eval(interp, lib_ldAout) != TCL_OK) {	return TCL_ERROR;    }    if (Tcl_Eval(interp, lib_parray) != TCL_OK) {	return TCL_ERROR;    }    if (Tcl_Eval(interp, lib_word) != TCL_OK) {	return TCL_ERROR;    }    if (Tcl_Eval(interp, lib_http) != TCL_OK) {	return TCL_ERROR;    }    return(Tcl_Eval(interp, initScript));}/* *---------------------------------------------------------------------- * * Tcl_SourceRCFile -- * *	This procedure is typically invoked by Tcl_Main of Tk_Main *	procedure to source an application specific rc file into the *	interpreter at startup time. * * Results: *	None. * * Side effects: *	Depends on what's in the rc script. * *---------------------------------------------------------------------- */voidTcl_SourceRCFile(interp)    Tcl_Interp *interp;		/* Interpreter to source rc file into. */{    Tcl_DString temp;    char *fileName;    Tcl_Channel errChannel;    fileName = Tcl_GetVar(interp, "tcl_rcFileName", TCL_GLOBAL_ONLY);    if (fileName != NULL) {        Tcl_Channel c;	char *fullName;        Tcl_DStringInit(&temp);	fullName = Tcl_TranslateFileName(interp, fileName, &temp);	if (fullName == NULL) {	    /*	     * Couldn't translate the file name (e.g. it referred to a	     * bogus user or there was no HOME environment variable).	     * Just do nothing.	     */	} else {	    /*	     * Test for the existence of the rc file before trying to read it.	     */            c = Tcl_OpenFileChannel(NULL, fullName, "r", 0);            if (c != (Tcl_Channel) NULL) {                Tcl_Close(NULL, c);		if (Tcl_EvalFile(interp, fullName) != TCL_OK) {		    errChannel = Tcl_GetStdChannel(TCL_STDERR);		    if (errChannel) {			Tcl_Write(errChannel, interp->result, -1);			Tcl_Write(errChannel, "\n", 1);		    }		}	    }	}        Tcl_DStringFree(&temp);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -