FTN4,L
      PROGRAM VERIF(3,80),24999-16248 REV.1938 790921 
      INTEGER CLIST(125),AGAIN,DBEOF
      DIMENSION IDCB1(144),IDCB2(144),IBUF1(128),IBUF2(128) 
      DIMENSION IP(5),NAME1(9),NAME2(9) 
      DIMENSION INF1(6),INF2(6),MCR(3),MTYPE(5) 
      COMMON IBUF1,IBUF2
      EQUIVALENCE (IP(1),LUI),(IP(2),LUO),(NAME1(4),INF1),
     $(NAME2(4),INF2),(IP(3),IDBUG),(IP(4),DBEOF) 
C 
      DATA MCR/2H O,2HN ,2HCR/,MTYPE/2H T,2HYP,2HE ,2HIS,2H  /
C 
      CALL RMPAR(IP)
      IF(LUI.EQ.0) LUI = 1
      IF(LUO.EQ.0) LUO = LUI
      IREC = 0
      IANS = 0
      ITERR = 0 
      WRITE(LUI,2)
   2  FORMAT(" /VERIF: REV 1938"/)
C 
  5   CALL FNAME(NAME1,ISC,ICR,LUI,ITYPE) 
C 
      IF(NAME1 .GT. 77B)GO TO 20
C 
      IF(NAME1 .LE. 0)GO TO 999 
      CALL DCBDM(IDCB1,NAME1,ITYPE) 
      NAME1(3) = KCVT(NAME1)
      NAME1(1) = 2HLU 
      NAME1(2) = 2H # 
      DO 10 I=1,5 
      INF1(I) = MTYPE(I)
  10  CONTINUE
      INF1(6) = ITYPE 
      IF(ITYPE .EQ. 0)ITYPE = 2HAS
      GO TO 30
C 
 20   IF(NAME1 .EQ. 2H::)GO TO 999
      CALL OPEN(IDCB1,IERR,NAME1,1,ISC,ICR) 
      IF(IFMGR(IERR,8,LUI,NAME1))5,22 
   22 IF(ICR .NE. 0)GO TO 25
C 
C  OPEN THE FILE AND CHECK ITS TYPE & CARTRIDGE.
C 
      CALL LOCF(IDCB1,IDUM,IDUM,IDUM,IDUM,IDUM,JLU) 
      CALL FSTAT(CLIST) 
      DO 24 JK=1,31 
      JJ = (JK-1)*4 + 1 
      IF(JLU.NE.CLIST(JJ))GO TO 24
      ICR = CLIST (JJ + 2)
      GO TO 25
  24  CONTINUE
C 
  25  DO 35 I=1,3 
      INF1(I) = MCR(I)
  35  CONTINUE
      CALL CNUMD(ICR,INF1(4)) 
C 
  30  IF(IANS .EQ. 2HYE)GO TO 60
  31  CALL FNAME(NAME2,ISC,ICR,LUI,ITYPE) 
C 
      IF(NAME2 .GT. 77B)GO TO 50
C 
      IF(NAME2 .LE. 0)GO TO 999 
      CALL DCBDM(IDCB2,NAME2,ITYPE) 
      NAME2(3) = KCVT(NAME2)
      NAME2(1) = 2HLU 
      NAME2(2) = 2H # 
      DO 40 I=1,5 
      INF2(I) = MTYPE(I)
  40  CONTINUE
      INF2(6) = ITYPE 
      IF(ITYPE .EQ.0)ITYPE = 2HAS 
      GO TO 60
C 
  50  IF(NAME2 .EQ. 2H::)GO TO 999
      CALL OPEN(IDCB2,IERR,NAME2,1,ISC,ICR) 
      IF(IFMGR(IERR,8,LUI,NAME2))30,52
  52  IF(ICR .NE.0)GO TO 55 
C 
C  OPEN THE FILE AND CHECK ITS TYPE & CARTRIDGE.
C 
      CALL LOCF(IDCB2,IDUM,IDUM,IDUM,IDUM,IDUM,JLU) 
      CALL FSTAT(CLIST) 
      DO 54 JK=1,31 
      JJ = (JK-1)*4 + 1 
      IF(JLU.NE.CLIST(JJ))GO TO 54
      ICR = CLIST (JJ + 2)
      GO TO 55
  54  CONTINUE
