Compare commits

..

1,521 commits

Author SHA1 Message Date
Stephan I. Böttcher
0c1d46eadb Merge branch 'main' into slowudev 2025-04-14 14:49:01 +02:00
stefanrueger
118625e18b
Fix misleding error message 2025-04-08 15:03:17 +02:00
stefanrueger
14bfbd472e
Update NEWS 2025-03-24 15:08:45 +01:00
Stefan Rueger
c29f8d130b
Merge pull request #1965 from stefanrueger/usbdevs
Remove #include "usbdevs.h" from libavrdude.h
2025-03-24 15:01:15 +01:00
Stefan Rueger
774fbc865e
Merge pull request #1964 from stefanrueger/32sdnn
Remove spurious s from AVR32SDnn part id
2025-03-24 15:00:17 +01:00
Stefan Rueger
c25ac0240c
Merge pull request #1963 from stefanrueger/wdttypes
Add WDT type info to avrintel.c
2025-03-24 15:00:04 +01:00
Stefan Rueger
904b775164
Merge pull request #1962 from stefanrueger/version
Add --version option
2025-03-24 14:59:48 +01:00
Stefan Rueger
58343dc82f
Merge pull request #1959 from MX682X/main
Add PK Basic programmer
2025-03-24 14:59:26 +01:00
Stefan Rueger
c409db37ff
Merge pull request #1958 from stefanrueger/variants
Fix variant errors introduced in recent .atdf versions
2025-03-24 14:37:37 +01:00
MX682X
65360f2f04 remove trailing spaces 2025-03-23 12:05:48 +01:00
MX682X
b2669af9a5 Improved error messaging, added the other PIDs to usbdevs.h 2025-03-23 12:03:41 +01:00
stefanrueger
bd49b1e366
Align USB vendor and device IDs 2025-03-22 17:04:47 +01:00
stefanrueger
b2cd4bdbad
Modify spacing for canonical avrdude.conf.in 2025-03-22 17:01:23 +01:00
MX682X
0467739ef7 small adjustments 2025-03-22 10:47:53 +01:00
stefanrueger
43f3b45561
Remove #include "usbdevs.h" from libavrdude.h 2025-03-22 01:27:15 +01:00
stefanrueger
e3eb9b391f
Remove spurious s from AVR32SDnn part id 2025-03-22 01:01:13 +01:00
stefanrueger
58dbe15f3f
Add WDT type info to avrintel.c 2025-03-22 00:42:39 +01:00
stefanrueger
fb70539f6a
Add --version option 2025-03-22 00:26:04 +01:00
MX682X
3bf7b0d4a1 changing pickit5 config to a parent based style 2025-03-15 11:09:37 +01:00
MX682X
eb2fe9b64e updated scripts.xml and added PK Basic in non cimsis-dap mode 2025-03-13 19:01:04 +01:00
stefanrueger
3234adf332
Fix variant errors introduced in recent .atdf versions 2025-03-13 10:57:55 +01:00
stefanrueger
8c4b69ac47
Update NEWS 2025-03-11 13:58:39 +01:00
stefanrueger
09c80c6da9
Update avrdude.pdf 2025-03-11 13:57:51 +01:00
stefanrueger
baca7500a7
Fix typo in comment 2025-03-11 13:50:27 +01:00
Stefan Rueger
b88dab9174
Merge pull request #1955 from stefanrueger/AVR32SDnn
- Add AVR64DAnnS, AVR32DAnnS and AVR32SDnn to avrdude.conf
 - Fix m808/9 and m1608/9 entries in avrdude.conf
 - Clarify and rename common .avrdx/.avrex parent parts
 - Add port and UART info to avrintel.c
2025-03-11 13:29:40 +01:00
Stefan Rueger
dfd6af952e
Merge pull request #1947 from MCUdude/pic-avr-fix
Suggest compatible command when SNAP/PICKit4 in PIC mode is detected
2025-03-11 13:23:16 +01:00
stefanrueger
42a93499c8
Change AVRnnSDmm's hvupdi_variant to 3 2025-03-11 13:05:59 +01:00
stefanrueger
28812a5057
Correctly parent m808/9 and m1608/9 off from avr8x_mega
This changes family_id	to "megaAVR" and hvupdi_variant	to 1.
2025-03-11 13:02:15 +01:00
stefanrueger
2c22535f41
Clarify and rename common .avrdx/.avrdx parent parts
This commit leaves the settings of true parts unchanged. One can verify this by

 # Before this commit
 $ avrdude -p*/At | sort > /tmp/At

 # After this commit
 avrdude -p*/At | sort | diff - /tmp/At | grep -vi common.values
2025-03-11 12:24:16 +01:00
stefanrueger
39ac5e88b3
Self-document hvupdi_variant 2025-03-11 11:17:50 +01:00
stefanrueger
a10911d427
Add port info to avrintel.c 2025-03-11 01:25:07 +01:00
Hans
7fcd7830cb
Optimization and tweaks based on feedback from PR #1947 2025-03-04 11:22:46 +01:00
stefanrueger
6eb5e1d8ba
Fix typo in help message 2025-02-28 16:05:45 +01:00
stefanrueger
1dafcfd003
Add AVR32SDnn to avrdude.conf 2025-02-28 15:08:49 +01:00
stefanrueger
75c4a76879
Add browsave and crcboot config values 2025-02-28 15:07:46 +01:00
stefanrueger
c4ac9a7efa
Add AVR32nnS to avrdude.conf 2025-02-28 13:07:23 +01:00
stefanrueger
9ead829c12
Add AVR64nnS to avrdude.conf 2025-02-28 12:59:19 +01:00
stefanrueger
2229be9777
Update variants in avrdude.conf from ATDF files 2025-02-28 12:30:41 +01:00
stefanrueger
bdbb57a213
Update avrintel from ATDF files 2025-02-28 12:29:58 +01:00
stefanrueger
5ca2b7b9e7
Add UART info to avrintel.c 2025-02-28 00:57:07 +01:00
stefanrueger
b861ccc1d1
Update NEWS 2025-02-20 14:22:16 +01:00
Stefan Rueger
f7dadea395
Merge pull request #1951 from stefanrueger/shorten-lgt
Shorten ID of LGT parts
2025-02-20 14:19:38 +01:00
Stefan Rueger
3846c0e7e4
Merge pull request #1950 from stefanrueger/shorten-ata
Shorten ID of ATA parts
2025-02-20 14:19:24 +01:00
Stefan Rueger
fbed31ac62
Merge pull request #1949 from stefanrueger/pickit5-type
Correct PICkit5 programmer type entries
2025-02-20 14:19:07 +01:00
Stefan Rueger
a3f19d9d4c
Merge pull request #1948 from MCUdude/docs-badge
Add docs and release badges to README
2025-02-20 14:18:46 +01:00
Stefan Rueger
3f0a8a5955
Merge pull request #1936 from ndim/add-long-options-using-getopt_long
Add long options like --part
2025-02-20 14:18:21 +01:00
stefanrueger
5068f3793b
Shorten ID of LGT parts 2025-02-12 17:16:34 +01:00
stefanrueger
2276a14db2
Shorten ID of ATA parts 2025-02-12 16:52:45 +01:00
stefanrueger
b8493a76be
Align comment 2025-02-12 16:50:28 +01:00
stefanrueger
162da033c7
Correct PICkit5 programmer type entries 2025-02-12 16:38:24 +01:00
MCUdude
fdb76f38a6 Add more options to the content index list 2025-02-12 12:55:36 +01:00
MCUdude
0c2c03f13f Rename --test and --noverify to --test-memory and -d --noverify-memory 2025-02-12 10:16:36 +01:00
MCUdude
0528a3e8af partno -> partname 2025-02-12 10:12:29 +01:00
MCUdude
4bb18b78ad Add missing bitclock argument 2025-02-12 10:07:17 +01:00
MCUdude
29a0dd7a90 Remove duplicate USB flags 2025-02-10 22:24:00 +01:00
Hans
1430f9e904
Remove blank lines 2025-02-10 10:35:35 +01:00
Hans
c5300b80cd
Add docs and release badges to README 2025-02-10 10:33:10 +01:00
MCUdude
a525058d07 Use libhidapi for connecting to SNAP/PICKit4 in AVR mode 2025-02-09 09:16:44 +01:00
Hans
6ba504441a
Add longopts to texinfo document 2025-02-07 22:20:09 +01:00
MCUdude
2b0eced1d0 Add longopts to manpage 2025-02-07 14:12:05 +01:00
MCUdude
19b2519f16 Use --quell instead of --quiet 2025-02-07 13:14:49 +01:00
MCUdude
d7de4e6ce3 Add missing long opt in help text
+ remove duplicates
2025-02-07 12:49:10 +01:00
MCUdude
6c23fccf42 Print alternative PIC mode pickit5 programmer option 2025-02-06 23:24:29 +01:00
MCUdude
f1204ab99c Fix issue where Avrdude would print -p (null) if no part was specified 2025-02-06 22:39:13 +01:00
stefanrueger
7668a1f056
Update NEWS 2025-02-05 19:07:55 +01:00
Stefan Rueger
abd9e4dc50
Merge pull request #1941 from lazka/add-missing-stdlib-include
Fix missing stdlib.h include for free()
2025-02-05 18:52:13 +01:00
Stefan Rueger
54c5071128
Merge pull request #1939 from stefanrueger/linuxspi-start
Ensure part is up for some 100 ms before resetting it
2025-02-05 18:49:34 +01:00
Stefan Rueger
0771b7fc22
Merge pull request #1935 from MX682X/8.1.0---isp
PICKit5 ISP, dW, TPI, JTAG and PDI support
2025-02-05 18:46:12 +01:00
Stefan Rueger
648608d97b
Merge pull request #1945 from dl8dtl/fix_github_upload_artifact
Fix GitHub upload artifact
2025-02-05 18:16:35 +01:00
MX682X
f2f2ac4035 fix message output 2025-02-01 22:31:26 +01:00
Joerg Wunsch
cb651b67c5 In arduino_packing.yml, distinguish OS and architecture
upload-artifacts@v4 complains if the same artifact already
exists, so chose a different name for each OS+arch.
2025-01-30 23:16:18 +01:00
Joerg Wunsch
02279df9a2 More replacements of upload-artifacts@v3 by @v4 2025-01-30 23:16:18 +01:00
Joerg Wunsch
97508a1f0d Use upload-artifact@v4
Version 3 has been deprecated and is no longer supported.
2025-01-30 23:16:18 +01:00
MX682X
93856138a3 try to improve error handling on a failed data transmission plus some minor adjustments and fixes 2025-01-18 20:22:28 +01:00
Christoph Reiter
bca9fff70a Fix missing stdlib.h include for free()
Building avrdude with current clang+mingw-w64 for arm64 on Windows
leads to the following error:
serbb_win32.c:294:3: error: call to undeclared library function 'free' with type 'void (void *)'

Explicitely import stdlib.h for free() in avrdude.h
where mmt_free() is defind to free() to fix this.

Fixes #1940
2025-01-14 20:28:52 +01:00
MX682X
29438a2bd5 fixed old jtag flash writes, updated scripts, included EC family 2025-01-13 20:52:52 +01:00
stefanrueger
713241f990
Ensure part is up for some 100 ms before resetting it 2025-01-06 20:08:36 +01:00
MX682X
26b5fdf218 fixed a small bug on handling the clock options 2024-12-22 09:54:32 +01:00
MX682X
0d554e70b9 overwriting flash size to 256 on attiny15 and co. 2024-12-21 19:31:53 +01:00
MX682X
7725f19ad1 cleanup, remove flash size overwrite, fix regression on updi fuse writes. 2024-12-21 16:32:26 +01:00
MX682X
e36a8f05dc another attempt to fix attiny15, improved debug messages 2024-12-18 23:39:47 +01:00
MX682X
8aa795be04 added experemental -xf= option to override flash size on isp 2024-12-16 23:41:44 +01:00
stefanrueger
f1555aefb3
Update NEWS 2024-12-13 14:45:16 +01:00
Stefan Rueger
d732f7419a
Merge pull request #1937 from alexjx/main
Fix avrdoper header sequence for hidusb
2024-12-13 14:38:15 +01:00
Jia Xin
42d9cc43e8 fix avrdoper after 6.4 2024-12-10 22:21:51 +08:00
MX682X
e09370f1fa small fix for prodsig retrieval 2024-11-29 23:24:48 +01:00
MX682X
f916ba39f6 experiment for attiny15 plus other stuff 2024-11-29 22:25:41 +01:00
Hans Ulrich Niedermann
818e0e8698 Add long options like --part
Switch the command line argument parser from getopt(3) to
getopt_long(3) and add a few long options as aliases to existing
short options, e.g. "--help" and "--part" being aliases for "-?"
and "-p", respectively.

The getopt_long(3) function is available on GNU, BSD, and the existing
msvc/getopt.[ch] already implements getopt_long() on Windows. This
should cover all systems avrdude supports.

Adapt the avrdude usage message shown by "-?" or "--help" to show the
new long options.

TODO: Adapt man page and texi manual reflecting the long options.

Closes: #1922
2024-11-27 02:44:17 +01:00
MX682X
ae867081d5 rework prodsig retrival logic 2024-11-26 20:46:45 +01:00
MX682X
7d82e58791 fixing prodsig on isp and jtag and other improvements 2024-11-25 23:45:45 +01:00
Stefan Rueger
69c3293ff0
Update NEWS 2024-11-25 12:39:14 +00:00
Stefan Rueger
ca606af331
Fix typo 2024-11-25 12:38:50 +00:00
Stefan Rueger
22efe4f5e5
Merge pull request #1933 from stefanrueger/xmega-fuses
Fix ATxmega fuses memory sizes
2024-11-25 12:23:40 +00:00
Stefan Rueger
36fee42826
Merge pull request #1932 from stefanrueger/avr32ebxx
Add AVR32EBxx parts
2024-11-25 12:17:32 +00:00
Stefan Rueger
7bbf06ee14
Merge pull request #1916 from ndim/document-elf2tag
Document elf2tag script
2024-11-25 12:13:23 +00:00
MX682X
fbffbf7a1a fixing build for ARM64 (no bswap) 2024-11-23 23:18:56 +01:00
MX682X
3b364545c8
Merge branch 'avrdudes:main' into 8.1.0---isp 2024-11-23 22:58:58 +01:00
MX682X
02dc472932 fixing up docs 2024-11-23 22:58:07 +01:00
MX682X
74a6e8ac56 a little optimization 2024-11-23 22:30:21 +01:00
MX682X
7b077029bc add support for dW, JTAG, ISP, and PDI (untested)
dW has some hiccups on flash writes
JTAG must erase chip before overwriting EEPROM
2024-11-23 22:10:17 +01:00
mcuee
eec1a9b2e4
Update NEWS 2024-11-23 21:08:05 +08:00
Hans Ulrich Niedermann
f85a584067 ci: Check consistency of generated files
This makes the .github/workflows/check-sourcecode
more a "check-repo" than a "check-sourcecode".
2024-11-23 03:31:51 +01:00
Hans Ulrich Niedermann
eddb0d0ed5 Add basic elf2tag(1) manpage
Add basic elf2tag(1) manpage using asciidoc/asciidoctor.

To update the elf2tag.1 file from elf2tag.1.adoc, run
the update-elf2tag-manpage script.

No CI or buildsystem or git precommit hook integration yet.
2024-11-23 03:31:06 +01:00
mcuee
5c0d478703
Merge pull request #1934 from ndim/enable-option-checking=fatal
CI: Ensure only supported configure options are used (--enable-option-checking=fatal)
2024-11-23 09:09:53 +08:00
Hans Ulrich Niedermann
172474a9e9 ci: Abort autotools builds in case of unsupported options
Abort autotools CI builds in case we give them an unsupported
option. The default is to only warn, but the CI should catch
mistakes.
2024-11-23 01:40:24 +01:00
Hans Ulrich Niedermann
b8594d1df1 ci: Fix macos brew install issue with pkg-config
The macos build's "brew install" command has developed a
build failure without us being involved at all:

    Error: The `brew link` step did not complete successfully
    The formula built, but is not symlinked into /opt/homebrew
    Could not symlink bin/pkg-config
    Target /opt/homebrew/bin/pkg-config
    is a symlink belonging to pkg-config@0.29.2. You can unlink it:
      brew unlink pkg-config@0.29.2

This makes the macos build work again and implements the suggestions
brew prints when installing bison and flex, regarding PATH, LDFLAGS,
and CPPFLAGS.
2024-11-23 01:40:04 +01:00
Hans Ulrich Niedermann
79e091b545 ci: Use multi-line format to invoke configure
Use the multi-line format to invoke configure with a long command line.

This prepares for even longer command lines.
2024-11-22 20:11:29 +01:00
Hans Ulrich Niedermann
2f6bd67a52 elf2tag: Add -h and --help arguments 2024-11-20 16:33:31 +01:00
Stefan Rueger
d7e5b43824
Update avrintel files 2024-11-16 23:09:19 +00:00
Stefan Rueger
f6efda5fe7
Add AVR32EB* parts 2024-11-16 23:01:15 +00:00
Stefan Rueger
985726039b
Fix ATxmega fuses memory sizes 2024-11-16 10:19:26 +00:00
mcuee
0b92721af9
Merge pull request #1927 from ndim/add-extra-version-information
Add extra version information to avrdude output
2024-10-10 20:56:45 +08:00
Hans Ulrich Niedermann
cb53a34ff1 Add extra version information to avrdude output
Some downstream projects build avrdude and want to add their
own version information to the avrdude version to distinguish
their builds from others.

This adds a clean way to do that without needing to patch the
avrdude sources, for both cmake and automake based builds:

    cmake -DEXTRA_VERSION:STRING=-arduino.1-rc1
    ../configure EXTRA_VERSION=-arduino.1-rc1

After building avrdude, the last line of "avrdude -?" will now
look similar to the following, depending on whether you are
building an avrdude git checkout or an avrdude release tarball:

    avrdude version 8.0-20240901-arduino.1-rc1 (30e19f23), https://github.com/avrdudes/avrdude
    avrdude version 8.1-arduino.1-rc1 (30e19f23), https://github.com/avrdudes/avrdude
2024-10-10 13:40:22 +02:00
Stefan Rueger
30e19f2332
Update NEWS 2024-09-01 01:21:45 +01:00
Stefan Rueger
0f0b4c15ce
Increment libavrdude version
There is bound to be a library change in git main until v8.1 is published;
ensure we have a new version number in preparation for the next release.
2024-09-01 01:20:34 +01:00
Stefan Rueger
d3c4f8631c
Merge pull request #1919 from stefanrueger/m16u4
Update usbpids in avrdude.conf
2024-09-01 01:14:44 +01:00
Stefan Rueger
f1cfb81313
Merge pull request #1918 from stefanrueger/da-s
Add AVR128DAxxS parts
2024-09-01 01:14:05 +01:00
Stefan Rueger
af22f60c8f
Remove uspid of ATxmegas without USB interface 2024-09-01 00:58:02 +01:00
Stefan Rueger
13e5af1b3c
Add memory pdicfg to AVR128DAnnS 2024-08-31 18:00:15 +01:00
Stefan Rueger
b3949ce685
Correcting usbpid of x64a4u 2024-08-31 17:37:39 +01:00
Stefan Rueger
d54782e9a7
Update usbpids in avrdude.conf 2024-08-31 13:00:07 +01:00
Stefan Rueger
a0a2ec8926
Add AVR128DAxxS parts 2024-08-31 10:44:30 +01:00
Stefan Rueger
4fa07e563f
Update NEWS 2024-08-24 22:23:30 +01:00
Stefan Rueger
d8c8cf1379
Update version to 8.0 2024-08-24 21:51:00 +01:00
Stefan Rueger
943ee419b6
Update NEWS 2024-08-24 19:14:15 +01:00
Stefan Rueger
821d5b0ad1
Merge pull request #1911 from stefanrueger/jtagmkII
Iron out some problems in jtagmkII
2024-08-24 19:11:25 +01:00
Stefan Rueger
ac5c4b9ccd
Merge pull request #1910 from ndim/guard-against-zombie-problems
Add checks for zombie sourcecode problems
2024-08-24 19:10:45 +01:00
Stefan Rueger
706336c40c
Merge pull request #1888 from ndim/ci-test-running-built-avrdude
CI: test running the built avrdude executable
2024-08-24 19:10:08 +01:00
Stefan Rueger
ca6e0793f5
Merge pull request #1874 from ndim/parport-build-test
Parport build test
2024-08-24 19:09:51 +01:00
Stefan Rueger
19279e33f8
Fix flash paged r/w for jtagmkII
There were several problems with page_erase():
  - Read cache not invalidated on writes to boot and apptable
  - PDI apptable and boot memories paged access can get addresses wrong
2024-08-24 18:04:18 +01:00
Stefan Rueger
0c463fad92
Fix page erase for jtagmkII
There were several problems with page_erase():
 - Not working on UPDI eeprom/usersig memories: write a page of 0xff instead
 - Read cache not invalidated on page erase
 - PDI apptable and boot memories page erase possibly erases wrong page
2024-08-24 17:56:41 +01:00
Stefan Rueger
93b512de70
Change memory category for classic page erase in jtag3.c 2024-08-24 17:47:00 +01:00
Hans Ulrich Niedermann
c677974137 ci: Where possible, dryrun tests on uninstalled avrdude
This tries running the uninstalled avrdude executable, both
with -? and for test-avrdude.

Tests on installed avrdude are kept where they exist,
but not added for all possible platforms.

Quick table showing

  * -? testing of built avrdude (print the usage)
  * dryrun testing of built avrdude before installation
  * installation of avrdude
  * dryrun testing of installed avrdude

and whether that happens/succeeds/fails:

                              run    test              test
                               -?    built   install   installed
    linux-x86_64-autotools  | yes  | succ  | yes     | succ
    linux-x86_64            | yes  | succ  | yes     | succ
    linux (cross-compile)   | yes# | n/a   | no      | <--
    macos-x86_64            | yes  | succ  | no      | <--
    macos-x86_64-autotools  | yes  | succ  | no      | <--
    msvc                    | yes* | succ  | broken  | <--
    mingw                   | yes  | fail  | no      | <--

 # Only on i386, as the armhf and arm64 executables are not runnable
   on the ubuntu-latest x86_64 worker.

 * Works on x86 and x64. Skipped on arm64 at this time.

   The arm64 executable is not runnable, possibly due to the
   old problem of an exe being built for the wrong architecture
   (which @mcuee mentioned somewhere).

In summary, this should run as much as is possible at this time
without introducing failures.

In the future, after these failures are fixed, more tests can be
added for a more complete coverage.
2024-08-24 18:46:03 +02:00
Stefan Rueger
b407731473
Refrain from using page_erase on -U eeprom:w 2024-08-24 17:43:37 +01:00
Hans Ulrich Niedermann
415b397bc9 ci: Use ${{env.BUILD_TYPE}} instead of hardcoded value 2024-08-24 18:36:57 +02:00
Hans Ulrich Niedermann
06032113cf ci: Run test-avrdude with -v to show avrdude output on errors 2024-08-24 18:36:57 +02:00
Hans Ulrich Niedermann
184b00db48 ci: disable distcheck (until am doc builds have been fixed)
The doc builds are a bit brittle at this time, and therefore
do not work reliably with "make distcheck".

Therefore this comments out "make distcheck" until the am doc
builds have been fixed.
2024-08-24 18:36:57 +02:00
Hans Ulrich Niedermann
6e2152f1b9 ci: Use printf(1) to avoid echo(1) problems
Use printf(1) to avoid possible echo(1) incompatibilities like
special escape sequences and the like.

Also, "\n\n" means two linefeeds, without any implicit linefeeds
being added.

Thought for the future: Perhaps test-avrdude should run isatty()
and, if it is not a TTY, not wait for linefeeds at all in the non-
interactive case?
2024-08-24 18:35:08 +02:00
Hans Ulrich Niedermann
fb74e288da ci: consistently rename macos -autotools build
Use the same suffix string "-autotools" for "macos-x86_64-autotools"
which the linux-x86_64-autotools build already uses.
2024-08-24 16:12:00 +02:00
Hans Ulrich Niedermann
16d7d0bbcb ci: Build parallel port code on supported systems
Build parallel port code on supported systems

Unsupported systems are:

  * Windows operating system
  * MacOS operating system

This means the CI can test

  * native Linux builds (yes, even for arm systems)

Untested at this time are the BSDs.

Removes the dysfunctional Windows (since Windows XP)  parallel port code,
and has the buildsystems fail Windows builds if parallel port builds are
requested (HAVE_PARPORT or --enable-parport).

https://github.com/avrdudes/avrdude/pull/1874#issuecomment-2275762550
2024-08-24 15:38:17 +02:00
Hans Ulrich Niedermann
89478179b4 function prototype consistency fix for ppiwin.c
mingw builds for Windows require a function prototype fix.
2024-08-24 15:37:04 +02:00
Hans Ulrich Niedermann
548c871194 Fix all remaining #include "ac_cfg.h" to use <ac_cfg.h> 2024-08-24 15:03:42 +02:00
Hans Ulrich Niedermann
5176d7b818 Add checks for zombie sourcecode problems
This adds checks for zombie sourcecode problems, i.e. problems
we have tried to eliminate but which might be or have been
resurrected.

The example check is for the problematic

    #include "ac_cfg.h"

with double quotes instead of <> which were identified as a
problem in https://github.com/avrdudes/avrdude/issues/1706
and then fixed.
2024-08-24 15:03:42 +02:00
Stefan Rueger
9e9825c988
Update NEWS/docu 2024-08-24 01:27:36 +01:00
Stefan Rueger
5f32f9d8c9
Merge pull request #1909 from stefanrueger/warnings
Silence compiler warnings
2024-08-24 00:57:12 +01:00
Stefan Rueger
5ab90751d1
Merge pull request #1908 from stefanrueger/documentation
Improve Documentation
2024-08-24 00:56:02 +01:00
Stefan Rueger
53cf5f29ee
Merge pull request #1907 from stefanrueger/familyid
Improve messaging around locked UPDI parts
2024-08-24 00:54:26 +01:00
Stefan Rueger
5b1b5443c6
Merge pull request #1906 from funkeleinhorn/serprog-programmer
Remove known limitations comment from serprog.c
2024-08-24 00:53:31 +01:00
Stefan Rueger
43fc4ff81f
Silence compiler warnings 2024-08-23 23:30:08 +01:00
Stefan Rueger
78464340f2
Update comment in avdude.pdf 2024-08-23 23:25:25 +01:00
Stefan Rueger
ceef6d7df2
Merge branch 'documentation' of github.com:stefanrueger/avrdude into documentation 2024-08-23 23:22:34 +01:00
Stefan Rueger
a9c692ed71
Remove section about memories from avrdude.1
This section breaks the flow of the man page on the options.
It is reasonable to refer to a longer manual for that.
2024-08-23 23:17:46 +01:00
Stefan Rueger
3e9672481c
Reduce use of upload/download terms 2024-08-23 23:16:39 +01:00
Stefan Rueger
ae31a6bb5f
Create avrstats.texi for statistics used in the docu 2024-08-23 23:09:27 +01:00
Stefan Rueger
173c3d4e90
Improve messaging around locked UPDI parts 2024-08-23 22:02:49 +01:00
Stefan Rueger
371dc3823d
Remove section about memories from avrdude.1 2024-08-23 21:49:57 +01:00
Stefan Rueger
97cc672fcb
Reduce use of upload/download terms 2024-08-23 20:57:29 +01:00
Funkeleinhorn
8fdd0c7277
Remove known limitations comment from serprog.c
Connecting over tcp is already possible by specifying net:<host>:<port>
as a port. Performance is already good and further improvements would
require custom AVR read/write logic to batch operations which seems
not worth the maintenance effort for now.
2024-08-23 19:35:06 +02:00
Stefan Rueger
79f85d048f
Update NEWS 2024-08-23 02:27:33 +01:00
Stefan Rueger
284612f875
Merge pull request #1897 from stefanrueger/avr_write_byte_default
Fix avr_write_byte()
2024-08-23 02:21:23 +01:00
Stefan Rueger
720d21fec0
Merge pull request #1903 from stefanrueger/test8-e
Add -e exe option to test8
2024-08-23 02:20:34 +01:00
Stefan Rueger
2cd9e5b8d4
Merge pull request #1901 from mcuee/windows_arm64_build
Update build.yml to re-enable Windows on ARM64 MSVC build
2024-08-23 02:19:44 +01:00
Stefan Rueger
5c16beeffb
Remove bmequ() macro 2024-08-23 02:18:37 +01:00
Stefan Rueger
ab66d35516
Merge pull request #1896 from stefanrueger/fix-deprecated-types
Fix deprecated types in libavrdude.i
2024-08-23 02:12:07 +01:00
Stefan Rueger
422b3784e2
Merge pull request #1902 from mcuee/document
Document: use macOS to replace MacOS, no support of Parallel Port under macOS
2024-08-23 02:09:48 +01:00
Stefan Rueger
42589c02eb
Merge pull request #1895 from stefanrueger/avrdude.pdf
Add detail to part and programmer lists in avrdude.pdf
2024-08-23 02:09:09 +01:00
Stefan Rueger
13879ba8b4
Move list of memories into an appendix 2024-08-23 01:56:05 +01:00
Stefan Rueger
b7d690b04a
Change @samp{option} to @code{option} 2024-08-23 00:47:16 +01:00
Stefan Rueger
79109b4f6b
Remove multiple -x help explanations 2024-08-23 00:41:04 +01:00
Stefan Rueger
ffb9b8c001
Update introduction of avrdude.pdf 2024-08-23 00:17:19 +01:00
Stefan Rueger
5613de5a69
Add @cindex terms for programmers 2024-08-22 23:15:09 +01:00
Stefan Rueger
d1667f705f
Refine programmer listing for avrdude.pdf 2024-08-22 23:14:30 +01:00
Stefan Rueger
c1433c9fc4
Fix .sed file dependencies in src/doc/Makefile.am 2024-08-22 20:11:42 +01:00
Stefan Rueger
7a6cfab35f
Add Wiki urls for Appendix B 2024-08-22 18:50:27 +01:00
Stefan Rueger
b389e8b89f
Add -e exe option to test8 2024-08-22 17:43:37 +01:00
mcuee
0b397b0b15
Document: avrdude does not support Parallel Port under macOS 2024-08-22 17:32:17 +08:00
mcuee
a0c0e4872e
Document: use macOS to replace MacOS in document 2024-08-22 17:29:59 +08:00
mcuee
ce0dbc453d
Update build.yml to re-enable Windows on ARM64 MSVC build 2024-08-22 17:07:14 +08:00
Stefan Rueger
a6e927a31e
Fix avr_write_byte() 2024-08-22 02:00:42 +01:00
Stefan Rueger
325170c94c
Fix deprecated types in libavrdude.i 2024-08-22 01:54:06 +01:00
Stefan Rueger
1774b09ec1
Merge branch 'avrdude.pdf' of github.com:stefanrueger/avrdude into avrdude.pdf 2024-08-22 01:46:37 +01:00
Stefan Rueger
a503e09208
Show more detail for the programmer list in avrdude.pdf 2024-08-22 01:45:50 +01:00
Stefan Rueger
5453843848
Show more detail for -c\? programmer descriptions 2024-08-22 01:03:05 +01:00
Stefan Rueger
b0e117b802
Shorten some programmer descriptions 2024-08-22 01:01:58 +01:00
mcuee
a9594622e2
Document: remove one more place where Windows parallel ports are mentioned 2024-08-22 07:42:12 +08:00
mcuee
138bd514f1
Document: AVRDUDE does not support parallel ports on Windows
Adopted the document change of PR #1874.
2024-08-22 07:31:42 +08:00
mcuee
aff15d3721
Document: remove the mentioning of 16bit Windows system directory 2024-08-22 07:28:47 +08:00
Stefan Rueger
dc1191a7b3
Merge branch 'avrdude.pdf' of github.com:stefanrueger/avrdude into avrdude.pdf 2024-08-21 23:49:57 +01:00
Stefan Rueger
c6d29a1689
Move debug command line line after opening the log file 2024-08-21 23:26:51 +01:00
Stefan Rueger
b49fe93402
Enlarge set of special shell characters 2024-08-21 23:25:36 +01:00
Stefan Rueger
50662bb852
Show command line with -vvv 2024-08-21 17:06:23 +01:00
Stefan Rueger
da4de26c5f
Provide str_quote_bash() and str_ccsharg() 2024-08-21 17:05:43 +01:00
Stefan Rueger
e740dc19ef
Add debug statements for avr_...() I/O functions 2024-08-21 16:06:06 +01:00
Stefan Rueger
cdc0b9f0d8
Provide str_ccaddress() 2024-08-21 15:59:52 +01:00
Stefan Rueger
03fd7cf93d
Remove no longer needed parts.cmake 2024-08-21 01:10:07 +01:00
Stefan Rueger
92258e205e
Show more detail for the part list in avrdude.pdf 2024-08-21 01:06:20 +01:00
Stefan Rueger
b8e5c3a927
Show more detail for -p ? 2024-08-21 01:04:36 +01:00
Stefan Rueger
7219f5f529
Crisp up programmer descriptions 2024-08-20 00:37:42 +01:00
Stefan Rueger
596a4a8ac9
Crisp up programmer type descriptions 2024-08-19 23:18:44 +01:00
Stefan Rueger
8aa01a4054
Add cindex terms 2024-08-19 22:35:59 +01:00
Stefan Rueger
1fe0857e7f
Update NEWS 2024-08-19 21:30:45 +01:00
Stefan Rueger
81d15b5058
Merge pull request #1893 from stefanrueger/space-the-final-frontier
Space: the final frontier

Reformatting most of the source: The created avrdude executable stays invariant except for the source line numbers that errors and warnings emit with -vv. To prove this check out git main, replace all occurrences of __LINE__ in avrdude.h and jtagmkII.c with 07654321. Compile the executable avrdude and disassemble using objdump -d $(which avrdude) >ad.S. Then do the same with this PR and convince yourself that the ensuing .S files are identical. OK, I only checked under Linux but have every reason to believe that the semi-automated method of this PR will also leave the fraction of the code invariant that isn't seen by a Linux compilation.

Tools used:

$ indent -as -nsaf -nsai -nsaw -nut -bap -bacc -bad -bbb -brs -nbc -br -brf -nbs -c33 -cd33 -cp33 -ncdb -cdw -ce -ci2 -cli0 -d0 -di1 -neei -nfc1 -i2 -il-2 -ppi0 -nip -l130 -lc130 -nlp -npcs -npsl -nsc -sob -nlps -nprs -par

Then polish with a set of sed scripts to ensure the correct spacing of
  - switch(i)
  - a? b: c
  - type *p
  - single-line comments just so // Note the space and capital letter at the start and
  - Multi-line comments such as
    /*
     * Multi-line comments which
     *  - Tend to be about larger code regions
     *  - Contain vital algorithmic information
     *  - Deserve visual attention and prominence
     *  - Help users utilise functions and code thereafter
     */

Also 
  - Change PDATA(pgm)-> to my.
  - Change xxx->prog_modes & PM_ABCD to is_abcd(xxx)
2024-08-19 21:23:45 +01:00
Stefan Rueger
de2b5bba89
Pass -a additional parameters also when prepping part 2024-08-19 20:45:22 +01:00
Stefan Rueger
00422f3f29
Change xxx->prog_modes & PM_ABCD to is_abcd(xxx) 2024-08-18 16:25:34 +01:00
Stefan Rueger
6d6b0fa861
Replace PDATA(pgm)-> with my. 2024-08-18 15:56:29 +01:00
Stefan Rueger
347ca085c3
Change spacing around parentheses 2024-08-18 15:29:52 +01:00
Stefan Rueger
8f73bc4b1a
Remove unnecessary breaks 2024-08-18 02:26:56 +01:00
Stefan Rueger
1113b641fd
Reformat spacing/comments in src/xbee.h 2024-08-18 01:54:37 +01:00
Stefan Rueger
94fa54663e
Reformat spacing/comments in src/xbee.c 2024-08-18 01:54:37 +01:00
Stefan Rueger
59a58b77fb
Reformat spacing/comments in src/wiring.h 2024-08-18 01:54:37 +01:00
Stefan Rueger
a8ee4d010f
Reformat spacing/comments in src/wiring.c 2024-08-18 01:54:36 +01:00
Stefan Rueger
2cd6209dba
Reformat spacing/comments in src/whereami.h 2024-08-18 01:54:36 +01:00
Stefan Rueger
a4f6cb8c75
Reformat spacing/comments in src/whereami.c 2024-08-18 01:54:36 +01:00
Stefan Rueger
1f32f6260e
Reformat spacing/comments in src/usbtiny.h 2024-08-18 01:54:36 +01:00
Stefan Rueger
7e76388fe9
Reformat spacing/comments in src/usbtiny.c 2024-08-18 01:54:35 +01:00
Stefan Rueger
ce5a8289ac
Reformat spacing/comments in src/usbdevs.h 2024-08-18 01:54:35 +01:00
Stefan Rueger
43845fa344
Reformat spacing/comments in src/usbasp.h 2024-08-18 01:54:35 +01:00
Stefan Rueger
0e269536da
Reformat spacing/comments in src/usbasp.c 2024-08-18 01:54:35 +01:00
Stefan Rueger
3fefc9027a
Reformat spacing/comments in src/usb_libusb.c 2024-08-18 01:54:34 +01:00
Stefan Rueger
ca1a5879a8
Reformat spacing/comments in src/usb_hidapi.c 2024-08-18 01:54:34 +01:00
Stefan Rueger
e16286b976
Reformat spacing/comments in src/urclock_private.h 2024-08-18 01:54:34 +01:00
Stefan Rueger
8e4474058a
Reformat spacing/comments in src/urclock.c 2024-08-18 01:54:34 +01:00
Stefan Rueger
c25105064b
Reformat spacing/comments in src/updi_state.h 2024-08-18 01:54:33 +01:00
Stefan Rueger
8e76d31f44
Reformat spacing/comments in src/updi_state.c 2024-08-18 01:54:33 +01:00
Stefan Rueger
09ddba79ab
Reformat spacing/comments in src/updi_readwrite.h 2024-08-18 01:54:33 +01:00
Stefan Rueger
1798e82f72
Reformat spacing/comments in src/updi_readwrite.c 2024-08-18 01:54:32 +01:00
Stefan Rueger
baeb1c00b7
Reformat spacing/comments in src/updi_nvm_v5.h 2024-08-18 01:54:32 +01:00
Stefan Rueger
5d661e6fa2
Reformat spacing/comments in src/updi_nvm_v5.c 2024-08-18 01:54:32 +01:00
Stefan Rueger
9abfb74167
Reformat spacing/comments in src/updi_nvm_v4.h 2024-08-18 01:54:32 +01:00
Stefan Rueger
19494c199d
Reformat spacing/comments in src/updi_nvm_v4.c 2024-08-18 01:54:31 +01:00
Stefan Rueger
5014fcd9b2
Reformat spacing/comments in src/updi_nvm_v3.h 2024-08-18 01:54:31 +01:00
Stefan Rueger
cda18ab6aa
Reformat spacing/comments in src/updi_nvm_v3.c 2024-08-18 01:54:31 +01:00
Stefan Rueger
763e809743
Reformat spacing/comments in src/updi_nvm_v2.h 2024-08-18 01:54:31 +01:00
Stefan Rueger
51b36dad2a
Reformat spacing/comments in src/updi_nvm_v2.c 2024-08-18 01:54:30 +01:00
Stefan Rueger
9ab4e7524c
Reformat spacing/comments in src/updi_nvm_v0.h 2024-08-18 01:54:30 +01:00
Stefan Rueger
5b4543c865
Reformat spacing/comments in src/updi_nvm_v0.c 2024-08-18 01:54:30 +01:00
Stefan Rueger
5f4c0d764f
Reformat spacing/comments in src/updi_nvm.h 2024-08-18 01:54:30 +01:00
Stefan Rueger
526017304d
Reformat spacing/comments in src/updi_nvm.c 2024-08-18 01:54:29 +01:00
Stefan Rueger
a175a8b24d
Reformat spacing/comments in src/updi_link.h 2024-08-18 01:54:29 +01:00
Stefan Rueger
4f88ce6c6b
Reformat spacing/comments in src/updi_link.c 2024-08-18 01:54:29 +01:00
Stefan Rueger
7e57daaca3
Reformat spacing/comments in src/updi_constants.h 2024-08-18 01:54:29 +01:00
Stefan Rueger
71dc2569fe
Reformat spacing/comments in src/update.c 2024-08-18 01:54:28 +01:00
Stefan Rueger
94ee50e484
Reformat spacing/comments in src/tpi.h 2024-08-18 01:54:28 +01:00
Stefan Rueger
d52547a0d4
Reformat spacing/comments in src/term.c 2024-08-18 01:54:28 +01:00
Stefan Rueger
61ad681781
Reformat spacing/comments in src/teensy.h 2024-08-18 01:54:28 +01:00
Stefan Rueger
c8093f74cd
Reformat spacing/comments in src/teensy.c 2024-08-18 01:54:27 +01:00
Stefan Rueger
61df966924
Reformat spacing/comments in src/strutil.c 2024-08-18 01:54:27 +01:00
Stefan Rueger
3b6bda561d
Reformat spacing/comments in src/stk500v2_private.h 2024-08-18 01:54:27 +01:00
Stefan Rueger
f4de09a0a2
Reformat spacing/comments in src/stk500v2.h 2024-08-18 01:54:26 +01:00
Stefan Rueger
b4f46771e7
Reformat spacing/comments in src/stk500v2.c 2024-08-18 01:54:26 +01:00
Stefan Rueger
f04110b511
Reformat spacing/comments in src/stk500generic.h 2024-08-18 01:54:26 +01:00
Stefan Rueger
af18a76b00
Reformat spacing/comments in src/stk500generic.c 2024-08-18 01:54:26 +01:00
Stefan Rueger
fcb3931b75
Reformat spacing/comments in src/stk500_private.h 2024-08-18 01:54:25 +01:00
Stefan Rueger
2e1eb959ef
Reformat spacing/comments in src/stk500.h 2024-08-18 01:54:25 +01:00
Stefan Rueger
0cfdad898c
Reformat spacing/comments in src/stk500.c 2024-08-18 01:54:25 +01:00
Stefan Rueger
8440d2dc85
Reformat spacing/comments in src/solaris_ecpp.h 2024-08-18 01:54:25 +01:00
Stefan Rueger
709382c33b
Reformat spacing/comments in src/serprog.h 2024-08-18 01:54:24 +01:00
Stefan Rueger
eef0c655ac
Reformat spacing/comments in src/serprog.c 2024-08-18 01:54:24 +01:00
Stefan Rueger
34331b4090
Reformat spacing/comments in src/serialupdi.h 2024-08-18 01:54:24 +01:00
Stefan Rueger
eef9ff758b
Reformat spacing/comments in src/serialupdi.c 2024-08-18 01:54:24 +01:00
Stefan Rueger
d48940cbdc
Reformat spacing/comments in src/serialadapter.c 2024-08-18 01:54:23 +01:00
Stefan Rueger
aced881c47
Reformat spacing/comments in src/serbb_win32.c 2024-08-18 01:54:23 +01:00
Stefan Rueger
3760a13eee
Reformat spacing/comments in src/serbb_posix.c 2024-08-18 01:54:23 +01:00
Stefan Rueger
9b4db1bdc3
Reformat spacing/comments in src/serbb.h 2024-08-18 01:54:23 +01:00
Stefan Rueger
b15ca8c24d
Reformat spacing/comments in src/ser_win32.c 2024-08-18 01:54:22 +01:00
Stefan Rueger
6c97ad9a6b
Reformat spacing/comments in src/ser_posix.c 2024-08-18 01:54:22 +01:00
Stefan Rueger
0d422ed45d
Reformat spacing/comments in src/ser_avrdoper.c 2024-08-18 01:54:22 +01:00
Stefan Rueger
1fc4b0556c
Reformat spacing/comments in src/ppiwin.c 2024-08-18 01:54:22 +01:00
Stefan Rueger
388b55528b
Reformat spacing/comments in src/ppi.h 2024-08-18 01:54:21 +01:00
Stefan Rueger
6f8758a37e
Reformat spacing/comments in src/ppi.c 2024-08-18 01:54:21 +01:00
Stefan Rueger
68aa300a9f
Reformat spacing/comments in src/pindefs.c 2024-08-18 01:54:21 +01:00
Stefan Rueger
4971347834
Reformat spacing/comments in src/pickit2.h 2024-08-18 01:54:20 +01:00
Stefan Rueger
0eb0d60b49
Reformat spacing/comments in src/pickit2.c 2024-08-18 01:54:20 +01:00
Stefan Rueger
7f2a7f3dc2
Reformat spacing/comments in src/pgm_type.c 2024-08-18 01:54:20 +01:00
Stefan Rueger
724b73f6eb
Reformat spacing/comments in src/pgm.c 2024-08-18 01:54:20 +01:00
Stefan Rueger
5aa7855947
Reformat spacing/comments in src/par.h 2024-08-18 01:54:19 +01:00
Stefan Rueger
f867427c1f
Reformat spacing/comments in src/par.c 2024-08-18 01:54:19 +01:00
Stefan Rueger
eaf6d0f7b6
Reformat spacing/comments in src/micronucleus.h 2024-08-18 01:54:19 +01:00
Stefan Rueger
d7b03eafd6
Reformat spacing/comments in src/micronucleus.c 2024-08-18 01:54:19 +01:00
Stefan Rueger
792b712fe5
Reformat spacing/comments in src/main.c 2024-08-18 01:54:18 +01:00
Stefan Rueger
f2de199b49
Reformat spacing/comments in src/lists.c 2024-08-18 01:54:18 +01:00
Stefan Rueger
2f360d846c
Reformat spacing/comments in src/linuxspi.h 2024-08-18 01:54:18 +01:00
Stefan Rueger
6263151551
Reformat spacing/comments in src/linuxspi.c 2024-08-18 01:54:18 +01:00
Stefan Rueger
80fd0ab341
Reformat spacing/comments in src/linuxgpio.h 2024-08-18 01:54:17 +01:00
Stefan Rueger
3dbc6fc9ad
Reformat spacing/comments in src/linuxgpio.c 2024-08-18 01:54:17 +01:00
Stefan Rueger
23d5ba2ddb
Reformat spacing/comments in src/linux_ppdev.h 2024-08-18 01:54:17 +01:00
Stefan Rueger
cccdf8e5ba
Reformat spacing/comments in src/libavrdude.h 2024-08-18 01:54:17 +01:00
Stefan Rueger
92076e4caa
Reformat spacing/comments in src/leds.c 2024-08-18 01:54:16 +01:00
Stefan Rueger
524e25affe
Reformat spacing/comments in src/jtagmkI_private.h 2024-08-18 01:54:16 +01:00
Stefan Rueger
0c820fbf65
Reformat spacing/comments in src/jtagmkII_private.h 2024-08-18 01:54:16 +01:00
Stefan Rueger
090a93748b
Reformat spacing/comments in src/jtagmkII.h 2024-08-18 01:54:16 +01:00
Stefan Rueger
8acc6039f4
Reformat spacing/comments in src/jtagmkII.c 2024-08-18 01:54:15 +01:00
Stefan Rueger
06742fde0d
Reformat spacing/comments in src/jtagmkI.h 2024-08-18 01:54:15 +01:00
Stefan Rueger
7966c1bae3
Reformat spacing/comments in src/jtagmkI.c 2024-08-18 01:54:15 +01:00
Stefan Rueger
608957637f
Reformat spacing/comments in src/jtag3_private.h 2024-08-18 01:54:14 +01:00
Stefan Rueger
dc35a5cf3b
Reformat spacing/comments in src/jtag3.h 2024-08-18 01:54:14 +01:00
Stefan Rueger
04ffea22c3
Reformat spacing/comments in src/jtag3.c 2024-08-18 01:54:14 +01:00
Stefan Rueger
1f1f885788
Reformat spacing/comments in src/ft245r.h 2024-08-18 01:54:14 +01:00
Stefan Rueger
a8836a279e
Reformat spacing/comments in src/ft245r.c 2024-08-18 01:54:13 +01:00
Stefan Rueger
f83b8ecf94
Reformat spacing/comments in src/freebsd_ppi.h 2024-08-18 01:54:13 +01:00
Stefan Rueger
12727150ea
Reformat spacing/comments in src/flip2.h 2024-08-18 01:54:13 +01:00
Stefan Rueger
a028d30e1b
Reformat spacing/comments in src/flip2.c 2024-08-18 01:54:13 +01:00
Stefan Rueger
9a3535531c
Reformat spacing/comments in src/flip1.h 2024-08-18 01:54:12 +01:00
Stefan Rueger
12c19e589f
Reformat spacing/comments in src/flip1.c 2024-08-18 01:54:12 +01:00
Stefan Rueger
6f98a6cd58
Reformat spacing/comments in src/fileio.c 2024-08-18 01:54:12 +01:00
Stefan Rueger
7b0ef6cc7a
Reformat spacing/comments in src/dryrun_private.h 2024-08-18 01:54:12 +01:00
Stefan Rueger
96aa32da4f
Reformat spacing/comments in src/dryrun.h 2024-08-18 01:54:11 +01:00
Stefan Rueger
cdef592e44
Reformat spacing/comments in src/dryrun.c 2024-08-18 01:54:11 +01:00
Stefan Rueger
16378014d8
Reformat spacing/comments in src/doc/avrdude.texi 2024-08-18 01:54:11 +01:00
Stefan Rueger
4dc273d990
Reformat spacing/comments in src/disasm.c 2024-08-18 01:54:11 +01:00
Stefan Rueger
c944770e6f
Reformat spacing/comments in src/dfu.h 2024-08-18 01:54:10 +01:00
Stefan Rueger
afdfe12dda
Reformat spacing/comments in src/dfu.c 2024-08-18 01:54:10 +01:00
Stefan Rueger
7c2894a23a
Reformat spacing/comments in src/developer_opts_private.h 2024-08-18 01:54:10 +01:00
Stefan Rueger
a1e9969780
Reformat spacing/comments in src/developer_opts.h 2024-08-18 01:54:09 +01:00
Stefan Rueger
b776c96619
Reformat spacing/comments in src/developer_opts.c 2024-08-18 01:54:09 +01:00
Stefan Rueger
ec68fc1766
Reformat spacing/comments in src/crc16.h 2024-08-18 01:54:09 +01:00
Stefan Rueger
0f1dc19d06
Reformat spacing/comments in src/crc16.c 2024-08-18 01:54:09 +01:00
Stefan Rueger
6977a3d674
Reformat spacing/comments in src/confwin.c 2024-08-18 01:54:08 +01:00
Stefan Rueger
eb8c70e8f7
Reformat spacing/comments in src/config_gram.y 2024-08-18 01:54:08 +01:00
Stefan Rueger
790d51bef9
Reformat spacing/comments in src/config.h 2024-08-18 01:54:08 +01:00
Stefan Rueger
c7e4060094
Reformat spacing/comments in src/config.c 2024-08-18 01:54:08 +01:00
Stefan Rueger
2b8af69c46
Reformat spacing/comments in src/ch341a.h 2024-08-18 01:54:07 +01:00
Stefan Rueger
a750b2475c
Reformat spacing/comments in src/ch341a.c 2024-08-18 01:54:07 +01:00
Stefan Rueger
04a045c433
Reformat spacing/comments in src/butterfly.h 2024-08-18 01:54:07 +01:00
Stefan Rueger
d31095cb02
Reformat spacing/comments in src/butterfly.c 2024-08-18 01:54:07 +01:00
Stefan Rueger
a6e9569ef0
Reformat spacing/comments in src/buspirate.h 2024-08-18 01:54:06 +01:00
Stefan Rueger
b832e56d53
Reformat spacing/comments in src/buspirate.c 2024-08-18 01:54:06 +01:00
Stefan Rueger
791697f453
Reformat spacing/comments in src/bitbang.h 2024-08-18 01:54:06 +01:00
Stefan Rueger
5331ae6bfb
Reformat spacing/comments in src/bitbang.c 2024-08-18 01:54:06 +01:00
Stefan Rueger
0d32ef7b88
Reformat spacing/comments in src/avrpart.c 2024-08-18 01:54:05 +01:00
Stefan Rueger
7c3549ad03
Reformat spacing/comments in src/avrftdi_tpi.h 2024-08-18 01:54:05 +01:00
Stefan Rueger
d430a8e1ad
Reformat spacing/comments in src/avrftdi_tpi.c 2024-08-18 01:54:05 +01:00
Stefan Rueger
4442867a98
Reformat spacing/comments in src/avrftdi_private.h 2024-08-18 01:54:05 +01:00
Stefan Rueger
76f3e9c8fe
Reformat spacing/comments in src/avrftdi.h 2024-08-18 01:54:04 +01:00
Stefan Rueger
cf3f38dd8f
Reformat spacing/comments in src/avrftdi.c 2024-08-18 01:54:04 +01:00
Stefan Rueger
5069f54438
Reformat spacing/comments in src/avrdude.h 2024-08-18 01:54:04 +01:00
Stefan Rueger
ec084bb539
Reformat spacing/comments in src/avrdude.1 2024-08-18 01:54:03 +01:00
Stefan Rueger
41ee6806db
Reformat spacing/comments in src/avrcache.c 2024-08-18 01:54:03 +01:00
Stefan Rueger
8a53ab4cef
Reformat spacing/comments in src/avr_opcodes.c 2024-08-18 01:54:03 +01:00
Stefan Rueger
742a401048
Reformat spacing/comments in src/avr910.h 2024-08-18 01:54:03 +01:00
Stefan Rueger
038843c48d
Reformat spacing/comments in src/avr910.c 2024-08-18 01:54:02 +01:00
Stefan Rueger
c393085013
Reformat spacing/comments in src/avr.c 2024-08-18 01:54:02 +01:00
Stefan Rueger
e80b03a773
Reformat spacing/comments in src/arduino.h 2024-08-18 01:54:02 +01:00
Stefan Rueger
0d83fce664
Reformat spacing/comments in src/arduino.c 2024-08-18 01:54:02 +01:00
Stefan Rueger
dc325d8828
Reformat spacing/comments in NEWS 2024-08-18 01:54:01 +01:00
Stefan Rueger
3baeab0b93
Update NEWS 2024-08-18 01:06:30 +01:00
Stefan Rueger
8c121cfadf
Merge pull request #1891 from ndim/test-avrdude-bugfixes
Some bugfixes for the tools/test-avrdude script
2024-08-18 01:04:06 +01:00
Hans Ulrich Niedermann
8f64d849a5 test-avrdude: Determine mem sizes without the full command
Determine the flash and ee memory sizes without invoking the full
${avrdude[@]} command with logging etc.

Slight adaptation of code by Stefan Rueger from
https://github.com/avrdudes/avrdude/pull/1891#issuecomment-2293314322
2024-08-16 16:27:05 +02:00
Hans Ulrich Niedermann
cef23e252e test-avrdude: Condense two info lines into one
Condense the information about the avrdude binary executable
and its version from two output lines into a single output line.

Slight adaptation of code by Stefan Rueger from
https://github.com/avrdudes/avrdude/pull/1891#issuecomment-2293314322
2024-08-16 16:17:19 +02:00
Hans Ulrich Niedermann
b8718e6b5d test-avrdude: Replace associative array with function call
Macos ships a quite old version of bash (3.x) which does not have
associative arrays (declare -A) yet.

As the test-avrdude script only uses one associative array
for a static mapping of one character strings to one word
strings, this can be easily replaced by a shell function
containing a "case" statement.

Before this fix:

2024-08-15T15:39:59.9596380Z Prepare "-cdryrun -pm2560" and press 'enter' or 'space' to continue. Press any other key to skip
2024-08-15T15:40:00.5796130Z    0.155 s: flash raw format -T/-U write/verify cola-vending-machine.raw
2024-08-15T15:40:00.7006170Z    0.111 s: flash extended address and hole test
2024-08-15T15:40:00.7057180Z ./tools/test-avrdude: line 322: declare: -A: invalid option
2024-08-15T15:40:00.7057750Z declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
2024-08-15T15:40:00.9218810Z    0.212 s: flash writing R numbers
2024-08-15T15:40:01.1793950Z    0.240 s: flash reading and verifying R numbers
2024-08-15T15:40:01.3661060Z    0.173 s: flash writing R numbers
2024-08-15T15:40:01.6317540Z    0.254 s: flash reading and verifying R numbers
2024-08-15T15:40:01.8235780Z    0.182 s: flash writing R numbers
2024-08-15T15:40:02.0724260Z    0.239 s: flash reading and verifying R numbers
2024-08-15T15:40:02.2713120Z    0.188 s: flash writing R numbers
2024-08-15T15:40:02.4497490Z    0.162 s: flash reading and verifying R numbers
2024-08-15T15:40:02.5897960Z    0.128 s: flash writing R numbers
2024-08-15T15:40:02.8667350Z    0.263 s: flash reading and verifying R numbers
2024-08-15T15:40:03.0635260Z    0.181 s: flash writing srec format
2024-08-15T15:40:03.2152560Z    0.142 s: flash reading and verifying srec format file

After this fix:

2024-08-15T17:23:24.5161820Z Prepare "-cdryrun -pm2560" and press 'enter' or 'space' to continue. Press any other key to skip
2024-08-15T17:23:25.1088990Z    0.162 s: flash raw format -T/-U write/verify cola-vending-machine.raw
2024-08-15T17:23:25.2742090Z    0.157 s: flash extended address and hole test
2024-08-15T17:23:25.4795650Z    0.196 s: flash writing binary numbers
2024-08-15T17:23:25.6721130Z    0.180 s: flash reading and verifying binary numbers
2024-08-15T17:23:25.8423490Z    0.161 s: flash writing octal numbers
2024-08-15T17:23:26.0901770Z    0.235 s: flash reading and verifying octal numbers
2024-08-15T17:23:26.2308860Z    0.127 s: flash writing decimal numbers
2024-08-15T17:23:26.4667010Z    0.228 s: flash reading and verifying decimal numbers
2024-08-15T17:23:26.6574670Z    0.180 s: flash writing hexadecimal numbers
2024-08-15T17:23:26.8651240Z    0.200 s: flash reading and verifying hexadecimal numbers
2024-08-15T17:23:27.0446640Z    0.168 s: flash writing R numbers
2024-08-15T17:23:27.3074230Z    0.250 s: flash reading and verifying R numbers
2024-08-15T17:23:27.4962750Z    0.179 s: flash writing srec format
2024-08-15T17:23:27.6594570Z    0.150 s: flash reading and verifying srec format file
2024-08-16 16:13:28 +02:00
Hans Ulrich Niedermann
4323a43519 test-avrdude: Print the type of the avrdude_bin executable 2024-08-16 16:13:28 +02:00
Hans Ulrich Niedermann
f3e8524cb3 ci: linux-autotools use uninstalled avrdude for test-avrdude
Use the uninstalled avrdude executable and the avrdude.conf config file
which have just been built for the dry-run test with tools/test-avrdude.

Note that the parameter for the config file is a bit unexpected:

    -c "-C path/to/avrdude.conf"
2024-08-16 16:13:28 +02:00
Hans Ulrich Niedermann
a8a8711b34 test-avrdude: Abort if running "avrdude -v" fails 2024-08-16 16:13:28 +02:00
Hans Ulrich Niedermann
a2906da411 test-avrdude: Adapt version check to new version format
The output of the version information in "avrdude -v" has changed between
avrdude 7.3 and now (commit cf0822bb71):

avrdude: Version 7.3

Avrdude version 7.3-20240814 (250a663a)

This means that the old grep call looking for "Version" cannot
find anything any more, and therefore needs to be changed.

This was not discovered as the test-avrdude script neglected to
abort if no version information is found.
2024-08-16 16:13:28 +02:00
Stefan Rueger
e5f4429cc6
Update NEWS 2024-08-16 01:21:46 +01:00
Stefan Rueger
0350d6706b
Merge pull request #1892 from stefanrueger/docu
Improve documentation
2024-08-16 01:20:17 +01:00
Stefan Rueger
baf178981e
Update avrdude.pdf 2024-08-16 01:08:45 +01:00
Stefan Rueger
bd3426131a
Update examples in documentation 2024-08-16 01:01:06 +01:00
Stefan Rueger
d8b977e2d0
Change verbosity for showing connected USB devices 2024-08-15 23:28:26 +01:00
Stefan Rueger
3a35adffb7
Add avrdude.1 docu for pickit5_updi 2024-08-15 22:44:15 +01:00
Stefan Rueger
d45bb3937e
Update avrintel.c 2024-08-15 22:17:45 +01:00
Stefan Rueger
e230d8898e
Fix filename for stdout 2024-08-15 13:09:52 +01:00
Stefan Rueger
f52748db0b
Change libusb cannot configure warning to notice 2024-08-14 20:50:14 +01:00
Stefan Rueger
974e1d2171
Update NEWS and documentation 2024-08-14 18:42:25 +01:00
Stefan Rueger
a708c53103
Update AUTHORS 2024-08-14 18:42:04 +01:00
Stefan Rueger
c78b137782
Clean up documentation 2024-08-14 18:41:09 +01:00
Stefan Rueger
8fcd0fd71c
Record command line when debugging 2024-08-14 18:34:44 +01:00
Stefan Rueger
2b7c9de71c
Merge pull request #1887 from stefanrueger/jtag3_pdi
Fix addresses for jtag3_pdi boot and apptable
2024-08-14 18:05:43 +01:00
Stefan Rueger
90ecd9d8e9
Merge pull request #1886 from stefanrueger/readsize
Fix ATmega1284/P readsize
2024-08-14 18:02:40 +01:00
Stefan Rueger
55fbcbd368
Merge pull request #1883 from stefanrueger/erase
Silently skip erasing read-only parts of a memory
2024-08-14 18:02:01 +01:00
Stefan Rueger
24074248ba
Merge pull request #1880 from MCUdude/usbproduct
Make usbproduct available to programmers
2024-08-14 18:01:42 +01:00
MX682X
beaebd989c
PICkit 5 support (#1863) 2024-08-14 18:01:04 +01:00
Stefan Rueger
418e45492d
Merge pull request #1714 from dl8dtl/swig_libavrdude
SWIG Python wrapper for libavrdude
2024-08-14 17:58:53 +01:00
Stefan Rueger
96023bb32d
Add is_avr32() macro for completeness 2024-08-14 17:58:02 +01:00
Stefan Rueger
e4536c79e4
Replace (unsigned long) -1L with ~0UL 2024-08-14 14:02:51 +01:00
Stefan Rueger
7b0735d146
Fix addresses for jtag3_pdi boot and apptable 2024-08-14 13:55:37 +01:00
Joerg Wunsch
3ca1d7f761 Merge branch 'main' into swig_libavrdude 2024-08-13 22:37:56 +02:00
Joerg Wunsch
31a6b48dc0 Document prerequisites for the GUI 2024-08-13 22:36:50 +02:00
Joerg Wunsch
d55a7901c4 Turn init_cx() into a libavrdude member
Beyond initializing the cx pointer, it turns out more cleanup might be
required when re-initializing the context pointer.  (Normal CLI only
initializes it once, so that's not an issue there.)

Thus, join all the required actions into an init_cx() function
provided by the library.
2024-08-13 22:27:03 +02:00
Stefan Rueger
53dde4fce0
Fix ATmega1284/P readsize 2024-08-13 00:23:02 +01:00
Stefan Rueger
abb6fe6ca2
Refrain from erasing read-only parts of a memory 2024-08-12 18:37:18 +01:00
Stefan Rueger
cd956e827e
Exclude all but flash/eeprom/sig from ALL in debugwire i/fce or -c urclock 2024-08-12 15:31:21 +01:00
Joerg Wunsch
7b7b3d8837 Merge branch 'main' into swig_libavrdude 2024-08-12 13:30:36 +02:00
Joerg Wunsch
3a9857f525 Document how to start the GUI demonstrator 2024-08-12 06:40:30 +02:00
MCUdude
14d6e16bcc Make usbproduct available to programmers 2024-08-11 23:10:14 +02:00
Joerg Wunsch
8af581640e Re-initialize AVRDUDE context cx on new programmer connection
This is meant to clean up everything that has been done before.

For this to work, free up the old pointer first.
2024-08-11 21:50:54 +02:00
Joerg Wunsch
c17ccf610b Add init_cx()
This initializes the global context pointer, similar to what
avrdude's main.c is doing at startup.
2024-08-10 23:41:28 +02:00
Joerg Wunsch
a7eaf6f81f Merge remote-tracking branch 'upstream/main' into swig_libavrdude 2024-08-10 21:46:08 +02:00
Stefan Rueger
11f419f554
Update NEWS 2024-08-09 20:28:06 +01:00
Stefan Rueger
23244e7223
Merge pull request #1877 from stefanrueger/jtag3-prodsig
Fixes for jtag3 programmers and prep for jtagmkII
2024-08-09 20:26:18 +01:00
Stefan Rueger
526ffe1814
Add options -a and -m to test8 2024-08-09 20:24:53 +01:00
Stefan Rueger
5999e5f067
Merge branch 'avrdudes:main' into jtag3-prodsig 2024-08-09 18:35:06 +01:00
Stefan Rueger
c833d9fae0
Update NEWS/docu 2024-08-09 18:34:46 +01:00
Stefan Rueger
3c8ea5e638
Merge branch 'avrdudes:main' into jtag3-prodsig 2024-08-09 18:30:26 +01:00
Stefan Rueger
5537a64cb3
Merge pull request #1876 from stefanrueger/udev-again
Add more hard-coded usbvid/pid to udev rules
2024-08-09 18:29:33 +01:00
Stefan Rueger
2834faf4c1
Merge pull request #1875 from stefanrueger/deprecated
Deprecate obsolete features and options
2024-08-09 18:28:33 +01:00
Stefan Rueger
2ae5f08c9b
Exclude jtag2updi sib memory 2024-08-09 18:20:51 +01:00
Stefan Rueger
80cd5a97ce
Add scope of jtagmkII.c 2024-08-09 18:13:28 +01:00
Stefan Rueger
78f0594971
Update scope of jtag3.c 2024-08-09 18:13:15 +01:00
Stefan Rueger
f2be9b030c
Consider bootrow for jtagmkII and PDI/calibration 2024-08-09 17:11:34 +01:00
Stefan Rueger
08aaf6e361
Add programmer type to -c*/d output 2024-08-09 16:43:02 +01:00
Stefan Rueger
f1df228902
Add bash script tools/test8 for release v8.0 testing 2024-08-09 14:33:30 +01:00
Stefan Rueger
a2c5b02c5d
Fix prodsig memories for jtag3/pdi/classic 2024-08-09 03:01:49 +01:00
Stefan Rueger
c00321dd52
Exclude jtag3 classic jtag prodsig memories 2024-08-09 02:32:34 +01:00
Stefan Rueger
fc0169f676
Add more hard-coded usbvid/pid to udev rules 2024-08-08 19:29:52 +01:00
Stefan Rueger
d91128269a
Deprecate obsolete features and options 2024-08-08 13:52:31 +01:00
Stefan Rueger
28ebfa0a4b
Update README.md with link to avrdude.pdf 2024-08-08 01:25:49 +01:00
Stefan Rueger
cdce41e7d2
Update NEWS/docu 2024-08-08 01:22:26 +01:00
Stefan Rueger
beb8a275ae
Merge pull request #1873 from stefanrueger/random
Initialise dryrun flash with realistic random code
2024-08-08 01:17:29 +01:00
朝日薫 / K.Sato
19d1ab6695
Writing BOOTROW for Curiosity Nano (#1870)
* Fix writing BOOTROW for Curiosity Nano by @askn37 
* Terminal writes to bootrow will do a read/CE/write cycle if needed by @stefanrueger 

Co-authored-by: Stefan Rueger <stefan.rueger@urclocks.com>
2024-08-08 01:15:34 +01:00
Stefan Rueger
c5a2412951
Merge pull request #1869 from stefanrueger/prodsig
Refine programmer/part/memory compatibility for ALL expansion
2024-08-08 01:12:49 +01:00
Stefan Rueger
d9deca0357
Merge pull request #1867 from stefanrueger/udev
Provide dev option `-c \*/u` that shows udev rules
2024-08-08 01:12:10 +01:00
Stefan Rueger
6490c18078
Merge pull request #1865 from stefanrueger/avrdude.pdf
Provide current avrdude.pdf documentation in repo root
2024-08-08 01:11:16 +01:00
Stefan Rueger
6f20b5d767
Merge pull request #1857 from ndim/doc-stop-building-dvi-and-ps
doc: Stop building and installing .ps and .dvi
2024-08-08 01:10:56 +01:00
Stefan Rueger
3cfce5ddb6
Merge pull request #1695 from ndim/improve-autotools-build-part-2
Improve autotools build (part 2/n)
2024-08-08 01:10:33 +01:00
Stefan Rueger
b28f24b222
Merge pull request #1637 from ndim/file-locations-in-docs
Use correct file locations in the documentation
2024-08-08 01:10:09 +01:00
Stefan Rueger
9e78cfef10
Initialise dryrun flash with realistic random code
On -x random dyrun will use only (random) opcodes that
 - The AVR architecture actually has
 - Are benign, ie, not reading/writing I/O or SRAM
 - Stay within the boundaries of the application
2024-08-08 00:53:19 +01:00
Stefan Rueger
57e236a8e6
Provide further op16_...() functions 2024-08-08 00:46:37 +01:00
Stefan Rueger
acac62846d
Add dryrun -xinit=<n> and -xrandom=<n> options 2024-08-07 17:27:12 +01:00
Stefan Rueger
1f72e0cf85
Update indexing of avrdude.texi 2024-08-07 17:05:14 +01:00
Stefan Rueger
41af587da8
Update documentation for USB permissions 2024-08-07 15:52:30 +01:00
Stefan Rueger
9a750de07f
Record USB access problems 2024-08-07 14:48:53 +01:00
Stefan Rueger
0b562510f5
Reformat error debug output of function() file line 2024-08-07 00:56:18 +01:00
Stefan Rueger
9ef51ff026
Silence powerdown comms warning 2024-08-07 00:54:34 +01:00
Stefan Rueger
7d843c4b0c
Provide str_asciiname() 2024-08-07 00:23:59 +01:00
Stefan Rueger
63b0b4a931
Reformat some continuation messages 2024-08-06 23:58:24 +01:00
Hans Ulrich Niedermann
c4d903e155 Use cmake libavrdude SOVERSION/VERSION for autotools
This transfers the information from the CMakeLists.txt
libavrdude VERSION and SOVERSION into the autotools
configure script and (partly) uses the information to
build the libavrdude.la libtool library.

At this time, VERSION must always be SOVERSION.0.0 for
this to work (and that is checked).
2024-08-07 00:53:50 +02:00
Hans Ulrich Niedermann
dfe14e63ae Only build and use libavrdude as a libtool library
As libtool is supposed to be able to build libraries for every
target system, we delegate library building to libtool and stop
building our own static libavrdude.a library.

You can control whether the static/dynamic library is built by
using the --(disable|enable)-(static|dynamic) configure flags.
2024-08-07 00:52:31 +02:00
Hans Ulrich Niedermann
a74c58b32a Keep workaround for no-dist-built-files not being available
As no-dist-built-files was only introduced in Automake 1.16.4,
we cannot rely on that feature being present and need to continue
using our own workaround.

This hooks the dist-hook in a more robust fashion in the face
of multiple dist-hook targets (and versioninfo.mk already uses
one).
2024-08-07 00:37:14 +02:00
Hans Ulrich Niedermann
0b82a1f124 CI: no need to install gettext for linux autotools test 2024-08-07 00:37:14 +02:00
Hans Ulrich Niedermann
50751ee5b3 configure.ac: Guard macros with m4_pattern_forbid
Guard m4 macro calls with m4_pattern_forbid for all
macros which do not come with Autoconf/Automake.

All other macros might not be present on the system,
and it is better to m4_pattern_forbid them and have
autoreconf fail, than to have autoreconf generate a
malformed broken configure script which then always
fails with a weird error message.
2024-08-07 00:37:14 +02:00
Hans Ulrich Niedermann
ef441f58d3 Elaborate comments on versioninfo_*
Elaborate a bit more on the VERSIONINFO_* and versioninfo_*
m4 macros. This should help me get back into things when I
come back to this in a year or so and have forgotten most
of the details.
2024-08-07 00:37:14 +02:00
Stefan Rueger
c16603a96e
Make warning about unused fuse bits a debug message
Different parts read unused fuse bits back with different bit default
values, the ATDF files don't necessarily document this correctly.

Rather than showing a warning that is ignored make this a debug message.
2024-08-06 22:33:14 +01:00
Stefan Rueger
4b03d25aba
Skip memories that the interface/part combo cannot handle 2024-08-06 22:17:35 +01:00
Stefan Rueger
00edcd220e
Make avr_mem_exclude() a libavrdude function 2024-08-06 21:02:49 +01:00
Stefan Rueger
8e10196efd
Fix exceptions for ALL memory list 2024-08-06 14:04:29 +01:00
mcuee
f06b436fe7
Update build.yml to add missing libusb-compat for macOS Homebrew 2024-08-06 15:52:41 +08:00
Stefan Rueger
105f72df31
Refine ALL expansion: exclude known exceptions
For example, classic parts with usersig memory cannot access that using ISP.
2024-08-06 00:31:29 +01:00
Stefan Rueger
546cc8f286
Improve messaging around read errors 2024-08-06 00:19:36 +01:00
Stefan Rueger
3c9d4dbbfe
Define sernum/prodsig ISP read op for t12/t15 2024-08-06 00:19:06 +01:00
Stefan Rueger
98524b33b3
Document user udev rules ought to be 60 or below 2024-08-05 00:57:18 +01:00
Stefan Rueger
74e1fcf13b
Remove comment about reloading udev rules and redraft docu 2024-08-05 00:35:06 +01:00
Stefan Rueger
c090a99aa0
Document udev rule output via -c prog/u 2024-08-04 22:21:14 +01:00
Stefan Rueger
ee8bbe8463
Tweak suggested udev rules 2024-08-04 22:20:37 +01:00
Stefan Rueger
192a34f2db
Provide dev option -c*/u for udev rules 2024-08-04 20:35:09 +01:00
Stefan Rueger
7cc0e08b89
Add relevant usbvid/usbpid to programmers in avrdude.conf 2024-08-04 19:56:35 +01:00
Stefan Rueger
ccc856533f
Provide str_ccpgmids() function 2024-08-04 19:50:43 +01:00
Stefan Rueger
af80e729d9
Provide current avrdude.pdf documentation in repo root 2024-08-03 16:55:00 +01:00
Stefan Rueger
0f4715441c
Update News 2024-08-03 16:47:16 +01:00
Stefan Rueger
a4be96415e
Merge pull request #1864 from stefanrueger/serno-jtag3
Provide -P usb:vid:pid for USB hid i/f and allow long -P usb:serno
2024-08-03 16:30:25 +01:00
Stefan Rueger
420c59f26a
Merge pull request #1862 from stefanrueger/auto-erase
Refine auto-erase strategy
2024-08-03 16:29:38 +01:00
Stefan Rueger
3b9fc405dc
Merge branch 'main' into auto-erase 2024-08-03 16:25:33 +01:00
Stefan Rueger
1c9996b4c7
Merge pull request #1859 from stefanrueger/lockbits-tpi-jpag3
Fix byte writes to TPI lockbits for jpag3.c
2024-08-03 16:22:41 +01:00
Stefan Rueger
b8ceffc040
Merge pull request #1856 from ndim/accept-pdcurses-as-ncurses
cmake: LIB_NCURSES also accept pdcurses
2024-08-03 16:21:31 +01:00
Stefan Rueger
bad3742af8
Merge pull request #1855 from MCUdude/ch342
Add more WCH USB to serial chips
2024-08-03 16:20:44 +01:00
Stefan Rueger
92d4db7262
Provide -P usb:vid:pid for USB hid i/f and allow long -P usb:serno 2024-08-03 16:14:45 +01:00
Stefan Rueger
375c406d23
Merge pull request #1853 from MCUdude/x-E-docs
Add missing documentation from #1844
2024-08-03 15:14:12 +01:00
Stefan Rueger
25e0ea3cba
Merge pull request #1849 from stefanrueger/signature
Update look and feel
2024-08-03 15:12:43 +01:00
Stefan Rueger
fa587c291d
Print return code as (rc = %d) in messages 2024-08-03 02:30:29 +01:00
Stefan Rueger
f3674c3a77
Move some selected _info() msgs to _notice() 2024-08-03 02:27:02 +01:00
Stefan Rueger
a91c0dbce4
Review imgs_ continuation messages 2024-08-03 01:54:16 +01:00
Stefan Rueger
ba29f69b74
Fix upper/lower case in messages 2024-08-03 01:04:29 +01:00
Stefan Rueger
385c2e6b10
Refine auto-erase strategy 2024-08-02 19:02:33 +01:00
Stefan Rueger
8132abbf71
Fix byte writes to TPI lockbits for jpag3.c 2024-08-02 14:11:49 +01:00
Stefan Rueger
0610c87f11
Compare verbose with symbolic MSG_ names 2024-08-02 00:44:06 +01:00
Stefan Rueger
a1b4c66447
Replace some function names in strings with __func__ 2024-08-02 00:20:32 +01:00
Stefan Rueger
d7702dc87d
Move selected notice messages to other levels 2024-08-01 23:36:06 +01:00
Stefan Rueger
4374b44f60
Move selected notice2 messages to debug level 2024-08-01 22:57:10 +01:00
Hans Ulrich Niedermann
7ccd4bc7b8 doc: Stop building and installing .ps and .dvi
Building info, pdf, and HTML is enough.

ps and dvi are not needed any more.
2024-08-01 21:38:31 +02:00
MCUdude
08f5d260a3 Fix typo 2024-08-01 19:39:47 +02:00
MCUdude
850a19a490 Add more WCH SUB to serial chips
USB PIDs found here: https://github.com/WCHSoftGroup/ch343ser_linux/blob/main/driver/ch343.c
2024-08-01 19:34:13 +02:00
MCUdude
1a98ec4547 Add CH342 serial adapter 2024-08-01 19:05:39 +02:00
MCUdude
040ccc48e1 Add -E exitspec section 2024-08-01 15:34:06 +02:00
MCUdude
90caab6653 Tweak grammar 2024-08-01 15:30:38 +02:00
MCUdude
3e28f6fe10 add new -x parameters 2024-08-01 11:00:41 +02:00
MCUdude
62f808be1a Add exitspec section and add new -x parameters 2024-08-01 10:23:57 +02:00
Hans Ulrich Niedermann
cec14ad8ed cmake: LIB_NCURSES also accept pdcurses
The Fedora mingw environment comes with pdcurses, which states

> Note that ncurses is not available for MinGW / Windows.
> Applications which need curses functionality can use this
> package, provided they don't use any of the extensions
> specific to ncurses.

This at least allows the cross compile build to succeed, I
have not tested the executable under Windows or Wine.
2024-08-01 03:25:03 +02:00
Stefan Rueger
1e1ec0bdad
Silence compiler warning 2024-08-01 01:25:44 +01:00
Stefan Rueger
d13a821159
Merge branch 'avrdudes:main' into signature 2024-08-01 01:20:44 +01:00
Stefan Rueger
cf0822bb71
Update look and feel 2024-08-01 01:17:24 +01:00
Stefan Rueger
6bb8b521d3
Silence compiler warnings 2024-07-31 23:07:31 +01:00
Stefan Rueger
42adfbd4e3
Fix typo 2024-07-31 22:53:27 +01:00
Stefan Rueger
f5117fffe0
Merge branch 'avrdudes:main' into signature 2024-07-31 20:47:20 +01:00
Stefan Rueger
20891991d2
Update NEWS 2024-07-31 17:29:30 +01:00
Stefan Rueger
bf3ca02fe0
Merge pull request #1850 from ndim/remove-svn-tags
Remove obsolete SVN $Id$ tags from source files
2024-07-31 17:03:11 +01:00
Stefan Rueger
0fe0470cfe
Merge pull request #1844 from MCUdude/avr109-autorst
Extended parameters (`-x` and `-E`) improvements
2024-07-31 17:02:18 +01:00
Stefan Rueger
cbe0ef9c29
Merge pull request #1843 from MCUdude/libserialport-error
Improve error handling when Avrdude is built without libserialport
2024-07-31 16:59:16 +01:00
Stefan Rueger
7272151236
Merge pull request #1842 from stefanrueger/disasm
Provide terminal disasm command
2024-07-31 16:58:49 +01:00
Stefan Rueger
f3a35fe163
Install elf2tag in bin and document corresponding use 2024-07-31 16:51:58 +01:00
Stefan Rueger
8411fe4e31
Simplify message 2024-07-31 16:15:17 +01:00
Hans Ulrich Niedermann
bc2e3609a1 Remove obsolete SVN $Id$ tags from source files
Remove SVN $Id$ tags from source files which have been made
obsolete by moving to git and serve no purpose any more.

This mostly removes the matches printed by the command

    git grep -E '\$[A-Za-z]+\$'

The remaining exceptions are some binary files (PDF and font files),
and jquery js files with both $Id$ and $Date$ tags.
2024-07-31 17:12:55 +02:00
Stefan Rueger
823118c0ba
Make main avrdude run less verbose 2024-07-31 16:08:17 +01:00
Stefan Rueger
137ece466b
Move tools/elf2tag -> src/elf2tag 2024-07-30 13:17:46 +01:00
Stefan Rueger
3d46a0cd77
Check in elf2tag whether needed commands are installed 2024-07-30 02:40:45 +01:00
Stefan Rueger
d97d05790b
Document terminal disasm command 2024-07-30 02:38:06 +01:00
MCUdude
92a272932e help flag should be false by default, again 2024-07-29 21:35:31 +02:00
MCUdude
a874b521e4 help flag should be false by default 2024-07-29 21:27:59 +02:00
MCUdude
77db93b5d0 Fix formatting and missing brackets 2024-07-29 21:17:33 +02:00
MCUdude
38da070921 Fix bug in the serprog ext parameters parsing 2024-07-29 20:42:58 +02:00
MCUdude
297d256c07 Fix incorrect noautoreset implementation for the Wiring programmer option 2024-07-29 20:20:27 +02:00
MCUdude
3c679b10c6 Add help text for -E exitspec 2024-07-29 19:44:37 +02:00
MCUdude
95b4e7804a Improve -x help for the remaining programmers 2024-07-29 18:04:34 +02:00
MCUdude
9658908e7f check if pgm->type is Arduino instead of pgmid 2024-07-29 17:45:16 +02:00
MCUdude
41e7d81544 Fix issue where help flag wasn't set when it should 2024-07-29 17:43:07 +02:00
Stefan Rueger
df5d1feb89
Add remaining spaces after -x in messages 2024-07-29 16:24:40 +01:00
Stefan Rueger
f37e5930df
Clarify invalid value messages for valid -x parameters ...
... and generally massage messaging around -x parameters
2024-07-29 16:15:11 +01:00
MCUdude
313c8b4d1a Print helptext for all programmers that supports extended params when incorrect param is specified 2024-07-29 10:31:56 +02:00
MCUdude
568bb8e575 Use bool instead of int for help flag 2024-07-29 09:19:50 +02:00
MCUdude
c1a0378229 Print -x help text when invalid extended option is passed 2024-07-29 06:31:50 +02:00
MCUdude
cda52a3a06 Fix autoreset flag for -c arduino
plus a few other minor things
2024-07-28 21:56:49 +02:00
MCUdude
12c41f2d0e Small tweaks based on feedback from @stefanrueger 2024-07-28 20:24:31 +02:00
MCUdude
94e968af91 Use %i instead of %2d 2024-07-28 20:07:57 +02:00
Stefan Rueger
c3d97e923e
Add -xnoautoreset for the -c urclock programmer 2024-07-28 17:57:51 +01:00
Stefan Rueger
c51d50ce09
Add sram.start and sram.end to known symbols 2024-07-28 00:24:39 +01:00
Stefan Rueger
9d2af7323c
Extend ldi symbolic names to ser 2024-07-28 00:09:47 +01:00
Stefan Rueger
a107d02a1b
Format references to labels in space-saving way 2024-07-27 23:34:26 +01:00
Stefan Rueger
7c92a355f9
Strengthen tagfile parsing 2024-07-27 16:50:04 +01:00
Stefan Rueger
95bc4db4b9
Generate symbolic names for ldi on register pairs 2024-07-27 13:32:58 +01:00
Stefan Rueger
e594863f95
Provide op_width() and z_width() 2024-07-27 11:05:06 +01:00
Stefan Rueger
8f7afd6b56
Make opcode mnemonic variants more memorable 2024-07-27 00:17:00 +01:00
Stefan Rueger
5f3d2b4452
Provide ldi_Rd() and ldi_K() extractors 2024-07-26 17:17:17 +01:00
Stefan Rueger
16c3eedc53
Consistently use mnemo and opcode terminology
- ldi is the mnemonic
 - Opcode is the (mostly 16-bit) machine instruction
2024-07-26 16:53:49 +01:00
Stefan Rueger
8001aedfae
Write is_opcode32() and ldi_register() in terms of mnemonics 2024-07-26 16:45:07 +01:00
Stefan Rueger
63e27021e2
Give disasm option variables punchier names 2024-07-26 16:21:33 +01:00
Stefan Rueger
68555d1688
Refrain from labelling zero-distance rjmps/branches 2024-07-26 16:15:37 +01:00
Stefan Rueger
c0aa3b68de
Rename gcc isr vector numbers with isr names 2024-07-26 14:49:42 +01:00
Stefan Rueger
d6c970543d
Only provide main label if not in tagfile 2024-07-26 13:53:34 +01:00
Stefan Rueger
8570dd27fd
Use memory labels for lds/sts 2024-07-26 01:23:55 +01:00
Stefan Rueger
d221e46673
Shorten I/O Register name 2024-07-25 18:36:54 +01:00
Stefan Rueger
32ca573b71
Make list of jumpable addresses a bitfield 2024-07-25 17:40:19 +01:00
Stefan Rueger
fec6e842df
Disassemble a series of 4 or more 0xff as fill block 2024-07-24 19:54:02 +01:00
Stefan Rueger
ac0f0af7bb
Provide disasm -g option that generates avr-gcc source 2024-07-24 18:42:45 +01:00
Stefan Rueger
a14b13e2bd
Consider UTF-8 characters when escaping strings 2024-07-23 23:59:05 +01:00
Stefan Rueger
7162711ebc
Refine opcode_mnemo() to consider reduced-core parts 2024-07-23 16:01:28 +01:00
Stefan Rueger
4526d330ea
Provide disasm -e to show technical explanation in comment 2024-07-22 23:39:33 +01:00
Stefan Rueger
0c3044217b
Provide disasm -n to show full opcode name in comment 2024-07-22 23:31:39 +01:00
Stefan Rueger
dadd9c52cd
Auto-adjust cycles for parts with 3-byte PC 2024-07-22 22:21:01 +01:00
Stefan Rueger
cdcb8fa8a2
Provide disasm -f to show affected flags in SREG 2024-07-22 22:05:41 +01:00
Stefan Rueger
92a6e71ae4
Adjust address when disassembling flash sub-memories, eg, boot 2024-07-22 21:28:27 +01:00
Stefan Rueger
1fcc0d9f91
Consolidate disassm source into one file 2024-07-22 21:27:30 +01:00
MCUdude
0d7524deeb Add -xno_autoreset for the -c wiring programmer 2024-07-22 21:14:10 +02:00
Stefan Rueger
20cb01d4c8
Consolidate CodeLabel, PGMLabel, MemLabel and IO_Register into one symbols struct 2024-07-22 19:40:36 +01:00
MCUdude
5e4a9a7616 Add -xno_autoreset for the -c arduino programmer 2024-07-22 19:27:22 +02:00
Stefan Rueger
4d9ee7aa0f
Rename Type/Comment/Name components for clarity 2024-07-22 17:08:41 +01:00
Stefan Rueger
1721a77259
Rename Type variables/component for self-documentation 2024-07-22 16:33:00 +01:00
MCUdude
aebf970d0c Add -xautoreset option for the AVR109 programmer 2024-07-22 17:31:07 +02:00
Stefan Rueger
1eeaae5740
Warn if destination of jmp/call is outside flash 2024-07-22 14:45:12 +01:00
Stefan Rueger
08ab9cba0e
assign OTY_JMPI to icall (no sram or I/O access) 2024-07-22 14:44:08 +01:00
Stefan Rueger
41c18a2d18
Warn when opcodes have undefined results, eg, ld r26, X+ 2024-07-22 12:50:46 +01:00
Stefan Rueger
d58ad3365c
Move from callbacks to table-driven disassembly 2024-07-22 02:20:54 +01:00
MCUdude
26628ef30d improve libserialport error handling 2024-07-21 16:52:10 +02:00
Stefan Rueger
02fca3d6e7
Remove operand for spm/lpm/(e)ijmp/(e)icall 2024-07-21 10:01:41 +01:00
Stefan Rueger
ea48a29708
Change operands entries from "-" to "" in avr_opcodes table 2024-07-20 22:40:48 +01:00
MCUdude
dcb9c7e70e Improve error handling when Avrdude is built without libserialport 2024-07-20 22:18:34 +02:00
Stefan Rueger
c3732b098e
Add utility functions to avr_opcode.c 2024-07-20 17:21:50 +01:00
Stefan Rueger
d8fea60471
Reorder avr_opcodes table so that first match is reasonable
- Unallocated opcodes come last
 - Specific reduced-core sts/lds opcodes are penultimate
 - More specific opcodes come before less specific ones (clr before eor)
 - Opcodes labelled alias come behind those not labelled so
2024-07-20 15:57:03 +01:00
Stefan Rueger
52608e9dcc
Introduce idname for avr_opcodes table 2024-07-20 15:18:42 +01:00
Stefan Rueger
294f74ce43
Reformat affected SREG flags in avr_opcodes.c 2024-07-20 13:39:48 +01:00
Stefan Rueger
9f439b714a
Introduce opcode type in avr_opcodes.c 2024-07-20 13:11:36 +01:00
Stefan Rueger
68c700c4f5
Correct ijmp/eijmp operand in avr_opcodes.c 2024-07-19 20:37:23 +01:00
Stefan Rueger
8941e0d636
Give weird address the letter a for reduced-core lds/sts 2024-07-19 17:40:09 +01:00
Stefan Rueger
f23a430b2e
Improve Rd/Rr modelling in avr_opcodes.c 2024-07-19 17:02:01 +01:00
Stefan Rueger
ce391927ad
Encode register constraints for tst, clr, lsl and rol 2024-07-19 14:38:20 +01:00
Stefan Rueger
64aeb1203a
Provide a bash script to generate disasm tag files 2024-07-19 00:01:47 +01:00
Stefan Rueger
966f20b858
Adapt AVRDUDE style for GPL 2.0 licence header 2024-07-18 23:48:55 +01:00
Stefan Rueger
ab08e1c1b4
Wrap round flash on disasm 2024-07-18 23:39:40 +01:00
Stefan Rueger
7dbab82a2b
Provide disasm -d for decoding of all opcodes
- Irrespective of the part
  - Including all unallocated opcodes

Unallocated opcodes disassemble as u/opcode, eg, for the famous 0xffff:

7ff2:   ff ff           u/sbrs  r31, 7          ; 0x80 = 128
2024-07-18 23:15:16 +01:00
Stefan Rueger
88ef47c7d1
Label unallocated opcodes with OP_AVR_ILL 2024-07-18 21:10:40 +01:00
Stefan Rueger
22eb262c53
Determine default disasm options 2024-07-18 20:25:19 +01:00
Stefan Rueger
e636a0b4ce
Fix normal lds operand order 2024-07-18 20:12:52 +01:00
Stefan Rueger
a973a92023
Add sts command for reduced-core ATtiny 2024-07-18 20:11:10 +01:00
Stefan Rueger
a1050419f9
Add lds command for reduced-core ATtiny 2024-07-18 20:02:32 +01:00
Stefan Rueger
fe5a40b93c
Add spm Z+ opcode 2024-07-18 19:36:51 +01:00
Stefan Rueger
741b2ef1ef
Add lat opcode 2024-07-18 19:23:13 +01:00
Stefan Rueger
8d7cf774df
Add las opcode 2024-07-18 19:22:03 +01:00
Stefan Rueger
dc2f4df103
Add lac opcode 2024-07-18 19:20:20 +01:00
Stefan Rueger
1454b55a01
Add xch opcode 2024-07-18 19:15:33 +01:00
Stefan Rueger
c8ffcfcbec
Add des opcode 2024-07-18 19:04:29 +01:00
Stefan Rueger
e73e5de097
Loosen condition for recognising existing label 2024-07-18 19:03:57 +01:00
Stefan Rueger
3784b333cd
Fix jumpcall list for repeated use 2024-07-18 17:15:05 +01:00
Stefan Rueger
a16f4a4f89
Zap labels before reading tag file 2024-07-18 16:31:11 +01:00
Stefan Rueger
216b5e6ea9
Consolidate initialisation and header files 2024-07-18 15:16:13 +01:00
Stefan Rueger
be8b49b112
Make sbr implicit through ori 2024-07-18 14:41:06 +01:00
Stefan Rueger
b100868fd6
Reduce code footprint of disasm.c 2024-07-18 14:13:47 +01:00
Stefan Rueger
058265a25a
Update spacing in avr_opcodes table and describe unallocated opcodes 2024-07-18 14:11:46 +01:00
Stefan Rueger
06a40f5017
Adjust address to disassembly start 2024-07-18 02:13:28 +01:00
Stefan Rueger
ebd740d6da
Suppress compiler warning 2024-07-18 01:35:48 +01:00
Stefan Rueger
72c70cb98b
Move remaining static variables into context structure 2024-07-18 01:28:06 +01:00
Stefan Rueger
781c87d034
Move static buffer to closed circuit space 2024-07-18 01:00:04 +01:00
Stefan Rueger
67d627ee4c
Make Operation_xyz() functions static 2024-07-18 00:45:47 +01:00
Stefan Rueger
cf9229ad26
Simplify Tagfile_Resolve_Mem_Address() and avoid static memory 2024-07-18 00:25:24 +01:00
Stefan Rueger
e81ab78a3c
Move remaining memory allocation to mmt_xyz() functions 2024-07-17 23:57:08 +01:00
Stefan Rueger
e7a6a29997
Init MemLabels from avrintel register file 2024-07-17 23:38:58 +01:00
Stefan Rueger
f9ef0ec9d5
Init IORegisters from avrintel register file 2024-07-17 22:47:19 +01:00
Stefan Rueger
3a7c295aa9
Only disassemble opcodes that the part has 2024-07-17 21:35:29 +01:00
Stefan Rueger
a7cf86da1b
Show opcode cycles depending on part 2024-07-17 20:58:50 +01:00
Stefan Rueger
6290e92303
Remove pseudocode disassembly 2024-07-17 19:09:07 +01:00
Stefan Rueger
fe26375884
Compute opcodes for disasm, given the part 2024-07-17 18:49:58 +01:00
Stefan Rueger
be125ee0ce
Provide avr-gcc's archnum in avrdude.conf 2024-07-17 15:37:42 +01:00
Stefan Rueger
f78b407358
Model availability of opcodes for parts 2024-07-17 15:18:49 +01:00
Stefan Rueger
3bc3c0f4d9
Utilize flash size for disasm 2024-07-17 01:39:18 +01:00
Stefan Rueger
483cc07d9d
Rename _ld[1-3]/_st[1-3] to _ldx[1-3]/_stx[1-3] 2024-07-17 01:35:49 +01:00
Stefan Rueger
8e864afcf0
Lowercase opcode mnemonics 2024-07-16 22:27:07 +01:00
Stefan Rueger
baab44f9f5
Provide avr_opcodes[] table 2024-07-16 22:21:26 +01:00
Stefan Rueger
6d62c8312a
Enum opcodes instead of #define 2024-07-16 20:44:37 +01:00
Stefan Rueger
ae414be93d
Move global disasm variables into context structure 2024-07-16 19:49:57 +01:00
Stefan Rueger
a7cf143934
Assert const-ness of pointer arguments 2024-07-16 15:10:03 +01:00
Stefan Rueger
825c93e64f
Provide disasm terminal command 2024-07-16 14:44:47 +01:00
Stefan Rueger
ec285290fe
Remove option parsing from disasm files 2024-07-16 14:43:34 +01:00
Stefan Rueger
d3dbf3505a
Remove tools.[ch] and functions.h & rewrite BitCount() 2024-07-16 11:17:14 +01:00
Stefan Rueger
b2ead9a4ef
Make disasm files part of compilation 2024-07-16 11:10:55 +01:00
Stefan Rueger
a21f84bb64
Rename and reformat disasm files 2024-07-16 11:09:58 +01:00
Stefan Rueger
8f575224b1
Add avrdisas-0.07 sources 2024-07-16 10:31:41 +01:00
Stefan Rueger
5dc2399694
Update NEWS 2024-07-15 17:41:26 +01:00
Stefan Rueger
96090dd688
Merge pull request #1840 from stefanrueger/signature-check
Improve signature check for UPDI parts
2024-07-15 17:34:53 +01:00
Stefan Rueger
6039247ce2
Merge pull request #1835 from dbuchwald/issue_1832
Alternative fix proposal for #1832
2024-07-15 17:34:02 +01:00
Stefan Rueger
2c57c2e6b8
Merge pull request #1829 from stefanrueger/additional-memories
Add  fuses, calibration, sernum and tempsense memories to XMEGAs
2024-07-15 17:32:59 +01:00
Stefan Rueger
ca4534af84
Remove unnecessary empty lines in avrdude.conf 2024-07-15 17:31:55 +01:00
Stefan Rueger
f3caabf264
Make dryrun vector tables more realistic 2024-07-15 15:57:53 +01:00
Stefan Rueger
e4c67c2c6e
Skip stump parts and all 0xff/0x00 signatures in locate_part_by_signature() 2024-07-15 15:56:36 +01:00
Stefan Rueger
dbb1ceff1a
Fix jtag3 access to UPDI sigrow sub-memories 2024-07-14 23:12:20 +01:00
Stefan Rueger
0c710432d2
Update term command usage 2024-07-14 23:09:03 +01:00
Stefan Rueger
d8836d3819
Fix jtag3 access to prodsig sub-memories 2024-07-14 19:40:27 +01:00
Stefan Rueger
99bd83c186
Suppress overzealous compiler warnings 2024-07-14 19:27:04 +01:00
Stefan Rueger
43c915aca3
Skip parts with all 0xff/0x00 signature 2024-07-14 19:13:45 +01:00
Stefan Rueger
811d01e9db
Check several signature offsets when trying a -p UPDI part 2024-07-14 18:35:37 +01:00
Stefan Rueger
31bed52080
Consider prog_modes in str_ccmcunames_signature() 2024-07-14 17:59:40 +01:00
Stefan Rueger
44104df3e2
Add missing space 2024-07-14 15:46:24 +01:00
Stefan Rueger
96e92ba470
Extend prodsig and sernum to virtually all classic parts 2024-07-14 01:24:13 +01:00
Stefan Rueger
7fbd963ea4
Rearrange classic parts and parenting in avrdude.conf
Although, on the surface of it, every entry of a classic part has been
changed, and some radically so by different parenting, there are only
subtle changes in AVRDUDE's internal representation:
 - 15 parts that did not have an io memory entry now have one
 - Some ISP opcodes were replaced with equivalent ones (x maps to 0)

This has been checked using the development options, particularly -p*/At,
before and after the changes.

The benefit of the new avrdude.conf is that every (non-TPI) classic part
is now derived from a common .classic or .classic-nocal stub. This enables
putting a common prodsig and sernum memory there. Generally, parenting
off now only happens between related chips. All in all, more systematic.
And it's some 10% smaller, too.
2024-07-14 00:55:50 +01:00
Stefan Rueger
90a4a54fd3
Map x-bits to 0 for SPI opcode comparison 2024-07-14 00:41:14 +01:00
Stefan Rueger
8f7160799a
Correct comments 2024-07-13 20:17:01 +01:00
Stefan Rueger
71029c515a
Fix write delays for some classic parts
Compared the T WD_FUSE etc values in the data sheets for m169, m169a,
m169p, m169pa, m3290a, m3290p, m3290pa, m329a, m329p, m329pa, m6490a,
m6490p, m649a, m649p and m8535.
2024-07-13 14:31:48 +01:00
Stefan Rueger
6ca23bd3c7
Utilise PM_Classic in code 2024-07-12 19:52:13 +01:00
Stefan Rueger
6f92e188fd
Enable sigrow sub-memory reading for butterfly 2024-07-12 19:06:23 +01:00
Stefan Rueger
b23370a8c1
Enable sigrow sub-memory reading for avrftdi_jtag 2024-07-12 19:05:42 +01:00
Stefan Rueger
1ce9154664
Review sigrow sub-memory treatment in jtag*.c 2024-07-12 19:04:19 +01:00
Stefan Rueger
45d1bea575
Enable classic sernum read for ISP/HVPP/HVSP/JTAG in stk500v2.c 2024-07-12 18:53:16 +01:00
Stefan Rueger
8a4c00fc21
Add ability to read classic sernum mem to avr_read_byte_default() 2024-07-12 18:41:37 +01:00
Stefan Rueger
be63435aa2
Copy sernum into prodsig for classic parts in dryrun.c 2024-07-12 18:37:28 +01:00
Stefan Rueger
8d1ea38297
Fix plural in message 2024-07-12 18:25:21 +01:00
Stefan Rueger
6979fce1ee
Fix sernum entries for classic parts 2024-07-12 17:52:54 +01:00
Stefan Rueger
f489dac5f7
Fix typo 2024-07-10 19:38:10 +01:00
Dawid Buchwald
e7f7691367 Rolled back page erase feature as not needed anymore 2024-07-07 17:21:12 +02:00
Dawid Buchwald
69a55458da Merge branch 'main' into issue_1832 2024-07-07 17:15:05 +02:00
Stefan Rueger
09d4dbb5b9
Merge branch 'avrdudes:main' into additional-memories 2024-07-07 14:46:03 +01:00
Stefan Rueger
d10986f12c
Update News 2024-07-07 14:43:47 +01:00
Stefan Rueger
883a6147f7
Merge pull request #1837 from stefanrueger/updi-page-erase
Use page erase for UPDI programming
2024-07-07 14:40:20 +01:00
Stefan Rueger
c82a80435e
Merge pull request #1836 from stefanrueger/erase-note
Improve chip erase emulation for dryboot/dryrun
2024-07-07 14:40:00 +01:00
Stefan Rueger
fa618a8440
Improve documentation for terminal erase 2024-07-07 12:15:19 +01:00
Stefan Rueger
0f74b7be85
Remove note on what CE might erase 2024-07-07 00:08:57 +01:00
Stefan Rueger
d3ce83ce0e
Provide dryrun_page_erase() for PDI/UPDI parts 2024-07-07 00:07:52 +01:00
Stefan Rueger
4e2413bacb
Use page erase for UPDI programming 2024-07-06 16:01:46 +01:00
Stefan Rueger
9d21e05059
Not show EEPROM erase note when a bootloader 2024-07-06 02:07:44 +01:00
Stefan Rueger
1e05d70cda
Improve chip erase emulation for dryboot/dryrun 2024-07-06 02:02:28 +01:00
Stefan Rueger
91cd1f9673
Handle chip erase correctly for bootrow 2024-07-06 01:47:25 +01:00
Stefan Rueger
72064357ae
Inform user whether terminal erase includes EEPROM 2024-07-05 18:26:32 +01:00
Dawid Buchwald
640bf85b12 Alternative fix proposal for #1832 2024-07-05 10:23:11 +02:00
Stefan Rueger
42c984c9e8
Update NEWS 2024-07-05 02:49:20 +01:00
Stefan Rueger
816d1fd5cf
Merge pull request #1830 from stefanrueger/show-avrintel
Add developer options /vcr to explore software compatibility of parts
2024-07-04 21:20:52 +01:00
Stefan Rueger
6de1cd928e
Place classic prodsig submemories into flat address model 2024-07-04 20:34:57 +01:00
Stefan Rueger
ff35f53653
Prevent warnings for incomplete stump XMEGA family entries 2024-07-04 20:25:23 +01:00
Stefan Rueger
dbb2fc36e4
Adapt dryrun.c to new XMEGA memories 2024-07-04 20:23:01 +01:00
Stefan Rueger
5f5f081b98
Merge branch 'main' into additional-memories 2024-07-04 18:09:01 +01:00
Stefan Rueger
808457e53e
Fix flash size of x128a4 2024-07-04 18:07:34 +01:00
Stefan Rueger
56e6535f96
Document the new fuses memory for XMEGAs 2024-07-04 18:07:34 +01:00
Stefan Rueger
d184b10e54
Fix access to sigrow submemories in jtag3.c 2024-07-04 18:07:33 +01:00
Stefan Rueger
110c7f9614
Add collective fuses memory for XMEGAs 2024-07-04 18:07:33 +01:00
Stefan Rueger
cde5d3e461
Add sernum memory to m324pb, m328pb, t102 and t104 2024-07-04 18:07:33 +01:00
Stefan Rueger
ebe370ab0e
Document XMEGA calibration, sernum and tempsense memories 2024-07-04 18:07:32 +01:00
Stefan Rueger
3ea386898e
Merge pull request #1828 from stefanrueger/multi-memory-input
Multi-memory file handling
2024-07-04 17:17:47 +01:00
Stefan Rueger
7427a8e371
Remove -U/-T/-t heading when only one requested 2024-07-04 15:43:23 +01:00
Stefan Rueger
4f25cf8be6
Remove processing -U ... heading for backup/restore/verify 2024-07-04 15:33:36 +01:00
Stefan Rueger
2e1b66fb34
Add more documentation for memory lists 2024-07-04 11:24:13 +01:00
Stefan Rueger
2ad860a53a
Remove unused code 2024-07-04 00:03:07 +01:00
Stefan Rueger
23e835b8a3
Document multi-memory files and dryrun options 2024-07-02 23:05:17 +01:00
Stefan Rueger
5cf2908a08
Warn when generating multi-memory list with unsuitable format
AVRDUDE will happily generate all sorts of file formats from multiple
memories, but only understands hex, srec and elf files.
2024-07-02 20:17:34 +01:00
Stefan Rueger
3aaa722f72
Inspect memory lists to decide whether initial chip erase is needed 2024-07-02 19:48:48 +01:00
Stefan Rueger
7647aaa4fc
Show filename not pathname in -U warnings/errors 2024-07-01 00:55:33 +01:00
Stefan Rueger
dab725a343
Provide str_infilename() and str_outfilename() 2024-07-01 00:52:30 +01:00
Stefan Rueger
f1ff03d562
Change /mem to \mem for subtracting mem from list
/mem has the meaning of ALL\mem in set theory, which could cause confusion.
2024-07-01 00:30:46 +01:00
Stefan Rueger
b65c3c49b7
Fix reccount when writing srec files 2024-07-01 00:26:35 +01:00
Stefan Rueger
8a194719ba
Remove unused variables 2024-07-01 00:26:01 +01:00
Stefan Rueger
c584f84a8e
Move signature check into multi-memory file read 2024-07-01 00:18:55 +01:00
Stefan Rueger
cfaee38275
Provide avr_sig_compatible() 2024-06-30 23:53:52 +01:00
Stefan Rueger
3722abccd4
Provide str_ccmcunames_signature() 2024-06-30 22:39:53 +01:00
Stefan Rueger
5ac7c96958
Explicitly test for part being UPDI rather than assuming default 2024-06-30 22:37:37 +01:00
Stefan Rueger
30749c9673
Use PM_Classic instead of !(PM_PDI | PM_UPDI) 2024-06-29 09:00:45 +01:00
Stefan Rueger
7d70d5406f
Change memory list syntax to mem0,mem1,-mem2,/mem3,...
... where -mem or /mem removes a memory from the list so far
2024-06-29 00:33:44 +01:00
Stefan Rueger
e3da82b1ec
Mark output of /vcr dev options for automated processing 2024-06-28 16:35:54 +01:00
Stefan Rueger
95dac08ccd
Add developer option /r for listing registers 2024-06-28 16:34:24 +01:00
Stefan Rueger
9a79a6866f
Check dev_info() format at gnuc compile time 2024-06-28 13:54:30 +01:00
Stefan Rueger
e829a46a49
Add developer option /c for listing configuration options 2024-06-28 13:47:41 +01:00
Stefan Rueger
bcf88e13d7
Add developer option /v for listing interrupt vector names 2024-06-28 13:44:23 +01:00
Stefan Rueger
3990fdf84b
Add only classic parts developer options /C 2024-06-28 11:54:15 +01:00
Stefan Rueger
13683c1546
Move developer options /c /r to /e /R 2024-06-28 11:52:49 +01:00
stefanrueger
b2ed09f73d
Provide terminal verify <memlist> <file>[:format] 2024-06-27 18:21:04 +00:00
stefanrueger
5e846098c8
Provide terminal restore <memlist> <file>[:format] 2024-06-27 18:19:32 +00:00
stefanrueger
dd2a40f81d
Provide terminal backup <memlist> <file>[:format] 2024-06-27 17:21:30 +00:00
stefanrueger
a02995749c
Utilise fileio_format_with_errmsg() in parse_op() 2024-06-27 17:20:23 +00:00
stefanrueger
485ad6de91
Provide fileio_format_with_errmsg() 2024-06-27 17:15:01 +00:00
stefanrueger
bc0c1a0499
Fix Windows complaint about missing random()/srandom() 2024-06-26 16:49:10 +00:00
stefanrueger
42081e5606
Initialise memories on -c dryrun -xinit or -xrandom
$ avrdude -c dryrun -xhelp
avrdude -c dryrun extended options:
  -xinit     Initialise memories with human-readable patterns (1, 2, 3)
  -xrandom   Initialise memories with random code/values (1, 3)
  -xseed=<n> Seed random number generator with <n>, default time(NULL)
  -xhelp     Show this help menu and exit
Notes:
  (1) -xinit and -xrandom randomly configure flash wrt boot/data/code length
  (2) Patterns can best be seen with fixed-width font on -U flash:r:-:I
  (3) Choose, eg, -xseed=1 for reproducible flash configuration and output

For example:

$ avrdude -c dryrun -p 16eb28 -xinit -xseed=7 -UALL:r:backup-dry.hex:I

backup-dry.hex will be a human-readable multi-memory .hex file for testing
that has memories initialised with non-trivial contents. Great care has
been taken that the generated flash code is valid and benign, ie, it won't
touch I/O peripherals, SRAM or flash.

Can be restored with

$ avrdude -cdryrun -p 16eb28 -U ALL:w:backup-dry.hex
2024-06-26 16:22:48 +00:00
Stefan Rueger
76353b8218
Provide str_is_in_list() 2024-06-25 14:33:00 +01:00
Stefan Rueger
9a834c37c7
Update avrintel.c 2024-06-25 12:06:49 +01:00
Stefan Rueger
41eacd0eed
Fix flash page size for x128a4 2024-06-25 12:04:25 +01:00
Stefan Rueger
ad312b985a
Fix boot_section_size for x128a4 2024-06-25 01:04:05 +01:00
Stefan Rueger
f06b3dd5b9
Fix boot_section_size for AVR-Ex parts 2024-06-25 00:08:54 +01:00
Stefan Rueger
d4d6835bdf
Fix dryrun's paged write to XMEGA overlapping flash memories 2024-06-24 17:28:22 +01:00
Stefan Rueger
f3fbb2eb1d
Default -U multi-memory backups to Intel Hex with comments 2024-06-24 00:24:29 +01:00
Stefan Rueger
1a2ac74a7b
Label segments with memory names in .hex:I output files 2024-06-23 20:50:31 +01:00
Stefan Rueger
9bf11fd67a
Make sigs argument of str_mcunames_signature() const 2024-06-23 20:38:20 +01:00
Stefan Rueger
eb412304ee
Provide avr_locate_uP() 2024-06-22 12:31:59 +01:00
Stefan Rueger
23324622d9
Formalise multi-memory address layout 2024-06-22 00:33:26 +01:00
Stefan Rueger
06b64bf9fb
Provide ALL memory (all + sub-memories excluded from all) 2024-06-21 21:40:02 +01:00
Stefan Rueger
2373b0a06c
Fix access for XMEGA sernum and tempsense 2024-06-20 00:06:25 +01:00
Stefan Rueger
5d322eb9dc
Add calibration, sernum and tempsense sub-memories to XMEGAs 2024-06-19 22:09:25 +01:00
Stefan Rueger
9576aec26a
Fix boot_section_size of ATxmega128A4 2024-06-19 21:57:35 +01:00
Stefan Rueger
59cda4a216
Parent XMEGA parts from common family sub-group
This commit makes the parent of XMEGA parts one of three common ones:
 - .xmega-ab for XMEGA-A or XMEGA-B parts
 - .xmega-cd for XMEGA-C or XMEGA-D parts
 - .xmega-e for  XMEGA-E parts

The commit does not change any feature of parts or memories.
In order to prove this carry out before this commit

$ avrdude -p */At >/tmp/1

After this commit, the following command should not have any output:

$ avrdude -p */At | sort | comm -3 - /tmp/1 | grep -v family.common.values

(The only feature changes in the .xmega-* prototypes.)
2024-06-19 21:52:01 +01:00
Stefan Rueger
9a446ec0bb
Check signature of part against multi-memory file signature
... to avoid tears when mistakenly restoring a backup from another part

$ avrdude -c dryrun -p t167 -U all:r:backup.hex:I

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e9487 (probably t167)

avrdude: processing -U all:r:backup.hex:r
         reading multiple memories ...
         eeprom      | ################################################## | 100% 0.00s
         flash       | ################################################## | 100% 0.00s
         lfuse       | ################################################## | 100% 0.00s
         hfuse       | ################################################## | 100% 0.00s
         efuse       | ################################################## | 100% 0.00s
         lock        | ################################################## | 100% 0.00s
         signature   | ################################################## | 100% 0.00s
         calibration | ################################################## | 100% 0.00s
         writing 16904 bytes to output file backup.hex

avrdude done.  Thank you.

$ avrdude -c urclock -p m328p -b 115200 -P /dev/ttyUSB0 -U all✌️backup.hex:I

avrdude -c urclock -p m328p -b 115200 -P /dev/ttyUSB0 -U all✌️backup.hex
avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)

avrdude: processing -U all✌️backup.hex:i
avrdude: verifying 16904 bytes of multiple memories against input file backup.hex
avrdude error: signature of ATmega328P does not match file (ATtiny167, ATA5505, ATA6617C, ATA664251)
        use -F to override this check

avrdude done.  Thank you.

$ avrdude -c dryrun -p m328p -U all:w:backup.hex:I -F

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)

avrdude: processing -U all:w:backup.hex:I
avrdude: reading 16904 bytes for multiple memories from input file backup.hex
avrdude: 512 bytes eeprom in 1 section [0, 0x1ff]: 128 pages and 0 pad bytes
         writing 512 bytes to eeprom ...
         writing | ################################################## | 100% 0.00s
         reading | ################################################## | 100% 0.00s
         512 bytes of eeprom verified
avrdude: 16384 bytes flash in 1 section [0, 0x3fff]: 128 pages and 0 pad bytes
         writing 16384 bytes to flash ...
         writing | ################################################## | 100% 0.00s
         reading | ################################################## | 100% 0.00s
         16384 bytes of flash verified
avrdude: 1 byte lfuse in 1 section [0, 0]
         writing 1 byte to lfuse (0x62), 1 byte written, 1 verified
avrdude: 1 byte hfuse in 1 section [0, 0]
         writing 1 byte to hfuse (0xdf), 1 byte written, 1 verified
avrdude: 1 byte efuse in 1 section [0, 0]
         writing 1 byte to efuse (0xff), 1 byte written, 1 verified
avrdude: 1 byte lock in 1 section [0, 0]
         writing 1 byte to lock (0xff), 1 byte written, 1 verified

avrdude done.  Thank you.
2024-06-19 00:33:44 +01:00
Stefan Rueger
392ccf8814
Specify memory name in verfication error 2024-06-19 00:28:22 +01:00
Stefan Rueger
b366078e6a
Provide str_mcunames_signature() 2024-06-19 00:27:26 +01:00
Stefan Rueger
0e4d8fd483
Allow etc to be used in lieu of all in memory lists 2024-06-18 22:53:52 +01:00
Stefan Rueger
adf2e5b98b
Ignore but warn about verification errors in readonly memory 2024-06-18 22:37:33 +01:00
Stefan Rueger
128b82d9a8
Introduce without operator \ in memory lists 2024-06-18 22:30:50 +01:00
Stefan Rueger
847fcd5ad8
Utilise memory_list function for update_dryrun() 2024-06-18 19:12:44 +01:00
Stefan Rueger
f6e7eb7a6c
Separate function creating a memory list from a string 2024-06-18 18:49:24 +01:00
Stefan Rueger
afd65c040f
Enable verifying a single file against -U [<list>|all]✌️... 2024-06-18 18:35:53 +01:00
Stefan Rueger
bb9df2f7bc
Automatic verify on writing to multiple -U memories 2024-06-18 17:17:11 +01:00
Stefan Rueger
3b728a3449
Provide avr_verify_mem() 2024-06-17 20:05:04 +01:00
Stefan Rueger
a3347d7b0d
Enable writing input to multiple memories via -U [<list>|all]:w:... 2024-06-17 17:18:15 +01:00
Stefan Rueger
bdde862bae
Prepare update.c for multiple memory write 2024-06-17 17:00:35 +01:00
Stefan Rueger
1cc25f3284
Unify memory description for memory list 2024-06-17 15:03:08 +01:00
Stefan Rueger
bc5db547d9
De-duplicate memory list, keeping order 2024-06-17 14:44:42 +01:00
Stefan Rueger
9ab4aac045
Switch off trailing 0xff optimisation when writing memory lists to file
It is crucial not to skip empty flash memory: otherwise the output file
cannot distinguish between flash having been deliberately dropped by the
user or it having been empty.
2024-06-17 12:41:02 +01:00
Stefan Rueger
0be19da627
Simplify code using string trim functions 2024-06-17 11:08:56 +01:00
Stefan Rueger
9f8eeaa76d
Provide string trim functions 2024-06-17 10:53:57 +01:00
Stefan Rueger
1d2983e46d
Provide memstats_mem() 2024-06-17 10:29:49 +01:00
Stefan Rueger
39ed283a11
Enable writing multi-memory files via -U all:r:... or -U <list>:r:... 2024-06-16 23:54:25 +01:00
Stefan Rueger
693f5e60bd
Provide str_numc(str, c) 2024-06-16 23:06:12 +01:00
Stefan Rueger
d949c06c71
Sort fuses by offset in memory list 2024-06-16 18:41:19 +01:00
Stefan Rueger
dfc22ea966
Provide fileio_mem() function 2024-06-16 17:53:43 +01:00
Stefan Rueger
c235adf5c9
Remove in-flash/sigrow attr if no respective memories exist 2024-06-16 17:45:33 +01:00
Stefan Rueger
0e61f33739
Remove 'in sigrow' attribute from some signature/calibration memories 2024-06-16 15:38:59 +01:00
Stefan Rueger
26d1753c9e
Fix memory leak from alias_mem_desc 2024-06-16 15:07:54 +01:00
Stefan Rueger
9273bd7bd4
Extend .srec fileio() to multiple-memory input files 2024-06-16 13:29:37 +01:00
Stefan Rueger
88a9a269be
Define mem_is_prodsig() and mem_is_usersig() 2024-06-16 13:06:49 +01:00
Stefan Rueger
61a130dc64
Extend .hex fileio() to multiple-memory input files 2024-06-16 13:04:25 +01:00
Stefan Rueger
dd6fea2e3d
Clarify role of Segorder where variable 2024-06-15 13:37:23 +01:00
Stefan Rueger
41781bdd3c
Update NEWS 2024-06-15 13:17:35 +01:00
Stefan Rueger
2586ba8b25
Merge pull request #1822 from stefanrueger/exit-on-write-byte-error
Return -1 on write error
2024-06-15 12:14:17 +00:00
Stefan Rueger
7b4605c4c9
Merge pull request #1820 from stefanrueger/bootrow-elf
Extend elf format for bootrow
2024-06-15 12:14:04 +00:00
Stefan Rueger
0283517042
Merge pull request #1819 from stefanrueger/authors
Update AUTHORS list
2024-06-15 12:13:48 +00:00
Stefan Rueger
da6418ea7e
Merge pull request #1818 from stefanrueger/out-of-bounds
Downgrade out-of-range file input errors to warnings on -F
2024-06-15 12:13:19 +00:00
Stefan Rueger
6b9102b879
Fix email address in AUTHORS list 2024-06-15 13:08:48 +01:00
Stefan Rueger
3bca53f3fa
Add Jan Egil Ruud as author to jtag3 sources 2024-06-15 13:07:22 +01:00
Stefan Rueger
9279530ea5
Return -1 on write error 2024-06-14 19:16:00 +01:00
Stefan Rueger
aed7c07a6a
Extend elf format for bootrow 2024-06-13 21:30:57 +01:00
Stefan Rueger
3f73f0b88d
Update AUTHORS list 2024-06-12 23:50:41 +01:00
Stefan Rueger
98268b07ba
Make copyright notice systematic/greppable 2024-06-12 23:50:04 +01:00
Stefan Rueger
212b822657
Remove unnecessary fileoffset comparison 2024-06-12 22:50:57 +01:00
Stefan Rueger
2d2da40e5d
Remove unnecessary loadofs changes 2024-06-12 22:35:46 +01:00
Stefan Rueger
5315c620f6
Downgrade S-Record out-of-bounds error to warning on -F 2024-06-12 22:33:46 +01:00
Stefan Rueger
5fef24a7bf
Add debug message after reading hex record\n 2024-06-12 22:21:22 +01:00
Stefan Rueger
b151bb6b9c
Downgrade hex out-of-bounds error to warning on -F 2024-06-12 22:19:09 +01:00
Stefan Rueger
21802d7a69
Widen address print size 2024-06-12 21:31:00 +01:00
Stefan Rueger
ffdf66d927
Make Copyright notices greppable/systematic 2024-06-10 20:40:11 +01:00
Stefan Rueger
2754cb0d62
Update NEWS 2024-06-01 08:59:18 +01:00
Stefan Rueger
4fcb10d1ac
Merge pull request #1816 from stefanrueger/differentiate-prog-mode
Allow selection of program modes for developer options
2024-06-01 07:56:22 +00:00
Stefan Rueger
48b58746ae
Merge pull request #1815 from stefanrueger/usbhidopen-sn-sigfault
Guard serial_number access in usbhid_open() to avoid segfault
2024-06-01 07:55:30 +00:00
Stefan Rueger
0033d2d66d
Merge pull request #1814 from stefanrueger/t11-eeprom
Remove EEPROM from ATtiny11 avrdude.conf entry
2024-06-01 07:54:09 +00:00
Stefan Rueger
4e4409703c
Merge pull request #1801 from funkeleinhorn/serprog-programmer
Add serprog programmer
2024-06-01 07:53:36 +00:00
Stefan Rueger
d3c1777135
Add /d developer option for -c 2024-05-29 22:55:29 +01:00
Stefan Rueger
a7ba014d5a
Allow selection of program modes for developer options 2024-05-29 22:46:18 +01:00
Stefan Rueger
e0a5d47bbe
Guard serial_number access in usbhid_open() to avoid sigfault 2024-05-27 16:19:05 +01:00
Stefan Rueger
aa772876e5
Remove EEPROM from ATtiny11 avrdude.conf entry 2024-05-27 16:16:48 +01:00
Stefan Rueger
acf59cb61c
Convert bitclock period to frequency 2024-05-21 23:46:10 +01:00
Stefan Rueger
a986305229
Format source code in new AVRDUDE style (and minor changes) 2024-05-21 23:18:41 +01:00
Stefan Rueger
a3e4c8083e
Update NEWS 2024-05-20 12:28:53 +01:00
Stefan Rueger
0f562813f9
Merge pull request #1810 from stefanrueger/prog_modes
Warn when programmer failes to define `prog_modes`
2024-05-20 11:21:05 +00:00
Stefan Rueger
b53655d2f6
Merge pull request #1809 from stefanrueger/foo_t
Rename AVRDUDE symbol names ending in _t
2024-05-20 11:20:33 +00:00
Stefan Rueger
0f3702fc0e
Add sed script to comment about deprecated _t names 2024-05-20 12:15:34 +01:00
Stefan Rueger
32fc19bbb4
Give notice to deprecate libavrdude-avrintel.h _t types 2024-05-20 01:33:03 +01:00
Stefan Rueger
184e0c92fe
Give notice that some _t types are going to be deprecated 2024-05-20 01:23:17 +01:00
Stefan Rueger
f86ef2e89d
s/\bSegment_t\b/Segment/g 2024-05-20 01:16:09 +01:00
Stefan Rueger
8b748b3c22
s/\bpin_checklist_t\b/pin_checklist/g 2024-05-20 01:15:25 +01:00
Stefan Rueger
10d58084e4
s/\bmemtype_t\b/Memtype/g 2024-05-20 01:10:47 +01:00
Stefan Rueger
23f87637cb
s/\bmemtable_t\b/Memtable/g 2024-05-20 01:09:13 +01:00
Stefan Rueger
fe1f0b7e73
s/\bleds_t\b/Leds/g 2024-05-20 01:08:43 +01:00
Stefan Rueger
f4994dceae
s/\bexit_vcc_t\b/Exit_vcc/g 2024-05-20 01:06:56 +01:00
Stefan Rueger
f52bd57584
s/\bexit_reset_t\b/Exit_reset/g 2024-05-20 01:06:40 +01:00
Stefan Rueger
9d75341ef8
s/\bexit_datahigh_t\b/Exit_datahigh/g 2024-05-20 01:06:25 +01:00
Stefan Rueger
564b95e6f9
s/\bconntype_t\b/Conntype/g 2024-05-20 01:05:57 +01:00
Stefan Rueger
cd90f3c958
s/\bRegister_file_t\b/Register_file/g 2024-05-20 01:04:43 +01:00
Stefan Rueger
97c4f89851
s/\bConfigitem_t\b/Configitem/g 2024-05-20 01:04:28 +01:00
Stefan Rueger
d6a6cea233
s/\bValueitem_t\b/Configvalue/g 2024-05-20 01:04:14 +01:00
Stefan Rueger
cf9e291995
s/\bComponent_t\b/Component/g 2024-05-20 01:03:56 +01:00
Stefan Rueger
1ce7d82d34
s/\buPcore_t\b/Avrintel/g 2024-05-20 01:03:00 +01:00
Stefan Rueger
8e07455941
s/\bupdate_t\b/update/g 2024-05-20 01:02:39 +01:00
Stefan Rueger
8acd181f78
s/\bpinmask_t\b/pinmask/g 2024-05-20 01:02:11 +01:00
Stefan Rueger
5148038401
s/\bpindef_t\b/pindef/g 2024-05-20 00:58:08 +01:00
Stefan Rueger
e926fc1a1c
s/\bctl_stack_t\b/ctl_stack/g 2024-05-20 00:55:16 +01:00
Stefan Rueger
5b707be3de
s/\bprogrammer_type_t\b/programmer_type/g 2024-05-20 00:53:55 +01:00
Stefan Rueger
d0875fc267
Update avrintel files 2024-05-20 00:49:32 +01:00
Stefan Rueger
a98c6f436d
s/\bprogrammer_t\b/programmer/g 2024-05-20 00:47:26 +01:00
Stefan Rueger
6d136a129c
Rename struct programmer_t to PROGRAMMER 2024-05-20 00:44:02 +01:00
Stefan Rueger
39ec94f0eb
Warn whhen programmer failes to define prog_modes 2024-05-18 02:29:03 +01:00
Stefan Rueger
81d151398c
Remove value_t symbol 2024-05-18 01:46:24 +01:00
Stefan Rueger
4b53ebdeb5
s/\bWrite_mode_t\b/Write_mode/g 2024-05-18 01:45:03 +01:00
Stefan Rueger
4c05994f23
s/\bUrclock_t\b/Urclock_data/g 2024-05-18 01:44:25 +01:00
Stefan Rueger
e566919e6c
s/\btoken_t\b/token/g 2024-05-18 01:44:00 +01:00
Stefan Rueger
fc3891a1ad
s/\bSegorder_t\b/Segorder/g 2024-05-18 01:41:14 +01:00
Stefan Rueger
d26eac2433
s/\bsckoptions_t\b/sckoptions/g 2024-05-18 01:41:00 +01:00
Stefan Rueger
74e28d752a
s/\bppipins_t\b/ppipins/g 2024-05-18 01:40:46 +01:00
Stefan Rueger
2bfc2968a6
s/\bpdata_t\b/struct pdata/g 2024-05-18 01:40:31 +01:00
Stefan Rueger
55f6ee67c0
s/\bis_outside_int64_t\b/is_outside_int64/g 2024-05-18 01:36:51 +01:00
Stefan Rueger
e398b29335
s/\bFusel_t\b/Part_FL/g 2024-05-18 01:36:37 +01:00
Stefan Rueger
0f44cbf48d
s/\bfl_t\b/Intbytes/g 2024-05-18 01:36:19 +01:00
Stefan Rueger
8b78b7d63b
s/\bFlock_t\b/FL_item/g 2024-05-18 01:36:05 +01:00
Stefan Rueger
73aa17fd4b
s/\bdryrun_t\b/Dryrun_data/g 2024-05-18 01:35:49 +01:00
Stefan Rueger
01f01c36f8
s/\bdry_prog_t\b/Dry_prog/g 2024-05-18 01:35:35 +01:00
Stefan Rueger
e33ad3a20c
s/\bCfg_t\b/Cnfg/g 2024-05-18 01:35:00 +01:00
Stefan Rueger
efa4aba1b8
s/\bCfg_opts_t\b/Cfg_opts/g 2024-05-18 01:34:27 +01:00
Stefan Rueger
96218db0a9
s/\bCacheDesc_t\b/Cache_desc/g 2024-05-18 01:34:12 +01:00
Stefan Rueger
79ac24b8a4
s/\bBlhash_t\b/Bl_hash/g 2024-05-18 01:33:58 +01:00
Stefan Rueger
df1ecd34b5
s/\bavrftdi_t\b/Avrftdi_data/g 2024-05-18 01:33:39 +01:00
Stefan Rueger
514a09ad83
Update NEWS 2024-05-18 00:32:39 +01:00
Stefan Rueger
42a1fe646f
Merge pull request #1808 from stefanrueger/urboot_v8_preparation
Prepare for next urboot version
2024-05-17 23:25:20 +00:00
Stefan Rueger
bcd95ba9a1
Merge pull request #1806 from stefanrueger/programmer-not-found
Differentiate cause when programmer isn't found
2024-05-17 23:25:01 +00:00
Stefan Rueger
777241c98c
Merge pull request #1804 from stefanrueger/avrdu
Add new AVRnnDUnn parts
2024-05-17 23:24:31 +00:00
Stefan Rueger
9d02c37983
Merge pull request #1803 from stefanrueger/context
Put static variables into context structure
2024-05-17 23:23:10 +00:00
Stefan Rueger
7636581f41
Merge pull request #1802 from RoboSchmied/RoboSchmied-AGfixT132
Fix 7 typos in 4 files
2024-05-17 23:22:41 +00:00
Stefan Rueger
dc845ec388
Merge pull request #1800 from stefanrueger/silence-printf-warnings
Silence compiler warnings
2024-05-17 23:22:17 +00:00
Stefan Rueger
6962d79dc9
Update u8.0+ capability printing 2024-05-17 15:55:48 +01:00
Stefan Rueger
8075b90172
Update capability bit definitions 2024-05-17 14:49:31 +01:00
Stefan Rueger
0f9032e6c3
Set vbl level from vector number for urboot v8.0+ 2024-05-17 14:40:26 +01:00
Stefan Rueger
3b2bbb393f
Harden checks for urboot presence 2024-05-17 14:25:38 +01:00
Stefan Rueger
2dc946f263
Reserve high bit of vector number and number of pages 2024-05-17 13:01:57 +01:00
Stefan Rueger
cdf3dea749
Assert vecsz variable as const 2024-05-17 11:57:57 +01:00
Stefan Rueger
393364224f
Rename cx_t to libavrdude_context 2024-05-14 18:57:37 +01:00
Funkeleinhorn
5ae58ff728
Address code review and add set/get_sck_period() 2024-05-14 01:18:39 +02:00
Stefan Rueger
627f320efb
Make static array const in flip1.c 2024-05-10 22:21:06 +01:00
Stefan Rueger
cca61bf20e
Make static array const in serbb_posix.c 2024-05-10 22:20:46 +01:00
Stefan Rueger
512c3b6fc2
Put static variables of usb_libusb.c into context structure 2024-05-10 22:13:18 +01:00
Stefan Rueger
b4f5851e7f
Rename usb_libusb.c variables 2024-05-10 22:08:33 +01:00
Stefan Rueger
8e625510d8
Make static function greppable in usb_libusb.c 2024-05-10 21:51:16 +01:00
Stefan Rueger
3a45e1fbec
Put static variables of update.c into context structure 2024-05-10 21:48:33 +01:00
Stefan Rueger
9af06c7476
Rename static update.c variables 2024-05-10 21:45:19 +01:00
Stefan Rueger
adb4feff86
Put static variables of term.c in context structure 2024-05-10 21:38:26 +01:00
Stefan Rueger
a97f0f8eb4
Rename static read_mem 2024-05-10 21:18:13 +01:00
Stefan Rueger
fff80ea319
Rename static int i and static char *header 2024-05-10 21:09:56 +01:00
Stefan Rueger
531b00dd91
Rename last and done variables 2024-05-10 21:01:08 +01:00
Stefan Rueger
7936f0049f
Change static buffer to closed-circuit buffer in term.c 2024-05-10 19:34:22 +01:00
Stefan Rueger
a22f2d8d41
Revert to pin_to_str() and pinmask_to_str() 2024-05-10 19:28:13 +01:00
Stefan Rueger
3dcc51f5c1
Provide str_ccstrdup() to create a temporary string in closed-circuit space 2024-05-10 19:13:38 +01:00
Stefan Rueger
befcc6cf3d
Provide and use str_ccprintf() for temporary strings in closed-circuit space 2024-05-10 18:38:28 +01:00
Stefan Rueger
500ab6a460
Rope str_sprintf() into mmt_...() family of functions 2024-05-10 18:22:57 +01:00
Stefan Rueger
de82f8f7e9
Comment use of static variable as r/o cache 2024-05-10 17:58:50 +01:00
Stefan Rueger
0bc312a9cc
Rewrite str_interval() as str_ccinterval() removing static buffer 2024-05-10 17:56:27 +01:00
Stefan Rueger
bf7062cf6d
Put static variables of ser_win32.c into context structure 2024-05-10 17:38:18 +01:00
Stefan Rueger
e652726e1b
Put static variables of ser_posix.c into context structure 2024-05-10 17:28:37 +01:00
Stefan Rueger
9a908a24f9
Add argument checks for str_sprintf() 2024-05-10 17:18:54 +01:00
Stefan Rueger
366d9bb66e
Fix argument type for str_sprintf() 2024-05-10 17:18:27 +01:00
Stefan Rueger
f833691e00
Make static structure const in ser_win32.c 2024-05-10 17:14:48 +01:00
Stefan Rueger
93ba3e9feb
Make static structure const in ser_posix.c 2024-05-10 17:14:15 +01:00
Stefan Rueger
70e1869852
Fix rts cache value in serbb_setpin() for serbb_win32.c 2024-05-10 14:27:39 +01:00
Stefan Rueger
8a807b8a53
Move static variables into PDATA in serbb_win32.c 2024-05-10 14:27:15 +01:00
Stefan Rueger
fbf9a9f539
Move static variables into PDATA in serbb_posix.c 2024-05-10 14:12:54 +01:00
Stefan Rueger
b4ed989c99
Make static struct const in serbb_posix.c 2024-05-10 14:10:37 +01:00
Stefan Rueger
2c8c0a79a1
Improve error messaging 2024-05-10 13:36:52 +01:00
Stefan Rueger
9fb2f42246
Use avr_cc_buffer() instead of static buffer for returning a string 2024-05-10 13:34:25 +01:00
Stefan Rueger
3bbb0930f5
Provide safety margin for avr_cc_buffer(n) 2024-05-10 13:29:24 +01:00
Stefan Rueger
e85ecfa503
Utilise is_memset() in avrcache/developer_opts 2024-05-10 13:07:22 +01:00
Stefan Rueger
9d15a167e7
Provide avr_cc_buffer(n) for allocating n bytes in temporary buffer 2024-05-10 13:03:05 +01:00
Stefan Rueger
5dc019c721
Harden avrdude against early pmsg_...() calls 2024-05-10 12:07:46 +01:00
Stefan Rueger
80251073cd
Put static variables of ser_avrdoper.c into context structure 2024-05-10 11:00:18 +01:00
Stefan Rueger
292947d9a8
Put static variable of ppi.c into context structure 2024-05-10 10:29:38 +01:00
Stefan Rueger
443962e577
Improve error message when usb device not found in avrftdi.c 2024-05-10 00:17:09 +01:00
Stefan Rueger
c411555d27
Differentiate cause of Cannot find programmer id 2024-05-10 00:16:00 +01:00
Funkeleinhorn
e72d672859
Move serprog enable logic to pgm->initialize()
This commits moves the logic to enable the serprog programmer to be
ready for programming to the initalize() function as it seems to be the
counterpart of disable() and is called directly before programming
starts. This allows to open() a serprog programmer without blocking the
SPI bus as 0x15 S_PIN_STATE and 0x18 S_CS_MODE is only called in
initalize before the actual programming starts.
2024-05-09 22:46:39 +02:00
Stefan Rueger
9431330887
Change free() to mmt_free() 2024-05-09 19:07:43 +01:00
Stefan Rueger
4ccbf49f0f
Change pinmask_to_str() to pinmask_to_strdup()
No longer is the string returned in static space (which the next call
overwrites); instead a mmt_strdup()'d string is returned that needs
mmt_free()'ing.
2024-05-09 19:03:34 +01:00
Stefan Rueger
c5c49d7efd
Remove unused function pin_to_str()
... as it was used wrongly and led to errors. Better to use
pin_to_strdup()
2024-05-09 17:30:44 +01:00
Stefan Rueger
e6503115f7
Use pins_to_strdup() instead of pins_to_str()
The latter returns a string in a static buffer that is overwritten by the
next call. Unfortunately, this function was used more than once in
arguments of the *same* msg_error(), which would have given a wrong error
message. pins_to_strdup() returns a string to malloc'd space that needs
freeing.
2024-05-09 17:25:38 +01:00
Stefan Rueger
bf414c7c58
Make static function greppable in fileio.c 2024-05-09 11:06:50 +01:00
Stefan Rueger
c2264ad5a9
Put static variable of config_gram.y into context structure 2024-05-09 11:05:35 +01:00
Stefan Rueger
fb1a63b189
Add author to config_gram.y for contributions from 2022 2024-05-09 10:58:08 +01:00
Stefan Rueger
b25c28aea7
Guard against out-of-range pin_name in config_gram.y 2024-05-09 10:49:40 +01:00
Stefan Rueger
6d8fce594c
Put static variable of dfu.c into context structure 2024-05-08 22:32:27 +01:00
Stefan Rueger
0c565354aa
Make two static structs read-only in developer_opts.c 2024-05-08 22:23:43 +01:00
Stefan Rueger
161f763507
Consolidate functions returning a prog_modes string 2024-05-08 22:10:06 +01:00
Stefan Rueger
d425e737a4
Remove static variable in winconf.c 2024-05-08 19:58:07 +01:00
Stefan Rueger
d8d47127d9
Update avrdude.conf with new AVRnnDUnn parts 2024-05-08 19:01:00 +01:00
Stefan Rueger
40e75a447f
Update avrintel.c from new atdf files 2024-05-08 18:59:32 +01:00
Funkeleinhorn
43e998b5c4
Add documentation and clean up code 2024-05-08 18:13:24 +02:00
Funkeleinhorn
2266a0fe9c
Do enable/disable in correct functions instead of in open/close 2024-05-08 16:56:58 +02:00
Funkeleinhorn
b84b2728d0
Make CS an extended parameter 2024-05-08 15:52:30 +02:00
Stefan Rueger
14b337bb97
Put static variables of config.c into context structure 2024-05-07 23:03:02 +01:00
Stefan Rueger
1b0fb273a9
Make static variable const in avrftdi_tpi.c 2024-05-07 22:35:33 +01:00
Stefan Rueger
8a36a2f531
Put static variables of bitbang.c into context structure 2024-05-07 22:24:27 +01:00
Stefan Rueger
fa186e26a3
Put static variables of avrpart.c into context structure 2024-05-07 21:11:39 +01:00
Stefan Rueger
9f69a6e09a
Put static variables of avr.c into context structure
... and convert static memory for strings returned by avr_prog_modes()
into closed-circuit memory area in the context structure
2024-05-06 22:37:09 +01:00
Stefan Rueger
638a429337
Add const to pointer argument where possible 2024-05-05 23:06:38 +01:00
Stefan Rueger
5cf001f045
Space pointer declarations consistently 2024-05-05 23:03:41 +01:00
Stefan Rueger
59edcd8c78
Use command line programmer name in messages 2024-05-05 23:00:47 +01:00
Stefan Rueger
14e32f49c4
Adapt messages to AVRDUDE style 2024-05-05 22:57:24 +01:00
Funkeleinhorn
30d9f67ed4
Add serprog programmer
This commit adds support to program AVRs via programmers speaking
the serprog protocol used by flashrom. A programmer implementing this is
for example: https://github.com/stacksmashing/pico-serprog
2024-05-05 16:58:26 +02:00
Stefan Rueger
e35cacf3d9
Silence compiler warning when printing size_t variable 2024-05-02 17:43:15 +01:00
RoboSchmied
54cf8717f0 Fix: 7 typos
Co-authored-by: RoAGmer <no-reply@github.com>
Signed-off-by: Michael Seibt <github@roboschmie.de>
2024-05-02 00:25:16 +02:00
Stefan Rueger
8dd0932302
Silence compiler warnings 2024-04-28 21:29:40 +01:00
Joerg Wunsch
fcfe327c8a Merge remote-tracking branch 'upstream/main' into swig_libavrdude 2024-04-28 17:11:08 +02:00
mcuee
37ac6ebaa0
macOS autotools build fix 2024-04-28 20:12:12 +08:00
Stefan Rueger
c295bcc630
Update NEWS 2024-04-28 12:07:17 +01:00
mcuee
3bfcd01309
Add macOS autotools to github action (#1798)
* Update build.yml to add autotools build for macOS

* Update build.yml to use /opt/homebrew
2024-04-28 12:06:26 +01:00
Stefan Rueger
55f7da7fe3
Fix MSVC compilation errors 2024-04-28 12:01:54 +01:00
Stefan Rueger
ce8bb5fa11
Merge pull request #1794 from stefanrueger/silence-macos-ull-warning
Silence MacOS compiler warning
2024-04-28 10:47:24 +00:00
Stefan Rueger
caf4746db1
Merge pull request #1795 from stefanrueger/cx
Use magic memory tree interface throughout
2024-04-28 10:47:04 +00:00
mcuee
5f14524819
Update NEWS 2024-04-28 18:35:57 +08:00
mcuee
1848dea28f
Merge pull request #1792 from mhei/support-libgpiod-v1.4
linuxgpio: add support for libgpiod v1.4
2024-04-28 18:26:44 +08:00
mcuee
dceb55da6a
Update build.yml to use /opt/homebrew for macOS github action 2024-04-28 18:19:59 +08:00
Michael Heimpold
b6c15d783c autotools: improve configure summary regarding libgpiod
We cannot print the exact version we detected, but we
can give a hint about the "version class" at least.

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
2024-04-27 23:00:54 +02:00
Michael Heimpold
ca65e84fb1 linuxgpio: fix linking with libgpiod < v1.6
Due to a copy and paste error, the required define for
using libgpido at all was not set and thus the library
was not used at all.

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
2024-04-27 22:59:42 +02:00
Michael Heimpold
fcf8cd7a03 Improve cmake status messages during libgpiod detection
The standard cmake messages of pkg_check_modules might be confusing
when being used as here, i.e. when searching for the highest compatible
version.

So suppress these standard messages and print manual ones instead.

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
2024-04-27 22:06:58 +02:00
Stefan Rueger
3f91c2ec39
Include libavrdude.h and avrdude.h in whereami.c 2024-04-27 15:12:23 +01:00
Stefan Rueger
8212836693
Silence MacOS compiler warning 2024-04-27 13:40:00 +01:00
mcuee
7e18c0e115
Update build.yml to install pkg-config under macOS 2024-04-27 17:19:55 +08:00
Stefan Rueger
7c26305a5b
Make static functions greppable 2024-04-26 23:53:14 +01:00
Stefan Rueger
4bd70a17fa
Make static functions greppable 2024-04-26 23:50:52 +01:00
Stefan Rueger
fe195f8810
Make static functions greppable 2024-04-26 23:48:49 +01:00
Stefan Rueger
ff7b8ca19a
Use mmt_f_free instead of free as callback function in ldestroy_cv() 2024-04-26 23:41:40 +01:00
Stefan Rueger
dcfb6a8836
Utilise magic memory tree interface for src/whereami.h 2024-04-26 23:31:23 +01:00
Stefan Rueger
934027bb65
Utilise magic memory tree interface for src/whereami.c 2024-04-26 23:31:23 +01:00
Stefan Rueger
ed5ce77a27
Utilise magic memory tree interface for src/usb_hidapi.c 2024-04-26 23:31:23 +01:00
Stefan Rueger
ab22bd04d8
Utilise magic memory tree interface for src/updi_link.c 2024-04-26 23:31:22 +01:00
Stefan Rueger
2abb780841
Utilise magic memory tree interface for src/update.c 2024-04-26 23:31:22 +01:00
Stefan Rueger
fd2b3629a9
Utilise magic memory tree interface for src/term.c 2024-04-26 23:31:22 +01:00
Stefan Rueger
8f5a08abc3
Utilise magic memory tree interface for src/stk500v2.c 2024-04-26 23:31:22 +01:00
Stefan Rueger
cea55b0533
Utilise magic memory tree interface for src/serialadapter.c 2024-04-26 23:31:21 +01:00
Stefan Rueger
67a73e609f
Utilise magic memory tree interface for src/ser_win32.c 2024-04-26 23:31:21 +01:00
Stefan Rueger
80a7fa606c
Utilise magic memory tree interface for src/ser_posix.c 2024-04-26 23:31:21 +01:00
Stefan Rueger
34efea1073
Utilise magic memory tree interface for src/pindefs.c 2024-04-26 23:31:21 +01:00
Stefan Rueger
2b43a27d0a
Utilise magic memory tree interface for src/pgm.c 2024-04-26 23:31:20 +01:00
Stefan Rueger
ac460f29ca
Utilise magic memory tree interface for src/main.c 2024-04-26 23:31:20 +01:00
Stefan Rueger
3fb246b775
Utilise magic memory tree interface for src/lists.c 2024-04-26 23:31:20 +01:00
Stefan Rueger
d561704890
Utilise magic memory tree interface for src/linuxspi.c 2024-04-26 23:31:20 +01:00
Stefan Rueger
677d88363e
Utilise magic memory tree interface for src/lexer.l 2024-04-26 23:31:19 +01:00
Stefan Rueger
cf171eeff4
Utilise magic memory tree interface for src/fileio.c 2024-04-26 23:31:19 +01:00
Stefan Rueger
493eeb272b
Utilise magic memory tree interface for src/dfu.c 2024-04-26 23:31:19 +01:00
Stefan Rueger
7d5e916793
Utilise magic memory tree interface for src/developer_opts_private.h 2024-04-26 23:31:18 +01:00
Stefan Rueger
f885173400
Utilise magic memory tree interface for src/developer_opts.c 2024-04-26 23:31:18 +01:00
Stefan Rueger
2233dced43
Utilise magic memory tree interface for src/config_gram.y 2024-04-26 23:31:18 +01:00
Stefan Rueger
16b30bc9de
Utilise magic memory tree interface for src/config.c 2024-04-26 23:31:18 +01:00
Stefan Rueger
7a8156b26d
Utilise magic memory tree interface for src/avrcache.c 2024-04-26 23:31:17 +01:00
Stefan Rueger
a1ac32f0ea
Utilise magic memory tree interface for src/avr.c 2024-04-26 23:31:17 +01:00
Michael Heimpold
9ba3a9220b linuxgpio: fix build with libgpiod < v2.0
Commit 83909096b8 introduced a regression with
libgpiod versions below 2.0.

Fix it by introducing a tiny helper function which returns
the GPIO number (offset).

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
2024-04-26 22:46:35 +02:00
Michael Heimpold
6a75ac7057 linuxgpio: add gpiod_line_set_direction_input helper for libgpiod v1.4 support (refs #1782)
This ancient libgpiod version is still shipped on Ubuntu 20.04 LTS.
Add support for it by adding another helper.

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
2024-04-26 22:01:52 +02:00
Stefan Rueger
db2580d17b
Update NEWS 2024-04-26 08:49:27 +01:00
Stefan Rueger
74fa943ff8
Merge pull request #1790 from stefanrueger/libavrdude_exit
Remove calls to exit() from libavrdude library functions
2024-04-26 07:44:47 +00:00
Stefan Rueger
272ec60f64
Merge pull request #1788 from mcuee/libgpiod_action
Update build.yml to include libgpiod-dev for Linux builds
2024-04-26 07:44:36 +00:00
Stefan Rueger
f5d9615a90
Remove exit() from dfu.c 2024-04-25 23:30:44 +01:00
Stefan Rueger
1ddd5bf1ff
Remove exit() from developer_opts.c 2024-04-25 23:26:45 +01:00
Stefan Rueger
5b0af7e379
Utilise magic memory tree interface for developer_opts.c 2024-04-25 23:25:18 +01:00
Stefan Rueger
e213cab09d
Utilise magic memory tree interface for avrpart.c 2024-04-25 23:14:41 +01:00
Stefan Rueger
3bc9a15853
Accept exit(1) call in avrftdi.c 2024-04-25 19:55:57 +01:00
Stefan Rueger
c7bffb4018
Ensure pgm->parseextparams()'s LIBAVRDUDE_EXIT return exits in main.c 2024-04-25 19:45:33 +01:00
Stefan Rueger
7db0b673dd
Ensure pgm->initialize()'s LIBAVRDUDE_EXIT return exits in main.c 2024-04-25 19:40:00 +01:00
Stefan Rueger
f1d7784415
Ensure avr_signature()'s LIBAVRDUDE_EXIT return exits in main.c 2024-04-25 19:33:24 +01:00
Stefan Rueger
a4a783a2e2
Percolate LIBAVRDUDE_EXIT up to avr_signature() 2024-04-25 19:32:47 +01:00
Stefan Rueger
54d770a517
Ensure pgm->open()'s LIBAVRDUDE_EXIT return exits in main.c 2024-04-25 19:11:07 +01:00
Stefan Rueger
52e4ff7513
Pass LIBAVRDUDE_EXIT return value to pgm->open() call 2024-04-25 19:00:27 +01:00
Stefan Rueger
e788c33dc5
Update NEWS 2024-04-25 18:00:43 +01:00
Stefan Rueger
9124bef8a1
Merge pull request #1786 from stefanrueger/par
Make programmer par libavrdude ready
2024-04-25 16:48:18 +00:00
Stefan Rueger
50ffb8b0e9
Merge pull request #1785 from stefanrueger/micronucleus
Make programmer micronucleus libavrdude ready
2024-04-25 16:47:54 +00:00
Stefan Rueger
9de91dea02
Merge pull request #1784 from stefanrueger/linuxspi
Make programmer linuxspi libavrdude ready
2024-04-25 16:47:29 +00:00
Stefan Rueger
d92a0248ad
Merge pull request #1783 from stefanrueger/linuxgpio
Make programmer linuxgpio libavrdude ready
2024-04-25 16:47:13 +00:00
Stefan Rueger
cfbd4ed7b6
Merge pull request #1781 from stefanrueger/stk500generic
make programmer stk500generic libavrdude ready
2024-04-25 16:46:47 +00:00
Stefan Rueger
e965aa7bcd
Merge pull request #1779 from stefanrueger/pickit2
Make programmer pickit2 libavrdude ready
2024-04-25 16:46:00 +00:00
Stefan Rueger
8068aaedc1
Merge pull request #1778 from stefanrueger/ft245r
Make programmer ft245r libavrdude ready
2024-04-25 16:45:29 +00:00
Stefan Rueger
4c3d709b44
Merge pull request #1776 from stefanrueger/flip2
Utilise magic memory tree interface for flip2.c
2024-04-25 16:45:09 +00:00
Stefan Rueger
59a8e38bfe
Merge pull request #1775 from stefanrueger/flip1
Utilise magic memory tree interface for flip1.c
2024-04-25 16:44:50 +00:00
Stefan Rueger
dbc4aa1286
Merge pull request #1774 from stefanrueger/teensy
Utilise magic memory tree interface for teensy.c
2024-04-25 16:44:22 +00:00
Stefan Rueger
a9934e9e0f
Merge pull request #1773 from stefanrueger/serialupdi
Utilise magic memory tree interface for serialupdi.c
2024-04-25 16:43:55 +00:00
Stefan Rueger
c783e8ca04
Merge pull request #1772 from stefanrueger/jtag3
Make programmer jtag3 libavrdude ready
2024-04-25 16:43:26 +00:00
Stefan Rueger
763a0fdfac
Merge pull request #1771 from stefanrueger/jtagmkII
Make programmer jtagmkII libavrdude ready
2024-04-25 16:43:11 +00:00
Stefan Rueger
dcecfc2f29
Merge pull request #1770 from stefanrueger/jtagmkI
Make programmer jtagmkI libavrdude ready
2024-04-25 16:42:49 +00:00
Stefan Rueger
6643cd82a3
Merge pull request #1768 from stefanrueger/stk500v2.c
Make programmer stk500v2 libavrdude ready
2024-04-25 16:42:34 +00:00
Stefan Rueger
5125340b31
Merge pull request #1767 from stefanrueger/stk500
Make programmer stk500 (v1) libavrdude ready
2024-04-25 16:42:09 +00:00
Stefan Rueger
a11a45837b
Merge pull request #1766 from stefanrueger/xbee
Make programmer xbee libavrdude ready
2024-04-25 16:41:47 +00:00
Stefan Rueger
d950587108
Merge pull request #1765 from stefanrueger/wiring
Utilise magic memory tree interface for wiring.c
2024-04-25 16:41:04 +00:00
Stefan Rueger
cbe4e86c67
Merge pull request #1764 from stefanrueger/usbtiny
Utilise magic memory tree interface for usbtiny.c
2024-04-25 16:40:48 +00:00
Stefan Rueger
ade6a8d8e7
Merge pull request #1763 from stefanrueger/usbasp
Make programmer usbasp libavrdude ready
2024-04-25 16:40:25 +00:00
Stefan Rueger
9fa861f8fa
Merge pull request #1762 from stefanrueger/buspirate
Utilise magic memory tree interface for buspirate.c
2024-04-25 16:39:15 +00:00
Stefan Rueger
ff4dea437e
Merge branch 'main' into buspirate 2024-04-25 16:33:17 +00:00
Stefan Rueger
9eaacf46ba
Merge pull request #1761 from stefanrueger/urclock
Utilise magic memory tree interface for urclock.c
2024-04-25 16:32:01 +00:00
Stefan Rueger
b1c5bac501
Merge pull request #1760 from stefanrueger/dryrun
Utilise magic memory tree interface for dryrun.c
2024-04-25 16:31:39 +00:00
Stefan Rueger
ff7ab85983
Merge pull request #1759 from stefanrueger/ch341a
Make programmer ch341a libavrdude ready
2024-04-25 16:31:16 +00:00
Stefan Rueger
b4bbf30bf9
Merge pull request #1758 from stefanrueger/mmt-avr910
Make programmer avr910 libavrdude ready
2024-04-25 16:30:59 +00:00
Stefan Rueger
5ce6dab459
Merge pull request #1756 from stefanrueger/butterfly
Make butterfly programmer libvrdude ready
2024-04-25 16:30:38 +00:00
Stefan Rueger
0833ce83f2
Merge pull request #1754 from stefanrueger/no-format-zero-length
Remove gcc warning when printf format is ""
2024-04-25 16:29:44 +00:00
Stefan Rueger
51bea2a7f7
Merge pull request #1753 from stefanrueger/stk500-v1-eeprom
Make default EEPROM readback values 0xff for STK500 v1 programmer
2024-04-25 16:28:11 +00:00
Stefan Rueger
5e43b76bd8
Merge pull request #1752 from stefanrueger/static-avrftdi
Make avrftdi type programmers libavrdude ready
2024-04-25 16:27:05 +00:00
Stefan Rueger
9d53f49d0c
Adjust spacing to file style 2024-04-25 17:24:35 +01:00
stefanrueger
df03d93221
Lower some messages to notice/debug level 2024-04-25 15:05:35 +00:00
stefanrueger
3cdaf80b28
Fix NULL access in string argument of msg_() 2024-04-25 14:55:34 +00:00
stefanrueger
490d2b87ac
Revise frequency messages 2024-04-25 14:42:25 +00:00
stefanrueger
b3175d0820
Utilise magic memory tree interface for strutil.c 2024-04-25 14:27:46 +00:00
stefanrueger
d5af013cc2
Provide str_frq() returning malloc'd frequency string with unit 2024-04-25 14:15:20 +00:00
Stefan Rueger
2c747dc0be
Fix tpi byte write to fuse/lock bits for usbasp 2024-04-24 11:24:25 +01:00
mcuee
e17ee8dbf8
Update build.yml to include libgpiod-dev for Linux builds 2024-04-23 21:28:06 +08:00
Stefan Rueger
e014cfc9b0
Render double teardown() harmless in avrftdi.c 2024-04-22 16:15:32 +01:00
Stefan Rueger
9278b5655d
Return LIBAVRDUDE_EXIT instead of exit() 2024-04-22 16:12:22 +01:00
Stefan Rueger
7cc31eb778
Render double teardown() harmless in avr910.c 2024-04-22 15:59:26 +01:00
Stefan Rueger
1538f3f811
Return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:58:27 +01:00
Stefan Rueger
9aeeefdfc6
Render double teardown() harmless in wiring 2024-04-22 15:47:55 +01:00
Stefan Rueger
cb10e6b167
Render double teardown() harmless in usbtiny 2024-04-22 15:47:55 +01:00
Stefan Rueger
0006b95501
Render double teardown() harmless in teensy 2024-04-22 15:47:54 +01:00
Stefan Rueger
f61f6e6f02
Render double teardown() harmless in serialupdi 2024-04-22 15:47:54 +01:00
Stefan Rueger
e6017fecb6
Render double teardown() harmless in stk500v2 2024-04-22 15:47:54 +01:00
Stefan Rueger
2f334c90ed
Render double teardown() harmless in usbasp 2024-04-22 15:47:54 +01:00
Stefan Rueger
20c5bd4608
Render double teardown() harmless in pickit2 2024-04-22 15:47:53 +01:00
Stefan Rueger
04002c1070
Render double teardown() harmless in jtagmkII 2024-04-22 15:47:53 +01:00
Stefan Rueger
1442f2a5dc
Render double teardown() harmless in jtagmkI 2024-04-22 15:47:53 +01:00
Stefan Rueger
307a7d8932
Render double teardown() harmless in ft245r 2024-04-22 15:47:52 +01:00
Stefan Rueger
0e97176316
Render double teardown() harmless in flip2 2024-04-22 15:47:52 +01:00
Stefan Rueger
502ce32e5c
Render double teardown() harmless in flip1 2024-04-22 15:47:52 +01:00
Stefan Rueger
7af2edaca0
Render double teardown() harmless in jtag3 2024-04-22 15:47:52 +01:00
Stefan Rueger
74b9a3a321
Render double teardown() harmless in buspirate 2024-04-22 15:47:51 +01:00
Stefan Rueger
9bbbe39f4f
Render double teardown() harmless in ch341a 2024-04-22 15:47:51 +01:00
Stefan Rueger
167e9a9e48
Render double teardown() harmless in butterfly 2024-04-22 15:47:51 +01:00
Stefan Rueger
a87e817a2f
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:47 +01:00
Stefan Rueger
9d76a3619c
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:47 +01:00
Stefan Rueger
18837e7984
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:47 +01:00
Stefan Rueger
d25289f87e
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:47 +01:00
Stefan Rueger
9000edf03f
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:46 +01:00
Stefan Rueger
7bd27ff157
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:46 +01:00
Stefan Rueger
1f4dbe8d40
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:46 +01:00
Stefan Rueger
a5ce726a8a
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:46 +01:00
Stefan Rueger
add771e7ef
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:45 +01:00
Stefan Rueger
bedfaed6c6
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:45 +01:00
Stefan Rueger
fcc978da69
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:45 +01:00
Stefan Rueger
7e35cc6103
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:45 +01:00
Stefan Rueger
367a0723f4
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:44 +01:00
Stefan Rueger
6c05d3f72b
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:40 +01:00
Stefan Rueger
7ddb7500aa
Utilse magic memory tree interface 2024-04-22 14:05:56 +01:00
Stefan Rueger
bf386c6639
Make static table const 2024-04-22 14:03:09 +01:00
Stefan Rueger
9f22855abe
Remove exit(0) call from programmer micronucleus 2024-04-22 14:00:02 +01:00
Stefan Rueger
76b4bf1fd6
Utilse magic memory tree interface 2024-04-22 13:58:54 +01:00
Stefan Rueger
38d8bf0b7a
Remove exit from programmer code in linuxspi.c 2024-04-22 13:47:46 +01:00
Stefan Rueger
bd730da36b
Utilise magic memory tree interface 2024-04-22 13:45:23 +01:00
Stefan Rueger
d0a21c17d1
Move static variables to PDATA for linuxspi.c 2024-04-22 13:41:26 +01:00
Stefan Rueger
8515704b1c
Utilise magic memory tree interface for linuxgpio 2024-04-22 13:03:20 +01:00
Stefan Rueger
83909096b8
Add PDATA to programmer linuxgpio and move static variables there 2024-04-22 12:57:20 +01:00
Stefan Rueger
28a9587858
Remove static variable in stk500generic.c 2024-04-22 11:54:43 +01:00
Stefan Rueger
569e74365f
Separate function pointer initialisation out from pgm_new()
... so that an existing programmer can be re-initialised with different
functions.
2024-04-22 11:33:20 +01:00
Stefan Rueger
c7368a41ec
Remove exit() call from flip2.c 2024-04-22 10:48:24 +01:00
Stefan Rueger
45c78d76f4
Remove exit(0) call from flip1.c 2024-04-22 10:46:30 +01:00
Stefan Rueger
4f5d54e527
Utilise magic memory tree interface for pickit2.c 2024-04-21 23:15:38 +01:00
Stefan Rueger
b2160da192
Move static variable to PDATA 2024-04-21 21:21:58 +01:00
Stefan Rueger
d4c71de80a
Update programmer description 2024-04-21 19:48:40 +01:00
Stefan Rueger
b4ba0fbd96
Utilise magic memory tree interface and fix potential memory leak 2024-04-21 19:40:32 +01:00
Stefan Rueger
a7d2fd2ba8
Provide PDATA and move static variables into that space 2024-04-21 18:51:15 +01:00
Stefan Rueger
01a259c36a
Utilise magic memory tree interface for flip2.c 2024-04-21 17:47:13 +01:00
Stefan Rueger
298d59004b
Define programmer functions static 2024-04-21 17:39:23 +01:00
Stefan Rueger
531e51827c
Define programmer functions static 2024-04-21 17:28:58 +01:00
Stefan Rueger
afed7bfc6c
Utilise magic memory tree interface for flip1.c 2024-04-21 17:27:12 +01:00
Stefan Rueger
9d63a9aa97
Utilise magic memory tree interface for teensy.c 2024-04-21 16:51:31 +01:00
Stefan Rueger
00cc9718ad
Utilise magic memory tree interface for serialupdi.c 2024-04-21 16:43:09 +01:00
Stefan Rueger
74bce432e4
Utilise magic memory tree interface for jtagmkI.c 2024-04-21 16:20:49 +01:00
Stefan Rueger
422488de9c
Make static functions greppable 2024-04-21 16:10:50 +01:00
Stefan Rueger
c41fa3db2b
Utilise magic memory tree interface for jtagmkII.c 2024-04-21 16:05:46 +01:00
Stefan Rueger
db4bf53480
Revoke comment 2024-04-21 15:37:09 +01:00
Stefan Rueger
97e659924a
Move static buffer to PDATA 2024-04-21 15:29:47 +01:00
Stefan Rueger
34dd5d25d6
Make static tables const or local 2024-04-21 15:21:49 +01:00
Stefan Rueger
15e318f05a
Make static functions greppable 2024-04-21 15:10:54 +01:00
Stefan Rueger
0f3bb6a32e
Utilise magic memory tree interface for jtag3.c 2024-04-21 15:05:08 +01:00
Stefan Rueger
0b07a1e962
Move static signature_cache to PDATA 2024-04-21 14:43:00 +01:00
Stefan Rueger
8211e39d80
Make static functions greppable 2024-04-21 14:36:11 +01:00
Stefan Rueger
b9801e8d66
Use mmt_free() instead of free() 2024-04-21 14:28:38 +01:00
Stefan Rueger
cf24313d7a
Rewrite usbasp_tpi_write_byte() using tpi WORD_WRITE
The data sheet wants a single word write, not a write block
2024-04-21 13:25:24 +01:00
Stefan Rueger
6a9e3b246d
Change variable name 2024-04-21 12:51:25 +01:00
Stefan Rueger
0f7c6a1d46
Add sanity checks 2024-04-20 02:00:08 +01:00
Stefan Rueger
8e836461e1
Make static table const 2024-04-20 01:55:29 +01:00
Stefan Rueger
ce65a1484f
Make static table local const 2024-04-20 01:54:47 +01:00
Stefan Rueger
0f62968695
Move static table to local data and simplify function 2024-04-20 01:22:23 +01:00
Stefan Rueger
cae0815d15
Make static functions greppable 2024-04-20 01:08:00 +01:00
Stefan Rueger
f1105afb47
Add mmt_free() definition 2024-04-20 01:07:26 +01:00
Stefan Rueger
640e9515ea
Utilise magic memory tree interface for stk500v2.c 2024-04-20 01:03:36 +01:00
Stefan Rueger
0f6d07323d
Utilise magic memory tree interface for stk500.c 2024-04-19 22:30:47 +01:00
Stefan Rueger
1a8a974882
Make static tables const 2024-04-19 22:29:17 +01:00
Stefan Rueger
f31d107d81
Utilise magic memory tree interface for xbee.c 2024-04-19 22:22:53 +01:00
Stefan Rueger
b2e71428b9
Move static serdev structure into stk500's PDATA area 2024-04-19 22:10:54 +01:00
Joerg Wunsch
76efcb614c Stylistic change: move inline comments to column 32 2024-04-19 22:43:57 +02:00
Stefan Rueger
94714812d7
Make static table const 2024-04-19 20:27:00 +01:00
Stefan Rueger
0bf59aa87b
Update programmer description 2024-04-19 19:43:15 +01:00
Stefan Rueger
1e417efde1
Utilise magic memory tree interface for wiring.c 2024-04-19 19:39:24 +01:00
Stefan Rueger
c2c1bda3c5
Utilise magic memory tree interface for usbtiny.c 2024-04-19 19:33:39 +01:00
Stefan Rueger
33e7a56b1c
Update programmer description 2024-04-19 19:16:37 +01:00
Stefan Rueger
fd0838b395
Implement usbasp_tpi_write_byte() as draft 2024-04-19 18:03:13 +01:00
Stefan Rueger
68ade64f46
Utilise magic memory tree interface for usbasp.c 2024-04-19 16:58:45 +01:00
Stefan Rueger
53d4a45dfb
Make static table const 2024-04-19 16:49:19 +01:00
Stefan Rueger
b815d9e783
Move static variables to PDATA space in usbasp.c 2024-04-19 16:47:29 +01:00
Stefan Rueger
d651e31b98
Improve usbasp_tpi_read_byte() error messaging 2024-04-19 16:08:43 +01:00
Stefan Rueger
2ce7580977
Utilise magic memory tree interface for buspirate.c 2024-04-19 12:48:24 +01:00
Stefan Rueger
a942b31a98
Make static functions greppable 2024-04-19 12:42:32 +01:00
Stefan Rueger
af5f7ee565
Utilise magic memory tree interface for urclock.c 2024-04-19 12:35:39 +01:00
Stefan Rueger
345e4a985c
Utilise magic memory tree interface for dryrun.c 2024-04-19 12:24:37 +01:00
Stefan Rueger
54130a72f5
Update CH341A programmer description 2024-04-19 12:17:53 +01:00
Stefan Rueger
ec5dabcfb0
Utilise magic memory tree interface for ch341a.c 2024-04-19 12:12:09 +01:00
Stefan Rueger
8f951babce
Move static variables to PDATA 2024-04-19 12:10:04 +01:00
Stefan Rueger
68d8023b6c
Utilise magic memory tree interface for avr910.c 2024-04-18 21:03:30 +01:00
Stefan Rueger
7e3854ff2f
Do not use m->desc for memory type: use mem_is_...(m) 2024-04-18 20:58:57 +01:00
Stefan Rueger
f5881e9cd2
Rework butterfly_paged_load()
- Return correct value (number of bytes loaded)
  - Do not use m->desc for memory type: use mem_is_...(m)
2024-04-18 20:56:22 +01:00
Stefan Rueger
924c9b0a38
Rework butterfly_paged_write()
- Return correct value (number of bytes written)
  - Do not use m->desc for memory type: use mem_is_...(m)
2024-04-18 20:47:25 +01:00
Stefan Rueger
45b4f7ab09
Provide PDATA cache for avr910_read_byte_flash() 2024-04-18 20:31:49 +01:00
Stefan Rueger
9ed9053671
Provide meaningful pgm->disable() method
It is customary that pgm->disable() leaves programming mode; as such it is
the closing part of pgm->program_enable()
2024-04-18 19:28:34 +01:00
Stefan Rueger
04956f0dc7
Provide meaningful program_enable() method 2024-04-18 19:24:46 +01:00
Stefan Rueger
89473ccf17
Change error message and return value of avr910_vfy_cmd_sent() 2024-04-18 19:21:47 +01:00
Stefan Rueger
bf37d34002
Explicitly ignore error checks for avr910_drain() 2024-04-18 19:20:17 +01:00
Stefan Rueger
70901f95d8
Check return value of avr910_recv() calls for errors 2024-04-18 19:17:42 +01:00
Stefan Rueger
2e0f666b07
Avoid duplication of butterfly_recv() error message 2024-04-18 18:59:07 +01:00
Stefan Rueger
47e46fc97c
Check return value of avr910_send() calls for errors 2024-04-18 18:55:38 +01:00
Stefan Rueger
3de5457718
Utilise magic memory tree interface for butterfly.c 2024-04-18 18:05:03 +01:00
Stefan Rueger
5e221a1fd6
Rework butterfly_write_byte()
- Refactor flash/eeprom writes
  - Emphasise flash/userrow writes not implemented
  - Invalidate read cache (lest it gets forgotten)
2024-04-18 18:05:03 +01:00
Stefan Rueger
010969c197
Rework butterfly_paged_write()
- Invalidate read cache
  - Return correct value (number of bytes written)
  - Do not use m->desc for memory type: use mem_is_...(m)
2024-04-18 18:05:03 +01:00
Stefan Rueger
f027e70cdf
Rework butterfly_paged_load()
- Return correct value (number of bytes loaded)
 - Do not use m->desc for memory type: use mem_is_...(m)
2024-04-18 18:05:02 +01:00
Stefan Rueger
9305dae3f5
Move static cache to PDATA for butterfly_read_byte_flash() 2024-04-18 18:05:02 +01:00
Stefan Rueger
7de846054a
Provide meaningful program_enable() method
It is customary for progammers to provide an enter-programming-mode method
in  the program_enable() and a leave-programming-mode in disable(). The
former was missing and might be useful for libavrdude applications.
2024-04-18 18:05:02 +01:00
Stefan Rueger
7c958ea306
Change error message in butterfly_vfy_cmd_sent() 2024-04-18 18:05:02 +01:00
Stefan Rueger
470d07c959
Explicitly ignore error checks for butterfly_drain() 2024-04-18 18:05:01 +01:00
Stefan Rueger
cfb040f184
Check return value of butterfly_recv() calls for errors 2024-04-18 18:05:01 +01:00
Stefan Rueger
e579554874
Check return value of butterfly_send() calls for errors 2024-04-18 18:04:49 +01:00
Stefan Rueger
5223750361
Inform gcc that avrdude_message2() has printf-like varargs 2024-04-18 10:58:35 +01:00
Joerg Wunsch
2026142511 Silence Qt warning
Was:

Attribute Qt::AA_ShareOpenGLContexts must be set before QCoreApplication is created.
2024-04-17 23:08:23 +02:00
Joerg Wunsch
0b93a165e8 Allow editing the programmer selection combobox
This offers the same feature as for the device selection: typing
a partial programmer name filters the dropdown list to all
possible matches for a programmer.
2024-04-17 22:52:21 +02:00
Joerg Wunsch
8662c68668 Add a category "bootloaders" in the programmer selection dialog
This category triggers for all programmers that have PM_SPM
set.
2024-04-17 22:39:43 +02:00
Stefan Rueger
8f15ec46dc
Remove gcc warning when printf format is ""
This warning only occurs when checking the msg_...() functions for having
the correct parameters. The way I do that is by replacing the avrdude.h
file with one that #defines the msg_... functions to printf for which the
compiler knows which paramaters of which type are expected given that the
format is a string constant. That check, however, produces false alarms
which are not helpful.

This commit switches these unhelpful warnings from gcc off.
2024-04-17 19:50:28 +01:00
Stefan Rueger
4b2c99470a
Make default eeprom readback values 0xff for STK500 v1 programmer 2024-04-17 19:12:48 +01:00
Stefan Rueger
73eb16f3c8
Simplify FTDI port printing 2024-04-17 18:36:33 +01:00
Stefan Rueger
33525eff91
Simplify printed string length computation 2024-04-17 18:36:32 +01:00
Stefan Rueger
a65486b756
Simplify snprintf format 2024-04-17 18:36:32 +01:00
Stefan Rueger
bd42d5c07b
Reduce scope of pinno variable 2024-04-17 18:36:32 +01:00
Stefan Rueger
be1f7ea5f1
Simplify interface expression 2024-04-17 18:36:32 +01:00
Stefan Rueger
faa1e22fc9
Introduce mmt_free() to free mmt_...() allocated memory 2024-04-17 18:36:31 +01:00
Stefan Rueger
c30a7b2005
Update error message for failed memory allocation 2024-04-17 18:36:31 +01:00
Stefan Rueger
3a41205507
Use mmt_malloc() for PDATA allocation 2024-04-17 18:36:31 +01:00
Stefan Rueger
6d41e6baa3
Move static struct pindef_t valid_pins_others to PDATA 2024-04-17 18:36:31 +01:00
Stefan Rueger
05b1226765
Move static struct pindef_t valid_pins[4] to PDATA 2024-04-17 18:36:30 +01:00
Stefan Rueger
925cb7c8af
Adjust white space to exiting costum 2024-04-17 18:36:30 +01:00
Stefan Rueger
47fa0d2dff
Move static struct pindef_t valid_pins to PDATA 2024-04-17 18:36:30 +01:00
Stefan Rueger
8fddac70eb
Ensure valid buf access 2024-04-17 18:36:30 +01:00
Stefan Rueger
f6842c9000
Bring avrftdi's messaging into the msg_...() fold 2024-04-17 18:36:29 +01:00
Stefan Rueger
a3189140e1
Simplify format selection 2024-04-17 18:35:41 +01:00
Stefan Rueger
b71c29897b
Protect buffer from potential overflow 2024-04-17 17:49:30 +01:00
Stefan Rueger
1bfbc2771d
Move static char str[] to PDATA 2024-04-17 17:49:12 +01:00
Stefan Rueger
1ae28a7efa
Make static functions greppable 2024-04-17 12:18:33 +01:00
Stefan Rueger
8fe729f0a2
Update NEWS 2024-04-17 00:40:54 +01:00
Stefan Rueger
5858898846
Merge pull request #1750 from stefanrueger/static-buspirate
Move static buffer to PDATA region in buspirate.c
2024-04-17 00:38:52 +01:00
Stefan Rueger
6aece29a34
Merge pull request #1749 from stefanrueger/deprecated
Remove deprecated ucr2 part
2024-04-17 00:38:37 +01:00
Stefan Rueger
4761a701ad
Merge pull request #1725 from mhei/support-for-libgpiodv2
Add support for libgpiod v2+ API
2024-04-17 00:38:24 +01:00
Stefan Rueger
8231b36f85
Merge pull request #1733 from therealdreg/buspirate-hiz-and-pullups
Add buspirate hiz and pullups feature
2024-04-17 00:37:48 +01:00
Stefan Rueger
b00d601f92
Use mmt_malloc() macro instead of cfg_malloc() function 2024-04-17 00:25:07 +01:00
Stefan Rueger
c930a27871
Introduce magic memory tree 2024-04-17 00:23:39 +01:00
Joerg Wunsch
5d7d0737eb Improve the device selection list
While typing the combobox text, the validator adapts the contents of
the dropdown menu to only those entries that match the text typed.
So one can enter "64", and will only be presented all device that
have a 64 in their name (which are a few more than just those with
64 KiB of flash).
2024-04-16 22:29:05 +02:00
Joerg Wunsch
1b74b0f260 Reduce size of dropdown list to 20
50 seemed to be a bit too large for some displays.
2024-04-16 22:29:05 +02:00
Dreg
cfc5c937d7
Update avrdude.texi 2024-04-16 02:39:52 +02:00
Dreg
97cd1aa541
Update avrdude.texi better doc
better doc
2024-04-16 02:37:35 +02:00
Stefan Rueger
9850a8f484
Use cfg_malloc() instead of calloc() 2024-04-16 00:54:59 +01:00
Stefan Rueger
cff9d889ed
Make static const array local 2024-04-15 11:53:04 +01:00
Stefan Rueger
a5a94a08df
Make static functions greppable 2024-04-15 11:42:22 +01:00
Stefan Rueger
af8d832f38
Make string variables local const 2024-04-15 11:39:20 +01:00
Joerg Wunsch
8ebf2ee631 Convert help text to HTML
Turns out PySide2 doesn't have a setMarkdown() method for the text widgets,
only setHtml().
2024-04-15 08:00:41 +02:00
Stefan Rueger
94561c8205
Move static buffer to PDATA region 2024-04-14 22:56:18 +01:00
Michael Heimpold
ea701bc2f5 Add support for libgpiod v2+ API
libgpiod in version 2 or above introduced an API change which results
in compile error with the current code.

This commit adds some glue magic for the newer versions and
tries to detect the used libgpiod version based on the information
available in the pkg-config files.

At the moment, this eliminates the possibility to statically link
against this library.

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
2024-04-14 23:45:26 +02:00
Stefan Rueger
6488cb6102
Remove deprecated ucr2 part
It's been deprecated for a while now.
2024-04-14 22:24:12 +01:00
Joerg Wunsch
69267f365c Only enable the device selection OK button of validator is OK
While the combobox validator prevents "QValidator.Invalid"
characters to be entered, the user could still get away with
any string that is considered "QValidator.Intermediate". In
that caes, disable the OK button of the button box so the
(intermediate) result could not be passed on.
2024-04-14 22:54:44 +02:00
Joerg Wunsch
ec3ecc6169 Enlarge the device list
The default of 10 entries is way too small.
2024-04-14 22:54:15 +02:00
Joerg Wunsch
2784f73721 Improve device selection
Make the combo box editable, and apply a QValidator subclass
to it so the users can type partial device names.
2024-04-14 22:18:55 +02:00
Joerg Wunsch
6cb1fb03ce log() is a method, so prefix it with self. 2024-04-14 21:51:07 +02:00
Joerg Wunsch
61302b3e9c Shorten and straighten the help message a bit
Changes have been suggested by Stefan Rueger.
2024-04-14 16:38:04 +02:00
Joerg Wunsch
24718e2a9a s/dangerous/difficult/ 2024-04-14 11:39:58 +02:00
Joerg Wunsch
6440aa73d3 Review comments: stylistic changes in libavrdude.h
Remove obsolete avrdude_message().
Place inline comments at position 32.
2024-04-14 10:33:45 +02:00
Joerg Wunsch
22e4b5b3ce Add some (exemplary) warnings about dangerous fuse values
Some fuse settings on some devices may be dangerous, like
disabling ISP, or changing the /RESET pin into a GPIO.

This adds some warning examples. Still does not consider
the actual programmer connection, but that could be added
in future.
2024-04-14 10:27:30 +02:00
Joerg Wunsch
4ab7e197ea Merge branch 'main' into swig_libavrdude 2024-04-14 00:28:17 +02:00
Joerg Wunsch
4013eed998 Remove modality on help window
That way, users can operate the GUI while the help window is
displaying.
2024-04-14 00:14:58 +02:00
Stefan Rueger
428ea42634
Update NEWS 2024-04-13 12:41:16 +01:00
Stefan Rueger
1d3f028a0b
Merge pull request #1747 from stefanrueger/update-avrintel
Update avrintel files
2024-04-13 12:36:50 +01:00
Stefan Rueger
e10370e5fb
Merge pull request #1746 from stefanrueger/locate_programmer_starts_set
Check all programmer ids for exact match
2024-04-13 12:36:17 +01:00
Stefan Rueger
2ee89824e0
Merge pull request #1745 from stefanrueger/override-signature-check
Consult -F option when signature cannot be read
2024-04-13 12:35:08 +01:00
Stefan Rueger
b302e708be
Merge pull request #1741 from dl8dtl/msg_debug_fixes
Fix message levels in jtag3_print_data()
2024-04-13 12:34:22 +01:00
mcuee
d441501505
Adding arduino_packing_release github action (#1690)
Co-authored-by: Umberto Baldi <34278123+umbynos@users.noreply.github.com>
2024-04-13 12:33:09 +01:00
Stefan Rueger
ece8652162
Include <ac_cfg.h> instead of "ac_cfg.h"
See 9616b3709c
2024-04-13 00:59:26 +01:00
Stefan Rueger
1a46faaa6e
Check all ids of a programmer for exact match 2024-04-13 00:30:24 +01:00
Stefan Rueger
c53a3ed866
Match programmer names irrespective of case 2024-04-13 00:19:01 +01:00
Stefan Rueger
5361668c0e
No longer warn when part configuration disables SPI interface
SPI programming cannot disable SPI programming for the part configuration.
Hence. when another programming interface disables SPI that very same
interface can enable SPI again. The warning disabling SPI might brick the
part is therefore incorrect.
2024-04-12 23:28:35 +01:00
Stefan Rueger
3129ba277b
Update avrintel based on current atdf 2024-04-12 23:22:17 +01:00
Stefan Rueger
fdfa0ac10e
Consult -F option when signature cannot be read 2024-04-12 17:22:22 +01:00
Joerg Wunsch
82928d377d Fix message levels in jtag3_print_data()
These are debugging functions, and not supposed to print at
MSG_INFO level.
2024-04-08 22:20:15 +02:00
Joerg Wunsch
5227dbe689 Fix message levels in jtag3_print_data()
These are debugging functions, and not supposed to print at
MSG_INFO level.
2024-04-08 22:17:51 +02:00
Joerg Wunsch
89d959b6bb Workaround for a quite strange UnicodeDecodeError
Not really understood, but with level MSG_TRACE2, on a Curiosity Nano
board, I get two instances of unicode decode errors within the trace
messages. Trying to debug them did not yield any useful result, but
catching the exception, and enforcing the type to be "str" appear to
be able to continue.

Maybe an internal bug of my Python interpreter, don't know.
2024-04-08 22:03:30 +02:00
Joerg Wunsch
058f900ed2 Enlarge the fuses dialog
Virtually none of the messages would have fit into the small
initial size. Still looking for a more automatic solution,
but enlarging it might be a good first step to get things
better visible.
2024-04-07 23:43:16 +02:00
Joerg Wunsch
e39ad2c1ca Our probe is actually for SWIG + Python3
Indicate so in the final configuration overview.
2024-04-07 23:20:59 +02:00
Joerg Wunsch
57bab83374 Replace deprecated Python distutils by "site" module. 2024-04-07 15:32:45 +02:00
Joerg Wunsch
aab76b9f29 First attempt of establishing an installation process
It installs the Python and .ui files under datadir/avrdude/
(e.g. /usr/bin/share/avrdude/), and a batch or shell script
to call it as avrdude-gui into the normal bin directory.
2024-04-07 13:52:55 +02:00
Joerg Wunsch
01ed0174d5 If the fuse has an alias name, use that as display name
avrX uses names like 'syscfg0' and so on in the datasheet, but
we refer to them as 'fuse<N>' internally.
2024-04-07 10:40:45 +02:00
Joerg Wunsch
56246e5c1c Use correct Python3 CMake variables 2024-04-07 10:09:11 +02:00
Joerg Wunsch
9a8d5c1328 Replace PYTHONLIBS by PYTHON3 in CMakeLists.txt
https://cmake.org/cmake/help/latest/module/FindPython3.html
2024-04-07 09:55:15 +02:00
Joerg Wunsch
b39332d636 Probe for both, PySide6 as well as PySide2
The GUI is supposed to work on both versions.
2024-04-07 08:25:00 +02:00
Joerg Wunsch
b800d16481 Make the AVR logo class-internal data
This allows it to place it at the bottom of the file, so
the top area is not cluttered with lots of binary data.
2024-04-07 08:19:07 +02:00
Joerg Wunsch
6fb142dfee Mention the % pattern in fuse file names. 2024-04-07 08:16:44 +02:00
Joerg Wunsch
0be9a8865d Add help text 2024-04-07 01:07:04 +02:00
Joerg Wunsch
5f3dc74553 Handle fuse names of avrX devices
For avrX devices, fuses are named according to the datasheet,
rather than their internal naming "fuse<N>". So instead, use
the "memoffset" (which corresponds to <N>).
2024-04-07 00:15:32 +02:00
Joerg Wunsch
c03480a7d9 Initialize self.pgm and self.dev 2024-04-06 13:15:27 +02:00
Joerg Wunsch
69672a8470 Handle AVRMEM_ALIAS
Aliases are interesting for generic vs. datasheet names of
avrX fuses
2024-04-05 21:58:41 +02:00
mcuee
306d948bc5
No longer need to use CMAKE_VERBOSE_MAKEFILE 2024-04-05 20:24:56 +08:00
Dreg
a5035c09a2
pup->pullups 2024-04-05 10:21:14 +02:00
stefanrueger
f2b1c7e6cd
Update NEWS 2024-04-05 17:13:23 +13:00
Stefan Rueger
89768468be
Merge pull request #1731 from mcuee/avrdude_packing_fix
To use Static Libs for macOS arduino_packing build
2024-04-05 17:11:48 +13:00
Stefan Rueger
a8097eaee3
Merge pull request #1729 from stefanrueger/timestamp
Change return type for avr_(ms|us)timestamp() to uint64_t
2024-04-05 17:10:00 +13:00
stefanrueger
08f70fe666
Update NEWS 2024-04-05 16:54:16 +13:00
David Reguera Garcia
d9391883bc Update doc for buspirate hiz and pullups 2024-04-05 02:33:15 +02:00
David Reguera Garcia
93ed53733b Add hiz and pullups feature for buspirate binary mode 2024-04-05 02:30:33 +02:00
Joerg Wunsch
74f5ec3c65 Add a fuse configuration popup
When activating the context menu in one of the fuse value lineedit
fields, a popup is constructed that shows all the options for this
fuse, as an array of comboboxes. The data for this is from
avrintel.c.
2024-04-04 13:51:48 +02:00
Joerg Wunsch
e03820be72 Add default_fuse() helper
Synthesizes default fuse value
2024-04-04 13:50:06 +02:00
Joerg Wunsch
2efc3712f8 Fix 'invalid escape sequence' warning
Backslash in regular expression is best used by writing a raw
string.
2024-04-04 07:56:51 +02:00
Joerg Wunsch
ccaa3ddae7 Add layout to askfuse.ui 2024-04-03 21:25:48 +02:00
Joerg Wunsch
dd131bb616 Add layout to about.ui 2024-04-03 21:24:28 +02:00
Joerg Wunsch
926a776fd2 Add layouts for device and programmer selection 2024-04-03 21:23:34 +02:00
Joerg Wunsch
dafff152a3 Layout the device info popup 2024-04-03 21:09:07 +02:00
Joerg Wunsch
2bd7512739 Add layouts to memories.ui 2024-04-03 19:20:19 +02:00
Joerg Wunsch
0a45c8af6a Add layout to adgui.ui
Also remove status bar - we use our logging area anyway.
2024-04-03 17:50:21 +02:00
Joerg Wunsch
35e1ad8c8f Arrange the loglevel.ui into a layout 2024-04-03 17:46:32 +02:00
Joerg Wunsch
b86120cfa3 Add some examples how to deal with that configuration list
Nice way to analyze and synthesize fuse values.
2024-04-03 09:38:00 +02:00
Joerg Wunsch
3cedbee2e7 Make the loglevel popup a modal one.
No need being able to operate elswhere while it is up.
2024-04-03 09:27:39 +02:00
Joerg Wunsch
07116d93a0 Provide access to the fuse/lock bit configuration table
Synthesize a Python list, consisting of the individual table entries
as a dictionary. The dictionary, in turn, contains a table with the
individual values.

Quiet complex.
2024-04-02 23:43:03 +02:00
Joerg Wunsch
48bbd4b160 Ask for which fuse if needed
If loading a single-byte file (no '%' in filename pattern, and
not an ELF file), ask for which fuse to load.

When saving or programming, make sure to only handle interesting
values. Users can clear a fuse data entry to have this fuse skipped.
2024-04-02 23:33:43 +02:00
Joerg Wunsch
86de67f05f Implement fuse load and save from/to file
When loading from ELF file, all fuses are considered.

% in filename will be replaced by fuse name. That way, all fuses
could be saved to a bunch of files with a single "OK".
2024-04-02 09:07:14 +02:00
Joerg Wunsch
fd8b8bba0a Skip empty fuse value fields as well 2024-04-02 07:49:28 +02:00
Joerg Wunsch
1862b1942c Implement fuse programming
Only fuses that have been edited will be programmed.
2024-04-01 23:00:53 +02:00
Joerg Wunsch
8abd91b478 Implement fuse reading and editing
Also implement a filter that filters Key_Enter events for all
QLineEdit children of the "memories" dialog, in order to only finish
line editing but not "accept" the entire dialog (thereby closing it).
2024-04-01 22:57:44 +02:00
Joerg Wunsch
d215bdc633 Populate GUI fuse labels
Walk all possible fuse memories of the device, and construct
a list of fuse labels and value entries.
2024-04-01 13:57:35 +02:00
Joerg Wunsch
8ec3dd5a42 Provide explicit attach and detach functionality for programmer
Instead of automatically attaching once the user selected device
and programmer and port, provide explict menu entries for that.

That way, pre-loaded settings from the previous session can be
activated immediately, without going through the selection
popups. Also, it ought to be possible to completely switch to
different programmers and devices within one session.
2024-04-01 09:50:58 +02:00
Joerg Wunsch
da37f095f4 Start adding fuses
Implement a "Fuses" tab, but disable all fuse entries by now.
2024-03-31 23:47:50 +02:00
Joerg Wunsch
9bef6b23ad Clone flash operations into EEPROM operations 2024-03-30 22:41:26 +01:00
Joerg Wunsch
7f09662f03 Color-code buffer full/empty 2024-03-30 22:18:24 +01:00
Joerg Wunsch
3ccc199198 Add flash_load (from file) and flash_write (to device)
This completes all operations on flash.
2024-03-30 22:07:42 +01:00
Joerg Wunsch
33100e1c4f Add tooltips to buttons 2024-03-30 21:45:04 +01:00
Joerg Wunsch
7a52571c3b Implement chip erase 2024-03-30 18:16:12 +01:00
Joerg Wunsch
f61c4d862b Track flash size when reading from device 2024-03-30 18:06:29 +01:00
Joerg Wunsch
e332c4c818 When saving flash file, ask whether to overwrite existing file 2024-03-30 17:28:52 +01:00
Joerg Wunsch
76d54804c7 Re-add MSG2_LEFT_MARGIN into the enum used in this branch 2024-03-30 09:53:18 +01:00
Joerg Wunsch
b015fc244b Merge remote-tracking branch 'upstream/main' into swig_libavrdude 2024-03-30 09:51:11 +01:00
Joerg Wunsch
4458a3c8c1 Add saving flash contents to file 2024-03-29 23:34:35 +01:00
Joerg Wunsch
8d2f3105d4 Add an AVR Logo image to the memory tab 2024-03-29 23:29:30 +01:00
Stefan Rueger
cb61171598
Merge pull request #1724 from stefanrueger/progress-reporting
Document progress reporting in source code
2024-03-30 09:26:27 +13:00
Stefan Rueger
82e45130b8
Merge branch 'main' into progress-reporting 2024-03-30 09:19:22 +13:00
stefanrueger
840a098e29
Update NEWS 2024-03-30 09:16:44 +13:00
Stefan Rueger
22a7bf9be9
Merge pull request #1728 from stefanrueger/msg2_left_margin
Provide lmsg_xyz() functions to start message at left margin
2024-03-30 09:14:14 +13:00
Joerg Wunsch
cd79957312 Fine-tune handling of flash filename given
* Accept filenames from both, edited entry as well as file
  selection dialog
* If given file already exists, examine, and find its format
* If it doesn't exist, try determining format based on suffix
2024-03-29 18:02:37 +01:00
Joerg Wunsch
896785a192 Add copyright, add some more "About" text 2024-03-29 16:31:38 +01:00
Joerg Wunsch
368b9ff14b Fix breakage introduced by previous merge
MSG_* and MSG2_* definitions need to be in libavrdude.h rather
than avrdude.h, because they are part of the public interface.
2024-03-29 16:20:51 +01:00
mcuee
9b7d4d832b
To use Static Libs for macOS arduino_packing build
This is pointed out by @umbynos during the review of PR #1690
2024-03-29 18:47:17 +08:00
Stefan Rueger
0f216357a6
Merge branch 'main' into msg2_left_margin 2024-03-29 23:24:53 +13:00
Joerg Wunsch
89bd5f321c Merge remote-tracking branch 'upstream/main' into swig_libavrdude 2024-03-29 11:06:34 +01:00
Joerg Wunsch
67867a6776 Update NEWS 2024-03-29 11:05:29 +01:00
Jörg Wunsch
8516243630
Merge pull request #1730 from stefanrueger/remove_avrdude_message
Remove unused avrdude_message()

Fixes #1719
2024-03-29 11:04:34 +01:00
Joerg Wunsch
39eea9649d Add note about why avrdude_message2() is named that way. 2024-03-29 10:23:08 +01:00
Joerg Wunsch
674128cebc Update NEWS for recent PR/issue 2024-03-29 10:18:43 +01:00
Jörg Wunsch
0ff5e84f10
Merge pull request #1727 from dl8dtl/fix-1726
Replace msg_info() by msg_debug() in jtag3_prmsg() and jtag3_prevent()

Closes #1726
2024-03-29 10:17:32 +01:00
stefanrueger
d91a48242e
Remove unused avrdude_message() 2024-03-29 19:55:34 +13:00
stefanrueger
f027493e3f
Change return type for avr_(ms|us)timestamp() to uint64_t 2024-03-29 19:42:07 +13:00
stefanrueger
a26c4343dc
Keep vertical tab at start of format string as conditional new line 2024-03-29 13:56:17 +13:00
stefanrueger
7f9f82de2e
Add MSG2_LEFT_MARGIN flag in lieu of \v messaging convention
Some messaging needs a functionality to end an open line, so that the next
message starts at the left margin, ie, the ability to print a \n if and
only if the last printed character was not already a \n.

This used to be effected by \v as first char in the message format.

This commit introduces a dedicated lmsg_xyz() set of messaging functions
that utilises a MSG2_LEFT_MARGIN flag to enforce a left margin start for
the message.
2024-03-29 13:43:22 +13:00
Joerg Wunsch
5b64a79dc4 Implement a config file
This saves and loads some of the settings to persistent
storage, so they are available pre-configured at next
startup.
2024-03-28 22:44:21 +01:00
Joerg Wunsch
bc8f008105 Do not attempt to add <br> if there is no HTML text
Happens for trace messages.
2024-03-28 15:37:56 +01:00
Joerg Wunsch
f091a1d578 Only allow access to flash and EEPROM tabs after reading signature
Also mark by green or red color if the signature matches the
selected device, and log a if they do not match.

Tune the error and warning colors a bit.
2024-03-28 15:29:34 +01:00
Joerg Wunsch
ad03989349 Make the loglevel radiobuttons automatically accept the popup.
There's not much point in requiring the user to explicitly press an
"OK" button for something that simple as switching log levels.
2024-03-28 12:48:14 +01:00
Joerg Wunsch
9aaf86466b Move cursor to end of logging area
That way, the most recent message is always visible.
2024-03-28 11:32:26 +01:00
Joerg Wunsch
55acef957d Fix HTML logging
Append <br> only if a newline is supposed to be emitted.
2024-03-28 11:30:39 +01:00
Joerg Wunsch
d42da3d4da Merge branch 'fix-1726' into swig_libavrdude 2024-03-28 10:21:10 +01:00
Joerg Wunsch
b00c284289 Replace msg_info() by msg_debug() in jtag3_prmsg() and jtag3_prevent()
Both these functions are called at verbosity level DEBUG and above,
so they must not produce INFO level messages.

Supposed to fix issue #1726
2024-03-28 10:18:31 +01:00
Joerg Wunsch
471ce04604 Fix BOL detection for internal logging
Internal log messages are generated without setting "no_nl",
so the log is always at BOL next time.
2024-03-28 09:53:42 +01:00
Joerg Wunsch
dff00a39ba Improve logging and \v and newline handling
Not yet fully where I'd like to have it, but already getting
closer. Internal logging always gets a \n appended unless
self.log() is called with "no_nl" - which is used when being
called from the avrdude_message2() callback.
2024-03-28 09:19:50 +01:00
Joerg Wunsch
1e78b8c2e2 Add option to save log file
Do not emit trace messages to log window - they are too verbose, and
cause the GUI to become very unresponsive.

Still needs improvements.
2024-03-27 14:37:36 +01:00
Joerg Wunsch
457c21aff5 Handle abnormal termination in progress_callback 2024-03-27 12:57:00 +01:00
Joerg Wunsch
8349f8860c Replace PM_* constants enum by #define
This makes it consistent with src/libavrdude.h again.
2024-03-27 11:39:30 +01:00
Joerg Wunsch
65226cdd9e Revert "Turn PM_* #defines into an enum"
This reverts commit 377d3f353c.

It's actually also possible to wrap the #defines in SWIG, so use that
subsequently.
2024-03-27 11:32:31 +01:00
Joerg Wunsch
6d1f413a69 Implement flash reading. 2024-03-27 06:38:07 +01:00
Joerg Wunsch
7b9acec467 Fix progress reporting
Turn time calculations into int.
"Finish" indication is percent == 100.
When reading signature, manually clear progress lest it would
stick at 66 %.
Enforce processing of GUI events in progress_callback()
2024-03-27 06:36:31 +01:00
stefanrueger
07669a9d40
Document progress reporting in source code 2024-03-27 14:07:07 +13:00
Joerg Wunsch
1f227636df Implement progress indication 2024-03-26 22:29:24 +01:00
Joerg Wunsch
cc371f07cf Only start programmer if not already started
This allows to re-select a different device (e.g. after reading the
signature).
2024-03-26 14:49:16 +01:00
Joerg Wunsch
2b4058887e Add field with possible device after reading signature 2024-03-26 14:48:16 +01:00
Joerg Wunsch
09ece3753e First device memory operations: read signature
Start a "Memories" popup for the device. In the "Signature" tab,
show the expected signature from the config file, versus the
signature read from the device.
2024-03-25 22:56:23 +01:00
Joerg Wunsch
c7ab10e9be Enlarge the button boxes for programmer and device selection.
Should we ever want to translate the UI into other languages,
the English wording might become too small.
2024-03-25 21:40:02 +01:00
Joerg Wunsch
ce3b9f0a0c Turn device family selection into a QGroupBox
This is similar to programmer selection, and replaces a rather
hacky design consisting of a vertical layout with a label on top.
2024-03-25 21:37:45 +01:00
Joerg Wunsch
72da4a9ee7 Rename View -> Device
There will be more related items below "Info".
2024-03-25 21:29:34 +01:00
Joerg Wunsch
a3d482dddf Stop programmer when exiting
Some programmers behave erratical when not being told "Goodbye"
correctly.
2024-03-25 21:22:36 +01:00
Joerg Wunsch
c81f6d7031 Add programmer port selection, and starting programmer
Port names are automatically filled in for USB and linuxgpio programmers.

When all of programmer type, port name, and device are selected, try
to connect to the programmer.
2024-03-25 17:56:33 +01:00
Joerg Wunsch
28e05c6840 Implement programmer selection dialog
This tries to categorize the programmers by programming methods, to
allow reducing the size of the combo box to select from.
2024-03-25 16:57:26 +01:00
Joerg Wunsch
5022a36d95 Turn the log viewer into HTML and color-coded message levels
This demonstrates the possible features with implementing an
application-specific avrdude_message2() callback handler.
2024-03-25 14:34:16 +01:00
Joerg Wunsch
b7d6111d1b Change the GUI from using uic -g python to directly loading the .ui files
uic support for Python has not always been present. There used to be a
pyside2-uic in the past, but at least on Ubuntu, it disappeared.  As
the way how to integrate the uic calls into CMake is also not clear,
it appears to be best to just load the .ui files at run-time.

Most noticable side-effect is that the .ui property is no longer needed
to access the UI elements from the various widget objects.
2024-03-25 13:23:42 +01:00
Joerg Wunsch
c2bfc9fc91 Add tooltips to the radio buttons
They are easily accessible from inside the callback, so they can be
directly translated to ad.cvar.verbose.
2024-03-25 13:22:40 +01:00
Joerg Wunsch
d15672df66 Add dialog to change log level
This sets the global AVRDUDE verbosity level, based on a
radio button group.

quell_progress right now not supported
2024-03-25 11:22:48 +01:00
Joerg Wunsch
fbea1a7556 Fine-tune resizing the device info a bit 2024-03-24 22:58:36 +01:00
Joerg Wunsch
9b6fb3cf03 Implement the Device Info popup
This essentially displays the same information as the simple
test script does with its "getavr()" function:

* device names (long and short)
* location of definition in config file
* device memories
* device variants
2024-03-24 21:59:23 +01:00
Joerg Wunsch
77bcf8693b Rename "Device Memories" to "Device Info" 2024-03-24 13:02:54 +01:00
Joerg Wunsch
e6d2d3f40d Implement device selection
Unify logging into a single log() method.
2024-03-24 00:13:43 +01:00
Joerg Wunsch
fef43111e3 First skeleton of a very basic GUI
This adds a few .ui files (created with Qt designer), and a
skeleton to create a basic GUI out of them. Only functionality
so far is the selection of a device.
2024-03-23 23:49:58 +01:00
Joerg Wunsch
9c0623bf1c Start a src/python subdir 2024-03-21 21:46:32 +01:00
Joerg Wunsch
ed8e4edaa9 Add a comment about fileio usage 2024-03-21 13:38:14 +01:00
Joerg Wunsch
571c7429c7 Add various fileio_* functions
Omitted by now: functions that take or yield a FILE*.
2024-03-21 13:26:09 +01:00
Joerg Wunsch
3420772785 Add a m.clear() method
This allows to clear the contents as well as the "ALLOCATED" tag from
a respective memory buffer.

Also fix some docstrings.
2024-03-21 13:06:59 +01:00
Joerg Wunsch
c6c9aaee1c Fix offset check in m.get and m.put helpers 2024-03-21 11:55:24 +01:00
Joerg Wunsch
1ae394f1ed Assign TAG_ALLOCATED in m->put() 2024-03-21 11:00:39 +01:00
Joerg Wunsch
708403bbda Initialize progress reporting for avr_{read,write}_mem
Both these functions deliberately do not initiate progress reporting,
but rather leave it up to their callers to do so.  For the Python
wrapper, there is no explicit caller, so abuse the "check" typemap to
inject the respective code.
2024-03-20 23:05:24 +01:00
Joerg Wunsch
b65e9d8f4d Revert "Initialize progress reporting in avr_{read,write}_mem"
This reverts commit 296883cf1a.
2024-03-20 23:05:03 +01:00
Joerg Wunsch
73c8a7854b Populate many more methods of struct programmer_t
For optional methods, place checks that prevent dereferencing NULL
pointers, resulting in a SWIG exception instead.

For methods that return values in pointers, provide "argout" typemaps.
2024-03-20 13:52:48 +01:00
Joerg Wunsch
a02994dd12 Always populate setup and teardown methods of struct programmer_t
Many programmer implementations require "cookies" to store internal
data. It helps to be able to always call setup and teardown methods.
2024-03-20 13:46:26 +01:00
Joerg Wunsch
0e7a76f837 Fix typo: False -> false
This is C code, not Python. ;-)
2024-03-20 10:07:33 +01:00
Joerg Wunsch
1de634ffa1 Make the reporting functions a bit more robust
Sometimes, non-ASCII characters might appear in message strings,
causing a UTF-8 decoding error. Catch it, so the remainder can
proceed.
2024-03-19 23:13:15 +01:00
Joerg Wunsch
cbfaa9f718 Add an argout typemap for read_sib
This allows to convert the read_sib result into a Python
bytes() object.
2024-03-19 23:08:17 +01:00
Joerg Wunsch
fa78ea3a34 Set the progress and message callbacks by default
Also bump verbosity to 2 as a starting point - this is
development right now.
2024-03-19 23:07:23 +01:00
Joerg Wunsch
5fd5cffdda Use correct index into tuple in message_type() 2024-03-19 23:06:47 +01:00
Joerg Wunsch
984eb922b2 Remove MSVC build for arm64 by now
It attempts to link against the wrong (x86) Python libs.
2024-03-18 22:09:27 +01:00
Joerg Wunsch
858c3f696c Add an update_progress implementation
This allows for Python code providing a callback function that
is used to indicate progress.

Also fix a few minor things in message callback (reference
counting of Python objects).
2024-03-18 20:57:17 +01:00
Joerg Wunsch
296883cf1a Initialize progress reporting in avr_{read,write}_mem
Progress reporting needs to be initialized by passing it a "header"
string, in order to re-adjust internal static variables.
avr_{read,write}_mem did not do this, so they only reported progress
upon the very first invocation.
2024-03-18 20:55:19 +01:00
Joerg Wunsch
68d44ea1e6 Implement Python callback for avrdude_message2()
Doing so requires quite a bit of C preprocessing, since a va_list from
C cannot be passed to a Python function directly.

Also, using stdout or stderr is not necessarily going to be the
correct target for a Python program, so instead, convert the FILE*
arguments to names to pass them to Python.

By now, the '\v' feature of the message system (conditional newline)
is ignored here.
2024-03-18 17:45:55 +01:00
Joerg Wunsch
5782c182c1 Update swigtest.py
Reflect current status: helper to start and stop a programmer in the
correct sequence. Read signature memory space, and compare signature
against config file definition.
2024-03-15 22:52:59 +01:00
Joerg Wunsch
1e3dc29d81 Add more docstrings, clean-up warnings 2024-03-15 21:12:10 +01:00
Joerg Wunsch
a3475a6629 Implement the heart of struct programmer_t
This also implements the main methods that need to be accessible
from outside, as kind-of an OO approach to struct programmer_t.
2024-03-15 17:57:56 +01:00
Joerg Wunsch
c9cee81281 Add a typemap to represent the AVRPART signature as Python bytes. 2024-03-15 17:27:17 +01:00
Joerg Wunsch
920b964af9 Add AVRMEM* buffer handling methods
m->buf is not directly accessible from within Python. Add two methods
that allow to place and retrieve data there, as Python bytes() objects.
2024-03-15 14:35:07 +01:00
Joerg Wunsch
356693dab4 Add device variants to example printout 2024-03-13 13:56:40 +01:00
Joerg Wunsch
1968a11754 Combine the various cast_* functions with ldata()
All these typecast helpers are supposed to operate on LNODEID elements,
in order to convert them to the desired target type. As such, it makes
sense to include the ldata() LNODEID access itself.

Add docstrings for them as well, also for the entire module.
2024-03-13 12:53:30 +01:00
Joerg Wunsch
d34324ceed Add a -v option to build.sh
This allows for a verbose build, where the commands being called
are displayed.
2024-03-12 20:54:21 +01:00
Joerg Wunsch
f9b959343e Replace hand-crafted dicts for AVRMEM and AVRPART by SWIG structs
This requires a bit of Python helpers for pretty-printing, but
otherwise simplifies many things later on.
2024-03-12 18:12:28 +01:00
Joerg Wunsch
fd8704d982 Implement avrdude_message2() from main.c
This is eventually to be replaced by a Python callback.
Right now, use what main.c is using.
2024-03-10 22:55:50 +01:00
Joerg Wunsch
65bf6393da Declare avrdude_message*() in library header file
While these functions are *not* implemented by the library itself,
they are supposed to be provided by whatever application is using the
library. As such, they need to be declared in the public library
header file, including the various constants for msglvl and msgmode.
2024-03-10 22:50:24 +01:00
mcuee
e986f167db
Add PYTHON_LIBRARY to swig_libavrdude linking 2024-03-09 20:55:25 +08:00
Joerg Wunsch
e063bf16db Make path to os.add_dll_directory() absolute 2024-03-09 08:15:38 +01:00
Joerg Wunsch
3f5c32b6d4 Fix include directories for SWIG build 2024-03-08 16:16:35 +01:00
Joerg Wunsch
8c4f3b0632 Tweak Windows DLL search paths 2024-03-08 16:10:46 +01:00
mcuee
cfe608a63f
Update build.yml to use CMAKE_VERBOSE_MAKEFILE to debug Windows build
This is to debug Windows MSVC and MSYS2 build.
Previous change already use the same option to debug macOS build.
2024-03-08 17:23:07 +08:00
Joerg Wunsch
9be5164b5b Add prog_modes to AVRPART* wrapper
Can be then passed to ad.avr_prog_modes_str() to decode nicely.
2024-03-08 08:58:29 +01:00
Joerg Wunsch
e10730ef40 Add some heuristics to find out the Windows build directory
Adding the build directory to the module search path eases development
by now.
2024-03-08 08:39:07 +01:00
Joerg Wunsch
3f944559b6 Add PM_* names, and signature search functions 2024-03-07 22:49:13 +01:00
Joerg Wunsch
334b8c5899 Protect AVRMEM* and AVRPART* typemaps agains NULL pointers
Some library functions might return AVRMEM* and AVRPART* as
NULL pointers. Prevent them from being dereferenced, and
return a Python None object instead.
2024-03-07 22:49:13 +01:00
Joerg Wunsch
377d3f353c Turn PM_* #defines into an enum
This helps the SWIG wrapper to define them as well.
2024-03-07 22:49:13 +01:00
mcuee
9567f96f1b
Update build.yml to revert previous change 2024-03-06 23:15:07 +08:00
mcuee
02d3e16b0e
One more try to debug macOS build for SWIG 2024-03-06 23:11:11 +08:00
mcuee
9f6badaf18
Update build.yml to debug macOS Homebrew CI issue 2024-03-06 21:28:25 +08:00
mcuee
a98d2155e7
Update build.yml to add Python/Swig for MSYS2 build 2024-03-06 20:22:09 +08:00
mcuee
d48c944df2
Update build.yml to use Homebrew python 2024-03-06 20:13:01 +08:00
Joerg Wunsch
d4fe955808 Merge remote-tracking branch 'upstream/main' into swig_libavrdude 2024-03-03 21:59:32 +01:00
Joerg Wunsch
4f455c6043 First tiny little steps towards a SWIG "hello world"
Config file handling and basic list handling is there.
2024-03-03 21:37:08 +01:00
stefanrueger
34366a6b9d
Update test-avrdude help message 2024-02-29 20:26:57 +13:00
stefanrueger
27eb695c21
Update NEWS 2024-02-29 11:46:58 +13:00
Stefan Rueger
076e2e90cd
Merge pull request #1709 from stefanrueger/benchmark
Add benchmark option `-b` for `test-avrdude`
2024-02-29 11:41:38 +13:00
Stefan Rueger
e5304a4d59
Merge pull request #1707 from ndim/fix-cmake-builds-related-to-ac_cfg.h
Fix cmake build errors related to ac_cfg.h
2024-02-29 11:41:17 +13:00
stefanrueger
71a9cb47b3
Keep case of part in test-avrdude -b -p "-p part ..." 2024-02-28 23:27:38 +13:00
stefanrueger
e35714b1ce
Change 1-byte file upload for emulated chip erase 2024-02-28 22:14:28 +13:00
stefanrueger
64c5d1da0b
Remove avrbench and generate 4-number benchmark table with legend 2024-02-28 22:07:18 +13:00
stefanrueger
61ed3dd18f
Mention avrbench legend in test-avrdude -b summary 2024-02-27 23:14:31 +13:00
stefanrueger
82c001bab4
Drop chip erase and checking test for test-avrdude -b 2024-02-27 23:10:01 +13:00
stefanrueger
efd6bab19c
Widen chip erase tests to also capture -c urclock emulation 2024-02-27 22:51:36 +13:00
stefanrueger
cd41d2b4e2
Change /dev/null to temp file to be Windows compatible 2024-02-27 15:00:22 +13:00
stefanrueger
f088a9bc3f
Clarify -b option 2024-02-27 14:46:37 +13:00
stefanrueger
df3c67f2d0
Add normalised avrbench number suitable for markdown tables
The cumulative time for typical user tasks depends on the flash and EEPROM
size of the part. This commit computes a size-normalised time. Lower is
better. This avrbench number still depends on the part, but less so than
the cumulative time of the tasks.

The summary line is put in vertical bars to make creation of markdown
tables easier.
2024-02-27 14:09:52 +13:00
stefanrueger
3b567687a7
Lowercase variable names in test-avrdude
Uppercase names are typically used for environment variables in bash
2024-02-27 13:44:52 +13:00
stefanrueger
6e6404cbb4
Use alternative for /dev/null when not available 2024-02-27 11:54:40 +13:00
stefanrueger
274ac34b6c
Add benchmark option -b to test-avrdude
This executes five tests for typical programming tasks:
  - Write/verify a "difficult" sketch to flash: two code sections and one
    data section separated by "holes" of different sizes
  - Dump all flash, eg, to make a backup
  - Write/verify a "difficult" eeprom data file with holes
  - Dump all eeprom, eg, to make a backup
  - Chip erase (bootloaders are expected to page erase flash apart from
    the bootloader itself) and spot check whether flash was erased

The reported times are realistic times with overhead of starting avrdude,
resetting the board via DTR/RTS, establishing comms, including erasing the
flash before writing/verifying the sketch and disengaging the chip.

$ test-avrdude -b -d 0 \
  -p "u7.7/weu-jPrac -c urclock -P ch340 -p m328p -b 1000000" \
  -p "u7.7/-eu-jPrac -c urclock -P ch340 -p m328p -b 1000000"

Testing avrdude version 7.3-20240225 (20788712)
Prepare "u7.7/weu-jPrac -c urclock -P ch340 -p m328p -b 1000000" and press 'enter' or 'space' to continue. Press any other key to skip
   2.174 s: flash -U write/verify holes_rjmp_loops_32768B.hex
   1.339 s: flash -U read all flash
   1.415 s: eeprom -U write/verify holes_pack_my_box_1024B.hex
   1.034 s: eeprom -U read all
   1.604 s: chip erase and spot check flash is actually erased
   7.566 s: benchmark for u7.7/weu-jPrac -c urclock -P ch340 -p m328p -b 1000000
Prepare "u7.7/-eu-jPrac -c urclock -P ch340 -p m328p -b 1000000" and press 'enter' or 'space' to continue. Press any other key to skip
   2.001 s: flash -U write/verify holes_rjmp_loops_32768B.hex
   1.333 s: flash -U read all flash
   1.405 s: eeprom -U write/verify holes_pack_my_box_1024B.hex
   1.029 s: eeprom -U read all
   1.618 s: chip erase and spot check flash is actually erased
   7.386 s: benchmark for u7.7/-eu-jPrac -c urclock -P ch340 -p m328p -b 1000000

Note the benchmark line with the cumulative time for all five tasks
2024-02-26 23:19:43 +13:00
Hans Ulrich Niedermann
9616b3709c Look for generated ac_cfg.h in builddir first
As it can happen that there is a leftover `src/ac_cfg.h` when
running an out of tree cmake build (you might have run `cmake .`
or `./src/bootstrap`), the out of tree cmake build must look
for `ac_cfg.h` in its builddir first (e.g. `build_linux/src/`).

Otherwise the cmake build picks up and uses whatever data happens
to be in `src/ac_cfg.h`.

Both the MSVC and GCC C processors are documented to look in the
location of the `#include` directive for the included file first
for double quoted includes, so the old `#include "ac_cfg.h"` was
exactly the wrong thing to do. clang probably does the same, and
ISO C specifies the sequence of places to look for include files
as implementation defined.

So this changes all occurrences of `#include "ac_cfg.h"` to
`#include <ac_cfg.h>` which follows the sequence of `-I` or `/I`
directives as cmake builds add via `include_directories` or
`target_include_directories`.

Fixes: https://github.com/avrdudes/avrdude/issues/1706
2024-02-26 00:31:22 +01:00
Hans Ulrich Niedermann
92e2dd44ff Fix cmake not finding generated ac_cfg.h
When there is no `src/ac_cfg.h` (e.g. a fresh `git clone` or after
a working dir cleanup like `git -f -d -x`), running `cmake` will
complain about not being able to find `ac_cfg.h`.

This is probably because cmake looks for source files in the
`CMAKE_CURRENT_SOURCE_DIR`, but when cmake creates `ac_cfg.h`
it does so ´CMAKE_CURRENT_BINARY_DIR`, which is often different.

Anyway, this makes the location of files generated by `configure_file`
explicit as `CMAKE_CURRENT_BINARY_DIR`, and uses that same location
in the source file list for the `libavrdude` target (instead of just
`ac_cfg.h` with the implicit `CMAKE_CURRENT_SOURCE_DIR`) and adds the
same source file to the `avrdude` target to allow cmake to determine
the dependencies properly.
2024-02-26 00:31:15 +01:00
Hans Ulrich Niedermann
dfcd5cc6d8 Directly use AVRDUDE_FULL_VERSION string macro
Directly use the AVRDUDE_FULL_VERSION macro instead of first
defining an initialized variable which is never changed and
then using that variable.

This means one less layer of indirection both for the computer
and for the programmer to go through when trying to understand
the code.
2024-02-26 00:14:20 +01:00
Hans Ulrich Niedermann
5c891b347e gitignore: Files generated by "cmake ." 2024-02-26 00:13:54 +01:00
stefanrueger
2078871273
Update NEWS 2024-02-25 13:58:09 +13:00
Stefan Rueger
a8112b9ae8
Merge pull request #1703 from stefanrueger/avr-ids
Abbreviate ids of modern AVR parts
2024-02-25 13:54:33 +13:00
Stefan Rueger
d23e30736b
Allow slash in part variant name for -p (#1702)
Developer options are added to part names or wildcards by a / suffix
followed by a the option characters. However, some part variant names also
contain a slash, eg, AVR64DB64-E/MR. This commit gives priority to such a
variant name and does not interpret the slash as developer option.
2024-02-25 13:53:34 +13:00
Stefan Rueger
3c346acfdf
Merge pull request #1700 from stefanrueger/report-progress
Fix reporting of too short r/w times for files with holes
2024-02-25 13:52:51 +13:00
Stefan Rueger
a6b5acecf6
Merge pull request #1699 from stefanrueger/remove-port-array
Change port array in PROGRAMMER to be const char *
2024-02-25 13:52:26 +13:00
stefanrueger
8552760727
Add comment re use of libavrdude 2024-02-24 12:41:51 +13:00
stefanrueger
5c61b9e770
Update NEWS 2024-02-24 00:49:12 +13:00
Stefan Rueger
08d14154b7
Merge branch 'main' into remove-port-array 2024-02-24 00:28:30 +13:00
Stefan Rueger
2425ee98a6
Merge pull request #1689 from dbuchwald/serialupdi_doc_update
Updated section about NVM models support
2024-02-24 00:26:24 +13:00
Stefan Rueger
4b7da29cbe
Merge pull request #1688 from ndim/libavrdude.h
libavrdude.h fixes and installation of libavrdude-avrintel.h
2024-02-24 00:26:08 +13:00
Stefan Rueger
27fe913c29
Merge pull request #1681 from ndim/improve-autotool-build
Improve autotool build (part 1/n)
2024-02-24 00:25:32 +13:00
stefanrueger
ab0d92944d
Abbreviate ids of modern AVR parts 2024-02-24 00:12:17 +13:00
stefanrueger
a83f3cf087
Update libavrdude major version 2024-02-23 13:36:27 +13:00
stefanrueger
c8b6a7bcd9
Fix reporting of too short r/w times for files with holes 2024-02-22 22:36:13 +13:00
stefanrueger
a24e6eb74b
Update libavrdude version 2024-02-22 21:13:14 +13:00
stefanrueger
75eccf7d8e
Change port array in PROGRAMMER to be const char * 2024-02-22 15:33:49 +13:00
stefanrueger
5277e384af
Harden against port string being NULL 2024-02-22 15:29:22 +13:00
Hans Ulrich Niedermann
8553d37c37 Move auto-added m4 files to auto-m4/ subdir
Have the autotools place their m4 files into the auto-m4/
subdir to separate them from our own m4 files.

Not using AC_CONFIG_MACRO_DIRS for backwards compatibility.
2024-02-21 09:33:50 +01:00
Hans Ulrich Niedermann
a690c40e5b Add GIT_COMMIT_HASH to autotools AVRDUDE_FULL_VERSION
Add the GIT_COMMIT_HASH to the version message printed by
"avrdude -?" and in the avrdude.conf avrdude_conf_version line.

So the autotools buildsystem now produces the identical
version message as the cmake buildsystem does.
2024-02-20 06:20:47 +01:00
Hans Ulrich Niedermann
dd9e4d2cf2 m4 quote macro args and set variable defaults
This m4 quotes many more macro arguments and deals with the
setting of variables.

  * Set variable default values to avoid accidental use of
    env var values from the caller of the configure script
  * rewrap some longer lines
  * Remove AC_SUBST([FOO], [$FOO]) type no-ops. AC_SUBST([FOO])
    does the same.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
cc94578803 Call it AVRDUDE_FULL_VERSION everywhere
Calling AVRDUDE_FULL_VERSION just VERSION in parts of the build
process, and AVRDUDE_FULL_VERSION in others, is unnecessarily confusing.

So call it AVRDUDE_FULL_VERSION everywhere.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
29695afebb gitignore: dist tarballs and distdir/ itself 2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
dc88ff42ad Add AM_PROG_AR before LT_INIT, removing AC_PROG_AR etc
Use AM_PROG_AR before LT_INIT to prevent occasional warnings.

AM_PROG_AR was introduced in the 1.11 to 1.12 timeframe,
and we require at least Automake 1.14.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
3ef9f7194a Move AM_SILENT_RULES directly after AM_INIT_AUTOMAKE 2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
6f11b88bcd Stop checking for AM_SILENT_RULES macro
There is no need to check for AM_SILENT_RULES.

AM_SILENT_RULES was introduced in automake 1.11, and we
require at least automake-1.14 now.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
8d73b0521d Remove unused TIME_WITH_SYS_TIME macro definition
The TIME_WITH_SYS_TIME C preprocessor macro is not found
anywhere in the source tree, so we do not need to define
it after all and can get rid of the obsoletion warning.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
f8bb5619b8 Use committer date for commit date and year
Quoting CMakeLists.txt: "[...] of latest commit"

"Latest commit" is better served by using the committer date %cd
instead of the author date %ad: The author date could be some time
last year with committer date being today.

Note this affects both autotools and cmake buildsystems to keep
the generated version message dates and year in sync.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
bccad9dfe6 Fix libreadline summary output
AC_CHECK_LIB([readline], [readline]) without an ACTION-IF-FOUND
results in the definition of the HAVE_LIBREADLINE C preprocessor
macro and the addition of -lreadline to LIBS, not a configure
script environment variable have_readline.

So this repeats what the default ACTION-IF-FOUND does (add
-lreadline to LIBS, AC_DEFINE the HAVE_LIBREADLINE macro),
and in addition defines the have_libreadline variable as
yes for later use inside configure.ac.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
d0a36e03b7 Fix accidentally inconsequential typo in variable name 2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
c076aa7f3b Consistently use x and quotes in test(1) calls 2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
5cbbf31852 Expand AC_PROG_AWK because we are using $(AWK) 2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
9b4a667fc2 Use newer AC_PROG_LEX invocation
As our src/config.c defines a "yywrap" function, there
is no need for AC_PROG_LEX to look for for a "yywrap"
function in LEXLIBS.

Therefore we add the "noyywrap" option to follow the more
modern AC_PROG_LEX invocation.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
84b649849c Require a certain baseline of tool versions
Require a certain baseline of tool versions, in this case
from around 2013 (autoconf 2.69 and automake 1.14).

This is a significant advancement over the old requirement
of autoconf 2.60 (from 2006) and no requirement on automake
which gives us features without needing a very recent system.

The exact versions to require might be up to debate.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
b6a47dddec Line wraps to improve human readability
Wrap some lines in src/configure.ac to improve readability.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
9b576c4c01 Raw result of running "autoupdate"
This is just the raw result of running "autoupdate" to update
the src/configure.ac file to a more recent standard.

Manual fixes to the autoupdate output will happen over the next
few commits.

This fixes some of the autoreconf time warnings, e.g. about AC_TRY_*
being used instead of AC_*_IFELSE.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
ed2bb82652 Pass bootstrap CLI arguments to autoreconf
For my convenience, pass all bootstrap CLI arguments on to autoreconf.

This is useful when testing with e.g. -Wall and -Werror arguments.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
b4402bd334 Have bootstrap script work only in its own directory
When called from a working directory different from the directory
where the bootstrap script is located, make the bootstrap script
only work on its own directory and not whatever the current working
directory just happens to be.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
2a6f415166 Have autoreconf deal with initializing GNU build system
Let the autoreconf tool handle the sequencing of tool calls.

The autoreconf tool has been dealing with calling tools like
aclocal, libtoolize, etc. quite well for about the last 20 years.

This keeps the "bootstrap" script around to keep the old way
of calling bootstrap working, i.e. maintain compatibility with the
existing workflows.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
c96032a57b Move all autotools helper scripts to auto-aux/
Move all autotools helper scripts and auxiliary files installed
automatically by the autotools to auto-aux/ (e.g. config.guess,
depcomp, install-sh, texinfo.tex, etc.).

Moving AC_CANONICAL_TARGET after AC_CONFIG_AUX_DIR works
around a silent bug in Autoconf 2.69 where the generated
configure script would not find the install-sh file which
has been placed in that given aux directory.

Moved AM_INIT_AUTOMAKE which must also happen after
AC_CONFIG_AUX_DIR.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
1b5f3935b6 Add example build script for autotools build tests 2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
610330f0d9 Remove unused unnecessary commented build code
Remove unused unnecessary commented out build code from
"src/configure.ac".

I accidentally left those comments in commit d15c561a.
2024-02-18 16:21:25 +01:00
Hans Ulrich Niedermann
8fb73a1458 Add basic CI checks using the autotools build
This add some basic CI checks which exercise the autotools build:

  * make targets "all" "install" testing compilation and installation
  * run the same dry-run test-avrdude check as the cmake builds
  * make target "distcheck" testing that dist tarball contains all
    the necessary files
2024-02-18 16:21:19 +01:00
Dawid Buchwald
565a7238f4 Updated section about NVM models support 2024-02-16 09:38:52 +01:00
Hans Ulrich Niedermann
ec698b4e1a Include headers defining the used types
As libavrdude-avrintel.h uses not only uint32_t and related
types from stdint.h, but also size_t from stddef.h, we also
need to #include the latter into libavrdude.h before
libavrdude.h includes libavrdude-avrintel.h
2024-02-15 00:51:05 +01:00
Hans Ulrich Niedermann
df7c495fb7 Use proper C99 parameterless function declaration 2024-02-15 00:42:52 +01:00
Hans Ulrich Niedermann
efafa0ced0 Install libavrdude internal header libavrdude-avrintel.h 2024-02-15 00:42:52 +01:00
Hans Ulrich Niedermann
bfd9606d23 More stringent #include API checks 2024-02-15 00:42:47 +01:00
stefanrueger
5c1649dcee
Update NEWS 2024-02-15 11:41:52 +13:00
Stefan Rueger
14d1560e52
Merge pull request #1680 from ndim/fix-Wcalloc-transposed-args
Fix -Wcalloc-transposed-args warning
2024-02-15 11:40:20 +13:00
Stefan Rueger
64f2a3ed22
Merge pull request #1686 from stefanrueger/avrintel.h
Make avrintel.h an internal header file for libavrdude
2024-02-15 11:39:27 +13:00
stefanrueger
a82679229a
Update NEWS 2024-02-14 21:54:30 +13:00
Stefan Rueger
cdfc88dfc4
Merge pull request #1687 from mcuee/remove_msys2_32bit_build
Remove 32bit MSYS2 mingw32 and clang32 build
2024-02-14 21:53:28 +13:00
mcuee
2357f833e1
Remove 32bit MSYS2 mingw32 and clang32 build
MSYS2 has dropped 32bit binary packages for libusb, libusb-compat-git and libftdi.
2024-02-14 13:36:21 +08:00
stefanrueger
e2a10db193
Make avrintel.h an internal header file for libavrdude 2024-02-14 17:15:21 +13:00
Hans Ulrich Niedermann
e0188195a3 Fix -Wcalloc-transposed-args warning
The calloc(3) function has two arguments: the number of members,
and the size of one member.

sizeof(...) makes more sense as member size, and 1 as number
of members. At least that is what the gcc warning wants.

This was the only compiler warning I could get on my Fedora 40
test build (gcc 14) with CFLAGS="-Wall -Wextra -Werror".
2024-02-07 15:26:18 +01:00
stefanrueger
0179026e09
Add NEWS template for next version 2024-02-08 00:19:33 +13:00
stefanrueger
e599214c9d
Update version info for 7.3 2024-02-07 23:54:45 +13:00
stefanrueger
fff25530e1
Update NEWS 2024-02-07 23:46:33 +13:00
Stefan Rueger
72500a1018
Merge pull request #1668 from ndim/test-string-equality-operator-typo-fix
The test(1) string comparison uses =, not ==
2024-02-07 23:42:07 +13:00
Hans
b23830c448
Add more programmer descriptions (#1667) 2024-02-07 23:40:43 +13:00
Stefan Rueger
4f1e3871b0
Merge pull request #1663 from ndim/autoconf-package-version
Automatically determine Autoconf package version from cmake package version
2024-02-07 23:34:11 +13:00
Hans Ulrich Niedermann
a97e71a321 The test(1) string comparison uses =, not ==
The test(1) command string comparison operator is a single
equals sign, not a double equals sign.

Pointed out by @mcuee at https://github.com/avrdudes/avrdude/pull/1663?#issuecomment-1931024192
2024-02-07 01:44:01 +01:00
Hans Ulrich Niedermann
d15c561a7a Get AC_INIT version number from CMakeLists.txt
Generate the version number used in the Autotools builds
via a script from the top-level CMakeLists.txt and git
information instead of manual editing.

This script mimics what the avrdude top-level CMakeLists.txt
does for composing AVRDUDE_FULL_VERSION.

Consequently, maintainers do not need to edit the version numbers
in the "src/configure.ac" file's "AC_INIT(...)" line any more.

However, unlike the cmake based builds, this does not print the
commit hash in the "avrdude --help" message or in the "avrdude.conf"
file's "avrdude_conf_version = " line. That will come later.

These are the six build types supported and what avrdude
versions cmake and the autoconf builds actually produce:

                               cmake          autoconf
    git clone     release      7.2            7.2
    git clone     non-release  7.2-DATE+HASH  7.2-DATE
    git archive   release      7.2            7.2
    git archive   non-release  7.2            7.2
    dist tarball  release      N/A            7.2
    dist tarball  non-release  N/A            7.2-DATE
2024-02-07 00:47:35 +01:00
Hans Ulrich Niedermann
e58b344414 Use Github issues page for AC_INIT bug reports 2024-02-07 00:47:34 +01:00
Hans Ulrich Niedermann
acb7ba4d88 Multi line AC_INIT for improved overview 2024-02-07 00:47:34 +01:00
Hans Ulrich Niedermann
962cb030b2 gitignore tarballs generated by "make dist" 2024-02-07 00:47:34 +01:00
Hans Ulrich Niedermann
ce1bc3e34f Allow repeated doc builds without errors (Autotools)
Sometimes when building with the Autoconf buildsystem,
the avrdude-html/ subdir already exists and therefore
renaming the newly built avrdude/ subdir to avrdude-html/
cannot succeed.

Removing the old avrdude-html/ subdir first fixes that.
2024-02-07 00:47:34 +01:00
stefanrueger
1a64d3831b
Update NEWS 2024-02-06 22:17:02 +13:00
Stefan Rueger
d68034c5c6
Merge pull request #1662 from stefanrueger/jtagmkii-updi
Read the signature on -c jtag2updi exit if last op was write/erase
PR is based on a draft sketch by @askn37
2024-02-06 22:14:25 +13:00
stefanrueger
83571e3310
Remove -l $logfile when echoing a failed avrdude command 2024-02-06 12:32:22 +13:00
stefanrueger
8fb650d148
Update NEWS 2024-02-06 10:36:03 +13:00
Stefan Rueger
c464ef1441
Merge pull request #1659 from dbuchwald/issue_1655
Enable writing of 512-byte pages for USERROW
2024-02-06 10:31:53 +13:00
Stefan Rueger
38781c8afd
Merge pull request #1658 from stefanrueger/update-test-script
Update test script
2024-02-06 10:30:46 +13:00
stefanrueger
60f04f05fb
Read the signature on -c jtag2updi exit if last op was write/erase 2024-02-06 10:24:10 +13:00
stefanrueger
cf2b362532
Remove -l $logfile when listing avrdude commands 2024-02-05 15:13:43 +13:00
stefanrueger
7bf69aad43
Check $avrdude_bin is executable 2024-02-05 14:51:18 +13:00
stefanrueger
f9246b81c4
Remove wildcard string matches in test script 2024-02-05 14:33:02 +13:00
stefanrueger
8f8316f08b
Change integer test to string test to allow non-integer $elapsed 2024-02-05 14:11:41 +13:00
stefanrueger
e6c1229b71
Remove config eesave output from test-avrdude -v runs
-v is meant to only show AVRDUDE errors and warnings

Before this commit:

$ tools/test-avrdude -v -p "-c dryrun -p m328p"
Testing avrdude version 7.2-20240201 (571a8063)
Prepare "-c dryrun -p m328p" and press 'enter' or 'space' to continue. Press any other key to skip
   0.064 s: fuse access: clear, set and read eesave fuse bit
config eesave=ee_erased # 1
   0.068 s: fuse access: set eesave fusebit to delete EEPROM on chip erase
   0.068 s: chip erase
   0.068 s: flash -U write/verify holes_rjmp_loops_32768B.hex
   0.068 s: flash -T write/verify holes_rjmp_loops_32768B.hex
   0.068 s: eeprom check whether programmer can flip 0s to 1s
   0.069 s: eeprom -U write/verify holes_pack_my_box_1024B.hex
   0.067 s: eeprom -T write/verify holes_{the_five_boxing_wizards,pack_my_box}_1024B.hex
   0.068 s: chip erase and spot check flash is actually erased
   0.068 s: spot check eeprom is erased, too

After:

$ tools/test-avrdude -v -p "-c dryrun -p m328p"
Testing avrdude version 7.2-20240201 (571a8063)
Prepare "-c dryrun -p m328p" and press 'enter' or 'space' to continue. Press any other key to skip
   0.065 s: fuse access: clear, set and read eesave fuse bit
   0.068 s: fuse access: set eesave fusebit to delete EEPROM on chip erase
   0.067 s: chip erase
   0.068 s: flash -U write/verify holes_rjmp_loops_32768B.hex
   0.068 s: flash -T write/verify holes_rjmp_loops_32768B.hex
   0.066 s: eeprom check whether programmer can flip 0s to 1s
   0.069 s: eeprom -U write/verify holes_pack_my_box_1024B.hex
   0.068 s: eeprom -T write/verify holes_{the_five_boxing_wizards,pack_my_box}_1024B.hex
   0.067 s: chip erase and spot check flash is actually erased
2024-02-05 14:04:38 +13:00
Dawid Buchwald
00b8c83233 Preliminary fix for #1655 2024-02-03 12:33:24 +01:00
stefanrueger
571a8063b9
Update test-avrdude usage 2024-02-01 18:29:00 +13:00
stefanrueger
e3d4132997
Update NEWS 2024-02-01 17:30:33 +13:00
Stefan Rueger
0c8ac315cc
Merge pull request #1651 from stefanrueger/tmpfiles
Create test-avrdude's temporary files in the script itself
2024-02-01 17:19:17 +13:00
stefanrueger
acd5584c62
Provide -T option for test-avrdude to add dryrun/dryboot tests 2024-02-01 15:21:34 +13:00
stefanrueger
2c677693f8
Exit test-avrdude with 1 if any failure occurred 2024-02-01 15:09:00 +13:00
stefanrueger
213fe7561f
Create test-avrdude's temporary files in the script itself 2024-02-01 15:02:48 +13:00
stefanrueger
5684b85f86
Update NEWS 2024-01-31 15:08:40 +13:00
Stefan Rueger
03d9fb854c
Merge pull request #1650 from stefanrueger/sed+tmp
Update test-avrdude script
2024-01-31 15:05:19 +13:00
Stefan Rueger
070a3f0b41
Merge pull request #1647 from MCUdude/pgm-delay
Add a fixed delay for AVR Dragon and Arduino Nano Every on port close
2024-01-31 15:04:35 +13:00
stefanrueger
370a15d032
Reduce default delay between avrdude test runs
- From 4 s to 0.75 s
 - Do not delay at all for -c dryrun/dryboot
 - Do not delay before first avrdude call in a series
2024-01-31 14:49:46 +13:00
stefanrueger
86af6b6d01
Add option test-avrdude -t <dir> for tmp directory 2024-01-31 11:44:16 +13:00
stefanrueger
8f46c531f1
Avoid sed -i in test-avrdude script 2024-01-31 11:38:53 +13:00
stefanrueger
3d3a387d1a
Check test-avrdude can write to /dev/shm 2024-01-30 23:15:06 +13:00
stefanrueger
742cb9dd77
Update test-avrdude script
- Simplify command to make eesave fusebit delete EEPROM on chip erase
 - Replace ${var,,} construct with tr A-Z a-z so older bash shells work
 - Make -l work for fuse access tests
2024-01-30 14:31:25 +13:00
MCUdude
f3ca6958ac Use usleep for compatibility reasons 2024-01-29 15:45:01 +01:00
MCUdude
129aba5c86 Add a fixed delay for AVR Dragon and Arduino Nano Every on port close 2024-01-29 15:35:07 +01:00
stefanrueger
68dd7db87c
Update NEWS 2024-01-29 21:20:14 +13:00
Stefan Rueger
b220db2573
Merge pull request #1646 from mcuee/github_test_dryrun
Add tools/test-avrdude to Linux x86_64 github action
2024-01-29 20:55:39 +13:00
stefanrueger
ceb78a125f
Update NEWS 2024-01-29 19:04:55 +13:00
stefanrueger
9b1f4e1920
Enable -U upload of file with holes for urclock 2024-01-29 18:55:22 +13:00
stefanrueger
5e2409b9fc
Remove EEPROM spot check after chip erase from bootloaders
Bootloaders emulate chip erase (if at all) so EEPROM is unlikely erased
2024-01-29 18:31:32 +13:00
mcuee
a6b343d13b
Add tools/test-avrdude to Linux x86_64 github action 2024-01-29 13:12:13 +08:00
stefanrueger
9407dc049d
Update NEWS 2024-01-29 12:26:49 +13:00
Stefan Rueger
b0ba6b60f2
Merge pull request #1645 from stefanrueger/test-avrdude
Add tools/test-avrdude
2024-01-29 12:16:11 +13:00
Stefan Rueger
1f985354f5
Merge pull request #1642 from stefanrueger/factory-reset
Provide terminal command `factory reset`
2024-01-29 12:15:59 +13:00
Stefan Rueger
d9511238ff
Merge pull request #1641 from stefanrueger/dryboot
Add dryboot programmer
2024-01-29 12:15:29 +13:00
Stefan Rueger
d0e444cea1
Merge pull request #1640 from MCUdude/ch343
Add CH343 USB to serial adapter
2024-01-29 12:15:02 +13:00
Stefan Rueger
ebbcdba3f7
Merge pull request #1634 from stefanrueger/one-byte-flash-files
Fix upload of one-byte files to flash
2024-01-29 12:14:43 +13:00
Stefan Rueger
d4ca977596
Merge pull request #1627 from dbuchwald/issue_1609
Multiple updates to SerialUPDI protocol based on discussion 1609 and issues 1621, 1622 and 1623.
2024-01-29 12:14:25 +13:00
stefanrueger
73adee82e2
Update test-avrdude error message 2024-01-29 10:26:11 +13:00
stefanrueger
be9c2a507d
Add tools/test-avrdude
$ tools/test-avrdude -h
Syntax: test-avrdude {<opts>}
Function: test AVRDUDE for certain programmer and part combinations
Options:
    -c <configuration spec>     additional configuration options used for all runs
    -d <sec>                    delay between test commands (default 4 seconds)
    -e <avrdude path>           set path of AVRDUDE executable (default avrdude)
    -l                          list test commands but do not execute them
    -p <programmer/part specs>  can be used multiple times, overrides default tests
    -s                          skip EEPROM tests for bootloaders
    -v                          verbose: show AVRDUDE error and warning messages
    -? or -h                    show this help text
Example:
    $ test-avrdude -d 0 -p "-c dryrun -p t13" -p "-c dryrun -p m4809"

$ echo | tools/test-avrdude -p"-cdryrun -pm328p" -d0
Testing avrdude version 7.2-20240128 (09345002)
Prepare "-cdryrun -pm328p" and press 'enter' or 'space' to continue. Press any other key to skip
   0.064 s: fuse access: clear, set and read eesave fuse bit
   0.083 s: fuse access: set eesave fusebit to delete EEPROM on chip erase
   0.066 s: chip erase
   0.068 s: flash -U write/verify holes_rjmp_loops_32768B.hex
   0.067 s: flash -T write/verify holes_rjmp_loops_32768B.hex
   0.067 s: eeprom check whether programmer can flip 0s to 1s
   0.067 s: eeprom -U write/verify holes_pack_my_box_1024B.hex
   0.066 s: eeprom -T write/verify holes_{the_five_boxing_wizards,pack_my_box}_1024B.hex
   0.069 s: chip erase and spot check flash is actually erased
   0.067 s: spot check eeprom is erased, too
2024-01-29 01:39:08 +13:00
stefanrueger
775dea2ce6
Shrink emulated bootloader for parts with small flash 2024-01-29 01:18:07 +13:00
stefanrueger
09345002b3
Emulate io/sram access depending on classic/xmega/modern part 2024-01-28 15:39:37 +13:00
stefanrueger
889b585db3
Only erase flash, eprom and user-type memories 2024-01-28 00:51:08 +13:00
stefanrueger
4708f6e14e
Emulate 512-byte protected bootloader for dryboot 2024-01-28 00:32:07 +13:00
stefanrueger
aa9369cd73
Fix warning grammar 2024-01-27 18:03:28 +13:00
stefanrueger
a460fcad55
Clarify documentation 2024-01-27 17:46:50 +13:00
stefanrueger
91d7c9f702
Document factory reset command 2024-01-27 13:13:10 +13:00
stefanrueger
bfd14562f9
Provide factory reset command 2024-01-27 13:12:49 +13:00
stefanrueger
084f25f188
Make terminal command args constant strings 2024-01-27 12:10:46 +13:00
stefanrueger
652ef2efc7
Document factory_fcpu part property 2024-01-27 12:09:57 +13:00
stefanrueger
6b71a8d253
Populate factory_fcpu values in avrdude.conf.in 2024-01-27 12:01:30 +13:00
stefanrueger
aa668fa6a3
Provide factory_fcpu variable 2024-01-27 11:54:01 +13:00
MCUdude
a757d8639c Add CH343 documentation URL 2024-01-26 13:40:39 +01:00
stefanrueger
625fcc4e33
Add dryboot programmer 2024-01-26 21:22:47 +13:00
MCUdude
8cf806f4c0 Add CH343 USB to serial adapter 2024-01-26 07:55:12 +01:00
stefanrueger
a59493f333
Fix upload of one-byte files to flash 2024-01-23 22:12:48 +13:00
Hans Ulrich Niedermann
a98f3f0369 man: doc location is <prefix>/share/doc, not <prefix>/doc
Both automake and cmake builds install the documentation somewhere
in <prefix>/share/doc.

This fixes the former mention of <prefix>/doc in the avrdude.1 man page
FILES section.
2024-01-22 14:37:53 +01:00
Stefan Rueger
2f89aece1e
Merge pull request #1631 from MCUdude/table-docs
Update `part` table in avrdude.texi
2024-01-22 13:56:55 +13:00
Stefan Rueger
ef7e8b3ed3
Merge pull request #1629 from MCUdude/pr1568-fix
Make linuxgpio.c compile #1568
2024-01-22 13:56:39 +13:00
Stefan Rueger
a922799414
Merge pull request #1625 from ndim/detect-dynamic-libreadline-in-USE_STATIC_LIBS-case
Detect dynamic readline and serialport libraries for avrdude USE_STATIC_LIBS builds
2024-01-22 13:56:04 +13:00
Stefan Rueger
e1def05780
Merge pull request #1618 from matthijskooijman/jtag3-raise-max-bitclock
Remove 1 Mhz limit on jtag3/atmelice/etc ISP bitclock
2024-01-22 13:55:36 +13:00
Stefan Rueger
3440bd65b7
Merge pull request #1615 from ndim/update-gpl-2.0-text
Update the GPL version 2 text
2024-01-22 13:54:50 +13:00
MCUdude
9de163d1f4 Update part table 2024-01-21 21:35:40 +01:00
MCUdude
baf98f0a47 Fix typo from PR #1568 2024-01-21 14:11:34 +01:00
Dawid Buchwald
1b0b263ae9 Implementation of NVM v4 protocol for #1621 2024-01-20 12:10:23 +01:00
Dawid Buchwald
45b5365830 Added candidate fix for #1622 2024-01-19 15:10:42 +01:00
Dawid Buchwald
d25cacd6fb Fix candidate for unconfirmed issue #1623 2024-01-19 09:13:36 +01:00
Hans Ulrich Niedermann
0b9d1bc1ff Detect dynamic readline and serialport for USE_STATIC_LIBS
Detect the dynamic libraries for libreadline and libserialport
even when building avrdude with USE_STATIC_LIBS.

Fixes: https://github.com/avrdudes/avrdude/issues/1624
2024-01-18 14:47:17 +01:00
Matthijs Kooijman
7580173593 Remove artificial limit on jtag3 bitclock
Previously, the code would limit the clock to 1Mhz. If a higher clock
was specified, it would be set to 1.024Mhz (0x400 khz).

This commit removes this artificial limit, while still preventing
overflowing the two bytes available in the command (effectively limiting
to 65535 kHz).

The original limit seems inappropriate, because the JTAGEICE3 and ATMEL
ICE actually support higher clocks than the old limit. For SPI, the
JTAGICE3 documents supporting up to 1.875Mhz and the ATMEL ICE up to
5Mhz. In practice the JTAGEICE3 (with the newer EDBG version where it
becomes pretty much identical to the ATMEL ICE) also works up to 5Mhz.

When trying to set higher values, the behaviour seems to depend on the
current value. The programmer seems to either keep the previous value
(e.g. from 3Mhz to 10Mhz), or use 8kHz / 125μs (e.g. from 5Mhz to
10Mhz). In any case, the value read back afterwards (and printed with
-v) reflects the actual value.

Also note that the code also applies a lower limit of 1kHz (to ensure
the raw value sent to the device, in kHz, is never zero), but in
practice sending a value of lower than 8kHz ends up setting 8kHz
(125μs). This is also the minimum value in the device documentation.

This commit was tested with:

         Programmer Type       : JTAG3_ISP
         Description           : Atmel AVR JTAGICE3 in ISP mode
         ICE HW version        : 2
         ICE FW version        : 3.55 (rel. 130)
2024-01-16 17:07:01 +01:00
Dawid Buchwald
d38fa2a157 Added reset request to NVMprog operation 2024-01-15 16:31:06 +01:00
Dawid Buchwald
db5d6f4c89 Added support for NVM v5, based on NVM v3 2024-01-14 19:52:48 +01:00
Hans Ulrich Niedermann
ececf3258e Update the GPL version 2 text
Update the GPL version 2 text to the current text as published at

    https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt

The changes are
  * the updated mailing address of the FSF
  * reference to LGPL with name change ("Library" -> "Lesser")
  * whitespace formatting
  * "write to" new FSF address to get a copy of the license
    instead of "seeing http://www.gnu.org/licenses/"
2024-01-11 23:26:42 +01:00
Dawid Buchwald
c0199fa714
Merge branch 'avrdudes:main' into issue_1609 2024-01-11 21:09:14 +01:00
Dawid Buchwald
c33ec9c51b Updated NVM controller code to latest pymcuprog 2024-01-11 20:56:13 +01:00
Dawid Buchwald
2358893974 Split current NVM code into three separate modules 2024-01-09 18:24:28 +01:00
607 changed files with 146466 additions and 101231 deletions

View file

@ -68,7 +68,7 @@ jobs:
run: |
if [ "${{ matrix.config.os }}" = "macOS" ]; then
# For darwin we disable the static flags (not supported by clang) and we make some adjustments
cmake -DCMAKE_C_COMPILER=${{ matrix.config.cross_compiler }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cross_compiler }}++ -DCMAKE_AR=${{ matrix.config.ar }} -DCMAKE_LINKER=${{ matrix.config.ld}} -DCMAKE_EXE_LINKER_FLAGS="-L/opt/lib/${{ matrix.config.cross_compile }}/lib/" -DCMAKE_C_FLAGS="-I/opt/lib/${{ matrix.config.cross_compile }}/include -pthread -framework Foundation -framework IOKit -framework Cocoa -framework Security -DHAVE_USB_H" -DCMAKE_PREFIX_PATH=/opt/lib/${{ matrix.config.cross_compile }}/ -DHAVE_LIBFTDI="NO" -B build/
cmake -DCMAKE_C_COMPILER=${{ matrix.config.cross_compiler }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cross_compiler }}++ -DCMAKE_AR=${{ matrix.config.ar }} -DCMAKE_LINKER=${{ matrix.config.ld}} -DCMAKE_EXE_LINKER_FLAGS="-L/opt/lib/${{ matrix.config.cross_compile }}/lib/" -DCMAKE_C_FLAGS="-I/opt/lib/${{ matrix.config.cross_compile }}/include -pthread -framework Foundation -framework IOKit -framework Cocoa -framework Security -DHAVE_USB_H" -DCMAKE_PREFIX_PATH=/opt/lib/${{ matrix.config.cross_compile }}/ -DHAVE_LIBFTDI="NO" -DUSE_STATIC_LIBS="ON" -B build/
else
cmake -DCMAKE_C_COMPILER=${{ matrix.config.cross_compile }}-gcc -DCMAKE_CXX_COMPILER=${{ matrix.config.cross_compile }}-g++ -DCMAKE_EXE_LINKER_FLAGS="-static-libgcc -static-libstdc++" -DCMAKE_C_FLAGS="-I/opt/lib/${{ matrix.config.cross_compile }}/include/libusb-1.0/ -I/opt/lib/${{ matrix.config.cross_compile }}/include -pthread" -DCMAKE_PREFIX_PATH=/opt/lib/${{ matrix.config.cross_compile }}/ -DHAVE_LIBFTDI="NO" -B build/
fi
@ -85,8 +85,8 @@ jobs:
tar -czv ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }} -f ${{ env.PROJECT_NAME }}_${GITHUB_REF##*/}_${{ matrix.config.os }}_${{ matrix.config.arch }}.tar.gz
- name: Upload artifacts
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
if-no-files-found: error
name: ${{ env.ARTIFACT_NAME }}
name: ${{ env.ARTIFACT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}
path: ${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}_*

View file

@ -0,0 +1,84 @@
name: avrdude_packing_release
env:
# The name of the project
PROJECT_NAME: avrdude
DIST_DIR: dist
ARTIFACT_NAME: dist
on:
push:
tags:
- "v[0-9]+.[0-9]+*"
jobs:
build:
name: build (${{ matrix.config.os }}, ${{ matrix.config.arch }})
runs-on:
ubuntu-latest
strategy:
matrix:
config:
- os: Linux
arch: 64bit
cross_compile: x86_64-ubuntu16.04-linux-gnu
- os: Linux
arch: 32bit
cross_compile: i686-ubuntu16.04-linux-gnu
- os: Linux
arch: ARMv6
cross_compile: arm-linux-gnueabihf
- os: Linux
arch: ARM64
cross_compile: aarch64-linux-gnu
- os: macOS
arch: 64bit
cross_compile: x86_64-apple-darwin13
cross_compiler: o64-clang
ar: /opt/osxcross/target/bin/x86_64-apple-darwin13-ar # we have to manually specify the full path otherwise it's not found for some reason
ld: /opt/osxcross/target/bin/x86_64-apple-darwin13-ld
- os: Windows
arch: 32bit
cross_compile: i686-w64-mingw32
extension: .exe
container:
image: ghcr.io/arduino/crossbuild:0.2.2
steps:
- name: Checkout avrdude repository
uses: actions/checkout@v3
- name: replace system ranlib with darwin one
# for some reason is not possible to override ranlib with env vars, so this is ugly but it's the only way I found
if: matrix.config.os == 'macOS'
run: |
mv /usr/bin/ranlib /usr/bin/ranlib.bk
ln -s /opt/osxcross/target/bin/${{ matrix.config.cross_compile }}-ranlib /usr/bin/ranlib
- name: Build Avrdude
run: |
if [ "${{ matrix.config.os }}" = "macOS" ]; then
# For darwin we disable the static flags (not supported by clang) and we make some adjustments
cmake -DCMAKE_C_COMPILER=${{ matrix.config.cross_compiler }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cross_compiler }}++ -DCMAKE_AR=${{ matrix.config.ar }} -DCMAKE_LINKER=${{ matrix.config.ld}} -DCMAKE_EXE_LINKER_FLAGS="-L/opt/lib/${{ matrix.config.cross_compile }}/lib/" -DCMAKE_C_FLAGS="-I/opt/lib/${{ matrix.config.cross_compile }}/include -pthread -framework Foundation -framework IOKit -framework Cocoa -framework Security -DHAVE_USB_H" -DCMAKE_PREFIX_PATH=/opt/lib/${{ matrix.config.cross_compile }}/ -DHAVE_LIBFTDI="NO" -DUSE_STATIC_LIBS="ON" -B build/
else
cmake -DCMAKE_C_COMPILER=${{ matrix.config.cross_compile }}-gcc -DCMAKE_CXX_COMPILER=${{ matrix.config.cross_compile }}-g++ -DCMAKE_EXE_LINKER_FLAGS="-static-libgcc -static-libstdc++" -DCMAKE_C_FLAGS="-I/opt/lib/${{ matrix.config.cross_compile }}/include/libusb-1.0/ -I/opt/lib/${{ matrix.config.cross_compile }}/include -pthread" -DCMAKE_PREFIX_PATH=/opt/lib/${{ matrix.config.cross_compile }}/ -DHAVE_LIBFTDI="NO" -B build/
fi
cmake --build build/ -v
- name: Package
run: | # we need to create the subdir where to place binaries
mkdir -p ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/bin ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/etc
chmod +x build/src/${{ env.PROJECT_NAME }}${{ matrix.config.extension }}
mv -v build/src/${{ env.PROJECT_NAME }}${{ matrix.config.extension }} ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/bin
mv -v build/src/${{ env.PROJECT_NAME }}.conf ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/etc
mv -v COPYING ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/LICENSE.txt
tar -czv ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }} -f ${{ env.PROJECT_NAME }}_${GITHUB_REF##*/}_${{ matrix.config.os }}_${{ matrix.config.arch }}.tar.gz
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
if-no-files-found: error
name: ${{ env.ARTIFACT_NAME }}
path: avrdude_*

View file

@ -31,6 +31,59 @@ env:
BUILD_TYPE: RelWithDebInfo
jobs:
linux-x86_64-autotools:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install prerequisites
run: >-
sudo apt-get update
sudo apt-get install -y
build-essential
automake
libtool
flex
bison
libelf-dev
libusb-dev
libusb-1.0-0-dev
libhidapi-dev
libftdi1-dev
libreadline-dev
libserialport-dev
libgpiod-dev
texinfo
texlive
texi2html
- name: Configure
run: >-
autoreconf -vis src
mkdir _ambuild && cd _ambuild
../src/configure
--enable-option-checking=fatal
--enable-doc
--enable-parport
--enable-linuxgpio
--enable-linuxspi
- name: Build
run: make -C _ambuild -j$(nproc)
- name: "avrdude -? (not installed)"
run: _ambuild/avrdude -?
- name: "Dryrun test (not installed)"
run: printf "\n\n" | ./tools/test-avrdude -v -e _ambuild/avrdude -c '-C _ambuild/avrdude.conf' -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
- name: Install
run: sudo make -C _ambuild install
- name: "Dryrun test (installed)"
run: >-
export LD_LIBRARY_PATH="/usr/local/lib";
printf "\n\n" | ./tools/test-avrdude -v -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
# Re-enable distcheck after the doc fixes
# - name: distcheck
# run: make -C _ambuild -j$(nproc) distcheck "DISTCHECK_CONFIGURE_FLAGS=--disable-doc"
linux-x86_64:
runs-on: ubuntu-latest
steps:
@ -51,6 +104,7 @@ jobs:
libftdi1-dev
libreadline-dev
libserialport-dev
libgpiod-dev
texinfo
texlive
texi2html
@ -59,15 +113,24 @@ jobs:
cmake
-D BUILD_DOC=1
-D DEBUG_CMAKE=1
-D HAVE_PARPORT=1
-D HAVE_LINUXGPIO=1
-D HAVE_LINUXSPI=1
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
-B build
- name: Build
run: cmake --build build
- name: "avrdude -? (not installed)"
run: build/src/avrdude -?
- name: "Dryrun test (not installed)"
run: printf "\n\n" | ./tools/test-avrdude -v -e build/src/avrdude -c '-C build/src/avrdude.conf' -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
- name: Install
run: sudo cmake --build build --target install
- name: "Dryrun test (installed)"
run: printf "\n\n" | ./tools/test-avrdude -v -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
- name: Archive build artifacts
if: always()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: build-linux-x86_64
path: |
@ -75,7 +138,7 @@ jobs:
!**/*.d
!**/*.o
- name: Archive executables
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: avrdude-linux-x86_64
path: |
@ -114,10 +177,12 @@ jobs:
libftdi1-dev:${{matrix.arch}}
libreadline-dev:${{matrix.arch}}
libserialport-dev:${{matrix.arch}}
libgpiod-dev:${{matrix.arch}}
- name: Configure
run: >-
cmake
-D DEBUG_CMAKE=1
-D HAVE_PARPORT=1
-D HAVE_LINUXGPIO=1
-D HAVE_LINUXSPI=1
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
@ -130,9 +195,12 @@ jobs:
-B build
- name: Build
run: cmake --build build
- name: "avrdude -? (not installed)"
if: matrix.arch == 'i386'
run: build/src/avrdude -?
- name: Archive build artifacts
if: always()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: build-linux-${{matrix.processor}}
path: |
@ -140,7 +208,7 @@ jobs:
!**/*.d
!**/*.o
- name: Archive executables
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: avrdude-linux-${{matrix.processor}}
path: |
@ -151,46 +219,108 @@ jobs:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- name: Original PATH and build tools
run: |
echo "PATH=$PATH"
for b in bison flex pkg-config; do type "$b"; done
- name: Install prerequisites
run: >-
# brew update
brew install
cmake
flex
bison
libelf
libusb
libusb-compat
hidapi
libftdi
readline
libserialport
- name: Configure environment to use brew kegs for flex and bison
run: |
echo "PATH=/opt/homebrew/opt/flex/bin:/opt/homebrew/opt/bison/bin:$PATH" >> $GITHUB_ENV
- name: post-brew PATH and build tools
run: |
echo "PATH=$PATH"
for b in bison flex pkg-config; do type "$b"; done
- name: Configure
run: >-
cmake
-D CMAKE_C_FLAGS="-I/opt/homebrew/include -I/opt/homebrew/opt/flex/include"
-D CMAKE_EXE_LINKER_FLAGS="-L/opt/homebrew/Cellar -L/opt/homebew/opt/flex/lib"
-D DEBUG_CMAKE=1
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
-B build
- name: Build
run: cmake --build build
- name: "avrdude -? (not installed)"
run: build/src/avrdude -?
- name: "Dryrun test (not installed)"
run: printf "\n\n" | ./tools/test-avrdude -v -e build/src/avrdude -c '-C build/src/avrdude.conf' -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
- name: Archive build artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: build-macos-x86_64
path: |
build/
!**/*.d
!**/*.o
- name: Archive executables
uses: actions/upload-artifact@v4
with:
name: avrdude-macos-x86_64
path: |
build/src/avrdude
build/src/avrdude.conf
macos-x86_64-autotools:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- name: Original PATH and build tools
run: |
echo "PATH=$PATH"
for b in bison flex pkg-config; do type "$b"; done
- name: Install prerequisites
run: >-
brew install
automake
autoconf
libtool
gettext
flex
bison
libelf
libusb
hidapi
libftdi
readline
libserialport
- name: Configure environment to use brew kegs for flex and bison
run: |
echo "PATH=/opt/homebrew/opt/flex/bin:/opt/homebrew/opt/bison/bin:$PATH" >> $GITHUB_ENV
- name: post-brew PATH and build tools
run: |
echo "PATH=$PATH"
for b in bison flex pkg-config; do type "$b"; done
- name: Configure
run: >-
cmake
-D CMAKE_C_FLAGS=-I/usr/local/include
-D CMAKE_EXE_LINKER_FLAGS=-L/usr/local/Cellar
-D DEBUG_CMAKE=1
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
-B build
./src/bootstrap
mkdir _ambuild && cd _ambuild
CFLAGS="-I/opt/homebrew/include -I/opt/homebrew/opt/flex/include"
LDFLAGS="-L/opt/homebrew/lib -L/opt/homebrew/opt/bison/lib"
../src/configure
--enable-option-checking=fatal
- name: Build
run: cmake --build build
- name: Archive build artifacts
if: always()
uses: actions/upload-artifact@v3
with:
name: build-macos-x86_64
path: |
build/
!**/*.d
!**/*.o
- name: Archive executables
uses: actions/upload-artifact@v3
with:
name: avrdude-macos-x86_64
path: |
build/src/avrdude
build/src/avrdude.conf
run: make -C _ambuild -j$(nproc)
- name: "avrdude -? (not installed)"
run: _ambuild/avrdude -?
- name: "Dryrun test (not installed)"
run: printf "\n\n" | ./tools/test-avrdude -v -e _ambuild/avrdude -c '-C _ambuild/avrdude.conf' -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
msvc:
runs-on: windows-latest
@ -223,9 +353,22 @@ jobs:
-B build
- name: Build
run: cmake --build build --config ${{env.BUILD_TYPE}}
- name: "avrdude -? (not installed)"
# FIXME: Skip running avrdude.
# The exe file on arm64 is not runnable - x86_64 perhaps?
if: matrix.arch != 'arm64'
run: build/src/${{env.BUILD_TYPE}}/avrdude.exe -?
- name: "Dryrun test (not installed)"
# FIXME: Skip running avrdude.
# The exe file on arm64 is not runnable - x86_64 perhaps?
if: matrix.arch != 'arm64'
run: |
$tmp = [System.IO.Path]::GetTempPath()
$tmp_slash = $tmp -replace '\\', '/'
Write-Host "`n`n" -NoNewline | bash tools/test-avrdude -v -t "$tmp_slash" -e build/src/${{env.BUILD_TYPE}}/avrdude.exe -c "-C build/src/avrdude.conf" -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
- name: Archive build artifacts
if: always()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: build-msvc-${{matrix.arch}}
path: |
@ -234,10 +377,10 @@ jobs:
!**/*.obj
- name: Move executables
run: |
mv build/src/RelWithDebInfo/avrdude.exe build/src
mv build/src/RelWithDebInfo/avrdude.pdb build/src
mv build/src/${{env.BUILD_TYPE}}/avrdude.exe build/src
mv build/src/${{env.BUILD_TYPE}}/avrdude.pdb build/src
- name: Archive executables
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: avrdude-msvc-${{matrix.arch}}
path: |
@ -253,10 +396,8 @@ jobs:
strategy:
matrix:
include:
- { sys: mingw32, env: i686 }
- { sys: mingw64, env: x86_64 }
- { sys: ucrt64, env: ucrt-x86_64 }
- { sys: clang32, env: clang-i686 }
- { sys: clang64, env: clang-x86_64 }
steps:
- uses: actions/checkout@v3
@ -268,6 +409,8 @@ jobs:
base-devel
mingw-w64-${{matrix.env}}-gcc
mingw-w64-${{matrix.env}}-cmake
mingw-w64-${{matrix.env}}-python
mingw-w64-${{matrix.env}}-swig
mingw-w64-${{matrix.env}}-libelf
mingw-w64-${{matrix.env}}-libusb
mingw-w64-${{matrix.env}}-libusb-compat-git
@ -286,15 +429,20 @@ jobs:
-B build
- name: Build
run: cmake --build build
- name: "avrdude -? (not installed)"
run: build/src/avrdude -?
# Disabled so far due to problems writing to temp files.
# - name: "Dryrun test (not installed)"
# run: printf "\n\n" | ./tools/test-avrdude -v -e build/src/avrdude.exe -c "-C build/src/avrdude.conf" -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
- name: Archive build artifacts
if: always()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: build-mingw-${{matrix.env}}
path: |
build/
- name: Archive executables
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: avrdude-mingw-${{matrix.env}}
path: |

42
.github/workflows/check-sourcecode.yml vendored Normal file
View file

@ -0,0 +1,42 @@
name: "Check Sourcecode"
on:
push:
branches-ignore:
- 'onlinedocs'
pull_request:
branches-ignore:
- 'onlinedocs'
jobs:
check-sourcecode:
name: "Check Sourcecode"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# - name: Install prerequisites
- name: "Check the sourcecode"
run: ./tools/check-sourcecode
check-generated:
name: "Check Generated Files"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install prerequisites
run: >-
sudo apt-get update
sudo apt-get install -y
asciidoctor
- name: "Verify elf2tag.1 consistency"
run: ./src/update-elf2tag-manpage --verify

8
.gitignore vendored
View file

@ -40,6 +40,11 @@ ltmain.sh
ylwrap
tags
cscope.out
/src/avrdude-[1-9].[0-9].tar.*
/src/avrdude-[1-9].[0-9]/
/src/avrdude-[1-9].[0-9]-20[0-9][0-9][01][0-9][0-3][0-9].tar.*
/src/avrdude-[1-9].[0-9]-20[0-9][0-9][01][0-9][0-3][0-9]/
/src/GNUmakefile
*.o
*.lo
@ -50,6 +55,9 @@ cscope.out
out/
build/
build_*/
CMakeFiles/
/CMakeCache.txt
cmake_install.cmake
# Visual Studio
.vs/

27
AUTHORS
View file

@ -7,38 +7,54 @@ AVRDUDE is currently maintained by:
Hans Eirik Bull
Stefan Rueger
Xiaofan Chen
Marius Greuel
Joerg Wunsch
Contributors:
Joerg Wunsch <j@uriah.heep.sax.de>
Eric Weddington <ericw@evcohs.com>
Eric B. Weddington <ericw@evcohs.com>
Martin J. Thomas <mthomas@rhrk.uni-kl.de>
Theodore A. Roth <troth@openavr.org>
Erik Walthinsen
Jan-Hinnerk Reichert <hinni@despammed.com>
Alex Shepherd <maillists@ajsystems.co.nz>
Martin Thomas <mthomas@rhrk.uni-kl.de>
Theodore A. Roth <troth@openavr.org>
Juliane Holzt <avrdude@juliane.holzt.de>
Colin O'Flynn <coflynn@newae.com>
Thomas Fischl <tfischl@gmx.de>
David Hoerl <dhoerl@mac.com>
Christian Starkjohann
David Moore
David Brownell
Dick Streefland
Limor Fried
Klaus Leidinger <klaus@mikrocontroller-projekte.de>
Lars Immisch
Michal Ludvig <mludvig@logix.net.nz>
Roger E. Wolff <R.E.Wolff@BitWizard.nl>
Darell Tan <darell.tan@gmail.com>
Brett Hagman <bhagman@roguerobotics.com>
Wolfgang Moser
Ville Voipio
Hannes Weisbach
Doug Springer
Brett Hagman <bhagman@roguerobotics.com>
Rene Liebscher <r.liebscher@gmx.de>
Jim Paris <jim@jtan.com>
Jan Egil Ruud <janegil.ruud@microchip.com>
David Mosberger <davidm@egauge.net>
Kirill Levchenko
Kevin Cuzner <kevin@kevincuzner.com>
David Sainty
Alexey Sadkov
Marius Greuel <greuelm@mgtek.com>
Ralf Ramsauer <ralf@vmexit.de>
Dawid Buchwald <dawid.buchwald@hotmail.com>
Hans Eirik Bull
Stefan Rueger
Xiaofan Chen
Jeff Kent
Sebastian Kuzminsky <seb@highlab.com>
Sydney Louisa Wilke <git@funkeleinhorn.com>
MX682X
Contributors to code no longer present:
@ -47,4 +63,3 @@ Contributors to code no longer present:
Chris Liechti for loaddrv modifications
For minor contributions, please see the ChangeLog files / Git log.

View file

@ -21,7 +21,7 @@
# cmake --build build
cmake_minimum_required(VERSION 3.14)
project(avrdude VERSION 7.2 LANGUAGES C)
project(avrdude VERSION 8.0 LANGUAGES C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED True)
@ -49,7 +49,7 @@ include(FindPackageMessage)
include(GNUInstallDirs)
set(CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}")
set(AVRDUDE_FULL_VERSION ${CMAKE_PROJECT_VERSION})
set(AVRDUDE_FULL_VERSION "${CMAKE_PROJECT_VERSION}${EXTRA_VERSION_SUFFIX}")
# =====================================
# Get Git commit info
@ -69,14 +69,14 @@ if(Git_FOUND)
)
execute_process(
COMMAND "${GIT_EXECUTABLE}" log -1 --format=%ad --date=format:%Y%m%d
COMMAND "${GIT_EXECUTABLE}" log -1 --format=%cd --date=format:%Y%m%d
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_COMMIT_DATE
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND "${GIT_EXECUTABLE}" log -1 --format=%ad --date=format:%Y
COMMAND "${GIT_EXECUTABLE}" log -1 --format=%cd --date=format:%Y
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_COMMIT_YEAR
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
@ -91,7 +91,7 @@ if(Git_FOUND)
# If the commit is not tagged, include the date and commit hash in the full version string.
if(NOT GIT_COMMIT_HASH STREQUAL GIT_TAG_HASH)
set(AVRDUDE_FULL_VERSION "${CMAKE_PROJECT_VERSION}-${GIT_COMMIT_DATE} (${GIT_COMMIT_HASH})")
set(AVRDUDE_FULL_VERSION "${CMAKE_PROJECT_VERSION}-${GIT_COMMIT_DATE}${EXTRA_VERSION_SUFFIX} (${GIT_COMMIT_HASH})")
endif()
endif()
@ -124,9 +124,8 @@ if(USE_STATIC_LIBS)
set(PREFERRED_LIBHIDAPI libhidapi.a libhidapi-libusb.a libhidapi-hidraw.a hidapi hidapi-libusb hidapi-hidraw)
set(PREFERRED_LIBFTDI libftdi.a ftdi)
set(PREFERRED_LIBFTDI1 libftdi1.a ftdi1)
set(PREFERRED_LIBREADLINE libreadline.a)
set(PREFERRED_LIBSERIALPORT libserialport.a)
set(PREFERRED_LIBGPIOD libgpiod.a gpiod)
set(PREFERRED_LIBREADLINE libreadline.a readline)
set(PREFERRED_LIBSERIALPORT libserialport.a serialport)
else()
set(PREFERRED_LIBELF elf)
set(PREFERRED_LIBUSB usb)
@ -136,7 +135,6 @@ else()
set(PREFERRED_LIBFTDI1 ftdi1)
set(PREFERRED_LIBREADLINE readline)
set(PREFERRED_LIBSERIALPORT serialport)
set(PREFERRED_LIBGPIOD gpiod)
endif()
# -------------------------------------
@ -222,7 +220,7 @@ endif()
find_library(HAVE_LIBREADLINE NAMES ${PREFERRED_LIBREADLINE})
if(HAVE_LIBREADLINE)
set(LIB_LIBREADLINE ${HAVE_LIBREADLINE})
find_library(LIB_NCURSES NAMES ncurses)
find_library(LIB_NCURSES NAMES ncurses pdcurses)
elseif(MSVC)
set(HAVE_LIBREADLINE 1)
endif()
@ -237,15 +235,63 @@ if(HAVE_LIBSERIALPORT)
endif()
# -------------------------------------
# Find libgpiod, if needed
# Find libgpiod using pkg-config, if needed
if(HAVE_LINUXGPIO)
find_library(HAVE_LIBGPIOD NAMES ${PREFERRED_LIBGPIOD})
if(HAVE_LIBGPIOD)
set(LIB_LIBGPIOD ${HAVE_LIBGPIOD})
set(CMAKE_REQUIRED_LIBRARIES ${LIB_LIBGPIOD})
# defaults/fallbacks
set(HAVE_LIBGPIOD 0)
set(HAVE_LIBGPIOD_V2 0)
set(HAVE_LIBGPIOD_V1_6 0)
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
# check whether we have version >= 2.0
message(STATUS "Checking for module 'libgpiod'...")
pkg_check_modules(LIBGPIODV2 QUIET libgpiod>=2.0)
if(LIBGPIODV2_FOUND)
message(STATUS "Found module 'libgpiod' (found version \"${LIBGPIODV2_VERSION}\")")
set(HAVE_LIBGPIOD 1)
set(HAVE_LIBGPIOD_V2 1)
set(CMAKE_REQUIRED_LIBRARIES ${LIBGPIODV2_LIBRARIES})
set(LIB_LIBGPIOD ${LIBGPIODV2_LINK_LIBRARIES})
else()
# check whether we have version >= 1.6
pkg_check_modules(LIBGPIODV1_6 QUIET libgpiod>=1.6)
if(LIBGPIODV1_6_FOUND)
message(STATUS "Found module 'libgpiod' (found version \"${LIBGPIODV1_6_VERSION}\")")
set(HAVE_LIBGPIOD 1)
set(HAVE_LIBGPIOD_V1_6 1)
set(CMAKE_REQUIRED_LIBRARIES ${LIBGPIODV1_6_LIBRARIES})
set(LIB_LIBGPIOD ${LIBGPIODV1_6_LINK_LIBRARIES})
else()
# check whether we have at least an older version
pkg_check_modules(LIBGPIOD QUIET libgpiod)
if(LIBGPIOD_FOUND)
message(STATUS "Found module 'libgpiod' (found version \"${LIBGPIOD_VERSION}\")")
set(HAVE_LIBGPIOD 1)
set(CMAKE_REQUIRED_LIBRARIES ${LIBGPIOD_LIBRARIES})
set(LIB_LIBGPIOD ${LIBGPIOD_LINK_LIBRARIES})
else()
message(STATUS "Could not find module 'libgpiod', proceeding without.")
endif()
endif()
endif()
else()
message(WARNING "For using libgpiod, pkg-config would be required which is not available.")
endif()
endif()
# -------------------------------------
# Find SWIG
find_package(SWIG 4.0 COMPONENTS python)
if(SWIG_FOUND)
find_package(Python3 COMPONENTS Interpreter Development)
if(PYTHON3_FOUND)
set(HAVE_SWIG 1)
else()
message(STATUS "Found SWIG but no Python3 header/library; cannot use SWIG")
endif()
endif()
# =====================================
# Use external libraries if requested
# =====================================
@ -306,6 +352,14 @@ if(BUILD_DOC)
add_subdirectory(src/doc)
endif()
if(HAVE_PARPORT)
if(WIN32)
message(FATAL_ERROR "avrdude does not support parallel port on Windows")
elseif(APPLE)
message(FATAL_ERROR "avrdude does not support parallel port on Apple systems")
endif()
endif()
# =====================================
# Configuration
# =====================================
@ -319,6 +373,7 @@ if (DEBUG_CMAKE)
message(STATUS "CMAKE_FIND_ROOT_PATH: ${CMAKE_FIND_ROOT_PATH}")
message(STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}")
message(STATUS "CONFIG_DIR: ${CONFIG_DIR}")
message(STATUS "EXTRA_VERSION_SUFFIX: ${EXTRA_VERSION_SUFFIX}")
message(STATUS "AVRDUDE_FULL_VERSION: ${AVRDUDE_FULL_VERSION}")
message(STATUS "USE_EXTERNAL_LIBS: ${USE_EXTERNAL_LIBS}")
message(STATUS "USE_LIBUSBWIN32: ${USE_LIBUSBWIN32}")
@ -339,7 +394,9 @@ if (DEBUG_CMAKE)
message(STATUS "HAVE_LIBUSB_1_0_LIBUSB_H: ${HAVE_LIBUSB_1_0_LIBUSB_H}")
message(STATUS "HAVE_HIDAPI_HIDAPI_H: ${HAVE_HIDAPI_HIDAPI_H}")
message(STATUS "LIBUSB_COMPAT_DIR: ${LIBUSB_COMPAT_DIR}")
message(STATUS "HAVE_LIBGPIOD: ${HAVE_LIBGPIOD}")
message(STATUS "LIBGPIODV2_FOUND: ${LIBGPIODV2_FOUND}")
message(STATUS "LIBGPIODV1_6_FOUND: ${LIBGPIODV1_6_FOUND}")
message(STATUS "LIBGPIOD_FOUND: ${LIBGPIOD_FOUND}")
message(STATUS "----------------------")
endif()
@ -409,8 +466,12 @@ endif()
if(HAVE_LINUXGPIO)
message(STATUS "ENABLED linuxgpio")
if (HAVE_LIBGPIOD)
message(STATUS "DO HAVE libgpiod")
if (LIBGPIODV2_FOUND)
message(STATUS "DO HAVE libgpiod (${LIBGPIODV2_VERSION})")
elseif(LIBGPIODV1_6_FOUND)
message(STATUS "DO HAVE libgpiod (${LIBGPIODV1_6_VERSION})")
elseif(LIBGPIOD_FOUND)
message(STATUS "DO HAVE libgpiod (${LIBGPIOD_VERSION})")
else()
message(STATUS "DON'T HAVE libgpiod")
endif()
@ -424,4 +485,10 @@ else()
message(STATUS "DISABLED linuxspi")
endif()
if(HAVE_SWIG)
message(STATUS "DO HAVE swig+Python3")
else()
message(STATUS "DON'T HAVE swig+Python3")
endif()
message(STATUS "----------------------")

40
COPYING
View file

@ -1,12 +1,12 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
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
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@ -15,7 +15,7 @@ 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
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@ -55,8 +55,8 @@ 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
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
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
@ -168,7 +168,7 @@ 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
@ -225,7 +225,7 @@ 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
@ -255,7 +255,7 @@ 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
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
@ -277,9 +277,9 @@ 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
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
@ -303,16 +303,16 @@ the "copyright" line and a pointer to where the full notice is found.
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 <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
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 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.
@ -335,5 +335,5 @@ necessary. Here is a sample; alter the names:
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
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

285
NEWS
View file

@ -1,23 +1,266 @@
$Id$
Approximate change log for AVRDUDE by version.
(For detailed changes, see the version control system logs.)
----------------------------------------------------------------------
Changes since version 7.2:
Changes since version 8.0:
* Major changes compared to the previous version:
* New devices supported:
- AVR128DA28S, AVR128DA32S, AVR128DA48S, AVR128DA64S
- AVR64DA28S, AVR64DA32S, AVR64DA48S, AVR64DA64S
- AVR32DA28S, AVR32DA32S, AVR32DA48S
- AVR32EB14, AVR32EB20, AVR32EB28, AVR32EB32
- AVR32SD20, AVR32SD28, AVR32SD32
* New programmers supported:
- pickit5 = pickit5_jtag, pickit5_dw, pickit5_isp, pickit5_pdi, pickit5_tpi
- pickit_basic = pickit_basic_jtag, pickit_basic_updi, pickit_basic_isp,
pickit_basic_dw, pickit_basic_tpi, pickit_basic_pdi
* New serial adapters supported:
* Issues fixed:
- Missing devices in udev rules output? #1915
- AVR-Doper support has been broken since version 6.4 #1626
- CI: upload-artifacts@v3 fails #1944
- Linuxspi won't connect #1929
- Fails to build on Windows with recent clang #1940
- Support options such as --part #1922
* Pull requests:
- Add AVR128DAxxS parts #1918
- Update usbpids in avrdude.conf #1919
- Add extra version information to avrdude output #1927
- CI: Ensure only supported configure options are used
(--enable-option-checking=fatal) #1934
- Document elf2tag script #1916
- Add AVR32EBxx parts #1932
- Fix ATxmega fuses memory sizes #1933
- Fix avrdoper header sequence for hidusb #1937
- Fix GitHub upload artifact #1945
- PICKit5 ISP, dW, TPI, JTAG and PDI support #1935
- Ensure linuxspi part is up for 100 ms before reset #1939
- Fix missing stdlib.h include for free() #1941
- Add long options #1936
- Add docs and release badges to README #1948
- Correct PICkit5 programmer type entries #1949
- Shorten ID of ATA parts #1950
- Shorten ID of LGT parts #1951
- Suggest compatible command for SNAP/PICKit4 in PIC mode #1947
- Add AVR64DAnnS, AVR32DAnnS and AVR32SDnn #1955
- Fix variant errors introduced in recent .atdf versions #1958
- Add PICkit Basic programmer #1959
- Add --version option #1962
- Add WDT type info to avrintel.c #1963
- Remove spurious s from AVR32SDnn part id #1964
- Remove #include "usbdevs.h" from libavrdude.h #1965
* Internals:
Changes in version 8.0:
* Major changes compared to the previous version:
- Support of multi-memory .hex/.srec files and memory lists #1828
- New terminal disasm command #1842
- GUI implementation of avrdude to demonstrate libavrdude #1714
* New devices supported:
- AVR16DU14, AVR16DU20, AVR16DU28, AVR16DU32
- AVR32DU14, AVR32DU20, AVR32DU28, AVR32DU32
* New programmers supported:
- serprog
- pickit5_updi
* New serial adapters supported:
- ch342, ch344, ch347, ch9103
* Issues fixed:
- Avrintel.h missing from installation #1683
- Use of undeclared identifier 'AVRDUDE_FULL_VERSION' #1706
- Wrong message level in jtag3_prmsg() #1726
- Old avrdude_message() can go away #1719
- avr_{read,write}_mem fail to initialize progress reporting #1718
- avr*timestamp() oddities #1722
- -F option not honoured #1740
- "jtag2 is not a unique start of a programmer name" #1739
- Regression: EEPROM issue with official STK500 V1 FW #1713
- usbasp_write_byte in TPI mode not implemented #1755
- Remove calls to exit() from libavrdude library #774
- cmake enabling LINUXGPIO on ubuntu 20.04 fails #1782
- macOS github action failed. #1793
- Format mismatch warnings #1799
- 0xff optimization when reading #1732
- Add support for more AVR-DU parts #1742
- Misleading error message: cannot find programmer id #1805
- Custom programmer broken in v7.3 #1807
- ATtiny11 does not have EEPROM #1812
- AVRDUDE fails to return -1 on some write errors #1821
- Multi-memory files #1817
- Terminal erase command #1833
- Bootrow r/w does not work for -c serialupdi #1832
- Wrong error message when specifying wrong AVR-Ex part #1813
- AVR109 auto reset functionality #1697
- Unable to write LOCK bit byte to JTAG3_TPI #1858
- Unexpected auto-erase consequences #1861
- JTAGICE3 EDBG communication mode relies on hardcoded USBVID #1838
- avrdude documentation typo(s) attemps #1852
- Conflicting types for op16_is_mnemo: enum/integer #1851
- Writing BOOTROW for Curiosity Nano #1868
- Should AVRDUDE be run as root? #1860
- Auto-build avrdude.pdf from texinfo sources #1847
- Poor coverage of (concept) index in documentation #1582
- Warnings when build under NetBSD 10 and OpenBSD 7.5 #1904
- Add -e for the location of avrdude executable for test8 #1900
- Weird AVR family warning on locked AVR-Dx #1894
- How is version.texi created with autotools? #1905
* Pull requests:
- Remove 32bit MSYS2 mingw32 and clang32 build #1687
- Make avrintel.h an internal header file for libavrdude #1686
- Fix -Wcalloc-transposed-args warning #1680
- Improve autotool build #1681
- Installation of libavrdude-avrintel.h #1688
- Updated documentation about NVM models support #1689
- Abbreviate ids of modern AVR parts #1703
- Allow slash in part variant name for -p #1702
- Fix reporting of read/write times for files with holes #1700
- Change port array in PROGRAMMER to be const char * #1699
- Fix cmake build errors related to ac_cfg.h #1707
- Add benchmark option -b for test-avrdude #1709
- Replace msg_info() by msg_debug() in jtag3_prmsg()
and jtag3_prevent() #1727
- Remove unused avrdude_message() #1730
- Add lmsg_xyz() functions to start message at left margin #1728
- Document progress reporting in source code #1724
- Change type for avr_(ms|us)timestamp() to uint64_t #1729
- Use Static Libs for macOS arduino_packing build #1731
- Add arduino_packing_release github action #1690
- Fix message levels in jtag3_print_data() #1741
- Consult -F option when signature cannot be read #1745
- Check all programmer ids for exact match #1746
- Update avrintel files #1747
- Add buspirate hiz and pullups feature #1733
- Add support for libgpiod v2+ API #1725
- Remove deprecated ucr2 part #1749
- Make programmers libavrdude ready #1750, 1752, 1756 ... 1786
- Make default EEPROM readback 0xff for STK500 v1 #1753
- Silence gcc warning when printf format is "" #1754
- Remove calls to exit() from libavrdude library #1790
- Include libgpiod-dev in build.yml for Linux builds #1788
- linuxgpio: add support for libgpiod v1.4 #1792
- Use magic memory tree interface throughout #1795
- Silence MacOS compiler warning #1794
- Add macOS autotools to github action #1798
- Silence compiler warnings #1800
- Fix 7 typos in 4 files #1802
- Put static variables into context structure #1803
- Add new AVRnnDUnn parts #1804
- Differentiate cause when programmer isn't found #1806
- Prepare for next urboot version #1808
- Rename AVRDUDE symbol names ending in _t #1809
- Warn when programmer failes to define prog_modes #1810
- Add serprog programmer #1801
- Remove EEPROM from ATtiny11 avrdude.conf entry #1814
- Guard serial_number access in usbhid_open() to avoid segfault #1815
- Allow selection of program modes for developer options #1816
- Return -1 on write error #1822
- Extend elf format for bootrow #1820
- Update AUTHORS list #1819
- Downgrade out-of-range file input errors on -F #1818
- Multi-memory file handling #1828
- Add developer options -p*/vcr to explore SW compatibility #1830
- Improve chip erase emulation for dryboot/dryrun #1836
- Use page erase for UPDI programming #1837
- Add fuses, calibration, sernum and tempsense memories #1829
- Fix bootrow access for -c serialupdi #1835
- Improve signature check for UPDI parts #1840
- Improve error handling for avrdude without libserialport #1843
- Provide terminal disasm command #1842
- Improve auto-reset handling and -x/-E parsing #1844
- Remove obsolete SVN $Id$ tags from source files #1850
- Update look and feel #1849
- Update documentation for -E and -x #1853
- Add more WCH USB to serial chips #1855
- cmake: LIB_NCURSES also accept pdcurses #1856
- Fix byte writes to TPI lockbits for jpag3.c #1859
- Refine auto-erase strategy #1862
- Provide -P usb:vid:pid for USB hid i/f and allow
long -P usb:serno for usblib and hidapi #186
- Initialise dryrun flash with realistic random code #1873
- Writing BOOTROW for Curiosity Nano #1870
- Refine programmer/part/memory compatibility modelling #1869
- Provide dev option -c \*/u that shows udev rules #1867
- Provide current avrdude.pdf documentation in repo root #1865
- doc: Stop building and installing .ps and .dvi #1857
- Improve autotools build (part 2/n) #1695
- Use correct file locations in the documentation #1637
- Deprecate obsolete features and options #1875
- Add more hard-coded usbvid/pid to udev rules #1876
- Fixes for jtag3 programmers and prep for jtagmkII #1877
- SWIG Python wrapper for libavrdude #1714
- PICkit 5 support #1863
- Make usbproduct available to programmers #1880
- Silently skip erasing read-only parts of a memory #1883
- Fix ATmega1284/P readsize #1886
- Fix addresses for jtag3_pdi boot and apptable #1887
- Adapt documentation to new Look and Feel #1892
- Adapt tools/test-avrdude script for versatile CI use #1891
- Reformat sources #1893
- Add to parts, programmers and index in avrdude.pdf #1895 #1902
- Fix deprecated types in libavrdude.i #1896
- Update build.yml to re-enable Windows on ARM64 MSVC build #1901
- Add -e exe option to test8 #1903
- Refrain from polling memories other than flash/eeprom #1897
- Remove known limitations comment from serprog.c #1906
- Improve messaging around locked UPDI parts #1907
- Improve Documentation #1908
- Silence compiler warnings #1909
- Parport build test #1874
- CI: test running the built avrdude executable #1888
- Add checks for zombie sourcecode problems #1910
- Iron out some problems in jtagmkII #1911
* Internals:
- Created a context structure pointed to by cx, which harbours global
and static variables
- Made programmers libavrdude ready: remove exit() calls and moved
static variables into local struct pdata
Changes in version 7.3:
* Major changes compared to the previous version:
- Connect target via -P serialadapter[:sn] and -P usb:vid:pid[:sn] #1498
- Add io and sram memory info in lieu of incomplete data memory
- New test-avrdude script in tools #1645
- Update SerialUPDI protocol #1627
- Terminal
+ Command regfile #1580
+ Command factory reset #1642
* New devices supported:
- AVR16EB14, AVR16EB20, AVR16EB28, AVR16EB32
- AVR64DU28, AVR64DU32
* New programmers supported:
- ft2232h_jtag, ft232h_jtag
- dryboot
* Issues fixed:
@ -48,6 +291,18 @@ Changes since version 7.2:
- Query a programmer's current clock speed #1329
- Differentiate USB programmers with the same VID/PID #973
- Add AVR-DU series latest information #1595
- Provide simple way to factory reset a chip #1619
- Incorrect SerialUPDI communication for NVM V3, V4 and V5 #1621
- SerialUPDI programmer can fail when erasing EEPROM #1622
- SerialUPDI - NVMProg key not being accepted immediately
after NVM V3+ chip completes boot #1623
- USE_STATIC_LIBS builds fail to detect libreadline.so #1624
- Writing one-byte files to flash fails #1633
- Integrate test-avrdude github action using dryrun #1643
- Test script issues #1649
- SerialUPDI unable to write USERROW memory on AVR64DU32 #1655
- The last write/erase can fail with -c jtag2updi #1661
- Improve programmer documentation in avrdude.conf #1437
* Pull requests:
@ -57,7 +312,7 @@ Changes since version 7.2:
- Provide sib memory for AVR8X parts #1480
- Read chip revision and add IO memory for PDI/UPDI parts #1474
- Replace string comparison functions #1482
- Fix overapping XMEGA flash memories for dryrun #1486
- Fix overlapping XMEGA flash memories for dryrun #1486
- Exit if part and programmer are incompatible #1487
- Add io memory for classic parts #1488
- Add AVR-EB parts #1491
@ -116,6 +371,21 @@ Changes since version 7.2:
- Provide and use locate_part_by_signature_pm() #1605
- Harden AVRDUDE against pre-C99 libraries #1608
- Add MSYS2 ucrt64, clang32 and clang64 to build.yml #1612
- Updates to SerialUPDI protocol #1627
- Fix upload of one-byte files to flash #1634
- Add CH343 USB to serial adapter #1640
- Add dryboot programmer #1641
- Provide terminal command factory reset #1642
- Add tools/test-avrdude #1645
- Add test-avrdude using dryrun to github action #1646
- Add delay for AVR Dragon and Arduino Nano Every #1647
- Make test-avrdude script resilient to old bash #1650
- Create test-avrdude temporary files in the script itself #1651
- Enable writing of 512-byte page for USERROW #1659
- Read signature on -c jtag2updi exit if last op was write #1662
- Determine Autoconf package version from cmake's #1663
- Add more programmer descriptions #1667
- test(1) string comparison uses =, not == #1668
* Internals:
@ -123,6 +393,7 @@ Changes since version 7.2:
This will enable to decouple memory names from function
- Added a knowledgebase on register files of parts
Changes in version 7.2:
* Major changes compared to the previous version:
@ -1328,11 +1599,11 @@ Version 5.7:
- ATXMEGA64A1
- ATXMEGA192A1
- ATXMEGA256A1
- ATXMEGA256A1
- ATXMEGA64A3
- ATXMEGA128A3
- ATXMEGA192A3
- ATXMEGA256A3
- ATXMEGA256A3
- ATXMEGA256A3B
- ATXMEGA16A4
- ATXMEGA32A4
@ -1602,7 +1873,7 @@ Version 4.1.0
* Add support for avr910 type programmers (mcu00100, pavr avr910, etc).
* Support new devices: ATmega8535, ATtiny26
Version 4.0.0

View file

@ -1,6 +1,8 @@
# AVRDUDE
[![Build Status](https://github.com/avrdudes/avrdude/actions/workflows/build.yml/badge.svg)](https://github.com/avrdudes/avrdude/actions/workflows/build.yml)
[![Gh-pages docs](https://img.shields.io/badge/Docs-online-blue)](https://avrdudes.github.io/avrdude/)
[![GitHub Release](https://img.shields.io/github/v/release/avrdudes/avrdude?color=yellow)](https://github.com/avrdudes/avrdude/releases)
AVRDUDE - AVR Downloader Uploader - is a program for downloading and uploading
the on-chip memories of Microchips [AVR microcontrollers](https://en.wikipedia.org/wiki/AVR_microcontrollers).
@ -18,7 +20,7 @@ The latest version of AVRDUDE is always available here:\
## Documentation
Documentation for current and previous releases is [on Github Pages](https://avrdudes.github.io/avrdude/).
Documentation for current and previous releases is [on Github Pages](https://avrdudes.github.io/avrdude/). Git main is documented only with the most recent [avrdude.pdf](https://github.com/avrdudes/avrdude/blob/main/avrdude.pdf).
## Getting AVRDUDE for Windows
@ -62,3 +64,12 @@ avrdude -c arduino -P COM1 -b 115200 -p atmega328p -D -U flash:w:objs/blink.hex:
There are many different programmers and options that may be required for the programming to succeed.
For more information, refer to the [AVRDUDE documentation](https://avrdudes.github.io/avrdude/).
## Using the AVRDUDE GUI demonstrator
Starting with version 8, a GUI implementation has been added, to demonstrate the functionality of `libavrdude` is suitable to implement a native GUI (as opposed to CLI wrapper).
The GUI is based on the Qt toolkit and its Python bindings, called _PySide_.
Either Qt5 with PySide2, or Qt6 with PySide6 are supported.
A script named `avrdude-gui` is installed into the same location as the AVRDUDE CLI program. It can be used to start the GUI. There is a builtin help describing the usage.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,116 +0,0 @@
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<data.length;i++) {
var dataString = data[i].string;
var dataProp = data[i].prop;
this.versionSearchString = data[i].versionSearch || data[i].identity;
if (dataString) {
if (dataString.indexOf(data[i].subString) != -1)
return data[i].identity;
}
else if (dataProp)
return data[i].identity;
}
},
searchVersion: function (dataString) {
var index = dataString.indexOf(this.versionSearchString);
if (index == -1) return;
return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
},
dataBrowser: [
{
string: navigator.userAgent,
subString: "Chrome",
identity: "Chrome"
},
{ string: navigator.userAgent,
subString: "OmniWeb",
versionSearch: "OmniWeb/",
identity: "OmniWeb"
},
{
string: navigator.vendor,
subString: "Apple",
identity: "Safari",
versionSearch: "Version"
},
{
prop: window.opera,
identity: "Opera"
},
{
string: navigator.vendor,
subString: "iCab",
identity: "iCab"
},
{
string: navigator.vendor,
subString: "KDE",
identity: "Konqueror"
},
{
string: navigator.userAgent,
subString: "Firefox",
identity: "Firefox"
},
{
string: navigator.vendor,
subString: "Camino",
identity: "Camino"
},
{ // for newer Netscapes (6+)
string: navigator.userAgent,
subString: "Netscape",
identity: "Netscape"
},
{
string: navigator.userAgent,
subString: "MSIE",
identity: "Explorer",
versionSearch: "MSIE"
},
{
string: navigator.userAgent,
subString: "Gecko",
identity: "Mozilla",
versionSearch: "rv"
},
{ // for older Netscapes (4-)
string: navigator.userAgent,
subString: "Mozilla",
identity: "Netscape",
versionSearch: "Mozilla"
}
],
dataOS : [
{
string: navigator.platform,
subString: "Win",
identity: "Windows"
},
{
string: navigator.platform,
subString: "Mac",
identity: "Mac"
},
{
string: navigator.userAgent,
subString: "iPhone",
identity: "iPhone/iPod"
},
{
string: navigator.platform,
subString: "Linux",
identity: "Linux"
}
]
};
BrowserDetect.init();

File diff suppressed because one or more lines are too long

View file

@ -1,227 +0,0 @@
/* RESETS */
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, tt, var,b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { /* */
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-size: 100%;
vertical-align: baseline;
background: transparent;
}
body { font: 12px Verdana, Geneva, sans-serif; }
@font-face {
font-family: DroidSansMono;
src: url("../fonts/DroidSansMono.eot") /* EOT file for IE */
}
@font-face {
font-family: DroidSansMono;
src: url("../fonts/DroidSansMono.ttf") /* TTF file for CSS3 browsers */
}
p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; }
h1 { font: bold 15pt IntervalLight, sans-serif; }
h2 { font: bold 14pt IntervalLight, sans-serif; }
h1, h2, h3 { color: #444;}
h4, h5, h6 { color: #444;}
h3, h4, h5, h6 {padding:10px 0px 2px 4px;}
.book h1, .chapter h2, .section h2 {
padding-top: 3px;
padding-bottom: 18px;
margin-bottom: 6px;
border-bottom: 1px #CCC solid;
}
p {
font-size: 11px;
line-height: 15px;
color: #444;
/*width: 100%; Removing width so it's not fixed or floated */
padding: 0px 10px 10px 5px; /* changed padding-right from 5 to 10 and padding-left from 10px to 5px */
*padding: 5px 5px 10px 0px; /* IE7 hack */
}
/* Page layout */
div#content
{
padding: 1em 2em 1em 2em;
}
.navfooter
{
margin-top: 2em;
}
.navfooter table td
{
background-color: white;
}
.mediaobject img
{
margin: 0.5em 0.5em 0.5em 0.5em;
vertical-align: middle;
max-width: 100%;
}
.mediaobject img[align="left"]
{
margin-right: 2em;
}
.informalfigure { margin: 6px; }
/* "Layout" tables should not have borders */
#content table, #content table td { border: none; }
/* Generic tables */
#content .table table th, #content .informaltable table th { background-color: #585858 }
#content .table table, #content .informaltable table
{
border-collapse:collapse;
border: none;
}
#content .table tr:nth-child(odd), #content .informaltable tr:nth-child(odd)
{
background-color: #f2f2f2;
}
#content .table tr:nth-child(even), #content .informaltable tr:nth-child(even)
{
background-color: #d9d9d9;
}
#content .table table td, #content .informaltable table td,
#content .table table th, #content .informaltable table th
{
border: 1px solid #A7A9AB;
}
#content .footnotes tr td
{
background-color:white;
border: none;
}
/* Admonitions */
div.note, div.caution, div.important, div.tip, div.warning
{
border: solid 1px #AAA;
background: #ededed;
padding: 0.5em 1em 0.5em 1em;
margin: 1em 0em 1em 0em;
}
div.note *, div.caution *, div.important *, div.tip *, div.warning * {
background: inherit !important;
color: inherit !important;
border: none;
}
/* Program listing */
.programlisting
{
/*width: auto;*/
border: solid 1px #AAA;
background: #ededed;
padding: 1em;
margin-top: 1em;
margin-bottom: 1em;
overflow:hidden;
font-family: DroidSansMono, Consolas
}
/* Lists */
ul
{
list-style: square outside;
margin: 0 0 0 1em;
padding: 0 0 0 0;
}
ul.square
{
list-style: square outside;
margin: 0 0 0 1em;
padding: 0 0 0 0;
}
ul.circle, ul[type=disk]
{
list-style: disc outside;
margin: 0 0 0 1em;
padding: 0 0 0 0;
}
ol
{
list-style-type: decimal;
list-style: decimal;
margin: 0 0 0 2.8em;
padding: 0 0 1em 0;
}
li
{
padding-bottom: .3em;
/*list-style: square;*/
}
li p
{
margin: 0 0 .25em 0;
padding: 0 0 0 0;
}
ul ul.circle
{
margin-top: .3em;
}
ul ul.square
{
margin-top: .3em;
}
ul, ol { margin-left: 3em; }
/*
dl dt { padding: 0px 10px 0px 5px;}
*/
div.orderedlist-collapsed
{
margin: 1em 0 0 1em;
padding: 0 0 1em 0;
font-size:smaller;
}
div.orderedlist-collapsed span.listitem
{
margin-right: 1em;
}
.variablelist dt
{
font-weight: bold;
color: black;
}
dl.toc
{
margin-left: 2em;
margin-bottom: 2em;
}
.guibutton, .guimenu, .guimenuitem, .guisubmenu
{
font-family: Arial, Verdana, Geneva, sans-serif;
color: black;
font-weight: bold;
}
.disclaimer
{
font-size: 6pt;
}

View file

@ -1,154 +0,0 @@
/*
Variable Grid System (Fluid Version).
Learn more ~ http://www.spry-soft.com/grids/
Based on 960 Grid System - http://960.gs/ & 960 Fluid - http://www.designinfluences.com/
Licensed under GPL and MIT.
*/
/* Containers
----------------------------------------------------------------------------------------------------*/
.container_3 {
width: 92%;
margin-left: 4%;
margin-right: 4%;
}
/* Grid >> 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;
}

View file

@ -1,59 +0,0 @@
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;
}

View file

@ -1,493 +0,0 @@
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;
}

View file

@ -1,28 +0,0 @@
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;
}

View file

@ -1 +0,0 @@
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}

View file

@ -1 +0,0 @@
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}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 703 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

File diff suppressed because one or more lines are too long

View file

@ -1,93 +0,0 @@
/**
* 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;
}
};

View file

@ -1,418 +0,0 @@
/*!
* 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;f<c.length;f++)b.options[c[f][0]]&&c[f][1].apply(b.element,a)}},contains:function(b,c){return document.compareDocumentPosition?b.compareDocumentPosition(c)&16:b!==c&&b.contains(c)},hasScroll:function(c,a){if("hidden"===b(c).css("overflow"))return!1;var d=a&&"left"===a?"scrollLeft":"scrollTop",f=!1;if(0<c[d])return!0;c[d]=1;f=0<c[d];c[d]=0;return f},isOverAxis:function(b,c,a){return b>c&&b<c+a},isOver:function(c,a,d,f,i,j){return b.ui.isOverAxis(c,d,i)&&b.ui.isOverAxis(a,f,j)}}))})(jQuery);
(function(b,a){if(b.cleanData){var c=b.cleanData;b.cleanData=function(a){for(var d=0,e;null!=(e=a[d]);d++)b(e).triggerHandler("remove");c(a)}}else{var d=b.fn.remove;b.fn.remove=function(c,a){return this.each(function(){a||(!c||b.filter(c,[this]).length)&&b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return d.call(b(this),c,a)})}}b.widget=function(c,a,d){var f=c.split(".")[0],i,c=c.split(".")[1];i=f+"-"+c;d||(d=a,a=b.Widget);b.expr[":"][i]=function(f){return!!b.data(f,
c)};b[f]=b[f]||{};b[f][c]=function(b,f){arguments.length&&this._createWidget(b,f)};a=new a;a.options=b.extend(!0,{},a.options);b[f][c].prototype=b.extend(!0,a,{namespace:f,widgetName:c,widgetEventPrefix:b[f][c].prototype.widgetEventPrefix||c,widgetBaseClass:i},d);b.widget.bridge(c,b[f][c])};b.widget.bridge=function(c,d){b.fn[c]=function(e){var f="string"===typeof e,i=Array.prototype.slice.call(arguments,1),j=this,e=!f&&i.length?b.extend.apply(null,[!0,e].concat(i)):e;if(f&&"_"===e.charAt(0))return j;
f?this.each(function(){var f=b.data(this,c),d=f&&b.isFunction(f[e])?f[e].apply(f,i):f;if(d!==f&&d!==a)return j=d,!1}):this.each(function(){var f=b.data(this,c);f?f.option(e||{})._init():b.data(this,c,new d(e,this))});return j}};b.Widget=function(b,c){arguments.length&&this._createWidget(b,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(c,a){b.data(a,this.widgetName,this);this.element=b(a);this.options=b.extend(!0,{},this.options,this._getCreateOptions(),
c);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},
option:function(c,d){var e=c;if(0===arguments.length)return b.extend({},this.options);if("string"===typeof c){if(d===a)return this.options[c];e={};e[c]=d}this._setOptions(e);return this},_setOptions:function(c){var a=this;b.each(c,function(b,f){a._setOption(b,f)});return this},_setOption:function(b,c){this.options[b]=c;"disabled"===b&&this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",
!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(c,a,d){var f=this.options[c],a=b.Event(a);a.type=(c===this.widgetEventPrefix?c:this.widgetEventPrefix+c).toLowerCase();d=d||{};if(a.originalEvent)for(var c=b.event.props.length,i;c;)i=b.event.props[--c],a[i]=a.originalEvent[i];this.element.trigger(a,d);return!(b.isFunction(f)&&!1===f.call(this.element[0],a,d)||a.isDefaultPrevented())}}})(jQuery);
(function(b){var a=!1;b(document).mousedown(function(){a=!1});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var c=this;this.element.bind("mousedown."+this.widgetName,function(b){return c._mouseDown(b)}).bind("click."+this.widgetName,function(a){if(!0===b.data(a.target,c.widgetName+".preventClickEvent"))return b.removeData(a.target,c.widgetName+".preventClickEvent"),a.stopImmediatePropagation(),!1});this.started=!1},_mouseDestroy:function(){this.element.unbind("."+
this.widgetName)},_mouseDown:function(c){if(!a){this._mouseStarted&&this._mouseUp(c);this._mouseDownEvent=c;var d=this,g=1==c.which,h="string"==typeof this.options.cancel?b(c.target).closest(this.options.cancel).length:!1;if(!g||h||!this._mouseCapture(c))return!0;this.mouseDelayMet=!this.options.delay;this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c)&&(this._mouseStarted=!1!==this._mouseStart(c),
!this._mouseStarted))return c.preventDefault(),!0;!0===b.data(c.target,this.widgetName+".preventClickEvent")&&b.removeData(c.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(b){return d._mouseMove(b)};this._mouseUpDelegate=function(b){return d._mouseUp(b)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.preventDefault();return a=!0}},_mouseMove:function(c){if(b.browser.msie&&!(9<=document.documentMode)&&
!c.button)return this._mouseUp(c);if(this._mouseStarted)return this._mouseDrag(c),c.preventDefault();this._mouseDistanceMet(c)&&this._mouseDelayMet(c)&&((this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,c))?this._mouseDrag(c):this._mouseUp(c));return!this._mouseStarted},_mouseUp:function(c){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);this._mouseStarted&&(this._mouseStarted=!1,c.target==this._mouseDownEvent.target&&
b.data(c.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(c));return!1},_mouseDistanceMet:function(b){return Math.max(Math.abs(this._mouseDownEvent.pageX-b.pageX),Math.abs(this._mouseDownEvent.pageY-b.pageY))>=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=
0<f?c.left-f:Math.max(c.left-a.collisionPosition.left,c.left)},top:function(c,a){var f=b(window),f=a.collisionPosition.top+a.collisionHeight-f.height()-f.scrollTop();c.top=0<f?c.top-f:Math.max(c.top-a.collisionPosition.top,c.top)}},flip:{left:function(c,a){if("center"!==a.at[0]){var f=b(window),f=a.collisionPosition.left+a.collisionWidth-f.width()-f.scrollLeft(),d="left"===a.my[0]?-a.elemWidth:"right"===a.my[0]?a.elemWidth:0,g="left"===a.at[0]?a.targetWidth:-a.targetWidth,k=-2*a.offset[0];c.left+=
0>a.collisionPosition.left?d+g+k:0<f?d+g+k:0}},top:function(c,a){if("center"!==a.at[1]){var f=b(window),f=a.collisionPosition.top+a.collisionHeight-f.height()-f.scrollTop(),d="top"===a.my[1]?-a.elemHeight:"bottom"===a.my[1]?a.elemHeight:0,g="top"===a.at[1]?a.targetHeight:-a.targetHeight,k=-2*a.offset[1];c.top+=0>a.collisionPosition.top?d+g+k:0<f?d+g+k:0}}}};b.offset.setOffset||(b.offset.setOffset=function(c,a){/static/.test(b.curCSS(c,"position"))&&(c.style.position="relative");var f=b(c),d=f.offset(),
g=parseInt(b.curCSS(c,"top",!0),10)||0,k=parseInt(b.curCSS(c,"left",!0),10)||0,d={top:a.top-d.top+g,left:a.left-d.left+k};"using"in a?a.using.call(c,d):f.css(d)},b.fn.offset=function(c){var a=this[0];return!a||!a.ownerDocument?null:c?this.each(function(){b.offset.setOffset(this,c)}):g.call(this)})})(jQuery);
(function(b){b.widget("ui.draggable",b.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){"original"==this.options.helper&&!/^(?:r|a|f)/.test(this.element.css("position"))&&
(this.element[0].style.position="relative");this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable"))return this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy(),this},_mouseCapture:function(a){var c=this.options;if(this.helper||c.disabled||b(a.target).is(".ui-resizable-handle"))return!1;
this.handle=this._getHandle(a);if(!this.handle)return!1;b(!0===c.iframeFix?"iframe":c.iframeFix).each(function(){b('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').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.left<f[0]&&(h=f[0]+this.offset.click.left),a.pageY-this.offset.click.top<f[1]&&(e=f[1]+this.offset.click.top),a.pageX-this.offset.click.left>f[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.top<f[1]||e-this.offset.click.top>f[3])?e:!(e-this.offset.click.top<f[1])?e-c.grid[1]:e+c.grid[1]:e,h=c.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/c.grid[0])*c.grid[0]:this.originalPageX,h=f?!(h-this.offset.click.left<f[0]||h-this.offset.click.left>f[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<d.scrollSensitivity?c.scrollParent[0].scrollTop=g=c.scrollParent[0].scrollTop+d.scrollSpeed:a.pageY-c.overflowOffset.top<
d.scrollSensitivity&&(c.scrollParent[0].scrollTop=g=c.scrollParent[0].scrollTop-d.scrollSpeed);if(!d.axis||"y"!=d.axis)c.overflowOffset.left+c.scrollParent[0].offsetWidth-a.pageX<d.scrollSensitivity?c.scrollParent[0].scrollLeft=g=c.scrollParent[0].scrollLeft+d.scrollSpeed:a.pageX-c.overflowOffset.left<d.scrollSensitivity&&(c.scrollParent[0].scrollLeft=g=c.scrollParent[0].scrollLeft-d.scrollSpeed)}else{if(!d.axis||"x"!=d.axis)a.pageY-b(document).scrollTop()<d.scrollSensitivity?g=b(document).scrollTop(b(document).scrollTop()-
d.scrollSpeed):b(window).height()-(a.pageY-b(document).scrollTop())<d.scrollSensitivity&&(g=b(document).scrollTop(b(document).scrollTop()+d.scrollSpeed));if(!d.axis||"y"!=d.axis)a.pageX-b(document).scrollLeft()<d.scrollSensitivity?g=b(document).scrollLeft(b(document).scrollLeft()-d.scrollSpeed):b(window).width()-(a.pageX-b(document).scrollLeft())<d.scrollSensitivity&&(g=b(document).scrollLeft(b(document).scrollLeft()+d.scrollSpeed))}!1!==g&&(b.ui.ddmanager&&!d.dropBehaviour)&&b.ui.ddmanager.prepareOffsets(c,
a)}});b.ui.plugin.add("draggable","snap",{start:function(){var a=b(this).data("draggable"),c=a.options;a.snapElements=[];b(c.snap.constructor!=String?c.snap.items||":data(draggable)":c.snap).each(function(){var c=b(this),g=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,width:c.outerWidth(),height:c.outerHeight(),top:g.top,left:g.left})})},drag:function(a,c){for(var d=b(this).data("draggable"),g=d.options,h=g.snapTolerance,e=c.offset.left,f=e+d.helperProportions.width,i=c.offset.top,
j=i+d.helperProportions.height,k=d.snapElements.length-1;0<=k;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,p=d.snapElements[k].top,n=p+d.snapElements[k].height;if(l-h<e&&e<m+h&&p-h<i&&i<n+h||l-h<e&&e<m+h&&p-h<j&&j<n+h||l-h<f&&f<m+h&&p-h<i&&i<n+h||l-h<f&&f<m+h&&p-h<j&&j<n+h){if("inner"!=g.snapMode){var q=Math.abs(p-j)<=h,o=Math.abs(n-i)<=h,w=Math.abs(l-f)<=h,r=Math.abs(m-e)<=h;q&&(c.position.top=d._convertPositionTo("relative",{top:p-d.helperProportions.height,left:0}).top-d.margins.top);
o&&(c.position.top=d._convertPositionTo("relative",{top:n,left:0}).top-d.margins.top);w&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l-d.helperProportions.width}).left-d.margins.left);r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m}).left-d.margins.left)}var u=q||o||w||r;if("outer"!=g.snapMode&&(q=Math.abs(p-i)<=h,o=Math.abs(n-j)<=h,w=Math.abs(l-e)<=h,r=Math.abs(m-f)<=h,q&&(c.position.top=d._convertPositionTo("relative",{top:p,left:0}).top-d.margins.top),o&&(c.position.top=
d._convertPositionTo("relative",{top:n-d.helperProportions.height,left:0}).top-d.margins.top),w&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l}).left-d.margins.left),r))c.position.left=d._convertPositionTo("relative",{top:0,left:m-d.helperProportions.width}).left-d.margins.left;!d.snapElements[k].snapping&&(q||o||w||r||u)&&d.options.snap.snap&&d.options.snap.snap.call(d.element,a,b.extend(d._uiHash(),{snapItem:d.snapElements[k].item}));d.snapElements[k].snapping=q||o||w||r||u}else d.snapElements[k].snapping&&
d.options.snap.release&&d.options.snap.release.call(d.element,a,b.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=!1}}});b.ui.plugin.add("draggable","stack",{start:function(){var a=b(this).data("draggable").options,a=b.makeArray(b(a.stack)).sort(function(c,a){return(parseInt(b(c).css("zIndex"),10)||0)-(parseInt(b(a).css("zIndex"),10)||0)});if(a.length){var c=parseInt(a[0].style.zIndex)||0;b(a).each(function(b){this.style.zIndex=c+b});this[0].style.zIndex=c+a.length}}});
b.ui.plugin.add("draggable","zIndex",{start:function(a,c){var d=b(c.helper),g=b(this).data("draggable").options;d.css("zIndex")&&(g._zIndex=d.css("zIndex"));d.css("zIndex",g.zIndex)},stop:function(a,c){var d=b(this).data("draggable").options;d._zIndex&&b(c.helper).css("zIndex",d._zIndex)}})})(jQuery);
(function(b){b.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,c=a.accept;this.isover=0;this.isout=1;this.accept=b.isFunction(c)?c:function(b){return b.is(c)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};b.ui.ddmanager.droppables[a.scope]=b.ui.ddmanager.droppables[a.scope]||[];b.ui.ddmanager.droppables[a.scope].push(this);
a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=b.ui.ddmanager.droppables[this.options.scope],c=0;c<a.length;c++)a[c]==this&&a.splice(c,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,c){"accept"==a&&(this.accept=b.isFunction(c)?c:function(b){return b.is(c)});b.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var c=b.ui.ddmanager.current;this.options.activeClass&&
this.element.addClass(this.options.activeClass);c&&this._trigger("activate",a,this.ui(c))},_deactivate:function(a){var c=b.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);c&&this._trigger("deactivate",a,this.ui(c))},_over:function(a){var c=b.ui.ddmanager.current;if(c&&(c.currentItem||c.element)[0]!=this.element[0])if(this.accept.call(this.element[0],c.currentItem||c.element))this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",
a,this.ui(c))},_out:function(a){var c=b.ui.ddmanager.current;if(c&&(c.currentItem||c.element)[0]!=this.element[0])if(this.accept.call(this.element[0],c.currentItem||c.element))this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",a,this.ui(c))},_drop:function(a,c){var d=c||b.ui.ddmanager.current;if(!d||(d.currentItem||d.element)[0]==this.element[0])return!1;var g=!1;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var c=b.data(this,
"droppable");if(c.options.greedy&&!c.options.disabled&&c.options.scope==d.options.scope&&c.accept.call(c.element[0],d.currentItem||d.element)&&b.ui.intersect(d,b.extend(c,{offset:c.element.offset()}),c.options.tolerance))return g=!0,!1});return g?!1:this.accept.call(this.element[0],d.currentItem||d.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",a,this.ui(d)),this.element):
!1},ui:function(b){return{draggable:b.currentItem||b.element,helper:b.helper,position:b.position,offset:b.positionAbs}}});b.extend(b.ui.droppable,{version:"1.8.14"});b.ui.intersect=function(a,c,d){if(!c.offset)return!1;var g=(a.positionAbs||a.position.absolute).left,h=g+a.helperProportions.width,e=(a.positionAbs||a.position.absolute).top,f=e+a.helperProportions.height,i=c.offset.left,j=i+c.proportions.width,k=c.offset.top,l=k+c.proportions.height;switch(d){case "fit":return i<=g&&h<=j&&k<=e&&f<=l;
case "intersect":return i<g+a.helperProportions.width/2&&h-a.helperProportions.width/2<j&&k<e+a.helperProportions.height/2&&f-a.helperProportions.height/2<l;case "pointer":return b.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,k,i,c.proportions.height,c.proportions.width);case "touch":return(e>=k&&e<=l||f>=k&&f<=l||e<k&&f>l)&&(g>=i&&g<=j||h>=i&&h<=j||g<i&&h>j);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<d.length;e++)if(!(d[e].options.disabled||a&&!d[e].accept.call(d[e].element[0],a.currentItem||a.element))){for(var f=0;f<h.length;f++)if(h[f]==d[e].element[0]){d[e].proportions.height=0;continue a}d[e].visible="none"!=d[e].element.css("display");d[e].visible&&("mousedown"==
g&&d[e]._activate.call(d[e],c),d[e].offset=d[e].element.offset(),d[e].proportions={width:d[e].element[0].offsetWidth,height:d[e].element[0].offsetHeight})}},drop:function(a,c){var d=!1;b.each(b.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options&&(!this.options.disabled&&(this.visible&&b.ui.intersect(a,this,this.options.tolerance))&&(d=d||this._drop.call(this,c)),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||a.element)))this.isout=1,this.isover=
0,this._deactivate.call(this,c)});return d},dragStart:function(a,c){a.element.parentsUntil("body").bind("scroll.droppable",function(){a.options.refreshPositions||b.ui.ddmanager.prepareOffsets(a,c)})},drag:function(a,c){a.options.refreshPositions&&b.ui.ddmanager.prepareOffsets(a,c);b.each(b.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var d=b.ui.intersect(a,this,this.options.tolerance);if(d=!d&&1==this.isover?"isout":d&&0==this.isover?
"isover":null){var g;if(this.options.greedy){var h=this.element.parents(":data(droppable):eq(0)");h.length&&(g=b.data(h[0],"droppable"),g.greedyChild="isover"==d?1:0)}g&&"isover"==d&&(g.isover=0,g.isout=1,g._out.call(g,c));this[d]=1;this["isout"==d?"isover":"isout"]=0;this["isover"==d?"_over":"_out"].call(this,c);g&&"isout"==d&&(g.isout=0,g.isover=1,g._over.call(g,c))}}})},dragStop:function(a,c){a.element.parentsUntil("body").unbind("scroll.droppable");a.options.refreshPositions||b.ui.ddmanager.prepareOffsets(a,
c)}}})(jQuery);
(function(b){b.widget("ui.resizable",b.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var c=this,a=this.options;this.element.addClass("ui-resizable");b.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],
_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(/relative/.test(this.element.css("position"))&&b.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"}),this.element.wrap(b('<div class="ui-wrapper" style="overflow: hidden;"></div>').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<h.length;e++){var f=b.trim(h[e]),i=b('<div class="ui-resizable-handle ui-resizable-'+f+'"></div>');/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),h<a.maxWidth&&(a.maxWidth=h),f<a.maxHeight)a.maxHeight=f;this._vBoundaries=a},_updateCache:function(b){this.offset=this.helper.offset();c(b.left)&&(this.position.left=b.left);c(b.top)&&(this.position.top=b.top);c(b.height)&&(this.size.height=b.height);c(b.width)&&(this.size.width=b.width)},_updateRatio:function(b){var a=
this.position,h=this.size,e=this.axis;c(b.height)?b.width=b.height*this.aspectRatio:c(b.width)&&(b.height=b.width/this.aspectRatio);"sw"==e&&(b.left=a.left+(h.width-b.width),b.top=null);"nw"==e&&(b.top=a.top+(h.height-b.height),b.left=a.left+(h.width-b.width));return b},_respectSize:function(b){var a=this._vBoundaries,h=this.axis,e=c(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=c(b.height)&&a.maxHeight&&a.maxHeight<b.height,i=c(b.width)&&a.minWidth&&a.minWidth>b.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<this._proportionallyResizeElements.length;a++){var h=this._proportionallyResizeElements[a];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],f=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=b.map(e,function(b,c){var a=parseInt(b,10)||0,d=parseInt(f[c],10)||0;return a+d})}if(!b.browser.msie||!b(c).is(":hidden")&&!b(c).parents(":hidden").length)h.css({height:c.height()-
this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var c=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||b('<div style="overflow:hidden;"></div>');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("<div class='ui-selectable-helper'></div>")},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.right<g||i.top>f||i.bottom<h):d.tolerance=="fit"&&(k=i.left>g&&i.right<e&&i.top>h&&i.bottom<f);if(k){if(i.selected){i.$element.removeClass("ui-selected");i.selected=false}if(i.unselecting){i.$element.removeClass("ui-unselecting");i.unselecting=false}if(!i.selecting){i.$element.addClass("ui-selecting");
i.selecting=true;c._trigger("selecting",a,{selecting:i.element})}}else{if(i.selecting)if(a.metaKey&&i.startselected){i.$element.removeClass("ui-selecting");i.selecting=false;i.$element.addClass("ui-selected");i.selected=true}else{i.$element.removeClass("ui-selecting");i.selecting=false;if(i.startselected){i.$element.addClass("ui-unselecting");i.unselecting=true}c._trigger("unselecting",a,{unselecting:i.element})}if(i.selected&&!a.metaKey&&!i.startselected){i.$element.removeClass("ui-selected");i.selected=
false;i.$element.addClass("ui-unselecting");i.unselecting=true;c._trigger("unselecting",a,{unselecting:i.element})}}}});return!1}},_mouseStop:function(a){var c=this;this.dragged=!1;b(".ui-unselecting",this.element[0]).each(function(){var d=b.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=!1;d.startselected=!1;c._trigger("unselected",a,{unselected:d.element})});b(".ui-selecting",this.element[0]).each(function(){var d=b.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");
d.selecting=!1;d.selected=!0;d.startselected=!0;c._trigger("selected",a,{selected:d.element})});this._trigger("stop",a);this.helper.remove();return!1}});b.extend(b.ui.selectable,{version:"1.8.14"})})(jQuery);
(function(b){b.widget("ui.sortable",b.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",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.pageY<c.scrollSensitivity?this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop+c.scrollSpeed:a.pageY-this.overflowOffset.top<c.scrollSensitivity&&(this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop-c.scrollSpeed),this.overflowOffset.left+
this.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)?this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft+c.scrollSpeed:a.pageX-this.overflowOffset.left<c.scrollSensitivity&&(this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft-c.scrollSpeed):(a.pageY-b(document).scrollTop()<c.scrollSensitivity?d=b(document).scrollTop(b(document).scrollTop()-c.scrollSpeed):b(window).height()-(a.pageY-b(document).scrollTop())<c.scrollSensitivity&&(d=b(document).scrollTop(b(document).scrollTop()+
c.scrollSpeed)),a.pageX-b(document).scrollLeft()<c.scrollSensitivity?d=b(document).scrollLeft(b(document).scrollLeft()-c.scrollSpeed):b(window).width()-(a.pageX-b(document).scrollLeft())<c.scrollSensitivity&&(d=b(document).scrollLeft(b(document).scrollLeft()+c.scrollSpeed)));!1!==d&&(b.ui.ddmanager&&!c.dropBehaviour)&&b.ui.ddmanager.prepareOffsets(this,a)}this.positionAbs=this._convertPositionTo("absolute");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";for(c=this.items.length-1;0<=c;c--){var d=this.items[c],g=d.item[0],h=this._intersectsWithPointer(d);if(h&&g!=this.currentItem[0]&&this.placeholder[1==h?"next":"prev"]()[0]!=g&&!b.ui.contains(this.placeholder[0],g)&&("semi-dynamic"==this.options.type?!b.ui.contains(this.element[0],g):1)){this.direction=1==h?"down":"up";if("pointer"==this.options.tolerance||this._intersectsWithSides(d))this._rearrange(a,
d);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);b.ui.ddmanager&&b.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return!1},_mouseStop:function(a,c){if(a){b.ui.ddmanager&&!this.options.dropBehaviour&&b.ui.ddmanager.drop(this,a);if(this.options.revert){var d=this,g=d.placeholder.offset();d.reverting=!0;b(this.helper).animate({left:g.left-this.offset.parent.left-d.margins.left+(this.offsetParent[0]==document.body?
0:this.offsetParent[0].scrollLeft),top:g.top-this.offset.parent.top-d.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){d._clear(a)})}else this._clear(a,c);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null});"original"==this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var a=this.containers.length-1;0<=a;a--)this.containers[a]._trigger("deactivate",
null,this._uiHash(this)),this.containers[a].containerCache.over&&(this.containers[a]._trigger("out",null,this._uiHash(this)),this.containers[a].containerCache.over=0)}this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!=this.options.helper&&(this.helper&&this.helper[0].parentNode)&&this.helper.remove(),b.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?b(this.domPosition.prev).after(this.currentItem):
b(this.domPosition.parent).prepend(this.currentItem));return this},serialize:function(a){var c=this._getItemsAsjQuery(a&&a.connected),d=[],a=a||{};b(c).each(function(){var c=(b(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);c&&d.push((a.key||c[1]+"[]")+"="+(a.key&&a.expression?c[1]:c[2]))});!d.length&&a.key&&d.push(a.key+"=");return d.join("&")},toArray:function(a){var c=this._getItemsAsjQuery(a&&a.connected),d=[],a=a||{};c.each(function(){d.push(b(a.item||this).attr(a.attribute||
"id")||"")});return d},_intersectsWith:function(b){var c=this.positionAbs.left,d=c+this.helperProportions.width,g=this.positionAbs.top,h=g+this.helperProportions.height,e=b.left,f=e+b.width,i=b.top,j=i+b.height,k=this.offset.click.top,l=this.offset.click.left;return"pointer"==this.options.tolerance||this.options.forcePointerForContainers||"pointer"!=this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>b[this.floating?"width":"height"]?g+k>i&&g+k<j&&c+l>e&&c+l<f:e<c+this.helperProportions.width/
2&&d-this.helperProportions.width/2<f&&i<g+this.helperProportions.height/2&&h-this.helperProportions.height/2<j},_intersectsWithPointer:function(a){var c=b.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height),a=b.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width),c=c&&a,a=this._getDragVerticalDirection(),d=this._getDragHorizontalDirection();return!c?!1:this.floating?d&&"right"==d||"down"==a?2:1:a&&("down"==a?2:1)},_intersectsWithSides:function(a){var c=
b.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height),a=b.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width),d=this._getDragVerticalDirection(),g=this._getDragHorizontalDirection();return this.floating&&g?"right"==g&&a||"left"==g&&!a:d&&("down"==d&&c||"up"==d&&!c)},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return 0!=b&&(0<b?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-
this.lastPositionAbs.left;return 0!=b&&(0<b?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions();return this},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(a){var c=[],d=[],g=this._connectWith();if(g&&a)for(a=g.length-1;0<=a;a--)for(var h=b(g[a]),e=h.length-1;0<=e;e--){var f=b.data(h[e],"sortable");f&&(f!=this&&!f.options.disabled)&&d.push([b.isFunction(f.options.items)?f.options.items.call(f.element):
b(f.options.items,f.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),f])}d.push([b.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):b(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=d.length-1;0<=a;a--)d[a][0].each(function(){c.push(this)});return b(c)},_removeCurrentsFromItems:function(){for(var b=this.currentItem.find(":data(sortable-item)"),c=0;c<this.items.length;c++)for(var d=
0;d<b.length;d++)b[d]==this.items[c].item[0]&&this.items.splice(c,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var c=this.items,d=[[b.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):b(this.options.items,this.element),this]],g=this._connectWith();if(g)for(var h=g.length-1;0<=h;h--)for(var e=b(g[h]),f=e.length-1;0<=f;f--){var i=b.data(e[f],"sortable");i&&(i!=this&&!i.options.disabled)&&(d.push([b.isFunction(i.options.items)?i.options.items.call(i.element[0],
a,{item:this.currentItem}):b(i.options.items,i.element),i]),this.containers.push(i))}for(h=d.length-1;0<=h;h--){a=d[h][1];g=d[h][0];f=0;for(e=g.length;f<e;f++)i=b(g[f]),i.data("sortable-item",a),c.push({item:i,instance:a,width:0,height:0,left:0,top:0})}},refreshPositions:function(a){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());for(var c=this.items.length-1;0<=c;c--){var d=this.items[c];if(!(d.instance!=this.currentContainer&&this.currentContainer&&d.item[0]!=this.currentItem[0])){var g=
this.options.toleranceElement?b(this.options.toleranceElement,d.item):d.item;a||(d.width=g.outerWidth(),d.height=g.outerHeight());g=g.offset();d.left=g.left;d.top=g.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(c=this.containers.length-1;0<=c;c--)g=this.containers[c].element.offset(),this.containers[c].containerCache.left=g.left,this.containers[c].containerCache.top=g.top,this.containers[c].containerCache.width=this.containers[c].element.outerWidth(),
this.containers[c].containerCache.height=this.containers[c].element.outerHeight();return this},_createPlaceholder:function(a){var c=a||this,d=c.options;if(!d.placeholder||d.placeholder.constructor==String){var g=d.placeholder;d.placeholder={element:function(){var a=b(document.createElement(c.currentItem[0].nodeName)).addClass(g||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];g||(a.style.visibility="hidden");return a},update:function(b,a){if(!g||d.forcePlaceholderSize)a.height()||
a.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10)),a.width()||a.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||0,10))}}}c.placeholder=b(d.placeholder.element.call(c.element,c.currentItem));c.currentItem.after(c.placeholder);d.placeholder.update(c,c.placeholder)},_contactContainers:function(a){for(var c=null,d=null,g=this.containers.length-
1;0<=g;g--)if(!b.ui.contains(this.currentItem[0],this.containers[g].element[0]))if(this._intersectsWith(this.containers[g].containerCache)){if(!c||!b.ui.contains(this.containers[g].element[0],c.element[0]))c=this.containers[g],d=g}else this.containers[g].containerCache.over&&(this.containers[g]._trigger("out",a,this._uiHash(this)),this.containers[g].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[d]._trigger("over",a,this._uiHash(this)),this.containers[d].containerCache.over=
1;else if(this.currentContainer!=this.containers[d]){for(var c=1E4,g=null,h=this.positionAbs[this.containers[d].floating?"left":"top"],e=this.items.length-1;0<=e;e--)if(b.ui.contains(this.containers[d].element[0],this.items[e].item[0])){var f=this.items[e][this.containers[d].floating?"left":"top"];Math.abs(f-h)<c&&(c=Math.abs(f-h),g=this.items[e])}if(g||this.options.dropOnEmpty)this.currentContainer=this.containers[d],g?this._rearrange(a,g,null,!0):this._rearrange(a,null,this.containers[d].element,
!0),this._trigger("change",a,this._uiHash()),this.containers[d]._trigger("change",a,this._uiHash(this)),this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[d]._trigger("over",a,this._uiHash(this)),this.containers[d].containerCache.over=1}},_createHelper:function(a){var c=this.options,a=b.isFunction(c.helper)?b(c.helper.apply(this.element[0],[a,this.currentItem])):"clone"==c.helper?this.currentItem.clone():this.currentItem;a.parents("body").length||b("parent"!=c.appendTo?
c.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);a[0]==this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")});(""==a[0].style.width||c.forceHelperSize)&&a.width(this.currentItem.width());(""==a[0].style.height||c.forceHelperSize)&&a.height(this.currentItem.height());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.currentItem.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.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),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=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,b("document"==a.containment?document:window).width()-this.helperProportions.width-this.margins.left,(b("document"==a.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-
this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var c=b(a.containment)[0],a=b(a.containment).offset(),d="hidden"!=b(c).css("overflow");this.containment=[a.left+(parseInt(b(c).css("borderLeftWidth"),10)||0)+(parseInt(b(c).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(b(c).css("borderTopWidth"),10)||0)+(parseInt(b(c).css("paddingTop"),10)||0)-this.margins.top,a.left+(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,a.top+(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]}},_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&&"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&&"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);"relative"==this.cssPosition&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])&&(this.offset.relative=this._getRelativeOffset());var h=a.pageX,e=a.pageY;if(this.originalPosition&&(this.containment&&(a.pageX-this.offset.click.left<this.containment[0]&&(h=this.containment[0]+this.offset.click.left),
a.pageY-this.offset.click.top<this.containment[1]&&(e=this.containment[1]+this.offset.click.top),a.pageX-this.offset.click.left>this.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.top<this.containment[1]||e-this.offset.click.top>this.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.left<this.containment[0]||h-this.offset.click.left>this.containment[2])?h:!(h-this.offset.click.left<this.containment[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&&"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&&"fixed"==this.cssPosition?0:"fixed"==this.cssPosition?-this.scrollParent.scrollLeft():g?0:d.scrollLeft())}},_rearrange:function(b,c,d,g){d?d[0].appendChild(this.placeholder[0]):c.item[0].parentNode.insertBefore(this.placeholder[0],"down"==this.direction?c.item[0]:c.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var h=this,e=this.counter;window.setTimeout(function(){e==
h.counter&&h.refreshPositions(!g)},0)},_clear:function(a,c){this.reverting=!1;var d=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var g in this._storedCSS)if("auto"==this._storedCSS[g]||"static"==this._storedCSS[g])this._storedCSS[g]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!c&&d.push(function(b){this._trigger("receive",
b,this._uiHash(this.fromOutside))});(this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!c&&d.push(function(b){this._trigger("update",b,this._uiHash())});if(!b.ui.contains(this.element[0],this.currentItem[0])){c||d.push(function(b){this._trigger("remove",b,this._uiHash())});for(g=this.containers.length-1;0<=g;g--)b.ui.contains(this.containers[g].element[0],this.currentItem[0])&&!c&&(d.push(function(b){return function(a){b._trigger("receive",
a,this._uiHash(this))}}.call(this,this.containers[g])),d.push(function(b){return function(a){b._trigger("update",a,this._uiHash(this))}}.call(this,this.containers[g])))}for(g=this.containers.length-1;0<=g;g--)c||d.push(function(b){return function(a){b._trigger("deactivate",a,this._uiHash(this))}}.call(this,this.containers[g])),this.containers[g].containerCache.over&&(d.push(function(b){return function(a){b._trigger("out",a,this._uiHash(this))}}.call(this,this.containers[g])),this.containers[g].containerCache.over=
0);this._storedCursor&&b("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);this._storedZIndex&&this.helper.css("zIndex","auto"==this._storedZIndex?"":this._storedZIndex);this.dragging=!1;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",a,this._uiHash());for(g=0;g<d.length;g++)d[g].call(this,a);this._trigger("stop",a,this._uiHash())}return!1}c||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!c){for(g=0;g<d.length;g++)d[g].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=!1;return!0},_trigger:function(){!1===b.Widget.prototype._trigger.apply(this,arguments)&&this.cancel()},_uiHash:function(a){var c=a||this;return{helper:c.helper,placeholder:c.placeholder||b([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:a?a.element:null}}});b.extend(b.ui.sortable,
{version:"1.8.14"})})(jQuery);
(function(b){b.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> 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("<span></span>").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("<ul></ul>").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<this.options.minLength)return this.close(a);clearTimeout(this.closing);if(!1!==this._trigger("search",a))return this._search(b)},
_search:function(b){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:b},this.response)},_response:function(b){!this.options.disabled&&b&&b.length?(b=this._normalize(b),this._suggest(b),this._trigger("open")):this.close();this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(b){clearTimeout(this.closing);this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",b))},_change:function(b){this.previous!==
this.element.val()&&this._trigger("change",b,{item:this.selectedItem})},_normalize:function(a){return a.length&&a[0].label&&a[0].value?a:b.map(a,function(a){return"string"===typeof a?{label:a,value:a}:b.extend({label:a.label||a.value,value:a.value||a.label},a)})},_suggest:function(a){var d=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(d,a);this.menu.deactivate();this.menu.refresh();d.show();this._resizeMenu();d.position(b.extend({of:this.element},this.options.position));
this.options.autoFocus&&this.menu.next(new b.Event("mouseover"))},_resizeMenu:function(){var b=this.menu.element;b.outerWidth(Math.max(b.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,d){var g=this;b.each(d,function(b,d){g._renderItem(a,d)})},_renderItem:function(a,d){return b("<li></li>").data("item.autocomplete",d).append(b("<a></a>").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&&-10<a});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(a,g)}else this.activate(a,
this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(".ui-menu-item:last"));else{var c=this.active.offset().top,d=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var a=b(this).offset().top-c+d-b(this).height();return 10>a&&-10<a});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(a,
result)}else this.activate(a,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[b.fn.prop?"prop":"attr"]("scrollHeight")},select:function(b){this._trigger("selected",b,{item:this.active})}})})(jQuery);
(function(b){var a,c,d,g,h=function(){var a=b(this).find(":ui-button");setTimeout(function(){a.button("refresh")},1)},e=function(a){var c=a.name,d=a.form,h=b([]);c&&(h=d?b(d).find("[name='"+c+"']"):b("[name='"+c+"']",a.ownerDocument).filter(function(){return!this.form}));return h};b.widget("ui.button",{options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",h);"boolean"!==typeof this.options.disabled&&
(this.options.disabled=this.element.attr("disabled"));this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var f=this,i=this.options,j="checkbox"===this.type||"radio"===this.type,k="ui-state-hover"+(!j?" ui-state-active":"");null===i.label&&(i.label=this.buttonElement.html());this.element.is(":disabled")&&(i.disabled=!0);this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!i.disabled){b(this).addClass("ui-state-hover");
this===a&&b(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){i.disabled||b(this).removeClass(k)}).bind("click.button",function(b){if(i.disabled){b.preventDefault();b.stopImmediatePropagation()}});this.element.bind("focus.button",function(){f.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){f.buttonElement.removeClass("ui-state-focus")});j&&(this.element.bind("change.button",function(){g||f.refresh()}),this.buttonElement.bind("mousedown.button",function(b){if(!i.disabled){g=
false;c=b.pageX;d=b.pageY}}).bind("mouseup.button",function(b){if(!i.disabled&&(c!==b.pageX||d!==b.pageY))g=true}));"checkbox"===this.type?this.buttonElement.bind("click.button",function(){if(i.disabled||g)return false;b(this).toggleClass("ui-state-active");f.buttonElement.attr("aria-pressed",f.element[0].checked)}):"radio"===this.type?this.buttonElement.bind("click.button",function(){if(i.disabled||g)return false;b(this).addClass("ui-state-active");f.buttonElement.attr("aria-pressed",true);var a=
f.element[0];e(a).not(a).map(function(){return b(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)}):(this.buttonElement.bind("mousedown.button",function(){if(i.disabled)return false;b(this).addClass("ui-state-active");a=this;b(document).one("mouseup",function(){a=null})}).bind("mouseup.button",function(){if(i.disabled)return false;b(this).removeClass("ui-state-active")}).bind("keydown.button",function(a){if(i.disabled)return false;(a.keyCode==b.ui.keyCode.SPACE||
a.keyCode==b.ui.keyCode.ENTER)&&b(this).addClass("ui-state-active")}).bind("keyup.button",function(){b(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(a){a.keyCode===b.ui.keyCode.SPACE&&b(this).click()}));this._setOption("disabled",i.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if("checkbox"===this.type||
"radio"===this.type){var b=this.element.parents().filter(":last"),a="label[for="+this.element.attr("id")+"]";this.buttonElement=b.find(a);this.buttonElement.length||(b=b.length?b.siblings():this.element.siblings(),this.buttonElement=b.filter(a),this.buttonElement.length||(this.buttonElement=b.find(a)));this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=
this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||
this.buttonElement.removeAttr("title");b.Widget.prototype.destroy.call(this)},_setOption:function(a,c){b.Widget.prototype._setOption.apply(this,arguments);"disabled"===a?c?this.element.attr("disabled",!0):this.element.removeAttr("disabled"):this._resetButton()},refresh:function(){var a=this.element.is(":disabled");a!==this.options.disabled&&this._setOption("disabled",a);"radio"===this.type?e(this.element[0]).each(function(){b(this).is(":checked")?b(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
!0):b(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",!1)}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",!0):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",!1))},_resetButton:function(){if("input"===this.type)this.options.label&&this.element.val(this.options.label);else{var a=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
c=b("<span></span>").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("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>"),d.secondary&&a.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>"),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||"&#160;",i=b.ui.dialog.getTitleId(a.element),d=(a.uiDialog=b("<div></div>")).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("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(d),
l=b('<a href="#"></a>').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("<span></span>")).addClass("ui-icon ui-icon-closethick").text(c.closeText).appendTo(l);b("<span></span>").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("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=b("<div></div>").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('<button type="button"></button>').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||"&#160;"))}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()<b.ui.dialog.overlay.maxZ)return!1})},1),b(document).bind("keydown.dialog-overlay",function(c){a.options.closeOnEscape&&(c.keyCode&&c.keyCode===b.ui.keyCode.ESCAPE)&&(a.close(c),c.preventDefault())}),b(window).bind("resize.dialog-overlay",b.ui.dialog.overlay.resize));var c=(this.oldInstances.pop()||b("<div></div>").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<c?b(window).height()+"px":a+"px"):b(document).height()+"px"},width:function(){var a,c;return b.browser.msie?(a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),c=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth),a<c?b(window).width()+"px":a+"px"):b(document).width()+"px"},resize:function(){var a=b([]);b.each(b.ui.dialog.overlay.instances,function(){a=a.add(this)});a.css({width:0,
height:0}).css({width:b.ui.dialog.overlay.width(),height:b.ui.dialog.overlay.height()})}});b.extend(b.ui.dialog.overlay.prototype,{destroy:function(){b.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
(function(b){b.widget("ui.slider",b.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var a=this,c=this.options,d=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),g=c.values&&c.values.length||1,h=[];this._mouseSliding=this._keySliding=!1;this._animateOff=!0;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
this.orientation+" ui-widget ui-widget-content ui-corner-all"+(c.disabled?" ui-slider-disabled ui-disabled":""));this.range=b([]);if(c.range){if(!0===c.range&&(c.values||(c.values=[this._valueMin(),this._valueMin()]),c.values.length&&2!==c.values.length))c.values=[c.values[0],c.values[0]];this.range=b("<div></div>").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<g;e+=1)h.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
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;1<c&&(c=1);0>c&&(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<g))d=g;d!==this.values(c)&&(g=this.values(),g[c]=d,b=this._trigger("slide",b,{handle:this.handles[c],value:d,values:g}),this.values(c?0:1),!1!==b&&this.values(c,d,!0))}else d!==this.value()&&(b=this._trigger("slide",b,{handle:this.handles[c],value:d}),!1!==b&&this.value(d))},_stop: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());this._trigger("stop",b,d)},_change:function(b,c){if(!this._keySliding&&!this._mouseSliding){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());this._trigger("change",b,d)}},value:function(b){if(arguments.length)this.options.value=this._trimAlignValue(b),this._refreshValue(),this._change(null,0);else return this._value()},
values:function(a,c){var d,g,h;if(1<arguments.length)this.options.values[a]=this._trimAlignValue(c),this._refreshValue(),this._change(null,a);else if(arguments.length)if(b.isArray(arguments[0])){d=this.options.values;g=arguments[0];for(h=0;h<d.length;h+=1)d[h]=this._trimAlignValue(g[h]),this._change(null,h);this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a):this.value();else return this._values()},_setOption:function(a,c){var d,g=0;b.isArray(this.options.values)&&
(g=this.options.values.length);b.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.attr("disabled","disabled"),this.element.addClass("ui-disabled")):(this.handles.removeAttr("disabled"),this.element.removeClass("ui-disabled"));break;case "orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);
this._refreshValue();break;case "value":this._animateOff=!0;this._refreshValue();this._change(null,0);this._animateOff=!1;break;case "values":this._animateOff=!0;this._refreshValue();for(d=0;d<g;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var c,d;if(arguments.length)return c=this.options.values[b],c=this._trimAlignValue(c);c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);
return c},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var c=0<this.options.step?this.options.step:1,d=(b-this._valueMin())%c;alignValue=b-d;2*Math.abs(d)>=c&&(alignValue+=0<d?c:-c);return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a=this.options.range,c=this.options,d=this,g=!this._animateOff?c.animate:!1,h,e=
{},f,i,j,k;if(this.options.values&&this.options.values.length)this.handles.each(function(a){h=100*((d.values(a)-d._valueMin())/(d._valueMax()-d._valueMin()));e["horizontal"===d.orientation?"left":"bottom"]=h+"%";b(this).stop(1,1)[g?"animate":"css"](e,c.animate);if(!0===d.options.range)if("horizontal"===d.orientation){if(0===a)d.range.stop(1,1)[g?"animate":"css"]({left:h+"%"},c.animate);if(1===a)d.range[g?"animate":"css"]({width:h-f+"%"},{queue:!1,duration:c.animate})}else{if(0===a)d.range.stop(1,
1)[g?"animate":"css"]({bottom:h+"%"},c.animate);if(1===a)d.range[g?"animate":"css"]({height:h-f+"%"},{queue:!1,duration:c.animate})}f=h});else{i=this.value();j=this._valueMin();k=this._valueMax();h=k!==j?100*((i-j)/(k-j)):0;e["horizontal"===d.orientation?"left":"bottom"]=h+"%";this.handle.stop(1,1)[g?"animate":"css"](e,c.animate);if("min"===a&&"horizontal"===this.orientation)this.range.stop(1,1)[g?"animate":"css"]({width:h+"%"},c.animate);if("max"===a&&"horizontal"===this.orientation)this.range[g?
"animate":"css"]({width:100-h+"%"},{queue:!1,duration:c.animate});if("min"===a&&"vertical"===this.orientation)this.range.stop(1,1)[g?"animate":"css"]({height:h+"%"},c.animate);if("max"===a&&"vertical"===this.orientation)this.range[g?"animate":"css"]({height:100-h+"%"},{queue:!1,duration:c.animate})}}});b.extend(b.ui.slider,{version:"1.8.14"})})(jQuery);
(function(b,a){var c=0,d=0;b.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_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<this.anchors.length&&this.select(a+(a+1<this.anchors.length?1:-1));c.disabled=b.map(b.grep(c.disabled,function(b){return b!=a}),function(b){return b>=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<c.anchors.length?b:0)},b);a&&a.stopPropagation()}),j=c._unrotate||(c._unrotate=!a?function(b){b.clientX&&
c.rotate(null)}:function(){t=f.selected;d()});b?(this.element.bind("tabsshow",d),this.anchors.bind(f.event+".tabs",j),d()):(clearTimeout(c.rotation),this.element.unbind("tabsshow",d),this.anchors.unbind(f.event+".tabs",j),delete this._rotate,delete this._unrotate);return this}})})(jQuery);
(function(b,a){function c(){this.debug=!1;this._curInst=null;this._keyEvent=!1;this._disabledInputs=[];this._inDialog=this._datepickerShowing=!1;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:"January February March April May June July August September October November December".split(" "),monthNamesShort:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),dayNames:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),dayNamesShort:"Sun Mon Tue Wed Thu Fri Sat".split(" "),dayNamesMin:"Su Mo Tu We Th Fr Sa".split(" "),
weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,
beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1};b.extend(this._defaults,this.regional[""]);this.dpDiv=d(b('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}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('<div class="'+
this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_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('<span class="'+this._appendClass+'">'+d+"</span>"),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("<img/>").addClass(this._triggerClass).attr({src:g,
alt:d,title:d}):b('<button type="button"></button>').addClass(this._triggerClass).html(""==g?d:b("<img/>").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;f<b.length;f++)b[f].length>a&&(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('<input type="text" id="dp'+this.uuid+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>'),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;a<this._disabledInputs.length;a++)if(this._disabledInputs[a]==b)return!0;return!1},_getInst:function(a){try{return b.data(a,"datepicker")}catch(c){throw"Missing instance data for this datepicker";
}},_optionDatepicker:function(c,d,e){var h=this._getInst(c);if(2==arguments.length&&"string"==typeof d)return"defaults"==d?b.extend({},b.datepicker._defaults):h?"all"==d?b.extend({},h.settings):this._get(h,d):null;var l=d||{};"string"==typeof d&&(l={},l[d]=e);if(h){this._curInst==h&&this._hideDatepicker();var m=this._getDateDatepicker(c,!0),p=this._getMinMaxDate(h,"min"),n=this._getMinMaxDate(h,"max");g(h.settings,l);null!==p&&(l.dateFormat!==a&&l.minDate===a)&&(h.settings.minDate=this._formatDate(h,
p));null!==n&&(l.dateFormat!==a&&l.maxDate===a)&&(h.settings.maxDate=this._formatDate(h,n));this._attachments(b(c),h);this._autoSize(h);this._setDate(h,m);this._updateAlternate(h);this._updateDatepicker(h)}},_changeDatepicker:function(b,a,c){this._optionDatepicker(b,a,c)},_refreshDatepicker:function(b){(b=this._getInst(b))&&this._updateDatepicker(b)},_setDateDatepicker:function(b,a){var c=this._getInst(b);c&&(this._setDate(c,a),this._updateDatepicker(c),this._updateAlternate(c))},_getDateDatepicker:function(b,
a){var c=this._getInst(b);c&&!c.inline&&this._setDateFromField(c,a);return c?this._getDate(c):null},_doKeyDown:function(a){var c=b.datepicker._getInst(a.target),d=!0,e=c.dpDiv.is(".ui-datepicker-rtl");c._keyEvent=!0;if(b.datepicker._datepickerShowing)switch(a.keyCode){case 9:b.datepicker._hideDatepicker();d=!1;break;case 13:return d=b("td."+b.datepicker._dayOverClass+":not(."+b.datepicker._currentClass+")",c.dpDiv),d[0]?b.datepicker._selectDay(a.target,c.selectedMonth,c.selectedYear,d[0]):b.datepicker._hideDatepicker(),
!1;case 27:b.datepicker._hideDatepicker();break;case 33:b.datepicker._adjustDate(a.target,a.ctrlKey?-b.datepicker._get(c,"stepBigMonths"):-b.datepicker._get(c,"stepMonths"),"M");break;case 34:b.datepicker._adjustDate(a.target,a.ctrlKey?+b.datepicker._get(c,"stepBigMonths"):+b.datepicker._get(c,"stepMonths"),"M");break;case 35:(a.ctrlKey||a.metaKey)&&b.datepicker._clearDate(a.target);d=a.ctrlKey||a.metaKey;break;case 36:(a.ctrlKey||a.metaKey)&&b.datepicker._gotoToday(a.target);d=a.ctrlKey||a.metaKey;
break;case 37:if(a.ctrlKey||a.metaKey)b.datepicker._adjustDate(a.target,e?1:-1,"D");d=a.ctrlKey||a.metaKey;a.originalEvent.altKey&&b.datepicker._adjustDate(a.target,a.ctrlKey?-b.datepicker._get(c,"stepBigMonths"):-b.datepicker._get(c,"stepMonths"),"M");break;case 38:(a.ctrlKey||a.metaKey)&&b.datepicker._adjustDate(a.target,-7,"D");d=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)b.datepicker._adjustDate(a.target,e?-1:1,"D");d=a.ctrlKey||a.metaKey;a.originalEvent.altKey&&b.datepicker._adjustDate(a.target,
a.ctrlKey?+b.datepicker._get(c,"stepBigMonths"):+b.datepicker._get(c,"stepMonths"),"M");break;case 40:(a.ctrlKey||a.metaKey)&&b.datepicker._adjustDate(a.target,7,"D");d=a.ctrlKey||a.metaKey;break;default:d=!1}else 36==a.keyCode&&a.ctrlKey?b.datepicker._showDatepicker(this):d=!1;d&&(a.preventDefault(),a.stopPropagation())},_doKeyPress:function(c){var d=b.datepicker._getInst(c.target);if(b.datepicker._get(d,"constrainInput")){var d=b.datepicker._possibleChars(b.datepicker._get(d,"dateFormat")),e=String.fromCharCode(c.charCode==
a?c.keyCode:c.charCode);return c.ctrlKey||c.metaKey||" ">e||!d||-1<d.indexOf(e)}},_doKeyUp:function(a){a=b.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(b.datepicker.parseDate(b.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,b.datepicker._getFormatConfig(a)))b.datepicker._setDateFromField(a),b.datepicker._updateAlternate(a),b.datepicker._updateDatepicker(a)}catch(c){b.datepicker.log(c)}return!0},_showDatepicker:function(a){a=a.target||a;"input"!=a.nodeName.toLowerCase()&&
(a=b("input",a.parentNode)[0]);if(!(b.datepicker._isDisabledDatepicker(a)||b.datepicker._lastInput==a)){var c=b.datepicker._getInst(a);b.datepicker._curInst&&b.datepicker._curInst!=c&&(b.datepicker._datepickerShowing&&b.datepicker._triggerOnClose(b.datepicker._curInst),b.datepicker._curInst.dpDiv.stop(!0,!0));var d=b.datepicker._get(c,"beforeShow");g(c.settings,d?d.apply(a,[a,c]):{});c.lastVal=null;b.datepicker._lastInput=a;b.datepicker._setDateFromField(c);b.datepicker._inDialog&&(a.value="");b.datepicker._pos||
(b.datepicker._pos=b.datepicker._findPos(a),b.datepicker._pos[1]+=a.offsetHeight);var e=!1;b(a).parents().each(function(){e=e|b(this).css("position")=="fixed";return!e});e&&b.browser.opera&&(b.datepicker._pos[0]-=document.documentElement.scrollLeft,b.datepicker._pos[1]-=document.documentElement.scrollTop);d={left:b.datepicker._pos[0],top:b.datepicker._pos[1]};b.datepicker._pos=null;c.dpDiv.empty();c.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});b.datepicker._updateDatepicker(c);d=
b.datepicker._checkOffset(c,d,e);c.dpDiv.css({position:b.datepicker._inDialog&&b.blockUI?"static":e?"fixed":"absolute",display:"none",left:d.left+"px",top:d.top+"px"});if(!c.inline){var d=b.datepicker._get(c,"showAnim"),h=b.datepicker._get(c,"duration"),m=function(){var a=c.dpDiv.find("iframe.ui-datepicker-cover");if(a.length){var f=b.datepicker._getBorders(c.dpDiv);a.css({left:-f[0],top:-f[1],width:c.dpDiv.outerWidth(),height:c.dpDiv.outerHeight()})}};c.dpDiv.zIndex(b(a).zIndex()+1);b.datepicker._datepickerShowing=
!0;if(b.effects&&b.effects[d])c.dpDiv.show(d,b.datepicker._get(c,"showOptions"),h,m);else c.dpDiv[d||"show"](d?h:null,m);(!d||!h)&&m();c.input.is(":visible")&&!c.input.is(":disabled")&&c.input.focus();b.datepicker._curInst=c}}},_updateDatepicker:function(a){this.maxRows=4;var c=b.datepicker._getBorders(a.dpDiv);e=a;a.dpDiv.empty().append(this._generateHTML(a));var d=a.dpDiv.find("iframe.ui-datepicker-cover");d.length&&d.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});
a.dpDiv.find("."+this._dayOverClass+" a").mouseover();c=this._getNumberOfMonths(a);d=c[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");1<d&&a.dpDiv.addClass("ui-datepicker-multi-"+d).css("width",17*d+"em");a.dpDiv[(1!=c[0]||1!=c[1]?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==b.datepicker._curInst&&(b.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&
!a.input.is(":disabled")&&a.input[0]!=document.activeElement)&&a.input.focus();if(a.yearshtml){var g=a.yearshtml;setTimeout(function(){g===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);g=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(a){return{thin:1,medium:2,thick:3}[a]||a};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,c,d){var e=a.dpDiv.outerWidth(),g=a.dpDiv.outerHeight(),
h=a.input?a.input.outerWidth():0,p=a.input?a.input.outerHeight():0,n=document.documentElement.clientWidth+b(document).scrollLeft(),q=document.documentElement.clientHeight+b(document).scrollTop();c.left-=this._get(a,"isRTL")?e-h:0;c.left-=d&&c.left==a.input.offset().left?b(document).scrollLeft():0;c.top-=d&&c.top==a.input.offset().top+p?b(document).scrollTop():0;c.left-=Math.min(c.left,c.left+e>n&&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[0<a&&6>a,""]},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+1<a.length&&a.charAt(E+1)==b)&&E++;return b},s=function(a){var b=u(a),a=RegExp("^\\d{1,"+("@"==a?14:"!"==a?20:"y"==a&&b?4:"o"==a?3:2)+"}"),a=c.substring(B).match(a);if(!a)throw"Missing number at position "+B;B+=a[0].length;return parseInt(a[0],10)},v=function(a,d,f){var a=b.map(u(a)?f:d,function(a,b){return[[b,a]]}).sort(function(a,b){return-(a[1].length-b[1].length)}),e=-1;b.each(a,function(a,b){var d=b[1];
if(c.substr(B,d.length).toLowerCase()==d.toLowerCase())return e=b[0],B+=d.length,!1});if(-1!=e)return e+1;throw"Unknown name at position "+B;},z=function(){if(c.charAt(B)!=a.charAt(E))throw"Unexpected literal at position "+B;B++},B=0,E=0;E<a.length;E++)if(r)"'"==a.charAt(E)&&!u("'")?r=!1:z();else switch(a.charAt(E)){case "d":o=s("d");break;case "D":v("D",g,h);break;case "o":w=s("o");break;case "m":q=s("m");break;case "M":q=v("M",p,n);break;case "y":d=s("y");break;case "@":var C=new Date(s("@")),d=
C.getFullYear(),q=C.getMonth()+1,o=C.getDate();break;case "!":C=new Date((s("!")-this._ticksTo1970)/1E4);d=C.getFullYear();q=C.getMonth()+1;o=C.getDate();break;case "'":u("'")?z():r=!0;break;default:z()}if(B<c.length)throw"Extra/unparsed characters found in date: "+c.substring(B);-1==d?d=(new Date).getFullYear():100>d&&(d+=(new Date).getFullYear()-(new Date).getFullYear()%100+(d<=e?0:-100));if(-1<w){q=1;o=w;do{e=this._getDaysInMonth(d,q-1);if(o<=e)break;q++;o-=e}while(1)}C=this._daylightSavingAdjust(new Date(d,
q-1,o));if(C.getFullYear()!=d||C.getMonth()+1!=q||C.getDate()!=o)throw"Invalid date";return C},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:864E9*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(a,b,c){if(!b)return"";var d=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,e=(c?c.dayNames:
null)||this._defaults.dayNames,g=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,c=(c?c.monthNames:null)||this._defaults.monthNames,h=function(b){(b=r+1<a.length&&a.charAt(r+1)==b)&&r++;return b},n=function(a,b,c){b=""+b;if(h(a))for(;b.length<c;)b="0"+b;return b},q=function(a,b,c,d){return h(a)?d[b]:c[b]},o="",w=!1;if(b)for(var r=0;r<a.length;r++)if(w)"'"==a.charAt(r)&&!h("'")?w=!1:o+=a.charAt(r);else switch(a.charAt(r)){case "d":o+=n("d",b.getDate(),2);break;case "D":o+=q("D",b.getDay(),
d,e);break;case "o":o+=n("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":o+=n("m",b.getMonth()+1,2);break;case "M":o+=q("M",b.getMonth(),g,c);break;case "y":o+=h("y")?b.getFullYear():(10>b.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+1<a.length&&a.charAt(e+1)==b)&&e++;return b},e=0;e<a.length;e++)if(c)"'"==a.charAt(e)&&!d("'")?c=!1:b+=a.charAt(e);else switch(a.charAt(e)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":d("'")?b+="'":c=!0;break;default:b+=a.charAt(e)}return b},_get:function(b,c){return b.settings[c]!==a?b.settings[c]:this._defaults[c]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),d=a.lastVal=
a.input?a.input.val():null,e,g;e=g=this._getDefaultDate(a);var h=this._getFormatConfig(a);try{e=this.parseDate(c,d,h)||g}catch(n){this.log(n),d=b?"":d}a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();a.currentDay=d?e.getDate():0;a.currentMonth=d?e.getMonth():0;a.currentYear=d?e.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,
c,d){var e=function(a){var b=new Date;b.setDate(b.getDate()+a);return b},g=function(c){try{return b.datepicker.parseDate(b.datepicker._get(a,"dateFormat"),c,b.datepicker._getFormatConfig(a))}catch(d){}for(var e=(c.toLowerCase().match(/^c/)?b.datepicker._getDate(a):null)||new Date,g=e.getFullYear(),h=e.getMonth(),e=e.getDate(),i=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=i.exec(c);l;){switch(l[2]||"d"){case "d":case "D":e+=parseInt(l[1],10);break;case "w":case "W":e+=7*parseInt(l[1],10);break;case "m":case "M":h+=
parseInt(l[1],10);e=Math.min(e,b.datepicker._getDaysInMonth(g,h));break;case "y":case "Y":g+=parseInt(l[1],10),e=Math.min(e,b.datepicker._getDaysInMonth(g,h))}l=i.exec(c)}return new Date(g,h,e)};if(c=(c=null==c||""===c?d:"string"==typeof c?g(c):"number"==typeof c?isNaN(c)?d:e(c):new Date(c.getTime()))&&"Invalid Date"==c.toString()?d:c)c.setHours(0),c.setMinutes(0),c.setSeconds(0),c.setMilliseconds(0);return this._daylightSavingAdjust(c)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(12<
a.getHours()?a.getHours()+2:0);return a},_setDate:function(a,b,c){var d=!b,e=a.selectedMonth,g=a.selectedYear,b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();(e!=a.selectedMonth||g!=a.selectedYear)&&!c&&this._notifyChange(a);this._adjustInstDate(a);a.input&&a.input.val(d?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||
a.input&&""==a.input.val()?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var c=new Date,c=this._daylightSavingAdjust(new Date(c.getFullYear(),c.getMonth(),c.getDate())),d=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),g=this._get(a,"hideIfNoPrevNext"),m=this._get(a,"navigationAsDateFormat"),p=this._getNumberOfMonths(a),n=this._get(a,"showCurrentAtPos"),q=this._get(a,"stepMonths"),o=1!=p[0]||1!=p[1],w=this._daylightSavingAdjust(!a.currentDay?
new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),r=this._getMinMaxDate(a,"min"),u=this._getMinMaxDate(a,"max"),n=a.drawMonth-n,s=a.drawYear;0>n&&(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&&v<r?r:v;this._daylightSavingAdjust(new Date(s,n,1))>v;)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)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+h+".datepicker._adjustDate('#"+a.id+"', -"+q+", 'M');\" title=\""+v+'"><span class="ui-icon ui-icon-circle-triangle-'+(d?"e":"w")+'">'+v+"</span></a>":g?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+v+'"><span class="ui-icon ui-icon-circle-triangle-'+(d?"e":"w")+'">'+v+"</span></a>",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)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+h+".datepicker._adjustDate('#"+a.id+"', +"+q+", 'M');\" title=\""+z+'"><span class="ui-icon ui-icon-circle-triangle-'+(d?"w":"e")+'">'+z+"</span></a>":g?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+z+'"><span class="ui-icon ui-icon-circle-triangle-'+(d?"w":"e")+'">'+z+"</span></a>",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?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+h+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"",e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(d?m:"")+(this._isInRange(a,z)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
h+".datepicker._gotoToday('#"+a.id+"');\">"+q+"</button>":"")+(d?"":m)+"</div>":"",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<p[0];H++){var L=
"";this.maxRows=4;for(var I=0;I<p[1];I++){var Q=this._daylightSavingAdjust(new Date(s,n,a.selectedDay)),A=" ui-corner-all",y="";if(o){y+='<div class="ui-datepicker-group';if(1<p[1])switch(I){case 0:y+=" ui-datepicker-group-first";A=" ui-corner-"+(d?"right":"left");break;case p[1]-1:y+=" ui-datepicker-group-last";A=" ui-corner-"+(d?"left":"right");break;default:y+=" ui-datepicker-group-middle",A=""}y+='">'}for(var y=y+('<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+A+'">'+(/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<H||0<I,E,C)+'</div><table class="ui-datepicker-calendar"><thead><tr>'),D=q?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"",A=0;7>A;A++)var x=(A+m)%7,D=D+("<th"+(5<=(A+m+6)%7?' class="ui-datepicker-week-end"':"")+'><span title="'+z[x]+'">'+B[x]+"</span></th>");y+=D+"</tr></thead><tbody>";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<D;R++){for(var y=y+"<tr>",M=!q?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(x)+"</td>",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&&x<r||u&&x>u,M=M+('<td class="'+(5<=(A+m+6)%7?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+
(x.getTime()==Q.getTime()&&n==a.selectedMonth&&a._keyEvent||P.getTime()==x.getTime()&&P.getTime()==Q.getTime()?" "+this._dayOverClass:"")+(N?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!K?"":" "+J[1]+(x.getTime()==w.getTime()?" "+this._currentClass:"")+(x.getTime()==c.getTime()?" ui-datepicker-today":""))+'"'+((!F||K)&&J[2]?' title="'+J[2]+'"':"")+(N?"":' onclick="DP_jQuery_'+h+".datepicker._selectDay('#"+a.id+"',"+x.getMonth()+","+x.getFullYear()+', this);return false;"')+">"+(F&&!K?
"&#xa0;":N?'<span class="ui-state-default">'+x.getDate()+"</span>":'<a class="ui-state-default'+(x.getTime()==c.getTime()?" ui-state-highlight":"")+(x.getTime()==w.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+x.getDate()+"</a>")+"</td>");x.setDate(x.getDate()+1);x=this._daylightSavingAdjust(x)}y+=M+"</tr>"}n++;11<n&&(n=0,s++);y+="</tbody></table>"+(o?"</div>"+(0<p[0]&&I==p[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");L+=y}G+=L}G+=e+(b.browser.msie&&
7>parseInt(b.browser.version,10)&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");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='<div class="ui-datepicker-title">',u="";if(g||!q)u+='<span class="ui-datepicker-month">'+p[b]+"</span>";else{for(var p=d&&d.getFullYear()==c,s=e&&e.getFullYear()==c,u=u+('<select class="ui-datepicker-month" onchange="DP_jQuery_'+
h+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+h+".datepicker._clickMonthYear('#"+a.id+"');\">"),v=0;12>v;v++)if((!p||v>=d.getMonth())&&(!s||v<=e.getMonth()))u+='<option value="'+v+'"'+(v==b?' selected="selected"':"")+">"+n[v]+"</option>";u+="</select>"}w||(r+=u+(g||!q||!o?"&#xa0;":""));if(!a.yearshtml)if(a.yearshtml="",g||!o)r+='<span class="ui-datepicker-year">'+c+"</span>";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+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+h+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+h+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=n;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':
"")+">"+b+"</option>";a.yearshtml+="</select>";r+=a.yearshtml;a.yearshtml=null}r+=this._get(a,"yearSuffix");w&&(r+=(g||!q||!o?"&#xa0;":"")+u);return r+"</div>"},_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&&b<c?c:b;return d&&c>d?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("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").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<b.length;c++)null!==b[c]&&a.data("ec.storage."+b[c],a[0].style[b[c]])},restore:function(a,b){for(var c=0;c<b.length;c++)null!==b[c]&&a.css(b[c],a.data("ec.storage."+b[c]))},setMode:function(a,b){"toggle"==b&&(b=a.is(":hidden")?"show":"hide");return b},getBaseline:function(a,b){var c,d;switch(a[0]){case "top":c=0;break;case "middle":c=0.5;break;case "bottom":c=1;break;default:c=a[0]/b.height}switch(a[1]){case "left":d=
0;break;case "center":d=0.5;break;case "right":d=1;break;default:d=a[1]/b.width}return{x:d,y:c}},createWrapper:function(a){if(a.parent().is(".ui-effects-wrapper"))return a.parent();var c={width:a.outerWidth(!0),height:a.outerHeight(!0),"float":a.css("float")},d=b("<div></div>").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<unit[0]&&(e[c]=unit[0]*d+unit[1])});return e}});b.fn.extend({effect:function(a,
c,d,f){var g=e.apply(this,arguments),h={options:g[1],duration:g[2],callback:g[3]},g=h.options.mode,i=b.effects[a];return b.fx.off||!i?g?this[g](h.duration,h.callback):this.each(function(){h.callback&&h.callback.call(this)}):i.call(this,h)},_show:b.fn.show,show:function(a){if(f(a))return this._show.apply(this,arguments);var b=e.apply(this,arguments);b[1].mode="show";return this.effect.apply(this,b)},_hide:b.fn.hide,hide:function(a){if(f(a))return this._hide.apply(this,arguments);var b=e.apply(this,
arguments);b[1].mode="hide";return this.effect.apply(this,b)},__toggle:b.fn.toggle,toggle:function(a){if(f(a)||"boolean"===typeof a||b.isFunction(a))return this.__toggle.apply(this,arguments);var c=e.apply(this,arguments);c[1].mode="toggle";return this.effect.apply(this,c)},cssUnit:function(a){var c=this.css(a),d=[];b.each(["em","px","%","pt"],function(a,b){0<c.indexOf(b)&&(d=[parseFloat(c),b])});return d}});b.easing.jswing=b.easing.swing;b.extend(b.easing,{def:"easeOutQuad",swing:function(a,c,d,
e,f){return b.easing[b.easing.def](a,c,d,e,f)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){return 1>(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);g<Math.abs(d)?(g=d,a=f/4):a=f/(2*Math.PI)*Math.asin(d/g);return-(g*Math.pow(2,10*(b-=1))*Math.sin((b*e-a)*2*Math.PI/f))+c},easeOutElastic: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);g<Math.abs(d)?(g=d,a=f/4):a=f/(2*Math.PI)*
Math.asin(d/g);return g*Math.pow(2,-10*b)*Math.sin((b*e-a)*2*Math.PI/f)+d+c},easeInOutElastic:function(a,b,c,d,e){var a=1.70158,f=0,g=d;if(0==b)return c;if(2==(b/=e/2))return c+d;f||(f=e*0.3*1.5);g<Math.abs(d)?(g=d,a=f/4):a=f/(2*Math.PI)*Math.asin(d/g);return 1>b?-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<f/2?0.5*b.easing.easeInBounce(a,2*c,0,e,f)+d:0.5*b.easing.easeOutBounce(a,2*c-f,0,e,f)+0.5*e+d}})}(jQuery);
(function(b){b.effects.blind=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.direction||"vertical";b.effects.save(c,d);c.show();var e=b.effects.createWrapper(c).css({overflow:"hidden"}),f="vertical"==h?"height":"width",h="vertical"==h?e.height():e.width();"show"==g&&e.css(f,0);var i={};i[f]="show"==g?h:0;e.animate(i,a.duration,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.bounce=function(a){return this.queue(function(){var c=b(this),d=["position","top","bottom","left","right"],g=b.effects.setMode(c,a.options.mode||"effect"),h=a.options.direction||"up",e=a.options.distance||20,f=a.options.times||5,i=a.duration||250;/show|hide/.test(g)&&d.push("opacity");b.effects.save(c,d);c.show();b.effects.createWrapper(c);var j="up"==h||"down"==h?"top":"left",h="up"==h||"left"==h?"pos":"neg",e=a.options.distance||("top"==j?c.outerHeight({margin:!0})/3:c.outerWidth({margin:!0})/
3);"show"==g&&c.css("opacity",0).css(j,"pos"==h?-e:e);"hide"==g&&(e/=2*f);"hide"!=g&&f--;if("show"==g){var k={opacity:1};k[j]=("pos"==h?"+=":"-=")+e;c.animate(k,i/2,a.options.easing);e/=2;f--}for(k=0;k<f;k++){var l={},m={};l[j]=("pos"==h?"-=":"+=")+e;m[j]=("pos"==h?"+=":"-=")+e;c.animate(l,i/2,a.options.easing).animate(m,i/2,a.options.easing);e="hide"==g?2*e:e/2}"hide"==g?(k={opacity:0},k[j]=("pos"==h?"-=":"+=")+e,c.animate(k,i/2,a.options.easing,function(){c.hide();b.effects.restore(c,d);b.effects.removeWrapper(c);
a.callback&&a.callback.apply(this,arguments)})):(l={},m={},l[j]=("pos"==h?"-=":"+=")+e,m[j]=("pos"==h?"+=":"-=")+e,c.animate(l,i/2,a.options.easing).animate(m,i/2,a.options.easing,function(){b.effects.restore(c,d);b.effects.removeWrapper(c);a.callback&&a.callback.apply(this,arguments)}));c.queue("fx",function(){c.dequeue()});c.dequeue()})}})(jQuery);
(function(b){b.effects.clip=function(a){return this.queue(function(){var c=b(this),d="position top bottom left right height width".split(" "),g=b.effects.setMode(c,a.options.mode||"hide"),h=a.options.direction||"vertical";b.effects.save(c,d);c.show();var e=b.effects.createWrapper(c).css({overflow:"hidden"}),e="IMG"==c[0].tagName?e:c,f="vertical"==h?"height":"width",i="vertical"==h?"top":"left",h="vertical"==h?e.height():e.width();"show"==g&&(e.css(f,0),e.css(i,h/2));var j={};j[f]="show"==g?h:0;j[i]=
"show"==g?0:h/2;e.animate(j,{queue:!1,duration:a.duration,easing:a.options.easing,complete:function(){g=="hide"&&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.drop=function(a){return this.queue(function(){var c=b(this),d="position top bottom left right opacity".split(" "),g=b.effects.setMode(c,a.options.mode||"hide"),h=a.options.direction||"left";b.effects.save(c,d);c.show();b.effects.createWrapper(c);var e="up"==h||"down"==h?"top":"left",h="up"==h||"left"==h?"pos":"neg",f=a.options.distance||("top"==e?c.outerHeight({margin:!0})/2:c.outerWidth({margin:!0})/2);"show"==g&&c.css("opacity",0).css(e,"pos"==h?-f:f);var i={opacity:"show"==
g?1:0};i[e]=("show"==g?"pos"==h?"+=":"-=":"pos"==h?"-=":"+=")+f;c.animate(i,{queue:!1,duration:a.duration,easing:a.options.easing,complete:function(){"hide"==g&&c.hide();b.effects.restore(c,d);b.effects.removeWrapper(c);a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
(function(b){b.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode="toggle"==a.options.mode?b(this).is(":visible")?"hide":"show":a.options.mode;var g=b(this).show().css("visibility","hidden"),h=g.offset();h.top-=parseInt(g.css("marginTop"),10)||0;h.left-=parseInt(g.css("marginLeft"),10)||0;for(var e=g.outerWidth(!0),f=g.outerHeight(!0),i=0;i<c;i++)for(var j=
0;j<d;j++)g.clone().appendTo("body").wrap("<div></div>").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)&&times--;for(d=0;d<times;d++)c.animate({opacity:animateTo},duration,a.options.easing),animateTo=(animateTo+1)%2;c.animate({opacity:animateTo},duration,
a.options.easing,function(){animateTo==0&&c.hide();a.callback&&a.callback.apply(this,arguments)});c.queue("fx",function(){c.dequeue()}).dequeue()})}})(jQuery);
(function(b){b.effects.puff=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide"),g=parseInt(a.options.percent,10)||150,h=g/100,e={height:c.height(),width:c.width()};b.extend(a.options,{fade:!0,mode:d,percent:"hide"==d?g:100,from:"hide"==d?e:{height:e.height*h,width:e.width*h}});c.effect("scale",a.options,a.duration,a.callback);c.dequeue()})};b.effects.scale=function(a){return this.queue(function(){var c=b(this),d=b.extend(!0,{},a.options),g=b.effects.setMode(c,
a.options.mode||"effect"),h=parseInt(a.options.percent,10)||(0==parseInt(a.options.percent,10)?0:"hide"==g?0:100),e=a.options.direction||"both",f=a.options.origin;"effect"!=g&&(d.origin=f||["middle","center"],d.restore=!0);f={height:c.height(),width:c.width()};c.from=a.options.from||("show"==g?{height:0,width:0}:f);c.to={height:f.height*("horizontal"!=e?h/100:1),width:f.width*("vertical"!=e?h/100:1)};if(a.options.fade&&("show"==g&&(c.from.opacity=0,c.to.opacity=1),"hide"==g))c.from.opacity=1,c.to.opacity=
0;d.from=c.from;d.to=c.to;d.mode=g;c.effect("size",d,a.duration,a.callback);c.dequeue()})};b.effects.size=function(a){return this.queue(function(){var c=b(this),d="position top bottom left right width height overflow opacity".split(" "),g="position top bottom left right overflow opacity".split(" "),h=["width","height","overflow"],e=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],i=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],j=b.effects.setMode(c,
a.options.mode||"effect"),k=a.options.restore||!1,l=a.options.scale||"both",m=a.options.origin,p={height:c.height(),width:c.width()};c.from=a.options.from||p;c.to=a.options.to||p;m&&(m=b.effects.getBaseline(m,p),c.from.top=(p.height-c.from.height)*m.y,c.from.left=(p.width-c.from.width)*m.x,c.to.top=(p.height-c.to.height)*m.y,c.to.left=(p.width-c.to.width)*m.x);var n=c.from.height/p.height,q=c.from.width/p.width,o=c.to.height/p.height,w=c.to.width/p.width;if("box"==l||"both"==l)if(n!=o&&(d=d.concat(f),
c.from=b.effects.setTransition(c,f,n,c.from),c.to=b.effects.setTransition(c,f,o,c.to)),q!=w)d=d.concat(i),c.from=b.effects.setTransition(c,i,q,c.from),c.to=b.effects.setTransition(c,i,w,c.to);if(("content"==l||"both"==l)&&n!=o)d=d.concat(e),c.from=b.effects.setTransition(c,e,n,c.from),c.to=b.effects.setTransition(c,e,o,c.to);b.effects.save(c,k?d:g);c.show();b.effects.createWrapper(c);c.css("overflow","hidden").css(c.from);if("content"==l||"both"==l)f=f.concat(["marginTop","marginBottom"]).concat(e),
i=i.concat(["marginLeft","marginRight"]),h=d.concat(f).concat(i),c.find("*[width]").each(function(){child=b(this);k&&b.effects.save(child,h);var c=child.height(),d=child.width();child.from={height:c*n,width:d*q};child.to={height:c*o,width:d*w};if(n!=o){child.from=b.effects.setTransition(child,f,n,child.from);child.to=b.effects.setTransition(child,f,o,child.to)}if(q!=w){child.from=b.effects.setTransition(child,i,q,child.from);child.to=b.effects.setTransition(child,i,w,child.to)}child.css(child.from);
child.animate(child.to,a.duration,a.options.easing,function(){k&&b.effects.restore(child,h)})});c.animate(c.to,{queue:!1,duration:a.duration,easing:a.options.easing,complete:function(){c.to.opacity===0&&c.css("opacity",c.from.opacity);j=="hide"&&c.hide();b.effects.restore(c,k?d:g);b.effects.removeWrapper(c);a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
(function(b){b.effects.shake=function(a){return this.queue(function(){var c=b(this),d=["position","top","bottom","left","right"];b.effects.setMode(c,a.options.mode||"effect");var g=a.options.direction||"left",h=a.options.distance||20,e=a.options.times||3,f=a.duration||a.options.duration||140;b.effects.save(c,d);c.show();b.effects.createWrapper(c);var i="up"==g||"down"==g?"top":"left",j="up"==g||"left"==g?"pos":"neg",g={},k={},l={};g[i]=("pos"==j?"-=":"+=")+h;k[i]=("pos"==j?"+=":"-=")+2*h;l[i]=("pos"==
j?"-=":"+=")+2*h;c.animate(g,f,a.options.easing);for(h=1;h<e;h++)c.animate(k,f,a.options.easing).animate(l,f,a.options.easing);c.animate(k,f,a.options.easing).animate(g,f/2,a.options.easing,function(){b.effects.restore(c,d);b.effects.removeWrapper(c);a.callback&&a.callback.apply(this,arguments)});c.queue("fx",function(){c.dequeue()});c.dequeue()})}})(jQuery);
(function(b){b.effects.slide=function(a){return this.queue(function(){var c=b(this),d=["position","top","bottom","left","right"],g=b.effects.setMode(c,a.options.mode||"show"),h=a.options.direction||"left";b.effects.save(c,d);c.show();b.effects.createWrapper(c).css({overflow:"hidden"});var e="up"==h||"down"==h?"top":"left",h="up"==h||"left"==h?"pos":"neg",f=a.options.distance||("top"==e?c.outerHeight({margin:!0}):c.outerWidth({margin:!0}));"show"==g&&c.css(e,"pos"==h?isNaN(f)?"-"+f:-f:f);var i={};
i[e]=("show"==g?"pos"==h?"+=":"-=":"pos"==h?"-=":"+=")+f;c.animate(i,{queue:!1,duration:a.duration,easing:a.options.easing,complete:function(){"hide"==g&&c.hide();b.effects.restore(c,d);b.effects.removeWrapper(c);a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
(function(b){b.effects.transfer=function(a){return this.queue(function(){var c=b(this),d=b(a.options.to),g=d.offset(),d={top:g.top,left:g.left,height:d.innerHeight(),width:d.innerWidth()},g=c.offset(),h=b('<div class="ui-effects-transfer"></div>').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<a.childNodes.length;d++)d+=jQuery.highlight(a.childNodes[d],c,b,e);return 0}});
jQuery.fn.unhighlight=function(a){var c={className:"highlight",element:"span"};jQuery.extend(c,a);return this.find(c.element+"."+c.className).each(function(){var b=this.parentNode;b.replaceChild(this.firstChild,this);b.normalize()}).end()};
jQuery.fn.highlight=function(a,c){var b={className:"highlight",element:"span",caseSensitive:false,wordsOnly:false};jQuery.extend(b,c);if(a.constructor===String)a=[a];a=jQuery.grep(a,function(f){return f!=""});if(a.length==0)return this;var e=b.caseSensitive?"":"i",d="("+a.join("|")+")";if(b.wordsOnly)d="\\b"+d+"\\b";var g=RegExp(d,e);return this.each(function(){jQuery.highlight(this,g,b.element,b.className)})};

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

View file

@ -1,398 +0,0 @@
/*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
*/
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.ui-helper-clearfix { display: inline-block; }
/* required comment for clearfix to work in Opera \*/
* html .ui-helper-clearfix { height:1%; }
.ui-helper-clearfix { display:block; }
/* end clearfix */
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
/*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
*/
/* Component containers
----------------------------------*/
.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; }
.ui-widget-content a { color: #222222; }
.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
.ui-widget-header a { color: #ffffff; }
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2e6e9e; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; }
.ui-state-hover a, .ui-state-hover a:hover { color: #1d5987; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; text-decoration: none; }
.ui-widget :active { outline: none; }
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; }
.ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; }
.ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
.ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
.ui-corner-top { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; }
.ui-corner-bottom { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
.ui-corner-right { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
.ui-corner-left { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
.ui-corner-all { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }
/* Overlays */
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* Resizable
----------------------------------*/
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Selectable
----------------------------------*/
.ui-selectable-helper { border:1px dotted black }
/* Autocomplete
----------------------------------*/
.ui-autocomplete { position: absolute; cursor: default; }
.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; }
/* workarounds */
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
/* Menu
----------------------------------*/
.ui-menu {
list-style:none;
padding: 2px;
margin: 0;
display:block;
}
.ui-menu .ui-menu {
margin-top: -3px;
}
.ui-menu .ui-menu-item {
margin:0;
padding: 0;
zoom: 1;
float: left;
clear: left;
width: 100%;
}
.ui-menu .ui-menu-item a {
text-decoration:none;
display:block;
padding:.2em .4em;
line-height:1.5;
zoom:1;
}
.ui-menu .ui-menu-item a.ui-state-hover,
.ui-menu .ui-menu-item a.ui-state-active {
font-weight: normal;
margin: -1px;
}
/* Button
----------------------------------*/
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; }
button.ui-button-icons-only { width: 3.7em; }
/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4; }
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }
/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
/* Dialog
----------------------------------*/
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/* Tabs
----------------------------------*/
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,008 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,85 +0,0 @@
.treeview, .treeview ul {
padding: 0;
margin: 0;
list-style: none;
}
.treeview ul {
background-color: white;
margin-top: 4px;
}
.treeview .hitarea {
background: url(images/treeview-default.gif) -64px -25px no-repeat;
height: 16px;
width: 16px;
margin-left: -16px;
float: left;
cursor: pointer;
}
/* fix for IE6 */
* html .hitarea {
display: inline;
float:none;
}
.treeview li {
margin: 0;
padding: 3px 0 3px 16px;
}
.treeview a.selected {
background-color: #eee;
}
#treecontrol { margin: 1em 0; display: none; }
.treeview .hover { color: red; cursor: pointer; }
.treeview li { background: url(images/treeview-default-line.gif) 0 0 no-repeat; }
.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; }
.treeview .expandable-hitarea { background-position: -80px -3px; }
.treeview li.last { background-position: 0 -1766px }
.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(images/treeview-default.gif); }
.treeview li.lastCollapsable { background-position: 0 -111px }
.treeview li.lastExpandable { background-position: -32px -67px }
.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; }
.treeview-red li { background-image: url(images/treeview-red-line.gif); }
.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(images/treeview-red.gif); }
.treeview-black li { background-image: url(images/treeview-black-line.gif); }
.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(images/treeview-black.gif); }
.treeview-gray li { background-image: url(images/treeview-gray-line.gif); }
.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(images/treeview-gray.gif); }
.treeview-famfamfam li { background-image: url(images/treeview-famfamfam-line.gif); }
.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(images/treeview-famfamfam.gif); }
.filetree li { padding: 3px 0 2px 16px; }
.filetree span.folder, .filetree span.file { padding: 1px 0 1px 16px; display: block; }
.filetree span.folder { background: url(images/folder.gif) 0 0 no-repeat; }
.filetree li.expandable span.folder { background: url(images/folder-closed.gif) 0 0 no-repeat; }
.filetree span.file { background: url(images/file.gif) 0 0 no-repeat; }
html, body {height:100%; margin: 0; padding: 0; }
/*
html>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; }

File diff suppressed because one or more lines are too long

View file

@ -1,282 +0,0 @@
/**
* 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 <ul> block in the selected node.
var ulNode = a.getElementsByTagName("ul")[0];
if (ulNode != undefined) {
if (ulNode.hasAttribute("style")) {
ulNode.setAttribute("style", "display: block; background-color: #D8D8D8 !important;");
} else {
var ulStyle = document.createAttribute("style");
ulStyle.nodeValue = "display: block; background-color: #D8D8D8 !important;";
ulNode.setAttributeNode(ulStyle);
} }
//adjust tree's + sign to -
var divNode = a.getElementsByTagName("div")[0];
if (divNode != undefined) {
if (divNode.hasAttribute("class")) {
divNode.setAttribute("class", "hitarea collapsable-hitarea");
} else {
var divClass = document.createAttribute("class");
divClass.nodeValue = "hitarea collapsable-hitarea";
divNode.setAttributeNode(divClass);
} }
//set persistence cookie when a node is auto expanded
// setCookieForExpandedNode("webhelp-currentid");
}
var b = a.getElementsByTagName("a")[0];
if (b != undefined) {
//Setting the background for selected node.
var style = a.getAttribute("style", 2);
if (style != null && !style.match(/background-color: Background;/)) {
a.setAttribute("style", "background-color: #D8D8D8; " + style);
b.setAttribute("style", "color: black;");
} else if (style != null) {
a.setAttribute("style", "background-color: #D8D8D8; " + style);
b.setAttribute("style", "color: black;");
} else {
a.setAttribute("style", "background-color: #D8D8D8; ");
b.setAttribute("style", "color: black;");
}
}
//shows the node related to current content.
//goes a recursive call from current node to ancestor nodes, displaying all of them.
while (a.parentNode && a.parentNode.nodeName) {
var parentNode = a.parentNode;
var nodeName = parentNode.nodeName;
if (nodeName.toLowerCase() == "ul") {
parentNode.setAttribute("style", "display: block;");
} else if (nodeName.toLocaleLowerCase() == "li") {
parentNode.setAttribute("class", "collapsable");
parentNode.firstChild.setAttribute("class", "hitarea collapsable-hitarea ");
}
a = parentNode;
} } }
/*
function setCookieForExpandedNode(nodeName) {
var tocDiv = document.getElementById("tree"); //get table of contents Div
var divs = tocDiv.getElementsByTagName("div");
var matchedDivNumber;
var i;
for (i = 0; i < divs.length; i++) { //1101001
var div = divs[i];
var liNode = div.parentNode;
}
//create a new cookie if a treeview does not exist
if ($.cookie(treeCookieId) == null || $.cookie(treeCookieId) == "") {
var branches = $("#tree").find("li");//.prepareBranches(treesettings);
var data = [];
branches.each(function(i, e) {
data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0;
});
$.cookie(treeCookieId, data.join(""));
}
if (i < divs.length) {
var treeviewCookie = $.cookie(treeCookieId);
var tvCookie1 = treeviewCookie.substring(0, i);
var tvCookie2 = treeviewCookie.substring(i + 1);
var newTVCookie = tvCookie1 + "1" + tvCookie2;
$.cookie(treeCookieId, newTVCookie);
}
} */
/**
* Code for Show/Hide TOC
*
*/
function showHideToc() {
var showHideButton = $("#showHideButton");
var leftNavigation = $("#sidebar"); //hide the parent div of leftnavigation, ie sidebar
var content = $("#content");
var animeTime=75
if (showHideButton != undefined && showHideButton.hasClass("pointLeft")) {
//Hide TOC
showHideButton.removeClass('pointLeft').addClass('pointRight');
if(noAnimations) {
leftNavigation.css("display", "none");
content.css("margin", "125px 0 0 0");
} else {
leftNavigation.hide(animeTime);
content.animate( { "margin-left": 0 }, animeTime);
}
showHideButton.attr("title", "Show Sidebar");
} else {
//Show the TOC
showHideButton.removeClass('pointRight').addClass('pointLeft');
if(noAnimations) {
content.css("margin", "125px 0 0 280px");
leftNavigation.css("display", "block");
} else {
content.animate( { "margin-left": '280px' }, animeTime);
leftNavigation.show(animeTime);
}
showHideButton.attr("title", "Hide Sidebar");
}
}
/**
* Code for search highlighting
*/
var highlightOn = true;
function searchHighlight(searchText) {
highlightOn = true;
if (searchText != undefined) {
var wList;
var sList = new Array(); //stem list
//Highlight the search terms
searchText = searchText.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "</").replace(/_di_/g, "%24_")
searchText = searchText.replace(/ +/g, " ");
searchText = searchText.replace(/ $/, "").replace(/^ /, "");
wList = searchText.split(" ");
$("#content").highlight(wList); //Highlight the search input
if (typeof stemmer != "undefined") {
//Highlight the stems
for (var i = 0; i < wList.length; i++) {
var stemW = stemmer(wList[i]);
sList.push(stemW);
}
} else {
sList = wList;
}
$("#content").highlight(sList); //Highlight the search input's all stems
}
}
function searchUnhighlight() {
highlightOn = false;
//unhighlight the search input's all stems
$("#content").unhighlight();
$("#content").unhighlight();
}
function toggleHighlight() {
if (highlightOn) {
searchUnhighlight();
} else {
searchHighlight($.cookie('textToSearch'));
}
}

View file

@ -1,40 +0,0 @@
var myLayout;
jQuery(document).ready(function ($) {
myLayout = $('body').layout({
//Defining panes
west__paneSelector: "#sidebar"
, north__paneSelector: "#header"
, center__paneSelector: "#content"
// some resizing/toggling settings
, north__resizable: false // OVERRIDE the pane-default of 'resizable=true'
, north__spacing_open: 0 // no resizer-bar when open (zero height)
, west__slideable: false
, west__spacing_closed: 6
, west__spacing_open: 4
,
// some pane-size settings
west__minSize: 280
, north__minSize: 99
// some pane animation settings
, west__animatePaneSizing: false
, west__fxSpeed_size: "normal"
, west__fxSpeed_open: 10
, west__fxSettings_open: {easing: ""}
, west__fxName_close: "none"
, stateManagement__enabled: true // automatic cookie load & save enabled by default
, stateManagement__cookie__name: "sidebar_state"
});
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show more