.         EDIT$ EDITING PACKAGE




.         INTERNAL DEFINITIONS

          DEF
PX        EQU       X1                  PACKET POINTER
CX        EQU       X2                  CHARACTER POINTER
WX        EQU       X3                  WORD POINTER

PKT       EQUF      0,PX                PACKET LOCATION
CI        EQUF      0,CX                CHARACTER INDEX
WI        EQUF      0,WX                WORD INDEX

EMSGC     EQUF      PKT,,S2             EMSG$ SIGNAL CHARACTER
IL        EQUF      PKT,,S3             IMAGE LENGTH
ILOC      EQUF      PKT,,H2             IMAGE LOCATION
CIX       EQUF      PKT+1,,S1           SAVE AREA FOR CHARACTER INDEX
WIX       EQUF      PKT+1,,S2           SAVE AREA FOR WORD INDEX
CIM       EQUF      PKT+1,,S3           SAVE AREA FOR EMSG$ CHARACTER INDEX
WIM       EQUF      PKT+1,,H2           SAVE AREA FOR EMSG$ WORD INDEX
FPS       EQUF      PKT+2,,S1           SCALE FOR FLOATING POINT EDIT
FPR       EQUF      PKT+2,,S2           FLOATING POINT ROUNDING OPTION
RETURN    EQUF      PKT+2               RETURN POINT FOR VECTORS
RET       EQUF      PKT+3,,H1           SAVE AREA FOR RETURN POINT
SAVE1     EQUF      PKT+3,,H2           SAVE AREA FOR PX
SAVE2     EQUF      PKT+4               SAVE AREA FOR CX
SAVE3     EQUF      PKT+5               SAVE AREA FOR WX
DPC       EQUF      PKT+6,,S1           CHARACTER FOR DOUBLE PRECISION SCALE
SPC       EQUF      PKT+6,,S2           CHARACTER FOR SINGLE PRECISION SCALE
NDP       EQUF      PKT+6,,S3           DIGITS BEFORE DECIMAL POINT
NDF       EQUF      PKT+6,,S4           DIGITS FOLLOWING DECIMAL POINT
SIGN      EQUF      PKT+6,,S5           SIGN INDICATOR
ZERO      EQUF      PKT+6,,S6           FLOATING POINT ZERO INDICATOR
FCOL      EQUF      PKT+7,,H1           FINAL COLUMN OR ZERO
SCALE     EQUF      PKT+7,,XH2          POWER OF TEN
VALUE     EQUF      PKT+8               SAVE AREA FOR DIGITS

E$DEF*    PROC      *0
$(1)      LIT
P         PROC      *1
STORE**   NAME
          DO        P(1)>0 , LA,P(0,1) A2,+(E$AD 1,1)
          EX        EDIT$T,*CX
          END
          END

/

.         PROCEDURES FOR EDIT$

P         PROC      *1
E$DIT*    NAME      EDIT$               INITIAL EDIT$ ENTRY
E$DITR*   NAME      EDITR$              EDIT$ RE-ENTRY
E$DITZ*   NAME      EDITZ$              EDIT$ RE-ENTRY AND ZERO COLUMN POINTER
E$CHAR*   NAME      ECHAR$              EDIT A CHARACTER
E$COL*    NAME      ECOL$               POSITION TO A COLUMN
E$SKIP*   NAME      ESKIP$              SKIP AN AREA
E$MSGC*   NAME      *1                  STORE NEW EMSG$ CHARACTER
          DO        P(1)>1 , LA,15*(P(1)<3)+P(1,3) 12,+(E$AD 1,1)
          DO        P(1)=1 , LA,15 12,P(1,1)
          DO        P(0,*0)=0 , LMJ   11,P(0,0)
          DO        P(0,*0)=1 , SA,12 12,0,1
          END

P         PROC      *1
E$OCTV*   NAME      EOCTV$              VARIABLE LENGTH OCTAL
E$DECV*   NAME      EDECV$              VARIABLE LENGTH DECIMAL
E$FD1*    NAME      EFD1$               ONE WORD FIELDATA
E$FD3*    NAME      EFD3$               FIELDATA
E$FI*     NAME      EFI$                I$ FORM
E$FH*     NAME      EFH$                18,18 FORM
E$FD5*    NAME      EFD5$               FIELDATA
E$HEXV*   NAME      EHEXV$              VARIABLE LENGTH HEXADECIMAL
          DO        P(1)>0 , LA,P(1,3) 12,+(E$AD 1,1)
          LMJ       11,P(0,0)
          END

P         PROC      0,1
E$DITX*   NAME      EDITX$              EXIT FROM EDIT MODE
E$DTX*    NAME      EDITX$
E$COLN*   NAME      ECOLN$              COMPUTE COLUMN NUMBER
E$MSGR*   NAME      EMSGR$              RE-ENTER MESSAGE EDITOR
E$CLEAR*  NAME      ECLEAR$             BLANK IMAGE AND RESET COLUMN POINTER
          LMJ       11,P(0,0)
          END

