(defvar BN←DIGIT←SIZE 32)
(when (eq 0 (getglobal "BnDivideDigit"))
(let ( (l #:system:path) f )
(while (and l (null (probefile (setq f (catenate (car l) "kern.o")))))
(nextl l))
(ifn l
(error 'kern "Je ne trouve pas kern.o dans le path" ())
(cload f) )))
(unless (featurep 'kern)
(add-feature 'kern)
(setfn 'BnSetToZero 'subr3 (getglobal "BnSetToZero"))
(setfn 'BnAssign 'nsubr (getglobal "BnAssign"))
(setfn 'BnSetDigit 'subr3 (getglobal "BnSetDigit"))
(setfn 'BnGetDigit 'subr2 (getglobal "BnGetDigit"))
(setfn 'BnNumDigits 'subr3 (getglobal "BnNumDigits"))
(setfn 'BnNumLeadingZeroBitsInDigit 'subr2 (getglobal "BnNumLeadingZeroBitsInDigit"))
(setfn 'BnDoesDigitFitInWord 'subr2 (getglobal "BnDoesDigitFitInWord"))
(setfn 'BnIsDigitZero 'subr2 (getglobal "BnIsDigitZero"))
(setfn 'BnIsDigitNormalized 'subr2 (getglobal "BnIsDigitNormalized"))
(setfn 'BnIsDigitOdd 'subr2 (getglobal "BnIsDigitOdd"))
(setfn 'BnCompareDigits 'nsubr (getglobal "BnCompareDigits"))
(setfn 'BnComplement 'subr3 (getglobal "BnComplement"))
(setfn 'BnAndDigits 'nsubr (getglobal "BnAndDigits"))
(setfn 'BnOrDigits 'nsubr (getglobal "BnOrDigits"))
(setfn 'BnXorDigits 'nsubr (getglobal "BnXorDigits"))
(setfn 'BnShiftLeft 'nsubr (getglobal "BnShiftLeft"))
(setfn 'BnShiftRight 'nsubr (getglobal "BnShiftRight"))
(setfn 'BnAddCarry 'nsubr (getglobal "BnAddCarry"))
(setfn 'BnAdd 'nsubr (getglobal "BnAdd"))
(setfn 'BnSubtractBorrow 'nsubr (getglobal "BnSubtractBorrow"))
(setfn 'BnSubtract 'nsubr (getglobal "BnSubtract"))
(setfn 'BnMultiplyDigit 'nsubr (getglobal "BnMultiplyDigit"))
(setfn 'BnDivideDigit 'nsubr (getglobal "BnDivideDigit"))
)
(defun BnAlloc (i)
(makestring (mul 4 i) 0))
(defun BnCreate (Ad i)
(let ( (n (makestring (mul 4 i) 0)) )
(typestring n Ad)
n ))
(defun BnFree (n) 1)
(defun BnGetType (n)
(typestring n))
(defun BnSetType (n Ad)
(typestring n Ad))
(defun BnGetSize (n)
(logshift (slen n) -2))
(defvar #:KerN:tampon (BnCreate 'n 2))
(defun #:N:prin (s)
(let ( cnt )
(with ( (obase 16) )
(for (i (sub1 (BnGetSize s)) -1 0)
(BnAssign #:KerN:tampon 0 s i 1)
(setq cnt 0)
(while (< cnt BN←DIGIT←SIZE)
(BnShiftLeft #:KerN:tampon 0 1 #:KerN:tampon 1 4)
(prin (BnGetDigit #:KerN:tampon 1))
(incr cnt 4) )))))