.TITLE SRDSUB---SORT DIRECTORY SUBROUTINES .IDENT /V01.1/ .MCALL DIR$ ;+ ;ATTDET---ATTACH/DETACH LISTING DEVICE ; ;THIS ROTINE IS CALLED TO ATTACH OR DETACH THE LISTING DEVICE ;IF THE DEVICE IS RECORD ORIENTED ; ATTDET::MOV (R0)+,LSTQIO+2 ;SET FUNCTION 10$: DIR$ #LSTQIO ;ISSUE REQUEST BCC 20$ ;BR IF A-OK CALL $ALERR ;DIAGNOS ERR BR 10$ ;RETRY IF RETRYABLE 20$: RTS R0 ;RETURN ; ;CNVDAT---CONVERT DATE FROM STRING TO MONOTONICALLY INCREASING ; BINARY INTEGER. ; ; MONTHS: .ASCII \JAN\<-1>\FEB\<-1>\MAR\<-1>\APR\<-1>\MAY\<-1>\JUN\<-1> .ASCII \JUL\<-1>\AUG\<-1>\SEP\<-1>\OCT\<-1>\NOV\<-1>\DEC\<-1> .BYTE 0 .EVEN CNVDAT:: JSR R5,$SAVRG ;SAVE REGS 3,4,5 CALL CNV2 ;CONVERT TO BINARY MOV R2,-(SP) ;SAVE THAT MUCH BEQ 50$ ;MUST BE SOMETING CMPB #'-,(R1)+ ;SKIP SEPARATOR BEQ 10$ ;BR IF SEPARATOR DEC R1 ;BACK UP 10$: MOV #MONTHS,R4 ;LIST OF ALL MONTHS 20$: MOV R1,R3 ;COPY ADDRESS OF MONTH NAME 30$: CMPB (R3)+,(R4)+ ;SAME? BEQ 30$ ;BR AS LONG AS YES TSTB -1(R4) ;END OF MONTH BMI 60$ ;YES-FOUND IT ADD #31.,(SP) ;NO ADD IN A MONTH'S WORTH OF DAYS 40$: TSTB (R4)+ ;LOOK FOR NEXT MONTH BGT 40$ ;BR IF NOT END TSTB (R4) ;END OF LIST? BNE 20$ ;BR IF NO 50$: FERR BADD ;BAD DATE FORMAT 60$: MOV R3,R1 ;COPY PLACE IN INPUT STRING CMPB -(R1),#'- ;SEPARATOR? BNE 70$ ; INC R1 ;BACK UP 70$: CALL CNV2 ;GET YEAR SUB #70.,R2 ;ADJ TO REL 1970 BMI 50$ ;BR IF BAD SWAB R2 ;MULT X 256 ASL R2 ;2 MORE = 512 ADD (SP)+,R2 ;FIND TOTAL DATE RETURN CNV2: CLR R2 ;INIT ACCUMULATOR MOV #2,R5 ;SET MAX CHARS TO CONVERT 10$: ;+++002 CMPB (R1),#' ;IGNORE SPACES ;+++002 BNE 15$ ;+++002 INC R1 ;+++002 BR 17$ ;+++002 15$: CMPB (R1),#'0 ;CHECK FOR RANGE BLO 20$ ;BR IF OUT CMPB (R1),#'9 ;CHECK OTHER END BHI 20$ ;BR IF OUT CLR -(SP) ;GET A ZERO MOVB (R1)+,(SP) ;GET THE VALUE SUB #'0,(SP) ;REMOVE ASCII BIAS ASL R2 ;MULT PREVIOUS ADD R2,(SP) ;SAVE TIME 2 RESULT ASL R2 ;X 4 ASL R2 ;X 8 ADD (SP)+,R2 ;FINAL RESULT OLD X 10 + NEW 17$: ;+++002 SOB R5,10$ ;LOOP? 20$: RETURN ; ;STRING MATCHING ROUTINE ; * - MATCHES ANY STRING (MAY BE NULL) OF CHARACTERS ; ? - MATCHES ANY SINGLE CHARACTER ; ALL OTHER CHARACTERS ARE EXPLICITLY MATCHED ; ;INPUTS ; R1 - STRING TO BE MATCHED ; R2 - STRING MATCH FORMAT STRING ; R3 - FIELD TERMINATOR CHARACTER POINTER ; MATCHI:: MOV R4,-(SP) MOV R5,-(SP) CLR R5 ;INIT BACKUP MARKER ;+++002 MATCH: CMPB #40,(R1)+ ;SKIP BLANKS BEQ MATCH DEC R1 TSTB (R2) ;END OF MATCH STRING? ;+++002 BEQ 20$ ;EQ - YES WE HAVE A MATCH ;+++002 CMPB #'*,(R2)+ ;WILD STRING CHARACTER? ;+++002 BNE 1$ ;NE - NO ;+++002 MOV R2,R5 ;YES - SAVE BACKUP MARKER MOV R1,R4 BR MATCH 1$: CMPB (R1),(R3) ;IS THIS FIELD TERMINATOR ;+++002 BEQ 10$ ;EQ - YES, MATCH ;+++002 CMPB #'?,-(R2) ;IS THIS WILD CARD CHARACTER ;+++002 BNE 5$ ;NE - NO ;+++002 CMPB (R1)+,(R2)+ ;ADVANCE FOR ? ;+++002 BR MATCH ;+++002 5$: CMPB (R2)+,(R1)+ ;IS THIS A SELECTED ITEM ;+++002 BEQ MATCH ;EQ - YES ;+++002 6$: INC R4 MOV R4,R1 MOV R5,R2 ;TRY BACKUP ;+++002 BNE MATCH ;NE - THERE IS ONE ;+++002 10$: ;+++002 MOV (SP)+,R5 ;FAILURE ;+++002 MOV (SP)+,R4 SEC ;INDICATE NO MATCH RETURN 20$: CMPB (R1),(R3) ;IS THIS FIELD TERMINATOR ;+++002 BEQ 25$ ;EQ - YES, MATCH ;+++002 CMPB #'*,-1(R2) ;IS THERE A * TO EAT REST OF STRING BNE 6$ ;NE - TRY TO EXTEND LAST * 25$: MOV (SP)+,R5 ;SUCCESS MOV (SP)+,R4 CLC ;INDICATE MATCH RETURN .END