Make editor save source before compiling

This commit is contained in:
John Lorentzson 2025-07-29 19:52:27 +02:00
parent ab9ff442ef
commit 4f096b9820

View file

@ -766,36 +766,37 @@ Additionally ensures correct line numbers on the way, as a bonus."
(defun com-compile-buffer () (defun com-compile-buffer ()
(when *refresh-asm-functions-p* (when *refresh-asm-functions-p*
(usc:usc-init)) (usc:usc-init))
(let* ((src (buffer-string (current-buffer *editor*))) (let* ((timestring (multiple-value-bind (seconds minutes hours day month year)
(bytes (get-decoded-time)
(handler-case (format nil "~D-~2,'0D-~2,'0D_~2,'0D-~2,'0D-~2,'0D"
(usc:compile-string-to-bytes src :print-ir-p t) year month day
(usc:usc-error (c) hours minutes seconds)))
(let ((source (cdr (usc:source c)))) (bin-name (format nil "compiled-program_~A.bin" timestring))
(compile-fail-prompt c (car source) (cdr source))) (src-name (format nil "source-program_~A.c6l" timestring))
nil)))) (src (buffer-string (current-buffer *editor*))))
(unless (null bytes) (with-open-file (output src-name :direction :output
(let* ((timestring (multiple-value-bind (seconds minutes hours day month year) :if-exists :supersede)
(get-decoded-time) (write-string src output))
(format nil "~D-~2,'0D-~2,'0D_~2,'0D-~2,'0D-~2,'0D" (let ((bytes
year month day (handler-case
hours minutes seconds))) (usc:compile-string-to-bytes src :print-ir-p t)
(bin-name (format nil "compiled-program_~A.bin" timestring)) (usc:usc-error (c)
(src-name (format nil "source-program_~A.c6l" timestring))) (let ((source (cdr (usc:source c))))
(with-open-file (output src-name :direction :output (compile-fail-prompt c (car source) (cdr source)))
:if-exists :supersede) nil))))
(write-string src output)) (unless (null bytes)
(with-open-file (output bin-name :direction :output (let* ()
:element-type '(unsigned-byte 8) (with-open-file (output bin-name :direction :output
:if-exists :supersede) :element-type '(unsigned-byte 8)
(dolist (byte bytes) :if-exists :supersede)
(write-byte byte output))) (dolist (byte bytes)
(clear-screen) (write-byte byte output)))
(usc::send-data-to-c64 (coerce bytes 'vector) (clear-screen)
'draw-transfer-progress) (usc::send-data-to-c64 (coerce bytes 'vector)
(clear-screen) 'draw-transfer-progress)
(redisplay-view (current-view *editor*)) (clear-screen)
(redisplay-status-line :completely-p t))))) (redisplay-view (current-view *editor*))
(redisplay-status-line :completely-p t))))))