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

📄 stdprop.c

📁 CC386 is a general-purpose 32-bit C compiler. It is not an optimizing compiler but given that the co
💻 C
📖 第 1 页 / 共 3 页
字号:
                SetEditField(hwnd, IDC_HELPPATH, szHelpPathTemp);
                CheckRadioButton(hwnd, IDC_HELPMSDN, IDC_HELPSPEC, HelpModeTemp
                    == HELP_MSDN ? IDC_HELPMSDN : HelpModeTemp == HELP_SDK ?
                    IDC_HELPSDK : IDC_HELPSPEC);
                break;
            case PSN_KILLACTIVE:
                /* verify ok always */
                GetEditField(hwnd, IDC_INSTALLPATH, szInstallPathTemp);
                if (GetCBField(hwnd, IDC_HELPMSDN))
                    HelpModeTemp = HELP_MSDN;
                else if (GetCBField(hwnd, IDC_HELPSDK))
                    HelpModeTemp = HELP_SDK;
                else
                    HelpModeTemp = HELP_SPECIFIED;
                GetEditField(hwnd, IDC_HELPPATH, szHelpPathTemp);
                SetResult(hwnd, FALSE);
                break;
            case PSN_APPLY:
                /* Page application */
                strcpy(szInstallPath, szInstallPathTemp);
                len = strlen(szInstallPath);
                if (len && szInstallPath[len - 1] == '\\')
                    szInstallPath[len - 1] = 0;
                StringToProfile("InstallPath", szInstallPath);
                HelpMode = HelpModeTemp;
                strcpy(szHelpPath, szHelpPathTemp);
                RundownHelp();
                InitHelp();
                break;
            case PSN_HELP:
                ContextHelp(127);
                break;
            }
            break;
    }
    return FALSE;
}

// ==============================================================
//
// display the property sheet and return to caller
//
void DisplayProperties(HINSTANCE hInst, HWND hwnd)
{
    tabsTemp = tabs;
    keywordColorTemp = keywordColor;
    commentColorTemp = commentColor;
    numberColorTemp = numberColor;
    stringColorTemp = stringColor;
    escapeColorTemp = escapeColor;
    backgroundColorTemp = backgroundColor;
    textColorTemp = textColor;
    editFlagsTemp = editFlags;
    browseInfoTemp = browseInfo;
    HelpModeTemp = HelpMode;
    memcpy(custColorsTemp, custColors, sizeof(custColors));
    strcpy(szInstallPathTemp, szInstallPath);
    strcpy(szHelpPathTemp, szHelpPath);

    // struct for server page
    editPages[EDITPROP].dwSize = sizeof(PROPSHEETPAGE);
    editPages[EDITPROP].dwFlags = PSP_HASHELP;
    editPages[EDITPROP].hInstance = hInst;
    editPages[EDITPROP].u.pszTemplate = "EDITPROPDLG";
    editPages[EDITPROP].pfnDlgProc = EditProc;
    editPages[EDITPROP].pszTitle = "Edit";

    editPages[GENERALPROP].dwSize = sizeof(PROPSHEETPAGE);
    editPages[GENERALPROP].dwFlags = PSP_HASHELP;
    editPages[GENERALPROP].hInstance = hInst;
    editPages[GENERALPROP].u.pszTemplate = "GENERALPROPDLG";
    editPages[GENERALPROP].pfnDlgProc = GeneralProc;
    editPages[GENERALPROP].pszTitle = "General";

    editPages[INSTALLPROP].dwSize = sizeof(PROPSHEETPAGE);
    editPages[INSTALLPROP].dwFlags = PSP_HASHELP;
    editPages[INSTALLPROP].hInstance = hInst;
    editPages[INSTALLPROP].u.pszTemplate = "INSTALLPROPDLG";
    editPages[INSTALLPROP].pfnDlgProc = InstallProc;
    editPages[INSTALLPROP].pszTitle = "Install";

    // struct for property sheet header
    editHeader.dwSize = sizeof(PROPSHEETHEADER);
    editHeader.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_NOAPPLYNOW /* 
        | PSH_HASHELP*/;
    editHeader.hwndParent = hwnd;
    editHeader.hInstance = hInstance;
    editHeader.pszCaption = "General";
    editHeader.nPages = EDIT_PROPERTY_SHEET_COUNT;
    editHeader.u2.nStartPage = 0;
    editHeader.u3.ppsp = &editPages[0];

    // make the property sheet and exit
    PropertySheet(&editHeader);
}

