/* REXX ------------------------------------------------------------- */
/* Zerlegen der mit PRINT und LIST gespeicherten Datei                */
/* 'userid.SPF1.LIST' aus dem Lehrgang 16H82 / 16H87                  */
/*                                                                    */
/* Die mit <<< gekennzeichneten Zeilen muessen ggf geaendert werden.  */
/*                                                                    */
/* (c) N.Haas, 6/2001                                                 */
/* ------------------------------------------------------------------ */

/* Name der Datei, die zerlegt werden soll: ------------------------- */
dsn_1 = "'"USERID()".SPF0.LIST'"                               /* <<< */

/* Name des PDS, in welchem die Member angelegt werden sollen: ------ */
dsn_2 = "'"USERID()".TEST.PDS'"                                /* <<< */

/* Plausi, existiert die Datei 2 ? ---------------------------------- */
sysdsn = SYSDSN(dsn_2)
IF SYSDSN = 'OK' THEN DO
   /* Plausi, ist das auch ein PDS ? -------------------------------- */
   dummy = LISTDSI(dsn_2)
   IF sysdsorg /= 'PO' THEN DO
      sms = 'DSORG error!'
      sml = 'Dataset' dsn_2 'is not PO, but' sysdsorg'.'
      "ISPEXEC SETMSG MSG(issm003)"
      EXIT 8
   END
END
ELSE DO
   /* Datei 2 existiert nicht, also anlegen ------------------------- */
   "ALLOC DD(dd2) DSN("dsn_2") DSORG(PO) RECFM(F,B)",
     "SPACE(50,100) TRACKS DIR(100) LRECL(80) BLKSIZE(0)",
     "MGMTCLAS(STANDARD) STORCLAS(BASE)"                    /* <<< */
   IF rc <> 0 THEN DO
      sms = 'Allocation failed!'
      sml = 'Error while allocating 'dsn_2'.'
      "ISPEXEC SETMSG MSG(issm003)"
      EXIT 8
   END
   "FREE DD(dd2)"
END

/* Einlesen Datei 1 ------------------------------------------------- */
"ALLOC DD(dd1) DSN("dsn_1") SHR REUSE"
"EXECIO * DISKR dd1 (FINIS STEM line.)"
"FREE DD(dd1)"

/* Init ------------------------------------------------------------- */
member     = '' /* Membername */
member_alt = '' /* Membername (alt) */
m_line.    = '' /* Memberzeilen */
m_cntr     = 0  /* Counter fuer Memberzeilen */
skip_lines = 0  /* zu ueberspringende Zeilen */

/* Alle Zeilen durchlesen ------------------------------------------- */
DO i = 1 TO line.0
   IF LEFT(line.i, 17) = '1        DATASET:' THEN NOP    /* auslassen */
   ELSE DO
      IF LEFT(line.i, 16) = '         MEMBER:' THEN DO
         member = STRIP(WORD(line.i,2))
         IF member /= member_alt THEN DO
            IF member_alt /= '' THEN CALL Wegschreiben
            DROP m_line.
            member_alt = member
            m_cntr = 0
         END
         skip_lines = 4
      END
      ELSE DO
         IF member_alt /= '' THEN DO
            IF skip_lines = 0 THEN DO
               IF LEFT(line.i, 6) /= ' START' THEN DO
                  m_cntr = m_cntr + 1
                  m_line.m_cntr = SUBSTR(line.i,8,80)
               END
               ELSE skip_lines = 2
            END
            ELSE skip_lines = skip_lines - 1
         END
      END
   END
END

/* Letztes Member noch wegschreiben --------------------------------- */
IF member_alt /= '' THEN CALL Wegschreiben

EXIT

/* ================================================================== */

/* Wegschreiben des aktuellen Members ------------------------------- */
Wegschreiben:
   dsn = STRIP(dsn_2,"T","'") !! "("member_alt")'"  /* <<< || oder !! */

   SAY "Writeing" dsn
   "ALLOC DD(dd2) DSN("dsn") SHR REUSE"
   "EXECIO" m_cntr "DISKW dd2 (FINIS STEM m_line.)"
   "FREE DD(dd2)"
RETURN