this never panned out and there are enough mistakes in the code that probably nobody used this. Use the tcl server and implement a standalone http app instead works fine. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>tags/v0.5.0-rc1
@@ -255,8 +255,6 @@ options may be available there: | |||
--enable-ioutil Enable ioutil functions - useful for standalone | |||
OpenOCD implementations | |||
--enable-httpd Enable builtin httpd server - useful for standalone | |||
OpenOCD implementations | |||
--disable-doxygen-html Disable building Doxygen manual as HTML. | |||
--enable-doxygen-pdf Enable building Doxygen manual as PDF. | |||
@@ -420,10 +420,6 @@ AC_ARG_ENABLE(ioutil, | |||
AS_HELP_STRING([--enable-ioutil], [Enable ioutil functions - useful for standalone OpenOCD implementations]), | |||
[build_ioutil=$enableval], [build_ioutil=no]) | |||
AC_ARG_ENABLE(httpd, | |||
AS_HELP_STRING([--enable-httpd], [Enable builtin httpd server - useful for standalone OpenOCD implementations]), | |||
[build_httpd=$enableval], [build_httpd=no]) | |||
case "${host_cpu}" in | |||
arm*) | |||
AC_ARG_ENABLE(ep93xx, | |||
@@ -1039,7 +1035,6 @@ AM_CONDITIONAL(ECOSBOARD, test $build_ecosboard = yes) | |||
AM_CONDITIONAL(ZY1000, test $build_zy1000 = yes) | |||
AM_CONDITIONAL(ZY1000_MASTER, test $build_zy1000_master = yes) | |||
AM_CONDITIONAL(IOUTIL, test $build_ioutil = yes) | |||
AM_CONDITIONAL(HTTPD, test $build_httpd = yes) | |||
AM_CONDITIONAL(AT91RM9200, test $build_at91rm9200 = yes) | |||
AM_CONDITIONAL(BITBANG, test $build_bitbang = yes) | |||
AM_CONDITIONAL(FT2232_LIBFTDI, test $build_ft2232_libftdi = yes) | |||
@@ -309,17 +309,3 @@ This section needs to be expanded. | |||
*/ | |||
/** @page serverhttp OpenOCD HTTP Server API | |||
Smoketest: | |||
configure --enable-httpd --enable-dummy --enable-ioutil | |||
openocd -s /usr/local/share/openocd -f httpd/httpd.tcl -f interface/dummy.cfg -f target/lpc2148.cfg | |||
Navigate to: http://localhost:8888/ | |||
*/ |
@@ -101,10 +101,6 @@ libopenocd_la_LIBADD = \ | |||
$(top_builddir)/src/helper/libhelper.la \ | |||
$(FTDI2232LIB) $(MINGWLDADD) $(LIBUSB) | |||
if HTTPD | |||
libopenocd_la_LIBADD += -lmicrohttpd | |||
endif | |||
STARTUP_TCL_SRCS = \ | |||
$(srcdir)/helper/startup.tcl \ | |||
$(srcdir)/jtag/startup.tcl \ | |||
@@ -42,7 +42,6 @@ | |||
#include <server/server.h> | |||
#include <server/gdb_server.h> | |||
#include <server/httpd.h> | |||
#ifdef HAVE_STRINGS_H | |||
#include <strings.h> | |||
@@ -337,9 +336,6 @@ int openocd_main(int argc, char *argv[]) | |||
if (ret != ERROR_OK) | |||
return EXIT_FAILURE; | |||
if (httpd_start(cmd_ctx) != ERROR_OK) | |||
return EXIT_FAILURE; | |||
ret = server_init(cmd_ctx); | |||
if (ERROR_OK != ret) | |||
return EXIT_FAILURE; | |||
@@ -357,8 +353,6 @@ int openocd_main(int argc, char *argv[]) | |||
server_quit(); | |||
httpd_stop(); | |||
unregister_all_commands(cmd_ctx, NULL); | |||
/* free commandline interface */ | |||
@@ -8,15 +8,9 @@ noinst_LTLIBRARIES = libserver.la | |||
noinst_HEADERS = server.h telnet_server.h gdb_server.h | |||
libserver_la_SOURCES = server.c telnet_server.c gdb_server.c | |||
if HTTPD | |||
libserver_la_SOURCES += httpd.c | |||
else | |||
libserver_la_SOURCES += httpd_stubs.c | |||
if !ECOSBOARD | |||
libserver_la_SOURCES += server_stubs.c | |||
endif | |||
endif | |||
noinst_HEADERS += httpd.h | |||
libserver_la_CFLAGS = | |||
if IS_MINGW | |||
@@ -28,23 +22,7 @@ endif | |||
noinst_HEADERS += tcl_server.h | |||
libserver_la_SOURCES += tcl_server.c | |||
if HTTPD | |||
nobase_dist_pkgdata_DATA = \ | |||
$(wildcard \ | |||
$(srcdir)/httpd/*.tcl \ | |||
$(srcdir)/httpd/*.css \ | |||
$(srcdir)/httpd/menu_cuts/*.png \ | |||
) | |||
endif | |||
EXTRA_DIST = \ | |||
startup.tcl \ | |||
httpd/readme.txt \ | |||
httpd/menu.xml \ | |||
httpd/menu.xsl \ | |||
httpd/build.sh \ | |||
httpd/html2tcl.sh \ | |||
httpd/Stylizer.java \ | |||
httpd/Stylizer.class | |||
startup.tcl | |||
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in |
@@ -1,506 +0,0 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2007,2008,2009 Øyvind Harboe * | |||
* oyvind.harboe@zylin.com * | |||
* * | |||
* This program 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 of the License, or * | |||
* (at your option) any later version. * | |||
* * | |||
* 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. See the * | |||
* GNU General Public License for more details. * | |||
* * | |||
* You should have received a copy of the GNU General Public License * | |||
* along with this program; if not, write to the * | |||
* Free Software Foundation, Inc., * | |||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * | |||
***************************************************************************/ | |||
/* some bits were copied from ahttpd which is under eCos license and | |||
* copyright to FSF | |||
*/ | |||
#ifdef HAVE_CONFIG_H | |||
#include "config.h" | |||
#endif | |||
#include "telnet_server.h" | |||
#include <target/target.h> | |||
#include <microhttpd.h> | |||
#include <pthread.h> | |||
#include <signal.h> | |||
#define PAGE_NOT_FOUND "<html><head><title > File not found</title></head><body > File not found</body></html>" | |||
static pthread_mutex_t mutex; | |||
void openocd_sleep_prelude(void) | |||
{ | |||
pthread_mutex_unlock(&mutex); | |||
} | |||
void openocd_sleep_postlude(void) | |||
{ | |||
pthread_mutex_lock(&mutex); | |||
} | |||
int loadFile(const char *name, void **data, size_t *len); | |||
static const char *appendf(const char *prev, const char *format, ...) | |||
{ | |||
va_list ap; | |||
va_start(ap, format); | |||
char *string = alloc_vprintf(format, ap); | |||
va_end(ap); | |||
char *string2 = NULL; | |||
if (string != NULL) | |||
{ | |||
string2 = alloc_printf("%s%s", (prev == NULL) ? "" : prev, string); | |||
} | |||
if (prev != NULL) | |||
{ | |||
free((void *)prev); | |||
} | |||
if (string == NULL) | |||
free(string); | |||
return string2; | |||
} | |||
static const char *httpd_exec_cgi_tcl_error(Jim_Interp *interp) | |||
{ | |||
int len, i; | |||
const char *t = NULL; | |||
t = appendf(t, "<html><body>\n"); | |||
t = appendf(t, "Runtime error, file \"%s\", line %d:<br>", | |||
interp->errorFileName, interp->errorLine); | |||
t = appendf(t, " %s < br>", Jim_GetString(interp->result, NULL)); | |||
Jim_ListLength(interp, interp->stackTrace, &len); | |||
for (i = 0; i < len; i += 3) | |||
{ | |||
Jim_Obj *objPtr; | |||
const char *proc, *file, *line; | |||
Jim_ListIndex(interp, interp->stackTrace, i, &objPtr, JIM_NONE); | |||
proc = Jim_GetString(objPtr, NULL); | |||
Jim_ListIndex(interp, interp->stackTrace, i + 1, &objPtr, JIM_NONE); | |||
file = Jim_GetString(objPtr, NULL); | |||
Jim_ListIndex(interp, interp->stackTrace, i + 2, &objPtr, JIM_NONE); | |||
line = Jim_GetString(objPtr, NULL); | |||
t = appendf(t, "In procedure '%s' called at file \"%s\", line %s < br>", | |||
proc, file, line); | |||
} | |||
t = appendf(t, "</html></body>\n"); | |||
return t; | |||
} | |||
static int httpd_Jim_Command_writeform(Jim_Interp *interp, int argc, | |||
Jim_Obj * const *argv) | |||
{ | |||
if (argc != 3) | |||
{ | |||
Jim_WrongNumArgs(interp, 1, argv, "method ?CMD_ARGV ...?"); | |||
return JIM_ERR; | |||
} | |||
char *name = (char*) Jim_GetString(argv[1], NULL); | |||
char *file = (char*) Jim_GetString(argv[2], NULL); | |||
// Find length | |||
const char *data; | |||
int actual; | |||
int retcode; | |||
const char *script = alloc_printf( | |||
"set dummy_val $httppostdata(%s); set dummy_val", | |||
name); | |||
retcode = Jim_Eval_Named(interp, script, __FILE__, __LINE__); | |||
free((void *) script); | |||
if (retcode != JIM_OK) | |||
return retcode; | |||
data = Jim_GetString(Jim_GetResult(interp), &actual); | |||
FILE *f = fopen(file, "wb"); | |||
if (NULL == f) | |||
{ | |||
Jim_SetResultString(interp, "Could not create file", -1); | |||
return JIM_ERR; | |||
} | |||
int result = fwrite(data, 1, actual, f); | |||
fclose(f); | |||
if (result != actual) | |||
{ | |||
Jim_SetResultString(interp, "Could not write to file", -1); | |||
return JIM_ERR; | |||
} | |||
return JIM_OK; | |||
} | |||
int | |||
httpd_Jim_Command_formfetch(Jim_Interp *interp, | |||
int argc, | |||
Jim_Obj *const *argv) | |||
{ | |||
if (argc != 2) | |||
{ | |||
Jim_WrongNumArgs(interp, 1, argv, "method ?CMD_ARGV ...?"); | |||
return JIM_ERR; | |||
} | |||
char *name = (char*)Jim_GetString(argv[1], NULL); | |||
const char *script = alloc_printf( | |||
"set dummy_val $httppostdata(%s); set dummy_val", | |||
name); | |||
int retcode = Jim_Eval_Named(interp, script, __FILE__, __LINE__); | |||
free((void *) script); | |||
if (retcode != JIM_OK) | |||
Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); | |||
else | |||
Jim_SetResult(interp, Jim_GetResult(interp)); | |||
return JIM_OK; | |||
} | |||
struct httpd_request | |||
{ | |||
int post; | |||
Jim_Interp *interp; | |||
struct MHD_PostProcessor *postprocessor; | |||
//Jim_Obj *dict; | |||
int complete; /* did we receive the entire post ? */ | |||
}; | |||
static void request_completed(void *cls, struct MHD_Connection *connection, | |||
void **con_cls, enum MHD_RequestTerminationCode toe) | |||
{ | |||
struct httpd_request *r = (struct httpd_request*) *con_cls; | |||
if (NULL == r) | |||
return; | |||
if (r->postprocessor) | |||
{ | |||
openocd_sleep_postlude(); | |||
MHD_destroy_post_processor(r->postprocessor); | |||
openocd_sleep_prelude(); | |||
} | |||
free(r); | |||
*con_cls = NULL; | |||
} | |||
/* append to said key in dictionary */ | |||
static void append_key(Jim_Interp *interp, | |||
struct httpd_request *r, const char *key, | |||
const char *data, size_t off, size_t size) | |||
{ | |||
Jim_Obj *keyObj = Jim_NewStringObj(interp, key, -1); | |||
Jim_IncrRefCount(keyObj); | |||
Jim_Obj *value = NULL; | |||
Jim_Obj *dict = Jim_GetVariableStr(interp, "httppostdata", 0); | |||
if (dict != NULL) | |||
{ | |||
if (Jim_DictKey(interp, dict, keyObj, &value, 0) != JIM_OK) | |||
{ | |||
value = NULL; | |||
} | |||
else | |||
{ | |||
Jim_IncrRefCount(value); | |||
} | |||
} | |||
if (value == NULL) | |||
{ | |||
value = Jim_NewStringObj(interp, "", -1); | |||
Jim_IncrRefCount(value); | |||
} | |||
/* create a new object we append to and insert into this location */ | |||
Jim_Obj *newObj = Jim_NewStringObj(interp, "", -1); | |||
Jim_IncrRefCount(newObj); | |||
Jim_AppendObj(interp, newObj, value); | |||
Jim_AppendString(interp, newObj, data, size); | |||
/* uhh... use name here of dictionary */ | |||
dict = Jim_NewStringObj(interp, "httppostdata", -1); | |||
Jim_IncrRefCount(dict); | |||
Jim_SetDictKeysVector(interp, dict, &keyObj, 1, newObj); | |||
Jim_DecrRefCount(interp, dict); | |||
Jim_DecrRefCount(interp, value); | |||
Jim_DecrRefCount(interp, newObj); | |||
Jim_DecrRefCount(interp, keyObj); | |||
} | |||
/* append data to each key */ | |||
static int iterate_post(void *con_cls, enum MHD_ValueKind kind, | |||
const char *key, const char *filename, const char *content_type, | |||
const char *transfer_encoding, const char *data, uint64_t off, | |||
size_t size) | |||
{ | |||
struct httpd_request *r = (struct httpd_request*) con_cls; | |||
append_key(r->interp, r, key, data, off, size); | |||
return MHD_YES; | |||
} | |||
static int record_arg(void *cls, enum MHD_ValueKind kind, const char *key, | |||
const char *value) | |||
{ | |||
struct httpd_request *r = (struct httpd_request*) cls; | |||
append_key(r->interp, r, key, value, 0, strlen(value)); | |||
return MHD_YES; | |||
} | |||
static int handle_request(Jim_Interp *interp, | |||
struct MHD_Connection * connection, const char * url) | |||
{ | |||
struct MHD_Response * response; | |||
int ret; | |||
const char *suffix; | |||
suffix = strrchr(url, '.'); | |||
if ((suffix != NULL) && (strcmp(suffix, ".tcl") == 0)) | |||
{ | |||
printf("Run tcl %s\n", url); | |||
int retcode; | |||
const char *script = alloc_printf( | |||
"global httpdata; source {%s}; set httpdata", url); | |||
retcode = Jim_Eval_Named(interp, script, __FILE__, __LINE__); | |||
free((void *) script); | |||
if (retcode != JIM_OK) | |||
{ | |||
printf("Tcl failed\n"); | |||
const char *t = httpd_exec_cgi_tcl_error(interp); | |||
if (t == NULL) | |||
return MHD_NO; | |||
response = MHD_create_response_from_data(strlen(t), (void *) t, | |||
MHD_YES, MHD_NO); | |||
ret = MHD_queue_response(connection, | |||
MHD_HTTP_INTERNAL_SERVER_ERROR, response); | |||
MHD_destroy_response(response); | |||
return ret; | |||
} | |||
else | |||
{ | |||
LOG_DEBUG("Tcl OK"); | |||
/* FIX!!! how to handle mime types??? */ | |||
const char *result; | |||
int reslen; | |||
result = Jim_GetString(Jim_GetResult(interp), &reslen); | |||
response = MHD_create_response_from_data(reslen, (void *) result, | |||
MHD_NO, MHD_YES); | |||
ret = MHD_queue_response(connection, | |||
MHD_HTTP_INTERNAL_SERVER_ERROR, response); | |||
MHD_destroy_response(response); | |||
return ret; | |||
} | |||
} | |||
else | |||
{ | |||
void *data; | |||
size_t len; | |||
int retval = loadFile(url, &data, &len); | |||
if (retval != ERROR_OK) | |||
{ | |||
printf("Did not find %s\n", url); | |||
response = MHD_create_response_from_data(strlen(PAGE_NOT_FOUND), | |||
(void *) PAGE_NOT_FOUND, MHD_NO, MHD_NO); | |||
ret = MHD_queue_response(connection, MHD_HTTP_NOT_FOUND, response); | |||
MHD_destroy_response(response); | |||
return ret; | |||
} | |||
LOG_DEBUG("Serving %s length=%zu", url, len); | |||
/* serve file directly */ | |||
response = MHD_create_response_from_data(len, data, MHD_YES, MHD_NO); | |||
/* Should we expose mimetype via tcl here or just let the browser | |||
guess? | |||
MHD_add_response_header(response, "Content-Type", "image/png"); | |||
*/ | |||
ret = MHD_queue_response(connection, MHD_HTTP_OK, response); | |||
MHD_destroy_response(response); | |||
//free(data); | |||
return ret; | |||
} | |||
} | |||
static int ahc_echo_inner(void * cls, struct MHD_Connection * connection, | |||
const char * url, const char * method, const char * version, | |||
const char * upload_data, size_t * upload_data_size, void ** ptr) | |||
{ | |||
Jim_Interp *interp = (Jim_Interp *)cls; | |||
int post = 0; | |||
if (0 == strcmp(method, "POST")) | |||
{ | |||
post = 1; | |||
} | |||
else if (0 == strcmp(method, "GET")) | |||
{ | |||
} | |||
else | |||
{ | |||
return MHD_NO; /* unexpected method */ | |||
} | |||
struct httpd_request *r; | |||
if (*ptr == NULL) | |||
{ | |||
/* The first time only the headers are valid, | |||
do not respond in the first round... */ | |||
*ptr = malloc(sizeof(struct httpd_request)); | |||
if (*ptr == NULL) | |||
return MHD_NO; | |||
memset(*ptr, 0, sizeof(struct httpd_request)); | |||
r = (struct httpd_request *) *ptr; | |||
r->interp = interp; | |||
r->post = post; | |||
Jim_SetVariableStr(interp, "httppostdata", Jim_NewDictObj(interp, NULL, 0)); | |||
/* fill in url query strings in dictionary */ | |||
MHD_get_connection_values(connection, MHD_GET_ARGUMENT_KIND, | |||
record_arg, r); | |||
if (r->post) | |||
{ | |||
r->postprocessor = MHD_create_post_processor(connection, 2048 | |||
* 1024, &iterate_post, r); | |||
} | |||
return MHD_YES; | |||
} | |||
r = (struct httpd_request *) *ptr; | |||
if (r->post) | |||
{ | |||
/* consume post data */ | |||
if (*upload_data_size) | |||
{ | |||
MHD_post_process(r->postprocessor, upload_data, *upload_data_size); | |||
*upload_data_size = 0; | |||
return MHD_YES; | |||
} | |||
else | |||
{ | |||
} | |||
} else | |||
{ | |||
} | |||
/* hand over to request who will be using it. */ | |||
// r->dict = NULL; | |||
/* FIX!!!! we need more advanced handling of url's to avoid them | |||
* being subverted to evil purposes | |||
*/ | |||
const char *httpd_dir = PKGDATADIR "/httpd"; | |||
if (*url=='/') | |||
{ | |||
url++; /* skip '/' */ | |||
} | |||
if (!*url) | |||
url="index.tcl"; | |||
const char *file_name = alloc_printf("%s/%s", httpd_dir, url); | |||
int result = handle_request(interp, connection, file_name); | |||
free((void *)file_name); | |||
return result; | |||
} | |||
static int ahc_echo(void * cls, struct MHD_Connection * connection, | |||
const char * url, const char * method, const char * version, | |||
const char * upload_data, size_t * upload_data_size, void ** ptr) | |||
{ | |||
int result; | |||
openocd_sleep_postlude(); | |||
result = ahc_echo_inner(cls, connection, url, method, version, upload_data, upload_data_size, ptr); | |||
openocd_sleep_prelude(); | |||
return result; | |||
} | |||
static struct MHD_Daemon * d; | |||
static const struct command_registration httpd_command_handlers[] = { | |||
{ | |||
.name = "formfetch", | |||
.jim_handler = httpd_Jim_Command_formfetch, | |||
.mode = COMMAND_EXEC, | |||
.usage = "parameter_name", | |||
.help = "Reads a posted form value.", | |||
}, | |||
{ | |||
.name = "writeform", | |||
.jim_handler = httpd_Jim_Command_writeform, | |||
.mode = COMMAND_EXEC, | |||
.usage = "parameter_name filename", | |||
.help = "Writes a form value to a file.", | |||
}, | |||
COMMAND_REGISTRATION_DONE | |||
}; | |||
int httpd_start(struct command_context *cmd_ctx) | |||
{ | |||
pthread_mutexattr_t attr; | |||
pthread_mutexattr_init(&attr); | |||
pthread_mutex_init(&mutex, &attr); | |||
int port = 8888; | |||
LOG_USER("Launching httpd server on port %d", port); | |||
d = MHD_start_daemon(MHD_USE_SELECT_INTERNALLY, port, NULL, NULL, | |||
&ahc_echo, cmd_ctx->interp, | |||
MHD_OPTION_NOTIFY_COMPLETED, request_completed, NULL, /* Closure... what's that??? */ | |||
MHD_OPTION_END); | |||
if (d == NULL) | |||
return ERROR_FAIL; | |||
return register_commands(cmd_ctx, NULL, httpd_command_handlers); | |||
} | |||
void httpd_stop(void) | |||
{ | |||
MHD_stop_daemon(d); | |||
pthread_mutex_destroy(&mutex); | |||
} | |||
@@ -1,28 +0,0 @@ | |||
/*************************************************************************** | |||
* Copyright (C) 2009 Zachary T Welch <zw@superlucidity.net> * | |||
* * | |||
* This program 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 of the License, or * | |||
* (at your option) any later version. * | |||
* * | |||
* 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. See the * | |||
* GNU General Public License for more details. * | |||
* * | |||
* You should have received a copy of the GNU General Public License * | |||
* along with this program; if not, write to the * | |||
* Free Software Foundation, Inc., * | |||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * | |||
***************************************************************************/ | |||
#ifndef OPENOCD_SERVER_HTTPD_H | |||
#define OPENOCD_SERVER_HTTPD_H | |||
struct command_context; | |||
int httpd_start(struct command_context *cmd_ctx); | |||
void httpd_stop(void); | |||
#endif // OPENOCD_SERVER_HTTPD_H |
@@ -1,114 +0,0 @@ | |||
import java.io.File; | |||
import java.io.FileOutputStream; | |||
import java.io.IOException; | |||
import java.io.OutputStream; | |||
import javax.xml.parsers.DocumentBuilder; | |||
import javax.xml.parsers.DocumentBuilderFactory; | |||
import javax.xml.parsers.ParserConfigurationException; | |||
import javax.xml.transform.Transformer; | |||
import javax.xml.transform.TransformerConfigurationException; | |||
import javax.xml.transform.TransformerException; | |||
import javax.xml.transform.TransformerFactory; | |||
import javax.xml.transform.dom.DOMSource; | |||
import javax.xml.transform.stream.StreamResult; | |||
import javax.xml.transform.stream.StreamSource; | |||
import org.apache.xpath.XPathAPI; | |||
import org.w3c.dom.Document; | |||
import org.w3c.dom.Node; | |||
import org.w3c.dom.NodeList; | |||
import org.xml.sax.SAXException; | |||
/** used to generate .tcl files from */ | |||
public class Stylizer | |||
{ | |||
// Global value so it can be ref'd by the tree-adapter | |||
static Document document; | |||
public static void main(String argv[]) | |||
{ | |||
if (argv.length != 3) | |||
{ | |||
System.err.println("Usage: java Stylizer stylesheet xmlfile outputdir"); | |||
System.exit(1); | |||
} | |||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); | |||
try | |||
{ | |||
System.err.println("Starting conversion..."); | |||
File stylesheet = new File(argv[0]); | |||
File datafile = new File(argv[1]); | |||
DocumentBuilder builder = factory.newDocumentBuilder(); | |||
document = builder.parse(datafile); | |||
NodeList list = XPathAPI.selectNodeList(document, "website/language/page"); | |||
for (int i=0; i<list.getLength(); i++) | |||
{ | |||
Node node=list.item(i); | |||
// Use a Transformer for output | |||
TransformerFactory tFactory = TransformerFactory.newInstance(); | |||
StreamSource stylesource = new StreamSource(stylesheet); | |||
Transformer transformer = tFactory.newTransformer(stylesource); | |||
Node fileName = XPathAPI.selectSingleNode(node, "outfile/text()"); | |||
System.err.println("Converting " + fileName.getNodeValue()); | |||
DOMSource source = new DOMSource(document); | |||
OutputStream output=new FileOutputStream(new File(argv[2], fileName.getNodeValue())); | |||
try | |||
{ | |||
StreamResult result = new StreamResult(output); | |||
transformer.setParameter("pagetogenerate", fileName.getNodeValue()); | |||
transformer.transform(source, result); | |||
} | |||
finally | |||
{ | |||
output.close(); | |||
} | |||
} | |||
} catch (TransformerConfigurationException tce) | |||
{ | |||
// Error generated by the parser | |||
System.out.println("\n** Transformer Factory error"); | |||
System.out.println(" " + tce.getMessage()); | |||
// Use the contained exception, if any | |||
Throwable x = tce; | |||
if (tce.getException() != null) | |||
x = tce.getException(); | |||
x.printStackTrace(); | |||
} catch (TransformerException te) | |||
{ | |||
// Error generated by the parser | |||
System.out.println("\n** Transformation error"); | |||
System.out.println(" " + te.getMessage()); | |||
// Use the contained exception, if any | |||
Throwable x = te; | |||
if (te.getException() != null) | |||
x = te.getException(); | |||
x.printStackTrace(); | |||
} catch (SAXException sxe) | |||
{ | |||
// Error generated by this application | |||
// (or a parser-initialization error) | |||
Exception x = sxe; | |||
if (sxe.getException() != null) | |||
x = sxe.getException(); | |||
x.printStackTrace(); | |||
} catch (ParserConfigurationException pce) | |||
{ | |||
// Parser with specified options can't be built | |||
pce.printStackTrace(); | |||
} catch (IOException ioe) | |||
{ | |||
// I/O error | |||
ioe.printStackTrace(); | |||
} | |||
} // main | |||
} |
@@ -1,454 +0,0 @@ | |||
# converted to .tcl by html2tcl.tcl | |||
set buffer "" | |||
append buffer { | |||
<html xmlns="http://www.w3.org/TR/REC-html40"> | |||
<head> | |||
<title>OpenOCD debugger</title> | |||
<meta charset="utf-8" content="text/html" http-equiv="Content-Type"/> | |||
<link type="text/css" rel="stylesheet" href="menuweb.css"/> | |||
</head> | |||
} | |||
set console "" | |||
set upload_filename /ram/upload | |||
append buffer { | |||
<body style="margin:0px;"> | |||
<div style="width:974px;height:85px;"> | |||
<div style="float:left;position:relative;left:32px;width:478px;"> | |||
<a href="/"> | |||
OpenOCD | |||
</a> | |||
</div> | |||
<div style="float:left;position:relative;height:26px; width:278px;left:122px;background-image:url('menu_cuts/top_right.png');"> | |||
<div style="position:relative;left:15px;top:4px;" class="textlight"> | |||
} | |||
append buffer [capture version] | |||
append buffer { | |||
</div> | |||
</div> | |||
</div> | |||
<table style="padding:0px;border-collapse:collapse;"> | |||
<tr> | |||
<td style="width:33px;"> | |||
<div style="width:20px;height:510px;"> | |||
| |||
</div> | |||
</td> | |||
<td style="vertical-align:top;height:100%;width:140px;padding:0px;"> | |||
<table style="padding:0px;border-collapse:collapse;height:100%;width:140px;"> | |||
<tr style="height:59px;"> | |||
<td/> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:38px;background-image:url('menu_cuts/v_tab_selected.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;left:10px;top:10px;font-weight:bold;"> | |||
<a href="browsemem.tcl" style="font-weight: bold;">Browse / Edit</a> | |||
</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:38px;background-image:url('menu_cuts/v_tab.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;left:10px;top:10px;font-weight:bold;"> | |||
<a href="downloadmem.tcl" style="">Download</a> | |||
</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:35px;background-image:url('menu_cuts/v_1.png')"/> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;background-image:url('menu_cuts/v_2_tile.png')"/> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:140px;background-image:url('menu_cuts/v_3.png')"/> | |||
</tr> | |||
</table> | |||
</td> | |||
<td style="vertical-align:top;padding:0px;height:100%"> | |||
<table style="padding:0px;border-collapse:collapse;height:100%;"> | |||
<tr> | |||
<td> | |||
<table style="padding:0px;border-collapse:collapse;"> | |||
<tr> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab1.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;font-weight:bold;text-align:center;width:100px;"> | |||
<a href="index.tcl">Config Target</a> | |||
</div> | |||
</td> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab1.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;font-weight:bold;text-align:center;width:100px;"> | |||
<a href="flashinfo.tcl">Flash</a> | |||
</div> | |||
</td> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab1_selected.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;font-weight:bold;text-align:center;width:100px;"> | |||
<a href="browsemem.tcl" style="font-weight: bold;">Memory</a> | |||
</div> | |||
</td> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab1.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;font-weight:bold;text-align:center;width:100px;"> | |||
<a href="openocd.tcl">OpenOCD</a> | |||
</div> | |||
</td> | |||
</tr> | |||
</table> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="height:30px;width:535px;background-image:url('menu_cuts/center_top.png');background-repeat: no-repeat;background-position:top right;" colspan="6"> | |||
<div style="width:500px;background-color:#ffffff;height:100%;"> | |||
| |||
</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="background-color:#ffffff;text-indent:30px;height:40px;" colspan="6"> | |||
<H1>Browse / Edit Memory</H1> | |||
</td> | |||
</tr> | |||
<tr style="height:100%;"> | |||
<td style="background-color:#ffffff;padding-left:30px;padding-right:30px;width=535px;height:100%;" colspan="6"> | |||
} | |||
set form_address [formfetch form_address] | |||
set form_length [formfetch form_length] | |||
set form_type [formfetch form_type] | |||
set form_action [formfetch form_action] | |||
set form_value [formfetch form_value] | |||
if {[string compare $form_length ""]==0} { | |||
set form_length 0 | |||
} | |||
if {$form_length<=0} { | |||
set form_length 0x80 | |||
} | |||
if {$form_length>0x1000} { | |||
set form_length 0x1000 | |||
} | |||
if {[string compare $form_type ""]==0} { | |||
set form_type mdw | |||
} | |||
if {[string compare $form_type "mdw"]==0} { | |||
set wordsize 4 | |||
set modify_cmd mww | |||
} | |||
if {[string compare $form_type "mdh"]==0} { | |||
set wordsize 2 | |||
set modify_cmd mwh | |||
} | |||
if {[string compare $form_type "mdb"]==0} { | |||
set wordsize 1 | |||
set modify_cmd mwb | |||
} | |||
if {[string compare $form_address ""]!=0} { | |||
if {[string compare $form_action "Previous"]==0} { | |||
# Kludge! Work around problems parsing hex in Jim Tcl expressions | |||
incr form_address ; set form_address [expr $form_address-1] | |||
if {$form_address-$form_length>0} { | |||
set form_address "0x[tohex [expr $form_address-$form_length]]" | |||
} else { | |||
set form_address "0x0" | |||
} | |||
} | |||
if {[string compare $form_action "Next"]==0} { | |||
# Kludge! Work around problems parsing hex in Jim Tcl expressions | |||
incr form_address ; set form_address [expr $form_address-1] | |||
set form_address "0x[tohex [expr $form_address+$form_length]]" | |||
} | |||
if {[string compare $form_action "Modify"]==0} { | |||
append console [capture_catch "$modify_cmd $form_address $form_value"] | |||
} | |||
if {[string compare $form_action "Fill"]==0} { | |||
append console [capture_catch "$modify_cmd $form_address $form_value $form_length"] | |||
} | |||
} | |||
append buffer { | |||
<form action="browsemem.tcl" method="post"> | |||
<table> | |||
<tr><td class="formtext">Address</td><td><input type="text" name="form_address" value="} | |||
append buffer $form_address | |||
append buffer {"></td></tr> | |||
<tr><td class="formtext">Length</td><td><input type="text" name="form_length" value="} | |||
append buffer "0x[tohex $form_length]" | |||
append buffer {"></td></tr> | |||
<tr><td class="formtext">Value</td><td><input type="text" name="form_value" value="} | |||
append buffer $form_value | |||
append buffer {"></td> | |||
<td class="buttonspacesmall"> </td><td><input type="submit" name="form_action" value="Modify"></td> | |||
<td class="buttonspacesmall"> </td><td><input type="submit" name="form_action" value="Fill"></td></tr> | |||
<tr><td class="formtext">Type</td><td style="padding-top:1px;"> | |||
<select name="form_type"> | |||
<option | |||
} | |||
if {[string compare $form_type "mdb"]==0} { append buffer {selected="selected"} } | |||
append buffer { value ="mdb">8 bit | |||
</option> | |||
<option | |||
} | |||
if {[string compare $form_type "mdh"]==0} { append buffer {selected="selected"} } | |||
append buffer { value ="mdh">16 bit | |||
</option> | |||
<option | |||
} | |||
if {[string compare $form_type "mdw"]==0} { append buffer {selected="selected"} } | |||
append buffer {value ="mdw">32 bit | |||
</option> | |||
</select> | |||
</td></tr> | |||
</table> | |||
<table> | |||
<tr><td style="height:15px;width:535px;"> </td></tr> | |||
<tr><td style="height:1px;width:535px;background-color:#a2c5d1;"></td></tr> | |||
<tr><td style="height:15px;width:535px;"> </td></tr> | |||
</table> | |||
<table><tr> | |||
<td><input type="submit" name="form_action" value="Refresh"></td> | |||
<td class="buttonspacesmall"> </td><td><input type="submit" name="form_action" value="Previous" ></td> | |||
<td class="buttonspacesmall"> </td><td><input type="submit" name="form_action" value="Next" ></td> | |||
</tr></table> | |||
<br> | |||
</form> | |||
<p> | |||
<div class="fontbigger">Memory:</div><p> | |||
<code style="white-space: nowrap; font-size:11px;font:courier new;"> | |||
} | |||
if {[string compare $form_address ""]!=0} { | |||
append console [encode [capture_catch halt]] | |||
append buffer [encode [capture_catch "$form_type $form_address [expr $form_length]"]] | |||
} | |||
append buffer { | |||
</code> | |||
</td> | |||
</tr> | |||
} | |||
set toggle_details [formfetch toggle_details] | |||
if {[string length $toggle_details]==0} { | |||
set toggle_details 0 | |||
} | |||
set show_details [load_var show_details] | |||
if {[string length $show_details]==0} { | |||
set show_details 0 | |||
} | |||
if {$toggle_details==1} { | |||
set show_details [expr 1-$show_details] | |||
save_var show_details $show_details | |||
} | |||
if {[string length $console]!=0} { | |||
append buffer { | |||
<tr style="height:100%;"> | |||
<td style="height:100%;background-color:red;" colspan="6"> | |||
<table style="padding:0px;border-collapse:collapse;background-color:#ffffff;width:100%" class="textgray"> | |||
<td style="width:25px;"> </td> | |||
} | |||
if {$show_details==1} { | |||
append buffer < | |||
append buffer {td style="background-color:#dddddd;padding-left:5px;padding-right:5px;padding-top:3px;padding-bottom:3px;"} | |||
append buffer > | |||
} else { | |||
append buffer < | |||
append buffer {td style="background-image:url('menu_cuts/h_tab_free.png');width:110px;height:29px;background-repeat: no-repeat;background-position:top left;"} | |||
append buffer > | |||
} | |||
append buffer { | |||
<a class="openocd" href="browsemem.tcl?toggle_details=1"> | |||
} | |||
if {$show_details==1} { | |||
append buffer "Hide details" | |||
append buffer <br/> | |||
} else { | |||
append buffer {<div style="position:relative;top:7px;text-align:center;">} | |||
append buffer "Show details" | |||
append buffer {</div>} | |||
} | |||
append buffer { | |||
</a> | |||
} | |||
if {$show_details==1} { | |||
append buffer $console | |||
} | |||
append buffer {</td>} | |||
if {$show_details!=1} { | |||
append buffer {<td> </td>} | |||
} | |||
append buffer { | |||
<td style="width:25px;"> </td> | |||
</table> | |||
</td> | |||
</tr> | |||
} | |||
} | |||
append buffer { | |||
<tr> | |||
<td style="height:30px;background-image:url('menu_cuts/center_bottom.png');background-repeat: no-repeat;background-position:top right;" colspan="6"> | |||
<div style="width:500px;background-color:#ffffff;height:100%;"> | |||
| |||
</div> | |||
</td> | |||
</tr> | |||
</table> | |||
</td> | |||
<td style="width:6px;"/> | |||
<td style="width:245px;height:100%"> | |||
<table style="padding:0px;border-collapse:collapse;height:100%;"> | |||
<tr> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab2_selected.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;;font-weight:bold;text-align:center;width:100px;" class="textgray"> | |||
Documentation | |||
</div> | |||
</td> | |||
<td width="40px"> | |||
| |||
</td> | |||
<td/> | |||
</tr> | |||
<tr> | |||
<td style="height:10px;width:245px;background-image:url('menu_cuts/right_top_small.png');" colspan="3"/> | |||
</tr> | |||
<tr> | |||
<td style="background-color:#d8d7d7;width:245px;padding-left:10px;padding-buttom:10px;line-height:17px;" colspan="3"> | |||
<a target="_blank" href="http://openocd.berlios.de/doc/openocd.pdf">OpenOCD Manual</a> | |||
<br/> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="background-color:#d8d7d7;height:15px;" colspan="3"/> | |||
</tr> | |||
<tr> | |||
<td colspan="3"> | |||
<table style="padding:0px;border-collapse:collapse;"> | |||
<td style="background-color:#d8d7d7;width:10px;height:1px"/> | |||
<td style="background-color:#999999;width:225px; height:1px;"/> | |||
<td style="background-color:#d8d7d7;width:10px;height:1px"/> | |||
</table> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="background-color:#d8d7d7;height:15px;" colspan="3"/> | |||
</tr> | |||
<tr style="height:100%;"> | |||
<td style="height:100%;background-color:#d8d7d7;padding-left:10px;padding-right:10px;" colspan="3" class="textgray"> | |||
<p>Browse and edit target memory.<br> | |||
Length is in bytes, maximum 4096 bytes.</p> | |||
<p>An error message is shown when trying to browse or edit memory which cases a CPU fault.</p> | |||
<p>CPU will be halted if required.</p> | |||
<p><b>Modify</b> - Will modify only one byte, half-word or word starting at Address.</p> | |||
<p><b>Fill</b> - Will fill the specified region with the specified value.</p> | |||
<p><b>Refresh</b> - Display the content of the specified memory area.</p> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="height:30px;background-image:url('menu_cuts/right_bottom.png');" colspan="3"> | |||
| |||
</td> | |||
</tr> | |||
</table> | |||
</td> | |||
</tr> | |||
</table> | |||
</body> | |||
</html> | |||
} | |||
start_chunked "html" | |||
write_chunked $buffer | |||
end_chunked | |||
@@ -1,5 +0,0 @@ | |||
set e | |||
java -classpath ../../../../zy1000/build/xalan.jar\;. Stylizer menu.xsl menu.xml . | |||
find . -regex ".*\.tcl" -type f -exec sh html2tcl.sh {} {} \; | |||
echo "Copy .tcl files to /usr/local/lib/openocd/httpd/" | |||
cp *.tcl /usr/local/lib/openocd/httpd/ |
@@ -1,366 +0,0 @@ | |||
# converted to .tcl by html2tcl.tcl | |||
set buffer "" | |||
append buffer { | |||
<html xmlns="http://www.w3.org/TR/REC-html40"> | |||
<head> | |||
<title>OpenOCD debugger</title> | |||
<meta charset="utf-8" content="text/html" http-equiv="Content-Type"/> | |||
<link type="text/css" rel="stylesheet" href="menuweb.css"/> | |||
</head> | |||
} | |||
set console "" | |||
set upload_filename /ram/upload | |||
append buffer { | |||
<body style="margin:0px;"> | |||
<div style="width:974px;height:85px;"> | |||
<div style="float:left;position:relative;left:32px;width:478px;"> | |||
<a href="/"> | |||
OpenOCD | |||
</a> | |||
</div> | |||
<div style="float:left;position:relative;height:26px; width:278px;left:122px;background-image:url('menu_cuts/top_right.png');"> | |||
<div style="position:relative;left:15px;top:4px;" class="textlight"> | |||
} | |||
append buffer [capture version] | |||
append buffer { | |||
</div> | |||
</div> | |||
</div> | |||
<table style="padding:0px;border-collapse:collapse;"> | |||
<tr> | |||
<td style="width:33px;"> | |||
<div style="width:20px;height:510px;"> | |||
| |||
</div> | |||
</td> | |||
<td style="vertical-align:top;height:100%;width:140px;padding:0px;"> | |||
<table style="padding:0px;border-collapse:collapse;height:100%;width:140px;"> | |||
<tr style="height:59px;"> | |||
<td/> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:38px;background-image:url('menu_cuts/v_tab.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;left:10px;top:10px;font-weight:bold;"> | |||
<a href="browsemem.tcl" style="">Browse / Edit</a> | |||
</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:38px;background-image:url('menu_cuts/v_tab_selected.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;left:10px;top:10px;font-weight:bold;"> | |||
<a href="downloadmem.tcl" style="font-weight: bold;">Download</a> | |||
</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:35px;background-image:url('menu_cuts/v_1.png')"/> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;background-image:url('menu_cuts/v_2_tile.png')"/> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:140px;background-image:url('menu_cuts/v_3.png')"/> | |||
</tr> | |||
</table> | |||
</td> | |||
<td style="vertical-align:top;padding:0px;height:100%"> | |||
<table style="padding:0px;border-collapse:collapse;height:100%;"> | |||
<tr> | |||
<td> | |||
<table style="padding:0px;border-collapse:collapse;"> | |||
<tr> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab1.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;font-weight:bold;text-align:center;width:100px;"> | |||
<a href="index.tcl">Config Target</a> | |||
</div> | |||
</td> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab1.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;font-weight:bold;text-align:center;width:100px;"> | |||
<a href="flashinfo.tcl">Flash</a> | |||
</div> | |||
</td> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab1_selected.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;font-weight:bold;text-align:center;width:100px;"> | |||
<a href="browsemem.tcl" style="font-weight: bold;">Memory</a> | |||
</div> | |||
</td> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab1.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;font-weight:bold;text-align:center;width:100px;"> | |||
<a href="openocd.tcl">OpenOCD</a> | |||
</div> | |||
</td> | |||
</tr> | |||
</table> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="height:30px;width:535px;background-image:url('menu_cuts/center_top.png');background-repeat: no-repeat;background-position:top right;" colspan="6"> | |||
<div style="width:500px;background-color:#ffffff;height:100%;"> | |||
| |||
</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="background-color:#ffffff;text-indent:30px;height:40px;" colspan="6"> | |||
<H1>Download Memory Range</H1> | |||
</td> | |||
</tr> | |||
<tr style="height:100%;"> | |||
<td style="background-color:#ffffff;padding-left:30px;padding-right:30px;width=535px;height:100%;" colspan="6"> | |||
} | |||
set form_address [formfetch form_address] | |||
set form_length [formfetch form_length] | |||
set form_action [formfetch form_action] | |||
append buffer { | |||
<form action="downloadmem.tcl" method="post"> | |||
<table> | |||
<tr><td class="formtext">Address</td><td><input type="text" name="form_address" value="} | |||
append buffer $form_address | |||
append buffer {"></td></tr> | |||
<tr><td class="formtext">Length</td><td><input type="text" name="form_length" value="} | |||
append buffer $form_length | |||
append buffer {"></td></tr> | |||
</td></tr> | |||
</table> | |||
<table> | |||
<tr><td style="height:15px;width:535px;"> </td></tr> | |||
<tr><td style="height:1px;width:535px;background-color:#a2c5d1;"></td></tr> | |||
<tr><td style="height:15px;width:535px;"> </td></tr> | |||
</table> | |||
<input type="submit" value="Download" name="form_action"> | |||
</form> | |||
} | |||
if {[string compare $form_action "Download"]==0} { | |||
append console [encode [capture_catch "reset init"]] | |||
append console [encode [capture_catch "dump_image /tmp/dump.bin $form_address $form_length"]] | |||
append buffer { | |||
<form action="../dump.bin" target="_blank"> | |||
<input type="submit" name="form_action" value="Save downloaded memory"> | |||
</form> | |||
} | |||
} | |||
append buffer { | |||
</td> | |||
</tr> | |||
} | |||
set toggle_details [formfetch toggle_details] | |||
if {[string length $toggle_details]==0} { | |||
set toggle_details 0 | |||
} | |||
set show_details [load_var show_details] | |||
if {[string length $show_details]==0} { | |||
set show_details 0 | |||
} | |||
if {$toggle_details==1} { | |||
set show_details [expr 1-$show_details] | |||
save_var show_details $show_details | |||
} | |||
if {[string length $console]!=0} { | |||
append buffer { | |||
<tr style="height:100%;"> | |||
<td style="height:100%;background-color:red;" colspan="6"> | |||
<table style="padding:0px;border-collapse:collapse;background-color:#ffffff;width:100%" class="textgray"> | |||
<td style="width:25px;"> </td> | |||
} | |||
if {$show_details==1} { | |||
append buffer < | |||
append buffer {td style="background-color:#dddddd;padding-left:5px;padding-right:5px;padding-top:3px;padding-bottom:3px;"} | |||
append buffer > | |||
} else { | |||
append buffer < | |||
append buffer {td style="background-image:url('menu_cuts/h_tab_free.png');width:110px;height:29px;background-repeat: no-repeat;background-position:top left;"} | |||
append buffer > | |||
} | |||
append buffer { | |||
<a class="openocd" href="downloadmem.tcl?toggle_details=1"> | |||
} | |||
if {$show_details==1} { | |||
append buffer "Hide details" | |||
append buffer <br/> | |||
} else { | |||
append buffer {<div style="position:relative;top:7px;text-align:center;">} | |||
append buffer "Show details" | |||
append buffer {</div>} | |||
} | |||
append buffer { | |||
</a> | |||
} | |||
if {$show_details==1} { | |||
append buffer $console | |||
} | |||
append buffer {</td>} | |||
if {$show_details!=1} { | |||
append buffer {<td> </td>} | |||
} | |||
append buffer { | |||
<td style="width:25px;"> </td> | |||
</table> | |||
</td> | |||
</tr> | |||
} | |||
} | |||
append buffer { | |||
<tr> | |||
<td style="height:30px;background-image:url('menu_cuts/center_bottom.png');background-repeat: no-repeat;background-position:top right;" colspan="6"> | |||
<div style="width:500px;background-color:#ffffff;height:100%;"> | |||
| |||
</div> | |||
</td> | |||
</tr> | |||
</table> | |||
</td> | |||
<td style="width:6px;"/> | |||
<td style="width:245px;height:100%"> | |||
<table style="padding:0px;border-collapse:collapse;height:100%;"> | |||
<tr> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab2_selected.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;;font-weight:bold;text-align:center;width:100px;" class="textgray"> | |||
Documentation | |||
</div> | |||
</td> | |||
<td width="40px"> | |||
| |||
</td> | |||
<td/> | |||
</tr> | |||
<tr> | |||
<td style="height:10px;width:245px;background-image:url('menu_cuts/right_top_small.png');" colspan="3"/> | |||
</tr> | |||
<tr> | |||
<td style="background-color:#d8d7d7;width:245px;padding-left:10px;padding-buttom:10px;line-height:17px;" colspan="3"> | |||
<a target="_blank" href="http://openocd.berlios.de/doc/openocd.pdf">OpenOCD Manual</a> | |||
<br/> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="background-color:#d8d7d7;height:15px;" colspan="3"/> | |||
</tr> | |||
<tr> | |||
<td colspan="3"> | |||
<table style="padding:0px;border-collapse:collapse;"> | |||
<td style="background-color:#d8d7d7;width:10px;height:1px"/> | |||
<td style="background-color:#999999;width:225px; height:1px;"/> | |||
<td style="background-color:#d8d7d7;width:10px;height:1px"/> | |||
</table> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="background-color:#d8d7d7;height:15px;" colspan="3"/> | |||
</tr> | |||
<tr style="height:100%;"> | |||
<td style="height:100%;background-color:#d8d7d7;padding-left:10px;padding-right:10px;" colspan="3" class="textgray"> | |||
Download memory from target. <br> | |||
<b>Note</b> that download memory can take | |||
a long time(potentially minutes for megabytes at low JTAG clk speeds). | |||
<p/> | |||
Once the memory is downloaded a link is available on the page to download | |||
the file to your PC. | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="height:30px;background-image:url('menu_cuts/right_bottom.png');" colspan="3"> | |||
| |||
</td> | |||
</tr> | |||
</table> | |||
</td> | |||
</tr> | |||
</table> | |||
</body> | |||
</html> | |||
} | |||
start_chunked "html" | |||
write_chunked $buffer | |||
end_chunked | |||
@@ -1,462 +0,0 @@ | |||
# converted to .tcl by html2tcl.tcl | |||
set buffer "" | |||
append buffer { | |||
<html xmlns="http://www.w3.org/TR/REC-html40"> | |||
<head> | |||
<title>Zylin ZY1000 JTAG debugger</title> | |||
<meta charset="utf-8" content="text/html" http-equiv="Content-Type"/> | |||
<link type="text/css" rel="stylesheet" href="menuweb.css"/> | |||
</head> | |||
} | |||
set console "" | |||
set upload_filename /ram/upload | |||
append buffer { | |||
<body style="margin:0px;"> | |||
<div style="width:974px;height:85px;"> | |||
<div style="float:left;position:relative;left:32px;width:478px;"> | |||
<a href="/"> | |||
<img src="menu_cuts/logo_top.png" style="border:0px;"/> | |||
</a> | |||
</div> | |||
<div style="float:left;position:relative;height:26px; width:278px;left:122px;background-image:url('menu_cuts/top_right.png');"> | |||
<div style="position:relative;left:15px;top:4px;" class="textlight"> | |||
} | |||
append buffer [capture version] | |||
append buffer { | |||
</div> | |||
</div> | |||
</div> | |||
<table style="padding:0px;border-collapse:collapse;"> | |||
<tr> | |||
<td style="width:33px;"> | |||
<div style="width:20px;height:510px;"> | |||
| |||
</div> | |||
</td> | |||
<td style="vertical-align:top;height:100%;width:140px;padding:0px;"> | |||
<table style="padding:0px;border-collapse:collapse;height:100%;width:140px;"> | |||
<tr style="height:59px;"> | |||
<td/> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:38px;background-image:url('menu_cuts/v_tab.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;left:10px;top:10px;font-weight:bold;"> | |||
<a href="index.tcl" style="">Target Status</a> | |||
</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:38px;background-image:url('menu_cuts/v_tab.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;left:10px;top:10px;font-weight:bold;"> | |||
<a href="preconfig.tcl" style="">Select Target Config</a> | |||
</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:38px;background-image:url('menu_cuts/v_tab_selected.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;left:10px;top:10px;font-weight:bold;"> | |||
<a href="editconfigs.tcl" style="font-weight: bold;">Edit Configurations</a> | |||
</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:38px;background-image:url('menu_cuts/v_tab.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;left:10px;top:10px;font-weight:bold;"> | |||
<a href="reload.tcl" style="">Reload Config Scripts</a> | |||
</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:35px;background-image:url('menu_cuts/v_1.png')"/> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;background-image:url('menu_cuts/v_2_tile.png')"/> | |||
</tr> | |||
<tr> | |||
<td style="width:140px;height:140px;background-image:url('menu_cuts/v_3.png')"/> | |||
</tr> | |||
</table> | |||
</td> | |||
<td style="vertical-align:top;padding:0px;height:100%"> | |||
<table style="padding:0px;border-collapse:collapse;height:100%;"> | |||
<tr> | |||
<td> | |||
<table style="padding:0px;border-collapse:collapse;"> | |||
<tr> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab1_selected.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;font-weight:bold;text-align:center;width:100px;"> | |||
<a href="index.tcl" style="font-weight: bold;">Config Target</a> | |||
</div> | |||
</td> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab1.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;font-weight:bold;text-align:center;width:100px;"> | |||
<a href="flashinfo.tcl">Flash</a> | |||
</div> | |||
</td> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab1.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;font-weight:bold;text-align:center;width:100px;"> | |||
<a href="browsemem.tcl">Memory</a> | |||
</div> | |||
</td> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab1.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;font-weight:bold;text-align:center;width:100px;"> | |||
<a href="openocd.tcl">OpenOCD</a> | |||
</div> | |||
</td> | |||
</tr> | |||
</table> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="height:30px;width:535px;background-image:url('menu_cuts/center_top.png');background-repeat: no-repeat;background-position:top right;" colspan="6"> | |||
<div style="width:500px;background-color:#ffffff;height:100%;"> | |||
| |||
</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="background-color:#ffffff;text-indent:30px;height:40px;" colspan="6"> | |||
<H1>Edit Target Configurations</H1> | |||
</td> | |||
</tr> | |||
<tr style="height:100%;"> | |||
<td style="background-color:#ffffff;padding-left:30px;padding-right:30px;width=535px;height:100%;" colspan="6"> | |||
<form action="editconfigs.tcl" method="post"> | |||
} | |||
set form_edittext [formfetch form_edittext] | |||
set form_action [formfetch form_action] | |||
set form_filename [formfetch form_filename] | |||
set form_selected [formfetch form_selected] | |||
if {[string compare $form_action "Load"]==0} { | |||
set form_filename $form_selected | |||
} | |||
if {[string compare $form_action "Delete"]==0} { | |||
capture_catch "rm /config/settings/$form_selected" | |||
} | |||
if {[string compare $form_action "Save"]==0} { | |||
save_var $form_filename [from_textarea $form_edittext] | |||
append buffer "Wrote file $form_filename<br>" | |||
} | |||
set form_edittext "" | |||
# load original or script saved on disk. | |||
if {[string compare $form_action "Show default"]==0} { | |||
set form_edittext [load_file "/rom/$form_selected"] | |||
set form_filename $form_selected | |||
} else { | |||
set form_edittext [load_config $form_filename] | |||
} | |||
set form_edittext_subst [to_textarea $form_edittext] | |||
proc prepend { val list } { | |||
set res "" | |||
foreach value $list { | |||
set t $val | |||
append t $value | |||
lappend res $t | |||
} | |||
return $res | |||
} | |||
set files [prepend target/ [ls /rom/target]] | |||
set files [lunion $files [prepend event/ [ls /config/settings/event]]] | |||
set files [lunion $files [prepend target/ [ls /config/settings/target]]] | |||
set files [lsort $files] | |||
append buffer { | |||
<table style="padding:0px;border-collapse:collapse;"><tr> | |||
<td style="padding-top:1px;"><select name="form_selected"> | |||
} | |||
set foundTarget 0 | |||
foreach i $files { | |||
append buffer { | |||
<option | |||
} | |||
if {[string compare $form_filename $i]==0} { | |||
set foundTarget 1 | |||
append buffer {selected="selected"} | |||
} | |||
append buffer { | |||
value="} | |||
append buffer $i | |||
append buffer {">} | |||
append buffer $i | |||
append buffer {</option> | |||
} | |||
} | |||
if {$foundTarget==0} { | |||
append buffer { | |||
<option selected="selected" value="">Select target config</option> | |||
} | |||
} | |||
append buffer { | |||
</select></td> | |||
<td class="buttonspacesmall"> </td> | |||
<td><input type="submit" value="Load" name="form_action"></td> | |||
<td class="buttonspacesmall"> </td> | |||
<td><input type="submit" value="Show default" name="form_action"></td> | |||
<td class="buttonspacesmall"> </td> | |||
<td><input type="submit" value="Delete" name="form_action"></td> | |||
</tr></table> | |||
<textarea style="overflow:auto;" rows="21" cols="65" name="form_edittext" wrap="off">} | |||
append buffer $form_edittext_subst | |||
append buffer {</textarea> | |||
<table style="padding:0px;border-collapse:collapse;"><tr> | |||
} | |||
append buffer {<td class="formtext">File</td><td><input type="text" name="form_filename" } "\n" | |||
append buffer "value=\"$form_filename\" ></td>\n" | |||
append buffer {<td class="buttonspacesmall"> </td><td><input type="submit" value="Save" name="form_action"></td><br>} "\n" | |||
append buffer {</tr></table>} "\n" | |||
append buffer { | |||
</form> | |||
</td> | |||
</tr> | |||
} | |||
set toggle_details [formfetch toggle_details] | |||
if {[string length $toggle_details]==0} { | |||
set toggle_details 0 | |||
} | |||
set show_details [load_var show_details] | |||
if {[string length $show_details]==0} { | |||
set show_details 0 | |||
} | |||
if {$toggle_details==1} { | |||
set show_details [expr 1-$show_details] | |||
save_var show_details $show_details | |||
} | |||
if {[string length $console]!=0} { | |||
append buffer { | |||
<tr style="height:100%;"> | |||
<td style="height:100%;background-color:red;" colspan="6"> | |||
<table style="padding:0px;border-collapse:collapse;background-color:#ffffff;width:100%" class="textgray"> | |||
<td style="width:25px;"> </td> | |||
} | |||
if {$show_details==1} { | |||
append buffer < | |||
append buffer {td style="background-color:#dddddd;padding-left:5px;padding-right:5px;padding-top:3px;padding-bottom:3px;"} | |||
append buffer > | |||
} else { | |||
append buffer < | |||
append buffer {td style="background-image:url('menu_cuts/h_tab_free.png');width:110px;height:29px;background-repeat: no-repeat;background-position:top left;"} | |||
append buffer > | |||
} | |||
append buffer { | |||
<a class="openocd" href="editconfigs.tcl?toggle_details=1"> | |||
} | |||
if {$show_details==1} { | |||
append buffer "Hide details" | |||
append buffer <br/> | |||
} else { | |||
append buffer {<div style="position:relative;top:7px;text-align:center;">} | |||
append buffer "Show details" | |||
append buffer {</div>} | |||
} | |||
append buffer { | |||
</a> | |||
} | |||
if {$show_details==1} { | |||
append buffer $console | |||
} | |||
append buffer {</td>} | |||
if {$show_details!=1} { | |||
append buffer {<td> </td>} | |||
} | |||
append buffer { | |||
<td style="width:25px;"> </td> | |||
</table> | |||
</td> | |||
</tr> | |||
} | |||
} | |||
append buffer { | |||
<tr> | |||
<td style="height:30px;background-image:url('menu_cuts/center_bottom.png');background-repeat: no-repeat;background-position:top right;" colspan="6"> | |||
<div style="width:500px;background-color:#ffffff;height:100%;"> | |||
| |||
</div> | |||
</td> | |||
</tr> | |||
</table> | |||
</td> | |||
<td style="width:6px;"/> | |||
<td style="width:245px;height:100%"> | |||
<table style="padding:0px;border-collapse:collapse;height:100%;"> | |||
<tr> | |||
<td style="width:103px;height:29px;background-image:url('menu_cuts/h_tab2_selected.png');background-repeat: no-repeat;"> | |||
<div style="position:relative;top:7px;;font-weight:bold;text-align:center;width:100px;" class="textgray"> | |||
Documentation | |||
</div> | |||
</td> | |||
<td width="40px"> | |||
| |||
</td> | |||
<td/> | |||
</tr> | |||
<tr> | |||
<td style="height:10px;width:245px;background-image:url('menu_cuts/right_top_small.png');" colspan="3"/> | |||
</tr> | |||
<tr> | |||
<td style="background-color:#d8d7d7;width:245px;padding-left:10px;padding-buttom:10px;line-height:17px;" colspan="3"> | |||
<a target="_blank" href="http://www.zylin.com/zy1000/ZY1000_Quick_Start_Guide.pdf">Quick Start Manual</a> | |||
<br/> | |||
<a target="_blank" href="http://www.zylin.com/zy1000/openocd.pdf">OpenOCD Manual</a> | |||
<br/> | |||
<a target="_blank" href="http://www.zylin.com/zy1000_contact.html">Contact Zylin AS</a> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="background-color:#d8d7d7;height:15px;" colspan="3"/> | |||
</tr> | |||
<tr> | |||
<td colspan="3"> | |||
<table style="padding:0px;border-collapse:collapse;"> | |||
<td style="background-color:#d8d7d7;width:10px;height:1px"/> | |||
<td style="background-color:#999999;width:225px; height:1px;"/> | |||
<td style="background-color:#d8d7d7;width:10px;height:1px"/> | |||
</table> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="background-color:#d8d7d7;height:15px;" colspan="3"/> | |||
</tr> | |||
<tr style="height:100%;"> | |||
<td style="height:100%;background-color:#d8d7d7;padding-left:10px;padding-right:10px;" colspan="3" class="textgray"> | |||
<p>Here you can edit predefined target configurations, restore predefined configurations to | |||
default state and create new target configurations.<p/> | |||
<p>Typically when creating a new target configuration, you would take an existing | |||
configuration that resembles the most your needs and modify it for your | |||
purposes and save it under a different name.</p> | |||
<p><b>Load</b> - Loads a configuration file into the editor.</p> | |||
<p><b>Show default</b> - Loads the firmware included version of the | |||
configuration file (if any), into the editor.<br> | |||
<b>Note</b> that the editor content is not saved.</p> | |||
<p><b>Delete</b> - Deletes a custom created configuration file.<br> | |||
<b>Note</b> that firmware included configuration files can not be deleted.</p> | |||
<p><b>Save</b> - Save the edited file under the a new or the same name.</p> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td style="height:30px;background-image:url('menu_cuts/right_bottom.png');" colspan="3"> | |||
| |||
</td> | |||
</tr> | |||
</table> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td/> | |||
<td> | |||
<img border="0" src="menu_cuts/logo_bottom.png"/> | |||
</td> | |||
</tr> | |||
</table> | |||
</body> | |||
</html> | |||