// ==============================================================
//
// property sheet constant names
//
#define TARGET_PROPERTY_SHEET_COUNT 6
#define TARGETPROP 0
#define DEBUGPROP 1
#define DEFINEPROP 2
#define TOOLOPTSPROP 3
#define PREBUILDPROP 4
#define POSTBUILDPROP 5

static PROPSHEETPAGE pages[TARGET_PROPERTY_SHEET_COUNT]; // the page structures
static PROPSHEETHEADER header; // the header structure
static PROJLIST *proj;
static PROJLIST workProj;

DEFINES *duplicateDefines(DEFINES *p)
{
    DEFINES *rv = 0,  **l = &rv;
    while (p)
    {
        *l = malloc(sizeof(DEFINES));
        if (! *l)
            return rv;
        **l =  *p;
        (*l)->next = 0;
        p = p->next;
        l = &(*l)->next;
    }
    return rv;
}

// ==============================================================
//
static int FAR PASCAL TargetProc(HWND hwnd, UINT wmsg, WPARAM wparam, LPARAM
    lparam)

{
    NMHDR *nmhead;
    int l;
    switch (wmsg)
    {
        case WM_INITDIALOG:
            return TRUE;
        case WM_NOTIFY:
            nmhead = (NMHDR*)lparam;
            switch (nmhead->code)
            {
            case PSN_SETACTIVE:
                /* page startup */
                SendDlgItemMessage(hwnd, IDC_BUILDTYPE, CB_RESETCONTENT, 0, 0);
                SendDlgItemMessage(hwnd, IDC_LIBTYPE, CB_RESETCONTENT, 0, 0);
                NewFocus(hwnd, IDC_BUILDTYPE);
                SetEditField(hwnd, IDC_INCLUDEPATH, relincludepath
                    (workProj.includePath));
                SetEditField(hwnd, IDC_OUTPUTPATH, relpath(workProj.outputPath))
                    ;
                SetCBField(hwnd, IDC_DEBUGINFO, workProj.buildFlags
                    &BF_DEBUGINFO ? 1 : 0);
                SetCBField(hwnd, IDC_MAPFILE, workProj.buildFlags &BF_MAPFILE ?
                    1 : 0);
                SetCBField(hwnd, IDC_COMPILEVIAASM, workProj.buildFlags
                    &BF_COMPILEVIAASM ? 1 : 0);
                SetCBField(hwnd, IDC_CHOSENPROJECT, workProj.buildFlags
                    &BF_CHOSENPROJECT ? 1 : 0);
                SetCBField(hwnd, IDC_SHOWWARNINGS, workProj.buildFlags
                    &BF_SHOWWARNINGS ? 1 : 0);
                SetCBField(hwnd, IDC_C99, workProj.buildFlags &BF_C99 ? 1 : 0);
                SetCBField(hwnd, IDC_ANSI, workProj.buildFlags &BF_ANSI ? 1 : 0);
                AddComboString(hwnd, IDC_BUILDTYPE, "Windows Console");
                AddComboString(hwnd, IDC_BUILDTYPE, "Windows GUI");
                AddComboString(hwnd, IDC_BUILDTYPE, "Windows DLL");
                AddComboString(hwnd, IDC_BUILDTYPE, "Library");
                AddComboString(hwnd, IDC_BUILDTYPE, "MSDOS");
                AddComboString(hwnd, IDC_BUILDTYPE, "RAW");
                SetComboSel(hwnd, IDC_BUILDTYPE, workProj.buildType);
                AddComboString(hwnd, IDC_LIBTYPE, "Static RTL");
                AddComboString(hwnd, IDC_LIBTYPE, "Dynamic RTL");
                AddComboString(hwnd, IDC_LIBTYPE, "No Library");
                AddComboString(hwnd, IDC_LIBTYPE, "CRTDLL.DLL");
                SetComboSel(hwnd, IDC_LIBTYPE, workProj.libType);
                break;
            case PSN_KILLACTIVE:
                workProj.buildType = GetComboSel(hwnd, IDC_BUILDTYPE);
                workProj.libType = GetComboSel(hwnd, IDC_LIBTYPE);
                GetEditField(hwnd, IDC_INCLUDEPATH, workProj.includePath);
                GetEditField(hwnd, IDC_OUTPUTPATH, workProj.outputPath);
                if (workProj.includePath[0] && workProj.includePath[strlen
                    (workProj.includePath) - 1] == '\\')
                    workProj.includePath[strlen(workProj.includePath) - 1] = 0;
                if (workProj.outputPath[0] && workProj.outputPath[strlen
                    (workProj.outputPath) - 1] == '\\')
                    workProj.outputPath[strlen(workProj.outputPath) - 1] = 0;
                absincludepath(workProj.includePath);
                abspath(workProj.outputPath);
                workProj.buildFlags &= ~(BF_DEBUGINFO | BF_MAPFILE | BF_ANSI |
                    BF_COMPILEVIAASM | BF_CHOSENPROJECT | BF_CRTDLL | BF_C99);
                if (GetCBField(hwnd, IDC_DEBUGINFO))
                    workProj.buildFlags |= BF_DEBUGINFO;
                if (GetCBField(hwnd, IDC_MAPFILE))
                    workProj.buildFlags |= BF_MAPFILE;
                if (GetCBField(hwnd, IDC_COMPILEVIAASM))
                    workProj.buildFlags |= BF_COMPILEVIAASM;
                if (GetCBField(hwnd, IDC_CHOSENPROJECT))
                    workProj.buildFlags |= BF_CHOSENPROJECT;
                if (GetCBField(hwnd, IDC_SHOWWARNINGS))
                    workProj.buildFlags |= BF_SHOWWARNINGS;
                if (GetCBField(hwnd, IDC_C99))
                    workProj.buildFlags |= BF_C99;
                if (GetCBField(hwnd, IDC_ANSI))
                    workProj.buildFlags |= BF_ANSI;
                /* verify ok always */
                SetResult(hwnd, FALSE);
                break;
            case PSN_APPLY:
                /* Page application */
                if (workProj.buildFlags &BF_CHOSENPROJECT)
                {
                    PROJLIST *l = projectList;
                    while (l)
                    {
                        l->buildFlags &= ~BF_CHOSENPROJECT;
                        l = l->next;
                    }
                }
                while ((l = strlen(workProj.prebuildsteps)) &&
                    workProj.prebuildsteps[l - 1] == '\n')
                    workProj.prebuildsteps[l - 1] = 0;
                while ((l = strlen(workProj.postbuildsteps)) &&
                    workProj.postbuildsteps[l - 1] == '\n')
                    workProj.postbuildsteps[l - 1] = 0;
                workProj.buildFlags |= BF_CHANGEDTARGET;
                ProjectDeleteDefines(proj->defines);
                *proj = workProj;
                workProj.defines = duplicateDefines(proj->defines);
                changedProject = TRUE;
                break;
            case PSN_RESET:
                ProjectDeleteDefines(workProj.defines);
                break;
            case PSN_HELP:

                ContextHelp(130);
                break;
            }
            break;
    }
    return FALSE;
}

