.MCALL FDAT$R, FDRC$R, FDOP$R, OPEN$R .MCALL GET$ .MCALL CLOSE$ .PSECT RCS$I,RO,I,LCL,REL,CON OPENR:: MOV 6(R5),R0 ;GET FDB ADDRESS IN R0 FDAT$R R0,#R.VAR ;SET VARIABLE LENGTH RECORDS FDRC$R R0 ;SET RECORD SECTION FDOP$R R0,@2(R5),4(R5),,#FO.RD!FA.SHR OPEN$R R0 MOVB F.ERR(R0),R1 ;GET POSSIBLE ERROR CODE MOV R1,@10(R5) ;RETURN POSSIBLE ERROR RTS PC READL:: MOV 6(R5),R0 ;GET THE ADDRESS OF THE FDB GET$ R0,2(R5),#512. ;GET THE RECORD MOVB F.ERR(R0),R1 ;GET POSSIBLE ERROR CODE MOV R1,@10(R5) ;RETURN POSSIBLE ERROR CODE MOV F.NRBD(R0),@4(R5) ;RETURN NUMBER OF BYTES READ RTS PC ;RETURN FCLOSE:: MOV 2(R5),R0 ;GET FDB ADDRESS FOR CLOSE CLOSE$ R0 ;CLOSE THE FILE RTS PC ;+ ; DATASET DESCRIPTOR BLOCK BUILDER (DSPBLD) ; ; ; FUNCTION: ; DSPBLD IS USED TO DETERMINE THE LENGTH AND ADDRESS ; OF AN ASCII STRING ; ; ; CALLING SEQUENCE: ; ; CALL DSPBLD( PGM, ASCII, LEN, ADR) ; ; WHERE: ; ARGUMENT = DESCRIPTION ACCESS ; PGM = LOGICAL PROGRAM NUMBER PA ; ASCII = ASCII STRING TERMINATED WITH A NULL PA ; LEN = LENGTH OF STRING IN BYTES RE ; ADR = MEMORY ADDRESS OF STRING RE ; ; ; DESCRIPTION: ; DSPBLD FIRST GETS THE ADDRESS OF THE ASCII STRING AND ; STORES THE VALUE IN THE ADR ARGUMENT. NEXT DSPBLD ; SEARCHES THE STRING LOOKING FOR A NULL CHARACTER WHILE ; KEEPING TRACK OF THE NUMBER OF BYTES CHECKED. WHEN A ; NULL CHARACTER IS FOUND THE BYTE COUNT IS STORED IN LEN ; AND THE ROUTINE RETURNS. ; ; ; SPECIAL CONSIDERATIONS: ; ; THE ASCII STRING MUST BE TERMINATED WITH A NULL ; CHARACTER. IF ASCII IS PASSED AS A FORTRAN QUOTE ; STRING A NULL IS AUTOMATICALLY INCLUDED. ; EX: CALL DSPBLD( PGM, 'STRING', LEN, ADR) ;- DSPBLD:: MOV 4(R5),R2 ;GET THE ADDRESS OF THE STRING MOV R2,@10(R5) ;STORE ADDRESS IN 3RD ARGUMENT MOV #-1,R1 ;INITIALIZE R1 TO -1 LOOP: ;LOOP TO COUNT NON-ZERO BYTES MOVB (R2)+,R3 ;MOVE BYTE TO R3 INC R1 ;INCREMENT BYTE COUNT (ZERO 1ST TIME) CMPB R3,#0 ;TEST FOR NULL CHARACTER BNE LOOP ;IF NOT A NULL(ZERO) THEN LOOP ; ; HAVE THE LENGTH, STORE AND RETURN ; MOV R1,@6(R5) ;STORE BYTE COUNT RTS PC ;RETURN .END