(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)))