wcslib (8.2.2)

(root)/
share/
doc/
wcslib-8.2.2/
html/
tab_8h.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>WCSLIB: tab.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">WCSLIB<span id="projectnumber">&#160;8.2.2</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_af99bb3c152a306abd27951285ad1127.html">C</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a>  </div>
  <div class="headertitle"><div class="title">tab.h File Reference</div></div>
</div><!--header-->
<div class="contents">

<p><a href="tab_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtabprm.html">tabprm</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tabular transformation parameters.  <a href="structtabprm.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a9c80120944556169d230d4cd051d88cb" id="r_a9c80120944556169d230d4cd051d88cb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a9c80120944556169d230d4cd051d88cb">TABLEN</a>&#160;&#160;&#160;(sizeof(struct <a class="el" href="structtabprm.html">tabprm</a>)/sizeof(int))</td></tr>
<tr class="memdesc:a9c80120944556169d230d4cd051d88cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Size of the tabprm struct in <em>int</em> units.  <br /></td></tr>
<tr class="separator:a9c80120944556169d230d4cd051d88cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8b57d9bacbabd2b516d77220cdb6167d" id="r_a8b57d9bacbabd2b516d77220cdb6167d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a8b57d9bacbabd2b516d77220cdb6167d">tabini_errmsg</a>&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td></tr>
<tr class="memdesc:a8b57d9bacbabd2b516d77220cdb6167d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:a8b57d9bacbabd2b516d77220cdb6167d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a27460f165fb03a075a1c6c6a48f33c62" id="r_a27460f165fb03a075a1c6c6a48f33c62"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a27460f165fb03a075a1c6c6a48f33c62">tabcpy_errmsg</a>&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td></tr>
<tr class="memdesc:a27460f165fb03a075a1c6c6a48f33c62"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:a27460f165fb03a075a1c6c6a48f33c62"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abf96fe5488df6796ec2606b974f330fe" id="r_abf96fe5488df6796ec2606b974f330fe"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#abf96fe5488df6796ec2606b974f330fe">tabfree_errmsg</a>&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td></tr>
<tr class="memdesc:abf96fe5488df6796ec2606b974f330fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:abf96fe5488df6796ec2606b974f330fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae2ee098afabb7a7d225f930276ffb441" id="r_ae2ee098afabb7a7d225f930276ffb441"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#ae2ee098afabb7a7d225f930276ffb441">tabprt_errmsg</a>&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td></tr>
<tr class="memdesc:ae2ee098afabb7a7d225f930276ffb441"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:ae2ee098afabb7a7d225f930276ffb441"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4abf39ca4cfc2ea073bffdbb98caa46d" id="r_a4abf39ca4cfc2ea073bffdbb98caa46d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a4abf39ca4cfc2ea073bffdbb98caa46d">tabset_errmsg</a>&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td></tr>
<tr class="memdesc:a4abf39ca4cfc2ea073bffdbb98caa46d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:a4abf39ca4cfc2ea073bffdbb98caa46d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a141c3365f0364c01237aeeb93ddb717e" id="r_a141c3365f0364c01237aeeb93ddb717e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a141c3365f0364c01237aeeb93ddb717e">tabx2s_errmsg</a>&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td></tr>
<tr class="memdesc:a141c3365f0364c01237aeeb93ddb717e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:a141c3365f0364c01237aeeb93ddb717e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49872082d67e357c5c68a633824133ae" id="r_a49872082d67e357c5c68a633824133ae"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a49872082d67e357c5c68a633824133ae">tabs2x_errmsg</a>&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td></tr>
<tr class="memdesc:a49872082d67e357c5c68a633824133ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:a49872082d67e357c5c68a633824133ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:abd68f3b717dcf0fcd0078b9a4204f2ed" id="r_abd68f3b717dcf0fcd0078b9a4204f2ed"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#abd68f3b717dcf0fcd0078b9a4204f2ed">tab_errmsg_enum</a> { <br />
&#160;&#160;<a class="el" href="tab_8h.html#abd68f3b717dcf0fcd0078b9a4204f2eda42a664a8df3b0a485f49eb0e7c8108cd">TABERR_SUCCESS</a> = 0
, <a class="el" href="tab_8h.html#abd68f3b717dcf0fcd0078b9a4204f2edaa0705873598b9fa5bf3b9afbc598a6bc">TABERR_NULL_POINTER</a> = 1
, <a class="el" href="tab_8h.html#abd68f3b717dcf0fcd0078b9a4204f2eda1e503c059ddfe8f4aca37d335f7271f8">TABERR_MEMORY</a> = 2
, <a class="el" href="tab_8h.html#abd68f3b717dcf0fcd0078b9a4204f2eda09c02b9ffff721d3f2dd64c318d7c38b">TABERR_BAD_PARAMS</a> = 3
, <br />
&#160;&#160;<a class="el" href="tab_8h.html#abd68f3b717dcf0fcd0078b9a4204f2edac6f6b4c9eca2bd36b0bf2f89309f9297">TABERR_BAD_X</a> = 4
, <a class="el" href="tab_8h.html#abd68f3b717dcf0fcd0078b9a4204f2eda9d77712eeed3ab7d2bf25e5251c9451b">TABERR_BAD_WORLD</a> = 5
<br />
 }</td></tr>
