Skip to content

Instantly share code, notes, and snippets.

@eidas
Created June 16, 2011 15:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eidas/1029492 to your computer and use it in GitHub Desktop.
Save eidas/1029492 to your computer and use it in GitHub Desktop.
Short Text Editor for Petitcom
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
@eidas
Copy link
Author

eidas commented Jun 26, 2011

6/27 TEDIT v0.12
v0.11からの変更点
・他プログラムから呼び出されている時、TEDITを実行停止すると、呼び出し元プログラムに戻れなくなる問題の修正。
・CHR$(0)を空白文字(CHR$(32))に置き換え、文字列右側の空白部分をトリム。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment