TinyVEC
TinyVEC
TinyVEC

TinySVGDas Java-Programm TinySVG (ZIP-Datei, ∼150KB) von Dipl.Inf. Bernd Bock dient dazu, aus beliebigen Vektorgrafikbildern im SVG-Format Dateien zu generieren, mit deren Hilfe man diese SVG-Bilder auf 8Bit-Rechnern wiedergeben kann, im von Bernd Bock entwickelten VEC-Format (s. unten). Da SVG viele Möglichkeiten zur Darstellung aufweist, die auf Retro-Computern nicht nachvollzogen werden können, beschränkt sich das VEC-Format darauf, SVG auf monochrome Strichzeichnungen zu reduzieren. B. Bock hat sein Programm TinySVG und das VEC-Format im Joyce-Forum und im Forum64 vorgestellt.

TinySVG kann VEC-Dateien für die Computer ZX81, ZX Spectrum, Schneider Joyce und C64 erzeugen. Im Commodore-Bereich gibt es VEC-Viewer von den Forum64-Usern EgonOlsen71 (kompiliertes V2-Basic), WTE (Basic 7.0) und das TSB-Programm TinyVECViewer.

Der TinyVEC-Viewer ist ein Interpreter für VEC-Dateien, die nach folgenden Vorgaben aufgebaut sind:

Header: 'V' 'E' 'C'
Byte         |  0 |   1    2   |   3    4   |   5    6   |   7    8   |
-----------------------------------------------------------------------
Dot          |  0 |     x      |     y      |            |            |
Line         |  1 |     x1     |    y1      |    x2      |    y2      |
Box          |  2 |   xleft    |   ytop     |   xright   |  ybottom   |
Square       |  3 |   xleft    |   ytop     |   width    |            |
Ellipse      |  4 |  xcenter   |  ycenter   |  xradius   |  yradius   |
Circle       |  5 |  xcenter   |  ycenter   |   radius   |            |
Multi-Dot    | 10 |#dots|    x1      |    y1      |     x2     | ...  |
Multi-Line   | 11 |#dots|    x1      |    y1      |     x2     | ...  |
Polygon-Fill | 12 |#dots|    x1      |    y1      |     x2     | ...  |
End          | 99 |            |            |            |            |

Byte 0 ist das Token für den Befehl, dessen Bezeichnung in der ganz linken Spalte zu sehen ist. Auf das jeweilige Token müssen die in der gleichen Zeile stehenden Parameter folgen. "#dots" bedeutet "Anzahl der jetzt folgenden Koordinaten (x|y)".

Funktionsweise des TSB-Programms:

100 rem" Programm TinyVEC Viewer by AD 2021
105 rem" TinyVEC by Bernd Bock
110 :
140 header: init: repeat: menue: until pr=0
150 if (not pr and al=0) then colour15,11,0: keyget x$
160 header
170 if al<>2 then print at(lin+2,0)"Letztes Bild: '"f$"'"
180 if al=1 then print at(lin+2,0)"Methode noch nicht implementiert."
190 if al=2 then print at(lin+2,0)"Abbruch."
200 if al=3 then print at(lin+2,0)"Datei ist keine TinyVEC-Datei."
205 if al=4 then print at(lin+2,0)"Dateiname falsch?"
210 print at(lin+2,0)"ENTER startet neu. Ende mit 'x'."
220 pause 1: keyget x$: if x$=chr$(13) then run
999 end

1300 proc header
1310 cset1: cls: colour 11,12,0
1320 centre"- Tiny Vector -": print: print
1330 end proc

1500 proc menue
1510 dir: print: print: print"Dateiname: ? ";
1520 fetch fp$,16,f$:if f$="" then pr=0: al=2
1525 if right$(f$,4)<>".vec" then f$=f$+".vec"
1530 if pr then open1,dr,2,f$: close 1: if st then pr=0: al=4
1540 if pr then vopen
1550 end proc

1000 proc init
1010 pr=-1:al=0:dr=peek($be):fp$=chr$(17)+chr$(29)
1090 end proc

