OV_FILE_SERVICE
注:&<a href="bif_rules.htm"&>組み込み関数の規則&</a&>
基本的なファイル・サービスおよびディレクトリ・サービスを実行します。
Windows パス名はすべて環境変数置換をサポートします。
この組み込み関数の実行プラットフォームにより、使用されるファイル名およびパスは大文字と小文字が区別されます。例えば、IBM i の IFS の以下の特定の領域では大文字と小文字が区別されます。
- このディレクトリの /QOpenSys と files/folders では大文字と小文字が区別されます。
- 大文字と小文字が区別されるユーザー定義ファイル システム (UDFS) が IFS ディレクトリにマウントされた場合、この位置にあるファイルとフォルダは大文字と小文字が区別されます。
この OV 組み込み関数は LANSA のプログラムで利用されているものなので、修正しないようにしてください。この組み込み関数をカスタマイズする場合は、このコピーを作成し、それを修正するようにしてください。 この組み込み関数は、アプリケーションへの影響を考慮した上でユーザーの責任において使用してください。明示的か暗黙的かを問わず、いかなる保証もありません。「免責事項 」全文を参照してください。
ファンクション番号: |
992 |
必要なDLL: |
U_BIF992.DLL |
各製品の対応
Visual LANSA for Windows |
使用可 |
|
Visual LANSA for Linux |
使用可 |
|
LANSA/AD |
使用可 |
RDMLXのみで使用可能 |
引数
番号 |
タイプ |
必須/任意 |
説明 |
最小長 |
最大長 |
最小小数桁数 |
最大小数桁数 |
1 |
A |
必須 |
必要なファイル・サービスのタイプ。以下のいずれかの値として渡します。 |
1 |
256 |
|
|
2 |
A |
任意 |
要求サービス引数1 |
1 |
256 |
|
|
3 |
A |
任意 |
要求サービス引数2 |
1 |
256 |
|
|
戻り値
番号 |
タイプ |
必須/任意 |
説明 |
最小長 |
最大長 |
最小小数桁数 |
最大小数桁数 |
1 |
A |
任意 |
基本戻りコード OK = 正常に完了した ER = エラーが発生した |
2 |
2 |
|
|
2 |
N |
任意 |
拡張エラー・コード。これは、(使用可能な場合は)エラー処理またはエラー・レポートに役立つオペレーティング・システムのエラー・コードです。 |
1 |
15 |
0 |
0 |
3 |
リスト |
任意 |
返された作業リスト。このリストは、引数1が特定の値の場合のみ以下のように返されます。 |
|
|
|
|
例
以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、ディレクトリ名を指定するよう要求し、指定されたディレクトリを作成しようとします。ディレクトリの作成操作による基本戻りコードと拡張戻りコードが表示されます。
FUNCTION OPTIONS(*DIRECT); DEFINE FIELD(#OV_DIRECT) TYPE(*CHAR) LENGTH(65);
DEFINE FIELD(#OV_RETC) TYPE(*CHAR) LENGTH(2); DEFINE FIELD(#OV_ERRNO) TYPE(*DEC) LENGTH(7) DECIMALS(0) EDIT_CODE(4); BEGIN_LOOP; MESSAGE MSGTXT('Specify name of directory to be created'); REQUEST FIELDS((#OV_DIRECT *NOID)); USE BUILTIN(OV_FILE_SERVICE) WITH_ARGS(MAKE_DIR #OV_DIRECT) TO_GET(#OV_RETC #OV_ERRNO); MESSAGE MSGTXT('Response from OV_FILE_SERVICE'); POP_UP FIELDS(#OV_RETC #OV_ERRNO); END_LOOP;
以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、C:\OV_DEMOというディレクトリを作成し、このディレクトリ内にディレクトリA、B、C、およびDを作成します。その後、作成したすべてのディレクトリを破棄します。削除(破棄)するためにはディレクトリが空である必要があるため、破棄操作は作成と逆の順序で実行されます。
FUNCTION OPTIONS(*DIRECT); EXECUTE SUBROUTINE(DIRECT) WITH_PARMS(MAKE_DIR 'C:\OV_DEMO'); EXECUTE SUBROUTINE(DIRECT) WITH_PARMS(MAKE_DIR 'C:\OV_DEMO\A'); EXECUTE SUBROUTINE(DIRECT) WITH_PARMS(MAKE_DIR 'C:\OV_DEMO\B'); EXECUTE SUBROUTINE(DIRECT) WITH_PARMS(MAKE_DIR 'C:\OV_DEMO\C'); EXECUTE SUBROUTINE(DIRECT) WITH_PARMS(MAKE_DIR 'C:\OV_DEMO\D'); MESSAGE MSGTXT('Directories all created .... use OK to delete them now'); POP_UP FIELDS((#DATE *L3 *P2)) AT_LOC(8 23) WITH_SIZE(55 10) EXIT_KEY(*NO) MENU_KEY(*NO) PROMPT_KEY(*NO); EXECUTE SUBROUTINE(DIRECT) WITH_PARMS(REMOVE_DIR 'C:\OV_DEMO\A'); EXECUTE SUBROUTINE(DIRECT) WITH_PARMS(REMOVE_DIR 'C:\OV_DEMO\B'); EXECUTE SUBROUTINE(DIRECT) WITH_PARMS(REMOVE_DIR 'C:\OV_DEMO\C'); EXECUTE SUBROUTINE(DIRECT) WITH_PARMS(REMOVE_DIR 'C:\OV_DEMO\D'); EXECUTE SUBROUTINE(DIRECT) WITH_PARMS(REMOVE_DIR 'C:\OV_DEMO'); MESSAGE MSGTXT('Directories all deleted .... use OK to end this function'); POP_UP FIELDS((#DATE *L3 *P2)) AT_LOC(8 23) WITH_SIZE(55 10) EXIT_KEY(*NO) MENU_KEY(*NO) PROMPT_KEY(*NO); SUBROUTINE NAME(DIRECT) PARMS((#OV_SERV *RECEIVED) (#OV_DIRECT *RECEIVED)); DEFINE FIELD(#OV_SERV) TYPE(*CHAR) LENGTH(20); DEFINE FIELD(#OV_DIRECT) TYPE(*CHAR) LENGTH(65); DEFINE FIELD(#OV_RETC) TYPE(*CHAR) LENGTH(2); DEFINE FIELD(#OV_ERRNO) TYPE(*DEC) LENGTH(7) DECIMALS(0) EDIT_CODE(4); USE BUILTIN(OV_FILE_SERVICE) WITH_ARGS(#OV_SERV #OV_DIRECT) TO_GET(#OV_RETC #OV_ERRNO); IF COND('#OV_RETC *NE OK'); DISPLAY FIELDS(#OV_SERV (#OV_DIRECT *NOID) #OV_RETC #OV_ERRNO) EXIT_KEY(*NO) MENU_KEY(*NO) PROMPT_KEY(*NO); ABORT MSGTXT('Directory Operation failed'); ENDIF; ENDROUTINE;
以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、ディレクトリ名を指定するよう要求します。指定されたディレクトリ名が存在しない場合、そのディレクトリを作成するかどうかを指定するよう指示します。
FUNCTION OPTIONS(*DIRECT); DEFINE FIELD(#OV_DIRECT) TYPE(*CHAR) LENGTH(70); DEFINE FIELD(#OV_RETC) TYPE(*CHAR) LENGTH(2); DEFINE FIELD(#OV_MBA) TYPE(*CHAR) LENGTH(1); BEGIN_LOOP; REQUEST FIELDS((#OV_DIRECT *NOID)); USE BUILTIN(OV_FILE_SERVICE) WITH_ARGS(CHECK_DIR #OV_DIRECT) TO_GET(#OV_RETC); IF COND('#OV_RETC = OK'); MESSAGE MSGTXT('This directory already exists'); ELSE; USE BUILTIN(OV_MESSAGE_BOX) WITH_ARGS('Do you want to create this directory ?' 'Create ?' YN Q) TO_GET(#OV_MBA); IF COND('#OV_MBA = Y'); USE BUILTIN(OV_FILE_SERVICE) WITH_ARGS(MAKE_DIR #OV_DIRECT) TO_GET(#OV_RETC); IF COND('#OV_RETC *NE OK'); MESSAGE MSGTXT('Attempt to create directory failed'); ENDIF; ENDIF; ENDIF; END_LOOP;
以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターでコピーして貼り付けることが可能)は、ファイル名を指定するよう要求し、指定されたファイルが存在するかどうかを示します。
FUNCTION OPTIONS(*DIRECT); DEFINE FIELD(#OV_DIRECT) TYPE(*CHAR) LENGTH(70); DEFINE FIELD(#OV_RETC) TYPE(*CHAR) LENGTH(2); BEGIN_LOOP; MESSAGE MSGTXT('Specify name of file whose existence is to be checked for'); REQUEST FIELDS((#OV_DIRECT *NOID)); USE BUILTIN(OV_FILE_SERVICE) WITH_ARGS(CHECK_FILE #OV_DIRECT) TO_GET(#OV_RETC); IF COND('#OV_RETC = OK'); MESSAGE MSGTXT('This file exists'); ELSE; MESSAGE MSGTXT('This file does NOT exist'); ENDIF; DISPLAY FIELDS((#OV_DIRECT *NOID)); END_LOOP;
以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、ファイル名と、そのファイルを読み取り専用に設定するか標準(読み書き可能)に設定するかを指定するよう要求します。
FUNCTION OPTIONS(*DIRECT); DEFINE FIELD(#OV_FILE) TYPE(*CHAR) LENGTH(70); DEFINE FIELD(#OV_READ) TYPE(*CHAR) LENGTH(1) LABEL('Read Only') INPUT_ATR(RB01) DEFAULT(1); DEFINE FIELD(#OV_NORM) TYPE(*CHAR) LENGTH(1) LABEL('Normal') INPUT_ATR(RB01) DEFAULT(0); DEFINE FIELD(#OV_RETC) TYPE(*CHAR) LENGTH(2); **********; BEGIN_LOOP; MESSAGE MSGTXT('Specify name of file whose attribute is to be changed and select attribute'); REQUEST FIELDS((#OV_FILE *L3 *P2 *NOID) (#OV_READ *L5 *P3) (#OV_NORM *L7 *P3)); IF COND('#ov_read = ''1'''); USE BUILTIN(OV_FILE_SERVICE) WITH_ARGS(SET_FILE #OV_FILE READ_ONLY) TO_GET(#OV_RETC); ELSE; USE BUILTIN(OV_FILE_SERVICE) WITH_ARGS(SET_FILE #OV_FILE NORMAL) TO_GET(#OV_RETC); ENDIF; IF COND('#OV_RETC = OK'); MESSAGE MSGTXT('File attribute successfully changed'); ELSE; MESSAGE MSGTXT('ERROR : File attribute was NOT changed'); ENDIF; END_LOOP;
以下のRDMLファンクションの例(CS/400の自由形式のファンクション・エディターにコピー/貼り付け可能)は、コピー元ファイル名とコピー先ファイル名を指定するよう要求し、コピー操作を試行します。
FUNCTION OPTIONS(*DIRECT); DEFINE FIELD(#OV_FROM) TYPE(*CHAR) LENGTH(60) DEFAULT('C:\CONFIG.SYS'); DEFINE FIELD(#OV_TO) TYPE(*CHAR) LENGTH(60) DEFAULT('C:\CONFIG.SAV'); DEFINE FIELD(#OV_RETC) TYPE(*CHAR) LENGTH(2); **********; BEGIN_LOOP; MESSAGE MSGTXT('Specify the from and to file names'); REQUEST FIELDS(#OV_FROM #OV_TO); USE BUILTIN(OV_FILE_SERVICE) WITH_ARGS(COPY_FILE #OV_FROM #OV_TO) TO_GET(#OV_RETC); IF COND('#OV_RETC = OK'); MESSAGE MSGTXT('File copied'); ELSE; MESSAGE MSGTXT('ERROR : File was NOT copied correctly'); ENDIF; END_LOOP;
以下のRDMLファンクションの例は、ディレクトリ名を指定するよう要求し、指定されたディレクトリの内容を取得して表示します。結果として表示される内容は、さまざまな順序でソートできます。この例は、CS/400の自由形式のエディターにコピーして貼り付けることができますが、長いREQUESTコマンドを「展開」しないと、ファンクションが有効なRDMLコードとして受け入れられない場合があります。
FUNCTION OPTIONS(*DIRECT); DEFINE FIELD(#OV_DIRECT) TYPE(*CHAR) LENGTH(70); DEFINE FIELD(#OV_FILTER) TYPE(*CHAR) LENGTH(3) LABEL('Optional Filter'); DEFINE FIELD(#OV_BYTES) TYPE(*DEC) LENGTH(9) DECIMALS(0) LABEL('Total of Sizes') EDIT_CODE(3); DEFINE FIELD(#OV_OBJECT) TYPE(*DEC) LENGTH(7) DECIMALS(0) LABEL('Total Objects') EDIT_CODE(3); DEF_COND NAME(*OBJECTS) COND('#ov_object *gt 0'); DEFINE FIELD(#OV_RETC) TYPE(*CHAR) LENGTH(2); DEFINE FIELD(#OV_ERRN) TYPE(*DEC) LENGTH(15) DECIMALS(0); DEFINE FIELD(#OV_NAME) TYPE(*CHAR) LENGTH(15); DEFINE FIELD(#OV_PREFIX) TYPE(*CHAR) LENGTH(12); DEFINE FIELD(#OV_SUFFIX) TYPE(*CHAR) LENGTH(3); DEFINE FIELD(#OV_DATE) TYPE(*CHAR) LENGTH(8); DEFINE FIELD(#OV_TIME) TYPE(*CHAR) LENGTH(6); DEFINE FIELD(#OV_ISDIR) TYPE(*CHAR) LENGTH(1); DEFINE FIELD(#OV_SIZE) TYPE(*DEC) LENGTH(9) DECIMALS(0) EDIT_CODE(3); DEFINE FIELD(#OV_PB01) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB01) DEFAULT('''Order By Name'''); DEFINE FIELD(#OV_PB02) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB02) DEFAULT('''Order By Suffix'''); DEFINE FIELD(#OV_PB03) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB03) DEFAULT('''Order By Date/Time'''); DEFINE FIELD(#OV_PB04) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB04) DEFAULT('''Order By Size'''); DEF_LIST NAME(#WLIST) FIELDS(#OV_NAME #OV_PREFIX #OV_SUFFIX #OV_DATE #OV_TIME #OV_SIZE #OV_ISDIR) TYPE(*WORKING) ENTRYS(5000); DEF_LIST NAME(#DLIST) FIELDS(#OV_NAME #OV_PREFIX #OV_SUFFIX #OV_DATE #OV_TIME #OV_SIZE #OV_ISDIR) COUNTER(#OV_OBJECT); **********; EXECUTE SUBROUTINE(WTOD); BEGIN_LOOP; REQUEST FIELDS((#OV_DIRECT *L3 *P2 *NOID) (#OV_FILTER *L4 *P2) (#OV_PB01 *L6 *P2 *NOID *OBJECTS *IOCOND) (#OV_PB02 *L8 *P2 *NOID *OBJECTS *IOCOND) (#OV_PB03 *L6 *P38 *NOID *OBJECTS *IOCOND) (#OV_PB04 *L8 *P38 *NOID *OBJECTS *IOCOND) (#OV_BYTES *L4 *P22 *OUT) (#OV_OBJECT *L4 *P49 *OUT)) BROWSELIST(#DLIST); CASE OF_FIELD(#IO$KEY); WHEN VALUE_IS('= B1'); SORT_LIST NAMED(#WLIST) BY_FIELDS(#OV_NAME); EXECUTE SUBROUTINE(WTOD); WHEN VALUE_IS('= B2'); SORT_LIST NAMED(#WLIST) BY_FIELDS(#OV_SUFFIX #OV_PREFIX); EXECUTE SUBROUTINE(WTOD); WHEN VALUE_IS('= B3'); SORT_LIST NAMED(#WLIST) BY_FIELDS(#OV_DATE #OV_TIME); EXECUTE SUBROUTINE(WTOD); WHEN VALUE_IS('= B4'); SORT_LIST NAMED(#WLIST) BY_FIELDS(#OV_SIZE); EXECUTE SUBROUTINE(WTOD); OTHERWISE; USE BUILTIN(OV_FILE_SERVICE) WITH_ARGS(GET_DIR #OV_DIRECT #OV_FILTER) TO_GET(#OV_RETC #OV_ERRN #WLIST); IF COND('#OV_RETC = OK'); EXECUTE SUBROUTINE(WTOD); ELSE; MESSAGE MSGTXT('ERROR: Unable to list specified directory '); ENDIF; ENDCASE; END_LOOP; **********; SUBROUTINE NAME(WTOD); CLR_LIST NAMED(#DLIST); CHANGE FIELD(#OV_BYTES) TO(0); SELECTLIST NAMED(#WLIST); CHANGE FIELD(#OV_BYTES) TO('#ov_bytes + #ov_size'); ADD_ENTRY TO_LIST(#DLIST) WITH_MODE(*DISPLAY); ENDSELECT; ENDROUTINE;
以下のRDMLファンクションの例は、ディレクトリ名を指定するよう要求し、指定されたディレクトリの内容を取得して表示します。結果として表示される内容は、さまざまな順序でソートできます。表示されたファイル名は、ダブルクリックして削除できます。ファイルの削除要求は、メッセージ・ボックスで[はい]をクリックして確定する必要があります。この例は、CS/400の自由形式のエディターにコピーして貼り付けることができますが、長いREQUESTコマンドを「展開」しないと、ファンクションが有効なRDMLコードとして受け入れられない場合があります。
FUNCTION OPTIONS(*DIRECT); DEFINE FIELD(#OV_DIRECT) TYPE(*CHAR) LENGTH(70); DEFINE FIELD(#OV_PIRECT) REFFLD(#OV_DIRECT); DEFINE FIELD(#OV_FILTER) TYPE(*CHAR) LENGTH(3) LABEL('Optional Filter'); DEFINE FIELD(#OV_BYTES) TYPE(*DEC) LENGTH(9) DECIMALS(0) LABEL('Total of Sizes') EDIT_CODE(3); DEFINE FIELD(#OV_OBJECT) TYPE(*DEC) LENGTH(7) DECIMALS(0) LABEL('Total Objects') EDIT_CODE(3); DEFINE FIELD(#OV_SELECT) TYPE(*DEC) LENGTH(7) DECIMALS(0); DEF_COND NAME(*OBJECTS) COND('#ov_object *gt 0'); DEFINE FIELD(#OV_RETC) TYPE(*CHAR) LENGTH(2); DEFINE FIELD(#OV_ERRN) TYPE(*DEC) LENGTH(15) DECIMALS(0); DEFINE FIELD(#OV_NAME) TYPE(*CHAR) LENGTH(15); DEFINE FIELD(#OV_PREFIX) TYPE(*CHAR) LENGTH(12); DEFINE FIELD(#OV_SUFFIX) TYPE(*CHAR) LENGTH(3); DEFINE FIELD(#OV_DATE) TYPE(*CHAR) LENGTH(8); DEFINE FIELD(#OV_TIME) TYPE(*CHAR) LENGTH(6); DEFINE FIELD(#OV_ISDIR) TYPE(*CHAR) LENGTH(1); DEFINE FIELD(#OV_SIZE) TYPE(*DEC) LENGTH(9) DECIMALS(0) EDIT_CODE(3); DEFINE FIELD(#OV_PB01) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB01) DEFAULT('''Order By Name'''); DEFINE FIELD(#OV_PB02) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB02) DEFAULT('''Order By Suffix'''); DEFINE FIELD(#OV_PB03) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB03) DEFAULT('''Order By Date/Time'''); DEFINE FIELD(#OV_PB04) TYPE(*CHAR) LENGTH(30) INPUT_ATR(PB04) DEFAULT('''Order By Size'''); DEF_LIST NAME(#WLIST) FIELDS(#OV_NAME #OV_PREFIX #OV_SUFFIX #OV_DATE #OV_TIME #OV_SIZE #OV_ISDIR) TYPE(*WORKING) ENTRYS(5000); DEF_LIST NAME(#DLIST) FIELDS(#OV_NAME #OV_PREFIX #OV_SUFFIX #OV_DATE #OV_TIME #OV_SIZE #OV_ISDIR) COUNTER(#OV_OBJECT) SEL_ENTRY(#OV_SELECT); **********; BEGIN_LOOP; CHANGE FIELD(#OV_PIRECT) TO(#OV_DIRECT); REQUEST FIELDS((#OV_DIRECT *L3 *P2 *NOID) (#OV_FILTER *L4 *P2) (#OV_PB01 *L6 *P2 *NOID *OBJECTS *IOCOND) (#OV_PB02 *L8 *P2 *NOID *OBJECTS *IOCOND) (#OV_PB03 *L6 *P38 *NOID *OBJECTS *IOCOND) (#OV_PB04 *L8 *P38 *NOID *OBJECTS *IOCOND) (#OV_BYTES *L4 *P22 *OUT) (#OV_OBJECT *L4 *P49 *OUT)) BROWSELIST(#DLIST); CASE OF_FIELD(#IO$KEY); WHEN VALUE_IS('= B1'); SORT_LIST NAMED(#WLIST) BY_FIELDS(#OV_NAME); EXECUTE SUBROUTINE(WTOD); WHEN VALUE_IS('= B2'); SORT_LIST NAMED(#WLIST) BY_FIELDS(#OV_SUFFIX #OV_PREFIX); EXECUTE SUBROUTINE(WTOD); WHEN VALUE_IS('= B3'); SORT_LIST NAMED(#WLIST) BY_FIELDS(#OV_DATE #OV_TIME); EXECUTE SUBROUTINE(WTOD); WHEN VALUE_IS('= B4'); SORT_LIST NAMED(#WLIST) BY_FIELDS(#OV_SIZE); EXECUTE SUBROUTINE(WTOD); OTHERWISE; IF COND('(#ov_pirect = #ov_direct) *and (#ov_select *gt 0) *and (#ov_object *gt 0)'); EXECUTE SUBROUTINE(DELETE_FIL); ELSE; EXECUTE SUBROUTINE(LOAD_DIR); ENDIF; ENDCASE; END_LOOP; **********; SUBROUTINE NAME(LOAD_DIR); USE BUILTIN(OV_FILE_SERVICE) WITH_ARGS(GET_DIR #OV_DIRECT #OV_FILTER) TO_GET(#OV_RETC #OV_ERRN #WLIST); IF COND('#OV_RETC = OK'); EXECUTE SUBROUTINE(WTOD); ELSE; MESSAGE MSGTXT('ERROR: Unable to list specified directory '); ENDIF; ENDROUTINE; **********; SUBROUTINE NAME(DELETE_FIL); DEFINE FIELD(#OV_MBA) TYPE(*CHAR) LENGTH(1); DEFINE FIELD(#OV_MSG) TYPE(*CHAR) LENGTH(100); GET_ENTRY NUMBER(#OV_SELECT) FROM_LIST(#DLIST); IF COND('#ov_isdir = Y'); MESSAGE MSGTXT('Selected object is a directory and cannot be deleted'); ELSE; USE BUILTIN(BCONCAT) WITH_ARGS('Confirm that file' #OV_NAME 'is to deleted') TO_GET(#OV_MSG); USE BUILTIN(OV_MESSAGE_BOX) WITH_ARGS(#OV_MSG 'Delete File' YN Q) TO_GET(#OV_MBA); IF COND('#OV_MBA = Y'); USE BUILTIN(TCONCAT) WITH_ARGS(#OV_DIRECT '\' #OV_NAME) TO_GET(#OV_MSG); USE BUILTIN(OV_FILE_SERVICE) WITH_ARGS(REMOVE_FILE #OV_MSG) TO_GET(#OV_RETC); IF COND('#OV_RETC = OK'); EXECUTE SUBROUTINE(LOAD_DIR); MESSAGE MSGTXT('File successfully deleted'); ELSE; MESSAGE MSGTXT('ERROR : Attempt to delete file failed'); ENDIF; ENDIF; ENDIF; ENDROUTINE; **********; SUBROUTINE NAME(WTOD); CLR_LIST NAMED(#DLIST); CHANGE FIELD(#OV_BYTES) TO(0); SELECTLIST NAMED(#WLIST); CHANGE FIELD(#OV_BYTES) TO('#ov_bytes + #ov_size'); ADD_ENTRY TO_LIST(#DLIST) WITH_MODE(*DISPLAY); ENDSELECT; ENDROUTINE;