-rw-r--r-- | gammu/emb/common/common.pro | 4 | ||||
-rw-r--r-- | gammu/emb/common/device/bluetoth/blue_w32.c | 4 | ||||
-rw-r--r-- | gammu/emb/common/device/bluetoth/blue_w32.h | 4 | ||||
-rw-r--r-- | gammu/emb/common/device/serial/ser_w32.h | 2 |
4 files changed, 8 insertions, 6 deletions
diff --git a/gammu/emb/common/common.pro b/gammu/emb/common/common.pro index af45382..65fd303 100644 --- a/gammu/emb/common/common.pro +++ b/gammu/emb/common/common.pro | |||
@@ -77,118 +77,120 @@ HEADERS += config.h \ | |||
77 | device/serial/ser_djg.h \ | 77 | device/serial/ser_djg.h \ |
78 | misc/coding/coding.h \ | 78 | misc/coding/coding.h \ |
79 | misc/coding/md5.h \ | 79 | misc/coding/md5.h \ |
80 | phone/alcatel/alcatel.h \ | 80 | phone/alcatel/alcatel.h \ |
81 | phone/at/atgen.h \ | 81 | phone/at/atgen.h \ |
82 | phone/nokia/ncommon.h \ | 82 | phone/nokia/ncommon.h \ |
83 | phone/nokia/nfunc.h \ | 83 | phone/nokia/nfunc.h \ |
84 | phone/nokia/nfuncold.h \ | 84 | phone/nokia/nfuncold.h \ |
85 | phone/obex/obexgen.h \ | 85 | phone/obex/obexgen.h \ |
86 | phone/symbian/mroutgen.h \ | 86 | phone/symbian/mroutgen.h \ |
87 | protocol/alcatel/alcabus.h \ | 87 | protocol/alcatel/alcabus.h \ |
88 | protocol/at/at.h \ | 88 | protocol/at/at.h \ |
89 | protocol/nokia/fbus2.h \ | 89 | protocol/nokia/fbus2.h \ |
90 | protocol/nokia/mbus2.h \ | 90 | protocol/nokia/mbus2.h \ |
91 | protocol/nokia/phonet.h \ | 91 | protocol/nokia/phonet.h \ |
92 | protocol/obex/obex.h \ | 92 | protocol/obex/obex.h \ |
93 | protocol/symbian/mrouter.h \ | 93 | protocol/symbian/mrouter.h \ |
94 | service/backup/backgen.h \ | 94 | service/backup/backgen.h \ |
95 | service/backup/backics.h \ | 95 | service/backup/backics.h \ |
96 | service/backup/backldif.h \ | 96 | service/backup/backldif.h \ |
97 | service/backup/backlmb.h \ | 97 | service/backup/backlmb.h \ |
98 | service/backup/backtext.h \ | 98 | service/backup/backtext.h \ |
99 | service/backup/backvcf.h \ | 99 | service/backup/backvcf.h \ |
100 | service/backup/backvcs.h \ | 100 | service/backup/backvcs.h \ |
101 | service/backup/gsmback.h \ | 101 | service/backup/gsmback.h \ |
102 | service/sms/gsmems.h \ | 102 | service/sms/gsmems.h \ |
103 | service/sms/gsmmulti.h \ | 103 | service/sms/gsmmulti.h \ |
104 | service/sms/gsmsms.h \ | 104 | service/sms/gsmsms.h \ |
105 | phone/nokia/dct3/dct3comm.h \ | 105 | phone/nokia/dct3/dct3comm.h \ |
106 | phone/nokia/dct3/dct3func.h \ | 106 | phone/nokia/dct3/dct3func.h \ |
107 | phone/nokia/dct3/n6110.h \ | 107 | phone/nokia/dct3/n6110.h \ |
108 | phone/nokia/dct3/n7110.h \ | 108 | phone/nokia/dct3/n7110.h \ |
109 | phone/nokia/dct3/n0650.h \ | 109 | phone/nokia/dct3/n0650.h \ |
110 | phone/nokia/dct3/n9210.h \ | 110 | phone/nokia/dct3/n9210.h \ |
111 | phone/nokia/dct4/dct4func.h \ | 111 | phone/nokia/dct4/dct4func.h \ |
112 | phone/nokia/dct4/n3320.h \ | 112 | phone/nokia/dct4/n3320.h \ |
113 | phone/nokia/dct4/n3650.h \ | 113 | phone/nokia/dct4/n3650.h \ |
114 | phone/nokia/dct4/n6510.h | 114 | phone/nokia/dct4/n6510.h |
115 | SOURCES +=gsmcomon.c \ | 115 | SOURCES +=gsmcomon.c \ |
116 | gsmstate.c \ | 116 | gsmstate.c \ |
117 | misc/misc.c \ | 117 | misc/misc.c \ |
118 | misc/cfg.c \ | 118 | misc/cfg.c \ |
119 | misc/coding/coding.c \ | 119 | misc/coding/coding.c \ |
120 | misc/coding/md5.c \ | 120 | misc/coding/md5.c \ |
121 | service/sms/gsmsms.c \ | 121 | service/sms/gsmsms.c \ |
122 | service/sms/gsmems.c \ | 122 | service/sms/gsmems.c \ |
123 | service/sms/gsmmulti.c \ | 123 | service/sms/gsmmulti.c \ |
124 | service/gsmcal.c \ | 124 | service/gsmcal.c \ |
125 | service/gsmdata.c \ | 125 | service/gsmdata.c \ |
126 | service/gsmpbk.c \ | 126 | service/gsmpbk.c \ |
127 | service/gsmring.c \ | 127 | service/gsmring.c \ |
128 | service/gsmlogo.c \ | 128 | service/gsmlogo.c \ |
129 | service/gsmmisc.c \ | 129 | service/gsmmisc.c \ |
130 | service/gsmnet.c \ | 130 | service/gsmnet.c \ |
131 | service/backup/gsmback.c \ | 131 | service/backup/gsmback.c \ |
132 | service/backup/backldif.c \ | 132 | service/backup/backldif.c \ |
133 | service/backup/backlmb.c \ | 133 | service/backup/backlmb.c \ |
134 | service/backup/backtext.c \ | 134 | service/backup/backtext.c \ |
135 | service/backup/backvcs.c \ | 135 | service/backup/backvcs.c \ |
136 | service/backup/backvcf.c \ | 136 | service/backup/backvcf.c \ |
137 | service/backup/backics.c \ | 137 | service/backup/backics.c \ |
138 | device/bluetoth/affix.c \ | 138 | device/bluetoth/affix.c \ |
139 | device/bluetoth/bluez.c \ | 139 | device/bluetoth/bluez.c \ |
140 | device/bluetoth/bluetoth.c \ | 140 | device/bluetoth/bluetoth.c \ |
141 | device/serial/ser_djg.c \ | 141 | device/serial/ser_djg.c \ |
142 | device/irda/irda.c \ | 142 | device/irda/irda.c \ |
143 | device/devfunc.c \ | 143 | device/devfunc.c \ |
144 | protocol/at/at.c \ | 144 | protocol/at/at.c \ |
145 | protocol/alcatel/alcabus.c \ | 145 | protocol/alcatel/alcabus.c \ |
146 | protocol/nokia/mbus2.c \ | 146 | protocol/nokia/mbus2.c \ |
147 | protocol/nokia/fbus2.c \ | 147 | protocol/nokia/fbus2.c \ |
148 | protocol/nokia/phonet.c \ | 148 | protocol/nokia/phonet.c \ |
149 | protocol/obex/obex.c \ | 149 | protocol/obex/obex.c \ |
150 | protocol/symbian/mrouter.c \ | 150 | protocol/symbian/mrouter.c \ |
151 | phone/pfunc.c \ | 151 | phone/pfunc.c \ |
152 | phone/at/atgen.c \ | 152 | phone/at/atgen.c \ |
153 | phone/at/siemens.c \ | 153 | phone/at/siemens.c \ |
154 | phone/at/samsung.c \ | 154 | phone/at/samsung.c \ |
155 | phone/at/sonyeric.c \ | 155 | phone/at/sonyeric.c \ |
156 | phone/alcatel/alcatel.c \ | 156 | phone/alcatel/alcatel.c \ |
157 | phone/nokia/dct3/n6110.c \ | 157 | phone/nokia/dct3/n6110.c \ |
158 | phone/nokia/dct3/n7110.c \ | 158 | phone/nokia/dct3/n7110.c \ |
159 | phone/nokia/dct3/n0650.c \ | 159 | phone/nokia/dct3/n0650.c \ |
160 | phone/nokia/dct3/n9210.c \ | 160 | phone/nokia/dct3/n9210.c \ |
161 | phone/nokia/dct3/dct3func.c \ | 161 | phone/nokia/dct3/dct3func.c \ |
162 | phone/nokia/dct4/n3320.c \ | 162 | phone/nokia/dct4/n3320.c \ |
163 | phone/nokia/dct4/n3650.c \ | 163 | phone/nokia/dct4/n3650.c \ |
164 | phone/nokia/dct4/n6510.c \ | 164 | phone/nokia/dct4/n6510.c \ |
165 | phone/nokia/dct4/dct4func.c \ | 165 | phone/nokia/dct4/dct4func.c \ |
166 | phone/nokia/nauto.c \ | 166 | phone/nokia/nauto.c \ |
167 | phone/nokia/nfunc.c \ | 167 | phone/nokia/nfunc.c \ |
168 | phone/nokia/nfuncold.c \ | 168 | phone/nokia/nfuncold.c \ |
169 | phone/obex/obexgen.c \ | 169 | phone/obex/obexgen.c \ |
170 | phone/symbian/mroutgen.c | 170 | phone/symbian/mroutgen.c |
171 | 171 | ||
172 | DEFINES += DESKTOP_VERSION | 172 | DEFINES += DESKTOP_VERSION |
173 | TARGET = microgammu | 173 | TARGET = xmicrogammu |
174 | CONFIG = warn_off release console | 174 | CONFIG = warn_off release console |
175 | DESTDIR = ../../../bin | 175 | DESTDIR = ../../../bin |
176 | OBJECTS_DIR = obj/unix | 176 | OBJECTS_DIR = obj/unix |
177 | MOC_DIR = moc/unix | 177 | MOC_DIR = moc/unix |
178 | 178 | ||
179 | unix: { | 179 | unix: { |
180 | HEADERS += device/serial/ser_unx.h \ | 180 | HEADERS += device/serial/ser_unx.h \ |
181 | device/irda/irda_unx.h | 181 | device/irda/irda_unx.h |
182 | 182 | ||
183 | SOURCES += device/serial/ser_unx.c \ | 183 | SOURCES += device/serial/ser_unx.c \ |
184 | 184 | ||
185 | } | 185 | } |
186 | win32:{ | 186 | win32:{ |
187 | 187 | ||
188 | HEADERS += device/serial/ser_w32.h \ | 188 | HEADERS += device/serial/ser_w32.h \ |
189 | device/irda/irda_w32.h \ | 189 | device/irda/irda_w32.h \ |
190 | device/bluetoth/blue_w32.h | 190 | device/bluetoth/blue_w32.h |
191 | 191 | ||
192 | SOURCES += device/serial/ser_w32.c \ | 192 | SOURCES += device/serial/ser_w32.c \ |
193 | device/bluetoth/blue_w32.c | 193 | device/bluetoth/blue_w32.c |
194 | } | 194 | } |
195 | #The following line was inserted by qt3to4 | ||
196 | QT += xml qt3support | ||
diff --git a/gammu/emb/common/device/bluetoth/blue_w32.c b/gammu/emb/common/device/bluetoth/blue_w32.c index a631c9f..8a367f4 100644 --- a/gammu/emb/common/device/bluetoth/blue_w32.c +++ b/gammu/emb/common/device/bluetoth/blue_w32.c | |||
@@ -1,216 +1,216 @@ | |||
1 | /* (c) 2003-2004 by Marcin Wiacek and Intra */ | 1 | /* (c) 2003-2004 by Marcin Wiacek and Intra */ |
2 | 2 | ||
3 | #include "../../gsmstate.h" | 3 | #include "../../gsmstate.h" |
4 | 4 | ||
5 | #ifdef GSM_ENABLE_BLUETOOTHDEVICE | 5 | #ifdef GSM_ENABLE_BLUETOOTHDEVICE |
6 | #ifdef WIN32 | 6 | #ifdef WIN32 |
7 | 7 | ||
8 | #include <stdlib.h> | 8 | #include <stdlib.h> |
9 | #include <stdio.h> | 9 | #include <stdio.h> |
10 | #include <fcntl.h> | 10 | #include <fcntl.h> |
11 | #include <errno.h> | 11 | #include <errno.h> |
12 | #include <string.h> | 12 | #include <string.h> |
13 | #include <windows.h> | 13 | #include <windows.h> |
14 | #include <io.h> | 14 | #include <io.h> |
15 | 15 | ||
16 | #include "../../misc/coding/coding.h" | 16 | #include "../../misc/coding/coding.h" |
17 | #include "../../gsmcomon.h" | 17 | #include "../../gsmcomon.h" |
18 | #include "../devfunc.h" | 18 | #include "../devfunc.h" |
19 | #include "bluetoth.h" | 19 | #include "bluetoth.h" |
20 | #include "blue_w32.h" | 20 | #include "blue_w32.h" |
21 | 21 | ||
22 | GSM_Error bluetooth_connect(GSM_StateMachine *s, int port, char *device) | 22 | GSM_Error bluetooth_connect(GSM_StateMachine *s, int port, char *device) |
23 | { | 23 | { |
24 | GSM_Device_BlueToothData *d = &s->Device.Data.BlueTooth; | 24 | GSM_Device_BlueToothData *d = &s->Device.Data.BlueTooth; |
25 | WSADATA wsaData; | 25 | WSADATA wsaData; |
26 | SOCKADDR_BTH sab; | 26 | SOCKADDR_BTH sab; |
27 | int i; | 27 | int i; |
28 | 28 | ||
29 | smprintf(s, "Connecting to RF channel %i\n",port); | 29 | smprintf(s, "Connecting to RF channel %i\n",port); |
30 | 30 | ||
31 | WSAStartup(MAKEWORD(1,1), &wsaData); | 31 | WSAStartup(MAKEWORD(1,1), &wsaData); |
32 | 32 | ||
33 | d->hPhone = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); | 33 | d->hPhone = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); |
34 | if (d->hPhone == INVALID_SOCKET) { | 34 | if (d->hPhone == INVALID_SOCKET) { |
35 | i = GetLastError(); | 35 | i = GetLastError(); |
36 | GSM_OSErrorInfo(s, "Socket in bluetooth_open"); | 36 | GSM_OSErrorInfo(s, "Socket in bluetooth_open"); |
37 | if (i == 10041) return ERR_DEVICENODRIVER;//unknown socket type | 37 | if (i == 10041) return ERR_DEVICENODRIVER;//unknown socket type |
38 | return ERR_UNKNOWN; | 38 | return ERR_UNKNOWN; |
39 | } | 39 | } |
40 | 40 | ||
41 | memset (&sab, 0, sizeof(sab)); | 41 | memset (&sab, 0, sizeof(sab)); |
42 | sab.port = port; | 42 | sab.port = port; |
43 | sab.addressFamily = AF_BTH; | 43 | sab.addressFamily = AF_BTH; |
44 | sab.btAddr = 0; | 44 | sab.btAddr = 0; |
45 | for (i=0;i<(int)strlen(device);i++) { | 45 | for (i=0;i<(int)strlen(device);i++) { |
46 | if (device[i] >='0' && device[i] <='9') { | 46 | if (device[i] >='0' && device[i] <='9') { |
47 | sab.btAddr = sab.btAddr * 16; | 47 | sab.btAddr = sab.btAddr * 16; |
48 | sab.btAddr = sab.btAddr + (device[i]-'0'); | 48 | sab.btAddr = sab.btAddr + (device[i]-'0'); |
49 | } | 49 | } |
50 | if (device[i] >='a' && device[i] <='f') { | 50 | if (device[i] >='a' && device[i] <='f') { |
51 | sab.btAddr = sab.btAddr * 16; | 51 | sab.btAddr = sab.btAddr * 16; |
52 | sab.btAddr = sab.btAddr + (device[i]-'a'+10); | 52 | sab.btAddr = sab.btAddr + (device[i]-'a'+10); |
53 | } | 53 | } |
54 | if (device[i] >='A' && device[i] <='F') { | 54 | if (device[i] >='A' && device[i] <='F') { |
55 | sab.btAddr = sab.btAddr * 16; | 55 | sab.btAddr = sab.btAddr * 16; |
56 | sab.btAddr = sab.btAddr + (device[i]-'A'+10); | 56 | sab.btAddr = sab.btAddr + (device[i]-'A'+10); |
57 | } | 57 | } |
58 | } | 58 | } |
59 | dbgprintf("Remote Bluetooth device is %04x%08x\n", | 59 | dbgprintf("Remote Bluetooth device is %04x%08x\n", |
60 | GET_NAP(sab.btAddr), GET_SAP(sab.btAddr)); | 60 | GET_NAP(sab.btAddr), GET_SAP(sab.btAddr)); |
61 | 61 | ||
62 | if (connect (d->hPhone, (struct sockaddr *)&sab, sizeof(sab)) != 0) { | 62 | if (connect (d->hPhone, (struct sockaddr *)&sab, sizeof(sab)) != 0) { |
63 | i = GetLastError(); | 63 | i = GetLastError(); |
64 | GSM_OSErrorInfo(s, "Connect in bluetooth_open"); | 64 | GSM_OSErrorInfo(s, "Connect in bluetooth_open"); |
65 | if (i == 10060) return ERR_TIMEOUT; //remote device failed to respond | 65 | if (i == 10060) return ERR_TIMEOUT; //remote device failed to respond |
66 | if (i == 10050) return ERR_DEVICENOTWORK; //socket operation connected with dead network | 66 | if (i == 10050) return ERR_DEVICENOTWORK; //socket operation connected with dead network |
67 | //noauth | 67 | //noauth |
68 | close(d->hPhone); | 68 | close(d->hPhone); |
69 | return ERR_UNKNOWN; | 69 | return ERR_UNKNOWN; |
70 | } | 70 | } |
71 | 71 | ||
72 | return ERR_NONE; | 72 | return ERR_NONE; |
73 | } | 73 | } |
74 | 74 | ||
75 | #ifdef BLUETOOTH_RF_SEARCHING | 75 | #ifdef BLUETOOTH_RF_SEARCHING |
76 | 76 | ||
77 | #pragma comment(lib, "irprops.lib") | 77 | #pragma comment(lib, "irprops.lib") |
78 | #pragma comment(lib, "ws2_32.lib") | 78 | #pragma comment(lib, "ws2_32.lib") |
79 | 79 | ||
80 | static GSM_Error bluetooth_checkdevice(GSM_StateMachine *s, char *address, WSAPROTOCOL_INFO *protocolInfo) | 80 | static GSM_Error bluetooth_checkdevice(GSM_StateMachine *s, char *address, WSAPROTOCOL_INFO *protocolInfo) |
81 | { | 81 | { |
82 | GSM_Device_BlueToothData *d = &s->Device.Data.BlueTooth; | 82 | GSM_Device_BlueToothData *d = &s->Device.Data.BlueTooth; |
83 | WSAQUERYSET querySet; | 83 | WSAQUERYSET querySet; |
84 | DWORD flags; | 84 | DWORD flags; |
85 | GUID protocol; | 85 | GUID protocol; |
86 | int i, result; | 86 | int i, result; |
87 | BYTE buffer[2000]; | 87 | BYTE buffer[2000]; |
88 | char addressAsString[1000]; | 88 | char addressAsString[1000]; |
89 | DWORD bufferLength, addressSize; | 89 | DWORD bufferLength, addressSize; |
90 | WSAQUERYSET *pResults = (WSAQUERYSET*)&buffer; | 90 | WSAQUERYSET *pResults = (WSAQUERYSET*)&buffer; |
91 | HANDLE handle; | 91 | Qt::HANDLE handle; |
92 | GSM_Error error; | 92 | GSM_Error error; |
93 | 93 | ||
94 | memset(&querySet, 0, sizeof(querySet)); | 94 | memset(&querySet, 0, sizeof(querySet)); |
95 | querySet.dwSize = sizeof(querySet); | 95 | querySet.dwSize = sizeof(querySet); |
96 | protocol = L2CAP_PROTOCOL_UUID; | 96 | protocol = L2CAP_PROTOCOL_UUID; |
97 | querySet.lpServiceClassId = &protocol; | 97 | querySet.lpServiceClassId = &protocol; |
98 | querySet.dwNameSpace = NS_BTH; | 98 | querySet.dwNameSpace = NS_BTH; |
99 | querySet.lpszContext = address; | 99 | querySet.lpszContext = address; |
100 | 100 | ||
101 | flags = LUP_FLUSHCACHE | LUP_RETURN_NAME | | 101 | flags = LUP_FLUSHCACHE | LUP_RETURN_NAME | |
102 | LUP_RETURN_TYPE | LUP_RETURN_ADDR | | 102 | LUP_RETURN_TYPE | LUP_RETURN_ADDR | |
103 | LUP_RETURN_BLOB | LUP_RETURN_COMMENT; | 103 | LUP_RETURN_BLOB | LUP_RETURN_COMMENT; |
104 | 104 | ||
105 | result = WSALookupServiceBegin(&querySet, flags, &handle); | 105 | result = WSALookupServiceBegin(&querySet, flags, &handle); |
106 | if (result != 0) return ERR_UNKNOWN; | 106 | if (result != 0) return ERR_UNKNOWN; |
107 | 107 | ||
108 | bufferLength = sizeof(buffer); | 108 | bufferLength = sizeof(buffer); |
109 | while (1) { | 109 | while (1) { |
110 | result = WSALookupServiceNext(handle, flags, &bufferLength, pResults); | 110 | result = WSALookupServiceNext(handle, flags, &bufferLength, pResults); |
111 | if (result != 0) break; | 111 | if (result != 0) break; |
112 | addressSize = sizeof(addressAsString); | 112 | addressSize = sizeof(addressAsString); |
113 | addressAsString[0] = 0; | 113 | addressAsString[0] = 0; |
114 | if (WSAAddressToString(pResults->lpcsaBuffer->RemoteAddr.lpSockaddr, | 114 | if (WSAAddressToString(pResults->lpcsaBuffer->RemoteAddr.lpSockaddr, |
115 | pResults->lpcsaBuffer->RemoteAddr.iSockaddrLength, protocolInfo, | 115 | pResults->lpcsaBuffer->RemoteAddr.iSockaddrLength, protocolInfo, |
116 | addressAsString,&addressSize)==0) { | 116 | addressAsString,&addressSize)==0) { |
117 | smprintf(s, "%s - ", addressAsString); | 117 | smprintf(s, "%s - ", addressAsString); |
118 | } | 118 | } |
119 | smprintf(s, "\"%s\"\n", pResults->lpszServiceInstanceName); | 119 | smprintf(s, "\"%s\"\n", pResults->lpszServiceInstanceName); |
120 | if (addressAsString[0] != 0) { | 120 | if (addressAsString[0] != 0) { |
121 | for (i=strlen(addressAsString)-1;i>0;i--) { | 121 | for (i=strlen(addressAsString)-1;i>0;i--) { |
122 | if (addressAsString[i] == ':') break; | 122 | if (addressAsString[i] == ':') break; |
123 | } | 123 | } |
124 | if (bluetooth_checkservicename(s, pResults->lpszServiceInstanceName) == ERR_NONE) { | 124 | if (bluetooth_checkservicename(s, pResults->lpszServiceInstanceName) == ERR_NONE) { |
125 | error = bluetooth_connect(s,atoi(addressAsString+i+1),address+1); | 125 | error = bluetooth_connect(s,atoi(addressAsString+i+1),address+1); |
126 | result = WSALookupServiceEnd(handle); | 126 | result = WSALookupServiceEnd(handle); |
127 | return error; | 127 | return error; |
128 | } | 128 | } |
129 | } | 129 | } |
130 | } | 130 | } |
131 | result = WSALookupServiceEnd(handle); | 131 | result = WSALookupServiceEnd(handle); |
132 | return ERR_NOTSUPPORTED; | 132 | return ERR_NOTSUPPORTED; |
133 | } | 133 | } |
134 | 134 | ||
135 | GSM_Error bluetooth_findchannel(GSM_StateMachine *s) | 135 | GSM_Error bluetooth_findchannel(GSM_StateMachine *s) |
136 | { | 136 | { |
137 | GSM_Device_BlueToothData *d = &s->Device.Data.BlueTooth; | 137 | GSM_Device_BlueToothData *d = &s->Device.Data.BlueTooth; |
138 | WSADATA wsaData; | 138 | WSADATA wsaData; |
139 | int i, protocolInfoSize, result; | 139 | int i, protocolInfoSize, result; |
140 | WSAPROTOCOL_INFO protocolInfo; | 140 | WSAPROTOCOL_INFO protocolInfo; |
141 | HANDLE handle; | 141 | Qt::HANDLE handle; |
142 | DWORD flags; | 142 | DWORD flags; |
143 | WSAQUERYSET querySet; | 143 | WSAQUERYSET querySet; |
144 | BYTE buffer[2000]; | 144 | BYTE buffer[2000]; |
145 | char addressAsString[1000]; | 145 | char addressAsString[1000]; |
146 | DWORD bufferLength, addressSize; | 146 | DWORD bufferLength, addressSize; |
147 | WSAQUERYSET *pResults = (WSAQUERYSET*)&buffer; | 147 | WSAQUERYSET *pResults = (WSAQUERYSET*)&buffer; |
148 | GSM_Error error; | 148 | GSM_Error error; |
149 | 149 | ||
150 | if (WSAStartup(MAKEWORD(2,2), &wsaData)!=0x00) return ERR_DEVICENODRIVER; | 150 | if (WSAStartup(MAKEWORD(2,2), &wsaData)!=0x00) return ERR_DEVICENODRIVER; |
151 | 151 | ||
152 | d->hPhone = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); | 152 | d->hPhone = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); |
153 | if (d->hPhone == INVALID_SOCKET) { | 153 | if (d->hPhone == INVALID_SOCKET) { |
154 | i = GetLastError(); | 154 | i = GetLastError(); |
155 | GSM_OSErrorInfo(s, "Socket in bluetooth_open"); | 155 | GSM_OSErrorInfo(s, "Socket in bluetooth_open"); |
156 | if (i == 10041) return ERR_DEVICENODRIVER;//unknown socket type | 156 | if (i == 10041) return ERR_DEVICENODRIVER;//unknown socket type |
157 | return ERR_UNKNOWN; | 157 | return ERR_UNKNOWN; |
158 | } | 158 | } |
159 | 159 | ||
160 | protocolInfoSize = sizeof(protocolInfo); | 160 | protocolInfoSize = sizeof(protocolInfo); |
161 | if (getsockopt(d->hPhone, SOL_SOCKET, SO_PROTOCOL_INFO, | 161 | if (getsockopt(d->hPhone, SOL_SOCKET, SO_PROTOCOL_INFO, |
162 | (char*)&protocolInfo, &protocolInfoSize) != 0) | 162 | (char*)&protocolInfo, &protocolInfoSize) != 0) |
163 | { | 163 | { |
164 | close(d->hPhone); | 164 | close(d->hPhone); |
165 | return ERR_UNKNOWN; | 165 | return ERR_UNKNOWN; |
166 | } | 166 | } |
167 | close(d->hPhone); | 167 | close(d->hPhone); |
168 | 168 | ||
169 | if (!strcmp(s->CurrentConfig->Device,"com2:")) { | 169 | if (!strcmp(s->CurrentConfig->Device,"com2:")) { |
170 | bufferLength = sizeof(buffer); | 170 | bufferLength = sizeof(buffer); |
171 | 171 | ||
172 | flags = LUP_RETURN_NAME | LUP_CONTAINERS | | 172 | flags = LUP_RETURN_NAME | LUP_CONTAINERS | |
173 | LUP_RETURN_ADDR | LUP_FLUSHCACHE | | 173 | LUP_RETURN_ADDR | LUP_FLUSHCACHE | |
174 | LUP_RETURN_TYPE | LUP_RETURN_BLOB | LUP_RES_SERVICE; | 174 | LUP_RETURN_TYPE | LUP_RETURN_BLOB | LUP_RES_SERVICE; |
175 | 175 | ||
176 | memset(&querySet, 0, sizeof(querySet)); | 176 | memset(&querySet, 0, sizeof(querySet)); |
177 | querySet.dwSize = sizeof(querySet); | 177 | querySet.dwSize = sizeof(querySet); |
178 | querySet.dwNameSpace = NS_BTH; | 178 | querySet.dwNameSpace = NS_BTH; |
179 | 179 | ||
180 | result = WSALookupServiceBegin(&querySet, flags, &handle); | 180 | result = WSALookupServiceBegin(&querySet, flags, &handle); |
181 | if (result != 0) return ERR_UNKNOWN; | 181 | if (result != 0) return ERR_UNKNOWN; |
182 | 182 | ||
183 | while (1) { | 183 | while (1) { |
184 | result = WSALookupServiceNext(handle, flags, &bufferLength, pResults); | 184 | result = WSALookupServiceNext(handle, flags, &bufferLength, pResults); |
185 | if (result != 0) break; | 185 | if (result != 0) break; |
186 | 186 | ||
187 | smprintf(s, "\"%s\"", pResults->lpszServiceInstanceName); | 187 | smprintf(s, "\"%s\"", pResults->lpszServiceInstanceName); |
188 | 188 | ||
189 | addressSize = sizeof(addressAsString); | 189 | addressSize = sizeof(addressAsString); |
190 | addressAsString[0] = 0; | 190 | addressAsString[0] = 0; |
191 | if (WSAAddressToString(pResults->lpcsaBuffer->RemoteAddr.lpSockaddr, | 191 | if (WSAAddressToString(pResults->lpcsaBuffer->RemoteAddr.lpSockaddr, |
192 | pResults->lpcsaBuffer->RemoteAddr.iSockaddrLength, &protocolInfo, | 192 | pResults->lpcsaBuffer->RemoteAddr.iSockaddrLength, &protocolInfo, |
193 | addressAsString,&addressSize)==0) { | 193 | addressAsString,&addressSize)==0) { |
194 | smprintf(s, " - %s\n", addressAsString); | 194 | smprintf(s, " - %s\n", addressAsString); |
195 | error = bluetooth_checkdevice(s, addressAsString,&protocolInfo); | 195 | error = bluetooth_checkdevice(s, addressAsString,&protocolInfo); |
196 | if (error == ERR_NONE) { | 196 | if (error == ERR_NONE) { |
197 | result = WSALookupServiceEnd(handle); | 197 | result = WSALookupServiceEnd(handle); |
198 | return error; | 198 | return error; |
199 | } | 199 | } |
200 | } else smprintf(s, "\n"); | 200 | } else smprintf(s, "\n"); |
201 | } | 201 | } |
202 | 202 | ||
203 | result = WSALookupServiceEnd(handle); | 203 | result = WSALookupServiceEnd(handle); |
204 | return ERR_NOTSUPPORTED; | 204 | return ERR_NOTSUPPORTED; |
205 | } else { | 205 | } else { |
206 | return bluetooth_checkdevice(s, s->CurrentConfig->Device,&protocolInfo); | 206 | return bluetooth_checkdevice(s, s->CurrentConfig->Device,&protocolInfo); |
207 | } | 207 | } |
208 | } | 208 | } |
209 | 209 | ||
210 | #endif | 210 | #endif |
211 | #endif | 211 | #endif |
212 | #endif | 212 | #endif |
213 | 213 | ||
214 | /* How should editor hadle tabs in this file? Add editor commands here. | 214 | /* How should editor hadle tabs in this file? Add editor commands here. |
215 | * vim: noexpandtab sw=8 ts=8 sts=8: | 215 | * vim: noexpandtab sw=8 ts=8 sts=8: |
216 | */ | 216 | */ |
diff --git a/gammu/emb/common/device/bluetoth/blue_w32.h b/gammu/emb/common/device/bluetoth/blue_w32.h index e457c92..409f4b1 100644 --- a/gammu/emb/common/device/bluetoth/blue_w32.h +++ b/gammu/emb/common/device/bluetoth/blue_w32.h | |||
@@ -26,163 +26,163 @@ typedef ULONGLONG BTH_ADDR, *PBTH_ADDR; | |||
26 | 26 | ||
27 | typedef struct _SOCKADDR_BTH { | 27 | typedef struct _SOCKADDR_BTH { |
28 | USHORT addressFamily; // Always AF_BTH | 28 | USHORT addressFamily; // Always AF_BTH |
29 | BTH_ADDR btAddr; // Bluetooth device address | 29 | BTH_ADDR btAddr; // Bluetooth device address |
30 | GUID serviceClassId; // [OPTIONAL] system will query SDP for port | 30 | GUID serviceClassId; // [OPTIONAL] system will query SDP for port |
31 | ULONG port; // RFCOMM channel or L2CAP PSM | 31 | ULONG port; // RFCOMM channel or L2CAP PSM |
32 | } SOCKADDR_BTH, *PSOCKADDR_BTH; | 32 | } SOCKADDR_BTH, *PSOCKADDR_BTH; |
33 | 33 | ||
34 | #define BTHPROTO_RFCOMM 0x0003 | 34 | #define BTHPROTO_RFCOMM 0x0003 |
35 | 35 | ||
36 | #ifdef BLUETOOTH_RF_SEARCHING | 36 | #ifdef BLUETOOTH_RF_SEARCHING |
37 | 37 | ||
38 | typedef struct _SOCKET_ADDRESS { | 38 | typedef struct _SOCKET_ADDRESS { |
39 | LPSOCKADDR lpSockaddr ; | 39 | LPSOCKADDR lpSockaddr ; |
40 | INT iSockaddrLength ; | 40 | INT iSockaddrLength ; |
41 | } SOCKET_ADDRESS, *PSOCKET_ADDRESS, FAR * LPSOCKET_ADDRESS ; | 41 | } SOCKET_ADDRESS, *PSOCKET_ADDRESS, FAR * LPSOCKET_ADDRESS ; |
42 | 42 | ||
43 | typedef struct _CSADDR_INFO { | 43 | typedef struct _CSADDR_INFO { |
44 | SOCKET_ADDRESS LocalAddr ; | 44 | SOCKET_ADDRESS LocalAddr ; |
45 | SOCKET_ADDRESS RemoteAddr ; | 45 | SOCKET_ADDRESS RemoteAddr ; |
46 | INT iSocketType ; | 46 | INT iSocketType ; |
47 | INT iProtocol ; | 47 | INT iProtocol ; |
48 | } CSADDR_INFO, *PCSADDR_INFO, FAR * LPCSADDR_INFO ; | 48 | } CSADDR_INFO, *PCSADDR_INFO, FAR * LPCSADDR_INFO ; |
49 | 49 | ||
50 | typedef struct _AFPROTOCOLS { | 50 | typedef struct _AFPROTOCOLS { |
51 | INT iAddressFamily; | 51 | INT iAddressFamily; |
52 | INT iProtocol; | 52 | INT iProtocol; |
53 | } AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS; | 53 | } AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS; |
54 | 54 | ||
55 | typedef enum _WSAEcomparator | 55 | typedef enum _WSAEcomparator |
56 | { | 56 | { |
57 | COMP_EQUAL = 0, | 57 | COMP_EQUAL = 0, |
58 | COMP_NOTLESS | 58 | COMP_NOTLESS |
59 | } WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR; | 59 | } WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR; |
60 | 60 | ||
61 | typedef struct _WSAVersion | 61 | typedef struct _WSAVersion |
62 | { | 62 | { |
63 | DWORD dwVersion; | 63 | DWORD dwVersion; |
64 | WSAECOMPARATOR ecHow; | 64 | WSAECOMPARATOR ecHow; |
65 | }WSAVERSION, *PWSAVERSION, *LPWSAVERSION; | 65 | }WSAVERSION, *PWSAVERSION, *LPWSAVERSION; |
66 | 66 | ||
67 | typedef struct _WSAQuerySetA | 67 | typedef struct _WSAQuerySetA |
68 | { | 68 | { |
69 | DWORD dwSize; | 69 | DWORD dwSize; |
70 | LPSTR lpszServiceInstanceName; | 70 | LPSTR lpszServiceInstanceName; |
71 | LPGUID lpServiceClassId; | 71 | LPGUID lpServiceClassId; |
72 | LPWSAVERSION lpVersion; | 72 | LPWSAVERSION lpVersion; |
73 | LPSTR lpszComment; | 73 | LPSTR lpszComment; |
74 | DWORD dwNameSpace; | 74 | DWORD dwNameSpace; |
75 | LPGUID lpNSProviderId; | 75 | LPGUID lpNSProviderId; |
76 | LPSTR lpszContext; | 76 | LPSTR lpszContext; |
77 | DWORD dwNumberOfProtocols; | 77 | DWORD dwNumberOfProtocols; |
78 | LPAFPROTOCOLS lpafpProtocols; | 78 | LPAFPROTOCOLS lpafpProtocols; |
79 | LPSTR lpszQueryString; | 79 | LPSTR lpszQueryString; |
80 | DWORD dwNumberOfCsAddrs; | 80 | DWORD dwNumberOfCsAddrs; |
81 | LPCSADDR_INFO lpcsaBuffer; | 81 | LPCSADDR_INFO lpcsaBuffer; |
82 | DWORD dwOutputFlags; | 82 | DWORD dwOutputFlags; |
83 | LPBLOB lpBlob; | 83 | LPBLOB lpBlob; |
84 | } WSAQUERYSET, WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA; | 84 | } WSAQUERYSET, WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA; |
85 | 85 | ||
86 | DEFINE_GUID(L2CAP_PROTOCOL_UUID, 0x00000100, 0x0000, 0x1000, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB); | 86 | DEFINE_GUID(L2CAP_PROTOCOL_UUID, 0x00000100, 0x0000, 0x1000, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB); |
87 | 87 | ||
88 | #ifndef NS_BTH | 88 | #ifndef NS_BTH |
89 | # define NS_BTH 16 | 89 | # define NS_BTH 16 |
90 | #endif | 90 | #endif |
91 | 91 | ||
92 | #define LUP_CONTAINERS 0x0002 | 92 | #define LUP_CONTAINERS 0x0002 |
93 | #define LUP_RETURN_NAME 0x0010 | 93 | #define LUP_RETURN_NAME 0x0010 |
94 | #define LUP_RETURN_TYPE 0x0020 | 94 | #define LUP_RETURN_TYPE 0x0020 |
95 | #define LUP_RETURN_COMMENT 0x0080 | 95 | #define LUP_RETURN_COMMENT 0x0080 |
96 | #define LUP_RETURN_ADDR 0x0100 | 96 | #define LUP_RETURN_ADDR 0x0100 |
97 | #define LUP_RETURN_BLOB 0x0200 | 97 | #define LUP_RETURN_BLOB 0x0200 |
98 | #define LUP_FLUSHCACHE 0x1000 | 98 | #define LUP_FLUSHCACHE 0x1000 |
99 | #define LUP_RES_SERVICE 0x8000 | 99 | #define LUP_RES_SERVICE 0x8000 |
100 | 100 | ||
101 | #define WSAAPI FAR PASCAL | 101 | #define WSAAPI FAR PASCAL |
102 | 102 | ||
103 | #ifndef WINSOCK_API_LINKAGE | 103 | #ifndef WINSOCK_API_LINKAGE |
104 | #ifdef DECLSPEC_IMPORT | 104 | #ifdef DECLSPEC_IMPORT |
105 | #define WINSOCK_API_LINKAGE DECLSPEC_IMPORT | 105 | #define WINSOCK_API_LINKAGE DECLSPEC_IMPORT |
106 | #else | 106 | #else |
107 | #define WINSOCK_API_LINKAGE | 107 | #define WINSOCK_API_LINKAGE |
108 | #endif | 108 | #endif |
109 | #endif | 109 | #endif |
110 | 110 | ||
111 | WINSOCK_API_LINKAGE INT WSAAPI | 111 | WINSOCK_API_LINKAGE INT WSAAPI |
112 | WSALookupServiceBeginA( | 112 | WSALookupServiceBeginA( |
113 | IN LPWSAQUERYSETA lpqsRestrictions, | 113 | IN LPWSAQUERYSETA lpqsRestrictions, |
114 | IN DWORD dwControlFlags, | 114 | IN DWORD dwControlFlags, |
115 | OUT LPHANDLE lphLookup | 115 | OUT LPHANDLE lphLookup |
116 | ); | 116 | ); |
117 | 117 | ||
118 | #define WSALookupServiceBegin WSALookupServiceBeginA | 118 | #define WSALookupServiceBegin WSALookupServiceBeginA |
119 | 119 | ||
120 | WINSOCK_API_LINKAGE INT WSAAPI | 120 | WINSOCK_API_LINKAGE INT WSAAPI |
121 | WSALookupServiceNextA( | 121 | WSALookupServiceNextA( |
122 | IN HANDLE hLookup, | 122 | IN Qt::HANDLE hLookup, |
123 | IN DWORD dwControlFlags, | 123 | IN DWORD dwControlFlags, |
124 | IN OUT LPDWORD lpdwBufferLength, | 124 | IN OUT LPDWORD lpdwBufferLength, |
125 | OUT LPWSAQUERYSETA lpqsResults | 125 | OUT LPWSAQUERYSETA lpqsResults |
126 | ); | 126 | ); |
127 | 127 | ||
128 | #define WSALookupServiceNext WSALookupServiceNextA | 128 | #define WSALookupServiceNext WSALookupServiceNextA |
129 | 129 | ||
130 | WINSOCK_API_LINKAGE INT WSAAPI WSALookupServiceEnd(IN HANDLE hLookup); | 130 | WINSOCK_API_LINKAGE INT WSAAPI WSALookupServiceEnd(IN Qt::HANDLE hLookup); |
131 | 131 | ||
132 | #define MAX_PROTOCOL_CHAIN 7 | 132 | #define MAX_PROTOCOL_CHAIN 7 |
133 | 133 | ||
134 | typedef struct _WSAPROTOCOLCHAIN { | 134 | typedef struct _WSAPROTOCOLCHAIN { |
135 | int ChainLen; /* the length of the chain, */ | 135 | int ChainLen; /* the length of the chain, */ |
136 | /* length = 0 means layered protocol, */ | 136 | /* length = 0 means layered protocol, */ |
137 | /* length = 1 means base protocol, */ | 137 | /* length = 1 means base protocol, */ |
138 | /* length > 1 means protocol chain */ | 138 | /* length > 1 means protocol chain */ |
139 | DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; /* a list of dwCatalogEntryIds */ | 139 | DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; /* a list of dwCatalogEntryIds */ |
140 | } WSAPROTOCOLCHAIN, FAR * LPWSAPROTOCOLCHAIN; | 140 | } WSAPROTOCOLCHAIN, FAR * LPWSAPROTOCOLCHAIN; |
141 | 141 | ||
142 | #define WSAPROTOCOL_LEN 255 | 142 | #define WSAPROTOCOL_LEN 255 |
143 | 143 | ||
144 | typedef struct _WSAPROTOCOL_INFOA { | 144 | typedef struct _WSAPROTOCOL_INFOA { |
145 | DWORD dwServiceFlags1; | 145 | DWORD dwServiceFlags1; |
146 | DWORD dwServiceFlags2; | 146 | DWORD dwServiceFlags2; |
147 | DWORD dwServiceFlags3; | 147 | DWORD dwServiceFlags3; |
148 | DWORD dwServiceFlags4; | 148 | DWORD dwServiceFlags4; |
149 | DWORD dwProviderFlags; | 149 | DWORD dwProviderFlags; |
150 | GUID ProviderId; | 150 | GUID ProviderId; |
151 | DWORD dwCatalogEntryId; | 151 | DWORD dwCatalogEntryId; |
152 | WSAPROTOCOLCHAIN ProtocolChain; | 152 | WSAPROTOCOLCHAIN ProtocolChain; |
153 | int iVersion; | 153 | int iVersion; |
154 | int iAddressFamily; | 154 | int iAddressFamily; |
155 | int iMaxSockAddr; | 155 | int iMaxSockAddr; |
156 | int iMinSockAddr; | 156 | int iMinSockAddr; |
157 | int iSocketType; | 157 | int iSocketType; |
158 | int iProtocol; | 158 | int iProtocol; |
159 | int iProtocolMaxOffset; | 159 | int iProtocolMaxOffset; |
160 | int iNetworkByteOrder; | 160 | int iNetworkByteOrder; |
161 | int iSecurityScheme; | 161 | int iSecurityScheme; |
162 | DWORD dwMessageSize; | 162 | DWORD dwMessageSize; |
163 | DWORD dwProviderReserved; | 163 | DWORD dwProviderReserved; |
164 | CHAR szProtocol[WSAPROTOCOL_LEN+1]; | 164 | CHAR szProtocol[WSAPROTOCOL_LEN+1]; |
165 | } WSAPROTOCOL_INFOA, FAR * LPWSAPROTOCOL_INFOA; | 165 | } WSAPROTOCOL_INFOA, FAR * LPWSAPROTOCOL_INFOA; |
166 | 166 | ||
167 | typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO; | 167 | typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO; |
168 | 168 | ||
169 | #define SO_PROTOCOL_INFOA 0x2004 /* WSAPROTOCOL_INFOA structure */ | 169 | #define SO_PROTOCOL_INFOA 0x2004 /* WSAPROTOCOL_INFOA structure */ |
170 | #define SO_PROTOCOL_INFO SO_PROTOCOL_INFOA | 170 | #define SO_PROTOCOL_INFO SO_PROTOCOL_INFOA |
171 | 171 | ||
172 | WINSOCK_API_LINKAGE INT WSAAPI | 172 | WINSOCK_API_LINKAGE INT WSAAPI |
173 | WSAAddressToStringA( | 173 | WSAAddressToStringA( |
174 | IN LPSOCKADDR lpsaAddress, | 174 | IN LPSOCKADDR lpsaAddress, |
175 | IN DWORD dwAddressLength, | 175 | IN DWORD dwAddressLength, |
176 | IN LPWSAPROTOCOL_INFOA lpProtocolInfo, | 176 | IN LPWSAPROTOCOL_INFOA lpProtocolInfo, |
177 | IN OUT LPSTR lpszAddressString, | 177 | IN OUT LPSTR lpszAddressString, |
178 | IN OUT LPDWORD lpdwAddressStringLength | 178 | IN OUT LPDWORD lpdwAddressStringLength |
179 | ); | 179 | ); |
180 | 180 | ||
181 | #define WSAAddressToString WSAAddressToStringA | 181 | #define WSAAddressToString WSAAddressToStringA |
182 | 182 | ||
183 | #endif | 183 | #endif |
184 | #endif | 184 | #endif |
185 | 185 | ||
186 | /* How should editor hadle tabs in this file? Add editor commands here. | 186 | /* How should editor hadle tabs in this file? Add editor commands here. |
187 | * vim: noexpandtab sw=8 ts=8 sts=8: | 187 | * vim: noexpandtab sw=8 ts=8 sts=8: |
188 | */ | 188 | */ |
diff --git a/gammu/emb/common/device/serial/ser_w32.h b/gammu/emb/common/device/serial/ser_w32.h index d226f32..d1aa37a 100644 --- a/gammu/emb/common/device/serial/ser_w32.h +++ b/gammu/emb/common/device/serial/ser_w32.h | |||
@@ -1,19 +1,19 @@ | |||
1 | 1 | ||
2 | #ifdef WIN32 | 2 | #ifdef WIN32 |
3 | #ifndef winserial_h | 3 | #ifndef winserial_h |
4 | #define winserial_h | 4 | #define winserial_h |
5 | 5 | ||
6 | #include <windows.h> | 6 | #include <windows.h> |
7 | 7 | ||
8 | typedef struct { | 8 | typedef struct { |
9 | HANDLE hPhone; | 9 | Qt::HANDLE hPhone; |
10 | DCB old_settings; | 10 | DCB old_settings; |
11 | OVERLAPPED osWrite,osRead; | 11 | OVERLAPPED osWrite,osRead; |
12 | } GSM_Device_SerialData; | 12 | } GSM_Device_SerialData; |
13 | 13 | ||
14 | #endif | 14 | #endif |
15 | #endif | 15 | #endif |
16 | 16 | ||
17 | /* How should editor hadle tabs in this file? Add editor commands here. | 17 | /* How should editor hadle tabs in this file? Add editor commands here. |
18 | * vim: noexpandtab sw=8 ts=8 sts=8: | 18 | * vim: noexpandtab sw=8 ts=8 sts=8: |
19 | */ | 19 | */ |