;-> Orologio by Stefano Regattin
;d> 9 ottobre 1998 da Clock
;m> 10,11,16,17,19,24,29 ottobre 1998
;m> 4,6 novembre 1998
;m> 13,14,23 dicembre 1998
;m> 3 gennaio 1999
;m> 9,12 marzo 1999
;m> 25,26 settembre 1999
;m> 1,2,3,5,6,7,8,9,10,11,22,27,28 febbraio 2000
;m> 2,3,4,6,9,10,30,31 marzo 2000
;m> 6,9,16,25,30 aprile 2000
;m> 1,7,9,21 maggio 2000
;m> 2,15 giugno 2000
;m> 12,13 agosto 2000
;m> 16 novembre 2000
;m> 1 gennaio 2001
;------------------
#HaiCambiatoLeDimensioniDellaFinestra=2
#HaiPremutoUnTastoDelTopo=8
#HaiRilasciatoUnGadget=$40
#HaiChiusoLaFinestra=$200

DEFTYPE .l RastPortFinestra

DEFTYPE .b AltezzaFont,AltezzaFontRegistrata
DEFTYPE .b NumeroToolType,StatoAllarme,ToolTypeScritti

DEFTYPE .w

Statement AggiustaDimensioniFinestraZero{}
SHARED Angolo$
SHARED LunXFinestraZero
SHARED LunXSchermo
SHARED LunYFinestraZero
SHARED PosXFinestraZero
SHARED PosXFinestraZeroAngoloOpposto
SHARED PosYFinestraZero
SHARED PosYFinestraZeroAngoloOpposto
 Select Angolo$
 Case "TOP-RIGHT"
  If PosXFinestraZero+(LunXFinestraZero-1)<>PosXFinestraZeroAngoloOpposto
   PosXFinestraZero=PosXFinestraZeroAngoloOpposto-(LunXFinestraZero-1)
  EndIf
 Case "BOTTOM-RIGHT"
  If PosXFinestraZero+(LunXFinestraZero-1)<>PosXFinestraZeroAngoloOpposto
   PosXFinestraZero=PosXFinestraZeroAngoloOpposto-(LunXFinestraZero-1)
  EndIf
  If PosYFinestraZero+(LunYFinestraZero-1)<>PosYFinestraZeroAngoloOpposto
   PosYFinestraZero=PosYFinestraZeroAngoloOpposto-(LunYFinestraZero-1)
  EndIf
 Case "BOTTOM-LEFT"
  If PosYFinestraZero+(LunYFinestraZero-1)<>PosYFinestraZeroAngoloOpposto
   PosYFinestraZero=PosYFinestraZeroAngoloOpposto-(LunYFinestraZero-1)
  EndIf
 End Select
 If LunXFinestraZero>LunXSchermo Then LunXFinestraZero=LunXSchermo
 If PosXFinestraZero+LunXFinestraZero-1>LunXSchermo Then PosXFinestraZero=LunXSchermo-LunXFinestraZero
 If PosXFinestraZero<0 Then PosXFinestraZero=0
 If LunYFinestraZero>WBHeight Then LunYFinestraZero=WBHeight
 If PosYFinestraZero+LunYFinestraZero-1>WBHeight Then PosYFinestraZero=WBHeight-LunYFinestraZero
 If PosYFinestraZero<AltezzaFontSchermo+3 Then PosYFinestraZero=AltezzaFontSchermo+3
End Statement

Statement ApriFinestraZero{}
SHARED ColoreSfondo
SHARED LunXFinestraZero
SHARED LunYFinestraZero
SHARED PosXFinestraZero
SHARED PosYFinestraZero
SHARED RastPortFinestra
 Window 0,PosXFinestraZero,PosYFinestraZero,LunXFinestraZero,LunYFinestraZero,$40F,"",1,2
 WTitle "Orologio","by Stefano Regattin e-mail->stefano.regattin@tin.it"
 RastPortFinestra=RastPort(0)
 WindowFont 0
 Menus Off
 WCls ColoreSfondo
End Statement

