summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsicarius <devnull@localhost>2007-02-10 21:58:05 +0100
committersicarius <devnull@localhost>2007-02-10 21:58:05 +0100
commit644121b478a57772150f460c3c8cd035aa6767a2 (patch)
tree40b1136b467c9873c4c1aeeb8f9f75530400a677
parent68fd7fdd89a7d6c0f0b42b7b7dfa07c95b49258f (diff)
downloadrc2007-soccer-644121b478a57772150f460c3c8cd035aa6767a2.tar
rc2007-soccer-644121b478a57772150f460c3c8cd035aa6767a2.zip
Updatet Todo.txt ; Added some Sources
-rw-r--r--Information/Hardware/Portbelegung.odsbin14604 -> 14604 bytes
-rw-r--r--Organisation/Todo.txt6
-rw-r--r--source/Concept/Design.odgbin15209 -> 17218 bytes
-rw-r--r--source/Concept/Design.pdfbin61706 -> 229950 bytes
-rwxr-xr-xtemp/avrTest/autogen.sh6
-rw-r--r--temp/avrTest/main.c4
-rw-r--r--temp/avrTest/main.eep1
-rwxr-xr-xtemp/avrTest/main.elfbin0 -> 4901 bytes
-rw-r--r--temp/avrTest/main.hex15
-rw-r--r--temp/avrTest/makefile223
-rw-r--r--temp/bestueckung-maus.pdfbin0 -> 125808 bytes
-rw-r--r--temp/mfile.tar.gzbin0 -> 20350 bytes
-rw-r--r--temp/mfile/README174
-rw-r--r--temp/mfile/help.html165
-rw-r--r--temp/mfile/htmlview.tcl606
-rw-r--r--temp/mfile/htmlview.xbm14
-rw-r--r--temp/mfile/makefile_template223
-rwxr-xr-xtemp/mfile/mfile.tcl1601
-rw-r--r--temp/mfile/mfile.xbm14
-rw-r--r--temp/schaltplan-maus.pdfbin0 -> 17128 bytes
20 files changed, 3050 insertions, 2 deletions
diff --git a/Information/Hardware/Portbelegung.ods b/Information/Hardware/Portbelegung.ods
index 55ef9b2..8c4d736 100644
--- a/Information/Hardware/Portbelegung.ods
+++ b/Information/Hardware/Portbelegung.ods
Binary files differ
diff --git a/Organisation/Todo.txt b/Organisation/Todo.txt
index ff140a3..6ca4a16 100644
--- a/Organisation/Todo.txt
+++ b/Organisation/Todo.txt
@@ -14,12 +14,12 @@ Hardware:
Motoren fertiggestellt
Ballsensoren fertiggestellt
Eigene Platinen fertiggestellt
+ Ballsensoren angeschlossen
Todo:
- Dribbler fertigestellen(Räder sind nun vorhanden)
+ Dribbler fertigestellen !!!
Tastsensoren befestigen
- Verkabelung
Entgültige Verkabelung
Software:
@@ -29,6 +29,8 @@ Software:
weitere Ausarbeitungen am Design
Programmierumgebung eingerichtet
Platinen ausreichend konfigueriert(fuses gesetzt)
+ Anfänge des HAL
+ Motoransteuerung und Anfänge der Navigationsklasse
Todo:
diff --git a/source/Concept/Design.odg b/source/Concept/Design.odg
index c401d7f..9b033b9 100644
--- a/source/Concept/Design.odg
+++ b/source/Concept/Design.odg
Binary files differ
diff --git a/source/Concept/Design.pdf b/source/Concept/Design.pdf
index 546f513..0a3a37d 100644
--- a/source/Concept/Design.pdf
+++ b/source/Concept/Design.pdf
Binary files differ
diff --git a/temp/avrTest/autogen.sh b/temp/avrTest/autogen.sh
new file mode 100755
index 0000000..e6476b5
--- /dev/null
+++ b/temp/avrTest/autogen.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+make
+avrdude -p atmega128 -c stk200 -P /dev/parport0 -U flash:w:main.HEX
+
+exit
diff --git a/temp/avrTest/main.c b/temp/avrTest/main.c
new file mode 100644
index 0000000..5c5cfa4
--- /dev/null
+++ b/temp/avrTest/main.c
@@ -0,0 +1,4 @@
+int main() {
+ int i = 1;
+ return i;
+};
diff --git a/temp/avrTest/main.eep b/temp/avrTest/main.eep
new file mode 100644
index 0000000..1996e8f
--- /dev/null
+++ b/temp/avrTest/main.eep
@@ -0,0 +1 @@
+:00000001FF
diff --git a/temp/avrTest/main.elf b/temp/avrTest/main.elf
new file mode 100755
index 0000000..182b473
--- /dev/null
+++ b/temp/avrTest/main.elf
Binary files differ
diff --git a/temp/avrTest/main.hex b/temp/avrTest/main.hex
new file mode 100644
index 0000000..f60c14e
--- /dev/null
+++ b/temp/avrTest/main.hex
@@ -0,0 +1,15 @@
+:100000000C9446000C9463000C9463000C94630001
+:100010000C9463000C9463000C9463000C946300D4
+:100020000C9463000C9463000C9463000C946300C4
+:100030000C9463000C9463000C9463000C946300B4
+:100040000C9463000C9463000C9463000C946300A4
+:100050000C9463000C9463000C9463000C94630094
+:100060000C9463000C9463000C9463000C94630084
+:100070000C9463000C9463000C9463000C94630074
+:100080000C9463000C9463000C94630011241FBE55
+:10009000CFEFD0E1DEBFCDBF11E0A0E0B1E0ECEDED
+:1000A000F0E000E00BBF02C007900D92A030B10756
+:1000B000D9F711E0A0E0B1E001C01D92A030B10776
+:1000C000E1F70C9465000C940000CFEFD0E1DEBFA7
+:0C00D000CDBF81E090E00C946D00FFCFEC
+:00000001FF
diff --git a/temp/avrTest/makefile b/temp/avrTest/makefile
new file mode 100644
index 0000000..d7be3d5
--- /dev/null
+++ b/temp/avrTest/makefile
@@ -0,0 +1,223 @@
+# Hey Emacs, this is a -*- makefile -*-
+
+# AVR-GCC Makefile template, derived from the WinAVR template (which
+# is public domain), believed to be neutral to any flavor of "make"
+# (GNU make, BSD make, SysV make)
+
+
+MCU = atmega128
+FORMAT = ihex
+TARGET = main
+SRC = $(TARGET).c
+ASRC =
+OPT = s
+
+# Name of this Makefile (used for "make depend").
+MAKEFILE = Makefile
+
+# Debugging format.
+# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2.
+# AVR (extended) COFF requires stabs, plus an avr-objcopy run.
+DEBUG = stabs
+
+# Compiler flag to set the C Standard level.
+# c89 - "ANSI" C
+# gnu89 - c89 plus GCC extensions
+# c99 - ISO C99 standard (not yet fully implemented)
+# gnu99 - c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS =
+
+# Place -I options here
+CINCS =
+
+
+CDEBUG = -g$(DEBUG)
+CWARN = -Wall -Wstrict-prototypes
+CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+#CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA)
+
+
+#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#Additional libraries.
+
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+PRINTF_LIB =
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+SCANF_LIB =
+
+MATH_LIB = -lm
+
+# External memory options
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+# Programming support using avrdude. Settings and variables.
+
+AVRDUDE_PROGRAMMER = stk200
+AVRDUDE_PORT = /dev/parport0
+
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level. Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER)
+
+
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+MV = mv -f
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+# Default target.
+all: build
+
+build: elf hex eep
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+ $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+ $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof
+
+
+.SUFFIXES: .elf .hex .eep .lss .sym
+
+.elf.hex:
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+.elf.eep:
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+ --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+.elf.lss:
+ $(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+.elf.sym:
+ $(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+$(TARGET).elf: $(OBJ)
+ $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+.c.o:
+ $(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+.c.s:
+ $(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+.S.o:
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+
+
+# Target: clean project.
+clean:
+ $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \
+ $(TARGET).map $(TARGET).sym $(TARGET).lss \
+ $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d)
+
+depend:
+ if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \
+ then \
+ sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \
+ $(MAKEFILE).$$$$ && \
+ $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \
+ fi
+ echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \
+ >> $(MAKEFILE); \
+ $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE)
+
+.PHONY: all build elf hex eep lss sym program coff extcoff clean depend
diff --git a/temp/bestueckung-maus.pdf b/temp/bestueckung-maus.pdf
new file mode 100644
index 0000000..de6697d
--- /dev/null
+++ b/temp/bestueckung-maus.pdf
Binary files differ
diff --git a/temp/mfile.tar.gz b/temp/mfile.tar.gz
new file mode 100644
index 0000000..b4f3eeb
--- /dev/null
+++ b/temp/mfile.tar.gz
Binary files differ
diff --git a/temp/mfile/README b/temp/mfile/README
new file mode 100644
index 0000000..fa7db2e
--- /dev/null
+++ b/temp/mfile/README
@@ -0,0 +1,174 @@
+Mfile - a simple Makefile generator for AVR-GCC
+================================================
+
+[See below for installation instructions]
+
+General
+-------
+
+The main purpose of this small application is to provide people an
+easy way to setup their project's Makefiles for »relatively standard«
+projects, so one could start using AVR-GCC without first studying the
+AVR's datasheet, plus the avr-libc documentation (really
+recommended!), /plus/ the »GNU make« user manual.
+
+It cannot really release the potential programmer from eventually
+studying the »GNU make« manual, but it can help to delay this part a
+few months.
+
+This generator works by using a Makefile template (the one that
+currently ships with WinAVR), load it into an editor buffer so the
+user can view the file and the changes, and then use a menu-driven
+approach to customize that buffer. Eventually, at the user's
+discretion, this editor buffer can be saved into a Makefile.
+(Optionally, the user can also edit the buffer directly, so it acts as
+a simple text editor.)
+
+While the Programmer's Notepad 2 (PN2) editor that ships with WinAVR
+intends to eventually implement this functionality some day, there are
+two reasons for this little project:
+
+. Act as a stop-gap measure so users will get something they can use
+ right now, without waiting any longer.
+
+. Since this tool is written in Tcl/Tk, it is also portable to Unix
+ systems, so Unix users (who'd never benefit from PN2) might use it.
+
+I do explicitly /not/ intend to make this tool the all-singing
+all-dancing scriptable Makefile generator that can emit any Makefile
+for any processor and compiler on earth. I really do not want to
+spend that many more hours into it, it was intented to be a quick and
+(hopefully not so) dirty tool that gets finished within a couple of
+evenings, and won't cost me another dozen of hours per months for
+supporting it, adding new features etc. If you feel this is worth
+porting somewhere else (like for the MSP430-GCC that is probably
+fairly close to AVR-GCC in terms of typical use), please pick it up,
+extend it, and maintain it separately. As always, I appreciate
+feedback, but reserve the right to ignore anything that tries to
+extend this tool above the outlined original purpose.
+
+Note that the Makefile template as shipped requires GNU make for
+various things (automagic dependency generation, some inference rules
+are written in gmake syntax as well). However, as Mfile only relies
+on a few macro names in the template, it should be relatively easy to
+modify the template for other »make« dialects. The template (or input
+file upon »File -> Open«) will be parsed when reading it, and only
+those features actually present will be displayed in the »Makefile«
+menu. So if e. g. people don't want to include AVRdude features, they
+can delete all related lines from the template. Also if someone (like
+Unix users, in particular those not using GNU make) want to modify the
+way the dependencies are generated (e. g. by using the traditional
+»make depend« approach), this should be completely unrelated.
+
+
+Prerequisites
+-------------
+
+Requires the Tcl and Tk toolkits in recent versions (no exact version
+known, probably any 8.x version is OK). Current WinAVR (20030913)
+contains these tools.
+
+As an alternative to the standard Tk wish interpreter, the tix
+toolkit's tixwish interpreter can be used. Under Unix systems, the
+look & feel is then closer to what Tk wish looks like under Windows.
+
+
+Installation on Windows
+-----------------------
+
+[Users of WinAVR 20040404 and beyond do get Mfile pre-installed. See
+below for upgrade instructions.]
+
+Extract the archive into a subdirectory of its own, e. g.
+
+c:\WinAVR\mfile
+
+Double-click on the icon for »mfile.tcl« in your file browser
+(explorer), and tell it to use c:\WinAVR\bin\wish84.exe to run this
+file. (Adjust appropriately if you installed WinAVR in another
+directory.)
+
+Since Windows always changes to the directory of the application
+before starting it, all template and auxiliary files should be found
+easily there without editing mfile.tcl. Note however that this
+directory will also become the default directory where »Makefile« will
+be stored, unless you change a different location with »Save As...«
+
+As another option, the following has been contributed by Eric Weddington
+on how to properly create a shortcut on the desktop:
+
+1. Extract the mfile.zip archive into your WinAVR
+installation directory. This will automatically create a
+subdirectory \mfile with all the needed files in this
+subdirectory.
+
+2. Create a Shortcut on your Desktop.
+
+3. For the location of the item, select the program
+wish84.exe which is located in \bin subdirectory of your
+WinAVR installation directory. Add a space and then type
+the absolute pathname of the program, mfile.tcl, which is
+located in the mfile subdirectory of your WinAVR
+installation directory.
+
+For example, if your WinAVR installation directory is at
+C:\WinAVR, then the item will look like:
+C:\WinAVR\bin\wish84.exe C:\WinAVR\mfile\mfile.tcl
+
+4. The name of the Shortcut should be: MFile
+
+5. When finished, you will have to go back and properly
+select the Start Directory. Right-click the shortcut icon
+on your Deskopt and select Properties. In the Start In edit
+box, put in the mfile subdirectory of your WinAVR
+installation directory. NOTE! This is essential if MFile is
+to execute correctly as there are additional files that it
+needs to find.
+
+For example, if your WinAVR installation directory is at
+C:\WinAVR, then the Start directory will be:
+C:\WinAVR\mfile
+
+Installation on Unix
+--------------------
+
+Extract the archive into an arbitrary subdirectory, like
+
+/usr/local/share/mfile
+
+If a different directory is chosen, edit the setting of »prefix« on
+top of mfile.tcl to match the installation directory, or alternatively
+use the environment variable MFILE_HOME to override the default
+setting.
+
+If you'd like to use a different interpreter than
+/usr/local/bin/tixwish, edit the #! setting in the first line. The
+standard Tk wish interpreter is supported as well as the tix toolkit
+one.
+
+If you prefer, create a symbolic link for convenience (so the
+application can be found along your default $PATH setting), like
+
+ln -s /usr/local/share/mfile/mfile.tcl /usr/local/bin/mfile
+
+Remember to edit the file makefile_template to suite your needs (e. g.
+default settings, adaptation to non-GNU make utilities).
+
+
+Upgrading an Mfile installation on WinAVR
+-----------------------------------------
+
+Starting with WinAVR 20040404, the WinAVR collection is shipping Mfile
+pre-installed. (After all, the WinAVR users have once been the
+primary reason to develop Mfile at all.)
+
+In order to upgrade the Mfile files supplied with WinAVR, extract the
+archive into some directory, and copy all the files into
+
+<winavr directory>\mfile
+
+That ought to be all that is to be done.
+
+----------------------------------------------------------------------
+Dresden, F. R. Germany, $Date: 2004/07/15 20:51:08 $
+Joerg Wunsch <j.gnu@uriah.heep.sax.de>
diff --git a/temp/mfile/help.html b/temp/mfile/help.html
new file mode 100644
index 0000000..f0398bb
--- /dev/null
+++ b/temp/mfile/help.html
@@ -0,0 +1,165 @@
+<!-- Help text for mfile.tcl -->
+<!--------------------------------------------------------------------------->
+<!-- "THE BEER-WARE LICENSE" (Revision 42) (by Poul-Henning Kamp): -->
+<!-- Joerg Wunsch wrote this file. As long as you retain this notice you -->
+<!-- can do whatever you want with this stuff. If we meet some day, and -->
+<!-- you think this stuff is worth it, you can buy me a beer in return. -->
+<!--------------------------------------------------------------------------->
+<!-- $Id: help.html,v 1.15 2004/07/15 20:51:08 j Exp $ -->
+<html>
+<head><title>Mfile help</title></head>
+<body>
+<h1>Simple Makefile generator for AVR-GCC</h1>
+<p>Copyright © 2003, 2004 Jörg Wunsch</p>
+
+<hr>
+<p>This simple Makefile generator is meant as an aid to quickly
+customize the WinAVR Makefile template, producing a file called
+<tt>Makefile</tt> in the current directory as result.</p>
+
+<p>The application consists of a (scrollable) text editor widget, and
+a menu bar.</p>
+
+<p>The <b>File</b> menu has only two entries:</p>
+
+<ul>
+ <li><b>Save</b> writes the contents of the text editor widget to a
+ file called <tt>Makefile</tt>. Should any file by that name
+ already exist, it will be renamed. Under Unix, a tilde will be
+ appended to the old name, all other platforms append a <tt>.bak</tt>
+ suffix.
+ <li><b>Save As</b> opens a filename selection dialog, and allows
+ the user to select a file to save to. After selecting the file
+ name, it behaves identical to <b>Save</b>.
+ <li><b>Open</b> opens a filename selection dialog, requesting an
+ existing file to be opened by the user. This file will be loaded
+ into the editor buffer, and the <b>Makefile</b> menu will be
+ updated accordingly.
+ <li><b>Exit</b> will quit the application. No checks whatsoever
+ are done to ensure the user has saved his editing work before.
+</ul>
+
+<p>The <b>Makefile</b> menu allows customization of the generated
+Makefile. Note that the various menu items described below will only
+be present if the corresponding feature is present in the parsed
+template or input file. This menu is divided into three areas:</p>
+
+<ul>
+<li><b>Code generation options</b>
+<ul>
+ <li>The entry <b>Main file name</b> opens a popup window that asks
+ for the basic name of this
+ project. This will become the base name for all major output files
+ (ELF file, MCU output file, several auxiliary files). By default, it
+ will also serve as the name of the primary C source file, with a
+ <tt>.c</tt> suffix appended. The popup will be closed by pressing
+ <i><Enter></i> in the entry field.
+ <li>The entries <b>MCU type</b>, <b>Output format</b>,
+ <b>Optimization level</b>,
+ and <b>C standard level</b> select possible values out of a
+ predefined list. When selecting one of these options, the
+ respective Makefile macro will be modified accordingly, and the
+ widget will be adjusted so the new values can be seen
+ immediately.
+ <li>The entry <b>printf() options</b> works similar, only it does
+ not modify a Makefile macro of its own but edits the PRINTF_LIB
+ macro instead. Note that setting this away from
+ <i>none/standard</i> will cause the generated application to
+ always include the code for vfprintf() (which is huge),
+ regardless of whether the application actually uses any member
+ of the printf() family. See the avr-libc documentation for the
+ meaning of the different options.
+ <li>Likewise, changing the <b>scanf() options</b> changes the
+ macro SCANF_LIB, in the same manner. Note that the
+ <tt>scanf()</tt> format %[ (string match out of a set of
+ characters) will only be present in the floating point version
+ since it requires a lot of code, as well as using
+ <tt>malloc()</tt> (which is otherwise only required for the
+ floating point version).
+ <li>The entry <b>C/C++ source file(s)</b> opens a popup that asks
+ for a list of C (or C++) source files. C source files get the
+ suffix <tt>.c</tt> (lower-case letter c), C++ source files get
+ either of <tt>.C</tt> (capital c), <tt>.cxx</tt>, or <tt>.cc</tt>.
+ Multiple file names shall be seperated by spaces. A checkbox
+ indicates whether the primary C source file name derived from
+ the <b>Main file name</b> setting should be included or not.
+ The popup will be closed by pressing <i><Enter></i> in the entry
+ field.
+ <li>The entry <b>Assembler source file(s)</b> works similar
+ except there are no default assembler sources to be included.
+ Note that assembler source files get the suffix <tt>.S</tt>
+ (capital letter s) which means they are being pre-processed by
+ the C preprocessor, so <tt>#include</tt> etc. will work. A
+ lower-case letter <tt>.s</tt> suffix is considered to be a
+ temporary compiler output file, and should not be used here.
+ <li>Using <b>External RAM options</b>, several possible variants
+ to use external RAM can be selected. This is internally handled
+ by editing the EXTMEMOPTS macro which eventually gets added to
+ the LDFLAGS during linking. The options are to either use
+ external RAM for both, variables (i. e. sections .data and .bss)
+ as well as for the heap (dynamic memory for <tt>malloc()</tt>),
+ or to leave variables in internal memory and use the external
+ RAM only for the heap. In both cases, the stack will always
+ remain in internal memory; this is the fastest way, and some
+ AVR MCUs have hardware bugs so they would not work when the
+ stack is located in external RAM. It can be selected whether
+ the external RAM should start at the lowest possible memory
+ location (right behind the internal RAM), or at a different
+ memory address. Several common memory sizes can be chosen from.
+ Obviously, these options are only accessible for MCU types that
+ do have an external memory interface.
+ <li>The entry <b>Debug format</b> selects one out of the following
+ options:
+ <ul>
+ <li><b>ELF/stabs</b> ELF object files with stabs debugging
+ information are currently the native way to debug under Unix
+ and/or GDB. This includes any GDB frontend, like Insight or
+ DDD.
+ <li><b>AVR-COFF</b> Selecting this format will internally also
+ generate an ELF/stabs file, but change the Makefile to
+ subsequently convert the ELF file into a COFF file that adheres
+ to the originally Atmel AVR COFF file format specification.
+ This file format is understood by AVR Studio up to 3.x, and
+ VMLAB up to 3.9.
+ <li><b>AVR-ext-COFF</b> The conversion from internal ELF to
+ COFF will be tuned to produce a file according to the later
+ AVR "extended" COFF specification by Atmel, understood by AVR
+ Studio 4.07 and above, and VMLAB 3.10 and above.
+ <li><b>ELF/DWARF-2</b> Create an ELF standard object file with
+ DWARF-2 debug information. This is the proposed standard debug
+ format for ELF. It is currently Beta, the GNU tools are slowly
+ changing towards that standard (though it is not yet known
+ whether AVR-GDB will already fully understand the format yet),
+ and Atmel has released a beta ELF/DWARF-2 parser for their AVR
+ Studio.
+ </ul>
+</ul>
+<li><b>AVRdude options</b>
+<ul>
+ <li>The entry <b>Programmer</b> allows the selection of
+ the programming hardware (parallel port "dongle", or serially
+ connected hardware).
+ <li>The entry <b>Port</b> selects the serial or parallel
+ port AVRdude is going to talk across. This menu item might
+ be missing on some operating systems where no default ports
+ are known.
+</ul>
+<li><b>Miscellaneous</b>
+<ul>
+ <li>By default, the editor widget is read-only, and can only be
+ modified by the menu entries mentioned above. By checking the
+ <b>Enable Editing of Makefile</b> checkbox, this restriction can be lifted,
+ and the widget can be used as a simple standard text editor for
+ the generated Makefile. Note that the menu operations mentioned
+ above are not guaranteed to work on arbitrary input texts since
+ they search for certain patterns in order to implement their
+ functionality, so manual editing should always be used as a last
+ step before eventually saving the generated Makefile.
+</ul>
+</ul>
+
+</body>
+<address><hr>
+Jörg Wunsch · &lt;j.gnu@uriah.heep.sax.de&gt; ·
+$Date: 2004/07/15 20:51:08 $</address>
+</html>
diff --git a/temp/mfile/htmlview.tcl b/temp/mfile/htmlview.tcl
new file mode 100644
index 0000000..f0b3418
--- /dev/null
+++ b/temp/mfile/htmlview.tcl
@@ -0,0 +1,606 @@
+# ----------------------------------------------------------------------------
+# "THE BEER-WARE LICENSE" (Revision 42) (by Poul-Henning Kamp):
+# Joerg Wunsch <j.gnu@uriah.heep.sax.de> wrote this file. As long as you
+# retain this notice you can do whatever you want with this stuff. If we meet
+# some day, and you think this stuff is worth it, you can buy me a beer
+# in return.
+# ----------------------------------------------------------------------------
+#
+# $Id: htmlview.tcl,v 1.7 2004/07/15 20:50:48 j Exp $
+#
+# This implements a simple HTML viewer that is just suitable to browse through
+# a document generated by latex2html
+#
+
+proc htmlview {file} {
+ global htmlposx htmlposy
+ global tcl_platform
+ global helpicon
+ global tcl_platform
+ global bgcolor
+
+ if {$file == ""} {
+ return
+ }
+
+ set subtag ""
+ # determine requested subtag (if any)
+ if {[regexp "^(\[^\#\]*)\#(.*)" $file dummy match subtag]} {
+ set file $match
+ }
+
+ set f ""
+ catch {set f [open $file]}
+ if {$f == ""} {
+ return
+ }
+
+ set dirname [file dirname $file]
+
+ set ok 0
+ while {!$ok} {
+ set w ".htmlview[expr {int(rand()*30000)}]"
+ if {![winfo exists $w]} {
+ set ok 1
+ }
+ }
+ toplevel $w
+ if {[info exists htmlposx]} {
+ set htmlposx [expr $htmlposx + 10]
+ set htmlposy [expr $htmlposy + 10]
+ } else {
+ set htmlposx [expr [winfo x .] + 80]
+ set htmlposy [expr [winfo y .] + 50]
+ }
+ wm geometry $w "+$htmlposx+$htmlposy"
+ wm positionfrom $w user
+
+ frame $w.f0
+ text $w.f0.t1 -wrap word -yscrollcommand "$w.f0.sb1 set" \
+ -font {Helvetica -12} -cursor {top_left_arrow}
+ scrollbar $w.f0.sb1 -command "$w.f0.t1 yview"
+ frame $w.f1
+ button $w.f1.bok -text {Close} -command "destroy $w"
+ #button $w.f1.closeall -text {Hilfe beenden} -command {destroyhtmlwins}
+ pack $w.f0.t1 -side left -expand 1 -fill both
+ pack $w.f0.sb1 -side right -expand 0 -fill y
+ pack $w.f0 -side top -expand 1 -fill both
+ pack $w.f1.bok -side left
+ #pack $w.f1.closeall -side right
+ pack $w.f1 -side top
+
+ update
+ set x [winfo width $w]
+ set y [winfo height $w]
+ wm minsize $w $x $y
+
+ bind $w <Key-Prior> "$w.f0.t1 yview scroll -10 units"
+ bind $w <Key-Next> "$w.f0.t1 yview scroll 10 units"
+ bind $w <Key-space> "$w.f0.t1 yview scroll 10 units"
+ focus $w
+
+ set bgcolor [$w.f0.t1 cget -background]
+
+ if {$tcl_platform(platform) == "unix" && [file exists $helpicon]} {
+ wm iconbitmap $w @$helpicon
+ }
+
+ set buf ""; set head ""; set tail ""
+ set title ""
+ set list ""; set lcount {1}; set ullevel 0
+ set bold 0; set italic 0; set titlemode 0
+ set tagno 0; set attribs {}; set attrib ""; set justify "left"
+ set paraopen 0
+ set lmargin 0; set rmargin 0
+ set hrno 0; set bulletno 0; set imgno 0
+ set newlineput 0; set anchorhasmodifiedfont 0; set inheadline 0
+
+ while {1} {
+ # if $buf starts with a "<", it means we've got an unfinished yet
+ # tag in there, so we need to read more until the tag is finished
+ # and can be handled in full
+ if {$buf == "" || [string index $buf 0] == "<"} {
+ if {[gets $f lbuf] == -1} {
+ break
+ }
+ if {$lbuf == "" && !$inheadline} {
+ # single newline only, marks a paragraph break
+ set lbuf "<p>"
+ }
+ regsub -all {[\t ]+} $lbuf { } lbuf
+ if {[string index $lbuf end] != " "} {
+ set lbuf "$lbuf "
+ }
+ set buf "$buf$lbuf"
+ }
+ if {[set idx [string first "<" $buf]] != -1} {
+ set head [string range $buf 0 [expr $idx - 1]]
+ set tail [string range $buf $idx end]
+ } else {
+ set head $buf
+ set tail ""
+ }
+ if {[string length $head]} {
+ set head [untangletext $head]
+ if {$titlemode} {
+ set title "$title$head"
+ } else {
+ if {$attrib != ""} {
+ $w.f0.t1 insert end $head $attrib
+ } else {
+ $w.f0.t1 insert end $head
+ }
+ }
+ set head ""
+ }
+ if {[string length $tail]} {
+ if {[set idx [string first ">" $tail]] != -1} {
+ set tag [string range $tail 0 $idx]
+ set buf [string range $tail [expr $idx + 1] end]
+ set tag [string range $tag 1 end-1]
+ set tagname $tag
+ set remainder ""
+ regexp {^(/?[A-Za-z0-9]+) *(.*)} $tag dummy tagname remainder
+ set tagname [string tolower $tagname]
+ switch $tagname {
+ "br" {
+ $w.f0.t1 insert end "\n"
+ }
+ "p" {
+ if {$paraopen && $attrib != ""} {
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ }
+ set align ""
+ while {1} {
+ set x [parsetag $remainder]
+ set name [string tolower [lindex $x 0]]
+ set val [lindex $x 1]
+ set remainder [lindex $x 2]
+
+ if {$name == ""} {
+ break
+ }
+ if {$name == "align"} {
+ set align [string tolower $val]
+ }
+ }
+ if {$align != ""} {
+ set justify "left"
+ switch $align {
+ "center" { set justify "center" }
+ "right" { set justify "right" }
+ }
+ incr tagno
+ lappend attribs $attrib
+ set attrib "attrib$tagno"
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -font {Helvetica -12 bold}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ }
+ $w.f0.t1 insert end "\n"
+ set paraopen 1
+ }
+ "/p" {
+ set paraopen 0
+ if {$attrib != ""} {
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ }
+ }
+ "title" {
+ set titlemode 1
+ set title ""
+ }
+ "/title" {
+ set titlemode 0
+ wm title $w $title
+ }
+ "b" {
+ incr tagno
+ lappend attribs $attrib
+ set attrib "attrib$tagno"
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -font {Helvetica -12 bold}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ }
+ "/b" {
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ }
+ "strong" {
+ incr tagno
+ lappend attribs $attrib
+ set attrib "attrib$tagno"
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -font {Helvetica -12 bold}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ }
+ "/strong" {
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ }
+ "i" {
+ incr tagno
+ lappend attribs $attrib
+ set attrib "attrib$tagno"
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -font {Helvetica -12 italic}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ }
+ "/i" {
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ }
+ "em" {
+ incr tagno
+ lappend attribs $attrib
+ set attrib "attrib$tagno"
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -font {Helvetica -12 italic}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ }
+ "/em" {
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ }
+ "tt" {
+ incr tagno
+ lappend attribs $attrib
+ set attrib "attrib$tagno"
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -font {Courier -12}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ }
+ "/tt" {
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ }
+ "h1" {
+ incr inheadline
+ incr tagno
+ lappend attribs $attrib
+ set attrib "attrib$tagno"
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -font {Times -18 bold}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ }
+ "/h1" {
+ set inheadline [expr $inheadline - 1]
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 insert end "\n\n"
+ }
+ "h2" {
+ incr inheadline
+ incr tagno
+ lappend attribs $attrib
+ set attrib "attrib$tagno"
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -font {Times -16 bold}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ }
+ "/h2" {
+ set inheadline [expr $inheadline - 1]
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 insert end "\n\n"
+ }
+ "h3" {
+ incr inheadline
+ incr tagno
+ lappend attribs $attrib
+ set attrib "attrib$tagno"
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -font {Times -14 bold}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ }
+ "/h3" {
+ set inheadline [expr $inheadline - 1]
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 insert end "\n\n"
+ }
+ "h4" {
+ incr inheadline
+ incr tagno
+ lappend attribs $attrib
+ set attrib "attrib$tagno"
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -font {Times -12 bold}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ }
+ "/h4" {
+ set inheadline [expr $inheadline - 1]
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 insert end "\n\n"
+ }
+ "a" {
+ set target ""
+ while {1} {
+ set x [parsetag $remainder]
+ set name [string tolower [lindex $x 0]]
+ set val [lindex $x 1]
+ set remainder [lindex $x 2]
+
+ if {$name == ""} {
+ break
+ }
+ if {$name == "href"} {
+ set target $val
+ }
+ if {$name == "name" && $subtag == $val} {
+ # subtag was requested, notice it
+ set see [$w.f0.t1 index end]
+ }
+ }
+ if {$target != "" && ![regexp {^(http:|ftp:)} $target]} {
+ switch $tcl_platform(platform) {
+ "windows" {
+ if {![regexp {^([A-Za-z]:)?[\\/]} $target]} {
+ # relative pathname
+ set target "$dirname/$target"
+ }
+ }
+ "unix" {
+ if {![regexp {^/} $val]} {
+ # relative unix pathname
+ set target "$dirname/$target"
+ }
+ }
+ }
+ set anchorhasmodifiedfont 1
+ incr tagno
+ lappend attribs $attrib
+ set attrib "attrib$tagno"
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -foreground {blue}
+ $w.f0.t1 tag configure $attrib -font {Helvetica -12 bold}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ $w.f0.t1 tag bind $attrib <ButtonPress> "htmlview $target"
+ }
+ }
+ "/a" {
+ if {$anchorhasmodifiedfont} {
+ set anchorhasmodifiedfont 0
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ }
+ }
+ "ul" {
+ set list "ul"
+ incr ullevel
+ incr tagno
+ lappend attribs $attrib
+ set attrib "attrib$tagno"
+ set lmargin [expr 40 * $ullevel - 10]
+ set rmargin [expr 40 * $ullevel]
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -font {Helvetica -12}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ }
+ "/ul" {
+ set ullevel [expr $ullevel - 1]
+ if {$ullevel == 0} {
+ set list ""
+ set lmargin 0
+ set rmargin 0
+ } else {
+ set lmargin [expr 40 * $ullevel - 10]
+ set rmargin [expr 40 * $ullevel]
+ }
+ set attrib [lindex $attribs end]
+ set attribs [lrange $attribs 0 end-1]
+ $w.f0.t1 tag add $attrib end
+ $w.f0.t1 tag configure $attrib -font {Helvetica -12}
+ $w.f0.t1 tag configure $attrib -lmargin1 $lmargin -lmargin2 $lmargin \
+ -rmargin $rmargin -justify $justify
+ $w.f0.t1 insert end "\n"
+ }
+ "li" {
+ switch $list {
+ "ul" {
+ incr bulletno
+ canvas $w.bullet$bulletno \
+ -width [expr 40 * $ullevel - 15] -height 6 \
+ -background $bgcolor -highlightthickness 0 \
+ -border 0
+ if {$ullevel == 1} {
+ $w.bullet$bulletno create oval 11 1 14 4
+ } else {
+ $w.bullet$bulletno create rectangle \
+ [expr 40 * $ullevel - 29] 1 [expr 40 * $ullevel - 26] 4
+ }
+ $w.f0.t1 insert end "\n" $attrib
+ $w.f0.t1 window create end -align baseline \
+ -window $w.bullet$bulletno
+ }
+ }
+ }
+ "address" {
+ set attrib ""
+ set attribs {}
+ $w.f0.t1 insert end "\n"
+ }
+ "hr" {
+ update
+ incr hrno
+ makehr $w.hr$hrno [expr [winfo width $w.f0.t1] - 10]
+ $w.f0.t1 insert end "\n" $attrib
+ $w.f0.t1 window create end -window $w.hr$hrno
+ }
+ "img" {
+ set iwidth 0
+ set iheight 0
+ set ialign "bottom"
+ set isrc ""
+ while {1} {
+ set x [parsetag $remainder]
+ set name [string tolower [lindex $x 0]]
+ set val [lindex $x 1]
+ set remainder [lindex $x 2]
+
+ if {$name == ""} {
+ break
+ }
+ switch $name {
+ "width" { set iwidth $val }
+ "height" { set iheight $val }
+ "src" {
+ switch $tcl_platform(platform) {
+ "windows" {
+ if {[regexp {^([A-Za-z]:)?[\\/]} $val]} {
+ # absolute pathname
+ set isrc $val
+ } else {
+ set isrc "$dirname/$val"
+ }
+ }
+ "unix" {
+ if {[regexp {^/} $val]} {
+ # absolute unix pathname
+ set isrc $val
+ } else {
+ set isrc "$dirname/$val"
+ }
+ }
+ }
+ }
+ "align" { set ialign [string tolower $val] }
+ }
+ }
+ if {$isrc != "" && [file exists $isrc]} {
+ incr imgno
+ image create photo htmlview$imgno \
+ -width $iwidth -height $iheight \
+ -file $isrc
+ set imgidx [$w.f0.t1 image create end -image htmlview$imgno]
+ $w.f0.t1 tag add $attrib $imgidx
+ $w.f0.t1 tag add $attrib end
+ }
+ }
+ }
+ } else {
+ # unfinished tag, return to $buf
+ set buf $tail
+ }
+ } else {
+ set buf ""
+ }
+ }
+ close $f
+ # prevent users from editing the text widget's contents
+ $w.f0.t1 configure -state disabled
+ if {[info exists see]} {
+ # we have a subtag to display
+ $w.f0.t1 see $see
+ }
+}
+
+# parse $str, obtain first name=value pair, return remainder as well
+proc parsetag {str} {
+ # first check for quoted value
+ if {[regexp {^([A-Za-z0-9_]+) *= *"([^\"]+)" *(.*)} $str dummy name val rem]} {
+ return [list $name $val $rem]
+ }
+ # else check for argument that must not contain a space
+ if {[regexp {^([A-Za-z0-9_]+) *= *([^ ]+) *(.*)} $str dummy name val rem]} {
+ return [list $name $val $rem]
+ }
+ # else we fail
+ return [list "" "" ""]
+}
+
+# proc destroyhtmlwins {} {
+# global htmlposx htmlposy
+
+# foreach win [winfo children .] {
+# if {[string match {.htmlview[0-9]*} $win]} {
+# destroy $win
+# }
+# }
+
+# foreach img [image names] {
+# if {[string match {htmlview[0-9]+} $img]} {
+# image delete $img
+# }
+# }
+
+# set htmlposx [expr [winfo x .] + 80]
+# set htmlposy [expr [winfo y .] + 50]
+# }
+
+proc makehr {c w} {
+ global bgcolor
+
+ canvas $c -width $w -height 6 -background $bgcolor \
+ -highlightthickness 0
+ $c create line 2 2 [expr $w - 2] 2 -width 1 -fill "\#202020"
+ $c create line 2 2 2 4 -width 1 -fill "\#202020"
+ $c create line 3 4 [expr $w - 1] 4 -width 1 -fill "\#ffffff"
+ $c create line [expr $w - 2] 4 [expr $w - 2] 2 -width 1 -fill "\#ffffff"
+}
+
+proc untangletext {t} {
+
+ set result ""
+ set ok 1
+
+ while {$ok} {
+ if {[regexp {^([^&]*)&([^;]+);(.*)} $t dummy left marked right]} {
+ set result "$result$left"
+ set t $right
+ switch -glob $marked {
+ "Auml" { set result "${result}Ä" }
+ "Ouml" { set result "${result}Ö" }
+ "Uuml" { set result "${result}Ü" }
+ "auml" { set result "${result}ä" }
+ "ouml" { set result "${result}ö" }
+ "uuml" { set result "${result}ü" }
+ "szlig" { set result "${result}ß" }
+ "nbsp" { set result "${result} " }
+ "amp" { set result "${result}&" }
+ "lt" { set result "${result}<" }
+ "gt" { set result "${result}>" }
+ "\#[0-9]*" {
+ regexp {^.(.*)} $marked dummy c
+ set c [subst "\\[format {%o} $c]"]
+ set result ${result}$c
+ }
+ "*" {
+ # puts stderr "Warning: unknown html mark $marked"
+ }
+ }
+ } else {
+ set result "$result$t"
+ set ok 0
+ }
+ }
+
+ return $result
+}
diff --git a/temp/mfile/htmlview.xbm b/temp/mfile/htmlview.xbm
new file mode 100644
index 0000000..667414f
--- /dev/null
+++ b/temp/mfile/htmlview.xbm
@@ -0,0 +1,14 @@
+#define htmlview_width 32
+#define htmlview_height 32
+static unsigned char htmlview_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x42, 0x00, 0x00, 0x60,
+ 0xc6, 0x00, 0x02, 0x60, 0xc6, 0x00, 0x06, 0x60, 0xc6, 0x00, 0x06, 0x60,
+ 0xc6, 0x00, 0x06, 0x60, 0xc6, 0x00, 0x06, 0x60, 0xc6, 0x00, 0x06, 0x60,
+ 0xc6, 0x00, 0x06, 0x60, 0xfe, 0x1c, 0xc6, 0x63, 0xfe, 0x36, 0xc6, 0x67,
+ 0xc6, 0x66, 0xc6, 0x66, 0xc6, 0x7e, 0xc6, 0x66, 0xc6, 0x7e, 0xc6, 0x66,
+ 0xc6, 0x06, 0xc6, 0x66, 0xc6, 0x0e, 0xc6, 0x06, 0xc6, 0x3c, 0xce, 0x67,
+ 0xc6, 0x78, 0xcc, 0x63, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00,
+ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
diff --git a/temp/mfile/makefile_template b/temp/mfile/makefile_template
new file mode 100644
index 0000000..b7bc0f6
--- /dev/null
+++ b/temp/mfile/makefile_template
@@ -0,0 +1,223 @@
+# Hey Emacs, this is a -*- makefile -*-
+
+# AVR-GCC Makefile template, derived from the WinAVR template (which
+# is public domain), believed to be neutral to any flavor of "make"
+# (GNU make, BSD make, SysV make)
+
+
+MCU = atmega128
+FORMAT = ihex
+TARGET = main
+SRC = $(TARGET).c
+ASRC =
+OPT = s
+
+# Name of this Makefile (used for "make depend").
+MAKEFILE = Makefile
+
+# Debugging format.
+# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2.
+# AVR (extended) COFF requires stabs, plus an avr-objcopy run.
+DEBUG = stabs
+
+# Compiler flag to set the C Standard level.
+# c89 - "ANSI" C
+# gnu89 - c89 plus GCC extensions
+# c99 - ISO C99 standard (not yet fully implemented)
+# gnu99 - c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS =
+
+# Place -I options here
+CINCS =
+
+
+CDEBUG = -g$(DEBUG)
+CWARN = -Wall -Wstrict-prototypes
+CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+#CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA)
+
+
+#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#Additional libraries.
+
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+PRINTF_LIB =
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+SCANF_LIB =
+
+MATH_LIB = -lm
+
+# External memory options
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+# Programming support using avrdude. Settings and variables.
+
+AVRDUDE_PROGRAMMER = stk200
+AVRDUDE_PORT = /dev/lp0
+
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level. Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER)
+
+
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+MV = mv -f
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+# Default target.
+all: build
+
+build: elf hex eep
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+ $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+ $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof
+
+
+.SUFFIXES: .elf .hex .eep .lss .sym
+
+.elf.hex:
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+.elf.eep:
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+ --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+.elf.lss:
+ $(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+.elf.sym:
+ $(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+$(TARGET).elf: $(OBJ)
+ $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+.c.o:
+ $(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+.c.s:
+ $(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+.S.o:
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+
+
+# Target: clean project.
+clean:
+ $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \
+ $(TARGET).map $(TARGET).sym $(TARGET).lss \
+ $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d)
+
+depend:
+ if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \
+ then \
+ sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \
+ $(MAKEFILE).$$$$ && \
+ $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \
+ fi
+ echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \
+ >> $(MAKEFILE); \
+ $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE)
+
+.PHONY: all build elf hex eep lss sym program coff extcoff clean depend
diff --git a/temp/mfile/mfile.tcl b/temp/mfile/mfile.tcl
new file mode 100755
index 0000000..c25a3dc
--- /dev/null
+++ b/temp/mfile/mfile.tcl
@@ -0,0 +1,1601 @@
+#!/usr/local/bin/tixwish
+# ----------------------------------------------------------------------------
+# "THE BEER-WARE LICENSE" (Revision 42) (by Poul-Henning Kamp):
+# Joerg Wunsch <j.gnu@uriah.heep.sax.de> wrote this file. As long as you
+# retain this notice you can do whatever you want with this stuff. If we meet
+# some day, and you think this stuff is worth it, you can buy me a beer
+# in return.
+# ----------------------------------------------------------------------------
+#
+# Simple Makefile generator for AVR-GCC
+#
+# $Id: mfile.tcl,v 1.46 2006/01/19 13:20:51 j Exp $
+
+# Full path name where various files will be found
+
+if {[info exists env(MFILE_HOME)]} {
+ set prefix $env(MFILE_HOME)
+} else {
+ if {$tcl_platform(platform) == "unix"} {
+ set prefix "/usr/local/share/mfile"
+ } else {
+ set prefix "."
+ }
+}
+
+set templatename "$prefix/makefile_template"
+set helpfile "$prefix/help.html"
+set mainicon "$prefix/mfile.xbm"
+set helpicon "$prefix/htmlview.xbm"
+
+global helpfile mainicon helpicon
+
+# color to highlight changed items with
+global highlight
+set highlight "\#ffff80"
+
+#
+# end of configurable section
+#
+
+global devicelist
+set devicelist \
+ { {at90can32 0x800900}\
+ {at90can64 0x801100} \
+ {at90can128 0x801100} \
+ at90s1200 \
+ at90s2313 \
+ at90s2323 \
+ at90s2333 \
+ at90s2343 \
+ {at90s4414 0x800160} \
+ at90s4433 \
+ at90s4434 \
+ {at90s8515 0x800260} \
+ at90s8535 \
+ {atmega103 0x801000} \
+ {atmega128 0x801100} \
+ {atmega1280 0x802200} \
+ {atmega1281 0x802200} \
+ atmega16 \
+ {atmega161 0x800460} \
+ {atmega162 0x800500} \
+ atmega163 \
+ atmega164 \
+ atmega165 \
+ atmega168 \
+ atmega169 \
+ atmega32 \
+ atmega323 \
+ atmega324 \
+ atmega325 \
+ atmega3250 \
+ atmega329 \
+ atmega3290 \
+ atmega48 \
+ {atmega64 0x801100} \
+ {atmega640 0x802200} \
+ atmega644 \
+ atmega645 \
+ atmega6450 \
+ atmega649 \
+ atmega6490 \
+ atmega8 \
+ {atmega8515 0x800260} \
+ atmega8535 \
+ atmega88
+ attiny11 \
+ attiny12 \
+ attiny13 \
+ attiny15 \
+ attiny22 \
+ attiny2313 \
+ attiny24 \
+ attiny25 \
+ attiny26 \
+ attiny261 \
+ attiny28 \
+ attiny44 \
+ attiny45 \
+ attiny461 \
+ attiny84 \
+ attiny85 \
+ attiny861 \
+ at94K \
+ at76c711 \
+ at43usb320 \
+ at43usb355 \
+ at86rf401}
+
+global makefile
+
+global filename
+set filename "Makefile"
+global basename
+set basename $filename
+
+global backupsuffix
+if {$tcl_platform(platform) == "unix"} {
+ set backupsuffix "~"
+} else {
+ set backupsuffix ".bak"
+}
+
+global extmemparts
+foreach m $devicelist {
+ if {[llength $m] > 1} {
+ set extmemparts([lindex $m 0]) [lindex $m 1]
+ }
+}
+
+global extmemmax memoffset
+set extmemmax [expr 0x80ffff]
+set memoffset [expr 0x800000]
+
+proc parsetemplate {fname} {
+ global makefile
+
+ set fh [open $fname]
+ set template [read $fh]
+ close $fh
+
+ global mainfile mcutype oformat optlevel stdlevel src mainfilesrc
+ global asrc printfopts scanfopts deftarget avrdudeprog avrdudeport
+ global dformat
+ global extmemsize extmemstart extmemopts
+ global extmemmax extmemparts memoffset
+
+ foreach v { mainfile mcutype oformat optlevel stdlevel src \
+ mainfilesrc asrc printfopts scanfopts deftarget \
+ avrdudeprog avrdudeport dformat \
+ extmemsize extmemstart extmemopts} {
+ if {[info exists $v]} {
+ unset $v
+ }
+ }
+
+ # Now parse what we've got, and allocate our
+ # internal variables
+ if {[regexp {(?n)^MCU\s*=\s*(\S+)} $template dummy x]} {
+ set mcutype $x
+ }
+
+ if {[regexp {(?n)^TARGET\s*=\s*(\S+)} $template dummy x]} {
+ set mainfile $x
+ }
+
+ if {[regexp {(?n)^FORMAT\s*=\s*(\S+)} $template dummy x]} {
+ set oformat $x
+ }
+
+ if {[regexp {(?n)^OPT\s*=\s*(\S+)} $template dummy x]} {
+ set optlevel $x
+ }
+
+ if {[regexp {(?n)^DEBUG\s*=\s*(\S+)} $template dummy x]} {
+ set dformat $x
+ }
+
+ if {[regexp {(?n)^CSTANDARD\s*=\s*-std=(\S+)} $template dummy x]} {
+ set stdlevel $x
+ }
+
+ if {[regexp {(?n)^SRC\s*=\s*(.*)$} $template dummy x]} {
+ if {[regexp {(.*)\$[(]TARGET[)].c(.*)} $x dummy y z]} {
+ # replace multiple consecutive spaces by just one
+ regsub -all {\s+} "$y$z" " " y
+ set src $y
+ # mainfilesrc == 1 means include $(TARGET).c into SRC
+ set mainfilesrc 1
+ } else {
+ set src $x
+ # mainfilesrc == 0 means do not include $(TARGET).c into SRC
+ set mainfilesrc 0
+ }
+ }
+
+ if {[regexp {(?n)^ASRC\s*=\s*(\S+)} $template dummy x]} {
+ set asrc ""
+ }
+
+ if {[regexp {(?n)^PRINTF_LIB\s*=\s*(\S+)} $template dummy x]} {
+ if {$x == {$(PRINTF_LIB_MIN)}} {
+ set printfopts "min"
+ } elseif {$x == {$(PRINTF_LIB_FLOAT)}} {
+ set printfopts "flt"
+ } else {
+ set printfopts "none"
+ }
+ }
+
+ if {[regexp {(?n)^SCANF_LIB\s*=\s*(\S+)} $template dummy x]} {
+ if {$x == {$(SCANF_LIB_MIN)}} {
+ set scanfopts "min"
+ } elseif {$x == {$(SCANF_LIB_FLOAT)}} {
+ set scanfopts "flt"
+ } else {
+ set scanfopts "none"
+ }
+ }
+
+ if {[regexp {(?n)^EXTMEMOPTS\s*=(.*)$} $template dummy x]} {
+ if {[regexp -- {--section-start[,=]\.data=([0-9a-fA-Fx]+).*__heap_end=([0-9a-fA-Fx]+)} \
+ $x dummy y1 y2]} {
+ # variables & heap are in external RAM
+ set extmemopts "vars"
+ } elseif {[regexp \
+ {__heap_start=([0-9a-fA-Fx]+).*__heap_end=([0-9a-fA-Fx]+)} \
+ $x dummy y1 y2]} {
+ # only heap in external RAM
+ set extmemopts "heap"
+ } else {
+ set extmemopts "none"
+ if {$x != ""} {
+ complain "Unknown EXTMEMOPTS $x, ignored"
+ }
+ }
+ if {$extmemopts != "none"} {
+ set extmemstart [expr $y1]
+ if {[expr $y2 == $extmemmax]} {
+ set extmemsize [expr $extmemmax + 1]
+ } else {
+ set extmemsize [expr $y2 - $y1 + 1]
+ }
+ if {[info exists mcutype]} {
+ if {[info exists extmemparts($mcutype)]} {
+ if {[expr $extmemparts($mcutype) == $y1]} {
+ # extmemstart == 0 means "lowest possible value"
+ set extmemstart 0
+ }
+ }
+ }
+ }
+ }
+
+ if {[regexp {(?n)^build:\s*(.*)$} $template dummy x]} {
+ if {[regexp {\sextcoff\s*$} $x]} {
+ set deftarget "extcoff"
+ } elseif {[regexp {\scoff\s*$} $x]} {
+ set deftarget "coff"
+ } else {
+ set deftarget "none"
+ }
+ }
+
+ if {[regexp {(?n)^AVRDUDE_PROGRAMMER\s*=\s*(\S+)} $template dummy x]} {
+ set avrdudeprog $x
+ }
+
+ if {[regexp {(?n)^AVRDUDE_PORT\s*=\s*(\S+)} $template dummy x]} {
+ set avrdudeport $x
+ }
+
+ set makefile $template
+}
+
+proc makemfilemenu {} {
+ global tcl_platform
+ global devicelist xram
+ global mainfile mcutype oformat optlevel stdlevel src mainfilesrc
+ global asrc printfopts scanfopts deftarget avrdudeprog avrdudeport
+ global dformat debugidx
+ global extmemsize extmemstart extmemopts
+ global extmemmax extmemparts extmemmentry memoffset
+
+ .f1.f1.mb2.m1 delete 0 last
+ foreach w [winfo children .f1.f1.mb2.m1] {
+ destroy $w
+ }
+
+ .f1.f1.mb2.m1 add command -label {Code generation} -state disabled
+ if {[info exists mainfile]} {
+ .f1.f1.mb2.m1 add command -command {setmainfile} \
+ -label "Main file name..." -underline 0
+ }
+ if {[info exists mcutype]} {
+ .f1.f1.mb2.m1 add cascade -menu .f1.f1.mb2.m1.c1 \
+ -label "MCU type" \
+ -underline 2
+ }
+ if {[info exists oformat]} {
+ .f1.f1.mb2.m1 add cascade -menu .f1.f1.mb2.m1.c2 \
+ -label "Output format" \
+ -underline 7
+ }
+ if {[info exists optlevel]} {
+ .f1.f1.mb2.m1 add cascade -menu .f1.f1.mb2.m1.c3 \
+ -label "Optimization level" \
+ -underline 0
+ }
+ if {[info exists dformat]} {
+ .f1.f1.mb2.m1 add cascade -menu .f1.f1.mb2.m1.c30 \
+ -label "Debug format" \
+ -underline 0
+ }
+ if {[info exists stdlevel]} {
+ .f1.f1.mb2.m1 add cascade -menu .f1.f1.mb2.m1.c31 \
+ -label "C standard level" \
+ -underline 2
+ }
+ if {[info exists src]} {
+ .f1.f1.mb2.m1 add command -command {asksrc} \
+ -label "C/C++ source file(s)..." -underline 0
+ }
+ if {[info exists asrc]} {
+ .f1.f1.mb2.m1 add command -command {setasrc} \
+ -label "Assembler source file(s)..." -underline 0
+ }
+ if {[info exists printfopts]} {
+ .f1.f1.mb2.m1 add cascade -menu .f1.f1.mb2.m1.c4 \
+ -label "printf() options" \
+ -underline 0
+ }
+ if {[info exists scanfopts]} {
+ .f1.f1.mb2.m1 add cascade -menu .f1.f1.mb2.m1.c41 \
+ -label "scanf() options" \
+ -underline 3
+ }
+ if {[info exists extmemopts]} {
+ .f1.f1.mb2.m1 add cascade -menu .f1.f1.mb2.m1.c42 \
+ -label "External RAM options" \
+ -underline 1 -state disabled
+ set extmemmentry [.f1.f1.mb2.m1 index end]
+ if {[info exists mcutype]} {
+ if {[info exists extmemparts($mcutype)]} {
+ .f1.f1.mb2.m1 entryconfigure $extmemmentry \
+ -state normal
+ }
+ }
+ }
+ if {[info exists deftarget] && ! [info exists dformat]} {
+ .f1.f1.mb2.m1 add cascade -menu .f1.f1.mb2.m1.c5 \
+ -label "Default \"make\" target" \
+ -underline 15
+ }
+
+ .f1.f1.mb2.m1 add separator
+ .f1.f1.mb2.m1 add command -label {AVRdude} -state disabled
+
+ switch $tcl_platform(platform) {
+ "windows" {
+ set portlist {usb com1 com2 com3 com4 lpt1 lpt2 lpt3}
+ }
+ "unix" {
+ switch $tcl_platform(os) {
+ "Linux" {
+ set portlist {usb /dev/ttyS0 /dev/ttyS1 /dev/ttyS2 /dev/ttyS3 \
+ /dev/parport0 /dev/parport1 /dev/parport2}
+ }
+ "FreeBSD" {
+ set portlist {usb dev/cuaa0 /dev/cuaa1 /dev/cuaa2 /dev/cuaa3 \
+ /dev/ppi0 /dev/ppi1 /dev/ppi2}
+ }
+ "Solaris" {
+ set portlist {usb /dev/term/a /dev/term/b /dev/printers/0}
+ }
+ }
+ }
+ }
+
+ if {[info exists avrdudeprog]} {
+ .f1.f1.mb2.m1 add cascade -menu .f1.f1.mb2.m1.c6 \
+ -label {Programmer} \
+ -underline 3
+ }
+ if {[info exists portlist] && [info exists avrdudeport]} {
+ .f1.f1.mb2.m1 add cascade -menu .f1.f1.mb2.m1.c7 \
+ -label {Port} \
+ -underline 2
+ }
+
+ .f1.f1.mb2.m1 add separator
+ .f1.f1.mb2.m1 add command -label {Miscellaneous} -state disabled
+ .f1.f1.mb2.m1 add checkbutton -variable editwidget \
+ -label "Enable Editing of Makefile" \
+ -command changeeditable \
+ -onvalue normal -offvalue disabled
+
+ .f1.f1.mb2 configure -menu .f1.f1.mb2.m1
+
+ if {[info exists mcutype]} {
+ menu .f1.f1.mb2.m1.c1 -tearoff 0
+ .f1.f1.mb2.m1.c1 add cascade -menu .f1.f1.mb2.m1.c1.at90 \
+ -label "AT90" -underline 2
+ .f1.f1.mb2.m1.c1 add cascade -menu .f1.f1.mb2.m1.c1.atmega \
+ -label "ATmega" -underline 2
+ .f1.f1.mb2.m1.c1 add cascade -menu .f1.f1.mb2.m1.c1.attiny \
+ -label "ATtiny" -underline 2
+ .f1.f1.mb2.m1.c1 add cascade -menu .f1.f1.mb2.m1.c1.other \
+ -label "Other" -underline 0
+
+ menu .f1.f1.mb2.m1.c1.at90 -tearoff 0
+ menu .f1.f1.mb2.m1.c1.atmega -tearoff 0
+ menu .f1.f1.mb2.m1.c1.attiny -tearoff 0
+ menu .f1.f1.mb2.m1.c1.other -tearoff 0
+
+ foreach m $devicelist {
+ set mcu [lindex $m 0]
+ if {[llength $mcu] > 1} {
+ set xram($mcu) [lindex $m 1]
+ }
+ switch -glob $mcu {
+ "at90*" {
+ .f1.f1.mb2.m1.c1.at90 add radiobutton -variable mcutype \
+ -label $mcu -command setmcu
+ }
+ "atmega*" {
+ .f1.f1.mb2.m1.c1.atmega add radiobutton -variable mcutype \
+ -label $mcu -command setmcu
+ }
+ "attiny*" {
+ .f1.f1.mb2.m1.c1.attiny add radiobutton -variable mcutype \
+ -label $mcu -command setmcu
+ }
+ "*" {
+ .f1.f1.mb2.m1.c1.other add radiobutton -variable mcutype \
+ -label $mcu -command setmcu
+ }
+ }
+ }
+ }
+
+ if {[info exists oformat]} {
+ menu .f1.f1.mb2.m1.c2 -tearoff 0
+
+ foreach f {srec ihex binary} {
+ .f1.f1.mb2.m1.c2 add radiobutton -variable oformat \
+ -label $f -command setoformat
+ }
+ }
+
+ if {[info exists optlevel]} {
+ menu .f1.f1.mb2.m1.c3 -tearoff 0
+
+ foreach f {0 1 s 2 3} {
+ .f1.f1.mb2.m1.c3 add radiobutton -variable optlevel \
+ -label $f -command setoptlevel
+ }
+ }
+
+ if {[info exists dformat]} {
+ menu .f1.f1.mb2.m1.c30 -tearoff 0
+
+ if {[info exists deftarget]} {
+ # We've got both, DEBUG and the default target selection.
+ # Join them into a single menu entry.
+ if {$dformat == "dwarf-2"} {
+ set debugidx 3
+ } elseif {$deftarget == "none"} {
+ set debugidx 0
+ } elseif {$deftarget == "coff"} {
+ set debugidx 1
+ } elseif {$deftarget == "extcoff"} {
+ set debugidx 2
+ } else {
+ set debugidx 0
+ }
+ # Note that the order of the setdeftarget and setdformat
+ # calls below determines which of the edited fields will
+ # be displayed highlighted to the user. The last one
+ # wins. Thus, we highlight the stabs vs. dwarf-2 decision
+ # for the ELF formats, or the default build target for the
+ # COFF formats.
+ .f1.f1.mb2.m1.c30 add radiobutton \
+ -variable debugidx -value 0 \
+ -label "ELF/stabs (GDB/Insight)" \
+ -command {set dformat "stabs"; set deftarget "none"; \
+ setdeftarget; setdformat }
+ .f1.f1.mb2.m1.c30 add radiobutton \
+ -variable debugidx -value 1 \
+ -label "AVR-COFF (AVR Studio 3.x, VMLAB < 3.10)" \
+ -command {set dformat "stabs"; set deftarget "coff"; \
+ setdformat; setdeftarget }
+ .f1.f1.mb2.m1.c30 add radiobutton \
+ -variable debugidx -value 2 \
+ -label "AVR-ext-COFF (AVR Studio 4.07+, VMLAB 3.10+)" \
+ -command {set dformat "stabs"; set deftarget "extcoff"; \
+ setdformat; setdeftarget }
+ .f1.f1.mb2.m1.c30 add radiobutton \
+ -variable debugidx -value 3 \
+ -label {ELF/DWARF-2 (AVR Studio ELF, GDB [experimental])} \
+ -command {set dformat "dwarf-2"; set deftarget "none"; \
+ setdeftarget; setdformat }
+ } else {
+ foreach f {stabs dwarf-2} {
+ .f1.f1.mb2.m1.c30 add radiobutton -variable dformat \
+ -label $f -command setdformat
+ }
+ }
+ }
+
+ if {[info exists stdlevel]} {
+ menu .f1.f1.mb2.m1.c31 -tearoff 0
+
+ foreach f {c89 gnu89 c99 gnu99} {
+ .f1.f1.mb2.m1.c31 add radiobutton -variable stdlevel \
+ -label $f -command setstdlevel
+ }
+ }
+
+ if {[info exists printfopts]} {
+ menu .f1.f1.mb2.m1.c4 -tearoff 0
+
+ .f1.f1.mb2.m1.c4 add radiobutton -variable printfopts \
+ -label "none/standard" -underline 0 -value "none" -command setprintfopts
+ .f1.f1.mb2.m1.c4 add radiobutton -variable printfopts \
+ -label "minimalistic" -underline 0 -value "min" -command setprintfopts
+ .f1.f1.mb2.m1.c4 add radiobutton -variable printfopts \
+ -label "floating point" -underline 0 -value "flt" -command setprintfopts
+ }
+
+ if {[info exists scanfopts]} {
+ menu .f1.f1.mb2.m1.c41 -tearoff 0
+
+ .f1.f1.mb2.m1.c41 add radiobutton -variable scanfopts \
+ -label "none/standard" -underline 0 -value "none" -command setscanfopts
+ .f1.f1.mb2.m1.c41 add radiobutton -variable scanfopts \
+ -label "minimalistic" -underline 0 -value "min" -command setscanfopts
+ .f1.f1.mb2.m1.c41 add radiobutton -variable scanfopts \
+ -label "floating point + %\[" -underline 0 -value "flt" -command setscanfopts
+ }
+
+ if {[info exists extmemopts]} {
+ menu .f1.f1.mb2.m1.c42 -tearoff 0
+
+ .f1.f1.mb2.m1.c42 add radiobutton -variable extmemopts \
+ -label "none" -underline 0 -value "none" -command setextmemopts
+ .f1.f1.mb2.m1.c42 add radiobutton -variable extmemopts \
+ -label "variables & heap" -underline 0 -value "vars" -command setextmemopts
+ .f1.f1.mb2.m1.c42 add radiobutton -variable extmemopts \
+ -label "heap only" -underline 0 -value "heap" -command setextmemopts
+ .f1.f1.mb2.m1.c42 add cascade -menu .f1.f1.mb2.m1.c42.c1 \
+ -label "Ext. memory start" -underline 5
+ .f1.f1.mb2.m1.c42 add cascade -menu .f1.f1.mb2.m1.c42.c2 \
+ -label "Ext. memory size" -underline 14
+
+ menu .f1.f1.mb2.m1.c42.c1 -tearoff 0
+ foreach m {0 1024 2048 4096 8192 16384 32768} {
+ if {$m == 0} {
+ set s "lowest possible"
+ set v 0
+ } else {
+ set s [format {%d KB} [expr $m / 1024]]
+ set v [expr $m + $memoffset]
+ }
+ .f1.f1.mb2.m1.c42.c1 add radiobutton -variable extmemstart \
+ -label $s -value $v \
+ -command setextmemopts
+ }
+
+ menu .f1.f1.mb2.m1.c42.c2 -tearoff 0
+ foreach m {1024 2048 4096 8192 16384 32768 65536} {
+ set s [format {%d KB} [expr $m / 1024]]
+ .f1.f1.mb2.m1.c42.c2 add radiobutton -variable extmemsize \
+ -label $s -value [expr $m] \
+ -command setextmemopts
+ }
+ }
+
+ if {[info exists deftarget] && ! [info exists dformat]} {
+ menu .f1.f1.mb2.m1.c5 -tearoff 0
+
+ .f1.f1.mb2.m1.c5 add radiobutton -variable deftarget \
+ -label "standard (ELF + ihex/srec/binary)" -underline 0 \
+ -value "none" -command setdeftarget
+ .f1.f1.mb2.m1.c5 add radiobutton -variable deftarget \
+ -label "AVR \"Extended\" COFF (AVR Studio 4.07+, VMLAB 3.10+)" -underline 6 \
+ -value "extcoff" -command setdeftarget
+ .f1.f1.mb2.m1.c5 add radiobutton -variable deftarget -underline 4 \
+ -label "AVR COFF (AVR Studio 3.x, VMLAB < 3.10)" \
+ -value "coff" -command setdeftarget
+ }
+
+ if {[info exists avrdudeprog]} {
+ menu .f1.f1.mb2.m1.c6 -tearoff 0
+
+ foreach p [lsort {dasa3 dasa ponyser dapa xil futurlec \
+ abcmini picoweb sp12 alf bascom dt006 \
+ pony-stk200 stk200 pavr jtag2 jtag2fast \
+ jtag2slow jtagmkII jtagmkI avr911 avr109 \
+ butterfly avr910 stk500v2 stk500 avrisp2 \
+ avrispv2 avrisp bsd }] {
+ .f1.f1.mb2.m1.c6 add radiobutton -variable avrdudeprog \
+ -label $p -command setavrdudeprog
+ }
+ }
+
+ if {[info exists portlist] && [info exists avrdudeport]} {
+ menu .f1.f1.mb2.m1.c7 -tearoff 0
+
+ foreach p $portlist {
+ .f1.f1.mb2.m1.c7 add radiobutton -variable avrdudeport \
+ -label $p -command setavrdudeport
+ }
+ }
+
+}
+
+proc writefile {fname} {
+ global backupsuffix makefile modified
+
+ if {[file exists $fname]} {
+ file rename -force $fname "$fname$backupsuffix"
+ }
+ set makefile [.f1.f2.f1.t1 get 1.0 end]
+ set f [open $fname "w"]
+ puts $f $makefile
+ close $f
+ set modified 0
+}
+
+proc about {} {
+ toplevel .about
+
+ set x [winfo pointerx .]
+ set y [winfo pointery .]
+ if {$x != -1 && $y != -1} {
+ wm geometry .about "+[expr $x - 250]+[expr $y - 100]"
+ }
+ wm title .about {About Mfile}
+ wm resizable .about 0 0
+
+ frame .about.f1
+ message .about.f1.m1 \
+ -relief sunken \
+ -width 500 \
+ -text \
+{Mfile - Simple Makefile generator for AVR-GCC
+
+Copyright © 2003,2004 Jörg Wunsch
+
+$Revision: 1.46 $ $Date: 2006/01/19 13:20:51 $
+
+"THE BEER-WARE LICENSE" (Revision 42) (by Poul-Henning Kamp):
+Joerg Wunsch <j.gnu@uriah.heep.sax.de> wrote this file. As long as you
+retain this notice you can do whatever you want with this stuff. If we meet
+some day, and you think this stuff is worth it, you can buy me a beer
+in return.}
+ button .about.f1.ok -command {destroy .about} -text {OK}
+
+ pack configure .about.f1.m1 -side top
+ pack configure .about.f1.ok -side bottom
+ pack configure .about.f1
+
+ tkwait window .about
+}
+
+proc setmcu {} {
+ global mcutype
+ global editwidget
+ global highlight modified
+ global extmemmentry extmemparts extmemstart extmemopts
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^MCU = " 1.0]
+ if {$r1 == ""} {
+ complain "Oops, MCU not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, MCU not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ .f1.f2.f1.t1 insert $r2 "MCU = $mcutype"
+ .f1.f2.f1.t1 configure -state $editwidget
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, MCU not found"
+ return
+ }
+
+ if {[info exists extmemopts]} {
+ if {[info exists extmemparts($mcutype)]} {
+ .f1.f1.mb2.m1 entryconfigure $extmemmentry -state normal
+ if {$extmemstart == ""} {
+ set extmemstart 0
+ }
+ if {$extmemstart == 0 || \
+ [expr $extmemparts($mcutype) == $extmemstart]} {
+ # extmemstart == 0 means "lowest possible value"
+ set extmemstart 0
+ setextmemopts
+ }
+ } else {
+ .f1.f1.mb2.m1 entryconfigure $extmemmentry -state disabled
+ }
+ }
+
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+ .f1.f2.f1.t1 see $r1
+}
+
+proc setoformat {} {
+ global oformat
+ global editwidget
+ global highlight modified
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^FORMAT = " 1.0]
+ if {$r1 == ""} {
+ complain "Oops, FORMAT not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, FORMAT not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ .f1.f2.f1.t1 insert $r2 "FORMAT = $oformat"
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, FORMAT not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc setoptlevel {} {
+ global optlevel
+ global editwidget
+ global highlight modified
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^OPT = " 1.0]
+ if {$r1 == ""} {
+ complain "Oops, OPT not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, OPT not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ .f1.f2.f1.t1 insert $r2 "OPT = $optlevel"
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, OPT not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc setdformat {} {
+ global dformat
+ global editwidget
+ global highlight modified
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^DEBUG = " 1.0]
+ if {$r1 == ""} {
+ complain "Oops, DEBUG not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, DEBUG not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ .f1.f2.f1.t1 insert $r2 "DEBUG = $dformat"
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, DEBUG not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc setstdlevel {} {
+ global stdlevel
+ global editwidget
+ global highlight modified
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^CSTANDARD = " 1.0]
+ if {$r1 == ""} {
+ complain "Oops, CSTANDARD not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, CSTANDARD not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ .f1.f2.f1.t1 insert $r2 "CSTANDARD = -std=$stdlevel"
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, CSTANDARD not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc setdeftarget {} {
+ global deftarget
+ global editwidget
+ global highlight modified
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^build:" 1.0]
+ if {$r1 == ""} {
+ complain "Oops, default target not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, default target not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ set line [.f1.f2.f1.t1 get $r1 $r2]
+ if {[regexp {^(.*) (ext)?coff} $line dummy d]} {
+ set line $d
+ } else {
+ regsub {^(.*)} $line {\1} line
+ }
+ switch $deftarget {
+ "coff" {
+ set line "$line coff"
+ }
+ "extcoff" {
+ set line "$line extcoff"
+ }
+ "none" {
+ set line "$line"
+ }
+ }
+ .f1.f2.f1.t1 delete $r1 $r2
+ .f1.f2.f1.t1 insert $r2 "$line"
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, default target not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc setprintfopts {} {
+ global printfopts
+ global editwidget
+ global highlight modified
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^PRINTF_LIB = " 1.0]
+ if {$r1 == ""} {
+ complain "Oops, PRINTF_LIB not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, PRINTF_LIB not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ switch $printfopts {
+ "none" {
+ set line "PRINTF_LIB = "
+ }
+ "min" {
+ set line "PRINTF_LIB = \$(PRINTF_LIB_MIN)"
+ }
+ "flt" {
+ set line "PRINTF_LIB = \$(PRINTF_LIB_FLOAT)"
+ }
+ }
+ .f1.f2.f1.t1 insert $r2 "$line"
+
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, PRINTF_LIB not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc setscanfopts {} {
+ global scanfopts
+ global editwidget
+ global highlight modified
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^SCANF_LIB = " 1.0]
+ if {$r1 == ""} {
+ complain "Oops, SCANF_LIB not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, SCANF_LIB not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ switch $scanfopts {
+ "none" {
+ set line "SCANF_LIB = "
+ }
+ "min" {
+ set line "SCANF_LIB = \$(SCANF_LIB_MIN)"
+ }
+ "flt" {
+ set line "SCANF_LIB = \$(SCANF_LIB_FLOAT)"
+ }
+ }
+ .f1.f2.f1.t1 insert $r2 "$line"
+
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, SCANF_LIB not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc setextmemopts {} {
+ global extmemsize extmemstart extmemopts
+ global extmemmax extmemparts extmemmentry memoffset
+ global mcutype
+ global editwidget
+ global highlight modified
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^EXTMEMOPTS *=" 1.0]
+ if {$r1 == ""} {
+ complain "Oops, EXTMEMOPTS not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, EXTMEMOPTS not found"
+ return
+ }
+ if {$extmemopts != "none"} {
+ if {![info exists extmemsize]} {
+ set extmemsize [expr $extmemmax + 1 - $memoffset]
+ } elseif {$extmemsize == 0 || $extmemsize == ""} {
+ set extmemsize [expr $extmemmax + 1 - $memoffset]
+ }
+ if {![info exists extmemstart]} {
+ set extmemstart 0
+ } elseif {$extmemstart == 0 || $extmemstart == ""} {
+ set extmemstart 0
+ }
+ if {[expr $extmemstart] == 0} {
+ set m $extmemparts($mcutype)
+ } else {
+ set m [expr $extmemstart]
+ }
+ set xstart [format {0x%x} [expr $m]]
+ if {[expr $memoffset + $extmemsize] == [expr $extmemmax + 1]} {
+ set xend [format {0x%x} [expr $extmemmax]]
+ } else {
+ set xend [format {0x%x} [expr $m + $extmemsize - 1]]
+ }
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ switch $extmemopts {
+ "none" {
+ set line "EXTMEMOPTS = "
+ }
+ "vars" {
+ set line "EXTMEMOPTS = -Wl,--section-start,.data=$xstart,--defsym=__heap_end=$xend"
+ }
+ "heap" {
+ set line "EXTMEMOPTS = -Wl,--defsym=__heap_start=$xstart,--defsym=__heap_end=$xend"
+ }
+ }
+ .f1.f2.f1.t1 insert $r2 "$line"
+
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, EXTMEMOPTS not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc setmainfile {} {
+ global mainfile
+ global editwidget
+ global highlight modified
+
+ set mainfile [ask $mainfile "Main file"]
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^TARGET = " 1.0]
+ if {$r1 == ""} {
+ complain "Oops, TARGET not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, TARGET not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ .f1.f2.f1.t1 insert $r2 "TARGET = $mainfile"
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, TARGET not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc setmakefile {} {
+ global basename
+ global editwidget
+ global highlight modified
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^MAKEFILE\\s*=" 1.0]
+ if {$r1 == ""} {
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, MAKEFILE not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ .f1.f2.f1.t1 insert $r2 "MAKEFILE = $basename"
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, MAKEFILE not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc setasrc {} {
+ global asrc
+ global editwidget
+ global highlight modified
+
+ set asrc [ask $asrc "Assembler source file(s)"]
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^ASRC = " 1.0]
+ if {$r1 == ""} {
+ complain "Oops, ASRC not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, ASRC not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ .f1.f2.f1.t1 insert $r2 "ASRC = $asrc"
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, ASRC not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc setavrdudeprog {} {
+ global avrdudeprog
+ global editwidget
+ global highlight modified
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^AVRDUDE_PROGRAMMER = " 1.0]
+ if {$r1 == ""} {
+ complain "Oops, AVRDUDE_PROGRAMMER not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, AVRDUDE_PROGRAMMER not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ .f1.f2.f1.t1 insert $r2 "AVRDUDE_PROGRAMMER = $avrdudeprog"
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, AVRDUDE_PROGRAMMER not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc setavrdudeport {} {
+ global avrdudeport
+ global editwidget
+ global highlight modified
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^AVRDUDE_PORT = " 1.0]
+ if {$r1 == ""} {
+ complain "Oops, AVRDUDE_PORT not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, AVRDUDE_PORT not found"
+ return
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ .f1.f2.f1.t1 insert $r2 "AVRDUDE_PORT = $avrdudeport"
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, AVRDUDE_PORT not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc complain {text} {
+ if {[winfo exists .complain]} {
+ return
+ }
+ toplevel .complain
+ set x [winfo pointerx .]
+ set y [winfo pointery .]
+ if {$x != -1 && $y != -1} {
+ wm geometry .complain "+$x+$y"
+ }
+ wm title .complain {Error}
+ wm resizable .complain 0 0
+
+ message .complain.m1 -text $text
+ button .complain.ok -text {OK} -command {destroy .complain}
+
+ pack .complain.m1
+ pack .complain.ok
+
+ tkwait window .complain
+}
+
+proc ask {val text} {
+ global askval
+
+ if {[winfo exists .ask]} {
+ return
+ }
+
+ toplevel .ask
+ set x [winfo pointerx .]
+ set y [winfo pointery .]
+ if {$x != -1 && $y != -1} {
+ wm geometry .ask "+$x+$y"
+ }
+ wm title .ask $text
+ wm resizable .ask 0 0
+
+ set askval $val
+
+ frame .ask.f1
+ label .ask.f1.l1 -text "$text:"
+ entry .ask.f1.e1 -width 20 -relief sunken -textvariable askval
+
+ frame .ask.f2
+ button .ask.f2.b1 -text {OK} -command {destroy .ask}
+
+ pack configure .ask.f1.l1 -side left
+ pack configure .ask.f1.e1 -side left
+ pack configure .ask.f1
+ pack configure .ask.f2.b1 -side top
+ pack configure .ask.f2
+
+ bind .ask.f1.e1 <Key-Return> {destroy .ask}
+
+ tkwait window .ask
+
+ return $askval
+}
+
+proc asksrc {} {
+ global src mainfilesrc mainfile
+ global editwidget
+ global highlight modified
+
+ if {[winfo exists .ask]} {
+ return
+ }
+
+ toplevel .ask
+ set x [winfo pointerx .]
+ set y [winfo pointery .]
+ if {$x != -1 && $y != -1} {
+ wm geometry .ask "+$x+$y"
+ }
+ wm title .ask {Source files}
+ wm resizable .ask 1 0
+
+ frame .ask.f1
+ frame .ask.f1.f1
+ label .ask.f1.f1.l1 -text "C/C++ source file(s):"
+ entry .ask.f1.f1.e1 -width 20 -relief sunken -textvariable src
+ button .ask.f1.f1.b1 -text "Choose file..." \
+ -command {
+ global src
+ set x [tk_getOpenFile -filetypes {
+ {{C source files} {.c}}
+ {{C++ source files} {.C .cc .cxx}}
+ {{All files} *}
+ }]
+ if {$x != ""} {
+ set rootname [lindex [file split [pwd]] 0]
+ if {[string range $x 0 [expr [string length $rootname] - 1]] \
+ == $rootname} {
+ # Try finding common path name components to the
+ # current working directory. If found, eliminate
+ # them.
+ set y [pwd]
+ set prefix "."
+ while {[expr [string first $y $x] == -1]} {
+ set y [file dirname $y]
+ if {$prefix == "."} {
+ set prefix ".."
+ } else {
+ set prefix "../${prefix}"
+ }
+ }
+ if {$y != $rootname} {
+ # If more than the root directory name
+ # remained, replace it.
+ set commonlen [string length $y]
+ set x [string range $x $commonlen end]
+ set x "${prefix}${x}"
+ }
+ }
+ set src "$src $x"
+ }
+ focus .ask
+ wm deiconify .ask
+ if {[string length $src]} {
+ # let the entry widget auto-size
+ .ask.f1.f1.e1 configure -width 0
+ }
+ }
+ frame .ask.f1.f2
+ checkbutton .ask.f1.f2.cb1 -variable mainfilesrc
+ label .ask.f1.f2.l1 -text "Include ${mainfile}.c"
+ button .ask.f1.f2.b1 -text {OK} -command {destroy .ask}
+
+ pack configure .ask.f1.f1.l1 -side left
+ pack configure .ask.f1.f1.e1 -side left -expand y -fill x
+ pack configure .ask.f1.f1.b1 -side left
+ pack configure .ask.f1.f1 -side top -anchor nw -expand y -fill x
+ pack configure .ask.f1.f2.cb1 -side left
+ pack configure .ask.f1.f2.l1 -side left
+ pack configure .ask.f1.f2.b1 -side right
+ pack configure .ask.f1.f2 -side top -anchor nw -expand y -fill x
+ pack configure .ask.f1 -expand y -fill x
+
+ bind .ask.f1.f1.e1 <Key-Return> {destroy .ask}
+ focus .ask
+
+ tkwait window .ask
+
+ set r1 [.f1.f2.f1.t1 search -regexp "^SRC = " 1.0]
+ if {$r1 == ""} {
+ complain "Oops, SRC not found"
+ return
+ }
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, SRC not found"
+ return
+ }
+
+ if {$mainfilesrc != 0} {
+ set s "\$(TARGET).c $src"
+ } else {
+ set s "$src"
+ }
+ set modified 1
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete $r1 $r2
+ .f1.f2.f1.t1 insert $r2 "SRC = $s"
+ .f1.f2.f1.t1 configure -state $editwidget
+ .f1.f2.f1.t1 see $r1
+ set r2 [.f1.f2.f1.t1 search -regexp {$} $r1]
+ if {$r2 == ""} {
+ complain "Oops, SRC not found"
+ return
+ }
+ .f1.f2.f1.t1 tag delete highlight
+ .f1.f2.f1.t1 tag add highlight $r1 $r2
+ .f1.f2.f1.t1 tag configure highlight -background $highlight
+}
+
+proc changeeditable {} {
+ global editwidget modified
+
+ if {$editwidget == "normal"} {
+ set modified 1
+ }
+ .f1.f2.f1.t1 configure -state $editwidget
+}
+
+proc openfile {} {
+ global filename basename
+ global modified
+ global asksavereply
+ global makefile editwidget
+
+ if {$modified} {
+ if {[winfo exists .asksave]} {
+ return
+ }
+ toplevel .asksave
+ message .asksave.l1 -width 400 \
+ -text "The current buffer has been modified.\n\nDiscard changes?"
+ frame .asksave.f1
+ button .asksave.f1.ok -text {Yes} -command {
+ global asksavereply
+ set asksavereply 1
+ destroy .asksave
+ }
+ button .asksave.f1.cancel -text {No} -command {
+ global asksavereply
+ set asksavereply 0
+ destroy .asksave
+ }
+
+ pack configure .asksave.l1 -side top
+ pack configure .asksave.f1.ok -side left
+ pack configure .asksave.f1.cancel -side left
+ pack configure .asksave.f1 -side top
+
+ set x [winfo pointerx .]
+ set y [winfo pointery .]
+ if {$x != -1 && $y != -1} {
+ wm geometry .asksave "+$x+$y"
+ }
+
+ tkwait window .asksave
+
+ if {$asksavereply == 0} {
+ return
+ }
+
+ set modified 0
+ }
+
+ set fn [tk_getOpenFile -initialfile $filename]
+ if {[string length $fn] > 0} {
+ parsetemplate $fn
+ makemfilemenu
+
+ set filename $fn
+ catch "regsub {^.*/} $fn {} basename"
+ wm title . $basename
+
+ .f1.f2.f1.t1 configure -state normal
+ .f1.f2.f1.t1 delete 1.0 end
+ .f1.f2.f1.t1 insert end $makefile
+ .f1.f2.f1.t1 configure -state $editwidget
+
+ setmakefile
+ }
+}
+
+proc saveas {} {
+ global filename basename
+ set fn [tk_getSaveFile -initialfile $filename]
+ if {[string length $fn] > 0} {
+ set filename $fn
+ catch "regsub {^.*/} $fn {} basename"
+ wm title . $basename
+ setmakefile
+ writefile $fn
+ }
+}
+
+proc quit {force} {
+ global modified filename
+
+ if {$modified} {
+ if {$force} {
+ # called from WM_SAVE_YOURSELF handler only -- no time
+ # to ask the luser back
+ wm protocol . WM_SAVE_YOURSELF {}
+ set modified 0
+ writefile "${filename}.saved"
+ exit 0
+ }
+
+ if {[winfo exists .askquit]} {
+ return
+ }
+ toplevel .askquit
+ message .askquit.l1 -width 400 \
+ -text "The current buffer has been modified.\n\nExit anyway?"
+ frame .askquit.f1
+ button .askquit.f1.ok -text {Yes} -command {
+ wm protocol . WM_DELETE_WINDOW {}
+ wm protocol . WM_SAVE_YOURSELF {}
+ exit 0
+ }
+ button .askquit.f1.cancel -text {No} -command {destroy .askquit}
+
+ pack configure .askquit.l1 -side top
+ pack configure .askquit.f1.ok -side left
+ pack configure .askquit.f1.cancel -side left
+ pack configure .askquit.f1 -side top
+
+ set x [winfo pointerx .]
+ set y [winfo pointery .]
+ if {$x != -1 && $y != -1} {
+ wm geometry .askquit "+$x+$y"
+ }
+
+ tkwait window .askquit
+ } else {
+ exit 0
+ }
+}
+
+source "$prefix/htmlview.tcl"
+
+parsetemplate $templatename
+
+global editwidget
+set editwidget disabled
+
+global modified
+set modified 0
+
+frame .f1
+
+frame .f1.f1
+
+# "File" menu
+menubutton .f1.f1.mb1 -text File -underline 0
+
+menu .f1.f1.mb1.m1 -tearoff 1
+.f1.f1.mb1.m1 add command -command {writefile $filename} \
+ -label Save -underline 0
+.f1.f1.mb1.m1 add command -command {saveas} \
+ -label {Save As...} -underline 5
+.f1.f1.mb1.m1 add command -command {openfile} \
+ -label {Open...} -underline 0
+.f1.f1.mb1.m1 add separator
+.f1.f1.mb1.m1 add command -command {quit 0} -label Exit -underline 1
+
+.f1.f1.mb1 configure -menu .f1.f1.mb1.m1
+
+# "Help" menu
+menubutton .f1.f1.mbH -text Help -underline 0
+
+menu .f1.f1.mbH.m1 -tearoff 1
+.f1.f1.mbH.m1 add command -command {htmlview $helpfile} \
+ -label "Help..." -underline 0
+.f1.f1.mbH.m1 add separator
+.f1.f1.mbH.m1 add command -command {about} -label "About..." -underline 0
+
+.f1.f1.mbH configure -menu .f1.f1.mbH.m1
+
+# "Makefile" menu
+menubutton .f1.f1.mb2 -text Makefile -underline 0
+menu .f1.f1.mb2.m1 -tearoff 1 -disabledforeground blue3
+makemfilemenu
+
+frame .f1.f2
+frame .f1.f2.f1
+text .f1.f2.f1.t1 -height 25 -width 80 -wrap none \
+ -yscrollcommand {.f1.f2.f1.s1 set} \
+ -xscrollcommand {.f1.f2.s2 set} \
+ -state $editwidget
+scrollbar .f1.f2.f1.s1 -command {.f1.f2.f1.t1 yview}
+scrollbar .f1.f2.s2 -orient horizontal -command {.f1.f2.f1.t1 xview}
+
+pack configure .f1.f1.mbH -side right
+pack configure .f1.f1.mb1 -side left
+pack configure .f1.f1.mb2 -side left
+pack configure .f1.f1 -fill x -side top -anchor nw
+
+pack configure .f1.f2.f1.t1 -side left -expand y -fill both -anchor nw
+pack configure .f1.f2.f1.s1 -side left -fill y -anchor nw
+pack configure .f1.f2.f1 -side top -expand y -fill both -anchor nw
+pack configure .f1.f2.s2 -side left -expand y -fill x -anchor nw
+pack configure .f1.f2 -side top -expand y -fill both -anchor nw
+
+pack configure .f1 -side left -expand y -fill both -anchor nw
+
+update
+set x [winfo width .]
+set y [winfo height .]
+wm minsize . $x $y
+
+# XBM icons look fairly stupid on Windows since the background will
+# be rendered in black. Rather keep the standar Tk icon there.
+if {$tcl_platform(platform) == "unix" && [file exists $mainicon]} {
+ wm iconbitmap . @$mainicon
+}
+
+.f1.f2.f1.t1 configure -state normal
+.f1.f2.f1.t1 insert end $makefile
+.f1.f2.f1.t1 configure -state $editwidget
+
+bind . <Key-F1> {htmlview $helpfile}
+
+# When the text widget is in normal state, <Key-Prior> and <Key-Next>
+# already work as expected, but they don't when it is in disabled
+# state (since the widget doesn't get any focus then) so we override
+# it globally here. While we are at it, bind <Key-Home> and <Key-End>
+# as well.
+
+bind . <Key-Prior> ".f1.f2.f1.t1 yview scroll -10 units"
+bind . <Key-Next> ".f1.f2.f1.t1 yview scroll 10 units"
+bind . <Key-Home> ".f1.f2.f1.t1 yview moveto 0"
+bind . <Key-End> ".f1.f2.f1.t1 yview moveto 1"
+
+wm protocol . WM_DELETE_WINDOW {quit 0}
+wm protocol . WM_SAVE_YOURSELF {quit 1}
diff --git a/temp/mfile/mfile.xbm b/temp/mfile/mfile.xbm
new file mode 100644
index 0000000..7176f7f
--- /dev/null
+++ b/temp/mfile/mfile.xbm
@@ -0,0 +1,14 @@
+#define mfile_width 32
+#define mfile_height 32
+static unsigned char mfile_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03,
+ 0xc0, 0x03, 0xfc, 0x0f, 0xf0, 0x87, 0xff, 0x0f, 0xf8, 0xc7, 0xff, 0x00,
+ 0x3c, 0xee, 0x03, 0x00, 0x1c, 0xfc, 0x00, 0x00, 0x0c, 0x7c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x7c, 0x00, 0x00, 0x1c, 0xfc, 0x00, 0x00,
+ 0x3c, 0xee, 0x03, 0x00, 0xf8, 0xc7, 0xff, 0x00, 0xf0, 0x87, 0xff, 0x0f,
+ 0xc0, 0x03, 0xfc, 0x0f, 0x00, 0x00, 0xc3, 0x03, 0x00, 0x00, 0x03, 0x00,
+ 0xda, 0x38, 0x9b, 0x03, 0xb6, 0x65, 0xcf, 0x06, 0xb6, 0x79, 0xc7, 0x07,
+ 0xb6, 0x6d, 0xcf, 0x00, 0xb6, 0x6d, 0xdb, 0x06, 0xb6, 0xd9, 0xb3, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
diff --git a/temp/schaltplan-maus.pdf b/temp/schaltplan-maus.pdf
new file mode 100644
index 0000000..c3916c3
--- /dev/null
+++ b/temp/schaltplan-maus.pdf
Binary files differ