aboutsummaryrefslogtreecommitdiff
path: root/pkg/system/movefiles.x
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /pkg/system/movefiles.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'pkg/system/movefiles.x')
-rw-r--r--pkg/system/movefiles.x52
1 files changed, 52 insertions, 0 deletions
diff --git a/pkg/system/movefiles.x b/pkg/system/movefiles.x
new file mode 100644
index 00000000..32842f61
--- /dev/null
+++ b/pkg/system/movefiles.x
@@ -0,0 +1,52 @@
+# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+
+include <error.h>
+
+# MOVEFILES -- Move a set of files to another directory. If the destination
+# is not a directory it is a fatal error. Ambiguous directory specifications
+# are resolved in favor of subdirectories, rather than logical directories.
+
+procedure t_movefiles()
+
+bool verbose
+int list, root_len
+pointer sp, fname, newdir, pathname, newname, junkstr
+bool clgetb()
+int clpopni(), clgfil(), fnldir(), isdirectory()
+
+begin
+ call smark (sp)
+ call salloc (fname, SZ_FNAME, TY_CHAR)
+ call salloc (newdir, SZ_FNAME, TY_CHAR)
+ call salloc (pathname, SZ_PATHNAME, TY_CHAR)
+ call salloc (newname, SZ_PATHNAME, TY_CHAR)
+ call salloc (junkstr, SZ_FNAME, TY_CHAR)
+
+ list = clpopni ("files")
+ call clgstr ("newdir", Memc[newdir], SZ_FNAME)
+ verbose = clgetb ("verbose")
+
+ if (isdirectory (Memc[newdir], Memc[pathname], SZ_PATHNAME) == 0) {
+ call strcat ("$", Memc[newdir], SZ_FNAME)
+ if (isdirectory (Memc[newdir], Memc[pathname], SZ_PATHNAME) == 0)
+ call error (1, "destination is not a directory")
+ }
+
+ while (clgfil (list, Memc[fname], SZ_FNAME) != EOF) {
+ call strcpy (Memc[pathname], Memc[newname], SZ_PATHNAME)
+ root_len = fnldir (Memc[fname], Memc[junkstr], SZ_FNAME)
+ call strcat (Memc[fname+root_len], Memc[newname], SZ_PATHNAME)
+
+ if (verbose) {
+ call eprintf ("%s -> %s\n")
+ call pargstr (Memc[fname])
+ call pargstr (Memc[newname])
+ }
+
+ iferr (call rename (Memc[fname], Memc[newname]))
+ call erract (EA_WARN)
+ }
+
+ call clpcls (list)
+ call sfree (sp)
+end