Show a side-by-side list of 2 library member lists, do stuff. General description MLCMP shows a side-by-side list of 2 library member lists, which makes for easy comparison. Members are marked for being in one library only, which one is the newer etc. The display can be searched and filtered, see the Primary Commands section. You can do various actions directly from the display, refer to the Line Command section. The panel 'PROMPT' option will show a prompt panel if a command is deemed destructive, like when copy will replace a member. MLCMP can run in batch, see 'Batch execution' later. Parameters lib1 lib2 mbr blank seperated library names. If less that 2 names are specified then a prompt screen is presented. The libraries obviously must be of the same type (record format Fb, Vb, or U). 'mbr' is one or more membernames or masks. Default is all members. Primary display Lib1 Library 1. Can be entered as a descrete unquoted datasetname, a name with masks, which will open a 3.4 like submenu, or a question mark, which will open a menu of the latest 20 names used. The name is kept and used next time, if not set by the call. Lib2 Library 2. Same actions as for lib 1 Mbrs One or more member names or masks. Options Run options Prompt - issue a prompt for all potentially destructive commands, like member copy or delete. Logger - Log all actions. See the LOG primary command. Primary commands ALL Show all records. BOTH Show members in both libs. CHEck Data Scan selected members both libraries, mark lines where member data differ. COMPare Deprecated, old form for CHECK DATA. COPYSEL n Copy all selected members from lib n if present in library. Forces ALIAS, REPLACE and TRUNC. Will always ask if you are sure. DATADIF Show records where note is 'datadif' (set by CHECK DATA). DELSEL n Delete all selected members from lib n if present in library. Will always ask if you are sure. DIF Show records where note is not 'same'. Find f c v d Find field 'f' by condition 'c' for value 'v' and 'd' is optional direction FIRST, LAST, NEXT or PREV. Default is NEXT. 'field' is one of the names heading the display or DATE for both DATE1 and DATE2, or ID for both ID1 and ID2, 'condition' is one of the following: '>', '<', '<>' or '='. 'value' is either the full or partial value to test for, or a mask using '%' for one char and '*' for zero or many chars. If field is 'NAME' then the alias names are also searched. The value may be specified as NULL. If field is DATE or TIME, then the test is done for both field1 and field2. If field is DATE or ID and cond is not '<>' then test is done with field1 OR field2, otherwise field1 AND field2 is done. You can use an asterix (*) to reuse the latest c-v. Samples: f name=kil f date1=*-10-* f date > 2021 f * prev Locate p Locate member name, may be a mask. LOG END Stop the logger, alternative to use the panel field. LOG INIT Start the logger, alternative to use the panel field. LOG LIST List logger LL List logger, short form for LOG LIST MOVESEL n Move all selected members from lib n if present in library. Forces ALIAS, REPLACE and TRUNC. Will always ask if you are sure. NEWer Show records where note contains 'newer'. NO DATA | NODATA Show all records where one of both sides shows '-no data-'. ONLY Show all members in one lib only. RESet [LC] Show all records, same as the ALL comand. Parm LC resets only line command fields. RELoad Reload member lists. SAME Show records where note is 'same', short for note=same. SETDIF Deprecated, use CHECK DATA instead. SORT f [D] Sort by field 'f', optionally in Descending order. The field may be NAME,DATE1,DATE2,STAT1,ID1,STAT2,ID2 or NOTE. Default field is NAME. SYNCSEL Synchronize all selected members. Where c Show only lines with condition 'c'. 'c' is the same as for the FIND command. Fieldname DATE is short for DATE1 or DATE2, same goes for TIME, ID and STAT fieldnames. Samples: w date1>2021 1 Show records where note starts with '1'. 1Newer Show records where note is '1 newer'. 1Only Show records where note is '1 only'. 2 Show records where note starts with '2'. 2Newer Show records where note is '2 newer'. 2Only Show records where note is '2 only'. & c Add c to current filter. | c Add | (or) c to current filter for all records Line commands 'n' means library id 1 or 2. Commands CP, En, K, SC, STn, SYN, Vn and Y are not available for loadlibs. A prompt will be done for potentionally destructive commands, unless the NOPROMPT option is in effect. Bn Browse member in library n. Cn Copy member from library n to other. If member has aliases then you must copy by the main member. Aliases will be also be copied. CP Compare members using the ISPF EDIT COMPARE command. Dn Delete member in library n. Aliases will be also be deleted if main member, main member and other aliases will not be deleted if alias. PROMPT opt Y will cause a prompt before delete. En Edit member in library n. KD Compare members using ISPF SuperC side-by-side. L List information for members Mn Move member from library n to other. Aliases will be also be moved if main member, main member and other aliases will be moved if alias. SC Deprecated, old for for KD. STn Add ISPF stats for member in lib n. SYN Synchronize, make newer member current in both. Status '-no data-' is considered to be lower than any date, no status is of course the lowest of all. Vn View member in library n. Y Alias of SYN, making it usable for block commands. X Hide line from display. Block line commands The C, D, K, M, X and Y commands can be issued for a block of lines by duplicating the 1st character, i.e MM1 in one line and MM1 in another to move a block of members in one go. Notes Unmovable data sets (data set org POU or PSU) cannot be copied. See the ISPF Services manual 'LMCOPY' command for copy details. Members without ISPF statistics are marked with 'no-stat' in the Date column. They are considered older than members with date and time. Batch execution MLCMP will work in batch, except commands that needs screen in- or output are not allowed. But the WHERE filter and the COPYSEL, MOVESEL, DELSEL, SYNCSEL commands will work. The LIST command is supplied for listing all the current records. Listing goes to the standard SYSTSPRT libref. The batch execution is started like the online one, with the same parameters, the program detects it's execution mode. Commands are supplied through the MLCMPIN libref. Blank lines, and lines with an asterix (*) in column 1 are ignored, though listed. The JCL must include everything needed for a batch ISPF program. Sample: //MLCMPB EXEC PGM=IKJEFT1B //SYSEXEC DD DISP=SHR,DSN=SYS1.EXEC //SYSTSPRT DD SYSOUT=* //ISPMLIB DD DISP=SHR,DSN=ISP.SISPMENU //ISPPLIB DD DISP=SHR,DSN=ISP.SISPPENU //ISPSLIB DD DISP=SHR,DSN=ISP.SISPSENU //ISPTLIB DD DISP=SHR,DSN=ISP.SISPTENU //ISPPROF DD UNIT=SYSDA,SPACE=(TRK,(1,1,1)), // DCB=(ISP.SISPMENU) //ISPLOG DD SYSOUT=*,RECFM=VA,LRECL=125,BLKSIZE=129 //ISPFILE DD SYSOUT=*,RECFM=FB,LRECL=80,BLKSIZE=6240 //SYSTSIN DD * ISPSTART CMD(%MLCMP MLCTEST.SRC.LIB1 MLCTEST.SRC.LIB2 ) //MLCMPIN DD * * subset where name=a* list reset * check and synch check data list syncsel list