COMPILE SUBROUTINE Get_BMP_Info(File, Size, Width, Height) $INSERT LOGICAL DECLARE FUNCTION Blank_Struct, Msg DECLARE SUBROUTINE Parse_Struct, Set_Status IF Assigned(File) THEN OSOPEN File TO BMP_File THEN IF File[-3,3] _EQC 'BMP' THEN InfoHeader = Blank_Struct('BITMAPINFOHEADER') * Header = UL, SL, SL, US, US, UL, UL, UL, UL, UL, UL OSBREAD InfoHeader FROM BMP_File AT 14 LENGTH 40 Parse_Struct(InfoHeader, 'BITMAPINFOHEADER', Size, Width, Height) END IF File[-3,3] _EQC 'PNG' THEN OSBREAD Chunk FROM BMP_File AT 0 LENGTH 30 StartPos = INDEX(Chunk,'IHDR',1) + 4 HexWidth = Chunk[StartPos,4] Width = (SEQ(HexWidth[1,1]) * 65536) Width += (SEQ(HexWidth[2,1]) * 4096) Width += (SEQ(HexWidth[3,1]) * 256) Width += (SEQ(HexWidth[4,1]) * 1) HexHeight = Chunk[StartPos+4,4] Height = (SEQ(HexHeight[1,1]) * 65536) Height += (SEQ(HexHeight[2,1]) * 4096) Height += (SEQ(HexHeight[3,1]) * 256) Height += (SEQ(HexHeight[4,1]) * 1) Size = '' END OSCLOSE BMP_File END ELSE Set_Status(1, 'Get_BMP_Info':@SVM:'Unable to open ':QUOTE(File)) END END RETURN