+(defun org-insert-time-stamp (time &optional with-hm inactive pre post)
+ "Insert a date stamp for the date given by the internal TIME.
+WITH-HM means, use the stamp format that includes the time of the day.
+INACTIVE means use square brackets instead of angular ones, so that the
+stamp will not contribute to the agenda.
+PRE and POST are optional strings to be inserted before and after the
+stamp.
+The command returns the inserted time stamp."
+ (let ((fmt (funcall (if with-hm 'cdr 'car) org-time-stamp-formats))
+ stamp)
+ (if inactive (setq fmt (concat "[" (substring fmt 1 -1) "]")))
+ (insert (or pre ""))
+ (insert (setq stamp (format-time-string fmt time)))
+ (insert (or post ""))
+ stamp))
+
+(defun org-toggle-time-stamp-overlays ()
+ "Toggle the use of custom time stamp formats."
+ (interactive)
+ (setq org-display-custom-times (not org-display-custom-times))
+ (unless org-display-custom-times
+ (let ((p (point-min)) (bmp (buffer-modified-p)))
+ (while (setq p (next-single-property-change p 'display))
+ (if (and (get-text-property p 'display)
+ (eq (get-text-property p 'face) 'org-date))
+ (remove-text-properties
+ p (setq p (next-single-property-change p 'display))
+ '(display t))))
+ (set-buffer-modified-p bmp)))
+ (if (featurep 'xemacs)
+ (remove-text-properties (point-min) (point-max) '(end-glyph t)))
+ (org-restart-font-lock)
+ (setq org-table-may-need-update t)
+ (if org-display-custom-times
+ (message "Time stamps are overlayed with custom format")
+ (message "Time stamp overlays removed")))
+
+(defun org-display-custom-time (beg end)
+ "Overlay modified time stamp format over timestamp between BED and END."
+ (let* ((t1 (save-match-data
+ (org-parse-time-string (buffer-substring beg end) t)))
+ (w1 (- end beg))
+ (with-hm (and (nth 1 t1) (nth 2 t1)))
+ (inactive (= (char-before (1- beg)) ?\[))
+ (tf (funcall (if with-hm 'cdr 'car) org-time-stamp-custom-formats))
+ (time (mapcar (lambda (x) (or x 0)) t1))
+ (str (org-add-props
+ (format-time-string
+ (substring tf 1 -1) (apply 'encode-time time))
+ nil 'mouse-face 'highlight))
+ (w2 (length str)))
+ (if (not (= w2 w1))
+ (add-text-properties (1+ beg) (+ 2 beg)
+ (list 'org-dwidth t 'org-dwidth-n (- w1 w2))))
+ (if (featurep 'xemacs)
+ (progn
+ (put-text-property beg end 'invisible t)
+ (put-text-property beg end 'end-glyph (make-glyph str)))
+ (put-text-property beg end 'display str))))
+
+(defun org-days-to-time (timestamp-string)
+ "Difference between TIMESTAMP-STRING and now in days."
+ (- (time-to-days (org-time-string-to-time timestamp-string))
+ (time-to-days (current-time))))
+
+(defun org-deadline-close (timestamp-string &optional ndays)
+ "Is the time in TIMESTAMP-STRING close to the current date?"
+ (and (< (org-days-to-time timestamp-string)
+ (or ndays org-deadline-warning-days))
+ (not (org-entry-is-done-p))))
+