.TITLE PROTECT .SBTTL INTRO PAGE .IDENT /MRH001/ ; ; ; PROTECT IS A SYSTEM PROGRAM DESIGNED TO LET THE INEXPERIENCED ; (OR EXPERIENCED) USER CHANGE THE PROTECTION CODES FOR A FILE ; WITHOUT HAVING TO DO BATTLE WITH THE COMPLEX SYNTAX NEEDED TO ; ACHIEVE THE SAME RESULT WITH PIP ; ; A TYPICAL COMMAND SEQUENCE WOULD BE ; ; MCR>PRO FILENAME.EXT;VERS ; ; PROTECT WILL CHANGE THE FILE PROTECT CODES FOR THE FILE IN QUESTION ; TO [RWE,RWE,RWE,R] ; ; PROTECT SUPPORTS WILD CARD OPERATIONS, WITH THE RESTRICTION THAT ; VERSION # MUST BE * OR EXPLICIT IF NAME OR EXTENSION ARE WILD ; ; MAIN PURPOSE IS TO PROVIDE A SIMPLE METHOD FOR AN OPERATOR TO PREVENT ; A FILE FROM BEING DELETED (SUCH AS A .TSK FILE). ; ; A COMPANION PROGRAM, UNPROTECT (...UNP) WILL RESET THE FILE PROTECT ; CHARACTERISTICS TO THE SYSTEM DEFAULT OF [RWED,RWED,RWE,R] ; ; FRANK BORGER ; MICHAEL REESE MEDICAL CENTER ; DEC 1976 ; ; .MCALL FSRSZ$,FINIT$,FDBDF$,FDOP$A,QIOW$,DIR$,EXIT$S .MCALL GMCR$,GCML$,GCMLB$,CSI$,CSI$1,CSI$2,OPEN$,NMBLK$,CLOSE$ DIRSTA=0 ;VALUE TO SET NEW PROTECT CODE TO ([SYSTEM,OWNER,GROUP,WORLD]) ;164000=[RWED,RWED,RWE,R] ;164210=[RWE,RWE,RWE,R] NEWPRO=164210 .PAGE .SBTTL MAIN CODE ; ;GET COMMAND LINE ; START: FINIT$ ;INITIALIZE FCS STUFF CKMORE: GCML$ #GCLBLK ;GET COMMAND LINE BCC 10$ ;BR IF GOT ONE MOV #GCLBLK,R0 ;POINT TO GCMD CONTROL BLOCK CMPB #GE.EOF,G.ERR(R0) ;WAS ERROR END OF A COMMAND FILE ? BEQ 1$ ;YES TAKE EXIT WITHOUT SCREAMING DIR$ #GETERR ;NO REPORT WE COULDN'T GET COMMAND LINE 1$: EXIT$S ;AND EXIT CPU LEFT ;INTERPERT FILE NAME 10$: CSI$1 #CSIBLK,GCLBLK+G.CMLD+2,GCLBLK+G.CMLD BCS CSIERR ;WOOPS BAD COMMAND LINE CSI$2 #CSIBLK,OUTPUT BCS CSIERR ;SOMETHING WRONG HERE TOO ; ;CHECK FOR WILD CARDS AND ACT ACCORDINGLY CLR WILDFL ;CLEAR FLAG FOR WILD CARDS MOV #FDB,R0 ;R0 -> FDB MOV R0,R1 ADD #F.FNB,R1 ;R1 -> FILE NAME BLOCK MOV #CSIBLK+C.DSDS,R2 ;R2 -> DATASET DESCRIPTOR MOV #DEFFNB,R3 ;R3 -> DEFAULT FILE NAME BLOCK JSR PC,.PARSE BIT #NB.SVR!NB.STP!NB.SNM,N.STAT(R1) ;SEE IF WILD CARDS BEQ DOOPEN ;NONE, JUST OPEN INC WILDFL ;SET WILD CARD FLAG FIND: JSR PC,.FIND ;FIND NEXT FILE THAT MATCHES BCC DOOPEN ;GOT ANOTHER ONE CLR WILDFL ;LAST ONE CLEAR FLAG JMP CKMORE ;AND TRY FOR ANOTHER COMMAND DOOPEN: OPEN$ #FDB ;OPEN THE FILE BCS FILERR ;COULDN'T OPEN FILE ;READ ATTRIBUTES DIR$ #READAT ;DO DIRECTIVE BCS RWATER ;BR IF DIRECTIVE FAILED CMPB IOSTAT,#IS.SUC ;DID READ GO ? BNE RWATER ;BR IF READ FAILED ;CHANGE PROTECT CODE MOV #NEWPRO,FATBUF ;WRITE ATTRIBUTES DIR$ #WRITAT ;DO DIRECTIVE BCS RWATER ;BR IF DIRECTIVE FAILED CMPB IOSTAT,#IS.SUC ;DID WRITE GO ? BNE RWATER ;NO ;WE'RE DONE, TRY FOR MORE DONE: CLOSE$ #FDB ;CLOSE FILE OUT TST WILDFL ;DOING MORE THAN ONE ? BNE FIND ;YES TRY FOR MORE JMP CKMORE ;AND TRY FOR MORE COMMANDS .PAGE .SBTTL ERROR CONDITIONS ; ;ERROR IN COMMAND STRING INTERPERTER ; CSIERR: DIR$ #BADNAM ;REPORT BAD NAME FROM CSI JMP CKMORE ; ; ;COULD NOT FIND/OPEN FILE ; FILERR: DIR$ #NOFILE ;REPORT IT JMP CKMORE ; ; ;FAILED TO READ OR WRITE ATTRIBUTES ; RWATER: DIR$ #BADATT ;REPORT IT CLOSE$ #FDB ;JUST IN CASE JMP CKMORE .PAGE .SBTTL DPB'S AND DATA ; ;READ/WRITE FILE ATTRIBUTES DPB'S AND CONTROL BLOCK ; READAT: QIOW$ IO.RAT,4,1,,IOSTAT,, ; RATBLK: .BYTE -2,2 ;READ FILE PRO CODE ONLY .WORD FATBUF ;BUFFER ADDRESS .WORD 0 ;END OF BLOCK INDICATOR ; ; WRITAT: QIOW$ IO.WAT,4,1,,IOSTAT,, ; WATBLK: .BYTE 2,2 ;WRITE FILE PRO CODE ONLY .WORD FATBUF ;BUFF ADDRESS .WORD 0 ;END OF BLOCK INDICATOR ; ; FATBUF: .BLKW 2 ;BUFFER FOR FILE ATTRIBUTES (PRO CODE) .PAGE .SBTTL ERROR MESSAGES AND DIRECTIVES ; ;BAD FILE NAME ERROR BADNAM: QIOW$ IO.WVB,5,1,,IOSTAT,, BADNA1: .ASCII /PRO -- BAD FILE NAME/ BADNAL=.-BADNA1 .EVEN ; ; ; ; ;TRIED TO MODIFIFY OTHER UIC AND NOT PRIVILEGED BADUIC: QIOW$ IO.WVB,5,1,,IOSTAT,, BADUI1: .ASCII /PRO -- NON-SYSTEM UIC MAY ONLY MODIFY OWN FILES/ BADUIL=.-BADUI1 .EVEN ; ; ; ; ;COULD NOT FIND/OPEN FILE NOFILE: QIOW$ IO.WVB,5,1,,IOSTAT,, NOFIL1: .ASCII ?PRO -- COULD NOT FIND/(OPEN FOR WRITE) FILE? NOFILL=.-NOFIL1 .EVEN ; ; ; ; ;COULD NOT READ/WRITE FILE ATTRIBUTES BADATT: QIOW$ IO.WVB,5,1,,IOSTAT,, BADAT1: .ASCII ?PRO -- FAILED TO READ/WRITE FILE PROTECT CODES? BADATL=.-BADAT1 .EVEN ; ; ;FAILED TO OPEN INDIRECT COMMAND FILE GETERR: QIOW$ IO.WVB,5,1,,IOSTAT,, GETER1: .ASCII /PRO -- FAILED TO OPEN INDIRECT COMMAND FILE/ GETERL=.-GETER1 .EVEN ; ; ; IOSTAT: .BLKW 2 ;IOSTATUS BUFFER .PAGE .SBTTL FILE GOODIES WILDFL: .WORD 0 ;FLAG FOR DOING WILD CARD THINGS ; ; ;DEFINE FCS WORK AREA FSRSZ$ 2 ;DEFINE DEFAULT FILE NAME BLOCK ;(FILE SY:XXXXXX.TSK DEFFNB: NMBLK$ ,TSK,,SY ;DEFINE FILE DESCRIPTOR BLOCK FDB: FDBDF$ ;INITIALIZE FILE OPEN FDOP$A 4,CSIBLK+C.DSDS,DEFFNB,FO.MFY ;SPEC FILE INFO FROM CSI AND DEFAULT FROM ;DEFAULT FILE NAME BLOCK ; ; ; ;DEFINE GETMCR (INDIRECT) MACROS GCLBLK: GCMLB$ 2,PRO,,5 ;GET COMMAND LINE IND DEPTH OF 2, PROMPT WITH ;PRO, BUFFER AT CMDBUF, VIA LUN 5 ; ; ; ;DEFINE COMMAND STRING INTERPERTER MACROS CSI$ ;DEFINE COMMAND STRING INTERPETER BLOCK CSIBLK: .BLKB C.SIZE .END START