home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / grafik / vgakit / gif / source / gifini.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-10-16  |  11.9 KB  |  423 lines

  1.  
  2. UNIT GIFINI;
  3. {
  4.   Modul GIFINI für Programm GIF
  5.  
  6.   * Initialisierungen
  7.   * Auswerten der Kommandozeilenparameter
  8.   * Einlesen des Files SSTOOLS.INI
  9.  
  10.   Paul Schubert, Rottweiler Str. 8, D6000 Frankfurt /M 1, 069 / 231145
  11.  
  12. }
  13. {$F+}
  14. {$I GIFOVR.INC} {DEFINE OVERLAYS JA / NEIN}
  15. {$IFDEF OVERLAYS}
  16. {$O+}
  17. {$ENDIF OVERLAYS}
  18.  
  19.  
  20. INTERFACE
  21.  
  22.  
  23. USES  SELECTD,DOS,SVGA1,TPCRT
  24.       ,TPDOS,TPSTRING,TPMOUSE,TPPICK
  25.       ,GIFVAR,GIFMISC,GIFLOAD
  26. {$IFDEF OVERLAYS}
  27.       ,OVERLAY
  28. {$ENDIF OVERLAYS}
  29.       ;
  30.  
  31.  
  32. PROCEDURE INITIALISIERE;
  33. PROCEDURE SETREMAP;
  34. (*  PROCEDURE GETPARAM;  LOKAL  *)
  35.  
  36.  
  37. IMPLEMENTATION
  38.  
  39.  
  40. PROCEDURE LIESSSTOOLS;
  41. VAR   SF   : TEXT;
  42.       LIN  : STRING;
  43.       AKT  : BOOLEAN;
  44.  
  45. FUNCTION LIESSTRING(PATH:BOOLEAN):STRING;
  46. VAR   S  : STRING;
  47.       P  : BYTE;
  48. BEGIN
  49.   P := SUCC(POS('=',LIN));
  50.   S := COPY(LIN,P,SUCC(LENGTH(LIN) - P));
  51.   P := POS(' ',S);
  52.   IF P > 0 THEN DELETE(S,P,SUCC(LENGTH(S) - P));
  53.   IF PATH AND (LENGTH(S) > 0) THEN BEGIN
  54.     IF NOT (S[LENGTH(S)] IN [':','\']) THEN S := S + '\';
  55.     IF S[3] <> '\' THEN BEGIN
  56.       IF ZIELDIR[LENGTH(ZIELDIR)] = '\' THEN S := ZIELDIR + S
  57.                                         ELSE S := ZIELDIR + '\' + S;
  58.     END;
  59.   END;
  60. {$IFDEF MITDIAGNOSE}
  61.   IF DIAGNOSE THEN WRITELN(LIN,'  »',S,'«');
  62. {$ENDIF MITDIAGNOSE}
  63.   LIESSTRING := S;
  64. END; { LIESPATH }
  65.  
  66. FUNCTION LIESZAHL:INTEGER;
  67. VAR   S    : STRING;
  68.       Z,E  : INTEGER;
  69.       P    : BYTE;
  70. BEGIN
  71.   P := SUCC(POS('=',LIN));
  72.   S := COPY(LIN,P,SUCC(LENGTH(LIN) - P));
  73.   P := POS(' ',S);
  74.   IF P > 0 THEN DELETE(S,P,SUCC(LENGTH(S) - P));
  75.   VAL(S,Z,E);
  76.   IF E = 0 THEN E := Z ELSE E := 0;
  77. {$IFDEF MITDIAGNOSE}
  78.   IF DIAGNOSE THEN WRITELN(LIN,'  »',E,'«');
  79. {$ENDIF MITDIAGNOSE}
  80.   LIESZAHL := E;
  81. END; { LIESPATH }
  82.  
  83. PROCEDURE AUSWERTEN;
  84. VAR   I,J  : INTEGER;
  85. BEGIN
  86.   IF POS('BPATH=',LIN)      = 1 THEN DEFBPATH := LIESSTRING(TRUE);
  87.   IF POS('SPATH=',LIN)      = 1 THEN DEFSPATH := LIESSTRING(TRUE);
  88.   IF POS('SWAPPATH=',LIN)   = 1 THEN SWAPPATH := LIESSTRING(TRUE);
  89.   IF POS('SNDPRG=',LIN)     = 1 THEN SNDPRG   := LIESSTRING(FALSE);
  90.   IF POS('SNDBNK=',LIN)     = 1 THEN SNDBNK   := LIESSTRING(FALSE);
  91.   IF POS('SNDDRV=',LIN)     = 1 THEN SNDDRV   := LIESSTRING(FALSE);
  92.   IF POS('DRVCMD=',LIN)     = 1 THEN DRVCMD   := LIESSTRING(FALSE);
  93.   IF POS('LIEDEXT=',LIN)    = 1 THEN BEGIN
  94.     LIEDEXT := LIESSTRING(FALSE);
  95.     IF POS('.',LIEDEXT) = 0 THEN INSERT('.',LIEDEXT,1);
  96.   END;
  97. {$IFDEF MITDIAGNOSE}
  98.   IF POS('DIAGNOSE=JA',LIN) = 1 THEN DIAGNOSE := TRUE;
  99. {$ENDIF MITDIAGNOSE}
  100.   IF POS('AUTO=JA',LIN)     = 1 THEN AUTO     := TRUE;
  101.   IF POS('CENTER=JA',LIN)   = 1 THEN CENTER   := TRUE;
  102.   IF POS('QUIET=JA',LIN)    = 1 THEN QUIET    := TRUE;
  103.   IF POS('FASTMODE=JA',LIN) = 1 THEN FASTMODE := TRUE;
  104.   IF POS('MAXMODE=',LIN)    = 1 THEN BEGIN
  105.     I := LIESZAHL;
  106.     IF I > 0 THEN
  107.       FOR J := I TO 6 DO VIDMODES[VGATYP][J][1] := 0;
  108.   END;
  109. END; { AUSWERTEN }
  110.  
  111. BEGIN { LIESSSTOOLS }
  112. {$I-}
  113.   ASSIGN(SF,'SSTOOLS.INI');
  114.   RESET(SF);
  115.   IF IORESULT = 0 THEN BEGIN
  116.     AKT := FALSE;
  117.     WHILE NOT EOF(SF) DO BEGIN
  118.       READLN(SF,LIN);
  119.       LIN := STUPCASE(LIN);
  120.       IF LIN[1] = '[' THEN AKT := FALSE;
  121.       IF LIN = '[GIF'+ALTKONF+']' THEN AKT := TRUE;
  122.       IF AKT THEN AUSWERTEN;
  123.     END; { WHILE NOT EOF(SF) }
  124.     CLOSE(SF);
  125. {$IFDEF MITDIAGNOSE}
  126.   END ELSE IF DIAGNOSE THEN BEGIN
  127.     GETDIR(0,LIN);
  128.     WRITELN('aktuelles Verzeichnis = »',LIN,'«');
  129.     WRITELN('SSTOOLS.INI nicht gefunden');
  130. {$ENDIF MITDIAGNOSE}
  131.   END;
  132. {$I+}
  133. {$IFDEF MITDIAGNOSE}
  134.   IF DIAGNOSE THEN BEGIN
  135.     WRITELN;
  136.     WRITE('Taste drücken ');
  137.     IF READKEY = ^[ THEN HALT;
  138.     WRITE(^M); CLREOL;
  139.   END;
  140. {$ENDIF MITDIAGNOSE}
  141. END; { LIESSSTOOLS }
  142.  
  143.  
  144. PROCEDURE GETPARAM;
  145. VAR   I,J,K  : INTEGER;
  146.       S      : STRING;
  147. BEGIN
  148.   ZEIGDIREKT := TRUE;  { BILD DIREKT IN VGA- KARTE LADEN }
  149.   ERSTER     := TRUE;  { BEI WILDCARD IN BILDERFILE- NAME 1. SUCHVORGANG }
  150.   VMMERK     := $FF;   { MERKER FÜR GRAPHIK- VIDEOMODE ( 0 = TEXTMODE ) }
  151.   NAM2       := '';    { WILDCARD- NAME FÜR BILDER }
  152.   NAMEN[1]   := '';    { 1. EINTRAG IN BILDERFILE- LISTE }
  153.  
  154.   NZ         := 0;     { NAMENZÄHLER FÜR BILDERFILE- LISTE }
  155.   NP         := 0;     { NAMENZEIGER FÜR BILDERFILE- LISTE }
  156.   FN         := '';    { BILD- FILENAME }
  157.   SN         := '';    { SHOWFILE- NAME }
  158.   RN         := '';    { REMAP- FILE FÜR COLOR- REMAPPING }
  159.   LIED       := '';    { LIEDFILE- NAME }
  160.   LZ         := 0;     { LIEDERZÄHLER FÜR RANDOM- LIED }
  161.   AUTO       := FALSE; { AUTO TRUE = KEINE STATISTIK ANZEIGEN }
  162.   ZINFO      := FALSE; { ZEIGE FILEINFO IM BILD }
  163.   ENDE       := FALSE; { ENDE TRUE = PROGRAMM NACH 1. BILD BEENDEN }
  164.   WKEY       := TRUE;  { WKEY TRUE = NACH BILDANZEIGE AUF TASTENDRUCK WARTEN }
  165.   CENTER     := FALSE; { KLEINERE BILDER ALS DER BILDSCHIRM ZENTRIEREN }
  166.   QUIET      := FALSE; { QUIET TRUE = NACH LADEN EINES BILDES NICHT 'PIEPSEN' }
  167.   GRAPHEXIT  := FALSE; { BEI PROGRAMMENDE NICHT IM GRAPHIK- MODUS BLEIBEN }
  168.   FASTMODE   := FALSE; { ZWISCHENSPEICHERN DES BILDES }
  169.   BLENDE     := 0;     { PER DEFAULT KEINE ÜBERBLENDUNG }
  170.   BLTOG      := FALSE; { BLENDE AUF/ABWÄRTS USW. UMSCHALTEN }
  171.   BRAND      := FALSE; { ZUFALLSBLENDE }
  172.   LOOP       := FALSE; { SCHLEIFE AUS }
  173.  
  174.   LIESSSTOOLS;
  175.   PATH       := DEFBPATH;  { PATH FÜR BILDER }
  176.  
  177.   FOR I := 1 TO PARAMCOUNT DO BEGIN
  178.     S := STUPCASE(PARAMSTR(I));
  179.     IF S[1] IN ['-','/'] THEN BEGIN
  180.       DELETE(S,1,1);
  181.       IF S[1] = 'A' THEN AUTO := TRUE;
  182.       IF S[1] = 'B' THEN BEGIN
  183.                       DELETE(S,1,1);
  184.                       IF S[1] = 'R' THEN BEGIN
  185.                         BRAND := TRUE;
  186.                       END ELSE BEGIN
  187.                         IF S[1] = 'T' THEN BEGIN
  188.                           DELETE(S,1,1);
  189.                           BLTOG := TRUE;
  190.                         END;
  191.                         VAL(S,J,K);
  192.                         IF (K  = 0) AND
  193.                            (J >= -BLMAX) AND
  194.                            (J <= BLMAX) THEN BLENDE := J;
  195.                       END;
  196.                     END;
  197.       IF S[1] = 'C' THEN CENTER := TRUE;
  198. {$IFDEF MITDIAGNOSE}
  199.       IF S    = 'DIAGNOSE' THEN BEGIN
  200.                                   DIAGNOSE := TRUE;
  201.                                   S := '';
  202.                                 END;
  203. {$ENDIF MITDIAGNOSE}
  204.       IF S[1] = 'E' THEN ENDE := TRUE;
  205.       IF S[1] = 'F' THEN FASTMODE := TRUE;
  206.       IF S[1] = 'G' THEN BEGIN
  207.                       GRAPHEXIT := TRUE;
  208.                       AUTO := TRUE;
  209.                       ENDE := TRUE;
  210.                       WKEY := FALSE;
  211.                     END;
  212.       IF S[1] = 'I' THEN BEGIN
  213.                       ZINFO := TRUE;
  214.                       AUTO := TRUE;
  215.                     END;
  216.       IF S[1] = 'K' THEN WKEY := FALSE;
  217.       IF S[1] = 'L' THEN LOOP := TRUE;
  218.       IF S[1] = 'P' THEN BEGIN
  219.         DELETE(S,1,1);
  220.         LIED := S;
  221.         IF POS('*',LIED) = 1 THEN LIED := DEFSPATH + LIED;
  222.         IF POS('.',LIED) = 0 THEN LIED := LIED + LIEDEXT;
  223.       END;
  224.       IF S[1] = 'Q' THEN QUIET := TRUE;
  225.       IF S[1] = 'R' THEN BEGIN
  226.         DELETE(S,1,1);
  227.         RN := S;
  228.         IF POS('.',RN) = 0 THEN RN := RN + '.GIF';
  229.       END;
  230.       IF S[1] = 'S' THEN BEGIN
  231.         DELETE(S,1,1);
  232.         SN   := S;
  233.         WKEY := FALSE;
  234.       END;
  235.       IF S[1] = 'V' THEN BEGIN
  236.         VAL(S[2],K,J);
  237.         IF J = 0 THEN FIXMODE := K;
  238.       END;
  239.       IF S[1] = 'Y' THEN BEGIN
  240.         IF LENGTH(S) > 1 THEN BEGIN
  241.           ALTKONF := S[2];
  242.           LIESSSTOOLS;
  243.         END;
  244.       END;
  245.       IF S[1] = 'Z' THEN BEGIN
  246.         DELETE(S,1,1);
  247.         VAL(S,K,J);
  248.         IF (J = 0) AND (K > 0) THEN GDELAY := K;
  249.       END;
  250.     END ELSE BEGIN
  251.       IF POS('.',S) = 0 THEN S := S + '.GIF';
  252.       IF POS('**',S) = 1 THEN S := DEFBPATH + S;
  253.       INC(NZ);
  254.       NAMEN[NZ] := S;
  255.     END;
  256.   END; { NEXT I }
  257.   IF (NZ > 0) THEN BEGIN
  258.     PATH := PATHNAME(NAMEN[1]);
  259.     IF PATH = '\' THEN PATH := DEFBPATH;
  260.   END;
  261. {$IFDEF MITDIAGNOSE}
  262.   IF DIAGNOSE THEN BEGIN
  263.     WRITELN('endgültiger Path für Bilder = »',PATH,'«');
  264.     FOR I := 1 TO NZ DO WRITELN(I:3,' : »',NAMEN[I],'«');
  265.   END;
  266. {$ENDIF MITDIAGNOSE}
  267. END; { GETPARAM }
  268.  
  269.  
  270. { PALETTE FÜR COLOR REMAPPING EINSTELLEN }
  271. PROCEDURE SETREMAPPALETTE;
  272. VAR   I,J,K  : INTEGER;
  273. BEGIN
  274.   FOR I := 0 TO 7 DO
  275.     FOR J := 0 TO 7 DO
  276.       FOR K := 0 TO 3 DO
  277.         WITH RPAL[I * 32 + J * 4 + K] DO BEGIN
  278.           R := I * 9;  { 63 / 4 }
  279.           G := J * 9;  { 63 / 4 }
  280.           B := K * 21; { 63 / 3 }
  281.         END;
  282. END; { SETREMAPPALETTE }
  283.  
  284.  
  285. PROCEDURE SETREMAP;
  286. BEGIN
  287. {$IFDEF MITDIAGNOSE}
  288.   IF DIAGNOSE THEN WRITELN('Remap »',RN,'«');
  289. {$ENDIF MITDIAGNOSE}
  290.   IF RN <> '' THEN BEGIN
  291.     IF RN = '.GIF' THEN BEGIN
  292. {$IFDEF MITDIAGNOSE}
  293.       IF DIAGNOSE THEN WRITELN('Remap intern');
  294. {$ENDIF MITDIAGNOSE}
  295.       SETREMAPPALETTE;
  296.       PAL := RPAL;
  297.     END ELSE BEGIN
  298.       ASSIGN(F,RN);
  299. {$I-}
  300.       FILEMODE := 0; { FILE F ÖFFNEN NUR LESEN }
  301.       RESET(F,1);
  302.       IF IORESULT = 0 THEN BEGIN
  303.         IF LIESHDR = 0 THEN;
  304.         RPAL := PAL;
  305.         CLOSE(F);
  306.       END ELSE SETREMAPPALETTE;
  307. {$I+}
  308.     END;
  309.   END; { IF RN <> '' }
  310. END; { SETREMAP }
  311.  
  312.  
  313. PROCEDURE INITIALISIERE;
  314. VAR   I    : INTEGER;
  315.       SR   : SEARCHREC;
  316.       LIN  : STRING;
  317. BEGIN
  318. {$IFDEF MITDIAGNOSE}
  319.   IF STUPCASE(PARAMSTR(1)) = '/DIAGNOSE' THEN DIAGNOSE := TRUE;
  320. {$ENDIF MITDIAGNOSE}
  321.  
  322.   INITIALIZEMOUSE;
  323.   ENABLEEVENTHANDLING;
  324.   ENABLEPICKMOUSE;
  325.   RANDOMIZE;
  326.   FASTSETPALETTE := FALSE;
  327.  
  328.   I := CHECKVGA;
  329.   IF I < 0 THEN BEGIN
  330.     WRITELN;
  331.     WRITELN('Dies Programm benötigt eine VGA- Karte');
  332.     HALT;
  333.   END;
  334.   IF I = 0 THEN FIXMODE := 1
  335.            ELSE FIXMODE := 0;     { VORGEGEBENER VIDEO- MODUS }
  336.  
  337. {$IFDEF MITDIAGNOSE}
  338.   IF DIAGNOSE THEN BEGIN
  339.     FOR I := 0 TO PARAMCOUNT DO WRITE(PARAMSTR(I),' ');
  340.     WRITELN;
  341. {$IFDEF OVERLAYS}
  342.     WRITELN('########## OVERLAYBUFFER : ',OVRGETBUF);
  343. {$ENDIF OVERLAYS}
  344.     WRITELN('VGA- Chip : ',VGATYP,', VGA512 : ',VGA512);
  345.   END;
  346. {$ENDIF MITDIAGNOSE}
  347.   GETPARAM;
  348.   LETZT     := '';    { MERKER FÜR LETZTES BILD LÖSCHEN }
  349.   LETZTLIED := $FFFF; { MERKER FÜR LETZTES LIED LÖSCHEN }
  350.   LETZTBL   := 0;     { MERKER FÜR LETZTE BLENDE LÖSCHEN }
  351.   BZ        := 0;
  352.  
  353.   IF LIED <> '' THEN BEGIN
  354.     FREIHEAP := $8800;
  355. {$I-}
  356.     CHDIR(COPY(DEFSPATH,1,PRED(LENGTH(DEFSPATH))));
  357. {$IFDEF MITDIAGNOSE}
  358.     IF IORESULT <> 0 THEN IF DIAGNOSE THEN BEGIN
  359.       WRITELN(#7,'Fehler CHDIR »',DEFSPATH,'«    Taste drücken ');
  360.       IF READKEY = ^[ THEN HALT;
  361.     END;
  362. {$ELSE}
  363.     IF IORESULT = 0 THEN;
  364. {$ENDIF MITDIAGNOSE}
  365. {$I+}
  366.     IF POS('*',LIED) > 0 THEN BEGIN
  367.       LP := 1;
  368.       SR.NAME := JUSTFILENAME(LIED);
  369.       IF POS('**',LIED) > 0 THEN DELETE(SR.NAME,POS('**',SR.NAME),1);
  370. {$IFDEF MITDIAGNOSE}
  371.       IF DIAGNOSE THEN WRITELN('Lieder suchen »',LIED,'«');
  372. {$ENDIF MITDIAGNOSE}
  373.       FINDFIRST(LIED,ANYFILE,SR);
  374.       WHILE (DOSERROR = 0) AND (LZ < LIEDMAX) DO BEGIN
  375.         INC(LZ);
  376.         LIEDER[LZ] := SR.NAME;
  377. {$IFDEF MITDIAGNOSE}
  378.         IF DIAGNOSE THEN WRITE('»',LIEDER[LZ],'«');
  379. {$ENDIF MITDIAGNOSE}
  380.         FINDNEXT(SR);
  381.       END;
  382. {$IFDEF MITDIAGNOSE}
  383.       IF DIAGNOSE THEN BEGIN
  384.         WRITELN;
  385.         WRITELN(LZ,' Lieder gefunden');
  386.       END;
  387. {$ENDIF MITDIAGNOSE}
  388.     END;
  389.   END ELSE FREIHEAP := HEAPMIN;
  390.  
  391.   IF EXISTONPATH(SN,FN2) THEN BEGIN
  392. {$IFDEF MITDIAGNOSE}
  393.     IF DIAGNOSE THEN WRITELN('Diashow »',SN,'«');
  394. {$ENDIF MITDIAGNOSE}
  395.     ASSIGN(SHOW,FN2);
  396. {$I-}
  397.     RESET(SHOW);
  398.     IF IORESULT <> 0 THEN SN := '';
  399. {$I+}
  400.   END ELSE SN := '';
  401.  
  402.   SETREMAP;
  403.  
  404. {$IFDEF MITDIAGNOSE}
  405.   IF DIAGNOSE THEN BEGIN
  406.     WRITELN('GIF wurde von »',QUELLDIR,'« aufgerufen');
  407.     WRITELN('GIF befindet sich auf »',ZIELDIR,'«');
  408.     GETDIR(0,LIN);
  409.     WRITELN('aktuelles Verzeichnis = »',LIN,'«');
  410.     WRITELN;
  411.     WRITELN('MEMAVAIL = ',MEMAVAIL,',   MAXAVAIL = ',MAXAVAIL);
  412.     WRITELN;
  413.     WRITE('Taste drücken ');
  414.     IF READKEY = ^[ THEN HALT;
  415.     WRITE(^M); CLREOL;
  416.   END;
  417. {$ENDIF MITDIAGNOSE}
  418. END; { INITIALISIERE }
  419.  
  420.  
  421. END.
  422.  
  423.