Am 14.11.2012 16:58, schrieb Curt Carpenter:
procedure test;
var c: integer;
      loc,hic: byte;
begin
    c := 1000;
    hic := hi(c);
    loc := lo(c);
end;

The result is always hic = 0 and loc = 0 for me.

Please provide a complete example (especially including an eventual "mode" directive as SizeOf(Integer) is different depending on the mode). I tested the following program here (using FPC 2.6.0) and I have no problems:

=== program begin ===

program hilotest;

{$mode fpc}

procedure test;
var c: integer;
      loc,hic: word;
begin
    c := 1000;
    hic := hi(c);
    loc := lo(c);
    Writeln(hic, ' ', loc);
end;

procedure test2;
var c: integer;
      loc,hic: byte;
begin
    c := 1000;
    hic := hi(c);
    loc := lo(c);
    Writeln(hic, ' ', loc);
end;

begin
  test;
  test2;
end.

=== program end ===

The following output is generated:

=== output begin ===

3 232
3 232

=== output end ===

If I change the mode from "fpc" to "objfpc" the output becomes:

=== output begin ===

0 1000
0 232

=== output end ===


I have looked in ninl.pas as you suggested, and found the in_lo_xxxxxx items around line 2780 in that file. I note that in_lo_integer and in_hi_integer do not appear among the items listed.

In fpc/rtl/inc/system.inc,   I find Hi(b:byte): byte declared.
in fpc/rtl/inc/systemh.inc, I find only declarations for hi and lo.

I'm guessing that somehow hi(i:integer): byte and lo(i:integer): byte got dropped from the code base somehow (but remained in the fpc documentation).

Perhaps it's located somewhere that I have not looked yet?

It seems that you haven't read the declarations in systemh.inc correctly:

Function  lo(l : Longint) : Word;  [INTERNPROC: fpc_in_lo_long];

The "INTERNPROC" tells you that the function is a compiler intrinsic (and as such implemented in ninl.pas)

Regards,
Sven

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to