; machine.lsp -- machine/system-dependent definitions
;       Windows

;; default behavior is to call SETUP-CONSOLE to get large white typescript
;;
;; set *setup-console* to nil in your personal init.lsp to override this behavior 
;; (this may be necessary to work with emacs)
;;
(if (not (boundp '*setup-console*)) (setf *setup-console* t))
(if *setup-console* (setup-console))

(if (not (boundp '*default-sf-format*))
    (setf *default-sf-format* snd-head-Wave))

(if (not (boundp '*default-sound-file*))
    (compute-default-sound-file))

(if (not (boundp '*default-sf-dir*))
    (setf *default-sf-dir* ""))

(if (not (boundp '*default-sf-mode*))
    (setf *default-sf-mode* snd-mode-pcm))

(if (not (boundp '*default-sf-bits*))
    (setf *default-sf-bits* 16))

(if (not (boundp '*default-plot-file*))
    (setf *default-plot-file* "points.dat"))

;(if (not (boundp '*plotscript-file*))
;    (setf *plotscript-file* "sys/unix/rs6k/plotscript"))

; local definition for play
(defmacro play (expr)
  `(s-save-autonorm ,expr NY:ALL *default-sound-file* :play *soundenable*))


(defun r ()
  (s-save (s-read *default-sound-file*) NY:ALL "" :play t)
)


; PLAY-FILE -- play a file
(defun play-file (name)
  (s-save (s-read name) NY:ALL "" :play t))


; FULL-NAME-P -- test if file name is a full path or relative path
;
; (otherwise the *default-sf-dir* will be prepended
;
(defun full-name-p (filename)
  (or (eq (char filename 0) #\\)
      (eq (char filename 0) #\/)
      (eq (char filename 0) #\.)
      (and (> (length filename) 2)
           (both-case-p (char filename 0))
           (equal (char filename 1) #\:))))

; RELATIVE-PATH-P -- test if filename or path is a relative path
;
; note that properly converting a Windows path from relative to
;  absolute is complicated by paths like: E:MYFILE.LSP
;  Nyquist assumes that if there is a drive letter, the path is
;  absolute, e.g. E:\TMP\MYFILE.LSP and if there is no drive,
;  the path is relative, e.g. you cannot have \TMP\MYFILE.LSP
;
(defun relative-path-p (filename)
  (or (< (length filename) 2)
      (not (both-case-p (char filename 0)))
      (not (equal (char filename 1) #\:))))


(setf *file-separator* #\\)

(defun ny:load-file () (load "*.*"))
(defun ny:reload-file () (load "*"))


; save the standard function to write points to a file
;
;(setfn s-plot-points s-plot)

;(defun array-max-abs (points)
;  (let ((m 0.0))
;        (dotimes (i (length points))
;          (setf m (max m (abs (aref points i)))))
;        m))

;(setf graph-width 600)
;(setf graph-height 220)

;(defun s-plot (snd &optional (n 600))
;  (show-graphics)
;  (clear-graphics)
;  (cond ((soundp snd)
;               (s-plot-2 snd n (/ graph-height 2) graph-height))
;              (t
;               (let ((gh (/ graph-height (length snd)))
;                     hs)
;                 (dotimes (i (length snd))
;                   (setf hs (s-plot-2 (aref snd i) n (+ (/ gh 2) (* i gh)) gh hs)))))))
;
;
;(defun s-plot-2 (snd n y-offset graph-height horizontal-scale)
;  (prog ((points (snd-samples snd n))
;                   maxpoint horizontal-scale vertical-scale)
;    (setf maxpoint (array-max-abs points))
;    (moveto 0 y-offset)
;    (lineto graph-width y-offset)
;    (moveto 0 y-offset)
;    (cond ((null horizontal-scale)
;               (setf horizontal-scale (/ (float graph-width) (length points)))))
;    (setf vertical-scale (- (/ (float graph-height) 2 maxpoint)))
;    (dotimes (i (length points))
;      (lineto (truncate (* horizontal-scale i))
;              (+ y-offset (truncate (* vertical-scale (aref points i))))))
;    (format t "X Axis: ~A to ~A (seconds)\n" (snd-t0 snd) (/ (length points) (snd-srate snd)))
;    (format t "Y Axis: ~A to ~A\n" (- maxpoint) maxpoint)
;    (format t "~A samples plotted.\n" (length points))
;    (return horizontal-scale)
;    ))
;
; S-EDIT - run the audio editor on a sound
;
;(defmacro s-edit (&optional expr)
;  `(prog ()
;         (if ,expr (s-save ,expr 1000000000 *default-sound-file*))
;         (system (format nil "audio_editor ~A &" 
;                         (soundfilename *default-sound-file*)))))

