*COMDECK  PFCD01
PFCD01    CTEXT  PFCDO1 - PF PPU MACROS.
**        PFCD01 PF PPU MACROS. 
          SPACE  4
**        LOAD   LOAD MEMORY (LDD OR LDM) 
  
LOAD      MACRO  LOC,D
          IFC    EQ,*LOC**,1
          ERR    LOCAL CAN NOT BE BLANK.
IF1       IFC    EQ,*D**
IF2       IF     DEF,LOC
          IFLT   LOC,100B,2 
          LDD    LOC
          IFCP   2
IF2       ENDIF 
          LDM    LOC
IF1       ELSE
          LDM    LOC,D
IF1       ENDIF 
          ENDM
  
  
**        CVPR   CONVERT PRU INDEX TO RBTA,RBTO,PRU 
  
CVPR      MACROE PRU1,PRU2,FNT,FLAG,ERRA,MST
          LOCAL  NOERR
CVPR.     SET    *
A         IFC    EQ,*FNT**
          IFC    EQ,*MST**,1
          ERR    M S T AND F N T CANNOT BOTH BE NULL
          RJM  MSTADR 
          ADN    MST
          CRD    D.T1 
A         ELSE   3
          LOAD   FNT
          ADN    1                 FST
          CRD    D.T0              (D.T1)=FIRST RBT WORD PAIR ADDRESS 
          IFC    NE,$PRU1$$,3 
          LOAD   PRU1              UPPER 6 BITS 
          LPN    37B
          ELSE   1
          LDN    0                 UPPER 6 BITS 
          STD    D.Z7              UPPER 6 BITS 
          LOAD   PRU2              LOWER 12 BITS
          STD    D.T0 
          IFC    NE,$FLAG$$,2 
          LDK    FLAG              (0,OR 1) 
          ELSE   1
          LDN    0
          RJM    /CALPTR/CALPTR    CONVERT PRU INDEX TO RBTA,RBTO,PRU 
          IFC    NE,$ERRA$$,2 
          PJN  NOERR               IF NO ERRORS 
          LJM  ERRA                ERRORS IN CONVERSION 
NOERR     BSS    0
          ENDM
  
**        CVRP   CONVERT RBTA,RBTO,PRU TO PRU INDEX 
  
CVRP      MACROE RBTA,RBTO,PRU,RBT1,ERRA
          LOCAL  NOERR
          IFC    EQ,*RBTA**,1 
          ERR    R B T A  CAN NOT BE BLANK
          IFC    EQ,*RBT1**,1 
          ERR    R B T 1 CAN NOT BE NULL
          IFC    EQ,*RBTO**,1 
          ERR    R B T O CANNOT BE BLANK
          IFC    EQ,*PRU**,1
          ERR    P R U  CANNOT BE BLANK 
CVRP.     SET    *
          LOAD   RBTA 
          STD    D.Z2 
          LOAD   RBTO 
          STD    D.Z3 
          LOAD   PRU
          STD    D.Z5 
          LOAD   RBT1 
          RJM    /CALPTR/CRP       CONVERT RBTA,RBTO,PRU TO PRU INDEX 
          IFC    NE,*ERRA**,2 
          PJN  NOERR               IF NO ERRORS 
          LJM  ERRA                ERRORS IN CONVERSION 
NOERR     BSS    0
          ENDM
  
'?IFDEF   SPACE  4,15 
'?IFDEF   MACRO  L,S,N,D
'?IFDEFA SET 0
  IRP S 
  IF DEF,S,1
'?IFDEFA SET 1
  IRP 
  IFC EQ, N  ,2 
L  IF_D 0,'?IFDEFA
  SKIP 1
L  IF_D 0,'?IFDEFA,N+2
  ENDM
IFANY     SPACE  4,15 
          MACRO  IFANY,L,S,N
  '?IFDEF L,(S),N,NE
  ENDM
IFNONE    SPACE  1,15 
          MACRO  IFNONE,L,S,N 
  '?IFDEF L,(S),N,EQ
  ENDM
'?PPMD    SPACE  4,15 
          PURGMAC  '?PPMD 
'?PPMD MACRO L,N,I
  IFC EQ, L  ,1 
  ERR LOCAL CAN NOT BE BLANK
  IFC EQ, N  ,6 
  IF DEF,L,3
  IFLT L,100B,2 
  I_D L 
  SKIP 3
  I_M L 
  SKIP 1
  I_M L,N 
  ENDM
ADW       SPACE  1,15 
          PURGMAC  ADW
ADW MACRO L,D 
  '?PPMD L,D,AD 
  ENDM
AOW       SPACE  1,15 
          PURGMAC  AOW
AOW MACRO L,D 
  '?PPMD L,D,AO 
  ENDM
LDW       SPACE  1,15 
          PURGMAC  LDW
LDW MACRO L,D 
  '?PPMD L,D,LD 
  ENDM
LMW       SPACE  1,15 
          PURGMAC  LMW
LMW MACRO L,D 
  '?PPMD L,D,LM 
  ENDM
