@X @~
~V7 56 2 -5
~D10
~H                    MUSS
~
~
~D10
~H             FTN261
~D10
~MMANCHESTER UNIVERSITY  -  CONFIDENTIAL~
~
~
                                                            ISSUE 11~
~V9 -1
~P
~V9 1
~YFTN261
~S1~M~OFORTRAN 77 I/O LIBRARY IMPLEMENTATION DESCRIPTION
~S1~M~OSection 26~
~S1~OSection 26. Job Control Procedures
~S1~O1.1 General Description
~BThese procedures form part of the interface between the operating
system job control and the users Fortran program. They perform the STOP
and PAUSE statements of Fortran and enable a program to continue
after pausing.
~S1~O1.2 Non Standard Features
~BThe Fortran Standard does not specify how the parameters to STOP
and PAUSE may be made available, nor how a program can be continued
after a PAUSE. In this implementation the parameters to STOP and
PAUSE are output to stream zero with an explanatory message. It is
possible to CONTINUE with the Fortran program following
a PAUSE from job control.
~BThe routine LIST is used to process a file generated by a
Fortran program, and send it to a printer. It uses the first
character of each record to generate the correct carriage control.
This is implementation dependent along with FIO.OUT.CCC in section 24.
~S1~O2. Interfaces
~S1~O2.1 Section Interfaces Used
~
   Section 21:   (Configuration Section)~
   Section 27:   (Unit Control Procedures)~
~S1~O2.2 Section Interface
~
Library Procedures:~
   FIO.PAUSE~
   FIO.PAUSE.CH~
   CONTINUE~
   FIO.F.STP~
   FIO.F.STP.CH~
   LIST~
~S1~O3. Implementation
~S1~O3.1 Outline of Operation
~BAfter PAUSE has displayed the pause message it sets a label
variable to a return point, and loops calling PPC.CMD repeatedly.
When CONTINUE is called from PPC.CMD it causes a jump to the
saved label, and the Fortran program can be re-entered.
~BThe STOP procedures only display a message and return directly
to the caller. It is assumed the Fortran Compiler plants the
correct program exit code.
~BLIST inspects the first character of each line of text and
produces the appropriate printer carriage control.
~S1~O3.2 Data Structures
~BPAUSE.POINT - a label variable for use by the PAUSE and
CONTINUE sequence.
~Y
~V9 -1
~P
~D15
~HFLOWCHARTS
~
~
~H                FTN261
~F
@TITLE FTN26(1,11)
@COL 1S-2R-5R-7R-9F
@FLOW 1-2-5-7-9
@BOX 1.0

JOB CONTROL SECTION
@BOX 2.0
[IMPORTS FTN26/1]
MODULE HEADING
@BOX 5.0
SCALAR DECLARATIONS
@BOX 7.0
PROCEDURES IN MODULE
   FTN26.1:PAUSE
   FTN26.7:PAUSE.CH
   FTN26.3:CONTINUE
   FTN26.4:STOP
   FTN26.5:F.STP.CH
   FTN26.6:LIST