Statement LeggiToolType{}
SHARED Angolo$
SHARED AngoloRegistrato$
SHARED ColoreSfondo
SHARED ColoreSfondoRegistrato
SHARED ColoreTesto
SHARED ColoreTestoRegistrato
SHARED FontOrologio$
SHARED FontOrologioRegistrato$
SHARED IconaOrologio$
SHARED AltezzaFont
SHARED AltezzaFontRegistrata
SHARED PosXFinestraZero
SHARED PosXFinestraZeroRegistrata
SHARED PosYFinestraZero
SHARED PosYFinestraZeroRegistrata
 ToolTypeLetti.l=GetIconObject(IconaOrologio$)
 If ToolTypeLetti>0
  NuovoFontOrologio$=FindToolValue("FONTNAME")
  NuovaAltezzaFont$=FindToolValue("FONTSIZE")
  NuovaPosXFinestraZero$=FindToolValue("WINDOWX")
  NuovaPosYFinestraZero$=FindToolValue("WINDOWY")
  NuovoAngolo$=FindToolValue("ANGLE")
  NuovoColoreTesto$=FindToolValue("TEXTCOLOR")
  NuovoColoreSfondo$=FindToolValue("BACKCOLOR")

  If NuovoFontOrologio$<>""
   FontOrologioRegistrato$=NuovoFontOrologio$
   FontOrologio$=NuovoFontOrologio$
  EndIf

  If NuovaAltezzaFont$<>""
   AltezzaFontRegistrata=Val(NuovaAltezzaFont$)
   AltezzaFont=Val(NuovaAltezzaFont$)
  EndIf

  If NuovaPosXFinestraZero$<>""
   PosXFinestraZeroRegistrata=Val(NuovaPosXFinestraZero$)
   PosXFinestraZero=Val(NuovaPosXFinestraZero$)
  EndIf

  If NuovaPosYFinestraZero$<>""
   PosYFinestraZeroRegistrata=Val(NuovaPosYFinestraZero$)
   PosYFinestraZero=Val(NuovaPosYFinestraZero$)
  EndIf

  If NuovoAngolo$<>""
   AngoloRegistrato$=NuovoAngolo$
   Angolo$=NuovoAngolo$
  EndIf

  If NuovoColoreTesto$<>""
   ColoreTestoRegistrato=Val(NuovoColoreTesto$)
   ColoreTesto=Val(NuovoColoreTesto$)
  EndIf

  If NuovoColoreSfondo$<>""
   ColoreSfondoRegistrato=Val(NuovoColoreSfondo$)
   ColoreSfondo=Val(NuovoColoreSfondo$)
  EndIf

  FreeIconObject

 EndIf
End Statement

Statement ScriviToolType{}
SHARED Angolo$
SHARED AngoloRegistrato$
SHARED ColoreSfondo
SHARED ColoreSfondoRegistrato
SHARED ColoreTesto
SHARED ColoreTestoRegistrato
SHARED FontOrologio$
SHARED FontOrologioRegistrato$
SHARED IconaOrologio$
SHARED AltezzaFont
SHARED AltezzaFontRegistrata
SHARED PosXFinestraZero
SHARED PosXFinestraZeroAngoloOpposto
SHARED PosXFinestraZeroRegistrata
SHARED PosYFinestraZero
SHARED PosYFinestraZeroAngoloOpposto
SHARED PosYFinestraZeroRegistrata
SHARED ToolTypeScritti
 ToolTypeLetti.l=GetIconObject(IconaOrologio$)
 If ToolTypeLetti>0
  If FindToolType("DONOTWAIT")=False Then NewToolType "DONOTWAIT",""

  If FindToolType("FONTNAME")=True
   SetToolValue "FONTNAME",FontOrologio$
  Else
   NewToolType "FONTNAME",FontOrologio$
  EndIf

  If FindToolType("FONTSIZE")=True
   SetToolValue "FONTSIZE",Str$(AltezzaFont)
  Else
   NewToolType "FONTSIZE",Str$(AltezzaFont)
  EndIf

  Select Angolo$
  Case "TOP-LEFT"
   If FindToolType("WINDOWX")=True
    SetToolValue "WINDOWX",Str$(PosXFinestraZero)
   Else
    NewToolType "WINDOWX",Str$(PosXFinestraZero)
   EndIf

   If FindToolType("WINDOWY")=True
    SetToolValue "WINDOWY",Str$(PosYFinestraZero)
   Else
    NewToolType "WINDOWY",Str$(PosYFinestraZero)
   EndIf
  Case "TOP-RIGHT"
   If FindToolType("WINDOWX")=True
    SetToolValue "WINDOWX",Str$(PosXFinestraZeroAngoloOpposto)
   Else
    NewToolType "WINDOWX",Str$(PosXFinestraZeroAngoloOpposto)
   EndIf

   If FindToolType("WINDOWY")=True
    SetToolValue "WINDOWY",Str$(PosYFinestraZero)
   Else
    NewToolType "WINDOWY",Str$(PosYFinestraZero)
   EndIf
  Case "BOTTOM-RIGHT"
   If FindToolType("WINDOWX")=True
    SetToolValue "WINDOWX",Str$(PosXFinestraZeroAngoloOpposto)
   Else
    NewToolType "WINDOWX",Str$(PosXFinestraZeroAngoloOpposto)
   EndIf

   If FindToolType("WINDOWY")=True
    SetToolValue "WINDOWY",Str$(PosYFinestraZeroAngoloOpposto)
   Else
    NewToolType "WINDOWY",Str$(PosYFinestraZeroAngoloOpposto)
   EndIf
  Case "BOTTOM-LEFT"
   If FindToolType("WINDOWX")=True
    SetToolValue "WINDOWX",Str$(PosXFinestraZero)
   Else
    NewToolType "WINDOWX",Str$(PosXFinestraZero)
   EndIf

   If FindToolType("WINDOWY")=True
    SetToolValue "WINDOWY",Str$(PosYFinestraZeroAngoloOpposto)
   Else
    NewToolType "WINDOWY",Str$(PosYFinestraZeroAngoloOpposto)
   EndIf
  End Select

  If FindToolType("ANGLE")=True
   SetToolValue "ANGLE",Angolo$
  Else
   NewToolType "ANGLE",Angolo$
  EndIf

  If FindToolType("TEXTCOLOR")=True
   SetToolValue "TEXTCOLOR",Str$(ColoreTesto)
  Else
   NewToolType "TEXTCOLOR",Str$(ColoreTesto)
  EndIf

  If FindToolType("BACKCOLOR")=True
   SetToolValue "BACKCOLOR",Str$(ColoreSfondo)
  Else
   NewToolType "BACKCOLOR",Str$(ColoreSfondo)
  EndIf

  ToolTypeScritti=PutIconObject(IconaOrologio$)
  If ToolTypeScritti=True
   FontOrologioRegistrato$=FontOrologio$
   AltezzaFontRegistrata=AltezzaFont
   AngoloRegistrato$=Angolo$
   Select Angolo$
   Case "TOP-LEFT"
    PosXFinestraZeroRegistrata=PosXFinestraZero
    PosYFinestraZeroRegistrata=PosYFinestraZero
   Case "TOP-RIGHT"
    PosXFinestraZeroRegistrata=PosXFinestraZeroAngoloOpposto
    PosYFinestraZeroRegistrata=PosYFinestraZero
   Case "BOTTOM-RIGHT"
    PosXFinestraZeroRegistrata=PosXFinestraZeroAngoloOpposto
    PosYFinestraZeroRegistrata=PosYFinestraZeroAngoloOpposto
   Case "BOTTOM-LEFT"
    PosXFinestraZeroRegistrata=PosXFinestraZeroAngolo
    PosYFinestraZeroRegistrata=PosYFinestraZeroAngoloOpposto
   End Select
   ColoreTestoRegistrato=ColoreTesto
   ColoreSfondoRegistrato=ColoreSfondo
  EndIf

  FreeIconObject

 EndIf
