1*549b59edSchristos /* $NetBSD: tclAppInit.c,v 1.2 2021/08/14 16:14:50 christos Exp $ */
24e6df137Slukem
32de962bdSlukem /*
42de962bdSlukem * tclAppInit.c --
52de962bdSlukem *
62de962bdSlukem * Provides a default version of the main program and Tcl_AppInit
72de962bdSlukem * procedure for Tcl applications (without Tk).
82de962bdSlukem *
92de962bdSlukem * Copyright (c) 1993 The Regents of the University of California.
102de962bdSlukem * Copyright (c) 1994-1995 Sun Microsystems, Inc.
112de962bdSlukem *
122de962bdSlukem * See the file "license.terms" for information on usage and redistribution
132de962bdSlukem * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
142de962bdSlukem *
152de962bdSlukem * SCCS: @(#) tclAppInit.c 1.17 96/03/26 12:45:29
162de962bdSlukem */
172de962bdSlukem
182de962bdSlukem #include "tcl.h"
192de962bdSlukem
202de962bdSlukem /*
212de962bdSlukem * The following variable is a special hack that is needed in order for
222de962bdSlukem * Sun shared libraries to be used for Tcl.
232de962bdSlukem */
242de962bdSlukem
252de962bdSlukem extern int matherr();
262de962bdSlukem int *tclDummyMathPtr = (int *) matherr;
272de962bdSlukem
282de962bdSlukem #ifdef TCL_TEST
292de962bdSlukem EXTERN int Tcltest_Init _ANSI_ARGS_((Tcl_Interp *interp));
302de962bdSlukem #endif /* TCL_TEST */
312de962bdSlukem
322de962bdSlukem /*
332de962bdSlukem *----------------------------------------------------------------------
342de962bdSlukem *
352de962bdSlukem * main --
362de962bdSlukem *
372de962bdSlukem * This is the main program for the application.
382de962bdSlukem *
392de962bdSlukem * Results:
402de962bdSlukem * None: Tcl_Main never returns here, so this procedure never
412de962bdSlukem * returns either.
422de962bdSlukem *
432de962bdSlukem * Side effects:
442de962bdSlukem * Whatever the application does.
452de962bdSlukem *
462de962bdSlukem *----------------------------------------------------------------------
472de962bdSlukem */
482de962bdSlukem
492de962bdSlukem int
main(argc,argv)502de962bdSlukem main(argc, argv)
512de962bdSlukem int argc; /* Number of command-line arguments. */
522de962bdSlukem char **argv; /* Values of command-line arguments. */
532de962bdSlukem {
542de962bdSlukem #ifdef USE_TCLX
552de962bdSlukem TclX_Main(argc, argv, Tcl_AppInit);
562de962bdSlukem #else
572de962bdSlukem Tcl_Main(argc, argv, Tcl_AppInit);
582de962bdSlukem #endif
592de962bdSlukem return 0; /* Needed only to prevent compiler warning. */
602de962bdSlukem }
612de962bdSlukem
622de962bdSlukem /*
632de962bdSlukem *----------------------------------------------------------------------
642de962bdSlukem *
652de962bdSlukem * Tcl_AppInit --
662de962bdSlukem *
672de962bdSlukem * This procedure performs application-specific initialization.
682de962bdSlukem * Most applications, especially those that incorporate additional
692de962bdSlukem * packages, will have their own version of this procedure.
702de962bdSlukem *
712de962bdSlukem * Results:
722de962bdSlukem * Returns a standard Tcl completion code, and leaves an error
732de962bdSlukem * message in interp->result if an error occurs.
742de962bdSlukem *
752de962bdSlukem * Side effects:
762de962bdSlukem * Depends on the startup script.
772de962bdSlukem *
782de962bdSlukem *----------------------------------------------------------------------
792de962bdSlukem */
802de962bdSlukem
812de962bdSlukem int
Tcl_AppInit(interp)822de962bdSlukem Tcl_AppInit(interp)
832de962bdSlukem Tcl_Interp *interp; /* Interpreter for application. */
842de962bdSlukem {
852de962bdSlukem if (Tcl_Init(interp) == TCL_ERROR) {
862de962bdSlukem return TCL_ERROR;
872de962bdSlukem }
882de962bdSlukem
892de962bdSlukem #ifdef USE_ITCL
902de962bdSlukem if (Itcl_Init(interp) == TCL_ERROR) {
912de962bdSlukem return TCL_ERROR;
922de962bdSlukem }
932de962bdSlukem Tcl_StaticPackage (interp, "Itcl", Itcl_Init, NULL);
942de962bdSlukem #endif
952de962bdSlukem
962de962bdSlukem #ifdef TCL_TEST
972de962bdSlukem if (Tcltest_Init(interp) == TCL_ERROR) {
982de962bdSlukem return TCL_ERROR;
992de962bdSlukem }
1002de962bdSlukem Tcl_StaticPackage(interp, "Tcltest", Tcltest_Init,
1012de962bdSlukem (Tcl_PackageInitProc *) NULL);
1022de962bdSlukem #endif /* TCL_TEST */
1032de962bdSlukem
1042de962bdSlukem #ifdef USE_TCLX
1052de962bdSlukem if (Tclx_Init (interp) == TCL_ERROR) {
1062de962bdSlukem return TCL_ERROR;
1072de962bdSlukem }
1082de962bdSlukem Tcl_StaticPackage (interp, "Tclx", Tclx_Init, NULL);
1092de962bdSlukem #endif
1102de962bdSlukem
1112de962bdSlukem if (Ldaptcl_Init(interp) == TCL_ERROR) {
1122de962bdSlukem return TCL_ERROR;
1132de962bdSlukem }
1142de962bdSlukem Tcl_StaticPackage(interp, "Ldaptcl", Ldaptcl_Init,
1152de962bdSlukem (Tcl_PackageInitProc *) NULL);
1162de962bdSlukem
1172de962bdSlukem /*
1182de962bdSlukem * Call the init procedures for included packages. Each call should
1192de962bdSlukem * look like this:
1202de962bdSlukem *
1212de962bdSlukem * if (Mod_Init(interp) == TCL_ERROR) {
1222de962bdSlukem * return TCL_ERROR;
1232de962bdSlukem * }
1242de962bdSlukem *
1252de962bdSlukem * where "Mod" is the name of the module.
1262de962bdSlukem */
1272de962bdSlukem
1282de962bdSlukem /*
1292de962bdSlukem * Call Tcl_CreateCommand for application-specific commands, if
1302de962bdSlukem * they weren't already created by the init procedures called above.
1312de962bdSlukem */
1322de962bdSlukem
1332de962bdSlukem /*
1342de962bdSlukem * Specify a user-specific startup file to invoke if the application
1352de962bdSlukem * is run interactively. Typically the startup file is "~/.apprc"
1362de962bdSlukem * where "app" is the name of the application. If this line is deleted
1372de962bdSlukem * then no user-specific startup file will be run under any conditions.
1382de962bdSlukem */
1392de962bdSlukem
1402de962bdSlukem Tcl_SetVar(interp, "tcl_rcFileName", "~/.tclshrc", TCL_GLOBAL_ONLY);
1412de962bdSlukem return TCL_OK;
1422de962bdSlukem }
143