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 both libs are omitted then the last names used are loaded from the profile. You can use a dash (-) to force a display without libraries. 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 null value, which will open a menu of the latest 20 names used. The name will be the default for the next invocation. Lib2 Library 2. Same actions as for lib 1 Mbrs One or more member names or masks. Changing the value causes a reload using this filter. 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. Replace - Replace duplicate members. Primary commands ALL Show all records. BOTH Show members in both libs. B|BROWSE n Browse lib n. CHEck Data [Filter] Scan selected members both libraries, mark lines where member data differ. Using the 'filter' parm will leave only records with note 'datadif'. CDF Short for CHECK DATA FILTER. 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'. E|EDIT n Edit lib n. 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 have multiple f c v expressions, with the and (&) or or (|) sign in between. You can use an asterix (*) to reuse the latest c-v. Samples: f name=kil f date1=*-10-* f date > 2021 f date1<2018 & date1>0 last f * prev Find text Find text with optional direction as described above. Wildcards are allowed, just be aware the the number of spaces shown on the screen may not equal the number in the underlaying record, so the % wildcard may not work as expected. Help Help - do not use the full HELP command, that will show you the ISPF HELP screen. Any HELP pfkey will work, however. 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 M|MEMLIST n Memberlist lib n. 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. Members without status are considered lowest value, as well are missing members. V|VIEW n View lib n. 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. You can add to the curent filter by starting the command with either & or |, i.e. WHERE | date>2020 Samples: w date1>2021 XDC Alias of CDF (short for CHECK DATA FILTER) added for MLCOMP users. ? Alternate HELP command. 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'. 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. CPn Using the ISPF EDIT COMPARE command to compare member in libn with its conterpart. 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. I List information for name. KD Compare members using ISPF SuperC side-by-side. 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, replaced by 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, and M 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. The X and Y commands can be issued for a block of lines by duplicating the 1st character, i.e XX in the first and last line of the block to hide. Pfkeys Keys for HELP and RFIND will be redefined to work with MLCMP - they will be set back when MLCMP ends. 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