(DEFUN ltoa (v b) (cond ((= b 10) (format nil "~D" v)) ((= b 16) (format nil "~H" v)) ((= b 8) (format nil "~O" v)) ((= b 2) (format nil "~B" v)) ) ) (setf *read-default-float-format* 'double-float) (DEFUN myputs (str) (format t str)) (DEFUN QUERY_REMOTE () (myputs "Rz 405 300~%")) ;keyboard names and colors (setq MAXDISP 24 gdispstr "" kbd '(("Off" 2628095) ("C" 2628095) (" (length gdispstr) 0)) (cond ((eqv (length gdispstr) 1) (dispstr "0" 6052991) ) ) (setq gdispstr (strsub gdispstr 0 (- (length gdispstr) 1))) ) ((or (= rowcol 3) (= rowcol 7) (= rowcol 11) (= rowcol 15)) (setq gax (with-input-from-string (s gdispstr) (read s)) gdispstr "" gfnumenting nil) (setq gbinop rowcol) ) ((= rowcol 4) (numbers "7")) ((= rowcol 5) (numbers "8")) ((= rowcol 6) (numbers "9")) ((= rowcol 8) (numbers "4")) ((= rowcol 9) (numbers "5")) ((= rowcol 10) (numbers "6")) ((= rowcol 12) (numbers "1")) ((= rowcol 13) (numbers "2")) ((= rowcol 14) (numbers "3")) ((= rowcol 16) (numbers "0")) ((= rowcol 17) (numbers ".")) ((= rowcol 18) (cond ((> (length gdispstr) 0) (cond ((string= (char gdispstr 0) "-") (setq gdispstr (subseq gdispstr 1)) ) (t (setq gdispstr (CONCATENATE'STRING "-" gdispstr)) ) ) (dispstr gdispstr 6052991) ) ) ) ((= rowcol 19) (cond (gfnumenting (setq gbx (with-input-from-string (s gdispstr) (read s)) gdispstr "" gfnumenting nil) ) ) (setq gax (cond ((= gbinop 3) (* (coerce gax 'double-float) gbx)) ((= gbinop 7) (/ (coerce gax 'double-float) gbx)) ((= gbinop 11) (+ (coerce gax 'double-float) gbx)) ((= gbinop 15) (- (coerce gax 'double-float) gbx)) ) ) (setq gdispstr (format nil "~A" gax)) (dispstr gdispstr 6052991) ) ) ) (setq gbinop 11 gax 0 gbx 0) (myputs "Fo 0 611 3~%Fo 1 400 3~%Fo 2 140 3~%") (dispstr "0" 6052991) (loop while t do (setq lline (read-line)) (cond ((string= lline "drawapp") (drawapp)) ((string= lline "QUERY_REMOTE") (QUERY_REMOTE)) (t (setq button-x-y (loop :for (integer position) := (multiple-value-list (parse-integer lline :start (or position 0) :junk-allowed t)) :while integer :collect integer)) (setq button (car button-x-y) x (cadr button-x-y) y (caddr button-x-y)) (cond ((= -98 x) (sleep (* 0.001 y)) ) ((and (>= x 0) (= button 1)) (setq row (floor (/ (- y 1200) 1200)) col (floor (/ (- x 200) 2000))) (key-to-exe row col) ) ((= -2 x) (cond ((or (= button 111) (= button 79)) (key-to-exe 0 0)) ((or (= button 99) (= button 67)) (key-to-exe 0 1)) ((= button 8) (key-to-exe 0 2)) ((= button 42) (key-to-exe 0 3)) ((= button 55) (key-to-exe 1 0)) ((= button 56) (key-to-exe 1 1)) ((= button 57) (key-to-exe 1 2)) ((= button 47) (key-to-exe 1 3)) ((= button 52) (key-to-exe 2 0)) ((= button 53) (key-to-exe 2 1)) ((= button 54) (key-to-exe 2 2)) ((= button 43) (key-to-exe 2 3)) ((= button 49) (key-to-exe 3 0)) ((= button 50) (key-to-exe 3 1)) ((= button 51) (key-to-exe 3 2)) ((= button 45) (key-to-exe 3 3)) ((= button 48) (key-to-exe 4 0)) ((= button 46) (key-to-exe 4 1)) ((or (= button 105) (= button 73)) (key-to-exe 4 2)) ((= button 61) (key-to-exe 4 3)) ) ) ((= -4 x) (myputs (CONCATENATE'STRING "Rz " (format nil "~D" button) " " (format nil "~D" y) "~%"))) ((= -5 x) (myputs (CONCATENATE'STRING "Mv " (format nil "~D" button) " " (format nil "~D" y) "~%"))) ) ) ) )