;-> Orologio by Stefano Maria 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,29,30 gennaio 2001
;m> 25 Aprile 2001
;m> 16 luglio 2001
;m> 8,30 giugno 2002
;m> 8,25 luglio 2002
;m> 3,22 agosto 2002
;--------------------
#HaiCambiatoLeDimensioniDellaFinestra=2
#HaiPremutoUnTastoDelTopo=8
#HaiRilasciatoUnGadget=$40
#HaiChiusoLaFinestra=$200

DEFTYPE .l RastPortFinestra

DEFTYPE .b AltezzaFonteOrologio,AltezzaFonteOrologioRegistrata,AltezzaFonteSchermo,NumeroTooltype,StatoAllarme,TooltypeScritti

DEFTYPE .w

Statement AggiustaDimensioniFinestraZero{}
SHARED AltezzaFonteSchermo
SHARED Angolo$
SHARED LunXFinestraZero
SHARED LunXSchermo
SHARED LunYFinestraZero
SHARED LunYSchermo
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-1 Then PosXFinestraZero=LunXSchermo-LunXFinestraZero
 If PosXFinestraZero<0 Then PosXFinestraZero=0:LunXFinestraZero=LunXSchermo-PosXFinestraZero
 If LunYFinestraZero>LunYSchermo Then LunYFinestraZero=LunYSchermo
 If PosYFinestraZero+LunYFinestraZero-1>LunYSchermo-1 Then PosYFinestraZero=LunYSchermo-LunYFinestraZero
 If PosYFinestraZero<AltezzaFonteSchermo+3
  PosYFinestraZero=AltezzaFonteSchermo+3
  LunYFinestraZero=LunYSchermo-PosYFinestraZero
 EndIf
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 Maria Regattin, pearl_harbor@esseerre.mailshell.com"
 RastPortFinestra=RastPort(0)
 WindowFont 0
 Menus Off
 WCls ColoreSfondo
End Statement

Statement LeggiTooltype{}
SHARED AltezzaFonteOrologio
SHARED AltezzaFonteOrologioRegistrata
SHARED Angolo$
SHARED AngoloRegistrato$
SHARED ColoreSfondo
SHARED ColoreSfondoRegistrato
SHARED ColoreTesto
SHARED ColoreTestoRegistrato
SHARED FonteOrologio$
SHARED FonteOrologioRegistrato$
SHARED IconaOrologio$
SHARED PosXFinestraZero
SHARED PosXFinestraZeroRegistrata
SHARED PosYFinestraZero
SHARED PosYFinestraZeroRegistrata
 TooltypeLetti.l=GetIconObject(IconaOrologio$)
 If TooltypeLetti>0
  NuovaFonteOrologio$=FindToolValue("FONTNAME")
  NuovaAltezzaFonteOrologio$=FindToolValue("FONTSIZE")
  NuovaPosXFinestraZero$=FindToolValue("WINDOWX")
  NuovaPosYFinestraZero$=FindToolValue("WINDOWY")
  NuovoAngolo$=FindToolValue("CORNER")
  NuovoColoreTesto$=FindToolValue("TEXTCOLOR")
  NuovoColoreSfondo$=FindToolValue("BACKCOLOR")

  If NuovaFonteOrologio$<>""
   FonteOrologioRegistrato$=NuovaFonteOrologio$
   FonteOrologio$=NuovaFonteOrologio$
  EndIf

  If NuovaAltezzaFonteOrologio$<>""
   AltezzaFonteOrologioRegistrata=Val(NuovaAltezzaFonteOrologio$)
   AltezzaFonteOrologio=Val(NuovaAltezzaFonteOrologio$)
  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 FonteOrologio$
SHARED FonteOrologioRegistrato$
SHARED IconaOrologio$
SHARED AltezzaFonteOrologio
SHARED AltezzaFonteOrologioRegistrata
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",FonteOrologio$
  Else
   NewToolType "FONTNAME",FonteOrologio$
  EndIf

  If FindToolType("FONTSIZE")=True
   SetToolValue "FONTSIZE",Str$(AltezzaFonteOrologio)
  Else
   NewToolType "FONTSIZE",Str$(AltezzaFonteOrologio)
  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("CORNER")=True
   SetToolValue "CORNER",Angolo$
  Else
   NewToolType "CORNER",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
   FonteOrologioRegistrato$=FonteOrologio$
   AltezzaFonteOrologioRegistrata=AltezzaFonteOrologio
   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 NuovaFonteOrologio$
SHARED AltezzaFonteOrologio
 NEWTYPE .FontInfo
  Nome$
  Altezza.w
  Stile.b
  Segnalatori
  PennaUno
  PennaDue
  ModoDisegno
  Pad
 End NEWTYPE

 *Font.FontInfo=ASLFontRequest(0)

 If *Font<>0
  NuovaFonteOrologio$=*Font\Nome
  AltezzaFonteOrologio=*Font\Altezza
 EndIf
End Statement

