⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pself.cpp

📁 一个基于BREW上的WEB service程序,通过扫描图书的条形码,登陆WEB站点,利用SOAP-RPC来查询图书信息.
💻 CPP
字号:
//
//      pself.cpp
//
//      This source code was automatically
//      generated by SophiaFramework 3.0.
//

#include "pself.hpp"
#include "TitleWindow.hpp"
#include "SGRSoftkeyWindow.hpp"
#include "SGRSoftkeyToolbox.hpp"
#include "SGRSoftkeyToolbox.hpp"

// 僽乕僩 儘乕僟
SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license)
{
    *license = "heap://"
        "Z7VFU0YEKXPTHKZ7W8Y6YQV8RBXQXEW2W6X0WIVOX9UJW1UEZCSFWBVFW8Y7GY2U2UHYIW6R9VMTMRNR"
        "DX3OZ7YBSCT0IX8Z7VNUAZAYEXKV2UKV5XMSKUGTCT8S5U5W2UNVOUGXMV46RQXAZARBVQWNRDY9RAV4"
        "VLXPT3VN03W7X9XBXHREUCRA6W3W9Z1Z7YMW4Y4YQWDV3VLT3UGXJS8TAXE61UDSEZ9Y3SHYJZ4Y8UFU"
        "BW5YAYJZ3T7VMBY3SFRDV0Z6V24V1T1RHZ3S6TFKWJSHYNBXGPSCW4U0ZAUG9REYDZ8W6YPF4Z9GKX4W"
        "4YMSGY9X0W33W9RLVGVAU9T2W9ZBX0JIRCFTPRJ"
    "/";

    return (id == AEECLSID_PSELF) ? (&pself::Factory) : (null);
}


// 僼傽僋僩儕娭悢
SFCInvokerPtr pself::Factory(Void)
{
    return ::new pself;
}


// 僐儞僗僩儔僋僞
pself::pself(Void) static_throws
{
    // 偙偙偱奺庬僴儞僪儔偺搊榐傪峴偄傑偡丅

    if (static_try()) {
        static_throw(RegisterHandler(SFEVT_KEY, HANDLER_AFTER, HANDLER_NULL));
    }

    _itemarray.Clear();

    LoadItemList();

    SFRWindowPtr window;

    if ((window = ::new SGRSoftkeyWindow(this)) != null) {
        static_throw(*window);
        if (static_try()) {
            if ((window = ::new TitleWindow()) != null) {
                static_throw(*window);
            }
            else {
                static_throw(SFERR_NO_MEMORY);
            }
        }
    }
    else {
        static_throw(SFERR_NO_MEMORY);
    }

    return;
}

// 僨僗僩儔僋僞
pself::~pself(Void)
{
    UnloadItemList();

    return;
}

Bool pself::OnSoftkeySHP(SFXEventConstRef event, VoidPtr reference)
{
    SFRMenuPtr menu;

    switch (event.GetP16()) {
        case SGRSoftkeyWindow::SOFTKEY_2:
            menu = static_cast<SFRMenuPtr>(reference);
            menu->Invoke(SFXEvent(SREVT_MENU, SRP16_CANCEL, reinterpret_cast<UInt32>(menu)));
            break;
    }
    return true;
}

Void pself::LoadItemList()
{
    UInt16 i, items;
    ItemRecPtr item;

    // 傾僀僥儉堦棗傪儘乕僪偟傑偡丅
    _config.Load("itemlist.dat");

    // 傾僀僥儉悢傪庢摼
    items = _config.ReadUInt16(0, 0);

    for (i = 0; i < items; i++) {
        item = new ItemRec;
        item->asin      = _config.ReadSFXAnsiString(i * 3 + 1, "");
        item->title     = _config.ReadSFXAnsiString(i * 3 + 2, "");
        item->filename  = _config.ReadSFXAnsiString(i * 3 + 3, "");
        _itemarray.Append(item);
    }
}

Void pself::UnloadItemList()
{
    UInt16 i;
    ItemRecPtr item;

    _config.WriteUInt16(0, (UInt16)_itemarray.GetSize());

    for (i = 0; i < _itemarray.GetSize(); i++) {
        item = _itemarray.Get(i);
        _config.WriteSFXAnsiString(i * 3 + 1, item->asin);
        _config.WriteSFXAnsiString(i * 3 + 2, item->title);
        _config.WriteSFXAnsiString(i * 3 + 3, item->filename);
        delete item;
    }
    _itemarray.Clear();

    _config.Save();
}

UInt16 pself::GetItemCount()
{
    return (UInt16)_itemarray.GetSize();
}

SFCError pself::AddItem(SFXAnsiStringConstRef asin, SFXAnsiStringConstRef title, SFXAnsiStringConstRef filename)
{
    SFCError error(SFERR_NO_ERROR);
    if (GetFilename(asin) != SFXAnsiString::EmptyInstance()) {
        error = RemoveItem(asin);
    }
    if (error == SFERR_NO_ERROR) {
        ItemRecPtr item = ::new ItemRec;
        if (item != null) {
            item->asin      = asin;
            item->title     = title;
            item->filename  = filename;
            error = _itemarray.Append(item);
        }
        else {
            error = SFERR_NO_ERROR;
        }
    }
    
    return error;
}

SFCError pself::RemoveItem(SFXAnsiStringConstRef asin)
{
    SFCError error(SFERR_FAILED);
    UInt16 i;
    SFBFileMgrSmp file = SFBFileMgr::NewInstance();

    for (i = 0; i < _itemarray.GetSize(); i++) {
        if (_itemarray[i]->asin == asin) {
            file->Remove(_itemarray[i]->filename);
            delete _itemarray[i];
            _itemarray.Remove(i);
            --i;
            error = SFERR_NO_ERROR;
        }
    }

    return error;
}

