Loading...
Select Version
&pagelevel(3)&pagelevel
Example 1: Reorganizing storage space
This procedure reorganizes the storage space for all files of a user ID. If the file is a PLAM library, all its elements are copied to a new library.
The user ID must be entered with a leading $ sign and a trailing period.There are no default values.
a) Non-S procedure
/BEGIN-PROCEDURE LOGGING=N, - / PARAMETERS=YES( - / PROCEDURE-PARAMETERS=( - / &USERID=), - / ESCAPE-CHARACTER='&') /REMARK +---------------------------------------------------------------+" /REMARK | | /REMARK | This procedure compacts all files contained on a user-id. | /REMARK | If the file is a PLAM library then all elements are | /REMARK | duplicated in a new library. | /REMARK | The user-id must be given with the leading dollar sign | /REMARK | and with the trailing point. | /REMARK | There is no default value. | /REMARK | | /REMARK +---------------------------------------------------------------+" /REMARK &USERID /ASSIGN-SYSOUT TO=*DUMMY /SHOW-FILE-ATTR &USERID,INFO=NAME-AND-SPACE, - / OUTPUT=#LST(FORM-NAME=FILE-NAME) /ASSIGN-SYSOUT TO=*PRIMARY /ASSIGN-SYSDTA TO=*SYSCMD /MOD-JOB-SWITCHES ON=(1,4,5) /START-EXECUTABLE-PROGRAM $EDT @@READ '#LST' @@COL1ON&INSERT'/CALL-PROC #PROC2,P-P=(' @@SUFFIX&WITH')' @@RENUM @@CR0.001W'/BEGIN-PROCEDURE LOGGING=N' @@CR0.002W'/ASSIGN-SYSOUT TO=#OUTBEFORE' @@CR0.003W'/SHOW-FILE-ATT &USERID,INFO=SPACE-SUMMARY' @@CR0.004W'/ASSIGN-SYSOUT TO=*PRIMARY' @@CR$+.01W'/ASSIGN-SYSOUT TO=#OUTAFTER' @@CR$+.01W'/SHOW-FILE-ATT &USERID,INFO=SPACE-SUMMARY' @@CR$+.01W'/ASSIGN-SYSOUT TO=*PRIMARY' @@CR$+.01W'/END-PROCEDURE' @@WR'#PROC1' OVER @@DELETE @@CR$+.01W'/BEGIN-PROC LOGGING=N, -' @@CR$+.01W'/ PARAMETERS=YES( -' @@CR$+.01W'/ PROC-PARAM=(&FILE),-' @@CR$+.01W'/ ESCAPE-CHAR=''&'')' @@CR$+.01W'/COPY-FILE &FILE,&FILE..WORK,PROTECTION=SAME' @@CR$+.01W'/SKIP-COMMANDS TO-LABEL=ERASE' @@CR$+.01W'/SET-JOB-STEP' @@CR$+.01W'/SKIP-COMMANDS TO-LABEL=END' @@CR$+.01W'/.ERASE DELETE-FILE &FILE,OPTION=DATA' @@CR$+.01W'/SKIP-COMMANDS TO-LABEL=FILE' @@CR$+.01W'/SET-JOB-STEP' @@CR$+.01W'/DELETE-FILE &FILE..WORK' @@CR$+.01W'/SET-JOB-STEP' @@CR$+.01W'/SKIP-COMMANDS TO-LABEL=END' @@CR$+.01W'/.FILE SET-JOB-STEP' @@CR$+.01W'/FILE &FILE,SPACE=(100,20),FCBTYPE=PAM' @@CR$+.01W'/SKIP-COMMANDS TO-LABEL=LMS' @@CR$+.01W'/SET-JOB-STEP' @@CR$+.01W'/COPY-FILE &FILE..WORK,&FILE' @@CR$+.01W'/DELETE-FILE &FILE..WORK,IGNORE-PROTECTION=ACCESS' @@CR$+.01W'/SET-JOB-STEP' @@CR$+.01W'/SKIP-COMMANDS TO-LABEL=END' @@CR$+.01W'/.LMS SET-JOB-STEP' @@CR$+.01W'/ASSIGN-SYSDTA TO=*SYSCMD' @@CR$+.01W'/MOD-JOB-SWITCHES ON=(1,2,3,4,5)' @@CR$+.01W'/START-EXECUTABLE-PROGRAM $LMS,MONJV=#BIDON' @@CR$+.01W'LIB &FILE..WORK,IN' @@CR$+.01W'LIB &FILE,OUT,NEW' @@CR$+.01W'DUP* */*' @@CR$+.01W'END' @@CR$+.01W'/MOD-JOB-SWITCHES OFF=(1,2,3,4,5)' @@CR$+.01W'/SET-JOB-STEP' @@CR$+.01W'/SKIP-COMMANDS IF=JV(((#BIDON,4,4) = ''0000'')),-' @@CR$+.01W'/ TO-LABEL=AVEND' @@CR$+.01W'/SET-JOB-STEP' @@CR$+.01W'/COPY-FILE &FILE..WORK,&FILE' @@CR$+.01W'/DELETE-FILE &FILE..WORK' @@CR$+.01W'/SET-JOB-STEP' @@CR$+.01W'/SKIP-COMMANDS TO-LABEL=END' @@CR$+.01W'/.AVEND SET-JOB-STEP' @@CR$+.01W'/DELETE-FILE &FILE..WORK' @@CR$+.01W'/.END SET-JOB-STEP' @@CR$+.01W'/MOD-FILE-ATT &FILE,SUPPORT=ANY-DISK(RELEASE(9999)) @@CR$+.01W'/W-TEXT ''File &FILE compacted''' @@CR$+.01W'/SET-JOB-STEP' @@CR$+.01W'/END-PROCEDURE' @@WR'#PROC2'OVER @@H /CALL-PROCEDURE #PROC1 /START-EXECUTABLE-PROGRAM $EDT @@REA'#OUTBEFORE' @@REA'#OUTAFTER' @@SET #I5 = SUBSTR 1:38-42: @@SET #I6 = SUBSTR 2:38-42: @@SET #I7 = #I5 - #I6 @@DELETE @@SET #S5 = CHAR #I5 @@SET #S6 = CHAR #I6 @@SET #S7 = CHAR #I7 @@CR #S1:'Space before : ',#S5 @@CR #S2:'Space after : ',#S6 @@CR #S3:' ------------' @@CR #S4:'Space won : ',#S7 @@PRINT #S1 N @@PRINT #S2 N @@PRINT #S3 N @@PRINT #S4 N @@H /MOD-JOB-SWITCHES OFF=(1,4,5) /ASSIGN-SYSDTA TO=*SYSCMD /END-PROC
b) S procedure
/&* +---------------------------------------------------------------+ /&* | | /&* | This procedure compacts all files contained on a user-id. | /&* | If the file is a PLAM library then all elements are | /&* | duplicated in a new library. | /&* | The user-id is given in parameters with or without the | /&* | leading dollar sign and with or without the trailing point. | /&* | If no parameter is given then the current user-id is taken. | /&* | | /&* +---------------------------------------------------------------+ /DECLARE-PARAMETER USER-ID(INITIAL-VALUE=USER-ID,TRANSFER-TYPE=BY-VALUE) /IF (SUBSTR(USER-ID,1,1)<>'$') / "THEN" USER-ID = '$' // USER-ID /END-IF /IF (SUBSTR(USER-ID,LENGTH(USER-ID),1)<>'.') / "THEN" USER-ID = USER-ID // '.' /END-IF /DECLARE-VARIABLE FS(TYPE=STRUCT(*DYNAMIC)),MULT-ELEM=LIST /DECLARE-VARIABLE VARLOOP(TYPE=STRUCT(*DYNAMIC)) /EXEC-CMD CMD=(SHOW-FILE-ATTR &USER-ID,INFO=NAME-AND-SPACE),- /STRUCTURE-OUTPUT=FS,TEXT-OUTPUT=*NONE /DECLARE-VARIABLE SPACEBEFORE(INIT=O,TYP=*INTEGER) /FOR VARLOOP = *LIST(FS) / SPACEBEFORE = SPACEBEFORE + VARLOOP.F-SIZE / IF (IS-LIBRARY(VARLOOP.F-NAME)) / "THEN" LIBBLOCK: BEGIN-BLOCK DATA-INSERTION=YES / COPY-FILE FROM-FILE=&(VARLOOP.F-NAME),- / TO-FILE=&(VARLOOP.F-NAME).WORK,PROTECTION=SAME / IF-BLOCK-ERROR / EXIT-BLOCK LIBBLOCK / END-IF / MODIFY-JOB-SWITCHES ON=(1,4) / ASSIGN-SYSDTA TO=*SYSCMD / DELETE-FILE &(VARLOOP.F-NAME) / IF-BLOCK-ERROR / DELETE-FILE &(VARLOOP.F-NAME).WORK,OPTION=DATA / EXIT-BLOCK LIBBLOCK / END-IF / START-EXE FROM-FILE=$LMS / SEND-DATA 'LIB &(VARLOOP.F-NAME).WORK,IN' / SEND-DATA 'LIB &(VARLOOP.F-NAME).NEW.OUT' / SEND-DATA 'DUP* */*' / SEND-DATA 'END' / ASSIGN-SYSDTA TO=*PRIMARY / MODIFY-JOB-SWITCHES OFF=(1,4) / IF-BLOCK-ERROR / COPY-FILE &(VARLOOP.F-NAME).WORK,- / &(VARLOOP.F-NAME) / ELSE / WR-TEXT 'Library &(VARLOOP.F-NAME) compacted' / END-IF / DELETE-FILE &(VARLOOP.F-NAME).WORK,IGNORE-PROTECTION=ACCESS / MOD-FILE-ATTR &(VARLOOP.F-NAME),- / SUPPORT=ANY-DISK(SPACE=RELEASE(10000)) / END-BLOCK / ELSE / MOD-FILE-ATTR &(VARLOOP.F-NAME),- / SUPPORT=ANY-DISK(SPACE=RELEASE(10000)) / IF-BLOCK-ERROR / ELSE / WR-TEXT 'File &(VARLOOP.F-NAME) compacted' / END-IF / END-IF /END-FOR /IF-BLOCK-ERROR /END-IF /DECLARE-VARIABLE FS2(TYP=STRING),MULT-EL=LIST /EXEC-CMD CMD=(SHOW-FILE-ATTR &USER-ID,INFO=SPACE-SUMMARY),- / TEXT-OUTPUT=FS2 /SPACEAFTER = INTEGER (SUBSTR (FS2#,37,5)) /WR-TEXT 'Space before : &SPACEBEFORE' /WR-TEXT 'Space after : &SPACEAFTER' /WIN = SPACEBEFORE - SPACEAFTER /WR-TEXT ' -----' /WR-TEXT 'Space won : &WIN' /EXIT-PROC
Example 2: Copying files with the aid of wildcards
In the following procedure, files are first selected using wildcards. Then, they are copied under a new catalog ID, a new user ID or a new prefix.
For clarification:CALL-PROC copy, PROC-PAR = (SOURCE=xxx, TARGET=yyy)
where xxx could be::CAT: ,$USERID., *STRING
* or anything which is accepted by SHOW-FILE-ATTR.
where yyy could be::CAT: ,$USERID2.
or any prefix with a trailing period.
a) Non-S procedure
/BEGIN-PROCEDURE LOGGING=N, - / PARAMETERS=YES( - / PROCEDURE-PARAMETERS=( - / &SOURCE=, - / &TARGET=), - / ESCAPE-CHARACTER='&') /REMARK +---------------------------------------------------------------+ /REMARK | | /REMARK | This procedure enables the user to copy some files selected | /REMARK | with wildcards under a new cat-id, a new user-id or a new | /REMARK | prefix. | /REMARK | Examples : | /REMARK | CALL-PROC copy,PROC-PAR=(SOURCE=xxx,TARGET=yyy) | /REMARK | where xxx could be :CAT: , $USERID. , *STRING* or | /REMARK | everything accepted by SHOW-FILE-ATT | /REMARK | yyy could be :CAT2: , $USERID2. or any PREFIX with | /REMARK | a trailing point | /REMARK | | /REMARK +---------------------------------------------------------------+ /REMARK &SOURCE /REMARK &TARGET /ASSIGN-SYSOUT TO=*DUMMY /ASSIGN-SYSLST TO=#LST /SHOW-FILE-ATTR &SOURCE,LIST=((SYSLST),FILENAM) /ASSIGN-SYSLST TO=*PRIMARY /ASSIGN-SYSOUT TO=*PRIMARY /ASSIGN-SYSDTA TO=*SYSCMD /MODIFY-JOB-SWITCHES ON=(1,4,5) /START-EXECUTABLE-PROGRAM $EDT @@PROC 1 @@REA '#LST' @@PROC 2 @@COPY &(1) @@ON&FIND '.',1 DELETE PREFIX @@DELETE&:1-1 @@PREFIX & WITH '/ TO-FILE=&TARGET' @@RENUM 1.5(1) @@END @@SUFFIX & WITH '.-' @@PREFIX & WITH '/COPY-FILE FROM-FILE =' @@COPY &(2) @@RENUM @@CR 0.01W'/BEGIN-PROCEDURE LOGGING=N' @@CR$+.01W'/END-PROCEDURE' @@WR'#LST' OVER @@H /MODIFY-JOB-SWITCHES OFF=(1,4,5) /ASSIGN-SYSDTA TO=*PRIMARY /CALL-PROC #LST /END-PROCEDURE
b) S procedure
/BEGIN-PARAMETER-DECLARATION / DECLARE-PARAMETER SOURCE(INIT=*PROMPT, TYPE=*STRING) / DECLARE-PAREMETER TARGET(INIT=*PROMPT, TYPE=*STRING) /END-PARAMETER-DECLARATION /&*+-------------------------------------------------------------------+ /&*| | /&*| This procedure enables the user to copy some files selected with | /&*| wildcards under a new cat-id, a new user-id, or a new prefix. | /&*| Examples : | /&*| CALL-PROC copy,PROC-PAR=(SOURCE=xxx,TARGET=yyy) | /&*| where xxx could be :CAT: , &USERID. , *STRING* or everything | /&*| accepted by SHOW-FILE-ATTRIBUTES | /&*| yyy could be :CAT2: , &USERID. or any PREFIX with a | /&*| trailing point. | /&*| | /&*+-------------------------------------------------------------------+ /DECLARE-VARIABLE FS(TYPE=STRUCT(*DYNAMIC)),MULT-ELEM=LIST /DECLARE-VARIABLE VARLOOP(TYPE=STRUCT(*DYNAMIC)) /DECLARE-VARIABLE TARGET2(TYPE=STRING) /EXEC-CMD CMD=(SHOW-FILE-ATTR &SOURCE,- /INFO=NAME-AND-SPACE),- /STRUCTURE-OUTPUT=FS,TEXT-OUT=*NONE /FOR VARLOOP = *LIST(FS) / TARGET2 = TARGET // - / VARLOOP.SHORT-F-NAME / COPY-FILE FROM = &(VARLOOP.F-NAME),- / TO = &(TARGET2) / IF-BLOCK-ERROR / "THEN" WR-TEXT 'File &(VARLOOP.F-NAME) not copied' / ELSE / WR-TEXT 'File &(VARLOOP.F-NAME) copied on &TARGET2' / END-IF /END-FOR /EXIT-PROC