From a1b79205ae13d78dae37dd5ac7a7a3542f52e276 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Thu, 12 Oct 2017 17:43:43 +0200 Subject: [PATCH] - remove fcm/fim sources --- .../FritzCallMonitor/AHA-HTTP-Interface.pdf | Bin 121746 -> 0 bytes .../FritzCallMonitor/FritzCallMonitor.addr | 1 - .../FritzCallMonitor/FritzCallMonitor.cfg | 184 -- .../FritzCallMonitor/FritzCallMonitor.cpp | 893 ---------- .../FritzCallMonitor/FritzCallMonitor.h | 102 -- .../FritzInfoMonitor/FritzInfoMonitor.cfg | 7 - .../FritzInfoMonitor/FritzInfoMonitor.cpp | 591 ------- .../FritzInfoMonitor/FritzInfoMonitor.h | 45 - .../FritzInfoMonitor_hint.png | Bin 2521 -> 0 bytes .../FritzInfoMonitor/connect.cpp | 1522 ----------------- .../FritzInfoMonitor/connect.h | 89 - .../FritzInfoMonitor/framebuffer.cpp | 456 ----- .../FritzInfoMonitor/framebuffer.h | 84 - .../FritzInfoMonitor/globals.h | 124 -- .../FritzInfoMonitor/icons.cpp | 738 -------- .../FritzCallMonitor/FritzInfoMonitor/icons.h | 41 - .../FritzInfoMonitor/parser.cpp | 379 ---- .../FritzInfoMonitor/parser.h | 122 -- .../FritzInfoMonitor/phonebook.cpp | 367 ---- .../FritzInfoMonitor/phonebook.h | 50 - .../FritzCallMonitor/FritzInfoMonitor/rc.cpp | 113 -- .../FritzCallMonitor/FritzInfoMonitor/rc.h | 27 - .../FritzInfoMonitor/starter.c | 54 - .../FritzInfoMonitor/submenu.cpp | 353 ---- .../FritzInfoMonitor/submenu.h | 45 - .../FritzInfoMonitor_setup.cfg | 6 - .../FritzInfoMonitor_setup.lua | 548 ------ .../FritzInfoMonitor_setup_hint.png | Bin 3506 -> 0 bytes .../Technical_Note_Session_ID.pdf | Bin 88227 -> 0 bytes .../Technical_Note_Session_ID_ab_OS_5.5.pdf | Bin 432622 -> 0 bytes archive-sources/FritzCallMonitor/connect.cpp | 1132 ------------ archive-sources/FritzCallMonitor/connect.h | 97 -- .../FritzCallMonitor/fritzcallmonitor.init | 19 - .../hint_FritzCallMonitor.png | Bin 2521 -> 0 bytes 34 files changed, 8189 deletions(-) delete mode 100644 archive-sources/FritzCallMonitor/AHA-HTTP-Interface.pdf delete mode 100644 archive-sources/FritzCallMonitor/FritzCallMonitor.addr delete mode 100644 archive-sources/FritzCallMonitor/FritzCallMonitor.cfg delete mode 100644 archive-sources/FritzCallMonitor/FritzCallMonitor.cpp delete mode 100755 archive-sources/FritzCallMonitor/FritzCallMonitor.h delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor.cfg delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor.cpp delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor.h delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor_hint.png delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/connect.cpp delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/connect.h delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/framebuffer.cpp delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/framebuffer.h delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/globals.h delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/icons.cpp delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/icons.h delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/parser.cpp delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/parser.h delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/phonebook.cpp delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/phonebook.h delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/rc.cpp delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/rc.h delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/starter.c delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/submenu.cpp delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor/submenu.h delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor_setup.cfg delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor_setup.lua delete mode 100644 archive-sources/FritzCallMonitor/FritzInfoMonitor_setup_hint.png delete mode 100755 archive-sources/FritzCallMonitor/Technical_Note_Session_ID.pdf delete mode 100755 archive-sources/FritzCallMonitor/Technical_Note_Session_ID_ab_OS_5.5.pdf delete mode 100644 archive-sources/FritzCallMonitor/connect.cpp delete mode 100644 archive-sources/FritzCallMonitor/connect.h delete mode 100755 archive-sources/FritzCallMonitor/fritzcallmonitor.init delete mode 100644 archive-sources/FritzCallMonitor/hint_FritzCallMonitor.png diff --git a/archive-sources/FritzCallMonitor/AHA-HTTP-Interface.pdf b/archive-sources/FritzCallMonitor/AHA-HTTP-Interface.pdf deleted file mode 100644 index 46697ab968c1faa24fa29a62f875460f0db4f8a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121746 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�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

