first changes to get a successfully compiled version of capstone on VS2012
diff --git a/cs.c b/cs.c
index 3b4a02e..e36c276 100644
--- a/cs.c
+++ b/cs.c
@@ -1,5 +1,15 @@
 /* Capstone Disassembly Engine */
 /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2014 */
+#define _CRT_SECURE_NO_WARNINGS
+
+#define CAPSTONE_HAS_ARM
+#define CAPSTONE_HAS_ARM64
+#define CAPSTONE_HAS_MIPS
+#define CAPSTONE_HAS_POWERPC
+#define CAPSTONE_HAS_SPARC
+#define CAPSTONE_HAS_SYSZ
+#define CAPSTONE_HAS_X86
+#define USE_SYS_DYN_MEM
 
 #include <stddef.h>
 #include <stdio.h>
@@ -127,10 +137,11 @@
 
 cs_err cs_errno(csh handle)
 {
+    struct cs_struct *ud = NULL;
 	if (!handle)
 		return CS_ERR_CSH;
 
-	struct cs_struct *ud = (struct cs_struct *)(uintptr_t)handle;
+	ud = (struct cs_struct *)(uintptr_t)handle;
 
 	return ud->errnum;
 }
@@ -169,6 +180,8 @@
 
 cs_err cs_open(cs_arch arch, cs_mode mode, csh *handle)
 {
+    cs_err err;
+    struct cs_struct *ud = NULL;
 	if (!cs_mem_malloc || !cs_mem_calloc || !cs_mem_realloc || !cs_mem_free || !cs_vsnprintf)
 		// Error: before cs_open(), dynamic memory management must be initialized
 		// with cs_option(CS_OPT_MEM)
@@ -177,8 +190,6 @@
 	archs_enable();
 
 	if (arch < CS_ARCH_MAX && arch_init[arch]) {
-		struct cs_struct *ud;
-
 		ud = cs_mem_calloc(1, sizeof(*ud));
 		if (!ud) {
 			// memory insufficient
@@ -195,7 +206,7 @@
 		// default skipdata setup
 		ud->skipdata_setup.mnemonic = SKIPDATA_MNEM;
 
-		cs_err err = arch_init[ud->arch](ud);
+		err = arch_init[ud->arch](ud);
 		if (err) {
 			cs_mem_free(ud);
 			*handle = 0;
@@ -213,11 +224,12 @@
 
 cs_err cs_close(csh *handle)
 {
+    struct cs_struct *ud = NULL;
 	if (*handle == 0)
 		// invalid handle
 		return CS_ERR_CSH;
 
-	struct cs_struct *ud = (struct cs_struct *)(*handle);
+	ud = (struct cs_struct *)(*handle);
 
 	if (ud->printer_info)
 		cs_mem_free(ud->printer_info);
@@ -239,13 +251,14 @@
 static void fill_insn(struct cs_struct *handle, cs_insn *insn, char *buffer, MCInst *mci,
 		PostPrinter_t postprinter, const uint8_t *code)
 {
+    char *sp = NULL;
 	if (handle->detail) {
 		// avoiding copy insn->detail
 		memcpy(insn, &mci->flat_insn, sizeof(*insn) - sizeof(insn->detail));
 
 		// NOTE: copy details in 2 chunks, since union is always put at address divisible by 8
 		// copy from @regs_read until @arm
-		memcpy(insn->detail, (void *)(&(mci->flat_insn)) + offsetof(cs_insn_flat, regs_read),
+		memcpy(insn->detail, (void *)((uintptr_t)(&(mci->flat_insn)) + offsetof(cs_insn_flat, regs_read)),
 				offsetof(cs_detail, arm) - offsetof(cs_detail, regs_read));
 		// then copy from @arm until end
 		memcpy((void *)((uintptr_t)(insn->detail) + offsetof(cs_detail, arm)),
@@ -274,7 +287,7 @@
 #ifndef CAPSTONE_DIET
 	// fill in mnemonic & operands
 	// find first space or tab
-	char *sp = buffer;
+	sp = buffer;
 	for (sp = buffer; *sp; sp++) {
 		if (*sp == ' '||*sp == '\t')
 			break;
@@ -329,6 +342,7 @@
 
 cs_err cs_option(csh ud, cs_opt_type type, size_t value)
 {
+    struct cs_struct *handle = NULL;
 	archs_enable();
 
 	// cs_option() can be called with NULL handle just for CS_OPT_MEM
@@ -345,7 +359,7 @@
 		return CS_ERR_OK;
 	}
 
-	struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+	handle = (struct cs_struct *)(uintptr_t)ud;
 	if (!handle)
 		return CS_ERR_CSH;
 
@@ -599,10 +613,11 @@
 
 bool cs_insn_group(csh ud, cs_insn *insn, unsigned int group_id)
 {
+    struct cs_struct *handle = NULL;
 	if (!ud)
 		return false;
 
-	struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+	handle = (struct cs_struct *)(uintptr_t)ud;
 
 	if (!handle->detail) {
 		handle->errnum = CS_ERR_DETAIL;
@@ -624,10 +639,11 @@
 
 bool cs_reg_read(csh ud, cs_insn *insn, unsigned int reg_id)
 {
+    struct cs_struct *handle = NULL;
 	if (!ud)
 		return false;
 
-	struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+	handle = (struct cs_struct *)(uintptr_t)ud;
 
 	if (!handle->detail) {
 		handle->errnum = CS_ERR_DETAIL;
@@ -649,10 +665,11 @@
 
 bool cs_reg_write(csh ud, cs_insn *insn, unsigned int reg_id)
 {
+    struct cs_struct *handle = NULL;
 	if (!ud)
 		return false;
 
-	struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+	handle = (struct cs_struct *)(uintptr_t)ud;
 
 	if (!handle->detail) {
 		handle->errnum = CS_ERR_DETAIL;
@@ -674,10 +691,12 @@
 
 int cs_op_count(csh ud, cs_insn *insn, unsigned int op_type)
 {
+    struct cs_struct *handle = NULL;
+    unsigned int count = 0, i = 0;
 	if (!ud)
 		return -1;
 
-	struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+	handle = (struct cs_struct *)(uintptr_t)ud;
 
 	if (!handle->detail) {
 		handle->errnum = CS_ERR_DETAIL;
@@ -694,8 +713,6 @@
 		return -1;
 	}
 
-	unsigned int count = 0, i;
-
 	handle->errnum = CS_ERR_OK;
 
 	switch (handle->arch) {
@@ -745,10 +762,12 @@
 int cs_op_index(csh ud, cs_insn *insn, unsigned int op_type,
 		unsigned int post)
 {
+    struct cs_struct *handle = NULL;
+    unsigned int count = 0, i = 0;
 	if (!ud)
 		return -1;
 
-	struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+	handle = (struct cs_struct *)(uintptr_t)ud;
 
 	if (!handle->detail) {
 		handle->errnum = CS_ERR_DETAIL;
@@ -765,8 +784,6 @@
 		return -1;
 	}
 
-	unsigned int count = 0, i;
-
 	handle->errnum = CS_ERR_OK;
 
 	switch (handle->arch) {