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

📄 project.c

📁 CC386 is a general-purpose 32-bit C compiler. It is not an optimizing compiler but given that the co
💻 C
📖 第 1 页 / 共 3 页
字号:
                x->defineFlags = 0; // DEFINE_TONASM ;
            }
        }
    }
}

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

void DeleteDepends(DEPENDSLIST *l)
{
    while (l)
    {
        DEPENDSLIST *n = l->next;
        //      if (l->treeHandle)
        //         TreeView_DeleteItem(treeWindow,l->treeHandle) ;
        free(l);
        l = n;
    }
}

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

void DeleteFiles(FILELIST *l)
{
    while (l)
    {
        FILELIST *n = l->next;
        DeleteDepends(l->depends);
        if (l->treeHandle)
            TreeView_DeleteItem(treeWindow, l->treeHandle);
        free(l);
        l = n;
    }
}

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

void ProjectDeleteFile(PROJLIST *p, int selected)
{
    if (hwndProject)
    {
        int i;
        FILELIST **y = &p->files,  *x;
        if (*y)
        {
            for (i = 1; i < selected; i++)
                y = &(*y)->next;
            x =  *y;
            *y = (*y)->next;
            changedProject = TRUE;
            DeleteDepends(x->depends);
            TreeView_DeleteItem(treeWindow, x->treeHandle);
            free(x);
        }
    }
}

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

void ProjectDeleteDefines(DEFINES *defines)
{
    while (defines)
    {
        DEFINES *y = defines->next;
        free(defines);
        defines = y;
    }
}

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

void ProjectDeleteTarget(PROJLIST *proj)
{
    if (hwndProject)
    {
        int i;
        PROJLIST **y = &projectList,  *x;
        while (*y &&  *y != proj)
            y = &(*y)->next;
        x =  *y;
        *y = (*y)->next;
        DeleteFiles(x->files);
        changedProject = TRUE;
        TreeView_DeleteItem(treeWindow, x->treeHandle);
        ProjectDeleteDefines(x->defines);
        free(x);
    }
}

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

void ProjectFreeList(void)
{
    TagEraseAllEntries();
    hbpInit();
    while (projectList)
    {
        PROJLIST *temp = projectList->next;
        ProjectDeleteTarget(projectList);
        projectList = temp;
    }
    changedProject = FALSE;
    #ifdef HBREAK
        hbpInit();
    #endif 
    SendMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0);
    //   szProjectName[0] = 0 ;
}

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

void ProjectNewList(PROJLIST *list)
{
    projectList = list;
    SendMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0);
}

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

static void sortDepends(DEPENDSLIST **aa, int count)
{
    int i, j;
    for (i = 0; i < count - 1; i++)
        for (j = i + 1; j < count; j++)
    if (stricmp(aa[i]->name, aa[j]->name) > 0)
    {
        DEPENDSLIST *l = aa[i];
        aa[i] = aa[j];
        aa[j] = l;
    }
}

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

void RefreshDepends(HWND hTree, PROJLIST *projlist)
{
    PROJLIST *l = projlist;
    DEPENDSLIST **aa = (DEPENDSLIST **)malloc(256 *sizeof(DEPENDSLIST*));
    int max = 256, count = 0;
    int i = 0;
    HTREEITEM h = TVI_FIRST;
    if (l->includeTreeHandle)
        ;
    TreeView_DeleteItem(treeWindow, l->includeTreeHandle);
    if (!aa)
        return ;
    l->includeTreeHandle = TVInitInsert(treeWindow, l->treeHandle, l
        ->sourceTreeHandle, "Include Files", FALSE);
    {
        FILELIST *m = l->files;
        while (m)
        {
            DEPENDSLIST *n = m->depends;
            while (n)
            {

                if (count == max)
                {
                    max += 256;
                    aa = realloc(aa, max *sizeof(DEPENDSLIST*));
                    if (!aa)
                        return ;
                }
                aa[count++] = n;
                n = n->next;
            }
            m = m->next;
        }
    }
    sortDepends(aa, count);
    for (i = 0; i < count; i++)
    {
        if (i && !stricmp(aa[i]->name, aa[i - 1]->name))
            aa[i]->treeHandle = aa[i - 1]->treeHandle;
        else
            h = aa[i]->treeHandle = TVInitInsert(treeWindow, l
                ->includeTreeHandle, h, aa[i]->title, FALSE);
    }

    free(aa);
}

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

static void InitItems(HWND hTree, PROJLIST *projlist)
{
    PROJLIST *l = projlist;
    int i = 0;
    HTREEITEM h = TVI_FIRST;
    TreeView_DeleteAllItems(hTree);
    //   targetRoot = TVInitInsert(hTree,TVI_ROOT,TVI_FIRST,"Targets", FALSE) ;
    while (l)
    {
        int j = 0;
        FILELIST *m = l->files;
        HTREEITEM k = TVI_FIRST;
        h = l->treeHandle = TVInitInsert(hTree, targetRoot, h, l->title, FALSE);
        l->sourceTreeHandle = TVInitInsert(hTree, l->treeHandle, TVI_FIRST, 
            "Source Files", FALSE);
        l->includeTreeHandle = TVInitInsert(hTree, l->treeHandle, l
            ->sourceTreeHandle, "Include Files", FALSE);
        while (m)
        {
            HTREEITEM t = TVI_FIRST;
            k = m->treeHandle = TVInitInsert(hTree, l->sourceTreeHandle, k, m
                ->title, FALSE);
            m = m->next;
        }
        RefreshDepends(hTree, l);
        l = l->next;
    }
}

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

int InsideRect(RECT *r, POINT *q)
{
    if (r->left <= q->x && r->top <= q->y)
    if (r->right > q->x && r->bottom > q->y)
    {
        return TRUE;
    }
    return FALSE;
}

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

