home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / UNIFLEX / UNIFLEX / UniFLEX_Std.Utils1.tar.Z / UniFLEX_Std.Utils1.tar / utils1 / perms < prev    next >
Text File  |  1982-07-22  |  4KB  |  233 lines

  1.  opt pag,nol
  2.  ttl Set Permissions Utility
  3.  lib sysdef
  4.  opt lis
  5.  pag
  6.  info UniFLEX perms
  7.  info Version 1.01, Released July 20, 1982
  8.  info Copyright, (C) 1980, by
  9.  info Technical Systems Consultants, Inc.
  10.  info All rights reserved.
  11.  
  12. *
  13. * Set permissions in specified files.
  14. *
  15.  
  16.  org 0
  17.  
  18. perms clr filec clear out file count
  19.  clr permc clear out perms count
  20.  leax 4,s point to arg list
  21.  stx argpt save arg pointer
  22. perms2 ldy argpt get arg pointer
  23.  ldx 0,y++ get next arg
  24.  beq perms6 end of args?
  25.  sty argpt save the pointer
  26.  ldd 0,x get 1st two chars of arg
  27.  lbsr chkarg see if valid perms
  28.  beq setp set perms if valid
  29.  inc filec bump the file counter
  30.  stx iprm2 save pointer to file name
  31.  stx istat2
  32.  sys ind,istat get file status
  33.  bes perms8 error?
  34.  lda stb+5 get file perms
  35.  tst slot+2 check equals mode
  36.  beq perms4
  37.  lda slot+2 get equals modes
  38. perms4 ora slot or in '+' params
  39.  ldb slot+1 get '-' params
  40.  comb
  41.  pshs b
  42.  anda 0,s+ clear out the '-' bits
  43.  sta iprm3 set in ind call
  44.  sys ind,iprm set perm bits
  45.  bec perms2 errors?
  46.  bra perms8 if so, report
  47. perms6 tst filec any files processed?
  48.  lbeq synerr if not, error
  49.  tst permc any perms processed?
  50.  lbeq synerr if not, error
  51.  ldd #0 set term status
  52.  sys term term task
  53. perms8 std erno save error number
  54.  ldd #2 set file desc
  55.  sys write,ermsg1,ERSZ1 output err message
  56.  ldx istat2 get file name
  57.  stx iwrt2 save for write
  58.  clrb clear counter
  59. perm85 lda 0,x+ get char
  60.  beq perms9 look for null
  61.  incb bump count
  62.  bra perm85
  63. perms9 std iwrt3 set count
  64.  ldd #2 set file desc
  65.  sys ind,iwrt write out file name
  66.  ldd #2 set file desc
  67.  sys write,ermsg2,ERSZ2
  68.  ldd erno set term status
  69.  sys term
  70.  
  71.  pag
  72.  
  73. *
  74. * setp
  75. *
  76. * Set up perm bit masks
  77. *
  78.  
  79. setp tst filec files yet?
  80.  lbne synerr if so - error
  81.  std type save type
  82.  leax 2,x advance arg pointer
  83.  bsr getp get perm bits
  84.  lda type get type
  85.  cmpa #'o is it 'other'
  86.  beq setp2
  87.  cmpa #'u is it 'user'
  88.  beq setp3
  89.  cmpa #'s is it 'exec set'
  90.  lbne synerr error?
  91.  tstb bits specd?
  92.  lbne synerr if so - error
  93.  ldb #$40 set x bit
  94.  bra setp3
  95. setp2 aslb shift to 'other'
  96.  aslb
  97.  aslb
  98. setp3 ldx #slot point to perm slots
  99.  lda type+1 get type
  100.  cmpa #'+ is it '+'?
  101.  beq setp6
  102.  leax 1,x bump to next slot
  103.  cmpa #'- is it '-'
  104.  beq setp6
  105.  leax 1,x
  106. setp6 orb 0,x or in old bits
  107.  stb 0,x save new
  108.  lbra perms2 repeat
  109.  
  110.  pag
  111.  
  112. *
  113. * getp
  114. *
  115. * Get perm bits from arg - return bit mask
  116. * in reg B.
  117. *
  118.  
  119. getp clr 0,-s set zero mask
  120. getp2 clrb
  121.  lda 0,x+ get next char
  122.  beq getp6 end of arg?
  123.  incb set r bit
  124.  cmpa #'r is ir 'r'
  125.  beq getp4
  126.  aslb set w bit
  127.  cmpa #'w is it 'w'
  128.  beq getp4
  129.  aslb set x bit
  130.  cmpa #'x is it 'x'
  131.  lbne synerr syntax error
  132. getp4 orb 0,s or in new bit
  133.  stb 0,s save new mask
  134.  bra getp2 repeat
  135. getp6 puls b,pc return mask
  136.  
  137. *
  138. * chkarg
  139. *
  140. * Checks for valid argument
  141. *
  142.  
  143. chkarg std type save 1st 2 bytes
  144.  cmpa #'u is it user (owner)?
  145.  beq uoro skip if so
  146.  cmpa #'o is it others?
  147.  beq uoro skip if so
  148.  cmpa #'s is it "exec set" bit?
  149.  bne nvalid not valid perms
  150.  cmpb #'+
  151.  beq ckarg2
  152.  cmpb #'-
  153.  bne nvalid invalid if neither
  154. ckarg2 tst 2,x any more to arg?
  155.  bne nvalid invalid if more chars
  156. valid ldd type
  157.  inc permc show another valid perm
  158.  sez show valid perms
  159.  rts
  160. uoro cmpb #'+ check 2nd char
  161.  beq ckarg4
  162.  cmpb #'-
  163.  beq ckarg4
  164.  cmpb #'=
  165.  bne nvalid must be one of three
  166. ckarg4 tst 2,x more to argument?
  167.  beq nvalid should be more
  168.  ldb #2 set pointer
  169. ckarg6 lda b,x get next character
  170.  beq valid valid if end of arg
  171.  cmpa #'r must be r, w, or x
  172.  beq ckarg8
  173.  cmpa #'w
  174.  beq ckarg8
  175.  cmpa #'x
  176.  bne nvalid must be one of three
  177. ckarg8 incb
  178.  cmpb #5
  179.  bne ckarg6
  180.  tst b,x more to argument?
  181.  beq valid shouldn't be
  182. nvalid ldd type
  183.  clz show not valid
  184.  rts
  185.  
  186. *
  187. * synerr
  188. *
  189. * Report syntax error
  190. *
  191.  
  192. synerr ldd #2 set file desc
  193.  sys write,synmsg,SYSZ
  194.  ldd #$ff set status
  195.  sys term term task
  196.  
  197.  pag
  198.  
  199. * ind sys calls
  200.  
  201. iwrt fcb write
  202. iwrt2 fdb 0
  203. iwrt3 fdb 0
  204.  
  205. istat fcb status
  206. istat2 fdb 0,stb
  207.  
  208. iprm fcb chprm
  209. iprm2 fdb 0
  210.  fcb 0
  211. iprm3 fcb 0
  212.  
  213. * error messages
  214.  
  215. ermsg1 fcc "Can't set perms for '"
  216. ERSZ1 equ *-ermsg1
  217. ermsg2 fcc "'.",$d
  218. ERSZ2 equ *-ermsg2
  219. synmsg fcc 'Command syntax error.',$d
  220. SYSZ equ *-synmsg
  221.  
  222. * global storage
  223.  
  224. argpt fdb 0 arg pointer
  225. filec fcb 0 processed file counter
  226. permc fcb 0 valid perms arg count
  227. erno fdb 0 error number
  228. type fdb 0 perm type
  229. slot fdb 0,0 perm slots (masks)
  230. stb rmb 24 status buffer
  231.  
  232.  end perms
  233.