C 
  55  DO 56 I=1,3 
      INF2(I) = MCR(I)
  56  CONTINUE
      CALL CNUMD(ICR,INF2(4)) 
C 
  60  IF(IANS .EQ. 2HYE .AND. LEN2 .EQ. -1)GO TO 65 
      CALL READF(IDCB1,IERR,IBUF1,128,LEN1) 
      IF(IERR .NE. -12)GO TO 62 
      LEN1 = -1 
      GO TO 64
62    IF(IFMGR(IERR,11,LUI,NAME1))999,64
   64 IF(LEN1 .EQ. 0)GO TO 60 
      IF(IANS .EQ. 2HYE)GO TO 68
C 
  65  CALL READF(IDCB2,IERR,IBUF2,128,LEN2) 
      IF(IERR .NE. -12)GO TO 66 
      LEN2 = -1 
      GO TO 67
 66   IF(IFMGR(IERR,11,LUI,NAME2))999,67
   67 IF(LEN2 .EQ. 0)GO TO 65 
      IF(IANS .EQ. 2HYE)GO TO 68
      IREC = IREC +1
   68 IANS = 0
      IF(IFBRK(IDUM))999,70 
C 
  70  IF(LEN1.NE.LEN2) GO TO 700
C 
      IF(LEN1)200,80,80 
C 
  80  NDERR = 0 
      IEOF = 0
      DO 100 I=1,LEN1 
C 
      IF(IBUF1(I).NE.IBUF2(I)) NDERR = NDERR + 1
C 
  100 CONTINUE
      IF(NDERR .NE.0)GO TO 800
      GO TO 60
C 
 200  IFILE = IFILE + 1 
      IF(ITERR.EQ.0)GO TO 490 
      WRITE(LUI,220)NAME1,NAME2,ITERR 
      IF(LUI.NE.LUO)WRITE(LUO,220)NAME1,NAME2,ITERR 
  220 FORMAT(" /VERIF:  ",9A2," IS DIFFERENT FROM"/ 
     $                10X,9A2," IN ",I5," RECORDS.")
      IF(DBEOF.NE.0)WRITE(LUI,230)IFILE 
 230  FORMAT(" FILE # ",I5) 
      GO TO 999 
  490 IF(DBEOF.EQ.0)GO TO 495 
      IF(IEOF .EQ. 1)GO TO 495
      WRITE(LUI,230)IFILE 
      IEOF = 1
      GO TO 60
  495 WRITE(LUI,500)
  500 FORMAT(/" COMPARE GOOD")
      GO TO 999 
C 
  700 IEOF = 0
      IF(LEN1 .NE. -1) GO TO 760
      ASSIGN 5 TO AGAIN 
      IF(LUI.NE.LUO)WRITE(LUO,740)NAME1 
      WRITE(LUI,740)NAME1 
      WRITE(LUI,742)
  740 FORMAT(/" /VERIF:  EOF READ ON ",9A2) 
  742 FORMAT(" CONTINUE COMPARISON ? _")
  745 READ(LUI,750)IANS 
  750 FORMAT(A2)
      IF(IANS .EQ. 2HYE)GO TO AGAIN 
      IF(DBEOF .NE. 0)GO TO 999 
      GO TO 200 
  760 IF(LEN2 .NE. -1)GO TO 770 
      ASSIGN 31 TO AGAIN
      IF(LUI.NE.LUO)WRITE(LUO,740)NAME2 
      WRITE(LUI,740)NAME2 
      WRITE(LUI,742)
      GO TO 745 
  770 WRITE(LUI,515)IREC,NAME1,LEN1,NAME2,LEN2
      IF(LUI.NE.LUO)WRITE(LUO,515)IREC,NAME1,LEN1,NAME2,LEN2
  515 FORMAT(" /VERIF:      RECORD LENGTH UNEQUAL, RECORD #",I5,
     1/2(/1X,9A2,"  LENGTH = ",I3)/)
      IF(IDBUG .NE. 0)CALL DMPAL(NAME1,NAME2,LEN1,LEN2,LUO) 
      ITERR = ITERR + 1 
      GO TO 60
