.TITLE OPNIDX- OPEN [0,0]INDEXF.SYS USING RMS .EVEN ; ; RMS MACRO DEFINITIONS ; .MCALL $INITIF,ORG$,POOL$B,EXIT$S .MCALL $GNCAL,FAB$B,RAB$B,XAB$B,NAM$B .MCALL $FBCAL,$RBCAL $GNCAL $FBCAL $RBCAL ; ; DEFINE CONTROL BLOCKS AND FILE NAME STRINGS ; FILNAM: DEVSPC: .ASCII /SY0:/ ; DEFAULT TO SY0: FILSPC: .ASCII /[0,0]INDEXF.SYS/ ; FILE NAME FNLEN = .-FILNAM .LIST BEX .EVEN FAB: FAB$B ; FAB FOR NEWLY CREATED FILE F$FAC FB$REA ; READ ONLY F$FNA FILNAM ; ADDRESS OF FILE NAME F$FNS FNLEN ; LENGTH OF FILE NAME F$LCH 1 ; LOGICAL CHAN 1 F$ORG FB$SEQ ; WRITE A SEQUENTIAL FILE FAB$E ; END FDB DEFINITION ; .EVEN RAB: RAB$B ; RAB FOR NEW FILE R$FAB FAB ; ADDRESS OF OWNING FAB R$RAC RB$SEQ ; SEQUENTIAL ACCESS R$MBC 20. ; ONE BLOCK PER I/O UNIT R$MBF 1 ; ONE BUFFER R$ROP RB$EOF ; SET EOF AT DISCONNECT R$USZ 512. ; SIZE OF BUFFER IN WORDS RAB$E ; ; GENERATE RMS INTERNAL POOL SPACE ; .EVEN POOL$B ; BEGIN POOL SPEC P$BDB 1 ; BUFFER DESCRIPTOR BLOCKS P$FAB 1 ; 1 FAB P$RAB 1 ; 1 RAB P$BUF 512*20. ; BUFF SIZE = (512*MBC) POOL$E ; ; DEFINE THE RMS FUNCTIONALITY REQUIRED ; ORG$ SEQ, ; SET ORGANIZ AS SEQUENTIAL .PAGE ; ; PROGRAM FLOW ; OPNIDX:: $INITIF ; INITIALIZE RMS MOV #FAB,R3 MOV #RAB,R4 MOV 2(R5),R0 ; MOVE ADDRESS OF DEVICE STRING TO R0 $STORE 4(R5),UBF,R4 ; ADDRESS OF USER BUFFER MOV #DEVSPC,R1 ; MOVE ADDRESS OF TARGET DEVICE SPEC MOVB (R0)+,(R1)+ ; COPY USER DEVICE MOVB (R0)+,(R1)+ ; COPY USER DEVICE MOVB (R0)+,(R1)+ ; COPY USER DEVICE $OPEN R3,#FABERR ; TRY TO OPEN THE FILE $CONNECT R4,#RABERR ; CONNECT TO THE RAB MOV #FAB,R0 ; RETURN FAB ADDRESS FOR CLOSE CALL MOV #RAB,R1 ; RETURN RAB ADDRESS FOR GET CALLS RETURN .END