home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 05 / trickbox / showbox.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-04-03  |  2.3 KB  |  109 lines

  1. PROGRAM ShowBox;
  2. (* (c) 1991 Ralf Hensmann & toolbox *)
  3.  
  4. USES  Interpreter, ScreenLow, Crt;
  5.  
  6. CONST CMax      = 15000;
  7.       CtrlChar  = #254;
  8.  
  9. VAR   CharBuf     : ARRAY [0..CMax] OF CHAR;
  10.       CharLast    : WORD;
  11.       CtrlMode    : BOOLEAN;
  12.  
  13. FUNCTION GetKey : INTEGER;
  14. VAR CH : CHAR;
  15. BEGIN
  16.   CH:= ReadKey;
  17.   IF CH = #0 THEN GetKey := 1000+Ord(ReadKey)
  18.              ELSE GetKey := Ord(CH);
  19. END;
  20.  
  21. PROCEDURE Wait;
  22. VAR Dummy : INTEGER;
  23. BEGIN
  24.   WHILE KeyPressed DO Dummy := GetKey;
  25.   Dummy := GetKey;
  26. END;
  27.  
  28. PROCEDURE PlaySession;
  29. VAR i        : WORD;
  30.     Key      : INTEGER;
  31. BEGIN
  32.   i := 0;
  33.   CtrlMode := FALSE;
  34.   WHILE i < CharLast DO BEGIN
  35.     IF CharBuf[i] = CtrlChar THEN
  36.       CtrlMode := NOT CtrlMode
  37.     ELSE
  38.       IF CtrlMode THEN PrintCode(CharBuf[i],TRUE)
  39.                   ELSE PrintChar(CharBuf[i],TRUE);
  40.     IF KeyPressed THEN BEGIN
  41.       Key := GetKey;
  42.       IF Key = 27 THEN Halt;
  43.       Wait;
  44.     END;
  45.     Inc(i);
  46.   END;
  47. END;
  48.  
  49. FUNCTION LoadSession(Name : STRING) : BOOLEAN;
  50. VAR t     : TEXT;
  51.     Zeile : STRING;
  52.     i     : INTEGER;
  53. BEGIN
  54.   IF Name = '' THEN BEGIN
  55.     LoadSession := FALSE;
  56.     Exit;
  57.   END;
  58.   (* Session in Puffer laden *)
  59.   Assign(t,Name);
  60.   {$I-} Reset(t); {$I+}
  61.   IF IOResult <> 0 THEN BEGIN
  62.     LoadSession := FALSE;
  63.     Exit;
  64.   END;
  65.   i := 0;
  66.   REPEAT
  67.     ReadLn(t,Zeile);
  68.     Move(Zeile[1],CharBuf[i],Length(Zeile));
  69.     Inc(i,Length(Zeile));
  70.   UNTIL EoF(t);
  71.   CharLast := i;
  72.   LoadSession := TRUE;
  73. END;
  74.  
  75. VAR Speed,Error : INTEGER;
  76.  
  77. BEGIN
  78.   IF NOT LoadSession(ParamStr(1)) THEN BEGIN
  79.     WriteLn('SHOWBOX');
  80.     WriteLn;
  81.     WriteLn('Usage : SHOWBOX <Showfile> [Verzögerung]');
  82.     WriteLn;
  83.     WriteLn('Verzögerungen sind INTEGER-Zahlen');
  84.     WriteLn('negative Zahlen verlangsamen das Programm, positive beschleunigen es.');
  85.     WriteLn;
  86.     WriteLn('z.B. : SHOWBOX meintest.box -3');
  87.     WriteLn;
  88.     Halt;
  89.   END;
  90.   InitScreen;
  91.   IF ParamCount > 1 THEN BEGIN
  92.     Val(ParamStr(2),Speed,Error);
  93.     IF Error <> 0 THEN BEGIN
  94.       WriteLn('Der 2. Parameter muß eine INTEGER-Zahl sein !!!');
  95.       Halt;
  96.     END;
  97.     WHILE (Speed<0) DO BEGIN
  98.       PrintCode('~',FALSE);
  99.       Inc(Speed);
  100.     END;
  101.     WHILE (Speed>0) DO BEGIN
  102.       PrintCode('*',FALSE);
  103.       Dec(Speed);
  104.     END;
  105.   END;
  106.   PlaySession;
  107. END.
  108.  
  109.