C 
  800 WRITE(LUI,520)NDERR,IREC
      IF(LUI.NE.LUO)WRITE(LUO,520)NDERR,IREC
  520 FORMAT(" /VERIF:  "I5" DATA COMPARE ERRORS, RECORD #",I5/)
      IF(IDBUG .NE. 0)CALL DMPAL(NAME1,NAME2,LEN1,LEN2,LUO) 
      ITERR = ITERR + 1 
      GO TO 60
C 
  999 IF(NAME1 .GT. 77B)CALL CLOSE(IDCB1) 
      IF(NAME2 .GT. 77B)CALL CLOSE(IDCB2) 
      END 
      SUBROUTINE FNAME(NAME,ISC,ICR,LUI,ITYP) 
      INTEGER PBUF(4,8),IPBUF(33) 
      DIMENSION IBUF(10),IREG(2),NAME(3)
      EQUIVALENCE (IB,IREG(2)),(X,IREG),(PBUF,IPBUF)
      DATA IBUF/10*2H  /
C 
C 
      WRITE(LUI,500)
  500 FORMAT("FILE NAME OR LU,(FORMAT) _")
      X = REIO(1,LUI+400B,IBUF,-20) 
      IF(IBUF.EQ.2H::)GO TO 999 
      CALL COMMA(IBUF,IB) 
      CALL PARSE(IBUF,IB,PBUF)
  999 DO 20 J=1,3 
      NAME(J)=PBUF(J+1,1) 
   20 CONTINUE
C 
C  IF LU IS SPECIFIED SET SECOND PARAM. TO TYPE FORMAT
C 
      IF(PBUF .EQ. 2) GO TO 50
      ITYP = PBUF(2,2)
      RETURN
C 
C FILE SPECIFIED SO, SET THE SECURITY CODE AND CARTRIDGE #
C 
   50 ISC = PBUF(2,2) 
      ICR = PBUF(2,3) 
      RETURN
      END 
      SUBROUTINE DCBDM(IDCB,LU,ITYPE) 
      DIMENSION IDCB(144) 
C 
C CLEAR THE DCB TO ZEROES.
C 
      DO 10 I=1,144 
  10  IDCB(I) = 0 
C 
C WHAT TYPE OF DEVICE IS THIS DCB FOR ? 
C 
      CALL EXEC(13,LU,IDEV) 
C 
      IDEV = IAND(IDEV,37400B)/256
C 
      IF(IDEV.EQ.0) GO TO 100 
      IF(IDEV.EQ.1) GO TO 200 
      IF(IDEV.EQ.5) GO TO 100 
      IF(IDEV.EQ.11B) GO TO 200 
      IF(IDEV.EQ.15B) GO TO 500 
      IF(IDEV.EQ.23B) GO TO 600 
C 
C UNRECOGNIZED DEVICE TYPE
C SET IDCB(1) TO -1 & RETURN TO CALLER. 
C 
      IDCB(1) = -1
      RETURN
C 
C FOR DVR00         CRT 
C 
  100 IDCB(7) = 100001B 
      GO TO 350 
C 
C FOR DVR01         PHOTO READER
C 
  200 IDCB(7) = 100000B 
  350 IDCB(6) = 1 
      IDCB(5) = 1000B + LU
      GO TO 1000
C 
C FOR DVR15         MARK SENSE READR
C 
  500 IDCB(7) = 100000B 
      IDCB(6) = 1 
      IDCB(5) = 100B + LU 
      GO TO 1000
C 
C FOR DVR23         9 TRACK MAG TAPE
C 
  600 IDCB(7) = 100001B 
      IDCB(6) = 100001B 
      IDCB(5) = 100B + LU 
      IDCB(4) = 100B + LU 
      IF(ITYPE .EQ. 0)IDCB(4) = LU
      GO TO 1001
