
#include <stdio.h>
#include <errno.h>
   void syserr (msg)
   char *msg;
   {
      extern int errno,sys_nerr;
      extern char *sys_errlist[];

      fprintf (stderr," ERROR:%s,(%d",msg,errno);
      if (errno>0 && errno<sys_nerr)
         fprintf (stderr,";%s)\n",sys_errlist[errno]);
      else
         fprintf (stderr,")\n");
      exit(1);
   }

   copen_ (name,length)
   /*   FORTRAN callable routine to "open" a file for read/write  */
   char name[];
   long int length[1];
   {
      long int unit[1];
      int fd;
      char file[80];
      int i,n;

      n = (int) length[0];
      for (i=0; i<=n; i++)
          file[i] = name[i];
      file[n] = '\0';

      if ( (fd = open (file,2)) == -1)
         syserr ("copen");
      unit[0] = (long int) fd;
      return (unit[0]);
   }

   ccreat_ (name,length)
   /*   FORTRAN callable routine to "create" a file   */
   /*   (Permissions defaulted to 644 (octal))        */
   char name[];
   long int length[1];
   {
      long int unit[1];
      int fd;
      char file[80];
      int i,n;

      n = (int) length[0];
      for (i=0; i<=n; i++)
          file[i] = name[i];
      file[n] = '\0';

      if ( (fd = creat (file,0644)) == -1)
         syserr ("ccreat");
      unit[0] = (long int) fd;
      return (unit[0]);
   }

   cclos_ (unit)
   /*   FORTRAN callable routine to "close" a file   */
   long int unit[1];
   {
      long int ioerr;
      int fd,ierr;

      fd = (int) unit[0];
      if ( (ierr = close (fd)) == -1)
         syserr ("cclos");
      ioerr = (long int) ierr;
      return (ioerr);
   }

   crewnd_ (unit)
   /*   FORTRAN callable routine to "rewind" a file   */
   long int unit[1];
   {
      long int ioerr;
      int fd,ierr;

      fd = (int) unit[0];
      if ( (ierr = lseek (fd,0L,0)) == -1)
         syserr ("crewnd");
      ioerr = (long int) ierr;
      return (ioerr);
   }

   cwrit_ (unit,nbuf,buf)
   /*   FORTRAN callable routine to "write" character buffer   */
   long int unit[1],nbuf[1];
   char *buf;
   {
      long int ioerr;
      int fd,n,ierr;

      fd = (int) unit[0];
      n = (int) nbuf[0];
      if ( (ierr = write (fd,buf,n)) == -1)
         syserr ("cwrit");
      ioerr = (long int) ierr;
      return (ioerr);
   } 

   cread_ (unit,nbuf,buf)
   /*   FORTRAN callable routine to "read" character buffer   */
   long int unit[1],nbuf[1];
   char *buf;
   {
      long int ioerr;
      int fd,ni,nr;

      fd = (int) unit[0];
      ni = (int) nbuf[0];
      if ( (nr = read (fd,buf,ni)) == -1)
          syserr ("cread");
      ioerr = (long int) nr;
      return (ioerr);
   }

   copenr_ (name,length)
   /*   FORTRAN callable routine to "open" a file for read */
   char name[];
   long int length[1];
   {
      long int unit[1];
      int fd;
      char file[80];
      int i,n;

      n = (int) length[0];
      for (i=0; i<=n; i++)
          file[i] = name[i];
      file[n] = '\0';

      if ( (fd = open (file,0)) == -1)
         syserr ("copen");
      unit[0] = (long int) fd;
      return (unit[0]);
   }

   cbacks_ (unit,rlen)
   /*   FORTRAN callable routine to "rewind" a file   */
   long int unit[1], rlen[1];
   {
      long int ioerr;
      int fd,ierr;

      fd = (int) unit[0];
      if ( (ierr = lseek (fd,-rlen[0],1)) == -1)
         syserr ("cbacks");
      ioerr = (long int) ierr;
      return (ioerr);
   }


