arduino-0018-windows
This commit is contained in:
		
							parent
							
								
									157fd6f1a1
								
							
						
					
					
						commit
						f39fc49523
					
				
					 5182 changed files with 950586 additions and 0 deletions
				
			
		
							
								
								
									
										115
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/README
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/README
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,115 @@
 | 
			
		|||
# $Id: README,v 2.1 2007/04/12 18:10:13 arcanum Exp $
 | 
			
		||||
 | 
			
		||||
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).
 | 
			
		||||
 | 
			
		||||
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 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 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: 2007/04/12 18:10:13 $
 | 
			
		||||
Joerg Wunsch <j.gnu@uriah.heep.sax.de>
 | 
			
		||||
							
								
								
									
										165
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/help.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/help.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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 2.0 2006/03/21 21:22:12 joerg_wunsch 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 · <j.gnu@uriah.heep.sax.de> ·
 | 
			
		||||
$Date: 2006/03/21 21:22:12 $</address>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										606
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/htmlview.tcl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										606
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/htmlview.tcl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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 2.0 2006/03/21 21:22:15 joerg_wunsch 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
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/htmlview.xbm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/htmlview.xbm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
/* $Id: htmlview.xbm,v 2.0 2006/03/21 21:22:13 joerg_wunsch Exp $ */
 | 
			
		||||
#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, };
 | 
			
		||||
							
								
								
									
										617
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/makefile_template
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										617
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/makefile_template
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,617 @@
 | 
			
		|||
# Hey Emacs, this is a -*- makefile -*-
 | 
			
		||||
#----------------------------------------------------------------------------
 | 
			
		||||
# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
 | 
			
		||||
#
 | 
			
		||||
# Released to the Public Domain
 | 
			
		||||
#
 | 
			
		||||
# Additional material for this makefile was written by:
 | 
			
		||||
# Peter Fleury
 | 
			
		||||
# Tim Henigan
 | 
			
		||||
# Colin O'Flynn
 | 
			
		||||
# Reiner Patommel
 | 
			
		||||
# Markus Pfaff
 | 
			
		||||
# Sander Pool
 | 
			
		||||
# Frederik Rouleau
 | 
			
		||||
# Carlos Lamas
 | 
			
		||||
#
 | 
			
		||||
#----------------------------------------------------------------------------
 | 
			
		||||
# On command line:
 | 
			
		||||
#
 | 
			
		||||
# make all = Make software.
 | 
			
		||||
#
 | 
			
		||||
# make clean = Clean out built project files.
 | 
			
		||||
#
 | 
			
		||||
# make coff = Convert ELF to AVR COFF.
 | 
			
		||||
#
 | 
			
		||||
# make extcoff = Convert ELF to AVR Extended COFF.
 | 
			
		||||
#
 | 
			
		||||
# make program = Download the hex file to the device, using avrdude.
 | 
			
		||||
#                Please customize the avrdude settings below first!
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
#
 | 
			
		||||
# make filename.i = Create a preprocessed source file for use in submitting
 | 
			
		||||
#                   bug reports to the GCC project.
 | 
			
		||||
#
 | 
			
		||||
# To rebuild project do "make clean" then "make all".
 | 
			
		||||
#----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# MCU name
 | 
			
		||||
MCU = atmega128
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency. You can then use this symbol in your source code to 
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#     Typical values are:
 | 
			
		||||
#         F_CPU =  1000000
 | 
			
		||||
#         F_CPU =  1843200
 | 
			
		||||
#         F_CPU =  2000000
 | 
			
		||||
#         F_CPU =  3686400
 | 
			
		||||
#         F_CPU =  4000000
 | 
			
		||||
#         F_CPU =  7372800
 | 
			
		||||
#         F_CPU =  8000000
 | 
			
		||||
#         F_CPU = 11059200
 | 
			
		||||
#         F_CPU = 14745600
 | 
			
		||||
#         F_CPU = 16000000
 | 
			
		||||
#         F_CPU = 18432000
 | 
			
		||||
#         F_CPU = 20000000
 | 
			
		||||
