Files
OSNCL/lib/common-utilities.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))))))