<tr class="separator:abd68f3b717dcf0fcd0078b9a4204f2ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:abb7920acdfb83179d3bac65035144c02" id="r_abb7920acdfb83179d3bac65035144c02"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#abb7920acdfb83179d3bac65035144c02">tabini</a> (int alloc, int M, const int K[], struct <a class="el" href="structtabprm.html">tabprm</a> *tab)</td></tr>
<tr class="memdesc:abb7920acdfb83179d3bac65035144c02"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor for the tabprm struct.  <br /></td></tr>
<tr class="separator:abb7920acdfb83179d3bac65035144c02"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae403ff0b740916989c7386728df001c8" id="r_ae403ff0b740916989c7386728df001c8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#ae403ff0b740916989c7386728df001c8">tabmem</a> (struct <a class="el" href="structtabprm.html">tabprm</a> *tab)</td></tr>
<tr class="memdesc:ae403ff0b740916989c7386728df001c8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Acquire tabular memory.  <br /></td></tr>
<tr class="separator:ae403ff0b740916989c7386728df001c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a87b3a2a84bab396a528af8382ce9ad04" id="r_a87b3a2a84bab396a528af8382ce9ad04"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a87b3a2a84bab396a528af8382ce9ad04">tabcpy</a> (int alloc, const struct <a class="el" href="structtabprm.html">tabprm</a> *tabsrc, struct <a class="el" href="structtabprm.html">tabprm</a> *tabdst)</td></tr>
<tr class="memdesc:a87b3a2a84bab396a528af8382ce9ad04"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy routine for the tabprm struct.  <br /></td></tr>
<tr class="separator:a87b3a2a84bab396a528af8382ce9ad04"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a61ff724eb7c412e42da7362a5d7a093d" id="r_a61ff724eb7c412e42da7362a5d7a093d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a61ff724eb7c412e42da7362a5d7a093d">tabcmp</a> (int cmp, double tol, const struct <a class="el" href="structtabprm.html">tabprm</a> *tab1, const struct <a class="el" href="structtabprm.html">tabprm</a> *tab2, int *equal)</td></tr>
<tr class="memdesc:a61ff724eb7c412e42da7362a5d7a093d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare two tabprm structs for equality.  <br /></td></tr>
<tr class="separator:a61ff724eb7c412e42da7362a5d7a093d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f3501cc592c78e0f2cb9922466589f2" id="r_a0f3501cc592c78e0f2cb9922466589f2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a0f3501cc592c78e0f2cb9922466589f2">tabfree</a> (struct <a class="el" href="structtabprm.html">tabprm</a> *tab)</td></tr>
<tr class="memdesc:a0f3501cc592c78e0f2cb9922466589f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor for the tabprm struct.  <br /></td></tr>
<tr class="separator:a0f3501cc592c78e0f2cb9922466589f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08b599920800bd4380d21d07e0026fb1" id="r_a08b599920800bd4380d21d07e0026fb1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a08b599920800bd4380d21d07e0026fb1">tabsize</a> (const struct <a class="el" href="structtabprm.html">tabprm</a> *tab, int size[2])</td></tr>
<tr class="memdesc:a08b599920800bd4380d21d07e0026fb1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the size of a tabprm struct.  <br /></td></tr>
<tr class="separator:a08b599920800bd4380d21d07e0026fb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6b3768349e9a5e925aab24effddc584f" id="r_a6b3768349e9a5e925aab24effddc584f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a6b3768349e9a5e925aab24effddc584f">tabprt</a> (const struct <a class="el" href="structtabprm.html">tabprm</a> *tab)</td></tr>
<tr class="memdesc:a6b3768349e9a5e925aab24effddc584f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Print routine for the tabprm struct.  <br /></td></tr>
<tr class="separator:a6b3768349e9a5e925aab24effddc584f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a661ef05192acc3523a86499741c2e735" id="r_a661ef05192acc3523a86499741c2e735"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a661ef05192acc3523a86499741c2e735">tabperr</a> (const struct <a class="el" href="structtabprm.html">tabprm</a> *tab, const char *prefix)</td></tr>
<tr class="memdesc:a661ef05192acc3523a86499741c2e735"><td class="mdescLeft">&#160;</td><td class="mdescRight">Print error messages from a tabprm struct.  <br /></td></tr>
<tr class="separator:a661ef05192acc3523a86499741c2e735"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a519e8e4503f7c41c0f99e8597171c97f" id="r_a519e8e4503f7c41c0f99e8597171c97f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a519e8e4503f7c41c0f99e8597171c97f">tabset</a> (struct <a class="el" href="structtabprm.html">tabprm</a> *tab)</td></tr>
<tr class="memdesc:a519e8e4503f7c41c0f99e8597171c97f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setup routine for the tabprm struct.  <br /></td></tr>
<tr class="separator:a519e8e4503f7c41c0f99e8597171c97f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a006d6e8cb373e0dc3e9ccf128adb9411" id="r_a006d6e8cb373e0dc3e9ccf128adb9411"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a006d6e8cb373e0dc3e9ccf128adb9411">tabx2s</a> (struct <a class="el" href="structtabprm.html">tabprm</a> *tab, int ncoord, int nelem, const double x[], double world[], int stat[])</td></tr>
<tr class="memdesc:a006d6e8cb373e0dc3e9ccf128adb9411"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pixel-to-world transformation.  <br /></td></tr>
<tr class="separator:a006d6e8cb373e0dc3e9ccf128adb9411"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaded7db92aa2758198b33f35f5f18d6e" id="r_aaded7db92aa2758198b33f35f5f18d6e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#aaded7db92aa2758198b33f35f5f18d6e">tabs2x</a> (struct <a class="el" href="structtabprm.html">tabprm</a> *tab, int ncoord, int nelem, const double world[], double x[], int stat[])</td></tr>
<tr class="memdesc:aaded7db92aa2758198b33f35f5f18d6e"><td class="mdescLeft">&#160;</td><td class="mdescRight">World-to-pixel transformation.  <br /></td></tr>
<tr class="separator:aaded7db92aa2758198b33f35f5f18d6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:a824d1e7c8fea5e5918a8555df39aa5b7" id="r_a824d1e7c8fea5e5918a8555df39aa5b7"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a> []</td></tr>
<tr class="memdesc:a824d1e7c8fea5e5918a8555df39aa5b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Status return messages.  <br /></td></tr>
<tr class="separator:a824d1e7c8fea5e5918a8555df39aa5b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Routines in this suite implement the part of the FITS World Coordinate System (WCS) standard that deals with tabular coordinates, i.e. coordinates that are defined via a lookup table, as described in </p><div class="fragment"><div class="line"><span class="stringliteral">&quot;Representations of world coordinates in FITS&quot;</span>,</div>
<div class="line">Greisen, E.W., &amp; Calabretta, M.R. 2002, A&amp;A, 395, 1061 (WCS Paper I)</div>
<div class="line"> </div>
<div class="line"><span class="stringliteral">&quot;Representations of spectral coordinates in FITS&quot;</span>,</div>
<div class="line">Greisen, E.W., Calabretta, M.R., Valdes, F.G., &amp; Allen, S.L.</div>
<div class="line">2006, A&amp;A, 446, 747 (WCS Paper III)</div>
</div><!-- fragment --><p>These routines define methods to be used for computing tabular world coordinates from intermediate world coordinates (a linear transformation of image pixel coordinates), and vice versa. They are based on the tabprm struct which contains all information needed for the computations. The struct contains some members that must be set by the user, and others that are maintained by these routines, somewhat like a C++ class but with no encapsulation.</p>
<p><a class="el" href="tab_8h.html#abb7920acdfb83179d3bac65035144c02" title="Default constructor for the tabprm struct.">tabini()</a>, <a class="el" href="tab_8h.html#ae403ff0b740916989c7386728df001c8" title="Acquire tabular memory.">tabmem()</a>, <a class="el" href="tab_8h.html#a87b3a2a84bab396a528af8382ce9ad04" title="Copy routine for the tabprm struct.">tabcpy()</a>, and <a class="el" href="tab_8h.html#a0f3501cc592c78e0f2cb9922466589f2" title="Destructor for the tabprm struct.">tabfree()</a> are provided to manage the tabprm struct, <a class="el" href="tab_8h.html#a08b599920800bd4380d21d07e0026fb1" title="Compute the size of a tabprm struct.">tabsize()</a> computes its total size including allocated memory, and <a class="el" href="tab_8h.html#a6b3768349e9a5e925aab24effddc584f" title="Print routine for the tabprm struct.">tabprt()</a> prints its contents.</p>
<p><a class="el" href="tab_8h.html#a661ef05192acc3523a86499741c2e735" title="Print error messages from a tabprm struct.">tabperr()</a> prints the error message(s) (if any) stored in a tabprm struct.</p>
<p>A setup routine, <a class="el" href="tab_8h.html#a519e8e4503f7c41c0f99e8597171c97f" title="Setup routine for the tabprm struct.">tabset()</a>, computes intermediate values in the tabprm struct from parameters in it that were supplied by the user. The struct always needs to be set up by <a class="el" href="tab_8h.html#a519e8e4503f7c41c0f99e8597171c97f" title="Setup routine for the tabprm struct.">tabset()</a> but it need not be called explicitly - refer to the explanation of <a class="el" href="structtabprm.html#a27a7b0b12492e1b5f19242ec0eff8e08">tabprm::flag</a>.</p>
<p><a class="el" href="tab_8h.html#a006d6e8cb373e0dc3e9ccf128adb9411" title="Pixel-to-world transformation.">tabx2s()</a> and <a class="el" href="tab_8h.html#aaded7db92aa2758198b33f35f5f18d6e" title="World-to-pixel transformation.">tabs2x()</a> implement the WCS tabular coordinate transformations.</p>
<p><b>Accuracy:</b> <br  />
No warranty is given for the accuracy of these routines (refer to the copyright notice); intending users must satisfy for themselves their adequacy for the intended purpose. However, closure effectively to within double precision rounding error was demonstrated by test routine ttab.c which accompanies this software. </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="a9c80120944556169d230d4cd051d88cb" name="a9c80120944556169d230d4cd051d88cb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9c80120944556169d230d4cd051d88cb">&#9670;&#160;</a></span>TABLEN</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define TABLEN&#160;&#160;&#160;(sizeof(struct <a class="el" href="structtabprm.html">tabprm</a>)/sizeof(int))</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Size of the tabprm struct in <em>int</em> units. </p>
<p>Size of the tabprm struct in <em>int</em> units, used by the Fortran wrappers. </p>

