Registriert seit: 5. Mai 2004
Ort: Filderstadt
111 Beiträge
Delphi 7 Professional
|
AV nach ausführen von bitoperationen und funktionen
18. Aug 2004, 14:35
Hallo,
ich hab hier einen C Code vor mir liegen den ich auf Pascal portieren soll.
Bisher bin ich eigentlich auch ganz gut damit klar gekommen. Jetzt hab ich aber
eine Umrechnung von Rechten bei der immer eine AV springt wenn sie komplett abgelaufen
ist. Kann mir jemand einen anhaltspunkt geben?
Code:
const
FLAG_MARKER = $C0;
FLAG_A = $3F;
FLAG_R = $20;
FLAG_W = $10;
FLAG_X = $08;
FLAG_D = $04;
FLAG_P = $02;
FLAG_O = $01;
implementation
{$R *.dfm}
function check(mask,right : Integer):boolean;
begin
if ((mask AND right) = right) then result := true
else result :=false
end;
procedure TForm1.Button1Click(Sender: TObject);
var
wert:integer;
m1,m2,m3,s1 : Integer;
r1,r2,r3 : PChar;
begin
wert := -256;
m1 := wert shr 24;
m2 := wert shr 16;
m3 := wert shr 8;
// s1 := wert AND $FF;
if( CHECK( m1, FLAG_MARKER ) AND CHECK( m2, FLAG_MARKER ) AND CHECK( m3, FLAG_MARKER ) ) then
begin
if( CHECK( m1, FLAG_A ) ) then strcat( r1, 'Alle' ) else
begin
if( CHECK( m1, FLAG_R ) ) then strcat( r1,'R' );
if( CHECK( m1, FLAG_W ) ) then strcat( r1, 'W' );
if( CHECK( m1, FLAG_X ) ) then strcat( r1, 'X' );
if( CHECK( m1, FLAG_D ) ) then strcat( r1, 'D' );
if( CHECK( m1, FLAG_P ) ) then strcat( r1, 'P' );
if( CHECK( m1, FLAG_O ) ) then strcat( r1, 'O' );
end;
if( CHECK( m2, FLAG_A ) ) then strcat( r2, 'Alle' ) else
begin
if( CHECK( m2, FLAG_R ) ) then strcat( r2, 'R' );
if( CHECK( m2, FLAG_W ) ) then strcat( r2, 'W' );
if( CHECK( m2, FLAG_X ) ) then strcat( r2, 'X' );
if( CHECK( m2, FLAG_D ) ) then strcat( r2, 'D' );
if( CHECK( m2, FLAG_P ) ) then strcat( r2, 'P' );
if( CHECK( m2, FLAG_O ) ) then strcat( r2, 'O' );
end;
if( CHECK( m3, FLAG_A ) ) then strcat( r3, 'Alle' ) else
begin
if( CHECK( m3, FLAG_R ) ) then strcat( r3, 'R' );
if( CHECK( m3, FLAG_W ) ) then strcat( r3, 'W' );
if( CHECK( m3, FLAG_X ) ) then strcat( r3, 'X' );
if( CHECK( m3, FLAG_D ) ) then strcat( r3, 'D' );
if( CHECK( m3, FLAG_P ) ) then strcat( r3, 'P' );
if( CHECK( m3, FLAG_O ) ) then strcat( r3, 'O' );
end;
end;
end;
Danke schon im Voraus.
MfG
Kasoft
|