End Statement

Statement CercaFont{}
SHARED FontOrologio$
SHARED AltezzaFont
 NEWTYPE .FontInfo
  Nome$
  Altezza.w
  Stile.b
  Segnalatori
  PennaUno
  PennaDue
  ModoDisegno
  Pad
 End NEWTYPE

 *Font.FontInfo=ASLFontRequest(0)

 If *Font<>0
  FontOrologio$=*Font\Nome
  AltezzaFont=*Font\Altezza
 EndIf
End Statement

Statement CambiaColori{}
SHARED ColoreSfondo
SHARED ColoreTesto
SHARED LunXSchermo
 ColoriWB=2^WBDepth
 SpazioColori=Max(ColoriWB/16,1)*8
 PosXFinestraDue=WindowX
 PosYFinestraDue=WindowY
 LunXFinestraDue=WLeftOff+16*8+4
 LunYFinestraDue=WTopOff+SpazioColori+1+13+12+4

 If PosXFinestraDue+LunXFinestraDue>LunXSchermo Then PosXFinestraDue=LunXSchermo-LunXFinestraDue
 If PosYFinestraDue+LunYFinestraDue>WBHeight Then PosYFinestraDue=WBHeight-LunYFinestraDue

 Window 2,PosXFinestraDue,PosYFinestraDue,LunXFinestraDue,LunYFinestraDue,$140E,"",-1,-1,1
 WTitle "Colori","Cambia i colori dell'orologio"
 WindowFont 1
 Menus Off

 XFinaleBordo=InnerWidth-8
 GadgetBorder 4,SpazioColori+3,XFinaleBordo,8
 GadgetBorder 4,SpazioColori+16,XFinaleBordo,8

 For Colore=0 To ColoriWB-1
  XColore=(Colore MOD 16)*8
  YColore=(Colore/16)*8
  WBox XColore,YColore,XColore+7,YColore+7,Colore
 Next

 Repeat
  WBox 4,SpazioColori+3,XFinaleBordo+3,SpazioColori+10,ColoreTesto
  WBox 4,SpazioColori+16,XFinaleBordo+3,SpazioColori+23,ColoreSfondo

  EventoFinestraDue.l=WaitEvent

  Select EventoFinestraDue
  Case #HaiPremutoUnTastoDelTopo
   If WMouseX>-1 AND WMouseY>-1 AND WMouseX<128 AND WMouseY<SpazioColori
    Colore=WMouseY/8*16+WMouseX/8
    Select MButtons
    Case 1
     If Colore<>ColoreSfondo Then ColoreTesto=Colore
    Case 2
     If Colore<>ColoreTesto Then ColoreSfondo=Colore
    End Select
   EndIf
  End Select
 Until EventoFinestraDue=#HaiChiusoLaFinestra
 CloseWindow 2
 Use Window 1
End Statement

