RosettaCodeData/Task/Calendar---for-REAL-programmers/Elena/calendar---for-real-programmers-1.elena
2026-02-01 16:33:20 -08:00

57 lines
1.6 KiB
Text

public Program = PROGRAM;
CONSOLE = Console;
abstract INDEXERCLASS : interface<Indexer>
{
abstract ISAVAILABLE();
abstract GETINDEX();
abstract SETINDEX(INDEX);
abstract NEWINDEX(OFFS);
abstract GETVALUE();
abstract GETLENGTH();
bool Available = ISAVAILABLE();
int Index
{
get() = GETINDEX();
set(int INDEX)
{
SETINDEX(INDEX);
}
}
appendIndex(int OFFS) { this self.Index := NEWINDEX(OFFS) }
set Value(o) { NotSupportedException.raise() }
get Value() = GETVALUE();
get int Length() { ^ GETLENGTH() }
}
PARALLELENUMERATOR(N) { ^ ParallelEnumerator.new(N) }
NEWDATE(Y,M,D) { ^ Date.new(Y,M,D) }
NEWTEXTBUILDER() { ^ new TextBuilder() }
GETMONTH(D) { ^ D.Month }
GETDAYOFWEEK(D) { ^D.DayOfWeek }
GETDAYSTR(D) { ^ D.Day.toPrintable() }
READCHAR() { Console.readChar() }
READINT(PROMPT) { ^ Console.write(PROMPT).readLine().toInt() }
WRITEPADDING(OUTPUT,S,SPACER,LEN) { OUTPUT.writePadding(S,SPACER,LEN) }
WRITEPADDINGLEFT(OUTPUT,S,SPACER,LEN) { OUTPUT.writePaddingLeft(S,SPACER,LEN) }
WRITELINE(OUTPUT) { OUTPUT.writeLine() }
WRITE(OUTPUT,S) { OUTPUT.write(S) }
WRITEARGS(OUTPUT,S1,S2) { OUTPUT.print(S1, S2) }
WRITECOPIES(OUTPUT,S,N) { OUTPUT.writeCopies(S,N) }
ALLOCATE(COUNT) { ^ Array.allocate(COUNT) }
CLEAR(S) { S.clear() }
POPULATE(OBJ, ACTION) { ^ OBJ.populate(ACTION) }
FOREACH(OBJ, ACTION) { ^ OBJ.forEach(ACTION) }
const string[] MONTHNAMES = new []{"JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"};
const string[] DAYNAMES = new []{"MO", "TU", "WE", "TH", "FR", "SA", "SU"};