Category : Pascal Source Code
Archive   : QWIK5X.ZIP
Filename : QWIKDEMO.PAS

 
Output of file : QWIKDEMO.PAS contained in archive : QWIK5X.ZIP
{ =========================================================================== }
{ QwikDemo.pas - Demo program for QWIK screen utilities. ver 5.x, 12-20-88 }
{ Demo has been programmed best for color cards in 25-line mode. }
{ =========================================================================== }

{ !! Do not use Ctrl-Break to terminate this program while in the }
{ TP integrated environment with integrated debugging on!! }

program QwikDemo;

{ R-,S-,I-,D-,T-,F-,V-,B-,N-,L+ } { TP4 directives }
{$A-,B-,D-,E-,F-,I-,L-,N-,O-,R-,S-,V-} { TP5 directives }
{$M 12000, 0, 0}

uses
Crt,Qwik,Strs;

type
BrdrRec = record { For Qbox procedure }
TL,TH,TR,LV,RV,BL,BH,BR: char;
end;

var
Row,Rows,Col,Cols,Step,ColMax: byte;
i,Count,
Fgrnd,Bgrnd: word;
BrdrAttr, WndwAttr: integer;
SavedBlock, PopUpBlock: array [1..4000] of byte;
BlkRow,BlkCol,V: byte;
ColL,ColR: array [1..3] of byte;

Strng,Strng2: string[75];
Data: array [1..9 ] of string[40];
PC: array [1..14] of string[40];
Init: array [1..10] of string[40];
Other:array [1..12] of string[40];
Crsr: array [1..13] of string[40];
Eoss: array [1.. 4] of string[40];
Rnum: Real;
Ch: char;
LastVideoMode: byte;

const
Wait: word = 400; { One unit of wait in milliseconds for demo. }
{ These are double lines for Qbox }
Border: BrdrRec = (TL:'É';TH:'Í';TR:'»';
LV:'º'; RV:'º';
BL:'È';BH:'Í';BR:'¼');
BWcolors: array[0..3] of byte = (
Black, { Black on Black }
LightGray, { LightGray on Black }
White, { White on Black }
LightGrayBG); { Black on LightGray }

