home *** CD-ROM | disk | FTP | other *** search
- '* ------------------------------------------------------- *
- '* ZEIGIMG.BAS *
- '* lädt eine Image-Datei und gibt sie auf dem *
- '* Bildschirm aus *
- '* (c) 1990 Kay Glahn & TOOLBOX *
- '* ------------------------------------------------------- *
- DEFINT A-Z
- DECLARE FUNCTION HercKart% ()
- DECLARE FUNCTION FileExist% (Datei$)
- DECLARE FUNCTION Lese% (Stand%, Inhalt$)
- DECLARE SUB SetXY (Segment%, Offset%, X%, Y%)
- DECLARE SUB GetInhalt (Inhalt$, Headlen%, Laenge%)
- DECLARE SUB GetHead (Headlen%, Farben%, Musterlen%, Breite%)
- DECLARE SUB GetImage (Datei$, Segment%, Offset%)
- DIM A(16000) AS INTEGER
- Datei$ = COMMAND$
- SELECT CASE HercKart
- CASE 1
- ON ERROR GOTO Fehler
- SCREEN 3
- ON ERROR GOTO 0
- SCREEN 0
- MaxX = 720
- MaxY = 348
- Mode = 3
- CASE ELSE
- MaxX = 640
- MaxY = 200
- Mode = 2
- END SELECT
- CLS
- WHILE Datei$ = ""
- INPUT "Name des Imagefiles : ", Datei$
- WEND
- IF INSTR(1, Datei$, ".") = 0 THEN
- Datei$ = LEFT$(Datei$, 8) + ".IMG"
- END IF
- Datei$ = UCASE$(Datei$)
- IF FileExist(Datei$) = 0 THEN
- PRINT Datei$; " existiert nicht !"
- END
- ELSE
- PRINT Datei$; " wird geladen, bitte warten !"
- END IF
- CALL GetImage(Datei$, VARSEG(A(0)), VARPTR(A(0)))
- CLS
- SCREEN Mode
- PUT (0, 0), A, PRESET
- WHILE INKEY$ = "": WEND
- SCREEN 0
- END
- Fehler:
- PRINT "QBHERC.COM wurde nicht geladen !"
- PRINT "Programm kann nicht fortgeführt werden."
- END
-
- '* ------------------------------------------------------- *
- '* Überprüfen ob die angegebene Datei vorhanden ist *
- FUNCTION FileExist (Datei$)
- OPEN Datei$ FOR BINARY AS #1
- Vorhanden = LOF(1)
- CLOSE #1
- IF Vorhanden > 0 THEN
- FileExist = 1
- ELSE
- FileExist = 0
- KILL Datei$
- END IF
- END FUNCTION
-
- '* ------------------------------------------------------- *
- '* Header der Image-Datei einlesen und auswerten *
- SUB GetHead (Headlen, Farben, Musterlen, Breite)
- DIM Highbyte AS STRING * 1
- DIM LowByte AS STRING * 1
- GET #1, 3, Highbyte
- GET #1, 4, LowByte
- Headlen = ASC(Highbyte) * 256 + ASC(LowByte)
- GET #1, 5, Highbyte
- GET #1, 6, LowByte
- Farben = ASC(Highbyte) * 256 + ASC(LowByte)
- GET #1, 7, Highbyte
- GET #1, 8, LowByte
- Musterlen = ASC(Highbyte) * 256 + ASC(LowByte)
- GET #1, 13, Highbyte
- GET #1, 14, LowByte
- Breite = ASC(Highbyte) * 256 + ASC(LowByte)
- END SUB
-
- '* ------------------------------------------------------- *
- '* Daten entpacken und in ein Array übergeben *
- SUB GetImage (Datei$, Segment, Offset)
- SHARED MaxX, MaxY
- DIM Muster(4096) AS INTEGER
- DIM Pattern(16) AS INTEGER
- DEF SEG = Segment
- OPEN Datei$ FOR BINARY AS #1
- CALL GetHead(Headlen, Farben, Musterlen, Breite)
- CALL GetInhalt(Inhalt$, Headlen, Laenge)
- CALL SetXY(Segment, Offset, MaxX, MaxY)
- Links = INT((MaxX - Breite) / 2)
- WHILE Stand < Laenge AND Y < MaxY
- A = Lese(Stand, Inhalt$)
- B = Lese(Stand, Inhalt$)
- C = Lese(Stand, Inhalt$)
- IF A = 0 AND B = 0 AND C = &HFF THEN
- Vertrep = Lese(Stand, Inhalt$)
- ELSE
- IF A = 0 AND B = 0 THEN
- EXIT SUB
- ELSE
- Stand = Stand - 3
- Vertrep = 1
- END IF
- END IF
- FOR Farbe = 1 TO Farben
- X = Links
- WHILE (X < Breite + Links)
- A = Lese(Stand, Inhalt$)
- SELECT CASE A
- CASE 0
- A = Lese(Stand, Inhalt$)
- FOR j = 1 TO Musterlen
- Pattern(j) = Lese(Stand, Inhalt$)
- NEXT
- FOR j = 1 TO A
- FOR t = 1 TO Musterlen
- Muster((j - 1) * Musterlen + t) = Pattern(t)
- NEXT
- NEXT
- N = A * Musterlen
- CASE &H80
- A = Lese(Stand, Inhalt$)
- FOR j = 1 TO A
- Muster(j) = Lese(Stand, Inhalt$)
- NEXT
- N = A
- CASE ELSE
- N = A AND &H7F
- IF (A AND &H80) <> 0 THEN
- FOR t = 1 TO N
- Muster(t) = &HFF
- NEXT
- ELSE
- FOR t = 1 TO N
- Muster(t) = 0
- NEXT
- END IF
- END SELECT
- FOR i = 1 TO Vertrep
- Adrs = 3 + (Y + i - 1) * (MaxX \ 8) + (X \ 8)
- Adrs = Adrs + Offset
- FOR t = 1 TO N
- POKE Adrs + t, Muster(t)
- NEXT
- NEXT
- X = X + N * 8
- WEND
- NEXT
- Y = Y + Vertrep
- WEND
- CLOSE #1
- END SUB
-
- '* ------------------------------------------------------- *
- '* Datenblock der Datei einlesen *
- SUB GetInhalt (Inhalt$, Headlen, Laenge)
- SEEK 1, Headlen * 2 + 1
- Laenge = LOF(1) - Headlen * 2
- Inhalt$ = STRING$(Laenge, " ")
- GET #1, , Inhalt$
- END SUB
-
- '* ------------------------------------------------------- *
- '* überprüfen ob eine Herculeskarte vorhanden ist *
- FUNCTION HercKart
- DEF SEG = &H40
- Karte = PEEK(16) + 256 * PEEK(17)
- Karte = (Karte AND 48) / 16
- SELECT CASE Karte
- CASE IS = 3
- HercKart = 1
- CASE ELSE
- HercKart = 0
- END SELECT
- END FUNCTION
-
- '* ------------------------------------------------------- *
- '* Ein Byte aus String in eine Integer-Variable übertragen *
- FUNCTION Lese (Stand, Inhalt$)
- Stand = Stand + 1
- Lese = ASC(MID$(Inhalt$, Stand, 1))
- END FUNCTION
-
- '* ------------------------------------------------------- *
- '* Ausdehnung des Bildes in X- und Y-Richtung festlegen *
- SUB SetXY (Segment, Offset, X, Y)
- DEF SEG = Segment
- POKE Offset, X MOD 256
- POKE Offset + 1, X \ 256
- POKE Offset + 2, Y MOD 256
- POKE Offset + 3, Y \ 256
- END SUB
- '* ------------------------------------------------------- *
- '* Ende von ZEIGIMG.BAS *