home *** CD-ROM | disk | FTP | other *** search
- '*========================================================*
- '* MCGA.BAS *
- '* Routinen für den Grafikmodus 13h in Turbo Basic und *
- '* Power-Basic *
- '* (c) 1990 Roland G. Hülsmann und toolbox *
- '*========================================================*
- farbe% = 7
- CALL MCGA256Color
- farbe% = 9: seite% = 0
- CALL rand(13)
- CALL Position(4, 1)
- CALL Zeichen(210, 20)
- CALL Position(18, 0)
- CALL Punkt(20, 20, 4)
- CALL Text(" MCGA-Grafik für Power- und Turbo Basic")
- CALL Char(13)
- CALL Char(10)
- farbe% = 14
- CALL Text(" (c) 1991 by R. G. Hülsmann und toolbox")
- CALL Linie(10, 10, 220, 100, 14)
- CALL Ellipse(100, 100, 40, 20, 13)
- CALL Kreis(100, 100, 30, 5)
- FOR i% = 70 TO 80
- CALL VLinie(i%, 60, 50, i%)
- NEXT i%
- FOR i% = 80 TO 120
- CALL HLinie(160, i%, 50, i%)
- NEXT i%
- CALL Rahmen(2, 2, 317, 197, 14)
- CALL Kasten(250, 10, 350, 55, 10)
- BEEP
- a$ = INPUT$(1)
- CALL TextMode
- END
-
- DEF FNMax% (x%, y%)
- IF x% > y% THEN FNMax% = x% ELSE FNMax% = y%
- END DEF
-
- SUB Char (z%)
- '* Setzt ein Zeichen mit der aktuellen Farbe an die
- '* aktuelle Bildschirmposition
- SHARED farbe%
- REG 1, &HE00 + z%
- REG 2, farbe%
- CALL INTERRUPT &H10
- END SUB
-
- SUB Ellipse (mx%, my%, hx%, hy%, c%)
- '* Zeichnet eine Ellipse mit den Begrenzungen
- '* mx%/my% und hx%/hy% in der Farbe c%
- x% = hx%: y% = -1
- dy! = 2 * hy% * hy%: dx! = 2 * hx% * hx%
- r! = dy! * hx% / 2
- WHILE x% > 0
- IF r! >= 0 THEN y% = y% + 1: r! = r! - dx! * y%
- IF r! < 0 THEN DECR x%, 1: r! = r! + dy! * x%
- CALL Punkt(mx% + x%, my% + y%, c%)
- CALL Punkt(mx% - x%, my% + y%, c%)
- CALL Punkt(mx% - x%, my% - y%, c%)
- CALL Punkt(mx% + x%, my% - y%, c%)
- WEND
- END SUB
-
- SUB HLinie (x%, y%, l%, c%)
- FOR i% = 0 TO l% STEP SGN(l%)
- CALL Punkt(x% + i%, y%, c%)
- NEXT i%
- END SUB
-
- SUB Kasten (x1%, y1%, x2%, y2%, c%)
- '* Zeichnet eine Box an die Koordinaten x1%/y1%
- '* bis x2%, y2% in der Farbe c%
- FOR i% = y1% TO y2% STEP SGN(y2% - y1%)
- CALL HLinie(x1%, i%, y2% - y1%, c%)
- NEXT i%
- END SUB
-
- SUB Kreis (mx%, my%, ra%, c%)
- '* Zeichnet einen Kreis um den Mittelpunkt mx%, my%
- '* mit den Radius ra% in der Farbe c%
- CALL Ellipse(mx%, my%, ra%, ra%, c%)
- END SUB
-
- SUB Linie (x1%, y1%, x2%, y2%, c%)
- '* Zeichnet eine Linie von x1%/y1% nach x2%/y2% in der
- '* Farbe c%
- dx% = x2% - x1%: dy% = y2% - y1%
- stps% = FNMax%(ABS(dx%), ABS(dy%)) + 1
- dxs! = dx% / stps%: dys! = dy% / stps%
- x! = x1%: y! = y1%
- FOR u% = 1 TO stps%
- CALL Punkt(INT(x!), INT(y!), c%)
- x! = x! + dxs! : y! = y! + dys!
- NEXT u%
- CALL Punkt(x2%, y2%, c%)
- END SUB
-
- SUB Position (x%, y%)
- '* Setzt den Cursor an die Position x%/y%
- REG 1, &H200
- REG 2, 0
- REG 4, 256 * x% + y%
- CALL INTERRUPT &H10
- END SUB
-
- SUB Punkt (x%, y%, c%)
- '* Setzt einen Punkt in der Farbe c% an die
- '* Bildschirmposition x%/y%
- REG 1, &HC00 + c%
- REG 2, 0: REG 3, x%: REG 4, y%
- CALL INTERRUPT &H10
- END SUB
-
- SUB Rahmen (x1%, y1%, x2%, y2%, c%)
- '* Zeichnet einen Rahmen mit den Koordinaten
- '* x1%/y1% und x2%/y2% in der Farbe c%
- CALL VLinie(x1%, y1%, y2% - y1%, c%)
- CALL HLinie(x1%, y1%, x2% - x1%, c%)
- CALL VLinie(x2%, y2%, y1% - y2%, c%)
- CALL HLinie(x2%, y2%, x1% - x2%, c%)
- END SUB
-
- SUB rand (x%)
- '* Setzt den Bildschirmrand in der Farbe x%
- REG 1, &H1001
- REG 2, 256 * x%
- CALL INTERRUPT &H10
- END SUB
-
- SUB TextMode
- '* Schaltet von Grafikmodus in den Textmodus zurück.
- '* Es darf auf keinen Fall SCREEN 0 verwendet werden,
- '* da dann das Programm abstürzt.
- REG 1, 3: CALL INTERRUPT &H10
- END SUB
-
- SUB SetRGB (n%, r%, g%, b%)
- '* Setzt die Farbplatte
- REG 1, &H1010
- REG 2, n%
- REG 3, &H100 * g% + b%
- REG 4, &H100 * r%
- CALL INTERRUPT &H10
- END SUB
-
- SUB Text (z$)
- '* Gibt den String z$ an der aktuellen Bildschirm-
- '* Position aus.
- SHARED farbe%
- FOR i% = 1 TO LEN(z$)
- REG 1, &HE00 + ASC(MID$(z$, i%, 1))
- REG 2, farbe%
- CALL INTERRUPT &H10
- NEXT i%
- END SUB
-
- SUB MCGA256Color
- '* Schaltet in den 256-Farben 320x200 Grafikmodus.
- REG 1, &H13
- CALL INTERRUPT &H10
- END SUB
-
- SUB VLinie (x%, y%, l%, c%)
- FOR i% = 0 TO l% STEP SGN(l%)
- CALL Punkt(x%, y% + i, c%)
- NEXT i%
- END SUB
-
- SUB VLoad (n$)
- '* Laden von MCGA-Bilder (nur für Turbo-Basic)
- DEF SEG = &HA000
- OUT &H3C4, 2
- OUT &H3C5, 15
- BLOAD n$
- DEF SEG
- END SUB
-
- SUB VSave (n$)
- '* Abspeichern von MCGA-Bildern (nur für Turbo Basic)
- DEF SEG = &HA000
- OUT &H3CE, 4
- OUT &H3CF, 0
- BSAVE n$, 0, &HF7FF
- DEF SEG
- END SUB
-
- SUB Zeichen (z%, n%)
- SHARED farbe%
- REG 1, &H900 + z%
- REG 2, farbe%
- REG 3, n%
- CALL INTERRUPT &H10
- END SUB
-
- '*========================================================*
- '* Ende von MCGA.BAS *