F_CPU = 8000000
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Output format. (can be srec, ihex, binary)
 | 
			
		||||
FORMAT = ihex
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target file name (without extension).
 | 
			
		||||
TARGET = main
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Object files directory
 | 
			
		||||
#     To put object files in current directory, use a dot (.), do NOT make
 | 
			
		||||
#     this an empty or blank macro!
 | 
			
		||||
OBJDIR = .
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List C source files here. (C dependencies are automatically generated.)
 | 
			
		||||
SRC = $(TARGET).c
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
#     Make them always end in a capital .S.  Files ending in a lowercase .s
 | 
			
		||||
#     will not be considered source files but generated files (assembler
 | 
			
		||||
#     output from the compiler), and will be deleted upon "make clean"!
 | 
			
		||||
#     Even though the DOS/Win* filesystem matches both .s and .S the same,
 | 
			
		||||
#     it will preserve the spelling of the filenames, and gcc itself does
 | 
			
		||||
#     care about how the name is spelled on its command-line.
 | 
			
		||||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Debugging format.
 | 
			
		||||
#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
 | 
			
		||||
#     AVR Studio 4.10 requires dwarf-2.
 | 
			
		||||
#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
 | 
			
		||||
DEBUG = dwarf-2
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List any extra directories to look for include files here.
 | 
			
		||||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRAINCDIRS = 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# 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 for C sources
 | 
			
		||||
CDEFS = -DF_CPU=$(F_CPU)UL
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Place -D or -U options here for ASM sources
 | 
			
		||||
ADEFS = -DF_CPU=$(F_CPU)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Place -D or -U options here for C++ sources
 | 
			
		||||
CPPDEFS = -DF_CPU=$(F_CPU)UL
 | 
			
		||||
#CPPDEFS += -D__STDC_LIMIT_MACROS
 | 
			
		||||
#CPPDEFS += -D__STDC_CONSTANT_MACROS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#---------------- Compiler Options C ----------------
 | 
			
		||||
#  -g*:          generate debugging information
 | 
			
		||||
#  -O*:          optimization level
 | 
			
		||||
#  -f...:        tuning, see GCC manual and avr-libc documentation
 | 
			
		||||
#  -Wall...:     warning level
 | 
			
		||||
#  -Wa,...:      tell GCC to pass this to the assembler.
 | 
			
		||||
#    -adhlns...: create assembler listing
 | 
			
		||||
CFLAGS = -g$(DEBUG)
 | 
			
		||||
CFLAGS += $(CDEFS)
 | 
			
		||||
CFLAGS += -O$(OPT)
 | 
			
		||||
CFLAGS += -funsigned-char
 | 
			
		||||
CFLAGS += -funsigned-bitfields
 | 
			
		||||
CFLAGS += -fpack-struct
 | 
			
		||||
CFLAGS += -fshort-enums
 | 
			
		||||
CFLAGS += -Wall
 | 
			
		||||
CFLAGS += -Wstrict-prototypes
 | 
			
		||||
#CFLAGS += -mshort-calls
 | 
			
		||||
#CFLAGS += -fno-unit-at-a-time
 | 
			
		||||
#CFLAGS += -Wundef
 | 
			
		||||
#CFLAGS += -Wunreachable-code
 | 
			
		||||
#CFLAGS += -Wsign-compare
 | 
			
		||||
CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
 | 
			
		||||
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		||||
CFLAGS += $(CSTANDARD)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#---------------- Compiler Options C++ ----------------
 | 
			
		||||
#  -g*:          generate debugging information
 | 
			
		||||
#  -O*:          optimization level
 | 
			
		||||
#  -f...:        tuning, see GCC manual and avr-libc documentation
 | 
			
		||||
#  -Wall...:     warning level
 | 
			
		||||
#  -Wa,...:      tell GCC to pass this to the assembler.
 | 
			
		||||
#    -adhlns...: create assembler listing
 | 
			
		||||
CPPFLAGS = -g$(DEBUG)
 | 
			
		||||
CPPFLAGS += $(CPPDEFS)
 | 
			
		||||
