;MFDPRT.LIT
;
;
;4/10/84 STEVEN G. MCNAUGHTON & RICH EAKIN
; QUAKER STATE OIL CORP. RESEARCH CENTER
;
; THIS PROGRAM IS DESIGNED FOR THE AMOS/L SYSTEM.
;
;
; EDIT HISTORY
; 100. - BASIC PRINT TO SCREEN [SGM]
; 101. - ADDED OUTPUT SWITCH CAPABILITY [SGM]
; 102. - REMOVED SWITCH TO PRINT - DEFAULTS TO PRINT - NO OPTION [SGM]
; 103. - CHANGED BLOCK COMPARISON TO LONGWORD FOR DRIVES W/ GREATER
; THAN 32K BLOCKS. D. EICHBAUER - MBS DATA SYSTEMS - MERRILL, MI.
TOP:
GETIMP IMPSIZ,A5,EXIT ;GET SOME IMPURE SPACE
JOBIDX A3 ;MAKE SURE JOB IS IN OCTAL
MOVW 2(A3),D1
LEA A0,STATUS
MOVW D1,(A0) ;STORE THE JOBTYP
ANDW #J.HEX,D1
BEQ RESPRG
LEA A0,2(A3)
MOVW (A0),D1
LEA A3,STATUS
MOVW D1,(A3)
ANDW #2757,D1 ;MASK OFF J.HEX BIT
MOVW D1,(A0)
RESPRG: LEA A3,BLOCK
MOV #1,(A3) ; (103)
MOV A2,D2
LEA A3,ASCBUF ;A3 POINTS TO ASCII BUFFER SPACE
BYP ;BYPASS ANY BLANKS ON COMMAND LINE
LIN ;END OF LINE?
JEQ DEFAUL
INLINE: ;NO ! GET THE DEVICE AND DRIVE INFO NOW
MOVB (A2)+,(A3)+ ;FIRST BYTE ON COMMAND LINE TO ASCII BUFFER
MOVB (A2)+,(A3)+ ;SECOND BYTE ON COMMAND LINE
MOVB (A2)+,(A3) ;THIRD BYTE ON COMMAND LINE
LEA A3,INDRV ;LOAD THE DRIVE STORAGE AREA
MOVB (A2)+,(A3)+ ;FOURTH BYTE ON COMMAND LINE TO DRIVE
BYP ;BYPASS ANY BLANKS
LIN ;END OF LINE?
JEQ CERROR ;*ERROR* WHERE'S THE COLON?
MOVB (A2),D1 ;CHECK THE COMMAND LINE FOR A COLON
CMPB D1,#': ;IS IT A COLON (END OF DEV AND DRV)
JEQ GOPCK ;YES ! GO PACK THE DEVICE NAME
MOVB (A2)+,(A3) ;GET FINAL CHARACTER OF DRIVE #
MOVB (A2),D1 ;TEST THE NEXT BYTE ON THE COMMAND LINE
CMPB D1,#': ;IS IT A COLON?
JEQ GOPCK ;YES - GO PACK THE DEV AND DRV
;*ERROR* DEV AND DRV MUST END IN COLON
SUB #2,A2
JMP CERROR
GOPCK:
CLR D1 ;CLEAR OUT ANY JUNK
LEA A2,ASCBUF ;A2 MUST POINT TO ASCII CHARACTERS
LEA A1,INDEV ;PACK AND STORE THE DEVICE NAME
PACK ;
LEA A2,INDRV ;GET THE INPUTED DRIVE NUMBER
GTDEC ;MAKE SURE ITS DECIMAL
LEA A2,INDRV ;PUT IT BACK INTO DRIVE # STORAGE
MOVW D1,(A2)
JMP INITDB ;
DEFAUL:
LEA A3,INDEV ;DEVICE DEFAULT AREA
MOVW #0,(A3) ;MOVE A ZERO FOR DEVICE NAME (FOR IDDB)
LEA A3,INDRV ;MOVE A -1 FOR DRIVE NUMBER (FOR IDDB)
MOVW #-1,(A3)
INITDB: ;SET UP AND INIT A DUMMY IDDB
CLR D1
LEA A2,SCRAT ;LOAD A DUMMY FILESPEC IN
MOV A2,D0
MOVW #377,(A2)+
MOVW #377,(A2)+
MOVW #377,(A2)
MOV D0,A2
FSPEC IDDB(A5) ;PROCESS THE FILESPEC (POINTED BY A2)
LEA A3,IDDB+D.DEV(A5) ;PUT THE PROPER DEVICE NAME IN
LEA A2,INDEV
MOVW (A2),(A3)
LEA A3,IDDB+D.DRV(A5) ;PUT THE PROPER DRIVE NUMBER IN
LEA A2,INDRV
MOVW (A2),(A3)
INIT IDDB(A5) ;INITIALIZE THE IDDB
CTRLC EXIT
CLR D1
TYPESP <MFD print on device:>
LEA A3,IDDB+D.DEV(A5) ;GET THE IDDB'S DEVICE NAME
MOVW (A3),D1 ;MOVE THE PACKED WORD TO D1
TST D1 ;IS IT A ZERO?
BNE UNPCK ;NOPE - GO UNPACK THE WORD
JOBIDX A3 ;DEFAULT DEVICE - DETERMINE LOG IN
LEA A2,JBDEV ; STATUS AND TYPE IT OUT
CLR D1
MOVW JOBDEV(A3),D1 ;GET THE PACKED DEVICE NAME
LEA A1,SCRAT ; AND UNPACK IT
MOVW D1,(A1)
LEA A2,ASCBUF
UNPACK
LEA A2,ASCBUF
TTYL (A2) ;PRINT THE DEFAULT DEVICE NAME
CLR D1
MOVW JOBDRV(A3),D1 ;GET THE DEFAULT DRIVE NUMBER
DCVT 0,OT$TRM ;CONVERT AND TYPE IT
CRLF
CLR D1
JMP ODBCHK
UNPCK:
LEA A1,INDEV ;GET AND UNPACK THE DEVICE NAME
LEA A2,ASCBUF
UNPACK
LEA A2,ASCBUF
MOVB (A2)+,D1 ;PRINT THE DEVICE NAME
TTY
MOVB (A2)+,D1
TTY
MOVB (A2)+,D1
TTY
LEA A2,INDRV ;GET THE DRIVE NUMBER
CLR D1
MOVB (A2),D1
DCVT 0,OT$TRM ;CONVERT AND TYPE IT
CRLF
CLR D1
ODBCHK:
LEA A3,OPDEV ;OUTPUT DEVICE
MOVW #0,(A3) ;DEFAULT DEVICE
LEA A3,OPDRV ;OUTPUT DRIVE
MOVW #-1,(A3)
ODBINI:
LEA A2,BLKBUF
CLR D1
LEA A3,IDDB+D.DEV(A5) ;GET THE IDDB'S DEVICE NAME
MOVW (A3),D1 ;MOVE THE PACKED WORD TO D1
TST D1 ;IS IT A ZERO?
BNE UNPCK2 ;NOPE - GO UNPACK THE WORD
JOBIDX A3 ;DEFAULT DEVICE - DETERMINE LOG IN
LEA A2,JBDEV ; STATUS AND TYPE IT OUT
CLR D1
MOVW JOBDEV(A3),D1 ;GET THE PACKED DEVICE NAME
LEA A1,SCRAT ; AND UNPACK IT
MOVW D1,(A1)
LEA A2,BLKBUF
UNPACK
CLR D1
MOVW JOBDRV(A3),D1 ;GET THE DEFAULT DRIVE NUMBER
DCVT 0,OT$MEM ;CONVERT AND TYPE IT
CLR D1
JMP DOPRT
UNPCK2:
CTRLC EXIT
LEA A1,INDEV ;GET AND UNPACK THE DEVICE NAME
LEA A2,BLKBUF
UNPACK
LEA A3,INDRV ;GET THE DRIVE NUMBER
CLR D1
MOVB (A3),D1
DCVT 0,OT$MEM ;CONVERT AND TYPE IT
DOPRT: CLR D1
LEA A2,BLKBUF
FSPEC ODDB(A5),MFD ;PROCESS THE FILESPEC (POINTED BY A2)
LEA A3,ODDB+D.DEV(A5) ;PUT THE PROPER DEVICE NAME IN
LEA A2,OPDEV
MOVW (A2),(A3)
LEA A3,ODDB+D.DRV(A5) ;PUT THE PROPER DRIVE NUMBER IN
LEA A2,OPDRV
MOVW (A2),(A3)
INIT ODDB(A5) ;INITIALIZE THE IDDB
CTRLC EXIT
CLR D1
TYPESP <MFD print has been initiated on:>
JOBIDX A3 ;DEFAULT DEVICE - DETERMINE LOG IN
LEA A2,JBDEV ; STATUS AND TYPE IT OUT
CLR D1
MOVW JOBDEV(A3),D1 ;GET THE PACKED DEVICE NAME
LEA A1,SCRAT ; AND UNPACK IT
MOVW D1,(A1)
LEA A2,ASCBUF
UNPACK
LEA A2,ASCBUF
TTYL (A2) ;PRINT THE DEFAULT DEVICE NAME
CLR D1
MOVW JOBDRV(A3),D1 ;GET THE DEFAULT DRIVE NUMBER
DCVT 0,OT$TRM ;CONVERT AND TYPE IT
CLR D1
TYPE <:>
PFILE ODDB(A5)
CRLF
LOOKUP ODDB(A5) ;DOES IT ALREADY EXIST?
BNE OPNOP ;NOPE - GO OPEN IT FOR OUTPUT
DSKDEL ODDB(A5) ;YES DELETE THE OLD
OPNOP:
OPENO ODDB(A5) ;OPEN IT FOR OUTPUT
READBL:
CLR D1
MOV IDDB+D.DVR(A5),A3 ;GET THE DISK DRIVER ADDRESS
MOV 24(A3),D2 ;GET THE TOTAL NUMBER OF BLOCKS/DISK
LEA A3,BLOCK ;GET THE INPUTED BLOCK NUMBER
MOV (A3),D1 ; (103)
TST D1 ; (103)
BMI NEGERR
CMP D1,D2 ;IS THE INPUTED BLOCK LESS THAN BLOCK (103)
JLE GOMFD ; PER DISK?
BIGERR: TYPECR <?Block number specified is too large for this device>
JMP EXIT
NEGERR: TYPECR <?Block number specified is a negative octal number>
JMP EXIT
DVPRT: LEA A3,IDDB+D.DEV(A5) ;GET THE IDDB'S DEVICE NAME
MOVW (A3),D1 ;MOVE THE PACKED WORD TO D1
TST D1 ;IS IT A ZERO?
BNE UNPCK3 ;NOPE - GO UNPACK THE WORD
JOBIDX A3 ;DEFAULT DEVICE - DETERMINE LOG IN
LEA A2,JBDEV ; STATUS AND TYPE IT OUT
CLR D1
MOVW JOBDEV(A3),D1 ;GET THE PACKED DEVICE NAME
LEA A1,SCRAT ; AND UNPACK IT
MOVW D1,(A1)
LEA A2,BLKBUF
UNPACK
LEA A1,BLKBUF
LEA A2,ODDB(A5)
CLR D1
MOVB (A1)+,D1
FILOTB ODDB(A5)
MOVB (A1)+,D1
FILOTB ODDB(A5)
MOVB (A1),D1
FILOTB ODDB(A5)
CLRB D1
MOVW JOBDRV(A3),D1 ;GET THE DEFAULT DRIVE NUMBER
DCVT 0,OT$DDB ;CONVERT AND TYPE IT
CRLF
CLR D1
JMP HEDDUN
UNPCK3:
LEA A1,INDEV ;GET AND UNPACK THE DEVICE NAME
LEA A2,ASCBUF
UNPACK
LEA A3,ASCBUF
LEA A2,ODDB(A5)
MOVB (A3)+,D1 ;PRINT THE DEVICE NAME
FILOTB ODDB(A5)
MOVB (A3)+,D1
FILOTB ODDB(A5)
MOVB (A3)+,D1
FILOTB ODDB(A5)
LEA A3,INDRV ;GET THE DRIVE NUMBER
CLR D1
MOVB (A3),D1
DCVT 0,OT$DDB ;CONVERT AND TYPE IT