2 TITLE PROCESS-HACKER FOR MUDDLE
8 .GLOBAL ICR,NAPT,IGVAL,CHKARG,RESFUN,RETPROC
13 GETYP A,(AB) ;GET TYPE OF ARG
14 ;MUST BE SOME APPLIABLE TYPE
19 CAIN A,TFUNARG ;FUNARG?
21 CAIE A,TFIX ;CALL TO GET? (ALLOWING THIS IS QUESTIONABLE)
22 JRST NAPT ;NO, ERROR - NON-APPLIABLE TYPE
25 PUSHJ P,ICR ;CREATE A NEW PROCESS
26 MOVE C,TPSTO+1(B) ;GET ITS SRTACK
27 PUSH C,[TENTRY,,RETPROC]
34 PUSH C,D ;SAVED STACK POINTER
37 MOVEM C,TPSTO+1(B) ;STORE NEW TP
38 HRRI D,1(C) ;MAKE A TB
41 MOVEM D,TBSTO+1(B) ;SAVE ALSO FOR SIMULATED START
42 MOVE C,(AB) ;STORE ARG
43 MOVEM C,RESFUN(B) ;INTO PV
48 MFUNCTION RETPROC,SUBR
49 ; WHO KNOWS WHAT THIS SHOULD REALLY DO
50 ;PROBABLY, JUST AN EXIT
51 ;FOR NOW, PRINT OUT AN ERROR MESSAGE
53 PUSH TP,MQUOTE ATTEMPT-TO-RETURN-OUT-OF-PROCESS
61 MFUNCTION RESUME,FSUBR
62 ;RESUME IS CALLED WITH TWO ARGS
63 ;THE FIRST IS A PROCESS FORM OF THE PROCESS TO BE RESUMED
64 ;THE SECOND IS A FUNCTION TO BE CALLED WHEN THIS PROCESS
65 ; (THE PARENT) IS ITSELF RESUMED
66 ;IF THE FUNCTION IS NOT GIVEN SOME STANDARD FUNCTION IS
69 ; NOTE - TYPE AND NUMBER OF ARGS CHECKS MUST BE ADDED TO BOTH RESUME AND CREATE
72 HRRZ C,@1(AB) ;GET CDR ADDRESS
73 JUMPE C,NOFUN ;IF NO SECOND ARG, SUPPLY STANDARD
74 HLLZ A,(C) ;GET CDR TYPE
75 CAME A,$TATOM ;ATOMIC?
76 JRST RES2 ;NO, MUST EVAL TO GET FUNCTION
78 PUSHJ P,IGVAL ;TRY TO GET GLOBAL VALUE
79 CAMN A,$TUNBOUND ;GLOBALLY UNBOUND?
80 JRST LFUN ;YES, TRY FOR LOCAL VALUE
81 RES1: MOVEM A,RESFUN(PVP) ;STORE IN THIS PROCESS
84 HRRZ C,1(AB) ;GET CAR ADDRESS
85 PUSH TP,(C) ;PUSH PROCESS FORM
87 JSP E,CHKARG ;CHECK FOR DEFERED TYPE
88 ;INSERT CHECKS FOR PROCESS FORM
89 MCALL 1,EVAL ;EVAL PROCESS FORM WHICH WILL SWITCH
93 RES2: PUSH TP,(C) ;PUSH FUNCTION ARG
95 JSP E,CHKARG ;CHECK FOR DEFERED
96 MCALL 1,EVAL ;EVAL TO GET FUNCTION
99 LFUN: HRRZ C,1(AB) ;GET CDR ADDRESS
102 MCALL 1,VALUE ;GET LOCAL VALUE OF ATOM FOR FUNCTION
105 NOFUN: MOVSI A,TUNBOUND ;MAKE RESUME FUNCTION UNBOUND