;------------Светодиодная матрица - МОДЖЕТ (антигаджет)-----------
;{---------Запрет на запуск программы более одного раза-----------
a = CreateSemaphore_(#Null,0,1,"MODGET 8x8")
If a<>0 And GetLastError_()= #ERROR_ALREADY_EXISTS
CloseHandle_(a)
End
EndIf
;}---------------------------------------------------------------
;{-----------------------Enumeration------------------------------
Enumeration
#Window_0
#Window_1
#Window_2
#Window_3
#ButtonImage_3
EndEnumeration
;}
;{ Images
Enumeration
#Image_Image_1
#Image_ButtonImage_1
#Image_ButtonImage_2
#Image_ButtonImage_3
EndEnumeration
UsePNGImageDecoder()
;}
;{ Gadgets
Enumeration
#Button_2
#ComboBox_0
EndEnumeration
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}----------------------------------------------------------------
;{----------------------Глобальные переменные---------------------
#Window_0=0
Global NO_Device.s="отключен" ;сообщения программы
Global YES_Device.s="подключен" ;сообщения программы
Global About.s="О программе МОДЖЕТ 8x8"
Global Mod.s="МОДЖЕТ 8x8"
Global Ver.s="Версия 1.0"
Global open.s="Открыть файл"
Global Maska.s="Текстовые файлы (*.txt)|*.txt"
Global Lib1.s="Файл отсутствует!"
Global Lib2.s="Для отображения времени"
Global Lib3.s="требуется файл"
#USB_PID=$5555 ;идентификатор PID
#USB_VID=$FFFF ;идентификатор VID
Global R_DeviceHandle, W_DeviceHandle
Global Text.s
Global Put.s ;абсолютный путь к файлу
#XML = 0
SityNew$="29838"; - Барнаул
pt.w = 2
tp.w
NOT_Flag.b = 0
Structure MeteoInfo
State.b
Sity.s
Array DataDay.s(4)
Array cloudiness.s(4)
Array precipitation.s(4)
Array rpower.s(4)
Array spower.s(4)
Array PRESSUREmin.s(4)
Array PRESSUREmax.s(4)
Array TEMPERATUREmin.s(4)
Array TEMPERATUREmax.s(4)
Array HEATmin.s(4)
Array HEATmax.s(4)
Array WINDmin.s(4)
Array WINDmax.s(4)
Array RELWETmin.s(4)
Array RELWETmax.s(4)
Array direction.s(4)
EndStructure
Structure ProgramItitThread
meteo.b
text.b
EndStructure
G_Meteo_Info.MeteoInfo
G_Meteo_Info\State = -1
ProgramItitThread.ProgramItitThread
;}
Procedure GisMet_XML_Data(*CurrentNode, CurrentSublevel, *Info.MeteoInfo)
Static N
If CurrentSublevel=0
N=0
EndIf
If XMLNodeType(*CurrentNode) = #PB_XML_Normal
If GetXMLNodeName(*CurrentNode) = "FORECAST" : N+1 : EndIf
If ExamineXMLAttributes(*CurrentNode)
While NextXMLAttribute(*CurrentNode)
Select XMLAttributeName(*CurrentNode)
Case "sname"
*Info\Sity=XMLAttributeValue(*CurrentNode)
Case "day"
day$=XMLAttributeValue(*CurrentNode)
Case "month"
month$=XMLAttributeValue(*CurrentNode)
Case "year"
year$=XMLAttributeValue(*CurrentNode)
Case "hour"
hour$=XMLAttributeValue(*CurrentNode)
Case "weekday"
Select XMLAttributeValue(*CurrentNode)
Case "1"
weekday$= "в воскресенье"
Case "2"
weekday$= "в понедельник"
Case "3"
weekday$= "во вторник"
Case "4"
weekday$= "в среду"
Case "5"
weekday$= "в четверг"
Case "6"
weekday$= "в пятницу"
Case "7"
weekday$= "в субботу"
EndSelect
dataProg$= day$ + "." + month$ +"." + year$+"г., "+ #CRLF$+weekday$+","+ #CRLF$+"на " + hour$
*Info\DataDay(N)=dataProg$
;Debug dataProg$ +" "+Str(N)
Case "cloudiness"; Облачность
Select XMLAttributeValue(*CurrentNode)
Case "0"
*Info\cloudiness(N)= "ясно"
Case "1"
*Info\cloudiness(N)= "малооблачно"
Case "2"
*Info\cloudiness(N)= "облачно"
Case "3"
*Info\cloudiness(N)= "пасмурно"
EndSelect
Case "precipitation" ; Осадки
Select XMLAttributeValue(*CurrentNode)
Case "4"
*Info\precipitation(N)= "дождь"
Case "5"
*Info\precipitation(N)= "ливень"
Case "6","7"
*Info\precipitation(N)= "снег"
Case "8"
*Info\precipitation(N)= "гроза"
Case "9"
*Info\precipitation(N)= "нет данных"
Case "10"
*Info\precipitation(N)= "без осадков"
EndSelect
;Debug cloudiness(N) + ", " + precipitation(N)
Case "rpower" ; интенсивность осадков
Select XMLAttributeValue(*CurrentNode)
Case "0"
*Info\rpower(N)= "возможен дождь/снег"
Case "1"
*Info\rpower(N)= "дождь/снег"
EndSelect
Case "spower" ; вероятность грозы
Select XMLAttributeValue(*CurrentNode)
Case "0"
*Info\spower(N)= "возможна гроза"
Case "1"
*Info\spower(N)= "гроза"
EndSelect
Case "min"
Select GetXMLNodeName(*CurrentNode)
Case "PRESSURE"
*Info\PRESSUREmin(N) = XMLAttributeValue(*CurrentNode)
Case "TEMPERATURE"
*Info\TEMPERATUREmin(N) = XMLAttributeValue(*CurrentNode)
Case "HEAT"
*Info\HEATmin(N) = XMLAttributeValue(*CurrentNode)
Case "WIND"
*Info\WINDmin(N) = XMLAttributeValue(*CurrentNode)
Case "RELWET"
*Info\RELWETmin(N) = XMLAttributeValue(*CurrentNode)
EndSelect
Case "max"
Select GetXMLNodeName(*CurrentNode)
Case "PRESSURE"
*Info\PRESSUREmax(N) = XMLAttributeValue(*CurrentNode)
Case "TEMPERATURE"
*Info\TEMPERATUREmax(N) = XMLAttributeValue(*CurrentNode)
Case "HEAT"
*Info\HEATmax(N) = XMLAttributeValue(*CurrentNode)
Case "WIND"
*Info\WINDmax(N) = XMLAttributeValue(*CurrentNode)
Case "RELWET"
*Info\RELWETmax(N) = XMLAttributeValue(*CurrentNode)
EndSelect
Case "direction"
Select XMLAttributeValue(*CurrentNode)
Case "0"
*Info\direction(N) = "северный"
Case "1"
*Info\direction(N) = "северо-восточный"
Case "2"
*Info\direction(N) = "восточный"
Case "3"
*Info\direction(N) = "юго-восточный"
Case "4"
*Info\direction(N) = "южный"
Case "5"
*Info\direction(N) = "юго-западный"
Case "6"
*Info\direction(N) = "западный"
Case "7"
*Info\direction(N) = "северо-западный"
EndSelect
EndSelect
Wend
EndIf
;
*ChildNode = ChildXMLNode(*CurrentNode)
While *ChildNode <> 0
GisMet_XML_Data(*ChildNode, CurrentSublevel+1, *Info)
*ChildNode = NextXMLNode(*ChildNode)
Wend
EndIf
EndProcedure
Procedure.l DownloadToMem(URL.s, *lpRam, ramsize.l)
Protected agent.s, hInet.l, hData.l, Bytes.l
agent.s = "IE 6.0"
hInet.l = InternetOpen_( @agent.s,0,0,0,0 )
hData.l = InternetOpenUrl_( hInet, @URL.s, "", 0, $8000000, 0 )
If hData > 0 : InternetReadFile_ ( hData, *lpRam, ramsize.l, @Bytes.l ) : Else : Bytes = -1 : EndIf
InternetCloseHandle_(hInet)
;InternetCloseHandle_(hFile)
InternetCloseHandle_(hData)
ProcedureReturn Bytes.l
EndProcedure
Procedure DateTime()
; Эта процедура вызывается по таймеру два раза в секунду.
Time.s = FormatDate("%hh:%ii:%ss", Date() ) ; Узнаём текущее время
SetGadgetText(84,Time)
EndProcedure
Procedure SetEditorMemeo(*Info.MeteoInfo)
If *Info\State = 1
If GetGadgetState(40) = 1
Ind = 2
ElseIf GetGadgetState(41) = 1
Ind = 3
ElseIf GetGadgetState(42) = 1
Ind = 4
Else
Ind = 1
EndIf
SetGadgetText(38, "В городе " + URLDecoder(*Info\Sity)+#CRLF$+ *Info\DataDay(Ind) + "ч. прогнозируется:" + #CRLF$ + "давление " + *Info\PRESSUREmin(Ind) + "-"+ *Info\PRESSUREmax(Ind) +" мм.рт.ст.," + #CRLF$ + "ветер "+*Info\direction(Ind)+","+" "+*Info\WINDmin(Ind)+"-"+*Info\WINDmax(Ind) +" m\c,"+ #CRLF$ +"относительная влажность" + #CRLF$ + "воздуха " + *Info\RELWETmin(Ind) + "-"+ *Info\RELWETmax(Ind) +" %,"+ #CRLF$ +"температура "+*Info\TEMPERATUREmin(Ind)+"-"+ *Info\TEMPERATUREmax(Ind) +"°C, "+ #CRLF$ + *Info\cloudiness(Ind) + ", " + *Info\precipitation(Ind) + "." )
ElseIf *Info\State = 0
SetGadgetText(38, "Внутеняя ошибка программы") ; Не удалось выделить память под XML
ElseIf *Info\State = 2
SetGadgetText(38, "Нет связи с сервером погоды")
ElseIf *Info\State = 3
SetGadgetText(38, "Ошибка расшифровки данных")
EndIf
EndProcedure
Procedure GetMeteo(SityNew.s)
Shared G_Meteo_Info
*Mem_XML = AllocateMemory(100000)
If *Mem_XML
FillMemory(*Mem_XML, 100000, 0)
Bytes=DownloadToMem ("http://informer.gismeteo.ru/xml/"+SityNew+"_1.xml", *Mem_XML, 100000)
If Bytes>0
If CatchXML(#XML,*Mem_XML,Bytes) ;LoadXML(#XML, FileName$)
*MainNode = MainXMLNode(#XML)
If *MainNode
G_Meteo_Info\State = 1
GisMet_XML_Data(*MainNode, 0, @G_Meteo_Info)
SetEditorMemeo(@G_Meteo_Info)
Else
G_Meteo_Info\State = 3
EndIf
Else
G_Meteo_Info\State = 3
EndIf
Else
G_Meteo_Info\State = 2
EndIf
FreeMemory(*Mem_XML)
Else
G_Meteo_Info\State = 0
EndIf
EndProcedure
Procedure ProgramAtStartup(State, ProgName.s) ; Управление автозагрузкой программы
valueName$=ProgramFilename()
GetHandle = RegOpenKeyEx_(#HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", 0, #KEY_ALL_ACCESS, @hKey)
If GetHandle = #ERROR_SUCCESS
If State=1
RegSetValueEx_(hKey, @ProgName, 0, #REG_SZ, @valueName$, Len(valueName$))
Else
RegDeleteValue_(hKey, @ProgName)
EndIf
RegCloseKey_(hKey)
EndIf
EndProcedure
Procedure FindDevice_Timer() ; таймер - процедура проверки подключения нашего устройства
Static Old_Test
Test=HID_Lib_DeviceTest(#USB_PID, #USB_VID)
If Test<>Old_Test
Old_Test=Test
If Test
HID_Lib_CloseDevice(R_DeviceHandle) : HID_Lib_CloseDevice(W_DeviceHandle)
W_DeviceHandle=HID_Lib_OpenDevice(#USB_PID, #USB_VID)
R_DeviceHandle=HID_Lib_OpenDevice(#USB_PID, #USB_VID)
SetGadgetText(56, YES_Device)
SetGadgetColor(56, #PB_Gadget_FrontColor, $00FF0F)
Else
HID_Lib_CloseDevice(R_DeviceHandle) : HID_Lib_CloseDevice(W_DeviceHandle)
R_DeviceHandle=0 : W_DeviceHandle=0
SetGadgetText(56, NO_Device)
SetGadgetColor(56, #PB_Gadget_FrontColor, $0000FF)
EndIf
EndIf
EndProcedure
InitNetwork()
Structure DrawInfo
row.c[8]
EndStructure
#xc = 20 ; начало по X
#yc = 20 ; начало по Y
CreateImage(80,148,148)
Procedure.s UTF2Ansi(str$)
str_in$=str$: len=Len(str_in$)+5: str_tmp$=Space(len*4)
CP_IN=65001; #CP_UTF8=65001
CP_OUT=1251
MultiByteToWideChar_(CP_IN,0,@str_in$,len,@str_tmp$,len)
WideCharToMultiByte_(CP_OUT,0,@str_tmp$,len,@str_in$,len,0,0)
ProcedureReturn str_in$
EndProcedure
Procedure.s Many_ru()
Protected Result.s, *mem, Many.s
Protected url.s, Bytes, Datas.s, html.s
Protected Dim Result$(0), ManyExpression.s
Protected Pos
Result = "Ошибка"
Datas = FormatDate("%dd.%mm.%yyyy",Date())
url = "http://www.cbr.ru/currency_base/D_print.aspx?date_req="+Datas
*mem = AllocateMemory(200000)
If *mem
Bytes = DownloadToMem(url, *mem, 200000)
If Bytes
html = UTF2Ansi(PeekS(*mem))
If html<>""
Result = "Центральный банк Российской Федерации установил следующие курсы иностранных валют к рублю Российской Федерации на " + Datas + ":" + Chr(10)
Restore Many_ru
For i=1 To 35
Read.s Many
Pos = FindString(Many, " ", 1)
ManyExpression = Right(Many, Len(Many)-Pos)
ManyExpression+"</td>" + #CRLF$ + "<td align="+Chr(34)+"right"+Chr(34)+">"
Pos1 = FindString(html, ManyExpression, 1)
If Pos1>0
Pos1+Len(ManyExpression)
Pos2 = FindString(html,"</td>",Pos1)
If Pos2>0
Result + " "+Many+" = "+Mid(html, Pos1, Pos2-Pos1) +" руб.;"
EndIf
EndIf
Next i
EndIf
EndIf
FreeMemory(*mem)
EndIf
ProcedureReturn Result
EndProcedure
Procedure.s Many_uk()
Protected Result.s, *mem, Many.s
Protected url.s, Bytes, Datas.s, html.s
Protected ManyExpression.s, Temp.s
Protected Pos, Pos1, Pos2
Result = "Помилка при розшифровці файлу"
Datas = FormatDate("%dd.%mm.%yyyy",Date())
url = "http://bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx?__EVENTARGUMENT=&__EVENTTARGET=&Text1="+Datas
*mem = AllocateMemory(200000)
If *mem
Bytes = DownloadToMem(url, *mem, 200000)
If Bytes
html = UTF2Ansi(PeekS(*mem))
If html<>""
Pos = FindString(html, "<td>Офіційний курс</td>", 1)
If Pos
Pos1 = FindString(html, "</table>", Pos+Len("<td>Офіційний курс</td>"))
If Pos1
html=Mid(html, Pos, Pos1-Pos)
Result = "Національний банк України. Середній курс гривні до іноземних валют на " + Datas + " становить:" + Chr(10)
Restore Many_uk
For i=1 To 27
Read.s Many
Pos = FindString(Many, " ", 1)
ManyExpression = Right(Many, Len(Many)-Pos)
ManyExpression + "</td>"
Pos1 = FindString(html, ManyExpression, 1)
If Pos1>0
Pos1+Len(ManyExpression)
Pos2 = FindString(html,"</td>",Pos1)
If Pos2>0
Temp.s=Mid(html, Pos1, Pos2-Pos1)
Pos = FindString(ReverseString(Temp),">", 1)
If Pos>0
Result + " "+Many+" = "+Mid(Temp, Len(Temp)-Pos+2)+" грн.;"
EndIf
EndIf
EndIf
Next i
EndIf
EndIf
EndIf
EndIf
FreeMemory(*mem)
EndIf
ProcedureReturn Result
EndProcedure
Procedure Draw_Image(*Infa.DrawInfo)
Shared NOT_Flag
If StartDrawing(ImageOutput(80))
Box(83,0,148,148,0) ; Очистка рисунка
For col = 0 To 7
For row = 0 To 7
x = 20 + col * 15
y = 20 + row * 15
Temp.a = *Infa\row[row]
If NOT_Flag = 1
Temp = ~ Temp
EndIf
If Temp << col & %10000000
Color = RGB(255, 102, 00)
Else
Color = RGB(102, 102, 102)
EndIf
Circle(x, y, 5, Color)
Next
Next
StopDrawing()
EndIf
SetGadgetState(82, ImageID(80))
EndProcedure
Procedure Timer1()
Shared pt_counter.w, pt, tp
Static Draw.DrawInfo, i
If pt_counter<=0
pt_counter = pt
For i=0 To 7
For x=1 To 8
If Random(20) - (20-tp) >= 0
Draw\row[i] | 1
Else
Draw\row[i] & %11111110
EndIf
If x<8 : Draw\row[i]<<1 : EndIf
Next x
Next i
Draw_Image(Draw)
Else
pt_counter - 1
EndIf
EndProcedure
Procedure Timer2()
Shared pt_counter.w, pt, tp
Static Draw.DrawInfo, i
If pt_counter<=0
pt_counter = pt
For i=6 To 0 Step -1
Draw\row[i+1] = Draw\row[i]
Next i
For x=1 To 8
If Random(20) - (20-tp) >= 0
Draw\row[0] | 1
Else
Draw\row[0] & %11111110
EndIf
If x<8 : Draw\row[0]<<1 : EndIf
Next x
Draw_Image(Draw)
Else
pt_counter - 1
EndIf
EndProcedure
Procedure StreamFileIn_Callback(hFile, pbBuff, cb, pcb)
ProcedureReturn ReadFile_(hFile, pbBuff, cb, pcb, 0)!1
EndProcedure
Procedure FileStreamIn(Gadget, Files.s)
;Procedure zum streamen einer Datei in das RichEdit
;Control
Protected StreamData.EDITSTREAM
;Wenn die Datei geцffnet werden kann, fortfahren.
If ReadFile(10, Files)
;Das Handle der Datei speichern
StreamData\dwCookie = FileID(10)
StreamData\dwError = #Null
;Die Adresse der Callback Procedure speichern
StreamData\pfnCallback = @StreamFileIn_Callback()
;Das RichEdit Control anweisen, den Stream zu aktivieren
SendMessage_(GadgetID(Gadget), #EM_STREAMIN, #SF_RTF, @StreamData)
;Datei schliessen
CloseFile(10)
EndIf
EndProcedure
Procedure Open_Window_1()
OpenWindow(1, 0, 0, 277, 247, About, #PB_Window_ScreenCentered );| #PB_Window_SystemMenu)
EditorGadget(72,2,2,496,370,#PB_Editor_ReadOnly)
SendMessage_(GadgetID(72), #EM_SETTARGETDEVICE, #Null, 0) ; Перенос по словам
;If
LoadImage(70, "LOGO.bmp") ; change 2nd parameter to the path/filename of your image
ImageGadget(70, 6, 6, 235, 78, ImageID(70)) ; imagegadget standard
EditorGadget(72,95,46,176,170,#PB_Editor_ReadOnly)
SendMessage_(GadgetID(72), #EM_SETTARGETDEVICE, #Null, 0) ; Перенос по словам
FileStreamIn(72, "Авторы.rtf")
TextGadget(62,95,6,100,18,Mod)
TextGadget(63,95,26,100,18,Ver)
;TextGadget(64,102,58,150,18,"Copyright © Radan 2011")
;TextGadget(65,102,82,100,18,"Radan Studio")
Lang.s="ru"
If GetGadgetState(90)=1
Lang.s="en"
EndIf
FileStreamIn(72, Left(Lang, 2)+"_avtori.rtf")
ButtonGadget(66,185,222,75,20,"OK")
;EndIf
EndProcedure
Procedure LoadText(File.s)
cb1 = GetGadgetState(30) ; Это чтобы восстановить активные кункты в выпадающих списках.
cb2 = GetGadgetState(48)
cb3 = GetGadgetState(#ComboBox_0)
OpenPreferences(File)
PreferenceGroup("MainWin")
SetWindowTitle(0,ReadPreferenceString("ac","МОДЖЕТ 8x8") )
ToolBarToolTip(0, 1, ReadPreferenceString("ac1","Добавить в автозагрузку") )
ToolBarToolTip(0, 2, ReadPreferenceString("ac2","Удалить из автозагрузки") )
ToolBarToolTip(0, 3, ReadPreferenceString("ac3","О программе") )
GadgetToolTip(90, ReadPreferenceString("ac4","Язык"))
;CreatePopupMenu(68)
;MenuItem(5, ReadPreferenceString("ac5","Свернуть"))
;MenuBar()
;MenuItem(10, ReadPreferenceString("ac6","Выход"))
SetGadgetItemText(0,0, ReadPreferenceString("ac7","Случайный"))
SetGadgetText(22,ReadPreferenceString("ac8","Пиксели") )
SetGadgetText(23,ReadPreferenceString("ac9","Скорость") )
SetGadgetText(13,ReadPreferenceString("ac10","Случайно") )
SetGadgetText(14,ReadPreferenceString("ac11","Матрица") )
SetGadgetText(15,ReadPreferenceString("ac12","Калейдоскоп") )
SetGadgetText(16,ReadPreferenceString("ac13","Инверсия") )
SetGadgetText(17,ReadPreferenceString("ac14","Звук") )
SetGadgetItemText(0,1, ReadPreferenceString("ac15","Время"))
SetGadgetText(51,ReadPreferenceString("ac16","Скорость") )
SetGadgetText(9,ReadPreferenceString("ac17","Вид 1") )
SetGadgetText(10,ReadPreferenceString("ac18","Вид 2") )
SetGadgetText(11,ReadPreferenceString("ac19","Вид 3") )
SetGadgetText(12,ReadPreferenceString("ac20","Инверсия") )
SetGadgetItemText(0,2, ReadPreferenceString("ac21","Курс валют") )
SetGadgetText(25,ReadPreferenceString("ac22","Инверсия") )
SetGadgetText(26,ReadPreferenceString("ac23","Регистр") )
SetGadgetText(27,ReadPreferenceString("ac24","Горизонтально") )
SetGadgetText(28,ReadPreferenceString("ac25","Вертикально") )
SetGadgetText(52,ReadPreferenceString("ac26","Скорость") )
SetGadgetItemText(30,0, ReadPreferenceString("ac27","Украина") )
SetGadgetItemText(30,1, ReadPreferenceString("ac28","Россия") )
SetGadgetItemText(0,3, ReadPreferenceString("ac29","Текст") )
SetGadgetText(43,ReadPreferenceString("ac30","Инверсия") )
SetGadgetText(44,ReadPreferenceString("ac31","Регистр") )
SetGadgetText(45,ReadPreferenceString("ac32","Горизонтально") )
SetGadgetText(46,ReadPreferenceString("ac33","Вертикально") )
SetGadgetText(50,ReadPreferenceString("ac34","Загрузить текст") )
SetGadgetItemText(0,4, ReadPreferenceString("ac35","Погода") )
SetGadgetText(32,ReadPreferenceString("ac36","Инверсия") )
SetGadgetText(33,ReadPreferenceString("ac37","Регистр") )
SetGadgetText(34,ReadPreferenceString("ac38","Горизонтально") )
SetGadgetText(35,ReadPreferenceString("ac39","Вертикально") )
SetGadgetItemText(0,5, ReadPreferenceString("ac40","Спектр") )
SetGadgetText(4,ReadPreferenceString("ac41","Линия 1") )
SetGadgetText(5,ReadPreferenceString("ac42","Линия 2") )
SetGadgetText(6,ReadPreferenceString("ac43","Точка") )
SetGadgetText(24,ReadPreferenceString("ac44","Инверсия") )
NO_Device = ReadPreferenceString("ac45","отключен")
YES_Device = ReadPreferenceString("ac46","подключен")
If HID_Lib_DeviceTest(#USB_PID, #USB_VID)
SetGadgetText(56, YES_Device)
SetGadgetColor(56, #PB_Gadget_FrontColor, $00FF0F)
Else
SetGadgetText(56, NO_Device)
SetGadgetColor(56, #PB_Gadget_FrontColor, $0000FF)
EndIf
SysTrayIconToolTip(67, ReadPreferenceString("ac47","МОДЖЕТ 8x8") )
SetGadgetText(55,ReadPreferenceString("ac48","МОДЖЕТ ") )
About = ReadPreferenceString("ac49","О программе МОДЖЕТ 8x8")
Mod = ReadPreferenceString("ac50","МОДЖЕТ 8x8")
Ver = ReadPreferenceString("ac51","Версия 1.0")
open = ReadPreferenceString("ac52","Открыть файл")
Maska = ReadPreferenceString("ac53","Текстовые файлы (*.txt)|*.txt")
GadgetToolTip(39, ReadPreferenceString("ac54","Прогноз на 6 часов"))
GadgetToolTip(40, ReadPreferenceString("ac55","Прогноз на 12 часов"))
GadgetToolTip(41, ReadPreferenceString("ac56","Прогноз на 18 часов"))
GadgetToolTip(42, ReadPreferenceString("ac57","Прогноз на сутки"))
SetGadgetText(85,ReadPreferenceString("ac58","Текущее время") )
GadgetToolTip(37,ReadPreferenceString("ac59","Обновить данные") )
SetGadgetText(75,ReadPreferenceString("ac60","Скорость") )
Lib1 = ReadPreferenceString("ac61","Файл отсутствует!")
Lib2 = ReadPreferenceString("ac62","Для отображения времени")
Lib3 = ReadPreferenceString("ac63","требуется файл")
SetGadgetText(76,ReadPreferenceString("ac64","Уровень сигнала") )
ClosePreferences()
SetGadgetState(30,cb1) ; Это чтобы восстановить активные кункты в выпадающих списках.
SetGadgetState(48,cb2)
SetGadgetState(#ComboBox_0,cb3)
EndProcedure
Procedure.s ReadText(File$)
Protected Text.s = ""
If ReadFile(0, File$)
Size = Lof(0); размер файла в байтах
If Size>0
*String = AllocateMemory(Size+10); выделяем область памяти
If *String
FillMemory(*String, Size+10, 0)
FormatFile=ReadStringFormat(0) ; Определение кодировки файла (Ascii, UTF8 или Unicode).
ReadData(0, *String , Size); записываем строку в область памяти
FillMemory(*String+Size+1, 8, 0)
Text.s=PeekS(*String, -1, FormatFile)
FreeMemory(*String)
EndIf
EndIf
CloseFile(0)
EndIf
ProcedureReturn Text
EndProcedure
Procedure UnPak(*pak)
; Процедура UnPak() распаковывает данные, упакованные функцией PackMemory()
; Процедуре нужно передать указатель на первый байт упакованных данных, например из DataSection
; При успешной распаковке, процедура вернет указатель на место нахождения распакованных данных
; Не забывайте освобождать память функцией FreeMemory когда распакованные данные больше не нужны
*Unpak_mem = 0
RealSize = PeekL(*pak+2)
If RealSize>0 And RealSize<10000000
*mem = AllocateMemory(RealSize+10)
If *mem
If UnpackMemory(*pak, *mem) = RealSize
*Unpak_mem = *mem
Else
FreeMemory(*mem)
EndIf
EndIf
EndIf
ProcedureReturn *Unpak_mem
EndProcedure
Procedure ProgramItit_Thread(*x.ProgramItitThread)
;Получает полный путь запущенного приложения
Result$ = ProgramFilename()
;Извлекает путь из полного пути. Например, если полный путь "C:\PureBasic\PB.exe", результат будет "C:\PureBasic\".
Path$ = GetPathPart(Result$)
;Debug Path$
; Просмотр всех элементов директории запущенного приложения (без поддиректорий)
Directory$ = Path$
If ExamineDirectory(0, Directory$, "*.txt")
;m=0
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
AddGadgetItem(48, -1, Left(DirectoryEntryName(0), Len(DirectoryEntryName(0))-4))
EndIf
;txt.s=Text + ".txt"
; If DirectoryEntryName(0) = txt
;
; EndIf
;m=m+1 ;Debug DirectoryEntryName(0) ;+ Type$ + "- Size in byte: " + Str(DirectoryEntrySize(0))
Wend
FinishDirectory(0)
EndIf
SetGadgetState(48, *x\text)
If Put=""
File$ = Path$ + GetGadgetText(48)+".txt"
; Debug File$
Else
File$ = Put
; Debug File$
EndIf
If FileSize(File$)>0
Text=ReadText(File$)
SetGadgetText(49,Text)
EndIf
;time=ElapsedMilliseconds()
*mem = UnPak(?GismeteoCodSity_pak)
If *mem
Text.s = PeekS(*mem)
FreeMemory(*mem)
ReplaceString(Text,Chr(13),Chr(10), #PB_String_InPlace)
Text=ReplaceString(Text,Chr(10)+Chr(10),Chr(10))
PosOld = 0
Pos = FindString(Text, Chr(10), 1)
x=0
*PointString = @Text
While Pos
String.s=PeekS(*PointString+PosOld, Pos-PosOld-1)
AddGadgetItem(#ComboBox_0, x,String)
PosOld=Pos
x+1
Pos = FindString(Text, Chr(10), PosOld+1)
If Pos =< 0
Break
EndIf
Wend
SetGadgetState(#ComboBox_0,*x\meteo)
EndIf
SityNew$= Left(GetGadgetText(#ComboBox_0), 5)
If Len(SityNew$)
GetMeteo(SityNew$)
EndIf
;Debug ElapsedMilliseconds()-time
EndProcedure
Procedure Write_setting() ;Запись в файл настроек
If OpenPreferences("setting.ini")
WritePreferenceLong ("fr1", GetGadgetState (90))
WritePreferenceLong ("fr2", GetGadgetState (0))
WritePreferenceLong ("fr3", GetGadgetState (18))
WritePreferenceLong ("fr4", GetGadgetState (19))
WritePreferenceLong ("fr5", GetGadgetState (20))
WritePreferenceLong ("fr6", GetGadgetState (13))
WritePreferenceLong ("fr7", GetGadgetState (14))
WritePreferenceLong ("fr8", GetGadgetState (15))
WritePreferenceLong ("fr9", GetGadgetState (16))
WritePreferenceLong ("fr10", GetGadgetState (17))
WritePreferenceLong ("fr11", GetGadgetState (8))
WritePreferenceLong ("fr12", GetGadgetState (9))
WritePreferenceLong ("fr13", GetGadgetState (10))
WritePreferenceLong ("fr14", GetGadgetState (11))
WritePreferenceLong ("fr15", GetGadgetState (12))
WritePreferenceLong ("fr16", GetGadgetState (25))
WritePreferenceLong ("fr17", GetGadgetState (26))
WritePreferenceLong ("fr18", GetGadgetState (27))
WritePreferenceLong ("fr19", GetGadgetState (28))
WritePreferenceLong ("fr20", GetGadgetState (29))
WritePreferenceLong ("fr21", GetGadgetState (30))
WritePreferenceLong ("fr22", GetGadgetState (43))
WritePreferenceLong ("fr23", GetGadgetState (44))
WritePreferenceLong ("fr24", GetGadgetState (45))
WritePreferenceLong ("fr25", GetGadgetState (46))
WritePreferenceLong ("fr26", GetGadgetState (47))
WritePreferenceLong ("fr27", GetGadgetState (48))
WritePreferenceLong ("fr28", GetGadgetState (32))
WritePreferenceLong ("fr29", GetGadgetState (33))
WritePreferenceLong ("fr30", GetGadgetState (34))
WritePreferenceLong ("fr31", GetGadgetState (35))
WritePreferenceLong ("fr32", GetGadgetState (36))
WritePreferenceLong ("fr33", GetGadgetState (39))
WritePreferenceLong ("fr34", GetGadgetState (40))
WritePreferenceLong ("fr35", GetGadgetState (41))
WritePreferenceLong ("fr36", GetGadgetState (42))
WritePreferenceLong ("fr37", GetGadgetState (#ComboBox_0))
WritePreferenceLong ("fr38", GetGadgetState (4))
WritePreferenceLong ("fr39", GetGadgetState (5))
WritePreferenceLong ("fr40", GetGadgetState (6))
WritePreferenceLong ("fr41", GetGadgetState (7))
WritePreferenceLong ("fr42", GetGadgetState (24))
WritePreferenceString ("fr43", Put)
ClosePreferences()
EndIf
EndProcedure
Image.DrawInfo
;--------------------Окно программы---------------------
OpenWindow(0, 0, 0, 535, 186, "МОДЖЕТ 8x8", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
;--------------------Кнопки-------------------
ContainerGadget(95,0,0,97,30, #PB_Container_BorderLess)
If CreateToolBar(0, GadgetID(95))
ToolBarSeparator()
ToolBarImageButton(1, CatchImage(1, ?ImageSave))
ToolBarToolTip(0, 1, "Добавить в автозагрузку")
ToolBarSeparator()
ToolBarImageButton(2, CatchImage(2, ?ImageDelete))
ToolBarToolTip(0, 2, "Удалить из автозагрузки")
ToolBarSeparator()
ToolBarImageButton(3, CatchImage(3, ?ImageInformation))
ToolBarToolTip(0, 3, "О программе")
ToolBarSeparator()
EndIf
CloseGadgetList()
;--------------------Язык-------------------
ComboBoxGadget(90,200,3,70,22)
GadgetToolTip(90, "")
AddGadgetItem(90,-1,"Русский")
AddGadgetItem(90,-1,"English")
SetGadgetState(90,0)
ImageGadget(82,6, 33,148,148,ImageID(80))
Draw_Image(@Image)
SetTimer_(WindowID(0),4,100, @Timer1() )
;-----------Системный трей-----------
AddSysTrayIcon(67, WindowID(0), ExtractIcon_(0,ProgramFilename(),0))
SysTrayIconToolTip(67, "МОДЖЕТ 8x8")
;Добавим к иконке меню
CreatePopupMenu(68)
;MenuItem(4, "Развернуть")
MenuItem(5, "")
MenuBar()
MenuItem(10, "")
TextGadget(55, 387, 8, 120 ,15,"")
TextGadget(56, 440, 8, 120 ,15, NO_Device)
SetGadgetColor(56, #PB_Gadget_FrontColor, $0000FF)
PanelGadget (0, 160, 33, 370, 150)
;--------------------Случайный-------------------
AddGadgetItem (0, -1, "Случайный")
TrackBarGadget(18, 17, 6, 165, 35, 0, 18, #PB_TrackBar_Ticks)
TrackBarGadget(19, 17, 57, 165, 35, 0, 100, #PB_TrackBar_Ticks)
TrackBarGadget(20, 214, 80, 99, 43, 0, 18, #PB_TrackBar_Ticks)
ButtonGadget(21,320,87,23,23,"")
TextGadget(22, 17, 39, 50 ,18,"")
TextGadget(23, 17, 90, 50 ,13,"")
OptionGadget(13, 214, 3, 80, 20, "")
OptionGadget(14, 214, 23, 60, 20, "")
OptionGadget(15, 214, 43, 90, 20, "")
CheckBoxGadget(16, 214, 63, 70, 20, ""): SetGadgetState(16, #PB_Checkbox_Checked)
CheckBoxGadget(17, 304, 63, 70, 20, ""): SetGadgetState(17, #PB_Checkbox_Checked)
;--------------------Время-------------------
AddGadgetItem (0, -1,"Время")
TrackBarGadget(8, 50, 16, 165, 35, 0, 300, #PB_TrackBar_Ticks)
TextGadget(51, 50, 50, 50 ,13,"")
OptionGadget(9, 250, 10, 60, 20, "")
OptionGadget(10, 250, 32, 60, 20, "")
OptionGadget(11, 250, 54, 60, 20, "")
CheckBoxGadget(12, 250, 76, 70, 20, "")
TextGadget(85, 90, 76, 90 ,13,"")
TextGadget(84, 110, 90, 90 ,13,"")
SetGadgetState(12, #PB_Checkbox_Checked)
;--------------------Курс валют-------------------
AddGadgetItem (0, -1,"Курс валют")
CheckBoxGadget(25, 11, 9, 70, 13, "")
SetGadgetState(25, #PB_Checkbox_Checked)
CheckBoxGadget(26, 89, 9, 60, 13, "")
SetGadgetState(26, #PB_Checkbox_Checked)
OptionGadget(27, 11, 99, 95, 20, "")
OptionGadget(28, 115, 99, 90, 20, "")
TrackBarGadget(29, 10, 52, 142, 35, 0, 300, #PB_TrackBar_Ticks)
TextGadget(52, 10, 86, 50 ,13,"")
ComboBoxGadget(30, 10, 28, 142, 21)
AddGadgetItem(30, -1, "")
AddGadgetItem(30, -1, "")
SetGadgetState(30,0)
EditorGadget(31,158,7,200,90)
SendMessage_(GadgetID(31),#EM_SETTARGETDEVICE, #Null, 0)
SetGadgetText(31,Many_uk())
;--------------------Текст-------------------
AddGadgetItem (0, -1,"Текст")
CheckBoxGadget(43, 7, 35, 70, 13, "")
SetGadgetState(43, #PB_Checkbox_Checked)
CheckBoxGadget(44, 85, 35, 60, 13, "")
SetGadgetState(44, #PB_Checkbox_Checked)
OptionGadget(45, 11, 99, 95, 20, "")
OptionGadget(46, 115, 99, 90, 20, "")
TextGadget(75, 10, 86, 50 ,13,"")
TrackBarGadget(47, 6, 51, 142, 35, 0, 300, #PB_TrackBar_Ticks)
ComboBoxGadget(48, 205, 98, 153, 21)
EditorGadget(49,158,7,200,90,#PB_Editor_ReadOnly)
SendMessage_(GadgetID(49),#EM_SETTARGETDEVICE, #Null, 0)
ButtonGadget(50,6,6,144,23,"")
;Получает полный путь запущенного приложения
Result$ = ProgramFilename()
;Извлекает путь из полного пути.
;Например, если полный путь "C:\PureBasic\PB.exe", результат будет "C:\PureBasic\".
Path$ = GetPathPart(Result$)
; Просмотр всех элементов директории запущенного приложения (без поддиректорий)
Directory$ = Path$
;--------------------Погода-------------------
AddGadgetItem (0, -1,"Погода")
CheckBoxGadget(32, 11, 9, 70, 13, "")
SetGadgetState(32, #PB_Checkbox_Checked)
CheckBoxGadget(33, 89, 9, 60, 13, "")
SetGadgetState(33, #PB_Checkbox_Checked)
OptionGadget(34, 11, 84, 94, 20, "")
OptionGadget(35, 11, 102, 85, 20, "")
TrackBarGadget(36, 10, 52, 142, 35, 0, 300, #PB_TrackBar_Ticks)
ComboBoxGadget(#ComboBox_0, 10, 28, 142, 21)
ButtonImageGadget(37,110,90,40,30, CatchImage(37, ?Image_ButtonImage_1))
GadgetToolTip(37, "")
EditorGadget(38,158,7,200,90)
OptionGadget(39, 160, 102, 30, 20, "6"): SetGadgetState(39, 1)
GadgetToolTip(39, "Прогноз на 6 часов")
OptionGadget(40, 215, 102, 40, 20, "12")
GadgetToolTip(40, "Прогноз на 12 часов")
OptionGadget(41, 270, 102, 40, 20, "18")
GadgetToolTip(41, "Прогноз на 18 часов")
OptionGadget(42, 325, 102, 40, 20, "24")
GadgetToolTip(42, "Прогноз на сутки")
;--------------------Спектр-------------------
AddGadgetItem (0, -1,"Спектр")
TrackBarGadget(7, 27, 16, 165, 35, 0, 18, #PB_TrackBar_Ticks)
TextGadget(76, 27, 51, 100 ,13,"")
OptionGadget(4, 250, 10, 60, 20, "")
OptionGadget(5, 250, 32, 60, 20, "")
OptionGadget(6, 250, 54, 60, 20, "")
CheckBoxGadget(24, 250, 76, 70, 20, "")
SetGadgetState(24, #PB_Checkbox_Checked)
CloseGadgetList()
SetTimer_(WindowID(0), 2, 800, @FindDevice_Timer() )
;--------------------Чтение настроек-------------------
OpenPreferences("setting.ini")
; PreferenceGroup("Window")
SetGadgetState(90, ReadPreferenceLong("fr1", 0))
SetGadgetState(0, ReadPreferenceLong("fr2", 0))
SetGadgetState(18, ReadPreferenceLong("fr3", 0))
SetGadgetState(19, ReadPreferenceLong("fr4", 0))
SetGadgetState(20, ReadPreferenceLong("fr5", 0))
SetGadgetState(13, ReadPreferenceLong("fr6", 0))
SetGadgetState(14, ReadPreferenceLong("fr7", 0))
SetGadgetState(15, ReadPreferenceLong("fr8", 0))
SetGadgetState(16, ReadPreferenceLong("fr9", 0))
SetGadgetState(17, ReadPreferenceLong("fr10", 0))
SetGadgetState(8, ReadPreferenceLong("fr11", 0))
SetGadgetState(9, ReadPreferenceLong("fr12", 0))
SetGadgetState(10, ReadPreferenceLong("fr13", 0))
SetGadgetState(11, ReadPreferenceLong("fr14", 0))
SetGadgetState(12, ReadPreferenceLong("fr15", 0))
SetGadgetState(25, ReadPreferenceLong("fr16", 0))
SetGadgetState(26, ReadPreferenceLong("fr17", 0))
SetGadgetState(27, ReadPreferenceLong("fr18", 0))
SetGadgetState(28, ReadPreferenceLong("fr19", 0))
SetGadgetState(29, ReadPreferenceLong("fr20", 0))
SetGadgetState(30, ReadPreferenceLong("fr21", 0))
SetGadgetState(43, ReadPreferenceLong("fr22", 0))
SetGadgetState(44, ReadPreferenceLong("fr23", 0))
SetGadgetState(45, ReadPreferenceLong("fr24", 0))
SetGadgetState(46, ReadPreferenceLong("fr25", 0))
SetGadgetState(47, ReadPreferenceLong("fr26", 0))
ProgramItitThread\text = ReadPreferenceLong("fr27", 0)
SetGadgetState(32, ReadPreferenceLong("fr28", 0))
SetGadgetState(33, ReadPreferenceLong("fr29", 0))
SetGadgetState(34, ReadPreferenceLong("fr30", 0))
SetGadgetState(35, ReadPreferenceLong("fr31", 0))
SetGadgetState(36, ReadPreferenceLong("fr32", 0))
SetGadgetState(39, ReadPreferenceLong("fr33", 0))
SetGadgetState(40, ReadPreferenceLong("fr34", 0))
SetGadgetState(41, ReadPreferenceLong("fr35", 0))
SetGadgetState(42, ReadPreferenceLong("fr36", 0))
ProgramItitThread\meteo=ReadPreferenceLong("fr37", 0)
SetGadgetState(4, ReadPreferenceLong("fr38", 0))
SetGadgetState(5, ReadPreferenceLong("fr39", 0))
SetGadgetState(6, ReadPreferenceLong("fr40", 0))
SetGadgetState(7, ReadPreferenceLong("fr41", 0))
SetGadgetState(24, ReadPreferenceLong("fr42", 0))
Put=ReadPreferenceString("fr43", "")
ClosePreferences()
CreateThread(@ProgramItit_Thread(),ProgramItitThread)
If GetGadgetState(90)=0
LoadText("rus.lng")
Else
LoadText("eng.lng")
EndIf
If GetGadgetState(16)=0
NOT_Flag = 0
Else
NOT_Flag = 1
EndIf
If GetGadgetState(13)=1
KillTimer_(WindowID(0),2)
Timer1()
SetTimer_(WindowID(0),4,10, @Timer1())
EndIf
If GetGadgetState(14)=0
KillTimer_(WindowID(0),2)
Timer2()
SetTimer_(WindowID(0),4,10, @Timer1())
EndIf
If GetGadgetState(30)=0
SetGadgetText(31,Many_uk())
Else
SetGadgetText(31,Many_ru())
EndIf
If OpenLibrary(1,"user32.dll")=0 ; Открываем файл "user32.dll", для использования его функций
MessageRequester(Lib1, Lib2 +#CRLF$+Lib3+" user32.dll", #MB_OK|#MB_ICONWARNING)
EndIf
CallFunction(1,"SetTimer",WindowID(0), 1, 500, @DateTime() ) ; Вызываем функцию "SetTimer"
HideWindow(0,0)
;--------------------Главный цикл---------------------
Repeat
Event= WaitWindowEvent()
Window=EventWindow()
Gadget=EventGadget()
If Event = #PB_Event_SysTray
If EventType() = #PB_EventType_RightClick ; Обработка правой кнопки мышки
Write_setting()
Break
; DisplayPopupMenu(68, WindowID(0)) ; показ вспывающего меню
EndIf
If EventType() = #PB_EventType_LeftClick ; Обработка левой кнопки мышки
HideWindow(0, 0)
SetWindowState(0, #PB_Window_Normal)
EndIf
If EventType() = #PB_EventType_LeftDoubleClick ; Обработка двойного нажатия левой кнопки мышки
HideWindow(0, 1)
EndIf
EndIf
If Event = #PB_Event_Menu
Select EventMenu()
Case 1 ;"Добавить в автозагрузку"
ProgramAtStartup(1, "MODGET 8x8")
Case 2 ;"Удалить из автозагрузки"
ProgramAtStartup(0, "MODGET 8x8")
Case 3 ;"О программе"
Open_Window_1()
; Case 5 ;"Свернуть"
; HideWindow(0, 1)
; Case 10 ;"Выход"
; Write_setting()
; Break
EndSelect
EndIf
If Event=#PB_Event_MinimizeWindow ;Событие при сворачивании окна
HideWindow(0,1) ;свернуть окно
EndIf
;{-------Событие при закрытии окна-------
If Event=#PB_Event_CloseWindow ;
Write_setting()
EndIf
;}-------------------------------------
;{----------События компонентов----------
If Event=#PB_Event_Gadget
Select EventGadget()
Case 13
KillTimer_(WindowID(0),2)
Timer1()
SetTimer_(WindowID(0),4,10, @Timer1())
Case 14
KillTimer_(WindowID(0),2)
Timer2()
SetTimer_(WindowID(0),4,10, @Timer2())
Case 15
KillTimer_(WindowID(0),2)
For z=0 To 63
;Index = 0 ; Номер байта в ДатаСекции.
;Byte.a = PeekA(?Kaleydos+Index)
Byte.a = PeekA(?Kaleydos+z)
Next z
Case 16
NOT_Flag = GetGadgetState(16)
Case 18
tp = GetGadgetState(18)
Case 19
pt = GetGadgetState(19)
Case 30
If EventType()=1
Select GetGadgetState(30)
Case 0
SetGadgetText(31,Many_uk())
Case 1
SetGadgetText(31,Many_ru())
EndSelect
EndIf
Case 37
GetMeteo(SityNew$)
Case #ComboBox_0
If EventType() = 1
SityNew$= Left(GetGadgetText(#ComboBox_0), 5)
If Len(SityNew$)
GetMeteo(SityNew$)
EndIf
EndIf
Case 39 To 42 ; Выбор времени прогноза
SetEditorMemeo(@G_Meteo_Info)
Case 48
If EventType() = 1 ; Выпадающий список закрылся
Put=""
File$ = Path$ + GetGadgetText(48)+".txt"
Text=ReadText(File$)
SetGadgetText(49,Text)
EndIf
Case 50
File$ = OpenFileRequester(open, "", Maska , 0)
If File$
Put=File$
Text=ReadText(File$)
SetGadgetText(49,Text)
EndIf
Case 90
If EventType()=1
Select GetGadgetState(90)
Case 0
LoadText("rus.lng")
Case 1
LoadText("eng.lng")
EndSelect
EndIf
Case 66
CloseWindow(#Window_1)
Case 100
ProgramAtStartup(1, "MODGET 8x8")
Case 101
ProgramAtStartup(0, "MODGET 8x8")
Case 102
Open_Window_1()
EndSelect
EndIf
;}-------------------------------------
Until Event = #PB_Event_CloseWindow ;Конец главного цикла
; Вызываем функцию "KillTimer"
CallFunction(1,"KillTimer",WindowID(0),1)
; Закрываем файл "user32.dll".
CloseLibrary(1)
;{ Included Data
DataSection
Image_ButtonImage_1:
IncludeBinary "refresh.ico"
ImageSave:
IncludeBinary "accept.png"
ImageDelete:
IncludeBinary "delete.png"
ImageInformation:
IncludeBinary "information.png"
GismeteoCodSity_pak:
IncludeBinary "GismeteoCodSity.pak"
Kaleydos:
Data.l 0, 7, 56, 63, 1, 15, 48, 62, 2, 23, 40, 61, 3, 31, 32, 60
Data.l 6, 8, 55, 57, 9, 14, 49, 54, 10, 22, 41, 53, 11, 30, 33, 52
Data.l 5, 16, 47, 58, 13, 17, 46, 50, 18, 21, 42, 45, 19, 29, 34, 44
Data.l 4, 24, 39, 59, 12, 25, 38, 51, 20, 26, 37, 43, 27, 28, 35, 36
Many_ru:
Data.s "1 Австралийский доллар", "1 Азербайджанский манат", "1000 Армянских драмов", "10000 Белорусских рублей"
Data.s "1 Болгарский лев", "1 Бразильский реал", "100 Венгерских форинтов ", "1000 Вон Республики Корея"
Data.s "10 Датских крон", "1 Доллар США", "1 Евро", "100 Индийских рупий", "100 Казахских тенге"
Data.s "1 Канадский доллар", "100 Киргизских сомов", "10 Китайских юаней", "1 Латвийский лат"
Data.s "1 Литовский лит", "10 Молдавских леев", "10 Новых румынских леев", "10 Новых туркменских манатов"
Data.s "10 Норвежских крон", "1 Польский злотый", "1 СДР (специальные права заимствования)", "1 Сингапурский доллар"
Data.s "10 Таджикских сомони", "1 Турецкая лира", "1000 Узбекских сумов", "10 Украинских гривен"
Data.s "1 Фунт стерлингов Соединенного королевства", "10 Чешских крон", "10 Шведских крон", "1 Швейцарский франк"
Data.s "10 Южноафриканских рэндов", "100 Японских иен"
Many_uk:
Data.s "100 австралійських доларів", "100 азербайджанських манатів", "100 англійських фунтів стерлінгів", "10 білоруських рублів"
Data.s "100 датських крон", "100 доларів США", "100 ЄВРО ", "100 ісландських крон"
Data.s "100 казахстанських тенге", "100 канадських доларів", "100 латвійських латів", "100 литовських літів", "100 молдовських леїв"
Data.s "100 норвезьких крон", "100 польських злотих", "10 російських рублів", "100 сінгапурських доларів"
Data.s "100 СПЗ", "100 турецьких лір", "100 туркменських манатів", "1000 угорських форинтів"
Data.s "100 узбецьких сумів", "100 чеських крон", "100 шведських крон", "100 швейцарських франків"
Data.s "100 юанів женьміньбі (Китай)", "1000 японських єн"
EndDataSection