.TITLE SRDOPR-OPEN & READ .IDENT /V2.0/ ;2-JUN-76 ;+ ; ;**SRD--SORT DIRECTORY ; ;THIS MODULE OPENS THE UFD AND READS IT INTO MEMORY ; ; ; THIS TASK WILL SORT A RSX11M DIRECTORY ;THEN CREATE A LISTING WITH MANY SELECTION OPTIONS ; ;THIS IS THE MAIN ROUTINE, AND IS PURE. ; ; ++001EDIT TO ZERO BUFFER IF UNUSED DIR ; ++002 EDIT TO CHECK FOR BUFFER BEFOR FIRST READ ; ++003 EDIT TO CLOSE ON ERROR ;- ; ;SYSTEM MACRO CALLS ; .MCALL OFNB$,READ$,WAIT$,CLOSE$ ;++003 ADD CLOSE$ SRDOPR::OFNB$ #UFDFDB ;OPEN THE DIRECTORY BCC 10$ ;THIS SHOULD WORK! FERR OPNI 10$: MOV DIRBF$,F.BKDS+2(R0) ;POINT AT TOP OF BUFFER MOV DIRBF$,-(SP) ;++002 BEGIN OF BUFF ADD #512.,(SP) ;++002 ADD ONE BLOCK CMP (SP)+,DIRBE$ ;++002 ROOM? BLOS 20$ ;++002 ROOM ENOUGH CLOSE$ ;++002 CLOSE FILE FERR 0 ;++002 SAY NOT ENOUGH 20$: READ$ R0 ;READ IT BCS 30$ ;BR IF ABNORMAL RETURN WAIT$ R0 ADD #512.,F.BKDS+2(R0) ;ADVANCE I-O BUFFER PTR MOV F.BKDS+2(R0),-(SP) ;GET START OF BUFFER ADD #512.,(SP) ;FIND END CMP (SP)+,DIRBE$ ;ROOM? BLOS 20$ CLOSE$ ;++003 CLOSE BEFOR LOOPING DIAG 0 30$: CMPB #IE.EOF,F.ERR(R0) ;END-OF FILE??? BNE 35$ ;++001 ERROR IF NOT CMP #1,F.VBN+2(R0) ;++001 LOOK AND SEE IF FIRST BLOCK WAS EOF BEQ 50$ ;++001 YES SO ZERO BUFFER BR 60$ ;NO SO RETURN 35$: FERR REDE ;++001READ ERROR OF INPUT FILE BR 60$ ;++001GO RETURN 50$: MOV R0,-(SP) ;++001 PUSH R0 MOV R1,-(SP) ;++001 PUSH R1 MOV #512.,R0 ;++001 SIZE OF BUFFER MOV DIRBF$,R1 ;++001 START OF BUFFER 55$: CLRB (R1)+ ;++001 CLEAR BYTE SOB R0,55$ ;++001 LOOP MOV (SP)+,R1 ;++001 POP STACK MOV (SP)+,R0 ;++001 AGAIN 60$: RETURN ;++001 .END