From c4478ccffaed4a6ca3ffff324df90f523bec2152 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Mon, 21 May 2018 14:36:09 +0200 Subject: [PATCH 01/35] Fixed wrong updating of the options group tree --- xs/src/slic3r/GUI/Tab.cpp | 24 ++++++++++++++---------- xs/src/slic3r/GUI/Tab.hpp | 1 + 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index 5a47dd1e7..38c97f25e 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -1709,7 +1709,8 @@ void TabPrinter::build_extruder_pages(){ size_t n_before_extruders = 2; // Count of pages before Extruder pages size_t n_after_single_extruder_MM = 2; // Count of pages after single_extruder_multi_material page - if (m_extruders_count_old == m_extruders_count || m_extruders_count <= 2) + if (m_extruders_count_old == m_extruders_count || + (m_has_single_extruder_MM_page && m_extruders_count == 1)) { // if we have a single extruder MM setup, add a page with configuration options: for (int i = 0; i < m_pages.size(); ++i) // first make sure it's not there already @@ -1717,16 +1718,19 @@ void TabPrinter::build_extruder_pages(){ m_pages.erase(m_pages.begin() + i); break; } - if (m_extruders_count > 1 && m_config->opt_bool("single_extruder_multi_material")) { - // create a page, but pretend it's an extruder page, so we can add it to m_pages ourselves - auto page = add_options_page(_(L("Single extruder MM setup")), "printer_empty.png", true); - auto optgroup = page->new_optgroup(_(L("Single extruder multimaterial parameters"))); - optgroup->append_single_option_line("cooling_tube_retraction"); - optgroup->append_single_option_line("cooling_tube_length"); - optgroup->append_single_option_line("parking_pos_retraction"); - m_pages.insert(m_pages.end() - n_after_single_extruder_MM, page); - } + m_has_single_extruder_MM_page = false; } + if (m_extruders_count > 1 && m_config->opt_bool("single_extruder_multi_material") && !m_has_single_extruder_MM_page) { + // create a page, but pretend it's an extruder page, so we can add it to m_pages ourselves + auto page = add_options_page(_(L("Single extruder MM setup")), "printer_empty.png", true); + auto optgroup = page->new_optgroup(_(L("Single extruder multimaterial parameters"))); + optgroup->append_single_option_line("cooling_tube_retraction"); + optgroup->append_single_option_line("cooling_tube_length"); + optgroup->append_single_option_line("parking_pos_retraction"); + m_pages.insert(m_pages.end() - n_after_single_extruder_MM, page); + m_has_single_extruder_MM_page = true; + } + for (auto extruder_idx = m_extruders_count_old; extruder_idx < m_extruders_count; ++extruder_idx){ //# build page diff --git a/xs/src/slic3r/GUI/Tab.hpp b/xs/src/slic3r/GUI/Tab.hpp index 62030bce3..d6bf2cf43 100644 --- a/xs/src/slic3r/GUI/Tab.hpp +++ b/xs/src/slic3r/GUI/Tab.hpp @@ -312,6 +312,7 @@ public: //Slic3r::GUI::Tab::Printer; class TabPrinter : public Tab { + bool m_has_single_extruder_MM_page = false; public: wxButton* m_serial_test_btn; wxButton* m_octoprint_host_test_btn; From 1caeab913bdbd8c8940dcb96c5ce29c46bb51cd5 Mon Sep 17 00:00:00 2001 From: Vojtech Kral Date: Thu, 19 Apr 2018 10:35:47 +0200 Subject: [PATCH 02/35] avrdude base --- xs/src/avrdude/AUTHORS | 28 + xs/src/avrdude/BUILD-FROM-SVN | 13 + xs/src/avrdude/COPYING | 339 + xs/src/avrdude/ChangeLog | 90 + xs/src/avrdude/ChangeLog-2001 | 598 + xs/src/avrdude/ChangeLog-2002 | 237 + xs/src/avrdude/ChangeLog-2003 | 1095 ++ xs/src/avrdude/ChangeLog-2004-2006 | 1644 ++ xs/src/avrdude/ChangeLog-2007 | 364 + xs/src/avrdude/ChangeLog-2008 | 185 + xs/src/avrdude/ChangeLog-2009 | 411 + xs/src/avrdude/ChangeLog-2010 | 354 + xs/src/avrdude/ChangeLog-2011 | 489 + xs/src/avrdude/ChangeLog-2012 | 729 + xs/src/avrdude/ChangeLog-2013 | 618 + xs/src/avrdude/ChangeLog-2014 | 697 + xs/src/avrdude/ChangeLog-2015 | 54 + xs/src/avrdude/Makefile.am | 206 + xs/src/avrdude/NEWS | 913 + xs/src/avrdude/README | 64 + xs/src/avrdude/ac_cfg.h | 195 + xs/src/avrdude/ac_cfg.h.in | 194 + xs/src/avrdude/arduino.c | 132 + xs/src/avrdude/arduino.h | 29 + xs/src/avrdude/atmel-docs/AVR109.pdf | Bin 0 -> 94446 bytes xs/src/avrdude/atmel-docs/AVR910.pdf | Bin 0 -> 224606 bytes .../avrdude/atmel-docs/AVRISPmkII-AVR069.pdf | Bin 0 -> 326430 bytes .../atmel-docs/EDBG/common/browserDetect.js | 116 + .../atmel-docs/EDBG/common/css/960.css | 1 + .../atmel-docs/EDBG/common/css/docbook.css | 227 + .../atmel-docs/EDBG/common/css/fluid_grid.css | 154 + .../atmel-docs/EDBG/common/css/index.css | 59 + .../EDBG/common/css/positioning.css | 493 + .../atmel-docs/EDBG/common/css/print.css | 28 + .../atmel-docs/EDBG/common/css/reset.css | 1 + .../atmel-docs/EDBG/common/css/text.css | 1 + .../EDBG/common/fonts/DroidSansMono.eot | Bin 0 -> 78514 bytes .../EDBG/common/fonts/DroidSansMono.ttf | Bin 0 -> 78296 bytes .../EDBG/common/images/Book_Closed.png | Bin 0 -> 3245 bytes .../EDBG/common/images/Book_Open.png | Bin 0 -> 703 bytes .../EDBG/common/images/Document_Text.png | Bin 0 -> 583 bytes .../atmel-docs/EDBG/common/images/Library.png | Bin 0 -> 798 bytes .../EDBG/common/images/external_link.gif | Bin 0 -> 98 bytes .../atmel-docs/EDBG/common/images/loading.gif | Bin 0 -> 1553 bytes .../atmel-docs/EDBG/common/images/logo.png | Bin 0 -> 4305 bytes .../atmel-docs/EDBG/common/images/minus.png | Bin 0 -> 156 bytes .../EDBG/common/images/next-arrow.png | Bin 0 -> 199 bytes .../atmel-docs/EDBG/common/images/plus.png | Bin 0 -> 164 bytes .../EDBG/common/images/previous-arrow.png | Bin 0 -> 198 bytes .../EDBG/common/images/search-icon.png | Bin 0 -> 340 bytes .../atmel-docs/EDBG/common/images/sidebar.png | Bin 0 -> 177 bytes .../EDBG/common/images/starsSmall.png | Bin 0 -> 1032 bytes .../EDBG/common/images/toc-icon.png | Bin 0 -> 3447 bytes .../common/images/ui-icons_217bc0_256x240.png | Bin 0 -> 4369 bytes .../EDBG/common/jquery/jquery-1.7.2.min.js | 4 + .../EDBG/common/jquery/jquery.cookie.js | 93 + .../EDBG/common/jquery/jquery.ui.all.js | 418 + .../common/jquery/layout/jquery.layout.js | 5449 ++++++ .../images/ui-anim_basic_16x16.gif | Bin 0 -> 1553 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_55_fbec88_40x100.png | Bin 0 -> 182 bytes .../images/ui-bg_glass_75_d0e5f5_1x400.png | Bin 0 -> 162 bytes .../images/ui-bg_glass_85_dfeffc_1x400.png | Bin 0 -> 123 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 0 -> 3457 bytes .../ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 0 -> 104 bytes .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 88 bytes .../images/ui-icons_217bc0_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_469bdd_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_6da8d5_256x240.png | Bin 0 -> 5355 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_d8e7f3_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_f9bd01_256x240.png | Bin 0 -> 5355 bytes .../theme-redmond/jquery-ui-1.8.2.custom.css | 398 + .../common/jquery/treeview/images/file.gif | Bin 0 -> 1008 bytes .../jquery/treeview/images/folder-closed.gif | Bin 0 -> 631 bytes .../common/jquery/treeview/images/folder.gif | Bin 0 -> 631 bytes .../treeview/images/treeview-black-line.gif | Bin 0 -> 1877 bytes .../jquery/treeview/images/treeview-black.gif | Bin 0 -> 1216 bytes .../treeview/images/treeview-default-line.gif | Bin 0 -> 1993 bytes .../treeview/images/treeview-default.gif | Bin 0 -> 1222 bytes .../images/treeview-famfamfam-line.gif | Bin 0 -> 807 bytes .../treeview/images/treeview-famfamfam.gif | Bin 0 -> 1280 bytes .../treeview/images/treeview-gray-line.gif | Bin 0 -> 1877 bytes .../jquery/treeview/images/treeview-gray.gif | Bin 0 -> 1230 bytes .../treeview/images/treeview-red-line.gif | Bin 0 -> 1877 bytes .../jquery/treeview/images/treeview-red.gif | Bin 0 -> 1230 bytes .../jquery/treeview/jquery.treeview.css | 85 + .../jquery/treeview/jquery.treeview.min.js | 16 + xs/src/avrdude/atmel-docs/EDBG/common/main.js | 282 + .../atmel-docs/EDBG/common/splitterInit.js | 40 + .../atmel-docs/EDBG/protocoldocs/ch01s01.html | 218 + .../atmel-docs/EDBG/protocoldocs/ch01s02.html | 234 + .../atmel-docs/EDBG/protocoldocs/ch02s01.html | 212 + .../atmel-docs/EDBG/protocoldocs/ch02s02.html | 213 + .../EDBG/protocoldocs/ch02s02s01.html | 211 + .../EDBG/protocoldocs/ch02s02s02.html | 211 + .../EDBG/protocoldocs/ch02s02s02s01.html | 212 + .../EDBG/protocoldocs/ch02s02s02s02.html | 211 + .../EDBG/protocoldocs/ch02s02s03.html | 211 + .../EDBG/protocoldocs/ch02s02s03s01.html | 211 + .../EDBG/protocoldocs/ch02s02s03s02.html | 211 + .../EDBG/protocoldocs/ch02s02s03s03.html | 211 + .../EDBG/protocoldocs/ch02s02s03s04.html | 211 + .../EDBG/protocoldocs/ch02s03s01.html | 214 + .../EDBG/protocoldocs/ch02s03s02.html | 214 + .../EDBG/protocoldocs/ch02s03s03.html | 212 + .../EDBG/protocoldocs/ch02s03s04.html | 212 + .../EDBG/protocoldocs/ch02s03s05.html | 212 + .../EDBG/protocoldocs/ch02s03s06.html | 216 + .../EDBG/protocoldocs/ch02s03s07.html | 214 + .../EDBG/protocoldocs/ch02s03s08.html | 211 + .../EDBG/protocoldocs/ch02s03s09.html | 211 + .../atmel-docs/EDBG/protocoldocs/ch02s04.html | 216 + .../EDBG/protocoldocs/ch02s04s01.html | 216 + .../EDBG/protocoldocs/ch02s04s02.html | 218 + .../EDBG/protocoldocs/ch02s04s03.html | 214 + .../atmel-docs/EDBG/protocoldocs/ch03s01.html | 211 + .../EDBG/protocoldocs/ch03s01s01.html | 215 + .../EDBG/protocoldocs/ch03s01s01.html~ | 215 + .../EDBG/protocoldocs/ch03s01s02.html | 216 + .../EDBG/protocoldocs/ch03s01s03.html | 216 + .../EDBG/protocoldocs/ch03s01s03s01.html | 211 + .../atmel-docs/EDBG/protocoldocs/ch03s02.html | 211 + .../EDBG/protocoldocs/ch03s02s01.html | 211 + .../EDBG/protocoldocs/ch03s02s02.html | 211 + .../EDBG/protocoldocs/ch03s02s03.html | 212 + .../EDBG/protocoldocs/ch03s02s04.html | 211 + .../atmel-docs/EDBG/protocoldocs/ch04s01.html | 212 + .../atmel-docs/EDBG/protocoldocs/ch04s02.html | 228 + .../atmel-docs/EDBG/protocoldocs/ch04s03.html | 218 + .../atmel-docs/EDBG/protocoldocs/ch04s04.html | 212 + .../EDBG/protocoldocs/ch04s04s01.html | 215 + .../EDBG/protocoldocs/ch04s04s03.html | 211 + .../EDBG/protocoldocs/ch04s04s04.html | 211 + .../EDBG/protocoldocs/ch04s04s05.html | 236 + .../atmel-docs/EDBG/protocoldocs/ch04s05.html | 213 + .../EDBG/protocoldocs/ch04s05s01.html | 215 + .../EDBG/protocoldocs/ch04s05s03.html | 216 + .../EDBG/protocoldocs/ch04s05s04.html | 216 + .../EDBG/protocoldocs/ch04s05s06.html | 211 + .../EDBG/protocoldocs/ch04s05s06s02.html | 213 + .../EDBG/protocoldocs/ch04s05s06s03.html | 213 + .../EDBG/protocoldocs/ch04s05s06s04.html | 217 + .../EDBG/protocoldocs/ch04s05s06s05.html | 217 + .../EDBG/protocoldocs/ch04s05s07.html | 211 + .../EDBG/protocoldocs/ch04s05s07s01.html | 211 + .../EDBG/protocoldocs/ch04s05s07s02.html | 211 + .../EDBG/protocoldocs/ch04s05s07s03.html | 213 + .../EDBG/protocoldocs/ch04s05s07s04.html | 211 + .../EDBG/protocoldocs/ch04s05s08.html | 211 + .../EDBG/protocoldocs/ch04s05s08s01.html | 213 + .../EDBG/protocoldocs/ch04s05s08s02.html | 214 + .../EDBG/protocoldocs/ch04s05s08s03.html | 211 + .../EDBG/protocoldocs/ch04s05s09.html | 220 + .../EDBG/protocoldocs/ch04s05s10.html | 310 + .../atmel-docs/EDBG/protocoldocs/ch05s01.html | 211 + .../EDBG/protocoldocs/ch05s01s01.html | 215 + .../EDBG/protocoldocs/ch05s01s02.html | 216 + .../EDBG/protocoldocs/ch05s01s03.html | 216 + .../EDBG/protocoldocs/ch05s01s04.html | 216 + .../EDBG/protocoldocs/ch05s01s05.html | 213 + .../EDBG/protocoldocs/ch05s01s06.html | 215 + .../EDBG/protocoldocs/ch05s01s07.html | 213 + .../EDBG/protocoldocs/ch05s01s08.html | 213 + .../EDBG/protocoldocs/ch05s01s09.html | 214 + .../EDBG/protocoldocs/ch05s01s10.html | 213 + .../EDBG/protocoldocs/ch05s01s11.html | 214 + .../EDBG/protocoldocs/ch05s01s12.html | 214 + .../EDBG/protocoldocs/ch05s01s13.html | 215 + .../EDBG/protocoldocs/ch05s01s14.html | 217 + .../EDBG/protocoldocs/ch05s01s15.html | 216 + .../atmel-docs/EDBG/protocoldocs/ch05s02.html | 211 + .../EDBG/protocoldocs/ch05s02s01.html | 211 + .../EDBG/protocoldocs/ch05s02s02.html | 211 + .../EDBG/protocoldocs/ch05s02s03.html | 211 + .../EDBG/protocoldocs/ch05s02s04.html | 211 + .../EDBG/protocoldocs/ch05s02s05.html | 212 + .../EDBG/protocoldocs/ch05s02s06.html | 211 + .../atmel-docs/EDBG/protocoldocs/ch05s03.html | 211 + .../EDBG/protocoldocs/ch05s03s01.html | 219 + .../EDBG/protocoldocs/ch05s03s02.html | 224 + .../EDBG/protocoldocs/ch05s03s03.html | 214 + .../atmel-docs/EDBG/protocoldocs/ch05s04.html | 360 + .../atmel-docs/EDBG/protocoldocs/ch06s01.html | 211 + .../EDBG/protocoldocs/ch06s01s01.html | 215 + .../EDBG/protocoldocs/ch06s01s02.html | 216 + .../EDBG/protocoldocs/ch06s01s03.html | 216 + .../EDBG/protocoldocs/ch06s01s04.html | 217 + .../EDBG/protocoldocs/ch06s01s05.html | 213 + .../EDBG/protocoldocs/ch06s01s06.html | 215 + .../EDBG/protocoldocs/ch06s01s07.html | 213 + .../EDBG/protocoldocs/ch06s01s08.html | 213 + .../EDBG/protocoldocs/ch06s01s09.html | 215 + .../EDBG/protocoldocs/ch06s01s10.html | 214 + .../EDBG/protocoldocs/ch06s01s11.html | 213 + .../EDBG/protocoldocs/ch06s01s12.html | 215 + .../EDBG/protocoldocs/ch06s01s13.html | 216 + .../EDBG/protocoldocs/ch06s01s14.html | 213 + .../EDBG/protocoldocs/ch06s01s15.html | 213 + .../EDBG/protocoldocs/ch06s01s16.html | 213 + .../EDBG/protocoldocs/ch06s01s17.html | 217 + .../EDBG/protocoldocs/ch06s01s18.html | 215 + .../EDBG/protocoldocs/ch06s01s19.html | 220 + .../EDBG/protocoldocs/ch06s01s20.html | 216 + .../EDBG/protocoldocs/ch06s01s21.html | 214 + .../EDBG/protocoldocs/ch06s01s22.html | 215 + .../EDBG/protocoldocs/ch06s01s23.html | 215 + .../EDBG/protocoldocs/ch06s01s24.html | 214 + .../EDBG/protocoldocs/ch06s01s25.html | 213 + .../EDBG/protocoldocs/ch06s01s26.html | 213 + .../EDBG/protocoldocs/ch06s01s27.html | 216 + .../EDBG/protocoldocs/ch06s01s28.html | 216 + .../EDBG/protocoldocs/ch06s01s29.html | 214 + .../atmel-docs/EDBG/protocoldocs/ch06s02.html | 211 + .../EDBG/protocoldocs/ch06s02s01.html | 211 + .../EDBG/protocoldocs/ch06s02s02.html | 211 + .../EDBG/protocoldocs/ch06s02s03.html | 211 + .../EDBG/protocoldocs/ch06s02s04.html | 211 + .../EDBG/protocoldocs/ch06s02s05.html | 211 + .../atmel-docs/EDBG/protocoldocs/ch06s03.html | 211 + .../EDBG/protocoldocs/ch06s03s01.html | 213 + .../EDBG/protocoldocs/ch06s03s02.html | 211 + .../EDBG/protocoldocs/ch06s04s01.html | 213 + .../EDBG/protocoldocs/ch06s04s02.html | 219 + .../EDBG/protocoldocs/ch06s04s03.html | 211 + .../atmel-docs/EDBG/protocoldocs/ch06s05.html | 211 + .../EDBG/protocoldocs/ch06s05s01.html | 227 + .../EDBG/protocoldocs/ch06s05s02.html | 231 + .../EDBG/protocoldocs/ch06s05s03.html | 219 + .../EDBG/protocoldocs/ch06s05s04.html | 220 + .../EDBG/protocoldocs/ch06s05s05.html | 231 + .../atmel-docs/EDBG/protocoldocs/ch06s06.html | 423 + .../atmel-docs/EDBG/protocoldocs/ch07s01.html | 211 + .../EDBG/protocoldocs/ch07s01s01.html | 211 + .../EDBG/protocoldocs/ch07s01s02.html | 211 + .../EDBG/protocoldocs/ch07s01s03.html | 211 + .../EDBG/protocoldocs/ch07s01s04.html | 211 + .../EDBG/protocoldocs/ch07s01s05.html | 211 + .../EDBG/protocoldocs/ch07s01s06.html | 212 + .../EDBG/protocoldocs/ch07s01s07.html | 231 + .../EDBG/protocoldocs/ch07s01s08.html | 211 + .../EDBG/protocoldocs/ch07s01s09.html | 211 + .../EDBG/protocoldocs/ch07s01s10.html | 211 + .../EDBG/protocoldocs/ch07s01s11.html | 211 + .../EDBG/protocoldocs/ch07s01s12.html | 212 + .../EDBG/protocoldocs/ch07s01s13.html | 211 + .../EDBG/protocoldocs/ch07s01s14.html | 211 + .../EDBG/protocoldocs/ch07s01s15.html | 211 + .../EDBG/protocoldocs/ch07s01s16.html | 211 + .../EDBG/protocoldocs/ch07s01s17.html | 211 + .../atmel-docs/EDBG/protocoldocs/ch07s02.html | 211 + .../atmel-docs/EDBG/protocoldocs/ch07s03.html | 253 + .../atmel-docs/EDBG/protocoldocs/ch08s01.html | 211 + .../EDBG/protocoldocs/ch08s01s01.html | 211 + .../EDBG/protocoldocs/ch08s01s02.html | 211 + .../EDBG/protocoldocs/ch08s01s03.html | 211 + .../EDBG/protocoldocs/ch08s01s04.html | 211 + .../EDBG/protocoldocs/ch08s01s05.html | 211 + .../EDBG/protocoldocs/ch08s01s06.html | 211 + .../atmel-docs/EDBG/protocoldocs/ch08s02.html | 211 + .../atmel-docs/EDBG/protocoldocs/ch08s03.html | 240 + .../EDBG/protocoldocs/document.revisions.html | 209 + .../atmel-docs/EDBG/protocoldocs/index.html | 227 + .../atmel-docs/EDBG/protocoldocs/pr01.html | 213 + .../protocoldocs.Introduction.html | 209 + .../protocoldocs.avr32protocol.html | 212 + .../protocoldocs.avr8protocol.html | 211 + .../protocoldocs.avrispprotocol.html | 219 + .../protocoldocs.avrprotocol.Overview.html | 209 + .../protocoldocs/protocoldocs.cmsis_dap.html | 209 + .../protocoldocs.edbg_ctrl_protocol.html | 210 + .../protocoldocs.tpiprotocol.html | 213 + .../protocoldocs/search/htmlFileInfoList.js | 392 + .../EDBG/protocoldocs/search/index-1.js | 851 + .../EDBG/protocoldocs/search/index-2.js | 850 + .../EDBG/protocoldocs/search/index-3.js | 846 + .../EDBG/protocoldocs/search/l10n.js | 3 + .../EDBG/protocoldocs/search/nwSearchFnt.js | 886 + .../search/stemmers/en_stemmer.js | 234 + .../protocoldocs/section_avr32_memtypes.html | 211 + .../section_avr32_setget_params.html | 217 + .../protocoldocs/section_avr8_memtypes.html | 211 + .../section_avr8_query_contexts.html | 211 + .../section_avr8_setget_params.html | 231 + .../section_edbg_ctrl_setget_params.html | 368 + .../section_edbg_query_contexts.html | 211 + .../section_housekeeping_start_session.html | 214 + .../EDBG/protocoldocs/section_i5v_3yz_rl.html | 211 + .../EDBG/protocoldocs/section_jdx_m11_sl.html | 211 + .../EDBG/protocoldocs/section_qhb_x1c_sl.html | 211 + .../protocoldocs/section_serial_trace.html | 214 + .../EDBG/protocoldocs/section_t1f_hb1_sl.html | 211 + xs/src/avrdude/atmel-docs/JTAGICE-AVR060.pdf | Bin 0 -> 139206 bytes .../avrdude/atmel-docs/JTAGICEmkII-AVR067.pdf | Bin 0 -> 327125 bytes xs/src/avrdude/atmel-docs/STK500-AVR061.pdf | Bin 0 -> 814798 bytes xs/src/avrdude/atmel-docs/STK500v2-AVR068.pdf | Bin 0 -> 161607 bytes xs/src/avrdude/avr.c | 1243 ++ xs/src/avrdude/avr910.c | 774 + xs/src/avrdude/avr910.h | 35 + xs/src/avrdude/avrdude.1 | 1133 ++ xs/src/avrdude/avrdude.conf | 14982 +++++++++++++++ xs/src/avrdude/avrdude.conf.in | 14984 ++++++++++++++++ xs/src/avrdude/avrdude.conf.tmp | 14984 ++++++++++++++++ xs/src/avrdude/avrdude.h | 63 + xs/src/avrdude/avrdude.spec.in | 113 + xs/src/avrdude/avrftdi.c | 1275 ++ xs/src/avrdude/avrftdi.h | 40 + xs/src/avrdude/avrftdi_private.h | 86 + xs/src/avrdude/avrftdi_tpi.c | 254 + xs/src/avrdude/avrftdi_tpi.h | 9 + xs/src/avrdude/avrpart.c | 680 + xs/src/avrdude/bitbang.c | 655 + xs/src/avrdude/bitbang.h | 58 + xs/src/avrdude/bootstrap | 21 + xs/src/avrdude/buspirate.c | 1374 ++ xs/src/avrdude/buspirate.h | 32 + xs/src/avrdude/butterfly.c | 762 + xs/src/avrdude/butterfly.h | 37 + xs/src/avrdude/config.c | 349 + xs/src/avrdude/config.h | 103 + xs/src/avrdude/config_gram.c | 3718 ++++ xs/src/avrdude/config_gram.h | 330 + xs/src/avrdude/config_gram.y | 1571 ++ xs/src/avrdude/configure.ac | 572 + xs/src/avrdude/confwin.c | 54 + xs/src/avrdude/crc16.c | 83 + xs/src/avrdude/crc16.h | 34 + xs/src/avrdude/dfu.c | 516 + xs/src/avrdude/dfu.h | 137 + xs/src/avrdude/doc/.cvsignore | 25 + xs/src/avrdude/doc/Makefile.am | 94 + xs/src/avrdude/doc/TODO | 26 + xs/src/avrdude/doc/avrdude.texi | 2586 +++ xs/src/avrdude/doc/parts_comments.txt | 5 + xs/src/avrdude/fileio.c | 1604 ++ xs/src/avrdude/flip1.c | 949 + xs/src/avrdude/flip1.h | 35 + xs/src/avrdude/flip2.c | 1002 ++ xs/src/avrdude/flip2.h | 35 + xs/src/avrdude/freebsd_ppi.h | 39 + xs/src/avrdude/ft245r.c | 963 + xs/src/avrdude/ft245r.h | 8 + xs/src/avrdude/jtag3.c | 2286 +++ xs/src/avrdude/jtag3.h | 60 + xs/src/avrdude/jtag3_private.h | 319 + xs/src/avrdude/jtagmkI.c | 1365 ++ xs/src/avrdude/jtagmkI.h | 36 + xs/src/avrdude/jtagmkII.c | 4023 +++++ xs/src/avrdude/jtagmkII.h | 63 + xs/src/avrdude/jtagmkII_private.h | 385 + xs/src/avrdude/jtagmkI_private.h | 168 + xs/src/avrdude/lexer.c | 3066 ++++ xs/src/avrdude/lexer.l | 262 + xs/src/avrdude/libavrdude.h | 945 + xs/src/avrdude/linux_ppdev.h | 57 + xs/src/avrdude/linuxgpio.c | 354 + xs/src/avrdude/linuxgpio.h | 36 + xs/src/avrdude/lists.c | 1407 ++ xs/src/avrdude/main.c | 1412 ++ xs/src/avrdude/my_ddk_hidsdi.h | 48 + xs/src/avrdude/par.c | 411 + xs/src/avrdude/par.h | 35 + xs/src/avrdude/pgm.c | 332 + xs/src/avrdude/pgm_type.c | 153 + xs/src/avrdude/pickit2.c | 1340 ++ xs/src/avrdude/pickit2.h | 35 + xs/src/avrdude/pindefs.c | 370 + xs/src/avrdude/ppi.c | 236 + xs/src/avrdude/ppi.h | 59 + xs/src/avrdude/ppiwin.c | 417 + xs/src/avrdude/safemode.c | 318 + xs/src/avrdude/ser_avrdoper.c | 661 + xs/src/avrdude/ser_posix.c | 497 + xs/src/avrdude/ser_win32.c | 698 + xs/src/avrdude/serbb.h | 37 + xs/src/avrdude/serbb_posix.c | 321 + xs/src/avrdude/serbb_win32.c | 366 + xs/src/avrdude/solaris_ecpp.h | 50 + xs/src/avrdude/stk500.c | 1320 ++ xs/src/avrdude/stk500.h | 41 + xs/src/avrdude/stk500_private.h | 103 + xs/src/avrdude/stk500generic.c | 90 + xs/src/avrdude/stk500generic.h | 29 + xs/src/avrdude/stk500v2.c | 4762 +++++ xs/src/avrdude/stk500v2.h | 65 + xs/src/avrdude/stk500v2_private.h | 331 + xs/src/avrdude/term.c | 957 + xs/src/avrdude/term.h | 37 + xs/src/avrdude/tools/build-mingw32.sh | 54 + xs/src/avrdude/tools/get-dw-params.xsl | 155 + xs/src/avrdude/tools/get-hv-params.xsl | 254 + xs/src/avrdude/tools/get-stk600-cards.xsl | 62 + xs/src/avrdude/tools/get-stk600-devices.xsl | 51 + xs/src/avrdude/tpi.h | 76 + xs/src/avrdude/update.c | 388 + xs/src/avrdude/usb_hidapi.c | 357 + xs/src/avrdude/usb_libusb.c | 615 + xs/src/avrdude/usbasp.c | 1221 ++ xs/src/avrdude/usbasp.h | 137 + xs/src/avrdude/usbdevs.h | 83 + xs/src/avrdude/usbtiny.c | 589 + xs/src/avrdude/usbtiny.h | 68 + xs/src/avrdude/windows/.cvsignore | 4 + xs/src/avrdude/windows/Makefile.am | 57 + xs/src/avrdude/windows/giveio.c | 168 + xs/src/avrdude/windows/giveio.sys | Bin 0 -> 5248 bytes xs/src/avrdude/windows/install_giveio.bat | 34 + xs/src/avrdude/windows/loaddrv.c | 460 + xs/src/avrdude/windows/loaddrv.h | 20 + xs/src/avrdude/windows/remove_giveio.bat | 14 + xs/src/avrdude/windows/status_giveio.bat | 12 + xs/src/avrdude/wiring.c | 221 + xs/src/avrdude/wiring.h | 29 + 415 files changed, 167903 insertions(+) create mode 100644 xs/src/avrdude/AUTHORS create mode 100644 xs/src/avrdude/BUILD-FROM-SVN create mode 100644 xs/src/avrdude/COPYING create mode 100644 xs/src/avrdude/ChangeLog create mode 100644 xs/src/avrdude/ChangeLog-2001 create mode 100644 xs/src/avrdude/ChangeLog-2002 create mode 100644 xs/src/avrdude/ChangeLog-2003 create mode 100644 xs/src/avrdude/ChangeLog-2004-2006 create mode 100644 xs/src/avrdude/ChangeLog-2007 create mode 100644 xs/src/avrdude/ChangeLog-2008 create mode 100644 xs/src/avrdude/ChangeLog-2009 create mode 100644 xs/src/avrdude/ChangeLog-2010 create mode 100644 xs/src/avrdude/ChangeLog-2011 create mode 100644 xs/src/avrdude/ChangeLog-2012 create mode 100644 xs/src/avrdude/ChangeLog-2013 create mode 100644 xs/src/avrdude/ChangeLog-2014 create mode 100644 xs/src/avrdude/ChangeLog-2015 create mode 100644 xs/src/avrdude/Makefile.am create mode 100644 xs/src/avrdude/NEWS create mode 100644 xs/src/avrdude/README create mode 100644 xs/src/avrdude/ac_cfg.h create mode 100644 xs/src/avrdude/ac_cfg.h.in create mode 100644 xs/src/avrdude/arduino.c create mode 100644 xs/src/avrdude/arduino.h create mode 100644 xs/src/avrdude/atmel-docs/AVR109.pdf create mode 100644 xs/src/avrdude/atmel-docs/AVR910.pdf create mode 100644 xs/src/avrdude/atmel-docs/AVRISPmkII-AVR069.pdf create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/browserDetect.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/css/960.css create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/css/docbook.css create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/css/fluid_grid.css create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/css/index.css create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/css/positioning.css create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/css/print.css create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/css/reset.css create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/css/text.css create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.eot create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.ttf create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/Book_Closed.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/Book_Open.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/Document_Text.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/Library.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/external_link.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/loading.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/logo.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/minus.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/next-arrow.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/plus.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/previous-arrow.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/search-icon.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/sidebar.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/starsSmall.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/toc-icon.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/images/ui-icons_217bc0_256x240.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery-1.7.2.min.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.cookie.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.ui.all.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/layout/jquery.layout.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-anim_basic_16x16.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_55_fbec88_40x100.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_75_d0e5f5_1x400.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_85_dfeffc_1x400.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_217bc0_256x240.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_2e83ff_256x240.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_469bdd_256x240.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_6da8d5_256x240.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_cd0a0a_256x240.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_d8e7f3_256x240.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_f9bd01_256x240.png create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/jquery-ui-1.8.2.custom.css create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/file.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder-closed.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black-line.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default-line.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-default.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam-line.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray-line.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red-line.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red.gif create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.css create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.min.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/main.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/common/splitterInit.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch01s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s02s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s02s03s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s05.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s06.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s07.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s08.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s03s09.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch02s04s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s01.html~ create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s01s03s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch03s02s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s04s05.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s06s05.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s07s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s08s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s09.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch04s05s10.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s05.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s06.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s07.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s08.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s09.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s10.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s11.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s12.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s13.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s14.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s01s15.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s05.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s02s06.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s03s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch05s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s05.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s06.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s07.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s08.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s09.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s10.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s11.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s12.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s13.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s14.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s15.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s16.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s17.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s18.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s19.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s20.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s21.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s22.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s23.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s24.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s25.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s26.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s27.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s28.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s01s29.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s02s05.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s03s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s04s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s05s05.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch06s06.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s05.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s06.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s07.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s08.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s09.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s10.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s11.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s12.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s13.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s14.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s15.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s16.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s01s17.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch07s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s04.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s05.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s01s06.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s02.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/ch08s03.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/document.revisions.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/index.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/pr01.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.Introduction.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr32protocol.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avr8protocol.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrispprotocol.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.avrprotocol.Overview.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.cmsis_dap.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.edbg_ctrl_protocol.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/protocoldocs.tpiprotocol.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/htmlFileInfoList.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-1.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-2.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/index-3.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/l10n.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/nwSearchFnt.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/search/stemmers/en_stemmer.js create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_memtypes.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr32_setget_params.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_memtypes.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_query_contexts.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_avr8_setget_params.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_ctrl_setget_params.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_edbg_query_contexts.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_housekeeping_start_session.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_i5v_3yz_rl.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_jdx_m11_sl.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_qhb_x1c_sl.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_serial_trace.html create mode 100644 xs/src/avrdude/atmel-docs/EDBG/protocoldocs/section_t1f_hb1_sl.html create mode 100644 xs/src/avrdude/atmel-docs/JTAGICE-AVR060.pdf create mode 100644 xs/src/avrdude/atmel-docs/JTAGICEmkII-AVR067.pdf create mode 100644 xs/src/avrdude/atmel-docs/STK500-AVR061.pdf create mode 100644 xs/src/avrdude/atmel-docs/STK500v2-AVR068.pdf create mode 100644 xs/src/avrdude/avr.c create mode 100644 xs/src/avrdude/avr910.c create mode 100644 xs/src/avrdude/avr910.h create mode 100644 xs/src/avrdude/avrdude.1 create mode 100644 xs/src/avrdude/avrdude.conf create mode 100644 xs/src/avrdude/avrdude.conf.in create mode 100644 xs/src/avrdude/avrdude.conf.tmp create mode 100644 xs/src/avrdude/avrdude.h create mode 100644 xs/src/avrdude/avrdude.spec.in create mode 100644 xs/src/avrdude/avrftdi.c create mode 100644 xs/src/avrdude/avrftdi.h create mode 100644 xs/src/avrdude/avrftdi_private.h create mode 100644 xs/src/avrdude/avrftdi_tpi.c create mode 100644 xs/src/avrdude/avrftdi_tpi.h create mode 100644 xs/src/avrdude/avrpart.c create mode 100644 xs/src/avrdude/bitbang.c create mode 100644 xs/src/avrdude/bitbang.h create mode 100755 xs/src/avrdude/bootstrap create mode 100644 xs/src/avrdude/buspirate.c create mode 100644 xs/src/avrdude/buspirate.h create mode 100644 xs/src/avrdude/butterfly.c create mode 100644 xs/src/avrdude/butterfly.h create mode 100644 xs/src/avrdude/config.c create mode 100644 xs/src/avrdude/config.h create mode 100644 xs/src/avrdude/config_gram.c create mode 100644 xs/src/avrdude/config_gram.h create mode 100644 xs/src/avrdude/config_gram.y create mode 100644 xs/src/avrdude/configure.ac create mode 100644 xs/src/avrdude/confwin.c create mode 100644 xs/src/avrdude/crc16.c create mode 100644 xs/src/avrdude/crc16.h create mode 100644 xs/src/avrdude/dfu.c create mode 100644 xs/src/avrdude/dfu.h create mode 100644 xs/src/avrdude/doc/.cvsignore create mode 100644 xs/src/avrdude/doc/Makefile.am create mode 100644 xs/src/avrdude/doc/TODO create mode 100644 xs/src/avrdude/doc/avrdude.texi create mode 100644 xs/src/avrdude/doc/parts_comments.txt create mode 100644 xs/src/avrdude/fileio.c create mode 100644 xs/src/avrdude/flip1.c create mode 100644 xs/src/avrdude/flip1.h create mode 100644 xs/src/avrdude/flip2.c create mode 100644 xs/src/avrdude/flip2.h create mode 100644 xs/src/avrdude/freebsd_ppi.h create mode 100644 xs/src/avrdude/ft245r.c create mode 100644 xs/src/avrdude/ft245r.h create mode 100644 xs/src/avrdude/jtag3.c create mode 100644 xs/src/avrdude/jtag3.h create mode 100644 xs/src/avrdude/jtag3_private.h create mode 100644 xs/src/avrdude/jtagmkI.c create mode 100644 xs/src/avrdude/jtagmkI.h create mode 100644 xs/src/avrdude/jtagmkII.c create mode 100644 xs/src/avrdude/jtagmkII.h create mode 100644 xs/src/avrdude/jtagmkII_private.h create mode 100644 xs/src/avrdude/jtagmkI_private.h create mode 100644 xs/src/avrdude/lexer.c create mode 100644 xs/src/avrdude/lexer.l create mode 100644 xs/src/avrdude/libavrdude.h create mode 100644 xs/src/avrdude/linux_ppdev.h create mode 100644 xs/src/avrdude/linuxgpio.c create mode 100644 xs/src/avrdude/linuxgpio.h create mode 100644 xs/src/avrdude/lists.c create mode 100644 xs/src/avrdude/main.c create mode 100644 xs/src/avrdude/my_ddk_hidsdi.h create mode 100644 xs/src/avrdude/par.c create mode 100644 xs/src/avrdude/par.h create mode 100644 xs/src/avrdude/pgm.c create mode 100644 xs/src/avrdude/pgm_type.c create mode 100644 xs/src/avrdude/pickit2.c create mode 100644 xs/src/avrdude/pickit2.h create mode 100644 xs/src/avrdude/pindefs.c create mode 100644 xs/src/avrdude/ppi.c create mode 100644 xs/src/avrdude/ppi.h create mode 100644 xs/src/avrdude/ppiwin.c create mode 100644 xs/src/avrdude/safemode.c create mode 100644 xs/src/avrdude/ser_avrdoper.c create mode 100644 xs/src/avrdude/ser_posix.c create mode 100644 xs/src/avrdude/ser_win32.c create mode 100644 xs/src/avrdude/serbb.h create mode 100644 xs/src/avrdude/serbb_posix.c create mode 100644 xs/src/avrdude/serbb_win32.c create mode 100644 xs/src/avrdude/solaris_ecpp.h create mode 100644 xs/src/avrdude/stk500.c create mode 100644 xs/src/avrdude/stk500.h create mode 100644 xs/src/avrdude/stk500_private.h create mode 100644 xs/src/avrdude/stk500generic.c create mode 100644 xs/src/avrdude/stk500generic.h create mode 100644 xs/src/avrdude/stk500v2.c create mode 100644 xs/src/avrdude/stk500v2.h create mode 100644 xs/src/avrdude/stk500v2_private.h create mode 100644 xs/src/avrdude/term.c create mode 100644 xs/src/avrdude/term.h create mode 100755 xs/src/avrdude/tools/build-mingw32.sh create mode 100644 xs/src/avrdude/tools/get-dw-params.xsl create mode 100644 xs/src/avrdude/tools/get-hv-params.xsl create mode 100644 xs/src/avrdude/tools/get-stk600-cards.xsl create mode 100644 xs/src/avrdude/tools/get-stk600-devices.xsl create mode 100644 xs/src/avrdude/tpi.h create mode 100644 xs/src/avrdude/update.c create mode 100644 xs/src/avrdude/usb_hidapi.c create mode 100644 xs/src/avrdude/usb_libusb.c create mode 100644 xs/src/avrdude/usbasp.c create mode 100644 xs/src/avrdude/usbasp.h create mode 100644 xs/src/avrdude/usbdevs.h create mode 100644 xs/src/avrdude/usbtiny.c create mode 100644 xs/src/avrdude/usbtiny.h create mode 100644 xs/src/avrdude/windows/.cvsignore create mode 100644 xs/src/avrdude/windows/Makefile.am create mode 100644 xs/src/avrdude/windows/giveio.c create mode 100644 xs/src/avrdude/windows/giveio.sys create mode 100755 xs/src/avrdude/windows/install_giveio.bat create mode 100644 xs/src/avrdude/windows/loaddrv.c create mode 100644 xs/src/avrdude/windows/loaddrv.h create mode 100755 xs/src/avrdude/windows/remove_giveio.bat create mode 100755 xs/src/avrdude/windows/status_giveio.bat create mode 100644 xs/src/avrdude/wiring.c create mode 100644 xs/src/avrdude/wiring.h diff --git a/xs/src/avrdude/AUTHORS b/xs/src/avrdude/AUTHORS new file mode 100644 index 000000000..6abbec066 --- /dev/null +++ b/xs/src/avrdude/AUTHORS @@ -0,0 +1,28 @@ +AVRDUDE was written by: + + Brian S. Dean + +Contributors: + + Joerg Wunsch + Eric Weddington + Jan-Hinnerk Reichert + Alex Shepherd + Martin Thomas + Theodore A. Roth + Michael Holzt + Colin O'Flynn + Thomas Fischl + David Hoerl + Michal Ludvig + Darell Tan + Wolfgang Moser + Ville Voipio + Hannes Weisbach + Doug Springer + Brett Hagman + Rene Liebscher + Jim Paris + +For minor contributions, please see the ChangeLog files. + diff --git a/xs/src/avrdude/BUILD-FROM-SVN b/xs/src/avrdude/BUILD-FROM-SVN new file mode 100644 index 000000000..3a218f2d1 --- /dev/null +++ b/xs/src/avrdude/BUILD-FROM-SVN @@ -0,0 +1,13 @@ +$Id$ + +How to build avrdude from SVN: + +1. svn co svn://svn.savannah.nongnu.org/avrdude/trunk + +2. cd trunk/avrdude + +3. ./bootstrap + +4. ./configure + +5. make diff --git a/xs/src/avrdude/COPYING b/xs/src/avrdude/COPYING new file mode 100644 index 000000000..e69cf7e6c --- /dev/null +++ b/xs/src/avrdude/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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, see . + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/xs/src/avrdude/ChangeLog b/xs/src/avrdude/ChangeLog new file mode 100644 index 000000000..975f52317 --- /dev/null +++ b/xs/src/avrdude/ChangeLog @@ -0,0 +1,90 @@ +2016-05-10 Joerg Wunsch + + Submitted by Hannes Jochriem: + * avrdude.conf.in (ehajo-isp): New programmer. + +2016-04-20 Joerg Wunsch + + * configure.ac (libftdi1): Rather than hardcoding the library + providing the libusb-1.0 API, use the result from the previous + probe. This helps detecting libftdi1 on FreeBSD where the + libusb-1.0 API is provided by the system's libusb. + +2016-04-18 Joerg Wunsch + + * usb_hidapi.c (usbhid_open): Correctly calculate the + offset for serial number matching + +2016-03-28 Joerg Wunsch + + bug #47550: Linux GPIO broken + * linuxgpio.c: Replace %ud by %u in snprintf calls. + +2016-03-02 Joerg Wunsch + + * usb_hidapi.c (usbhid_recv): Bump read timeout to 300 ms. + +2016-02-20 Joerg Wunsch + + * jtag3.c: add support for libhidapi as (optional) transport for + CMSIS-DAP compliant debuggers (JTAGICE3 with firmware 3+, + AtmelICE, EDBG, mEDBG) + * usb_hidapi.c: (New file) + * libavrdude.h: Mention usbhid_serdev + * configure.ac: Bump version date + +2016-02-18 Joerg Wunsch + + (Obtained from patch #8717: pattch for mcprog and libhidapi support) + * configure.ac: Probe for libhidapi + * Makefile.am: Add @LIBHIDAPI@ + +2016-02-16 Joerg Wunsch + + * doc/avrdude.texi: Bump copyright year. + +2016-02-16 Joerg Wunsch + + * configure.ac: Bump for post-release 6.3. + +2016-02-16 Joerg Wunsch + + * configure.ac: Released version 6.3. + +2016-02-15 Joerg Wunsch + + patch #8894: Spelling in 6.2 doc + * doc/avrdude.texi: Various spelling fixes. + +2016-02-15 Joerg Wunsch + + patch #8895: Spelling in 6.2 code + * avrftdi.c (avrftdi_open): Spell fix. + +2016-02-15 Joerg Wunsch + + patch #8896: Silence cppcheck warnings in 6.2 code + * linuxgpio.c: Use %ud to print GPIO values. + +2016-02-15 Joerg Wunsch + + patch #8735: ATtiny28 support in avrdude.conf + * avrdude.conf.in (ATtiny28): New device. + +2016-02-15 Joerg Wunsch + + * avrdude.conf.in (ATmega48PB, ATmega88PB, ATmega168PB): New + devices. + +2016-02-15 Joerg Wunsch + + patch #8435: Implementing mEDBG CMSIS-DAP protocol + * usb_libusb.c: Add endpoint IDs for Xplained Mini, correctly + transfer trailing ZLP when needed + * avrdude.conf.in (xplainedmini, xplainedmini_dw): New entries. + * jtag3.c (jtag3_edbg_send, jtag3_edbg_recv_frame): Implement + fragmentation needed for the 64-byte EP size of the Xplained Mini + * avrdude.1: Document the change + * doc/avrdude.texi: (Dito.) + + diff --git a/xs/src/avrdude/ChangeLog-2001 b/xs/src/avrdude/ChangeLog-2001 new file mode 100644 index 000000000..048dcf1c2 --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2001 @@ -0,0 +1,598 @@ +2001-12-30 Brian S. Dean + + * main.c: Update version. + + * avrdude.conf.sample: Clarify a comment. + + * avrdude.conf.sample: fix address bits + + * avrdude.1: Bring up to date. + +2001-12-29 Brian S. Dean + + * avrdude.conf.sample: Add the AVR3 progammer. + + * avr.c, avrdude.conf.sample, config_gram.y, main.c, pindefs.h: + Fix VCC assertion. + + Make the BUFF pin a mask like VCC to allow multiple pins to be + asserted at the same time (STK200 has two buffer enable lines). + + Add the STK200 programmer. + + Fix EEPROM address line selection for several parts. + +2001-12-15 Brian S. Dean + + * avrdude.conf.sample: fix spelling error + +2001-11-24 Brian S. Dean + + * Makefile: + Change "WARNING" to "NOTE" when overwriting the avrprog.conf file. + + * avrdude.1: Add my e-mail address. + + * avrdude.conf.sample: + Add comments about instruction formats. Correct an instruction + specification (cut&paste error). + +2001-11-21 Brian S. Dean + + * avr.c, config_gram.y, lexer.l, term.c: + In interactive mode, reset the address and length if we start dumping + a memory type different than the previous one. + + * avr.c, avrdude.conf.sample, config_gram.y: + Allow instruction data to be specified more flexibly, which can be + used to make the instruction input more readable in the config file. + + * main.c: Bump version number. + + * Makefile, avr.c, avr.h, avrdude.conf.sample, config.c, config.h: + * config_gram.y, fileio.c, fileio.h, lexer.l, main.c, term.c: + This is a major re-write of the programming algorithms. The Atmel + serial programming instructions are not very orthoganal, i.e., the + "read fuse bits" instruction on an ATMega103 is an entirely different + opcode and data format from the _same_ instruction for an ATMega163! + Thus, it becomes impossible to have a single instruction encoding + (varying the data) across the chip lines. + + This set of changes allows and requires instruction encodings to be + defined on a per-part basis within the configuration file. Hopefully + I've defined the encoding scheme in a general enough way so it is + useful in describing the instruction formats for yet-to-be invented + Atmel chips. I've tried hard to make it match very closely with the + specification in Atmel's data sheets for their parts. It's a little + more verbose than what I initially hoped for, but I've tried to keep + it as concise as I could, while still remaining reasonably flexible. + +2001-11-19 Brian S. Dean + + * avr.c, avr.h, avrdude.conf.sample, main.c, ppi.c, term.c: + Add support for ATMega163. + + Add support for reading/writing ATMega163 lock and fuse bits. + Unfortunately, in looking at the specs for other ATMega parts, they + use entirely different instruction formats for these commands. Thus, + these routines won't work for the ATMega103, for example. + + Add support for sending raw command bytes via the interactive terminal + interface. This allows one to execute any programming instruction on + the target device, whether or not avrprog supports it explicitly or + not. Thus, one can use this feature to program fuse / lock bits, or + access any other feature of a current or future device that avrprog + does not know how to do. + + Add in comments, an experimental instruction format in the + configuration file. If this works out, it would allow supporting new + parts and non-orthoganal instructions across existing parts without + making avrprog code changes. + +2001-11-17 Brian S. Dean + + * avrdude.conf.sample: Add ATMEGA163 part. + +2001-11-11 Brian S. Dean + + * main.c: output formatting + +2001-11-05 Brian S. Dean + + * ppi.c: Get ppi.h from /usr/include, not /sys. + +2001-10-31 Brian S. Dean + + * avr.c, avrdude.conf.sample, main.c: Correct version string. + Update read/write status more frequently. + Prefix ATMega parts with an 'm'. + +2001-10-16 Brian S. Dean + + * avr.c: Change ording for memory display. + + * config_gram.y: comment + + * avr.c, avr.h, avrdude.conf.sample, config_gram.y, lexer.l, term.c: + Fix (again, hopefully) page addressing for the ATMega parts. + + Rename the poorly chosen name "bank" to "page" for page addressing. + Atmel calls it "page" in their documentation. + + * config_gram.y, main.c: Fix an (non)exit. + Silence a couple of compiler warnings. + + * avr.c, avr.h, avrdude.conf.sample, config_gram.y, main.c: + Fix ATMega flash addressing. Add an ATMEGA16 part. Perform sanity + checking on the memory parameters for parts that do bank addressing. + +2001-10-15 Brian S. Dean + + * config.c, config.h, lists.h: Add copyright. + + * config_gram.y, lexer.l, lists.c: Add copyrights. + + * Makefile: Attempt to install avrprog.conf. + + * avrdude.conf.sample: Correct dt006 pinout. + + * Makefile, lexer.l: + Try and detect an old-style config file and print an appropriate error + message and a suggestion for correcting it. + + * Makefile, avr.c, avrdude.1, avrdude.conf.sample: Update the man page. + + Miscellaneous minor cleanups. + +2001-10-14 Brian S. Dean + + * Makefile, Makefile.inc, avr.c, avr.h, avrdude.conf.sample: + * config.c, config.h, config_gram.y, lexer.l, lists.c, lists.h: + * main.c, pindefs.h, term.c: + Use lex/yacc for parsing the config file. Re-work the config file + format using a more human-readable format. + + Read part descriptions from the config file now instead of hard-coding + them. + + Update usage(). + + Cleanup unused code. + + * Makefile, avr.c, avr.h, fileio.c, term.c: + First cut at supporting the ATmega 103 which uses bank addressing and + has a 128K flash. + + Due to the bank addressing required, interactive update of the flash + is not supported, though the eeprom can be updated interactively. + Both memories can be programmed via non-interactive mode. + + Intel Hex Record type '04' is now generated as required for outputing + memory contents that go beyond 64K. + +2001-10-13 Brian S. Dean + + * avr.c, avr.h, fileio.c, fileio.h, main.c, ppi.c, ppi.h, term.c: + * term.h: + Style fixes. + + * avr.c, avr.h, fileio.c, fileio.h, main.c, term.c: + Commit changes in preparation for support the ATMega line. + +2001-10-01 Brian S. Dean + + * Makefile: Don't override CFLAGS. + + * avrdude.1: Correct default pin assignment. + + * avr.c, fileio.c, main.c, ppi.c, term.c: + Remove debugging code - it served its purpose. + + Update copyrights. + +2001-09-21 Brian S. Dean + + * main.c: + Be sure to read the exit specs after the pin configuration has been + assigned, otherwise, we may apply the exit specs to the wrong pins. + + * main.c: debugging + +2001-09-20 Brian S. Dean + + * avrdude.1, avrdude.conf.sample, main.c: + Prefix pin config entries in the config file with a "c:". Later, I + might make part descriptions read in this way and we can use a + different letter for those (p). This will make the parsing easier to + distinguish between the entry types. + + * main.c: Initialize pin configuration description. + +2001-09-19 Brian S. Dean + + * AVRprog.pdf, Makefile, avr.c, avrdude.1, avrdude.conf.sample: + * avrdude.pdf, fileio.c, fileio.h, main.c, pindefs.h, term.c: + Make the pin definitions configurable based on entries in a config + file. This makes supporting other programmers much easier. + + Rename AVRprog.pdf to avrprog.pdf. + +2001-04-29 Brian S. Dean + + * avrprog-programmer.jpg: Remove this image file from the repository. + +2001-04-26 Brian S. Dean + + * avrprog-schematic.jpg: + Remove this image, use AVRprog.pdf as the preferred schematic for the + programmer. + +2001-04-25 Brian S. Dean + + * AVRprog.pdf, Makefile, avrdude.1: + Add a schematic provided by Joerg Wunch and also update the manual + page (also updated by Joerg) to reference the schematic. + +2001-02-25 Brian S. Dean + + * Makefile, Makefile.inc: Automate dependency generation. + +2001-02-08 Brian S. Dean + + * main.c: Turn off ready led when finished programming. + + * main.c: update version + + * avr.c, main.c: Correct a few comments. + + * Makefile, avr.c, term.c: Makefile : update dependencies + + avr.c : correct status led updates + + term.c : update status leds on write, make the address and length + arguments for dump optional. + +2001-01-26 Brian S. Dean + + * main.c: Version 1.1 + + * main.c: + Hmmm ... cvs co -D does not work. Change the revision + timestamp to a full date/time value. + + * avr.c, fileio.c, main.c, ppi.c, term.c: + Add a -V option to display the version information about each + component module. This is intended for support purposes, so that I + can tell unambiguously what version a binary out in the field is. + + Additionally, display a revision timestamp along with the version + number. This also is intended for aiding in support and is the Unix + time of the latest component module. Having this, should allow me to + do a "cvs co -D timestamp avrprog" and get exactly the source of the + version that is being reported. + + * fileio.c: + Return the maximum address (+1) written as opposed to the actual + number of bytes written. The presence of an Intel Hex address + record can cause these two number to be different; but the callers + of this routine need the former. + + * main.c: + Fix a place where we were exiting without applying the exit-specs. + + Wrap a long line. + + * avr.c, fileio.c: avr.c: Update a comment. + + fileio.c: Properly handle all the Intel Hex record types that I can + find information about. + +2001-01-25 Brian S. Dean + + * Usage, avr.h: Get rid of the Usage file. + +2001-01-24 Brian S. Dean + + * Makefile, avr.c, avr.h, main.c, pindefs.h, ppi.c: + Move pin definitions to their own file. + + First pass at providing feedback via the optionally connected leds. I + don't actually have any of these attached to my programmer, so I can + only guess as whether this is toggling them on and off correctly. + + Also, enable and disable the optional 74367 buffer. + + * avr.h, main.c, ppi.c, ppi.h, avr.c: + Rearrange the pinout for the programmer to be a little more logical. + Provide hooks to support a buffered programmer, pin 6 is now used to + enable a buffer that can be used to isolate the target system from the + parallel port pins. This is important when programming the target + in-system. + + Totally change the way the pin definitions are defined. Actually + set/clear pins based on the way more intuitive pin number, instead of + PPI data register, bit number combination. A table of pin data is + used so that any hardware inversion done by the parallel port is + accounted for, what you set is actually what appears at the pin. + Retain the old method for handling Vcc, however, because the hold + method is much easier to use when setting / retrieving multiple pins + simultaneously. + +2001-01-22 Brian S. Dean + + * Makefile: Don't gzip the man page. + + * avrdude.1: .Nm macro fix. Submitted by Joerg. + + * main.c: Cosmetic, don't output a preceding linefeed for usage(). + + * Makefile, avr.c, avr.h, fileio.c, term.c: + Makefile : use gzip -f for man page installation so that we don't get + prompted. + + avr.c avr.h fileio.c term.c : + + Change the avrpart data structure so that the typedef AVRMEM is + used as an index into an array for the sizes of the memory types + and also for pointers to buffers that represent the chip data for + that memory type. This removes a lot of conditional code of the + form: + + switch (memtype) { + case AVR_FLASH : + ... + } + + Also, re-code avr_read_byte() and avr_write_byte() to properly + handle the flash memory type without having to tell them whether + they should program the high byte or the low byte - figure that + out from the address itself. For flash memory type, these + routines now take the actual byte address instead of the word + address. This _greatly_ simplifies many otherwise simple + operations, such a reading or writing a range of memory, by not + having to worry about whether the address starts on an odd byte + or an even byte. + +2001-01-20 Brian S. Dean + + * avr.c, avr.h, fileio.c, fileio.h, main.c: + Return error codes instead of exiting, thus making sure that we exit + only via main() so that the exitspecs are properly applied. + + When reading input data from a file, remember how many bytes were read + and write and verify only that many bytes. + + Don't complain when an input file size is smaller than the memory size + we are programming. This is normal. + + * fileio.c: + Correct checksum calculation; failure to account for the value of the + record type was causing non-zero record types to be calculated + incorrectly. + + * Makefile, main.c: Makefile : install the man page + + main.c : drop the giant usage text now that we have a man page. + + * avrdude.1: + Add initial man page graciously contributed by Joerg Wunsch. Thanks + Joerg! + +2001-01-19 Brian S. Dean + + * term.c: + Accept abbreviations for eeprom and flash for the dump and write + commands. + + Fix small bug keeping 1 character command lines from being added to + the history. + + * term.c: + Implement enough state in cmd_dump so that if it is called with no + arguments, it successively dumps the next chunk of data of the same + previously specified length. + + * term.c, term.h, fileio.c, fileio.h, main.c, ppi.c, ppi.h: + * Makefile, avr.c, avr.h, avrprog.c: + The program was getting too large for a single file. Split it up into + more modular pieces. + + Also, accept command abbreviations as long as they are not ambiguous. + + * avrprog.c: + Add ability to specify the state of the power and reset pins on + program exit. Default to leaving the pins in the state they were when + we found them. + + Contributed by: Joerg Wunsch + +2001-01-18 Brian S. Dean + + * Makefile, avrprog.c: + Switch to using readline() for getting terminal input. I can't seem + to get the history capabilities working yet, but even so, it does + better handling of the prompt and strips newlines for us, so it's + still a win. + + Add a few new commands for terminal mode: help, sig, part, erase. + Display rudimentory help using the help command. + + Add some function prototypes. + + * Usage, avrprog.c: + Change -c (interactive command mode) to the more intuitive -t + (terminal mode). + + Make binary format the default for output. + + Update the parts table with corrections for old values and add some + new values. + +2001-01-15 Brian S. Dean + + * avrprog.c: + Automatically verify on-chip data with what we just programmed. + + * avrprog.c, Makefile: + Prepare the Makefile for integration into the FreeBSD ports tree. + + Fix a few "may be used uninitialized" bugs found by -Wall. + +2001-01-14 Brian S. Dean + + * avrprog.c: Free a buffer. + + * avrprog.c: + Use a smarter programming algorithm - read the existing data byte + first and only write the new one if it is different. + + Add -n option which is a test mode in which the chip is not actually + updated. This option does not affect writes in interactive mode. + + * avrprog.c: Add the "dump" and "write" interactive commands. + + * avrprog.c: + Correctly produce and handle "end of record" for intel hex files. + +2001-01-13 Brian S. Dean + + * avrprog.c: + Re-enable writing to the chip. I should probably should make this a + command-line selectable option so that I don't keep forgetting and + committing it with it disabled. + + * avrprog.c: + Add a newline before exiting due to command line errors. Perform a + bit more option compatibility testing between -c, -i, and -o. + + * avrprog.c: Add input file format auto-detection support. + + * Usage, avrprog.c: Say what the defaults are. + + * avrprog-programmer.jpg, Usage, avrprog-schematic.jpg: New files. + + * avrprog.c: Correct usage text. + + * avrprog.c: + Parameterize a few additional items per chip. Print out all per-chip + parameters on startup. Use the per-chip parameters in the code + instead of hard-coded values for the 2313. + + * avrprog.c: Fix filename assignment error. + + Clean up debugging code a little, utilize fileio() instead of making + direct calls to b2ihex(). + + * avrprog.c: A lot of general code cleanup. + + Re-work command line options to be more intuitive. + + Support Intel Hex input and output file formats. Provide hooks to + support Motorola S-Record as well. + + Add a few more part-specific parameters to the avrpart structure. + + Only write the flash or eeprom if the data to be written is not 0xff. + +2000-12-31 Brian S. Dean + + * avrprog.c: Update a comment. + + * avrprog.c: + Provide the ability to tie additionally tie pins 6-9 of the parallel + port to Vcc in order to supply more current. + + Fix a typo on the size of the S1200's Flash. + + Bring RESET low when programming is completed. + + * avrprog.c: + Correct pin connection comments. Elaborate a bit on Vcc connection. + + * avrprog.c: + Update after receiving some good feedback from Joerg Wunsch. We + should now be able to program AT90S1200's. + +2000-12-30 Brian S. Dean + + * avrprog.c: Don't limit eeprom addresses. + +2000-12-20 Brian S. Dean + + * Makefile, avrprog.c: + Add support for the 8515. Make the addition for other devices easier. + +2000-08-27 Brian S. Dean + + * avrprog.c: + Clear all bits except AVR_RESET when finished reading or programming + the Atmel device. + +2000-08-07 Brian S. Dean + + * avrprog.c: update announcement message + + * avrprog.c: Update announcement message. + + * avrprog.c: Return the correct return code from 'main()'. + + * avrprog.c: + Add ppi_pulse() function and fix ppi_toggle() to actully toggle + instead of pulse. + + Make all abnormal returns after the parallel port has been opened go + through a single exit point at the bottom of 'main()'. + +2000-08-06 Brian S. Dean + + * Makefile, avrprog.c: Makefile: add --pedantic compiler option + + avrprog.c: + + Add lots of comments, move getop() variable declarations to + the top of the program. + + Add a typedef name to the AVR memory type and use it for + function declarations. + + Add a usleep() delay in the sense loop to avoid becoming a cpu + hog. + + Print out a version string so that folks know what version of + the software they are running. + + Be sure and close the parallel device and the i/o file when + terminating abnormally. + + * avrprog.c: Print out version information when invoked. + + * Makefile, avrprog.c: Makefile: Add an install target. + + avrprog.c: + + Add license. + + Document the header a bit better. + + Add capability to read out and display the device signature bytes. + + Add capability to power the device from the parallel port. + + Eliminate debug print facility. + + Provide 'avr_cmd()' function. + + When memory locations don't program, generate a newline so that the + information is not overwritten and lost. + + Don't print out the message about needing to specify a file if the + user is not requesting an operation that requires the file. + +2000-08-05 Brian S. Dean + + * avrprog.c: Pring usage when no arguments are supplied. + + * Makefile, avrprog.c: Initial check-in + + * Makefile, avrprog.c: New file. + diff --git a/xs/src/avrdude/ChangeLog-2002 b/xs/src/avrdude/ChangeLog-2002 new file mode 100644 index 000000000..9bfa030a9 --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2002 @@ -0,0 +1,237 @@ +2002-12-12 Brian S. Dean + + * main.c: minor cleanup + +2002-12-07 Brian S. Dean + + * avrdude.1, main.c: + If the stk500 is being used, default to using the first serial port. + +2002-12-03 Brian S. Dean + + * avrdude.1: Mention STK500 support. + +2002-12-01 Brian S. Dean + + * stk500.c: Remove unused code. + + * CHANGELOG, stk500.c: + Document changes since the previous version in the CHANGELOG. + + Cleanup stk500.c a bit. + + * stk500.c: Fix cut and paste braino. + + * avr.c, avrdude.conf.sample, main.c, pgm.h, stk500.c: + The STK500 can perform paged read/write operations even on standard + "non-paged" parts. Take advantage of that and use the faster internal + routines of the STK500 for those parts as well. + + * avr.c, avr.h, avrpart.h, main.c, pgm.c, pgm.h, stk500.c: + Optimize reading and writing for the STK500 programmer if the part + supports paged reads and writes. This greatly decreases the + program/verify time from about 4.5 minutes down to about 10 seconds in + a 12K program size test case. + + Print out the hardware and firmware version for the STK500 if verbose + is enabled. + + * avrdude.conf.sample, avrpart.h, config_gram.y, lexer.l, pgm.h: + * ppi.c, ppi.h, stk500.c, stk500.h, stk500_private.h: + Add basic support for STK500. + +2002-11-30 Brian S. Dean + + * avrdude.conf.sample, config.c, config.h, config_gram.y, lexer.l: + * main.c, pgm.c, pgm.h, ppi.c, ppi.h, term.c, term.h, Makefile: + * avr.c, avr.h: + Seperate programmer operations out into a driver-like interface so + that programmers other than the direct parallel port connection can be + supported. + +2002-11-23 Brian S. Dean + + * CHANGELOG, main.c, term.c: + term.c - when in interactive terminal mode and dumping memory using + the 'dump ' command without any address information, + and the end of memory is reached, wrap back around to zero on + the next invocation. + + CHANGELOG - describe changes + + main.c - update version number + + * main.c: + When getting ready to initiate communications with the AVR device, + first pull /RESET low for a short period of time before enabling the + buffer chip. This sequence allows the AVR to be reset before the + buffer is enabled to avoid a short period of time where the AVR may be + driving the programming lines at the same time the programmer tries + to. Of course, if a buffer is being used, then the /RESET line from + the programmer needs to be directly connected to the AVR /RESET line + and not via the buffer chip. + +2002-11-06 Brian S. Dean + + * CHANGELOG: Update changelog. + + * avr.c, avr.h, main.c: Fix -Y option. Reported by Joerg Wunsch. + +2002-11-01 Brian S. Dean + + * CHANGELOG, main.c: Version update and CHANGELOG entry. + + * avr.c: + Be backward compatible with the 2-byte rewrite cycle counter which + appeared in version 2.1.0, but was changed to a 4 byte counter in + version 2.1.1. Reminded by Joerg Wunsch. + +2002-10-29 Brian S. Dean + + * CHANGELOG, avrdude.1, main.c: + Add '-V' (no verify) flag requested by Joerg Wunsch. Update the man + page. + +2002-10-13 Brian S. Dean + + * CHANGELOG, avrdude.1: Update man page and changelog. + + * main.c: Update version number. + +2002-10-12 Brian S. Dean + + * Makefile: Remove --pedantic and -g from the compiler options. + +2002-10-11 Brian S. Dean + + * avr.c, term.c: + Use a four byte value instead of a two byte value for the programming + cycle count stored at the end of EEPROM. It seems as though Atmel was + greatly conservative in claiming a 1000 count reliability for the + FLASH. I current have a part that has been reprogrammed 173330 times, + and counting. + + Fix a compiler warning. + + * avrdude.conf.sample: + Fix ATMega128 instruction encoding for reading the low and high fuse + bits. Thanks to Joerg Wunsch for tripping over this. + +2002-08-01 Brian S. Dean + + * avr.c, avrdude.1, main.c: + Move erase-rewrite cycle increment to within the chip erase routine so + that it is tracked no matter where the erase was initiated: command + line mode or interactive mode, without code duplicaiton. + + * CHANGELOG: Recent updates. + + * avr.c: Eliminate unused variables. + + * avr.c, avr.h, avrdude.1, fileio.c, main.c: + Implement a way of tracking how many erase-rewrite cycles a part has + undergone. This utilizes the last two bytes of EEPROM to maintain a + counter that is incremented each time the part is erased. + +2002-07-27 Brian S. Dean + + * avr.c, main.c: + Fix a typo in a comment. Display the size of memory being written. + Display the correct memory name in an error message (previously + hardcoded). + +2002-06-22 Brian S. Dean + + * CHANGELOG, avrdude.conf.sample: + Add support for ATtiny15 - contributed by Asher Hoskins + + +2002-04-23 Brian S. Dean + + * CHANGELOG: Say what changed. + +2002-04-07 Brian S. Dean + + * Makefile, avrdude.conf.sample: + Backup the config file to a timestamped name to keep from possibly + overwriting user-modified configs. + + Add read/write instructions for all memory types for ATMEGA103, + ATMEGA128, ATMEGA16, and ATMEGA8. + +2002-04-05 Brian S. Dean + + * avrdude.conf.sample: + Add support for ATMEGA128; untested; requested by Jeff Gardner + . + +2002-02-15 Brian S. Dean + + * avrdude.conf.sample: Minor ordering. + + * CHANGELOG, main.c: Update version numbers. + +2002-02-14 Brian S. Dean + + * CHANGELOG: Summarize latest updates. + + * avrdude.conf.sample, config_gram.y: + Make pwroff_after_write a yes/no field instead of a numeric. + + * avrdude.conf.sample: Document the pwroff_after_write flag. + + * avr.c: Enable the extra part verbosity when verbosity >= 3. + + * avr.c, avr.h, avrdude.conf.sample, config_gram.y, lexer.l: + * main.c, term.c: + Fix error reporting by avr_write_byte(). + + Fix setting of status LEDs under various write-fail conditions. + + Add a flag to indicate that a memory type requires the device to + possibly be powered off and back on after a write to it. This is due + to a hardware problem on some Atmel devices, see: + + http://www.atmel.com/atmel/acrobat/doc1280.pdf + + Add greater verbosity to the part-display code when verbose>1 to + display avrprog's encoding of the defined programming instructions. + This is primarily for debugging purposes. + + + Part updates: + + * add the AT90S4414 part + + * add fuse and lock bit access instructions for the AT90S1200, + AT90S4434, and AT90S8515. + + * add the pwroff_after_write flag to the fuse bits for the AT90S2333 + and AT90S4433 parts + +2002-02-09 Brian S. Dean + + * avrdude.conf.sample: + Updates to the 2333 and 4433 parts, contributed by Joerg Wunsh. + +2002-01-18 Brian S. Dean + + * CHANGELOG: Add changelog. + +2002-01-12 Brian S. Dean + + * main.c: Add (c) to copyright. + + * fileio.c, fileio.h, lexer.l, lists.c, lists.h, main.c: + * pindefs.h, ppi.c, ppi.h, term.c, term.h, avr.c, avr.h: + * config.c, config.h, config_gram.y: + Update version number. Update copyright. + + * avrdude.1: Update copyright and add description of "default". + + Submitted by: Joerg Wunsch + + * avr.c, term.c: + Fix programming of write-only memories (such as lock bits on the + 2313). + diff --git a/xs/src/avrdude/ChangeLog-2003 b/xs/src/avrdude/ChangeLog-2003 new file mode 100644 index 000000000..1115bdfbc --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2003 @@ -0,0 +1,1095 @@ +2003-12-01 Eric B. Weddington + + * doc/avrdude.texi: Update devices and programmers supported. + +2003-12-01 Eric B. Weddington + + * doc/avrdude.texi: Add missing -D option to user manual. + [This fixes bug #6804] + +2003-11-30 Jan-Hinnerk Reichert + + * avrpart.c,main.c: Moved list_parts() and locate_part() + from main.c to avrpart.c. + * avrpart.h: Added prototypes for list_parts() and + locate_part(). + +2003-11-30 Jan-Hinnerk Reichert + + * avrpart.c, avr.c: Moved elementary functions on types + OPCODE, AVRMEM and AVRPART from avr.c to new file avrpart.c. + * avr.h: Removed prototypes for moved functions. + * avrpart.h: Added prototypes for functions in avrpart.c. + * Makefile.am: Added new file avrpart.c. + +2003-11-28 Michael Mayer + + * lexer.l: New programmer type "butterfly". + * config_gram.y: New token K_BUTTERFLY. + * avrdude.conf.in: Added programmer definition. + * butterfly.c, butterfly.h: Cloned from avr910.?, changed to work + with the Atmel Butterfly device. + * Makefile.am: Added butterfly.[ch] to avrdude_SOURCES. + +2003-11-26 Joerg Wunsch + + * main.c: Make the -U parser tolerate colons in filenames. + * avrdude.1, doc/avrdude.texi: Document the -U changes. + +2003-11-21 Jan-Hinnerk Reichert + + * ppi.c: Major speed tuning. Since ioctl() is expensive read from + shadowregisters where possible. + +2003-11-19 Eric B. Weddington + + * NEWS: Update news from items in ChangeLog. + +2003-11-19 Theodore A. Roth +[Contributed by Jan-Hinnerk Reichert ] + + * avr.c (avr_write_byte_default): Improve polling algorithm to speed up + programming of byte oriented parallel programmers. + +2003-11-14 Brian S. Dean +[Contributed by Erik Christiansen ] + + * avrdude.conf.in: + Add ATmega64 part. + +2003-11-08 Joerg Wunsch + + * avrdude.conf.in: + Add "fuse" and "lock" definitions for the AT90S8535. Actually, + this is stolen from the AT90S8515 since the datasheet says it's + the same there. + +2003-10-13 Bill Somerville + + * stk500.c (stk500_paged_write): Limit blocks written to no bigger + than memory device size. + (stk500_paged_write): Send whole block at once. + (stk500_paged_load): Limit blocks read to no bigger than memory + device size. + [This fixes bug #5713.] + +2003-10-13 Eric B. Weddington + + * avrdude.conf.in: Fix for unterminated character error. + +2003-10-13 Eric B. Weddington + + * avrdude.conf.in: Add ATmega8515 definition. + Contributed by: Matthias Weißer + * NEWS: Add note about ATmega8515 definition. + +2003-09-24 Eric B. Weddington + + * doc/TODO: Updated TODO list. + +2003-09-22 Eric B. Weddington + + * windows/Makefile.am: Correct makefile so loaddrv does not link + to Cygwin DLL. + +2003-09-18 Eric B. Weddington + + * doc/avrdude.texi: Minor corrections. Change description of -P + to reference platform dependencies. + +2003-09-16 Eric B. Weddington + + * stk500.c: If writing flash, skip empty pages in paged write. + +2003-09-06 Theodore A. Roth + + * NEWS: Add 'Current:' header. + * configure.ac (AC_INIT): Add cvs back to version since we're + back in dev cycle (post release). + +2003-09-06 Theodore A. Roth + + * AVRDUDE 4.2.0 has been released (cvs release tag is "release_4_2_0"). + +2003-09-06 Theodore A. Roth + + * NEWS: Update for 4.2.0 release. Add note about read/write of fuses + support for avr910. + * configure.ac (AC_INIT): Set version to 4.2.0. + +2003-09-05 Theodore A. Roth +[Contributed by Jan-Hinnerk Reichert ] + + * avr.c (avr_read_byte): If pgm->read_byte method fails, retry with + avr_read_byte_default. + * avr.c (avr_write_byte): If pgm->write_byte method fails, retry with + avr_write_byte_default. + * avr910.c (avr910_cmd): Implement using universal command. + +2003-09-04 Theodore A. Roth + + * Makefile.am: Change AM_CPPFLAGS to avrdude_CPPFLAGS. + Define avrdude_CFLAGS. + * configure.ac: Set ENABLE_WARNINGS to "-Wall" if using gcc. + +2003-09-02 Eric B. Weddington + + * doc/avrdude.texi: Add note about privileges needed to load + the giveio driver for Windows. + +2003-08-29 Brian S. Dean + + * avrdude.1: + * main.c: + Perform an auto erase before programming if the flash memory is + anywhere specified to be written by any of the -U requests. + + To remain backward compatible with previous versions, disable this + feature if any of the old-style memory specification operations are + specified (-i, -o). + + Implement the -D option to explicitly disable the auto erase default. + + Deprecate the old-style memory specification options (-f, -i, -I, -m, + and -o) in favor of the new -U option which allows one to operate on + multiple memories on a single command line. + +2003-08-28 Eric B. Weddington + + * avr910.c: + * fileio.c: + * main.c: + * stk500.c: + More code cleanup to remove warnings. + +2003-08-27 Theodore A. Roth + + * main.c (update_progress_no_tty): Properly terminate progress. Also + fixes stk500 problem where number of bytes written is less than a page. + +2003-08-27 Theodore A. Roth + + * avrdude.spec.in: Fix broken rpmbuild on RedHat-9. + +2003-08-25 Eric B. Weddington + + * fileio.c: + * main.c: + * ppiwin.c: + * ser_posix.c: + * stk500.c: + Minor code cleanup to remove warnings. + +2003-08-21 Brian S. Dean + + * avrdude.1: + * main.c: + + Introduce a new option, -U, for performing memory operions. + Its argument is a 4 field string (fields seperated by colons) + which indicate what memory type to operate on, what operation + to perform is (read, write, or verify), the filename to read + from, write to, or verify against, and an optional file format + field. Multple -U options can be specified to operate on more + than one memory at a time with a single invocation. For + example, to update both the flash and the eeprom at the same + time one can now specify the following: + + avrdude -p -e -U flash:w:main.hex:i -U eeprom:w:eeprom.hex:i + +2003-08-20 Brian S. Dean + + * ppiwin.c: + Timing related fixes for the Windows platform. Several folks have + reported that this patch fixes verify errors on the Windows platform + that are apparently timing related. Submitted by: Alex Shepherd + , who indicates that this patch was based on + code from the UISP project. + +2003-08-01 Theodore A. Roth + + * avrdude.1: Document the -q option. + * doc/avrdude.texi: Document the -q option. + Fix some typos left over from pasting in man output. + +2003-07-30 Brian S. Dean + + * main.c: Add elapsed time information to the new progress bar. + +2003-07-29 Theodore A. Roth + + * avr.c: + * avr.h: + * avr910.c: + * main.c: + * stk500.c: + New progress reporting implementation. + +2003-07-24 Joerg Wunsch + + * avrdude.1: + * doc/avrdude.texi: + * pgm.c: + * pgm.h: + * stk500.c: + * stk500_private.h: + * term.c: Add support for displaying and setting the various + operational parameters of the STK500 (Vtarget, Varef, clock). + +2003/07/22 Brian S. Dean + + * avrdude.conf.in: + Add 'picoweb' programming cable programmer. + Contributed by Rune Christensen . + +2003-06-18 Brian S. Dean + + * avrdude.conf.in: + Add the 'sp12' (Steve Bolt's) programmer. + Submitted by Larry Barello . + +2003-06-17 Brian S. Dean + + * avrdude.conf.in: + Properly identify the "ALF" programmer. + + Extend ATmega8 calibration memory to support all 4 calibration bytes. + Savannah bug #3835. Submitted by Francisco T. A. Silva + . + + Add a few AVR910 programmer device codes. Savannah bug #3569 - sorry + I can't tell who submitted this to give proper credit. + + Add support for the ATtiny12. Submitted by Pontifex + +2003-05-22 Brian S. Dean + + * avr.c: + * avr.h: + * fileio.c: + Optimize flash memory handling a little bit by ignoring 0xff data that + resides above the last non-0xff data value in the address space. Only + do this for flash memory since writing a 0xff to flash is a no-op. + This has the affect of creating smaller output files when dumping + memory contents from flash if the program in flash does not consume + the whole memory space. It also results in shorter programming times + when avrdude is asked to load a file into flash that has lots of 0xff + filled data past the last non-0xff data value. + +2003-05-13 Theodore A. Roth + + * avr910.c (avr910_paged_write_flash): Add code to send the 'm' + command ("issue page write" cmd) for each page. + +2003-05-13 Theodore A. Roth + + * avrdude.conf.in: Add pagel and bs2 entries for at90s1200 device. + +2003-05-13 Theodore A. Roth + + * doc/TODO: Add note about avr910 device codes. + +2003-05-04 Theodore A. Roth + + * configure.ac: Check for ncurses library (since it can be a + replacement for termcap). + +2003-05-02 Theodore A. Roth + + * avrdude.conf.in: Add avr decodes for devices known in avr910 + firmware version 2.3. + Add missing stk500 devocde for 2343. + +2003-04-23 Eric B. Weddington + + * fileio.c: Fix for bug #3293. Set correct open mode for raw format + for Windows. + +2003-04-19 Brian S. Dean + + * avrdude.1: + * fileio.c: + * fileio.h: + * main.c: + Implement and "immediate mode" for file input - this allows + one to specify byte values on the command line instead of via + a file. This can be good for specifying fuse bytes and + eliminates the need to create single-byte files or using + interactive terminal mode for these single-byte memories. + Requested by several folks on the mailing list. + +2003-04-18 Theodore A. Roth + + * configure.ac: Add cvs suffix back to version. + * doc/TODO: Add a few items. + +2003-04-18 Theodore A. Roth + + * AVRDUDE 4.1.0 has been released (cvs release tag is "release_4_1_0"). + +2003-04-17 Theodore A. Roth + + * configure.ac: Set version to 4.1.0. + * doc/avrdude.texi: Add note about avr910 programmer type. + +2003-04-17 Eric B. Weddington + + * NEWS: Replace TBD with new release version. + +2003-04-17 Eric B. Weddington + + * avrdude.conf.in: Change name of pony programmer to pony-stk200 + to better describe the hardware (PonyProg is software that works + with various hardware). + +2003-04-16 Eric B. Weddington + + * avrdude.conf.in: Add support for ATtiny26 + Submitted by Artur Lipowski + * NEWS: List new devices supported: ATtiny26 + +2003-04-16 Eric B. Weddington + + * avrdude.conf.in: Add support for ATmega8535 + Submitted by Alexander Peter + * NEWS: List new devices supported: ATmega8535 + +2003-04-09 Theodore A. Roth + + * avr910.c: Reading a 16 bit word in paged load needs to swap the + bytes since the 'R' command returns MSB first and the internal buffer + stores LSB first. + +2003-04-07 Theodore A. Roth + + * stk500.c: Don't print out read/write byte progress unless the verbose + option is given. + +2003-04-05 Theodore A. Roth + + * avr910.c: Re-add the avr910 byte read/write methods which were + removed in my previous patch. Terminal mode read/writes are broken + without those methods. D'oh! + +2003-04-05 Theodore A. Roth + + * avr910.c: Refactor to allow probing for auto addr increment. If auto + incr supported by programmer hw, don't send addr for every byte. + +2003-04-03 Eric B. Weddington + + * confwin.c: Fix bug that allows garbage for non-existent user + config filename on Windows. + +2003-03-29 Brian S. Dean + + * avrdude.conf.in: + Add the ATmega32 part. This part definition was contributed by: + Daniel Williamson and + Ruwan Jayanetti + The resulting part definition used was actually somewhat of a merge of + the two submitted definitions. + +2003-03-24 Theodore A. Roth + + * NEWS: Add note about avr910 support. + +2003-03-23 Theodore A. Roth + + * avr.c (avr_write): Add call to pgm->write_setup() before the write + loop. + * avr910.c: Change all show_func_info() calls to no_show_func_info(). + Add read/write to/from flash/eeprom memory functionality. + * pgm.c: Initialize pgm->write_setup. + * pgm.h: Add write_setup field to PROGRAMMER structure. + * ser_posix.c: Remove unneeded cast in verbosity code. + +2003-03-23 Theodore A. Roth + + * ser_posix.c: Limit verbose output to 2 chars. + +2003-03-23 Theodore A. Roth + + * ser_posix.c: Add verbose level > 3 output for send and recv functions. + +2003-03-23 Theodore A. Roth + + * avr.c: Add avr_read_byte_default(). + Have avr_read_byte() call pgm->read_byte() or avr_read_byte_default(). + Add avr_write_byte_default(). + Have avr_write_byte() call pgm->write_byte or avr_write_byte_default(). + * pgm.c: Initialize pgm->write_byte and pgm->read_byte. + * pgm.h: Add write_byte and read_byte fields to struct programmer_t. + +2003-03-17 Theodore A. Roth + + * avrdude.conf.in: Fix typo for devicecode deprecation comment. + +2003-03-17 Eric B. Weddington + + * avrdude.conf.in: Add Bascom SAMPLE programmer. + Submitted by Larry Barello + +2003-03-16 Theodore A. Roth + + * avr.c (avr_read): Use pgm->read_sig_bytes to read signature bytes if + available. + * avr910.c (avr910_vfy_cmd_sent): New function. + (avr910_chip_erase): Add support for chip erase. + (avr910_enter_prog_mode): New function. + (avr910_leave_prog_mode): New function. + (avr910_initialize): Add code to select device type and enter prog mode. + (avr910_close): Leave programming mode before closing serial port. + (avr910_read_sig_bytes): New function. + (avr910_initpgm): Add avr910_read_sig_bytes method to pgm initializer. + * avrdude.conf.in: Add note about deprecating devicecode. + Change all occurences of devicecode to stk500_devcode. + Add avr910_devcode to a few parts for testing. + * avrpart.h (struct avrpart): Change devicecode field to stk500_devcode. + (struct avrpart): Add avr910_devcode field. + * config_gram.y: Add K_STK500_DEVCODE and K_AVR910_DEVCODE tokens. + Generate an error if devicecode is found in the config file. + Handle parsing of avr910_devcode and stk500_devcode. + * lexer.l: Handle parsing of avr910_devcode and stk500_devcode. + * pgm.c: Initialize pgm->read_sig_bytes field. + * pgm.h: Add pgm->read_sig_bytes field. + * stk500.c: Use stk500_devcode instead of devicecode. + +2003-03-16 Theodore A. Roth + + * avrdude.conf.in: Add avr910 and pavr programmers. + * config_gram.y: Add parsing of avr910 programmer. + * lexer.l: Add avr910 token. + * avr910.c: [this is still work in progress] + Add some debug output. + Add probe for programmer presense. + * main.c: Set port to default_serial if programmer type is avr910. + +2003-03-13 Theodore A. Roth + + * ser_posix.c, ser_win32.c, serial.h: + Change baud from int to long to avoid a 16-bit int overflow. + +2003-03-12 Theodore A. Roth + + * Makefile.am (avrdude_SOURCES): Add avr910.[ch], serial.h and + ser_posix.c files. + * avr910.c: New file (stubs for avr910 serial programmer). + * avr910.h: New file. + * ser_posix.c: New file. + * ser_win32.c: New file (just stubs for now). + * serial.h: New file. + * stk500.c: Move all the code for accessing the posix serial ports + into ser_posix. This will make a native win32 port easier and allows + the avr910 programmer to share the serial code. + +2003-03-12 Theodore A. Roth + + * configure.ac (AC_INIT): Set version to 4.0.0cvs since we're done + with 4.0.0 release. + +2003-03-12 + + * AVRDUDE 4.0.0 has been released (cvs release tag is "release_4_0_0"). + +2003-03-11 Theodore A. Roth + + * Makefile.am: Add CLEANFILES to remove all files from a make. + * doc/Makefile.am: Ditto + +2003-03-11 Theodore A. Roth + + * windows/Makefile.am: Fix uninstall-local rule (forget the $$file + part of the rm command). + +2003-03-11 Theodore A. Roth + + * AUTHORS: Updated. + * CHANGELOG: Move contents to NEWS and remove file. + * ChangeLog: All of the changes for this year. + * ChangeLog-2001: All 2001 changes. + * ChangeLog-2002: All 2002 changes. + * Makefile.am (EXTRA_DIST): Remove CHANGELOG and and Change-200[12]. + * NEWS: Moved contents of CHANGELOG file here. + * README: Add note pointing to savannah site. + +2003-03-11 Eric Weddington + + * doc/avrdude.texi: + Add Install and Documentation sections for Windows. Fix typo. + +2003-03-10 Theodore A. Roth + + * Makefile.am: * Makefile.am (EXTRA_DIST): Add CHANGELOG. + +2003-03-10 Brian S. Dean + + * stk500.c: Disable debugging printf. + + * configure.ac: Update version number in preparation for release. + +2003-03-10 Theodore A. Roth + + * doc/avrdude.texi: + Add comment before each node to make them stand out better. + Use @option{} command for options instead of @code{}. + Merge FreeBSD and Linux platform dependent information. + +2003-03-10 Brian S. Dean + + * avrdude.1: Minor man page updates to better reflect reality. + +2003-03-10 Joerg Wunsch + + * bootstrap: + Export all the AUTO* variables. Hopefully, that way the generated + Makefile might get them correctly. + + * bootstrap: + Export ${AUTOCONF} so automake will find it by whatever name it will be + called today. + +2003-03-06 Eric Weddington + + * doc/avrdude.texi: + Add notes about ability to list parts and list programmers in the + config file in -p and -c descriptions. Change info about where to + find Windows search method in -C description. + + * main.c: + Change software version from hardcoded value to getting it from + the configuration. + +2003-03-06 Theodore A. Roth + + * avrdude.spec.in: * avrdude.spec.in: Add docs sub-package. + Add %post and %preun scriptlets for handling info files. + + * configure.ac, doc/Makefile.am: + * configure.ac: Add --enable-versioned-doc option and set DOC_INST_DIR. + * doc/Makefile.am: Add rules to install docs in DOC_INST_DIR. + + * doc/Makefile.am: + Delete the lines which where commented out in previous commit. + + * configure.ac, doc/Makefile.am: + * configure.ac: Remove hack to make work with automake-1.5. + * doc/Makefile.am: Remove extra rules that were needed to work with + automake-1.5. + + * bootstrap: + * bootstrap: Force use of autoconf-2.57 and automake-1.7.x. + +2003-03-05 Joerg Wunsch + + * avrdude.conf.in: Add a definition for the popular Ponyprog dongle. + + Submitted by: Daniel Williamson + +2003-03-05 Brian S. Dean + + * main.c: + Check the programmer type against 'STK500' instead of the programmer + name when checking to see if we should default to the default_serial + port instead of the default_parallel port. This has us do the right + thing for the new 'avrisp' programmer. + + * stk500.c: + Make the page size used for non-paged parts for the 'paged_write' + command be 128 bytes. This cuts 6 seconds off the programming time + for uploading a 6K file into an AT90S8515 vs the time loading the same + file using a 16 byte buffer, and the response feedback is still good. + + * avr.c, stk500.c: + Fix stk500 page write (Program Page command). This is supported after + all on non-paged-memory parts. The problem was that the page size was + defaulting to 256 (maximum for the stk500), but the timeout for a + response from the stk500 before declaring it dead was only 0.5 + seconds. But it takes much longer than 0.5 seconds to program 256 + bytes, so we just weren't waiting long enough. + + Fix this in two ways - increase the timeout to 5 seconds, and decrease + the page size to 16 bytes for non-paged parts. The programming time + for 16 bytes is short enough to provide the user with some feedback + that something is happening. + + * avr.c, stk500.c: + Don't call the programmer's 'paged_write' routine unless the memory + itself is paged as it doesn't appear to work otherwise. + + * avrdude.conf.in: Fix device codes for at90s8515 and at90s8535. + + * avrdude.conf.in: + Add PAGEL and BS2 parms for parts I have datasheets for. + + * config_gram.y: + Do that last commit slightly differently - this way results in no + shift-reduce conflicts. + + * config_gram.y: + It shouldn't be an error to have an empty configuration file. This + causes some shift-reduce conflicts, but I think they are OK. + + * main.c: + Print out a list of valid parts for '-p ?' and a list of valid + programmers for '-c ?'. + +2003-03-04 Eric Weddington + + * doc/avrdude.texi: Minor Windows doc corrections. + + * doc/TODO: Add TODO file. + + * avrdude.conf.in: Add AVR ISP programmer. + +2003-03-04 Brian S. Dean + + * stk500.c: + Don't try to set extended device programming parameters if they + haven't been specified in the config file for the part. + + * stk500.c: Set extended device parameters for all firmware versions. + + * stk500.c: + First attempt at supporting STK500 firmware past 1.10. Thanks to + Jason Kyle for the needed protocol information. + +2003-03-03 Theodore A. Roth + + * doc/Makefile.am: + * doc/Makefile.am: Add ps and pdf rules since they aren't supplied by + automake versions prior to 1.7. + + * doc/avrdude.texi: + * doc/avrdude.texi: Add node and menu information for the info system. + + * Makefile.am, configure.ac, doc/Makefile.am, doc/avrdude.texi: + * Makefile.am (SUBDIRS): Add doc dir. + * configure.ac (AC_CONFIG_FILES): Add doc/Makefile. + * doc/Makefile.am: New file. + * doc/avrdude.texi: Use automatically generated version.texi. + +2003-03-02 Brian S. Dean + + * doc/avrdude.texi: Initial manual. + +2003-02-27 Theodore A. Roth + + * term.c: * term.c: Use fgets() if readline() is not available. + +2003-02-27 Joerg Wunsch + + * bootstrap: + Oops, accidentally spammed the repository with my private version of + "bootstrap". Back out that change. + + * bootstrap, lexer.l: + Ignore \r as white space, to make the Windows people happy. + +2003-02-27 Theodore A. Roth + + * Makefile.am (EXTRA_DIST): Add avrdude.spec and make entries one + per line so future patches are obvious as to what changed. + * avrdude.spec.in: New file to support creation of binaries in rpm + format. + * configure.ac (AC_OUTPUT): Add avrdude.spec. Reorder so that + Makefile is the last entry. + +2003-02-26 Theodore A. Roth + + * Makefile.am (SUBDIRS): Add windows dir. + * configure.ac: If $target is a windows system, build whats in + windows sub dir. + * windows/Makefile.am: New file. + +2003-02-25 Theodore A. Roth + + * ChangeLog: Point reader to the CHANGELOG file. + * Makefile.am (EXTRA_DIST): Rename avrdude.conf.sample to + avrdude.conf.in. + Remove avrdude.conf and distclean-local rules. + Add install-exec-local and backup-avrdude-conf rules. + * avrdude.conf.in: + Set default_parallel to "@DEFAULT_PAR_PORT@" for autoconf expansion. + Set default_serial to "@DEFAULT_SER_PORT@" for autoconf expansion. + * configure.ac: Add call to AC_CANONICAL_{BUILD,HOST,TARGET} macros. + Set DEFAULT_PAR_PORT and DEFAULT_SER_PORT based on $host. + Add copyright header. + Define avrdude_version so AC_INIT and AM_INIT_AUTOMAKE are sure + to get the same version. + + * avrdude.conf.in, avrdude.conf.sample: + Renamed avrdude.conf.sample to avrdude.conf.in. + +2003-02-25 Eric Weddington + + * ppiwin.c: CRs again. + + * confwin.c, confwin.h: Get rid of CRs. + + * main.c, Makefile.am: Get rid of CRs again. + +2003-02-24 Joerg Wunsch + + * avrdude.1: Atmel has rearranged their web site, so now the AVR + docs have been moved to a more logically sounding URL. + +2003-02-24 Eric Weddington + + * Makefile.am, main.c: Integrate Windows search of config files. + + * confwin.c, confwin.h: config file search on Windows. + + * ppiwin.c: Change port value from lpt1alt to lpt3. Other + formatting changes. + + * windows/giveio.c: + Add giveio device driver source. Requires MS DDK to build. + + * windows/giveio.sys: Add giveio device driver binary. + + * giveio.sys, install_giveio.bat, remove_giveio.bat, status_giveio.bat: + Move Windows specific files. + + * windows/loaddrv.c, windows/loaddrv.h, windows/remove_giveio.bat: + * windows/status_giveio.bat, windows/install_giveio.bat: + Add Windows specific files. + + * main.c: Usage back to stderr. + +2003-02-22 Brian S. Dean + + * CHANGELOG: Add note about .avrduderc. + + * avr.c, avrdude.conf.sample, avrpart.h, config_gram.y, main.c, + * par.c, pgm.c, pgm.h: + Add the ability to read a per-user config file located at + $HOME/.avrduderc. Entries from .avrduderc take precedence over those + from the system wide config file in ${PREFIX}/etc/avrdude.conf. + + Track and display the config file name and line number when we print + out the available parts and programmers. This is useful in case + someone has overridden a definition in their .avrduderc file and is + wondering why the definition in the system wide config file is not + being used. + + Remove the default programmer 'stk500' from the distributed config + file. + + * CHANGELOG: Spelling. + +2003-02-21 Brian S. Dean + + * CHANGELOG: + Put some stuff in the CHANGELOG for this upcoming new version before I + forget. + + * main.c: + Update comment due to removal of the default parallel port pin config. + + * config.c, config.h, config_gram.y, lexer.l, main.c: + * avrdude.conf.sample: + Introduce 'default_programmer' to the config file instead of requiring + one of the programmers to be tagged "default" within its definition. + + Also, axe the notion of a compiled-in default programmer. It is + kind've pointless now that nearly all configuration comes from the + config file, thus, avrdude is not very useful without the config file, + and thus, having a programmer compiled-in offers little or no benefit. + +2003-02-21 Eric Weddington + + * main.c: Change usage text to be verbose. + + * giveio.sys: Add Windows parallel port device driver (binary). + + * install_giveio.bat, remove_giveio.bat, status_giveio.bat: + Windows batch files to work with giveio.sys. + +2003-02-21 Brian S. Dean + + * avrdude.conf.sample, config.c, config.h, config_gram.y, lexer.l: + * main.c: + Add port name defaults to the config file instead of hard-coding. + This adds 'default_parallel' and 'default_serial' keywords to the + grammar, which take quoted string arguments. + + * avrdude.conf.sample: + Document the recent additions to the config file. + + * stk500.c, avr.c, avrpart.h, config_gram.y, lexer.l, par.c: + Add the ability to specify which pin to pulse when retrying entry into + programming mode. Use 'retry_pulse' in the per-part specification + that can currently take values of 'reset' or 'sck', the default being + 'sck' which preserves the previous behaviour. Some newer parts + indicate that /RESET should be pulsed, while older parts say to pulse + SCK. + +2003-02-20 Eric Weddington + + * main.c, par.c: + Make verbose global. Make debug code in par_cmd() based on verbose=2. + +2003-02-20 Brian S. Dean + + * stk500.c: Fix pseudo/full parallel mode selection logic. + + * avrdude.conf.sample: + Woops, didn't really mean to commit those changes that slipped in with + the last commit. Those were just there for testing. + + * avr.c, avrdude.conf.sample, avrpart.h, config_gram.y, lexer.l: + * stk500.c: + Add 'serial' and 'parallel' keywords to the grammar so that one can + say whether parts support these programming modes or not. Possible + values for 'serial' are 'yes' or 'no'. Possible values for 'parallel' + are 'yes', 'no', or 'pseudo'. Add a bit mask of flags to the AVRPART + structure to capture these settings. Use these within + stk500_initialize() to set the device parameters correctly. + + Defaults for 'serial' and 'parallel' are 'yes' unless specified + otherwise. + +2003-02-20 Eric Weddington + + * Makefile.am, ppiwin.c: Get rid of CRs. + + * Makefile.am: Add ppiwin.c to avrdude_SOURCES. + + * ppiwin.c: Added ppiwin.c: Windows parallel port driver. + + * stk500.c: + Add error message for fail to enter programming mode. Fix typos. + +2003-02-20 Brian S. Dean + + * avr.c, avrdude.conf.sample, avrpart.h, config_gram.y, lexer.l: + Add a few parameters needed for parallel programming: assignment of + PAGEL and BS2 signals and the disposition of the reset pin + ('dedicated' or 'io'). + +2003-02-20 Theodore A. Roth + + * avrdude.1: Fix spacing for m169 entry. (tabs not spaces ;-) + +2003-02-20 Brian S. Dean + + * avrdude.1, fileio.c, main.c: Add Motorola S-record support. + + Submitted by: "Alexey V.Levdikov" + +2003-02-19 Theodore A. Roth + + * avrdude.1: Add m169 to list of supported targets. + +2003-02-19 Joerg Wunsch + + * avrdude.conf.sample, avrdude.1: + My colleague contributed a part definition for the AT90S2343. + + Submitted by: Mirko Kaffka + +2003-02-18 Theodore A. Roth + + * avrdude.conf.sample: + Add support for mega169. (tested with stk500 with 1.7 firmware) + + * avrdude.conf.sample: + Add commments to separate parts (makes it easier for the eye to parse). + +2003-02-15 Theodore A. Roth + + * Makefile.am: Add $srcdir to sample config filename so that + building in a separate dir works. + +2003-02-15 Joerg Wunsch + + * Makefile.am: + Only GNU make sets $< in non-inference rules, so rather explicitly + spell the source file(s) to remain compatible. + +2003-02-14 Theodore A. Roth + + * Makefile.am: Add distclean rule and EXTRA_DIST list to get 'make + distcheck' to succeed. + + These changes add basic support for a autoconf/automake based + build system. + + * .cvsignore: Ignore autoconf files. + * AUTHORS: New file. + * ChangeLog: New file. + * Makefile: Removed file. + * Makefile.am: New file. + * NEWS: New file. + * README: New file. + * bootstrap: New file. + * configure.ac: New file. + * avr.c: Include ac_cfg.h (generated by autoconf). + * config.c: Include ac_cfg.h. + Include config_gram.h instead of y.tab.h. + * config.h: If HAS_YYSTYPE is not defined, define YYSTYPE. + * config_gram.y: Include ac_cfg.h. + * fileio.c: Include ac_cfg.h. + * lexer.l: Include config_gram.h instead of y.tab.h. + * lists.c: Include ac_cfg.h. + * main.c: Include ac_cfg.h. + * par.c: Include ac_cfg.h. + * pgm.c: Include ac_cfg.h. + * ppi.c: Include ac_cfg.h. + * stk500.c: Include ac_cfg.h. + * term.c: Include ac_cfg.h. + +2003-02-14 Brian S. Dean + + * stk500.c: Fix typos. Fix error messages. + +2003-02-13 Brian S. Dean + + * Makefile, avrdude.conf.sample, config_gram.y, lexer.l, main.c: + * par.c, par.h, ppi.c, ppi.h, stk500.c: + Split higher level parallel port programmer code off from ppi.c into + its own file par.c, leaving low level parallel port accessor routines + in ppi.c to help with portability. Change the programmer type to + 'PAR' now instead of 'PPI' - 'PAR' represents the parallel port + programmer type. + + Be more liberal with 'static' function declarations within the + programmer implimentation files - these functions should never be + called directly - always use the programmer function references. + + There are still a few places in 'main.c' that directly reference the + parallel programmer explicitly (par_getpinmask). These should be + fixed somehow. + + Axe a few unused functions. + +2003-02-12 Theodore A. Roth + + * .cvsignore: New file. + + * stk500.c: Remove need for inttypes.h. + + * lexer.l: Define YY_NO_UNPUT to quell a compiler warning. + + * Makefile: Remove YACC assignment. + Add '-b y' options to YACC invocation. + Remove leading '-' from 'include .depend'. + +2003-02-12 Joerg Wunsch + + * config_gram.y: + Declare the internally used static functions on top, to get rid of the + compiler warnings. + + Reported by: bison-generated parsers + +2003-02-11 Theodore A. Roth + + * linux_ppdev.h: New file. + * ppi.c: Include system dependant parallel port interface file. + (ppi_open): Add call to ppi_claim(). + (ppi_close): Add call to ppi_release(). + * ppi.h: Define ppi_claim() and ppi_release() as NOPs if not previously + defined. + * stk500.c: Include inttypes header to quell compiler warning. + +2003-02-11 Joerg Wunsch + + * pgm.c, ppi.c, stk500.c: Fix some implicit declaration warnings. + + * config_gram.y: + Move the C declarations to the top of the file. While [b]yacc doesn't + care, bison does, and this is normally the way it's meant to be + anyway. + +2003-02-11 Theodore A. Roth + + * Makefile: Generate dependencies specific to the target system. + Explicitly use byacc. + + * Makefile: + Remove reference to avr-gcc in depend rule (cut & paste error). + +2003-02-09 Brian S. Dean + + * main.c, pgm.c, pgm.h, pindefs.h, ppi.c, ppi.h, stk500.c: + * stk500.h, stk500_private.h, term.c, term.h, CHANGELOG, COPYING: + * Makefile, avr.c, avr.h, avrdude.1, avrdude.conf.sample: + * avrdude.pdf, avrpart.h, config.c, config.h, config_gram.y: + * fileio.c, fileio.h, lexer.l, lists.c, lists.h: + Test commit in new public repository. Before this time this repo + existed on a private system. Commits made by 'bsd' on the old system + were made by Brian Dean (bdean on the current system). + +2003-02-08 Brian S. Dean + + * Makefile, avr.c, avr.h, avrdude.1, avrpart.h, config.c, + * config.h, config_gram.y, fileio.c, fileio.h, lexer.l, lists.c: + * lists.h, main.c, pgm.c, pgm.h, pindefs.h, ppi.c, ppi.h: + * stk500.c, stk500.h, term.c, term.h: + The last part of that last commit message should read: + + All others - modify program description. + + * Makefile, avr.c, avr.h, avrdude.1, avrpart.h, config.c: + * config.h, config_gram.y, fileio.c, fileio.h, lexer.l, lists.c: + * lists.h, main.c, pgm.c, pgm.h, pindefs.h, ppi.c, ppi.h: + * stk500.c, stk500.h, term.c, term.h: + Makefile: include a target to automatically generate the dependency + list. + + All others + +2003-02-06 Brian S. Dean + + * avrdude.1: Update license to GPL, permission by Joerg Wunsch. + + * lexer.l: Add GPL. + + * Makefile, config_gram.y: Add GPL to the Makefile and config_gram.y. + + * Makefile, stk500.h: + Add stk500.h as a dependency for stk500.c. Remove carraige returns + from stk500.h - don't know how those got in there (pointed out by Ted + Roth). + + * COPYING, avr.c, avr.h, avrpart.h, config.c, config.h, fileio.c: + * fileio.h, lists.c, lists.h, main.c, pgm.c, pgm.h, pindefs.h: + * ppi.c, ppi.h, stk500.c, stk500.h, term.c, term.h: + Re-license using the GNU GPL. Thanks to Ted Roth for the patch. + + * avr.c, avr.h, config.c, config.h, config_gram.y, fileio.c: + * fileio.h, lexer.l, lists.c, lists.h, main.c, pgm.c, pgm.h: + * pindefs.h, ppi.c, ppi.h, stk500.c, stk500.h, term.c, term.h: + Get rid of the verbose printing of individual file CVS version ids. + This was intended to be used for identifying code in the field for + incoming bug reports, but I've never really found it all that useful. + + * CHANGELOG, Makefile, Makefile.inc, avr.c, avrdude.1: + * avrdude.conf.sample, config_gram.y, lexer.l, main.c, stk500.c: + * term.c: + Change the name from AVRPROG to AVRDUDE. + + This change represents a name change only. There is currently an + effort to port AVRPROG to other platforms including Linux and Windows. + Since Atmel's programmer binary that's included within their AVR + Studio software is named AVRPROG.EXE on the Windows OS, there is the + chance for confusion if we keep calling this program AVRPROG as well. + Up until now the name hasn't really been a problem since there was no + chance to confuse 'avrprog' on Unix with Atmel's AVRPROG because + Atmel's tools only run on Windows. But with the Unix 'avrprog' + possibly being ported to Windows, I felt a name change was the best + way to avoid problems. + + So - from this point forward, my FreeBSD Unix program formerly + known as AVRPROG will subsequently be known as AVRDUDE (AVR + Downloader/UploaDEr). + + This change also represents a time when the AVRDUDE sources move from + my own private repository to a public repository. This will give + other developers a chance to port AVRDUDE to other platforms and + extend its functionality to support additional programming hardware, + etc. + + So goodbye AVRPROG, welcome AVRDUDE! diff --git a/xs/src/avrdude/ChangeLog-2004-2006 b/xs/src/avrdude/ChangeLog-2004-2006 new file mode 100644 index 000000000..20e5b2e8b --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2004-2006 @@ -0,0 +1,1644 @@ +2006-12-23 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version to 5.3cvs (again). + +2006-12-22 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version to 5.3.1. + * avrdude.conf.in (frank-stk200): Fix syntax error. + * ser_avrdoper.c: Make #ifdef for Win32/libhid + consistent with the initial check: use the HID driver + only iff found, otherwise use libusb. + +2006-12-21 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version to 5.3cvs. + +2006-12-21 Joerg Wunsch + + Released AVRDUDE 5.3. + +2006-12-21 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version to 5.3. + +2006-12-21 Joerg Wunsch + + Submitted by Vince VG: + * avrdude.conf.in (frank-stk200): New programmer added. + * doc/avrdude.texi: Mention frank-stk200. + Closes patch #5502: one other programmer + +2006-12-21 Joerg Wunsch + + Submitted by Christian Starkjohann: + * ser_avrdoper.c (usbOpenDevice): clear the error code when + returning successfully. + +2006-12-21 Joerg Wunsch + + Submitted by Christian Starkjohann: + patch #5507: Support for AVR-Doper USB programmer in HID mode + * configure.ac: Add hooks to detect the Win32 HID library, + as well as the existence of . + * Makefile.am: Add new files. + * my_ddk_hidsdi.h: (New file.) + * ser_avrdoper.c: (New file.) + * serial.h: Add declaration for avrdoper_serdev. + * stk500v2.c: Add hook to divert to the AVR Doper code. + * avrdude.1: Document the AVR Doper support. + * doc/avrdude.texi: (Ditto.) + +2006-12-15 Joerg Wunsch + + Submitted by ivanv at netman.ru + * jtagmkI.c: fix length for single-byte write operations. + Closes bug #18527 JTAG ICE: fuse bits have been writen incorrectly + +2006-12-11 Joerg Wunsch + + * jtagmkII.c (jtagmkII_paged_write): Remove a debugging + usleep(1000000) that accidentally crept in in rev 1.19. + +2006-12-11 Joerg Wunsch + + * ser_posix.c (ser_open): Do fill in fdp->ifd before already + using it in ser_setspeed(). + +2006-12-11 Joerg Wunsch + + * jtagmkI.c (jtagmkI_close): revert baud rate to the initial + value in case we had changed it. + Fixes bug #18262: JTAGMKI/JTAG1 Reset Bug + +2006-12-11 Colin O'Flynn + + * safemode.c: Stop ignoring return values! + Closes bug #18339 + +2006-12-11 Joerg Wunsch + + Submitted by Nick Lott: + * avrdude.conf.in: Fix signature for ATmega8515. + Closes bug #18348: ATMEGA8515 Signature is wrong in avrdude.conf + +2006-12-11 Joerg Wunsch + + * avr.c: Fix a bug introduced in rev. 1.69, when implementing the + fallback from each programmer's paged_load() or paged_write() + method, respectively. The return value needs to be checked for + being greater or equal than 0 rather equal to 0 in order to + assume the operation has been successful. + Fixes bug #18489: avrdude is too slow (20 byte/s) + +2006-12-11 Joerg Wunsch + + * avr910.c: Make the code compile warning-free: + - declare a dummy "struct timezone" for some Win32 systems (MinGW) + - fix a few printf() argument types + - get rid off the prevailing "all filedescriptors are of type int" + attitude + The last item required a large sweep across the code, in order to + replace all "int fd"s by "struct filedescriptor *fd"s, and pass + pointers (as we cannot pass a union directly). In return, the + code is now supposed to be fully 64-bit safe, rather than relying + on a 64-bit pointer being converted to a (32-bit) int and back + to a pointer as we did previously. + * butterfly.c: (Ditto.) + * jtagmkI.c: (Ditto.) + * jtagmkII.c: (Ditto.) + * lists.c: (Ditto.) + * par.c: (Ditto.) + * pgm.h: (Ditto.) + * ppi.c: (Ditto.) + * ppi.h: (Ditto.) + * ppiwin.c: (Ditto.) + * ser_posix.c: (Ditto.) + * ser_win32.c: (Ditto.) + * serbb_posix.c: (Ditto.) + * serbb_win32.c: (Ditto.) + * serial.h: (Ditto.) + * stk500.c: (Ditto.) + * stk500v2.c: (Ditto.) + * usb_libusb.c: (Ditto.) + +2006-11-23 Joerg Wunsch + + Implement EEPROM access through debugWire. + * jtagmkII.c: Extend the jtagmkII_read_byte() and + jtagmkII_write_byte() methods to handle EEPROM through + debugWire. + * avrpart.h: Implement the "flash instruction" parameter. + * config_gram.y: (Ditto.) + * lexer.l: (Ditto.) + * avrdude.conf.in: (Ditto.) + * avrdude.1: Document the EEPROM access through dW. + * doc/avrdude.texi: (Ditto.) + * tools/get-dw-params.xsl: Extend to extract the flash + instruction field. + +2006-11-23 Joerg Wunsch + + * avr.c (avr_read, avr_write): if the paged access returns a + failure, fall back to byte access. + +2006-11-21 Joerg Wunsch + + * jtagmkII.c: In jtagmkII_read_byte() and jtagmkII_write_byte(), + return an error upon failure now that the upper layers won't fall + back to the cmd() method anymore in that case. + +2006-11-21 Joerg Wunsch + + Implement debugWire programming support. + * avrpart.h: Implement debugWire support. + * config_gram.y: (Ditto.) + * jtagmkII.c: (Ditto.) + * jtagmkII.h: (Ditto.) + * lexer.l: (Ditto.) + * avrdude.conf.in: Add the new dW programmers. + * avrdude.1: Document the dW support. + * doc/avrdude.texi: (Ditto.) + * tools/get-dw-params.xsl: XSL stylesheet to extract the dW + parameters from the XML files. + +2006-11-20 Joerg Wunsch + + * jtagmkI.c (jtagmkI_close): remove two unused variables. + +2006-11-20 Joerg Wunsch + + * avr.c: Replace the fallback of avr_read_byte() and avr_write_byte() to + avr_read_byte_default() and avr_write_byte_default (resp.) by directly + calling the latter functions from within all programmers that don't + implement their own read_byte()/write_byte() methods. In turn, make the + read_byte() and write_byte() methods mandatory, and the cmd() method + (direct ISP command) optional instead (it's effectively mandatory for + any programmer using avr_read_byte_default()/avr_write_byte_default() + though). Remove all the pointless cmd() method stubs from those programmers + that don't need it. + Eliminate avr_read_byte() as it was now completely identical to + pgm->read_byte(). + * avr.h: (Ditto.) + * bitbang.c: (Ditto.) + * butterfly.c: (Ditto.) + * jtagmkI.c: (Ditto.) + * jtagmkII.c: (Ditto.) + * par.c: (Ditto.) + * pgm.c: (Ditto.) + * safemode.c: (Ditto.) + * serbb_posix.c: (Ditto.) + * serbb_win32.c: (Ditto.) + * stk500.c: (Ditto.) + * stk500v2.c: (Ditto.) + * term.c: (Ditto.) + * usbasp.c: (Ditto.) + +2006-11-13 Joerg Wunsch + + * jtagmkI.c: Avoid sending a CMD_RESET when leaving programming + mode, and CMD_GO when closing the connection. They cause the + activity LED on the ICE to continue to flicker, and are not + necessary anyway (the target starts to run by itself when leaving + programmng mode). + This is a partial fix for bug #18262: JTAGMKI/JTAG1 Reset Bug + +2006-11-12 Colin O'Flunn + + * avrdude.conf.in: Add read command for lockbits for Tiny2313. + Applies patch #5538 + +2006-11-10 Joerg Wunsch + + * avrdude.conf.in: Add signatures for ATmega325/3250/645/6450. + +2006-11-08 Joerg Wunsch + + * configure.ac: Preserve ${LDFLAGS} inherited from environment + for Win32 environments. + +2006-11-07 Joerg Wunsch + + * configure.ac: Don't pretend --enable-doc were the default. + +2006-11-02 Joerg Wunsch + + * avrdude.conf.in: Fix the width of the efuse memory area for a + number of AVRs. + Closes bug #18182: Wrong setting of eFuse configuration for + mega640/1280/1281/2560/2561 in avrdude 5.2 + +2006-11-01 Joerg Wunsch + + * avrdude.conf.in: Implement HVSP and PP modes for the AVR Dragon. + * config_gram.y: (Ditto.) + * jtagmkII.c: (Ditto.) + * jtagmkII_private.h: (Ditto.) + * lexer.l: (Ditto.) + * stk500v2.c: (Ditto.) + * stk500v2.h: (Ditto.) + * avrdude.1: Document the HVSP and PP support for the Dragon. + * doc/avrdude.texi: (Ditto.) + +2006-10-27 Joerg Wunsch + + * jtagmkI.c: Implement a flags field in struct serdev, and populate it + with a flag that indicates whether the underlying communication can + dynamically change its speed or not. This flag is set for true serial + communication but clear for USB communication. Don't try to adjust + the speed when talking over a communication channel that doesn't + support it. (The Dragon does not even support the respective parameter.) + * jtagmkII.c: (Ditto.) + * ser_posix.c: (Ditto.) + * ser_win32.c: (Ditto.) + * serial.h: (Ditto.) + * usb_libusb.c: (Ditto.) + +2006-10-26 Joerg Wunsch + + * avrdude.conf.in: Add support for the AVR Dragon (JTAG and ISP mode). + * config_gram.y: (Ditto.) + * jtagmkII.c: (Ditto.) + * jtagmkII.h: (Ditto.) + * lexer.l: (Ditto.) + * stk500v2.c: (Ditto.) + * stk500v2.h: (Ditto.) + * usbdevs.h: (Ditto.) + * avrdude.1: Document the AVR Dragon support. + * doc/avrdude.texi: (Ditto.) + +2006-10-09 Joerg Wunsch + + Released AVRDUDE 5.2. + +2006-10-09 Joerg Wunsch + + * configure.ac: Bump version to 5.2 + +2006-10-09 Joerg Wunsch + + Submitted by John Voltz: add AVR053 oscillator calibration. + * main.c: Add the -O option. + * pgm.c: Add the hook for the perform_osccal() method. + * pgm.h: (Ditto.) + * stk500v2.c: Implement perform_osccal(). + * avrdude.1: Document the -O option. + * doc/avrdude.texi: (Ditto.) + Partially closes bug #17487: AVR RC oscillator calibration + routine not supported (feature request) + +2006-10-09 Joerg Wunsch + + Submitted by freckle@sf.net: + * stk500.c (stk500_paged_write): Send the command and the data + payload within a single write(). + patch #5025: Improve stk500.c robustness + + Submitted by Matthias Ringwald: + * stk500.c (stk500_open): do not flush the serial line after + getting in sync with the programmer. + patch #5293: stk500.c: no drain after sync (-> allow BTnode + Bootloader to work on cygwin) + +2006-09-29 Joerg Wunsch + + * pgm.h: Fix prototype for gettimeofday(). + Closes bug #17884: another gettimeofday conflict under win32/cygwin + +2006-09-24 Joerg Wunsch + + Submitted by Thomas Fischl (initially): + * configure.ac: Add the CoreFoundation and IOKit framework + linker flags on MacOS X when configuring for USB support. + patch #4685: Libusb on MacOS X: detection and additional includes + +2006-09-20 Joerg Wunsch + + * avr910.c: As there is a lot of ambiguity about the AVR910 + device codes, allow the user to override the device code + verification with the -F option. + * main.c: Make ovsigck a global variable. + +2006-09-20 Joerg Wunsch + + Add the "stk500generic" programmer that auto-probes for STK500 + either firmware version 1 or 2. + * Makefile.am (avrdude_SOURCES): add the new files + stk500generic.c and stk500generic.h. + * avrdude.conf.in: Add the stk500generic programmer type, and + change the "stk500" entry to point to this programmer. + * config_gram.y: Add the stk500generic keyword. + * lexer.l: (Ditto.) + * stk500.c: Change the stk500v1 code to not call exit() + prematurely when failing to open the programmer, but instead + return an error status. + * stk500generic.c: (New file.) Stub programmer implementation. + Probe for either stk500v1 or stk500v2, and adjust the current pgm + appropriately. + * stk500generic.h: (New file.) Declare the public interface(s) + of stk500generic.c. + * doc/avrdude.texi: Document the changed behaviour of stk500. + +2006-09-18 Joerg Wunsch + + * avrdude.conf.in: Various fixes for ancient processors and their + capabilities. For the AT90S1200 and the AT90S8515, fuse bit + handling via ISP, and lock bit reading via ISP are not supported + at all. For the AT90S4414 (small brother of the AT90S8515), add + the ability to write the lock bits, and add a definition for the + fuse bits (usable for HV programming). For the AT90S2313, add the + "fuse" memory range, so it's available for HV programming. + + Resolves bug #17796: avrdude will not program or verify lockbits + with Atmel STK protocol programmers + +2006-09-17 Joerg Wunsch + + Submitted by Thomas Fischl: + * usbasp.c: Check for USBasp with new as well as old VID/PID + pair, warn the user about upgrading the firmware in case an + old one has been found. + * usbasp.h: Add new VID/PID. + +2006-09-15 Joerg Wunsch + + * avrdude.conf.in: Fix some mistakes for the ATtinyX61 family: + . high fuse has 8 bits + . there is an extended fuse (just one bit) + . the calibration area is only 1 byte + +2006-09-12 Joerg Wunsch + + * doc/avrdude.texi: Convert some of the tables to multitables + in order to beautify the result. + +2006-09-10 Joerg Wunsch + + Contributed by Thomas Fischl: add support for USBasp. + patch #4686: Add support for USBasp, a simple USB programmer + * usbasp.c: New file, implement the USBasp driver. + * usbasp.h: New file, interface declarations for USBasp. + * Makefile.am: Wire the new files into the build. + * avrdude.conf.in: Add the usbasp programmer entry. + * config_gram.y: Add the usbasp token. + * lexer.l: (Ditto.) + * avrdude.1: Document the USBasp programmer. + * doc/avrdude.texi: (Ditto.) + +2006-09-08 Joerg Wunsch + + * main.c: Implement -U filename as a shorthand for + -U flash:w:filename:a. + * avrdude.1: Document this. + * doc/avrdude.texi: (Ditto.) + +2006-09-08 Joerg Wunsch + + Implement numerical output formats for decimal, hexadecimal, + octal, and binary numbers. + Closes bug #16129: more output formats for fuse bits + (avrdude enhancement request) + * fileio.c: Implement fileio_num() and the itoa_simple() + helper function. + * fileio.h: Add new file formats to FILEFMT. + * main.c: Parse the new file formats. + * avrdude.1: Document all this. + * doc/avrdude.texi: (Ditto.) + +2006-09-08 Joerg Wunsch + + * fileio.c: CPP statements start in column #1. + * stk500v2.c: Hide two debug/trace statements behind "verbose". + +2006-09-07 Joerg Wunsch + + * avrdude.1: Describe how to disable the DWEN fuse. + * doc/avrdude.texi: (Ditto.) + +2006-09-07 Joerg Wunsch + + * jtagmkII.c: Translate numerical response codes to strings. + +2006-09-07 Joerg Wunsch + + * avrdude.1: The avr109 programmer type no longer chokes on + a wrong avr910 device ID, so remove that description. + * doc/avrdude.texi: (Ditto.) + +2006-09-07 Joerg Wunsch + + * jtagmkII.c: When failing to start in ISP mode, try + debugWire instead. This requires the user to eventually + restart AVRDUE from scratch then. + +2006-09-06 Joerg Wunsch + + Add support for the JTAG ICE mkII in ISP mode. + * avrdude.conf.in (jtag2isp): New programmer entry. + * config_gram.y: Add K_JTAG_MKII_ISP. + * jtagmkII.c: Restructure and export some more functions. + * jtagmkII.h: Declare exported functions. + * jtagmkII_private.h: Prepare file to be included in stk500v2.c. + * lexer.l: Add jtagmkii_isp token. + * stk500v2.c: Implement glue to jtagmkII.c. + * stk500v2.h: Declare stk500v2_jtagmkII_initpgm(). + * avrdude.1: Document the new programmer support. + * doc/avrdude.texi: (Ditto.) + +2006-09-01 Joerg Wunsch + + * main.c: Add date and time of compilation to the verbose + greeting message. + Idea taken from patch #3172: Adds date and time of compile + to usage message + +2006-09-01 Joerg Wunsch + + Contributed by as + patch #4372: Better synchronization for stk500 + * stk500.c: Sync three times, and drop any noise inbetween. + +2006-09-01 Joerg Wunsch + + * avrdude.conf.in (ATtiny261, ATtiny461, ATtiny861): new + entries. + +2006-09-01 Joerg Wunsch + + * butterfly.c: Remove the device support decision based on + the old AVR910 device codes; we've got signature verification + now so better rely on that. + * avr910.c: Revert the signature bytes returned, as it already + happened in butterfly.c. This closes bug #14998: Signature Bytes + read in wrong order (avr910 mode) + +2006-09-01 Joerg Wunsch + + Submitted by Wim Lewis. + * serbb_posix.c: Improve error handling. + patch #4923: Better error reporting for serial-bitbang programmers + +2006-08-31 Joerg Wunsch + + * avrdude.conf.in: Introduce a "stk500v1" entry, so we + can switch the default "stk500" to "stk500v2" some day. + +2006-08-31 Joerg Wunsch + + The major part of this change has been contributed by + . + Implements patch #4635: Add support for terminal/console + servers for serial programmers + * ser_posix.c: Add net_open(), and divert to it for net:host:port. + * ser_win32.c: Recognize net:host:port, and bail out. + * avrdude.1: Document the net:host:port connection option. + * doc/avrdude.texi: (Ditto.) + +2006-08-31 Joerg Wunsch + + Fix for bug #16627: Butterfly programmer does not reset after + programming + * butterfly.c: Wait for the device's response after sending + an "E" command. + +2006-08-31 Joerg Wunsch + + Tentative fix for bug #16156: Problem with Si-Prog + * serbb_posix.c: Disable reset before closing. + * serbb_win32.c: (Ditto.) + +2006-08-30 Joerg Wunsch + + Rewrite the serbb code so the pin numbering matches the + DB9 connector, and fix some related bugs in serbb_posix.c. + Closes bug #16265: dasa2 does not work under posix + * avrdude.conf.in: New serbb pin numbering; added "siprog" + as an alias for "ponyser". + * serbb_posix.c: New pin numbering, fix some confusion. + * serbb_win32.c: New pin numbering. + The generic and Posix-related parts of these changes have + been contributed by Hanns-Konrad Unger + +2006-08-30 Joerg Wunsch + + Contributed by the anonymous developer of patch #5096: + * avrdude.conf.in (blaster): Add an entry for the Altera + byteblaster. + +2006-08-30 Joerg Wunsch + + Rework the exit specs so they actually work again. It should be + possible to extend them for other programmers than PPI now (serbb, + stk500*). + * pgm.h: Keep the exit specs in an abstract form inside struct + programmer_t. (Should be moved out into some programmer-specific + structure.) Rename the getexitspecs() method into + parseexitspecs(). + * main.c: Move the exit specs stuff out to the programmer + implementation. + * par.c: Implement the new exit spec handling. Everything is now + done using the generic abstraction layer. + Closes bug #16443: No disable Resetsignal at the end of + Programming Session + Obviates need for patch #5057: quick and dirty Hack to unset Reset + after Programming + +2006-08-29 Joerg Wunsch + + This patch has been contributed by an anonymous developer + via the patch tracking system. + patch #5096: Allow VCC and BUFF to be any pin in parallel mode + * config_gram.y: Release the restriction to PPIDATA pins. + * par.c: Rework the code to introduce a function par_setmany() + that builds on top of par_setpin(), and use that function for the + PPI_AVR_VCC and PPI_AVR_BUFF pin collections. This also abstracts + the polarity of these signals appropriately. + +2006-08-28 Joerg Wunsch + + Contributed by Ned Konz: + * ser_posix.c: Open the serial port with O_NONBLOCK, and + save and restore the port state before exiting. + patch #5008: Patch for (5.1) ser_posix.c for O_NONBLOCK open + and restoring serial port state on close + Closes bug #12622: avrdude hangs on macosx/darwin with PL-2303 + usb-to-serial and Butterfly + +2006-08-22 Joerg Wunsch + + * bitbang.c: Move the bitbang prerequisite checks out from + main() into their own bitbang_check_prerequisites(). + * bitbang.h: (Ditto.) + * main.c: (Ditto.) + * par.c: (Ditto.) + * serbb_posix.c: (Ditto.) + * serbb_win32.c: (Ditto.) + +2006-08-22 Joerg Wunsch + + * avrdude.conf.in: Add page mode parameters for all "eeprom" + memory definitions that are organized in pages. + * avr.c (avr_write_byte_default): Consider using the loadpage + instructions only if the respective memory is marked "paged". + Closes bug #17199: EEPROM fails verification on ATmega645 with + pony-stk200 hardware + Closes bug #16849: EEPROM write fails for AT90USB1287 with + mode 0x41 + Closes bug #15146: stk500v2_paged_write: loadpage instruction + not defined for part + +2006-08-22 Joerg Wunsch + + * doc/avrdude.info (-c): Change "avrispmk2" into "avrisp2" as that + is the programmer actually supported by avrdude.conf.in. + Closes bug #15677: documentation mentions wrong programmer-id + "avrispmk2" + +2006-08-21 Joerg Wunsch + + * avrdude.conf.in: Fix various AVR910 device codes. Add the code + tables from both, AVR910 and AVR109. Change avr910_devcode of + the ATtiny2313 to 0x5e (ATtiny26). + Closes bug #16671: Tiny2313 avr910_devcode is bad + Closes bug #15826: avr910 device type for ATmega8 wrong + +2006-08-21 Joerg Wunsch + + * avrdude.conf.in: Add (rather conservative) write delay timing + values to the *fuse and lock memory spaces of all devices where + they have been missing. Add the lock memory space to the ATmega48 + section. + Closes bug #14920: tiny2313 fuses and AVRDUDE 5.0 + Closes bug #15751: atmega48: no lock bits defined + +2006-08-21 Joerg Wunsch + + * avrdude.conf.in: Fix the size of the calibration memory space + for ATtiny13, ATmega64, ATmega16, ATmega32, ATmega8535, ATtiny25, + ATtiny45, ATtiny85. + Closes bug #17383: Wrong calibration section in avrdude.conf... + +2006-08-21 Joerg Wunsch + + * avrdude.conf.in (ATmega324): Correct the pagesize from 256 to + 128. + This closes bug #16410: ATMega164/324/644 cannot be programmed + +2006-08-20 Joerg Wunsch + + * configure.ac: Check for gettimeofday(). + * ppiwin.c (gettimeofday): Define gettimeofday() replacement + only if !defined(HAVE_GETTIMEOFDAY); use correct protype. + +2006-08-18 Joerg Wunsch + + * stk500v2: Minor cosmetic changes: STK500 firmware version + numbers are M.NN, so always display the minor number as two + digits. Examine the response to the sign-on command to see which + programmer hardware we are talking to, and then restrict the + STK500 topcard display to devices detected as STK500. + +2006-08-18 Joerg Wunsch + + * Makefile.am: Add a dist-hook, and make it remove lexer.c, + config_gram.c, and config_gram.h from the source distribution + archive. These files are supposed to be generated on the target + system. + Closes bug #15536: avrdude-5.1 compilation fails on Gentoo/amd64 + +2006-08-17 Joerg Wunsch + + * stk500v2.c: unreverse the argument order for + CMD_CHIP_ERASE_HVSP; Atmel says AVR068 is right, and + stk500.exe is wrong. + * configure.ac (AC_CHECK_LIB[usb]): Fix the generation + of HAVE_LIBUSB in ac_cfg.h. + +2006-08-17 Joerg Wunsch + + Submitted by Neil Davey: + patch #4539: Ability to control the bit clock (usleep) delay + for ppi interface + * bitbang.c: Implement bitbang_delay() and its calibration. + * bitbang.h: Declare bitbang_delay(). + * main.c: Add the ispdelay option (-i). + * pgm.h (struct programmer_t): Add the ispdelay parameter. + * par.c: Add calls to bitbang_delay() when requested. + * serbb_posix.c: (Ditto.) + * serbb_win32.c: (Ditto.) + * avrdude.1: Document the new -i option. + * doc/avrdude.texi: (Ditto.) + +2006-08-14 Joerg Wunsch + + Submitted by : + * avrdude.conf.in (ATmega48, ATmega88, ATmega168): patch #5100: + mega88 EEPROM support (extended for ATmega48 and ATmega168 - jw). + +2006-08-14 Joerg Wunsch + + Submitted by : + * stk500v2.c (stk500v2_open): patch #5273: Emit error message + if user requests usb and no libusb support + +2006-08-14 Joerg Wunsch + + * avrdude.conf.in: Add HVSP/PP mode parameters for all AVRs. + +2006-08-13 Joerg Wunsch + + * tools: New directory. + * tools/get-hv-params.xsl: New file, extract high-voltage + programming parameters from Atmel XML files, and produce + an avrdude.conf[.in] snippet. + +2006-08-11 Joerg Wunsch + + * configure.ac (AC_CHECK_LIB([usb]): implement a private LIBUSB + macro to add this library to, to prevent it from being + automatically linked to all binaries. This should fix the Win32 + build of loaddrv. + * Makefile.am (avrdude_LDADD): add LIBUSB here. + +2006-08-10 Eric B. Weddington + + Contributed by Bob Paddock + * avrdude.conf.in: Patch #4780. Provide support for mega325, + mega3250, mega645, mega6450. + +2006-08-10 Joerg Wunsch + + * avrdude.conf.in (ATtiny11): fix the HVSP control stack, + add delay values required for flash and EEPROM. + * stk500v2.c: reverse the argument order for + CMD_CHIP_ERASE_HVSP; AVR068 and stk500.exe differ here. + +2006-08-09 Joerg Wunsch + + * stk500v2.c (stk500v2_program_enable): Fix a typo + (synchloops vs. synchcycles). + +2006-08-04 Joerg Wunsch + + * avrdude.conf.in: Add parallel programming definitions for + the ATmega8/48/88/168. + +2006-07-22 Joerg Wunsch + + * avrdude.conf.in: Add the ATtiny11, an HVSP-only device. + +2006-07-21 Joerg Wunsch + + Implement STK500 (v2) HVSP mode. + * stk500v2.c: Add new functions for HVSP support. + * stk500v2.h: Add prototype for the stk500hvsp programmer. + * avrpart.h: Add fields to struct avrpart for new features. + * config_gram.y: Extend the configuration syntax for new + features required for HVSP support. + * lexer.l: (Ditto.) + * avrdude.conf.in: Add HVSP support for ATtiny13 and + ATtiny45 as an example. + * avrdude.1: Document stk500hvsp. + * doc/avrdude.texi: (Ditto.) + +2006-07-21 Joerg Wunsch + + * avrpart.c: Print the very verbose memory details only + in debug level > 4. + +2006-07-19 Joerg Wunsch + + * stk500v2.c: Add more parameters for PP mode. Fix the + non-paged write operations for old AVRs. + * lexer.l: Add more parameters for PP mode. + * config_gram.y: (Ditto.) + * avrpart.h: (Ditto.) + * avrdude.conf.in: Use the new PP mode parameters; add PP mode + definitions for AT90S8515. + * avrdude.1: Document the stk500pp support. + * doc/avrdude.texi: (Ditto.) + +2006-07-19 Joerg Wunsch + + * stk500v2.c: Hide stk500v2_set_sck_period_mk2() behind an #if + defined(HAVE_LIBUSB) as it is only used there (for the AVRISP + mkII). + +2006-07-17 Joerg Wunsch + + * stk500v2.c: Fix all bugs in stk500pp. Eliminate pagebuf, and + use a stack-allocated buffer instead, as the pagesize can be at + most 256 for all current AVRs anyway. + +2006-07-17 Joerg Wunsch + + * main.c: Use mem->desc in place of upd->memtype in more places to + give the full name of the respective memory area, instead of + the (possibly abbreviated) name the user typed in the -U option. + +2006-07-16 Joerg Wunsch + + First stab at an implementation of the STK500 parallel programming + feature (v2 firmware only), named "stk500pp". Still not yet + complete: EEPROM writes not working, documentation missing, only + ATmega16 parameters available in avrdude.conf.in, some parameters + not yet implemented. + * avrdude.conf.in: Add sample parameters for PP mode to ATmega16. + * avrpart.h: Add the parallel programming control parameters. + * avrpart.c: (Ditto.) + * config_gram.y: Add stk500pp configuration grammar. + * lexer.l: Add stk500pp token recognition. + * stk500v2.h: Add declaration for stk500pp_initpgm(). + * stk500v2.c: Add stk500pp implementation. + +2006-07-11 Joerg Wunsch + + * avrdude.conf.in: Fix the signatures for the + ATmega164/324 devices. + +2006-07-10 Joerg Wunsch + + * avrdude.conf.in: Enter the signatures for the + ATmega164/324/644 devices. + +2006-05-25 Joerg Wunsch + + * stk500v2.c: Implement extended addressing needed + for the ATmega256x devices. + * avrdude.1: Document ATmega256x support. + * doc/avrdude.texi: Document ATmega256x support. + Also document Solaris port defaults. + +2006-05-24 Joerg Wunsch + + * avr.c: Start implementing support for ATmega256x; + jtag2 and bitbang programmers are working, stk500v2 + still needs to be done. + * avrdude.conf.in: (Ditto.) + * avrpart.c: (Ditto.) + * avrpart.h: (Ditto.) + * config_gram.y: (Ditto.) + * lexer.l: (Ditto.) + +2006-04-18 Joerg Wunsch + + Contributed by Julius Luukko : + * avrdude.conf.in: Add the "ere-isp-avr" programmer. + +2006-04-13 Joerg Wunsch + + * par.c: Add logic to negate parallel-port signals in + avrdude.conf using a tilde. + + Contributed by Bram Daams: + * avrdude.conf.in: Add the "atisp" programmer entry that + makes use of negated signals. + +2006-03-28 Joerg Wunsch + + * avrdude.conf.in: Add entries for AT90USB{64,128}{6,7} + +2006-03-23 Colin O'Flynn + + Contributed by Wim Lewis, fix a few typos (patch #4987) + * avrdude.1: Typo fix + +2006-02-27 Colin O'Flynn + + Contributed by Wim Lewis, add support for checking device + signatures in detail (patch #4924 and #4925) + * avrdude.conf.in: Add signatures + * avrpart.c: Set default signature + * avrpart.h: Variable for signature + * config_gram.y: More signature reading + * lexer.l: Define that signatures exist + * main.c: Read signatures and check them against hardware + +2006-02-21 Joerg Wunsch + + * avrdude.conf.in: Fix paged flash write for AT90PWMx + (error in datasheet). + +2006-01-23 Joerg Wunsch + + * configure.in: Bump version. + +2006-01-17 Colin O'Flynn + + * main.c: Fixed a typo in safemode variable names, fixed bug 15113 + * avrdude.conf.in : Added BS2 and pagel to M162, Patch 4766 + * main.c, stk500v2.c: Added patch 4804 from eolson@mit.edu + Which stops sck from being writtend needlessly + +2006-01-13 Joerg Wunsch + + Contributed by David Moore: add support for the + AVRISP mkII device. (Savannah patch #4789.) + * serial.h: Declare usb_serdev_frame device descriptor. + * stk500v2.c: Implementation of the AVRISP mkII handling. + * usb_libusb.c: Add USB handling for short-frame delimited + AVRISP mkII USB protocol; add distinction of different + devices in usbdev_open(). + * jtagmkII.c: Tell usbdev_open() to search for the JTAG ICE mkII. + * usbdevs.h: (New file.) + * Makefile.am: Add usbdevs.h, as well as some other forgotten + files "make distcheck" complained about. + * avrdude.conf.in: Add more aliases for the AVRISP mkII. + * avrdude.1: Document how to use the AVRISP mkII. + * doc/avrdude.texi: (Ditto.) + +2006-01-12 Joerg Wunsch + + * avrdude.conf.in: Add EEPROM page instructions for the + ATmega169 so it will work for STK500v2. + +2005-12-16 Joerg Wunsch + + * avrdude.conf.in: Added support for ATtiny24/44/84. + +2005-12-05 Colin O'Flynn + + * avrdude.conf.in: Added m162 support for stk500v2 + +2005-12-01 Joerg Wunsch + + * avrdude.conf.in: fix the number of significant bits for + the efuse memory in ATmega48/88/168; the datasheet is a bit + off here as well. + +2005-11-29 Joerg Wunsch + + * avrdude.1: update for JTAG ICE mkI support. + * doc/avrdude.texi: (Ditto.) + +2005-11-29 Joerg Wunsch + + Submitted by Galen Seitz: + patch #4459: Fix for rpm package builds + * avrdude.spec.in: update the RPM spec file: + - Default to enable-doc=yes during configure. + - Move info file to docs package. + - Make building of docs package conditional. Basic + idea copied from avr-gcc. + +2005-11-29 Joerg Wunsch + + Submitted by someone who thinks he's called "Daper": + Fix bug #15013: Wrong use of PPICLAIM (kernel: ppdev0: claim the + port first) + * par.c: don't claim/release here (thus win_ppdev.h not needed + anymore) + * ppi.c: claim/release here. + * freebsd_ppi.h: ppi_claim/ppi_release now take an fd as parameter. + * solaris_ecpp.h: (Ditto.) + * linux_ppdev.h: (Ditto.) (Also add copyright.) + * win_ppdev.h: Not needed anymore, remove. + +2005-11-28 Joerg Wunsch + + * jtagmkI.c: Improve the communication startup with the ICE. + +2005-11-28 Joerg Wunsch + + * configure.ac: enable parport access on x86_64 Linux and + FreeBSD systems. + +2005-11-27 Joerg Wunsch + + * avrdude.conf.in: add the "calibration" space to ATmega16. + +2005-11-25 Colin O'Flynn + + Fixed bug 15051, building for Windows breaks. + * par.c: ppi_claim and ppi_release definitions now in a Windows header file + * ppi.c: Only included if you are building for Windows + * win_ppdev.h: Initial Commit, see par.c + +2005-11-24 Joerg Wunsch + + Add basic support for the Atmel JTAG ICE mkI: + * config_gram.y: add mkI support to config sytax. + * lexer.l: (Ditto.) + * avrdude.conf.in: add sample programmer entries. + * jtagmkI.c: New file + * jtagmkI.h: New file + * jtagmkI_private.h: New file + * Makefile.am: include new files in build. + +2005-11-24 Colin O'Flynn + + Fix bug 14681 - Serial Communication Fails on -vvvv with Windows + * ser_win32.c: Patched with Brian Dean's patch + +2005-11-05 Colin O'Flynn + + Patch #4532 by Manfred Bartz + * avrdude.conf.in: added support for ATMega168 (also added support + for the stk500v2 protocol which was not in the patch). + +2005-11-03 Joerg Wunsch + + Add ecpp(7D) (parallel port) for Solaris. + * configure.ac: add Solaris' default parallel port. + * linux_ppdev.h: change parallel port access to the new style. + * freebsd_ppi.h: New file, abstract FreeBSD's ppi(4). + * solaris_ecpp.h: New file, abstract Solaris' ecpp(7D). + * par.c: change header inclusion sequence. + * pgm.h: remove obsolete ppi_claim() and ppi_release() dummies. + * ppi.c: change header inclusion sequence, use new parport + abstraction, drop obsolete dummy implementation. + +2005-11-02 Joerg Wunsch + + * config.h: change YYSTYPE to be a single word, to work around + a bug in Solaris' yacc. + * lexer.l: remove incompatibilities with Solaris' default lex, + bump resource limits for lex. + +2005-11-01 Joerg Wunsch + + Make avrdude Solaris-compatible. + * Makefile.am: distclean avrdude.conf. + * avrdude.conf.in: make the parallel-port programmers optional. + * bitbang.c: move the bitbang features out into PROGRAMMER. + * configure.ac: introduce --enable-parport, add Solaris. + * lexer.l: replace str by strng to work around problems in some + versions of flex. + * main.c: move getexitspecs into the respective programmer's + domain; replace rindex by the C-standard strrchr. + * par.c: make parallel port optional. + * par.h: everything but par_initpgm() is private now. + * pgm.h: add setping/getping/highpulsepin/getexitspecs. + * serbb_posix.c: generalize bitbang interface; replace + cfmakeraw() by explicit code. + * serbb_win32.c: generalize bitbang interface. + +2005-10-20 Joerg Wunsch + + * butterfly.c: fix yet another sign extension bug. + +2005-10-14 Joerg Wunsch + + * avrdude.conf.in (ATmega8515): fix size of calibration + memory. + +2005-10-09 Joerg Wunsch + + * avrdude.conf.in: add support for ATmega640/1280/1281. + * avrdude.1: document the above. + * doc/avrdude.texi: (Ditto.) + +2005-09-27 Joerg Wunsch + + * doc/avrdude.texi: Polish up the docs a bit. Use smallexample + instead of example for wide tty output. Document a trick to + find out about the serial numbers of all JTAG ICEs attached + to USB. + +2005-09-26 Joerg Wunsch + + * jtagmkII.c (jtagmkII_paged_write): default the page size early so the + buffer will be allocated correctly. + * usb_libusb.c: fix libusb handling; now it works with libusb-win32 as + well. + +2005-09-21 Joerg Wunsch + + * main.c(do_op): use mem->desc in place of upd->memtype to + give the full name of the respective memory area, instead of + the (possibly abbreviated) name the user typed in the -U option. + +2005-09-21 Joerg Wunsch + + * main.c: Add the forgotten -B option to the option string in + getopt(); sort the -s option into order. + +2005/09/21 Brian S. Dean + + * avr.c: + * main.c: + * safemode.c: + * safemode.h: + * term.h: + This is Colin O'Flynn's mega patch for updating safemode support: + + * add support for parts with just 'fuse' memory + + * if any fuse memories are altered, reflect those changes in the + post-programming safemode check so that safemode no longer + complains about fuses which were intentionally altered; this + eliminates the need to completely disable safemode using -u in + order to program fuses. + + * provide -s option which will not ask to restore fuses, it will + just do it + +2005-09-19 Joerg Wunsch + + * butterfly.c (butterfly_initialize): make the device code unsigned so + it wouldn't sign-extend when >= 0x80. + +2005-09-18 Joerg Wunsch + + Add the serial bit-bang driver, contributed by Michael Holzt. + * bitbang.h: New file. + * bitbang.c: New file. + * serbb.h: New file. + * serbb_posix.c: New file. + * serbb_win32.c: New file. + * Makefile.am: Include new files. + * config_gram.y: Add serbb to configuration language. + * lexer.l: (Ditto.) + * par.c: Centralize bit-bang code in bitbang.c. + * par.h: Declare newly published functions. + * pgm.h (struct programmer_t): Add a flag field for private use + by the programmer. + * pindefs.h: Add definitions for negated serbb pins. + * avrdude.conf.in: Add serbb programmers ponyser, dasa, and dasa3. + * avrdude.1: Document serbb code. + * doc/avrdude.texi: (Ditto.) + +2005/09/18 Brian S. Dean + + * avrdude.conf.in: Patch #4078: add VCC pin definition for DAPA + programmer. + +2005/09/18 Brian S. Dean + + * avr910.c: This is patch #3277 which appears to fix a number of + issues with the avr910 programmer. + + Fixes the following problems with paged writes in avr910.c: + - failure to re-set address after page writes; + - no polling or delay after page writes; + - no page writes when not using auto-increment; + - an extraneous page write when data ends on page boundary. + +2005-09-17 Joerg Wunsch + + * avrdude.conf.in: Fix the poll values for the ATmega103's EEPROM + so they eventually match the XML file. + This fixes bug #7492: EEPROM writing fail on atmega103 with + atavrisp + +2005-09-17 Joerg Wunsch + + * avrdude.conf.in: The ATmega128 has four oscillator calibration + bytes, not only a single one. + This closes bug #11496: Memory bank calibration on atmega128 + should have 4 bytes + +2005/09/17 Brian S. Dean + + * avrdude.1: + Document -q -q. Expand a little on the description of the 'part' + command. + +2005/09/16 Brian S. Dean + + * fileio.c: + * main.c: + Implement -q -q to be very very quiet. + +2005/09/16 Brian S. Dean + + * avrdude.conf.in: + Add DAPA programmer. + +2005/09/16 Brian S. Dean + + * avrdude.conf.in: + * stk500v2.c: + This fixes EEPROM access using the STK500V2 programmer, partially + undoing part of a previous general fixup commit. Choose the correct + read/write operations with the stk500v2 program function - the correct + one depends on the memory type. EEPROM is byte addressable so uses + read/write. FLASH is word addressable and so uses read_lo/write_lo. + +2005-09-16 Joerg Wunsch + + * avrdude.1: document the memtypes for -U + * doc/avrdude.texi: (Ditto.) + Closes bug #13501: should be listed in the man page + +2005-09-16 Joerg Wunsch + + * doc/Makefile.am: add logic to detect the misf^H^H^H^H + gratitous API change in recent versions of texi2html where + the output directory has changed names. + Fix for: + bug #13026: The build fails with texi2html 1.76 + bug #12715: make issues during install + patch #3091: commandline fix for latest version of texi2html + +2005-09-16 Joerg Wunsch + + * usb_libusb.c (usbdev_drain): actually implement draining to aid + synchronizing against a JTAG ICE in weird state. + +2005-09-16 Joerg Wunsch + + * butterfly.c: improve the butterfly initialization so it is more likely + to synchonize; [bug #9787: avrdude 4.4.0 correct butterfly interface] + +2005-09-14 Joerg Wunsch + + * jtagmkII.c (jtagmkII_paged_load): return the number of bytes read. + This makes EEPROM block reads work again. + +2005-09-14 Joerg Wunsch + + * avrdude.conf.in: add a jtag2slow programmer alias, and make + "jtag2" default to 115200 Bd. + * doc/avrdude.texi: document the above changes. + +2005/09/14 Brian S. Dean + + * avrdude.conf.in: + Change bit 0 of the ATmega169 efuse 'write' opcode from 'x' (ignore) + to 'i' (input). Even though this bit should be ignored, it should not + be changed. The 'x' setting sets the bit to zero which programs it + and could cause undefined behaviour. Setting to 'i' enables it to be + rewritten to its old value. + + A better solution might be to read the fuse byte, apply the new value + while leaving the 'x' bit alone, then writing the value back. The + current fix is a workaround which allows the developer to change the + bit as desired. + +2005-08-30 Joerg Wunsch + + * usb_libusb.c: Consistently use unsigned char for buffers. + +2005-08-29 Brian S. Dean + + * avr910.c: Eliminate compiler warnings. GCC 4.x elicits many + signedness warnings when passing unsigned char * when char * is in + the prototype and vice versa. Clean these up along with a few + others. + * butterfly.c: (Ditto.) + * jtagmkII.c: (Ditto.) + * safemode.c: (Ditto.) + * safemode.h: (Ditto.) + * ser_posix.c: (Ditto.) + * serial.h: (Ditto.) + * stk500.c: (Ditto.) + * stk500v2.c: (Ditto.) + +2005-08-28 Joerg Wunsch + + * avrdude.conf.in: Add support for the ATtiny25/45/85. Note that + only the ATtiny45 appears to have a complete XML description right + now. + * avrdude.1: Mention all the recently added device support: AT90PWM2/3, + ATmega164/324/644, ATmega329x/649x, ATtiny25/45/85. + * doc/avrdude.texi: (Ditto.) + +2005/08/28 Brian S. Dean + + * avrdude.conf.in: + * stk500v2.c: + This is patch # 4338, obsoletes patch #4327, provides fixes for bugs + #13693, #13871, and #14212. + + This provides bug fixes to the STK500V2 programmer type. + + - incorrect token used from avrdude.conf.in + - wrong command sent to programmer, hence no write to eeprom. + - programmer was said to start writing at 0x0000 and continue + page by page and was not repositionned when a gap was found + in the hex file, or when the hex file start address was not + 0x0000. Hence the verify procedure was correct, not the + write procedure. + - speed up of flash write to skip empty pages (full of 0xFF) + by re-enabling a dedicated function for that task. + - stk500v2_paged_load() was not returning the number of byte + read, so empty hex files were generated when reading memory. + +2005-08-17 Joerg Wunsch + + * avrdude.conf.in: fix the EEPROM size for ATmega329x/649x. + +2005-08-16 Joerg Wunsch + + * avrdude.conf.in: Add support for the AT90PWM2/3. + +2005-07-27 Joerg Wunsch + + (This work has been done as part of a contract with Atmel, Dresden.) + * butterfly.c: Implement full support for AVR109 boot loaders. + * avrdude.conf.in: add avr109 and avr911 as alias for butterfly. + * avrdude.1: Document the AVR109 addition. + * doc/avrdude.texi: (Ditto.) + +2005-07-26 Brian S. Dean + + * main.c: + Don't call exit() directly here - set the exit value and jump to the + main_exit: label to ensure the programmer is released correctly. + + * stk500v2.c: + The stk500v2_getsync() function was improperly checking for success, + thus it was falsely reporting that it failed when it was actually + working correctly. Fixed. + +2005-07-25 Joerg Wunsch + + * usb_libusb.c: Catch benign errors when reading the serial #. + +2005-06-19 Joerg Wunsch + + * Makefile.am: Implement libusb-base USB transport for the + JTAG ICE mkII. + * configure.ac: ditto. + * jtagmkII.c: ditto. + * ser_posix.c: ditto. + * ser_win32.c: ditto. + * serial.h: ditto. + * usb_libusb.c: ditto (New file). + * avrdude.1: document the USB transport. + * doc/avrdude.texi: ditto. + +2005-06-15 Joerg Wunsch + + * avrdude.conf.in: The AT90CAN128 has AllowFullPageBitstream = no. + +2005-06-14 Joerg Wunsch + + * avrdude.conf.in: Add support for the ATmega164/324/644. + * jtagmkII.c: If enter_progmode fails with RSP_ILLEGAL_JTAG_ID, give + the user a hint that the JTAGEN fuse might be unset. + +2005-06-11 Joerg Wunsch + + * avrdude.conf.in: Add support for the ATmega329x/649x. + +2005-05-27 Joerg Wunsch + + * jtagmkII.c: fix a signedness bug when shifting bits; when + discarding a packet for being overly long, restart the state + machine instead of attempting to drop a preposterous amount + of data. + +2005-05-19 Joerg Wunsch + + * avrdude.1: + * doc/avrdude.texi: Document that the JTAG ICE mkII code currently + cannot write to flash one byte at a time. Also mention the bug + tracker interface on savannah. + +2005/05/14 Brian S. Dean + + * configure.ac: + * main.c: + Update version for beta release and copyright message. + Change the default port to 'serial' for the newly added serial + programmers stk500v2 and jtagmkii. + +2005-05-10 Joerg Wunsch + + * Makefile.am: + * avr910.c: + * avrdude.1: + * avrdude.conf.in: + * avrpart.c: + * avrpart.h: + * butterfly.c: + * config_gram.y: + * crc16.c: + * crc16.h: + * jtagmkII.c: + * jtagmkII.h: + * jtagmkII_private.h: + * lexer.l: + * main.c: + * pgm.h: + * serial.h: + * ser_posix.c: + * ser_win32.c: + * stk500.c: + * stk500v2.c: + * stk500v2.h: + * stk500v2_private.h: + * doc/avrdude.texi: + + Mega-commit to bring in both, the STK500v2 support from Erik + Walthinsen, as well as JTAG ICE mkII support (by me). + + Note that for the JTAG ICE, I did change a few things in the + internal API. Notably I made the serial receive timeout + configurable by the backends via an exported variable (done in + both the Posix and the Win32 implementation), and I made the + serial_recv() function return a -1 instead of bailing out with + exit(1) upon encountering a receive timeout (currently only done + in the Posix implementation). Both measures together allow me to + receive a datastreem from the ICE at 115 kbps on a somewhat lossy + PCI multi-UART card that occasionally drops a character. The JTAG + ICE mkII protocol has enough of safety layers to allow recovering + from these events, but the previous code wasn't prepared for any + kind of recovery. The Win32 change for this still has to be done. + +2005/02/11 Brian S. Dean + + * main.c: + Exit non-zero if safe-mode reverts fuse bits that were requested on + the command-line. + + Variable declarations must only appear at the beginning of a block. + +2005/02/10 Brian S. Dean + + * avrdude.1: + Document -u option to disable safe mode. + +2005/02/10 Brian S. Dean + + * configure.ac: + doc/Makefile is now dependent on whether or not doc is enabled. + +2005/02/10 Brian S. Dean + + * Makefile.am: + * configure.ac: + Disable the doc build by default; the tools needed to build + doc are either not available on all systems or are at best + inconvenient to build and install. The doc can still be built, one + just needs to specify --enable-doc at configure time. + +2005-01-24 Colin O'Flynn + + * main.c: Add "safe mode". Fuse settings will be restored at the end + of a programming session unless the -u switch is specified. + * safemode.c: New file. Safe mode support. + * safemode.h: New file. Safe mode support. + * Makefile.am: Add new files. + * doc/avrdude.texi: Document new Safe Mode feature and switch. + +2004/12/22 Brian S. Dean + + * avrdude.conf.in: + Add support for "Xilinx JTAG cable". Contributed by: + Tymm + + Add support for the AT90CAN128. Not sure if all the instruction + encoding is correct, specifically the address bits don't exactly match + those of the preliminary datasheet that I have, but I don't see how + they could be right. Tested with STK500 and it works there. + Instruction encodings have not been tested due to lack of a parallel + port on my Mac development box. + +2004-07-19 Theodore A. Roth + + * avrdude.1: Remove reference to ppi programmer schematic. + * configure.ac (AC_INIT): Set version to "4.4.0cvs". + +2004-07-18 Theodore A. Roth + + * AVRDUDE 4.4.0 has been released (cvs release tag is "release_4_4_0"). + +2004-07-18 Theodore A. Roth + + * Makefile.am (EXTRA_DIST): Remove avrdude.pdf since it is no longer + supplied. + * NEWS: Fix typo. + * bootstrap: Delete the autom4te.cache dir before running the + autotools. + * configure.ac (AC_INIT): Set version to 4.4.0. + +2004-07-17 Jan-Hinnerk Reichert + + * avrdude.1: Fixed obvious copy and paste error + (Patch #3199 contributed by Galen Seitz) + +2004-07-15 Theodore A. Roth + + * main.c (main): Don't indent CPP directives. + When showing update progress in a no tty situation, use unbuffered IO + for all systems, not just win32 native. + Update copyright year when printing version. + Remove warning about native win32 being experimental. + Split a line string. + * ppiwin.c: Update copyright year. + Add cvs Id keyword. + (usleep): Cleanup debug CPP directives to improve readability. + * ser_win32.c: Include to fix failing build. + +2004-07-08 Theodore A. Roth + + * AUTHORS: Add names of recent major contributors. + * ser_win32.c: Assign copyright to Martin J. Thomas since he did all + real work on this file. + +2004-07-07 Jan-Hinnerk Reichert + + * NEWS, doc/TODO: Updated NEWS and TODO + +2004-07-07 Jan-Hinnerk Reichert + + * stk500.c, term.c, doc/avrdude.texi, avrdude.1: + added "sck"-command to the terminal mode. + This command allows slowing down of the SCK of + STK500-programmers. + +2004-07-05 Jan-Hinnerk Reichert + + * *.c, *.h: Removed unnecessary includes of + config.h + +2004-07-04 Jan-Hinnerk Reichert + + * avr.h: Removed some unused prototypes + +2004-07-04 Jan-Hinnerk Reichert + + * stk500.c: Fixed fosc behaviour for values exceeding + maximum frequency (contributed by Galen Seitz) + +2004-07-04 Jan-Hinnerk Reichert + * avrdude.conf.in: Added support for + ATtiny2313 (contributed by Bob Paddock) + +2004-06-25 Joerg Wunsch + + * avrdude.conf.in: Fix efuse bits for ATmega169. + +2004-06-24 Alex Shepherd + + Merged in Win32 Native changes contributed by Martin Thomas + Changed all instances of __CYGWIN__ conditional compilation to + WIN32NATIVE + + * ser_win32.c: fleshed out all the previous stubs + * ser_posix.c: added WIN32NATIVE conditional compilation to skip + all function to allow ser_win32.c functions to operate + * ppi.h: removed commented code + * pgh.h: added usleep macros + * main.c: stdout,stderr tweaks for Win32 + * configure.ac: added CFLAGS and LDFLAGS for Win32Native + * config_gram.y: added strtok_r macro + * buterfly.c: added various stub functions and EXIT processing + * avr910.c: added return 0 to avr910_open() and included time headers + * term.c: added warning about libreadline not supported in WIN32NATIVE + +2004-06-17 Jan-Hinnerk Reichert + + * avrdude.conf.in: Added support for + - tiny13 (contributed by Pawel Moll) + - mega48 and mega88 (contributed by Galen Seitz) + However, the STK500-code for mega8 remains unchanged. + +2004-05-19 Brian S. Dean + + * main.c: + * stk500.c: Allow the baud rate to be specified on the command + line with a new -b switch. The specified baud rate will + override the default serial port baud rate for a particular + programmer. + +2004-05-19 Brian S. Dean + + * ppi.c: Stub-out the ppi_* functions in ppi.c with empty + wrappers that simply return an error code in order to build + successfully on MacOS X. This allows avrdude to work on MacOS + X and was tested using a USB<->RS232 cable adapter, + specifically Keyspan model USA-19HS. + +2004-04-23 Joerg Wunsch + + * lists.h, lists.c: Drop LISTSZ and the check for + it in lcreat(). + +2004-04-17 Jan-Hinnerk Reichert + + * avr910.c: Hopefully fixed that weird "first byte not + programmed"-error in a good way (previous fix was not + working with all firmwares) + +2004-02-10 Jan-Hinnerk Reichert + + * avrdude.1, doc/avrdude.texi, doc/TODO: + Removed the deprecated options from documentation + +2004-02-10 Jan-Hinnerk Reichert + + * main.c: Removed deprecated options. + +2004-01-28 Jan-Hinnerk Reichert + + * pgm.c, main.c, avr910.c, butterfly.c, stk500.c: + Changed default for powerup, powerdown and LED-commands + to do nothing and return OK. Then removed these commands + from avr910, butterfly and stk500. + * pgm.c: Fixed wrong type for default_open introduced by + the cleanup yesterday. + +2004-01-29 Jan-Hinnerk Reichert + + * par.c: changed order of port-read/writes in par_txrx(). + This change should increase immunity to delays in the + programmer-hardware. + Also did some unrelated cleanup in par_txrx(). + +2004-01-28 Jan-Hinnerk Reichert + + * pgm.[ch], main.c, par.c, avr910.c, butterfly.c, stk500.c: + Move save/restore-functionality into open/close. + * par.c: open/close now saves/restores PPICTRL, too. + * TODO: exitspecs don't work if RESET is in PPICTRL. + +2004-01-26 Theodore A. Roth + + * configure.ac (AC_INIT): Post release version update. + +2004-01-26 Theodore A. Roth + + * AVRDUDE 4.3.0 has been released (cvs release tag is "release_4_3_0"). + +2004-01-26 Theodore A. Roth + + * configure.ac: Update copyright year. + (AC_INIT): Set version to 4.3.0. + +2004-01-25 Theodore A. Roth + + * ChangeLog: Minor formatting cleanups. + Move to all 2003 entries to ChangeLog-2003. + * ChangeLog-2003: New file. + * Makefile.am: Update copyright year. + (EXTRA_DIST): Add ChangeLog-2003. + +2004-01-17 Jan-Hinnerk Reichert + + * doc/avrdude.texi: Get rid of those black boxes marking "overfull + hbox". + +2004-01-17 Jan-Hinnerk Reichert + + * doc/avrdude.texi: New appendix "Troubleshooting". + +2004-01-12 Jan-Hinnerk Reichert + + * avr910.c, avrpart.c, avrpart.h, doc/TODO: + Look up devicecode and report device. + +2004-01-03 Jan-Hinnerk Reichert + + * avr910.c, pgm.c, pgm.h, config_gram.y, lexer.l: Add new configuration + parameter baudrate to support avr910-programmers with non-standard + baudrates. + * avrdude.conf.in, doc/avrdude.texi: Added "baudrate" to documentation. + +2004-01-03 Jan-Hinnerk Reichert + + * avr910.c: Removed debugging stuff that is no longer needed. + +2004-01-03 Jan-Hinnerk Reichert + + * doc/TODO: Removed two items. + +2004-01-03 Jan-Hinnerk Reichert + + * main.c, avr.c, avr.h, par.c, stk500.c: Add function + avr_chip_erase() to unify handling of cycle-count. + Makes cycle-count work for avr910-programmers. + diff --git a/xs/src/avrdude/ChangeLog-2007 b/xs/src/avrdude/ChangeLog-2007 new file mode 100644 index 000000000..3514da7e0 --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2007 @@ -0,0 +1,364 @@ +2007-11-08 Joerg Wunsch + + * main.c: Partially revert the line buffered output change, + and turn stderr into unbuffered output while producing the + progress report. + +2007-11-07 Joerg Wunsch + + * main.c: Add setup and teardown hooks to the programmer + definition. If present, call the setup hook immediately after + finding the respective programmer object, and schedule the + teardown hook to be called upon exit. This allows the + programmer implementation to dynamically allocate private + programmer data. + * pgm.c: (Ditto.) + * pgm.h: (Ditto.) + * avr910.c: Convert static programmer data into dynamically + allocated data. + * butterfly.c: (Ditto.) + * jtagmkI.c: (Ditto.) + * jtagmkII.c: (Ditto.) + * stk500v2.c: (Ditto.) + * usbasp.c: (Ditto.) + * usbtiny.c: (Ditto.) + +2007-11-06 Joerg Wunsch + + * butterfly.c: Remove the no_show_func_info() calls, as Brian + promised some 4 years ago. + +2007-11-06 Joerg Wunsch + + * main.c: Add the -x option to pass extended parameters to + the programmer backend. + * pgm.c: (Ditto.) + * pgm.h: (Ditto.) + * jtagmkII.c: Implement the extended parameter jtagchain= + to support JTAG daisy-chains. + * avrdude.1: Document all of the above. + * doc/avrdude.texi: (Ditto.) + +2007-10-30 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version for post-release. + +2007-10-29 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version, releasing avrdude-5.5. + +2007-10-29 Joerg Wunsch + + Submitted by : + patch #5007: Patch for line-buffering of stdout and stderr + * main.c: call setvbuf() for stdout and stderr. + +2007-10-29 Joerg Wunsch + + Submitted by : + patch #5953: Add AT90CAN64 and AT90CAN32 to avrdude.conf + * avrdude.conf.in: Add entry for AT90CAN64 and AT90CAN32. + +2007-10-29 Joerg Wunsch + + Submitted by Wolfgang Moser: + patch #6121: ISP support for the C2N232I device (serial port + bitbanging) + * avrdude.conf.in: Add entry for c2n232i. + +2007-10-29 Joerg Wunsch + + Submitted by : + patch #6141: accept binary format immediate values + * fileio.c: Detect a 0b prefix, and call strtoul() differently + in that case. + +2007-10-29 Joerg Wunsch + + bug #21076: -vvvv serial receive prints are empty in Win32 build + * ser_win32.c (ser_recv): Drop the essentially unused variable + "len", and use the variable "read" in order to track how many + bytes have just been read in. + +2007-10-29 Joerg Wunsch + + bug #21145: atmega329p not recognized + * avrdude.conf.in: Add definitions for the ATmega329P/3290P. + Same as ATmega329/3290 except of the different signature. + +2007-10-29 Joerg Wunsch + + bug #21152: Unable to program atmega324p with avrdude 5.4 and AVRISP + using default configuration file. + * avrdude.conf.in: Uncomment the (bogus) stk500_devcode lines for + the ATmega164P, ATmega324P, ATmega644, and ATmega644P definitions. + This only affects users of STK500v1 firmware. + +2007-10-29 Joerg Wunsch + + Submitted by : + Patch #6233: Add support for USBtinyISP programmer + * usbtiny.c: New file. + * usbtiny.h: (Ditto.) + * Makefile.am: Include usbtiny into the build. + * avrdude.conf.in: (Ditto.) + * config_gram.y: (Ditto.) + * lexer.l: (Ditto.) + * avrdude.1: Document the usbtiny support. + * doc/avrdude.texi: (Ditto.) + +2007-10-29 Joerg Wunsch + + * doc/avrdude.texi: Sort list of supported programmers into + alphabetical order, add all missing programmers. + +2007-07-24 Thomas Fischl + + * usbasp.c: Added long addresses to support devices with more + than 64kB flash. Closes bug #20558: Long address problem with + USBasp. + +2007-06-27 Joerg Wunsch + + * Makefile.am (EXTRA_DIST): Add ChangeLog-2004-2006. + +2007-05-16 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version for post-release. + +2007-05-16 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version, releasing avrdude-5.4. + +2007-05-16 Joerg Wunsch + + * avrdude.conf.in: Fix AVR910 devcodes. It seems that the AVR109 + listing refers to "BOOT"-type code, while the standard codes are + different (usually one below). + +2007-05-16 Joerg Wunsch + + * avr.c (avr_read, avr_write): only use the paged_load and + paged_write backend functions iff the memory area in question has + a page_size != 0. + This is supposed to fix bug #19234: avrdude-5.3.1 segfaults when + stk500v1 tries to program an ATtiny15 + +2007-05-15 Joerg Wunsch + + * avr910.c: Fall back to avr_{read,write}_byte_default(). Fixes + bug #18803: Fuse reading regression in avrdude 5.3.1 with avr910 + programmer + +2007-05-15 Colin O'Flynn + + * avrdude.conf.in: Rename the ATmega164 and ATmega324 into + ATmega164P and ATmega324P, resp. Add an entry for the ATmega644P. + Fixes bug #19769: ATmega164p not recognized + +2007-05-15 Joerg Wunsch + + * ser_posix.c (ser_send): Don't select() on the output fd before + trying to write something to the serial line. That kind of + polling isn't very useful anyway, and it seems it breaks for the + Linux CP210x USB<->RS-232 bridge driver which is certainly a bug + in the driver, but we can just avoid that bug alltogether. + +2007-05-15 Joerg Wunsch + + * avrdude.conf.in: Fix the STK500v2 ISP delay parameter for + ATmega640/1280/1281/2560/2561. Atmel has changed the XML + files after the initial release. + +2007-05-01 Colin O'Flynn + + * safemode.c: -Oops - bug in verbose output. Fixed. + -Fixed handling of cases where programmer cannot read fuses (AVR910) + * main.c: -Also fixing handling of cases where programmer cannot + read fuses + This should close one or more bugs (18803, 19570) + +2007-05-01 Colin O'Flynn + + * safemode.c: Added verbose output from safemode routines. + +2007-03-25 Colin O'Flynn + + * stk500generic.c: Forgot to close the serial port before trying to + open it again, caused problems on Windows machines. + Closes bug #19411 + +2007-02-26 Joerg Wunsch + + * avrdude.conf.in: Add the AT90PWM2/3B devices. + +2007-02-02 Thomas Fischl + + * usbasp.c: Changed return value of function usbasp_initialize to stop + avrdude on communication errors between programmer and target. + Closes bug #18581: safemode destroys fuse bits + +2007-02-01 Joerg Wunsch + + * config_gram.y: Remove duplicate definition of token K_WRITEPAGE + +2007-01-30 Joerg Wunsch + + * butterfly.c: Implement ATmega256x support for butterfly/avr109. + +2007-01-30 Joerg Wunsch + + * configure.ac: Fix subdir handling. Now finally, "make + distcheck" will include the documentation into the tarball even if + the configure had been run without the --enable-doc. + +2007-01-30 Joerg Wunsch + + * safemode.c: Obtain progname from avrdude.h rather than trying to + roll our own (duplicate) copy of it. + * avr910.c: Constify char pointers. + * avrpart.c: (Ditto.) + * avrpart.h: (Ditto.) + * butterfly.c: (Ditto.) + * config.c: (Ditto.) + * config.h: (Ditto.) + * jtagmkI.c: (Ditto.) + * jtagmkII.c: (Ditto.) + * par.c: (Ditto.) + * pgm.c: (Ditto.) + * pgm.h: (Ditto.) + * serbb_posix.c: (Ditto.) + * serbb_win32.c: (Ditto.) + * stk500.c: (Ditto.) + * stk500v2.c: (Ditto.) + * usbasp.c: (Ditto.) + +2007-01-29 Joerg Wunsch + + * avrpart.c: More backend/library abstraction and generalization: + turn the list_parts() and list_programmers() functions into + general list iteration functions that call a caller-supplied + callback for each element. Implement list_parts() and + list_programmers() as private functions in main.c based on that + approach. + * avrpart.h: (Ditto.) + * main.c: (Ditto.) + * pgm.c: (Ditto.) + * pgm.h: (Ditto.) + +2007-01-25 Joerg Wunsch + + * Makefile.am: Rearrange everything so it is now built into a + libavrdude.a library, and link main.c against that library. + * configure.ac: Add AC_PROG_RANLIB as we are building a library + now. + +2007-01-24 Joerg Wunsch + + Major code cleanup. + - Make all internal functions "static". + - Make sure each module's header and implementation file match. + - Remove all library-like functionality from main.c, so only + the actual frontend remains in main.c. + - Add C++ brackets to all header files. + * avr.c: (Ditto.) + * avr.h: (Ditto.) + * avr910.c: (Ditto.) + * avr910.h: (Ditto.) + * avrdude.h: (Ditto.) + * avrpart.c: (Ditto.) + * avrpart.h: (Ditto.) + * bitbang.h: (Ditto.) + * butterfly.h: (Ditto.) + * config.c: (Ditto.) + * config.h: (Ditto.) + * confwin.h: (Ditto.) + * crc16.c: (Ditto.) + * crc16.h: (Ditto.) + * fileio.c: (Ditto.) + * fileio.h: (Ditto.) + * jtagmkI.h: (Ditto.) + * jtagmkII.h: (Ditto.) + * lexer.l: (Ditto.) + * lists.h: (Ditto.) + * main.c: (Ditto.) + * par.h: (Ditto.) + * pgm.c: (Ditto.) + * pgm.h: (Ditto.) + * ppi.c: (Ditto.) + * ppi.h: (Ditto.) + * safemode.h: (Ditto.) + * serbb.h: (Ditto.) + * serial.h: (Ditto.) + * stk500.h: (Ditto.) + * stk500v2.c: (Ditto.) + * stk500v2.h: (Ditto.) + * term.c: (Ditto.) + * term.h: (Ditto.) + * usbasp.h: (Ditto.) + * update.c: New file. + * update.h: New file. + * Makefile.am: Include update.c and update.h. + +2007-01-24 Joerg Wunsch + + Move all "extern" declarations into a centreal header file. + * Makefile.am: Add new avrdude.h. + * avrdude.h: New file. + * avr.c: Replace private extern decl's by #include "avrdude.h". + * avr910.c: (Ditto.) + * avrpart.c: (Ditto.) + * bitbang.c: (Ditto.) + * butterfly.c: (Ditto.) + * config.c: (Ditto.) + * config_gram.y: (Ditto.) + * fileio.c: (Ditto.) + * jtagmkI.c: (Ditto.) + * jtagmkII.c: (Ditto.) + * lexer.l: (Ditto.) + * main.c: (Ditto.) + * par.c: (Ditto.) + * pgm.c: (Ditto.) + * ppi.c: (Ditto.) + * ppiwin.c: (Ditto.) + * ser_avrdoper.c: (Ditto.) + * ser_posix.c: (Ditto.) + * ser_win32.c: (Ditto.) + * serbb_posix.c: (Ditto.) + * serbb_win32.c: (Ditto.) + * stk500.c: (Ditto.) + * stk500generic.c: (Ditto.) + * stk500v2.c: (Ditto.) + * term.c: (Ditto.) + * usb_libusb.c: (Ditto.) + * usbasp.c: (Ditto.) + +2007-01-13 Joerg Wunsch + + * avrdude.conf.in (ATmega8): Bump the delay values for flash + and EEPROM, based on the current Atmel XML file. + +2007-01-12 Joerg Wunsch + + * configure.ac: Improve the detection of the Win32 HID library, + and the presence of the header ddk/hidsdi.h. It now works + correctly under Cygwin and several flavours of MinGW. + * Makefile.am: Add new LIBHID pattern. + +2007-01-11 Joerg Wunsch + + * butterfly.c (butterfly_initialize): when sending the 'T' + command (which is ignored by current AVR109 bootloaders), + send the first reply from the list of supported device + codes back rather than using avrdude.conf's idea about + an AVR910 device code. Apparently, this solves disagreements + between different versions of at least the ATmega8 AVR910 + device code. + Closes bug #18727: Writing flash failed + +2007-01-07 Joerg Wunsch + + Reported by Till Harbaum: + * avrdude.conf.in (ATtiny25/45/85): Change HVSP reset from + 500 microseconds to 1 ms, matching the most recent Atmel XML + specs. diff --git a/xs/src/avrdude/ChangeLog-2008 b/xs/src/avrdude/ChangeLog-2008 new file mode 100644 index 000000000..f43a10abb --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2008 @@ -0,0 +1,185 @@ +2008-11-20 Joerg Wunsch + + * avrdude.h: Change the prototype for usleep() to be more Cygwin- + friendly. + * ppiwin.c: (Ditto.) + +2008-11-06 Joerg Wunsch + + Submitted by limor + * usbtiny.c (usbtiny_cmd): Replace sizeof() by a fixed constant + 4 for the result array, because otherwise it would take the size + of a pointer which miserably fails on 64-bit machines. + +2008-11-05 Joerg Wunsch + + patch #6609: Using PCI parallel port cards on Windows + * ppiwin.c (ppi_open): If the port parameter passed from the + -p option is neither lpt1/2/3, try interpreting it directly as + a base address. + * avrdude.1: Document the change. + * doc/avrdude.texi: (Ditto.) + +2008-11-04 Joerg Wunsch + + bug #22882: Erase Cycle Counter does not work for stk500v2 + * stk500v2.c (stk500v2_chip_erase,stk500hv_chip_erase): Return + the expected 0 for success rather than a protocol-dependant + number. + +2008-11-04 Joerg Wunsch + + bug #22883: Chip Erase performed even with no-write flag (-n) + * main.c: Do not erase the chip if both, -e and -n options have + been specified. + +2008-11-04 Joerg Wunsch + + bug #24589: AT90USB64* have wrong signature + * avrdude.conf.in: Uncomment the correct, and delete the wrong + signature for AT90USB646/647. Alas, the datasheet has never been + corrected for years. + +2008-10-31 Joerg Wunsch + + * jtagmkII.c: Fix a serious memory corruption that happened when + using the JTAG ICE mkII (or AVR Dragon) in ISP mode. The wrong + set of per-programmer private data had been allocated (stk500v2 + vs. jtagmkII) which was too small to hold the actual data. + * jtagmkII.h: (Ditto.) + * stk500v2.c: (Ditto.) + +2008-07-29 Joerg Wunsch + + * jtagmkII.c: Implement Xmega JTAG support. + * jtagmkII_private.h: Add EMULATOR_MODE_JTAG_XMEGA. + +2008-07-29 Joerg Wunsch + + * main.c: Remember whether the device initialization worked, and + allow to continue with -F if it failed yet do not attempt to + perform anything on the device itself. That way, -tF could be + specified for programmers like the STK500/STK600 even without a + device connected, just in order to allow changing parameters on + the programmer itself. + * avrdude.1: Document that possible use of the -F option. + * doc/avrdude.texi: (Ditto.) + +2008-07-29 Joerg Wunsch + + * stk500v2.c (stk600_xprog_paged_write): Fix a fatal miscalculation + of the number of bytes to be written which caused a malloc chunk + corruption. + +2008-07-27 Joerg Wunsch + + First implementation of ATxmega support. By now, only the + PDI mode of the STK600 is supported. Single-byte EEPROM + (and flash) updates do not work yet. + * avr.c: "boot" memory is a candidate memory region for paged + operations, besides "flash" and "eeprom". + * avrdude.conf.in: add ATxmega128A1 and ATxmega128A1revD + * avrpart.h: add the AVRPART_HAS_PDI flag (used to distinguish + ATxmega parts from classic AVRs), the nvm_base part field, and + the offset field for a memory region. + * config_gram.y: add "has_pdi", "nvm_base", and "offset" + * lexer.l: (Ditto.) + * main.c: disable auto_erase for ATxmega parts + * stk500v2.c: implement the XPROG functionality, and divert to + this for ATxmega parts + * avrdude.1: Document the changes. + * doc/avrdude.texi: (Ditto.) + +2008-07-25 Joerg Wunsch + + Fix a bunch of warnings. + * avr910.c (avr910_paged_load): possible unitialized use of + rd_size + * jtagmkI.c (jtagmkI_initialize): pointer signedness mixup + * jtagmkII.c (jtagmkII_print_parms1): propagate const'ness + of parameter + * usbasp.c (usbasp_transmit): pointer signedness mixup + * ser_avrdoper.c (usbGetReport): remove useless pointer deref + +2008-07-25 Joerg Wunsch + + Contributed by Ville Voipio: + patch #6501: New autotools support for avrdude + * Makefile.am: add @WINDOWS_DIRS@ to SUBDIR + * bootstrap: allow for autconf-2.61 and automake-1.10, too + * configure.ac: fix @WINDOWS_DIRS@ recursion, replace + AC_PROG_CC by AM_PROG_CC_C_O, for esoteric reasons + +2008-06-13 Joerg Wunsch + + Contributed by Janos Sallai : + patch #6074: added support for crossbow's MIB510 programmer + * avrdude.conf.in: Add entry for mib510. + * stk500.c: Add special hooks to handle the MIB510 programmer. + It mostly talks STK500v1 protocol but has a special hello and + goodbye sequence, and uses a fixed block size of 256 bytes. + * doc/avrdude.texi: Document support for mib510. + +2008-06-07 Joerg Wunsch + + Contributed by Klaus Leidinger : + * main.c: Realign verbose messages. + * avrpart.c: (Ditto.) + * avr910.c: Print the device code selected in verbose mode. + * butterfly.c: (Ditto.) + +2008-06-07 Joerg Wunsch + + Contributed by Klaus Leidinger : + Add check for buffermode feature, and use it if present. Can be + turned off using -x no_blockmode. + * avr910.c: Implement buffermode test and usage. + * avrdude.1: Document -x no_blockmode. + * doc/avrdude.texi: (Ditto.) + +2008-03-24 Joerg Wunsch + + * usb_libusb.c: #undef interface for Win32 + +2008-03-24 Joerg Wunsch + + * avr910.c: Add support for the -x devcode option. + * avrdude.1: Document -x devcode for avr910. + * doc/avrdude.texi: (Ditto.) + +2008-03-14 Joerg Wunsch + + Add initial support for the Atmel STK600, for + "classic" AVRs (AT90, ATtiny, ATmega) in both, + ISP and high-voltage programming modes. + * Makefile.am: Add -lm. + * avrdude.conf.in: Add stk600, stk600pp, and stk600hvsp. + * config_gram.y: Add support for the stk600* keywords. + * lexer.l: (Ditto.) + * pgm.h: Add the "chan" parameter to set_varef(). + * stk500.c: (Ditto.) + * serial.h: Add USB endpoint support to struct filedescriptor. + * stk500v2.c: Implement the meat of the STK600 support. + * stk500v2.h: Add new prototypes for stk600*() programmers. + * stk500v2_private.h: Add new constants used in the STK600. + * term.c: Add AREF channel support. + * usb_libusb.c: Automatically determine the correct write + endpoint ID, the STK600 uses 0x83 while all other tools use + 0x82. Propagate the EP to use through struct filedescriptor. + * usbdevs.h: Add the STK600 USB product ID. + * tools/get-stk600-cards.xsl: XSL transformation for + targetboards.xml to obtain the list of socket and routing + card IDs, to be used in stk500v2.c (for displaying the + names). + * tools/get-stk600-devices.xsl: XSL transformation for + targetboards.xml to obtain the table of socket/routing cards + and their respective AVR device support for doc/avrdude.texi. + * avrdude.1: Document all the STK600 stuff. + * doc/avrdude.texi: Ditto. Added a new chapter for + Programmer Specific Information. + +2008-01-26 Joerg Wunsch + + * stk500v2.c (stk500v2_recv): Make length computation unsigned so + it cannot accidentally become negative. + diff --git a/xs/src/avrdude/ChangeLog-2009 b/xs/src/avrdude/ChangeLog-2009 new file mode 100644 index 000000000..1f993cbcf --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2009 @@ -0,0 +1,411 @@ +2009-11-09 David Hoerl + + * fileio.c: ihex2bin did not properly handle files > 64K bytes + * usb_libusb.c: re-enabled usb_reset for Macs (no reset causes lots of failures) + * avrdude.1: spacing issue for avr32 fixed. + +2009-11-09 Michal Ludvig + + * buspirate.c: Implemented reset= and speed= extended parameters. + * avrdude.1: Document the change. + +2009-11-04 Michal Ludvig + + * configure.ac, Makefile.am: Test if GCC accepts -Wno-pointer-sign + +2009-11-04 Michal Ludvig + + * buspirate.c: Implemented 'BinMode' support for + firmware 2.7 and higher. + * avrdude.1: Added info about BusPirate. + +2009-11-03 Michal Ludvig + + * arduino.c: Add on to bug #26703 / patch #6866 - clear DTR/RTS + when closing the port. + * Makefile.am: Silent warnings about signedness - they're useless + and annoying, especially for 'char' vars. + +2009-10-22 David Hoerl + + * usb_libusb.c: disabled usb_reset for Macs (same as FreeBSD) + +2009-10-12 Michal Ludvig + + * main.c: Re-added default to serial port for BusPirate. + +2009-10-12 David Hoerl + + * main.c: removed some avr32 code that was pushed into jtagmkII.c + * jtagmkII.c: consolodated the avr32 reset code and avr32_chipreset + * avrpart.h: modified AVRPART flags for avr32 + * lexer.l: added is_avr32 flag - only way to get yacc code to set flag + * avrdude.conf.in: updated avr32 section to include "is_avr32" flag + +2009-10-12 David Hoerl + + * config_gram.y: Restored inadvertantly removed buspirate entry + * lexer.l: Restored inadvertantly removed buspirate entry + +2009-10-12 Michal Ludvig + + * buspirate.c: Replace GNU-only %as with %s in sscanf call. + * ser_win32.c(ser_set_dtr_rts): Fixed typo in parameter name. + * NEWS: Announce BusPirate. + +2009-10-11 David Hoerl + + Support for AVR32 + + * AUTHORS: added myself + * NEWS: announced AVR32 support + * main.c: AVR32 flag tests to avoid several code blocks + * fileio.c: mods to ihex read function to handle address offsets and + size of avr32 + * jtagmkI.c: added cast to printf call to remove warning + * arduino.c: added header file to bring in prototype for usleep() + * config_gram.y: added defines for avr32, new jtag_mkii variant for avr32 + * jtagmkII_private.h: new jtag_mkii message types defined (used by + avr32program) + * jtagmkII.h: extern jtagmkII_avr32_initpgm() addition + * jtagmkII.c: huge amount of code in support of avr32 + * avrpart.h: additional flags to AVRPART for avr32 + * usb_libusb.c: modified verbose test for USB read per-byte messages by + by one, so with verbose=3 you get just full messages, 4 gives you bytes + too + * lexer.l: additions for avr32 + +2009-10-10 Michal Ludvig + + Support for Arduino auto-reset: + * serial.h, ser_avrdoper.c, ser_posix.c, ser_win32.c: Added + serial_device.set_dtr_rts implementations. + * arduino.c, stk500.c, stk500.h: Call serial_set_dtr_rts() + to reset Arduino board before program upload. + Inspired by patch #6866, resolves bug #26703 + +2009-10-08 Michal Ludvig + + * buspirate.c: Optimised buspirate_cmd() - reading 1kB EEPROM now + takes only 14 sec instead of almost 2 mins with the original + implementation. + +2009-10-08 Michal Ludvig + + * buspirate.c, buspirate.h: Support for the BusPirate programmer + * config_gram.y, avrdude.conf.in, main.c, lexer.l, Makefile.am: + Glue for BusPirate. + +2009-08-17 Joerg Wunsch + + * usb_libusb.c (usbdev_close): Repair the logic around the + conditional compilation of usb_reset() introduced in r798. + +2009-07-11 Joerg Wunsch + + * configure.ac: We are post-5.8 now. + +2009-07-11 Joerg Wunsch + + * configure.ac: Prepare for releasing version 5.8 + +2009-07-11 Joerg Wunsch + + Submitted by Roger Wolff: + bug #26527: bug in unicode conversion + * ser_avrdoper.c (convertUniToAscii): when encountering a UTF-16 + character that cannot be converted to ASCII, increment the UTF-16 + pointer anyway when proceeding. + +2009-07-11 Joerg Wunsch + + * jtagmkI.c (jtagmkI_send): Replace %zd format by %u since not all + implementations do understand the C99 formatting options (sigh). + * jtagmkII.c (jtagmkII_send): (Ditto.) + * stk500v2.c (stk500v2_recv): (Ditto.) + +2009-07-11 Joerg Wunsch + + bug #26002: HVPP of EEPROM with AVR Dragon and ATmega8 Fails + * avrdude.conf.in (ATmega8): add page size for EEPROM. + +2009-07-07 Joerg Wunsch + + * stk500v2.c: Fix a serious memory corruption problem resulting + out of the chaining of both, the stk500v2 and the jtagmkII + programmers for some programming hardware (JTAG ICE mkII and AVR + Dragon running in ISP, HVSP or PP mode), where both programmers + have to maintain their private programmer data. + +2009-07-02 Joerg Wunsch + + * configure.ac: Post-release (is pre-release...) + +2009-07-02 Joerg Wunsch + + * configure.ac: Prepare for releasing version 5.7 + +2009-07-02 Joerg Wunsch + + * main.c: Add my name to the copyright output when being verbose. + +2009-07-02 Joerg Wunsch + + Contributed by Shaun Jackman + bug #21798: Fix both XSLT scripts + * tools/get-dw-params.xsl (format-hex): Add the parameter count. + * tools/get-hv-params.xsl (format_cstack): Ditto. + +2009-07-02 Joerg Wunsch + + bug #21922: ATmega163 still not working in version 5.5 + * avrdude.conf.in (atmega163): fill in stk500v2 parameters, correct + some flash programming parameters as well. + +2009-07-02 Joerg Wunsch + + bug #22206: avrdude: ser_setspeed(): tcsetattr() failed + * ser_posix.c (ser_setspeed): Don't pass TCSAFLUSH to tcsetattr() as + it apparently fails to work on Solaris. After reading the + documentation again, it seems TCSAFLUSH and TCSANOW are indeed + mutually exclusive. + +2009-07-02 Joerg Wunsch + + bug #22234: WINDOWS version: HOWTO: Specify Serial Ports Larger than COM9 + * ser_win32.c (ser_open): prepend \\.\ to any COM port name, so it is + safe to be used for COM ports above 9. + +2009-07-02 Joerg Wunsch + + bug #26408: Crash in stk500v2_open() + * stk500generic.c: Implement setup and teardown hooks, calling in turn + the respective hooks of the stk500v2 implementation. + +2009-07-02 Joerg Wunsch + + bug #26130: Avrdude doesn't display it's version. + * main.c (usage): add a version number display to the default usage + message. + +2009-07-01 Joerg Wunsch + + bug #26412: avrdude segfaults when called with a programmer that does not + support it + * main.c: do not call pgm->perform_osccal() unless it is != 0. + +2009-06-24 Joerg Wunsch + + Contributed by Zoltan Laday: + patch #6825: xmega problems with JTAGICEmkII + * jtagmkII.c: Many fixes for Xmega devices. + * jtagmkII_private.h: Add various new constants required for + Xmega devices. + * avrdude.conf.in: New devices: ATXMEGA64A1, ATXMEGA192A1, + ATXMEGA256A1, ATXMEGA64A3, ATXMEGA128A3, ATXMEGA192A3, + ATXMEGA256A3, ATXMEGA256A3B, ATXMEGA16A4, ATXMEGA32A4, + ATXMEGA64A4, ATXMEGA128A4 + * avr.c (avr_read, avr_write): Add more names for (Xmega) + memory areas that require paged operation. + +2009-06-24 Joerg Wunsch + + * stk500v2.c (stk600_xprog_write_byte): Handle writing fuse bytes. + +2009-04-28 Joerg Wunsch + + Submitted by Carl Hamilton: + * update.c (parse_op): correctly \0-terminate buf after filling + it, before it is potentially used as the source of a call to + strlen or strcpy. + +2009-04-14 Joerg Wunsch + + * doc/avrdude.texi: Merge the -P 0xXXX option description from + avrdude.1. + +2009-04-14 Joerg Wunsch + + * configure.ac: declare AM_PROG_CC_C_O to avoid the warning + "compiling `config_gram.c' with per-target flags + requires `AM_PROG_CC_C_O' in `configure.ac'" + +2009-03-22 Joerg Wunsch + + bug #25971: "error writing to " with multiple -U params. + * fileio.c: Do not close the input/output stream when working on an + stdio stream. + +2009-02-28 Thomas Fischl + + Based on patch #6484 commited by Jurgis Brigmanis: + * usbasp.c: added software control for ISP speed + * usbasp.h: (Ditto.) + +2009-02-28 Joerg Wunsch + + * avr910.c (avr910_read_byte_flash): Eliminate a static variable that + hasn't been in use for 5 years. + +2009-02-27 Joerg Wunsch + + * configure.ac: Post-release 5.6. + +2009-02-27 Joerg Wunsch + + * configure.ac: Prepare for releasing version 5.6. + +2009-02-27 Joerg Wunsch + + Submitted by Ed Okerson: + * jtagmkII.c (jtagmkII_read_byte): Fix signature reading of + Xmega. + +2009-02-26 Joerg Wunsch + + Submitted by Mikael Hermansson: + * avrdude.conf.in (ATxmega256A3): new device. + * stk500v2 (stk500v2_initialize): Enable the AVRISPmkII as a + PDI-capable device for ATxmega parts. + +2009-02-25 Joerg Wunsch + + Submitted by Lars Immisch: + patch #6750: Arduino support - new programmer-id + * arduino.c: New file, inherits stk500.c. + * arduino.h: New file. + * Makefile.am: Add arduino.c and arduino.h. + * config_gram.y: Add arduino keyword. + * lexer.l: (Ditto.) + * avrdude.conf.in: (Ditto.) + * avrdude.1: Document the new programmer type. + * doc/avrdude.texi: (Ditto.) + +2009-02-25 Joerg Wunsch + + * stk500v2.c: Turn all non-const static data into instance data. + +2009-02-25 Joerg Wunsch + + * Makefile.am: Move term.[ch] from the library into the CLI + application section, as it is not useful for anything else but + the CLI frontend. + +2009-02-25 Joerg Wunsch + + * avrdude.conf.in (ATmega1284P): new device. + +2009-02-23 Joerg Wunsch + + More fixes for Solaris, including fixes for the Sunpro compiler: + * avr.h: Remove stray semicolon. + * configure.ac: Add check for predefined types uint_t and ulong_t. + * confwin.c: Include "avrdude.h" on top to avoid empty translation + unit warning. + * ppwin.c: (Ditto.) + * ser_win32.c: (Ditto.) + * serbb_win32.c: (Ditto.) + * jtagmkII.c (jtagmkII_recv): remove unreachable "return". + * stk500.c (stk500_initialize): (Ditto.) + * par.c: Test for both, __sun__ and __sun to see whether we are + being compiled on Solaris. + * ppi.c: (Ditto.) + * stk500v2.c: Implement the DEBUG and DEBUGRECV macros in a way + that is compatible with the ISO C99 standard. + * usbtiny.c: Only typedef uint_t and ulong_t if they have not + been found already by the autoconf checks. + +2009-02-23 Joerg Wunsch + + bug #22204: Solaris10/11 Undefiniertes Symbol gethostbyname socket + connect + * configure.ac: Add checks for gethostent() and socket(). + While being here, remove some old cruft left from ancient days. + +2009-02-22 Joerg Wunsch + + * lexer.l: Bump the %p size so AT&T lex will continue to work. + +2009-02-19 Joerg Wunsch + + (Partially) submitted by John Voltz: + bug #20004: AVRDUDE update (-U) operations do not close files + * fileio.c (fmt_autodetect, fileio): fclose() files. + +2009-02-18 Joerg Wunsch + + * usbtiny.c: Replace all but one (very unlikely to trigger) exit(1) + by return -1. + +2009-02-18 Joerg Wunsch + + Submitted by Dick Streefland: + patch #6749: make reading from the USBtinyISP programmer more robust + * usbtiny.c: Add code to retry failed communication attempts. + +2009-02-17 Joerg Wunsch + + Submitted by Nick Hibma: + bug #22271: usb_reset in usb_libusb.c not necessary in FreeBSD 6.x + * usb_libusb.c (usbdev_close): Do not call usb_reset() on FreeBSD. + It is not necessary there. + +2009-02-17 Joerg Wunsch + + Submitted by Andrew O. Shadoura: + bug #25156: add direct SPI transfer mode + * bitbang.c: Implement direct SPI transfers. + * bitbang.h: (Ditto.) + * par.c: (Ditto.) + * pgm.c: (Ditto.) + * pgm.h: (Ditto.) + * term.c: Add the "spi" and "pgm" commands. + * avrdude.1: Document the changes. + * doc/avrdude.texi: (Ditto.) + +2009-02-17 Joerg Wunsch + + Submitted by Limor ("Lady Ada"): + bug #24749: add support for '328p + * avrdude.conf.in (ATmega328P): new device support. + +2009-02-17 Joerg Wunsch + + Submitted by "Womo": + bug #25241: AT90USB162, AT90USB82 device support patch for avrdude-5.5 + (also: bug #21745: AT90USBxx2 support) + * avrdude.conf.in (AT90USB162, AT90USB82): new device support. + +2009-02-17 Joerg Wunsch + + Submitted by Evangelos Arkalis: + patch #6069: Atmel AT89ISP Cable + * avrdude.conf.in (89isp): new programmer support. + +2009-02-16 Joerg Wunsch + + Submitted by Bob Paddock: + patch #6748: ATTiny88 Config + * avrdude.conf.in (ATtiny88): new device support. + +2009-02-16 Joerg Wunsch + + Submitted by Mark Litwack: + patch #6261: avrdude won't use dragon/debugwire to write a file + to eeprom + * jtagmkII.c (jtagmkII_paged_write): when in debugWire mode, + implement a paged write to EEPROM as a series of byte writes. + +2009-02-16 Joerg Wunsch + + Submitted by Janos Sallai: + patch #6542: paged_load fails on the MIB510 programming board + * stk500.c: Add a workaround for the different signon sequence on + MIB510 programmers. + +2009-02-05 Joerg Wunsch + + * avrdude.conf.in: Add the ATmega128RFA1. + * avrdude.1: document the addition of ATmega128RFA1. + * doc/avrdude.texi: (Ditto.) + diff --git a/xs/src/avrdude/ChangeLog-2010 b/xs/src/avrdude/ChangeLog-2010 new file mode 100644 index 000000000..45effefa4 --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2010 @@ -0,0 +1,354 @@ +2010-12-17 Joerg Wunsch + + * avrdude.conf.in (ATmega128RFA1): Bump two timing values in order to + improve ISP programming stability, in particular with the STK600. + +2010-12-14 Joerg Wunsch + + * stk500v2.c (stk500v2_command): Detect warning status codes. + +2010-10-22 Nils Springob + + * serial.h: serial_open() calls will now return -1 on error (no call to exit()) + * buspirate.c: (Dito.) + * jtagmkII.c: (Dito.) + * butterfly.c: (Dito.) + * jtagmkI.c: (Dito.) + * arduino.c: (Dito.) + * avr910.c: (Dito.) + * stk500.c: (Dito.) + * ser_avrdoper.c: (Dito.) + * stk500v2.c: (Dito.) + * ser_posix.c: (Dito.) + * usb_libusb.c: (Dito.) + +2010-07-27 Joerg Wunsch + + bug #30566: MinGW + Ubuntu 9.04 + * stk500v2.c (stk500v2_open): use same condition to refer to the AVR + Doper support as used in the definition in ser_avrdoper.c. + (Thanks to Christian Starkjohann for the analysis of the problem.) + +2010-07-19 Michal Ludvig + + * buspirate.c: Added compatibility with BusPirate "NewUI" firmware 5.x + (contributed by Kari Knuuttila) + +2010-07-12 Nils Springob + + * avrdude.conf.in (atmega88p): New device. + +2010-06-03 Joerg Wunsch + + bug #29913: 246 Byte Bug - AVRdude crashes + doc/avrdude.texi (Troubleshooting): Mention the libusb 0.1 API + wrapper issue that is present in some Linux versions. + +2010-03-19 Joerg Wunsch + + bug #29263: Can't build avrdude on windows using latest cygwin 1.7.1 + * doc/avrdude.texi: Remove the recommendation for building + Win32 binaries under Cygwin; mention MinGW as an alternative + environment. + +2010-03-08 Michal Ludvig + + * ser_posix.c(ser_set_dtr_rts): Fixed DTR on/off to make + Arduino auto-reset work. (bug #29108, patch #7100) + +2010-03-05 Joerg Wunsch + + * buspirate.c: Replace printf() by fprintf(stderr) + * safemode.c: (Dito.) + * usbtiny.c: (Dito.) + +2010-01-22 Joerg Wunsch + + Cleanup Cygwin builds. + * windows/Makefile.am (loaddrv_LDFLAGS): remove, the -mno-cygwin + flag is supposed to be set in CFLAGS by ./configure + * configure.ac: add a check for the presence of usleep(), add a + check whether the linker accepts -static + * avrdude.h: protect prototype for usleep by !defined(HAVE_USLEEP) + * ppwin.c (usleep): protect by !defined(HAVE_USLEEP) + * main.c: silence "array subscript of type char" compiler warnings + by casting all arguments to tolower()/toupper() and isspace()/ + isdigit()/ispunct() to "int" + * butterfly.c: (Dito.) + * avr910.c: (Dito.) + +2010-01-19 Joerg Wunsch + + * configure.ac: Bump for post-5.10. + +2010-01-19 Joerg Wunsch + + * configure.ac: Released version 5.10. + +2010-01-19 Joerg Wunsch + + bug #28677: Cygwin's GCC no longer supports -mno-cygwin option + * configure.ac: For Win32 environments, add a check whether the + compiler understands the -mno-cygwin option. If not, don't use + it but suggest using a different compiler. + +2010-01-18 David Hoerl + + bug #28660: Problem with loading intel hex rom files that exceed + 0x10000 bytes + * fileio.c: Fix two byte shifts. + +2010-01-15 Joerg Wunsch + + Submitted by Michael biebl: + * configure.ac: Fix FreeBSD default serial port name. + * doc/avrdude.texi: (Dito.) + +2010-01-15 Joerg Wunsch + + * jtagmkII.c: If entering JTAG mode fails with a bad JTAG ID + message, retry with external reset applied (in case the target + is in sleep mode or has asserted the JTD bit). + +2010-01-15 Joerg Wunsch + + Submitted by Aurelien Jarno: + * configure.ac: Fix build for GNU/kFreeBSD. + * ppi.c: (Dito.) + * par.c: (Dito.) + +2010-01-15 Joerg Wunsch + + * configure.ac: Bump version for post-5.8. + +2010-01-15 Joerg Wunsch + + * configure.ac: Bump version for release 5.8. + +2010-01-15 Joerg Wunsch + + Submitted by Soren Jorvang: + bug #28611: -i delay not being applied to all serial port + bit banging state transitions + * serbb_win32.c: Apply ispdelay everywhere. + * serbb_posix.c: (Dito.) + +2010-01-15 Joerg Wunsch + + * stk500v2_private.h: Implement TPI mode for AVRISPmkII/STK600 + * config_gram.y: (Dito.) + * avrpart.h: (Dito.) + * stk500v2.c: (Dito.) + * main.c: (Dito.) + * lexer.l: (Dito.) + * avrdude.conf.in: Add ATtiny4/5/9/10 + * avrdude.1: Document TPI and new device support. + * doc/avrdude.texi: (Dito.) + +2010-01-14 Joerg Wunsch + + Submitted by clint fisher: + patch #7038: Adding Atmega32U4 Device to avrdude.conf.in + * avrdude.conf.in (atmega32u4): New device. + * avrdude.1: Document the new device support. + * doc/avrdude.texi: (Dito.) + +2010-01-14 Joerg Wunsch + + Submitted by Thomas Pircher: + patch #6927: Documentation patches + * doc/avrdude.texi: Fix various typos, and remove the last + remnants of obsoleted options -i/-o/-m/-f. + * avrdude.1: Merge typo fixes from avrdude.texi where + applicable. + +2010-01-14 Joerg Wunsch + + * avrdude.1: Update documentation to match the reality (device + support, memory areas). + * doc/avrdude.texi: Update documentation to match the + reality (device support, programmer support, memory areas). + Merge buspirate-specific comments from avrdude.1. + * jtagmkII.c: Add some firmware feature checks. + +2010-01-13 Joerg Wunsch + + * jtagmkII.c: Implement PDI mode support for the JTAG ICE mkII + and the AVR Dragon. + * jtagmkII.h: (Dito.) + * config_gram.y: (Dito.) + * jtagmkII_private.h: (Dito.) + * avrdude.conf.in: (Dito.) + * lexer.l: (Dito.) + +2010-01-13 Joerg Wunsch + + * stk500v2.c: Update STK600 routing and socket card data from XML + file. + +2010-01-13 Joerg Wunsch + + * stk500v2.c: Cleanup the open/close handling to avoid accessing + unallocated memory (in the atexit handler) in case of bailing out. + * main.c: (Ditto.) + +2010-01-13 Joerg Wunsch + + * jtagmkII.c: Stylistic changes: move #defines out into + jtagmkII_private.h, drop all #if 0 blocks, fold overly long lines, + move the *_initpgm() functions to the end of the file; while being + here, remove all trailing whitespace. + * jtagmkII_private.h: move AVR32 #defines here. + +2010-01-12 Joerg Wunsch + + * bootstrap: autoconf 2.62 works well. + +2010-01-12 Joerg Wunsch + + Various fixes for Xmega devices. + * avrdude.conf.in: Correctly declare EEPROM page sizes for + all Xmega devices (0x20 instead of 0x100). + * avr.c: If a memory region has a page size declared, try + using the paged IO routines regardless of the target memory + name. Xmega EEPROM requires to be written in paged mode. + Correctly use a long (rather than unsigned long) variable to + evaluate the success status of the paged mode write attempt. + * stk500v2.c: Don't apply TIF space offsets twice (bug #27995: + AVRDUDE 5.8svn fails to program and read XMEGA); use + stk500v2_loadaddr() prior to paged mode (EEPROM and flash) writes, + otherwise programming of flash areas will fail; while being there, + check the return value of stk500v2_loadaddr() everywhere; use the + correct write/erase mode bits (same as AVR Studio does). + +2010-01-12 Michal Ludvig + + * buspirate.c: Initialise firmware version to v0.0 + prior to parsing the buspirate banner. + +2010-01-11 Joerg Wunsch + + Clean-up the Xmega erase functions. + * jtagmkII_private.h: Add CMND_XMEGA_ERASE as well as + the various XMEGA_ERASE_* definitions (from updated + appnote AVR067) + * jtagmkII.c (jtagmkII_chip_erase): Correctly implement Xmega chip + erase based on CMND_XMEGA_ERASE. After erasing an Xmega part, do + *not* reinitialize the world, as a subsequent programming + operation will fail (for unknown reasons). Actually, this was + really only required for ancient AVRs, but doesn't hurt on mega + and tiny devices. + * jtagmkII.c (jtagmkII_pre_write): Remove, this turned out + to be just a chip erase. + * jtagmkII.c (jtagmkII_program_disable): Don't try reading + "hfuse" for Xmega parts; they don't have it. + * main.c (main): Re-enable auto-erase. It's been done + before (as "jtagmkII_pre_write") in jtagmkII_paged_write() + anyway. Xmega boot and application flash areas should be + handled separately in the future, so auto_erase can only + affect the area just being programmed. + +2010-01-11 Joerg Wunsch + + * main.c (main): disable safemode for Xmega parts. + +2010-01-12 Michal Ludvig + + * buspirate.c: If the BusPirate doesn't respond + to a standard a reset command assume it was in binmode + and attempt to exit to text mode first. + +2010-01-08 Joerg Wunsch + + * bitbang.c: Fix Win32 build error: move freq up to the file + level. + * buspirate.c: Fix Win32 build warning: include to + to get a declaration for alloca(). + +2010-01-08 Thomas Fischl + + bug #28520: Programming with USBasp with low clock speed fails + * usbasp.c: Change blocksize depending on sck frequency to + avoid usb transmition timeouts. + +2010-01-08 Joerg Wunsch + + bug #27505: serbb_posix does not cope with inverted pins + * serbb_posix (serbb_highpulsepin): apply PIN_MASK when + checking pin numbers. + * serbb_win32 (serbb_highpulsepin): (Dito.) + +2010-01-08 Joerg Wunsch + + bug #28516: Linux/Dragon: Error message on exit + * stk500v2.c: Fix the "bad response to GO command: + RSP_ILLEGAL_EMULATOR_MODE" message. jtagmkII_close() + has been called with the wrong pgm->cookie. Wrap it + inside stk500v2_jtagmkII_close(), adjusting the cookie + data appropriately. + +2010-01-08 Joerg Wunsch + + Submitted by Doug: + patch #7010: Win32 enhanced bitbang_delay + * bitbang.c (bitbang_calibrate_delay, bitbang_delay): On Win32, + use the high-resolution performance counter rather than the + uneducated delay loop guess if it is available on the target + hardware. + +2010-01-08 Joerg Wunsch + + Submitted by Gerard: + patch #6828: Using arbitrary BAUD rates + * ser_posix.c (serial_baud_lookup): Allow non-standard baud + rates. + * ser_win32.c (serial_baud_lookup): (Dito.) + +2010-01-07 Joerg Wunsch + + Submitted by Eric Trein: + bug #27596: AT90s2333 is not correctly supported in avrdude.conf + * avrdude.conf.in (at90s2333): add various STK500v2 parameters. + +2010-01-07 Joerg Wunsch + + Submitted by Gyorgy Szekely: + bug #28458: Buffer line is incorrectly released for PP programmers + * par.c (par_close): use par_setmany() rather than par_setpin() + for PPI_AVR_BUFF. + +2010-01-07 Joerg Wunsch + + Submitted by Lukasz Goralczyk: + bug #27507: SIGSEGV when using avrdragon (avrdude 5.8) + * stk500v2.c (stk500v2_dragon_isp_initpgm): Use + stk500v2_jtagmkII_setup/stk500v2_jtagmkII_rather than their + jtagII counterparts, to get the private data properly + initialized. + +2010-01-07 Joerg Wunsch + + * buspirate.c: Cosmetics: remove UTF-8 dashes, adjust for 8-column + hard tabs. + +2010-01-07 Joerg Wunsch + + * buspirate.c: add $ Id $ line. + * buspirate.h: add $ Id $ line. + +2010-01-07 Joerg Wunsch + + Fix a few warnings that came up recently (some of them only triggered + by recent GCC versions). + * config_gram.y (parse_cmdbits): "brkt possibly used uninitialized" + (GCC errs here) + * jtagmkII.c (jtagmkII_reset32): "status possibly used uninitialized" + (I think GCC errs, too) + * buspirate.c: "pointers differ in signedness" (mismatch between + string processing and the use of "unsigned char" throughought the + AVRDUDE API) + +2010-01-01 Joerg Wunsch + + * jtagmkII.c (jtagmkII_smc_init32): replace sleep() by usleep() for + win32 compatibility. diff --git a/xs/src/avrdude/ChangeLog-2011 b/xs/src/avrdude/ChangeLog-2011 new file mode 100644 index 000000000..d8fffba01 --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2011 @@ -0,0 +1,489 @@ +2011-12-30 Rene Liebscher + + * avrdude.conf.in: Added is_at90s1200 option to part description + * doc/avrdude.texi: Added missing options to part definition + * config_gram.y: Fixed resetting of is_at90s1200 and is_avr32 flags + +2011-12-30 Rene Liebscher + + patch #7693: Fix config file atmel URLs + * avrdude.conf.in: Updated URLs + * avrpart.h: Updated URLs + * doc/avrdude.texi: Updated URLs + +2011-12-30 Joerg Wunsch + + * ser_posix.c (baud_lookup_table): Conditionalize the inclusion of + non-standard baud rates (only baud rates up to B38400 are + standardized by the Single UNIX Specification). + +2011-12-29 Rene Liebscher + + bug #34302: Feature request : device configuration with parent classes + * config_gram.y: Added part parent rule and allow overwriting existing + data at several places + * avrdude.conf.in: Added description comment and m328/m328p as example + * avrpart.c: avr_dup_mem-functions now copy buf and tags memory block + only they are already allocated. + * lexer.l: Added parent as valid token + + (not in original patch) + * avrpart.c: New function avr_dup_opcode. avr_dup_mem/avr_dup_part- + functions now duplicate the opcodes in their op-array to avoid memory leaks. + * doc/avrdude.texi: Added description of part parent feature + +2011-12-29 Rene Liebscher + + patch #7687: Autogenerating programmers and parts lists for docs + (generating the parts lists, programmers lists follows later) + * doc/Makefile.am: Add rule how to create avrdude before generating parts list + +2011-12-29 Rene Liebscher + + patch #7687: Autogenerating programmers and parts lists for docs + (generating the parts lists, programmers lists follows later) + * doc/avrdude.texi: Add include of generated table of parts + * doc/Makefile.am: Add generating of table of parts in parts.texi + * doc/parts_comments.txt: Adding file containing part commenz references + * avrdude.1: Remove table of parts and mention "-p ?" option + * avrpart.c: Use AVR_DESCLEN for strncasecmp at list sorting + +2011-12-22 Rene Liebscher + + * configure.ac: Add writing of definition of confsubst to config.status, + so it can run alone, not only called by configure. + +2011-12-17 Rene Liebscher + + patch #7680: Fixing timeout problem in ser_recv in ser_win32.c + * ser_win32.c: Return -1 at timeout in ser_recv(). + +2011-12-17 Rene Liebscher + + * config_gram.y: Fixed another memory leak, when define an operation + more than once + * avrdude.conf.in: Fixed double definition at ATmega6490 + +2011-12-17 Rene Liebscher + + * config_gram.y: Restructuring and compacting programmer definition + part of grammar (in preparation of patch #7688) + +2011-12-17 Rene Liebscher + + * avrdude.conf.in: Update documentation of programmer definition + * doc/avrdude.texi: Update documentation of programmer definition + and add list of implemented programmer types + +2011-12-17 Rene Liebscher + + patch #7667: Minor memory handling fixes + * config_gram.y: Added several free_token() calls. + +2011-12-16 Rene Liebscher + + patch #7671: Sorting programmers and parts lists for console output + * avrdude.conf.in: change part desc of several parts to common pattern + AT(mega|tiny|xmega)[0-9]+[A-Z]* (Upper case AT, lower case in middle) + * list.[ch]: added sorting function lsort() + * pgm.[ch]: added function sort_programmers() + * avrpart.[ch]: added function sort_avrparts() + * main.c: use sort functions in list_programmers() and list_parts() + * main.c: list functions show config file info only at verbose mode + +2011-10-19 Joerg Wunsch + + * configure.ac: Replace "cvs" in version number by "svn". + +2011-10-10 Joerg Wunsch + + bug #34518: loading intel hex files > 64k using record-type 4 + (Extended Linear Address Record) + fileio.c: Replace the change from r928 (handling of 0x8000000 + offset in AVR32 files) by a completely different logic that no + longer breaks hex files for other devices starting with an + offset; also apply a similar change to S-record files, as well + as when writing files. + fileio.c: (Ditto.) + +2011-09-15 Joerg Wunsch + + * avrftdi.c: Remove stray printf()s by fprintf(stderr) + * usbtiny.c: (Ditto.) + +2011-09-15 Joerg Wunsch + + * main.c: Restrict the cyclecounter readout to those cases where + it has been explicitly requested (by -y or -Y), rather than always + attempting to read the last EEPROM bytes. + +2011-09-15 Joerg Wunsch + + * stk500v2.c (stk600_xprog_paged_load, stk600_xprog_paged_write): + Fix regression in the AVRISPmkII/STK600 TPI handling introduced + by the USBasp's TPI implementation which added a pagesize even for + the minor memory regions of TPI devices. Also fix wrong offset + introduced by the memory tagging patch. + +2011-09-15 Joerg Wunsch + + * avr.c (avr_read, avr_write): Don't bail out on TPI parts if + their programmer doesn't provide a (low-level) cmd_tpi method; + instead, fall back to the normal programmer methods which are + supposed to handle the situation. + This fixes a regression where the recent bitbang-TPI implementation + broke TPI handling of STK600/AVRISPmkII. + +2011-09-14 Joerg Wunsch + + Mega-commit to bring in memory tagging. + Each memory image byte is now tagged as it's being read from a file. + Only bytes read from a file will be written or verified (modulo page + granularity requirements). + * avrpart.h: Add memory tags. + * avrpart.c: Allocate and initialize tag area. + * update.h: Drop unused parameter "verify" from do_op(). + * pgm.h: Add parameter base_addr to the paged_load and paged_write + methods, respectively. + * avr.h: New parameter to avr_read: second AVRPART to verify against. + * fileio.c: Track all memory regions that have been read from an + input file by tagging them. + * update.c: Call avr_read() with the new parameter list. + * main.c: Call avr_initmem() to initialize the memory regions, rather + than trying to duplicate an unitialized part, and then let the + original part rot away. + * avr.c: Implement the heart of the new featureset. For paged memory + areas, when writing or verifying, call the paged_write and paged_load + methods, respectively, once per page instead of on the entire memory. + When writing, only write bytes or pages that have content read from a + file. Whe verifying, only read memory bytes or pages where the + verification data have been read from a file. Only verify those bytes + that have been read from a file. + * avrftdi.c: Implement the new API for paged_load and paged_write, + respectively. + * jtagmkII.c: (Ditto.) + * butterfly.c: (Ditto.) + * jtagmkI.c: (Ditto.) + * avr910.c: (Ditto.) + * stk500.c: (Ditto.) + * usbasp.c: (Ditto.) + * stk500v2.c: (Ditto.) + * usbtiny.c: (Ditto.) + +2011-09-13 Joerg Wunsch + + * stk500v2.c (stk500v2_command): Treat warnings as errors rather than + success. + +2011-08-30 Joerg Wunsch + + bug #34027: avrdude AT90S1200 Problem (part 3 - documentation) + * avrdude.1: Document the programmer type restrictions for AT90S1200 + devices. + * doc/avrdude.texi: (Ditto.) + +2011-08-30 Joerg Wunsch + + bug #34027: avrdude AT90S1200 Problem (part 2 - stk500v2 and relatives) + * stk500v2.c (stk500v2_initialize): For the AT90S1200, release + /RESET for a moment before reinitializing, as this is required by + its programming protocol. + +2011-08-30 Joerg Wunsch + + * configure.ac: In AC_CHECK_LIB for libftdi, check for + ftdi_usb_get_strings() rathern than ftdi_init(), as this is a more + specific thing to search for in order to make sure getting a + recent enough libftdi. + +2011-08-29 Joerg Wunsch + + bug #34027: avrdude AT90S1200 Problem (part 1 - bitbang + programmers) + * config_gram.y: Introduce new keyword "is_at90s1200". + * lexer.l: (Ditto.) + * avrdude.conf.in: Applew new keyword to the AT90S1200 device. + * avrpart.h: Introduce new flag AVRPART_IS_AT90S1200, reflecting + the is_at90s1200 configuration keyword. + * bitbang.c (bitbang_initialize): Replace existing test for + AT90S1200 by AVRPART_IS_AT90S1200 + * avr.c (avr_write_byte_default): Avoid the pre-write reading for + the AT90S1200, as this appears to sometimes corrupt the high byte + by pre-programming the low byte just written into it. + +2011-08-27 Joerg Wunsch + + * configure.ac: Bump version for post-5.11. + +2011-08-27 Joerg Wunsch + + * configure.ac: Bump version for releasing AVRDUDE 5.11. + +2011-08-26 Joerg Wunsch + + * avrdude.1: Update the list of supported AVR devices. + * doc/avrdude.texi: (Ditto). + +2011-08-26 Joerg Wunsch + + * configure.ac: add -lusb as "other libraries" when checking + for libftdi. + +2011-08-26 Joerg Wunsch + + Submitted by Juergen Weigert: + patch #7056: adding support for mikrokopter bootloader to butterfly + * butterfly.c: Add some specific logic to handle the + mikrokopter.de butterfly bootloader. + * butterfly.h: Add one related function declaration. + * config_gram.y: Add butterfly_mk keyword. + * lexer.l: (Ditto.) + * avrdude.conf.in: Add entry for butterfly_mk. + +2011-08-26 Joerg Wunsch + + Submitted by Stefan Tomanek: + patch #7542: add default_bitclock to configuration files + * config.c: Add the new keyword and its handling. + * config.h: (Ditto.) + * config_gram.y: (Ditto.) + * avrdude.conf.in: (Ditto.) + * main.c: (Ditto.) + * lexer.l: (Ditto.) + * avrdude.1: Document the change. + * doc/avrdude.texi: (Ditto.) + +2011-08-26 Joerg Wunsch + + Submitted by Brett Hagman: + patch #7603: wiring - programmer type for Wiring boards + (based on STK500v2) + * wiring.c: New file. + * wiring.h: (Ditto.) + * Makefile.am: Add new files. + * stk500v2_private.h: Reorganize so some functions and struct + pdata are globally known. + * stk500v2.c: (Ditto.) + * stk500v2.h: (Ditto.) + * lexer.l: Add new programmer keywords. + * config_gram.y: (Ditto.) + * avrdude.conf.in: Add "wiring" programmer entry. + * avrdude.1: Document the new programmer. + * doc/avrdude.texi: (Ditto.) + * AUTHORS: Add Brett Hagman. + +2011-08-26 Joerg Wunsch + + Submitted by an anonymous contributor on the mailinglist: + * avrdude.conf (jtagkey): Add a definition for the Amontec + JTAGKey + +2011-08-26 Joerg Wunsch + + Submitted by Juergen Weigert: + bug #22720: avrdude-5.5 ignores buff settings in avrdude.conf + (Note that the actual bug the subject is about has been fixed + long ago.) + * update.c (do_op): fix a diagnostic message + * pgm.h: add exit_datahigh field + * par.c: set and act upon the exit_datahigh field + * avrdude.1: document the new -E options + * doc/avrdude.texi: (Ditto.) + +2011-08-26 Joerg Wunsch + + bug #33811: Parallel make fails + * Makefile.am (BUILT_SOURCES): Add this macro. + +2011-08-26 Joerg Wunsch + + bug #33114: Segfault after setting the DWEN fuse with Dragon + * jtagII.c (jtagmkII_getsync): Instead of exit()ing from + deep within the tree when detecting the "need debugWIRE" + situation, properly pass this up as a return code. + * jtagII_private.h (JTAGII_GETSYNC_FAIL_GRACEFUL): New constant. + * stk500v2.c (stk500v2_jtagmkII_open): Don't tell anything + anymore when receiving a JTAGII_GETSYNC_FAIL_GRACEFUL from + jtagmkII_getsync(); silently give up (all necessary has been + said already). + +2011-08-26 Joerg Wunsch + + Reported by Jason Hecker: + * usbasp.c (libusb_to_errno): Conditionalize some error codes + that apparently are lacking on MinGW. + +2011-08-25 Joerg Wunsch + + Fix warnings. + * ser_avrdoper.c: add so exit() is declared. + * usbtiny.c (usbtiny_open): provide an initializer to a + "may be used uninitialized" variable (since GCC could not + fully detect the logic behind). + +2011-08-25 Joerg Wunsch + + * configure.ac: Add a check for FreeBSD's libusb-1.0 + compatible library that is found in libusb.a/.so on + FreeBSD 8+. + +2011-08-25 Joerg Wunsch + + Submitted by Doug Springer, based on work by + Wolfgang Moser, Ville Voipio, Hannes Weisbach + patch #7486: Patch to add FT2232C/D, FT2232H, FT4232H, + usbvid, usbpid, usbdev for USB support - Based on #7062 + * avrftdi.c: New file. + * avrftdi.h: (Ditto.) + * configure.ac: Add check for libftdi. + * config_gram.y: Add AVRFTDI and per-programmer USB string + keywords. + * lexer.l: (Ditto.) + * avrdude.conf.in: Add avrftdi and 2232HIO programmers. + * pgm.h: Add USB parameters. + * Makefile.am: Add avrftdi.c and avrftdi.h. + * AUTHORS: Mention the new authors. + * avrdude.1: Document the changes. + * doc/avrdude.texi: (Ditto.) + +2011-08-23 Joerg Wunsch + + bug #29585: Fix license + * doc/avrdude.texi: Add FDL as an option to the licensing + statement, as the savannah administration would like it + that way. + +2011-08-23 Joerg Wunsch + + Submitted by Darell Tan: + patch #7244: TPI bitbang implementation + * bitbang.c: Add TPI bitbang stuff. + * bitbang.h: (Ditto.) + * avr.c: (Ditto.) + * avr.h: (Ditto.) + * pgm.c: (Ditto.) + * pgm.h: (Ditto.) + * serbb_posix.c: Wire bitbang_cmd_tpi into the struct pgm. + * serbb_win32.c: (Ditto.) + * par.c: (Ditto.) + * doc/avrdude.texi: Document the TPI bitbang support. + +2011-08-17 Joerg Wunsch + + Submitted by Grygoriy Fuchedzhy: + bug #31779: Add support for addressing usbtinyisp with -P option + * usbtiny.c (usbtiny_open): Add logic to distinguish multiple USBtinyISP + programmers by their bus:device tuple. + * doc/avrdude.texi: Document the new functionality. + * avrdude.1: (Ditto.) + +2011-08-16 Joerg Wunsch + + Submitted by Timon Van Overveldt: + bug #30268: Debugwire broken in avrdude-5.10 + * jtagmkII.c (jtagmkII_initialize): only try setting up a JTAG chain when + the programmer is using JTAG. + +2011-08-16 Joerg Wunsch + + bug #29636: AVRDude issues invalid CMD_CHECK_TARGET_CONNECTION + on the AVRISP-MKII + * stk500v2.c (stk500v2_program_enable): Rewrite the logic to + explain ISP activation failures. + * stk500v2_private.h: Fix the various STATUS_* constants; + AVR069 and AVR079 disagreed in their values, even though they + are apparently implementing the same logic behind. + +2011-08-16 Joerg Wunsch + + bug #29650: Programming timeouts in ATmega128RFA1 are too slow + * avrdude.conf.in (ATmega128RFA1): Bump write delay values for flash and + EEPROM to 50 ms. + +2011-08-16 Joerg Wunsch + + * avrdude.conf.in (ATmega8515, ATmega8535, ATmega48, ATmega88, ATmega88P, + ATtiny88, ATmega168, ATmega168P, ATmega328P): Bump delay value for STK500v2 + EEPROM write operation to 5, according to the respective XML files. + +2011-08-16 Joerg Wunsch + + Submitted by Darcy Houlahan: + bug #29694: error in avrdude.conf for attiny84 eeprom + * avrdude.conf.in (ATtiny84, ATtiny85): fix A7 bit in EEPROM write + command. + +2011-08-16 Joerg Wunsch + + Submitted by Durant Gilles: + * avrdude.conf.in (ATtiny4313): Fix flash addressing bits for manual ISP + algorithm. + +2011-08-16 Joerg Wunsch + + Submitted by Philip: + bug #31386: A "BUILD.svn" or similar "how to get started" doc would be helpful + * BUILD-FROM-SVN: New file. + +2011-08-15 Joerg Wunsch + + Submitted by Nic Jones: + bug #32539: [Documentation][Patch] Man page is misleading + re: Dragon & PDI + * doc/avrdude.texi: Update information about PDI connections + on AVR Dragon + +2011-08-12 Joerg Wunsch + + * usbasp.c: Add so this actually compiles + again. + +2011-08-12 Joerg Wunsch + + Contributed by tixiv@gmx.net: + bug #33345: File auto detection as binary doesn't open + file in binary mode on Windows + * fileio.c: Move the decision about opening files in + binary mode until before the fopen() call. + +2011-06-16 Thomas Fischl + + * avrdude.conf.in: Fix part id of ATtiny9. + +2011-05-28 Thomas Fischl + + Based on patch #7440 commited by Slawomir FraÅ›: + * usbasp.c: added TPI support for USBasp + * usbasp.h: (Ditto.) + +2011-05-11 Joerg Wunsch + + * avrdude.conf.in: Add support for ATmega168P. + +2011-05-11 Joerg Wunsch + + * avrdude.conf.in: Fix abbreviated name for ATmega324PA. + +2011-05-11 Joerg Wunsch + + Submitted by Lech Perczak: + bug #30946: Added support for ATmega8/16/32U2 + * avrdude.conf.in: Add ATmega8/16/32U2 entries. + +2011-05-11 Joerg Wunsch + + Submitted by David A Lyons: + patch #7393: Adding ATtiny4313 Device to avrdude.conf.in + * avrdude.conf.in: Add ATtiny4313 data. + +2011-05-11 Joerg Wunsch + + * usb_libusb.c: Bump timeout values to allow for slow clock + speeds. + * jtagmkII.c: (Ditto.) + +2011-03-04 Eric B. Weddington + + Thanks to Vitaly Chernookiy for the patch. + * avrdude.conf.in: Add support for atmega324pa. + * ChangeLog-2010: New file, rotate ChangeLog for new year. diff --git a/xs/src/avrdude/ChangeLog-2012 b/xs/src/avrdude/ChangeLog-2012 new file mode 100644 index 000000000..bb5751a6d --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2012 @@ -0,0 +1,729 @@ +2012-12-18 Joerg Wunsch + + * usbdefs.h (USBDEV_BULK_EP_WRITE_STK600) + (USBDEV_BULK_EP_READ_STK600): new define values + * stk500v2.c (stk600_open): use the STK600 EP values, + as they are different from AVRISPmkII + +2012-12-18 Joerg Wunsch + + bug #37942: Latest SVN can't program in dragon_jtag mode + * jtagmkII.c (jtagmkII_initialize): For Xmega devices, and + firmware >= 7.x, don't trigger a RESET, in order to work around a + firmware bug that appears to be present in at least firmware 7.24 + for the Dragon. + +2012-12-04 Joerg Wunsch + + * config_gram.y: Implement the "ocdrev" keyword + * avrpart.c: (Dito) + * avrpart.h: (Dito) + * lexer.l: (Dito) + * avrdude.conf.in: Add "ocdrev" key/value pairs, based + on the AS6 XML file information. + * jtag3.c: Use the ocdrev in the parameter block. + +2012-12-03 Joerg Wunsch + + * jtag3.c: Make jtag3_command() public + * jtag3.h: (Dito.) + * jtag3_private.h: Add two new commands + * stk500v2.c: Implement the "MonCon disable" hack that + allows temporarily falling back to ISP when trying to + talk to a part that has debugWIRE enabled + +2012-12-03 Rene Liebscher + + * pickit2.c: reordered #includes for non-usb configuration + +2012-12-03 Joerg Wunsch + + * jtag3.c: Enable interactive adjustment of the various + clock frequencies (JTAG Xmega, JTAG megaAVR, PDI Xmega) + through the set_sck_period() callback. + +2012-12-03 Joerg Wunsch + + * jtag3.c: Remove unused code that was left over from + cloning the jtagmkII.c implementation + +2012-12-03 Joerg Wunsch + + * pgm_type.c: Add "jtagice3_isp" programmer hook + * avrdude.conf.in: Add "jtag3isp" programmer + * jtag3.c: jtag3_setparm() is now public + * jtag3.h: (Dito) + * stk500v2_private.h: Command 0x1D is CMD_SPI_MULTI only + for STK500v2, AVRISPmkII, and JTAGICEmkII; for JTAGICE3, + it's CMD_SET_SCK now; also add CMD_GET_SCK + * avrpart.c (avr_get_output_index): New function + * avrpart.h: (Dito) + * stk500v2.c: Implement the pasthrough programmer glue logic + for JTAGICE3 in ISP mode + * stk500v2.h: (Dito) + * avrdude.1: Document the JTAGICE3 support. + +2012-11-30 Joerg Wunsch + + * jtag3.c (jtag3_read_byte, jtag3_write_byte): Remove the + m->offset from addr, JTAGICE3 doesn't need it anymore (similar + to JTAGICEmkII with 7+ firmware) + * jtag3.c (jtag3_read_byte): Allow for full-page reads of + EEPROM also for Xmega and debugWIRE, allow for signature + read in debugWIRE + +2012-11-30 Joerg Wunsch + + * jtag3_private.h: Add two more error detail codes I stumbled + across during development + * jtag3.c: (Dito.) + * usb_libusb.c: Reduce timeouts from 100 to 10 s, still long + enough, but not getting cold feet when something goes wrong. + +2012-11-29 Joerg Wunsch + + * jtag3.c: Handle events returned by the ICE + * usbdevs.h: Add defines that mark an event in return + from usb_recv_frame(). + * usb_libusb.c: (Dito.) + +2012-11-29 Joerg Wunsch + + * avrdude.conf.in: Remove "has_jtag" from Xmega A4 and D4 + devices, as they only have PDI. + * jtag3.c (jtag3_page_erase): Actually implement this. + +2012-11-29 Joerg Wunsch + + bug #37265: wrong page sizes for XMega64xx in avrdude.conf + * avrdude.conf.in: Fix page sizes for all Xmega devices, + by cross-checking against Atmel Studio's device XML files + +2012-11-29 Joerg Wunsch + + * jtag3.c: Fill in the missing pieces for Xmega support (both, + PDI and JTAG). + * jtagmkII.c (jtagmkII_set_xmega_params): Use "fuse1" rather + than "fuse0" memory space to fill in the NVM offset from, as + there is no "fuse0" on some Xmega devices. + +2012-11-29 Joerg Wunsch + + * avrdude.conf.in (ATmega256RFR2, ATmega128RFR2, ATmega64RFR2): + New devices + +2012-11-28 Joerg Wunsch + + First support for Atmel JTAGICE3. Guessed from USB sniffer + traces made by Knut Schwichtenberg, and by similarity to + JTAGICEmkII. + Still quite incomplete, just megaAVR/JTAG is done by now. + * jtag3.c: New file. + * jtag3.h: (Dito.) + * jtag3_private.h: (Dito.) + * pgm_type.c: Add new programmers + * avrdude.conf.in: (Dito.) + * usbdevs.h: Add new parameters + * Makefile.am: Add new files + * usb_libusb.c: Handle separate event endpoint, and larger + (USB 2.0) packet sizes + +2012-11-26 Joerg Wunsch + + * jtagmkII.c: Change all the USB details (endpoint numbers, + max transfer size etc.) to a per-programmer adjustable value. + * serial.h: (Dito.) + * stk500v2.c: (Dito.) + * usbdevs.h: (Dito.) + * usb_libusb.c: (Dito.) + +2012-11-20 Joerg Wunsch + + * buspirate.c: Replace outdated FSF postal address by a reference to + the GPL info on their website. + * jtagmkII.c: (Dito.) + * avrftdi.c: (Dito.) + * wiring.c: (Dito.) + * linux_ppdev.h: (Dito.) + * serbb.h: (Dito.) + * usbtiny.h: (Dito.) + * confwin.c: (Dito.) + * buspirate.h: (Dito.) + * avrftdi.h: (Dito.) + * wiring.h: (Dito.) + * jtagmkII.h: (Dito.) + * pickit2.c: (Dito.) + * config.c: (Dito.) + * term.c: (Dito.) + * confwin.h: (Dito.) + * avrdude.1: (Dito.) + * windows/Makefile.am: (Dito.) + * config.h: (Dito.) + * pickit2.h: (Dito.) + * term.h: (Dito.) + * tools/get-hv-params.xsl: (Dito.) + * tools/get-stk600-cards.xsl: (Dito.) + * tools/get-stk600-devices.xsl: (Dito.) + * tools/get-dw-params.xsl: (Dito.) + * butterfly.c: (Dito.) + * configure.ac: (Dito.) + * doc/Makefile.am: (Dito.) + * pgm_type.c: (Dito.) + * butterfly.h: (Dito.) + * jtagmkI.c: (Dito.) + * ft245r.c: (Dito.) + * COPYING: (Dito.) + * pgm_type.h: (Dito.) + * jtagmkI.h: (Dito.) + * pindefs.h: (Dito.) + * config_gram.y: (Dito.) + * arduino.c: (Dito.) + * arduino.h: (Dito.) + * ser_win32.c: (Dito.) + * serbb_win32.c: (Dito.) + * avr910.c: (Dito.) + * stk500.c: (Dito.) + * freebsd_ppi.h: (Dito.) + * avr910.h: (Dito.) + * solaris_ecpp.h: (Dito.) + * stk500.h: (Dito.) + * jtagmkII_private.h: (Dito.) + * avrdude.h: (Dito.) + * bitbang.c: (Dito.) + * bitbang.h: (Dito.) + * avrpart.c: (Dito.) + * safemode.c: (Dito.) + * stk500generic.c: (Dito.) + * serial.h: (Dito.) + * avrpart.h: (Dito.) + * jtagmkI_private.h: (Dito.) + * ppi.c: (Dito.) + * avr.c: (Dito.) + * safemode.h: (Dito.) + * stk500generic.h: (Dito.) + * ser_avrdoper.c: (Dito.) + * avr.h: (Dito.) + * ppi.h: (Dito.) + * usbasp.c: (Dito.) + * lists.c: (Dito.) + * stk500v2.c: (Dito.) + * my_ddk_hidsdi.h: (Dito.) + * tpi.h: (Dito.) + * usbasp.h: (Dito.) + * lists.h: (Dito.) + * stk500v2.h: (Dito.) + * ppiwin.c: (Dito.) + * fileio.c: (Dito.) + * ser_posix.c: (Dito.) + * fileio.h: (Dito.) + * serbb_posix.c: (Dito.) + * usbdevs.h: (Dito.) + * par.c: (Dito.) + * update.c: (Dito.) + * pgm.c: (Dito.) + * main.c: (Dito.) + * par.h: (Dito.) + * update.h: (Dito.) + * lexer.l: (Dito.) + * Makefile.am: (Dito.) + * pgm.h: (Dito.) + * usb_libusb.c: (Dito.) + * usbtiny.c: (Dito.) + +2012-11-13 Rene Liebscher + + bug #35186 inverting pins with "~" doesn't work for pin lists (i.e. vcc) + bug #37727 Add support for LM3S811 dev board as a programmer + * lexer.l,config_gram.y: accepting inverted pins at pin lists + syntax: ~num or ~(num,num,...) + * par.c: par_set_many_bits is now usable with inverted pins + * avrftdi.c: fixed wrong index in ftdi_pin_name + * avrdude.conf.in: added programmer lm3s811 + +2012-11-04 Rene Liebscher + + * lexer.l,config_gram.y,config.[hc]: changed reading of numbers to integers + except of default_bitclock which is the only real number. + No signs are allowed as negative values do not make sense for current + config values. + * buspirate.c: include own header file buspirate.h + * doc/.cvsignore: add programmers.texi to ignore list + +2012-09-06 Joerg Wunsch + + * doc/Makefile.am: add EXTRA_DIST, replace $(srcdir) by + $(builddir) for generated files, so "make distcheck" + works again + +2012-09-05 Rene Liebscher + + * doc/Makefile.am: add $(srcdir) to name of generated files, so BSD make + find the files ( GNU make sees no difference if the + file is called version.texi or ./version.texi ) + +2012-08-15 Rene Liebscher + + patch #7184 Support for PICKit2 programmer + * Makefile.am: add pickit2 files + * pickit2.[ch]: new programmer implementation + * pgm_type.c: add pickit to list + * avrdude.1: documentation for pickit2 + * doc/avrdude.texi: documentation for pickit2 + * avrdude.conf.in: add pickit2 programmer entry + +2012-08-15 Rene Liebscher + + bug #30559 Ft232 bit-bang support, see comment #30 + * ft245r.c: added semaphore workaround for MacOS X, + added pthread_testcancel in reader thread + + * configure.ac: added check for TYPE_232H in libftdi (not in libftdi < 0.20) + * avrftdi.c: do not use TYPE_232H if not declared + +2012-08-13 Hannes Weisbach + + * avrftdi.c: fixes pin_limit for different FTDI devices (there was a mixup + between 2232C and 2232H) + +2012-07-29 Hannes Weisbach + + * avrftdi.c: bugfixes (synchronisation) and maintenance (paged programming, + nicer output, separation of parameter checking and actual code) + +2012-07-25 Joerg Wunsch + + * jtagmkII.c (jtagmkII_memtype): return MTYPE_FLASH rather than + MTYPE_SPM for non-Xmega flash regions + +2012-07-20 Hannes Weisbach + + * avrpart.c, avrpart.h: adds avr_pin_name() + +2012-07-18 Joerg Wunsch + + * configure.ac: check for libelf.h also in libelf/ + * fileio.c: include if configure found this + to be the case + +2012-06-13 Rene Liebscher + + * configure.ac: Check for presence of + * ft245r.c: Depend on HAVE_PTHREAD_H + * Makefile.am: Add -lpthread if needed. + +2012-06-07 Joerg Wunsch + + * usbtiny.c (usbtiny_paged_load, usbtiny_paged_write): + fix breakage introduced by the recent page handling reorg; + it used to cause an infinite loop + +2012-05-04 Joerg Wunsch + + Xmega page erase implementation for XPROG (AVRISPmkII, STK600) + * stk500v2.c (stk600_xprog_page_erase): New function. + +2012-05-04 Joerg Wunsch + + Xmega page erase implementation for JTAGICEmkII + * jtagmkII.c: Handle flash pages sizes > 256 bytes, implement + page_erase() method + * avrdude.conf.in: Change flash pagesize for all Xmega devices + to 512 bytes + * avr.c: Implement auto_erase, using page_erase if available + * avr.h: Remove unused parameters from avr_read(), replace + unused parameter in avr_write)() by auto_erase + * stk500v2.c: Handle flash page sizes > 256 bytes + * update.c (do_op): Handle new updateflags parameter + * main.c: Implement auto_erase as page_erase if possible + * update.h (enum updateflags): New enum + * pgm.h (struct programmer_t): Add page_erase method + +2012-04-26 Joerg Wunsch + + * jtagmkII.c (jtagmkII_paged_load, jtagmkII_paged_write): fix bug + in memory type calculation for Xmega "boot" memory region. + +2012-04-25 Joerg Wunsch + + * update.c (parse_op): do not assume default memtype here + * main.c: after locating the part information, determine default + memtype for all update options that didn't have a memtype + specified; this is "application" for Xmega parts, and "flash" for + everything else. + +2012-04-24 Joerg Wunsch + + * fileio.c: Rework the way ELF file sections are considered: while + scanning the program header table, the offsets from a program + header entry must never be used directly when checking the bounds + of the current AVR memory region. Instead, they must always be + checked based on the corresponding section's entry. That way, + Xmega devices now properly take into account whether the segment + fits into any of the application/apptable/boot memory region. + +2012-04-20 Joerg Wunsch + + bug #30756: When setting SUT to 64ms on XMEGA, avrdude doesn't + read device signature + * main.c: When reading the signature yields 0x000000 or 0xffffff, + retry (up to twice) after some progressive delay. + +2012-04-20 Joerg Wunsch + + * avrdude.conf.in (ATxmega16D4, ATxmega32D4, ATxmega64D4, + ATxmega128D4): New devices. As Xmega D doesn't feature a fuse0 + memory cell, move that one out from the generic .xmega part into + the individual Xmega A parts. + +2012-04-19 Joerg Wunsch + + bug #29019: pagel/bs2 warning when uploading using stk500 to xmega + * stk500.c (stk500_initialize): Insert dummy values for PAGEL and + BS2 if they are not present in the config file, in order to be able + to proceed with the stk500_set_extended_parms() anyway. + +2012-04-19 Joerg Wunsch + + * stk500v2_private.h (struct pdata): add boot_start + * stk500v2.c: For the "flash" pseudo-memory of Xmega devices, + distinguish addresses between "application" and "boot" area. + +2012-04-18 Joerg Wunsch + + * fileio.c (elf2b): When checking the bounds of the current + program header segment, subtract `low' from ph[n].p_paddr in order + to correct the magic section offsets for the AVR's non-flash + memory regions. + +2012-04-18 Joerg Wunsch + + * fileio.c (elf_get_scn): Rather than trying to just match whether + any given section maps straight to a program header segment, use a + more sophisticated decision that matches any section as long as it + fits into the segment. This is needed for situations where the + program header segment spans a larger area than the section data + provided. (This can e.g. happen in an ELF file that contains no + data at address 0, like a bootloader only.) + +2012-04-13 Joerg Wunsch + + bug #28744: Can't load bootloader to xmega128a1 (part 2, fix for + firmware >= V7.x) + * jtagmkII.c: Add firmware-version dependent handling of Xmega parameters. + V7.x firmware expects the NVM offsets being specified through the Xmega + parameters command, but left out as part of the memory address itself. + * jtagmkII_private.h: Add CMND_SET_XMEGA_PARAMS, and struct xmega_device_desc. + * config_gram.y: Add mcu_base keyword. + * avrpart.h: (Dito.) + * lexer.l: (Dito.) + * avrdude.conf.in (.xmega): add mcu_base, and data memory segment. + +2012-03-30 Joerg Wunsch + + bug #28744: Can't load bootloader to xmega128a1 (part 1, fix for + firmware < V7.x) + * jtagmkII.c: When going to write to the boot section of flash, + use MTYPE_BOOT_FLASH rather than MTYPE_FLASH + * jtagmkII_private.h: add MTYPE_BOOT_FLASH constant + +2012-03-30 Joerg Wunsch + + * jtagmkII_private.h: Sort commands, response codes and events + into numerical order. + +2012-03-29 Joerg Wunsch + + bug #30451: Accessing some Xmega memory sections gives not + supported error + * stk500v2.c: Handle all Xmega memory sections (except + "prodsig" which is not documented in AVR079) + * fileio.c: Treat the "boot", "application", and "apptable" + regions (which are actually subregions of "flash") all as + being flash, i.e. suppress trailing 0xFF bytes when reading + them + * avr.c: (Dito.) + +2012-03-20 Joerg Wunsch + + * jtagmkII.c (jtagmkII_close): The GO command before signing off + turned out to be not required for normal megaAVR devices, and to + cause the exact opposite (i.e. the target stopping) on Xmega + devices being programmed to JTAG. However, programming Xmega + devcies through PDI *does* need the GO command. + +2012-03-20 Joerg Wunsch + + * configure.ac: Print a configuration summary at the end of the + configure run + +2012-02-11 Rene Liebscher + + patch #7718: Merge global data of avrftdi in a private data structure + * avrftdi.[ch]: moved global data into private data structure, moved + private defines from header file into source file + +2012-02-06 Rene Liebscher + + patch #7720 Bug in EEPROM write + * avrftdi.c: fixed wrong buffer address initialization in paged_write + * fileio.c: added #include + +2012-02-05 Rene Liebscher + + bug #30559 Ft232 bit-bang support + * ft245r.c: cancel reader thread before exiting program + +2012-02-04 Rene Liebscher + + patch #7717 avrftdi_flash_write is broken + * avrftdi.c: fixed wrong buffer address initialization in paged_write + bug #35296 Extraneous newlines in output. + * main.c: fixed output of newlines at 100% progress + +2012-02-03 Rene Liebscher + + patch #7715 FT4232H support + * avrdude.conf.in: added programmer 4232h + +2012-02-03 Rene Liebscher + + patch #7687: Autogenerating programmers and parts lists for docs + (generating the programmers lists) + * doc/avrdude.texi: Add include of generated table of programmers + * doc/Makefile.am: Add generating of table of programmers in programmers.texi + +2012-02-03 Rene Liebscher + + bug #34768 Proposition: Change the name of the AVR32 devices + * avrdude.conf.in: renamed ucr2 to uc3a0512 + * avrpart.c: added cast to avoid compiler warning + +2012-02-03 Joerg Wunsch + + * fileio.c (fileio_elf): Fix a copy'n-paste-o. + +2012-02-03 Joerg Wunsch + + * par.c (par_desc): Move to end of file, outside the #if + HAVE_PARPORT + +2012-02-02 Joerg Wunsch + + Implement ELF file reading (finally). Requires libelf(3) to be + present on the host system. + * configure.ac (HAVE_LIBELF): Add logic to detect presence of + libelf(3) + * Makefile.am (avrdude_LDADD): Add @LIBELF@ + * fileio.h (FILEFMT): add FMT_ELF + * fileio.c: Implement ELF file reader. + * update.c (parse_op): add 'e' format specifier + * avrdude.1: Document the ELF file reading capability + * doc/avrdude.texi: (Dito.) + +2012-02-01 Rene Liebscher + + bug #30559 Ft232 bit-bang support + * ft245r.[ch]: new programmer type implementation + * configure.ac: add pthread as link library + * avrdude.conf.in: added some new programmers + * Makefile.am: added new source files to compile + * pindefs.h: change PIN_MASK, PIN_INVERSE to highest bit of unsigned int + * pgm.[ch]: added generic function to print pin assignments (taken from par.c) + * par.c: moved pin assigment print function to pgm.c + +2012-02-01 Joerg Wunsch + + * lexer.l: Sort keyword tokens into alphabetic order. + +2012-01-31 Rene Liebscher + + * config_gram.y, lexer.l: removed unused ID/TKN_ID definitions + * config.[hc]: removed unused function id(), use value.type to select + values + +2012-01-31 Rene Liebscher + + patch #7437 modifications to Bus Pirate module + patch #7686 Updating buspirate ascii mode to current firmware, use AUX + as clock generator, and setting of serial receive timeout + * buspirate.c: added paged_write, changed binary mode setup/detection, + added clock output on AUX pin + * avrdude.1: updated documentation + * doc/avrdude.texi: updated documentation + +2012-01-31 Rene Liebscher + + Parser does not need to know all programmer types now, new programmers + will update only the table in pgm_type.c. + * config_gram.y, lexer.l: removed programmer type keywords, + use now locate_programmer_type() function + * pgm_type.[ch]: added new files for table of programmer types + * main.c: allow list of programmer types by -c ?type + * avrdude.conf.in: changed all type keywords to quoted strings + * doc/avrdude.texi: changed description of type definition, list + of valid types is now included from generated file + * doc/Makefile.am: generate list of programmer types for doc + * all programmers [hc]: add xxx_desc string for description of programmer + +2012-01-30 Rene Liebscher + + * configure.ac: fixed detection of yylex_destroy availability + by checking the version number of flex; bump required autoconf + version to 2.60 (for AC_PROG_SED) + +2012-01-30 Joerg Wunsch + + * lexer.l: Replace the old, now-defunct #define YY_NO_UNPUT by + the new %option nounput. This gets rid of a compiler warning. + +2012-01-30 Joerg Wunsch + + Add a connection_type attribute to each programmer, rather than + trying to hard-code the default port name in main.c. + * pgm.h: Add conntype to struct pgm. + * lexer.l: Extend grammar for connection_type. + * config_gram.y: (Dito.) + * config.h: Add DEFAULT_USB, for symmetry with default_parallel + and default_serial. + * main.c: Replace old default portname hack by avrdude.conf-based + knowledge. + * usbtiny.c: Drop an old hack that's no longer necessary. + * avrdude.conf.in: Add connection_type to each programmer + definition. + +2012-01-27 Rene Liebscher + + * avrdude.conf.in: used parent parts for some other parts, added + abstract .xmega part as parent for xmegas + * main.c: hide parts starting with '.' from parts list + +2012-01-22 Rene Liebscher + + patch #7688: Implement parent programmers feature + * avrdude.conf.in: updated documentation comment and some programmers + have now parents + * config_gram.y: initpgm will now called at first use of programmer + in main. parser sets only the function pointer in the pgm structure. + Pin and pin lists definitions can now be empty to remove the parents + setting. + * doc/avrdude.texi: updated documentation + * main.c: added call to pgm->initpgm after locate_programmer + * pgm.[hc]: added field initpgm in structure, added function pgm_dup + +2012-01-21 Rene Liebscher + + bug #21797: AT90PWM316: New part description + * avrdude.conf.in: added pwm316 with parent pwm3b but 16KB flash + +2012-01-20 Joerg Wunsch + + * configure.ac: Check for presence of lusb_usb.h as an alternative + to usb.h; libusb-win32 switched to this name in version 1.2.5.0. + * avrftdi.c: Decide whether to include , or . + * ser_avrdoper.c: (Dito.) + * usbasp.c: (Dito.) + * usb_libusb.c: (Dito.) + * usbtiny.c: (Dito.) + +2012-01-19 Rene Liebscher + + * avr.c: Unsigned variable was used for return code of paged_write/load + functions. So a negative return code led never to a fallback to byte + functions. + +2012-01-17 Rene Liebscher + + bug #34302: Feature request : device configuration with parent classes + * config_gram.y: if memory section is overwritten old entry is removed + + (not in original patch) + * config_gram.y: if programmer or part is defined twice, a warning is + output and the first instance is removed + + General cleanup and free functions, so valgrind does not report any lost + blocks at program end. + * avrpart.[hc]: added avr_free_(opcode|mem|part) functions + * pgm.[hc]: added pgm_free function + * update.[hc]: added free_update functions + * config.[hc]: added cleanup_config function, use yylex_destroy to reset + the lexer after usage. (So it can be reused.) + * main.c: add cleanup_main function which is called by atexit() (This + frees all lists so that at program exit only really lost memory is + reported by valgrind.) + * usbasp.c: added libusb_free_device_list() and libusb_exit() calls to + avoid lost memory + * buspirate.c: moved memory allocation from initpgm to setup and added + free in teardown + * configure.ac: add definition of HAVE_YYLEX_DESTROY if $LEX is flex. + * Makefile.am: added . in front of SUBDIRS to build avrdude before trying + to use it for creating the part list for the docs. + +2012-01-17 Rene Liebscher + + * usbasp.c: USB vid/pid/vendor/product from config file are used, for + id "usbasp" nibobee and old usbasp are tried as they were currently + implemented within usbasp + * avrdude.conf.in: added usb params to "usbasp", added new entry "nibobee" + with params which were hardcoded in usbasp.c, and added an entry + "usbasb-clone" which only checks vid/pid. + +2012-01-10 Rene Liebscher + + bug #35261 avrftdi uses wrong interface in avrftdi_paged_(write|load) + * avrftdi.c: Fixed interface and implementation of avrftdi_paged_(write|load) + patch #7672 adding support for O-Link (FTDI based JTAG) as programmer + * avrdude.conf.in: added o-link entry + +2012-01-10 Rene Liebscher + + patch #7699 Read additional config files + * main.c: Added reading of additional config files + * avrdude.1: updated man page + * doc/avrdude.texi: updated documentation + +2012-01-10 Joerg Wunsch + + Submitted by Bob Frazier: + bug #35208: avrdude 5.11 on freebsd 8.2-STABLE does not reset + Arduino Uno properly + * arduino.c (arduino_open): Bump the timeout between pulling + the DTR and RTS lines low and high. + +2012-01-08 Rene Liebscher + + Fixed following findings reported by cppcheck + * avr910.c:625 (error) Possible null pointer dereference: cmd - otherwise it is redundant to check if cmd is null at line 624 + * avr910.c:626 (error) Possible null pointer dereference: cmd - otherwise it is redundant to check if cmd is null at line 624 + * avr910.c:168 (information) The scope of the variable 'devtype_1st' can be reduced + * avr910.c:169 (information) The scope of the variable 'dev_supported' can be reduced + * avrftdi.c:647 (error) Using sizeof for array given as function argument returns the size of pointer. + * stk500v2.c:3347 (error) Memory leak: b + * stk500v2.c:3452 (error) Memory leak: b + * usbasp.c:554 (error) Using sizeof for array given as function argument returns the size of pointer. + * usbasp.c:485 (information) The scope of the variable 'dly' can be reduced + +2012-01-03 Joerg Wunsch + + Reported by Jason Kotzin: + * usbasp.c (usbasp_spi_paged_load, usbasp_spi_paged_write): + Fix buffer address calculation. + +2012-01-03 Rene Liebscher + + patch #7629 add support for atmega48p + * avrdude.conf.in: Added m48p with parent m48 + different signature + + * avrdude.conf.in: made part parents (m88p = m88 + different signature, + m168p = m168 + different signature) + +2012-01-02 Rene Liebscher + + bug #21663 AT90PWM efuse incorrect + bug #30438 efuse bits written as 0 on at90pwmxx parts + * avrdude.conf.in: (pwm2, pwm2b, pwm3, pwm3b) : Write + eight bits + + * avrdude.conf.in: made part parents (pwm3 = pwm2, pwm3b = pwm2b, + pwm2b = pwm2 + different signature) + + * ChangeLog-2011: New file, rotate ChangeLog for new year. diff --git a/xs/src/avrdude/ChangeLog-2013 b/xs/src/avrdude/ChangeLog-2013 new file mode 100644 index 000000000..8e975ef6e --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2013 @@ -0,0 +1,618 @@ +2013-12-15 Nils Springob + + * pgm.c/pgm.h: fixed syntax error in const pointer to const + +2013-12-05 Joerg Wunsch + + * configure.ac: bump version to 6.1-svn-20131205 + +2013-12-05 Joerg Wunsch + + bug #40817: Elf file support (possibly) not working on 6.0.1 windows build + * fileio.c (fileio): open file in binary mode also for FMT_ELF + +2013-12-04 Rene Liebscher + + Rework of bitbanging functions setpin, getpin, highpulsepin to make simplier use + of new pindefs data in pgm structure + * linuxgpio.c, bitbang.c, buspirate.c, par.c, pgm.h, term.c, serbb_*.c: changed + interface of setpin, getpin, highpulsepin to take pin function as parameter + (not the real number, which can be found by pgm->pinno[function]) + +2013-11-30 Rene Liebscher + + bug #40748 linuxgpio doesn't work on Raspberry PI rev. 2. + * linuxgpio.c: fixed check for unused pins to ignore the inverse flag + * pindefs.c: fixed fill_old_pinlist to not create an empty mask with inverse flag set + +2013-10-18 Nils Springob + + * avrdude.conf.in (atmega1284): ATmega1284 variant added (same as ATmega1284p but with different signature) + +2013-09-25 Hannes Weisbach + + First part of patch #7720: + * avrdude.conf.in: Add UM232H and C232H programmers + +2013-09-22 Joerg Wunsch + + Submitted by Daniel Rozsnyo: + bug #40085: Typo fix in fuses report (for 6.1-svn-20130917) + * main.c: Fix a typo. + +2013-09-19 Hannes Weisbach + + task #12798: Please cleanup #ifdef notyet entries in avrftdi.c + * avrftdi.c: ditto. + avrftdi.c: Remove DRYRUN-option. + +2013-09-17 Joerg Wunsch + + bug #40055: AVRDUDE segfaults when writing eeprom + * main.c: Always clear the UF_AUTO_ERASE flag if either a + non-Xmega device was found, or the programmer does not offer a + page_erase method. + +2013-09-17 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version to post-6.0. + +2013-09-17 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version to 6.0. + +2013-09-17 Joerg Wunsch + + * jtag3.c (jtag3_initialize): Fix a buffer overflow by limiting + the flash page cache size to at most "readsize". For Xmegas with + a page size of 512 bytes, the maximum USB packet size was + overflowed, and subsequently, a memmove copied beyond the end of + the allocated buffer. + * jtag3.c (jtag3_read_byte): Add the correct offset also for the + various flash regions, so reading the apptable or boot regions + yields the correct data. + +2013-09-16 Joerg Wunsch + + Submitted by Joakim Lubeck: + bug #40040: Support for ATtiny20 and ATtiny40 + * avrdude.conf.in: Restructure the reduced-core tiny devices + to use a common entry .reduced_core_tiny; add ATtiny20 and + ATtiny40 + +2013-09-15 Joerg Wunsch + + Submitted by Joakim Lubeck: + bug #40033: Support for the XMegaE5 family + * avrdude.conf.in (ATxmega8E5, ATxmega16E5, ATxmega32E5): New + entries. + +2013-09-13 Joerg Wunsch + + * stk500v2.c (stk500v2_set_sck_period): Revamp this to match the + description/pseudo-code in appnote AVR068. + +2013-09-13 Joerg Wunsch + + Submitted by Stephen Roe: + patch #7710: usb_libusb: Check VID/PID before opening device + * usb_libusb.c (usbdev_open): Swap the sequence of verifying the + VID:PID, and opening the device. + +2013-09-13 Joerg Wunsch + + patch #8176: butterfly.c (AVR109 protocol implementation) clean-up and bug-fixing + * butterfly.c (butterfly_page_erase): Add dummy function to avoid + segfault when writing to EEPROM. + +2013-09-13 Joerg Wunsch + + bug #35474 Feature request: print fuse values in safemode output + * config_gram.y: New configuration token "default_safemode". + * lexer.l: (Dito.) + * avrdude.conf.in: (Dito.) + * config.h: Add variable default_safemode. + * config.c: (Dito.) + * main.c: Handle default_safemode, including -u option. + * avrdude.1: Document all this. + * doc/avrdude.texi: (Dito.) + +2013-09-13 Joerg Wunsch + + Submitted by HubertB: + patch #7657 Add ATmega406 support for avrdude using DRAGON + JTAG + * avrdude.conf.in (ATmega406): New entry. + +2013-09-13 Joerg Wunsch + + Submitted by Marc de Hoop: + patch #7606 ATtiny43u support + * avrdude.conf.in (ATtiny43U): New entry. + +2013-09-13 Joerg Wunsch + + patch #5708 avrdude should make 10 synchronization attempts instead of just one + * stk500.c (stk500_getsync): Loop 10 times trying to get in + sync with the programmer. + +2013-09-13 Joerg Wunsch + + Contributed by Ricardo Martins: + bug #36384 ATxmega32A4 usersig size + * avrdude.conf.in: Revamp all the ATxmega* entries. Add new + entries for ATxmega128A1U, ATxmega128A3U, ATxmega128A4U, + ATxmega128B1, ATxmega128B3, ATxmega128C3, ATxmega128D3, + ATxmega16A4U, ATxmega16C4, ATxmega192A3U, ATxmega192C3, + ATxmega192D3, ATxmega256A3BU, ATxmega256A3U, ATxmega256C3, + ATxmega256D3, ATxmega32A4U, ATxmega32C4, ATxmega384C3, + ATxmega384D3, ATxmega64A1U, ATxmega64A3U, ATxmega64A4U, + ATxmega64B1, ATxmega64B3, ATxmega64C3, ATxmega64D3 + +2013-09-13 Joerg Wunsch + + bug #35456 The progress bar for STK500V2 programmer is "wrong". + * avr.c (avr_read, avr_write): Change the progress reporting for + paged read/write from per-address to per-considered-page. This + ought to give a realistic estimation about the time still to be + spent. + +2013-09-13 Joerg Wunsch + + bug #34277: avrdude reads wrong byte order if using avr911 (aka butterfly) + * butterfly.c (butterfly_read_byte_flash): Swap bytes received. + +2013-09-12 Joerg Wunsch + + bug #37768 Poll usbtiny 100 times at init time to handle low-clock devices + * doc/avrdude.texi: Add a FAQ entry about how to connect to a + target where the firmware has reduced the internal clock speed. + +2013-09-11 Joerg Wunsch + + bug #28344 chip_erase_delay too short for ATmega324P, 644, 644P, and 1284P + * avrdude.conf: Bump the chip_erase_delay for all ATmega*4 devices + to 55 ms. While the datasheet still claims 9 ms, all the XML files + tell either 45 or 55 ms, depending on STK600 or not. + +2013-09-11 Joerg Wunsch + + * fileio.c (fileio): Don't exit(1) if something goes wrong; return + -1 instead. Don't refer to obsolete option -f to specify the file + format. + +2013-09-10 Joerg Wunsch + + Submitted by Matthias Trute: + bug #36901 flashing Atmega32U4 EEPROM produces garbage on chip + * avrdude.conf.in (ATmega32U4): Fix EEPROM pagesize to 4, the + datasheet is wrong here. + +2013-09-09 Joerg Wunsch + + * configure.ac: check for ar and ranlib in the target tool + namespace, rather than on the host. + +2013-09-08 Joerg Wunsch + + Fix byte-wise EEPROM and flash writes on Xmega + * jtagmkII_private.h (MTYPE_EEPROM_XMEGA): New memory type. + * jtagmkII.c (jtagmkII_write_byte): For Xmega EEPROM, use + memory type MTYPE_EEPROM_XMEGA; for flash writes, always + write 2 bytes starting on an even address. + +2013-09-08 Joerg Wunsch + + * term.c: Implement the "verbose" terminal mode command. + * avrdude.1: Document this. + * doc/avrdude.texi: (Dito.) + +2013-09-07 Joerg Wunsch + + * jtag3.c (jtag3_write_byte): Do not attempt to start the paged + algorithm for EEPROM when being connected through debugWIRE. + +2013-09-06 Joerg Wunsch + + Extend the single-byte algorithm to all devices, both flash and + EEPROM. (Flash cells must have been erased before though.) + * jtag3.c (jtag3_initialize): OCDEN no longer needs to be + considered; a session with "programming" purpose is sufficient + * jtag3.c (jtag3_write_byte): Use the paged algorithm for all + flash and EEPROM areas, not just Xmega. + +2013-09-05 Joerg Wunsch + + Fix single-byte EEPROM updates on Xmega: + * jtag3_private.h (MTYPE_EEPROM_XMEGA): New define. + * jtag3.c (jtag3_write_byte): When updating flash or + EEPROM on Xmega devices, resort to jtag3_paged_write() + after filling and modifying the page cache. + * jtag3.c (jtag3_paged_write): use MTYPE_EEPROM_XMEGA + where appropriate. + * jtag3.c (jtag3_initialize): Open with debugging intent + for Xmega devices, so single-byte EEPROM updates will + work. + +2013-09-04 Joerg Wunsch + + Submitted by Matthias Neeracher: + bug #38732: Support for ATtiny1634 + * avrdude.conf.in (ATtiny1634): New entry. + +2013-09-03 Joerg Wunsch + + Submitted by Brane Ždralo: + patch #7769: Write flash fails for AVR910 programmers + * avr910.c (avr910_paged_write): Fix flash addresses in + 'A' command. + +2013-09-03 Joerg Wunsch + + Submitted by Fred (magister): + bug #38951: AVR109 use byte offset instead of word offset + patch #8045: AVR109 butterfly failing + * butterfly.c (butterfly_paged_load, butterfly_paged_write): + fix calculation of 'A' address when operating on flash memory. + It must be given in terms of 16-bit words rather than bytes. + +2013-09-03 Rene Liebscher + + * avrftdi.c, avrftdi_private.h: added tx buffer size, and use + smaller block sizes as larger sometimes hang + +2013-09-03 Joerg Wunsch + + * avrdude.h: Remove the erase cycle counter (options -y / -Y). + * avr.c: (Dito.) + * main.c: (Dito.) + * avrdude.1: Undocument -y / -Y. + * doc/avrdude.texi: (Dito.) + +2013-09-03 Joerg Wunsch + + bug #39691 Buffer overrun when reading EEPROM byte with JTAGICE3 + * jtag3.c (jtag3_initialize): initialize the eeprom_pagesize + private attribute so the page cache will actually be usable + +2013-09-03 Joerg Wunsch + + bug #38580 Current svn head, xmega and fuses, all fuses tied to fuse0 + * jtag3.c (jtag3_read_byte, jtag3_write_byte): Correctly apply the + relevant part of mem->offset as the address to operate on. + +2013-09-03 Joerg Wunsch + + * fileio.c: Fix "unused variable" warnings. + * avr.c: (Dito.) + * stk500v2.c: (Dito.) + * stk500.c: (Dito.) + * jtagmkII.c: (Dito.) + * term.c: (Dito.) + * ser_posix.c: (Dito.) + +2013-09-02 Joerg Wunsch + + Submitted by Travis Griggs: + bug #38307: Can't write usersig of an xmega256a3 + * stk500v2.c (stk600_xprog_page_erase): allow erasing the usersig space. + +2013-09-02 Joerg Wunsch + + Submitted by Robert Niemi: + bug #35800: Compilation error on certain systems if parport is disabled + * linux_ppdev.h: Conditionalize inclusion of and + on HAVE_PARPORT + +2013-09-02 Joerg Wunsch + + bug #39794: warnings when building avrdude 6.0rc1 under CentOS 6.4 + * pickit.c (usb_open_device): Use %p rather than %X to print "handle" + which is a pointer + * jtag3.c (jtag3_initialize): Initialize "flashsize" to be sure it + proceeds with a valid value. + +2013-09-02 Joerg Wunsch + + bug #39794: warnings when building avrdude 6.0rc1 under CentOS 6.4 + * buspirate.c: Turn the "cmd" argument of the various methods into + a "const unsigned char *"; while doing this, declare all arrays being + passed as arguments to be pointers rather than arrays, as the latter + obfuscates the way arrays are being passed to a callee in C. + * avrftdi.c: (Dito.) + * pickit2.c: (Dito.) + * ft245r.c: (Dito.) + * avr910.c: (Dito.) + * stk500.c: (Dito.) + * bitbang.c: (Dito.) + * bitbang.h: (Dito.) + * avrftdi_tpi.c: (Dito.) + * avrftdi_tpi.h: (Dito.) + * usbasp.c: (Dito.) + * stk500v2.c: (Dito.) + * pgm.h: (Dito.) + * usbtiny.c: (Dito.) + +2013-09-02 Joerg Wunsch + + bug #38023: avrdude doesn't return an error code when attempting + to upload an invalid Intel HEX file + * fileio.c (ihex2b): Turn the "No end of file record found" warning + into an error if no valid record was found at all. + +2013-09-02 Joerg Wunsch + + Submitted by Claus-Justus Heine: + bug #38713: Compilation of the documentation breaks with texinfo-5 + * doc/avrdude.texi: Turn @itemx into @item, add @headitem to STK600 + Routing/Socket card table + +2013-09-02 Joerg Wunsch + + * usbasp.c: Add trace output for -vvv to non-TPI functions, too. + +2013-09-01 Joerg Wunsch + + * usbasp.c (usbasp_tpi_paged_load): Calculate correct + buffer address. + * usbasp.c (usbasp_tpi_paged_write): Calculate correct + buffer address; don't issue a SECTION_ERASE command for + each page (a CHIP_ERASE has been done before anyway); + remove the code that attempted to handle partial page + writes, as all writes are now done with a full page. + +2013-09-01 Joerg Wunsch + + * usbasp.c: Add more trace output, by now only for the TPI + functions. + +2013-08-31 Joerg Wunsch + + * usbasp.c (usbasp_transmit): Add -vvvv trace output. + +2013-08-30 Joerg Wunsch + + bug #39893: Verification failure with AVRISPmkII and Xmega + * stk500v2.c (stk600_xprog_page_erase): Fix argument that is + passed to stk600_xprog_memtype() + +2013-07-11 Joerg Wunsch + + * fileio.c (elf2b): replace elf_getshstrndx() by + elf_getshdrstrndx() as the former one is deprecated + +2013-06-19 Rene Liebscher + + use bitbanging on ftdi mpsse when wrong pins are used + * avrftdi.c, avrftdi_private.h: added additional pin check + and bitbanging fallback + * pindefs.[ch]: added a flag to enable/disable output + * ft245r.c: changes because of added flag above + +2013-05-17 Joerg Wunsch + + Submitted by "Malte" and John McCorquodale: + patch #7876 JTAGICE mkII fails to connect to attiny if debugwire + is enabled AND target has a very slow clock + * jtagmkII.c (jtagmkII_getsync): When leaving debugWIRE mode + temporarily, immediately retry with ISP, rather than leaving. + * stk500v2 (stk500v2_program_enable): Implemented similar logic + for the JTAGICE3. + +2013-05-16 Rene Liebscher + + * configure.ac: reactivate check for TYPE_232H, which does not + exist in libftdi < 0.20 + * avrftdi*.*: changed include check for libftdi/libusb, deactivate + 232H if not available + * ft245r.c: changed include check for libftdi/libusb + +2013-05-08 Joerg Wunsch + + * main.c (main): Add option -l logfile. + * avrdude.1: Document -l option. + * doc/avrdude.texi: (Dito.) + +2013-05-15 Rene Liebscher + + * configure.ac: if both found libftdi and libftdi1 use only libftdi1 + * avrdude.conf.in: fixed buff pins of avrftdi programmers (low + active buffer need now inverted numbers) + * avrftdi*.*: accept also old libftdi (0.20 still works with it), + added powerup to initialize + * ft245r.c: accept libftdi1, code cleanup and make it more similar + to avrfdti (os they might be merged someday) + +2013-05-08 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version to 6.0rc1. + +2013-05-07 Hannes Weisbach + + * avrftdi_private.h: Change size of pin_checklist to N_PINS (from N_PINS-1) + * avrftdi.c: Adapt code to new size of pin_checklist. Remove pins_check() + from set_pin(). + Add pgm->power[up|down] functions as well as fill pgm->enable|disable with + proper content as suggested by Rene Liebscher. + +2013-05-05 Rene Liebscher + + * pindefs.h: use unsigned int if stdint.h is not available and UINT_MAX is 0xffffffff + otherwise use unsinged long + * ft245r.c: added support for more pin functions led, vcc, buff + +2013-05-06 Hannes Weisbach + + * avrftdi_tpi.c: instead of private set_pin() function pointer use the one + declared in struct PROGRAMMER. + * avrftdi_private.h: remove set_pin function pointer. Add pin_checklist_t + member to check pgm->setpin calls during runtime. + * avrftdi.c: remove set_pin function pointer init, add pgm->setpin init. + Convert avrftdi to new 0-based pindefs infrastructure. + * avrdude.conf.in: Change all avrftdi-based programmers' pin definitions to + 0-based. + +2013-05-06 Joerg Wunsch + + * pindefs.h: Include "ac_cfg.h" before testing for HAVE_* macros. + +2013-05-05 Rene Liebscher + + * main.c: revert to rev 1159 (doing pgm_display after pgm_open) + * avrpart.[ch]: moved avr_pin_name to pindefs.[ch] + * pgm.c: moved pins_to_str to pindefs.[ch], added initialization of + new pin definitions in pgm_new() + * pindefs.[ch]: added moved functions from other files, added a lot of + documentation, reformatted files using astyle to have consistent spacing, + added a new generic check function for pins + * ft245r.c: used new generic pin check function + +2013-05-03 Rene Liebscher + + Create new pin definition data structures to support 0-based pin numbers, + and mixed inverse/non-inverse pin lists. + * avrftdi.c,buspirate.c,linuxgpio.c,par.c,serbb_*.c: added function call + to fill old pinno entries from new pin definitions. + * pindefs.[hc]: added data struct and helper functions for new pin definitions + * avrdude.conf.in: pins in entries using ftdi_syncbb are now 0-based + * config_gram.y: allow combinations of inverted and non-inverted pins in pin lists + * ft245r.c: reworked to work directly with the new pin definitions, + pins are now 0-based, inverse pins are supported, buff is supported + * pgm.[ch]: added new pin definitions field to programmer structure, + adapted pin display functions + +2013-05-03 Hannes Weisbach + + * avrftdi_private.h: Remove update forward declaration from avrftdi_print to + avrftdi_log. + * avrftdi_tpi.c: Do all I/O in terms of pgm->cmd_tpi()-calls instead of + avrftdi_tpi_[read,write]_byte(). + Remove unnecessary set_pin call to set MOSI high, speeds up I/O. + Removes SKEY array, moves it to tpi.h. + Integrate new avr_tpi_[program_enable,chip_erase]() and functions into + avrftdi_tpi. + * avrftdi_tpi.h: Remove avrftdi_tpi_[program_enable,chip_erase] forward + declarations. + * avr.c: Adds avr_tpi_chip_erase() generic TPI chip erase function. + Adds avr_tpi_program_enable() - generic TPI external programming enable + function. Sets guard time, reads identification register, sends SKEY command + and key, checks NVMEN bit. The required guard time has to be passed as + parameter. + * tpi.h: Adds SKEY array including CMD_SKEY in "correct" order. + +2013-05-02 Hannes Weisbach + + * avrftdi_private.h: Add libusb-1.0 include to fix include order in windows. + * NEWS: Add notice avrftdi supporting TPI + * avr.c: Fix avr_tpi_poll_nvmbsy() - poll read data instead of return code + * avrftdi_private.h, avrftdi.c: move logging #defines to from avrftdi.c to + avrftdi_private.h, so that they are available for avrftdi_tpi, too. + +2013-04-30 Hannes Weisbach + + * tpi.h: Add definition for TPI Identification Code + * avrftdi_tpi.c: Add TPI-support for FTDI-based programmers + * avrftdi_private.h: Add common include file for FTDI-based programmers + +2013-04-28 Hannes Weisbach + + * avrftdic: Rework of textual output. Messages are divided by severity and + printed accordingly to the verbosity, as specified by the user. The provided + severity level are (ERROR, WARN, INFO, DEBUG, TRACE). Where "ERROR" messages + are always printed. Shortcut-macros including function, from which the + output was generated, and line number were also added. + Some log messages were updated and other code warnings removed. + +2013-04-27 Hannes Weisbach + + * configure.ac: Add libftdi1 library check, remove TYPE_232H DECL check + * Makefile.am: Add @LIBFTDI1@ to avrdude_LDADD + * avrftdi.c: Update from libftdi0 to libftdi1. Use libftdi1's function to + find a device by vid/pid/serial instead of doing it ourself and add/update + error messages. avrftdi_print is changed so that a message is printed when + the verbosity level is greater or equal the message level, to have always-on + messages. + Fix a bug where the RX fifo of the FTDI chip is full, resulting in STALL/NAK + of the ongoing OUT request and subsequently timeout, because an IN request + cannot be issued due to the synchronous part of libftdi. This should fix + #38831 and #38659. + +2013-04-25 Joerg Wunsch + + * configure.ac(AC_CONFIG_HEADERS): Replace the old AM_CONFIG_HEADER + by this; automake 1.13+ barfs. + +2013-03-12 Joerg Wunsch + + * avrdude.conf.in (ATmega2564RFR2, ATmega1284RFR2, ATmega644RFR2): + New devices + +2013-01-30 Rene Liebscher + + patch #7724 Add TPI support for Bus Pirate using bitbang mode + * buspirate.[ch]: added support for BusPirate Bitbanging + * pgm_type.c: added entry for buspirate_bb + * avrdude.conf.in: added entry for buspirate_bb + +2013-01-30 Rene Liebscher + + patch #7936 Patch to support BusPirate AVR Extended Commands mode + * buspirate.c: added support for BusPirate AVR Extended Commands mode + * avrdude.1: added doc for nopagedread parameter + * doc/avrdude.texi: added doc for nopagedread parameter + +2013-01-30 Rene Liebscher + + patch #7723 Bus Pirate “raw-wire†mode which can run down to 5 kHz + * buspirate.c: added raw wire mode + * avrdude.1: added doc for rawfreq parameter + * doc/avrdude.texi: added doc for rawfreq parameter + +2013-01-30 Rene Liebscher + + bug #37977 Support for Openmoko Debug Board + * avrdude.conf.in: added openmoko entry + +2013-01-29 Rene Liebscher + + patch #7932 Read USBtiny VID and PID from avrdude.conf if provided. + * avrdude.conf.in: added usbpid, usbvid to usbtiny + * usbtiny.[ch]: use usbpid, usbpid if provided in config file + +2013-01-26 Joerg Wunsch + + bug #38172: avrftdi: Incorrect information in avrdude.conf + * avrdude.conf.in (avrftdi): fix comments about ACBUS vs. ADBUS; + add a comment that the MPSSE signals are fixed by the FTDI + hardware and cannot be changed + +2013-01-09 Rene Liebscher + + patch #7165 Add support for bitbanging GPIO lines using the Linux sysf GPIO interface + * doc/avrdude.texi,avrdude.1: added doc for linuxgpio + * avrdude.conf.in: added template for linuxgpio programmer + * config_gram.y: pin numbers restricted to [PIN_MIN, PIN_MAX] + * pindefs.h: added PIN_MIN, PIN_MAX, removed unused LED_ON/OFF + * configure.ac: configure option enable-linuxgpio, print of enabled options + * linuxgpio.[ch]: new source for linuxgpio programmer + * Makefile.am: added linuxgpio to sources list + * pgm_type.c: added linuxgpio to programmer types list + +2013-01-08 Joerg Wunsch + + * jtagmkI.c (jtagmkI_prmsg): replace a putchar() by putc(...stderr) + * jtagmkII.c (jtagmkII_prmsg): (Dito.) + * jtag3.c (jtag3_prevent, jtag3_prmsg): (Dito.) + +2013-01-02 Joerg Wunsch + + * usb_libusb.c (usbdev_open): Downgrade the max transfer size for + the main data endpoints when being forced so by the USB; this can + happen when attaching the JTAGICE3 to a USB 1.1 connection + * jtag3.c (jtag3_initialize): When detecting a downgraded max + transfer size on the JTAGICE3 (presumably, due to being connected + to USB 1.1 only), bail out as its firmware cannot properly handle + this (by now) + +2013-01-02 Joerg Wunsch + + * ChangeLog: annual ChangeLog rotation time diff --git a/xs/src/avrdude/ChangeLog-2014 b/xs/src/avrdude/ChangeLog-2014 new file mode 100644 index 000000000..3fe7a53aa --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2014 @@ -0,0 +1,697 @@ +2014-11-26 Joerg Wunsch + + * ser_win32.c (net_send): Properly declare argument 2 as being a + pointer to const data. + +2014-11-25 Joerg Wunsch + + patch #8380: adds 500k 1M 2M baud to ser_posix.c + * ser_posix.c: Add a hack to allow for arbitrary baud rates on + Linux + +2014-11-25 Joerg Wunsch + + patch #8437: [PATCH] Serial-over-ethernet for Win32 + * configure.ac: Check for ws2_32 library + * ser_win32.c: Add hooks for forwarding serial data over + TCP connections + * avrdude.1: Drop previous restriction of -P net: + * doc/avrdude.conf: (Dito.) + +2014-11-24 Joerg Wunsch + + bug #42908: no external reset at JTAGICE3 + * jtag3.c (jtag3_initialize): Retry with external reset applied if + the first sign-on attempt fails. + +2014-11-23 Joerg Wunsch + + * main.c: Allow the -B option argument to be suffixed with Hz, + kHz, or MHz, in order to specify a bitclock frequency rather than + period. + * avrdude.1: Document the -B option changes. + * doc/avrdude.texi: (Dito.) + +2014-11-23 Joerg Wunsch + + bug #40870: config nitpick: ATtiny25/45/85 have 1 calibration byte not 2 + * avrdude.conf.in (ATtiny25, ATtiny45, ATtiny85): Fix size of + "calibration" memory area + +2014-11-23 Joerg Wunsch + + bug #43137: Writing and reading incorrect pages when using jtagicemkI + * jtagmkI.c (jtagmkI_paged_write, jtagmkI_paged_load): correctly + calculate the size of a partial (non-pagesize) buffer + +2014-11-23 Joerg Wunsch + + bug #43078: AVRDUDE crashes after sucessfully reading/writing eeprom + * jtag3.c (jtag3_edbg_recv_frame): Return correct length as + reported in the response packet, rather than full 512 byte which + are always reported by the CMSIS-DAP layer. Miscalculations + based on the wrongly reported length caused heap corruption + elsewhere, so this is presumably also a fix for bug #43078. + +2014-11-20 Joerg Wunsch + + bug #41561: AVRDUDE 6.0.1/USBasp doesn't write first bytes of + flash page + * usbasp.c (usbasp_spi_paged_write): Remove USBASP_BLOCKFLAG_LAST. + It is no longer needed, as we always write full pages now in paged + write mode. + +2014-11-19 Joerg Wunsch + + bug #43626: Inconsistent timeouts in stk500v2 + * stk500v2.c (stk500v2_recv): Add a reference to the bug report + but don't change anything, lest to break it somehow + +2014-11-14 Rene Liebscher + + patch #8529 2 more ftdi_syncbb devices + * avrdude.conf.in: added 2 new programmers + +2014-11-14 Rene Liebscher + + bug #40142 Floating point exception on Ubuntu 10.04 + * avr.c: avoid division by zero in report_progress(), eg. when + writing an empty eeprom file were total becomes 0 + +2014-11-13 Rene Liebscher + + patch #8504 buspirate: Also support "cpufreq" extended parameter + in binary mode + * buspirate.c: applied patch + switch off at disable (even when + a reset follows) + some general whitespace/tab cleanup + +2014-10-15 Joerg Wunsch + + bug #37441: lockbits in ATxmega + avrdude = problem + * fileio.c: replace strmcp(..., "lock") by strncmp(..., "lock", 4) + where applicable + * jtag3.c: (Dito.) + * jtagmkII.c: (Dito.) + +2014-10-07 Joerg Wunsch + + bug #42267: jtag3isp fails to read lock and fuse bytes directly + after changing lock byte + * stk500v2.c (stk500isp_write_byte): As a workaround for broken + tool firmware, add 10 ms of delay before returning from any + single-byte write operation. + +2014-10-06 Joerg Wunsch + + * stk500v2.c: Use stk500isp_read_byte/stk500isp_write_byte for + every byte-wide access (rather than JTAGICE3 only). This finally + obsoletes the use of the prehistoric SPI_MULTI command where + AVRDUDE used to assemble all the low-level ISP stuff by itself. + +2014-10-06 Joerg Wunsch + + bug #22248: Read efuse error + * avrdude.conf.in (m168, m328, m48, m88, t1634, t26, t261, t461, + t861, t88): In efuse (or hfuse for t26) read operation, turn all + bits in byte 3 from "x" to "o" (output); this is a first step + towards fixing the symptoms mentioned in the bug, by unifying the + behaviour between different AVRs. Not touched are the historic + devices where the fuses are not documented to form a full byte + each (2333, 4433, 4434, 8535, m103, m161, m163). + +2014-09-22 Joerg Wunsch + + bug #43268: usb_drain() call causes LUFA AVR-ISP MKII Code to Fail + * usb_libusb.c (usbdev_drain): Make this a dummy function only. + +2014-08-19 Rene Liebscher + + patch #7694 Add support for the atmega32m1 + * avrdude.conf.in: added ATmega32M1 + +2014-08-18 Rene Liebscher + + patch #8440 Print part id after signature + When printing the part signature also print the part id. + * avrpart.c (locate_part_by_signature): New function. + * libavrdude.h (locate_part_by_signature): New function. + * main.c (main): Use the new function to find the part and print its id. + +2014-08-18 Rene Liebscher + + patch #8511 Fix reset on FT245R + * ft245r.c: applied patch + +2014-08-18 Rene Liebscher + + bug #43002 usbasp debug output typo + * usbasp.c: fixed typos + +2014-07-16 Joerg Wunsch + + bug #42662 clang warnings under FreeBSD 10.x + * avrftdi.h: Fix header guard macro name. + * pgm_type.c (programmers_types): Remove duplicate "const". + +2014-07-16 Rene Liebscher + + bug #42662 clang warnings under FreeBSD 10.x + * avrftdi.c: remove warnings + * buspirate.c: (Dito.) + * dfu.c: (Dito.) + * fileio.c: (Dito.) + * libavrdude.h: (Dito.) + * pickit2.c: (Dito.) + * safemode.c: (Dito.) + * ser_avrdoper.c: (Dito.) + * ser_posix.c: (Dito.) + * ser_win32.c: (Dito.) + * stk500v2.c: (Dito.) + * usb_libusb.c: (Dito.) + * usbasp.c: (Dito.) + + * config_gram.y: fix problem when using parent part with usbpid lists + (existing list was extended not overwritten) + +2014-07-11 Axel Wachtler + + * avrftdi.c: rollback to vfprintf, fixed error from -r1305, (patch #8463) + +2014-06-23 Rene Liebscher + + * linux_ppdev.h: added missing msg level for avrdude_message + in ppi_claim/ppi_release macros + * avrftdi.c: added break at end of default + +2014-06-21 Rene Liebscher + + patch #8419 fix ftdi_syncbb hang with libftdi 1 + * ft245r.c: set pthread cancel type to asynchronous, reorder ftdi_usb_close/deinit + +2014-06-17 Rene Liebscher + + * avrftdi_private.h: added missing msg level for avrdude_message + in E/E_VOID macros + +2014-06-17 Rene Liebscher + + Removing exit calls from config parser + * config.h: cleanup, left only internally needed definitions + * config.c: removed exit calls, use yyerror and yywarning + * config_gram.y: (Dito.) + * lexer.l: (Dito.) + * libavrdude.h: removed internal definitions of config parser + * main.c: removed yyerror, it is now in config.c + * jtagmkII.c: added missing free in error case + * pgm.c: replaced exits by returns + * pickit2.c: add missing return + +2014-06-13 Axel Wachtler + + start removing global "verbose" variable, for avrdude library. + * arduino.c: added verbose level in avrdude_message() + * avr910.c: (Dito.) + * avr.c: (Dito.) + * avrdude.h: (Dito.) + * avrftdi.c: (Dito.) + * avrpart.c: (Dito.) + * bitbang.c: (Dito.) + * buspirate.c: (Dito.) + * butterfly.c: (Dito.) + * config.c: (Dito.) + * config_gram.y: (Dito.) + * dfu.c: (Dito.) + * fileio.c: (Dito.) + * flip1.c: (Dito.) + * flip2.c: (Dito.) + * ft245r.c: (Dito.) + * jtag3.c: (Dito.) + * jtagmkI.c: (Dito.) + * jtagmkII.c: (Dito.) + * lexer.l: (Dito.) + * libavrdude.h: (Dito.) + * linuxgpio.c: (Dito.) + * main.c: (Dito.) + * par.c: (Dito.) + * pgm.c: (Dito.) + * pickit2.c: (Dito.) + * pindefs.c: (Dito.) + * ppi.c: (Dito.) + * ppiwin.c: (Dito.) + * safemode.c: (Dito.) + * ser_avrdoper.c: (Dito.) + * serbb_posix.c: (Dito.) + * serbb_win32.c: (Dito.) + * ser_posix.c: (Dito.) + * ser_win32.c: (Dito.) + * stk500.c: (Dito.) + * stk500generic.c: (Dito.) + * stk500v2.c: (Dito.) + * term.c: (Dito.) + * update.c: (Dito.) + * usbasp.c: (Dito.) + * usb_libusb.c: (Dito.) + * usbtiny.c: (Dito.) + * wiring.c: (Dito.) + +2014-06-11 Rene Liebscher + + bug #42516 spelling-error-in-binary + * stk500v2.c, avrftdi.c, usbasp.c: fixed spelling errors + +2014-06-01 Rene Liebscher + + bug #42337 avrdude.conf updates for UM232H/CM232H + * avrdude.conf.in: fixed entries as proposed + +2014-05-19 Joerg Wunsch + + bug #41854: avrdude 6.1 does not compile on systems without libUSB + Submitted by Didrik Madheden: + * flip1.c: Provide dummy functions for the #ifndef HAVE_LIBUSB case + * flip2.c: (Dito.) + +2014-05-19 Joerg Wunsch + + * libavrdude.h: Join the former "public" header files (avr.h avrpart.h pindefs.h + serial.h fileio.h safemode.h update.h pgm_type.h config.h confwin.h lists.h) into + a single header that can be included by anyone wanting to link against the + library + * avr.h: Remove file. + * avrpart.h: (Dito.) + * pindefs.h: (Dito.) + * serial.h: (Dito.) + * fileio.h: (Dito.) + * safemode.h: (Dito.) + * update.h: (Dito.) + * pgm.h: (Dito.) + * pgm_type.h: (Dito.) + * config.h: (Dito.) + * confwin.h: (Dito.) + * lists.h: (Dito.) + * Makefile.am: Adapt for new include file constellation; install shared lib + * configure.ac: Bump version date + * arduino.c: #include rather than a bunch of different headers + * avr910.c: (Dito.) + * avr910.h: (Dito.) + * avr.c: (Dito.) + * avrftdi.c: (Dito.) + * avrftdi_private.h: (Dito.) + * avrftdi_tpi.c: (Dito.) + * avrftdi_tpi.h: (Dito.) + * avr.h: (Dito.) + * avrpart.c: (Dito.) + * avrpart.h: (Dito.) + * bitbang.c: (Dito.) + * buspirate.c: (Dito.) + * butterfly.c: (Dito.) + * config.c: (Dito.) + * config_gram.y: (Dito.) + * config.h: (Dito.) + * confwin.c: (Dito.) + * confwin.h: (Dito.) + * dfu.c: (Dito.) + * fileio.c: (Dito.) + * fileio.h: (Dito.) + * flip1.c: (Dito.) + * flip1.h: (Dito.) + * flip2.c: (Dito.) + * flip2.h: (Dito.) + * ft245r.c: (Dito.) + * ft245r.h: (Dito.) + * jtag3.c: (Dito.) + * jtagmkI.c: (Dito.) + * jtagmkII.c: (Dito.) + * lexer.l: (Dito.) + * libavrdude.h: (Dito.) + * linuxgpio.c: (Dito.) + * lists.c: (Dito.) + * lists.h: (Dito.) + * main.c: (Dito.) + * par.c: (Dito.) + * pgm.c: (Dito.) + * pgm_type.c: (Dito.) + * pgm_type.h: (Dito.) + * pickit2.c: (Dito.) + * pickit2.h: (Dito.) + * pindefs.c: (Dito.) + * pindefs.h: (Dito.) + * ppi.c: (Dito.) + * ppiwin.c: (Dito.) + * safemode.c: (Dito.) + * safemode.h: (Dito.) + * ser_avrdoper.c: (Dito.) + * serbb_posix.c: (Dito.) + * serbb_win32.c: (Dito.) + * serial.h: (Dito.) + * ser_posix.c: (Dito.) + * ser_win32.c: (Dito.) + * stk500.c: (Dito.) + * stk500generic.c: (Dito.) + * stk500v2.c: (Dito.) + * stk500v2_private.h: (Dito.) + * term.c: (Dito.) + * term.h: (Dito.) + * update.c: (Dito.) + * update.h: (Dito.) + * usbasp.c: (Dito.) + * usbasp.h: (Dito.) + * usb_libusb.c: (Dito.) + * usbtiny.c: (Dito.) + * usbtiny.h: (Dito.) + * wiring.c: (Dito.) + +2014-05-19 Joerg Wunsch + + * main.c: Cleanup unused include files. + +2014-05-19 Joerg Wunsch + + * linux_ppdev.h: Caught two more instances of exit() + * configure.ac: Add AC_CONFIG_MACRO_DIR as suggested by libtoolize + * Makefile.am: add -I m4 to ACLOCAL_AMFLAGS as suggested by libtoolize + +2014-05-16 Axel Wachtler + + * arduino.c: Replacing all occurences of fprintf(stderr,...) with avrdude_message(...) + in potential library functions. + * avr910.c: (Dito.) + * avr.c: (Dito.) + * avrdude.h: (Dito.) + * avrftdi.c: (Dito.) + * avrftdi_private.h: (Dito.) + * avrpart.c: (Dito.) + * bitbang.c: (Dito.) + * buspirate.c: (Dito.) + * butterfly.c: (Dito.) + * config.c: (Dito.) + * config_gram.y: (Dito.) + * dfu.c: (Dito.) + * fileio.c: (Dito.) + * flip1.c: (Dito.) + * flip2.c: (Dito.) + * ft245r.c: (Dito.) + * jtag3.c: (Dito.) + * jtagmkI.c: (Dito.) + * jtagmkII.c: (Dito.) + * lexer.l: (Dito.) + * linuxgpio.c: (Dito.) + * linux_ppdev.h: (Dito.) + * main.c: (Dito.) + * par.c: (Dito.) + * pgm.c: (Dito.) + * pickit2.c: (Dito.) + * pindefs.c: (Dito.) + * ppi.c: (Dito.) + * ppiwin.c: (Dito.) + * safemode.c: (Dito.) + * ser_avrdoper.c: (Dito.) + * serbb_posix.c: (Dito.) + * serbb_win32.c: (Dito.) + * ser_posix.c: (Dito.) + * ser_win32.c: (Dito.) + * stk500.c: (Dito.) + * stk500generic.c: (Dito.) + * stk500v2.c: (Dito.) + * term.c: (Dito.) + * update.c: (Dito.) + * usbasp.c: (Dito.) + * usb_libusb.c: (Dito.) + * usbtiny.c: (Dito.) + * wiring.c: (Dito.) + +2014-05-16 Joerg Wunsch + + * configure.ac: Bump version, add libtool hooks + * Makefile.am: First attempt to define building a shared library + (not to be installed by now) + +2014-05-16 Joerg Wunsch + + * dfu.c (dfu_open, dfu_init): Fix signature of the dummy functions + (in the !HAVE_LIBUSB case) to match prototypes. + +2014-05-16 Joerg Wunsch + + * avr910.c: Replace all occurences of exit() in potential library + functions by appropriate return values + * avrftdi.c: (Dito.) + * bitbang.c: (Dito.) + * bitbang.h: (Dito.) + * buspirate.c: (Dito.) + * butterfly.c: (Dito.) + * config.c: (Dito.) + * flip2.c: (Dito.) + * ft245r.c: (Dito.) + * jtagmkI.c: (Dito.) + * jtagmkII.c: (Dito.) + * linuxgpio.c: (Dito.) + * main.c: (Dito.) + * par.c: (Dito.) + * pgm.c: (Dito.) + * pickit2.c: (Dito.) + * pindefs.c: (Dito.) + * pindefs.h: (Dito.) + * ser_avrdoper.c: (Dito.) + * ser_posix.c: (Dito.) + * ser_win32.c: (Dito.) + * serbb_posix.c: (Dito.) + * serbb_win32.c: (Dito.) + * stk500.c: (Dito.) + * stk500v2.c: (Dito.) + +2014-05-07 Rene Liebscher + + bug #42310: New part description for AT90PWM216 + * avrdude.conf.in: added pwm216 entry + +2014-05-07 Rene Liebscher + + bug #42158: Linux GPIO - Source Typo + * pindefs.h: fixed typo + +2014-04-14 Rene Liebscher + + bug #42056: double free or corruption triggered at exit + * pgm.c: copy usbpid list in pgm_dup + +2014-04-05 Joerg Wunsch + + * avrdude.1: Remove the note that users might edit the system-wide + config file. This file will be overwritten by the next + installation, so it's not a good idea to manually modify it. + Using the -C +file option is a much better way for user + modifications. + * doc/avrdude.texi: (Dito.) + * avrdude.conf.in: Add a warning to not modify the file manually. + +2014-03-13 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version for post-6.1. + +2014-03-12 Joerg Wunsch + + * configure.ac (AC_INIT): Bump version to 6.1. + +2014-03-12 Joerg Wunsch + + * pgm.c (pgm_free): Cleanup police: destroy the p->usbpid + list when freeing the programmer struct. + +2014-03-12 Joerg Wunsch + + bug #40782: Verify errors for object size > 16 k on x32e5 due + to typo in avrdude.conf + * avrdude.conf.in (ATmega8E5, ATmega32E5): fix boot location + +2014-02-28 Joerg Wunsch + + * avrdude.conf.in (atmelice, atmelice_pdi, atmelice_dw, atmelice_isp): + New entries. + * avrdude.1: Document the Atmel-ICE addition. + * doc/avrdude.texi: (Dito.) + * usbdevs.c (USB_DEVICE_ATMEL_ICE): New entry. + +2014-02-28 Joerg Wunsch + + * main.c: Bump copyright year. + +2014-02-28 Joerg Wunsch + + * jtag3.c (jtag3_recv): avoid memmov'ing more data than available + +2014-02-27 Joerg Wunsch + + * avrdude.1: Documentation update for EDBG. + * doc/avrdude.texi: (Dito.) + +2014-02-27 Joerg Wunsch + + * jtag3.c: For EDBG protocol, always use 512-byte block I/O. The + lower layers will split this according to the EP's maxsize. This + makes it work over USB 1.1 connections (albeit very slowly, due to + the interrupt transfers used). + +2014-02-27 Joerg Wunsch + + * config_gram.y: Turn the usbpid parameter of the programmer into + a list of PIDs. Make the JTAGICE3 programmer handle a list of + PIDs, by trying each of them in sequence. Use a single, central + jtag3_open_common() function to handle the common code of all + jtag3_open_* functions. Centralize all USB VID/PID definitions in + usbdevs.h. + * flip1.c: (Dito.) + * ft245r.c: (Dito.) + * stk500v2.c: (Dito.) + * jtag3.c: (Dito.) + * jtag3.h: (Dito.) + * flip2.c: (Dito.) + * usbdevs.h: (Dito.) + * pgm.c: (Dito.) + * serial.h: (Dito.) + * pgm.h: (Dito.) + * usbtiny.c: (Dito.) + * usbasp.c: (Dito.) + * avrftdi.c: (Dito.) + * usbtiny.h: (Dito.) + * avrdude.conf.in: (Dito.) + * usbasp.h: (Dito.) + * usb_libusb.c: (Dito.) + +2014-02-27 Joerg Wunsch + + * usb_libusb.c (usbdev_open): Replace all calls to exit(1) by + return -1 + +2014-02-26 Joerg Wunsch + + * jtag3_private.h: Add EDBG/CMSIS-DAP specific constants. + * jtag3.c: Add EDBG/CMSIS-DAP protocol implementation. + * serial.h: (Dito.) + * usbdevs.h: (Dito.) + * usb_libusb.c: (Dito.) + * configure.ac: (Dito.) + * avrdude.conf.in: Add JTAGICE3 and XplainedPro entries using + EDBG. + * configure.ac: Bump version date. + +2014-02-22 Joerg Wunsch + + * usb_libusb.c (usbdev_recv_frame): Fix a bug where a new recv + request was issued even though all desired data had aldready + been received. + +2014-02-21 Joerg Wunsch + + * serial.h: Change the second parameter of the ser_open method + from "baud" into a "union pinfo", so the USB parameters can be + passed without hacks. + * arduino.c: (Dito.) + * avr910.c: (Dito.) + * buspirate.c: (Dito.) + * butterfly.c: (Dito.) + * jtag3.c: (Dito.) + * jtagmkI.c: (Dito.) + * jtagmkII.c: (Dito.) + * ser_avrdoper.c: (Dito.) + * ser_posix.c: (Dito.) + * ser_win32.c: (Dito.) + * stk500.c: (Dito.) + * stk500v2.c: (Dito.) + * usb_libusb.c: (Dito.) + * wiring.c: (Dito.) + +2014-01-30 Joerg Wunsch + + [bug #41402] dfu.c missing include + * dfu.c: include where uint16_t is defined + +2014-01-28 Joerg Wunsch + + * avrdude.conf.in (ATmega256RFR2 et al.): Fix EEPROM size. + +2014-01-27 Joerg Wunsch + + [bug #41357] OS X: Avrdude messes with the usb stack? + * usb_libusb.c (usbdev_close): Only issue the usb_reset() for + Linux systems, as these are the only ones that seem to require + it under some circumstances. + +2014-01-22 Joerg Wunsch + + * configure.ac (libelf): check against elf_getshdrstrndx() rather + than just elf_begin() only, so it is clear we found a sufficiently + recent libelf to work with. + +2014-01-22 Joerg Wunsch + + Contributed by Alan Horstmann: + bug #40897: AT Mega2560 not correctly programmed with stk500(v1) ISP (solution patch) + * stk500.c: Implement extended address byte handling. + * avrdude.conf.in (ATmega2560): enable stk500_devcode so + STK500v1 protocol actually starts at all. + +2014-01-17 Joerg Wunsch + + * flip1.c: Implement the meat of FLIP version 1 protocol. + * avrdude.1: Document the new protocol. + * doc/avrdude.texi: (Dito.) + +2014-01-17 Joerg Wunsch + + * flip2.c (flip2_page_erase): Remove unimplemented function. + * dfu.h: Correctly conditionalize vs. ; + add adjustable timeout (struct dfu_dev); add dfu_abort() + * dfu.c (dfu_abort): New function; implement adjustable timeout. + +2014-01-17 Joerg Wunsch + + * configure.ac (libhid): Turn from AC_TRY_RUN into + AC_TRY_COMPILE, so it also works for cross-compilation + setups. + +2014-01-16 Joerg Wunsch + + * dfu.c (dfu_init): Move the descriptor checks up into the + FLIP protocol implementation. + * flip2.c (flip2_initialize): (Dito.) + * flip1.c (flip1_initialize): (Dito.) + +2014-01-16 Joerg Wunsch + + * flip2.c: Rename from flip.c + * flip2.h: Rename from flip.h + * Makefile.am: Reflect the renaming. + * dfu.c: Update information how to get GPL. + * dfu.h: (Dito.) + +2014-01-16 Joerg Wunsch + + * flip.c (flip2_initialize): Check user is running on an Xmega + device. + +2014-01-15 Joerg Wunsch + + * flip.c: Added some verbose-level messages (-vv) + * dfu.c: Added some verbose-level messages (-vvvv) + +2014-01-15 Joerg Wunsch + + Submitted by Kirill Levchenko: + patch #7896: DFU FLIPv2 programming support + * pgm_type.c: Add the flip2 programmer type. + * config_gram.y: Allow for the usbid keyword in a device definition. + * avrdude.conf.in: Add usbpid values to those Xmega devices where + applicable. + * avrpart.h: Add usbpid device field. + * dfu.c: (New file.) + * dfu.h: (New file.) + * flip.c: (New file.) + * flip.h: (New file.) + * Makefile.am: Add new files. + * doc/avrdude.texi: Document the changes. + * avrdude.1: (Dito.) + +2014-01-15 Joerg Wunsch + + * ChangeLog-2013: Annual changelog rotation. diff --git a/xs/src/avrdude/ChangeLog-2015 b/xs/src/avrdude/ChangeLog-2015 new file mode 100644 index 000000000..edc274188 --- /dev/null +++ b/xs/src/avrdude/ChangeLog-2015 @@ -0,0 +1,54 @@ +2015-12-15 Joerg Wunsch + + * avrdude.1 (-C): Do not suggest users might change the + default config file. It will be overwritten by updates. + +2015-12-09 Joerg Wunsch + + bug #46610: Floating point exception (core dumped) arch linux rpi2 + bug #46483: version 6.2. ser_open(): can't set attributes for device + * ser_posix.c: Back out change from patch #8380 + +2015-11-16 Joerg Wunsch + + * configure.ac: Bump for post-release 6.2. + +2015-11-16 Joerg Wunsch + + * configure.ac: Released version 6.2. + +2015-10-31 Joerg Wunsch + + Submitted by Martino Facchin: + bug #45727: Wrong atmega8u2 flash parameters + * avrdude.conf.in (ATmega8U2): correct page and block size + +2015-10-31 Joerg Wunsch + + Submitted by Pasquale Cocchini: + bug #46020: Add TIAO TUMPA to the conf file. + * avrdude.conf.in (tumpa): New entry. + +2015-10-31 Joerg Wunsch + + Submitted by Pasquale Cocchini: + bug #46021: Please add read in the memory lock section of ATtiny85 + * avrdude.conf.in (ATtiny25/45/85): add read pattern for lock bits + +2015-10-31 Joerg Wunsch + + * Makefile.am (libavrdude_a_SOURCES): reflect recent changes + (pgm.h is gone, config.h is new). + +2015-04-09 Joerg Wunsch + + bug #44717: avrdude creates empty flash dump + * update.c (do_op): When about to write an empty flash dump file, + warn about this to avoid surprises. + * avrdude.1: Document the truncation of trailing 0xFF bytes for + flash memory areas. + * doc/avrdude.texi: (Dito.) + +2015-04-09 Joerg Wunsch + + Annual ChangeLog rotation. diff --git a/xs/src/avrdude/Makefile.am b/xs/src/avrdude/Makefile.am new file mode 100644 index 000000000..d1ed47845 --- /dev/null +++ b/xs/src/avrdude/Makefile.am @@ -0,0 +1,206 @@ +# +# avrdude - A Downloader/Uploader for AVR device programmers +# Copyright (C) 2003, 2004 Theodore A. Roth +# +# 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, see . +# + +# +# $Id$ +# + +EXTRA_DIST = \ + ChangeLog \ + ChangeLog-2001 \ + ChangeLog-2002 \ + ChangeLog-2003 \ + ChangeLog-2004-2006 \ + ChangeLog-2007 \ + ChangeLog-2008 \ + ChangeLog-2009 \ + ChangeLog-2010 \ + ChangeLog-2011 \ + ChangeLog-2012 \ + ChangeLog-2013 \ + avrdude.1 \ + avrdude.spec \ + bootstrap + +CLEANFILES = \ + config_gram.c \ + config_gram.h \ + lexer.c + +BUILT_SOURCES = $(CLEANFILES) + +#SUBDIRS = doc @WINDOWS_DIRS@ +#DIST_SUBDIRS = doc windows + +# . lets build this directory before the following in SUBDIRS +SUBDIRS = . +# doc comes here, and we want to use the built avrdude to generate the parts list +SUBDIRS += @SUBDIRS_AC@ +SUBDIRS += @WINDOWS_DIRS@ +DIST_SUBDIRS = @DIST_SUBDIRS_AC@ + +AM_YFLAGS = -d + +avrdude_CPPFLAGS = -DCONFIG_DIR=\"$(sysconfdir)\" + +libavrdude_a_CPPFLAGS = -DCONFIG_DIR=\"$(sysconfdir)\" +libavrdude_la_CPPFLAGS = $(libavrdude_a_CPPFLAGS) + +avrdude_CFLAGS = @ENABLE_WARNINGS@ + +libavrdude_a_CFLAGS = @ENABLE_WARNINGS@ +libavrdude_la_CFLAGS = $(libavrdude_a_CFLAGS) + +avrdude_LDADD = $(top_builddir)/$(noinst_LIBRARIES) @LIBUSB_1_0@ @LIBHIDAPI@ @LIBUSB@ @LIBFTDI1@ @LIBFTDI@ @LIBHID@ @LIBELF@ @LIBPTHREAD@ -lm + +bin_PROGRAMS = avrdude + +noinst_LIBRARIES = libavrdude.a +lib_LTLIBRARIES = libavrdude.la + +# automake thinks these generated files should be in the distribution, +# but this might cause trouble for some users, so we rather don't want +# to have them there. +# +# See +# +# https://savannah.nongnu.org/bugs/index.php?func=detailitem&item_id=15536 +# +# for why we don't want to have them. +dist-hook: + rm -f \ + $(distdir)/lexer.c \ + $(distdir)/config_gram.c \ + $(distdir)/config_gram.h + +libavrdude_a_SOURCES = \ + config_gram.y \ + lexer.l \ + arduino.h \ + arduino.c \ + avr.c \ + avr910.c \ + avr910.h \ + avrdude.h \ + avrftdi.c \ + avrftdi.h \ + avrftdi_private.h \ + avrftdi_tpi.c \ + avrftdi_tpi.h \ + avrpart.c \ + bitbang.c \ + bitbang.h \ + buspirate.c \ + buspirate.h \ + butterfly.c \ + butterfly.h \ + config.c \ + config.h \ + confwin.c \ + crc16.c \ + crc16.h \ + dfu.c \ + dfu.h \ + fileio.c \ + flip1.c \ + flip1.h \ + flip2.c \ + flip2.h \ + freebsd_ppi.h \ + ft245r.c \ + ft245r.h \ + jtagmkI.c \ + jtagmkI.h \ + jtagmkI_private.h \ + jtagmkII.c \ + jtagmkII.h \ + jtagmkII_private.h \ + jtag3.c \ + jtag3.h \ + jtag3_private.h \ + libavrdude.h \ + linuxgpio.c \ + linuxgpio.h \ + linux_ppdev.h \ + lists.c \ + my_ddk_hidsdi.h \ + par.c \ + par.h \ + pgm.c \ + pgm_type.c \ + pickit2.c \ + pickit2.h \ + pindefs.c \ + ppi.c \ + ppi.h \ + ppiwin.c \ + safemode.c \ + serbb.h \ + serbb_posix.c \ + serbb_win32.c \ + ser_avrdoper.c \ + ser_posix.c \ + ser_win32.c \ + solaris_ecpp.h \ + stk500.c \ + stk500.h \ + stk500_private.h \ + stk500v2.c \ + stk500v2.h \ + stk500v2_private.h \ + stk500generic.c \ + stk500generic.h \ + tpi.h \ + usbasp.c \ + usbasp.h \ + usbdevs.h \ + usb_hidapi.c \ + usb_libusb.c \ + usbtiny.h \ + usbtiny.c \ + update.c \ + wiring.h \ + wiring.c +libavrdude_la_SOURCES = $(libavrdude_a_SOURCES) +libavrdude_la_LDFLAGS = -version-info 1:0 + +include_HEADERS = libavrdude.h + +avrdude_SOURCES = \ + main.c \ + term.c \ + term.h + +man_MANS = avrdude.1 + +sysconf_DATA = avrdude.conf + +install-exec-local: backup-avrdude-conf + +distclean-local: + rm -f avrdude.conf + +# This will get run before the config file is installed. +backup-avrdude-conf: + @echo "Backing up avrdude.conf in ${DESTDIR}${sysconfdir}" + @if test -e ${DESTDIR}${sysconfdir}/avrdude.conf; then \ + cp -pR ${DESTDIR}${sysconfdir}/avrdude.conf \ + ${DESTDIR}${sysconfdir}/avrdude.conf.bak; \ + fi + +ACLOCAL_AMFLAGS = -I m4 diff --git a/xs/src/avrdude/NEWS b/xs/src/avrdude/NEWS new file mode 100644 index 000000000..ced93cd35 --- /dev/null +++ b/xs/src/avrdude/NEWS @@ -0,0 +1,913 @@ +$Id$ + +Approximate change log for AVRDUDE by version. + +(For more detailed changes, see the ChangeLog file.) + +---------------------------------------------------------------------- +Current: + + * Major changes compared to the previous version: + + - libhidapi support (part of patch #8717) + - use libhidapi as (optional) transport for CMSIS-DAP compliant + debuggers (JTAGICE3 with firmware 3+, AtmelICE, EDBG, mEDBG) + + * New devices supported: + + * New programmers supported: + + - ehajo-isp (commercial version of USBtiny) + + * Bugfixes: + bug #47550: Linux GPIO broken + + * Internals: + + +Version 6.3: + + * Major changes compared to the previous version: + + - Backout of + patch #8380: adds 500k 1M 2M baud to ser_posix.c + It broke the functionality in too many situations + (bug #46610/46483) + + * New devices supported: + + - ATmega48PB, ATmega88PB, ATmega168PB + - ATtiny28 (HVPP-only device) + + * New programmers supported: + + - Atmel mEDBG: xplainedmini, xplainedmini_dw + + * Bugfixes + + - bug #46610: Floating point exception (core dumped) arch linux rpi2 + - bug #46483: version 6.2. ser_open(): can't set attributes for device + - patch #8435: Implementing mEDBG CMSIS-DAP protocol + - patch #8735: ATtiny28 support in avrdude.conf + - patch #8896: Silence cppcheck warnings in 6.2 code + - patch #8895: Spelling in 6.2 code + + +Version 6.2: + + * Major changes compared to the previous version: + + - The stk500v2 implementation now uses its own higher-level + command implementation for byte-wide access, rather than the + historic SPI_MULTI command where all the low-level ISP + implementation had to be assembled manually inside AVRDUDE. In + addition to the traditional STK500, this implementation is also + used by all the more modern Atmel tools (AVRISPmkII, JTAGICEmkII + in ISP mode, STK600 in ISP mode). + + - The -B option can be suffixed with "Hz", "kHz", or "MHz", in + order to specify a bitclock frequency rather than period. + + - Print part id after signature (patch #8440 ) + + - buspirate: Also support "cpufreq" extended parameter + in binary mode (patch #8504 ) + + - The "-P net:" syntax (forwarding of serial data over TCP) is now + also implemented for Win32 systems. + + - Allow for arbitrary serial baudrates under Linux (OSX and *BSD + could already handle it). + + + * New devices supported: + - AT90PWM216 (bug #42310: New part description for AT90PWM216) + - ATmega32M1 (patch #7694 Add support for the atmega32m1) + + * New programmers supported: + - ftdi_syncbb + + uncompatino, ttl232r (FTDI TTL232R-5V with ICSP adapter) + (patch #8529 2 more ftdi_syncbb devices) + + * Bugfixes + - bug #45727: Wrong atmega8u2 flash parameters + - bug #46020: Add TIAO TUMPA to the conf file. + - bug #46021: Please add read in the memory lock section of ATtiny85 + - bug #42337 avrdude.conf updates for UM232H/CM232H + - bug #42056: double free or corruption triggered at exit + - bug #42158: Linux GPIO - Source Typo + - bug #42516 spelling-error-in-binary + - patch #8419 fix ftdi_syncbb hang with libftdi 1 + - bug #43002 usbasp debug output typo + - patch #8511 Fix reset on FT245R + - bug #40142 Floating point exception on Ubuntu 10.04 + - bug #22248: Read efuse error (partial fix) + - bug #42267: jtag3isp fails to read lock and fuse bytes directly + after changing lock byte + - bug #41561: AVRDUDE 6.0.1/USBasp doesn't write first bytes of + flash page + - bug #43078: AVRDUDE crashes after sucessfully reading/writing eeprom + - bug #43137: Writing and reading incorrect pages when using jtagicemkI + - bug #40870: config nitpick: ATtiny25/45/85 have 1 calibration byte not 2 + - bug #42908: no external reset at JTAGICE3 + - patch #8437: [PATCH] Serial-over-ethernet for Win32 + - bug #44717: avrdude creates empty flash dump + + * Internals: + - Removing exit calls from config parser + - bug #42662 clang warnings under FreeBSD 10.x + +Version 6.1: + + * Major changes compared to the previous version: + - Atmel EDBG protocol support added (JTAGICE3, XplainedPro, Atmel-ICE) + + * New programmers supported: + - Atmel DFU, using FLIP protocol version 1 (AT90USB and ATmega*U* devices), + or version 2 (Xmega devices) + - Atmel-ICE (ARM/AVR), JTAG, PDI, debugWIRE, ISP modi + + * Bugfixes + - bug #40055: AVRDUDE segfaults when writing eeprom + - bug #40085: Typo fix in fuses report (for 6.1-svn-20130917) + - bug #40782: Verify errors for object size > 16 k on x32e5 due + to typo in avrdude.conf + - bug #40817: Elf file support (possibly) not working on 6.0.1 windows build + - bug #40897: AT Mega2560 not correctly programmed with stk500(v1) + ISP (solution patch) + - bug #41357: OS X: Avrdude messes with the usb stack? + - bug #41402: dfu.c missing include + - patch #7896: DFU FLIPv2 programming support + - patch #XXXX: xxx + + * Internals: + - (Some) programmers can take a list of USB PIDs now. + + +Version 6.0: + + * Major changes compared to the previous version: + + - Programmer types in configuration file are no longer keywords but + specified as string. + + So you need to change 'type = XYZ;' to 'type = "XYZ";' in own + config files. (internal: The parser does not need to know all + programmer types now, new programmers will update only the table + in pgm_type.c.) + + - The erase cycle counter (formerly options -y / -Y) has been + removed. + + - Specifying a -U option without a memory type (short form of + option argument list) now defaults to "application" memory for + Xmega devices, and "flash" for everything else. This ensures + the Xmega bootloader is not accidentally touched. + + - For programmers that support it, the default erase method is a + page erase now, rather than a chip erase (Xmega only). + + - Keep track of input file contents + + Memory segments are being tracked to remember whether they've + been actually read from a file. Only segments that came from a + file are being programmed into the device, or considered for + verification. This drastically improves handling speed for + sparse files (e.g. files that have a second bootloader segment), + and it ensures the device contents is actually compared for + everything mentioned in the file (even in case the file has + large 0xFF blocks). + + - The -U option now accepts ELF files as input files, and extracts + the appropriate section contents that matches the requested memory + region. To enable this feature, the host system used for the + compilation must have a libelf around, including the respective + header files (i.e., package "libelf-devel" on many Linux systems). + + - Programmers and parts lists + + They are now sorted at output with '-c ?'/'-p ?'. (patch #7671: + Sorting programmers and parts lists for console output) + + Programmers and parts lists in documentation generated from lists + mentioned above. (patch #7687: Autogenerating programmers and + parts lists for docs) + + Output list of programmer types with '-c ?type', add list to + documentation + + - Configuration files now accepts parent parts/programmers, parts + starting with '.' (eg. .xmega) are not included in output parts + list and can be used as abstract parents + + (bug #34302: Feature request : device configuration with parent classes) + (patch #7688: Implement parent programmers feature) + + - Additional config files which are read after default can be + specified on command line using '-C +filename' + + (patch #7699 Read additional config files) + + - "Safemode" can now be turned off by default from within a + configuration file (like ~/.avrduderc). + + - The new option -l logfile allows to redirect diagnostic messages + to a logfile rather than stderr. Useful to record debugging + traces, in particular in environments which do not offer + shell-style redirection functionality for standard streams. + + - When leaving debugWIRE mode, immediately retry with ISP rather + than bailing out completely. + + - The USBasp programmer implementation now supports detailed traces + with -vvv, and device communication traces with -vvvv. + + - The "verbose" terminal mode command allows to query or modify the + verbosity level. + + * New devices supported: + - ATmega48P (patch #7629 add support for atmega48p) + - AT90PWM316 (bug #21797: AT90PWM316: New part description) + - ATxmega16D4, ATxmega32D4, ATxmega64D4, ATxmega128D4 + - ATmega256RFR2, ATmega128RFR2, ATmega64RFR2, ATmega2564RFR2, + ATmega1284RFR2, ATmega644RFR2 + - ATtiny1634 + - ATxmega128A1U, ATxmega128A3U, ATxmega128A4U, ATxmega128B1, + ATxmega128B3, ATxmega128C3, ATxmega128D3, ATxmega16A4U, + ATxmega16C4, ATxmega192A3U, ATxmega192C3, ATxmega192D3, + ATxmega256A3BU, ATxmega256A3U, ATxmega256C3, ATxmega256D3, + ATxmega32A4U, ATxmega32C4, ATxmega384C3, ATxmega384D3, + ATxmega64A1U, ATxmega64A3U, ATxmega64A4U, ATxmega64B1, + ATxmega64B3, ATxmega64C3, ATxmega64D3 + - ATtiny43U + - ATmega406 + - ATxmega8E5, ATxmega16E5, ATxmega32E5 + - ATtiny20, ATtiny40 + + + * New programmers supported: + - linuxgpio + + any (embedded) Linux system with 4 GPIOs available can be used + as a programmer with little or no additional hardware. + + - avrftdi + + o-link (patch #7672 adding support for O-Link (FTDI based + JTAG) as programmer) + + 4232h (patch #7715 FT4232H support) + - TPI support + + openmoko (bug #37977 Support for Openmoko Debug Board) + + - usbasp + + nibobee (previously specified as '-c usbasp -P nibobee) + + usbasp-clone (same as usbasp but ignores vendor and product + string, checks only vid/pid) + + - ftdi_syncbb (new type for synchronous bitbanging with ft232r/ft245r) + + ft245r (FT245R Synchronous BitBang, miso = D1, sck = D0, mosi + = D2, reset = D4) + + ft232r (FT232R Synchronous BitBang, miso = RxD, sck = RTS, + mosi = TxD, reset = DTR) + + bwmega (BitWizard ftdi_atmega builtin programmer, miso = DSR, + sck = DCD, mosi = CTS, reset = RI) + + arduino-ft232r (Arduino: FT232R connected to ISP, miso = CTS + X3(1), sck = DSR X3(2), mosi = DCD X3(3), reset = RI X3(4)) + + diecimila (alias for arduino-ft232r) + + - pickit2 + + - Atmel JTAGICE3 + + - buspirate_bb (TPI programming using the BusPirate in bitbang mode) + + * Bugfixes + - bug #34027: avrdude AT90S1200 Problem + - bug #34518: loading intel hex files > 64k using record-type 4 + - patch #7667: Minor memory handling fixes + - patch #7680: Fixing timeout problem in ser_recv in ser_win32.c + - patch #7693: Fix config file atmel URLs (+ URLs in + avrdude.texi and avrpart.h) + - bug #21663: AT90PWM efuse incorrect, bug #30438: efuse bits + written as 0 on at90pwmxx parts + - bug #35261: avrftdi uses wrong interface in avrftdi_paged_(write|load) + - patch #7437 modifications to Bus Pirate module + - patch #7686 Updating buspirate ascii mode to current firmware, + use AUX as clock generator, and setting of serial receive + timeout + - bug #34768 Proposition: Change the name of the AVR32 devices + - patch #7718: Merge global data of avrftdi in a private data + structure + - bug #35208: avrdude 5.11 on freebsd 8.2-STABLE does not reset + Arduino Uno properly + - bug #34518: loading intel hex files > 64k using record-type 4 + (Extended Linear Address Record) + - bug #34027: avrdude AT90S1200 Problem + - bug #30451: Accessing some Xmega memory sections gives not + supported error + - bug #28744: Can't load bootloader to xmega128a1 + - bug #29019: pagel/bs2 warning when uploading using stk500 to xmega + - bug #30756: When setting SUT to 64ms on XMEGA, avrdude doesn't + read device signature + - bug #37265: wrong page sizes for XMega64xx in avrdude.conf + - bug #37942: Latest SVN can't program in dragon_jtag mode + - patch #7876 JTAGICE mkII fails to connect to attiny if debugwire + is enabled AND target has a very slow clock + - bug #39893: Verification failure with AVRISPmkII and Xmega + - bug #38713: Compilation of the documentation breaks with texinfo-5 + - bug #38023: avrdude doesn't return an error code when attempting + to upload an invalid Intel HEX file + - bug #39794: warnings when building avrdude 6.0rc1 under CentOS 6.4 + - bug #35800: Compilation error on certain systems if parport is disabled + - bug #38307: Can't write usersig of an xmega256a3 + - bug #38580: Current svn head, xmega and fuses, all fuses tied to fuse0 + - bug #39691: Buffer overrun when reading EEPROM byte with JTAGICE3 + - bug #38951: AVR109 use byte offset instead of word offset + - patch #7769: Write flash fails for AVR910 programmers + - bug #38732: Support for ATtiny1634 + - bug #36901: flashing Atmega32U4 EEPROM produces garbage on chip + - bug #28344: chip_erase_delay too short for ATmega324P, 644, 644P, and 1284P + - bug #34277: avrdude reads wrong byte order if using avr911 (aka butterfly) + - bug #35456: The progress bar for STK500V2 programmer is "wrong". + - patch #5708: avrdude should make 10 synchronization attempts instead of just one + - patch #7606: ATtiny43u support + - patch #7657: Add ATmega406 support for avrdude using DRAGON + JTAG + - bug #35474: Feature request: print fuse values in safemode output. + - patch #7710: usb_libusb: Check VID/PID before opening device + - [no-id]: Fix SCK period adjustment for STK500v2 + - bug #40040: Support for ATtiny20 and ATtiny40 + + * Internals: + + - Restructuring and compacting programmer definition part of + grammar for config file. + - Cleanup of parser code, removing unused definitions/ + functions. Using yylex_destroy if available. + - Fixed some more memory leaks, added cleanup code at program exit + (to minimize the number of non-freed memory blocks reported by + valgrind) + - Fixed some findings reported by cppcheck. + +Version 5.11: + + * New devices supported: + - ATmega88P/168P + - ATmega8U2/16U2/32U2 + - ATtiny4313 + + * New programmers supported: + - TPI programming through bitbang programmers (both, serial + and parallel ones) + - FT2232 (and relatives) based programmers (MPSSE bitbang mode) + - Wiring environment (http://wiring.org.co/) + - butterfly-style bootloader of the Mikrokopter.de device + + * Bugfixes + + +Version 5.10: + + * Bugfixes + - bug #28660: Problem with loading intel hex rom files that exceed + 0x10000 bytes + - see ChangeLog for further details + + * New Features + - (JTAG ICE / AVR Dragon) apply external reset if JTAG ID could + not be read + +Version 5.9: + + * New devices supported: + + - AVR32A0512 (JTAGMKII only) + - ATmega32U4 + - ATtiny4 + - ATtiny5 + - ATtiny9 + - ATtiny10 + + * New programmers supported: + + - BusPirate + - Arduino + - JTAGICEmkII and AVR Dragon in PDI mode (ATxmega devices) + - STK600 and AVRISP mkII in TPI mode (ATtiny4/5/9/10) + + * Bugfixes + + - see ChangeLog and ChangeLog-2009 for details + +Version 5.8: + + * Bugfixes; most importantly, fix a serious memory corruption for + that JTAG ICE mkII and AVR Dragon in ISP/HVSP/PP mode. + +Version 5.7: + + * New devices supported: + + - ATXMEGA64A1 + - ATXMEGA192A1 + - ATXMEGA256A1 + - ATXMEGA64A3 + - ATXMEGA128A3 + - ATXMEGA192A3 + - ATXMEGA256A3 + - ATXMEGA256A3B + - ATXMEGA16A4 + - ATXMEGA32A4 + - ATXMEGA64A4 + - ATXMEGA128A4 + + * Major Xmega fixes for the JTAG ICE mkII (patch #6825) + + * Bugfixes. + +Version 5.6: + + * New devices supported: + + - AT90USB82 + - AT90USB162 + - ATtiny88 + - ATmega328P + - ATmega1284P + - ATmega128RFA1 + - ATxmega128A1 rev D + - ATxmega128A1 + - ATxmega256A3 + + * New programmers supported: + + - AT89ISP cable (patch #6069) + - Arduino + + * Add support for the -x option to pass extended parameters to the + programmer backend. + + * Add support for JTAG daisy-chains, using the -x daisychain= + option. + + * Add support for the Atmel STK600 for "classic" AVRs (AT90, ATtiny, + ATmega), using either ISP or high-voltage programming modes. + + * Add support for the -x devcode extended parameter to the avr910 + programmer, to allow overriding the device code sent to the + programmer. + + * Add support for the Crossbow MIB510 programmer (patch #6074, #6542). + + * Add support to bootstrap with GNU autoconf 2.61, and automake 1.10, + respectively. + + * Add support for ATxmega128A1 (including the revision D engineering + samples) for STK600 and AVRISPmkII tools using PDI + + * The option combination -tF now enters terminal mode even if the + device initialization failed, so the user can modify programmer + parameters (like Vtarget). + + * Add preliminary support for ATxmega128A1 for the JTAG ICE mkII using + JTAG. + + * Add support for direct SPI transfers (bug #25156). + + * Bugfixes. + +Version 5.5: + + * Add support for the USBtinyISP programmer (patch #6233) + + * Add support for the C2N232I serial bitbang programmer (patch #6121) + + * Bugfixes. + +Version 5.4: + + * New devices supported: + + - AT90PWM2B/AT90PWM3B + + * Bugfixes. + + * Source code rearranged so that the functionality is now built + into a libavrdude.a library where main.c is currently the only + existing frontend. + + * Implement ATmega256x support for butterfly/avr109. + +Version 5.3.1: + + * Add support for the AVR Dragon (all modes: ISP, JTAG, HVSP, PP, + debugWire). + + * Add support for debugWire (both, JTAG ICE mkII, and AVR Dragon). + + * Add support for the AVR Doper USB HID-class programmer. + + * Bugfixes. + +Version 5.2: + + * New devices supported: + + - AT90USB646/647/1286/1287 + - ATmega2560/2561 + - ATmega325/3250/645/6450 + - ATtiny11 (HVSP only device) + - ATtiny261/461/861 + + * Fixed paged flash write operations for AT90PWMx devices + (error in datasheet). + + * Add signature verification. + + * Add high-voltage mode programming for the STK500 (both, + parallel, and high-voltage serial programming). + + * Add support for using the JTAG ICE mkII as a generic ISP + programmer. + + * Allow for specifying the ISP clock delay as an option for + bit-bang programming adapters. + + * Add support for Thomas Fischl's USBasp low-cost USB-attached + programmer. + + * The "stk500" programmer type is now implemented as a stub + that tries to probe for either "stk500v1" or "stk500v2". + + * Many bugfixes. + +Version 5.1: + + * New devices supported: + + - ATmega640/1280/1281 + - ATtiny24/44/84 + + * JTAG mkII support now works with libusb-win32, too + + * JTAG ICE mkI support has been added + + * Solaris support has been added (including ecpp(7D) parallel-port + bit-bang mode) + + +Version 5.0: + + * Support for JTAGICE MkII device + + * Support for STK500 Version 2 Protocol + + * New devices supported: + + - AT90CAN128 + - ATmega329x/649x + - ATmega164/324/644 + - AT90PWM2/3, + - ATmega164/324/644 + - ATmega329x/649x + - ATtiny25/45/85 + + * Support for serial bit-bang adapters: Ponyprog serial, UISP DASA, + UISP DASA3. + + * DAPA programmer pinout supported + + * New "safemode" feature where fuse bits are verified before exit + and if possible recovered if they have changed. This is intended + to protect against changed fuses which were not requested which is + reported to sometimes happen due to improper power supply or other + reasons. + + * Various fixes for avr910 and butterfly programmers + + * Full support for AVR109 boot loaders (butterfly) + + * Adding -q -q suppresses most terminal output + + +Version 4.4.0: + + * Native Win32 support: The windows build doesn't need Cygwin + anymore. Additionally, the delay timing on windows should be + more accurate now. + Contributed by Martin Thomas + + * Add support for + - ATmega48, ATmega88 (contributed by Galen Seitz) + - ATtiny2313 (contributed by Bob Paddock) + - ATtiny13 (contributed by Pawel Moll) + + * Added command to change the SCK of STK500-programmers. Now it + is possible to program uC with slow oscillator. + Contributed by Galen Seitz + + * Baudrate for serial programmers (STK500 and AVR910) is + configurable in the config or at the command-line. + This way some more tweaked bootloaders and programmers can be used. + + * Deprecated options have been removed. + Now the "-U" option must be used. + + * MacOS X now supported by default. + +Version 4.3.0: + + * Added support for "Butterfly" evaluation board. + + * Make cycle-count work with AVR910-programmers. + + * Added "Troubleshooting"-Appendix to the manual. + + * Add ATmega8515 support. + Contributed by: Matthias Weißer + + * Add ATmega64 support. + Contributed by: Erik Christiansen + + * Improved polling algorithm to speed up + programming of byte oriented parallel programmers. + Contributed by: Jan-Hinnerk Reichert + + * Add "fuse" and "lock" definitions for the AT90S8535. + + * STK500 skips empty pages in paged write resulting in faster downloads + when there are empty blocks in between code (such as files that contain + application code and bootloader code). + +Version 4.2.0: + + * Add basic support for reading and writing fuses via SPI with avr910 + programmers. Submitted by + Jan-Hinnerk Reichert . + + * Perform an auto erase before programming if the flash memory is + anywhere specified to be written by any of the -U requests. Old + style memory specification options (-f, -i, -I, -m, and -o) are + deprecated in favor of the new -U options. Auto erase is disabled + if any of the old-style options (specifically -i and -o) are + specified. + + * Add new -U option for specifying programming operations - allows + multiple memory operations on a single command line. + + * New progress reporting, looks nicer and is nicer to wrapper + environments such as emacs. + + * Fix long-standing timing (verify) problems on Windows platform. + Submitted by Alex Shepherd . + + * Add new file format option - 'm' for "immediate mode." In this + case, the filename argument of the -o, -i, or -U options is + treated as the data for uploading - useful for specifying fuse + bits without having to create a single-byte file for uploading. + + * Add support for displaying and setting the various STK500 operational + parameters (Vtarget, Varef, Master clock). + + * Add 'picoweb' programming cable programmer. + Contributed by Rune Christensen . + + * Add support for the sp12 programmer. Submitted by + Larry Barello . + + +Version 4.1.0 + + * Add support for the Bascom SAMPLE programmer. Submitted by + Larry Barello . + + * Add support for avr910 type programmers (mcu00100, pavr avr910, etc). + + * Support new devices: ATmega8535, ATtiny26 + + +Version 4.0.0 + + * Now support Linux - added by "Theodore A. Roth" . + + * Now support Windows - added by "Eric B. Weddington" . + + * Use 'configure' scripts to tailor the code to the system avrdude + is getting ready to be compiled on - added by "Theodore A. Roth" + . + + * Motorola S-Record support - submitted by "Alexey V.Levdikov " + . + + * Support parallel programming on the STK500. Introduce 'pagel' and + 'bs2' keywords to the config file for this purpose. + + * Add support for the AT90S2343 + + * Add support for the ATmega169 + + * Add ability to specify system defaults within the config file + (default parallel port, default serial port). + + * Specify the default programmer seperately from the programmer + definition. This is now done in the config file using the + 'default_programmer' keyword. + + * Support a per-user config file (~/.avrduderc) so that one can + override system wide defaults if desired. + + * Follow the datasheet more closely for several parts in the "retry" + code when entering programming mode fails initially. Introduce + 'retry_pulse' to the config file for this purpose. + + + +Version 3.1.0 + + * This change represents a name change only. There is currently an + effort to port AVRPROG to other platforms including Linux and + Windows. Since Atmel's programmer binary that's included within + their AVR Studio software is named AVRPROG.EXE on the Windows OS, + there is the chance for confusion if we keep calling this program + AVRPROG as well. Up until now the name hasn't really been a + problem since there was no chance to confuse 'avrprog' on Unix + with Atmel's AVRPROG because Atmel's tools only run on Windows. + But with the Unix 'avrprog' possibly being ported to Windows, I + felt a name change was the best way to avoid problems. + + So - from this point forward, my FreeBSD Unix program formerly + known as AVRPROG will subsequently be known as AVRDUDE (AVR + Downloader/UploaDEr). + + This change also represents a time when the AVRDUDE sources move + from my own private repository to a public repository. This will + give other developers a chance to port AVRDUDE to other platforms + and extend its functionality to support additional programming + hardware, etc. + + So goodbye AVRPROG, welcome AVRDUDE! + +Version 3.0.0 + + * Rewrite parts of the code to make it easy to support other types + of programmers besides the directly connected parallel port + programmer (PPI). + + * Add support for Atmel's STK500 programmer/development board. The + STK500's "paged mode" read/write is supported which makes this + programmer very fast. This is sorely needed on parts with large + memories such as the ATmega128. My 12K test program burns in + about 5 seconds, add another 5 to read it back out for + verification. + + +Version 2.1.5: + + * When getting ready to initiate communications with the AVR device, + first pull /RESET low for a short period of time before enabling + the buffer chip. This sequence allows the AVR to be reset before + the buffer is enabled to avoid a short period of time where the + AVR may be driving the programming lines at the same time the + programmer tries to. Of course, if a buffer is being used, then + the /RESET line from the programmer needs to be directly connected + to the AVR /RESET line and not via the buffer chip. + + Feature contributed by Rick C. Petty . + + * When in interactive terminal mode and dumping memory using the + 'dump ' command without any address information, and the + end of memory is reached, wrap back around to zero on the next + invocation. + + +Version 2.1.4: + + * Fix -Y option. + + +Version 2.1.3: + + * Be backward compatible when reading 2-byte rewrite cycle counters + as written by avrprog version 2.1.0. Version 2.1.1 changed over + to a 4-byte counter, which caused avrprog versions 2.1.1 and 2.1.2 + to report a negative count for parts that were initialized using + version 2.1.0. Thanks to Joerg Wunsch for noticing this. + + +Version 2.1.2: + + * Add '-V' option to disable automatic verify check with uploading + data. + + +Version 2.1.1: + + * Fix ATmega128 instruction sequences for reading fuse bits - + contributed by Joerg Wunsch. + + * Modify erase-rewrite cycle counter code to use a 4 byte counter + instead of a two byte counter. + + +Version 2.1.0: + + * Implement a per-part erase-rewrite cycle counter; requires the use + of two bytes of EEPROM memory. + + +Version 2.0.5: + + * Support for ATtiny15 - contributed by Asher Hoskins + + +Version 2.0.4: + + * Config file fixes for various parts. + + +Version 2.0.3: + + * Work around problem programming fuse bits on parts like the + at90s4433 as described in the following errata: + + http://www.atmel.com/atmel/acrobat/doc1280.pdf + + * Add part definition for at90s4414, at90s4433. + + * Add fuse/lock bit memory instructions for the at90s1200, + at90s2333, at90s4433 and at90s8515. + + * Fix setting of programmer status LEDs under certain write-fail + conditions. + + +Version 2.0.2 : + + * Fix writing to read-only memories such as the lock bits of the + AT90S2313. + + * Copyright updates. + + +Version 2.0.1 : + + * Use correct parallel port pins for VCC. + + * Add programmer definition for Atmel's STK200. + + * Add programmer definition for the AVR3 board. + + * Fix address bit encoding for many parts. + + * Allow the ``BUFF'' signal to be asserted by multiple pins of the + parallel port (like VCC) instead of just one. The STK200 appears + to need this feature. + + +Version 2.0.0 : + + * Add support for programming fuse and lock bits if supported by the + part. + + * Move instruction encoding into the config file. Now any part can + be supported as long as it uses the same basic serial programming + instruction format. + + * Add part definitions for the ATMega163 and ATMega8 devices. + + +Version 1.4.3 : + + * Mostly internal code cleanup. + + +Version 1.4.2 : + + * Fixes for ATMega paged memory support. + + * Support for ATMega16 device. + + +Version 1.4.1 : + + * No functional changes, update to Copyrights only. + + +Version 1.4.0 : + + * Add part definitions to the config file. + + * Add initial support for Atmel's ATMega paged memory parts. + + * Config file documentation added. + + * Add a definition for the Dontronics DT006 programmer. + + * Fix Intel Hex support for addresses larger than 64k. + + +Version 1.3.0 : + + * Make programmer pin assignments configurable. + + +Version 1.2.2 : + + * Initial public release. diff --git a/xs/src/avrdude/README b/xs/src/avrdude/README new file mode 100644 index 000000000..2ca0009a3 --- /dev/null +++ b/xs/src/avrdude/README @@ -0,0 +1,64 @@ +THIS IS A PRUSA3D BRANCH, WORKING AROUND A SPECIFIC PROBLEM +IN THE EARLY I3 MK2 USB COMMUNICATION CHIPS. + +Some of the early Prusa3D i3 MK2 printers were shipped with a buggy +USB communication controller firmware. This fork of avrdude contains +a workaround inside the stk500v2 protocol implementation. + +The workaround depends on a specific behavior of the Arduino AVR 2560 +bootloader, which is installed on the i3 MK2 printers: + +https://github.com/arduino/Arduino-stk500v2-bootloader + +The avrdude binary modified by Prusa3D could replace the avrdude bianary +of arduino to program the RAMBo board. In that case the modified binary +is identified by a "-prusa3d" suffix to the version information. + +------------------------------------------------------------------- + +See the documentation file for the details. + +The latest version of AVRDUDE is always available here: + + http://savannah.nongnu.org/projects/avrdude + + +Important environment variables for ./configure: +================================================ + +CPPFLAGS: C preprocessor flags (*not* "C++") + +This is the place to put additional (non-standard) -I options into. +For example, if your Windows system has LibUSB-Win32 installed into +\\WINDOWS\ProgramFiles\LibUSB-Win32, use + +CPPFLAGS=-I/WINDOWS/ProgramFiles/LibUSB-Win32/include + +to tell configure where to search for the header files. (The use of +forward slashes rather than backslashes can often simplify things. +Note that the Windows system services internally treat both the same. +It's only cmd.exe which requires backslashes as the directory +separator.) + +LDFLAGS: Linker options + +This is the place to make additional library locations known to the +linker. To continue the above example, use + +LDFLAGS=-L/WINDOWS/ProgramFiles/LibUSB-Win32/lib/gcc + +to make the linker search for "libusb.a" in that directory. + + +Linux users: make sure the header files are installed +===================================================== + +While many Linux distributions install the libraries needed by AVRDUDE +(libusb, libelf) by default, they leave out the corresponding header +files. Consequently, the configure script won't find them, so these +libraries could not be used. + +Usually, the packages with the header files (and static libraries) are +derived from the regular package name by appending "-devel". Thus, +make sure you have "libusb-devel" and "libelf-devel" installed before +running the configure script. (Same goes for libftdi.) diff --git a/xs/src/avrdude/ac_cfg.h b/xs/src/avrdude/ac_cfg.h new file mode 100644 index 000000000..881c60e00 --- /dev/null +++ b/xs/src/avrdude/ac_cfg.h @@ -0,0 +1,195 @@ +/* ac_cfg.h. Generated from ac_cfg.h.in by configure. */ +/* ac_cfg.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_DDK_HIDSDI_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_HIDAPI_HIDAPI_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define if ELF support is enabled via libelf */ +#define HAVE_LIBELF 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LIBELF_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LIBELF_LIBELF_H */ + +/* Define if FTDI support is enabled via libftdi */ +/* #undef HAVE_LIBFTDI */ + +/* Define if FTDI support is enabled via libftdi1 */ +#define HAVE_LIBFTDI1 1 + +/* Define if libftdi supports FT232H, libftdi version >= 0.20 */ +/* #undef HAVE_LIBFTDI_TYPE_232H */ + +/* Define if HID support is enabled via the Win32 DDK */ +/* #undef HAVE_LIBHID */ + +/* Define if HID support is enabled via libhidapi */ +/* #undef HAVE_LIBHIDAPI */ + +/* Define to 1 if you have the `ncurses' library (-lncurses). */ +#define HAVE_LIBNCURSES 1 + +/* Define to 1 if you have the `readline' library (-lreadline). */ +#define HAVE_LIBREADLINE 1 + +/* Define to 1 if you have the `termcap' library (-ltermcap). */ +/* #undef HAVE_LIBTERMCAP */ + +/* Define if USB support is enabled via libusb */ +#define HAVE_LIBUSB 1 + +/* Define if USB support is enabled via a libusb-1.0 compatible libusb */ +#define HAVE_LIBUSB_1_0 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LIBUSB_1_0_LIBUSB_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LIBUSB_H */ + +/* Define to 1 if you have the `ws2_32' library (-lws2_32). */ +/* #undef HAVE_LIBWS2_32 */ + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Linux sysfs GPIO support enabled */ +/* #undef HAVE_LINUXGPIO */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LUSB0_USB_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `memset' function. */ +#define HAVE_MEMSET 1 + +/* parallel port access enabled */ +#define HAVE_PARPORT 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_PTHREAD_H 1 + +/* Define to 1 if you have the `select' function. */ +#define HAVE_SELECT 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `strcasecmp' function. */ +#define HAVE_STRCASECMP 1 + +/* Define to 1 if you have the `strdup' function. */ +#define HAVE_STRDUP 1 + +/* Define to 1 if you have the `strerror' function. */ +#define HAVE_STRERROR 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strncasecmp' function. */ +#define HAVE_STRNCASECMP 1 + +/* Define to 1 if you have the `strtol' function. */ +#define HAVE_STRTOL 1 + +/* Define to 1 if you have the `strtoul' function. */ +#define HAVE_STRTOUL 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_IOCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_TERMIOS_H 1 + +/* Define to 1 if the system has the type `uint_t'. */ +/* #undef HAVE_UINT_T */ + +/* Define to 1 if the system has the type `ulong_t'. */ +/* #undef HAVE_ULONG_T */ + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_USB_H 1 + +/* Define to 1 if you have the `usleep' function. */ +#define HAVE_USLEEP 1 + +/* Define if lex/flex has yylex_destroy */ +#define HAVE_YYLEX_DESTROY 1 + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "avrdude" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "avrdude-dev@nongnu.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "avrdude" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "avrdude 6.3-20160220" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "avrdude" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "6.3-20160220" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define to 1 if you can safely include both and . */ +#define TIME_WITH_SYS_TIME 1 + +/* Version number of package */ +#define VERSION "6.3-20160220" + +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a + `char[]'. */ +#define YYTEXT_POINTER 1 + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ diff --git a/xs/src/avrdude/ac_cfg.h.in b/xs/src/avrdude/ac_cfg.h.in new file mode 100644 index 000000000..9dda33a53 --- /dev/null +++ b/xs/src/avrdude/ac_cfg.h.in @@ -0,0 +1,194 @@ +/* ac_cfg.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_DDK_HIDSDI_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the header file. */ +#undef HAVE_HIDAPI_HIDAPI_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define if ELF support is enabled via libelf */ +#undef HAVE_LIBELF + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBELF_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBELF_LIBELF_H + +/* Define if FTDI support is enabled via libftdi */ +#undef HAVE_LIBFTDI + +/* Define if FTDI support is enabled via libftdi1 */ +#undef HAVE_LIBFTDI1 + +/* Define if libftdi supports FT232H, libftdi version >= 0.20 */ +#undef HAVE_LIBFTDI_TYPE_232H + +/* Define if HID support is enabled via the Win32 DDK */ +#undef HAVE_LIBHID + +/* Define if HID support is enabled via libhidapi */ +#undef HAVE_LIBHIDAPI + +/* Define to 1 if you have the `ncurses' library (-lncurses). */ +#undef HAVE_LIBNCURSES + +/* Define to 1 if you have the `readline' library (-lreadline). */ +#undef HAVE_LIBREADLINE + +/* Define to 1 if you have the `termcap' library (-ltermcap). */ +#undef HAVE_LIBTERMCAP + +/* Define if USB support is enabled via libusb */ +#undef HAVE_LIBUSB + +/* Define if USB support is enabled via a libusb-1.0 compatible libusb */ +#undef HAVE_LIBUSB_1_0 + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBUSB_1_0_LIBUSB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBUSB_H + +/* Define to 1 if you have the `ws2_32' library (-lws2_32). */ +#undef HAVE_LIBWS2_32 + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H + +/* Linux sysfs GPIO support enabled */ +#undef HAVE_LINUXGPIO + +/* Define to 1 if you have the header file. */ +#undef HAVE_LUSB0_USB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* parallel port access enabled */ +#undef HAVE_PARPORT + +/* Define to 1 if you have the header file. */ +#undef HAVE_PTHREAD_H + +/* Define to 1 if you have the `select' function. */ +#undef HAVE_SELECT + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the `strdup' function. */ +#undef HAVE_STRDUP + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strncasecmp' function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the `strtol' function. */ +#undef HAVE_STRTOL + +/* Define to 1 if you have the `strtoul' function. */ +#undef HAVE_STRTOUL + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_IOCTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_TERMIOS_H + +/* Define to 1 if the system has the type `uint_t'. */ +#undef HAVE_UINT_T + +/* Define to 1 if the system has the type `ulong_t'. */ +#undef HAVE_ULONG_T + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_USB_H + +/* Define to 1 if you have the `usleep' function. */ +#undef HAVE_USLEEP + +/* Define if lex/flex has yylex_destroy */ +#undef HAVE_YYLEX_DESTROY + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#undef LT_OBJDIR + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + +/* Version number of package */ +#undef VERSION + +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a + `char[]'. */ +#undef YYTEXT_POINTER + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const diff --git a/xs/src/avrdude/arduino.c b/xs/src/avrdude/arduino.c new file mode 100644 index 000000000..566f56abd --- /dev/null +++ b/xs/src/avrdude/arduino.c @@ -0,0 +1,132 @@ +/* + * avrdude - A Downloader/Uploader for AVR device programmers + * Copyright (C) 2009 Lars Immisch + * + * 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, see . + */ + +/* $Id$ */ + +/* + * avrdude interface for Arduino programmer + * + * The Arduino programmer is mostly a STK500v1, just the signature bytes + * are read differently. + */ + +#include "ac_cfg.h" + +#include +#include +#include + +#include "avrdude.h" +#include "libavrdude.h" +#include "stk500_private.h" +#include "stk500.h" +#include "arduino.h" + +/* read signature bytes - arduino version */ +static int arduino_read_sig_bytes(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m) +{ + unsigned char buf[32]; + + /* Signature byte reads are always 3 bytes. */ + + if (m->size < 3) { + avrdude_message(MSG_INFO, "%s: memsize too small for sig byte read", progname); + return -1; + } + + buf[0] = Cmnd_STK_READ_SIGN; + buf[1] = Sync_CRC_EOP; + + serial_send(&pgm->fd, buf, 2); + + if (serial_recv(&pgm->fd, buf, 5) < 0) + return -1; + if (buf[0] == Resp_STK_NOSYNC) { + avrdude_message(MSG_INFO, "%s: stk500_cmd(): programmer is out of sync\n", + progname); + return -1; + } else if (buf[0] != Resp_STK_INSYNC) { + avrdude_message(MSG_INFO, "\n%s: arduino_read_sig_bytes(): (a) protocol error, " + "expect=0x%02x, resp=0x%02x\n", + progname, Resp_STK_INSYNC, buf[0]); + return -2; + } + if (buf[4] != Resp_STK_OK) { + avrdude_message(MSG_INFO, "\n%s: arduino_read_sig_bytes(): (a) protocol error, " + "expect=0x%02x, resp=0x%02x\n", + progname, Resp_STK_OK, buf[4]); + return -3; + } + + m->buf[0] = buf[1]; + m->buf[1] = buf[2]; + m->buf[2] = buf[3]; + + return 3; +} + +static int arduino_open(PROGRAMMER * pgm, char * port) +{ + union pinfo pinfo; + strcpy(pgm->port, port); + pinfo.baud = pgm->baudrate? pgm->baudrate: 115200; + if (serial_open(port, pinfo, &pgm->fd)==-1) { + return -1; + } + + /* Clear DTR and RTS to unload the RESET capacitor + * (for example in Arduino) */ + serial_set_dtr_rts(&pgm->fd, 0); + usleep(250*1000); + /* Set DTR and RTS back to high */ + serial_set_dtr_rts(&pgm->fd, 1); + usleep(50*1000); + + /* + * drain any extraneous input + */ + stk500_drain(pgm, 0); + + if (stk500_getsync(pgm) < 0) + return -1; + + return 0; +} + +static void arduino_close(PROGRAMMER * pgm) +{ + serial_set_dtr_rts(&pgm->fd, 0); + serial_close(&pgm->fd); + pgm->fd.ifd = -1; +} + +const char arduino_desc[] = "Arduino programmer"; + +void arduino_initpgm(PROGRAMMER * pgm) +{ + /* This is mostly a STK500; just the signature is read + differently than on real STK500v1 + and the DTR signal is set when opening the serial port + for the Auto-Reset feature */ + stk500_initpgm(pgm); + + strcpy(pgm->type, "Arduino"); + pgm->read_sig_bytes = arduino_read_sig_bytes; + pgm->open = arduino_open; + pgm->close = arduino_close; +} diff --git a/xs/src/avrdude/arduino.h b/xs/src/avrdude/arduino.h new file mode 100644 index 000000000..024d711b9 --- /dev/null +++ b/xs/src/avrdude/arduino.h @@ -0,0 +1,29 @@ +/* + * avrdude - A Downloader/Uploader for AVR device programmers + * Copyright (C) 2009 Lars Immisch + * + * 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, see . + */ + +/* $Id$ */ + +#ifndef arduino_h__ +#define arduino_h__ + +extern const char arduino_desc[]; +void arduino_initpgm (PROGRAMMER * pgm); + +#endif + + diff --git a/xs/src/avrdude/atmel-docs/AVR109.pdf b/xs/src/avrdude/atmel-docs/AVR109.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0942f44bcfddecee0875fef751fdb650a7e1fe7b GIT binary patch literal 94446 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 literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/AVR910.pdf b/xs/src/avrdude/atmel-docs/AVR910.pdf new file mode 100644 index 0000000000000000000000000000000000000000..585703aaceb08b079658a96222555eafa3489f89 GIT binary patch literal 224606 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 M|Nhf2KfinV7m(jh*Z=?k literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/AVRISPmkII-AVR069.pdf b/xs/src/avrdude/atmel-docs/AVRISPmkII-AVR069.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dc42549540a2b54611f00a5841fe37381fef4743 GIT binary patch literal 326430 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

%D|VohOta65Q@_KFM(=pGwH3KD$5*fGF4;7 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∾rqZPYH+kl5&r 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 literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/browserDetect.js b/xs/src/avrdude/atmel-docs/EDBG/common/browserDetect.js new file mode 100644 index 000000000..2a7aa08a4 --- /dev/null +++ b/xs/src/avrdude/atmel-docs/EDBG/common/browserDetect.js @@ -0,0 +1,116 @@ +var BrowserDetect = { + init: function () { + this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; + this.version = this.searchVersion(navigator.userAgent) + || this.searchVersion(navigator.appVersion) + || "an unknown version"; + this.OS = this.searchString(this.dataOS) || "an unknown OS"; + }, + searchString: function (data) { + for (var i=0;i> Global +----------------------------------------------------------------------------------------------------*/ + +.grid_1, +.grid_2, +.grid_3 { + display:inline; + float: left; + position: relative; + margin-left: 1%; + margin-right: 1%; +} + +/* Grid >> Children (Alpha ~ First, Omega ~ Last) +----------------------------------------------------------------------------------------------------*/ + +.alpha { + margin-left: 0; +} + +.omega { + margin-right: 0; +} + +/* Grid >> 3 Columns +----------------------------------------------------------------------------------------------------*/ + + +.container_3 .grid_1 { + width:31.333%; +} + +.container_3 .grid_2 { + width:64.667%; +} + +.container_3 .grid_3 { + width:98.0%; +} + + + +/* Prefix Extra Space >> 3 Columns +----------------------------------------------------------------------------------------------------*/ + + +.container_3 .prefix_1 { + padding-left:33.333%; +} + +.container_3 .prefix_2 { + padding-left:66.667%; +} + + + +/* Suffix Extra Space >> 3 Columns +----------------------------------------------------------------------------------------------------*/ + + +.container_3 .suffix_1 { + padding-right:33.333%; +} + +.container_3 .suffix_2 { + padding-right:66.667%; +} + + + +/* Push Space >> 3 Columns +----------------------------------------------------------------------------------------------------*/ + + +.container_3 .push_1 { + left:33.333%; +} + +.container_3 .push_2 { + left:66.667%; +} + + + +/* Pull Space >> 3 Columns +----------------------------------------------------------------------------------------------------*/ + + +.container_3 .pull_1 { + left:-33.333%; +} + +.container_3 .pull_2 { + left:-66.667%; +} + + + + +/* Clear Floated Elements +----------------------------------------------------------------------------------------------------*/ + +/* http://sonspring.com/journal/clearing-floats */ + +.clear { + clear: both; + display: block; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0; +} + +/* http://perishablepress.com/press/2008/02/05/lessons-learned-concerning-the-clearfix-css-hack */ + +.clearfix:after { + clear: both; + content: ' '; + display: block; + font-size: 0; + line-height: 0; + visibility: hidden; + width: 0; + height: 0; +} + +.clearfix { + display: inline-block; +} + +* html .clearfix { + height: 1%; +} + +.clearfix { + display: block; +} \ No newline at end of file diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/index.css b/xs/src/avrdude/atmel-docs/EDBG/common/css/index.css new file mode 100644 index 000000000..eb1b8c24f --- /dev/null +++ b/xs/src/avrdude/atmel-docs/EDBG/common/css/index.css @@ -0,0 +1,59 @@ +body { + font-size: 12px; + font-family: Verdana, Geneva, sans-serif; +} + +.a { + text-decoration: none; +} + +.title { + padding: 31px 0 0 0; +} + +.group +{ + /*background-color: pink;*/ + width:966px; +} + +.group_header { + color: #0066CB; + font: bold 14pt IntervalLight, sans-serif; + text-decoration: none; + padding: 8px; + background-color: #EEEEEE; + margin-top: 24px; + /*margin-bottom: 8px;*/ +} + +.products +{ + float:left; + /*background:#FFF8F8;*/ +} + +.product { + /*background: url("../images/panelbg.png") 0 0 no-repeat;*/ + width: 300px; + height: 130px; + /*margin-left: 20px;*/ + padding: 10px; + border: 1px solid #EEEEEE; + display:block; + float: left; +} + +.product span { + font-size: 16px; + color: #0066CB; + margin-bottom: 8px; + clear:both; +} + +.product img +{ + margin-right:12px; + float:left; +} + diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/positioning.css b/xs/src/avrdude/atmel-docs/EDBG/common/css/positioning.css new file mode 100644 index 000000000..7c9658c41 --- /dev/null +++ b/xs/src/avrdude/atmel-docs/EDBG/common/css/positioning.css @@ -0,0 +1,493 @@ +tr th .added { color: #E6E6FA; } +tr th .changed {color: #99ff99; } +div.added tr, div.added { background-color: #E6E6FA; } +div.deleted tr, div.deleted { text-decoration: line-through; + background-color: #FF7F7F; } +div.changed tr, div.changed { background-color: #99ff99; } +div.off { } + +span.added { background-color: #E6E6FA; } +span.deleted { text-decoration: line-through; + background-color: #FF7F7F; } +span.changed { background-color: #99ff99; } +span.off { } + + +body { font: 12px Verdana, Geneva, sans-serif; } +p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; } +h1 { font: 15pt Arial, Helvetica, geneva; + color: black!important; +} +h2 { font: normal 12pt Arial, Helvetica, geneva; } + +#header { + background: white; + position: fixed; + width: 100%; + height: 99px; + top: 0; + right: 0; + bottom: auto; + left: 0; + border-bottom: 1px solid #bbc4c5; + z-index: 2000; +} + +#header h1 { + margin-left: 310px; + position: fixed; + top: 20px; + left: -15px; + color: #404040 !important; +} + + +#header h1 { + margin-top: 2px; +} + + +p.breadcrumbs { + margin-top: 30px; + margin-left: 310px; +} + +#header img { + float: left; + margin-left: 20px; +} + +#header p.breadcrumbs a { + color: #bbb; +} + +#leftnavigation { + overflow: auto; + position: fixed; + height: auto; + top:100px; + /*right:10px;*/ + /*left:10px;*/ + bottom: 0; + left: 0; + width:inherit; + z-index: 1500; + border-right:2px solid #bbc4c5; + padding:1px; + background-color: #ededed!important; +} + +#treeDiv { + overflow: auto; + /* position: fixed;*/ + height: auto; + top: 136px; + bottom: 0; + left: 0; + /* width: 18%;*/ + z-index: 1500; + /* border-right:2px solid #CCCCCC; + background-color: #f0f0f0!important;*/ +} + +/*#searchDiv { + overflow: auto; + position: fixed; + height: auto; + top: 138px; + bottom: 0; + left: 0; + width: 243px; + z-index: 1500; + border-right:2px solid #CCCCCC; + background-color: #f0f0f0!important; +}*/ + +#content { + position: relative; + top: 90px; /*left: 240px;*/ + right: auto; bottom: 20px; + /*margin: 0px 0px 0px 280px;*/ + width: auto; + height: inherit; + padding-left: 5px; + padding-right: 30px; + border-left: 1px solid #cccccc; + overflow :scroll; + overflow-x:auto; + z-index: 1000; + +} + +#navheader { + position: fixed; + background: #DCDCDC; + padding-left: 10px; + right: 0px; + top: 10px; + text-align: right; +} + +#content h1, #content h2 { +color: #404040 !important; +font-size: 170%; +font-weight: normal; +} +.navfooter { bottom: 2%; } +.highlight { background-color: #c5d3c3; } +.highlightButton{ font-size: 0; } + +/* Show Hide TOC tree */ +.pointLeft { + padding-right: 15px; + display: block; + cursor: pointer; +} +.pointRight { + padding-right: 15px; + display: block; + cursor: pointer; +} + +/* Search results Styling */ +.searchExpression { + color: #0050A0; + background-color: #EBEFF8; + font-size: 12pt; +} +.searchresult li a { + text-decoration: none; + color: #0050A0; +} +.searchresult li { color: #0050A0; } +.shortdesclink { color: gray; font-size: 9pt; } +.searchText { float:left;width:150px; } +.searchButton { + padding: 2px 12px 2px 12px; + background-color:#bbb; + border:#bbb solid 1pt; + font-weight: bold; + font-size: 10pt +} +.searchButton:hover{ + background-color: #cccccc; +} +.searchFieldSet {} + +.title, div.toc>p{ font-weight: bold; } + +p.breadcrumbs { + display: inline; + margin-bottom: 0px; + margin-top: 33px; +} + +p.breadcrumbs a { + padding-right: 12px; + margin-right: 5px; + text-decoration: none; + color: #575757; + text-transform: uppercase; + font-size: 10px; +} + +p.breadcrumbs a:first-child {background: url(../images/breadcrumb-arrow-white.png) no-repeat right center;} + +p.breadcrumbs a:hover {text-decoration: underline;} + +#star ul.star { + LIST-STYLE: none; + MARGIN: 0; + PADDING: 0; + WIDTH: 85px; + /* was 100 */ + HEIGHT: 20px; + LEFT: 1px; + TOP: -5px; + POSITION: relative; + FLOAT: right; + BACKGROUND: url('../images/starsSmall.png') repeat-x 0 -25px; +} +#star li { + PADDING: 0; + MARGIN: 0; + FLOAT: right; + DISPLAY: block; + WIDTH: 85px; + /* was 100 */ + HEIGHT: 20px; + TEXT-DECORATION: none; + text-indent: -9000px; + Z-INDEX: 20; + POSITION: absolute; + PADDING: 0; +} +#star li.curr { + BACKGROUND: url('../images/starsSmall.png') left 25px; + FONT-SIZE: 1px; +} + +table.navLinks {margin-right: 20px;} + +table.navLinks td a { + text-decoration: none; + text-transform: uppercase; + color: black; + font-size: 11px; +} + +a.navLinkPrevious { + padding-left: 12px; + background: url(../images/previous-arrow.png) no-repeat left center; +} + +a.navLinkNext { + padding-right: 12px; + background: url(../images/next-arrow.png) no-repeat right center; +} + +a#showHideButton { + padding-left: 20px; + background: url(../images/sidebar.png) no-repeat left center; +} + + +.filetree li span a { color: #777; } + +#treediv { -webkit-box-shadow: #CCC 0px 1px 2px 0px inset; } + +.legal, .legal *{ + color: #555; + text-align: center; + padding-bottom: 10px; +} + +.internal { color : #0000CC;} + +.writeronly {color : red;} + +.remark, .remark .added, .remark .changed, .remark .deleted{ background: yellow;} + +tr th, tr th .internal, tr th .added, tr th .changed { + background: #00589E; + color: white; + font-weight: bold; + text-align: left; +} + +.statustext{ + position:fixed; + top:105px; + width: 0%; + height: 0%; + opacity: .3; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + white-space: nowrap; + color: red; + font-weight: bold; + font-size: 2em; + margin-top: 30px; +} + +#toolbar { + width: 100%; + height: 33px; + position: fixed; + top: 93px; + z-index: 99; + left: 280px; + color: #333; + line-height: 28px; + padding-left: 10px; +} + +#toolbar-left { + position: relative; + left: 0px; +} + +body p.breadcrumbs { + margin: 0px; + padding: 0px; + line-height: 28px; +} + +/*body #content { + position: static; + margin-top: 126px; + top: 0px; +}*/ + +body.sidebar #toolbar{left: 0px;} + +body.sidebar #toolbar-left{left: 0px;} + +div#toolbar-left img {vertical-align: text-top;} + +div.note *, div.caution *, div.important *, div.tip *, div.warning * { + background: inherit !important; + color: inherit !important; + border: inherit /*!important*/; +} + +#content table thead, #content table th, #content table th p{ + color: white; + font-weight: bold; +} + +#content table caption{font-weight: bold;} + +#content table td, #content table {border: 1px solid black;} + +#content table td, #content table th { padding: 5px;} + +#content table {margin-bottom: 20px;} + +*[align = 'center']{ text-align: center;} + +#content .qandaset>table, #content .qandaset>table td, #content .calloutlist table, #content .calloutlist table td, #content .navfooter table, #content .navfooter table td { + border: 0px solid; +} + +#sidebar +{ + position: fixed; + margin: 0px; + left: 0px; + right: auto; + top: 99px; + bottom: 0px; + height: 543px; + z-index: 0; + display: block; + visibility: visible; + width: 280px; +} + +@media print { + + body * { + visibility: hidden; + } + + #content, #content * { + visibility: visible; + } + + #sidebar, .navfooter { + display: none; + } + + #content { + margin: 0 0 0 0; + } + +} + +#expanders { + float: left; + width: 100%; + padding-bottom: 1em; +} + +#expanders dt { + padding-bottom: 4px; + border-bottom: 2px solid #cccccc; + margin-top: 1em; + margin-bottom: 1em; + background: url(../images/plus.png) 0px 7px no-repeat; + /*background: pink;*/ + cursor: pointer; +} + +#expanders dt h2 { + font: bold 14pt IntervalLight, sans-serif; + text-decoration: none; + color: #0066CB; + /*background-position: -16px 0;*/ + padding-left: 13px; +} + +#expanders dt.plus { + background: url(../images/plus.png) 0px 7px no-repeat; +} + +#expanders dt.minus { + background: url(../images/minus.png) 0px 7px no-repeat; +} + + +#expanders dd { + display: none; + margin-bottom: 3em; + /*background: yellow;*/ +} + +#expanders .hitarea { + background: url(../images/ui-icons_217bc0_256x240.png) 0 -208px no-repeat; + height: 16px; + width: 16px; + float: left; + cursor: pointer; +} +/* fix for IE6 */ +/** html .hitarea { + display: inline; + float:none; +}*/ + + + +#expanders .prod +{ + width: 300px; + border: #DDD solid 1px; + float: left; + margin: 1px; + height: 160px; + margin-top: 0px; +} + +#expanders .prodimg +{ + /*border: #DDD solid 1px;*/ + float: left; +} + +.prodimg img { + display: block; + margin-left: 3px; + margin-top: auto; + margin-bottom: auto; + width: 100px; + vertical-align: middle; +} + +#expanders .prodtext +{ + /*background: #F8F8F8;*/ + width: 165px; + float: left; + margin-left: 1em; +} + +#expanders .prod p { + clear: both; +} + +#expanders ul { + margin: 0; + padding: 0; + list-style-type: none; +} + +#expanders li { + padding-left: 0.5em; +} + +a.external { + background: url("../images/external_link.gif") no-repeat scroll right top transparent; + padding: 0 13px 0 0; +} \ No newline at end of file diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/print.css b/xs/src/avrdude/atmel-docs/EDBG/common/css/print.css new file mode 100644 index 000000000..a52a074e7 --- /dev/null +++ b/xs/src/avrdude/atmel-docs/EDBG/common/css/print.css @@ -0,0 +1,28 @@ +body { + color : #000000 !important; + background : #ffffff !important; + font-family : "Times New Roman", Times, serif !important; + font-size : 12pt !important; +} + +#sidebar, #sidebar-resizer, #header-resizer, #header { display: none !important;} + +#content { + position: absolute !important; + margin: 0px !important; + left: 0px !important; + right: auto !important; + top: 0px !important; + height: auto !important; + overflow: visible !important; + overflow-x: visible !important; + border-left: 0px solid #000000 !important; +} + +.ui-layout-container { + overflow: visible !important; +} + +.mediaobject { + text-align: left !important; +} \ No newline at end of file diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/reset.css b/xs/src/avrdude/atmel-docs/EDBG/common/css/reset.css new file mode 100644 index 000000000..27802c681 --- /dev/null +++ b/xs/src/avrdude/atmel-docs/EDBG/common/css/reset.css @@ -0,0 +1 @@ +a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,dialog,div,dl,dt,em,embed,fieldset,figcaption,figure,font,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,html,i,iframe,img,ins,kbd,label,legend,li,main,mark,menu,meter,nav,object,ol,output,p,pre,progress,q,rp,rt,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video,xmp{border:0;margin:0;padding:0;font-size:100%}html,body{height:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}b,strong{font-weight:bold}img{color:transparent;font-size:0;vertical-align:middle;-ms-interpolation-mode:bicubic}ol,ul{list-style:none}li{display:list-item}table{border-collapse:collapse;border-spacing:0}th,td,caption{font-weight:normal;vertical-align:top;text-align:left}q{quotes:none}q:before,q:after{content:'';content:none}sub,sup,small{font-size:75%}sub,sup{line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}svg{overflow:hidden} \ No newline at end of file diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/css/text.css b/xs/src/avrdude/atmel-docs/EDBG/common/css/text.css new file mode 100644 index 000000000..0ef67296a --- /dev/null +++ b/xs/src/avrdude/atmel-docs/EDBG/common/css/text.css @@ -0,0 +1 @@ +body{font:13px/1.5 'Helvetica Neue',Arial,'Liberation Sans',FreeSans,sans-serif}pre,code{font-family:'DejaVu Sans Mono',Menlo,Consolas,monospace}hr{border:0 solid #ccc;border-top-width:1px;clear:both;height:0}h1{font-size:25px}h2{font-size:23px}h3{font-size:21px}h4{font-size:19px}h5{font-size:17px}h6{font-size:15px}ol{list-style:decimal}ul{list-style:disc}li{margin-left:30px}p,dl,hr,h1,h2,h3,h4,h5,h6,ol,ul,pre,table,address,fieldset,figure{margin-bottom:20px} \ No newline at end of file diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.eot b/xs/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.eot new file mode 100644 index 0000000000000000000000000000000000000000..e4e3d1701a36b25a815be79529bfb5ee4250b1ea GIT binary patch literal 78514 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 WS5Eb4DOm!9bZ#mjixJS3Q2rAvu!(~J literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.ttf b/xs/src/avrdude/atmel-docs/EDBG/common/fonts/DroidSansMono.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4546611d4d55347c95827d96d41a771d7ba283ca GIT binary patch literal 78296 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 z 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 P5YoA+fGkEpS3>zuTV!jd literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/Book_Closed.png b/xs/src/avrdude/atmel-docs/EDBG/common/images/Book_Closed.png new file mode 100644 index 0000000000000000000000000000000000000000..294fbf6b00fb1ca9ca39c1e0f673cc23858626d0 GIT binary patch literal 3245 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 literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/Book_Open.png b/xs/src/avrdude/atmel-docs/EDBG/common/images/Book_Open.png new file mode 100644 index 0000000000000000000000000000000000000000..d78710e775a660b146223648ded256d48142f903 GIT binary patch literal 703 zcmV;w0zmzVP)|lZCyn_&>~6#H!XA- zCA80NMq3vV1eqp5l#R^~qwn3{&Ks3HaJbxi&i9?~eDAUQPv_D2Tf^ws2!t=-oI@H@ zH>#cU@$7<;-{ z7YfAzB#DfLHX6zpN(*TSKvo6hMj{E=oY5Hx|#6p)6c zNhAhBN(n^_nphPTB>_6}D1Ewfq>HCPb-fF)w4kL2nKtYJlm)X1>a{;GDyC)&vm;3( zZBIi}qb4bhw#4S|pYXTqs7&S&MG@ld*3JZ_Bpj!qo`)pfLfovOM>lZ(Scntj!zd0N z$HYhp%b!=trI;pYoz=9QZ2v;ZG;r={56+fPqC7f?d>F!tOvhGEzeo}%G{L&XP}MJ1 z$9mD%dk90Lr#jl#TO7Q#MW3Nf+tu*x$0j*tLSY=c;+ks(IGU5OL002ovPDHLkV1n{gH-7*C literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/Document_Text.png b/xs/src/avrdude/atmel-docs/EDBG/common/images/Document_Text.png new file mode 100644 index 0000000000000000000000000000000000000000..416b5380d92c45bbace2d99223ff5e1ead4f5ef6 GIT binary patch literal 583 zcmV-N0=WH&P)004R=004l4008;_004mL004C`008P>0026e000+nl3&F}00009 za7bBm000XT000XT0n*)m`~Uy|8gxZibW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE-^4L z^m3s900EatL_t(2Q;m_!O9D|C#pmy-g>7nE+uHOO1V!Pps8zJBoluJ?D58ZGC4qrK zp@pSk?}w(MWhrW@P5B-jr+J+2y)cSp(ZI(r-1D1r&iy!>JB(Iibp~Lu-(h|Cf{qCQ zM~9>0-yV$|tZW~nvv(L%Ci4~pc8-EA^%_yjiiU-CI~<;X4q3SE1K$rorD9n_O;Ry$ z-bYv8NPW1?y=w+cEb|zg<v;eG literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/Library.png b/xs/src/avrdude/atmel-docs/EDBG/common/images/Library.png new file mode 100644 index 0000000000000000000000000000000000000000..a2fa8fce4b7f87a2ea24137a551206e0107f9834 GIT binary patch literal 798 zcmV+(1L6FMP)ng|9zOSdc~?lpc^8kTC}#*Hk+Uu0tp#GM*9ibM^8 z5HzAlVF8vPQb$|+qotjBGjHCT=bb^to7~*V&AsQGckVzb1ut(8PN~b+@2OO_tnLp? ztNte=>g>QHl`gESWWJ!z-x*Tg+^zn8RnDcAo-3;>4~CTHH6IQysL$~?s_)z>ZDKTq zVq+e&UlZ!u=^m{u+=vTzhjFwyjODQzb*ZmcYifz$>fkWSE})IPG!!V-ix%F0NZ?S9 ziK4-fFB^U}ZI154U0}?Bxt51%mcT8BccBB=SBxPbr9vpQ74;1v1cN_4EOfU;{OY<2 zWAk79@78cT5T>5e@H+7w$e3`1jeuJhHzZ9sQj#?3FMHMRI~=w~%VZkoYIENCqreM?yO7cacLZ!o4@k%j0EY%m zhro$|yPE)FLxF%4F1?K^8R{)F&S}~8LHt3%VMzD@w)zi13QvK9$*Cza(MC3t!VXb` z*oux4vtZB(&0+za9UaK8%z)W+R>uM})_oHt5d=(AptG|Jr4mP}yaXAr z%%StL4Fz5VIF~XSJz43H#mt%|6W38+Ta7J&08q0H!Kx+*#$eU8z^W3UE21XoA~*gR zFK*t@XbP3__$oc&7yU?|Q0MN&YC4BPHjQjz1<9oa^q#qhYJC!NEr)DMN1XbT&z@?Y cg5LrR0IL|>8gzzU)&Kwi07*qoM6N<$f-+THGynhq literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/external_link.gif b/xs/src/avrdude/atmel-docs/EDBG/common/images/external_link.gif new file mode 100644 index 0000000000000000000000000000000000000000..177cbbc72b923fed4ea521b1d7ddff9bf86d6260 GIT binary patch literal 98 zcmZ?wbhEHbC;V{HvICMz`~#d5&)@XU{?3ob?2Va pDUN9p7X7Q<2{`PClr$}iU}#V;Y&>|qO77UssIvB&{}!AK)&PlRB2WMT literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/loading.gif b/xs/src/avrdude/atmel-docs/EDBG/common/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..085ccaecaf5fa5c34bc14cd2c2ed5cbbd8e25dcb GIT binary patch literal 1553 zcma)+TTl~c6vwlh>nb99Af5rT)t{mCEg5urg=A(g z{C|6SPb~9Xage|wB`SrZk2FOMYM!buln2sX?5Y+T78iB(Zu9cS7|LZyZ++}u$^oi1 z_j@S}bW9OzU2R+RMy&~OT>X-oZ98$jq#ogNfJ!BM-42wHGZk*6s2KD}U*IA%epmxb zm}|6BK9YoIF;*xSL!+z@<64lB7->LTW2Vi4ostCA(z&2XniwNIv}fFo-`MbG;)u4G z^p@F!)|9HhZprHd_vXjDoxs6WkK-6P0@lfxnGT>*p(QHoUV=u1FAqb@b%*W=a3{`LsH5k^AvQNL>6fPpy#oU(&MuH(*aEX4b35*} zn4n7)`I2U%=+Z=?BVZQ?vjQFW4gD@~XSOO6b{qu81`4&LFuU2(ilxW+1|ZkNMnWe79C$gs zWT?Ele|HR{JGPe)5BTW>0Ey?-Ls6S#GoV0tbt6ku7B&*0 z;i9QM$W1Rj*rRIdceL)rAOSl+sDe3LkB87<%){;ZdHp6|SNlopDXRx< zxBDF9-lTo&v`8$humFygUij@qgT=Qzhj8{ym2-{Xciwqq_Xwk%=O3B-MNAL_6e`3U zyxwmXex4`g0^1RYw~Dth3av3Dl^AAlpO3mG!nLr#&ZZ7c_wUboI+deC+&%TFjK2Lm z!Y&f1h|T_On%RCV&=4bx`!>(YezqGVhl&QpED?N6GV)HmzJ9&rh$x*i?*@o9#6QI< z5ZI_MRX;0+pY8$`j)eF#TlUyG(eE%E7S!rj;mj^M5vhUicPm zVWQ2z+imFyg}SRABmOBY_@osR!>7Ov!ioK`NB6_Rv}7Ud?35ed5Sb@?yND?kv~RCa wqs^a3Sh>&&L4)!LKI?D2&k@))k(LESaga|C278ChSzn3NWVkcuNoY&{0f?~U_5c6? literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/logo.png b/xs/src/avrdude/atmel-docs/EDBG/common/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..df85ffbeb29836ae38402ba7e1b474fa1f342464 GIT binary patch literal 4305 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 literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/next-arrow.png b/xs/src/avrdude/atmel-docs/EDBG/common/images/next-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..db595f465da4d03955dfcb11980a279b6ab6ccad GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dF8<0HkD{mW+k}PqJC<)F_D=AMbN@Z|N$xljE z@XSq2PYp^7*cU7>Bs;7_RJjWDk>HR4;U0G)l~k~EqL_RVNHXt zp|F%aL&tk&QFDfk40f#s0sKdvH+BhgXtFR)5Pp>CcW~(kW&w4*hz$n>JLDT!A~tAb uu{`2*V3nW1I#D!_;gQn}&KC>{2N>!FRd(cyzWN5Vl)=;0&t;ucLK6V+=s$P> literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/plus.png b/xs/src/avrdude/atmel-docs/EDBG/common/images/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..31010fe96a0e0c29826094f47cd8bcac0457246f GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VEa{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i=qdAc};RNP9+$;kL|-ho3Ph-Fgx zA*H^Bot=#w2bvDENX!(7*cU7>Bs;7_RM+{CQNw1Fo``;OomIOA;eyQoxxDq zqleYEkzs-s!=tK_vpODKLJPP=Hrzbak`ij8=UULpEv8e!aHP*6O-Z2sz)AtOhAwdi tO;?4yBLSV-6%OYZAAQ~MfRV$1!EulJ!>J6GyMcBxc)I$ztaD0e0sv`WKHvZV literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/search-icon.png b/xs/src/avrdude/atmel-docs/EDBG/common/images/search-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..715f62d08b07f857b5866aadab38c9275c1c7513 GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^;y^6L!3HE_wj8emQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf9Y#@6Www1Qyw!k0S3F%DLp+YZ zy<+I?6ez>`Aztf}Sn4}APCv){3l|=>Yl)V3lbRE=XyLww>=g=mre-ad1o$;s=E~eD z+1Y%=dExh#rt)dr&+9GQtIt35Z{zvT^t|GLxm`j3W0RKkh6mMWWjy3Aj!_ZROK!09 ztNWn5M@?|QQ%lvEHI1z2$~vEH`%o!!e`u6{1-oD!M<4CsTk literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/sidebar.png b/xs/src/avrdude/atmel-docs/EDBG/common/images/sidebar.png new file mode 100644 index 0000000000000000000000000000000000000000..5492671871c1fdb7c149bf233e34ebddd074c777 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp@K+MU(1SHcW3~hmwWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8U{4pvkcwMLbBxo^O;mQ5C}5VBp8e!WN?S`y%iQnt-qwGU z>u7lMf5n5>*VhX;sx9C%(%2aC{q^zkm`nHf)ixVQbn@6YFfcQ; Xxf$LLJ^5Y}Xgq_btDnm{r-UW|fBilp literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/images/starsSmall.png b/xs/src/avrdude/atmel-docs/EDBG/common/images/starsSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..490a27b9255075c8ce355aa3e36f89c82038b794 GIT binary patch literal 1032 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 literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery-1.7.2.min.js b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery-1.7.2.min.js new file mode 100644 index 000000000..93adea19f --- /dev/null +++ b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery-1.7.2.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.2 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="

"+""+"
",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="
t
",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="
",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( +a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f +.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.cookie.js b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.cookie.js new file mode 100644 index 000000000..bada7bff7 --- /dev/null +++ b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.cookie.js @@ -0,0 +1,93 @@ +/** + * Cookie plugin + * + * Copyright (c) 2006 Klaus Hartl (stilbuero.de) + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + */ + +/** + * Create a cookie with the given name and value and other optional parameters. + * + * @example $.cookie('the_cookie', 'the_value'); + * @desc Set the value of a cookie. + * @example $.cookie('the_cookie', 'the_value', {expires: 7, path: '/', domain: 'jquery.com', secure: true}); + * @desc Create a cookie with all available options. + * @example $.cookie('the_cookie', 'the_value'); + * @desc Create a session cookie. + * @example $.cookie('the_cookie', null); + * @desc Delete a cookie by passing null as value. + * + * @param String name The name of the cookie. + * @param String value The value of the cookie. + * @param Object options An object literal containing key/value pairs to provide optional cookie attributes. + * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object. + * If a negative value is specified (e.g. a date in the past), the cookie will be deleted. + * If set to null or omitted, the cookie will be a session cookie and will not be retained + * when the the browser exits. + * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie). + * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie). + * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will + * require a secure protocol (like HTTPS). + * @type undefined + * + * @name $.cookie + * @cat Plugins/Cookie + * @author Klaus Hartl/klaus.hartl@stilbuero.de + */ + +/** + * Get the value of a cookie with the given name. + * + * @example $.cookie('the_cookie'); + * @desc Get the value of a cookie. + * + * @param String name The name of the cookie. + * @return The value of the cookie. + * @type String + * + * @name $.cookie + * @cat Plugins/Cookie + * @author Klaus Hartl/klaus.hartl@stilbuero.de + */ +jQuery.cookie = function(name, value, options) { + if (typeof value != 'undefined') { // name and value given, set cookie + options = options || {}; + if (value === null) { + value = ''; + options.expires = -1; + } + var expires = ''; + if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { + var date; + if (typeof options.expires == 'number') { + date = new Date(); + date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); + } else { + date = options.expires; + } + expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE + } + var path = options.path ? '; path=' + options.path : ''; + var domain = options.domain ? '; domain=' + options.domain : ''; + var secure = options.secure ? '; secure' : ''; + document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); + + } else { // only name given, get cookie + var cookieValue = null; + if (document.cookie && document.cookie != '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) == (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; + } +}; \ No newline at end of file diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.ui.all.js b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.ui.all.js new file mode 100644 index 000000000..943d3b357 --- /dev/null +++ b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/jquery.ui.all.js @@ -0,0 +1,418 @@ +/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(b,a){function c(c,a){var e=c.nodeName.toLowerCase();if("area"===e){var e=c.parentNode,f=e.name;if(!c.href||!f||"map"!==e.nodeName.toLowerCase())return!1;e=b("img[usemap=#"+f+"]")[0];return!!e&&d(e)}return(/input|select|textarea|button|object/.test(e)?!c.disabled:"a"==e?c.href||a:a)&&d(c)}function d(c){return!b(c).parents().andSelf().filter(function(){return"hidden"===b.curCSS(this,"visibility")||b.expr.filters.hidden(this)}).length}b.ui=b.ui||{};b.ui.version||(b.extend(b.ui,{version:"1.8.14", +keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),b.fn.extend({_focus:b.fn.focus,focus:function(c,a){return"number"===typeof c?this.each(function(){var d=this;setTimeout(function(){b(d).focus(); +a&&a.call(d)},c)}):this._focus.apply(this,arguments)},scrollParent:function(){var c;c=b.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(b.curCSS(this,"position",1))&&/(auto|scroll)/.test(b.curCSS(this,"overflow",1)+b.curCSS(this,"overflow-y",1)+b.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(b.curCSS(this,"overflow",1)+b.curCSS(this, +"overflow-y",1)+b.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!c.length?b(document):c},zIndex:function(c){if(c!==a)return this.css("zIndex",c);if(this.length)for(var c=b(this[0]),d;c.length&&c[0]!==document;){d=c.css("position");if("absolute"===d||"relative"===d||"fixed"===d)if(d=parseInt(c.css("zIndex"),10),!isNaN(d)&&0!==d)return d;c=c.parent()}return 0},disableSelection:function(){return this.bind((b.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection", +function(b){b.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),b.each(["Width","Height"],function(c,d){function e(c,a,d,g){b.each(f,function(){a-=parseFloat(b.curCSS(c,"padding"+this,!0))||0;d&&(a-=parseFloat(b.curCSS(c,"border"+this+"Width",!0))||0);g&&(a-=parseFloat(b.curCSS(c,"margin"+this,!0))||0)});return a}var f="Width"===d?["Left","Right"]:["Top","Bottom"],i=d.toLowerCase(),j={innerWidth:b.fn.innerWidth,innerHeight:b.fn.innerHeight,outerWidth:b.fn.outerWidth, +outerHeight:b.fn.outerHeight};b.fn["inner"+d]=function(f){return f===a?j["inner"+d].call(this):this.each(function(){b(this).css(i,e(this,f)+"px")})};b.fn["outer"+d]=function(f,c){return"number"!==typeof f?j["outer"+d].call(this,f):this.each(function(){b(this).css(i,e(this,f,!0,c)+"px")})}}),b.extend(b.expr[":"],{data:function(c,a,d){return!!b.data(c,d[3])},focusable:function(a){return c(a,!isNaN(b.attr(a,"tabindex")))},tabbable:function(a){var d=b.attr(a,"tabindex"),e=isNaN(d);return(e||0<=d)&&c(a, +!e)}}),b(function(){var c=document.body,a=c.appendChild(a=document.createElement("div"));b.extend(a.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});b.support.minHeight=100===a.offsetHeight;b.support.selectstart="onselectstart"in a;c.removeChild(a).style.display="none"}),b.extend(b.ui,{plugin:{add:function(c,a,d){var c=b.ui[c].prototype,f;for(f in d)c.plugins[f]=c.plugins[f]||[],c.plugins[f].push([a,d[f]])},call:function(b,c,a){if((c=b.plugins[c])&&b.element[0].parentNode)for(var f= +0;fc&&b=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery); +(function(b){b.ui=b.ui||{};var a=/left|center|right/,c=/top|center|bottom/,d=b.fn.position,g=b.fn.offset;b.fn.position=function(g){if(!g||!g.of)return d.apply(this,arguments);var g=b.extend({},g),e=b(g.of),f=e[0],i=(g.collision||"flip").split(" "),j=g.offset?g.offset.split(" "):[0,0],k,l,m;9===f.nodeType?(k=e.width(),l=e.height(),m={top:0,left:0}):f.setTimeout?(k=e.width(),l=e.height(),m={top:e.scrollTop(),left:e.scrollLeft()}):f.preventDefault?(g.at="left top",k=l=0,m={top:g.of.pageY,left:g.of.pageX}): +(k=e.outerWidth(),l=e.outerHeight(),m=e.offset());b.each(["my","at"],function(){var b=(g[this]||"").split(" ");b.length===1&&(b=a.test(b[0])?b.concat(["center"]):c.test(b[0])?["center"].concat(b):["center","center"]);b[0]=a.test(b[0])?b[0]:"center";b[1]=c.test(b[1])?b[1]:"center";g[this]=b});1===i.length&&(i[1]=i[0]);j[0]=parseInt(j[0],10)||0;1===j.length&&(j[1]=j[0]);j[1]=parseInt(j[1],10)||0;"right"===g.at[0]?m.left+=k:"center"===g.at[0]&&(m.left+=k/2);"bottom"===g.at[1]?m.top+=l:"center"===g.at[1]&& +(m.top+=l/2);m.left+=j[0];m.top+=j[1];return this.each(function(){var f=b(this),c=f.outerWidth(),a=f.outerHeight(),d=parseInt(b.curCSS(this,"marginLeft",true))||0,e=parseInt(b.curCSS(this,"marginTop",true))||0,r=c+d+(parseInt(b.curCSS(this,"marginRight",true))||0),u=a+e+(parseInt(b.curCSS(this,"marginBottom",true))||0),s=b.extend({},m),v;if(g.my[0]==="right")s.left=s.left-c;else if(g.my[0]==="center")s.left=s.left-c/2;if(g.my[1]==="bottom")s.top=s.top-a;else if(g.my[1]==="center")s.top=s.top-a/2; +s.left=Math.round(s.left);s.top=Math.round(s.top);v={left:s.left-d,top:s.top-e};b.each(["left","top"],function(f,d){if(b.ui.position[i[f]])b.ui.position[i[f]][d](s,{targetWidth:k,targetHeight:l,elemWidth:c,elemHeight:a,collisionPosition:v,collisionWidth:r,collisionHeight:u,offset:j,my:g.my,at:g.at})});b.fn.bgiframe&&f.bgiframe();f.offset(b.extend(s,{using:g.using}))})};b.ui.position={fit:{left:function(c,a){var f=b(window),f=a.collisionPosition.left+a.collisionWidth-f.width()-f.scrollLeft();c.left= +0a.collisionPosition.left?d+g+k:0a.collisionPosition.top?d+g+k:0
').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(b(this).offset()).appendTo("body")});return!0},_mouseStart:function(a){var c=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();b.ui.ddmanager&&(b.ui.ddmanager.current=this); +this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};b.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY= +a.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);c.containment&&this._setContainment();if(!1===this._trigger("start",a))return this._clear(),!1;this._cacheHelperProportions();b.ui.ddmanager&&!c.dropBehaviour&&b.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,!0);b.ui.ddmanager&&b.ui.ddmanager.dragStart(this,a);return!0},_mouseDrag:function(a,c){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute"); +if(!c){var d=this._uiHash();if(!1===this._trigger("drag",a,d))return this._mouseUp({}),!1;this.position=d.position}if(!this.options.axis||"y"!=this.options.axis)this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||"x"!=this.options.axis)this.helper[0].style.top=this.position.top+"px";b.ui.ddmanager&&b.ui.ddmanager.drag(this,a);return!1},_mouseStop:function(a){var c=!1;b.ui.ddmanager&&!this.options.dropBehaviour&&(c=b.ui.ddmanager.drop(this,a));this.dropped&&(c=this.dropped,this.dropped= +!1);if((!this.element[0]||!this.element[0].parentNode)&&"original"==this.options.helper)return!1;if("invalid"==this.options.revert&&!c||"valid"==this.options.revert&&c||!0===this.options.revert||b.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var d=this;b(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){d._trigger("stop",a)!==false&&d._clear()})}else!1!==this._trigger("stop",a)&&this._clear();return!1},_mouseUp:function(a){!0=== +this.options.iframeFix&&b("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});b.ui.ddmanager&&b.ui.ddmanager.dragStop(this,a);return b.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var c=!this.options.handle||!b(this.options.handle,this.element).length?!0:!1;b(this.options.handle,this.element).find("*").andSelf().each(function(){this==a.target&&(c= +!0)});return c},_createHelper:function(a){var c=this.options,a=b.isFunction(c.helper)?b(c.helper.apply(this.element[0],[a])):"clone"==c.helper?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo("parent"==c.appendTo?this.element[0].parentNode:c.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){"string"==typeof a&&(a=a.split(" "));b.isArray(a)&&(a={left:+a[0],top:+a[1]|| +0});"left"in a&&(this.offset.click.left=a.left+this.margins.left);"right"in a&&(this.offset.click.left=this.helperProportions.width-a.right+this.margins.left);"top"in a&&(this.offset.click.top=a.top+this.margins.top);"bottom"in a&&(this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();"absolute"==this.cssPosition&&(this.scrollParent[0]!=document&&b.ui.contains(this.scrollParent[0], +this.offsetParent[0]))&&(a.left+=this.scrollParent.scrollLeft(),a.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&"html"==this.offsetParent[0].tagName.toLowerCase()&&b.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"==this.cssPosition){var b=this.element.position();return{top:b.top- +(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(), +height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;"parent"==a.containment&&(a.containment=this.helper[0].parentNode);if("document"==a.containment||"window"==a.containment)this.containment=["document"==a.containment?0:b(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,"document"==a.containment?0:b(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,("document"==a.containment?0:b(window).scrollLeft())+b("document"==a.containment?document: +window).width()-this.helperProportions.width-this.margins.left,("document"==a.containment?0:b(window).scrollTop())+(b("document"==a.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){var a=b(a.containment),c=a[0];if(c){a.offset();var d="hidden"!=b(c).css("overflow");this.containment=[(parseInt(b(c).css("borderLeftWidth"),10)||0)+(parseInt(b(c).css("paddingLeft"), +10)||0),(parseInt(b(c).css("borderTopWidth"),10)||0)+(parseInt(b(c).css("paddingTop"),10)||0),(d?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(b(c).css("borderLeftWidth"),10)||0)-(parseInt(b(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(d?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(b(c).css("borderTopWidth"),10)||0)-(parseInt(b(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom]; +this.relative_container=a}}else a.containment.constructor==Array&&(this.containment=a.containment)},_convertPositionTo:function(a,c){c||(c=this.position);var d="absolute"==a?1:-1,g="absolute"==this.cssPosition&&!(this.scrollParent[0]!=document&&b.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(g[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(b.browser.safari&&526>b.browser.version&&"fixed"==this.cssPosition? +0:("fixed"==this.cssPosition?-this.scrollParent.scrollTop():h?0:g.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(b.browser.safari&&526>b.browser.version&&"fixed"==this.cssPosition?0:("fixed"==this.cssPosition?-this.scrollParent.scrollLeft():h?0:g.scrollLeft())*d)}},_generatePosition:function(a){var c=this.options,d="absolute"==this.cssPosition&&!(this.scrollParent[0]!=document&&b.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent, +g=/(html|body)/i.test(d[0].tagName),h=a.pageX,e=a.pageY;if(this.originalPosition){var f;this.containment&&(this.relative_container?(f=this.relative_container.offset(),f=[this.containment[0]+f.left,this.containment[1]+f.top,this.containment[2]+f.left,this.containment[3]+f.top]):f=this.containment,a.pageX-this.offset.click.leftf[2]&&(h=f[2]+this.offset.click.left), +a.pageY-this.offset.click.top>f[3]&&(e=f[3]+this.offset.click.top));c.grid&&(e=c.grid[1]?this.originalPageY+Math.round((e-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY,e=f?!(e-this.offset.click.topf[3])?e:!(e-this.offset.click.topf[2])?h:!(h-this.offset.click.left< +f[0])?h-c.grid[0]:h+c.grid[0]:h)}return{top:e-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(b.browser.safari&&526>b.browser.version&&"fixed"==this.cssPosition?0:"fixed"==this.cssPosition?-this.scrollParent.scrollTop():g?0:d.scrollTop()),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(b.browser.safari&&526>b.browser.version&&"fixed"==this.cssPosition?0:"fixed"==this.cssPosition?-this.scrollParent.scrollLeft():g?0:d.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"); +this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=!1},_trigger:function(a,c,d){d=d||this._uiHash();b.ui.plugin.call(this,a,[c,d]);"drag"==a&&(this.positionAbs=this._convertPositionTo("absolute"));return b.Widget.prototype._trigger.call(this,a,c,d)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});b.extend(b.ui.draggable,{version:"1.8.14"}); +b.ui.plugin.add("draggable","connectToSortable",{start:function(a,c){var d=b(this).data("draggable"),g=d.options,h=b.extend({},c,{item:d.element});d.sortables=[];b(g.connectToSortable).each(function(){var c=b.data(this,"sortable");c&&!c.options.disabled&&(d.sortables.push({instance:c,shouldRevert:c.options.revert}),c.refreshPositions(),c._trigger("activate",a,h))})},stop:function(a,c){var d=b(this).data("draggable"),g=b.extend({},c,{item:d.element});b.each(d.sortables,function(){this.instance.isOver? +(this.instance.isOver=0,d.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(a),this.instance.options.helper=this.instance.options._helper,"original"==d.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",a,g))})},drag:function(a,c){var d=b(this).data("draggable"),g=this;b.each(d.sortables,function(){this.instance.positionAbs= +d.positionAbs;this.instance.helperProportions=d.helperProportions;this.instance.offset.click=d.offset.click;this.instance._intersectsWith(this.instance.containerCache)?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=b(g).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return c.helper[0]},a.target=this.instance.currentItem[0],this.instance._mouseCapture(a, +!0),this.instance._mouseStart(a,!0,!0),this.instance.offset.click.top=d.offset.click.top,this.instance.offset.click.left=d.offset.click.left,this.instance.offset.parent.left-=d.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=d.offset.parent.top-this.instance.offset.parent.top,d._trigger("toSortable",a),d.dropped=this.instance.element,d.currentItem=d.element,this.instance.fromOutside=d),this.instance.currentItem&&this.instance._mouseDrag(a)):this.instance.isOver&& +(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",a,this.instance._uiHash(this.instance)),this.instance._mouseStop(a,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),d._trigger("fromSortable",a),d.dropped=!1)})}});b.ui.plugin.add("draggable","cursor",{start:function(){var a=b("body"),c=b(this).data("draggable").options; +a.css("cursor")&&(c._cursor=a.css("cursor"));a.css("cursor",c.cursor)},stop:function(){var a=b(this).data("draggable").options;a._cursor&&b("body").css("cursor",a._cursor)}});b.ui.plugin.add("draggable","opacity",{start:function(a,c){var d=b(c.helper),g=b(this).data("draggable").options;d.css("opacity")&&(g._opacity=d.css("opacity"));d.css("opacity",g.opacity)},stop:function(a,c){var d=b(this).data("draggable").options;d._opacity&&b(c.helper).css("opacity",d._opacity)}});b.ui.plugin.add("draggable", +"scroll",{start:function(){var a=b(this).data("draggable");a.scrollParent[0]!=document&&"HTML"!=a.scrollParent[0].tagName&&(a.overflowOffset=a.scrollParent.offset())},drag:function(a){var c=b(this).data("draggable"),d=c.options,g=!1;if(c.scrollParent[0]!=document&&"HTML"!=c.scrollParent[0].tagName){if(!d.axis||"x"!=d.axis)c.overflowOffset.top+c.scrollParent[0].offsetHeight-a.pageY=k&&e<=l||f>=k&&f<=l||el)&&(g>=i&&g<=j||h>=i&&h<=j||gj);default:return!1}}; +b.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,c){var d=b.ui.ddmanager.droppables[a.options.scope]||[],g=c?c.type:null,h=(a.currentItem||a.element).find(":data(droppable)").andSelf(),e=0;a:for(;e').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize", +"none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize());this.handles=a.handles||(!b(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){"all"== +this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw");var h=this.handles.split(",");this.handles={};for(var e=0;e');/sw|se|ne|nw/.test(f)&&i.css({zIndex:++a.zIndex});"se"==f&&i.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(i)}}this._renderAxis=function(f){var f=f||this.element,c;for(c in this.handles){this.handles[c].constructor==String&&(this.handles[c]= +b(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var a=b(this.handles[c],this.element),d=0,d=/sw|ne|nw|se|n|s/.test(c)?a.outerHeight():a.outerWidth(),a=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");f.css(a,d);this._proportionallyResize()}b(this.handles[c])}};this._renderAxis(this.element);this._handles=b(".ui-resizable-handle",this.element).disableSelection(); +this._handles.mouseover(function(){if(!c.resizing){if(this.className)var b=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);c.axis=b&&b[1]?b[1]:"se"}});a.autoHide&&(this._handles.hide(),b(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){b(this).removeClass("ui-resizable-autohide");c._handles.show()}},function(){if(!a.disabled&&!c.resizing){b(this).addClass("ui-resizable-autohide");c._handles.hide()}}));this._mouseInit()},destroy:function(){this._mouseDestroy(); +var c=function(c){b(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){c(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);c(this.originalElement);return this},_mouseCapture:function(c){var a= +!1,h;for(h in this.handles)b(this.handles[h])[0]==c.target&&(a=!0);return!this.options.disabled&&a},_mouseStart:function(c){var g=this.options,h=this.element.position(),e=this.element;this.resizing=!0;this.documentScroll={top:b(document).scrollTop(),left:b(document).scrollLeft()};(e.is(".ui-draggable")||/absolute/.test(e.css("position")))&&e.css({position:"absolute",top:h.top,left:h.left});b.browser.opera&&/relative/.test(e.css("position"))&&e.css({position:"relative",top:"auto",left:"auto"});this._renderProxy(); +var h=a(this.helper.css("left")),f=a(this.helper.css("top"));g.containment&&(h+=b(g.containment).scrollLeft()||0,f+=b(g.containment).scrollTop()||0);this.offset=this.helper.offset();this.position={left:h,top:f};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:h,top:f};this.sizeDiff={width:e.outerWidth()- +e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:c.pageX,top:c.pageY};this.aspectRatio="number"==typeof g.aspectRatio?g.aspectRatio:this.originalSize.width/this.originalSize.height||1;g=b(".ui-resizable-"+this.axis).css("cursor");b("body").css("cursor","auto"==g?this.axis+"-resize":g);e.addClass("ui-resizable-resizing");this._propagate("start",c);return!0},_mouseDrag:function(b){var c=this.helper,a=this.originalMousePosition,e=this._change[this.axis];if(!e)return!1;a= +e.apply(this,[b,b.pageX-a.left||0,b.pageY-a.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)a=this._updateRatio(a,b);a=this._respectSize(a,b);this._propagate("resize",b);c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(a);this._trigger("resize",b,this.ui());return!1},_mouseStop:function(c){this.resizing= +!1;var a=this.options;if(this._helper){var h=this._proportionallyResizeElements,e=h.length&&/textarea/i.test(h[0].nodeName),h=e&&b.ui.hasScroll(h[0],"left")?0:this.sizeDiff.height,e=e?0:this.sizeDiff.width,e={width:this.helper.width()-e,height:this.helper.height()-h},h=parseInt(this.element.css("left"),10)+(this.position.left-this.originalPosition.left)||null,f=parseInt(this.element.css("top"),10)+(this.position.top-this.originalPosition.top)||null;a.animate||this.element.css(b.extend(e,{top:f,left:h})); +this.helper.height(this.size.height);this.helper.width(this.size.width);this._helper&&!a.animate&&this._proportionallyResize()}b("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",c);this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(b){var a=this.options,h,e,f,a={minWidth:c(a.minWidth)?a.minWidth:0,maxWidth:c(a.maxWidth)?a.maxWidth:Infinity,minHeight:c(a.minHeight)?a.minHeight:0,maxHeight:c(a.maxHeight)?a.maxHeight:Infinity}; +if(this._aspectRatio||b)if(b=a.minHeight*this.aspectRatio,e=a.minWidth/this.aspectRatio,h=a.maxHeight*this.aspectRatio,f=a.maxWidth/this.aspectRatio,b>a.minWidth&&(a.minWidth=b),e>a.minHeight&&(a.minHeight=e),hb.width,j=c(b.height)&&a.minHeight&&a.minHeight> +b.height;i&&(b.width=a.minWidth);j&&(b.height=a.minHeight);e&&(b.width=a.maxWidth);f&&(b.height=a.maxHeight);var k=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,m=/sw|nw|w/.test(h),h=/nw|ne|n/.test(h);i&&m&&(b.left=k-a.minWidth);e&&m&&(b.left=k-a.maxWidth);j&&h&&(b.top=l-a.minHeight);f&&h&&(b.top=l-a.maxHeight);(a=!b.width&&!b.height)&&!b.left&&b.top?b.top=null:a&&(!b.top&&b.left)&&(b.left=null);return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var c= +this.helper||this.element,a=0;a');var a=b.browser.msie&&7>b.browser.version,h=a?1:0,a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-h+"px",top:this.elementOffset.top- +h+"px",zIndex:++c.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,c){return{width:this.originalSize.width+c}},w:function(b,c){return{left:this.originalPosition.left+c,width:this.originalSize.width-c}},n:function(b,c,a){return{top:this.originalPosition.top+a,height:this.originalSize.height-a}},s:function(b,c,a){return{height:this.originalSize.height+a}},se:function(c,a,h){return b.extend(this._change.s.apply(this,arguments),this._change.e.apply(this, +[c,a,h]))},sw:function(c,a,h){return b.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[c,a,h]))},ne:function(c,a,h){return b.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[c,a,h]))},nw:function(c,a,h){return b.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[c,a,h]))}},_propagate:function(c,a){b.ui.plugin.call(this,c,[a,this.ui()]);"resize"!=c&&this._trigger(c,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement, +element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});b.extend(b.ui.resizable,{version:"1.8.14"});b.ui.plugin.add("resizable","alsoResize",{start:function(){var c=b(this).data("resizable").options,a=function(c){b(c).each(function(){var c=b(this);c.data("resizable-alsoresize",{width:parseInt(c.width(),10),height:parseInt(c.height(),10),left:parseInt(c.css("left"),10),top:parseInt(c.css("top"),10),position:c.css("position")})})}; +"object"==typeof c.alsoResize&&!c.alsoResize.parentNode?c.alsoResize.length?(c.alsoResize=c.alsoResize[0],a(c.alsoResize)):b.each(c.alsoResize,function(b){a(b)}):a(c.alsoResize)},resize:function(c,a){var h=b(this).data("resizable"),e=h.options,f=h.originalSize,i=h.originalPosition,j={height:h.size.height-f.height||0,width:h.size.width-f.width||0,top:h.position.top-i.top||0,left:h.position.left-i.left||0},k=function(c,f){b(c).each(function(){var c=b(this),d=b(this).data("resizable-alsoresize"),i={}, +e=f&&f.length?f:c.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];b.each(e,function(b,c){var a=(d[c]||0)+(j[c]||0);a&&0<=a&&(i[c]=a||null)});b.browser.opera&&/relative/.test(c.css("position"))&&(h._revertToRelativePosition=!0,c.css({position:"absolute",top:"auto",left:"auto"}));c.css(i)})};"object"==typeof e.alsoResize&&!e.alsoResize.nodeType?b.each(e.alsoResize,function(b,c){k(b,c)}):k(e.alsoResize)},stop:function(){var c=b(this).data("resizable"),a=c.options, +h=function(c){b(c).each(function(){var c=b(this);c.css({position:c.data("resizable-alsoresize").position})})};c._revertToRelativePosition&&(c._revertToRelativePosition=!1,"object"==typeof a.alsoResize&&!a.alsoResize.nodeType?b.each(a.alsoResize,function(b){h(b)}):h(a.alsoResize));b(this).removeData("resizable-alsoresize")}});b.ui.plugin.add("resizable","animate",{stop:function(c){var a=b(this).data("resizable"),h=a.options,e=a._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName), +i=f&&b.ui.hasScroll(e[0],"left")?0:a.sizeDiff.height,f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-i},i=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null,j=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(b.extend(f,j&&i?{top:j,left:i}:{}),{duration:h.animateDuration,easing:h.animateEasing,step:function(){var f={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10), +top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};e&&e.length&&b(e[0]).css({width:f.width,height:f.height});a._updateCache(f);a._propagate("resize",c)}})}});b.ui.plugin.add("resizable","containment",{start:function(){var c=b(this).data("resizable"),g=c.element,h=c.options.containment;if(g=h instanceof b?h.get(0):/parent/.test(h)?g.parent().get(0):h)if(c.containerElement=b(g),/document/.test(h)||h==document)c.containerOffset={left:0,top:0},c.containerPosition={left:0,top:0}, +c.parentData={element:b(document),left:0,top:0,width:b(document).width(),height:b(document).height()||document.body.parentNode.scrollHeight};else{var e=b(g),f=[];b(["Top","Right","Left","Bottom"]).each(function(b,c){f[b]=a(e.css("padding"+c))});c.containerOffset=e.offset();c.containerPosition=e.position();c.containerSize={height:e.innerHeight()-f[3],width:e.innerWidth()-f[1]};var h=c.containerOffset,i=c.containerSize.height,j=c.containerSize.width,j=b.ui.hasScroll(g,"left")?g.scrollWidth:j,i=b.ui.hasScroll(g)? +g.scrollHeight:i;c.parentData={element:g,left:h.left,top:h.top,width:j,height:i}}},resize:function(c){var a=b(this).data("resizable"),h=a.options,e=a.containerOffset,f=a.position,c=a._aspectRatio||c.shiftKey,i={top:0,left:0},j=a.containerElement;j[0]!=document&&/static/.test(j.css("position"))&&(i=e);if(f.left<(a._helper?e.left:0))a.size.width+=a._helper?a.position.left-e.left:a.position.left-i.left,c&&(a.size.height=a.size.width/h.aspectRatio),a.position.left=h.helper?e.left:0;if(f.top<(a._helper? +e.top:0))a.size.height+=a._helper?a.position.top-e.top:a.position.top,c&&(a.size.width=a.size.height*h.aspectRatio),a.position.top=a._helper?e.top:0;a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;h=Math.abs(a.offset.left-i.left+a.sizeDiff.width);e=Math.abs((a._helper?a.offset.top-i.top:a.offset.top-e.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);i=/relative|absolute/.test(a.containerElement.css("position"));f&&i&&(h-=a.parentData.left); +h+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-h,c&&(a.size.height=a.size.width/a.aspectRatio));e+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-e,c&&(a.size.width=a.size.height*a.aspectRatio))},stop:function(){var a=b(this).data("resizable"),c=a.options,h=a.containerOffset,e=a.containerPosition,f=a.containerElement,i=b(a.helper),j=i.offset(),k=i.outerWidth()-a.sizeDiff.width,i=i.outerHeight()-a.sizeDiff.height;a._helper&&(!c.animate&&/relative/.test(f.css("position")))&& +b(this).css({left:j.left-e.left-h.left,width:k,height:i});a._helper&&(!c.animate&&/static/.test(f.css("position")))&&b(this).css({left:j.left-e.left-h.left,width:k,height:i})}});b.ui.plugin.add("resizable","ghost",{start:function(){var a=b(this).data("resizable"),c=a.options,h=a.size;a.ghost=a.originalElement.clone();a.ghost.css({opacity:0.25,display:"block",position:"relative",height:h.height,width:h.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof c.ghost?c.ghost: +"");a.ghost.appendTo(a.helper)},resize:function(){var a=b(this).data("resizable");a.ghost&&a.ghost.css({position:"relative",height:a.size.height,width:a.size.width})},stop:function(){var a=b(this).data("resizable");a.ghost&&a.helper&&a.helper.get(0).removeChild(a.ghost.get(0))}});b.ui.plugin.add("resizable","grid",{resize:function(){var a=b(this).data("resizable"),c=a.options,h=a.size,e=a.originalSize,f=a.originalPosition,i=a.axis;c.grid="number"==typeof c.grid?[c.grid,c.grid]:c.grid;var j=Math.round((h.width- +e.width)/(c.grid[0]||1))*(c.grid[0]||1),c=Math.round((h.height-e.height)/(c.grid[1]||1))*(c.grid[1]||1);/^(se|s|e)$/.test(i)?(a.size.width=e.width+j,a.size.height=e.height+c):/^(ne)$/.test(i)?(a.size.width=e.width+j,a.size.height=e.height+c,a.position.top=f.top-c):(/^(sw)$/.test(i)?(a.size.width=e.width+j,a.size.height=e.height+c):(a.size.width=e.width+j,a.size.height=e.height+c,a.position.top=f.top-c),a.position.left=f.left-j)}});var a=function(b){return parseInt(b,10)||0},c=function(b){return!isNaN(parseInt(b, +10))}})(jQuery); +(function(b){b.widget("ui.selectable",b.ui.mouse,{options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var a=this;this.element.addClass("ui-selectable");this.dragged=!1;var c;this.refresh=function(){c=b(a.options.filter,a.element[0]);c.each(function(){var a=b(this),c=a.offset();b.data(this,"selectable-item",{element:this,$element:a,left:c.left,top:c.top,right:c.left+a.outerWidth(),bottom:c.top+a.outerHeight(),startselected:!1,selected:a.hasClass("ui-selected"),selecting:a.hasClass("ui-selecting"), +unselecting:a.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=b("
")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(a){var c=this;this.opos=[a.pageX,a.pageY];if(!this.options.disabled){var d= +this.options;this.selectees=b(d.filter,this.element[0]);this._trigger("start",a);b(d.appendTo).append(this.helper);this.helper.css({left:a.clientX,top:a.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var d=b.data(this,"selectable-item");d.startselected=!0;a.metaKey||(d.$element.removeClass("ui-selected"),d.selected=!1,d.$element.addClass("ui-unselecting"),d.unselecting=!0,c._trigger("unselecting",a,{unselecting:d.element}))});b(a.target).parents().andSelf().each(function(){var d= +b.data(this,"selectable-item");if(d){var h=!a.metaKey||!d.$element.hasClass("ui-selected");d.$element.removeClass(h?"ui-unselecting":"ui-selected").addClass(h?"ui-selecting":"ui-unselecting");d.unselecting=!h;d.selecting=h;(d.selected=h)?c._trigger("selecting",a,{selecting:d.element}):c._trigger("unselecting",a,{unselecting:d.element});return!1}})}},_mouseDrag:function(a){var c=this;this.dragged=!0;if(!this.options.disabled){var d=this.options,g=this.opos[0],h=this.opos[1],e=a.pageX,f=a.pageY;if(g> +e)var i=e,e=g,g=i;h>f&&(i=f,f=h,h=i);this.helper.css({left:g,top:h,width:e-g,height:f-h});this.selectees.each(function(){var i=b.data(this,"selectable-item");if(i&&i.element!=c.element[0]){var k=false;d.tolerance=="touch"?k=!(i.left>e||i.rightf||i.bottomg&&i.righth&&i.bottom *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh(); +this.floating=this.items.length?"x"===b.axis||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var b=this.items.length-1;0<=b;b--)this.items[b].item.removeData("sortable-item");return this},_setOption:function(a,c){"disabled"===a?(this.options[a]= +c,this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")):b.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,c){if(this.reverting||this.options.disabled||"static"==this.options.type)return!1;this._refreshItems(a);var d=null,g=this;b(a.target).parents().each(function(){if(b.data(this,"sortable-item")==g)return d=b(this),!1});b.data(a.target,"sortable-item")==g&&(d=b(a.target));if(!d)return!1;if(this.options.handle&&!c){var h=!1;b(this.options.handle,d).find("*").andSelf().each(function(){this== +a.target&&(h=!0)});if(!h)return!1}this.currentItem=d;this._removeCurrentsFromItems();return!0},_mouseStart:function(a,c,d){c=this.options;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition= +this.helper.css("position");b.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder(); +c.containment&&this._setContainment();c.cursor&&(b("body").css("cursor")&&(this._storedCursor=b("body").css("cursor")),b("body").css("cursor",c.cursor));c.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",c.opacity));c.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",c.zIndex));this.scrollParent[0]!=document&&"HTML"!=this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()); +this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!d)for(d=this.containers.length-1;0<=d;d--)this.containers[d]._trigger("activate",a,this._uiHash(this));b.ui.ddmanager&&(b.ui.ddmanager.current=this);b.ui.ddmanager&&!c.dropBehaviour&&b.ui.ddmanager.prepareOffsets(this,a);this.dragging=!0;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return!0},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute"); +this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var c=this.options,d=!1;this.scrollParent[0]!=document&&"HTML"!=this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageYb[this.floating?"width":"height"]?g+k>i&&g+ke&&c+lthis.containment[2]&&(h=this.containment[2]+this.offset.click.left),a.pageY-this.offset.click.top>this.containment[3]&&(e=this.containment[3]+this.offset.click.top)),c.grid))e=this.originalPageY+Math.round((e-this.originalPageY)/c.grid[1])*c.grid[1],e=this.containment?!(e-this.offset.click.topthis.containment[3])?e:!(e-this.offset.click.top< +this.containment[1])?e-c.grid[1]:e+c.grid[1]:e,h=this.originalPageX+Math.round((h-this.originalPageX)/c.grid[0])*c.grid[0],h=this.containment?!(h-this.offset.click.leftthis.containment[2])?h:!(h-this.offset.click.left li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,c=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");a.headers= +a.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||b(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||b(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||b(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||b(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); +if(c.navigation){var d=a.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var g=d.closest(".ui-accordion-header");a.active=g.length?g:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion", +function(b){return a._keydown(b)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);b.browser.safari||a.headers.find("a").attr("tabIndex",-1);c.event&&a.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(b){a._clickHandler.call(a,b,this);b.preventDefault()})},_createIcons:function(){var a= +this.options;a.icons&&(b("").addClass("ui-icon "+a.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"); +this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");(a.autoHeight||a.fillHeight)&&c.css("height","");return b.Widget.prototype.destroy.call(this)},_setOption:function(a,c){b.Widget.prototype._setOption.apply(this,arguments);"active"==a&&this.activate(c);"icons"==a&&(this._destroyIcons(), +c&&this._createIcons());if("disabled"==a)this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!this.options.disabled&&!a.altKey&&!a.ctrlKey){var c=b.ui.keyCode,d=this.headers.length,g=this.headers.index(a.target),h=!1;switch(a.keyCode){case c.RIGHT:case c.DOWN:h=this.headers[(g+1)%d];break;case c.LEFT:case c.UP:h=this.headers[(g-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:a.target},a.target),a.preventDefault()}return h? +(b(a.target).attr("tabIndex",-1),b(h).attr("tabIndex",0),h.focus(),!1):!0}},resize:function(){var a=this.options,c;if(a.fillSpace){if(b.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height();b.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){c-=b(this).outerHeight(!0)});this.headers.next().each(function(){b(this).height(Math.max(0,c-b(this).innerHeight()+b(this).height()))}).css("overflow", +"auto")}else a.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,b(this).height("").height())}).height(c));return this},activate:function(b){this.options.active=b;b=this._findActive(b)[0];this._clickHandler({target:b},b);return this},_findActive:function(a){return a?"number"===typeof a?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):!1===a?b([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,c){var d=this.options;if(!d.disabled)if(a.target){var g=b(a.currentTarget|| +c),h=g[0]===this.active[0];d.active=d.collapsible&&h?!1:this.headers.index(g);if(!(this.running||!d.collapsible&&h)){var e=this.active,f=g.next(),i=this.active.next(),j={options:d,newHeader:h&&d.collapsible?b([]):g,oldHeader:this.active,newContent:h&&d.collapsible?b([]):f,oldContent:i},k=this.headers.index(this.active[0])>this.headers.index(g[0]);this.active=h?b([]):g;this._toggle(f,i,j,h,k);e.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header); +h||(g.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),g.next().addClass("ui-accordion-content-active"))}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var i=this.active.next(), +j={options:d,newHeader:b([]),oldHeader:d.active,newContent:b([]),oldContent:i},f=this.active=b([]);this._toggle(f,i,j)}},_toggle:function(a,c,d,g,h){var e=this,f=e.options;e.toShow=a;e.toHide=c;e.data=d;var i=function(){if(e)return e._completed.apply(e,arguments)};e._trigger("changestart",null,e.data);e.running=0===c.size()?a.size():c.size();if(f.animated){d={};d=f.collapsible&&g?{toShow:b([]),toHide:c,complete:i,down:h,autoHeight:f.autoHeight||f.fillSpace}:{toShow:a,toHide:c,complete:i,down:h,autoHeight:f.autoHeight|| +f.fillSpace};f.proxied||(f.proxied=f.animated);f.proxiedDuration||(f.proxiedDuration=f.duration);f.animated=b.isFunction(f.proxied)?f.proxied(d):f.proxied;f.duration=b.isFunction(f.proxiedDuration)?f.proxiedDuration(d):f.proxiedDuration;var g=b.ui.accordion.animations,j=f.duration,k=f.animated;k&&(!g[k]&&!b.easing[k])&&(k="slide");g[k]||(g[k]=function(b){this.slide(b,{easing:k,duration:j||700})});g[k](d)}else f.collapsible&&g?a.toggle():(c.hide(),a.show()),i(!0);c.prev().attr({"aria-expanded":"false", +"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(b){this.running=b?0:--this.running;this.running||(this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data))}});b.extend(b.ui.accordion,{version:"1.8.14", +animations:{slide:function(a,c){a=b.extend({easing:"swing",duration:300},a,c);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),g=0,h={},e={},f,i=a.toShow;f=i[0].style.width;i.width(parseInt(i.parent().width(),10)-parseInt(i.css("paddingLeft"),10)-parseInt(i.css("paddingRight"),10)-(parseInt(i.css("borderLeftWidth"),10)||0)-(parseInt(i.css("borderRightWidth"),10)||0));b.each(["height","paddingTop","paddingBottom"],function(c,f){e[f]="hide";var i=(""+b.css(a.toShow[0],f)).match(/^([\d+-.]+)(.*)$/); +h[f]={value:i[1],unit:i[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(e,{step:function(b,c){"height"==c.prop&&(g=0===c.end-c.start?0:(c.now-c.start)/(c.end-c.start));a.toShow[0].style[c.prop]=g*h[c.prop].value+h[c.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:f,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide", +paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(b){this.slide(b,{easing:b.down?"easeOutBounce":"swing",duration:b.down?1E3:200})}}})})(jQuery); +(function(b){var a=0;b.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var c=this,a=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(a){if(!c.options.disabled&&!c.element.attr("readonly")){g=!1;var d= +b.ui.keyCode;switch(a.keyCode){case d.PAGE_UP:c._move("previousPage",a);break;case d.PAGE_DOWN:c._move("nextPage",a);break;case d.UP:c._move("previous",a);a.preventDefault();break;case d.DOWN:c._move("next",a);a.preventDefault();break;case d.ENTER:case d.NUMPAD_ENTER:c.menu.active&&(g=!0,a.preventDefault());case d.TAB:if(!c.menu.active)break;c.menu.select(a);break;case d.ESCAPE:c.element.val(c.term);c.close(a);break;default:clearTimeout(c.searching),c.searching=setTimeout(function(){c.term!=c.element.val()&& +(c.selectedItem=null,c.search(null,a))},c.options.delay)}}}).bind("keypress.autocomplete",function(b){g&&(g=!1,b.preventDefault())}).bind("focus.autocomplete",function(){c.options.disabled||(c.selectedItem=null,c.previous=c.element.val())}).bind("blur.autocomplete",function(b){c.options.disabled||(clearTimeout(c.searching),c.closing=setTimeout(function(){c.close(b);c._change(b)},150))});this._initSource();this.response=function(){return c._response.apply(c,arguments)};this.menu=b("
    ").addClass("ui-autocomplete").appendTo(b(this.options.appendTo|| +"body",a)[0]).mousedown(function(a){var d=c.menu.element[0];b(a.target).closest(".ui-menu-item").length||setTimeout(function(){b(document).one("mousedown",function(a){a.target!==c.element[0]&&(a.target!==d&&!b.ui.contains(d,a.target))&&c.close()})},1);setTimeout(function(){clearTimeout(c.closing)},13)}).menu({focus:function(b,a){var f=a.item.data("item.autocomplete");!1!==c._trigger("focus",b,{item:f})&&/^key/.test(b.originalEvent.type)&&c.element.val(f.value)},selected:function(b,e){var f=e.item.data("item.autocomplete"), +i=c.previous;c.element[0]!==a.activeElement&&(c.element.focus(),c.previous=i,setTimeout(function(){c.previous=i;c.selectedItem=f},1));!1!==c._trigger("select",b,{item:f})&&c.element.val(f.value);c.term=c.element.val();c.close(b);c.selectedItem=f},blur:function(){c.menu.element.is(":visible")&&c.element.val()!==c.term&&c.element.val(c.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");b.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"); +this.menu.element.remove();b.Widget.prototype.destroy.call(this)},_setOption:function(a,d){b.Widget.prototype._setOption.apply(this,arguments);"source"===a&&this._initSource();"appendTo"===a&&this.menu.element.appendTo(b(d||"body",this.element[0].ownerDocument)[0]);"disabled"===a&&(d&&this.xhr)&&this.xhr.abort()},_initSource:function(){var c=this,d,g;b.isArray(this.options.source)?(d=this.options.source,this.source=function(a,c){c(b.ui.autocomplete.filter(d,a.term))}):"string"===typeof this.options.source? +(g=this.options.source,this.source=function(d,e){c.xhr&&c.xhr.abort();c.xhr=b.ajax({url:g,data:d,dataType:"json",autocompleteRequest:++a,success:function(b){this.autocompleteRequest===a&&e(b)},error:function(){this.autocompleteRequest===a&&e([])}})}):this.source=this.options.source},search:function(b,a){b=null!=b?b:this.element.val();this.term=this.element.val();if(b.length").data("item.autocomplete",d).append(b("").text(d.label)).appendTo(a)},_move:function(b,a){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(b)||this.menu.last()&& +/^next/.test(b))this.element.val(this.term),this.menu.deactivate();else this.menu[b](a);else this.search(null,a)},widget:function(){return this.menu.element}});b.extend(b.ui.autocomplete,{escapeRegex:function(b){return b.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(a,d){var g=RegExp(b.ui.autocomplete.escapeRegex(d),"i");return b.grep(a,function(b){return g.test(b.label||b.value||b)})}})})(jQuery); +(function(b){b.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){b(c.target).closest(".ui-menu-item a").length&&(c.preventDefault(),a.select(c))});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", +-1).mouseenter(function(c){a.activate(c,b(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(b,c){this.deactivate();if(this.hasScroll()){var d=c.offset().top-this.element.offset().top,g=this.element.scrollTop(),h=this.element.height();0>d?this.element.scrollTop(g+d):d>=h&&this.element.scrollTop(g+d-h+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",b,{item:c})},deactivate:function(){this.active&& +(this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null)},next:function(b){this.move("next",".ui-menu-item:first",b)},previous:function(b){this.move("prev",".ui-menu-item:last",b)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(b,c,d){this.active?(b=this.active[b+"All"](".ui-menu-item").eq(0),b.length?this.activate(d, +b):this.activate(d,this.element.children(c))):this.activate(d,this.element.children(c))},nextPage:function(a){if(this.hasScroll())if(!this.active||this.last())this.activate(a,this.element.children(".ui-menu-item:first"));else{var c=this.active.offset().top,d=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var a=b(this).offset().top-c-d+b(this).height();return 10>a&&-10a&&-10").addClass("ui-button-text").html(this.options.label).appendTo(a.empty()).text(),d=this.options.icons,h=d.primary&&d.secondary,e=[];d.primary||d.secondary?(this.options.text&&e.push("ui-button-text-icon"+(h?"s":d.primary?"-primary":"-secondary")),d.primary&&a.prepend(""),d.secondary&&a.append(""),this.options.text||(e.push(h?"ui-button-icons-only": +"ui-button-icon-only"),this.hasTitle||a.attr("title",c))):e.push("ui-button-text-only");a.addClass(e.join(" "))}}});b.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(a,c){"disabled"===a&&this.buttons.button("option",a,c);b.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var a="ltr"===this.element.css("direction"); +this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(a?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(a?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"); +b.Widget.prototype.destroy.call(this)}})})(jQuery); +(function(b,a){var c={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},d={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},g=b.attrFn||{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0,click:!0};b.widget("ui.dialog",{options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",collision:"fit",using:function(a){var c= +b(this).css(a).offset().top;0>c&&b(this).css("top",a.top-c)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");"string"!==typeof this.originalTitle&&(this.originalTitle="");this.options.title=this.options.title||this.originalTitle;var a=this,c=a.options,f=c.title||" ",i=b.ui.dialog.getTitleId(a.element),d=(a.uiDialog=b("
    ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ +c.dialogClass).css({zIndex:c.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(f){if(c.closeOnEscape&&f.keyCode&&f.keyCode===b.ui.keyCode.ESCAPE){a.close(f);f.preventDefault()}}).attr({role:"dialog","aria-labelledby":i}).mousedown(function(b){a.moveToTop(false,b)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(d);var g=(a.uiDialogTitlebar=b("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(d), +l=b('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){l.addClass("ui-state-hover")},function(){l.removeClass("ui-state-hover")}).focus(function(){l.addClass("ui-state-focus")}).blur(function(){l.removeClass("ui-state-focus")}).click(function(b){a.close(b);return false}).appendTo(g);(a.uiDialogTitlebarCloseText=b("")).addClass("ui-icon ui-icon-closethick").text(c.closeText).appendTo(l);b("").addClass("ui-dialog-title").attr("id", +i).html(f).prependTo(g);b.isFunction(c.beforeclose)&&!b.isFunction(c.beforeClose)&&(c.beforeClose=c.beforeclose);g.find("*").add(g).disableSelection();c.draggable&&b.fn.draggable&&a._makeDraggable();c.resizable&&b.fn.resizable&&a._makeResizable();a._createButtons(c.buttons);a._isOpen=!1;b.fn.bgiframe&&d.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){this.overlay&&this.overlay.destroy();this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); +this.uiDialog.remove();this.originalTitle&&this.element.attr("title",this.originalTitle);return this},widget:function(){return this.uiDialog},close:function(a){var c=this,f,d;if(!1!==c._trigger("beforeClose",a))return c.overlay&&c.overlay.destroy(),c.uiDialog.unbind("keypress.ui-dialog"),c._isOpen=!1,c.options.hide?c.uiDialog.hide(c.options.hide,function(){c._trigger("close",a)}):(c.uiDialog.hide(),c._trigger("close",a)),b.ui.dialog.overlay.resize(),c.options.modal&&(f=0,b(".ui-dialog").each(function(){if(this!== +c.uiDialog[0]){d=b(this).css("z-index");isNaN(d)||(f=Math.max(f,d))}}),b.ui.dialog.maxZ=f),c},isOpen:function(){return this._isOpen},moveToTop:function(a,c){var f=this.options;if(f.modal&&!a||!f.stack&&!f.modal)return this._trigger("focus",c);f.zIndex>b.ui.dialog.maxZ&&(b.ui.dialog.maxZ=f.zIndex);this.overlay&&(b.ui.dialog.maxZ+=1,this.overlay.$el.css("z-index",b.ui.dialog.overlay.maxZ=b.ui.dialog.maxZ));f={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};b.ui.dialog.maxZ+= +1;this.uiDialog.css("z-index",b.ui.dialog.maxZ);this.element.attr(f);this._trigger("focus",c);return this},open:function(){if(!this._isOpen){var a=this.options,c=this.uiDialog;this.overlay=a.modal?new b.ui.dialog.overlay(this):null;this._size();this._position(a.position);c.show(a.show);this.moveToTop(!0);a.modal&&c.bind("keypress.ui-dialog",function(a){if(a.keyCode===b.ui.keyCode.TAB){var c=b(":tabbable",this),d=c.filter(":first"),c=c.filter(":last");if(a.target===c[0]&&!a.shiftKey)return d.focus(1), +!1;if(a.target===d[0]&&a.shiftKey)return c.focus(1),!1}});b(this.element.find(":tabbable").get().concat(c.find(".ui-dialog-buttonpane :tabbable").get().concat(c.get()))).eq(0).focus();this._isOpen=!0;this._trigger("open");return this}},_createButtons:function(a){var c=this,f=!1,d=b("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=b("
    ").addClass("ui-dialog-buttonset").appendTo(d);c.uiDialog.find(".ui-dialog-buttonpane").remove();"object"===typeof a&& +null!==a&&b.each(a,function(){return!(f=!0)});f&&(b.each(a,function(a,f){var f=b.isFunction(f)?{click:f,text:a}:f,d=b('').click(function(){f.click.apply(c.element[0],arguments)}).appendTo(j);b.each(f,function(b,a){if("click"!==b)if(b in g)d[b](a);else d.attr(b,a)});b.fn.button&&d.button()}),d.appendTo(c.uiDialog))},_makeDraggable:function(){function a(b){return{position:b.position,offset:b.offset}}var c=this,f=c.options,d=b(document),g;c.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close", +handle:".ui-dialog-titlebar",containment:"document",start:function(d,i){g="auto"===f.height?"auto":b(this).height();b(this).height(b(this).height()).addClass("ui-dialog-dragging");c._trigger("dragStart",d,a(i))},drag:function(b,f){c._trigger("drag",b,a(f))},stop:function(k,l){f.position=[l.position.left-d.scrollLeft(),l.position.top-d.scrollTop()];b(this).removeClass("ui-dialog-dragging").height(g);c._trigger("dragStop",k,a(l));b.ui.dialog.overlay.resize()}})},_makeResizable:function(c){function d(b){return{originalPosition:b.originalPosition, +originalSize:b.originalSize,position:b.position,size:b.size}}var c=c===a?this.options.resizable:c,f=this,i=f.options,g=f.uiDialog.css("position"),c="string"===typeof c?c:"n,e,s,w,se,sw,ne,nw";f.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:f.element,maxWidth:i.maxWidth,maxHeight:i.maxHeight,minWidth:i.minWidth,minHeight:f._minHeight(),handles:c,start:function(a,c){b(this).addClass("ui-dialog-resizing");f._trigger("resizeStart",a,d(c))},resize:function(b,a){f._trigger("resize", +b,d(a))},stop:function(a,c){b(this).removeClass("ui-dialog-resizing");i.height=b(this).height();i.width=b(this).width();f._trigger("resizeStop",a,d(c));b.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var b=this.options;return"auto"===b.height?b.minHeight:Math.min(b.minHeight,b.height)},_position:function(a){var c=[],f=[0,0],d;if(a){if("string"===typeof a||"object"===typeof a&&"0"in a)c=a.split?a.split(" "): +[a[0],a[1]],1===c.length&&(c[1]=c[0]),b.each(["left","top"],function(b,a){+c[b]===c[b]&&(f[b]=c[b],c[b]=a)}),a={my:c.join(" "),at:c.join(" "),offset:f.join(" ")};a=b.extend({},b.ui.dialog.prototype.options.position,a)}else a=b.ui.dialog.prototype.options.position;(d=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(b.extend({of:window},a));d||this.uiDialog.hide()},_setOptions:function(a){var g=this,f={},i=!1;b.each(a,function(b,a){g._setOption(b,a);b in +c&&(i=!0);b in d&&(f[b]=a)});i&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",f)},_setOption:function(a,c){var f=this.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":this._createButtons(c);break;case "closeText":this.uiDialogTitlebarCloseText.text(""+c);break;case "dialogClass":f.removeClass(this.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+c);break;case "disabled":c?f.addClass("ui-dialog-disabled"): +f.removeClass("ui-dialog-disabled");break;case "draggable":var d=f.is(":data(draggable)");d&&!c&&f.draggable("destroy");!d&&c&&this._makeDraggable();break;case "position":this._position(c);break;case "resizable":(d=f.is(":data(resizable)"))&&!c&&f.resizable("destroy");d&&"string"===typeof c&&f.resizable("option","handles",c);!d&&!1!==c&&this._makeResizable(c);break;case "title":b(".ui-dialog-title",this.uiDialogTitlebar).html(""+(c||" "))}b.Widget.prototype._setOption.apply(this,arguments)}, +_size:function(){var a=this.options,c,f,d=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});a.minWidth>a.width&&(a.width=a.minWidth);c=this.uiDialog.css({height:"auto",width:a.width}).height();f=Math.max(0,a.minHeight-c);"auto"===a.height?b.support.minHeight?this.element.css({minHeight:f,height:"auto"}):(this.uiDialog.show(),a=this.element.css("height","auto").height(),d||this.uiDialog.hide(),this.element.height(Math.max(a,f))):this.element.height(Math.max(a.height- +c,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});b.extend(b.ui.dialog,{version:"1.8.14",uuid:0,maxZ:0,getTitleId:function(b){b=b.attr("id");b||(b=this.uuid+=1);return"ui-dialog-title-"+b},overlay:function(a){this.$el=b.ui.dialog.overlay.create(a)}});b.extend(b.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:b.map("focus mousedown mouseup keydown keypress click".split(" "),function(b){return b+".dialog-overlay"}).join(" "), +create:function(a){0===this.instances.length&&(setTimeout(function(){b.ui.dialog.overlay.instances.length&&b(document).bind(b.ui.dialog.overlay.events,function(a){if(b(a.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), +height:this.height()});b.fn.bgiframe&&c.bgiframe();this.instances.push(c);return c},destroy:function(a){var c=b.inArray(a,this.instances);-1!=c&&this.oldInstances.push(this.instances.splice(c,1)[0]);0===this.instances.length&&b([document,window]).unbind(".dialog-overlay");a.remove();var f=0;b.each(this.instances,function(){f=Math.max(f,this.css("z-index"))});this.maxZ=f},height:function(){var a,c;return b.browser.msie&&7>b.browser.version?(a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight), +c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight),a").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+("min"===c.range||"max"===c.range?" ui-slider-range-"+c.range:""))}for(var e=d.length;e"); +this.handles=d.add(b(h.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){c.disabled||b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")}).focus(function(){c.disabled?b(this).blur():(b(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),b(this).addClass("ui-state-focus"))}).blur(function(){b(this).removeClass("ui-state-focus")});this.handles.each(function(a){b(this).data("index.ui-slider-handle", +a)});this.handles.keydown(function(c){var d=!0,g=b(this).data("index.ui-slider-handle"),e,h,m;if(!a.options.disabled){switch(c.keyCode){case b.ui.keyCode.HOME:case b.ui.keyCode.END:case b.ui.keyCode.PAGE_UP:case b.ui.keyCode.PAGE_DOWN:case b.ui.keyCode.UP:case b.ui.keyCode.RIGHT:case b.ui.keyCode.DOWN:case b.ui.keyCode.LEFT:if(d=!1,!a._keySliding&&(a._keySliding=!0,b(this).addClass("ui-state-active"),e=a._start(c,g),!1===e))return}m=a.options.step;e=a.options.values&&a.options.values.length?h=a.values(g): +h=a.value();switch(c.keyCode){case b.ui.keyCode.HOME:h=a._valueMin();break;case b.ui.keyCode.END:h=a._valueMax();break;case b.ui.keyCode.PAGE_UP:h=a._trimAlignValue(e+(a._valueMax()-a._valueMin())/5);break;case b.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(e-(a._valueMax()-a._valueMin())/5);break;case b.ui.keyCode.UP:case b.ui.keyCode.RIGHT:if(e===a._valueMax())return;h=a._trimAlignValue(e+m);break;case b.ui.keyCode.DOWN:case b.ui.keyCode.LEFT:if(e===a._valueMin())return;h=a._trimAlignValue(e-m)}a._slide(c, +g,h);return d}}).keyup(function(c){var d=b(this).data("index.ui-slider-handle");a._keySliding&&(a._keySliding=!1,a._stop(c,d),a._change(c,d),b(this).removeClass("ui-state-active"))});this._refreshValue();this._animateOff=!1},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();return this},_mouseCapture:function(a){var c= +this.options,d,g,h,e,f;if(c.disabled)return!1;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();d=this._normValueFromMouse({x:a.pageX,y:a.pageY});g=this._valueMax()-this._valueMin()+1;e=this;this.handles.each(function(a){var c=Math.abs(d-e.values(a));g>c&&(g=c,h=b(this),f=a)});!0===c.range&&this.values(1)===c.min&&(f+=1,h=b(this.handles[f]));if(!1===this._start(a,f))return!1;this._mouseSliding=!0;e._handleIndex=f;h.addClass("ui-state-active").focus(); +c=h.offset();this._clickOffset=!b(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-c.left-h.width()/2,top:a.pageY-c.top-h.height()/2-(parseInt(h.css("borderTopWidth"),10)||0)-(parseInt(h.css("borderBottomWidth"),10)||0)+(parseInt(h.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,f,d);return this._animateOff=!0},_mouseStart:function(){return!0},_mouseDrag:function(b){var c=this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b, +this._handleIndex,c);return!1},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=!1;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(b){var c;"horizontal"===this.orientation?(c=this.elementSize.width,b=b.x-this.elementOffset.left-(this._clickOffset? +this._clickOffset.left:0)):(c=this.elementSize.height,b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0));c=b/c;1c&&(c=0);"vertical"===this.orientation&&(c=1-c);b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+c*b)},_start:function(b,c){var d={handle:this.handles[c],value:this.value()};this.options.values&&this.options.values.length&&(d.value=this.values(c),d.values=this.values());return this._trigger("start",b,d)},_slide:function(b, +c,d){var g;if(this.options.values&&this.options.values.length){g=this.values(c?0:1);if(2===this.options.values.length&&!0===this.options.range&&(0===c&&d>g||1===c&&d=this._valueMax())return this._valueMax();var c=0=c&&(alignValue+=0",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
  • #{label}
  • "},_create:function(){this._tabify(!0)},_setOption:function(b,a){"selected"==b?this.options.collapsible&&a==this.options.selected||this.select(a): +(this.options[b]=a,this._tabify())},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+ ++c},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var a=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+ ++d);return b.cookie.apply(null,[a].concat(b.makeArray(arguments)))},_ui:function(b,a){return{tab:b,panel:a,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var a= +b(this);a.html(a.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function d(a,c){a.css("display","");!b.support.opacity&&c.opacity&&a[0].style.removeAttribute("filter")}var e=this,f=this.options,i=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=b(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return b("a",this)[0]});this.panels=b([]);this.anchors.each(function(a,c){var d=b(c).attr("href"),g=d.split("#")[0],h;if(g&&(g===location.toString().split("#")[0]|| +(h=b("base")[0])&&g===h.href))d=c.hash,c.href=d;i.test(d)?e.panels=e.panels.add(e.element.find(e._sanitizeSelector(d))):d&&"#"!==d?(b.data(c,"href.tabs",d),b.data(c,"load.tabs",d.replace(/#.*$/,"")),d=e._tabId(c),c.href="#"+d,g=e.element.find("#"+d),g.length||(g=b(f.panelTemplate).attr("id",d).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(e.panels[a-1]||e.list),g.data("destroy.tabs",!0)),e.panels=e.panels.add(g)):f.disabled.push(a)});c?(this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"), +this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.lis.addClass("ui-state-default ui-corner-top"),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"),f.selected===a?(location.hash&&this.anchors.each(function(b,a){if(a.hash==location.hash)return f.selected=b,!1}),"number"!==typeof f.selected&&f.cookie&&(f.selected=parseInt(e._cookie(),10)),"number"!==typeof f.selected&&this.lis.filter(".ui-tabs-selected").length&&(f.selected= +this.lis.index(this.lis.filter(".ui-tabs-selected"))),f.selected=f.selected||(this.lis.length?0:-1)):null===f.selected&&(f.selected=-1),f.selected=0<=f.selected&&this.anchors[f.selected]||0>f.selected?f.selected:0,f.disabled=b.unique(f.disabled.concat(b.map(this.lis.filter(".ui-state-disabled"),function(b){return e.lis.index(b)}))).sort(),-1!=b.inArray(f.selected,f.disabled)&&f.disabled.splice(b.inArray(f.selected,f.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"), +0<=f.selected&&this.anchors.length&&(e.element.find(e._sanitizeSelector(e.anchors[f.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(f.selected).addClass("ui-tabs-selected ui-state-active"),e.element.queue("tabs",function(){e._trigger("show",null,e._ui(e.anchors[f.selected],e.element.find(e._sanitizeSelector(e.anchors[f.selected].hash))[0]))}),this.load(f.selected)),b(window).bind("unload",function(){e.lis.add(e.anchors).unbind(".tabs");e.lis=e.anchors=e.panels=null})):f.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); +this.element[f.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");f.cookie&&this._cookie(f.selected,f.cookie);for(var c=0,j;j=this.lis[c];c++)b(j)[-1!=b.inArray(c,f.disabled)&&!b(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");!1===f.cache&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if("mouseover"!==f.event){var k=function(b,a){a.is(":not(.ui-state-disabled)")&&a.addClass("ui-state-"+b)};this.lis.bind("mouseover.tabs", +function(){k("hover",b(this))});this.lis.bind("mouseout.tabs",function(){b(this).removeClass("ui-state-hover")});this.anchors.bind("focus.tabs",function(){k("focus",b(this).closest("li"))});this.anchors.bind("blur.tabs",function(){b(this).closest("li").removeClass("ui-state-focus")})}var l,m;f.fx&&(b.isArray(f.fx)?(l=f.fx[0],m=f.fx[1]):l=m=f.fx);var p=m?function(a,c){b(a).closest("li").addClass("ui-tabs-selected ui-state-active");c.hide().removeClass("ui-tabs-hide").animate(m,m.duration||"normal", +function(){d(c,m);e._trigger("show",null,e._ui(a,c[0]))})}:function(a,c){b(a).closest("li").addClass("ui-tabs-selected ui-state-active");c.removeClass("ui-tabs-hide");e._trigger("show",null,e._ui(a,c[0]))},n=l?function(b,a){a.animate(l,l.duration||"normal",function(){e.lis.removeClass("ui-tabs-selected ui-state-active");a.addClass("ui-tabs-hide");d(a,l);e.element.dequeue("tabs")})}:function(b,a){e.lis.removeClass("ui-tabs-selected ui-state-active");a.addClass("ui-tabs-hide");e.element.dequeue("tabs")}; +this.anchors.bind(f.event+".tabs",function(){var a=this,c=b(a).closest("li"),d=e.panels.filter(":not(.ui-tabs-hide)"),i=e.element.find(e._sanitizeSelector(a.hash));if(c.hasClass("ui-tabs-selected")&&!f.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||e.panels.filter(":animated").length||e._trigger("select",null,e._ui(this,i[0]))===false){this.blur();return false}f.selected=e.anchors.index(this);e.abort();if(f.collapsible){if(c.hasClass("ui-tabs-selected")){f.selected= +-1;f.cookie&&e._cookie(f.selected,f.cookie);e.element.queue("tabs",function(){n(a,d)}).dequeue("tabs");this.blur();return false}if(!d.length){f.cookie&&e._cookie(f.selected,f.cookie);e.element.queue("tabs",function(){p(a,i)});e.load(e.anchors.index(this));this.blur();return false}}f.cookie&&e._cookie(f.selected,f.cookie);if(i.length){d.length&&e.element.queue("tabs",function(){n(a,d)});e.element.queue("tabs",function(){p(a,i)});e.load(e.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; +b.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){"string"==typeof b&&(b=this.anchors.index(this.anchors.filter("[href$="+b+"]")));return b},destroy:function(){var a=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var a= +b.data(this,"href.tabs");a&&(this.href=a);var c=b(this).unbind(".tabs");b.each(["href","load","cache"],function(b,a){c.removeData(a+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){b.data(this,"destroy.tabs")?b(this).remove():b(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});a.cookie&&this._cookie(null,a.cookie);return this},add:function(c, +d,e){e===a&&(e=this.anchors.length);var f=this,i=this.options,d=b(i.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),c=!c.indexOf("#")?c.replace("#",""):this._tabId(b("a",d)[0]);d.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+c);j.length||(j=b(i.panelTemplate).attr("id",c).data("destroy.tabs",!0));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");e>=this.lis.length?(d.appendTo(this.list),j.appendTo(this.list[0].parentNode)): +(d.insertBefore(this.lis[e]),j.insertBefore(this.panels[e]));i.disabled=b.map(i.disabled,function(b){return b>=e?++b:b});this._tabify();1==this.anchors.length&&(i.selected=0,d.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0));this._trigger("add",null,this._ui(this.anchors[e],this.panels[e]));return this},remove:function(a){var a=this._getIndex(a),c=this.options,d=this.lis.eq(a).remove(), +f=this.panels.eq(a).remove();d.hasClass("ui-tabs-selected")&&1=a?--b:b});this._tabify();this._trigger("remove",null,this._ui(d.find("a")[0],f[0]));return this},enable:function(a){var a=this._getIndex(a),c=this.options;if(-1!=b.inArray(a,c.disabled))return this.lis.eq(a).removeClass("ui-state-disabled"),c.disabled=b.grep(c.disabled,function(b){return b!= +a}),this._trigger("enable",null,this._ui(this.anchors[a],this.panels[a])),this},disable:function(b){var b=this._getIndex(b),a=this.options;b!=a.selected&&(this.lis.eq(b).addClass("ui-state-disabled"),a.disabled.push(b),a.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b])));return this},select:function(b){b=this._getIndex(b);if(-1==b)if(this.options.collapsible&&-1!=this.options.selected)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+ +".tabs");return this},load:function(a){var a=this._getIndex(a),c=this,d=this.options,f=this.anchors.eq(a)[0],i=b.data(f,"load.tabs");this.abort();if(!i||0!==this.element.queue("tabs").length&&b.data(f,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(a).addClass("ui-state-processing");if(d.spinner){var j=b("span",f);j.data("label.tabs",j.html()).html(d.spinner)}this.xhr=b.ajax(b.extend({},d.ajaxOptions,{url:i,success:function(i,j){c.element.find(c._sanitizeSelector(f.hash)).html(i);c._cleanup(); +d.cache&&b.data(f,"cache.tabs",!0);c._trigger("load",null,c._ui(c.anchors[a],c.panels[a]));try{d.ajaxOptions.success(i,j)}catch(m){}},error:function(b,i){c._cleanup();c._trigger("load",null,c._ui(c.anchors[a],c.panels[a]));try{d.ajaxOptions.error(b,i,a,f)}catch(m){}}}));c.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(!1,!0);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));this.xhr&&(this.xhr.abort(),delete this.xhr);this._cleanup(); +return this},url:function(b,a){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",a);return this},length:function(){return this.anchors.length}});b.extend(b.ui.tabs,{version:"1.8.14"});b.extend(b.ui.tabs.prototype,{rotation:null,rotate:function(b,a){var c=this,f=this.options,d=c._rotate||(c._rotate=function(a){clearTimeout(c.rotation);c.rotation=setTimeout(function(){var b=f.selected;c.select(++b'))}function d(a){return a.bind("mouseout",function(a){a=b(a.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a"); +a.length&&a.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(c){c=b(c.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!b.datepicker._isDisabledDatepicker(e.inline?a.parent()[0]:e.input[0])&&c.length)c.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),c.addClass("ui-state-hover"),c.hasClass("ui-datepicker-prev")&&c.addClass("ui-datepicker-prev-hover"),c.hasClass("ui-datepicker-next")&& +c.addClass("ui-datepicker-next-hover")})}function g(c,d){b.extend(c,d);for(var e in d)if(null==d[e]||d[e]==a)c[e]=d[e];return c}b.extend(b.ui,{datepicker:{version:"1.8.14"}});var h=(new Date).getTime(),e;b.extend(c.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(b){g(this._defaults,b||{});return this},_attachDatepicker:function(a,c){var d=null,e;for(e in this._defaults){var g= +a.getAttribute("date:"+e);if(g){d=d||{};try{d[e]=eval(g)}catch(m){d[e]=g}}}e=a.nodeName.toLowerCase();g="div"==e||"span"==e;a.id||(this.uuid+=1,a.id="dp"+this.uuid);var h=this._newInst(b(a),g);h.settings=b.extend({},c||{},d||{});"input"==e?this._connectDatepicker(a,h):g&&this._inlineDatepicker(a,h)},_newInst:function(a,c){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:c,dpDiv:!c?this.dpDiv:d(b('
    '))}},_connectDatepicker:function(a,c){var d=b(a);c.append=b([]);c.trigger=b([]);d.hasClass(this.markerClassName)||(this._attachments(d,c),d.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(b,a,f){c.settings[a]=f}).bind("getData.datepicker",function(b,a){return this._get(c,a)}),this._autoSize(c),b.data(a,"datepicker", +c))},_attachments:function(a,c){var d=this._get(c,"appendText"),e=this._get(c,"isRTL");c.append&&c.append.remove();d&&(c.append=b(''+d+""),a[e?"before":"after"](c.append));a.unbind("focus",this._showDatepicker);c.trigger&&c.trigger.remove();d=this._get(c,"showOn");("focus"==d||"both"==d)&&a.focus(this._showDatepicker);if("button"==d||"both"==d){var d=this._get(c,"buttonText"),g=this._get(c,"buttonImage");c.trigger=b(this._get(c,"buttonImageOnly")?b("").addClass(this._triggerClass).attr({src:g, +alt:d,title:d}):b('').addClass(this._triggerClass).html(""==g?d:b("").attr({src:g,alt:d,title:d})));a[e?"before":"after"](c.trigger);c.trigger.click(function(){b.datepicker._datepickerShowing&&b.datepicker._lastInput==a[0]?b.datepicker._hideDatepicker():b.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(b){if(this._get(b,"autoSize")&&!b.inline){var a=new Date(2009,11,20),c=this._get(b,"dateFormat");if(c.match(/[DM]/)){var d=function(b){for(var a= +0,c=0,f=0;fa&&(a=b[f].length,c=f);return c};a.setMonth(d(this._get(b,c.match(/MM/)?"monthNames":"monthNamesShort")));a.setDate(d(this._get(b,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())}b.input.attr("size",this._formatDate(b,a).length)}},_inlineDatepicker:function(a,c){var d=b(a);d.hasClass(this.markerClassName)||(d.addClass(this.markerClassName).append(c.dpDiv).bind("setData.datepicker",function(b,a,f){c.settings[a]=f}).bind("getData.datepicker",function(b, +a){return this._get(c,a)}),b.data(a,"datepicker",c),this._setDate(c,this._getDefaultDate(c),!0),this._updateDatepicker(c),this._updateAlternate(c),c.dpDiv.show())},_dialogDatepicker:function(a,c,d,e,h){a=this._dialogInst;a||(this.uuid+=1,this._dialogInput=b(''),this._dialogInput.keydown(this._doKeyDown),b("body").append(this._dialogInput),a=this._dialogInst=this._newInst(this._dialogInput,!1), +a.settings={},b.data(this._dialogInput[0],"datepicker",a));g(a.settings,e||{});c=c&&c.constructor==Date?this._formatDate(a,c):c;this._dialogInput.val(c);this._pos=h?h.length?h:[h.pageX,h.pageY]:null;this._pos||(this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)]);this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+ +"px");a.settings.onSelect=d;this._inDialog=!0;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);b.blockUI&&b.blockUI(this.dpDiv);b.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var c=b(a),d=b.data(a,"datepicker");if(c.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();b.removeData(a,"datepicker");"input"==e?(d.append.remove(),d.trigger.remove(),c.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown", +this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"==e||"span"==e)&&c.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var c=b(a),d=b.data(a,"datepicker");if(c.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if("input"==e)a.disabled=!1,d.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if("div"==e||"span"==e)c=c.children("."+this._inlineClass),c.children().removeClass("ui-state-disabled"), +c.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled");this._disabledInputs=b.map(this._disabledInputs,function(b){return b==a?null:b})}},_disableDatepicker:function(a){var c=b(a),d=b.data(a,"datepicker");if(c.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if("input"==e)a.disabled=!0,d.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if("div"==e||"span"==e)c=c.children("."+this._inlineClass), +c.children().addClass("ui-state-disabled"),c.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled");this._disabledInputs=b.map(this._disabledInputs,function(b){return b==a?null:b});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(b){if(!b)return!1;for(var a=0;ae||!d||-1n&&n>e?Math.abs(c.left+e-n):0);c.top-=Math.min(c.top,c.top+g>q&&q>g?Math.abs(g+p):0);return c},_findPos:function(a){for(var c= +this._get(this._getInst(a),"isRTL");a&&("hidden"==a.type||1!=a.nodeType||b.expr.filters.hidden(a));)a=a[c?"previousSibling":"nextSibling"];a=b(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");b&&b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var c=this._curInst;if(c&&!(a&&c!=b.data(a,"datepicker"))&&this._datepickerShowing){var a=this._get(c,"showAnim"),d=this._get(c,"duration"),e=function(){b.datepicker._tidyDialog(c); +this._curInst=null};if(b.effects&&b.effects[a])c.dpDiv.hide(a,b.datepicker._get(c,"showOptions"),d,e);else c.dpDiv["slideDown"==a?"slideUp":"fadeIn"==a?"fadeOut":"hide"](a?d:null,e);a||e();b.datepicker._triggerOnClose(c);this._datepickerShowing=!1;this._lastInput=null;this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),b.blockUI&&(b.unblockUI(),b("body").append(this.dpDiv)));this._inDialog=!1}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")}, +_checkExternalClick:function(a){b.datepicker._curInst&&(a=b(a.target),a[0].id!=b.datepicker._mainDivId&&(0==a.parents("#"+b.datepicker._mainDivId).length&&!a.hasClass(b.datepicker.markerClassName)&&!a.hasClass(b.datepicker._triggerClass)&&b.datepicker._datepickerShowing&&(!b.datepicker._inDialog||!b.blockUI))&&b.datepicker._hideDatepicker())},_adjustDate:function(a,c,d){var a=b(a),e=this._getInst(a[0]);this._isDisabledDatepicker(a[0])||(this._adjustInstDate(e,c+("M"==d?this._get(e,"showCurrentAtPos"): +0),d),this._updateDatepicker(e))},_gotoToday:function(a){var a=b(a),c=this._getInst(a[0]);if(this._get(c,"gotoCurrent")&&c.currentDay)c.selectedDay=c.currentDay,c.drawMonth=c.selectedMonth=c.currentMonth,c.drawYear=c.selectedYear=c.currentYear;else{var d=new Date;c.selectedDay=d.getDate();c.drawMonth=c.selectedMonth=d.getMonth();c.drawYear=c.selectedYear=d.getFullYear()}this._notifyChange(c);this._adjustDate(a)},_selectMonthYear:function(a,c,d){var a=b(a),e=this._getInst(a[0]);e._selectingMonthYear= +!1;e["selected"+("M"==d?"Month":"Year")]=e["draw"+("M"==d?"Month":"Year")]=parseInt(c.options[c.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var c=this._getInst(b(a)[0]);c.input&&c._selectingMonthYear&&setTimeout(function(){c.input.focus()},0);c._selectingMonthYear=!c._selectingMonthYear},_selectDay:function(a,c,d,e){var g=b(a);!b(e).hasClass(this._unselectableClass)&&!this._isDisabledDatepicker(g[0])&&(g=this._getInst(g[0]),g.selectedDay=g.currentDay= +b("a",e).html(),g.selectedMonth=g.currentMonth=c,g.selectedYear=g.currentYear=d,this._selectDate(a,this._formatDate(g,g.currentDay,g.currentMonth,g.currentYear)))},_clearDate:function(a){a=b(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,c){var d=this._getInst(b(a)[0]),c=null!=c?c:this._formatDate(d);d.input&&d.input.val(c);this._updateAlternate(d);var e=this._get(d,"onSelect");e?e.apply(d.input?d.input[0]:null,[c,d]):d.input&&d.input.trigger("change");d.inline?this._updateDatepicker(d): +(this._hideDatepicker(),this._lastInput=d.input[0],"object"!=typeof d.input[0]&&d.input.focus(),this._lastInput=null)},_updateAlternate:function(a){var c=this._get(a,"altField");if(c){var d=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),g=this.formatDate(d,e,this._getFormatConfig(a));b(c).each(function(){b(this).val(g)})}},noWeekends:function(a){a=a.getDay();return[0a,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b= +a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,c,d){if(null==a||null==c)throw"Invalid arguments";c="object"==typeof c?c.toString():c+"";if(""==c)return null;for(var e=(d?d.shortYearCutoff:null)||this._defaults.shortYearCutoff,e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),g=(d?d.dayNamesShort:null)||this._defaults.dayNamesShort,h=(d?d.dayNames:null)||this._defaults.dayNames,p=(d?d.monthNamesShort:null)||this._defaults.monthNamesShort, +n=(d?d.monthNames:null)||this._defaults.monthNames,q=d=-1,o=-1,w=-1,r=!1,u=function(b){(b=E+1d&&(d+=(new Date).getFullYear()-(new Date).getFullYear()%100+(d<=e?0:-100));if(-1b.getYear()%100?"0":"")+b.getYear()%100;break;case "@":o+=b.getTime();break;case "!":o+=1E4*b.getTime()+this._ticksTo1970;break;case "'":h("'")?o+="'":w=!0;break;default:o+=a.charAt(r)}return o},_possibleChars:function(a){for(var b= +"",c=!1,d=function(b){(b=e+1n&&(n+=12,s--);if(u)for(var v=this._daylightSavingAdjust(new Date(u.getFullYear(),u.getMonth()-p[0]*p[1]+1,u.getDate())),v=r&&vv;)n--,0>n&&(n=11,s--);a.drawMonth=n;a.drawYear=s;var v=this._get(a,"prevText"),v=!m?v:this.formatDate(v,this._daylightSavingAdjust(new Date(s,n-q,1)),this._getFormatConfig(a)), +v=this._canAdjustMonth(a,-1,s,n)?''+v+"":g?"":''+v+"",z=this._get(a,"nextText"),z=!m?z:this.formatDate(z,this._daylightSavingAdjust(new Date(s, +n+q,1)),this._getFormatConfig(a)),g=this._canAdjustMonth(a,1,s,n)?''+z+"":g?"":''+z+"",q=this._get(a,"currentText"),z=this._get(a,"gotoCurrent")&& +a.currentDay?w:c,q=!m?q:this.formatDate(q,z,this._getFormatConfig(a)),m=!a.inline?'":"",e=e?'
    '+(d?m:"")+(this._isInRange(a,z)?'":"")+(d?"":m)+"
    ":"",m=parseInt(this._get(a,"firstDay"),10),m=isNaN(m)?0:m,q=this._get(a,"showWeek"),z=this._get(a,"dayNames");this._get(a,"dayNamesShort");var B=this._get(a,"dayNamesMin"),E=this._get(a,"monthNames"),C=this._get(a,"monthNamesShort"),O=this._get(a,"beforeShowDay"),K=this._get(a,"showOtherMonths"),S=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var P=this._getDefaultDate(a),G="",H=0;H'+(/all|left/.test(A)&& +0==H?d?g:v:"")+(/all|right/.test(A)&&0==H?d?v:g:"")+this._generateMonthYearHeader(a,n,s,r,u,0
    '),D=q?'":"",A=0;7>A;A++)var x=(A+m)%7,D=D+("'+B[x]+"");y+=D+"";D=this._getDaysInMonth(s,n);s==a.selectedYear&&n==a.selectedMonth&&(a.selectedDay=Math.min(a.selectedDay, +D));A=(this._getFirstDayOfMonth(s,n)-m+7)%7;D=Math.ceil((A+D)/7);this.maxRows=D=o?this.maxRows>D?this.maxRows:D:D;for(var x=this._daylightSavingAdjust(new Date(s,n,1-A)),R=0;R",M=!q?"":'",A=0;7>A;A++){var J=O?O.apply(a.input?a.input[0]:null,[x]):[!0,""],F=x.getMonth()!=n,N=F&&!S||!J[0]||r&&xu,M=M+('");x.setDate(x.getDate()+1);x=this._daylightSavingAdjust(x)}y+=M+""}n++;11
    '+this._get(a,"weekHeader")+"
    '+this._get(a,"calculateWeek")(x)+""+(F&&!K? +" ":N?''+x.getDate()+"":''+x.getDate()+"")+"
    "+(o?""+(0':""):"");L+=y}G+=L}G+=e+(b.browser.msie&& +7>parseInt(b.browser.version,10)&&!a.inline?'':"");a._keyEvent=!1;return G},_generateMonthYearHeader:function(a,b,c,d,e,g,p,n){var q=this._get(a,"changeMonth"),o=this._get(a,"changeYear"),w=this._get(a,"showMonthAfterYear"),r='
    ',u="";if(g||!q)u+=''+p[b]+"";else{for(var p=d&&d.getFullYear()==c,s=e&&e.getFullYear()==c,u=u+('"}w||(r+=u+(g||!q||!o?" ":""));if(!a.yearshtml)if(a.yearshtml="",g||!o)r+=''+c+"";else{var n=this._get(a,"yearRange").split(":"),z=(new Date).getFullYear(),p=function(a){a= +a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?z+parseInt(a,10):parseInt(a,10);return isNaN(a)?z:a},b=p(n[0]),n=Math.max(b,p(n[1]||"")),b=d?Math.max(b,d.getFullYear()):b,n=e?Math.min(n,e.getFullYear()):n;for(a.yearshtml+='";r+=a.yearshtml;a.yearshtml=null}r+=this._get(a,"yearSuffix");w&&(r+=(g||!q||!o?" ":"")+u);return r+"
    "},_adjustInstDate:function(a,b,c){var d=a.drawYear+("Y"==c?b:0),e=a.drawMonth+("M"==c?b:0),b=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+("D"==c?b:0),d=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,b)));a.selectedDay=d.getDate();a.drawMonth=a.selectedMonth=d.getMonth();a.drawYear=a.selectedYear=d.getFullYear();("M"==c|| +"Y"==c)&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),c=c&&bd?d:c},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return null==a?[1,1]:"number"==typeof a?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a, +b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),c=this._daylightSavingAdjust(new Date(c,d+(0>b?b:e[0]*e[1]),1));0>b&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<= +d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff"),b="string"!=typeof b?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);b=b?"object"==typeof b?b:this._daylightSavingAdjust(new Date(d, +c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});b.fn.datepicker=function(a){if(!this.length)return this;b.datepicker.initialized||(b(document).mousedown(b.datepicker._checkExternalClick).find("body").append(b.datepicker.dpDiv),b.datepicker.initialized=!0);var c=Array.prototype.slice.call(arguments,1);return"string"==typeof a&&("isDisabled"==a||"getDate"==a||"widget"==a)||"option"== +a&&2==arguments.length&&"string"==typeof arguments[1]?b.datepicker["_"+a+"Datepicker"].apply(b.datepicker,[this[0]].concat(c)):this.each(function(){typeof a=="string"?b.datepicker["_"+a+"Datepicker"].apply(b.datepicker,[this].concat(c)):b.datepicker._attachDatepicker(this,a)})};b.datepicker=new c;b.datepicker.initialized=!1;b.datepicker.uuid=(new Date).getTime();b.datepicker.version="1.8.14";window["DP_jQuery_"+h]=b})(jQuery); +(function(b,a){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("
    ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); +this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===a)return this._value();this._setOption("value",b);return this},_setOption:function(a,d){"value"===a&&(this.options.value=d,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete"));b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;"number"!==typeof a&&(a=0);return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100* +this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change"));this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.14"})})(jQuery); +jQuery.effects||function(b,a){function c(a){var c;return a&&a.constructor==Array&&3==a.length?a:(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(a))?[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)]:(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(a))?[2.55*parseFloat(c[1]),2.55*parseFloat(c[2]),2.55*parseFloat(c[3])]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))?[parseInt(c[1],16),parseInt(c[2], +16),parseInt(c[3],16)]:(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(a))?[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)]:/rgba\(0, 0, 0, 0\)/.exec(a)?i.transparent:i[b.trim(a).toLowerCase()]}function d(){var a=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,b={},c,d;if(a&&a.length&&a[0]&&a[a[0]])for(var e=a.length;e--;)c=a[e],"string"==typeof a[c]&&(d=c.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()}),b[d]=a[c]);else for(c in a)"string"=== +typeof a[c]&&(b[c]=a[c]);return b}function g(a){var c,d;for(c in a)d=a[c],(null==d||b.isFunction(d)||c in k||/scrollbar/.test(c)||!/color/i.test(c)&&isNaN(parseFloat(d)))&&delete a[c];return a}function h(a,b){var c={_:0},d;for(d in b)a[d]!=b[d]&&(c[d]=b[d]);return c}function e(a,c,d,e){"object"==typeof a&&(e=c,d=null,c=a,a=c.effect);b.isFunction(c)&&(e=c,d=null,c={});if("number"==typeof c||b.fx.speeds[c])e=d,d=c,c={};b.isFunction(d)&&(e=d,d=null);c=c||{};d=d||c.duration;d=b.fx.off?0:"number"==typeof d? +d:d in b.fx.speeds?b.fx.speeds[d]:b.fx.speeds._default;e=e||c.complete;return[a,c,d,e]}function f(a){return!a||("number"===typeof a||b.fx.speeds[a])||"string"===typeof a&&!b.effects[a]?!0:!1}b.effects={};b.each("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor borderColor color outlineColor".split(" "),function(a,d){b.fx.step[d]=function(a){if(!a.colorInit){var e;e=a.elem;var f=d,g;do{g=b.curCSS(e,f);if(g!=""&&g!="transparent"||b.nodeName(e,"body"))break;f="backgroundColor"}while(e= +e.parentNode);e=c(g);a.start=e;a.end=c(a.end);a.colorInit=true}a.elem.style[d]="rgb("+Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2],10),255),0)+")"}});var i={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139], +darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255], +maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},j=["add","remove","toggle"],k={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};b.effects.animateClass=function(a,c,e,f){b.isFunction(e)&&(f=e,e=null);return this.queue(function(){var i=b(this),o=i.attr("style")|| +" ",k=g(d.call(this)),r,u=i.attr("class");b.each(j,function(b,c){if(a[c])i[c+"Class"](a[c])});r=g(d.call(this));i.attr("class",u);i.animate(h(k,r),{queue:false,duration:c,easing:e,complete:function(){b.each(j,function(b,c){if(a[c])i[c+"Class"](a[c])});if(typeof i.attr("style")=="object"){i.attr("style").cssText="";i.attr("style").cssText=o}else i.attr("style",o);f&&f.apply(this,arguments);b.dequeue(this)}})})};b.fn.extend({_addClass:b.fn.addClass,addClass:function(a,c,d,e){return c?b.effects.animateClass.apply(this, +[{add:a},c,d,e]):this._addClass(a)},_removeClass:b.fn.removeClass,removeClass:function(a,c,d,e){return c?b.effects.animateClass.apply(this,[{remove:a},c,d,e]):this._removeClass(a)},_toggleClass:b.fn.toggleClass,toggleClass:function(c,d,e,f,g){return"boolean"==typeof d||d===a?e?b.effects.animateClass.apply(this,[d?{add:c}:{remove:c},e,f,g]):this._toggleClass(c,d):b.effects.animateClass.apply(this,[{toggle:c},d,e,f])},switchClass:function(a,c,d,e,f){return b.effects.animateClass.apply(this,[{add:c, +remove:a},d,e,f])}});b.extend(b.effects,{version:"1.8.14",save:function(a,b){for(var c=0;c").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});a.wrap(d);d=a.parent();"static"==a.css("position")?(d.css({position:"relative"}),a.css({position:"relative"})): +(b.extend(c,{position:a.css("position"),zIndex:a.css("z-index")}),b.each(["top","left","bottom","right"],function(b,d){c[d]=a.css(d);isNaN(parseInt(c[d],10))&&(c[d]="auto")}),a.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"}));return d.css(c).show()},removeWrapper:function(a){return a.parent().is(".ui-effects-wrapper")?a.parent().replaceWith(a):a},setTransition:function(a,c,d,e){e=e||{};b.each(c,function(b,c){unit=a.cssUnit(c);0(b/=e/2)?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){return 1>(b/=e/2)?d/2*b*b*b+c:d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c}, +easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){return 1>(b/=e/2)?d/2*b*b*b*b+c:-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){return 1>(b/=e/2)?d/2*b*b*b*b*b+c:d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/ +e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return 0==b?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){return 0==b?c:b==e?c+d:1>(b/=e/2)?d/2*Math.pow(2,10*(b-1))+c:d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)* +b)+c},easeInOutCirc:function(a,b,c,d,e){return 1>(b/=e/2)?-d/2*(Math.sqrt(1-b*b)-1)+c:d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var a=1.70158,f=0,g=d;if(0==b)return c;if(1==(b/=e))return c+d;f||(f=0.3*e);gb?-0.5*g*Math.pow(2,10*(b-=1))*Math.sin((b*e-a)*2*Math.PI/f)+c:0.5*g*Math.pow(2,-10*(b-=1))*Math.sin((b*e-a)*2*Math.PI/f)+d+c},easeInBack:function(b,c,d,e,f,g){g==a&&(g=1.70158);return e*(c/=f)*c*((g+1)*c-g)+d},easeOutBack:function(b,c,d,e, +f,g){g==a&&(g=1.70158);return e*((c=c/f-1)*c*((g+1)*c+g)+1)+d},easeInOutBack:function(b,c,d,e,f,g){g==a&&(g=1.70158);return 1>(c/=f/2)?e/2*c*c*(((g*=1.525)+1)*c-g)+d:e/2*((c-=2)*c*(((g*=1.525)+1)*c+g)+2)+d},easeInBounce:function(a,c,d,e,f){return e-b.easing.easeOutBounce(a,f-c,0,e,f)+d},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?d*7.5625*b*b+c:b<2/2.75?d*(7.5625*(b-=1.5/2.75)*b+0.75)+c:b<2.5/2.75?d*(7.5625*(b-=2.25/2.75)*b+0.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+0.984375)+c},easeInOutBounce:function(a, +c,d,e,f){return c").css({position:"absolute",visibility:"visible",left:-j*(e/d),top:-i*(f/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:e/d,height:f/c,left:h.left+j*(e/d)+("show"==a.options.mode?(j-Math.floor(d/2))*(e/d):0),top:h.top+i*(f/c)+("show"==a.options.mode?(i-Math.floor(c/2))*(f/c):0),opacity:"show"==a.options.mode?0:1}).animate({left:h.left+j*(e/d)+("show"==a.options.mode?0:(j-Math.floor(d/2))*(e/d)),top:h.top+ +i*(f/c)+("show"==a.options.mode?0:(i-Math.floor(c/2))*(f/c)),opacity:"show"==a.options.mode?1:0},a.duration||500);setTimeout(function(){"show"==a.options.mode?g.css({visibility:"visible"}):g.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(g[0]);g.dequeue();b("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); +(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:!1,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); +(function(b){b.effects.fold=function(a){return this.queue(function(){var c=b(this),d=["position","top","bottom","left","right"],g=b.effects.setMode(c,a.options.mode||"hide"),h=a.options.size||15,e=!!a.options.horizFirst,f=a.duration?a.duration/2:b.fx.speeds._default/2;b.effects.save(c,d);c.show();var i=b.effects.createWrapper(c).css({overflow:"hidden"}),j="show"==g!=e,k=j?["width","height"]:["height","width"],j=j?[i.width(),i.height()]:[i.height(),i.width()],l=/([0-9]+)%/.exec(h);l&&(h=parseInt(l[1], +10)/100*j["hide"==g?0:1]);"show"==g&&i.css(e?{height:0,width:h}:{height:h,width:0});e={};l={};e[k[0]]="show"==g?j[0]:h;l[k[1]]="show"==g?j[1]:0;i.animate(e,f,a.options.easing).animate(l,f,a.options.easing,function(){"hide"==g&&c.hide();b.effects.restore(c,d);b.effects.removeWrapper(c);a.callback&&a.callback.apply(c[0],arguments);c.dequeue()})})}})(jQuery); +(function(b){b.effects.highlight=function(a){return this.queue(function(){var c=b(this),d=["backgroundImage","backgroundColor","opacity"],g=b.effects.setMode(c,a.options.mode||"show"),h={backgroundColor:c.css("backgroundColor")};"hide"==g&&(h.opacity=0);b.effects.save(c,d);c.show().css({backgroundImage:"none",backgroundColor:a.options.color||"#ffff99"}).animate(h,{queue:!1,duration:a.duration,easing:a.options.easing,complete:function(){g=="hide"&&c.hide();b.effects.restore(c,d);g=="show"&&!b.support.opacity&& +this.style.removeAttribute("filter");a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); +(function(b){b.effects.pulsate=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"show");times=2*(a.options.times||5)-1;duration=a.duration?a.duration/2:b.fx.speeds._default/2;isVisible=c.is(":visible");animateTo=0;isVisible||(c.css("opacity",0).show(),animateTo=1);("hide"==d&&isVisible||"show"==d&&!isVisible)&×--;for(d=0;d').appendTo(document.body).addClass(a.options.className).css({top:g.top,left:g.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(d,a.duration,a.options.easing,function(){h.remove();a.callback&&a.callback.apply(c[0],arguments);c.dequeue()})})}})(jQuery); +/* + * jQuery Highlight plugin + * Based on highlight v3 by Johann Burkard + * http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html + * Copyright (c) 2009 Bartek Szopka http://bartaz.github.com/sandbox.js/jquery.highlight.html + * Licensed under MIT license. + */ +jQuery.extend({highlight:function(a,c,b,e){if(a.nodeType===3){if(c=a.data.match(c)){b=document.createElement(b||"span");b.className=e||"highlight";a=a.splitText(c.index);a.splitText(c[0].length);e=a.cloneNode(true);b.appendChild(e);a.parentNode.replaceChild(b,a);return 1}}else if(a.nodeType===1&&a.childNodes&&!/(script|style)/i.test(a.tagName)&&!(a.tagName===b.toUpperCase()&&a.className===e))for(var d=0;d').appendTo("body"); + var d = { width: $c.width() - $c[0].clientWidth, height: $c.height() - $c[0].clientHeight }; + $c.remove(); + window.scrollbarWidth = d.width; + window.scrollbarHeight = d.height; + return dim.match(/^(width|height)$/) ? d[dim] : d; + } + + + /** + * Returns hash container 'display' and 'visibility' + * + * @see $.swap() - swaps CSS, runs callback, resets CSS + */ +, showInvisibly: function ($E, force) { + if (!$E) return {}; + if (!$E.jquery) $E = $($E); + var CSS = { + display: $E.css('display') + , visibility: $E.css('visibility') + }; + if (force || CSS.display === "none") { // only if not *already hidden* + $E.css({ display: "block", visibility: "hidden" }); // show element 'invisibly' so can be measured + return CSS; + } + else return {}; + } + + /** + * Returns data for setting size of an element (container or a pane). + * + * @see _create(), onWindowResize() for container, plus others for pane + * @return JSON Returns a hash of all dimensions: top, bottom, left, right, outerWidth, innerHeight, etc + */ +, getElementDimensions: function ($E) { + var + d = {} // dimensions hash + , x = d.css = {} // CSS hash + , i = {} // TEMP insets + , b, p // TEMP border, padding + , N = $.layout.cssNum + , off = $E.offset() + ; + d.offsetLeft = off.left; + d.offsetTop = off.top; + + $.each("Left,Right,Top,Bottom".split(","), function (idx, e) { // e = edge + b = x["border" + e] = $.layout.borderWidth($E, e); + p = x["padding"+ e] = $.layout.cssNum($E, "padding"+e); + i[e] = b + p; // total offset of content from outer side + d["inset"+ e] = p; + }); + + d.offsetWidth = $E.innerWidth(); // offsetWidth is used in calc when doing manual resize + d.offsetHeight = $E.innerHeight(); // ditto + d.outerWidth = $E.outerWidth(); + d.outerHeight = $E.outerHeight(); + d.innerWidth = max(0, d.outerWidth - i.Left - i.Right); + d.innerHeight = max(0, d.outerHeight - i.Top - i.Bottom); + + x.width = $E.width(); + x.height = $E.height(); + x.top = N($E,"top",true); + x.bottom = N($E,"bottom",true); + x.left = N($E,"left",true); + x.right = N($E,"right",true); + + //d.visible = $E.is(":visible");// && x.width > 0 && x.height > 0; + + return d; + } + +, getElementCSS: function ($E, list) { + var + CSS = {} + , style = $E[0].style + , props = list.split(",") + , sides = "Top,Bottom,Left,Right".split(",") + , attrs = "Color,Style,Width".split(",") + , p, s, a, i, j, k + ; + for (i=0; i < props.length; i++) { + p = props[i]; + if (p.match(/(border|padding|margin)$/)) + for (j=0; j < 4; j++) { + s = sides[j]; + if (p === "border") + for (k=0; k < 3; k++) { + a = attrs[k]; + CSS[p+s+a] = style[p+s+a]; + } + else + CSS[p+s] = style[p+s]; + } + else + CSS[p] = style[p]; + }; + return CSS + } + + /** + * Return the innerWidth for the current browser/doctype + * + * @see initPanes(), sizeMidPanes(), initHandles(), sizeHandles() + * @param {Array.} $E Must pass a jQuery object - first element is processed + * @param {number=} outerWidth (optional) Can pass a width, allowing calculations BEFORE element is resized + * @return {number} Returns the innerWidth of the elem by subtracting padding and borders + */ +, cssWidth: function ($E, outerWidth) { + var + b = $.layout.borderWidth + , n = $.layout.cssNum + ; + // a 'calculated' outerHeight can be passed so borders and/or padding are removed if needed + if (outerWidth <= 0) return 0; + + if (!$.support.boxModel) return outerWidth; + + // strip border and padding from outerWidth to get CSS Width + var W = outerWidth + - b($E, "Left") + - b($E, "Right") + - n($E, "paddingLeft") + - n($E, "paddingRight") + ; + + return max(0,W); + } + + /** + * Return the innerHeight for the current browser/doctype + * + * @see initPanes(), sizeMidPanes(), initHandles(), sizeHandles() + * @param {Array.} $E Must pass a jQuery object - first element is processed + * @param {number=} outerHeight (optional) Can pass a width, allowing calculations BEFORE element is resized + * @return {number} Returns the innerHeight of the elem by subtracting padding and borders + */ +, cssHeight: function ($E, outerHeight) { + var + b = $.layout.borderWidth + , n = $.layout.cssNum + ; + // a 'calculated' outerHeight can be passed so borders and/or padding are removed if needed + if (outerHeight <= 0) return 0; + + if (!$.support.boxModel) return outerHeight; + + // strip border and padding from outerHeight to get CSS Height + var H = outerHeight + - b($E, "Top") + - b($E, "Bottom") + - n($E, "paddingTop") + - n($E, "paddingBottom") + ; + + return max(0,H); + } + + /** + * Returns the 'current CSS numeric value' for a CSS property - 0 if property does not exist + * + * @see Called by many methods + * @param {Array.} $E Must pass a jQuery object - first element is processed + * @param {string} prop The name of the CSS property, eg: top, width, etc. + * @param {boolean=} [allowAuto=false] true = return 'auto' if that is value; false = return 0 + * @return {(string|number)} Usually used to get an integer value for position (top, left) or size (height, width) + */ +, cssNum: function ($E, prop, allowAuto) { + if (!$E.jquery) $E = $($E); + var CSS = $.layout.showInvisibly($E) + , p = $.curCSS($E[0], prop, true) + , v = allowAuto && p=="auto" ? p : (parseInt(p, 10) || 0); + $E.css( CSS ); // RESET + return v; + } + +, borderWidth: function (el, side) { + if (el.jquery) el = el[0]; + var b = "border"+ side.substr(0,1).toUpperCase() + side.substr(1); // left => Left + return $.curCSS(el, b+"Style", true) === "none" ? 0 : (parseInt($.curCSS(el, b+"Width", true), 10) || 0); + } + + /** + * Mouse-tracking utility - FUTURE REFERENCE + * + * init: if (!window.mouse) { + * window.mouse = { x: 0, y: 0 }; + * $(document).mousemove( $.layout.trackMouse ); + * } + * + * @param {Object} evt + * +, trackMouse: function (evt) { + window.mouse = { x: evt.clientX, y: evt.clientY }; + } + */ + + /** + * SUBROUTINE for preventPrematureSlideClose option + * + * @param {Object} evt + * @param {Object=} el + */ +, isMouseOverElem: function (evt, el) { + var + $E = $(el || this) + , d = $E.offset() + , T = d.top + , L = d.left + , R = L + $E.outerWidth() + , B = T + $E.outerHeight() + , x = evt.pageX // evt.clientX ? + , y = evt.pageY // evt.clientY ? + ; + // if X & Y are < 0, probably means is over an open SELECT + return ($.layout.browser.msie && x < 0 && y < 0) || ((x >= L && x <= R) && (y >= T && y <= B)); + } + + /** + * Message/Logging Utility + * + * @example $.layout.msg("My message"); // log text + * @example $.layout.msg("My message", true); // alert text + * @example $.layout.msg({ foo: "bar" }, "Title"); // log hash-data, with custom title + * @example $.layout.msg({ foo: "bar" }, true, "Title", { sort: false }); -OR- + * @example $.layout.msg({ foo: "bar" }, "Title", { sort: false, display: true }); // alert hash-data + * + * @param {(Object|string)} info String message OR Hash/Array + * @param {(Boolean|string|Object)=} [popup=false] True means alert-box - can be skipped + * @param {(Object|string)=} [debugTitle=""] Title for Hash data - can be skipped + * @param {Object=} [debutOpts={}] Extra options for debug output + */ +, msg: function (info, popup, debugTitle, debugOpts) { + if ($.isPlainObject(info) && window.debugData) { + if (typeof popup === "string") { + debugOpts = debugTitle; + debugTitle = popup; + } + else if (typeof debugTitle === "object") { + debugOpts = debugTitle; + debugTitle = null; + } + var t = debugTitle || "log( )" + , o = $.extend({ sort: false, returnHTML: false, display: false }, debugOpts); + if (popup === true || o.display) + debugData( info, t, o ); + else if (window.console) + console.log(debugData( info, t, o )); + } + else if (popup) + alert(info); + else if (window.console) + console.log(info); + else { + var id = "#layoutLogger" + , $l = $(id); + if (!$l.length) + $l = createLog(); + $l.children("ul").append('
  • '+ info.replace(/\/g,">") +'
  • '); + } + + function createLog () { + var pos = $.support.fixedPosition ? 'fixed' : 'absolute' + , $e = $('
    ' + + '
    ' + + 'XLayout console.log
    ' + + '
      ' + + '
      ' + ).appendTo("body"); + $e.css('left', $(window).width() - $e.outerWidth() - 5) + if ($.ui.draggable) $e.draggable({ handle: ':first-child' }); + return $e; + }; + } + +}; + +var lang = $.layout.language; // alias used in defaults... + +// DEFAULT OPTIONS - CHANGE IF DESIRED +$.layout.defaults = { +/* + * LAYOUT & LAYOUT-CONTAINER OPTIONS + * - none of these options are applicable to individual panes + */ + name: "" // Not required, but useful for buttons and used for the state-cookie +, containerSelector: "" // ONLY used when specifying a childOptions - to find container-element that is NOT directly-nested +, containerClass: "ui-layout-container" // layout-container element +, scrollToBookmarkOnLoad: true // after creating a layout, scroll to bookmark in URL (.../page.htm#myBookmark) +, resizeWithWindow: true // bind thisLayout.resizeAll() to the window.resize event +, resizeWithWindowDelay: 200 // delay calling resizeAll because makes window resizing very jerky +, resizeWithWindowMaxDelay: 0 // 0 = none - force resize every XX ms while window is being resized +, onresizeall_start: null // CALLBACK when resizeAll() STARTS - NOT pane-specific +, onresizeall_end: null // CALLBACK when resizeAll() ENDS - NOT pane-specific +, onload_start: null // CALLBACK when Layout inits - after options initialized, but before elements +, onload_end: null // CALLBACK when Layout inits - after EVERYTHING has been initialized +, onunload_start: null // CALLBACK when Layout is destroyed OR onWindowUnload +, onunload_end: null // CALLBACK when Layout is destroyed OR onWindowUnload +, autoBindCustomButtons: false // search for buttons with ui-layout-button class and auto-bind them +, initPanes: true // false = DO NOT initialize the panes onLoad - will init later +, showErrorMessages: true // enables fatal error messages to warn developers of common errors +, showDebugMessages: false // display console-and-alert debug msgs - IF this Layout version _has_ debugging code! +// Changing this zIndex value will cause other zIndex values to automatically change +, zIndex: null // the PANE zIndex - resizers and masks will be +1 +// DO NOT CHANGE the zIndex values below unless you clearly understand their relationships +, zIndexes: { // set _default_ z-index values here... + pane_normal: 0 // normal z-index for panes + , content_mask: 1 // applied to overlays used to mask content INSIDE panes during resizing + , resizer_normal: 2 // normal z-index for resizer-bars + , pane_sliding: 100 // applied to *BOTH* the pane and its resizer when a pane is 'slid open' + , pane_animate: 1000 // applied to the pane when being animated - not applied to the resizer + , resizer_drag: 10000 // applied to the CLONED resizer-bar when being 'dragged' + } +/* + * PANE DEFAULT SETTINGS + * - settings under the 'panes' key become the default settings for *all panes* + * - ALL pane-options can also be set specifically for each panes, which will override these 'default values' + */ +, panes: { // default options for 'all panes' - will be overridden by 'per-pane settings' + applyDemoStyles: false // NOTE: renamed from applyDefaultStyles for clarity + , closable: true // pane can open & close + , resizable: true // when open, pane can be resized + , slidable: true // when closed, pane can 'slide open' over other panes - closes on mouse-out + , initClosed: false // true = init pane as 'closed' + , initHidden: false // true = init pane as 'hidden' - no resizer-bar/spacing + // SELECTORS + //, paneSelector: "" // MUST be pane-specific - jQuery selector for pane + , contentSelector: ".ui-layout-content" // INNER div/element to auto-size so only it scrolls, not the entire pane! + , contentIgnoreSelector: ".ui-layout-ignore" // element(s) to 'ignore' when measuring 'content' + , findNestedContent: false // true = $P.find(contentSelector), false = $P.children(contentSelector) + // GENERIC ROOT-CLASSES - for auto-generated classNames + , paneClass: "ui-layout-pane" // Layout Pane + , resizerClass: "ui-layout-resizer" // Resizer Bar + , togglerClass: "ui-layout-toggler" // Toggler Button + , buttonClass: "ui-layout-button" // CUSTOM Buttons - eg: '[ui-layout-button]-toggle/-open/-close/-pin' + // ELEMENT SIZE & SPACING + //, size: 100 // MUST be pane-specific -initial size of pane + , minSize: 0 // when manually resizing a pane + , maxSize: 0 // ditto, 0 = no limit + , spacing_open: 6 // space between pane and adjacent panes - when pane is 'open' + , spacing_closed: 6 // ditto - when pane is 'closed' + , togglerLength_open: 50 // Length = WIDTH of toggler button on north/south sides - HEIGHT on east/west sides + , togglerLength_closed: 50 // 100% OR -1 means 'full height/width of resizer bar' - 0 means 'hidden' + , togglerAlign_open: "center" // top/left, bottom/right, center, OR... + , togglerAlign_closed: "center" // 1 => nn = offset from top/left, -1 => -nn == offset from bottom/right + , togglerTip_open: lang.Close // Toggler tool-tip (title) + , togglerTip_closed: lang.Open // ditto + , togglerContent_open: "" // text or HTML to put INSIDE the toggler + , togglerContent_closed: "" // ditto + // RESIZING OPTIONS + , resizerDblClickToggle: true // + , autoResize: true // IF size is 'auto' or a percentage, then recalc 'pixel size' whenever the layout resizes + , autoReopen: true // IF a pane was auto-closed due to noRoom, reopen it when there is room? False = leave it closed + , resizerDragOpacity: 1 // option for ui.draggable + //, resizerCursor: "" // MUST be pane-specific - cursor when over resizer-bar + , maskContents: false // true = add DIV-mask over-or-inside this pane so can 'drag' over IFRAMES + , maskObjects: false // true = add IFRAME-mask over-or-inside this pane to cover objects/applets - content-mask will overlay this mask + , maskZindex: null // will override zIndexes.content_mask if specified - not applicable to iframe-panes + , resizingGrid: false // grid size that the resizers will snap-to during resizing, eg: [20,20] + , livePaneResizing: false // true = LIVE Resizing as resizer is dragged + , liveContentResizing: false // true = re-measure header/footer heights as resizer is dragged + , liveResizingTolerance: 1 // how many px change before pane resizes, to control performance + // TIPS & MESSAGES - also see lang object + , noRoomToOpenTip: lang.noRoomToOpenTip + , resizerTip: lang.Resize // Resizer tool-tip (title) + , sliderTip: lang.Slide // resizer-bar triggers 'sliding' when pane is closed + , sliderCursor: "pointer" // cursor when resizer-bar will trigger 'sliding' + , slideTrigger_open: "click" // click, dblclick, mouseenter + , slideTrigger_close: "mouseleave"// click, mouseleave + , slideDelay_open: 300 // applies only for mouseenter event - 0 = instant open + , slideDelay_close: 300 // applies only for mouseleave event (300ms is the minimum!) + , hideTogglerOnSlide: false // when pane is slid-open, should the toggler show? + , preventQuickSlideClose: $.layout.browser.webkit // Chrome triggers slideClosed as it is opening + , preventPrematureSlideClose: false // handle incorrect mouseleave trigger, like when over a SELECT-list in IE + // HOT-KEYS & MISC + , showOverflowOnHover: false // will bind allowOverflow() utility to pane.onMouseOver + , enableCursorHotkey: true // enabled 'cursor' hotkeys + //, customHotkey: "" // MUST be pane-specific - EITHER a charCode OR a character + , customHotkeyModifier: "SHIFT" // either 'SHIFT', 'CTRL' or 'CTRL+SHIFT' - NOT 'ALT' + // PANE ANIMATION + // NOTE: fxSss_open, fxSss_close & fxSss_size options (eg: fxName_open) are auto-generated if not passed + , fxName: "slide" // ('none' or blank), slide, drop, scale -- only relevant to 'open' & 'close', NOT 'size' + , fxSpeed: null // slow, normal, fast, 200, nnn - if passed, will OVERRIDE fxSettings.duration + , fxSettings: {} // can be passed, eg: { easing: "easeOutBounce", duration: 1500 } + , fxOpacityFix: true // tries to fix opacity in IE to restore anti-aliasing after animation + , animatePaneSizing: false // true = animate resizing after dragging resizer-bar OR sizePane() is called + /* NOTE: Action-specific FX options are auto-generated from the options above if not specifically set: + fxName_open: "slide" // 'Open' pane animation + fnName_close: "slide" // 'Close' pane animation + fxName_size: "slide" // 'Size' pane animation - when animatePaneSizing = true + fxSpeed_open: null + fxSpeed_close: null + fxSpeed_size: null + fxSettings_open: {} + fxSettings_close: {} + fxSettings_size: {} + */ + // CHILD/NESTED LAYOUTS + , childOptions: null // Layout-options for nested/child layout - even {} is valid as options + , initChildLayout: true // true = child layout will be created as soon as _this_ layout completes initialization + , destroyChildLayout: true // true = destroy child-layout if this pane is destroyed + , resizeChildLayout: true // true = trigger child-layout.resizeAll() when this pane is resized + // PANE CALLBACKS + , triggerEventsOnLoad: false // true = trigger onopen OR onclose callbacks when layout initializes + , triggerEventsDuringLiveResize: true // true = trigger onresize callback REPEATEDLY if livePaneResizing==true + , onshow_start: null // CALLBACK when pane STARTS to Show - BEFORE onopen/onhide_start + , onshow_end: null // CALLBACK when pane ENDS being Shown - AFTER onopen/onhide_end + , onhide_start: null // CALLBACK when pane STARTS to Close - BEFORE onclose_start + , onhide_end: null // CALLBACK when pane ENDS being Closed - AFTER onclose_end + , onopen_start: null // CALLBACK when pane STARTS to Open + , onopen_end: null // CALLBACK when pane ENDS being Opened + , onclose_start: null // CALLBACK when pane STARTS to Close + , onclose_end: null // CALLBACK when pane ENDS being Closed + , onresize_start: null // CALLBACK when pane STARTS being Resized ***FOR ANY REASON*** + , onresize_end: null // CALLBACK when pane ENDS being Resized ***FOR ANY REASON*** + , onsizecontent_start: null // CALLBACK when sizing of content-element STARTS + , onsizecontent_end: null // CALLBACK when sizing of content-element ENDS + , onswap_start: null // CALLBACK when pane STARTS to Swap + , onswap_end: null // CALLBACK when pane ENDS being Swapped + , ondrag_start: null // CALLBACK when pane STARTS being ***MANUALLY*** Resized + , ondrag_end: null // CALLBACK when pane ENDS being ***MANUALLY*** Resized + } +/* + * PANE-SPECIFIC SETTINGS + * - options listed below MUST be specified per-pane - they CANNOT be set under 'panes' + * - all options under the 'panes' key can also be set specifically for any pane + * - most options under the 'panes' key apply only to 'border-panes' - NOT the the center-pane + */ +, north: { + paneSelector: ".ui-layout-north" + , size: "auto" // eg: "auto", "30%", .30, 200 + , resizerCursor: "n-resize" // custom = url(myCursor.cur) + , customHotkey: "" // EITHER a charCode (43) OR a character ("o") + } +, south: { + paneSelector: ".ui-layout-south" + , size: "auto" + , resizerCursor: "s-resize" + , customHotkey: "" + } +, east: { + paneSelector: ".ui-layout-east" + , size: 200 + , resizerCursor: "e-resize" + , customHotkey: "" + } +, west: { + paneSelector: ".ui-layout-west" + , size: 200 + , resizerCursor: "w-resize" + , customHotkey: "" + } +, center: { + paneSelector: ".ui-layout-center" + , minWidth: 0 + , minHeight: 0 + } +}; + +$.layout.optionsMap = { + // layout/global options - NOT pane-options + layout: ("stateManagement,effects,zIndexes," + + "name,zIndex,scrollToBookmarkOnLoad,showErrorMessages," + + "resizeWithWindow,resizeWithWindowDelay,resizeWithWindowMaxDelay," + + "onresizeall,onresizeall_start,onresizeall_end,onload,onunload,autoBindCustomButtons").split(",") +// borderPanes: [ ALL options that are NOT specified as 'layout' ] + // default.panes options that apply to the center-pane (most options apply _only_ to border-panes) +, center: ("paneClass,contentSelector,contentIgnoreSelector,findNestedContent,applyDemoStyles,triggerEventsOnLoad," + + "showOverflowOnHover,maskContents,maskObjects,liveContentResizing," + + "childOptions,initChildLayout,resizeChildLayout,destroyChildLayout," + + "onresize,onresize_start,onresize_end,onsizecontent,onsizecontent_start,onsizecontent_end").split(",") + // options that MUST be specifically set 'per-pane' - CANNOT set in the panes (defaults) key +, noDefault: ("paneSelector,resizerCursor,customHotkey").split(",") +}; + +/** + * Processes options passed in converts flat-format data into subkey (JSON) format + * In flat-format, subkeys are _currently_ separated with 2 underscores, like north__optName + * Plugins may also call this method so they can transform their own data + * + * @param {!Object} hash Data/options passed by user - may be a single level or nested levels + * @return {Object} Returns hash of minWidth & minHeight + */ +$.layout.transformData = function (hash) { + var json = { panes: {}, center: {} } // init return object + , data, branch, optKey, keys, key, val, i, c; + + if (typeof hash !== "object") return json; // no options passed + + // convert all 'flat-keys' to 'sub-key' format + for (optKey in hash) { + branch = json; + data = $.layout.optionsMap.layout; + val = hash[ optKey ]; + keys = optKey.split("__"); // eg: west__size or north__fxSettings__duration + c = keys.length - 1; + // convert underscore-delimited to subkeys + for (i=0; i <= c; i++) { + key = keys[i]; + if (i === c) + branch[key] = val; + else if (!branch[key]) + branch[key] = {}; // create the subkey + // recurse to sub-key for next loop - if not done + branch = branch[key]; + } + } + + return json; +} + +// INTERNAL CONFIG DATA - DO NOT CHANGE THIS! +$.layout.backwardCompatibility = { + // data used by renameOldOptions() + map: { + // OLD Option Name: NEW Option Name + applyDefaultStyles: "applyDemoStyles" + , resizeNestedLayout: "resizeChildLayout" + , resizeWhileDragging: "livePaneResizing" + , resizeContentWhileDragging: "liveContentResizing" + , triggerEventsWhileDragging: "triggerEventsDuringLiveResize" + , maskIframesOnResize: "maskContents" + , useStateCookie: "stateManagement.enabled" + , "cookie.autoLoad": "stateManagement.autoLoad" + , "cookie.autoSave": "stateManagement.autoSave" + , "cookie.keys": "stateManagement.stateKeys" + , "cookie.name": "stateManagement.cookie.name" + , "cookie.domain": "stateManagement.cookie.domain" + , "cookie.path": "stateManagement.cookie.path" + , "cookie.expires": "stateManagement.cookie.expires" + , "cookie.secure": "stateManagement.cookie.secure" + } + /** + * @param {Object} opts + */ +, renameOptions: function (opts) { + var map = $.layout.backwardCompatibility.map + , oldData, newData, value + ; + for (var itemPath in map) { + oldData = getBranch( itemPath ); + value = oldData.branch[ oldData.key ] + if (value !== undefined) { + newData = getBranch( map[itemPath], true ) + newData.branch[ newData.key ] = value; + delete oldData.branch[ oldData.key ]; + } + } + + /** + * @param {string} path + * @param {boolean=} [create=false] Create path if does not exist + */ + function getBranch (path, create) { + var a = path.split(".") // split keys into array + , c = a.length - 1 + , D = { branch: opts, key: a[c] } // init branch at top & set key (last item) + , i = 0, k, undef; + for (; i 0) { + if (autoHide && $E.data('autoHidden') && $E.innerHeight() > 0) { + $E.show().data('autoHidden', false); + if (!browser.mozilla) // FireFox refreshes iframes - IE does not + // make hidden, then visible to 'refresh' display after animation + $E.css(_c.hidden).css(_c.visible); + } + } + else if (autoHide && !$E.data('autoHidden')) + $E.hide().data('autoHidden', true); + } + + /** + * @param {(string|!Object)} el + * @param {number=} outerHeight + * @param {boolean=} [autoHide=false] + */ +, setOuterHeight = function (el, outerHeight, autoHide) { + var $E = el, h; + if (isStr(el)) $E = $Ps[el]; // west + else if (!el.jquery) $E = $(el); + h = cssH($E, outerHeight); + $E.css({ height: h, visibility: "visible" }); // may have been 'hidden' by sizeContent + if (h > 0 && $E.innerWidth() > 0) { + if (autoHide && $E.data('autoHidden')) { + $E.show().data('autoHidden', false); + if (!browser.mozilla) // FireFox refreshes iframes - IE does not + $E.css(_c.hidden).css(_c.visible); + } + } + else if (autoHide && !$E.data('autoHidden')) + $E.hide().data('autoHidden', true); + } + + /** + * @param {(string|!Object)} el + * @param {number=} outerSize + * @param {boolean=} [autoHide=false] + */ +, setOuterSize = function (el, outerSize, autoHide) { + if (_c[pane].dir=="horz") // pane = north or south + setOuterHeight(el, outerSize, autoHide); + else // pane = east or west + setOuterWidth(el, outerSize, autoHide); + } + + + /** + * Converts any 'size' params to a pixel/integer size, if not already + * If 'auto' or a decimal/percentage is passed as 'size', a pixel-size is calculated + * + /** + * @param {string} pane + * @param {(string|number)=} size + * @param {string=} [dir] + * @return {number} + */ +, _parseSize = function (pane, size, dir) { + if (!dir) dir = _c[pane].dir; + + if (isStr(size) && size.match(/%/)) + size = (size === '100%') ? -1 : parseInt(size, 10) / 100; // convert % to decimal + + if (size === 0) + return 0; + else if (size >= 1) + return parseInt(size, 10); + + var o = options, avail = 0; + if (dir=="horz") // north or south or center.minHeight + avail = sC.innerHeight - ($Ps.north ? o.north.spacing_open : 0) - ($Ps.south ? o.south.spacing_open : 0); + else if (dir=="vert") // east or west or center.minWidth + avail = sC.innerWidth - ($Ps.west ? o.west.spacing_open : 0) - ($Ps.east ? o.east.spacing_open : 0); + + if (size === -1) // -1 == 100% + return avail; + else if (size > 0) // percentage, eg: .25 + return round(avail * size); + else if (pane=="center") + return 0; + else { // size < 0 || size=='auto' || size==Missing || size==Invalid + // auto-size the pane + var dim = (dir === "horz" ? "height" : "width") + , $P = $Ps[pane] + , $C = dim === 'height' ? $Cs[pane] : false + , vis = $.layout.showInvisibly($P) // show pane invisibly if hidden + , szP = $P.css(dim) // SAVE current pane size + , szC = $C ? $C.css(dim) : 0 // SAVE current content size + ; + $P.css(dim, "auto"); + if ($C) $C.css(dim, "auto"); + size = (dim === "height") ? $P.outerHeight() : $P.outerWidth(); // MEASURE + $P.css(dim, szP).css(vis); // RESET size & visibility + if ($C) $C.css(dim, szC); + return size; + } + } + + /** + * Calculates current 'size' (outer-width or outer-height) of a border-pane - optionally with 'pane-spacing' added + * + * @param {(string|!Object)} pane + * @param {boolean=} [inclSpace=false] + * @return {number} Returns EITHER Width for east/west panes OR Height for north/south panes - adjusted for boxModel & browser + */ +, getPaneSize = function (pane, inclSpace) { + var + $P = $Ps[pane] + , o = options[pane] + , s = state[pane] + , oSp = (inclSpace ? o.spacing_open : 0) + , cSp = (inclSpace ? o.spacing_closed : 0) + ; + if (!$P || s.isHidden) + return 0; + else if (s.isClosed || (s.isSliding && inclSpace)) + return cSp; + else if (_c[pane].dir === "horz") + return $P.outerHeight() + oSp; + else // dir === "vert" + return $P.outerWidth() + oSp; + } + + /** + * Calculate min/max pane dimensions and limits for resizing + * + * @param {string} pane + * @param {boolean=} [slide=false] + */ +, setSizeLimits = function (pane, slide) { + if (!isInitialized()) return; + var + o = options[pane] + , s = state[pane] + , c = _c[pane] + , dir = c.dir + , side = c.side.toLowerCase() + , type = c.sizeType.toLowerCase() + , isSliding = (slide != undefined ? slide : s.isSliding) // only open() passes 'slide' param + , $P = $Ps[pane] + , paneSpacing = o.spacing_open + // measure the pane on the *opposite side* from this pane + , altPane = _c.oppositeEdge[pane] + , altS = state[altPane] + , $altP = $Ps[altPane] + , altPaneSize = (!$altP || altS.isVisible===false || altS.isSliding ? 0 : (dir=="horz" ? $altP.outerHeight() : $altP.outerWidth())) + , altPaneSpacing = ((!$altP || altS.isHidden ? 0 : options[altPane][ altS.isClosed !== false ? "spacing_closed" : "spacing_open" ]) || 0) + // limitSize prevents this pane from 'overlapping' opposite pane + , containerSize = (dir=="horz" ? sC.innerHeight : sC.innerWidth) + , minCenterDims = cssMinDims("center") + , minCenterSize = dir=="horz" ? max(options.center.minHeight, minCenterDims.minHeight) : max(options.center.minWidth, minCenterDims.minWidth) + // if pane is 'sliding', then ignore center and alt-pane sizes - because 'overlays' them + , limitSize = (containerSize - paneSpacing - (isSliding ? 0 : (_parseSize("center", minCenterSize, dir) + altPaneSize + altPaneSpacing))) + , minSize = s.minSize = max( _parseSize(pane, o.minSize), cssMinDims(pane).minSize ) + , maxSize = s.maxSize = min( (o.maxSize ? _parseSize(pane, o.maxSize) : 100000), limitSize ) + , r = s.resizerPosition = {} // used to set resizing limits + , top = sC.insetTop + , left = sC.insetLeft + , W = sC.innerWidth + , H = sC.innerHeight + , rW = o.spacing_open // subtract resizer-width to get top/left position for south/east + ; + switch (pane) { + case "north": r.min = top + minSize; + r.max = top + maxSize; + break; + case "west": r.min = left + minSize; + r.max = left + maxSize; + break; + case "south": r.min = top + H - maxSize - rW; + r.max = top + H - minSize - rW; + break; + case "east": r.min = left + W - maxSize - rW; + r.max = left + W - minSize - rW; + break; + }; + } + + /** + * Returns data for setting the size/position of center pane. Also used to set Height for east/west panes + * + * @return JSON Returns a hash of all dimensions: top, bottom, left, right, (outer) width and (outer) height + */ +, calcNewCenterPaneDims = function () { + var d = { + top: getPaneSize("north", true) // true = include 'spacing' value for pane + , bottom: getPaneSize("south", true) + , left: getPaneSize("west", true) + , right: getPaneSize("east", true) + , width: 0 + , height: 0 + }; + + // NOTE: sC = state.container + // calc center-pane outer dimensions + d.width = sC.innerWidth - d.left - d.right; // outerWidth + d.height = sC.innerHeight - d.bottom - d.top; // outerHeight + // add the 'container border/padding' to get final positions relative to the container + d.top += sC.insetTop; + d.bottom += sC.insetBottom; + d.left += sC.insetLeft; + d.right += sC.insetRight; + + return d; + } + + + /** + * @param {!Object} el + * @param {boolean=} [allStates=false] + */ +, getHoverClasses = function (el, allStates) { + var + $El = $(el) + , type = $El.data("layoutRole") + , pane = $El.data("layoutEdge") + , o = options[pane] + , root = o[type +"Class"] + , _pane = "-"+ pane // eg: "-west" + , _open = "-open" + , _closed = "-closed" + , _slide = "-sliding" + , _hover = "-hover " // NOTE the trailing space + , _state = $El.hasClass(root+_closed) ? _closed : _open + , _alt = _state === _closed ? _open : _closed + , classes = (root+_hover) + (root+_pane+_hover) + (root+_state+_hover) + (root+_pane+_state+_hover) + ; + if (allStates) // when 'removing' classes, also remove alternate-state classes + classes += (root+_alt+_hover) + (root+_pane+_alt+_hover); + + if (type=="resizer" && $El.hasClass(root+_slide)) + classes += (root+_slide+_hover) + (root+_pane+_slide+_hover); + + return $.trim(classes); + } +, addHover = function (evt, el) { + var $E = $(el || this); + if (evt && $E.data("layoutRole") === "toggler") + evt.stopPropagation(); // prevent triggering 'slide' on Resizer-bar + $E.addClass( getHoverClasses($E) ); + } +, removeHover = function (evt, el) { + var $E = $(el || this); + $E.removeClass( getHoverClasses($E, true) ); + } + +, onResizerEnter = function (evt) { // ALSO called by toggler.mouseenter + if ($.fn.disableSelection) + $("body").disableSelection(); + } +, onResizerLeave = function (evt, el) { + var + e = el || this // el is only passed when called by the timer + , pane = $(e).data("layoutEdge") + , name = pane +"ResizerLeave" + ; + timer.clear(pane+"_openSlider"); // cancel slideOpen timer, if set + timer.clear(name); // cancel enableSelection timer - may re/set below + // this method calls itself on a timer because it needs to allow + // enough time for dragging to kick-in and set the isResizing flag + // dragging has a 100ms delay set, so this delay must be >100 + if (!el) // 1st call - mouseleave event + timer.set(name, function(){ onResizerLeave(evt, e); }, 200); + // if user is resizing, then dragStop will enableSelection(), so can skip it here + else if (!state[pane].isResizing && $.fn.enableSelection) // 2nd call - by timer + $("body").enableSelection(); + } + +/* + * ########################### + * INITIALIZATION METHODS + * ########################### + */ + + /** + * Initialize the layout - called automatically whenever an instance of layout is created + * + * @see none - triggered onInit + * @return mixed true = fully initialized | false = panes not initialized (yet) | 'cancel' = abort + */ +, _create = function () { + // initialize config/options + initOptions(); + var o = options; + + // TEMP state so isInitialized returns true during init process + state.creatingLayout = true; + + // init plugins for this layout, if there are any (eg: stateManagement) + runPluginCallbacks( Instance, $.layout.onCreate ); + + // options & state have been initialized, so now run beforeLoad callback + // onload will CANCEL layout creation if it returns false + if (false === _runCallbacks("onload_start")) + return 'cancel'; + + // initialize the container element + _initContainer(); + + // bind hotkey function - keyDown - if required + initHotkeys(); + + // bind window.onunload + $(window).bind("unload."+ sID, unload); + + // init plugins for this layout, if there are any (eg: customButtons) + runPluginCallbacks( Instance, $.layout.onLoad ); + + // if layout elements are hidden, then layout WILL NOT complete initialization! + // initLayoutElements will set initialized=true and run the onload callback IF successful + if (o.initPanes) _initLayoutElements(); + + delete state.creatingLayout; + + return state.initialized; + } + + /** + * Initialize the layout IF not already + * + * @see All methods in Instance run this test + * @return boolean true = layoutElements have been initialized | false = panes are not initialized (yet) + */ +, isInitialized = function () { + if (state.initialized || state.creatingLayout) return true; // already initialized + else return _initLayoutElements(); // try to init panes NOW + } + + /** + * Initialize the layout - called automatically whenever an instance of layout is created + * + * @see _create() & isInitialized + * @return An object pointer to the instance created + */ +, _initLayoutElements = function (retry) { + // initialize config/options + var o = options; + + // CANNOT init panes inside a hidden container! + if (!$N.is(":visible")) { + // handle Chrome bug where popup window 'has no height' + // if layout is BODY element, try again in 50ms + // SEE: http://layout.jquery-dev.net/samples/test_popup_window.html + if ( !retry && browser.webkit && $N[0].tagName === "BODY" ) + setTimeout(function(){ _initLayoutElements(true); }, 50); + return false; + } + + // a center pane is required, so make sure it exists + if (!getPane("center").length) { + if (options.showErrorMessages) + _log( lang.errCenterPaneMissing, true ); + return false; + } + + // TEMP state so isInitialized returns true during init process + state.creatingLayout = true; + + // update Container dims + $.extend(sC, elDims( $N )); + + // initialize all layout elements + initPanes(); // size & position panes - calls initHandles() - which calls initResizable() + + if (o.scrollToBookmarkOnLoad) { + var l = self.location; + if (l.hash) l.replace( l.hash ); // scrollTo Bookmark + } + + // check to see if this layout 'nested' inside a pane + if (Instance.hasParentLayout) + o.resizeWithWindow = false; + // bind resizeAll() for 'this layout instance' to window.resize event + else if (o.resizeWithWindow) + $(window).bind("resize."+ sID, windowResize); + + delete state.creatingLayout; + state.initialized = true; + + // init plugins for this layout, if there are any + runPluginCallbacks( Instance, $.layout.onReady ); + + // now run the onload callback, if exists + _runCallbacks("onload_end"); + + return true; // elements initialized successfully + } + + /** + * Initialize nested layouts - called when _initLayoutElements completes + * + * NOT CURRENTLY USED + * + * @see _initLayoutElements + * @return An object pointer to the instance created + */ +, _initChildLayouts = function () { + $.each(_c.allPanes, function (idx, pane) { + if (options[pane].initChildLayout) + createChildLayout( pane ); + }); + } + + /** + * Initialize nested layouts for a specific pane - can optionally pass layout-options + * + * @see _initChildLayouts + * @param {string} pane The pane being opened, ie: north, south, east, or west + * @param {Object=} [opts] Layout-options - if passed, will OVERRRIDE options[pane].childOptions + * @return An object pointer to the layout instance created - or null + */ +, createChildLayout = function (evt_or_pane, opts) { + var pane = evtPane.call(this, evt_or_pane) + , $P = $Ps[pane] + , C = children + ; + if ($P) { + var $C = $Cs[pane] + , o = opts || options[pane].childOptions + , d = "layout" + // determine which element is supposed to be the 'child container' + // if pane has a 'containerSelector' OR a 'content-div', use those instead of the pane + , $Cont = o.containerSelector ? $P.find( o.containerSelector ) : ($C || $P) + , containerFound = $Cont.length + // see if a child-layout ALREADY exists on this element + , child = containerFound ? (C[pane] = $Cont.data(d) || null) : null + ; + // if no layout exists, but childOptions are set, try to create the layout now + if (!child && containerFound && o) + child = C[pane] = $Cont.eq(0).layout(o) || null; + if (child) + child.hasParentLayout = true; // set parent-flag in child + } + Instance[pane].child = C[pane]; // ALWAYS set pane-object pointer, even if null + } + +, windowResize = function () { + var delay = Number(options.resizeWithWindowDelay); + if (delay < 10) delay = 100; // MUST have a delay! + // resizing uses a delay-loop because the resize event fires repeatly - except in FF, but delay anyway + timer.clear("winResize"); // if already running + timer.set("winResize", function(){ + timer.clear("winResize"); + timer.clear("winResizeRepeater"); + var dims = elDims( $N ); + // only trigger resizeAll() if container has changed size + if (dims.innerWidth !== sC.innerWidth || dims.innerHeight !== sC.innerHeight) + resizeAll(); + }, delay); + // ALSO set fixed-delay timer, if not already running + if (!timer.data["winResizeRepeater"]) setWindowResizeRepeater(); + } + +, setWindowResizeRepeater = function () { + var delay = Number(options.resizeWithWindowMaxDelay); + if (delay > 0) + timer.set("winResizeRepeater", function(){ setWindowResizeRepeater(); resizeAll(); }, delay); + } + +, unload = function () { + var o = options; + + _runCallbacks("onunload_start"); + + // trigger plugin callabacks for this layout (eg: stateManagement) + runPluginCallbacks( Instance, $.layout.onUnload ); + + _runCallbacks("onunload_end"); + } + + /** + * Validate and initialize container CSS and events + * + * @see _create() + */ +, _initContainer = function () { + var + N = $N[0] + , tag = sC.tagName = N.tagName + , id = sC.id = N.id + , cls = sC.className = N.className + , o = options + , name = o.name + , fullPage= (tag === "BODY") + , props = "overflow,position,margin,padding,border" + , css = "layoutCSS" + , CSS = {} + , hid = "hidden" // used A LOT! + // see if this container is a 'pane' inside an outer-layout + , parent = $N.data("parentLayout") // parent-layout Instance + , pane = $N.data("layoutEdge") // pane-name in parent-layout + , isChild = parent && pane + ; + // sC -> state.container + sC.selector = $N.selector.split(".slice")[0]; + sC.ref = (o.name ? o.name +' layout / ' : '') + tag + (id ? "#"+id : cls ? '.['+cls+']' : ''); // used in messages + + $N .data({ + layout: Instance + , layoutContainer: sID // FLAG to indicate this is a layout-container - contains unique internal ID + }) + .addClass(o.containerClass) + ; + var layoutMethods = { + destroy: '' + , initPanes: '' + , resizeAll: 'resizeAll' + , resize: 'resizeAll' + } + , name; + // loop hash and bind all methods - include layoutID namespacing + for (name in layoutMethods) { + $N.bind("layout"+ name.toLowerCase() +"."+ sID, Instance[ layoutMethods[name] || name ]); + } + + // if this container is another layout's 'pane', then set child/parent pointers + if (isChild) { + // update parent flag + Instance.hasParentLayout = true; + // set pointers to THIS child-layout (Instance) in parent-layout + // NOTE: parent.PANE.child is an ALIAS to parent.children.PANE + parent[pane].child = parent.children[pane] = $N.data("layout"); + } + + // SAVE original container CSS for use in destroy() + if (!$N.data(css)) { + // handle props like overflow different for BODY & HTML - has 'system default' values + if (fullPage) { + CSS = $.extend( elCSS($N, props), { + height: $N.css("height") + , overflow: $N.css("overflow") + , overflowX: $N.css("overflowX") + , overflowY: $N.css("overflowY") + }); + // ALSO SAVE CSS + var $H = $("html"); + $H.data(css, { + height: "auto" // FF would return a fixed px-size! + , overflow: $H.css("overflow") + , overflowX: $H.css("overflowX") + , overflowY: $H.css("overflowY") + }); + } + else // handle props normally for non-body elements + CSS = elCSS($N, props+",top,bottom,left,right,width,height,overflow,overflowX,overflowY"); + + $N.data(css, CSS); + } + + try { // format html/body if this is a full page layout + if (fullPage) { + $("html").css({ + height: "100%" + , overflow: hid + , overflowX: hid + , overflowY: hid + }); + $("body").css({ + position: "relative" + , height: "100%" + , overflow: hid + , overflowX: hid + , overflowY: hid + , margin: 0 + , padding: 0 // TODO: test whether body-padding could be handled? + , border: "none" // a body-border creates problems because it cannot be measured! + }); + + // set current layout-container dimensions + $.extend(sC, elDims( $N )); + } + else { // set required CSS for overflow and position + // ENSURE container will not 'scroll' + CSS = { overflow: hid, overflowX: hid, overflowY: hid } + var + p = $N.css("position") + , h = $N.css("height") + ; + // if this is a NESTED layout, then container/outer-pane ALREADY has position and height + if (!isChild) { + if (!p || !p.match(/fixed|absolute|relative/)) + CSS.position = "relative"; // container MUST have a 'position' + /* + if (!h || h=="auto") + CSS.height = "100%"; // container MUST have a 'height' + */ + } + $N.css( CSS ); + + // set current layout-container dimensions + if ( $N.is(":visible") ) { + $.extend(sC, elDims( $N )); + if (o.showErrorMessages && sC.innerHeight < 1) + _log( lang.errContainerHeight.replace(/CONTAINER/, sC.ref), true ); + } + } + } catch (ex) {} + } + + /** + * Bind layout hotkeys - if options enabled + * + * @see _create() and addPane() + * @param {string=} [panes=""] The edge(s) to process + */ +, initHotkeys = function (panes) { + panes = panes ? panes.split(",") : _c.borderPanes; + // bind keyDown to capture hotkeys, if option enabled for ANY pane + $.each(panes, function (i, pane) { + var o = options[pane]; + if (o.enableCursorHotkey || o.customHotkey) { + $(document).bind("keydown."+ sID, keyDown); // only need to bind this ONCE + return false; // BREAK - binding was done + } + }); + } + + /** + * Build final OPTIONS data + * + * @see _create() + */ +, initOptions = function () { + var data, d, pane, key, val, i, c, o; + + // reprocess user's layout-options to have correct options sub-key structure + opts = $.layout.transformData( opts ); // panes = default subkey + + // auto-rename old options for backward compatibility + opts = $.layout.backwardCompatibility.renameAllOptions( opts ); + + // if user-options has 'panes' key (pane-defaults), process it... + if (!$.isEmptyObject(opts.panes)) { + // REMOVE any pane-defaults that MUST be set per-pane + data = $.layout.optionsMap.noDefault; + for (i=0, c=data.length; i 0) { + z.pane_normal = zo; + z.content_mask = max(zo+1, z.content_mask); // MIN = +1 + z.resizer_normal = max(zo+2, z.resizer_normal); // MIN = +2 + } + + function createFxOptions ( pane ) { + var o = options[pane] + , d = options.panes; + // ensure fxSettings key to avoid errors + if (!o.fxSettings) o.fxSettings = {}; + if (!d.fxSettings) d.fxSettings = {}; + + $.each(["_open","_close","_size"], function (i,n) { + var + sName = "fxName"+ n + , sSpeed = "fxSpeed"+ n + , sSettings = "fxSettings"+ n + // recalculate fxName according to specificity rules + , fxName = o[sName] = + o[sName] // options.west.fxName_open + || d[sName] // options.panes.fxName_open + || o.fxName // options.west.fxName + || d.fxName // options.panes.fxName + || "none" // MEANS $.layout.defaults.panes.fxName == "" || false || null || 0 + ; + // validate fxName to ensure is valid effect - MUST have effect-config data in options.effects + if (fxName === "none" || !$.effects || !$.effects[fxName] || !options.effects[fxName]) + fxName = o[sName] = "none"; // effect not loaded OR unrecognized fxName + + // set vars for effects subkeys to simplify logic + var fx = options.effects[fxName] || {} // effects.slide + , fx_all = fx.all || null // effects.slide.all + , fx_pane = fx[pane] || null // effects.slide.west + ; + // create fxSpeed[_open|_close|_size] + o[sSpeed] = + o[sSpeed] // options.west.fxSpeed_open + || d[sSpeed] // options.west.fxSpeed_open + || o.fxSpeed // options.west.fxSpeed + || d.fxSpeed // options.panes.fxSpeed + || null // DEFAULT - let fxSetting.duration control speed + ; + // create fxSettings[_open|_close|_size] + o[sSettings] = $.extend( + {} + , fx_all // effects.slide.all + , fx_pane // effects.slide.west + , d.fxSettings // options.panes.fxSettings + , o.fxSettings // options.west.fxSettings + , d[sSettings] // options.panes.fxSettings_open + , o[sSettings] // options.west.fxSettings_open + ); + }); + + // DONE creating action-specific-settings for this pane, + // so DELETE generic options - are no longer meaningful + delete o.fxName; + delete o.fxSpeed; + delete o.fxSettings; + } + + // DELETE 'panes' key now that we are done - values were copied to EACH pane + delete options.panes; + } + + /** + * Initialize module objects, styling, size and position for all panes + * + * @see _initElements() + * @param {string} pane The pane to process + */ +, getPane = function (pane) { + var sel = options[pane].paneSelector + if (sel.substr(0,1)==="#") // ID selector + // NOTE: elements selected 'by ID' DO NOT have to be 'children' + return $N.find(sel).eq(0); + else { // class or other selector + var $P = $N.children(sel).eq(0); + // look for the pane nested inside a 'form' element + return $P.length ? $P : $N.children("form:first").children(sel).eq(0); + } + } + +, initPanes = function () { + // NOTE: do north & south FIRST so we can measure their height - do center LAST + $.each(_c.allPanes, function (idx, pane) { + addPane( pane, true ); + }); + + // init the pane-handles NOW in case we have to hide or close the pane below + initHandles(); + + // now that all panes have been initialized and initially-sized, + // make sure there is really enough space available for each pane + $.each(_c.borderPanes, function (i, pane) { + if ($Ps[pane] && state[pane].isVisible) { // pane is OPEN + setSizeLimits(pane); + makePaneFit(pane); // pane may be Closed, Hidden or Resized by makePaneFit() + } + }); + // size center-pane AGAIN in case we 'closed' a border-pane in loop above + sizeMidPanes("center"); + + // Chrome/Webkit sometimes fires callbacks BEFORE it completes resizing! + // Before RC30.3, there was a 10ms delay here, but that caused layout + // to load asynchrously, which is BAD, so try skipping delay for now + + // process pane contents and callbacks, and init/resize child-layout if exists + $.each(_c.allPanes, function (i, pane) { + var o = options[pane]; + if ($Ps[pane]) { + if (state[pane].isVisible) { // pane is OPEN + sizeContent(pane); + // trigger pane.onResize if triggerEventsOnLoad = true + if (o.triggerEventsOnLoad) + _runCallbacks("onresize_end", pane); + else // automatic if onresize called, otherwise call it specifically + // resize child - IF inner-layout already exists (created before this layout) + resizeChildLayout(pane); + } + // init childLayout - even if pane is not visible + if (o.initChildLayout && o.childOptions) + createChildLayout(pane); + } + }); + } + + /** + * Add a pane to the layout - subroutine of initPanes() + * + * @see initPanes() + * @param {string} pane The pane to process + * @param {boolean=} [force=false] Size content after init + */ +, addPane = function (pane, force) { + if (!force && !isInitialized()) return; + var + o = options[pane] + , s = state[pane] + , c = _c[pane] + , fx = s.fx + , dir = c.dir + , spacing = o.spacing_open || 0 + , isCenter = (pane === "center") + , CSS = {} + , $P = $Ps[pane] + , size, minSize, maxSize + ; + // if pane-pointer already exists, remove the old one first + if ($P) + removePane( pane, false, true, false ); + else + $Cs[pane] = false; // init + + $P = $Ps[pane] = getPane(pane); + if (!$P.length) { + $Ps[pane] = false; // logic + return; + } + + // SAVE original Pane CSS + if (!$P.data("layoutCSS")) { + var props = "position,top,left,bottom,right,width,height,overflow,zIndex,display,backgroundColor,padding,margin,border"; + $P.data("layoutCSS", elCSS($P, props)); + } + + // create alias for pane data in Instance - initHandles will add more + Instance[pane] = { name: pane, pane: $Ps[pane], content: $Cs[pane], options: options[pane], state: state[pane], child: children[pane] }; + + // add classes, attributes & events + $P .data({ + parentLayout: Instance // pointer to Layout Instance + , layoutPane: Instance[pane] // NEW pointer to pane-alias-object + , layoutEdge: pane + , layoutRole: "pane" + }) + .css(c.cssReq).css("zIndex", options.zIndexes.pane_normal) + .css(o.applyDemoStyles ? c.cssDemo : {}) // demo styles + .addClass( o.paneClass +" "+ o.paneClass+"-"+pane ) // default = "ui-layout-pane ui-layout-pane-west" - may be a dupe of 'paneSelector' + .bind("mouseenter."+ sID, addHover ) + .bind("mouseleave."+ sID, removeHover ) + ; + var paneMethods = { + hide: '' + , show: '' + , toggle: '' + , close: '' + , open: '' + , slideOpen: '' + , slideClose: '' + , slideToggle: '' + , size: 'manualSizePane' + , sizePane: 'manualSizePane' + , sizeContent: '' + , sizeHandles: '' + , enableClosable: '' + , disableClosable: '' + , enableSlideable: '' + , disableSlideable: '' + , enableResizable: '' + , disableResizable: '' + , swapPanes: 'swapPanes' + , swap: 'swapPanes' + , move: 'swapPanes' + , removePane: 'removePane' + , remove: 'removePane' + , createChildLayout: '' + , resizeChildLayout: '' + , resizeAll: 'resizeAll' + , resizeLayout: 'resizeAll' + } + , name; + // loop hash and bind all methods - include layoutID namespacing + for (name in paneMethods) { + $P.bind("layoutpane"+ name.toLowerCase() +"."+ sID, Instance[ paneMethods[name] || name ]); + } + + // see if this pane has a 'scrolling-content element' + initContent(pane, false); // false = do NOT sizeContent() - called later + + if (!isCenter) { + // call _parseSize AFTER applying pane classes & styles - but before making visible (if hidden) + // if o.size is auto or not valid, then MEASURE the pane and use that as its 'size' + size = s.size = _parseSize(pane, o.size); + minSize = _parseSize(pane,o.minSize) || 1; + maxSize = _parseSize(pane,o.maxSize) || 100000; + if (size > 0) size = max(min(size, maxSize), minSize); + + // state for border-panes + s.isClosed = false; // true = pane is closed + s.isSliding = false; // true = pane is currently open by 'sliding' over adjacent panes + s.isResizing= false; // true = pane is in process of being resized + s.isHidden = false; // true = pane is hidden - no spacing, resizer or toggler is visible! + + // array for 'pin buttons' whose classNames are auto-updated on pane-open/-close + if (!s.pins) s.pins = []; + } + // states common to ALL panes + s.tagName = $P[0].tagName; + s.edge = pane; // useful if pane is (or about to be) 'swapped' - easy find out where it is (or is going) + s.noRoom = false; // true = pane 'automatically' hidden due to insufficient room - will unhide automatically + s.isVisible = true; // false = pane is invisible - closed OR hidden - simplify logic + + // set css-position to account for container borders & padding + switch (pane) { + case "north": CSS.top = sC.insetTop; + CSS.left = sC.insetLeft; + CSS.right = sC.insetRight; + break; + case "south": CSS.bottom = sC.insetBottom; + CSS.left = sC.insetLeft; + CSS.right = sC.insetRight; + break; + case "west": CSS.left = sC.insetLeft; // top, bottom & height set by sizeMidPanes() + break; + case "east": CSS.right = sC.insetRight; // ditto + break; + case "center": // top, left, width & height set by sizeMidPanes() + } + + if (dir === "horz") // north or south pane + CSS.height = cssH($P, size); + else if (dir === "vert") // east or west pane + CSS.width = cssW($P, size); + //else if (isCenter) {} + + $P.css(CSS); // apply size -- top, bottom & height will be set by sizeMidPanes + if (dir != "horz") sizeMidPanes(pane, true); // true = skipCallback + + // close or hide the pane if specified in settings + if (o.initClosed && o.closable && !o.initHidden) + close(pane, true, true); // true, true = force, noAnimation + else if (o.initHidden || o.initClosed) + hide(pane); // will be completely invisible - no resizer or spacing + else if (!s.noRoom) + // make the pane visible - in case was initially hidden + $P.css("display","block"); + // ELSE setAsOpen() - called later by initHandles() + + // RESET visibility now - pane will appear IF display:block + $P.css("visibility","visible"); + + // check option for auto-handling of pop-ups & drop-downs + if (o.showOverflowOnHover) + $P.hover( allowOverflow, resetOverflow ); + + // if manually adding a pane AFTER layout initialization, then... + if (state.initialized) { + initHandles( pane ); + initHotkeys( pane ); + resizeAll(); // will sizeContent if pane is visible + if (s.isVisible) { // pane is OPEN + if (o.triggerEventsOnLoad) + _runCallbacks("onresize_end", pane); + else // automatic if onresize called, otherwise call it specifically + // resize child - IF inner-layout already exists (created before this layout) + resizeChildLayout(pane); // a previously existing childLayout + } + if (o.initChildLayout && o.childOptions) + createChildLayout(pane); + } + } + + /** + * Initialize module objects, styling, size and position for all resize bars and toggler buttons + * + * @see _create() + * @param {string=} [panes=""] The edge(s) to process + */ +, initHandles = function (panes) { + panes = panes ? panes.split(",") : _c.borderPanes; + + // create toggler DIVs for each pane, and set object pointers for them, eg: $R.north = north toggler DIV + $.each(panes, function (i, pane) { + var $P = $Ps[pane]; + $Rs[pane] = false; // INIT + $Ts[pane] = false; + if (!$P) return; // pane does not exist - skip + + var + o = options[pane] + , s = state[pane] + , c = _c[pane] + , rClass = o.resizerClass + , tClass = o.togglerClass + , side = c.side.toLowerCase() + , spacing = (s.isVisible ? o.spacing_open : o.spacing_closed) + , _pane = "-"+ pane // used for classNames + , _state = (s.isVisible ? "-open" : "-closed") // used for classNames + , I = Instance[pane] + // INIT RESIZER BAR + , $R = I.resizer = $Rs[pane] = $("
      ") + // INIT TOGGLER BUTTON + , $T = I.toggler = (o.closable ? $Ts[pane] = $("
      ") : false) + ; + + //if (s.isVisible && o.resizable) ... handled by initResizable + if (!s.isVisible && o.slidable) + $R.attr("title", o.sliderTip).css("cursor", o.sliderCursor); + + $R // if paneSelector is an ID, then create a matching ID for the resizer, eg: "#paneLeft" => "paneLeft-resizer" + .attr("id", (o.paneSelector.substr(0,1)=="#" ? o.paneSelector.substr(1) + "-resizer" : "")) + .data({ + parentLayout: Instance + , layoutPane: Instance[pane] // NEW pointer to pane-alias-object + , layoutEdge: pane + , layoutRole: "resizer" + }) + .css(_c.resizers.cssReq).css("zIndex", options.zIndexes.resizer_normal) + .css(o.applyDemoStyles ? _c.resizers.cssDemo : {}) // add demo styles + .addClass(rClass +" "+ rClass+_pane) + .hover(addHover, removeHover) // ALWAYS add hover-classes, even if resizing is not enabled - handle with CSS instead + .hover(onResizerEnter, onResizerLeave) // ALWAYS NEED resizer.mouseleave to balance toggler.mouseenter + .appendTo($N) // append DIV to container + ; + + if ($T) { + $T // if paneSelector is an ID, then create a matching ID for the resizer, eg: "#paneLeft" => "#paneLeft-toggler" + .attr("id", (o.paneSelector.substr(0,1)=="#" ? o.paneSelector.substr(1) + "-toggler" : "")) + .data({ + parentLayout: Instance + , layoutPane: Instance[pane] // NEW pointer to pane-alias-object + , layoutEdge: pane + , layoutRole: "toggler" + }) + .css(_c.togglers.cssReq) // add base/required styles + .css(o.applyDemoStyles ? _c.togglers.cssDemo : {}) // add demo styles + .addClass(tClass +" "+ tClass+_pane) + .hover(addHover, removeHover) // ALWAYS add hover-classes, even if toggling is not enabled - handle with CSS instead + .bind("mouseenter", onResizerEnter) // NEED toggler.mouseenter because mouseenter MAY NOT fire on resizer + .appendTo($R) // append SPAN to resizer DIV + ; + // ADD INNER-SPANS TO TOGGLER + if (o.togglerContent_open) // ui-layout-open + $(""+ o.togglerContent_open +"") + .data({ + layoutEdge: pane + , layoutRole: "togglerContent" + }) + .data("layoutRole", "togglerContent") + .data("layoutEdge", pane) + .addClass("content content-open") + .css("display","none") + .appendTo( $T ) + //.hover( addHover, removeHover ) // use ui-layout-toggler-west-hover .content-open instead! + ; + if (o.togglerContent_closed) // ui-layout-closed + $(""+ o.togglerContent_closed +"") + .data({ + layoutEdge: pane + , layoutRole: "togglerContent" + }) + .addClass("content content-closed") + .css("display","none") + .appendTo( $T ) + //.hover( addHover, removeHover ) // use ui-layout-toggler-west-hover .content-closed instead! + ; + // ADD TOGGLER.click/.hover + enableClosable(pane); + } + + // add Draggable events + initResizable(pane); + + // ADD CLASSNAMES & SLIDE-BINDINGS - eg: class="resizer resizer-west resizer-open" + if (s.isVisible) + setAsOpen(pane); // onOpen will be called, but NOT onResize + else { + setAsClosed(pane); // onClose will be called + bindStartSlidingEvent(pane, true); // will enable events IF option is set + } + + }); + + // SET ALL HANDLE DIMENSIONS + sizeHandles(); + } + + + /** + * Initialize scrolling ui-layout-content div - if exists + * + * @see initPane() - or externally after an Ajax injection + * @param {string} [pane] The pane to process + * @param {boolean=} [resize=true] Size content after init + */ +, initContent = function (pane, resize) { + if (!isInitialized()) return; + var + o = options[pane] + , sel = o.contentSelector + , I = Instance[pane] + , $P = $Ps[pane] + , $C + ; + if (sel) $C = I.content = $Cs[pane] = (o.findNestedContent) + ? $P.find(sel).eq(0) // match 1-element only + : $P.children(sel).eq(0) + ; + if ($C && $C.length) { + $C.data("layoutRole", "content"); + // SAVE original Pane CSS + if (!$C.data("layoutCSS")) + $C.data("layoutCSS", elCSS($C, "height")); + $C.css( _c.content.cssReq ); + if (o.applyDemoStyles) { + $C.css( _c.content.cssDemo ); // add padding & overflow: auto to content-div + $P.css( _c.content.cssDemoPane ); // REMOVE padding/scrolling from pane + } + state[pane].content = {}; // init content state + if (resize !== false) sizeContent(pane); + // sizeContent() is called AFTER init of all elements + } + else + I.content = $Cs[pane] = false; + } + + + /** + * Add resize-bars to all panes that specify it in options + * -dependancy: $.fn.resizable - will skip if not found + * + * @see _create() + * @param {string=} [panes=""] The edge(s) to process + */ +, initResizable = function (panes) { + var draggingAvailable = $.layout.plugins.draggable + , side // set in start() + ; + panes = panes ? panes.split(",") : _c.borderPanes; + + $.each(panes, function (idx, pane) { + var o = options[pane]; + if (!draggingAvailable || !$Ps[pane] || !o.resizable) { + o.resizable = false; + return true; // skip to next + } + + var s = state[pane] + , z = options.zIndexes + , c = _c[pane] + , side = c.dir=="horz" ? "top" : "left" + , opEdge = _c.oppositeEdge[pane] + , masks = pane +",center,"+ opEdge + (c.dir=="horz" ? ",west,east" : "") + , $P = $Ps[pane] + , $R = $Rs[pane] + , base = o.resizerClass + , lastPos = 0 // used when live-resizing + , r, live // set in start because may change + // 'drag' classes are applied to the ORIGINAL resizer-bar while dragging is in process + , resizerClass = base+"-drag" // resizer-drag + , resizerPaneClass = base+"-"+pane+"-drag" // resizer-north-drag + // 'helper' class is applied to the CLONED resizer-bar while it is being dragged + , helperClass = base+"-dragging" // resizer-dragging + , helperPaneClass = base+"-"+pane+"-dragging" // resizer-north-dragging + , helperLimitClass = base+"-dragging-limit" // resizer-drag + , helperPaneLimitClass = base+"-"+pane+"-dragging-limit" // resizer-north-drag + , helperClassesSet = false // logic var + ; + + if (!s.isClosed) + $R.attr("title", o.resizerTip) + .css("cursor", o.resizerCursor); // n-resize, s-resize, etc + + $R.draggable({ + containment: $N[0] // limit resizing to layout container + , axis: (c.dir=="horz" ? "y" : "x") // limit resizing to horz or vert axis + , delay: 0 + , distance: 1 + , grid: o.resizingGrid + // basic format for helper - style it using class: .ui-draggable-dragging + , helper: "clone" + , opacity: o.resizerDragOpacity + , addClasses: false // avoid ui-state-disabled class when disabled + //, iframeFix: o.draggableIframeFix // TODO: consider using when bug is fixed + , zIndex: z.resizer_drag + + , start: function (e, ui) { + // REFRESH options & state pointers in case we used swapPanes + o = options[pane]; + s = state[pane]; + // re-read options + live = o.livePaneResizing; + + // ondrag_start callback - will CANCEL hide if returns false + // TODO: dragging CANNOT be cancelled like this, so see if there is a way? + if (false === _runCallbacks("ondrag_start", pane)) return false; + + s.isResizing = true; // prevent pane from closing while resizing + timer.clear(pane+"_closeSlider"); // just in case already triggered + + // SET RESIZER LIMITS - used in drag() + setSizeLimits(pane); // update pane/resizer state + r = s.resizerPosition; + lastPos = ui.position[ side ] + + $R.addClass( resizerClass +" "+ resizerPaneClass ); // add drag classes + helperClassesSet = false; // reset logic var - see drag() + + // DISABLE TEXT SELECTION (probably already done by resizer.mouseOver) + $('body').disableSelection(); + + // MASK PANES CONTAINING IFRAMES, APPLETS OR OTHER TROUBLESOME ELEMENTS + showMasks( masks ); + } + + , drag: function (e, ui) { + if (!helperClassesSet) { // can only add classes after clone has been added to the DOM + //$(".ui-draggable-dragging") + ui.helper + .addClass( helperClass +" "+ helperPaneClass ) // add helper classes + .css({ right: "auto", bottom: "auto" }) // fix dir="rtl" issue + .children().css("visibility","hidden") // hide toggler inside dragged resizer-bar + ; + helperClassesSet = true; + // draggable bug!? RE-SET zIndex to prevent E/W resize-bar showing through N/S pane! + if (s.isSliding) $Ps[pane].css("zIndex", z.pane_sliding); + } + // CONTAIN RESIZER-BAR TO RESIZING LIMITS + var limit = 0; + if (ui.position[side] < r.min) { + ui.position[side] = r.min; + limit = -1; + } + else if (ui.position[side] > r.max) { + ui.position[side] = r.max; + limit = 1; + } + // ADD/REMOVE dragging-limit CLASS + if (limit) { + ui.helper.addClass( helperLimitClass +" "+ helperPaneLimitClass ); // at dragging-limit + window.defaultStatus = (limit>0 && pane.match(/north|west/)) || (limit<0 && pane.match(/south|east/)) ? lang.maxSizeWarning : lang.minSizeWarning; + } + else { + ui.helper.removeClass( helperLimitClass +" "+ helperPaneLimitClass ); // not at dragging-limit + window.defaultStatus = ""; + } + // DYNAMICALLY RESIZE PANES IF OPTION ENABLED + // won't trigger unless resizer has actually moved! + if (live && Math.abs(ui.position[side] - lastPos) >= o.liveResizingTolerance) { + lastPos = ui.position[side]; + resizePanes(e, ui, pane) + } + } + + , stop: function (e, ui) { + $('body').enableSelection(); // RE-ENABLE TEXT SELECTION + window.defaultStatus = ""; // clear 'resizing limit' message from statusbar + $R.removeClass( resizerClass +" "+ resizerPaneClass ); // remove drag classes from Resizer + s.isResizing = false; + resizePanes(e, ui, pane, true, masks); // true = resizingDone + } + + }); + }); + + /** + * resizePanes + * + * Sub-routine called from stop() - and drag() if livePaneResizing + * + * @param {!Object} evt + * @param {!Object} ui + * @param {string} pane + * @param {boolean=} [resizingDone=false] + */ + var resizePanes = function (evt, ui, pane, resizingDone, masks) { + var dragPos = ui.position + , c = _c[pane] + , o = options[pane] + , s = state[pane] + , resizerPos + ; + switch (pane) { + case "north": resizerPos = dragPos.top; break; + case "west": resizerPos = dragPos.left; break; + case "south": resizerPos = sC.offsetHeight - dragPos.top - o.spacing_open; break; + case "east": resizerPos = sC.offsetWidth - dragPos.left - o.spacing_open; break; + }; + // remove container margin from resizer position to get the pane size + var newSize = resizerPos - sC["inset"+ c.side]; + + // Disable OR Resize Mask(s) created in drag.start + if (!resizingDone) { + // ensure we meet liveResizingTolerance criteria + if (Math.abs(newSize - s.size) < o.liveResizingTolerance) + return; // SKIP resize this time + // resize the pane + manualSizePane(pane, newSize, false, true); // true = noAnimation + sizeMasks(); // resize all visible masks + } + else { // resizingDone + // ondrag_end callback + if (false !== _runCallbacks("ondrag_end", pane)) + manualSizePane(pane, newSize, false, true); // true = noAnimation + hideMasks(); // hide all masks, which include panes with 'content/iframe-masks' + if (s.isSliding && masks) // RE-SHOW only 'object-masks' so objects won't show through sliding pane + showMasks( masks, true ); // true = onlyForObjects + } + }; + } + + /** + * sizeMask + * + * Needed to overlay a DIV over an IFRAME-pane because mask CANNOT be *inside* the pane + * Called when mask created, and during livePaneResizing + */ +, sizeMask = function () { + var $M = $(this) + , pane = $M.data("layoutMask") // eg: "west" + , s = state[pane] + ; + // only masks over an IFRAME-pane need manual resizing + if (s.tagName == "IFRAME" && s.isVisible) // no need to mask closed/hidden panes + $M.css({ + top: s.offsetTop + , left: s.offsetLeft + , width: s.outerWidth + , height: s.outerHeight + }); + /* ALT Method... + var $P = $Ps[pane]; + $M.css( $P.position() ).css({ width: $P[0].offsetWidth, height: $P[0].offsetHeight }); + */ + } +, sizeMasks = function () { + $Ms.each( sizeMask ); // resize all 'visible' masks + } + +, showMasks = function (panes, onlyForObjects) { + var a = panes ? panes.split(",") : $.layout.config.allPanes + , z = options.zIndexes + , o, s; + $.each(a, function(i,p){ + s = state[p]; + o = options[p]; + if (s.isVisible && ( (!onlyForObjects && o.maskContents) || o.maskObjects )) { + getMasks(p).each(function(){ + sizeMask.call(this); + this.style.zIndex = s.isSliding ? z.pane_sliding+1 : z.pane_normal+1 + this.style.display = "block"; + }); + } + }); + } + +, hideMasks = function () { + // ensure no pane is resizing - could be a timing issue + var skip; + $.each( $.layout.config.borderPanes, function(i,p){ + if (state[p].isResizing) { + skip = true; + return false; // BREAK + } + }); + if (!skip) + $Ms.hide(); // hide ALL masks + } + +, getMasks = function (pane) { + var $Masks = $([]) + , $M, i = 0, c = $Ms.length + ; + for (; i CSS + if (sC.tagName === "BODY" && ($N = $("html")).data(css)) // RESET CSS + $N.css( $N.data(css) ).removeData(css); + + // trigger plugins for this layout, if there are any + runPluginCallbacks( Instance, $.layout.onDestroy ); + + // trigger state-management and onunload callback + unload(); + + // clear the Instance of everything except for container & options (so could recreate) + // RE-CREATE: myLayout = myLayout.container.layout( myLayout.options ); + for (n in Instance) + if (!n.match(/^(container|options)$/)) delete Instance[ n ]; + // add a 'destroyed' flag to make it easy to check + Instance.destroyed = true; + + // if this is a child layout, CLEAR the child-pointer in the parent + /* for now the pointer REMAINS, but with only container, options and destroyed keys + if (parentPane) { + var layout = parentPane.pane.data("parentLayout"); + parentPane.child = layout.children[ parentPane.name ] = null; + } + */ + + return Instance; // for coding convenience + } + + /** + * Remove a pane from the layout - subroutine of destroy() + * + * @see destroy() + * @param {string} pane The pane to process + * @param {boolean=} [remove=false] Remove the DOM element? + * @param {boolean=} [skipResize=false] Skip calling resizeAll()? + */ +, removePane = function (evt_or_pane, remove, skipResize, destroyChild) { + if (!isInitialized()) return; + var pane = evtPane.call(this, evt_or_pane) + , $P = $Ps[pane] + , $C = $Cs[pane] + , $R = $Rs[pane] + , $T = $Ts[pane] + ; + //alert( '$P.length = '+ $P.length ); + // NOTE: elements can still exist even after remove() + // so check for missing data(), which is cleared by removed() + if ($P && $.isEmptyObject( $P.data() )) $P = false; + if ($C && $.isEmptyObject( $C.data() )) $C = false; + if ($R && $.isEmptyObject( $R.data() )) $R = false; + if ($T && $.isEmptyObject( $T.data() )) $T = false; + + if ($P) $P.stop(true, true); + + // check for a child layout + var o = options[pane] + , s = state[pane] + , d = "layout" + , css = "layoutCSS" + , child = children[pane] || ($P ? $P.data(d) : 0) || ($C ? $C.data(d) : 0) || null + , destroy = destroyChild !== undefined ? destroyChild : o.destroyChildLayout + ; + + // FIRST destroy the child-layout(s) + if (destroy && child && !child.destroyed) { + child.destroy(true); // tell child-layout to destroy ALL its child-layouts too + if (child.destroyed) // destroy was successful + child = null; // clear pointer for logic below + } + + if ($P && remove && !child) + $P.remove(); + else if ($P && $P[0]) { + // create list of ALL pane-classes that need to be removed + var root = o.paneClass // default="ui-layout-pane" + , pRoot = root +"-"+ pane // eg: "ui-layout-pane-west" + , _open = "-open" + , _sliding= "-sliding" + , _closed = "-closed" + , classes = [ root, root+_open, root+_closed, root+_sliding, // generic classes + pRoot, pRoot+_open, pRoot+_closed, pRoot+_sliding ] // pane-specific classes + ; + $.merge(classes, getHoverClasses($P, true)); // ADD hover-classes + // remove all Layout classes from pane-element + $P .removeClass( classes.join(" ") ) // remove ALL pane-classes + .removeData("parentLayout") + .removeData("layoutPane") + .removeData("layoutRole") + .removeData("layoutEdge") + .removeData("autoHidden") // in case set + .unbind("."+ sID) // remove ALL Layout events + // TODO: remove these extra unbind commands when jQuery is fixed + //.unbind("mouseenter"+ sID) + //.unbind("mouseleave"+ sID) + ; + // do NOT reset CSS if this pane/content is STILL the container of a nested layout! + // the nested layout will reset its 'container' CSS when/if it is destroyed + if ($C && $C.data(d)) { + // a content-div may not have a specific width, so give it one to contain the Layout + $C.width( $C.width() ); + child.resizeAll(); // now resize the Layout + } + else if ($C) + $C.css( $C.data(css) ).removeData(css).removeData("layoutRole"); + // remove pane AFTER content in case there was a nested layout + if (!$P.data(d)) + $P.css( $P.data(css) ).removeData(css); + } + + // REMOVE pane resizer and toggler elements + if ($T) $T.remove(); + if ($R) $R.remove(); + + // CLEAR all pointers and state data + Instance[pane] = $Ps[pane] = $Cs[pane] = $Rs[pane] = $Ts[pane] = children[pane] = false; + s = { removed: true }; + + if (!skipResize) + resizeAll(); + } + + +/* + * ########################### + * ACTION METHODS + * ########################### + */ + +, _hidePane = function (pane) { + var $P = $Ps[pane] + , o = options[pane] + , s = $P[0].style + ; + if (o.useOffscreenClose) { + if (!$P.data(_c.offscreenReset)) + $P.data(_c.offscreenReset, { left: s.left, right: s.right }); + $P.css( _c.offscreenCSS ); + } + else + $P.hide().removeData(_c.offscreenReset); + } + +, _showPane = function (pane) { + var $P = $Ps[pane] + , o = options[pane] + , off = _c.offscreenCSS + , old = $P.data(_c.offscreenReset) + , s = $P[0].style + ; + $P .show() // ALWAYS show, just in case + .removeData(_c.offscreenReset); + if (o.useOffscreenClose && old) { + if (s.left == off.left) + s.left = old.left; + if (s.right == off.right) + s.right = old.right; + } + } + + + /** + * Completely 'hides' a pane, including its spacing - as if it does not exist + * The pane is not actually 'removed' from the source, so can use 'show' to un-hide it + * + * @param {string} pane The pane being hidden, ie: north, south, east, or west + * @param {boolean=} [noAnimation=false] + */ +, hide = function (evt_or_pane, noAnimation) { + if (!isInitialized()) return; + var pane = evtPane.call(this, evt_or_pane) + , o = options[pane] + , s = state[pane] + , $P = $Ps[pane] + , $R = $Rs[pane] + ; + if (!$P || s.isHidden) return; // pane does not exist OR is already hidden + + // onhide_start callback - will CANCEL hide if returns false + if (state.initialized && false === _runCallbacks("onhide_start", pane)) return; + + s.isSliding = false; // just in case + + // now hide the elements + if ($R) $R.hide(); // hide resizer-bar + if (!state.initialized || s.isClosed) { + s.isClosed = true; // to trigger open-animation on show() + s.isHidden = true; + s.isVisible = false; + if (!state.initialized) + _hidePane(pane); // no animation when loading page + sizeMidPanes(_c[pane].dir === "horz" ? "" : "center"); + if (state.initialized || o.triggerEventsOnLoad) + _runCallbacks("onhide_end", pane); + } + else { + s.isHiding = true; // used by onclose + close(pane, false, noAnimation); // adjust all panes to fit + } + } + + /** + * Show a hidden pane - show as 'closed' by default unless openPane = true + * + * @param {string} pane The pane being opened, ie: north, south, east, or west + * @param {boolean=} [openPane=false] + * @param {boolean=} [noAnimation=false] + * @param {boolean=} [noAlert=false] + */ +, show = function (evt_or_pane, openPane, noAnimation, noAlert) { + if (!isInitialized()) return; + var pane = evtPane.call(this, evt_or_pane) + , o = options[pane] + , s = state[pane] + , $P = $Ps[pane] + , $R = $Rs[pane] + ; + if (!$P || !s.isHidden) return; // pane does not exist OR is not hidden + + // onshow_start callback - will CANCEL show if returns false + if (false === _runCallbacks("onshow_start", pane)) return; + + s.isSliding = false; // just in case + s.isShowing = true; // used by onopen/onclose + //s.isHidden = false; - will be set by open/close - if not cancelled + + // now show the elements + //if ($R) $R.show(); - will be shown by open/close + if (openPane === false) + close(pane, true); // true = force + else + open(pane, false, noAnimation, noAlert); // adjust all panes to fit + } + + + /** + * Toggles a pane open/closed by calling either open or close + * + * @param {string} pane The pane being toggled, ie: north, south, east, or west + * @param {boolean=} [slide=false] + */ +, toggle = function (evt_or_pane, slide) { + if (!isInitialized()) return; + var evt = evtObj(evt_or_pane) + , pane = evtPane.call(this, evt_or_pane) + , s = state[pane] + ; + if (evt) // called from to $R.dblclick OR triggerPaneEvent + evt.stopImmediatePropagation(); + if (s.isHidden) + show(pane); // will call 'open' after unhiding it + else if (s.isClosed) + open(pane, !!slide); + else + close(pane); + } + + + /** + * Utility method used during init or other auto-processes + * + * @param {string} pane The pane being closed + * @param {boolean=} [setHandles=false] + */ +, _closePane = function (pane, setHandles) { + var + $P = $Ps[pane] + , s = state[pane] + ; + _hidePane(pane); + s.isClosed = true; + s.isVisible = false; + // UNUSED: if (setHandles) setAsClosed(pane, true); // true = force + } + + /** + * Close the specified pane (animation optional), and resize all other panes as needed + * + * @param {string} pane The pane being closed, ie: north, south, east, or west + * @param {boolean=} [force=false] + * @param {boolean=} [noAnimation=false] + * @param {boolean=} [skipCallback=false] + */ +, close = function (evt_or_pane, force, noAnimation, skipCallback) { + var pane = evtPane.call(this, evt_or_pane); + // if pane has been initialized, but NOT the complete layout, close pane instantly + if (!state.initialized && $Ps[pane]) { + _closePane(pane); // INIT pane as closed + return; + } + if (!isInitialized()) return; + + var + $P = $Ps[pane] + , $R = $Rs[pane] + , $T = $Ts[pane] + , o = options[pane] + , s = state[pane] + , c = _c[pane] + , doFX, isShowing, isHiding, wasSliding; + + // QUEUE in case another action/animation is in progress + $N.queue(function( queueNext ){ + + if ( !$P + || (!o.closable && !s.isShowing && !s.isHiding) // invalid request // (!o.resizable && !o.closable) ??? + || (!force && s.isClosed && !s.isShowing) // already closed + ) return queueNext(); + + // onclose_start callback - will CANCEL hide if returns false + // SKIP if just 'showing' a hidden pane as 'closed' + var abort = !s.isShowing && false === _runCallbacks("onclose_start", pane); + + // transfer logic vars to temp vars + isShowing = s.isShowing; + isHiding = s.isHiding; + wasSliding = s.isSliding; + // now clear the logic vars (REQUIRED before aborting) + delete s.isShowing; + delete s.isHiding; + + if (abort) return queueNext(); + + doFX = !noAnimation && !s.isClosed && (o.fxName_close != "none"); + s.isMoving = true; + s.isClosed = true; + s.isVisible = false; + // update isHidden BEFORE sizing panes + if (isHiding) s.isHidden = true; + else if (isShowing) s.isHidden = false; + + if (s.isSliding) // pane is being closed, so UNBIND trigger events + bindStopSlidingEvents(pane, false); // will set isSliding=false + else // resize panes adjacent to this one + sizeMidPanes(_c[pane].dir === "horz" ? "" : "center", false); // false = NOT skipCallback + + // if this pane has a resizer bar, move it NOW - before animation + setAsClosed(pane); + + // CLOSE THE PANE + if (doFX) { // animate the close + // mask panes with objects + var masks = "center"+ (c.dir=="horz" ? ",west,east" : ""); + showMasks( masks, true ); // true = ONLY mask panes with maskObjects=true + lockPaneForFX(pane, true); // need to set left/top so animation will work + $P.hide( o.fxName_close, o.fxSettings_close, o.fxSpeed_close, function () { + lockPaneForFX(pane, false); // undo + if (s.isClosed) close_2(); + queueNext(); + }); + } + else { // hide the pane without animation + _hidePane(pane); + close_2(); + queueNext(); + }; + }); + + // SUBROUTINE + function close_2 () { + s.isMoving = false; + bindStartSlidingEvent(pane, true); // will enable if o.slidable = true + + // if opposite-pane was autoClosed, see if it can be autoOpened now + var altPane = _c.oppositeEdge[pane]; + if (state[ altPane ].noRoom) { + setSizeLimits( altPane ); + makePaneFit( altPane ); + } + + // hide any masks shown while closing + hideMasks(); + + if (!skipCallback && (state.initialized || o.triggerEventsOnLoad)) { + // onclose callback - UNLESS just 'showing' a hidden pane as 'closed' + if (!isShowing) _runCallbacks("onclose_end", pane); + // onhide OR onshow callback + if (isShowing) _runCallbacks("onshow_end", pane); + if (isHiding) _runCallbacks("onhide_end", pane); + } + } + } + + /** + * @param {string} pane The pane just closed, ie: north, south, east, or west + */ +, setAsClosed = function (pane) { + var + $P = $Ps[pane] + , $R = $Rs[pane] + , $T = $Ts[pane] + , o = options[pane] + , s = state[pane] + , side = _c[pane].side.toLowerCase() + , inset = "inset"+ _c[pane].side + , rClass = o.resizerClass + , tClass = o.togglerClass + , _pane = "-"+ pane // used for classNames + , _open = "-open" + , _sliding= "-sliding" + , _closed = "-closed" + ; + $R + .css(side, sC[inset]) // move the resizer + .removeClass( rClass+_open +" "+ rClass+_pane+_open ) + .removeClass( rClass+_sliding +" "+ rClass+_pane+_sliding ) + .addClass( rClass+_closed +" "+ rClass+_pane+_closed ) + .unbind("dblclick."+ sID) + ; + // DISABLE 'resizing' when closed - do this BEFORE bindStartSlidingEvent? + if (o.resizable && $.layout.plugins.draggable) + $R + .draggable("disable") + .removeClass("ui-state-disabled") // do NOT apply disabled styling - not suitable here + .css("cursor", "default") + .attr("title","") + ; + + // if pane has a toggler button, adjust that too + if ($T) { + $T + .removeClass( tClass+_open +" "+ tClass+_pane+_open ) + .addClass( tClass+_closed +" "+ tClass+_pane+_closed ) + .attr("title", o.togglerTip_closed) // may be blank + ; + // toggler-content - if exists + $T.children(".content-open").hide(); + $T.children(".content-closed").css("display","block"); + } + + // sync any 'pin buttons' + syncPinBtns(pane, false); + + if (state.initialized) { + // resize 'length' and position togglers for adjacent panes + sizeHandles(); + } + } + + /** + * Open the specified pane (animation optional), and resize all other panes as needed + * + * @param {string} pane The pane being opened, ie: north, south, east, or west + * @param {boolean=} [slide=false] + * @param {boolean=} [noAnimation=false] + * @param {boolean=} [noAlert=false] + */ +, open = function (evt_or_pane, slide, noAnimation, noAlert) { + if (!isInitialized()) return; + var pane = evtPane.call(this, evt_or_pane) + , $P = $Ps[pane] + , $R = $Rs[pane] + , $T = $Ts[pane] + , o = options[pane] + , s = state[pane] + , c = _c[pane] + , doFX, isShowing + ; + // QUEUE in case another action/animation is in progress + $N.queue(function( queueNext ){ + + if ( !$P + || (!o.resizable && !o.closable && !s.isShowing) // invalid request + || (s.isVisible && !s.isSliding) // already open + ) return queueNext(); + + // pane can ALSO be unhidden by just calling show(), so handle this scenario + if (s.isHidden && !s.isShowing) { + queueNext(); // call before show() because it needs the queue free + show(pane, true); + return; + } + + if (o.autoResize && s.size != o.size) // resize pane to original size set in options + sizePane(pane, o.size, true, true, true); // true=skipCallback/forceResize/noAnimation + else + // make sure there is enough space available to open the pane + setSizeLimits(pane, slide); + + // onopen_start callback - will CANCEL open if returns false + var cbReturn = _runCallbacks("onopen_start", pane); + + if (cbReturn === "abort") + return queueNext(); + + // update pane-state again in case options were changed in onopen_start + if (cbReturn !== "NC") // NC = "No Callback" + setSizeLimits(pane, slide); + + if (s.minSize > s.maxSize) { // INSUFFICIENT ROOM FOR PANE TO OPEN! + syncPinBtns(pane, false); // make sure pin-buttons are reset + if (!noAlert && o.noRoomToOpenTip) + alert(o.noRoomToOpenTip); + return queueNext(); // ABORT + } + + if (slide) // START Sliding - will set isSliding=true + bindStopSlidingEvents(pane, true); // BIND trigger events to close sliding-pane + else if (s.isSliding) // PIN PANE (stop sliding) - open pane 'normally' instead + bindStopSlidingEvents(pane, false); // UNBIND trigger events - will set isSliding=false + else if (o.slidable) + bindStartSlidingEvent(pane, false); // UNBIND trigger events + + s.noRoom = false; // will be reset by makePaneFit if 'noRoom' + makePaneFit(pane); + + // transfer logic var to temp var + isShowing = s.isShowing; + // now clear the logic var + delete s.isShowing; + + doFX = !noAnimation && s.isClosed && (o.fxName_open != "none"); + s.isMoving = true; + s.isVisible = true; + s.isClosed = false; + // update isHidden BEFORE sizing panes - WHY??? Old? + if (isShowing) s.isHidden = false; + + if (doFX) { // ANIMATE + // mask panes with objects + var masks = "center"+ (c.dir=="horz" ? ",west,east" : ""); + if (s.isSliding) masks += ","+ _c.oppositeEdge[pane]; + showMasks( masks, true ); // true = ONLY mask panes with maskObjects=true + lockPaneForFX(pane, true); // need to set left/top so animation will work + $P.show( o.fxName_open, o.fxSettings_open, o.fxSpeed_open, function() { + lockPaneForFX(pane, false); // undo + if (s.isVisible) open_2(); // continue + queueNext(); + }); + } + else { // no animation + _showPane(pane);// just show pane and... + open_2(); // continue + queueNext(); + }; + }); + + // SUBROUTINE + function open_2 () { + s.isMoving = false; + + // cure iframe display issues + _fixIframe(pane); + + // NOTE: if isSliding, then other panes are NOT 'resized' + if (!s.isSliding) { // resize all panes adjacent to this one + hideMasks(); // remove any masks shown while opening + sizeMidPanes(_c[pane].dir=="vert" ? "center" : "", false); // false = NOT skipCallback + } + + // set classes, position handles and execute callbacks... + setAsOpen(pane); + }; + + } + + /** + * @param {string} pane The pane just opened, ie: north, south, east, or west + * @param {boolean=} [skipCallback=false] + */ +, setAsOpen = function (pane, skipCallback) { + var + $P = $Ps[pane] + , $R = $Rs[pane] + , $T = $Ts[pane] + , o = options[pane] + , s = state[pane] + , side = _c[pane].side.toLowerCase() + , inset = "inset"+ _c[pane].side + , rClass = o.resizerClass + , tClass = o.togglerClass + , _pane = "-"+ pane // used for classNames + , _open = "-open" + , _closed = "-closed" + , _sliding= "-sliding" + ; + $R + .css(side, sC[inset] + getPaneSize(pane)) // move the resizer + .removeClass( rClass+_closed +" "+ rClass+_pane+_closed ) + .addClass( rClass+_open +" "+ rClass+_pane+_open ) + ; + if (s.isSliding) + $R.addClass( rClass+_sliding +" "+ rClass+_pane+_sliding ) + else // in case 'was sliding' + $R.removeClass( rClass+_sliding +" "+ rClass+_pane+_sliding ) + + if (o.resizerDblClickToggle) + $R.bind("dblclick", toggle ); + removeHover( 0, $R ); // remove hover classes + if (o.resizable && $.layout.plugins.draggable) + $R .draggable("enable") + .css("cursor", o.resizerCursor) + .attr("title", o.resizerTip); + else if (!s.isSliding) + $R.css("cursor", "default"); // n-resize, s-resize, etc + + // if pane also has a toggler button, adjust that too + if ($T) { + $T .removeClass( tClass+_closed +" "+ tClass+_pane+_closed ) + .addClass( tClass+_open +" "+ tClass+_pane+_open ) + .attr("title", o.togglerTip_open); // may be blank + removeHover( 0, $T ); // remove hover classes + // toggler-content - if exists + $T.children(".content-closed").hide(); + $T.children(".content-open").css("display","block"); + } + + // sync any 'pin buttons' + syncPinBtns(pane, !s.isSliding); + + // update pane-state dimensions - BEFORE resizing content + $.extend(s, elDims($P)); + + if (state.initialized) { + // resize resizer & toggler sizes for all panes + sizeHandles(); + // resize content every time pane opens - to be sure + sizeContent(pane, true); // true = remeasure headers/footers, even if 'pane.isMoving' + } + + if (!skipCallback && (state.initialized || o.triggerEventsOnLoad) && $P.is(":visible")) { + // onopen callback + _runCallbacks("onopen_end", pane); + // onshow callback - TODO: should this be here? + if (s.isShowing) _runCallbacks("onshow_end", pane); + + // ALSO call onresize because layout-size *may* have changed while pane was closed + if (state.initialized) + _runCallbacks("onresize_end", pane); + } + + // TODO: Somehow sizePane("north") is being called after this point??? + } + + + /** + * slideOpen / slideClose / slideToggle + * + * Pass-though methods for sliding + */ +, slideOpen = function (evt_or_pane) { + if (!isInitialized()) return; + var evt = evtObj(evt_or_pane) + , pane = evtPane.call(this, evt_or_pane) + , s = state[pane] + , delay = options[pane].slideDelay_open + ; + // prevent event from triggering on NEW resizer binding created below + if (evt) evt.stopImmediatePropagation(); + + if (s.isClosed && evt && evt.type === "mouseenter" && delay > 0) + // trigger = mouseenter - use a delay + timer.set(pane+"_openSlider", open_NOW, delay); + else + open_NOW(); // will unbind events if is already open + + /** + * SUBROUTINE for timed open + */ + function open_NOW () { + if (!s.isClosed) // skip if no longer closed! + bindStopSlidingEvents(pane, true); // BIND trigger events to close sliding-pane + else if (!s.isMoving) + open(pane, true); // true = slide - open() will handle binding + }; + } + +, slideClose = function (evt_or_pane) { + if (!isInitialized()) return; + var evt = evtObj(evt_or_pane) + , pane = evtPane.call(this, evt_or_pane) + , o = options[pane] + , s = state[pane] + , delay = s.isMoving ? 1000 : 300 // MINIMUM delay - option may override + ; + if (s.isClosed || s.isResizing) + return; // skip if already closed OR in process of resizing + else if (o.slideTrigger_close === "click") + close_NOW(); // close immediately onClick + else if (o.preventQuickSlideClose && s.isMoving) + return; // handle Chrome quick-close on slide-open + else if (o.preventPrematureSlideClose && evt && $.layout.isMouseOverElem(evt, $Ps[pane])) + return; // handle incorrect mouseleave trigger, like when over a SELECT-list in IE + else if (evt) // trigger = mouseleave - use a delay + // 1 sec delay if 'opening', else .3 sec + timer.set(pane+"_closeSlider", close_NOW, max(o.slideDelay_close, delay)); + else // called programically + close_NOW(); + + /** + * SUBROUTINE for timed close + */ + function close_NOW () { + if (s.isClosed) // skip 'close' if already closed! + bindStopSlidingEvents(pane, false); // UNBIND trigger events - TODO: is this needed here? + else if (!s.isMoving) + close(pane); // close will handle unbinding + }; + } + + /** + * @param {string} pane The pane being opened, ie: north, south, east, or west + */ +, slideToggle = function (evt_or_pane) { + var pane = evtPane.call(this, evt_or_pane); + toggle(pane, true); + } + + + /** + * Must set left/top on East/South panes so animation will work properly + * + * @param {string} pane The pane to lock, 'east' or 'south' - any other is ignored! + * @param {boolean} doLock true = set left/top, false = remove + */ +, lockPaneForFX = function (pane, doLock) { + var $P = $Ps[pane] + , s = state[pane] + , o = options[pane] + , z = options.zIndexes + ; + if (doLock) { + $P.css({ zIndex: z.pane_animate }); // overlay all elements during animation + if (pane=="south") + $P.css({ top: sC.insetTop + sC.innerHeight - $P.outerHeight() }); + else if (pane=="east") + $P.css({ left: sC.insetLeft + sC.innerWidth - $P.outerWidth() }); + } + else { // animation DONE - RESET CSS + // TODO: see if this can be deleted. It causes a quick-close when sliding in Chrome + $P.css({ zIndex: (s.isSliding ? z.pane_sliding : z.pane_normal) }); + if (pane=="south") + $P.css({ top: "auto" }); + // if pane is positioned 'off-screen', then DO NOT screw with it! + else if (pane=="east" && !$P.css("left").match(/\-99999/)) + $P.css({ left: "auto" }); + // fix anti-aliasing in IE - only needed for animations that change opacity + if (browser.msie && o.fxOpacityFix && o.fxName_open != "slide" && $P.css("filter") && $P.css("opacity") == 1) + $P[0].style.removeAttribute('filter'); + } + } + + + /** + * Toggle sliding functionality of a specific pane on/off by adding removing 'slide open' trigger + * + * @see open(), close() + * @param {string} pane The pane to enable/disable, 'north', 'south', etc. + * @param {boolean} enable Enable or Disable sliding? + */ +, bindStartSlidingEvent = function (pane, enable) { + var o = options[pane] + , $P = $Ps[pane] + , $R = $Rs[pane] + , evtName = o.slideTrigger_open.toLowerCase() + ; + if (!$R || (enable && !o.slidable)) return; + + // make sure we have a valid event + if (evtName.match(/mouseover/)) + evtName = o.slideTrigger_open = "mouseenter"; + else if (!evtName.match(/click|dblclick|mouseenter/)) + evtName = o.slideTrigger_open = "click"; + + $R + // add or remove event + [enable ? "bind" : "unbind"](evtName +'.'+ sID, slideOpen) + // set the appropriate cursor & title/tip + .css("cursor", enable ? o.sliderCursor : "default") + .attr("title", enable ? o.sliderTip : "") + ; + } + + /** + * Add or remove 'mouseleave' events to 'slide close' when pane is 'sliding' open or closed + * Also increases zIndex when pane is sliding open + * See bindStartSlidingEvent for code to control 'slide open' + * + * @see slideOpen(), slideClose() + * @param {string} pane The pane to process, 'north', 'south', etc. + * @param {boolean} enable Enable or Disable events? + */ +, bindStopSlidingEvents = function (pane, enable) { + var o = options[pane] + , s = state[pane] + , c = _c[pane] + , z = options.zIndexes + , evtName = o.slideTrigger_close.toLowerCase() + , action = (enable ? "bind" : "unbind") + , $P = $Ps[pane] + , $R = $Rs[pane] + ; + s.isSliding = enable; // logic + timer.clear(pane+"_closeSlider"); // just in case + + // remove 'slideOpen' event from resizer + // ALSO will raise the zIndex of the pane & resizer + if (enable) bindStartSlidingEvent(pane, false); + + // RE/SET zIndex - increases when pane is sliding-open, resets to normal when not + $P.css("zIndex", enable ? z.pane_sliding : z.pane_normal); + $R.css("zIndex", enable ? z.pane_sliding+2 : z.resizer_normal); // NOTE: mask = pane_sliding+1 + + // make sure we have a valid event + if (!evtName.match(/click|mouseleave/)) + evtName = o.slideTrigger_close = "mouseleave"; // also catches 'mouseout' + + // add/remove slide triggers + $R[action](evtName, slideClose); // base event on resize + // need extra events for mouseleave + if (evtName === "mouseleave") { + // also close on pane.mouseleave + $P[action]("mouseleave."+ sID, slideClose); + // cancel timer when mouse moves between 'pane' and 'resizer' + $R[action]("mouseenter."+ sID, cancelMouseOut); + $P[action]("mouseenter."+ sID, cancelMouseOut); + } + + if (!enable) + timer.clear(pane+"_closeSlider"); + else if (evtName === "click" && !o.resizable) { + // IF pane is not resizable (which already has a cursor and tip) + // then set the a cursor & title/tip on resizer when sliding + $R.css("cursor", enable ? o.sliderCursor : "default"); + $R.attr("title", enable ? o.togglerTip_open : ""); // use Toggler-tip, eg: "Close Pane" + } + + // SUBROUTINE for mouseleave timer clearing + function cancelMouseOut (evt) { + timer.clear(pane+"_closeSlider"); + evt.stopPropagation(); + } + } + + + /** + * Hides/closes a pane if there is insufficient room - reverses this when there is room again + * MUST have already called setSizeLimits() before calling this method + * + * @param {string} pane The pane being resized + * @param {boolean=} [isOpening=false] Called from onOpen? + * @param {boolean=} [skipCallback=false] Should the onresize callback be run? + * @param {boolean=} [force=false] + */ +, makePaneFit = function (pane, isOpening, skipCallback, force) { + var + o = options[pane] + , s = state[pane] + , c = _c[pane] + , $P = $Ps[pane] + , $R = $Rs[pane] + , isSidePane = c.dir==="vert" + , hasRoom = false + ; + // special handling for center & east/west panes + if (pane === "center" || (isSidePane && s.noVerticalRoom)) { + // see if there is enough room to display the pane + // ERROR: hasRoom = s.minHeight <= s.maxHeight && (isSidePane || s.minWidth <= s.maxWidth); + hasRoom = (s.maxHeight >= 0); + if (hasRoom && s.noRoom) { // previously hidden due to noRoom, so show now + _showPane(pane); + if ($R) $R.show(); + s.isVisible = true; + s.noRoom = false; + if (isSidePane) s.noVerticalRoom = false; + _fixIframe(pane); + } + else if (!hasRoom && !s.noRoom) { // not currently hidden, so hide now + _hidePane(pane); + if ($R) $R.hide(); + s.isVisible = false; + s.noRoom = true; + } + } + + // see if there is enough room to fit the border-pane + if (pane === "center") { + // ignore center in this block + } + else if (s.minSize <= s.maxSize) { // pane CAN fit + hasRoom = true; + if (s.size > s.maxSize) // pane is too big - shrink it + sizePane(pane, s.maxSize, skipCallback, force, true); // true = noAnimation + else if (s.size < s.minSize) // pane is too small - enlarge it + sizePane(pane, s.minSize, skipCallback, force, true); + // need s.isVisible because new pseudoClose method keeps pane visible, but off-screen + else if ($R && s.isVisible && $P.is(":visible")) { + // make sure resizer-bar is positioned correctly + // handles situation where nested layout was 'hidden' when initialized + var side = c.side.toLowerCase() + , pos = s.size + sC["inset"+ c.side] + ; + if ($.layout.cssNum($R, side) != pos) $R.css( side, pos ); + } + + // if was previously hidden due to noRoom, then RESET because NOW there is room + if (s.noRoom) { + // s.noRoom state will be set by open or show + if (s.wasOpen && o.closable) { + if (o.autoReopen) + open(pane, false, true, true); // true = noAnimation, true = noAlert + else // leave the pane closed, so just update state + s.noRoom = false; + } + else + show(pane, s.wasOpen, true, true); // true = noAnimation, true = noAlert + } + } + else { // !hasRoom - pane CANNOT fit + if (!s.noRoom) { // pane not set as noRoom yet, so hide or close it now... + s.noRoom = true; // update state + s.wasOpen = !s.isClosed && !s.isSliding; + if (s.isClosed){} // SKIP + else if (o.closable) // 'close' if possible + close(pane, true, true); // true = force, true = noAnimation + else // 'hide' pane if cannot just be closed + hide(pane, true); // true = noAnimation + } + } + } + + + /** + * sizePane / manualSizePane + * sizePane is called only by internal methods whenever a pane needs to be resized + * manualSizePane is an exposed flow-through method allowing extra code when pane is 'manually resized' + * + * @param {string} pane The pane being resized + * @param {number} size The *desired* new size for this pane - will be validated + * @param {boolean=} [skipCallback=false] Should the onresize callback be run? + * @param {boolean=} [noAnimation=false] + */ +, manualSizePane = function (evt_or_pane, size, skipCallback, noAnimation) { + if (!isInitialized()) return; + var pane = evtPane.call(this, evt_or_pane) + , o = options[pane] + , s = state[pane] + // if resizing callbacks have been delayed and resizing is now DONE, force resizing to complete... + , forceResize = o.livePaneResizing && !s.isResizing + ; + // ANY call to manualSizePane disables autoResize - ie, percentage sizing + o.autoResize = false; + // flow-through... + sizePane(pane, size, skipCallback, forceResize, noAnimation); // will animate resize if option enabled + } + + /** + * @param {string} pane The pane being resized + * @param {number} size The *desired* new size for this pane - will be validated + * @param {boolean=} [skipCallback=false] Should the onresize callback be run? + * @param {boolean=} [force=false] Force resizing even if does not seem necessary + * @param {boolean=} [noAnimation=false] + */ +, sizePane = function (evt_or_pane, size, skipCallback, force, noAnimation) { + if (!isInitialized()) return; + var pane = evtPane.call(this, evt_or_pane) // probably NEVER called from event? + , o = options[pane] + , s = state[pane] + , $P = $Ps[pane] + , $R = $Rs[pane] + , side = _c[pane].side.toLowerCase() + , dimName = _c[pane].sizeType.toLowerCase() + , inset = "inset"+ _c[pane].side + , skipResizeWhileDragging = s.isResizing && !o.triggerEventsDuringLiveResize + , doFX = noAnimation !== true && o.animatePaneSizing + , oldSize, newSize + ; + // QUEUE in case another action/animation is in progress + $N.queue(function( queueNext ){ + // calculate 'current' min/max sizes + setSizeLimits(pane); // update pane-state + oldSize = s.size; + size = _parseSize(pane, size); // handle percentages & auto + size = max(size, _parseSize(pane, o.minSize)); + size = min(size, s.maxSize); + if (size < s.minSize) { // not enough room for pane! + queueNext(); // call before makePaneFit() because it needs the queue free + makePaneFit(pane, false, skipCallback); // will hide or close pane + return; + } + + // IF newSize is same as oldSize, then nothing to do - abort + if (!force && size === oldSize) + return queueNext(); + + // onresize_start callback CANNOT cancel resizing because this would break the layout! + if (!skipCallback && state.initialized && s.isVisible) + _runCallbacks("onresize_start", pane); + + // resize the pane, and make sure its visible + newSize = cssSize(pane, size); + + if (doFX && $P.is(":visible")) { // ANIMATE + var fx = $.layout.effects.size[pane] || $.layout.effects.size.all + , easing = o.fxSettings_size.easing || fx.easing + , z = options.zIndexes + , props = {}; + props[ dimName ] = newSize +'px'; + s.isMoving = true; + // overlay all elements during animation + $P.css({ zIndex: z.pane_animate }) + .show().animate( props, o.fxSpeed_size, easing, function(){ + // reset zIndex after animation + $P.css({ zIndex: (s.isSliding ? z.pane_sliding : z.pane_normal) }); + s.isMoving = false; + sizePane_2(); // continue + queueNext(); + }); + } + else { // no animation + $P.css( dimName, newSize ); // resize pane + // if pane is visible, then + if ($P.is(":visible")) + sizePane_2(); // continue + else { + // pane is NOT VISIBLE, so just update state data... + // when pane is *next opened*, it will have the new size + s.size = size; // update state.size + $.extend(s, elDims($P)); // update state dimensions + } + queueNext(); + }; + + }); + + // SUBROUTINE + function sizePane_2 () { + /* Panes are sometimes not sized precisely in some browsers!? + * This code will resize the pane up to 3 times to nudge the pane to the correct size + */ + var actual = dimName==='width' ? $P.outerWidth() : $P.outerHeight() + , tries = [{ + pane: pane + , count: 1 + , target: size + , actual: actual + , correct: (size === actual) + , attempt: size + , cssSize: newSize + }] + , lastTry = tries[0] + , msg = 'Inaccurate size after resizing the '+ pane +'-pane.' + ; + while ( !lastTry.correct ) { + thisTry = { pane: pane, count: lastTry.count+1, target: size }; + + if (lastTry.actual > size) + thisTry.attempt = max(0, lastTry.attempt - (lastTry.actual - size)); + else // lastTry.actual < size + thisTry.attempt = max(0, lastTry.attempt + (size - lastTry.actual)); + + thisTry.cssSize = cssSize(pane, thisTry.attempt); + $P.css( dimName, thisTry.cssSize ); + + thisTry.actual = dimName=='width' ? $P.outerWidth() : $P.outerHeight(); + thisTry.correct = (size === thisTry.actual); + + // if showDebugMessages, log attempts and alert the user of this *non-fatal error* + if (options.showDebugMessages) { + if ( tries.length === 1) { + _log(msg, false); + _log(lastTry, false); + } + _log(thisTry, false); + } + + // after 4 tries, is as close as its gonna get! + if (tries.length > 3) break; + + tries.push( thisTry ); + lastTry = tries[ tries.length - 1 ]; + } + // END TESTING CODE + + // update pane-state dimensions + s.size = size; + $.extend(s, elDims($P)); + + if (s.isVisible && $P.is(":visible")) { + // reposition the resizer-bar + if ($R) $R.css( side, size + sC[inset] ); + // resize the content-div + sizeContent(pane); + } + + if (!skipCallback && !skipResizeWhileDragging && state.initialized && s.isVisible) + _runCallbacks("onresize_end", pane); + + // resize all the adjacent panes, and adjust their toggler buttons + // when skipCallback passed, it means the controlling method will handle 'other panes' + if (!skipCallback) { + // also no callback if live-resize is in progress and NOT triggerEventsDuringLiveResize + if (!s.isSliding) sizeMidPanes(_c[pane].dir=="horz" ? "" : "center", skipResizeWhileDragging, force); + sizeHandles(); + } + + // if opposite-pane was autoClosed, see if it can be autoOpened now + var altPane = _c.oppositeEdge[pane]; + if (size < oldSize && state[ altPane ].noRoom) { + setSizeLimits( altPane ); + makePaneFit( altPane, false, skipCallback ); + } + + // DEBUG - ALERT user/developer so they know there was a sizing problem + if (options.showDebugMessages && tries.length > 1) + _log(msg +'\nSee the Error Console for details.', true); + } + } + + /** + * @see initPanes(), sizePane(), resizeAll(), open(), close(), hide() + * @param {string} panes The pane(s) being resized, comma-delmited string + * @param {boolean=} [skipCallback=false] Should the onresize callback be run? + * @param {boolean=} [force=false] + */ +, sizeMidPanes = function (panes, skipCallback, force) { + panes = (panes ? panes : "east,west,center").split(","); + + $.each(panes, function (i, pane) { + if (!$Ps[pane]) return; // NO PANE - skip + var + o = options[pane] + , s = state[pane] + , $P = $Ps[pane] + , $R = $Rs[pane] + , isCenter= (pane=="center") + , hasRoom = true + , CSS = {} + , newCenter = calcNewCenterPaneDims() + ; + // update pane-state dimensions + $.extend(s, elDims($P)); + + if (pane === "center") { + if (!force && s.isVisible && newCenter.width === s.outerWidth && newCenter.height === s.outerHeight) + return true; // SKIP - pane already the correct size + // set state for makePaneFit() logic + $.extend(s, cssMinDims(pane), { + maxWidth: newCenter.width + , maxHeight: newCenter.height + }); + CSS = newCenter; + // convert OUTER width/height to CSS width/height + CSS.width = cssW($P, CSS.width); + // NEW - allow pane to extend 'below' visible area rather than hide it + CSS.height = cssH($P, CSS.height); + hasRoom = CSS.width >= 0 && CSS.height >= 0; // height >= 0 = ALWAYS TRUE NOW + // during layout init, try to shrink east/west panes to make room for center + if (!state.initialized && o.minWidth > s.outerWidth) { + var + reqPx = o.minWidth - s.outerWidth + , minE = options.east.minSize || 0 + , minW = options.west.minSize || 0 + , sizeE = state.east.size + , sizeW = state.west.size + , newE = sizeE + , newW = sizeW + ; + if (reqPx > 0 && state.east.isVisible && sizeE > minE) { + newE = max( sizeE-minE, sizeE-reqPx ); + reqPx -= sizeE-newE; + } + if (reqPx > 0 && state.west.isVisible && sizeW > minW) { + newW = max( sizeW-minW, sizeW-reqPx ); + reqPx -= sizeW-newW; + } + // IF we found enough extra space, then resize the border panes as calculated + if (reqPx === 0) { + if (sizeE != minE) + sizePane('east', newE, true, force, true); // true = skipCallback/noAnimation - initPanes will handle when done + if (sizeW != minW) + sizePane('west', newW, true, force, true); + // now start over! + sizeMidPanes('center', skipCallback, force); + return; // abort this loop + } + } + } + else { // for east and west, set only the height, which is same as center height + // set state.min/maxWidth/Height for makePaneFit() logic + if (s.isVisible && !s.noVerticalRoom) + $.extend(s, elDims($P), cssMinDims(pane)) + if (!force && !s.noVerticalRoom && newCenter.height === s.outerHeight) + return true; // SKIP - pane already the correct size + // east/west have same top, bottom & height as center + CSS.top = newCenter.top; + CSS.bottom = newCenter.bottom; + // NEW - allow pane to extend 'below' visible area rather than hide it + CSS.height = cssH($P, newCenter.height); + s.maxHeight = CSS.height; + hasRoom = (s.maxHeight >= 0); // ALWAYS TRUE NOW + if (!hasRoom) s.noVerticalRoom = true; // makePaneFit() logic + } + + if (hasRoom) { + // resizeAll passes skipCallback because it triggers callbacks after ALL panes are resized + if (!skipCallback && state.initialized) + _runCallbacks("onresize_start", pane); + + $P.css(CSS); // apply the CSS to pane + sizeHandles(pane); // also update resizer length + if (s.noRoom && !s.isClosed && !s.isHidden) + makePaneFit(pane); // will re-open/show auto-closed/hidden pane + if (s.isVisible) { + $.extend(s, elDims($P)); // update pane dimensions + if (state.initialized) sizeContent(pane); // also resize the contents, if exists + } + } + else if (!s.noRoom && s.isVisible) // no room for pane + makePaneFit(pane); // will hide or close pane + + if (!s.isVisible) + return true; // DONE - next pane + + /* + * Extra CSS for IE6 or IE7 in Quirks-mode - add 'width' to NORTH/SOUTH panes + * Normally these panes have only 'left' & 'right' positions so pane auto-sizes + * ALSO required when pane is an IFRAME because will NOT default to 'full width' + */ + if (pane === "center") { // finished processing midPanes + var b = $.layout.browser; + var fix = b.isIE6 || (b.msie && !$.support.boxModel); + if ($Ps.north && (fix || state.north.tagName=="IFRAME")) + $Ps.north.css("width", cssW($Ps.north, sC.innerWidth)); + if ($Ps.south && (fix || state.south.tagName=="IFRAME")) + $Ps.south.css("width", cssW($Ps.south, sC.innerWidth)); + } + + // resizeAll passes skipCallback because it triggers callbacks after ALL panes are resized + if (!skipCallback && state.initialized) + _runCallbacks("onresize_end", pane); + }); + } + + + /** + * @see window.onresize(), callbacks or custom code + */ +, resizeAll = function () { + if (!state.initialized) { + _initLayoutElements(); + return; // no need to resize since we just initialized! + } + var oldW = sC.innerWidth + , oldH = sC.innerHeight + ; + // cannot size layout when 'container' is hidden or collapsed + if (!$N.is(":visible:") ) return; + $.extend( state.container, elDims( $N ) ); // UPDATE container dimensions + if (!sC.outerHeight) return; + + // onresizeall_start will CANCEL resizing if returns false + // state.container has already been set, so user can access this info for calcuations + if (false === _runCallbacks("onresizeall_start")) return false; + + var // see if container is now 'smaller' than before + shrunkH = (sC.innerHeight < oldH) + , shrunkW = (sC.innerWidth < oldW) + , $P, o, s, dir + ; + // NOTE special order for sizing: S-N-E-W + $.each(["south","north","east","west"], function (i, pane) { + if (!$Ps[pane]) return; // no pane - SKIP + s = state[pane]; + o = options[pane]; + dir = _c[pane].dir; + + if (o.autoResize && s.size != o.size) // resize pane to original size set in options + sizePane(pane, o.size, true, true, true); // true=skipCallback/forceResize/noAnimation + else { + setSizeLimits(pane); + makePaneFit(pane, false, true, true); // true=skipCallback/forceResize + } + }); + + sizeMidPanes("", true, true); // true=skipCallback, true=forceResize + sizeHandles(); // reposition the toggler elements + + // trigger all individual pane callbacks AFTER layout has finished resizing + o = options; // reuse alias + $.each(_c.allPanes, function (i, pane) { + $P = $Ps[pane]; + if (!$P) return; // SKIP + if (state[pane].isVisible) // undefined for non-existent panes + _runCallbacks("onresize_end", pane); // callback - if exists + }); + + _runCallbacks("onresizeall_end"); + //_triggerLayoutEvent(pane, 'resizeall'); + } + + /** + * Whenever a pane resizes or opens that has a nested layout, trigger resizeAll + * + * @param {string} pane The pane just resized or opened + */ +, resizeChildLayout = function (evt_or_pane) { + var pane = evtPane.call(this, evt_or_pane); + if (!options[pane].resizeChildLayout) return; + var $P = $Ps[pane] + , $C = $Cs[pane] + , d = "layout" + , P = Instance[pane] + , L = children[pane] + ; + // user may have manually set EITHER instance pointer, so handle that + if (P.child && !L) { + // have to reverse the pointers! + var el = P.child.container; + L = children[pane] = (el ? el.data(d) : 0) || null; // set pointer _directly_ to layout instance + } + + // if a layout-pointer exists, see if child has been destroyed + if (L && L.destroyed) + L = children[pane] = null; // clear child pointers + // no child layout pointer is set - see if there is a child layout NOW + if (!L) L = children[pane] = $P.data(d) || ($C ? $C.data(d) : 0) || null; // set/update child pointers + + // ALWAYS refresh the pane.child alias + P.child = children[pane]; + + if (L) L.resizeAll(); + } + + + /** + * IF pane has a content-div, then resize all elements inside pane to fit pane-height + * + * @param {string=} [panes=""] The pane(s) being resized + * @param {boolean=} [remeasure=false] Should the content (header/footer) be remeasured? + */ +, sizeContent = function (evt_or_panes, remeasure) { + if (!isInitialized()) return; + + var panes = evtPane.call(this, evt_or_panes); + panes = panes ? panes.split(",") : _c.allPanes; + + $.each(panes, function (idx, pane) { + var + $P = $Ps[pane] + , $C = $Cs[pane] + , o = options[pane] + , s = state[pane] + , m = s.content // m = measurements + ; + if (!$P || !$C || !$P.is(":visible")) return true; // NOT VISIBLE - skip + + // if content-element was REMOVED, update OR remove the pointer + if (!$C.length) { + initContent(pane, false); // false = do NOT sizeContent() - already there! + if (!$C) return; // no replacement element found - pointer have been removed + } + + // onsizecontent_start will CANCEL resizing if returns false + if (false === _runCallbacks("onsizecontent_start", pane)) return; + + // skip re-measuring offsets if live-resizing + if ((!s.isMoving && !s.isResizing) || o.liveContentResizing || remeasure || m.top == undefined) { + _measure(); + // if any footers are below pane-bottom, they may not measure correctly, + // so allow pane overflow and re-measure + if (m.hiddenFooters > 0 && $P.css("overflow") === "hidden") { + $P.css("overflow", "visible"); + _measure(); // remeasure while overflowing + $P.css("overflow", "hidden"); + } + } + // NOTE: spaceAbove/Below *includes* the pane paddingTop/Bottom, but not pane.borders + var newH = s.innerHeight - (m.spaceAbove - s.css.paddingTop) - (m.spaceBelow - s.css.paddingBottom); + + if (!$C.is(":visible") || m.height != newH) { + // size the Content element to fit new pane-size - will autoHide if not enough room + setOuterHeight($C, newH, true); // true=autoHide + m.height = newH; // save new height + }; + + if (state.initialized) + _runCallbacks("onsizecontent_end", pane); + + function _below ($E) { + return max(s.css.paddingBottom, (parseInt($E.css("marginBottom"), 10) || 0)); + }; + + function _measure () { + var + ignore = options[pane].contentIgnoreSelector + , $Fs = $C.nextAll().not(ignore || ':lt(0)') // not :lt(0) = ALL + , $Fs_vis = $Fs.filter(':visible') + , $F = $Fs_vis.filter(':last') + ; + m = { + top: $C[0].offsetTop + , height: $C.outerHeight() + , numFooters: $Fs.length + , hiddenFooters: $Fs.length - $Fs_vis.length + , spaceBelow: 0 // correct if no content footer ($E) + } + m.spaceAbove = m.top; // just for state - not used in calc + m.bottom = m.top + m.height; + if ($F.length) + //spaceBelow = (LastFooter.top + LastFooter.height) [footerBottom] - Content.bottom + max(LastFooter.marginBottom, pane.paddingBotom) + m.spaceBelow = ($F[0].offsetTop + $F.outerHeight()) - m.bottom + _below($F); + else // no footer - check marginBottom on Content element itself + m.spaceBelow = _below($C); + }; + }); + } + + + /** + * Called every time a pane is opened, closed, or resized to slide the togglers to 'center' and adjust their length if necessary + * + * @see initHandles(), open(), close(), resizeAll() + * @param {string=} [panes=""] The pane(s) being resized + */ +, sizeHandles = function (evt_or_panes) { + var panes = evtPane.call(this, evt_or_panes) + panes = panes ? panes.split(",") : _c.borderPanes; + + $.each(panes, function (i, pane) { + var + o = options[pane] + , s = state[pane] + , $P = $Ps[pane] + , $R = $Rs[pane] + , $T = $Ts[pane] + , $TC + ; + if (!$P || !$R) return; + + var + dir = _c[pane].dir + , _state = (s.isClosed ? "_closed" : "_open") + , spacing = o["spacing"+ _state] + , togAlign = o["togglerAlign"+ _state] + , togLen = o["togglerLength"+ _state] + , paneLen + , left + , offset + , CSS = {} + ; + + if (spacing === 0) { + $R.hide(); + return; + } + else if (!s.noRoom && !s.isHidden) // skip if resizer was hidden for any reason + $R.show(); // in case was previously hidden + + // Resizer Bar is ALWAYS same width/height of pane it is attached to + if (dir === "horz") { // north/south + //paneLen = $P.outerWidth(); // s.outerWidth || + paneLen = sC.innerWidth; // handle offscreen-panes + s.resizerLength = paneLen; + left = $.layout.cssNum($P, "left") + $R.css({ + width: cssW($R, paneLen) // account for borders & padding + , height: cssH($R, spacing) // ditto + , left: left > -9999 ? left : sC.insetLeft // handle offscreen-panes + }); + } + else { // east/west + paneLen = $P.outerHeight(); // s.outerHeight || + s.resizerLength = paneLen; + $R.css({ + height: cssH($R, paneLen) // account for borders & padding + , width: cssW($R, spacing) // ditto + , top: sC.insetTop + getPaneSize("north", true) // TODO: what if no North pane? + //, top: $.layout.cssNum($Ps["center"], "top") + }); + } + + // remove hover classes + removeHover( o, $R ); + + if ($T) { + if (togLen === 0 || (s.isSliding && o.hideTogglerOnSlide)) { + $T.hide(); // always HIDE the toggler when 'sliding' + return; + } + else + $T.show(); // in case was previously hidden + + if (!(togLen > 0) || togLen === "100%" || togLen > paneLen) { + togLen = paneLen; + offset = 0; + } + else { // calculate 'offset' based on options.PANE.togglerAlign_open/closed + if (isStr(togAlign)) { + switch (togAlign) { + case "top": + case "left": offset = 0; + break; + case "bottom": + case "right": offset = paneLen - togLen; + break; + case "middle": + case "center": + default: offset = round((paneLen - togLen) / 2); // 'default' catches typos + } + } + else { // togAlign = number + var x = parseInt(togAlign, 10); // + if (togAlign >= 0) offset = x; + else offset = paneLen - togLen + x; // NOTE: x is negative! + } + } + + if (dir === "horz") { // north/south + var width = cssW($T, togLen); + $T.css({ + width: width // account for borders & padding + , height: cssH($T, spacing) // ditto + , left: offset // TODO: VERIFY that toggler positions correctly for ALL values + , top: 0 + }); + // CENTER the toggler content SPAN + $T.children(".content").each(function(){ + $TC = $(this); + $TC.css("marginLeft", round((width-$TC.outerWidth())/2)); // could be negative + }); + } + else { // east/west + var height = cssH($T, togLen); + $T.css({ + height: height // account for borders & padding + , width: cssW($T, spacing) // ditto + , top: offset // POSITION the toggler + , left: 0 + }); + // CENTER the toggler content SPAN + $T.children(".content").each(function(){ + $TC = $(this); + $TC.css("marginTop", round((height-$TC.outerHeight())/2)); // could be negative + }); + } + + // remove ALL hover classes + removeHover( 0, $T ); + } + + // DONE measuring and sizing this resizer/toggler, so can be 'hidden' now + if (!state.initialized && (o.initHidden || s.noRoom)) { + $R.hide(); + if ($T) $T.hide(); + } + }); + } + + + /** + * @param {string} pane + */ +, enableClosable = function (evt_or_pane) { + if (!isInitialized()) return; + var pane = evtPane.call(this, evt_or_pane) + , $T = $Ts[pane] + , o = options[pane] + ; + if (!$T) return; + o.closable = true; + $T .bind("click."+ sID, function(evt){ evt.stopPropagation(); toggle(pane); }) + .css("visibility", "visible") + .css("cursor", "pointer") + .attr("title", state[pane].isClosed ? o.togglerTip_closed : o.togglerTip_open) // may be blank + .show(); + } + /** + * @param {string} pane + * @param {boolean=} [hide=false] + */ +, disableClosable = function (evt_or_pane, hide) { + if (!isInitialized()) return; + var pane = evtPane.call(this, evt_or_pane) + , $T = $Ts[pane] + ; + if (!$T) return; + options[pane].closable = false; + // is closable is disable, then pane MUST be open! + if (state[pane].isClosed) open(pane, false, true); + $T .unbind("."+ sID) + .css("visibility", hide ? "hidden" : "visible") // instead of hide(), which creates logic issues + .css("cursor", "default") + .attr("title", ""); + } + + + /** + * @param {string} pane + */ +, enableSlidable = function (evt_or_pane) { + if (!isInitialized()) return; + var pane = evtPane.call(this, evt_or_pane) + , $R = $Rs[pane] + ; + if (!$R || !$R.data('draggable')) return; + options[pane].slidable = true; + if (s.isClosed) + bindStartSlidingEvent(pane, true); + } + /** + * @param {string} pane + */ +, disableSlidable = function (evt_or_pane) { + if (!isInitialized()) return; + var pane = evtPane.call(this, evt_or_pane) + , $R = $Rs[pane] + ; + if (!$R) return; + options[pane].slidable = false; + if (state[pane].isSliding) + close(pane, false, true); + else { + bindStartSlidingEvent(pane, false); + $R .css("cursor", "default") + .attr("title", ""); + removeHover(null, $R[0]); // in case currently hovered + } + } + + + /** + * @param {string} pane + */ +, enableResizable = function (evt_or_pane) { + if (!isInitialized()) return; + var pane = evtPane.call(this, evt_or_pane) + , $R = $Rs[pane] + , o = options[pane] + ; + if (!$R || !$R.data('draggable')) return; + o.resizable = true; + $R.draggable("enable"); + if (!state[pane].isClosed) + $R .css("cursor", o.resizerCursor) + .attr("title", o.resizerTip); + } + /** + * @param {string} pane + */ +, disableResizable = function (evt_or_pane) { + if (!isInitialized()) return; + var pane = evtPane.call(this, evt_or_pane) + , $R = $Rs[pane] + ; + if (!$R || !$R.data('draggable')) return; + options[pane].resizable = false; + $R .draggable("disable") + .css("cursor", "default") + .attr("title", ""); + removeHover(null, $R[0]); // in case currently hovered + } + + + /** + * Move a pane from source-side (eg, west) to target-side (eg, east) + * If pane exists on target-side, move that to source-side, ie, 'swap' the panes + * + * @param {string} pane1 The pane/edge being swapped + * @param {string} pane2 ditto + */ +, swapPanes = function (evt_or_pane1, pane2) { + if (!isInitialized()) return; + var pane1 = evtPane.call(this, evt_or_pane1); + // change state.edge NOW so callbacks can know where pane is headed... + state[pane1].edge = pane2; + state[pane2].edge = pane1; + // run these even if NOT state.initialized + if (false === _runCallbacks("onswap_start", pane1) + || false === _runCallbacks("onswap_start", pane2) + ) { + state[pane1].edge = pane1; // reset + state[pane2].edge = pane2; + return; + } + + var + oPane1 = copy( pane1 ) + , oPane2 = copy( pane2 ) + , sizes = {} + ; + sizes[pane1] = oPane1 ? oPane1.state.size : 0; + sizes[pane2] = oPane2 ? oPane2.state.size : 0; + + // clear pointers & state + $Ps[pane1] = false; + $Ps[pane2] = false; + state[pane1] = {}; + state[pane2] = {}; + + // ALWAYS remove the resizer & toggler elements + if ($Ts[pane1]) $Ts[pane1].remove(); + if ($Ts[pane2]) $Ts[pane2].remove(); + if ($Rs[pane1]) $Rs[pane1].remove(); + if ($Rs[pane2]) $Rs[pane2].remove(); + $Rs[pane1] = $Rs[pane2] = $Ts[pane1] = $Ts[pane2] = false; + + // transfer element pointers and data to NEW Layout keys + move( oPane1, pane2 ); + move( oPane2, pane1 ); + + // cleanup objects + oPane1 = oPane2 = sizes = null; + + // make panes 'visible' again + if ($Ps[pane1]) $Ps[pane1].css(_c.visible); + if ($Ps[pane2]) $Ps[pane2].css(_c.visible); + + // fix any size discrepancies caused by swap + resizeAll(); + + // run these even if NOT state.initialized + _runCallbacks("onswap_end", pane1); + _runCallbacks("onswap_end", pane2); + + return; + + function copy (n) { // n = pane + var + $P = $Ps[n] + , $C = $Cs[n] + ; + return !$P ? false : { + pane: n + , P: $P ? $P[0] : false + , C: $C ? $C[0] : false + , state: $.extend(true, {}, state[n]) + , options: $.extend(true, {}, options[n]) + } + }; + + function move (oPane, pane) { + if (!oPane) return; + var + P = oPane.P + , C = oPane.C + , oldPane = oPane.pane + , c = _c[pane] + , side = c.side.toLowerCase() + , inset = "inset"+ c.side + // save pane-options that should be retained + , s = $.extend({}, state[pane]) + , o = options[pane] + // RETAIN side-specific FX Settings - more below + , fx = { resizerCursor: o.resizerCursor } + , re, size, pos + ; + $.each("fxName,fxSpeed,fxSettings".split(","), function (i, k) { + fx[k +"_open"] = o[k +"_open"]; + fx[k +"_close"] = o[k +"_close"]; + fx[k +"_size"] = o[k +"_size"]; + }); + + // update object pointers and attributes + $Ps[pane] = $(P) + .data({ + layoutPane: Instance[pane] // NEW pointer to pane-alias-object + , layoutEdge: pane + }) + .css(_c.hidden) + .css(c.cssReq) + ; + $Cs[pane] = C ? $(C) : false; + + // set options and state + options[pane] = $.extend({}, oPane.options, fx); + state[pane] = $.extend({}, oPane.state); + + // change classNames on the pane, eg: ui-layout-pane-east ==> ui-layout-pane-west + re = new RegExp(o.paneClass +"-"+ oldPane, "g"); + P.className = P.className.replace(re, o.paneClass +"-"+ pane); + + // ALWAYS regenerate the resizer & toggler elements + initHandles(pane); // create the required resizer & toggler + + // if moving to different orientation, then keep 'target' pane size + if (c.dir != _c[oldPane].dir) { + size = sizes[pane] || 0; + setSizeLimits(pane); // update pane-state + size = max(size, state[pane].minSize); + // use manualSizePane to disable autoResize - not useful after panes are swapped + manualSizePane(pane, size, true, true); // true/true = skipCallback/noAnimation + } + else // move the resizer here + $Rs[pane].css(side, sC[inset] + (state[pane].isVisible ? getPaneSize(pane) : 0)); + + + // ADD CLASSNAMES & SLIDE-BINDINGS + if (oPane.state.isVisible && !s.isVisible) + setAsOpen(pane, true); // true = skipCallback + else { + setAsClosed(pane); + bindStartSlidingEvent(pane, true); // will enable events IF option is set + } + + // DESTROY the object + oPane = null; + }; + } + + + /** + * INTERNAL method to sync pin-buttons when pane is opened or closed + * Unpinned means the pane is 'sliding' - ie, over-top of the adjacent panes + * + * @see open(), setAsOpen(), setAsClosed() + * @param {string} pane These are the params returned to callbacks by layout() + * @param {boolean} doPin True means set the pin 'down', False means 'up' + */ +, syncPinBtns = function (pane, doPin) { + if ($.layout.plugins.buttons) + $.each(state[pane].pins, function (i, selector) { + $.layout.buttons.setPinState(Instance, $(selector), pane, doPin); + }); + } + +; // END var DECLARATIONS + + /** + * Capture keys when enableCursorHotkey - toggle pane if hotkey pressed + * + * @see document.keydown() + */ + function keyDown (evt) { + if (!evt) return true; + var code = evt.keyCode; + if (code < 33) return true; // ignore special keys: ENTER, TAB, etc + + var + PANE = { + 38: "north" // Up Cursor - $.ui.keyCode.UP + , 40: "south" // Down Cursor - $.ui.keyCode.DOWN + , 37: "west" // Left Cursor - $.ui.keyCode.LEFT + , 39: "east" // Right Cursor - $.ui.keyCode.RIGHT + } + , ALT = evt.altKey // no worky! + , SHIFT = evt.shiftKey + , CTRL = evt.ctrlKey + , CURSOR = (CTRL && code >= 37 && code <= 40) + , o, k, m, pane + ; + + if (CURSOR && options[PANE[code]].enableCursorHotkey) // valid cursor-hotkey + pane = PANE[code]; + else if (CTRL || SHIFT) // check to see if this matches a custom-hotkey + $.each(_c.borderPanes, function (i, p) { // loop each pane to check its hotkey + o = options[p]; + k = o.customHotkey; + m = o.customHotkeyModifier; // if missing or invalid, treated as "CTRL+SHIFT" + if ((SHIFT && m=="SHIFT") || (CTRL && m=="CTRL") || (CTRL && SHIFT)) { // Modifier matches + if (k && code === (isNaN(k) || k <= 9 ? k.toUpperCase().charCodeAt(0) : k)) { // Key matches + pane = p; + return false; // BREAK + } + } + }); + + // validate pane + if (!pane || !$Ps[pane] || !options[pane].closable || state[pane].isHidden) + return true; + + toggle(pane); + + evt.stopPropagation(); + evt.returnValue = false; // CANCEL key + return false; + }; + + +/* + * ###################################### + * UTILITY METHODS + * called externally or by initButtons + * ###################################### + */ + + /** + * Change/reset a pane overflow setting & zIndex to allow popups/drop-downs to work + * + * @param {Object=} [el] (optional) Can also be 'bound' to a click, mouseOver, or other event + */ + function allowOverflow (el) { + if (!isInitialized()) return; + if (this && this.tagName) el = this; // BOUND to element + var $P; + if (isStr(el)) + $P = $Ps[el]; + else if ($(el).data("layoutRole")) + $P = $(el); + else + $(el).parents().each(function(){ + if ($(this).data("layoutRole")) { + $P = $(this); + return false; // BREAK + } + }); + if (!$P || !$P.length) return; // INVALID + + var + pane = $P.data("layoutEdge") + , s = state[pane] + ; + + // if pane is already raised, then reset it before doing it again! + // this would happen if allowOverflow is attached to BOTH the pane and an element + if (s.cssSaved) + resetOverflow(pane); // reset previous CSS before continuing + + // if pane is raised by sliding or resizing, or its closed, then abort + if (s.isSliding || s.isResizing || s.isClosed) { + s.cssSaved = false; + return; + } + + var + newCSS = { zIndex: (options.zIndexes.resizer_normal + 1) } + , curCSS = {} + , of = $P.css("overflow") + , ofX = $P.css("overflowX") + , ofY = $P.css("overflowY") + ; + // determine which, if any, overflow settings need to be changed + if (of != "visible") { + curCSS.overflow = of; + newCSS.overflow = "visible"; + } + if (ofX && !ofX.match(/visible|auto/)) { + curCSS.overflowX = ofX; + newCSS.overflowX = "visible"; + } + if (ofY && !ofY.match(/visible|auto/)) { + curCSS.overflowY = ofX; + newCSS.overflowY = "visible"; + } + + // save the current overflow settings - even if blank! + s.cssSaved = curCSS; + + // apply new CSS to raise zIndex and, if necessary, make overflow 'visible' + $P.css( newCSS ); + + // make sure the zIndex of all other panes is normal + $.each(_c.allPanes, function(i, p) { + if (p != pane) resetOverflow(p); + }); + + }; + /** + * @param {Object=} [el] (optional) Can also be 'bound' to a click, mouseOver, or other event + */ + function resetOverflow (el) { + if (!isInitialized()) return; + if (this && this.tagName) el = this; // BOUND to element + var $P; + if (isStr(el)) + $P = $Ps[el]; + else if ($(el).data("layoutRole")) + $P = $(el); + else + $(el).parents().each(function(){ + if ($(this).data("layoutRole")) { + $P = $(this); + return false; // BREAK + } + }); + if (!$P || !$P.length) return; // INVALID + + var + pane = $P.data("layoutEdge") + , s = state[pane] + , CSS = s.cssSaved || {} + ; + // reset the zIndex + if (!s.isSliding && !s.isResizing) + $P.css("zIndex", options.zIndexes.pane_normal); + + // reset Overflow - if necessary + $P.css( CSS ); + + // clear var + s.cssSaved = false; + }; + +/* + * ##################### + * CREATE/RETURN LAYOUT + * ##################### + */ + + // validate that container exists + var $N = $(this).eq(0); // FIRST matching Container element + if (!$N.length) { + if (options.showErrorMessages) + _log( lang.errContainerMissing, true ); + return null; + }; + + // Users retrieve Instance of a layout with: $N.layout() OR $N.data("layout") + // return the Instance-pointer if layout has already been initialized + if ($N.data("layoutContainer") && $N.data("layout")) + return $N.data("layout"); // cached pointer + + // init global vars + var + $Ps = {} // Panes x5 - set in initPanes() + , $Cs = {} // Content x5 - set in initPanes() + , $Rs = {} // Resizers x4 - set in initHandles() + , $Ts = {} // Togglers x4 - set in initHandles() + , $Ms = $([]) // Masks - up to 2 masks per pane (IFRAME + DIV) + // aliases for code brevity + , sC = state.container // alias for easy access to 'container dimensions' + , sID = state.id // alias for unique layout ID/namespace - eg: "layout435" + ; + + // create Instance object to expose data & option Properties, and primary action Methods + var Instance = { + // layout data + options: options // property - options hash + , state: state // property - dimensions hash + // object pointers + , container: $N // property - object pointers for layout container + , panes: $Ps // property - object pointers for ALL Panes: panes.north, panes.center + , contents: $Cs // property - object pointers for ALL Content: contents.north, contents.center + , resizers: $Rs // property - object pointers for ALL Resizers, eg: resizers.north + , togglers: $Ts // property - object pointers for ALL Togglers, eg: togglers.north + // border-pane open/close + , hide: hide // method - ditto + , show: show // method - ditto + , toggle: toggle // method - pass a 'pane' ("north", "west", etc) + , open: open // method - ditto + , close: close // method - ditto + , slideOpen: slideOpen // method - ditto + , slideClose: slideClose // method - ditto + , slideToggle: slideToggle // method - ditto + // pane actions + , setSizeLimits: setSizeLimits // method - pass a 'pane' - update state min/max data + , _sizePane: sizePane // method -intended for user by plugins only! + , sizePane: manualSizePane // method - pass a 'pane' AND an 'outer-size' in pixels or percent, or 'auto' + , sizeContent: sizeContent // method - pass a 'pane' + , swapPanes: swapPanes // method - pass TWO 'panes' - will swap them + // pane element methods + , initContent: initContent // method - ditto + , addPane: addPane // method - pass a 'pane' + , removePane: removePane // method - pass a 'pane' to remove from layout, add 'true' to delete the pane-elem + , createChildLayout: createChildLayout// method - pass a 'pane' and (optional) layout-options (OVERRIDES options[pane].childOptions + // special pane option setting + , enableClosable: enableClosable // method - pass a 'pane' + , disableClosable: disableClosable // method - ditto + , enableSlidable: enableSlidable // method - ditto + , disableSlidable: disableSlidable // method - ditto + , enableResizable: enableResizable // method - ditto + , disableResizable: disableResizable// method - ditto + // utility methods for panes + , allowOverflow: allowOverflow // utility - pass calling element (this) + , resetOverflow: resetOverflow // utility - ditto + // layout control + , destroy: destroy // method - no parameters + , initPanes: isInitialized // method - no parameters + , resizeAll: resizeAll // method - no parameters + // callback triggering + , runCallbacks: _runCallbacks // method - pass evtName & pane (if a pane-event), eg: trigger("onopen", "west") + // alias collections of options, state and children - created in addPane and extended elsewhere + , hasParentLayout: false // set by initContainer() + , children: children // pointers to child-layouts, eg: Instance.children["west"] + , north: false // alias group: { name: pane, pane: $Ps[pane], options: options[pane], state: state[pane], child: children[pane] } + , south: false // ditto + , west: false // ditto + , east: false // ditto + , center: false // ditto + }; + + // create the border layout NOW + if (_create() === 'cancel') // onload_start callback returned false to CANCEL layout creation + return null; + else // true OR false -- if layout-elements did NOT init (hidden or do not exist), can auto-init later + return Instance; // return the Instance object + +} + + + + +/** + * jquery.layout.state 1.0 + * $Date$ + * + * Copyright (c) 2010 + * Kevin Dalman (http://allpro.net) + * + * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html) + * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses. + * + * @dependancies: UI Layout 1.3.0.rc30.1 or higher + * @dependancies: $.ui.cookie (above) + * + * @support: http://groups.google.com/group/jquery-ui-layout + */ +/* + * State-management options stored in options.stateManagement, which includes a .cookie hash + * Default options saves ALL KEYS for ALL PANES, ie: pane.size, pane.isClosed, pane.isHidden + * + * // STATE/COOKIE OPTIONS + * @example $(el).layout({ + stateManagement: { + enabled: true + , stateKeys: "east.size,west.size,east.isClosed,west.isClosed" + , cookie: { name: "appLayout", path: "/" } + } + }) + * @example $(el).layout({ stateManagement__enabled: true }) // enable auto-state-management using cookies + * @example $(el).layout({ stateManagement__cookie: { name: "appLayout", path: "/" } }) + * @example $(el).layout({ stateManagement__cookie__name: "appLayout", stateManagement__cookie__path: "/" }) + * + * // STATE/COOKIE METHODS + * @example myLayout.saveCookie( "west.isClosed,north.size,south.isHidden", {expires: 7} ); + * @example myLayout.loadCookie(); + * @example myLayout.deleteCookie(); + * @example var JSON = myLayout.readState(); // CURRENT Layout State + * @example var JSON = myLayout.readCookie(); // SAVED Layout State (from cookie) + * @example var JSON = myLayout.state.stateData; // LAST LOADED Layout State (cookie saved in layout.state hash) + * + * CUSTOM STATE-MANAGEMENT (eg, saved in a database) + * @example var JSON = myLayout.readState( "west.isClosed,north.size,south.isHidden" ); + * @example myLayout.loadState( JSON ); + */ + +/** + * UI COOKIE UTILITY + * + * A $.cookie OR $.ui.cookie namespace *should be standard*, but until then... + * This creates $.ui.cookie so Layout does not need the cookie.jquery.js plugin + * NOTE: This utility is REQUIRED by the layout.state plugin + * + * Cookie methods in Layout are created as part of State Management + */ +if (!$.ui) $.ui = {}; +$.ui.cookie = { + + // cookieEnabled is not in DOM specs, but DOES works in all browsers,including IE6 + acceptsCookies: !!navigator.cookieEnabled + +, read: function (name) { + var + c = document.cookie + , cs = c ? c.split(';') : [] + , pair // loop var + ; + for (var i=0, n=cs.length; i < n; i++) { + pair = $.trim(cs[i]).split('='); // name=value pair + if (pair[0] == name) // found the layout cookie + return decodeURIComponent(pair[1]); + + } + return null; + } + +, write: function (name, val, cookieOpts) { + var + params = '' + , date = '' + , clear = false + , o = cookieOpts || {} + , x = o.expires + ; + if (x && x.toUTCString) + date = x; + else if (x === null || typeof x === 'number') { + date = new Date(); + if (x > 0) + date.setDate(date.getDate() + x); + else { + date.setFullYear(1970); + clear = true; + } + } + if (date) params += ';expires='+ date.toUTCString(); + if (o.path) params += ';path='+ o.path; + if (o.domain) params += ';domain='+ o.domain; + if (o.secure) params += ';secure'; + document.cookie = name +'='+ (clear ? "" : encodeURIComponent( val )) + params; // write or clear cookie + } + +, clear: function (name) { + $.ui.cookie.write(name, '', {expires: -1}); + } + +}; +// if cookie.jquery.js is not loaded, create an alias to replicate it +// this may be useful to other plugins or code dependent on that plugin +if (!$.cookie) $.cookie = function (k, v, o) { + var C = $.ui.cookie; + if (v === null) + C.clear(k); + else if (v === undefined) + return C.read(k); + else + C.write(k, v, o); +}; + + +// tell Layout that the state plugin is available +$.layout.plugins.stateManagement = true; + +// Add State-Management options to layout.defaults +$.layout.config.optionRootKeys.push("stateManagement"); +$.layout.defaults.stateManagement = { + enabled: false // true = enable state-management, even if not using cookies +, autoSave: true // Save a state-cookie when page exits? +, autoLoad: true // Load the state-cookie when Layout inits? + // List state-data to save - must be pane-specific +, stateKeys: "north.size,south.size,east.size,west.size,"+ + "north.isClosed,south.isClosed,east.isClosed,west.isClosed,"+ + "north.isHidden,south.isHidden,east.isHidden,west.isHidden" +, cookie: { + name: "" // If not specified, will use Layout.name, else just "Layout" + , domain: "" // blank = current domain + , path: "" // blank = current page, '/' = entire website + , expires: "" // 'days' to keep cookie - leave blank for 'session cookie' + , secure: false + } +}; +// Set stateManagement as a layout-option, NOT a pane-option +$.layout.optionsMap.layout.push("stateManagement"); + +/* + * State Management methods + */ +$.layout.state = { + + /** + * Get the current layout state and save it to a cookie + * + * myLayout.saveCookie( keys, cookieOpts ) + * + * @param {Object} inst + * @param {(string|Array)=} keys + * @param {Object=} opts + */ + saveCookie: function (inst, keys, cookieOpts) { + var o = inst.options + , oS = o.stateManagement + , oC = $.extend(true, {}, oS.cookie, cookieOpts || null) + , data = inst.state.stateData = inst.readState( keys || oS.stateKeys ) // read current panes-state + ; + $.ui.cookie.write( oC.name || o.name || "Layout", $.layout.state.encodeJSON(data), oC ); + return $.extend(true, {}, data); // return COPY of state.stateData data + } + + /** + * Remove the state cookie + * + * @param {Object} inst + */ +, deleteCookie: function (inst) { + var o = inst.options; + $.ui.cookie.clear( o.stateManagement.cookie.name || o.name || "Layout" ); + } + + /** + * Read & return data from the cookie - as JSON + * + * @param {Object} inst + */ +, readCookie: function (inst) { + var o = inst.options; + var c = $.ui.cookie.read( o.stateManagement.cookie.name || o.name || "Layout" ); + // convert cookie string back to a hash and return it + return c ? $.layout.state.decodeJSON(c) : {}; + } + + /** + * Get data from the cookie and USE IT to loadState + * + * @param {Object} inst + */ +, loadCookie: function (inst) { + var c = $.layout.state.readCookie(inst); // READ the cookie + if (c) { + inst.state.stateData = $.extend(true, {}, c); // SET state.stateData + inst.loadState(c); // LOAD the retrieved state + } + return c; + } + + /** + * Update layout options from the cookie, if one exists + * + * @param {Object} inst + * @param {Object=} stateData + * @param {boolean=} animate + */ +, loadState: function (inst, stateData, animate) { + stateData = $.layout.transformData( stateData ); // panes = default subkey + if ($.isEmptyObject( stateData )) return; + $.extend(true, inst.options, stateData); // update layout options + // if layout has already been initialized, then UPDATE layout state + if (inst.state.initialized) { + var pane, vis, o, s, h, c + , noAnimate = (animate===false) + ; + $.each($.layout.config.borderPanes, function (idx, pane) { + state = inst.state[pane]; + o = stateData[ pane ]; + if (typeof o != 'object') return; // no key, continue + s = o.size; + c = o.initClosed; + h = o.initHidden; + vis = state.isVisible; + // resize BEFORE opening + if (!vis) + inst.sizePane(pane, s, false, false); + if (h === true) inst.hide(pane, noAnimate); + else if (c === false) inst.open (pane, false, noAnimate); + else if (c === true) inst.close(pane, false, noAnimate); + else if (h === false) inst.show (pane, false, noAnimate); + // resize AFTER any other actions + if (vis) + inst.sizePane(pane, s, false, noAnimate); // animate resize if option passed + }); + }; + } + + /** + * Get the *current layout state* and return it as a hash + * + * @param {Object=} inst + * @param {(string|Array)=} keys + */ +, readState: function (inst, keys) { + var + data = {} + , alt = { isClosed: 'initClosed', isHidden: 'initHidden' } + , state = inst.state + , panes = $.layout.config.allPanes + , pair, pane, key, val + ; + if (!keys) keys = inst.options.stateManagement.stateKeys; // if called by user + if ($.isArray(keys)) keys = keys.join(","); + // convert keys to an array and change delimiters from '__' to '.' + keys = keys.replace(/__/g, ".").split(','); + // loop keys and create a data hash + for (var i=0, n=keys.length; i < n; i++) { + pair = keys[i].split("."); + pane = pair[0]; + key = pair[1]; + if ($.inArray(pane, panes) < 0) continue; // bad pane! + val = state[ pane ][ key ]; + if (val == undefined) continue; + if (key=="isClosed" && state[pane]["isSliding"]) + val = true; // if sliding, then *really* isClosed + ( data[pane] || (data[pane]={}) )[ alt[key] ? alt[key] : key ] = val; + } + return data; + } + + /** + * Stringify a JSON hash so can save in a cookie or db-field + */ +, encodeJSON: function (JSON) { + return parse(JSON); + function parse (h) { + var D=[], i=0, k, v, t; // k = key, v = value + for (k in h) { + v = h[k]; + t = typeof v; + if (t == 'string') // STRING - add quotes + v = '"'+ v +'"'; + else if (t == 'object') // SUB-KEY - recurse into it + v = parse(v); + D[i++] = '"'+ k +'":'+ v; + } + return '{'+ D.join(',') +'}'; + }; + } + + /** + * Convert stringified JSON back to a hash object + * @see $.parseJSON(), adding in jQuery 1.4.1 + */ +, decodeJSON: function (str) { + try { return $.parseJSON ? $.parseJSON(str) : window["eval"]("("+ str +")") || {}; } + catch (e) { return {}; } + } + + +, _create: function (inst) { + var _ = $.layout.state; + // ADD State-Management plugin methods to inst + $.extend( inst, { + // readCookie - update options from cookie - returns hash of cookie data + readCookie: function () { return _.readCookie(inst); } + // deleteCookie + , deleteCookie: function () { _.deleteCookie(inst); } + // saveCookie - optionally pass keys-list and cookie-options (hash) + , saveCookie: function (keys, cookieOpts) { return _.saveCookie(inst, keys, cookieOpts); } + // loadCookie - readCookie and use to loadState() - returns hash of cookie data + , loadCookie: function () { return _.loadCookie(inst); } + // loadState - pass a hash of state to use to update options + , loadState: function (stateData, animate) { _.loadState(inst, stateData, animate); } + // readState - returns hash of current layout-state + , readState: function (keys) { return _.readState(inst, keys); } + // add JSON utility methods too... + , encodeJSON: _.encodeJSON + , decodeJSON: _.decodeJSON + }); + + // init state.stateData key, even if plugin is initially disabled + inst.state.stateData = {}; + + // read and load cookie-data per options + var oS = inst.options.stateManagement; + if (oS.enabled) { + if (oS.autoLoad) // update the options from the cookie + inst.loadCookie(); + else // don't modify options - just store cookie data in state.stateData + inst.state.stateData = inst.readCookie(); + } + } + +, _unload: function (inst) { + var oS = inst.options.stateManagement; + if (oS.enabled) { + if (oS.autoSave) // save a state-cookie automatically + inst.saveCookie(); + else // don't save a cookie, but do store state-data in state.stateData key + inst.state.stateData = inst.readState(); + } + } + +}; + +// add state initialization method to Layout's onCreate array of functions +$.layout.onCreate.push( $.layout.state._create ); +$.layout.onUnload.push( $.layout.state._unload ); + + + + +/** + * jquery.layout.buttons 1.0 + * $Date$ + * + * Copyright (c) 2010 + * Kevin Dalman (http://allpro.net) + * + * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html) + * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses. + * + * @dependancies: UI Layout 1.3.0.rc30.1 or higher + * + * @support: http://groups.google.com/group/jquery-ui-layout + * + * Docs: [ to come ] + * Tips: [ to come ] + */ + +// tell Layout that the state plugin is available +$.layout.plugins.buttons = true; + +// Add buttons options to layout.defaults +$.layout.defaults.autoBindCustomButtons = false; +// Specify autoBindCustomButtons as a layout-option, NOT a pane-option +$.layout.optionsMap.layout.push("autoBindCustomButtons"); + +var lang = $.layout.language; + +/* + * Button methods + */ +$.layout.buttons = { + + /** + * Searches for .ui-layout-button-xxx elements and auto-binds them as layout-buttons + * + * @see _create() + * + * @param {Object} inst Layout Instance object + */ + init: function (inst) { + var pre = "ui-layout-button-" + , layout = inst.options.name || "" + , name; + $.each("toggle,open,close,pin,toggle-slide,open-slide".split(","), function (i, action) { + $.each($.layout.config.borderPanes, function (ii, pane) { + $("."+pre+action+"-"+pane).each(function(){ + // if button was previously 'bound', data.layoutName was set, but is blank if layout has no 'name' + name = $(this).data("layoutName") || $(this).attr("layoutName"); + if (name == undefined || name === layout) + inst.bindButton(this, action, pane); + }); + }); + }); + } + + /** + * Helper function to validate params received by addButton utilities + * + * Two classes are added to the element, based on the buttonClass... + * The type of button is appended to create the 2nd className: + * - ui-layout-button-pin // action btnClass + * - ui-layout-button-pin-west // action btnClass + pane + * - ui-layout-button-toggle + * - ui-layout-button-open + * - ui-layout-button-close + * + * @param {Object} inst Layout Instance object + * @param {(string|!Object)} selector jQuery selector (or element) for button, eg: ".ui-layout-north .toggle-button" + * @param {string} pane Name of the pane the button is for: 'north', 'south', etc. + * + * @return {Array.} If both params valid, the element matching 'selector' in a jQuery wrapper - otherwise returns null + */ +, get: function (inst, selector, pane, action) { + var $E = $(selector) + , o = inst.options + , err = o.showErrorMessages + ; + if (!$E.length) { // element not found + if (err) $.layout.msg(lang.errButton + lang.selector +": "+ selector, true); + } + else if ($.inArray(pane, $.layout.config.borderPanes) < 0) { // invalid 'pane' sepecified + if (err) $.layout.msg(lang.errButton + lang.pane +": "+ pane, true); + $E = $(""); // NO BUTTON + } + else { // VALID + var btn = o[pane].buttonClass +"-"+ action; + $E .addClass( btn +" "+ btn +"-"+ pane ) + .data("layoutName", o.name); // add layout identifier - even if blank! + } + return $E; + } + + + /** + * NEW syntax for binding layout-buttons - will eventually replace addToggle, addOpen, etc. + * + * @param {Object} inst Layout Instance object + * @param {(string|!Object)} selector jQuery selector (or element) for button, eg: ".ui-layout-north .toggle-button" + * @param {string} action + * @param {string} pane + */ +, bind: function (inst, selector, action, pane) { + var _ = $.layout.buttons; + switch (action.toLowerCase()) { + case "toggle": _.addToggle (inst, selector, pane); break; + case "open": _.addOpen (inst, selector, pane); break; + case "close": _.addClose (inst, selector, pane); break; + case "pin": _.addPin (inst, selector, pane); break; + case "toggle-slide": _.addToggle (inst, selector, pane, true); break; + case "open-slide": _.addOpen (inst, selector, pane, true); break; + } + return inst; + } + + /** + * Add a custom Toggler button for a pane + * + * @param {Object} inst Layout Instance object + * @param {(string|!Object)} selector jQuery selector (or element) for button, eg: ".ui-layout-north .toggle-button" + * @param {string} pane Name of the pane the button is for: 'north', 'south', etc. + * @param {boolean=} slide true = slide-open, false = pin-open + */ +, addToggle: function (inst, selector, pane, slide) { + $.layout.buttons.get(inst, selector, pane, "toggle") + .click(function(evt){ + inst.toggle(pane, !!slide); + evt.stopPropagation(); + }); + return inst; + } + + /** + * Add a custom Open button for a pane + * + * @param {Object} inst Layout Instance object + * @param {(string|!Object)} selector jQuery selector (or element) for button, eg: ".ui-layout-north .toggle-button" + * @param {string} pane Name of the pane the button is for: 'north', 'south', etc. + * @param {boolean=} slide true = slide-open, false = pin-open + */ +, addOpen: function (inst, selector, pane, slide) { + $.layout.buttons.get(inst, selector, pane, "open") + .attr("title", lang.Open) + .click(function (evt) { + inst.open(pane, !!slide); + evt.stopPropagation(); + }); + return inst; + } + + /** + * Add a custom Close button for a pane + * + * @param {Object} inst Layout Instance object + * @param {(string|!Object)} selector jQuery selector (or element) for button, eg: ".ui-layout-north .toggle-button" + * @param {string} pane Name of the pane the button is for: 'north', 'south', etc. + */ +, addClose: function (inst, selector, pane) { + $.layout.buttons.get(inst, selector, pane, "close") + .attr("title", lang.Close) + .click(function (evt) { + inst.close(pane); + evt.stopPropagation(); + }); + return inst; + } + + /** + * Add a custom Pin button for a pane + * + * Four classes are added to the element, based on the paneClass for the associated pane... + * Assuming the default paneClass and the pin is 'up', these classes are added for a west-pane pin: + * - ui-layout-pane-pin + * - ui-layout-pane-west-pin + * - ui-layout-pane-pin-up + * - ui-layout-pane-west-pin-up + * + * @param {Object} inst Layout Instance object + * @param {(string|!Object)} selector jQuery selector (or element) for button, eg: ".ui-layout-north .toggle-button" + * @param {string} pane Name of the pane the pin is for: 'north', 'south', etc. + */ +, addPin: function (inst, selector, pane) { + var _ = $.layout.buttons + , $E = _.get(inst, selector, pane, "pin"); + if ($E.length) { + var s = inst.state[pane]; + $E.click(function (evt) { + _.setPinState(inst, $(this), pane, (s.isSliding || s.isClosed)); + if (s.isSliding || s.isClosed) inst.open( pane ); // change from sliding to open + else inst.close( pane ); // slide-closed + evt.stopPropagation(); + }); + // add up/down pin attributes and classes + _.setPinState(inst, $E, pane, (!s.isClosed && !s.isSliding)); + // add this pin to the pane data so we can 'sync it' automatically + // PANE.pins key is an array so we can store multiple pins for each pane + s.pins.push( selector ); // just save the selector string + } + return inst; + } + + /** + * Change the class of the pin button to make it look 'up' or 'down' + * + * @see addPin(), syncPins() + * + * @param {Object} inst Layout Instance object + * @param {Array.} $Pin The pin-span element in a jQuery wrapper + * @param {string} pane These are the params returned to callbacks by layout() + * @param {boolean} doPin true = set the pin 'down', false = set it 'up' + */ +, setPinState: function (inst, $Pin, pane, doPin) { + var updown = $Pin.attr("pin"); + if (updown && doPin === (updown=="down")) return; // already in correct state + var + pin = inst.options[pane].buttonClass +"-pin" + , side = pin +"-"+ pane + , UP = pin +"-up "+ side +"-up" + , DN = pin +"-down "+side +"-down" + ; + $Pin + .attr("pin", doPin ? "down" : "up") // logic + .attr("title", doPin ? lang.Unpin : lang.Pin) + .removeClass( doPin ? UP : DN ) + .addClass( doPin ? DN : UP ) + ; + } + + /** + * INTERNAL function to sync 'pin buttons' when pane is opened or closed + * Unpinned means the pane is 'sliding' - ie, over-top of the adjacent panes + * + * @see open(), close() + * + * @param {Object} inst Layout Instance object + * @param {string} pane These are the params returned to callbacks by layout() + * @param {boolean} doPin True means set the pin 'down', False means 'up' + */ +, syncPinBtns: function (inst, pane, doPin) { + // REAL METHOD IS _INSIDE_ LAYOUT - THIS IS HERE JUST FOR REFERENCE + $.each(state[pane].pins, function (i, selector) { + $.layout.buttons.setPinState(inst, $(selector), pane, doPin); + }); + } + + +, _load: function (inst) { + var _ = $.layout.buttons; + // ADD Button methods to Layout Instance + // Note: sel = jQuery Selector string + $.extend( inst, { + bindButton: function (sel, action, pane) { return _.bind(inst, sel, action, pane); } + // DEPRECATED METHODS + , addToggleBtn: function (sel, pane, slide) { return _.addToggle(inst, sel, pane, slide); } + , addOpenBtn: function (sel, pane, slide) { return _.addOpen(inst, sel, pane, slide); } + , addCloseBtn: function (sel, pane) { return _.addClose(inst, sel, pane); } + , addPinBtn: function (sel, pane) { return _.addPin(inst, sel, pane); } + }); + + // init state array to hold pin-buttons + for (var i=0; i<4; i++) { + var pane = $.layout.config.borderPanes[i]; + inst.state[pane].pins = []; + } + + // auto-init buttons onLoad if option is enabled + if ( inst.options.autoBindCustomButtons ) + _.init(inst); + } + +, _unload: function (inst) { + // TODO: unbind all buttons??? + } + +}; + +// add initialization method to Layout's onLoad array of functions +$.layout.onLoad.push( $.layout.buttons._load ); +//$.layout.onUnload.push( $.layout.buttons._unload ); + + + +/** + * jquery.layout.browserZoom 1.0 + * $Date$ + * + * Copyright (c) 2012 + * Kevin Dalman (http://allpro.net) + * + * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html) + * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses. + * + * @dependancies: UI Layout 1.3.0.rc30.1 or higher + * + * @support: http://groups.google.com/group/jquery-ui-layout + * + * @todo: Extend logic to handle other problematic zooming in browsers + * @todo: Add hotkey/mousewheel bindings to _instantly_ respond to these zoom event + */ + +// tell Layout that the plugin is available +$.layout.plugins.browserZoom = true; + +$.layout.defaults.browserZoomCheckInterval = 1000; +$.layout.optionsMap.layout.push("browserZoomCheckInterval"); + +/* + * browserZoom methods + */ +$.layout.browserZoom = { + + _init: function (inst) { + // abort if browser does not need this check + if ($.layout.browserZoom.ratio() !== false) + $.layout.browserZoom._setTimer(inst); + } + +, _setTimer: function (inst) { + // abort if layout destroyed or browser does not need this check + if (inst.destroyed) return; + var o = inst.options + , s = inst.state + // don't need check if inst has parentLayout, but check occassionally in case parent destroyed! + // MINIMUM 100ms interval, for performance + , ms = inst.hasParentLayout ? 5000 : Math.max( o.browserZoomCheckInterval, 100 ) + ; + // set the timer + setTimeout(function(){ + if (inst.destroyed || !o.resizeWithWindow) return; + var d = $.layout.browserZoom.ratio(); + if (d !== s.browserZoom) { + s.browserZoom = d; + inst.resizeAll(); + } + // set a NEW timeout + $.layout.browserZoom._setTimer(inst); + } + , ms ); + } + +, ratio: function () { + var w = window + , s = screen + , d = document + , dE = d.documentElement || d.body + , b = $.layout.browser + , v = b.version + , r, sW, cW + ; + // we can ignore all browsers that fire window.resize event onZoom + if ((b.msie && v > 8) + || !b.msie + ) return false; // don't need to track zoom + + if (s.deviceXDPI) + return calc(s.deviceXDPI, s.systemXDPI); + // everything below is just for future reference! + if (b.webkit && (r = d.body.getBoundingClientRect)) + return calc((r.left - r.right), d.body.offsetWidth); + if (b.webkit && (sW = w.outerWidth)) + return calc(sW, w.innerWidth); + if ((sW = s.width) && (cW = dE.clientWidth)) + return calc(sW, cW); + return false; // no match, so cannot - or don't need to - track zoom + + function calc (x,y) { return (parseInt(x,10) / parseInt(y,10) * 100).toFixed(); } + } + +}; +// add initialization method to Layout's onLoad array of functions +$.layout.onReady.push( $.layout.browserZoom._init ); + + + +})( jQuery ); \ No newline at end of file diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-anim_basic_16x16.gif b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-anim_basic_16x16.gif new file mode 100644 index 0000000000000000000000000000000000000000..085ccaecaf5fa5c34bc14cd2c2ed5cbbd8e25dcb GIT binary patch literal 1553 zcma)+TTl~c6vwlh>nb99Af5rT)t{mCEg5urg=A(g z{C|6SPb~9Xage|wB`SrZk2FOMYM!buln2sX?5Y+T78iB(Zu9cS7|LZyZ++}u$^oi1 z_j@S}bW9OzU2R+RMy&~OT>X-oZ98$jq#ogNfJ!BM-42wHGZk*6s2KD}U*IA%epmxb zm}|6BK9YoIF;*xSL!+z@<64lB7->LTW2Vi4ostCA(z&2XniwNIv}fFo-`MbG;)u4G z^p@F!)|9HhZprHd_vXjDoxs6WkK-6P0@lfxnGT>*p(QHoUV=u1FAqb@b%*W=a3{`LsH5k^AvQNL>6fPpy#oU(&MuH(*aEX4b35*} zn4n7)`I2U%=+Z=?BVZQ?vjQFW4gD@~XSOO6b{qu81`4&LFuU2(ilxW+1|ZkNMnWe79C$gs zWT?Ele|HR{JGPe)5BTW>0Ey?-Ls6S#GoV0tbt6ku7B&*0 z;i9QM$W1Rj*rRIdceL)rAOSl+sDe3LkB87<%){;ZdHp6|SNlopDXRx< zxBDF9-lTo&v`8$humFygUij@qgT=Qzhj8{ym2-{Xciwqq_Xwk%=O3B-MNAL_6e`3U zyxwmXex4`g0^1RYw~Dth3av3Dl^AAlpO3mG!nLr#&ZZ7c_wUboI+deC+&%TFjK2Lm z!Y&f1h|T_On%RCV&=4bx`!>(YezqGVhl&QpED?N6GV)HmzJ9&rh$x*i?*@o9#6QI< z5ZI_MRX;0+pY8$`j)eF#TlUyG(eE%E7S!rj;mj^M5vhUicPm zVWQ2z+imFyg}SRABmOBY_@osR!>7Ov!ioK`NB6_Rv}7Ud?35ed5Sb@?yND?kv~RCa wqs^a3Sh>&&L4)!LKI?D2&k@))k(LESaga|C278ChSzn3NWVkcuNoY&{0f?~U_5c6? literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_0_aaaaaa_40x100.png b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_55_fbec88_40x100.png b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_55_fbec88_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..47acaadd737478ddb090f47f618810712163317b GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*Fsaj7L$B>N1x91EQ8x$BA993)+ za~~)OO5|O5sDCi_{N8&XlRv*c;OQ6|AR59NN?mFzWBXJVGojypu|S6~c)I$ztaD0e F0syyrGF|`x literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_75_d0e5f5_1x400.png b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_75_d0e5f5_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..9d149b1c61fdee2de5cb342741c243abb9058bb3 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAGVZ#9R3S1u{Kd978O6pI&z4VlotPxp?2+ z_9ElQf7546?+BK3Q+%u|q&R!~TD`8c>Nm?7lq=+T^Fw3At=o;a{QQ?&v0rW43t78u zKLhT~Z`;~2oo9{ezlW>%eD?g@v!}03FhOcY)5-`I-U~CHGCzC3{y9?4*Y0Z~JJ3=F MPgg&ebxsLQ09`{nxc~qF literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_85_dfeffc_1x400.png b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_85_dfeffc_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..014951529c315d6042e72febc310a4d2db5b4a82 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq?|lm978O6-<~(*YA_IRxoBVf zfAX@vsV!R#l$@#*eLnw)_Sv|_?i7P!ORnX)SxaXh+BPpZ!Fw~yjr&#G|Jw^YMHDhV X&EsZx`7bsSXc~j3tDnm{r-UW|&(SK+ literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_95_fef1ec_1x400.png b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..4443fdc1a156babad4336f004eaf5ca5dfa0f9ab GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hIh978O6-<~(*YA|4MzBvER z|7}eQtdCVXoUc2b{PaWeaIKu7gJx>{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..81ecc362d50ef5abbc0420aacd5345822f1f6098 GIT binary patch literal 3457 zcmb7Hc~FyQ{ttEAS{+2H6+w~K2vj0cZV^b5fVt)XuC7JvopV${pbC@&olEr?>nFQTyMtr zt`4e4w2lA(097YPI}ZRrWlMPjVS53Hs9(fjYkM{>RDl)}YR#{PI{UAXZZ)e7~Wr)BPK4TRcVqm-}EA=rOqdBHQ7fG}5`;N!#WGTYp3F`bEb2my*vF(>I zKqcn9+(yT|Zo>xNL6U)j@WJ-m|9JBc{X&|g06KY<5Vn-3g!f3!7zIEeDwx{*>rJf?MGbRV3&=hgpu4$Sz=YF`qNtN`$D^h1QdwMxGr% zZ3amx2KVP-^P=*M9Hjn*h$;!RZn7^TdN8I-D@%_o4G@Cv=J?bBDXND0bn~jt$r97v z`wte$jnvS&pZ6PMetmn99+6T9P7(Oj-P$m%4B#~atw`D|}>FjiMd#aasA=AiC!kx=f!;*(7XLHJ;FfclH-IIS2+{z=mLvYTEdt#Y}|;8MFIF zHGfd?g;afd-z(1Bl5m@6k`^rcueYCndy(aRcp#_C+6}fQTXhe`zQ)K`HhX)OaU9xCZ_0{kd zB3o7D{o6=8lfJK*$+0~T+UBP6<0EMGw``EV;9(wBBe^{RlHOt$hMu!u4W7%_MCLo9s-?$$rb)w; zDo_c$xHPv1A-TWmTka<+F!#-PR(N!bZqy5-kymvzt+}*y(v|n7^ZikoLW-T=oswho zY0G;K`#%Tk23+#XV@=VfkYQ&_SaQLOvYw(8OkM!2&4xv}0<*9|t515=TqrAX^Y^8X zhQ=u666u7SkBaJkr!OsKTT^f$0pe-6B?01p*;z(P3vGEi2RoOfK(5EIvkEQyS5vr) z)`6aVPW*sg$c?E?)_mb&;sJOiYsi6k)R}5QaBM{Yt#g?lD}HfVNJ4yN7eXTX57kzY zA&dN6R3?GaQ~5Bv7jEaC%z4i6@sfp^02e2;SQ=;g?9E(ZSZBTSh3rC**wVV2>$@Wc zmCO|s-InBMs}XWmuUZoW2#Ox9%r*Vtrv6%EPC|p5E}>k6+!^UXUvB>YExTrrIP+d0 z@zP{o$yU`2ae$H7ty|oFUm!vNi_Gr`sQ+Mq=H+d4%qVIkI>8)(1%RmZr zFBTjIZk7Ah`yYc2h^?-N^xFi;(uzm&Fc&-11QBVFN zlDzAlF}Xa!IaN;%tl;Y4bCxxq{2D>+x>Q#S+6xL1Lgxy`er;oR)@h6#1*OO=+^Cxk z<}cRUBMX-&8L>yfue%wld&E%zj}Cd41RtLZqr9XT3KN`_PO_`l7JO}*!Hl$rN)MkR zN^stHb6!J*uZ$FXY3yFM*ZT7z`9i`woFRodIsd4LcfJBWamv*MFk=&V4eJFyvPPlb zxEKy|pGcIS5HK2_xH)`uy0?`;K6fgpl0=`_k7hRJi$_-QuUm0dB!ONw*G5D29#ibZ1R? zsGL((=KR|&B3^!dV4`0avoJ7@qiR1DQ~hin`rb-{UwM)g4=xpjG&1RIt84O6;;y;4 zn~?#9?S)IZJ~|vL0HFK<<4Jpzj?)dFa{-yIm!NMZ?8V1Rzc&tN+Q;Pm;sNY&B58(|A}8 zI!;7h)hD5l#{)^z4=&rzKEqOa9pcLIG?_P!tl4}GGSTL3gW%WP$$3l|hW8)|{!1T{jBfHF3gp50 z!s>p`h;Ph?T9tNEIlfUz{r1BO{N%ls(-ojZW%Js#_@VbhJ@_;A1m>0#A1P~u*Q-C0 zZYKFdKl|n0&G*3oAM~=jK7RDUQ1J)#m*z1}FudlR-%M;0rO3v@KZ}%=TIiqx$eRMLP8buA!H{z0{I$a=Y_&JgXnwdW9(26fjVHP#uYm>|0(Tqv_zQk*@iV*s6box`l# zsWn(Z%0l9D(<{@$D;EDKM1Q*Z%!v=>^3OIj93?rVrTpxqnPFH2+KVgU96SxOor-p5 z1z(S_ehrVo8*jCkX|k6d-eY6g(>1=qHn-avlCyf8z~O00j7qTmY>j#WO?=)`{xv^2AxjfI6 zQtwjz+u;O*wyv^NHzftX*P*ZQU-Z zJ!I~SvPUm)V~iTy*cD{R1uKr?VG(j4SL?)9bGz(3bbknGhpOD*>^`F-7tK$IOhv#Q z5IPW%I(RyG^9}D%Wj7Ffdq?(WDxbZ9a%cUT_;39?olYP2-@q^TiA&OMX&RT01)BWm zm6fr?+1NG3VChXc^I*p6Y17!m;YR9PcbcV%WjQ5c(WbD8xpF6fOEmy?nZjM{*TaoB z_N~rgpNpuc8u1g|1nnTiT6HQtH-lR6_JvH88n4yQy2Jck9DKf_b(RZSFo50p3I{^_9#FH@g zg*dDNvGk3SHk&VTv&!)=AqYe}B&9CWHGltuWdHF8BiQRId=K(;*}1R+}Z$C%HZkh=d#Wzp$Pz8A{XNT literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_217bc0_256x240.png b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_217bc0_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4bd87c041453ef037c4a9a1a698f0105d02eba GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_2e83ff_256x240.png b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..09d1cdc856c292c4ab6dd818c7543ac0828bd616 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_469bdd_256x240.png b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_469bdd_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..bd2cf079add1ca236adeb509698adabbffb08acb GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_f9bd01_256x240.png b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_f9bd01_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c53cb11904843e176e4ce1f4e7247cd90b3590 GIT binary patch literal 5355 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 t>_S@PWkKlK01oMw@pjEVpN literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder-closed.gif b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder-closed.gif new file mode 100644 index 0000000000000000000000000000000000000000..be6b59c2bafc37724de6a8904caf8ddb52185f07 GIT binary patch literal 631 zcmV--0*L)bNk%w1VGsZi0OoZ7Zc+gM@owbb(D(J~{kRkV=)C^@`FC9q$-khblVJYv z)5ozv$hAcOfX1|Jz_gHwZxsLR$M*H` z)5VgcjVaB&g#X~Bn}|^6)K>kvApXNk{?U8w>frwL-;#Ym&AMUr=V$)PW&YTa>#Gp{ z$5^hOaMH=J$FMm5$62+73I57t#-KOer4h}bD~WS3yQMU?q;vkxak`{N&AEBc#G?Jc zKK|H{jB+E}qY%KYW|e?Jt%4WhuRrYIzx}uttbPdi>1gcRT)?bi*~ygsy)VYKbl=sl z!LDb`w?4L^YVzd5|KO(4ze~WaWw4)Z<=wvhxEIZ>RsZvV+R0MBjTPX{P^5)3t(IEZ zo(`LK71O>%%$yd@ws6O^WdH2Q^sy2D_NBk8J;AJDcUuPR<<6~{Vg0!m{?dHMvTC`j zfZ5BO|NGMa|Nj6000000000000000000000000000000000000A^8LW004CWEC2ui z01yBW06+)SfOUcbFM}==AarS4f^`T0To+{@4nGeh6)G`B2p9kiNn<+@0|r=5Yepst zIgKY#WJd%9EJPL?t^m4h5ez8-Aqy8z25mic2N?k#R&i4b8U+nh4l7`S2^}ajGc6+$ z6C!V6UyXu5K{9S7=8Z222f8;D0KLCn3s7|l^;H1@N?@2FHGqSVIadS#=nw*efr3kz ztU4o2N*xdYmhp(zfYOQwaCBG@bU+OXEtfKR^UfI%4+*Z?OY3oS7i+9AMEg8&*N RE^xJLBxeY_p@ISd06U6)DM0`L literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder.gif b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..be6b59c2bafc37724de6a8904caf8ddb52185f07 GIT binary patch literal 631 zcmV--0*L)bNk%w1VGsZi0OoZ7Zc+gM@owbb(D(J~{kRkV=)C^@`FC9q$-khblVJYv z)5ozv$hAcOfX1|Jz_gHwZxsLR$M*H` z)5VgcjVaB&g#X~Bn}|^6)K>kvApXNk{?U8w>frwL-;#Ym&AMUr=V$)PW&YTa>#Gp{ z$5^hOaMH=J$FMm5$62+73I57t#-KOer4h}bD~WS3yQMU?q;vkxak`{N&AEBc#G?Jc zKK|H{jB+E}qY%KYW|e?Jt%4WhuRrYIzx}uttbPdi>1gcRT)?bi*~ygsy)VYKbl=sl z!LDb`w?4L^YVzd5|KO(4ze~WaWw4)Z<=wvhxEIZ>RsZvV+R0MBjTPX{P^5)3t(IEZ zo(`LK71O>%%$yd@ws6O^WdH2Q^sy2D_NBk8J;AJDcUuPR<<6~{Vg0!m{?dHMvTC`j zfZ5BO|NGMa|Nj6000000000000000000000000000000000000A^8LW004CWEC2ui z01yBW06+)SfOUcbFM}==AarS4f^`T0To+{@4nGeh6)G`B2p9kiNn<+@0|r=5Yepst zIgKY#WJd%9EJPL?t^m4h5ez8-Aqy8z25mic2N?k#R&i4b8U+nh4l7`S2^}ajGc6+$ z6C!V6UyXu5K{9S7=8Z222f8;D0KLCn3s7|l^;H1@N?@2FHGqSVIadS#=nw*efr3kz ztU4o2N*xdYmhp(zfYOQwaCBG@bU+OXEtfKR^UfI%4+*Z?OY3oS7i+9AMEg8&*N RE^xJLBxeY_p@ISd06U6)DM0`L literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black-line.gif b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-black-line.gif new file mode 100644 index 0000000000000000000000000000000000000000..e5496877a07487f2f7437a9f87e07c590b51160a GIT binary patch literal 1877 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 literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray-line.gif b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray-line.gif new file mode 100644 index 0000000000000000000000000000000000000000..37600447dc002bbc0dd16e1391b711360aae2e34 GIT binary patch literal 1877 zcmeH``8OK|0LL@bF~qSc#n50?JXNI+k>{#)#go3O{g`&sTA06+?`JRv{%1VB*=kSggPTmbZ?E2@Hm10RaqGJr~M_swEK9(fuU z9bXMur@nY#Xn3Qp;v6X2AT> zA>EM+>y@m1^a49s_E1X&+bZH^!_a=e{N6Su)s&U>sDnd!~=b?JFEB#FT8 zioZMFaK52~t&52oqdWW~2MJ1ue%%?en#qCfU7u!nC|sSJi5E`}X3h8)ly{+5*|mp+ zYqNE`8MkZN-)k};oze-j%*tB&sNuZif|=0wM%!=l0sXF(V)Zg+3_ zjbW;EBEX2ytHG=$Dx2Ha{HE%5V3a1hHnd2R32m%R*9#gFWf^4tEW&~!6yIiV)*e*l zireg~b4-8KL1b9Tn<4TQc-aUN7>=bBxE!0Aep)ES$dA>bZ zlac_>GSf$}Amq|xpG2f_X<$)PU0E=BExZ&}FuYP8&bwD%fgJCOsK5%!A}jIpO{>+( zGV75wBp|A>JOyOlNY1dq-7SE-P1iq3bVQx6%Yk<{*5}84F?-+_`Yq}S#U}_=SCzX? zX`+&GsCqhDsvFh7AWWM#ck=(Rps}W(-f3)-hf$w$i>58wymeug)RAsnbE^=j9L-?f zpi-Z);Tuuyqj4L}9YcZxTIWO&p4K%*X3?0-?f4ef8jtm%XgkyEBd6Ds8uOK?%`{)>0D(Cr`A4IcZoG`&U18YKqjoYtzQo|Dt=**7zk597IbK9sJXFyhNi zwtW@gRcSW?gGKMW@kxrlG#OY-do~qJ*-V&3Js8`Y3GYwom_@$iB+g=ml}U5>1u1QR zAzAiA(jrL>&74Uwwqm}`xJ1AT;O_GsONn5#!*ULyhq;oEIkp%2g#mF(6lf@Jxhn4i zV~t87;8y4{2KZG5ao+KL=SUTJlQq*4|E@_PjJ3`!o(GG)^}?JsMpy*)mQYPCf1;Sk`8-A8at@Xm#Gb>oe(v%3b{156)aykj?nu&|IbZfh z!lZx$?iVd}BHwuNSkmco3iwy5Drr$xV-lid6PqT(u95$N>8c#Jm2RMN_SB1WJe9Oq z(x$uU@TQLQX@QVr>U~Sa;vEmbZ_QL7odp^*-BsqVXSqmf)oqYES3tl*66F0YO=#d1 rlgk$~puxAlhuJ^ZHqgioD1o1DVtQEUit~KllU0$5nh)jV0N{TCC3Zqn literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray.gif b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray.gif new file mode 100644 index 0000000000000000000000000000000000000000..cfb8a2f0961b880d9ecc9e59f831d0c0bf9d06db GIT binary patch literal 1230 zcmZ?wbhEHbOkikb_|5F}1vNN-#bFE}n2rob1X65+pkEe*DZwLSXy)sc-G6LrLE|#j%ny@ltx#{|>*k3`b zudj+f+$8$@s#fHh^zF++cYjOsT#=i)PgZ*SBbQFk<=6g7TzYe_x%fYqoR5WW_>5Nf zsIRkcJbHA@c(c>D3XzqU)=k#8J9nngIK5|{y|vw$2$RE?mT4~XtDRLEe|<_~c?_?$ zLGJZ!!S{W4%zp58Z=>w%X})`Qe0&`0sXRUALwVLJuj#KvHA1S2+ow&BYJYdfr2O^1 zna!)!@5=7^`T51=)#j2iwbhrWRX*39_q(R{^Y??#w#k`8!n#b?Ah=gT4^b_6Je!p-pqnUi6)T{Kw4)JLb3tD)cb}Z;R&ALM=NKo^J zQum3S7LQAK7iB!^v-vhdvhxz-&N&k%mqtvOXdV2 literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red-line.gif b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red-line.gif new file mode 100644 index 0000000000000000000000000000000000000000..df9e749a8f1f58862588efc64988003efad01d51 GIT binary patch literal 1877 zcmeH``BxGK0LPh{$5cGF%CuRcF0W^1+Eb91Y0har@ns%QJPI-bCps}CP-u#GY96he zH{=x}8cR_?6wMSBHp}~@d8B5Ec_ztT`#0A2hwu02&*#0br`JzT&Np-c8>+j2FWJW9 z|J$$i)xiJGfXTkfHvoVFVDp9i%O?Qp3V=f6d5==7Sk4KMl>Ucik`YxtvJ<)$%#TPKR% zdeBegW3Nr-TZ$_DvX!7#=EQu`)|{{_NO4?Hnuz--`I}N3UjF&+?uwLk+=>GJd{B_Tc2OKbjN9H> z96NPSF%oo|+^NT@plDh-RsN>!ws$&N>eV+-RSK`GN-+xQlcpP|{VXMbZmGY?Sg+bE z&yqDeRb-m~Xn;($Rkc9os0lNWR0x7V&viYtFw425?`)O{#Xnxi^Z-rV%z`xuPf1K3U`ignx^9LiY{9RF`M1 z((4&CBBq9gRTxIqvdNQH4XvU-teM=&r#I{BRpE@Mf`UowW*aYDTj; zR~d}wJj7bmv%$EvhL%3@95+YnP@jZFjkyaK?LZqem&Cp}E@#J}7%>obDszfKXbSed{!N zqe%A5h1G9<<|OWgt(pyPNUi%mt_OllWQ$!DHV#9VzJogSLla83`aMi%;zcml$vXr7 zf<%YcL08HgN8s@2tufz(==0;jh0Ny@q4f1T-P5MdE9;FzHSA-Pm3Wn^KX5K-#%-h+YndE*c}A#} z97|nymmXX*xOhw~p_=<#*Rp;q1c;i_)TkyvQ;xgVtY5mTyh_&|ZEzU`%%?)%UDt;N sUpBjNE)^Df<9oQ%i{r+6SwTgJWAz*lYeQMK?>m|{T3!EviV6VoFXq=mv;Y7A literal 0 HcmV?d00001 diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red.gif b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/images/treeview-red.gif new file mode 100644 index 0000000000000000000000000000000000000000..3bbb3a157f1568d59d6db02b55a3b3fe9a1ff7a7 GIT binary patch literal 1230 zcmZ?wbhEHbOkikb_|5q9rFMYXq;dkzBCUd%AXV z7f->2WoKqf=UU0E5MF-1&C2oHA5RfQ-wyu&du5`wWCYCfT`X0jHDP7Qa?|x$vA=>= zUtbk}xJmT)RjtT1>D!lu?*5kMxgs}ppRDxuM=qV7%dh>Fxb)^;bMb#JIUft%@ENV{ zQD0}@c=YI)@n)xQ6(TDyt(&ZGckWD~aeB`@duzKh5hjN(Ez?}&S39dT{`!=}@)%xg zgWT)eg75q8nEl}G-bUHi(|q^r`1m-~Q+ayKhw`jdUejNTYJ^l3w@;fM)&A~|N%`x2 zGn-ed-<93-^Ye?#tIZ{4YO60#t9-6I?{`h@=kEuf$II8+R(@HSYaUSgyf$2+OgK}0 zZsRjUi+L5dHILtK5edt9=qI|b{eIzIMl<7PRm>?O4!tnstX#kf7!b zrS20uEgqNfF3Nb+XY*}_WalNuopUBkE{&Kl(L5+ZuF(6`HI*Fyu5b4nE$kweHiYk+ hA)Dse=Ki!azG~*body { + font-size: 16px; + font-size: 68.75%; +} Reset Base Font Size */ + /* +body { + font-family: Verdana, helvetica, arial, sans-serif; + font-size: 68.75%; + background: #fff; + color: #333; +} */ + +a img { border: none; } \ No newline at end of file diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.min.js b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.min.js new file mode 100644 index 000000000..f9b490d3e --- /dev/null +++ b/xs/src/avrdude/atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.min.js @@ -0,0 +1,16 @@ +/* + * Treeview 1.4 - jQuery plugin to hide and show branches of a tree + * + * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/ + * http://docs.jquery.com/Plugins/Treeview + * + * Copyright (c) 2007 Jörn Zaefferer + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Revision: $Id$ + * kasunbg: changed the cookieid name + * + */;(function($){$.extend($.fn,{swapClass:function(c1,c2){var c1Elements=this.filter('.'+c1);this.filter('.'+c2).removeClass(c2).addClass(c1);c1Elements.removeClass(c1).addClass(c2);return this;},replaceClass:function(c1,c2){return this.filter('.'+c1).removeClass(c1).addClass(c2).end();},hoverClass:function(className){className=className||"hover";return this.hover(function(){$(this).addClass(className);},function(){$(this).removeClass(className);});},heightToggle:function(animated,callback){animated?this.animate({height:"toggle"},animated,callback):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();if(callback)callback.apply(this,arguments);});},heightHide:function(animated,callback){if(animated){this.animate({height:"hide"},animated,callback);}else{this.hide();if(callback)this.each(callback);}},prepareBranches:function(settings){if(!settings.prerendered){this.filter(":last-child:not(ul)").addClass(CLASSES.last);this.filter((settings.collapsed?"":"."+CLASSES.closed)+":not(."+CLASSES.open+")").find(">ul").hide();}return this.filter(":has(>ul)");},applyClasses:function(settings,toggler){this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event){toggler.apply($(this).next());}).add($("a",this)).hoverClass();if(!settings.prerendered){this.filter(":has(>ul:hidden)").addClass(CLASSES.expandable).replaceClass(CLASSES.last,CLASSES.lastExpandable);this.not(":has(>ul:hidden)").addClass(CLASSES.collapsable).replaceClass(CLASSES.last,CLASSES.lastCollapsable);this.prepend("

      ").find("div."+CLASSES.hitarea).each(function(){var classes="";$.each($(this).parent().attr("class").split(" "),function(){classes+=this+"-hitarea ";});$(this).addClass(classes);});}this.find("div."+CLASSES.hitarea).click(toggler);},treeview:function(settings){if(typeof(window.treeCookieId) === 'undefined' || window.treeCookieId === ""){treeCookieId = "treeview";} settings=$.extend({cookieId: treeCookieId},settings);if(settings.add){return this.trigger("add",[settings.add]);}if(settings.toggle){var callback=settings.toggle;settings.toggle=function(){return callback.apply($(this).parent()[0],arguments);};}function treeController(tree,control){function handler(filter){return function(){toggler.apply($("div."+CLASSES.hitarea,tree).filter(function(){return filter?$(this).parent("."+filter).length:true;}));return false;};}$("a:eq(0)",control).click(handler(CLASSES.collapsable));$("a:eq(1)",control).click(handler(CLASSES.expandable));$("a:eq(2)",control).click(handler());}function toggler(){$(this).parent().find(">.hitarea").swapClass(CLASSES.collapsableHitarea,CLASSES.expandableHitarea).swapClass(CLASSES.lastCollapsableHitarea,CLASSES.lastExpandableHitarea).end().swapClass(CLASSES.collapsable,CLASSES.expandable).swapClass(CLASSES.lastCollapsable,CLASSES.lastExpandable).find(">ul").heightToggle(settings.animated,settings.toggle);if(settings.unique){$(this).parent().siblings().find(">.hitarea").replaceClass(CLASSES.collapsableHitarea,CLASSES.expandableHitarea).replaceClass(CLASSES.lastCollapsableHitarea,CLASSES.lastExpandableHitarea).end().replaceClass(CLASSES.collapsable,CLASSES.expandable).replaceClass(CLASSES.lastCollapsable,CLASSES.lastExpandable).find(">ul").heightHide(settings.animated,settings.toggle);}}function serialize(){function binary(arg){return arg?1:0;}var data=[];branches.each(function(i,e){data[i]=$(e).is(":has(>ul:visible)")?1:0;});$.cookie(settings.cookieId,data.join(""));}function deserialize(){var stored=$.cookie(settings.cookieId);if(stored){var data=stored.split("");branches.each(function(i,e){$(e).find(">ul")[parseInt(data[i])?"show":"hide"]();});}}this.addClass("treeview");var branches=this.find("li").prepareBranches(settings);switch(settings.persist){case"cookie":var toggleCallback=settings.toggle;settings.toggle=function(){serialize();if(toggleCallback){toggleCallback.apply(this,arguments);}};deserialize();break;case"location":var current=this.find("a").filter(function(){return this.href.toLowerCase()==location.href.toLowerCase();});if(current.length){current.addClass("selected").parents("ul, li").add(current.next()).show();}break;}branches.applyClasses(settings,toggler);if(settings.control){treeController(this,settings.control);$(settings.control).show();}return this.bind("add",function(event,branches){$(branches).prev().removeClass(CLASSES.last).removeClass(CLASSES.lastCollapsable).removeClass(CLASSES.lastExpandable).find(">.hitarea").removeClass(CLASSES.lastCollapsableHitarea).removeClass(CLASSES.lastExpandableHitarea);$(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings,toggler);});}});var CLASSES=$.fn.treeview.classes={open:"open",closed:"closed",expandable:"expandable",expandableHitarea:"expandable-hitarea",lastExpandableHitarea:"lastExpandable-hitarea",collapsable:"collapsable",collapsableHitarea:"collapsable-hitarea",lastCollapsableHitarea:"lastCollapsable-hitarea",lastCollapsable:"lastCollapsable",lastExpandable:"lastExpandable",last:"last",hitarea:"hitarea"};$.fn.Treeview=$.fn.treeview;})(jQuery); \ No newline at end of file diff --git a/xs/src/avrdude/atmel-docs/EDBG/common/main.js b/xs/src/avrdude/atmel-docs/EDBG/common/main.js new file mode 100644 index 000000000..96b6a86c6 --- /dev/null +++ b/xs/src/avrdude/atmel-docs/EDBG/common/main.js @@ -0,0 +1,282 @@ +/** + * Miscellaneous js functions for WebHelp + * Kasun Gajasinghe, http://kasunbg.blogspot.com + * David Cramer, http://www.thingbag.net + * + */ + +//Turn ON and OFF the animations for Show/Hide Sidebar. Extend this to other anime as well if any. +var noAnimations=false; + +$(document).ready(function() { + + /* Local addition */ + $("a").filter(function() { + return this.hostname && this.hostname !== location.hostname; + }).addClass('external'); + + // When you click on a link to an anchor, scroll down + // 105 px to cope with the fact that the banner + // hides the top 95px or so of the page. + // This code deals with the problem when + // you click on a link within a page. + $('a[href*=#]').click(function() { + if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') + && location.hostname == this.hostname) { + var $target = $(this.hash); + $target = $target.length && $target + || $('[name=' + this.hash.slice(1) +']'); + if (!(this.hash == "#searchDiv" || this.hash == "#treeDiv" || this.hash == "") && $target.length) { + var targetOffset = $target.offset().top - 120; + $('html,body') + .animate({scrollTop: targetOffset}, 200); + return false; + } + } + }); + + // $("#showHideHighlight").button(); //add jquery button styling to 'Go' button + //Generate tabs in nav-pane with JQuery + $(function() { + $("#tabs").tabs({ + cookie: { + expires: 2 // store cookie for 2 days. + } + }); + }); + + //Generate the tree + $("#ulTreeDiv").attr("style", ""); + $("#tree").treeview({ + collapsed: true, + animated: "medium", + control: "#sidetreecontrol", + persist: "cookie" + }); + + //after toc fully styled, display it. Until loading, a 'loading' image will be displayed + $("#tocLoading").attr("style", "display:none;"); + // $("#ulTreeDiv").attr("style","display:block;"); + + //.searchButton is the css class applied to 'Go' button + $(function() { + $("button", ".searchButton").button(); + + $("button", ".searchButton").click(function() { + return false; + }); + }); + + //'ui-tabs-1' is the cookie name which is used for the persistence of the tabs.(Content/Search tab) + if ($.cookie('ui-tabs-1') === '1') { //search tab is active + if ($.cookie('textToSearch') != undefined && $.cookie('textToSearch').length > 0) { + document.getElementById('textToSearch').value = $.cookie('textToSearch'); + Verifie('searchForm'); + searchHighlight($.cookie('textToSearch')); + $("#showHideHighlight").css("display", "block"); + } + } + + syncToc(); //Synchronize the toc tree with the content pane, when loading the page. + //$("#doSearch").button(); //add jquery button styling to 'Go' button + + // When you click on a link to an anchor, scroll down + // 120 px to cope with the fact that the banner + // hides the top 95px or so of the page. + // This code deals with the problem when + // you click on a link from another page. + var hash = window.location.hash; + if(hash){ + var targetOffset = $(hash).offset().top - 120; + $('html,body').animate({scrollTop: targetOffset}, 200); + return false; + } +}); + + +/** + * If an user moved to another page by clicking on a toc link, and then clicked on #searchDiv, + * search should be performed if the cookie textToSearch is not empty. + */ +function doSearch() { +//'ui-tabs-1' is the cookie name which is used for the persistence of the tabs.(Content/Search tab) + if ($.cookie('textToSearch') != undefined && $.cookie('textToSearch').length > 0) { + document.getElementById('textToSearch').value = $.cookie('textToSearch'); + Verifie('searchForm'); + } +} + +/** + * Synchronize with the tableOfContents + */ +function syncToc() { + var a = document.getElementById("webhelp-currentid"); + if (a != undefined) { + //Expanding the child sections of the selected node. + var nodeClass = a.getAttribute("class"); + if (nodeClass != null && !nodeClass.match(/collapsable/)) { + a.setAttribute("class", "collapsable"); + //remove display:none; css style from