# $Id: view.tcl 1204 2009-02-02 19:54:23Z hubert@u.washington.edu $ # ======================================================================== # Copyright 2006 University of Washington # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # ======================================================================== # view.tcl # # Purpose: CGI script to generate html output associated # with a message's particular text displayed in # the "body" frame # Input: set view_vars { {message {} 0} {first {} 1} {top {} 0} {bod_first {} 0} {bod_prev {} 0} {bod_next {} 0} {bod_last {} 0} {fullhdr {} ""} {reload {} 0} {uid {} 0} {cid {} 0} {goto {} ""} {gonum {} 0} {save {} ""} {f_name {} ""} {f_colid {} 0} {takecancel {} ""} {savecancel {} 0} {auths {} 0} {user {} ""} {pass {} ""} {create {} 0} {flipdelete {} 0} {delete {} ""} {undelete {} ""} {replyall {} ""} {replytext {} ""} {submitted {} 0} {printable {} 0} {op {} ""} {showimg {} ""} } # Output: # # HTML/Javascript/CSS data representing the message specified # by the 'uid' argument #set use_icon_for_status 1 set hacktoken __URL__TEXT__ ## read vars foreach item $view_vars { if {[catch {cgi_import [lindex $item 0].x}]} { if {[catch {eval WPImport $item} errstr]} { error [list _action "Impart Variable" $errstr] } } else { set [lindex $item 0] 1 } } if {[catch {WPCmd PEInfo key} webpine_key]} { error [list _action "command ID" $webpine_key] } # make sure message to be "viewed" is still available catch {unset errstr} if {[catch {WPCmd PEMailbox messagecount} messagecount]} { set errstr $messagecount } elseif {$uid > 0 && [catch {WPCmd PEMessage $uid number} message]} { set errstr $message } elseif {$message > 0 && $message <= $messagecount && [catch {WPCmd PEMailbox uid $message} uid]} { set errstr $uid } elseif {!($message && $uid)} { set errstr "Unknown message number" } if {[info exists errstr]} { switch $op { Reply - Forward { catch {WPCmd set wp_spec_script fr_view.tcl} catch {WPCmd set uid $uid} source [WPTFScript main] } default { cgi_http_head { WPStdHttpHdrs } cgi_html { cgi_head { WPHtmlHdrReload "$_wp(appdir)/$_wp(ui1dir)/wp.tcl?page=view" WPStyleSheets } cgi_body bgcolor=#ffffff { cgi_table border=0 width="100%" height="100%" { cgi_table_row { cgi_table_data width="20%" { cgi_put [cgi_img [WPimg dot2] border=0 height=1] } cgi_table_data bgcolor=#ffffff class=notice { cgi_puts "\[[cgi_nbspace]" if {[string first "PEMessage: UID " $errstr] >= 0} { cgi_puts "The message referred to is no" cgi_puts "longer available." cgi_p cgi_puts "An error has been detected that indicates you may" cgi_puts "have WebPine running in multiple browser windows." cgi_p cgi_puts "Please close all other windows that are displaying" cgi_puts "WebPine pages." } else { cgi_puts "Message Unavailable: $errstr." } cgi_p cgi_puts "Click \"[cgi_url [WPCmd PEMailbox mailboxname] fr_index.tcl target=spec]\" in the column on the left to return to the updated Message List.[cgi_nbspace]\]" } cgi_table_data width="20%" { cgi_put [cgi_img [WPimg dot2] border=0 height=1] } } } } } } } } else { # make sure any caching doesn't screw this setting catch {WPCmd set wp_spec_script fr_view.tcl} set zoomed [WPCmd PEMailbox zoom] set onload "onLoad=" set onunload "onUnload=" if {[info exists _wp(exitonclose)]} { set closescript [cgi_buffer WPExitOnClose] append onload "wpLoad();" append onunload "wpUnLoad();" } # perform any requested actions if {$flipdelete == 1} { if {$cid != $webpine_key} { lappend newmail [list "Can't Delete: Invalid command ID!"] } elseif {[WPCmd PEMessage $uid flag deleted]} { if {[catch {WPCmd PEMessage $uid flag deleted 0} result]} { lappend newmail [list "Error UNdeleting $message: $result"] } } else { if {[catch {WPCmd PEMessage $uid flag deleted 1} result]} { lappend newmail [list "Error deleting $message: $result"] } else { # bug: handle delete-skips-deleted set message [WPCmd PEMailbox next [WPCmd PEMessage $uid number]] set uid [WPCmd PEMailbox uid $message] } } } elseif {[string compare "report spam" [string tolower $op]] == 0} { if {[info exists _wp(spamaddr)] && [string length $_wp(spamaddr)]} { if {$cid != $webpine_key} { lappend newmail [list "Can't Spamify: Invalid command ID!"] } else { if {[info exists _wp(spamfolder)] && [string length $_wp(spamfolder)] && [catch { set savedef [WPCmd PEMailbox savedefault] if {[WPCmd PEFolder exists [lindex $savedef 0] $_wp(spamfolder)] == 0} { WPCmd PEFolder create [lindex $savedef 0] $_wp(spamfolder) } WPCmd PEMessage $uid save [lindex $savedef 0] $_wp(spamfolder) } result]} { lappend newmail [list "Error spamifying message $message: $result"] } elseif {[catch {WPCmd PEMessage $uid flag deleted 1} result]} { lappend newmail [list "Error spamifying message $message: $result"] } else { set n [WPCmd PEMessage $uid number] if {[info exists _wp(spamsubj)]} { set subj $_wp(spamsubj) } else { set subj "" } if {[catch {WPCmd PEMessage $uid spam $_wp(spamaddr) $subj} result]} { lappend newmail [list "Can't Report Spam: $result"] } else { lappend newmail [list "Message $n reported as Spam and flagged for deletion"] } } } } } elseif {$delete == 1 || [string compare delete [string tolower $op]] == 0} { if {$cid != $webpine_key} { lappend newmail [list "Can't Delete: Invalid command ID!"] } elseif {[catch {WPCmd PEMessage $uid flag deleted 1} result]} { lappend newmail [list "Error deleting message $message: $result"] } else { set n [WPCmd PEMessage $uid number] # lappend newmail [list "Message $n deleted"] # bug: handle delete-skips-deleted set message [WPCmd PEMailbox next $n] set uid [WPCmd PEMailbox uid $message] lappend newmail [list "Message $n flagged for deletion"] } } elseif {$delete == 0 || $undelete == 1 || [string compare undelete [string tolower $op]] == 0} { if {$cid != $webpine_key} { catch {WPCmd PEInfo statmsg "Invalid command ID!"} } elseif {[catch {WPCmd PEMessage $uid flag deleted 0}]} { lappend newmail [list "Error UNdeleting message $message"] } else { lappend newmail [list "Deletion mark for message [WPCmd PEMessage $uid number] removed"] } } elseif {[string length $goto]} { if {[regexp {^([0-9]+)$} $gonum n]} { if {$n > 0 && $n <= [WPCmd PEMailbox last]} { set message $n set uid [WPCmd PEMailbox uid $message] } else { lappend newmail [list "Jump value out of range: $gonum"] } } else { if {[string length $gonum]} { lappend newmail [list "Unrecognized Jump value: $gonum"] } else { lappend newmail [list "Enter message number, then click 'Jump'"] } } } elseif {$savecancel == 1 || [string compare cancel [string tolower $savecancel]] == 0} { lappend newmail [list "Save cancelled. Folder not created."] } elseif {[string compare browse [string tolower $op]] == 0} { _cgi_set_uservar onselect main _cgi_set_uservar oncancel main _cgi_set_uservar controls 2 source [WPTFScript savebrowse] set nopage 1 } elseif {[string compare take [string tolower $op]] == 0} { source [WPTFScript take] set nopage 1 } elseif {[string compare "take address" [string tolower $op]] == 0} { _cgi_set_uservar take 1 set addrs "" if {[catch {cgi_import taList}] == 0} { foreach ta $taList { if {[catch {cgi_import_as ${ta}p xp}]} { set xp "" } if {[catch {cgi_import_as ${ta}m xm}]} { set xm "" } if {[catch {cgi_import_as ${ta}h xh}]} { set xh "" } lappend alist [list $xp $xm $xh] } switch [llength $alist] { 0 { _cgi_set_uservar addrs "" } 1 { set a [lindex $alist 0] _cgi_set_uservar fn [lindex $a 0] _cgi_set_uservar addrs [WPPercentQuote "[lindex $a 1]@[lindex $a 2]"] } default { set addrs "" foreach a $alist { if {[string length $addrs]} { append addrs "," } append addrs [WPPercentQuote "[lindex $a 0] <[lindex $a 1]@[lindex $a 2]>"] } _cgi_set_uservar addrs $addrs } } source [WPTFScript takeedit] } else { WPCmd PEInfo statmsg "Take Address cancelled. No addresses selected." source [WPTFScript main] } set nopage 1 } elseif {[string compare cancel [string tolower $takecancel]] == 0} { source [WPTFScript main] set nopage 1 } elseif {[string compare forward [string tolower $op]] == 0} { _cgi_set_uservar style Forward source [WPTFScript compose] set nopage 1 } elseif {[string compare reply [string tolower $op]] == 0} { _cgi_set_uservar style Reply _cgi_set_uservar repqstr [WPCmd PEMessage $uid replyquote] source [WPTFScript compose] set nopage 1 } elseif {[string compare save [string tolower $op]] == 0} { if {[catch {WPCmd PEMessage $uid save $f_colid $f_name} reason]} { #statmsg "Save failed: $reason" lappend newmail [list "Save failed: $reason"] } else { set savedef [WPTFSaveDefault $uid] if {[lindex $savedef 0] == $f_colid} { WPTFAddSaveCache $f_name } if {[WPCmd PEInfo feature save-will-not-delete] == 0} { if {[catch {WPCmd PEMessage $uid flag deleted 1} reason]} { # statmsg "Cannot delete saved message: $reason" lappend newmail [list "Cannot delete saved message: $reason"] } } } } elseif {$bod_first} { set u $uid set message [WPCmd PEMailbox first] set uid [WPCmd PEMailbox uid $message] if {$zoomed && $u == $uid} { lappend newmail [list "Already on first of the Marked messages"] } } elseif {$bod_prev} { set u $uid set message [WPCmd PEMailbox next [WPCmd PEMessage $uid number] -1] set uid [WPCmd PEMailbox uid $message] if {$zoomed && $u == $uid} { lappend newmail [list "Already on first of the Marked messages"] } } elseif {$bod_next} { set u $uid set message [WPCmd PEMailbox next [WPCmd PEMessage $uid number]] set uid [WPCmd PEMailbox uid $message] if {$zoomed && $u == $uid} { lappend newmail [list "Already on last of the Marked messages"] } } elseif {$bod_last} { set u $uid set message [WPCmd PEMailbox last] set uid [WPCmd PEMailbox uid $message] if {$zoomed && $u == $uid} { lappend newmail [list "Already on last of the Marked messages"] } } if {![info exists nopage]} { switch -exact -- [WPCmd PEMailbox state] { readonly { lappend newmail [list [cgi_span "style=color: black; margin: 2 ; border: 1px solid red; background-color: pink; font-weight: bold" "Deleted messages may reapper because [WPCmd PEMailbox mailboxname] is Read Only"]] } closed { lappend newmail [list [cgi_span "style=color: black; border: 1px solid red; background-color: pink; font-weight: bold" "Message body may be blank because [WPCmd PEMailbox mailboxname] is Closed"]] } ok - default {} } if {[catch {WPNewMail $reload ""} newmailmsg]} { error [list _action "new mail" $newmailmsg] } else { foreach i $newmailmsg { lappend newmail $i } if {[info exists newmail] == 0} { set newmail "" } } if {$uid <= 0} { lappend newmail [list "Message $message has UID 0!"] } if {[WPCmd PEInfo feature enable-full-header-cmd]} { if {[string length $fullhdr]} { if {[WPCmd PEInfo mode full-header-mode]} { if {$fullhdr == 0 || [string compare $fullhdr "off"] == 0} { WPCmd PEInfo mode full-header-mode 0 } } else { if {$fullhdr == 1 || [string compare $fullhdr "on"] == 0} { WPCmd PEInfo mode full-header-mode 2 } } } if {[WPCmd PEInfo mode full-header-mode]} { set hmode "fullhdr=off" set text [cgi_imglink nofullhdr] } else { set hmode "fullhdr=on" set text [cgi_imglink fullhdr] } set hmode_url [cgi_url $text "wp.tcl?page=body&$hmode" name=hmode target=body style=vertical-align:middle] } if {$uid} { # preserve any new uid val WPCmd set uid $uid } if {[catch {WPCmd PEMessage $uid charset} charset] || [string length $charset] == 0 || [string compare us-ascii [string tolower $charset]] == 0} { set charset "ISO-8859-1" } catch {fconfigure stdout -encoding binary} cgi_http_head { WPStdHttpHdrs "text/html; charset=$charset" } cgi_html { cgi_head { cgi_http_equiv Content-Type "text/html; charset=$charset" set normalreload [cgi_buffer {WPHtmlHdrReload "$_wp(appdir)/$_wp(ui1dir)/wp.tcl?page=body&uid=$uid"}] if {[info exists _wp(exitonclose)]} { cgi_puts $closescript cgi_script type="text/javascript" language="JavaScript" { cgi_put "function viewReloadTimer(t){" cgi_put " reloadtimer = window.setInterval('wpLink(); window.location.replace(\\'[cgi_root]/$_wp(appdir)/$_wp(ui1dir)/wp.tcl?page=body&reload=1\\')', t * 1000);" cgi_puts "}" } append onload "viewReloadTimer($_wp(refresh));" cgi_noscript { cgi_puts $normalreload } } else { cgi_puts $normalreload } if {[info exists _wp(timing)]} { cgi_script type="text/javascript" language="JavaScript" { cgi_puts "var loadtime = new Date();" cgi_puts "var submitted = $submitted;" cgi_puts "function fini() {var now = new Date(); window.status = 'Page loaded in '+(now.getTime() - loadtime.getTime())/1000+' seconds';}" } append onload "fini();" } WPStyleSheets if {$_wp(keybindings)} { set kequiv { {{?} {top.location = 'wp.tcl?page=help'}} {{l} {top.location = 'wp.tcl?page=folders'}} {{a} {top.location = 'wp.tcl?page=addrbook'}} {{n} {top.spec.body.location = 'wp.tcl?page=view&bod_next=1'}} {{p} {top.spec.body.location = 'wp.tcl?page=view&bod_prev=1'}} {{i} {top.spec.location = 'fr_index.tcl'}} {{s} {top.spec.cmds.document.saveform.f_name.focus()}} {{d} {top.spec.cmds.document.delform.op[0].click()}} {{u} {top.spec.cmds.document.delform.op[1].click()}} {{r} {top.spec.cmds.document.replform.op.click()}} {{f} {top.spec.cmds.document.forwform.op.click()}} } lappend kequiv [list {c} "top.location = 'wp.tcl?page=compose&oncancel=main.tcl&cid=[WPCmd PEInfo key]'"] if {[info exists hmode_url]} { lappend kequiv [list {h} "top.spec.body.location = 'wp.tcl?page=view&$hmode'"] } append onload [WPTFKeyEquiv $kequiv] } } set fgcolor [set normal_fgcolor [WPCmd PEInfo foreground]] set bgcolor [WPCmd PEInfo background] cgi_body bgcolor=white $onload $onunload { catch {WPCmd set help_context view} set infont 0 set inurl 0 if {[llength $newmail]} { cgi_division align=center "style=\"border: 1px solid black; background: $_wp(bordercolor)\"" { WPTFStatusTable $newmail 1 "style=\"padding: 6px 0\"" } } cgi_table width="100%" border=0 cellpadding=2 cellspacing=0 { # Context cgi_table_row { if {$zoomed} { set marked " [cgi_bold marked]" set c $zoomed } else { set marked "" set c $messagecount } cgi_table_data align=left valign=middle class=context { # write message number if {[catch {WPCmd PEMailbox messagecount before [WPCmd PEMessage $uid number]} prior]} { set prior 0 } if {[catch {WPCmd PEMailbox messagecount after [WPCmd PEMessage $uid number]} remaining]} { set remaining 0 } if {$c == 1} { set msgnotext "Only${marked} Message in [WPCmd PEMailbox mailboxname]" } elseif {$remaining == 0} { set msgnotext "[cgi_bold Last] of [WPcomma $c]${marked} message[WPplural $c]" } elseif {$prior == 0} { set msgnotext "[cgi_bold First] of [WPcomma $c]${marked} message[WPplural $c]" } else { if {[string length $marked]} { append marked " messages" set n [expr {$zoomed - $remaining}] set msgnotext "Message [WPcomma $message] ($n of [WPcomma $c] [cgi_bold marked] messages)" } else { set msgnotext "Message [WPcomma $message] of [WPcomma $c]" } } if {[info exists use_icon_for_status]} { set staticon "[WPStatusImg $uid] " set stattext "" } else { set staticon "" switch -regexp [lindex [WPStatusIcon $uid] 0] { del { set stattext " (Deleted)" } new { set stattext " (New)" } default { set stattext "" } } } cgi_put "${staticon}${msgnotext}${stattext}" } if {$printable} { cgi_table_data align=right valign=top bgcolor=#bfbfbf class=context { cgi_puts "Folder: [WPCmd PEMailbox mailboxname]" } } else { if {[info exists common_goto_in_view_specific_frame]} { cgi_table_data align=right valign=top bgcolor=#bfbfbf class=context { cgi_form $_wp(appdir)/$_wp(ui1dir)/wp method=get target=body { cgi_text "page=view" type=hidden notab cgi_text gonum= type=text size=4 maxlength=4 class=navtext cgi_submit_button "goto=Jump to Msg" class=navtext cgi_put [cgi_nbspace] } } } cgi_table_data align=right valign=top bgcolor=#bfbfbf class=context { cgi_put [cgi_url [cgi_img [WPimg printer2] border=0 style=vertical-align:baseline] wp.tcl?page=view&uid=$uid&printable=1 target=_blank "onClick=if(window.print){window.print();return false;}else return true;"] cgi_put [cgi_img [WPimg dot2] height=1 width=4] if {[info exists hmode_url]} { cgi_put $hmode_url } else { cgi_put [cgi_imglink dot] } } } } cgi_table_row { cgi_table_data valign=top bgcolor=#${bgcolor} class=view width="100%" colspan=2 { cgi_preformatted "style=\"color:#$normal_fgcolor\"" { #cgi_division "style=\"color: #$normal_fgcolor; font-family: courier\"" set msgtext [WPCmd PEMessage $uid text] # pre-scan message text for anything interesting foreach i $msgtext { foreach j $i { switch -exact [lindex $j 0] { img { if {![info exists showimages]} { # ONLY IMG tags in HTML text that reference ATTACHED IMAGE files are allowed if {[catch {WPCmd PEMessage $uid cid "<[lindex [lindex $j 1] 0]>"} cidpart] == 0 && [string length $cidpart] && [catch {WPCmd PEMessage $uid attachinfo $cidpart} attachinfo] == 0 && [string compare [string tolower [lindex $attachinfo 1]] image] == 0} { if {[catch {WPCmd PEMessage $uid fromaddr} fromaddr]} { set fromaddr "" } elseif {$showimg == 0} { if {[catch {WPSessionState allow_cid_images} friends] == 0} { while {[set findex [lsearch -exact $friends $fromaddr]] >= 0} { set friends [lreplace $friends $findex $findex] if {[catch {WPSessionState allow_cid_images $friends} friends]} { catch {WPCmd PEInfo statmsg "Cannot forget image sender: $friends"} break; } } } set showimg {} } if {[string length $showimg] || ([catch {WPSessionState allow_cid_images} friends] == 0 && [lsearch -exact $friends $fromaddr] >= 0)} { set showimages 1 if {[string length $fromaddr]} { set bodyleadin "\[ Attached images ARE being displayed \]" if {$showimg == 1} { append bodyleadin "[cgi_nl]\[ Always show images from [cgi_url "$fromaddr" "wp.tcl?page=body&showimg=[WPPercentQuote $fromaddr]"] \]" } else { append bodyleadin "[cgi_nl]\[ Never show images from [cgi_url "$fromaddr" "wp.tcl?page=body&showimg=0"] \]" if {[catch {WPSessionState allow_cid_images} friends] || [llength $friends] == 0} { set friends $fromaddr } elseif {[lsearch -exact $friends $fromaddr] < 0} { lappend friends $fromaddr } if {[catch {WPSessionState allow_cid_images $friends} friends]} { catch {WPCmd PEInfo statmsg "Cannot remember image sender: $friends"} } } } } else { set showimages 0 set bodyleadin "\[ Attached images are NOT being displayed \]" append bodyleadin "[cgi_nl]\[ Show images [cgi_url "below" "wp.tcl?page=body&showimg=1"]" if {[string length $fromaddr]} { append bodyleadin ", or always show images from [cgi_url "$fromaddr" "wp.tcl?page=body&showimg=[WPPercentQuote $fromaddr]"] \]" } else { append bodyleadin " \]" } } } } } default {} } } } set inbody 0 foreach i $msgtext { if {!$inbody && [llength $i] == 1 && [lindex [lindex $i 0] 0] == "t" && 0 == [string length [lindex [lindex $i 0] 1]]} { set inbody 1 if {[info exists bodyleadin]} { cgi_puts $bodyleadin } } foreach j $i { set ttype [lindex $j 0] set tdata [lindex $j 1] # write anchors by hand switch -- $ttype { urlstart { set href [lindex $tdata 0] set name [lindex $tdata 1] # build links by hand since we don't know where # they'll terminate set linktext "" set inurl 1 } urlend { if {$inurl} { cgi_put "" } } attach { set attachuid [lindex $tdata 0] set part [lindex $tdata 1] set mimetype [lindex $tdata 2] set mimesubtype [lindex $tdata 3] if {[string length [lindex $tdata 4]]} { set file [lindex $tdata 4] } else { if {[string length [lindex $tdata 5]]} { set file "attachment.[lindex $tdata 5]" } else { set file "unknown.txt" } } set attachurl "detach.tcl?uid=${attachuid}&part=${part}" set saveurl "${attachurl}&download=1" if {0 == [string compare -nocase $mimetype "text"] && 0 == [string compare -nocase $mimesubtype "html"]} { append attachurl "&download=1" } set attachexp "View ${mimetype}/${mimesubtype} Attachment" if {0 == [string compare message [string tolower ${mimetype}]] && 0 == [string compare rfc822 [string tolower ${mimesubtype}]]} { set attmsgurl "wp.tcl?page=compose&oncancel=main.tcl&cid=[WPCmd PEInfo key]&uid=${attachuid}&part=${part}&style=" cgi_put [cgi_url [cgi_font size=-1 Fwd] "${attmsgurl}Forward" target=_top] cgi_put "|[cgi_url [cgi_font size=-1 Reply] "${attmsgurl}Reply&reptext=1&repall=1&repqstr=[WPPercentQuote [WPCmd PEMessage $uid replyquote]]" target=_top]" } else { cgi_put [cgi_url [cgi_font size=-1 View] $attachurl target=_blank] cgi_put "|[cgi_url [cgi_font size=-1 Save] $saveurl]" } if {[info exists attachurl]} { set attachtext [WPurl $attachurl {} $hacktoken $attachexp target=_blank] } } img { if {[info exists showimages] && $showimages == 1 && [catch {WPCmd PEMessage $uid cid "<[lindex [lindex $j 1] 0]>"} cidpart] == 0 && [string length $cidpart] && [catch {WPCmd PEMessage $uid attachinfo $cidpart} attachinfo] == 0 && [string compare [string tolower [lindex $attachinfo 1]] image] == 0} { cgi_put [cgi_img detach.tcl?uid=${uid}&part=${cidpart} "alt=\[[lindex $tdata 1]\]"] } else { cgi_put "\[[lindex $tdata 1]\]" } } fgcolor { if {$infont} { cgi_put "" set infont 0 } if {[string compare $tdata $fgcolor]} { set fgcolor $tdata if {[string compare $fgcolor $normal_fgcolor]} { cgi_put "" set infont 1 } } } bgcolor { if {$infont} { cgi_put "" set infont 0 } if {[string compare $tdata $bgcolor]} { cgi_put "" set bgcolor $tdata set infont 1 } } color { if {$infont} { cgi_put "" set infont 0 } if {[string compare [lindex $tdata 0] $fgcolor] || [string compare [lindex $tdata 1] $bgcolor]} { cgi_put "" set bgcolor $tdata set infont 1 } } italic { switch $tdata { on { cgi_put "" } off { cgi_put "" } } } bold { switch $tdata { on { cgi_put "" } off { cgi_put "" } } } underline { switch $tdata { on { cgi_put "" } off { cgi_put "" } } } strikethru { switch $tdata { on { cgi_put "" } off { cgi_put "" } } } bigfont { switch $tdata { on { cgi_put "" } off { cgi_put "" } } } smallfont { switch $tdata { on { cgi_put "" } off { cgi_put "" } } } default { if {[info exists attachtext] && [set ht [string first $hacktoken $attachtext]] >= 0} { set firstbit [string range $attachtext 0 [expr {$ht - 1}]] set lastbit [string range $attachtext [expr {$ht + [string length $hacktoken]}] end] cgi_put " $firstbit[cgi_quote_html [string trimleft $tdata]]$lastbit" unset attachtext } else { cgi_put [cgi_quote_html $tdata] } } } } cgi_puts "" } } } } if {![info exists attachuid]} { if {!([catch {WPCmd PEMessage $uid attachinfo 1} typing] || [string compare [string tolower [lindex $typing 1]] text] || [string compare [string tolower [lindex $typing 2]] html])} { cgi_table_row { cgi_table_data align=center { cgi_puts [cgi_font font-family=fixed "\[Note: you may also [cgi_url view "detach.tcl?uid=${uid}&part=1" target=_blank] HTML message directly in your browser\]"] } } } } } if {$infont} { cgi_put "" } if {$inurl} { cgi_put "" } if {[info exists _wp(cumulative)]} { set l [string length $_wp(cumulative)] if {$l < 6} { set sl "." while {$l < 6} { append sl "0" incr l } append sl $_wp(cumulative) } else { set sl "[string range $_wp(cumulative) 0 [expr $l - 7]].[string range $_wp(cumulative) [expr $l - 6] end]" } set servlettime "servlet = $sl" if {[info exists wp_global_loadtime]} { set clickdiff [expr {[clock clicks] - $wp_global_loadtime}] # 500165 clicks/second set st [expr ([string range $clickdiff 0 [expr [string length $clickdiff] - 4]] * 1000) / 500] set l [string length $st] set scripttime "tcl = [string range $st 0 [expr $l - 4]].[string range $st [expr $l - 3] end], " } else { set scripttime "" } cgi_puts [cgi_font size=-2 "style=font-family:sans-serif;font-weight:bold" "\[time: ${scripttime}${servlettime}\]"] } } } } }