Sorry that I am a little bit new in tcl/adp. My problem is that I have a code (rather old, authors are not already seen around) that has many ns_include statements. All have -sameframe option. Inside the include files I see a nice mix of ns_adp_argv access to explicitly passed parameters plus free usage of variables from call context, due to -sameframe set. As you say you solution will not work with ns_adp_argv (and I understand why).
Please give me some education on the following issue too: In the code discussed I see both ns_share and global used (in acddition to ns_include with parameters) to pass data to everywhere. I have read documentation, but unfortunatly my understanding of difference between global and ns_share did not improve with that reading. Nikolay Dossy wrote: > [ FYI, Nikolay, I'm cc'ing the AOLserver list on this reply, in case > others want to comment on this as well. ] > > On 2003.08.15, Nikolay Skachkov <[EMAIL PROTECTED]> wrote: > > The problem is that there is nothing much of intelegent to be done with > > -sameframe as such. The sameframe means that all the vatiables known at > > the ns_include position are implicitly passed inside include. This lets > > (or did let in vesrion 2.3 rather) write ns_include without parameters > > and they are without parameters. > > > > The _std_ns_include wrapper you propose would be a proc with what > > parameters? And with what parameters should I call it? - Apprently I > > have to call _std_ns_include with <list of variables to be passed into > > include> > > > > If I knew those list for each include, however, there will be > already no > > problem. But there are no lists in the current code. > > Drop this in your tcllib directory and call it something like > ns_adp_include_compat.tcl: > > ----8<-snip-here-8<---- > # > # From AOLserver 2.x docs at > http://aolserver.am.net/docs/2.3/tapi-c12.htm: > # > # ns_adp_include [-sameframe | -newframe] filename ?arg1? ?arg2? ?...? > # > proc ns_adp_include args { > if ![llength $args] { > error "wrong # args: should be \"ns_adp_include_compat > ?switch? filename ?arg1? ?arg2? ?...?\"" > } > > set switch -newframe > set filename [lindex $args 0] > set args [lrange $args 1 end] > > if [llength $args] { > if [regexp {^-(same|new)frame} $filename] { > set switch $filename > set filename [lindex $args 0] > set args [lrange $args 1 end] > } > } > > switch -exact -- $switch { > -newframe { > _ns_adp_include $filename $args > } > -sameframe { > # rest of $args gets thrown away, and you can't > ns_adp_bind_args > # and ns_adp_argc and ns_adp_argc won't work either. > set fd [open [ns_adp_dir]/$filename r] > set script [read $fd] > close $fd > regsub -all [format (%s%s.) < %] $script "\\1 uplevel {" > script > regsub -all [format (%s%s) % >] $script "} \\1" script > ns_adp_puts [ns_adp_eval $script] > } > } > } > ----8<-snip-here-8<---- > > WARNING WARNING WARNING WARNING -- This is absolutely ugly foul hackery > and I'll probably go to that extra-special place in programmer Hell for > people who allow code like this to enter into the world ... but, if > you're determined to squish square pegs into round holes, let me be the > first to give you a bigger hammer. ;-) > > > > "Huge rewrite" -- how many files/lines of code are we talking here? > > > > about 630 files, about 370 ns_includes > > That's tiny. I'd bet you a case of coca cola and a good meal that with > a bit of shell kung-fu and a few Tcl and Perl scripts, all your existing > code can be programmatically converted in an hour or two, with the rest > of the day spent running your regression tests. > > -- Dossy > > -- > Dossy Shiobara mail: [EMAIL PROTECTED] > Panoptic Computer Network web: http://www.panoptic.com/ > "He realized the fastest way to change is to laugh at your own > folly -- then you can let go and quickly move on." (p. 70) > -- AOLserver - http://www.aolserver.com/ To Remove yourself from this list, simply send an email to <[EMAIL PROTECTED]> with the body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: field of your email blank.