C 
C FINISH THIS SET UP. 
C 
 1000 IDCB(4) = LU
      IF(ITYPE.EQ.2HBA) IDCB(4) = LU + 2300B
      IF(ITYPE.EQ.2HBR) IDCB(4) = LU +  300B
      IF(ITYPE.EQ.2HBN) IDCB(4) = LU +  100B
C 
1001  IDCB(10) = IGET(1717B)
C 
      END 
      SUBROUTINE DMPAL(NAME1,NAME2,LEN1,LEN2,LU)
C   1200 HRS   THU  07 APR 77 
      DIMENSION IBUF1(128),IBUF2(128),NAME1(9),NAME2(9) 
      DIMENSION ITEMP(37),IASC(9) 
      COMMON IBUF1,IBUF2
      EQUIVALENCE (ITEMP(29),IASC)
C 
  1   FORMAT(" ") 
      WRITE(LU,10)NAME1 
 10   FORMAT(1X,9A2/) 
C DUMP RECORD OF NAME1
C 
      DO 773 J=1,LEN1,8 
      L = J + 7 
      IF(L .GT. LEN1)L=LEN1 
C 
      DO 766 K=1,37 
      ITEMP(K) = 20040B 
766   CONTINUE
      CALL CODE 
      WRITE(ITEMP,1766)(IBUF1(K),K=J,L) 
      CALL ASCII(IBUF1(J),8)
      CALL CODE 
      WRITE(IASC,1767)(IBUF1(K),K=J,L)
      WRITE(LU,1768)ITEMP 
 773  CONTINUE
C 
      WRITE(LU,1) 
      WRITE(LU,10)NAME2 
C DUMP RECORD OF NAME2
C 
      DO 883 J=1,LEN2,8 
      L = J + 7 
      IF(L .GT. LEN2)L=LEN2 
C 
      DO 866 K=1,37 
      ITEMP(K) = 20040B 
866   CONTINUE
      CALL CODE 
      WRITE(ITEMP,1766)(IBUF2(K),K=J,L) 
      CALL ASCII(IBUF2(J),8)
      CALL CODE 
      WRITE(IASC,1767)(IBUF2(K),K=J,L)
      WRITE(LU,1768)ITEMP 
 883  CONTINUE
      WRITE(LU,1) 
      RETURN
C 
1766  FORMAT(8(1X,K6))
1767  FORMAT("*",8A2) 
1768  FORMAT(37A2)
      END 
      END$
ASMB,R,L,B,C
      HED ** FILE MANAGER ERROR PROCESSOR **
      NAM IFMGR,7 
      ENT IFMGR 
      EXT EXEC,.ENTR
* 
* THIS FUNCTION CHECKS FOR FILE MANAGER ERRORS.  IF THE ERROR 
* CODE IS < 0, THE ERROR MESSAGE IS PRINTED ON THE SPECIFIED TTY. 
* 
* IF ID IS >= 0, THE ERROR CODE IS RETURNED AS THE FUNCTION VALUE.
* 
* IF ID IS < 0 AND THE ERROR CODE IS < 0, THEN THE PROGRAM IS 
* ABORTED.
* 
* FORTRAN USEAGE EXAMPLE: 
*     IF (IFMGR (IERR,ID,LTTY,NAME)) 100,200
* 
* ASSEMBLY CALLING SEQUENCE 
*     JSB IFMGR 
*     DEF *+4 
*     DEF IERR
*     DEF ID
*     DEF LTTY
*     DEF NAME
*                   ON RETURN A = IERR
* 
* WHERE THE USER SUPPLIED VARIABLES ARE:
* 
* IERR = ERROR PARAMETER RETURNED FROM FILE MANAGER CALL. 
* ID   = CALL IDENTITY CODE (NEGATIVE TO ABORT IF ERROR EXISTS) 
*        1 = APOSN
*        2 = CLOSE
*        3 = CREAT
*        4 = FCONT
*        5 = FSTAT
*        6 = LOCF 
*        7 = NAMF 
*        8 = OPEN 
*        9 = POSNT
*       10 = PURGE
*       11 = READF
*       12 = RWNDF
*       13 = WRITF
* LTTY = LOGICAL UNIT NUMBER OF DEVICE TO LIST ERROR
* NAME = NAME OF FILE THAT HAD ERROR
* 
* PARAMETER ADDRESSES 
* 
IERR  NOP           ERROR CODE
ID    NOP           FILE MANAGER CALL ID
LTTY  NOP           LOGICAL UNIT TO OUTPUT ERROR MESSAGES.
NAME  NOP           NAME OF FILE THAT HAD ERROR 
IFMGR NOP 
      JSB .ENTR     USE .ENTR TO GET
      DEF IERR       ADDRESSES OF PARAMETERS
      LDA IERR,I    GET ERROR CODE
      SSA,RSS       FILE MANAGER ERROR? 
      JMP IFMGR,I   NO,RETURN TO USER 
