home *** CD-ROM | disk | FTP | other *** search
- '***********************************************************
- ' ICOSCAN.BAS
- ' Copyright (C) 1991 Kay Glahn & DMV-Verlag
- ' Programm zum Anzeigen aller in einem Inhaltsverzeichnis
- ' enthaltener Icons
- ' Compiler: Basic-PDS ab Version 7.0
- '************************************************************
- DECLARE FUNCTION GetFileCount% (filespec$)
- DECLARE SUB GetGraf (mode%)
- DECLARE FUNCTION bestvideo% ()
- DECLARE SUB ReadPixel (Pixel() AS LONG, Farbe() AS INTEGER, BitproPix%, Begin&, Grose&)
- DEFINT A-Z
-
- TYPE video
- maxx AS INTEGER
- maxy AS INTEGER
- maxh AS INTEGER
- maxv AS INTEGER
- Maxcolor AS INTEGER
- END TYPE
- DIM Graf AS video
- DIM Farbe(0 TO 15) AS INTEGER
- ON KEY(1) GOSUB Abbruch
- KEY(1) ON
- ON ERROR GOTO Errorhandler
- best = bestvideo
- PRINT "Icon-Scanner (C) 1991 Kay Glahn & DMV-Verlag"
- SLEEP 2
- CALL GetGraf(best)
- IF best = 0 THEN
- PRINT "Kein grafikfähiger Videoadapter vorhanden !"
- SLEEP 2
- CLOSE
- END
- END IF
- high% = Graf.maxy / Graf.maxv * 5
- Path$ = COMMAND$
- IF LEN(Path$) = 2 AND INSTR(Path$, ":") = 2 THEN
- Path$ = CURDIR$(Path$)
- END IF
- IF INSTR(Path$, "\") <> LEN(Path$) THEN
- filespec$ = Path$ + "\*.ico"
- ELSE
- filespec$ = Path$ + "*.ico"
- END IF
- filecount = GetFileCount(filespec$)
- IF filecount THEN
- REDIM Filelist$(filecount)
- ELSE
- SCREEN 0, 0, 0
- CLS
- PRINT "Keine Icons im angegebenen Verzeichnis gefunden !"
- SLEEP 2
- END
- END IF
- Filelist$(1) = DIR$(filespec$)
- FOR Counter = 2 TO filecount
- Filelist$(Counter) = DIR$
- NEXT Counter
- xp = 0
- yp = 0
- PRINT "Icons werden nun angezeigt ! Abbruch mit <F1> !"
- SLEEP 2
- SCREEN best
- FOR i = 1 TO filecount
- CLOSE
- Name$ = Filelist$(i)
- IF INSTR(Path$, "\") <> LEN(Path$) THEN
- Filelist$(i) = Path$ + "\" + Filelist$(i)
- ELSE
- Filelist$(i) = Path$ + Filelist$(i)
- END IF
- OPEN Filelist$(i) FOR BINARY AS #1
- datei$ = Filelist$(i)
- GET #1, 3, Art%
- GET #1, 5, Anzahl%
- Endung$ = UCASE$(MID$(datei$, INSTR(datei$, ".") + 1, 3))
- IF Endung$ = "ICO" AND Art% = 1 AND Anzahl% = 1 THEN
- GET #1, 19, infoheadbegin&
- GET #1, infoheadbegin& + 5, Breite&
- GET #1, infoheadbegin& + 9, hohe&
- hohe& = hohe& / 2
- GET #1, infoheadbegin& + 15, BitproPix%
- GET #1, infoheadbegin& + 1, Infoheadlen&
- GET #1, infoheadbegin& + 33, ColEntr&
- IF ColEntr& = 0 THEN ColEntr& = 2 ^ BitproPix%
- Grose& = hohe& * Breite& * BitproPix% / 8
- Begin& = infoheadbegin& + Infoheadlen& + (ColEntr& * 4)
- REDIM Pixel(hohe& * Breite&) AS LONG
- IF BitproPix% = 1 OR BitproPix% = 4 THEN
- CALL ReadPixel(Pixel(), Farbe(), BitproPix%, Begin&, Grose&)
- IF Graf.Maxcolor >= 2 ^ BitproPix% THEN
- Counter = 1
- xpos = xp
- ypos = yp + (high% / 2 - hohe& / 2)
- FOR x = ypos + hohe& TO ypos + 1 STEP -1
- FOR y = xpos + 1 TO xpos + Breite&
- PSET (y, x), Farbe(Pixel(Counter))
- Counter = Counter + 1
- NEXT
- NEXT
- a = (yp) / (Graf.maxy / Graf.maxv) + 3
- b = (xp + 48) / (Graf.maxx / Graf.maxh)
- LOCATE a, b
- PRINT Name$
- xp = xp + 160
- IF xp + 160 > Graf.maxx THEN
- xp = 0
- yp = yp + high%
- END IF
- IF yp + hohe& > Graf.maxy THEN
- WHILE INKEY$ = "": WEND
- CLS
- xp = 0
- yp = 0
- END IF
- END IF
- END IF
- END IF
- NEXT
- WHILE INKEY$ = "": WEND
- SCREEN 0, 0, 0
- END
- Errorhandler:
- SCREEN 0, 0, 0
- CLS
- PRINT "Systemfehler !"
- SLEEP 2
- CLOSE
- END
- Videoerr:
- SELECT CASE bestmode
- CASE 12 'VGA
- bestmode = 11 'MCGA
- CASE 11 'MCGA
- bestmode = 9 'EGA256
- CASE 9 'EGA256
- bestmode = 10 'MONO
- CASE 10 'MONO
- bestmode = 2 'CGA
- CASE 2 'CGA
- bestmode = 3 'HERC
- CASE ELSE
- bestmode = 0 'KEINE
- END SELECT
- RESUME
- EGAErr:
- bestmode = 8 'EGA64
- RESUME NEXT
- Abbruch:
- CLOSE
- SCREEN 0, 0, 0
- CLS
- PRINT "Programm vom Anwender abgebrochen !"
- SLEEP 2
- END
- RETURN
-
- 'Ermittlung des besten Grafikmodus
- FUNCTION bestvideo
- SHARED bestmode
- bestmode = 12 'VGA
- ON ERROR GOTO Videoerr
- IF bestmode = 0 THEN
- SCREEN 0
- WIDTH 80, 25
- bestvideo = bestmode
- EXIT FUNCTION
- END IF
- SCREEN bestmode
- ON ERROR GOTO EGAErr
- IF bestmode = 9 THEN SCREEN 8, , 1
- ON ERROR GOTO Errorhandler
- SCREEN 0, , 0
- WIDTH 80, 25
- bestvideo = bestmode
- END FUNCTION
-
- 'Anzahl der auf filespec$ zutreffenden Dateien ermitteln
- FUNCTION GetFileCount (filespec$)
- count = 0
- fileName$ = DIR$(filespec$)
- DO WHILE fileName$ <> ""
- count = count + 1
- fileName$ = DIR$
- LOOP
- GetFileCount = count
- END FUNCTION
-
- 'Ermittlung der Auflösung und der Anzahl der Farben
- SUB GetGraf (mode)
- SHARED Graf AS video
- SELECT CASE mode
- CASE 1
- Graf.maxx = 320
- Graf.maxy = 200
- Graf.maxh = 40
- Graf.maxv = 25
- Graf.Maxcolor = 4
- CASE 2
- Graf.maxx = 640
- Graf.maxy = 200
- Graf.maxh = 80
- Graf.maxv = 25
- Graf.Maxcolor = 2
- CASE 3
- Graf.maxx = 720
- Graf.maxy = 348
- Graf.maxh = 80
- Graf.maxv = 25
- Graf.Maxcolor = 2
- CASE 4
- Graf.maxx = 640
- Graf.maxy = 400
- Graf.maxh = 80
- Graf.maxv = 25
- Graf.Maxcolor = 1
- CASE 7
- Graf.maxx = 320
- Graf.maxy = 200
- Graf.maxh = 40
- Graf.maxv = 25
- Graf.Maxcolor = 16
- CASE 8
- Graf.maxx = 640
- Graf.maxy = 200
- Graf.maxh = 80
- Graf.maxv = 25
- Graf.Maxcolor = 16
- CASE 9
- Graf.maxx = 640
- Graf.maxy = 350
- Graf.maxh = 80
- Graf.maxv = 25
- Graf.Maxcolor = 16
- CASE 10
- Graf.maxx = 640
- Graf.maxy = 350
- Graf.maxh = 80
- Graf.maxv = 25
- Graf.Maxcolor = 2
- CASE 11
- Graf.maxx = 640
- Graf.maxy = 480
- Graf.maxh = 80
- Graf.maxv = 30
- Graf.Maxcolor = 2
- CASE 12
- Graf.maxx = 640
- Graf.maxy = 480
- Graf.maxh = 80
- Graf.maxv = 30
- Graf.Maxcolor = 16
- CASE 13
- Graf.maxx = 320
- Graf.maxy = 200
- Graf.maxh = 40
- Graf.maxv = 25
- Graf.Maxcolor = 256
- CASE ELSE
- END SELECT
- END SUB
-
- 'Lesen der Daten aus der Datei
- SUB ReadPixel (Pixel() AS LONG, Farbe() AS INTEGER, BitproPix%, Begin&, Grose&)
- Counter = 1
- DIM Byte AS STRING * 1
- SELECT CASE BitproPix%
- CASE 1
- FOR i = 1 TO Grose& * 8 STEP 8
- GET #1, Begin& + Counter, Byte
- Wert = ASC(Byte)
- Pixel(i + 7) = Wert AND 1
- Pixel(i + 6) = (Wert AND 2) / 2
- Pixel(i + 5) = (Wert AND 4) / 4
- Pixel(i + 4) = (Wert AND 8) / 8
- Pixel(i + 3) = (Wert AND 16) / 16
- Pixel(i + 2) = (Wert AND 32) / 32
- Pixel(i + 1) = (Wert AND 64) / 64
- Pixel(i) = (Wert AND 128) / 128
- Counter = Counter + 1
- NEXT i
- Farbe(0) = 0
- Farbe(1) = 15
- CASE 4
- FOR i = 1 TO Grose& * 2 STEP 2
- GET #1, Begin& + Counter, Byte
- Wert = ASC(Byte)
- Pixel(i + 1) = (Wert AND 15)
- Pixel(i) = (Wert AND 240) / 16
- Counter = Counter + 1
- NEXT
- Farbe(0) = 0
- Farbe(1) = 4
- Farbe(2) = 2
- Farbe(3) = 6
- Farbe(4) = 1
- Farbe(5) = 5
- Farbe(6) = 3
- Farbe(7) = 8
- Farbe(8) = 7
- Farbe(9) = 12
- Farbe(10) = 10
- Farbe(11) = 14
- Farbe(12) = 9
- Farbe(13) = 13
- Farbe(14) = 11
- Farbe(15) = 15
- END SELECT
- END SUB
-
-