Statement Parametri{}
SHARED Angolo$
SHARED AngoloRegistrato$
SHARED ColoreSfondo
SHARED ColoreSfondoRegistrato
SHARED ColoreTesto
SHARED ColoreTestoRegistrato
SHARED OraAllarme$
SHARED OraDiOggi$
SHARED FontOrologio$
SHARED FontOrologioRegistrato$
SHARED AltezzaFont
SHARED AltezzaFontRegistrata
SHARED LunXFinestraZero
SHARED LunYFinestraZero
SHARED LunXSchermo
SHARED PosXFinestraZero
SHARED PosXFinestraZeroAngoloOpposto
SHARED PosXFinestraZeroRegistrata
SHARED PosYFinestraZero
SHARED PosYFinestraZeroAngoloOpposto
SHARED PosYFinestraZeroRegistrata
SHARED StatoAllarme
SHARED ToolTypeScritti
 Dim Freccia(5)
 BitMap 0,32,16,2
 Freccia(0)=0:Freccia(1)=0
 Freccia(2)=7:Freccia(3)=0
 Freccia(4)=0:Freccia(5)=7
 Polyf 3,&Freccia(0),1
 GetaShape 0,0,0,8,8
 XFlip 0
 Blit 0,8,0
 GetaShape 0,0,0,8,8
 GetaShape 1,8,0,8,8
 YFlip 1
 Blit 1,16,0
 GetaShape 1,8,0,8,8
 GetaShape 2,16,0,8,8
 XFlip 2
 Blit 2,24,0
 GetaShape 2,16,0,8,8
 GetaShape 3,24,0,8,8
 Freccia(0)=0:Freccia(1)=8
 Freccia(2)=7:Freccia(3)=8
 Freccia(4)=0:Freccia(5)=15
 Polyf 3,&Freccia(0),2
 GetaShape 4,0,8,8,8
 XFlip 4
 Blit 4,8,8
 GetaShape 4,0,8,8,8
 GetaShape 5,8,8,8,8
 YFlip 5
 Blit 5,16,8
 GetaShape 5,8,8,8,8
 GetaShape 6,16,8,8,8
 XFlip 6
 Blit 6,24,8
 GetaShape 6,16,8,8,8
 GetaShape 7,24,8,8,8

 Free BitMap 0

 Use IntuiFont 1
 StringGadget 0,  1, 1,  0, 0,6,6*8
 StringGadget 0,  1,14,  0, 1,25,106
 StringGadget 0, 75, 1,  0, 2,4,4*8
 StringGadget 0,  9,27,  0, 3,5,5*8
 StringGadget 0, 67,27,  0, 4,5,5*8
 StringGadget 0,  9,62,  0, 5,5,5*8
 StringGadget 0, 67,62,  0, 6,5,5*8
 ShapeGadget  0, 92,42,512, 7,0,4
 ShapeGadget  0,103,42,512, 8,1,5
 ShapeGadget  0,103,51,512, 9,2,6
 ShapeGadget  0, 92,51,512,10,3,7
 TextGadget   0, 58, 1,  1,11,"A"
 TextGadget   0,  1,75,  0,12,"    Colori   "
 TextGadget   0,  1,87,  1,13,"*** Salva ***"

 PosXFinestraZero=WindowX-WLeftOff
 PosYFinestraZero=WindowY-WTopOff
 PosXFinestraZeroAngoloOpposto=PosXFinestraZero+(LunXFinestraZero-1)
 PosYFinestraZeroAngoloOpposto=PosYFinestraZero+(LunYFinestraZero-1)

 PosXFinestraUno=WindowX
 PosYFinestraUno=WindowY
 LunXFinestraUno=124
 LunYFinestraUno=WTopOff+105

 If PosXFinestraUno+LunXFinestraUno>LunXSchermo Then PosXFinestraUno=LunXSchermo-LunXFinestraUno
 If PosYFinestraUno+LunYFinestraUno>WBHeight Then PosYFinestraUno=WBHeight-LunYFinestraUno

 Window 1,PosXFinestraUno,PosYFinestraUno,LunXFinestraUno,LunYFinestraUno,$140E,"",-1,-1,0
 WTitle "Parametri","Imposta i parametri dell'orologio"
 WColour 1,0
 WindowFont 1
 Menus Off

 GadgetBorder 92,42,19,17
 WLocate  0,29:Print "X"
 WLocate 58,29:Print "Y"
 WLocate  1,43:Print"Angolo"
 WLocate 40,52:Print"fisso>"
 WLocate  0,64:Print "X"
 WLocate 58,64:Print "Y"

 Toggle 0,11,StatoAllarme
 Redraw 1,11

 Select Angolo$
 Case "TOP-LEFT"
  Enable  0,3
  Enable  0,4
  Disable 0,5
  Disable 0,6
  Toggle  0,7,On
  Redraw 1,7
 Case "TOP-RIGHT"
  Enable  0,3
  Disable 0,4
  Disable 0,5
  Enable  0,6
  Toggle  0,8,On
  Redraw 1,8
 Case "BOTTOM-RIGHT"
  Disable 0,3
  Disable 0,4
  Enable  0,5
  Enable  0,6
  Toggle  0,9,On
  Redraw 1,9
 Case "BOTTOM-LEFT"
  Disable 0,3
  Enable  0,4
  Enable  0,5
  Disable 0,6
  Toggle  0,10,On
  Redraw 1,10
 End Select

 Redraw 1,3
 Redraw 1,4
 Redraw 1,5
 Redraw 1,6

 If OraAllarme$="" Then OraAllarme$=UnLeft$(OraDiOggi$,3)

 Repeat
  SetString 0,0,OraAllarme$
  Redraw 1,0
  SetString 0,1,FontOrologio$
  Redraw 1,1
  SetString 0,2,Str$(AltezzaFont)
  Redraw 1,2
  SetString 0,3,Str$(PosXFinestraZero)
  Redraw 1,3
  SetString 0,4,Str$(PosYFinestraZero)
  Redraw 1,4
  SetString 0,5,Str$(PosXFinestraZeroAngoloOpposto)
  Redraw 1,5
  SetString 0,6,Str$(PosYFinestraZeroAngoloOpposto)
  Redraw 1,6

  ValoriCambiati.b=False
  If FontOrologio$<>FontOrologioRegistrato$ Then ValoriCambiati=True
  If AltezzaFont<>AltezzaFontRegistrata Then ValoriCambiati=True
  Select Angolo$
  Case "TOP-LEFT"
   If PosXFinestraZero<>PosXFinestraZeroRegistrata Then ValoriCambiati=True
   If PosYFinestraZero<>PosYFinestraZeroRegistrata Then ValoriCambiati=True
  Case "TOP-RIGHT"
   If PosXFinestraZero+(LunXFinestraZero-1)<>PosXFinestraZeroRegistrata Then ValoriCambiati=True
   If PosYFinestraZero<>PosYFinestraZeroRegistrata Then ValoriCambiati=True
  Case "BOTTOM-RIGHT"
   If PosXFinestraZero+(LunXFinestraZero-1)<>PosXFinestraZeroRegistrata Then ValoriCambiati=True
   If PosYFinestraZero+(LunYFinestraZero-1)<>PosYFinestraZeroRegistrata Then ValoriCambiati=True
  Case "BOTTOM-LEFT"
   If PosXFinestraZero<>PosXFinestraZeroRegistrata Then ValoriCambiati=True
   If PosYFinestraZero+(LunYFinestraZero-1)<>PosYFinestraZeroRegistrata Then ValoriCambiati=True
  End Select
  If Angolo$<>AngoloRegistrato$ Then ValoriCambiati=True
  If ColoreTesto<>ColoreTestoRegistrato Then ValoriCambiati=True
  If ColoreSfondo<>ColoreSfondoRegistrato Then ValoriCambiati=True
  If ValoriCambiati=True Then Enable 0,13 Else Toggle 0,13,Off:Disable 0,13
  Redraw 1,13

  EventoFinestraUno.l=WaitEvent

  Select EventoFinestraUno
  Case #HaiRilasciatoUnGadget
   If GadgetHit<7 Then ActivateString 1,GadgetHit
   Select GadgetHit
   Case 0
    OraAllarme$=StringText$(0,0)
   Case 1
    NuovoFontOrologio$=StringText$(0,1)
    If NuovoFontOrologio$="" Then CercaFont{}
    If Right$(NuovoFontOrologio$,5)<>".font" Then NuovoFontOrologio$+".font"
    If Len(NuovoFontOrologio$)>0
     If Exists("FONTS:"+NuovoFontOrologio$)
      FontOrologio$=NuovoFontOrologio$
     EndIf
    EndIf
   Case 2
    AltezzaFont=Val(StringText$(0,2))
    AltezzaFont=Max(AltezzaFont,6)
   Case 3
    PosXFinestraZero=Val(StringText$(0,3))
   Case 4
    PosYFinestraZero=Val(StringText$(0,4))
   Case 5
    PosXFinestraZeroAngoloOpposto=Val(StringText$(0,5))
   Case 6
    PosYFinestraZeroAngoloOpposto=Val(StringText$(0,6))
   Case 7
    If GadgetStatus(0,7)=True Then Angolo$="TOP-LEFT"
   Case 8
    If GadgetStatus(0,8)=True Then Angolo$="TOP-RIGHT"
   Case 9
    If GadgetStatus(0,9)=True Then Angolo$="BOTTOM-RIGHT"
   Case 10
    If GadgetStatus(0,10)=True Then Angolo$="BOTTOM-LEFT"
   Case 11
    StatoAllarme=GadgetStatus(0,11)
   Case 12
    CambiaColori{}
    Toggle 0,12,Off
   Case 13
    ScriviToolType{}
    If ToolTypeScritti=True
     Toggle 0,13,Off
     Disable 0,13
     Redraw 1,13
    Else
     Toggle 0,13,On
    EndIf
   End Select

   Select Angolo$
   Case "TOP-LEFT"
    PosXFinestraZeroAngoloOpposto=PosXFinestraZero+(LunXFinestraZero-1)
    PosYFinestraZeroAngoloOpposto=PosYFinestraZero+(LunYFinestraZero-1)
    Enable  0,3
    Enable  0,4
    Disable 0,5
    Disable 0,6
   Case "TOP-RIGHT"
    PosXFinestraZero=PosXFinestraZeroAngoloOpposto-(LunXFinestraZero-1)
    PosYFinestraZeroAngoloOpposto=PosYFinestraZero+(LunYFinestraZero-1)
    Disable 0,3
    Enable  0,4
    Enable  0,5
    Disable 0,6
   Case "BOTTOM-RIGHT"
    PosXFinestraZero=PosXFinestraZeroAngoloOpposto-(LunXFinestraZero-1)
    PosYFinestraZero=PosYFinestraZeroAngoloOpposto-(LunYFinestraZero-1)
    Disable 0,3
    Disable 0,4
    Enable  0,5
    Enable  0,6
   Case "BOTTOM-LEFT"
    PosXFinestraZeroAngoloOpposto=PosXFinestraZero+(LunXFinestraZero-1)
    PosYFinestraZero=PosYFinestraZeroAngoloOpposto-(LunYFinestraZero-1)
    Enable  0,3
    Disable 0,4
    Disable 0,5
    Enable  0,6
   End Select

  End Select
 Until EventoFinestraUno=#HaiChiusoLaFinestra
 CloseWindow 1
 Use Window 0
