Error processing request

Parameters

CONTENT_LENGTH0
REQUEST_METHODGET
REQUEST_URI/revision/Command+Line++Calculator+in+Namespace+Package+Example?V=60
QUERY_STRINGV=60
CONTENT_TYPE
DOCUMENT_URI/revision/Command+Line++Calculator+in+Namespace+Package+Example
DOCUMENT_ROOT/var/www/nikit/nikit/nginx/../docroot
SCGI1
SERVER_PROTOCOLHTTP/1.1
HTTPSon
REMOTE_ADDR172.70.100.208
REMOTE_PORT35738
SERVER_PORT4443
SERVER_NAMEwiki.tcl-lang.org
HTTP_HOSTwiki.tcl-lang.org
HTTP_CONNECTIONKeep-Alive
HTTP_ACCEPT_ENCODINGgzip, br
HTTP_X_FORWARDED_FOR3.128.199.175
HTTP_CF_RAY8859c2923eabe249-ORD
HTTP_X_FORWARDED_PROTOhttps
HTTP_CF_VISITOR{"scheme":"https"}
HTTP_ACCEPT*/*
HTTP_USER_AGENTMozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
HTTP_CF_CONNECTING_IP3.128.199.175
HTTP_CDN_LOOPcloudflare
HTTP_CF_IPCOUNTRYUS

Body


Error

Unknow state transition: LINE -> END

-code

1

-level

0

-errorstack

INNER {returnImm {Unknow state transition: LINE -> END} {}} CALL {my render_wikit {Command Line  Calculator in Namespace Package Example} {***Command Line Calculator in Namespace Package Example***
----   
This page is under development. Comments are
welcome, but please load any comments
in the comments section 
at the middle of the page. Thanks,[gold]
----
[gold] Here is an eTCL  script for
command line calculator in a namespace.
The 2 line calculator in [A little calculator] 
from [Richard Suchenwirth] et al can be packaged
with a namespace. For those with bad eyes, the 
text shown with green background and big black font
has been shown as easier to read than most, as
in the old DOS program Wordstar. The window cut and paste
procedures in [label] can be added to the namespace for screen capture
of output.

---- 
For the second example, the two line calculator is modified 
to switch to some operator notation. We would like some operators
in the calculator like * 1 2 3 = 6 and + 4 5 = 20. For the switch in the eval button,
the if{catch ...expr fails } aborts to an eval command. The return
action was left as before.
----
The program is testing some one line procedures for operator math. This modifies the sum of list procedure from [RS] in [the Zen of Tcl] and [Elegance vs. performance] and see reference [Math Operators as Commands].The commands are in the form of !+ 4 5 6= 15, !* 1 2 3 =6, !- 1 2 3 =-4, and !/ 2 3 = 0.66666. The  multiplication with polish notation seems a useful procedure for the TCL calculators, as well as the reciprocal procedure (!1/ below). Assuming at least two arguments, the reciprocal procedure !1/ 1 2 would give the sum of 1/1 and 1/2 or 1.5 The program checked some of the trivial arguments, but not all (eg. !* 0 = 0, !- 0 = 0, !/ 0 = 0,!1/ 1 = 1,!+ 1 = 1,!* 1= 1 )
----
The program is  importing the +*-/ commands from [tcl::mathop]. These commands are working
in the form of  + 1 2 3 =6, * 4 5  = 20,  - 5 4 =1, and so on. The trig commands are working as
sin(.45) and cos(.30). The user can draw pi, deg2rad, and other procedures from [Oneliner's Pie in the Sky].
To put the math procedures inside the namespace, the  catch {uplevel #0 eval $e} res
statement can be modified to catch { eval $e} res


----
 Testcase 1.
 Examples of operator notation from command line,
 importing [tcl::mathops], and math local procedures.
 Most of these are cut and paste from console operation.
 As discussed below, the local math procedures are not
 as efficient as importing mathops or mathfunc.
%|quantity|notation|result|enabling statement|%
&| a | * 1 2 3 |6|namespace import ::tcl::mathop::* ;# import all|&
&| b |+ 1 2 3  |6|namespace import ::tcl::mathop::\\+|&
&| c | - 1 2 3 |-5|namespace import ::tcl::mathop::\\-|&
&| d | !1/ 1 2 |1.5|proc !1/ args { expr [ join $args  +1./ ]}|&
&| e |!+ 1 2 3|6|proc !+ args { expr [ join $args  + ]}|&
&| f |* 5 6 7 8 8|13440|namespace import ::tcl::mathop::\\*|&
&| g |* 2 2 2 2 2 2 2 2 2 2 |1024|namespace import ::tcl::mathop::\\*|&
&| h|* 4 5|20|namespace import ::tcl::mathop::\\*|&
&|i |+ 4 5 |9|namespace import ::tcl::mathop::\\+|&
&|1a |pi |3.14|proc pi {} {expr {acos(-1)}}  ;#AMG |&
&|1b |3.*[[pi]] |9.42|proc pi {} {expr {acos(-1)}}  ;#AMG |&
&|2a| [deg2rad]|0.0174|                    proc deg2rad {} {return [ expr {1.*[pi]/180.}  ]}|& 
&|3a| [rad2deg]|57.295|                    proc rad2deg {} {return [ expr {180./1.*[pi]}  ]}|& 
&| 4a | sqrt 5  |2.23|namespace import ::tcl::mathfunc::* ;# import all|&

----


***Screenshots Section***
[http://img846.imageshack.us/img846/1619/image41c.gif]

----
'''Comments Section'''

Please place any comments here, Thanks.

In your second example, you have these code snippets:

======
  namespace import ::tcl::mathop::\\+
  namespace import ::tcl::mathop::\\*
  namespace import ::tcl::mathop::\\-
  mamespace import ::tcl::mathop::\\/
======

On all but the import of * the \\ is superflurous, in that the only characters that are special to namespace import are glob-style characters (* and ?).  However, all four lines can be replaced by this:

======
  namespace path { ::tcl::mathop }
======

With the result that not does +, -, *, and / become available, but every other ::tcl::mathop is also becomes available for use.

A bit further down, you have this:

======
  proc !+ args { expr [join $args +] }
  proc !* args { expr [join $args *] }
  proc !- args { expr [join $args -] }
======

If you make accessible the +, -, and * procs via namespace path/import, then you do not need to perform an expr indirection and join on arguments, because the ::tcl::mathop procs for +, -, and * already handle plural arguments:

======
  % + 1 2 3
  6
======

If you prefer the "look" of !+, !*, and !-, there is a much more efficient way of achieving the same.  Setup an interpreter alias:

======
  foreach {new existing} [ list !+ + !* * !- - ] {
    interp alias {} $new {} $existing
  }
======

Now you have !+, !*, and !- available, but without the overhead of 1) a local proc call, 2) a join of arguments, and an expr call (to then parse the joined arguments).
----
[gold] Changed  namespace import ::tcl::mathop::\\+, etc to
namespace path { ::tcl::mathop }. Installed  namespace path { ::tcl::mathfunc }
Changed some local math procs 
to renamed mathops. Thanks.

----
***References:***
   * http://www.spsu.edu/cs/faculty/bbrown/web_lectures/postfix/
   * http://en.wikipedia.org/wiki/Polish_notation, 1924
   * [expr]
   * [Importing expr functions]
   * [RPN]
   * [Parsing Polish notation]
   * [Category Package] 
   * [Importing expr functions, part 2]
   * [Call Procedure Like Fortran Example]
   * [namespace]
   * [package]
   * [tcl::mathop]
   * [tcl::mathfunc]
   * [Namespace resolution of Variables & Procedures]
   * [http://en.wikibooks.org/wiki/Tcl_Programming/expr]
   * [A little calculator]
   * [A minimal console]



----

****Appendix Code****
****appendix TCL programs and scripts ****
---- 

****Pretty Print Version *** 
***Trial Version under test***
----
***First Example***
======         
                  # autoindent from ased editor
                  # program " 2 Line Calculator in Namespace"
                  # written on Windows XP on eTCL
                  # working under TCL version 8.5.6 and eTCL 1.0.1
                  # TCL WIKI , 25may2011
         package provide calculatorliner 1.0
            namespace eval liner {
                proc initdisplay {} {
                    pack [entry .e -textvar e -width 50 ]
                    bind .e <Return> {catch {expr [string map {/ *1./} $e]} res; set e $res} ;# RS & FR
                }}
            proc linershell {} {
                namespace import liner::*
                liner::initdisplay
                .e configure -bg palegreen
                .e configure -fg black
                .e configure -font {helvetica 50 bold}
                .e configure -highlightcolor tan -relief raised -border 30                                   
                focus .e
                button .b -text clear -command {set e ""} 
                button .c -text exit -command {exit} 
                pack .b .c   -side left -padx 5
                . configure  -bg palegreen
                wm title . "Suchenwirth 2 Line Calculator"
            }
            linershell
======
----
***Second Example***
======
                    # autoindent from ased editor
                    # program " Modified Line Calculator in Namespace"
                    # written on Windows XP on eTCL
                    # working under TCL version 8.5.6 and eTCL 1.0.1
                    # TCL WIKI , 24jun2011
                    package provide calculatorliner 1.0
                    namespace eval liner {
                        proc evalwild {e} {
                            if [catch {set res [expr [string map {/ *1.0/} $e]]}] {
                                catch {uplevel #0 eval $e} res
                            }
                            set ::e $res
                        }
                        proc initdisplay {} {
                            variable e
                            pack [entry .e -textvar e -width 50 ]
                           bind .e <Return> {catch {expr [string map {/ *1./} $e]} res;set ::e $res } ;# RS & FR 
 
                        }}
                    namespace import ::tcl::mathop::\\+
                    namespace import ::tcl::mathop::\\*
                    namespace import ::tcl::mathop::\\-
                    namespace import ::tcl::mathop::\\/
                    proc pi {} {expr {acos(-1)}}  ;#AMG 
                    proc deg2rad {} {return [ expr {1.*[pi]/180.}  ]}        
                    proc !+ args { expr [join $args +] }
                    proc !* args { expr [join $args *] }
                    proc !- args { expr [join $args -] }
                    proc !/ args { expr [join $args *1./] }
                    proc !1/ args { expr [ join $args  +1./ ]}
                    proc linershell {} {
                        namespace import liner::*
                        liner::initdisplay
                        .e configure -bg palegreen
                        .e configure -fg black
                        .e configure -font {helvetica 50 bold}
                        .e configure -highlightcolor tan -relief raised -border 30
                        focus .e
                        button .a -text eval -command {liner::evalwild $e}
                        button .b -text clear -command {set e ""}
                        button .c -text exit -command {exit}
                        pack .a .b .c   -side left -padx 5
                        . configure  -bg palegreen
                        wm title . "Modified Line Calculator"
                    }
                    linershell
======  

----
*** tcl8.5 code scraps ***
======
 1% namespace import ::tcl::mathop::* ;#import all
 2% * 5 6 7 8 8
 13440
 3% * 2 2 2 2 2 2 2 2 2 2 
 1024
        proc call {args} {uplevel catch [list $args]}
        proc math { args } { set tcl_precision 17; puts [ expr [ expr { $args } ] ] }

======
                    # autoindent from ased editor
                    # program " Modified Line Calculator in Namespace"
                    # written on Windows XP on eTCL
                    # working under TCL version 8.5.6 and eTCL 1.0.1
                    # TCL WIKI , 24jun2011
                    package provide calculatorliner 1.0
                    namespace eval liner {
                        proc evalwild {e} {
                            if [catch {set res [expr [string map {/ *1.0/} $e]]}] {
                                catch {uplevel #0 eval $e} res
                            }
                            set ::e $res
                        }
                        proc initdisplay {} {
                            variable e
                            pack [entry .e -textvar e -width 50 ]
                           bind .e <Return> {catch {expr [string map {/ *1./} $e]} res;set ::e $res } ;# RS & FR 
 
                        }}
                    namespace path { ::tcl::mathop }
                    namespace path { ::tcl::mathfunc }
                    proc pi {} {expr {acos(-1)}}  ;#AMG 
                    proc deg2rad {} {return [ expr {1.*[pi]/180.}  ]}        
                    foreach {new existing} [ list !+ + !* * !- - ] {
                    interp alias {} $new {} $existing
                    }
                    proc linershell {} {
                        namespace import liner::*
                        liner::initdisplay
                        .e configure -bg palegreen
                        .e configure -fg black
                        .e configure -font {helvetica 50 bold}
                        .e configure -highlightcolor tan -relief raised -border 30
                        focus .e
                        button .a -text eval -command {liner::evalwild $e}
                        button .b -text clear -command {set e ""}
                        button .c -text exit -command {exit}
                        pack .a .b .c   -side left -padx 5
                        . configure  -bg palegreen
                        wm title . "Modified Line Calculator"
                    }
                    linershell
======  


<<categories>> Numerical Analysis | Toys | Calculator | Example | Package} regexp2} CALL {my render {Command Line  Calculator in Namespace Package Example} {***Command Line Calculator in Namespace Package Example***
----   
This page is under development. Comments are
welcome, but please load any comments
in the comments section 
at the middle of the page. Thanks,[gold]
----
[gold] Here is an eTCL  script for
command line calculator in a namespace.
The 2 line calculator in [A little calculator] 
from [Richard Suchenwirth] et al can be packaged
with a namespace. For those with bad eyes, the 
text shown with green background and big black font
has been shown as easier to read than most, as
in the old DOS program Wordstar. The window cut and paste
procedures in [label] can be added to the namespace for screen capture
of output.

---- 
For the second example, the two line calculator is modified 
to switch to some operator notation. We would like some operators
in the calculator like * 1 2 3 = 6 and + 4 5 = 20. For the switch in the eval button,
the if{catch ...expr fails } aborts to an eval command. The return
action was left as before.
----
The program is testing some one line procedures for operator math. This modifies the sum of list procedure from [RS] in [the Zen of Tcl] and [Elegance vs. performance] and see reference [Math Operators as Commands].The commands are in the form of !+ 4 5 6= 15, !* 1 2 3 =6, !- 1 2 3 =-4, and !/ 2 3 = 0.66666. The  multiplication with polish notation seems a useful procedure for the TCL calculators, as well as the reciprocal procedure (!1/ below). Assuming at least two arguments, the reciprocal procedure !1/ 1 2 would give the sum of 1/1 and 1/2 or 1.5 The program checked some of the trivial arguments, but not all (eg. !* 0 = 0, !- 0 = 0, !/ 0 = 0,!1/ 1 = 1,!+ 1 = 1,!* 1= 1 )
----
The program is  importing the +*-/ commands from [tcl::mathop]. These commands are working
in the form of  + 1 2 3 =6, * 4 5  = 20,  - 5 4 =1, and so on. The trig commands are working as
sin(.45) and cos(.30). The user can draw pi, deg2rad, and other procedures from [Oneliner's Pie in the Sky].
To put the math procedures inside the namespace, the  catch {uplevel #0 eval $e} res
statement can be modified to catch { eval $e} res


----
 Testcase 1.
 Examples of operator notation from command line,
 importing [tcl::mathops], and math local procedures.
 Most of these are cut and paste from console operation.
 As discussed below, the local math procedures are not
 as efficient as importing mathops or mathfunc.
%|quantity|notation|result|enabling statement|%
&| a | * 1 2 3 |6|namespace import ::tcl::mathop::* ;# import all|&
&| b |+ 1 2 3  |6|namespace import ::tcl::mathop::\\+|&
&| c | - 1 2 3 |-5|namespace import ::tcl::mathop::\\-|&
&| d | !1/ 1 2 |1.5|proc !1/ args { expr [ join $args  +1./ ]}|&
&| e |!+ 1 2 3|6|proc !+ args { expr [ join $args  + ]}|&
&| f |* 5 6 7 8 8|13440|namespace import ::tcl::mathop::\\*|&
&| g |* 2 2 2 2 2 2 2 2 2 2 |1024|namespace import ::tcl::mathop::\\*|&
&| h|* 4 5|20|namespace import ::tcl::mathop::\\*|&
&|i |+ 4 5 |9|namespace import ::tcl::mathop::\\+|&
&|1a |pi |3.14|proc pi {} {expr {acos(-1)}}  ;#AMG |&
&|1b |3.*[[pi]] |9.42|proc pi {} {expr {acos(-1)}}  ;#AMG |&
&|2a| [deg2rad]|0.0174|                    proc deg2rad {} {return [ expr {1.*[pi]/180.}  ]}|& 
&|3a| [rad2deg]|57.295|                    proc rad2deg {} {return [ expr {180./1.*[pi]}  ]}|& 
&| 4a | sqrt 5  |2.23|namespace import ::tcl::mathfunc::* ;# import all|&

----


***Screenshots Section***
[http://img846.imageshack.us/img846/1619/image41c.gif]

----
'''Comments Section'''

Please place any comments here, Thanks.

In your second example, you have these code snippets:

======
  namespace import ::tcl::mathop::\\+
  namespace import ::tcl::mathop::\\*
  namespace import ::tcl::mathop::\\-
  mamespace import ::tcl::mathop::\\/
======

On all but the import of * the \\ is superflurous, in that the only characters that are special to namespace import are glob-style characters (* and ?).  However, all four lines can be replaced by this:

======
  namespace path { ::tcl::mathop }
======

With the result that not does +, -, *, and / become available, but every other ::tcl::mathop is also becomes available for use.

A bit further down, you have this:

======
  proc !+ args { expr [join $args +] }
  proc !* args { expr [join $args *] }
  proc !- args { expr [join $args -] }
======

If you make accessible the +, -, and * procs via namespace path/import, then you do not need to perform an expr indirection and join on arguments, because the ::tcl::mathop procs for +, -, and * already handle plural arguments:

======
  % + 1 2 3
  6
======

If you prefer the "look" of !+, !*, and !-, there is a much more efficient way of achieving the same.  Setup an interpreter alias:

======
  foreach {new existing} [ list !+ + !* * !- - ] {
    interp alias {} $new {} $existing
  }
======

Now you have !+, !*, and !- available, but without the overhead of 1) a local proc call, 2) a join of arguments, and an expr call (to then parse the joined arguments).
----
[gold] Changed  namespace import ::tcl::mathop::\\+, etc to
namespace path { ::tcl::mathop }. Installed  namespace path { ::tcl::mathfunc }
Changed some local math procs 
to renamed mathops. Thanks.

----
***References:***
   * http://www.spsu.edu/cs/faculty/bbrown/web_lectures/postfix/
   * http://en.wikipedia.org/wiki/Polish_notation, 1924
   * [expr]
   * [Importing expr functions]
   * [RPN]
   * [Parsing Polish notation]
   * [Category Package] 
   * [Importing expr functions, part 2]
   * [Call Procedure Like Fortran Example]
   * [namespace]
   * [package]
   * [tcl::mathop]
   * [tcl::mathfunc]
   * [Namespace resolution of Variables & Procedures]
   * [http://en.wikibooks.org/wiki/Tcl_Programming/expr]
   * [A little calculator]
   * [A minimal console]



----

****Appendix Code****
****appendix TCL programs and scripts ****
---- 

****Pretty Print Version *** 
***Trial Version under test***
----
***First Example***
======         
                  # autoindent from ased editor
                  # program " 2 Line Calculator in Namespace"
                  # written on Windows XP on eTCL
                  # working under TCL version 8.5.6 and eTCL 1.0.1
                  # TCL WIKI , 25may2011
         package provide calculatorliner 1.0
            namespace eval liner {
                proc initdisplay {} {
                    pack [entry .e -textvar e -width 50 ]
                    bind .e <Return> {catch {expr [string map {/ *1./} $e]} res; set e $res} ;# RS & FR
                }}
            proc linershell {} {
                namespace import liner::*
                liner::initdisplay
                .e configure -bg palegreen
                .e configure -fg black
                .e configure -font {helvetica 50 bold}
                .e configure -highlightcolor tan -relief raised -border 30                                   
                focus .e
                button .b -text clear -command {set e ""} 
                button .c -text exit -command {exit} 
                pack .b .c   -side left -padx 5
                . configure  -bg palegreen
                wm title . "Suchenwirth 2 Line Calculator"
            }
            linershell
======
----
***Second Example***
======
                    # autoindent from ased editor
                    # program " Modified Line Calculator in Namespace"
                    # written on Windows XP on eTCL
                    # working under TCL version 8.5.6 and eTCL 1.0.1
                    # TCL WIKI , 24jun2011
                    package provide calculatorliner 1.0
                    namespace eval liner {
                        proc evalwild {e} {
                            if [catch {set res [expr [string map {/ *1.0/} $e]]}] {
                                catch {uplevel #0 eval $e} res
                            }
                            set ::e $res
                        }
                        proc initdisplay {} {
                            variable e
                            pack [entry .e -textvar e -width 50 ]
                           bind .e <Return> {catch {expr [string map {/ *1./} $e]} res;set ::e $res } ;# RS & FR 
 
                        }}
                    namespace import ::tcl::mathop::\\+
                    namespace import ::tcl::mathop::\\*
                    namespace import ::tcl::mathop::\\-
                    namespace import ::tcl::mathop::\\/
                    proc pi {} {expr {acos(-1)}}  ;#AMG 
                    proc deg2rad {} {return [ expr {1.*[pi]/180.}  ]}        
                    proc !+ args { expr [join $args +] }
                    proc !* args { expr [join $args *] }
                    proc !- args { expr [join $args -] }
                    proc !/ args { expr [join $args *1./] }
                    proc !1/ args { expr [ join $args  +1./ ]}
                    proc linershell {} {
                        namespace import liner::*
                        liner::initdisplay
                        .e configure -bg palegreen
                        .e configure -fg black
                        .e configure -font {helvetica 50 bold}
                        .e configure -highlightcolor tan -relief raised -border 30
                        focus .e
                        button .a -text eval -command {liner::evalwild $e}
                        button .b -text clear -command {set e ""}
                        button .c -text exit -command {exit}
                        pack .a .b .c   -side left -padx 5
                        . configure  -bg palegreen
                        wm title . "Modified Line Calculator"
                    }
                    linershell
======  

----
*** tcl8.5 code scraps ***
======
 1% namespace import ::tcl::mathop::* ;#import all
 2% * 5 6 7 8 8
 13440
 3% * 2 2 2 2 2 2 2 2 2 2 
 1024
        proc call {args} {uplevel catch [list $args]}
        proc math { args } { set tcl_precision 17; puts [ expr [ expr { $args } ] ] }

======
                    # autoindent from ased editor
                    # program " Modified Line Calculator in Namespace"
                    # written on Windows XP on eTCL
                    # working under TCL version 8.5.6 and eTCL 1.0.1
                    # TCL WIKI , 24jun2011
                    package provide calculatorliner 1.0
                    namespace eval liner {
                        proc evalwild {e} {
                            if [catch {set res [expr [string map {/ *1.0/} $e]]}] {
                                catch {uplevel #0 eval $e} res
                            }
                            set ::e $res
                        }
                        proc initdisplay {} {
                            variable e
                            pack [entry .e -textvar e -width 50 ]
                           bind .e <Return> {catch {expr [string map {/ *1./} $e]} res;set ::e $res } ;# RS & FR 
 
                        }}
                    namespace path { ::tcl::mathop }
                    namespace path { ::tcl::mathfunc }
                    proc pi {} {expr {acos(-1)}}  ;#AMG 
                    proc deg2rad {} {return [ expr {1.*[pi]/180.}  ]}        
                    foreach {new existing} [ list !+ + !* * !- - ] {
                    interp alias {} $new {} $existing
                    }
                    proc linershell {} {
                        namespace import liner::*
                        liner::initdisplay
                        .e configure -bg palegreen
                        .e configure -fg black
                        .e configure -font {helvetica 50 bold}
                        .e configure -highlightcolor tan -relief raised -border 30
                        focus .e
                        button .a -text eval -command {liner::evalwild $e}
                        button .b -text clear -command {set e ""}
                        button .c -text exit -command {exit}
                        pack .a .b .c   -side left -padx 5
                        . configure  -bg palegreen
                        wm title . "Modified Line Calculator"
                    }
                    linershell
======  


<<categories>> Numerical Analysis | Toys | Calculator | Example | Package}} CALL {my revision {Command Line  Calculator in Namespace Package Example}} CALL {::oo::Obj641738 process revision/Command+Line++Calculator+in+Namespace+Package+Example} CALL {::oo::Obj641736 process}

-errorcode

NONE

-errorinfo

Unknow state transition: LINE -> END
    while executing
"error $msg"
    (class "::Wiki" method "render_wikit" line 6)
    invoked from within
"my render_$default_markup $N $C $mkup_rendering_engine"
    (class "::Wiki" method "render" line 8)
    invoked from within
"my render $name $C"
    (class "::Wiki" method "revision" line 31)
    invoked from within
"my revision $page"
    (class "::Wiki" method "process" line 56)
    invoked from within
"$server process [string trim $uri /]"

-errorline

4