
Pro-DOS                                   Hans-Joachim Berndt 86

                                                                
                                                                
Pro-DOS bedeutet  professional  Display  Operating  System.  Das
Programm wurde in 3787 Bytes untergebracht.  Pro-DOS  bedient  8
verschiedene Bildschirmfenser, die  unabh{ngig  voneinander  be-
handelt werden. PRINT und LIST erfolgt ausschlie~lich in  diesen
Fenstern (im Programmodus). Pro-DOS beinhaltet  64  Zeichen  pro
Zeile. Au~erdem kann mit LARGE in 8 verschiedenen Richtungen und
256*256  verschiedenen  Gr|~en  gedruckt  werden.  Der   Pro-DOS
Grafikschirm (ohne Fenster) hat die Ma~e 256*192! Pro-DOS  kennt
31 neue Befehle,  die  als  Basic-Wort  mit  vorangesetztem  "*"
leicht zu erreichen sind.                                       
                                                                
Alle  Window-Befehle  arbeiten  }ber  Channel  "P".  Open#2,"P":
\ffnet den Bildschirm f}r Pro-DOS. Das erweiterte Basic wird mit
USR 60000 initialisiert. Gleichzeitig wird Pro-DOS initialisiert
und der Befehl *NEW ausgef}hrt. Ahle Befehle m}ssen  buchstaben-
weise eingegeben werden.                                        
                                                                
                                                                
  Die Window-Befehle  
                                                                
  *NEW  
                                                                
*NEW ist identisch mit der Befehlsfolge *PRINT INVERSE 0; FLASH 
0; ;OVER 0; BRIGHT 0; INK 0; PAPER 7; AT 0,0:  *WSZ  0,0,31,23:
*Plot 0, 191: *TPAT 0: *GPAT 255: *DIR 8: *CSIZE  1,1:  *NORMAL:
*CHR: *SCREEN 16384.                                            
                                                                
                                                                
  *CLS  
                                                                
*CLS l|scht das Fenster und f}llt es mit *TPAT (INIT=0).        
                                                                
                                                                
  *CLEAR  
                                                                
*CLEAR mode - 4 M|glichkeiten stehen zur Auswahl:               
  mode=0: Es wird ignoriert;                                    
  mode=1: Clear Pixel                                           
          (mit *TPAT);                                          
  mode=2: Clear Attributes;                                     
  mode=3: Clear Pixel und Attributes=*CLS                       
                                                                
                                                                
  *SCROLL  
                                                                
*SCROLL mode, direction - mode wie bei  *Clear.  Folgende  Rich-
tungen sind m|glich:                                            
  direction=5: SCROLL LEFT;                                     
  direction=6: SCROLL DOWN;                                     
  direction=7: SCROLL UP;                                       
  direction=8: SCROLL RIGHT.                                    
Auch Kombinationen sind  m|glich:  z.B.:  *SCROLL  3,15  scrollt
rechts hoch                                                     
                                                                
                                                                
 *ROLL  
                                                                
*ROLL mode,direction - rollt das Fenster, ansonsten wie  SCROLL;
bei Richtung hoch und runter wird *SCROLL aufgerufen.           
                                                                
                                                                
  *WRAP  
                                                                
*WRAP schaltet AUTO-SCROLL ab. Wenn das Fenster voll  ist,  wird
bei Position 0,0 weiter gedruckt.                               
                                                                
                                                                
  *NOWRAP  
                                                                
*NOWRAP schaltet um auf AUTOSCROLL.                             
                                                                
                                                                
  *CCHR  
                                                                
*CCHR schaltet auf 64 Zeichen pro Zeile um.  Das  Fenster  wird 
halbiert.                                                       
                                                                
                                                                
  *CHR  
                                                                
*CHR schaltet auf 32 Zeichen pro Zeile um.  Sollte  das  Fenster
im Modus *CCHR f}r 32 Zeichen  zu  gro~  sein,  so  erfolgt  die
Fehlermeldung "OUT OF SCREEN".                                  
                                                                
                                                                
  *TPAT  
                                                                
*TPAT byte - byte=0...255. Muster (bin), mit dem das Fenster bei
*CLEAR und *CLS gef}llt wird (Pixel). Das Muster rotiert, so da~
ein schr{ges Muster entsteht.                                   
                                                                
                                                                
  *SCREEN  
                                                                
*SCREEN adresse - legt fest,  wo  ein  alternativer  Bildschirm-
speicher beginnt. Dieser mu~ zwischen PRODOS (6000)  und  RAMTOP
liegen. Es wird nicht auf Richtigkeit gepr}ft.  LIST  und  Print
sowie alle Grafikbefehle werden nun dorthin geschickt, sind also
nicht mehr sichtbar. Beispiel:  CLEAR 49999: *SCREEN 5E4        
L{nge des Bildschirms immer noch 6912 Byte.                     
                                                                
                                                                
  *SWAP  
                                                                
*SWAP kopiert den  alternativen  auf  den  SINCLAIR-Schirm.  Bei
*SCREEN 16384 ist das }berfl}ssig.                              
                                                                
                                                                
  *WINDOW  
                                                                
