Difference between revisions of "Setting file date stamps"

From BeebWiki
Jump to: navigation, search
m (Used file$ when should use f$)
 
m (1 revision)
 
(2 intermediate revisions by the same user not shown)
(No difference)

Latest revision as of 19:13, 8 March 2015

Some filing systems allow objects to have creation and modification dates and times. RISC OS recognises an object's modification date and time in the load and execution addresses. The following code sets an object's date and time in both the load/exec addresses and any separate date/time fields.

   REM:>BLib.Date
   REM:>BLib.FileIO
   REM:>BLib.NetFS
   REM:DIM X% 127:Y%=X%DIV256
   REM:DIM name% 127
   :
   REM f$                     - filename
   REM t%                     - RISC OS filetype or -1 to not change
   REM cd%, cm%, cy%          - creation day, month, year
   REM chr%, cmn%, csc%, ccs% - creation hours, minutes, seconds, centiseconds
   REM md%, mm%, my%          - modification day, month, year
   REM mhr%, mmn%, msc%, mcs% - modification hours, minutes, seconds, centiseconds
   :
   DEFPROCFile_Stamp(f$,t%,cd%,cm%,cy%,chr%,cmn%,csc%,ccs%,md%,mm%,my%,mhr%,mmn%,msc%,mcs%)
   A%=FNfile(f$,5):PROCDate_FromOrd(X%+6,md%,mm%,my%,mhr%,mmn%,msc%,mcs%)
   IFt%=-1:t%=X%!2 AND-256 ELSE t%=t%*256 OR &FFF00000
   X%!2=X%?10 OR t%:X%!15=FNf_date(md%,mm%,my%):A%=FNfile(file$,1)
   X%!8=FNf_date(md%,mm%,my%):A%=FNNetFS_OpN(19,5,10,file$)
   X%!8=FNf_date(cd%,cm%,cy%):X%!10=FNf_time(chr%,cmn%,csc%)
   X%!13=FNf_date(md%,mm%,my%):X%!15=FNf_time(mhr%,mmn%,msc%)
   A%=FNNetFS_OpN(19,64,18,file$)
   ENDPROC
   :
   DEFFNf_date(d%,m%,y%):y%=y%-1981:=d%+m%*256+(y%AND15)*4096+(y%DIV16)*32
   DEFFNf_time(h%,m%,s%):=h%+m%*256+s%*65536

The code requires a global control block name% long enough to hold the longest pathname used, and a global control block of at least 20 bytes more than the longest pathname used, accessible with X% holding the address of this block, and Y% holding X% DIV 256. This can easily be set up with, for example DIM ctrl% 127, name% 127 near the start of the program and X%=ctrl%:Y%=X%DIV256 at the beginning of the major program code and at the start of any main program loop.

The Date, FileIO and NetFS BASIC program libraries are required.

By JGH, Mar-1999