35 lines
1.2 KiB
Common Lisp
35 lines
1.2 KiB
Common Lisp
;;;; PMSF-Lib --- PMSF Common Lisp Utility Library
|
|
;;;; This is copyrighted software. See documentation for terms.
|
|
;;;;
|
|
;;;; common-utilities.lisp --- Common utilities
|
|
;;;;
|
|
;;;; $Id$
|
|
|
|
(cl:in-package #:pmsf-lib)
|
|
|
|
;;;; %File Description:
|
|
;;;;
|
|
;;;; This file contains common utilities for all kinds of processing
|
|
;;;; and formatting.
|
|
;;;;
|
|
|
|
(defun generate-printed-guid (&optional registry-format-p)
|
|
"Generate a version 4 (PRNG) UUID and return its printed representation."
|
|
(let ((state (make-random-state t)))
|
|
(with-output-to-string (stream)
|
|
(loop with chars = "0123456789abcdef"
|
|
for index upfrom 0 below 32
|
|
for value = (random 16 state)
|
|
for offset = (cond
|
|
((= index 12) 4)
|
|
((= index 16) (+ 8 (ldb (byte 2 0) value)))
|
|
(t value))
|
|
do
|
|
(write-char (char chars offset) stream)
|
|
(when (member index '(7 11 15 20))
|
|
(write-char #\- stream))
|
|
initially
|
|
(when registry-format-p (write-char #\{ stream))
|
|
finally
|
|
(when registry-format-p (write-char #\} stream))))))
|