LOAD      SPACE  1,15 
          PURGMAC  LOAD 
LOAD MACRO L,D
  '?PPMD L,D,LD 
  ENDM
SBW       SPACE  1,15 
          PURGMAC  SBW
SBW MACRO L,D 
  '?PPMD L,D,SB 
  ENDM
SOW       SPACE  1,15 
          PURGMAC  SOW
SOW MACRO L,D 
  '?PPMD L,D,SO 
  ENDM
STW       SPACE  1,15 
          PURGMAC  STW
STW MACRO L,D 
  '?PPMD L,D,ST 
  ENDM
RAW       SPACE  1,15 
          PURGMAC  RAW
RAW MACRO L,D 
  '?PPMD L,D,RA 
  ENDM
**        CVPR   CONVERT PRU INDEX TO RBTA,RBTO,PRU 
  
CVPR..    MACROE PRU1,PRU2,FNT,FLAG,ERRA,MST
          LOCAL  NOERR
CVPR..    SET    *
          LOAD   PRU2              LOWER 12 BITS
          STD    D.T0+2 
A         IFC    EQ, FNT
          IFC    EQ, MST  ,1
          ERR    M S T AND F N T CANNOT BOTH BE NULL
          RJM  MSTADR 
          ADN    MST
          CRD    D.Z1 
A         ELSE   3
          LOAD   FNT
          ADN    1
          STD    D.T0+3 
          IFC    NE, PRU1  ,3 
          LOAD   PRU1              UPPER 6 BITS 
          LPN    37B
          ELSE   2
CVPR..    SET    0
          LDN    0
          STD    D.T0+1 
          IFC    EQ, FLAG  ,3 
          IFNE   CVPR..,0,2 
CVPR..    SET    0
          LDN    0
          IFC    EQ, FNT  ,3
          IFNE   CVPR..,0,1 
          LDN    0
          STD    D.T0+3 
          IFC    NE, FLAG  ,1 
          LDK    FLAG 
          RJM    /CALPTR/CPR= 
          IFC    NE, ERRA  ,2 
          PJN  NOERR
          UJK  ERRA 
NOERR     BSS    0
          ENDM
  
**        CVRP   CONVERT RBTA,RBTO,PRU TO PRU INDEX 
  
CVRP..    MACROE RBTA,RBTO,PRU,RBT1,ERRA
          LOCAL  NOERR
          IFC    EQ, RBTA  ,1 
          ERR    R B T A  CAN NOT BE BLANK
          IFC    EQ, RBT1  ,1 
          ERR    R B T 1 CAN NOT BE NULL
          IFC    EQ, RBTO  ,1 
          ERR    R B T O CANNOT BE BLANK
          IFC    EQ, PRU  ,1
          ERR    P R U  CANNOT BE BLANK 
CVRP.     SET    *
          LOAD   RBTA 
          STD    D.Z2 
          LOAD   RBTO 
          STD    D.Z3 
          LOAD   PRU
          STD    D.Z4 
          LOAD   RBT1 
          RJM    /CALPTR/CRP= 
          IFC    NE, ERRA  ,2 
          PJN  NOERR
          UJK  ERRA 
NOERR     BSS    0
          ENDM
CHKPOS    SPACE  4,12 
**        CHKPOS MACRO
* 
*         CHKPOS TYPE,P1,P2,ADDR,SHORT
* 
*                TYPE = GE,LT,LE,GT,EQ,NE 
*                P1 AND P2 ARE ENTRIES WITHIN PTRTBL
*                ADDR = ADDRESS TO JUMP TO IF P1.TYPE.P2
*                SHORT = CHARACTER STRING -SHORT- IF SHORT JUMP TO ADDR 
*                        IS TO BE FORCED
* 
*         CHKPOS WILL GENERATE A CALL TO THE SUBROUTINE CHKPOS (IN
*         DECKALL).  THE TWO POSITIONS, P1 AND P2, WILL BE COMPARED BY
*         CHKPOS.  THE RETURN VALUE WILL BE TESTED BY THE CODE GENERATED
*         BY THE MACRO AND A JUMP WILL BE MADE TO ADDR IF THE CONDITION 
*         TYPE EXISTS.
  
          PURGMAC  CHKPOS 
  
CHKPOS    MACRO  TYPE,P1,P2,ADDR,JUMP 
  LDC ;B*1S12-PTRTBL*1S12+;C-PTRTBL 
  RJM CHKPOS
  ECHO ,A=(GE,GT,LT,LE,EQ,NE),B=(,1,,1,,),C=(P,P,M,M,Z,N),D=(M,M,P,P,N,Z
,)
  IFC EQ, ;A A ,10
  IFC NE, B  ,1 
  SBN 1 
  IFC NE, ;E SHORT ,2 
  IF DEF,ADDR,3 
  IF LE,*-ADDR,31D,2
  C_JN ;D 
  SKIP 2
  D_JN *+3
  LJM ;D
  STOPDUP 
  ENDD
  ENDM
          ENDX
          SPACE  4