@BOX 9.0
END
@BOX 2.1
#FTN26/1
;MODULE (FIO.PAUSE,FIO.PAUSE.CH,conTINUE,FIO.F.STP,FIO.F.STP.CH,lisT);
@BOX 5.1
; LITERAL/ADDR[LOGICAL8] VOID = ;
; *GLOBAL 5
; LABEL PAUSE.POINT
; *GLOBAL 0
@BOX 7.1
;L.SPEC CONTINUE()
;L.SPEC LIST(ADDR[$LO8], ADDR[$LO8])
;L.SPEC FIO.PAUSE($IN32)
;L.SPEC FIO.PAUSE.CH(ADDR[$LO8])
;L.SPEC FIO.F.STP($IN32)
;L.SPEC FIO.F.STP.CH(ADDR[$LO8])
#FTN26.1
#FTN26.2
#FTN26.3
#FTN26.4
#FTN26.5
#FTN26.6
@BOX 9.1
;*END
@END
@TITLE FTN26/1(1,11)
@COL 1S-3R-4R-6R-7F
@FLOW 1-3-4-6-7
@BOX 1.0
JOB CONTROL IMPORTS
@BOX 3.0
IMPORTED LITERALS
@BOX 4.0
IMPORTED SCALARS
@BOX 6.0
IMPORTED PROCEDURES
@BOX 7.0
END
@BOX 3.1
::CV ;IMPORT LITERAL $LO8 EOT,SPACE.L,NL,FF,CR
;IMPORT LITERAL EOT,SPACE.L,NL,FF,CR
@BOX 4.1
;LABEL END.PROG
@BOX 6.1
;P.SPEC FIO.END.RUN()
;L.SPEC SELECT.OUTPUT($IN)
;L.SPEC NEWLINES($IN)
;L.SPEC CAPTION(ADDR[$LO8])
;L.SPEC OUT.I($IN32,$IN)
;L.SPEC OUT.LINE.NO($IN32)
;L.SPEC SELECT.INPUT($IN)
;L.SPEC DEFINE.INPUT($IN,ADDR[$LO8],$IN32)/$IN
;L.SPEC DEFINE.OUTPUT($IN,ADDR[$LO8],$IN32,$IN32)/$IN
;L.SPEC IN.CH()/$IN
;L.SPEC OUT.CH($IN)
;L.SPEC END.OUTPUT($IN,$IN)
;L.SPEC END.INPUT($IN,$IN)
;L.SPEC IN.BACKSPACE($IN)
::MU ;L.SPEC PPC.CMD()
::CV ;L.SPEC CLI (INTEGER)
::CV ;L.SPEC GO.CLI ()
::CV ;L.SPEC I.MODE (ADDR[$LO8]) / INTEGER
;L.SPEC I.ENQ()/$IN
;L.SPEC CURRENT.INPUT()/$IN
;L.SPEC CURRENT.OUTPUT()/$IN
;L.SPEC OUT.FN(ADDR[$LO8])
@END
@TITLE FTN26.1(1,6)
@COL 1S-5R-6R-7T-8R-9R-11F
@COL 12R
@ROW 8-12
@FLOW 1-5-6-7NO-8-9-11
@FLOW 7YES-12-9
@BOX 1.0
PROC PAUSE
@BOX 5.0
SELECT OUTPUT 0
@BOX 6.0
CAPTION PAUSE
@BOX 7.0
LINE NO?
@BOX 8.0
WRITE NUMBER
@BOX 9.0
CALL PPC.CMD
UNTIL CONTINUE
@BOX 11.0
FINISH
@BOX 12.0
WRITE LINE
@BOX 1.1
; PROC FIO.PAUSE(N)
@BOX 5.1
; SELECT.OUTPUT(0)
; SELECT.INPUT(0)	::CV &&&jae 2/4/82
@BOX 6.1
; NEWLINES(2)
; OUT.FN(%"  PAUSED")
@BOX 7.1
; IF N > 0
@BOX 8.1
; CAPTION(%" : ")
; OUT.I(0-N,0)
@BOX 12.1
; CAPTION(%" LINE")
; OUT.LINE.NO(N)
@BOX 11.1
END
@BOX 9.1
; NEWLINES(1)
::MU; -> SKIP
::MU; RESTART.POINT: -> END.OF.IT
::MU; SKIP : RESTART.POINT => PAUSE.POINT
::MU; LOOP : PPC.CMD() ; -> LOOP
::MU; END.OF.IT :
::CV ; CLI ((IF I.MODE(VOID) & %100 = 0 THEN 0 ELSE 1))
@END
@TITLE FTN26.2(1,6)
@COL 1S-3R-4R-5R-6R-7F
@FLOW 1-3-4-5-6-7
@BOX 1.0
PROC PAUSE.CH
@BOX 3.0
SELECT OUTPUT 0
@BOX 4.0
CAPTION PAUSE
@BOX 5.0
CAPTION MESSAGE
@BOX 6.0
CALL PPC.CMD
UNTIL CONTINUE
@BOX 7.0
END
@BOX 1.1
; PROC FIO.PAUSE.CH(MES)
@BOX 3.1
; SELECT.OUTPUT(0)
; SELECT.INPUT(0)	::CV &&&jae 2/4/82
@BOX 4.1
; NEWLINES(2)
; OUT.FN(%"  PAUSED")
; CAPTION(%" : ")
@BOX 5.1
; CAPTION(MES)
; NEWLINES(1)
@BOX 6.1
::MU; -> SKIP
::MU; RESTART.POINT: -> END.OF.IT
::MU; SKIP: RESTART.POINT => PAUSE.POINT
::MU; LOOP: PPC.CMD() ; -> LOOP
::MU; END.OF.IT:
::CV ; CLI( (IF I.MODE(VOID) & %100 = 0 THEN 0 ELSE 1))
@BOX 7.1
END
@END
@TITLE FTN26.3(1,6)
@COL 1S-3R-4F
@FLOW 1-3-4
@BOX 1.0
PROC CONTINUE
@BOX 3.0
RE-ENTER FORTRAN PROGRAM
@BOX 4.0
END
@BOX 1.1
;PROC CONTINUE
@BOX 3.1
::MU; -> PAUSE.POINT
::CV ; GO.CLI ()
@BOX 4.1
END
@END

@TITLE FTN26.4(1,6)

