[Back to MAIL SWAG index] [Back to Main SWAG index] [Original]

    {
    TH> Apparently this contains the filepositions of the records (and also the
    TH> conference numbers?) but the numbers are not in normal format. Can somebody
    TH>  please explain the format of this file and how to convert these numbers to
    TH> and from something TP can work with?

    There is supposed to be at least two doc's explaining the QWK format. I have
    here a unit that converts the integer to basicreal (i guess it's what you
    need..) I'm sorry I can't remember the of the doc's..

    ------------------- 8<
    }
    Unit BasConv;

    Interface
      Function BasicReal2Long(InValue: LongInt): LongInt;
                    {Convert Basic Short Reals to LongInts}

      Function Long2BasicReal(InValue: LongInt): LongInt;
                    {Convert LongInts to Basic Short Reals}

    Implementation

    Function BasicReal2Long(InValue: LongInt): LongInt;

      Var
      Temp: LongInt;
      Expon: Integer;

      Begin
      Expon := ((InValue shr 24) and $ff) - 152;
      Temp := (InValue and $007FFFFF) or $00800000;
      If Expon < 0 Then
        Temp := Temp shr Abs(Expon)
      Else
        Temp := Temp shl Expon;
      If (InValue and $00800000) <> 0 Then
        BasicReal2Long := -Temp
      Else
        BasicReal2Long := Temp;
      If Expon = 0 Then
        BasicReal2Long := 0;
      End;

    Function Long2BasicReal(InValue: LongInt): LongInt;
      Var
      Negative: Boolean;
      Expon: LongInt;

      Begin
      If InValue = 0 Then
        Long2BasicReal := 0
      Else
        Begin
        If InValue < 0 Then
          Begin
          Negative := True;
          InValue := Abs(InValue);
          End
        Else
          Negative := False;
        Expon := 152;
        If InValue < $007FFFFF Then
          While ((InValue and $00800000) = 0) Do
            Begin
            InValue := InValue shl 1;
            Dec(Expon);
            End
        Else
          While ((InValue And $FF000000) <> 0) Do
            Begin
            InValue := InValue shr 1;
            Inc(Expon);
            End;
        InValue := InValue And $007FFFFF;
        If Negative Then
          InValue := InValue Or $00800000;
        Long2BasicReal := InValue + (Expon shl 24);
        End;
      End;

    End.

[Back to MAIL SWAG index] [Back to Main SWAG index] [Original]