aboutsummaryrefslogtreecommitdiff
path: root/lib/plio.h
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 /lib/plio.h
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'lib/plio.h')
-rw-r--r--lib/plio.h186
1 files changed, 186 insertions, 0 deletions
diff --git a/lib/plio.h b/lib/plio.h
new file mode 100644
index 00000000..1cd37ed3
--- /dev/null
+++ b/lib/plio.h
@@ -0,0 +1,186 @@
+# PLIO.H -- Package internal global defines for the Pixel List package.
+
+# Size limiting definitons
+define PL_MAXDIM 7 # maximum mask dimensionality
+define PL_MAGICVAL 2014 # identifies mask and version no.
+define PL_LLBUFLEN 512 # initial llbuf size
+define PL_STARTINC 512 # starting llbuf increment on overflow
+define PL_MAXINC 4096 # maximum increment per resize
+define PL_MAXFREE 40 # max percent free (wasted) space
+define PL_MAXDEPTH 27 # max mask depth, bits
+define PL_DEFMAXLINE 1024 # default max elements per [lr]list
+
+# Main PL descriptor.
+define LEN_PLDES 28
+define MLO 3 # must update PLSET.H too if changed
+
+define PL_MAGIC Memi[$1] # magic / version no.
+define PL_PRIVATE1 Memi[$1+1] # private data for client
+define PL_PRIVATE2 Memi[$1+2] # more private data for client
+define PL_MAXLINE Memi[$1+MLO] # max elements per [lr]list [PLSET.H]
+define PL_MAXVAL Memi[$1+4] # max pixel value (2**N - 1)
+define PL_NAXES Memi[$1+5] # dimensionality
+define PL_AXLEN Memi[$1+6+$2-1] # length of each axis
+define PL_PLANE Memi[$1+13+$2-1] # active plane (pl_setplane)
+define PL_LLBP Memi[$1+20] # line list bufptr
+define PL_LLOP Memi[$1+21] # next location in llbuf
+define PL_LLLEN Memi[$1+22] # current llbuf length
+define PL_LLFREE Memi[$1+23] # amount of free space in list
+define PL_LLNUPDATES Memi[$1+24] # number of list modifications
+define PL_LLINC Memi[$1+25] # current llbuf increment on overflow
+define PL_NLP Memi[$1+26] # number of line pointers
+define PL_LPP Memi[$1+27] # ptr to array of LL offsets
+
+define PM_REFIM PL_PRIVATE1($1) # reference image
+define PM_MAPXY PL_PRIVATE2($1) # need to transform coords
+
+# Handy macros.
+define Ref (PL_LLBP($1)+$2)# llbuf offset -> pointer
+define LL Mems[Ref($1,$2)]# pointer -> array reference
+define PL_LP Memi[PL_LPP($1)+$2-1]
+define PL_EMPTYLINE 0 # llbuf offset of the empty line
+define PL_NEEDCOMPRESS ((PL_LLFREE($1)*100/PL_LLOP($1))>PL_MAXFREE)
+define LL_MAXLEN PL_MAXLINE($1)
+define RL_MAXLEN (PL_MAXLINE($1)*3)
+define MV ((2**min($1,27))-1)
+
+# Handy rasterop decoding macros.
+define R_OPCODE and($1,17B)
+define R_DATA ($1/100B)
+define R_NEED_DST (and(xor(($1)/2,($1)),5)!=0)
+define R_NEED_SRC (and(xor(($1)/4,($1)),3)!=0)
+define R_NOTDST (and($1,6)==4)
+define R_NOTSRC (and($1,6)==2)
+
+# Internal rasterop definitions (PIX_SRC=14B, PIX_DST=12B, CLR=0B, SET=17B).
+define PIX_NOTSRC 03B
+define PIX_NOTDST 05B
+define PIX_SRC_AND_DST 10B
+define PIX_SRC_OR_DST 16B
+define PIX_SRC_XOR_DST 06B
+define PIX_SRC_AND_NOTDST 04B
+define PIX_SRC_OR_NOTDST 15B
+define PIX_NOTSRC_AND_DST 02B
+define PIX_NOTSRC_OR_DST 13B
+define PIX_NOT_SRC_AND_DST 07B
+define PIX_NOT_SRC_OR_DST 01B
+define PIX_NOT_SRC_XOR_DST 11B
+
+
+# Macro defines for the line list data format.
+
+# ----- Old/original line list header definitions. This version uses a
+# ----- three element header, but the maximum values are limited to 32K by
+# ----- the use of type short.
+
+# Line list definitions (accessed as a short integer array).
+define OLL_NREF $1[1] # number of references
+define OLL_BLEN $1[2] # length of buffer containing LL
+define OLL_LEN $1[3] # length of encoded line list
+define OLL_FIRST 4 # first data range entry in list
+
+# Line list definitions (accessed via a short integer pointer).
+define OLP_NREF Mems[$1] # number of references
+define OLP_BLEN Mems[$1+1] # length of buffer containing LL
+define OLP_LEN Mems[$1+2] # length of encoded line list
+define OLP_FIRST 3 # first data range entry in list
+
+
+# ----- New format line list header definitions. This version uses a
+# ----- variable length header and a version number to allow new encodings
+# ----- while retaining backwards compatibility.
+
+define LL_CURVERSION (-100) # LL version code (must be negative)
+define LL_OLDFORMAT (LL_VERSION($1) > 0)
+define LL_CURHDRLEN 7
+
+# Line list definitions (accessed as a short integer array).
+define LL_NREFS $1[1] # number of references
+define LL_HDRLEN $1[2] # length of encoded line list
+define LL_VERSION $1[3] # version number (negative)
+define LL_LENLO $1[4] # length of encoded line list
+define LL_LENHI $1[5] # length of encoded line list
+define LL_BLENLO $1[6] # length of LL buffer
+define LL_BLENHI $1[7] # length of LL buffer
+
+# Handy line list macros.
+define LL_NREF (int(LL_NREFS($1)))
+define LL_BLEN ((int(LL_BLENHI($1)))*32768+(int(LL_BLENLO($1))))
+define LL_SETBLEN LL_BLENLO($1)=mod($2,32768); LL_BLENHI($1)=($2)/32768
+define LL_LEN ((int(LL_LENHI($1)))*32768+(int(LL_LENLO($1))))
+define LL_SETLEN LL_LENLO($1)=mod($2,32768); LL_LENHI($1)=($2)/32768
+define LL_FIRST (LL_HDRLEN($1)+1)
+
+# Line list definitions (accessed as a short integer pointer).
+define LP_NREFS Mems[$1] # number of references
+define LP_HDRLEN Mems[$1+1] # length of encoded line list
+define LP_VERSION Mems[$1+2] # version number (negative)
+define LP_LENLO Mems[$1+3] # length of encoded line list
+define LP_LENHI Mems[$1+4] # length of encoded line list
+define LP_BLENLO Mems[$1+5] # length of LL buffer
+define LP_BLENHI Mems[$1+6] # length of LL buffer
+
+# Handy line list pointer macros.
+define LP_NREF (int(LP_NREFS($1)))
+define LP_BLEN (int(LP_BLENHI($1))*32768+int(LP_BLENLO($1)))
+define LP_SETBLEN LP_BLENLO($1)=mod($2,32768); LP_BLENHI($1)=($2)/32768
+define LP_LEN (int(LP_LENHI($1))*32768+int(LP_LENLO($1)))
+define LP_SETLEN LP_LENLO($1)=mod($2,32768); LP_LENHI($1)=($2)/32768
+define LP_FIRST (($1)+LP_HDRLEN($1))
+
+
+# Packed instruction decoding.
+define I_SHIFT 10000B # shift to encode/decode data bits
+define I_DATA and(int($1),7777B) # extract data
+define I_OPCODE (($1)/10000B) # extract opcode value
+define I_OPCODEMASK and(int($1),70000B) # extract opcode mask
+define I_DATAMAX 7777B # max data field value
+define I_PVMAX 777777777B # max mask pixel value (27 bits)
+
+# LL instruction opcodes.
+define I_ZN 0 # N zeros
+define I_HN 4 # N high values
+define I_PN 5 # N-1 zeros and 1 high value
+define I_SH 1 # set high value (2 words)
+define I_IH 2 # increment high value
+define I_DH 3 # decrement high value
+define I_IS 6 # increment and output 1 high value
+define I_DS 7 # decrement and output 1 high value
+
+# The LL instruction opcodes again, but as bitmasks this time.
+define M_ZN 00000B
+define M_HN 40000B
+define M_PN 50000B
+define M_SH 10000B
+define M_IH 20000B
+define M_DH 30000B
+define M_IS 60000B
+define M_DS 70000B
+
+# The following bit is set if the instruction changes the current position.
+define M_MOVE 40000B
+
+# PL external format descriptor (with some extra space).
+define LEN_PLEXTERN 20
+define PLE_MAGIC Memi[$1] # usual magic value
+define PLE_NAXES Memi[$1+1] # number of axes
+define PLE_AXLEN Memi[$1+2+$2-1] # length of each axis
+define PLE_LLOP Memi[$1+9] # next location in llbuf
+define PLE_LLLEN Memi[$1+10] # length of llbuf
+define PLE_NLP Memi[$1+11] # number of line pointers
+define PLE_NLPX Memi[$1+12] # length of compressed LP array
+define PLE_EXLEN Memi[$1+13] # length of full PLEXTERN structure
+define PLE_FLAGS Memi[$1+14] # flags for type of encoding
+define PLE_MAXLINE Memi[$1+15] # max elements per [lr]list
+define PLE_MAXVAL Memi[$1+16] # max pixel value
+
+# PLIO mask savefile descriptor.
+define PLIO_SVMAGIC 123126B # "SV"
+define LEN_SVDES 3
+define SV_MAGIC Memi[$1] # identifies file type
+define SV_TITLELEN Memi[$1+1] # title string length, including EOS
+define SV_MASKLEN Memi[$1+2] # encoded mask length, shorts
+
+# Internal symbols.
+define LOOP_DONE 1
+define LOOP_AGAIN 0