1# -*- tcl -*-
2# ### ### ### ######### ######### #########
3## Terminal packages - ANSI
4## Generic commands to define commands for code sequences.
5
6# ### ### ### ######### ######### #########
7## Requirements
8
9namespace eval ::term::ansi::code {}
10
11# ### ### ### ######### ######### #########
12## API. Escape clauses, plain and bracket
13##      Used by 'define'd commands.
14
15proc ::term::ansi::code::esc  {str} {return \033${str}}
16proc ::term::ansi::code::escb {str} {esc    \[${str}}
17
18# ### ### ### ######### ######### #########
19## API. Define command for named control code, or constant.
20##      (Simple definitions without arguments)
21
22proc ::term::ansi::code::define {name escape code} {
23    proc [Qualified $name] {} [list ::term::ansi::code::$escape $code]
24}
25
26proc ::term::ansi::code::const {name code} {
27    proc [Qualified $name] {} [list return $code]
28}
29
30# ### ### ### ######### ######### #########
31## Internal helper to construct fully-qualified names.
32
33proc ::term::ansi::code::Qualified {name} {
34    if {![string match "::*" $name]} {
35        # Get the caller's namespace; append :: if it is not the
36	# global namespace, for separation from the actual name.
37        set ns [uplevel 2 [list namespace current]]
38        if {![string equal "::" $ns]} {append ns "::"}
39        set name "$ns$name"
40    }
41    return $name
42}
43
44# ### ### ### ######### ######### #########
45
46namespace eval ::term::ansi::code {
47    namespace export esc escb define const
48}
49
50# ### ### ### ######### ######### #########
51## Ready
52
53package provide term::ansi::code 0.1
54
55##
56# ### ### ### ######### ######### #########
57