End Statement

Statement DataDiOggi{}
SHARED Allarme$
SHARED DataDiOggi$
SHARED LunghezzaDataDiOggi
SHARED LunghezzaScrittaAllarme
SHARED RastPortFinestra
 Giorni.l=SystemDate
 Select WeekDay
 Case 0
  GiornoDellaSettimana$="Dom"
 Case 1
  GiornoDellaSettimana$="Lun"
 Case 2
  GiornoDellaSettimana$="Mar"
 Case 3
  GiornoDellaSettimana$="Mer"
 Case 4
  GiornoDellaSettimana$="Gio"
 Case 5
  GiornoDellaSettimana$="Ven"
 Case 6
  GiornoDellaSettimana$="Sab"
 End Select
 If Giorni>8400
  Giorni-8400
  Repeat
   If Anno MOD 4=3
    AnnoBisestile=True
    If Giorni>365 Then Giorni-366 Else FineCicloInfinito=True
   Else
    AnnoBisestile=False
    If Giorni>364 Then Giorni-365 Else FineCicloInfinito=True
   EndIf
   Anno+1
   If FineCicloInfinito=True Pop Repeat:Goto FineCicloInfinito
  Until False
  FineCicloInfinito
  Anno$=StripLead$(Str$(2000+Anno),32)
  If AnnoBisestile=True
   If Giorni>0 AND Giorni<32
    Giorno$=StripLead$(Str$(Giorni),32)
    Mese$="gennaio"
   EndIf
   If Giorni>31 AND Giorni<61
    Giorno$=StripLead$(Str$(Giorni-31),32)
    Mese$="febbraio"
   EndIf
   If Giorni>60 AND Giorni<92
    Giorno$=StripLead$(Str$(Giorni-60),32)
    Mese$="marzo"
   EndIf
   If Giorni>91 AND Giorni<122
    Giorno$=StripLead$(Str$(Giorni-91),32)
    Mese$="aprile"
   EndIf
   If Giorni>121 AND Giorni<153
    Giorno$=StripLead$(Str$(Giorni-121),32)
    Mese$="maggio"
   EndIf
   If Giorni>152 AND Giorni<183
    Giorno$=StripLead$(Str$(Giorni-152),32)
    Mese$="giugno"
   EndIf
   If Giorni>182 AND Giorni<214
    Giorno$=StripLead$(Str$(Giorni-182),32)
    Mese$="luglio"
   EndIf
   If Giorni>213 AND Giorni<245
    Giorno$=StripLead$(Str$(Giorni-213),32)
    Mese$="agosto"
   EndIf
   If Giorni>244 AND Giorni<275
    Giorno$=StripLead$(Str$(Giorni-244),32)
    Mese$="settembre"
   EndIf
   If Giorni>274 AND Giorni<306
    Giorno$=StripLead$(Str$(Giorni-274),32)
    Mese$="ottobre"
   EndIf
   If Giorni>305 AND Giorni<336
    Giorno$=StripLead$(Str$(Giorni-305),32)
    Mese$="novembre"
   EndIf
   If Giorni>335 AND Giorni<367
    Giorno$=StripLead$(Str$(Giorni-335),32)
    Mese$="dicembre"
   EndIf
  Else
   If Giorni>0 AND Giorni<32
    Giorno$=StripLead$(Str$(Giorni),32)
    Mese$="gennaio"
   EndIf
   If Giorni>31 AND Giorni<60
    Giorno$=StripLead$(Str$(Giorni-31),32)
    Mese$="febbraio"
   EndIf
   If Giorni>59 AND Giorni<91
    Giorno$=StripLead$(Str$(Giorni-59),32)
    Mese$="marzo"
   EndIf
   If Giorni>90 AND Giorni<121
    Giorno$=StripLead$(Str$(Giorni-90),32)
    Mese$="aprile"
   EndIf
   If Giorni>120 AND Giorni<152
    Giorno$=StripLead$(Str$(Giorni-120),32)
    Mese$="maggio"
   EndIf
   If Giorni>151 AND Giorni<182
    Giorno$=StripLead$(Str$(Giorni-151),32)
    Mese$="giugno"
   EndIf
   If Giorni>181 AND Giorni<213
    Giorno$=StripLead$(Str$(Giorni-181),32)
    Mese$="luglio"
   EndIf
   If Giorni>212 AND Giorni<244
    Giorno$=StripLead$(Str$(Giorni-212),32)
    Mese$="agosto"
   EndIf
   If Giorni>243 AND Giorni<274
    Giorno$=StripLead$(Str$(Giorni-243),32)
    Mese$="settembre"
   EndIf
   If Giorni>273 AND Giorni<305
    Giorno$=StripLead$(Str$(Giorni-273),32)
    Mese$="ottobre"
   EndIf
   If Giorni>304 AND Giorni<335
    Giorno$=StripLead$(Str$(Giorni-304),32)
    Mese$="novembre"
   EndIf
   If Giorni>334 AND Giorni<366
    Giorno$=StripLead$(Str$(Giorni-334),32)
    Mese$="dicembre"
   EndIf
  EndIf
 Else
  Giorno$=Str$(Days)
  Select Months
  Case 1
   Mese$="gennaio"
  Case 2
   Mese$="febbraio"
  Case 3
   Mese$="marzo"
  Case 4
   Mese$="aprile"
  Case 5
   Mese$="maggio"
  Case 6
   Mese$="giugno"
  Case 7
   Mese$="luglio"
  Case 8
   Mese$="agosto"
  Case 9
   Mese$="settembre"
  Case 10
   Mese$="ottobre"
  Case 11
   Mese$="novembre"
  Case 12
   Mese$="dicembre"
  End Select
  Anno$=Str$(Years)
 EndIf
 DataDiOggi$=" "+GiornoDellaSettimana$+", "+Giorno$+" "+Mese$+" "+Anno$+" "
 LunghezzaDataDiOggi.w=TextLength_(RastPortFinestra,&DataDiOggi$,Len(DataDiOggi$))
