[Michael Jacobson] 8/9/02 ~ In [NewzPoint] there is a comic page generator that gets the current comics from uComics.com and displays them in a single page. I have updated some of this code for my current release and this is a standalone version. To use just run this code in Wish and then point your browser at http://localhost:9108/Comic . The server behind this code just takes the arguments (+ seperated) and executes them in a safe interp. So you can also do commands like http://localhost:9108/info+command or http://localhost:9108/set+a+23 . Have fun with this... [MPJ] 10/29/02 ~ fixed generated title of History page ---- if {0} { Comic Server by Michael Jacobson Usage: Launch the server in Wish and then point your browser to http://localhost:9108/Comic this will dynamiclly generate a current comic page. I have tested this in Mozilla and IE and it seems to work (based on NewzPoint comic page code) } proc Comic {} { global topdir set comic_delay {Doodles 3 \ {Calvin and Hobbes} 4018 \ {Captain RibMan} 1 \ {Reynolds Unwrapped} 4} set comic_info {tmann {Annie} \ tmbre {Brenda Starr} \ tmbro {Broom Hilda} \ tmdic {Dick Tracy} \ tmfba {Fred Basset} \ tmgas {Gasoline Alley} \ tmgil {Gil Thorp} \ ad {Adam@Home} \ ba {Baldo} \ bo {Boondocks} \ ch {Calvin and Hobbes} \ cs {Crankshaft} \ ft {FoxTrot} \ fu {The Fusco Brothers} \ ga {Garfield} \ hc {Heart of the City} \ jm {James} \ tmlol {Lola} \ tmmid {The Middletons} \ mb {Mister Boffo} \ tmmon {Monkey House} \ pr {Preteena} \ ss {Stone Soup} \ wes {Willy 'N Ethel} \ bi {The Big Picture} \ ca {Cathy} \ cr {Crabby Road} \ dp {The Duplex} \ tmdun {Dunigan's People} \ tmkud {Kudzu} \ tmmee {Meehan Streak} \ tmplu {Pluggers} \ rl {Real Life Adventures} \ tmsho {Shoe} \ tmtja {That's Jake} \ tmcap {Captain RibMan} \ bz {Bizarro} \ cl {Close to Home} \ tmloo {Loose Parts} \ oe {Oddly Enough} \ ob {Overboard} \ tmqui {The Quigmans} \ rw {Reynolds Unwrapped} \ tmsyl {Sylvia} \ tmntf {9 to 5} \ tmbot {Bottomliners} \ co {Cornered} \ tmhel {Helen, Sweetheart of the Internet} \ psm {P.S. Mueller} \ tmddu {Dear Dudley} \ db {Doonesbury} \ nq {Non Sequitur} \ bl {In the Bleachers} \ tm {Tank McNamara} \ tmani {Animal Crackers} \ tmbou {Bound and Gagged} \ tmcat {Cats with Hands} \ tmmix {Mixed Media} \ zi {Ziggy} } set ComicOutput {} append ComicOutput {} "\n" append ComicOutput {} "\n" append ComicOutput {Daily Comic Page from ucomics.com} "\n" append ComicOutput {} "\n" append ComicOutput {} "\n" append ComicOutput "

Daily Comic Page

