---
name: "cgen"
section: "3tcl"
platform: "linux"
package: "tcllib"
version: "2.0+dfsg-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/cgen"
---

# cgen(3tcl)

Generator core for compiler of magic(5) files

```

```

## NAME

fileutil::magic::cgen - Generator core for compiler of [magic(5)](/magic/5.md) files

## SYNOPSIS

package require **Tcl 8.5 9**

package require **fileutil::magic::cgen ?1.2.0?**

package require **fileutil::magic::rt ?1.2.0?**

package require **struct::tree**

package require **struct::list**

**::fileutil::magic::cgen::2tree** *script*

**::fileutil::magic::cgen::treedump** *tree*

**::fileutil::magic::cgen::treegen** *tree* *node*

```

```

## DESCRIPTION

This package provides the generator backend for a compiler of [magic(5)](/magic/5.md) files into recognizers based on the **fileutil::magic::rt** recognizer runtime package. For the compiler frontend using this generator see the package **fileutil::magic::cfront**.

## COMMANDS

- **::fileutil::magic::cgen::2tree** *script*

  This command converts the recognizer specified by the *script* into a tree and returns the object command of that tree as its result. It uses the package **struct::tree** for the tree.

  The *script* is in the format specified by [magic(5)](/magic/5.md).

- **::fileutil::magic::cgen::treedump** *tree*

  This command takes a *tree* as generated by **::fileutil::magic::cgen::2tree** and returns a string encoding the tree for human consumption, to aid in debugging.

- **::fileutil::magic::cgen::treegen** *tree* *node*

  This command takes a *tree* as generated by **::fileutil::magic::cgen::2tree** and returns a Tcl script, the recognizer for the file types represented by the sub-tree rooted at the *node*. The generated script makes extensive use of the commands provided by the recognizer runtime package **fileutil::magic::rt** to perform its duties.

## BUGS, IDEAS, FEEDBACK

This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category *fileutil :: magic* of the *Tcllib Trackers* \[http://core.tcl.tk/tcllib/reportlist\]. Please also report any ideas for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of **diff -u**.

Note further that *attachments* are strongly preferred over inlined patches. Attachments can be made by going to the **Edit** form of the ticket immediately after its creation, and then using the left-most button in the secondary navigation bar.

## SEE ALSO

[file(1)](/file/1.md), fileutil, [magic(5)](/magic/5.md)

## KEYWORDS

file recognition, file type, file utilities, mime, type

## CATEGORY

Programming tools
