;************************************************
;* TSLBOJ.M68 (JOBLST spelled backwards)
;*
;* Scans the system and prints every defined
;* JOB to the screen "backwards" from last
;* JOB to the first using the STACK.
;*
;* Usage: TSLBOJ
;*
;* by Dave Heyliger - AMUS Staff
;************************************************
OBJNAM TSLBOJ.LIT ;Define the final product
SEARCH SYS ;Grab all MACRO definitions
SEARCH SYSSYM
SEARCH TRM
;--- The following will define a 'version number' that will be displayed
; when you do a DIR/V JOBLST.LIT. These numbers are 'made-up' by the
; programmer, and can be changed when the code is changed.
;
VMAJOR=1. ;Major version number of the program
VMINOR=0. ;Minor version number of the program
VEDIT=100. ;the edit number of the program
;--- This small portion of the code reserves a little memory space in YOUR
; memory partition for a variable I called "BUFFER".
;
.OFINI ;OFfset INItialization:
.OFDEF BUFFER,7. ;OFfset DEFinition - "BUFFER"
.OFSIZ IMPSIZ ;IMPSIZ is the final size of bytes (7)
;--- Start the program with a header, and also get the size of our memory
; buffer - the 7 bytes where byte "0" is the 1st byte of 7 in "BUFFER".
;
PHDR -1,0,PH$REE!PH$REU ;Program is Re-entrant & Re-useable
GETIMP IMPSIZ,A5 ;Reg. A5 now ^'s to byte "0" of BUFFER
;--- Now get the ADDRESS of the start of the JOB table and plop it into A0
;
GETTBL: MOV JOBTBL,A0 ;Get base of JOB TABLE into A0
;--- Mark the Top of Stack (TOS) with a "-1"
;
MOV #-1.,A1 ;a "-1" will be a marker for TOS
PUSH A1 ;PUSH our marker onto the STACK
;--- Now for each JCB address, PUSH this address onto the STACK
;
STACK: MOV (A0)+,A4 ;and let A4 point to each JBC
MOV A4,D0 ;this will set the flags 2 B checked
BMI OUTPUT ;end of the JOB TABLE on a "-1"
BEQ STACK ;get the next JCB if zero
PUSH A4 ;else PUSH the JCB address
JMP STACK ;and do it again for the next JCB
;--- The following loop will 1) POP each JCB address into register A4
; 2) Check to see if we are at TOS
; 3) If NOT, print the JOBNAME to the screen
; 4) and get the next JCB address from stack
;
OUTPUT: POP A4 ;get the next value off the STACK
MOV A4,D0 ;sets the flags
BMI EXIT ;if it is a "-1" then time to quit
LEA A1,JOBNAM(A4) ;else ^ A1 to the start of a JOB name
LEA A2,BUFFER(A5) ;and ^ A2 to byte "0" of "BUFFER"
UNPACK ;Find the ASCII letters in JOBNAM
UNPACK ; ...for up to 6 digits
CLRB @A2 ;Place a "null" after the characters
LEA A2,BUFFER(A5) ;Repoint A2 to byte "0" of "BUFFER"
TTYL @A2 ;Print out all chars until a null
CRLF ;Carriage return & line feed
JMP OUTPUT ;Time for the next name in the table
;--- Finally, let the user know you are through
;
EXIT: TYPE <End of "backwards" JOB listing for this system>
CRLF
EXIT ;return to AMOS