CPPFLAGS += -O$(OPT)
 | 
			
		||||
CPPFLAGS += -funsigned-char
 | 
			
		||||
CPPFLAGS += -funsigned-bitfields
 | 
			
		||||
CPPFLAGS += -fpack-struct
 | 
			
		||||
CPPFLAGS += -fshort-enums
 | 
			
		||||
CPPFLAGS += -fno-exceptions
 | 
			
		||||
CPPFLAGS += -Wall
 | 
			
		||||
CPPFLAGS += -Wundef
 | 
			
		||||
#CPPFLAGS += -mshort-calls
 | 
			
		||||
#CPPFLAGS += -fno-unit-at-a-time
 | 
			
		||||
#CPPFLAGS += -Wstrict-prototypes
 | 
			
		||||
#CPPFLAGS += -Wunreachable-code
 | 
			
		||||
#CPPFLAGS += -Wsign-compare
 | 
			
		||||
CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
 | 
			
		||||
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		||||
#CPPFLAGS += $(CSTANDARD)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#---------------- Assembler Options ----------------
 | 
			
		||||
#  -Wa,...:   tell GCC to pass this to the assembler.
 | 
			
		||||
#  -adhlns:   create listing
 | 
			
		||||
#  -gstabs:   have the assembler create line number information; note that
 | 
			
		||||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#---------------- Library Options ----------------
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MATH_LIB = -lm
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List any extra directories to look for libraries here.
 | 
			
		||||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#---------------- External Memory Options ----------------
 | 
			
		||||
 | 
			
		||||
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
 | 
			
		||||
# used for variables (.data/.bss) and heap (malloc()).
 | 
			
		||||
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
 | 
			
		||||
 | 
			
		||||
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
 | 
			
		||||
# only used for heap (malloc()).
 | 
			
		||||
#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
 | 
			
		||||
 | 
			
		||||
EXTMEMOPTS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#---------------- Linker Options ----------------
 | 
			
		||||
#  -Wl,...:     tell GCC to pass this to linker.
 | 
			
		||||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
 | 
			
		||||
#LDFLAGS += -T linker_script.x
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#---------------- Programming Options (avrdude) ----------------
 | 
			
		||||
 | 
			
		||||
# Programming hardware
 | 
			
		||||
# Type: avrdude -c ?
 | 
			
		||||
# to get a full listing.
 | 
			
		||||
#
 | 
			
		||||
AVRDUDE_PROGRAMMER = stk500v2
 | 
			
		||||
 | 
			
		||||
# com1 = serial port. Use lpt1 to connect to parallel port.
 | 
			
		||||
AVRDUDE_PORT = com1    # programmer connected to serial device
 | 
			
		||||
 | 
			
		||||
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_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 | 
			
		||||
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
 | 
			
		||||
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
 | 
			
		||||
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#---------------- Debugging Options ----------------
 | 
			
		||||
 | 
			
		||||
# For simulavr only - target MCU frequency.
 | 
			
		||||
DEBUG_MFREQ = $(F_CPU)
 | 
			
		||||
 | 
			
		||||
# Set the DEBUG_UI to either gdb or insight.
 | 
			
		||||
# DEBUG_UI = gdb
 | 
			
		||||
DEBUG_UI = insight
 | 
			
		||||
 | 
			
		||||
# Set the debugging back-end to either avarice, simulavr.
 | 
			
		||||
DEBUG_BACKEND = avarice
 | 
			
		||||
#DEBUG_BACKEND = simulavr
 | 
			
		||||
 | 
			
		||||
# GDB Init Filename.
 | 
			
		||||
GDBINIT_FILE = __avr_gdbinit
 | 
			
		||||
 | 
			
		||||
# When using avarice settings for the JTAG
 | 
			
		||||
JTAG_DEV = /dev/com1
 | 
			
		||||
 | 
			
		||||
# Debugging port used to communicate between GDB / avarice / simulavr.
 | 
			
		||||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#============================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Define programs and commands.
 | 
			
		||||
SHELL = sh
 | 
			
		||||
