. 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