P@<6Ck1qFw#1e6zx%%bqrV;DW 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 diff --git a/archive-sources/FritzCallMonitor/FritzCallMonitor.addr b/archive-sources/FritzCallMonitor/FritzCallMonitor.addr deleted file mode 100644 index 8769e9c7..00000000 --- a/archive-sources/FritzCallMonitor/FritzCallMonitor.addr +++ /dev/null @@ -1 +0,0 @@ -012345|zu hause|Meinestr. 12|12345|Meinestadt| diff --git a/archive-sources/FritzCallMonitor/FritzCallMonitor.cfg b/archive-sources/FritzCallMonitor/FritzCallMonitor.cfg deleted file mode 100644 index 5bdc5007..00000000 --- a/archive-sources/FritzCallMonitor/FritzCallMonitor.cfg +++ /dev/null @@ -1,184 +0,0 @@ -# Der Port 1012 der FRITZBox muss einmalig per Telefon (analog!) aktiviert werden: -# Telefoncode zum öffnen des TCP-Ports: #96*5* -# Telefoncode zum schließen des TCP-Ports: #96*4* -# Diese Funktion wir ab der Firmware Version xx.03.99 von AVM unterstützt. - -# IP von deiner Fritzbox und port -FRITZBOXIP=fritz.box -PORT=1012 - -# Adressbuch Datei -ADDRESSBOOK=/var/tuxbox/config/FritzCallMonitor.addr - -# Pfadangabe für den Aufruf eines Scripts. -# Nach eingehendem Anruf, kann ein Script ausgeführt werden, -# durch die z.B. die Lautstärke den Box herunter geregelt wird. -# Als Parameter wird der Inhalt der Nachricht, die auch über -# die Box ausgegeben wird, übergeben. -# Dieses Script muss natürlich vorhanden und ausführbar sein. -# Es wird per default kein Script mitgeliefert. -EXEC= - -# Rückwärtssuche über das Internet -BACKWARDSEARCH=1 - -# Debug Ausgaben -DEBUG=0 - -# Neutrino Nachrichtentyp Popup (popup) oder Message (nmsg) -MSGTYPE=nmsg - -# Maximale Anzeigedauer der Nachricht auf dem Bildschirm, bevor sie automatisch gelöscht wird. -# Ist hier kein Wert eingetragen, wird der Neutrino default genommen (ab Revision 1782). -MSGTIMEOUT= - -# MSN Rufnummern, die überwacht werden sollen. Wenn "MSN_1" frei bleibt, werden alle Rufnummern überwacht. -# Optional kann auch der Name angegeben werden. Die Eingabe erfolgt dann |. -MSN_1= -#MSN_2= -#MSN_3= -#MSN_4= -#MSN_5= -#MSN_6= - -# IP Adresse der Box. Die erste Adresse sollte 127.0.0.1 sein (die Box auf dem der FritzCallMonitor läuft). -# Optional kann auch der Port angegeben werden. Die Eingabe erfolgt dann :. Der Standardport ist 80 -BOXIP_1=127.0.0.1 -#BOXIP_2= -#BOXIP_3= -#BOXIP_4= - -# Name und Passwort (Name:Passwort) für das yWeb der entsprechenden Box -LOGON_1=root:coolstream -#LOGON_2= -#LOGON_3= -#LOGON_4= - -# Wenn der CallMonitor in Verbindung mit einer Eeasybox eingesetzt wird "1" sonst immer "0" -EASYMODE=0 - -# Passwort für die !FritzBox (Achtung - nur neues Loginverfahren mit SID) -PASSWD= - -# Bei der Übernahme der !FritzBox-Telefonbücher mit den FritzInfolMonitor (FIM), -# kann eine fehlende Vorwahl automatisch mit der hier eingetragenen Ortsvorwahl ergänzt werden. -CITYPREFIX= - -# Wenn die Wählhilfe verwendet wird (FIM), kann hier die Wählprefix verwendet werden. -# Das Beispiel DIALPREFIX=*111# stellt eine Verbindung ins Festnetz her. -DIALPREFIX= - -# Wählhilfe Ports, werden in der Auswahl des Menüs "Wählhilfe" (FIM) ausgegeben -# Name Port Intern -# ------------------------------ -# "Fon 1", 1, "**1" -# "Fon 2", 2, "**2" -# "Fon 3", 3, "**3" -# "ISDN & DECT", 50, "**50" -# "ISDN 1", 51, "**51" -# "ISDN 2", 52, "**52" -# "ISDN 3", 53, "**53" -# "ISDN 4", 54, "**54" -# "ISDN 5", 55, "**55" -# "DECT 1", 610, "**610" -# "DECT 2", 611, "**611" -# "DECT 3", 612, "**612" -# "DECT 4", 613, "**613" -# "DECT 5", 614, "**614" -# "SIP 1", 620, "**620" -# "SIP 2", 621, "**621" -# "SIP 3", 622, "**622" -# "SIP 4", 623, "**623" -# "SIP 5", 624, "**624" -# -# Maximal sind 8 Einträge möglich. -# Dabei ist folgender Syntax einzuhalten: -# PORT_x=Name,Port -PORT_1=Fon 1, 1 -PORT_2=Fon 2, 2 -PORT_3=Fon 3, 3 -PORT_4=ISDN & DECT, 50 -PORT_5=ISDN 1, 51 -PORT_6=ISDN 2, 52 -PORT_7=DECT 1, 610 -PORT_8=DECT 2, 611 - -# Strings zum senden an die !FritzBox, Die Quelle hierfür ist: -# http://www.wehavemorefun.de/fritzbox/index.php/Anrufliste_von_der_Box_holen - -# Anrufliste (CSV) herunterladen -CALLERLIST_STR=getpage=..%2Fhtml%2Fde%2FFRITZ%21Box_Anrufliste.csv - -# Speicherort für die Anrufliste auf der Coolstream -CALLERLIST_FILE=/tmp/FRITZ!Box_Anrufliste.csv - -# 0 = AUS [default] -# 1 = An die FRITZ!Box wird eine Query-Abfrage gesendet -SEARCH_MODE=0 - -# Querystring für die Abfrage der FRITZ!Box. -# Die Abfrage, ob neue Nachrichten vorhanden sind, wurde mit der Firmware Version 29.04.87 getestet. -# In älteren Versionen scheint die FB keine Information darüber bereit zu stellen. -# -# Liefert der Query "0" zurück, wird das Flagfile (AD_FLAGFILE) gelöscht. -# Ist das Ergebnis ungleich "0", wird das Flagfile (AD_FLAGFILE) erzeugt. -# default SEARCH_QUERY=&var=tam:settings/TAM0/NumNewMessages -SEARCH_QUERY=&var=tam:settings/TAM0/NumNewMessages - -# Intervall in Sekunden, für die Suchabfrage in der Startseite der FRITZ!Box -# default SEARCH_INT=300 -SEARCH_INT=300 - -# Standard im NI-Image ist /var/etc/.call -# default AD_FLAGFILE=/var/etc/.call -AD_FLAGFILE=/var/etc/.call - - -####################### -## FRITZ! Smart Home ## -####################### -# -# IP und Passwort der Fritzbox, an der die SmartHome Geräte angeschlossen sind, -# Diese Adresse wird im Intervall (SEARCH_INT) abgefragt. -DECTBOXIP= -DECTPASSWD= - -# DECT Tagesplan -# Schaltpunkt und Temperatur wird hier angegeben. -# In der FRITZ!Box kann für die Comet DECT Regler nur 2 Temperaturen hinterlegt werden. -# Zusätzliche Schaltpunkte und deren Temperatur können in einem Tagesplan (DP) eingetragen werden. -# Im DECT Wochenplan (WP) wird dann die Nr.x eingetragen (DPx). -# Diese Funktionsweise ist auch für die FRITZ!Dect Steckdosen anwendbar. -# So lassen sich z.B. Infrarot Heizkörper ein/abschalten wenn der Temperaturbereich stimmt. -# -# Der Wert wird in 0,5 Grad Schritten unterteilt. -# 21,5 Grad werden also als 215 eingetragen. -# Es gibt einige "besondere" Temperaturen: -# -1 es wird kein Kommando an den Aktor gesendet -# 0 schaltet den Aktor "aus" -# 1 schaltet den Aktor "ein" -# -# Die Eingabe erfolgt nach diesem Muster: -# DP[NR]=SS:MM,Temperatur; SS:MM,Temperatur; usw. -# -# DP[1]=00:00,0; 05:00,210; 08:00,190; 15:00,210; 20:00,0; -# -# -# 21° +---------+ +---------+ -# : : : : -# 19° : +--------------+ : -# : : : : -# : : : : -# aus -----+ : : +-------- -# 05:00 08:00 15:00 20:00 -# -# -DP[11]=00:00,0; 05:00,210; 08:00,190; 15:00,210; 20:00,0; -DP[10]=00:00,-1; - -# DECT Wochenplan -# Jeder Wochentag enthält den Zeitplan eines Tages DP[Nr.]. -# Die DP Nummer wird im Wochenplan einem Wochentag zugewiesen. -# -# So;Mo;Di;Mi;Do;Fr;Sa; -#WP[AIN-IDs]=10;11;11:11:11;11;10; diff --git a/archive-sources/FritzCallMonitor/FritzCallMonitor.cpp b/archive-sources/FritzCallMonitor/FritzCallMonitor.cpp deleted file mode 100644 index 0b2594a9..00000000 --- a/archive-sources/FritzCallMonitor/FritzCallMonitor.cpp +++ /dev/null @@ -1,893 +0,0 @@ - -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include "FritzCallMonitor.h" -#include "connect.h" - - -CFCM* CFCM::getInstance() -{ - static CFCM* instance = NULL; - if(!instance) - instance = new CFCM(); - return instance; -} - -CFCM::CFCM() -{ - cconnect = CConnect::getInstance(); - - //default parameters - FritzPort = 1012; - msgtimeout =-1; - BackwardSearch = 1; - debug = 1; - easymode = 0; - phonebooks = 1; - SearchPort = 80; - searchmode = 0; - searchint = 300; - - strcpy(FritzAdr, "fritz.box"); - strcpy(FritzPW, "pwd"); - strcpy(msgtype, "nmsg"); - strcpy(addressbook, "/var/tuxbox/config/FritzCallMonitor.addr"); - strcpy(adflag, "/var/etc/.call"); - strcpy(SearchAdr, "www.goyellow.de"); - strcpy(searchquery, "&var=tam:settings/TAM0/NumNewMessages"); - - ReadConfig((char *)CONFIGFILE); - - //FIXME enable this function for all config values - read_conf(CONFIGFILE); - - //reinit after reading configfile - cconnect->setDebug(debug); - cconnect->setFritzAdr(FritzAdr); - cconnect->setFritzPort(80); -} - -CFCM::~CFCM() -{ - // -} - -void CFCM::FritzCall() -{ - char Buff1[BUFFERSIZE]; - int sockfd = 0; - int loop = 0; - int len = 0; - - int i; - char* item[MAXITEM]; - - while(!loop) - { - sockfd = cconnect->connect2Host(FritzAdr, FritzPort); - - if (sockfd > 0) { - printf("[%s] - Socked (%i) connected to %s\n", BASENAME, sockfd, easymode?"EasyBox":"FritzBox"); - loop=1; - } - else - sleep(5); - } - - if(!easymode) - { - do { - bzero(Buff1, sizeof(Buff1)); - if((len = recv(sockfd, Buff1, sizeof(Buff1), 0)) <= 0) { - printf("[%s] - recv error\n", BASENAME); - break; - } -#if 0 - /* - * Ankommender Anruf - * 28.08.10 10:21:37;RING;2;040xxx;123x;ISDN; - * Verbunden - * 28.08.10 10:25:40;CONNECT;0;4;040xxx; - * - * Ankommender Anruf / Nummer unterdrückt - * 28.08.10 10:22:07;RING;0;;123x;ISDN; - * Verbunden - * 28.08.10 10:24:37;CONNECT;0;4;; - * - * Abgehender Anruf - * 28.08.10 10:28:48;CALL;1;4;123x;040xxx;ISDN; - * - * Getrennt - * 28.08.10 10:28:51;DISCONNECT;1;0; - */ -#endif - printf("[%s] - %s",BASENAME, Buff1); - - i=0; - //item[0]="not used"; - char* token = strtok(Buff1, ";"); - while (token != NULL) - { - item[i+1] = token; - token = strtok(NULL, ";"); - if (debug) { - if ( i != 0 ) - printf("%i - %s\n", i, item[i]); - } - if (i >= MAXITEM) break; - i++; - } - - if (strcmp(item[2], "RING") == 0) //incomming call - { - if ( i == 5+1) //hidden number - { - strcpy(CallFrom, "Unbekannt"); - strcpy(CallTo, item[4]); - } - else - { - strcpy(CallFrom, item[4]); - strcpy(CallTo, item[5]); - } - printf("[%s] - Eingehender Anruf von %s an %s\n", BASENAME, CallFrom, CallTo); - - for (i=0; i < (int)(sizeof(msnnum)/sizeof(msnnum[0])); i++) - { - if ((i==0 && strcmp(msnnum[i].msn, "") == 0) || strcmp(msnnum[i].msn, CallTo) == 0) - { - if(strlen(msnnum[i].msnName) != 0) - strcpy(CallToName,msnnum[i].msnName); - - if (BackwardSearch && strcmp(CallFrom, "Unbekannt") != 0) - { - search(CallFrom); - } - else - sendMSG(0); - } - } - } - } while (loop); - } - else //EasyBox mode - { - do { - bzero(Buff1, sizeof(Buff1)); - if((len = recv(sockfd, Buff1, sizeof(Buff1), 0)) <= 0) { - printf("[%s] - recv error\n",BASENAME ); - break; - } -#if 0 - //strcpy(Buff1,"CID: *DATE*06072011*TIME*1929*LINE**NMBR*092XXXXXXX*MESG*NONE*NAME*NO NAME*\n"); - - /* - * EasyBox Caller ID - * - * Ankommender Anruf - * CID: *DATE*06072011*TIME*1929*LINE**NMBR*092XXXXXXX*MESG*NONE*NAME*NO NAME* - * - * Ankommender Anruf / Nummer unterdrückt - * CID: *DATE*01072011*TIME*2007*LINE**NMBR*Privat*MESG*NONE*NAME*NO NAME* - */ -#endif - printf("[%s] - %s",BASENAME, Buff1); - - char* ptr; - strcpy(CallFrom,"Unbekannt"); - strcpy(CallTo,"EasyBox"); - - if ((ptr = strstr(Buff1, "CID:"))) //incomming call - { - if ((ptr = strstr(Buff1, "NMBR*"))) - sscanf(ptr + 5, "%63[^*]", (char *) &CallFrom); - else if ((ptr = strstr(Buff1, "LINE*"))) - sscanf(ptr + 5, "%63[^*]", (char *) &CallTo); - - printf("[%s] - Eingehender Anruf von %s an %s\n", BASENAME, CallFrom, CallTo); - - for (i=0; i < (int)(sizeof(msnnum)/sizeof(msnnum[0])); i++) - { - if ((i==0 && strcmp(msnnum[i].msn, "") == 0) || strcmp(msnnum[i].msn, CallTo) == 0) - { - if(strlen(msnnum[i].msnName) != 0) - strcpy(CallToName,msnnum[i].msnName); - - if (BackwardSearch && strcmp(CallFrom, "Privat") != 0 && strcmp(CallFrom, "Unbekannt") != 0) - { - search(CallFrom); - } - else - sendMSG(0); - } - } - } - } while (loop); - } - close(sockfd); - //loop if socked lost - FritzCall(); -} - -int CFCM::search(const char *searchNO) -{ - char *found; - char *line; - ssize_t read; - size_t len; - ostringstream url; - string output ="/tmp/fim.out"; - FILE* fd; - - url << SearchAdr << "/suche/" << searchNO << "/-"; - - memset(&address, 0, sizeof(address)); - - if(search_AddrBook(CallFrom)) { - sendMSG(1); - return 0; - } - - string s = cconnect->post2fritz(url.str().c_str(),80 ,"", output); - - line=NULL; - if((fd = fopen(output.c_str(), "r"))) - { - while ((read = getline(&line, &len, fd)) != -1) - { - if ((found = strstr(line, "target=\"_self\" title=\"Zur Detailseite von "))) - { - sscanf(found + 47, "%255[^\"]", (char *) &address.name); - } - else if ((found = strstr(line, "\"postalCode\" content=\""))) - { - sscanf(found + 22, "%5[^\"]", (char *) &address.code); - } - else if((found = strstr(line, "\"addressLocality\" content=\""))) - { - sscanf(found + 27, "%127[^\"]", (char *) &address.locality); - } - else if((found = strstr(line, "\"streetAddress\" content=\""))) - { - sscanf(found + 25, "%127[^\"]", (char *) &address.street); - } - } - fclose(fd); - } - if(line) - free(line); - - if(strlen(address.name)!=0) { - if (debug){printf("[%s] - (%s) = %s, %s, %s %s\n",BASENAME, searchNO, address.name, address.street, address.code, address.locality);} - - sendMSG(strlen(address.name)); - - // Save address to addressbook - add_AddrBook(CallFrom); - } - else { - printf("[%s] - no results for %s\n",BASENAME, searchNO); - } - - sendMSG(0); - - return 0; -} - -void CFCM::sendMSG(int caller_address) -{ - ostringstream msg; - ostringstream txt; - int i,j; - const char *newline="%0A"; - const char *space="%20%20"; - - if (caller_address) - { - msg << "Anrufer : " << CallFrom << (strlen(address.name)!=0 ? newline : "") - << space << address.name << (strlen(address.street)!=0 ? newline : "") - << space << address.street << (strlen(address.code)!=0 ? newline : "") - << space << address.code << address.locality << newline - << "Leitung : " << (strlen(CallToName)!=0 ? CallToName : CallTo); - } - else - { - msg << "Anrufer : " << CallFrom << newline - << "Leitung : " << (strlen(CallToName)!=0 ? CallToName : CallTo); - } - - if(strcmp(execute,"") != 0) - { - pid_t pid; - signal(SIGCHLD, SIG_IGN); - switch (pid = vfork()) - { - case -1: - perror("vfork"); - break; - case 0: - printf("[%s] - Execute -> %s\n",BASENAME,execute); - if(execl("/bin/sh", "sh", execute, msg.str().c_str(), NULL)) - { - perror("execl"); - } - _exit (0); // terminate c h i l d proces s only - default: - break; - } - } - - for (i=0; i < (int)(sizeof(msnnum)/sizeof(msnnum[0])); i++) - { - if ( (i==0 && strcmp(msnnum[0].msn, "") == 0) || strcmp(msnnum[i].msn, CallTo) == 0) - { - for (j=0; j < (int)(sizeof(boxnum)/sizeof(boxnum[0])); j++) - { - if ((strcmp(boxnum[j].BoxIP, "") != 0)) { - txt.str(""); - txt << msg.str() << ' '; - - char * ptr; - char ip[20]; - int port = 80; - - if ((ptr = strstr(boxnum[j].BoxIP, ":"))) { - sscanf(boxnum[j].BoxIP, "%19[^:]", ip); - sscanf(ptr + 1, "%i", &port); - } - else { - strcpy(ip,boxnum[j].BoxIP); - } - cconnect->get2box(ip, port, txt.str().c_str(), boxnum[j].logon, msgtype, msgtimeout); - } - } - } - } -} - -int CFCM::search_AddrBook(const char *caller) -{ - FILE *fd; - char *line_buffer; - string search_str; - ssize_t ptr; - size_t len; - int i=0; - - if(strlen(caller)!=0){ - search_str = (string) caller + "|"; - } else { - return(0); - } - - if(!(fd = fopen(addressbook, "r"))) { - perror(addressbook); - return(0); - } - else - { - line_buffer=NULL; - while ((ptr = getline(&line_buffer, &len, fd)) != -1) - { - i++; - if (strstr(line_buffer, search_str.c_str())) - { - sscanf(line_buffer,"%*[^|]|%255[^|]|%127[^|]|%5[^|]|%127[^|]", - (char *) &address.name, - (char *) &address.street, - (char *) &address.code, - (char *) &address.locality); - if (debug) - printf("[%s] - \"%s\" found in %s[%d]\n", BASENAME, caller, addressbook, i); - fclose(fd); - if(line_buffer) - free(line_buffer); - return(1); - } - } - if (debug) - printf("[%s] - \"%s\" not found in %s\n", BASENAME, caller, addressbook); - - fclose(fd); - if(line_buffer) - free(line_buffer); - } - return(0); -} - -int CFCM::add_AddrBook(const char *caller) -{ - ofstream os(addressbook, ios::out | ios::app); - - if (os.is_open()) - { - os << caller << '|' - << address.name << '|' - << address.street << '|' - << address.code << '|' - << address.locality << '|' << endl; - os.close(); - } - else - { - return(0); - } - - return(1); -} - -vector CFCM::split(stringstream& str,const char& delim) -{ - string line, cell; - vector result; - - while(getline(str,cell,delim)) - { - result.push_back(cell); - //printf("cell=%s\n",cell.c_str()); - } - return result; -} - -string CFCM::create_map(string& k, const string& t, string& v, map >& m) -{ - // cleanup keys with no values - if(v.empty()) - { - k.clear(); - return(""); - } - - string key; - string::size_type begin = k.find(t); - - if(begin != string::npos) - { - key = k.substr(t.size()); - k.erase(t.size()); - - // modify value - cconnect->StringReplace(v,":;,",";"); - cconnect->StringReplace(v," ;\t",""); - - // create tmp vector - stringstream is(v); - vector tmp = split(is,';'); - - // copy tmp vector into map - m[key].swap(tmp); - - //debug - if(debug) cout << k << '[' << key << ']' << "=" << v << endl; - } - - return(key); -} - -string CFCM::create_map(string& k, const string& t, const string& v, map& m) -{ - if(v.empty()) - { - k.clear(); - return(""); - } - - string key; - string::size_type begin = k.find(t); - if(begin != string::npos) - { - key = k.substr(t.size()); - k.erase(t.size()); - - m[key] = v; - - //debug - cout << k << '[' << key << ']' << "=" << v << endl; - } - - return(key); -} - -void* CFCM::proxy_loop(void* arg) -{ - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,0); - pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS,0); - - static_cast(arg)->query_loop(); - return 0; -} - -int CFCM::query_loop() -{ - sleep(10); - - while(1) - { - if(searchmode) - { - printf("[%s] - %s send query\n", BASENAME, cconnect->timestamp().c_str()); - if(cconnect->get_login(FritzPW)) - { - cconnect->send_TAMquery(adflag,cconnect->getSid(),searchquery); - } - } - - if(!c["DECTBOXIP"].empty()) - { - cconnect->setFritzAdr(c["DECTBOXIP"].c_str()); - printf("[%s] - %s getdevicelistinfos %s\n", BASENAME, cconnect->timestamp().c_str(),c["DECTBOXIP"].c_str()); - - if(cconnect->get_login(c["DECTPASSWD"].c_str())) - { - cconnect->smartHome(cconnect->getSid(),"getdevicelistinfos"); - cconnect->checkdevice(wp,dp); - cconnect->cleardevice(); - } - cconnect->setFritzAdr(FritzAdr); - } - - sleep(searchint); - } - return 0; -} - -void CFCM::start_loop() -{ - if (searchmode || !c["DECTBOXIP"].empty()) { - if(!thrTimer) { - printf("[%s] - %s Start Thread for checking FRITZ!Box (reload %i seconds)\n",BASENAME, cconnect->timestamp().c_str(), searchint); - pthread_create (&thrTimer, NULL, proxy_loop, this) ; - pthread_detach(thrTimer); - } - } -} - -void CFCM::stop_loop() -{ - if(thrTimer) { - printf("[%s] - %s Stop Thread for checking FRITZ!Box\n", BASENAME, cconnect->timestamp().c_str()); - pthread_cancel(thrTimer); - thrTimer = 0; - } -} - -int CFCM::ReadConfig(const char *fname) -{ - FILE *fd_conf; - char *ptr; - char *line_buffer; - ssize_t read; - size_t len; - - line_buffer=NULL; - if((fd_conf = fopen(fname, "r"))) - { - while ((read = getline(&line_buffer, &len, fd_conf)) != -1) - { - char buffer[128]=""; - - if (line_buffer[0] == '#') - continue; - else if ((ptr = strstr(line_buffer, "DECTBOXIP="))) { - sscanf(ptr + 10, "%127s",buffer); -// FritzDectAdr=buffer; - } - else if ((ptr = strstr(line_buffer, "DECTPASSWD="))) { - sscanf(ptr + 11, "%63s", buffer); -// FritzDectPW=buffer; - } - else if ((ptr = strstr(line_buffer, "FRITZBOXIP="))) - sscanf(ptr + 11, "%63s", (char *) &FritzAdr); - else if ((ptr = strstr(line_buffer, "PORT="))) - sscanf(ptr + 5, "%i", &FritzPort); - else if ((ptr = strstr(line_buffer, "BACKWARDSEARCH="))) - sscanf(ptr + 15, "%i", &BackwardSearch); - else if ((ptr = strstr(line_buffer, "DEBUG="))) - sscanf(ptr + 6, "%i", &debug); - else if ((ptr = strstr(line_buffer, "MSGTYPE="))) - sscanf(ptr + 8, "%5s", (char *) &msgtype); - else if ((ptr = strstr(line_buffer, "MSGTIMEOUT="))) - sscanf(ptr + 11, "%i", &msgtimeout); - else if ((ptr = strstr(line_buffer, "MSN_1="))) { - sscanf(ptr + 6, "%31[^|\n]", msnnum[0].msn); - if((ptr = strstr(line_buffer, "|"))) - sscanf(ptr + 1, "%63[^\n]", msnnum[0].msnName); - } - else if ((ptr = strstr(line_buffer, "MSN_2="))) { - sscanf(ptr + 6, "%31[^|\n]", msnnum[1].msn); - if((ptr = strstr(line_buffer, "|"))) - sscanf(ptr + 1, "%63[^\n]", msnnum[1].msnName); - } - else if ((ptr = strstr(line_buffer, "MSN_3="))) { - sscanf(ptr + 6, "%31[^|\n]", msnnum[2].msn); - if((ptr = strstr(line_buffer, "|"))) - sscanf(ptr + 1, "%63[^\n]", msnnum[2].msnName); - } - else if ((ptr = strstr(line_buffer, "MSN_4="))) { - sscanf(ptr + 6, "%31[^|\n]", msnnum[3].msn); - if((ptr = strstr(line_buffer, "|"))) - sscanf(ptr + 1, "%63[^\n]", msnnum[3].msnName); - } - else if ((ptr = strstr(line_buffer, "MSN_5="))) { - sscanf(ptr + 6, "%31[^|\n]", msnnum[4].msn); - if((ptr = strstr(line_buffer, "|"))) - sscanf(ptr + 1, "%63[^\n]", msnnum[4].msnName); - } - else if ((ptr = strstr(line_buffer, "MSN_6="))) { - sscanf(ptr + 6, "%31[^|\n]", msnnum[5].msn); - if((ptr = strstr(line_buffer, "|"))) - sscanf(ptr + 1, "%63[^\n]", msnnum[5].msnName); - } - else if ((ptr = strstr(line_buffer, "BOXIP_1="))) - sscanf(ptr + 8, "%24s", boxnum[0].BoxIP); - else if ((ptr = strstr(line_buffer, "BOXIP_2="))) - sscanf(ptr + 8, "%24s", boxnum[1].BoxIP); - else if ((ptr = strstr(line_buffer, "BOXIP_3="))) - sscanf(ptr + 8, "%24s", boxnum[2].BoxIP); - else if ((ptr = strstr(line_buffer, "BOXIP_4="))) - sscanf(ptr + 8, "%24s", boxnum[3].BoxIP); - else if ((ptr = strstr(line_buffer, "LOGON_1="))) - sscanf(ptr + 8, "%63s", boxnum[0].logon); - else if ((ptr = strstr(line_buffer, "LOGON_2="))) - sscanf(ptr + 8, "%63s", boxnum[1].logon); - else if ((ptr = strstr(line_buffer, "LOGON_3="))) - sscanf(ptr + 8, "%63s", boxnum[2].logon); - else if ((ptr = strstr(line_buffer, "LOGON_4="))) - sscanf(ptr + 8, "%63s", boxnum[3].logon); - else if ((ptr = strstr(line_buffer, "ADDRESSBOOK="))) - sscanf(ptr + 12, "%127s", (char *) &addressbook); - else if ((ptr = strstr(line_buffer, "EASYMODE="))) - sscanf(ptr + 9, "%i", &easymode); - else if ((ptr = strstr(line_buffer, "PASSWD="))) - sscanf(ptr + 7, "%63s", (char *) &FritzPW); - else if ((ptr = strstr(line_buffer, "AD_FLAGFILE="))) - sscanf(ptr + 12, "%127s", (char *) &adflag); - else if ((ptr = strstr(line_buffer, "SEARCH_MODE="))) - sscanf(ptr + 12, "%i", &searchmode); - else if ((ptr = strstr(line_buffer, "SEARCH_QUERY="))) - sscanf(ptr + 13, "%99s", (char *) &searchquery); - else if ((ptr = strstr(line_buffer, "SEARCH_INT="))) - sscanf(ptr + 11, "%i", &searchint); - else if ((ptr = strstr(line_buffer, "CITYPREFIX="))) - sscanf(ptr + 11, "%9s", (char *) &cityprefix); - else if ((ptr = strstr(line_buffer, "EXEC="))) - sscanf(ptr + 5, "%127s", (char *) &execute); - else if ((ptr = strstr(line_buffer, "CALLERLIST_FILE="))) - sscanf(ptr + 16, "%127s", (char *) &listfile); - } - fclose(fd_conf); - } - else - { - printf("[%s] - ERROR open %s\n", BASENAME,fname); - } - if(line_buffer) - free(line_buffer); - - return(0); -} - -int CFCM::read_conf(const string& file) -{ - fstream fh; - string s, key, value, inx; - - // clean table for reload - c.clear(); - wp.clear(); - dp.clear(); - - fh.open(file.c_str(), ios::in); - - if(!fh.is_open()) - { - cout << "Error reading configfile \"" << file << "\"" << endl; - return 1; - } - - while (getline(fh, s)) - { - string::size_type begin = s.find_first_not_of(" \f\t\v"); - - // skip blank lines - if (begin == string::npos) - continue; - - // skip commentary - if (string("#;").find(s[begin]) != string::npos) - continue; - - // extract the key value - string::size_type end = s.find('=', begin); - // skip lines without "=" - if (end == string::npos) - continue; - key = s.substr(begin, end - begin); - - // trim key - //key.erase(key.find_last_not_of(" \f\t\v") + 1); - cconnect->StringReplace(key," ;[;];\f;\t;\v", ""); - - // skip blank keys - if (key.empty()) - continue; - - // extract and trim value - begin = s.find_first_not_of(" \f\n\r\t\v", end); - end = s.find_last_not_of(" \f\n\r\t\v") + 1; - value = s.substr(begin + 1, end - begin); - cconnect->StringReplace(value," ;[;];\f;\t;\v", ""); - - // *** special maps *** - - // create map for Comet temp - inx = create_map(key, "DP", value, dp); - if(!inx.empty()) - continue; - - // create map for Comet week - inx = create_map(key, "WP", value, wp); - if(!inx.empty()) - continue; - - // *** config map *** - - // create map for config - if(!key.empty()) { - c[key] = value; - //debug - //cout << key << "=" << value << endl; - } - } - fh.close(); - - return 0; -} - -void Usage() -{ - printf("[%s] - FritzBox-Anrufmonitor %s %s\n\n", BASENAME, VERSION, COPYR);; - printf("\t\tUSAGE:\t%s\n", BASENAME); - printf("\t\t\t-c\t\t\tget callerlist (FRITZ!Box_Anrufliste.csv)\n"); - printf("\t\t\t-h\t\t\tshow help\n"); - printf("\t\t\t-q\t\t\tsend query to FRITZ!Box\n"); - printf("\t\t\t-m\t\t\tsend message to BOXIP_1\n"); - printf("\t\t\t-s\t\t\tget smart Home infos\n"); - printf("\t\t\t-t [phonenumber] [MSN]\ttest backward search\n"); -} - -int main(int argc, char *argv[]) -{ - CFCM * cfcm = CFCM::getInstance(); - cfcm->run(argc,argv); -} - -int CFCM::run(int argc, char *argv[]) -{ - printf("\n[%s] - NI FRITZ!Box-Anrufmonitor %s - %s\n", BASENAME, VERSION, COPYR); - - if(strlen(msnnum[0].msn)==0) - printf("[%s] - Listening to all MSN's\n", BASENAME); - else { - for (int i=0; i < (int)(sizeof(msnnum)/sizeof(msnnum[0])); i++) { - if(strlen(msnnum[i].msn)!=0) { - cout << '[' << BASENAME << "] - Listening to MSN " << msnnum[i].msn << - (strlen(msnnum[i].msnName)!=0 ? " (" : "") << - (strlen(msnnum[i].msnName)!=0 ? msnnum[i].msnName : "") << - (strlen(msnnum[i].msnName)!=0 ? ")" : "") << endl; - } - } - } - - switch (argc) - { - case 1: - if(searchmode || !c["DECTBOXIP"].empty()) - start_loop(); - FritzCall(); - return 0; - case 2: - if (strstr(argv[1], "-h")) - { - Usage(); - break; - } - else if (strstr(argv[1], "-b")) - { - switch(fork()) - { - case 0: - if(searchmode || !c["DECTBOXIP"].empty()) - start_loop(); - FritzCall(); - break; - - case -1: - printf("[%s] - Aborted!\n", BASENAME); - return -1; - default: - exit(0); - } - } - else if (strstr(argv[1], "-c")) - { - printf("[%s] - get FRITZ!Box_Anrufliste.csv from FritzBox\n", BASENAME); - - if(!cconnect->get_login(FritzPW)) { - exit(1); - } - - //cconnect->send_refresh(cconnect->sid); - cconnect->get_callerlist(cconnect->getSid(),listfile); - cconnect->send_logout(cconnect->getSid()); - exit(0); - } - else if (strstr(argv[1], "-q")) - { - printf("[%s] - %s send query 2 FritzBox\n", BASENAME, cconnect->timestamp().c_str()); - - if(!cconnect->get_login(FritzPW)) { - exit(1); - } - - cconnect->send_TAMquery(adflag,cconnect->getSid(),searchquery); - - exit(0); - } - else if (strstr(argv[1], "-m")) - { - cconnect->get2box(boxnum[0].BoxIP, 80, "FritzCallMonitor Testmessage", boxnum[0].logon, msgtype, msgtimeout); - return 0; - } - else if (strstr(argv[1], "-s")) - { - printf("[%s] - get smart Home infos from FritzBox\n", BASENAME); - - cconnect->setFritzAdr(c["DECTBOXIP"].c_str()); - - if(!cconnect->get_login(c["DECTPASSWD"].c_str())) { - cconnect->setFritzAdr(FritzAdr); - exit(1); - } - - // fill vector with device infos - cconnect->smartHome(cconnect->getSid(),"getdevicelistinfos"); - - cconnect->checkdevice(wp,dp); - // delete device vector - cconnect->cleardevice(); - - cconnect->setFritzAdr(FritzAdr); - exit(0); - } - else - { - Usage(); - exit(1); - } - case 4: - if (strstr(argv[1], "-t")) - { - printf("[%s] - serarch for %s\n", BASENAME, argv[2]); - strcpy(CallFrom, argv[2]); - strcpy(CallTo, argv[3]); - search(CallFrom); - return 0; - } - default: - Usage(); - exit(1); - } - return(0); -} - - diff --git a/archive-sources/FritzCallMonitor/FritzCallMonitor.h b/archive-sources/FritzCallMonitor/FritzCallMonitor.h deleted file mode 100755 index f40cde92..00000000 --- a/archive-sources/FritzCallMonitor/FritzCallMonitor.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * FritzCallMonitor.h - */ -#ifndef __FritzCallMonitor_h__ -#define __FritzCallMonitor_h__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "connect.h" - -#define BASENAME "FCM" -#define VERSION "V5.1" -#define COPYR "2010, 2017 (c) FlatTV" -#define BUFFERSIZE 1024 - -#define MAXITEM 10 -#define CONFIGFILE "/var/tuxbox/config/FritzCallMonitor.cfg" - -using namespace std; - -class CFCM -{ - public: - CFCM(); - ~CFCM(); - static CFCM* getInstance(); - - int run(int argc, char *argv[]); - - private: - CConnect * cconnect; - pthread_t thrTimer; - - vector dect; - map c; // config pair - map > dp; // DECT time and temperatur - map > wp; // DECT week - - typedef struct { - char name[256]; - char street[128]; - char code[6]; - char locality[128]; - } S_ADDRESS; - S_ADDRESS address; - - typedef struct { - char BoxIP[25]; - char logon[64]; - } S_BOXNUM; - S_BOXNUM boxnum[4]; - - typedef struct { - char msn[32]; - char msnName[64]; - } S_MSNNUM; - S_MSNNUM msnnum[6]; - -// string FritzDectAdr; -// string FritzDectPW; - char FritzAdr[64]; - char FritzPW[64]; - char msgtype[6]; - char addressbook[128]; - char execute[128]; - char cityprefix[10]; - char adflag[128]; - char CallFrom[64]; - char CallTo[64]; - char CallToName[64]; - char SearchAdr[20]; - char searchquery[100]; - char listfile[128]; - int debug, BackwardSearch, msgtimeout,easymode, phonebooks; - int FritzPort, SearchPort, searchmode, searchint; - - //global functions - void FritzCall(); - void sendMSG(int caller_address); - int search(const char *searchNO); - int ReadConfig(const char *fname); - int read_conf(const string& file); //FIXME enable this function for all values - int add_AddrBook(const char *caller); - int search_AddrBook(const char *caller); - string create_map(string& k, const string& t, string& v, map >& m); - string create_map(string& k, const string& t, const string& v, map& m); - - //query thread - static void* proxy_loop(void *arg); - void start_loop(); - void stop_loop(); - int query_loop(); - - vector split(stringstream& str, const char& delim); -}; - -#endif// __FritzCallMonitor_h__ diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor.cfg b/archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor.cfg deleted file mode 100644 index 9c625597..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor.cfg +++ /dev/null @@ -1,7 +0,0 @@ -type=2 -name=NI-FRITZ! Info Monitor -desc=FRITZ!Box Informationen -needfb=1 -needlcd=0 -needrc=1 -needoffsets=1 diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor.cpp b/archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor.cpp deleted file mode 100644 index eb6fdbb3..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor.cpp +++ /dev/null @@ -1,591 +0,0 @@ - -#include -#include -#include - -#include "parser.h" -#include "connect.h" -#include "framebuffer.h" -#include "rc.h" -#include "icons.h" -#include "submenu.h" -#include "phonebook.h" -#include "globals.h" - -#include "FritzInfoMonitor.h" - -CFIM* CFIM::getInstance() -{ - static CFIM* instance = NULL; - if(!instance) - instance = new CFIM(); - return instance; -} - -CFIM::CFIM() -{ - cpars = CParser::getInstance(); - cconnect = CConnect::getInstance(); - cfb = Cfb::getInstance(); - crc = Crc::getInstance(); - cicons = CIcons::getInstance(); - - startitem=0, perpage=MAXCALLER, repaint=1, callsel=0, rs_result=0, dialtest=1; - - cfb->init(); - - cfb->getDimensions(&ex, &sx, &ey, &sy); - cfb->getStartDimensions(&startx, &starty); -}; - -CFIM::~CFIM() -{ - Cleanup(); -} - -/****************************************************************************** - * Mainmenu - ******************************************************************************/ -void CFIM::Mainmenu(int init) -{ - printf("[%s] - %s(%d)\n",BASENAME, __FUNCTION__, init); - int bspace = 40; - int lrspace = 30; - int vsx = bspace + lrspace; - int vsy = 80; - int breite = ex-sx - bspace; - int tiefe = ey-sy - bspace; - int zeilenabstand = cfb->getYScreeninfo() < 600 ? 25 : 28; - std::ostringstream txt; - - int sp1 = vsx+30; - int le1 = 140; //Datum - int sp2 = sp1+le1+18; - int le2 = 180; //Name - int sp3 = sp2+le2+18; - int le3 = 180; //Rufnummer - int sp4 = sp3+le3+18; - int le4 = 180; //Telefoniegert - int sp5 = sp4+le4+18; - int le5 = 140; //Eigene Nummer - int sp6 = sp5+le5+18; - int le6 = 60; //Dauer - - // Grafikausgabe - cfb->RenderBox(bspace, 0, breite, tiefe, FILL, CMC); - cfb->RenderBox(bspace, 0, breite, 40, FILL, CMH); - - cfb->PaintIcon(cicons->getIcon_ni(),((breite+bspace)/2)-(120/2)-35,8); - cfb->RenderString("FRITZ! Info", ((breite+bspace)/2)-(120/2) ,30, 120, CENTER, BIG, CMHT); - - // Footer - cfb->RenderBox(bspace, tiefe, breite, tiefe+30, FILL, CMH); - - cfb->RenderCircle( vsx, tiefe+6, RED); - cfb->RenderString("Men", sp1, tiefe+20, 100, LEFT, SMALL, GREY); - - cfb->PaintIcon(cicons->getIcon_right(), sp2, tiefe); - if(startitem > 0) - cfb->PaintIcon(cicons->getIcon_left(), sp2+20, tiefe); - cfb->RenderString("Anrufliste", startitem > 0 ? sp2+20+30 : sp2+30, tiefe+20, 150, LEFT, SMALL, GREY); - - cfb->PaintIcon(cicons->getIcon_help(), sp3, tiefe); - cfb->RenderString("Info", sp3+30, tiefe+20, 100, LEFT, SMALL, GREY); - - if(init == LOGIN) - { - vsy += zeilenabstand; - cfb->RenderString("Sende Login ...", vsx, vsy, 200, LEFT, NORMAL, CMCT); - } - else if(!init || init == CINFO) - { - txt.str(""); - txt << "Firmware: " << cpars->getNspver(); - cfb->RenderString(txt.str().c_str(), breite-200-lrspace, vsy-7, 200, RIGHT, SMALL, GREY); - - vsy += zeilenabstand; - cfb->RenderString("Komfortinfo", vsx ,vsy, 200, LEFT, NORMAL, CMHT); - vsy += zeilenabstand+7; - - txt.str(""); - txt << "Anrufbeantworter: " << (atoi(cpars->getTam0_active().c_str())?"Aktiv, ":"Inaktiv, ") << (atoi(cpars->getTam0_NumNewMessages().c_str())) << " neue Nachrichten"; - cfb->RenderString(txt.str().c_str(), vsx, vsy, breite-vsx-lrspace, LEFT, NORMAL, CMCT); - vsy += zeilenabstand; - - char str[30]; - switch(atoi(cpars->getDdns_state().c_str())) - { - case 0: strcpy(str,"Fehler") ;break; - case 3: strcpy(str,"Anmeldung") ;break; - case 5: strcpy(str,"Angemeldet") ;break;//Erfolgreich angemeldet - case 97: strcpy(str,"Account deaktiviert") ;break; - case 98: strcpy(str,"Internet nicht verbunden") ;break; - case 99: strcpy(str,"Unbekannt") ;break; - default: strcpy(str,"Anmeldung luf") ;break; - } - - string ddns_domain = cpars->getDdns_domain(); - int ddns_state = atoi(cpars->getDdns_state().c_str()); - - txt.str(""); - txt << "Dynamic DNS: " << str << (ddns_domain.empty() ? " " : ", ") << (ddns_state ==0 ? cpars->getPppoe_ip() : ddns_domain); - cfb->RenderString(txt.str().c_str(), vsx, vsy, breite-vsx-lrspace, LEFT, NORMAL, CMCT); - vsy += zeilenabstand; - } - - if(!init) - { - int i=0; - vsy += zeilenabstand; - int csy = vsy; - - if(breite > (sp4+le4)) cfb->RenderString("Telefoniegert", sp4, vsy, le4, LEFT, NORMAL, CMHT); - if(breite > (sp5+le5)) cfb->RenderString("Eigene Nummer", sp5, vsy, le5, LEFT, NORMAL, CMHT); - if(breite > (sp6+le6)) cfb->RenderString("Dauer", sp6, vsy, le6, LEFT, NORMAL, CMHT); - - vsy += 7; - - if(callsel > perpage-1) - callsel=0; - else if(callsel < 0) - callsel=perpage-1; - - unsigned mystart = vsy+zeilenabstand; - unsigned vsi = zeilenabstand; - for (i=0; i < MAXCALLER; i++) - { - vsy += zeilenabstand; - - //selected; - if(callsel==i) - cfb->RenderBox(bspace, mystart+((callsel-1)*vsi+2), breite, mystart+(callsel*vsi+5), FILL, CMHT); - - cfb->PaintIcon(atoi(cpars->caller[i].call_type)==1?cicons->getIcon_phone1():atoi(cpars->caller[i].call_type)==2?cicons->getIcon_phone2():cicons->getIcon_phone3(),vsx,vsy-23); - - cfb->RenderString(cpars->caller[i].call_date, sp1, vsy, le1, LEFT, NORMAL, callsel==i?CMC:CMCT); - - if(strlen(cpars->caller[i].call_name)==0 && strlen(cpars->caller[i].call_numr)!=0) { - if(cpars->search_AddrBook(cpars->caller[i].call_numr)) { - strcpy(cpars->caller[i].call_name,cpars->address.name); - cpars->init_address(); - } - else - strcpy(cpars->caller[i].call_name,"nicht gefunden"); - } - if(strlen(cpars->caller[i].call_numr)==0) - strcpy(cpars->caller[i].call_name,"unbekannt"); - - cfb->RenderString(cconnect->UTF8toISO(cpars->caller[i].call_name)/*txt*/, sp2, vsy, le2, LEFT, NORMAL, callsel==i?CMC:CMCT); - cfb->RenderString((strlen(cpars->caller[i].call_numr)==0 ? "keine Rufnummer" : cpars->caller[i].call_numr), sp3, vsy, le3, LEFT, NORMAL, callsel==i?CMC:CMCT); - - if(breite > (sp4+le4)) - { - cfb->RenderString(cpars->caller[i].port_name, sp4, vsy, le4, LEFT, NORMAL, callsel==i?CMC:CMCT); - } - if(breite > (sp5+le5)) - { - cfb->RenderString(cpars->caller[i].port_rout, sp5, vsy, le5, LEFT, NORMAL, callsel==i?CMC:CMCT); - } - if(breite > (sp6+le6)) - { - cfb->RenderString(cpars->caller[i].call_time, sp6, vsy, le6, LEFT, NORMAL, callsel==i?CMC:CMCT); - } - - if(vsy >= tiefe-50) - { - // RenderString("----", sp1, vsy, le1, LEFT, NORMAL, CMHT); - perpage = i+1; - break; - } - } - - txt.str(""); - txt << "Anrufe " << startitem+1 << " bis " << startitem+perpage; - cfb->RenderString(txt.str().c_str(), vsx, csy, 300, LEFT, NORMAL, CMHT); - - } - else if (init==2) - { - vsy += zeilenabstand; - cfb->RenderString("Anrufe", vsx, vsy, 700, LEFT, NORMAL, CMHT); - vsy += 7; - vsy += zeilenabstand; - cfb->RenderString("Hole Daten von der FRITZ!Box ...", vsx, vsy, 306, LEFT, NORMAL, CMCT); - } - - cfb->FBPaint(); -} - -/****************************************************************************** - * ShowMessage - ******************************************************************************/ -void CFIM::ShowMessage(int message, int popup) -{ - - CSubMenu::getInstance()->ShowMessage(message, popup); - - if(!popup) - { - unsigned short rccode; - while(((rccode=crc->getrc())!=RC_HOME) && (rccode!=RC_OK)); - - if(message == INFO) { - Mainmenu(REPAINT); - } - else if(message == INFO_DIALTEST) { - Mainmenu(REPAINT); - } - else { - Cleanup(); - exit(1); - } - } -} - -/****************************************************************************** - * ShowMenu (submenu) - ******************************************************************************/ -void CFIM::ShowMenu(int menu) -{ - printf("[%s] - %s(%d)\n",BASENAME, __FUNCTION__, menu); - //show menu - switch(menu) - { - case MENU: - case PHONEBOOK: - CSubMenu::getInstance()->ShowSubMenu(menu); - break; - case DIAL: - CSubMenu::getInstance()->DialMenu(dialtest); - break; - case CALLER_DETAILS: - CSubMenu::getInstance()->CallerMenu(rs_result, callsel); - break; - } - - //get rc code - unsigned short rccode; - do - { - switch((rccode = crc->getrc())) - { - case RC_UP: - CSubMenu::getInstance()->subMenu[menu].sel--; - ShowMenu(menu); - rccode=RC_HOME; - break; - case RC_DOWN: - CSubMenu::getInstance()->subMenu[menu].sel++; - ShowMenu(menu); - rccode=RC_HOME; - break; - case RC_OK: - DoExec(menu); - break; - case RC_HOME: - switch(menu) - { - case MENU: - Mainmenu(REPAINT); - break; - case DIAL: - case PHONEBOOK: - cfb->FBClear(); - ShowMenu(MENU); - break; - } - break; - case RC_RED: - switch(menu) - { - case MENU: - cfb->FBClear(); - ShowMenu(PHONEBOOK); - break; - case CALLER_DETAILS: - dialtest=0; - ShowMenu(DIAL); - break; - } - rccode=RC_HOME; - break; - case RC_GREEN: - cfb->FBClear(); - ShowMenu(DIAL); - rccode=RC_HOME; - break; - case RC_YELLOW: - switch(menu) - { - case CALLER_DETAILS: - if(rs_result) - DoExec(ADDADR); - break; - case MENU: - DoExec(RECONNECT); - break; - } - rccode=RC_HOME; - break; - case RC_BLUE: - switch(menu) - { - case MENU: - DoExec(REFRESHCALL); - break; - case CALLER_DETAILS: - DoExec(RSEARCH); - break; - } - rccode=RC_HOME; - break; - case RC_1: - DoExec(ADDRESSBOOK); - rccode=RC_HOME; - break; - } - } - while(rccode!=RC_HOME && rccode!=RC_OK); -} - -/****************************************************************************** - * DoExec - ******************************************************************************/ -void CFIM::DoExec(int function) -{ - printf("[%s] - %s(%d)\n",BASENAME, __FUNCTION__, function); - std::ostringstream txt; - int queryLogic = cconnect->getQueryLogic(); - const char* sid = cconnect->getSid(); - - switch(function) - { - /*0*/ - case MENU: - switch(CSubMenu::getInstance()->subMenu[MENU].sel) - { - //select from submenu - case 0: - cfb->FBClear(); - ShowMenu(PHONEBOOK); - break; - case 1: - cfb->FBClear(); - ShowMenu(DIAL); - break; - case 2: - DoExec(RECONNECT); - break; - case 3: - DoExec(REFRESHCALL); - break; - case 4: - DoExec(ADDRESSBOOK); - break; - } - break; - /*1*/ - case PHONEBOOK: - ShowMessage(INFO_PHONEBOOK,1); - cconnect->get_login(cpars->getFritzPW()); - cconnect->get_phonebooks(sid,CSubMenu::getInstance()->subMenu[PHONEBOOK].sel); - if(queryLogic==1) - cconnect->send_logout(sid); - cfb->FBClear(); - ShowMenu(PHONEBOOK); - break; - /*2*/ - case CALLER_DETAILS: - // nothing to do, SubMenu only - break; - /*3*/ - case DIAL: - cconnect->get_login(cpars->getFritzPW()); - if(dialtest) { - txt.str(""); - txt << "**" << cpars->dialport[CSubMenu::getInstance()->subMenu[DIAL].sel].port; - cconnect->dial(sid,50,txt.str().c_str()); - ShowMessage(INFO_DIALTEST,0); - cconnect->hangup(sid, cpars->dialport[CSubMenu::getInstance()->subMenu[DIAL].sel].port); - } - else { - cfb->FBClear(); - ShowMessage(INFO_DIAL,1); - txt.str(""); - txt << cpars->getDialprefix() << cpars->caller[callsel].call_numr; - cconnect->dial(sid,cpars->dialport[CSubMenu::getInstance()->subMenu[DIAL].sel].port, txt.str().c_str()); - sleep(3); - dialtest=1; - } - if(queryLogic==1) - cconnect->send_logout(sid); - break; - /*4*/ - case RECONNECT: - cconnect->get_login(cpars->getFritzPW()); - cconnect->reconnect(sid); - ShowMessage(INFO_RECONNECT,0); - if(queryLogic==1) - cconnect->send_logout(sid); - break; - /*5*/ - case REFRESHCALL: - startitem = 0; - perpage = MAXCALLER; - ShowMessage(LOAD,1); - cconnect->get_login(cpars->getFritzPW()); - cconnect->send_query_info(sid); - Mainmenu(CINFO); - cconnect->send_refresh(sid); - cconnect->send_query_caller(sid, startitem, MAXCALLER); - Mainmenu(REPAINT); - if(queryLogic==1) - cconnect->send_logout(sid); - break; - /*6*/ - case ADDADR: - cpars->add_AddrBook(cpars->caller[callsel].call_numr); - ShowMessage(INFO_ADDADR,1); - sleep(3); - break; - /*7*/ - case RSEARCH: - if((rs_result = cconnect->rsearch(cpars->caller[callsel].call_numr))) { - ShowMenu(CALLER_DETAILS); - strcpy(cpars->caller[callsel].call_name,cpars->address.name); - cpars->init_address(); - rs_result=0; - } - else { - ShowMessage(INFO_RSEARCH,1); - sleep(3); - } - Mainmenu(REPAINT); - break; - /*8*/ - case ADDRESSBOOK: - CPhoneBook::getInstance()->run(); - Mainmenu(REPAINT); - break; - } -} - - /****************************************************************************** - * Cleanup - ******************************************************************************/ -void CFIM::Cleanup (void) -{ - cfb->Cleanup(); - crc->Cleanup(); - - unlink(cpars->getListfile()); - - printf("[%s] - bye\n",BASENAME); -} - -/****************************************************************************** - * plugin_exec - ******************************************************************************/ -int main(int argc, char *argv[]) -{ - return CFIM::getInstance()->run(argc, argv); -} - -//void plugin_exec(PluginParam *par) -int CFIM::run(int argc, char *argv[]) -{ - printf("[%s] - Version %s\n", BASENAME, VERSION); - if(cpars->ReadConfig(CONFIGFILE)) { - Cleanup(); - exit(1); - } - - //reinit after reading configfile - cconnect->setDebug(cpars->getDebug()); - - cpars->ReadColors(NEUTRINOCONF); - - // lock keyboard-conversions, this is done by the plugin itself - //fclose(fopen(KBLCKFILE,"w")); - - Mainmenu(LOGIN); - int query = cconnect->get_login(cpars->getFritzPW()); - if(!query) { - printf("[%s] - ERROR get_login\n", BASENAME); - ShowMessage(ERR_LOGIN,0); - Cleanup(); - exit(1); - } - - const char* sid = cconnect->getSid(); - int queryLogic = cconnect->getQueryLogic(); - - cconnect->send_query_info(sid); - - Mainmenu(CINFO); - - cconnect->send_refresh(sid); - - cconnect->send_query_caller(sid, 0, MAXCALLER); - - Mainmenu(REPAINT); - - if(query==1) - cconnect->send_logout(sid); - - unsigned short rccode; - do - { - switch((rccode = crc->getrc())) - { - case RC_HELP: - ShowMessage(INFO,0); - break; - case RC_RED: - cfb->FBClear(); - ShowMenu(MENU); - break; - case RC_LEFT: - if(startitem == 0) - break; - startitem -= perpage; - if(startitem<0) - startitem=0; - callsel=0; - ShowMessage(LOAD,1); - cconnect->get_login(cpars->getFritzPW()); - cconnect->send_query_caller(sid, startitem, perpage); - Mainmenu(REPAINT); - if(queryLogic==1) - cconnect->send_logout(sid); - break; - case RC_RIGHT: - startitem += perpage; - callsel=0; - ShowMessage(LOAD,1); - cconnect->get_login(cpars->getFritzPW()); - cconnect->send_query_caller(sid, startitem,perpage); - Mainmenu(REPAINT); - if(queryLogic==1) - cconnect->send_logout(sid); - break; - case RC_DOWN: - callsel++; - Mainmenu(REPAINT); - break; - case RC_UP: - callsel--; - Mainmenu(REPAINT); - break; - case RC_OK: - cpars->search_AddrBook(cpars->caller[callsel].call_numr); - ShowMenu(CALLER_DETAILS); - cpars->init_address(); - Mainmenu(REPAINT); - break; - } - } - while(rccode != RC_HOME); - Cleanup(); - return 0; -} diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor.h b/archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor.h deleted file mode 100644 index a18b2a39..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor.h +++ /dev/null @@ -1,45 +0,0 @@ - -#ifndef __FritzInfoMonitor_h__ -#define __FritzInfoMonitor_h__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -class CFIM -{ - public: - CFIM(); - ~CFIM(); - static CFIM* getInstance(); - - int run(int argc, char *argv[]); - - private: - CConnect * cconnect; - CParser * cpars; - Cfb * cfb; - Crc * crc; - CIcons * cicons; - - enum MAINMENU_INIT - { - REPAINT, - LOGIN, - CINFO, - }; - - int startx, starty, sx, ex, sy, ey; - - void Cleanup(void); - void DoExec(int function); - - // grafische Funktionen - void Mainmenu(int init); - void ShowMessage(int message, int popup); - void ShowMenu(int menu); - - int startitem, perpage, repaint, callsel, rs_result, dialtest; -}; - -#endif// __FritzInfoMonitor_h__ diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor_hint.png b/archive-sources/FritzCallMonitor/FritzInfoMonitor/FritzInfoMonitor_hint.png deleted file mode 100644 index 4ec3e8fc5e5b2e6c90251da932684830e824d28f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2521 zcmV;~2`2W5P) z4-PF`JElYc000SaNLh0L03N{r03N{s!)a7g00004XF*Lt006O%3;baP000SSNklR{%OCnih5J~^YnK`@P z{a*KXe&>AW`|bzyNuTsdpY%ze+$2eem4d||{eBU00of@YY?j_eb{*n$=-@{W!B5Vg znC_N0bYywq?~=@%gMiosO?>qs>gQ$FZB#Qs8vwKf95)EaZeVL$?`1# zZ_-?@(KYsC1q z^0Xw#5nO5GHEQNSF>=HhBqMBF6=gl34m+DOGcPr5z8UUfg6By|gP?_!qR*xRZVnJ1 z7j0Y}VbklbdaJ6V+Vdf>WtQn5qhYG?gG{2Cr}X(i-X^FXp4C?jCI1tshrZN+{~(&i z!OE3ass*$bo-!R(Tlbxq{nKG%=S0JOioq||!AndX`LE1o2C_38hV4c)MmgPOz-)1M(jGm6ms8|_N%qE z6R7j>Fuy)r02W4gSrv^72`A7F20v;jq=`Eaeeqqy6g&&-<|_TIfkb|V5TZb3oym_Z zUpv>iMaq!2y=TVEr5h33yc_gOjZ5T09g`Wo(J|BhQS#~H+6{cne zvoH#$Z!fx>}@?63w1R{Gn_n6-Bx{Coe7QhwgM1-Ltj zr*P>s?jPkr`jdWmew_qyyout;m%IXG#1aw$^R#lDm%m((8U~tM06dYIh&W*kk6+8@ zi^N4fBr@wyvCA6VOx6Y`ZsT_0nSIPPOFlRKTksvt2H3f!o(($;rGcwXgf&20P#q!z zsN5l$8T4XKh6|@-DAaD?k=9DHw#Y>|6*D(Sm=|(f$zePNh7SNHJ;+)FRA%ao2WMHa z0Emf)mQM5bm=L?i0-2B9=R3Vvq8l*B8XQv zwe=k)JUogkOZ0XT4rB6cxGT@Wxn4q{?8OvsJ+{vSVhcqk(c@bf;#YK+DoXd9E!q{I zZcS4y;92Pe$2rta!Z{{vw%O#0Qw%?jROR`*(Z2OE)GD#w-h-!@M?DhQdBS_3jrmh& z+>VSDGE8zYYU?D_j16Tg2zN%Ziv5TQ!;7ndpG^UdA4ShXVXBz@qJtJB6^XS*YydEk zXP@k~$1{#KBJK;|oiYuMlynZ(co>Gi4%Z3>zc5HdScx@t!Vz~bERm@cVG|pR&Y?KZ z?HlC5r-Rxw8b)#uO*j&VOV#?}%*gFls}#yq;l#w?>-cQi@q`mG48_>V`;MfKGXzx9 z)|Z^J7){T<4^M3-n#9oBuF=vZbR?@O05F30iI+1kSInJy1Y^IKmaIxLNhp=XauT3Y zVq`d%H=%BZ6)}>G zq5+L$07=3VEvF=m8pEmY&n@sRih{jAa3-5jm*&H-GJP0b1I%Dc2Z@vvScwLmq|h4h z@){U&2VqE@2dU}6^V@)Jo3!RfSx-S61_E|)HoD-|X9|J8mW*Z{X*Xe5fRFgs{)W;| z$0tz%64aB3r8JnS_6(@C6m$^rlmRCp6?7qock_Dv14h$o?K^V?^ zTI=RUC1mIu8!d;a>4(hjH?MraxB_g~T=PRl?uKgue88D)RwE*PFhdOVT2EMYNjkkas1aG+Bj@tP~d{FX; zT_4~LBVA1X&bNn+m8`tZl=|!PAG!6=Y2+iu?J?5PQ2(VkAm(Vs{zen@WCv2>u)C_^$RLI{2&%Io{b`Ekb4f9 zOAJ1r|IdO-4lwWt4g8)iw{*RCKNPrSL+VgWEkB{(!ZCO?WWWUmpR1?J+})uxx!Ga+ zDsR2X(uK*if&*yRjHrgH7W2OV|2gOXe}%yR!D{Yp#63uaHB?MF@Fp&bt3)aTsRdBC z{4oT6w#j(IulV}KYzoD)`JaD5Ryps;OXh39D_HNpC6`xURhZ$fFrQ{^Nr=XX!1ZD8 j-$?gKpY%ze+;sULz8$t25dny400000NkvXXu0mjfufxAq diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/connect.cpp b/archive-sources/FritzCallMonitor/FritzInfoMonitor/connect.cpp deleted file mode 100644 index e4128e21..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/connect.cpp +++ /dev/null @@ -1,1522 +0,0 @@ - -#include -#include - -#include -#include -#include - -//#include "md5.h" -#include -#include -#include - -#include "parser.h" -#include "globals.h" - -#include "connect.h" - -using namespace std; - -class CurledClass -{ - public: - - static int writer(char *data, size_t size, size_t nmemb, std::string *buffer_in) - { - - // Is there anything in the buffer? - if (buffer_in != NULL) - { - // Append the data to the buffer - buffer_in->append(data, size * nmemb); - - // How much did we write? - return size * nmemb; - } - return 0; - } -}; - -CConnect* CConnect::getInstance() -{ - static CConnect* instance = NULL; - if(!instance) - instance = new CConnect(); - return instance; -} - -CConnect::CConnect() -{ - cpars = CParser::getInstance(); - - //sockfb = 0; - query_logic = 0; - loginLUA = 0; - debug = 1; -} - -CConnect::~CConnect() -{ - // -} - -#if 0 -/****************************************************************************** - * functions - ******************************************************************************/ -#endif -std::string CConnect::post2fritz(const char* url, const std::string data, const std::string curlOutFile) -{ - CURL *curl; - CURLcode result; - - // multipart post - struct curl_httppost *formpost=NULL; - struct curl_httppost *lastptr=NULL; - struct curl_slist *headerlist=NULL; - static const char buf[] = "Expect:"; - - if(!multipart.empty()) - { - curl_global_init(CURL_GLOBAL_ALL); - - // add all map values - for (vector::iterator it = multipart.begin(); it != multipart.end(); ++it) - { - // extract the name value - string::size_type begin = (*it).find_first_not_of(" \f\t\v"); - string::size_type end = (*it).find('='); - string key = (*it).substr(begin, end - begin); - - // extract the contents value - begin = (*it).find_first_not_of(" \f\n\r\t\v", end); - end = (*it).find_last_not_of(" \f\n\r\t\v"); - string value = (*it).substr(begin + 1, end - begin); - - //cout << key << "='" << value << "'" << endl; - - curl_formadd(&formpost, - &lastptr, - CURLFORM_COPYNAME, key.c_str(), - CURLFORM_COPYCONTENTS, value.c_str(), - CURLFORM_END); - } - } - - // Create our curl handle - curl = curl_easy_init(); - - if(!multipart.empty()) { - // initialize custom header list (stating that Expect: 100-continue is not wanted - headerlist = curl_slist_append(headerlist, buf); - } - - //errors - char errorBuffer[CURL_ERROR_SIZE]; - - // Write all expected data in here - std::string buffer; - - if(!curl){ - std::cerr << "Error init Curl!" << std::endl; - return std::string(); - } - - curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer); - curl_easy_setopt(curl, CURLOPT_URL, url); - curl_easy_setopt(curl, CURLOPT_HEADER, 0); - curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0"); - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); - curl_easy_setopt(curl, CURLOPT_VERBOSE, debug?1:0); - curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); - - if(!multipart.empty()) - curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); - - if(!data.empty()) - { - curl_easy_setopt(curl, CURLOPT_POST, 1); - curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str()); - // print CURLOPT_POSTFIELDS - if(debug > 1 && !data.empty()) {cout << '[' << BASENAME << "] - CURLOPT_POSTFIELDS: " << data << endl;} - } - - FILE *tmpFile = fopen(curlOutFile.c_str(), "w"); - if (tmpFile) { - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, tmpFile); - } else { - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CurledClass::writer); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); - } - - // Attempt to retrieve the remote page - result = curl_easy_perform(curl); - - // Always cleanup - curl_easy_cleanup(curl); - if (tmpFile) - fclose(tmpFile); - if(!multipart.empty()) - multipart.clear(); - - if(debug > 1){ - if(curlOutFile.empty()) - cout << "DEBUG-OUT" << ">>" << buffer << "<<" << "DEBUG-OUT END" << endl; - else - cout << "DEBUG-OUT" << ">>" << curlOutFile << "<<" << "DEBUG-OUT END" << endl; - } - - if(result == CURLE_OK) - return(buffer); - - return std::string(); -} - -int CConnect::get_challenge(bool lua) -{ - ostringstream url; - - log(1,"%s(%s)\n", __FUNCTION__, lua?"lua":"xml"); - - //if(mysockfb <= 0){ - // printf("[%s] - CConnect::get_challenge(): ERR connect2Host\n", BASENAME); - // return 0; - //} - - if(lua){ - url << cpars->getFritzAdr() << "/login_sid.lua"; // OS 5.50 - } else { - url << cpars->getFritzAdr() << "/cgi-bin/webcm?getpage=../html/login_sid.xml"; // Firmwareversion xx.04.74 - } - - string s = post2fritz(url.str().c_str(), ""); - - //search - string s1 = ""; - string s2 = ""; - string token; - size_t pos = 0; - - if((pos = s.find(s1)) != string::npos) - { - s.erase(0, pos + s1.length()); - - pos = 0; - if((pos = s.find(s2)) != string::npos) - { - s.erase(pos, s.length()); - if(!s.empty()) - { - strncpy(challenge,s.c_str(),sizeof(challenge)); - if(debug) {printf("[%s] - CHALLENGE %s \n", BASENAME, challenge);} - return 1; - } - } - } - - if(lua) - { - log(0,"%s(%s) - NO CHALLENGE found\n", __FUNCTION__, lua?"lua":"xml"); - return(get_challenge(false/*xml*/)); - } - else - { - log(0,"%s(%s) - failed to get CHALLENGE\n", __FUNCTION__, lua?"lua":"xml"); - } - - return 0; -} - -int CConnect::get_md5(const char *challenge, char *fritzPW) -{ - //convert to utf16 - //http://www.avm.de/de/Extern/Technical_Note_Session_ID.pdf - unsigned int i; - int y = 0; - - std::string utf8_str = (std::string) challenge + "-" + (std::string) UTF8toISO(fritzPW); - std::string utf16_str = (""); - - log(2,"Challenge-Password = \"%s-%s\"\n",challenge, UTF8toISO(fritzPW)); - - log(1,"Binary for hash = "); - - for (i=0; i < utf8_str.length(); i++) - { - y = i*2; - // change UNICODE > 255 in 46 (".") - if (utf8_str[i] > 0xAD) - { - utf16_str += '\x2E'; - utf16_str += '\x00'; - } - else - { - utf16_str += utf8_str[i]; - utf16_str += '\x00'; - } - if (debug) - printf("%02x%02x",utf16_str[y],utf16_str[y+1]); - } - if (debug) - printf("\n"); - - //get md5sum from utf16 binary hash - MD5_CTX ctx; - //struct MD5Context ctx; /*md5.h"*/ - - MD5_Init(&ctx); - MD5_Update(&ctx, utf16_str.c_str(), strlen(utf8_str.c_str())*2)/*size*/; - MD5_Final(digest, &ctx); - - strcpy((char *)md5sum,""); - - for (i = 0; i < 16; i++) { - char fdigest[5]; - sprintf(fdigest,"%02x", digest[i]); - strcat((char *)md5sum, fdigest); - } - - log(2,"MD5 hash = %s (%d)\n",md5sum, strlen((char *)md5sum)); - - return(strlen((char *)md5sum)); -} - -int CConnect::get_sid(const char *challenge, const unsigned char *md5) -{ - ostringstream url,command; - - url << cpars->getFritzAdr() << "/cgi-bin/webcm"; - command << "login:command/response=" - << challenge << '-' << md5 - << "&getpage=../html/login_sid.xml"; - - if(debug) {cout << '[' << BASENAME << "] - " << __FUNCTION__ << "()" << endl;} - - string s = post2fritz(url.str().c_str(), command.str()); - - //search - string s1 = ""; - string s2 = ""; - string token; - size_t pos = 0; - - if((pos = s.find(s1)) != string::npos) - { - s.erase(0, pos + s1.length()); - - pos = 0; - if((pos = s.find(s2)) != string::npos) - { - s.erase(pos, s.length()); - if(s != "0000000000000000" && !s.empty()) - { - strncpy(sid,s.c_str(),sizeof(sid)); - if(debug) {printf("[%s] - SID %s \n", BASENAME, sid);} - return 1; - } - } - } - - printf("[%s] - failed to get SID\n", BASENAME); - return(0); -} - -int CConnect::get_sid_LUA(const char *challenge, const unsigned char *md5) -{ - ostringstream url, command; - - url << cpars->getFritzAdr() << "/login_sid.lua"; - - command << "response=" - << challenge << '-' << md5; - - if(debug) {cout << '[' << BASENAME << "] - " << __FUNCTION__ << "()" << endl;} - - string s = post2fritz(url.str().c_str(), command.str()); - - //search - string s1 = ""; - string s2 = ""; - string token; - size_t pos = 0; - - if((pos = s.find(s1)) != string::npos) - { - s.erase(0, pos + s1.length()); - - pos = 0; - if((pos = s.find(s2)) != string::npos) - { - s.erase(pos, s.length()); - if(s != "0000000000000000" && !s.empty()) - { - strncpy(sid,s.c_str(),sizeof(sid)); - if(debug) {printf("[%s] - SID %s \n", BASENAME, sid);} - return 1; - } - } - } - -/* //split into line - string delimiter = "\n"; - string token; - size_t pos = 0; - - while ((pos = s.find(delimiter)) != string::npos) { - i++; - token = s.substr(0, pos); - if(debug) {cout << "rec[" << i << "]" << token << endl;} - s.erase(0, pos + delimiter.length()); - } -*/ - - printf("[%s] - failed to get SID\n", BASENAME); - return(0); -} -#if 0 -/****************************************************************************** - * tools - ******************************************************************************/ -#endif -char *CConnect::trim(char *txt) -{ - register int l; - register char *p1, *p2; - - if (*txt==' ') - { - for (p1=p2=txt; - (*p1==' ') || (*p1=='\t') || (*p1=='\n') || (*p1=='\r'); - p1++); - while (*p1) - *p2++=*p1++; - *p2='\0'; - } - if ((l=strlen(txt))>0) - for (p1=txt+l-1; - (*p1==' ') || (*p1=='\t') || (*p1=='\n') || (*p1=='\r'); - *p1--='\0'); - return(txt); -} - -char *CConnect::UTF8toISO(char *txt) -{ - //http://www.lingua-systems.de/knowledge/unicode-mappings/iso-8859-1-to-unicode.html - //'ä','ö','ü','Ä','Ö','Ü','ß','é' - const unsigned iso[]={'\xe4','\xf6','\xfc','\xc4','\xd6','\xdc','\xdf','\xe9'}, //ISO-8859-1 ö = 0xf6 - utf[]={'\xa4','\xb6','\xbc','\x84','\x96','\x9c','\x9f','\xa9'}; //UTF-8 ö = 0xc3 0xb6 - - int i,found,quota=0; - char *rptr=txt,*tptr=txt; - - while(*rptr != '\0') - { - if(*rptr=='\'') - { - quota^=1; - } - if (!quota && *rptr=='\xc3' && *(rptr+1)) - { - found=0; - for(i=0; i<(int)sizeof(utf) && !found; i++) - { - if(*(rptr+1)==utf[i]) - { - found=1; - *tptr=iso[i]; - ++rptr; - } - } - if(!found) - { - *tptr=*rptr; - } - } - else if (!quota && *rptr=='\xc2' && *(rptr+1)) - { - *tptr=*(rptr+1); - ++rptr; - } - else - { - *tptr=*rptr; - } - tptr++; - rptr++; - } - *tptr=0; - return(txt); -} - -void CConnect::log(const int& dlevel, const char *ftxt,...) -{ - if(debug >= dlevel) - { - va_list params; - va_start(params, ftxt); - printf("[%s] - ", BASENAME); - vprintf(ftxt, params); - fflush(stdout); - va_end(params); - } -} - -#if 0 -/****************************************************************************** - * get login to Fritz!Box - ******************************************************************************/ -#endif -int CConnect::get_login(const char* fritzPW) -{ - log(1,"%s()\n", __FUNCTION__); - - int ret=get_challenge(); - - if (ret < 0) - return 0; - - if(!ret) - { - if(!send_old_login(fritzPW)) { - log(0,"ERROR send_old_login\n"); - return 0; - } - } - else - { - get_md5(challenge,(char*)fritzPW); - - if(!get_sid_LUA(challenge,md5sum)) - { - log(0,"login_sid.lua not found\n"); - if(!get_sid(challenge,md5sum)) - { - log(0,"ERROR get SID\n"); - return 0; - } - } - else - loginLUA = 1; - } - - query_logic = get_query_logic(sid,0); - - if(!query_logic) { - if(get_OLDquery_logic(sid,1)) { - query_logic=2; //old logic - } - else { - log(0,"ERROR get query logic\n"); - return 0; - } - } - - log(1,"query_logic = %i\n", query_logic); - return(query_logic); -} -#if 0 -/****************************************************************************** - * send logout to Fritz!Box - ******************************************************************************/ -#endif -int CConnect::send_logout(const char *sid) -{ - ostringstream url, command; - - url << cpars->getFritzAdr() << "/cgi-bin/webcm"; - command << "sid=" << sid - << "&security:command/logout=&getpage=../html/confirm_logout.htlm"; - - if(debug) {cout << '[' << BASENAME << "] - " << __FUNCTION__ << "()" << endl;} - - //(w_fritz, "GET /home/home.lua?sid=%s&logout=1 HTTP/1.1\r\nHost: 192.168.99.254\r\n\r\n", sid); - - post2fritz(url.str().c_str(), command.str().c_str()); - - return(1); -} -#if 0 -/****************************************************************************** - * send old logic password to Fritz!Box - ******************************************************************************/ -#endif -int CConnect::send_old_login(const char *fritzPW) -{ - ostringstream url, command; - size_t pos = 0; - - url << cpars->getFritzAdr() << "/cgi-bin/webcm"; - command << "getpage=../html/de/menus/menu2.html&var%3Alang=de&var%3Amenu=home&var%3Apagename=home&login%3Acommand%2Fpassword=" - << fritzPW << "&sid=" << sid; - - if(debug) {cout << '[' << BASENAME << "] - " << __FUNCTION__ << "()" << endl;} - - string s = post2fritz(url.str().c_str(), command.str().c_str()); - - if((pos= s.find("class=\"errorMessage\"")) != std::string::npos) - { - log(0,"failed to get old login\n"); - return 0; - } - - return 1; -} -#if 0 -/****************************************************************************** - * send query's to Fritz!Box - ******************************************************************************/ -#endif -int CConnect::get_query_logic(const char *sid, int logic) -{ - if(!loginLUA) { - return (get_OLDquery_logic(sid, logic)); - } - - size_t pos; - std::ostringstream url; - - log(1,"%s()\n", __FUNCTION__); - - url << cpars->getFritzAdr() << "/query.lua?sid=" << sid - << "&ver=uimodlogic:status/nspver"; //Firmware > 06.9 - - string s = post2fritz(url.str().c_str(), ""); - string res = cpars->parseString("ver", s); - - if(!res.empty() && (pos = res.find('.')) != string::npos) - { - log(0,"Firmwareversion (%s)\n", res.c_str()); - cpars->setNspver(res); - query_logic = 3; - return (query_logic); - } - else - { - url.str(""); - url << cpars->getFritzAdr() << "/query.lua?sid=" << sid - << "&ver=logic:status/nspver"; //Firmware < 06.9 - - s = post2fritz(url.str().c_str(), ""); - res = cpars->parseString("ver", s); - - if(!res.empty() && (pos = res.find('.')) != string::npos) - { - log(0,"Firmwareversion (%s)\n", res.c_str()); - cpars->setNspver(res); - query_logic = 3; - return (query_logic); - } - } - - return (get_OLDquery_logic(sid, logic)); -} - -int CConnect::get_OLDquery_logic(const char *sid, int logic) -{ - ostringstream url, command; - std::string output ="/tmp/fim.out"; - char *line; - ssize_t read; - size_t len; - FILE* fd; - int i = 0; - int res = 0; - - url << cpars->getFritzAdr() << "/cgi-bin/webcm"; - - if(logic) - { - command << "getpage=../html/query.txt&var:cnt=1&var:n0=logic:status/nspver" //old - << "&sid=" << sid; - } - else - { - command << "getpage=../html/query.txt&var:n[0]=logic:status/nspver" //new - << "&sid=" << sid; - } - - log(1,"%s()\n", __FUNCTION__); - - post2fritz(url.str().c_str(), command.str().c_str(),output); - - line=NULL; - if((fd = fopen(output.c_str(), "r"))) - { - while ((read = getline(&line, &len, fd)) != -1) - { - i++; - if(debug){cout << "rec " << '[' << i << ']' << line;} - - if(i==1) - { - if(strlen(trim(line))!=0 && strlen(trim(line))<35) { - log(0,"Firmwareversion (%s)\n", (trim(line))); - cpars->setNspver(trim(line)); - res=1; - } - } - } - fclose(fd); - } - if(line) - free(line); - - return (res); -} - -int CConnect::send_refresh(const char *sid) -{ - if(query_logic == 3) { - return(0); - } - - std::ostringstream url, command; - - url << cpars->getFritzAdr() << "/cgi-bin/webcm"; - - command << "getpage=../html/query.txt" - << (query_logic==2 /*old logic*/ ? "&var:cnt=2" : "") - << "&var:n" - << (query_logic==1 ? "[" : "") << 0 << (query_logic==1 ? "]" : "") - << "=telcfg:settings/RefreshJournal&var:n" - << (query_logic==1 ? "]" : "") << 1 << (query_logic==1 ? "]" : "") - << "=telcfg:settings/Journal/count" - << "&sid=" << sid; - - log(1,"%s()\n", __FUNCTION__); - - post2fritz(url.str().c_str(), command.str().c_str()); - return 0; -} - -/****************************************************************************** - * FritzInfoMonitor - ******************************************************************************/ -#if 0 -void send_query(char *sid, char *searchquery) -{ -/* - -- query.lua - -- - -- Liest Werte von Control-Manager Variablen aus und gibt diese in einer JSON Struktur zur├╝ck. - -- - -- Jeder GET Parameter wird als = gedeutet. kann dabei relativ frei gew├ñhlt werden. - -- ist der Querystring f├╝r eine Control-Manager Variable. - -- - -- Beispiel: http://fritz.box/query.lua?fw=logic:status/nspver&ld=landevice:settings/landevice/list(name,ip,mac) - -- - -- Ja, normale Queries k├Ânnen mit Multiqueries gemischt werden. - -- - -- Multiqueries werden am Vorhandensein von "list(...)" in der Query erkannt. Da alte emu-Module dieses Kommando - -- nicht kennen, kann alternativ der Pr├ñfix "mq_" vor den Namen der Query gesetzt werden. Beispiel: - -- http://fritz.box/query.lua?mq_log=logger:status/log - -- Nur bei einer "mq_" Liste wird der Knotennamen ("landevice0") mit ausgegeben. - -- - -- Und nicht die Session-ID vergessen! Wenn die Box mit einem Passwort gesichert ist, sieht ein Request in - -- Wahrheit so aus: - -- http://fritz.box/query.lua?sid=bc0c3998a520f93c&fw=logic:status/nspver - -- - -- Wenn auf der Box kein Passwort gesetzt ist, kann die Session-ID entfallen. Das Skript sorgt dann selbst f├╝r - -- eine g├╝ltige Session-ID. - -- -*/ - - int i; - int y=0; - int inx=-1; - char *ptr; - char line[BUFFERSIZE]; - - connect2fritz(); - - if(debug) - printf("GET /query.lua?sid=%s&mq_result=%s HTTP/1.1\n", sid, searchquery); - - fprintf(w_fritz, "GET /query.lua?sid=%s&mq_result=%s HTTP/1.1\r\n\r\n", sid, searchquery); - - fflush(w_fritz); - - for (i=1; 1; i+=1) { - - char *s=fgets(line, sizeof(line), r_fritz); - - if(debug) - printf("Line %d/[%d]%d: %s",i,inx,y,line); - - if (s==NULL) - { - break; - } - else if (strstr(line, "Journal")) - { - y=0; - inx++; - } - else if(inx >= 0) - { -/* - Line 1/[-1]0: HTTP/1.0 200 OK - Line 2/[-1]1: Content-type: application/json - Line 3/[-1]2: Expires: -1 - Line 4/[-1]3: - Line 5/[-1]4: { - Line 6/[-1]5: "mq_result" : [ - Line 7/[-1]6: { - Line 8/[-1]7: "_node" : "Journal0", - Line 9/[0]1: "0" : "3", - Line 10/[0]2: "5" : "07.09.11 20:48", - Line 11/[0]3: "Type" : "caller number", - Line 12/[0]4: "Date" : "4", - Line 13/[0]5: "Number" : "0:03", - Line 14/[0]6: "Port" : "my number", - Line 15/[0]7: "Duration" : "0", - Line 16/[0]8: "Route" : "Name", - Line 17/[0]9: "RouteType" : "my home", - Line 18/[0]10: "Name" : "" - Line 19/[0]11: }, - Line 20/[0]12: { - Line 21/[0]13: "_node" : "Journal1", -*/ - switch (y) - { - case 1: sscanf(line + 8, "%[^\"]", (char *) &caller[inx].call_type); - case 2: sscanf(line + 8, "%[^\"]", (char *) &caller[inx].call_date); - case 3: sscanf(line +11, "%[^\"]", (char *) &caller[inx].call_numr); - if(strlen(caller[inx].call_numr) == 0) { - // strcpy(caller[inx].call_numr, "keine Rufnummer"); - } - case 8: sscanf(line +12, "%[^\"]", (char *) &caller[inx].call_name); - if(strlen(caller[inx].call_name) == 0) { - // strcpy(caller[inx].call_name, "unbekannt"); - } - } - } - y++; - } - - if(debug) { - for (i=0; i < MAXCALLER; i++) - printf("inx[%i] %s %s %s %s\n",i,caller[i].call_type, caller[i].call_date, caller[i].call_numr, caller[i].call_name); - } - - // When finished send all lingering transmissions and close the connection - quitfritz(); -} -#endif - -int CConnect::send_query_info(const char *sid) -{ - if(query_logic == 3) { - return(get_QueryInfos(sid)); - } - - char *line; - ssize_t read; - size_t len; - string output ="/tmp/fim.out"; - FILE* fd; - int i = 0; - - ostringstream url, command; - - url << cpars->getFritzAdr() << "/cgi-bin/webcm"; - - if(query_logic==2) - { - command << "getpage=../html/query.txt" - << "&var:cnt=6" - << "&var:n0=ddns:settings/account0/state" - << "&var:n1=ddns:settings/account0/domain" - << "&var:n2=tam:settings/TAM0/Active" - << "&var:n3=tam:settings/TAM0/NumNewMessages" - << "&var:n4=sip:settings/sip0/displayname" - << "&var:n5=sip:settings/sip1/displayname" - << "&var:n6=connection0:pppoe:status/ip" - << "&sid=" << sid; - } - else - { - command << "getpage=../html/query.txt" - << "&var:n[0]=ddns:settings/account0/state" - << "&var:n[1]=ddns:settings/account0/domain" - << "&var:n[2]=tam:settings/TAM0/Active" - << "&var:n[3]=tam:settings/TAM0/NumNewMessages" - << "&var:n[4]=sip:settings/sip0/displayname" - << "&var:n[5]=sip:settings/sip1/displayname" - << "&var:n[6]=connection0:pppoe:status/ip" - << "&sid=" << sid; - } - - log(1,"%s()\n", __FUNCTION__); - - post2fritz(url.str().c_str(), command.str().c_str(),output); - - line=NULL; - if((fd = fopen(output.c_str(), "r"))) - { - while ((read = getline(&line, &len, fd)) != -1) - { - i++; - if(debug>1){cout << "rec " << '[' << i << ']' << line;} - - switch(i) - { - case 1: cpars->setDdns_state(trim(line));break; - case 2: cpars->setDdns_domain(trim(line)); break; - case 3: cpars->setTam0_active(trim(line));break; - case 4: cpars->setTam0_NumNewMessages(trim(line));break; - case 5: cpars->setSip0Nr(trim(line));break; - case 6: cpars->setSip1Nr(trim(line));break; - case 7: cpars->setPppoe_ip(trim(line));break; - } - } - fclose(fd); - log(1,"ddns_state=%i ddns_domain=%s tam0_active=%i tam0_NumNewMessages=%i sip0nr=%s sip1nr=%s pppoe_ip=%s\n", - atoi(cpars->getDdns_state().c_str()), - cpars->getDdns_domain().c_str(), - atoi(cpars->getTam0_active().c_str()), - atoi(cpars->getTam0_NumNewMessages().c_str()), - cpars->getSip0Nr().c_str(),cpars->getSip1Nr().c_str(), - cpars->getPppoe_ip().c_str()); - } - if(line) - free(line); - - return 0; -} - -int CConnect::get_QueryInfos(const char *sid) -{ - ostringstream url,command; - int i = 0; - - url << cpars->getFritzAdr() << "/query.lua?sid=" << sid - << "&var0=ddns:settings/account0/state" - << "&var1=ddns:settings/account0/domain" - << "&var2=tam:settings/TAM0/Active" - << "&var3=tam:settings/TAM0/NumNewMessages" - << "&var4=sip:settings/sip0/displayname" - << "&var5=sip:settings/sip1/displayname" - << "&var6=connection0:pppoe:status/ip"; - - log(1,"%s()\n", __FUNCTION__); - - string s = post2fritz(url.str().c_str(), ""); - StringReplace(s," ",""); - - for (i=0; i <= 6; i++) - { - stringstream ss; - ss << "var" << i; - - string res = cpars->parseString(ss.str().c_str(), s); - - switch(i) - { - case 0: cpars->setDdns_state(res);break; - case 1: cpars->setDdns_domain(res); break; - case 2: cpars->setTam0_active(res);break; - case 3: cpars->setTam0_NumNewMessages(res);break; - case 4: cpars->setSip0Nr(res);break; - case 5: cpars->setSip1Nr(res);break; - case 6: cpars->setPppoe_ip(res);break; - } - } - return 0; -} - -int CConnect::send_query_caller(const char *sid, int s, int max) -{ - if(loginLUA) { - return (get_caller_LUA(sid, s, max)); - } - - std::ostringstream url, command; - int i=0; - char *line; - ssize_t read; - size_t len; - int inx=0; - int inxx=0; - int items=9; - char c1[2] = "["; - char c2[2] = "]"; - string output ="/tmp/fim.out"; - FILE* fd; - - log(1,"%s()\n", __FUNCTION__); - - cpars->init_caller(); - - url << cpars->getFritzAdr() << "/cgi-bin/webcm"; - command << "getpage=../html/query.txt"; - - if(query_logic==2) //old logic - { - strcpy(c1,""); - strcpy(c2,""); - items=7; - command << "&var:cnt=" << items * max; - } - - inx=0; - log(0,"hole Eintrag %d bis %d\n",s+1,s+max); - for (i=s; i <= s+max; i++) - { - command << "&var:n" << c1 << inx << c2 << "=telcfg:settings/Journal" << i << "/Type"; - inx++; - command << "&var:n" << c1 << inx << c2 << "=telcfg:settings/Journal" << i << "/Date"; - inx++; - command << "&var:n" << c1 << inx << c2 << "=telcfg:settings/Journal" << i << "/Number"; - inx++; - command << "&var:n" << c1 << inx << c2 << "=telcfg:settings/Journal" << i << "/Port"; - inx++; - command << "&var:n" << c1 << inx << c2 << "=telcfg:settings/Journal" << i << "/Duration"; - inx++; - command << "&var:n" << c1 << inx << c2 << "=telcfg:settings/Journal" << i << "/Route"; - inx++; - command << "&var:n" << c1 << inx << c2 << "=telcfg:settings/Journal" << i << "/Name"; - inx++; - - if(query_logic==1) - { - command << "&var:n" << c1 << inx << c2 << "=telcfg:settings/Journal" << i << "/RouteType"; - inx++; - command << "&var:n" << c1 << inx << c2 << "=telcfg:settings/Journal" << i << "/PortName"; - inx++; - } - } - command << "&sid=" << sid; - - post2fritz(url.str().c_str(), command.str().c_str(), output); - - i=0; - inx=0; - inxx=0; - - line=NULL; - if((fd = fopen(output.c_str(), "r"))) - { - while ((read = getline(&line, &len, fd)) != -1) - { - i++; - inx++; - if(debug>1){cout << "rec" << '[' << inxx << ']' << '[' << inx << ']' << '[' << i << ']' << line;} -/* - 1="Type"; - 2="Date"; - 3="Number"; - 4="Port"; - 5="Duration"; - 6="Route"; - 7="Name"; - 8="RouteType"; - 9="PortName" -*/ - - switch(inx) - { - case 1: strcpy(cpars->caller[inxx].call_type, trim(line)); break; - case 2: strcpy(cpars->caller[inxx].call_date, trim(line)); break; - case 3: strcpy(cpars->caller[inxx].call_numr, trim(line)); break; - case 5: strcpy(cpars->caller[inxx].call_time, trim(line));break; - case 6: strcpy(cpars->caller[inxx].port_rout, trim(line));break; - case 7: strcpy(cpars->caller[inxx].call_name, UTF8toISO(trim(line))); - if(query_logic != 1) - { - inx=0; - inxx++; - } - break; - case 9: - strcpy(cpars->caller[inx].port_name, UTF8toISO(trim(line))); - inx=0; - inxx++; - break; - } - - if (inxx==max) - { - break; - } - } - fclose(fd); - } - if(debug) { - for (i=0; i < max; i++) - log(1,"inxx[%i] %s(%i) %s(%i) %s(%i) %s(%i) %s(%i) %s(%i) %s(%i)\n",i, - cpars->caller[i].call_type, strlen(cpars->caller[i].call_type), - cpars->caller[i].call_date, strlen(cpars->caller[i].call_date), - cpars->caller[i].call_numr, strlen(cpars->caller[i].call_numr), - cpars->caller[i].call_name, strlen(cpars->caller[i].call_name), - cpars->caller[i].port_rout, strlen(cpars->caller[i].port_rout), - cpars->caller[i].port_name, strlen(cpars->caller[i].port_name), - cpars->caller[i].call_time, strlen(cpars->caller[i].call_time)); - } - if(line) - free(line); - - return(0); -} - -int CConnect::get_caller_LUA(const char *sid, int s, int max) -{ - ostringstream url,command; - string output = "/tmp/fim.out"; - int i = 0; - int inx = 0; - int skip = 1; - - url << cpars->getFritzAdr() << "/fon_num/foncalls_list.lua?csv="; - command << "refresh=&sid=" << sid; - - log(1,"%s()\n", __FUNCTION__); - - post2fritz(url.str().c_str(), command.str().c_str(), cpars->getListfile()); - - cpars->init_caller(); - - ifstream fh(cpars->getListfile()); - if ( fh.is_open() ) - { - string line; - - while (getline(fh,line)) - { - - string Typ; - string Datum; - string Name; - string Rufnummer; - string Nebenstelle; - string Eigene_Rufnummer; - string Dauer; - - istringstream in(line); - - // select data - if(inx <= skip+s) - { - inx++; - continue; - } - else if(inx > skip+s+max) - { - break; - } - - if( getline(in, Typ, ';') && - getline(in, Datum, ';') && - getline(in, Name, ';') && - getline(in, Rufnummer, ';') && - getline(in, Nebenstelle, ';') && - getline(in, Eigene_Rufnummer, ';') && - getline(in, Dauer, ';') ) - { - size_t found; - if((found = Eigene_Rufnummer.find("Internet")) != std::string::npos) - Eigene_Rufnummer.replace(found,8,"@"); - - //this is ugly, better use vector!!! - strcpy(cpars->caller[i].call_type, Typ.c_str()); - strcpy(cpars->caller[i].call_date, Datum.c_str()); - strcpy(cpars->caller[i].call_numr, Rufnummer.c_str()); - strcpy(cpars->caller[i].call_time, Dauer.c_str()); - strcpy(cpars->caller[i].port_rout, Eigene_Rufnummer.c_str()); - strcpy(cpars->caller[i].call_name, UTF8toISO((char*)Name.c_str())); - strcpy(cpars->caller[i].port_name, UTF8toISO((char*)Nebenstelle.c_str())); - - if(debug>1) - { - cout << " rec[" << inx << "]" << line << endl; - cout << "array[" << i << "]" - << Typ << ";" - << Datum << ";" - << Name << ";" - << Rufnummer << ";" - << Nebenstelle << ";" - << Eigene_Rufnummer << ";" - << Dauer << endl; - } - i++; - } - else { - cerr << '[' << BASENAME << "] - " << __FILE__ << " could not parse line [" << inx << "]" << line << endl; - } - inx++; - } - fh.close(); - } - else { - cerr << '[' << BASENAME << "] - " << __FILE__ << "error open file" << endl; - } - - return(0); -} - -int CConnect::get_phonebooks(const char *sid, int phonebook) -{ - char *line; - ssize_t read; - size_t len; - ostringstream url, command; - string output ="/tmp/fim.out"; - FILE* fd; - int i = 0; - - log(1,"%s()\n", __FUNCTION__); - - if(loginLUA) { - return(get_phonebooks_LUA(sid, phonebook)); - } - - cpars->init_address(); - - url << cpars->getFritzAdr() << "/cgi-bin/webcm"; - command << "telcfg:settings/Phonebook/Books/Select=" << phonebook-1 - << "&getpage=../html/de/menus/menu2.html" - << "&var:lang=de" - << "&var:pagename=fonbuch" - << "&var:menu=fon" - << "&sid=" << sid; - - - post2fritz(url.str().c_str(), command.str().c_str(), output); - - line=NULL; - if((fd = fopen(output.c_str(), "r"))) - { - while ((read = getline(&line, &len, fd)) != -1) - { - char *ptr; - char buffer[50]; - - i++; - if(debug>1){cout << "rec " << '[' << i << ']' << line;} - - if ((ptr = strstr(line, ">TrFonName("))) { - sscanf(ptr + 11, "\"%*[^\"]\", \"%[^\"]", (char *) &cpars->address.name); - } - else if ((ptr = strstr(line, ">TrFonNr("))) { - sscanf(ptr + 9, "\"%49[^\"]\", \"%[^\"]", (char *) &buffer,(char *) &cpars->address.number); - - if(!strstr(buffer,"intern")) //no "intern" type - { - if(cpars->address.number[0] != '0' && strlen(cpars->getCityprefix()) > 0) { - sprintf(buffer,"%s%s",cpars->getCityprefix(),cpars->address.number); - strcpy(cpars->address.number,buffer); - } - - if (cpars->search_AddrBook(cpars->address.number)) { - log(1,"[existing]\t%s %s\n",cpars->address.number,cpars->address.name); - } - else { - cpars->add_AddrBook(cpars->address.number); - log(1,"[add]\t\t%s %s\n",cpars->address.number,cpars->address.name); - } - } - } - else if (strstr(line, "document.write(TrFon1())")) { - cpars->init_address(); - } - } - fclose(fd); - } - if(line) - free(line); - - return(0); -} - -int CConnect::get_phonebooks_LUA(const char *sid, int phonebook) -{ - std::ostringstream url,command, vsid, bookID; - string output ="/tmp/fim.out"; - - ifstream fh; - string str, line; - size_t pos; - size_t begin = 0; - - log(1,"%s()\n", __FUNCTION__); - - // create multipart vector - vsid << "sid=" << sid; - bookID << "PhonebookId=" << phonebook; - multipart.push_back(vsid.str()); - multipart.push_back(bookID.str()); - multipart.push_back("PhonebookExportName=Telefonbuch"); - multipart.push_back("PhonebookExport="); - - //get phonebook - url.str(""); - url << cpars->getFritzAdr() << "/cgi-bin/firmwarecfg"; - post2fritz(url.str().c_str(), "", output); - - // parse output - fh.open(output.c_str(), std::ios::in); - if(fh.is_open()) - { - while (!fh.eof()) - { - getline(fh, str); - - // get the whole Data in one line - line += str; - } - fh.close(); - - // loop search - bool stop = false; - do { - str = ""; - if((pos=line.find(str, begin)) != string::npos) - { - size_t name_ende = line.find("", pos); - string tmp = line.substr(pos+str.length(), name_ende - (pos+str.length())); - strcpy(cpars->address.name, tmp.c_str()); - cout << " name - " << cpars->address.name << endl; - } - - str = "", number_start); - tmp = line.substr(number_start+str.length(), number_ende - (number_start+str.length())); - strcpy(cpars->address.number, tmp.c_str()); - cout << " number - " << cpars->address.number << endl; - } - - if(pos == string::npos) - stop = true; - else - { - //add to AddrBook - if(strlen(cpars->address.number) != 0) - { - if(cpars->address.number[0] != '0' && strlen(cpars->getCityprefix()) > 0) { - char buffer[50]; - sprintf(buffer,"%s%s",cpars->getCityprefix(),cpars->address.number); - strcpy(cpars->address.number,buffer); - } - - if(cpars->search_AddrBook(cpars->address.number)) { - cout << '[' << BASENAME << "] - [existing]\t"; - } - else { - cpars->add_AddrBook(cpars->address.number); - cout << '[' << BASENAME << "] - [add]\t"; - } - cout << cpars->address.number << ' ' << cpars->address.name << endl; - } - } - - begin = pos +1; - - } while (!stop); - } -/* - line=NULL; - if((fd = fopen(output.c_str(), "r"))) - { - while ((read = getline(&line, &len, fd)) != -1) - { - char *ptr; - - cpars->init_address(); - i++; - if(debug>1){cout << "rec " << '[' << i << ']' << line;} - - if((ptr = strstr(line, ""))) { - sscanf(ptr + 18, "%[^<]", (char *) &cpars->address.name); - cout << cpars->address.name << endl; - } - - if((ptr = strstr(line, ""))) { - sscanf(ptr + 36, "%[^<]", (char *) &cpars->address.number); - cout << cpars->address.number << endl; - - //add to AddrBook - if(strlen(cpars->address.number) != 0) - { - if(cpars->address.number[0] != '0' && strlen(cpars->getCityprefix()) > 0) { - char buffer[50]; - sprintf(buffer,"%s%s",cpars->getCityprefix(),cpars->address.number); - strcpy(cpars->address.number,buffer); - } - - if(cpars->search_AddrBook(cpars->address.number)) { - cout << '[' << BASENAME << "] - [existing]\t"; - } - else { - cpars->add_AddrBook(cpars->address.number); - cout << '[' << BASENAME << "] - [add]\t"; - } - cout << cpars->address.number << ' ' << cpars->address.name << endl; - } - } - - - } - fclose(fd); - } - if(line) - free(line); -*/ - return(0); -} - -int CConnect::dial(const char *sid, int port, const char *number) -{ - std::ostringstream url,command; - - if(query_logic == 3) { - url << cpars->getFritzAdr() << "/fon_num/fonbook_list.lua?" - << "dial=" << number - << "&orig_port=" << port - << "&sid=" << sid; - } - else { - url << cpars->getFritzAdr() << "/cgi-bin/webcm"; - command << "getpage=../html/de/menus/menu2.html" - << "&telcfg:settings/UseClickToDial=1" - << "&telcfg:settings/DialPort=" << port - << "&telcfg:command/Dial=" << number - << "&sid=" << sid; - } - - log(1,"%s()\n", __FUNCTION__); - - post2fritz(url.str().c_str(), command.str().c_str()); - - return(0); -} - -int CConnect::hangup(const char *sid, int port) -{ - std::ostringstream url,command; - - url << cpars->getFritzAdr() << "/cgi-bin/webcm"; - command << "getpage=../html/de/menus/menu2.html" - << "&telcfg:settings/UseClickToDial=1" - << "&telcfg:settings/DialPort=" << port - << "&telcfg:command/Hangup=" - << "&sid=" << sid; - - log(1,"%s()\n", __FUNCTION__); - - post2fritz(url.str().c_str(), command.str().c_str()); - - return(0); -} - -int CConnect::reconnect(const char *sid) -{ - std::ostringstream url,command; - - if(query_logic == 3) { - url << cpars->getFritzAdr() << "/internet/inetstat_monitor.lua?sid=" << sid - << "&useajax=1&action=disconnect&xhr=1"; - } - else { - url << cpars->getFritzAdr() << "/cgi-bin/webcm"; - command << "sid=" << sid - << "&connection0%3Asettings%2Fcmd_disconnect="; - } - - log(1,"%s()\n", __FUNCTION__); - - post2fritz(url.str().c_str(), command.str().c_str()); - - return(0); -} - -/****************************************************************************** - * reverse search - ******************************************************************************/ -int CConnect::rsearch(const char *searchNO) -{ - char *found; - char *line; - ssize_t read; - size_t len; - ostringstream url; - string sstr; - string output ="/tmp/fim.out"; - FILE* fd; - - log(1,"%s()\n", __FUNCTION__); - - cpars->init_address(); - - if(searchNO[0] != '0') - sstr = (std::string) (strlen(cpars->getCityprefix())>0 ? cpars->getCityprefix() : "") + (std::string) searchNO; - else - sstr = searchNO; - - url << cpars->getSearchAdr() << "/suche/" << sstr << "/-"; - - post2fritz(url.str().c_str(),"", output); - - line=NULL; - if((fd = fopen(output.c_str(), "r"))) - { - while ((read = getline(&line, &len, fd)) != -1) - { - if ((found = strstr(line, "target=\"_self\" title=\"Zur Detailseite von "))) - { - sscanf(found + 47, "%255[^\"]", (char *) &cpars->address.name); - } - else if ((found = strstr(line, "\"postalCode\" content=\""))) - { - sscanf(found + 22, "%5[^\"]", (char *) &cpars->address.code); - } - else if((found = strstr(line, "\"addressLocality\" content=\""))) - { - sscanf(found + 27, "%127[^\"]", (char *) &cpars->address.locality); - } - else if((found = strstr(line, "\"streetAddress\" content=\""))) - { - sscanf(found + 25, "%127[^\"]", (char *) &cpars->address.street); - } - } - fclose(fd); - } - if(line) - free(line); - - if(strlen(cpars->address.name)!=0) { - log(1,"(%s) = %s, %s, %s %s\n",sstr.c_str(), cpars->address.name, cpars->address.street, cpars->address.code, cpars->address.locality); - - return(1); - } - else { - log(0,"no results for %s\n", sstr.c_str()); - } - - return(0); -} - -void CConnect::StringReplace(string &str, const string search, const string rstr) -{ - stringstream f(search); // stringstream f("string1;string2;stringX"); - string s; - while (getline(f, s, ';')) - { - string::size_type ptr = 0; - string::size_type pos = 0; - - while((ptr = str.find(s,pos)) != string::npos) - { - str.replace(ptr,s.length(),rstr); - pos = ptr + rstr.length(); - } - } -} diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/connect.h b/archive-sources/FritzCallMonitor/FritzInfoMonitor/connect.h deleted file mode 100644 index e730b561..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/connect.h +++ /dev/null @@ -1,89 +0,0 @@ - -#ifndef __connect_h__ -#define __connect_h__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -class CConnect -{ - public: - CConnect(); - ~CConnect(); - static CConnect* getInstance(); - - int connect2Host(const char *adr, int port); - int get2box(const char* host, int port, const char* msg, const char* upwd); - int get_login(const char* fritzPW); - int get_callerlist(const char *sid, const char *file); - int get_phonebooks(const char *sid, int phonebook); - int get_phonebooks_LUA(const char *sid, int phonebook); - int send_refresh(const char *sid); - int send_logout(const char *sid); - int send_query(const char* flag, const char *sid, const char *searchstr); - int send_query_caller(const char *sid, int s, int max); - int send_query_info(const char *sid); - int rsearch(const char *searchNO); - int dial(const char *sid, int port, const char *number); - int reconnect(const char *sid); - int hangup(const char *sid, int port); - char *trim(char *txt); - char *UTF8toISO(char *txt); - void log(const int& dlevel, const char *ftxt,...); - void StringReplace(string &str, const string search, const string rstr); - - std::string query2fritz(const char* command); - - virtual int getQueryLogic(){return query_logic;}; - virtual void setDebug(const int Debug){debug = Debug;}; - virtual const char* getSid(){return sid;}; - - private: - CParser * cpars; - - FILE *r_fritz; - FILE *w_fritz; - int sockfb; - int debug; - int query_logic; - int loginLUA; - char sid[20]; - char challenge[20]; - vector multipart; - - string timestamp(); - string basename; - unsigned char digest[16]; - unsigned char md5sum[33]; - - int connect2fritz(); - int quitfritz(); - int get_challenge(bool lua = true); - int get_md5(const char *challenge, char *fritzPW); - int get_sid(const char *challenge, const unsigned char *md5); - int get_sid_LUA(const char *challenge, const unsigned char *md5); - int get_caller_LUA(const char *sid, int s, int max); - int get_challenge(const char* host, int port,const char* fritzPW); - std::string post2fritz(const char* url, const std::string data, const std::string curlOutFile = ""); - int get_OLDquery_logic(const char *sid, int logic); - - ///get Infos from FB with query.lua - int get_QueryInfos(const char *sid); - - //FritzInfoMonitor - //Firmware < xx.04.74 without SID - int send_old_login(const char *fritzPW); - - int ExistFile(const char *fname); - int TouchFile(const char *fname); - -//FIXME void init_caller(); -//FIXME void init_address(); - - ///query syntax - int get_query_logic(const char *sid, int logic); - void get_query_version(const char *sid); -}; - -#endif //__connect_h__ diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/framebuffer.cpp b/archive-sources/FritzCallMonitor/FritzInfoMonitor/framebuffer.cpp deleted file mode 100644 index 1a9b2147..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/framebuffer.cpp +++ /dev/null @@ -1,456 +0,0 @@ - -#include -#include -#include -#include - -#include "parser.h" -#include "globals.h" - -#include "framebuffer.h" - -const char circle[]={ - 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 9,9,1,1,1,1,1,1,1,1,1,1,1,9,9, - 9,9,1,1,1,1,1,1,1,1,1,1,1,9,9, - 9,9,1,1,1,1,1,1,1,1,1,1,1,9,9, - 9,9,1,1,1,1,1,1,1,1,1,1,1,9,9, - 9,9,1,1,1,1,1,1,1,1,1,1,1,9,9, - 9,9,1,1,1,1,1,1,1,1,1,1,1,9,9, - 9,9,1,1,1,1,1,1,1,1,1,1,1,9,9, - 9,9,1,1,1,1,1,1,1,1,1,1,1,9,9, - 9,9,1,1,1,1,1,1,1,1,1,1,1,9,9, - 9,9,1,1,1,1,1,1,1,1,1,1,1,9,9, - 9,9,1,1,1,1,1,1,1,1,1,1,1,9,9, - 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9 -}; - -Cfb* Cfb::getInstance() -{ - static Cfb* instance = NULL; - if(!instance) - instance = new Cfb(); - return instance; -} - -Cfb::Cfb() -{ - cpars = CParser::getInstance(); - - memset(&lfb, 0, sizeof(lfb)); - memset(&lbb, 0, sizeof(lbb)); -} - -Cfb::~Cfb() -{ - Cleanup(); -} - -int Cfb::init() -{ - FT_Error error; - - fb = sx = ex = sy = ey = -1; - - // open Framebuffer - fb=open ( "/dev/fb/0", O_RDWR ); - - // init framebuffer - if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) - { - printf("[%s] \n",BASENAME); - return(2); - } - - if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1) - { - printf("[%s] \n",BASENAME); - return(2); - } - - if(!(lfb = (unsigned char*)mmap(0, fix_screeninfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0))) - { - printf("[%s] \n",BASENAME); - return(2); - } - - // init fontlibrary - if((error = FT_Init_FreeType(&library))) - { - printf("[%s] ",BASENAME, error); - munmap(lfb, fix_screeninfo.smem_len); - return(2); - } - - if((error = FTC_Manager_New(library, 1, 2, 0, &MyFaceRequester, this, &manager))) - { - printf("[%s] \n",BASENAME, error); - FT_Done_FreeType(library); - munmap(lfb, fix_screeninfo.smem_len); - return(2); - } - - if((error = FTC_SBitCache_New(manager, &cache))) - { - printf("[%s] \n",BASENAME, error); - FTC_Manager_Done(manager); - FT_Done_FreeType(library); - munmap(lfb, fix_screeninfo.smem_len); - return(2); - } - - if((error = FTC_Manager_Lookup_Face(manager, (char *)FONT, &face))) - { - printf("[%s] \n",BASENAME, error); - FTC_Manager_Done(manager); - FT_Done_FreeType(library); - munmap(lfb, fix_screeninfo.smem_len); - return(2); - } - - use_kerning = FT_HAS_KERNING(face); - - desc.face_id = (char *)FONT; - - desc.flags = FT_LOAD_MONOCHROME; - - - // init backbuffer - if(!(lbb = (unsigned char*)malloc(fix_screeninfo.line_length*var_screeninfo.yres))) - { - printf("[%s] \n",BASENAME); - FTC_Manager_Done(manager); - FT_Done_FreeType(library); - munmap(lfb, fix_screeninfo.smem_len); - return(2); - } - - // volle Bildschirmauflösung reservieren (Parameter: buffer, color, size in bytes) - memset(lbb, 0, fix_screeninfo.line_length*var_screeninfo.yres); - printf("[%s] - init: FB %dx%dx%d stride %d\n",BASENAME, var_screeninfo.xres, var_screeninfo.yres, var_screeninfo.bits_per_pixel, fix_screeninfo.line_length);; - - cpars->read_neutrino_osd_conf(&ex,&sx,&ey,&sy,NEUTRINOCONF); - if((ex == -1) || (sx == -1) || (ey == -1) || (sy == -1)) - { - sx = 80; - ex = var_screeninfo.xres - 80; - sy = 80; - ey = var_screeninfo.yres - 80; - } - - int mwidth = ex-sx; - int mheight = ey-sy; - - //mwidth = 620; - startx = sx + (((ex-sx) - mwidth)/2); - starty = sy + (((ey-sy) - mheight)/2); - - //vyres = var_screeninfo.yres; - - return(0); -} - -/****************************************************************************** - * MyFaceRequester - ******************************************************************************/ -FT_Error Cfb::MyFaceRequester(FTC_FaceID face_id, FT_Library library, FT_Pointer request_data, FT_Face *aface) -{ - FT_Error result; - - result = FT_New_Face(library, (char *)face_id, 0, aface); - - if(!result) - { - printf("[%s] - \n",BASENAME, (char*)face_id); - } - else - { - printf("[%s] \n",BASENAME, (char*)face_id); - } - - return result; -} - -/****************************************************************************** - * RenderChar - ******************************************************************************/ -int Cfb::RenderChar(FT_ULong currentchar, int sx, int sy, int ex, int color) -{ - int row, pitch, bit, x = 0, y = 0; - FT_Error error; - FT_UInt glyphindex; - FT_Vector kerning; - FTC_Node anode; - - //load char - if(!(glyphindex = FT_Get_Char_Index(face, currentchar))) - { - printf("[%s] \n",BASENAME, (int)currentchar); - return 0; - } - - if((error = FTC_SBitCache_Lookup(cache, &desc, glyphindex, &sbit, &anode))) - { - printf("[%s] \n",BASENAME, (int)currentchar, error); - return 0; - } - - if(use_kerning) - { - FT_Get_Kerning(face, prev_glyphindex, glyphindex, ft_kerning_default, &kerning); - - prev_glyphindex = glyphindex; - kerning.x >>= 6; - } - else - { - kerning.x = 0; - } - - // render char - if(color != -1) /* don't render char, return charwidth only */ - { - if(sx + sbit->xadvance >= ex) - { - return -1; /* limit to maxwidth */ - } - - for(row = 0; row < sbit->height; row++) - { - for(pitch = 0; pitch < sbit->pitch; pitch++) - { - for(bit = 7; bit >= 0; bit--) - { - if(pitch*8 + 7-bit >= sbit->width) - { - break; /* render needed bits only */ - } - - if((sbit->buffer[row * sbit->pitch + pitch]) & 1<left + kerning.x + x ) *4 + fix_screeninfo.line_length* ( starty + sy - sbit->top + y ),cpars->bgra[color],4 ); - } - - x++; - } - } - - x = 0; - y++; - } - } - - // return charwidth - return sbit->xadvance + kerning.x; -} - -/****************************************************************************** - * GetStringLen - ******************************************************************************/ -int Cfb::GetStringLen(const char *string) -{ - int stringlen = 0; - - // reset kerning - - prev_glyphindex = 0; - - // calc len - - while(*string != '\0') - { - stringlen += RenderChar(*string, -1, -1, -1, -1); - string++; - } - - return stringlen; -} - -/****************************************************************************** - * RenderString - ******************************************************************************/ -void Cfb::RenderString(const char *string, int sx, int sy, int maxwidth, int layout, int size, int color) -{ - int stringlen, ex, charwidth; - - // set size - - if(size == SMALL) - { - desc.width = desc.height = 26; - } - else if(size == NORMAL) - { - desc.width = desc.height = 32; - } - else - { - desc.width = desc.height = 40; - } - - // set alignment - - if(layout != LEFT) - { - stringlen = GetStringLen(string); - - switch(layout) - { - case CENTER: - if(stringlen < maxwidth) - { - sx += (maxwidth - stringlen)/2; - } - - break; - - case RIGHT: - - if(stringlen < maxwidth) - { - sx += maxwidth - stringlen; - } - } - } - - // reset kerning - - prev_glyphindex = 0; - - // render string - - ex = sx + maxwidth; - - while(*string != '\0') - { - if((charwidth = RenderChar(*string, sx, sy, ex, color)) == -1) - { - return; /* string > maxwidth */ - } - - sx += charwidth; - string++; - } -} - -/****************************************************************************** - * RenderBox - ******************************************************************************/ -void Cfb::RenderBox(int sx, int sy, int ex, int ey, int mode, int color) -{ - int loop; - - if(mode == FILL) - { - for(; sy <= ey; sy++) - { - HorLine(sx, sy, ex-sx+1, color); - } - } - else - { - // hor lines - for(loop = sx; loop <= ex; loop++) - { - SetPixel(loop, sy , color); - SetPixel(loop, sy+1, color); - SetPixel(loop, ey-1, color); - SetPixel(loop, ey , color); - } - - // ver lines - for(loop = sy; loop <= ey; loop++) - { - SetPixel(sx , loop, color); - SetPixel(sx+1, loop, color); - SetPixel(ex-1, loop, color); - SetPixel(ex , loop, color); - } - } -} - -/****************************************************************************** - * RenderCircle - ******************************************************************************/ -void Cfb::RenderCircle(int sx, int sy, int color) -{ - int x, y; - - for (y=0; y<15; y++) - for (x=0; x<15; x++) - if (circle[x+y*15]) - { - if (circle[x+y*15] == 1) - SetPixel(sx + x, sy + y, color); - else - SetPixel(sx + x, sy + y, (int)circle[x+y*15]); - } -} - -/****************************************************************************** - * HorLine / SetPixel / PaintIcon - ******************************************************************************/ -//#define SetPixel(x, y, c) memcpy(lbb + ((startx + (x))<<2) + fix_screeninfo.line_length*(starty + (y)), bgra[c], 4) -void Cfb::HorLine(int x, int y, int l, int color) -{ - for (l+=x; xbgra[c], 4); -} - -void Cfb::PaintIcon(unsigned char *icon, int sx, int sy) -{ - struct rawHeader header; - uint16_t width, height; - int x, y; - - memcpy(&header, icon, sizeof(struct rawHeader)); - width = (header.width_hi << 8) | header.width_lo; - height = (header.height_hi << 8) | header.height_lo; - icon+=sizeof(struct rawHeader); - - for (y=0; y> 4; - if (pix != header.transp) - SetPixel(sx+x, sy+y, pix+1); - pix = (*icon++ & 0x0f); - if (pix != header.transp) - SetPixel(sx+x+1, sy+y, pix+1); - } - } -} - -void Cfb::FBPaint(void) -{ - memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres); -} - -void Cfb::FBClear(void) -{ - RenderBox(0, 0, ex-sx, ey-sy, FILL, 0); -} - -/****************************************************************************** - * Cleanup - ******************************************************************************/ -void Cfb::Cleanup (void) -{ - FTC_Manager_Done(manager); - FT_Done_FreeType(library); - - free(lbb); - munmap(lfb, fix_screeninfo.smem_len); - - close(fb); -} - diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/framebuffer.h b/archive-sources/FritzCallMonitor/FritzInfoMonitor/framebuffer.h deleted file mode 100644 index 6ae962fc..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/framebuffer.h +++ /dev/null @@ -1,84 +0,0 @@ - -#ifndef __framebuffer_h__ -#define __framebuffer_h__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -/* freetype stuff */ -#define FONT "/share/fonts/pakenham.ttf" - -#include -#include FT_FREETYPE_H -#include FT_CACHE_H -#include FT_CACHE_SMALL_BITMAPS_H - -#if ((defined(FREETYPE_MAJOR)) && (((FREETYPE_MAJOR == 2) && (((FREETYPE_MINOR == 1) && (FREETYPE_PATCH >= 9)) || (FREETYPE_MINOR > 1))) || (FREETYPE_MAJOR > 2))) -#define FTC_Manager_Lookup_Face FTC_Manager_LookupFace -#define _FTC_SBit_Cache_Lookup(a,b,c,d) FTC_SBitCache_Lookup(a,b,c,d,NULL) -#else -#define _FTC_SBit_Cache_Lookup(a,b,c,d) FTC_SBit_Cache_Lookup(a,b,c,d) -#endif - - -class Cfb -{ - public: - Cfb(); - ~Cfb(); - static Cfb* getInstance(); - - int init(); - int RenderChar(FT_ULong currentchar, int sx, int sy, int ex, int color); - int GetStringLen(const char *string); - void RenderString(const char *string, int sx, int sy, int maxwidth, int layout, int size, int color); - void RenderBox(int sx, int sy, int ex, int ey, int mode, int color); - void RenderCircle(int sx, int sy, int color); - void HorLine(int x, int y, int l, int color); - void SetPixel(int x, int y, int c); - void PaintIcon(unsigned char *icon, int sx, int sy); - void FBPaint(void); - void FBClear(void); - void Cleanup (void); - - int GetRCCode(); - - virtual void getDimensions(int* fb_ex, int* fb_sx, int* fb_ey, int* fb_sy){*fb_ex=ex; *fb_sx=sx; *fb_ey=ey; *fb_sy=sy;}; - virtual void getStartDimensions(int* fb_startx, int* fb_starty){*fb_startx=startx; *fb_starty=starty;}; - virtual int getYScreeninfo(){return var_screeninfo.yres;}; - - private: - CParser * cpars; - - int fb, startx, starty, sx, ex, sy, ey; - - struct fb_fix_screeninfo fix_screeninfo; - struct fb_var_screeninfo var_screeninfo; - unsigned char *lfb, *lbb; - - FT_Library library; - FTC_Manager manager; - FTC_SBitCache cache; - FTC_SBit sbit; - FTC_ImageTypeRec desc; - FT_Face face; - FT_UInt prev_glyphindex; - FT_Bool use_kerning; - - static FT_Error MyFaceRequester(FTC_FaceID face_id, FT_Library library, FT_Pointer request_data, FT_Face *aface); - - struct rawHeader - { - uint8_t width_lo; - uint8_t width_hi; - uint8_t height_lo; - uint8_t height_hi; - uint8_t transp; - } __attribute__ ((packed)); -}; - -#endif //__framebuffer_h__ \ No newline at end of file diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/globals.h b/archive-sources/FritzCallMonitor/FritzInfoMonitor/globals.h deleted file mode 100644 index 354bfb59..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/globals.h +++ /dev/null @@ -1,124 +0,0 @@ - -#ifndef __globals_h__ -#define __globals_h__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -//settings -#define KBLCKFILE "/tmp/keyboard.lck" -#define NEUTRINOCONF "/var/tuxbox/config/neutrino.conf" -#define CONFIGFILE "/var/tuxbox/config/FritzCallMonitor.cfg" - -#define BASENAME "FIM" -#define VERSION "V4.4" -#define COPYR "2011 (c) FlatTV" - -/* rc codes */ -#define RC_0 '0' -#define RC_1 '1' -#define RC_2 '2' -#define RC_3 '3' -#define RC_4 '4' -#define RC_5 '5' -#define RC_6 '6' -#define RC_7 '7' -#define RC_8 '8' -#define RC_9 '9' - -#define RC_RIGHT 0x0191 -#define RC_LEFT 0x0192 -#define RC_UP 0x0193 -#define RC_DOWN 0x0194 -#define RC_PLUS 0x0195 -#define RC_MINUS 0x0196 - -#define RC_OK 0x0D -#define RC_STANDBY 0x1C -#define RC_ESC RC_HOME - -#define RC_HOME 0x01B1 -#define RC_MUTE 0x01B2 -#define RC_HELP 0x01B3 -#define RC_DBOX 0x01B4 -#define RC_INFO RC_HELP - -#define RC_GREEN 0x01A1 -#define RC_YELLOW 0x01A2 -#define RC_RED 0x01A3 -#define RC_BLUE 0x01A4 - -#define RC_PAUSE RC_HELP -#define RC_ALTGR 0x12 -#define RC_BS 0x7F -#define RC_POS1 RC_HOME -#define RC_END 0x13 -#define RC_INS 0x10 -#define RC_ENTF 0x11 -#define RC_STRG 0x00 -#define RC_LSHIFT 0x0E -#define RC_RSHIFT 0x0E -#define RC_ALT 0x0F -#define RC_NUM RC_DBOX -#define RC_ROLLEN 0x00 -#define RC_F5 RC_DBOX -#define RC_F6 RC_HELP -#define RC_F7 RC_MUTE -#define RC_F8 0x01C8 -#define RC_F9 0x01C9 -#define RC_F10 0x01CA -#define RC_RET 0x0D -#define RC_RET1 0x01CC -#define RC_CAPSLOCK 0x01CD -#define RC_ON 0x01CE - -#define RC_F1 RC_RED -#define RC_F2 RC_GREEN -#define RC_F3 RC_YELLOW -#define RC_F4 RC_BLUE -#define RC_PAGEUP 104 -#define RC_PAGEDOWN 109 - -//framebuffer -enum { FILL, GRID}; -enum { LEFT, CENTER, RIGHT}; -enum { SMALL, NORMAL, BIG}; - -//parser -enum { TRANSP ,BLACK ,RED ,GREEN, - BROWN ,BLUE ,MAGENTA ,CYAN, - GREY ,B_GREY ,B_RED ,B_GREEN, - YELLOW ,B_BLUE ,B_MAGENTA ,B_CYAN, - WHITE ,CMH ,CMHT ,CMC, - CMCT ,ORANGE ,SKIN0 ,SKIN1 -}; - -enum MENU -{ - MENU, - PHONEBOOK, - CALLER_DETAILS, - DIAL, - RECONNECT, - REFRESHCALL, - ADDADR, - RSEARCH, - ADDRESSBOOK -}; - -enum MESSAGE -{ - ERR_CONNECT, - ERR_LOGIN, - INFO, - INFO_ADDADR, - INFO_DIALTEST, - INFO_DIAL, - INFO_PHONEBOOK, - INFO_RSEARCH, - INFO_RECONNECT, - LOAD -}; - -#endif //__globals_h__ diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/icons.cpp b/archive-sources/FritzCallMonitor/FritzInfoMonitor/icons.cpp deleted file mode 100644 index 40aa3ed0..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/icons.cpp +++ /dev/null @@ -1,738 +0,0 @@ - -#include - -#include "icons.h" - -CIcons* CIcons::getInstance() -{ - static CIcons* instance = NULL; - if(!instance) - instance = new CIcons(); - return instance; -} - -CIcons::CIcons() -{ - // -}; - -CIcons::~CIcons() -{ -} - -unsigned char * CIcons::getIcon_ni() -{ - static unsigned char ni[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , - 0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , - 0x33 ,0x33 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0x33 ,0x33 ,0x03 ,0x33 ,0x33 , - 0x03 ,0x33 ,0x30 ,0x00 ,0x00 ,0x00 ,0x00 ,0x33 ,0x33 ,0x03 ,0x33 ,0x30 , - 0x00 ,0x33 ,0x33 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x33 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x33 ,0x30 ,0x00 ,0x00 ,0x00 ,0x03 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x33 ,0x33 ,0x00 ,0x00 ,0x00 ,0x03 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x33 ,0x33 ,0x30 ,0x00 ,0x00 ,0x03 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x33 ,0x33 ,0x33 ,0x00 ,0x00 ,0x03 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x30 ,0x33 ,0x33 ,0x30 ,0x00 ,0x03 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x30 ,0x03 ,0x33 ,0x33 ,0x00 ,0x03 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x30 ,0x00 ,0x33 ,0x33 ,0x30 ,0x03 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x30 ,0x00 ,0x03 ,0x33 ,0x33 ,0x03 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x30 ,0x00 ,0x00 ,0x33 ,0x33 ,0x33 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x30 ,0x00 ,0x00 ,0x03 ,0x33 ,0x33 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x30 ,0x00 ,0x00 ,0x00 ,0x33 ,0x33 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x30 ,0x00 ,0x00 ,0x00 ,0x03 ,0x33 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x30 ,0x00 ,0x00 ,0x00 ,0x00 ,0x33 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x30 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x33 ,0x30 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0x33 ,0x03 ,0x33 ,0x00 , - 0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x33 ,0x00 ,0x00 ,0x00 , - 0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , - 0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 }; - - return(ni); -} - -unsigned char * CIcons::getIcon_phone1() -{ - /*blue*/ - static unsigned char phone1[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xcc, 0xcc, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, - 0x0c, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x0c, 0xcc, 0x00, 0x00, 0x00, - 0x0c, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0xc0, 0x00, 0x00, 0x00, - 0x0c, 0xcc, 0xcc, 0xcc, 0x00, 0x0c, 0x0c, 0xcc, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xcc, 0xcc, 0x00, 0x00, 0x0c, 0xcc, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xcc, 0xc0, 0x00, 0x00, 0x0c, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x0c, 0xcc, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0c, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0c, 0xcc, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0xcc, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x0c, 0xcc, 0xc0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xcc, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(phone1); -} - -unsigned char * CIcons::getIcon_phone2() -{ - /*red*/ - static unsigned char phone2[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x99, 0x99, 0x90, 0x00, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x00, - 0x09, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x00, - 0x09, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x00, - 0x09, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x00, - 0x09, 0x99, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x99, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x99, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x09, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x09, 0x99, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x09, 0x99, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x99, 0x99, 0x00, 0x09, 0x99, 0x90, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x09, 0x99, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x99, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(phone2); -} - -unsigned char * CIcons::getIcon_phone3() -{ - /*green*/ - static unsigned char phone3[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xaa, 0xaa, 0xa0, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x00, - 0x0a, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x0a, 0xaa, 0x00, 0x00, 0x00, - 0x0a, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x00, - 0x0a, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x0a, 0xaa, 0x0a, 0x00, 0x00, 0x00, - 0x0a, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xa0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xaa, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0a, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0a, 0xaa, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0a, 0xaa, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x0a, 0xaa, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(phone3); -} - -#if 0 -unsigned char * CIcons::getIcon_up() -{ - static unsigned char up[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x8f, 0xff, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x80, - 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(up); -} - -unsigned char * CIcons::getIcon_down() -{ - static unsigned char down[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x8f, 0xff, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(down); -} - -unsigned char * CIcons::getIcon_plus() -{ - static unsigned char plus[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(plus); -} - -unsigned char * CIcons::getIcon_minus() -{ - static unsigned char minus[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(minus); -} - -unsigned char * CIcons::getIcon_power_button() -{ - static unsigned char power_button[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x33, 0x33, 0x3f, 0xf3, 0x33, 0x33, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x33, 0x33, 0x33, 0x3f, 0xf3, 0x33, 0x33, 0x33, 0x00, 0x00, - 0x00, 0x33, 0x33, 0x33, 0xf3, 0x3f, 0xf3, 0x3f, 0x33, 0x33, 0x33, 0x00, - 0x03, 0x33, 0x33, 0x3f, 0xf3, 0x3f, 0xf3, 0x3f, 0xf3, 0x33, 0x33, 0x30, - 0x03, 0x33, 0x33, 0xff, 0xf3, 0x3f, 0xf3, 0x3f, 0xff, 0x33, 0x33, 0x30, - 0x33, 0x33, 0x3f, 0xff, 0x33, 0x33, 0x33, 0x33, 0xff, 0xf3, 0x33, 0x33, - 0x33, 0x33, 0x3f, 0xf3, 0x33, 0x33, 0x33, 0x33, 0x3f, 0xf3, 0x33, 0x33, - 0x33, 0x33, 0x3f, 0xf3, 0x33, 0x33, 0x33, 0x33, 0x3f, 0xf3, 0x33, 0x33, - 0x33, 0x33, 0x3f, 0xf3, 0x33, 0x33, 0x33, 0x33, 0x3f, 0xf3, 0x33, 0x33, - 0x33, 0x33, 0x3f, 0xf3, 0x33, 0x33, 0x33, 0x33, 0x3f, 0xf3, 0x33, 0x33, - 0x33, 0x33, 0x3f, 0xff, 0x33, 0x33, 0x33, 0x33, 0xff, 0xf3, 0x33, 0x33, - 0x03, 0x33, 0x33, 0xff, 0xf3, 0x33, 0x33, 0x3f, 0xff, 0x33, 0x33, 0x30, - 0x03, 0x33, 0x33, 0x3f, 0xff, 0x33, 0x33, 0xff, 0xf3, 0x33, 0x33, 0x30, - 0x00, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0x33, 0x33, 0x33, 0x00, - 0x00, 0x00, 0x33, 0x33, 0x3f, 0xff, 0xff, 0xf3, 0x33, 0x33, 0x00, 0x00, - 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(power_button); -} -#endif - -unsigned char * CIcons::getIcon_help() -{ - static unsigned char help[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x80, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0xff, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(help); -} -#if 0 -unsigned char * CIcons::getIcon_info() -{ - static unsigned char info[]={ - 0x18, 0x00, 0x18, 0x00, 0x0d, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x8d, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd0, 0x08, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x0f, 0xb0, 0x8d, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xd0, 0xfb, 0xfb, 0x08, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0x0f, 0xbf, 0xbf, 0xb0, 0x8d, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xd0, 0xfb, 0xfb, 0xfb, 0xfb, 0x08, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0x0f, 0xbf, 0x44, 0x44, 0xbf, 0xb0, 0x8d, 0xdd, 0xdd, - 0xdd, 0xdd, 0xd0, 0xfb, 0xfb, 0x44, 0x44, 0xfb, 0xf7, 0x08, 0xdd, 0xdd, - 0xdd, 0xdd, 0x0f, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xb0, 0x8d, 0xdd, - 0xdd, 0xd0, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0x08, 0xdd, - 0xdd, 0x0f, 0xbf, 0xbf, 0xbf, 0x44, 0x44, 0xbf, 0xbf, 0xbf, 0xb0, 0x8d, - 0xd0, 0xfb, 0xfb, 0xfb, 0xfb, 0x44, 0x44, 0xfb, 0xfb, 0xfb, 0xfb, 0x08, - 0xd8, 0x0f, 0xbf, 0xbf, 0xbf, 0x44, 0x44, 0xbf, 0xbf, 0xbf, 0xb0, 0x8d, - 0xdd, 0x80, 0xfb, 0xfb, 0xfb, 0x44, 0x44, 0xfb, 0xfb, 0xfb, 0x08, 0xdd, - 0xdd, 0xd8, 0x0f, 0xbf, 0xbf, 0x44, 0x44, 0xbf, 0xbf, 0xb0, 0x8d, 0xdd, - 0xdd, 0xdd, 0x80, 0xfb, 0xfb, 0x44, 0x44, 0xfb, 0xfb, 0x08, 0xdd, 0xdd, - 0xdd, 0xdd, 0xd8, 0x0f, 0xbf, 0x44, 0x44, 0xbf, 0xb0, 0x8d, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0x80, 0xfb, 0xfb, 0xfb, 0xfb, 0x08, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xd8, 0x0f, 0xbf, 0xbf, 0xb0, 0x8d, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0x80, 0xfb, 0xfb, 0x08, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xd8, 0x0f, 0xb0, 0x8d, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x80, 0x08, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd8, 0x8d, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd }; - - return(info); -} - -unsigned char * CIcons::getIcon_mute_small() -{ - static unsigned char mute_small[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0xf8, 0xf8, 0xf8, 0x88, 0xf8, 0x88, 0x80, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0x88, 0xf8, 0x8f, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0xff, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0xff, 0xf8, 0xf8, 0x8f, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0xff, 0xf8, 0xf8, 0x88, 0xf8, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0xff, 0xf8, 0xf8, 0x8f, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0xff, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x88, 0x88, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x8f, 0x88, 0xf8, 0x8f, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0xf8, 0xf8, 0xf8, 0x88, 0xf8, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(mute_small); -} -#endif - -unsigned char * CIcons::getIcon_left() -{ - static unsigned char left[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x88, 0x88, 0x88, 0x88, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x8f, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x8f, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(left); -} - -unsigned char * CIcons::getIcon_right() -{ - static unsigned char right[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x80, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xff, 0xf8, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xff, 0xf8, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(right); -} - -#if 0 -unsigned char * CIcons::getIcon_lock() -{ - static unsigned char lock[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xbb, 0xbb, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xbb, 0xbb, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xbb, 0xbb, 0xbb, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x00, - 0xbb, 0x00, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb0, - 0xbb, 0x00, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb0, - 0xbb, 0x00, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x00, - 0xbb, 0xbb, 0xbb, 0xbb, 0xb0, 0xbb, 0xb0, 0x00, 0xbb, 0xb0, 0xb0, 0x00, - 0x0b, 0xbb, 0xbb, 0xbb, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xbb, 0xbb, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xbb, 0xbb, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(lock); -} - -unsigned char * CIcons::getIcon_dbox() -{ - static unsigned char dbox[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0xf8, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x88, 0x88, 0x88, 0xf8, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0xff, 0xf8, 0xff, 0xf8, 0x88, 0xff, 0x88, 0xf8, 0xf8, 0x88, - 0x88, 0x8f, 0x88, 0xf8, 0xf8, 0x8f, 0x8f, 0x88, 0xf8, 0x8f, 0x88, 0x88, - 0x88, 0x8f, 0x88, 0xf8, 0xf8, 0x8f, 0x8f, 0x88, 0xf8, 0x8f, 0x88, 0x88, - 0x88, 0x88, 0xff, 0xf8, 0xff, 0xf8, 0x88, 0xff, 0x88, 0xf8, 0xf8, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(dbox); -} - -unsigned char * CIcons::getIcon_lame() -{ - static unsigned char lame[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, - 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, - 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, - 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, - 0x11, 0xf1, 0x11, 0x11, 0xff, 0xf1, 0xf1, 0x11, 0xf1, 0xff, 0xff, 0x11, - 0x11, 0xf1, 0x11, 0x1f, 0x11, 0xf1, 0xff, 0x1f, 0xf1, 0xf1, 0x11, 0x11, - 0x11, 0xf1, 0x11, 0x1f, 0x11, 0xf1, 0xf1, 0xf1, 0xf1, 0xff, 0xf1, 0x11, - 0x11, 0xf1, 0x11, 0x1f, 0xff, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x11, 0x11, - 0x11, 0xf1, 0x11, 0x1f, 0x11, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x11, 0x11, - 0x11, 0xff, 0xff, 0x1f, 0x11, 0xf1, 0xf1, 0xf1, 0xf1, 0xff, 0xff, 0x11, - 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, - 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, - 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, - 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(lame); -} -#endif - -unsigned char * CIcons::getIcon_ok() -{ - static unsigned char ok[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0xff, 0xff, 0xf8, 0x8f, 0xf8, 0x8f, 0xf8, 0x88, 0x80, - 0x88, 0x88, 0x8f, 0xf8, 0x88, 0xff, 0x8f, 0xf8, 0xff, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x8f, 0xf8, 0x88, 0xff, 0x8f, 0xff, 0xf8, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x8f, 0xf8, 0x88, 0xff, 0x8f, 0xff, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x8f, 0xf8, 0x88, 0xff, 0x8f, 0xff, 0xf8, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x8f, 0xf8, 0x88, 0xff, 0x8f, 0xf8, 0xff, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0xff, 0xff, 0xf8, 0x8f, 0xf8, 0x8f, 0xf8, 0x88, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(ok); -} -#if 0 -unsigned char * CIcons::getIcon_home() -{ - static unsigned char home[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x88, 0x8f, 0x88, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x8f, 0x88, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x8f, 0xff, 0xf8, 0x8f, 0xf8, 0x8f, 0xff, 0xf8, 0x88, 0xf8, 0x88, - 0x88, 0x8f, 0x88, 0xf8, 0xf8, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x88, - 0x88, 0x8f, 0x88, 0xf8, 0xf8, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x88, 0x88, - 0x88, 0x8f, 0x88, 0xf8, 0x8f, 0xf8, 0x8f, 0x8f, 0x8f, 0x88, 0xff, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(home); -} -#endif - -unsigned char * CIcons::getIcon_1() -{ - static unsigned char nr1[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x0f, 0xf8, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x0f, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x0f, 0xf8, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x0f, 0xf8, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x0f, 0xf8, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x0f, 0xf8, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x0f, 0xf8, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x0f, 0xf8, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x0f, 0xf8, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(nr1); -} - -#if 0 -unsigned char * CIcons::getIcon_2() -{ - static unsigned char nr2[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x8f, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xff, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0xff, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0xff, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0xff, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0xff, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x8f, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x8f, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(nr2); -} - -unsigned char * CIcons::getIcon_3() -{ - static unsigned char nr3[]={ - 0x18, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x08, 0x88, 0x88, 0x88, 0x88, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x8f, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xff, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xff, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x88, - 0x08, 0x88, 0x88, 0x88, 0x8f, 0xff, 0xff, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x08, 0x88, 0x88, 0x88, 0x88, 0xff, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - - return(nr3); -} -#endif - - diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/icons.h b/archive-sources/FritzCallMonitor/FritzInfoMonitor/icons.h deleted file mode 100644 index 7fc569bc..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/icons.h +++ /dev/null @@ -1,41 +0,0 @@ - -#ifndef __icons_h__ -#define __icons_h__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -class CIcons -{ - public: - CIcons(); - ~CIcons(); - static CIcons* getInstance(); - - unsigned char * getIcon_ni(); - unsigned char * getIcon_phone1(); - unsigned char * getIcon_phone2(); - unsigned char * getIcon_phone3(); - //unsigned char * getIcon_up(); - //unsigned char * getIcon_down(); - //unsigned char * getIcon_plus(); - //unsigned char * getIcon_minus(); - //unsigned char * getIcon_power_button(); - unsigned char * getIcon_help(); - //unsigned char * getIcon_info(); - //unsigned char * getIcon_mute_small(); - unsigned char * getIcon_left(); - unsigned char * getIcon_right(); - //unsigned char * getIcon_lock(); - //unsigned char * getIcon_dbox(); - //unsigned char * getIcon_lame(); - unsigned char * getIcon_ok(); - //unsigned char * getIcon_home(); - unsigned char * getIcon_1(); - //unsigned char * getIcon_2(); - //unsigned char * getIcon_3(); - private: -}; - -#endif// __icons_h__ diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/parser.cpp b/archive-sources/FritzCallMonitor/FritzInfoMonitor/parser.cpp deleted file mode 100644 index e16b82d0..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/parser.cpp +++ /dev/null @@ -1,379 +0,0 @@ - -#include -#include - -#include -#include -#include - -#include "globals.h" -#include "parser.h" - -CParser* CParser::getInstance() -{ - static CParser* instance = NULL; - if(!instance) - instance = new CParser(); - return instance; -} - -CParser::CParser() -{ - FritzPort = 1012; - FritzWebPort = 80; - SearchPort = 80; - debug = 1; - - strcpy(FritzAdr , "fritz.box"); - strcpy(SearchAdr , "www.goyellow.de"); - //strcpy(ddns_domain , "keine Information gefunden"); - strcpy(addressbook , "/var/tuxbox/config/FritzCallMonitor.addr"); - - struct_dialport dialport_t[MAXDAILPORTS] = - { - {"Fon 1", 1 }, - {"Fon 2", 2 }, - {"Fon 3", 3 }, - {"ISDN & DECT", 50 }, - {"ISDN 1", 51 }, - {"ISDN 2", 52 }, - {"DECT 1", 610 }, - {"DECT 2", 611 } - }; - memcpy(dialport, &dialport_t, sizeof(dialport_t)); - - ddns_domain ="keine Information gefunden"; - nspver = ""; -} - -CParser::~CParser() -{ - // -} - -int CParser::ReadConfig(const char *fname) -{ - FILE *fd_conf; - char *ptr; - char *line_buffer; - ssize_t read; - size_t len; - char tmp[6]; - - line_buffer=NULL; - if((fd_conf = fopen(fname, "r"))) - { - while ((read = getline(&line_buffer, &len, fd_conf)) != -1) - { - if (line_buffer[0] == '#') - continue; - - if ((ptr = strstr(line_buffer, "FRITZBOXIP="))) - sscanf(ptr + 11, "%63s", (char *) &FritzAdr); - else if ((ptr = strstr(line_buffer, "PORT="))) - sscanf(ptr + 5, "%i", &FritzPort); - else if ((ptr = strstr(line_buffer, "DEBUG="))) - sscanf(ptr + 6, "%i", &debug); - else if ((ptr = strstr(line_buffer, "ADDRESSBOOK="))) - sscanf(ptr + 12, "%127s", (char *) &addressbook); - else if ((ptr = strstr(line_buffer, "PASSWD="))) - sscanf(ptr + 7, "%63s", (char *) &FritzPW); - else if ((ptr = strstr(line_buffer, "CITYPREFIX="))) - sscanf(ptr + 11, "%9s", (char *) &cityprefix); - else if ((ptr = strstr(line_buffer, "DIALPREFIX="))) - sscanf(ptr + 11, "%19s", (char *) &dialprefix); - else if ((ptr = strstr(line_buffer, "PORT_1="))) { - sscanf(ptr + 7, "%[^,],%s", (char *) &dialport[0].port_name, (char *) &tmp); - dialport[0].port = atoi(tmp); - } - else if ((ptr = strstr(line_buffer, "PORT_2="))) { - sscanf(ptr + 7, "%[^,],%29s", (char *) &dialport[1].port_name, (char *) &tmp); - dialport[1].port = atoi(tmp); - } - else if ((ptr = strstr(line_buffer, "PORT_3="))) { - sscanf(ptr + 7, "%[^,],%29s", (char *) &dialport[2].port_name, (char *) &tmp); - dialport[2].port = atoi(tmp); - } - else if ((ptr = strstr(line_buffer, "PORT_4="))) { - sscanf(ptr + 7, "%[^,],%29s", (char *) &dialport[3].port_name, (char *) &tmp); - dialport[3].port = atoi(tmp); - } - else if ((ptr = strstr(line_buffer, "PORT_5="))) { - sscanf(ptr + 7, "%[^,],%s", (char *) &dialport[4].port_name, (char *) &tmp); - dialport[4].port = atoi(tmp); - } - else if ((ptr = strstr(line_buffer, "PORT_6="))) { - sscanf(ptr + 7, "%[^,],%29s", (char *) &dialport[5].port_name, (char *) &tmp); - dialport[5].port = atoi(tmp); - } - else if ((ptr = strstr(line_buffer, "PORT_7="))) { - sscanf(ptr + 7, "%[^,],%29s", (char *) &dialport[6].port_name, (char *) &tmp); - dialport[6].port = atoi(tmp); - } - else if ((ptr = strstr(line_buffer, "PORT_8="))) { - sscanf(ptr + 7, "%[^,],%29s", (char *) &dialport[7].port_name, (char *) &tmp); - dialport[7].port = atoi(tmp); - } - else if ((ptr = strstr(line_buffer, "CALLERLIST_STR="))) { - sscanf(ptr + 15, "%127s", (char *) &liststr); - } - else if ((ptr = strstr(line_buffer, "CALLERLIST_FILE="))) { - sscanf(ptr + 16, "%127s", (char *) &listfile); - } - } - fclose(fd_conf); - if(line_buffer) - free(line_buffer); - } - else - { - printf("[%s] - ERROR open %s\n", BASENAME,fname); - return 1; - } - - return 0; -} - -void CParser::read_neutrino_osd_conf(int *ex,int *sx,int *ey, int *sy, const char *filename) -{ - const char spres[][4]={"","crt","lcd"}; - char sstr[4][32]; - int pres=-1, resolution=-1, loop, *sptr[4]={ex, sx, ey, sy}; - char *buffer; - size_t len; - ssize_t read; - FILE* fd; - - fd = fopen(filename, "r"); - if(fd){ - buffer=NULL; - len = 0; - while ((read = getline(&buffer, &len, fd)) != -1){ - sscanf(buffer, "screen_preset=%d", &pres); - sscanf(buffer, "osd_resolution=%d", &resolution); - } - if(buffer) - free(buffer); - rewind(fd); - ++pres; - sprintf(sstr[0], "screen_EndX_%s_%d=%%d", spres[pres], resolution); - sprintf(sstr[1], "screen_StartX_%s_%d=%%d", spres[pres], resolution); - sprintf(sstr[2], "screen_EndY_%s_%d=%%d", spres[pres], resolution); - sprintf(sstr[3], "screen_StartY_%s_%d=%%d", spres[pres], resolution); - - buffer=NULL; - len = 0; - while ((read = getline(&buffer, &len, fd)) != -1){ - for(loop=0; loop<4; loop++) { - sscanf(buffer, sstr[loop], sptr[loop]); - } - } - fclose(fd); - if(buffer) - free(buffer); - } -} - -unsigned short CParser::Percentconverter (unsigned short percent) -{ - return(2.55*percent); -} - -int CParser::ReadColors (const char *filename) -{ - FILE *fh; - char *ptr; - char *line_buffer; - ssize_t read; - size_t len; - - - if (!(fh=fopen(filename, "r"))) - { - perror("neutrino.conf"); - return(1); - } - - line_buffer=NULL; - while ((read = getline(&line_buffer, &len, fh)) != -1) - { - if ((ptr = strstr(line_buffer, "menu_Head_alpha="))) - sscanf(ptr+16, "%hu", &cmh[mALPHA]); - else if ((ptr = strstr(line_buffer, "menu_Head_blue="))) - sscanf(ptr+15, "%hu", &cmh[mBLUE]); - else if ((ptr = strstr(line_buffer, "menu_Head_green="))) - sscanf(ptr+16, "%hu", &cmh[mGREEN]); - else if ((ptr = strstr(line_buffer, "menu_Head_red="))) - sscanf(ptr+14, "%hu", &cmh[mRED]); - else if ((ptr = strstr(line_buffer, "menu_Head_Text_alpha="))) - sscanf(ptr+21, "%hu", &cmht[mALPHA]); - else if ((ptr = strstr(line_buffer, "menu_Head_Text_blue="))) - sscanf(ptr+20, "%hu", &cmht[mBLUE]); - else if ((ptr = strstr(line_buffer, "menu_Head_Text_green="))) - sscanf(ptr+21, "%hu", &cmht[mGREEN]); - else if ((ptr = strstr(line_buffer, "menu_Head_Text_red="))) - sscanf(ptr+19, "%hu", &cmht[mRED]); - else if ((ptr = strstr(line_buffer, "menu_Content_alpha="))) - sscanf(ptr+19, "%hu", &cmc[mALPHA]); - else if ((ptr = strstr(line_buffer, "menu_Content_blue="))) - sscanf(ptr+18, "%hu", &cmc[mBLUE]); - else if ((ptr = strstr(line_buffer, "menu_Content_green="))) - sscanf(ptr+19, "%hu", &cmc[mGREEN]); - else if ((ptr = strstr(line_buffer, "menu_Content_red="))) - sscanf(ptr+17, "%hu", &cmc[mRED]); - else if ((ptr = strstr(line_buffer, "menu_Content_Text_alpha="))) - sscanf(ptr+24, "%hu", &cmct[mALPHA]); - else if ((ptr = strstr(line_buffer, "menu_Content_Text_blue="))) - sscanf(ptr+23, "%hu", &cmct[mBLUE]); - else if ((ptr = strstr(line_buffer, "menu_Content_Text_green="))) - sscanf(ptr+24, "%hu", &cmct[mGREEN]); - else if ((ptr = strstr(line_buffer, "menu_Content_Text_red="))) - sscanf(ptr+22, "%hu", &cmct[mRED]); - } - - fclose(fh); - if(line_buffer) - free(line_buffer); - - unsigned char bgra_t[][5] = { - "\x00\x00\x00\x00","\x00\x00\x00\xFF","\x00\x00\x80\xFF","\x00\x80\x00\xFF", - "\x00\x48\xA0\xFF","\x80\x00\x00\xFF","\x80\x00\x80\xFF","\x80\x80\x00\xFF", - "\xA0\xA0\xA0\xFF","\x50\x50\x50\xFF","\x00\x00\xFF\xFF","\x00\xFF\x00\xFF", - "\x00\xFF\xFF\xFF","\xFF\x00\x00\xFF","\xFF\x00\xFF\xFF","\xFF\xFF\x00\xFF", - "\xFF\xFF\xFF\xFF","\xFF\x80\x00\xF0","\x80\x00\x00\xF0","\xFF\x80\x00\xFF", - "\x40\x20\x00\xFF","\x00\xC0\xFF\xFF","\x0C\x0C\x0C\xF7","\x30\x30\x30\xF7" - }; - - bgra_t[CMH][mRED] = Percentconverter(cmh[mRED]); - bgra_t[CMH][mGREEN] = Percentconverter(cmh[mGREEN]); - bgra_t[CMH][mBLUE] = Percentconverter(cmh[mBLUE]); - bgra_t[CMH][mALPHA] = (255-Percentconverter(cmh[mALPHA])); - - bgra_t[CMHT][mRED] = Percentconverter(cmht[mRED]); - bgra_t[CMHT][mGREEN] = Percentconverter(cmht[mGREEN]); - bgra_t[CMHT][mBLUE] = Percentconverter(cmht[mBLUE]); - bgra_t[CMHT][mALPHA] = (255-Percentconverter(cmht[mALPHA])); - - bgra_t[CMC][mRED] = Percentconverter(cmc[mRED]); - bgra_t[CMC][mGREEN] = Percentconverter(cmc[mGREEN]); - bgra_t[CMC][mBLUE] = Percentconverter(cmc[mBLUE]); - bgra_t[CMC][mALPHA] = 255-Percentconverter(cmc[mALPHA]); - - bgra_t[CMCT][mRED] = Percentconverter(cmct[mRED]); - bgra_t[CMCT][mGREEN] = Percentconverter(cmct[mGREEN]); - bgra_t[CMCT][mBLUE] = Percentconverter(cmct[mBLUE]); - bgra_t[CMCT][mALPHA] = (255-Percentconverter(cmct[mALPHA])); - - const int sz = sizeof(bgra)/sizeof(**bgra); - copy(*bgra_t, (*bgra_t) + sz, *bgra); - - return(0); -} -#if 0 -/****************************************************************************** - * local addressbook functions - ******************************************************************************/ -#endif -int CParser::search_AddrBook(const char *caller) -{ - FILE *fd; - char *line_buffer; - string search_str; - ssize_t ptr; - size_t len; - int i=0; - - if(strlen(caller)!=0){ - search_str = (string) caller + "|"; - } else { - return(0); - } - - if(!(fd = fopen(addressbook, "r"))) { - perror(addressbook); - return(0); - } - else - { - line_buffer=NULL; - while ((ptr = getline(&line_buffer, &len, fd)) != -1) - { - i++; - if (strstr(line_buffer, search_str.c_str())) - { - sscanf(line_buffer,"%*[^|]|%255[^|]|%127[^|]|%5[^|]|%127[^|]", - (char *) &address.name, - (char *) &address.street, - (char *) &address.code, - (char *) &address.locality); - if (debug) - printf("[%s] - \"%s\" found [%d]\n", BASENAME, caller, i); - fclose(fd); - if(line_buffer) - free(line_buffer); - return(1); - } - } - if (debug) - printf("[%s] - \"%s\" not found in %s\n", BASENAME, caller, addressbook); - - fclose(fd); - if(line_buffer) - free(line_buffer); - } - return(0); -} - -int CParser::add_AddrBook(const char *caller) -{ - ofstream os(addressbook, ios::out | ios::app); - - if (os.is_open()) - { - os << caller << '|' - << address.name << '|' - << address.street << '|' - << address.code << '|' - << address.locality << '|' << endl; - os.close(); - } - else - { - return(0); - } - - return(1); -} - -void CParser::init_caller() -{ - memset(&caller, 0, sizeof(caller)); -} - -void CParser::init_address() -{ - memset(&address, 0, sizeof(address)); -} - -string CParser::parseString(const char* var, string& string_to_serarch) -{ - string res=""; - size_t pos1, pos2; - - if((pos1 = string_to_serarch.find(var)) != string::npos) - { - // "ver":"84.05.50" - pos1 += strlen(var)+3; - string tmp = string_to_serarch.substr(pos1); - - if((pos2 = tmp.find('"')) != string::npos) - { - res = tmp.substr(0,pos2); - //cout << " result: " << var << " = " << res << endl; - } - } - else - cout << '[' << BASENAME << "] - " << __FUNCTION__ << "(): no result for " << '"' << var << '"' << endl; - - return(res); -} diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/parser.h b/archive-sources/FritzCallMonitor/FritzInfoMonitor/parser.h deleted file mode 100644 index 507e585d..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/parser.h +++ /dev/null @@ -1,122 +0,0 @@ - -#ifndef __parser_h__ -#define __parser_h__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -using namespace std; - -class CParser -{ - public: - CParser(); - virtual~CParser(); - static CParser* getInstance(); - - int ReadConfig(const char *fname); - unsigned short Percentconverter (unsigned short percent); - void read_neutrino_osd_conf(int *ex,int *sx,int *ey, int *sy, const char *filename); - int ReadColors (const char *filename); - int search_AddrBook(const char *caller); - int add_AddrBook(const char *caller); - void init_caller(); - void init_address(); - string parseString(const char* var, std::string& string_to_serarch); - - unsigned char bgra[24][5]; - - typedef struct { - char number[64]; - char name[256]; - char street[128]; - char code[6]; - char locality[128]; - } S_ADDRESS; - S_ADDRESS address; - -#define MAXCALLER 12 - typedef struct { - char call_type[2]; - char call_date[20]; - char call_name[256]; - char call_numr[64]; - char call_time[6]; - char port_rout[20]; - char port_name[30]; - } S_CALLER; - S_CALLER caller[MAXCALLER]; - -#define MAXDAILPORTS 8 - typedef struct s_dialport { - char port_name[30]; - int port; - } struct_dialport; - struct_dialport dialport[MAXDAILPORTS]; - - virtual void setTam0_active(const std::string& Tam0_active){tam0_active = Tam0_active;}; - virtual void setTam0_NumNewMessages(const std::string& Tam0_NumNewMessages){tam0_NumNewMessages = Tam0_NumNewMessages;}; - virtual void setDdns_state(const std::string& Ddns_state){ddns_state = Ddns_state;}; - virtual void setDdns_domain(const std::string& Ddns_domain){ddns_domain = Ddns_domain;}; - virtual void setNspver(const std::string& Nspver){nspver = Nspver;}; - virtual void setSip0Nr(const std::string& Sip0Nr){sip0nr = Sip0Nr;}; - virtual void setSip1Nr(const std::string& Sip1Nr){sip1nr = Sip1Nr;}; - virtual void setPppoe_ip(const std::string& Pppoe_ip){pppoe_ip = Pppoe_ip;}; - - virtual string getTam0_active(){return tam0_active;}; - virtual string getTam0_NumNewMessages(){return tam0_NumNewMessages;}; - virtual string getDdns_state(){return ddns_state;}; - virtual string getDdns_domain(){return ddns_domain;}; - virtual string getNspver(){return nspver;}; - virtual string getSip0Nr(){return sip0nr;}; - virtual string getSip1Nr(){return sip1nr;}; - virtual string getPppoe_ip(){return pppoe_ip;}; - - virtual int getDebug(){return debug;}; - virtual int getFritzPort(){return FritzWebPort;}; - virtual int getSearchPort(){return SearchPort;}; - virtual const char* getFritzAdr(){return FritzAdr;}; - virtual const char* getFritzPW(){return FritzPW;}; - virtual const char* getSearchAdr(){return SearchAdr;}; - virtual const char* getCityprefix(){return cityprefix;}; - virtual const char* getDialprefix(){return dialprefix;}; - virtual const char* getListfile(){return listfile;}; - virtual const char* getListstr(){return liststr;}; - virtual const char* getAddressbook(){return addressbook;}; - - //virtual void setNspver(const char* nspver); - //virtual const char* getNspver(){return nspver;}; - - protected: - string tam0_active; - string tam0_NumNewMessages; - string ddns_state; - string ddns_domain; - string nspver; - string sip0nr; - string sip1nr; - string pppoe_ip; - - int debug; - int FritzPort, FritzWebPort,SearchPort; - char FritzAdr[64]; - char FritzPW[64]; - char SearchAdr[20]; - char cityprefix[10]; - char dialprefix[20]; - char listfile[128]; - char liststr[128]; - char addressbook[128]; - - enum {mBLUE, mGREEN, mRED, mALPHA}; - unsigned short cmh[4]; // Titelzeile - menu_Head(SKIN0) - unsigned short cmht[4]; // Titeltextfarbe - menu_Head_Text(ORANGE) - unsigned short cmc[4]; // Hintergrundfarbe - menu_Content(SKIN1) - unsigned short cmct[4]; // Body Textfarbe - menu_Content_Text(WHITE) -}; - -#endif //__parser_h__ diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/phonebook.cpp b/archive-sources/FritzCallMonitor/FritzInfoMonitor/phonebook.cpp deleted file mode 100644 index 00295b09..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/phonebook.cpp +++ /dev/null @@ -1,367 +0,0 @@ - -#include -#include -#include - -#include -#include - -#include "parser.h" -#include "connect.h" -#include "framebuffer.h" -#include "rc.h" -#include "submenu.h" -#include "globals.h" - -#include "phonebook.h" - - - -const char *liste[] = {"AZ","AB","CD","EF","GH","IJK","LM","NO","PQR","STU","VWXYZ"}; - -// create outstream operator -ostream& operator<< (ostream& out, const CPhoneBook::S_ADDRESS& d) -{ - return out << d.number << ',' << d.name << ',' << d.street << ',' - << d.code << ',' << d.locality << ','; -} - -void CPhoneBook::toUpper(string& s) -{ - for(string::iterator p = s.begin(); p != s.end();++p) - *p = toupper(*p) ; -} - -bool CPhoneBook::sortByKey(const S_ADDRESS& a, const S_ADDRESS& b) -{ - string na = a.name; - string nb = b.name; - - toUpper(na) ; - toUpper(nb) ; - - return na < nb; -} - - -CPhoneBook* CPhoneBook::getInstance() -{ - static CPhoneBook* instance = NULL; - if(!instance) - instance = new CPhoneBook(); - return instance; -} - -CPhoneBook::CPhoneBook() -{ - cconnect = CConnect::getInstance(); - cpars = CParser::getInstance(); - cfb = Cfb::getInstance(); - crc = Crc::getInstance(); - - selList = 0; - selData = -1; - lastData= 0; - perpage = 0; -} - -CPhoneBook::~CPhoneBook() -{ - -} - -void CPhoneBook::run() -{ - // Get data - getData(CParser::getInstance()->getAddressbook(), liste[selList]); - - menu(); - - unsigned short rccode; - - do - { - switch((rccode = crc->getrc())) - { - case RC_RIGHT: - selList++; - if(selList > ((int)(sizeof(liste)/sizeof(liste[0])))-1) { - selList = 0; - } - selData=-1; - getData(CParser::getInstance()->getAddressbook(), liste[selList]); - menu(); - break; - case RC_LEFT: - selList--; - if(selList < 0) { - selList = ((int)(sizeof(liste)/sizeof(liste[0])))-1; - } - selData=-1; - getData(CParser::getInstance()->getAddressbook(), liste[selList]); - menu(); - break; - case RC_DOWN: - selData++; - if(selData >= (int)content.size()) { - selData = 0; - } - menu(); - break; - case RC_UP: - selData--; - if(selData < -1) { - selData = (int)content.size()-1; - } - menu(); - break; - case RC_OK: - if(selData != -1) { - dialMenu(); - rccode=RC_HOME; - } - break; - case RC_PAGEDOWN: - selData += (selData == -1 ? perpage+1 : perpage); - selData = (selData / perpage) * perpage; // select first item on the site - if(selData >= (int)content.size()) { - selData = -1; - } - menu(); - break; - case RC_PAGEUP: - selData -= perpage; - selData = (selData / perpage) * perpage; // select first item on the site - if(selData < -1) { - selData = (int)content.size()-1; - } - menu(); - break; - } - } - while(rccode != RC_HOME); -} - -void CPhoneBook::menu() -{ - int ex, sx, ey, sy; - cfb->getDimensions(&ex, &sx, &ey, &sy); - int vyres = cfb->getYScreeninfo(); - - int bspace = 40; - int lrspace = 30; - int xwidth = ex-sx-bspace; - int yheight = ey-sy-bspace; - int ld = vyres < 600 ? 25 : 28; //line distance - int slim = ex-sx < 1100 ? 1:0; - int vsx = bspace + lrspace; - int vsy = 80; - - ostringstream txt; - - int sp1 = vsx; - int le1 = slim?180:250; //name - int sp2 = sp1+le1+18; - int le2 = 180; //number - int sp3 = sp2+le2+18; - int le3 = slim?130:250; //street - int sp4 = sp3+le3+18; - int le4 = 70; //code - int sp5 = sp4+le4+18; - int le5 = 180; //locality - - int hvsp = 0; - int hle = 30; - int hitm = (int)(sizeof(liste)/sizeof(liste[0])); - int hsp = (xwidth-(2*lrspace)-(2*hle)) / (hitm-1); - - // Grafic - cfb->RenderBox(bspace, 0, xwidth, yheight, FILL, CMC); - cfb->RenderBox(bspace, 0, xwidth, 40, FILL, CMH); - //cfb->PaintIcon(icon_ng,((xwidth+bspace)/2)-(120/2)-35,8); - cfb->RenderString("Adressbuch", ((xwidth+bspace)/2)-(130/2) ,30, 130, CENTER, BIG, CMHT); - - // Body headline - for (int i=0; i < hitm; i++) - { - txt.str(""); - - if(selList == i) - cfb->RenderBox(vsx-3+hvsp, vsy-20, vsx-3+hvsp+hle, vsy+3, selData == -1?FILL:GRID, CMHT); - - txt << liste[i][0] << '-' << liste[i][strlen(liste[i])-1]; - cfb->RenderString(txt.str().c_str(), vsx+hvsp ,vsy, hle, LEFT, SMALL, (selList == i && selData == -1)?CMC:GREY); - - hvsp += hsp; - } - - // Body data - vsy += ld+10; - - int start = 0; - if(perpage) { - start = (selData / perpage) * perpage; - } - - for (int i = start; i < (int)content.size() ; i++) - { - if(i == selData) - cfb->RenderBox(bspace, vsy-ld+3, xwidth, vsy+3, FILL, CMHT); - - cfb->RenderString(cconnect->UTF8toISO((char *)content[i].name.c_str()), - sp1, vsy, le1, LEFT, NORMAL, selData==i?CMC:CMCT); - - cfb->RenderString(content[i].number.c_str(), - sp2, vsy, le2, LEFT, NORMAL, selData==i?CMC:CMCT); - - cfb->RenderString(cconnect->UTF8toISO((char *)content[i].street.c_str()), - sp3, vsy, le3, LEFT, NORMAL, selData==i?CMC:CMCT); - - if(xwidth > (sp4+le4)) - cfb->RenderString(content[i].code.c_str(), - sp4, vsy, le4, LEFT, NORMAL, selData==i?CMC:CMCT); - - if(xwidth > (sp5+le5)) - cfb->RenderString(cconnect->UTF8toISO((char *)content[i].locality.c_str()), - sp5, vsy, le5, LEFT, NORMAL, selData==i?CMC:CMCT); - vsy += ld; - - if(vsy >= yheight-ld) - { - //cfb->RenderString("----", sp1, vsy, le1, LEFT, NORMAL, CMHT); - if(perpage == 0) { - perpage = i+1; - cout << "perpage = " << perpage << endl; - } - break; - } - lastData = i; - } - - // Footer - txt.str(""); - txt << "Seite " << getSites(lastData+1) << " von " << getSites(content.size()); - cfb->RenderBox(bspace, yheight, xwidth, yheight+30, FILL, CMH); - cfb->RenderString(txt.str().c_str(), ((xwidth+bspace)/2)-(130/2) ,yheight+20, 130, CENTER, SMALL, GREY); - - - cfb->FBPaint(); -} - -void CPhoneBook::dialMenu() -{ - int dialtest = 0; - ostringstream txt; - - CSubMenu::getInstance()->DialMenu(dialtest); - - unsigned short rccode; - do - { - switch((rccode = crc->getrc())) - { - case RC_UP: - CSubMenu::getInstance()->subMenu[DIAL].sel--; - CSubMenu::getInstance()->DialMenu(dialtest); - break; - case RC_DOWN: - CSubMenu::getInstance()->subMenu[DIAL].sel++; - CSubMenu::getInstance()->DialMenu(dialtest); - break; - case RC_OK: - cconnect->get_login(cpars->getFritzPW()); - - cfb->FBClear(); - txt.str(""); - txt << cpars->getDialprefix() << content[selData].number; - CSubMenu::getInstance()->ShowMessage(INFO_DIAL,1); - cconnect->dial(cconnect->getSid(),cpars->dialport[CSubMenu::getInstance()->subMenu[DIAL].sel].port, txt.str().c_str()); - - cout << '[' << BASENAME << "] - " << __FILE__ << " dialport: " << cpars->dialport[CSubMenu::getInstance()->subMenu[DIAL].sel].port - << " number : " << content[selData].number << endl; - - if(cconnect->getQueryLogic()==1) - cconnect->send_logout(cconnect->getSid()); - break; - } - } - while(rccode!=RC_HOME); - - run(); -} - -int CPhoneBook::getData(const char *fname, const char *list) -{ - memset(&content, 0, sizeof(content)); - - ifstream fh(fname); - - if ( fh.is_open() ) - { - string line; - - while (getline(fh,line)) - { - S_ADDRESS entry; - - istringstream in(line); - - if(getline(in, entry.number, '|') && //in >> entry.number && in.get() == '|' && - getline(in, entry.name, '|') && - getline(in, entry.street, '|') && - getline(in, entry.code, '|') && - getline(in, entry.locality, '|') ) - { - if(strcmp(list,"AZ" /*all*/) == 0) - { - content.push_back(entry); - } - else - { - for(int i=0; i<(int)strlen(list); i++) - { - //printf("search for '%c' > %s (%d)\n",list[i],entry.name.c_str(),(int)strlen(list)); - if(toupper(entry.name[0]) == list[i]) { - content.push_back(entry); - break; - } - } - } - } - else { - cerr << '[' << BASENAME << "] - " << __FILE__ << " could not parse input line: " << line << endl; - } - } - - cout << '[' << BASENAME << "] - " << __FILE__ << ' ' << __FUNCTION__ << " elements: " << content.size() << endl; - - sort(content.begin(),content.end(), sortByKey); - - //copy(content.begin(), content.end(), ostream_iterator(cout, "\n")); - - fh.close(); - - } - else { - cerr << '[' << BASENAME << "] - " << __FILE__ << "could not open file." << endl; - } - - return 0; -} - -int CPhoneBook::getSites(int items) -{ - int sites = 0; - - if(perpage) { - sites = items / perpage; - - if(items % perpage) - sites++; - } - - if(!sites) - sites = 1; - - return(sites); -} diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/phonebook.h b/archive-sources/FritzCallMonitor/FritzInfoMonitor/phonebook.h deleted file mode 100644 index 51e83c1e..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/phonebook.h +++ /dev/null @@ -1,50 +0,0 @@ - -#ifndef __phonebook_h__ -#define __phonebook_h__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -using namespace std; - -class CPhoneBook -{ - public: - CPhoneBook(); - ~CPhoneBook(); - static CPhoneBook* getInstance(); - - void run(); - - private: - CConnect * cconnect; - CParser * cpars; - Cfb * cfb; - Crc * crc; - - struct S_ADDRESS { - string number; - string name; - string street; - string code; - string locality; - }; - - vector content; - - static bool sortByKey(const S_ADDRESS& a, const S_ADDRESS& b); - static void toUpper(string& s); - - void menu(); - void dialMenu(); - int getData(const char *fname, const char *list); - int getSites(int items); - int selList, selData, lastData; - int perpage; - - friend ostream& operator<< (ostream& out, const S_ADDRESS& d); -}; - -#endif //__phonebook_h__ \ No newline at end of file diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/rc.cpp b/archive-sources/FritzCallMonitor/FritzInfoMonitor/rc.cpp deleted file mode 100644 index d06da4aa..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/rc.cpp +++ /dev/null @@ -1,113 +0,0 @@ - -#include -#include -#include -#include - -#include "globals.h" - -#include "rc.h" - -Crc* Crc::getInstance() -{ - static Crc* instance = NULL; - if(!instance) - instance = new Crc(); - return instance; -} - -Crc::Crc() -{ - rc = -1; - - /* open Remote Control */ - rc = open ( "/dev/input/nevis_ir", O_RDONLY ); - if ( rc == -1 ) - { - perror ( "" ); - exit ( 1 ); - } - - // lock keyboard-conversions, this is done by the plugin itself - fclose(fopen(KBLCKFILE,"w")); -} - -Crc::~Crc() -{ - Cleanup(); -} - - -void Crc::Cleanup (void) -{ - // enable keyboard-conversion again - unlink(KBLCKFILE); - - close(rc); -} - -long Crc::getrc() -{ - //get rc socket - fd_set fds; - FD_ZERO(&fds); - FD_SET(rc, &fds); - select(rc+1, &fds, 0, 0, 0); - if (FD_ISSET(rc, &fds)) - return(GetRCCode()); - else - return(-1); -} - -int Crc::GetRCCode() -{ - long rcc=(-1); - static __u16 rc_last_key = KEY_RESERVED; - - if (read(rc, &ev, sizeof(ev))==sizeof(ev)) - { - if (ev.value) - { - if (ev.code!=rc_last_key) - { - rc_last_key=ev.code; - switch(ev.code) - { - case KEY_UP: rcc=RC_UP; break; - case KEY_DOWN: rcc=RC_DOWN; break; - case KEY_LEFT: rcc=RC_LEFT; break; - case KEY_RIGHT: rcc=RC_RIGHT; break; - case KEY_OK: rcc=RC_OK; break; - case KEY_0: rcc=RC_0; break; - case KEY_1: rcc=RC_1; break; - case KEY_2: rcc=RC_2; break; - case KEY_3: rcc=RC_3; break; - case KEY_4: rcc=RC_4; break; - case KEY_5: rcc=RC_5; break; - case KEY_6: rcc=RC_6; break; - case KEY_7: rcc=RC_7; break; - case KEY_8: rcc=RC_8; break; - case KEY_9: rcc=RC_9; break; - case KEY_RED: rcc=RC_RED; break; - case KEY_GREEN: rcc=RC_GREEN; break; - case KEY_YELLOW: rcc=RC_YELLOW; break; - case KEY_BLUE: rcc=RC_BLUE; break; - case KEY_VOLUMEUP: rcc=RC_PLUS; break; - case KEY_VOLUMEDOWN: rcc=RC_MINUS; break; - case KEY_MUTE: rcc=RC_MUTE; break; - case KEY_HELP: rcc=RC_HELP; break; - case KEY_INFO: rcc=RC_HELP; break; - case KEY_SETUP: rcc=RC_DBOX; break; - case KEY_EXIT: rcc=RC_HOME; break; - case KEY_HOME: rcc=RC_HOME; break; - case KEY_PAGEUP: rcc=RC_PAGEUP; break; - case KEY_PAGEDOWN: rcc=RC_PAGEDOWN;break; - case KEY_POWER: rcc=RC_STANDBY; - } - } - } - else - rc_last_key=KEY_RESERVED; - } - return(rcc); -} \ No newline at end of file diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/rc.h b/archive-sources/FritzCallMonitor/FritzInfoMonitor/rc.h deleted file mode 100644 index 3e261177..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/rc.h +++ /dev/null @@ -1,27 +0,0 @@ - -#ifndef __rc_h__ -#define __rc_h__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -//rc stuff -#include - -class Crc -{ - public: - Crc(); - ~Crc(); - static Crc* getInstance(); - - long int getrc(); - void Cleanup (void); - private: - int rc; - struct input_event ev; - - int GetRCCode(); -}; -#endif diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/starter.c b/archive-sources/FritzCallMonitor/FritzInfoMonitor/starter.c deleted file mode 100644 index 0276040c..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/starter.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * $Id$ - * - * shellexec - d-box2 linux project - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * -*/ - -#include -#include -#include -#include -#include -#define SCRIPT "FritzInfoMonitor" - -int main() -{ - int ret, pid, status; - pid=vfork(); - if (pid == -1) { - fprintf(stderr, "[%s.so] vfork\n", SCRIPT); - return; - } else - if (pid == 0) { - fprintf(stderr, "[%s.so] forked, executing %s\n", SCRIPT, SCRIPT); - for (ret=3 ; ret < 255; ret++) - close (ret); - ret = execlp(SCRIPT, SCRIPT, NULL); - if (ret) - fprintf(stderr, "[%s.so] script return code: %d (%m)\n", SCRIPT, ret); - else - fprintf(stderr, "[%s.so] script return code: %d\n", SCRIPT, ret); - _exit(ret); - } - fprintf(stderr, "[%s.so] parent, waiting for child with pid %d...\n", SCRIPT, pid); - waitpid(pid, &status, 0); - fprintf(stderr, "[%s.so] parent, waitpid() returned..\n", SCRIPT); - if (WIFEXITED(status)) - fprintf(stderr, "[%s.so] child returned with status %d\n", SCRIPT, WEXITSTATUS(status)); - return (status); -} diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/submenu.cpp b/archive-sources/FritzCallMonitor/FritzInfoMonitor/submenu.cpp deleted file mode 100644 index 61df44aa..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/submenu.cpp +++ /dev/null @@ -1,353 +0,0 @@ - -#include -#include -#include - -#include "parser.h" -#include "connect.h" -#include "framebuffer.h" -#include "icons.h" -#include "globals.h" - -#include "submenu.h" - -CSubMenu* CSubMenu::getInstance() -{ - static CSubMenu* instance = NULL; - if(!instance) - instance = new CSubMenu(); - return instance; -} - -CSubMenu::CSubMenu() -{ - cpars = CParser::getInstance(); - cfb = Cfb::getInstance(); - cicons = CIcons::getInstance(); - - int ex, sx, ey, sy; - cfb->getDimensions(&ex, &sx, &ey, &sy); - int vyres = cfb->getYScreeninfo(); - - bspace = 40; - lrspace = 30; - xwidth = ex-sx-bspace; - yheight = ey-sy-bspace; - xcenter = (xwidth/2)+(bspace/2); - ycenter = (yheight/2)+(bspace/2); - - ld = vyres < 600 ? 35 : 35; //line distance - so = 5; //shadow offset - - S_SUBMENU entry; - - /*MENU*/ - entry.sel = 0; - entry.mwidth = 400; - entry.mitems = 5; - subMenu.push_back(entry); - - /*PHONEBOOK*/ - entry.sel = 0; - entry.mwidth = 320; - entry.mitems = 4; - subMenu.push_back(entry); - - /*CALLER_DETAILS*/ - entry.sel = 0; - entry.mwidth = 400; - entry.mitems = 4; - subMenu.push_back(entry); - - /*DIAL*/ - entry.sel = 0; - entry.mwidth = 420; - entry.mitems = (int)(sizeof(CParser::getInstance()->dialport)/sizeof(CParser::getInstance()->dialport[0])); - subMenu.push_back(entry); -}; - -CSubMenu::~CSubMenu() -{ -} - -/****************************************************************************** - * ShowMenu (submenu) - ******************************************************************************/ -void CSubMenu::ShowSubMenu(int menu) -{ - printf("[%s] - %s %s(%d)\n",BASENAME, __FILE__, __FUNCTION__, menu); - - int mitems = subMenu[menu].mitems; - int mwidth = subMenu[menu].mwidth; - int selected = subMenu[menu].sel; - - int vsx = ycenter - ((mitems/2)*ld); - int mhw = mwidth/2; - int i = 0; - int mlrspace = 0; - std::ostringstream msg; - - // Grafic - cfb->RenderBox(xcenter+mhw, vsx-ld+so, xcenter+mhw+so, vsx+(ld*mitems)+(ld/2), FILL, BLACK); - cfb->RenderBox(xcenter-mhw+so, vsx+(ld*mitems), xcenter+mhw+so, vsx+(ld*mitems)+(ld/2)+so, FILL, BLACK); - - cfb->RenderBox(xcenter-mhw, vsx-ld, xcenter+mhw, vsx+(ld*mitems), FILL, CMH); - cfb->RenderBox(xcenter-mhw, vsx, xcenter+mhw, vsx+(ld*mitems)+(ld/2), FILL, CMC); - - switch(menu) - { - case MENU: - - cfb->RenderString("FRITZ! Info-Men", xcenter-mhw, vsx-(ld/3), (xcenter+mhw)-(xcenter-mhw), CENTER, NORMAL, CMHT); - - // selected - if(selected < 0) - selected = mitems -1; - else if (selected > (mitems -1)) - selected = 0; - - subMenu[menu].sel = selected; - cfb->RenderBox(xcenter-mhw, vsx+(ld/3)+(selected*ld), xcenter+mhw, vsx+(ld/4)+((selected+1)*ld), FILL, CMHT); - - i = 0; - mlrspace = lrspace + 10; - cfb->RenderCircle( xcenter-mhw+(mlrspace/3), vsx+((i+1)*ld)-15, RED); - cfb->RenderString("Telefonbuch der FRITZ!Box bernehmen", xcenter-mhw+mlrspace, vsx+((i+1)*ld), (xcenter+mhw)-(xcenter-mhw), LEFT, NORMAL, selected==i?CMC:CMCT); - - i++; - cfb->RenderCircle( xcenter-mhw+(mlrspace/3), vsx+((i+1)*ld)-15, GREEN); - cfb->RenderString("Whlhilfe", xcenter-mhw+mlrspace, vsx+((i+1)*ld), (xcenter+mhw)-(xcenter-mhw), LEFT, NORMAL, selected==i?CMC:CMCT); - - i++; - cfb->RenderCircle( xcenter-mhw+(mlrspace/3), vsx+((i+1)*ld)-15, YELLOW); - cfb->RenderString("Internet trennen und neu verbinden", xcenter-mhw+mlrspace, vsx+((i+1)*ld), (xcenter+mhw)-(xcenter-mhw), LEFT, NORMAL, selected==i?CMC:CMCT); - - i++; - cfb->RenderCircle( xcenter-mhw+(mlrspace/3), vsx+((i+1)*ld)-15, BLUE); - cfb->RenderString("Anrufliste aktualisieren", xcenter-mhw+mlrspace, vsx+((i+1)*ld), (xcenter+mhw)-(xcenter-mhw), LEFT, NORMAL, selected==i?CMC:CMCT); - - i++; - cfb->PaintIcon(cicons->getIcon_1(), xcenter-mhw+(mlrspace/3)-5, vsx+((i+1)*ld)-15-5); - cfb->RenderString("Adressbuch ffnen", xcenter-mhw+mlrspace, vsx+((i+1)*ld), (xcenter+mhw)-(xcenter-mhw), LEFT, NORMAL, selected==i?CMC:CMCT); - - break; - case PHONEBOOK: - cfb->RenderString("Telefonbuch Men", xcenter-mhw, vsx-(ld/3), (xcenter+mhw)-(xcenter-mhw), CENTER, NORMAL, CMHT); - - // selected - if(selected < 0) - selected = mitems -1; - else if (selected > (mitems -1)) - selected = 0; - - subMenu[menu].sel = selected; - cfb->RenderBox(xcenter-mhw, vsx+(ld/3)+(selected*ld), xcenter+mhw, vsx+(ld/4)+((selected+1)*ld), FILL, CMHT); - - for(i=0; iRenderCircle( xcenter-mhw+(lrspace/3), vsx+((i+1)*ld)-15, icon); - msg.str(""); - msg << "Telefonbuch Nr." << i+1 << " bernehmen"; - cfb->RenderString(msg.str().c_str(), xcenter-mhw+lrspace, vsx+((i+1)*ld), (xcenter+mhw)-(xcenter-mhw-lrspace), LEFT, NORMAL, selected==i?CMC:CMCT); - } - break; - } - - cfb->FBPaint(); -} - -void CSubMenu::DialMenu(int dialtest) -{ - printf("[%s] - %s %s(%d)\n",BASENAME, __FILE__, __FUNCTION__, dialtest); - - int mitems = subMenu[DIAL].mitems; - int mwidth = subMenu[DIAL].mwidth; - int selected = subMenu[DIAL].sel; - - int vsx = ycenter - ((mitems/2)*ld); - int mhw = mwidth/2; - - std::ostringstream msg; - - // Grafic - cfb->RenderBox(xcenter+mhw, vsx-ld+so, xcenter+mhw+so, vsx+(ld*mitems)+(ld/2), FILL, BLACK); - cfb->RenderBox(xcenter-mhw+so, vsx+(ld*mitems), xcenter+mhw+so, vsx+(ld*mitems)+(ld/2)+so, FILL, BLACK); - - cfb->RenderBox(xcenter-mhw, vsx-ld, xcenter+mhw, vsx+(ld*mitems), FILL, CMH); - cfb->RenderBox(xcenter-mhw, vsx, xcenter+mhw, vsx+(ld*mitems)+(ld/2), FILL, CMC); - - cfb->RenderString("Whlhilfe Men", xcenter-mhw, vsx-(ld/3), (xcenter+mhw)-(xcenter-mhw), CENTER, NORMAL, CMHT); - - // selected - if(selected < 0) - selected = mitems -1; - else if (selected > (mitems -1)) - selected = 0; - - subMenu[DIAL].sel = selected; - cfb->RenderBox(xcenter-mhw, vsx+(ld/3)+(selected*ld), xcenter+mhw, vsx+(ld/4)+((selected+1)*ld), FILL, CMHT); - - for(int i=0; iRenderString(CParser::getInstance()->dialport[i].port_name, xcenter-mhw+lrspace, vsx+(i*ld)+ld, (xcenter+mhw)-(xcenter-mhw-30), LEFT, NORMAL, selected==i?CMC:CMCT); - msg.str(""); - msg << "(Intern **" << CParser::getInstance()->dialport[i].port << ')'; - cfb->RenderString(msg.str().c_str(), xcenter-mhw+260, vsx+(i*ld)+ld, (xcenter+mhw)-(xcenter-mhw-lrspace), LEFT, NORMAL, selected==i?CMC:CMCT); - } - - //footer - if(dialtest) - { - cfb->RenderBox(xcenter-mhw+so, vsx+(ld*mitems)+(ld/2), xcenter+mhw+so, vsx+(ld*mitems)+(ld/2)+23+so, FILL, BLACK); //shadow - cfb->RenderBox(xcenter-mhw, vsx+(ld*mitems)+(ld/2), xcenter+mhw, vsx+(ld*mitems)+(ld/2)+23, FILL, CMH); - - cfb->PaintIcon(cicons->getIcon_ok(), xcenter-mhw+30, vsx+(ld*mitems)+(ld/2)); - cfb->RenderString("Testen", xcenter-mhw+60, vsx+(ld*mitems)+(ld/2)+20, (xcenter+mhw)-(xcenter-mhw-30), LEFT, SMALL, GREY); - } - - cfb->FBPaint(); -} - -void CSubMenu::CallerMenu(int rs_result, int callsel) -{ - printf("[%s] - %s %s(%d,%d)\n",BASENAME, __FILE__, __FUNCTION__, rs_result, callsel); - - int mitems = subMenu[CALLER_DETAILS].mitems; - int mwidth = subMenu[CALLER_DETAILS].mwidth; - //int selected = subMenu[CALLER_DETAILS].sel; - - int vsx = ycenter - ((mitems/2)*ld); - int mhw = mwidth/2; - - std::ostringstream msg; - - // Grafic - cfb->RenderBox(xcenter+mhw, vsx-ld+so, xcenter+mhw+so, vsx+(ld*mitems)+(ld/2), FILL, BLACK); - cfb->RenderBox(xcenter-mhw+so, vsx+(ld*mitems), xcenter+mhw+so, vsx+(ld*mitems)+(ld/2)+so, FILL, BLACK); - - cfb->RenderBox(xcenter-mhw, vsx-ld, xcenter+mhw, vsx+(ld*mitems), FILL, CMH); - cfb->RenderBox(xcenter-mhw, vsx, xcenter+mhw, vsx+(ld*mitems)+(ld/2), FILL, CMC); - - cfb->RenderString(rs_result?"GoYellow":"Details", xcenter-mhw, vsx-(ld/3), (xcenter+mhw)-(xcenter-mhw), CENTER, NORMAL, CMHT); - int i=0; - - cfb->RenderString(cpars->caller[callsel].call_numr, xcenter-mhw+lrspace, vsx+(i*ld)+ld, (xcenter+mhw)-(xcenter-mhw), LEFT, NORMAL, CMCT); - i++; - - cfb->RenderString((cpars->address.name[0]=='\0'?"Name unbekannt":cconnect->UTF8toISO(cpars->address.name)), xcenter-mhw+lrspace, vsx+(i*ld)+ld, (xcenter+mhw)-(xcenter-mhw), LEFT, NORMAL, CMCT); - i++; - - cfb->RenderString((cpars->address.street[0]=='\0'?"Strae unbekannt":cconnect->UTF8toISO(cpars->address.street)), xcenter-mhw+lrspace, vsx+(i*ld)+ld, (xcenter+mhw)-(xcenter-mhw), LEFT, NORMAL, cpars->address.street[0]=='\0'?GREY:CMCT); - i++; - - msg.str(""); - msg << (cpars->address.code[0]=='\0' ? "Ort unbekannt" : cpars->address.code) << ' ' << cconnect->UTF8toISO(cpars->address.locality); - cfb->RenderString(msg.str().c_str(), xcenter-mhw+lrspace, vsx+(i*ld)+ld, (xcenter+mhw)-(xcenter-mhw), LEFT, NORMAL, cpars->address.code[0]=='\0'?GREY:CMCT); - - //footer - if(strlen(cpars->caller[callsel].call_numr)!=0) - { - cfb->RenderBox(xcenter-mhw+so, vsx+(ld*mitems)+(ld/2), xcenter+mhw+so, vsx+(ld*mitems)+(ld/2)+23+so, FILL, BLACK); //shadow - cfb->RenderBox(xcenter-mhw, vsx+(ld*mitems)+(ld/2), xcenter+mhw, vsx+(ld*mitems)+(ld/2)+23, FILL, CMH); - - cfb->RenderCircle( xcenter-mhw+(lrspace/3), vsx+(ld*mitems)+(ld/2)+5, RED); - cfb->RenderString("Anrufen", xcenter-mhw+30, vsx+(ld*mitems)+(ld/2)+20, (xcenter+mhw)-(xcenter-mhw-30), LEFT, SMALL, GREY); - - cfb->RenderCircle( xcenter-mhw+110, vsx+(ld*mitems)+(ld/2)+5, BLUE); - cfb->RenderString("Rckwrtssuche", xcenter-mhw+30+110, vsx+(ld*mitems)+(ld/2)+20, (xcenter+mhw)-(xcenter-mhw-30), LEFT, SMALL, GREY); - - if(rs_result) - { - cfb->RenderCircle( xcenter-mhw+270, vsx+(ld*mitems)+(ld/2)+5, YELLOW); - cfb->RenderString("Speichern", xcenter-mhw+30+270, vsx+(ld*mitems)+(ld/2)+20, (xcenter+mhw)-(xcenter-mhw-30), LEFT, SMALL, GREY); - } - - } - - cfb->FBPaint(); -} - -void CSubMenu::ShowMessage(int message, int popup) -{ - printf("[%s] - %s %s(%d,%d)\n",BASENAME, __FILE__, __FUNCTION__, message, popup); - - int mitte = xcenter; - int so = 5; - std::ostringstream msg; - - //shadow - cfb->RenderBox(mitte+190, 178+so, mitte+200+so, 340, FILL, BLACK); - cfb->RenderBox(mitte-200+so, 300, mitte+200+so, 340+so, FILL, BLACK); - - cfb->RenderBox(mitte-200, 178, mitte+200, 220, FILL, CMH); - cfb->RenderBox(mitte-200, 220, mitte+200, 340, FILL, CMC); - - switch(message) - { - case INFO: - cfb->RenderString("Versionsinfo", mitte-180, 210, (mitte+180)-(mitte-180), CENTER, NORMAL, CMHT); - msg.str(""); - msg << "FritzInfoMonitor " << VERSION; - cfb->RenderString(msg.str().c_str(), mitte-180, 255, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - cfb->RenderString(COPYR, mitte-180, 290, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - break; - case INFO_ADDADR: - cfb->RenderString("Information", mitte-180, 210, (mitte+180)-(mitte-180), CENTER, NORMAL, CMHT); - cfb->RenderString("Eintrag wurde hinzugefgt", mitte-180, 270, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - break; - case INFO_DIAL: - cfb->RenderString("Whlhilfe", mitte-180, 210, (mitte+180)-(mitte-180), CENTER, NORMAL, CMHT); - cfb->RenderString("Bitte den Hrer abnehmen, oder warten", mitte-180, 255, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - cfb->RenderString("Sie, bis das Telefon klingelt.", mitte-180, 290, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - break; - case INFO_DIALTEST: - cfb->RenderString("Whlhilfe", mitte-180, 210, (mitte+180)-(mitte-180), CENTER, NORMAL, CMHT); - cfb->RenderString("Das Telefon sollte jetzt klingeln", mitte-180, 270, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - break; - case INFO_PHONEBOOK: - cfb->RenderString("Information", mitte-180, 210, (mitte+180)-(mitte-180), CENTER, NORMAL, CMHT); - msg.str(""); - msg << "Telefonbuch " << subMenu[PHONEBOOK].sel+1 << " wird bertragen"; - cfb->RenderString(msg.str().c_str(), mitte-180, 270, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - break; - case INFO_RSEARCH: - cfb->RenderString("GoYellow", mitte-180, 210, (mitte+180)-(mitte-180), CENTER, NORMAL, CMHT); - cfb->RenderString("Leider haben wir nichts gefunden!", mitte-180, 270, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - break; - case INFO_RECONNECT : - cfb->RenderString("Information", mitte-180, 210, (mitte+180)-(mitte-180), CENTER, NORMAL, CMHT); - cfb->RenderString("Neustart der Internetverbindung", mitte-180, 270, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - break; - case ERR_LOGIN: - cfb->RenderString("Fehler!", mitte-180, 210, (mitte+180)-(mitte-180), CENTER, NORMAL, CMHT); - cfb->RenderString("Fehler bei der Anmeldung", mitte-180, 255, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - cfb->RenderString("Login nicht erfolgreich", mitte-180, 290, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - break; - case ERR_CONNECT: - cfb->RenderString("Fehler!", mitte-180, 210, (mitte+180)-(mitte-180), CENTER, NORMAL, CMHT); - cfb->RenderString("Die Box ist nicht erreichbar", mitte-180, 255, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - cfb->RenderString(cpars->getFritzAdr(), mitte-180, 290, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - break; - case LOAD: - cfb->RenderString("Information", mitte-180, 210, (mitte+180)-(mitte-180), CENTER, NORMAL, CMHT); - cfb->RenderString("Hole Daten von der FRITZ!Box ...", mitte-180, 270, (mitte+180)-(mitte-180), CENTER, NORMAL, CMCT); - break; - } - - if(!popup) - { - cfb->RenderBox(mitte-50, 305, mitte+50, 330, FILL, CMHT); - cfb->RenderString("zurck", mitte-10, 325, 60, LEFT, SMALL, CMC); - cfb->PaintIcon(cicons->getIcon_ok(), mitte-40 ,305); - } - - cfb->FBPaint(); -} diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor/submenu.h b/archive-sources/FritzCallMonitor/FritzInfoMonitor/submenu.h deleted file mode 100644 index 399b83bd..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor/submenu.h +++ /dev/null @@ -1,45 +0,0 @@ - -#ifndef __submenu_h__ -#define __submenu_h__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "icons.h" - -#include -using namespace std; - -class CSubMenu -{ - public: - CSubMenu(); - ~CSubMenu(); - static CSubMenu* getInstance(); - - void ShowMessage(int message, int popup); - void ShowSubMenu(int menu); - void CallerMenu(int rs_result, int callsel); - void DialMenu(int dialtest); - - struct S_SUBMENU { - int sel; - int mwidth; - int mitems; - }; - vector subMenu; - - private: - CParser * cpars; - CConnect * cconnect; - Cfb * cfb; - CIcons * cicons; - -// int callsel, rs_result, dialtest; - int bspace, lrspace, xwidth, yheight; - int xcenter, ycenter; - int ld, so; -}; - -#endif// __submenu_h__ diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor_setup.cfg b/archive-sources/FritzCallMonitor/FritzInfoMonitor_setup.cfg deleted file mode 100644 index 466752c8..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor_setup.cfg +++ /dev/null @@ -1,6 +0,0 @@ -name=NI-FRITZ! FCM/FIM Setup -desc=FritzCallMonitor.cfg Konfigurationsplugin -type=4 -needfb=1 -needrc=1 -needoffsets=1 diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor_setup.lua b/archive-sources/FritzCallMonitor/FritzInfoMonitor_setup.lua deleted file mode 100644 index 09b41646..00000000 --- a/archive-sources/FritzCallMonitor/FritzInfoMonitor_setup.lua +++ /dev/null @@ -1,548 +0,0 @@ --- Plugin to configure FritzCallMonitor.cfg --- Copyright (C) 2014 NI-Team - -function init() - caption="FritzCallMonitor Setup" - - config="/var/tuxbox/config/FritzCallMonitor.cfg" - addressbook="/var/tuxbox/config/FritzCallMonitor.addr" - - servicename="fritzcallmonitor" - flagfile=".fritzcallmonitor" - - changed = 0 - - C={} - H={} -- hints - - C["FRITZBOXIP"]="fritz.box" - H["FRITZBOXIP"]="Die IP-Adresse oder der Hostname deiner FRITZ!Box" - - C["PORT"]=1012 - H["PORT"]="Port 1012 der FRITZ!Box muss einmalig per Telefon aktiviert werden" - - C["ADDRESSBOOK"]=addressbook - H["ADDRESSBOOK"]="" - - C["EXEC"]="" - H["EXEC"]="Nach eingehendem Anruf, kann ein Script ausgeführt werden" - - C["BACKWARDSEARCH"]=1 - H["BACKWARDSEARCH"]="Rückwärtssuche über das Internet" - - C["DEBUG"]=0 - H["DEBUG"]="Startet den FCM zur Fehlersuche im Debugmodus" - - C["MSGTYPE"]="nmsg" - H["MSGTYPE"]="Neutrino Nachrichtentyp Popup oder Message" - - C["MSGTIMEOUT"]="" - H["MSGTIMEOUT"]="Maximale Anzeigedauer der Nachricht auf dem Bildschirm, bevor sie automatisch gelöscht wird. Keine Angabe = Neutrino default" - - C["MSN_1"]="" - C["MSN_2"]="" - C["MSN_3"]="" - C["MSN_4"]="" - C["MSN_5"]="" - C["MSN_6"]="" - H["MSNMENU"]="MSN Rufnummern, die überwacht werden sollen. Wenn \"MSN_1\" frei bleibt, werden alle Rufnummern überwacht." - H["MSN"]="Ist hier eine Nummer eingetragen, reagiert der FCM bei einem eingehenden Anruf nur auf diese." - - C["BOXIP_1"]="127.0.0.1" - C["BOXIP_2"]="" - C["BOXIP_3"]="" - C["BOXIP_4"]="" - H["BOXMENU"]="Einstellen der Adressen für die Neutrino-Boxen, auf denen ein eingehender Anruf angezeigt werden soll." - H["BOXIP"]=": der Box, auf der die Nachricht angezeigt werden soll. Die Eingabe des Ports ist optional." - - C["LOGON_1"]="root:coolstream" - C["LOGON_2"]="" - C["LOGON_3"]="" - C["LOGON_4"]="" - H["LOGON"]=": für das yWeb der entsprechenden Box, auf der die Nachricht angezeigt werden soll." - - C["EASYMODE"]=0 - H["EASYMODE"]="Einschalten wenn eine EasyBox statt einer Fritz!Box genutzt wird" - - C["PASSWD"]="" - H["PASSWD"]="Das auf der Fritz!Box angegebene Passwort" - - C["CITYPREFIX"]="" - H["CITYPREFIX"]="Bei Übernahme der FB Telefonbücher kann eine fehlende Vorwahl automatisch mit der hier eingetragenen Ortsvorwahl ergänzt werden." - - C["DIALPREFIX"]="" - H["DIALPREFIX"]="Wenn die Wählhilfe verwendet wird (FIM), kann hier die Wählprefix verwendet werden (*111# stellt eine Verbindung ins Festnetz her)." - - C["PORT_1"]="Fon 1, 1" - C["PORT_2"]="Fon 2, 2" - C["PORT_3"]="Fon 3, 3" - C["PORT_4"]="ISDN & DECT, 50" - C["PORT_5"]="ISDN 1, 51" - C["PORT_6"]="ISDN 2, 52" - C["PORT_7"]="DECT 1, 610" - C["PORT_8"]="DECT 2, 611" - H["DIALHELPER"]="Wählhilfe Ports, werden in der Auswahl des Menüs \"Wählhilfe\" (FIM) ausgegeben" - H["PORT"]=", des Gerätes in der FritzBox" - - H["SEARCH_MODE_MENU"]="Wenn Nachrichten auf dem FRITZ-Anrufbeantworter vorliegen, kann mit einem NI-Image eine Info eingeblendet werden (NI-Infobar)" - C["SEARCH_MODE"]=0 - H["SEARCH_MODE"]="Schaltet die Abfrage ein/aus" - - C["SEARCH_QUERY"]="&var=tam:settings/TAM0/NumNewMessages" - H["SEARCH_QUERY"]="Querystring für die Abfrage des Anrufbeantworters. Liegen gespeicherte Nachrichten vor, wird das Flagfile gesetzt." - - C["SEARCH_INT"]=300 - H["SEARCH_INT"]="Intervall für die Suchabfrage (Query)" - - C["AD_FLAGFILE"]="/var/etc/.call" - H["AD_FLAGFILE"]="Ist der Query erfolgreich, wird dieses Flagfile für die Anzeige in den NI-Infoicons gesetzt" - - -- maybe todo -- - C["CALLERLIST_STR"]="getpage=..%2Fhtml%2Fde%2FFRITZ%21Box_Anrufliste.csv" - C["CALLERLIST_FILE"]="/tmp/FRITZ!Box_Anrufliste.csv" -end -- init --- --------------------------------------------------------------------------- - -function trim(s) - return (s:gsub("^%s*(.-)%s*$", "%1")) -end - -function load() - local f = io.open(config, "r") - if f then - for line in f:lines() do - local key, val = line:match("^([^=#]+)=([^\n]*)") - if (key) then - if (val == nil) then - val="" - end - C[trim(key)]=trim(val) - end - end - f:close() - end -end - -function check_for_restart() - local f = io.open("/var/etc/"..flagfile, "r") - if f == nil then - io.open("/etc/"..flagfile, "r") - end - - if f ~= nil then - f:close() - os.execute("service "..servicename.." stop") - os.execute("sleep 1") - os.execute("service "..servicename.." start") - end -end - -function save() - if (changed == 1) then - changed = 0 - - local h = hintbox.new{caption="Einstellungen werden gespeichert", text="Bitte warten ..."} - h:paint() - - local f = io.open(config, "w") - if f then - f:write( -[[ -# Der Port 1012 der FRITZBox muss einmalig per Telefon (analog!) aktiviert werden: -# Telefoncode zum öffnen des TCP-Ports: #96*5* -# Telefoncode zum schließen des TCP-Ports: #96*4* -# Diese Funktion wir ab der Firmware Version xx.03.99 von AVM unterstützt. - -# IP von deiner Fritzbox und port -FRITZBOXIP=]].. C["FRITZBOXIP"] .. "\n" ..[[ -PORT=]].. C["PORT"] .. "\n" ..[[ - -# Addressbuch File -ADDRESSBOOK=]].. C["ADDRESSBOOK"] .. "\n" ..[[ - -# Pfadangabe für den Aufruf eines Scripts. -# Nach eingehendem Anruf, kann ein Script ausgeführt werden, -# durch die z.B. die Lautstärke den Box herunter geregelt wird. -# Als Parameter wird der Inhalt der Nachricht, die auch über -# die Box ausgegeben wird, übergeben. -# Dieses Script muss natürlich vorhanden und ausführbar sein. -# Es wird per default kein Script mitgeliefert. -EXEC=]].. C["EXEC"] .. "\n" ..[[ - -# Rückwärtssuche über das Internet -BACKWARDSEARCH=]].. C["BACKWARDSEARCH"] .. "\n" ..[[ - -# Debug Ausgaben -DEBUG=]].. C["DEBUG"] .. "\n" ..[[ - -# Neutrino Nachrichtentyp Popup (popup) oder Message (nmsg) -MSGTYPE=]].. C["MSGTYPE"] .. "\n" ..[[ - -# Maximale Anzeigedauer der Nachricht auf dem Bildschirm, bevor sie automatisch gelöscht wird. -# Ist hier kein Wert eingetragen, wird der Neutrino default genommen (ab Revision 1782). -MSGTIMEOUT=]].. C["MSGTIMEOUT"] .. "\n" ..[[ - -# MSN Rufnummern, die überwacht werden sollen. Wenn "MSN_1" frei bleibt, werden alle Rufnummern überwacht. -# Optional kann auch der Name angegeben werden. Die Eingabe erfolgt dann |. -MSN_1=]].. C["MSN_1"] .. "\n" ..[[ -MSN_2=]].. C["MSN_2"] .. "\n" ..[[ -MSN_3=]].. C["MSN_3"] .. "\n" ..[[ -MSN_4=]].. C["MSN_4"] .. "\n" ..[[ -MSN_5=]].. C["MSN_5"] .. "\n" ..[[ -MSN_6=]].. C["MSN_6"] .. "\n" ..[[ - -# IP Adresse der Box. Die erste Adresse sollte 127.0.0.1 sein (die Box auf dem der FritzCallMonitor läuft). -# Optional kann auch der Port angegeben werden. Die Eingabe erfolgt dann :. Der Standardport ist 80 -BOXIP_1=]].. C["BOXIP_1"] .. "\n" ..[[ -BOXIP_2=]].. C["BOXIP_2"] .. "\n" ..[[ -BOXIP_3=]].. C["BOXIP_3"] .. "\n" ..[[ -BOXIP_4=]].. C["BOXIP_4"] .. "\n" ..[[ - -# Name und Passwort (Name:Passwort) für das yWeb der entsprechenden Box -LOGON_1=]].. C["LOGON_1"] .. "\n" ..[[ -LOGON_2=]].. C["LOGON_2"] .. "\n" ..[[ -LOGON_3=]].. C["LOGON_3"] .. "\n" ..[[ -LOGON_4=]].. C["LOGON_4"] .. "\n" ..[[ - -# Wenn der CallMonitor in Verbindung mit einer Eeasybox eingesetzt wird "1" sonst immer "0" -EASYMODE=]].. C["EASYMODE"] .. "\n" ..[[ - -# Passwort für die !FritzBox (Achtung - nur neues Loginverfahren mit SID) -PASSWD=]].. C["PASSWD"] .. "\n" ..[[ - -# Bei der Übernahme der !FritzBox-Telefonbücher mit den FritzInfolMonitor (FIM), -# kann eine fehlende Vorwahl automatisch mit der hier eingetragenen Ortsvorwahl ergänzt werden. -CITYPREFIX=]].. C["CITYPREFIX"] .. "\n" ..[[ - -# Wenn die Wählhilfe verwendet wird (FIM), kann hier die Wählprefix verwendet werden. -# Das Beispiel DIALPREFIX=*111# stellt eine Verbindung ins Festnetz her. -DIALPREFIX=]].. C["DIALPREFIX"] .. "\n" ..[[ - -# Wählhilfe Ports, werden in der Auswahl des Menüs "Wählhilfe" (FIM) ausgegeben -# Name Port Intern -# ------------------------------ -# "Fon 1", 1, "**1" -# "Fon 2", 2, "**2" -# "Fon 3", 3, "**3" -# "ISDN & DECT", 50, "**50" -# "ISDN 1", 51, "**51" -# "ISDN 2", 52, "**52" -# "ISDN 3", 53, "**53" -# "ISDN 4", 54, "**54" -# "ISDN 5", 55, "**55" -# "DECT 1", 610, "**610" -# "DECT 2", 611, "**611" -# "DECT 3", 612, "**612" -# "DECT 4", 613, "**613" -# "DECT 5", 614, "**614" -# "SIP 1", 620, "**620" -# "SIP 2", 621, "**621" -# "SIP 3", 622, "**622" -# "SIP 4", 623, "**623" -# "SIP 5", 624, "**624" -# -# Maximal sind 8 Einträge möglich. -# Dabei ist folgender Syntax einzuhalten: -# PORT_x=Name,Port -PORT_1=]].. C["PORT_1"] .. "\n" ..[[ -PORT_2=]].. C["PORT_2"] .. "\n" ..[[ -PORT_3=]].. C["PORT_3"] .. "\n" ..[[ -PORT_4=]].. C["PORT_4"] .. "\n" ..[[ -PORT_5=]].. C["PORT_5"] .. "\n" ..[[ -PORT_6=]].. C["PORT_6"] .. "\n" ..[[ -PORT_7=]].. C["PORT_7"] .. "\n" ..[[ -PORT_8=]].. C["PORT_8"] .. "\n" ..[[ - -# Strings zum senden an die !FritzBox, Die Quelle hierfür ist: -# http://www.wehavemorefun.de/fritzbox/index.php/Anrufliste_von_der_Box_holen - -# Anrufliste (CSV) herunterladen -CALLERLIST_STR=]].. C["CALLERLIST_STR"] .. "\n" ..[[ - -# Speicherort für die Anrufliste auf der Coolstream -CALLERLIST_FILE=]].. C["CALLERLIST_FILE"] .. "\n" ..[[ - -# 0 = AUS [default] -# 1 = An die FRITZ!Box wird eine Query-Abfrage gesendet -SEARCH_MODE=]].. C["SEARCH_MODE"] .. "\n" ..[[ - -# Querystring für die Abfrage der FRITZ!Box. -# Die Abfrage, ob neue Nachrichten vorhanden sind, wurde mit der Firmware Version 29.04.87 getestet. -# In älteren Versionen scheint die FB keine Information darüber bereit zu stellen. -# -# Liefert der Query "0" zurück, wird das Flagfile (AD_FLAGFILE) gelöscht. -# Ist das Ergebnis ungleich "0", wird das Flagfile (AD_FLAGFILE) erzeugt. -# default SEARCH_QUERY=&var=tam:settings/TAM0/NumNewMessages -SEARCH_QUERY=]].. C["SEARCH_QUERY"] .. "\n" ..[[ - -# Intervall in Sekunden, für die Suchabfrage in der Startseite der FRITZ!Box -# default SEARCH_INT=300 -SEARCH_INT=]].. C["SEARCH_INT"] .. "\n" ..[[ - -# Standard im NI-Image ist /var/etc/.call -# default AD_FLAGFILE=/var/etc/.call -AD_FLAGFILE=]].. C["AD_FLAGFILE"] .. "\n" ..[[ -]] - ) - f:close() - - check_for_restart() - - local i = 0 - repeat - i = i + 1 - msg, data = n:GetInput(500) - until msg == RC.ok or msg == RC.home or i == 2 - end - - h:hide() - end -end - -function handle_key(a) - if (changed == 0) then - return MENU_RETURN["EXIT"] - end - - local res = messagebox.exec{title="Änderungen verwerfen?", text="Sollen die Änderungen verworfen werden?", buttons={ "yes", "no" } } - if (res == "yes") then - return MENU_RETURN["EXIT"] - else - return MENU_RETURN["REPAINT"] - end -end - -function reset() - local res = messagebox.exec{title="Standardeinstellungen laden", text="Sollen die Standardeinstellungen geladen werden?", buttons={ "yes", "no" } } - if (res == "yes") then - init() - changed=1 - - -- ugly but it's works -- - m:hide() - m = {} - m_menu("main") - - return MENU_RETURN["EXIT_ALL"] - end - return MENU_RETURN["REPAINT"] -end - -on="ein" -off="aus" -function num2onoff(a) - if (tonumber(a) == 0) then - return off - else - return on - end -end -function onoff2num(a) - if (a == on) then - return 1 - else - return 0 - end -end -function set_onoff(k, v) - if (C[k] ~= onoff2num(v)) then - C[k]=onoff2num(v) - changed=1 - end -end - -yes="ja" -no="nein" -function num2yesno(a) - if (tonumber(a) == 0) then - return no - else - return yes - end -end -function yesno2num(a) - if (a == yes) then - return 1 - else - return 0 - end -end -function set_yesno(k, v) - if (C[k] ~= yesno2num(v)) then - C[k]=yesno2num(v) - changed=1 - end -end - -function set_string(k, v) - if (C[k] ~= v) then - C[k]=v - changed=1 - end -end - -function get_desc_from_table(t, v) - local __d = "" - for _v, _w in ipairs(t) do - if (_w.value == v) then - __d = _w.desc - break - end - end - return __d -end - --- --------------------------------------------------------------------------- - -table_MSGTYPE = { - { value = "nmsg", desc = "Message" }, - { value = "popup", desc = "Popup" } -} - -descs_MSGTYPE = {} - -for v, w in ipairs(table_MSGTYPE) do - descs_MSGTYPE[v] = w.desc -end --- --------------------------------------------------------------------------- -table_DEBUG = { - { value = "0", desc = "aus" }, - { value = "1", desc = "Level 1" }, - { value = "2", desc = "Level 2" } -} - -descs_DEBUG = {} - -for v, w in ipairs(table_DEBUG) do - descs_DEBUG[v] = w.desc -end - --- --------------------------------------------------------------------------- - -switch_table = { - ["MSGTYPE"] = function (x) return table_MSGTYPE end, - ["DEBUG"] = function (x) return table_DEBUG end, -} - -function set_table(k, v) - local __v - for _v, _w in ipairs(switch_table[k]()) do - if (_w.desc == v) then - __v = _w.value - break - end - end - C[k]=__v - changed=1 -end - --- --------------------------------------------------------------------------- - -function msn_menu(id) - local msn = menu.new{name="MSN Einstellungen", icon="settings"} - msn:addKey{directkey=RC["home"], id="home", action="handle_key"} - msn:addKey{directkey=RC["setup"], id="setup", action="handle_key"} - msn:addItem{type="separator"} - msn:addItem{type="back"} - msn:addItem{type="separatorline"} - for i=1,6 do - msn:addItem{type="stringinput", action="set_string", id="MSN_"..i.."", value=C["MSN_"..i..""], hint=H["MSN"] ,valid_chars="0123456789 ", directkey=RC[""..i..""], name="Rufnummer "..i..""} - end - msn:exec() -end - -function box_menu(id) - local box = menu.new{name="Box Einstellungen", icon="settings"} - box:addKey{directkey=RC["home"], id="home", action="handle_key"} - box:addKey{directkey=RC["setup"], id="setup", action="handle_key"} - box:addItem{type="separator"} - box:addItem{type="back"} - box:addItem{type="separatorline"} - for i=1,4 do - box:addItem{type="stringinput", action="set_string", id="BOXIP_"..i.."", value=C["BOXIP_"..i..""], hint=H["BOXIP"], valid_chars="0123456789.: ", directkey=RC[""..i..""], name="Box "..i.." IP"} - box:addItem{type="keyboardinput", action="set_string", id="LOGON_"..i.."", value=C["LOGON_"..i..""], hint=H["LOGON"], name="Box "..i.." Login"} - if i < 4 then - box:addItem{type="separator"} - end - end - box:exec() -end - -function port_menu(id) - local msn = menu.new{name="Wählhilfe", icon="settings"} - msn:addKey{directkey=RC["home"], id="home", action="handle_key"} - msn:addKey{directkey=RC["setup"], id="setup", action="handle_key"} - msn:addItem{type="separator"} - msn:addItem{type="back"} - msn:addItem{type="separatorline"} - for i=1,8 do - msn:addItem{type="keyboardinput", action="set_string", id="PORT_"..i.."", value=C["PORT_"..i..""], hint=H["PORT"], directkey=RC[""..i..""], name="Wählhilfe "..i..""} - end - msn:exec() -end - -function query_menu(id) - local query = menu.new{name="Anrufbeantworter", icon="settings"} - query:addKey{directkey=RC["home"], id="home", action="handle_key"} - query:addKey{directkey=RC["setup"], id="setup", action="handle_key"} - query:addItem{type="separator"} - query:addItem{type="back"} - query:addItem{type="separatorline"} - query:addItem{type="chooser", action="set_yesno", options={ yes, no }, id="SEARCH_MODE", hint=H["SEARCH_MODE"], value=num2yesno(C["SEARCH_MODE"]), name="Query-Abfrage"} - query:addItem{type="keyboardinput", action="set_string", id="SEARCH_QUERY", value=C["SEARCH_QUERY"], hint=H["SEARCH_QUERY"], name="Query-String"} - query:addItem{type="stringinput", action="set_string", id="SEARCH_INT", value=C["SEARCH_INT"], hint=H["SEARCH_INT"], valid_chars="0123456789 ", name="Abfrageintervall"} - query:addItem{type="keyboardinput", action="set_string", id="AD_FLAGFILE", value=C["AD_FLAGFILE"], hint=H["AD_FLAGFILE"], name="Signaldatei"} - query:exec() -end - -function pwd_menu(id) - local pwd = menu.new{name="FRITZ!Box Passwort", icon="settings"} - pwd:addKey{directkey=RC["home"], id="home", action="handle_key"} - pwd:addKey{directkey=RC["setup"], id="setup", action="handle_key"} - pwd:addItem{type="separator"} - pwd:addItem{type="back"} - pwd:addItem{type="separatorline"} - pwd:addItem{type="keyboardinput", action="set_string", id="PASSWD", value=C["PASSWD"], name="Passwort"} - pwd:exec() -end - -function m_menu(id) - m = menu.new{name=caption, icon="settings"} - m:addKey{directkey=RC["home"], id="home", action="handle_key"} - m:addKey{directkey=RC["setup"], id="setup", action="handle_key"} - m:addItem{type="separator"} - m:addItem{type="cancel"} - m:addItem{type="separatorline"} - m:addItem{type="forwarder", name="Speichern", action="save", icon="rot", directkey=RC["red"]} - m:addItem{type="separatorline"} - m:addItem{type="keyboardinput", action="set_string", id="FRITZBOXIP", value=C["FRITZBOXIP"], hint=H["FRITZBOXIP"], name="FRITZ!Box IP/Name"} - m:addItem{type="stringinput", action="set_string", id="PORT", value=C["PORT"], hint=H["PORT"], valid_chars="0123456789 ", name="FRITZ!Box Port"} - m:addItem{type="forwarder", name="Passwort eingeben", action="pwd_menu", hint=H["PASSWD"], id="PWD"} - m:addItem{type="separator"} - m:addItem{type="chooser", action="set_yesno", options={ yes, no }, id="EASYMODE", hint=H["EASYMODE"], value=num2yesno(C["EASYMODE"]), name="EasyBox statt FRITZ!Box"} - m:addItem{type="separatorline"} - m:addItem{type="chooser", action="set_yesno", options={ yes, no }, id="BACKWARDSEARCH", hint=H["BACKWARDSEARCH"], value=num2yesno(C["BACKWARDSEARCH"]), name="Rückwärtsuche"} - m:addItem{type="chooser", directkey=RC["green"], icon="gruen", action="set_table", options=descs_DEBUG, id="DEBUG", hint=H["DEBUG"], value=get_desc_from_table(table_DEBUG, C["DEBUG"]), name="Debugmodus"} - m:addItem{type="stringinput", action="set_string", id="CITYPREFIX", value=C["CITYPREFIX"], hint=H["CITYPREFIX"], valid_chars="0123456789 ", name="Ortsvorwahl", size="7"} - m:addItem{type="stringinput", action="set_string", id="DIALPREFIX", value=C["DIALPREFIX"], hint=H["DIALPREFIX"], valid_chars="0123456789 ", name="Wählprefix", size="7"} - m:addItem{type="separator"} - m:addItem{type="filebrowser", action="set_string", id="ADDRESSBOOK", value=C["ADDRESSBOOK"], hint=H["ADDRESSBOOK"], name="Adressbuch"} - m:addItem{type="filebrowser", action="set_string", id="EXEC", value=C["EXEC"], hint=H["EXEC"], name="Script starten"} - m:addItem{type="separatorline"} - m:addItem{type="chooser", action="set_table", options=descs_MSGTYPE, id="MSGTYPE", value=get_desc_from_table(table_MSGTYPE, C["MSGTYPE"]), hint=H["MSGTYPE"], name="Benachrichtung"} - m:addItem{type="stringinput", action="set_string", id="MSGTIMEOUT", value=C["MSGTIMEOUT"], hint=H["MSGTIMEOUT"], valid_chars="0123456789 ", name="Message Timeout"} - m:addItem{type="separatorline"} - m:addItem{type="forwarder", name="MSN Einstellungen", action="msn_menu", hint=H["MSNMENU"], id="MSN"} - m:addItem{type="forwarder", name="Box Einstellungen", action="box_menu", hint=H["BOXMENU"], id="BOX"} - m:addItem{type="forwarder", name="Wählhilfen", action="port_menu", hint=H["DIALHELPER"], id="PORT"} - m:addItem{type="forwarder", name="Statusabfrage des Anrufbeantworters", action="query_menu", hint=H["SEARCH_MODE_MENU"], id="PORT"} - m:addItem{type="separatorline"} - m:addItem{type="forwarder", name="Standardeinstellungen laden", action="reset", hint="Aktuelle Einstellungen verwerfen und die Standardeinstellungen laden" } - m:exec() -end - --- MAIN ---------------------------------------------------------------------- -n = neutrino() -init() -load() -m_menu("main") diff --git a/archive-sources/FritzCallMonitor/FritzInfoMonitor_setup_hint.png b/archive-sources/FritzCallMonitor/FritzInfoMonitor_setup_hint.png deleted file mode 100644 index 9d59ea6e440a305585c174b99bea3bdb147c8788..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3506 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 diff --git a/archive-sources/FritzCallMonitor/Technical_Note_Session_ID.pdf b/archive-sources/FritzCallMonitor/Technical_Note_Session_ID.pdf deleted file mode 100755 index 7c9c9731896a525acf9ddb649d8e567289d8759b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88227 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 diff --git a/archive-sources/FritzCallMonitor/Technical_Note_Session_ID_ab_OS_5.5.pdf b/archive-sources/FritzCallMonitor/Technical_Note_Session_ID_ab_OS_5.5.pdf deleted file mode 100755 index c69ff26a6a2a34e25f3d540f0d507f585c0a06df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432622 zcma&NWmsI>vM!7ScMS~$8nTif5~(2&7kAPdmZ#0HIzk6F&z!Q9xz z+Q-}s$jU4SWCL-5!CcIWKrlPAIFOB%g$u;ZtN`R-R{L{{lbe%^Sqi8NWCybWLEIpH z0Rc2~2eZFs0{+hr8Zrm#f4@V_+|<#`T*=tQ-u2HLMIG(j?Hyc!?956o=4RHWZjLTM zR*--IvxK#so4E_Kgq^XQ`M-xSON;69iGx9$qTIsbEFf_SHZE>4F$rN|QLwN$D+mM< z;gnz(;FAEevk8lev5AQZgV@;Fz}#YB32sp^tFSnygg6K!Dxl9S?OsO+nB~kJEZwaB2*CN5I3EAjlABq@(a{a~N6Wt+QT<~bAQvaInzxfVvzCgv z1+%6uD-aB1{iDCDn~S-zJsPsrnu&>-5vGxmiILGFOcH7^FxmNilo<+i?0Bd+Ztsbw z(G}gNXB2An-g+LRJ6)DXXt{_`scQUMJA$YkU1&d*$Tqp2unHzXjz!}wfirW0) z%drqp%MV*G>=KGJ@ww@q3l?X(iKurA6%rcq{Jr<)kV+^B8tM+8AOa2f&pP}^mjA4X ztDCWlo0p5Z1sXC78Zs4?xS|9a@_(-q8ZsBhf3MI#nH~rNbN)dD2=oUR|27hcg^gJi z$O`8EA9@=Z8Ce(^$ygeh8yR``0Vjf>`cXd$DdWS(e-N6wbU@%HO=m=PAkrd*YHLwQ z>r1V>GW)*Il}1Z-*mUbBn*~(w zd4c>4uHjqrh6!s-G96D{6tF#++7jcjw_Ho;dg?+BnMmj!J8 z!HEAtz<)eN-rUXD%-GEs$jbFESST4=n#&oRnA^Gj@rD2Miz^WP7xGp9jTX^A&)Yd# z{PIx?s+~MgYP8ngz(l@~{<7ZibPe+^dwvi-Gm zD*DW#E{;wjj$XQdjbP_yX99tMTx=kHX8AvUW&BS!{`laZH~yE1D(0?^?k=Y0u0W1| zJA;a&+aKQpviw{4zZCqNg#ku1Qzo|vL_afA$D!Q)Oe2G5s`6aJ#rz%y#J+@Sf zpq|!cq|FK4GC~71^~I#$)`C4n4`lnP(M#K+#AuO~2DKs28!q`1(ix*`4pM~)Dr=$e zAtlZt@?LGSYeZWuZg*X}Xjy}tGm_7@)Xj%GIc~Bjyxm8B$wW9jCj?XFea-e9zzB$#X(w%u+Qb1-Xna zH)!y}j5o?DDJtf=iR9wC$>`#$DG%av$vfh6Nz>vfcB&kv*mWCs#%Xa+)&dX#y{2Me zpZtWW?~%$a3+-}?hwpr_e<5By-v;|jTO8xYk>Du56+NHa6TF3vTV2%3dCG_{*AoZ| zep`*b<-a-gW2c>Kd;z&XLr#7N$*$UTN6zm~>e8(eS3i1Y@!PGdLXjywRwAKGnVcKAQ3fq8qgWXh zE#_-BB@4IJq9~D^K+M|5;pKN(cHul7YanU^7Q?%H6Xc@QidkDuay7qwI!EZqypG;) z-*G*AyZeNJW~)p3dJFn%9vFB69TOHQG=9VUTVRn#oSagFkgxu}qYtJWiuga{@7$WE zbUjC7q$}u|ls^6bZkAxy!B|yuXw)G1nOTnJ@t2R4iNMM_E}{)b)Z#1ROa~fI3VHQb zX0hSyFd`m4&rP;6FqS#9`sd5U*&=#-0`6$Z_V$aY)ihM44o|!U71Ww_{Y|0Lb9qSjvYMxWl3lk zba<8^cnz-L@PI|tfPxYvjN1`{bv>47tT-0C4P$wdq1ZHH6@uuNNCeCsw0dNe0C;i= zBOs1QdP!0T@Uq@Zb|P)00QF9t;^~rDI&nC3l4Ena085k`Uj_m~0q7A$ghvn^yYy!xgbq!n}g1 zfJ^7aMOOY?dvni2_%fOGQ*MCSoDpYB3dHW=My~k2!l-Npqi7X#EY6H|OA+E)iNF2T zjyUjD*C5ox@MJSW22HOkv~oBGrK`id|h-g=lK2&u+fscm)w9g26IOS4<+M zeXw|W!Gq}iJHPENlFsr-7920%3EU_yH`yTCV*W$xkmeQdJKv$0{L9d<65rF&D(TCs zdB10%X?Sr~{itk>QLOy2Q8(fzk)YrIfWu_0P*Z7(+}e_B`RAMJp@}{3z5Kc9^Yqoq zQMEzbHV-o~|GM_R_G`A@*a6{vTY$%X+w0!viTf~x8b$g?TDPm;8?>fzwJ|Li;i*4K zrX8-Ej(NFyl|^)fi)lxc4ggt2Pz`D5pook0~mb6kNUmgLLe*7cAt* z*xfJ05#9n}P@z7`{G$D*?e(vX??2n?KTweW&<;+}-w20PbeO8N%1d6eNMx9xkBIc;$V2_1EDFYLwGjDT5^k}xw9p;@CO)jnE%D=o^B%#61OH>|`Q(qt zjxcn|I)}5Wyf(?j*9`J095Za6ccR%kk!zY1DnmjrW+^-uGcBVzu)SkQaA14La>rNg z*qiq?ew!$cg?{7~ac_Rw!A^GbWZ zc?tUTs6wBOP^sWcbYVA$Le#3zn^k9zIs-DB&%9x(4z2 zP>yL9o2yfD*-iED!4Hp1N!K7|b_d>1$-H~`t(gI|Ehe>DtP0RfIgf=hdDvy9`!N`Z z89}j(UKp`FZG{ns>#_nNR9TSP%F3UQ_BW+P|ZtDB;Msyr++ve)1Ne9WU+&5q`l)_3-a z?DB|lm82v;i-F5;*P-r!$rcM|J3&FZg_y>!?aU0v_TMZFuJu~z%o6o*l3p+J7i3kt zm_2{O$Jwq;!#~;QFT(u4+J}RS<-hGC744^{?>NVT>;Ju`wUgV5HTs&7jIuy(#Y?xC z?CTbpd@h@td)VohT2d6|CxGw9ib8`5nL*a@CI9}aYl6PMFWEb+xcb&Gn_y=3Z8$d6 z0o=;a7IGV|n^g>xEUb;LpiojuHmW(5nzkL}bpM82jS}xvvvJ?AcY0@c0f}=t^Y_yN zPr@=Nr-sg)$eb;#}ID4L#eUg>Co9c(61Mhn z0H%$Wt9L}+Osx^k#?C#rLlzCq(ejCpojG4&?m_Z9Rs6vvWLXerDJZilxsBdM-f&G% z-LpmjRnSQ#KxsNED!%2rE*M6lq+1BQ%7e~8R=Xo(jBw`a)TCrV$z5plv%ai6w?M6SP>*M6Bg)rgO|YYVb6v8U zO%J_ZbUAE1zt7kBO-8UE{=2EpEG1ph^}83r%DJ|z-!6lCdc9fqdrAb%Fe$pO(}{Xl z-9wlV7@Xnkuh(>+&8HMDVgSq@LG9;kA8oeb`w3!q-#vxb*g9|YPmL`PfLyI+Red#f zg2!osFXwQbaT^Et2|G7&#!Qyte9s0c&$b?Xtr*DJnoF`yRc(i8J4uYzZHW$b!9x|R zIX8!x)lq!(zD~i!&!2|Hh*fRoz%i4t7o8(x4Q&$FdKA2xp(bF|MgIZq|2h}`?`Y>_{X5zrspIi~&>nH` zA2TqO6jhho5tay#mLUv7Ms30xC0^=|1Fi_oF^l=#$p>4d?c^t|3y)t;#Od+s`g$&i z4)~2##8nJf79d!nMXC|hU*J?UKo{KT0O-t}c*qb|(1{rydsbPx=fXz%bZjAgl`(p_ zt_qm}MSh{B{jLpj>mUv=<(@xQhcG0GbQvZcyK^ccw34EBYHoYkW_kY-RtszxBd2XB z2Jxy+(PxzzEF-U^Wmxpf1d@^Ne4X!`l*pH}J&H$k;!yu!v0NzJmmX$)v%)cWIpupMZRPvG#A5AC{MRVhfrKcP z1gpU*iE%0_S6qq@C(%0eh~W?{iff)2SHCrGFgDZ88WvrYM+x6t;lS70RW6avB6WkP zhLymfP&tpWQJ+Q778?z`(p?|^Zb`lx(Ze<%UYr#pBP+uq(qNbeY|sxv(xA$L0N|Yj#b9Z4-ea zgF)WzmW_G$qMMMXhAGJ<+&2!Y+}m_ufQH~SUknFtk^x#WD>K(;BgMMiP9 z(ZZlM;*_K-M=9ZA1_9dzKpsr7B@i~Q*P0Z%{wJhI`)C6G3FLoE8~)!JAqO}6-$8Dt zCT~l`irMv~Dd&LgwXhJtoGKzh%XNd96)qx&ku7FWRo5im@$=o=vfdTgw|Bg9__$@RdHUCEDS# za2DRpN`UFGfehEC*9ogu;yY8Gyd>sJc0)5RAFX`tt-;3rmb#7aNY3wVyg{($%%3=k zW%ke_OPwp9k#RPm&KvLJ07!Lao0Yq4@3QamOd7Z!jgLf3@T%=`oBOqEL|7^N;oEuR z;fY~aMzOup>lb4i#B0{PXng&MSrS&BlGtXBKt{gM+xHRL4ToY`)jy5>uI&LBW8Cj7 zgl?0H0TL`c^Ub?aEEvg|d?9FWr28Uh24Z>eW#f`=cU;QyX>o$?^yM4Ah*+VcR*7j zBb*FOVNqo3HGW?xHTD-6e;x(|g3{K!0|s$Q`3*0lnv@_0R7W0)FO^@>ufS{N0zmiDXHd|$B;)f{FLl~;>iH!4Zzd( z8yIys6xtE!^p*|#G$+!T+VpH(--5; zo+@pje^E7}^+!&;RZJFg0iMvQzAH_!SA2|j0SYHyD0KyW+!~_H+iY!c7_Z|u2}9+Q zd$WOc;GD0wZg_V|P8LP=zA%?5eKcver=l@eQdo*WVJOZ-GfyOeL+KXwpmM?C-lU%2 zypX1D!B8`_hf(1+(%aEljawxb6l$H(%$wJ)|NXr@v+3PKqnM%28U2PZZUvPS$L;bi zQ7~T-nCshVn&R1w_1u&hvg`ayfxXg^PtY|bt3~OK)3!~VW87!$q8+!=wmEfJ!w%Dh zDY_x4ciMM6pWn0}3$R>xlu|(ix;(yI1X*?GzcvQ0-(|1@TR4WwGxm2Ot7-!{_U@`^ zI9zLdP z*3^{h6b4yPe_i8|2%}2F&a$cjxWeXxJ8&3J+6Ebutgzb-r+a!zG|^cHXMFD(@+a>n zZMXGd0*Z`u zv+AqKh|ktG|i{|7$$q;QSxy6+1Oq#~c>S?(>>Ys}ME4 z>~AnC>U7Gf^hrL}))>n-8z0e+nQX~f$i~hmzaJEmWJ{)cFxv)O?)jqaPDZ?Elf^+t z9UGUI0+{O3-V^aT(SDnZcQeH-O~t9G0z#}s%zCZmZV-C+=_=l-(IdJ($@RAdU`1L4 zP=vA+VjW&EQ(frab=kOMS~SaIFpFY3oFbLX)`xCrdN&|h@{yJK5xtMHfeycD6&0`U z*3W3Me18gF9S;aRFu0uwIzkICcVylw_*elHNi=+AlUR^EG?IYSmqc~ia204>P@(68F6M1EP`l~*2`cz&b6oOv zY_&ld#-Yw4Q7M>4GER9Qf2s)aeA@f=PKr;A*A(jq(jJpl)#jGHGgRpX1aiLE654%V z?2rd%%4xhqeiojk+P>9&ZV6 zf`mw!f^*DK2Jm*WrnA$?iF~LAT7F6l(`yu9`HpMR4jHyuCu+Bw`KZsXt2arlxoo!m z!Fc?8(++DKxLcoJ>iuDk>+6wzkTr}ukM=HtKJRr`j;*2c61e+H}D#(6_b!i954sm~Q*$P8^nF8w%JBJNwJeCB-sH-a{F8nwl|M zp6KHas?7vRHEx==EfMVY zw0d&?<4fP3(t-nN`gw?JQGvMH7l~&IqkU)!lt3QiFywFMHtakqtaZg~M>hG%0<}6t z-BMtR@_MV^_%<_rX5m+HcL)su9+>02?T>#-y#wo=h0YWlXTESP>hhIRfag&O9g`Bd+8l7&`;3R&qIQ@3*51)2o(6Hg2d&QHIO zh#^}=$5`z9s1VzHk@6zj8V*a7`$lBi{1l|zEASpeU4yX%(c%Q+PoZ*7T>*ij>wUu zeTkUORI4834mO*+A1QS%6^_B5III4_YadC=DdDWz4* z18!$+92y8ePTZ91ln2`C0$AFw4YGw{^A2zJjE^HEVN)oh;!{%J%gETI%Qe_oYcwr+ zhCnk^+#I@gcvaKi)^M%$hdXzOZoA3B$a>%mEtyNceqT91Zv(DyixOVL(WJyI0 z#eVGV0&sr9%1RBft_fA)G!MB-nmLx{ygimQW#n6(wXV0VUT11}iIzAGi_l^nO!XQg zC0?^zwB@IgV-1W6J==^?P`67M9Rq;MdZ?bHGgz!0Lh~V*obMd>Vm{&haDyc-w_cvG z6O*Y8PsfjiymK3QXO)`25V_5L%MHr0W z5tbQIm{ow-$Oo`!%Qcpocufo4FVUzRzHV#cd628J`@l}=J=){VUYySA(hPmyvn6j( z!!xggsYqk`0mqgdHd7TIIrRx4fb+@p_{6PS!KuL%fzz}LAb!m-qw`tZKzOXFP%IL= zmB*3zWTH_pe(~fJe@}*NpRSZXbD}nhDRp1l#w;fv5eiv`!TBgn~kX6Cb#GBw*UtE2f7~!oISf_a|RNt+0z^DUhC~V#Jn;1Tlii;Vggxj*7Vy2Nb3lI9h_ovluPaMgt6Wx6mR?ZpEqc zZ?WFE+Q{sscxGny;t#Ex>V40f=RKD78hq(o>%{{gYJg5lACz&f?3FIDlK$9jy^1Yu zq9~X>Oh@3I^UR<+u-=FsM`-}OYm@#LzY=#l5B(=t{jDS;{8vAY!=H`-W-)UQYg2O- zNs)hQ()q9M5O!|PKLvmAf5%s=wVZTMHMJl3k>9&KeF`U8W&u7aOe{e+Ou!HClnE^0 z3C5rXQ048S%7w(Ru%N{g3xc4F3#Gn9nUK+z8(~OcDw(jvl$V=HEXw$Kd!O&_-hb;_ zU$H!QyhD%P@y+FZx1wofWv1lJwbPJ#L2~je0 zzV~S#L3)l|Lxq-l?lwO-R4fa9Q=I*x)(r(UVmP>Gr@$jS_(-lWhFcPI3MMZdri=kd zL}xO~C=I%p#Ov;S&iBV(R-QO9Bhek)%28b&wPU@H^74&Hq%awj9E1btDU?Pz#%h73 zKTY6W>N?wjA~VsUVknzYxW0H{Wk-D)#6Wk$x^#hZDrsfr+C#y2s(-g7+E!9xaoy&8 z3DeFbo8Vw$KUv`G0!rb62`&^&NgLT|IAo$5t&lU|fQq$z{RnWjKP)2G&C=1;A^LfSzv{*?VMAl;Zxj zJ(ok?R$JcD?-5n(A#q?ZIIfjAJ*l;z=Qxn(8O{HapW@P^CnNG~EZQ77<(-@JFD*K0 zIuQYW{k?7qEZa!tPa;ve{PA=sRZ@cQC?EYd`@3)HRHI>R>WqnjEz&lPUyev0PG6`~j`bU#2TnhzS_F2Q-wHP? zBp`fk08uWaq89W8jc5RM3F$5(bd%kQI0t^e_whoZ6{b2gq3`qp?t#Y-fh0J8paD@R z3K30N6cr18E98L;OX_34BnL2Did!YJ5vVW4?1BOiE=}^JMU4q5Dn?aqrd3o!j0u+! zwHLxGrdO6!J}oDiXPl?CfxktPmtZJFo93`$zM*#`=E2bqVv^)6_&J?1?K!=Dz)64_ z5i!%JWz5IA`RUyRj~weBR4JY-2{;HaFkw=s<^2VE5&byQ+yrh3<|N>R^@RHb=t2C1 zFF9DTHQ{vDib#x+5y|k4eRFCH-WjLWyA#&{#WD1Lpy6`)0o#wi8zm4{Fg~9~3dar6 zBg{wy#u!`}GA+_7<|XANPKmt`y*LO(p3xeuCCsPLDMC!uO);8yBh6GIm7Lg^;uhwX z=az62BS&qU@?jLq4BDHfEy*wG`O~vT2)QxkCRJbh60I`T3==Eur3f~21=S&Cn+8a- zUhk@82W`}vt~0ecH5OOZCR8nLp02{ULfbl~v7#~Gt=_H9E#*f2P#W+B(hSK))ulGv ztDO+fWJMO4DQH#FN@Yy-8KWBG!V_I6^ijqs7oT@5f0+kp1D4I}3+uJ()$1+IB&`tT zv-iYhi_)eQrX#G*GiaHeb^5jIO{K?^`>0%9VqD@~h}%TkG}?Gw&UX*59Im3TI(B(? zNa+f2Z}4DnL3rr&dMckZO6XVU>v2)=6lvEqL(*>2VA2-pK4=`NW~pl^-zh1muhsY| zd+UUkZj~n&sFb>Bn9HOU+0=}wGph2J{f02fdKS^lFdXpT0NAP671;}QzUuU>bhgL) zMET_TRQ;wv3xOA<&?uHG)-{z-RiD!YYc^f zedrvmf6W?;CKsj{M;JG3mSathe53tdK5!6TSLz&g>9B3Etw@beElqt(jUi_)r}=3w z(nh{KvvNR{v|*rwT7 zIBPkhuyOI`ac`)XxLYY7grgjySW0-+Ky08!RyU>z_AhL9W@(p|w^h}V3}LPVycD%q zg;;1<4OPE1&h`08tg*B)xf>-cmxoTHvtvA?m=p5%+MO8Mm~r@UY_RvR zU$7G>nJB}lny9yvi&GRY&Ag&J^KjErzoZ7Mh0ce}C$VKWc3Fe{90NpoQoE_URE6+f zOmU}m->(b3DZZ(iSCi4x_3Xf>?6!%h z0F9NXozuo{Vx6md)O2oUGHfzBJ8%R%$}s8MMP(7 zf}N!OzQg&takuGPykhuCzpXg6_^vo6rBU>ZS7JcTMe^~!WBONB5;(BfrXzaeX9sUuAhKweT zMw)OD4j63GcWsG2K`r5cyw7t=K@zCH{-1C8F z)4%A6a@%a&Q)gYhMR^7JXW`w+U1t14eA3j#RIn<8g1hIkN0Yzf%}dgpO4!q88CX#SUsPGvAr~df<_JUf^(~FMF>j48t68rMU+4`{K2vg`hs0OXOKF3$~H9voxf9V9X z;DX#dxm>(=o1DZe*8j@li`RQ@s3O(U#G z0;wC$drN(ti@ba;+bP?{slW zt<4U8O@4FP{IR8ZRTJN7aM$j;7&KJ8$;+VM9>PgvOo9(- zhk$pWPital?M3#V9N&G|_0vCb(Ene353HPjXPP!fLeOX|@P9Q#V}62${-;_0e{~Ch zIXJlf)56LMWar}gTdv(|ZHLR&NliU#oqK=nEE}N&M+6Zm@uxxZC$}}=4!bnXp#l(% ztOVBMdiuyK;uPg9;#Z3*x&P^>KPP?0sbuVY_d6*GL4 zuR#4e>q0#_FDsfI&{E_c1n_kVdr z3kWLtk!Uy@9MYo ztKlFJ@pPAQZ8Bh`+nKEQOO@4|h+<98esHU%({tuH)KZsFSc^2K*u<{0Ggf?}K=`t- zRWVYX94-=-1T0?MMVzhqeY!)fK~jy?mS{?oSrV?O!H2BH7@|TYJ!osh>!spE%wQZzjy&iLALnIT|5BFt-Lx+Irxh7<)z9FW67; z3~e`!jH@!@k=R5!Aeso>u>nj)q+3DKg3c)6k_rh|l4xy&E*6Em4}iF zG2c}wzjD(_paokkMa__g(`-;aqde103}Iax|MzB=;r>c83a^nr8HPhr%U|sZ`bq zNnbqMiubheg-uGGu&C?+?l;Xued@9{=@S$0n1Q)t{d&D89Oe;R%`}}I9tob>re{Ci zW+e+;{S7ma&=$Vn~`e`V{(W zbg`jBOYrA+64STdJTt{Q79!Igta2rKHsr2;CNf$+#!lK!vK;)W7&wzmg5J^?nnA

wHgU7_3Q{e2M~QFhoU;%J1U}x6R5fYAA6u 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