Hier im Hauptprogramm geben wir zunächst die Überschrift aus (Z.140) und dann das Menü, das daraus besteht, den Inhalt der Diskette im aktuellen Laufwerk anzuzeigen und nach dem Namen der gewünschten VEC-Datei zu fragen (Z.1510/1520). Dabei braucht das Datei-Suffix ".VEC" nicht angegeben zu werden (Z.1525). Zeile 1530 testet, ob diese Datei vorhanden ist. Trifft das zu, wird sie in Zeile 1540 endgültig geöffnet.

1600 proc vopen
1610 open1,dr,2,f$: filecheck
1620 if pr then hires 0,15: repeat: parsevec: until pr=0
1630 close1
1640 end proc

2000 proc filecheck
2010 s$="": b$="": for i=0 to 2: get#1,b$: s$=s$+b$: next
2020 if s$<>"vec" then pr=0: al=3
2030 end proc

Der TinyVECViewer prüft zunächst, ob es sich um eine gültige VEC-Datei handelt ("filecheck", Z.2000 bis 2030), schaltet die Grafik ein und parset sie via "parsevec", wenn das zutrifft (Z.1620).

1100 proc parsevec
1110 get#1,b$: b=peek($0200)
1115 get x$: if x$="x" then pr=0: al=2
1120 if b=0 then vpunkt
1130 if b=1 then vlinie
1140 if b=2 then vrechteck
1150 if b=3 then vquadrat
1160 if b=4 then vellipse
1170 if b=5 then vkreis
1180 if b=10 then vpunktwolke
1190 if b=11 then vlinienzug
1200 if b=12 then vpolygon
1210 if b=99 then pr=0
1220 end proc

Dort liest das Programm den Befehlstoken ein (Z.1110) und verzweigt daraufhin entsprechend in die Unterroutinen (deren Labels alle mit dem Buchstaben "v" beginnen). Dazu braucht es auf jeden Fall die drei Hilfsroutinen zum Einlesen der Basisparameter "hol.wert", "x" und "y".

4000 proc hol.wert
4010 get#1,b$: b1=peek($0200)
4020 get#1,b$: b2=peek($0200)
4030 end proc

5000 proc x
5010 hol.wert
5020 x=b1+256*b2
5030 end proc

5100 proc y
5110 hol.wert
5120 y=b1+256*b2
5130 end proc

Im Rest werden die Befehle, die die Token angeben, ausgeführt: Punkte setzen, Linien ziehen, Figuren malen. Der Code ist sicher selbsterklärend:

10000 proc vpunkt
10010 x: y: plot x,y,1
10030 end proc

10100 proc vlinie
10110 x: y: x0=x: y0=y: x: y: line x0,y0,x,y,1
10130 end proc

10200 proc vrechteck
10210 x: y: x0=x: y0=y: x: y: x=x-x0: y=y-y0: rec x0,y0,x,y,1
10230 end proc

10300 proc vquadrat
10310 x: y: x0=x: y0=y: x: y=x: rec x0,y0,x,y,1
10330 end proc

10400 proc vellipse
10410 x: y: x0=x: y0=y: x: y: circle x0,y0,x,y,1
10430 end proc

10500 proc vkreis
10510 x: y: x0=x: y0=y: x: y=x: circle x0,y0,x,y,1
10530 end proc

10600 proc vpunktwolke
10610 get#1,b$: n=peek($0200): for i=1 to n: x: y: plot x,y,1: next
10630 end proc

10700 proc vlinienzug
10710 get#1,b$:n=peek($0200):x:y:plot x,y,0: x0=x: y0=y
10720 for i=2 to n: x: y: drawto x,y,1: next
10740 end proc

10800 proc vpolygon
10810 vlinienzug: drawto x0,y0,1
10820 end proc

Das Programm bei der Arbeit ist einfach faszinierend zu verfolgen! Hier ein Ergebnis (ein Bild ist fertig gerendert, wenn der Bildschirmrahmen hell wird):

Ergebnis

Download TSB TinyVEC (vier D64 als ZIP-Datei)

<nach oben>