;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. SEARCH SYS SEARCH SYSSYM SEARCH TRM.UNV .OFINI .OFDEF IDDB,D.DDB ;DUMMY FILE DDB .OFDEF ODDB,D.DDB ;OUTPUT FILE DDB .OFSIZ IMPSIZ VMAJOR=1. VMINOR=1. VSUB=1. VEDIT=103. HEADER: PHDR -1,PV$RSM!PV$WSM,PH$REE!PH$REU 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 GOMFD: JOBIDX A3 MOV JOBTRM(A3),A0 ORW #1,(A0) ;SET FORCED IMAGE MODE LEA A1,IDDB+D.REC(A5) ;LOAD BLOCK AREA IN DDB MOV D1,(A1) READ IDDB(A5) ;READ THE BLOCK CTRLC EXIT MOV IDDB+D.BUF(A5),A1 CLR D1 MOVW 772(A1),D1 LEA A3,BLKLNK MOVW D1,(A3) LEA A3,PASKEY MOVW (A3),D1 TSTW D1 BEQ PRTBLK MOVW #0,(A3) ;CLEAR PASSKEY JMP OUTDO PRTBLK: TYPE <Printing output file> CRLF CLR D1 MOVB #15,D1 FILOTB ODDB(A5) MOVB #12,D1 FILOTB ODDB(A5) CLRB D1 LEA A2,ODDB(A5) OUTSP OT$DDB,<Dump of MFD:> 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 HEDDUN: CLR D1 MOVB #15,D1 FILOTB ODDB(A5) MOVB #12,D1 FILOTB ODDB(A5) FILOTB ODDB(A5) ;PRINT 2 LINE FEEDS OUTSP OT$DDB,< PPN> MOVB #9.,D1 FILOTB ODDB(A5) ;PRINT 2 TABS FILOTB ODDB(A5) OUTSP OT$DDB,< LINK> MOVB #15,D1 FILOTB ODDB(A5) MOVB #12,D1 FILOTB ODDB(A5) FILOTB ODDB(A5) ;PRINT 2 LINE FEEDS OUTDO: CTRLC EXIT MOV IDDB+D.BUF(A5),A1 ;ADDRESS THE READ BUFFER AREA LEA A2,ODDB(A5) CLR D1 PRTLP: CTRLC EXIT CLR D1 CLR D2 MOVB 1(A1),D1 OCVT 0,OT$DDB MOVB #44.,D1 FILOTB ODDB(A5) MOVW (A1)+,D2 MOVB D2,D1 OCVT 0,OT$DDB MOVB #9.,D1 FILOTB ODDB(A5) ;PRINT 2 TABS FILOTB ODDB(A5) PRTLP1: CTRLC EXIT CLR D1 MOVW (A1)+,D1 OCVT 6,OT$DDB CLR D1 MOVB #15,D1 FILOTB ODDB(A5) MOVB #12,D1 FILOTB ODDB(A5) CLRB D1 ADD #4,A1 MOVW (A1),D1 TSTW D1 CTRLC EXIT BEQ DUNPRT JMP PRTLP DUNPRT: CLR D1 LEA A3,BLKLNK MOVW (A3),D1 LEA A2,ODDB(A5) OUTSP OT$DDB,<NEXT LINK IN MFD IS:> OCVT 6,OT$DDB TSTW D1 BEQ ALLDUN SAVE D1 CLR D1 MOVB #15,D1 FILOTB ODDB(A5) MOVB #12,D1 FILOTB ODDB(A5) LEA A3,PASKEY MOVW #1,(A3) CLRW D1 REST D1 JMP GOMFD ALLDUN: CLR D1 MOVB #15,D1 FILOTB ODDB(A5) MOVB #12,D1 FILOTB ODDB(A5) MOVW #177402,D1 TCRT MOVW #177411,D1 TCRT TYPE <Output file completed.> PBLK: JMP EXIT BLOCK: BLKB 4 ;STORAGE FOR THE INPUT BLOCK NUMBER (103) SCRAT: BLKB 6 ;SCRATCH AREA JBDEV: BLKB 2 ;JOB DEVICE STORAGE JBDRV: BLKB 2 ;JOB DRIVE STORAGE ASCBUF: BLKB 4 ;ASCII BUFFER INDEV: BLKB 6 INDRV: BLKB 2 BLKBUF: BLKB 8. OPDEV: BLKB 2 OPDRV: BLKB 2 BLKLNK: BLKB 2 PASKEY: BLKB 2 STATUS: BLKB 2 CERROR: CLR D1 MOV A2,D1 SUB D2,D1 MOV D1,D2 ADD #10,D2 CLR D1 ELOOP: TST D2 BEQ PERROR MOVB #40,D1 TTY SUB #1,D2 BR ELOOP PERROR: CLR D1 MOVB #'^,D1 TTY TYPECR <Specification error> CRLF BR FINI EXIT: CRLF CLR D1 MOVB #15,D1 FILOTB ODDB(A5) MOVB #12,D1 FILOTB ODDB(A5) CLOSE ODDB(A5) FINI: LEA A3,STATUS CLR D1 MOVW (A3),D1 JOBIDX A3 LEA A0,2(A3) MOVW D1,(A0) EXIT END