Mark Johnson wrote:

> I just acquired a new client and found an interesting
> programming style that
> for the life of me I cannot understand why anyone in their
> right mind would do such a thing.
>
> Not on all programs but it seems that for programs that open
> less than 4-5
> files, the programmer continues the logic in the THEN section
> of the open statement. Example:
>
> OPEN FILE1 TO F.FILE1 THEN
>     OPEN FILE2 TO F.FILE2 THEN
>         OPEN FILE3 TO F.FILE3 THEN
>             EOF=0
>             LOOP READNEXT ID ELSE EOF=1 UNTIL EOF DO
>             PROCESS, PROCESS, PROCESS
>             REPEAT
>         END ELSE PRINT "CAN'T OPEN FILE3"
>     END ELSE PRINT "CAN'T OPEN FILE2"
> END ELSE PRINT "CAN'T OPEN FILE1"
> END

Yes Mark, this is a new fangled thing that I believe is called 'Structured
Programming'.  I suspect it'll never catch on, obviously it's only just
reaching your part of the world. ;^)

> There could be 200-300 lines between the OPEN for FILE3 and
> its error message.

Well, that part I don't like, but shit happens I suppose.  A bit like:

OPEN FILE1 TO F.FILE1 ELSE GOTO 999

where 999 is a long way away.

Personally, I'd code the above example as:

OPEN FILE1 TO F.FILE1 THEN
    OPEN FILE2 TO F.FILE2 THEN
        OPEN FILE3 TO F.FILE3 THEN
            GOSUB PROCESS_STUFF
        END ELSE PRINT "CAN'T OPEN FILE3"
    END ELSE PRINT "CAN'T OPEN FILE2"
END ELSE PRINT "CAN'T OPEN FILE1"

STOP

PROCESS_STUFF:
    EOF=0
    LOOP READNEXT ID ELSE EOF=1 UNTIL EOF DO
    PROCESS, PROCESS, PROCESS
    REPEAT
    RETURN

END

or even as:

GOSUB OPEN_FILES
IF SHIT_HAPPENED ELSE
    GOSUB PROCESS_STUFF
END
STOP

OPEN_FILES:
    SHIT_HAPPENED = ""
        OPEN FILE1 TO F.FILE1 THEN
            OPEN FILE2 TO F.FILE2 THEN
            OPEN FILE3 TO F.FILE3 ELSE
                SHIT_HAPPENED = FILE3
            END
        END ELSE
            SHIT_HAPPENED = FILE2
        END
    END ELSE
        SHIT_HAPPENED = FILE1
    END
    IF SHIT_HAPPENED THEN
        PRINT "Can't open ":SHIT_HAPPENED
    END
        RETURN

PROCESS_STUFF:
    EOF=0
    LOOP READNEXT ID ELSE EOF=1 UNTIL EOF DO
    PROCESS, PROCESS, PROCESS
    REPEAT
    RETURN
END

> Now I know that Pick is pretty loose and forgiving. But what
> could be the sanity behind this.

You know the funny thing is that programmers who use decent editors don't
seem
to find the whole indentation thing so challenging. ;^)

Cheers,

Ken
-------
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/

Reply via email to