Subversion Repositories NedoOS

Rev

Rev 670 | Rev 1168 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

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