.TITLE PERSON .MCALL ENTER,LEAVE .MCALL MRKT$,DIR$ .MCALL OPEN$R,CLOSE$,WTSE$S,QIO$ .SBTTL PERSON - FIND ACCOUNT NAME ; ;+ ; ; PERSON - FIND THE ACCOUNT NAME FOR A UIC. ; ; INPUTS: R0 = ADDRESS OF 14. BYTE BUFFER TO HOLD THE ; ACCOUNT NAME. ; R1 = ADDRESS OF 6 BYTE UIC. ; ; OUTPUTS: REGISTERS UNCHANGED ; CARRY CLEAR IFF ACCOUNT WAS FOUND. ; ;- PERSON::ENTER R0,R1,R2,R3,R4,R5 ;SAVE THE WORKS MOV R0,-(SP) ;NEED LATER MOV R1,-(SP) ;NEED NOT QUITE AS LATE CALL OPNACT ;OPEN THE ACCOUNT FILE MOV (SP)+,R1 ;GET BACK UIC ADDRESS BCS 2$ ;OPEN FAILURE CALL SEARCH ;SEARCH ACCOUNT FILE 2$: MOV (SP)+,R1 ;GET BACK BUFFER ADDRESS BCS 100$ ;**ACCOUNT NOT FOUND** ; ADD #A.LNM,R0 ;POINT TO ACCOUNT NAME MOV #14.,R2 ;OF SIZE 1$: MOVB (R0)+,(R1)+ ;AND MOVE IT IN SOB R2,1$ ; CALL EXIT ;WE'RE DONE CLC BR 200$ 100$: CALL ERR 200$: LEAVE RETURN ; ; INSURE THAT THE ACCOUNT FILE IS OPENED. ; OPNACT: CLR OPNERR ; SET NO OPEN ERROR 47$: CALL OPEN ; OPEN ACCOUNT FILE BCC 48$ ; OPEN SUCCESSFUL CMP OPNERR,#5 ; FIVE FAILURES? BLT 472$ ; NO 471$: BR ERR 472$: DIR$ #MKT ; NO, WAIT ONE SECONDS BCS 471$ ; ERROR WTSE$S #1 ; WAIT FOR TIME INC OPNERR ; INCREMENT TIME TRIED BR 47$ ; TRY AGAIN 48$: RETURN .SBTTL ERROR PROCESSING EXIT: TST FILOPN ; IS ACCOUNT FILE OPEN? BEQ 10$ ; NO CLOSE$ #$ACTFL ; YES, CLOSE IT 10$: RETURN ; AND EXIT ; ; ERR: CALL EXIT SEC RETURN .SBTTL >> OPEN - OPEN FILE ;+ ; *** - OPEN - OPEN FILE ; ;- ; A MINOR MODIFICATION WAS REQUIRED ; IN THIS ROUTINE TO ENABLE THE GENERAL ; USER, WHOSE SY: IS NOT NEC. ; DK0:, TO STILL ACCESS THE ACCOUNT FILE. ; OPEN: MOV $ACTFL+F.DSPT,R0 ;GET DSD POINTER. WK MOV #LACTDV,(R0)+ ;MOVE IN LENGTH. WK MOV #ACTDV,@R0 ;AND ADDRESS. WK ; OPEN$R #$ACTFL,,,#FD.RWM ; OPEN FILE BCS 10$ ; ERROR INC FILOPN ; SET FILE IS OPEN 10$: RETURN ; ; ; WK ; ACTDV: .ASCII /DK0:/ LACTDV=.-ACTDV .SBTTL >> QIO - ISSUE QIO ;+ ; *** - QIO - ISSUE QIO ; ; INPUT: ; R4 - DPB ADDRESS ;- QIO: DIR$ R4 ; ISSUE QIO BCS 10$ ; ERROR MOVB Q.IOEF(R4),R5 ; GET EVENT FLAG TO WAIT ON WTSE$S R5 ; AND WAIT 10$: RETURN ; .SBTTL >> SEARCH - SEARCH FILE FOR ACCOUNT NUMBER ;+ ; *** - SEARCH - SEARCH FILE FOR ACCOUNT NUMBER ; OUTPUT: ; R0 - ADDRESS OF ACCOUNT ENTRY ; CARRY CLEAR - ACCOUNT FOUND ; CARRY SET - ACCOUNT NOT FOUND ;- SEARCH: MOV #FDPB,R4 ; GET FILE DPB ADDRESS MOV #1,Q.IOPL+10(R4) ; SET TO START AT VBN 1 CLR Q.IOPL+6(R4) ; 5$: CALL QIO ; READ NEXT BLOCK MOV IOSB+2,R2 ; GET COUNT OF WORDS READ BEQ 25$ ; ZERO, NO WORDS READ MOV #$ACTBF,R0 ; GET BUFFER ADDRESS 15$: CMP (R1),A.GRP(R0) ; GROUP CODES MATCH BNE 20$ ; NO CMP 2(R1),A.GRP+2(R0) ; MAYBE BNE 20$ ; NO CMP 4(R1),A.MBR+1(R0) ; YES, MEMBER CODES MATCH? BNE 20$ ; NO CLC BR 40$ 20$: ADD #A.LEN,R0 ; POINT TO NEXT ENTRY SUB #A.LEN,R2 ; COMPUTE WORDS LEFT IN BUFFER BHI 15$ ; LOOP, MORE LEFT 25$: CMPB #IE.EOF,IOSB ; END OF FILE? BEQ 30$ ; YES TSTB IOSB ; ANY ERRORS? BMI 30$ ; YES ADD #$BFLEN/512.,Q.IOPL+10(R4) ; NO, POINT TO NEXT VBN ADC Q.IOPL+6(R4) ; BR 5$ ; READ IN NEXT BUFFER 30$: SEC ; ERROR, ACCOUNT NOT FOUND 40$: RETURN ; .SBTTL >>CONSTANTS ; ; CONSTANTS ; LUN1 = 1 ; TI LUN LUN2 = 2 ; ACCOUNT FILE LUN EFN1 = 1 ; EVENT FLAG FOR ALL I/O FDPB: QIO$ IO.RVB,LUN2,EFN1,,IOSB,,<$ACTBF,$BFLEN,,,1> IOSB: .BLKW 2 ; I/O STATUS BLOCK FILOPN: .WORD 0 ; FILE OPEN FLAG 0-NO, 1-YES OPNERR: .WORD 0 ; ACCOUNT FILE OPEN ERROR FLAG MKT: MRKT$ 1,60.,1 ; WAIT FOR ONE SECOND ; EB033 .END