Google
 

Trailing-Edge - PDP-10 Archives - decus_20tap5_198111 - decus/20-0137/reccnv/reccnv.mac
There are 2 other files named reccnv.mac in the archive. Click here to see a list.
;THIS PROGRAM WAS WRITTEN AT WESTERN MICHIGAN UNIVERSITY.
;
	TITLE RECCNV VERSION 1

	SUBTTL PARAMETERS, AC ASIGNS, MEM ASIGNS, ETC.

	EXTERN .JBFF
;	EXTERN USAGE	;IN NGLIB

MESSA:	ASCIZ/
WMU RECORD CONVERSION PROGRAM
/

;PROGRAMMED BY RUSSELL R. BARR - 26 JAN 1973
;	20 DEC 74 - R. BARR - DATE75 PATCHES

	;AC ASSIGNMENTS

FLAGS=7
OUTCLK=10
INCLK=11
NIRCK=12
NORCK=13
LNOUTK=14

	;PARAMETERS

BLANK=40	;40 IS A BLANK

	;MEMORY ASSIGNMENTS

BUFSIZ:	0
INCL:	0
OUTCL:	0
NIRC:	0
NORC:	0
BUFMAJ:	0	;LENGTH OF SET OF OUT RECS
BUFMIN:	0	;NO. OF CHR SO FAR
LNOUT:	0
WORD:	0
RENFLG:	0
	BLKSIZ:	0	;FILLED BY PROG
STFLG:	1	;NO RESTART
IB:	BLOCK 3
ZERO:	BLOCK 4
TMPFIL:	SIXBIT/RECCNV/
	SIXBIT/TMP/
	BLOCK 2
NAME:	ASCIZ/RECCNV/

	;BYTE POINTERS

PNT:	POINT 7,0
OPNT:	POINT 7,0
WPNT:	POINT 6,WORD

	;FLAG ASSIGNMENTS

BMTFLG=1	;RH
LNCFLG=2	;RH
DOTSEN=1	;LH
LBKSEN=2	;LH
	SUBTTL START OF MAIN PROGRAM

START:	RESET
	MOVEI 0,200
	MOVEM 0,BLKSIZ
	SOSGE STFLG
	JRST NOSTRT	;CANT RESTART
	TTCALL 3,MESSA
;	JSA 16,USAGE
;	EXP NAME
INTAX: RETA:	TTCALL 3,MESS4
	MOVEI INFIL
	JSA 16,GTFILE
	JRST INTAX	;ERROR RETURN
	JRST .+5
INFIL:	BLOCK 4
	INIT 0,0
	SIXBIT/DSK/
	XWD IB
	JRST NITERR
	INBUF 0,2
	LOOKUP 0,INFIL
	JRST CANTFI
	HRRZ 0,.JBFF
	HRRM 0,PNT
	ADDI 0,201	;SLOP FOR ZERLUP
	HRRM 0,OPNT
	SOJ 0,
	HRRM 0,OUTLST
OUTTAX: RETB:	TTCALL 3,MESS5
	MOVEI OUTFIL
	JSA 16,GTFILE
	JRST OUTTAX	;ERROR RETURN
	MOVE 0,OUTFIL
	CAME 0,INFIL
	JRST NOREN
	HRRZ 1,OUTFIL+1
	HRRZS INFIL+1
	CAME 1,INFIL+1
	JRST NOREN
	EXCH 0,TMPFIL
	EXCH 1,TMPFIL+1
	SETOM RENFLG
	JRST .+5
OUTFIL:	BLOCK 4
NOREN:	INIT 1,16
	SIXBIT/DSK/
	0
	JRST NITERR
	ENTER 1,OUTFIL
	JRST CANTFO
	MOVE 0,OUTFIL+5
	DEVCHR 0,
	TLNE 0,100	;DECTAPE?
	SOS BLKSIZ	;YES - 177 WORD BUFFERS
