aboutsummaryrefslogtreecommitdiff
path: root/pkg/utilities/nttools/tedit/paste.x
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /pkg/utilities/nttools/tedit/paste.x
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'pkg/utilities/nttools/tedit/paste.x')
-rw-r--r--pkg/utilities/nttools/tedit/paste.x142
1 files changed, 142 insertions, 0 deletions
diff --git a/pkg/utilities/nttools/tedit/paste.x b/pkg/utilities/nttools/tedit/paste.x
new file mode 100644
index 00000000..f4c9735d
--- /dev/null
+++ b/pkg/utilities/nttools/tedit/paste.x
@@ -0,0 +1,142 @@
+include <tbset.h>
+include "screen.h"
+include "table.h"
+include "paste.h"
+
+define char_ 90 # goto label
+define EXTRA_SPACE 20 # extra row length & col descr space
+
+# CLS_PASTE -- Close the paste table and free the descriptor
+
+procedure cls_paste (scr)
+
+pointer scr # u: Screen descriptor
+#--
+pointer sp, fname, paste
+
+string nodelete "Could not delete paste table"
+
+begin
+ paste = TED_PASTE(scr)
+ if (paste == NULL)
+ return
+
+ call smark (sp)
+ call salloc (fname, SZ_FNAME, TY_CHAR)
+
+ call tbtnam (TED_PSTPTR(paste), Memc[fname], SZ_FNAME)
+ call tbtclo (TED_PSTPTR(paste))
+
+ iferr (call delete (Memc[fname]))
+ call warn2_prompt (scr, nodelete, Memc[fname])
+
+ call mfree (paste, TY_STRUCT)
+ TED_PASTE(scr) = NULL
+ call sfree (sp)
+
+end
+
+# MOVE_PASTE -- Move rows to or from the paste table
+
+procedure move_paste (itp, otp, irow, orow, ncopy)
+
+pointer itp # i: pointer to descriptor for input table
+pointer otp # i: pointer to descriptor for output table
+int irow # i: first row of input table to be copied
+int orow # i: row number of first output row
+int ncopy # i: number of rows to copy
+#--
+int jrow, krow
+
+begin
+ krow = orow
+ do jrow = irow, irow+ncopy-1 {
+ call tbrcpy (itp, otp, jrow, krow)
+ krow = krow + 1
+ }
+end
+
+# OPN_PASTE -- Open the paste table
+
+pointer procedure opn_paste (scr)
+
+pointer scr # u: Screen descriptor
+pointer paste # o: Paste descriptor
+#--
+int try, junk, ncol
+pointer sp, oldtab, newtab, newdir, tab, tp, pp
+pointer fname
+
+int tbpsta(), tbparse()
+pointer fnldir(), tbtopn()
+
+string nopaste "Cannot create paste table. Command aborted."
+
+begin
+ # Allocate dynamic memory for file names
+
+ call smark (sp)
+ call salloc (oldtab, SZ_FNAME, TY_CHAR)
+ call salloc (newtab, SZ_FNAME, TY_CHAR)
+ call salloc (newdir, SZ_FNAME, TY_CHAR)
+ call salloc (fname, SZ_FNAME, TY_CHAR)
+
+ # Get table name (used to build paste table name)
+
+ tab = TED_TABLE(scr)
+ tp = TED_TABPTR(tab)
+
+ call tbtnam (tp, Memc[oldtab], SZ_FNAME)
+ junk = tbparse (Memc[oldtab], Memc[fname], Memc[newdir], SZ_FNAME,
+ junk) # added by PEH, 1998 Apr 15
+ junk = fnldir (Memc[fname], Memc[newdir], SZ_FNAME)
+
+ # Try to open the paste table in the same directory as the
+ # temporary table. If this doesn't work, try the tmp$ directory
+
+ pp = NULL
+ do try = 1, 2 {
+ call strcat ("paste", Memc[newdir], SZ_FNAME)
+ call mktemp (Memc[newdir], Memc[newtab], SZ_FNAME)
+
+ ifnoerr (pp = tbtopn (Memc[newtab], NEW_COPY, tp))
+ break
+
+ call strcpy ("tmp$", Memc[newdir], SZ_FNAME)
+ }
+
+ if (pp == NULL) {
+ call warn1_prompt (scr, nopaste)
+ TED_PASTE(scr) = NULL
+ return (NULL)
+ }
+
+ # Set the parameters of the paste table, then create it
+
+ ncol = tbpsta (tp, TBL_MAXCOLS)
+
+ call tbpset (pp, TBL_WHTYPE, TBL_TYPE_S_ROW)
+ call tbpset (pp, TBL_INCR_ROWLEN, EXTRA_SPACE)
+ call tbpset (pp, TBL_MAXCOLS, ncol + EXTRA_SPACE)
+ call tbpset (pp, TBL_MAXPAR, 0) # no header parameters
+
+ iferr (call tbtcre (pp)) {
+ call warn1_prompt (scr, nopaste)
+ TED_PASTE(scr) = NULL
+ return (NULL)
+ }
+
+ # Create paste table descriptor
+
+ call malloc (paste, TED_PSTLEN, TY_STRUCT)
+ TED_PSTPTR(paste) = pp
+ TED_PSTROWS(paste) = 0
+
+ # Update the screen structure and return the paste descriptor
+
+ TED_PASTE(scr) = paste
+
+ call sfree (sp)
+ return (paste)
+
+end