[Back to FILES SWAG index] [Back to Main SWAG index] [Original]
{
=======================================
INLINE (c) AVC Software
Cardware
Convert a COM file into an INLINE
instruction -or into a binary array-
=======================================
Convert a COM file into a Pascal Inline() Instruction.
Be carefull, the COM file must don't have the end of program code
(Mov Ax, 4C00h followed by Int 21h)
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º º°
º AVONTURE CHRISTOPHE º°
º AVC SOFTWARE º°
º BOULEVARD EDMOND MACHTENS 157/53 º°
º B-1080 BRUXELLES º°
º BELGIQUE º°
º º°
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ°
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
}
Program Com2Inline;
Uses Crt;
Const
Hexa : Array [0..15] of Char =
('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
Var
Ch1 , Ch2 : Byte;
Ch3 , Ch4 : Byte;
Ch : Char;
Function Word2Hex(Number: Word) : String;
Begin
Ch1 := (Number SHR 8) SHR 4;
Ch2 := (Number SHR 8) - (Ch1 SHL 4);
Ch3 := (Number AND $FF) SHR 4;
Ch4 := (Number AND $FF) - (Ch3 SHL 4);
Word2Hex := Hexa[Ch1]+Hexa[Ch2]+Hexa[Ch3]+Hexa[Ch4];
End;
Function Byte2Hex(Number: Byte) : String;
Begin
Ch1 := Number SHR 4;
Ch2 := Number - (Ch1 SHL 4);
Byte2Hex := Hexa[Ch1]+Hexa[Ch2];
End;
Procedure Traitement;
Type Buf = Array[0..65534] of Byte;
Var InFile : File;
OutFile : Text;
Buffer : ^Buf;
Param1, NomF : String;
I, J : Word;
Extension : Boolean;
NLus : Integer;
Begin
I := 0; J := 0; Extension := False;
For i := 1 to Length (Param1) do
If (Param1[i] = '.') then Begin
Extension := True;
J := I;
End;
If Not Extension then Param1 := Param1+'.COM'
Else J := Length(Param1)+1;
NomF := Copy (Param1,1,Length(Param1)-3)+'INL';
Assign (InFile,Param1);
Assign (OutFile,NomF);
Reset (InFile,1);
Rewrite (OutFile);
New (Buffer);
BlockRead (InFile, Buffer^, 65535, NLus);
Close (InFile);
Writeln (OutFile,'{Inline source for ',Param1,' created by AVONTURE Christophe }');
Writeln (OutFile,'');
If ParamCount = 1 then Write (OutFile,'Inline(')
Else Begin
Writeln (OutFile, 'const ',Copy (NomF, 1, Length(NomF)-4),
' : Array [1..',NLus,'] of byte = (');
Write (OutFile,' ');
End;
For I := 0 to NLus-1 do Begin
If (I mod 17 = 16) then Begin
Writeln (OutFile,'');
Write (OutFile,' ');
End;
If ParamCount = 1 then
If Not (I = NLus-1) then Write (OutFile, '$',Byte2Hex(Buffer^[i]),'/')
Else Write (OutFile, '$',Byte2Hex(Buffer^[i]))
Else If Not (I = NLus-1) then Write (OutFile, '$',Byte2Hex(Buffer^[i]),',')
Else Write (OutFile, '$',Byte2Hex(Buffer^[i]));
End;
Write (OutFile,');');
Close (OutFile);
End;
Begin
If ((ParamCount = 1) or (ParamCount = 2)) then Traitement
Else Begin
ClrScr;
GotoXy (0, 2);
Writeln ('');
Writeln ('Inline by AVONTURE Christophe');
Writeln ('-----------------------------');
Writeln ('');
Writeln ('You must specify the name of the COM file as parameter.');
Writeln ('');
Writeln (' Inline Scancode.com or Inline Scancode');
Writeln ('');
Writeln ('A .INL file will be created.');
Writeln ('');
Writeln ('If you type only one parameter, then the result will be like');
Writeln ('');
Writeln (' Inline ($E9/$F2/$00/$20/$20/ ..... ');
Writeln ('');
Writeln ('If you type a second parameter (anything), then the result will be like');
Writeln ('');
Writeln (' Const SCANCODE : Array [1..364] of byte = ');
Writeln (' ($E9,$F2,$00,$20, ..... );');
Writeln ('');
Writeln ('');
TextAttr := 15;
Ch := ReadKey; If Ch = #0 then Ch := ReadKey;
End;
End.
{ -------------------------------- cut here ------------------------------- }
{ Example program }
Uses Crt;
Begin
Inline($EB/$01/$90/$B4/$01/$B5/$20/$CD/$10); {Hide the cursor}
Inline($B8/$03/$00/$CD/$10); {Clear screen}
Writeln ('Demo of Inline code into a Pascal program :'#10#13#10#13);
Writeln ('Press a key, the screen will be erased.');
Inline($EB/$01/$90/$B4/$07/$CD/$21); {ReadKey code}
Inline($EB/$01/$90/$B4/$00/$B0/$03/$CD/$10); {Clear screen}
TextAttr := 158;
Writeln ('These two function - ReadKey & ClrScr - has been coded Inline.'
#10#13#10#13);
Inline($EB/$01/$90/$B4/$07/$CD/$21); {Wait for a key}
Writeln ('This line is blinking. You don't like that. OK!'#10#13#10#13);
Inline($EB/$01/$90/$B4/$07/$CD/$21); {Wait for a key}
{Disable the text blinking; color attribut after 128}
Inline($EB/$01/$90/$B4/$10/$B0/$03/$B3/$00/$CD/$10);
Inline($EB/$01/$90/$B4/$07/$CD/$21); {Wait for a key}
Writeln ('Wow. What a cool effect! Isn''t it!'#10#13#10#13);
Inline($EB/$01/$90/$B4/$07/$CD/$21); {Wait for a key}
{Restore the normal attribut}
Inline($EB/$01/$90/$B4/$10/$B0/$03/$B3/$01/$CD/$10);
Writeln ('Restore the normal attribut.'#10#13#10#13);
Inline($EB/$01/$90/$B4/$07/$CD/$21); {Wait for a key}
End.
{ Severall Inline instruction based on some assembler program I have wrotte.
When you want writte an assembler program for convert it into inline
command, take the following model:
CSEG Segment public
Org 0100h
Assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
Entry: Jmp Begin ; Entry Point
Begin:
; CODE HERE YOUR ASSEMBLER INSTRUCTION
; PLEASE READ: NEVER CODE A RET OR IRET INSTRUCTION!!!!!!
Ret <=== NO!!!!
CSeg Ends
End Entry
For example, the code for initialize the 80*25 video mode will be the
following:
CSEG Segment public
Org 0100h
Assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
Entry: Jmp Begin ; Entry Point
Begin: Mov Ax, 0003h
Int 10h
CSeg Ends
End Entry
You can compile this code into a COM file and then, launch the Inline program
for convert it into an Inline instruction. }
{Inline source for CEPARTI.COM created at 18:0:6 by AVC Software, Inc.}
{Make a sound with the speaker}
Inline($EB/$01/$90/$BA/$88/$13/$BB/$64/$00/$B0/$B6/$E6/$43/$8B/$C3/$E6/
$42/$8A/$C4/$E6/$42/$E4/$61/$0C/$03/$E6/$61/$43/$B9/$90/$01/$E2/$FE/
$4A/$75/$E9/$E4/$61/$24/$FC/$E6/$61/$BA/$88/$13/$BB/$EC/$13/$B0/$B6/
$E6/$43/$8B/$C3/$E6/$42/$8A/$C4/$E6/$42/$E4/$61/$0C/$03/$E6/$61/$4B/
$B9/$90/$01/$E2/$FE/$4A/$75/$E9/$E4/$61/$24/$FC/$E6/$61/$B8/$00/$4C/
$CD/$21/$4D/$73/$44/$6F/$73);
{Inline source for CURSOFF.COM created at 14:34:48 by AVC Software, Inc.}
{Hide the cursor}
Inline($EB/$01/$90/$B4/$01/$B5/$20/$CD/$10);
{Inline source for CURSON.COM created at 14:34:54 by AVC Software, Inc.}
{Show the cursor}
Inline($EB/$01/$90/$B4/$01/$B1/$07/$B5/$06/$CD/$10);
{Inline source for INITMODE.COM created at 14:35:15 by AVC Software, Inc.}
{initialize a video mode}
Inline($B8/Mode/0/$CD/$10);
{Inline source for READKEY.COM created at 15:56:46 by AVC Software, Inc.}
{ReadKey}
Inline($EB/$01/$90/$B4/$07/$CD/$21);
{Inline source for RESETFON.COM created at 13:2:22 by AVC Software, Inc.}
{Restore the Ascii font}
Inline($EB/$01/$90/$B8/$04/$11/$B3/$00/$CD/$10/$B8/$04/$11/$B3/$01/$CD/
$10);
{Inline source for TXTCLIF.COM created at 15:36:36 by AVC Software, Inc.}
{Disable the text blinking}
Inline($EB/$01/$90/$B4/$10/$B0/$03/$B3/$00/$CD/$10);
{Inline source for TXTCLIT.COM created at 15:36:44 by AVC Software, Inc.}
{Enable the text blinking}
Inline($EB/$01/$90/$B4/$10/$B0/$03/$B3/$01/$CD/$10);
[Back to FILES SWAG index] [Back to Main SWAG index] [Original]