*WINDOW nummer - (nummer zwischen 0 und 7)  legt  fest,  welches
Fenster benutzt wird. Alle Befehle au~er Grafik wirken jetzt  in
diesem Fenster. Beispiel: *WINDOW2                              
                                                                
                                                                
  *WSIZE  
                                                                
*WSIZE xa,ya,xe,ye - legt die Fenstergr|~e fest. ya = 0...23 ist
die Anfangszeile des Fensters, ye = 0...23 die Endzeile. Bei  32
Zeichen pro Zeile gilt: xa = 0...31 - Anfangsspalte des Fensters
und xe = 0...31 - Endspalte des Fensters.  Bei  64  Zeichen  pro
Zeile k|nnen xa und xe  doppelt  so  gro~  sein.  Durch  falsche
Eingaben ist  die  Fehlermeldung  5  "OUT  OF  SCREEN"  m|glich.
Beispiel: *WSIZE 0,0,0,0 erzeugt ein Fenster in der Gr|~e  eines
CHR. Ein SCROLL wirkt dann nicht, daf}r wird CLEAR angesprungen.
                                                                
                                                                
  *WPOKE  
                                                                
*WPOKE wbyte,datem - wbyte = 0...19; datum =  zu  pokendes  Wort
(0...255). Dies ist ein Systemvariablen-Poke mit allen Gefahren,
die damit verbunden sind (siehe Window-Maps  f}r  Einzelheiten).
Z.b. setzt *WPOKE 6,X: *WPOKE 7,Y die Plot-Position auf die  Ko-
ordinaten X und Y.                                              
                                                                
                                                                
                                                                
  Die Grafikbefehle  
                                                                
                                                                
  *LARGE  
                                                                
*LARGE schaltet auf Gro~buchstaben um. Diese  werden  mit  *SIZE
festgelegt. Abhtung: auch LIST funktioniert mit *LARGE. Es  kann
aber jederzeit mit BREAK abgebrochen werden. Dies gilt f}r  alle
Grafik-Routinen.                                                
                                                                
                                                                
  *NORMAL  
                                                                
*NORMAL schaltet die Gro~buchstaben ab  und  kehrt  in  den  je-
weiligen Charaktermodus zur}ck, ohne diesen zu ver{ndern.       
                                                                
                                                                
  *CSIZE  
                                                                
*CSIZE h|he,breite - H|he und Breite k|nnen in Vielfachen  eines
normalen 8 * 8 - Charakters angegeben werden. Bereich:  0...255,
wobei der 0 eine  Gr|~e  von  256  entspricht.  (Kaum  sinnvoll:
BREAK)                                                          
                                                                
                                                                
  *DIR  
                                                                
*DIR richtung - gibt an, in welcher Richtung die  Gro~buchstaben
gedruckt werden. Ausgangspunkt ist immer der  letzte  Plotpunkt.
Es sind alle 8 Richtungen m|glich. Diese werden in Anlehnung  an
die Cursorzahlen  (vgl.  SCROLL)  festgelegt.  Beispiel:  *DIR15
druckt rechts hoch.                                             
                                                                
                                                                
  *GPAT  
                                                                
*GPAT byte - legt das Plotmuster fest.  Bei  255  ist  dies  der
normale SINCLAIR-Modus. Auch *GPAT wird rotiert, so da~  schr{ge
Muster entstehen. Alle nachfolgenden Befehle  werden  von  *GPAT
beeinflu~t. Beispiel: *GPAT @IN 10101010                        
                                                                
                                                                
  *PLOT  
                                                                
*PLOT x,y - entspricht dem SINCLAIR-Plot. x = 0...255,          
y = 0..191. Die Koordinate 0,0 befindet sich am linken  unteren
Bildschirmrand.                                                 
                                                                
                                                                
  *DRAW  
                                                                
*DRAW x,y - wie bei SINCLAIR, jedoch mit erweitertem  Bildschirm
256 * 192.                                                      
                                                                
                                                                
  *LINE  
                                                                
*LINE xo,y0,x1,y1 - zieht  eine  Gerade  vom  Punkt  x0,y0  nach
x1,y1. Diese Routine akzeptiert alle Eingaben. Das zweite  Komma
wird nicht }berpr}ft. Es wird also auch  *LINE  0,0  TO  255,191
akzeptiert,wenn TO ein Token ist.                               
                                                                
                                                                
  *BOX  
                                                                
