Browse Source

+ Initial implementation

michael 24 years ago
parent
commit
754e4047a6

+ 58 - 0
docs/videoex/Makefile

@@ -0,0 +1,58 @@
+#######################################################################
+#
+# Makefile to compile all examples and convert them to LaTeX
+# 
+#######################################################################
+
+# Compiler
+PP=ppc386
+
+# Unit directory
+# UNITDIR=/usr/lib/ppc/0.99.0/linuxunits
+
+
+# Any options you wish to pass.
+PPOPTS=
+
+# Script to convert the programs to LaTeX examples which can be included.
+PP2TEX=../pp2tex
+
+# Script to collect all examples in 1 file.
+MAKETEX=make1tex
+
+#######################################################################
+# No need to edit after this line.
+#######################################################################
+
+ifdef UNITDIR
+PPOPTS:=$(PPOPTS) -Up$(UNITDIR);
+endif
+
+.SUFFIXES: .pp .tex
+
+.PHONY: all tex clean
+
+OBJECTS=ex1 ex2 ex3 ex4 ex5 ex6 ex7 ex8
+# ex9
+#        ex10 ex11 ex12 ex13  ex14 ex15 ex16 ex17 ex18
+
+TEXOBJECTS=$(addsuffix .tex, $(OBJECTS))
+
+all : $(OBJECTS)
+
+tex : $(TEXOBJECTS)
+
+onetex : tex
+	$(MAKETEX) $(TEXOBJECTS)
+
+clean : 
+	rm -f *.o *.s $(OBJECTS) $(TEXOBJECTS) vidutil.ppu vidutil.o
+ 
+$(OBJECTS): %: %.pp vidutil.ppu
+	$(PP) $(PPOPTS) $*
+
+$(TEXOBJECTS): %.tex: %.pp head.tex foot.tex
+	$(PP2TEX) $*
+
+vidutil.ppu: vidutil.pp
+	$(PP) $(PPOPTS) vidutil.pp

+ 12 - 0
docs/videoex/README

@@ -0,0 +1,12 @@
+This directory contains the examples for the video unit documentation.
+
+vidutil.pp Containst the textout function.
+
+ex1.pp demonstrates the vidutil unit.
+ex2.pp contains an example of the SetCursorPos function.
+ex3.pp contains an example of the ClearScreen function.
+ex4.pp contains an example of the GetCapabilities function.
+ex5.pp contains an example of the GetCursorType function.
+ex6.pp contains an example of the GetLockScreenCount function.
+ex7.pp contains an example of the GetVideoMode function.
+ex8.pp contains an example of the GetVideoModeCount function.

+ 18 - 0
docs/videoex/ex1.pp

@@ -0,0 +1,18 @@
+program testvideo;
+
+uses video,keyboard,vidutil;
+
+Var 
+  i : longint;
+  k : TkeyEvent;
+  
+begin
+  InitVideo;
+  InitKeyboard;
+  For I:=1 to 10 do
+    TextOut(i,i, 'Press any key to end');
+  UpdateScreen(False);
+  K:=GetKeyEvent;
+  DoneKeyBoard;
+  DoneVideo;
+end.  

+ 48 - 0
docs/videoex/ex2.pp

@@ -0,0 +1,48 @@
+program example2;
+
+uses video,keyboard;
+
+Var
+  P,PP,D : Integer;
+  K: TKeyEvent;
+  
+  Procedure PutSquare (P : INteger; C : Char);
+  
+  begin
+    VideoBuf^[P]:=Ord(C)+($07 shr 8);
+    VideoBuf^[P+ScreenWidth]:=Ord(c)+($07 shr 8);
+    VideoBuf^[P+1]:=Ord(c)+($07 shr 8);
+    VideoBuf^[P+ScreenWidth+1]:=Ord(c)+($07 shr 8);
+  end;
+
+begin
+  InitVideo;
+  InitKeyBoard;
+  P:=0;
+  PP:=-1;
+  Repeat
+    If PP<>-1 then
+      PutSquare(PP,' ');
+    PutSquare(P,'#');
+    SetCursorPos(P Mod ScreenWidth,P div ScreenWidth);
+    UpdateScreen(False);
+    PP:=P;  
+    Repeat
+      D:=0;
+      K:=TranslateKeyEvent(GetKeyEvent);
+      Case GetKeyEventCode(K) of
+        kbdLeft : If (P Mod ScreenWidth)<>0 then 
+                   D:=-1;
+        kbdUp : If P>=ScreenWidth then
+                 D:=-ScreenWidth;
+        kbdRight : If ((P+2) Mod ScreenWidth)<>0 then
+                   D:=1;
+        kbdDown : if (P<(VideoBufSize div 2)-(ScreenWidth*2)) then
+                   D:=ScreenWidth;
+      end;             
+    Until (D<>0) or (GetKeyEventChar(K)='q');
+    P:=P+D;
+  until GetKeyEventChar(K)='q';
+  DoneKeyBoard;
+  DoneVideo;
+end.

