home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / oakfep / oak.asm < prev    next >
Assembly Source File  |  1990-06-14  |  29KB  |  1,639 lines

  1. .286c
  2.  
  3.     page        60,130
  4.     title        Master
  5. ;
  6. ;
  7. ;
  8. ;
  9.  
  10. code    segment
  11.     assume        cs:code,ds:code,es:code,ss:code
  12.  
  13. p_size    equ    p_end-entry+100h
  14.  
  15.     org    100h
  16. entry:    jmp    main
  17.  
  18. dn_cnt    equ    7
  19. drv_nam    db    'OAK2FEP'
  20.  
  21.  
  22.  
  23. TRUE    equ    1
  24. FALSE    equ    0
  25. ;
  26. ;キーアドレス
  27. ;
  28. sCAP    equ    55h
  29. sHIRA    equ    56h
  30. sKATA    equ    5Ah
  31.  
  32. sEIJI    equ    6Ah
  33. sEIKO    equ    6Fh
  34. sMUHEN    equ    57h
  35. sHENKAN    equ    58h
  36.  
  37. sKANJI    equ    59h
  38. sZENHAN    equ    71h
  39.  
  40. ;
  41. ;モ-ドフラグ
  42. ;
  43. mKANJI    equ    0002h
  44. mROMA    equ    0008h
  45. mZEN    equ    0020h
  46. mKATA    equ    0080h
  47. mHIRA    equ    0100h
  48.  
  49. ;
  50. ;  かな漢字変換用構造体定義
  51. ;
  52. Funcparm    struc
  53.     wFunc        dw    ?
  54.     wMode        dw    ?
  55.     lpKkname    dd    far
  56.     lpDataparm    dd    far
  57.     wHandle        dw    ?
  58.     Reserved_f    db    2 dup(0)
  59. Funcparm    ends
  60.  
  61. Kkname        struc
  62.     wLevel        dw    ?
  63.     rgchName    db    8 dup(?)
  64.     rgchVersion    db    4 dup(?)
  65.     rgchRevision    db    4 dup(?)
  66.     Reserved_k    db    14 dup(0)
  67. Kkname        ends
  68.  
  69. Dataparm    struc
  70.     wType        dw    0
  71.     wScan        dw    0
  72.     wAscii        dw    0
  73.     wStatus        dw    0
  74.  
  75.     cchResult    dw    0
  76.     lpchResult    dd    far
  77.  
  78.     cchMode        dw    0
  79.     lpchMode    dd    far
  80.     lpattrMode    dd    far
  81.  
  82.     cchSystem    dw    0
  83.     lpchSystem    dd    far
  84.     lpattrSystem    dd    far
  85.  
  86.     cchBuf        dw    0
  87.     lpchBuf        dd    far
  88.     lpattrBuf    dd    far
  89.     cchBufCursor    dw    0
  90.     cchBufAct    dw    0
  91.  
  92.     cchHomonym    dw    0
  93.     lpchHomonym    dd    far
  94.     cchHomonymAct    dw    0
  95.     cchHomonymTotal    dw    0
  96.     cchHomonymNum    dw    0
  97.  
  98.     fKanji        dw    ?
  99.     fNtype        dw    ?
  100.  
  101.     Reserved_d    db    16 dup(0)
  102. Dataparm    ends
  103.  
  104. ;
  105. ;
  106. ;
  107. MAX_X    equ    80
  108. MAX_Y    equ    24
  109.  
  110. ;
  111. ;  データ領域
  112. ;
  113.  
  114. fnc    Funcparm    <>
  115. knm    Kkname        <>
  116. dat    Dataparm    <>
  117. buf_size    equ    100
  118. buf        db    8 dup(buf_size dup(0))
  119. vct_90h        dd    far
  120. vct_91h        dd    far
  121. Slock        db    FALSE
  122. modeW        dw    0056h or 8000h
  123. modeB        dd    far
  124.         dd    far
  125. modeS        db    34h,41h, 21h,21h, ' ', 31h,51h, 3Eh,2Eh
  126. modeA        db    1,0,7,0,3,0,7,0        ;
  127.         db    1,0,7,0,3,0,7,0
  128.         db    0,0,7,0
  129.         db    1,0,7,0,3,0,7,0
  130.         db    1,0,7,0,3,0,7,0
  131. old_cchS    dw    0
  132.         db    4*buf_size dup(0)
  133. old_cchB    dw    0
  134.         db    4*buf_size dup(0)
  135. cchR_p        dw    0
  136. color        dd    0
  137. bak_xy        dw    0
  138. ent_xy        dw    0
  139. dmy_key        db    0
  140. k_kind        db    ?
  141. key_tbl        db    16 dup(?)
  142.  
  143. enc_cnt        dw    0        ;bug fixed at v1.00
  144. enc_str        db    7 dup (0)
  145.  
  146.  
  147. pf_key_tbl    db    01h,80h, 2,1Bh,'S'    ;PF1
  148.         db    02h,80h, 2,1Bh,'T'    ;PF2
  149.         db    03h,80h, 2,1Bh,'U'    ;PF3
  150.         db    04h,80h, 2,1Bh,'V'    ;PF4
  151.         db    05h,80h, 2,1Bh,'W'    ;PF5
  152.         db    06h,80h, 2,1Bh,'E'    ;PF6
  153.         db    07h,80h, 2,1Bh,'J'    ;PF7
  154.         db    08h,80h, 2,1Bh,'P'    ;PF8
  155.         db    09h,80h, 2,1Bh,'Q'    ;PF9
  156.         db    0ah,80h, 2,1Bh,'Z'    ;PF10
  157.  
  158.         db    0bh,80h, 2,1Bh,'S'    ;PF11
  159.         db    1dh,80h, 2,1Bh,'T'    ;PF12
  160.         db    21h,80h, 2,1Bh,'U'    ;PF13
  161.         db    22h,80h, 2,1Bh,'V'    ;PF14
  162.         db    23h,80h, 2,1Bh,'W'    ;PF15
  163.         db    24h,80h, 2,1Bh,'E'    ;PF16
  164.         db    25h,80h, 2,1Bh,'J'    ;PF17
  165.         db    26h,80h, 2,1Bh,'P'    ;PF18
  166.         db    27h,80h, 2,1Bh,'Q'    ;PF19
  167.         db    28h,80h, 2,1Bh,'Z'    ;PF20
  168.  
  169.         db    12h,00h, 2,1Bh,'P'    ;[INS]
  170.         db    7fh,00h, 2,1Bh,'V'    ;[DEL]
  171.         db    18h,80h, 0        ;[半角/全角]
  172.         db    1ch,80h, 0        ;[かな漢字]
  173.         db    0,0
  174.  
  175. o_msg    db    'FM-Towns OAK/2 フロントエンドプロセッサーV1.04'
  176.     db    0Dh,0Ah,0Dh,0Ah
  177.     db    'Programmed by N.YAMAZAKI',0Dh,0Ah
  178.     db    'Investigated by K.MIYAZAKI Thanks a lot.',0Dh,0Ah
  179. o_msgL    equ    $-o_msg
  180. o_msg1    db    'OAK/2FEP常駐しまっせ~!',0Dh,0Ah
  181. o_msg1L    equ    $-o_msg1
  182. o_msg2    db    'OAK/2FEP解除したで~!',0Dh,0Ah
  183. o_msg2L    equ    $-o_msg2
  184.  
  185. t1_msg    db    '単語登録 '
  186.     db    '登録位置にカ-ソルを移動して実行キ-を押してください'
  187. t1_msgL    equ    $-t1_msg
  188. t1_atr    db    8 dup (8),t1_msgL-8 dup(1)
  189. t2_msg    db    '単語登録 '
  190.     db    '登録範囲を指定してください'
  191. t2_msgL    equ    $-t2_msg
  192.  
  193. ;
  194. ;  かな漢字変換関数
  195. ;
  196. KKfunc    proc    near
  197.     push    es
  198.     push    ds
  199.     push    bx
  200.     push    cx
  201.     push    dx
  202.     push    si
  203.     push    di
  204.     mov    ax,cs
  205.     mov    ds,ax
  206.     mov    es,ax
  207.  
  208.     mov    ax,fnc.wFunc
  209.     mov    bx,offset fnc
  210.     mov    cx,offset fnc
  211.     mov    dx,offset fnc
  212.     mov    di,offset fnc
  213.     mov    si,offset fnc
  214.  
  215.     int    0EEh
  216.     pop    di
  217.     pop    si
  218.     pop    dx
  219.     pop    cx
  220.     pop    bx
  221.     pop    ds
  222.     pop    es
  223.     ret
  224. KKfunc    endp
  225.  
  226. KKOpen    proc    near
  227.     mov    fnc.wFunc,2
  228.     mov    fnc.wHandle,1
  229.     mov    ax,ds
  230.     mov    word ptr fnc.lpKkname,offset knm
  231.     mov    word ptr fnc.lpKkname+2,ax
  232.     mov    word ptr fnc.lpDataparm,offset dat
  233.     mov    word ptr fnc.lpDataparm+2,ax
  234.     mov    dat.wType,1    ;0にしてもシステムではやってくれない(バカ!)
  235.     call    KKfunc
  236.     ret
  237. KKOpen    endp
  238.  
  239. KKClose    proc    near
  240.     mov    fnc.wFunc,3
  241.     mov    fnc.wMode,0
  242.     mov    word ptr fnc.lpKkname,0
  243.     mov    word ptr fnc.lpKkname+2,0
  244.     mov    word ptr fnc.lpDataparm,0
  245.     mov    word ptr fnc.lpDataparm+2,0
  246.     call    KKfunc
  247.     ret
  248. KKClose    endp
  249.  
  250. KKInOut    proc    near
  251.     mov    fnc.wFunc,4
  252.     mov    fnc.wMode,0
  253.     mov    word ptr fnc.lpKkname,0
  254.     mov    word ptr fnc.lpKkname+2,0
  255.     mov    ax,ds
  256.     mov    word ptr fnc.lpDataparm,offset dat
  257.     mov    word ptr fnc.lpDataparm+2,ax
  258.  
  259.     mov    word ptr dat.lpchResult,offset buf[0]
  260.     mov    word ptr dat.lpchResult+2,ax
  261.     mov    word ptr dat.lpchMode,offset buf[1*buf_size]
  262.     mov    word ptr dat.lpchMode+2,ax
  263.     mov    word ptr dat.lpattrMode,offset buf[2*buf_size]
  264.     mov    word ptr dat.lpattrMode+2,ax
  265.     mov    word ptr dat.lpchSystem,offset buf[3*buf_size]
  266.     mov    word ptr dat.lpchSystem+2,ax
  267.     mov    word ptr dat.lpattrSystem,offset buf[4*buf_size]
  268.     mov    word ptr dat.lpattrSystem+2,ax
  269.     mov    word ptr dat.lpchBuf,offset buf[5*buf_size]
  270.     mov    word ptr dat.lpchBuf+2,ax
  271.     mov    word ptr dat.lpattrBuf,offset buf[6*buf_size]
  272.     mov    word ptr dat.lpattrBuf+2,ax
  273.     mov    word ptr dat.lpchHomonym,offset buf[7*buf_size]
  274.     mov    word ptr dat.lpchHomonym+2,ax
  275.     call    KKfunc
  276.     ret
  277. KKInOut    endp
  278.  
  279. KKMode    proc    near
  280.     mov    fnc.wFunc,5
  281.     mov    word ptr fnc.lpKkname,0
  282.     mov    word ptr fnc.lpKkname+2,0
  283.     mov    ax,ds
  284.     mov    word ptr fnc.lpDataparm,offset dat
  285.     mov    word ptr fnc.lpDataparm+2,ax
  286.     call    KKfunc
  287.     ret
  288. KKMode    endp
  289.  
  290. KKTrans    proc    near
  291.     mov    fnc.wFunc,6
  292.     mov    fnc.wMode,0
  293.     mov    word ptr fnc.lpKkname,0
  294.     mov    word ptr fnc.lpKkname+2,0
  295.     mov    ax,ds
  296.     mov    word ptr fnc.lpDataparm,offset dat
  297.     mov    word ptr fnc.lpDataparm+2,ax
  298.     mov    fnc.wHandle,1
  299.  
  300.     mov    byte ptr dat.wScan,0
  301.     mov    byte ptr dat.wAscii,0
  302.     mov    byte ptr dat.wStatus,0
  303.     mov    word ptr dat.lpchMode,0
  304.     mov    word ptr dat.lpchMode+2,0
  305.     mov    word ptr dat.lpattrMode,0
  306.     mov    word ptr dat.lpattrMode+2,0
  307.     mov    word ptr dat.lpchSystem,offset buf[3*buf_size]
  308.     mov    word ptr dat.lpchSystem+2,ax
  309.     mov    word ptr dat.lpattrSystem,offset buf[4*buf_size]
  310.     mov    word ptr dat.lpattrSystem+2,ax
  311. ;    mov    word ptr dat.lpchBuf,0
  312. ;    mov    word ptr dat.lpchBuf+2,0
  313. ;    mov    word ptr dat.lpattrBuf,0
  314. ;    mov    word ptr dat.lpattrBuf+2,0
  315.     mov    word ptr dat.lpchHomonym,0
  316.     mov    word ptr dat.lpchHomonym+2,0
  317.     call    KKfunc
  318.     ret
  319. KKTrans    endp
  320.  
  321. ;
  322. ;
  323. ;
  324.  
  325. get_vct90h    macro
  326.         push    es
  327.         push    bx
  328.         mov    ax,3590h
  329.         int    21h
  330.         mov    word ptr vct_90h,bx
  331.         mov    ax,es
  332.         mov    word ptr vct_90h+2,ax
  333.         pop    bx
  334.         pop    es
  335.         endm
  336.  
  337. set_vct90h    macro
  338.         push    ds
  339.         push    dx
  340.         mov    dx,word ptr vct_90h
  341.         mov    ax,word ptr vct_90h+2
  342.         mov    ds,ax
  343.         mov    ax,2590h
  344.         int    21h
  345.         pop    dx
  346.         pop    ds
  347.         endm
  348.  
  349. INT90H        macro
  350.         pushf
  351.         call    [vct_90h]
  352.         endm
  353.  
  354. KYB_check    macro
  355.         mov    ah,07h
  356.         INT90H
  357.         endm
  358.  
  359. KYB_read    macro    sw
  360.         mov    ah,09h
  361.         mov    al,sw
  362.         INT90H
  363.         endm
  364.  
  365. KYB_matrix    macro
  366.         mov    di,offset key_tbl
  367.         mov    ah,0Ah
  368.         INT90H
  369.         endm
  370.  
  371. KYB_KindKb    macro
  372.         mov    ah,0FAh
  373.         int    90h
  374.         endm
  375.  
  376. KYB_setShift    macro
  377.         mov    ah,0FCh
  378.         INT90H
  379.         endm
  380.  
  381. KYB_read2_s    proc     near
  382. kr2s_lp1:    call    KYBN_check
  383.         cmp    dh,0FFh
  384.         je    kr2s_lp1
  385.         mov    ax,0900h
  386.         INT90H
  387.                 push    ax
  388.                 push    bx
  389.                 push    cx
  390.                 push    dx
  391.                 mov    cl,bh
  392. kr2s_apn31:     mov     ah,07h
  393.                 INT90H
  394.                 cmp     dh,0ffh
  395.                 je      kr2s_apn4
  396.  
  397.             cmp     bh,cl
  398.                 jne     kr2s_apn4
  399.  
  400.                 cmp     bh,4dh        ;bug fixed at v0.99
  401.                 je      kr2s_apn32
  402.                 cmp     bh,4fh
  403.                 je      kr2s_apn32
  404.                 cmp     bh,50h
  405.                 je      kr2s_apn32
  406.                 cmp     bh,51h
  407.                 je      kr2s_apn32
  408.         cmp    bh,4Bh
  409.         je    kr2s_apn32
  410.         cmp    bh,4Eh
  411.         je    kr2s_apn32
  412.                 cmp     bh,48h
  413.                 je      kr2s_apn32
  414.                 cmp     bh,72h
  415.                 je      kr2s_apn32
  416.                 cmp     bh,73h
  417.                 jne     kr2s_apn4
  418.  
  419. kr2s_apn32:     mov     ax,0900h
  420.                 INT90H
  421.                 jmp     kr2s_apn31
  422. kr2s_apn4:      
  423.                 pop     dx
  424.                 pop    cx
  425.                 pop     bx
  426.                 pop     ax
  427.                 ret
  428. KYB_read2_s    endp
  429.  
  430. KYB_read2    macro
  431.         call KYB_read2_s
  432.         endm
  433.  
  434. key_test    macro    scan
  435.         test    key_tbl[scan/8],(1 shl (scan mod 8))
  436.         endm
  437.  
  438. key_break    macro    scan
  439.         local    lp
  440. lp:            KYB_matrix
  441.             key_test    scan
  442.             jnz    short lp
  443.         endm
  444.  
  445. putchar        macro    char
  446.         mov    ah,1Dh
  447.         mov    al,char
  448.         int    91h
  449.         endm
  450.  
  451. getatr        macro
  452.         mov    di,offset color
  453.         mov    ah,12h
  454.         int    91h
  455.         endm
  456.  
  457. setatr        macro
  458.         mov    di,offset color
  459.         mov    ah,11h
  460.         int    91h
  461.         endm
  462.  
  463. getcur        macro
  464.         mov    ah,0Eh
  465.         int    91h
  466.         endm
  467.  
  468. setcur        macro
  469.         mov    ah,0Dh
  470.         int    91h
  471.         endm
  472.  
  473. com_atr        macro
  474.           mov    di,offset color
  475.           mov    ah,10h
  476.         int    91h
  477.         xor    byte ptr[di+1],28h
  478.         mov    ah,0Fh
  479.         int    91h
  480.         endm
  481. ;
  482. ; sjisto
  483. ;  bx:shift jis 漢字コード
  484. ;<return> bx:jis 漢字コード
  485. ;
  486.  
  487. sjisto    proc    near
  488.     cmp    bh,9fh
  489.     jbe    sjto1
  490.     sub    bh,0B1h-071h
  491. sjto1:  sub    bh,071h
  492.     shl    bh,1
  493.     inc    bh
  494.     cmp    bl,7fh
  495.     jbe    sjto2
  496.     dec    bl
  497. sjto2:    cmp    bl,9eh
  498.     jb    sjto3
  499.     sub    bl,7dh
  500.     inc    bh
  501.     jmp    sjto5
  502. sjto3:    sub    bl,1fh
  503. sjto5:    ret
  504. sjisto    endp
  505.  
  506. ;
  507. ; iskanji
  508. ;  bl:shift jis (上位)
  509. ;<return> C flug=1:漢字コード
  510. ;
  511.  
  512. iskanji        proc    near
  513.         cmp    bl,81h
  514.         jb     short ik1_ed
  515.         cmp    bl,0A0h
  516.         jae    short ik1_sk1
  517.         ret
  518. ik1_sk1:    cmp    bl,0E0h
  519.         jb    short ik1_ed
  520.         cmp    bl,0FDh
  521.         jae    short ik1_ed
  522.         ret
  523. ik1_ed:        clc
  524.         ret
  525. iskanji     endp
  526.  
  527.  
  528.  
  529. putatr        proc    near
  530.         push    di
  531.         mov    al,28h            ;attribute
  532.         mov    ah,[di]            ;color
  533.  
  534.         cmp    ah,7            ;白=>紫反転
  535.         jne    ps_sk10
  536.         mov    ah,3
  537.         jmp    ps_sk12
  538. ps_sk10:    cmp    ah,8            ;黒強調=>緑反転
  539.         jne    short ps_sk11
  540.         mov    ah,4
  541.         jmp    ps_sk12
  542. ps_sk11:    and    ah,07
  543.         cmp    ah,1            ;青=>白反転
  544.         jne    short ps_sk12
  545.         mov    ah,7
  546.  
  547. ps_sk12:    mov    di,offset color
  548.         mov    word ptr[di+1],ax
  549.         mov    ah,11h
  550.         int    91h
  551.         pop    di
  552.         ret
  553. putatr        endp
  554.  
  555.  
  556. putstr        proc    near
  557.         push    bp
  558.         push    bx
  559.         push    dx    ;+4
  560.         push    si    ;+2
  561.         push    di    ;+0
  562.         mov    bp,sp
  563.  
  564.         mov    cx,[di]
  565.         mov    ax,[si]
  566.         sub    cx,ax
  567.         jbe    ps_2
  568.         inc    cx        ;bug fixed at v0.99
  569.         inc    cx        ;
  570.         inc    cx        ;漢字コード対策用
  571.         cmp    al,0        ;
  572.         je    ps1_sk0        ;
  573.         inc    al        ;
  574. ps1_sk0:    add    dl,al
  575.         lea    di,[si+2]
  576.         shl    ax,2
  577.         add    di,ax
  578. ps1_lp1:    cmp    dl,80
  579.         jbe    ps1_sk1
  580.         sub    dl,80
  581.         inc    dh
  582. ps1_sk1:    mov    ah,14h
  583.         int    91h
  584.         mov    ah,10h
  585.         int    91h
  586. ps1_sk11:    mov    [di+3],bl
  587.         mov    [di],bh
  588.         add    di,4
  589.         inc    dl
  590.         loop    ps1_lp1
  591.  
  592. ps_2:        mov    di,[bp]
  593.         mov    cx,[di]
  594.         or    cx,cx
  595.         jne    ps_sk01
  596.         jmp    ps_sk1
  597.  
  598. ps_sk01:    mov    di,offset color
  599.         mov    ah,12h
  600.         int    91h
  601.         push    word ptr[color+1]
  602.         mov    di,[bp]
  603.  
  604.         mov    dx,[bp+4]        ;bug fixed at v1.01
  605.         mov    si,word ptr[di+2]
  606.         mov    di,word ptr[di+6]
  607. ps_lp1:
  608.         cmp    dl,80        ;bug fixed at v1.01
  609.         jb    ps_sk09        ;
  610.         test    dl,01h        ;
  611.         jne    ps_sk08        ;
  612.         inc    dl        ;
  613. ps_sk08:    sub    dl,80        ;
  614.         inc    dh        ;
  615. ps_sk09:
  616.         call    putatr
  617.         inc    di
  618.         
  619.         mov    bl,[si]            ;char:bug fixed at v1.01
  620.         xor    bh,bh
  621.         call    iskanji
  622.         jnc    ps_sk120
  623.  
  624.         mov    bh,bl
  625.         inc    si
  626.         mov    bl,[si]
  627.         call    sjisto
  628.         push    bx
  629.         mov    bl,bh
  630.         mov    bh,1
  631.         mov    ax,1300h
  632.         int    91h
  633.         pop    bx
  634.         mov    bh,3
  635.         inc    dl
  636.         dec    cx
  637.         call    putatr
  638.         inc    di
  639.  
  640. ps_sk120:    mov    ax,1300h
  641.         int    91h
  642.         inc    si
  643.         inc    dl
  644.         loop    ps_lp1
  645.  
  646.         pop    word ptr[color+1]
  647.         mov    di,offset color
  648.         mov    ah,11h
  649.         int    91h
  650.  
  651. ps_sk1:        mov    di,[bp]
  652.         mov    si,[bp+2]
  653.         mov    ax,[di]
  654.         mov    cx,[si]
  655.         mov    [si],ax
  656.         sub    cx,ax
  657.         jbe    short ps_end
  658.         inc    cx        ;bug fixed at v0.99
  659.         inc    cx        ;
  660.         mov    dx,[bp+4]
  661.         add    dl,al
  662.         lea    di,[si+2]
  663.         shl    ax,2
  664.         add    di,ax
  665. ps_lp2:        cmp    dl,80
  666.         jbe    ps3_sk1
  667.         sub    dl,80
  668.         inc    dh
  669. ps3_sk1:    mov    bl,[di+3]
  670.         mov    bh,[di]
  671.         mov    ax,1300h
  672.         int    91h
  673.         push    [di+2]
  674.         mov    byte ptr[di+3],0
  675.         mov    ah,0Fh
  676.         int    91h
  677.         pop    [di+2]
  678.         add    di,4
  679.         inc    dl
  680.         loop    ps_lp2
  681.  
  682. ps_end:        pop    di
  683.         pop    si
  684.         pop    dx
  685.         pop    bx
  686.         pop    bp
  687.         ret
  688. putstr        endp
  689.  
  690.  
  691.  
  692. clrstr        proc    near
  693.         mov    cx,[si]
  694.         or    cx,cx
  695.         je    short cs_end
  696.  
  697.         inc    cx        ;bug fixed at v0.99
  698.         inc    cx        ;
  699.         push    bx
  700.         lea    di,[si+2]
  701. cs_lp2:        cmp    dl,80
  702.         jbe    cs3_sk1
  703.         sub    dl,80
  704.         inc    dh
  705. cs3_sk1:    mov    bl,[di+3]
  706.         mov    bh,[di]
  707.         mov    ax,1300h
  708.         int    91h
  709.         mov    byte ptr[di+3],0
  710.         mov    ah,0Fh
  711.         int    91h
  712.         add    di,4
  713.         inc    dl
  714.         loop    cs_lp2
  715.         pop    bx
  716. cs_end:        ret
  717. clrstr        endp
  718.  
  719.  
  720. mode_chg    proc    near
  721.  
  722.         push    di
  723.         push    ax
  724.         push    cx
  725.  
  726.         test    modeW,01h
  727.           jz    short krn_edsk0
  728.             mov        modeW,8055h
  729.             test    bl,02h
  730.             jz        short krn_edsk0
  731.               xor    modeW,0C0h
  732.  
  733. krn_edsk0:    test    modeW,0008h
  734.         jne    short krn_edsk1
  735.           test    modeW,180h
  736.           jz    short krn_edsk1
  737.           or    bl,02h
  738.           mov    al,bl
  739.          jmp    short krn_edsk2
  740.  
  741. krn_edsk1:      and    bl,0FDh
  742.           mov    al,bl
  743. krn_edsk2:      KYB_setShift
  744.  
  745.         test    modeW,0002h
  746.         je    short krnc_sk11
  747.           mov    word ptr modeS[0],4134h        ;'漢'
  748.          jmp    short krnc_sk2
  749. krnc_sk11:      mov    word ptr modeS[0],2121h        ;'  '
  750. krnc_sk2:    test    modeW,0008h
  751.         je    short krnc_sk21
  752.           mov    modeS[4],'R'
  753.          jmp    short krnc_sk3
  754. krnc_sk21:      mov    modeS[4],' '
  755. krnc_sk3:    test    modeW,0020h
  756.         je    short krnc_sk31
  757.           mov    word ptr modeS[2],3441h        ;'全'
  758.          jmp    short krnc_sk4
  759. krnc_sk31:      mov    word ptr modeS[2],2121h        ;'  '
  760. krnc_sk4:    test    modeW,0040h
  761.         je    short krnc_sk42
  762.           mov    word ptr modeS[5],5131h        ;'英'
  763.           test    bl,01h
  764.           je    short krnc_sk411
  765.             mov    word ptr modeS[7],6742h        ;'大'
  766.            jmp    short krnc_sk5
  767. krnc_sk411:        mov    word ptr modeS[7],2E3Eh        ;'小'
  768.            jmp    short krnc_sk5
  769. krnc_sk42:    test    modeW,0080h
  770.         je    short krnc_sk43
  771.           mov    word ptr modeS[5],2B25h        ;'カナ'
  772.           mov    word ptr modeS[7],4A25h
  773.          jmp    short krnc_sk5
  774. krnc_sk43:      mov    word ptr modeS[5],2B24h        ;'かな'
  775.           mov    word ptr modeS[7],4A24h
  776.  
  777. krnc_sk5:    mov    cx,9
  778.         mov    dl,72+80h
  779.         mov    di,offset modeB
  780.         mov    ax,1F01h
  781.         int    91h
  782.         mov    ax,modeW
  783.         mov    fnc.wMode,ax
  784.         call    KKMode
  785.  
  786.         pop    cx
  787.         pop    ax
  788.         pop    di
  789.         ret
  790. mode_chg    endp
  791.  
  792. ;
  793. ;
  794. ;
  795.  
  796. KYBN_check    proc    near
  797.         KYB_matrix
  798.         KYB_check
  799.         cmp    dh,0FFh
  800.         je    krn_sk1
  801.  
  802.         cmp    dh,80h        ;PF key?
  803.         jne    kcn_sk1
  804.  
  805. ;
  806. ; For oyayubi shift
  807. ;
  808.         cmp    bh,57h        ;
  809.         je    kcn_sk0
  810.         cmp    bh,58h        ;
  811.         jne    kcn_sk01
  812. kcn_sk0:    cmp    k_kind,1    ;JIS?
  813.         je    kcn_sk01
  814.               and    modeW,803Fh
  815.               or    modeW,100h
  816.         push    dx        ; Bug Fix By Ken
  817.         push    bx
  818.         call    mode_chg
  819.         pop    bx
  820.         pop    dx
  821.         jmp    kcn_sk2        ; Bug Fix at v1.03
  822. kcn_sk01:    jmp    kcn_sk3
  823.  
  824.  
  825. kcn_sk1:    test    modeW,0020h    ;全角?
  826.         jne    kcn_sk2
  827.         test    modeW,0040h    ;英数入力モード?
  828.         jne    kcn_sk3
  829.         test    modeW,0108h    ;ローマ字入力モード or ひらがな?
  830.         jne    kcn_sk2
  831.         jmp    kcn_sk3        ;かな入力モード and かたかな.
  832.  
  833. kcn_sk2:    mov    ah,0FFh        ;変換の必要有り
  834.         ret
  835. kcn_sk3:    mov    ah,0        ;変換の必要なし
  836.         ret
  837.  
  838.  
  839. ;
  840. ; For JIS keybord
  841. ;
  842. krn_sk1:      key_test    sCAP
  843.           jz    short krn_sk2
  844.             key_break    sCAP
  845.            jmp    krn_end1
  846.  
  847. krn_sk2:      key_test    sHIRA
  848.           jz    short krn_sk3
  849.             test    bl,10h        ;CTRL
  850.             jz    short krn_sk22
  851.               test    Slock,TRUE
  852.               jnz    krn_sk21
  853.               xor    modeW,0Ch
  854. krn_sk21:          key_break    sHIRA
  855.              jmp    krn_end1
  856. krn_sk22:          test    Slock,TRUE
  857.               jnz    krn_sk23
  858.               xor    modeW,140h
  859. krn_sk23:          test    modeW,100h
  860.               je    short krn_sk21
  861.                and    modeW,813Fh
  862.              jmp    short krn_sk21
  863. krn_sk3:      key_test    sKATA
  864.           jz    short krn_sk4
  865.               test    Slock,TRUE
  866.               jnz    krn_sk32
  867.             xor        modeW,80h
  868.             test    modeW,80h
  869.             je        short krn_sk31
  870.               and    modeW,80BFh
  871.              jmp    short krn_sk32
  872. krn_sk31:          and    modeW,803Fh
  873.               or    modeW,40h
  874. krn_sk32:          key_break    sKATA
  875.               jmp    krn_end1
  876.  
  877. ;
  878. ; For oyayubi shift keybord
  879. ;
  880. krn_sk4:
  881.           key_test    sEIJI
  882.           jz    short krn_sk5
  883.             test    bl,10h        ;CTRL
  884.             jz    short krn_sk42
  885.               test    Slock,TRUE
  886.               jnz    krn_sk41
  887.               xor    modeW,0Ch
  888. krn_sk41:          key_break    sEIJI
  889.              jmp    krn_end1
  890. krn_sk42:          test    Slock,TRUE
  891.               jnz    krn_sk41
  892.               and    modeW,803Fh
  893.               or        modeW,040h
  894.              jmp    short krn_sk41
  895.  
  896. krn_sk5:      key_test    sEIKO
  897.           jz    short krn_sk6
  898.             test    Slock,TRUE
  899.             jnz        krn_sk52
  900.             test    modeW,040h
  901.             jne        krn_sk52
  902.              and        modeW,803Fh
  903.              or        modeW,080h
  904. krn_sk52:        key_break    sKATA
  905.             jmp    short krn_end1
  906.  
  907. ;
  908. ;
  909. ;
  910. krn_sk6:      key_test    sZENHAN
  911.           jz    krn_sk7
  912.               test    Slock,TRUE
  913.               jnz    krn_sk61
  914.             xor    modeW,30h
  915. krn_sk61:          key_break    sZENHAN
  916.             jmp    krn_end1
  917. krn_sk7:      key_test    sKANJI
  918.           jz    short krn_end2
  919.               test    Slock,TRUE
  920.               jnz    krn_sk71
  921.             xor        modeW,03h
  922. krn_sk71:        key_break    sKANJI
  923.  
  924. krn_end1:    call    mode_chg
  925.         mov    dx,0FFFFh
  926.         mov    bh,0FFh
  927. krn_end2:    ret
  928. KYBN_check    endp
  929.  
  930.  
  931.  
  932. enter_word    proc    near
  933.  
  934.         test    modeW,01h
  935.         jz    short ew_ent
  936.         jmp    ew_end3
  937.  
  938. ew_ent:        push    bp
  939.         push    dx
  940.         push    bx
  941.         push    ax
  942.  
  943.         mov    Slock,TRUE
  944.     mov    ax,ds
  945.     mov    byte ptr dat.wType,1
  946.     mov    word ptr dat.lpchResult,offset buf[0]
  947.     mov    word ptr dat.lpchResult+2,ax
  948.     mov    dat.cchResult,0
  949.  
  950.         getcur
  951.         push    dx
  952.         mov    bp,sp
  953.         mov    bak_xy,dx
  954.  
  955.         mov    dx,1901h
  956.         mov    di,offset dat.cchSystem
  957.         mov    word ptr[di],t1_msgL
  958.         mov    word ptr[di+2],offset t1_msg
  959.         mov    word ptr[di+6],offset t1_atr
  960.         mov    si,offset old_cchS
  961.         call    putstr
  962.  
  963. ew_lp1:        mov    dx,bak_xy
  964.         setcur
  965.         KYB_read2
  966.         mov    dx,bak_xy
  967.         cmp    bh,4Fh        ;left
  968.         jne    ew_sk1
  969.           dec    dl
  970.           cmp    dl,1
  971.           jae    ew_sk01
  972.             mov    dl,MAX_X
  973. ew_sk01:      mov    ah,14h
  974.           int    91h
  975.           cmp    bh,3
  976.           jne    ew_sk51
  977.             dec    dl
  978.           jmp    ew_sk51
  979. ew_sk1:        cmp    bh,51h        ;right
  980.         jne    ew_sk2
  981.           inc    dl
  982.           cmp    dl,MAX_X
  983.           jbe    ew_sk5
  984.             mov    dl,1
  985.           jmp    ew_sk5
  986. ew_sk2:        cmp    bh,4Dh        ;up
  987.         jne    ew_sk3
  988.           dec    dh
  989.           cmp    dh,1
  990.           jae    ew_sk5
  991.             mov    dh,MAX_Y
  992.           jmp    ew_sk5
  993. ew_sk3:        cmp    bh,50h        ;down
  994.         jne    ew_sk4
  995.           inc    dh
  996.           cmp    dh,MAX_Y
  997.           jbe    ew_sk5
  998.             mov    dh,1
  999.           jmp    ew_sk5
  1000. ew_sk4:        cmp    bh,72h        ;[取消]
  1001.         jne    ew_sk41
  1002.         jmp    ew_end
  1003. ew_sk41:    cmp    bh,73h        ;[実行]
  1004.         je    ew_next1
  1005. ew_sk5:        mov    ah,14h
  1006.         int    91h
  1007.         cmp    bh,3
  1008.         jne    ew_sk51
  1009.           inc    dl
  1010. ew_sk51:    mov    bak_xy,dx
  1011.         jmp    ew_lp1
  1012.  
  1013. ew_next1:    mov    dx,bak_xy
  1014.         mov    ent_xy,dx
  1015.  
  1016.         mov    dx,1901h
  1017.         mov    di,offset dat.cchSystem
  1018.         mov    word ptr[di],t2_msgL
  1019.         mov    word ptr[di+2],offset t2_msg
  1020.         mov    word ptr[di+6],offset t1_atr
  1021.         mov    si,offset old_cchS
  1022.         call    putstr
  1023.  
  1024.         xor    cx,cx
  1025. ew_lp2:        mov    dx,bak_xy
  1026.         setcur
  1027.         KYB_read2
  1028.         mov    dx,bak_xy
  1029.           push    bx
  1030.           mov    di,word ptr dat.lpchResult
  1031.           add    di,cx
  1032.           mov    ah,14h
  1033.           int    91h
  1034.           test    bh,1
  1035.           jne    ew_sk73
  1036.           mov    [di],bl
  1037.           jmp    ew_sk6001
  1038.  
  1039. ew_sk73:      push    dx
  1040.           push    bx
  1041.           inc    dl
  1042.           mov    ah,14h
  1043.           int    91h
  1044.           pop    dx
  1045.           mov    dh,bl
  1046.           mov    ah,03
  1047.           int    0AFh
  1048.           xchg    dh,dl
  1049.           mov    [di],dx
  1050.           pop    dx
  1051. ew_sk6001:      pop    bx
  1052.  
  1053.         cmp    bh,4Fh        ;left
  1054.         jne    ew_sk7
  1055.           dec    dl
  1056.           dec    cx
  1057.           cmp    cx,0
  1058.           jns    ew_sk601
  1059.           inc    dl
  1060.           inc    cx
  1061.           jmp    ew_sk9
  1062. ew_sk601:      cmp    dl,1
  1063.           jae    ew_sk61
  1064.             mov    dl,MAX_X
  1065.             dec    dh
  1066. ew_sk61:      com_atr
  1067.           cmp    byte ptr[di],3
  1068.           jne    ew_sk62
  1069.             dec    dl
  1070.             dec    cx
  1071.             com_atr
  1072. ew_sk62:      jmp    ew_sk9
  1073. ew_sk7:        cmp    bh,51h        ;right
  1074.         jne    ew_sk8
  1075.           com_atr
  1076.           inc    dl
  1077.           inc    cx
  1078.           cmp    cx,buf_size
  1079.           jbe    ew_sk701
  1080.           dec    dl
  1081.           dec    cx
  1082.           com_atr
  1083.           jmp    ew_sk9
  1084. ew_sk701:      cmp    dl,MAX_X
  1085.           jbe    ew_sk71
  1086.             mov    dl,1
  1087.             inc    dh
  1088. ew_sk71:        mov    di,offset color
  1089.             mov    ah,10h
  1090.           int    91h
  1091.           cmp    byte ptr[di],3
  1092.           jne    ew_sk9
  1093.             xor    byte ptr[di+1],28h
  1094.             mov    ah,0Fh
  1095.             int    91h
  1096.             inc    dl
  1097.             inc    cx
  1098.           jmp    ew_sk9
  1099. ew_sk8:        cmp    bh,72h        ;[取消]
  1100.         jne    ew_sk81
  1101.         jmp    ew_end
  1102. ew_sk81:    cmp    bh,73h        ;[実行]
  1103.         je    ew_next2
  1104. ew_sk9:        mov    bak_xy,dx
  1105.         jmp    ew_lp2
  1106.  
  1107. ew_next2:    mov    dat.cchResult,cx
  1108.         mov    dx,ent_xy
  1109.         setcur
  1110. ew_lp3:        com_atr
  1111.         inc    dl
  1112.         cmp    dl,MAX_X
  1113.         jbe    ew_lp31
  1114.           mov    dl,1
  1115.           inc    dh
  1116. ew_lp31:    loop    ew_lp3
  1117.  
  1118.         cmp    dat.cchResult,0
  1119.         je    ew_end
  1120.         call    KKTrans
  1121.  
  1122. ew_lp4:        mov    dx,1901h
  1123.         mov    di,offset dat.cchSystem
  1124.         mov    si,offset old_cchS
  1125.         call    putstr
  1126.         mov    dx,ent_xy
  1127.         mov    di,offset dat.cchBuf
  1128.         mov    si,offset old_cchB
  1129.         call    putstr
  1130.         mov    dx,[bp]
  1131.         setcur
  1132.  
  1133.         KYB_read2
  1134.         mov    byte ptr dat.wType,0
  1135.         mov    byte ptr dat.wScan,bh
  1136.         mov    byte ptr dat.wAscii,dl
  1137.         mov    byte ptr dat.wStatus,bl
  1138.         call    KKInOut
  1139.         cmp    dat.cchSystem,0
  1140.         jne    ew_lp4
  1141.  
  1142. ew_end:        mov    dx,1901h
  1143.         mov    si,offset old_cchS
  1144.         call    clrstr
  1145.         mov    old_cchS,0
  1146.         mov    dx,ent_xy
  1147.         mov    si,offset old_cchB
  1148.         call    clrstr
  1149.         mov    old_cchB,0
  1150.     mov    dat.cchSystem,0
  1151.     mov    word ptr dat.lpchSystem,offset buf[3*buf_size]
  1152.     mov    word ptr dat.lpchSystem+2,ax
  1153.     mov    word ptr dat.lpattrSystem,offset buf[4*buf_size]
  1154.     mov    word ptr dat.lpattrSystem+2,ax
  1155.  
  1156.         pop    dx
  1157.         setcur
  1158.         mov    Slock,FALSE
  1159.         pop    ax
  1160.         pop    bx
  1161.         pop    dx
  1162.         pop    bp
  1163. ew_end3:    ret
  1164. enter_word    endp
  1165.  
  1166. ;
  1167. ;
  1168. ;
  1169. key_bios    proc    far
  1170.         cmp    ah,09h        ;key_read
  1171.         je    b09_n
  1172.         cmp    ah,07h        ;key_check
  1173.         je    b07
  1174.         jmp    cs:[vct_90h]
  1175.  
  1176. b09_n:        jmp    b09
  1177.  
  1178. b07:        push    bp    ;+16
  1179.         push    es    ;+14
  1180.         push    ds    ;+12
  1181.         push    si    ;+10
  1182.         push    di    ;+8
  1183.         push    dx    ;+6
  1184.         push    cx    ;+4
  1185.         push    bx    ;+2
  1186.         push    ax    ;+0
  1187.         mov    bp,sp
  1188.         mov    ax,cs
  1189.         mov    ds,ax
  1190.         mov    es,ax
  1191.         sti
  1192.  
  1193.         cmp    dat.cchResult,0
  1194.         je    b07_sk11
  1195.         mov    cx,cchR_p
  1196.         cmp    cx,dat.cchResult
  1197.         jae    short b07_sk1
  1198.         mov    si,word ptr dat.lpchResult
  1199.         add    si,cchR_p
  1200.         xor    dh,dh
  1201.         mov    dl,[si]
  1202.         mov    bh,byte ptr dat.wScan    ;bug fixed at v1.01
  1203.         cmp    enc_cnt,0
  1204.         je    v101_fx1
  1205.         xor    bh,bh
  1206. v101_fx1:    mov    bl,byte ptr dat.wStatus
  1207.         mov    al,byte ptr dat.cchResult
  1208.         sub    al,byte ptr cchR_p
  1209.         jmp    b07_sk3
  1210.  
  1211. b07_sk1:    mov    cchR_p,0
  1212.         mov    dat.cchResult,0
  1213.         mov    al,0
  1214.         mov    dx,0FFFFh
  1215.         mov    bx,0FF00h
  1216.         jmp    b07_sk3
  1217.  
  1218. b07_sk11:    call    KYBN_check
  1219.         cmp    word ptr dat.cchBuf,0    ;未確定文字列があるか?
  1220.         jne    b07_sk2
  1221.         cmp    dh,0FFh
  1222.         je    b07_sk3
  1223.         cmp    dx,8015h    ;単語登録?
  1224.         jne    b07_sk12
  1225.         mov    ax,0900h
  1226.         INT90H
  1227.         call    enter_word
  1228.         mov    al,0
  1229.         mov    dx,0FFFFh
  1230.         mov    bx,0FF00h
  1231.         jmp    b07_sk3
  1232. b07_sk12:    cmp    ah,0FFh        ;変換の必要ありか?
  1233.         jne    b07_sk3        ;無い。
  1234.  
  1235. b07_sk2:    mov    al,1
  1236.         mov    bx,0
  1237.         mov    dx,0
  1238.  
  1239. b07_sk3:    mov    [bp],al
  1240.         mov    [bp+2],bx
  1241.         mov    [bp+6],dx
  1242.         jmp    kr_end23
  1243.  
  1244. b09:        push    bp    ;+16
  1245.         push    es    ;+14
  1246.         push    ds    ;+12
  1247.         push    si    ;+10
  1248.         push    di    ;+8
  1249.         push    dx    ;+6
  1250.         push    cx    ;+4
  1251.         push    bx    ;+2
  1252.         push    ax    ;+0
  1253.         mov    bp,sp
  1254.         mov    ax,cs
  1255.         mov    ds,ax
  1256.         mov    es,ax
  1257.         sti
  1258.  
  1259.         mov    cx,cchR_p
  1260.         cmp    cx,dat.cchResult
  1261.         jae    short kr_sk1
  1262.         mov    si,word ptr dat.lpchResult
  1263.         add    si,cx
  1264.         xor    dh,dh
  1265.         mov    dl,[si]
  1266.         mov    bh,byte ptr dat.wScan    ;bug fixed at v1.01
  1267.         cmp    enc_cnt,0
  1268.         je    v101_fx2
  1269.         xor    bh,bh
  1270.         dec    enc_cnt
  1271. v101_fx2:    mov    bl,byte ptr dat.wStatus
  1272.         mov    [bp+2],bx
  1273.         mov    [bp+6],dx
  1274.         inc    cchR_p
  1275.         jmp    kr_end23
  1276.  
  1277. kr_sk1:        mov    cchR_p,0
  1278.         mov    dat.cchResult,0
  1279.  
  1280.         getatr
  1281.         getcur
  1282.         mov    bak_xy,dx
  1283.  
  1284.         cmp    word ptr dat.cchSystem,0
  1285.         je    kr_sk101    ;bug fixed at v1.00
  1286.         mov    dx,1901h
  1287.         mov    di,offset dat.cchSystem
  1288.         mov    si,offset old_cchS
  1289.         call    putstr
  1290.  
  1291. kr_sk101:    cmp    word ptr dat.cchBuf,0    ;bug fixed at v1.01
  1292.         je    short kr_sk11
  1293.         mov    di,offset dat.cchBuf
  1294.         mov    si,offset old_cchB
  1295.         call    putstr
  1296.  
  1297.         mov    dx,bak_xy
  1298.         add    dl,byte ptr dat.cchBufCursor
  1299.         cmp    dl,80        ;bug fixed at v1.01
  1300.         jb    kr_sk11        ;
  1301.         test    dl,01h        ;
  1302.         jne    kr_sk102    ;
  1303.         inc    dl        ;
  1304. kr_sk102:    sub    dl,80        ;
  1305.         inc    dh        ;
  1306. kr_sk11:    setcur
  1307.  
  1308. kr_lp1:        call    KYBN_check
  1309.         cmp    dh,0FFh            ;No key in?
  1310.         jne    short kr_sk2        ;No.
  1311.         cmp    byte ptr[bp],1        ;No wait key in?
  1312.         jne    short kr_lp1        ;No.
  1313. kr_lp11:    cmp    word ptr dat.cchBuf,0
  1314.         jne    short kr_lp1
  1315.  
  1316. kr_lp12:
  1317.         cmp    bh,57h            ;変換,無変換を返さない
  1318.         je    kr_lp1            ;ようにした  by Ken
  1319.         cmp    bh,58h
  1320.         je    kr_lp1
  1321.         mov    [bp+2],bx
  1322.         mov    [bp+6],dx
  1323.         jmp    kr_end23
  1324.  
  1325. kr_sk2:        push    ax
  1326.         mov    ax,0900h        ;dummy read
  1327.         INT90H
  1328.         pop    ax
  1329.         cmp    word ptr dat.cchBuf,0    ;未確定文字列があるか?
  1330.         jne    kr_sk22
  1331.         cmp    dx,8015h    ;単語登録?
  1332.         jne    kr_sk21
  1333.         call    enter_word
  1334.         mov    dx,0FFFFh
  1335.         mov    bx,0FF00h
  1336.         jmp    kr_lp1
  1337. kr_sk21:    cmp    ah,0FFh        ;変換の必要ありか?
  1338.         jne    kr_lp12        ;無。
  1339.  
  1340. kr_sk22:    mov    byte ptr dat.wType,0
  1341.         mov    byte ptr dat.wScan,bh
  1342.         mov    byte ptr dat.wAscii,dl
  1343.         mov    byte ptr dat.wStatus,bl
  1344.  
  1345.         mov    si,offset enc_str    ;bug fixed at v1.00
  1346.         mov    enc_cnt,1
  1347.         mov    [si],dl
  1348.         inc    si
  1349.  
  1350. ;Bug Fixed by K.MIYAZAKI
  1351. ;   Thanks a lot!!
  1352. ;
  1353.                 mov     ah,1eh
  1354.                 cmp     bh,4dh
  1355.                 je      ken_apn2
  1356.                 mov     ah,1dh
  1357.                 cmp     bh,4fh
  1358.                 je      ken_apn2
  1359.                 mov     ah,1fh
  1360.                 cmp     bh,50h
  1361.                 je      ken_apn2
  1362.                 mov     ah,1ch
  1363.                 cmp     bh,51h
  1364.                 je      ken_apn2
  1365.  
  1366.         mov    ah,7Fh
  1367.         cmp    bh,4Bh
  1368.         je    ken_apn2
  1369.         mov    ah,0Bh
  1370.         cmp    bh,4Eh
  1371.         je    ken_apn2
  1372.  
  1373.                 mov     ah,1bh
  1374.                 cmp     bh,48h
  1375.                 je      ken_apn2
  1376.                 cmp     bh,72h
  1377.                 je      ken_apn2
  1378.                 cmp     bh,73h
  1379.                 je      ken_apn2    ;bug fixed at v1.04a
  1380.  
  1381.         cmp    dh,80h        ;bug fixed at v1.04a
  1382.         jne    ken_apn5    ;
  1383.         mov    ah,1Eh        ;
  1384.         cmp    bh,58h        ;
  1385.         je    ken_apn2    ;
  1386.         mov    ah,1Fh        ;
  1387.         cmp    bh,57h        ;
  1388.         jne    ken_apn5    ;
  1389.  
  1390.  
  1391. ken_apn2:
  1392.             cmp     old_cchS,0
  1393.                 jne     ken_apn3
  1394.                 cmp     old_cchB,0
  1395.                 jne     ken_apn3
  1396.                 jmp     kr_lp12
  1397. ken_apn3:       
  1398.                 mov     byte ptr dat.wAscii,ah
  1399.  
  1400.                 push    ax
  1401.                 push    bx
  1402.                 push    dx
  1403. ken_apn31:      mov     ah,07h
  1404.                 INT90H
  1405.                 cmp     dh,0ffh
  1406.                 je      ken_apn4
  1407.                 cmp     bh,byte ptr dat.wScan
  1408.                 jne     ken_apn4
  1409.                 mov     ax,0900h
  1410.                 INT90H
  1411.         mov    [si],dl        ;bug fixed at v1.00
  1412.         inc    si
  1413.         inc    enc_cnt
  1414.         jmp    ken_apn31
  1415.  
  1416. ken_apn4:       
  1417.                 pop     dx
  1418.                 pop     bx
  1419.                 pop     ax
  1420. ken_apn5:       
  1421. ;
  1422. ;
  1423. ;
  1424.  
  1425.         call    KKInOut
  1426.  
  1427.         cmp    [dat.cchResult],0    ;No result string?
  1428.         jne    kr_sk3            ;No.
  1429.  
  1430.         mov    dx,1901h
  1431.         mov    di,offset dat.cchSystem
  1432.         mov    si,offset old_cchS
  1433.         call    putstr
  1434.  
  1435.         mov    dx,bak_xy
  1436.         mov    di,offset dat.cchBuf
  1437.         mov    si,offset old_cchB
  1438.         call    putstr
  1439.  
  1440.         mov    dx,bak_xy
  1441.         add    dl,byte ptr dat.cchBufCursor
  1442.         cmp    dl,80        ;bug fixed at v1.01
  1443.         jb    kr_sk23        ;
  1444.         test    dl,01h        ;
  1445.         jne    kr_sk230    ;
  1446.         inc    dl        ;
  1447. kr_sk230:    sub    dl,80        ;
  1448.         inc    dh        ;
  1449. kr_sk23:    setcur
  1450.         jmp    kr_lp1
  1451.  
  1452. kr_sk3:
  1453.         cmp    dat.cchBuf,0        ;bug fixed at v1.00
  1454.         jne    kr_sk301
  1455.  
  1456.         mov    di,word ptr[dat.lpchResult]
  1457.         add    di,dat.cchResult
  1458.         dec    di
  1459.         mov    si,offset enc_str
  1460.         mov    cx,enc_cnt
  1461.  
  1462.         mov    al,byte ptr dat.wAscii    ;キーコードの復元が必要か?
  1463.         cmp    al,[di]
  1464.         jne    kr_sk301    ;No.
  1465.  
  1466.         repnz    movsb
  1467.         mov    cx,dat.cchResult
  1468.         add    cx,enc_cnt
  1469.         dec    cx
  1470.         mov    dat.cchResult,cx
  1471.  
  1472.  
  1473. kr_sk301:    mov    si,word ptr[dat.lpchResult]
  1474.         cmp    dl,[si]
  1475.         je    short kr_sk31
  1476.  
  1477. kr_sk4:        mov    dl,[si]        ;bug fixed at v1.01
  1478.         xor    dh,dh
  1479.         xor    bh,bh
  1480.  
  1481. kr_sk31:    mov    [bp+2],bx
  1482.         mov    [bp+6],dx
  1483.         jmp    kr_end1
  1484.  
  1485.         cmp    old_cchS,0
  1486.         je    kr_end1
  1487.         mov    dx,1901h
  1488.         mov    si,offset old_cchS
  1489.         call    clrstr
  1490.         mov    old_cchS,0
  1491. kr_end1:    cmp    old_cchB,0
  1492.         je    kr_end12
  1493.         mov    dx,bak_xy
  1494.         mov    si,offset old_cchB
  1495.         call    clrstr
  1496.         mov    old_cchB,0
  1497. kr_end12:    mov    dx,bak_xy
  1498.         setcur
  1499.  
  1500. kr_end2:    mov    cchR_p,1
  1501.         mov    ax,dat.cchResult    ;bug fixed at v1.01
  1502.         sub    ax,enc_cnt
  1503.         dec    ax
  1504.         jns    kr_end20
  1505.         xor    ax,ax
  1506. kr_end20:    mov    enc_cnt,ax
  1507. kr_end23:    pop    ax
  1508.         pop    bx
  1509.         pop    cx
  1510.         pop    dx
  1511.         pop    di
  1512.         pop    si
  1513.         pop    ds
  1514.         pop    es
  1515.         pop    bp
  1516.         xor    ah,ah
  1517.         iret
  1518. key_bios    endp
  1519.  
  1520. ;
  1521. ;
  1522. ;
  1523. main        proc    near
  1524.         mov    ax,cs
  1525.         mov    ds,ax
  1526.         mov    es,ax
  1527.  
  1528.         mov    ah,0
  1529.         int    91h
  1530.         mov    cx,o_msgL        ;opening mssege
  1531.         mov    di,offset o_msg
  1532.         mov    ah,1Eh
  1533.         int    91h
  1534.  
  1535.         mov    ax,3590h
  1536.         int    21h
  1537.         mov    cx,dn_cnt
  1538.         mov    si,offset drv_nam
  1539.         mov    di,offset drv_nam
  1540.         repz    cmpsb
  1541.         jne    m_setup
  1542.  
  1543.         mov    cx,o_msg2L        ;開放メッセージ
  1544.         mov    di,offset o_msg2
  1545.         mov    ah,1Eh
  1546.         int    91h
  1547.  
  1548.         mov    ax,es
  1549.         mov    ds,ax
  1550.         mov    ah,07h
  1551.         int    90h
  1552.         or    modeW,1            ;漢字off
  1553.         call    mode_chg
  1554.         call    KKClose
  1555.  
  1556.         set_vct90h
  1557.  
  1558.         mov    ax,0F901h        ;ステータス表示on
  1559.         int    90h
  1560.  
  1561.         mov    ah,49h
  1562.         int    21h
  1563.         mov    ax,es
  1564.         sub    ax,0Ch            ;環境変数領域
  1565.         mov    es,ax
  1566.         mov    ah,49h
  1567.         int    21h
  1568.         
  1569.         mov    ax,4C00h
  1570.         int    21h
  1571.  
  1572. m_setup:    mov    cx,o_msg1L        ;常駐メッセージ
  1573.         mov    di,offset o_msg1
  1574.         mov    ah,1Eh
  1575.         int    91h
  1576.  
  1577.         mov    di,offset pf_key_tbl
  1578.         xor    cx,cx
  1579. key_set:    mov    dx,word ptr [di]
  1580.         cmp    dx,0
  1581.         je    key_st_e
  1582.         add    di,2
  1583.         mov    cl,[di]
  1584.         inc    di
  1585.         mov    ax,0E00h
  1586.         int    90h
  1587.         add    di,cx
  1588.         jmp    key_set
  1589. key_st_e:
  1590.         KYB_KindKb
  1591.         mov    k_kind,al
  1592.  
  1593.         call    KKOpen            ;oak/2 open
  1594.  
  1595.         mov    ax,0F900h        ;ステータス表示off
  1596.         int    90h
  1597.  
  1598.         mov    ax,cs
  1599.         mov    word ptr modeB[0],offset modeS    ;System line
  1600.         mov    word ptr modeB[2],ax
  1601.         mov    word ptr modeB[4],offset modeA
  1602.         mov    word ptr modeB[6],ax
  1603.         mov    cx,9            ;print mode
  1604.         mov    dl,72+80h
  1605.         mov    di,offset modeB
  1606.         mov    ax,1F01h
  1607.         int    91h
  1608.         mov    ah,07h            ;set shift mode
  1609.         int    90h
  1610.         mov    ax,modeW
  1611.         mov    fnc.wMode,ax
  1612.         call    KKMode
  1613.         mov    byte ptr dat.wType,0        ;リフレッシュ
  1614.         mov    byte ptr dat.wScan,0
  1615.         mov    byte ptr dat.wAscii,0
  1616.         mov    byte ptr dat.wStatus,0
  1617.         call    KKInOut
  1618.         mov    dat.cchResult,0
  1619.         mov    dat.cchSystem,0
  1620.         mov    dat.cchBuf,0
  1621.         mov    old_cchS,0
  1622.         mov    old_cchB,0
  1623.         mov    cchR_p,0
  1624.  
  1625.         get_vct90h
  1626.         mov    dx,offset key_bios
  1627.         mov    ax,2590h
  1628.         int    21h
  1629.  
  1630.         mov    dx,p_size
  1631.         add    dx,0Fh
  1632.         shr    dx,4
  1633.         mov    ax,3100h
  1634.         int    21h
  1635. main        endp
  1636. p_end        equ    $
  1637. code        ends
  1638.         end    entry
  1639.