P         PROC      *1
E$FD2*    NAME      EFD2$               TWO WORD FIELDATA
E$FD4*    NAME      EFD4$               FIELDATA
E$FD6*    NAME      EFD6$               FIELDATA
          DO        P(1)>0 , DL 12,+(E$AD 1,1)
          LMJ       11,P(0,0)
          END

P         PROC      *1
E$MSG*    NAME      EMSG$
E$MSG1*   NAME      EMSG1$
          DO        P(1)>0 , LA,14*(P(1)<3)+P(1,3) 12,+(E$AD 1,1)
          DO        P(0)>1 , LXI,14*(P(0)<4)+P(0,3) 12,+(E$AD 0,1)
          LMJ       11,P(0,0)
          END

P         PROC      *1
E$COPY*   NAME      ECOPY$              STRING COPY ROUTINE
E$PACK*   NAME      EPACK$              STRING COPY WITH PACKING
          DO        P(1)>1 , LA,14*(P(1)<4)+P(1,4) 12,+(E$AD 1,2)
          DO        P(0)>1 , LXI,14*(P(0)<4)+P(0,3) 12,+(E$AD 0,1)
          DO        P(1)>0 , LA,14 13,P(1,1)
          LMJ       11,P(0,0)
          END

P         PROC      *1
E$OCTF*   NAME      EOCTF$              FIXED LENGTH OCTAL EDITOR
E$DECF*   NAME      EDECF$              FIXED LENGTH DECIMAL EDITOR
E$DECZ*   NAME      EDECZ$              FIXED LENGTH LEADING ZERO DECIMAL
E$DCFZ*   NAME      EDCFZ$              FIXED LENGTH LEADING ZERO DECIMAL
E$HEXF*   NAME      EHEXF$              FIXED LENGTH HEXADECIMAL EDITOR
          DO        P(1)>1 , LA,P(1,4) 12,+(E$AD 1,2)
          DO        P(1)>0 , LA,14 13,P(1,1)
          LMJ       11,P(0,0)
          END

P         PROC      *1
E$FORM*   NAME      1                   GENERAL FORM EDIT
          DO        P(1)>1 , LA,P(1,4) 12,+(E$AD 1,2)
          DO        P(1)>0 , LA 13,P(1,1)
          LMJ       11,EFORM$
          END

P         PROC      *1
E$FLS1*   NAME      EFLS1$              SINGLE PRECISION SCIENTIFIC
E$FLG1*   NAME      EFLG1$              SINGLE PRECISION GENERALIZED FORMAT
E$FLF1*   NAME      EFLF1$              SINGLE PRECISION FIXED FORMAT
E$FLN1*   NAME      EFLN1$              SINGLE NICE EDIT
P(2,1)    EQU       1
E$FLS2*   NAME      EFLS2$              DOUBLE PRECISION SCIENTIFIC
E$FLG2*   NAME      EFLG2$              DOUBLE PRECISION GENERALIZED
E$FLF2*   NAME      EFLF2$              DOUBLE PRECISION FIXED
E$FLN2*   NAME      EFLN2$              DOUBLE NICE EDIT
          DO        P(2,1)**(P(1)>1) , LA 13,+(E$AD 1,2)
          DO        (1-P(2,1))**(P(1)>1) , DL 13,+(E$AD 1,2)
          DO        P(1)>0 , LA,14 12,P(1,1)
          LMJ       11,P(0,0)
          END

P         PROC      *1
E$TIM*    NAME      ETIME$              HH:MM:SS
E$TIME*   NAME      ETIME$              HH:MM:SS
E$DAY1*   NAME      EDAY1$              MM/DD/YY
E$DAY2*   NAME      EDAY2$              DD MMM YY
E$DAY3*   NAME      EDAY3$              MONTH DD, YEAR
E$DAY4*   NAME      EDAY4$              YYYYMMDD
E$DAY5*   NAME      EDAY5$              YYMMDD
E$DAYW*   NAME      EDAYW$              WEEKDAY
E$TIM1*   NAME      ETIM1$              HH:MM:SS XM
E$TIME1*  NAME      ETIM1$              HH:MM:SS XM
          DO        P(1)>0 , LA,P(1,3) 12,+(E$AD 1,1)
          LMJ       11,P(0,0)
          END

P         PROC      0,2
E$TD*     NAME      ETIME$              HH:MM:SS
E$DAT1*   NAME      EDAY1$              MM/DD/YY
E$DAT2*   NAME      EDAY2$              DD MMM YY
E$DAT3*   NAME      EDAY3$              MONTH DD, YEAR
E$DAT4*   NAME      EDAY4$              YYYYMMDD
E$DAT5*   NAME      EDAY5$              YYMMDD
E$DATW*   NAME      EDAYW$              WEEKDAY
E$TD1*    NAME      ETIM1$              HH:MM:SS XM
          TDATE$
          LMJ       11,P(0,0)
          END

