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 / owner < prev    next >
Text File  |  1981-09-01  |  5KB  |  262 lines

  1.  opt pag,nol
  2.  ttl Set Owner Utility
  3.  lib sysdef
  4.  opt lis
  5.  pag
  6.  info UniFLEX owner
  7.  info Version 1, Released August 25, 1980
  8.  info Copyright, (C) 1980, by
  9.  info Technical Systems Consultants, Inc.
  10.  info All rights reserved.
  11.  
  12. * program starts here
  13.  
  14.  org 0
  15.  
  16. own ldd 0,s get arg count
  17.  cmpd #3 must be at least 3!
  18.  lblo synerr or error
  19.  leay 4,s get arg pointer
  20.  ldx 0,y++ get arg 1
  21.  sty argpt save position
  22.  lda 0,x get 1st char
  23.  cmpa #'9 is it digit?
  24.  bls own3
  25.  stx bufpt save position
  26.  lbsr fndnam find name in password file
  27.  bes own8 no name?
  28.  ldx nxtfld get line pointer
  29. own2 lda 0,x+ look for next field
  30.  cmpa #': is it ':'?
  31.  bne own2
  32.  pshs x save start pos
  33. own25 lda 0,x+ look for end
  34.  cmpa #':
  35.  bne own25
  36.  clr -1,x set null term
  37.  puls x
  38. own3 lbsr decvt do number conversion (uid)
  39.  lbne synerr bad number?
  40.  std icho3 save user id
  41. own4 ldx argpt get arg pointer
  42.  ldd 0,x++ get next arg
  43.  beq own6 all done?
  44.  stx argpt save arg pointer
  45.  std icho2 save file name ptr
  46.  sys ind,icho do chown call
  47.  bec own4
  48.  lbra prter report error
  49. own6 ldd #0 set ok status
  50.  sys term term task
  51. own8 ldd #2 set file desc
  52.  sys write,noums,NOSZ output error
  53.  ldd #$ff set status
  54.  sys term term task
  55.  
  56.  pag
  57.  
  58. *
  59. * fndnam
  60. *
  61. * Find name in password file.  Return error set
  62. * if error.
  63. *
  64.  
  65. fndnam ldx #fbuf point to file buffer
  66.  stx linpt init buf ptrs
  67.  stx linend
  68.  sys open,nfile,0 open password file
  69.  bes fndna4 error?
  70.  std namfd save file desc
  71. fndna2 bsr getlin get a line from the file
  72.  beq fndna5 eof?
  73.  ldx bufpt point to name
  74.  ldy #linbuf point to line
  75.  bsr cmpnam compare names
  76.  bne fndna2 if no compare, repeat
  77.  sty nxtfld save field pointer
  78.  ldd namfd get file desc
  79.  sys close close the file
  80.  clc clear error
  81. fndna4 rts return
  82. fndna5 ldd namfd get file desc
  83.  sys close close the file
  84.  sec set error
  85.  rts return
  86.  
  87.  
  88. *
  89. * getlin
  90. *
  91. * Get a line from the password file.  Put it
  92. * in the linbuf.
  93. *
  94.  
  95. getlin ldx #linbuf point to line buffer
  96. getli2 bsr gtch get a character
  97.  beq getli4 eof?
  98.  sta 0,x+ save character in buffer
  99.  cmpa #$d end of line?
  100.  bne getli2
  101.  clz set ok status
  102. getli4 rts return
  103.  
  104.  pag
  105.  
  106. *
  107. * gtch
  108. *
  109. * Get a character from the password file.  Return
  110. * eq status if eof.
  111. *
  112.  
  113. gtch pshs x save x
  114. gtch2 ldx linpt get line pointer
  115.  cmpx linend end of buffer?
  116.  bne gtch4
  117.  ldd namfd get file desc
  118.  sys read,fbuf,512 read in some file
  119.  bes gtch6 error?
  120.  cmpd #0 eof?
  121.  beq gtch6
  122.  ldx #fbuf point to buffer begin
  123.  stx linpt save pointer
  124.  leax d,x mark end of buffer
  125.  stx linend
  126.  ldx linpt reset pointer
  127. gtch4 lda 0,x+ get next character
  128.  stx linpt save pointer
  129.  clz set ok status
  130.  puls x,pc return
  131. gtch6 sez set error
  132.  puls x,pc return
  133.  
  134.  
  135. *
  136. * cmpnam
  137. *
  138. * Compare name pointed at by X to name pointed
  139. * at by Y.  Return eq or ne status.
  140. *
  141.  
  142. cmpnam lda 0,x+ get a character
  143.  beq cmpna4 end of name?
  144.  cmpa 0,y+ compare chars
  145.  beq cmpnam repeat?
  146.  rts return ne
  147. cmpna4 lda 0,y+ get next
  148.  beq cmpna6 null?
  149.  cmpa #': end of field?
  150. cmpna6 rts return
  151.  
  152.  pag
  153.  
  154. *
  155. * decvt
  156. *
  157. * Decimal convert routine.  Convert ascii string
  158. * pointed at by x and null terminated.
  159. * Return number in D and ne if error.
  160. *
  161.  
  162. decvt ldd #0 set up zero
  163.  pshs d
  164. decvt2 lda 0,x+ get character
  165.  beq decvt4 end of list?
  166.  cmpa #'0 check for valid number
  167.  blo decvt3 error?
  168.  cmpa #'9
  169.  bhi decvt3
  170.  anda #$F mask character
  171.  pshs a save digit
  172.  ldd 1,s get number
  173.  aslb multiply by 8
  174.  rola
  175.  aslb
  176.  rola
  177.  aslb
  178.  rola
  179.  addd 1,s add in original twice
  180.  addd 1,s
  181.  addb 0,s+ add in new digit
  182.  adca #0
  183.  std 0,s save result
  184.  bra decvt2 repeat
  185. decvt3 clz set error
  186. decvt4 puls d,pc return
  187.  
  188.  pag
  189.  
  190. *
  191. * prter
  192. *
  193. * Print error message.
  194. *
  195.  
  196. prter std erno save error number
  197.  ldd #2 set file desc
  198.  sys write,ermsg1,ERSZ1
  199.  ldx icho2 get file name
  200.  stx iwrt2 set in os call
  201.  clrb set count to 0
  202. prter2 lda 0,x+ look for name end
  203.  beq prter4
  204.  incb bump char count
  205.  bra prter2
  206. prter4 std iwrt3 save count in call
  207.  ldd #2 set up file desc
  208.  sys ind,iwrt output file name
  209.  ldd #2 set file desc
  210.  sys write,ermsg2,ERSZ2 output rest of message
  211.  ldd erno get error status
  212.  sys term task
  213.  
  214. *
  215. * synerr
  216. *
  217. * Report syntax error.
  218. *
  219.  
  220. synerr ldd #2 set file desc
  221.  sys write,synmsg,SYSZ output message
  222.  ldd #$ff set status
  223.  sys term term task
  224.  
  225.  pag
  226.  
  227. * strings and storage
  228.  
  229. synmsg fcc 'Command syntax error.',$d
  230. SYSZ equ *-synmsg
  231. noums fcc 'Invalid user name.',$d
  232. NOSZ equ *-noums
  233. ermsg1 fcc "Can't set owner for '"
  234. ERSZ1 equ *-ermsg1
  235. ermsg2 fcc "'.",$d
  236. ERSZ2 equ *-ermsg2
  237. nfile fcc '/etc/log/password',0
  238.  
  239. icho fcb chown change owner sys call
  240. icho2 fdb 0
  241. icho3 fdb 0
  242.  
  243. iwrt fcb write write sys call
  244. iwrt2 fdb 0
  245. iwrt3 fdb 0
  246.  
  247. argpt fdb 0 arg pointer
  248. bufpt fdb 0 buffer pointer
  249. linpt fdb 0 line pointer
  250. linend fdb 0 line end marker
  251. namfd fdb 0 name file descriptor
  252. nxtfld fdb 0 field pointer for name file
  253. erno fdb 0 error number
  254.  
  255. linbuf rmb 256 line buffer
  256.  
  257.  org $e00
  258.  
  259. fbuf rmb 512 file buffer
  260.  
  261.  end own
  262.