ASMB,L,C NAM RUN.C,7 92060-16104 790207 REV. 1913 $CLIB * * SOURCE: 92060-18063 * * 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 25 WORDS; * MOVE FCB2 TO FCB2. FOR 25 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 C.LEN THE TURN ON STRING LENGTH EXT CLO.C THE LIBRARY CLOSE ROUTINE EXT ADS.C PARAMETER SET UP EXT GEX.C D.RTR CALLER 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 D5 DEC 5 D14 DEC 14 D25 DEC 25 D112 DEC 112 .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 25 WORDS; LDB RUN.C JSB INDC. GET THE FROM ADDRESS AND CLEAR OFF INDIRECTS STB FCB1P SAVE FOR LATER USE LDA B ADA =D2 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 D25 NOP * MOVE FCB2 TO FCB2. FOR 25 WORDS; ISZ RUN.C LDB RUN.C JSB INDC. STB FCB2P (WILL FIX C.#SC LATER) LDA B ADA =D2 LDB .FCB2 JMP *+2 LDB B,I RBL,CLE,SLB,ERB JMP *-2 JSB .MVW MOVE IT DEF D25 NOP * IF FCB1 = SYSSRATCH THEN LDB FCB1P ADB =D7 LDA B,I 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.+4 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 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 D112 * 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 RSS ERROR RETURN EXIT ISZ RUN.C JMP RUN.C,I END