* 
* ERROR - CONVERT ERROR TO ASCII AND PUT IT INTO OUTPUT BUFFER
* 
      MPY M1        MULTIPLY ERROR BY -1 & THEN 
      DIV .10       DIVIDE BY TEN TO GET TENS DIGIT.
      STA ERROR     SAVE TEMPORARILY
      MPY .10       MULTIPLY BY 10 AND DIVIDE BY
      DIV .1        .1 TO GET TENS VALUE ONLY 
      ADA IERR,I    ADD ERROR CODE,RESULT = - UNITS 
      CMA,INA       MAKE UNITS POSITIVE 
      LDB ERROR     GET TENS DIGIT
      BLF,BLF       ROTATE IT TO HIGH BYTE OF WORD
      IOR B         OR IT WITH UNITS
      IOR ASC00     OR IN ASCII CONSTANT
      STA ERROR     PUT ASCII ERROR CODE IN MSG BUFFER
* 
* ADD CALL ID AND FILE NAME TO BUFFER 
* 
      LDA ID,I      GET ID CODE 
      SSA           IS IT NEGATIVE? 
      CMA,INA       YES - MAKE POSITIVE 
      STA B          IS CODE
      ADB M14         GREATER 
      SSB,RSS         THAN 13?
      CLA           YES - OUTPUT $$$$$ FOR ID 
      STA B         SAVE ERROR CODE 
      ALS           MULTIPLY BY 2 AND 
      ADA B         ADD IT TO ITSELF (X3) 
      ADA CALL      ADD BUFR STARTING ADRS TO OFFSET
      LDB EMES      SET POINTER TO
      STB PNTR      ID NAME 
      CLB           SET FLAG TO INDICATE NAME 
      STB FLAG      BUFFER HAS TO BE TRANSFERRED. 
NFILE LDB M3        SET COUNTER TO
      STB CNTR      TRANSFER 3 WORDS
LOOP  LDB A,I       GET ID WORD & PUT IT
      STB PNTR,I    IN ERROR MESSAGE BUFFER 
      INA           ILNDEX ID AND 
      ISZ PNTR      ERROR MESSAGE POINTERS
      ISZ CNTR      TRANSFER COMPLETE?
      JMP LOOP      NO - TRANSFER NEXT WORD 
      LDB FLAG
      SZB           NAME ARRAY TRANSFERRED? 
      JMP LP1       YES - OUTPUT MESSAGE
      ISZ FLAG      NO - SET FLAG TO SAY YES
      LDA NAME      GET ADDRESS OF ARRAY IN A 
      LDB NAMEB     PUT OUTPUT BUFFER 
      STB PNTR      ADDRESS IN B
      JMP NFILE     TRANSFER FILE NAME
* 
*     PUT IN PROGRAM NAME 
* 
LP1   LDB 1717B 
      ADB .12 
      LDA B,I 
      STA PRGNM 
      INB 
      LDA B,I 
      STA PRGNM+1 
      INB 
      LDA B,I 
      AND M1774 
      IOR COLON 
      STA PRGNM+2 
* 
* OUTPUT ERROR MESSAGE
* 
OUT   JSB EXEC      OUTPUT THE ERROR MESSAGE
      DEF *+5 
      DEF WRITE 
      DEF LTTY,I
      DEF PRGNM 
      DEF M40 
