Esempio n. 1
0
/*@null@*/
void *zlst_pop(/*@out@*/ /*@null@*/ void *PHEAD)
{
        struct znode *head;
        struct znode *tail;

        if(!PHEAD) {
                RPTERR("pop: NOT a list");
                return NULL;
        }
        head = *(struct znode **)PHEAD;

        if(!head) {
                RPTINF("pop: from empty list");
                return NULL;
        }
        tail = head->tail;

        if(!(head->next)) {
                RPTINF("pop: from one node list");
                *(struct znode **)PHEAD = NULL;
                return head;
        }

        if(!(tail->prev)) {
                RPTERR("pop: bad list");
                return NULL;
        }

        RPTINF("pop: ok");
        tail->prev->next = NULL;
        head->tail = tail->prev;
        return tail;
}
Esempio n. 2
0
/* to tail */
void zlst_push(void *PHEAD, void *ZNODE)
{
        struct znode *head;
        struct znode *znode;

        if(!ZNODE) {
                RPTERR("push: bad node");
                return;
        }
        znode = (struct znode *)ZNODE;

        if(!PHEAD) {
                RPTERR("push: NOT a list");
                return;
        }
        head = *(struct znode **)PHEAD;

        if(!head) {
                RPTINF("push: into empty list");
                znode->tail = znode;
                znode->next = NULL;
                znode->prev = NULL;
                *(struct znode **)PHEAD = znode;
                return;
        }

        RPTINF("push: ok");
        znode->next = NULL;
        znode->prev = head->tail;
        head->tail->next = znode; /* head->tail is ok! */
        head->tail = znode;
        return;
}
Esempio n. 3
0
/* to head */
void zlst_unshift(void *PHEAD, void *ZNODE)
{
        struct znode *head;
        struct znode *znode;

        if(!ZNODE) {
                RPTERR("unshift: bad node");
                return;
        }
        znode = (struct znode *)ZNODE;

        if(!PHEAD) {
                RPTERR("unshift: NOT a list");
                return;
        }
        head = *(struct znode **)PHEAD;

        if(!head) {
                RPTINF("unshift: into empty list");
                znode->tail = znode;
                znode->next = NULL;
                znode->prev = NULL;
                *(struct znode **)PHEAD = znode;
                return;
        }

        RPTINF("unshift: ok");
        znode->tail = head->tail;
        znode->next = head;
        znode->prev = NULL;
        head->prev = znode;
        *(struct znode **)PHEAD = znode;
        return;
}
Esempio n. 4
0
/* if not return 0, it's up to the caller to free the uninserted node! */
int zlst_insert(void *PHEAD, void *ZNODE)
{
        struct znode *head;
        struct znode *znode;
        struct znode *x;

        if(!ZNODE) {
                RPTERR("insert: bad node");
                return -1;
        }
        znode = (struct znode *)ZNODE;

        if(!PHEAD) {
                RPTERR("insert: NOT a list");
                return -1;
        }
        head = *(struct znode **)PHEAD;

        if(!head) {
                RPTINF("insert: into empty list");
                znode->tail = znode;
                znode->next = NULL;
                znode->prev = NULL;
                *(struct znode **)PHEAD = znode;
                return 0;
        }

        if(head->key > znode->key) {
                RPTINF("insert: %d as head before %d", znode->key, head->key);
                znode->tail = head->tail;
                znode->next = head;
                znode->prev = NULL;
                head->prev = znode;
                *(struct znode **)PHEAD = znode;
                return 0;
        }

        for(x = head; x; x = x->next) {
                if(x->key == znode->key) {
                        RPTINF("insert: %d in list already", znode->key);
                        return -1;
                }

                if(x->key > znode->key) {
                        RPTINF("insert: %d before %d", znode->key, x->key);
                        znode->next = x;
                        znode->prev = x->prev;
                        x->prev->next = znode;
                        x->prev = znode;
                        return 0;
                }
        }

        RPTINF("insert: %d as tail after %d", znode->key, head->tail->key);
        znode->next = NULL;
        znode->prev = head->tail;
        head->tail->next = znode;
        head->tail = znode;
        return 0;
}
Esempio n. 5
0
static int parse_header()
{
        int cnt;

        cnt = fread(&hdr, 1, 16, fd_i); /* file header has 16-byte */
        if(cnt != 16) {
                RPTERR("read header of \"%s\" failed, cnt == %d != 16", file_i, cnt);
                return -1;
        }
        if(DTSDI_MAGIC_CODE1 != hdr.magic_code1 ||
           DTSDI_MAGIC_CODE2 != hdr.magic_code2 ||
           DTSDI_MAGIC_CODE3 != hdr.magic_code3) {
                RPTERR("magic_code1(0x%08X) : 0x%08X", DTSDI_MAGIC_CODE1, hdr.magic_code1);
                RPTERR("magic_code2(0x%08X) : 0x%08X", DTSDI_MAGIC_CODE2, hdr.magic_code2);
                RPTERR("magic_code3(0x%08X) : 0x%08X", DTSDI_MAGIC_CODE3, hdr.magic_code3);
                return -1;
        }

        if(DTSDI_TYPE_SDI_625 == hdr.type) {
                hbi_cnt_per_line = 280;
                total_line_cnt = 625;
        }
        else {
                hbi_cnt_per_line = 268;
                total_line_cnt = 525;
        }

        /* header_ext of version 1 */
        if(DTSDI_FMT_VERSION != hdr.version) {
                cnt = fread(&hdr_ext, 1, 8, fd_i); /* header of version 1 has additional 8-byte */
                if(cnt != 8) {
                        RPTERR("read header_ext of \"%s\" failed, cnt == %d != 8", file_i, cnt);
                        return -1;
                }
        }

        if(DAT_INFO == mode_inf) {
                fprintf(stdout, "DTSDI: version %d", hdr.version);
                fprintf(stdout, ", frame: %u", total_line_cnt);
                fprintf(stdout, ", %s", (DTSDI_SDI_FULL & hdr.flag) ? "full SDI data" : "active video only");
                fprintf(stdout, ", %s", (DTSDI_SDI_10B & hdr.flag) ? "10-bit style" : "8-bit style");
                fprintf(stdout, ", %s", (DTSDI_SDI_HUFFMAN & hdr.flag) ? "huffman compressed" : "uncompressed");

                if(DTSDI_FMT_VERSION != hdr.version) {
                        int i;

                        fprintf(stdout, ", header_ext:");
                        for(i = 0; i < sizeof(hdr_ext); i++) {
                                fprintf(stdout, " %02X", hdr_ext.ext[i]);
                        }
                }
                fprintf(stdout, "\r\n");
        }
        return 0;
}
Esempio n. 6
0
/*@null@*/
void *zlst_delete(void *PHEAD, /*@dependent@*/ void *ZNODE)
{
        struct znode *head;
        struct znode *znode;

        if(!ZNODE) {
                RPTERR("delete: bad node");
                return NULL;
        }
        znode = (struct znode *)ZNODE;

        if(!PHEAD) {
                RPTERR("delete: NOT a list");
                return NULL;
        }
        head = *(struct znode **)PHEAD;

        if(!head) {
                RPTERR("delete: from an empty list");
                return znode;
        }

        if(!(znode->prev) && !(znode->next)) {
                RPTINF("delete: from one node list");
                *(struct znode **)PHEAD = NULL;
                return znode;
        }

        if(!(znode->prev) && (NULL != znode->next)) {
                RPTINF("delete: head node");
                znode->next->tail = znode->tail;
                znode->next->prev = NULL;
                *(struct znode **)PHEAD = znode->next;
                return znode;
        }

        if((NULL != znode->prev) && !(znode->next)) {
                RPTINF("delete: tail node");
                head->tail = znode->prev;
                znode->prev->next = NULL;
                return znode;
        }

        /* (znode->prev) && (znode->next) */
        RPTINF("delete: ok");
        znode->prev->next = znode->next;
        znode->next->prev = znode->prev;
        return znode;
}
Esempio n. 7
0
static int deal_with_parameter(int argc, char *argv[])
{
        int i;

        if(1 == argc) {
                /* no parameter */
                fprintf(stderr, "No binary file to write...\n\n");
                show_help();
                return -1;
        }

        for(i = 1; i < argc; i++) {
                if('-' == argv[i][0]) {
                        if(     0 == strcmp(argv[i], "-h") ||
                                0 == strcmp(argv[i], "--help")) {
                                show_help();
                                return -1;
                        }
                        else if(0 == strcmp(argv[i], "-v") ||
                                0 == strcmp(argv[i], "--version")) {
                                show_version();
                                return -1;
                        }
                        else {
                                RPTERR("wrong parameter: %s", argv[i]);
                                return -1;
                        }
                }
                else {
                        strcpy(file_o, argv[i]);
                }
        }

        return 0;
}
Esempio n. 8
0
/*@temp@*/
void *zlst_search(void *PHEAD, int key)
{
        struct znode *head;
        struct znode *znode;

        if(!PHEAD) {
                RPTERR("search: NOT a list");
                return NULL;
        }
        head = *(struct znode **)PHEAD;

        if(!head) {
                RPTINF("search: in an empty list");
                return NULL;
        }

        for(znode = head; znode; znode = znode->next) {
                if(znode->key == key) {
                        RPTINF("search: got %d", key);
                        return znode;
                }
        }

        RPTINF("search: no %d", key);
        return NULL;
}
Esempio n. 9
0
/*@null@*/
void *zlst_shift(void *PHEAD)
{
        struct znode *head;

        if(!PHEAD) {
                RPTERR("shift: NOT a list");
                return NULL;
        }
        head = *(struct znode **)PHEAD;

        if(!head) {
                RPTINF("shift: from empty list");
                return NULL;
        }

        if(!(head->next)) {
                RPTINF("shift: from one node list");
                *(struct znode **)PHEAD = NULL;
                return head;
        }

        RPTINF("shift: ok");
        head->next->prev = NULL;
        head->next->tail = head->tail;
        *(struct znode **)PHEAD = head->next;
        return head;
}
Esempio n. 10
0
int main(int argc, char *argv[])
{
        unsigned char bbuf[ 204 + 10]; /* bin data buffer */
        char tbuf[1024 + 10]; /* txt data buffer */

        if(0 != deal_with_parameter(argc, argv)) {
                return -1;
        }

        fd_i = url_open(file_i, "rb");
        if(NULL == fd_i) {
                RPTERR("open \"%s\" failed", file_i);
                return -1;
        }

        pkt_addr = 0;
        while(1 == url_read(bbuf, (size_t)npline, 1, fd_i)) {
                fprintf(stdout, "*ts, ");
                b2t(tbuf, bbuf, 188);
                fprintf(stdout, "%s", tbuf);

                fprintf(stdout, "*addr, %"PRIX64", \n", pkt_addr);

                pkt_addr += npline;
        }

        url_close(fd_i);

        return 0;
}
Esempio n. 11
0
void zlst_set_name(void *ZNODE, const char *name)
{
        struct znode *znode;

        if(!ZNODE) {
                RPTERR("set name: bad node");
                return;
        }
        znode = (struct znode *)ZNODE;

        RPTINF("set name: %s", name);
        znode->name = name; /* the string should be const */
        return;
}
Esempio n. 12
0
void zlst_set_key(void *ZNODE, int key)
{
        struct znode *znode;

        if(!ZNODE) {
                RPTERR("set key: bad node");
                return;
        }
        znode = (struct znode *)ZNODE;

        RPTINF("set key: %d", key);
        znode->key = key;
        return;
}
Esempio n. 13
0
int main(int argc, char *argv[])
{
        if(0 != deal_with_parameter(argc, argv)) {
                return -1;
        }

        fd_i = fopen(file_i, "rb");
        if(NULL == fd_i) {
                RPTERR("open \"%s\" failed", file_i);
                return -1;
        }

        if(0 != parse_header()) {
                return -1;
        }

        parse_frame();

        fclose(fd_i);
        return 0;
}
Esempio n. 14
0
int main(int argc, char *argv[])
{
        int cnt;
        char tbuf[LINE_LENGTH_MAX + 10]; /* txt data buffer */
        uint8_t bbuf[LINE_LENGTH_MAX / 3 + 10]; /* bin data buffer */
        char *tag;
        char *pt;

        if(0 != deal_with_parameter(argc, argv)) {
                return -1;
        }

        fd_o = fopen(file_o, "wb");
        if(NULL == fd_o) {
                RPTERR("open \"%s\" failed", file_o);
                return -1;
        }

        while(NULL != fgets(tbuf, LINE_LENGTH_MAX, stdin)) {
                pt = tbuf;
                while(0 == next_tag(&tag, &pt)) {
                        if(0 == strcmp(tag, "*ts") ||
                           0 == strcmp(tag, "*rs") ||
                           0 == strcmp(tag, "*data") ||
                           0 == strcmp(tag, "*pes") ||
                           0 == strcmp(tag, "*es")) {
                                cnt = next_nbyte_hex(bbuf, &pt, LINE_LENGTH_MAX / 3);
                                (void)fwrite(bbuf, (size_t)cnt, 1, fd_o);
                        }
                }
        }

        fclose(fd_o);

        return 0;
}
Esempio n. 15
0
static int parse_frame()
{
        int line_num;
        int frame_num;
        uint16_t EAV;
        uint16_t SAV;

        frame_num = 1;
        line_num = 1;
        while(1) {
                int line;

                /* line head */
                line = line_num;
                if(525 == total_line_cnt) {
                        line += 3;
                        line -= ((line > 525) ? 525 : 0);
                }
                if(DAT_DATA == mode_lin) {
                        fprintf(stdout, "%4u, %4u, ", frame_num, line);
                }

                /* EAV */
                if(0 != get_data(sdi, 4)) {
                        return -1;
                }
                if(!((0x3FF == sdi[0]) &&
                     (0x000 == sdi[1]) &&
                     (0x000 == sdi[2]) &&
                     ((1<<6) & sdi[3]))) { /* H == 1 */
                        RPTERR("bad EAV");
                        return -1;
                }
                EAV = sdi[3];
                if(DAT_DATA == mode_eav) {
                        fprintf(stdout, "%03X(%02X), ", EAV, EAV >> 2);
                }

                /* h-blank data */
                if(0 != get_data(sdi, hbi_cnt_per_line)) {
                        return -1;
                }
                if(DAT_DATA == mode_hbk) {
                        show_blk(sdi, hbi_cnt_per_line);
                }
                if(DAT_INFO == mode_hbk) {
                        show_anc(sdi, hbi_cnt_per_line);
                }

                /* SAV */
                if(0 != get_data(sdi, 4)) {
                        return -1;
                }
                if(!((0x3FF == sdi[0]) &&
                     (0x000 == sdi[1]) &&
                     (0x000 == sdi[2]) &&
                     !((1<<6) & sdi[3]))) { /* H == 0 */
                        RPTERR("bad SAV");
                        return -1;
                }
                SAV = sdi[3];
                if(DAT_DATA == mode_sav) {
                        fprintf(stdout, "%03X(%02X), ", SAV, SAV >> 2);
                }
Esempio n. 16
0
static int deal_with_parameter(int argc, char *argv[])
{
        int i;

        if(1 == argc) {
                /* no parameter */
                fprintf(stderr, "No binary file to process...\n\n");
                show_help();
                return -1;
        }

        for(i = 1; i < argc; i++) {
                if('-' == argv[i][0]) {
                        if(0 == strcmp(argv[i], "-h") ||
                           0 == strcmp(argv[i], "--help")) {
                                show_help();
                                return -1;
                        }
                        else if(0 == strcmp(argv[i], "-v") ||
                                0 == strcmp(argv[i], "--version")) {
                                show_version();
                                return -1;
                        }
                        else if(0 == strcmp(argv[i], "-i") ||
                                0 == strcmp(argv[i], "--inf")) {
                                mode_inf = DAT_INFO;
                        }
                        else if(0 == strcmp(argv[i], "--lin")) {
                                mode_lin = DAT_DATA;
                        }
                        else if(0 == strcmp(argv[i], "--eav")) {
                                mode_eav = DAT_DATA;
                        }
                        else if(0 == strcmp(argv[i], "--sav")) {
                                mode_sav = DAT_DATA;
                        }
                        else if(0 == strcmp(argv[i], "--hbd")) {
                                mode_hbk = DAT_DATA;
                        }
                        else if(0 == strcmp(argv[i], "--hbi")) {
                                mode_hbk = DAT_INFO;
                        }
                        else if(0 == strcmp(argv[i], "--vbd")) {
                                mode_vbk = DAT_DATA;
                        }
                        else if(0 == strcmp(argv[i], "--vbi")) {
                                mode_vbk = DAT_INFO;
                        }
                        else if(0 == strcmp(argv[i], "-a") ||
                                0 == strcmp(argv[i], "--act")) {
                                mode_act = DAT_DATA;
                        }
                        else if(0 == strcmp(argv[i], "-8")) {
                                is_8_bit = 1;
                        }
                        else if(0 == strcmp(argv[i], "-d")) {
                                is_dec = 1;
                        }
                        else {
                                RPTERR("Wrong parameter: %s", argv[i]);
                                return -1;
                        }
                }
                else {
                        strcpy(file_i, argv[i]);
                }
        }

        return 0;
}