*BOX x0,y0,x1,y1 - zeichnet eine Box mit den angegebenen absolu-
ten Koordinaten.                                                
                                                                
                                                                
  *FBOX  
                                                                
*FBOX x0,y0,x1,y1 - zeichnet eine mit *GPAT gef}llte Box mit den
angegebenen absoluten Koordinaten. Ist x0 > x1  oder  y0  >  y1,
geschieht nichts.                                               
                                                                
                                                                
  *TRIANGLE 
                                                                
*TRIANGLE x0,y0,x1,y1,x2,y2  -  zeichnet  ein  Dreieck  mit  den
gegebenen absoluten Koordinaten.                                
Beispiel: *TRIANGLE0,0,255,0,127,191.                           
                                                                
                                                                
  *ELLIPSE  
                                                                
*ELLIPSE x,y,a,b - zeichnet die Ann{herung einer Ellipse mit dem
Mittelpunkt x,y und der Halbachse a sowie der Hal`achse  b.  Die
Ellipse wird aus 30 Geraden gebildet. Bei a = b ergibt sich  ein
Kreis. Beispiel: *Ellipse127,95,127,95.                         
                                                                
                                                                
  *FILL  
                                                                
*FILL x,y - f}llt eine geschlossene Figur vollst{ndig aus.  Hier
ist *GPAT unwirksam. Es m}ssen mindestens  ca.  500  Bytes  frei
sein. Ein Test auf gen}gend Platz erfolgt nicht.                
                                                                
                                                                
  *PAINT  
                                                                
*PAINT x,y - f}llt eine  geschlossene  Figur  mit  einem  Punkt-
muster. Diese Routine ist selbst sehr kurz, jedoch rekursiv  und
braucht dadurch bei gr|~eren Figuren eine Unmenge Speicherplatz.
Ist dieser nicht gen}gend, erfolgt die Fehlermelung 4:  "OUT  OF
MEMORY". Es waren dann noch 100 Bytes frei.                     
                                                                
                                                                
  *HATCH  
                                                                
*HATCH x,y,adresse - Hatch hei~t schraffieren. Ist  die  Adresse
z.B. die des 1. UDG-Zeichens (*HATCH x,y,USR "A"), so wird  eine
geschlossene Figur wie bei *FILL erst gef}llt und  anschliessend
mit dem UDG "A" versehen. Es sind  somit  beliebige  Schraffuren
m|glich. x und y sInd die Koobdinaten wie bei *PAINT und *FILL. 
                                                                
                                                                
  *MATCH  
                                                                
*MATCH adresse - die zuletzt schraffierte Figur wird nun mit dem
Muster ab der angegebenen Adresse schraffiert.                  
Beispiel: *MATCH SR "P" f}llt die Figuren mit "p",falls  dieses
UDG nicht schon ver{ndert wurde.                                
                                                                
                                                                

                                                                
                                                                
Leider  brauchen  die  Routinen  *HATCH  und  *MATCH    6K    an
Speicherplatz (nur Pixel werden ben|tigt). Dieser "dritte  Bild-
schirm" wurde an die Stelle 53000 gelegt. Somit mu~ ein weiterer
Bildschirm (*SCREEN) 6912 Bytes weiter  unten  im  Speicher  an-
fangen. Falls diese Befehle nicht benutzt werden, kann nat}rlich
auch *SCREEN  50000  eingegeben  werden.  Man  k|nnte  auch  mit
*SCREEN 53000 und *MATCH einige Effekte erreichen.  Bei  *SCREEN
60000 }berschreiben Sie das  Programm  selbst.  Dies  f}hrt  zum
A B S T U R Z !                                                 
                                                                
Alle Farbbefehle werden }ber PRINT eingegeben. Dieses  ist  ver-
gleichbar mit den tempor{ren Farben  bei  SINCLAIR.  Nach  jedem
Farbwechsel wird alles auf Initialwerte gesetzt.  Ansonsten  be-
halten die Attribute ihren Wert. PAPER 8 oder 9 etc. sind  eben-
falls vorhanden. Grafikbefehle benutzen die  gleichen  Attribute
wie die Textdarstellung.  Um  PLOT  INVERSE  1;  OVER  1;x,y  zu
erhalten, mu~ man nun PRINT INVERSE 1;  OVER  1;  *PLOTx,y  ein-
geben. (Dies wurde aus Platzgr}nden so gew{hlt.)                
                                                                
Jetzt noch zu den Control-Characters. Hier  sind  folgende  Ein-
gaben m|glich: CHR$ 8, CHR$  9,  CHR$  10,  CHR$  11,  CHR$  12,
CHR$ 13, CHR$ 16, CHR$ 17, CHR$ 18, CHR$ 19, CHR$ 20,  CHR$  21,
CHR$ 22, CHR$ 23.                                               
                                                                

Weiter mit PRODOS.TA2                                           