// ==============================================================
//
static int FAR PASCAL DebugProc(HWND hwnd, UINT wmsg, WPARAM wparam, LPARAM
    lparam)

{
    NMHDR *nmhead;
    int disable_state;
    switch (wmsg)
    {
        case WM_INITDIALOG:
            return TRUE;
        case WM_NOTIFY:
            nmhead = (NMHDR*)lparam;
            switch (nmhead->code)
            {
            case PSN_SETACTIVE:
                /* page startup */
                disable_state = workProj.buildType != BT_CONSOLE &&
                    workProj.buildType != BT_WINDOWS;
                DisableControl(hwnd, IDC_BREAKWINMAIN, disable_state);
                DisableControl(hwnd, IDC_BREAKDLL, disable_state);
                DisableControl(hwnd, IDC_DEBUGEXCEPTION, disable_state);
                DisableControl(hwnd, IDC_DEBUGTOOLTIPS, disable_state);
                DisableControl(hwnd, IDC_EDITCMDLINE, disable_state);
                NewFocus(hwnd, IDC_BREAKWINMAIN);
                SetCBField(hwnd, IDC_BREAKWINMAIN, workProj.buildFlags
                    &BF_BREAKWINMAIN ? 1 : 0);
                SetCBField(hwnd, IDC_BREAKDLL, workProj.buildFlags &BF_BREAKDLL
                    ? 1 : 0);
                SetCBField(hwnd, IDC_DEBUGEXCEPTION, workProj.buildFlags
                    &BF_DEBUGEXCEPTION ? 1 : 0);
                SetCBField(hwnd, IDC_DEBUGTOOLTIPS, workProj.buildFlags
                    &BF_DEBUGTOOLTIPS ? 1 : 0);
                SetEditField(hwnd, IDC_EDITCMDLINE, workProj.cmdline);
                break;
            case PSN_KILLACTIVE:
                /* verify ok always */
                workProj.buildFlags &= ~(BF_BREAKWINMAIN | BF_BREAKDLL |
                    BF_DEBUGEXCEPTION | BF_DEBUGTOOLTIPS);
                if (GetCBField(hwnd, IDC_BREAKWINMAIN))
                    workProj.buildFlags |= BF_BREAKWINMAIN;
                if (GetCBField(hwnd, IDC_BREAKDLL))
                    workProj.buildFlags |= BF_BREAKDLL;
                if (GetCBField(hwnd, IDC_DEBUGEXCEPTION))
                    workProj.buildFlags |= BF_DEBUGEXCEPTION;
                if (GetCBField(hwnd, IDC_DEBUGTOOLTIPS))
                    workProj.buildFlags |= BF_DEBUGTOOLTIPS;
                GetEditField(hwnd, IDC_EDITCMDLINE, workProj.cmdline);
                SetResult(hwnd, FALSE);
                break;
            case PSN_APPLY:
                /* Page application */
                break;
            case PSN_HELP:
                ContextHelp(132);
                break;
            }
            break;
    }
    return FALSE;
}