SIZTRY:	TTCALL 3,MESS1
	JSA 16,INPTTY
	MOVEM 1,INCL
	TTCALL 3,MESS2
	JSA 16,INPTTY
	MOVEM 1,NIRC	;NO OF INPUT RECS PER
	JSA 16,INPTTY
	MOVEM 1,NORC	;	OUTPUT RECS
	TTCALL 3,MESS3
	JSA 16,INPTTY
	MOVEM 1,LNOUT
	SUBTTL CORE ALLOCATION

	MOVE 0,NIRC
ADDT:	IMUL 0,INCL
	MOVE 1,NORC
	IMUL 1,LNOUT
	MOVEM 1,LNOUTA
	SKIPA
LNOUTA:	0
	CAMLE 0,1
	JRST MATHER
	IDIV 0,NORC
	CAIE 1,
	AOJ 0,
	MOVEM 0,OUTCL
	MOVE 0,LNOUT
	ADDI 0,2
	MOVEM 0,BUFMAJ
	CAILE 0,^D4096	;NO. OF CHRS/OUT REC
	JRST TOOBIG
	IDIVI 0,5
	IDIV 0,BLKSIZ
	CAIE 1,
	AOJ 0,
	IMUL 0,BLKSIZ	;ROUNDED UP WORDS/OUT REC
	HRRM 0,BUFSIZ
	MOVN 2,0
	HRLM 2,OUTLST	;1ST PART
	HRRZ 1,.JBFF
	CAMGE 0,BLKSIZ
	JRST COREOK	;NO STRETCH NEEDED
	HRRM 1,PNT	;LINE POINTER
	ADD 1,0	;LINE

	AOJ 1,		;SLOP FOR ZERLUP
	HRRM 1,OPNT	;OLINE POINTER
	HRRM 1,OUTLST	;OTHER PART
	SOS OUTLST	;ADR-1, REMEMBER?
	ADD 1,0	;OLINE
	AOJ 1,		;SLOP FOR ZERLUP
	CORE 1,		;STRETCH IT
	JRST NOCORE	;OOOPS - ERROR RETURN
	SUBTTL RECORD CONVERSION

COREOK:	MOVE 3,OPNT
	TRZ FLAGS,BMTFLG!LNCFLG
	SETZM BUFMIN
RECST:	SETZB 0,
NINREC:	MOVE 2,PNT
	SETZB LNOUTK,NIRCK
CRL:	CAILE 0,	;CLR ONLY ON CRLF
	SETZ 0,
	SETZB INCLK,NORCK
INCHRS:	CAIN 0,
	JSA 16,INPCHR
	CAIN 0,
	TRZ FLAGS,LNCFLG
	TRNE FLAGS,BMTFLG	;0 IF BUF NOT MT OR AT START
	JUMPL 0,THTSAL
	TRNE FLAGS,LNCFLG	;0 IF LINE NOT COMPLETE OR START
	JUMPL 0,ZERLUP
	TRZ FLAGS,LNCFLG!BMTFLG
	CAILE 0,
	TRO FLAGS,LNCFLG
	CAML INCLK,INCL
	JRST NEWREC
	CAIE 0,		;BLANKS FOR EOF OR CRLF
	MOVEI 1,BLANK
	IDPB 1,2
	AOJ INCLK,
	AOJ LNOUTK,
	JRST INCHRS
NEWREC:	CAIN 0,
	JRST INCHRS
	AOJ NIRCK,
	CAMGE NIRCK,NIRC
	JRST CRL
FILLER:	CAML LNOUTK,LNOUTA
	JRST OUTREC
	MOVEI 1,BLANK
	IDPB 1,2
	AOJA LNOUTK,FILLER
OUTREC:	MOVE 2,PNT
NOUTRC:	SETZ OUTCLK,
MOROUT:	CAML OUTCLK,OUTCL
	JRST BLKS
	ILDB 1,2
	IDPB 1,3
	AOJ OUTCLK,
	JRST MOROUT
BLKS:	CAML OUTCLK,LNOUT
	JRST SPILL
	MOVEI 1,BLANK
	IDPB 1,3
	AOJ OUTCLK,
	JRST BLKS
	SUBTTL OUTPUT PART OF REC CONV

