home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 December
/
VPR9712A.ISO
/
OLS
/
OS2
/
FD2ET776
/
FD2ET776.LZH
/
ET.CMD
< prev
next >
Wrap
OS/2 REXX Batch file
|
1995-10-03
|
111KB
|
2,718 lines
/*****************************************************************
* Presented by Shumann *
* *
* 日本語版OS/2 全画面用ファイラ FD/2 version 0.77 拡張版 *
* FD/2 version 0.77 exTension 0.6 *
* *
* (C) Copyright 1994,1995 by Shumann *
* *
* ------------------------------------------------------ *
* Original version FD/2 version 0.77 *
* Copyright (C) 1992,1993 by Nob_Kozawa ALL RIGHTS RESERVED *
* *
*****************************************************************/
/* Added Altair☆'s modification 1992/10/31 */
/* Added Mistral's modification 1994/11/28 & 12/10 */
VER = '0.6'; DATE = '(1995/10/03)'; TITLE = 'FD2eT' VER
parse upper arg OPT1 with '/' OPT2 OPT3 .
if OPT1 = '' then SPATH = OPT3
else SPATH = OPT1
if datatype(OPT2) = 'NUM' then '@MODE CO80' OPT2
/* Setup */
signal on SYNTAX /* Trap for debug */
'@prompt' /* HELP OFF */
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs /* Load all rexx utilities */
X = SysTextScreenSize(); ROW = subword(X,1,1); COL = subword(X,2,1)
call SETPARM
HIST. = ''; HIST.0 = 0; ALIST. = ''; AUNPK. = ''; CCLR. = ''
/*****************************/
/* Configuration parameteres */
/*****************************/
/* ROW = 20; COL = 60 */
EDITOR = 'E'
VIEWER = 'T2'
APACK = 'LHA A'
ALIST.ZIP = 'UNZIP -v'
ALIST.LZH = 'LHA V'
ALIST.ZOO = 'ZOO l'
AUNPK.ZIP = 'UNZIP'
AUNPK.LZH = 'LHA X'
AUNPK.ZOO = 'ZOO x'
TREEFILE = 'FD2eTREE.DAT'
/* SET DISPlay Mode */
call SETDISPM 5 /* Choose 1, 2, 3 or 5 */
/* COLOR SETUP */
/* format : CCLR.n = [H]ff[bb] */
/* H : High intensify */
/* ff : foreground color */
/* bb : background color */
/* Colors : BK=BLACK RE=READ GR=GREEN YE=YELLOW BL=BLUE */
/* PU=PURPLE TU=TURQUOISE WH=WHITE RV=REVERSE */
CCLR.0 = '1B'x||'[0m' /* No attribute */
CCLR.1 = HWHBL /* フレーム */
CCLR.2 = HYEBL /* 情報 */
CCLR.3 = HPUbl /* システムファイル */
CCLR.4 = HBLbl /* 隠しファイル */
CCLR.5 = HGRbl /* 読出し専用ファイル */
CCLR.6 = HTUbl /* ディレクトリ */
CCLR.13 = hpuPU /* システムファイル, 反転 */
CCLR.14 = hblBk /* 隠しファイル, 反転 */
CCLR.15 = hgrGR /* 読出し専用ファイル, 反転 */
CCLR.16 = htuTU /* ディレクトリ, 反転 */
CCLR.7 = HWHbl /* 通常ファイル */
CCLR.19 = blwh /* 通常ファイル, 反転 */
CCLR.8 = WHBL /* メッセージ */
CCLR.9 = BLWH /* 影 */
CCLR.10 = WHBL /* プロンプト */
CCLR.11 = BLWH /* Input area */
CCLR.12 = HWHTU /* 選択 */
CCLR.17 = HYEBL /* 見出し文字 */
CCLR.18 = TUBL /* ダイアログフレーム */
CCLR.20 = HREBL /* VOLUME */
CCLR.21 = HWHPU /* ドライブ切替名 */
CCLR.22 = HPUBL /* ヘルプ次頁 */
CCLR.23 = HTUBK
CCLR.24 = HTUBL
CCLR.25 = HGRBL
cclr.26 = tuwh
call SETCOLOR 26
/***********************************************************/
ORIGINAL = directory() /* save original directory */
CURRENT = directory(SPATH) /* change directory */
CURRENT = directory()
if right(CURRENT,2) <> ':\' then CURRENT = CURRENT||'\'
call CLS /* Clear screen */
call DISPFRAME /* DISPlay FRAME */
call TITLEDISP /* TITLE display */
call SysSleep 0
call GETFILES /* GET current directory FILES */
call DISPFILE /* DISPlay FILE field */
call DISPINFO /* DISPlay INFOmation field */
SP = 0
/* Main loop */
do forever
parse upper value right(FNAME.INR,4) with X '.' EXT
SAVFNAME = FNAME.INR; SAVNR = NR; SAVFST = FST; SAVDIR = CURRENT /* Save */
if EXT = 'CMD' | EXT = 'EXE' | EXT = 'COM' | EXT = 'BAT' then EXTT = 1
else EXTT = 0 /* EXTT : 1 = executable, 0 = other */
/* call SAYRC */
parse upper value sysgetkey('NOECHO') with CMD
select
when SP = 0 & CMD = 'E0'X then SP = 1 /* Extended key code */
when SP = 0 & CMD = '00'X then SP = 2 /* alt key code */
when SP = 1 & CMD = '48'X then do /* UP ARROW */
SP = 0; NR = NR - 1
if NR < 1 | NR < FST then NR = FST + NX * NY - 1
if NR > FCOUNT then NR = FCOUNT
call DISPFILE 'X'
call DISPINFO 'X'
end /* Do */
when SP = 1 & CMD = '50'X then call DOWNARROW /* DOWN ARROW */
when SP = 1 & CMD = '4D'X then do /* RIGHT ARROW */
NR = NR + NX; if NR >= FST + NX * NY then NR = NR - NX * NY
if NR > FCOUNT then NR = (NR - 1) // NX + FST
call DISPFILE 'X'; call DISPINFO 'X'; SP = 0
end /* Do */
when SP = 1 & CMD = '4B'X then do /* LEFT ARROW */
NR = NR - NX; if NR < FST then NR = NR + NX * NY
if NR > FCOUNT then NR = NR - ((NR - FCOUNT - 1) % NX + 1) * NX
call DISPFILE 'X'; call DISPINFO 'X'; SP = 0
end /* Do */
when SP = 1 & CMD = '51'X then do /* DOWN */
FST = FST + NX * NY; if FST > FCOUNT then FST = FST - NX * NY
NR = FST; SP = 0
call DISPFILE; call DISPINFO
end /* Do */
when SP = 1 & CMD = '49'X then do /* UP */
FST = FST - NX * NY; if FST < 1 then FST = 1
SP = 0; NR = FST
call DISPFILE; call DISPINFO
end /* Do */
when SP = 2 & CMD = '3B'X then do /* Help */
call SETHELP 'MAIN'; call DISPHELP
call DISPFILE
SP = 0
end /* Do */
when SP = 0 & (CMD = '2C'X | CMD = '<') then do /* Go Top File */
FST = FST ; if FST > FCOUNT then FST = FST - NX * NY
SP = 0; NR = FST
call DISPFILE; call DISPINFO
end /* Do */
when SP = 0 &( CMD = '2E'X | CMD = '>') then do /* Go End File */
SP = 0; NR = NR - 90
if NR < 1 | NR < FST then NR = FST + NX * NY - 1
if NR > FCOUNT then NR = FCOUNT
call DISPFILE 'X'
call DISPINFO 'X'
end /* do */
when SP = 0 & (CMD = '51'X | CMD = 'Q') then do /* Quick Quit */
call GOTOXY ROW 1; X = charout(,'1b'x||'[0m')
if CMD = 'Q' then X = directory(ORIGINAL)
'@prompt $i[$p]'
exit
end
when SP = 0 & (CMD = '1B'X | CMD = 'Esc') then do /* QUIT */
call M_QUIT; QUITRC = result
if QUITRC = 'Q' | QUITRC = 'Y' then leave
call DISPFILE
end
when SP = 0 & CMD = 'L' then do /* LOG DRIVE */
call M_LOGDRIVE
if result = '0D'X then do /* CR was pressed */
push 'ディレクトリ読込中'
call RUNMSG; call GETFILES; call DISPFILE; call DISPINFO
end
else do /* ESC キー was pressed */
call DISPFILE ; call DISPINFO
end /* Do */
end
when SP = 0 & (CMD = '08'X | CMD = '\') then do /* BS : CD ..*/
if substr(CURRENT,2) <> ':\' then do /* \ : CD \ */
if CMD = '\' then /* Altair☆'s special */
CURRENT = directory('\') /* Altair☆'s special */
else
CURRENT = directory('..')
CURRENT = directory()
if right(CURRENT,2) <> ':\' then CURRENT = CURRENT||'\'
push 'ディレクトリ読込中'
call RUNMSG; call GETFILES; call DISPFILE; call DISPINFO
end
end /* Do */
when SP = 0 & CMD = 'X' then do /* COMMAND */
push
call CMDEXECM; KEY = result; parse pull XCMD; XCMD = strip(XCMD)
if KEY <> '1B'X then do
XX = charout(,'1b'x||'[0m'); call CLS /* Clear attribute */
call syscurstate 'ON'
if strip(XCMD) <> '' then do
say
'@CMD /C' XCMD
say 'RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end
else do
say; say ' "EXIT" と入力すると FD2eT の画面に戻ります.'
'@CMD'
end /* Do */
call GETDISP
end
else do
call DISPFILE
end
end /* Do */
when SP = 0 & CMD = 'K' then do /* Make DIR */
push '';push 'Esc:中断'
push '新しいディレクトリ名を指定してください.'
push 'ディレクトリの作成'
push ' '
push ' '; push ''
call MSGANDGET 2
parse pull RES
if result <> '1B'X then do
XX = charout(,CCLR.24); /* Add by Shumann */
call CLS
'MD' FILENAME(RES)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
call GETDISP
end
else do
call DISPFILE
end /* Do */
end /* Do */
when SP = 0 & CMD = 'H' then do /* Undelete */
push '指定形式 ドライブ→X:/ディレクトリ→X '
push ' Esc:中断 Enterのみで現カレント全ディレクトリ解除'
push '解除先(ドライブ/ディレクトリ)を指定してください.'
push '削除ファイルの解除呼出し'
push '現カレント:'
push CURRENT; push ''
call MSGANDGET 2
parse pull RES
if result <> '1B'X then do
XX = charout(,CCLR.24);call CLS /* Add by Shumann */
if RES = '' then 'UNDELETE' FILENAME(RES)'/s'
else 'UNDELETE' FILENAME(RES)'\*.* /s'
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
call GETDISP
end
else do
call DISPFILE
end /* Do */
end /* Do */
when SP = 0 & CMD = 'S' then call M_SORT /* Tree */
when SP = 0 & CMD = 'T' then call M_TREE /* Tree */
when FCOUNT = 0 then do /* No files */
SP = 0; iterate
end /* Do */
/* If no files, dose not reach bellow. */
when SP = 0 & (CMD >= 1 & CMD <= 3 | CMD = 5) then do /* DISPMODE */
if DISPMODE <> CMD then do
call SETDISPM CMD
NR = 1; FST = 1
call DISPFILE; call DISPINFO 'X'
end
end /* Do */
when SP = 0 & CMD = ' ' then do /* SPACE : mark */
if substr(ATTR.INR,2,1) <> 'D' then do
if MASK.INR = ' ' then do
MASK.INR = '*'; MCOUNT = MCOUNT + 1
MBYTES = MBYTES + BYTES.INR
end /* Do */
else do
MASK.INR = ' '; MCOUNT = MCOUNT - 1
MBYTES = MBYTES - BYTES.INR
end /* Do */
end /* Do */
call DOWNARROW
end /* Do */
when SP = 1 & CMD = '47'X then do /* HOME */
SP = 0
if MCOUNT = 0 then do
MCOUNT = 0; MBYTES = 0 /* mark all */
do I = 1 to FCOUNT
if substr(ATTR.I,2,1) <> 'D' then do
MASK.I = '*'; MCOUNT = MCOUNT + 1
MBYTES = MBYTES + BYTES.I
end /* Do */
end /* do */
end
else do
MCOUNT = 0; MBYTES = 0 /* unmark all */
do I = 1 to FCOUNT
MASK.I = ' '
end /* do */
end /* Do */
call DISPFILE; call DISPINFO
end /* Do */
when SP = 1 & CMD = '4F'X then do /* END:mark invert */
SP = 0
MCOUNT = 0; MBYTES = 0
do I = 1 to FCOUNT
if substr(ATTR.I,2,1) <> 'D' then do
if MASK.I = ' ' then do
MASK.I = '*'; MCOUNT = MCOUNT + 1
MBYTES = MBYTES + BYTES.I
end
else do
MASK.I = ' '
end /* Do */
end /* Do */
end /* do */
call DISPFILE; call DISPINFO
end /* Do */
when SP = 0 & CMD = 'N' then do /* Rename */
push '';push 'Esc:中断'
push '新しい名前を指定してください.'
push 'ファイル/ディレクトリの名前変更'
push '変更元:'
push FNAME.INR; push FNAME.INR
call MSGANDGET 2; parse pull NEWNAME; KEY = result
if KEY <> '1B'X then do
XX = charout(,CCLR.24); /* Add by Shumann */
call CLS
'RENAME' FILENAME(FNAME.INR) FILENAME(NEWNAME)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
XX = charout(,CCLR.24); /* Add by Shumann */
push 'ディレクトリ読込中'
call CLS; call DISPFRAME; call RUNMSG; call GETFILES
NR = SAVNR; FST = SAVFST /* restore entry# */
end /* Do */
else do
XX = charout(,CCLR.24); /* Add by Shumann */
call CLS ; call DISPFRAME
end
call DISPFILE; call DISPINFO
end
when SP = 0 & ((CMD = '0A'X & EXTT = 1) | CMD = 'R') then do
push FILENAME(FNAME.INR) /* Execute */
call CMDEXEC; KEY = result; parse pull XCMD; XCMD = strip(XCMD)
if left(XCMD,1) = '"' then XCMD = '"'XCMD'"'
if KEY <> '1B'X then do
call syscurstate 'ON'
XX = charout(,'1B'X||'[0m'); call CLS
say XCMD
'@CMD /C' XCMD
say 'RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
call GETDISP
end
else call DISPFILE
end /* Do */
when SP = 0 & ((CMD = '0A'X & EXTT = 0) | CMD = 'E') then do
push '処理中'
call RUNMSG
'@'||EDITOR FILENAME(FNAME.INR) /* EDIT */
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
XX = charout(,CCLR.24); /* add by Shumann */
call CLS
call DISPFRAME
call DISPFILE
call DISPINFO
end
when SP = 2 then do /* ALT+ */ /* Altとの連動 */
SP = 0; D = c2x(CMD); A = ALTT.D /* ALT code -> Alpha. */
if A = 'F' then call M_FINDMARK /* Alt + F */
if A = 'C' then call M_CP /* Alt + C */
if A = 'D' then call M_D /* Alt + D */
if XX = A then leave
end /* do */
when SP = 0 & CMD = 'V' then call BROWSE FNAME.NR /* ファイルの閲覧 */
when SP = 0 & CMD = 'P' then call M_PACK /* ファイルの圧縮 */
when SP = 0 & CMD = 'U' then call M_UNPACK /* ファイルの解凍 */
when SP = 0 & CMD = 'C' then call M_COPY /* 複写 */
when SP = 0 & CMD = 'M' then call M_MOVE /* 移動 */
when SP = 0 & CMD = 'D' then call M_DEL /* 削除 */
when SP = 0 & CMD = 'F' then call M_FIND /* 検索 */
when SP = 0 & CMD = 'A' then call M_ATTRIB /* ファイル属性の変更 */
when SP = 0 & CMD = '0D'X then call M_CR /* CR */
otherwise do /* Undefined key */
call GOTOXY 1 2 /* Display undefined key (for debug) */
select
when SP = 1 then X = charout(,'1B'X||'[31m')
when SP = 2 then X = charout(,'1B'X||'[33m')
otherwise X = charout(,'1B'X||'[37m')
end
CC = c2x(CMD); XX = charout(,CC); SP = 0
end
end /* select */
end /* do */
/* End of main loop */
/* Ending code */
call GOTOXY ROW 1; X = charout(,'1b'x||'[0m')
if QUITRC = 'Y' then X = directory(ORIGINAL) /* restore original directory */
call syscurstate 'ON'
'@prompt $i[$p]' /* help on */
exit
SYNTAX: /* Syntax error trap */
say ' エラー発生 ! RC:' RC 'SIGL=' SIGL
say sourceline(SIGL)
say errortext(RC)
trace ?R; nop
exit
/****************************/
/* Subroutines */
/****************************/
SAYRC:
call GOTOXY 1 5; XX = charout(,RC)
return
M_QUIT: procedure expose ROW COL CCLR. CUL CH CUR CLL CLR CV
X = ((ROW - 3) % 2) + 5 ; Y = (COL-40) % 2
C1 = CCLR.12; C2 = CCLR.1; C3 = CCLR.1; SP = 0
call GOTOXY X-3 Y
XX = charout(,CCLR.18||CUL||copies(CH,39)||CUR)
call GOTOXY X-2 Y
XX = charout(,CCLR.18||CV||center('',39)||CV||CCLR.9||' ')
call GOTOXY X-1 Y
XX = charout(,CCLR.18||CV left('',6)CCLR.20 center('∬',2)CCLR.25||,
center('FD',2)CCLR.17||center('2',1)CCLR.1||center('eT',2)CCLR.17,
center('を終了しますか ?',16)||CCLR.18 center('',6)||CV||CCLR.9||' ')
call GOTOXY X Y
XX = charout(,CCLR.18||CV center('',38)||CV||CCLR.9||' ')
do forever
call GOTOXY X+1 Y
XX = charout(,CCLR.18||CV CCLR.1 center('',7) C1 center('Y:はい',6) CCLR.18 right('',1),
C2 center('N:いいえ',8)CCLR.18 center('',7)||CCLR.18 CV||CCLR.9||' ')
call GOTOXY X+2 Y
XX = charout(,CCLR.18||CV CCLR.1 center(' ',36)|| CCLR.18 CV||CCLR.9||' ')
call GOTOXY X+3 Y
XX = charout(,CCLR.18||CLL||copies(CH,39)||CLR||CCLR.9||' ')
call GOTOXY X+4 Y+1; XX = charout(,CCLR.9||center('',41))
parse upper value sysgetkey('NOECHO') with KK
select
when KK = 'E0'X then SP = 1
when SP = 0 & (KK = 'Y' | KK = 'N') then leave
when KK = '00'X then XX = sysgetkey('NOECHO') /* discard */
when SP = 1 & (KK= '4D'X | KK = '4B'X) then do /* RIGHT ARROW */
SP = 0; TEMP = C1; C1 = C2; C2 = TEMP
end /* Do */
when SP = 1 & (KK = '4B'X | KK = '4D'X) then do /* LEFT ARROW */
SP = 0; TEMP = C2; C2 = C1; C1 = TEMP
end /* Do */
when SP = 0 & KK = '0D'X then do
if C1 = CCLR.12 then KK = 'Y'
else KK = 'N'
leave
end /* Do */
when SP = 0 & KK = '1B'X then leave
otherwise nop
end
if KK = 'Y' | KK = 'N' | KK = '1B'X then leave
end
if KK <> 'Y' then KK = '1B'X
return KK
M_LOGDRIVE: procedure expose CURRENT ROW COL CUR CUL CV CH CLL CLR CCLR.
LL = length(MSG)
X = ((ROW - 3) % 2) + 5 ; Y = (COL - LL - 32) % 2
C1 = CCLR.1 ; C2 = CCLR.18 ; C3 = CCLR.9 ; C4 = CCLR.0
C5 = CCLR.17 ; C6 = CCLR.11
KK = left(CURRENT,1)
call GOTOXY X-2 Y
XX = charout(,CCLR.18||CUL||copies(CH,LL+6)||CCLR.20||right('∬',2)CCLR.17||right('ドライブの変更',14) CCLR.18||,
COPIES(CH,LL+6)||CUR)
call GOTOXY X-1 Y
XX = charout(,CCLR.18||CV center('',LL+30) CV||CCLR.9||' ')
call GOTOXY X Y
XX = charout(,CCLR.18||CV CCLR.1 right('ドライブ名を指定してください:',LL+26) CCLR.21||KK||,
CCLR.18||' '||CV||CCLR.9||' ')
call GOTOXY X+1 Y
XX = charout(,CCLR.18||CV CCLR.10||center('',LL+30)CCLR.18 CV||CCLR.9||' ')
call GOTOXY X+2 Y
XX = charout(,CCLR.18||CLL||copies(CH,LL+32)||CLR||CCLR.9||' ')
call GOTOXY X+3 Y+1; XX = charout(,CCLR.9||center('',LL+34))
do until KEY = '0D'X | KEY = '1B'X
D = KEY
call GOTOXY X Y+33; Z = charout(,CCLR.21)
parse upper value sysgetkey('NOECHO') with KEY
if 'A' <= KEY & KEY <= 'Z' then Z = charout(,KEY)
end /* do */
if KEY = '0D'X then do /* CR was pressed */
CURRENT = directory(D||':')
if CURRENT = '' then CURRENT = directory() /* Maybe failed */
if right(CURRENT,2) <> ':\' then CURRENT = CURRENT||'\'
end
return KEY
M_PACK:
push '';push 'Esc:中断'
push '圧縮ファイル名(およびドライブ/ディレクトリ)を指定してください.'
push 'ファイルの圧縮'
push '圧縮元:'
if MCOUNT = 0 then
push FNAME.INR
else
push '* でマークされたファイル'; push ''
call MSGANDGET 2
parse pull RES; RES = strip(RES)
if result <> '1B'X then do
XX = charout(,CCLR.24); /* add by Shumann */
call CLS
if MCOUNT = 0 then do
APACK FILENAME(RES) FILENAME(FNAME.INR)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
call GETDISP
end
else do
FILES = ''
do I = 1 to FCOUNT
II = FIDX.I
if MASK.II = '*' then FILES = FILES FILENAME(FNAME.II)
if words(FILES) > 4 then do
APACK FILENAME(RES) FILES
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(," 'Q'+ Enter キーで中断, Enter キーで継続.")
pull XX
if XX = 'Q' | XX = 'QUIT' then leave
end /* Do */
FILES = ''
end /* Do */
end /* do */
if FILES <> '' then APACK FILENAME(RES) FILES
call GETDISP
end /* Do */
end
else do
call DISPFILE; call DISPINFO
end
return
M_UNPACK:
push '';push ' Esc:中断 Ctrl+Enter:ツリー表示⇒実行 '
push '解凍先(ドライブ/ディレクトリ)を指定してください.'
push 'ファイルの解凍'
push '解凍元:'
if AUNPK.EXT <> '' then do
if EXT = 'ZOO' then do
RES = ''; result = 99
end /* Do */
else do
push FNAME.INR ; push ''
call MSGANDGET 2
parse pull RES; RES = strip(RES)
if result = '0A'x then do
call TREEMODE RES
RES = NEWDIR
end /* Do */
end
if result <> '1B'X then do
XX = charout(,CCLR.24); /* Add by Shumann */
call CLS
if RES = '' then AUNPK.EXT FILENAME(FNAME.INR)
else AUNPK.EXT FILENAME(FNAME.INR) FILENAME(RES)
if result <> '1B'X then /* add by Shumann */
AUNPK.EXT FILENAME(FNAME.INR) '-d' FILENAME(RES) /* add by Shumann */
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
call GETDISP
end
else do
call DISPFILE
end /* Do */
end /* Do */
return
M_COPY:
push '';push ' Esc:中断 Enter:ツリー表示⇒実行 '
push '複写先(ドライブ/ディレクトリ/ファイル)を指定してください.'
push 'ファイルの複写'
push '複写元:'
if MCOUNT = 0 then /* marked ? */
push FNAME.INR
else
push ' * でマークされたファイル' ; push ''
call MSGANDGET 2
parse pull RES; RES = strip(RES)
if (result <> '1B'X & RES = '') | result = '0A'x then do
call TREEMODE RES
RES = NEWDIR
end /* Do */
if result <> '1B'X then do /* Canceled ? */
XX = charout(,CCLR.24); /* add by Shumann */
call CLS
if MCOUNT = 0 then do /* Current file */
'COPY' FILENAME(FNAME.INR) FILENAME(RES)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
call GETDISP
end
else do /* Marked files */
do I = 1 to FCOUNT
II = FIDX.I
if MASK.II = '*' then do
'COPY' FILENAME(FNAME.II) FILENAME(RES)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX=charout(," 'Q'+ Enter キーで中断, Enter キーで継続.")
pull XX
if XX = 'Q' | XX = 'QUIT' then leave
end /* Do */
end /* Do */
end /* do */
call GETDISP
end /* Do */
end
else do
call DISPFILE; call DISPINFO
end
return
M_CP:
push '';push ' Esc:中断 Enter:ツリー表示⇒実行 '
push '複写先(ドライブ/ディレクトリ/ファイル)を指定してください.'
push 'ファイル/ディレクトリの複写'
push '複写元:'
if MCOUNT = 0 then /* marked ? */
push FNAME.INR
else
push ' * でマークされたファイル' ; push ''
call MSGANDGET 2
parse pull RES; RES = strip(RES)
if (result <> '1B'X & RES = '') | result = '0A'x then do
call TREEMODE RES
RES = NEWDIR
end /* Do */
if result <> '1B'X then do /* Canceled ? */
XX = charout(,CCLR.24); /* add by Shumann */
call CLS
if MCOUNT = 0 then do /* Current file */
'CP -R' FILENAME(FNAME.INR) FILENAME(RES)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
call GETDISP
end
else do /* Marked files */
do I = 1 to FCOUNT
II = FIDX.I
if MASK.II = '*' then do
'CP -R' FILENAME(FNAME.II) FILENAME(RES)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX=charout(," 'Q'+ Enter キーで中断, Enter キーで継続.")
pull XX
if XX = 'Q' | XX = 'QUIT' then leave
end /* Do */
end /* Do */
end /* do */
call GETDISP
end /* Do */
end
else do
call DISPFILE; call DISPINFO
end
return
M_MOVE:
push '';push ' Esc:中断 Enter:ツリー表示⇒実行 '
push '移動先(ドライブ/ディレクトリ/ファイル)を指定してください.'
push 'ファイル/ディレクトリの移動'
push '移動元:'
if MCOUNT = 0 then /* Marked ? */
push FNAME.INR
else
push '* でマークされたファイル'; push ''
call MSGANDGET 2
pull RES; RES = strip(RES)
if (result <> '1B'X & RES = '') | result = '0A'x then do
call TREEMODE RES
RES = NEWDIR
end /* Do */
if result<>'1B'X then do
if substr(RES,2,1)=':' & left(CURRENT,2)<>left(RES,2) then call MOVE2
else call MOVE1
end
else do
call DISPFILE; call DISPINFO
end
return
MOVE1: /* Move files */
push 'Y:はい' ;push 'N:いいえ'
push '移動元のファイルを削除しますか ?'; push '移動元:'
push '';push ' Esc:中断 Enter:ツリー表示⇒実行 '
push '移動先(ドライブ/ディレクトリ/ファイル)を指定してください.'
push 'ファイル/ディレクトリの移動'
push '移動元:'
XX = charout(,CCLR.24); /* Add by Shumann */
call CLS
if substr(RES,2,1) = ':' then RES = substr(RES,3) /* Remove drv */
if right(RES,1) = '\' then RES = left(RES,length(RES)-1) /* RMV right\ */
if length(RES) = 0 then RES = '\' /* Root */
if MCOUNT = 0 then do /* Current file */
'MOVE' FILENAME(FNAME.INR) FILENAME(RES)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
end
else do /* Marked files */
do I = 1 to FCOUNT
II = FIDX.I
if MASK.II = '*' then do
'MOVE' FILENAME(FNAME.II) FILENAME(RES)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX=charout(," 'Q'+ Enter キーで中断, Enter キーで継続.")
pull XX
if XX = 'Q' | XX = 'QUIT' then leave
end /* Do */
end /* Do */
end /* do */
end /* Do */
XX = charout(,CCLR.23); /* add by Shumann */
call GETDISP
return
MOVE2: /* Copy & delete */
push 'Y:はい'; push 'N:いいえ'
push '移動元のファイルを削除しますか ?'; push '移動元:'
push '';push ' Esc:中断 Enter:ツリー表示⇒実行 '
push '移動先(ドライブ/ディレクトリ/ファイル)を指定してください.'
push 'ファイル/ディレクトリの移動'
push '移動元:'
XX = charout(,CCLR.24); /* add by Shumann */
call CLS
if MCOUNT = 0 then do /* Current file */
'CP -R' FILENAME(FNAME.INR) FILENAME(RES)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
else do
call DISPFRAME; call DISPFILE; call DISPINFO
push FNAME.INR
call MSGANDYN
if result <> '1B'x then do
XX = charout(,CCLR.24); /* add by Shumann */
call CLS
'RM -R' FILENAME(FNAME.INR)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
end /* Do */
end /* Do */
XX = charout(,CCLR.24); /* Add by Shumann */
call GETDISP
end
else do /* Marked files */
COPIED. = ''
do I = 1 to FCOUNT
II = FIDX.I
if MASK.II = '*' then do
'CP' FILENAME(FNAME.II) FILENAME(RES)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(," 'Q'+ Enter キーで中断, Enter キーで継続.")
pull XX
if XX = 'Q' | XX = 'QUIT' then leave
COPIED.II = ''
end /* Do */
else COPIED.II = '*'
end /* Do */
end /* do */
call DISPFRAME; call DISPFILE; call DISPINFO
push FNAME.INR
call MSGANDYN
if result <> '1B'x then do
XX = charout(,CCLR.24); /* add by Shumann */
call CLS
do I = 1 to FCOUNT
II = FIDX.I
if COPIED.II = '*' then do
'RM -R' FILENAME(FNAME.II)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX=charout(," 'Q'+ Enter キーで中断, Enter キーで継続.")
pull XX
if XX = 'Q' | XX = 'QUIT' then leave
end /* Do */
end /* Do */
end /* do */
end /* Do */
XX = charout(,CCLR.24); /* Add by Shumann */
call GETDISP
end /* Do */
return
M_DEL:
push 'Y:する'; push 'N:しない'
push '通常ファイル/ディレクトリの削除'; push '削除元:'
push ''; push ''; push '' ;push ''; push ''
if MCOUNT = 0 then do /* Marked ? */
if substr(ATTR.INR,2,1) = 'D' then do
push FNAME.INR
call MSGANDYN
if result <> '1B'X then do
XX = charout(,CCLR.24); /* Add by Shumann */
call DELDIR ATTR.INR FNAME.INR
if result = 0 then call GETDISP
else do
XX = charout(,CCLR.24); /* Add by Shumann */
call CLS; call DISPFRAME; call DISPFILE; call DISPINFO
end /* Do */
end /* Do */
else do
call DISPFILE
end /* Do */
end /* Do */
else do
push FNAME.INR
call MSGANDYN
if result <> '1B'X then do /* Canceled ? */
XX = charout(,CCLR.24); /* Add by Shumann */
call CLS
'DEL' FILENAME(FNAME.INR)
if RC <> 0 then do
say 'エラー発生 ! RC =' RC
XX = charout(,'Enter キーで戻ります.'); pull XX
end /* Do */
call GETDISP
end
else do
call DISPFILE
end
end /* Do */
end /* Do */
else do
push '* でマークされたファイル'
call MSGANDYN 2
if result <> '1B'X then do /* Canceled ? */
XX = charout(,CCLR.24); /* Add by Shumann */
call CLS
do I = 1 to FCOUNT
II = FIDX.I
if MASK.II = '*' then do
'DEL' FILENAME(FNAME.II)
if RC <> 0 then do
say 'エラー発生 ! RC =' RC
XX=charout(,"'Q' キーで中断, Enter キーで継続.")
pull XX
if XX = 'Q' | XX = 'QUIT' then leave
end /* Do */
end /* Do */
end /* do */
call GETDISP
end
else do
XX = charout(,CCLR.24); /* Add by Shumann */
call CLS; call DISPFRAME; call DISPFILE; call DISPINFO
end
end /* Do */
return
DELDIR: procedure expose CURRENT
arg AT DIR /* Co-routine for M_DEL */
if substr(AT,3) <> '---' then SRHFLAG = 1
else SRHFLAG = 0
call CLS; XX=charout(,'Reading the directory structure.'||'0D'X||'0A'X)
call sysfiletree CURRENT||DIR||'\', 'DELBUFF', 'SBT'
do I = 1 to DELBUFF.0
if substr(subword(DELBUFF.I,3,1),3) <> '---' then do
SRHFLAG = 1
say ' ' subword(DELBUFF.I,3)
end /* Do */
end /* do */
if SRHFLAG = 1 then do
say ' '
say 'システム・ファイル、読取専用ファイル、'
say '隠しファイルのいずれかが見つかりました.'
say 'ディレクトリの削除を中止します.'
say 'Enter キーで FD2eT の画面に戻ります.'
pull .
end
else do
do I = DELBUFF.0 to 1 by -1
if subword(DELBUFF.I,3,1) = '-D---' then do
'RD' FILENAME(subword(DELBUFF.I,4))
if RC <> 0 then do
say 'エラー発生 ! RC =' RC
say 'ディレクトリの削除を中止します.'
say 'Enter キーで FD/2eT の画面に戻ります.'
pull .
return 0
end /* Do */
end /* Do */
else do
'DEL' FILENAME(subword(DELBUFF.I,4))
if RC <> 0 then do
say 'エラー発生 ! RC =' RC
say 'ディレクトリの削除を中止します.'
say 'Enter キーで FD2eT の画面に戻ります.'
pull .
return 0
end /* Do */
end /* Do */
end /* do */
'RD' FILENAME(CURRENT||DIR)
if RC <> 0 then do
say 'エラー発生 ! RC =' RC
say 'ディレクトリの削除を中止します.'
say 'Enter キーで FD2eT の画面に戻ります.'
pull .
end /* Do */
end /* Do */
return SRHFLAG
M_D:
push 'Y:する'; push 'N:しない'
push '属性変更ファイル/ディレクトリの削除'; push '削除元:'
push ''; push ''; push '' ;push ''; push ''
if MCOUNT = 0 then do /* Marked ? */
push FNAME.INR
call MSGANDYN
if result <> '1B'X then do /* Canceled ? */
XX = charout(,CCLR.24); /* Add by Shumann */
call CLS
'RM -R' FILENAME(FNAME.INR)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
call GETDISP
end
else do
call DISPFILE
end /* Do */
end /* Do */
else do
push '* でマークされたファイル'
call MSGANDYN 2
if result <> '1B'X then do /* Canceled ? */
XX = charout(,CCLR.24); /* Add by Shumann */
call CLS
do I = 1 to FCOUNT
II = FIDX.I
if MASK.II = '*' then do
'RM' FILENAME(FNAME.II)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX=charout(," 'Q'+ Enter キーで中断, Enter キーで継続.")
pull XX
if XX = 'Q' | XX = 'QUIT' then leave
end /* Do */
end /* Do */
end /* do */
call GETDISP
end
else do
call CLS; call DISPFRAME; call DISPFILE; call DISPINFO
end
end /* Do */
return
M_TREE:
call TREEMODE
if result <> '1B'X then do
LEN = length(NEWDIR)-1; if LEN < 3 then LEN = 3
CURRENT = directory(left(NEWDIR,LEN))
if right(CURRENT,2) <> ':\' then CURRENT = CURRENT||'\'
push 'ディレクトリ読込中'
call CLS; call DISPFRAME; call RUNMSG; call GETFILES
end /* Do */
call DISPFILE; call DISPINFO
return
M_CR:
if substr(ATTR.INR,2,1) = 'D' then do /* DIRECTORY */
push 'ディレクトリ読込中'
CURRENT = directory(FNAME.INR)||'\'
call RUNMSG; call GETFILES; call DISPFILE; call DISPINFO
end
else do
select
when ALIST.EXT <> '' then do /* Archiver list */
XX = charout(,CCLR.24); /* Add by Mr.Mistral */
call CLS
ALIST.EXT FILENAME(FNAME.INR)
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
XX = charout(,CCLR.24); /* Add by Shumann */
call CLS; call DISPFRAME; call DISPFILE; call DISPINFO
end /* Do */
when EXT = 'INF' then '@VIEW' FILENAME(FNAME.INR)
otherwise call BROWSE FNAME.INR
end /* select */
end
return
/*----------- 「%」 handling. add 8 lines by Mr.Mistarl -------------*/
FILENAME: procedure
parse arg PATHNAME
PATHNAME = strip(PATHNAME)
if POS(' ',PATHNAME) <> 0 then PATHNAME = '"'PATHNAME'"'
rexx2os2 = ''
do i=1 to length(pathname)
if substr(pathname,i,1) = '%'
then rexx2os2 = rexx2os2'%%'
else rexx2os2 = rexx2os2||substr(pathname,i,1)
end
/* return PATHNAME */
return rexx2os2
/*-------------------------------------------------------------------*/
M_FINDMARK: procedure expose MCOUNT MBYTES MASK. ATTR. CCLR. BYTES. CURRENT,
TYPE. FILE. FBYTES FCOUNT NR FNAME. TOTAL,
FREE VOLID FST ROW COL LFILE DISPMODE LL LBL,
FLM NX NY LNR LFL CUL CUR CV CH CLL CLR FIDX.
push 'ワイルドカード[*]も使えます. '
push ' Esc:中断 [L]→[Enter]:元の画面 '
push '検索名を指定してください, * でマークします.'
push 'ファイルの検索と*マーク'
push ' ' ;
push ' '; push ''
call MSGANDGET 2
pull RES; FN = strip(RES)
P = lastpos('.',FN)
if P <> 0 then do
EXT = substr(FN,P+1)
FN = left(FN,P-1)
end /* Do */
else EXT = ''
if result <> '1B'X & (FN <> '' | EXT <> '') then do
MCOUNT = 0; MBYTES = 0
do I = 1 to FCOUNT
II = FIDX.I
MASK.II = ' '
if substr(ATTR.II,2,1) <> 'D' then do
P = lastpos('.',FNAME.II)
if P = 0 then do
DFN = FNAME.II
DEXT = ''
end /* Do */
else do
DFN = left(FNAME.II,P-1)
DEXT = substr(FNAME.II,P+1)
end /* Do */
push FN; push DFN
if STRCMPX() = 0 then do
push EXT; push DEXT
if STRCMPX() = 0 then do
MASK.II = '*'; MCOUNT = MCOUNT + 1
MBYTES = MBYTES + BYTES.II
end
end
end /* Do */
end /* do */
end
call DISPFILE; call DISPINFO
return
M_FIND: procedure expose FST ROW COL FILE. LFILE TYPE. DISPMODE ATTR. LL,
LBL FLM CCLR. NX NY NR LNR FNAME. MASK. LFL,
FCOUNT CCLR. CURRENT FBYTES MBYTES MCOUNT NR,
TOTAL FREE VOLID BYTES. CUL CH CUR CV CLL CLR FIDX.
push 'ワイルドカード[*]も使えます. '
push ' Esc:中断 [L]→[Enter]:元の画面 '
push '検索名を指定してください,画面に表示します.'
push 'ファイル/ディレクトリの検索'
push ' ';
push ' '; push ''
call MSGANDGET 2
pull RES; FN = strip(RES)
P = lastpos('.',FN)
if P <> 0 then do
EXT = substr(FN,P+1)
FN = left(FN,P-1)
end /* Do */
else EXT = ''
if result <> '1B'X & (FN <> '' | EXT <> '') then do
TRK = 0; FBYTES = 0; MBYTES = 0; FST = 1; NR = 0; MCOUNT = 0
do I = 1 to FCOUNT
II = FIDX.I
parse upper var FNAME.II DFN '.' DEXT
P = lastpos('.',FNAME.II)
if P = 0 then do
DFN = FNAME.II
DEXT = ''
end /* Do */
else do
DFN = left(FNAME.II,P-1)
DEXT = substr(FNAME.II,P+1)
end /* Do */
push FN; push DFN
if STRCMPX() = 0 then do
push EXT; push DEXT
if STRCMPX() = 0 then do
TRK = TRK + 1
XFNAME.TRK = FNAME.II; XATTR.TRK = ATTR.II
XMASK.TRK = MASK.II; XFILE.TRK = FILE.II
XTYPE.TRK = TYPE.II; XBYTES.TRK = BYTES.II
FBYTES = FBYTES + XBYTES.TRK
if XMASK.TRK = '*' then do
MBYTES = MBYTES + XBYTES.TRK; MCOUNT = MCOUNT + 1
end /* Do */
end /* Do */
end /* Do */
end /* do */
do I = TRK+1 to FCOUNT
FIDX.I = ''
end /* do */
FILE.0 = TRK; FCOUNT = TRK; FIDX.0 = TRK
do I = 1 to TRK
FIDX.I = I
FNAME.I = XFNAME.I; ATTR.I = XATTR.I
MASK.I = XMASK.I; FILE.I = XFILE.I
TYPE.I = XTYPE.I; BYTES.I = XBYTES.I
end /* do */
end /* Do */
call DISPFILE; call DISPINFO
return
M_SORT:
FSORTKEY = 'DATE'; FSORTORD = 'R'
MSGSEL.0 = '6 10'
MSGSEL.1 = ' '
MSGSEL.2 = 'N:名 前'
MSGSEL.3 = 'T:タ イ プ'
MSGSEL.4 = 'D:時 間'
MSGSEL.5 = 'S:サ イ ズ'
MSGSEL.6 = 'O:初期化'
MSGSEL.7 = 'ファイルの並び替え'
call MSGANDSEL
if result <> 0 then do
parse upper value MSGSEL.result with . ':' FSORTKEY
if result <> 6 then do
call DISPFILE
MSGSEL.0 = '3 10'
MSGSEL.1 = ' '
MSGSEL.2 = ' N:昇 順'
MSGSEL.3 = ' R:降 順'
MSGSEL.7 = '順序の選択'
call MSGANDSEL
end /* Do */
if result <> 0 then do
push '処理中'
FSORTORD = substr(MSGSEL.result,2,1)
call DISPFILE
call RUNMSG
call FSORT
end /* Do */
end /* Do */
call DISPFILE; call DISPINFO
return
M_ATTRIB:
if ATTR.INR <> '-D---' then do
if left(ATTR.INR,1) = 'A' then XATTR.2 = 'ON'
else XATTR.2 = 'OFF'
do I = 3 to 5
if substr(ATTR.INR,I,1) = '-' then XATTR.I = 'OFF'
else XATTR.I = 'ON'
end /* do */
MSGSEL.0 = 6 15
MSGSEL.1 = ' '
SEL = 2
do forever
MSGSEL.2 = 'A:アーカイブ ' XATTR.2
MSGSEL.3 = 'H:隠しファイル' XATTR.3
MSGSEL.4 = 'R:読取専用' XATTR.4
MSGSEL.5 = 'S:システムファイル' XATTR.5
MSGSEL.6 = 'W: < 書込み > '
MSGSEL.7 = '属性の変更: 'FNAME.INR
call MSGANDSEL SEL
if result = 0 | result = 6 then leave
if XATTR.result = 'ON' then XATTR.result = 'OFF'
else XATTR.result = 'ON'
SEL = result
end /* do */
if result = 6 then do
ATOPT = '' /* build attrib option */
if XATTR.2 = 'ON' then ATOPT = ATOPT '+A'
else ATOPT = ATOPT '-A'
if XATTR.3 = 'ON' then ATOPT = ATOPT '+H'
else ATOPT = ATOPT '-H'
if XATTR.4 = 'ON' then ATOPT = ATOPT '+R'
else ATOPT = ATOPT '-R'
if XATTR.5 = 'ON' then ATOPT = ATOPT '+S'
else ATOPT = ATOPT '-S'
XX = charout(,CCLR.24); /* add by Shumann */
call CLS
'ATTRIB' ATOPT FILENAME(FNAME.INR)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
say ' Enter キーで FD2eT の画面に戻ります.'
pull .
end /* Do */
call GETDISP
end /* Do */
else call DISPFILE
end
return
/******************/
/* Other routines */
/******************/
FILENAME: procedure
parse arg PATHNAME
PATHNAME = strip(PATHNAME)
if POS(' ',PATHNAME) <> 0 then PATHNAME = '"'PATHNAME'"'
return PATHNAME
MSGANDSEL: procedure expose ROW COL CCLR. CUL CH CUR CLL CLR CV MSGSEL.
/* MSGSEL. array format : */
/* MSGSEL.0 = Count Length */
/* MSGSEL.1 = Message */
/* MSGSEL.n = KEY||':'||Item */
arg SEL .
parse value MSGSEL.0 with CNT LEN
if SEL > CNT | SEL < 2 then SEL = 2
X = ((ROW - 5 - CNT) % 2) + 5; Y = (COL - LEN - 36) % 2
C. = CCLR.1; C.SEL = CCLR.12; SP = 0
W = LEN+35; Q = (W - LEN) %2 - 2
call GOTOXY X-1 Y
XX = charout(,CCLR.18||CUL||copies(CH,LEN+35)||CUR)
call GOTOXY X Y
XX = charout(,CCLR.18||CV CCLR.20 left('∬',2)CCLR.17||left(MSGSEL.7,LEN+31)CCLR.18||CV||CCLR.9||' ')
do forever
do I = 1 to CNT
call GOTOXY X+I Y
XX=charout(,CCLR.18||CV center('',Q) C.I center(MSGSEL.I,LEN-1),
CCLR.18 center('',Q) CV||CCLR.9||' ')
end /* do */
call GOTOXY X+I Y
XX=charout(,CCLR.18||CV CCLR.10,
left(' Esc:中断 Enter:実行/選択',LEN+31) CCLR.18 CV||CCLR.9||' ')
call GOTOXY X+I+1 Y
XX = charout(,CCLR.18||CLL||copies(CH,LEN+35)||CLR||CCLR.9||' ')
call GOTOXY X+I+2 Y+1
XX = charout(,CCLR.9||copies(' ',LEN+37))
parse upper value sysgetkey('NOECHO') with KK
select
when KK = 'E0'X then SP = 1
when KK = '00'X then XX = sysgetkey('NOECHO') /* discard */
when SP = 1 & (KK = '48'X | KK = '4B'X) then do /* UP */
SP = 0
TEMP = C.2
do I = 2 to CNT - 1
J = I + 1
C.I = C.J
end /* do */
C.CNT = TEMP
end /* Do */
when SP = 1 & (KK = '50'X | KK = '4D'X) then do /* DOWN */
SP = 0
TEMP = C.CNT
do I = CNT to 3 by - 1
J = I - 1
C.I = C.J
end /* do */
C.2 = TEMP
end /* Do */
when SP = 0 & KK = '0D'X then do /* Enter */
do SEL = 2 to CNT
if C.1 <> C.SEL then leave
end /* do */
leave
end /* Do */
when SP = 0 & KK = '1B'X then do /* Esc */
SEL = 0; leave
end /* Do */
when SP = 0 then do /* Serach Alphabet key */
do I = 2 to CNT
parse value strip(MSGSEL.I) with KEY ':' .
if KEY = KK then do
return I
end /* Do */
end /* do */
end /* Do */
otherwise SP = 0
end
end
return SEL
STRCMPX: procedure
/* STRings CoMPare, X value includes wild card */
/* This is recursive routine. Recursive call will occure until no */
/* wild card. There are many return statements to reduce run time. */
/* Input: X, Y X and Y are strings. X may contain wild card */
/* Return: If X matches Y, return 0 */
pull Y; pull X
P = verify(X,'?*','Match')
if P = 0 then do /* No wild card, stop operator */
if X = Y then return 0 /* Match return */
else return -1 /* Unmatch return */
end /* Do */
if left(X,P-1) = left(Y,P-1) then do
if substr(X,P,1) = '?' then do /* Skip 1 charcter */
push substr(X,P+1); push substr(Y,P+1)
if STRCMPX() = 0 then return 0
else return -1
end /* Do */
else do /* Skip multi */
SUBX = substr(X,P+1)
if length(SUBX) = 0 then return 0 /* No more charcter */
do I = P to length(Y)
if length(SUBX) = 0 | left(SUBX,1) = substr(Y,I,1) then do
push substr(X,P+1); push substr(Y,I)
if STRCMPX()=0 then return 0
else return -1
end /* Do */
end /* do */
end /* Do */
end /* Do */
return -1
TREEMODE: procedure expose CURRENT DRV TREE. TOTAL FREE VOLID TREELS. ,
DTREE. PTREE. TATTR. IDX. CV CH CVL CLL,
DRV TREE. TREEFILE TST TNR ROW COL CUL CUR,
CLR CCLR. LTNR NXTREE. NEWDIR ALTT.
arg OPT .
SAVCURRENT = CURRENT
if OPT <> '' then do
if length(OPT) = 1 then OPT = OPT':'
CURRENT = directory(left(OPT,2))
if CURRENT = '' then CURRENT = SAVCURRENT
else if right(CURRENT,2) <> ':\' then CURRENT = CURRENT||'\'
end
call GETTREE; call DISPTREE; call DISPITREE
SP = 0; TMEM = ''
do forever
parse upper value sysgetkey('NOECHO') with CMD
select
when SP = 0 & CMD = 'E0'X then SP = 1 /* Extended key code */
when SP = 0 & CMD = '00'X then SP = 2 /* alt key code */
when SP = 1 & CMD = '48'X then do /* UP ARROW */
SP = 0; TNR = TNR - 1 /* Top */
if TNR < 1 then TNR = 1
if TNR < TST then do /* Need scroll ? */
TST = TNR
call DISPTREE; call DISPITREE 'X' /* Full update */
end /* Do */
else call DISPTREE 'X'; call DISPITREE 'X' /* Partial update */
end /* Do */
when SP = 1 & CMD = '50'X then do /* DOWN ARROW */
SP = 0; TNR = TNR + 1
if TNR > PTREE.DRV.0 then TNR = PTREE.DRV.0 /* Bottom */
if TNR > TST + ROW - 9 then do /* Need scroll */
TST = TNR - ROW + 9
call DISPTREE; call DISPITREE 'X' /* Full update */
end
else call DISPTREE 'X'; call DISPITREE 'X' /* Partial update */
end /* Do */
when SP = 1 & CMD = '51'X then do /* DOWN */
TST = TST + ROW - 8
if TST > PTREE.DRV.0 then TST = TST - ROW + 8
TNR = TST; call DISPTREE; call DISPITREE 'X'; SP = 0
end /* Do */
when SP = 1 & CMD = '49'X then do /* UP */
TST = TST - ROW + 9
if TST < 1 then TST = 1
TNR = TST; call DISPTREE; call DISPITREE 'X'; SP = 0
end /* Do */
when SP = 0 & CMD = '0D'X then do /* CR */
II = IDX.DRV.TNR
NEWDIR = directory(PTREE.DRV.II)
if NEWDIR <> '' then do /* exsist ? */
NXTREE.DRV.II = ''
if right(NEWDIR,2) <> ':\' then NEWDIR = NEWDIR||'\'
leave
end
else do
NXTREE.DRV.II = 'X' /* Not exsist */
call DISPTREE 'X'
end
end /* Do */
when SP = 0 & CMD = '1B'X then leave /* ESC */
when SP = 0 & CMD = 'Q' then leave /* QUIT */
when SP = 2 & CMD = '3B'X then do /* Help */
SP = 0
call SETHELP 'TREE'; call DISPHELP
call DISPTREE
end /* Do */
when SP = 0 & CMD = 'R' then do /* Read */
call GETTREE 'READ' /* Force read */
call DISPTREE; call DISPITREE
end
when SP = 0 & CMD = 'W' then do /* Write file */
TF = PTREE.DRV.1||TREEFILE /* File name */
X = stream(TF,'c','query exist')
if X <> '' then '@ERASE' X
X = lineout(TF,TREE.DRV.0)
do I = 1 to TREE.DRV.0
II = IDX.DRV.I
X = lineout(TF,TREE.DRV.II)
end /* do */
X = lineout(TF,) /* Close the file */
end /* Do */
when (SP = 1 & CMD = '47'X) | CMD = '\' then do /* HOME : top */
SP = 0; TST = 1; TNR = 1
call DISPTREE; call DISPITREE 'X'
end /* Do */
when SP = 1 & CMD = '4F'X then do /* END : bottom */
SP = 0; TNR = PTREE.DRV.0
TST = TNR - ROW + 9; if TST < 1 then TST = 1
call DISPTREE; call DISPITREE 'X'
end /* Do */
when SP = 0 & CMD = 'L' then do /* Logdrive */
call M_LOGDRIVE
X = directory(left(SAVCURRENT,2)) /* Back to SAV, for cancel */
if result = '0D'X then do /* CURRENT <> SAVCURRENT, maybe */
call GETTREE
call DISPTREE; call DISPITREE
end /* Do */
else call DISPTREE
end /* Do */
when SP = 0 & CMD = 'F' then do /* Find */
push '';push ' Esc:中断 [L]→[Enter]:元の画面 '
push '検索名を指定してください,カーソルを移動します.'
push 'ディレクトリの検索'
push ' ' ;
push ' ';
push TMEM
call MSGANDGET 2
parse upper pull DN; DN = strip(DN)
PP = lastpos('.',DN)
if PP <> 0 then do
DEXT = substr(DN,PP+1)
DN = left(DN,PP-1)
end /* Do */
else DEXT = ''
if result <> '1B'X & (DN <> '' | DEXT <> '') then do
TMEM = DN'.'DEXT /* Save serach argument */
do I = 1 to PTREE.DRV.0
II = I + TNR
if II > PTREE.DRV.0 then II = II - PTREE.DRV.0
INX = IDX.DRV.II; X = DTREE.DRV.II
PP = lastpos(CH,X)
parse upper value substr(X,PP+2) with TN
PP = lastpos('.',TN)
if PP <> 0 then do
TEXT = substr(TN,PP+1)
TN = left(TN,PP-1)
end /* Do */
else TEXT = ''
push DN; push TN
if STRCMPX() = 0 then do
push DEXT; push TEXT
if STRCMPX() = 0 then leave
end
end /* do */
TNR = II
if TNR < TST | (TST + ROW - 9) < TNR then do
TST = TNR - ((ROW - 9) % 2)
if TST < 1 then TST = 1
end
end
call DISPTREE; call DISPITREE 'X'
end /* Do */
when SP = 2 then do /* ALT+ */
SP = 0; C = c2x(CMD); A = ALTT.C /* ALT code -> Alpha. */
if A <> '' then do /* ALT+alphabet ? */
do I = 1 to PTREE.DRV.0
II = I + TNR
if II > PTREE.DRV.0 then II = II - PTREE.DRV.0
INX = IDX.DRV.II; X = lastpos(CH,DTREE.DRV.II)
parse upper value substr(DTREE.DRV.II,X+2,1) with XX
if XX = A then leave
end /* do */
TNR = II
if TNR < TST | (TST + ROW - 9) < TNR then do
TST = TNR - ((ROW - 9) % 2)
if TST < 1 then TST = 1
end
call DISPTREE; call DISPITREE 'X'
end /* Do */
end /* Do */
otherwise SP = 0
end
end
CURRENT = SAVCURRENT
LEN = length(CURRENT) - 1; if LEN < 3 then LEN = 3
X = directory(left(CURRENT,LEN))
if CMD = 'Q' then CMD = '1B'X
return CMD
DISPTREE: procedure expose DRV DTREE. PTREE. TATTR. IDX. TST TNR ROW COL,
CCLR. LTNR NXTREE. CH
/* Usage: call DISPTREE ... Full update */
/* call DISPTREE 'X' ... Partial update */
/* Partial update routine will call itself twice. */
/* They are 'call DISPTREE LTNR' and 'call DISPTREE */
/* TNR'. LTNR = Lagging TNR, TNR = Tree number */
arg OPT .
if OPT = '' then do
XSTART = 0; XEND = ROW - 9 /* Full update setup */
end
else do /* Partial update */
if datatype(OPT) = 'NUM' then do
XSTART = OPT - TST
XEND = OPT - TST
end /* Do */
else do
call DISPTREE LTNR /* Re-display previous TNR */
call DISPTREE TNR /* Re-display TNR */
return /* End of partial update front end */
end /* Do */
end /* Do */
PP = ((TNR-1)%(ROW-8))+1||'/'||format((PTREE.DRV.0-1)%(ROW-8)+0.5,,0)
call GOTOXY 2 8; XX = charout(,CCLR.1||left(PP,5)) /* Display page count */
do I = XSTART to XEND
P = TST + I; PI = IDX.DRV.P
if P > PTREE.DRV.0 then do
call GOTOXY I+8 2
X = charout(,copies(' ',COL-3))
end
else do
select
when substr(TATTR.DRV.PI,5)='S' & TNR <> P then AT = CCLR.3
when substr(TATTR.DRV.PI,3,1)='H' & TNR <> P then AT = CCLR.4
when substr(TATTR.DRV.PI,4,1)='R' & TNR <> P then AT = CCLR.5
when substr(TATTR.DRV.PI,5)='S' & TNR = P then AT = CCLR.13
when substr(TATTR.DRV.PI,3,1)='H' & TNR = P then AT = CCLR.14
when substr(TATTR.DRV.PI,4,1)='R' & TNR = P then AT = CCLR.15
otherwise do
if TNR <> P then AT = CCLR.24
else AT = CCLR.16
end
end /* select */
if NXTREE.DRV.PI = 'X' then do /* Not exsist */
if TNR <> P then AT = CCLR.17
else AT = CCLR.18
end /* Do */
call GOTOXY I+8 2
XX = charout(,CCLR.24);
LINE = DTREE.DRV.P; WI = lastpos(CH,LINE)
LINE = left(LINE,WI)||AT substr(LINE,WI+2) CCLR.24
TLEN = COL - 3 + length(AT||CCLR.24)
X = charout(,CCLR.1||left(LINE,TLEN))
end
end /* do */
LTNR = TNR
return
GETTREE: procedure expose CURRENT DTREE. PTREE. TATTR. IDX. CV CH CVL CLL,
DRV TREE. CCLR. TREEFILE TST TNR ROW COL CUL CUR,
CLR TREELS. NXTREE.
arg OPT /* if OPT was specified then force read */
DRV = left(CURRENT,1); RTREE = left(CURRENT,3)
/* Following if/then/do block is very BIG ! (almost entire routone) */
if datatype(DTREE.DRV.0)<>'NUM' | DRV='A' | DRV='B' | OPT<>'' then do
push '処理中'
TF = DRV||':\'||TREEFILE; RC = stream(TF,'c','query exists')
call RUNMSG
if RC = '' | OPT <> '' then do
call SysFileTree RTREE, 'T','DS'
/* TREELS.DRV = 'DIRECTORY' */
end
else do /* Reading form file */
RC = stream(TF,'c','close')
T.0 = linein(TF) - 1; X = linein(TF)
do I = 1 to T.0
T.I = linein(TF)
end /* do */
RC = stream(TF,'c','close')
TREELS.DRV = TF
end /* Do */
do I = 1 to T.0 /* Extract attribute and pathname */
IP = I + 1; TREE.DRV.IP = T.I; NXTREE.DRV.IP = ''
TATTR.DRV.IP = subword(T.I,4,1); PTREE.DRV.IP = subword(T.I,5)
end /* do */
PTREE.DRV.1 = RTREE; PTREE.DRV.0 = T.0 + 1
TATTR.DRV.1 = ''; TREE.DRV.1 = ''; TREE.DRV.0 = T.0 + 1
/* SORT routine (COM-SORT-11) */
do I = 1 to PTREE.DRV.0; IDX.DRV.I = I; end /* init the InDeX */
GAP = PTREE.DRV.0 /* initial GAP value */
do until (SW = 0) & (GAP = 1) /* SW=0 means no change occured */
GAP = trunc(GAP / 1.3) /* 1.3 : GAP shrink factor */
select /* Modify the GAP */
when GAP = 0 then GAP = 1
when GAP = 9 then GAP = 11
when GAP = 10 then GAP = 11
otherwise nop
end /* select */
SW = 0
TOP = PTREE.DRV.0 - GAP
do I = 2 to TOP
J = I + GAP
II = IDX.DRV.I; IJ = IDX.DRV.J /* Indexing */
if PTREE.DRV.II >> PTREE.DRV.IJ then do
IDX.DRV.I = IJ; IDX.DRV.J = II; SW = 1 /* Swap */
end /* Do */
end /* do */
end /* do */
/* End of sort routine */
SAVT = ''; SAVB. = 0
do I = PTREE.DRV.0 to 2 by -1 /* scaning from bottom */
II = IDX.DRV.I /* indexing */
XTPATH = PTREE.DRV.II
XTEMP. = ''; XI = 2
do forever /* convert '\' -> ' ' */
parse value XTPATH with '\' DNAME '\' REMAINS
if KJTEST(right(DNAME,1)) = 1 then do
DBCSPATH = DNAME||'\'||REMAINS; KJ = 0 /* DBCS process */
do NLS = 1 to length(DBCSPATH)
if KJ = 0 then do
NC = substr(DBCSPATH,NLS,1)
KJ = KJTEST(NC)
if NC = '\' then do
NLS = NLS - 1; leave
end /* Do */
end
else KJ = 0
end
DNAME = left(DBCSPATH,NLS)
REMAINS = substr(DBCSPATH,NLS+2)
end /* Do */ /* End of DBCS process */
XTEMP.XI = DNAME; XI = XI + 1
if REMAINS = '' then leave
XTPATH = '\'||REMAINS
end /* do */
XTEMP.1 = RTREE
WS = XI - 1
do J = WS to 1 by -1 /* scanning right to left */
if J = WS then DTREE.DRV.I = XTEMP.J /* Most right */
else do
if J = WS - 1 then do /* 2nd from right */
if XTEMP.J = SAVT.J then do /* Bottom ?*/
if XSAVT.J = 1 then do /* not bottom */
BRANCH = CVL||CH||CH /* prev is not blank */
end
else do
BRANCH = CLL||CH||CH; XSAVT.J = 1 /* prev is blank */
end /* Do */
end
else do
BRANCH = CLL||CH||CH; XSAVT.J = 1 /* bottom */
end
end /* Do */
else do /* 3rd or more left */
if XTEMP.J = SAVT.J then do /* bottom ?*/
if XSAVT.J = 0 then BRANCH = ' ' /* prev is blank */
else BRANCH = CV||' ' /* prev is not blank */
end /* Do */
else do
BRANCH = ' '; XSAVT.J = 0 /* bottom */
end /* Do */
end /* Do */
DTREE.DRV.I = BRANCH DTREE.DRV.I
end
end /* do */
do WS = 1 to XI; SAVT.WS = XTEMP.WS; end
DTREE.DRV.I = ' '||DTREE.DRV.I
end /* do */
DTREE.DRV.0 = PTREE.DRV.0; DTREE.DRV.1 = ' '||RTREE
end /* End of B I G if/then/do/end block */
/* Positioning */
do TNR = 1 to PTREE.DRV.0
II = IDX.DRV.TNR
if CURRENT = PTREE.DRV.II||'\' then leave
end /* do */
if TNR > PTREE.DRV.0 then TNR = 1
TST = TNR - ((ROW - 9) % 2); if TST < 1 then TST = 1
return
FSORT: procedure expose FNAME. FILE. BYTES. TYPE. FIDX. FSORTKEY FSORTORD
if FSORTKEY = '初期化' then do
do I = 1 to FIDX.0
FIDX.I = I
end /* do */
return /* Return with original oreder */
end /* Do */
do I = 0 to FIDX.0 /* Copy the previous index */
II = FIDX.I; CI.II = I /* to make stable sort. */
end /* do */
/* SORT routine (COM-SORT-11) */
GAP = FIDX.0 /* initial GAP value */
do until (SW = 0) & (GAP = 1) /* SW=0 means no change occured */
GAP = trunc(GAP / 1.3) /* 1.3 : GAP shrink factor */
select /* Modify the GAP */
when GAP = 0 then GAP = 1 /* Equivalent to bubble sort */
when GAP = 9 then GAP = 11
when GAP = 10 then GAP = 11
otherwise nop
end /* select */
SW = 0
TOP = FIDX.0 - GAP
do I = 1 to TOP
J = I + GAP
II = FIDX.I; IJ = FIDX.J /* Indexing */
select
when FSORTKEY = '名 前' then do
parse upper value FNAME.II with LEFT '.' .
parse upper value FNAME.IJ with RIGHT '.' .
end /* Do */
when FSORTKEY = 'タ イ プ' then do
parse upper value FNAME.II with . '.' LEFT .
parse upper value FNAME.IJ with . '.' RIGHT .
end /* Do */
when FSORTKEY = '時 間' then do
LEFT = subword(FILE.II,words(FILE.II)-2)
RIGHT = subword(FILE.IJ,words(FILE.IJ)-2)
end /* Do */
when FSORTKEY = 'サ イ ズ' then do
LEFT = BYTES.II
RIGHT = BYTES.IJ
end /* Do */
otherwise do
say ' エラー発生 !'; return
end
end /* select */
if FSORTORD = 'R' then do /* vvvvvvvvvvvvv 2nd sort key */
if LEFT < RIGHT | (LEFT = RIGHT & CI.II < CI.IJ) then do
FIDX.I = IJ; FIDX.J = II; SW = 1 /* Swap */
end /* Do */
end /* Do */
else do
if LEFT > RIGHT | (LEFT = RIGHT & CI.II > CI.IJ) then do
FIDX.I = IJ; FIDX.J = II; SW = 1 /* Swap */
end /* Do */
end /* Do */
end /* do */
end /* do */
/* End of sort routine */
return
MSGANDYN: procedure expose ROW COL CCLR. CUL CUR CV CH CLL CLR
parse pull MSG ; parse pull msg1; parse pull msg2 ;parse pull msg3
parse pull msg4; parse pull msg5 ;parse pull msg6 ;parse pull msg7
parse pull msg8; parse pull msg9
X = ((ROW - 3) % 2) + 8 ; Y = (COL - 50) % 2
C1 = CCLR.12; C2 = CCLR.1; SP = 0
call GOTOXY X-6 Y
XX = charout(,CCLR.18||CUL|| copies(ch,49)||CUR)
call GOTOXY X-5 Y
XX = charout(,CCLR.18||CV CCLR.20 left('∬',2)CCLR.17||left(msg7,45)||,
CCLR.18||CV||CCLR.9||' ')
call GOTOXY X-4 Y
XX = charout(,CCLR.18||CV center('',47) CV||CCLR.9||' ')
call GOTOXY X-3 Y
XX = charout(,CCLR.18||CV CCLR.1 left(msg6,7)CCLR.17 left(MSG,38) CCLR.18||CV||CCLR.9||' ')
call GOTOXY X-2 Y
XX = charout(,CCLR.18||CV copies(' ',47) CV||CCLR.9||' ')
do forever
call GOTOXY X-1 Y
XX = charout(,CCLR.18||CV CCLR.1 center('',12) C1 center(msg9,6) CCLR.18 right('',1),
C2 center(msg8,8) CCLR.18 center('',10) CCLR.18 CV||CCLR.9||' ')
call GOTOXY X Y
XX = charout(,CCLR.18||CV center('',47) CV||CCLR.9||' ')
call GOTOXY X+1 Y
XX = charout(,CCLR.18||CLL||copies(CH,49)||CLR||CCLR.9||' ')
call GOTOXY X+2 Y+1
XX = charout(,CCLR.9||center('',51))
parse upper value sysgetkey('NOECHO') with KK
select
when KK = 'E0'X then SP = 1
when SP = 0 & (KK = 'Y' | KK = 'N') then leave
when KK = '00'X then XX = sysgetkey('NOECHO') /* discard */
when SP = 1 & (KK= '4D'X | KK = '4B'X) then do /* RIGHT ARROW */
SP = 0; TEMP = C1; C1 = C2; C2 = TEMP
end /* Do */
when SP = 1 & (KK = '4B'X | KK = '4D'X) then do /* LEFT ARROW */
SP = 0; TEMP = C2; C2 = C1; C1 = TEMP
end /* Do */
when SP = 0 & KK = '0D'X then do
if C1 = CCLR.12 then KK = 'Y'
else KK = 'N'
leave
end /* Do */
when SP = 0 & KK = '1B'X then leave
otherwise nop
end
if KK = 'Y' | KK = 'N' | KK = '1B'X then leave
end
if KK <> 'Y' then KK = '1B'X
return KK
BROWSE:
arg FN ; push '処理中'
call RUNMSG
if VIEWER ='' then do
XX = charout(,CCLR.24); /* add by Shumann */
call CLS
'more <' FILENAME(FN)
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
else do
'@'VIEWER FILENAME(FN)
if RC <> 0 then do
say ' エラー発生 ! RC =' RC
XX = charout(,' Enter キーで FD2eT の画面に戻ります.'); pull XX
end /* Do */
end /* Do */
XX = charout(,CCLR.24); /* add by Shumann */
call CLS
call DISPFRAME
call DISPFILE
call DISPINFO
return
GETDISP:
push 'ディレクトリ読込中'
XX = charout(,CCLR.24); /* add by Shumann */
call CLS; call DISPFRAME; call RUNMSG; call GETFILES
if SAVDIR = CURRENT then do
if SAVFNAME = FNAME.SAVNR then do
NR = SAVNR; FST = SAVFST
end /* Do */
end /* Do */
call DISPFILE
call DISPINFO
return
RUNMSG: procedure expose CUL CH CUR CV CLL CLR CCLR. ROW COL
parse pull msg1
X = ((ROW - 3) % 2) + 5 ; Y = (COL - 35) % 2
KK = left(CURRENT,1)
call GOTOXY X-2 Y
XX = charout(,CCLR.18||CUL||copies(CH,35)||CUR)
call GOTOXY X-1 Y
XX = charout(,CCLR.18||CV||center('',34)CCLR.18 CV||CCLR.9||' ')
call GOTOXY X Y
XX = charout(,CCLR.18||CV||CCLR.17 center(msg1,34)CCLR.18||CV||CCLR.9||' ')
call GOTOXY X+1 Y
XX = charout(,CCLR.18||CV||CCLR.17 center('',34)CCLR.18||CV||CCLR.9||' ')
call GOTOXY X+2 Y
XX = charout(,CCLR.18||CLL||copies(CH,35)||CLR||CCLR.9||' ')
call GOTOXY X+3 Y+1; XX = charout(,CCLR.9||center('',37))
return
CMDEXEC: procedure expose HIST. CUL CH CUR CV CLL CLR CCLR. ROW COL
parse pull RES
HR = HIST.0 + 1; HIST.0 = HR; HIST.HR = RES
do forever
parse upper value right(strip(RES),5) with EXT '"'
parse value right(EXT,4) with '.' EXT
if EXT='CMD' | EXT='EXE' | EXT='COM' | EXT='BAT' then MODE = 1
else MODE = 0
push '';push ' Esc:中断 ↑:コマンド・ヒストリー '
push '実行するコマンドを指定してください.'
push 'プログラムの実行'
push ' '
push ' '; push RES
call MSGANDGET MODE; KEY = result
parse pull RES
select
when KEY = '48'X then do /* up arrow */
HR = HR - 1; if HR < 1 then HR = HIST.0
RES = HIST.HR
end /* Do */
when KEY = '50'X then do /* down arrow */
HR = HR + 1; if HR > HIST.0 then HR = 1
RES = HIST.HR
end /* Do */
otherwise leave
end
end
if KEY = '1B'X then RES = ''
HR = HIST.0; H = HR - 1
if (strip(HIST.H) \= strip(RES)) & (strip(RES) \= '') then HIST.HR = RES
else HIST.0 = HR - 1
push RES
return KEY
CMDEXECM: procedure expose HIST. CUL CH CUR CV CLL CLR CCLR. ROW COL
parse pull RES
HR = HIST.0 + 1; HIST.0 = HR; HIST.HR = RES
do forever
parse upper value right(strip(RES),5) with EXT '"'
parse value right(EXT,4) with '.' EXT
if EXT='CMD' | EXT='EXE' | EXT='COM' | EXT='BAT' then MODE = 1
else MODE = 0
push 'Enter:OS/2プロンプト画面 ';push ' Esc:中断 ↑:コマンド・ヒストリー '
push '実行するコマンドを指定してください.'
push 'コマンドの実行'
push ' '
push ' '; push RES
call MSGANDGET MODE; KEY = result
parse pull RES
select
when KEY = '48'X then do /* up arrow */
HR = HR - 1; if HR < 1 then HR = HIST.0
RES = HIST.HR
end /* Do */
when KEY = '50'X then do /* down arrow */
HR = HR + 1; if HR > HIST.0 then HR = 1
RES = HIST.HR
end /* Do */
otherwise leave
end
end
if KEY = '1B'X then RES = ''
HR = HIST.0; H = HR - 1
if (strip(HIST.H) \= strip(RES)) & (strip(RES) \= '') then HIST.HR = RES
else HIST.0 = HR - 1
push RES
return KEY
MSGANDGET: procedure expose CUL CH CUR CV CLL CLR CCLR. ROW COL HIST.
arg MODE .
/* MODE 1 : Puts cursor right end */
/* 2 : No history support (Up/Down arrow) */
parse pull TEMP; parse pull MSG; parse pull msg1; parse pull msg2
parse pull msg3; parse pull msg4; parse pull msg5
X = ((ROW - 3) % 2) + 6; L = length(msg2)
W = COL- 18; Z = W - L
call GOTOXY X-5 8
XX = charout(,CCLR.18||CUL||copies(CH,col-18)CUR)
call GOTOXY X-4 8
XX = charout(,CCLR.18||CV CCLR.20 left('∬',2)CCLR.17||left(msg2,col-23) CCLR.18||Cv||CCLR.9||' ')
call GOTOXY X-3 8
XX = charout(,CCLR.18||CV||CCLR.10 right(msg5,COL-19)CCLR.18||CV||CCLR.9||' ')
call GOTOXY X-2 8
XX = charout(,CCLR.18||CV CCLR.1 left(msg1,7)CCLR.17 left(MSG,COL-28)CCLR.18||CV||CCLR.9||' ')
call GOTOXY X-1 8
XX = charout(,CCLR.18||CV CCLR.1 left(msg3,COL-21) CCLR.18||CV||CCLR.9||' ')
call GOTOXY X 8
XX=charout(,CCLR.18||CV CCLR.11||left(TEMP,COL-20)||CCLR.18 CV||CCLR.9||' ')
call GOTOXY X+1 8
XX = charout(,CCLR.18||CV left(' ',COL-19)||CV||CCLR.9||' ')
call GOTOXY X+2 8
XX = charout(,CCLR.18||CV CCLR.10 center(msg4,COL-21) CCLR.18||CV||CCLR.9||' ')
call GOTOXY X+3 8
XX = charout(,CCLR.18||CLL||CH 'INS' copies(CH,COL-24)||CLR||CCLR.9||' ')
call GOTOXY X+4 9; XX = charout(,CCLR.9||copies(' ',COL-16))
call GOTOXY X 10; XX = charout(, CCLR.11)
if MODE = 1 then call GOTOXY X length(strip(TEMP,'T'))+11
SP = 0; INS = 1; KJ1 = ''; KJST = ''
KPOS = length(TEMP); KJ = 0
do I = 1 to KPOS
if KJ = 1 then do
KJST = KJST||'0'; KJ = 0
end /* Do */
else do
if KJTEST(substr(TEMP,I,1)) = 1 then KJ = 1
KJST = KJST||'1'
end /* Do */
end /* do */
RES = TEMP
parse value syscurpos() with XP YP
do forever
if YP < 9 then YP = 9
if YP > COL-12 then YP = COL-12
if substr(KJST,COL-8,1) = 0 then KJADJ = 1
else KJADJ = 0
RES = left(RES,COL-20-KJADJ); KJST = left(KJST,COL-20-KJADJ)
if substr(KJST,YP-8,1) = 0 then YP = YP - 1
call gotoxy X 10; say RES
call gotoxy XP+1 YP+1
call syscurstate 'ON'
KEY = sysgetkey('NOECHO')
call syscurstate 'OFF'
select
when KEY = 'E0'X then SP = 1 /* exp key */
when KEY = '00'X then SP = 2 /* alt key */
when SP = 0 & KJTEST(KEY) = 1 then do /* Kanji */
SP = 3; KJ1 = KEY
end
when SP = 0 & KEY = '0A'X then leave /* LF */
when SP = 0 & KEY = '0D'X then leave /* CR */
when SP = 0 & KEY = '1B'X then leave /* ESC */
when SP = 1 & KEY = '48'X & MODE<>2 then leave /* up arrow */
when SP = 1 & KEY = '50'X & MODE<>2 then leave /* down arrow */
when SP = 0 & KEY = '09'X then do /* TAB */
YP = YP + 8
end /* Do */
when SP = 2 & KEY = '0F'X then do /* Shift + TAB */
SP = 0; YP = YP - 8; if YP < 4 then YP = 4
end /* Do */
when SP = 1 & KEY = '52'X then do /* INS */
INS = \INS; SP = 0
call GOTOXY X+3 10; XX = charout(,CCLR.18)
if INS = 1 then XX = charout(,' INS ')
else XX = charout(,copies(CH,5))
call GOTOXY XP+1 YP+1; XX = charout(,CCLR.11)
end /* Do */
when SP = 1 & KEY = '53'X then do /* DEL */
if substr(KJST,YP-7,1) = 0 then KJADJ = 1
else KJADJ = 0
RES = left(RES,YP-9)||substr(RES,YP-7+KJADJ)
KJST = left(KJST,YP-9)||substr(KJST,YP-7+KJADJ)
/* call GOTOXY XP+1 YP+1 */
SP = 0
end /* Do */
when SP = 1 & KEY = '4D'X then do /* Right arrow */
YP = YP + 1; SP = 0
if substr(KJST,YP-8,1) = 0 then YP = YP + 1
end
when SP = 1 & KEY = '4B'X then do /* Left arrow */
SP = 0; YP = YP - 1; if YP < 4 then YP = 4
end
when (SP = 2 & KEY = '9B'X) | (SP = 1 & KEY = '73'X) then do
YP = 9; SP = 0
end
when (SP = 2 & KEY = '9D'X) | (SP = 1 & KEY = '74'X) then do
YP = length(strip(RES,T))+5
SP = 0
end
when SP = 0 & KEY = '08'X then do /* BS */
YPKJ = YP - 10
if YPKJ >= 0 then do
if substr(KJST,YPKJ+1,1) = 0 then KJADJ = 1
else KJADJ = 0
RES = left(RES,YPKJ-KJADJ)||substr(RES,YPKJ+2)
KJST = left(KJST,YPKJ-KJADJ)||substr(KJST,YPKJ+2)
YP = YP - KJADJ - 1
end
end /* Do */
when SP = 1 then SP = 0
when SP = 2 then SP = 0
when SP = 0 | SP = 3 then do
if SP = 3 then do
KJSP = 1; KJSTAT = '10'
end
else do
KJSP = 0; KJSTAT = '1'
end
SP = 0; YPKJ = YP - 9
if INS = 1 then do
RES = left(RES,YPKJ)||KJ1||KEY||substr(RES,YP-8)
KJST = left(KJST,YPKJ)||KJSTAT||substr(KJST,YP-8)
end
else do
if substr(KJST,YP-7,1) = 0 then KJADJ = 1
else KJADJ = 0
RES = left(RES,YPKJ)||KJ1||KEY||substr(RES,YP-7+KJADJ)
KJST = left(KJST,YPKJ)||KJSTAT||substr(KJST,YP-7+KJADJ)
end /* Do */
YP = YP + 1 + KJSP; KJ1 = ''
end /* Do */
otherwise
end /* select */
end /* do */
push RES
return KEY
DOWNARROW:
SP = 0; NR = NR + 1; if NR > FCOUNT then NR = FST
if NR >= (NX * NY + FST) then NR = FST
call DISPFILE 'X'; call DISPINFO 'X'
return
SETDISPM:
arg DISPMODE
select
when DISPMODE = 1 then LFILE = 45
when DISPMODE = 2 then LFILE = 38
when DISPMODE = 3 then LFILE = 22
when DISPMODE = 5 then LFILE = 13
otherwise call SETDISP 5
end /* select */
return
TITLEDISP: procedure expose CUL CH CUR CV CLL CLR CCLR. ROW COL
X = ((ROW - 3) % 2) + 4 ; Y = (COL - 45) % 2
KK = left(CURRENT,1)
call GOTOXY X-4 Y
XX = charout(,CCLR.18||CUL||copies(CH,44)||CUR)
call GOTOXY X-3 Y
XX = charout(,CCLR.18||CV||CCLR.10||center('FD/2 version 0.77 exTension',43)CCLR.18 CV||CCLR.9||' ')
call GOTOXY X-2 Y
XX = charout(,CCLR.18||CV||center('',43)CCLR.18 CV||CCLR.9||' ')
call GOTOXY X-1 Y
XX = charout(,CCLR.18||CV||left('',16)CCLR.20||center('∬',2)CCLR.25||center('FD',2)CCLR.17||center('2',1)CCLR.1||center('eT',2)CCLR.25||center(' O.6',4)CCLR.18||center('',16) CV||CCLR.9||' ')
call GOTOXY X Y
XX = charout(,CCLR.18||CV||CCLR.17 center('',43)CCLR.18||CV||CCLR.9||' ')
call GOTOXY X+1 Y
XX = charout(,CCLR.18||CV||CCLR.17 center('(C)Copyright 1994,1995 by Shumann',43)CCLR.18||CV||CCLR.9||' ')
call GOTOXY X+2 Y
XX = charout(,CCLR.18||CV||CCLR.1 center('',43)CCLR.18||CV||CCLR.9||' ')
call GOTOXY X+3 Y
XX = charout(,CCLR.18||CV||CCLR.10 center('Original version',43)CCLR.18||CV||CCLR.9||' ')
call GOTOXY X+4 Y
XX = charout(,CCLR.18||CV||CCLR.10 center('(C)Copyright 1992,1993 by Nob_Kozawa',43)CCLR.18||CV||CCLR.9||' ')
call GOTOXY X+5 Y
XX = charout(,CCLR.18||CLL||copies(CH,44)||CLR||CCLR.9||' ')
call GOTOXY X+6 Y+1; XX = charout(,CCLR.9||center('',46))
return
GETFILES: procedure expose CURRENT FILE. FBYTES FCOUNT TYPE. ATTR. FST NR,
FNAME. ROW COL CCLR. BYTES. MBYTES MCOUNT MASK. ,
FLM CUL CH CUR CV CLL CLR TOTAL FREE VOLID FIDX.
parse value sysdriveinfo(left(CURRENT,2)) with . FREE TOTAL VOLID
FILE. = ''; TYPE. = ''; FBYTES = 0; FST = 1; NR = 1; MBYTES = 0; MCOUNT = 0
FNAME. = ''; MASK. = ' '; FLM = 0; BYTES. = 0; FIDX. = ''
call SysFileTree CURRENT,'FILE','BT' /* get directory information */
FCOUNT = FILE.0; FIDX.0 = FCOUNT
do I=1 to FCOUNT
FIDX.I = I /* Initialize file index */
parse value FILE.I with DT BYTE ATR FL
ATTR.I = ATR; BYTES.I = BYTE
FBYTES = FBYTES + BYTE /* Total Bytes */
DT = overlay(':',overlay(' ',DT,9),12) /* Date and Time */
FNAME.I = filespec('name',FL) /* extract filename */
if KJTEST(left(right(filespec('path',FL),2),1)) = 1 then do
KJ = 0 /* DBCS process */
do NLS = 1 to length(FL)
if KJ = 0 then do
NC = substr(FL,NLS,1)
if KJTEST(NC) = 1 then KJ=1
else if NC = '\' then DBCSPOS = NLS
end /* Do */
else KJ = 0
end /* do */
FNAME.I = substr(FL,DBCSPOS+1)
end /* Do */ /* End of DBCS process */
LL = length(FNAME.I); if LL > FLM then FLM = LL /* Fname length MAX */
if substr(ATR,2,1) = 'D' then BYTE = '< DIR >'
X = SysGetEA(FNAME.I,'.type','TYPEINFO') /* Get Ext Attrib */
parse var TYPEINFO 11 TYPE.I
if TYPE.I <> '' then EA = '+'
else EA = ' '
FILE.I = right(BYTE,10)||EA||' '||DT||' '||ATR
end
if FLM < 12 then FLM = 12 /* Minmum FLM is 12 (8.3) */
return
DISPINFO: procedure expose COL CCLR. CURRENT TYPE. FILE. FBYTES MBYTES,
FCOUNT MCOUNT NR FNAME. TOTAL FREE VOLID FIDX.
arg OPT
INR = FIDX.NR
FI = 82 - COL; if FI < 1 then FI = 1 ; ver = SysOS2Ver() ;info = SysDriveMap()
TY = COL - 43; if TY < 0 then TY = 0 ; Y = (COL-9) % 4
call GOTOXY 4 12 /* File info: */
XX = charout(,CCLR.1||left(left(FNAME.INR,Y+1)||substr(FILE.INR,FI),COL-30))
call GOTOXY 4 COL-19; XX = charout(,CCLR.24||right(MCOUNT,4)) /* XX Marked */
call GOTOXY 4 COL-11; XX = charout(,CCLR.24||right(MBYTES,10)) /* Marked XX */
call GOTOXY 5 16 ; XX = charout(,CCLR.24||left(TYPE.INR,TY)) /* Ext Attr: XX */
call GOTOXY 6 COL-9 ; XX = charout(,CCLR.1||right('J'ver,8)) /* OS/2 version */
call GOTOXY 6 19 ; XX = charout(,CCLR.1||left(info,Y+18)) /* drive info */
if OPT = '' then do
CU = COL - 26; if CU < 0 then CU = 0
call GOTOXY 3 7 ; XX = charout(,CCLR.25||left(CURRENT,CU)) /* Path=XX */
call GOTOXY 3 COL-19; XX = charout(,CCLR.1||right(FCOUNT,4)) /* XX Files */
call GOTOXY 3 COL-11; XX = charout(,CCLR.1||right(FBYTES,10)) /* Files XX */
Y = (COL - 9) % 4 ;YY = (COL-9) % 7
call GOTOXY 2 18; XX = charout(,CCLR.1||right(TOTAL,Y-6)) /* Total:XX */
call GOTOXY 2 18+Y; XX = charout(,CCLR.24||right(TOTAL-FREE,Y-6)) /* Used:XX */
call GOTOXY 2 18+Y+Y; XX = charout(,CCLR.1||right(FREE,Y-6)) /* Free:XX */
call GOTOXY 2 17+Y*3; XX = charout(,CCLR.20||left(strip(VOLID),YY+1)) /* VOL:XX */
end
return
DISPITREE: procedure expose COL CCLR. CURRENT PTREE. TATTR. DRV TREE. ,
TNR IDX. TOTAL FREE VOLID TREELS.
arg OPT
II = IDX.DRV.TNR
FI = COL - 34; if FI < 0 then FI = 0 ; TY = COL - 43; if TY < 0 then TY = 0
call GOTOXY 4 13
XX = charout(CCLR.24||left(left(TREE.DRV.II,16)||' '||,
subword(TREE.DRV.II,4,1),FI))
CU = COL - 22; if CU < 0 then CU = 0
call GOTOXY 3 7; XX = charout(,CCLR.25||left(PTREE.DRV.II,CU)) /* Path=XX */
if OPT = '' then do
call GOTOXY 4 COL-19; XX = charout(,CCLR.24||copies(' ',4)) /* XX Marked */
call GOTOXY 4 COL-11; XX = charout(,CCLR.24||copies(' ',10)) /* Marked XX */
call GOTOXY 5 16
XX = charout(,CCLR.25||left(' >> ディレクトリ・ツリー表示 <<',TY))
call GOTOXY 3 COL-19; XX = charout(,CCLR.1||copies(' ',4)) /* XX Files */
call GOTOXY 3 COL-11; XX = charout(,CCLR.1||copies(' ',10)) /* Files XX */
Y = (COL - 9) % 4 ;YY = (COL-9) % 5
call GOTOXY 2 18; XX = charout(,CCLR.1||right(TOTAL,Y-6)) /* Total:XX */
call GOTOXY 2 18+Y; XX = charout(,CCLR.24||right(TOTAL-FREE,Y-6)) /* Used:XX */
call GOTOXY 2 18+Y+Y; XX = charout(,CCLR.1||right(FREE,Y-6)) /* Free:XX */
call GOTOXY 2 17+Y*3; XX = charout(,CCLR.20||left(strip(VOLID),YY-3)) /* VOL:XX */
end
return
DISPFRAME: procedure expose ROW COL CCLR.0 CCLR.1 CCLR.2 CCLR.20, /* Draw frame */
CCLR.17 CCLR.25 cclr.24 VER CUL CH CUR CV CVL CVR CLL CLR TITLE
call SysCurState 'OFF'
YY = COL - 3
call GOTOXY 1 1
Z=charout(,CCLR.1||CUL||copies(CH,YY)||CUR||'0D'X||'0A'X) /**/
Z=charout(,CV||CCLR.1||copies(' ',YY)||CCLR.1||CV||'0D'X||'0A'X) /*ドライブ */
Z=charout(,CV||CCLR.1||copies(' ',YY)||CCLR.1||CV||'0D'X||'0A'X) /*パス = */
Z=charout(,CV||CCLR.1||copies(' ',YY)||CCLR.1||CV||'0D'X||'0A'X) /*ファイル情報 */
Z=charout(,CV||CCLR.1||copies(' ',YY)||CCLR.1||CV||'0D'X||'0A'X) /*拡張属性情報*/
Z=charout(,CV||CCLR.1||copies(' ',YY)||CCLR.1||CV||'0D'X||'0A'X) /*拡張属性情報*/
Z=charout(,CVL||copies(CH,YY)||CCLR.1||CVR||'0D'X||'0A'X) /**/
do I = 9 to ROW /* File area */
Z=charout(,CV||CCLR.24||copies(' ',YY)||CCLR.1||CV||'0D'X||'0A'X) /* File area */
end /* do */ /* File area */
X = charout(,CLL||copies(CH,YY)||CCLR.1||CLR) /**/
call GOTOXY 2 2; Z = charout(,CCLR.2||' ページ')
call GOTOXY 2 13; Z = charout(,'トータル:')
Y = (COL - 9) % 4
call GOTOXY 2 13+Y; Z = charout(,'使用:')
call GOTOXY 2 13+Y+Y; Z = charout(,'空き:')
call GOTOXY 2 13+Y*3; Z = charout(,'VOL:')
call GOTOXY 3 2; Z = charout(,' パス=')
call GOTOXY 4 2; Z = charout(,' ファイル情報:')
call GOTOXY 5 2; Z = charout(,' 拡張属性情報:')
call GOTOXY 3 COL-15; Z = charout(,'ファイル')
call GOTOXY 4 COL-15; Z = charout(,'*マーク')
call GOTOXY 6 COL-27; Z = charout(,' OS/2バージョン情報:')
call GOTOXY 6 2; Z = charout(,' 接続ドライブ情報:')
TL = length(TITLE); Y = (YY- 3 - TL)%2; if Y < 1 then Y = 1
if TL > YY then TL = YY
call GOTOXY ROW Y*2; Z = charout(,CCLR.20||left('∬',2)CCLR.25||left('FD',2)||,
CCLR.17||left('2',1)CCLR.1||left('eT',2)CCLR.25 left(ver,4))
call GOTOXY ROW 5; X = charout(,CCLR.17||left(' F1:ヘルプ',8))
return
SETCOLOR: procedure expose CCLR.
arg NUM
do I = 1 to NUM
parse upper value CCLR.I with X
XX = '1B'X||'[0;'; P = 2
if left(CCLR.I,1) = 'H' then XX = XX||'1;'
else P = 1
call GETC substr(X,P,2); XX = XX||result
call GETC substr(X,P+2,2)
if result <> '' then result = ';'||(result + 10)
XX = XX||result||'m'
CCLR.I = XX
end /* do */
return
GETC: procedure
arg CC
select
when CC = 'BK' then VL = 30
when CC = 'RE' then VL = 31
when CC = 'GR' then VL = 32
when CC = 'YE' then VL = 33
when CC = 'BL' then VL = 34
when CC = 'PU' then VL = 35
when CC = 'TU' then VL = 36
when CC = 'WH' then VL = 37
when CC = 'RV' then VL = 7
otherwise VL = ''
end /* select */
return VL
SETPARM:
/* ALT code table */
ALTT. = '' ; ALTT.1E='A'; ALTT.30='B'; ALTT.2E='C'; ALTT.20='D'
ALTT.12='E'; ALTT.21='F'; ALTT.22='G'; ALTT.23='H'; ALTT.17='I'
ALTT.24='J'; ALTT.25='K'; ALTT.26='L'; ALTT.32='M'; ALTT.31='N'
ALTT.18='O'; ALTT.19='P'; ALTT.10='Q'; ALTT.13='R'; ALTT.1F='S'
ALTT.14='T'; ALTT.16='U'; ALTT.2F='V'; ALTT.11='W'; ALTT.2D='X'
ALTT.15='Y'; ALTT.2C='Z'
/* Code page test. Thanks Altair☆ san */
options exmode
if filespec('N','表') = '表' then do
CUL = '1'x; CH = '6'x; CUR ='2'X /* */
CV = '5'x /* */
CVL = '19'x; CVR = '17'x /* */
CLL = '3'X; CLR = '4'X /* */
end /* Do */
else do
CUL = 'C9'x; CH = 'CD'x; CUR ='BB'x /* ノ ヘ サ */
CV = 'BA'x /* コ */
CVL = 'CC'x; CVR = 'B9'x /* フ ケ */
CLL = 'C8'x; CLR = 'BC'x /* ネ シ */
end /* Do */
options noexmode
return
DISPFILE: procedure expose FST ROW COL FILE. LFILE TYPE. DISPMODE ATTR. LL,
LBL FLM CCLR. NX NY NR LNR FNAME. MASK. LFL,
FCOUNT FIDX. INR
arg OPT
if NR < 1 then NR = 1 /* NR adjust in case of no-files */
INR = FIDX.NR
if OPT <> '' then do /* partial update */
call DISPFILEX NR
call DISPFILEX LNR
end /* Do */
else do /* full update */
NY = (COL-3) % LFILE; if NY < 1 then NY = 1
LL = (COL-3) % NY; NYR = (COL-3) // LL; NX = ROW - 8
LBL = format(NYR,,0); TBL = NYR - LBL
PP = (NR%(NX*NY))+1||'/'||(format((FCOUNT-1)/(NX*NY)+0.5,,0))
Q = (COL - 9) % 4
call GOTOXY 2 8; Z = charout(,CCLR.1||left(PP,5)) /* ディスプレイ・ページ表示 */
if FLM < (COL-3)/2 then LFL = FLM + 1
else LFL = format((COL - 3) / 2,,0)
XLINE. = CCLR.24||COPIES(' ',LBL)
do YY = 0 to NY - 1
do XX = 0 to ROW - 9
I = FST + XX + YY * (ROW - 8)
call BLDLINE I
XLINE.XX = XLINE.XX||result
end
end /* do */
do X = 8 to ROW - 1
call GOTOXY X 2
XX = X - 8
Z = charout(,XLINE.XX||copies(' ',TBL))
end
end /* do */
LNR = NR /* Lagging NR */
return
DISPFILEX: procedure expose INR DISPMODE LFILE FILE. TYPE. COL LL LBL,
ATTR. ROW FST CCLR. FNAME. MASK. LFL FIDX.
arg I .
XX = (I - FST) // (ROW - 8); YY = (I - FST) % (ROW - 8)
call GOTOXY 8+XX LBL+(LL*YY)+2
call BLDLINE I
Z = charout(,result)
return
BLDLINE: procedure expose LL MASK. FILE. FNAME. TYPE. COL LFL LFILE ATTR. ,
INR CCLR. DISPMODE FCOUNT FST FIDX.
arg J .
I = FIDX.J
if I <= FCOUNT & '' <> I then do
if DISPMODE = 1 then LINE = left(MASK.I||FNAME.I,LFL) FILE.I TYPE.I
else LINE = left(MASK.I||left(FNAME.I,12)||substr(FILE.I,3), LFILE)
if length(LINE) > COL - 3 then LINE = left(LINE,COL-3)
select
when substr(ATTR.I,5)='S' & INR <> I then AT = CCLR.3
when substr(ATTR.I,3,1)='H' & INR <> I then AT = CCLR.4
when substr(ATTR.I,4,1)='R' & INR <> I then AT = CCLR.5
when substr(ATTR.I,2,1)='D' & INR <> I then AT = CCLR.6
when substr(ATTR.I,5)='S' & INR = I then AT = CCLR.13
when substr(ATTR.I,3,1)='H' & INR = I then AT = CCLR.14
when substr(ATTR.I,4,1)='R' & INR = I then AT = CCLR.15
when substr(ATTR.I,2,1)='D' & INR = I then AT = CCLR.16
otherwise do
if INR <> I then AT = CCLR.7
else AT = CCLR.19
end
end /* select */
end /* Do */
else do
LINE = ''; AT = CCLR.24
end /* Do */
return AT||left(LINE,LL)
CLS: procedure /* Clear screen */
X = charout(,'1B'x||'[2J')
return
GOTOXY: procedure /* Move the cursor */
arg X Y
/* Z = syscurpos(X, Y) */
Z = charout(,'1B'X||'['||X||';'||Y||'H')
return
KJTEST: procedure
arg CHR
if (('80'X<=CHR)&(CHR<='9F'X))|(('E0'X<=CHR)&(CHR<='FF'X)) then KJ = 1
else KJ = 0
return KJ
SETHELP: procedure expose HLP.
arg OPT
HLP. = ''; I = 0
if OPT = 'TREE' then do
I=I+1; HLP.I = ' 【コマンド一覧】'
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' ↑,↓ : 上,下へスクロール PgUp,PgDn: 前ページ,次ページへ移動'
I=I+1; HLP.I = ' \,Home : ツリー冒頭のディレクトリへ移動 End : ツリー末尾のディレクトリへ移動'
I=I+1; HLP.I = ' Enter : ディレクトリに入る F : ディレクトリの検索'
I=I+1; HLP.I = ' L : ドライブの変更 Q,EsC : ディレクトリ・ツリー表示の終了'
I=I+1; HLP.I = ' R : カレント・ディレクトリの表示 W : ディレクトリ情報のファイル化'
I=I+1; HLP.I = ' →「FD2eTREE.DAT」'
I=I+1; HLP.I = ' Alt+アルファベット : 指定したアルファベットで始まるディレクトリへカーソルを移動'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' 【コマンド解説】'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' ↑,↓ /↑矢印キーで上に,↓矢印キーで下にスクロールします.'
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' PgUp,PgDn /PgUpで前ページへ,PgDnで次ページへカーソルを移動します.'
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' \,Home /ツリー冒頭のディレクトリへカーソルを移動します.'
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' End /ツリー末尾のディレクトリへカーソルを移動します. '
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' Enter /カーソルを合わせたディレクトリの中に入ります.'
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' F /指定したディレクトリにカーソルを移動します.'
I=I+1; HLP.I = ' ■検索したいディレクトリ名を入力すると,検索した後,カーソルを指'
I=I+1; HLP.I = ' 定したディレクトリへ移動します.'
I=I+1; HLP.I = ' ■元の画面に戻るには,[L]キーを押した後に[Enter]キーを押し'
I=I+1; HLP.I = ' てください. '
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' L /ドライブを変更します.'
I=I+1; HLP.I = ' ■移動したいドライブ名を入力した後,[ENTER]キーを押すと,指'
I=I+1; HLP.I = ' 定したドライブに移動します.'
I=I+1; HLP.I = ' ■[Esc]キーで中断します.'
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' Q ,Esc /ツリー表示を終了します. '
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' R /カレントディレクトリにカーソルを移動します.'
I=I+1; HLP.I = ' ■ツリー表示を実行するときに入っていたディレクトリ(カレント・ディレク'
I=I+1; HLP.I = ' トリ)へカーソルを移動します.'
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' W /ディレクトリの情報をファイル化します. '
I=I+1; HLP.I = ' ■画面に表示されたドライブに「FD2eTREE.DAT」という名前'
I=I+1; HLP.I = ' で出力します. '
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' Alt+アルファベット /指定したアルファベットで始まるディレクトリへカーソルを移動します.'
I=I+1; HLP.I = ' ■[Alt]キーを押しながら,任意のアルファベット・キーを押すと,そのア'
I=I+1; HLP.I = ' ルファベットで始まるディレクトリへ,カーソルが移動します.'
HLP.0 = I 38 /* Count and length */
end /* Do */
else do
I=I+1; HLP.I = ' 【コマンド一覧】'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' 1 : ファイルの1列表示 2 : ファイルの2列表示'
I=I+1; HLP.I = ' 3 : ファイルの3列表示 5 : ファイルの5列表示'
I=I+1; HLP.I = ' A : ファイル属性の変更 E : ファイルの編集'
I=I+1; HLP.I = ' C : ファイルの複写 Alt+C: ファイル/ディレクトリの複写'
I=I+1; HLP.I = ' D : 通常ファイル/ディレクトリの削除 Alt+D: 属性変更ファイル/ディレクトリの削除'
I=I+1; HLP.I = ' F : ファイル/ディレクトリの検索 Alt+F: ファイルの検索/ファイルのマーク'
I=I+1; HLP.I = ' H : 削除ファイル解除画面呼出し K : ディレクトリの作成'
I=I+1; HLP.I = ' L : ドライブの変更 M : ファイル/ディレクトリの移動'
I=I+1; HLP.I = ' N : ファイル/ディレクトリの名前変更 P : ファイルの圧縮(LHA互換)'
I=I+1; HLP.I = ' Q : FD2eTの強制終了 R : プログラムの実行'
I=I+1; HLP.I = ' S : ファイルの並び替え T : ディレクトリ・ツリーの表示'
I=I+1; HLP.I = ' U : 圧縮ファイルの解凍 V : ファイルの閲覧/編集'
I=I+1; HLP.I = ' X : コマンドの実行'
I=I+1; HLP.I = ' \ : ルート・ディレクトリに戻る BS : 親ディレクトリに戻る'
I=I+1; HLP.I = ' Esc : FD2eTの終了 Space: カレント・ファイルのマーク/マーク解除'
I=I+1; HLP.I = ' Home : 全ファイルのマーク/マーク解除 End : 全ファイルのマーク/マーク解除'
I=I+1; HLP.I = ' < : 画面先頭ファイルへ > : 画面末尾ファイルへ'
I=I+1; HLP.I = ' PgUp : 前画面,先頭ファイルへ PgDn : 次画面,先頭ファイルへ'
I=I+1; HLP.I = ' Enter: エディタの起動 /INFファイル閲覧 /圧縮ファイル内容の一覧 /ディレクトリに入る'
I=I+1; HLP.I = ' Ctrl+Enter: ファイルの閲覧/編集/プログラムの実行 '
I=I+1; HLP.I = ''
I=I+1; HLP.I = ''
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' 【コマンド解説】'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' 1 /ファイルを1列表示にします.'
I=I+1; HLP.I = ' ■左から,ファイル名,容量,日付,時間,ファイルの属性が表示されます.'
I=I+1; HLP.I = ' ■ディレクトリの場合は,容量のかわりに < DIR > が表示されます.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' 2 /ファイルを2列表示にします.'
I=I+1; HLP.I = ' ■左から,ファイル名,容量,日付,時間が表示されます. '
I=I+1; HLP.I = ' ■ディレクトリの場合は,容量のかわりに < DIR > が表示されます.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' 3 /ファイルを3列表示にします. '
I=I+1; HLP.I = ' ■左から,ファイル名,容量が表示されます. '
I=I+1; HLP.I = ' ■ディレクトリの場合は,容量のかわりに < DIR > が表示されます.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' 5 /ファイルを5列表示にします'
I=I+1; HLP.I = ' ■ファイルとディレクトリ名だけが表示されます.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' A /ファイルの属性を変更します.'
I=I+1; HLP.I = ' ■目的のアルファベット・キーを直接押すか,カーソルを移動させて,目的の選'
I=I+1; HLP.I = ' 択肢で[Enter]キーを押すことで実行されます.'
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' C /ファイルを複写します.'
I=I+1; HLP.I = ' ■複写先に同一ファイルがある場合は,確認を求めず上書きします.'
I=I+1; HLP.I = ' ■また,ドライブを指定して,[Ctrl]キー+[Enter]キーを押すと,指定 '
I=I+1; HLP.I = ' したドライブのディレクトリ・ツリー表示になりますので,そこで複写先 '
I=I+1; HLP.I = ' にカーソルを移動し,あるいは[F]キーで直接複写先のディレクトリを呼'
I=I+1; HLP.I = ' び出し,[Enter]キーを押すと複写されます.'
I=I+1; HLP.I = ''
I=I+1; HLP.I = ' Alt+C /ファイルとディレクトリ・ツリーを複写します.'
I=I+1; HLP.I = ' ■コマンドの呼出しは,[Alt]キーを押しながら,[C]キーを押します.'
I=I+1; HLP.I = ' ■別ドライブへのディレクトリ・ツリーごとの複写もできます.'
I=I+1; HLP.I = ' ■複写先に同一ファイルや同一ディレクトリがある場合は,確認を求めず'
I=I+1; HLP.I = ' 上書きします.'
I=I+1; HLP.I = ' ■同一ディレクトリを指定した場合は,複写は行ないません.'
I=I+1; HLP.I = ' ■また,宛先に存在しないディレクトリを指定した場合は,あらたに'
I=I+1; HLP.I = ' ディレクトリを作成します. '
I=I+1; HLP.I = ' ■他のディレクトリへ複写する場合,ツリー表示からの実行もできます.'
I=I+1; HLP.I = ' カーソルを複写先となるドライブやディレクトリに移動させて,[Enter]'
I=I+1; HLP.I = ' キーを押すだけです. '
I=I+1; HLP.I = ' ■また,ドライブを指定して,[Ctrl]キー+[Enter]キーを押すと,指定 '
I=I+1; HLP.I = ' したドライブのディレクトリ・ツリー表示になりますので,そこで複写先 '
I=I+1; HLP.I = ' にカーソルを移動し,あるいは[F]キーで直接複写先のディレクトリを呼'
I=I+1; HLP.I = ' び出し,[Enter]キーを押すと複写されます.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' D /通常ファイルとディレクトリ・ツリーを削除します.'
I=I+1; HLP.I = ' ■削除は[Y]キーを押すか,[Y:する]にカーソルの合った状態で,[Ent'
I=I+1; HLP.I = ' er]キーを押します.'
I=I+1; HLP.I = ' ■削除を中止する場合は,[N]キーを押すか,[N:しない]にカーソルの'
I=I+1; HLP.I = ' 合った状態で,[Enter]キーを押します.'
I=I+1; HLP.I = ' ■ファイル属性の変更されたものは,削除できません.'
I=I+1; HLP.I = ' ■ディレクトリの中に属性の変更されたファイルが含まれていると削除'
I=I+1; HLP.I = ' 削除できません.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' Alt+D /属性変更ファイルとディレクトリ・ツリーを削除します.'
I=I+1; HLP.I = ' ■コマンドの呼出しは,[Alt]キーを押しながら,[D]キーを押します.'
I=I+1; HLP.I = ' ■ファイル属性が変更されたものでも削除できます.'
I=I+1; HLP.I = ' ■ディレクトリの中に属性の変更されたファイルが含まれていても削除'
I=I+1; HLP.I = ' 削除できます.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' E /ファイルの閲覧と編集をします.'
I=I+1; HLP.I = ' ■エディタには、PM用の拡張エディタ(EPM.EXE)が指定されています.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' F /ファイルを検索します. '
I=I+1; HLP.I = ' ■検索したいファイル名を入力すると,カレント・ディレクトリのみを検索し,'
I=I+1; HLP.I = ' 目的のファイルだけを画面上に表表示します.'
I=I+1; HLP.I = ' ■また,ワイルド・カーソも使用できますので,「*.BAT」といった具'
I=I+1; HLP.I = ' 合に指定すると,拡張子に[BAT]をもつファイルのみが画面上に'
I=I+1; HLP.I = ' 表示されます. '
I=I+1; HLP.I = ' ■元の画面に戻るには,[L]キーを押した後に[Enter]キーを押して'
I=I+1; HLP.I = ' ください.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' Alt+F /ファイルを検索し, * マークをつけます. '
I=I+1; HLP.I = ' ■コマンドの呼出しは,[Alt]キーを押しながら,[F]キーを押します.'
I=I+1; HLP.I = ' ■検索したいファイル名を入力し,[Enter]キーを押すと,カレント・ディレ'
I=I+1; HLP.I = ' クトリの中が検索され,目的のファイルに * 印がつきます.'
I=I+1; HLP.I = ' ■また,ワイルド・カードも使用できますので,[*.BAT]といった具合'
I=I+1; HLP.I = ' 合に指定すると,拡張子に[BAT]をもつファイルに, * マークがつき'
I=I+1; HLP.I = ' ます.'
I=I+1; HLP.I = ' ■元の画面に戻るには,[L]キーを押したあとに[Enter]キーを押し'
I=I+1; HLP.I = ' てください. '
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' H /削除したファイルの削除解除の画面を呼び出します.'
I=I+1; HLP.I = ' ■なにも入力せずに,[Enter]キーを押すと,現在のカレント・ディレクト'
I=I+1; HLP.I = ' リの全体(すべてのサブ・ディレクトリを含む)が解除対象になりま'
I=I+1; HLP.I = ' す.'
I=I+1; HLP.I = ' ■また,入力ボックスで指定することによって,他のドライブ,ディレ'
I=I+1; HLP.I = ' クトリを個別に解除設定できます. '
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' K /あらたにディレクトリを作成します.'
I=I+1; HLP.I = ' ■入力ボックスにディレクトリ名をタイプすることで作成されます.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' L /ドライブを変更します.'
I=I+1; HLP.I = ' ■移動したいドライブ名を入力したあと,[ENTER]キーを押すと,指'
I=I+1; HLP.I = ' 定したドライブに移動します.'
I=I+1; HLP.I = ' ■[Enter]キーで中断します. '
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' M /ファイルとディレクトリ・ツリーを移動します.'
I=I+1; HLP.I = ' ■他のドライブへの移動に限って,元のファイルを削除するかどうか'
I=I+1; HLP.I = ' 問い合わせてきます.'
I=I+1; HLP.I = ' ■また,同一ディレクトリ内での移動で,移動先のディレクトリを指定し'
I=I+1; HLP.I = ' た場合,元のディレクトリの名前が変更されるだけとなります.'
I=I+1; HLP.I = ' ■ツリー表示からの実行もできます.カーソルを移動先となるドライブ'
I=I+1; HLP.I = ' のディレクトリに移動させて,[Enter]キーを押すだけです. '
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' N /ファイル名を変更します.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' P /ファイルを圧縮します. '
I=I+1; HLP.I = ' ■圧縮先のパス名(ドライブ,ディレクトリ)と圧縮ファイル名を指定した後,'
I=I+1; HLP.I = ' [Enter]キーを押すと実行されます.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' Q /「FD2eT」を強制終了します. '
I=I+1; HLP.I = ' ■終了後は,「FD2eT」を起動した時のディレクトリ(カレント・ディレクトリ)'
I=I+1; HLP.I = ' に戻ります.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' R /プログラムを実行します. '
I=I+1; HLP.I = ' ■[X]キーとほぼ同じ機能ですが,こちらはファイルにカーソルを合わせ'
I=I+1; HLP.I = ' ると,そのファイル名を取り込みますので,ファイル名の先頭に実行'
I=I+1; HLP.I = ' 形式のファイル(*.EXE,*.CMD,*.COM,*.BAT)名を入力し,[ENTER]'
I=I+1; HLP.I = ' キーを押せば実行されます.'
I=I+1; HLP.I = ' ■逆に,実行ファイルにカーソルを合わせて,[ENTER]キーを押すと,実行'
I=I+1; HLP.I = ' ファイルの半角後にカーソルの移動した状態が表示されます.そこか'
I=I+1; HLP.I = ' ら続けてファイル名を入力し,[ENTER]キーを押すと実行されます. '
I=I+1; HLP.I = ' ■また,それまで実行したコマンドの内容を一時的に記憶します.'
I=I+1; HLP.I = ' ただし,いったん「FD2eT」を終了すると,記憶した内容は初'
I=I+1; HLP.I = ' 期化されて,すべて消えてしまいます.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' S /ファイル,ディレクトリを並び替えます. '
I=I+1; HLP.I = ' ■ファイル名・ファイルのタイプ(拡張子)・時間(タイムスタンプ)・ファイルのサイ'
I=I+1; HLP.I = ' ズ(バイト数)別に並べ替えることができます.'
I=I+1; HLP.I = ' ■さらに並べ替えの順序を昇順,降順から選択できます.'
I=I+1; HLP.I = ' 実行の仕方は,目的の並べ替えの種類や順序を直接アルファベッ'
I=I+1; HLP.I = ' トを押すことで選択実行するか,カーソルを移動させ選択した位'
I=I+1; HLP.I = ' 置で[Enter]キーを押すことで実行するかのどちらかです.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' T /ディレクトリ・ツリーを表示します.'
I=I+1; HLP.I = ' ■ツリー表示状態で[W]キーを押すと,ディレクトリ情報が「FD2eTREE.D'
I=I+1; HLP.I = ' AT」という名前で,画面に表示されたドライブに出力されます.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' U /圧縮ファイルを解凍します. '
I=1+I; HLP.I = ' ■「OS/2」用の[UNZIP.EXE]は解凍先として,あらたにディレクト'
I=I+1; HLP.I = ' リを作りますが,[LH32.EXE]は作りません.ですから[LH32.E'
I=I+1; HLP.I = ' XE]の場合は,解凍先として既存のディレクトリを指定してくだい.'
I=I+1; HLP.I = ' ■解凍時に,なにも指定しない場合は,現在いるカレント・ディレクトリ'
I=I+1; HLP.I = ' にファイルを解凍します.'
I=I+1; HLP.I = ' ■また,ツリー表示からの実行もできます.[Ctrl]キー+[Enter]キー'
I=I+1; HLP.I = ' でツリー表示になりので,目的のディレクトリにカーソルを移動するか,'
I=I+1; HLP.I = ' [F]キーで検索するかして,そこで[Enter]キーを押してくださ'
I=I+1; HLP.I = ' い.そのディレクトリに解凍されます. '
I=I+1; HLP.I = ' ■ただし,[LH32.EXE]はツリー表示からの実行に対応していませ'
I=I+1; HLP.I = ' ん.他の[LHA]互換アーカイバでは,実行できるものもあります.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' V /ファイルの閲覧と編集をします. '
I=I+1; HLP.I = ' ■「FD2eT」では,全画面&窓用のエディタ「T2.EXE」を初期設定'
I=I+1; HLP.I = ' しています. DOS用のエディタに慣れた方には重宝と思います.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' X /コマンドを実行します. '
I=I+1; HLP.I = ' ■実行形式のファイル(*.EXE,*.CMD,*.COM,*.BAT)を入力し,[Ent'
I=I+1; HLP.I = ' er]キーを押すと起動します.'
I=I+1; HLP.I = ' ■なにも入力せずに[Enter]キーを押すと,「OS/2」のプロンプト画'
I=I+1; HLP.I = ' 面に切り変わります. '
I=I+1; HLP.I = ' ■「FD2eT」の画面に戻るには[EXIT]と入力してください. '
I=I+1; HLP.I = ' ■また,それまで実行したコマンド内容を一時的に記憶します.'
I=I+1; HLP.I = ' ただし,いったん「FD2eT」を終了すると,記憶した内容は'
I=I+1; HLP.I = ' 初期化されて,すべて消えてしまいます.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' \ /ルート・ディレクトリに戻ります. '
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' BS /親ディレクトリに戻ります. '
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' Space /カレント・ファイルのマークとマーク解除をします.'
I=I+1; HLP.I = ' ■キーを押すとカーソルの合ったファイルに * 印がつき,もう一度押す'
I=I+1; HLP.I = ' と消えます. '
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' Home /全ファイルのマークとマーク解除をします.'
I=I+1; HLP.I = ' ■キーを押すとすべてのファイルに * 印がつき,もう一度押すと消'
I=I+1; HLP.I = ' えます.すでに * 印がついている場合は, * 印を消します.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' End /全ファイルのマークとマーク解除をします.'
I=I+1; HLP.I = ' ■キーを押すとすべてのファイルに * 印がつき,もう一度押すと消'
I=I+1; HLP.I = ' えます.すでに * 印がついている場合は, * 印を消します.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' Esc /「FD2eT」を終了します(中断もできます).'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' Enter■ファイルにカーソルを合わせてキーを押すと,全画面用エディタ「T2.EXE」'
I=I+1; HLP.I = ' を起動します. '
I=I+1; HLP.I = ' ■INF(*.INF)ファイルの場合は,PM用のINF専用エディタを起動しま'
I=I+1; HLP.I = ' すので,PM画面でファイルを閲覧できます.'
I=I+1; HLP.I = ' ■ディレクトリにカーソルがある場合,そのディレクトリの中に入ります. '
I=I+1; HLP.I = ' ■また,圧縮ファイルの場合(*.ZIP、*.LZH、*.ZOO)は, 圧縮内容'
I=I+1; HLP.I = ' (圧縮されたファイルの一覧)が表示されます. '
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' Ctrl+Enter /ファイルの閲覧と編集をします.'
I=I+1; HLP.I = ' ■エディタにはPM用の拡張エディタ(EPM.EXE)が指定されています.'
I=I+1; HLP.I = ' ■また,カーソルを合わせた実行形式のファイル(*.EXE,*.CMD,*.COM,'
I=I+1; HLP.I = ' *.BAT)を起動します.'
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' < /カーソルを画面先頭のファイルに移動します. '
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' > /カーソルを画面末尾のファイルに移動します. '
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' PageUp /カーソルを全ファイルの先頭に移動します. '
I=I+1; HLP.I = ' '
I=I+1; HLP.I = ' PageDown /カーソルを次ページの先頭に移動します. '
I=I+1; HLP.I = ' ■ただし,一画面に全ファイルが表示されている場合は,先頭ファイル'
I=I+1; HLP.I = ' に移動します.'
HLP.0 = I 37 /* Count and length */
end
return
DISPHELP: procedure expose COL ROW CCLR. CUL CUR CH CV CLL CLR HLP.
parse value HLP.0 with CC LL
YPOS =( COL - 71) % 2
if YPOS < 0 then do; YPOS = 2; LL = COL - 5; end
P = 1; LL1 = (LL - 35) % 2; LL2 = LL - LL1 + 16
do until P > CC
call GOTOXY 8 YPOS
Z = charout(,CCLR.18||CUL||copies(CH,LL1)||CCLR.20||left('∬',2)||CCLR.17'コマンドの説明' CCLR.18||,
copies(CH,LL2-40) CCLR.25||right('●入力の仕方 *ドライブ→X:\ *ディレクトリ→X',37)CCLR.18 copies(CH,1)||CUR)
call GOTOXY 9 YPOS
Z = charout(,CCLR.18||CV||center('',LL2+18)||CV||CCLR.9||' ')
do XX = 10 to (ROW - 4)
call GOTOXY XX YPOS
X = charout(,CCLR.18||CV||CCLR.1||left(HLP.P,LL+32)||CCLR.18 CV||CCLR.9||' ')
P = P + 1
end /* do */
call GOTOXY ROW-3 YPOS
X = charout(,CCLR.18||CV||center(' ',LL+33)||CV||CCLR.9||' ')
call GOTOXY ROW-2 YPOS
X = charout(,CCLR.18||CLL||copies(CH,LL1)CCLR.10 left('Esc:中断',8) CCLR.18||copies(CH,LL+22)||CLR||CCLR.9||' ')
if P < (CC + 1) then do
call GOTOXY ROW-2 YPOS+LL+24; X = charout(,CCLR.10 'キー:次頁 ')
end /* Do */
call GOTOXY ROW-1 YPOS+1; X = charout(,CCLR.9||copies(' ',LL+35))
KEY = sysgetkey('NOECHO')
if KEY = '00'X | KEY = 'E0'X then KEY = sysgetkey('NOECHO')
if KEY = '1B'X then leave
end
return