* 
* CHECK FOR ABORT PROGRAM 
* 
      LDA IERR,I    PUT ERROR CODE IN CASE WE RETURN
      LDB ID,I      GET ID CODE 
      SSB,RSS       DO WE ABORT?
      JMP IFMGR,I   NO - RETURN 
* 
* ABORT PROGRAM 
* 
      JSB EXEC      WRITE 
      DEF *+5       "PROGRAM ABORTED!"
      DEF WRITE     ON THE
      DEF LTTY,I    LOCAL TTY 
      DEF ABORT 
      DEF M16 
      JSB EXEC      ASK RTE 
      DEF *+2       TO TERMINATE THE PROGRAM
      DEF .6
* 
* CONSTATNTS, STORAGE ALLOCATION, AND MESSAGES
* 
A     EQU 0         A REGISTER
B     EQU 1         B REGISTER
* 
* CONSTANTS 
* 
COLON OCT 72
.1    DEC 1 
.6    DEC 6 
.10   DEC 10
.12   DEC 12
M1    DEC -1
M3    DEC -3
M14   DEC -14 
M16   DEC -16 
M40   DEC -40 
M1774 OCT 177400
* 
* MISC. CONSTANTS 
* 
ASC00 ASC 1,00
WRITE DEC 2 
* 
* 
CNTR  NOP           UTILITY COUNTER 
FLAG  NOP           ID/NAME TRANSFER FLAG 
PNTR  NOP           TRANSFER POINTER TO MESSAGE BUFFER
* 
* FILE MANAGER CALLS
* 
CALL  DEF *+1 
      SUP PRESS THE GARBAGE 
      ASC 3,$$$$$ 
ID1   ASC 3,APOSN 
ID2   ASC 3,CLOSE 
ID3   ASC 3,CREAT 
ID4   ASC 3,FCONT 
ID5   ASC 3,FSTAT 
ID6   ASC 3,LOCF
ID7   ASC 3,NAMF
ID8   ASC 3,OPEN
ID9   ASC 3,POSNT 
ID10  ASC 3,PURGE 
ID11  ASC 3,READF 
ID12  ASC 3,RWNDF 
ID13  ASC 3,WRITF 
* 
* ERROR MESSAGE 
* 
PRGNM BSS 3 
      ASC 1,
ERMES BSS 3 
      ASC 4,ERROR - 
ERROR NOP 
      ASC 5, IN FILE
NAM.  BSS 3 
NAMEB DEF NAM.
EMES  DEF ERMES 
* 
* ABORT ERROR MESSAGE 
ABORT ASC 8,PROGRAM ABORTED!
* 
* 
* 
      END 
ASMB,R,B,L,C
      NAM COMMA,7   REV A 751031
* 
*  FRI  31 OCT 75   WRITTEN BY DONALD H. POTTENGER  REV A 
* 
      ENT COMMA 
      EXT .ENTR 
*      THIS SUBROUTINE, GIVEN AN ADDRESS AND LENGTH OF A BUFFER,
*  WILL CHECK FOR IMBEDDED COLONS AND REPLACE THEM WITH COMMAS
*  FOR THE SYSTEM PARSE ROUTINE.  THIS HAS OBVIOUS ADVANTAGES 
*  FOR THE USER WHO IS USED TO USING COLONS AS DELIMITERS AS IN 
*  THE FILE MANAGER NAMR PARAMATERS.
* 
*     THE BUFFER CAN BE ANY LENGTH AND SHOULD SPECIFY 
*  THE NUMBER OF CHARACTERS IN THE BUFFER.
* 
BUFAD NOP           BUFFER ADDRESS
BUFLA NOP           BUFFER LENGTH 
COMMA NOP           WHERE IT ALL BEGINS 
      JSB .ENTR     GO GET THE ADDRESSES
      DEF BUFAD       OF THE PARAMATERS 
      LDA BUFLA,I   HOW ABOUT THE LENGTH? 
      CLE,ERA       IS IT AN ODD CHARACTER COUNT? 
      SEZ           NO,  ITS ALL READY TO GO
      INA           YES, INCREASE THE WORD COUNT BY ONE 
      CMA,INA       LET'S MAKE IT NEG. FOR COUNTING 
      STA BUFL      AND SAVE IT 
      SZA,RSS       IS IT A ZERO LENGTH BUFFER? 
      JMP COMMA,I   WELL GET THE HECK OUT OF HERE THEN. 
