Browse Source

Added a BOFH excuse generator.

Samuel W. Flint 7 years ago
parent
commit
df9c1dbcf3
3 changed files with 62 additions and 0 deletions
  1. 1 0
      .gitignore
  2. 5 0
      generate-excuse-build.lisp
  3. 56 0
      generate-excuse.lisp

+ 1 - 0
.gitignore

@@ -8,3 +8,4 @@
 auto/*
 *~
 \#*\#
+/excuse

+ 5 - 0
generate-excuse-build.lisp

@@ -0,0 +1,5 @@
+(load "generate-excuse")
+(save-lisp-and-die "excuse"
+                   :toplevel #'main
+                   :executable t
+                   :purify t)

+ 56 - 0
generate-excuse.lisp

@@ -0,0 +1,56 @@
+(quickload :secure-random)
+
+(defvar *first-column*
+  '("Temporary" "Intermittant" "Partial" "Redundant" "Total" "Multiplexed"
+    "Inherent" "Duplicated" "Dual-Homed" "Synchronous" "Bidirectional"
+    "Serial" "Asynchronous" "Multiple" "Replicated" "Non-Replicated"
+    "Unregistered" "Non-Specific" "Generic" "Migrated" "Localised" "Resignalled"
+    "Dereferenced" "Nullified" "Aborted" "Serious" "Minor" "Major" "Extraneous"
+    "Illegal" "Insufficient" "Viral" "Unsupported" "Outmoded" "Legacy" "Permanent"
+    "Invalid" "Deprecated" "Virtual" "Unreportable" "Undetermined" "Undiagnosable"
+    "Unfiltered" "Static" "Dynamic" "Delayed" "Immediate" "Nonfatal" "Fatal" "Non-Valid"
+    "Unvalidated" "Non-Static" "Unreplicatable" "Non-Serious"))
+
+(defvar *first-length* (length *first-column*))
+
+(defvar *second-column*
+  '("Array" "Systems" "Hardware" "Software" "Firmware" "Backplane" "Logic-Subsystem"
+    "Integrity" "Subsystem" "Memory" "Comms" "Integrity" "Checksum" "Protocol" "Parity"
+    "Bus" "Timing" "Synchronisation" "Topology" "Transmission" "Reception" "Stack"
+    "Framing" "Code" "Programming" "Peripheral" "Environmental" "Loading" "Operation"
+    "Parameter" "Syntax" "Initialisation" "Execution" "Resource" "Encryption" "Decryption"
+    "File" "Precondition" "Authentication" "Paging" "Swapfile" "Service" "Gateway" "Request"
+    "Proxy" "Media" "Registry" "Configuration" "Metadata" "Streaming" "Retrieval" "Installation"
+    "Library" "Handler"))
+
+(defvar *second-length* (length *second-column*))
+
+(defvar *third-column*
+  '("Interruption" "Destabilisation" "Destruction" "Desynchronisation" "Failure" "Dereferencing"
+    "Overflow" "Underflow" "NMI" "Interrupt" "Corruption" "Anomoly" "Seizure" "Override" "Reclock"
+    "Rejection" "Invalidation" "Halt" "Exhaustion" "Infection" "Incompatibility" "Timeout" "Expiry"
+    "Unavailability" "Bug" "Condition" "Crash" "Dump" "Crashdump" "Stackdump" "Problem" "Lockout"))
+
+(defvar *third-length* (length *third-column*))
+
+(defvar *optional-fourth-column*
+  '("Error" "Problem" "Warning" "Signal" "Flag"))
+
+(defvar *fourth-length* (length *optional-fourth-column*))
+
+(defun ensure-positive (number)
+  (if (< number 0)
+      (- number)
+      number))
+
+(dotimes (number (ensure-positive (secure-random:number 100)))
+  (dotimes (other (ensure-positive (secure-random:number (1+ number))))
+    (dotimes (yet-another (ensure-positive (secure-random:number (1+ other))))
+      (ensure-positive (secure-random:number (1+ yet-another))))))
+
+(defun main ()
+  (let ((first-word (nth (ensure-positive (1- (secure-random:number *first-length*))) *first-column*))
+        (second-word (nth (ensure-positive (1- (secure-random:number *second-length*))) *second-column*))
+        (third-word (nth (ensure-positive (1- (secure-random:number *third-length*))) *third-column*))
+        (fourth-word (nth (ensure-positive (1- (secure-random:number *fourth-length*))) *optional-fourth-column*)))
+    (format t "~a ~a ~a (~a)~%" first-word second-word third-word fourth-word)))