home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast.iso / pcmag / vol7n20.zip / BIGGER.PAS < prev    next >
Pascal/Delphi Source File  |  1988-07-14  |  2KB  |  85 lines

  1. PROGRAM Bigger_Screen;
  2. CONST
  3.   Wide = 150;  { You can ajust the size of the virtual screen       }
  4.   Long = 40;   { by changing these two constants                    }
  5.   Nline = 25;  { change to 24 if your monitor display only 24 lines }
  6.  
  7. TYPE
  8.   Scr = ARRAY[1..Nline, 1..80, 1..2] OF Char;
  9.   LongString = STRING[255];
  10.  
  11. VAR
  12.   MonoD : Scr ABSOLUTE $B000 : 0000;
  13.   ColoD : Scr ABSOLUTE $B800 : 0000;
  14.   Mode  : Byte ABSOLUTE $0040 : $0049; { video mode }
  15.   BigScr : ARRAY[1..Long, 1..Wide, 1..2] OF Char;
  16.  
  17.   PROCEDURE Big_ClrScr;
  18.   VAR I : Integer;
  19.   BEGIN
  20.     FOR I := 1 TO Wide DO
  21.       BEGIN
  22.         BigScr[1, i, 1] := Chr(32);
  23.         BigScr[1, i, 2] := Chr(15);
  24.       END;
  25.     FOR I := 2 TO Long DO Move(BigScr[1, 1, 1], BigScr[i, 1, 1], Wide*2)
  26.   END;
  27.  
  28.   PROCEDURE Big_Write(Line : LongString; Col, Row : Integer; VidAtt : Byte);
  29.   VAR I : Integer;
  30.   BEGIN
  31.     IF (Row <= Long) THEN
  32.       FOR I := 0 TO Length(Line)-1 DO
  33.         IF (Col+i) <= Wide THEN
  34.           BEGIN
  35.             BigScr[Row, Col+i, 1] := Line[i+1];
  36.             BigScr[Row, Col+i, 2] := Chr(VidAtt);
  37.           END;
  38.   END;
  39.  
  40.   PROCEDURE Show_BigScr(col, Row : Integer);
  41.   VAR I : Integer;
  42.   BEGIN
  43.     FOR I := 1 TO Nline DO
  44.       CASE Mode OF
  45.         7    : Move(BigScr[i+col-1, row, 1], MonoD[I, 1, 1], 160);
  46.         2, 3 : Move(BigScr[i+col-1, row, 1], ColoD[I, 1, 1], 160);
  47.       END;
  48.   END;
  49.  
  50.   PROCEDURE GetMove;
  51.   VAR
  52.     Ch1, Ch2 : Char;
  53.     PosX, PosY : Integer;
  54.   BEGIN
  55.     PosX := 1; PosY := 1;
  56.     ClrScr;
  57.     REPEAT
  58.       Show_BigScr(PosX, PosY);
  59.       Read(Kbd, Ch1);
  60.       IF Ch1 = Chr(27) THEN
  61.         BEGIN
  62.           Read(Kbd, Ch2);
  63.           CASE Ord(Ch2) OF
  64.             72 : IF PosX > 1 THEN PosX := Pred(PosX);       {up   }
  65.             77 : IF PosY < Wide-79 THEN PosY := Succ(PosY); {right}
  66.             80 : IF PosX < Long-Pred(Nline) THEN
  67.                    PosX := Succ(PosX);                      {down }
  68.             75 : IF PosY > 1 THEN PosY := Pred(PosY);       {left }
  69.           END;
  70.         END;
  71.     UNTIL Ch1 = Chr(13);
  72.   END;
  73.  
  74. BEGIN
  75.   Big_ClrScr;
  76.   Big_Write('<- this is the upper left corner of the screen',
  77.     1, 1, White);
  78.   Big_Write('Use arrow keys to move the "viewport"; press <Return> to quit',
  79.     1, 2, White);
  80.   Big_Write('<- this is the middle of the screen',
  81.     Wide DIV 2, Long DIV 2, Red);
  82.   Big_Write('this is the lower right corner of the screen ->',
  83.     Wide-46, Long, 25);
  84.   GetMove;
  85. END.