[comp.sys.mac.programmer] Casting Integer to SignedByte in THINK Pascal

gft_robert@gsbacd.uchicago.edu (10/10/89)

Here's a really simple problem that's bugging me:

I want to write out an integer to a specific location in memory, something like
this:

var
	myPtr:Ptr;
	myInt:integer;

begin
     	myPtr:=some location in memory;
	myInt:= some value <=32k;
	myPtr^:=SignedByte(myInt);
end;


OK, so far so good.  My compiler (THINK Pascal) doesn't choke on this, so it
would seem to be OK.  But it still doesn't choke on it if I make myInt > 255. 
Since SignedByte is defined in IM as 0..255, it shouldn't let me do that (range
checking is turned on), and if I do do it, won't I be overwriting two bytes in
memory, not one?

Your elucidations and explanations gratefully awaited,

Robert

============================================================================
= gft_robert@gsbacd.uchicago.edu * generic disclaimer: * "It's more fun to =
= crsp_ra@gsbacd.uchicago.edu    * all my opinions are *  compute"         =
=                                * mine                *  -Kraftwerk       =
============================================================================

siegel@endor.harvard.edu (Rich Siegel) (10/10/89)

In article <5728@tank.uchicago.edu> gft_robert@gsbacd.uchicago.edu writes:
>
>I want to write out an integer to a specific location in memory, something like
>this:
>

	If you want to write out two bytes, then

	var p : ^Integer;

	p := Pointer(addr);
	p^ := i;

	is the way to do it. They way you wrote it, the high byte of your
value will get written out; there will be no range violation, because the
high byte will never have a value bigger than $FF. At any rate, SignedByte
is not 0..255, it's -127..128, or $ff..$80.

R.




~~~~~~~~~~~~~~~
 Rich Siegel
 Staff Software Developer
 Symantec Corporation, Language Products Group
 Internet: siegel@endor.harvard.edu
 UUCP: ..harvard!endor!siegel

"There is no personal problem which cannot be solved by sufficient
application of high explosives."

~~~~~~~~~~~~~~~