@COL 1S-5R-6R-7T-8R-3R-10R-11F
@COL 12R
@ROW 8-12
@FLOW 1-5-6-7NO-8-3-10-11
@FLOW 7YES-12-3
@BOX 1.0
PROC STOP
@BOX 3.0
CLOSE ALL FILES
:1.3
@BOX 5.0
SELECT OUTPUT 0
@BOX 6.0
CAPTION STOP
@BOX 7.0
LINE NO?
@BOX 8.0
PRINT NUMBER
@BOX 10.0
RESET SF AND
RETURN TO
LEVEL ZERO
@BOX 11.0
FINISH
@BOX 12.0
PRINT LINE
@BOX 1.1
; PROC FIO.F.STP(N)
; LABEL FIN
@BOX 3.1
; NEWLINES(1)
; END.PROG => FIN
; FIO.END.RUN()
@BOX 5.1
; SELECT.OUTPUT(0)
@BOX 6.1
; NEWLINES(2)
; OUT.FN(%"  STOPPED")
@BOX 7.1
; IF N > 0
@BOX 8.1
; CAPTION(%" : ")
; OUT.I(0-N,0)
@BOX 10.1
; -> FIN
@BOX 11.1
END
@BOX 12.1
; CAPTION(%" LINE")
; OUT.LINE.NO(N)
@END

@TITLE FTN26.5(1,6)
@COL 1S-3R-4R-5R-2R-6R-7F
@FLOW 1-3-4-5-2-6-7
@BOX 1.0
PROC F.STP.CH
@BOX 2.0
CLOSE ALL FILES
:1.3:
@BOX 3.0
SELECT OUTPUT 0
@BOX 4.0
CAPTION STOP
@BOX 5.0
CAPTION MESSAGE
@BOX 6.0
RESET SF AND
RETURN TO LEVEL ZERO
@BOX 7.0
END
@BOX 1.1
; PROC FIO.F.STP.CH(MES)
;LABEL FIN
@BOX 2.1
; END.PROG => FIN
; FIO.END.RUN()
@BOX 3.1
; SELECT.OUTPUT(0)
@BOX 4.1
; NEWLINES(2)
; OUT.FN(%" STOPPED")
; CAPTION(%" : ")
@BOX 5.1
; CAPTION(MES)
; NEWLINES(1)
@BOX 6.1
; -> FIN
@BOX 7.1
END
@END
@TITLE FTN26.6(1,11)
@COL 1S-2R-31T-3R-4T-6T-12T-8T-10T-13R-30T-14R
@COL 5F-7R-20T-21R-9R-11R
@ROW 6-5
@FLOW 1-2-31N-3-4N-6N-12N-8N-10N-13-30N-14-31N-3-4Y-5
@FLOW 6Y-7-20N-21-14
@FLOW 8Y-9-14
@FLOW 10Y-11-14
@FLOW 12Y-20Y-14
@FLOW 30Y-31
@FLOW 31Y-5
@BOX 1.0
LIST
@BOX 2.0
ASSIGN INPUT FILE
ASSIGN OUTPUT PRINTER
NOTE FIRST LINE
@BOX 3.0
GET FIRST CHAR
@BOX 4.0
CHAR = EOF
@BOX 5.0
END OUTPUT
@BOX 6.0
CHAR = '0
@BOX 7.0
NEWLINE
@BOX 8.0
CHAR = '1
@BOX 9.0
NEWPAGE
@BOX 10.0
CHAR = '+
@BOX 11.0
NO ADVANCING
@BOX 12.0
CHAR = SPACE
@BOX 13.0
OUTCH(CHAR)
@BOX 30.0
CHAR = NL?
@BOX 14.0
OUTPUT LINE
END OF FIRST LINE
@BOX 20.0
FIRST LINE?
@BOX 21.0
NEWLINE
@BOX 31.0
NO CHARS TO READ?
@BOX 1.1
; PROC LIST(FILE,DEV)
; $IN OUTS,INS,CHAR,IST,OIS,OOS
@BOX 2.1
; CURRENT.INPUT() => OIS
; CURRENT.OUTPUT() => OOS
; SELECT.INPUT(DEFINE.INPUT(-1,FILE,0)=>INS)
; SELECT.OUTPUT(DEFINE.OUTPUT(-1,DEV,0,%3FFC00)=>OUTS)
; 1 => IST
@BOX 3.1
; IN.CH() => CHAR
@BOX 4.1
; IF CHAR = EOT
@BOX 5.1
; SELECT.OUTPUT(OOS)
; SELECT.INPUT(OIS)
; END.OUTPUT(OUTS,1)
; END.INPUT(INS,1)
END
@BOX 6.1
; IF CHAR = '0
@BOX 7.1
; NEWLINES(1)
@BOX 8.1
; IF CHAR = '1
@BOX 9.1
; OUT.CH(FF)
@BOX 10.1
; IF CHAR = '+
@BOX 11.1
; OUT.CH(CR)
@BOX 12.1
; IF CHAR = SPACE.L
@BOX 13.1
; OUT.CH(CHAR)
@BOX 30.1
; IF CHAR = NL
@BOX 14.1
; WHILE I.ENQ() < 4 AND IN.CH() => CHAR /= NL /= EOT DO
  OUTCH(CHAR) OD
; IF CHAR = EOT THEN IN.BACKSPACE(1) FI
; 0 => IST
@BOX 20.1
; IF IST = 1
@BOX 21.1
; NEWLINES(1)
@BOX 31.1
; IF I.ENQ() > 3
@END

