Subversion Repositories NedoOS

Rev

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