home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / ms_dos / label / lbqb.bas < prev    next >
BASIC Source File  |  1990-06-14  |  30KB  |  1,367 lines

  1. DECLARE SUB Write.Data ()
  2. DECLARE SUB Data.Kill ()
  3. DECLARE SUB DEF.Write ()
  4. DECLARE SUB PF12.Key ()
  5. DECLARE SUB BELL (Bell.Time AS INTEGER, FREQ AS INTEGER)
  6. DECLARE SUB Gamen ()
  7. DECLARE SUB Clear.MSG ()
  8. DECLARE SUB Heiten ()
  9. DECLARE SUB Func.ON (PF.Number AS INTEGER)
  10. DECLARE SUB Set.KGM11 ()
  11. DECLARE SUB Set.KGM12 ()
  12. DECLARE SUB Set.KGM21 ()
  13. DECLARE SUB Set.KGM22 ()
  14. DECLARE SUB Data.Clear ()
  15. DECLARE SUB Write.Left ()
  16. DECLARE SUB Write.Center ()
  17. DECLARE SUB Write.Right ()
  18. DECLARE SUB PF11.Key ()
  19. DECLARE SUB Text.Write ()
  20. DECLARE SUB NO.Data ()
  21. DECLARE SUB Boo ()
  22. DECLARE SUB Data.Load ()
  23. DECLARE SUB Data.Save ()
  24. DECLARE SUB Text.Clear ()
  25.  
  26. '    ┌───────┬────────────────────────┐
  27. '    │ プログラム名 │ LBQB.BAS (LB.EXE)                              │
  28. '    │ タ イ ト ル  │ ラベルの印刷(簡易版印刷屋さん)Ver. 1.01      │
  29. '    │ プログラマー │ Yutaka Kondo                                   │
  30. '    ├───────┼────────────────────────┤
  31. '    │ 使 用 機種 │ 富士通     FM TOWNS モデル2H            │
  32. '    │ 使 用 言語 │ Microsoft  QuickBASIC  Version 4.2 (B285C140)  │
  33. '    ├───────┼────────────────────────┤
  34. '    │ 制 作 日 付  │ For 1990.06.10 to 1990.06.10                   │
  35. '    └───────┴────────────────────────┘
  36.  
  37. ' サンプルプログラムのサブルーチンを使用させていただきました。(EDIT.BAS)
  38. '$INCLUDE: 'EDIT.BI'
  39.  
  40. '----------------------- 初期設定
  41.         CLEAR
  42.         CLS : SCREEN 0: WIDTH 80, 25: COLOR 7, 0: LOCATE , , 0
  43.         VIEW PRINT
  44.  
  45.         DIM SHARED In$(12)
  46.         DIM SHARED Saizu(12) AS INTEGER
  47.         DIM SHARED Sonota(5) AS INTEGER
  48.  
  49.         DIM SHARED Ins AS INTEGER
  50.         DIM SHARED N AS INTEGER
  51.         DIM SHARED CY AS INTEGER
  52.         DIM SHARED Drive$
  53.  
  54.         OPEN "\LABEL.DEF" FOR RANDOM AS 2 LEN = 35
  55.         FIELD #2, 20 AS Drive.Name$, 15 AS Sonota.Data$
  56.  
  57.         GET #2, 1
  58.  
  59.         Drive$ = Drive.Name$: SD$ = Sonota.Data$
  60.  
  61.         P = 1
  62.         FOR I = 1 TO 5
  63.             Sonota(I) = VAL(MID$(SD$, P, 3))
  64.             P = P + 3
  65.         NEXT I
  66.  
  67.         CLOSE #2
  68.  
  69.         Drive$ = RTRIM$(Drive$)
  70.  
  71. '       Sonota(1) = 印刷開始紙送り量(行)
  72. '       Sonota(2) = 左マージン(1/180インチ)
  73. '       Sonota(3) = 改行ピッチ(1/180インチ)
  74. '       Sonota(4) = 印刷後改ページ有り?
  75. '       Sonota(5) = ラインカーソル色  ?
  76.  
  77.         CONST YN.MSG$ = "○:実 行  ×:取 消"
  78.         CONST ESC.MSG$ = "        ESCキーで戻ります。   "
  79.  
  80. '==============================================================================
  81.  
  82.                   Gamen       ' 画面描画
  83.             GOSUB Home.Key    ' 初期処理 (DATA)
  84.  
  85.             COLOR 7, 0
  86.             CY = 5: CX = 23
  87. START:
  88.         DO: LOOP WHILE INKEY$ <> ""   ' キーバッフアークリアー
  89.  
  90.         GYO$ = CDBL$(RIGHT$("  " + MID$(STR$(CY - 4), 2), 2))
  91.         LOCATE 3, 23, 0
  92.         COLOR 7
  93.         PRINT USING "&  &"; GYO$;
  94.         COLOR 3: PRINT "行"
  95.         COLOR 7
  96.  
  97.         LOCATE CY, CX
  98.  
  99.         Ins = 1
  100.         N = CY - 4
  101.         In$(N) = EDIT$(In$(N), 36, Arrow%, 0)
  102.  
  103.         Clear.MSG
  104.  
  105.         SELECT CASE Arrow%
  106.  
  107.             CASE 1                      ' リターンキー
  108.                 GOSUB Pos.Down
  109.  
  110.             CASE 9                      ' ESC
  111.                 Heiten
  112.  
  113.             CASE -1                     ' ↑ UP
  114.                 GOSUB Pos.Up
  115.  
  116.             CASE 1                      ' ↓ DOWN
  117.                 GOSUB Pos.Down
  118.  
  119.             CASE 47                     ' HOME
  120.                 GOSUB Home.Key
  121.  
  122.             CASE 11                     ' PF1
  123.                 Func.ON (1)
  124.                 Set.KGM11
  125.  
  126.             CASE 12                     ' PF2
  127.                 Func.ON (2)
  128.                 Set.KGM12
  129.  
  130.             CASE 13                     ' PF3
  131.                 Func.ON (3)
  132.                 Set.KGM21
  133.  
  134.             CASE 14                     ' PF4
  135.                 Func.ON (4)
  136.                 Set.KGM22
  137.  
  138.             CASE 15                     ' PF5
  139.                 Func.ON (5)
  140.                 Data.Clear
  141.  
  142.             CASE 16                     ' PF6
  143.                 Func.ON (6)
  144.                 GOSUB Print.OUT
  145.  
  146.             CASE 17                     ' PF7
  147.                 Func.ON (7)
  148.                 Write.Left
  149.  
  150.             CASE 18                     ' PF8
  151.                 Func.ON (8)
  152.                 Write.Center
  153.  
  154.             CASE 19                     ' PF9
  155.                 Func.ON (9)
  156.                 Write.Right
  157.  
  158.             CASE 20                     ' PF10
  159.                 Func.ON (10)
  160.                 Heiten
  161.  
  162.             CASE 21                     ' PF11
  163.                 PF11.Key
  164.  
  165.             CASE 22                     ' PF12
  166.                 PF12.Key
  167.  
  168.             CASE ELSE
  169.                 CALL BELL(600, 32)
  170.  
  171.         END SELECT
  172.  
  173.         GOTO START
  174.  
  175. END
  176. '==============================================================================
  177.  
  178. Pos.Up:     IF CY = 5 THEN CY = 16: RETURN ELSE CY = CY - 1: RETURN
  179. Pos.Down:   IF CY = 16 THEN CY = 5: RETURN ELSE CY = CY + 1: RETURN
  180.  
  181. '------------------------------------------------------ 初期化
  182. Home.Key:
  183.  
  184.         FOR I = 1 TO 12
  185.                 LOCATE I + 4, 10, 0
  186.                 COLOR 7
  187.                 PRINT "○      "
  188.  
  189.                 LOCATE I + 4, 23
  190.                 PRINT SPACE$(36);
  191.                 In$(I) = SPACE$(36)
  192.                 Saizu(I) = 1
  193.         NEXT I
  194.     RETURN
  195.  
  196. '------------------------------------------------------ 印 刷
  197. Print.OUT:
  198.             FOR N = 1 TO 12
  199.                 IF In$(N) <= SPACE$(36) THEN  ELSE GOTO Print.OK
  200.             NEXT N
  201.  
  202.             NO.Data
  203.             RETURN
  204. Print.OK:
  205.             CALL BELL(650, 32)
  206.             CALL BELL(650, 32)
  207.  
  208.             COLOR 14
  209.                 LOCATE 19, 31: PRINT "   印刷を行います。      "
  210.             COLOR 7
  211.                 LOCATE 21, 31: PRINT YN.MSG$
  212. Dame:
  213.             DO
  214.             A$ = INKEY$
  215.             LOOP WHILE A$ = ""
  216.  
  217.             SELECT CASE A$
  218.                 CASE CHR$(13)
  219.                     Clear.MSG
  220.                     GOTO Lprint.OK
  221.                 CASE CHR$(24)
  222.                     Clear.MSG
  223.                     RETURN
  224.                 CASE ELSE
  225.                      CALL BELL(600, 32)
  226.                      GOTO Dame
  227.                 END SELECT
  228.  
  229. Lprint.OK:
  230.             ON ERROR GOTO Printer.Error
  231.  
  232.             LPRINT CHR$(27); "c";   ' リセット
  233.  
  234.             GOSUB Print.LP          ' カイギョウ ピッチ
  235.             GOSUB Print.LMRG        ' レフト マ-ジン
  236.  
  237.             FOR LP = 1 TO Sonota(1): LPRINT : NEXT LP    ' 紙送り
  238.  
  239.             COLOR 22
  240.                 LOCATE 20, 30: PRINT " ** 印 刷 中 ** "
  241.             COLOR 7
  242.  
  243.             FOR P = 1 TO 12
  244.  
  245.                 SELECT CASE Saizu(P)
  246.                     CASE 1
  247.                         GOSUB Print.KGM11
  248.                     CASE 2
  249.                         GOSUB Print.KGM12
  250.                     CASE 3
  251.                         GOSUB Print.KGM21
  252.                     CASE 4
  253.                         GOSUB Print.KGM22
  254.                 END SELECT
  255.  
  256.                 LPRINT In$(P)
  257.  
  258.             NEXT P
  259.  
  260.             IF Sonota(4) = 1 THEN LPRINT CHR$(12);       ' フォームフィード
  261.  
  262.             LOCATE 20, 30: PRINT SPACE$(30);
  263.  
  264. Print.END: ' 印刷終了
  265.  
  266.     RETURN
  267.  
  268. '------------------------------------------------------ ぷりんたーえらー
  269. Printer.Error:
  270.                 CALL BELL(800, 32)
  271.                 CALL BELL(620, 40)
  272.  
  273.                 COLOR 13
  274.                     LOCATE 20, 28: PRINT " プリンターを確認して下さい。"
  275.                 COLOR 7
  276.     RESUME Print.END
  277.  
  278. '------------------------------------------------------ 改行ピッチ
  279. Print.LP:
  280.             J = Sonota(3)
  281.             P1 = INT(J / 10)
  282.             P2 = INT(J - (P1 * 10))
  283.             LPRINT CHR$(28); "%";
  284.             LPRINT CHR$(&H20 + P1); CHR$(&H70 + P2);
  285.     RETURN
  286. '------------------------------------------------------ 左マージン
  287. Print.LMRG:
  288.             J = Sonota(2)
  289.             P1 = INT(J / 1000)
  290.             P2 = INT((J - P1 * 1000) / 100)
  291.             P3 = INT((J - (P1 * 1000 + P2 * 100)) / 10)
  292.             P4 = INT(J - (P1 * 1000 + P2 * 100 + P3 * 10))
  293.  
  294.             LPRINT CHR$(27); "Q";
  295.             LPRINT CHR$(&H31); CHR$(&H38);
  296.             LPRINT ";";
  297.             LPRINT CHR$(&H30 + P1); CHR$(&H30 + P2);
  298.             LPRINT CHR$(&H30 + P3); CHR$(&H30 + P4);
  299.             LPRINT " Q";
  300.     RETURN
  301. '------------------------------------------------------ 標 準
  302. Print.KGM11:
  303.  
  304.             LPRINT CHR$(28); "$";           ' 漢字文字ピッチ27/180
  305.             LPRINT CHR$(&H22); CHR$(&H77);
  306.  
  307.             LPRINT CHR$(28); "'";
  308.             LPRINT CHR$(&H21); CHR$(&H20); CHR$(&H60);
  309.             LPRINT CHR$(&H21); CHR$(&H20); CHR$(&H70);
  310.     RETURN
  311. '------------------------------------------------------ 横 倍
  312. Print.KGM12:
  313.  
  314.             LPRINT CHR$(28); "$";           ' 漢字文字ピッチ24/180
  315.             LPRINT CHR$(&H22); CHR$(&H74);
  316.  
  317.             LPRINT CHR$(28); "'";
  318.             LPRINT CHR$(&H21); CHR$(&H20); CHR$(&H60);
  319.             LPRINT CHR$(&H22); CHR$(&H20); CHR$(&H70);
  320.     RETURN
  321. '------------------------------------------------------ 縦 倍
  322. Print.KGM21:
  323.  
  324. '           LPRINT CHR$(28); "."; "t";
  325.             LPRINT CHR$(28); "'";
  326.             LPRINT CHR$(&H22); CHR$(&H20); CHR$(&H60);
  327.             LPRINT CHR$(&H21); CHR$(&H20); CHR$(&H70);
  328.     RETURN
  329. '------------------------------------------------------ 4 倍
  330. Print.KGM22:
  331.  
  332.             LPRINT CHR$(28); "$";           ' 漢字文字ピッチ24/180
  333.             LPRINT CHR$(&H22); CHR$(&H74);
  334.  
  335. '           LPRINT CHR$(28); "."; "t";
  336.             LPRINT CHR$(28); "'";
  337.             LPRINT CHR$(&H22); CHR$(&H20); CHR$(&H60);
  338.             LPRINT CHR$(&H22); CHR$(&H20); CHR$(&H70);
  339.     RETURN
  340. '==============================================================================
  341.  
  342. DEFINT A-Z
  343. SUB BELL (Bell.Time AS INTEGER, FREQ AS INTEGER)
  344.     DIM inreg AS RegType, outreg AS RegType
  345.  
  346.     inreg.ax = &H500                ' MOV AH,05H
  347.     inreg.bx = FREQ                 ' MOV BX,FREQ 周波数
  348.     inreg.dx = Bell.Time            ' MOV DX,TIME 時間
  349.     INTERRUPT &H9E, inreg, outreg   ' INT 9EH
  350.  
  351.                                     ' MOV CX,TIMECNT
  352.     FOR I = 1 TO 10000: NEXT        ' INT 0FDH ソフトタイマ
  353.     FOR I = 1 TO 20000: NEXT        ' コンパイル スルト ハヤク ナルタメ ツイカ
  354.     FOR I = 1 TO 10000: NEXT
  355.     FOR I = 1 TO 20000: NEXT
  356.  
  357. END SUB
  358.  
  359. DEFSNG A-Z
  360. '----------------------------
  361. '           ぶー
  362. '----------------------------
  363. SUB Boo
  364.         CALL BELL(500, 32)
  365.         CALL BELL(500, 32)
  366.  
  367.         COLOR 12
  368.             LOCATE 20, 31, 0
  369.             PRINT "この行は、出来ません。"
  370.         COLOR 7
  371. END SUB
  372.  
  373. '----------------------------
  374. '     めっせーじくりあー
  375. '----------------------------
  376. SUB Clear.MSG
  377.  
  378.             LOCATE , , 0
  379.             LOCATE 19, 26: PRINT SPACE$(40);
  380.             LOCATE 20, 26: PRINT SPACE$(40);
  381.             LOCATE 21, 26: PRINT SPACE$(40);
  382.             LOCATE 23, 1:  PRINT SPACE$(79);
  383. END SUB
  384.  
  385. DEFINT A-Z
  386. '----------------------------
  387. '        データ削除
  388. '----------------------------
  389. SUB Data.Clear
  390.  
  391.         IF In$(N) <= SPACE$(36) THEN NO.Data: EXIT SUB
  392.  
  393.         CALL BELL(650, 36)
  394.         CALL BELL(650, 36)
  395.  
  396.         COLOR 13
  397.             LOCATE 19, 31: PRINT "削除していいですか?   "
  398.         COLOR 7
  399.             LOCATE 21, 31: PRINT YN.MSG$
  400. Input.Check:
  401.             DO
  402.             A$ = INKEY$
  403.             LOOP WHILE A$ = ""
  404.  
  405.             SELECT CASE A$
  406.                 CASE CHR$(13)
  407.                     Clear.MSG
  408.                     In$(N) = SPACE$(36)
  409.                     Saizu(N) = 1
  410.                     LOCATE CY, 23
  411.                         PRINT SPACE$(36);
  412.                     LOCATE CY, 10
  413.                         PRINT "○         "
  414.                 CASE CHR$(24)
  415.                     Clear.MSG
  416.                 CASE ELSE
  417.                     CALL BELL(600, 32)
  418.                     GOTO Input.Check
  419.             END SELECT
  420.  
  421. END SUB
  422.  
  423. '----------------------------
  424. '        データさくじょ
  425. '----------------------------
  426. SUB Data.Kill
  427.            
  428.             SHARED Data.Name$
  429.             SHARED Load.Data$
  430.             SHARED Load.Saizu$
  431.  
  432.             COLOR 6
  433.                 LOCATE 19, 18
  434.                 PRINT "前ペ-ジ:前行 次ペ-ジ:次行  入力:その他のキー"
  435.                 LOCATE 21, 22
  436.                 PRINT "入力で、リターンキーのみは、終了します。"
  437.             COLOR 7
  438.            
  439.             Write.Data
  440.  
  441. KillNo.INPUT:
  442.             LOCATE 16, 23, 1
  443.             INPUT " 削除 番号を入れて下さい。 ", Kill.No$
  444.             LOCATE , , 0
  445.           
  446.             Kill.No.Check$ = LEFT$(Kill.No$, 1)
  447.             SELECT CASE Kill.No.Check$
  448.                 CASE IS <= ""
  449.                     CLOSE #1: EXIT SUB
  450.                 CASE IS <= CHR$(&H2F), IS >= CHR$(&H3A)
  451.                     CALL BELL(600, 32)
  452.                     LOCATE 16, 50: PRINT SPACE$(10);
  453.                     GOTO KillNo.INPUT
  454.             END SELECT
  455.  
  456.            
  457.         OPEN Drive$ + "LABEL.BAK" FOR RANDOM AS 3 LEN = 454
  458.         FIELD #3, 454 AS BAK.Data$
  459.  
  460.             BAK.Count = 0
  461.            
  462.             FOR BAK = 1 TO LOF(1) \ 454
  463.                 IF BAK = VAL(Kill.No$) THEN GOTO Save.NEXT
  464.                
  465.                 BAK.Dmy$ = ""
  466.                
  467.                 GET #1, BAK
  468.                
  469.                 BAK.Dmy$ = Data.Name$ + Load.Data$ + Load.Saizu$
  470.                
  471.                 BAK.Count = BAK.Count + 1
  472.  
  473.                 LSET BAK.Data$ = BAK.Dmy$
  474.               
  475.                 PUT #3, BAK.Count
  476. Save.NEXT:
  477.             NEXT BAK
  478.  
  479.         CLOSE
  480.  
  481.             KILL Drive$ + "LABEL.DAT"
  482.             NAME Drive$ + "LABEL.BAK" AS Drive$ + "LABEL.DAT"
  483.  
  484. END SUB
  485.  
  486. '----------------------------
  487. '        データろーど
  488. '----------------------------
  489. SUB Data.Load
  490.  
  491.             SHARED Data.Name$
  492.             SHARED Load.Data$
  493.             SHARED Load.Saizu$
  494.  
  495.             COLOR 3
  496.                 LOCATE 19, 18
  497.                 PRINT "前ペ-ジ:前行 次ペ-ジ:次行  入力:その他のキー"
  498.                 LOCATE 21, 22
  499.                 PRINT "入力で、リターンキーのみは、終了します。"
  500.             COLOR 7
  501.  
  502.             Write.Data
  503.  
  504. No.INPUT:
  505.             LOCATE 16, 23, 1
  506.             INPUT " 読込 番号を入れて下さい。 ", Load.No$
  507.             LOCATE , , 0
  508.  
  509.             Load.No.Check$ = LEFT$(Load.No$, 1)
  510.             SELECT CASE Load.No.Check$
  511.                 CASE IS <= ""
  512.                     CLOSE #1: EXIT SUB
  513.                 CASE IS <= CHR$(&H2F), IS >= CHR$(&H3A)
  514.                     CALL BELL(600, 32)
  515.                     LOCATE 16, 50: PRINT SPACE$(10);
  516.                     GOTO No.INPUT
  517.             END SELECT
  518.  
  519.             GET #1, VAL(Load.No$)
  520.  
  521.                 P = 1
  522.                 FOR N = 1 TO 12
  523.                     In$(N) = MID$(Load.Data$, P, 36)
  524.                     Saizu(N) = VAL(MID$(Load.Saizu$, N, 1))
  525.                     P = P + 36
  526.                 NEXT N
  527.  
  528.         CLOSE #1
  529.  
  530. END SUB
  531.  
  532. '----------------------------
  533. '        データせーぶ
  534. '----------------------------
  535. SUB Data.Save
  536.            
  537.             FOR N = 1 TO 12
  538.                 IF In$(N) <= SPACE$(36) THEN  ELSE GOTO Save.OK
  539.             NEXT N
  540.  
  541.             NO.Data
  542.             EXIT SUB
  543. Save.OK:
  544.  
  545.             LINE (276, 189)-(363, 210), 0, BF
  546.  
  547.             OPEN Drive$ + "LABEL.DAT" FOR RANDOM AS 1 LEN = 454
  548.             FIELD #1, 10 AS Data.Name$, 432 AS Data.Fld$, 12 AS Saizu.Fld$
  549.  
  550.             Recnum = LOF(1) \ 454
  551.  
  552.         COLOR 19
  553.         LOCATE 5, 23:  PRINT "        ちょっとだけふぁいる  Save  "
  554.         COLOR 7
  555.         LOCATE 7, 23:  PRINT "    名前は、半角文字で10文字"
  556.         LOCATE 8, 23:  PRINT "        全角文字で 5文字"
  557.         LOCATE 11, 23: PRINT "            セーブ名前は?"
  558. Name.IN:
  559.         LOCATE 16, 23: PRINT ESC.MSG$
  560.         Ins = 1
  561.         LOCATE 13, 36
  562.         Save.Name$ = EDIT$(Save.Name$, 10, Arrow%, 0)
  563.       
  564.     SELECT CASE Arrow%
  565.  
  566.         CASE 1                  ' リターンキー
  567.         CASE 9                  ' ESC
  568.             CLOSE #1: EXIT SUB
  569.         CASE -1                 ' ↑ UP
  570.             CALL BELL(600, 32)
  571.             GOTO Name.IN
  572.         CASE 1                  ' ↓ DOWN
  573.  
  574.         END SELECT
  575.         IF Save.Name$ <= "" OR Save.Name$ <= SPACE$(10) THEN CLOSE #1: EXIT SUB
  576.  
  577.             LOCATE 16, 23: PRINT "                                 "
  578.         COLOR 14
  579.             LOCATE 19, 31: PRINT "  よろしいですか?"
  580.         COLOR 7
  581.             LOCATE 21, 31: PRINT YN.MSG$
  582. INPUT.S:
  583.             DO
  584.             A$ = INKEY$
  585.             LOOP WHILE A$ = ""
  586.  
  587.         IF A$ = CHR$(13) THEN
  588.             GOTO Data.Save.OK
  589.  
  590.         ELSEIF A$ = CHR$(24) THEN
  591.             Clear.MSG
  592.             GOTO Name.IN
  593.         ELSE CALL BELL(600, 32)
  594.                 GOTO INPUT.S
  595.         END IF
  596.       
  597. Data.Save.OK:
  598.  
  599.     Save.Data$ = ""
  600.     Save.Saizu$ = ""
  601.     FOR I = 1 TO 12
  602.         Save.Data$ = Save.Data$ + LEFT$(In$(I) + SPACE$(36), 36)
  603.         Save.Saizu$ = Save.Saizu$ + RIGHT$("  " + MID$(STR$(Saizu(I)), 2), 1)
  604.     NEXT I
  605.  
  606.             LSET Data.Name$ = Save.Name$
  607.             LSET Data.Fld$ = Save.Data$
  608.             LSET Saizu.Fld$ = Save.Saizu$
  609.  
  610.             Recnum = Recnum + 1
  611.             PUT #1, Recnum
  612.  
  613.         CLOSE #1
  614.  
  615. END SUB
  616.  
  617. SUB DEF.Write
  618.  
  619.         LOCATE 7, 23:  PRINT "       データドライブ  設定      "
  620.         LOCATE 9, 23:  PRINT "                                  "
  621.         LOCATE 10, 23: PRINT "                                  "
  622.         LOCATE 11, 23: PRINT "                                  "
  623.  
  624.         LINE (236, 189)-(403, 210), 0, BF
  625.  
  626.         OPEN Drive$ + "LABEL.DEF" FOR RANDOM AS 2 LEN = 35
  627.         FIELD #2, 20 AS Drive.Name$, 15 AS Sonota.Data$
  628.  
  629.         GET #2, 1
  630.  
  631.         DN$ = Drive.Name$: SD$ = Sonota.Data$
  632.  
  633.         LOCATE 11, 23: PRINT "     ドライブ名を入力して下さい。"
  634. DName.IN:
  635.         LOCATE 16, 23: PRINT ESC.MSG$
  636.         Ins = 0
  637.         LOCATE 13, 31
  638.         DN$ = EDIT$(DN$, 20, Arrow%, 0)
  639.      
  640.     SELECT CASE Arrow%
  641.  
  642.         CASE 1                  ' リターンキー
  643.         CASE 9                  ' ESC
  644.             CLOSE #2: EXIT SUB
  645.         CASE -1                 ' ↑ UP
  646.             CALL BELL(600, 32)
  647.             GOTO DName.IN
  648.         CASE 1                  ' ↓ DOWN
  649.  
  650.         END SELECT
  651.         IF DN$ <= "" OR DN$ <= SPACE$(20) THEN CLOSE #2: EXIT SUB
  652.  
  653.             LOCATE 16, 23: PRINT "                                 "
  654.         COLOR 14
  655.             LOCATE 19, 31: PRINT "  よろしいですか?"
  656.         COLOR 7
  657.             LOCATE 21, 31: PRINT YN.MSG$
  658. INPUT.D:
  659.             DO
  660.             A$ = INKEY$
  661.             LOOP WHILE A$ = ""
  662.  
  663.         IF A$ = CHR$(13) THEN
  664.             GOTO Data2.Save.OK
  665.  
  666.         ELSEIF A$ = CHR$(24) THEN
  667.             Clear.MSG
  668.             GOTO DName.IN
  669.         ELSE CALL BELL(600, 32)
  670.                 GOTO INPUT.D
  671.         END IF
  672.      
  673. Data2.Save.OK:
  674.            
  675.             LSET Drive.Name$ = LEFT$(DN$, 20)
  676.             LSET Sonota.Data$ = SD$
  677.  
  678.             PUT #2, 1
  679.  
  680.             CLOSE #2
  681.  
  682.             Drive$ = RTRIM$(DN$)
  683.  
  684. END SUB
  685.  
  686. '----------------------------
  687. ' サンプルからちょっとかりました
  688. '----------------------------
  689. FUNCTION EDIT$ (Arg$, Length, Arrow, strflag)
  690.     X0 = POS(0)
  691.     Y0 = CSRLIN: IF X0 + Length > 80 THEN ERROR 5
  692.     ChangeFlag = 1
  693.  
  694.     IF Sonota(5) = 0 THEN COLOR 23 ELSE COLOR Sonota(5)
  695.     dx = 0
  696. '    Ins = 1
  697.     tmp$ = LEFT$(Arg$ + SPACE$(Length), Length)
  698.  
  699.     DO
  700.  
  701.     IF dx >= Length THEN dx = Length - 1 ELSE dx = dx
  702.     Keta$ = CDBL$(RIGHT$("  " + MID$(STR$(dx + 1), 2), 2))
  703.     LOCATE 3, 29, 0
  704.     COLOR 7
  705.         PRINT USING "&  &"; Keta$;
  706.     COLOR 3
  707.         PRINT "桁"
  708.     IF Sonota(5) = 0 THEN COLOR 22 ELSE COLOR Sonota(5)
  709.  
  710.         MaxCharNum = KLEN(tmp$)
  711.         FOR I = 1 TO MaxCharNum
  712.             IF KPOS(tmp$, I) <= Length THEN MaxByte = KPOS(tmp$, I)
  713.         NEXT
  714.         IF dx + 1 >= Length THEN dx = MaxByte - 1
  715.         LastByte = ASC(MID$(tmp$, MaxByte, 1))
  716.         IF LastByte >= &H80 AND (LastByte < &HA0 OR LastByte > &HDF) THEN
  717.               IF MaxByte = Length THEN
  718.                 tmp$ = LEFT$(tmp$, MaxByte - 1) + " "
  719.             END IF
  720.         END IF
  721.  
  722. '       CharNum = MaxCharNum + 1   ' 一番右で削除キーを押すとエラーになる?
  723.         CharNum = MaxCharNum
  724.  
  725.         FOR I = 1 TO MaxCharNum - 1
  726.             IF KPOS(tmp$, I) = dx + 1 THEN CharNum = I
  727.         NEXT
  728.  
  729.         tmp$ = LEFT$(tmp$ + SPACE$(Length), Length)
  730.         IF ChangeFlag = 1 THEN
  731.             LOCATE Y0, X0, 0
  732.             PRINT tmp$;
  733.             ChangeFlag = 0
  734.         END IF
  735.  
  736.         COLOR 6
  737.         IF Ins = 0 THEN
  738.              LOCATE 3, 52: PRINT " 上 書 "
  739.         ELSE LOCATE 3, 52: PRINT " 挿 入 "
  740.         END IF
  741.         IF Sonota(5) = 0 THEN COLOR 22 ELSE COLOR Sonota(5)
  742.  
  743.         LOCATE Y0, X0 + dx, 1, Ins * 13, 15
  744.  
  745.         DO
  746.             A$ = INKEY$
  747.         LOOP WHILE A$ = ""
  748.  
  749.         SELECT CASE A$
  750.             '上矢印
  751.             CASE CHR$(0, &H48)
  752.                 Arrow = -1
  753.                 EXIT DO
  754.  
  755.             '下矢印
  756.             CASE CHR$(0, &H50)
  757.                 Arrow = 1
  758.                 EXIT DO
  759.  
  760.             'リターン
  761.             CASE CHR$(13)
  762.                 Arrow = 1
  763.                 EXIT DO
  764.  
  765.             '左矢印
  766.             CASE CHR$(0) + CHR$(&H4B)
  767.                 dx = dx - 1
  768.                 IF dx < 0 THEN
  769.                     dx = 0
  770.                     ELSE
  771.                     IF SCREEN(Y0, X0 + dx) >= 256 THEN dx = dx - 1
  772.                 END IF
  773.  
  774.             '右矢印
  775.             CASE CHR$(0) + CHR$(&H4D)
  776.                 IF SCREEN(Y0, X0 + dx) >= 256 THEN dx = dx + 1
  777.                     dx = dx + 1
  778.  
  779.             'インサートキー
  780.             CASE CHR$(0) + CHR$(&H52)
  781.                 Ins% = -(Ins% - 1)
  782.  
  783.             'デリートキー
  784.             CASE CHR$(0) + CHR$(&H53)
  785.                 ChangeFlag = 1
  786.  
  787.                 tmp$ = KMID$(tmp$, 1, CharNum - 1) + KMID$(tmp$, CharNum + 1, LEN(tmp$) - CharNum) + "  "
  788.  
  789.             'バックスペース
  790.             CASE CHR$(8)
  791.                 ChangeFlag = 1
  792.                 dx = dx - 1
  793.                 IF dx < 0 THEN
  794.                 CALL BELL(600, 32)
  795.  
  796.                     dx = 0
  797.                     GOTO NOBS
  798.                     ELSE
  799.                     IF SCREEN(Y0, X0 + dx) >= 256 THEN dx = dx - 1
  800.                 END IF
  801.  
  802.                 IF CharNum >= 2 THEN tmp$ = KMID$(tmp$, 1, CharNum - 2) + KMID$(tmp$, CharNum, LEN(tmp$) - CharNum + 1) + "  "
  803.                 IF CharNum = 1 THEN tmp$ = KMID$(tmp$, 1, CharNum - 1) + KMID$(tmp$, CharNum + 1, LEN(tmp$) - CharNum) + "  "
  804. NOBS:
  805.             'ESCキー
  806.             CASE CHR$(&H1B)
  807.                 Arrow = 9
  808.                 EXIT DO
  809.  
  810.             'ホーム
  811.             CASE CHR$(0, &H47)
  812.                 Arrow = 47
  813.                 EXIT DO
  814.  
  815.             'ヘルプ
  816.             CASE CHR$(0, &H4F)
  817.                 dx = LEN(RTRIM$(tmp$))
  818.  
  819.             '文字入力
  820.             CASE IS >= " "
  821.                 ChangeFlag = 1
  822.                 IF strflag = 0 OR (strflag < 0 AND ASC(A$) < 256) OR (strflag > 0 AND ASC(A$) >= 256) THEN
  823.                     IF Ins = 0 THEN
  824.                         tmp$ = tmp$ + " "
  825.                         KMID$(tmp$, CharNum, 1) = A$
  826.                         ELSE
  827.                         tmp$ = KMID$(tmp$, 1, CharNum - 1) + A$ + KMID$(tmp$, CharNum, LEN(tmp$) - CharNum + 1)
  828.                     END IF
  829.                     IF ASC(A$) >= 256 THEN dx = dx + 1
  830.                     dx = dx + 1
  831.                 END IF
  832.  
  833.             CASE CHR$(0, &H3B)             ' PF1
  834.                 Arrow = 11
  835.                 EXIT DO
  836.  
  837.             CASE CHR$(0, &H3C)             ' PF2
  838.                 Arrow = 12
  839.                 EXIT DO
  840.  
  841.             CASE CHR$(0, &H3D)             ' PF3
  842.                 Arrow = 13
  843.                 EXIT DO
  844.  
  845.             CASE CHR$(0, &H3E)             ' PF4
  846.                 Arrow = 14
  847.                 EXIT DO
  848.  
  849.             CASE CHR$(0, &H3F)             ' PF5
  850.                 Arrow = 15
  851.                 EXIT DO
  852.  
  853.             CASE CHR$(0, &H40)             ' PF6
  854.                 Arrow = 16
  855.                 EXIT DO
  856.  
  857.             CASE CHR$(0, &H41)             ' PF7
  858.                 Arrow = 17
  859.                 EXIT DO
  860.  
  861.             CASE CHR$(0, &H42)             ' PF8
  862.                 Arrow = 18
  863.                 EXIT DO
  864.  
  865.             CASE CHR$(0, &H43)             ' PF9
  866.                 Arrow = 19
  867.                 EXIT DO
  868.  
  869.             CASE CHR$(0, &H44)             ' PF10
  870.                 Arrow = 20
  871.                 EXIT DO
  872.  
  873.             CASE CHR$(0, &H85)             ' PF11
  874.                 Arrow = 21
  875.                 EXIT DO
  876.  
  877.             CASE CHR$(0, &H86)             ' PF12
  878.                 Arrow = 22
  879.                 EXIT DO
  880.  
  881.         END SELECT
  882.  
  883.     LOOP WHILE 1
  884.  
  885.     COLOR 7
  886.     LOCATE Y0, X0, 0
  887.     PRINT tmp$;
  888.     EDIT$ = RTRIM$(tmp$)
  889.  
  890. END FUNCTION
  891.  
  892. DEFSNG A-Z
  893. '----------------------------
  894. ' ふぁんくしょんきー インジケータ
  895. '----------------------------
  896. SUB Func.ON (PF.Number AS INTEGER)
  897.  
  898.             SELECT CASE PF.Number
  899.                 CASE IS <= 5
  900.                     PFpos = (PF.Number * 6)
  901.                 CASE IS > 5
  902.                     PFpos = (PF.Number * 6) + 1
  903.             END SELECT
  904.  
  905.             LOCATE 23, PFpos, 0
  906.             COLOR 14
  907.                 PRINT "ON";
  908.             COLOR 7
  909. END SUB
  910.  
  911. DEFINT A-Z
  912. '----------------------------
  913. '         画面描画
  914. '----------------------------
  915. SUB Gamen
  916.  
  917.         LINE (0, 0)-(116, 16), 7, BF
  918.         LINE (116, 0)-(639, 16), 3, BF
  919.  
  920.         COLOR 8
  921.             LOCATE 1, 2: PRINT "FM TOWNS"
  922.             LOCATE 1, 27: PRINT "** 簡易版印刷屋さん **"
  923.             LOCATE 1, 68
  924.                 TUKI$ = RIGHT$("  " + STR$(VAL(MID$(DATE$, 6, 2))), 2)
  925.                 HI$ = RIGHT$("  " + STR$(VAL(MID$(DATE$, 9))), 2)
  926.                 PRINT USING "&  &月&  &日"; CDBL$(TUKI$); CDBL$(HI$)
  927.  
  928.         FOR L = 4 TO 16
  929.             LINE (72, L * 16)-(160, L * 16), 8
  930.         NEXT L
  931.  
  932.             LINE (402, 29)-(468, 51), 7, B
  933.             LINE (172, 60)-(468, 260), 7, B ' 全角
  934.             LINE (336, 61)-(336, 259), 8    ' 倍角
  935.  
  936.         COLOR 2
  937.             LOCATE 3, 10: PRINT "標 横 縦 4"
  938.         COLOR 7
  939.  
  940.         x1 = 36: y1 = 367: x2 = 75: y2 = 384
  941.         bytes = 4 + 4 * INT(((x2 - x1 + 1) * 7) / 8) * (y2 - y1 + 1)
  942.         DIM PFKey(bytes / 2 / 2) AS INTEGER
  943.         LINE (x1, y1)-(x2, y2), 3, BF
  944.         GET (x1, y1)-(x2, y2), PFKey
  945.         LINE (x1, y1)-(x2, y2), 0, BF
  946.  
  947.         P = 5
  948.         FOR I = 1 TO 12
  949.             PUT (x1, y1), PFKey, PSET
  950.             x1 = (8 * (P + 6) - 4)
  951.             P = P + 6
  952.             IF P = 35 THEN P = 36: x1 = 284 ' PF6 - PF10
  953.             IF P = 66 THEN P = 67: x1 = 532 ' PF11,PF12
  954.         NEXT I
  955.  
  956.         COLOR 8
  957.             LOCATE 24, 5
  958.             PRINT " 標準  横倍  縦倍  4倍  削除  ";
  959.             PRINT " 印刷  左寄  中央  右寄  終了   設定  ファイル ";
  960.  
  961. END SUB
  962.  
  963. '----------------------------
  964. '        みせじまい?
  965. '----------------------------
  966. SUB Heiten
  967.  
  968.         CALL BELL(800, 32)
  969.         CALL BELL(620, 40)
  970.  
  971.         COLOR 14
  972.             LOCATE 19, 31: PRINT "閉店してもよいですか?"
  973.         COLOR 7
  974.             LOCATE 21, 31: PRINT YN.MSG$
  975. SAIDO:
  976.             DO
  977.             A$ = INKEY$
  978.             LOOP WHILE A$ = ""
  979.  
  980.         IF A$ = CHR$(13) THEN
  981.                 LOCATE , , 0
  982.                 COLOR 7, 0
  983.                 CLS
  984.                 END
  985.  
  986.         ELSEIF A$ = CHR$(24) THEN
  987.             Clear.MSG
  988.             EXIT SUB
  989.         ELSE CALL BELL(600, 32)
  990.                 GOTO SAIDO
  991.         END IF
  992.  
  993. END SUB
  994.  
  995. SUB NO.Data
  996.         CALL BELL(800, 32)
  997.         CALL BELL(620, 40)
  998.  
  999.         COLOR 11
  1000.             LOCATE 20, 31, 0
  1001.             PRINT "データが、ありません。"
  1002.         COLOR 7
  1003. END SUB
  1004.  
  1005. '----------------------------
  1006. ' ぷりんたーちょっとだけ設定
  1007. '----------------------------
  1008. SUB PF11.Key
  1009.  
  1010.     DIM SONO$(5)
  1011.  
  1012.         CCY = 7: CCX = 45
  1013.  
  1014.         Text.Clear
  1015.         PAINT (330, 61), 1, 7
  1016.  
  1017.         COLOR 22
  1018.         LOCATE 5, 23:  PRINT "          ちょっとだけ設定          "
  1019.         COLOR 3
  1020.         LOCATE 7, 23:  PRINT "印刷開始紙送り量(行)      行"
  1021.         LOCATE 8, 23:  PRINT "左マージン(1/180インチ)"
  1022.         LOCATE 9, 23:  PRINT "改行ピッチ(1/180インチ)      1 から 60"
  1023.         LOCATE 10, 23: PRINT "印刷後改ページ有り?      0:無 1:有"
  1024.         LOCATE 11, 23: PRINT "ラインカーソル色  ?      1 から 31"
  1025.         COLOR 7
  1026.         LOCATE 13, 23: PRINT "ラインカーソル色 0 は、22 です。"
  1027.         LOCATE 16, 23: PRINT ESC.MSG$
  1028.  
  1029.         FOR I = 1 TO 5
  1030.             SONO$(I) = MID$(STR$(Sonota(I)), 2)
  1031.             LOCATE I + 6, 45: PRINT USING "& &"; SONO$(I)
  1032.         NEXT I
  1033.  
  1034. '       Sonota(1) = 印刷開始紙送り量(行)
  1035. '       Sonota(2) = 左マージン(1/180インチ)
  1036. '       Sonota(3) = 改行ピッチ(1/180インチ)
  1037. '       Sonota(4) = 印刷後改ページ有り?
  1038. '       Sonota(5) = ラインカーソル色  ?
  1039.  
  1040. F11START:
  1041.  
  1042.         LOCATE CCY, CCX
  1043.  
  1044.         Ins = 0
  1045.         I = CCY - 6
  1046.         SONO$(I) = EDIT$(SONO$(I), 3, Arrow%, 0)
  1047.         Sonota(I) = VAL(SONO$(I))
  1048.         LOCATE CCY, 45: PRINT USING "& &"; SONO$(I)
  1049.  
  1050.         IF Sonota(3) = 0 OR Sonota(3) > 60 THEN CALL BELL(600, 32): Sonota(3) = 30: GOTO F11START
  1051.         IF Sonota(4) > 1 THEN CALL BELL(600, 32): Sonota(4) = 0: GOTO F11START
  1052.         IF Sonota(5) > 31 THEN CALL BELL(600, 32): Sonota(5) = 0: GOTO F11START
  1053.  
  1054.     SELECT CASE Arrow%
  1055.  
  1056.         CASE 1                  ' リターンキー
  1057.             GOSUB Down.Pos
  1058.  
  1059.         CASE 9                  ' ESC
  1060.             Text.Clear
  1061.             PAINT (330, 61), 0, 7
  1062.             LINE (336, 61)-(336, 259), 8    ' 倍角
  1063.             Text.Write
  1064.            
  1065.             OPEN Drive$ + "LABEL.DEF" FOR RANDOM AS 2 LEN = 35
  1066.             FIELD #2, 20 AS Drive.Name$, 15 AS Sonota.Data$
  1067.  
  1068.             GET #2, 1
  1069.             DN$ = Drive.Name$: SD$ = ""
  1070.  
  1071.             FOR WD = 1 TO 5
  1072.                 SD$ = SD$ + RIGHT$("   " + SONO$(WD), 3)
  1073.             NEXT WD
  1074.  
  1075.             LSET Drive.Name$ = DN$
  1076.             LSET Sonota.Data$ = SD$
  1077.             PUT #2, 1
  1078.             CLOSE #2
  1079.  
  1080.             EXIT SUB
  1081.  
  1082.         CASE -1                 ' ↑ UP
  1083.             GOSUB Up.Pos
  1084.  
  1085.         CASE 1                  ' ↓ DOWN
  1086.             GOSUB Down.Pos
  1087.  
  1088.         END SELECT
  1089.  
  1090.             GOTO F11START
  1091.  
  1092.  
  1093. Up.Pos:   IF CCY = 7 THEN CCY = 11: RETURN ELSE CCY = CCY - 1: RETURN
  1094. Down.Pos: IF CCY = 11 THEN CCY = 7: RETURN ELSE CCY = CCY + 1: RETURN
  1095.  
  1096. END SUB
  1097.  
  1098. '----------------------------
  1099. '    ちょっとだけ ふぁいる
  1100. '----------------------------
  1101. SUB PF12.Key
  1102.  
  1103.         CCY = 7: CCX = 45
  1104.  
  1105.         Text.Clear
  1106.         PAINT (330, 61), 1, 7
  1107.  
  1108.         COLOR 19
  1109.         LOCATE 5, 23:  PRINT "        ちょっとだけふぁいる        "
  1110.         COLOR 7
  1111.         LOCATE 7, 23:  PRINT "  PF  1:データドライブ 設定 "
  1112.         LOCATE 9, 23:  PRINT "  PF11:データ読込  Data Load"
  1113.         LOCATE 10, 23: PRINT "  PF12:データ登録  Data Save"
  1114.         LOCATE 11, 23: PRINT "   削  除 :データ削除  Data Kill"
  1115.         LOCATE 16, 23: PRINT ESG.MSG$
  1116.  
  1117. F12START:
  1118.  
  1119.         DO
  1120.         A$ = INKEY$
  1121.         LOOP WHILE A$ = ""
  1122.  
  1123.         SELECT CASE A$
  1124.  
  1125.             CASE CHR$(&H1B)                ' ESC
  1126.  
  1127.             CASE CHR$(0, &H3B)             ' PF1
  1128.                 DEF.Write
  1129.  
  1130.             CASE CHR$(0, &H85)             ' PF11
  1131.                 Text.Clear
  1132.                 Data.Load
  1133.  
  1134.             CASE CHR$(0, &H86)             ' PF12
  1135.                 Text.Clear
  1136.                 Data.Save
  1137.  
  1138.             CASE CHR$(0, &H53)             ' 削 除
  1139.                 Text.Clear
  1140.                 Data.Kill
  1141.  
  1142.             CASE ELSE
  1143.                 CALL BELL(600, 32)
  1144.                 GOTO F12START
  1145.  
  1146.         END SELECT
  1147.  
  1148.             Text.Clear
  1149.             PAINT (330, 61), 0, 7
  1150.             LINE (336, 61)-(336, 259), 8    ' 倍角
  1151.             LOCATE 19, 18: PRINT SPACE$(60);
  1152.             LOCATE 21, 22: PRINT SPACE$(40);
  1153.             Text.Write
  1154.  
  1155. END SUB
  1156.  
  1157. '----------------------------
  1158. '        ひょうじゅん
  1159. '----------------------------
  1160. SUB Set.KGM11
  1161.         Saizu(N) = 1
  1162.         LOCATE N + 4, 10: PRINT "○         "
  1163. END SUB
  1164.  
  1165. '----------------------------
  1166. '       よこばいかく
  1167. '----------------------------
  1168. SUB Set.KGM12
  1169.         IF In$(N) <= SPACE$(36) THEN NO.Data: EXIT SUB
  1170.         Saizu(N) = 2
  1171.         LOCATE N + 4, 10: PRINT "   ○      "
  1172. END SUB
  1173.  
  1174. '----------------------------
  1175. '        たてばいかく
  1176. '----------------------------
  1177. SUB Set.KGM21
  1178.         IF In$(N) <= SPACE$(36) THEN NO.Data: EXIT SUB
  1179. '       IF N = 1 THEN GOTO S21OK
  1180.         IF N = 12 THEN Boo: EXIT SUB
  1181.         IF In$(N + 1) <= SPACE$(36) THEN  ELSE Boo: EXIT SUB
  1182. S21OK:
  1183.         Saizu(N) = 3
  1184.         LOCATE N + 4, 10: PRINT "      ○   "
  1185. END SUB
  1186.  
  1187. '----------------------------
  1188. '        よんばいかく
  1189. '----------------------------
  1190. SUB Set.KGM22
  1191.         IF In$(N) <= SPACE$(36) THEN NO.Data: EXIT SUB
  1192. '       IF N = 1 THEN GOTO KGM22.OK
  1193.         IF N = 12 THEN Boo: EXIT SUB
  1194.         IF In$(N + 1) <= SPACE$(36) THEN  ELSE Boo: EXIT SUB
  1195. KGM22.OK:
  1196.         Saizu(N) = 4
  1197.         LOCATE N + 4, 10
  1198.         PRINT "         ○"
  1199. END SUB
  1200.  
  1201. '----------------------------
  1202. '   でーたがめんくりあー
  1203. '----------------------------
  1204. SUB Text.Clear
  1205.  
  1206.         FOR I = 1 TO 12
  1207.             LOCATE I + 4, 23
  1208.             PRINT SPACE$(36);
  1209.         NEXT I
  1210.  
  1211. END SUB
  1212.  
  1213. '----------------------------
  1214. '     でーた ひょうじ
  1215. '----------------------------
  1216. SUB Text.Write
  1217.  
  1218.         COLOR 7
  1219.         FOR N = 1 TO 12
  1220.             SELECT CASE Saizu(N)
  1221.                 CASE 1
  1222.                     Set.KGM11
  1223.                 CASE 2
  1224.                     Set.KGM12
  1225.                 CASE 3
  1226.                     Set.KGM21
  1227.                 CASE 4
  1228.                     Set.KGM22
  1229.             END SELECT
  1230.  
  1231.                 LOCATE N + 4, 23: PRINT In$(N)
  1232.         NEXT N
  1233.  
  1234. END SUB
  1235.  
  1236. '----------------------------
  1237. '       せんたりんぐ
  1238. '----------------------------
  1239. SUB Write.Center
  1240.  
  1241.         IF In$(N) <= SPACE$(36) THEN NO.Data: EXIT SUB
  1242.  
  1243.         In$(N) = LTRIM$(In$(N))     ' 先頭空白文字の除去
  1244.  
  1245.         Dmy$ = LEFT$(In$(N), 2)
  1246.  
  1247.         SNSP = KLEN(In$(N))
  1248. '        IF SSP < 2 THEN RETURN
  1249.  
  1250.         IF ASC(Dmy$) <= 255 THEN    ' ANK
  1251.         SSP = (36 - SNSP) \ 2
  1252.         In$(N) = LEFT$((SPACE$(SSP) + In$(N)), 36)
  1253.  
  1254.         ELSE                        ' 漢字
  1255.         SSP = (18 - SNSP) \ 2
  1256.         In$(N) = LEFT$((STRING$(SSP, " ") + In$(N)), 36)
  1257.                                    ' 全角スペース
  1258.         END IF
  1259.  
  1260.         LOCATE CY, 23: PRINT SPACE$(36);
  1261.         LOCATE CY, 23: PRINT In$(N);
  1262.  
  1263. END SUB
  1264.  
  1265. DEFSNG A-Z
  1266. SUB Write.Data
  1267.  
  1268.             SHARED Data.Name$
  1269.             SHARED Load.Data$
  1270.             SHARED Load.Saizu$
  1271.  
  1272.         OPEN Drive$ + "LABEL.DAT" FOR RANDOM AS 1 LEN = 454
  1273.         FIELD #1, 10 AS Data.Name$, 432 AS Load.Data$, 12 AS Load.Saizu$
  1274.  
  1275.         MaxRecnum = LOF(1) \ 454
  1276.         Dmy.Name$ = ""
  1277.         FOR LD = 1 TO MaxRecnum
  1278.             GET #1, LD
  1279.             Dmy.Name$ = Dmy.Name$ + Data.Name$
  1280.         NEXT LD
  1281.  
  1282. Write.Start:
  1283.             P = 1: PC = 1: Page = 1
  1284. Write.Data:
  1285.             Page.No$ = CDBL$(RIGHT$("  " + MID$(STR$(Page), 2), 2))
  1286.             COLOR 3
  1287.             LOCATE 5, 30
  1288.             PRINT USING "番号   名  前     ページ &  &"; Page.No$;
  1289.             COLOR 7
  1290.             FOR I = 1 TO 10
  1291.                 LOCATE I + 5, 30
  1292.                 PRINT CDBL$(RIGHT$("  " + MID$(STR$(PC), 2), 2)); "  ";
  1293.                 PData$ = MID$(Dmy.Name$, P, 10)
  1294.                 IF PData$ <= "" THEN PData$ = SPACE$(10)
  1295.                 PRINT PData$
  1296.                 P = P + 10
  1297.                 PC = PC + 1
  1298.             NEXT I
  1299.  
  1300.             DO
  1301.             A$ = INKEY$
  1302.             LOOP WHILE A$ = ""
  1303.  
  1304.             SELECT CASE A$
  1305.                 CASE CHR$(0, &H51)      ' 次行
  1306.                     Page = Page + 1
  1307.                     GOTO Write.Data
  1308.  
  1309.                 CASE CHR$(0, &H49)      ' 前行
  1310.                     PC = PC - 20
  1311.                     Page = Page - 1
  1312.                     IF Page <= 1 THEN GOTO Write.Start
  1313.                     P = P - 10
  1314.                     GOTO Write.Data
  1315.  
  1316.                 CASE ELSE
  1317.                     EXIT SUB
  1318.  
  1319.             END SELECT
  1320.  
  1321. END SUB
  1322.  
  1323. DEFINT A-Z
  1324. '----------------------------
  1325. '         ひだりよせ
  1326. '----------------------------
  1327. SUB Write.Left
  1328.  
  1329.         IF In$(N) <= SPACE$(36) THEN NO.Data: EXIT SUB
  1330.  
  1331.         In$(N) = LTRIM$(In$(N))     ' 先頭空白文字の除去
  1332.  
  1333.         LOCATE CY, 23: PRINT SPACE$(36);
  1334.         LOCATE CY, 23: PRINT In$(N);
  1335.  
  1336. END SUB
  1337.  
  1338. '----------------------------
  1339. '         みぎよせ
  1340. '----------------------------
  1341. SUB Write.Right
  1342.  
  1343.         IF In$(N) <= SPACE$(36) THEN NO.Data: EXIT SUB
  1344.  
  1345.         In$(N) = LTRIM$(In$(N))     ' 先頭空白文字の除去
  1346.  
  1347.         Dmy$ = LEFT$(In$(N), 2)
  1348.  
  1349.         MNSP = KLEN(In$(N))
  1350. '        IF MNSP => 25 THEN RETURN
  1351.  
  1352.         IF ASC(Dmy$) <= 255 THEN    ' ANK
  1353.         MSP = 36 - MNSP
  1354.         In$(N) = MID$((SPACE$(MSP) + In$(N)), 1, 36)
  1355.  
  1356.         ELSE                        ' 漢字
  1357.         MSP = 18 - MNSP
  1358.         In$(N) = MID$((STRING$(MSP, " ") + In$(N)), 1, 36)
  1359.                                    ' 全角スペース
  1360.         END IF
  1361.  
  1362.         LOCATE CY, 23: PRINT SPACE$(36);
  1363.         LOCATE CY, 23: PRINT In$(N);
  1364.  
  1365. END SUB
  1366.  
  1367.