# # Copyright (c) 2016 D. Richard Hipp # # This program is free software; you can redistribute it and/or # modify it under the terms of the Simplified BSD License (also # known as the "2-Clause License" or "FreeBSD License".) # # This program is distributed in the hope that it will be useful, # but without any warranty; without even the implied warranty of # merchantability or fitness for a particular purpose. # # Author contact information: # drh@hwaci.com # http://www.hwaci.com/drh/ # ############################################################################ # # This is a fake text editor for use by tests. To customize its behavior, # set the FAKE_EDITOR_SCRIPT environment variable prior to evaluating this # script file. If FAKE_EDITOR_SCRIPT environment variable is not set, the # default behavior will be used. The default behavior is to append the # process identifier and the current time, in seconds, to the file data. # if {![info exists argv] || [llength $argv] != 1} { error "Usage: \"[info nameofexecutable]\" \"[info script]\" " } ############################################################################### proc makeBinaryChannel { channel } { fconfigure $channel -encoding binary -translation binary } proc readFile { fileName } { set channel [open $fileName RDONLY] makeBinaryChannel $channel set result [read $channel] close $channel return $result } proc writeFile { fileName data } { set channel [open $fileName {WRONLY CREAT TRUNC}] makeBinaryChannel $channel puts -nonewline $channel $data close $channel return "" } ############################################################################### set fileName [lindex $argv 0] if {[file exists $fileName]} then { set data [readFile $fileName] } else { set data "" } ############################################################################### if {[info exists env(FAKE_EDITOR_SCRIPT)]} { # # NOTE: If an error is caught while evaluating this script, catch # it and return, which will also skip writing the (possibly # modified) content back to the original file. # set script $env(FAKE_EDITOR_SCRIPT) set code [catch $script error] if {$code != 0} then { if {[info exists env(FAKE_EDITOR_VERBOSE)]} { if {[info exists errorInfo]} { puts stdout "ERROR ($code): $errorInfo" } else { puts stdout "ERROR ($code): $error" } } return } } else { # # NOTE: The default behavior is to append the process identifier # and the current time, in seconds, to the file data. # append data " " [pid] " " [clock seconds] } ############################################################################### writeFile $fileName $data