URL
https://opencores.org/ocsvn/cpu_lecture/cpu_lecture/trunk
Subversion Repositories cpu_lecture
[/] [cpu_lecture/] [trunk/] [html/] [34_Listing_of_end_conv.cc.html] - Rev 6
Go to most recent revision | Compare with Previous | Blame | View Log
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <HTML> <HEAD> <TITLE>html/Listing_of_end_conv.cc</TITLE> <META NAME="generator" CONTENT="HTML::TextToHTML v2.46"> <LINK REL="stylesheet" TYPE="text/css" HREF="lecture.css"> </HEAD> <BODY> <P><table class="ttop"><th class="tpre"><a href="33_Listing_of_make_mem.cc.html">Previous Lesson</a></th><th class="ttop"><a href="toc.html">Table of Content</a></th><th class="ttop"></th></table> <hr> <H1><A NAME="section_1">34 LISTING OF end_conv.cc</A></H1> <pre class="vhdl"> 1 #include "assert.h" 2 #include "ctype.h" 3 #include "stdio.h" 4 #include "string.h" 5 6 //----------------------------------------------------------------------------- 7 int 8 main(int argc, const char * argv) 9 { 10 char buffer[2000]; 11 int pc, val, val2; 12 13 for (;;) 14 { 15 char * s = fgets(buffer, sizeof(buffer) - 2, stdin); 16 if (s == 0) return 0; 17 18 // map lines ' xx:' and 'xxxxxxxx; to 2* the hex value. 19 // 20 if ( 21 (isxdigit(s[0]) || s[0] == ' ') && 22 (isxdigit(s[1]) || s[1] == ' ') && 23 (isxdigit(s[2]) || s[2] == ' ') && 24 isxdigit(s[3]) && s[4] == ':') // ' xx:' 25 { 26 assert(1 == sscanf(s, " %x:", &pc)); 27 if (pc & 1) printf("%4X+:", pc/2); 28 else printf("%4X:", pc/2); 29 s += 5; 30 } 31 else if (isxdigit(s[0]) && isxdigit(s[1]) && isxdigit(s[2]) && 32 isxdigit(s[3]) && isxdigit(s[4]) && isxdigit(s[5]) && 33 isxdigit(s[6]) && isxdigit(s[7])) // 'xxxxxxxx' 34 { 35 assert(1 == sscanf(s, "%x", &pc)); 36 if (pc & 1) printf("%8.8X+:", pc/2); 37 else printf("%8.8X:", pc/2); 38 s += 8; 39 } 40 else // other: copy verbatim 41 { 42 printf("%s", s); 43 continue; 44 } 45 46 while (isblank(*s)) printf("%c", *s++); 47 48 // endian swap. 49 // 50 while (isxdigit(s[0]) && 51 isxdigit(s[1]) && 52 s[2] == ' ' && 53 isxdigit(s[3]) && 54 isxdigit(s[4]) && 55 s[5] == ' ') 56 { 57 assert(2 == sscanf(s, "%x %x ", &val, &val2)); 58 printf("%2.2X%2.2X ", val2, val); 59 s += 6; 60 } 61 62 char * s1 = strstr(s, ".+"); 63 char * s2 = strstr(s, ".-"); 64 if (s1) 65 { 66 assert(1 == sscanf(s1 + 2, "%d", &val)); 67 assert((val & 1) == 0); 68 sprintf(s1, " 0x%X", (pc + val)/2 + 1); 69 printf(s); 70 s = s1 + strlen(s1) + 1; 71 } 72 else if (s2) 73 { 74 assert(1 == sscanf(s2 + 2, "%d", &val)); 75 assert((val & 1) == 0); 76 sprintf(s2, " 0x%X", (pc - val)/2 + 1); 77 printf(s); 78 s = s2 + strlen(s2) + 1; 79 } 80 81 printf("%s", s); 82 } 83 } 84 //----------------------------------------------------------------------------- <pre class="filename"> tools/end_conv.cc </pre></pre> <P> <P><hr><BR> <table class="ttop"><th class="tpre"><a href="33_Listing_of_make_mem.cc.html">Previous Lesson</a></th><th class="ttop"><a href="toc.html">Table of Content</a></th><th class="ttop"></th></table> </BODY> </HTML>
Go to most recent revision | Compare with Previous | Blame | View Log