//-------------------------------------------------------------------------

void SetDefineLBEditFields(HWND hwnd, int selected)
{
    DEFINES *d = workProj.defines;
    if (!d)
    {
        SendDlgItemMessage(hwnd, IDC_DEFINENAME, WM_SETTEXT, 0, (LPARAM)"");
        SendDlgItemMessage(hwnd, IDC_DEFINEVALUE, WM_SETTEXT, 0, (LPARAM)"");
    }
    else
    {
        char *buf = (char*)SendDlgItemMessage(hwnd, IDC_DEFINELIST,
            LB_GETITEMDATA, selected, (LPARAM)buf);
        SendDlgItemMessage(hwnd, IDC_DEFINENAME, WM_SETTEXT, 0, (LPARAM)buf);
        while (d)
        {
            if (d->name == buf)
            {
                SendDlgItemMessage(hwnd, IDC_DEFINEVALUE, WM_SETTEXT, 0, 
                    (LPARAM)d->value);
                break;
            }
            d = d->next;
        }
    }

}

//-------------------------------------------------------------------------

void GetDefineText(HWND hwnd, int selected)
{
    DEFINES *d = workProj.defines;
    char *data;
    if (!d)
        return ;
    data = (char*)SendDlgItemMessage(hwnd, IDC_DEFINELIST, LB_GETITEMDATA,
        selected, 0);
    while (d)
    {
        if (d->name == data)
        {
            SendDlgItemMessage(hwnd, IDC_DEFINEVALUE, WM_GETTEXT, 256, (LPARAM)
                d->value);
            break;
        }
        d = d->next;
    }
}

//-------------------------------------------------------------------------

static BOOL CALLBACK daDlgProc(HWND hwnd, UINT wmsg, WPARAM wparam, LPARAM
    lparam)
{
    char buf[256],  *p;

⌨️ 快捷键说明

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