START LDA BUFAD,I   ORIGINAL NAME HUH ? 
      STA TEMP      LET'S GET A WORD AND GET ON WITH IT 
      AND M177        HOW ABOUT THE LOW BYTE? 
      CPA LOCOL         A COLON?
      JMP LFIX      YES, GO MAKE IT A COMMA 
PAR1  LDA TEMP      NO, PREPARE TO CONTINUE 
      AND M774      THIS TIME LOOK AT THE HI BYTE 
      CPA HICOL       A COLON?
      JMP HFIX      YES, GO MAKE IT A COMMA 
      JMP TERM1     NO, LETS SAVE WHAT WE HAVE AND GO ON
LFIX  LDA TEMP      GET ORIGINAL WORD 
      ADA M16       MAKE THAT COLON A COMMA 
      STA TEMP        AND SAVE
      JMP PAR1+1    GO CHECK HI BYTE
HFIX  LDA TEMP      GET PRESENT VALUE 
      ADA M7000     MAKE THE HI BYTE COLON A COMMA
      RSS              AND SAVE IN ORIGINAL BUFFER
TERM1 LDA TEMP      LETS GET THE CURRENT VALUE
      STA BUFAD,I     AND SAVE IN ORIGINAL BUFFER 
      ISZ BUFAD     INCREMENT THE BUFFER ADDRESS
      ISZ BUFL      ANY MORE WORDS? 
      JMP START     YES, HERE WE GO AGIAN 
      JMP COMMA,I   NOPE, LETS GET OUT!!
      SKP 
* 
*     CONSTANTS AND STORAGE 
* 
BUFL  NOP 
TEMP  NOP 
M177  OCT 177 
M774  OCT 77400 
LOCOL OCT 72
HICOL OCT 35000 
M16   OCT -16 
M7000 OCT -7000 
      END 
ASMB,R,B,L,C
*   1200 HRS   WED  06 APR 77 
      NAM ASCII,7 MAKES BUFFER LEGEL ASCII CHARACTERS  770406 
* 
      ENT ASCII 
      EXT .ENTR 
* 
BUFR  NOP           ASCII BUFFER
LEN   NOP           LENGTH OF BUFFER
ASCII NOP             ENTRY POINT 
      JSB .ENTR 
      DEF BUFR
      LDA LEN,I     SET UP LOOP 
      CMA,INA         COUNTER 
      STA CNTR
START LDA BUFR,I    GET WORD FROM THE BUFFER
      AND B177            MASK FOR RIGHT BYTE 
      STA RBYTE     SAVE
      ADA M40       CHECK FOR LEGEL CHAR. 
      SSA,RSS 
      JMP NEXT      OK, GO CHECK LEFT BYTE
      LDA B40 
      STA RBYTE     SET TO ASCII SPACE
NEXT  LDA BUFR,I    GET CURRENT WORD AGAIN
      AND B7740     MASK FOR HIGH BYTE
      STA LBYTE     SAVE
      ADA M2000     CHECK FOR LEGALITY
      SSA,RSS 
      JMP FIN       OK
      LDA B2000 
      STA LBYTE 
FIN   LDA RBYTE 
      IOR LBYTE 
      STA BUFR,I
      ISZ BUFR
      ISZ CNTR
      JMP START 
      JMP ASCII,I   RETURN
* 
* 
RBYTE NOP 
LBYTE NOP 
CNTR  NOP 
* 
B40   OCT 40
B177  OCT 177 
B2000 OCT 20000 
B7740 OCT 77400 
M40   OCT -40 
M2000 OCT -20000
      END 
                                                                                                                                