(bind-func generate_And_Wrap_Pseudorandom_DNA_Sequence
(let ((line:|61,i8|* (alloc))
(cumulative_Probability 0.0:f) (i 0)
(line_Length 0) (column 0) (r 0.0:f)
(count 0))
(lambda (nucleotides_Information:nucleotide_info* number_Of_Nucleotides:i64 number_Of_Characters_To_Create:i64)
(set! cumulative_Probability 0.0:f)
(let ((cumulative_Probabilities:float* (salloc number_Of_Nucleotides))
(current_Number_Of_Characters_To_Create number_Of_Characters_To_Create)
(IMf (i32tof IM)))
(dotimes (i number_Of_Nucleotides)
(set! cumulative_Probability (+ cumulative_Probability (tref (pref-ptr nucleotides_Information i) 1)))
(pset! cumulative_Probabilities i (* IMf cumulative_Probability)))
(aset! line MAXIMUM_LINE_WIDTH #o012)
(while (> current_Number_Of_Characters_To_Create 0)
(set! line_Length MAXIMUM_LINE_WIDTH)
(if (< current_Number_Of_Characters_To_Create MAXIMUM_LINE_WIDTH)
(begin
(set! line_Length current_Number_Of_Characters_To_Create)
(aset! line line_Length #o012)))
(dotimes (column line_Length)
(set! r (get_LCG_Pseudorandom_Number IMf))
(set! count 0)
(dotimes (i number_Of_Nucleotides)
(if (<= (pref cumulative_Probabilities i) r)
(set! count (+ count 1))))
(aset! line column (tref (pref-ptr nucleotides_Information count) 0)))
(fwrite (cast line) (+ line_Length 1) 1 stdout)
(set! current_Number_Of_Characters_To_Create (- current_Number_Of_Characters_To_Create line_Length))))
void)))