The basic COSY (COncurrent SYstems) notation [LSB79b] is briefly presented. Programs in this notation abstractly specify the synchronic aspects of concurrent systems and are possessed of behavioural semantics, which are capable of expressing concurrency and which also provide a firm mathematical foundation for verifying properties of systems. We are mainly concerned with the macro COSY notation [LTS79] which contains macro features for concisely representing and precisely generating by expansion similar regularities of structure of programs in the basic notation. We re-examine and revise all aspects of macro COSY, the design of the notation as a specification language, the formal grammar for producing macro COSY programs, the rules for the expansion of macro elements and of complete macro programs, eliminating serious drawbacks of previous macro COSY notations and grammars. We characterize the strings generated by the expansion of macro elements and macro programs and we investigate the conditions under which macro elements may generate the same strings as other macro elements. Finally, we give direct semantics to macro programs following two approaches.