%!PS-Adobe-3.0 % PostScript Calculator for Pipe/Console Usage /instream (%stdin) (r) file def /outstream (%stdout) (w) file def /ltoa_buf 32 string def /inbuf 4096 string def /MAXDISP 24 def /gdispstr (0) def /gfnumenting false def /gax 0.0 def /gbx 0.0 def /gbinop 11 def /kbd [ [(Off) 2628095] [(C) 2628095] [( Off 99 1 67 1 % c, C -> C 8 2 % backspace 42 3 % * 55 4 56 5 57 6 47 7 52 8 53 9 54 10 43 11 49 12 50 13 51 14 45 15 48 16 46 17 105 18 73 18 61 19 >> def /myputs { outstream exch writestring outstream flushfile % Forces the immediate write to the pipe } def /strcat { % (str1) (str2) -> (str1str2) /pszb exch def % str2 is on top /psza exch def % str1 is underneath psza length pszb length add % Get total length string % Create new string dup 0 psza putinterval % Place str1 at start dup psza length pszb putinterval % Place str2 right after str1 } def /ltoa { ltoa_buf cvs } def /dispstr { % (psz color) /ds_color exch def /ds_psz exch def /display_text ds_psz length 0 eq { (0) } { ds_psz } ifelse def (F 0 16777215\n) myputs (FR 0 0 0 9900 600\n) myputs (F 0 ) ds_color ltoa strcat (\n) strcat myputs (R 0 100 100 9800 500\n) myputs (R$ 0 9800 520") display_text strcat ("\n) strcat myputs (Z \n) myputs } def /drawapp { (Fo 0 611 3\n) myputs (Fo 2 140 3\n) myputs (F 0 16777215\n) myputs (FR 0 0 0 10000 10000\n) myputs gdispstr 6052991 dispstr 0 1 kbd length 1 sub { /i exch def /key kbd i get def (F 0 10526880\n) myputs (FR 0 ) i 4 mod 2000 mul 220 add ltoa strcat ( ) strcat i 4 idiv 1200 mul 1220 add ltoa strcat ( ) strcat i 4 mod 2000 mul 2080 add ltoa strcat ( ) strcat i 4 idiv 1200 mul 2280 add ltoa strcat (\n) strcat myputs (F 0 986895\n) myputs (R 0 ) i 4 mod 2000 mul 200 add ltoa strcat ( ) strcat i 4 idiv 1200 mul 1200 add ltoa strcat ( ) strcat i 4 mod 2000 mul 2100 add ltoa strcat ( ) strcat i 4 idiv 1200 mul 2300 add ltoa strcat (\n) strcat myputs (F 0 ) key 1 get ltoa strcat (\n) strcat myputs (C$ 0 ) i 4 mod 2000 mul 1100 add ltoa strcat ( ) strcat i 4 idiv 1200 mul 1700 add ltoa strcat (") strcat key 0 get strcat ("\n) strcat myputs } for (F 0 255\n) myputs (C$ 0 5000 800"PostScript cloud app shell"\n) myputs (F 2 255\n) myputs (C$ 2 5000 7200"Corrie Zucker Technologies LLC."\n) myputs (C$ 2 5000 7340"d/b/a CZ Technologies"\n) myputs (Z \n) myputs } def /key-to-exe { % (rowcol) /exe_rc exch def exe_rc 0 eq { (O 0 0 0\n) myputs quit } if exe_rc 1 eq { /gdispstr (0) def /gfnumenting false def gdispstr 6052991 dispstr } if exe_rc 2 eq { gdispstr length 0 gt { gdispstr length 1 eq { /gdispstr () def () 6052991 dispstr } { /gdispstr gdispstr 1 gdispstr length 1 sub getinterval def gdispstr 6052991 dispstr } ifelse } if } if exe_rc 3 eq exe_rc 7 eq or exe_rc 11 eq or exe_rc 15 eq or { /gax gdispstr cvr def /gdispstr () def /gfnumenting false def /gbinop exe_rc def } if exe_rc 4 eq { (7) numappend } if exe_rc 5 eq { (8) numappend } if exe_rc 6 eq { (9) numappend } if exe_rc 8 eq { (4) numappend } if exe_rc 9 eq { (5) numappend } if exe_rc 10 eq { (6) numappend } if exe_rc 12 eq { (1) numappend } if exe_rc 13 eq { (2) numappend } if exe_rc 14 eq { (3) numappend } if exe_rc 16 eq { (0) numappend } if exe_rc 17 eq { (.) numappend } if exe_rc 18 eq { gdispstr length 0 gt { gdispstr 0 1 getinterval (-) eq { /gdispstr gdispstr 1 gdispstr length 1 sub getinterval def } { /newstr gdispstr length 1 add string def newstr 0 (-) putinterval newstr 1 gdispstr putinterval /gdispstr newstr def } ifelse gdispstr 6052991 dispstr } if } if exe_rc 19 eq { gfnumenting { /gbx gdispstr cvr def /gdispstr () def /gfnumenting false def } if gbinop 3 eq { /gax gax gbx mul def } if gbinop 7 eq { /gax gax gbx div def } if gbinop 11 eq { /gax gax gbx add def } if gbinop 15 eq { /gax gax gbx sub def } if /gdispstr gax 20 string cvs def gdispstr 6052991 dispstr } if } def /numappend { % (digit_string) /append_digit exch def gfnumenting { gdispstr length MAXDISP 1 sub lt { /newstr gdispstr length append_digit length add string def newstr 0 gdispstr putinterval newstr gdispstr length append_digit putinterval /gdispstr newstr def } if } { /gdispstr append_digit def /gfnumenting true def } ifelse gdispstr 6052991 dispstr } def { instream inbuf readline not { exit } if /lline exch def lline (drawapp) eq { drawapp } { lline ( ) search { /btn_in exch cvi def pop /rem exch def rem ( ) search { /x_in exch cvi def pop /y_in exch cvi def x_in 0 lt { x_in -2 eq { keymap btn_in known { keymap btn_in get key-to-exe } if } if x_in -4 eq { (Rz ) btn_in ltoa strcat ( ) strcat y_in ltoa strcat (\n) strcat myputs } if x_in -5 eq { (Mv ) btn_in ltoa strcat ( ) strcat y_in ltoa strcat (\n) strcat myputs } if } { x_in 0 ge btn_in 1 eq and { /row y_in 1200 sub 1200 idiv def /col x_in 200 sub 2000 idiv def % Grid bounds protection row 0 ge col 0 ge and row 5 lt and col 4 lt and { row 4 mul col add key-to-exe } if } if } ifelse } { pop } ifelse } { pop } ifelse } ifelse } loop