End Statement

;*********************************************
;Fine delle procedure ed inizio del programma
;Procedures end and program start
;*********************************

WBStartup

WbToScreen 0

IndirizzoSchermo.l=Peek.l(Addr Screen(0))
LunXSchermo=Peek.w(IndirizzoSchermo+12)

FontOrologio$="Data70.font"
AltezzaFont=13

AltezzaFontSchermo.b=8
OpenFontPrefs
 AltezzaFontSchermo=DefaultFontHeight(2)
CloseFontPrefs

IconaOrologio$=ProgPath$+".info"

PosXFinestraZero=0
PosYFinestraZero=AltezzaFontSchermo+3
LunXFinestraZero=70
LunYFinestraZero=30
Angolo$="TOP-LEFT"
ColoreTesto=1
ColoreSfondo=0

LeggiToolType{}

LoadFont 0,FontOrologio$,AltezzaFont

LoadFont 1,"topaz.font",8

Select Angolo$
Case "TOP-RIGHT"
 PosXFinestraZeroAngoloOpposto=PosXFinestraZero
 PosXFinestraZero-(LunXFinestraZero-1)
Case "BOTTOM-RIGHT"
 PosXFinestraZeroAngoloOpposto=PosXFinestraZero
 PosXFinestraZero-(LunXFinestraZero-1)
 PosYFinestraZeroAngoloOpposto=PosYFinestraZero
 PosYFinestraZero-(LunYFinestraZero-1)
