Unit Goodies; {Collection of things I wish were in the System Unit}

Interface
Type Fixed= Record F:Word;W:Integer;end;

Var r,r2,r3:Word;

Function Greater(a,b:Integer):Integer;
Function Lesser(a,b:Integer):Integer;
Function Perturb:Word;  {Peturbation algorhythm (C) 1982 BarathSoft}
Function QRandWord:word;
Function QRand(n:Word):word;
Function SQRoot(N:LongInt):Word;
Function SGN(n:Integer):Integer;

Implementation

Function Greater(a,b:Integer):Integer;assembler;
asm
Mov  ax,a
Mov  bx,b
Cmp  ax,bx
Jnc  @done
Xchg ax,bx
@Done:
end;
Function Lesser(a,b:Integer):Integer;assembler;
asm
Mov  ax,a
Mov  bx,b
Cmp  ax,bx
Jc   @done
Xchg ax,bx
@Done:
end;

Function Perturb:Word;assembler;  {Peturbation algorhythm (C) 1982
BarathSoft}
{Delta 2904 yields 65534 length pseudorandom sequence}
asm Mov ax,r; Xor ax,\$a5a5; add ax,ax; adc ax,2904; Mov r,ax; end;
Function QRandWord:word;assembler;
asm Call Perturb; Add ax,r2;Mov r2,ax;Xor ax,r3;Mov r3,ax;end;
Function QRand(n:Word):word;assembler;
asm Call QRandWord; Mul n; Mov ax,dx; end;
Function SQRoot(N:LongInt):Word;Assembler;
asm
Mov si,-1
Mov cx,n+2.word
Test ch,\$80
JNZ @Error
Mov bx,n.word
Mov di,32768
Xor si,si
@DoSqrt:
Mov ax,si
Or  ax,di
Mul ax
Cmp dx,cx
Ja  @NoSet
Jnz @Set
Cmp ax,bx
Ja  @Noset
@Set:
Or  si,di
@Noset:
Shr di,1
Jnz @DoSqrt
@Error:
Mov ax,si
end;
Function SGN(n:Integer):Integer;assembler;
asm
Xor ax,ax
Cmp n,ax
Js  @neg
Inc ax
Jmp @end
@neg:
Dec ax
@end:
end;
end.