Beispiele:
Fortran-Quellcode-Reorganisation mit SPAG.
Original Fortran 66
Dieses Code-Fragment ermittelt den Dezimal-Bruchteil einer Zahl, um dann in Abhängigkeit von der bestimmten Ziffer zu verzweigen.
13 IF
(TODO.EQ.0) GO TO 12
ACT=MOD(TODO,10)
TODO=TODO/10
GO TO (62,42,43,62,404,
& 45,62,62,62),
ACT
GO TO 13
42 CALL COPY
GO TO 127
43 CALL MOVE
GO TO 144
404 N=-N
44 CALL DELETE
GO TO 127
45 CALL PRINT
GO TO 144
62 CALL BADACT(ACT)
GO TO 12
127 LENGTH=LENGTH+1
144 DONE=DONE+1
CALL RESYNC
GO TO 13
12 RETURN
END
VAX Fortran Form
SPAG hat das rückwärts gerichtete GOTO durch ein DO WHILE ersetzt und alle Variablen- und Routinen-Namen in Kleinschrift umgewandelt.
DO
WHILE ( todo.NE.0 )
act = mod(todo,10)
todo = todo/10
IF( act.EQ.1 .OR. act.EQ.4 .OR.
& act.EQ.7
.OR. act.EQ.8
& .OR.
act.EQ.9 ) THEN
CALL badact(act)
GO TO 200
ELSEIF ( act.EQ.2 ) THEN
CALL copy
length = length + n
ELSEIF ( act.EQ.3 ) THEN
CALL move
ELSEIF ( act.EQ.5 ) THEN
n=-n
CALL delete
length = length + n
ELSEIF ( act.EQ.6 ) THEN
CALL print
ELSE
GO TO 100
ENDIF
done = done +1
CALL resync
100 ENDDO
200 RETURN
END
Fortran 77 Form
Die Option Code-Wiederholung wurde gesetzt und SPAG hat die Zeile LENGTH=LENGTH+N eingefügt.
100 IF
( TODO.NE.0 ) THEN
ACT = MOD(TODO,10)
TODO = TODO/10
IF (ACT.EQ.1 .OR. ACT.EQ.4 .OR.
&
ACT.EQ.7 .OR. ACT.EQ.8
&
.OR. ACT.EQ.9 ) THEN
CALL BADACT(ACT)
GO TO 200
ELSEIF ( ACT.EQ.2 ) THEN
CALL COPY
LENGTH = LENGTH + N
ELSEIF ( ACT.EQ.3 ) THEN
CALL MOVE
ELSEIF ( ACT.EQ.5 ) THEN
n=-n
CALL DELETE
LENGTH = LENGTH + N
ELSEIF ( ACT.EQ.6 ) THEN
CALL PRINT
ELSE
GO TO 100
ENDIF
DONE = DONE +1
CALL RESYNC
GO TO 100
ENDIF
200 RETURN
END
Fortran 90 Form
Sämtliche GOTOs und zugehörige Labels wurden eliminiert und durch EXIT, CYCLE ersetzt. Der IF-Block wurde in eine SELECT CASE Konstruktion umgeformt.
DO
WHILE ( todo.NE.0 )
act = mod(todo,10)
todo = todo/10
SELECT CASE (act)
CASE (1,4,7,8,9)
CALL
badact(act)
EXIT
CASE (2)
CALL
copy
length
= length + n
CASE (3)
CALL
move
CASE (5)
n=-n
CALL
delete
length
= length + n
CASE (6)
CALL
print
CASE DEFAULT
CYCLE
END SELECT
done = done +1
CALL resync
ENDDO
RETURN
END