Thanks Darrel, you are correct - I use MCS and I didn't even try compiling with tabs before the @ symbols - but I just indented all my @ statements and of course it compiles and works fine.

With the local variables - of course resources are limited, and the concept of local variables wouldn't be appropriate (or would they?) in a number of situations. What I'm thinking is this: you have different types of vars that you define as such:

<code>
SUB MY_SUB
i VAR LOCAL BYTE
temp VAR LOCAL WORD
x VAR WORD
.....
RETURN
END SUB
</code>

The 'LOCAL' VARs would be reallocated for each SUB. When programming, you would have to ensure that your LOCAL vars can lose their value whenever a GOSUB is used. Other variables defined locally will be have their own allocation. Given that the 18f452 has 1500 bytes of memory surely some other people would find this useful?

Perhaps you could solve all memory problems by using memory addresses (pointers) as arguments for SUBS:

<code>
..
GOSUB MY_SUB(a, b, c)
..


SUB MY_SUB(WORD x, WORD y, BYTE d)
i VAR LOCAL BYTE
temp VAR LOCAL WORD
.....
x = i + y
....
RETURN
END SUB
</code>

Then PBP would just have to make all those vars point to the same address. And perhaps spit out a type-check warning if you pass a byte where a word is expected or whatever.

Would anyone else find this to make PBP a much more pleasurable and professional compiler?

Please, please respond with criticism if you disagree with my comments, as that's the only way that I will see the reasons why it isn't a good idea....