SPILL:	MOVEI 1,15
	IDPB 1,3
	MOVEI 1,12
	IDPB 1,3
	AOJ NORCK,
	MOVE 6,BUFMIN	;NO IN SO FAR
	ADD 6,BUFMAJ	;HOW MANY THIS TIME
	MOVEM 6,BUFMIN	;NO NOW TOTAL
	ADD 6,BUFMAJ	;PROJECTED
	MOVE 4,BUFSIZ
	IMULI 4,5
	CAMG 6,4
	JRST NOUREC
ZERLUP:	SETZ 6,
	MOVEI 1,5
	IDPB 6,3
	SOJG 1,.-1
	HRLZ 1,3
	SETZM @3
	AOJ 3,
	HRR 1,3
	HRRZ 6,OPNT
	ADD 6,BUFSIZ
	BLT 1,-1(6)
	JSA 16,BLKOUT
	SETZM BUFMIN
	MOVE 3,OPNT
	TRO FLAGS,BMTFLG	;MEANS BUFFER EMPTY
NOUREC:	CAMGE NORCK,NORC
	JRST NOUTRC
	JUMPGE 0,RECST
	TRNN FLAGS,BMTFLG
	JRST ZERLUP
THTSAL:	SKIPL RENFLG
	JRST ALLDON
	RENAME 0,ZERO
	JRST RENERR
	RENAME 1,TMPFIL
	JRST RENERR
	CLOSE 0,
	RELEAS 0,
ALLDON:	CLOSE 1,
	RELEAS 1,
	EXIT
	SUBTTL FILE NAME INPUT ROUTINE

GTFILE:	0
	HRRZS FLAGS	;L H FOR GETFILE AND GETWRD
	MOVEM 0,4
	SETZM	2(4)
SEMBLE:	JSA 16,GTWORD
	CAIE 0,":"
	JRST UNCOL
	MOVEM 1,5(4)
	JRST SEMBLE
UNCOL:	CAIE 0,"."
	JRST UNDOT
	MOVEM 1,(4)
	TLO FLAGS,DOTSEN
	JRST SEMBLE
UNDOT:	CAIE 0,"["
	JRST UNLBK
	TLO FLAGS,LBKSEN
	TLNE FLAGS,DOTSEN
	HLLZM	1,1(4)
	TLNN FLAGS,DOTSEN
	MOVEM 1,(4)
	JRST GETOCT
UNLBK:	CAIE 0,12
	JRST SYNTAX
	TLNE FLAGS,DOTSEN
	HLLZM	1,1(4)
	TLNN FLAGS,DOTSEN
	MOVEM 1,(4)
	JRA 16,1(16)		;NORMAL RETURN
SYNTAX:	TTCALL 3,[ASCIZ/
?SYNTAX ERROR/]
	JRA 16,(16)		;ERROR RETURN
GETOCT:	MOVEI 2,6
	SETZ 1,
INOTHR:	TTCALL 4,0
	CAIN 0,"]"
	JRST INOTHR
	CAIN 0,15
	JRST GETBAK
	CAIN 0,","
	JRST PGN
	CAIL 0,"0"
	CAILE 0,"7"
	JRST SYNTAX
	SOJL 2,INOTHR
	SUBI 0,60
	LSH 1,3
	ADD 1,0
	JRST INOTHR
PGN:	HRLZM 1,3(4)
	JRST GETOCT
GETBAK:	TTCALL 4,0
	HRRM 1,3(4)
	JRA 16,1(16)	;NORMAL RETURN
	SUBTTL WORD INPUT SUBROUTINE

GTWORD:	0
	MOVEI 2,6
	MOVE 3,WPNT
	SETZM WORD
GETMO:	TTCALL 4,0
	CAIL 0,"0"
	CAILE 0,"Z"
	JRST DELIM
	CAILE 0,"9"
	CAIL 0,"A"
	JRST LEGCHR