Case "BOTTOM-LEFT"
 PosYFinestraZeroAngoloOpposto=PosYFinestraZero
 PosYFinestraZero-(LunYFinestraZero-1)
End Select

AggiustaDimensioniFinestraZero{}
ApriFinestraZero{}

DataDiOggi$=Date$(SystemDate)
DataDiOggi{}

LunXFinestraZero=WLeftOff+LunghezzaDataDiOggi+WTopOff+4
LunYFinestraZero=WTopOff+AltezzaFont*2+4

Select Angolo$
Case "TOP-LEFT"
 PosXFinestraZeroAngoloOpposto=PosXFinestraZero+(LunXFinestraZero-1)
 PosYFinestraZeroAngoloOpposto=PosYFinestraZero+(LunYFinestraZero-1)
Case "TOP-RIGHT"
 PosXFinestraZero=PosXFinestraZeroAngoloOpposto
 PosXFinestraZero-(LunXFinestraZero-1)
 PosYFinestraZeroAngoloOpposto=PosYFinestraZero+(LunYFinestraZero-1)
Case "BOTTOM-RIGHT"
 PosXFinestraZero=PosXFinestraZeroAngoloOpposto
 PosXFinestraZero-(LunXFinestraZero-1)
 PosYFinestraZero=PosYFinestraZeroAngoloOpposto
 PosYFinestraZero-(LunYFinestraZero-1)
Case "BOTTOM-LEFT"
 PosXFinestraZeroAngoloOpposto=PosXFinestraZero+(LunXFinestraZero-1)
 PosYFinestraZero=PosYFinestraZeroAngoloOpposto
 PosYFinestraZero-(LunYFinestraZero-1)
End Select

CloseWindow 0

AggiustaDimensioniFinestraZero{}
ApriFinestraZero{}