Statement CambiaColori{}
SHARED ColoreSfondo
SHARED ColoreTesto
SHARED LunXSchermo
SHARED LunYSchermo
 ColoriWB=2^WBDepth
 SpazioColori=Max(ColoriWB/16,1)*8
 LarghezzaColore=Max(16/ColoriWB*8,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>LunYSchermo Then PosYFinestraDue=LunYSchermo-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*LarghezzaColore) MOD (16*8)
  YColore=(Colore/16)*8
  WBox XColore,YColore,XColore+LarghezzaColore-1,YColore+7,Colore
 Next

 Repeat
  WBox 4,SpazioColori+3,XFinaleBordo+3,SpazioColori+10,ColoreTesto
  WLocate 4,SpazioColori+3:WColour ColoreSfondo,ColoreTesto:Print ColoreTesto
  WBox 4,SpazioColori+16,XFinaleBordo+3,SpazioColori+23,ColoreSfondo
  WLocate 4,SpazioColori+16:WColour ColoreTesto,ColoreSfondo:Print 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/LarghezzaColore
    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 AltezzaFonteOrologio
SHARED AltezzaFonteOrologioRegistrata
SHARED ColoreSfondo
SHARED ColoreSfondoRegistrato
SHARED ColoreTesto
SHARED ColoreTestoRegistrato
SHARED OraAllarme$
SHARED OraDiOggi$
SHARED FonteOrologio$
SHARED FonteOrologioRegistrato$
SHARED LunXFinestraZero
SHARED LunYFinestraZero
SHARED LunXSchermo
SHARED LunYSchermo
SHARED NuovaFonteOrologio$
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>LunYSchermo Then PosYFinestraUno=LunYSchermo-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"
  Disable 0,3
  Enable  0,4
  Enable  0,5
  Disable 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,FonteOrologio$
  Redraw 1,1
  SetString 0,2,Str$(AltezzaFonteOrologio)
  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 FonteOrologio$<>FonteOrologioRegistrato$ Then ValoriCambiati=True
  If AltezzaFonteOrologio<>AltezzaFonteOrologioRegistrata 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
    NuovaFonteOrologio$=StringText$(0,1)
    If NuovaFonteOrologio$="" Then CercaFont{}
    If Len(NuovaFonteOrologio$)>0
     If Right$(NuovaFonteOrologio$,5)<>".font" Then NuovaFonteOrologio$+".font"
     If Exists("FONTS:"+NuovaFonteOrologio$)
      FonteOrologio$=NuovaFonteOrologio$
     EndIf
    EndIf
   Case 2
    AltezzaFonteOrologio=Val(StringText$(0,2))
    AltezzaFonteOrologio=Max(AltezzaFonteOrologio,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)
LunYSchermo=Peek.w(IndirizzoSchermo+14)

FonteOrologio$="topaz.font"
AltezzaFonteOrologio=11

OpenFontPrefs
 AltezzaFonteSchermo=DefaultFontHeight(2)
CloseFontPrefs
If AltezzaFonteSchermo=0 Then AltezzaFonteSchermo=8

IconaOrologio$=ProgPath$+".info"

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

LeggiTooltype{}

LoadFont 0,FonteOrologio$,AltezzaFonteOrologio

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+AltezzaFonteOrologio*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-AltezzaFonteOrologio/2
YAllarme=InnerHeight-1-AltezzaFonteOrologio/2
RaggioMassimoCerchio=AltezzaFonteOrologio/2
SetZone 0,XAllarme,YAllarme,RaggioMassimoCerchio

Repeat
 EventoFinestraZero.l=Event

 Select EventoFinestraZero
 Case #HaiCambiatoLeDimensioniDellaFinestra
  AltezzaFonteOrologio=InnerHeight/2
  If AltezzaFonteOrologio<4 Then AltezzaFonteOrologio=4
  LunXFinestraZero=WindowWidth
  LunYFinestraZero=WindowHeight
  RaggioMassimoCerchio=AltezzaFonteOrologio/2
  LoadFont 0,FonteOrologio$,AltezzaFonteOrologio
  WindowFont 0
  WCls ColoreSfondo
  XAllarme=InnerWidth-1-AltezzaFonteOrologio/2
  YAllarme=InnerHeight-1-AltezzaFonteOrologio/2
  RaggioMassimoCerchio=AltezzaFonteOrologio/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
    PrecedenteFonteOrologio$=FonteOrologio$
    PrecedenteAltezzaFonteOrologio.b=AltezzaFonteOrologio
    PrecedenteColoreSfondo=ColoreSfondo

    Parametri{}

    Use Window 0

    FinestraZeroAggiornata.b=False
    If FonteOrologio$<>PrecedenteFonteOrologio$ OR AltezzaFonteOrologio<>PrecedenteAltezzaFonteOrologio
     LoadFont 0,FonteOrologio$,AltezzaFonteOrologio
     WindowFont 0

     DataDiOggi{}

     LunXFinestraZero=WLeftOff+LunghezzaDataDiOggi+WTopOff+2
     LunYFinestraZero=WTopOff+AltezzaFonteOrologio*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-AltezzaFonteOrologio/2
    YAllarme=InnerHeight-1-AltezzaFonteOrologio/2
    RaggioMassimoCerchio=AltezzaFonteOrologio/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,AltezzaFonteOrologio
 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
