--- /dev/null
+(defconst 42name "dkaiser")
+(defconst 42email "dkaiser@student.42heilbronn.de")
+
+(defun trim-or-fill-string (string length)
+ (if (> (length string) length)
+ (substring string 0 length)
+ (concat string (make-string (- length (length string)) ?\s))))
+
+(defun check-42header ()
+ (save-excursion
+ (goto-char (point-min))
+ (equal (thing-at-point 'line t)
+ (concat "/* " (make-string 74 ?*) " */\n"))))
+
+(defun add-42header ()
+ (save-excursion
+ (goto-char (point-min))
+ (insert "/* " (make-string 74 ?*) " */\n")
+ (insert "/* " (make-string 74 ? ) " */\n")
+ (insert "/* ::: :::::::: */\n")
+ (insert "/* "
+ (trim-or-fill-string (file-name-nondirectory buffer-file-name) 43)
+ " :+: :+: :+: */\n")
+ (insert "/* +:+ +:+ +:+ */\n")
+ (insert "/* By: "
+ (trim-or-fill-string (concat 42name " <" 42email ">") 39)
+ " +#+ +:+ +#+ */\n")
+ (insert "/* +#+#+#+#+#+ +#+ */\n")
+ (insert "/* Created: "
+ (format-time-string "%Y/%m/%d %H:%M:%S" (nth 5 (file-attributes buffer-file-name)))
+ " by "
+ (trim-or-fill-string 42name 11)
+ " #+# #+# */\n")
+ (insert "/* Updated: "
+ (format-time-string "%Y/%m/%d %H:%M:%S")
+ " by "
+ (trim-or-fill-string 42name 11)
+ " ### ########.fr */\n")
+ (insert "/* " (make-string 74 ? ) " */\n")
+ (insert "/* " (make-string 74 ?*) " */\n\n")))
+
+(defun update-42header ()
+ (save-excursion
+ (goto-char (point-min))
+ (forward-line 8)
+ (kill-line)
+ (insert "/* Updated: "
+ (format-time-string "%Y/%m/%d %H:%M:%S")
+ " by "
+ (trim-or-fill-string 42name 11)
+ " ### ########.fr */")))
+
+(defun add-or-update-42header ()
+ (interactive)
+ (save-excursion
+ (if (check-42header)
+ (funcall #'update-42header)
+ (funcall #'add-42header))))
+
+(defun update-42header-if-existing ()
+ (if (check-42header)
+ (funcall #'update-42header)))
+
+(add-hook 'before-save-hook #'update-42header-if-existing)
+(global-set-key (kbd "C-c h") 'add-or-update-42header)