</div>
</div>
<a id="a8b57d9bacbabd2b516d77220cdb6167d" name="a8b57d9bacbabd2b516d77220cdb6167d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8b57d9bacbabd2b516d77220cdb6167d">&#9670;&#160;</a></span>tabini_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define tabini_errmsg&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000024">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7" title="Status return messages.">tab_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<a id="a27460f165fb03a075a1c6c6a48f33c62" name="a27460f165fb03a075a1c6c6a48f33c62"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a27460f165fb03a075a1c6c6a48f33c62">&#9670;&#160;</a></span>tabcpy_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define tabcpy_errmsg&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000025">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7" title="Status return messages.">tab_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<a id="abf96fe5488df6796ec2606b974f330fe" name="abf96fe5488df6796ec2606b974f330fe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abf96fe5488df6796ec2606b974f330fe">&#9670;&#160;</a></span>tabfree_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define tabfree_errmsg&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000026">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7" title="Status return messages.">tab_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<a id="ae2ee098afabb7a7d225f930276ffb441" name="ae2ee098afabb7a7d225f930276ffb441"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae2ee098afabb7a7d225f930276ffb441">&#9670;&#160;</a></span>tabprt_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define tabprt_errmsg&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000027">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7" title="Status return messages.">tab_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<a id="a4abf39ca4cfc2ea073bffdbb98caa46d" name="a4abf39ca4cfc2ea073bffdbb98caa46d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4abf39ca4cfc2ea073bffdbb98caa46d">&#9670;&#160;</a></span>tabset_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define tabset_errmsg&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000028">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7" title="Status return messages.">tab_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<a id="a141c3365f0364c01237aeeb93ddb717e" name="a141c3365f0364c01237aeeb93ddb717e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a141c3365f0364c01237aeeb93ddb717e">&#9670;&#160;</a></span>tabx2s_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define tabx2s_errmsg&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000029">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7" title="Status return messages.">tab_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<a id="a49872082d67e357c5c68a633824133ae" name="a49872082d67e357c5c68a633824133ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a49872082d67e357c5c68a633824133ae">&#9670;&#160;</a></span>tabs2x_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define tabs2x_errmsg&#160;&#160;&#160;<a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7">tab_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000030">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="tab_8h.html#a824d1e7c8fea5e5918a8555df39aa5b7" title="Status return messages.">tab_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="abd68f3b717dcf0fcd0078b9a4204f2ed" name="abd68f3b717dcf0fcd0078b9a4204f2ed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abd68f3b717dcf0fcd0078b9a4204f2ed">&#9670;&#160;</a></span>tab_errmsg_enum</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="tab_8h.html#abd68f3b717dcf0fcd0078b9a4204f2ed">tab_errmsg_enum</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="abd68f3b717dcf0fcd0078b9a4204f2eda42a664a8df3b0a485f49eb0e7c8108cd" name="abd68f3b717dcf0fcd0078b9a4204f2eda42a664a8df3b0a485f49eb0e7c8108cd"></a>TABERR_SUCCESS&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="abd68f3b717dcf0fcd0078b9a4204f2edaa0705873598b9fa5bf3b9afbc598a6bc" name="abd68f3b717dcf0fcd0078b9a4204f2edaa0705873598b9fa5bf3b9afbc598a6bc"></a>TABERR_NULL_POINTER&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="abd68f3b717dcf0fcd0078b9a4204f2eda1e503c059ddfe8f4aca37d335f7271f8" name="abd68f3b717dcf0fcd0078b9a4204f2eda1e503c059ddfe8f4aca37d335f7271f8"></a>TABERR_MEMORY&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="abd68f3b717dcf0fcd0078b9a4204f2eda09c02b9ffff721d3f2dd64c318d7c38b" name="abd68f3b717dcf0fcd0078b9a4204f2eda09c02b9ffff721d3f2dd64c318d7c38b"></a>TABERR_BAD_PARAMS&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="abd68f3b717dcf0fcd0078b9a4204f2edac6f6b4c9eca2bd36b0bf2f89309f9297" name="abd68f3b717dcf0fcd0078b9a4204f2edac6f6b4c9eca2bd36b0bf2f89309f9297"></a>TABERR_BAD_X&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="abd68f3b717dcf0fcd0078b9a4204f2eda9d77712eeed3ab7d2bf25e5251c9451b" name="abd68f3b717dcf0fcd0078b9a4204f2eda9d77712eeed3ab7d2bf25e5251c9451b"></a>TABERR_BAD_WORLD&#160;</td><td class="fielddoc"></td></tr>
</table>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="abb7920acdfb83179d3bac65035144c02" name="abb7920acdfb83179d3bac65035144c02"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb7920acdfb83179d3bac65035144c02">&#9670;&#160;</a></span>tabini()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int tabini </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>alloc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>K</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tab</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Default constructor for the tabprm struct. </p>
<p><b>tabini</b>() allocates memory for arrays in a tabprm struct and sets all members of the struct to default values.</p>
<p><b>PLEASE NOTE:</b> every tabprm struct should be initialized by <b>tabini</b>(), possibly repeatedly. On the first invokation, and only the first invokation, the flag member of the tabprm struct must be set to -1 to initialize memory management, regardless of whether <b>tabini</b>() will actually be used to allocate memory.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">alloc</td><td>If true, allocate memory unconditionally for arrays in the tabprm struct. <br  />
 If false, it is assumed that pointers to these arrays have been set by the user except if they are null pointers in which case memory will be allocated for them regardless. (In other words, setting alloc true saves having to initalize these pointers to zero.) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">M</td><td>The number of tabular coordinate axes. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">K</td><td>Vector of length M whose elements <picture><source srcset="form_61_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(K_1, K_2,... K_M)$" src="form_61.png" width="84" height="14"/></picture> record the lengths of the axes of the coordinate array and of each indexing vector. M and K[] are used to determine the length of the various tabprm arrays and therefore the amount of memory to allocate for them. Their values are copied into the tabprm struct. <br  />
 It is permissible to set K (i.e. the address of the array) to zero which has the same effect as setting each element of K[] to zero. In this case no memory will be allocated for the index vectors or coordinate array in the tabprm struct. These together with the K vector must be set separately before calling <a class="el" href="tab_8h.html#a519e8e4503f7c41c0f99e8597171c97f" title="Setup routine for the tabprm struct.">tabset()</a>.</td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">tab</td><td>Tabular transformation parameters. Note that, in order to initialize memory management <a class="el" href="structtabprm.html#a27a7b0b12492e1b5f19242ec0eff8e08">tabprm::flag</a> should be set to -1 when tab is initialized for the first time (memory leaks may result if it had already been initialized).</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null tabprm pointer passed.</li>
<li>2: Memory allocation failed.</li>
<li>3: Invalid tabular parameters.</li>
</ul>
For returns &gt; 1, a detailed error message is set in <a class="el" href="structtabprm.html#a3df12930fa5f38dcfc71aece8aed816c">tabprm::err</a> if enabled, see <a class="el" href="wcserr_8h.html#a1691b8bd184d40ca6fda255be078fa53" title="Enable/disable error messaging.">wcserr_enable()</a>. </dd></dl>

</div>
</div>
<a id="ae403ff0b740916989c7386728df001c8" name="ae403ff0b740916989c7386728df001c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae403ff0b740916989c7386728df001c8">&#9670;&#160;</a></span>tabmem()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int tabmem </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tab</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Acquire tabular memory. </p>
<p><b>tabmem</b>() takes control of memory allocated by the user for arrays in the tabprm struct.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">tab</td><td>Tabular transformation parameters.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null tabprm pointer passed.</li>
<li>2: Memory allocation failed.</li>
</ul>
For returns &gt; 1, a detailed error message is set in <a class="el" href="structtabprm.html#a3df12930fa5f38dcfc71aece8aed816c">tabprm::err</a> if enabled, see <a class="el" href="wcserr_8h.html#a1691b8bd184d40ca6fda255be078fa53" title="Enable/disable error messaging.">wcserr_enable()</a>. </dd></dl>