XAllarme=InnerWidth-1-AltezzaFont/2
YAllarme=InnerHeight-1-AltezzaFont/2
RaggioMassimoCerchio=AltezzaFont/2
SetZone 0,XAllarme,YAllarme,RaggioMassimoCerchio

Repeat
 EventoFinestraZero.l=Event

 Select EventoFinestraZero
 Case #HaiCambiatoLeDimensioniDellaFinestra
  AltezzaFont=InnerHeight/2
  If AltezzaFont<4 Then AltezzaFont=4
  LunXFinestraZero=WindowWidth
  LunYFinestraZero=WindowHeight
  RaggioMassimoCerchio=AltezzaFont/2
  LoadFont 0,FontOrologio$,AltezzaFont
  WindowFont 0
  WCls ColoreSfondo
  XAllarme=InnerWidth-1-AltezzaFont/2
  YAllarme=InnerHeight-1-AltezzaFont/2
  RaggioMassimoCerchio=AltezzaFont/2
  RaggioCerchio=RaggioMassimoCerchio
  SetZone 0,XAllarme,YAllarme,RaggioMassimoCerchio
 Case #HaiPremutoUnTastoDelTopo
  Select MButtons
  Case 1
   If StatoAllarme=On AND Zone(WMouseX,WMouseY)=0
    StatoAllarme=Off
   Else
    PrecedenteFontOrologio$=FontOrologio$
    PrecedenteAltezzaFont.b=AltezzaFont
    PrecedenteColoreSfondo=ColoreSfondo

    Parametri{}

    Use Window 0

    FinestraZeroAggiornata.b=False
    If FontOrologio$<>PrecedenteFontOrologio$ OR AltezzaFont<>PrecedenteAltezzaFont
     LoadFont 0,FontOrologio$,AltezzaFont
     WindowFont 0

     DataDiOggi{}

     LunXFinestraZero=WLeftOff+LunghezzaDataDiOggi+WTopOff+2
     LunYFinestraZero=WTopOff+AltezzaFont*2+4

     CloseWindow 0

     AggiustaDimensioniFinestraZero{}
     ApriFinestraZero{}

     FinestraZeroAggiornata=True
    EndIf
    If FinestraZeroAggiornata=False
     If PosXFinestraZero<>WindowX-WLeftOff OR PosYFinestraZero<>WindowY-WTopOff
      CloseWindow 0

      AggiustaDimensioniFinestraZero{}
      ApriFinestraZero{}
     EndIf
    EndIf
    XAllarme=InnerWidth-1-AltezzaFont/2
    YAllarme=InnerHeight-1-AltezzaFont/2
    RaggioMassimoCerchio=AltezzaFont/2
    RaggioCerchio=RaggioMassimoCerchio
    SetZone 0,XAllarme,YAllarme,RaggioMassimoCerchio
   EndIf
   If ColoreSfondo<>PrecedenteColoreSfondo Then WCls ColoreSfondo
  End Select
  FlushEvents #HaiPremutoUnTastoDelTopo
 End Select

 DataDiOggi$=Date$(SystemDate)

 DataDiOggi{}

 XData.w=(InnerWidth-LunghezzaDataDiOggi)/2
 WColour ColoreTesto,ColoreSfondo
 WLocate XData,0
 Print DataDiOggi$

 OraDiOggi$="  "+Str$(Hours/10)
 OraDiOggi$+Str$(Hours MOD 10)+":"
 OraDiOggi$+Str$(Mins/10)
 OraDiOggi$+Str$(Mins MOD 10)+":"
 OraDiOggi$+Str$(Secs/10)
 OraDiOggi$+Str$(Secs MOD 10)+"  "
 LunghezzaOraDiOggi.w=TextLength_(RastPortFinestra,&OraDiOggi$,Len(OraDiOggi$))
 XOra.w=(InnerWidth-LunghezzaOraDiOggi)/2
 WLocate XOra,AltezzaFont
 Print OraDiOggi$

 OraDiOggi$=StripTrail$(StripLead$(OraDiOggi$,32),32)

 Minuti.b=Val(Mid$(OraDiOggi$,4,2))
 If Minuti=0
  If OraSuonata.b=False
   Ora.b=Val(Left$(OraDiOggi$,2)) MOD 12
   If Ora=0 Then Ora=12
  EndIf
  If Ora>0
   BeepScreen 0
   Ora-1
   OraSuonata=True
  EndIf
 Else
  If OraSuonata=True Then OraSuonata=False
 EndIf

 If StatoAllarme=On
  If Left$(OraDiOggi$,5)=OraAllarme$ Then BeepScreen 0
  WCircle XAllarme,YAllarme,RaggioCerchio,ColoreTesto
 EndIf

 If EventoFinestraZero<>#HaiChiusoLaFinestra Then Delay_ 50

 If StatoAllarme=On
  WCircle XAllarme,YAllarme,RaggioCerchio,ColoreSfondo
  RaggioCerchio+1
  If RaggioCerchio>RaggioMassimoCerchio Then RaggioCerchio=1
 EndIf
Until EventoFinestraZero=#HaiChiusoLaFinestra
End
