File: pass.l

package info (click to toggle)
euslisp 9.27%2Bdfsg-7
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 55,344 kB
  • sloc: ansic: 41,162; lisp: 3,339; makefile: 256; sh: 208; asm: 138; python: 53
file content (21 lines) | stat: -rw-r--r-- 755 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
;; sort passwd according to uid
;;
(defun passwd (infile &optional (out t))
  (let ((eof (cons nil nil)) line name uid gid ins ch users)
    (with-open-file (in infile)
      (while (not (eq  (setq line (read-line in nil eof)) eof))
        (setq line (nsubstitute  #\space  #\: line))
        (setq ins (make-string-input-stream line))
        (setq name (read ins))
        (when (alpha-char-p (elt (string name) 0))
	  (read-char ins)
	  (setq ch (peek-char ins))
	  (when (not (eq ch #\space))	;
	     (read ins)			;passwd
	     (setq uid (read ins))
	     (setq gid (read ins))
	     (push (list uid gid name) users)))))
    (setq users (sort users #'<= #'car))
    (dolist (u users)
       (format out "~A ~A ~A~%" (car u) (cadr u) (caddr u)))
  ))