---
name: "AppInit"
section: "3tcl"
platform: "linux"
package: "tcl8.3-doc"
version: "8.3.5-13"
release: "Debian 5.0 (Lenny)"
platforms: ["linux"]
url: "https://new.carta.tech/AppInit/3tcl"
---

# AppInit(3tcl)

perform application-specific initialization

```

```

## NAME

Tcl\_AppInit - perform application-specific initialization

## SYNOPSIS

```
#include <tcl.h>

int
Tcl_AppInit(interp)
```

## ARGUMENTS

- Tcl\_Interp *\*interp* (in)

  Interpreter for the application.

  ```

  ```

## DESCRIPTION

**Tcl\_AppInit** is a \`\`hook'' procedure that is invoked by the main programs for Tcl applications such as **tclsh** and **wish**. Its purpose is to allow new Tcl applications to be created without modifying the main programs provided as part of Tcl and Tk. To create a new application you write a new version of **Tcl\_AppInit** to replace the default version provided by Tcl, then link your new **Tcl\_AppInit** with the Tcl library.

**Tcl\_AppInit** is invoked after by **Tcl\_Main** and **Tk\_Main** after their own initialization and before entering the main loop to process commands. Here are some examples of things that **Tcl\_AppInit** might do:

- \[1\]

  Call initialization procedures for various packages used by the application. Each initialization procedure adds new commands to *interp* for its package and performs other package-specific initialization.

- \[2\]

  Process command-line arguments, which can be accessed from the Tcl variables **argv** and **argv0** in *interp*.

- \[3\]

  Invoke a startup script to initialize the application.

**Tcl\_AppInit** returns TCL\_OK or TCL\_ERROR. If it returns TCL\_ERROR then it must leave an error message in for the interpreter's result;  otherwise the result is ignored.

In addition to **Tcl\_AppInit**, your application should also contain a procedure **main** that calls **Tcl\_Main** as follows:

```
Tcl_Main(argc, argv, Tcl_AppInit);
```

The third argument to **Tcl\_Main** gives the address of the application-specific initialization procedure to invoke. This means that you don't have to use the name **Tcl\_AppInit** for the procedure, but in practice the name is nearly always **Tcl\_AppInit** (in versions before Tcl 7.4 the name **Tcl\_AppInit** was implicit;  there was no way to specify the procedure explicitly). The best way to get started is to make a copy of the file **tclAppInit.c** from the Tcl library or source directory. It already contains a **main** procedure and a template for **Tcl\_AppInit** that you can modify for your application.

## KEYWORDS

application, argument, command, initialization, interpreter
