1000 '************************************************************************* 1010 '* Morse Master Version 3.01 2000.06.14. * 1020 '* Copyright (C) Takashi Utsunomiya 作成開始 1996. * 1030 '************************************************************************* 1040 ' 内容: モールス信号練習ソフト 1050 ' 参考: Basicマガジン1996年12月号 1060 ' 『モールス信号養成プログラム』(高橋 勇二氏) 1070 '************************************************************************* 1080 : 1090 CLEAR &H10:DEFINT A-Z:DEF SEG=SEGPTR(2):ADR=0:DEF USR0=ADR 1100 SCREEN 3,0,0,1:WIDTH 80,25:CONSOLE 0,25,0,1,0:COLOR 7,0,0,7,2:CLS 3 1110 : 1120 DT=8 ' 短点長 (基本の長さ。変更可) 1130 D0=DT*2:D1=DT*2.5:D2=DT*6 ' 長点,字間,語間 (入力用) 1140 C0=DT*3:C1=DT*3 :C2=DT*7 ' 長点,字間,語間 (出力用) 1150 DIM CD$[49] ' コード/信号 変換用 1160 DIM MC$ ' コード/信号 変換用 1170 DIM CX,CY ' カーソル位置 1180 : 1190 MC$="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:?'/()"+CHR$(&H22)+"-+= " 1200 FOR I=0 TO 48:READ CD$[I]:NEXT 1210 DATA ・-,-・・・,-・-・,-・・,・,・・-・,--・,・・・・,・・,・---,-・-,・-・・,--,-・,---,・--・ 1220 DATA --・-,・-・,・・・,-,・・-,・・・-,・--,-・・-,-・--,--・・ 1230 DATA -----,・----,・・---,・・・--,・・・・-,・・・・・,-・・・・,--・・・,---・・,----・ 1240 DATA ・-・-・-,--・・--,---・・・,・・--・・,・----・,-・・-・,-・--・,-・--・-,・-・・-・ 1250 DATA -・・・・-,・-・-・,-・・・-, 1260 FOR I=0 TO 2:READ A$ 1270 FOR J=0 TO LEN(A$)\2-2:POKE ADR,VAL("&H"+MID$(A$,J*2+1,2)):ADR=ADR+1 1280 NEXT J,I 1290 ON STOP GOSUB *STOP.:STOP ON 1300 *START '============== 直前処理 1310 GOSUB *SCR 1320 GOSUB *ICHIRAN 1330 GOSUB *TITLE 1340 CX=2:CY=15 1350 ON KEY GOSUB *F1KEY:KEY ON 1360 GOSUB *WA2 1370 *MAIN '============== メイン 1380 A=USR0(0) 1390 SB=SH:SH=-((INP(&HE8)AND 64)=0):BEEP SH '[SHIFT]キー 1400 Z=-Z*(SB=SH)-(ZD0) :RETURN 1470 'IF USR0(2)<>0 THEN PRINT"遅"; '<-- 1480 WHILE USR0(2)<1:WEND :GOTO *MAIN 1490 *STOP. '============== 終了 1500 KEY OFF:BEEP 0:COLOR 7:CLS 3:A=USR0(1) :END 1510 *F1KEY '============== [f・1] 1520 KEY OFF:BEEP 0 1530 A=1:GOSUB *ICHIRAN 1540 KEY ON:GOSUB *WA2:SH=0 :RETURN 1550 *SCR '============== 画面作成 1560 LINE(0,0)-(639,399),15,BF 1570 FOR I=0 TO 2 1580 READ X1,Y1,X2,Y2,D:GOSUB *BOX 1590 NEXT 1600 : 1610 LOCATE 72, 0:COLOR 0:PRINT"[f・1]"; 1620 LOCATE 71, 1:COLOR 7:PRINT"信号一覧"; 1630 LOCATE 40,13:COLOR 7:PRINT"(長点 = 字間 = 3短点 語間 =7短点)"; 1640 RETURN 1650 *TITLE '============== タイトル文字出力 1660 X=28:Y=1:COLOR 7:T$="Morse Master":BP=1 1670 WHILE T$>"" 1680 A$=LEFT$(T$,1):T$=MID$(T$,2) 1690 PUT@(X*8,Y*16+1),KANJI(VAL("&H"+JIS$(AKCNV$(A$)))),PSET,8,15 1700 LOCATE X,Y:PRINT AKCNV$(A$);:X=X+2 1710 BP=BP AND NOT(INP(&HE8)AND 2^6)=0 '[SHIFT] 1720 IF BP THEN A$=CHR$(ASC(A$)AND &HDF):GOSUB *BEEP. 1730 IF BP THEN W=C1:GOSUB *WA 1740 WEND 1750 LINE(8*28-4,16*2+1)-STEP(16*12+2,0),4 1760 LINE(8*28-3,16*2+2)-STEP(16*12+2,0),12 1770 COLOR 7:RETURN 1780 *ICHIRAN '============== 一覧 (IN a:1=beep on) 1790 BP=(A=1) 1800 FOR I=0 TO 48 1810 A=I-4*(I>=26):X=(A\10)*13+2:Y=A MOD 10+3 1820 LOCATE X,Y:PRINT SPACE$(12); 1830 LOCATE X,Y:PRINT "[ "+MID$(MC$,I+1,1)+" ] "; 1840 FOR J=1 TO LEN(CD$[I]) 1850 BP=BP AND NOT(INP(&HE8)AND 2^6)=0 '[SHIFT] 1860 A$=MID$(CD$[I],J,1):PRINT A$; 1870 IF BP THEN A=-(A$="・"):W=DT*(3-2*A):BEEP 1:GOSUB *WA:BEEP 0 1880 IF BP THEN W=DT:GOSUB *WA 1890 NEXT:IF BP THEN W=C1:GOSUB *WA 1900 NEXT :RETURN 1910 *BEEP. '============== 信号出力 (IN a$:文字) 1920 A=INSTR(MC$,A$):IF A=0 THEN RETURN 1930 C$=CD$[A-1] 1940 WHILE C$>"" 1950 A$=MID$(C$,1,1):C$=MID$(C$,2) 1960 A=-(A$="・"):W=DT*(3-2*A):BEEP 1:GOSUB *WA:BEEP 0 1970 W=DT:GOSUB *WA 1980 WEND :RETURN 1990 *CNV '============== 信号を文字に変換 (IN cd$:信号 OUT a$:文字) 2000 A=0:A$="~":WHILE A<49 AND CD$<>CD$[A]:A=A+1:WEND :IF A=49 THEN RETURN 2010 A$=MID$(MC$,A+1,1) :RETURN 2020 *PUT. '============== 表示 (IN a$:文字) 2030 IF CX>77 THEN CX=2:CY=CY+1:IF CY>23 THEN CY=15 2040 IF CX=2 THEN LOCATE CX,CY:PRINT SPACE$(76); 2050 LOCATE CX,CY:PRINT A$;:CX=CX+1 2060 GOSUB *PUT2 :RETURN 2070 *PUT2 '============== 出力文字ハイライト表示 (IN a$:文字) 2080 SWAP A$,PUT2B$:CL=7:GOSUB *PUT2.1 2090 A$=PUT2B$:CL=4:GOSUB *PUT2.1:COLOR 7 :RETURN 2100 *PUT2.1 '-------------- (IN cl:色 a$:文字) 2110 C=INSTR(MC$,A$):IF C=0 OR A$="" THEN RETURN 2120 C=C-1:A=C-(C>26)*4:X=(A\10)*13+2:Y=A MOD 10+3 2130 LOCATE X,Y:COLOR CL:PRINT "[ "+A$+" ] "+CD$[C]; :RETURN 2140 *SH '============== [SHIFT]押下状態取得 (OUT sh:-1=ON,0=OFF) 2150 SH=(INP(&HE8)AND 64)=0 :RETURN 2160 *WA '============== ウェイト (w/100秒間) 2170 A=USR(0):WHILE USR(2)