+ 22 - 0
docs/videoex/ex3.pp

@@ -0,0 +1,22 @@
+program testvideo;
+
+uses video,keyboard,vidutil;
+
+Var 
+  i : longint;
+  k : TkeyEvent;
+  
+begin
+  InitVideo;
+  InitKeyboard;
+  For I:=1 to 10 do
+    TextOut(i,i, 'Press any key to clear screen');
+  UpdateScreen(false);
+  K:=GetKeyEvent;
+  ClearScreen;
+  TextOut(1,1,'Cleared screen. Press any key to end');  
+  UpdateScreen(true);
+  K:=GetKeyEvent;
+  DoneKeyBoard;
+  DoneVideo;
+end.  

+ 29 - 0
docs/videoex/ex4.pp

@@ -0,0 +1,29 @@
+Program Example4;
+
+{ Program to demonstrate the GetCapabilities function. }
+
+Uses video;
+
+Var
+  W: Word;
+
+  Procedure TestCap(Cap: Word; Msg : String);
+  
+  begin
+    Write(Msg,' : ');
+    If (W and Cap=Cap) then
+      Writeln('Yes')
+    else
+      Writeln('No');
+  end;
+
+begin
+  W:=GetCapabilities;
+  Writeln('Video driver supports following functionality');
+  TestCap(cpUnderLine,'Underlined characters');
+  TestCap(cpBlink,'Blinking characters');
+  TestCap(cpColor,'Color characters');
+  TestCap(cpChangeFont,'Changing font');
+  TestCap(cpChangeMode,'Changing video mode');
+  TestCap(cpChangeCursor,'Changing cursor shape');
+end.

+ 20 - 0
docs/videoex/ex5.pp

@@ -0,0 +1,20 @@
+Program Example5;
+
+{ Program to demonstrate the GetCursorType function. }
+
+Uses video,keyboard,vidutil;
+
+Const
+  Cursortypes : Array[crHidden..crHalfBlock] of string = 
+    ('Hidden','UnderLine','Block','HalfBlock');
+
+begin
+  InitVideo;
+  InitKeyboard;
+  TextOut(1,1,'Cursor type: '+CursorTypes[GetCursorType]);
+  TextOut(1,2,'Press any key to exit.');
+  UpdateScreen(False);
+  GetKeyEvent;
+  DoneKeyboard;
+  DoneVideo;
+end.

+ 34 - 0
docs/videoex/ex6.pp

@@ -0,0 +1,34 @@
+Program Example6;
+
+{ Program to demonstrate the GetLockScreenCount function. }
+
+Uses video,keyboard,vidutil;
+
+Var
+  I : Longint;
+  S : String;
+  
+begin
+  InitVideo;
+  InitKeyboard;
+  TextOut(1,1,'Press key till new text appears.');
+  UpdateScreen(False);
+  Randomize;
+  For I:=0 to Random(10)+1 do
+    LockScreenUpdate;
+  I:=0;  
+  While GetLockScreenCount<>0 do
+    begin
+    Inc(I);
+    Str(I,S);
+    UnlockScreenUpdate;
+    GetKeyEvent;
+    TextOut(1,1,'UnLockScreenUpdate had to be called '+S+' times');
+    UpdateScreen(False);
+    end;
+  TextOut(1,2,'Press any key to end.');
+  UpdateScreen(False);
+  GetKeyEvent;
+  DoneKeyboard;
+  DoneVideo;
+end.

