Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Sign In with Facebook Sign In with Google Sign In with OpenID

Categories

We have migrated to a new platform! Please note that you will need to reset your password to log in (your credentials are still in-tact though). Please contact lee@programmersheaven.com if you have questions.
Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Color Images in Pascal

NinthAngleNinthAngle Posts: 98Member
Hi,
Im trying to modify a program I wrote in pascal that displays images using Graphix($13). At the moment all the pictures it shows are black and white. Can I change the program to display COLOR bmp images?

regards,
NA
«1

Comments

  • Phat NatPhat Nat Posts: 757Member
    [b][red]This message was edited by Phat Nat at 2006-6-19 17:39:45[/red][/b][hr]
    : Hi,
    : Im trying to modify a program I wrote in pascal that displays images using Graphix($13). At the moment all the pictures it shows are black and white. Can I change the program to display COLOR bmp images?
    :
    : regards,
    : NA
    :

    What unit are you using for displaying the BMPs? It sounds like you are using my unit.
    If you are using the ones that I wrote (SHOW_BMP.PAS & GRAPHICS.PAS), then if you are using 24-bit BMPs they will show as B&W if GRAYSCALE is set to true. Depending on the version you are using, it may not support color. I have an updated one that will display 24-bit BMPs in 256 color mode properly.

    If you are using SHOW_BMP.PAS, then to see if it will do color BMPs, check below the Mode listing at the top. Right below [b]Mode1280x1024x24 = $11B;[/b] should be a line that says [b]Grayscale : Boolean = False;[/b] right above [b]MaxPal = 215;[/b]
    If not, you have an old version. Post back and I will post the new version.

    Phat Nat
  • Phat NatPhat Nat Posts: 757Member
    [b][red]This message was edited by Phat Nat at 2006-6-27 17:54:16[/red][/b][hr]
    Looking through I see that you were using my unit many posts ago, so I will assume you still are. Here is the newest version:

    http://www.programmersheaven.com/search/download.asp?FileID=47108

    Phat Nat







  • Phat NatPhat Nat Posts: 757Member
    [b][red]This message was edited by Phat Nat at 2006-6-27 17:55:0[/red][/b][hr]
    The link to the full file is now:

    http://www.programmersheaven.com/search/download.asp?FileID=47108

    Phat Nat

  • zibadianzibadian Posts: 6,349Member
    : Looking through I see that you were using my unit many posts ago, so I will assume you still are. Here is the newest version:
    : It is too long of a post, so I will post this half, then the second half.
    : [code]
    : (***************************************************************************)
    : (* SHOW_BMP Version 0.8 *)
    : (* Developed by Phat Nat (nathanmcleod@icqmail.com) *)
    : (* Latest Changes Include: *)
    : (* + Added Color Support for 24-bit images in 8-bit mode *)
    : (* + Improved display of 8-bit images in 24/32-bit modes *)
    : (* + Added VESA modes listing for use with the Graphix() procedure *)
    : (* + Added version listing *)
    : (***************************************************************************)
    : UNIT Show_Bmp;
    :
    : INTERFACE
    :
    : USES Crt;
    :
    : CONST
    : VGA = $A000; { Used for direct screen display of images }
    : { List of basic available VESA modes }
    : Mode320x200x8 = $13;
    : Mode320x200x15 = $10D;
    : Mode320x200x16 = $10E;
    : Mode320x200x24 = $10F;
    :
    : Mode640x400x8 = $100;
    :
    : Mode640x480x1 = $11;
    : Mode640x480x4 = $12;
    : Mode640x480x8 = $101;
    : Mode640x480x15 = $110;
    : Mode640x480x16 = $111;
    : Mode640x480x24 = $112;
    :
    : Mode800x600x4 = $102;
    : Mode800x600x8 = $103;
    : Mode800x600x15 = $113;
    : Mode800x600x16 = $114;
    : Mode800x600x24 = $115;
    :
    : Mode1024x768x4 = $104;
    : Mode1024x768x8 = $105;
    : Mode1024x768x15 = $116;
    : Mode1024x768x16 = $117;
    : Mode1024x768x24 = $118;
    :
    : Mode1280x1024x4 = $106;
    : Mode1280x1024x8 = $107;
    : Mode1280x1024x15 = $119;
    : Mode1280x1024x16 = $11A;
    : Mode1280x1024x24 = $11B;
    :
    : { Set to TRUE to display 8-bit Images in B&W in 24/32-Bit modes }
    : GrayScale : Boolean = False;
    :
    :
    : MaxPal = 215;
    : DefaultPal : Array[0..MaxPal,0..2] Of Byte =
    : (($00,$00,$00),($33,$00,$00),($66,$00,$00),($99,$00,$00),($CC,$00,$00),($FF,$00,$00),
    : ($00,$00,$33),($33,$00,$33),($66,$00,$33),($99,$00,$33),($CC,$00,$33),($FF,$00,$33),
    : ($00,$00,$66),($33,$00,$66),($66,$00,$66),($99,$00,$66),($CC,$00,$66),($FF,$00,$66),
    : ($00,$00,$99),($33,$00,$99),($66,$00,$99),($99,$00,$99),($CC,$00,$99),($FF,$00,$99),
    : ($00,$00,$CC),($33,$00,$CC),($66,$00,$CC),($99,$00,$CC),($CC,$00,$CC),($FF,$00,$CC),
    : ($00,$00,$FF),($33,$00,$FF),($66,$00,$FF),($99,$00,$FF),($CC,$00,$FF),($FF,$00,$FF),
    : ($00,$33,$00),($33,$33,$00),($66,$33,$00),($99,$33,$00),($CC,$33,$00),($FF,$33,$00),
    : ($00,$33,$33),($33,$33,$33),($66,$33,$33),($99,$33,$33),($CC,$33,$33),($FF,$33,$33),
    : ($00,$33,$66),($33,$33,$66),($66,$33,$66),($99,$33,$66),($CC,$33,$66),($FF,$33,$66),
    : ($00,$33,$99),($33,$33,$99),($66,$33,$99),($99,$33,$99),($CC,$33,$99),($FF,$33,$99),
    : ($00,$33,$CC),($33,$33,$CC),($66,$33,$CC),($99,$33,$CC),($CC,$33,$CC),($FF,$33,$CC),
    : ($00,$33,$FF),($33,$33,$FF),($66,$33,$FF),($99,$33,$FF),($CC,$33,$FF),($FF,$33,$FF),
    : ($00,$66,$00),($33,$66,$00),($66,$66,$00),($99,$66,$00),($CC,$66,$00),($FF,$66,$00),
    : ($00,$66,$33),($33,$66,$33),($66,$66,$33),($99,$66,$33),($CC,$66,$33),($FF,$66,$33),
    : ($00,$66,$66),($33,$66,$66),($66,$66,$66),($99,$66,$66),($CC,$66,$66),($FF,$66,$66),
    : ($00,$66,$99),($33,$66,$99),($66,$66,$99),($99,$66,$99),($CC,$66,$99),($FF,$66,$99),
    : ($00,$66,$CC),($33,$66,$CC),($66,$66,$CC),($99,$66,$CC),($CC,$66,$CC),($FF,$66,$CC),
    : ($00,$66,$FF),($33,$66,$FF),($66,$66,$FF),($99,$66,$FF),($CC,$66,$FF),($FF,$66,$FF),
    : ($00,$99,$00),($33,$99,$00),($66,$99,$00),($99,$99,$00),($CC,$99,$00),($FF,$99,$00),
    : ($00,$99,$33),($33,$99,$33),($66,$99,$33),($99,$99,$33),($CC,$99,$33),($FF,$99,$33),
    : ($00,$99,$66),($33,$99,$66),($66,$99,$66),($99,$99,$66),($CC,$99,$66),($FF,$99,$66),
    : ($00,$99,$99),($33,$99,$99),($66,$99,$99),($99,$99,$99),($CC,$99,$99),($FF,$99,$99),
    : ($00,$99,$CC),($33,$99,$CC),($66,$99,$CC),($99,$99,$CC),($CC,$99,$CC),($FF,$99,$CC),
    : ($00,$99,$FF),($33,$99,$FF),($66,$99,$FF),($99,$99,$FF),($CC,$99,$FF),($FF,$99,$FF),
    : ($00,$CC,$00),($33,$CC,$00),($66,$CC,$00),($99,$CC,$00),($CC,$CC,$00),($FF,$CC,$00),
    : ($00,$CC,$33),($33,$CC,$33),($66,$CC,$33),($99,$CC,$33),($CC,$CC,$33),($FF,$CC,$33),
    : ($00,$CC,$66),($33,$CC,$66),($66,$CC,$66),($99,$CC,$66),($CC,$CC,$66),($FF,$CC,$66),
    : ($00,$CC,$99),($33,$CC,$99),($66,$CC,$99),($99,$CC,$99),($CC,$CC,$99),($FF,$CC,$99),
    : ($00,$CC,$CC),($33,$CC,$CC),($66,$CC,$CC),($99,$CC,$CC),($CC,$CC,$CC),($FF,$CC,$CC),
    : ($00,$CC,$FF),($33,$CC,$FF),($66,$CC,$FF),($99,$CC,$FF),($CC,$CC,$FF),($FF,$CC,$FF),
    : ($00,$FF,$00),($33,$FF,$00),($66,$FF,$00),($99,$FF,$00),($CC,$FF,$00),($FF,$FF,$00),
    : ($00,$FF,$33),($33,$FF,$33),($66,$FF,$33),($99,$FF,$33),($CC,$FF,$33),($FF,$FF,$33),
    : ($00,$FF,$66),($33,$FF,$66),($66,$FF,$66),($99,$FF,$66),($CC,$FF,$66),($FF,$FF,$66),
    : ($00,$FF,$99),($33,$FF,$99),($66,$FF,$99),($99,$FF,$99),($CC,$FF,$99),($FF,$FF,$99),
    : ($00,$FF,$CC),($33,$FF,$CC),($66,$FF,$CC),($99,$FF,$CC),($CC,$FF,$CC),($FF,$FF,$CC),
    : ($00,$FF,$FF),($33,$FF,$FF),($66,$FF,$FF),($99,$FF,$FF),($CC,$FF,$FF),($FF,$FF,$FF));
    :
    : TYPE
    : BMPHeaderRec = record
    : Identifier : Array[0..1] Of Char;
    : Size : LongInt;
    : Reserved : LongInt;
    : BitMapOffset : LongInt;
    : CheckType : LongInt;
    : Width : LongInt;
    : Height : LongInt;
    : Planes : Word;
    : Bits : Word;
    : Compression : LongInt;
    : ImageSize : LongInt;
    : XPels : LongInt;
    : YPels : LongInt;
    : ColorUsed : LongInt;
    : ColorImportant : LongInt;
    : End;
    :
    : InfoBlock = record
    : Valid : Boolean;
    : Cmp : ShortInt;
    : BMPHeader : BMPHeaderRec;
    : END;
    :
    : ColorType = record
    : Blue : Byte;
    : Green : Byte;
    : Red : Byte;
    : Index : Integer;
    : END;
    :
    : HiColorType = record
    : Blue : Byte;
    : Green : Byte;
    : Red : Byte;
    : END;
    :
    : VAR
    : ScreenH : Integer;
    : ScreenW : Integer;
    : BPP : Byte;
    :
    : PROCEDURE Graphix(Mode : Word);
    : PROCEDURE SetTextMode;
    : PROCEDURE SetPal(Num : Byte;Red, Green, Blue : Byte);
    : PROCEDURE GetPal(Num : Byte;VAR Red, Green, Blue : Byte);
    : PROCEDURE GetPixel(X,Y : Integer;VAR Color : ColorType);
    : PROCEDURE PutPixel(X,Y : Integer;Color, ClearColor : ColorType; Where : Word);
    : FUNCTION GetBMPInfo(Name : String; VAR Info : InfoBlock) : Boolean;
    : PROCEDURE ShowBMPInfo(Info : InfoBlock);
    : FUNCTION ShowBMP(StartX, StartY : Integer; Name : String; DoColors : Boolean; Clear : ColorType; Where : Word) : Boolean;
    :
    : IMPLEMENTATION
    :
    : CONST
    : Header : array[1..2] Of Char = 'BM';
    : PalCount = 255;
    : BI_RGB = 0;
    : BI_RLE8 = 1;
    : BI_RLE4 = 2;
    :
    : VAR
    : Colors : Array[0..255,1..4] Of Byte;
    : C : Char;
    : CA : Array[0..7] Of Boolean;
    : CA2 : Array[1..3] Of Byte;
    : CurrentMode : Word;
    : CurrentBlock : Byte;
    : Red, Blue, Green : Byte;
    : Temp : Byte;
    : Temp2 : Array[1..6] Of Integer;
    : Temp3 : Integer;
    : Temp4 : LongInt;
    : F : File;
    : S2 : Array[1..2] Of Char;
    : Junk : Array[0..10000] Of Char;
    : X, X2, Y, Y2, Z : Integer;
    :
    : PROCEDURE Graphix(Mode : Word);
    : Begin
    : ASM
    : Cmp Mode, $FF
    : Jg @VESA
    : Mov Ax, Mode
    : INT 10h
    : Mov ScreenW, 320
    : Mov ScreenH, 200
    : Mov BPP, 8
    : @MT1:
    : Cmp Mode, $11
    : Jne @MT2
    : Mov ScreenW, 640
    : Mov ScreenH, 480
    : Mov BPP, 1
    : @MT2:
    : Cmp Mode, $12
    : Jne @MT3
    : Mov ScreenW, 640
    : Mov ScreenH, 480
    : Mov BPP, 4
    : @MT3:
    : Cmp Mode, $13
    : Jne @MT4
    : Mov ScreenW, 320
    : Mov ScreenH, 200
    : Mov BPP, 8
    : @MT4:
    : Jmp @End
    : @VESA:
    : Mov Ax, $4F02
    : Mov Bx, Mode
    : INT 10h
    : @VMT01:
    : Cmp Mode, $101
    : Jne @VMT0F
    : Mov ScreenW, 640
    : Mov ScreenH, 480
    : Mov BPP, 8
    : @VMT0F:
    : Cmp Mode, $10F
    : Jne @VMT10
    : Mov ScreenW, 320
    : Mov ScreenH, 200
    : Mov BPP, 32
    : @VMT10:
    : Cmp Mode, $110
    : Jne @VMT11
    : Mov ScreenW, 640
    : Mov ScreenH, 480
    : Mov BPP, 16
    : @VMT11:
    : Cmp Mode, $111
    : Jne @VMT12
    : Mov ScreenW, 640
    : Mov ScreenH, 480
    : Mov BPP, 16
    : @VMT12:
    : Cmp Mode, $112
    : Jne @VMT15
    : Mov ScreenW, 640
    : Mov ScreenH, 480
    : Mov BPP, 32
    : @VMT15:
    : Cmp Mode, $115
    : Jne @VMT5
    : Mov ScreenW, 800
    : Mov ScreenH, 600
    : Mov BPP, 32
    : @VMT5:
    : @End:
    : End;
    : CurrentMode := Mode;
    : End;
    :
    : PROCEDURE SetTextMode; assembler;
    : ASM
    : Mov Ax, $0003
    : INT 10h
    : Mov ScreenW, 80
    : Mov ScreenH, 25
    : End;
    :
    : PROCEDURE SetPal(Num : Byte;Red, Green, Blue : Byte);
    : Begin
    : Port[$3c8] := Num;
    : Port[$3c9] := Red;
    : Port[$3c9] := Green;
    : Port[$3c9] := Blue;
    : End;
    :
    : PROCEDURE GetPal(Num : Byte;VAR Red, Green, Blue : Byte);
    : Begin
    : Port[$3c7] := Num;
    : Red := Port[$3c9];
    : Green := Port[$3c9];
    : Blue := Port[$3c9];
    : End;
    :
    : PROCEDURE SetBlock(X,Y : Integer);
    : Begin
    : Temp := (((LONGINT(Y)*ScreenW*(BPP Shr 3)+X)) Shr 16);
    : If CurrentBlock <> Temp Then
    : Begin
    : ASM
    : Mov Ax, $4f05
    : Xor Bh, Bh
    : Mov Dl, Temp
    : Int $10
    : END;
    : CurrentBlock := Temp;
    : End;
    : End;
    : [/code]
    :
    : Phat Nat
    :
    :
    Perhaps it was better to place the code in the codepedia and post the link to it. That way you didn't need to split it into 2 halves.
  • NinthAngleNinthAngle Posts: 98Member

    :
    : If you are using SHOW_BMP.PAS, then to see if it will do color BMPs, check below the Mode listing at the top. Right below [b]Mode1280x1024x24 = $11B;[/b] should be a line that says [b]Grayscale : Boolean = False;[/b] right above [b]MaxPal = 215;[/b]
    : If not, you have an old version. Post back and I will post the new version.
    :
    : Phat Nat
    :

    I am using the SHOW_BMP.PAS unit. There is nothing like [b]Grayscale : Boolean = False;[/b] right above [b]MaxPal = 215;[/b] below [b]Mode1280x1024x24 = $11B;[/b]. So I guess Im using the old version. Ill try and use the new unit you posted...
    thanks!
    na
  • NinthAngleNinthAngle Posts: 98Member
    : Here is the second half. Sorry for the split.
    : [code]
    : PROCEDURE GetPixel(X,Y : Integer;VAR Color : ColorType);
    : Begin
    : If (X < 0) or (Y < 0) or (X >= ScreenW) or (Y >= ScreenH) Then Exit;
    : With Color Do
    : Begin
    : If BPP <= 8 Then
    : Begin
    : SetBlock(X*(BPP Shr 3),Y);
    : Index := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)) - Temp Shl 16]
    : End
    : ELSE
    : Begin
    : SetBlock(X*(BPP Shr 3),Y);
    : Blue := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)+0) - Temp Shl 16];
    : SetBlock(X*(BPP Shr 3)+1,Y);
    : Green := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)+1) - Temp Shl 16];
    : SetBlock(X*(BPP Shr 3)+2,Y);
    : Red := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)+2) - Temp Shl 16];
    : Index := -1;
    : End;
    : End;
    : End;
    :
    : PROCEDURE PutPixel(X,Y : Integer;Color, ClearColor : ColorType; Where : Word);
    : VAR Z : Byte;
    : Begin
    : If (X < 0) or (Y < 0) or (X >= ScreenW) or (Y >= ScreenH) Then Exit;
    : With Color Do
    : Begin
    : If BPP <= 8 Then
    : Begin
    : If Color.Index = ClearColor.Index Then Exit;
    : Z := BPP Shr 3;
    : SetBlock(X*Integer(Z),Y);
    : Mem[Where:((X+Y*ScreenW)*Integer(Z)) - (CurrentBlock Shl 16)] := Index;
    : End
    : ELSE
    : If (Color.Red = ClearColor.Red) AND
    : (Color.Green = ClearColor.Green) AND
    : (Color.Blue = ClearColor.Blue) Then Exit
    : ELSE
    : If Index = -1 Then
    : Begin
    : Case BPP Of
    : 16 : Begin
    : SetBlock(X*2,Y);
    : Mem[Where:((X+Y*ScreenW)*2+0) - CurrentBlock Shl 16] :=
    : (Blue Shr 3) AND 31 + ((Green Shr 3) Shl 7) AND 224;
    : SetBlock(X*2+1,Y);
    : Mem[Where:((X+Y*ScreenW)*2+1) - CurrentBlock Shl 16] :=
    : (((Green Shr 3) Shr 2) AND 7) + (((RED Shr 3) Shl 3) AND 248);
    : End;
    : 24,
    : 32 : Begin
    : SetBlock(X*(BPP Shr 3)+0,Y);
    : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+0) - CurrentBlock Shl 16] := Blue;
    : SetBlock(X*(BPP Shr 3)+1,Y);
    : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+1) - CurrentBlock Shl 16] := Green;
    : SetBlock(X*(BPP Shr 3)+2,Y);
    : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+2) - CurrentBlock Shl 16] := Red;
    : End;
    : End;
    : End
    : ELSE
    : Begin
    : Color.Blue := Colors[Index,1];
    : Color.Green := Colors[Index,2];
    : Color.Red := Colors[Index,3];
    : SetBlock(X*(BPP Shr 3),Y);
    : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+0) - CurrentBlock Shl 16] := Blue;
    : SetBlock(X*(BPP Shr 3)+1,Y);
    : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+1) - CurrentBlock Shl 16] := Green;
    : SetBlock(X*(BPP Shr 3)+2,Y);
    : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+2) - CurrentBlock Shl 16] := Red;
    : End;
    : End;
    : End;
    :
    : FUNCTION GetBMPInfo(Name : String; VAR Info : InfoBlock) : Boolean;
    : VAR Final : Boolean;
    : Begin
    : GetBMPInfo := False;
    : Assign(F, Name);{$I-}Reset(F,1);{$I+}
    : If IOResult <> 0 Then Exit;
    : BlockRead(F, Info.BMPHeader, SizeOf(Info.BMPHeader));
    :
    : Info.Valid := Info.BMPHeader.Identifier = Header;
    : Final := Info.Valid;
    :
    : Info.Cmp := Info.BMPHeader.Compression;
    : If Info.Cmp In[0] Then Final := True;
    :
    : Close(F);
    : GetBMPInfo := True;
    : End;
    :
    : PROCEDURE ShowBMPInfo(Info : InfoBlock);
    : Begin
    : With Info.BMPHeader Do
    : Begin
    : GotoXY(21, 1);WriteLn('Size = ',Size);
    : GotoXY(21, 2);WriteLn('BitMapOffset= ',BitMapOffset);
    : GotoXY(21, 3);WriteLn('Type = ',CheckType);
    : GotoXY(21, 4);WriteLn('Width = ',Width);
    : GotoXY(21, 5);WriteLn('Height = ',Height);
    : GotoXY(21, 6);WriteLn('Bits = ',ORD(Bits));
    : GotoXY(21, 7);WriteLn('Planes = ',ORD(Planes));
    : GotoXY(21, 8);WriteLn('FileSize = ',ImageSize);
    : GotoXY(21, 9);WriteLn('RealSize = ',Width*Height);
    : GotoXY(21,10);WriteLn('XPelsPerMet = ',XPels);
    : GotoXY(21,11);WriteLn('YPelsPerMet = ',YPels);
    : GotoXY(21,12);WriteLn('Color Used = ',ColorUsed);
    : GotoXY(21,13);WriteLn('Color Imp. = ',ColorImportant);
    : End;
    : End;
    :
    : FUNCTION ShowBMP(StartX, StartY : Integer; Name : String; DoColors : Boolean; Clear : ColorType; Where : Word) : Boolean;
    : VAR
    : Info : InfoBlock;
    : Color : ColorType;
    : Begin
    : If GetBMPInfo(Name,Info) = False Then
    : Begin
    : ShowBMP := False;
    : Exit;
    : End
    : ELSE ShowBMP := True;
    : Assign(F, Name);Reset(F,1);
    : BlockRead(F, Info.BMPHeader, SizeOf(Info.BMPHeader));
    :
    : Reset(F,1);
    : BlockRead(F, Junk, 14);
    : BlockRead(F, Junk, Info.BMPHeader.CheckType);
    : With Info.BMPHeader Do
    : If Bits = 1 Then
    : Begin
    : BlockRead(F, Colors[0], 8);
    : If DoColors Then
    : For X := 0 to 1 Do
    : SetPal(X*63, Colors[X,3]*63 DIV 255, Colors[X,2]*63 DIV 255, Colors[X,1]*63 DIV 255);
    : Reset(F,1);
    : BlockRead(F, Junk, BitMapOffset);
    : Z := Width SHR 3;
    : While Z MOD(4) <> 0 Do Inc(Z);
    : For Y := 0 to Height-1 Do
    : Begin
    : BlockRead(F, Junk, Z);
    : For X := 0 to Z-1 Do
    : Mem[Where:StartX+X+(StartY+Height-Y)*80] := ORD(Junk[X]);
    : End;
    : End;
    :
    : With Info.BMPHeader Do
    : If Bits = 4 Then
    : Begin
    : BlockRead(F, Colors[0], 64);
    : If DoColors Then
    : For X := 0 to 15 Do
    : SetPal(X, Colors[X,3]*63 DIV 255, Colors[X,2]*63 DIV 255, Colors[X,1]*63 DIV 255);
    : Reset(F,1);
    : BlockRead(F, Junk, BitMapOffset);
    : Z := Width SHR 1;
    : While Z MOD(4) <> 0 Do Inc(Z);
    : For Y := 0 to Height-1 Do
    : Begin
    : BlockRead(F, Junk, Z);
    : For X := 0 to (Width SHR 1)-1 Do
    : Begin
    : If BPP < 8 Then
    : Begin
    : Mem[Where:StartX+X*2+0+(StartY+Height-Y)*ScreenW] := ORD(Junk[X]) SHR 4;
    : Mem[Where:StartX+X*2+1+(StartY+Height-Y)*ScreenW] := ORD(Junk[X]) AND 15;
    : End
    : ELSE
    : Begin
    : Color.Index := ORD(Junk[X]) SHR 4;
    : PutPixel(StartX+X*2,StartY+Y,Color,Clear,Where);
    : Color.Index := ORD(Junk[X]) AND 15;
    : PutPixel(StartX+X*2+1,StartY+Y,Color,Clear,Where);
    : End;
    : End;
    : End;
    : End;
    :
    : With Info.BMPHeader Do
    : If (Bits = 8) Then
    : Begin
    : BlockRead(F, Colors[0], (PalCount+1)*4);
    : If DoColors Then
    : For X := 0 to PalCount Do
    : SetPal(X, Colors[X,3]*62 DIV 255, Colors[X,2]*63 DIV 255, Colors[X,1]*63 DIV 255);
    : Reset(F,1);
    : BlockRead(F, Junk, BitMapOffset);
    : Z := (Width*Bits) SHR 3;
    : While Z MOD(4) <> 0 Do Inc(Z);
    : For Y := Height-1 downto 0 Do
    : Begin
    : BlockRead(F, Junk, Width);
    : For X := 0 to Width-1 do
    : Begin
    : Color.Index := ORD(Junk[X]);
    : PutPixel(StartX+X,StartY+Y,Color,Clear,Where);
    : End;
    : For X := 1 to Z-Width Do BlockRead(F, C, 1);
    : End;
    : End;
    :
    : With Info.BMPHeader Do
    : If (Bits = 24) or (Bits = 32) Then
    : Begin
    : If CurrentMode <= $109 Then
    : Begin
    : If Grayscale Then
    : Begin
    : { GrayScale }
    : For X := 0 to PalCount Do
    : SetPal(X, X*63 DIV 255, X*63 DIV 255, X*63 DIV 255);
    : End
    : ELSE
    : Begin
    : { Color }
    : { Using a Default Palette, closest color using diff in R,G & B }
    : If DoColors Then
    : Begin
    : For X := 0 to MaxPal Do
    : Move(DefaultPal[X],Colors[X],SizeOf(DefaultPal[X]));
    : { Convert default Palette from 8-bit to 6-bit }
    : For X := 0 to MaxPal Do
    : SetPal(X, Colors[X,1]*63 DIV 255,
    : Colors[X,2]*63 DIV 255,
    : Colors[X,3]*63 DIV 255);
    : End;
    : End;
    : End;
    : Reset(F,1);
    : BlockRead(F, Junk, BitMapOffset);
    : Z := (Width*Bits) SHR 3;
    : While Z MOD(4) <> 0 Do Inc(Z);
    : Color.Index := -1; Bits := (Bits shr 3);
    : For Y := Height-1 downto 0 Do
    : Begin
    : BlockRead(F, Junk, Z);
    : Temp4 := 0;
    : For X := 0 to Width-1 do
    : Begin
    : If BPP <= 8 Then
    : Begin
    : If GrayScale Then
    : Color.Index := (Ord(Junk[Temp4+0])+
    : Ord(Junk[Temp4+1])+
    : Ord(Junk[Temp4+2])) DIV 3
    : ELSE
    : Begin
    : Temp2[5] := 0; Temp2[6] := $7FFF;
    : For Temp3 := 0 to MaxPal Do
    : Begin
    : Temp2[1] := Ord(Junk[Temp4+0])-(Colors[Temp3,3]);
    : Temp2[2] := Ord(Junk[Temp4+1])-(Colors[Temp3,2]);
    : Temp2[3] := Ord(Junk[Temp4+2])-(Colors[Temp3,1]);
    : Temp2[4] := (Abs(Temp2[1])+Abs(Temp2[2])+Abs(Temp2[3]));
    : If Temp2[4] <= Temp2[6] Then
    : Begin
    : Temp2[5] := Temp3;
    : Temp2[6] := Temp2[4];
    : End;
    : End;
    : Color.Index := Temp2[5];
    : End;
    : End
    : ELSE
    : Begin
    : Color.Blue := Ord(Junk[Temp4+0]);
    : Color.Green := Ord(Junk[Temp4+1]);
    : Color.Red := Ord(Junk[Temp4+2]);
    : End;
    : PutPixel(StartX+X,StartY+Y,Color,Clear,Where);
    : Temp4 := Temp4+Bits; { Faster than a multiply }
    : End;
    : If KeyPressed Then Begin While KeyPressed Do ReadKey; Break; End;
    : End;
    : End;
    : Close(F);
    : End;
    :
    : End.
    : [/code]
    :
    : Phat Nat
    :
    :


    I copied the code into notepad and saved the whole thing as SHOW_BMP.TPU in the UNITS directory. However, the program that uses the unit now doesnt recognise this file. How do I save notepad files as *.TPU?

    thank you SO much! :)
    na
  • zibadianzibadian Posts: 6,349Member
    : : Here is the second half. Sorry for the split.
    : : [code]
    : : PROCEDURE GetPixel(X,Y : Integer;VAR Color : ColorType);
    : : Begin
    : : If (X < 0) or (Y < 0) or (X >= ScreenW) or (Y >= ScreenH) Then Exit;
    : : With Color Do
    : : Begin
    : : If BPP <= 8 Then
    : : Begin
    : : SetBlock(X*(BPP Shr 3),Y);
    : : Index := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)) - Temp Shl 16]
    : : End
    : : ELSE
    : : Begin
    : : SetBlock(X*(BPP Shr 3),Y);
    : : Blue := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)+0) - Temp Shl 16];
    : : SetBlock(X*(BPP Shr 3)+1,Y);
    : : Green := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)+1) - Temp Shl 16];
    : : SetBlock(X*(BPP Shr 3)+2,Y);
    : : Red := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)+2) - Temp Shl 16];
    : : Index := -1;
    : : End;
    : : End;
    : : End;
    : :
    : : PROCEDURE PutPixel(X,Y : Integer;Color, ClearColor : ColorType; Where : Word);
    : : VAR Z : Byte;
    : : Begin
    : : If (X < 0) or (Y < 0) or (X >= ScreenW) or (Y >= ScreenH) Then Exit;
    : : With Color Do
    : : Begin
    : : If BPP <= 8 Then
    : : Begin
    : : If Color.Index = ClearColor.Index Then Exit;
    : : Z := BPP Shr 3;
    : : SetBlock(X*Integer(Z),Y);
    : : Mem[Where:((X+Y*ScreenW)*Integer(Z)) - (CurrentBlock Shl 16)] := Index;
    : : End
    : : ELSE
    : : If (Color.Red = ClearColor.Red) AND
    : : (Color.Green = ClearColor.Green) AND
    : : (Color.Blue = ClearColor.Blue) Then Exit
    : : ELSE
    : : If Index = -1 Then
    : : Begin
    : : Case BPP Of
    : : 16 : Begin
    : : SetBlock(X*2,Y);
    : : Mem[Where:((X+Y*ScreenW)*2+0) - CurrentBlock Shl 16] :=
    : : (Blue Shr 3) AND 31 + ((Green Shr 3) Shl 7) AND 224;
    : : SetBlock(X*2+1,Y);
    : : Mem[Where:((X+Y*ScreenW)*2+1) - CurrentBlock Shl 16] :=
    : : (((Green Shr 3) Shr 2) AND 7) + (((RED Shr 3) Shl 3) AND 248);
    : : End;
    : : 24,
    : : 32 : Begin
    : : SetBlock(X*(BPP Shr 3)+0,Y);
    : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+0) - CurrentBlock Shl 16] := Blue;
    : : SetBlock(X*(BPP Shr 3)+1,Y);
    : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+1) - CurrentBlock Shl 16] := Green;
    : : SetBlock(X*(BPP Shr 3)+2,Y);
    : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+2) - CurrentBlock Shl 16] := Red;
    : : End;
    : : End;
    : : End
    : : ELSE
    : : Begin
    : : Color.Blue := Colors[Index,1];
    : : Color.Green := Colors[Index,2];
    : : Color.Red := Colors[Index,3];
    : : SetBlock(X*(BPP Shr 3),Y);
    : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+0) - CurrentBlock Shl 16] := Blue;
    : : SetBlock(X*(BPP Shr 3)+1,Y);
    : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+1) - CurrentBlock Shl 16] := Green;
    : : SetBlock(X*(BPP Shr 3)+2,Y);
    : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+2) - CurrentBlock Shl 16] := Red;
    : : End;
    : : End;
    : : End;
    : :
    : : FUNCTION GetBMPInfo(Name : String; VAR Info : InfoBlock) : Boolean;
    : : VAR Final : Boolean;
    : : Begin
    : : GetBMPInfo := False;
    : : Assign(F, Name);{$I-}Reset(F,1);{$I+}
    : : If IOResult <> 0 Then Exit;
    : : BlockRead(F, Info.BMPHeader, SizeOf(Info.BMPHeader));
    : :
    : : Info.Valid := Info.BMPHeader.Identifier = Header;
    : : Final := Info.Valid;
    : :
    : : Info.Cmp := Info.BMPHeader.Compression;
    : : If Info.Cmp In[0] Then Final := True;
    : :
    : : Close(F);
    : : GetBMPInfo := True;
    : : End;
    : :
    : : PROCEDURE ShowBMPInfo(Info : InfoBlock);
    : : Begin
    : : With Info.BMPHeader Do
    : : Begin
    : : GotoXY(21, 1);WriteLn('Size = ',Size);
    : : GotoXY(21, 2);WriteLn('BitMapOffset= ',BitMapOffset);
    : : GotoXY(21, 3);WriteLn('Type = ',CheckType);
    : : GotoXY(21, 4);WriteLn('Width = ',Width);
    : : GotoXY(21, 5);WriteLn('Height = ',Height);
    : : GotoXY(21, 6);WriteLn('Bits = ',ORD(Bits));
    : : GotoXY(21, 7);WriteLn('Planes = ',ORD(Planes));
    : : GotoXY(21, 8);WriteLn('FileSize = ',ImageSize);
    : : GotoXY(21, 9);WriteLn('RealSize = ',Width*Height);
    : : GotoXY(21,10);WriteLn('XPelsPerMet = ',XPels);
    : : GotoXY(21,11);WriteLn('YPelsPerMet = ',YPels);
    : : GotoXY(21,12);WriteLn('Color Used = ',ColorUsed);
    : : GotoXY(21,13);WriteLn('Color Imp. = ',ColorImportant);
    : : End;
    : : End;
    : :
    : : FUNCTION ShowBMP(StartX, StartY : Integer; Name : String; DoColors : Boolean; Clear : ColorType; Where : Word) : Boolean;
    : : VAR
    : : Info : InfoBlock;
    : : Color : ColorType;
    : : Begin
    : : If GetBMPInfo(Name,Info) = False Then
    : : Begin
    : : ShowBMP := False;
    : : Exit;
    : : End
    : : ELSE ShowBMP := True;
    : : Assign(F, Name);Reset(F,1);
    : : BlockRead(F, Info.BMPHeader, SizeOf(Info.BMPHeader));
    : :
    : : Reset(F,1);
    : : BlockRead(F, Junk, 14);
    : : BlockRead(F, Junk, Info.BMPHeader.CheckType);
    : : With Info.BMPHeader Do
    : : If Bits = 1 Then
    : : Begin
    : : BlockRead(F, Colors[0], 8);
    : : If DoColors Then
    : : For X := 0 to 1 Do
    : : SetPal(X*63, Colors[X,3]*63 DIV 255, Colors[X,2]*63 DIV 255, Colors[X,1]*63 DIV 255);
    : : Reset(F,1);
    : : BlockRead(F, Junk, BitMapOffset);
    : : Z := Width SHR 3;
    : : While Z MOD(4) <> 0 Do Inc(Z);
    : : For Y := 0 to Height-1 Do
    : : Begin
    : : BlockRead(F, Junk, Z);
    : : For X := 0 to Z-1 Do
    : : Mem[Where:StartX+X+(StartY+Height-Y)*80] := ORD(Junk[X]);
    : : End;
    : : End;
    : :
    : : With Info.BMPHeader Do
    : : If Bits = 4 Then
    : : Begin
    : : BlockRead(F, Colors[0], 64);
    : : If DoColors Then
    : : For X := 0 to 15 Do
    : : SetPal(X, Colors[X,3]*63 DIV 255, Colors[X,2]*63 DIV 255, Colors[X,1]*63 DIV 255);
    : : Reset(F,1);
    : : BlockRead(F, Junk, BitMapOffset);
    : : Z := Width SHR 1;
    : : While Z MOD(4) <> 0 Do Inc(Z);
    : : For Y := 0 to Height-1 Do
    : : Begin
    : : BlockRead(F, Junk, Z);
    : : For X := 0 to (Width SHR 1)-1 Do
    : : Begin
    : : If BPP < 8 Then
    : : Begin
    : : Mem[Where:StartX+X*2+0+(StartY+Height-Y)*ScreenW] := ORD(Junk[X]) SHR 4;
    : : Mem[Where:StartX+X*2+1+(StartY+Height-Y)*ScreenW] := ORD(Junk[X]) AND 15;
    : : End
    : : ELSE
    : : Begin
    : : Color.Index := ORD(Junk[X]) SHR 4;
    : : PutPixel(StartX+X*2,StartY+Y,Color,Clear,Where);
    : : Color.Index := ORD(Junk[X]) AND 15;
    : : PutPixel(StartX+X*2+1,StartY+Y,Color,Clear,Where);
    : : End;
    : : End;
    : : End;
    : : End;
    : :
    : : With Info.BMPHeader Do
    : : If (Bits = 8) Then
    : : Begin
    : : BlockRead(F, Colors[0], (PalCount+1)*4);
    : : If DoColors Then
    : : For X := 0 to PalCount Do
    : : SetPal(X, Colors[X,3]*62 DIV 255, Colors[X,2]*63 DIV 255, Colors[X,1]*63 DIV 255);
    : : Reset(F,1);
    : : BlockRead(F, Junk, BitMapOffset);
    : : Z := (Width*Bits) SHR 3;
    : : While Z MOD(4) <> 0 Do Inc(Z);
    : : For Y := Height-1 downto 0 Do
    : : Begin
    : : BlockRead(F, Junk, Width);
    : : For X := 0 to Width-1 do
    : : Begin
    : : Color.Index := ORD(Junk[X]);
    : : PutPixel(StartX+X,StartY+Y,Color,Clear,Where);
    : : End;
    : : For X := 1 to Z-Width Do BlockRead(F, C, 1);
    : : End;
    : : End;
    : :
    : : With Info.BMPHeader Do
    : : If (Bits = 24) or (Bits = 32) Then
    : : Begin
    : : If CurrentMode <= $109 Then
    : : Begin
    : : If Grayscale Then
    : : Begin
    : : { GrayScale }
    : : For X := 0 to PalCount Do
    : : SetPal(X, X*63 DIV 255, X*63 DIV 255, X*63 DIV 255);
    : : End
    : : ELSE
    : : Begin
    : : { Color }
    : : { Using a Default Palette, closest color using diff in R,G & B }
    : : If DoColors Then
    : : Begin
    : : For X := 0 to MaxPal Do
    : : Move(DefaultPal[X],Colors[X],SizeOf(DefaultPal[X]));
    : : { Convert default Palette from 8-bit to 6-bit }
    : : For X := 0 to MaxPal Do
    : : SetPal(X, Colors[X,1]*63 DIV 255,
    : : Colors[X,2]*63 DIV 255,
    : : Colors[X,3]*63 DIV 255);
    : : End;
    : : End;
    : : End;
    : : Reset(F,1);
    : : BlockRead(F, Junk, BitMapOffset);
    : : Z := (Width*Bits) SHR 3;
    : : While Z MOD(4) <> 0 Do Inc(Z);
    : : Color.Index := -1; Bits := (Bits shr 3);
    : : For Y := Height-1 downto 0 Do
    : : Begin
    : : BlockRead(F, Junk, Z);
    : : Temp4 := 0;
    : : For X := 0 to Width-1 do
    : : Begin
    : : If BPP <= 8 Then
    : : Begin
    : : If GrayScale Then
    : : Color.Index := (Ord(Junk[Temp4+0])+
    : : Ord(Junk[Temp4+1])+
    : : Ord(Junk[Temp4+2])) DIV 3
    : : ELSE
    : : Begin
    : : Temp2[5] := 0; Temp2[6] := $7FFF;
    : : For Temp3 := 0 to MaxPal Do
    : : Begin
    : : Temp2[1] := Ord(Junk[Temp4+0])-(Colors[Temp3,3]);
    : : Temp2[2] := Ord(Junk[Temp4+1])-(Colors[Temp3,2]);
    : : Temp2[3] := Ord(Junk[Temp4+2])-(Colors[Temp3,1]);
    : : Temp2[4] := (Abs(Temp2[1])+Abs(Temp2[2])+Abs(Temp2[3]));
    : : If Temp2[4] <= Temp2[6] Then
    : : Begin
    : : Temp2[5] := Temp3;
    : : Temp2[6] := Temp2[4];
    : : End;
    : : End;
    : : Color.Index := Temp2[5];
    : : End;
    : : End
    : : ELSE
    : : Begin
    : : Color.Blue := Ord(Junk[Temp4+0]);
    : : Color.Green := Ord(Junk[Temp4+1]);
    : : Color.Red := Ord(Junk[Temp4+2]);
    : : End;
    : : PutPixel(StartX+X,StartY+Y,Color,Clear,Where);
    : : Temp4 := Temp4+Bits; { Faster than a multiply }
    : : End;
    : : If KeyPressed Then Begin While KeyPressed Do ReadKey; Break; End;
    : : End;
    : : End;
    : : Close(F);
    : : End;
    : :
    : : End.
    : : [/code]
    : :
    : : Phat Nat
    : :
    : :
    :
    :
    : I copied the code into notepad and saved the whole thing as SHOW_BMP.TPU in the UNITS directory. However, the program that uses the unit now doesnt recognise this file. How do I save notepad files as *.TPU?
    :
    : thank you SO much! :)
    : na
    :
    Save it as a .txt file. Then use the explorer to change the extension (extensions must be visible). Notepad adds .txt automatically.
  • NinthAngleNinthAngle Posts: 98Member
    : : : Here is the second half. Sorry for the split.
    : : : [code]
    : : : PROCEDURE GetPixel(X,Y : Integer;VAR Color : ColorType);
    : : : Begin
    : : : If (X < 0) or (Y < 0) or (X >= ScreenW) or (Y >= ScreenH) Then Exit;
    : : : With Color Do
    : : : Begin
    : : : If BPP <= 8 Then
    : : : Begin
    : : : SetBlock(X*(BPP Shr 3),Y);
    : : : Index := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)) - Temp Shl 16]
    : : : End
    : : : ELSE
    : : : Begin
    : : : SetBlock(X*(BPP Shr 3),Y);
    : : : Blue := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)+0) - Temp Shl 16];
    : : : SetBlock(X*(BPP Shr 3)+1,Y);
    : : : Green := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)+1) - Temp Shl 16];
    : : : SetBlock(X*(BPP Shr 3)+2,Y);
    : : : Red := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)+2) - Temp Shl 16];
    : : : Index := -1;
    : : : End;
    : : : End;
    : : : End;
    : : :
    : : : PROCEDURE PutPixel(X,Y : Integer;Color, ClearColor : ColorType; Where : Word);
    : : : VAR Z : Byte;
    : : : Begin
    : : : If (X < 0) or (Y < 0) or (X >= ScreenW) or (Y >= ScreenH) Then Exit;
    : : : With Color Do
    : : : Begin
    : : : If BPP <= 8 Then
    : : : Begin
    : : : If Color.Index = ClearColor.Index Then Exit;
    : : : Z := BPP Shr 3;
    : : : SetBlock(X*Integer(Z),Y);
    : : : Mem[Where:((X+Y*ScreenW)*Integer(Z)) - (CurrentBlock Shl 16)] := Index;
    : : : End
    : : : ELSE
    : : : If (Color.Red = ClearColor.Red) AND
    : : : (Color.Green = ClearColor.Green) AND
    : : : (Color.Blue = ClearColor.Blue) Then Exit
    : : : ELSE
    : : : If Index = -1 Then
    : : : Begin
    : : : Case BPP Of
    : : : 16 : Begin
    : : : SetBlock(X*2,Y);
    : : : Mem[Where:((X+Y*ScreenW)*2+0) - CurrentBlock Shl 16] :=
    : : : (Blue Shr 3) AND 31 + ((Green Shr 3) Shl 7) AND 224;
    : : : SetBlock(X*2+1,Y);
    : : : Mem[Where:((X+Y*ScreenW)*2+1) - CurrentBlock Shl 16] :=
    : : : (((Green Shr 3) Shr 2) AND 7) + (((RED Shr 3) Shl 3) AND 248);
    : : : End;
    : : : 24,
    : : : 32 : Begin
    : : : SetBlock(X*(BPP Shr 3)+0,Y);
    : : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+0) - CurrentBlock Shl 16] := Blue;
    : : : SetBlock(X*(BPP Shr 3)+1,Y);
    : : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+1) - CurrentBlock Shl 16] := Green;
    : : : SetBlock(X*(BPP Shr 3)+2,Y);
    : : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+2) - CurrentBlock Shl 16] := Red;
    : : : End;
    : : : End;
    : : : End
    : : : ELSE
    : : : Begin
    : : : Color.Blue := Colors[Index,1];
    : : : Color.Green := Colors[Index,2];
    : : : Color.Red := Colors[Index,3];
    : : : SetBlock(X*(BPP Shr 3),Y);
    : : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+0) - CurrentBlock Shl 16] := Blue;
    : : : SetBlock(X*(BPP Shr 3)+1,Y);
    : : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+1) - CurrentBlock Shl 16] := Green;
    : : : SetBlock(X*(BPP Shr 3)+2,Y);
    : : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+2) - CurrentBlock Shl 16] := Red;
    : : : End;
    : : : End;
    : : : End;
    : : :
    : : : FUNCTION GetBMPInfo(Name : String; VAR Info : InfoBlock) : Boolean;
    : : : VAR Final : Boolean;
    : : : Begin
    : : : GetBMPInfo := False;
    : : : Assign(F, Name);{$I-}Reset(F,1);{$I+}
    : : : If IOResult <> 0 Then Exit;
    : : : BlockRead(F, Info.BMPHeader, SizeOf(Info.BMPHeader));
    : : :
    : : : Info.Valid := Info.BMPHeader.Identifier = Header;
    : : : Final := Info.Valid;
    : : :
    : : : Info.Cmp := Info.BMPHeader.Compression;
    : : : If Info.Cmp In[0] Then Final := True;
    : : :
    : : : Close(F);
    : : : GetBMPInfo := True;
    : : : End;
    : : :
    : : : PROCEDURE ShowBMPInfo(Info : InfoBlock);
    : : : Begin
    : : : With Info.BMPHeader Do
    : : : Begin
    : : : GotoXY(21, 1);WriteLn('Size = ',Size);
    : : : GotoXY(21, 2);WriteLn('BitMapOffset= ',BitMapOffset);
    : : : GotoXY(21, 3);WriteLn('Type = ',CheckType);
    : : : GotoXY(21, 4);WriteLn('Width = ',Width);
    : : : GotoXY(21, 5);WriteLn('Height = ',Height);
    : : : GotoXY(21, 6);WriteLn('Bits = ',ORD(Bits));
    : : : GotoXY(21, 7);WriteLn('Planes = ',ORD(Planes));
    : : : GotoXY(21, 8);WriteLn('FileSize = ',ImageSize);
    : : : GotoXY(21, 9);WriteLn('RealSize = ',Width*Height);
    : : : GotoXY(21,10);WriteLn('XPelsPerMet = ',XPels);
    : : : GotoXY(21,11);WriteLn('YPelsPerMet = ',YPels);
    : : : GotoXY(21,12);WriteLn('Color Used = ',ColorUsed);
    : : : GotoXY(21,13);WriteLn('Color Imp. = ',ColorImportant);
    : : : End;
    : : : End;
    : : :
    : : : FUNCTION ShowBMP(StartX, StartY : Integer; Name : String; DoColors : Boolean; Clear : ColorType; Where : Word) : Boolean;
    : : : VAR
    : : : Info : InfoBlock;
    : : : Color : ColorType;
    : : : Begin
    : : : If GetBMPInfo(Name,Info) = False Then
    : : : Begin
    : : : ShowBMP := False;
    : : : Exit;
    : : : End
    : : : ELSE ShowBMP := True;
    : : : Assign(F, Name);Reset(F,1);
    : : : BlockRead(F, Info.BMPHeader, SizeOf(Info.BMPHeader));
    : : :
    : : : Reset(F,1);
    : : : BlockRead(F, Junk, 14);
    : : : BlockRead(F, Junk, Info.BMPHeader.CheckType);
    : : : With Info.BMPHeader Do
    : : : If Bits = 1 Then
    : : : Begin
    : : : BlockRead(F, Colors[0], 8);
    : : : If DoColors Then
    : : : For X := 0 to 1 Do
    : : : SetPal(X*63, Colors[X,3]*63 DIV 255, Colors[X,2]*63 DIV 255, Colors[X,1]*63 DIV 255);
    : : : Reset(F,1);
    : : : BlockRead(F, Junk, BitMapOffset);
    : : : Z := Width SHR 3;
    : : : While Z MOD(4) <> 0 Do Inc(Z);
    : : : For Y := 0 to Height-1 Do
    : : : Begin
    : : : BlockRead(F, Junk, Z);
    : : : For X := 0 to Z-1 Do
    : : : Mem[Where:StartX+X+(StartY+Height-Y)*80] := ORD(Junk[X]);
    : : : End;
    : : : End;
    : : :
    : : : With Info.BMPHeader Do
    : : : If Bits = 4 Then
    : : : Begin
    : : : BlockRead(F, Colors[0], 64);
    : : : If DoColors Then
    : : : For X := 0 to 15 Do
    : : : SetPal(X, Colors[X,3]*63 DIV 255, Colors[X,2]*63 DIV 255, Colors[X,1]*63 DIV 255);
    : : : Reset(F,1);
    : : : BlockRead(F, Junk, BitMapOffset);
    : : : Z := Width SHR 1;
    : : : While Z MOD(4) <> 0 Do Inc(Z);
    : : : For Y := 0 to Height-1 Do
    : : : Begin
    : : : BlockRead(F, Junk, Z);
    : : : For X := 0 to (Width SHR 1)-1 Do
    : : : Begin
    : : : If BPP < 8 Then
    : : : Begin
    : : : Mem[Where:StartX+X*2+0+(StartY+Height-Y)*ScreenW] := ORD(Junk[X]) SHR 4;
    : : : Mem[Where:StartX+X*2+1+(StartY+Height-Y)*ScreenW] := ORD(Junk[X]) AND 15;
    : : : End
    : : : ELSE
    : : : Begin
    : : : Color.Index := ORD(Junk[X]) SHR 4;
    : : : PutPixel(StartX+X*2,StartY+Y,Color,Clear,Where);
    : : : Color.Index := ORD(Junk[X]) AND 15;
    : : : PutPixel(StartX+X*2+1,StartY+Y,Color,Clear,Where);
    : : : End;
    : : : End;
    : : : End;
    : : : End;
    : : :
    : : : With Info.BMPHeader Do
    : : : If (Bits = 8) Then
    : : : Begin
    : : : BlockRead(F, Colors[0], (PalCount+1)*4);
    : : : If DoColors Then
    : : : For X := 0 to PalCount Do
    : : : SetPal(X, Colors[X,3]*62 DIV 255, Colors[X,2]*63 DIV 255, Colors[X,1]*63 DIV 255);
    : : : Reset(F,1);
    : : : BlockRead(F, Junk, BitMapOffset);
    : : : Z := (Width*Bits) SHR 3;
    : : : While Z MOD(4) <> 0 Do Inc(Z);
    : : : For Y := Height-1 downto 0 Do
    : : : Begin
    : : : BlockRead(F, Junk, Width);
    : : : For X := 0 to Width-1 do
    : : : Begin
    : : : Color.Index := ORD(Junk[X]);
    : : : PutPixel(StartX+X,StartY+Y,Color,Clear,Where);
    : : : End;
    : : : For X := 1 to Z-Width Do BlockRead(F, C, 1);
    : : : End;
    : : : End;
    : : :
    : : : With Info.BMPHeader Do
    : : : If (Bits = 24) or (Bits = 32) Then
    : : : Begin
    : : : If CurrentMode <= $109 Then
    : : : Begin
    : : : If Grayscale Then
    : : : Begin
    : : : { GrayScale }
    : : : For X := 0 to PalCount Do
    : : : SetPal(X, X*63 DIV 255, X*63 DIV 255, X*63 DIV 255);
    : : : End
    : : : ELSE
    : : : Begin
    : : : { Color }
    : : : { Using a Default Palette, closest color using diff in R,G & B }
    : : : If DoColors Then
    : : : Begin
    : : : For X := 0 to MaxPal Do
    : : : Move(DefaultPal[X],Colors[X],SizeOf(DefaultPal[X]));
    : : : { Convert default Palette from 8-bit to 6-bit }
    : : : For X := 0 to MaxPal Do
    : : : SetPal(X, Colors[X,1]*63 DIV 255,
    : : : Colors[X,2]*63 DIV 255,
    : : : Colors[X,3]*63 DIV 255);
    : : : End;
    : : : End;
    : : : End;
    : : : Reset(F,1);
    : : : BlockRead(F, Junk, BitMapOffset);
    : : : Z := (Width*Bits) SHR 3;
    : : : While Z MOD(4) <> 0 Do Inc(Z);
    : : : Color.Index := -1; Bits := (Bits shr 3);
    : : : For Y := Height-1 downto 0 Do
    : : : Begin
    : : : BlockRead(F, Junk, Z);
    : : : Temp4 := 0;
    : : : For X := 0 to Width-1 do
    : : : Begin
    : : : If BPP <= 8 Then
    : : : Begin
    : : : If GrayScale Then
    : : : Color.Index := (Ord(Junk[Temp4+0])+
    : : : Ord(Junk[Temp4+1])+
    : : : Ord(Junk[Temp4+2])) DIV 3
    : : : ELSE
    : : : Begin
    : : : Temp2[5] := 0; Temp2[6] := $7FFF;
    : : : For Temp3 := 0 to MaxPal Do
    : : : Begin
    : : : Temp2[1] := Ord(Junk[Temp4+0])-(Colors[Temp3,3]);
    : : : Temp2[2] := Ord(Junk[Temp4+1])-(Colors[Temp3,2]);
    : : : Temp2[3] := Ord(Junk[Temp4+2])-(Colors[Temp3,1]);
    : : : Temp2[4] := (Abs(Temp2[1])+Abs(Temp2[2])+Abs(Temp2[3]));
    : : : If Temp2[4] <= Temp2[6] Then
    : : : Begin
    : : : Temp2[5] := Temp3;
    : : : Temp2[6] := Temp2[4];
    : : : End;
    : : : End;
    : : : Color.Index := Temp2[5];
    : : : End;
    : : : End
    : : : ELSE
    : : : Begin
    : : : Color.Blue := Ord(Junk[Temp4+0]);
    : : : Color.Green := Ord(Junk[Temp4+1]);
    : : : Color.Red := Ord(Junk[Temp4+2]);
    : : : End;
    : : : PutPixel(StartX+X,StartY+Y,Color,Clear,Where);
    : : : Temp4 := Temp4+Bits; { Faster than a multiply }
    : : : End;
    : : : If KeyPressed Then Begin While KeyPressed Do ReadKey; Break; End;
    : : : End;
    : : : End;
    : : : Close(F);
    : : : End;
    : : :
    : : : End.
    : : : [/code]
    : : :
    : : : Phat Nat
    : : :
    : : :
    : :
    : :
    : : I copied the code into notepad and saved the whole thing as SHOW_BMP.TPU in the UNITS directory. However, the program that uses the unit now doesnt recognise this file. How do I save notepad files as *.TPU?
    : :
    : : thank you SO much! :)
    : : na
    : :
    : Save it as a .txt file. Then use the explorer to change the extension (extensions must be visible). Notepad adds .txt automatically.
    :

    This is ther error I get. I dont understand why this is happening seeing as pascal obviously recognizes the file as a TPU..
    Error 72: Unit file format error C:TPUNITSSHOW_BMP.TPU

  • zibadianzibadian Posts: 6,349Member
    : : : : Here is the second half. Sorry for the split.
    : : : : [code]
    : : : : PROCEDURE GetPixel(X,Y : Integer;VAR Color : ColorType);
    : : : : Begin
    : : : : If (X < 0) or (Y < 0) or (X >= ScreenW) or (Y >= ScreenH) Then Exit;
    : : : : With Color Do
    : : : : Begin
    : : : : If BPP <= 8 Then
    : : : : Begin
    : : : : SetBlock(X*(BPP Shr 3),Y);
    : : : : Index := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)) - Temp Shl 16]
    : : : : End
    : : : : ELSE
    : : : : Begin
    : : : : SetBlock(X*(BPP Shr 3),Y);
    : : : : Blue := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)+0) - Temp Shl 16];
    : : : : SetBlock(X*(BPP Shr 3)+1,Y);
    : : : : Green := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)+1) - Temp Shl 16];
    : : : : SetBlock(X*(BPP Shr 3)+2,Y);
    : : : : Red := Mem[$A000:((X+Y*ScreenW)*(BPP Shr 3)+2) - Temp Shl 16];
    : : : : Index := -1;
    : : : : End;
    : : : : End;
    : : : : End;
    : : : :
    : : : : PROCEDURE PutPixel(X,Y : Integer;Color, ClearColor : ColorType; Where : Word);
    : : : : VAR Z : Byte;
    : : : : Begin
    : : : : If (X < 0) or (Y < 0) or (X >= ScreenW) or (Y >= ScreenH) Then Exit;
    : : : : With Color Do
    : : : : Begin
    : : : : If BPP <= 8 Then
    : : : : Begin
    : : : : If Color.Index = ClearColor.Index Then Exit;
    : : : : Z := BPP Shr 3;
    : : : : SetBlock(X*Integer(Z),Y);
    : : : : Mem[Where:((X+Y*ScreenW)*Integer(Z)) - (CurrentBlock Shl 16)] := Index;
    : : : : End
    : : : : ELSE
    : : : : If (Color.Red = ClearColor.Red) AND
    : : : : (Color.Green = ClearColor.Green) AND
    : : : : (Color.Blue = ClearColor.Blue) Then Exit
    : : : : ELSE
    : : : : If Index = -1 Then
    : : : : Begin
    : : : : Case BPP Of
    : : : : 16 : Begin
    : : : : SetBlock(X*2,Y);
    : : : : Mem[Where:((X+Y*ScreenW)*2+0) - CurrentBlock Shl 16] :=
    : : : : (Blue Shr 3) AND 31 + ((Green Shr 3) Shl 7) AND 224;
    : : : : SetBlock(X*2+1,Y);
    : : : : Mem[Where:((X+Y*ScreenW)*2+1) - CurrentBlock Shl 16] :=
    : : : : (((Green Shr 3) Shr 2) AND 7) + (((RED Shr 3) Shl 3) AND 248);
    : : : : End;
    : : : : 24,
    : : : : 32 : Begin
    : : : : SetBlock(X*(BPP Shr 3)+0,Y);
    : : : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+0) - CurrentBlock Shl 16] := Blue;
    : : : : SetBlock(X*(BPP Shr 3)+1,Y);
    : : : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+1) - CurrentBlock Shl 16] := Green;
    : : : : SetBlock(X*(BPP Shr 3)+2,Y);
    : : : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+2) - CurrentBlock Shl 16] := Red;
    : : : : End;
    : : : : End;
    : : : : End
    : : : : ELSE
    : : : : Begin
    : : : : Color.Blue := Colors[Index,1];
    : : : : Color.Green := Colors[Index,2];
    : : : : Color.Red := Colors[Index,3];
    : : : : SetBlock(X*(BPP Shr 3),Y);
    : : : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+0) - CurrentBlock Shl 16] := Blue;
    : : : : SetBlock(X*(BPP Shr 3)+1,Y);
    : : : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+1) - CurrentBlock Shl 16] := Green;
    : : : : SetBlock(X*(BPP Shr 3)+2,Y);
    : : : : Mem[Where:((X+Y*ScreenW)*(BPP Shr 3)+2) - CurrentBlock Shl 16] := Red;
    : : : : End;
    : : : : End;
    : : : : End;
    : : : :
    : : : : FUNCTION GetBMPInfo(Name : String; VAR Info : InfoBlock) : Boolean;
    : : : : VAR Final : Boolean;
    : : : : Begin
    : : : : GetBMPInfo := False;
    : : : : Assign(F, Name);{$I-}Reset(F,1);{$I+}
    : : : : If IOResult <> 0 Then Exit;
    : : : : BlockRead(F, Info.BMPHeader, SizeOf(Info.BMPHeader));
    : : : :
    : : : : Info.Valid := Info.BMPHeader.Identifier = Header;
    : : : : Final := Info.Valid;
    : : : :
    : : : : Info.Cmp := Info.BMPHeader.Compression;
    : : : : If Info.Cmp In[0] Then Final := True;
    : : : :
    : : : : Close(F);
    : : : : GetBMPInfo := True;
    : : : : End;
    : : : :
    : : : : PROCEDURE ShowBMPInfo(Info : InfoBlock);
    : : : : Begin
    : : : : With Info.BMPHeader Do
    : : : : Begin
    : : : : GotoXY(21, 1);WriteLn('Size = ',Size);
    : : : : GotoXY(21, 2);WriteLn('BitMapOffset= ',BitMapOffset);
    : : : : GotoXY(21, 3);WriteLn('Type = ',CheckType);
    : : : : GotoXY(21, 4);WriteLn('Width = ',Width);
    : : : : GotoXY(21, 5);WriteLn('Height = ',Height);
    : : : : GotoXY(21, 6);WriteLn('Bits = ',ORD(Bits));
    : : : : GotoXY(21, 7);WriteLn('Planes = ',ORD(Planes));
    : : : : GotoXY(21, 8);WriteLn('FileSize = ',ImageSize);
    : : : : GotoXY(21, 9);WriteLn('RealSize = ',Width*Height);
    : : : : GotoXY(21,10);WriteLn('XPelsPerMet = ',XPels);
    : : : : GotoXY(21,11);WriteLn('YPelsPerMet = ',YPels);
    : : : : GotoXY(21,12);WriteLn('Color Used = ',ColorUsed);
    : : : : GotoXY(21,13);WriteLn('Color Imp. = ',ColorImportant);
    : : : : End;
    : : : : End;
    : : : :
    : : : : FUNCTION ShowBMP(StartX, StartY : Integer; Name : String; DoColors : Boolean; Clear : ColorType; Where : Word) : Boolean;
    : : : : VAR
    : : : : Info : InfoBlock;
    : : : : Color : ColorType;
    : : : : Begin
    : : : : If GetBMPInfo(Name,Info) = False Then
    : : : : Begin
    : : : : ShowBMP := False;
    : : : : Exit;
    : : : : End
    : : : : ELSE ShowBMP := True;
    : : : : Assign(F, Name);Reset(F,1);
    : : : : BlockRead(F, Info.BMPHeader, SizeOf(Info.BMPHeader));
    : : : :
    : : : : Reset(F,1);
    : : : : BlockRead(F, Junk, 14);
    : : : : BlockRead(F, Junk, Info.BMPHeader.CheckType);
    : : : : With Info.BMPHeader Do
    : : : : If Bits = 1 Then
    : : : : Begin
    : : : : BlockRead(F, Colors[0], 8);
    : : : : If DoColors Then
    : : : : For X := 0 to 1 Do
    : : : : SetPal(X*63, Colors[X,3]*63 DIV 255, Colors[X,2]*63 DIV 255, Colors[X,1]*63 DIV 255);
    : : : : Reset(F,1);
    : : : : BlockRead(F, Junk, BitMapOffset);
    : : : : Z := Width SHR 3;
    : : : : While Z MOD(4) <> 0 Do Inc(Z);
    : : : : For Y := 0 to Height-1 Do
    : : : : Begin
    : : : : BlockRead(F, Junk, Z);
    : : : : For X := 0 to Z-1 Do
    : : : : Mem[Where:StartX+X+(StartY+Height-Y)*80] := ORD(Junk[X]);
    : : : : End;
    : : : : End;
    : : : :
    : : : : With Info.BMPHeader Do
    : : : : If Bits = 4 Then
    : : : : Begin
    : : : : BlockRead(F, Colors[0], 64);
    : : : : If DoColors Then
    : : : : For X := 0 to 15 Do
    : : : : SetPal(X, Colors[X,3]*63 DIV 255, Colors[X,2]*63 DIV 255, Colors[X,1]*63 DIV 255);
    : : : : Reset(F,1);
    : : : : BlockRead(F, Junk, BitMapOffset);
    : : : : Z := Width SHR 1;
    : : : : While Z MOD(4) <> 0 Do Inc(Z);
    : : : : For Y := 0 to Height-1 Do
    : : : : Begin
    : : : : BlockRead(F, Junk, Z);
    : : : : For X := 0 to (Width SHR 1)-1 Do
    : : : : Begin
    : : : : If BPP < 8 Then
    : : : : Begin
    : : : : Mem[Where:StartX+X*2+0+(StartY+Height-Y)*ScreenW] := ORD(Junk[X]) SHR 4;
    : : : : Mem[Where:StartX+X*2+1+(StartY+Height-Y)*ScreenW] := ORD(Junk[X]) AND 15;
    : : : : End
    : : : : ELSE
    : : : : Begin
    : : : : Color.Index := ORD(Junk[X]) SHR 4;
    : : : : PutPixel(StartX+X*2,StartY+Y,Color,Clear,Where);
    : : : : Color.Index := ORD(Junk[X]) AND 15;
    : : : : PutPixel(StartX+X*2+1,StartY+Y,Color,Clear,Where);
    : : : : End;
    : : : : End;
    : : : : End;
    : : : : End;
    : : : :
    : : : : With Info.BMPHeader Do
    : : : : If (Bits = 8) Then
    : : : : Begin
    : : : : BlockRead(F, Colors[0], (PalCount+1)*4);
    : : : : If DoColors Then
    : : : : For X := 0 to PalCount Do
    : : : : SetPal(X, Colors[X,3]*62 DIV 255, Colors[X,2]*63 DIV 255, Colors[X,1]*63 DIV 255);
    : : : : Reset(F,1);
    : : : : BlockRead(F, Junk, BitMapOffset);
    : : : : Z := (Width*Bits) SHR 3;
    : : : : While Z MOD(4) <> 0 Do Inc(Z);
    : : : : For Y := Height-1 downto 0 Do
    : : : : Begin
    : : : : BlockRead(F, Junk, Width);
    : : : : For X := 0 to Width-1 do
    : : : : Begin
    : : : : Color.Index := ORD(Junk[X]);
    : : : : PutPixel(StartX+X,StartY+Y,Color,Clear,Where);
    : : : : End;
    : : : : For X := 1 to Z-Width Do BlockRead(F, C, 1);
    : : : : End;
    : : : : End;
    : : : :
    : : : : With Info.BMPHeader Do
    : : : : If (Bits = 24) or (Bits = 32) Then
    : : : : Begin
    : : : : If CurrentMode <= $109 Then
    : : : : Begin
    : : : : If Grayscale Then
    : : : : Begin
    : : : : { GrayScale }
    : : : : For X := 0 to PalCount Do
    : : : : SetPal(X, X*63 DIV 255, X*63 DIV 255, X*63 DIV 255);
    : : : : End
    : : : : ELSE
    : : : : Begin
    : : : : { Color }
    : : : : { Using a Default Palette, closest color using diff in R,G & B }
    : : : : If DoColors Then
    : : : : Begin
    : : : : For X := 0 to MaxPal Do
    : : : : Move(DefaultPal[X],Colors[X],SizeOf(DefaultPal[X]));
    : : : : { Convert default Palette from 8-bit to 6-bit }
    : : : : For X := 0 to MaxPal Do
    : : : : SetPal(X, Colors[X,1]*63 DIV 255,
    : : : : Colors[X,2]*63 DIV 255,
    : : : : Colors[X,3]*63 DIV 255);
    : : : : End;
    : : : : End;
    : : : : End;
    : : : : Reset(F,1);
    : : : : BlockRead(F, Junk, BitMapOffset);
    : : : : Z := (Width*Bits) SHR 3;
    : : : : While Z MOD(4) <> 0 Do Inc(Z);
    : : : : Color.Index := -1; Bits := (Bits shr 3);
    : : : : For Y := Height-1 downto 0 Do
    : : : : Begin
    : : : : BlockRead(F, Junk, Z);
    : : : : Temp4 := 0;
    : : : : For X := 0 to Width-1 do
    : : : : Begin
    : : : : If BPP <= 8 Then
    : : : : Begin
    : : : : If GrayScale Then
    : : : : Color.Index := (Ord(Junk[Temp4+0])+
    : : : : Ord(Junk[Temp4+1])+
    : : : : Ord(Junk[Temp4+2])) DIV 3
    : : : : ELSE
    : : : : Begin
    : : : : Temp2[5] := 0; Temp2[6] := $7FFF;
    : : : : For Temp3 := 0 to MaxPal Do
    : : : : Begin
    : : : : Temp2[1] := Ord(Junk[Temp4+0])-(Colors[Temp3,3]);
    : : : : Temp2[2] := Ord(Junk[Temp4+1])-(Colors[Temp3,2]);
    : : : : Temp2[3] := Ord(Junk[Temp4+2])-(Colors[Temp3,1]);
    : : : : Temp2[4] := (Abs(Temp2[1])+Abs(Temp2[2])+Abs(Temp2[3]));
    : : : : If Temp2[4] <= Temp2[6] Then
    : : : : Begin
    : : : : Temp2[5] := Temp3;
    : : : : Temp2[6] := Temp2[4];
    : : : : End;
    : : : : End;
    : : : : Color.Index := Temp2[5];
    : : : : End;
    : : : : End
    : : : : ELSE
    : : : : Begin
    : : : : Color.Blue := Ord(Junk[Temp4+0]);
    : : : : Color.Green := Ord(Junk[Temp4+1]);
    : : : : Color.Red := Ord(Junk[Temp4+2]);
    : : : : End;
    : : : : PutPixel(StartX+X,StartY+Y,Color,Clear,Where);
    : : : : Temp4 := Temp4+Bits; { Faster than a multiply }
    : : : : End;
    : : : : If KeyPressed Then Begin While KeyPressed Do ReadKey; Break; End;
    : : : : End;
    : : : : End;
    : : : : Close(F);
    : : : : End;
    : : : :
    : : : : End.
    : : : : [/code]
    : : : :
    : : : : Phat Nat
    : : : :
    : : : :
    : : :
    : : :
    : : : I copied the code into notepad and saved the whole thing as SHOW_BMP.TPU in the UNITS directory. However, the program that uses the unit now doesnt recognise this file. How do I save notepad files as *.TPU?
    : : :
    : : : thank you SO much! :)
    : : : na
    : : :
    : : Save it as a .txt file. Then use the explorer to change the extension (extensions must be visible). Notepad adds .txt automatically.
    : :
    :
    : This is ther error I get. I dont understand why this is happening seeing as pascal obviously recognizes the file as a TPU..
    : Error 72: Unit file format error C:TPUNITSSHOW_BMP.TPU
    :
    :
    Check if the it starts with the word [b]unit[/b] followed by the filename without the extension and a semi-colon. Then it should have the word [b]interface[/b]. And after the public declarations it must contain the word [b]implementation[/b].
    The file must also be in plain text and not formatted text or be a word-document.
  • Phat NatPhat Nat Posts: 757Member
    : : : I copied the code into notepad and saved the whole thing as SHOW_BMP.TPU in the UNITS directory. However, the program that uses the unit now doesnt recognise this file. How do I save notepad files as *.TPU?
    : : :
    : : : thank you SO much! :)
    : : : na
    : : :
    : : Save it as a .txt file. Then use the explorer to change the extension (extensions must be visible). Notepad adds .txt automatically.
    : :
    :
    : This is ther error I get. I dont understand why this is happening seeing as pascal obviously recognizes the file as a TPU..
    : Error 72: Unit file format error C:TPUNITSSHOW_BMP.TPU

    You need to save it as a .PAS file because it is not compiled yet. It will automatically convert it to .TPU for you.

    Phat Nat

«1
Sign In or Register to comment.