Index of /anton/lvas/stack-abgaben/07w/lzw
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.