×

Discussion Board

Page 1 of 2 12 LastLast
Results 1 to 15 of 17
  1. #1
    Registered User
    Join Date
    Jan 2008
    Posts
    15

    Unhappy Can i use c++ functions in Open C

    Hi all,
    I am a total newbie to s60 programming. Actually i want to port lucene search engine to open c. So i have come across some function s like vector, map in the original source code. Do i have these functions in open c. What is the alternative to this.
    Thank You,
    ----sandeep

  2. #2
    Registered User
    Join Date
    Apr 2005
    Location
    Barcelona
    Posts
    1,678

    Re: Can i use c++ functions in Open C

    No. You either need a stl lib. For symbian, you can either check uSTL or STLport.

  3. #3
    Registered User
    Join Date
    Jan 2008
    Posts
    15

    Re: Can i use c++ functions in Open C

    just one more thing....how can i use classes in open c....

  4. #4
    Registered User
    Join Date
    Apr 2005
    Location
    Barcelona
    Posts
    1,678

    Re: Can i use c++ functions in Open C

    OpenC is just a set of C libraries. To "use" classes, you simply need a C++ compiler.

  5. #5
    Nokia Developer Moderator
    Join Date
    Sep 2004
    Location
    Tampere, Finland
    Posts
    11,359

    Re: Can i use c++ functions in Open C

    See this, you might get a chance to build your project with S60's STL port.
    -- Lucian

    If you are not yet a DVLUP member it is time to correct that mistake :) Click here to join: http://www.dvlup.com/lucian/Invite

  6. #6
    Regular Contributor
    Join Date
    Mar 2003
    Location
    Cambridge, Massachusetts, USA
    Posts
    87

    Re: Can i use c++ functions in Open C

    It helps to keep C++ in seperate files from C. Under than Symbian build chain, .c files will be compiled as C and .cpp files will be compiled as C++.

    It's a bit of work but you could replace your usage of vector and map with Symbian's RArray and RHashMap. At least you wouldn't have to use an experimental software library.

    Be cautious of real template based STL because it produces very large executables due to inline template expansion. Some may argue that STL is not memory efficient enough for embedded computing.

    uSTL seems promising because it tries to reduce the inline template expansion.

  7. #7
    Super Contributor
    Join Date
    Jun 2005
    Location
    Berlin
    Posts
    721

    Re: Can i use c++ functions in Open C

    Quote Originally Posted by yvsandeep View Post
    just one more thing....how can i use classes in open c....
    You can just use/create class with Open C.

    A open c main() function can create an object of class and delete it.


    myClass.cpp
    Code:
    #include "opencclass.h"
    
    myClass::myClass()
    	{
    	
    	}
    
    myClass::~myClass()
    	{
    
    	}
    
    int myClass::add(int a, int b)
    	{
    	return a + b;
    	}
    
    int myClass::min(int a, int b)
    	{
    	return a - b;
    	}

    opencclass.h
    Code:
    #ifndef __OPENCCLASS_H__
    #define __OPENCCLASS_H__
    
    
    class myClass
    {
    public:
    	myClass();
    	~myClass();
    	
    public:
    	int add(int a, int b);
    	int min(int a, int b);
    private:
    
    };
    
    
    
    #endif  // __OPENCCLASS_H__
    opencclass.c
    Code:
    #include "opencclass.h"
    #include <stdio.h>
    
    #ifdef __GCCE__
    #include <staticlibinit_gcce.h>
    #endif
    
    
    int main()
    	{
    	myClass* myclass = new myClass();
    	
    	int r = myclass->add(3, 4);
    	printf("add: %d\n", r);
    	
    	delete myclass;
    	getchar();
    	return 0;
    	}

  8. #8
    Super Contributor
    Join Date
    Jun 2005
    Location
    Berlin
    Posts
    721

    Re: Can i use c++ functions in Open C

    But it must be done with config for SDK.

    I can compile this code under Emulator of Symbian 9.2, but not under Emulator of Symbian 9.1. compiling under GCC is for both no problem.

  9. #9
    Registered User
    Join Date
    Apr 2007
    Posts
    15

    Re: Can i use c++ functions in Open C

    I am porting lucene to symbian:
    get the following error:

  10. #10
    Registered User
    Join Date
    Apr 2007
    Posts
    15

    Re: Can i use c++ functions in Open C

    //log file
    //////////////////////////////////////////////////////////////////////////////////////////////////////////
    make -r -f "\S60\devices\S60_3rd_FP2_SDK\EPOC32\BUILD\workspace\clucene\group\EXPORT.make" EXPORT VERBOSE=-s
    Nothing to do
    make -r -f "\S60\devices\S60_3rd_FP2_SDK\EPOC32\BUILD\workspace\clucene\group\GCCE.make" MAKEFILE VERBOSE=-s
    In file included from C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,
    from C:\workspace\clucene\CLucene\../CLucene/StdHeader.h:186,
    from C:\workspace\clucene\CLucene\analysis\standard\StandardAnalyzer.cpp:7:
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\sys/fcntl.h:123: warning: `O_BINARY' redefined
    C:\workspace\clucene\CLucene\../CLucene/config/LuceneMycomp.h:158: warning: this is the location of the previous definition
    In file included from C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,
    from C:\workspace\clucene\CLucene\../CLucene/StdHeader.h:186,
    from C:\workspace\clucene\CLucene\analysis\standard\StandardFilter.cpp:7:
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\sys/fcntl.h:123: warning: `O_BINARY' redefined
    C:\workspace\clucene\CLucene\../CLucene/config/LuceneMycomp.h:158: warning: this is the location of the previous definition
    In file included from C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,
    from C:\workspace\clucene\CLucene\../CLucene/StdHeader.h:186,
    from C:\workspace\clucene\CLucene\analysis\standard\StandardTokenizer.cpp:7:
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\sys/fcntl.h:123: warning: `O_BINARY' redefined
    C:\workspace\clucene\CLucene\../CLucene/config/LuceneMycomp.h:158: warning: this is the location of the previous definition
    In file included from C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,
    from C:\workspace\clucene\CLucene\../CLucene/StdHeader.h:186,
    from C:\workspace\clucene\CLucene\analysis\AnalysisHeader.cpp:7:
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\sys/fcntl.h:123: warning: `O_BINARY' redefined
    C:\workspace\clucene\CLucene\../CLucene/config/LuceneMycomp.h:158: warning: this is the location of the previous definition
    In file included from C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,
    from C:\workspace\clucene\CLucene\../CLucene/StdHeader.h:186,
    from C:\workspace\clucene\CLucene\analysis\Analyzers.cpp:7:
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\sys/fcntl.h:123: warning: `O_BINARY' redefined
    C:\workspace\clucene\CLucene\../CLucene/config/LuceneMycomp.h:158: warning: this is the location of the previous definition
    In file included from C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,
    from C:\workspace\clucene\CLucene\../CLucene/StdHeader.h:186,
    from C:\workspace\clucene\CLucene\config\gunichartables.cpp:42:
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\sys/fcntl.h:123: warning: `O_BINARY' redefined
    C:\workspace\clucene\CLucene\../CLucene/config/LuceneMycomp.h:158: warning: this is the location of the previous definition
    C:\workspace\clucene\CLucene\config\gunichartables.cpp:132: warning: #warning "===== Using internal character function ====="
    In file included from C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,
    from C:\workspace\clucene\CLucene\../CLucene/StdHeader.h:186,
    from C:\workspace\clucene\CLucene\config\repl_lltot.cpp:7:
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\sys/fcntl.h:123: warning: `O_BINARY' redefined
    C:\workspace\clucene\CLucene\../CLucene/config/LuceneMycomp.h:158: warning: this is the location of the previous definition
    In file included from C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,
    from C:\workspace\clucene\CLucene\../CLucene/StdHeader.h:186,
    from C:\workspace\clucene\CLucene\config\repl_tcscasecmp.cpp:8:
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\sys/fcntl.h:123: warning: `O_BINARY' redefined
    C:\workspace\clucene\CLucene\../CLucene/config/LuceneMycomp.h:158: warning: this is the location of the previous definition
    In file included from C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,
    from C:\workspace\clucene\CLucene\../CLucene/StdHeader.h:186,
    from C:\workspace\clucene\CLucene\config\repl_tcslwr.cpp:8:
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\sys/fcntl.h:123: warning: `O_BINARY' redefined
    C:\workspace\clucene\CLucene\../CLucene/config/LuceneMycomp.h:158: warning: this is the location of the previous definition
    In file included from C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,
    from C:\workspace\clucene\CLucene\../CLucene/StdHeader.h:186,
    from C:\workspace\clucene\CLucene\config\repl_tcstod.cpp:8:
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\sys/fcntl.h:123: warning: `O_BINARY' redefined
    C:\workspace\clucene\CLucene\../CLucene/config/LuceneMycomp.h:158: warning: this is the location of the previous definition
    In file included from C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,
    from C:\workspace\clucene\CLucene\../CLucene/StdHeader.h:186,
    from C:\workspace\clucene\CLucene\config\repl_tcstoll.cpp:8:
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\sys/fcntl.h:123: warning: `O_BINARY' redefined
    C:\workspace\clucene\CLucene\../CLucene/config/LuceneMycomp.h:158: warning: this is the location of the previous definition
    In file included from C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,
    from C:\workspace\clucene\CLucene\../CLucene/StdHeader.h:186,
    from C:\workspace\clucene\CLucene\config\repl_tprintf.cpp:7:

    make[1]: *** [\S60\devices\S60_3rd_FP2_SDK\EPOC32\BUILD\workspace\clucene\group\CLUCENE\GCCE\urel\StandardAnalyzer.o] Error 1
    make: *** [LIBRARYCLUCENE] Error 2
    make -s -r -f "\S60\devices\S60_3rd_FP2_SDK\EPOC32\BUILD\workspace\clucene\group\CLUCENE\GCCE\CLUCENE.GCCE" LIBRARY
    standardanalyzer.cpp
    make -r -f "\S60\devices\S60_3rd_FP2_SDK\EPOC32\BUILD\workspace\clucene\group\GCCE.make" RESOURCE CFG=UREL VERBOSE=-s

  11. #11
    Registered User
    Join Date
    Apr 2007
    Posts
    15

    Re: Can i use c++ functions in Open C

    mmp file:
    #include "../CLucene/mymacros.h"

    TARGET clucene.lib
    TARGETTYPE lib
    UID 0




    SYSTEMINCLUDE \epoc32\include
    //SYSTEMINCLUDE \epoc32\include\libc
    SYSTEMINCLUDE \epoc32\include\stdapis
    SYSTEMINCLUDE \epoc32\include\stdapis\sys
    SYSTEMINCLUDE \epoc32\include\stdapis\stlport


    USERINCLUDE ..\CLucene
    USERINCLUDE ..\CLucene\analysis
    USERINCLUDE ..\CLucene\config
    USERINCLUDE ..\CLucene\debug
    USERINCLUDE ..\CLucene\document
    USERINCLUDE ..\CLucene\index
    USERINCLUDE ..\CLucene\queryParser
    USERINCLUDE ..\CLucene\search
    USERINCLUDE ..\CLucene\store
    USERINCLUDE ..\CLucene\util






    SOURCEPATH ..\CLucene\analysis\standard
    SOURCE StandardAnalyzer.cpp StandardFilter.cpp StandardTokenizer.cpp
    SOURCEPATH ..\CLucene\analysis
    SOURCE AnalysisHeader.cpp Analyzers.cpp
    SOURCEPATH ..\CLucene\config
    SOURCE gunichartables.cpp repl_lltot.cpp repl_tcscasecmp.cpp repl_tcslwr.cpp repl_tcstod.cpp repl_tcstoll.cpp repl_tprintf.cpp threads.cpp utf8.cpp
    SOURCEPATH ..\CLucene\debug
    SOURCE condition.cpp error.cpp memtracking.cpp
    SOURCEPATH ..\CLucene\document
    SOURCE DateField.cpp Document.cpp Field.cpp
    SOURCEPATH ..\CLucene\index
    SOURCE CompoundFile.cpp DocumentWriter.cpp FieldInfos.cpp FieldsReader.cpp FieldsWriter.cpp IndexModifier.cpp IndexReader.cpp IndexWriter.cpp MultiReader.cpp SegmentInfos.cpp SegmentMergeInfo.cpp SegmentMergeQueue.cpp SegmentMerger.cpp SegmentReader.cpp SegmentTermDocs.cpp SegmentTermEnum.cpp SegmentTermPositions.cpp SegmentTermVector.cpp Term.cpp TermInfo.cpp TermInfosReader.cpp TermInfosWriter.cpp TermVectorReader.cpp TermVectorWriter.cpp
    SOURCEPATH ..\CLucene\queryParser
    SOURCE Lexer.cpp MultiFieldQueryParser.cpp QueryParser.cpp QueryParserBase.cpp QueryToken.cpp TokenList.cpp
    SOURCEPATH ..\CLucene\search
    SOURCE BooleanQuery.cpp BooleanScorer.cpp CachingWrapperFilter.cpp ChainedFilter.cpp ConjunctionScorer.cpp DateFilter.cpp ExactPhraseScorer.cpp Explanation.cpp FieldCache.cpp FieldCacheImpl.cpp FieldDocSortedHitQueue.cpp FieldSortedHitQueue.cpp FilteredTermEnum.cpp FuzzyQuery.cpp HitQueue.cpp Hits.cpp IndexSearcher.cpp MultiSearcher.cpp MultiTermQuery.cpp PhrasePositions.cpp PhraseQuery.cpp PhraseScorer.cpp PrefixQuery.cpp QueryFilter.cpp RangeFilter.cpp RangeQuery.cpp SearchHeader.cpp Similarity.cpp SloppyPhraseScorer.cpp Sort.cpp TermQuery.cpp TermScorer.cpp WildcardQuery.cpp WildcardTermEnum.cpp
    SOURCEPATH ..\CLucene\store
    SOURCE FSDirectory.cpp IndexInput.cpp IndexOutput.cpp Lock.cpp MMapInput.cpp RAMDirectory.cpp TransactionalRAMDirectory.cpp
    SOURCEPATH ..\CLucene\util
    SOURCE BitSet.cpp Equators.cpp FastCharStream.cpp MD5Digester.cpp Misc.cpp Reader.cpp StringBuffer.cpp StringIntern.cpp ThreadLocal.cpp dirent.cpp fileinputstream.cpp
    SOURCEPATH ..\CLucene
    SOURCE CLMonolithic.cpp StdHeader.cpp

  12. #12
    Registered User
    Join Date
    Apr 2007
    Posts
    15

    Re: Can i use c++ functions in Open C

    //////////////////////////////////////////////////////////////////////////////////////////////////////////
    #ifndef MYMACROS_H_
    #define MYMACROS_H_

    //#include "../CLucene/clucene-config.h.cmake"

    #define OVERRIDE_DEFAULT_CLCONFIG 1
    #define _CL_HAVE_UNISTD_H 1
    #define _CL_HAVE_IO_H 0
    #define _CL_HAVE_DIRECT_H 0
    #define _CL_STDC_HEADERS 1
    //#define LUCENE_NO_STDC_NAMESPACE 0
    //#define _CL_DISABLE_NATIVE_EXCEPTIONS 1
    #define _CL_HAVE_STDEXCEPT 1
    #define _CL_HAVE_SYS_STAT_H 1
    #define _CL_HAVE_STDARG_H 1
    #define _CL_HAVE_MATH_H 1
    #define _CL_HAVE_MAP 1
    #define _CL_HAVE_LIST 1
    #define _CL_HAVE_SET 1
    #define _CL_HAVE_VECTOR 1
    #define _CL_HAVE_ALGORITHM 1
    #define _CL_HAVE_FUNCTIONAL 1
    #define _CL_HAVE_PRINTF 1
    #define _CL_HAVE_ERRNO_H 1
    #define _CL_HAVE_FCNTL_H 1
    #define _CL_HAVE_SVNPRINTF 1
    #define _CL_HAVE_SNPRINTF 1
    //#define DISABLE_NAMESPACE 0
    #define _CL_HAVE_NAMESPACES 1
    #define _lucene_COMPILER_GCC 1
    #define _lucene_COMPILER_GCC2 1
    #define _lucene_COMPILER_GCC3 1
    #define _CL_HAVE_SYS_TYPES_H 1
    #define _CL_HAVE_INTTYPES_H 1
    #define _CL_HAVE_FILELENGTH 0
    #define _CL_HAVE_INTPTR_T 1

    #define _CL_HAVE_WCSCPY 1

    #define _CL_HAVE_WCSNCPY 1
    #define _CL_HAVE_WCSCAT 1
    #define _CL_HAVE_WCSCHR 1
    #define _CL_HAVE_WCSSTR 1
    #define _CL_HAVE_WCSLEN 1
    #define _CL_HAVE_WCSCMP 1
    #define _CL_HAVE_WCSNCMP 1
    #define _CL_HAVE_WCSCSPN 1
    #define _CL_HAVE_WCHAR_T 1

    #define _CL_HAVE_PTHREAD 1
    #define _CL_HAVE_DIRENT_H 1


    ////////////////////////////////////////////////////////
    //namespace helper
    ////////////////////////////////////////////////////////
    #if defined(_LUCENE_DONTIMPLEMENT_NS_MACROS)

    #elif !defined(DISABLE_NAMESPACE)
    #define CL_NS_DEF(sub) namespace lucene{ namespace sub{
    #define CL_NS_DEF2(sub,sub2) namespace lucene{ namespace sub{ namespace sub2 {

    #define CL_NS_END }}
    #define CL_NS_END2 }}}

    #define CL_NS_USE(sub) using namespace lucene::sub;
    #define CL_NS_USE2(sub,sub2) using namespace lucene::sub::sub2;

    #define CL_NS(sub) lucene::sub
    #define CL_NS2(sub,sub2) lucene::sub::sub2
    #else
    #define CL_NS_DEF(sub)
    #define CL_NS_DEF2(sub, sub2)
    #define CL_NS_END
    #define CL_NS_END2
    #define CL_NS_USE(sub)
    #define CL_NS_USE2(sub,sub2)
    #define CL_NS(sub)
    #define CL_NS2(sub,sub2)
    #endif

    #if defined(LUCENE_NO_STDC_NAMESPACE)
    //todo: haven't actually tested this on a non-stdc compliant compiler
    #define CL_NS_STD(func) ::func
    #else
    #define CL_NS_STD(func) std::func
    #endif


    #endif /*MYMACROS_H_*/

  13. #13
    Registered User
    Join Date
    Apr 2007
    Posts
    15

    Re: Can i use c++ functions in Open C

    using S60_3rd_FP2_SDK and stlport
    carbide 1.3
    //this is the carbide hint error:

    Severity and Description Path Resource Location Creation Time Id
    error: invalid use of `::'[/S60/devices/S60_3rd_FP2_SDK/epoc32/include/stdapis/stdio.h] clucene line 141 1225284954953 288693
    error: invalid use of `::'[/S60/devices/S60_3rd_FP2_SDK/epoc32/include/stdapis/stdio.h] clucene line 142 1225284954953 288694

  14. #14
    Super Contributor
    Join Date
    Jun 2005
    Location
    Berlin
    Posts
    721

    Re: Can i use c++ functions in Open C

    Code:
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\sys/fcntl.h:123: 
    
    warning: `O_BINARY' redefined
    C:\workspace\clucene\CLucene\../CLucene/config/LuceneMycomp.h:158: warning: this is the location of the previous definition
    In file included from 
    
    C:\S60\devices\S60_3rd_FP2_SDK\epoc32\include\stdapis\fcntl.h:40,

    the header fcntl.h locates in two directories, so try don't define one systeminclude path
    Code:
    SYSTEMINCLUDE \epoc32\include\stdapis
    //SYSTEMINCLUDE \epoc32\include\stdapis\sys
    SYSTEMINCLUDE \epoc32\include\stdapis\stlport
    in mmp file.
    Symbian && Android && iPhoneOS

  15. #15
    Registered User
    Join Date
    Apr 2007
    Posts
    15

    Re: Can i use c++ functions in Open C

    thank you,
    I have solve it. but have some mistake.
    // in this function create a output index file (segments.new)

    IndexOutput* RAMDirectory::createOutput(const char* name) {
    /* Check the $files VoidMap to see if there was a previous file named
    ** $name. If so, delete the old RAMFile object, but reuse the existing
    ** char buffer ($n) that holds the filename. If not, duplicate the
    ** supplied filename buffer ($name) and pass ownership of that memory ($n)
    ** to $files. */

    SCOPED_LOCK_MUTEX(files_mutex);

    const char* n = files.getKey(name);
    if (n != NULL) {
    RAMFile* rf = files.get(name);
    _CLDELETE(rf);
    } else {
    n = STRDUP_AtoA(name);
    }

    RAMFile* file = _CLNEW RAMFile();
    #ifdef _DEBUG
    file->filename = n;
    #endif
    //files.put(n, file);
    files[n] = file;

    return _CLNEW RAMIndexOutput(file);
    }
    ///////////////////////////////////////////////////////////////////////////////////////
    // this function cannot find the file segments.new
    void RAMDirectory::renameFile(const char* from, const char* to) {
    SCOPED_LOCK_MUTEX(files_mutex);
    FileMap::iterator itr = files.find(from);

    /* DSR:CL_BUG_LEAK:
    ** If a file named $to already existed, its old value was leaked.
    ** My inclination would be to prevent this implicit deletion with an
    ** exception, but it happens routinely in CLucene's internals (e.g., during
    ** IndexWriter.addIndexes with the file named 'segments'). */
    if (files.exists(to)) {
    files.remove(to);
    }
    if ( itr == files.end() ){
    char tmp[1024];
    _snprintf(tmp,1024,"cannot rename %s, file does not exist",from);
    _CLTHROWT(CL_ERR_IO,tmp);
    }
    CND_PRECONDITION(itr != files.end(), "itr==files.end()")
    RAMFile* file = itr->second;
    files.removeitr(itr,false,true);
    files.put(STRDUP_AtoA(to), file);
    }

Similar Threads

  1. Open C FAQ
    By Nokia Ron in forum Open C/C++
    Replies: 4
    Last Post: 2010-10-01, 09:02
  2. Open C and cleanup safety?
    By kenley in forum Open C/C++
    Replies: 9
    Last Post: 2009-12-23, 04:45
  3. Issue when trying to generate .sis file
    By rmulam in forum Symbian Tools & SDKs
    Replies: 9
    Last Post: 2009-08-13, 14:10
  4. Replies: 8
    Last Post: 2008-09-22, 06:34
  5. Automatic code signing for open source J2ME Apps?
    By gagravarr in forum Series 40 & S60 Platform Feedback Archive
    Replies: 3
    Last Post: 2008-05-12, 06:09

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
×