</div>
</div>
<a id="a87b3a2a84bab396a528af8382ce9ad04" name="a87b3a2a84bab396a528af8382ce9ad04"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a87b3a2a84bab396a528af8382ce9ad04">&#9670;&#160;</a></span>tabcpy()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int tabcpy </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>alloc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tabsrc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tabdst</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copy routine for the tabprm struct. </p>
<p><b>tabcpy</b>() does a deep copy of one tabprm struct to another, using <a class="el" href="tab_8h.html#abb7920acdfb83179d3bac65035144c02" title="Default constructor for the tabprm struct.">tabini()</a> to allocate memory for its arrays if required. Only the &quot;information to be provided&quot; part of the struct is copied; a call to <a class="el" href="tab_8h.html#a519e8e4503f7c41c0f99e8597171c97f" title="Setup routine for the tabprm struct.">tabset()</a> is required to set up the remainder.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">alloc</td><td>If true, allocate memory unconditionally for arrays in the tabprm struct. <br  />
 If false, it is assumed that pointers to these arrays have been set by the user except if they are null pointers in which case memory will be allocated for them regardless. (In other words, setting alloc true saves having to initalize these pointers to zero.) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">tabsrc</td><td>Struct to copy from.</td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">tabdst</td><td>Struct to copy to. <a class="el" href="structtabprm.html#a27a7b0b12492e1b5f19242ec0eff8e08">tabprm::flag</a> should be set to -1 if tabdst was not previously initialized (memory leaks may result if it was previously initialized).</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null tabprm pointer passed.</li>
