[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]