Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. How do you understand cryptic code?

How do you understand cryptic code?

Scheduled Pinned Locked Moved The Lounge
csharpc++question
40 Posts 23 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H honey the codewitch

    I'm working on the rasterizer portion of my truetype code, for which I found some public domain code that partially works - the parts I need anyway. it's really hard to follow C code, so I'm porting it to C# before backporting it to C++ so that I can really understand it. This isn't the only time I've done that. In fact, I often find myself going this route when coding something based on a codebase I don't understand at first. Do you do this? More I guess I'm curious how y'all go about decoding code that is either more complicated than you can readily understand, or too ugly to readily understand? I port. :)

    Real programmers use butterflies

    U Offline
    U Offline
    UnchainedZA
    wrote on last edited by
    #18

    I just wish to understand how C is more cryptic than C++?

    H 1 Reply Last reply
    0
    • H honey the codewitch

      I'm working on the rasterizer portion of my truetype code, for which I found some public domain code that partially works - the parts I need anyway. it's really hard to follow C code, so I'm porting it to C# before backporting it to C++ so that I can really understand it. This isn't the only time I've done that. In fact, I often find myself going this route when coding something based on a codebase I don't understand at first. Do you do this? More I guess I'm curious how y'all go about decoding code that is either more complicated than you can readily understand, or too ugly to readily understand? I port. :)

      Real programmers use butterflies

      M Offline
      M Offline
      Martin ISDN
      wrote on last edited by
      #19

      in my head i port c# to c++ and then to c, so i can really understand

      1 Reply Last reply
      0
      • U UnchainedZA

        I just wish to understand how C is more cryptic than C++?

        H Offline
        H Offline
        honey the codewitch
        wrote on last edited by
        #20

        I never said it was. :confused:

        Real programmers use butterflies

        U 1 Reply Last reply
        0
        • H honey the codewitch

          I never said it was. :confused:

          Real programmers use butterflies

          U Offline
          U Offline
          UnchainedZA
          wrote on last edited by
          #21

          No, you didn't, it just seemed that way to me. I wouldn't even bother with C# in between, but that's a personal opinion, still trying to understand the logic though.

          H 1 Reply Last reply
          0
          • Greg UtasG Greg Utas

            I've never translated code to another language to help understand it, but I've reformatted it as a way to study it line by line.

            Robust Services Core | Software Techniques for Lemmings | Articles
            The fox knows many things, but the hedgehog knows one big thing.

            B Offline
            B Offline
            BryanFazekas
            wrote on last edited by
            #22

            Greg Utas wrote:

            I've never translated code to another language to help understand it, but I've reformatted it as a way to study it line by line.

            This is what I do. If I don't understand the code, I have no idea how I'd translate it.

            P 1 Reply Last reply
            0
            • U UnchainedZA

              No, you didn't, it just seemed that way to me. I wouldn't even bother with C# in between, but that's a personal opinion, still trying to understand the logic though.

              H Offline
              H Offline
              honey the codewitch
              wrote on last edited by
              #23

              The reason I move it between unmanaged and managed code is it forces me to restructure it. I can't just get lazy and copypasta. In the process of restructuring it, I grok it's machinations. Furthermore, C# has a library for pretty much everything, so no matter what I'm doing in C++, there is pretty going to be the equiv in the .NET framework that I can rely on, so I can seal it off there and I don't have to import code like say, the code to do an HTTP request from C++, if that's not directly what I'm working on. I hope what I just wrote makes sense! :)

              Real programmers use butterflies

              U 1 Reply Last reply
              0
              • H honey the codewitch

                The reason I move it between unmanaged and managed code is it forces me to restructure it. I can't just get lazy and copypasta. In the process of restructuring it, I grok it's machinations. Furthermore, C# has a library for pretty much everything, so no matter what I'm doing in C++, there is pretty going to be the equiv in the .NET framework that I can rely on, so I can seal it off there and I don't have to import code like say, the code to do an HTTP request from C++, if that's not directly what I'm working on. I hope what I just wrote makes sense! :)

                Real programmers use butterflies

                U Offline
                U Offline
                UnchainedZA
                wrote on last edited by
                #24

                Ok, thanks, my bad :) I don't even think of things such as .NET, it doesn't exist in my current life. If I can't find a suitable library, I have to create the functionality. It's just a completely different environment.

                R H 2 Replies Last reply
                0
                • H honey the codewitch

                  I'm working on the rasterizer portion of my truetype code, for which I found some public domain code that partially works - the parts I need anyway. it's really hard to follow C code, so I'm porting it to C# before backporting it to C++ so that I can really understand it. This isn't the only time I've done that. In fact, I often find myself going this route when coding something based on a codebase I don't understand at first. Do you do this? More I guess I'm curious how y'all go about decoding code that is either more complicated than you can readily understand, or too ugly to readily understand? I port. :)

                  Real programmers use butterflies

                  R Offline
                  R Offline
                  Rusty Bullet
                  wrote on last edited by
                  #25

                  Yes. Do it often.

                  1 Reply Last reply
                  0
                  • U UnchainedZA

                    Ok, thanks, my bad :) I don't even think of things such as .NET, it doesn't exist in my current life. If I can't find a suitable library, I have to create the functionality. It's just a completely different environment.

                    R Offline
                    R Offline
                    Rusty Bullet
                    wrote on last edited by
                    #26

                    Besides, "cryptic" usually is a matter of who wrote it and how, not what language it happens to be in. Some of the most cryptic code I have run across was SQL written as a single line. Without parsing it, I would never have figured it out.

                    H 1 Reply Last reply
                    0
                    • R Rusty Bullet

                      Besides, "cryptic" usually is a matter of who wrote it and how, not what language it happens to be in. Some of the most cryptic code I have run across was SQL written as a single line. Without parsing it, I would never have figured it out.

                      H Offline
                      H Offline
                      honey the codewitch
                      wrote on last edited by
                      #27

                      Yeah. I'm not trying to imply it's a particular language that's cryptic. It's all a matter of the code.

                      Real programmers use butterflies

                      1 Reply Last reply
                      0
                      • U UnchainedZA

                        Ok, thanks, my bad :) I don't even think of things such as .NET, it doesn't exist in my current life. If I can't find a suitable library, I have to create the functionality. It's just a completely different environment.

                        H Offline
                        H Offline
                        honey the codewitch
                        wrote on last edited by
                        #28

                        UnchainedZA wrote:

                        It's just a completely different environment.

                        That's exactly why I do it. :-D

                        Real programmers use butterflies

                        1 Reply Last reply
                        0
                        • B BryanFazekas

                          Greg Utas wrote:

                          I've never translated code to another language to help understand it, but I've reformatted it as a way to study it line by line.

                          This is what I do. If I don't understand the code, I have no idea how I'd translate it.

                          P Offline
                          P Offline
                          Peter R Fletcher
                          wrote on last edited by
                          #29

                          BryanFazekas wrote:

                          This is what I do. If I don't understand the code, I have no idea how I'd translate it.

                          If you don't understand a block of code at all, you can't translate it, but translating a code section that you think you understand into another language can be a very good test of whether you really do, since it forces you to concentrate on details of the implementation that you might otherwise skip over.

                          1 Reply Last reply
                          0
                          • H honey the codewitch

                            I'm working on the rasterizer portion of my truetype code, for which I found some public domain code that partially works - the parts I need anyway. it's really hard to follow C code, so I'm porting it to C# before backporting it to C++ so that I can really understand it. This isn't the only time I've done that. In fact, I often find myself going this route when coding something based on a codebase I don't understand at first. Do you do this? More I guess I'm curious how y'all go about decoding code that is either more complicated than you can readily understand, or too ugly to readily understand? I port. :)

                            Real programmers use butterflies

                            G Offline
                            G Offline
                            Gary Wheeler
                            wrote on last edited by
                            #30

                            I have this precise issue in a legacy project I have inherited. The author wrote the code in a fashion that virtually guaranteed he was the only possible maintainer [approx. 4,000 words of obscenity-laden rant omitted]. On occasion I have copied the relevant source files to another folder and the reformatted and refactored mercilessly. The reformatting is to correct layout issues since his brace style and tabs weren't consistent (I've found tabs of 2, 3, 4, and 8 with tab characters). The refactoring is to give values meaningful names. The reworked source code lets me understand how the original works when I need to make changes or understand how a feature works. Given the fragility of this towering pile of excreta, I don't use the reformatted code for anything other than my own understanding.

                            Software Zen: delete this;

                            H 1 Reply Last reply
                            0
                            • G Gary Wheeler

                              I have this precise issue in a legacy project I have inherited. The author wrote the code in a fashion that virtually guaranteed he was the only possible maintainer [approx. 4,000 words of obscenity-laden rant omitted]. On occasion I have copied the relevant source files to another folder and the reformatted and refactored mercilessly. The reformatting is to correct layout issues since his brace style and tabs weren't consistent (I've found tabs of 2, 3, 4, and 8 with tab characters). The refactoring is to give values meaningful names. The reworked source code lets me understand how the original works when I need to make changes or understand how a feature works. Given the fragility of this towering pile of excreta, I don't use the reformatted code for anything other than my own understanding.

                              Software Zen: delete this;

                              H Offline
                              H Offline
                              honey the codewitch
                              wrote on last edited by
                              #31

                              I have only one thing to say in response, but it's a mouthful:

                              static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, stbtt__csctx *c)
                              {
                              int in_header = 1, maskbits = 0, subr_stack_height = 0, sp = 0, v, i, b0;
                              int has_subrs = 0, clear_stack;
                              float s[48];
                              stbtt__buf subr_stack[10], subrs = info->subrs, b;
                              float f;

                              #define STBTT__CSERR(s) (0)

                              // this currently ignores the initial width value, which isn't needed if we have hmtx
                              b = stbtt__cff_index_get(info->charstrings, glyph_index);
                              while (b.cursor < b.size) {
                              i = 0;
                              clear_stack = 1;
                              b0 = stbtt__buf_get8(&b);
                              switch (b0) {
                              // @TODO implement hinting
                              case 0x13: // hintmask
                              case 0x14: // cntrmask
                              if (in_header)
                              maskbits += (sp / 2); // implicit "vstem"
                              in_header = 0;
                              stbtt__buf_skip(&b, (maskbits + 7) / 8);
                              break;

                                case 0x01: // hstem
                                case 0x03: // vstem
                                case 0x12: // hstemhm
                                case 0x17: // vstemhm
                                   maskbits += (sp / 2);
                                   break;
                              
                                case 0x15: // rmoveto
                                   in\_header = 0;
                                   if (sp < 2) return STBTT\_\_CSERR("rmoveto stack");
                                   stbtt\_\_csctx\_rmove\_to(c, s\[sp-2\], s\[sp-1\]);
                                   break;
                                case 0x04: // vmoveto
                                   in\_header = 0;
                                   if (sp < 1) return STBTT\_\_CSERR("vmoveto stack");
                                   stbtt\_\_csctx\_rmove\_to(c, 0, s\[sp-1\]);
                                   break;
                                case 0x16: // hmoveto
                                   in\_header = 0;
                                   if (sp < 1) return STBTT\_\_CSERR("hmoveto stack");
                                   stbtt\_\_csctx\_rmove\_to(c, s\[sp-1\], 0);
                                   break;
                              
                                case 0x05: // rlineto
                                   if (sp < 2) return STBTT\_\_CSERR("rlineto stack");
                                   for (; i + 1 < sp; i += 2)
                                      stbtt\_\_csctx\_rline\_to(c, s\[i\], s\[i+1\]);
                                   break;
                              
                                // hlineto/vlineto and vhcurveto/hvcurveto alternate horizontal and vertical
                                // starting from a different place.
                              
                                case 0x07: // vlineto
                                   if (sp < 1) return STBTT\_\_CSERR("vlineto stack");
                                   goto vlineto;
                                case 0x06: // hlineto
                                   if (sp < 1) return STBTT\_\_CSERR("hlineto stack");
                                   for (;;) {
                                      if (i >= sp) break;
                                      stbtt\_\_csctx\_rline\_to(c, s\[i\], 0);
                                      i++;
                                vlineto:
                                      if (i >= sp) break;
                                      stbtt\_\_csctx\_rline\_to(c, 0, s\[i\]);
                                      i++;
                                   }
                                   break;
                              
                                case 0x1F: // hvcurveto
                                   if (sp < 4) return STBTT\_\_CSERR("hvcurveto stack");
                              
                              1 Reply Last reply
                              0
                              • H honey the codewitch

                                I'm working on the rasterizer portion of my truetype code, for which I found some public domain code that partially works - the parts I need anyway. it's really hard to follow C code, so I'm porting it to C# before backporting it to C++ so that I can really understand it. This isn't the only time I've done that. In fact, I often find myself going this route when coding something based on a codebase I don't understand at first. Do you do this? More I guess I'm curious how y'all go about decoding code that is either more complicated than you can readily understand, or too ugly to readily understand? I port. :)

                                Real programmers use butterflies

                                J Offline
                                J Offline
                                Julian Ragan
                                wrote on last edited by
                                #32

                                I either write code analysis report, where I divide code into sections and write section by section, what I think it does, then verify with debugger, or I create a good old flow diagram, if it is really cryptic (even for OO this will work for extracting actual algorithms, if you can identify sequence first).

                                H 1 Reply Last reply
                                0
                                • J Julian Ragan

                                  I either write code analysis report, where I divide code into sections and write section by section, what I think it does, then verify with debugger, or I create a good old flow diagram, if it is really cryptic (even for OO this will work for extracting actual algorithms, if you can identify sequence first).

                                  H Offline
                                  H Offline
                                  honey the codewitch
                                  wrote on last edited by
                                  #33

                                  I can totally see the sense in that, but I could never do it. Too rigorous for me. :laugh: I am good at improvisation and creativity, but I am no good at being methodical.

                                  Real programmers use butterflies

                                  J 1 Reply Last reply
                                  0
                                  • H honey the codewitch

                                    I'm working on the rasterizer portion of my truetype code, for which I found some public domain code that partially works - the parts I need anyway. it's really hard to follow C code, so I'm porting it to C# before backporting it to C++ so that I can really understand it. This isn't the only time I've done that. In fact, I often find myself going this route when coding something based on a codebase I don't understand at first. Do you do this? More I guess I'm curious how y'all go about decoding code that is either more complicated than you can readily understand, or too ugly to readily understand? I port. :)

                                    Real programmers use butterflies

                                    J Offline
                                    J Offline
                                    JP Reyes
                                    wrote on last edited by
                                    #34

                                    Not exactly. I used to use C to spit out ARM16 Assembler so I got an idea how I could program what I needed in assembler...then I yanked out all the stuff I didn't need (Like when you throw out all the useless HTML an editor generates). Smaller, faster, optimized and straight to the point (well for me...anybody else would also have to be comfortable with ARM16 as well)

                                    H 1 Reply Last reply
                                    0
                                    • H honey the codewitch

                                      I'm working on the rasterizer portion of my truetype code, for which I found some public domain code that partially works - the parts I need anyway. it's really hard to follow C code, so I'm porting it to C# before backporting it to C++ so that I can really understand it. This isn't the only time I've done that. In fact, I often find myself going this route when coding something based on a codebase I don't understand at first. Do you do this? More I guess I'm curious how y'all go about decoding code that is either more complicated than you can readily understand, or too ugly to readily understand? I port. :)

                                      Real programmers use butterflies

                                      E Offline
                                      E Offline
                                      englebart
                                      wrote on last edited by
                                      #35

                                      Do you port all pointers to array access? Pointers are always the pain for this type of exercise. Some algorithms are easier to understand that way. Multilevel pointers are the worst.

                                      H 1 Reply Last reply
                                      0
                                      • E englebart

                                        Do you port all pointers to array access? Pointers are always the pain for this type of exercise. Some algorithms are easier to understand that way. Multilevel pointers are the worst.

                                        H Offline
                                        H Offline
                                        honey the codewitch
                                        wrote on last edited by
                                        #36

                                        Whenever I can, that's what I do. I turn it to arrays and indices. It is difficult but actually that process is critical for me to understand it. It's one of the most important parts of the port. And yeah, double indirection and such gets tricky fast.

                                        Real programmers use butterflies

                                        1 Reply Last reply
                                        0
                                        • J JP Reyes

                                          Not exactly. I used to use C to spit out ARM16 Assembler so I got an idea how I could program what I needed in assembler...then I yanked out all the stuff I didn't need (Like when you throw out all the useless HTML an editor generates). Smaller, faster, optimized and straight to the point (well for me...anybody else would also have to be comfortable with ARM16 as well)

                                          H Offline
                                          H Offline
                                          honey the codewitch
                                          wrote on last edited by
                                          #37

                                          I rarely write in assembly these days but I read it a lot. I've focused more on getting C and particularly C++ to generate the exact machine code I intended if I'd have written by hand, or as is often the case, better.

                                          Real programmers use butterflies

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups