LZW-Kompression in Forth

Mihai Ghete
Florian Kimmel
Jakob Petsovits

--------------------------------------

Zum Ausführen: 
- weisse Schrift auf schwarzem Hintergrund
- am besten in einen XTerm
- $ gforth presentation.fs

Dateien:

lzw-deferred.fs - LZW-Kompressions-Algorithmus
presentation.fs - Präsentation
my-colorize.fs  - Farben-support für see (von GForths see.fs inspiriert)
fs-fonts/*      - "grosse" Fonts (source + generiert)
flf2fs.c        - Wandelt spezielle FigLET .flf-Dateien in Forth-Code um
                  (Im Font dürfen die Zeichen nur aus # und Spaces bestehen)
                  zum Kompilieren: make flf2fs


Die Präsentation:

- Mit gforth presentation.fs starten

- Nächste "Folie" immer mit beliebiger 1-keycode-Taste (z.B. Space)

- Bei "Schleifen"-Folien (Beispiel, Code-Ansicht) Wort eingeben, 
  nichts Eingeben + Return beendet die Schleife

- Beispiel: Zu komprimierendes Wort eingeben (z.B. foofoo, foofoobfoobf)

- Im Beispiel mit z.B. Space fortfahren


Verwendete (G)Forth-Features, genauer:

- Wordlist (Table) als Lookup-Table verwendet, vereinfacht:

  init: table value lzw-wordlist
  add ( x addr u -- ): >r lzw-wordlist set-current nextname create r> ,
  get ( addr u -- code/0 ): lzw-wordlist search-wordlist if @ else 0 endif

- deferred words (lzw-compress, .string), latestxt, ' / execute (Fonts)


Die "grossen" Fonts:

- 2x2 Pixel werden auf ein Unicode-Zeichen aus dem "Box Elements"-Block gemappt

- Erzeugung:
  flf2fs fontname < font.flf > font.fs
  generiert Forth-Code zum Zeichnen des Fonts

- Verwendung in Forth:
  fontname-string-xy ( x y addr u -- ) \ zeichnet einen String
  fontname-char-<code> ( x y -- w ) \ zeichnet das bestimte Zeichen

- Schauen in XTerm am besten aus

- Die verwendeten source-Fonts findet man unter fs-fonts/, andere ähnliche
  Fonts sind z.B. hier verfügbar: 
  http://gd.tuwien.ac.at/publishing/figlet/fonts/contributed/bdffonts/

- Bugs, "TODO":
  - Der ASCII-Zeichensatz wird vorausgesetzt
  - Nur ASCII-Zeichen 32 - 126 gehen sicher, Umlaute sind die (nicht-standard)
    Codes 127 - 133 und je nach Font nicht immer verfügbar, andere Zeichen
    werden nicht unterstützt.
  - Der C-Code ist mehr ein Mittel zum Zweck.

Änderung am 15.3.2008: Die Fonts waren nicht richtig generiert. 


