*20 ///PROG SNUMTOP /SPECIAL SYSNUM TO SETUP "PLOTTOP". /REQUIRES 20(10) INPUT SYSFILES. /INPUTS DATA FROM SYSTEM FILES & /OUTPUTS AS NUMFILES FOR USE BY /CONTOUR PLOTTING & OTHER PROGRAMS. /WILL AVERAGE N PTS PER INPUT FILE /BEFORE STORAGE IN OUTPUT NUMFILE. /ONE NUMFILE IS FORMED FOR EACH DATA /VALUE. THUS THERE ARE AS MANY OUTPUT /NUMFILES AS THERE ARE DATA VALUES AFTER /AVERAGING. THERE ARE AS MANY DATA /POINTS (X,Y,Z) IN A NUMFILE AS THERE ARE /INPUT SYSFILES. /X & Y LOCATIONS IN A 1024-1024 GRID ARE /SET UP FOR USE BY PLOTTOP. /HEADER: / P0=4000(NUMFILE) / P1=3 (FP FORMAT) / P17=3 (DIMENSION) / P20=NUM OF XYZ GROUPS,(I.E., NO.OF / FILES OR POINTS\PLOT)PER NUMFILE. / DATA SEQUENCE:X(1),Y(1),Z(1),X(2) / Y(2),Z(2),ETC. / P22=NUM OUTFILES / P43=ABSOLUTE MAX Z VALUE / P102=MAX Z VALUE / P103=MIN Z VALUE /LIMITING FACTORS ON INFILES: / 85 MAXIMUM FILES / 8192 MAXIMUM DATA POINTS AFTER AVERAGING /DESTROYS DF2 /NO LODSYM NEEDED, PBLOCK ADDED. LMODE SEGMNT 5 *20 //CONTROL SEQUENCE FOLLOWS. BEG, CLR AXO STARTF OPR 2 0 JMP IOQUES /ACTIVE UNITS /LIST OF FILE NAMES /XYLOC AND OUTNAME JMP SETUP /SETUP PASS1 JMP PASS1 /MAKE P42+P43 LIST. /OUTPUT ON U0 OR /DISK SEQUENTIALLY JMP PASS2 /BRING IN DATA /FROM U0 OR DISK /STRIP AND OUTPUT /AS A NUMFILE //END CONTROL SEQUENCE. //NOW FOLLOW ROUTINES CALLED FROM CONTROL /SEQUENCE. /ROUTINE TO ASK QUESTIONS. IOQUES, SET 3 0 D0, LIF 4 MESOUT MNAM /SYSNUM /ASK INUNITS & OUTUNITS. D1, LIF 4 INUNITS /ASK INUNITS D2, LIF 4 OUTUNITS /ASK OUTUNITS LIF 4 /SETUP NAME TABL TABSET 0 /TABNUM LDF 2 2000 /START LOC 42 /MAX NO. ENTRIES LIF 4 INTABLE /GET LIST OF NAMES 0 /TABNUM /ASK NUMBER OF PTS TO AVERAGE. D3, LIF 4 INTRACT CJ3 M3 /PTS TO AVG: CJ3, T3 J3 T3, 0 J3, JMP D3 JMP .+1 /NO. DATA PTS /PER PLOTTED PT. AZE I /CHECK FOR 0 JMP D3 /ILLEGAL STA AVGPT COM STC MAVGPT STORE FPAVPT /NOW GET OUTFILE NAMES. D7, LIF 4 INTRACT CJ7 M7 /FIRST OUTNAME CJ7, T3 J7 J7, JMP BEG /CR JMP .+1 /NUM STA I FNUM, 0 LDF 4 LDA INBUF STA I FNAM, 0 STC LNAM JMP 3 /LEAVE /ROUTINE TO TYPE OUT LAST OUTNAME. TYPLST, SFLOAT NUMOUT /NUM OUTFILES ADD 0 STC TYPLX FADD FM1 STORE FPTEMP SFLOAT FNUM /IST OUTNAME NUM FADD FPTEMP SETWRD 0400 OUTPUT LNUM LIF 4 MESOUT LSTNM TYPLX, 0 /LEAVE NUMOUT, 0 LSTNM, TEXT $LAST OUTNAME$ 4040 LNAM, 0000 LNUM, 0000 0000 4543 KP1, FM1, 1 5777 7777 FPTEMP, 0 0 0 FPAVPT, 0 0 0 AVGPT, 0 DECIMAL XYLOC, 500;0 500;250 500;500 500;750 650;40 675;250 725;500 700;770 860;200 975;500 860;800 350;40 325;250 275;500 300;770 140;200 25;500 140;800 380;930 620;930 OCTAL -0 /TERMINATOR /END IOQUES. /INITIALIZER FOR PASS1 SETUP, SET 3 0 /STORAGE WORDS LDF 4 LDA I 6102 STA WORD1 /PBLOCK LDA I 4406 STA WORD2 /DATA /INITIALIZE TABLE PNTRS. LIF 4 TABINI 0 /TAB NO. /SET HEADER SETUP FLAG. CLR STC FSTFLG /CLR 1ST FILE FLAG STC FILCNT /CLR FILE CNTR /P42+P43 PNTRS. SET I 1 P50 SET I 7 /DF7 OUT PUT PNTR 3777 LDA I /SET UP DISK 4140 /OUTPUT STRT BN. STC WBN JMP 3 /LEAVE /END SETUP. /PASS1: BRINGS IN ONE FILE, SETS UP HEADER /BLOCK FOR FIRST FILE, PLACES CURRENT P42+P43 /IN HEADER, PUTS RAW FILE DATA (DF6) INTO /OUTPUT AREA (DF7) AND WRITES ONTO U0 OR DISK. PASS1, SET 3 0 MRFIL, LIF 4 /GET A FILE + BRING IN TABGET 0 /TABLE NO. JMP TABDUN /END TABLE JMP NOFIND /FILE NOT FOUND LIF 4 /FILE FOUND TABZER /ZERO TABLE 0 LDA I FSTFLG, 0 /0=FIRST THRU /4000(NEG)=ALL OTHERS APO JMP AHD /CODING TO HANDLE 1ST FILE. SET I 2 /SETUP HDR,FSTFLG SET. /MOVE FIRST PBLOCK /QN6,DF2 TO QN7,DF2 2777 SET I 12 3377 LDF 2 LDA I 2 STA I 12 XSK 12 JMP .-3 SFLOAT P17 /SAMPL\SEG FDIV FPAVPT /AVG PTS FIX FAC ISTOR1 NUMOUT /NUM OUTFILES SFLOAT /NOW TRUNCATE NUMOUT /& GET NUM AVGD FMUL /PTS PER OLDFILE FPAVPT /ON DISK. FCOMP FIX FAC ISTOR1 MPT /-TRUNCATED NUM / INFILE PTS LDA I 4000 STA P0 /DATA TYPE STC FSTFLG /UNSET, NEG,4000 LDA I 3 STA P17 /DIMENSION STA P1 /FPNUMFILE LDA I NUMLOC, 24 /20(10) STA P20 /NUM XYZ LOC\OUTFILE JMP TYPLST /TYPE LAST OUTNAME /ADD CURRENT PBLOCKS P42+P43 (QN6,DF2) /TO LIST IN HEADER )QN7,DF2). AHD, LDA I FILCNT, 0 ADD KP1 STC FILCNT /BUMP NO. FILES STRD LDF 2 LOAD P42-400 STORE 4\1 LOAD P43-400 STORE 4\1 /NOW MOVE DATA FROM DF6 FILE INPUT AREA /TO DF7 OUTPUT AREA AFTER POINT AVERAGING. /WHEN DF7 IS FULL, DUMP DF7 ONTO U0 OR DISK. SET I 10 MPT, 0 /-TRUNCATED INFILE / POINTS. SET I 6 2000 /TAKE PNTR MORPTS, SET I 16 MAVGPT, 0 /-IN PTS\OUT PT FZER STORE FPTEMP LDF 6 PTNXT, SFLOAT /GET OLD DATA FROM 4\6 /DF 6. FADD FPTEMP STORE FPTEMP LDA I 10 /BUMP BETA10 XSK I 16 /DUN AVG NO PTS? JMP PTNXT /NO FDIV FPAVPT /AVERAGE LDF 7 FIX FAC LDA I 7 /BUMP BETA 7 ISTOR1 /PUT NEW AVGD DATA 7 /INTO DF7. XSK 7 /DF7 FULL? SKP JMP OUTDF7 /YES, OUTPUT IT XSK 10 /DUN ALL PTS THIS FILE? JMP MORPTS /NO, RECYCLE JMP MRFIL /YES,GET NXT FILE /END MRFIL LOOP. /TABLE DUN HANDLER. TABDUN, JMP OUTDF7 /UNCONDITIONAL DUMP LIF 4 /INIT TBL PNTRS TABINI 0 LIF 4 /MISSING CHECK MISSNG 0 /TAB NUM JMP NOFIND /YES, MISSING /SET UP FILE COUNTERS. LDF 2 CLR ADD FILCNT SAE /ENOUGH XYZ LOC? NUMLOC JMP BADXYZ /BAD LDA /OK NUMOUT STA P22 /NUM OUTFILES JMP 3 /LEAVE PASS1 /END PASS1. /DF7 OUTPUT BUFFER AREA IS FULL. WRITE IT /ON U0 OR DISK. RESET BETA 7 TO CONTINUE /STORAGE. OUTDF7, SET 13 0 LDF 7 JMP WTAP SET I 7 3777 JMP 13 /END OUTDF7. /IN CASE WRONG NUM OF XYZ PAIRS WERE ENTERED /FOR NUM OF INFILES ENTERED, TYPE ERROR /MESSAGE 6 RESTART PROGRAM. BADXYZ, LIF 4 MESOUT MXYZ JMP BEG MXYZ, TEXT $WRONG NUM XYZ LOCATIONS $ 4543 /END BADXYZ. /ROUTINE TO WRITE AN ASSAIGNED DATA FIELD /ONTO U0 OR DISK. RESETS WBN TO NEXT /AVAILABLE BN AND RESETS QN TO 4. WTAP, LDA 0 STC WTAPX AXO /STD TAPE OPR I 12 WBN, 0 CLR ADD KP1001 LAM WBN BCL I 6000 SAE I 200 SKP JMP FULLU0 CLR ADD WBN APO JMP WBN-1 BSE I 4000 STC WBN WTAPX, 0 /END WTAPX. NOFIND, LIF 4 MESOUT MMISS /FILE NOT FOUND JMP BEG /RESTART PROG /END NOFIND. FULLU0, LIF 4 MESOUT MFULL /U0 OR DISK FULL JMP 20 /END FULLU0. /PASS2: BRINGS IN DATA FROM U0 OR DISK /INTO DF6+7. STRIPS INTO QN4+5 OF DF2.STORES /IT SEQUENTIALLY WITH XY LOCATIONS IN A /NUMFILE. EACH NUMFILE REPRESENTS ONE PLOT /OR ONE INSTANT IN TIME. EACH NUMFILE HAS /THE SAME POINT IN TIME FROM EACH OLD /INPUT FILE. PASS2, LDF 2 /FRST USE HDR BFR STRG LDA NUMOUT /NUM OUTFILES OR /NUMBER OF PTS\OLDFILE BUT ON DISK. COM STC MNPTS LDA P20 /NUM INFILES COM STC MFILES SET I 11 MNPTS, 0 /-PTS\OLDSEG ON DISK LDA I 2000 STC PNTR /INTL DF7 START PNTR /REENTRY POINT FOR NEXT POINT FOR ALL FILES. MRPTS, SET I 2 2000 /STRG PNTR, DF2 LDA I 4140 STC RBN /INITIALIZE U0 OR /DISK START BN JMP LOAD67 /LOAD DF6+7 FROM U0 OR DSK SET I 1 XYLOC /XYPNTR SET I 12 P50 /P42+P43 PNTR SET I 7 PNTR, 0 /STRT ADRS,DF 7 SET I 10 MFILES, 0 /- NUM INFILES DF2, LDF 2 SFLOAT 4\1 /X LOC STORE 4\2 /X(N) SFLOAT /Y LOC 4\1 STORE 4\2 /Y(N) DF, 0 /LDF 6 OR 7 SFLOAT 7 /Z LDF 2 FMUL 4\12 /P42(N) FMUL 4\12 /P43(N) FDIV ADSCL STORE 4\2 /Z(N) JMP INC7 /BUMP 7 BY NUMOUT XSK I 10 /ALL INFILES DUN /FOR THIS PT? JMP DF2 /NO JMP FILOUT /YES STOR A NUMFIL /CONTINUE TO DO NEXT PT OF ALL FILES AND /TO SAY WHEN ALL PTS ARE DONE. NXTPT, XSK I 11 /PTS\OLDFILE ON DISK JMP .+4 LIF 4 /ALL PTS,ALL FILES DEASS /ALL DUN JMP BEG LDA /SETUP FOR NEXT PT PNTR /ALL FILES. ADD KP1 STC PNTR JMP MRPTS /END PASS2. /LOADS DF6+7 FROM U0 OR DISK LOAD67, SET 13 0 LDA I LDF 6 STC DF LDF 6 JMP RTAP LDF 7 JMP RTAP JMP 13 /END LOAD67. /ROUTINE TO INCREMENT BETA 7 SO AS TO /PIXK UP THE SAME DATA POINT BUT FROM /THE NEXT FILE. CHECKS FOR END OF ALL /FILES FOR GIVEN DATA PNT. CHECKS FOR END /OF DF7 & IF SO RELOADS DF 6&7. INC7, SET 14 0 LDA /INCRMNT DF6+7 PNTR 7 ADD NUMOUT /NUM OUTFILES OR /NUM PTS\INFILE ON DISK. STC 7 ADD 7 SAGE 4000 /?PAST DF BNDRY JMP 14 /NO,LEAVE BCL I /IF PAST DF END /RESET PNTR 6000 BSE I 2000 STC 7 ADD KP1 /BUMP LDF ADM DF SAE I /IF PAST DF7,RE /LOAD DF 6+7 LDF 10 /END CASE JMP 14 /LEAVE JMP LOAD67 /RELOAD JMP 14 /LEAVE /END INC7. /ROUTINE TO STORE ONE NUMFILE. FILOUT, SET 14 0 /FIRST, SAVE P102 & P103 WHICH HAVE /FILE 14S P42 & P43. LDF 2 LOAD P102 STORE P4214 LOAD P103 STORE P4314 /THEN GET MAX Z,MIN Z, + ABS MAX Z. SET 10 MFILES /-XYZ\NUMFIL OR / -NUM INPUT SYSFILES SET I 7 2000 /XYZ PNTR JMP FPINC7 /GET FIRST Z STORE /LOAD MAX & MIN MAX /FIRST Z VALUE. STORE MIN MRFP, FSUB MAX FAPO JMP TRYMIN /SMALLER,KEEP MAX /NEW VALUE LARGER,REPLACE MAX. LOAD 7 STORE MAX JMP NXT TRYMIN, LOAD 7 FSUB MIN FAPO /LARGER,CURRENT MIN SKP JMP NXT /NEW VALUE SMALLER,REPLACE MIN. LOAD 7 STORE MIN NXT, XSK I 10 /DUN ALL XYZ? SKP JMP DUNFP /YES, LEAVE JMP FPINC7 /GET NEXT Z JMP MRFP /ROUTINE TO INC BETA 7 X 3(FP) & LOAD IN /NEXT Z VALUE. FPINC7, LOAD /INC 2X3 4\7 LOAD 4\7 LOAD 4\7 JMP 0 /STORE MIN & MAX & GET ABS MAX. DUNFP, LDF 2 LOAD MAX STORE P102 /MAX Z FAPO FCOMP STORE MAX /ABS MAX LOAD MIN STORE P103 /MIN Z FAPO JMP .+2 FCOMP FADD MAX FAPO /MAX-MIN JMP .+4 LOAD MAX JMP .+3 LOAD MIN STORE P43 /ABS MAX Z VALUE /NOW SETUP STORAGE WORDS AND NAME. LDF 4 LDA I 7102 STA WORD1 /PBLOCK LDA I 4302 STA WORD2 /DATA LDA FNAM STA FILNAM LDA FNUM STA FILNAM+1 ADD KP1 STC FNUM LDF 2 LDA /FIRST SAVE P20 P20 STA I SAVP20, 0 /NOW STORE FILE ON OUTUNIT. FILIT, LIF 4 MSTORIT JMP DMF /FULL /RESTORE P102 & P103 WITH P42&43, FILE 14. /ALSO RESTORE P20. LDF 2 /FILE STORED LOAD P4214 STORE P102 LOAD P4314 STORE P103 ADD SAVP20 STA P20 JMP 14 /LEAVE P4214, 0 0 0 P4314, 0 0 0 /TAPE FULL HANDLER. DMF, LIF 4 INTRACT CJMF MCOLN /: CJMF, TMF JMF TMF, NEXT GO 0 JMF, JMP BEG /CR JMP FILIT /NEXT JMP FILIT /GO JMP DMF /?NUM /END FILOUT. /READS DATA FROM DISK OR U0 FILLING UP /ONE ENTIRE DF. USED TO FILL DF6+7. RTAP, LDA 0 STC RTPX AXO /STD TAPE OPR 12 /RDC,DRDE RBN, 0 /QN,BN CLR LDA I KP1001, 1001 LAM RBN APO JMP RBN-1 /DO MORE BSE I /DONE,RESET QN KP4000, 4000 STC RBN RTPX, 0 /LEAVE /END RTAP. /MESSAGES. M3, TEXT %PTS TO AVERAGE: % MNAM, TEXT %SNUMTOP % 4543 MMISS, TEXT %FILE NOT FOUND% 4543 MFULL, TEXT %U0 OR DISK FULL % 4543 M7, TEXT %FIRST OUTNAME:% MCOLN, 7240 /SUBROUTINE SAGE DOES SKIP IF VALUE /IN AC IS GREATER OR EQUAL TO CONTENTS OF P+1. /DOES NOT DESTROY AC, DF, OR BETA REGISTERS. SAGE=JMP . STC SAGEX+1 /SAVE AC ADD 1 STC SAGEX+3 /SAVE BETA 1 SET 1 0 ADD 1 STA SAGEX+2 /ORIG RTRN JUMP BCL I 6000 STC 1 /NOW COMPARE VALUES. LDA 1 COM ADD SAGEX+1 AZE I JMP .+7 /EQUAL APO I /NOT EQUAL JMP .+5 /GRTR CLR /LESS /NOW SET UP RETURN JUMPS. ADD SAGEX+2 ADD KP1 JMP .+4 CLR ADD SAGEX+2 ADD KP2 STC SAGEX SET 1 /RESTORE BETA 1 SAGEX+3 ADD SAGEX+1 /RESTORE AC SAGEX, 0 /LEAVE, RTRN JUMP 0 /AC 0 /ORIG RTRN JMP 0 /BETA 1 MIN, 0 0 0 MAX, 0 0 0 ADSCL, 10 3770 0 /255(10) KP2, 2 KM1, -1 /END SAGE. AAEND, 0 /END PROGRAM CODING. /PBLOCK FOLLOWS. NOLIST //PBLOCK /PARAMETER BLOCK ASSIGNMENTS / P0=3400 /DATA TYPE P1=3401 /FP FORMAT P17=3417 /NO.SAMP IN SEG P20=3420 /NO.SEG IN ENSM P21=3421 /NO. ENSEMBLES P22=3422 / P23=3423 /BASELINE PNTS / /FLOATING POINT VARIABLES / / P42=3442 /MULT FACTOR P43=3445 /UV PER VOLT P44=3450 /SEG. LENGTH P46=3456 /BASELINE DELAY P50=3464 /BNDA1 MIN P51=3467 /BNDA1 MAX P102=3602 P103=3605 / /COMMAND DECODER ASSIGNMENTS / / STOP=JMP 20 SCAN=JMP 21 STRSCN=JMP 21 INUNIT=JMP 22 STORIT=JMP 23 GETFIL=JMP 24 GETFST=JMP 24 GETNAM=JMP 25 GETNXT=JMP 25 DIRINI=JMP 26 DIRLST=JMP 27 ASSIGN=JMP 30 DEASS=JMP 31 OUTUNIT=JMP 32 LODBLK=JMP 33 RUNBLK=JMP 34 FIND=JMP 35 CALL=JMP 37 UNCALL=JMP 40 RUNPRG=JMP 41 INTRACT=JMP 42 MESOUT=JMP 43 DISK=JMP 44 TABSET=JMP 45 INTABLE=JMP 46 MISSNG=JMP 47 TABGET=JMP 50 TABPUT=JMP 51 TABZER=JMP 52 MAKDIL=JMP 53 TABINI=JMP 54 MGETNAM=JMP 55 MGETFIL=JMP 56 MSTORIT=JMP 57 / /COMMAND LOCATIONS. / FILNAM=2320 WORD1=2323 WORD2=2324 INBUF=2325 /COMMAND NUMBERS. YES=17 NO=20 SAMPL=21 TABLE=22 GO=23 NEXT=24 ALL=27 A=31 B=32 E=35 /EXEC3 ASSIGNMENTS / OPR=500 IOF=6002 ION=6001 EXC=1710 REXC=540 RLSW=514 RRSW=515 /FLOATING POINT DEFINITIONS. / FAC=0 STARTE=740 FSUB=741 FMUL=742 FDIV=743 LOAD=744 STORE=745 SETWRD=746 INPUT=747 OUTPUT=750 ISTOR1=751 SQRT=752 DFLOAT=753 SFLOAT=754 FIX=755 FADD=756 ISTOR2=757 STARTF=760 FCOMP=761 FZER=762 FAPO=763 FAZE=764 RECIP=765 LIST ///END SNUMTOP /JAN 76 /FHD