I have a C program, written by someone long gone, last complied in 2004 or so. 
Running under z/OS 1.13, it reports reading/writing zero records. STEPLIB of 
CEE.SCEERUN from z/OS 1.11 returns it to its previous working behavior.
I am opening a PMR next, but thought I would ask here also. Entire program 
follows

/*  This program works like the Unix tf -d command. It removes the */
/*  special character (hex 4f) from records, thus leaving a clean, */
/*  comma-delimited record in the output file.                     */
/*                                                                 */
/*  Modified 04/08/2004 by DMD; force abend if write error detected*/
/*  Modified 08/23/2004 by DMD; remove carriage return & line feed.*/
/*                                                                 */
#include <stdio.h>
#include <string.h>
#define  MAXREC 5000
main (){
  int  rec_in_cnt;
  int  rec_out_cnt;
  char rec_in[MAXREC];
  char rec_out[MAXREC];
  char delimitr[1]={0x00};
  char comma   [1]=",";
  char NL      [1]={0x15};  /* new-line        */
  char CR      [1]={0x0D};  /* carriage return */
  char blnks[5000];
  FILE * File_Out;
  FILE * File_In;
  int in_cnt, out_cnt;
  int    incrmt, inc, blnk_cnt, recout_siz, FEOF;

  for (inc=0;inc<MAXREC;inc++) blnks[inc]=0x40; /* init blank array */

  File_In = fopen("dd:stdin","rb,recfm=*,type=record");
  if (!File_In){
      printf("\n Could not open file STDIN. %d.\n",ferror);
      FEOF=1; } /* force exit */

  File_Out = fopen("dd:stdout","wb,recfm=*,type=record");
  if (!File_Out){
      printf("\n Could not open file STDOUT. %d.\n,ferror");
      FEOF=1; } /* force exit */

  while ( (! feof(File_In)) && (!FEOF) ){
    in_cnt = fread(rec_in,sizeof(char),MAXREC,File_In);
    for(inc=0;inc<in_cnt;inc++)rec_out[inc]=0x40;  /* clean buff-out */
      if (! feof(File_In)) {
        rec_in_cnt++;
        if ( !ferror(File_In) ){
         for (incrmt=0,inc=0,blnk_cnt=0;incrmt<in_cnt;incrmt++) {
          if (strncmp(&rec_in[incrmt],delimitr,1)) /* if ! fill char */
            if (strncmp(&rec_in[incrmt],blnks,1)){ /* if ! fill blnk */
              if(!(strncmp(&rec_in[incrmt],comma,1))) /* if is comma */
                 blnk_cnt=0;                       /* drop prev blnks*/
              else {
                memcpy(&rec_out[inc],&blnks[1],blnk_cnt); /* do blnk */
                inc+=blnk_cnt; blnk_cnt=0;       /* save & reset cnt */
              }  /* end of ELSE condition */
              if ( (strncmp(&rec_in[incrmt],NL,1))  /* not newline */
              && (strncmp(&rec_in[incrmt],CR,1)) )  /* not car-rtn */
              memcpy(&rec_out[inc++],&rec_in[incrmt],1); /* do char  */
              else memcpy(&rec_out[inc++],&blnks[1],1);  /* blank it */
            }
            else blnk_cnt++;                      /* count the blank */
         }  /* end of FOR loop     */
      recout_siz = fwrite(rec_out,sizeof(char),in_cnt,File_Out);
      if (recout_siz < in_cnt) { /* if we didn't write whole record */
        printf("Write error encountered."); /* for example B37. */
        abort();                            /* force abend.     */
        }
        rec_out_cnt++;
      }    /* end of IF ferror condition */
        else printf("\n Error reading input file.\n");
    }    /* end of IF feof condition */
  }      /* end of WHILE condition */
 printf("Record counts for data compression utility GNDU2200.\n\n");
 printf("Records read %d.\nRecords written %d.",rec_in_cnt,rec_out_cnt);
 fclose(File_In);
 fclose(File_Out);
}  /* end of MAIN  */

Dave Gibney
Information Technology Services
Washington State University


----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to