ASMB,L,C
      NAM RUN.L,7 92070 1X285 REV. 1940 790523 $CLIB
* 
*  SOURCE: 92070-18285
* 
* PROC RUN.C(FCB1,FCB2,PRAM,ID);
*   STRING ID;
*   COMMENT ID IS THE NAME STRING OF THE PROGRAM TO BE SCHEDULED; 
*   INTEGER ARRAY PRAM; 
*   COMMENT PRAM IS A 5 WORD ARRAY USED TO PASS USER DATA BETWEEN 
*   THE FATHER AND SON PROCESSES; 
*   RECORD FCB1,FCB2; 
*   COMMENT FCB'S ARE DATA STRUCTURES CONTAINING ALL THE DATA 
*   NECESSARY TO MANAGE A FILE  IT IS ASSUMED THAT FCB1 IS TO BE
*   THE INPUT FILE, AND FCB2 IS THE LIST FILE BEING PASSED TO THE 
*   SON PROCESS;
* BEGIN 
*   MOVE FCB1 TO FCB1. FOR 26 WORDS;
*   MOVE FCB2 TO FCB2. FOR 26 WORDS;
*   IF FCB1 = SYSSCRATCH THEN 
*     UNLINK(FCB1); 
*   CLOSE-ALL-LINKED-FCB'S; 
*   GET-ID-FOUND
*   SCHEDULE(ID,PRAMLIST);
*   IF ERROR THEN GO ERROR EXIT;
*   PICKUP_AND_STORE_THE_RETURN_PARAMETERS; 
*   IF FCB1 = SYSSCRATCH THEN 
*     LINK_IT_BACK_IN;
* END OF RUN.C; 
      SKP 
      ENT RUN.C 
      EXT EXEC      GUESS WHO 
      EXT .MVW      THE MOVE WORDS GUY
      EXT C.TRN     THE TURN ON STRING
      EXT C.TTY     THE TERMINAL
      EXT C.RP      ID FINDER 
      EXT CLO.C     THE LIBRARY CLOSE ROUTINE 
      EXT INDC.     INDIRECT CLEANER
      EXT FCB1.     FCB1'S PLACE IN THE TURN ON STRING
      EXT FCB2.     FCB1'S PLACE IN THE TURN ON STRING
      EXT C.HLK     THE FCB LINKED LIST HEAD
      EXT C.PAS     THE PARAMETER PASSING BUFFER
* PROC RUN.C(FCB1,FCB2,ID,PRAM);
*   STRING ID;
*   INTEGER ARRAY PRAM; 
*   COMMENT PRAM IS A 5 WORD ARRAY USED TO PASS USER DATA BETWEEN 
*   THE FATHER AND SON PROCESSES; 
*   RECORD FCB1,FCB2; 
* BEGIN 
A     EQU 0 
B     EQU 1 
.FCB1 DEF FCB1. 
.FCB2 DEF FCB2. 
FCB1P BSS 1         LOCAL POINTER SET UP TO POINT TO FCB1 
FCB2P BSS 1         LOCAL POINTER SET UP TO POINT TO FCB2 
.CHLK DEF C.HLK 
.PRAM BSS 1 
.CPAS DEF C.PAS 
D2    DEC 2 
D5    DEC 5 
D7    DEC 7 
D26   DEC 26
D114  DEC 114 
B77   OCT 77
.SKED DEC 23
SCRFG BSS 1         THE SCRATCH FILE FLAG 
DUPFG BSS 1         THE DUPPED ID FLAG
RUN.C BSS 1 
*   MOVE FCB1 TO FCB1. FOR 26 WORDS;
      LDB RUN.C 
      JSB INDC.     GET THE FROM ADDRESS AND CLEAR OFF INDIRECTS
      STB FCB1P     SAVE FOR LATER USE
      LDA B 
      INA 
      LDB .FCB1     GET THE TO ADDRESS AND CLEAR OFF INDIRECTS
      JMP *+2 
      LDB B,I 
      RBL,CLE,SLB,ERB 
      JMP *-2 
      JSB .MVW      MOVE IT 
      DEF D26 
      NOP 
*   MOVE FCB2 TO FCB2. FOR 26 WORDS;
      ISZ RUN.C 
      LDB RUN.C 
      JSB INDC. 
      STB FCB2P     (WILL FIX C.#SC LATER)
      LDA B 
      INA 
      LDB .FCB2 
      JMP *+2 
      LDB B,I 
      RBL,CLE,SLB,ERB 
      JMP *-2 
      JSB .MVW      MOVE IT 
      DEF D26 
      NOP 
*   IF FCB1 = SYSSRATCH THEN
      LDB FCB1P 
      INB 
      LDA B,I 
      AND D7
      XOR D2
      STA SCRFG     SAVE IT FOR LATER USE 
      SZA 
      JMP CLOSE 
*     UNLINK(FCB1); 
      LDA .CHLK 
NEXT  LDB A,I 
      SZA,RSS 
      JMP CLOSE 
      CPB FCB1P 
      JMP FOUND 
      LDA B 
      JMP NEXT      GO AROUND AGAIN 
FOUND LDB B,I 
      STB A,I 
*   CLOSE ALL_LINKED_FCB'S; 
CLOSE LDA C.HLK 
      SZA,RSS 
      JMP SKED
      STA CLOSF 
      JSB CLO.C 
CLOSF BSS 1 
      JMP *+2 
      JMP CLOSE 
      ISZ RUN.C 
      JMP EXIT
*   COPY C.#SC FROM FROM OLD FCB2 TO NEW ONE. 
SKED  LDA FCB2P     GET IT. 
      ADA =D6 
      LDA A,I 
      STA FCB2.+5   PUT IN NEW. 
*   MOVE_THE_USERS_PARAMETERS_DOWN; 
      ISZ RUN.C 
      LDB RUN.C 
      JSB INDC. 
      STB ID
      ISZ RUN.C 
      LDB RUN.C 
      JSB INDC. 
      STB .PRAM 
      LDA B 
      LDB .CPAS 
      JMP *+2 
      LDB B,I 
      RBL,CLE,SLB,ERB 
      JMP *-2 
      JSB .MVW
      DEF D5
      NOP 
*   GET-ID-FOUND
      LDA C.TTY+2 
      AND B77 
      LDB ID
      JSB C.RP
      JMP EXIT      NO ERROR RETURN 
      STA DUPFG 
      STB ID
*   SCHEDULE(ID,PRAMLIST);
      JSB EXEC
      DEF *+9+1 
      DEF .SKED 
ID    BSS 1 
      DEF C.PAS 
      DEF C.PAS+1 
      DEF C.PAS+2 
      DEF C.PAS+3 
      DEF C.PAS+4 
      DEF C.TRN 
      DEF D114
*   IF ERROR THEN GO ERROR EXIT;
*   PICKUP THE RETURN PARAMETERS AND STORE THEM INTO PRAM;
      LDA B 
      LDB .PRAM 
      JSB .MVW
      DEF D5
      NOP 
*   IF FCB1 = SYSSCRATCH THEN 
      LDA SCRFG 
      SZA 
      JMP DUP 
*     LINK_IT_BACK_IN;
      LDA FCB1P 
      STA C.HLK 
      CLA 
      STA FCB1P,I 
DUP   LDA DUPFG 
      SZA 
      JMP EXIT
      LDB ID
      CLA 
      JSB C.RP   DELETE ID
      NOP   ERROR RETURN
EXIT  ISZ RUN.C 
      JMP RUN.C,I 
      END 
                                                                                                                          