\n" append ComicOutput "Page Generated on [clock format [clock second] -format %c]
\n" set src {$name ~ " set offset 0 if {[lsearch $comic_delay $name] > -1} {set offset [lindex $comic_delay [expr [lsearch $comic_delay $name] + 1]]} append ComicOutput "Past Week ~ " append ComicOutput "Past Month\n" set outt $src if {[lsearch $comic_delay $name] == -1} { set year [clock format [clock second] -format %Y] set date [clock format [clock second] -format %y%m%d] } else { set day [lindex $comic_delay [expr [lsearch $comic_delay $name] + 1]] set sec [expr $day * 24 * 60 * 60] set year [clock format [expr [clock second] - $sec] -format %Y] set date [clock format [expr [clock second] - $sec] -format %y%m%d] } append outt $one/$year/$one$date append outt {.gif">} append ComicOutput "$outt\n" } append ComicOutput {} "\n" append ComicOutput {} "\n" } proc ComicHist {page freq {offset 0}} { set comic_info {tmann {Annie} \ tmbre {Brenda Starr} \ tmbro {Broom Hilda} \ tmdic {Dick Tracy} \ tmfba {Fred Basset} \ tmgas {Gasoline Alley} \ tmgil {Gil Thorp} \ ad {Adam@Home} \ ba {Baldo} \ bo {Boondocks} \ ch {Calvin and Hobbes} \ cs {Crankshaft} \ ft {FoxTrot} \ fu {The Fusco Brothers} \ ga {Garfield} \ hc {Heart of the City} \ jm {James} \ tmlol {Lola} \ tmmid {The Middletons} \ mb {Mister Boffo} \ tmmon {Monkey House} \ pr {Preteena} \ ss {Stone Soup} \ wes {Willy 'N Ethel} \ bi {The Big Picture} \ ca {Cathy} \ cr {Crabby Road} \ dp {The Duplex} \ tmdun {Dunigan's People} \ tmkud {Kudzu} \ tmmee {Meehan Streak} \ tmplu {Pluggers} \ rl {Real Life Adventures} \ tmsho {Shoe} \ tmtja {That's Jake} \ tmcap {Captain RibMan} \ bz {Bizarro} \ cl {Close to Home} \ tmloo {Loose Parts} \ oe {Oddly Enough} \ ob {Overboard} \ tmqui {The Quigmans} \ rw {Reynolds Unwrapped} \ tmsyl {Sylvia} \ tmntf {9 to 5} \ tmbot {Bottomliners} \ co {Cornered} \ tmhel {Helen, Sweetheart of the Internet} \ psm {P.S. Mueller} \ tmddu {Dear Dudley} \ db {Doonesbury} \ nq {Non Sequitur} \ bl {In the Bleachers} \ tm {Tank McNamara} \ tmani {Animal Crackers} \ tmbou {Bound and Gagged} \ tmcat {Cats with Hands} \ tmmix {Mixed Media} \ zi {Ziggy} } foreach {one name} $comic_info { if {[string equal $one $page]} { regsub -all {@} $name {at} newname regsub -all {'} $newname {} newname regsub -all { } $newname {} newname regsub -all {,} $newname {} newname regsub -all {\.} $newname {} newname break } } set ComicOutput {} append ComicOutput {} "\n" append ComicOutput {} "\n" append ComicOutput "History Comic Page for $name" "\n" append ComicOutput {} "\n" append ComicOutput {} "\n" append ComicOutput "

History Comic Page for $name

\n" append ComicOutput "Page Generated on [clock format [clock second] -format %c]
\n" set src {$linkpage\n" set outt $src set year [clock format $adjclksec -format %Y] set date [clock format $adjclksec -format %y%m%d] append outt $one/$year/$one$date append outt {.gif">} append ComicOutput "$outt\n" } return $ComicOutput } # run all the requested commands in the safe interp interp create -safe foo # link in the two above procs to the safe interp interp alias foo ComicHist {} ComicHist interp alias foo Comic {} Comic # http server modified from JCW's hpeek.tcl proc http_start {port} { global http_fd if {$port} { set http_fd [socket -server http_accept $port] } } # accept a new incoming tcp/ip connection proc http_accept {sock h p} { fconfigure $sock -blocking 0 fileevent $sock readable [list http_request $sock] } # process an http request proc http_request {sock} { set line [gets $sock] if {[fblocked $sock]} return fileevent $sock readable "" fconfigure $sock -buffering full set p / regexp {/[^ ]*} $line p regsub -all / $p :: p puts $sock "HTTP/1.0 200 OK\n" set p [string trimleft $p :] regsub -all "::" $p "/" p fconfigure $sock -encoding binary -translation binary set cmd [lindex [split $p +] 0] if {[lsearch [foo eval info command] $cmd] != -1} { catch {foo eval [split $p +]} genout puts -nonewline $sock $genout } else { puts -nonewline $sock "Not a valid User Script" } catch {flush $sock} catch {close $sock} } if {$argv == ""} { set port 9108 } else { set port [lindex $argv 0] } catch {http_start $port}