.TITLE FILHDR ; ; TASK TO DELETE, UNLOCK OR DETERMINE THE STATUS OF A DISK FILE. ; RECEIVES A DATA BLOCK DEFINING THE FILENAME AND TYPE OF REQUEST. ; 1ST WORD OF DATA BLOCK CONTAINS THE TYPE OF REQUEST AND AN INDICATOR ; IF FILE ATTRIBUTE INFORMATION IS DESIRED. 2ND WORD IS THE NUMBER OF ; CHARACTERS IN FILENAME. REMAINDER OF BLOCK IS THE FILENAME. ; TASK WILL SEND AN ERROR RETURN INDICATOR TO AND RESUME THE REQUESTING ; TASK. IF FILE ATTRIBUTES WERE REQUESTED, TWO ADDITIONAL WORDS WILL BE ; SENT CONTAINING F.RTYP, F.RATT AND F.RSIZ) ; ; WRITTEN NOVEMBER 1975 R B FRENCH THE BOEING COMPANY ; MODIFIED FEBRUARY 1976 R B FRENCH (UNLOCK ANOTHER UIC) ; ; TASK BUILD FILE ; ; FILHDR/PR/-FP=FILHDR,[1,1]EXEC.STB ; / ; UNITS=1 ; PRI=150 ; STACK=32 ; LIBR=SYSRES:RO ; .MCALL DELET$,FINIT$,CSI$1,CSI$2,FSRSZ$,FDBDF$,FDOP$A,NMBLK$ .MCALL DIR$,QIOW$,VRCX$,VSDR$,CLOSE$ FILHDR: FINIT$ ;INITIALIZE FSR RCVDAT: DIR$ #VRCX ;RECEIVE DATA OR EXIT MOV TASK,VSDR+S.DRTN ;PUT TASK NAME IN SEND DPB MOV TASK+2,VSDR+S.DRTN+2 CSI$1 #CSIBLK,#BUF+4,BUF+2 ;CSI1 IT BCC CSI2 ;IF ALL OK, GO DO CSI2 SYNERR: MOV #-1,R1 ;-1 MEANS BAD PARAMETERS BR DONE CSI2: CSI$2 #CSIBLK,OUTPUT ;CSI2 IT BCS SYNERR ;SYNTAX ERROR IF NOT OKAY MOV #FDB,R0 ;FDB ADDRESS IN R0 MOV #FDB+F.FNB,R1 ;FNB ADDRESS IN R1 MOV #CSIBLK+C.DSDS,R2 ;DATASET POINTER IN R2 MOV #DNMBLK,R3 ;DEFAULT NAMEBLOCK ADDRESS IN R3 JSR PC,.PARSE ;PARSE IT BCC FIND ;IF ALL OK, GO SET UP FOR FIND FCPERR: MOV FDB+F.ERR,R1 ;PUT ERROR FLAG IN IERR BR DONE FIND: JSR PC,.FIND ;TRY TO FIND FILE BCC FOUND ;CARRY CLEAR MEANS IT'S THERE NSFERR: CMPB #-26.,FDB+F.ERR ;IS ERROR NO SUCH FILE (-26.)? BNE FCPERR ;IF NOT, IT'S SOME OTHER FCP ERROR MOV #1,R1 ;1 MEANS NO SUCH FILE BR DONE FOUND: CLR R1 ;CLEAR ERROR RETURN CMPB DELFLG,BUF ;DELETE REQUEST? BNE UNLOCK ;BRANCH IF NOT DELET$ ;DELETE THE FILE BCS FCPERR ;CHECK FOR ERRORS BR DONE UNLOCK: CMPB UNLFLG,BUF ;UNLOCK REQUEST? BNE DATA MOV #RDCHAR,QIOW+Q.IOPL+2 ;READ CHARACTERISTICS BLOCK IN DPB DIR$ #QIOW ;READ THE CHARACTERISTICS BCS FCPERR ;CHECK IF ALL OK BIT #100,LOCBIT ;IS FILE LOCKED? BNE 10$ ;BRANCH IF IT IS MOV #2,R1 ;2 MEANS FILE NOT LOCKED BR DATA 10$: MOV #RDSTAT,QIOW+Q.IOPL+2 ;READ STATISTICS BLOCK IN DPB DIR$ #QIOW ;READ STATISTICS BCS FCPERR TST STAT+10 ;IS FILE CURRENTLY IN USE? BEQ 20$ ;NOPE, GO UNLOCK IT MOV #3,R1 ;3 MEANS FILE IS BEING ACCESSED BR DATA 20$: BITB #CS.DIF,CSIBLK+C.STAT ;UIC GIVEN? BEQ 30$ ;BRANCH IF NOT MOV .CRTSK,R0 ;GET ATL NODE ADR MOV A.HA(R0),@#177642 ;CHANGE PAR1 MOV #77406,@#177602 ;CHANGE PDR1 MOV #403,20000+H.UIC ;CHANGE HEADER UIC TO [1,3] 30$: BIC #100,LOCBIT ;CLEAR FILE LOCKED BIT MOV #IO.WAT,QIOW+Q.IOFN ;WRITE ATTRIBUTES FUNCTION CODE IN DPB MOV #WRCHAR,QIOW+Q.IOPL+2 ;WRITE CHARACTERISTICS BLOCK IN DPB DIR$ #QIOW ;DO IT BCS FCPERR ;CHECK IF ALL OK CLR R1 ;CLEAR ERROR RETURN DATA: CMPB DATFLG,BUF+1 ;ATTRIBUTES REQUESTED? BNE DONE ;BRANCH IF NOT MOV #IO.RAT,QIOW+Q.IOFN ;READ ATTRIBUTES FUNCTION CODE MOV #RDATRB,QIOW+Q.IOPL+2 ;READ ATTRIBUTES BLOCK IN DPB DIR$ #QIOW ;READ 'EM BCS FCPERR DONE: MOV R1,BUF ;ERROR FLAG IN R1 DIR$ #VSDR ;SEND DATA AND RESUME CLOSE$ #FDB JMP RCVDAT VRCX: VRCX$ ,TASK,17. TASK: .BLKW 2 BUF: .BLKW 17. VSDR: VSDR$ ,,,,,BUF,3 QIOW: QIOW$ IO.RAT,1,1,,,, STAT: .BLKW 5 ;BUFFER FOR STATISTICS BLOCK RDCHAR: .BYTE -3,1 .WORD LOCBIT .WORD 0 WRCHAR: .BYTE 3,1 ;WRITE ATTRIBUTES CODE FOR FILE CHARACTERISTICS .WORD LOCBIT ;LOCK BIT IS IN 14TH BYTE .WORD 0 RDSTAT: .BYTE -11,12 .WORD STAT .WORD 0 RDATRB: .BYTE -4,4 .WORD BUF+2 .WORD 0 LOCBIT: .BYTE 0 UNLFLG: .BYTE 1 ;UNLOCK FLAG DELFLG: .BYTE 2 ;DELETE FLAG DATFLG: .BYTE 1 ;DATA REQUEST FLAG CSIBLK: .BLKB C.SIZE ;CSI BLOCK FSRSZ$ 1,0 ;ONE LUN - ZERO LENGTH BUFFER, SINCE IT WON'T BE OPENED FDB: FDBDF$ ;START OF FDB FDOP$A 1,CSIBLK+C.DSDS,DNMBLK DNMBLK: NMBLK$ ,,,SY,0 ;DEFAULT FILENAME BLOCK .END FILHDR