On the other hand 440bx, I'd absolutely hate to have to try and understand someone's (even mine after a week) hyperthetical 2K line function.
I have functions that are 2000+ lines of code and I find them very easy to maintain because execution is linear. I read/execute the code from top to bottom without any jumps and it's really easy to keep track of what has happened and what should happen next.
I've thought about what those functions would look like if they were split into smaller pieces and the result would be a difficult to understand mess of code. The pieces would lack the coherency of the code when it is in one block.
Almost any task can be split into logical steps, even if those steps are used once. Give each step a reasonable name and suddenly we have "abstracted" away a lot of the detail. So, the code now looks like
LoadData()
CheckData()
ProcessData()
DisplayData()
SaveData()
Think of it this way... each function/procedure name is a comment that says what LoadData, CheckData, ProcessData, etc do, each followed by the (estimated/averaged) 400 commented lines of code their implementation takes. The beginning and end of each "function" is made clear by comments to that effect. Note also that comments inside a "function" can refer to actions that are being taken to set things up for code that is executed in another "function" (a comment in CheckData that is setting things up for something in DisplayData) This kind of "forward comment" is counterproductive/confusing if the code is broken in discrete pieces.
Absolutely, but that would be an argument for making all our variables global too 
On the contrary, the objective is to increase/maximize locality. There is nothing more local than inline code.
The real downside of having long functions/procedures in Pascal (or any other language that doesn't support local scopes) is that the function/procedure usually ends up having a fairly large number of local variables (which are globals in the function) that wouldn't happen if there was support for inline scopes, the majority of the variables would be local to the scopes usually leaving less than a handful at the global function level.
It's interesting you mention global variables because one of the problems I have with OOP as a programming paradigm is that it spreads global variables all over the places. Every field in a class is, pretty much, a global class-instance variable accessible by every method in the class and it is quite common to see groups of fields that "belong" with some methods and definitely don't belong with other methods but, those methods still have access to them. The problem with having class-instance fields is so noticeable that they are by convention prefixed with a letter "F" to distinguish them from real local variables.
Again, I know I'm not going to convince anyone and actually, I'm not even trying to convince anyone, I just want it to be known that my dislike of OOP isn't capricious, it has a solid and large foundation (not that it will make a difference, it won't.) Also, I should mention that, because of habit, I occasionally make functions out of code that should be inline, IOW, I'm not completely immune to programming dogma.
Lastly, in the 47 years I've spent programming, the one thing I've learned is that the most important activity when writing code is lavishly commenting the code. What is brutally obvious when one is writing the code becomes an enigma six months (or less) later. The comments should be a tutorial for how to solve the "problem"/"get the task done" because, any programmer, even the original author will need it a few months (or years) later.
I estimate that a program is reasonably well commented if _at least_ 1/4 of source lines are comments and, I mean _quality comments_ not, "this is a variable, this is another variable" ... those are not comments, that's junk. <chuckle>
Apologies to Sergio for hijacking the thread... it wasn't my intention.