Hi!
I am quite new to [XO]Tcl and currently working on some scripts for Prof. Neumann's OO programming class. I run my scripts under Windows which has been working well so far - until I tried to run the "Cached WebPage" which depends upon one out of three offered storage resources.
In the slides, Prof. Neumann offers to use TextFile, Gdbm and Sdbm:
package require xotcl::store::textfile; set DBClass Storage=TextFile #package require xotcl::store::gdbm; set DBClass Storage=Gdbm #package require xotcl::store::sdbm; set DBClass Storage=Sdbm
In the "Cache" class this should be used like this:
Class Cache Cache instproc init {} { Storage=TextFile [self]::db ;# Erzeuge DB als Unterobjekt [self]::db open [self] ;# öffne DB mit aktuellen Namen des Objekts next }
Now I tried all three possibilities, uncommenting lines and changing the "Storage=Textfile|Gdbm|Sdbm" part of the script. The results leave me in confusion, since the errors seem to be all different:
[TextFile:] C:\Programme\tcl\scripts\stock>tclsh stock.xotcl couldn't open "::cache": no such file or directory while executing "::open $filename a+" (procedure "set" line 21) ::cache::db ::Storage=TextFile->set invoked from within "[self]::db set $url [list date $date content $page]" (procedure "store" line 4) ::cache ::Cache->store invoked from within "cache store $url $content" (procedure "loadPage" line 15) ::s1 ::CachedWebPage->loadPage invoked from within "my loadPage " (procedure "getContent" line 3) ::s1 ::WebPage->getContent invoked from within "my getContent" (procedure "getRate" line 4) ::s1 ::StockInfo->getRate invoked from within "s1 getRate" (file "stock.xotcl" line 116)
[Gdbm:] C:\Programme\tcl\scripts\stock>tclsh stock.xotcl can't find package xotcl::store::gdbm while executing "package require xotcl::store::gdbm" (file "includes.inc" line 4) invoked from within "source includes.inc" (file "stock.xotcl" line 1)
(-> Okay, the package is missing at all. I could make Stefan Vogel's Tcl wrapper port work - although the installation package was missing the pkgIndex.tcl file which he mailed me separately, but the XOTcl extension seems just not to be available under Windows. So, next I tried:)
[Sdbm:] C:\Programme\tcl\scripts\stock>tclsh stock.xotcl Open on '::cache::db' failed with '::cache'. ::cache::db ::Storage=Sdbm->open invoked from within "[self]::db open [self] " (procedure "init" line 4) ::cache ::Cache->init ::Cache ::xotcl::Class->create ::Cache ::xotcl::Class->unknown invoked from within "Cache cache " (file "stock.xotcl" line 87)
Source code is from Prof. Neumann: http://nm.wu-wien.ac.at/Lehre/oo2/stockinfo.xotcl I just commented out the package require Gdbm part and placed the three variants (see above) in the head of the script ("includes.inc" script). Plus, I replaced "Gdbm" in the Cache::init method by "TextFile" or "Sdbm" as appropriate.
Sorry this got lengthy ... I wonder if any of you ran into this once and has a hint for me. I'm stuck :( And sorry, I am a beginner, maybe I miss something obvious.
Thanks in advance!
Walter