diff --git a/src/cmd/9p.c b/src/cmd/9p.c
index 6d329d6..c8d4c44 100644
--- a/src/cmd/9p.c
+++ b/src/cmd/9p.c
@@ -497,7 +497,7 @@
 xls(int argc, char **argv)
 {
 	char *err, *name, *xname, *f[4], buf[4096];
-	int nf, i, j, l, sort;
+	int i, j, l, sort;
 	int lflag, dflag, tflag, n, len[4];
 	Dir *d;
 	CFid *fid;
@@ -569,7 +569,7 @@
 				d[i].dev = 0;
 				snprint(buf, sizeof buf, "%d %s %s %lld",
 					d[i].dev, d[i].uid, d[i].gid, d[i].length);
-				nf = getfields(buf, f, 4, 0, " ");
+				getfields(buf, f, 4, 0, " ");
 				for(j=0; j<4; j++){
 					l = strlen(f[j]);
 					if(l > len[j])
diff --git a/src/cmd/acidtypes/stabs.c b/src/cmd/acidtypes/stabs.c
index f86c99e..5ce0d46 100644
--- a/src/cmd/acidtypes/stabs.c
+++ b/src/cmd/acidtypes/stabs.c
@@ -337,6 +337,7 @@
 			oops();
 		sign = (*p == 's');
 		p++;
+		ischar = 0;
 		if(*p == 'c'){
 			ischar = 1;
 			p++;
@@ -353,6 +354,8 @@
 			t->printfmt = 'd';
 		else
 			t->printfmt = 'x';
+		USED(bits);
+		USED(ischar);
 		break;
 	case 'R':	/* fp type */
 		n = parseint(&p);
diff --git a/src/cmd/astro/moon.c b/src/cmd/astro/moon.c
index 0467ff2..c234b67 100644
--- a/src/cmd/astro/moon.c
+++ b/src/cmd/astro/moon.c
@@ -270,7 +270,7 @@
  *	planetary terms in parallax
  */
 
-	spterms = spterms;
+	//spterms = spterms;
 
 /*
  *	computation of longitude
diff --git a/src/cmd/auth/factotum/p9cr.c b/src/cmd/auth/factotum/p9cr.c
index 0d9c487..1c3f21e 100644
--- a/src/cmd/auth/factotum/p9cr.c
+++ b/src/cmd/auth/factotum/p9cr.c
@@ -65,6 +65,7 @@
 	res = nil;
 	ret = -1;
 	attr = c->attr;
+	astype = -1;
 
 	if(c->proto == &p9cr){
 		astype = AuthChal;
@@ -131,6 +132,7 @@
 	ret = 0;
 
 out:
+	USED(astype);
 	keyclose(k);
 	if(c->attr != attr)
 		freeattr(attr);
diff --git a/src/cmd/auth/rsa2any.c b/src/cmd/auth/rsa2any.c
index b593acb..8538ac3 100644
--- a/src/cmd/auth/rsa2any.c
+++ b/src/cmd/auth/rsa2any.c
@@ -164,7 +164,6 @@
 	char *file, *s, *p;
 	DSApriv *key;
 	Biobuf *b;
-	int regen;
 	Attr *a;
 
 	if(argc == 0)
@@ -190,7 +189,6 @@
 		return nil;
 	}
 
-	regen = 0;
 	a = _parseattr(s+4);
 	if(a == nil){
 		werrstr("empty key");
diff --git a/src/cmd/auth/ssh-agent.c b/src/cmd/auth/ssh-agent.c
index eee9867..40516a7 100644
--- a/src/cmd/auth/ssh-agent.c
+++ b/src/cmd/auth/ssh-agent.c
@@ -973,6 +973,7 @@
 
 	case SSH_AGENTC_RSA_CHALLENGE:
 		n = get4(&m);
+		USED(n);
 		ek = getmp(&m);
 		mod = getmp(&m);
 		chal = getmp(&m);
diff --git a/src/cmd/bzip2/lib/bzlib_private.h b/src/cmd/bzip2/lib/bzlib_private.h
index d9dd0a0..ad57870 100644
--- a/src/cmd/bzip2/lib/bzlib_private.h
+++ b/src/cmd/bzip2/lib/bzlib_private.h
@@ -12,8 +12,8 @@
 
 
 /*-------------------------------------------------------------*/
-/*--- Private header file for the library.                  ---*/
-/*---                                       bzlib_private.h ---*/
+/*--- Private header file for the library.						---*/
+/*---													  bzlib_private.h ---*/
 /*-------------------------------------------------------------*/
 
 /*--
@@ -27,24 +27,24 @@
   are met:
 
   1. Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
+	  notice, this list of conditions and the following disclaimer.
 
   2. The origin of this software must not be misrepresented; you must 
-     not claim that you wrote the original software.  If you use this 
-     software in a product, an acknowledgment in the product 
-     documentation would be appreciated but is not required.
+	  not claim that you wrote the original software.	If you use this 
+	  software in a product, an acknowledgment in the product 
+	  documentation would be appreciated but is not required.
 
   3. Altered source versions must be plainly marked as such, and must
-     not be misrepresented as being the original software.
+	  not be misrepresented as being the original software.
 
   4. The name of the author may not be used to endorse or promote 
-     products derived from this software without specific prior written 
-     permission.
+	  products derived from this software without specific prior written 
+	  permission.
 
   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+  ARE DISCLAIMED.	 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
@@ -58,14 +58,14 @@
   bzip2/libbzip2 version 1.0 of 21 March 2000
 
   This program is based on (at least) the work of:
-     Mike Burrows
-     David Wheeler
-     Peter Fenwick
-     Alistair Moffat
-     Radford Neal
-     Ian H. Witten
-     Robert Sedgewick
-     Jon L. Bentley
+	  Mike Burrows
+	  David Wheeler
+	  Peter Fenwick
+	  Alistair Moffat
+	  Radford Neal
+	  Ian H. Witten
+	  Robert Sedgewick
+	  Jon L. Bentley
 
   For more information on these sources, see the manual.
 --*/
@@ -85,29 +85,29 @@
 /* these #defines can be overridden by bzlib_stdio.h */
 extern void bz_internal_error ( int errcode );
 #define AssertH(cond,errcode) \
-   { if (!(cond)) bz_internal_error ( errcode ); }
+	{ if (!(cond)) bz_internal_error ( errcode ); }
 #define AssertD(cond,msg) /* */
-#define VPrintf0(zf) /* */
-#define VPrintf1(zf,za1) /* */
-#define VPrintf2(zf,za1,za2) /* */
-#define VPrintf3(zf,za1,za2,za3) /* */
-#define VPrintf4(zf,za1,za2,za3,za4) /* */
-#define VPrintf5(zf,za1,za2,za3,za4,za5) /* */
+#define VPrintf0(zf) USED(zf)
+#define VPrintf1(zf,za1) do { USED(zf); USED(za1); } while(0)
+#define VPrintf2(zf,za1,za2) do { USED(zf); USED(za1); USED(za2); } while(0)
+#define VPrintf3(zf,za1,za2,za3) do { USED(zf); USED(za1); USED(za2); USED(za3); } while(0)
+#define VPrintf4(zf,za1,za2,za3,za4) do { USED(zf); USED(za1); USED(za2); USED(za3); USED(za4); } while(0)
+#define VPrintf5(zf,za1,za2,za3,za4,za5) do { USED(zf); USED(za1); USED(za2); USED(za3); USED(za4); USED(za5); } while(0)
 
 #define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)
-#define BZFREE(ppp)  (strm->bzfree)(strm->opaque,(ppp))
+#define BZFREE(ppp)	(strm->bzfree)(strm->opaque,(ppp))
 
 
 /*-- Constants for the back end. --*/
 
 #define BZ_MAX_ALPHA_SIZE 258
-#define BZ_MAX_CODE_LEN    23
+#define BZ_MAX_CODE_LEN		23
 
 #define BZ_RUNA 0
 #define BZ_RUNB 1
 
 #define BZ_N_GROUPS 6
-#define BZ_G_SIZE   50
+#define BZ_G_SIZE	  50
 #define BZ_N_ITERS  4
 
 #define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))
@@ -118,23 +118,23 @@
 
 extern Int32 BZ2_rNums[512];
 
-#define BZ_RAND_DECLS                          \
-   Int32 rNToGo;                               \
-   Int32 rTPos                                 \
+#define BZ_RAND_DECLS								  \
+	Int32 rNToGo;										  \
+	Int32 rTPos											  \
 
-#define BZ_RAND_INIT_MASK                      \
-   s->rNToGo = 0;                              \
-   s->rTPos  = 0                               \
+#define BZ_RAND_INIT_MASK							  \
+	s->rNToGo = 0;										  \
+	s->rTPos	 = 0										  \
 
 #define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)
 
-#define BZ_RAND_UPD_MASK                       \
-   if (s->rNToGo == 0) {                       \
-      s->rNToGo = BZ2_rNums[s->rTPos];         \
-      s->rTPos++;                              \
-      if (s->rTPos == 512) s->rTPos = 0;       \
-   }                                           \
-   s->rNToGo--;
+#define BZ_RAND_UPD_MASK							  \
+	if (s->rNToGo == 0) {							  \
+		s->rNToGo = BZ2_rNums[s->rTPos];			  \
+		s->rTPos++;										  \
+		if (s->rTPos == 512) s->rTPos = 0;		  \
+	}														  \
+	s->rNToGo--;
 
 
 
@@ -142,34 +142,34 @@
 
 extern UInt32 BZ2_crc32Table[256];
 
-#define BZ_INITIALISE_CRC(crcVar)              \
-{                                              \
-   crcVar = 0xffffffffL;                       \
+#define BZ_INITIALISE_CRC(crcVar)				  \
+{															  \
+	crcVar = 0xffffffffL;							  \
 }
 
-#define BZ_FINALISE_CRC(crcVar)                \
-{                                              \
-   crcVar = ~(crcVar);                         \
+#define BZ_FINALISE_CRC(crcVar)					  \
+{															  \
+	crcVar = ~(crcVar);								  \
 }
 
-#define BZ_UPDATE_CRC(crcVar,cha)              \
-{                                              \
-   crcVar = (crcVar << 8) ^                    \
-            BZ2_crc32Table[(crcVar >> 24) ^    \
-                           ((UChar)cha)];      \
+#define BZ_UPDATE_CRC(crcVar,cha)				  \
+{															  \
+	crcVar = (crcVar << 8) ^						  \
+				BZ2_crc32Table[(crcVar >> 24) ^	  \
+									((UChar)cha)];		  \
 }
 
 
 
 /*-- States and modes for compression. --*/
 
-#define BZ_M_IDLE      1
-#define BZ_M_RUNNING   2
+#define BZ_M_IDLE		  1
+#define BZ_M_RUNNING	  2
 #define BZ_M_FLUSHING  3
 #define BZ_M_FINISHING 4
 
-#define BZ_S_OUTPUT    1
-#define BZ_S_INPUT     2
+#define BZ_S_OUTPUT	  1
+#define BZ_S_INPUT	  2
 
 #define BZ_N_RADIX 2
 #define BZ_N_QSORT 12
@@ -182,76 +182,76 @@
 /*-- Structure holding all the compression-side stuff. --*/
 
 typedef
-   struct {
-      /* pointer back to the struct bz_stream */
-      bz_stream* strm;
+	struct {
+		/* pointer back to the struct bz_stream */
+		bz_stream* strm;
 
-      /* mode this stream is in, and whether inputting */
-      /* or outputting data */
-      Int32    mode;
-      Int32    state;
+		/* mode this stream is in, and whether inputting */
+		/* or outputting data */
+		Int32		mode;
+		Int32		state;
 
-      /* remembers avail_in when flush/finish requested */
-      UInt32   avail_in_expect;
+		/* remembers avail_in when flush/finish requested */
+		UInt32	avail_in_expect;
 
-      /* for doing the block sorting */
-      UInt32*  arr1;
-      UInt32*  arr2;
-      UInt32*  ftab;
-      Int32    origPtr;
+		/* for doing the block sorting */
+		UInt32*	arr1;
+		UInt32*	arr2;
+		UInt32*	ftab;
+		Int32		origPtr;
 
-      /* aliases for arr1 and arr2 */
-      UInt32*  ptr;
-      UChar*   block;
-      UInt16*  mtfv;
-      UChar*   zbits;
+		/* aliases for arr1 and arr2 */
+		UInt32*	ptr;
+		UChar*	block;
+		UInt16*	mtfv;
+		UChar*	zbits;
 
-      /* for deciding when to use the fallback sorting algorithm */
-      Int32    workFactor;
+		/* for deciding when to use the fallback sorting algorithm */
+		Int32		workFactor;
 
-      /* run-length-encoding of the input */
-      UInt32   state_in_ch;
-      Int32    state_in_len;
-      BZ_RAND_DECLS;
+		/* run-length-encoding of the input */
+		UInt32	state_in_ch;
+		Int32		state_in_len;
+		BZ_RAND_DECLS;
 
-      /* input and output limits and current posns */
-      Int32    nblock;
-      Int32    nblockMAX;
-      Int32    numZ;
-      Int32    state_out_pos;
+		/* input and output limits and current posns */
+		Int32		nblock;
+		Int32		nblockMAX;
+		Int32		numZ;
+		Int32		state_out_pos;
 
-      /* map of bytes used in block */
-      Int32    nInUse;
-      Bool     inUse[256];
-      UChar    unseqToSeq[256];
+		/* map of bytes used in block */
+		Int32		nInUse;
+		Bool		inUse[256];
+		UChar		unseqToSeq[256];
 
-      /* the buffer for bit stream creation */
-      UInt32   bsBuff;
-      Int32    bsLive;
+		/* the buffer for bit stream creation */
+		UInt32	bsBuff;
+		Int32		bsLive;
 
-      /* block and combined CRCs */
-      UInt32   blockCRC;
-      UInt32   combinedCRC;
+		/* block and combined CRCs */
+		UInt32	blockCRC;
+		UInt32	combinedCRC;
 
-      /* misc administratium */
-      Int32    verbosity;
-      Int32    blockNo;
-      Int32    blockSize100k;
+		/* misc administratium */
+		Int32		verbosity;
+		Int32		blockNo;
+		Int32		blockSize100k;
 
-      /* stuff for coding the MTF values */
-      Int32    nMTF;
-      Int32    mtfFreq    [BZ_MAX_ALPHA_SIZE];
-      UChar    selector   [BZ_MAX_SELECTORS];
-      UChar    selectorMtf[BZ_MAX_SELECTORS];
+		/* stuff for coding the MTF values */
+		Int32		nMTF;
+		Int32		mtfFreq	  [BZ_MAX_ALPHA_SIZE];
+		UChar		selector	  [BZ_MAX_SELECTORS];
+		UChar		selectorMtf[BZ_MAX_SELECTORS];
 
-      UChar    len     [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
-      Int32    code    [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
-      Int32    rfreq   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
-      /* second dimension: only 3 needed; 4 makes index calculations faster */
-      UInt32   len_pack[BZ_MAX_ALPHA_SIZE][4];
+		UChar		len	  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+		Int32		code	  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+		Int32		rfreq	  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+		/* second dimension: only 3 needed; 4 makes index calculations faster */
+		UInt32	len_pack[BZ_MAX_ALPHA_SIZE][4];
 
-   }
-   EState;
+	}
+	EState;
 
 
 
@@ -276,50 +276,50 @@
 
 /*-- states for decompression. --*/
 
-#define BZ_X_IDLE        1
-#define BZ_X_OUTPUT      2
+#define BZ_X_IDLE			 1
+#define BZ_X_OUTPUT		 2
 
-#define BZ_X_MAGIC_1     10
-#define BZ_X_MAGIC_2     11
-#define BZ_X_MAGIC_3     12
-#define BZ_X_MAGIC_4     13
-#define BZ_X_BLKHDR_1    14
-#define BZ_X_BLKHDR_2    15
-#define BZ_X_BLKHDR_3    16
-#define BZ_X_BLKHDR_4    17
-#define BZ_X_BLKHDR_5    18
-#define BZ_X_BLKHDR_6    19
-#define BZ_X_BCRC_1      20
-#define BZ_X_BCRC_2      21
-#define BZ_X_BCRC_3      22
-#define BZ_X_BCRC_4      23
-#define BZ_X_RANDBIT     24
-#define BZ_X_ORIGPTR_1   25
-#define BZ_X_ORIGPTR_2   26
-#define BZ_X_ORIGPTR_3   27
-#define BZ_X_MAPPING_1   28
-#define BZ_X_MAPPING_2   29
-#define BZ_X_SELECTOR_1  30
-#define BZ_X_SELECTOR_2  31
-#define BZ_X_SELECTOR_3  32
-#define BZ_X_CODING_1    33
-#define BZ_X_CODING_2    34
-#define BZ_X_CODING_3    35
-#define BZ_X_MTF_1       36
-#define BZ_X_MTF_2       37
-#define BZ_X_MTF_3       38
-#define BZ_X_MTF_4       39
-#define BZ_X_MTF_5       40
-#define BZ_X_MTF_6       41
-#define BZ_X_ENDHDR_2    42
-#define BZ_X_ENDHDR_3    43
-#define BZ_X_ENDHDR_4    44
-#define BZ_X_ENDHDR_5    45
-#define BZ_X_ENDHDR_6    46
-#define BZ_X_CCRC_1      47
-#define BZ_X_CCRC_2      48
-#define BZ_X_CCRC_3      49
-#define BZ_X_CCRC_4      50
+#define BZ_X_MAGIC_1		 10
+#define BZ_X_MAGIC_2		 11
+#define BZ_X_MAGIC_3		 12
+#define BZ_X_MAGIC_4		 13
+#define BZ_X_BLKHDR_1	 14
+#define BZ_X_BLKHDR_2	 15
+#define BZ_X_BLKHDR_3	 16
+#define BZ_X_BLKHDR_4	 17
+#define BZ_X_BLKHDR_5	 18
+#define BZ_X_BLKHDR_6	 19
+#define BZ_X_BCRC_1		 20
+#define BZ_X_BCRC_2		 21
+#define BZ_X_BCRC_3		 22
+#define BZ_X_BCRC_4		 23
+#define BZ_X_RANDBIT		 24
+#define BZ_X_ORIGPTR_1	 25
+#define BZ_X_ORIGPTR_2	 26
+#define BZ_X_ORIGPTR_3	 27
+#define BZ_X_MAPPING_1	 28
+#define BZ_X_MAPPING_2	 29
+#define BZ_X_SELECTOR_1	 30
+#define BZ_X_SELECTOR_2	 31
+#define BZ_X_SELECTOR_3	 32
+#define BZ_X_CODING_1	 33
+#define BZ_X_CODING_2	 34
+#define BZ_X_CODING_3	 35
+#define BZ_X_MTF_1		 36
+#define BZ_X_MTF_2		 37
+#define BZ_X_MTF_3		 38
+#define BZ_X_MTF_4		 39
+#define BZ_X_MTF_5		 40
+#define BZ_X_MTF_6		 41
+#define BZ_X_ENDHDR_2	 42
+#define BZ_X_ENDHDR_3	 43
+#define BZ_X_ENDHDR_4	 44
+#define BZ_X_ENDHDR_5	 45
+#define BZ_X_ENDHDR_6	 46
+#define BZ_X_CCRC_1		 47
+#define BZ_X_CCRC_2		 48
+#define BZ_X_CCRC_3		 49
+#define BZ_X_CCRC_4		 50
 
 
 
@@ -333,132 +333,132 @@
 /*-- Structure holding all the decompression-side stuff. --*/
 
 typedef
-   struct {
-      /* pointer back to the struct bz_stream */
-      bz_stream* strm;
+	struct {
+		/* pointer back to the struct bz_stream */
+		bz_stream* strm;
 
-      /* state indicator for this stream */
-      Int32    state;
+		/* state indicator for this stream */
+		Int32		state;
 
-      /* for doing the final run-length decoding */
-      UChar    state_out_ch;
-      Int32    state_out_len;
-      Bool     blockRandomised;
-      BZ_RAND_DECLS;
+		/* for doing the final run-length decoding */
+		UChar		state_out_ch;
+		Int32		state_out_len;
+		Bool		blockRandomised;
+		BZ_RAND_DECLS;
 
-      /* the buffer for bit stream reading */
-      UInt32   bsBuff;
-      Int32    bsLive;
+		/* the buffer for bit stream reading */
+		UInt32	bsBuff;
+		Int32		bsLive;
 
-      /* misc administratium */
-      Int32    blockSize100k;
-      Bool     smallDecompress;
-      Int32    currBlockNo;
-      Int32    verbosity;
+		/* misc administratium */
+		Int32		blockSize100k;
+		Bool		smallDecompress;
+		Int32		currBlockNo;
+		Int32		verbosity;
 
-      /* for undoing the Burrows-Wheeler transform */
-      Int32    origPtr;
-      UInt32   tPos;
-      Int32    k0;
-      Int32    unzftab[256];
-      Int32    nblock_used;
-      Int32    cftab[257];
-      Int32    cftabCopy[257];
+		/* for undoing the Burrows-Wheeler transform */
+		Int32		origPtr;
+		UInt32	tPos;
+		Int32		k0;
+		Int32		unzftab[256];
+		Int32		nblock_used;
+		Int32		cftab[257];
+		Int32		cftabCopy[257];
 
-      /* for undoing the Burrows-Wheeler transform (FAST) */
-      UInt32   *tt;
+		/* for undoing the Burrows-Wheeler transform (FAST) */
+		UInt32	*tt;
 
-      /* for undoing the Burrows-Wheeler transform (SMALL) */
-      UInt16   *ll16;
-      UChar    *ll4;
+		/* for undoing the Burrows-Wheeler transform (SMALL) */
+		UInt16	*ll16;
+		UChar		*ll4;
 
-      /* stored and calculated CRCs */
-      UInt32   storedBlockCRC;
-      UInt32   storedCombinedCRC;
-      UInt32   calculatedBlockCRC;
-      UInt32   calculatedCombinedCRC;
+		/* stored and calculated CRCs */
+		UInt32	storedBlockCRC;
+		UInt32	storedCombinedCRC;
+		UInt32	calculatedBlockCRC;
+		UInt32	calculatedCombinedCRC;
 
-      /* map of bytes used in block */
-      Int32    nInUse;
-      Bool     inUse[256];
-      Bool     inUse16[16];
-      UChar    seqToUnseq[256];
+		/* map of bytes used in block */
+		Int32		nInUse;
+		Bool		inUse[256];
+		Bool		inUse16[16];
+		UChar		seqToUnseq[256];
 
-      /* for decoding the MTF values */
-      UChar    mtfa   [MTFA_SIZE];
-      Int32    mtfbase[256 / MTFL_SIZE];
-      UChar    selector   [BZ_MAX_SELECTORS];
-      UChar    selectorMtf[BZ_MAX_SELECTORS];
-      UChar    len  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+		/* for decoding the MTF values */
+		UChar		mtfa	 [MTFA_SIZE];
+		Int32		mtfbase[256 / MTFL_SIZE];
+		UChar		selector	  [BZ_MAX_SELECTORS];
+		UChar		selectorMtf[BZ_MAX_SELECTORS];
+		UChar		len  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
 
-      Int32    limit  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
-      Int32    base   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
-      Int32    perm   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
-      Int32    minLens[BZ_N_GROUPS];
+		Int32		limit	 [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+		Int32		base	 [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+		Int32		perm	 [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+		Int32		minLens[BZ_N_GROUPS];
 
-      /* save area for scalars in the main decompress code */
-      Int32    save_i;
-      Int32    save_j;
-      Int32    save_t;
-      Int32    save_alphaSize;
-      Int32    save_nGroups;
-      Int32    save_nSelectors;
-      Int32    save_EOB;
-      Int32    save_groupNo;
-      Int32    save_groupPos;
-      Int32    save_nextSym;
-      Int32    save_nblockMAX;
-      Int32    save_nblock;
-      Int32    save_es;
-      Int32    save_N;
-      Int32    save_curr;
-      Int32    save_zt;
-      Int32    save_zn; 
-      Int32    save_zvec;
-      Int32    save_zj;
-      Int32    save_gSel;
-      Int32    save_gMinlen;
-      Int32*   save_gLimit;
-      Int32*   save_gBase;
-      Int32*   save_gPerm;
+		/* save area for scalars in the main decompress code */
+		Int32		save_i;
+		Int32		save_j;
+		Int32		save_t;
+		Int32		save_alphaSize;
+		Int32		save_nGroups;
+		Int32		save_nSelectors;
+		Int32		save_EOB;
+		Int32		save_groupNo;
+		Int32		save_groupPos;
+		Int32		save_nextSym;
+		Int32		save_nblockMAX;
+		Int32		save_nblock;
+		Int32		save_es;
+		Int32		save_N;
+		Int32		save_curr;
+		Int32		save_zt;
+		Int32		save_zn; 
+		Int32		save_zvec;
+		Int32		save_zj;
+		Int32		save_gSel;
+		Int32		save_gMinlen;
+		Int32*	save_gLimit;
+		Int32*	save_gBase;
+		Int32*	save_gPerm;
 
-   }
-   DState;
+	}
+	DState;
 
 
 
 /*-- Macros for decompression. --*/
 
-#define BZ_GET_FAST(cccc)                     \
-    s->tPos = s->tt[s->tPos];                 \
-    cccc = (UChar)(s->tPos & 0xff);           \
-    s->tPos >>= 8;
+#define BZ_GET_FAST(cccc)							 \
+	 s->tPos = s->tt[s->tPos];						 \
+	 cccc = (UChar)(s->tPos & 0xff);				 \
+	 s->tPos >>= 8;
 
-#define BZ_GET_FAST_C(cccc)                   \
-    c_tPos = c_tt[c_tPos];                    \
-    cccc = (UChar)(c_tPos & 0xff);            \
-    c_tPos >>= 8;
+#define BZ_GET_FAST_C(cccc)						 \
+	 c_tPos = c_tt[c_tPos];							 \
+	 cccc = (UChar)(c_tPos & 0xff);				 \
+	 c_tPos >>= 8;
 
-#define SET_LL4(i,n)                                          \
-   { if (((i) & 0x1) == 0)                                    \
-        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else    \
-        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4);  \
-   }
+#define SET_LL4(i,n)														  \
+	{ if (((i) & 0x1) == 0)												  \
+		  s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else	  \
+		  s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4);  \
+	}
 
-#define GET_LL4(i)                             \
-   ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)
+#define GET_LL4(i)									  \
+	((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)
 
-#define SET_LL(i,n)                          \
-   { s->ll16[i] = (UInt16)(n & 0x0000ffff);  \
-     SET_LL4(i, n >> 16);                    \
-   }
+#define SET_LL(i,n)									\
+	{ s->ll16[i] = (UInt16)(n & 0x0000ffff);	\
+	  SET_LL4(i, n >> 16);							\
+	}
 
 #define GET_LL(i) \
-   (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))
+	(((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))
 
-#define BZ_GET_SMALL(cccc)                            \
-      cccc = BZ2_indexIntoF ( s->tPos, s->cftab );    \
-      s->tPos = GET_LL(s->tPos);
+#define BZ_GET_SMALL(cccc)										\
+		cccc = BZ2_indexIntoF ( s->tPos, s->cftab );		\
+		s->tPos = GET_LL(s->tPos);
 
 
 /*-- externs for decompression. --*/
@@ -471,7 +471,7 @@
 
 extern void 
 BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,
-                           Int32,  Int32, Int32 );
+									Int32,  Int32, Int32 );
 
 
 #endif
@@ -492,5 +492,5 @@
 default_bzfree( void*, void* );
 
 /*-------------------------------------------------------------*/
-/*--- end                                   bzlib_private.h ---*/
+/*--- end											  bzlib_private.h ---*/
 /*-------------------------------------------------------------*/
diff --git a/src/cmd/postscript/tr2post/chartab.c b/src/cmd/postscript/tr2post/chartab.c
index e2e78b7..11d1ae8 100644
--- a/src/cmd/postscript/tr2post/chartab.c
+++ b/src/cmd/postscript/tr2post/chartab.c
@@ -171,6 +171,8 @@
 			startchar = RUNEGETCHAR(start);
 			endfont = RUNEGETGROUP(end);
 			endchar = RUNEGETCHAR(end);
+			USED(startchar);
+			USED(endchar);
 			pfid = findpfn(psfontnam, 1);
 			if (startfont != endfont) {
 				error(WARNING, "font descriptions must not cross 256 glyph block boundary\n");
diff --git a/src/cmd/ramfs.c b/src/cmd/ramfs.c
index bda18b8..6e00c89 100644
--- a/src/cmd/ramfs.c
+++ b/src/cmd/ramfs.c
@@ -172,6 +172,7 @@
 	default:
 		usage();
 	}ARGEND
+	USED(defmnt);
 
 	if(pipe(p) < 0)
 		error("pipe failed");
diff --git a/src/cmd/tpic/textgen.c b/src/cmd/tpic/textgen.c
index e9ba803..82753b7 100644
--- a/src/cmd/tpic/textgen.c
+++ b/src/cmd/tpic/textgen.c
@@ -8,8 +8,6 @@
 	int i, sub, nstr, at, with, hset;
 	double xwith, ywith, h, w, x0, y0, x1, y1;
 	obj *p, *ppos;
-	static double prevh = 0;
-	static double prevw = 0;
 	Attr *ap;
 
 	at = with = nstr = hset = 0;
@@ -90,8 +88,6 @@
 		cury = y1;
 	else
 		cury = y0;
-	prevh = h;
-	prevw = w;
 	return(p);
 }
 
diff --git a/src/cmd/troff/n6.c b/src/cmd/troff/n6.c
index 2328d6a..69d48f2 100644
--- a/src/cmd/troff/n6.c
+++ b/src/cmd/troff/n6.c
@@ -163,7 +163,7 @@
 	int	delim, emsz, k;
 	int	savhp, savapts, savapts1, savfont, savfont1, savpts, savpts1;
 
-	base = numtabp[ST].val = numtabp[ST].val = wid = numtabp[CT].val = 0;
+	base = numtabp[ST].val = numtabp[SB].val = wid = numtabp[CT].val = 0;
 	if (ismot(i = getch()))
 		return;
 	delim = cbits(i);
diff --git a/src/cmd/troff/t6.c b/src/cmd/troff/t6.c
index 583d4aa..4a2bd02 100644
--- a/src/cmd/troff/t6.c
+++ b/src/cmd/troff/t6.c
@@ -217,11 +217,15 @@
 
 Tchar t_setch(int c)
 {
+#ifndef UNICODE
 	int j;
+#endif
 	char temp[50];
 	char *s;
 
+#ifndef UNICODE
 	j = 0;
+#endif
 	s = temp;
 	if (c == '(') {	/* \(xx */
 		if ((*s++ = getach()) == 0 || (*s++ = getach()) == 0)
@@ -711,9 +715,8 @@
 int
 setfp(int pos, int f, char *truename, int print)	/* mount font f at position pos[0...nfonts] */
 {
-	char pathname[NS], shortname[NS], *sl;
+	char pathname[NS], shortname[NS];
 
-	sl = (char*)0;
 	zapwcache(0);
 	if (truename)
 		strcpy(shortname, truename);
diff --git a/src/cmd/vac/vacfs.c b/src/cmd/vac/vacfs.c
index 643b6c4..b452572 100644
--- a/src/cmd/vac/vacfs.c
+++ b/src/cmd/vac/vacfs.c
@@ -682,6 +682,7 @@
 		if(ext == nil)
 			return 0;
 		n = vacfileread(vf, ext, size, 0);
+		USED(n);
 		ext[size] = 0;
 		vacfiledecref(vf);
 		if(vd->mode & ModeLink){
diff --git a/src/libhtml/build.c b/src/libhtml/build.c
index c65918c..7ce7444 100644
--- a/src/libhtml/build.c
+++ b/src/libhtml/build.c
@@ -4536,6 +4536,7 @@
 	static char c;
 
 	c = *((char*)p);
+	USED(c);
 	return 1;
 }
 
diff --git a/src/libsunrpc/nfs3.c b/src/libsunrpc/nfs3.c
index 7a65b3a..706d9c4 100644
--- a/src/libsunrpc/nfs3.c
+++ b/src/libsunrpc/nfs3.c
@@ -120,7 +120,7 @@
 	int i;
 
 	for(i=0; i<nelem(etab); i++){
-		if(etab[i].status == status){
+		if((int)etab[i].status == (int)status){
 			werrstr(etab[i].msg);
 			return;
 		}
