SUBROUTINE WMOVIT (INPUT,INKT) C C C C AUTHOR: C PAUL D. CLAYTON C REPUBLIC MANAGEMENT SYSTEMS INC. C ONE NESHAMINY INTERPLEX, SUITE 306 C TREVOSE, PA. 19044 C C ******************************************************* C * * C * * C * * C * DIRECT INQUIRIES TO: * C * * C * PAUL D. CLAYTON * C * REPUBLIC MANAGEMENT SYSTEMS * C * ONE NESHAMINY INTERPLEX, SUITE 306 * C * TREVOSE, PA. 19044 C * * C * NO WARRANTY OR REPRESENTATION, EXPRESS OR * C * IMPLIED, IS MADE WITH RESPECT TO THE * C * CORRECTNESS, COMPLETENESS, OR USEFULNESS * C * OF THIS SOFTWARE, NOR THAT USE OF THIS * C * SOFTWARE MIGHT NOT INFRINGE PRIVATELY * C * OWNED RIGHTS. * C * * C * NO LIABILITY IS ASSUMED WITH RESPECT TO * C * THE USE OF, OR FOR DAMAGES RESULTING FROM * C * THE USE OF THIS SOFTWARE * C * * C ******************************************************* C * * C * THIS SOFTWARE WAS DESIGNED FOR USE ON A * C * PDP-11/70 OPERATING UNDER IAS V3.0. * C * * C ******************************************************* C C C THIS ROUTINE HAS THE JOB OF PLACING THE DATA IN THE BUFFER AND C WRITING IT OUT TO THE MAG TAPE IF A 512 BYTE BOUNDARY IS C PASSED. THE MAG TAPE LOGICAL UNIT NO. IS PASSED IN THE C PARAMETER 'MAGLU'. C C BYTE INPUT(1) !INPUT DATA BUFFER INCLUDE 'RT11.COM' !COMMON STORAGE VARIABLES C D WRITE (5,1) D 1 FORMAT (1X,'ENTERING SUBROUTINE MOVIT') C C C FIRST CHECK IF WE WANT TO FLUSH THE BUFFER. LENGTH OF WRITE IS IN C IN THE PARAMETER 'CURKT'. C INKT=0 TO SIGNAL THIS C IF ( INKT .NE. 0 ) GOTO 25 CURKT = (CURKT-1) + MOD(CURKT-1,2)*2 D WRITE (5,5) CURKT D 5 FORMAT (1X,'CURKT IN FLUSH MODULE = ',I6) CALL WRTAPE (MAGLU,BUFF,CURKT,ISTAT,ISW) IF ( ISTAT(1).LT.0 .OR. ISW.LT.0 ) GOTO 1000 !ERROR- BOMB OUT CURKT = 1 BLKKT = BLKKT + 1 !UPDATE THE COUNTER DO 10 I=1,512 10 BUFF(I) = "00 !CLEAR THE BUFFER RETURN C C NEXT CHECK TO SEE IF WE DUMP A DATA BUFFER TO MAG TAPE. LENGTH OF C WRITE IS 512 BYTES. C INKT=-1 TO SIGNAL THIS C 25 CONTINUE IF ( INKT .NE. -1 ) GOTO 50 DO 28 I=CURKT,512 BUFF(I) = "00 !CLEAR REST OF BUFFER 28 CONTINUE CALL WRTAPE (MAGLU,BUFF,512,ISTAT,ISW) !DUMP FULL BUFFER D WRITE (5,29)ISTAT(1),ISTAT(2) D29 FORMAT (1X,'ISTAT 1 = ',O6,' ISTAT 2 = ',O6) IF ( ISTAT(1).LT.0 .OR. ISW.LT.0 ) GOTO 1000 BLKKT = BLKKT + 1 CURKT = 1 DO 30 I=1,512 30 BUFF(I) = "00 !CLEAR THE BUFFER RETURN C C GET HERE IF DATA GOES IN BUFFER C 50 CONTINUE IF (CURKT+INKT .GT. 512 ) GOTO 200 DO 100 I=1,INKT BUFF(CURKT+I-1) = INPUT(I) !MOVE THE CHARACTER IN 100 CONTINUE CURKT = CURKT + INKT !UPDATE THE BUFFER POINTER D WRITE (5,110)CURKT,BLKKT,(BUFF(I),I=1,512) D110 FORMAT (1X,2I5,(/,1X,75A1)) RETURN C C C 200 CONTINUE ITMP = 512 - CURKT + 1 !GET THE CHARS. LEFT IN BUFFER DO 220 I=1,ITMP BUFF(CURKT+I-1) = INPUT(I) !MOVE DATA IN 220 CONTINUE CALL WRTAPE (MAGLU,BUFF,512,ISTAT,ISW) !WRITE BUFFER TO MAGTAPE IF ( ISTAT(1).LT.0 .OR. ISW.LT.0 ) GOTO 1000 DO 222 I=1,512 222 BUFF(I) = "00 !CLEAR THE BUFFER CURKT = 1 !RESET BUFFER POINTER DO 230 I=ITMP+1,INKT BUFF(CURKT) = INPUT(I) CURKT = CURKT + 1 !UPDATE THE BUFFER POINTER 230 CONTINUE BLKKT = BLKKT + 1 !UPDATE THE BLOCK COUNTER RETURN C C THE ERROR RETURN FOR PROBLEMS WITH THE MAG TAPE IS AS FOLLOWS C 1000 CONTINUE WRITE (5,1010)ISW,ISTAT(1),ISTAT(2) 1010 FORMAT (1X,'ERROR WITH MAG TAPE I/O. THE ISW CONTAINS ',I6, - ' AND ISTAT(1) = ',O6,' ISTAT(2) = ',O6) CALL DTTAPE (MAGLU) ! DETACH THE TAPE UNIT CALL EXIT ! STOP THE PROGRAM END