<li>2: Memory allocation failed.</li>
</ul>
For returns &gt; 1, a detailed error message is set in <a class="el" href="structtabprm.html#a3df12930fa5f38dcfc71aece8aed816c">tabprm::err</a> (associated with tabdst) if enabled, see <a class="el" href="wcserr_8h.html#a1691b8bd184d40ca6fda255be078fa53" title="Enable/disable error messaging.">wcserr_enable()</a>. </dd></dl>

</div>
</div>
<a id="a61ff724eb7c412e42da7362a5d7a093d" name="a61ff724eb7c412e42da7362a5d7a093d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a61ff724eb7c412e42da7362a5d7a093d">&#9670;&#160;</a></span>tabcmp()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int tabcmp </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>cmp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>tol</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tab1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tab2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&#160;</td>
          <td class="paramname"><em>equal</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compare two tabprm structs for equality. </p>
<p><b>tabcmp</b>() compares two tabprm structs for equality.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cmp</td><td>A bit field controlling the strictness of the comparison. At present, this value must always be 0, indicating a strict comparison. In the future, other options may be added. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">tol</td><td>Tolerance for comparison of floating-point values. For example, for tol == 1e-6, all floating-point values in the structs must be equal to the first 6 decimal places. A value of 0 implies exact equality. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">tab1</td><td>The first tabprm struct to compare. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">tab2</td><td>The second tabprm struct to compare.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">equal</td><td>Non-zero when the given structs are equal.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null pointer passed. </li>
</ul>
</dd></dl>