+ 28 - 0
docs/videoex/ex7.pp

@@ -0,0 +1,28 @@
+Program Example7;
+
+{ Program to demonstrate the GetVideoMode function. }
+
+Uses video,keyboard,vidutil;
+
+Var 
+  M : TVideoMode;
+  S : String;
+  
+begin
+  InitVideo;
+  InitKeyboard;
+  GetVideoMode(M);
+  if M.Color then 
+    TextOut(1,1,'Current mode has color')
+  else  
+    TextOut(1,1,'Current mode does not have color');
+  Str(M.Row,S);  
+  TextOut(1,2,'Number of rows    : '+S);
+  Str(M.Col,S);  
+  TextOut(1,3,'Number of columns : '+S);
+  Textout(1,4,'Press any key to exit.');
+  UpdateScreen(False);   
+  GetKeyEvent;
+  DoneKeyboard;
+  DoneVideo;
+end.

+ 44 - 0
docs/videoex/ex8.pp

@@ -0,0 +1,44 @@
+Program Example8;
+
+{ Program to demonstrate the GetVideoModeCount function. }
+
+Uses video,keyboard,vidutil;
+
+Procedure DumpMode (M : TVideoMode; Index : Integer);
+
+Var
+ S : String;
+
+begin
+  Str(Index:2,S);
+  inc(Index);
+  TextOut(1,Index,'Data for mode '+S+': ');
+  if M.Color then 
+    TextOut(19,Index,'   color,')
+  else  
+    TextOut(19,Index,'No color,');
+  Str(M.Row:3,S);  
+  TextOut(28,Index,S+' rows');
+  Str(M.Col:3,S);  
+  TextOut(36,index,S+' columns');
+end;
+
+Var 
+  i,Count : Integer;
+  m : TVideoMode;
+  
+begin
+  InitVideo;
+  InitKeyboard;
+  Count:=GetVideoModeCount;
+  For I:=1 to Count do
+    begin
+    GetVideoModeData(I-1,M);
+    DumpMode(M,I-1);
+    end;
+  TextOut(1,Count+1,'Press any key to exit');  
+  UpdateScreen(False);
+  GetKeyEvent;
+  DoneKeyboard;
+  DoneVideo;
+end.

+ 2 - 0
docs/videoex/foot.tex

@@ -0,0 +1,2 @@
+\end{verbatim}
+\end{FPCList}

+ 3 - 0
docs/videoex/head.tex

@@ -0,0 +1,3 @@
+\begin{FPCList}
+\item[Example]
+\begin{verbatim}

+ 8 - 0
docs/videoex/newex

@@ -0,0 +1,8 @@
+#!/bin/sh
+if [ -e ex${1}.pp ]; then
+  mv ex${1}.pp ex${1}.pp.orig
+fi
+sed -e s/Example/Example$1/ -e s/\\\*\\\*\\\*/$2/ <template.pp >ex${1}.pp
+echo "ex${1}.pp contains an example of the $2 function." >>README
+joe ex${1}.pp
+ppc386 ex${1}.pp && ex${1}

+ 12 - 0
docs/videoex/template.pp

@@ -0,0 +1,12 @@
+Program Example;
+
+{ Program to demonstrate the *** function. }
+
+Uses video,keyboard,vidutil;
+
+begin
+  InitVideo;
+  InitKeyboard;
+  DoneKeyboard;
+  DoneVideo;
+end.

+ 26 - 0
docs/videoex/vidutil.pp

@@ -0,0 +1,26 @@
+unit vidutil;
+
+Interface
+
+uses
+  video;
+
+Procedure TextOut(X,Y : Word;Const S : String);
+
+Implementation
+  
+Procedure TextOut(X,Y : Word;Const S : String);
+
+Var
+  W,P,I,M : Word;
+
+begin
+  P:=((X-1)+(Y-1)*ScreenWidth);
+  M:=Length(S);
+  If P+M>ScreenWidth*ScreenHeight then
+    M:=ScreenWidth*ScreenHeight-P;
+  For I:=1 to M do
+    VideoBuf^[P+I-1]:=Ord(S[i])+($07 shr 8);
+end;
+  
+end.