{ Since Zenith doesn't have snow on any CGAs, turn off snow checking }
procedure CheckZenith;
var ZdsRom: array[1..8] of char absolute $F000:$800C;
begin
if Qsnow and (ZdsRom='ZDS CORP') then
begin
Qsnow := false;
CardSnow := false;
end;
end;

{ Qbox is an application of QWIK screen utilities. It can make fast
pop-up menus. See WNDWxx.ARC for more applications. }
procedure Qbox (Row,Col,Rows,Cols: byte; WndwAttr,BrdrAttr: integer;
Brdr: BrdrRec);
begin
if (Rows>=2) and (Cols>=2) then
begin
with Brdr do
begin
Qwrite (Row ,Col ,BrdrAttr,TL);
QfillEos ( 1,Cols-2,BrdrAttr,TH);
QwriteEos ( BrdrAttr,TR);
Qfill (Row+1 ,Col ,Rows-2,1 ,BrdrAttr,LV);
Qfill (Row+1 ,Col+Cols-1,Rows-2,1 ,BrdrAttr,RV);
Qwrite (Row+Rows-1,Col ,BrdrAttr,BL);
QfillEos ( 1,Cols-2,BrdrAttr,BH);
QwriteEos ( BrdrAttr,BR);
Qfill (Row+1 ,Col+1 ,Rows-2,Cols-2,WndwAttr,' ')
end
end
end;

procedure PromptKey;
begin
Qwrite (25,CRTcols-19,SameAttr,'press any key ...');
Ch := ReadKey;
end;

procedure ClearScreen (Attr: integer);
begin
Qfill ( 1, 1,CRTrows,CRTcols,Attr,' ');
end;

procedure ExplodeBoxes;
var
TopRow,BottomRow,MaxRows,MaxCols,DeltaCols,LeftCol,RightCol: byte;
CenterCol: byte;
ClockReading: word absolute $0040:$006C; { low memory clock }
StartTime: word;

{}procedure ScatterBoxes;
{}begin
{} Rows:= succ(random(MaxRows));
{} if QVideoMode<=CO40 then { Keep aspect 1:1 }
{} Cols:= Rows + Rows shr 2 { 1.2 cols/row }
{} else Cols:= Rows shl 1 + Rows shr 1; { 2.4 cols/row }
{} Col := LeftCol + random (RightCol-LeftCol-Cols+2);
{} Row := TopRow + random (BottomRow-TopRow-Rows+2);
{} if QVideoMode=Mono then
{} TextAttr:=BWcolors[(random(4))]
{} else
{} begin
{} Fgrnd:= random (16);
{} Bgrnd:= random (8);

{} if Bgrnd=Fgrnd then inc(Fgrnd);
{} TextAttr:=Fgrnd + Bgrnd shl 4;
{} end;
{} Qfill (Row,Col,Rows,Cols,TextAttr,#178);
{}end;

begin
CenterCol:=CRTcols shr 1;
randomize;
StartTime:=ClockReading;
for Step:=1 to 12 do
begin
{ Set boundaries }
TopRow:=13-Step;
BottomRow:=13+Step;
MaxRows:=Step;
if QVideoMode<=CO40 then { Keep aspect 1:1 }
begin
MaxCols:= MaxRows + MaxRows shr 2; { 1.2 cols/row }
DeltaCols:=(Step*5 div 3);
end
else
begin
MaxCols:= MaxRows shl 1 + MaxRows shr 1; { 2.4 cols/row }
DeltaCols:=(Step*10 div 3);
end;
LeftCol :=succ(CenterCol)-DeltaCols;
RightCol :=CenterCol+DeltaCols;
if Step<12 then
begin
for Count:=1 to 40 do ScatterBoxes;
end
else
repeat
ScatterBoxes;
until ClockReading-StartTime>=60; { about 60/18.2 seconds }
end;
end;

procedure InitDemo;
begin
{ --- Set up data --- }
{ If you set a mode, do it first before Qinit! }
{ Please! Test a mode first to see if it is different than what you want; }
{ then change if necessary. Otherwise, the screen jumps. }

CheckBreak := false;
CheckZenith;
LastVideoMode := QVideoMode;
if (QVideoMode<>Mono) and not Have3270 then
begin
ClearScreen (LightGray+BlackBG);
QwriteC (11,1,CRTcols,SameAttr,'(1) 40 column mode');
QwriteC (12,1,CRTcols,SameAttr,'(2) 80 column mode');
QwriteC (14,1,CRTcols,SameAttr,'Which mode [1,2]? ');
GotoEos;
repeat
Ch:=ReadKey;
until ch in ['1','2'];
V := QVideoMode;
case ch of
'1': case V of
BW80: V:=BW40;
CO80: V:=CO40;
end;
'2': case V of
BW40: V:=BW80;
CO40: V:=CO80;
end;
end;
if V<>QVideoMode then
begin
TextMode (V+hi(LastMode));
Qinit; { << Do Qinit again after change of mode!! }
CheckZenith;
end;
end;
ModCursor (CursorOff);
Strng:= ' Q Screen Utilities ';
Strng2:= ' QWIK Screen Utilities ';
Data[1]:= '1';
Data[2]:= '22';
Data[3]:= '333';
Data[4]:= Strng;
Data[5]:= 'Odd Length';
Data[6]:= 'Even Length';
Data[7]:= '18 characters wide';
Data[8]:= '19 characters width';
Data[9]:= 'Margin to Margin width';
PC[1]:= 'COMPUTERS: ADAPTERS:';
PC[2]:= '------------------ ----------';
PC[3]:= 'IBM PC MDA';
PC[4]:= 'IBM XT CGA';
PC[5]:= 'IBM AT EGA';
PC[6]:= 'IBM PCjr MCGA';
PC[7]:= 'IBM PC Convertible VGA';
PC[8]:= 'IBM PS/2 Model 25 8514/A';
PC[9]:= 'IBM PS/2 Model 30 Hercules:';
PC[10]:= 'IBM PS/2 Model 50 HGC';
PC[11]:= 'IBM PS/2 Model 60 HGC Plus';
PC[12]:= 'IBM PS/2 Model 70 InColor';
PC[13]:= 'IBM PS/2 Model 80';
PC[14]:= 'IBM 3270 PC';
Other[ 1]:='QscrollUp - Qwik scroll up';
Other[ 2]:='QscrollDown- Qwik scroll down';
Other[ 3]:='QscrToVscr - block to virtual screen';
Other[ 4]:='QVscrToScr - virtual screen to block';
Other[ 5]:='QreadStr - reads string from screen';
Other[ 6]:='QreadChar - reads char from screen';
Other[ 7]:='QreadAttr - reads attr from screen';
Other[ 8]:='QviewPage - view any video page';
Other[ 9]:='QwritePage - write to any video page';
Other[10]:='QwriteA - for arrays/partial strings';
Other[11]:='QfillC - a self-centering Qfill';
Other[12]:='QattrC - a self-centering Qattr';
Crsr[ 1]:='GotoRC - absolute cursor position';
Crsr[ 2]:='WhereR - absolute cursor row';
Crsr[ 3]:='WhereC - absolute cursor column';
Crsr[ 4]:='SetCursor - sets cursor mode';
Crsr[ 5]:='GetCursor - gets cursor mode';
Crsr[ 6]:='ModCursor - modifies cursor mode';
Crsr[ 7]:='CursorInitial - cursor at startup';
Crsr[ 8]:='CursorUnderline - normal cursor';
Crsr[ 9]:='CursorHalfBlock - for insert editing';
Crsr[10]:='CursorBlock - for the nearsighted';
Crsr[11]:='A total of 38 utilities';
Crsr[12]:='optimizing in just 2.5k bytes or less!';
Init[1]:='ù Detects dual monitor/adapters for all';
Init[2]:=' systems listed on the previous page';
Init[3]:='ù Identifies each system by name';
Init[4]:='ù Gets System ID and Submodel ID';
Init[5]:='ù Gets CPU ID';
Init[6]:='ù Sets FAR pointer for virtual screens';
Init[7]:='ù Determines need for wait-for-retrace';
Init[8]:='ù Gets screen dimensions: Rows by Cols';
Init[9]:='ù Determines the number of video pages';
Init[10]:='ù Sets 4 standard cursor shapes';
Eoss[1]:=' ù QwriteEos - just like Qwrite ';
Eoss[2]:=' ù QwriteEosA - just like QwriteA ';
Eoss[3]:=' ù QfillEos - just like Qfill ';
Eoss[4]:=' ù QattrEos - just like Qattr ';
end;

procedure ExplodeScreen;
begin
{ --- Initial screen --- }
ClearScreen (White+BlueBG);
QwriteC (11, 1,CRTcols,Yellow+BlueBG,Strng2);
QwriteC (13, 1,CRTcols,SameAttr,'Your screen is about to explode.');
QwriteC (14, 1,CRTcols,SameAttr,'Hold on to your seat ...');
Delay (Wait*5);

{ --- Explosion of Boxes --- }
ClearScreen (Black+LightGrayBG);
ExplodeBoxes;

QfillC (10, 1,CRTcols, 6,34,RedBG ,' ');
QfillC (11, 1,CRTcols, 4,30,BrownBG,' ');
TextAttr:= Yellow+RedBG;
QwriteC (12, 1,CRTcols,TextAttr,Strng2);
QwriteC (13, 1,CRTcols,TextAttr,' Version 5.x ');
end;

procedure SaveScreen;
begin
{ --- Save Screen for Page Demo --- }
if MaxPage>0 then
begin
QstoreToMem ( 1, 1,25,CRTcols,SavedBlock);
QwritePage (1);
QstoreToScr ( 1, 1,25,CRTcols,SavedBlock);
QwritePage (0);
end;
{ --- End of Save Screen --- }
Delay (Wait*4);
TextAttr:= White+BlueBG;
QwriteC ( 6, 1,CRTcols,TextAttr,' Qwrite will write with new attributes ');
QwriteC ( 7, 1,CRTcols,TextAttr,' that you specify direct to the screen. ');
Delay (Wait*6);
QwriteC (18, 1,CRTcols,SameAttr,'Qwrite will also use existing attributes');
QwriteC (19, 1,CRTcols,SameAttr,' when you do not even know or care. ');
{ highlight the word 'existing' }
QattrC (18, 6,CRTcols+5,1,10,White+RedBG+Blink);
Delay (wait*10);
QwriteC (21, 1,CRTcols,TextAttr,' Say Goodbye to this screen. ');

Delay (wait*3);
{ --- Disintigrate Screen --- }
for i:=1 to 5000 do
begin
Row:=random(25)+1;
Col:=random(CRTcols)+1;
Qfill (row,col, 1, 1,Black,' ');
end;
end;

procedure ListCompatibles;
begin
{ --- Compatible computer and adapter list --- }
ClearScreen (LightGrayBG);
QwriteC ( 4, 1,CRTcols,SameAttr,'QWIK Screen Utilities detects these IBM');
QwriteC ( 5, 1,CRTcols,SameAttr,'or compatible computers and adapters:');
delay (wait*5);
Col:=(CRTcols-30) shr 1;
for Row:=7 to 20 do
Qwrite (Row,Col,SameAttr,PC[Row-6]);
QwriteC (23, 1,CRTcols,SameAttr,'Working text modes 0,1,2,3, or 7!');
PromptKey;
end;

procedure ListDetection;
begin
{ --- Qinit detection --- }
ClearScreen (LightGrayBG);
QwriteC ( 4, 1,CRTcols,SameAttr,'To configure QWIK, Qinit not only');
QwriteC ( 5, 1,CRTcols,SameAttr,'detects computers/adapters, it:');
delay (wait*5);
Col:=(CRTcols-36) shr 1;
for Row:=10 to 19 do
Qwrite (Row,Col,SameAttr,Init[Row-9]);
PromptKey;
end;

procedure UsingStr;
begin
{ --- Qwrite with Str on Reals Demo --- }
ClearScreen (Yellow+BlackBG);
QwriteC ( 2, 1,CRTcols,SameAttr,'Qwrite with the Strs unit will write');
QwriteC ( 3, 1,CRTcols,SameAttr,'reals and integers faster:');
Delay (wait*7);
Rnum:=1.23E+05;
for col:=0 to CRTcols div 20 -1 do
for row:=5 to 24 do
begin
Rnum:=Rnum+1;
Qwrite (row,col*20+4,SameAttr,StrRF(Rnum,12));
end;
PromptKey;
end;

procedure Centering;
begin
{ --- Centering Demo --- }
ClearScreen (LightGrayBG);
QwriteC ( 2, 1,CRTcols,SameAttr,'QwriteC will automatically');
QwriteC ( 3, 1,CRTcols,SameAttr,'center your data ...');
QwriteC ( 4, 1,CRTcols,SameAttr,'(Odd breaks are shifted to the left.)');
Delay (wait*6);

{ - Set up columns for varying column modes - }
ColL[2]:=1; ColR[2]:=CRTcols;
if CRTcols<80 then
begin
ColL[1]:=ColL[2]; ColL[3]:=CRTcols div 2;
ColR[1]:=ColR[2]; ColR[3]:=CRTcols div 2;
end
else
begin
ColL[1]:=3; ColR[1]:=26; ColL[3]:=CRTcols-14; ColR[3]:=CRTcols-14;
end;

QwriteC ( 7,ColL[1],ColR[1],SameAttr,'between margins ...');
Qbox ( 8,(ColL[1]+ColR[1]) shr 1 -12,15,26,white,LightGray,Border);
Delay (wait*3);
for row:=11 to 19 do
QwriteC (row,ColL[1],ColR[1],SameAttr, Data[row-10]);
Delay (wait*5);

QwriteC ( 7,ColL[2],ColR[2],SameAttr,'between two columns ...');
QfillC ( 9,ColL[2],ColR[2],13,24,Yellow,' '); { Clear window }
for row:= 9 to 21 do
QwriteC (row,ColL[2],ColR[2],SameAttr,'><'); { Show two columns }
Delay (wait*3);
for row:=11 to 19 do
QwriteC (row,ColL[2],ColR[2],LightRed, Data[row-10]);
Delay (wait*5);

QwriteC ( 7,ColL[3],ColR[3],SameAttr,'or on a center line ...');
QfillC ( 8,ColL[3],ColR[3],15,27,Black+LightGrayBG,' '); {Clear window}
for row:=09 to 21 do { Show center line }
QwriteC (row,ColL[3],ColR[3],Black+LightGrayBG,'|');
Delay (wait*3);
for row:=11 to 19 do
QwriteC (row,ColL[3],ColR[3],SameAttr, Data[row-10]);
PromptKey;
end;

procedure QwikFilling;
begin
{ --- Qfill Demo --- }
ClearScreen (White+BlackBG);
QwriteC ( 2, 1,CRTcols,SameAttr,'Qfill as well as Qattr can fill');
QwriteC ( 3, 1,CRTcols,SameAttr,'your screen in several ways.');
Delay (wait*7);

QwriteC ( 7, 1,CRTcols,SameAttr,'by rows ...');
Delay (wait*3);
for row:= 9 to 24 do
Qfill (row, 2, 1,CRTcols-2,9+row,Chr(row+56));
Delay (wait*5);

Qfill ( 7, 1,19,CRTcols,white,' '); { Clear Lines }
QwriteC ( 7, 1,CRTcols,SameAttr,'by columns ...');
Delay (wait*3);
for col:=2 to CRTcols-2 do
Qfill ( 9,col,16,1,16+col,chr(col+63));
Delay (wait*5);

Qfill ( 7, 1,19,CRTcols,white,' '); { Clear Lines }
QwriteC ( 7, 1,CRTcols,SameAttr,'or by row-by-column blocks ...');
Delay (wait*3);
Qfill ( 9,2,16,CRTcols-2,Yellow+BlueBG,'!');
Delay (wait*5);
end;

procedure QboxDemo;
begin
{ --- Qbox demo --- }
ClearScreen (LightGrayBG);
QwriteC ( 2, 1,CRTcols,SameAttr,'Qbox is an application procedure made');
QwriteC ( 3, 1,CRTcols,SameAttr,'from Qwrite and Qfill. Together they');
QwriteC ( 4, 1,CRTcols,SameAttr,'can make windows with borders easy.');
Delay (wait*9);
QwriteC (14, 1,CRTcols,SameAttr,'How about 100 of them? ... ');
Delay (wait*4);
ColMax:=CRTcols-21;
for i:=1 to 100 do
begin
row:=random (10)+6;
col:=random (ColMax)+2;
if QVideoMode=Mono then
begin
BrdrAttr:=BWcolors[random(4)];
WndwAttr:=BWcolors[random(4)];
end
else
begin
BrdrAttr:=random (128);
WndwAttr:=random (128);
end;
Qbox (row,col,10,20,BrdrAttr,WndwAttr,Border);
end;
Delay (wait*10);
end;

procedure PopUpDemo;
begin
{ --- Block Transfer and PopUp Demo --- }
Qfill ( 1, 1,25,CRTcols,yellow,'?'); { Clear Screen }
QfillC (10, 1,CRTcols, 6,40,BrownBG,' '); { Clear Block }
QwriteC (11, 1,CRTcols,SameAttr,'Qstore will save and restore');
QwriteC (12, 1,CRTcols,SameAttr,'Row-by-Column blocks on your display.');
QwriteC (13, 1,CRTcols,SameAttr,'It is so fast, I have to slow it down');
QwriteC (14, 1,CRTcols,SameAttr,'so you can see it.');
Delay (wait*11);
BlkRow:=8;
BlkCol:=CRTcols div 2 - 9;
QstoreToMem(BlkRow,BlkCol,10,20,SavedBlock);
{ --- Make a Pop Up Menu --- }
Qbox (BlkRow,BlkCol,10,20,Yellow+BlueBG,Brown+BlueBG,Border);
QwriteC (BlkRow+4,BlkCol,BlkCol+20,SameAttr,'Pop Up');
QwriteC (BlkRow+5,BlkCol,BlkCol+20,SameAttr,'Menu');
{ --- End of Pop Up Menu --- }
QstoreToMem (BlkRow,BlkCol,10,20,PopUpBlock);
Delay (wait*4);
ColMax:=CRTcols-20;
for i:=1 to 30 do
begin
Delay (Wait div 2);
QstoreToScr (BlkRow,BlkCol,10,20,SavedBlock);
BlkRow:=random(15)+1;
BlkCol:=random(ColMax)+1;
QstoreToMem (BlkRow,BlkCol,10,20,SavedBlock);
QstoreToScr (BlkRow,BlkCol,10,20,PopUpBlock);
end;
end;

procedure PageDemo;
begin
{ --- Page Demo --- }
if MaxPage>0 then
begin
QviewPage (1);
QwritePage (1);
TextAttr:= Yellow+BlueBG;
QfillC (20, 1,CRTcols, 3,40,TextAttr,' ');
QwriteC (20, 1,CRTcols,SameAttr,' Remember this page? ');
QwriteC (21, 1,CRTcols,SameAttr,' It wasn''t destroyed, but saved using ');
QwriteC (22, 1,CRTcols,SameAttr,' Qstores and placed on a new page. ');
Delay (wait*14);
QwritePage (0);
QviewPage (0);
end;
end;

procedure EosMarker;
var Row: byte;
begin
{ -- EOS marker -- }
ClearScreen (LightGreen+BlackBG);
QwriteC ( 3, 1,CRTcols,White,'EOS Marker:');
Col := EosC;
QwriteEos (Blink+Yellow,#07);
Qwrite ( 4,Col,Yellow,#24' right here');
QwriteC ( 7, 1,CRTcols,SameAttr,'The TP Write procedure locates your next');
QwriteC ( 8, 1,CRTcols,SameAttr,'string by placing the cursor at the EOS ');
QwriteC ( 9, 1,CRTcols,SameAttr,'(End-Of-String). Qwik procedures can do');
QwriteC (10, 1,CRTcols,SameAttr,'the same thing, but without moving the ');
QwriteC (11, 1,CRTcols,SameAttr,'cursor! It''s done with an offset called');
QwriteC (12, 1,CRTcols,SameAttr,'QEosOfs. It''s updated after every Qwik ');
QwriteC (13, 1,CRTcols,SameAttr,'procedure. ');
QwriteC (16, 1,CRTcols,SameAttr,'Now you can have the convenience of a TP');
QwriteC (17, 1,CRTcols,SameAttr,'write but the speed of Qwik! Check out ');
QwriteC (18, 1,CRTcols,SameAttr,'the following Q*Eos procedures. ');
PromptKey;
end;

procedure QEosDemo;
begin
{ --- Q*Eos Utilities Demo --- }
ClearScreen (Black+LightGrayBG);
QwriteC ( 3, 1,CRTcols,SameAttr,'The Q*Eos procedures:');
for Row:=5 to 8 do
QwriteC (Row, 1,CRTcols,Yellow+BlackBG,Eoss[Row-4]);
QwriteC (10, 1,CRTcols,SameAttr,'Take advantage of the EOS marker to');
QwriteC (11, 1,CRTcols,SameAttr,'chain the next string - with an ');
QwriteC (12, 1,CRTcols,SameAttr,'optional change of attribute! ');
delay (wait*5);
Col := (CRTcols-38) shr 1;
Qwrite (14,Col,Black+BrownBG,' Yellow ');
for Count:=1 to 2 do
begin
delay (wait);
QwriteEos (White+BlueBG ,' Blue ');
delay (wait);
QwriteEos (Black+BrownBG,' Yellow ');
end;
delay (wait);
QwriteC (16, 1,CRTcols,SameAttr,'Starts where the last Qwik');
QwriteC (17, 1,CRTcols,SameAttr,'procedure left off!');
QwriteC (18, 1,CRTcols,SameAttr,'Like TP Write ... but at Qwik speeds!');
delay (wait*2);
Qwrite (21,Col,Black+BrownBG,' Yellow ');
for Count:=1 to 2 do
begin
QwriteEos (White+BlueBG ,' Blue ');
QwriteEos (Black+BrownBG,' Yellow ');
end;
PromptKey;
end;

procedure UsingEos;
begin
{ -- Using Eos marker -- }
ClearScreen (Black+LightGrayBG);
Col:=succ((CRTcols-40) shr 1);
QwriteC ( 2, 1,CRTcols,White,' Using the EOS marker: ');
Qwrite ( 4,Col,SameAttr,'Now you have two marker utilities -');
Qwrite ( 5,Col,SameAttr,'(1) EOS, and (2) the cursor. Both can');
Qwrite ( 6,Col,SameAttr,'be used interchangeably:');
Qwrite ( 8,Col,SameAttr,'GotoEos - cursor to End-Of-String');
Qwrite ( 9,Col,SameAttr,'EosR - End-Of-String row');
Qwrite (10,Col,SameAttr,'EosC - End-Of-String column');
Qwrite (12,Col,SameAttr,'You can also manually alter EOS with the');
Qwrite (13,Col,SameAttr,'following procedures:');
Qwrite (15,Col,SameAttr,'EosToRC - Sets EOS to a given row');
Qwrite (16,Col,SameAttr,' and column.');
Qwrite (17,Col,SameAttr,'EosToRCrel - Relatively shifts EOS by');
Qwrite (18,Col,SameAttr,' row and column.');
Qwrite (19,Col,SameAttr,'EosToCursor - Matches Eos to the cursor');
Qwrite (20,Col,SameAttr,' position.');
Qwrite (21,Col,SameAttr,'EosLn - Sets EOS to next row');
Qwrite (22,Col,SameAttr,'QEosLn - Like EosLn, but scrolls up');
Qwrite (23,Col,SameAttr,' if on last row.');
PromptKey;
end;

procedure MoreUtilities;
begin
{ --- Other Screen Utilities Demo --- }
ClearScreen (Black+LightGrayBG);
QwriteC ( 3, 1,CRTcols,SameAttr,'Here are more powerful');
QwriteC ( 4, 1,CRTcols,SameAttr,'QWIK Screen Utilities');
QwriteC ( 5, 1,CRTcols,SameAttr,'(for standard and virtual):');
delay (wait*5);
Col:=(CRTcols-38) shr 1;
for Row:=8 to 19 do
Qwrite (Row,Col,SameAttr,Other[Row-7]);
PromptKey;
end;

procedure CursorUtilities;
begin
{ --- Cursor Utilities Demo --- }
ClearScreen (Black+BrownBG);
QwriteC ( 1, 1,CRTcols,SameAttr,'And of course there are complete');
QwriteC ( 2, 1,CRTcols,SameAttr,'set of CURSOR location and mode ');
QwriteC ( 3, 1,CRTcols,SameAttr,'routines for all video pages and');
QwriteC ( 4, 1,CRTcols,SameAttr,'video cards: ');
delay (wait*5);
Col:=(CRTcols-38) shr 1;
for Row:= 6 to 11 do
Qwrite (Row,Col,SameAttr,Crsr[Row-5]);
QwriteC (13, 1,CRTcols,SameAttr,'For universal cursor sizes, four');
QwriteC (14, 1,CRTcols,SameAttr,'standard shapes are initialized ');
QwriteC (15, 1,CRTcols,SameAttr,'by detecting each video card: ');
for Row:=17 to 20 do
Qwrite (Row,Col,SameAttr,Crsr[Row-10]);
for Row:=22 to 23 do
QwriteC (Row,1,CRTcols,SameAttr,Crsr[Row-11]);
PromptKey;
end;

procedure AttrDemo;
begin
{ --- Attribute Demo --- }
ClearScreen (Green+GreenBG);
TextAttr:= White+GreenBG;
QwriteC ( 2, 1,CRTcols,TextAttr,'QWIK Screen Utilities are hiding data');
QwriteC ( 3, 1,CRTcols,TextAttr,'on your screen ...');
Cols:=CRTcols div 20;
if QVideoMode=Mono then
TextAttr:=Black+BlackBG
else TextAttr:=Green+GreenBG;
for col:=0 to Cols-1 do
for row:=5 to 20 do
Qwrite (row,20*col+1,TextAttr,Strng);
Delay (wait*8);

Qfill ( 2, 1, 2,CRTcols,SameAttr,' '); { Clear Lines }
TextAttr:= White+GreenBG;
QwriteC ( 2, 1,CRTcols,TextAttr,'Qattr can show them -');
QwriteC ( 3, 1,CRTcols,TextAttr,'by merely changing the attribute!');
Delay (wait*6);

{ --- Try using Turbo's color procedures this time --- }
TextColor (Black); TextBackground (Green);
Qattr ( 5, 1,16,CRTcols,TextAttr); { Reveal Data }
Delay (wait*5);

Qfill ( 2, 1, 2,CRTcols,SameAttr,' '); { Clear Lines }
TextColor (yellow); TextBackground (Green);
QwriteC ( 2, 1,CRTcols,TextAttr,'Or even just emphasize what''s seen ...');
for i:=1 to 500 do
begin
Row:= random(16) + 5;
Col:= random(Cols)*20+1;
Qattr (Row,Col, 1,20,46);
Delay (3);
Qattr (Row,Col, 1,20,32);
end;
for i:=1 to Cols do { Emphasize Data }
Qattr ( 5*i,(i-1)*20+1, 1,20,Yellow+GreenBG+Blink);
Qattr (21, 1, 5,CRTcols,TextAttr);
QwriteC (22, 1,CRTcols,TextAttr,' (c) 1986-1988 James H. LeMay ');
end;

procedure CloseDemo;
begin
if QVideoMode<=CO40 then
begin
delay (Wait*4);
TextMode (LastVideoMode+hi(LastMode));
end;
GotoRC (23, 1);
SetCursor (CursorInitial);
end;

begin
InitDemo;
ExplodeScreen;
SaveScreen;
ListCompatibles;
ListDetection;
UsingStr;
Centering;
QwikFilling;
QboxDemo;
PopUpDemo;
PageDemo;
EosMarker;
QEosDemo;
UsingEos;
MoreUtilities;
CursorUtilities;
AttrDemo;
CloseDemo;
end.


  3 Responses to “Category : Pascal Source Code
Archive   : QWIK5X.ZIP
Filename : QWIKDEMO.PAS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/