CC = avr-gcc
 | 
			
		||||
OBJCOPY = avr-objcopy
 | 
			
		||||
OBJDUMP = avr-objdump
 | 
			
		||||
SIZE = avr-size
 | 
			
		||||
AR = avr-ar rcs
 | 
			
		||||
NM = avr-nm
 | 
			
		||||
AVRDUDE = avrdude
 | 
			
		||||
REMOVE = rm -f
 | 
			
		||||
REMOVEDIR = rm -rf
 | 
			
		||||
COPY = cp
 | 
			
		||||
WINSHELL = cmd
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Define Messages
 | 
			
		||||
# English
 | 
			
		||||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
MSG_FLASH = Creating load file for Flash:
 | 
			
		||||
MSG_EEPROM = Creating load file for EEPROM:
 | 
			
		||||
MSG_EXTENDED_LISTING = Creating Extended Listing:
 | 
			
		||||
MSG_SYMBOL_TABLE = Creating Symbol Table:
 | 
			
		||||
MSG_LINKING = Linking:
 | 
			
		||||
MSG_COMPILING = Compiling C:
 | 
			
		||||
MSG_COMPILING_CPP = Compiling C++:
 | 
			
		||||
MSG_ASSEMBLING = Assembling:
 | 
			
		||||
MSG_CLEANING = Cleaning project:
 | 
			
		||||
MSG_CREATING_LIBRARY = Creating library:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Combine all necessary flags and optional flags.
 | 
			
		||||
# Add target processor to flags.
 | 
			
		||||
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
 | 
			
		||||
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
 | 
			
		||||
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Default target.
 | 
			
		||||
all: begin gccversion sizebefore build sizeafter end
 | 
			
		||||
 | 
			
		||||
# Change the build target to build a HEX file or a library.
 | 
			
		||||
build: elf hex eep lss sym
 | 
			
		||||
#build: lib
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
elf: $(TARGET).elf
 | 
			
		||||
hex: $(TARGET).hex
 | 
			
		||||
eep: $(TARGET).eep
 | 
			
		||||
lss: $(TARGET).lss
 | 
			
		||||
sym: $(TARGET).sym
 | 
			
		||||
LIBNAME=lib$(TARGET).a
 | 
			
		||||
lib: $(LIBNAME)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Eye candy.
 | 
			
		||||
# AVR Studio 3.x does not check make's exit code but relies on
 | 
			
		||||
# the following magic strings to be generated by the compile job.
 | 
			
		||||
begin:
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_BEGIN)
 | 
			
		||||
 | 
			
		||||
end:
 | 
			
		||||
	@echo $(MSG_END)
 | 
			
		||||
	@echo
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Display size of file.
 | 
			
		||||
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
 | 
			
		||||
ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf
 | 
			
		||||
 | 
			
		||||
sizebefore:
 | 
			
		||||
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
 | 
			
		||||
	2>/dev/null; echo; fi
 | 
			
		||||
 | 
			
		||||
sizeafter:
 | 
			
		||||
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
 | 
			
		||||
	2>/dev/null; echo; fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo end >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
 | 
			
		||||
ifeq ($(DEBUG_BACKEND),simulavr)
 | 
			
		||||
	@echo load  >> $(GDBINIT_FILE)
 | 
			
		||||
endif
 | 
			
		||||
	@echo break main >> $(GDBINIT_FILE)
 | 
			
		||||
 | 
			
		||||
debug: gdb-config $(TARGET).elf
 | 
			
		||||
ifeq ($(DEBUG_BACKEND), avarice)
 | 
			
		||||
	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
 | 
			
		||||
	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
 | 
			
		||||
	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
 | 
			
		||||
	@$(WINSHELL) /c pause
 | 
			
		||||
 | 
			
		||||
else
 | 
			
		||||
	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
 | 
			
		||||
	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
 | 
			
		||||
endif
 | 
			
		||||
	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
 | 
			
		||||
COFFCONVERT = $(OBJCOPY) --debugging
 | 
			
		||||
COFFCONVERT += --change-section-address .data-0x800000
 | 
			
		||||
