startup.tcl (former commands.tcl) is now embedded into OpenOCD executable.
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 11 Jul 2008 06:44:22 +0000 (06:44 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 11 Jul 2008 06:44:22 +0000 (06:44 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@787 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/Makefile.am
src/file2c.tcl [new file with mode: 0644]
src/openocd.c
src/startup.tcl [moved from src/tcl/commands.tcl with 90% similarity]

index ff0eb6e..1c96fb4 100644 (file)
@@ -7,7 +7,7 @@ MAINFILE = main.c jim.c
 endif
 
 
-openocd_SOURCES = $(MAINFILE) openocd.c
+openocd_SOURCES = $(MAINFILE) openocd.c startup.c
 
 # set the include path found by configure
 INCLUDES = -I$(top_srcdir)/src/helper \
@@ -82,7 +82,6 @@ openocd_LDADD = $(top_builddir)/src/xsvf/libxsvf.a \
        
        
 nobase_dist_pkglib_DATA = \
-       tcl/commands.tcl  \
        tcl/bitsbytes.tcl  \
        tcl/chip/atmel/at91/aic.tcl  \
        tcl/chip/atmel/at91/at91sam7x128.tcl  \
@@ -98,3 +97,6 @@ nobase_dist_pkglib_DATA = \
        tcl/mmr_helpers.tcl  \
        tcl/readable.tcl  
 
+# Convert .tcl to .c file
+startup.c: $(top_srcdir)/src/startup.tcl Makefile  $(top_srcdir)/src/file2c.tcl
+       tclsh $(top_srcdir)/src/file2c.tcl $(top_srcdir)/src/startup.tcl startup.c
\ No newline at end of file
diff --git a/src/file2c.tcl b/src/file2c.tcl
new file mode 100644 (file)
index 0000000..288751a
--- /dev/null
@@ -0,0 +1,125 @@
+#!/bin/bash
+# restart using a Tcl shell \
+       exec sh -c 'for tclshell in tclsh tclsh83 cygtclsh80 ; do \
+                       ( echo | $tclshell ) 2> /dev/null && exec $tclshell "`( cygpath -w \"$0\" ) 2> /dev/null || echo $0`" "$@" ; \
+               done ; \
+               echo "file2c.tcl: cannot find Tcl shell" ; exit 1' "$0" "$@"
+
+#===============================================================================
+#
+#    file2c.tcl
+#
+#    Convert a file into a header that can be #included from C.
+#
+#===============================================================================
+#####ECOSGPLCOPYRIGHTBEGIN####
+## -------------------------------------------
+## This file is part of eCos, the Embedded Configurable Operating System.
+## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+##
+## eCos is free software; you can redistribute it and/or modify it under
+## the terms of the GNU General Public License as published by the Free
+## Software Foundation; either version 2 or (at your option) any later version.
+##
+## eCos 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.  See the GNU General Public License
+## for more details.
+##
+## You should have received a copy of the GNU General Public License along
+## with eCos; if not, write to the Free Software Foundation, Inc.,
+## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+##
+## As a special exception, if other files instantiate templates or use macros
+## or inline functions from this file, or you compile this file and link it
+## with other works to produce a work based on this file, this file does not
+## by itself cause the resulting work to be covered by the GNU General Public
+## License. However the source code for this file must still be made available
+## in accordance with section (3) of the GNU General Public License.
+##
+## This exception does not invalidate any other reasons why a work based on
+## this file might be covered by the GNU General Public License.
+##
+## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
+## at http://sources.redhat.com/ecos/ecos-license/
+## -------------------------------------------
+#####ECOSGPLCOPYRIGHTEND####
+#===============================================================================
+######DESCRIPTIONBEGIN####
+#
+# Author(s):   jlarmour,bartv
+# Contact(s):  
+# Date:                2001-07-20
+# Purpose:      
+# Description:
+# Usage:        file2c.tcl <file to encode> <output C header file>
+#
+#####DESCRIPTIONEND####
+#===============================================================================
+
+
+
+if { $argc != 2 } {
+       puts "Usage: file2c.tcl <file to encode> <output C file>"
+       exit 1
+}
+set infile [lindex $argv 0]
+set outfile [lindex $argv 1]
+set label [string range $outfile [expr 1+[string last / $outfile]] [expr [string last . $outfile]-1]]
+
+set status [ catch {
+       set infilefd [open $infile "r"]
+       fconfigure $infilefd -translation binary
+       set data [read $infilefd]
+       close $infilefd
+} message]
+
+if { $status != 0 } {
+       error "Unable to read file $infile: $message"
+}
+
+set result ""
+
+set status [ catch {
+       set outfilefd [ open $outfile "w" ]
+} message ]
+
+if { $status != 0 } {
+       error "Unable to create file $outfile: $message"
+}
+
+append result "/* This is a generated file. Do not edit. */\n\n"
+append result "const unsigned char filedata_$label\[\] = {\n"
+
+set datalength [ string length $data ]
+
+set aligned_datalength [expr $datalength - ($datalength % 8)]
+
+for { set i 0 } {$i < $aligned_datalength} {incr i 8} {
+       binary scan $data "@[set i]H16" var0
+       append result [format "    0x%2s, 0x%2s, 0x%2s, 0x%2s, 0x%2s, 0x%2s, 0x%2s, 0x%2s,\n" \
+                       [string range $var0  0  1] \
+                       [string range $var0  2  3] \
+                       [string range $var0  4  5] \
+                       [string range $var0  6  7] \
+                       [string range $var0  8  9] \
+                       [string range $var0 10 11] \
+                       [string range $var0 12 13] \
+                       [string range $var0 14 15]]
+}
+
+if { $aligned_datalength != $datalength } {
+       append result "    "
+       for { set i $aligned_datalength } {$i < $datalength} {incr i} {
+               binary scan $data "@[set i]H2" var0
+               append result [format "0x%2s, " $var0]
+       }
+}
+
+# Remove either comma+newline or comma+space from the end
+set result [string range $result 0 [expr [string length $result] - 3]]
+
+append result "\n};"
+
+puts $outfilefd $result
+close $outfilefd
index 64965e3..eef6e60 100644 (file)
@@ -742,12 +742,15 @@ void initJim(void)
        interp->cb_fgets = openocd_jim_fgets;
 }
 
+extern const unsigned char filedata_startup[];
+
 /* after command line parsing */
 void initJim2(void)
 {
-       if (Jim_Eval(interp, "source [find tcl/commands.tcl]")==JIM_ERR)
+       if (Jim_Eval(interp, filedata_startup)==JIM_ERR)
        {
-               LOG_ERROR("Can not find tcl/commands.tcl - check installation");
+               LOG_ERROR("Failed to run startup.tcl (embedded into OpenOCD compile time)");
+               Jim_PrintErrorMessage(interp);
                exit(-1);
        }
 }
similarity index 90%
rename from src/tcl/commands.tcl
rename to src/startup.tcl
index 8d7cdb8..0a82912 100644 (file)
@@ -1,63 +1,69 @@
-
-# Production command
-# FIX!!! need to figure out how to feed back relevant output
-# from e.g. "flash banks" command...
-proc board_produce {filename serialnumber} {
-       openocd "reset init"
-       openocd "flash write_image erase $filename [flash] bin"]]
-       openocd "verify_image $filename [flash] bin"]]
-       echo "Successfully ran production procedure"
-}
-
-proc board_test {} {
-       echo "Production test not implemented"
-}
-
-# Show flash in human readable form
-# This is an example of a human readable form of a low level fn
-proc flash_banks_pretty {} { 
-       set i 0         
-       set result ""
-       foreach {a} [flash_banks] {
-               if {$i > 0} {
-                       set result "$result\n"
-               }
-               set result [format "$result#%d: %s at 0x%08x, size 0x%08x, buswidth %d, chipwidth %d" $i [lindex $a 0] [lindex $a 1] [lindex $a 2] [lindex $a 3] [lindex $a 4]]
-               set i [expr $i+1]       
-       }       
-       return $result
-}
-
-# We need to explicitly redirect this to the OpenOCD command
-# as Tcl defines the exit proc
-proc exit {} {
-       openocd_throw exit
-}
-
-# We have currently converted only "flash banks" to tcl.
-proc flash args {
-       if {[string compare [lindex $args 0] banks]==0} {
-               return [flash_banks_pretty]
-       }
-       openocd_throw "flash $args"
-}
-
-# If a fn is unknown to Tcl, we try to execute it as an OpenOCD command
-proc unknown {args} {
-       if {[string length $args]>0} {
-               set cmd ""
-               # We need to add back quotes for arguments w/space
-               # for args without space, we can add quotes anyway
-               foreach {a} $args {
-                       set cmd "$cmd \"$a\""
-               }
-               openocd_throw $cmd
-       }
-       # openocd_throw outputs while running and also sets the
-       # primary return value to the output of the command
-       #
-       # The primary return value have been set by "openocd" above,
-       # so we need to clear it, lest we print out the output from
-       # the command twice.
-       return ""
-}
+#\r
+# Defines basic Tcl procs that must be there for\r
+# OpenOCD to work.\r
+#\r
+# Embedded into OpenOCD executable\r
+#\r
+\r
+# Production command\r
+# FIX!!! need to figure out how to feed back relevant output\r
+# from e.g. "flash banks" command...\r
+proc board_produce {filename serialnumber} {\r
+       openocd "reset init"\r
+       openocd "flash write_image erase $filename [flash] bin"]]\r
+       openocd "verify_image $filename [flash] bin"]]\r
+       echo "Successfully ran production procedure"\r
+}\r
+\r
+proc board_test {} {\r
+       echo "Production test not implemented"\r
+}\r
+\r
+# Show flash in human readable form\r
+# This is an example of a human readable form of a low level fn\r
+proc flash_banks_pretty {} { \r
+       set i 0         \r
+       set result ""\r
+       foreach {a} [flash_banks] {\r
+               if {$i > 0} {\r
+                       set result "$result\n"\r
+               }\r
+               set result [format "$result#%d: %s at 0x%08x, size 0x%08x, buswidth %d, chipwidth %d" $i [lindex $a 0] [lindex $a 1] [lindex $a 2] [lindex $a 3] [lindex $a 4]]\r
+               set i [expr $i+1]       \r
+       }       \r
+       return $result\r
+}\r
+\r
+# We need to explicitly redirect this to the OpenOCD command\r
+# as Tcl defines the exit proc\r
+proc exit {} {\r
+       openocd_throw exit\r
+}\r
+\r
+# We have currently converted only "flash banks" to tcl.\r
+proc flash args {\r
+       if {[string compare [lindex $args 0] banks]==0} {\r
+               return [flash_banks_pretty]\r
+       }\r
+       openocd_throw "flash $args"\r
+}\r
+\r
+# If a fn is unknown to Tcl, we try to execute it as an OpenOCD command\r
+proc unknown {args} {\r
+       if {[string length $args]>0} {\r
+               set cmd ""\r
+               # We need to add back quotes for arguments w/space\r
+               # for args without space, we can add quotes anyway\r
+               foreach {a} $args {\r
+                       set cmd "$cmd \"$a\""\r
+               }\r
+               openocd_throw $cmd\r
+       }\r
+       # openocd_throw outputs while running and also sets the\r
+       # primary return value to the output of the command\r
+       #\r
+       # The primary return value have been set by "openocd" above,\r
+       # so we need to clear it, lest we print out the output from\r
+       # the command twice.\r
+       return ""\r
+}\r