home *** CD-ROM | disk | FTP | other *** search
- Program BitMap4;
-
- Uses Dos, Crt;
-
- (* By William L. Mabee, CRNA *)
- (* Releasd To The Public Domain For Any Use Whatsoever *)
- (* Current Revision 4.1 <*> 10-Sept-1988 *)
- (* Next Revision Planned - Storeage 32 Bits In LongInt *)
- (* Please Excuse Lazy Sceen Handling But This Is A Demo Only. *)
-
- Const
- Header = 'Test < Bit Mapping Routine > By : William Mabee';
- MaxBoolean = 32; (* Number Of Bits To Track. *)
- MaxNumber = 2; (* This Number Determined By MaxBoolean Div 16 *)
-
-
- Type
- BooleanElement = Boolean;
- BooleanArray = Array[1..MaxBoolean] Of BooleanElement;
- CharSet = Set Of Char;
-
- Const
- YesNo : CharSet = ['Y','N'];
-
- Var
- More,Response : Char;
- Ans : BooleanArray;
- Blank : String[80];
- Hold : Array[1..MaxNumber] Of Integer;
- Count,
- I : Integer;
-
- Procedure Beep;
- Begin
- Write(^G);
- End;
-
- Procedure Set_TheBits(Var Flag : Integer; TestArray : BooleanArray; StartNum : Byte);
- Var
- Num : LongInt;
- Count : Integer;
- Begin
- Flag := 0; Num := $20480;
- For Count := StartNum To (StartNum + 15) Do
- Begin
- If TestArray[Count] Then Flag := (Flag Or Num);
- Num:= Num Div 2;
- End;
- End;
-
- Procedure Get_TheBits(Flag : Integer; TestArray : BooleanArray; StartNum : Byte);
- Var
- Count : Integer;
- Num : LongInt;
- Begin
- Num := $20480;
- For Count := StartNum To (StartNum + 15) Do
- Begin
- TestArray[Count] := (Flag And Num <> 0);
- Num := Num Div 2;
- End;
- End;
-
- Procedure InvokeCursor(StartScan,StopScan:integer);
- Const
- VideoIO = $10;
- CursorShape = 1;
- Var
- Regs : Registers;
- Begin
- With Regs do
- Begin
- Ch := StartScan;
- Cl := StopScan;
- AH := CursorShape;
- Intr(VideoIO,Regs);
- End;
- End;
-
- Procedure CursorOff;
- Begin
- InvokeCursor(32,0);
- End;
-
- Procedure CursorOn;
- Begin
- Case LastMode of
- Font8x8,
- BW40,
- CO40,
- BW80,
- CO80 : InvokeCursor(6,7);
- Mono : InvokeCursor(12,13);
- End;
- End;
-
- Procedure Set_Up_Screen;
- Begin
- CursorOff;
- Blank := ''; TextColor(Black); TextBackGround(Green);
- ClrScr; WriteLn; WriteLn(Blank:12,Header); WriteLn;
- End;
-
- Procedure RestoreTheScreen;
- Begin
- CursorOff;
- TextColor(LightGray);
- TextBackGround(Black);
- ClrScr;
- CursorOn;
- End;
-
- Procedure ZeroGlobals;
- Begin
- FillChar(Hold,SizeOf(Hold),0);
- FillChar(Ans,SizeOf(Ans),0);
- End;
-
- Procedure GetTheAnswers;
- Begin
- For I := 1 To 32 Do
- Begin
- CursorOff;
- Write(Blank:23,'Question #',I:3,' Answer Y/N : ');
- Repeat
- CursorOn;
- Response := ReadKey;
- Response := UpCase(Response);
- If Response In YesNo Then Else Beep;
- Until Response In YesNo;
- If Response = 'Y' Then Ans[I] := True;
- WriteLn(Response);
- If I Mod 16 = 0 Then Set_Up_Screen;
- End;
- End;
-
- Procedure DisplayTheBits;
- Var
- Col, Row : Byte;
- Message : String[5];
- Begin
- Row := 3; Col := 13; Blank := '';
- For I := 1 To 32 Do
- Begin
- If I Mod 17 = 0 Then
- Begin
- Row := 3; Col := 47;
- End;
- Inc(Row,1);
- GotoXY(Col,Row);
- If Ans[I] = True Then Message := 'True' Else Message := 'False';
- Write('Bit #',I:3,' ',Message);
- End;
- GotoXY(1,20);
- WriteLn;
- WriteLn(Blank:12,'The Integer Hold1 has a value of ',Hold[1]:0,'.');
- WriteLn(Blank:12,'The Integer Hold2 has a value of ',Hold[2]:0,'.');
- WriteLn;
- End;
-
- Procedure ManipulateTheBits;
- Begin
- Set_TheBits(Hold[1],Ans,1);
- Set_TheBits(Hold[2],Ans,17);
- Get_TheBits(Hold[1],Ans,1);
- Get_TheBits(Hold[2],Ans,17);
- CursorOff;
- End;
-
- Procedure DoItAgain;
- Begin
- Write(Blank:12,'Want To Run It Again ? ');
- CursorOn; More := ReadKey; More := Upcase(More);
- End;
-
- Begin { Main Program BitMap4 }
- Repeat
- ZeroGlobals;
- Set_Up_Screen;
- GetTheAnswers;
- ManipulateTheBits;
- DisplayTheBits;
- DoItAgain;
- Until More <> 'Y';
- RestoreTheScreen;
- End. { Main Program BitMap4 }