DELIM:	MOVE 1,WORD
	CAIN 0,15
	TTCALL 4,0
	JRA 16,(16)
LEGCHR:	SOJL 2,GETMO
	SUBI 0,40
	IDPB 0,3
	JRST GETMO
	SUBTTL IO ROUTINES

INPTTY:	0
RETINP:	SETZ 1,
INTLP:	TTCALL 4,0
	CAIL "0"
	CAILE "9"
	JRST WRAPIT
	IMULI 1,12
	SUBI 0,60
	ADD 1,0
	JRST INTLP
WRAPIT:	CAIN ","
	JRA 16,(16)
	CAIN 15
	TTCALL 4,0
	CAIN 12
	JRA 16,(16)
	CLRBFI
	TTCALL 3,[ASCIZ/
?ILLEGAL CHARACTER - RETYPE LINE
/]
	JRST RETINP

INPCHR:	0
	SETZ 0,	;ZER HAS ERR CODE 1 HAS CHR
GET:	SOSGE IB+2
	JRST GETBF
	ILDB 1,IB+1
	JUMPE 1,GET
	CAIN 1,15
	JRST GET
	CAIN 1,12
	AOJ 0,	;1 IN ZER MEANS CRLF
	JRA 16,(16)	;ZER MEANS OK
GETBF:	IN 0,
	JRST GET
	STATZ 0,20000
	SOSA 0	;-1 MEANS EOF

	JRST INERTY
	JRA 16,(16)

BLKOUT:	0
	OUTPUT 1,OUTLST
	STATZ 1,740000
	JRST OUTERR
	JRA 16,(16)
OUTLST:	0	;TO BE FILLED IN AT RUN TIME
	0
SUBTTL MISC MESSAGES

MESS1:	 ASCIZ/
HOW MANY CHARACTERS PER EXISTING RECORD? /
MESS2:	 ASCIZ/
WHAT IS THE RATIO OF EXISTING RECORDS TO NEW  E.G. 2,3 ? /
MESS3:	 ASCIZ/
TOTAL LENGTH OF EACH NEW RECORD? /
MESS4:	ASCIZ/
INPUT? /
MESS5:	ASCIZ/
OUTPUT? /
NITERR:	TTCALL 3,[ASCIZ/
?FATAL INIT ERROR/]
	EXIT
CANTFI:	TTCALL 3,[ASCIZ/
?CANT FIND FILE
/]
	JRST RETA
CANTFO:	TTCALL 3,[ASCIZ/
?FATAL ERROR ON ENTER/]
	EXIT
	JRST RETB
INERTY:	TTCALL 3,[ASCIZ/
?FATAL INPUT ERROR/]
	EXIT
OUTERR:	TTCALL 3,[ASCIZ/
?FATAL OUTPUT ERROR/]
	STATZ 1,400000
	TTCALL 3,[ASCIZ/
?OUTPUT DEVICE WRITE LOCK/]
	STATZ 1,2000
	TTCALL 3,[ASCIZ/
?END OF TAPE ON MTA/]
	STATZ 1,40000
	TTCALL 3,[ASCIZ/
?TAPE FULL ON DTA/]
	EXIT
TOOBIG:	TTCALL 3,[ASCIZ/
?OUTPUT RECORD GREATER THAN 4096 CHARACTERS/]
	EXIT
MATHER:	TTCALL 3,[ASCIZ/
?INPUT RECORDS LENGTH, RATIO OR OUTPUT LENGTH ERROR
/]
	JRST SIZTRY
NOCORE:	TTCALL 3,[ASCIZ/
?NOT ENOUGH CORE AVAILABLE FOR CONVERSION/]
	EXIT
NOSTRT:	TTCALL 3,[ASCIZ/
?NO RESTART - TYPE "RUN"/]
	EXIT
RENERR:	CLOSE 0,
	RELEAS 0,
	CLOSE 1,
	RELEAS 1,
	TTCALL 3,[ASCIZ/
?RENAME FAILURE/]
	EXIT

	END START