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

{
Date: 06-06-95
From: Zbigniew Szuszkiewicz Krak¢w POLSKA
Subj: VGA 132 kolumn
}
PROGRAM VGA_132k;
{
  It's best procedure to automatic seeking condensed text mode, where
  horizontal characters in line is constans = 132
  but lines per monitor is unknown; first seek 28 lines !
  Array tryb_video_132x28 contains 4 numbers of "standard" condensed video
  mode. You may change this line or remove with first sequence Repeat .. Until;
  All remarks please write to : Zbigniew Szuszkiewicz
                                Krakow Polen
                                PcDuo BBS in Krakow
                                Fido : 2:486/18
}
USES crt;
VAR
  vert_video          : byte;      { max rows on screen }
  hori_video          : byte;      { max characters per line }

PROCEDURE VIDEO_NORMAL; ASSEMBLER;
ASM
     mov ax,lastmode   { al }
     mov ah,0h
     int 10h           { set video mode }
     mov vert_video,25
     mov hori_video,80
END;

PROCEDURE VIDEO_CONDENSED;
CONST
   tryb_video_132x28 : array[1..4] of byte =($24,$54,$47,$80); { te znam }
VAR
  byteidx, kk  : byte;   { must be a local variable}
  vertvideo    : byte absolute 0:$484; { EGA max rows on screen - 1}
BEGIN
    IF lastmode = 7 then begin
                          vert_video:=25;
                          hori_video:=80;
                          windmin:=0;   { SET WINDOW( max video mode); }
                          windmax:=(vert_video-1) *256 + hori_video - 1;
                          exit;
                         end;
     kk:=1;
     repeat
        byteidx:=tryb_video_132x28[kk];
        asm
          mov ah,0h
          mov al,byteidx
          int 10h         { set video mode }
          mov ah,0Fh
          int 10h         { get video mode }
          mov hori_video,ah
          add kk,1
        end;
     until (kk > 4) OR
           ((hori_video = 132) AND (vertvideo < 40));
     if kk > 4 then begin        { must seek other unknown number }
                    kk:=25;      { start number to seking }
                    repeat
                       inc(kk);
                       asm
                         mov ah,0h
                         mov al,kk
                         int 10h         { set video mode }
                         mov ah,0Fh
                         int 10h         { get video mode }
                         mov hori_video,ah
                       end;
                    until (kk > 99) OR  { end number to seeking }
                          ((hori_video > 80) AND (vertvideo < 44));
                    if kk > 99 then asm
                                     mov ax,lastmode   { al }
                                     mov ah,0h       {return old video mode}
                                     int 10h         { set video mode }
                                     mov hori_video,80
                                    end;
                    end;
     vert_video:=vertvideo + 1;
     windmin:=0;                        { SET WINDOW( max video mode); }
     windmax:=(vert_video-1) *256 + (hori_video - 1);
END;

BEGIN  { test program }
   VIDEO_CONDENSED;
   if hori_video > 80
           then begin
                 gotoxy(46,vert_video shr 2);
                 writeln('Yes ! This is very good video procedure');
                 writeln;
                 for textattr:=1 to 132 do
                     if textattr mod 10 = 0
                        then write(' ':8,textattr div 10:2);
                 writeln;
                 for textattr:=1 to 132 do write(textattr mod 10);
                end
           else begin
                gotoxy(25,15);
                write('This is HGC or other older video !');
                end;
   gotoxy(59,vert_video);
   textcolor(14 + blink);
   writeln('This is ',hori_video,' x ',vert_video,' mode.');
   textcolor(15);
   write('Press Enter to continue ...');

   readln;
   video_normal;      { return to lastmode }
END.

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