void FindItemByWind(HWND hwnd, PROJLIST **list, int *sel)
{
    PROJLIST *l = projectList;
    FILELIST *m;
    DWINFO *info = (DWINFO*)GetWindowLong(hwnd, 0);
    *list = 0;
    if (!info)
        return ;
    while (l)
    {
        int i = 1;
        m = l->files;
        while (m)
        {
            if (!xstricmpz(m->name, info->dwName))
            {
                *list = l;
                *sel = i;
                return ;
            }
            i++;
            m = m->next;
        }
        l = l->next;
    }
}

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

void FindItemByPoint(HWND hwnd, PROJLIST **list, int *pos, int *depend)
{
    POINT q;
    PROJLIST *l =  *list = projectList;
    GetCursorPos(&q);
    ScreenToClient(hwnd, &q);
    *pos =  - 1;
    *depend = 0;
    if (!l)
        return ;
    while (l)
    {
        int i = 0;
        RECT r;
        FILELIST *m = l->files;
        if (TreeView_GetItemRect(treeWindow, l->treeHandle, &r, 0))
        {
            if (InsideRect(&r, &q))
            {
                *pos = i;
                *list = l;
                return ;
            }
        }
        if (TreeView_GetItemRect(treeWindow, l->sourceTreeHandle, &r, 0))
        {
            if (InsideRect(&r, &q))
            {
                *pos =  - 2;
                *list = l;
                return ;
            }
        }
        if (TreeView_GetItemRect(treeWindow, l->includeTreeHandle, &r, 0))
        {
            if (InsideRect(&r, &q))
            {
                *pos =  - 3;
                *list = l;
                return ;
            }
        }
        while (m)
        {
            int j = 0;
            DEPENDSLIST *n = m->depends;
            ++i;
            if (TreeView_GetItemRect(treeWindow, m->treeHandle, &r, 0))
            {
                if (InsideRect(&r, &q))
                {
                    *pos = i;
                    *list = l;
                    return ;
                }
            }
            while (n)
            {
                j++;
                if (TreeView_GetItemRect(treeWindow, n->treeHandle, &r, 0))
                {
                    if (InsideRect(&r, &q))
                    {
                        *pos = i;
                        *list = l;
                        *depend = j;
                        return ;
                    }
                }
                n = n->next;
            }
            m = m->next;
        }
        l = l->next;
    }

}

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

void FindItemBySelected(HWND hwnd, PROJLIST **list, int *pos, int *depend)
{
    PROJLIST *l =  *list = projectList;
    *pos =  - 1;
    *depend = 0;
    if (!l)
        return ;
    while (l)
    {
        int i = 0;
        RECT r;
        FILELIST *m = l->files;
        if (treeViewSelected == l->treeHandle)
        {
            *pos = i;
            *list = l;
            return ;
        }
        if (treeViewSelected == l->sourceTreeHandle)
        {
            *pos =  - 2;
            *list = l;
            return ;
        }
        if (treeViewSelected == l->includeTreeHandle)
        {
            *pos =  - 3;
            *list = l;
            return ;
        }
        while (m)
        {
            int j = 0;
            DEPENDSLIST *n = m->depends;
            ++i;
            if (treeViewSelected == m->treeHandle)
            {
                *pos = i;
                *list = l;
                return ;
            }
            while (n)
            {
                j++;
                if (treeViewSelected == n->treeHandle)
                {
                    *pos = i;
                    *depend = j;
                    *list = l;
                    return ;
                }
                n = n->next;
            }
            m = m->next;
        }
        l = l->next;
    }

}

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

PROJLIST *ProjectFindSelectedEXE(void)
{
    PROJLIST *l = projectList;
    if (!hwndProject || !l)
        return 0;
    if (!l->next)
    {
        selectedProject = l;
        return l;
    }
    /* Did they select a project in the project window? */
    while (l)
    {
        FILELIST *m = l->files;
        selectedProject = l;
        if (l->buildFlags &BF_CHOSENPROJECT)
            return l;
        l = l->next;
    }
    /* no look for a selection */
    l = projectList;
    if (treeViewSelected == 0)
        return 0;
    while (l)
    {
        FILELIST *m = l->files;
        selectedProject = l;
        if (treeViewSelected == l->treeHandle)
            return l;
        while (m)
        {
            FILELIST *n = l->files;
            if (treeViewSelected == m->treeHandle)
                return l;
            while (n)
            {
                if (treeViewSelected == n->treeHandle)
                    return l;
                n = n->next;
            }
            m = m->next;
        }
        l = l->next;
    }
    return 0;
}

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

void CollapseExpand(PROJLIST *selectedProj, int selectedItem, int flag)
{
    if (selectedItem !=  - 1)
    {
        int i;
        if (selectedItem ==  - 2)
            TreeView_Expand(treeWindow, selectedProj->sourceTreeHandle, flag);
        else if (selectedItem ==  - 3)
            TreeView_Expand(treeWindow, selectedProj->includeTreeHandle, flag);
        else if (selectedItem == 0)
            TreeView_Expand(treeWindow, selectedProj->treeHandle, flag);
        else
        {
            FILELIST *m = selectedProj->files;
            for (i = 1; i < selectedItem; i++)
                m = m->next;
            TreeView_Expand(treeWindow, m->treeHandle, flag);
        }
    }
}

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

LRESULT CALLBACK _export ProjectProc(HWND hwnd, UINT iMessage, WPARAM wParam,
    LPARAM lParam)
{
    static int selectedItem, selectedHeader;
    int i;
    PROJLIST *l;
    RECT rs,  *rt;
    static PROJLIST *selectedProj;

⌨️ 快捷键说明

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