ユーザーがプログラムで作成したファイルは、プログラム内で削除しない限り内部に残り続けるので、不要なファイルを削除できるように作りました。
ただし、削除可能なのはユーザーが作成したプログラム以外のファイルだけです。
プログラムは、選択リスト上から削除できます。
画面の都合上、iPad縦画面専用です(手抜き)。
//------------------------------------------------
/* ファイルの一覧表示と削除を行うプログラム
/* サンプルのようでいて、実は実用プログラムである
/* File list display and delete program
/* This is sample program and this is practical program actually.
//------------------------------------------------
// for X-BASIC for iOS v2.1
// 初期化 / initialize
font("IPAGothic")
int fzenhan
int WX=64:if deviceType()<>1 then WX=48
int WY=width(WX,,fzenhan)
int xw=1:/* 全角1文字の桁数 / zenkaku 1 character columus
if fzenhan then xw=2
// タッチキー位置 / touch key area
int tx=WX-20:// <WX/2にすること
int ty=3
//
// 画面作成 / screen make
int lns=20:// 表示行数 / display lines
if lns>=WY-2 then lns=WY-2
makeScreen()
//
// 全ファイルリストを得る / get all file list
dim str fileList(256):// ()内は扱える最大ファイル数
int allcnt
str ext="":// 全ファイルを示す拡張子 / extension for all files
//
// 初期ファイル検索 / initial file search
int top:// 表示している先頭行要素番号:fileList(top)
// 表示範囲は(top)〜(top+lns-1)
int cur:// カーソル位置:0〜lns-1
searchFiles(ext)
tcolor(-THWHITE,0,0,255)
int page=0
int fafterMessage=NO
//
repeat
int top0=top,cur0=cur
int fdel=NO
str ext0=ext
//
int ky=inkey()
switch ky
// カーソル移動 / cursor move
case '8'
// カーソル上 / cursor up
if fafterMessage then messageDisp("")
if cur=0 then {
if top>0 then top=top-1
} else {
cur=cur-1
}
break
case '2'
// カーソル下 / cursor down
if fafterMessage then messageDisp("")
if cur=lns-1 then {
if top+lns<allcnt then top=top+1
} else {
if top+cur<allcnt-1 then cur=cur+1
}
break
// ページ単位移動 / page move
case '4'
// 前ページ / prev. page
if fafterMessage then messageDisp("")
if allcnt>lns then {
// ページ切り替えが可能なとき / When paging is enabled
top=top-(lns-1):// 1行残す / left 1 line
if top<0 then top=0 else page=page-1
}
break
case '6'
// 次ページ / next page
if fafterMessage then messageDisp("")
if allcnt>lns then {
// ページ切り替えが可能なとき / When paging is enabled
top=top+(lns-1):// 1行残す / left 1 line
if top+lns>allcnt then {
top=allcnt-lns
} else {
page=page+1
}
}
break
// 削除 / delete
case 'd'
if fafterMessage then messageDisp("")
allcnt=allcnt-1
str fname=fileList(top+cur)
int ret
str title$,errmes$
dim str mn$(1)
if isLocalizeJapan() then {
mn$(0)="いいえ"
mn$(1)="はい"
} else {
mn$(0)="NO"
mn$(1)="YES"
}
if fname[strlen(fname)-1]='/' then {
// ディレクトリだったとき
if isLocalizeJapan() then {
title$="このディレクトリを削除しますか?"
errmes$="削除できません(空でない)"
} else {
title$="Delete this directory ?"
errmes$="Can't delete(Not empty)"
}
if selectMenu(title$,mn$)=1 then {
// ただし、空ディレクトリでないと削除できない
if rmdir(fname)=0 then {
fdel=YES:// 表示も変更が必要
} else {
messageDisp(errmes$+":"+fname)
}
}
} else {
// ファイルだった時
if isLocalizeJapan() then {
title$="このファイルを削除しますか?"+chr$(DISP_CTRL_LF)+fname
errmes$="削除できません"
} else {
title$="Delete this file ?"
errmes$="Can't delete"
}
if pathExtension(fname)="bas" then {
// .basファイルは消せないようにしておく(プログラムを削除するのはプログラム選択メニューから)
// Disable to delete .bas file (if you will do, do in program select menu)
messageDisp(errmes$+"(.bas):"+fname)
break
}
if selectMenu(title$,mn$)=1 then {
if fdelete(fname)=0 then {
fdel=YES:// 表示も変更が必要
} else {
messageDisp(errmes$+":"+fname)
}
}
}
break
// 拡張子変更 / change extension
case 'j'
if fafterMessage then messageDisp("")
ext="jpg"
break
case 'p'
if fafterMessage then messageDisp("")
ext="png"
break
case 'a'
if fafterMessage then messageDisp("")
ext=""
break
default
break
endswitch
if ext<>ext0 or fdel=YES then {
// 拡張子変更 / extension changed
// またはファイルの数が変わった / Or the number of files is changed
// ファイルの再検索をするが、このページの先頭は変更しなくても良い
int top1=top
int cur1=cur
searchFiles(ext)
if top1+cur1>=allcnt then {
if cur1>0 then cur=cur1-1:// 一番後ろを消したときは、1つ上に上げる。でもそれが最上行を消すものなら、前ページに移動する・・・のは大変なので、最初から表示しなおし
} else {
// 新しいページにまだ収まるとき
top=top1
cur=cur1
}
// ページは変わらないけど、再表示は必要
printList()
}
if top<>top0 then {
// ページが変わる / page changed
printList()
fdel=NO
} else {
if cur<>cur0 then {
// カーソル位置が変わった / cursor moved
printList1(cur0) // 元の位置を反転解除 / non-reverse old position
printList1(cur) // 新しい位置を反転 / revese new position
}
}
until ky='!'
end
//------------------------------------------------
// 関数 / functions
//------------------------------------------------
func printKeys(x;int,y;int)
// 012345678901 *2
locate(x,y+0):print "┏━┓┏━┓┏━┓┏━┓"
locate(x,y+1):print "┃←┃┃↑┃┃↓┃┃→┃"
locate(x,y+2):print "┗━┛┗━┛┗━┛┗━┛"
endfunc
func makeScreen()
// タッチキー / touch key
dim int touchNo(10) :// タッチエリア番号 / touch area number
int touchallcnt :// タッチエリア数 / the number of touch area
//
int x=0
int y=1+lns+1
printKeys(x,y)
int i=0
touchNo(inc(i))=setTouchArea(textX2Gx(x+ 0),textY2Gy(y),textX2Gx(xw*3),textY2Gy(3),'4',YES, 125,0,5,100)
touchNo(inc(i))=setTouchArea(textX2Gx(x+ 6),textY2Gy(y),textX2Gx(xw*3),textY2Gy(3),'8',YES, 125,0,5,100)
touchNo(inc(i))=setTouchArea(textX2Gx(x+12),textY2Gy(y),textX2Gx(xw*3),textY2Gy(3),'2',YES, 125,0,5,100)
touchNo(inc(i))=setTouchArea(textX2Gx(x+18),textY2Gy(y),textX2Gx(xw*3),textY2Gy(3),'6',YES, 125,0,5,100)
touchallcnt=i
// ファンクションキー / fucntion key
str exit$,ext$,prev$,next$,del$
if isLocalizeJapan() then {
exit$="終了"
ext$="全て"
prev$="前頁"
next$="後頁"
del$="削除"
} else {
exit$="exit"
ext$="all"
prev$="Prev"
next$="Next"
del$="Del"
}
setFunctionKey(0,prev$,'4')
setFunctionKey(1,next$,'6')
setFunctionKey(2," ",'?')
setFunctionKey(3,del$ ,'d')
setFunctionKey(4," ",'?')
setFunctionKey(5,"jpg",'j')
setFunctionKey(6,"png",'p')
setFunctionKey(7,ext$ ,'a')
setFunctionKey(8," ",'?')
setFunctionKey(9,exit$,'!')
setFunctionKeyBackgroundImage("funcBack.png")
displayFunctionKeyAll(YES,YES):// v2.0
endfunc
func messageDisp(mes;str)
locate(0,lns+1)
if len(mes)=0 then {
print chr$(DISP_CTRL_CLEARLINE)
fafterMessage=NO:// メッセージ表示してない / Message is not displaying
} else {
print mes
fafterMessage=YES:// メッセージ表示中 / Now message is displaying
}
endfunc
//------------------------------------------------
func printList1(i;int)
// 1行表示 / 1line display
locate(0,1+i)
if i=cur then tatrb(ATRB_REVERSE):// 選択行 / selected line
if top+i<allcnt then {
print using "###:";top+i;
print fileList(top+i);
// print lastPathComponent(fileList(top+i));
if i=cur then tatrb(ATRB_NORMAL)
}
print chr$(DISP_CTRL_CLEARLINE):// 行末まで消す / clear to end of line
endfunc
func printList()
// 画面内表示 / display in screen
int i
int max=lns
for i=0 to max-1
printList1(i)
next
locate(WX-10,0):print "page=";page
endfunc
func searchFiles(ext;str)
// 新しく表示し直すので各種ポインターをリセット
top=0 :// 表示している先頭行要素番号:fileList(top)
// 表示範囲は(top)〜(top+lns-1)
cur=0 :// カーソル位置:0〜lns-1
//
allcnt=files(fileList,"",ext,YES,FILES_ALL)
cls()
printKeys(0,1+lns+1)
//
locate(0,0)
if isLocalizeJapan() then {
print "拡張子=";ext,,
print "ファイル数=";allcnt
} else {
print "extension=";ext,,
print allcnt;" files"
}
printList()
endfunc
//------------------------------------------------
Zipファイル :XBetc.zip
0 件のコメント:
コメントを投稿