// **---- a simple clock ----** //
// by Luo Yongqi on 1 June 2024 //
// mail at courageluo@gmail.com //
// https://courageluo.github.io //

LOCAL gui:=1;
      // 1 for graphical display
      // 0 for terminal display

LOCAL tx:=10,ty:=5,
      dx:=10,dy:=35,
      wx:=130,wy:=35;
      // set the place of the words
      // if the variable gui equals 1

LOCAL trtn,drtn,tcol,bkcol;

EXPORT clock()
BEGIN
  initcol(); gettime(); getdate();
  LOCAL s,d,ts:=trtn[3],td:=drtn[3];
  IF gui==1 THEN
    dispgui();
  ELSE
    disptui();
  END;
  WHILE NOT ISKEYDOWN(4) DO
    gettime();
    getdate();
    s:=trtn[3];
    d:=drtn[3];
    IF d≠td THEN
      td:=d;
    END;
    IF s≠ts THEN
      IF gui==1 THEN
        dispgui();
      ELSE
        disptui();
      END;
      ts:=s;
    END;
  END;
END;

gettime()
BEGIN
  LOCAL tmp,h,m,s;
  tmp:=FLOOR(Time);
  h:=HMS→(tmp);
  m:=FLOOR(60*(Time-tmp));
  s:=HMS→(ROUND(→HMS(60*(FP(60*(Time-tmp)))),1));
  IF s==60 THEN
    trtn:={initdis(h),initdis(m+1),0};
  ELSE 
    trtn:={initdis(h),initdis(m),s};
  END;
END;

getdate()
BEGIN
  LOCAL y,m,d;
  y:=FLOOR(Date);
  m:=FLOOR(100*(Date-y));
  d:=100*(100*(Date-y)-m);
  drtn:={y,initdis(m),initdis(d)};
END;

initdis(t)
BEGIN
  IF t<10 THEN
    RETURN "0"+t;
  END;
  RETURN t;
END;

getweek()
BEGIN
  LOCAL d:=Date,idx;
  idx:=DAYOFWEEK(d);
  IF Language==2 THEN
    LOCAL wrtn:={"一","二","三","四","五","六","日"};
    RETURN "周"+wrtn[idx];
  ELSE
    LOCAL wrtn:={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
    RETURN wrtn[idx];
  END; 
END;

initcol()
BEGIN
  IF Theme(1)==1 THEN
    tcol:=#000000;
    bkcol:=#EEEEEE;
  ELSE
    tcol:=#EEEEEE;
    bkcol:=#222222;
  END;
  RECT_P(0,0,320,240,bkcol);
END;

disp(split,x,y,typ)
BEGIN
  LOCAL str;
  CASE
    IF typ=="t" THEN
      str:=trtn[1]+split+trtn[2]+split+initdis(trtn[3]);
    END;
    IF typ=="d" THEN
      str:=drtn[1]+split+drtn[2]+split+drtn[3];
    END;
    IF typ=="w" THEN
      str:=getweek();
    END;
  END;
  TEXTOUT_P(str,x,y,7,tcol,500,bkcol);
END;

dispgui()
BEGIN
  disp(":",tx,ty,"t");
  disp("/",dx,dy,"d");
  disp("",wx,wy,"w");
END;

disptui()
BEGIN
  PRINT();
  PRINT(drtn[1]+"/"+drtn[2]+"/"+drtn[3]+" "+getweek());
  PRINT(trtn[1]+":"+trtn[2]+":"+initdis(trtn[3]));
END;
