PROCEDURE is valid only when it is the first instruction executed after an internal CALL or function invocation

Synopsis
You put a PROCEDURE keyword in the wrong place. If you use this keyword, it should appear as the first instruction in a subroutine. It's recommended that you place it upon the same line as any label name for your subroutine, as so:

My_Label: PROCEDURE
Cause
You have some other instructions inbetween the label name and the PROCEDURE keyword.

Cure
Put the PROCEDURE right after the label, as shown above.

Note: Reginald also allows you to put PROCEDURE EXPOSE at the start of some child script in order to expose variables from your main script (so that the child script can directly access them). If you use this feature, make sure that the PROCEDURE EXPOSE is the first instruction in your child script.

Cause
You did an INTERPRET upon some string that contains a PROCEDURE keyword.

Cure
Either rewrite the INTERPRET string to eliminate the need for PROCEDURE, or use the INTERPRET statement on that string immediately after your subroutine label as so:

My_Label: INTERPRET 'PROCEDURE;SAY "Hello";RETURN'