<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.gmail-pl-smi
        {mso-style-name:gmail-pl-smi;}
span.gmail-pl-c1
        {mso-style-name:gmail-pl-c1;}
span.E-MailFormatvorlage20
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1642345064;
        mso-list-type:hybrid;
        mso-list-template-ids:421932662 67567639 67567641 67567643 67567631 67567641 67567643 67567631 67567641 67567643;}
@list l0:level1
        {mso-level-number-format:alpha-lower;
        mso-level-text:"%1\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style></head><body lang=DE-CH link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>Hi again<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>For a) I would use the following formula:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>   dt := ((((yr*12 + mo)*24 + hr)*32 + day)*64 + min)*64 + sec;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>        (* the higher 15 bits encode yr, mo and hr<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>             the lower 17 bits encode day, min and sec *)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>For b) I would use the following formula<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>   dt := ((((yr*16 + mo)*32 + day)*32 + hr)*64 + min)*32 + sec DIV 2;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>br<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>Jörg<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span style='font-size:12.0pt;color:black'>Von: </span></b><span style='font-size:12.0pt;color:black'>Joerg <joerg.straube@iaeth.ch><br><b>Datum: </b>Donnerstag, 13. Februar 2020 um 21:00<br><b>An: </b>ETH Oberon and related systems <oberon@lists.inf.ethz.ch><br><b>Betreff: </b>Re: [Oberon] File time stamps in PO2013<o:p></o:p></span></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal>Firstly, I wrote a RealTimeClock background task for ProjectOberon that increments Kernel.clock based on Kernel.timer. My SW accuracy is almost as high as a HW RTC.<o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Secondly, here are two approaches to fix this 63 years restriction of the current implementation<o:p></o:p></p></div><div><p class=MsoNormal>a) 100 years are less than 2^32 seconds, so we can fit them in 32 bits but we cant use powers of 2 anymore to split the fields.<o:p></o:p></p></div><div><p class=MsoNormal>b) use a granularity of 2 seconds for clock iso 1 second. Then you get 1 bit more for the year and you can code the year from 00..99<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I did not make up my mind whether a) or b) is better, or we should just live with the restriction and set the base year to eg 2010. Then the problem only appears in 2073.<o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p><div><div><div><p class=MsoNormal>Jörg<o:p></o:p></p></div></div><div><p class=MsoNormal><br><br><o:p></o:p></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal style='margin-bottom:12.0pt'>Am 13.02.2020 um 20:36 schrieb Charles Perkins <chuck@kuracali.com>:<o:p></o:p></p></blockquote></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=MsoNormal><o:p></o:p></p><div><div><p class=MsoNormal>I'm writing a linux kernel filesystem driver for Project Oberon disk images and I'm wondering how best to interpret the Date field in the FileDesc record. <o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>It looks to me like the Files module just puts the latest Kernel.Clock() value in there when the file is written.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>System.Mod sets the date value like this:<o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:9.0pt;font-family:Consolas;color:#24292E'>dt <span class=gmail-pl-smi>:=</span> <span class=gmail-pl-smi>((((</span>yr<span class=gmail-pl-smi>*</span></span><span class=gmail-pl-c1><span style='font-size:9.0pt;font-family:Consolas;color:#005CC5'>16</span></span><span style='font-size:9.0pt;font-family:Consolas;color:#24292E'> <span class=gmail-pl-smi>+</span> mo<span class=gmail-pl-smi>)*</span></span><span class=gmail-pl-c1><span style='font-size:9.0pt;font-family:Consolas;color:#005CC5'>32</span></span><span style='font-size:9.0pt;font-family:Consolas;color:#24292E'> <span class=gmail-pl-smi>+</span> day<span class=gmail-pl-smi>)*</span></span><span class=gmail-pl-c1><span style='font-size:9.0pt;font-family:Consolas;color:#005CC5'>32</span></span><span style='font-size:9.0pt;font-family:Consolas;color:#24292E'> <span class=gmail-pl-smi>+</span> hr<span class=gmail-pl-smi>)*</span></span><span class=gmail-pl-c1><span style='font-size:9.0pt;font-family:Consolas;color:#005CC5'>64</span></span><span style='font-size:9.0pt;font-family:Consolas;color:#24292E'> <span class=gmail-pl-smi>+</span> min<span class=gmail-pl-smi>)*</span></span><span class=gmail-pl-c1><span style='font-size:9.0pt;font-family:Consolas;color:#005CC5'>64</span></span><span style='font-size:9.0pt;font-family:Consolas;color:#24292E'> <span class=gmail-pl-smi>+</span> sec<span class=gmail-pl-smi>;</span></span><o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>It looks to me like the above formula leaves 6 bits for the year, which means it ranges from 0 to 63.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Now I know that the FPGA doesn't actually have a real time clock and I think the time is always actually zero unless you set it to something else. I don't think it gets updated from the system millisecond timer either.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I'm just wondering if historically that year value that goes in a file header has a base year  or other meaning. Without something like that the maximum year is "63" which is a long time ago!<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I'd like to put something meaningful in this field when I move files in and out of Linux.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Anybody have a good idea? Should I just make it based on Jan 1 1970 like Unix, in which case it rolls over in 2033?<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Am I over-thinking this? <o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Chuck<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal><o:p> </o:p></p><div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><p class=MsoNormal><o:p> </o:p></p></blockquote></div></div><p class=MsoNormal>--<br>Oberon@lists.inf.ethz.ch mailing list for ETH Oberon and related systems<br>https://lists.inf.ethz.ch/mailman/listinfo/oberon<o:p></o:p></p></div></blockquote></div></div></div></div></body></html>