PROGRAM KCWUPD C C PROGRAM TO REQUEST KCW FILE UPDATES FROM THE 11/70 C C TO RUN THIS PROGRAM C $ DEFINE KCWLSN MTR700::"""TASK=KCWLSN""" C $ RUN KCWUPD C FTTTTTTTTTTTTTTTT C WHERE: C F - INDICATES THAT THE FILE IS TO BE UPDATED. USE A T IF C THE FILE SHOULD BE STARTED ONLY WITH UPDATES FROM 70. C THE 17 T's INDICATE THAT THE 17 SUBFILES ARE TO BE COPIED. C ANY OF THE SUBFILES CAN BE OMITTED BY SETTING TO F. C C THE SUBFILES ARE: C NO. DATA START STOP REMARKS C 1 SA 11 410 UPDATED 3 TIMES AN HOUR C 2 FT 411 710 C 3 MT 711 810 MIL. FT C 4 FD 811 1210 C 5 DF 1211 1410 C 6 WS 1411 1710 ALSO WST AND FA C 7 WA 1711 1810 C 8 UA 1811 1910 C 9 TR 1911 2210 C 10 TS 2211 2310 C 11 WW 2311 2360 C 12 NO 2361 2460 C 13 CA 2461 2510 C 14 SD 2511 2810 C 15 GN 2811 2848 GENERAL NOTICES ON KCW LINE C 16 ER 2849 2980 UNRECOGNIZED DATA TRANSMISSIONS C 17 FS 2981 3400 FOUS12 AND FOUS80 MESSAGES C C C note: the KCW.DAT file must already exist on the VAX c INTEGER INDXVX(256),INDX70(256),DATA(256),REQ(2,4) LOGICAL*1 NFLAG,FLAGS(17) INTEGER*4 CHAN,ISTAT,SYS$ASSIGN,SYS$QIOW,FSTAT(2) INTEGER INDVAX(5,0:50),IND70(5,0:50) REAL CNAME(2) EQUIVALENCE(INDXVX,INDVAX),(INDX70,IND70) EXTERNAL IO$_READVBLK,IO$_WRITEVBLK,IO$M_INTERRUPT DATA CNAME/'KCWU','PD '/ CALL SETTSK(CNAME) !SET TASK NAME NTOTAL=0 WRITE(6,9) 9 FORMAT(' ENTER COPY FLAGS') READ(5,10) NFLAG,FLAGS 10 FORMAT(18L1) C C OPEN KCW.DAT FILE (CAN NOT USE FMSIO - WRITE SHARE) C 11 OPEN (UNIT=3,NAME='DBA3:[100,100]KCW.DAT;1',TYPE='OLD', 1 ACCESS='DIRECT',ASSOCIATEVARIABLE=IRNEXT,SHARED) READ(3'1) INDXVX C C OPEN (UNIT=4,NAME='KCWLSN',FORM='UNFORMATTED', C 1 ACCESS='SEQUENTIAL') C 100 ISTAT=SYS$ASSIGN('KCWLSN',CHAN,,) IF(.NOT.ISTAT) GO TO 950 !ISTAT TRUE IF NORMAL COMPLETION C C build a request to get index from 70 105 DO 110 I=2,4 REQ(1,I)=0 110 REQ(2,I)=0 REQ(1,1)=1 REQ(2,1)=1 C WRITE(4) REQ !request index IOWRITE=%LOC(IO$_WRITEVBLK)+%LOC(IO$M_INTERRUPT) ISTAT=SYS$QIOW(,%VAL(CHAN),%VAL(IOWRITE), 1 FSTAT,,,REQ,%VAL(16),%VAL(0),,,) IF(.NOT.ISTAT) GO TO 900 C C READ(4) INDX70 !read index back ISTAT=SYS$QIOW(,%VAL(CHAN),%VAL(%LOC(IO$_READVBLK)), 1 FSTAT,,,INDX70,%VAL(512),%VAL(0),,,) IF(.NOT.ISTAT) GO TO 900 !TEST STATUS IF(.NOT.FSTAT(1)) GO TO 900 !TEST STATUS C WRITE(6,6) FSTAT C WRITE(6,1) (INDX70(I),I=1,85) IF(.NOT.NFLAG) GO TO 190 WRITE(3'1) INDX70 !USE 11/70 CURRENT POSITION READ(3'1)INDXVX !AS THE VAX STARTING POINT NFLAG=.FALSE. c C TEST TO SEE IF ANY THING TO DO C 190 IF(INDXVX(1).EQ.INDX70(1)) GO TO 300 !TEST BLOCK WRITTEN COUNTER C C CHECK EACH OF THE SUBFILES C DO 200 I=1,17 IF(.NOT.FLAGS(I)) GO TO 200 !SKIP IF FALSE IWRAP=IND70(5,I)-INDVAX(5,I) !TEST WRAP COUNTER FOR IF(IWRAP.LT.0) IWRAP=IWRAP+10000 !NEED TO UPDATE ENTIRE IF(IWRAP.GT.1) GO TO 140 !FILE IF((INDVAX(3,I).EQ.IND70(3,I)).AND. 1 (INDVAX(4,I).EQ.IND70(4,I))) GO TO 200 !skip if pointers the same C BUILD A REQUEST REQ(1,1)=INDVAX(3,I) REQ(2,1)=IND70(3,I)-INDVAX(3,I)+1 REQ(1,2)=0 REQ(2,2)=0 IF(REQ(2,1).GT.0) GO TO 150 C CORRECT FOR WRAP REQ(2,1)=IND70(2,I)-INDVAX(3,I)+1 REQ(1,2)=IND70(1,I) REQ(2,2)=IND70(3,I)-IND70(1,I)+1 GO TO 150 140 REQ(1,1)=IND70(1,I) REQ(2,1)=IND70(2,I)-IND70(1,I)+1 REQ(1,2)=0 REQ(2,2)=0 150 NCNT=REQ(2,1)+REQ(2,2) C WRITE(6,2) REQ C WRITE(4) REQ ISTAT=SYS$QIOW(,%VAL(CHAN),%VAL(IOWRITE), 1 FSTAT,,,REQ,%VAL(16),%VAL(0),,,) IF(.NOT.ISTAT) GO TO 900 NREC=REQ(1,1) DO 160 J=1,NCNT C READ(4) DATA ISTAT=SYS$QIOW(,%VAL(CHAN),%VAL(%LOC(IO$_READVBLK)), 1 FSTAT,,,DATA,%VAL(512),%VAL(0),,,) IF(.NOT.ISTAT) GO TO 900 !TEST STATUS IF(.NOT.FSTAT(1)) GO TO 900 !TEST STATUS IF(NREC.GT.3450) GO TO 850 WRITE(3'NREC) DATA !WRITE RECORD NREC=NREC+1 IF(NREC.LE.IND70(2,I)) GO TO 160 NREC=IND70(1,I) INDVAX(5,I)=IND70(5,I) 160 CONTINUE C C UPDATE INDEX POINTERS FOR THIS SUBFILE C DO 170 J=1,5 170 INDVAX(J,I)=IND70(J,I) WRITE(3'1) INDVAX NTOTAL=NTOTAL+NCNT !COUNT RECORDS READ 200 CONTINUE C WRITE(6,201) NTOTAL 201 FORMAT(' ',I6,' RECORDS COPIED') IF(NTOTAL.EQ.0) GO TO 300 NTOTAL=0 GO TO 105 C C WAIT 15 SECONDS BEFORE CONTINUING C 300 CALL WAIT(15,1,MSTAT) GO TO 105 C C CLOSE WITH ERROR MESSAGE C 850 WRITE(6,851) NREC 851 FORMAT(' INVALID RECORD NUMBER -',I5) STOP 900 CALL PRINTMSG(ISTAT) WRITE(6,5) FSTAT 5 FORMAT(' FSTAT='2Z17) CALL PRINTMSG(FSTAT(1)) CALL WAIT(60,1,MSTAT) GO TO 100 950 CALL PRINTMSG(ISTAT) STOP END