diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
commit | fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch) | |
tree | bdda434976bc09c864f2e4fa6f16ba1952b1e555 /sys/mtio/mtalloc.x | |
download | iraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz |
Initial commit
Diffstat (limited to 'sys/mtio/mtalloc.x')
-rw-r--r-- | sys/mtio/mtalloc.x | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/sys/mtio/mtalloc.x b/sys/mtio/mtalloc.x new file mode 100644 index 00000000..2e21be1c --- /dev/null +++ b/sys/mtio/mtalloc.x @@ -0,0 +1,64 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include <time.h> +include "mtio.h" + +# MTALLOCATE -- "Allocate" a tape drive by writing the lock file. We do +# not actually call the OS to physically allocate the drive; that is done +# by our caller (e.g., xallocate, in etc$xalloc.x). The lock file is no longer +# used to gain exclusive access to the device; it is now used only to keep +# track of the tape position after process termination. + +procedure mtallocate (mtname) + +char mtname[ARB] #I device name + +int fd, junk +pointer sp, lockfile, mtowner, userid, timestr, device +errchk open, mtparse +long clktime() +int open() + +begin + call smark (sp) + call salloc (device, SZ_FNAME, TY_CHAR) + call salloc (lockfile, SZ_FNAME, TY_CHAR) + call salloc (mtowner, SZ_FNAME, TY_CHAR) + call salloc (userid, SZ_FNAME, TY_CHAR) + call salloc (timestr, SZ_TIME, TY_CHAR) + + # Get name of lockfile used by the given device. + call mtparse (mtname, Memc[device], SZ_FNAME, junk, junk, junk, 0) + call mt_glock (mtname, Memc[lockfile], SZ_FNAME) + + # Open lock file and write out unit, owner, time allocated, etc. + # Overwrite any existing lockfile. We are called only after + # physically allocating the device at the host system level + # (and are not called if the device is already allocated), so this + # is safe. + + iferr (call delete (Memc[lockfile])) + ; + fd = open (Memc[lockfile], NEW_FILE, TEXT_FILE) + + call cnvtime (clktime(long(0)), Memc[timestr], SZ_TIME) + call getuid (Memc[userid], SZ_FNAME) + + call fprintf (fd, "# Magtape unit %s status %s user %s\n") + call pargstr (Memc[device]) + call pargstr (Memc[timestr]) + call pargstr (Memc[userid]) + + # Assume initially that the tape position is undefined. This will + # cause the tape to be rewound on the first open, and thereafter + # the position will be defined unless an i/o error occurs. + + call fprintf (fd, "file = -1\n") + call fprintf (fd, "record = -1\n") + call fprintf (fd, "nfiles = 0\n") + call fprintf (fd, "tapeused = 0 Kb\n") + call fprintf (fd, "pflags = 0\n") + + call close (fd) + call sfree (sp) +end |