(use-modules (system vm program) (srfi srfi-1) (ice-9 rdelim) (ice-9 pretty-print))
(define (skip-lines port n)
(let lp((i 1))
(cond
((= i n) port)
(else (read-line port) (lp (1+ i))))))
(define (get-src source)
(let* ((file (source:file source))
(line (source:line source))
(fp (any (lambda (x)
(let ((f (string-append x "/" file)))
(if (file-exists? f) (open-input-file f) #f))) %load-path)))
(skip-lines fp line)
(let ((src (read fp)))
(close fp)
src)))
(define (get-program-src p)
(let ((source (program-source p 0)))
(cond
((not source) "It's inner procedure implemented with C")
((not (source:file source)) #f)
(else (get-src source)))))
(define (print-src p)
(let ((src (get-program-src p)))
(and src (print-pretty src))))