SFCError pself::RemoveItem(UInt16 index)
{
    SFCError error(SFERR_NO_ERROR);
    SFBFileMgrSmp file = SFBFileMgr::NewInstance();

    if (index < _itemarray.GetSize()) {
        file->Remove(_itemarray[index]->filename);
        delete _itemarray[index];
        _itemarray.Remove(index);
    } else {
        error = SFERR_FAILED;
    }
    return error;
}

SFCError pself::RemoveAllItems()
{
    SFCError error(SFERR_NO_ERROR);
    UInt16 i;
    SFBFileMgrSmp file = SFBFileMgr::NewInstance();
    ItemRecPtr item;

    for (i = 0; i < _itemarray.GetSize(); i++) {
        item = _itemarray.Get(i);
        file->Remove(item->filename);
        delete item;
    }
    _itemarray.Clear();
    return error;
}

// ASIN 偐傜僼傽僀儖柤傪専嶕偡傞丅傕偟傾僀僥儉儕僗僩偵懚嵼偟側偗傟偽儔儞僟儉側僼傽僀儖柤傪嶌惉偡傞丅
SFXAnsiStringConstRef pself::GetFilename(SFXAnsiStringConstRef asin)
{
    UInt16 i;

    for (i = 0; i < _itemarray.GetSize(); i++) {
        if (_itemarray[i]->asin == asin) {
            return _itemarray[i]->filename;
        }
    }
    return SFXAnsiString::EmptyInstance();
}

SFXAnsiStringConstRef pself::GetTitle(SFXAnsiStringConstRef asin)
{
    UInt16 i;

    for (i = 0; i < _itemarray.GetSize(); i++) {
        if (_itemarray[i]->asin == asin) {
            return _itemarray[i]->title;
        }
    }
    return SFXAnsiString::EmptyInstance();
}

SFXAnsiStringConstRef pself::GetFilename(UInt16 index)
{
    if (index < _itemarray.GetSize()) {
        return _itemarray[index]->filename;
    }
    return SFXAnsiString::EmptyInstance();
}

SFXAnsiStringConstRef pself::GetTitle(UInt16 index)
{
    if (index < _itemarray.GetSize()) {
        return _itemarray[index]->title;
    }
    return SFXAnsiString::EmptyInstance();
}

SFXAnsiStringConstRef pself::GetASIN(UInt16 index)
{
    if (index < _itemarray.GetSize()) {
        return _itemarray[index]->asin;
    }
    return SFXAnsiString::EmptyInstance();
}


// 偙偺娭悢偼Unicode16toSjis偺僶僌丠偵懳張偡傞偨傔偺傕偺丅
// 偙偺僶僌偼ASCII暥帤偺慜偵\0偑晅梌偝傟偰偟傑偆僶僌丅
// 椺偊偽UTF-16偺暥帤楍乽abc偁偄偆乿傪Shift-JIS偵曄姺偡傞偲
// 乽\0a\0b\0c偁偄偆乿偲曄姺偝傟偰偟傑偆偺偱丄
//  偙偺\0傪庢傝彍偔昁梫偑偁傞丅
Void CopeWithKDDIBug(SFXAnsiStringPtr out, SInt32 length) {
    ACharPtr p1 = out->GetBuffer();
    ACharPtr p2 = p1;
    SIntN i;
    for (i = 0 ; i < length ; ++i) {
        if (*p1 != '\0') {
            *p2 = *p1;
            ++p2;
        }
        ++p1;
    }
    *p2 = '\0';
}

// UTF-8傪UTF-16偵曄姺屻丄Shift-JIS乮SFXAnsiString乯偵曄姺偡傞丅
SFCError Utf8toAnsiString(SFXAnsiStringConstRef in, SFXAnsiStringPtr out) {
    SFCError error(SFERR_NO_ERROR);

    if (out != null) {
        out->Clear();

        if (!in.IsEmpty()) {
            SFXWideString tmp;

            // +1 偼廔抂'\0'偺暘
            if ((error = tmp.SetLength(in.GetLength() + 1)) == SFERR_NO_ERROR) {
                // UTF-8傪UTF-16偵曄姺偡傞SF偺僿儖僷乕娭悢
                if (SFXHelper::utf8towstr(in.GetBuffer(), in.GetLength() + 1,
                    tmp.GetBuffer(), tmp.GetLength() * 2)) {

                    tmp = tmp.Truncate();

                    SFBKDDIUnicodeSJISSmp jis;
                    if ((jis = SFBKDDIUnicodeSJIS::NewInstance()) != null) {
                        if ((error = out->SetLength(tmp.GetLength() * 2))
                            == SFERR_NO_ERROR) {

                            // Unicode16傪Shift-JIS偵曄姺偡傞KDDI偺奼挘娭悢
                            // +1 偼廔抂'\0'偺暘
                            if (jis->Unicode16toSjis(tmp.GetBuffer(),
                                out->GetBuffer(), out->GetLength() + 1)) {

                                CopeWithKDDIBug(out, tmp.GetLengthCString() * 2);
                                out->Set(out->Truncate());
                            } else {
                                error = SFERR_FAILED;
                            }
                        }
                    } else {
                        error = SFERR_FAILED;
                    }
                } else {
                    error = SFERR_FAILED;
                }
            }
        }
    } else {
        error = SFERR_INVALID_PARAM;
    }
    return error;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -