Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
6ad95180
Commit
6ad95180
authored
Sep 26, 2009
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gdi32: Make wing.dll into a stand-alone 16-bit module.
parent
7582b13d
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
74 additions
and
57 deletions
+74
-57
.gitignore
.gitignore
+0
-1
configure
configure
+9
-0
configure.ac
configure.ac
+1
-0
Makefile.in
dlls/Makefile.in
+1
-2
Makefile.in
dlls/gdi32/Makefile.in
+2
-5
Makefile.in
dlls/wing.dll16/Makefile.in
+13
-0
wing.c
dlls/wing.dll16/wing.c
+48
-49
wing.dll16.spec
dlls/wing.dll16/wing.dll16.spec
+0
-0
No files found.
.gitignore
View file @
6ad95180
...
@@ -124,7 +124,6 @@ dlls/toolhelp.dll16
...
@@ -124,7 +124,6 @@ dlls/toolhelp.dll16
dlls/user.exe16
dlls/user.exe16
dlls/ver.dll16
dlls/ver.dll16
dlls/wineps16.drv16
dlls/wineps16.drv16
dlls/wing.dll16
dlls/winsock.dll16
dlls/winsock.dll16
dlls/wprocs.dll16
dlls/wprocs.dll16
include/activaut.h
include/activaut.h
...
...
configure
View file @
6ad95180
...
@@ -17082,6 +17082,14 @@ dlls/winex11.drv/Makefile: dlls/winex11.drv/Makefile.in dlls/Makedll.rules"
...
@@ -17082,6 +17082,14 @@ dlls/winex11.drv/Makefile: dlls/winex11.drv/Makefile.in dlls/Makedll.rules"
ac_config_files
=
"
$ac_config_files
dlls/winex11.drv/Makefile"
ac_config_files
=
"
$ac_config_files
dlls/winex11.drv/Makefile"
ALL_MAKEFILES
=
"
$ALL_MAKEFILES
\\
ALL_MAKEFILES
=
"
$ALL_MAKEFILES
\\
dlls/wing.dll16/Makefile"
test
"x
$enable_win16
"
!=
xno
&&
ALL_DLL_DIRS
=
"
$ALL_DLL_DIRS
\\
wing.dll16"
ALL_MAKEFILE_DEPENDS
=
"
$ALL_MAKEFILE_DEPENDS
dlls/wing.dll16/Makefile: dlls/wing.dll16/Makefile.in dlls/Makedll.rules"
ac_config_files
=
"
$ac_config_files
dlls/wing.dll16/Makefile"
ALL_MAKEFILES
=
"
$ALL_MAKEFILES
\\
dlls/wing32/Makefile"
dlls/wing32/Makefile"
test
"x
$enable_wing32
"
!=
xno
&&
ALL_DLL_DIRS
=
"
$ALL_DLL_DIRS
\\
test
"x
$enable_wing32
"
!=
xno
&&
ALL_DLL_DIRS
=
"
$ALL_DLL_DIRS
\\
wing32"
wing32"
...
@@ -19082,6 +19090,7 @@ do
...
@@ -19082,6 +19090,7 @@ do
"dlls/wineps.drv/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/wineps.drv/Makefile" ;;
"dlls/wineps.drv/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/wineps.drv/Makefile" ;;
"dlls/winequartz.drv/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/winequartz.drv/Makefile" ;;
"dlls/winequartz.drv/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/winequartz.drv/Makefile" ;;
"dlls/winex11.drv/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/winex11.drv/Makefile" ;;
"dlls/winex11.drv/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/winex11.drv/Makefile" ;;
"dlls/wing.dll16/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/wing.dll16/Makefile" ;;
"dlls/wing32/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/wing32/Makefile" ;;
"dlls/wing32/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/wing32/Makefile" ;;
"dlls/winhttp/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/winhttp/Makefile" ;;
"dlls/winhttp/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/winhttp/Makefile" ;;
"dlls/winhttp/tests/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/winhttp/tests/Makefile" ;;
"dlls/winhttp/tests/Makefile") CONFIG_FILES="
$CONFIG_FILES
dlls/winhttp/tests/Makefile" ;;
...
...
configure.ac
View file @
6ad95180
...
@@ -2496,6 +2496,7 @@ WINE_CONFIG_MAKEFILE([dlls/wineoss.drv/Makefile],[dlls/Makedll.rules],[dlls],[AL
...
@@ -2496,6 +2496,7 @@ WINE_CONFIG_MAKEFILE([dlls/wineoss.drv/Makefile],[dlls/Makedll.rules],[dlls],[AL
WINE_CONFIG_MAKEFILE([dlls/wineps.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
WINE_CONFIG_MAKEFILE([dlls/wineps.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
WINE_CONFIG_MAKEFILE([dlls/winequartz.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
WINE_CONFIG_MAKEFILE([dlls/winequartz.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
WINE_CONFIG_MAKEFILE([dlls/winex11.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
WINE_CONFIG_MAKEFILE([dlls/winex11.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
WINE_CONFIG_MAKEFILE([dlls/wing.dll16/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS],[enable_win16])
WINE_CONFIG_MAKEFILE([dlls/wing32/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
WINE_CONFIG_MAKEFILE([dlls/wing32/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
WINE_CONFIG_MAKEFILE([dlls/winhttp/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
WINE_CONFIG_MAKEFILE([dlls/winhttp/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
WINE_CONFIG_MAKEFILE([dlls/winhttp/tests/Makefile],[dlls/Maketest.rules],[dlls],[ALL_TEST_DIRS],[enable_tests])
WINE_CONFIG_MAKEFILE([dlls/winhttp/tests/Makefile],[dlls/Maketest.rules],[dlls],[ALL_TEST_DIRS],[enable_tests])
...
...
dlls/Makefile.in
View file @
6ad95180
...
@@ -28,7 +28,6 @@ WIN16_FILES = \
...
@@ -28,7 +28,6 @@ WIN16_FILES = \
user.exe16
\
user.exe16
\
ver.dll16
\
ver.dll16
\
wineps16.drv16
\
wineps16.drv16
\
wing.dll16
\
winsock.dll16
\
winsock.dll16
\
wprocs.dll16
wprocs.dll16
...
@@ -43,7 +42,7 @@ all: $(BUILDSUBDIRS) @WIN16_FILES@
...
@@ -43,7 +42,7 @@ all: $(BUILDSUBDIRS) @WIN16_FILES@
commdlg.dll16
:
commdlg.dll16
:
echo
"comdlg32.dll"
>
$@
echo
"comdlg32.dll"
>
$@
gdi.exe16
wing.dll16
:
gdi.exe16
:
echo
"gdi32.dll"
>
$@
echo
"gdi32.dll"
>
$@
krnl386.exe16 system.drv16 toolhelp.dll16
:
krnl386.exe16 system.drv16 toolhelp.dll16
:
...
...
dlls/gdi32/Makefile.in
View file @
6ad95180
...
@@ -9,9 +9,7 @@ IMPORTS = advapi32 kernel32 ntdll
...
@@ -9,9 +9,7 @@ IMPORTS = advapi32 kernel32 ntdll
EXTRAINCL
=
@FREETYPEINCL@ @FONTCONFIGINCL@
EXTRAINCL
=
@FREETYPEINCL@ @FONTCONFIGINCL@
EXTRALIBS
=
@CARBONLIB@
EXTRALIBS
=
@CARBONLIB@
SPEC_SRCS16
=
\
SPEC_SRCS16
=
gdi.exe.spec
gdi.exe.spec
\
wing.spec
C_SRCS
=
\
C_SRCS
=
\
bidi.c
\
bidi.c
\
...
@@ -56,8 +54,7 @@ C_SRCS16 = \
...
@@ -56,8 +54,7 @@ C_SRCS16 = \
bidi16.c
\
bidi16.c
\
env.c
\
env.c
\
gdi16.c
\
gdi16.c
\
metafile16.c
\
metafile16.c
wing.c
RC_SRCS
=
version.rc
RC_SRCS
=
version.rc
RC_SRCS16
=
version16.rc
RC_SRCS16
=
version16.rc
...
...
dlls/wing.dll16/Makefile.in
0 → 100644
View file @
6ad95180
TOPSRCDIR
=
@top_srcdir@
TOPOBJDIR
=
../..
SRCDIR
=
@srcdir@
VPATH
=
@srcdir@
MODULE
=
wing.dll16
IMPORTS
=
gdi32 kernel32
EXTRADLLFLAGS
=
-Wb
,--subsystem,win16
C_SRCS
=
wing.c
@MAKE_DLL_RULES@
@DEPENDENCIES@
# everything below this line is overwritten by make depend
dlls/
gdi32
/wing.c
→
dlls/
wing.dll16
/wing.c
View file @
6ad95180
...
@@ -26,7 +26,6 @@
...
@@ -26,7 +26,6 @@
#include "winbase.h"
#include "winbase.h"
#include "wingdi.h"
#include "wingdi.h"
#include "wownt32.h"
#include "wownt32.h"
#include "gdi_private.h"
#include "wine/wingdi16.h"
#include "wine/wingdi16.h"
#include "wine/debug.h"
#include "wine/debug.h"
...
@@ -51,19 +50,6 @@ typedef enum WING_DITHER_TYPE
...
@@ -51,19 +50,6 @@ typedef enum WING_DITHER_TYPE
WING_DISPERSED_4x4
,
WING_DISPERSED_8x8
,
WING_CLUSTERED_4x4
WING_DISPERSED_4x4
,
WING_DISPERSED_8x8
,
WING_CLUSTERED_4x4
}
WING_DITHER_TYPE
;
}
WING_DITHER_TYPE
;
/*
* WinG DIB bitmaps can be selected into DC and then scribbled upon
* by GDI functions. They can also be changed directly. This gives us
* three choices
* - use original WinG 16-bit DLL
* requires working 16-bit driver interface
* - implement DIB graphics driver from scratch
* see wing.zip size
* - use shared pixmaps
* won't work with some videocards and/or videomodes
* 961208 - AK
*/
/***********************************************************************
/***********************************************************************
* WinGCreateDC (WING.1001)
* WinGCreateDC (WING.1001)
*
*
...
@@ -79,7 +65,7 @@ typedef enum WING_DITHER_TYPE
...
@@ -79,7 +65,7 @@ typedef enum WING_DITHER_TYPE
HDC16
WINAPI
WinGCreateDC16
(
void
)
HDC16
WINAPI
WinGCreateDC16
(
void
)
{
{
TRACE
(
"(void)
\n
"
);
TRACE
(
"(void)
\n
"
);
return
CreateCompatibleDC16
(
0
);
return
HDC_16
(
CreateCompatibleDC
(
0
)
);
}
}
/***********************************************************************
/***********************************************************************
...
@@ -130,13 +116,38 @@ BOOL16 WINAPI WinGRecommendDIBFormat16(BITMAPINFO *bmpi)
...
@@ -130,13 +116,38 @@ BOOL16 WINAPI WinGRecommendDIBFormat16(BITMAPINFO *bmpi)
* Success: A handle to the created bitmap.
* Success: A handle to the created bitmap.
* Failure: A NULL handle.
* Failure: A NULL handle.
*/
*/
HBITMAP16
WINAPI
WinGCreateBitmap16
(
HDC16
hdc
,
BITMAPINFO
*
bmpi
,
HBITMAP16
WINAPI
WinGCreateBitmap16
(
HDC16
hdc
,
BITMAPINFO
*
bmpi
,
SEGPTR
*
bits
)
SEGPTR
*
bits
)
{
{
TRACE
(
"(%d,%p,%p)
\n
"
,
hdc
,
bmpi
,
bits
);
LPVOID
bits32
;
TRACE
(
": create %dx%dx%d bitmap
\n
"
,
bmpi
->
bmiHeader
.
biWidth
,
HBITMAP
hbitmap
;
bmpi
->
bmiHeader
.
biHeight
,
bmpi
->
bmiHeader
.
biPlanes
);
return
CreateDIBSection16
(
hdc
,
bmpi
,
0
,
bits
,
0
,
0
);
TRACE
(
"(%d,%p,%p): create %dx%dx%d bitmap
\n
"
,
hdc
,
bmpi
,
bits
,
bmpi
->
bmiHeader
.
biWidth
,
bmpi
->
bmiHeader
.
biHeight
,
bmpi
->
bmiHeader
.
biPlanes
);
hbitmap
=
CreateDIBSection
(
HDC_32
(
hdc
),
bmpi
,
BI_RGB
,
&
bits32
,
0
,
0
);
if
(
hbitmap
)
{
DIBSECTION
dib
;
DWORD
size
;
WORD
count
,
sel
;
int
i
;
GetObjectW
(
hbitmap
,
sizeof
(
dib
),
&
dib
);
size
=
dib
.
dsBm
.
bmHeight
*
dib
.
dsBm
.
bmWidthBytes
;
/* calculate number of sel's needed for size with 64K steps */
count
=
(
size
+
0xffff
)
/
0x10000
;
sel
=
AllocSelectorArray16
(
count
);
for
(
i
=
0
;
i
<
count
;
i
++
)
{
SetSelectorBase
(
sel
+
(
i
<<
__AHSHIFT
),
(
DWORD
)
bits32
+
i
*
0x10000
);
SetSelectorLimit16
(
sel
+
(
i
<<
__AHSHIFT
),
size
-
1
);
/* yep, limit is correct */
size
-=
0x10000
;
}
if
(
bits
)
*
bits
=
MAKESEGPTR
(
sel
,
0
);
}
return
HBITMAP_16
(
hbitmap
);
}
}
/***********************************************************************
/***********************************************************************
...
@@ -144,17 +155,8 @@ HBITMAP16 WINAPI WinGCreateBitmap16(HDC16 hdc, BITMAPINFO *bmpi,
...
@@ -144,17 +155,8 @@ HBITMAP16 WINAPI WinGCreateBitmap16(HDC16 hdc, BITMAPINFO *bmpi,
*/
*/
SEGPTR
WINAPI
WinGGetDIBPointer16
(
HBITMAP16
hWinGBitmap
,
BITMAPINFO
*
bmpi
)
SEGPTR
WINAPI
WinGGetDIBPointer16
(
HBITMAP16
hWinGBitmap
,
BITMAPINFO
*
bmpi
)
{
{
BITMAPOBJ
*
bmp
=
GDI_GetObjPtr
(
HBITMAP_32
(
hWinGBitmap
),
OBJ_BITMAP
);
FIXME
(
"%x, %p: not supported
\n
"
,
hWinGBitmap
,
bmpi
);
SEGPTR
res
=
0
;
return
0
;
TRACE
(
"(%d,%p)
\n
"
,
hWinGBitmap
,
bmpi
);
if
(
!
bmp
)
return
0
;
if
(
bmpi
)
FIXME
(
": Todo - implement setting BITMAPINFO
\n
"
);
res
=
bmp
->
segptr_bits
;
GDI_ReleaseObj
(
HBITMAP_32
(
hWinGBitmap
)
);
return
res
;
}
}
/***********************************************************************
/***********************************************************************
...
@@ -171,11 +173,10 @@ SEGPTR WINAPI WinGGetDIBPointer16(HBITMAP16 hWinGBitmap, BITMAPINFO* bmpi)
...
@@ -171,11 +173,10 @@ SEGPTR WINAPI WinGGetDIBPointer16(HBITMAP16 hWinGBitmap, BITMAPINFO* bmpi)
* RETURNS
* RETURNS
* The number of entries set.
* The number of entries set.
*/
*/
UINT16
WINAPI
WinGSetDIBColorTable16
(
HDC16
hdc
,
UINT16
start
,
UINT16
num
,
UINT16
WINAPI
WinGSetDIBColorTable16
(
HDC16
hdc
,
UINT16
start
,
UINT16
num
,
RGBQUAD
*
colors
)
RGBQUAD
*
colors
)
{
{
TRACE
(
"(%d,%d,%d,%p)
\n
"
,
hdc
,
start
,
num
,
colors
);
TRACE
(
"(%d,%d,%d,%p)
\n
"
,
hdc
,
start
,
num
,
colors
);
return
SetDIBColorTable
16
(
hdc
,
start
,
num
,
colors
);
return
SetDIBColorTable
(
HDC_32
(
hdc
),
start
,
num
,
colors
);
}
}
/***********************************************************************
/***********************************************************************
...
@@ -192,11 +193,10 @@ UINT16 WINAPI WinGSetDIBColorTable16(HDC16 hdc, UINT16 start, UINT16 num,
...
@@ -192,11 +193,10 @@ UINT16 WINAPI WinGSetDIBColorTable16(HDC16 hdc, UINT16 start, UINT16 num,
* RETURNS
* RETURNS
* The number of entries retrieved.
* The number of entries retrieved.
*/
*/
UINT16
WINAPI
WinGGetDIBColorTable16
(
HDC16
hdc
,
UINT16
start
,
UINT16
num
,
UINT16
WINAPI
WinGGetDIBColorTable16
(
HDC16
hdc
,
UINT16
start
,
UINT16
num
,
RGBQUAD
*
colors
)
RGBQUAD
*
colors
)
{
{
TRACE
(
"(%d,%d,%d,%p)
\n
"
,
hdc
,
start
,
num
,
colors
);
TRACE
(
"(%d,%d,%d,%p)
\n
"
,
hdc
,
start
,
num
,
colors
);
return
GetDIBColorTable
16
(
hdc
,
start
,
num
,
colors
);
return
GetDIBColorTable
(
HDC_32
(
hdc
),
start
,
num
,
colors
);
}
}
/***********************************************************************
/***********************************************************************
...
@@ -213,10 +213,10 @@ UINT16 WINAPI WinGGetDIBColorTable16(HDC16 hdc, UINT16 start, UINT16 num,
...
@@ -213,10 +213,10 @@ UINT16 WINAPI WinGGetDIBColorTable16(HDC16 hdc, UINT16 start, UINT16 num,
*/
*/
HPALETTE16
WINAPI
WinGCreateHalfTonePalette16
(
void
)
HPALETTE16
WINAPI
WinGCreateHalfTonePalette16
(
void
)
{
{
HDC
16
hdc
=
CreateCompatibleDC16
(
0
);
HDC
hdc
=
CreateCompatibleDC
(
0
);
HPALETTE16
ret
=
CreateHalftonePalette16
(
hdc
);
HPALETTE16
ret
=
HPALETTE_16
(
CreateHalftonePalette
(
hdc
)
);
TRACE
(
"(void)
\n
"
);
TRACE
(
"(void)
\n
"
);
DeleteDC
16
(
hdc
);
DeleteDC
(
hdc
);
return
ret
;
return
ret
;
}
}
...
@@ -238,7 +238,7 @@ HBRUSH16 WINAPI WinGCreateHalfToneBrush16(HDC16 winDC, COLORREF col,
...
@@ -238,7 +238,7 @@ HBRUSH16 WINAPI WinGCreateHalfToneBrush16(HDC16 winDC, COLORREF col,
WING_DITHER_TYPE
type
)
WING_DITHER_TYPE
type
)
{
{
TRACE
(
"(%d,%d,%d)
\n
"
,
winDC
,
col
,
type
);
TRACE
(
"(%d,%d,%d)
\n
"
,
winDC
,
col
,
type
);
return
CreateSolidBrush16
(
col
);
return
HBRUSH_16
(
CreateSolidBrush
(
col
)
);
}
}
/***********************************************************************
/***********************************************************************
...
@@ -251,12 +251,12 @@ BOOL16 WINAPI WinGStretchBlt16(HDC16 destDC, INT16 xDest, INT16 yDest,
...
@@ -251,12 +251,12 @@ BOOL16 WINAPI WinGStretchBlt16(HDC16 destDC, INT16 xDest, INT16 yDest,
HDC16
srcDC
,
INT16
xSrc
,
INT16
ySrc
,
HDC16
srcDC
,
INT16
xSrc
,
INT16
ySrc
,
INT16
widSrc
,
INT16
heiSrc
)
INT16
widSrc
,
INT16
heiSrc
)
{
{
BOOL
16
retval
;
BOOL
retval
;
TRACE
(
"(%d,%d,...)
\n
"
,
destDC
,
srcDC
);
TRACE
(
"(%d,%d,...)
\n
"
,
destDC
,
srcDC
);
SetStretchBltMode
16
(
destDC
,
COLORONCOLOR
);
SetStretchBltMode
(
HDC_32
(
destDC
)
,
COLORONCOLOR
);
retval
=
StretchBlt16
(
destDC
,
xDest
,
yDest
,
widDest
,
heiDest
,
srcDC
,
retval
=
StretchBlt
(
HDC_32
(
destDC
),
xDest
,
yDest
,
widDest
,
heiDest
,
xSrc
,
ySrc
,
widSrc
,
heiSrc
,
SRCCOPY
);
HDC_32
(
srcDC
),
xSrc
,
ySrc
,
widSrc
,
heiSrc
,
SRCCOPY
);
SetStretchBltMode
16
(
destDC
,
BLACKONWHITE
);
SetStretchBltMode
(
HDC_32
(
destDC
)
,
BLACKONWHITE
);
return
retval
;
return
retval
;
}
}
...
@@ -270,6 +270,5 @@ BOOL16 WINAPI WinGBitBlt16(HDC16 destDC, INT16 xDest, INT16 yDest,
...
@@ -270,6 +270,5 @@ BOOL16 WINAPI WinGBitBlt16(HDC16 destDC, INT16 xDest, INT16 yDest,
INT16
xSrc
,
INT16
ySrc
)
INT16
xSrc
,
INT16
ySrc
)
{
{
TRACE
(
"(%d,%d,...)
\n
"
,
destDC
,
srcDC
);
TRACE
(
"(%d,%d,...)
\n
"
,
destDC
,
srcDC
);
return
BitBlt16
(
destDC
,
xDest
,
yDest
,
widDest
,
heiDest
,
srcDC
,
return
BitBlt
(
HDC_32
(
destDC
),
xDest
,
yDest
,
widDest
,
heiDest
,
HDC_32
(
srcDC
),
xSrc
,
ySrc
,
SRCCOPY
);
xSrc
,
ySrc
,
SRCCOPY
);
}
}
dlls/
gdi32/wing
.spec
→
dlls/
wing.dll16/wing.dll16
.spec
View file @
6ad95180
File moved
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment