[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]

    Program TestVid;

    { High speed Text-video routines For working With binary Files, direct   }
    { screen access etc.  (c)1993 Chris Lautenbach                           }
    {                                                                        }
    { You are hereby permitted to use this routines, so long as you give me  }
    { credit.  If you modify them, do not distribute the modified version.   }
    {                                                                        }
    { This is the example Program, see SPEEDVID.PAS For the actual Unit      }
    { code, and usage information.                                           }
    {                                                                        }
    { "ScreenFile" is a File containing sequential binary screen images. The }
    { easiest way to make these, is to draw several screens in a Program     }
    { like TheDraw, then save them as Binary.  After you are done, copy them }
    { all to one File, like so:                                              }
    {                                                                        }
    { COPY /B SCREEN1.BIN+SCREEN2.BIN+SCREEN3.BIN SCREEN.BIN                 }
    {                                                                        }
    { Note: the /B option is NECESSARY.  Without specifying binary mode,     }
    {       COPY will insert ^Z's and other wierd stuff that will screw up   }
    {       the resulting File.                                              }

    Uses  Dos, Crt, SpeedVid;

    Var   ScreenFile : File of ScreenLine;
          StartLine, TempLine, idx : Integer;
          Cmd : Char;
          p : Pointer;

    Procedure ShowScreenLine(Index:Word);
    begin
      If StartLine+Index<Filesize(ScreenFile) then
      begin
        Seek(ScreenFile, StartLine+Index-1);
        Read(ScreenFile, VideoScreen[Index]);
      end;
    end;

    begin
      MonoMode := (VideoMode = 7);
      SaveScreen(P);
      Assign(ScreenFile,'testvid.exe');
      {$I-} Reset(ScreenFile); {$I+}
      If IOResult<>0 then
      begin
        Writeln('Error: Cannot open SCREEN.BIN.');
        Halt;
      end;
      StartLine:=0;
      For TempLine:=1 to ScreenHeight do ShowScreenLine(TempLine);
      Repeat
        Repeat Until KeyPressed;
        Cmd:=ReadKey;
        If Cmd=#0 then
        begin
          Cmd:=ReadKey;
          Case Cmd of
    {Down}  #80 : If StartLine+1<Filesize(ScreenFile) then
                  begin
                    Inc(StartLine);
                    ScrollScreen(Up);
                    ShowScreenLine(ScreenHeight);
                  end;
    {Up}    #72 : If StartLine-1>=0 then
                  begin
                    Dec(StartLine);
                    ScrollScreen(Down);
                    ShowScreenLine(1);
                  end;
    {PgDn}  #81 : begin
                    If StartLine+ScreenHeight<Filesize(ScreenFile) then
                      TempLine:=ScreenHeight
                        ELSE
                      TempLine:=ScreenHeight-(Filesize(ScreenFile)-ScreenHeight);
                    For idx:=1 to TempLine do
                    begin
                      Inc(StartLine);
                      ScrollScreen(Up);
                      ShowScreenLine(ScreenHeight);
                    end;
                  end;
    {PgUp}  #73 : begin
                    If StartLine-ScreenHeight>=0 then
                      TempLine:=ScreenHeight
                        ELSE
                      TempLine:=StartLine;
                    For idx:=1 to TempLine do
                    begin
                      Dec(StartLine);
                      ScrollScreen(Down);
                      ShowScreenLine(1);
                    end;
                  end;
          end; {case}
        end;
      Until Cmd=#27; {ESC}
      Close(ScreenFile);
      RestoreScreen(P);
    end.

[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]