It's definitely a bug in ADD_MENU_ITEM@.
Changing back to calls with constants and using OPTIONS (ignore 1244), the program is running again perfectly.
OPTIONS (ignore 1244)
SUBROUTINE UpdateProjectList (cDir, iAction)
USE bbmanData
IMPLICIT NONE
INCLUDE <clearwin.ins>
CHARACTER cDir*(*) ! Directory name
INTEGER iAction ! Action key: -1=remove; +1=add
INTEGER I, J !--- , iZero, iOne
INTEGER, EXTERNAL :: CB_OldProject, CB_EXIT
DO I= 1, iNrOfLastProj+2
CALL REMOVE_MENU_ITEM@ (iDynMenuHandle)
ENDDO
SELECT CASE (iAction)
CASE (-1) ! Eliminate cDir from list
DO I= 1, iNrOfLastProj
IF (cDir .EQ. cLastProjects(I)) cLastProjects(I) = ' '
ENDDO
J = 1
DO I= 1, iNrOfLastProj
cLastProjects(J) = cLastProjects(I)
IF (cLastProjects(I) .NE. ' ') J = J + 1
ENDDO
iNrOfLastProj = J - 1
CASE (+1) ! Shift project names down and add new project on top
DO I= 9, 2, -1
cLastProjects(I) = cLastProjects(I-1)
ENDDO
J = INDEX (cDir, char(0))
IF (J .GT. 0 ) cDir(J:) = ' '
cLastProjects(1) = cDir
IF (iNrOfLastProj .LT. 9) iNrOfLastProj = iNrOfLastProj +1
END SELECT
!-- iZero = 0
!-- iOne = 1
DO I= 1, iNrOfLastProj
IF (cLastProjects(I) .NE. ' ') THEN
!-- CALL ADD_MENU_ITEM@ (iDynMenuHandle, cLastProjects(I), iOne, iZero, CB_OldProject)
CALL ADD_MENU_ITEM@ (iDynMenuHandle, cLastProjects(I), 1, 0, CB_OldProject)
ENDIF
ENDDO
IF (iNrOfLastProj .GT. 0) CALL ADD_MENU_ITEM@ (iDynMenuHandle, CHAR(0), 0, 0, CB_EXIT)
CALL ADD_MENU_ITEM@ (iDynMenuHandle, 'Save and E&xit', 1, 0, CB_EXIT)
!-- IF (iNrOfLastProj .GT. 0) CALL ADD_MENU_ITEM@ (iDynMenuHandle, CHAR(0), iZero, iZero, CB_EXIT)
!-- CALL ADD_MENU_ITEM@ (iDynMenuHandle, 'Save and E&xit', iOne, iZero, CB_EXIT)
RETURN
END SUBROUTINE UpdateProjectList
The Program is very large and complex. I don't think that I can make a small example to demonstrate the problem.