?login_element?

Subversion Repositories NedoOS

Rev

Rev 1314 | Blame | Compare with Previous | Last modification | View Log | Download

  1. ;EXPORT:
  2. ;initstdio - init stdinhandle, stdouthandle, stdhgt
  3. ;receivechar (macro GETCHAR_) - read char from stdin (out: A=char, CY=error)
  4. ;receivechars - read chars from stdin (de=buf, hl=size, out: bc=bytes actually read (if EOF), CY=error(EOF))
  5. ;receivekey - read one byte of key from stdin (out: A=keylang, C=keynolang(???TODO), CY=error)
  6. ;getkey (macro GETKEY_) - read key from stdin (out: A=keylang, C=keynolang(???TODO), CY=error)
  7. ;yieldgetkeyloop - wait key from stdin (out: A=keylang, C=keynolang(???TODO), CY=error)
  8. ;setcolor (macro SETCOLOR_) - set color attribute (in: D=paper0..7, E=ink0..15)
  9. ;setcolor_invisible - NON-STANDARD
  10. ;setcolor_visible - NON-STANDARD
  11. ;scrolldown ;de=topyx, hl=hgt,wid ;x, wid even
  12. ;scrollup ;de=topyx, hl=hgt,wid ;x, wid even
  13. ;setxy (macro SETXY_) - set cursor position (in: de=YX, top left is 0;0)
  14. ;setx (macro SETX_) - set cursor X position (in: e=X, left is 0)
  15. ;sendchar (macro PRCHAR_) - send char to stdout (in: A=char)
  16. ;sendchars - send chars to stdout (in: de=buf, hl=size, out: A=error)
  17. ;setstdouthandle - in: A=handle
  18. ;setstdinhandle - in: A=handle
  19. ;clearrestofline - clear line after cursor
  20. ;clearrestofline_crlf - clear line after cursor, go to next line
  21. ;clearterm - print <stdiohgt> lines of spaces except one space, set cursor to 0,0
  22.  
  23. STDINBUF_SZ=255
  24.  
  25. initstdio
  26.         ;OS_GETSTDINOUT ;e=stdin, d=stdout, h=stderr, l=hgt of stdout
  27.         ld c,CMD_GETSTDINOUT
  28.         call BDOS
  29.         ld a,l
  30.         ld (stdiohgt),a
  31.         ld a,e
  32.         ld (stdinhandle),a
  33.         ld a,d
  34. setstdouthandle
  35.         ld (stdouthandle),a
  36.         ret
  37. setstdinhandle
  38.         ld (stdinhandle),a
  39.         ret
  40.  
  41. setstdinout
  42.         ;OS_GETMAINPAGES ;out: dehl=номера страниц в 0000,4000,8000,c000, c=flags, b=id
  43.         ld c,CMD_GETMAINPAGES
  44.         call BDOS
  45.         ld a,(stdinhandle)
  46.         ld e,a
  47.         ld a,(stdouthandle)
  48.         ld d,a
  49. ;b=id, e=stdin, d=stdout, h=stderr (TODO)
  50.         ;OS_SETSTDINOUT
  51.         ld c,CMD_SETSTDINOUT
  52.         call BDOS
  53.         ret
  54.  
  55. getkey
  56. ;out: NC=no error, nz=event (a=key, l=mousebuttons, de=mouxexy)
  57. getkey0
  58.         xor a
  59.         ld (wasmouseevent),a
  60.         call receivekey
  61.          ret c ;error
  62.         ld hl,(term_prfsm_curstate)
  63.         dec l
  64.         jr nz,getkey0 ;пока не примем кнопку до конца
  65.         inc l ;nz
  66. ;был mouse event? считаем за нажатие, а приложение будет смотреть координаты и кнопку мыши
  67. stdio_mousebuttons=$+1
  68.         ld l,0
  69. stdio_mousex=$+1
  70. stdio_mousey=$+2
  71.         ld de,0
  72. wasmouseevent=$
  73.         ret ;NC=no error, nz=event ;/nop
  74.         or a ;z/nz
  75.         ret
  76.  
  77. yieldgetkeyloop
  78. ;wait key from stdin (out: A=keylang, C=keynolang(???TODO), CY=error)
  79. ;в одном фрейме может прийти много кнопок (управляющий esc-код)!
  80.         ;jr yieldgetkey_afteryield
  81. ;yieldgetkey_nokey
  82. ;может быть, мы в середине esc-кода? тогда надо yieldgetkeyloop
  83.         ;ld a,(term_prfsm_curstate)
  84.         ;dec a
  85.         ;jr nz,yieldgetkeyloop
  86.         ld c,CMD_YIELD
  87.         call BDOS       ;YIELD
  88.         call getkey
  89.         ret c ;error
  90.         ;ret nz ;event
  91.         ;or a ;cp NOKEY ;keylang==0?
  92.         ;jr nz,$+3
  93.         ;cp c ;keynolang==0?
  94.         jr z,yieldgetkeyloop ;no event
  95.          scf
  96.          ccf ;no error
  97.         ret
  98. ;yieldgetkey_nokey
  99. ;может быть, мы в середине esc-кода? тогда надо yieldgetkeyloop
  100. ;        ld a,(term_prfsm_curstate)
  101. ;        dec a
  102. ;        jr nz,yieldgetkeyloop
  103.  
  104. ;последовательности слать одним куском!
  105.  
  106. scrolldown
  107. ;de=topyx, hl=hgt,wid
  108. ;x, wid even
  109.         ld b,h ;hgt
  110.         ld c,l ;wid
  111.         ld hl,stdoutbuf
  112.        push hl
  113.         ld (hl),0x1b
  114.         inc hl
  115.         ld (hl),'['
  116.         inc hl
  117.         ld a,c ;wid
  118.         call sendchar_num
  119.         ld (hl),';'
  120.         inc hl
  121.         ld a,b ;hgt
  122.         call sendchar_num
  123.         ld (hl),';'
  124.         inc hl
  125.         ld a,e ;topx
  126.         call sendchar_num
  127.         ld (hl),';'
  128.         inc hl
  129.         ld a,d ;topy
  130.         call sendchar_num
  131.         ld (hl),'d' ;NON-STANDARD!!!
  132.         jr setcolorqq
  133.        
  134. scrollup
  135. ;de=topyx, hl=hgt,wid
  136. ;x, wid even
  137.         ld b,h ;hgt
  138.         ld c,l ;wid
  139.         ld hl,stdoutbuf
  140.        push hl
  141.         ld (hl),0x1b
  142.         inc hl
  143.         ld (hl),'['
  144.         inc hl
  145.         ld a,c ;wid
  146.         call sendchar_num
  147.         ld (hl),';'
  148.         inc hl
  149.         ld a,b ;hgt
  150.         call sendchar_num
  151.         ld (hl),';'
  152.         inc hl
  153.         ld a,e ;topx
  154.         call sendchar_num
  155.         ld (hl),';'
  156.         inc hl
  157.         ld a,d ;topy
  158.         call sendchar_num
  159.         ld (hl),'u' ;NON-STANDARD!!!
  160.         jr setcolorqq
  161.  
  162. setcolor
  163. ;set color attribute (in: d=paper, e=ink)
  164. ;CSI Pm m Character Attributes (SGR)
  165. ;Ps = 30  Set foreground color to Black.
  166. ;Ps = 31  Set foreground color to Red.
  167. ;Ps = 32  Set foreground color to Green.
  168. ;Ps = 33  Set foreground color to Yellow.
  169. ;Ps = 34  Set foreground color to Blue.
  170. ;Ps = 35  Set foreground color to Magenta.
  171. ;Ps = 36  Set foreground color to Cyan. (Grey?)
  172. ;Ps = 37  Set foreground color to White.
  173. ;Ps = 39  Set foreground color to default, ECMA-48 3rd.
  174. ;Ps = 40  Set background color to Black.
  175. ;Ps = 41  Set background color to Red.
  176. ;Ps = 42  Set background color to Green.
  177. ;Ps = 43  Set background color to Yellow.
  178. ;Ps = 44  Set background color to Blue.
  179. ;Ps = 45  Set background color to Magenta.
  180. ;Ps = 46  Set background color to Cyan.
  181. ;Ps = 47  Set background color to White.
  182. ;Ps = 49  Set background color to default, ECMA-48 3rd.
  183. ;Ps = 8   Invisible, i.e., hidden, ECMA-48 2nd, VT300. (не работает в Putty!!!)
  184. ;Ps = 28  Visible, i.e., not hidden, ECMA-48 3rd, VT300. (не работает в Putty!!!)
  185. ;Assume that xterm's resources are set so that the ISO color codes are the first 8 of a set of 16. Then the aixterm colors are the bright versions of the ISO colors:
  186. ;Ps = 90  Set foreground color to Black.
  187. ;Ps = 91  Set foreground color to Red.
  188. ;Ps = 92  Set foreground color to Green.
  189. ;Ps = 93  Set foreground color to Yellow.
  190. ;Ps = 94  Set foreground color to Blue.
  191. ;Ps = 95  Set foreground color to Magenta.
  192. ;Ps = 96  Set foreground color to Cyan.
  193. ;Ps = 97  Set foreground color to White.
  194. ;TODO 1  -  BRIGHT ON: Включение яркости INK. (Bold, VT100.)
  195. ;TODO 22 - Normal (neither bold nor faint), ECMA-48 3rd. [21  -  BRIGHT OFF: Выключение яркости INK. (Doubly-underlined, ECMA-48 3rd.)]
  196.         ld hl,stdoutbuf
  197.        push hl
  198.         ld (hl),0x1b
  199.         inc hl
  200.         ld (hl),'['
  201.         inc hl
  202.         ld a,e ;a=ink
  203.         cp 8
  204.         jr c,$+4
  205.         add a,90-30-8
  206.         add a,30
  207.         call sendchar_num
  208.         ld (hl),';'
  209.         inc hl
  210.         ld a,d ;a=paper
  211.         and 7
  212.         add a,40
  213. setcolorq
  214.         call sendchar_num
  215.         ld (hl),'m'
  216. setcolorqq
  217.         inc hl
  218.        pop de
  219.        or a
  220.        sbc hl,de ;de=buf, hl=size
  221.         jp sendchars
  222.  
  223. setcolor_invisible
  224.         ld hl,stdoutbuf
  225.        push hl
  226.         ld (hl),0x1b
  227.         inc hl
  228.         ld (hl),'['
  229.         inc hl
  230.         ld a,8
  231.         jr setcolorq
  232.        
  233. setcolor_visible
  234.         ld hl,stdoutbuf
  235.        push hl
  236.         ld (hl),0x1b
  237.         inc hl
  238.         ld (hl),'['
  239.         inc hl
  240.         ld a,28
  241.         jr setcolorq
  242.  
  243. clearrestofline
  244.         ld hl,stdoutbuf
  245.        push hl
  246.         ld (hl),0x1b
  247.         inc hl
  248.         ld (hl),'['
  249.         inc hl
  250.         ld (hl),'K'
  251.         jr setcolorqq
  252.  
  253. clearterm
  254.         ld a,0x0d ;carriage return
  255.         call sendchar
  256. stdiohgt=$+1
  257.         ld b,25
  258.         dec b
  259. clearterm0
  260.         push bc
  261.         ;ld de,clearterm_data
  262.         ;ld hl,80
  263.         ;call sendchars
  264.         call clearrestofline_crlf
  265.         pop bc
  266.         djnz clearterm0
  267.         ;ld de,clearterm_data
  268.         ;ld hl,79
  269.         ;call sendchars
  270.         call clearrestofline
  271.         ld de,0
  272.         jp setxy
  273.  
  274. clearrestofline_crlf
  275.         ld de,tclearrestofline_crlf
  276.         ld hl,tclearrestofline_crlf_sz
  277.         jp sendchars
  278. tclearrestofline_crlf
  279.         DEFB 0x1b,'[','K',0x0d,0x0a
  280. tclearrestofline_crlf_sz=$-tclearrestofline_crlf
  281.  
  282. setxy
  283. ;set cursor position (in: de=YX, top left is 0;0)
  284.         ld hl,stdoutbuf
  285.        push hl
  286.         ;push de
  287.         ;ld a,0x1b
  288.         ;call sendchar_byte_a
  289.         ld (hl),0x1b
  290.         inc hl
  291.         ;ld a,'['
  292.         ;call sendchar_byte_a
  293.         ld (hl),'['
  294.         inc hl
  295.         ;pop de
  296.         ;push de
  297.         ld a,d ;y
  298.         inc a
  299.         call sendchar_num
  300.         ;ld a,';'
  301.         ;call sendchar_byte_a
  302.          ld (hl),';'
  303.          inc hl
  304.         ;pop de
  305.         ld a,e ;x
  306.         inc a
  307.         call sendchar_num
  308.         ;ld a,'H'
  309.         ld (hl),'H'
  310.         jp setcolorqq
  311.  
  312. setx
  313. ;set cursor X position (in: e=X, left is 0)
  314.         ld hl,stdoutbuf
  315.        push hl
  316.         ld (hl),0x1b
  317.         inc hl
  318.         ld (hl),'['
  319.         inc hl
  320.         ld a,e ;x
  321.         inc a
  322.         call sendchar_num
  323.         ld (hl),'G'
  324.         jp setcolorqq
  325.  
  326. sendchar_num
  327. ;a=num
  328.         push bc
  329.         ld c,'0'-1
  330.         inc c
  331.         sub 10
  332.         jr nc,$-3
  333.         ;push af
  334.         ;ld a,c
  335.         ;call sendchar_byte_a
  336.         ;pop af
  337.          ld (hl),c
  338.          inc hl
  339.         add a,'0'+10
  340.         ;jr sendchar_byte_a
  341.          ld (hl),a
  342.          inc hl
  343.         pop bc
  344.         ret
  345.  
  346. sendchar
  347.         ;cp 0x80
  348.         ;jr nc,sendchar_rustoutf8
  349. ;sendchar_byte_a
  350.         ld (stdoutbuf),a
  351.         ld hl,1
  352.         ld de,stdoutbuf
  353. sendchars
  354. ;send chars to stdout (in: de=buf, hl=size, out: A=error)
  355.        ; if 0
  356.         ; xor a
  357.         ; ld (sendchars_yieldkeepcount),a
  358.        ; endif
  359. sendchars0
  360.         push de
  361.         push hl
  362. stdouthandle=$+1
  363.         ld b,0
  364.         ld c,CMD_WRITEHANDLE
  365.         call BDOS;OS_WRITEHANDLE ;1436t ;[2718t (1225 before BDOS_writehandle + 195 before BDOS_writehandle_pipe + 477 ..findpipe_byhandle + 301 pipe + 192 end BDOS_writehandle + 326 end BDOS)]
  366.         ld b,h
  367.         ld c,l ;bytes actually written
  368.         pop hl
  369.         pop de
  370.          or a
  371.           ret nz ;error ;TODO обработать? а так пока просто избегаем зацикливания
  372.          sbc hl,bc ;datasize-byteswritten
  373.          ret z
  374.          ex de,hl
  375.          add hl,bc ;dataaddr+byteswritten
  376.          ex de,hl
  377. ;hl=remaining data size
  378. ;de=remaining data addr
  379.         push de
  380.         push hl
  381.        ; if 0
  382. ; ;чтобы избежать бесконечного YIELDKEEP с постоянным попаданием прерывания в керналь
  383. ; ;ограничим число YIELDKEEP, а потом будет YIELD
  384.          ; ld a,b
  385.          ; or c ;bc=bytes actually written
  386.          ; jr z,sendchars_nofail ;NC
  387. ; sendchars_yieldkeepcount=$+1
  388.         ; ld a,0
  389.         ; add a,128
  390.         ; ld (sendchars_yieldkeepcount),a
  391. ; sendchars_nofail ;NC
  392.         ; ;ld c,CMD_YIELDKEEP
  393.         ; ;jr nc,$+4
  394.         ; ;ld c,CMD_YIELD
  395.         ; ;call BDOS
  396.        ; else
  397.         ; YIELDKEEP ;2158t        
  398.         ld c,CMD_YIELDKEEP
  399.         call BDOS
  400.        ; endif
  401.         pop hl
  402.         pop de
  403.         jr sendchars0
  404.  
  405. ;receivechars - read chars from stdin
  406. receivechars
  407. ;de=buf, hl=size
  408. ;out: de=end addr in buf (if EOF), CY=error(EOF))
  409. receivechars0
  410.         push de
  411.         push hl
  412.         ld a,(stdinhandle)
  413.         ld b,a
  414.         ld c,CMD_READHANDLE
  415.         call BDOS ;OS_READHANDLE ;hl=size actually received
  416.         ld b,h
  417.         ld c,l
  418.         pop hl
  419.         pop de
  420.         or a
  421.         scf
  422.         ret nz ;error
  423.         ex de,hl
  424.         add hl,bc ;addr+=readed
  425.         ex de,hl
  426.         or a
  427.         sbc hl,bc ;size-=readed
  428.         jr nz,receivechars0
  429.         ret
  430.  
  431. receivechar
  432. ;read char from stdin (out: A=char(maybe 0), CY=error)
  433. stdindatacount=$+1
  434.         ld a,0
  435.         or a
  436.         jr z,receivechar_doreceive
  437.         dec a
  438.         ld (stdindatacount),a
  439. stdindatapointer=$+1
  440.         ld hl,0
  441.         ld a,(hl)
  442.         inc hl
  443.         ld (stdindatapointer),hl
  444.         or a ;NC=no error
  445.         ret
  446. receivechar_doreceive
  447.         ld hl,STDINBUF_SZ
  448.         ld de,stdinbuf
  449.         ld (stdindatapointer),de
  450. stdinhandle=$+1
  451.         ld b,0
  452.         ld c,CMD_READHANDLE
  453.         call BDOS ;OS_READHANDLE ;hl=size actually received
  454.         or a
  455.         scf
  456.         ret nz ;error
  457.         ld a,h
  458.         or l
  459.         ;ld c,a
  460.         ret z ;NC=no error
  461.         ;ld a,l
  462.         ld (stdindatacount),a
  463.         jr receivechar
  464.  
  465. receivekey
  466. ;read key from stdin (out: A=keylang, C=keynolang(???TODO), CY=error)
  467.         call receivechar
  468.         ret c ;error
  469.          or a
  470.          ld c,a
  471.          ret z ;NC=no error
  472. ;a=char
  473. TERM_ST_SINGLE=1 ;1: wait for single symbol
  474. TERM_ST_AFTERESC=2 ;2: after 0x1b
  475. TERM_ST_AFTERESCBRACKET=3 ;3: after 0x1b [ [number] (might be more digits)
  476. TERM_ST_AFTERMOUSE=4
  477. TERM_ST_AFTERMOUSEb=5
  478. TERM_ST_AFTERMOUSEbx=6
  479. term_prfsm_curstate=$+1
  480.         ld b,TERM_ST_SINGLE
  481.         djnz term_prfsm_nosingle
  482.          ;cp 0x0a
  483.          ;ld c,0x0d
  484.          ;jp z,term_prfsm_keycok
  485.         cp 0x1b
  486.         ld c,a
  487.         jp nz,term_prfsm_keycok
  488.         ld hl,term_prfsm_curstate
  489.         inc (hl) ;TERM_ST_AFTERESC
  490.         jp term_prfsm_nokey
  491. term_prfsm_nosingle
  492.         djnz term_prfsm_noafteresc
  493.         cp 'O'
  494.         jr z,escO
  495.         ;cp '['
  496.         ld c,0x1b
  497.         cp c
  498.         jp z,term_prfsm_keycok ;esc esc -> esc_key
  499. escO ;костыль! esc O P/Q/R/S = F1..F4
  500.         ld hl,term_prfsm_curstate
  501.         inc (hl) ;TERM_ST_AFTERESCBRACKET
  502. term_prfsm_0curnumber_nokey
  503.         xor a
  504.         ld (term_prfsm_curnumber),a
  505.         ;xor a ;no key, no error
  506.         ld c,a
  507.         ret
  508. term_prfsm_noafteresc
  509.         djnz term_prfsm_noafterescbracket
  510.         sub '0'
  511.         cp 10
  512.         jr nc,term_prfsm_afterescbracket_nonumber
  513.         ld e,a
  514.         ld hl,term_prfsm_curnumber
  515.         ld a,(hl)
  516.         add a,a
  517.         add a,a
  518.         add a,(hl)
  519.         add a,a ;*10
  520.         add a,e
  521.         ld (hl),a
  522.         jr term_prfsm_nokey
  523. term_prfsm_afterescbracket_nonumber
  524.         add a,'0'
  525.         cp ';'
  526.         jr nz,term_prfsm_afterescbracket_nosemicolon
  527.         ld a,(term_prfsm_curnumber)
  528.         ld (term_prfsm_curnumber1),a
  529.         jr term_prfsm_0curnumber_nokey
  530. term_prfsm_afterescbracket_nosemicolon
  531.         ld hl,term_prfsm_curstate
  532.         ld (hl),TERM_ST_SINGLE
  533.         ;cp 'H'
  534.         cp '~'
  535.         jp z,term_prfsm_afterescbracket_tilde
  536.         cp 'A'
  537.         ld c,key_up
  538.         jr z,term_prfsm_keycok
  539.         cp 'B'
  540.         ld c,key_down
  541.         jr z,term_prfsm_keycok
  542.         cp 'C'
  543.         ld c,key_right
  544.         jr z,term_prfsm_keycok
  545.         cp 'D'
  546.         ld c,key_left
  547.         jr z,term_prfsm_keycok
  548.          cp 'P'
  549.          ld c,key_F1
  550.          jr z,term_prfsm_keycok
  551.          cp 'Q'
  552.          ld c,key_F2
  553.          jr z,term_prfsm_keycok
  554.          cp 'R'
  555.          ld c,key_F3
  556.          jr z,term_prfsm_keycok
  557.          cp 'S'
  558.          ld c,key_F4
  559.          jr z,term_prfsm_keycok
  560.         cp 'M'
  561.         jr z,term_prfsm_mouse
  562. term_prfsm_nokey
  563.         xor a ;no key, no error
  564.         ld c,a
  565.         ret
  566. ;escO
  567. ;        jr $
  568. term_prfsm_noafterescbracket
  569.         djnz term_prfsm_noaftermouse
  570.         ld hl,term_prfsm_curstate
  571.         inc (hl) ;TERM_ST_AFTERMOUSEb
  572.          and 0x1f ;TODO как отличить движение мыши от unclick?
  573.          ld l,0xff
  574.          dec a
  575.          jr nz,$+3
  576.          dec l
  577.          dec a
  578.          jr nz,$+4
  579.          res 1,l
  580.          dec a
  581.          jr nz,$+4
  582.          res 2,l
  583.          ld a,l
  584.          ld (stdio_mousebuttons),a
  585.         xor a ;no key, no error
  586.         ld c,a
  587.         ret
  588. term_prfsm_noaftermouse
  589.         djnz term_prfsm_aftermousebx;term_prfsm_noaftermouseb
  590.         ld hl,term_prfsm_curstate
  591.         inc (hl) ;TERM_ST_AFTERMOUSEbx
  592.          sub 32
  593.          ld (stdio_mousex),a
  594.         xor a ;no key, no error
  595.         ld c,a
  596.         ret
  597. term_prfsm_aftermousebx
  598.         ld hl,term_prfsm_curstate
  599.         ld (hl),TERM_ST_SINGLE
  600.          sub 32
  601.          ld (stdio_mousey),a
  602.         ld a,0xc9
  603.         ld (wasmouseevent),a
  604.         xor a ;no key, no error
  605.         ld c,a
  606.         ret
  607.  
  608. term_prfsm_keycok
  609.         ld hl,term_prfsm_curstate
  610.         ld (hl),TERM_ST_SINGLE
  611.         xor a
  612.         or c ;NC=no error
  613.         ret
  614. term_prfsm_mouse
  615.         ld hl,term_prfsm_curstate
  616.         ld (hl),TERM_ST_AFTERMOUSE
  617.         xor a ;no key, no error
  618.         ld c,a
  619.         ret
  620.  
  621. term_prfsm_afterescbracket_tilde
  622.         ld a,(term_prfsm_curnumber)
  623. ;        if 1==1
  624. ;        display $
  625.         cp tcontrolkeys_sz
  626.         jr nc,term_prfsm_nokey
  627.         ld hl,tcontrolkeys
  628.         add a,l
  629.         ld l,a
  630.         jr nc,$+3
  631.         inc h
  632.         ld c,(hl)
  633.         jr term_prfsm_keycok
  634. ;        else
  635. ;        cp 3
  636. ;        ld c,key_del
  637. ;        jr z,term_prfsm_keycok
  638. ;        cp 1
  639. ;        ld c,key_home
  640. ;        jr z,term_prfsm_keycok
  641. ;        cp 4
  642. ;        ld c,key_end
  643. ;        jr z,term_prfsm_keycok
  644. ;        cp 2
  645. ;        ld c,key_ins
  646. ;        jr z,term_prfsm_keycok
  647. ;        cp 5
  648. ;        ld c,key_pgup
  649. ;        jr z,term_prfsm_keycok
  650. ;        cp 6
  651. ;        ld c,key_pgdown
  652. ;        jr z,term_prfsm_keycok
  653. ;        endif
  654.         jr term_prfsm_nokey
  655.  
  656. tcontrolkeys
  657.         DEFB 0
  658.         DEFB key_home ;1
  659.         DEFB key_ins ;2
  660.         DEFB key_del ;3
  661.         DEFB key_end ;4
  662.         DEFB key_pgup ;5
  663.         DEFB key_pgdown ;6
  664.         DEFB 0 ;7
  665.         DEFB 0 ;8
  666.         DEFB 0 ;9
  667.         DEFB 0 ;10
  668.         DEFB key_F1 ;11
  669.         DEFB key_F2 ;12
  670.         DEFB key_F3 ;13
  671.         DEFB key_F4 ;14
  672.         DEFB key_F5 ;15
  673.         DEFB 0 ;16
  674.         DEFB key_F6 ;17
  675.         DEFB key_F7 ;18
  676.         DEFB key_F8 ;19
  677.         DEFB key_F9 ;20
  678.         DEFB key_F10 ;21
  679.         ;DEFB 0 ;22
  680.         ;DEFB key_F11 ;23
  681.         ;DEFB key_F12 ;24
  682. tcontrolkeys_sz=$-tcontrolkeys
  683.  
  684. term_prfsm_curnumber
  685.          DEFB 0
  686. term_prfsm_curnumber1
  687.          DEFB 0
  688.  
  689. stdoutbuf
  690.         DEFB "-[00;00;00;00u"
  691.  
  692. stdinbuf
  693.         DEFS STDINBUF_SZ
  694.