From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Thorsten Jolitz Newsgroups: gmane.emacs.help Subject: Re: How to compare time of last file modification? Date: Sun, 01 Jul 2012 10:56:31 +0200 Message-ID: <87obnzsvuo.fsf@googlemail.com> References: <87bok0nuw4.fsf@kuiper.lan.informatimago.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: dough.gmane.org 1341132858 30616 80.91.229.3 (1 Jul 2012 08:54:18 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sun, 1 Jul 2012 08:54:18 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Sun Jul 01 10:54:18 2012 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SlFv4-0001Cb-EP for geh-help-gnu-emacs@m.gmane.org; Sun, 01 Jul 2012 10:54:14 +0200 Original-Received: from localhost ([::1]:55381 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SlFv3-0006il-Ee for geh-help-gnu-emacs@m.gmane.org; Sun, 01 Jul 2012 04:54:13 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:59921) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SlFuw-0006iO-T3 for help-gnu-emacs@gnu.org; Sun, 01 Jul 2012 04:54:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SlFut-0004an-BI for help-gnu-emacs@gnu.org; Sun, 01 Jul 2012 04:54:06 -0400 Original-Received: from plane.gmane.org ([80.91.229.3]:47159) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SlFut-0004aR-1T for help-gnu-emacs@gnu.org; Sun, 01 Jul 2012 04:54:03 -0400 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1SlFum-0000mj-Gn for help-gnu-emacs@gnu.org; Sun, 01 Jul 2012 10:53:56 +0200 Original-Received: from e178117094.adsl.alicedsl.de ([85.178.117.94]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 01 Jul 2012 10:53:56 +0200 Original-Received: from tjolitz by e178117094.adsl.alicedsl.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 01 Jul 2012 10:53:56 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 127 Original-X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: e178117094.adsl.alicedsl.de User-Agent: Gnus/5.130002 (Ma Gnus v0.2) Emacs/24.0.93 (gnu/linux) Cancel-Lock: sha1:jXM/TBv0ylfS5jokXMbCwMDy3FI= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 80.91.229.3 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:85600 Archived-At: "Pascal J. Bourguignon" writes: > Thorsten Jolitz writes: > >> Hi List, >> the Elisp manual tells me about file-attributes: >> >> >> 4. The time of last access, as a list of two integers. The >> first integer has the high-order 16 bits of time, the >> second has the low 16 bits. (This is similar to the value >> of current-time; see Time of Day.) Note that on some >> FAT-based filesystems, only the date of last access is >> recorded, so this time will always hold the midnight of the >> day of last access. >> >> 5. The time of last modification as a list of two integers (as >> above). This is the last time when the file's contents were >> modified. >> >> >> If I want to compare the time of last modification of two files - how do >> I do that, using these two integers? > > You have to apply some powerful magic, called "maths". > > If I were you, I'd not read the following of that message, it's much too > esoteric. > > > > The first time is characterized with this system of equations: > > t₁ = 65536×h₁ + l₁ > 0 ≤ h₁ < 65536 > 0 ≤ l₁ < 65536 > > The second time with this similar system: > > t₂ = 65536×h₂ + l₂ > 0 ≤ h₂ < 65536 > 0 ≤ l₂ < 65536 > > > Comparing those times is adding this equation to the above system: > > t₁ < t₂ > t₁ = 65536×h₁ + l₁ > 0 ≤ h₁ < 65536 > 0 ≤ l₁ < 65536 > t₂ = 65536×h₂ + l₂ > 0 ≤ h₂ < 65536 > 0 ≤ l₂ < 65536 > > So we have to solve a system of equations with 3 variables and 7 > equations. > > I told you do not read further! > > > t₁ < t₂ ∧ t₁ = 65536×h₁ + l₁ ∧ t₂ = 65536×h₂ + l₂ > ⇔ 65536×h₁+l₁ < 65536×h₂+l₂ ∧ t₁ = 65536×h₁ + l₁ ∧ t₂ = 65536×h₂ + l₂ > > > Now, notice that: > > ∀n, 65536×(n+1) + 0 > 65536×n + 65535 > ⇔ ∀n, 65536×n + 65536 > 65536×n + 65535 > ⇔ ∀n, 65536 > 65535 > ⇔ true > > Similarly, > > ∀n,p n > p ⇒ 65536×n + 0 > 65536×p + 65535 > ⇔ ∀n,p n > p ⇒ 65536×(n-p+p) > 65536×p + 65535 > ⇔ ∀n,p n > p ⇒ 65536×(n-p)+65536×p > 65536×p + 65535 > ⇔ ∀n,p n > p ⇒ 65536×(n-p) > 65535 > ⇔ ∀n,p n > p ⇒ 65536×(n-p) ≥ 65536 > 65535 > ⇔ ∀n,p n > p ⇒ true > ⇔ true > > Therefore, if h₂ > h₁ then t₂ > t₁ > and if h₁ > h₂ then t₁ > t₂ > > Now, if h₂ = h₁, then > > t₁ < t₂ ∧ t₁ = 65536×h₁ + l₁ ∧ t₂ = 65536×h₂ + l₂ ∧ h₁ = h₂ > > ⇔ 65536×h₁+l₁ < 65536×h₁+l₂ ∧ t₁ = 65536×h₁ + l₁ > ∧ t₂ = 65536×h₂ + l₂ ∧ h₁ = h₂ > > ⇔ l₁ < l₂ ∧ t₁ = 65536×h₁ + l₁ ∧ t₂ = 65536×h₂ + l₂ ∧ h₁ = h₂ > > > Therefore, if h₂ > h₁ then t₂ > t₁ > if h₁ > h₂ then t₁ > t₂ > if h₁ = h₂ then if l₁ < l₂ then t₁ < t₂ > if l₁ > l₂ then t₁ > t₂ > if l₁ = l₂ then t₁ = t₂ > > Does this look like an "algorithms"? I told you, dark magic here! > > > (defun time-lessp (t1 t2) > "Returns whether t1 t1 and t2 are lists of two integers. The first integer has the > high-order 16 bits of time, the second has the low 16 bits." > (destructuring-bind (h1 l1) t1 > (destructuring-bind (h2 l2) t2 > (cond > ((< h1 h2) t) > ((> h1 h2) nil) > (t (cond ((< l1 l2) t) > (t nil))))))) I knew there is a simple and intuitive solution ;) While the math part does look a bit esoteric, your function is similar to what I would have expected as a solution. But I wasn't really sure how to interpret these integers, and probably would have needed much more lines of code myself to write something similar. Thank you. -- cheers, Thorsten