Nobody shares knowledge better than this


  • :belt_onion:

    @SpectateSwamp indeed.

    Eh, actually not exactly true, but...

    If it's the results that matter.... I think you've proven why we shouldn't use vb.....



  • @sloosecannon said in Nobody shares knowledge better than this:

    @SpectateSwamp indeed.

    Eh, actually not exactly true, but...

    If it's the results that matter.... I think you've proven why we shouldn't use vb.....

    Nope. You are wrong....



  • TIL that Swampy has a link to this thread on his home page. It's labeled in a way that implies he sees us as supporting him.

    @SpectateSwamp, you are aware that everyone here mocks you at every opportunity, aren't you? Why would you even admit that this thread exists to anyone not already taking part in it?


  • :belt_onion:

    @ScholRLEA said in Nobody shares knowledge better than this:

    TIL that Swampy has a link to this thread on his home page. It's labeled in a way that implies he sees us as supporting him.

    @SpectateSwamp, you are aware that everyone here mocks you at every opportunity, aren't you? Why would you even admit that this thread exists to anyone not already taking part in it?

    I'd almost be worried people would get the wrong impression if it wasn't for the fact that there aren't any actual users.



  • That's it, the only way to deal with this is to tackle the published source code head-on.

    Having taken a look at some of it already, I can say that the phrase, "This code was generated by a tool" has never been more apt.

    I'm going in. Take care of my family when I'm gone, and find a pleasant institution for them to keep my body at until it fails.

    EDIT: Unholy fuck. I thought I was kidding, but... 10208 lines of VB5 code? And 400 of the first 500 lines of that are free variable declarations? And that's not even getting to the .NET port. I'm doomed.

    Oh, and none of the declared strings so far are bigger than 255. Didn't we just discuss this recently regarding Pascal strings? Tons of variables with names in the form foon, foon+1, never a good sign, that.

    And this comment:

    'savior version 1.0
    'all unpaid copies carry a curse
    '   be warned
    

    TIL that Swampy took lessons in Advanced Crazy from TempleOS. Good to know.



  • The gosubs and the gotos... sweet mother Eris, they're everyfuckingwhere, why why why why why



  • If SAVE_ttt = "F" And SSS1 <> "" And InStr(aaa, SSS1) = 0 Then
        GoTo line_2200
    End If
    If SAVE_ttt = "F" And SSS2 <> "" And InStr(aaa, SSS2) = 0 Then
        GoTo line_2200
    End If
    If SAVE_ttt = "F" And SSS3 <> "" And InStr(aaa, SSS3) = 0 Then
       GoTo line_2200
    End If
    If SAVE_ttt = "F" And SSS4 <> "" And InStr(aaa, SSS4) = 0 Then
        GoTo line_2200
    End If
    If SAVE_ttt = "F" And SSS5 <> "" And InStr(aaa, SSS5) = 0 Then
        GoTo line_2200
    End If
    If SAVE_ttt = "F" And SSS6 <> "" And InStr(aaa, SSS6) = 0 Then
        GoTo line_2200
    End If
    

    There are no words.

    Filed Under: I initially mis-typed 'words' as 'wards'. I'm not sure if these would have been mental hospitals or magical protection circles, but either way, it fits.



  • After posting that, I took a short break, and after a moment something awful occurred to me: most of the code never nests more than one level. The gotos and gosubs are there because the code was written as if it were QuickBasic rather than VB, and while a few of the more recent parts do have some nested conditionals, I have yet to see even one explicit loop.

    A search on 'while' turns up two explicit indefinite loops out of six references, while a search of 'Next' (104 references) finds the end-points of several definite loops, most of which appear to be one-liners. So at least Swampy knew about things that were in QuickBasic at the time he wrote them, good to know.

    This isn't just bad programming, this is a total failure to understand the language being used. And this in what Swampy says is his preferred programming language.

    That explains so much.



  • @SpectateSwamp, aside from VB5 (and QuickBasic, apparently), what programming languages do you know? Just wondering.



  • If Len(ttt) = 0 Then GoTo line_80
    If Len(ttt) = 1 Then GoTo line_80
    If Len(ttt) = 2 And ttt = "P1" Then GoTo line_80
    If Len(ttt) = 2 And ttt = "CH" Then GoTo line_80
    If Len(ttt) = 2 Then
        ttt = "P"
        GoTo line_80
    End If
    If Len(ttt) = 3 Then
        ttt = "P1"
        GoTo line_80
    End If
    If Len(ttt) = 4 Then
        ttt = "CH"
        GoTo line_80
    End If
    If Len(ttt) = 5 Then
        ttt = "Z"
        GoTo line_80
    End If
    If Len(ttt) = 6 Then
        ttt = "E"
        GoTo line_80
    End If
    If Len(ttt) = 7 Then
        ttt = "F"
        GoTo line_80
    End If
    If Len(ttt) = 8 Then
        ttt = "S"
        GoTo line_80
    End If
    If Len(ttt) = 9 Then
        ttt = "X"
        GoTo line_80
    End If
    
    line_80:
    

    ARE YOU FUCKING KIDDING ME?!?!?!



  • I am less than a tenth of the way through this trash heap, and even just skimming it, I can't go on. I can only hope that the .Net port is at least a little closer to sanity.



  • @ScholRLEA said in Nobody shares knowledge better than this:

    a little closer to sanity.

    Considering who wrote it, that seems very unlikely.



  • It's worse. Holy mother of fuck, how is this possible? I didn't even know VB.Net had a GoTo, for fuck's sake. I can't see how this code actually works, I'm pretty sure he just copied the file FORM01.vb into the VB.Net editor and never actually changed a damn thing, completely unconcerned with whether it actually compiled or not.

    And there are tons of 'UPGRADE_ISSUE: GoSub statement is not supported. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="C5A1A479-AB8B-4D40-AAF4-DB19A2E5E77F"' lines in the code. What a surprise.

    Also, 'benstorer'? Is that another name Swampy uses, or is this someone else entirely?


  • ♿ (Parody)

    @ScholRLEA said in Nobody shares knowledge better than this:

    Also, 'benstorer'? Is that another name Swampy uses, or is this someone else entirely?

    Sounds like good old @bstorer, AKA @moderator.



  • OK, I didn't know that. I guess he's the one who set up the repo, not Swampy, either that or he decided that life wasn't worth living anymore and tried to end it all by editing this monstrosity.

    Fuck this shit, I'm out. Congratulations, Swampy, your terrible code has defeated me.

    This is some of, if not the worst code I have ever seen - and I tried to read the FORTRAN code for the original Colossal Cave Adventure once. This code is awful beyond description. This is not a joke, I am dead fucking serious about this.


  • 🚽 Regular

    I especially like the labels being named after the line number. Goto's reduce maintainability as it is, this maximizes the unmaintainability. It's been several years since I saw his source code, and it's something I've never wanted to look at on my own ever again.



  • @ScholRLEA If that snippet you posted is the worse in it, it's probably not even close to the worse code I've seen.



  • @groo said in Nobody shares knowledge better than this:

    @ScholRLEA If that snippet you posted is the worse in it, it's probably not even close to the worse code I've seen.

    Trust me, it isn't. Not even close. It was, however, both bad and had a fix so blindly obvious that only a brain-damaged lemur could have written it that way without thinking, "is there a better way to do this?"

    Just off the top of my head:

    Dim SSS(6) as String
    
    ''  later...
    
    For n = 1 To 6 Do
        If SAVE_ttt = "F" And  SSS(n) <> "" And InStr(aaa, SSS(n)) = 0 Then
            Call do_this_part
            Exit For
        End If
    Next n
    

    Something similar would be fairly simple to do for the second example, too. IOW, it's not just that it is bad code, but that it's bad in a way that shows a total lack of thought on Swampy's part when writing it.


  • area_can

    @ScholRLEA so is SS like terry davis? or is he just eccentric?



  • @b36e I would definitely put Swampy in the same category as Terry Davis, Alex Chiu, gavino_learning, and John Jenkins (the Busco Quadnary guy); maybe not quite Archimedes Plutonium or Time Cube level crazy but not far from it.

    That having been said, from what little I have seen of TempleOS, as a programmer Davis beats Swampy like a redheaded stepchild. Though that isn't hard.



  • @ScholRLEA said in Nobody shares knowledge better than this:

    @b36e I would definitely put Swampy in the same category as Terry Davis, Alex Chiu, gavino_learning, and John Jenkins (the Busco Quadnary guy); maybe not quite Archimedes Plutonium or Time Cube level crazy but not far from it.

    That having been said, from what little I have seen of TempleOS, as a programmer Davis beats Swampy like a redheaded stepchild. Though that isn't hard.

    Your Alex Chiu is an entirely different category. He's a business man.



  • @CreatedToDislikeThis I suppose it comes down to whether he drinks his own snake oil, and I am pretty sure that he does.


  • BINNED

    @ScholRLEA Swampy even milks his own snakes!


  • Notification Spam Recipient

    I just came across this. It has probably been shared already, but I'm going to share it here anyway:

    https://encyclopediadramatica.se/SpectateSwamp


  • Notification Spam Recipient

    @SpectateSwamp how does it work with high dpi screens?



  • It just occurred to me that the GoTo and GoSubs might have been meant for performance tuning. That was a common argument against 'structured programming' in the 1970s, and even into the late 1980s it would appear in magazine articles.

    The problem, of course, is that the claims were generally unfounded, with no profiling figures to back them up. Even with a relatively crude student compiler, the chances are that the 'tuned' version would produce code almost identical to the better-structured version; with an optimizing compiler, it is likely to wreck most of the opportunities for optimization, leading to worse performance.

    The same applies to GoSub, which is basically a procedure call that doesn't create an activation record. While setting up the stack frame does take time, the trade off is in global memory space; if there aren't any local variables, you are forced to create a huge swarm of scratch vars in global memory, which is exactly @SpectateSwamp did. Good programming practices aside, this means that a huge amount of memory is wasted, which in a system with virtual memory also translates into slower performance.



  • @DogsB said in Nobody shares knowledge better than this:

    @SpectateSwamp how does it work with high dpi screens?

    How would he know? I'm guessing that he still uses an old IBM 8514 monitor or something of similar vintage.





  • @ScholRLEA said in Nobody shares knowledge better than this:

    Put bluntly, you're argument is not convincing. If you just like it better, say so, or else give actual reasons why you consider it superior.

    Managers can look at a line of VB, and think they know what it's doing.

    So they get pretty confident in hiring underpaid graduates of liberal arts to do their business logic.



  • @ScholRLEA said in Nobody shares knowledge better than this:

    That's it, the only way to deal with this is to tackle the published source code head-on.

    Having taken a look at some of it already, I can say that the phrase, "This code was generated by a tool" has never been more apt.

    I'm going in. Take care of my family when I'm gone, and find a pleasant institution for them to keep my body at until it fails.

    EDIT: Unholy fuck. I thought I was kidding, but... 10208 lines of VB5 code? And 400 of the first 500 lines of that are free variable declarations? And that's not even getting to the .NET port. I'm doomed.

    Oh, and none of the declared strings so far are bigger than 255. Didn't we just discuss this recently regarding Pascal strings? Tons of variables with names in the form foon, foon+1, never a good sign, that.

    And this comment:

    'savior version 1.0
    'all unpaid copies carry a curse
    '   be warned
    

    TIL that Swampy took lessons in Advanced Crazy from TempleOS. Good to know.

    Good luck. I seem to recall someone else decided to read the SSDS source several years back, and they aren't here anymore...



  • @ScholRLEA said in Nobody shares knowledge better than this:

    That's it, the only way to deal with this is to tackle the published source code head-on.

    As soon as I saw this I knew it was not going to end well. It never does.

    @ScholRLEA said in Nobody shares knowledge better than this:

    even just skimming it, I can't go on

    That is the correct decision. AFAIK everyone who's looked at it has essentially done the same.

    In looking for some old posts of mine in this thread from the CS days, I came across this, which I think is as true now as it was when I wrote it:

    Personally, I believe SSDS's greatest value is as a debugging / spaghetti tracing exercise. Spend a few days digging through the code to try to answer questions like "Why does it always fail the first time you run it?" and you will emerge with a deep-rooted hatred of horrible code and a determination to do things the right way.

    @The_Quiet_One said in Nobody shares knowledge better than this:

    I especially like the labels being named after the line number.

    That's what you do in 1980s-era BASIC, so you should obviously do the same in VB5. I think this probably explains the larger issues of flow (i.e. not having any); that's probably the style of BASIC that he first became comfortable using and he never really learned anything more advanced, so now he writes ancient-style BASIC in VB5.

    Oh wait, I found this quote from Swampy himself:

    Probably because I LOVE Line Numbers too. They tried to Steal line numbers from You but SSDS has brought them BACK. Every possible error must come from within this ONE module (how simple). I can just jam it and jam it till things fail.

    I'm not sure if it explains anything, but there's some insight into his mindset for you.

    @mott555 said in Nobody shares knowledge better than this:

    Good luck. I seem to recall someone else decided to read the SSDS source several years back, and they aren't here anymore...

    It's not quite that bad. Here's an old post of mine where I took apart one of the more comprehensible sections of code to show how badly it was written (and how it could be re-written in one line while fixing two awful bugs).

    OTOH, @Xyro also posted some snippets and hasn't been seen in some years. Notice that his post ends with

    Ok, I need to stop now.

    As I said earlier, this is the common and correct reaction.

    Hmmm, @spenk also had a look at some of it (and even tried to use the program) and is no longer here... @MichelD looked at it and hasn't been seen since... OK, I have to admit, there is a bit of a trend there. But I'm still here, at least.

    If anyone else thinks they might be interested in having a look, I highly recommend trying this one first. It's a much smaller and saner program than SSDS, but still displays much of Spectate's programming style. (My critique of it is here.)

    Note two of the big differences between this and the SSDS source code that I called out at the end of my critique:

    Shockingly, and in contrast to SSDS, the sections of the program are listed pretty much in the order that they are executed. I assume this is mainly because it is such a short program. Nevertheless, there is one thing about its structure that is good, and that's one more than SSDS had.

    Actually there is another improvement over SSDS - it doesn't seem to reuse the main variables for a different purpose a bit later on without any explanation, which was such an endearing feature of SSDS.

    If you still want to check out SSDS source code after doing that, then on your own head be it.



  • Also, here's an explanation of how to use one of the operations of this wonderful program, from the man himself.

    @SpectateSwamp said in Nobody shares knowledge better than this:

    First off to do a merge. You need a running version of the search. It is a little problematic during the initial started up. Creates control files etc and needs to be "x"'ed or "e"'ed out. Now to the merge. Start the search a 2nd time. at prompt #1 take the default provided as this file doesn't matter for a merge. At prompt #2 enter "merge" The next prompt is for the directory or device to merge files from ie "c:\search\" is the one I want to merge the text files from. The next prompt is for the file type "txt" is the default. The next prompt is for the output file of the merge operation. The default is "merge.txt" the next prompt is for Append or Overwrite[....]

    There's much more, which you can see if you really want to by going to the link. This should be enough to give you an idea. The fact that the program crashes the first time you run it was one of our favourite misfeatures back in the day.



  • And thusly @ScholRLEA has met @SpectateSwamp and has been overcome.

    Will a challenger arise to take on this great beastamazing programmer?

    Or will yet another foolhardy adventurer succumb to this mythical dragon?

    Tune in next week for another exciting episode of "Nobody shares knowledge better than this"!


  • :belt_onion:

    @djls45 said in Nobody shares knowledge better than this:

    Will a challenger arise to take on this great beastamazing programmer?

    Careful, you'll inflate his ego....



  • @ScholRLEA said in Nobody shares knowledge better than this:

    After posting that, I took a short break, and after a moment something awful occurred to me: most of the code never nests more than one level. The gotos and gosubs are there because the code was written as if it were QuickBasic rather than VB, and while a few of the more recent parts do have some nested conditionals, I have yet to see even one explicit loop.

    A search on 'while' turns up two explicit indefinite loops out of six references, while a search of 'Next' (104 references) finds the end-points of several definite loops, most of which appear to be one-liners. So at least Swampy knew about things that were in QuickBasic at the time he wrote them, good to know.

    This isn't just bad programming, this is a total failure to understand the language being used. And this in what Swampy says is his preferred programming language.

    That explains so much.

    It's not the code that counts it's the results.
    The topic remains unchallenged...

    There are a few examples in the code that the "perfect perfects" wouldn't like or may even drive them crazy

    What about keep it simple don't you understand?

    I have no problem diving back into code I wrote nearly 20 years ago.



  • @DogsB said in Nobody shares knowledge better than this:

    @SpectateSwamp how does it work with high dpi screens?

    Very well.

    Give it a try...

    I haven't lost any data since the late 90's



  • @ScholRLEA said in Nobody shares knowledge better than this:

    It just occurred to me that the GoTo and GoSubs might have been meant for performance tuning. That was a common argument against 'structured programming' in the 1970s, and even into the late 1980s it would appear in magazine articles.

    The problem, of course, is that the claims were generally unfounded, with no profiling figures to back them up. Even with a relatively crude student compiler, the chances are that the 'tuned' version would produce code almost identical to the better-structured version; with an optimizing compiler, it is likely to wreck most of the opportunities for optimization, leading to worse performance.

    The same applies to GoSub, which is basically a procedure call that doesn't create an activation record. While setting up the stack frame does take time, the trade off is in global memory space; if there aren't any local variables, you are forced to create a huge swarm of scratch vars in global memory, which is exactly @SpectateSwamp did. Good programming practices aside, this means that a huge amount of memory is wasted, which in a system with virtual memory also translates into slower performance.

    Computers are thousands of times faster now...
    Anybody that worries about performance is STUPID.



  • @SpectateSwamp said in Nobody shares knowledge better than this:

    Computers are thousands of times faster now...
    Anybody that worries about performance is STUPID.

    Were you here during Discourse?



  • @mott555 said in Nobody shares knowledge better than this:

    @SpectateSwamp said in Nobody shares knowledge better than this:

    Computers are thousands of times faster now...
    Anybody that worries about performance is STUPID.

    Were you here during Discourse?

    Right here watching you...



  • @ScholRLEA said in Nobody shares knowledge better than this:

    Or maybe you could tell us why you think VB5 is so bitchin' awesome. We're all ears. It's not like some of us (me, for example) don't have weird ideas about what makes a good programming language, too.

    Because the greatest program on the Planet runs VB5. Nuff said



  • @SpectateSwamp You do realize that you just removed a justification for the way you wrote this, don't you? I was looking for a possible way to explain why YOUR code is terrible, and now you have just shot yourself in the foot by rejecting that out I gave you.

    The argument from simplicity is absurd, too. The way it is written is so complicated that it must have taken years longer than it would have if it really had been written in a simple manner.



  • @ScholRLEA said in Nobody shares knowledge better than this:

    @SpectateSwamp You do realize that you just removed a justification for the way you wrote this, don't you? I was looking for a possible way to explain YOUR code is terrible, and now you have just shot yourself in the foot by rejecting that out I gave you.

    The argument from simplicity is absurd, too. The way it is written is so complicated that it must have taken years longer than it would have if it really had been written in a simple manner.

    SSDS is far from complete.
    Few programs this old can be updated with features like this app has.
    My todo list for the program is huge.
    In doing the mp3 stuff. The friend that gave me the music files asked if it could be interrupted so data changes could be made. He is right. Now if you want to make search data changes for a song, picture or video one needs to open the .txt file with notepad and key it in.
    SSDS has a search and replace function that I'll use to ADD / CHANGE the "metadata" when requested.

    I was also going to reread my posts to make sure there wasn't any knowledge that I didn't share yet. I don't want to go about repeating myself.



  • To continue: all the code is in a few event handlers, most of which are taken up with parsing commands written into textboxes, basically throwing away the form tools in order to replicate a command-line shell. No functions or subroutines are defined to reduce complexity anywhere. Instead, repeated code is copypasta'd all over, meaning that if you find a bug in on place you need to fix it in a dozen others.

    The majority of the variables are simple scalars, including many which are apparently meant to go together; but rather than using an array to hold them, you gave them names of the form foo1, foo2, foo3, and so on, imitating the form of an array but none of its function, which means that you end up with more copypasta whenever you need to do anything to a group of data points.

    And instead of leaving the loops and conditionals to the compiler, you created an insane spaghetti that I really doubt you actually can read yourself despite your claims that you can.



  • @SpectateSwamp, in all sincerity (something rare on WTDWTF), I ant to ask: do you really believe that this:

    If Len(ttt) = 0 Then GoTo line_80
    If Len(ttt) = 1 Then GoTo line_80
    If Len(ttt) = 2 And ttt = "P1" Then GoTo line_80
    If Len(ttt) = 2 And ttt = "CH" Then GoTo line_80
    If Len(ttt) = 2 Then
        ttt = "P"
        GoTo line_80
    End If
    If Len(ttt) = 3 Then
        ttt = "P1"
        GoTo line_80
    End If
    If Len(ttt) = 4 Then
        ttt = "CH"
        GoTo line_80
    End If
    If Len(ttt) = 5 Then
        ttt = "Z"
        GoTo line_80
    End If
    If Len(ttt) = 6 Then
        ttt = "E"
        GoTo line_80
    End If
    If Len(ttt) = 7 Then
        ttt = "F"
        GoTo line_80
    End If
    If Len(ttt) = 8 Then
        ttt = "S"
        GoTo line_80
    End If
    If Len(ttt) = 9 Then
        ttt = "X"
        GoTo line_80
    End If
    
    line_80:
         ' I had to mangle the comments to make them show up right in NodeBB'
    

    is simpler, easier to understand, and easier to maintain than:

    Enum SearchType
        None
        FileName
        Photo
        PhotoAdvanced
        Change
        Flash
        Context 
        Quick
        Append
        Enter
        XXXX     ' I have no idea what this option goes to '
    End Enum
    
    Function GetSearchTypeByLength(searchTypeStr as String) as SearchType
        Dim typeStrLen as Integer
        Dim typeVal as SearchType
    
        typeStrLen = Len(searchTypeStr)
    
        Select Case typeStrLen
            Case 0, 1:
                typeVal = None
            Case 2:
                If searchTypeStr = "P1"
                    typeVal = PhotoAdvanced
                ElseIf searchTypeStr = "CH"
                    typeVal = Change
                Else
                   typeVal = Photo
                End If
            Case 3:
               typeVal = PhotoAdvanced
            Case 4:
               typeVal = Change
            Case 5:
               typeVal = Append
            Case 6:
               typeVal = Enter
            Case 7:
               typeVal = Flash
            Case 8:
               typeVal = General
            Case 9:
               typeVal = XXXX
        End Select
     
        GetSearchTypeByLength = typeVal
    End Function
    
    Sub SelectSearchFunction(type as SearchType)
        ' I won''t go into this just yet, so this  '
        ' is just a stub of the procedure I''d use '         
    End Sub 
    
    ' later ... '
    
    SelectSearchFunction(GetSearchTypeByLength(ttt))
    

    I ask because, well, it just seems hard to imagine that anyone would consider the first one better in any possible way. And that's just dealing with the gross structural stuff; I haven't even tried to address whether using the length of an input text to determine the operation to use makes any kind of sense at all (hint: it doesn't), and a huge list of other :wtf:erys across this pile of steaming moose crap.



  • @Vault_Dweller said in Nobody shares knowledge better than this:

    I just came across this. It has probably been shared already, but I'm going to share it here anyway:

    https://encyclopediadramatica.se/SpectateSwamp

    He's also mentioned in the LOLcow Wiki.
    https://kiwifar.ms/threads/spectateswamp-stonedan.2397/

    Oh, and I forgot to mention: that file you add all the file information to? Yeah, that's an index, you fucking idiot.



  • @ScholRLEA said in Nobody shares knowledge better than this:

    @Vault_Dweller said in Nobody shares knowledge better than this:

    I just came across this. It has probably been shared already, but I'm going to share it here anyway:

    https://encyclopediadramatica.se/SpectateSwamp

    He's also mentioned in the LOLcow Wiki.
    https://kiwifar.ms/threads/spectateswamp-stonedan.2397/

    Idiocy loves company.



  • @ScholRLEA Never mind, I just came across his "why GoTo is the bestest thing EVAR" rant. Obviously, he's going to say the first one is better, because... because... ugh, I can't even finish that thought, fuck me with a cattle prod this just isn't worth it crap crap crap.

    I mean... people call me a Lisp fanatic... OK, I am a Lisp fanatic, granted ... but this level of fanaticism is just bizarre.

    Seriously, Swampy, at this point why not just go with Assembler?



  • @ScholRLEA Damn, he is probably our most famous troll then.



  • @ScholRLEA said in Nobody shares knowledge better than this:

    Obviously, he's going to say the first one is better, because... because... ugh, I can't even finish that thought

    um... because it's easier to change the target of a goto, or put in a new goto, than it is to comment out a piece of code that's not ready yet?

    Apparently typing ' is hard...

    Also he doesn't like indentation, so nested control structures are bad, mmkay?



  • @ScholRLEA You could also assign the enum elements values that match the typeStrLen which would handle most of them.


Log in to reply