目前日期文章:200708 (22)

瀏覽方式: 標題列表 簡短摘要
file name:
build_arm/linux-2.4.22-em86xx/mmnommu/page_alloc2.c

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

在進行色彩格式轉換的時候,經常會遇到色彩量化位數的改變,比如說從 24bit RGB888 到 16bit RGB565 的色彩轉換。所謂量化壓縮與量化補償都是我個人所提出的概念,現說明如下。
量化壓縮,舉例:

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()



台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

int main(int argc, char* argv[])

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

StringGrid 有一個屬性 Selection ,儲存被選中的起始位置至結束位置。
所以,只要判斷 cell 是否在 Selection 之內即可。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

雖然 StringGrid 沒有提供 visable 屬性,但是可以利用欄位寬度來取巧。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

時區是在 /etc/profile 帶進來的,重新 login 即可生效

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

Q: 我如何轉換Big-Endian與Little-Endian的格式?
A:

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

Q: 到底ntohl()與htonl()做了什麼?
A: "ntohl()" 與 "htonl()" 是四個相關 function 中的其中二個,另外二個是 "ntohs()" 與 "htons()",以下是 Linux manual 中的解釋
  1. "htonl()" function 將 unsigned integer hostlong 從 host byte order 轉為 network byte order.
  2. "htons()" function 將 unsigned short integer hostshort 從 host byte order 轉為 network byte order.
  3. "ntohl()" function 將 unsigned integer netlong 從 network byte order 轉為 host byte order.
  4. "ntohs()" function 將 unsigned short integer netshort 從 network byte order 轉為 host byte order.

這四個 function 在 host byte order 與 network byte order 之間做轉換。當二者的 byte order 不同時,則使用這些 function 會造成 endian-ness 的改變。當二者的 byte ordre 一樣時,則不會有任何的改變。因此,當你只是單純想要做 endian-ness 的轉換(無關乎平台),則不該使用這些 function。


台南小新 發表在 痞客邦 PIXNET 留言(1) 人氣()

現在我們試探電腦的記憶體設計屬於 Big-Endian 還是 Little-Endian。

如果令 nint 型態的變數, 令 n 的值為 2562 + 2*256 + 3, 則它的位元排列是

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

傳送下列二個命令,就可以讓 browser 跳出驗證視窗。
fprintf(f, "HTTP/1.0 401 Unauthorized\n");

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

The header declares the structure tm, which includes at least the following members:

int tm_sec seconds [0,61]

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

acMember->CommandText =
"update member set debt=" + IntToStr(debt) + ",e_date='" +

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

取得目前時間
在所有的UNIX下,都有個time()的函數

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

#include
#include

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

#include
#include

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char* argv[])
{
    int fd_arp;      /* socket fd for receive packets */
    char device[10]; /* ethernet device name */
    u_char *ptr;
    struct in_addr myip, mymask;
    struct ifreq ifr; /* ifr structure */
    struct sockaddr_in *sin_ptr;

    if(argc < 2)
        strcpy(device, "eth0");
    else
        strcpy(device, argv[1]);
    strcpy(ifr.ifr_name, device);

    if ((fd_arp = socket(AF_INET, SOCK_PACKET, htons(0x0806))) < 0) {
        perror( "arp socket error");
        return -1;
    }

    /* ifr.ifr_addr.sa_family = AF_INET; */

    /* get ip address of my interface */
    if(ioctl(fd_arp, SIOCGIFADDR, &ifr) < 0) {
        perror("ioctl SIOCGIFADDR error");
        myip.s_addr = 0;
    }
    else {
        sin_ptr = (struct sockaddr_in *)&ifr.ifr_addr;
        myip = sin_ptr->sin_addr;
    }

    /* get network mask of my interface */
    if (ioctl(fd_arp, SIOCGIFNETMASK, &ifr) < 0) {
        perror("ioctl SIOCGIFNETMASK error");
        mymask.s_addr = 0;
    }
    else {
        sin_ptr = (struct sockaddr_in *)&ifr.ifr_addr;
        mymask = sin_ptr->sin_addr;
    }

    /* get mac address of the interface */
    if (ioctl(fd_arp, SIOCGIFHWADDR, &ifr) < 0) {
        perror("ioctl SIOCGIFHWADDR error");
        ptr = NULL;
    }
    else {
        ptr = (u_char *)&ifr.ifr_ifru.ifru_hwaddr.sa_data[0];
    }

    printf( "device: %s\n", device);
    printf( "request netmask %s\n", inet_ntoa(mymask));
    printf( "request IP %s\n", inet_ntoa(myip));
    if (ptr)
        printf( "request mac %02x:%02x:%02x:%02x:%02x:%02x\n",
            *ptr, *(ptr + 1), *(ptr + 2), *(ptr + 3),
            *(ptr + 4), *(ptr + 5) );
    else
        printf( "request mac ?:?:?:?:?:?\n");

    return 0;
}

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define BUFSIZE 2048
#define DEBUG

struct route_info{
        struct in_addr dstAddr;
        struct in_addr srcAddr;
        struct in_addr gateWay;
        char ifName[IF_NAMESIZE];
};

int readNlSock(int sockFd, char *bufPtr, int seqNum, int pId)
{
        struct nlmsghdr *nlHdr;
        int readLen = 0, msgLen = 0;

        do {    /* Recieve response from the kernel */
                if((readLen = recv(sockFd, bufPtr, BUFSIZE - msgLen, 0)) < 0) {
                        perror("SOCK READ: ");
                        return -1;
                }
                nlHdr = (struct nlmsghdr *)bufPtr;

                /* Check if the header is valid */
                if((NLMSG_OK(nlHdr, readLen) == 0) || (nlHdr->nlmsg_type == NLMSG_ERROR)) {
                        perror("Error in recieved packet");
                        return -1;
                }

                /* Check if the its the last message */
                if(nlHdr->nlmsg_type == NLMSG_DONE) {
                        break;
                }
                else {
                        /* Else move the pointer to buffer appropriately */
                        bufPtr += readLen;
                        msgLen += readLen;
                }

                /* Check if its a multi part message */
                if((nlHdr->nlmsg_flags & NLM_F_MULTI) == 0) {
                        /* return if its not */
                        break;
                }
        } while((nlHdr->nlmsg_seq != seqNum) || (nlHdr->nlmsg_pid != pId));

        return msgLen;
}
#ifdef DEBUG
/* For printing the routes. */
void printRoute(struct route_info *rtInfo)
{
        char tempBuf[512];

        /* Print Destination address */
        if(rtInfo->dstAddr.s_addr != 0)
                strcpy(tempBuf, inet_ntoa(rtInfo->dstAddr));
        else
                sprintf(tempBuf,"*.*.*.*\t");
        fprintf(stdout,"%s\t", tempBuf);

        /* Print Gateway address */
        if(rtInfo->gateWay.s_addr != 0)
                strcpy(tempBuf, inet_ntoa(rtInfo->gateWay));
        else
                sprintf(tempBuf,"*.*.*.*\t");
        fprintf(stdout,"%s\t", tempBuf);

        /* Print Interface Name*/
        fprintf(stdout,"%s\t\t", rtInfo->ifName);

        /* Print Source address */
        if(rtInfo->srcAddr.s_addr != 0)
                strcpy(tempBuf, inet_ntoa(rtInfo->srcAddr));
        else
                sprintf(tempBuf,"*.*.*.*\t");
        fprintf(stdout,"%s\n", tempBuf);
}
#endif
/* For parsing the route info returned */
void parseRoutes(struct nlmsghdr *nlHdr, struct route_info *rtInfo,char *gateway)
{
        struct rtmsg *rtMsg;
        struct rtattr *rtAttr;
        int rtLen;
        char *tempBuf = NULL;

        tempBuf = (char *)malloc(100);
        rtMsg = (struct rtmsg *)NLMSG_DATA(nlHdr);

        /* If the route is not for AF_INET or does not belong to main routing table then return. */
        if((rtMsg->rtm_family != AF_INET) || (rtMsg->rtm_table != RT_TABLE_MAIN))
                return;

        /* get the rtattr field */
        rtAttr = (struct rtattr *)RTM_RTA(rtMsg);
        rtLen = RTM_PAYLOAD(nlHdr);
        for(;RTA_OK(rtAttr,rtLen);rtAttr = RTA_NEXT(rtAttr,rtLen)) {
                switch(rtAttr->rta_type) {
                        case RTA_OIF:
                                if_indextoname(*(int *)RTA_DATA(rtAttr), rtInfo->ifName);
                                break;
                        case RTA_GATEWAY:
                                rtInfo->gateWay.s_addr = *(u_int *)RTA_DATA(rtAttr);
                                break;
                        case RTA_PREFSRC:
                                rtInfo->srcAddr.s_addr = *(u_int *)RTA_DATA(rtAttr);
                                break;
                        case RTA_DST:
                                rtInfo->dstAddr.s_addr = *(u_int *)RTA_DATA(rtAttr);
                                break;
                }
        }
        #ifdef DEBUG
        printRoute(rtInfo);
        #endif

        //printf("%s\n", inet_ntoa(rtInfo->dstAddr));
        if(strstr(inet_ntoa(rtInfo->dstAddr), "0.0.0.0"))
                sprintf(gateway, "%s", inet_ntoa(rtInfo->gateWay));
        free(tempBuf);
        return;
}
int get_gateway(char *gateway)
{
        struct nlmsghdr *nlMsg;
        struct rtmsg *rtMsg;
        struct route_info *rtInfo;
        char msgBuf[BUFSIZE];
        int sock, len, msgSeq = 0;

        /* Create Socket */
        if((sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE)) < 0) {
                perror("Socket Creation: ");
                return -1;
        }

        /* Initialize the buffer */
        memset(msgBuf, 0, BUFSIZE);

        /* point the header and the msg structure pointers into the buffer */
        nlMsg = (struct nlmsghdr *)msgBuf;
        rtMsg = (struct rtmsg *)NLMSG_DATA(nlMsg);

        /* Fill in the nlmsg header*/
        nlMsg->nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg)); // Length of message.
        nlMsg->nlmsg_type = RTM_GETROUTE; // Get the routes from kernel routing table .

        nlMsg->nlmsg_flags = NLM_F_DUMP | NLM_F_REQUEST; // The message is a request for dump.
        nlMsg->nlmsg_seq = msgSeq++; // Sequence of the message packet.
        nlMsg->nlmsg_pid = getpid(); // PID of process sending the request.

        /* Send the request */
        if(send(sock, nlMsg, nlMsg->nlmsg_len, 0) < 0) {
                printf("Write To Socket Failed...\n");
                return -1;
        }

        /* Read the response */
        if((len = readNlSock(sock, msgBuf, msgSeq, getpid())) < 0) {
                printf("Read From Socket Failed...\n");
                return -1;
        }

        /* Parse and print the response */
        rtInfo = (struct route_info *)malloc(sizeof(struct route_info));
        // ADDED BY BOB
        /* THIS IS THE NETTSTAT -RL code I commented out the printing here and in parse routes */
        #ifdef DEBUG
        fprintf(stdout, "Destination\tGateway\t\tInterface\tSource\n");
        #endif
        for(; NLMSG_OK(nlMsg,len); nlMsg=NLMSG_NEXT(nlMsg,len)) {
                memset(rtInfo, 0, sizeof(struct route_info));
                parseRoutes(nlMsg, rtInfo, gateway);
        }
        free(rtInfo);
        close(sock);

        return 0;
}
int main()
{
        char gateway[255]={0};

        get_gateway(gateway);
        printf("Gateway:%s\n", gateway);

        return 0;
}


台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

親手打造 GNU/Linux 中文環境 (五) - 訊息國際化的解決方案 (gettext 簡介)

謝東翰 ,小虫

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

下面列出了一些容易引發衝碼的文字,寫程式的人,最好都能夠測試下面的字在你的程式中可以正確無誤的被使用。

ASCII(5C) == "\"

A45C么 AE5C娉 B85C稞 C25C擺 A55C功
AF5C珮 B95C鈾 C35C黠 A65C吒 B05C豹
BA5C暝 C45C孀 A75C吭 B15C崤 BB5C蓋
C55C髏 A85C沔 B25C淚 BC5C墦 C65C躡
A95C坼 B35C許 BD5C穀 AA5C歿 B45C廄
BE5C閱 AB5C俞 B55C琵 BF5C璞 AC5C枯
B65C跚 C05C餐 AD5C苒 B75C愧 C15C縷

ASCII(7C) == "|"

AA7C泜 B47C揉 A87C育 BE7C魯 B27C琍
BC7C慝 C67C鸛 A97C尚 B37C逖 BD7C罵
A77C坑 B17C悴 BB7C誡 C57C疊 A67C帆
B07C院 BA7C漏 C47C辮 AB7C咽 B57C稅
BF7C糕 AC7C洱 B67C閏 C07C嚐 AD7C迢
B77C會 C17C舉 A47C弋 AE7C徑 B87C腮
C27C甕 A57C四 AF7C砝 B97C頌 C37C牘

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

1 2