3.24.4 Visibility of Procedures
When a PROTO or EXTERNDEF directive for a symbol is located in a module before a matching PROC directive, the visibility of this Procedure ( "public" vs "private", or "external" vs. "static" ) is handled differently in Masm v6 or 7 and Masm v8 or newer:Since Masm v8, a PROTO or EXTERNDEF for a symbol which is later defined as a PROC will make the procedure public, no matter what a possible visibility attribute of the PROC itself - or the default one set with OPTION PROC - is telling.
OTOH, with Masm v6/7, both the visibility attribute of the PROC directive and the current default setting of OPTION PROC will affect the symbol's visibility.
Masm6 Masm8 JWasm JWasm+Zv8 ------------------------------------- On,E,P x x On,E,Pn x x On,E,Pp x x x x Op,E,P x x x x Op,E,Pn x x x Op,E,Pp x x x x On = OPTION PROC:PRIVATE Op = OPTION PROC:PUBLIC E = PROTO or EXTERNDEF before PROC P = PROC without visibility attribute Pn = PROC with PRIVATE visibility attribute Pp = PROC with PUBLIC visibility attribute x = procedure will be publicAs default, JWasm more or less copies the Masm v6/7 behavior. The difference is that an explicite visibility attribute behind PROC has the highest priority for JWasm. However, since v2.04, there's an additional cmdline option -Zv8 which will make JWasm behave like Masm v8+.
It should be noted that without a PROTO/EXTERNDEF before PROC, there are no differences between Masm v6, v8 and JWasm, and the -Zv8 switch also has no effect then.