From fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 8 Jul 2015 20:46:52 -0400 Subject: Initial commit --- noao/onedspec/smw/smwnewcopy.x | 58 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 noao/onedspec/smw/smwnewcopy.x (limited to 'noao/onedspec/smw/smwnewcopy.x') diff --git a/noao/onedspec/smw/smwnewcopy.x b/noao/onedspec/smw/smwnewcopy.x new file mode 100644 index 00000000..230ed205 --- /dev/null +++ b/noao/onedspec/smw/smwnewcopy.x @@ -0,0 +1,58 @@ +include + + +# SMW_NEWCOPY -- Make a new copy of an SMW structure. + +pointer procedure smw_newcopy (smw) + +pointer smw #I SMW pointer to copy +pointer new #O SMW copy + +int i, nspec +pointer mw_newcopy(), mw_sctran() + +begin + call calloc (new, SMW_LEN(SMW_NMW(smw)), TY_STRUCT) + call amovi (Memi[smw], Memi[new], SMW_LEN(SMW_NMW(smw))) + + if (SMW_APID(smw) != NULL) { + call malloc (SMW_APID(new), SZ_LINE, TY_CHAR) + call strcpy (Memc[SMW_APID(smw)], Memc[SMW_APID(new)], SZ_LINE) + } + + nspec = SMW_NSPEC(smw) + if (SMW_APS(smw) != NULL) { + call malloc (SMW_APS(new), nspec, TY_INT) + call amovi (Memi[SMW_APS(smw)], Memi[SMW_APS(new)], nspec) + } + if (SMW_BEAMS(smw) != NULL) { + call malloc (SMW_BEAMS(new), nspec, TY_INT) + call amovi (Memi[SMW_BEAMS(smw)], Memi[SMW_BEAMS(new)], nspec) + } + if (SMW_APLOW(smw) != NULL) { + call malloc (SMW_APLOW(new), 2*nspec, TY_REAL) + call amovr (Memr[SMW_APLOW(smw)], Memr[SMW_APLOW(new)], 2*nspec) + } + if (SMW_APHIGH(smw) != NULL) { + call malloc (SMW_APHIGH(new), 2*nspec, TY_REAL) + call amovr (Memr[SMW_APHIGH(smw)], Memr[SMW_APHIGH(new)], 2*nspec) + } + if (SMW_APIDS(smw) != NULL) { + call calloc (SMW_APIDS(new), nspec, TY_POINTER) + do i = 0, nspec-1 { + if (Memi[SMW_APIDS(smw)+i] != NULL) { + call malloc (Memi[SMW_APIDS(new)+i], SZ_LINE, TY_CHAR) + call strcpy (Memc[Memi[SMW_APIDS(smw)+i]], + Memc[Memi[SMW_APIDS(new)+i]], SZ_LINE) + } + } + } + + do i = 0, SMW_NMW(smw)-1 + SMW_MW(new,i) = mw_newcopy (SMW_MW(smw,i)) + + if (SMW_PDIM(smw) > 1) + SMW_CTLP(new) = mw_sctran (SMW_MW(new,0), "logical", "physical", 2) + + return (new) +end -- cgit