;BLKEDT.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 BLKEDT <DSKn:> BLOCK *
; * *
; * If no device is enter the users log in device is defaulted. *
; * *
; * The user must be logged into a [1,2] account to run BLKEDT. *
; * *
; * 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 EDITOR 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 - " " " " " *
; * *
; * SPACE BAR - Flip between MSB and LSB edit mode. *
; * *
; * #nnn (pound sign) - Input to editor (byte mode is defaulted) *
PAGE
; * *
; * #Bnnn - Input a byte to editor (byte mode is defaulted) *
; * *
; * #Wnnnnn - Input a word to editor *
; * *
; * #Lnnnnnnn - Input a long word to editor *
; * *
; * #'x (pound aspostrophe) - Input one ascii byte character *
; * *
; * #[ (pound left bracket) - Input and pack up to 3 ascii characters *
; * *
; * . (period) - follows editor input number to indicate decimal input *
; * *
; * Del Key - Erases editor command line *
; * *
; * Q - Quit (exit editor - does not rewrite updates to disk) *
; * *
; * F - Finished (exit editor - rewrite updated block to disk) *
; * *
; ***********************************************************************
; * Valid RAD 50 Characters *
; * a - z *
; * A - Z *
; * 0 - 9 *
; * . (period) *
; * $ (dollar sign) *
; * % (percent sign) *
; * *
; ***********************************************************************
; ***********************************************************************
; * 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. - ADDED MSB/LSB OUTLINE FOR EDITING ROUTINE [SGM]
; 108. - ADDED EDIT INPUT ROUTINE [SGM]
; 109. - ADDED WRITE UPDATED BLOCK TO DISK ROUTINE [SGM]
; 110. - REMOVED VERSION AND MODULE LOADING DISPLAY [SGM]
; 111. - UPGRADED LONGWORD EDIT ROUTINE - UPDATES DISPLAY - NO AUTOMATIC LONG-
PAGE
; WORD TRANSLATION ROUTINE [SGM]
; 112. - ADDED ROUTINE TO UPDATE RIGHT HAND ASCII DISPLAY UPON EDIT [SGM]
; 113. - HEX VERSUS OCTAL FORMAT DISPLAY UPGRADE [SGM]
; 114. - 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
PAGE
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
PAGE
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)+
PAGE
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 Edit 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
PAGE
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 [114]
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