TITLE PROTEC ENTRY PROTEC ;THIS ROUTINE PROTECTS <155> A FILE 'FILNAM.EXT' ;THE CALLING SEQUENCE IS CALL PROTEC('FILNA','M.EXT') ;BE SURE THE FILE HAS BEEN ENDFILED BEFORE CALLING PROTEC CHR=0 ;AC'S BPT=1 CTR=2 TAC=3 BPT2=4 CNT=5 FIL=6 FEL=7 DOT=16 ;PERIOD D=12 ;CHANNEL PROT=155 ;PROTECTION CODE DEFINE TTYOUT (ADR) DEFINE TTYIN (ADR) PROTEC: 0 MOVSI 0,1 HRRI 0,ACSAV BLT ACSAV+16 ;SAVE AC'S INIT D,17 SIXBIT/DSK/ 0 JRST NOTAVL MOVE FIL,@(16) ;GET FIRST ARG MOVE FEL,@1(16) ;GET SECOND ARG MOVE BPT2,[POINT 7,FIL] ;POINT TO FILENAME MOVEI CNT,12 ;ONLY LOOK AT 10 CHARACTERS MOVEI CTR,6 ;TO STORE SIX CHARS MOVE BPT,[POINT 6,UFD] CLEARM UFD ;FILNAME CLEARM UFD+1 ;EXT CLEARM UFD+2 ;PROTECTION GETNAM: ILDB CHR,BPT2 ;READ CHARACTER SUBI CHR,40 ;CONVERT TO SIXBIT JUMPE CHR,COUNT ;SKIP BLANKS CAIN CHR,DOT ;TEST FOR PERIOD JRST EXT ;PERIOD--EXT FOLLOWS SOSL CTR ;STORE ONLY LEGAL LIMIT IDPB CHR,BPT ;ALPHANUMERIC--STORE COUNT: SOSG CNT ;DECREMENT CHARACTER COUNTER JRST LOOKUP ;DONE, GO PROTECT FILE JRST GETNAM ;GET NEXT CHARACTER EXT: MOVE BPT,[POINT 6,UFD+1] MOVEI CTR,3 ;TO STORE THREE CHARS JRST COUNT ;GO GET EXT LOOKUP: LOOKUP D,UFD ;LOOKUP FILE JRST NONEXF ;NO FILE BY THAT NAME CLOSE D, CALLI TAC,24 ;GET PRJ,PRG # MOVEM TAC,UFD+3 ;SO WE CAN PROTEC LARGE FILES MOVE TAC,[EXPB8] ;LOAD PROTECTION MOVEM TAC,UFD+2 RENAME D,UFD ;PROTECT JRST NOCLSE CLOSE D, EXIT: MOVSI 0,ACSAV HRRI 0,1 BLT 0,17 JRA 16,(16) ;DONE NOTAVL: TTYOUT [ASCIZ"DEVICE NOT AVAILABLE"] CALLI 12 NOCLSE: TTYOUT [ASCIZ"FILE "] TTYOUT FIL TTYOUT [ASCIZ" STILL OPEN...CANT PROTECT"] TTYOUT CRLF JRST EXIT NONEXF: TTYOUT [ASCIZ"?CANT FIND FILE NAMED "] TTYOUT FIL TTYOUT CRLF JRST EXIT ;RETURN CRLF: BYTE(7) 015, 012 ACSAV: BLOCK 17 UFD: BLOCK 4 END