home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 01 / tricks / mcga.bas < prev    next >
Encoding:
BASIC Source File  |  1990-10-17  |  4.8 KB  |  198 lines

  1. '*========================================================*
  2. '*                     MCGA.BAS                           *
  3. '*  Routinen für den Grafikmodus 13h in Turbo Basic und   *
  4. '*                     Power-Basic                        *
  5. '*      (c) 1990 Roland G. Hülsmann und toolbox           *
  6. '*========================================================*
  7. farbe% = 7
  8. CALL MCGA256Color
  9. farbe% = 9: seite% = 0
  10. CALL rand(13)
  11. CALL Position(4, 1)
  12. CALL Zeichen(210, 20)
  13. CALL Position(18, 0)
  14. CALL Punkt(20, 20, 4)
  15. CALL Text(" MCGA-Grafik für Power- und Turbo Basic")
  16. CALL Char(13)
  17. CALL Char(10)
  18. farbe% = 14
  19. CALL Text(" (c) 1991 by R. G. Hülsmann und toolbox")
  20. CALL Linie(10, 10, 220, 100, 14)
  21. CALL Ellipse(100, 100, 40, 20, 13)
  22. CALL Kreis(100, 100, 30, 5)
  23. FOR i% = 70 TO 80
  24.   CALL VLinie(i%, 60, 50, i%)
  25. NEXT i%
  26. FOR i% = 80 TO 120
  27.   CALL HLinie(160, i%, 50, i%)
  28. NEXT i%
  29. CALL Rahmen(2, 2, 317, 197, 14)
  30. CALL Kasten(250, 10, 350, 55, 10)
  31. BEEP
  32. a$ = INPUT$(1)
  33. CALL TextMode
  34. END
  35.  
  36. DEF FNMax% (x%, y%)
  37.   IF x% > y% THEN FNMax% = x% ELSE FNMax% = y%
  38. END DEF
  39.  
  40. SUB Char (z%)
  41. '* Setzt ein Zeichen mit der aktuellen Farbe an die
  42. '* aktuelle Bildschirmposition
  43. SHARED farbe%
  44.   REG 1, &HE00 + z%
  45.   REG 2, farbe%
  46.   CALL INTERRUPT &H10
  47. END SUB
  48.  
  49. SUB Ellipse (mx%, my%, hx%, hy%, c%)
  50. '* Zeichnet eine Ellipse mit den Begrenzungen
  51. '* mx%/my% und hx%/hy% in der Farbe c%
  52.   x% = hx%: y% = -1
  53.   dy! = 2 * hy% * hy%: dx! = 2 * hx% * hx%
  54.   r! = dy! * hx% / 2
  55.   WHILE x% > 0
  56.     IF r! >= 0 THEN y% = y% + 1: r! = r! - dx! * y%
  57.     IF r! < 0 THEN DECR x%, 1: r! = r! + dy! * x%
  58.     CALL Punkt(mx% + x%, my% + y%, c%)
  59.     CALL Punkt(mx% - x%, my% + y%, c%)
  60.     CALL Punkt(mx% - x%, my% - y%, c%)
  61.     CALL Punkt(mx% + x%, my% - y%, c%)
  62.   WEND
  63. END SUB
  64.  
  65. SUB HLinie (x%, y%, l%, c%)
  66.   FOR i% = 0 TO l% STEP SGN(l%)
  67.     CALL Punkt(x% + i%, y%, c%)
  68.   NEXT i%
  69. END SUB
  70.  
  71. SUB Kasten (x1%, y1%, x2%, y2%, c%)
  72. '* Zeichnet eine Box an die Koordinaten x1%/y1%
  73. '* bis x2%, y2% in der Farbe c%
  74.   FOR i% = y1% TO y2% STEP SGN(y2% - y1%)
  75.     CALL HLinie(x1%, i%, y2% - y1%, c%)
  76.   NEXT i%
  77. END SUB
  78.  
  79. SUB Kreis (mx%, my%, ra%, c%)
  80. '* Zeichnet einen Kreis um den Mittelpunkt mx%, my%
  81. '* mit den Radius ra% in der Farbe c%
  82.   CALL Ellipse(mx%, my%, ra%, ra%, c%)
  83. END SUB
  84.  
  85. SUB Linie (x1%, y1%, x2%, y2%, c%)
  86. '* Zeichnet eine Linie von x1%/y1% nach x2%/y2% in der
  87. '* Farbe c%
  88.   dx% = x2% - x1%: dy% = y2% - y1%
  89.   stps% = FNMax%(ABS(dx%), ABS(dy%)) + 1
  90.   dxs! = dx% / stps%: dys! = dy% / stps%
  91.   x! = x1%: y! = y1%
  92.   FOR u% = 1 TO stps%
  93.     CALL Punkt(INT(x!), INT(y!), c%)
  94.     x! = x! + dxs! : y! = y! + dys!
  95.   NEXT u%
  96.   CALL Punkt(x2%, y2%, c%)
  97. END SUB
  98.  
  99. SUB Position (x%, y%)
  100. '* Setzt den Cursor an die Position x%/y%
  101.   REG 1, &H200
  102.   REG 2, 0
  103.   REG 4, 256 * x% + y%
  104.   CALL INTERRUPT &H10
  105. END SUB
  106.  
  107. SUB Punkt (x%, y%, c%)
  108. '* Setzt einen Punkt in der Farbe c% an die
  109. '* Bildschirmposition x%/y%
  110.   REG 1, &HC00 + c%
  111.   REG 2, 0: REG 3, x%: REG 4, y%
  112.   CALL INTERRUPT &H10
  113. END SUB
  114.  
  115. SUB Rahmen (x1%, y1%, x2%, y2%, c%)
  116. '* Zeichnet einen Rahmen mit den Koordinaten
  117. '* x1%/y1% und x2%/y2% in der Farbe c%
  118.   CALL VLinie(x1%, y1%, y2% - y1%, c%)
  119.   CALL HLinie(x1%, y1%, x2% - x1%, c%)
  120.   CALL VLinie(x2%, y2%, y1% - y2%, c%)
  121.   CALL HLinie(x2%, y2%, x1% - x2%, c%)
  122. END SUB
  123.  
  124. SUB rand (x%)
  125. '* Setzt den Bildschirmrand in der Farbe x%
  126.   REG 1, &H1001
  127.   REG 2, 256 * x%
  128.   CALL INTERRUPT &H10
  129. END SUB
  130.  
  131. SUB TextMode
  132. '* Schaltet von Grafikmodus in den Textmodus zurück.
  133. '* Es darf auf keinen Fall SCREEN 0 verwendet werden,
  134. '* da dann das Programm abstürzt.
  135.   REG 1, 3: CALL INTERRUPT &H10
  136. END SUB
  137.  
  138. SUB SetRGB (n%, r%, g%, b%)
  139. '* Setzt die Farbplatte
  140.   REG 1, &H1010
  141.   REG 2, n%
  142.   REG 3, &H100 * g% + b%
  143.   REG 4, &H100 * r%
  144.   CALL INTERRUPT &H10
  145. END SUB
  146.  
  147. SUB Text (z$)
  148. '* Gibt den String z$ an der aktuellen Bildschirm-
  149. '* Position aus.
  150. SHARED farbe%
  151.   FOR i% = 1 TO LEN(z$)
  152.     REG 1, &HE00 + ASC(MID$(z$, i%, 1))
  153.     REG 2, farbe%
  154.     CALL INTERRUPT &H10
  155.   NEXT i%
  156. END SUB
  157.  
  158. SUB MCGA256Color
  159. '* Schaltet in den 256-Farben 320x200 Grafikmodus.
  160.   REG 1, &H13
  161.   CALL INTERRUPT &H10
  162. END SUB
  163.  
  164. SUB VLinie (x%, y%, l%, c%)
  165.   FOR i% = 0 TO l% STEP SGN(l%)
  166.     CALL Punkt(x%, y% + i, c%)
  167.   NEXT i%
  168. END SUB
  169.  
  170. SUB VLoad (n$)
  171. '* Laden von MCGA-Bilder (nur für Turbo-Basic)
  172.   DEF SEG = &HA000
  173.     OUT &H3C4, 2
  174.     OUT &H3C5, 15
  175.     BLOAD n$
  176.   DEF SEG
  177. END SUB
  178.  
  179. SUB VSave (n$)
  180. '* Abspeichern von MCGA-Bildern (nur für Turbo Basic)
  181.   DEF SEG = &HA000
  182.     OUT &H3CE, 4
  183.     OUT &H3CF, 0
  184.     BSAVE n$, 0, &HF7FF
  185.   DEF SEG
  186. END SUB
  187.  
  188. SUB Zeichen (z%, n%)
  189. SHARED farbe%
  190.   REG 1, &H900 + z%
  191.   REG 2, farbe%
  192.   REG 3, n%
  193.   CALL INTERRUPT &H10
  194. END SUB
  195.  
  196. '*========================================================*
  197. '*                  Ende von MCGA.BAS                     *
  198.