On Mon, 15 Aug 2016, Peter Coghlan wrote:

The most likely to work solutions are to use $ SET FILE /ATTRIBUTES or
Joe Meadows' FILE utility to change the file attributes from fixed 512 to
stream format.  The CR-LF pairs in the file will then be treated as record
delimiters and the file will then be usable.  Alternatively, delete the
file and transfer it again selecting a text transfer mode rather than
a binary transfer mode.

Yes, you are right.  I stopped making that particular mistake many years
ago and I had forgotten.  So back in 1986 I wrote a bit of garbage code
to fix that problem in the crudest manner possible.

Namely this:

/* Name:        clean_cp.c
 * Purpose:     copy an rms file and ignore record length
 * Author:      Richard Loken
 * Date:        17-Dec-1986
 * Modified:    30-Sep-1987 - RLL   Throw out any \r's that may be in the file.
 *              07-Oct-1987 - RLL   and most other non printing characters.
 *              07-Sep-1994 - RLL   Hacked for OpenVMS AXP and DEC C
 */

#include    stdio
#include    file
#include    stat
#include    stdlib
#include    "au_src:[lib]extern_lib.h"

#define     ERROR   (-1)
#define     MAXSTR  256
#define     TOTAL   2           /* number of arguments expected */

char    prompt[TOTAL][7] = {"input", "output"}; /* error message array */

main(argc, argv)

int     argc;
char    *argv[];

{
    char    files[TOTAL][MAXSTR];   /* names of input and output files  */
    char    program[MAXSTR];        /* name of the executable file      */

    FILE    *fin, *fout;            /* input rms file and converted out */

    int     c;
    int     count;                  /* character count for pars_arg()   */
    int     i, j;
    unsigned fsize;                 /* size of input file               */

    /*  initialize the variables    */

    i = 0;
    j = 0;

    short_path(argv[0], program);   /* get rid of device & directories      */
    ltou(program);                  /* lets capitalize it               */

    /*  parse any arguments to learn the file names */

    while(i < TOTAL)
    {
        files[i++][0] = '\0';
    }

    if((argc > 1) && (argc <= (TOTAL + 1)))
    {
        for(i = 1; i < argc; i++)
        {
            count = 0;

            while(j < TOTAL)
            {
                if((count = pars_arg(argv[i], count, files[j++])) == 0)
                {
                    break;
                }
                else if(count == EOF)
                {
                    j--;
                    break;
                }
            }
        }
    }

    /*  if we don't have enough file names, prompt for the rest */

    for(j = 0; j < TOTAL; j++)
    {
        while(files[j][0] == '\0')
        {
            fprintf(stderr, "%s file: ", prompt[j]);
            gets(files[j]);
        }
    }

    /*  open input and output files */

    if((fin = fopen(files[0], "r")) == NULL)
    {
        fprintf(stderr, "\n%s\nCANNOT OPEN  %s\n", program, files[0]);
        exit(4);            /* a fatal error        */
    }

    if((fout = fopen(files[1], "w")) == NULL)
    {
        fprintf(stderr, "\n%s\nCANNOT OPEN  %s\n", program, files[1]);
        exit(4);            /* a fatal error        */
    }

    /*  crude, copy char by char until the end  */

    while((c = getc(fin)) != EOF)
    {
        putc(c, fout);
    }

    fclose(fin);
    fclose(fout);
}

--
  Richard Loken VE6BSV, Systems Programmer - VMS   : "...underneath those
  Athabasca University                             : tuques we wear, our
  Athabasca, Alberta Canada                        : heads are naked!"
  ** rllo...@telus.net **                         :    - Arthur Black

Reply via email to