</div>
</div>
<a id="a0f3501cc592c78e0f2cb9922466589f2" name="a0f3501cc592c78e0f2cb9922466589f2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0f3501cc592c78e0f2cb9922466589f2">&#9670;&#160;</a></span>tabfree()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int tabfree </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tab</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Destructor for the tabprm struct. </p>
<p><b>tabfree</b>() frees memory allocated for the tabprm arrays by <a class="el" href="tab_8h.html#abb7920acdfb83179d3bac65035144c02" title="Default constructor for the tabprm struct.">tabini()</a>. <a class="el" href="tab_8h.html#abb7920acdfb83179d3bac65035144c02" title="Default constructor for the tabprm struct.">tabini()</a> records the memory it allocates and <b>tabfree</b>() will only attempt to free this.</p>
<p><b>PLEASE NOTE:</b> <b>tabfree</b>() must not be invoked on a tabprm struct that was not initialized by <a class="el" href="tab_8h.html#abb7920acdfb83179d3bac65035144c02" title="Default constructor for the tabprm struct.">tabini()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">tab</td><td>Coordinate transformation parameters.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null tabprm pointer passed. </li>
</ul>
</dd></dl>

</div>
</div>
<a id="a08b599920800bd4380d21d07e0026fb1" name="a08b599920800bd4380d21d07e0026fb1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a08b599920800bd4380d21d07e0026fb1">&#9670;&#160;</a></span>tabsize()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int tabsize </td>
          <td>(</td>
          <td class="paramtype">const struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tab</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>size</em>[2]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compute the size of a tabprm struct. </p>
<p><b>tabsize</b>() computes the full size of a tabprm struct, including allocated memory.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">tab</td><td>Tabular transformation parameters. <br  />
 If NULL, the base size of the struct and the allocated size are both set to zero.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">sizes</td><td>The first element is the base size of the struct as returned by sizeof(struct tabprm). The second element is the total allocated size, in bytes, assuming that the allocation was done by <a class="el" href="tab_8h.html#abb7920acdfb83179d3bac65035144c02" title="Default constructor for the tabprm struct.">tabini()</a>. This figure includes memory allocated for the constituent struct, <a class="el" href="structtabprm.html#a3df12930fa5f38dcfc71aece8aed816c">tabprm::err</a>. <br  />
 It is not an error for the struct not to have been set up via <a class="el" href="tab_8h.html#a519e8e4503f7c41c0f99e8597171c97f" title="Setup routine for the tabprm struct.">tabset()</a>, which normally results in additional memory allocation.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success. </li>
</ul>
</dd></dl>

</div>
</div>
<a id="a6b3768349e9a5e925aab24effddc584f" name="a6b3768349e9a5e925aab24effddc584f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6b3768349e9a5e925aab24effddc584f">&#9670;&#160;</a></span>tabprt()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int tabprt </td>
          <td>(</td>
          <td class="paramtype">const struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tab</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Print routine for the tabprm struct. </p>
<p><b>tabprt</b>() prints the contents of a tabprm struct using <a class="el" href="wcsprintf_8h.html#a46950abaf5a27347da8160741f98f973" title="Print function used by WCSLIB diagnostic routines.">wcsprintf()</a>. Mainly intended for diagnostic purposes.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">tab</td><td>Tabular transformation parameters.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null tabprm pointer passed. </li>
</ul>
</dd></dl>

</div>
</div>
<a id="a661ef05192acc3523a86499741c2e735" name="a661ef05192acc3523a86499741c2e735"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a661ef05192acc3523a86499741c2e735">&#9670;&#160;</a></span>tabperr()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int tabperr </td>
          <td>(</td>
          <td class="paramtype">const struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tab</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>prefix</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Print error messages from a tabprm struct. </p>
<p><b>tabperr</b>() prints the error message(s) (if any) stored in a tabprm struct. If there are no errors then nothing is printed. It uses <a class="el" href="wcserr_8h.html#a6585b9fc3a59b369e3336f3133dd1ca9" title="Print a wcserr struct.">wcserr_prt()</a>, q.v.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">tab</td><td>Tabular transformation parameters. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">prefix</td><td>If non-NULL, each output line will be prefixed with this string.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null tabprm pointer passed. </li>
</ul>
</dd></dl>

</div>
</div>
<a id="a519e8e4503f7c41c0f99e8597171c97f" name="a519e8e4503f7c41c0f99e8597171c97f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a519e8e4503f7c41c0f99e8597171c97f">&#9670;&#160;</a></span>tabset()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int tabset </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tab</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Setup routine for the tabprm struct. </p>
<p><b>tabset</b>() allocates memory for work arrays in the tabprm struct and sets up the struct according to information supplied within it.</p>
<p>Note that this routine need not be called directly; it will be invoked by <a class="el" href="tab_8h.html#a006d6e8cb373e0dc3e9ccf128adb9411" title="Pixel-to-world transformation.">tabx2s()</a> and <a class="el" href="tab_8h.html#aaded7db92aa2758198b33f35f5f18d6e" title="World-to-pixel transformation.">tabs2x()</a> if <a class="el" href="structtabprm.html#a27a7b0b12492e1b5f19242ec0eff8e08">tabprm::flag</a> is anything other than a predefined magic value.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">tab</td><td>Tabular transformation parameters.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null tabprm pointer passed.</li>
<li>3: Invalid tabular parameters.</li>
</ul>
For returns &gt; 1, a detailed error message is set in <a class="el" href="structtabprm.html#a3df12930fa5f38dcfc71aece8aed816c">tabprm::err</a> if enabled, see <a class="el" href="wcserr_8h.html#a1691b8bd184d40ca6fda255be078fa53" title="Enable/disable error messaging.">wcserr_enable()</a>. </dd></dl>

</div>
</div>
<a id="a006d6e8cb373e0dc3e9ccf128adb9411" name="a006d6e8cb373e0dc3e9ccf128adb9411"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a006d6e8cb373e0dc3e9ccf128adb9411">&#9670;&#160;</a></span>tabx2s()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int tabx2s </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tab</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>ncoord</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>nelem</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>x</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>world</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>stat</em>[]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Pixel-to-world transformation. </p>
<p><b>tabx2s</b>() transforms intermediate world coordinates to world coordinates using coordinate lookup.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">tab</td><td>Tabular transformation parameters.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ncoord,nelem</td><td>The number of coordinates, each of vector length nelem. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>Array of intermediate world coordinates, SI units.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">world</td><td>Array of world coordinates, in SI units. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">stat</td><td>Status return value status for each coordinate:<ul>
<li>0: Success.</li>
<li>1: Invalid intermediate world coordinate.</li>
</ul>
</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null tabprm pointer passed.</li>
<li>3: Invalid tabular parameters.</li>
<li>4: One or more of the x coordinates were invalid, as indicated by the stat vector.</li>
</ul>
For returns &gt; 1, a detailed error message is set in <a class="el" href="structtabprm.html#a3df12930fa5f38dcfc71aece8aed816c">tabprm::err</a> if enabled, see <a class="el" href="wcserr_8h.html#a1691b8bd184d40ca6fda255be078fa53" title="Enable/disable error messaging.">wcserr_enable()</a>. </dd></dl>

</div>
</div>
<a id="aaded7db92aa2758198b33f35f5f18d6e" name="aaded7db92aa2758198b33f35f5f18d6e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaded7db92aa2758198b33f35f5f18d6e">&#9670;&#160;</a></span>tabs2x()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int tabs2x </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structtabprm.html">tabprm</a> *&#160;</td>
          <td class="paramname"><em>tab</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>ncoord</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>nelem</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>world</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>x</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>stat</em>[]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>World-to-pixel transformation. </p>
<p><b>tabs2x</b>() transforms world coordinates to intermediate world coordinates.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">tab</td><td>Tabular transformation parameters.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ncoord,nelem</td><td>The number of coordinates, each of vector length nelem. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">world</td><td>Array of world coordinates, in SI units.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>Array of intermediate world coordinates, SI units. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">stat</td><td>Status return value status for each vector element:<ul>
<li>0: Success.</li>
<li>1: Invalid world coordinate.</li>
</ul>
</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null tabprm pointer passed.</li>
<li>3: Invalid tabular parameters.</li>
<li>5: One or more of the world coordinates were invalid, as indicated by the stat vector.</li>
</ul>
For returns &gt; 1, a detailed error message is set in <a class="el" href="structtabprm.html#a3df12930fa5f38dcfc71aece8aed816c">tabprm::err</a> if enabled, see <a class="el" href="wcserr_8h.html#a1691b8bd184d40ca6fda255be078fa53" title="Enable/disable error messaging.">wcserr_enable()</a>. </dd></dl>

</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a id="a824d1e7c8fea5e5918a8555df39aa5b7" name="a824d1e7c8fea5e5918a8555df39aa5b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a824d1e7c8fea5e5918a8555df39aa5b7">&#9670;&#160;</a></span>tab_errmsg</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const char * tab_errmsg[]</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">extern</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Status return messages. </p>
<p>Error messages to match the status value returned from each function. </p>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Nov 29 2023 19:09:57 for WCSLIB by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>