Super line

     Pokial mate radi vseliake graficke efekty potom je tu pre vas nasledujuci program. Je to ukazka hlavneho algoritmu kreslenia ciar pouziteho v znamej serii programov Song in lines. Program je napisany pre pocitac ZX Spektrum, ale da sa bez problemov prepisat aj na ine pocitace.

10 REM 06.02 14.06.1994
20 OVER 0: INVERSE 0
30 INPUT "Pocet ciar:";c: LET x=23677: LET y=23678
40 INPUT "Mazanie ciar pomocou INVERSE ?(1=ano/0=nie)";m
50 RESTORE : DIM s(c,4): DIM d(3,4): IF NOT m THEN OVER 1
60 FOR a=1 TO 3: FOR b=1 TO 4: READ d(a,b): NEXT b: NEXT a
70 DATA 50,10,10,50,3,4,3,2,255,175,255,175
80 FOR a=1 TO c: FOR b=1 TO 4: LET s(a,b)=0: NEXT b: NEXT a
90 FOR a=1 TO c: INVERSE m: GO SUB 150: FOR b=1 TO 4
100 LET d(1,b)=d(1,b)+d(2,b)
110 IF d(1,b)>0 AND d(1,b)<d(3,b) THEN GO TO 130
120 LET d(2,b)=-d(2,b): LET d(1,b)=d(1,b)+2*d(2,b)
130 LET s(a,b)=d(1,b): NEXT b
140 INVERSE 0: GO SUB 150: NEXT a: GO TO 90
150 PLOT s(a,1),s(a,2): DRAW s(a,3)-PEEK x,s(a,4)-PEEK y
160 PLOT d(3,1)-s(a,1),s(a,2): DRAW d(3,3)-s(a,3)-PEEK x,s(a,4)-PEEK y
170 PLOT d(3,1)-s(a,1),d(3,2)-s(a,2): DRAW d(3,3)-s(a,3)-PEEK x,d(3,4)-s(a,4)-PEEK y
180 PLOT s(a,1),d(3,2)-s(a,2): DRAW s(a,3)-PEEK x,d(3,4)-s(a,4)-PEEK y
190 RETURN

     Program sam o sebe ide pomerne pomaly. Je to dane najme tym ze velmi velku cast celeho casu zaberaju rozne vypocty a osetrenia sluciek FOR NEXT. Komu sa chce, moze si tento program skompilovat. Pozor vsak na prikaz DIM s(c,4) na riadku 50. Niektore kompilatory (nastastie nie vsetky) totiz vyzaduju vopred poznat rozmery dimenzovanych premennych. V tom pripade dosadte namiesto premennej "c" do tohto prikazu nejake dostatocne velke cislo (napr. 200). Potom by ste ale nemali pri spustani skompilovaneho programu zadavat vecsi pocet ciar ako toto cislo. Song in lines
     Program vyuziva vyhradne celociselnu aritmetiku, preto mozete pouzit aj celociselny kompilator. Kto si trufa, moze samozrejme program prepisat priamo do strojoveho kodu. Vdaka celociselnej aritmetike to nebude ani moc tazke.
     Tento program nevyuziva ziadne nestandartne alebo nedokumentovane funkcie a sluzby a ani sa nepotrebuje synchronizovat so snimkovou frekvenciou monitora, preto by mal spravne fungovat na vsetkych pocitacoch a emulatoroch ktore su kompatibilne s pocitacom ZX Spektrum na urovni basicu.
     Par poznamok k prenositelnosti na ine pocitace: Program je pisany pomerne jednoducho, takze prepisanie do ineho basicu by nemal byt problem. Cisla 255 a 175 na riadku 70 udavaju pocet bodov grafickeho rezimu zmenseny o 1 (255 po osi X, 175 po osi Y). Prikaz PLOT X,Y presuva kresliaci kurzor na poziciu X,Y a prikaz DRAW X,Y kresli ciaru z aktualnej pozicie kurzora na poziciu ktora je od aktualnej posunuta o X,Y (jedna sa o relativne kreslenie ciary). Cleny "- PEEK x" a "- PEEK y" sluzia na prepocet relativneho posunutia pozicie na absolutne suradnice tejto pozicie. "x" je adresa v pameti, kde sa uchovava X-suradnica aktualnej pozicie kurzora, podobne "y" je adresa kde je ulozena Y-suradnica. Ak mate k dispozicii prikaz na kreslenie ciary pracujuci s absolutnymi suradnicami, potom tieto cleny mozete vynechat.
     Verim ze sa vam program bude pacit a ze ho pripadne pouzijete ako pekny graficky doplnok do nejakeho vlastneho vecsieho programu.