;BLKDSP.LIT
;
;
;4/24/84 STEVEN G. MCNAUGHTON & RICH EAKIN
; QUAKER STATE OIL CORP. RESEARCH CENTER
;
; THIS PROGRAM IS DESIGNED FOR THE AMOS/L SYSTEM.
;
; ***********************************************************************
; * *
; * Format for use is BLKDSP <DSKn:> BLOCK *
; * *
; * If no device is enter the users log in device is defaulted. *
; * *
; * *
; * Enter numbers according to the current terminal attributes (either *
; * octal or hex). If Hex is set and the number being entered begins *
; * with a character A thru F; then that number must be proceeded with *
; * a zero (0). *
; * *
; ***********************************************************************
; ***********************************************************************
; * BLOCK DISPLAY COMMAND LIST *
; ***********************************************************************
; * *
; * ^T (CNTRL T) - Scroll display to next page *
; * *
; * ^R (CNTRL R) - Scroll display to previous page *
; * *
; * ^H (CNTRL H) - Word outline left one word *
; * Left arrow - " " " " " *
; * *
; * ^L (CNTRL L) - Word outline right one word *
; * Right arrow - " " " " " *
; * *
; * ^J (CNTRL J) - Word outline down one line *
; * Down arrow - " " " " " *
; * *
; * ^K (CNTRL K) - Word outline up one line *
; * Up arrow - " " " " " *
; * *
; * Q - Quit (exit editor - does not rewrite updates to disk) *
; * *
; ***********************************************************************
; ***********************************************************************
; * Program Development and Edit History *
; ***********************************************************************
; 100. - BASIC BLOCK PRINT TO TERMINAL [SGM]
; 101. - UPGRADED PAGE FLIP AND EXIT ROUTINE [SGM]
; 102. - ADDED WORD POSITIONING AND OUTLINING ROUTINE [SGM]
; 103. - ADDED INSTANT TRANSLATION ROUTINE [SGM]
; 104. - UPGRADED INSTANT TRANSLATION TO INCLUDE DECIMAL WORD TRANSLATION [SGM]
; 105. - ADDED VERSION AND MODULE LOADING DISPLAY [SGM]
; 106. - ADDED LONGWORD TRANSLATION ROUTINE [SGM]
; 107. - UPGRADED INPUT - ALL INPUT ON COMMAND LINE [SGM]
; 108. - HEX VERSUS OCTAL FORMAT DISPLAY UPGRADE [SGM]
; 109. - CORRECTED BLOCK NUMBER RANGE CHECK FOR DEVICES WITH OVER 32K
; BYTES PER DISK [SGM] 5/18/84
; ***********************************************************************
TOP:
GETIMP IMPSIZ,A5,EXIT ;GET SOME IMPURE SPACE
JOBIDX A3
MOVW JOBTYP(A3),D1
ANDW #J.HEX,D1
BEQ OCTPTH
;DEFINE HEX SCREEN FORMAT
HEXPTH:
MOVB #1,D5 ;QUICK STORAGE FOR DSPFLG
BR RESPRG
;DEFINE OCTAL SCREEN FORMAT
OCTPTH:
MOVB #0,D5 ;QUICK STORAGE FOR DSPFLG
RESPRG:
MOVW #177435,D1 ;CURSOR OFF
TCRT
CLRW D1
CTRLC EXIT
LEA A3,PAGENO
MOVW #1,(A3)
MOV A2,D2
LEA A3,ASCBUF ;A3 POINTS TO ASCII BUFFER SPACE
BYP ;BYPASS ANY BLANKS ON COMMAND LINE
LIN ;END OF LINE?
JEQ CERROR ;YES ! *ERROR* ALL INFO ON COMMAND LINE
NUMCHK:
CTRLC EXIT
NUM ;IS THE FIRST CHAR NUMERIC?
JEQ INPBLK ;YES ! GET THE BLOCK NUMBER
INLINE: ;NO ! GET THE DEVICE AND DRIVE INFO NOW
CTRLC EXIT
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 PCKIT ;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 PCKIT ;YES - GO PACK THE DEV AND DRV
;*ERROR* DEV AND DRV MUST END IN COLON
SUB #2,A2
JMP CERROR
PCKIT:
CTRLC EXIT
ADD #1,A2 ;MOVE TO NEXT BYTE ON COMMAND LINE
BYP ;BYPASS ANY BLANKS
LIN ;END OF LINE?
JEQ CERROR ;YES ! - *ERROR* ALL INFO ON COMMAND LINE
NUM ;IS THIS CHARACTER NUMERIC?
JNE CERROR ;*ERROR* - THIS MUST BE A NUMBER!
CLR D1 ;CLEAR OUT ANY JUNK
GTOCT ;GET AN OCTAL NUMBER FROM THE COMMAND LINE
LEA A3,BLOCK ;STORE THAT OCTAL NUMBER IN THE BLOCK
MOVW D1,(A3) ; TO BE SEARCHED AREA
GOPCK:
CTRLC EXIT
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)
BR INITDB ;
INPBLK:
CTRLC EXIT
CLR D1 ;GET THE BLOCK - DSK MUST HAVE BEEN
GTOCT ;DEFAULTED TO GET HERE!
LEA A3,BLOCK ;STORE THE BLOCK NUMBER
MOVW D1,(A3)
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
CTRLC EXIT
MOVW #177400,D1
TCRT
CLR D1
MOVB #1,D1
LSLW D1,#10
MOVB #68.,D1
TCRT
TYPE <Page>
CLRW D1
MOVB #1,D1
LSLW D1,#10
MOVB #73.,D1
TCRT
LEA A3,PAGENO
MOVW (A3),D1
DCVT 2,OT$TRM
MOVW #177402,D1
TCRT
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 <Block Display of:>
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
TYPE <:>
JMP PUTBLK
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
TYPE <:>
CLR D1
PUTBLK:
CLR D1
LEA A1,BLOCK ;GET THE BLOCK NUMBER
MOVW (A1),D1
OCVT 6,OT$TRM ;CONVERT TO OCTAL AND TYPE IT
CRLF
CTRLC EXIT
GETMFD:
CLR D1
MOV IDDB+D.DVR(A5),A3 ;GET THE DISK DRIVER ADDRESS
MOV 24(A3),D2 ;GET THE TOTAL NUMBER OF BLOCKS/DISK
SUB #1,D2 ;SUB 1 - BLOCK ZERO IS FIRST BLOCK
LEA A3,BLOCK ;GET THE INPUTED BLOCK NUMBER
MOVW (A3),D1
CMP D1,D2 ;IS THE INPUTED BLOCK LESS THAN BLOCK [109]
BLOS GOMFD ; PER DISK?
BIGERR: TYPECR <?Block number specified is too large for this device>
CLR D1 ;CLEAR THE OUTPUT REGISTER FOR EXIT
JMP EXIT
GOMFD:
CTRLC EXIT
JOBIDX A3
MOV JOBTRM(A3),A0
ORW #3,(A0) ;SET FORCED IMAGE MODE NO ECHO
LEA A1,IDDB+D.REC(A5) ;LOAD BLOCK AREA IN DDB
MOV D1,(A1)
READ IDDB(A5) ;READ THE BLOCK
CTRLC EXIT
PBLK:
CTRLC EXIT
MOV IDDB+D.BUF(A5),A1 ;ADDRESS THE READ BUFFER AREA
CLR D1
MOVB #3,D1
LSLW D1,#10
MOVB #1,D1
TCRT
MOVW #177412,D1
TCRT
MOV #0,D0
MOV #0,D2
MOV D0,D1
PLP:
MOV A1,A3 ;SAVE START OF LINE
CTRLC EXIT
OCVT 3,OT$TRM
TYPE <:>
SPACE 1,ARG2
PLP1:
CLR D1
MOVW (A1)+,D1
TSTB D5
BNE HEX1
OCT1: OCVT <WDSPC+2>,OT$TRM
BR CON1
HEX1: OCVT WDSPC,OT$TRM