; Standard library
(define (abs n)
	(if (real? n)
		(if (>= n 0) n (- n))
		(magnitude n)))
(define (even? n)
	(= (remainder n 2) 0))
(define (exact? x) #f)
(define (expt x y) 
	(exp (* y (log x))))
(define (for-each f l)
	(if (null? l) #n
	(begin (f (car l))
		 (for-each f (cdr l)))))
(define (inexact? x) #t)
(define (input prompt)
  (string->object 
    (input-string prompt)))
(define (input-string prompt)
  (frm-popup 9993 (lambda (e . a)
    (case e
      ((frm-open) 
	(fld-set-text 9301 prompt)
	(frm-set-focus 9302))
      ((ctl-select)
	(case (car a)
	  ((9303) (frm-return 
		(fld-get-text 9302)))
	  ((9304) 
		(error "Interrupted"))))
      (else #f)))))
(define (map f l)
  (letrec ((result (cons '() '()))
	(helper (lambda (p l)
	  (cond ((null? l)  p)
	    (else (set-cdr! p
			(cons (f (car l)) '()))
		(helper (cdr p) (cdr l)))))))
	(helper result l)
	(cdr result)))
(define (max n . l)
	(if (null? l) n
	  (let ((m (apply max l)))
	    (if (<= n m) m n))))
(define (min n . l)
	(if (null? l) n
	  (let ((m (apply min l)))
	    (if (<= n m) n m))))
(define (modulo a b)
	(let ((r (remainder a b)))
	(if (>= (* r b) 0) r
		(+ r b))))
(define (negative? x) (< x 0))
(define (odd? n)
	(= (remainder n 2) 1))
(define (port? p) (or (input-port? p)
	(output-port? p)))
(define (positive? x) (> x 0))
(define (wait-pen)
  (let ((e (event #t)))
    (if (and (pair? e) 
		(eq? (car e) 'pen-down))
	(cons (cadr e) (caddr e))
	(wait-pen))))
(define (zero? x) (eqv? x 0))
(define (= x y) (eqv? x y))
