*TITLES1STAT -- STATIC APPLICATION 00000100 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** *A AUTHOR HOOGSTRAAT 00000200 *A DESIGNER HOOGSTRAAT 00000300 *A LANGUAGE S/370 ASSEMBLER F 00000400 *A WRITTEN UNKNOWN 00000500 * REVISED MO-DA-YR 00000600 * REVISED 08-29-83 BY GEM. FIXED BUG TO ALLOW 16 MS SAMPLE 00000700 * INTERVAL. 00000800 * REVISED 11-03-83 STRANDTMAN CORRECT STATIC SHIFTS BETWEEN 00000900 * 0 AND -SAMPR MS. 00001000 * REVISED 05-15-84 REM. ALLOW FOR NON-POWER OF 2 SAMPLE 00001100 * INTERVALS. 00001200 * 00001300 *A 00001400 *A 00001500 *A CALL S1STAT ( ITEM, RLENG, SAMPR, STAT, KEYD, KEYINT ) 00001600 *A 00001700 *A IN/OUT ARGUMENT TYPE DESCRIPTION 00001800 *A 00001900 *A IN/OUT ITEM R4/I4 DATA TRACE ADDRESS 00002000 *A IN RLENG I4 INTEGER RECORD LENGTH IN MS 00002100 *A IN SAMPR I4 INTEGER SAMPLE RATE IN MS 00002200 *A IN STAT I4 INTEGER TO-BE-APPLIED STATIC IN MS 00002300 *A IN KEYD I4 DATA TRACE TYPE; 0=INTEGER, 00002400 *A 1 = FLOATING POINT 00002500 *A IN KEYINT I4 INTERPOLATION KEY; 0=INTERPOLATION, 00002600 *A 1 = NO INTERPOLATION 00002700 *A 00002800 *A 00002900 *A S1STAT WILL APPLY A STATIC SHIFT TO THE SEISMIC TRACE IN ITEM, 00003000 *A BY AN AMOUNT SPECIFIED IN STAT. A POSITIVE STATIC PUSHES THE 00003100 *A TRACE AWAY FROM TIME ZERO, WHILE A NEGATIVE STATIC PULLS THE 00003200 *A TRACE TOWARD TIME ZERO. STATIC SHIFTS ARE APPLIED WITH AN 00003300 *A ACCURACY OF 1 MS UNLESS KEYINT=1, WHEN STATIC SHIFTS ARE AT 00003400 *A AN ACCURACY OF THE SAMPLE RATE. THE TRACE MAY BE EITHER 00003500 *A INTEGER OR FLOATING POINT WITH THE TYPE SET BY THE PARAMETER 00003600 *A KEYD. 00003700 *A 00003800 * 00003900 * ====================================================== 00004000 * * PROGRAM DEVELOPED BY 00004100 * * H * HOOGSTRAAT PROGRAMMING SERVICES LTD. 00004200 * * P S * BOX 20, SITE 7, SS #1 00004300 * * * * * * * * CALGARY, ALTA. CANADA PH 288-8088 00004400 * ====================================================== 00004500 * 00004600 MACRO 00004700 &NAME FLT &A 00004800 &NAME LPR R0,&A 00004900 ST R0,FHOLD+4 00005000 LD FR0,FHOLD 00005100 AD FR0,DZERO 00005200 LTR &A,&A 00005300 BC 11,*+6 00005400 LCDR FR0,FR0 00005500 MEND 00005600 * 00005700 *---------------------------------------------------------------------- 00005800 * 00005900 S1STAT CSECT 00006000 * 00006100 COPY S1REG 00006200 * 00006300 BASER EQU R15 00006400 ITEM EQU R2 00006500 SAMPR EQU R3 00006600 NOSAMP EQU R11 00006700 INP EQU R4 00006800 OUT EQU R5 00006900 * 00007000 USING *,BASER 00007100 * 00007200 STM R2,R12,28(R13) SAVE CALLER'S REGISTERS 00007300 * 00007400 LM R2,R7,0(R1) LOAD CALLING SEQUENCE 00007500 L R5,0(R5) LOAD VALUE OF STAT 00007600 LTR R5,R5 RETURN IF STAT=0 00007700 BZ RETURN 00007800 ST R5,STATIC 00007900 * 00008000 L NOSAMP,0(R3) LOAD VALUE OF RECORD LENGTH 00008100 L R8,0(R4) LOAD VALUE OF SAMPLE RATE 00008200 * 00008300 SR R10,R10 00008400 DR R10,R8 CONVERT RECORD LENGTH TO SAMPLES 00008500 BCTR NOSAMP,0 DECREMENT BY 1 00008600 SLA NOSAMP,2 AND CONVERT TO BYTE COUNT 00008700 * 00008800 L R6,0(R6) LOAD VALUE OF KEYD 00008900 ST R6,KEYD 00009000 * 00009100 LTR R6,R6 IF THE TRACE IS IN FLOATING 00009200 BZ STAT25 POINT, THEN FLOAT SAMPLE RATE. 00009300 * 00009400 FLT R8 00009500 LER FR6,FR0 HOLD FLOATING POINT SAMPR IN FR6 00009600 * 00009700 STAT25 L R6,0(R7) LOAD VALUE OF KEYINT 00009800 ST R6,KEYINT 00009900 * 00010000 L R4,STATIC COMPUTE NUMBER OF WHOLE SAMPLES 00010100 SRDA R4,32 TO SHIFT. 00010200 DR R4,R8 R8 STILL HOLDS SAMPLE RATE. 00010300 ST R5,SHIFT 00010400 * 00010500 LR R7,R5 00010600 ST R4,INTERP REMAINDER IS THE INTERPOLATION 00010700 * AMOUNT. 00010800 * 00010900 SR OUT,OUT ZERO OUTPUT INDEX 00011000 LPR R10,R7 00011100 CR R10,NOSAMP CHECK IF TRACE IS TO BE KILLED 00011200 BNL STAT100 00011300 * 00011400 LTR R6,R6 CHECK IF INTEROPLATION DESIRED 00011500 BZ STAT28 00011600 * 00011700 LTR R7,R7 NO INTERPOLATION, CHECK SHIFT 00011800 BZ RETURN AMOUNT AND EXIT IF ZERO. 00011900 B STAT35 00012000 * 00012100 STAT28 ST NOSAMP,KEYINT SET FLAG FOR NO INTERPOLATION 00012200 LTR R4,R4 CHECK IF ANY INTERPOLATION 00012300 BZ STAT35 00012400 * 00012500 ST OUT,KEYINT SET FLAG TO DO INTERPOLATION 00012600 LTR R7,R7 CHECK DIRECTION OF SHIFT 00012700 BM STAT30 AND ALSO 00012800 LTR R4,R4 RKS 11/83 CHECK SIGN OF INTERP 00012900 BM STAT30 RKS 11/83 AND HANDLE FOR NEG CASE 00013000 LA R7,1(R7) IF BOTH POSITIVE, THEN SHIFT AN 00013100 ST R7,SHIFT EXTRA SAMPLE AND INTERPOLATE IN 00013200 * REVERSE 00013300 MR R6,R8 COMPUTE NEW INTERPOLATION COUNT 00013400 S R7,STATIC 00013500 LCR R7,R7 00013600 ST R7,INTERP 00013700 * 00013800 STAT30 L R7,INTERP 00013900 AR R7,R8 COMPUTE 2 VALUES OF 00014000 ST R7,INTERP1 INTERPOLATION FACTORS. 00014100 * 00014200 LCR R7,R7 00014300 AR R7,R8 00014400 ST R7,INTERP2 00014500 * 00014600 STAT35 L R9,SHIFT COMPUTE STARTING INDICES FOR 00014700 SLA R9,2 INPUT AND OUTPUT. CHECK SHIFT 00014800 BNP STAT40 RKS 11/83 DIRECTION. 00014900 * 00015000 LR INP,NOSAMP POSITIVE SHIFT, INDEX FROM 00015100 SR INP,R9 REVERSE. START INPUT AT SAMPLE 00015200 LR OUT,NOSAMP NOSAMP-SHIFT. OUTPUT AT NOSAMP. 00015300 B STAT50 00015400 * 00015500 STAT40 SR OUT,OUT NEGATIVE SHIFT, START OUTPUT 00015600 LPR INP,R9 INDEX AT ZERO AND INPUT INDEX AT 00015700 * SHIFT. 00015800 L R6,KEYINT IF THERE IS INTERPOLATION, 00015900 LTR R6,R6 SHORTEN THE TRACE BY ONE SAMPLE 00016000 BNZ STAT60 TO PREVENT PICKING UP A GARBAGE 00016100 S NOSAMP,=F'4' VALUE. 00016200 * 00016300 STAT50 L R6,KEYINT CHECK IF INTERPOLATION TO BE 00016400 LTR R6,R6 DONE. IF NOT SKIP CONVERSION. 00016500 BNZ STAT60 00016600 * 00016700 L R6,KEYD CHECK DATA TYPE 00016800 LTR R6,R6 00016900 BZ STAT60 00017000 * 00017100 L R7,INTERP1 DATA IS FLOATING POINT-CONVERT 00017200 FLT R7 INTERPOLATION FACTORS TO 00017300 STE FR0,INTERP1 FLOATING POINT. 00017400 * 00017500 L R7,INTERP2 00017600 FLT R7 00017700 STE FR0,INTERP2 00017800 * 00017900 STAT60 L R10,SHIFT HOLD SHIFT DIRECTION IN R10 00018000 L R7,KEYINT HOLD INTERPOLATION FLAG IN R7 00018100 LR R12,R8 MOVE SAMPLE RATE 00018200 MVI STAT70+1,X'00' MAKE BRANCH A NOP 00018300 L R6,KEYD CHECK DATA TYPE 00018400 LTR R6,R6 00018500 BZ STAT70 00018600 MVI STAT70+1,X'F0' MAKE BRANCH A BRANCH 00018700 * 00018800 STAT70 NOP STAT80 BRANCH/NOP DEPENDS ON DATA TYPE 00018900 * 00019000 L R1,0(ITEM,INP) INTEGER INTERPOLATION AND MOVE 00019100 LTR R7,R7 CHECK IF INTERPOLATION TO BE 00019200 BNZ STAT75 DONE AND IF NOT SKIP IT. 00019300 L R9,4(ITEM,INP) 00019400 M R0,INTERP1 00019500 M R8,INTERP2 00019600 AR R1,R9 00019700 LR R0,R1 00019800 SRDA R0,32 00019900 DR R0,R12 00020000 STAT75 ST R1,0(ITEM,OUT) 00020100 B STAT90 00020200 * 00020300 STAT80 LE FR0,0(ITEM,INP) FLOATING POINT INTERPOLATION AND 00020400 LTR R7,R7 CHECK IF INTERPOLATION TO BE 00020500 BNZ STAT85 DONE AND IF NOT SKIP IT 00020600 LE FR2,4(ITEM,INP) MOVE 00020700 ME FR0,INTERP1 00020800 ME FR2,INTERP2 00020900 AER FR0,FR2 00021000 DER FR0,FR6 DIVIDE BY SAMPLE RATE 00021100 STAT85 STE FR0,0(ITEM,OUT) 00021200 * 00021300 STAT90 LTR R10,R10 CHECK SHIFT DIRECTION 00021400 BP STAT95 RKS 11/83 00021500 * 00021600 LA OUT,4(OUT) BUMP OUTPUT INDEX 00021700 CR OUT,NOSAMP AND CHECK IF DONE 00021800 BH RETURN 00021900 * 00022000 CR INP,NOSAMP CHECK INPUT INDEX FOR COMPLETION 00022100 BNL STAT100 00022200 LA INP,4(INP) BUMP INPUT INDEX 00022300 B STAT70 00022400 * 00022500 STAT95 S OUT,=F'4' COMPUTE NEW OUTPUT INDEX 00022600 BM RETURN AND RETURN IF RUN OUT 00022700 * 00022800 S INP,=F'4' COMPUTE NEW INPUT INDEX 00022900 BM STAT120 AND ZERO FILL IF RUN OUT 00023000 B STAT70 00023100 * 00023200 STAT100 LA R10,4 ZERO FILL REMAINDER OF TRACE 00023300 LA R9,0 00023400 LTR R7,R7 THESE THREE LINES OF 00023500 BNZ STAT110 CODE ZERO THE LAST 00023600 LA NOSAMP,4(,NOSAMP) SAMPLE. 00023700 * 00023800 STAT110 ST R9,0(ITEM,OUT) 00023900 BXLE OUT,R10,STAT110 00024000 B RETURN 00024100 * 00024200 STAT120 L R11,=F'-1' ZERO FILL FRONT END OF TRACE 00024300 L R10,=F'-4' ON POSITIVE SHIFT 00024400 LA R9,0 00024500 * 00024600 STAT130 ST R9,0(ITEM,OUT) 00024700 BXH OUT,R10,STAT130 00024800 * 00024900 RETURN LM R2,R12,28(R13) RESTORE CALLER'S REGISTERS 00025000 BR R14 AND RETURN TO HIM 00025100 * 00025200 BOMB L R15,=V(S1EXIT) 00025300 BR R15 00025400 * 00025500 DS 0D 00025600 FHOLD DC X'4E00000000000000' 00025700 DZERO DC D'0.0' 00025800 INTERP1 DS F 00025900 INTERP2 DS F 00026000 INTERP DS F 00026100 SHIFT DS F 00026200 KEYD DS F 00026300 KEYINT DS F 00026400 STATIC DS F 00026500 * 00026600 LTORG 00026700 * 00026800 END 00026900