home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / apps / word / japworpr / worduta3.gfa (.txt) < prev   
GFA-BASIC Atari  |  1990-08-16  |  43KB  |  2,180 lines

  1. '
  2. '  JAPANESE WORD PROCESSOR.
  3. '
  4. '                    Programming by M.UTASHIRO     START         1990/07/10
  5. '                                                  VERSION 1.00  1990/07/28
  6. '                                                  VERSION 1.02  1990/08/04
  7. '                                                  VERSION 1.50  1990/08/07
  8. '                                                  VERSION 1.51  1990/08/07
  9. '                                                  VERSION 1.60  1990/08/14
  10. '                                                  VERSION 1.80  1990/08/14
  11. '
  12. '
  13. '
  14. SOUND 1,15,10,5,12
  15. SOUND 1,15,10,4,12
  16. SOUND 1,0,0,0,0
  17. word_version
  18. initial
  19. initial_data
  20. asm_load
  21. '
  22. CLS
  23. program_name
  24. PBOX 10,370,628,395
  25. sub_text_pic
  26. ' main_text_plane
  27. redraw
  28. current_cursol
  29. key
  30. '
  31. > PROCEDURE key
  32.   '
  33.   DO
  34.     tinput%=INP(2)
  35.     l$=CHR$(tinput%)
  36.     '    PRINT AT(1,1);tinput%
  37.     '    DELAY 1
  38.     SELECT tinput%
  39.     CASE 0
  40.     CASE 1                ! CONTROL A : JIS CORD INPUT
  41.       cont_a
  42.     CASE 2                ! CONTROL B : INSERT LINE
  43.       line_ins
  44.     CASE 3 TO 4
  45.     CASE 5                ! CONTROL E : END CHARACTER
  46.       cont_e
  47.     CASE 6 TO 7
  48.     CASE 8                ! BACK SPACE
  49.       back_space
  50.     CASE 9                ! TAB
  51.       tab
  52.     CASE 10 TO 11
  53.     CASE 12               ! CONTROL L : CHANGE COLUMN
  54.       change_column
  55.     CASE 13               ! CR
  56.       transform
  57.     CASE 14               ! CONTROL N : NEW
  58.       new_file
  59.     CASE 15               ! CONTROL O : CHANGE PAGELINE
  60.       change_pageline
  61.     CASE 16               ! CONTROL P : PAGE CHARACTER
  62.       cont_p
  63.     CASE 17
  64.     CASE 18               ! CONTROL R : CR CONVERTOR
  65.       cr_conv
  66.     CASE 19
  67.     CASE 20               ! CONTROL T : SET TAB
  68.       cont_t
  69.     CASE 21 TO 23
  70.     CASE 24               ! CONTROL X : MERGE TEXT
  71.       text_merge
  72.     CASE 25 TO 26
  73.     CASE 27               ! ESCAPE
  74.       esc_quit
  75.     CASE 28 TO 30
  76.     CASE 31
  77.       cont_del
  78.     CASE 127              ! DELETE
  79.       del
  80.     CASE 128 TO 145
  81.     CASE 146
  82.     CASE 147 TO 152
  83.     CASE 153              ! alt-P
  84.       text_print
  85.     CASE 154 TO 171
  86.     CASE 172              ! alt-Z
  87.       henkan
  88.     CASE 173 TO 186
  89.     CASE 187              ! F1
  90.       hira_kata_conv
  91.     CASE 188              ! F2
  92.       kana_hira_conv
  93.     CASE 189              ! F3
  94.       lower_case
  95.     CASE 190              ! F4
  96.       upper_case
  97.     CASE 191              ! F5
  98.       no_conv
  99.     CASE 192              ! F6
  100.       undo_no_conv
  101.     CASE 193              ! F7
  102.       up_page
  103.     CASE 194              ! F8
  104.       dn_page
  105.     CASE 195              ! F9
  106.       bun_save
  107.     CASE 196              ! F10
  108.       bun_load
  109.     CASE 197 TO 198
  110.     CASE 199              ! CLR/HOME
  111.       clr_home
  112.     CASE 200              ! UP ARROW
  113.       up_arrow
  114.     CASE 201 TO 202
  115.     CASE 203              ! LEFT ARROW
  116.       left_arrow
  117.     CASE 204
  118.     CASE 205              ! RIGHT ARROW
  119.       right_arrow
  120.     CASE 206 TO 207
  121.     CASE 208              ! DOWN ARROW
  122.       dn_arrow
  123.     CASE 209
  124.     CASE 210              ! INSERT
  125.       ins
  126.     CASE 211 TO 224
  127.     CASE 225              ! UNDO
  128.     CASE 226              ! HELP
  129.       help_1
  130.     CASE 227 TO 255
  131.     DEFAULT
  132.       text1$=text1$+l$
  133.       text$=text$+l$
  134.       text_check
  135.       PRINT AT(3,23);"                    "
  136.       PRINT AT(3,23);text$
  137.     ENDSELECT
  138.   LOOP
  139.   '
  140. RETURN
  141. '
  142. > PROCEDURE asm_load
  143.   '
  144.   RESTORE asm1
  145. asm1:
  146.   DATA $206F,$0004,$226F,$0008,$202F,$000C,$7201,$D1C0
  147.   DATA $1091,$5288,$5289,$1091
  148.   DATA $D1FC,$0000,$004F,$5289,$5281,$B2BC,$0000,$0011,$66E6
  149.   DATA $4E75
  150.   '
  151.   FOR i%=1 TO 22
  152.     READ j%
  153.     asm$=asm$+MKI$(j%)
  154.   NEXT i%
  155.   '
  156.   asm%=V:asm$
  157.   screen%=XBIOS(2)
  158.   '
  159. RETURN
  160. '
  161. > PROCEDURE change_pageline
  162.   '
  163.   current_cursol
  164.   '
  165.   DO
  166.     PRINT AT(3,23);"                                                       "
  167.     PRINT AT(3,23);"INPUT LINE PAR PAGE (2 TO 50) ";
  168.     INPUT pageline%
  169.   LOOP UNTIL pageline%>=2 AND pageline%<=50
  170.   PRINT AT(3,23);"                                                       "
  171.   PRINT AT(3,23);text$
  172.   '
  173.   current_cursol
  174.   '
  175. RETURN
  176. '
  177. > PROCEDURE change_column
  178.   '
  179.   ALERT 1," CHANGE COLUMN.  | TEXT ALL CLEAR !  ",1,"CANCEL|  OK  ",l%
  180.   IF l%=2
  181.     DO
  182.       PRINT AT(3,23);"                                            "
  183.       PRINT AT(3,23);"INPUT COLUMN. (2 TO 38) ";
  184.       INPUT max_xposition%
  185.     LOOP UNTIL max_xposition%>=2 AND max_xposition%<=38
  186.     DEC max_xposition%
  187.     ARRAYFILL bun&(),spacechara%
  188.     BOUNDARY 0
  189.     PBOX 10,25,629,305
  190.     BOUNDARY 1
  191.     kxpos%=0                      ! COLUMN POSITION OF DISPLAY
  192.     kypos%=0                      ! LINE POSITION OF DISPLAY
  193.     tr%=0                         ! SUB TEXT CHARACTER IS...
  194.     no1%=0                        ! NUMBER OF SUB TEXT CHARACTER
  195.     refline%=0                    ! REFERENCE LINE (TOP LINE OF DISPLAY)
  196.     no_conv%=0                    ! NO CONVERT MODE ON/OFF
  197.     end_chara_e%=0                ! END CHARACTER ON/OFF
  198.     text$=""
  199.     redraw
  200.     current_cursol
  201.     sub_text_plane
  202.     PRINT AT(3,23);"                                              "
  203.   ENDIF
  204.   '
  205. RETURN
  206. '
  207. > PROCEDURE cont_p
  208.   '
  209.   chara1%=page_chara%
  210.   chara2%=0
  211.   check_ins
  212.   tr%=1
  213.   display_hira
  214.   tr%=0
  215.   IF kxpos%<>0
  216.     inc_yposition
  217.     current_cursol
  218.   ELSE
  219.     current_cursol
  220.   ENDIF
  221.   '
  222. RETURN
  223. '
  224. > PROCEDURE text_print
  225.   '
  226.   ALERT 1," PRINTER NOT SUPPORTED  | WITH version 1.0  ",1," OK ",l%
  227.   '
  228. RETURN
  229. '
  230. > PROCEDURE help_1
  231.   '
  232.   PBOX 10,25,628,305
  233.   PRINT AT(3,3);"F1      : CONVERT HIRAGANA TO KATAKANA."
  234.   PRINT AT(3,4);"F2      : CONVERT KATAKANA TO HIRAGANA."
  235.   PRINT AT(3,5);"F3      : CONVERT UPPERCASE TO LOWERCASE."
  236.   PRINT AT(3,6);"F4      : CONVERT LOWERCASE TO UPPERCASE."
  237.   PRINT AT(3,7);"F5      : NO CONVERT. ( INPUT CHARACTER DIRECTLY )"
  238.   PRINT AT(3,8);"F6      : CONVERT ROMAN TO HIRAGANA."
  239.   PRINT AT(3,9);"F7      : PAGE UP.   (BEFORE)"
  240.   PRINT AT(3,10);"F8      : PAGE DOWN. (AFTER)"
  241.   PRINT AT(3,11);"F9      : SAVE TEXT."
  242.   PRINT AT(3,12);"F10     : LOAD TEXT."
  243.   PRINT AT(3,16);"HIT ANY KEY, TO NEXT."
  244.   ~INP(2)
  245.   PBOX 10,25,628,305
  246.   PRINT AT(3,3);"CONT-A  : INPUT WITH JIS CORD."
  247.   PRINT AT(3,4);"CONT-B  : INSERT LINE."
  248.   PRINT AT(3,5);"CONT-E  : SHOW OR PUT THE END CHARACTER."
  249.   PRINT AT(3,6);"CONT-L  : CHANGE COLUMN."
  250.   PRINT AT(3,7);"CONT-N  : NEW TEXT. ( CLEAR TEXT )"
  251.   PRINT AT(3,8);"CONT-O  : CHANGE PAGELINE."
  252.   PRINT AT(3,9);"CONT-P  : PUT THE PAGE CHARACTER."
  253.   PRINT AT(3,10);"CONT-R  : CR CONVERT."
  254.   PRINT AT(3,11);"CONT-T  : SET TAB."
  255.   PRINT AT(3,12);"CONT-X  : MERGE TEXT."
  256.   PRINT AT(3,13);"CONT-DEL: DELETE LINE."
  257.   PRINT AT(3,15);"ALT-P   : PRINT TEXT."
  258.   PRINT AT(3,16);"ALT-Z   : CONVERT HIRAGANA TO KANJI."
  259.   PRINT AT(3,19);"HIT ANY KEY, TO TEXT."
  260.   ~INP(2)
  261.   BOUNDARY 0
  262.   PBOX 10,25,628,305
  263.   BOUNDARY 1
  264.   redraw
  265.   current_cursol
  266.   '
  267. RETURN
  268. '
  269. > PROCEDURE cr_conv
  270.   '
  271.   ALERT 2," CR CONVERT.  | ARE YOU SURE ?  ",1,"  OK  |CANCEL",l%
  272.   IF l%=1
  273.     PRINT AT(3,23);"CR CONVERT !"
  274.     '
  275.     IF end_chara_e%=1
  276.       end_c%=1
  277.       end_x%=ec_x%
  278.       end_y%=ec_y%
  279.     ELSE
  280.       end_c%=0
  281.     ENDIF
  282.     '
  283.     IF end_c%=0
  284.       end_x%=max_xposition%
  285.       end_y%=maxline%
  286.       bun&(max_xposition%,maxline%)=end_chara%
  287.       end_c%=1
  288.     ENDIF
  289.     '
  290.     IF end_c%=1
  291.       file_b$=DIR$(0)+"\WORDUTAS.BAK"
  292.       l%=1
  293.       '
  294.       IF l%=1
  295.         OPEN "O",#1,file_b$
  296.         texthead$=MKI$(version_no%)+MKI$(version_sub%)+MKI$(max_xposition%)
  297.         texthead$=LEFT$(texthead$+"                                ",32)
  298.         PRINT #1,texthead$;
  299.         FOR i%=0 TO end_y%
  300.           FOR j%=0 TO max_xposition%
  301.             IF i%=end_y% AND j%>end_x%
  302.             ELSE
  303.               PRINT #1,MKI$(bun&(j%,i%));
  304.             ENDIF
  305.           NEXT j%
  306.         NEXT i%
  307.         CLOSE #1
  308.       ENDIF
  309.     ENDIF
  310.     '
  311.     '
  312.     '
  313.     IF EXIST(file_b$)
  314.       ARRAYFILL bun&(),spacechara%
  315.       OPEN "I",#1,file_b$
  316.       texthead$=INPUT$(32,#1)
  317.       i%=0
  318.       j%=0
  319.       i1%=(LOF(#1)-32)/2
  320.       FOR j1%=1 TO i1%
  321.         bun&(j%,i%)=CVI(INPUT$(2,#1))
  322.         d_load%=bun&(j%,i%)
  323.         IF d_load%=cr_chara%
  324.           INC i%
  325.           j%=0
  326.           IF i%>maxline%
  327.             j1%=i1%
  328.           ENDIF
  329.         ELSE
  330.           IF d_load%=page_chara%
  331.             j2%=DIV(i%,pageline%)
  332.             i%=(j2%+1)*pageline%
  333.             j%=0
  334.             IF i%>maxline%
  335.               j1%=i1%
  336.             ENDIF
  337.           ELSE
  338.             IF d_load%=spacechara%
  339.             ELSE
  340.               INC j%
  341.               IF j%>max_xposition%
  342.                 INC i%
  343.                 j%=0
  344.               ENDIF
  345.               IF i%>maxline%
  346.                 j1%=i1%
  347.               ENDIF
  348.             ENDIF
  349.           ENDIF
  350.         ENDIF
  351.       NEXT j1%
  352.       CLOSE #1
  353.       '
  354.       IF d_load%=end_chara%
  355.         end_chara_e%=1
  356.         DEC j%
  357.         IF j%=-1
  358.           j%=max_xposition%
  359.           DEC i%
  360.           IF i%=-1
  361.             i%=0
  362.             j%=0
  363.           ENDIF
  364.         ENDIF
  365.         ec_y%=i%
  366.         ec_x%=j%
  367.       ELSE
  368.         end_chara_e%=0
  369.       ENDIF
  370.       '
  371.       kxpos%=0                      ! COLUMN POSITION OF DISPLAY
  372.       kypos%=0                      ! LINE POSITION OF DISPLAY
  373.       tr%=0                         ! SUB TEXT CHARACTER IS...
  374.       no1%=0                        ! NUMBER OF SUB TEXT CHARACTER
  375.       refline%=0                    ! REFERENCE LINE (TOP LINE OF DISPLAY)
  376.       no_conv%=0                    ! NO CONVERT MODE ON/OFF
  377.       text$=""
  378.       redraw
  379.       current_cursol
  380.       sub_text_plane
  381.       '
  382.     ENDIF
  383.     '
  384.     PRINT AT(3,23);"                                                        "
  385.     PRINT AT(3,23);text$
  386.     '
  387.   ENDIF
  388.   '
  389. RETURN
  390. '
  391. > PROCEDURE line_ins
  392.   '
  393.   current_cursol
  394.   '
  395.   IF end_chara_e%=1
  396.     IF ec_y%>=refline%+kypos%
  397.       INC ec_y%
  398.       IF ec_y%>maxline%
  399.         end_chara_e%=0
  400.       ENDIF
  401.     ENDIF
  402.   ENDIF
  403.   '
  404.   bun_add%=VARPTR(bun&(0,0))
  405.   c_add%=(kypos%+refline%)*(max_xdim%+1)*2
  406.   rmain%=bun_long%-c_add%-bun_line_long%
  407.   IF rmain%>0
  408.     BMOVE bun_add%+c_add%,bun_add%+c_add%+bun_line_long%,rmain%
  409.   ENDIF
  410.   '
  411.   FOR j%=0 TO max_xposition%
  412.     bun&(j%,refline%+kypos%)=spacechara%
  413.   NEXT j%
  414.   '
  415.   GET 15,kypos%*18+30,(max_xposition%+2)*16,14*18+29,pic_buf$
  416.   BOUNDARY 0
  417.   PBOX 15,kypos%*18+30,(max_xposition%+2)*16,(kypos%+1)*18+29
  418.   BOUNDARY 1
  419.   PUT 15,(kypos%+1)*18+30,pic_buf$
  420.   i%=kypos%
  421.   chara1%=spacechara%-&H2000
  422.   offset%=(1440*i%)+2400
  423.   FOR j%=0 TO max_xposition%
  424.     ADD offset%,2
  425.     asm%=V:asm$
  426.     ~C:asm%(L:screen%,L:V:c$(chara1%),L:offset%)
  427.   NEXT j%
  428.   '
  429.   current_cursol
  430.   '
  431. RETURN
  432. '
  433. > PROCEDURE ins
  434.   '
  435.   IF insert%=1
  436.     insert%=0
  437.     TEXT 600,18,"   "
  438.   ELSE
  439.     insert%=1
  440.     TEXT 600,18,"INS"
  441.   ENDIF
  442.   '
  443. RETURN
  444. '
  445. > PROCEDURE text_merge
  446.   '
  447.   PRINT AT(3,23);"MERGE !"
  448.   '
  449.   FILESELECT "\*.KAN","",file_1$
  450.   '
  451.   IF EXIST(file_1$)
  452.     OPEN "I",#1,file_1$
  453.     texthead1$=INPUT$(32,#1)
  454.     max_xposition1%=CVI(MID$(texthead1$,5,2))
  455.     i%=kypos%+refline%
  456.     j%=0
  457.     i1%=(LOF(#1)-32)/2
  458.     FOR j1%=1 TO i1%
  459.       bun&(j%,i%)=CVI(INPUT$(2,#1))
  460.       d_load%=bun&(j%,i%)
  461.       IF j%=ec_x% AND i%=ec_y%
  462.         end_chara_e%=0
  463.       ENDIF
  464.       INC j%
  465.       IF j%>max_xposition%
  466.         INC i%
  467.         j%=0
  468.       ENDIF
  469.       IF i%>maxline%
  470.         j1%=i1%
  471.       ENDIF
  472.     NEXT j1%
  473.     CLOSE #1
  474.     '
  475.     IF d_load%=end_chara%
  476.       DEC j%
  477.       IF j%=-1
  478.         j%=max_xposition%
  479.         DEC i%
  480.         IF i%=-1
  481.           i%=0
  482.           j%=0
  483.         ENDIF
  484.       ENDIF
  485.       IF end_chara_e%=1
  486.         bun&(j%,i%)=spacechara%
  487.       ELSE
  488.         end_chara_e%=1
  489.         ec_y%=i%
  490.         ec_x%=j%
  491.       ENDIF
  492.     ENDIF
  493.     '
  494.     tr%=0                         ! SUB TEXT CHARACTER IS...
  495.     no1%=0                        ! NUMBER OF SUB TEXT CHARACTER
  496.     no_conv%=0                    ! NO CONVERT MODE ON/OFF
  497.     text$=""
  498.     redraw
  499.     current_cursol
  500.     sub_text_plane
  501.     '
  502.     IF max_xposition%<>max_xposition1%
  503.       ALERT 1," COLUMN IS NOT SAME !  ",1," OK ",l%
  504.     ENDIF
  505.     PRINT AT(3,23);"                             "
  506.     PRINT AT(3,23);"File Name = ";file_1$
  507.     ALERT 0," MERGE ENDED.  ",1," OK ",l%
  508.     '
  509.   ENDIF
  510.   '
  511.   PRINT AT(3,23);"                                                        "
  512.   PRINT AT(3,23);text$
  513.   '
  514. RETURN
  515. '
  516. > PROCEDURE dictionary_save
  517.   '
  518.   PRINT AT(3,23);" SAVING DIC !    NOW, VERSION "+ver$
  519.   OPEN "O",#1,DIR$(0)+"\WORD_DIC.DAT"
  520.   header$=LEFT$(ver$+"                                  ",32)
  521.   PRINT #1,header$;
  522.   FOR i%=0 TO 127
  523.     PRINT #1,MKI$(index%(i%));
  524.   NEXT i%
  525.   spbuf$=MKI$(0)+MKI$(0)+MKI$(0)+MKI$(0)+MKI$(0)+MKI$(0)+MKI$(0)+MKI$(0)
  526.   FOR i%=0 TO index%(127)-1
  527.     PRINT #1,LEFT$(zhi$(i%)+spbuf$,16);
  528.     PRINT #1,LEFT$(zka$(i%)+spbuf$,8);
  529.     PRINT #1,MKL$(zno%(i%));
  530.     PRINT #1,CHR$(zi%(i%));
  531.     PRINT #1,CHR$(0)+CHR$(0)+CHR$(0);
  532.   NEXT i%
  533.   '
  534.   CLOSE #1
  535.   '
  536.   PRINT AT(3,23);"                                                            "
  537.   ALERT 2," QUIT SURE ?  ",1," QUIT |CANCEL",l%
  538.   IF l%=1
  539.     to_edit
  540.   ENDIF
  541.   '
  542. RETURN
  543. '
  544. > PROCEDURE esc_quit
  545.   '
  546.   ALERT 2," SAVE YOUR DICTIONARY ?  ",3," SAVE | QUIT |CANCEL",l%
  547.   IF l%=2
  548.     to_edit
  549.   ENDIF
  550.   IF l%=1
  551.     dictionary_save
  552.   ENDIF
  553.   '
  554. RETURN
  555. '
  556. > PROCEDURE dn_page
  557.   '
  558.   current_cursol
  559.   '
  560.   refline1%=refline%
  561.   i%=DIV(refline%,pageline%)
  562.   refline2%=(i%+1)*pageline%
  563.   IF refline2%+14>maxline%
  564.     refline2%=maxline2%-14
  565.   ENDIF
  566.   IF refline1%<>refline2%
  567.     screen_add%=XBIOS(2)
  568.     FOR refline%=refline1%+1 TO refline2%
  569.       BMOVE screen_add%+3840,screen_add%+2400,20000
  570.       i%=14
  571.       offset%=(1440*i%)+2400
  572.       i1%=i%+refline%
  573.       FOR j%=0 TO max_xposition%
  574.         chara1%=bun&(j%,i1%)-&H2000
  575.         '        offset%=(1440*i%)+(j%*2)+2402
  576.         ADD offset%,2
  577.         asm%=V:asm$
  578.         ~C:asm%(L:screen%,L:V:c$(chara1%),L:offset%)
  579.       NEXT j%
  580.       TEXT 300,18,RIGHT$("   "+STR$(DIV(kypos%+refline%,pageline%)+1),3)+" PAGE "+RIGHT$("   "+STR$(MOD(kypos%+refline%,pageline%)+1),3)+" LINE  "+RIGHT$("  "+STR$(kxpos%+1),2)+" COLUMN"
  581.     NEXT refline%
  582.     DEC refline%
  583.   ENDIF
  584.   '
  585.   current_cursol
  586.   '
  587. RETURN
  588. '
  589. > PROCEDURE up_page
  590.   '
  591.   current_cursol
  592.   '
  593.   refline1%=refline%
  594.   i%=DIV(refline%,pageline%)
  595.   j%=MOD(refline%,pageline%)
  596.   IF j%<>0
  597.     refline2%=i%*pageline%
  598.   ELSE
  599.     IF i%=0
  600.       refline2%=0
  601.     ELSE
  602.       refline2%=(i%-1)*pageline%
  603.     ENDIF
  604.   ENDIF
  605.   IF refline1%<>refline2%
  606.     screen_add%=XBIOS(2)
  607.     FOR refline%=refline1%-1 DOWNTO refline2%
  608.       BMOVE screen_add%+2400,screen_add%+3840,20000
  609.       i%=0
  610.       offset%=(1440*i%)+2400
  611.       FOR j%=0 TO max_xposition%
  612.         chara1%=bun&(j%,i%+refline%)-&H2000
  613.         ADD offset%,2
  614.         asm%=V:asm$
  615.         ~C:asm%(L:screen%,L:V:c$(chara1%),L:offset%)
  616.       NEXT j%
  617.       TEXT 300,18,RIGHT$("   "+STR$(DIV(kypos%+refline%,pageline%)+1),3)+" PAGE "+RIGHT$("   "+STR$(MOD(kypos%+refline%,pageline%)+1),3)+" LINE  "+RIGHT$("  "+STR$(kxpos%+1),2)+" COLUMN"
  618.     NEXT refline%
  619.     INC refline%
  620.   ENDIF
  621.   '
  622.   current_cursol
  623.   '
  624. RETURN
  625. '
  626. > PROCEDURE new_file
  627.   '
  628.   ALERT 1," FILE NEW ?  ",1,"  OK  |CANCEL",l%
  629.   IF l%=1
  630.     ARRAYFILL bun&(),spacechara%
  631.     kxpos%=0                      ! COLUMN POSITION OF DISPLAY
  632.     kypos%=0                      ! LINE POSITION OF DISPLAY
  633.     tr%=0                         ! SUB TEXT CHARACTER IS...
  634.     no1%=0                        ! NUMBER OF SUB TEXT CHARACTER
  635.     refline%=0                    ! REFERENCE LINE (TOP LINE OF DISPLAY)
  636.     no_conv%=0                    ! NO CONVERT MODE ON/OFF
  637.     end_chara_e%=0                ! END CHARACTER OFF
  638.     text$=""
  639.     redraw
  640.     current_cursol
  641.     sub_text_plane
  642.     PRINT AT(3,23);"                                                        "
  643.   ENDIF
  644.   '
  645. RETURN
  646. '
  647. > PROCEDURE select_k
  648.   '
  649.   GRAPHMODE 3
  650.   BOUNDARY 0
  651.   DEFFILL 1,2,8
  652.   h1xpos%=0
  653.   PBOX h1xpos%*96+16,374,h1xpos%*96+111,391
  654.   PBOX (h_cursol%-1)*16+16,319,(h_cursol%-2+LEN(zhi$(hbuf%(h1xpos%)))/2)*16+31,336
  655.   ex%=0
  656.   DO
  657.     k1%=INP(2)
  658.     SELECT k1%
  659.     CASE 13
  660.       i4%=hbuf%(h1xpos%)
  661.       hilen%=LEN(zhi$(i4%))/2
  662.       kalen%=LEN(zka$(i4%))/2
  663.       FOR i5%=0 TO kalen%-1
  664.         hiratext%(i5%+h_cursol%)=CVI(MID$(zka$(i4%),i5%*2+1,2))
  665.       NEXT i5%
  666.       no1%=no1%+kalen%-hilen%
  667.       FOR i5%=h_cursol%+kalen% TO no1%
  668.         hiratext%(i5%)=hiratext%(i5%+hilen%-kalen%)
  669.       NEXT i5%
  670.       sub_text_plane
  671.       FOR i5%=1 TO no1%
  672.         chara1%=hiratext%(i5%)-&H2000
  673.         offset%=320*80+(i5%)*2
  674.         asm%=V:asm$
  675.         ~C:asm%(L:screen%,L:V:c$(chara1%),L:offset%)
  676.       NEXT i5%
  677.       INC zno%(i4%)
  678.       zhibuf$=zhi$(i4%)
  679.       zkabuf$=zka$(i4%)
  680.       znobuf%=zno%(i4%)
  681.       zibuf%=zi%(i4%)
  682.       IF i4%<>j%
  683.         DEC j%
  684.         DO
  685.           INC j%
  686.         LOOP UNTIL zno%(j%)<=znobuf%
  687.         IF i4%<>j%
  688.           FOR i5%=i4% DOWNTO j%+1
  689.             zhi$(i5%)=zhi$(i5%-1)
  690.             zka$(i5%)=zka$(i5%-1)
  691.             zno%(i5%)=zno%(i5%-1)
  692.             zi%(i5%)=zi%(i5%-1)
  693.           NEXT i5%
  694.           zhi$(j%)=zhibuf$
  695.           zka$(j%)=zkabuf$
  696.           zno%(j%)=znobuf%
  697.           zi%(j%)=zibuf%
  698.         ENDIF
  699.       ENDIF
  700.       GRAPHMODE 1
  701.       BOUNDARY 1
  702.       DEFFILL 1,0
  703.       ex%=1
  704.       hh%=0
  705.       i1%=i%
  706.       i2%=1
  707.       PBOX 10,370,628,395
  708.     CASE 27
  709.       PBOX (h_cursol%-1)*16+16,319,(h_cursol%-2+LEN(zhi$(hbuf%(h1xpos%)))/2)*16+31,336
  710.       GRAPHMODE 1
  711.       BOUNDARY 1
  712.       DEFFILL 1,0
  713.       ex%=1
  714.       hh%=0
  715.       i1%=i%
  716.       i2%=1
  717.       henkan%=0
  718.       PBOX 10,370,628,395
  719.     CASE 32
  720.       PBOX (h_cursol%-1)*16+16,319,(h_cursol%-2+LEN(zhi$(hbuf%(h1xpos%)))/2)*16+31,336
  721.       GRAPHMODE 1
  722.       BOUNDARY 1
  723.       DEFFILL 1,0
  724.       ex%=1
  725.     CASE 200            ! UP ARROW
  726.       PBOX (h_cursol%-1)*16+16,319,(h_cursol%-2+LEN(zhi$(hbuf%(h1xpos%)))/2)*16+31,336
  727.       DEC h_cursol%
  728.       IF h_cursol%<1
  729.         h_cursol%=1
  730.       ENDIF
  731.       GRAPHMODE 1
  732.       BOUNDARY 1
  733.       DEFFILL 1,0
  734.       ex%=1
  735.       hh%=0
  736.       i1%=i%
  737.       i2%=1
  738.       PBOX 10,370,628,395
  739.     CASE 203            ! LEFT ARROW
  740.       PBOX h1xpos%*96+16,374,h1xpos%*96+111,391
  741.       PBOX (h_cursol%-1)*16+16,319,(h_cursol%-2+LEN(zhi$(hbuf%(h1xpos%)))/2)*16+31,336
  742.       DEC h1xpos%
  743.       IF h1xpos%<0
  744.         h1xpos%=hxpos%-1
  745.       ENDIF
  746.       PBOX h1xpos%*96+16,374,h1xpos%*96+111,391
  747.       PBOX (h_cursol%-1)*16+16,319,(h_cursol%-2+LEN(zhi$(hbuf%(h1xpos%)))/2)*16+31,336
  748.     CASE 205            ! RIGHT ARROW
  749.       PBOX h1xpos%*96+16,374,h1xpos%*96+111,391
  750.       PBOX (h_cursol%-1)*16+16,319,(h_cursol%-2+LEN(zhi$(hbuf%(h1xpos%)))/2)*16+31,336
  751.       INC h1xpos%
  752.       IF h1xpos%=hxpos%
  753.         h1xpos%=0
  754.       ENDIF
  755.       PBOX h1xpos%*96+16,374,h1xpos%*96+111,391
  756.       PBOX (h_cursol%-1)*16+16,319,(h_cursol%-2+LEN(zhi$(hbuf%(h1xpos%)))/2)*16+31,336
  757.     CASE 208            ! DOWN ARROW
  758.       PBOX (h_cursol%-1)*16+16,319,(h_cursol%-2+LEN(zhi$(hbuf%(h1xpos%)))/2)*16+31,336
  759.       INC h_cursol%
  760.       IF h_cursol%>no1%
  761.         h_cursol%=no1%
  762.       ENDIF
  763.       GRAPHMODE 1
  764.       BOUNDARY 1
  765.       DEFFILL 1,0
  766.       ex%=1
  767.       hh%=0
  768.       i1%=i%
  769.       i2%=1
  770.       PBOX 10,370,628,395
  771.     ENDSELECT
  772.   LOOP UNTIL ex%=1
  773.   '
  774. RETURN
  775. '
  776. > PROCEDURE comp_k
  777.   '
  778.   h_post%=ASC(RIGHT$(MKI$(hiratext%(h_cursol%)),1))
  779.   s_1%=index%(h_post%)
  780.   e_1%=index%(h_post%+1)
  781.   '
  782.   hh%=0
  783.   DO
  784.     hxpos%=0
  785.     PBOX 10,370,628,395
  786.     FOR i2%=h_no1% DOWNTO 1
  787.       h_comp$=""
  788.       FOR i%=h_cursol% TO h_cursol%+i2%-1
  789.         h_comp$=h_comp$+MKI$(hiratext%(i%))
  790.       NEXT i%
  791.       i%=s_1%-1
  792.       DO
  793.         INC i%
  794.       LOOP UNTIL h_comp$<=zhi$(i%) OR i%=e_1%
  795.       IF h_comp$=zhi$(i%)
  796.         hh%=1
  797.         j%=i%
  798.         DO
  799.           INC i%
  800.         LOOP UNTIL h_comp$<>zhi$(i%)
  801.         FOR i1%=j% TO i%-1
  802.           hbuf%(hxpos%)=i1%
  803.           FOR j1%=0 TO 5
  804.             chara1%=CVI(MID$(zka$(i1%),j1%*2+1,2))
  805.             IF chara1%<&H2000
  806.               chara1%=&H2121
  807.             ENDIF
  808.             offset%=375*80+(hxpos%*6+j1%)*2+2
  809.             asm%=V:asm$
  810.             ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  811.           NEXT j1%
  812.           '
  813.           INC hxpos%
  814.           IF hxpos%=6
  815.             select_k
  816.             PBOX 10,370,628,395
  817.             ARRAYFILL hbuf%(),0
  818.             hxpos%=0
  819.           ENDIF
  820.           '
  821.         NEXT i1%
  822.       ELSE
  823.       ENDIF
  824.       IF hh%=1 AND hxpos%<>0
  825.         select_k
  826.         PBOX 10,370,628,395
  827.         ARRAYFILL hbuf%(),0
  828.         hxpos%=0
  829.       ENDIF
  830.     NEXT i2%
  831.   LOOP UNTIL hh%=0
  832.   '
  833. RETURN
  834. '
  835. > PROCEDURE henkan
  836.   '
  837.   IF no1%<>0 AND text$=""
  838.     IF henkan%=0
  839.       henkan%=1
  840.       h_cursol%=1
  841.     ENDIF
  842.     DO
  843.       FOR i%=h_cursol% TO no1%
  844.         IF hiratext%(i%)>=&H2420 AND hiratext%(i%)<=&H247F
  845.           h_cursol%=i%
  846.           i%=no1%+10
  847.         ENDIF
  848.       NEXT i%
  849.       IF i%=no1%+1
  850.         henkan%=0
  851.       ELSE
  852.         FOR i%=0 TO 7
  853.           j%=i%+h_cursol%
  854.           IF j%>no1%
  855.             h_no1%=i%
  856.             i%=7
  857.           ELSE
  858.             IF hiratext%(j%)<&H2420 OR hiratext%(j%)>&H247F
  859.               h_no1%=i%
  860.               i%=7
  861.             ELSE
  862.               IF i%=7
  863.                 h_no1%=8
  864.               ENDIF
  865.             ENDIF
  866.           ENDIF
  867.         NEXT i%
  868.         IF h_no1%<>0
  869.           comp_k
  870.         ELSE
  871.           henkan%=0
  872.         ENDIF
  873.       ENDIF
  874.     LOOP UNTIL henkan%=0
  875.   ENDIF
  876.   '
  877.   '
  878. RETURN
  879. '
  880. > PROCEDURE cont_a
  881.   '
  882.   PRINT AT(3,23);"INPUT JIS CORD.(HEX) JISCORD = ";
  883.   INPUT jis$
  884.   jis%=VAL("&H"+jis$)
  885.   IF jis%<&H2000 OR jis%>&H4FFF
  886.   ELSE
  887.     IF LEN(c$(jis%-&H2000))=32
  888.       chara1%=jis%
  889.       chara2%=0
  890.       display_hira
  891.     ENDIF
  892.   ENDIF
  893.   PRINT AT(3,23);"                                                          "
  894.   PRINT AT(3,23);text$
  895.   '
  896. RETURN
  897. '
  898. > PROCEDURE cont_t
  899.   '
  900.   PRINT AT(3,23);"SET TAB. TAB=";
  901.   INPUT tab1%
  902.   IF tab1%>max_xposition% OR tab1%<1
  903.     tab1%=tab%
  904.   ENDIF
  905.   tab%=tab1%
  906.   PRINT AT(3,23);"                               "
  907.   PRINT AT(3,23);text$
  908.   '
  909. RETURN
  910. '
  911. > PROCEDURE cont_del
  912.   '
  913.   current_cursol
  914.   '
  915.   IF end_chara_e%=1
  916.     IF ec_y%>=(kypos%+refline%)
  917.       IF ec_y%=(kypos%+refline%)
  918.         end_chara_e%=0
  919.       ELSE
  920.         DEC ec_y%
  921.       ENDIF
  922.     ENDIF
  923.   ENDIF
  924.   '
  925.   bun_add%=VARPTR(bun&(0,0))
  926.   c_add%=(kypos%+refline%)*(max_xdim%+1)*2
  927.   rmain%=bun_long%-c_add%-bun_line_long%
  928.   IF rmain%>0
  929.     BMOVE bun_add%+c_add%+bun_line_long%,bun_add%+c_add%,rmain%
  930.   ENDIF
  931.   '
  932.   FOR j%=0 TO max_xposition%
  933.     bun&(j%,maxline%)=spacechara%
  934.   NEXT j%
  935.   '
  936.   GET 15,(kypos%+1)*18+30,(max_xposition%+2)*16,14*18+46,pic_buf$
  937.   BOUNDARY 0
  938.   PBOX 15,14*18+30,(max_xposition%+2)*16,14*18+46
  939.   BOUNDARY 1
  940.   PUT 15,(kypos%)*18+30,pic_buf$
  941.   i%=14
  942.   offset%=(1440*i%)+2400
  943.   FOR j%=0 TO max_xposition%
  944.     chara1%=bun&(j%,i%+refline%)
  945.     ADD offset%,2
  946.     asm%=V:asm$
  947.     ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  948.   NEXT j%
  949.   '
  950.   current_cursol
  951.   '
  952. RETURN
  953. '
  954. > PROCEDURE clr_home
  955.   '
  956.   current_cursol
  957.   IF kxpos%=0 AND kypos%=0 AND refline%<>0
  958.     refline%=0
  959.     redraw
  960.   ENDIF
  961.   kxpos%=0
  962.   kypos%=0
  963.   current_cursol
  964.   '
  965. RETURN
  966. '
  967. > PROCEDURE tab
  968.   '
  969.   current_cursol
  970.   i%=DIV(kxpos%,tab%)
  971.   kxpos%=(i%+1)*tab%
  972.   IF kxpos%>max_xposition%
  973.     inc_yposition
  974.     kxpos%=0
  975.   ENDIF
  976.   current_cursol
  977.   '
  978. RETURN
  979. '
  980. > PROCEDURE cont_e
  981.   '
  982.   current_cursol
  983.   '
  984.   IF no1%=0
  985.     IF end_chara_e%=1
  986.       ALERT 1,"  END CHARACTER ALREADY EXIST.  |  "+STR$(DIV(ec_y%,pageline%)+1)+" PAGE "+STR$(MOD(ec_y%,pageline%)+1)+" LINE "+STR$(ec_x%+1)+" COLUMN  |  DELETE END CHARACTER ?  ",2,"  OK  |CANCEL",l%
  987.       IF l%=1
  988.         bun&(ec_x%,ec_y%)=0
  989.         end_chara_e%=0
  990.         IF ec_y%<(refline%+15) AND ec_y%>=(refline%)
  991.           i2%=kxpos%
  992.           j2%=kypos%
  993.           kxpos%=ec_x%
  994.           kypos%=ec_y%-refline%
  995.           chara1%=spacechara%
  996.           chara2%=0
  997.           tr%=1
  998.           display_hira
  999.           tr%=0
  1000.           kxpos%=i2%
  1001.           kypos%=j2%
  1002.           end_chara_e%=0
  1003.         ENDIF
  1004.       ENDIF
  1005.     ELSE
  1006.       chara1%=end_chara%
  1007.       chara2%=0
  1008.       j2%=kypos%+refline%
  1009.       i2%=kxpos%
  1010.       tr%=1
  1011.       display_hira
  1012.       tr%=0
  1013.       ec_y%=j2%
  1014.       ec_x%=i2%
  1015.       end_chara_e%=1
  1016.       IF kxpos%<>0
  1017.         inc_yposition
  1018.       ENDIF
  1019.     ENDIF
  1020.   ENDIF
  1021.   '
  1022.   current_cursol
  1023.   '
  1024. RETURN
  1025. '
  1026. > PROCEDURE bun_save
  1027.   '
  1028.   PRINT AT(3,23);"SAVE !"
  1029.   '
  1030.   IF end_chara_e%=1
  1031.     end_c%=1
  1032.     end_x%=ec_x%
  1033.     end_y%=ec_y%
  1034.   ELSE
  1035.     end_c%=0
  1036.   ENDIF
  1037.   '
  1038.   IF end_c%=0
  1039.     ALERT 2,"  END CHARACTER NOT FOUND.  |  SAVE ALL LINES("+STR$(maxline%)+"LINES) ?  ",2," SAVE |CANCEL",l%
  1040.     IF l%=1
  1041.       end_x%=max_xposition%
  1042.       end_y%=maxline%
  1043.       bun&(max_xposition%,maxline%)=end_chara%
  1044.       end_c%=1
  1045.     ENDIF
  1046.   ENDIF
  1047.   '
  1048.   IF end_c%=1
  1049.     FILESELECT "\*.KAN","",file_1$
  1050.     l%=1
  1051.     '
  1052.     IF file_1$="" OR file_1$="\"
  1053.       l%=2
  1054.     ENDIF
  1055.     '
  1056.     IF INSTR(file_1$,".")=0
  1057.       file_1$=file_1$+".KAN"
  1058.     ENDIF
  1059.     '
  1060.     IF EXIST(file_1$)
  1061.       ALERT 2,"  FILE ALREADY EXIST !  |  OVER WRITE ?  ",1,"  OK  |CANCEL",l%
  1062.     ENDIF
  1063.     '
  1064.     IF l%=1
  1065.       OPEN "O",#1,file_1$
  1066.       texthead$=MKI$(version_no%)+MKI$(version_sub%)+MKI$(max_xposition%)
  1067.       texthead$=LEFT$(texthead$+"                                ",32)
  1068.       PRINT #1,texthead$;
  1069.       FOR i%=0 TO end_y%
  1070.         FOR j%=0 TO max_xposition%
  1071.           IF i%=end_y% AND j%>end_x%
  1072.           ELSE
  1073.             PRINT #1,MKI$(bun&(j%,i%));
  1074.           ENDIF
  1075.         NEXT j%
  1076.       NEXT i%
  1077.       CLOSE #1
  1078.       PRINT AT(3,23);"                                   "
  1079.       PRINT AT(3,23);"File Name = ";file_1$
  1080.       ALERT 0," SAVE ENDED.  ",1," OK ",l%
  1081.     ENDIF
  1082.   ENDIF
  1083.   '
  1084.   PRINT AT(3,23);"                                                        "
  1085.   PRINT AT(3,23);text$
  1086.   '
  1087. RETURN
  1088. '
  1089. > PROCEDURE bun_load
  1090.   '
  1091.   PRINT AT(3,23);"LOAD !"
  1092.   '
  1093.   FILESELECT "\*.KAN","",file_1$
  1094.   '
  1095.   IF EXIST(file_1$)
  1096.     ARRAYFILL bun&(),spacechara%
  1097.     OPEN "I",#1,file_1$
  1098.     texthead$=INPUT$(32,#1)
  1099.     max_xposition%=CVI(MID$(texthead$,5,2))
  1100.     IF max_xposition%>37
  1101.       max_xposition%=37
  1102.     ENDIF
  1103.     IF max_xposition%<1
  1104.       max_xposition%=37
  1105.     ENDIF
  1106.     i%=0
  1107.     j%=0
  1108.     i1%=(LOF(#1)-32)/2
  1109.     FOR j1%=1 TO i1%
  1110.       bun&(j%,i%)=CVI(INPUT$(2,#1))
  1111.       d_load%=bun&(j%,i%)
  1112.       INC j%
  1113.       IF j%>max_xposition%
  1114.         INC i%
  1115.         j%=0
  1116.       ENDIF
  1117.       IF i%>maxline%
  1118.         j1%=i1%
  1119.       ENDIF
  1120.     NEXT j1%
  1121.     CLOSE #1
  1122.     '
  1123.     IF d_load%=end_chara%
  1124.       end_chara_e%=1
  1125.       DEC j%
  1126.       IF j%=-1
  1127.         j%=max_xposition%
  1128.         DEC i%
  1129.         IF i%=-1
  1130.           i%=0
  1131.           j%=0
  1132.         ENDIF
  1133.       ENDIF
  1134.       ec_y%=i%
  1135.       ec_x%=j%
  1136.     ELSE
  1137.       end_chara_e%=0
  1138.     ENDIF
  1139.     '
  1140.     BOUNDARY 0
  1141.     PBOX 10,25,628,305
  1142.     BOUNDARY 1
  1143.     kxpos%=0                      ! COLUMN POSITION OF DISPLAY
  1144.     kypos%=0                      ! LINE POSITION OF DISPLAY
  1145.     tr%=0                         ! SUB TEXT CHARACTER IS...
  1146.     no1%=0                        ! NUMBER OF SUB TEXT CHARACTER
  1147.     refline%=0                    ! REFERENCE LINE (TOP LINE OF DISPLAY)
  1148.     no_conv%=0                    ! NO CONVERT MODE ON/OFF
  1149.     text$=""
  1150.     redraw
  1151.     current_cursol
  1152.     sub_text_plane
  1153.     '
  1154.     PRINT AT(3,23);"                             "
  1155.     PRINT AT(3,23);"File Name = ";file_1$
  1156.     ALERT 0," LOAD ENDED.  ",1," OK ",l%
  1157.     '
  1158.   ENDIF
  1159.   '
  1160.   PRINT AT(3,23);"                                                        "
  1161.   PRINT AT(3,23);text$
  1162.   '
  1163. RETURN
  1164. '
  1165. > PROCEDURE up_arrow
  1166.   '
  1167.   current_cursol
  1168.   '
  1169.   DEC kypos%
  1170.   IF kypos%=-1
  1171.     INC kypos%
  1172.     DEC refline%
  1173.     IF refline%<0
  1174.       refline%=0
  1175.     ELSE
  1176.       BOUNDARY 0
  1177.       PBOX 11,282,34+(16*max_xposition%),298
  1178.       BOUNDARY 1
  1179.       screen_add%=XBIOS(2)
  1180.       FOR i%=30 TO 46 STEP 2
  1181.         BMOVE screen_add%+((i%-2)*80),screen_add%+(i%*80),20160
  1182.       NEXT i%
  1183.       i%=0
  1184.       offset%=(1440*i%)+2400
  1185.       FOR j%=0 TO max_xposition%
  1186.         chara1%=bun&(j%,i%+refline%)
  1187.         ADD offset%,2
  1188.         asm%=V:asm$
  1189.         ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1190.       NEXT j%
  1191.     ENDIF
  1192.   ENDIF
  1193.   '
  1194.   current_cursol
  1195.   '
  1196. RETURN
  1197. '
  1198. > PROCEDURE left_arrow
  1199.   '
  1200.   current_cursol
  1201.   DEC kxpos%
  1202.   IF kxpos%=-1
  1203.     kxpos%=max_xposition%
  1204.     DEC kypos%
  1205.     IF kypos%=-1
  1206.       IF refline%=0
  1207.         kxpos%=0
  1208.         kypos%=0
  1209.       ELSE
  1210.         kypos%=14
  1211.         refline%=refline%-15
  1212.         IF refline%<0
  1213.           kypos%=refline%+14
  1214.           refline%=0
  1215.         ENDIF
  1216.         redraw
  1217.       ENDIF
  1218.     ENDIF
  1219.   ENDIF
  1220.   current_cursol
  1221.   '
  1222. RETURN
  1223. '
  1224. > PROCEDURE dn_arrow
  1225.   '
  1226.   current_cursol
  1227.   '
  1228.   INC kypos%
  1229.   IF refline%+kypos%>maxline%
  1230.     DEC kypos%
  1231.   ENDIF
  1232.   IF kypos%=15
  1233.     DEC kypos%
  1234.     INC refline%
  1235.     IF refline%+14>maxline%
  1236.       refline%=maxline%-14
  1237.     ELSE
  1238.       BOUNDARY 0
  1239.       PBOX 11,30,34+(16*max_xposition%),46
  1240.       BOUNDARY 1
  1241.       screen_add%=XBIOS(2)
  1242.       FOR i%=46 TO 30 STEP -2
  1243.         BMOVE screen_add%+((i%+2)*80),screen_add%+(i%*80),20160
  1244.       NEXT i%
  1245.       i%=14
  1246.       offset%=(1440*i%)+2400
  1247.       FOR j%=0 TO max_xposition%
  1248.         chara1%=bun&(j%,i%+refline%)
  1249.         ADD offset%,2
  1250.         asm%=V:asm$
  1251.         ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1252.       NEXT j%
  1253.     ENDIF
  1254.   ENDIF
  1255.   '
  1256.   current_cursol
  1257.   '
  1258. RETURN
  1259. '
  1260. > PROCEDURE right_arrow
  1261.   '
  1262.   current_cursol
  1263.   INC kxpos%
  1264.   IF kxpos%>max_xposition%
  1265.     kxpos%=0
  1266.     INC kypos%
  1267.     IF refline%+kypos%>maxline%
  1268.       DEC kypos%
  1269.     ENDIF
  1270.     IF kypos%=15
  1271.       refline%=refline%+15
  1272.       kypos%=0
  1273.       IF refline%+14>maxline%
  1274.         kypos%=refline%-maxline%+14
  1275.         refline%=maxline%-14
  1276.       ENDIF
  1277.       redraw
  1278.     ENDIF
  1279.   ENDIF
  1280.   current_cursol
  1281.   '
  1282. RETURN
  1283. '
  1284. > PROCEDURE del
  1285.   '
  1286.   IF no1%=0
  1287.     current_cursol
  1288.     '
  1289.     i%=kxpos%+((kypos%+refline%)*(max_xposition%+1))
  1290.     j%=max_xposition%+(maxline%*(max_xposition%+1))
  1291.     i1%=i%
  1292.     DO
  1293.       i2%=bun&(MOD(i1%,max_xposition%+1),DIV(i1%,max_xposition%+1))
  1294.       EXIT IF i2%=cr_chara% OR i2%=page_chara% OR i2%=end_chara% OR i2%=spacechara%
  1295.       INC i1%
  1296.     LOOP UNTIL i1%>j%
  1297.     IF i1%>j%
  1298.       i1%=j%
  1299.     ENDIF
  1300.     IF i2%=end_chara%
  1301.       DEC i1%
  1302.     ENDIF
  1303.     tr%=1
  1304.     i4%=max_xposition%+((14+refline%)*(max_xposition%+1))
  1305.     FOR i3%=i% TO i1%
  1306.       chara1%=bun&(MOD(i3%+1,max_xposition%+1),DIV(i3%+1,max_xposition%+1))
  1307.       chara2%=0
  1308.       IF i3%=i1%
  1309.         chara1%=spacechara%
  1310.       ENDIF
  1311.       IF i3%<i4%
  1312.         display_hira
  1313.       ELSE
  1314.         IF i3%=i4%
  1315.           '
  1316.           offset%=(1440*kypos%)+(kxpos%*2)+2402
  1317.           asm%=V:asm$
  1318.           ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1319.           '
  1320.           '          ta1$=pri$+c$(chara1%-&H2000)
  1321.           '          SPRITE ta1$,kxpos%*16+15,kypos%*18+30
  1322.           bun&(kxpos%,kypos%+refline%)=chara1%
  1323.           IF kxpos%=ec_x% AND (kypos%+refline%)=ec_y% AND end_chara_e%=1
  1324.             end_chara_e%=0
  1325.           ENDIF
  1326.           kxpos%=0
  1327.           INC kypos%
  1328.         ELSE
  1329.           bun&(kxpos%,kypos%+refline%)=chara1%
  1330.           IF kxpos%=ec_x% AND (kypos%+refline%)=ec_y% AND end_chara_e%=1
  1331.             end_chara_e%=0
  1332.           ENDIF
  1333.           INC kxpos%
  1334.           IF kxpos%>max_xposition%
  1335.             kxpos%=0
  1336.             INC kypos%
  1337.           ENDIF
  1338.         ENDIF
  1339.       ENDIF
  1340.     NEXT i3%
  1341.     tr%=0
  1342.     kxpos%=MOD(i%,max_xposition%+1)
  1343.     kypos%=DIV(i%,max_xposition%+1)-refline%
  1344.     current_cursol
  1345.     '
  1346.   ENDIF
  1347.   '
  1348. RETURN
  1349. '
  1350. > PROCEDURE redraw
  1351.   '
  1352.   PBOX 10,25,36+(16*max_xposition%),305
  1353.   FOR i%=0 TO 14
  1354.     offset%=(1440*i%)+2400
  1355.     FOR j%=0 TO max_xposition%
  1356.       chara1%=bun&(j%,i%+refline%)
  1357.       ADD offset%,2
  1358.       asm%=V:asm$
  1359.       ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1360.     NEXT j%
  1361.   NEXT i%
  1362.   '
  1363. RETURN
  1364. '
  1365. > PROCEDURE current_cursol
  1366.   GRAPHMODE 3
  1367.   BOUNDARY 0
  1368.   DEFFILL 1,2,8
  1369.   PBOX kxpos%*16+16,kypos%*18+30,kxpos%*16+30,kypos%*18+45
  1370.   GRAPHMODE 1
  1371.   BOUNDARY 1
  1372.   DEFFILL 1,0
  1373.   TEXT 300,18,RIGHT$("   "+STR$(DIV(kypos%+refline%,pageline%)+1),3)+" PAGE "+RIGHT$("   "+STR$(MOD(kypos%+refline%,pageline%)+1),3)+" LINE  "+RIGHT$("  "+STR$(kxpos%+1),2)+" COLUMN"
  1374. RETURN
  1375. '
  1376. > PROCEDURE program_name
  1377.   '
  1378.   DIM title%(15)
  1379.   RESTORE cdata_1
  1380.   FOR i%=0 TO 14
  1381.     READ title%(i%)
  1382.   NEXT i%
  1383. cdata_1:
  1384.   DATA &H213E,&H3B30,&H472F,&H3F32,&H4240,&H4F3A,&H213E
  1385.   DATA &H2121,&H467C,&H4B5C,&H386C,&H256F,&H213C,&H2557,&H256D
  1386.   offset%=400
  1387.   FOR i%=0 TO 14
  1388.     chara1%=title%(i%)
  1389.     ADD offset%,2
  1390.     asm%=V:asm$
  1391.     ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1392.   NEXT i%
  1393.   '
  1394. RETURN
  1395. '
  1396. > PROCEDURE sub_text_pic
  1397.   PBOX 10,315,628,340
  1398.   offset%=25600
  1399.   FOR j%=0 TO 37
  1400.     chara1%=spacechara%
  1401.     ADD offset%,2
  1402.     asm%=V:asm$
  1403.     ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1404.   NEXT j%
  1405.   GET 10,315,628,340,sub_text_pic$
  1406. RETURN
  1407. '
  1408. > PROCEDURE main_text_plane
  1409.   PBOX 10,25,628,305
  1410.   FOR i%=0 TO 14
  1411.     offset%=(1440*i%)+2400
  1412.     FOR j%=0 TO max_xposition%
  1413.       chara1%=spacechara%
  1414.       ADD offset%,2
  1415.       asm%=V:asm$
  1416.       ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1417.     NEXT j%
  1418.   NEXT i%
  1419.   '
  1420.   '  DEFLINE 1,3,1,1
  1421.   '  LINE 10,25,10,305
  1422.   '  LINE 10,25,627,25
  1423.   '  LINE 627,25,627,305
  1424.   '  LINE 10,305,627,305
  1425.   '
  1426. RETURN
  1427. '
  1428. > PROCEDURE sub_text_plane
  1429.   PUT 10,315,sub_text_pic$
  1430. RETURN
  1431. '
  1432. > PROCEDURE back_space
  1433.   '
  1434.   IF LEN(text$)<>0
  1435.     text$=LEFT$(text$,LEN(text$)-1)
  1436.     PRINT AT(3,23);"            "
  1437.     PRINT AT(3,23);text$
  1438.   ELSE
  1439.     IF no1%<>0
  1440.       DEC no1%
  1441.       sub_text_plane
  1442.       offset%=25600
  1443.       FOR i%=1 TO no1%
  1444.         chara1%=hiratext%(i%)
  1445.         ADD offset%,2
  1446.         asm%=V:asm$
  1447.         ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1448.       NEXT i%
  1449.       IF no_conv%=1
  1450.         text1$=LEFT$(text1$,no1%)
  1451.       ENDIF
  1452.     ELSE
  1453.       IF kxpos%=0 AND (kypos%+refline%)=0
  1454.       ELSE
  1455.         tr%=1
  1456.         current_cursol
  1457.         dec_xposition
  1458.         chara1%=spacechara%
  1459.         offset%=(1440*kypos%)+(kxpos%*2)+2402
  1460.         asm%=V:asm$
  1461.         ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1462.         bun&(kxpos%,kypos%+refline%)=chara1%
  1463.         IF kxpos%=ec_x% AND (kypos%+refline%)=ec_y% AND end_chara_e%=1
  1464.           end_chara_e%=0
  1465.         ENDIF
  1466.         current_cursol
  1467.         tr%=0
  1468.       ENDIF
  1469.     ENDIF
  1470.   ENDIF
  1471.   '
  1472. RETURN
  1473. '
  1474. > PROCEDURE hira_kata_conv
  1475.   '
  1476.   FOR i%=1 TO no1%
  1477.     IF hiratext%(i%)>&H2420 AND hiratext%(i%)<&H247F
  1478.       ADD hiratext%(i%),&H100
  1479.     ENDIF
  1480.   NEXT i%
  1481.   '
  1482.   sub_text_plane
  1483.   offset%=25600
  1484.   FOR i%=1 TO no1%
  1485.     chara1%=hiratext%(i%)
  1486.     ADD offset%,2
  1487.     asm%=V:asm$
  1488.     ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1489.   NEXT i%
  1490.   '
  1491. RETURN
  1492. '
  1493. > PROCEDURE kana_hira_conv
  1494.   '
  1495.   FOR i%=1 TO no1%
  1496.     IF hiratext%(i%)>&H2520 AND hiratext%(i%)<&H257F
  1497.       SUB hiratext%(i%),&H100
  1498.     ENDIF
  1499.   NEXT i%
  1500.   '
  1501.   sub_text_plane
  1502.   offset%=25600
  1503.   FOR i%=1 TO no1%
  1504.     chara1%=hiratext%(i%)
  1505.     ADD offset%,2
  1506.     asm%=V:asm$
  1507.     ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1508.   NEXT i%
  1509.   '
  1510. RETURN
  1511. '
  1512. > PROCEDURE lower_case
  1513.   '
  1514.   FOR i%=1 TO no1%
  1515.     IF hiratext%(i%)>&H2340 AND hiratext%(i%)<&H235F
  1516.       ADD hiratext%(i%),&H20
  1517.     ENDIF
  1518.   NEXT i%
  1519.   '
  1520.   sub_text_plane
  1521.   offset%=25600
  1522.   FOR i%=1 TO no1%
  1523.     chara1%=hiratext%(i%)
  1524.     ADD offset%,2
  1525.     asm%=V:asm$
  1526.     ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1527.   NEXT i%
  1528.   '
  1529. RETURN
  1530. '
  1531. > PROCEDURE upper_case
  1532.   '
  1533.   FOR i%=1 TO no1%
  1534.     IF hiratext%(i%)>&H2360 AND hiratext%(i%)<&H237F
  1535.       SUB hiratext%(i%),&H20
  1536.     ENDIF
  1537.   NEXT i%
  1538.   '
  1539.   sub_text_plane
  1540.   offset%=25600
  1541.   FOR i%=1 TO no1%
  1542.     chara1%=hiratext%(i%)
  1543.     ADD offset%,2
  1544.     asm%=V:asm$
  1545.     ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1546.   NEXT i%
  1547.   '
  1548. RETURN
  1549. '
  1550. > PROCEDURE no_conv
  1551.   '
  1552.   j%=LEN(text1$)
  1553.   IF j%>38
  1554.     j%=38
  1555.   ENDIF
  1556.   FOR i%=1 TO j%
  1557.     asc1%=ASC(MID$(text1$,i%,1))
  1558.     SELECT asc1%
  1559.     CASE &H41 TO &H5A
  1560.       hiratext%(i%)=asc1%+&H2300
  1561.     CASE &H61 TO &H7A
  1562.       hiratext%(i%)=asc1%+&H2300
  1563.     CASE &H2C
  1564.       hiratext%(i%)=&H2124
  1565.     CASE &H2E
  1566.       hiratext%(i%)=&H2125
  1567.     DEFAULT
  1568.       text$=CHR$(asc1%)
  1569.       asc2%=i%
  1570.       no1%=i%-1
  1571.       text_check
  1572.       i%=asc2%
  1573.       hiratext%(i%)=chara1%
  1574.     ENDSELECT
  1575.   NEXT i%
  1576.   '
  1577.   jj%=j%
  1578.   sub_text_plane
  1579.   j%=jj%
  1580.   offset%=25600
  1581.   FOR i%=1 TO j%
  1582.     chara1%=hiratext%(i%)
  1583.     ADD offset%,2
  1584.     asm%=V:asm$
  1585.     ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1586.   NEXT i%
  1587.   '
  1588.   no1%=j%
  1589.   text$=""
  1590.   PRINT AT(3,23);"                    "
  1591.   PRINT AT(3,23);text$
  1592.   '
  1593.   no_conv%=1
  1594.   '
  1595. RETURN
  1596. '
  1597. > PROCEDURE undo_no_conv
  1598.   '
  1599.   sub_text_plane
  1600.   no1%=0
  1601.   text$=text1$
  1602.   DO UNTIL asc1%=LEN(text$)
  1603.     asc1%=LEN(text$)
  1604.     text_check
  1605.   LOOP
  1606.   '
  1607.   PRINT AT(3,23);"                    "
  1608.   PRINT AT(3,23);text$
  1609.   '
  1610.   no_conv%=0
  1611.   '
  1612. RETURN
  1613. '
  1614. > PROCEDURE check_ins
  1615.   '
  1616.   IF insert%=1
  1617.     i1%=kxpos%+((kypos%+refline%)*(max_xposition%+1))
  1618.     j1%=max_xposition%+(maxline%*(max_xposition%+1))
  1619.     i2%=i1%
  1620.     DO
  1621.       EXIT IF bun&(MOD(i2%,max_xposition%+1),DIV(i2%,max_xposition%+1))=spacechara%
  1622.       INC i2%
  1623.     LOOP UNTIL i2%>j1%
  1624.     IF i2%>j1%
  1625.       i2%=j1%
  1626.     ENDIF
  1627.     j2%=ec_x%+ec_y%*(max_xposition%+1)
  1628.     IF i2%>j2% AND i1%<=j2%
  1629.       INC ec_x%
  1630.       IF ec_x%>max_xposition%
  1631.         INC ec_y%
  1632.         ec_x%=0
  1633.         IF ec_y%>maxline%
  1634.           end_chara_e%=0
  1635.         ENDIF
  1636.       ENDIF
  1637.     ENDIF
  1638.     IF i1%<>i2%
  1639.       i4%=max_xposition%+((14+refline%)*(max_xposition%+1))
  1640.       FOR i5%=i2% DOWNTO i1%+1
  1641.         i3%=bun&(MOD(i5%-1,max_xposition%+1),DIV(i5%-1,max_xposition%+1))
  1642.         bun&(MOD(i5%,max_xposition%+1),DIV(i5%,max_xposition%+1))=i3%
  1643.         IF i4%>=i5%
  1644.           offset%=(1440*(DIV(i5%,max_xposition%+1)-refline%))+(MOD(i5%,max_xposition%+1)*2)+2402
  1645.           asm%=V:asm$
  1646.           ~C:asm%(L:screen%,L:V:c$(i3%-&H2000),L:offset%)
  1647.         ENDIF
  1648.       NEXT i5%
  1649.     ENDIF
  1650.   ENDIF
  1651.   '
  1652. RETURN
  1653. '
  1654. > PROCEDURE transform
  1655.   '
  1656.   IF no1%=0 AND text$=""
  1657.     chara1%=cr_chara%
  1658.     chara2%=0
  1659.     check_ins
  1660.     tr%=1
  1661.     display_hira
  1662.     tr%=0
  1663.     IF kxpos%<>0
  1664.       inc_yposition
  1665.       current_cursol
  1666.     ELSE
  1667.       current_cursol
  1668.     ENDIF
  1669.     '
  1670.   ELSE
  1671.     DO UNTIL text$=""
  1672.       convert$=LEFT$(text$,1)
  1673.       asc1%=ASC(convert$)
  1674.       IF (asc1%>&H2F AND asc1%<&H3A) OR (asc1%>&H40 AND asc1%<&H5B) OR (asc1%>&H61 AND asc1%<&H7B)
  1675.         chara1%=ASC(convert$)+&H2300
  1676.         chara2%=0
  1677.         display_hira
  1678.         text$=RIGHT$(text$,LEN(text$)-1)
  1679.       ELSE
  1680.         text_check
  1681.       ENDIF
  1682.     LOOP
  1683.     '
  1684.     tr%=1
  1685.     FOR i%=1 TO no1%
  1686.       chara1%=hiratext%(i%)
  1687.       chara2%=0
  1688.       check_ins
  1689.       display_hira
  1690.     NEXT i%
  1691.     current_cursol
  1692.     tr%=0
  1693.     no1%=0
  1694.     text1$=""
  1695.     '
  1696.     sub_text_plane
  1697.     PRINT AT(3,23);"            "
  1698.     '
  1699.   ENDIF
  1700.   '
  1701.   no_conv%=0
  1702.   '
  1703. RETURN
  1704. '
  1705. > PROCEDURE initial
  1706.   OPTION BASE 0
  1707.   GRAPHMODE 1
  1708.   DEFFILL 1,0
  1709.   DEFLINE 1,1,0,0
  1710.   DEFTEXT 1,0,0,13
  1711.   IF XBIOS(4)<>2
  1712.     ALERT 1,"SORRY !  |THIS PROGRAM RUNS ONLY  |HIGH RESOLUTION.  ",1," OK ",l%
  1713.     SYSTEM
  1714.   ENDIF
  1715.   read_hira_font
  1716.   read_dictionary
  1717.   convert_init_data
  1718. RETURN
  1719. '
  1720. > PROCEDURE initial_data
  1721.   '
  1722.   version_no%=1                 ! VERSION NO.
  1723.   version_sub%=80               ! VERSION SUB NO.
  1724.   '
  1725.   kxpos%=0                      ! COLUMN POSITION OF DISPLAY
  1726.   kypos%=0                      ! LINE POSITION OF DISPLAY
  1727.   tr%=0                         ! SUB TEXT CHARACTER IS...
  1728.   no_conv%=0                    ! NO CONVERT MODE ON/OFF
  1729.   no1%=0                        ! NUMBER OF SUB TEXT CHARACTER
  1730.   refline%=0                    ! REFERENCE LINE (TOP LINE OF DISPLAY)
  1731.   end_chara_e%=0                ! END CHARACTER ON/OFF
  1732.   insert%=0                     ! INSERT MODE ON/OFF
  1733.   pageline%=15                  ! LINES PAR A PAGE
  1734.   maxline%=1000                 ! AVAILABLE LINE OF THIS PROGRAM
  1735.   max_xposition%=37             ! MAXIMAM COLUMNS (+1)
  1736.   max_xdim%=37                  ! MAXIMAM X DIMENSION
  1737.   tab%=8                        ! TAB POSITION
  1738.   spacechara%=&H217F            ! NO TEXT CHARACTER
  1739.   cr_chara%=&H2120              ! CARRIDGE RETURN CHARACTER
  1740.   page_chara%=&H2220            ! PAGE ADVANCED CHARACTER
  1741.   end_chara%=&H222F             ! END OF TEXT
  1742.   '
  1743.   '  hiratext%:SUB TEXT BUFFER.
  1744.   '  bun&()   :MAIN TEXT BUFFER.
  1745.   '
  1746.   DIM hiratext%(40),bun&(max_xposition%,maxline%),hbuf%(10)
  1747.   ARRAYFILL bun&(),spacechara%
  1748.   '
  1749.   bun_long%=((max_xposition%+1)*(maxline%+1))*2
  1750.   bun_line_long%=(max_xposition%+1)*2
  1751.   '
  1752.   '
  1753. RETURN
  1754. '
  1755. > PROCEDURE file_select_read
  1756.   REPEAT
  1757.     path$=DIR$(0)+"\*.TXT"
  1758.     FILESELECT path$,"",file$
  1759.     IF file$=""
  1760.       SYSTEM
  1761.     ENDIF
  1762.     '
  1763.     CLS
  1764.     PRINT AT(2,1);"FILE NAME = ";file$
  1765.     OPEN "I",#1,file$
  1766.     PBOX 10,25,627,390
  1767.     '
  1768.     REPEAT
  1769.       LINE INPUT #1,textinput$
  1770.       text$=textinput$
  1771.       text_check
  1772.       IF disp%=1
  1773.         IF cont%=0
  1774.           inc_yposition
  1775.         ELSE
  1776.           cont%=0
  1777.         ENDIF
  1778.       ENDIF
  1779.     UNTIL EOF(#1)
  1780.     '
  1781.     PRINT AT(67,1);"-END OF TEXT-"
  1782.     CLOSE #1
  1783.     '
  1784.     ~INP(2)
  1785.     ALERT 2,"CONVERT PROGRAM.  |CONVERT NEXT or QUIT ?  |",2," NEXT | QUIT ",l%
  1786.     inc_auto_page
  1787.     initial_data
  1788.   UNTIL l%=2
  1789. RETURN
  1790. '
  1791. > PROCEDURE convert_init_data
  1792.   '
  1793.   PRINT
  1794.   PRINT " CONVERT HIRAGANA DATA LOADING..."
  1795.   '
  1796.   DIM conv$(200),conv1%(200),conv2%(200)
  1797.   '
  1798.   ' (1-51)...1 character  (52-154)...2 character  (155-197)...3 character
  1799.   '
  1800.   cword1%=51
  1801.   cword2%=154
  1802.   cwordmax%=197
  1803.   '
  1804.   conv$(1)=CHR$(&H22)
  1805.   conv1%(1)=&H2149
  1806.   conv2%(1)=0
  1807.   RESTORE cdata_2
  1808.   FOR i%=2 TO cwordmax%
  1809.     READ conv$(i%),conv1%(i%),conv2%(i%)
  1810.   NEXT i%
  1811. cdata_2:
  1812.   DATA ".",&H2123,0,",",&H2122,0," ",&H2121,0,"?",&H2129,0,"!",&H212A,0
  1813.   DATA "-",&h215D,0,"+",&H215C,0,"*",&H2176,0,"/",&H213F,0,"\",&H2140,0
  1814.   DATA "(",&H214A,0,")",&H214B,0,"$",&H2170,0,"_",&H2132,0,"~",&H2141,0
  1815.   DATA "@",&H2177,0,"#",&H2174,0,"&",&H2175,0,"%",&H2173,0,"^",&H2130,0
  1816.   DATA "<",&H2163,0,">",&H2164,0,";",&H2128,0,":",&H2127,0,"`",&H212E,0
  1817.   DATA "[",&H214E,0,"]",&H214F,0,"=",&H2161,0,"{",&H2150,0,"}",&H2151,0
  1818.   DATA "'",&H212D,0,"|",&H2145,0," ",&H2121,0," ",&H2121,0," ",&H2121,0
  1819.   DATA "0",&H2330,0,"1",&H2331,0,"2",&H2332,0,"3",&H2333,0,"4",&H2334,0
  1820.   DATA "5",&H2335,0,"6",&H2336,0,"7",&H2337,0,"8",&H2338,0,"9",&H2339,0
  1821.   DATA "A",&H2422,0,"I",&H2424,0,"U",&H2426,0,"E",&H2428,0,"O",&H242A,0
  1822.   DATA "KA",&H242B,0,"KI",&H242D,0,"KU",&H242F,0,"KE",&H2431,0,"KO",&H2433,0
  1823.   DATA "SA",&H2435,0,"SI",&H2437,0,"SU",&H2439,0,"SE",&H243B,0,"SO",&H243D,0
  1824.   DATA "TA",&H243F,0,"TI",&H2441,0,"TU",&H2444,0,"TE",&H2446,0,"TO",&H2448,0
  1825.   DATA "NA",&H244A,0,"NI",&H244B,0,"NU",&H244C,0,"NE",&H244D,0,"NO",&H244E,0
  1826.   DATA "HA",&H244F,0,"HI",&H2452,0,"HU",&H2455,0,"HE",&H2458,0,"HO",&H245B,0
  1827.   DATA "MA",&H245E,0,"MI",&H245F,0,"MU",&H2460,0,"ME",&H2461,0,"MO",&H2462,0
  1828.   DATA "YA",&H2464,0,"YI",&H2470,0,"YU",&H2466,0,"YE",&H2471,0,"YO",&H2468,0
  1829.   DATA "RA",&H2469,0,"RI",&H246A,0,"RU",&H246B,0,"RE",&H246C,0,"RO",&H246D,0
  1830.   DATA "GA",&H242C,0,"GI",&H242E,0,"GU",&H2430,0,"GE",&H2432,0,"GO",&H2434,0
  1831.   DATA "ZA",&H2436,0,"ZI",&H2438,0,"ZU",&H243A,0,"ZE",&H243C,0,"ZO",&H243E,0
  1832.   DATA "DA",&H2440,0,"DI",&H2442,0,"DU",&H2445,0,"DE",&H2447,0,"DO",&H2449,0
  1833.   DATA "BA",&H2450,0,"BI",&H2453,0,"BU",&H2456,0,"BE",&H2459,0,"BO",&H245C,0
  1834.   DATA "PA",&H2451,0,"PI",&H2454,0,"PU",&H2457,0,"PE",&H245A,0,"PO",&H245D,0
  1835.   DATA "WA",&H246F,0,"WO",&H2472,0,"NN",&H2473,0
  1836.   DATA "CA",&H242B,0,"CI",&H242D,0,"CU",&H242D,&H2465,"CE",&H243B,0,"CO",&H2433,0
  1837.   DATA "FA",&H2455,&H2421,"FI",&H2455,&H2423,"FU",&H2455,0,"FE",&H2455,&H2427,"FO",&H2455,&H2429
  1838.   DATA "QA",&H242F,&H2421,"QI",&H242F,&H2423,"QU",&H242F,0,"QE",&H242F,&H2427,"QO",&H242F,&H2429
  1839.   DATA "WI",&H2426,&H2423,"WU",&H2426,0,"WE",&H2426,&H2427
  1840.   DATA "VA",&H2474,&H2421,"VI",&H2474,&H2423,"VU",&H2474,0,"VE",&H2474,&H2427,"VO",&H2474,&H2429
  1841.   DATA "JA",&H2438,&H2463,"JI",&H2438,0,"JU",&H2438,&H2465,"JE",&H2438,&H2427,"JO",&H2438,&H2467
  1842.   DATA "LA",&H2469,0,"LI",&H246A,0,"LU",&H246B,0,"LE",&H246C,0,"LO",&H246D,0
  1843.   DATA "DH",&H2447,&H2423,"TH",&H2446,&H2423
  1844.   DATA "KYA",&H242D,&H2463,"KYU",&H242D,&H2465,"KYO",&H242D,&H2467
  1845.   DATA "SYA",&H2437,&H2463,"SYU",&H2437,&H2465,"SYO",&H2437,&H2467
  1846.   DATA "TYA",&H2441,&H2463,"TYU",&H2441,&H2465,"TYO",&H2441,&H2467
  1847.   DATA "MYA",&H245F,&H2463,"MYU",&H245F,&H2465,"MYO",&H245F,&H2467
  1848.   DATA "HYA",&H2452,&H2463,"HYU",&H2452,&H2465,"HYO",&H2452,&H2467
  1849.   DATA "NYA",&H244B,&H2463,"NYU",&H244B,&H2465,"NYO",&H244B,&H2467
  1850.   DATA "RYA",&H246A,&H2463,"RYU",&H246A,&H2465,"RYO",&H246A,&H2467
  1851.   DATA "GYA",&H242E,&H2463,"GYU",&H242E,&H2465,"GYO",&H242E,&H2467
  1852.   DATA "ZYA",&H2438,&H2463,"ZYU",&H2438,&H2465,"ZYO",&H2438,&H2467
  1853.   DATA "DYA",&H2442,&H2463,"DYU",&H2442,&H2465,"DYO",&H2442,&H2467
  1854.   DATA "BYA",&H2453,&H2463,"BYU",&H2453,&H2465,"BYO",&H2453,&H2467
  1855.   DATA "PYA",&H2454,&H2463,"PYU",&H2454,&H2465,"PYO",&H2454,&H2467
  1856.   DATA "CHA",&H2441,&H2463,"CHI",&H2441,0,"CHU",&H2441,&H2465,"CHE",&H2441,&H2427,"CHO",&H2441,&H2467
  1857.   DATA "SHI",&H2437,0,"TSU",&H2444,0
  1858.   '
  1859.   '
  1860. RETURN
  1861. '
  1862. > PROCEDURE compere
  1863.   comp%=0
  1864.   FOR i%=cwordstart% TO cwordend%
  1865.     IF convert$=conv$(i%)
  1866.       chara1%=conv1%(i%)
  1867.       chara2%=conv2%(i%)
  1868.       comp%=1
  1869.       i%=200
  1870.     ENDIF
  1871.   NEXT i%
  1872. RETURN
  1873. '
  1874. > PROCEDURE display_hira
  1875.   IF (chara1%-&H2000)>&H2F5F
  1876.   ELSE
  1877.     IF tr%=1
  1878.       offset%=(1440*kypos%)+(2*kxpos%)+2402
  1879.       asm%=V:asm$
  1880.       ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1881.       bun&(kxpos%,kypos%+refline%)=chara1%
  1882.       IF kxpos%=ec_x% AND (kypos%+refline%)=ec_y% AND end_chara_e%=1
  1883.         end_chara_e%=0
  1884.       ENDIF
  1885.       inc_xposition
  1886.     ELSE
  1887.       INC no1%
  1888.       check_no1
  1889.       hiratext%(no1%)=chara1%
  1890.       offset%=25600+(2*no1%)
  1891.       asm%=V:asm$
  1892.       ~C:asm%(L:screen%,L:V:c$(chara1%-&H2000),L:offset%)
  1893.     ENDIF
  1894.     IF chara2%=0 OR (chara2%-&H2000)>&H2F5F
  1895.     ELSE
  1896.       IF tr%=1
  1897.         offset%=(1440*kypos%)+(2*kxpos%)+2402
  1898.         asm%=V:asm$
  1899.         ~C:asm%(L:screen%,L:V:c$(chara2%-&H2000),L:offset%)
  1900.         bun&(kxpos%,kypos%+refline%)=chara2%
  1901.         IF kxpos%=ec_x% AND (kypos%+refline%)=ec_y% AND end_chara_e%=1
  1902.           end_chara_e%=0
  1903.         ENDIF
  1904.         inc_xposition
  1905.       ELSE
  1906.         INC no1%
  1907.         check_no1
  1908.         hiratext%(no1%)=chara2%
  1909.         offset%=25600+(2*no1%)
  1910.         asm%=V:asm$
  1911.         ~C:asm%(L:screen%,L:V:c$(chara2%-&H2000),L:offset%)
  1912.       ENDIF
  1913.     ENDIF
  1914.   ENDIF
  1915. RETURN
  1916. '
  1917. > PROCEDURE check_no1
  1918.   IF no1%=39
  1919.     DEC no1%
  1920.   ENDIF
  1921. RETURN
  1922. '
  1923. > PROCEDURE read_hira_font
  1924.   '
  1925.   PRINT
  1926.   PRINT " FONT LOADING..."
  1927.   '
  1928.   DIM c$(&H3000)
  1929.   IF EXIST(DIR$(0)+"\KANJI3.FNT")
  1930.     OPEN "I",#1,DIR$(0)+"\KANJI3.FNT"
  1931.     '
  1932.     PRINT "   MARK FONT LOADING."
  1933.     FOR i%=&H120 TO &H22F
  1934.       IF MOD(i%,&H100)=&H80
  1935.         i%=i%+&HA0
  1936.       ENDIF
  1937.       c$(i%)=INPUT$(32,#1)
  1938.     NEXT i%
  1939.     '
  1940.     PRINT "   ALPHABET FONT LOADING."
  1941.     FOR i%=&H330 TO &H37F
  1942.       c$(i%)=INPUT$(32,#1)
  1943.     NEXT i%
  1944.     '
  1945.     PRINT "   HIRAGANA FONT LOADING."
  1946.     FOR i%=&H420 TO &H47F
  1947.       c$(i%)=INPUT$(32,#1)
  1948.     NEXT i%
  1949.     '
  1950.     PRINT "   KATAKANA FONT LOADING."
  1951.     FOR i%=&H520 TO &H57F
  1952.       c$(i%)=INPUT$(32,#1)
  1953.     NEXT i%
  1954.     '
  1955.     PRINT "   GREEK FONT LOADING."
  1956.     FOR i%=&H620 TO &H65F
  1957.       c$(i%)=INPUT$(32,#1)
  1958.     NEXT i%
  1959.     '
  1960.     PRINT "   ROSIAN FONT LOADING."
  1961.     FOR i%=&H720 TO &H77F
  1962.       c$(i%)=INPUT$(32,#1)
  1963.     NEXT i%
  1964.     '
  1965.     PRINT "   KANJI FONT LOADING."
  1966.     FOR i%=&H1020 TO &H2F5F
  1967.       IF MOD(i%,&H100)=&H80
  1968.         i%=i%+&HA0
  1969.       ENDIF
  1970.       c$(i%)=INPUT$(32,#1)
  1971.     NEXT i%
  1972.     '
  1973.     CLOSE #1
  1974.   ELSE
  1975.     ALERT 3,"KANJI FONT  |(KANJI3.FNT)  |NOT EXIST.  ",1," QUIT ",l%
  1976.     '    EDIT
  1977.     SYSTEM
  1978.   ENDIF
  1979. RETURN
  1980. '
  1981. > PROCEDURE read_dictionary
  1982.   '
  1983.   IF EXIST(DIR$(0)+"\WORD_DIC.DAT")
  1984.     PRINT
  1985.     PRINT " LOADING DICTIONARY !"
  1986.     '
  1987.     OPEN "I",#1,DIR$(0)+"\WORD_DIC.DAT"
  1988.     mds%=((LOF(#1)-288)/32)-1           ! DICTIONARY SIZE.
  1989.     DIM index%(128),zhi$(mds%),zka$(mds%),zno%(mds%),zi%(mds%)
  1990.     header$=INPUT$(32,#1)
  1991.     ver$=LEFT$(header$,8)
  1992.     PRINT "   DICTIONARY version "+ver$
  1993.     FOR i%=0 TO 127
  1994.       index%(i%)=CVI(INPUT$(2,#1))
  1995.     NEXT i%
  1996.     FOR i%=0 TO ((LOF(#1)-288)/32)-1
  1997.       '
  1998.       buf1$=INPUT$(32,#1)
  1999.       zhi$(i%)=LEFT$(buf1$,16)
  2000.       zka$(i%)=MID$(buf1$,17,8)
  2001.       zno%(i%)=CVL(MID$(buf1$,25,4))
  2002.       zi%(i%)=ASC(MID$(buf1$,29,1))
  2003.       '
  2004.       zhi%=INSTR(zhi$(i%),MKI$(0))
  2005.       IF zhi%<>0
  2006.         zhi$(i%)=LEFT$(zhi$(i%),zhi%-1)
  2007.       ENDIF
  2008.       '
  2009.       zka%=INSTR(zka$(i%),MKI$(0))
  2010.       IF zka%<>0
  2011.         zka$(i%)=LEFT$(zka$(i%),zka%-1)
  2012.       ENDIF
  2013.       '
  2014.     NEXT i%
  2015.     CLOSE #1
  2016.     '
  2017.   ELSE
  2018.     ALERT 1," NO DICTIONARY !  ",1," OK ",l%
  2019.     '    EDIT
  2020.     SYSTEM
  2021.   ENDIF
  2022.   '
  2023. RETURN
  2024. '
  2025. > PROCEDURE text_check
  2026.   convert$=LEFT$(text$,1)
  2027.   IF convert$=""
  2028.   ELSE
  2029.     convert$=UPPER$(convert$)
  2030.     cwordstart%=1
  2031.     cwordend%=cword1%
  2032.     compere
  2033.     IF comp%=1
  2034.       display_hira
  2035.       text$=RIGHT$(text$,LEN(text$)-1)
  2036.     ELSE
  2037.       IF LEN(text$)=1
  2038.       ELSE
  2039.         IF convert$=UPPER$(MID$(text$,2,1)) AND convert$<>"N"
  2040.           chara1%=&H2443
  2041.           chara2%=0
  2042.           display_hira
  2043.           text$=RIGHT$(text$,LEN(text$)-1)
  2044.         ELSE
  2045.           convert$=UPPER$(LEFT$(text$,2))
  2046.           cwordstart%=cword1%+1
  2047.           cwordend%=cword2%
  2048.           compere
  2049.           IF comp%=1
  2050.             display_hira
  2051.             text$=RIGHT$(text$,LEN(text$)-2)
  2052.           ELSE
  2053.             IF LEN(text$)=2
  2054.             ELSE
  2055.               convert$=UPPER$(LEFT$(text$,3))
  2056.               cwordstart%=cword2%+1
  2057.               cwordend%=cwordmax%
  2058.               compere
  2059.               IF comp%=1
  2060.                 display_hira
  2061.                 text$=RIGHT$(text$,LEN(text$)-3)
  2062.               ELSE
  2063.                 convert$=LEFT$(text$,1)
  2064.                 chara1%=ASC(convert$)+&H2300
  2065.                 chara2%=0
  2066.                 display_hira
  2067.                 text$=RIGHT$(text$,LEN(text$)-1)
  2068.               ENDIF
  2069.             ENDIF
  2070.           ENDIF
  2071.         ENDIF
  2072.       ENDIF
  2073.     ENDIF
  2074.   ENDIF
  2075. RETURN
  2076. '
  2077. > PROCEDURE inc_xposition
  2078.   IF MOUSEK=2
  2079.     ALERT 3,"QUIT or CONTINUE ?  ",1,"  QUIT  |CONTINUE",l%
  2080.     IF l%=1
  2081.       SYSTEM
  2082.     ENDIF
  2083.   ENDIF
  2084.   IF tr%=0
  2085.   ELSE
  2086.     INC kxpos%
  2087.     IF kxpos%>max_xposition%
  2088.       IF refline%+kypos%=maxline%
  2089.         kxpos%=0
  2090.         ALERT 1," OVER MAX LINE !  ",1," OK ",l%
  2091.       ELSE
  2092.         inc_yposition
  2093.       ENDIF
  2094.     ENDIF
  2095.   ENDIF
  2096. RETURN
  2097. '
  2098. > PROCEDURE inc_yposition
  2099.   INC kypos%
  2100.   kxpos%=0
  2101.   IF refline%+kypos%>maxline%
  2102.     DEC kypos%
  2103.   ENDIF
  2104.   IF kypos%=15
  2105.     kypos%=0
  2106.     refline%=refline%+15
  2107.     FOR ti%=1 TO 20000
  2108.     NEXT ti%
  2109.     IF refline%+14>maxline%
  2110.       kypos%=refline%-maxline%+14
  2111.       refline%=maxline%-14
  2112.     ENDIF
  2113.     i1%=i%
  2114.     redraw
  2115.     i%=i1%
  2116.   ENDIF
  2117. RETURN
  2118. '
  2119. > PROCEDURE inc_page
  2120.   kxpos%=0
  2121.   kypos%=0
  2122.   redraw
  2123. RETURN
  2124. '
  2125. > PROCEDURE dec_xposition
  2126.   IF MOUSEK=2
  2127.     ALERT 3,"QUIT or CONTINUE ?  ",1,"  QUIT  |CONTINUE",l%
  2128.     IF l%=1
  2129.       SYSTEM
  2130.     ENDIF
  2131.   ENDIF
  2132.   IF tr%=0
  2133.   ELSE
  2134.     DEC kxpos%
  2135.     IF kxpos%=-1
  2136.       dec_yposition
  2137.     ENDIF
  2138.   ENDIF
  2139. RETURN
  2140. '
  2141. > PROCEDURE dec_yposition
  2142.   DEC kypos%
  2143.   kxpos%=max_xposition%
  2144.   IF kypos%=-1
  2145.     IF refline%=0
  2146.       kypos%=0
  2147.       kxpos%=0
  2148.     ELSE
  2149.       kypos%=14
  2150.       refline%=refline%-15
  2151.       IF refline%<0
  2152.         kypos%=refline%+14
  2153.         refline%=0
  2154.       ENDIF
  2155.       redraw
  2156.     ENDIF
  2157.   ENDIF
  2158. RETURN
  2159. '
  2160. > PROCEDURE to_edit
  2161.   '
  2162.   '  EDIT
  2163.   SYSTEM
  2164.   '
  2165. RETURN
  2166. '
  2167. > PROCEDURE word_version
  2168.   '
  2169.   PRINT
  2170.   PRINT " NIHONGO WORD PROCESSOR.   version 1.80   1990.08.14"
  2171.   PRINT
  2172.   PRINT "         PROGRAMING BY   M.UTASHIRO"
  2173.   PRINT
  2174.   PRINT "         PROGRAMING WITH GFA-BASIC 3.0   GFA-SYSTEMTECHNIK 1989."
  2175.   PRINT
  2176.   DELAY 1
  2177.   '
  2178. RETURN
  2179. '
  2180.