E$AD*     PROC      1,1        COMPUTE GENERALIZED ADDRESS
S         EQU       E$AD(1,1)
T         EQU       E$AD(1,2)
          +(I$      0,0,0,P(S,T+1),2*P(S,*T+1)+P(S,*T),P(S,T))
          END

P         PROC      *10
E$PKT*    NAME      1          GENERATE SMALL PACKET
E$PKTF*   NAME      0          GENERATE BIG PACKET
A(0,1)    EQU       'MSG'
A(1,1)    EQU       046 '&'
A(0,2)    EQU       'FPS'
A(1,2)    EQU       1
A(0,3)    EQU       'FPR'
A(1,3)    EQU       1
A(0,4)    EQU       'DPC'
A(1,4)    EQU       0
A(0,5)    EQU       'SPC'
A(1,5)    EQU       0
 DO P>2 ,I DO P-2 ,J DO A(1) , DO A(0,J)=P(I+1,1) ,A(1,J) EQU P(I+1,2)
Z         FORM      6,6,6,18
          Z         0,A(1,1),P(1,1),P(1,2)
          Z         0,0,0,0
          Z         A(1,2),A(1,3),0,0
          +         0,0
          +         0
          +         0
          DO        P(0,0) , END
          +         A(1,4),A(1,5),0,0,0,0
          +         0,0
          +         0
          +         0
          END

P         PROC      1,1
E$FW*     NAME      1                   GENERATE FORM WORD
I         DO        P(1) ,F(1) EQU (F(1)*/P(1,I))++(1*/(P(1,I)-1))
          +         F(1)
          END



P         PROC      *1                  EDIT USING COMMON PACKET
E$DT*     NAME      1
E$DTR*    NAME      2
E$DTZ*    NAME      3
          DO        P(0,0)=1 , E$DIT EP$
          DO        P(0,0)=2 , E$DITR EP$
          DO        P(0,0)=3 , E$DITZ EP$
          DO        P(1)>0 , E$MSGC P(1,1)
          END

P         PROC      *1
E$PRTX*   NAME
          E$DTX
E$PRT*    NAME
          PRINT$    EL$,ELL$,P(1,1)+(P(1)=0)
          END

/

.         INTERNAL DEFINITIONS FOR EDIT$S AND EDIT$U

          DEF

ISIGN     EQUF      PKT+1,,S3           INTEGER SIGN
XPSIGN    EQUF      PKT+6,,S3           SIGN OF THE EXPONENT
EXP       EQUF      PKT+6,,S4           IF NONZERO, THEN NO EXPONENT SEARCHING
AFTRDP    EQUF      PKT+6,,S5           AFTER DECIMAL POINT FLAG
VALNUM    EQUF      PKT+6,,S6           VALID NUMBER FOUND FLAG
BIAS      EQUF      PKT+7,,XH2          SAVE AREA FOR POWERS
MAN       EQUF      PKT+8               TWO WORD MANTISSA SAVE

U$DEF*    PROC      0,0
LOAD*     EQUF      EDIT$U,*CX
LOOK*     EQUF      EDIT$K,CX
          END

.         PROCEDURES FOR EDIT$S AND EDIT$U

P         PROC      0,1
U$POS3*   NAME      UPOS3$              POSITION BEFORE NEXT NON-BLANK CHARACTER
U$POS4*   NAME      UPOS4$              POSITION AFTER NEXT NON-BLANK CHARACTER
U$CHAR*   NAME      UCHAR$              A0 = 1 CHARACTER
U$LOOK*   NAME      ULOOK$              LOOK AT NEXT CHAR, POINTER UNTOUCHED
U$I*      NAME      UI$                 A0(A1) = INTEGER
U$DI*     NAME      UDI$                A0(A1) = DECIMAL INTEGER
U$OI*     NAME      UOI$                A0(A1) = OCTAL INTEGER
U$HI*     NAME      UHI$                A0,A1 = HEXADECIMAL INTEGER
          LMJ       11,P(0,0)
          END

P         PROC      *1
U$POS1*   NAME      UPOS1$              POSITION BEFORE CHARACTER IN A0
U$POS2*   NAME      UPOS2$              POSITION AFTER CHARACTER IN A0
          DO        P(1)>0 , LA,14 12,P(1,1)-(P(0,*0)=1)
          LMJ       11,P(0,0)
          END

P         PROC      *0
U$FP*     NAME      UFP$                FLOATING POINT UNEDIT
U$FP2*    NAME      UFP2$               DOUBLE PRECISION ENTRY
U$N*      NAME      UN$                 ANY TYPE WHATSOEVER
          LMJ       11,P(0,0)
          END