<p>When I run indent with various options I want against my source, it does what I want but also messes with the placement of *s in pointer types:</p>

<pre><code>  -int send_pkt(tpkt_t* pkt, void* opt_data);
  -void dump(tpkt_t* bp);
  +int send_pkt(tpkt_t * pkt, void *opt_data);
  +void dump(tpkt * bp);
</code></pre>

<p>I know my placement of *s next to the type not the variable is unconventional but how can I get indent to just leave them alone? Or is there another tool that will do what I want?  I've looked in the man page, the info page, and visited a half a dozen pages that Google suggested and I can't find an option to do this. </p>

<p>I tried Artistic Style (a.k.a. AStyle) but can't seem to figure out how to make it indent in multiples of 4 but make every 8 a tab.  That is:</p>

<pre><code>if ( ... ) {
&lt;4spaces&gt;if ( ... ) {
&lt;tab&gt;...some code here...
&lt;4spaces&gt;}
}
</code></pre>

Uncrustify
Uncrustify has several options on how to indent your files.
From the config file:
```
indent_with_tabs                           
  How to use tabs when indenting code  
  0=spaces only  
  1=indent with tabs, align with spaces  
  2=indent and align with tabs
```
You can find it
here
.
BCPP
From the website:
"bcpp indents C/C++ source programs, replacing tabs with spaces or the reverse. Unlike indent, it does (by design) not attempt to wrap long statements."
Find it
here
.
UniversalIndentGUI
It's a tool which supports several beautifiers / formatters. It could lead you to even more alternatives.
Find it
here
.
Artistic Style
You could try
Artistic Style aka AStyle
instead (even though it doesn't do what you need it to do, I'll leave it here in case someone else finds it useful).