It's a little complicated but as you include the coding style tag I would first say I would strongly recommend using the full form in all cases - any decent editor will auto-magically complete an End statement appropriately. For instance in emacs, the editor I use, hitting tab after typing End will add all the text automatically.
However it is not technically required in some cases. For control constructs such as do, if, select, where etc. the full form is required. However for the program and subprograms strictly it is not - in fact the simplest possible Fortran program is just
End
However I would recommend against this as the full form usefully documents the program at virtually zero overhead from the programmer, and it also means you don't have to remember when the full form is required, and when it is not.
I'll also add, again as you include the coding style tag, by full form I really mean the form that also includes the name of the program/subprogram, or control construct name if used. Thus I would write a "Hello World" program as
Program hello_world
Implicit None
Write( *, * ) 'Hello World!'
End Program hello_world
Finally I'll add nobody should be using Fortran77 in this day and age, it is quarter of a century out of date, and Fortran90 should also probably be retired for new code.