/******************************************************/
/* This program copies a STREAM file on disk to a     */
/* PRINT file, and formats the output with a page     */
/* header, and line numbers.                          */
/******************************************************/
copy: procedure options(main);

      declare
        (sysin, sourcefile, printfile) file,
        (pagesize, pagewidth, spaces, linenumber) fixed, 
        (line character(14), buff character(254)) varying;

      put list('^z    File to Print Copy Program');

      on endfile(sysin)
         go to typeover;

      typeover:
         put skip(5) list('How Many Lines Per Page?   ');
         get list(pagesize);

         put skip list('How Many Column Positions? ');
         get skip list(pagewidth);

      on error(1)
         begin;
           put list('Invalid Number, Type Integer');
           go to getnumber;
         end;
      getnumber:
         put skip list('Line Spacing (1=Single)?   ');
         get skip list(spaces);
         revert error(1);

      put skip list('Destination  Device/File:  ');
      get skip list(line);

      open file(printfile) print pagesize(pagesize)
           linesize(pagewidth) title(line);

      on undefinedfile(sourcefile)
         begin;
           put skip list('"',line,'" isn''t a Valid Name');
           go to retry;
         end;
      retry:
         put skip list('Source File to Print?      ');
         get list(line);
         open file(sourcefile) stream  environment(b(8000)) 
              title(line);
      on endfile(sourcefile)
         begin;
           put file(printfile) page;
           stop;
         end;

      on endfile(printfile)
         begin;
           put skip list('^g^g^g^g Disk is Full');
           stop;
         end;

      on endpage(printfile)
         begin;
           put file(printfile) page skip(2)
               list('PAGE',pageno(printfile));
           put file(printfile) skip(4);
         end;

      signal endpage(printfile);
      do linenumber = 1 repeat(linenumber + 1);
         get file (sourcefile) edit(buff) (a);
         put file (printfile) 
             edit(linenumber,'|',buff) (f(5),x(1),a(2),a);
         put file (printfile) skip(spaces);
      end;

end copy;


