Created
June 16, 2011 15:28
-
-
Save eidas/1029492 to your computer and use it in GitHub Desktop.
Short Text Editor for Petitcom
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
IF RTPRG$!="" THEN LOCATE 0,0:?RTPRG$ | |
CLEAR | |
TITLE$="テキストエディタ V0.12" | |
MYPRG$="PRG:TEDIT012" | |
KEY 3,"SAVE"+CHR$(34)+MYPRG$ | |
'┏━━━━━━┓ | |
'┃ テキストエディタ ┃ | |
'┗━━━━━━┛ | |
'256バイトマデノテキストヲヘンシュウ | |
'ヘンスウヒョウ | |
'FN$ ゲンザイヘンシュウチュウノファイルメイ | |
'S X,Yノイチニアルモジコードヲホジ | |
'C カーソル 0^CBテントウ CB^CB*2ショウトウ | |
'X,Y カーソルイチ | |
'VX,VY カーソルイドウリョウ | |
'RTPRG$ ヨビダシモト プログラム | |
'リストボックス ライブラリ ヨウ | |
'LST$() リスト | |
'LST リストギョウスウ | |
'WINX,WINY ウィンドウ ヒダリウエイチ | |
'WINW ウィンドウ ハバ | |
@DECLARE | |
CB=5:'カーソルノブリンクソクド | |
SF=5:'フレームマチジカン | |
DIM LST$(21):'リスト | |
FN$="":RTPRG$="" | |
GOSUB @CHKARG | |
@INIT | |
CLS:SPCLR:GCLS | |
LOCATE 0,0 | |
?TITLE$; | |
LOCATE 0,1 | |
?"━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━╋━━"; | |
LOCATE 0,10 | |
?"━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━╋━━"; | |
LOCATE 0,11 | |
?"Y:BS L+Y:DEL X:INS" | |
GOSUB @FNDISP | |
DIM T$(256) | |
X=0:Y=2:S=0:C=0 | |
GOSUB @MEM2SCR | |
S=CHKCHR(X,Y) | |
VSYNC 10 | |
@LOOPMAIN | |
GOSUB @TINPUT | |
GOSUB @CURINP | |
GOSUB @CURDISP | |
GOSUB @EDITCOM | |
IF B AND 16 GOTO @FILEMODE | |
VSYNC SF | |
GOTO @LOOPMAIN | |
@EXIT | |
LOCATE 0,14 | |
IF RTPRG$!="" THEN EXEC RTPRG$ | |
END | |
@TINPUT | |
K$=INKEY$() | |
IF K$=="" GOTO @TINPUTX | |
LOCATE X,Y:?K$; | |
X=X+1 | |
IF X>31 THEN X=0:Y=Y+1 | |
IF Y>9 THEN X=31:Y=9 | |
S=CHKCHR(X,Y) | |
@TINPUTX | |
RETURN | |
@CURINP | |
VX=0:VY=0 | |
B=BUTTON() | |
IF B AND 1 THEN VY=-1 | |
IF B AND 2 THEN VY=1 | |
IF B AND 4 THEN VX=-1 | |
IF B AND 8 THEN VX=1 | |
GOSUB @CURMOVE | |
RETURN | |
@CURMOVE | |
IF VX==0 AND VY==0 GOTO @CURMOVEX | |
LOCATE X,Y:?CHR$(S) | |
X=X+VX:Y=Y+VY | |
GOSUB @XYCHK | |
S=CHKCHR(X,Y) | |
C=0 | |
@CURMOVEX | |
RETURN | |
@XYCHK | |
IF X<0 AND Y<=2 THEN X=0 | |
IF X<0 THEN X=31:Y=Y-1 | |
IF X>31 AND Y>=9 THEN X=31 | |
IF X>31 THEN X=0:Y=Y+1 | |
IF Y>9 THEN Y=9 | |
IF Y<2 THEN Y=2 | |
RETURN | |
@CURDISP | |
LOCATE X,Y | |
?MID$("■"+CHR$(S),C>CB,1); | |
C=C+1:IF C>=CB*2 THEN C=0 | |
RETURN | |
@EDITCOM | |
'128=Y,64=X,256=L | |
ED=-1 | |
IF B AND 128 THEN ED=0 | |
IF (B AND 384)==384 THEN ED=1 | |
IF B AND 64 THEN ED=2 | |
ON ED GOSUB @BS,@DEL,@INS | |
RETURN | |
@BS | |
VX=-1:GOSUB @CURMOVE | |
GOSUB @DEL | |
S=CHKCHR(X,Y) | |
GOSUB @CURDISP | |
RETURN | |
@DEL | |
LOCATE X,Y:?" " | |
T=X+(Y-2)*32 | |
FOR I=T TO 255 | |
U=CHKCHR((I+1)%32,FLOOR((I+1)/32)+2) | |
LOCATE I%32,FLOOR(I/32)+2 | |
?CHR$(U) | |
NEXT | |
LOCATE 31,9:?" "; | |
RETURN | |
@INS | |
LOCATE X,Y:?CHR$(S) | |
T=X+(Y-2)*32 | |
FOR I=255 TO T+1 STEP -1 | |
U=CHKCHR((I-1)%32,FLOOR((I-1)/32)+2) | |
LOCATE I%32,FLOOR(I/32)+2 | |
?CHR$(U) | |
NEXT | |
LOCATE X,Y:?" "; | |
S=CHKCHR(X,Y) | |
RETURN | |
@SCR2MEM | |
M$="" | |
FOR I=2 TO 9 | |
FOR J=0 TO 31 | |
M$=M$+CHR$(CHKCHR(J,I)) | |
NEXT | |
NEXT | |
U=LEN(M$)-1 | |
FOR I=U TO 0 STEP -1 | |
T=ASC(MID$(M$,I,1)) | |
IF T!=0 AND T!=32 THEN U=I:I=0 | |
NEXT | |
M$=MID$(M$,0,U+1) | |
U=LEN(M$)-1 | |
FOR I=0 TO U | |
T=ASC(MID$(M$,I,1)) | |
IF T==0 THEN M$=MID$(M$,0,I)+" "+MID$(M$,I+1,U-I) | |
NEXT | |
MEM$=M$ | |
RETURN | |
@MEM2SCR | |
FOR I=0 TO 255 | |
LOCATE I%32,FLOOR(I/32)+2 | |
?MID$(MEM$,I,1); | |
NEXT | |
RETURN | |
'---------- | |
' ファイルモード | |
'---------- | |
@FILEMODE | |
LST$(0)="SAVE" | |
LST$(1)="LOAD" | |
LST$(2)="CLEAR" | |
LST$(3)="EXIT" | |
LST=3 | |
WINX=11:WINY=3:WINW=6 | |
LOCATE X,Y:?CHR$(S) | |
GOSUB @SCR2MEM | |
GOSUB @L_LSTBOX | |
GOSUB @MEM2SCR | |
ON RES GOTO @FSAVE,@FLOAD,@FCLEAR,@EXIT | |
GOTO @LOOPMAIN | |
@FSAVE | |
GOSUB @FNCLR | |
LOCATE 0,14:?FN$ | |
LOCATE 0,13:INPUT "SAVE ファイルメイ";F$ | |
IF F$=="" GOTO @FSAVEX | |
GOSUB @SCR2MEM | |
FN$=F$ | |
SAVE"MEM:"+FN$ | |
@FSAVEX | |
GOSUB @FNDISP | |
GOTO @LOOPMAIN | |
@FLOAD | |
GOSUB @FNCLR | |
LOCATE 0,14:?FN$ | |
LOCATE 0,13:INPUT "LOAD ファイルメイ";F$ | |
IF F$=="" GOTO @FLOADX | |
FN$=F$ | |
LOAD"MEM:"+FN$ | |
GOSUB @MEM2SCR | |
S=CHKCHR(X,Y) | |
@FLOADX | |
GOSUB @FNDISP | |
GOTO @LOOPMAIN | |
@FCLEAR | |
FOR I=2 TO 9 | |
LOCATE 0,I | |
FOR J=0 TO 31:?CHR$(0);:NEXT | |
NEXT | |
S=CHKCHR(X,Y) | |
GOTO @LOOPMAIN | |
@FNCLR | |
LOCATE 0,13 | |
FOR I=0 TO 63:?CHR$(0);:NEXT | |
RETURN | |
@FNDISP | |
GOSUB @FNCLR | |
LOCATE 0,13:?"ファイルメイ: ";FN$ | |
RETURN | |
@CHKARG | |
I$="":FOR I=0 TO 11:I$=I$+CHR$(CHKCHR(I,0)):NEXT | |
IF MID$(I$,0,4)=="PRG:" THEN RTPRG$=I$ | |
I$="":FOR I=0 TO 11:I$=I$+CHR$(CHKCHR(I,1)):NEXT | |
IF MID$(I$,0,4)!="MEM:" THEN RETURN | |
FN$=MID$(I$,4,8) | |
LOAD "MEM:"+FN$,FALSE | |
GOSUB @MEM2SCR | |
S=CHKCHR(X,Y) | |
RETURN | |
'+++++++++++++++++++ | |
'+ リストボックス ライブラリ + | |
'+++++++++++++++++++ | |
'ヒキスウ: | |
' LST$() リスト | |
' LST リストギョウスウ | |
' WINX,WINY ウィンドウ ヒダリウエイチ | |
' WINW ウィンドウ ハバ | |
'モドリチ: | |
' RES センタクケッカ(ミセンタク=-1) | |
@L_LSTBOX | |
LBY=0:RES=-1 | |
IF LST>21 THEN LST=21 | |
GOSUB @WINDISP:'ワクヲカク | |
GOSUB @TXTDISP:'リストヒョウジ | |
GOSUB @WAITBTN:'ABヲハナスマデマツ | |
@LOOPLB | |
LOCATE WINX+1,WINY+1+LBY:?" "; | |
B=BUTTON() AND 3 | |
LBY=LBY-(B==1)*(LBY>0)+(B==2)*(LBY<LST) | |
LOCATE WINX+1,WINY+1+LBY:?"→"; | |
B=BUTTON() | |
IF B AND 16 GOTO @SELECTLB | |
IF B AND 32 GOTO @EXITLB | |
VSYNC 5 | |
GOTO @LOOPLB | |
@SELECTLB | |
RES=LBY | |
@EXITLB | |
GOSUB @WINCLR | |
RETURN | |
@WAITBTN | |
IF BUTTON() AND 48 GOTO @WAITBTN | |
RETURN | |
@WINDISP | |
LOCATE WINX,WINY | |
?"┏";:FOR J=1 TO WINW:?"━";:NEXT:?"┓"; | |
FOR I=1 TO LST+1 | |
LOCATE WINX,WINY+I | |
?"┃";:FOR J=1 TO WINW:?" ";:NEXT:?"┃"; | |
NEXT | |
LOCATE WINX,WINY+I | |
?"┗";:FOR J=1 TO WINW:?"━";:NEXT:?"┛"; | |
RETURN | |
@WINCLR | |
FOR I=0 TO LST+2 | |
LOCATE WINX,WINY+I | |
FOR J=0 TO WINW+1:?" ";:NEXT | |
NEXT | |
RETURN | |
@TXTDISP | |
FOR I=0 TO LST | |
LOCATE WINX+2,WINY+1+I | |
?LST$(I); | |
NEXT | |
RETURN |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
6/27 TEDIT v0.12
v0.11からの変更点
・他プログラムから呼び出されている時、TEDITを実行停止すると、呼び出し元プログラムに戻れなくなる問題の修正。
・CHR$(0)を空白文字(CHR$(32))に置き換え、文字列右側の空白部分をトリム。