program BAT_DATE { www.merlyn.demon.co.uk } ; { Gregorian calendar only. Command-line input is any of MJD, YYYY NNN, YYYY MM DD, D NN YYYY; NN is ISO-8601 week number, D is day of ISO week, Mon=1..Sun=7. Output redirects to batch file to set environment variables; fixed names, prefixed with environment variable "BAT_DATE" value. Written and predominantly tested with BP7. Program started on 2000-09-02; may change. Superseded, on the whole, in March 2001 by NOWMINUS.PAS } {$I VERSION.PAS} uses {$IFDEF PASCAL} Dos, {$ENDIF} {$IFDEF DELPHI} {SysUtils,} {Windows,} {$ENDIF} DateProx ; const GrgCal : Options = (Cal:Gregorian; Astr:false) ; function Param(const N : word) : longint ; var V : longint ; J : integer ; begin Val(ParamStr(N), V, J) ; if J<>0 then begin Writeln(^G'Eh? error at character ', J) ; HALT end ; Param := V end {Param} ; function Help : longint ; FAR ; begin Writeln( 'BAT_DATE MJD : Modified Julian Date, 1858-11-17 = MJD 0'^M^J, 'BAT_DATE YYYY NNN : Year, DayOfYear'^M^J, 'BAT_DATE YYYY MM DD : Year, Month number, Day'^M^J, 'BAT_DATE DoW YYYY WW : DayOfWeek, Year, Week Number (ISO-8601)') ; Writeln(' Compiled with ', {$IFDEF __TMT__} 'TMT ', {$ELSE} 'Borland ', {$ENDIF} {$IFDEF PASCAL} 'Pascal', {$ENDIF} {$IFDEF DELPHI} 'Delphi', {$ENDIF} ^M^J' See http://www.merlyn.demon.co.uk/miscdate.htm etc.') ; HALT end {Help} ; function P1 : longint ; FAR ; begin P1 := Param(1) end {P1} ; function P2 : longint ; FAR ; begin P2 := YD_to_MJD(GrgCal, Param(1), Param(2)) end {P2} ; function P3 : longint ; FAR ; var X1, X2, X3 : longint ; begin X1 := Param(1) ; X2 := Param(2) ; X3 := Param(3) ; if X1>X3 then P3 := YMDtoMJD(X1, X2, X3) else P3 := ISO_WNDtoMJD(GrgCal, X3, X2, X1) ; end {P3} ; type Fn = function : longint ; const PArr : array [0..3] of Fn = (Help, P1, P2, P3) ; type S40 = string [40] ; procedure PutEnv(const S, T : string ; const N : longint ; const L : byte) ; var Q : S40 ; begin Str(N, Q) ; while Length(Q)= 2001-03-11', ' www.merlyn.demon.co.uk'^M^J':: ', UDP) ; SetEnvs(PArr[ParamCount]) ; END.