COFFCONVERT += --change-section-address .bss-0x800000
 | 
			
		||||
COFFCONVERT += --change-section-address .noinit-0x800000
 | 
			
		||||
COFFCONVERT += --change-section-address .eeprom-0x810000
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
coff: $(TARGET).elf
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COFF) $(TARGET).cof
 | 
			
		||||
	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extcoff: $(TARGET).elf
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
 | 
			
		||||
	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Create final output files (.hex, .eep) from ELF output file.
 | 
			
		||||
%.hex: %.elf
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_FLASH) $@
 | 
			
		||||
	$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@
 | 
			
		||||
 | 
			
		||||
%.eep: %.elf
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_EEPROM) $@
 | 
			
		||||
	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
 | 
			
		||||
	--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
 | 
			
		||||
 | 
			
		||||
# Create extended listing file from ELF output file.
 | 
			
		||||
%.lss: %.elf
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_EXTENDED_LISTING) $@
 | 
			
		||||
	$(OBJDUMP) -h -S -z $< > $@
 | 
			
		||||
 | 
			
		||||
# Create a symbol table from ELF output file.
 | 
			
		||||
%.sym: %.elf
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_SYMBOL_TABLE) $@
 | 
			
		||||
	$(NM) -n $< > $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Create library from object files.
 | 
			
		||||
.SECONDARY : $(TARGET).a
 | 
			
		||||
.PRECIOUS : $(OBJ)
 | 
			
		||||
%.a: $(OBJ)
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_CREATING_LIBRARY) $@
 | 
			
		||||
	$(AR) $@ $(OBJ)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Link: create ELF output file from object files.
 | 
			
		||||
.SECONDARY : $(TARGET).elf
 | 
			
		||||
.PRECIOUS : $(OBJ)
 | 
			
		||||
%.elf: $(OBJ)
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_LINKING) $@
 | 
			
		||||
	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
%.s : %.c
 | 
			
		||||
	$(CC) -S $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C++ source files.
 | 
			
		||||
%.s : %.cpp
 | 
			
		||||
	$(CC) -S $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Assemble: create object files from assembler source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.S
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_ASSEMBLING) $<
 | 
			
		||||
	$(CC) -c $(ALL_ASFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
clean: begin clean_list end
 | 
			
		||||
 | 
			
		||||
clean_list :
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_CLEANING)
 | 
			
		||||
	$(REMOVE) $(TARGET).hex
 | 
			
		||||
	$(REMOVE) $(TARGET).eep
 | 
			
		||||
	$(REMOVE) $(TARGET).cof
 | 
			
		||||
	$(REMOVE) $(TARGET).elf
 | 
			
		||||
	$(REMOVE) $(TARGET).map
 | 
			
		||||
	$(REMOVE) $(TARGET).sym
 | 
			
		||||
	$(REMOVE) $(TARGET).lss
 | 
			
		||||
	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
 | 
			
		||||
	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
 | 
			
		||||
	$(REMOVE) $(SRC:.c=.s)
 | 
			
		||||
	$(REMOVE) $(SRC:.c=.d)
 | 
			
		||||
	$(REMOVE) $(SRC:.c=.i)
 | 
			
		||||
	$(REMOVEDIR) .dep
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Create object files directory
 | 
			
		||||
$(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Include the dependency files.
 | 
			
		||||
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Listing of phony targets.
 | 
			
		||||
.PHONY : all begin finish end sizebefore sizeafter gccversion \
 | 
			
		||||
build elf hex eep lss sym coff extcoff \
 | 
			
		||||
clean clean_list program debug gdb-config
 | 
			
		||||
							
								
								
									
										1643
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/mfile.tcl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1643
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/mfile.tcl
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										15
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/mfile.xbm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								arduino-0018-windows/hardware/tools/avr/mfile/mfile.xbm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
/* $Id: mfile.xbm,v 2.0 2006/03/21 21:22:13 joerg_wunsch Exp $ */
 | 
			
		||||
#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, };
 | 
			
		||||
		Reference in a new issue