home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1990
/
06
/
heimwerk
/
zeigimg.bas
< prev
next >
Wrap
BASIC Source File
|
1990-03-07
|
6KB
|
206 lines
'* ------------------------------------------------------- *
'* 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 *