home *** CD-ROM | disk | FTP | other *** search
-
- UNIT GIFINI;
- {
- Modul GIFINI für Programm GIF
-
- * Initialisierungen
- * Auswerten der Kommandozeilenparameter
- * Einlesen des Files SSTOOLS.INI
-
- Paul Schubert, Rottweiler Str. 8, D6000 Frankfurt /M 1, 069 / 231145
-
- }
- {$F+}
- {$I GIFOVR.INC} {DEFINE OVERLAYS JA / NEIN}
- {$IFDEF OVERLAYS}
- {$O+}
- {$ENDIF OVERLAYS}
-
-
- INTERFACE
-
-
- USES SELECTD,DOS,SVGA1,TPCRT
- ,TPDOS,TPSTRING,TPMOUSE,TPPICK
- ,GIFVAR,GIFMISC,GIFLOAD
- {$IFDEF OVERLAYS}
- ,OVERLAY
- {$ENDIF OVERLAYS}
- ;
-
-
- PROCEDURE INITIALISIERE;
- PROCEDURE SETREMAP;
- (* PROCEDURE GETPARAM; LOKAL *)
-
-
- IMPLEMENTATION
-
-
- PROCEDURE LIESSSTOOLS;
- VAR SF : TEXT;
- LIN : STRING;
- AKT : BOOLEAN;
-
- FUNCTION LIESSTRING(PATH:BOOLEAN):STRING;
- VAR S : STRING;
- P : BYTE;
- BEGIN
- P := SUCC(POS('=',LIN));
- S := COPY(LIN,P,SUCC(LENGTH(LIN) - P));
- P := POS(' ',S);
- IF P > 0 THEN DELETE(S,P,SUCC(LENGTH(S) - P));
- IF PATH AND (LENGTH(S) > 0) THEN BEGIN
- IF NOT (S[LENGTH(S)] IN [':','\']) THEN S := S + '\';
- IF S[3] <> '\' THEN BEGIN
- IF ZIELDIR[LENGTH(ZIELDIR)] = '\' THEN S := ZIELDIR + S
- ELSE S := ZIELDIR + '\' + S;
- END;
- END;
- {$IFDEF MITDIAGNOSE}
- IF DIAGNOSE THEN WRITELN(LIN,' »',S,'«');
- {$ENDIF MITDIAGNOSE}
- LIESSTRING := S;
- END; { LIESPATH }
-
- FUNCTION LIESZAHL:INTEGER;
- VAR S : STRING;
- Z,E : INTEGER;
- P : BYTE;
- BEGIN
- P := SUCC(POS('=',LIN));
- S := COPY(LIN,P,SUCC(LENGTH(LIN) - P));
- P := POS(' ',S);
- IF P > 0 THEN DELETE(S,P,SUCC(LENGTH(S) - P));
- VAL(S,Z,E);
- IF E = 0 THEN E := Z ELSE E := 0;
- {$IFDEF MITDIAGNOSE}
- IF DIAGNOSE THEN WRITELN(LIN,' »',E,'«');
- {$ENDIF MITDIAGNOSE}
- LIESZAHL := E;
- END; { LIESPATH }
-
- PROCEDURE AUSWERTEN;
- VAR I,J : INTEGER;
- BEGIN
- IF POS('BPATH=',LIN) = 1 THEN DEFBPATH := LIESSTRING(TRUE);
- IF POS('SPATH=',LIN) = 1 THEN DEFSPATH := LIESSTRING(TRUE);
- IF POS('SWAPPATH=',LIN) = 1 THEN SWAPPATH := LIESSTRING(TRUE);
- IF POS('SNDPRG=',LIN) = 1 THEN SNDPRG := LIESSTRING(FALSE);
- IF POS('SNDBNK=',LIN) = 1 THEN SNDBNK := LIESSTRING(FALSE);
- IF POS('SNDDRV=',LIN) = 1 THEN SNDDRV := LIESSTRING(FALSE);
- IF POS('DRVCMD=',LIN) = 1 THEN DRVCMD := LIESSTRING(FALSE);
- IF POS('LIEDEXT=',LIN) = 1 THEN BEGIN
- LIEDEXT := LIESSTRING(FALSE);
- IF POS('.',LIEDEXT) = 0 THEN INSERT('.',LIEDEXT,1);
- END;
- {$IFDEF MITDIAGNOSE}
- IF POS('DIAGNOSE=JA',LIN) = 1 THEN DIAGNOSE := TRUE;
- {$ENDIF MITDIAGNOSE}
- IF POS('AUTO=JA',LIN) = 1 THEN AUTO := TRUE;
- IF POS('CENTER=JA',LIN) = 1 THEN CENTER := TRUE;
- IF POS('QUIET=JA',LIN) = 1 THEN QUIET := TRUE;
- IF POS('FASTMODE=JA',LIN) = 1 THEN FASTMODE := TRUE;
- IF POS('MAXMODE=',LIN) = 1 THEN BEGIN
- I := LIESZAHL;
- IF I > 0 THEN
- FOR J := I TO 6 DO VIDMODES[VGATYP][J][1] := 0;
- END;
- END; { AUSWERTEN }
-
- BEGIN { LIESSSTOOLS }
- {$I-}
- ASSIGN(SF,'SSTOOLS.INI');
- RESET(SF);
- IF IORESULT = 0 THEN BEGIN
- AKT := FALSE;
- WHILE NOT EOF(SF) DO BEGIN
- READLN(SF,LIN);
- LIN := STUPCASE(LIN);
- IF LIN[1] = '[' THEN AKT := FALSE;
- IF LIN = '[GIF'+ALTKONF+']' THEN AKT := TRUE;
- IF AKT THEN AUSWERTEN;
- END; { WHILE NOT EOF(SF) }
- CLOSE(SF);
- {$IFDEF MITDIAGNOSE}
- END ELSE IF DIAGNOSE THEN BEGIN
- GETDIR(0,LIN);
- WRITELN('aktuelles Verzeichnis = »',LIN,'«');
- WRITELN('SSTOOLS.INI nicht gefunden');
- {$ENDIF MITDIAGNOSE}
- END;
- {$I+}
- {$IFDEF MITDIAGNOSE}
- IF DIAGNOSE THEN BEGIN
- WRITELN;
- WRITE('Taste drücken ');
- IF READKEY = ^[ THEN HALT;
- WRITE(^M); CLREOL;
- END;
- {$ENDIF MITDIAGNOSE}
- END; { LIESSSTOOLS }
-
-
- PROCEDURE GETPARAM;
- VAR I,J,K : INTEGER;
- S : STRING;
- BEGIN
- ZEIGDIREKT := TRUE; { BILD DIREKT IN VGA- KARTE LADEN }
- ERSTER := TRUE; { BEI WILDCARD IN BILDERFILE- NAME 1. SUCHVORGANG }
- VMMERK := $FF; { MERKER FÜR GRAPHIK- VIDEOMODE ( 0 = TEXTMODE ) }
- NAM2 := ''; { WILDCARD- NAME FÜR BILDER }
- NAMEN[1] := ''; { 1. EINTRAG IN BILDERFILE- LISTE }
-
- NZ := 0; { NAMENZÄHLER FÜR BILDERFILE- LISTE }
- NP := 0; { NAMENZEIGER FÜR BILDERFILE- LISTE }
- FN := ''; { BILD- FILENAME }
- SN := ''; { SHOWFILE- NAME }
- RN := ''; { REMAP- FILE FÜR COLOR- REMAPPING }
- LIED := ''; { LIEDFILE- NAME }
- LZ := 0; { LIEDERZÄHLER FÜR RANDOM- LIED }
- AUTO := FALSE; { AUTO TRUE = KEINE STATISTIK ANZEIGEN }
- ZINFO := FALSE; { ZEIGE FILEINFO IM BILD }
- ENDE := FALSE; { ENDE TRUE = PROGRAMM NACH 1. BILD BEENDEN }
- WKEY := TRUE; { WKEY TRUE = NACH BILDANZEIGE AUF TASTENDRUCK WARTEN }
- CENTER := FALSE; { KLEINERE BILDER ALS DER BILDSCHIRM ZENTRIEREN }
- QUIET := FALSE; { QUIET TRUE = NACH LADEN EINES BILDES NICHT 'PIEPSEN' }
- GRAPHEXIT := FALSE; { BEI PROGRAMMENDE NICHT IM GRAPHIK- MODUS BLEIBEN }
- FASTMODE := FALSE; { ZWISCHENSPEICHERN DES BILDES }
- BLENDE := 0; { PER DEFAULT KEINE ÜBERBLENDUNG }
- BLTOG := FALSE; { BLENDE AUF/ABWÄRTS USW. UMSCHALTEN }
- BRAND := FALSE; { ZUFALLSBLENDE }
- LOOP := FALSE; { SCHLEIFE AUS }
-
- LIESSSTOOLS;
- PATH := DEFBPATH; { PATH FÜR BILDER }
-
- FOR I := 1 TO PARAMCOUNT DO BEGIN
- S := STUPCASE(PARAMSTR(I));
- IF S[1] IN ['-','/'] THEN BEGIN
- DELETE(S,1,1);
- IF S[1] = 'A' THEN AUTO := TRUE;
- IF S[1] = 'B' THEN BEGIN
- DELETE(S,1,1);
- IF S[1] = 'R' THEN BEGIN
- BRAND := TRUE;
- END ELSE BEGIN
- IF S[1] = 'T' THEN BEGIN
- DELETE(S,1,1);
- BLTOG := TRUE;
- END;
- VAL(S,J,K);
- IF (K = 0) AND
- (J >= -BLMAX) AND
- (J <= BLMAX) THEN BLENDE := J;
- END;
- END;
- IF S[1] = 'C' THEN CENTER := TRUE;
- {$IFDEF MITDIAGNOSE}
- IF S = 'DIAGNOSE' THEN BEGIN
- DIAGNOSE := TRUE;
- S := '';
- END;
- {$ENDIF MITDIAGNOSE}
- IF S[1] = 'E' THEN ENDE := TRUE;
- IF S[1] = 'F' THEN FASTMODE := TRUE;
- IF S[1] = 'G' THEN BEGIN
- GRAPHEXIT := TRUE;
- AUTO := TRUE;
- ENDE := TRUE;
- WKEY := FALSE;
- END;
- IF S[1] = 'I' THEN BEGIN
- ZINFO := TRUE;
- AUTO := TRUE;
- END;
- IF S[1] = 'K' THEN WKEY := FALSE;
- IF S[1] = 'L' THEN LOOP := TRUE;
- IF S[1] = 'P' THEN BEGIN
- DELETE(S,1,1);
- LIED := S;
- IF POS('*',LIED) = 1 THEN LIED := DEFSPATH + LIED;
- IF POS('.',LIED) = 0 THEN LIED := LIED + LIEDEXT;
- END;
- IF S[1] = 'Q' THEN QUIET := TRUE;
- IF S[1] = 'R' THEN BEGIN
- DELETE(S,1,1);
- RN := S;
- IF POS('.',RN) = 0 THEN RN := RN + '.GIF';
- END;
- IF S[1] = 'S' THEN BEGIN
- DELETE(S,1,1);
- SN := S;
- WKEY := FALSE;
- END;
- IF S[1] = 'V' THEN BEGIN
- VAL(S[2],K,J);
- IF J = 0 THEN FIXMODE := K;
- END;
- IF S[1] = 'Y' THEN BEGIN
- IF LENGTH(S) > 1 THEN BEGIN
- ALTKONF := S[2];
- LIESSSTOOLS;
- END;
- END;
- IF S[1] = 'Z' THEN BEGIN
- DELETE(S,1,1);
- VAL(S,K,J);
- IF (J = 0) AND (K > 0) THEN GDELAY := K;
- END;
- END ELSE BEGIN
- IF POS('.',S) = 0 THEN S := S + '.GIF';
- IF POS('**',S) = 1 THEN S := DEFBPATH + S;
- INC(NZ);
- NAMEN[NZ] := S;
- END;
- END; { NEXT I }
- IF (NZ > 0) THEN BEGIN
- PATH := PATHNAME(NAMEN[1]);
- IF PATH = '\' THEN PATH := DEFBPATH;
- END;
- {$IFDEF MITDIAGNOSE}
- IF DIAGNOSE THEN BEGIN
- WRITELN('endgültiger Path für Bilder = »',PATH,'«');
- FOR I := 1 TO NZ DO WRITELN(I:3,' : »',NAMEN[I],'«');
- END;
- {$ENDIF MITDIAGNOSE}
- END; { GETPARAM }
-
-
- { PALETTE FÜR COLOR REMAPPING EINSTELLEN }
- PROCEDURE SETREMAPPALETTE;
- VAR I,J,K : INTEGER;
- BEGIN
- FOR I := 0 TO 7 DO
- FOR J := 0 TO 7 DO
- FOR K := 0 TO 3 DO
- WITH RPAL[I * 32 + J * 4 + K] DO BEGIN
- R := I * 9; { 63 / 4 }
- G := J * 9; { 63 / 4 }
- B := K * 21; { 63 / 3 }
- END;
- END; { SETREMAPPALETTE }
-
-
- PROCEDURE SETREMAP;
- BEGIN
- {$IFDEF MITDIAGNOSE}
- IF DIAGNOSE THEN WRITELN('Remap »',RN,'«');
- {$ENDIF MITDIAGNOSE}
- IF RN <> '' THEN BEGIN
- IF RN = '.GIF' THEN BEGIN
- {$IFDEF MITDIAGNOSE}
- IF DIAGNOSE THEN WRITELN('Remap intern');
- {$ENDIF MITDIAGNOSE}
- SETREMAPPALETTE;
- PAL := RPAL;
- END ELSE BEGIN
- ASSIGN(F,RN);
- {$I-}
- FILEMODE := 0; { FILE F ÖFFNEN NUR LESEN }
- RESET(F,1);
- IF IORESULT = 0 THEN BEGIN
- IF LIESHDR = 0 THEN;
- RPAL := PAL;
- CLOSE(F);
- END ELSE SETREMAPPALETTE;
- {$I+}
- END;
- END; { IF RN <> '' }
- END; { SETREMAP }
-
-
- PROCEDURE INITIALISIERE;
- VAR I : INTEGER;
- SR : SEARCHREC;
- LIN : STRING;
- BEGIN
- {$IFDEF MITDIAGNOSE}
- IF STUPCASE(PARAMSTR(1)) = '/DIAGNOSE' THEN DIAGNOSE := TRUE;
- {$ENDIF MITDIAGNOSE}
-
- INITIALIZEMOUSE;
- ENABLEEVENTHANDLING;
- ENABLEPICKMOUSE;
- RANDOMIZE;
- FASTSETPALETTE := FALSE;
-
- I := CHECKVGA;
- IF I < 0 THEN BEGIN
- WRITELN;
- WRITELN('Dies Programm benötigt eine VGA- Karte');
- HALT;
- END;
- IF I = 0 THEN FIXMODE := 1
- ELSE FIXMODE := 0; { VORGEGEBENER VIDEO- MODUS }
-
- {$IFDEF MITDIAGNOSE}
- IF DIAGNOSE THEN BEGIN
- FOR I := 0 TO PARAMCOUNT DO WRITE(PARAMSTR(I),' ');
- WRITELN;
- {$IFDEF OVERLAYS}
- WRITELN('########## OVERLAYBUFFER : ',OVRGETBUF);
- {$ENDIF OVERLAYS}
- WRITELN('VGA- Chip : ',VGATYP,', VGA512 : ',VGA512);
- END;
- {$ENDIF MITDIAGNOSE}
- GETPARAM;
- LETZT := ''; { MERKER FÜR LETZTES BILD LÖSCHEN }
- LETZTLIED := $FFFF; { MERKER FÜR LETZTES LIED LÖSCHEN }
- LETZTBL := 0; { MERKER FÜR LETZTE BLENDE LÖSCHEN }
- BZ := 0;
-
- IF LIED <> '' THEN BEGIN
- FREIHEAP := $8800;
- {$I-}
- CHDIR(COPY(DEFSPATH,1,PRED(LENGTH(DEFSPATH))));
- {$IFDEF MITDIAGNOSE}
- IF IORESULT <> 0 THEN IF DIAGNOSE THEN BEGIN
- WRITELN(#7,'Fehler CHDIR »',DEFSPATH,'« Taste drücken ');
- IF READKEY = ^[ THEN HALT;
- END;
- {$ELSE}
- IF IORESULT = 0 THEN;
- {$ENDIF MITDIAGNOSE}
- {$I+}
- IF POS('*',LIED) > 0 THEN BEGIN
- LP := 1;
- SR.NAME := JUSTFILENAME(LIED);
- IF POS('**',LIED) > 0 THEN DELETE(SR.NAME,POS('**',SR.NAME),1);
- {$IFDEF MITDIAGNOSE}
- IF DIAGNOSE THEN WRITELN('Lieder suchen »',LIED,'«');
- {$ENDIF MITDIAGNOSE}
- FINDFIRST(LIED,ANYFILE,SR);
- WHILE (DOSERROR = 0) AND (LZ < LIEDMAX) DO BEGIN
- INC(LZ);
- LIEDER[LZ] := SR.NAME;
- {$IFDEF MITDIAGNOSE}
- IF DIAGNOSE THEN WRITE('»',LIEDER[LZ],'«');
- {$ENDIF MITDIAGNOSE}
- FINDNEXT(SR);
- END;
- {$IFDEF MITDIAGNOSE}
- IF DIAGNOSE THEN BEGIN
- WRITELN;
- WRITELN(LZ,' Lieder gefunden');
- END;
- {$ENDIF MITDIAGNOSE}
- END;
- END ELSE FREIHEAP := HEAPMIN;
-
- IF EXISTONPATH(SN,FN2) THEN BEGIN
- {$IFDEF MITDIAGNOSE}
- IF DIAGNOSE THEN WRITELN('Diashow »',SN,'«');
- {$ENDIF MITDIAGNOSE}
- ASSIGN(SHOW,FN2);
- {$I-}
- RESET(SHOW);
- IF IORESULT <> 0 THEN SN := '';
- {$I+}
- END ELSE SN := '';
-
- SETREMAP;
-
- {$IFDEF MITDIAGNOSE}
- IF DIAGNOSE THEN BEGIN
- WRITELN('GIF wurde von »',QUELLDIR,'« aufgerufen');
- WRITELN('GIF befindet sich auf »',ZIELDIR,'«');
- GETDIR(0,LIN);
- WRITELN('aktuelles Verzeichnis = »',LIN,'«');
- WRITELN;
- WRITELN('MEMAVAIL = ',MEMAVAIL,', MAXAVAIL = ',MAXAVAIL);
- WRITELN;
- WRITE('Taste drücken ');
- IF READKEY = ^[ THEN HALT;
- WRITE(^M); CLREOL;
- END;
- {$ENDIF MITDIAGNOSE}
- END; { INITIALISIERE }
-
-
- END.
-