亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? asn_constr.c

?? ASN.1語法解析代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*****************************************************************************
File:     asn_constr.c
Contents: Functions to generate .c files as part of ASN_GEN program.
System:   ASN development.
Created:
Author:   Charles W. Gardiner <gardiner@bbn.com>

Remarks:

COPYRIGHT 1995 BBN Systems and Technologies, A Division of Bolt Beranek and
    Newman Inc.
150 CambridgePark Drive
Cambridge, Ma. 02140
617-873-4000
*****************************************************************************/

const char asn_constr_rcsid[]="$Header: /nfs/sub-rosa/u2/IOS_Project/ASN/Dev/rcs/cmd/asn_gen/asn_constr.c,v 1.17 1995/09/25 22:10:10 gardiner Exp $";
char asn_constr_id[] = "@(#)asn_constr.c 282P";

#include "includes.h"
#include "asn_obj.h"
#include "asn_gen.h"

struct tagq
    {
    struct tagq *next;
    long tag;
    };

static void addq(struct tagq **, long),
    checkq(struct tagq *, long),
    constr_def(int, int *, int *, long*),
    find_path(char *, char *),
    freeq(struct tagq **),
    print_item(char *, char *, long, int, int, int),
    print_of(int, int),
    set_dup(char *classname, long tag);
static int constr_item(int, int, int, int),
    optional_def(), set_options(int, char *, char *);

static char dot[] = ".",
    opener[] =
"%s::%s()\n\
{\n",
    ptr_opener[] =
"%s *%s::operator->()\n{\nreturn (%s *)_ptr;\n}\n\n\
void %s::operator=(%s *objp)\n{\n_ptr = objp;\nobjp->_supra = this;\n\
objp->fill_upward((objp->_flags & ASN_FILLED_FLAG));\n}\n\n\
void %s::_point()\n{\nif (_ptr) clear();\n_ptr = (AsnObj *)new %s;\n\
_set_ptr();\n}\n\n",
    pointer_tag_xw[] = "_tag = 0x%X;\n\
_type = %s;\n\
ptr = 0;\n\
_flags |= ASN_POINTER_FLAG;\n",
    first_item[] = "_sub = (AsnObj *)%s%s;\n",
    any_item[] = "%s%s_supra = this;\n",
    later_item[] = "%s%s_next = (AsnObj *)%s%s;\n",
    table_opener[] =
"AsnObj *objp = objid;\n\
_tag = _type = %s;\n\
_flags |= ASN_TABLE_FLAG;\n\
_sub = objp;\n",
    table_item[] =
"objp->_next = &objp[1];\n\
objp++;\n",
    table_write[] = "objp->_valp = new UcharArray((const uchar *)\"%s\", %d);\n",
    derived_table[] = "%s::%s()\n{\n\
wherep = new UcharArray((uchar *)\"%s\", %d);\n}\n\n",
    pointer_type_tag_w[] = "_tag = _type = %s;\n\
_ptr = 0;\n\
_flags |= ASN_POINTER_FLAG;\n",
    type_tag_w[] = "%s%s_tag = %s%s_type = %s;\n",
    type_xw[] = "_type = 0x%X;\n",
    tag_xw[] = "%s%s_tag = 0x%X;\n",
    dup_func[] =
"AsnDup *%s::_dup()\n\
{\n\
%s *objp = new %s;\n\
_set_pointers(objp);\n\
return objp;\n\
}\n\n",
    index_op[] =
"%s& %s::operator[](int index)\n\
{\n\
%s *objp = (%s *)index_op(index);\n\
return *objp;\n\
}\n\n",
    boundset[] =       "%s._min = %d;\n%s._max = %d;\n",
    finale[] = "}\n\n";

struct tagq *lasttagqp = (struct tagq *)0;

void construct(int fd)
{
/*
Function: Creates constructors for the things defined an ASN.1 file.
Inputs: fd is file descriptor for ASN.1 file
	str is the stream descriptor for the output
Outputs: C code written to 'str'
Procedure:
1. WHILE have a next token
       Switch on state
2. Case GLOBAL
	IF reading global returns GLOBAL, return
   Case IN_DEFINITION
	IF token is not '{' (rerun of table) AND reading definition returns
	    less than 0, return
	IF STATE is not GLOBAL, construct definition
3. Case IN_ITEM
   Case SUB_ITEM
	Read the item
	IF token is '}' OR ',' (indicating the end of an item)
	    Construct the item
   Default: Exit with fatal message
4. Search name table for pointer items (starting with '_') that have no
	parent that's a passthrough, i.e. no definition
	Make a definition for any found
*/
char *c;
int did, tmp, classgeneration, numdefineds;
struct name_table *ntbp, *ptbp;
struct parent *parentp;
long parenttype = -1;
if (state != SUB_ITEM) end_definition();
else end_item();
for (lasttagqp = (struct tagq *)0, classgeneration = numdefineds = 0;
    get_token(fd, token, (char)0); )
    {
    switch (state)
    	{
    case GLOBAL:			
	if (read_global(fd) < 0) break;
	break;

    case IN_DEFINITION:                                     /* got ::= */
	if (*token != '{' && read_definition(fd, -1) < 0) return;
	if (state != GLOBAL) constr_def(fd, &classgeneration, &numdefineds,
            &parenttype);
    	break;
							    /* step 3 */
    case IN_ITEM:                                     /* got '{' */
    case SUB_ITEM:
	if (read_item(fd, -1, construct) < 0) return;
	if ((*token == ',' || *token == '}') &&        /* end of item */
	    !constr_item(fd, classgeneration, numdefineds, parenttype))
	    return;
	break;

    default:
	fatal(4, (char *)state);
	}
    }
for (ntbp = (struct name_table *)name_area.area; ntbp->name; ntbp++)
    {
    if (*(c = ntbp->name) != '_') continue;
    for (parentp = &ntbp->parent; parentp; parentp = parentp->next)
	{
	ptbp = &((struct name_table *)name_area.area)[parentp->index];
	if ((ptbp->flags & ASN_FALSE_FLAG)) break;
	}
    if (parentp) continue;
    cat(classname, c);
    if ((did = (test_dup(classname, &tmp) & ~ASN_OF_FLAG)))
        print_of(did, tmp);
    for (ptbp = (struct name_table *)name_area.area; ptbp->name &&
	strcmp(ptbp->name, &c[1]); ptbp++);
    fprintf(outstr, ptr_opener, &c[1], c, &c[1], c, &c[1], c, &c[1]);
    fprintf(outstr, opener, c, c);
    fprintf(outstr, pointer_type_tag_w, find_define(ptbp->type));
    fprintf(outstr, finale);
    }
}

static void constr_def(int fd, int *classgenerationp, int *numdefinedsp,
    long *parenttypep)
{
/**
1. IF token is '{' OR line end
        IF no tag, use type as tag
        Clear did and prevname
        IF token is { AND (type is BIT STRING OR INTEGER OR ENUMERATED)
            Set enumerated flag
        See if it needs dup stuff
        IF it's a primitive AND no enumerated flag, clear duped flag
        IF it needs dup for other than 'OF' AND it's not imported
    	    Print the OF stuff
        IF it's not imported AND (there's a '{' OR it's an OF OR it's a
    	    pointer)
    	    IF it's a pointer, print pointer opener
            Print opener C text
2. IF token is {
    Set parenttype to type
    IF it's not imported
        IF it's a defined item, print flag setting message
        Clear that flag
        IF it's a table
            Print table opener
            Get the path from the definer to the defined
        ELSE
            IF it needed a dup function, print dup stuff
            IF not universal tag, print tag msg
	    IF not derived from its type, print _type message
    Go to IN_ITEM state OR SUB_ITEM, depending on current state
3. ELSE  (line end)
    IF it's not a passthrough
        IF it needed a dup function, print dup stuff
        Make itemname out of subclass
        IF this is a pointer
	    IF it's part of an OF, print dup message
	    Print point, tag & type messages
        ELSE
            IF there's a subtype, use "array" as the itemname
            Print item with flags, except for OF flag
	    IF there's max, print min/max
	    IF there's a subclass AND its type is primitive
                Use that as the subtype
	    IF there's (now) a subtype
	        Print the tag & typemessage
	        IF there's a subclass AND this item has a max, set its bounds
        Print finale
    Clear classname
    Go to GLOBAL state
**/
char *c;
int did, tmp;
struct name_table *ntbp;
struct parent *parentp;
if (curr_pos <= real_start) curr_pos = lseek(fd, 0L, 1);
if (tag < 0) tag = type;
else if (type > 0) tag |= (type & ASN_CONSTRUCTED);
if (*token == '{' &&
    (type == ASN_BITSTRING || type == ASN_INTEGER ||
    type == ASN_ENUMERATED) && !(option & ASN_OF_FLAG))
    flags |= ASN_ENUM_FLAG;
did = test_dup(classname, &tmp);
if (type >= 0 && type < ASN_CONSTRUCTED && !(flags & ASN_ENUM_FLAG))
    did &= ~(ASN_DUPED_FLAG);
if ((did & ~(ASN_OF_FLAG)) &&
    curr_pos > real_start) print_of(did, tmp);
if (curr_pos > real_start &&
    (*token == '{' || (option & (ASN_OF_FLAG | ASN_POINTER_FLAG))))
    {
    if (option == ASN_POINTER_FLAG)
	{
        c = replace_name(classname)->name;
	fprintf(outstr, ptr_opener, &c[1], c, &c[1], c, &c[1], c, &c[1]);
	}
    else c = classname;
    fprintf(outstr, opener, c, c);
    }
							    /* step 2 */
if (*token == '{')
    {
    state = IN_ITEM;
    if ((type == ASN_BITSTRING || type == ASN_INTEGER ||
        type == ASN_ENUMERATED) && !(option & ASN_OF_FLAG))
        flags |= ASN_ENUM_FLAG;
    *parenttypep = type;
    if (curr_pos > real_start)
    	{
    	if ((flags & ASN_DEFINED_FLAG))
            fprintf(outstr, "_flags |= ASN_DEFINED_FLAG;\n");
    	else if ((flags & ASN_TABLE_FLAG))
            {
            ntbp = find_name(classname);
            fprintf(outstr, table_opener, find_define(ntbp->type));
	    ntbp = &((struct name_table *)name_area.area)[ntbp->parent.index];
	    for (parentp = &ntbp->parent, *numdefinedsp = 0; parentp->next;
                (*numdefinedsp)++, parentp = parentp->next);
            }
        else
            {
            if ((did & ASN_DUPED_FLAG)) set_dup(classname, tag);
            if (!did && tag >= ASN_APPL_SPEC && tag != ASN_CHOICE)
                fprintf(outstr, tag_xw, "", "", tag);
            }
        }
    if (type >= 0 && type < ASN_CONSTRUCTED && subtype < 0) subtype = type;
    *classgenerationp = find_name(classname)->generation;
    end_item();
    did = 0;
    }
					        /* step 3 */
else                /* no further definition */
    {
    if (curr_pos > real_start && (option & (ASN_OF_FLAG | ASN_POINTER_FLAG)))
        {
        if ((did & ASN_DUPED_FLAG)) set_dup(classname, tag);
        cat(itemname, subclass);
        if (*itemname != '_') *itemname |= 0x20;
        else itemname[1] |= 0x20;
        if (*subclass) ntbp = replace_name(subclass);
        else ntbp = 0;
        if (option == ASN_POINTER_FLAG)
	    {
	    ntbp = replace_name(&subclass[1]);
	    if (ntbp->type == ntbp->tag || ntbp->tag == 0xFFFFFFFF)
                fprintf(outstr, pointer_type_tag_w,
                    find_define(ntbp->type));
	    else fprintf(outstr, pointer_tag_xw, ntbp->tag,
                find_define(ntbp->type));
	    }
        else
            {
            if (subtype >= 0) cat(itemname, array_w);
            print_item((*itemname == '_')? &itemname[1]: itemname, prevname,
                (long)0,  (option & ~(ASN_OF_FLAG)), 0, 0);
            if (max) fprintf(outstr, "_min = %d;\n_max = %d;\n", min, max);
            if (ntbp && ntbp->type < ASN_CONSTRUCTED) subtype = ntbp->type;
            if (subtype >= 0)
	        {
                fprintf(outstr, type_tag_w, itemname, dot, itemname, dot,
                    find_define(subtype));
	        if (*subclass && ntbp->max) fprintf(outstr, boundset, itemname,
                    ntbp->min, itemname, ntbp->max);
	        }
	    }
        fprintf(outstr, finale);
        }
    end_definition();
    }
}

static int constr_item(int fd, int classgeneration, int numdefineds,
    int parenttype)
{
/**
1. IF it's a DEFINED BY
 	IF the definer has no child, syntax error
 	Set type to CONSTRUCTED ANY
 	Clear defined_by
   IF (explicit OR CHOICE OR ANY) AND have a tag AND not ENUM
 	Set explicit option
   IF no tag so far AND type is a universal primitive, use type as tag
   ELSE IF this item is explicitly tagged AND it;s not a subdefined
 	primitive, set the constructed bit in the tag
   ELSE IF have a type, then 'Or' the constructed bit of the type into the tag
   IF ENUM is set in flags, set it in option
2. IF it's an imported item, do nothing
   ELSE IF it's a table item
 	IF no type, use itemname
 	ELSE use class name
 	Print the table line
 	IF have a name, print line to create sub-item
 	IF it's not the last item, print about next item
   ELSE IF it's not a FUNCTION
 	IF there's no itemname, make one from type or subclass
        IF class is enumerated

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩黄色小视频| 亚洲欧美日韩国产手机在线| 91免费精品国自产拍在线不卡| 日本成人在线看| 亚洲国产成人高清精品| 亚洲精品乱码久久久久久久久| 久久九九久久九九| 26uuu另类欧美| 26uuu亚洲综合色| 国产亚洲综合色| 久久久久9999亚洲精品| 国产网站一区二区| 国产欧美日韩不卡免费| 亚洲国产精品成人综合| 中文字幕日韩一区| 日韩毛片精品高清免费| 亚洲综合色丁香婷婷六月图片| 一区二区三区国产豹纹内裤在线| 夜夜爽夜夜爽精品视频| 日韩精品亚洲一区| 韩国毛片一区二区三区| 国产成人综合视频| 91色在线porny| 欧美精品第一页| 日韩欧美国产综合在线一区二区三区| 精品奇米国产一区二区三区| 久久九九久久九九| 亚洲欧洲在线观看av| 亚洲电影一级黄| 久99久精品视频免费观看| 成人激情开心网| 欧美在线999| 精品国产乱码久久久久久浪潮| 2021国产精品久久精品| 亚洲免费在线视频| 青椒成人免费视频| 成人深夜在线观看| 4438成人网| 亚洲狼人国产精品| 日韩精品亚洲专区| 成人av动漫网站| 91精品视频网| 亚洲欧洲中文日韩久久av乱码| 日韩国产高清影视| 成人激情小说网站| 日韩亚洲欧美在线观看| 国产精品久久久久久久久搜平片 | 激情六月婷婷综合| 色婷婷国产精品综合在线观看| 日韩欧美国产高清| 亚洲乱码国产乱码精品精的特点| 免费在线观看视频一区| 色综合婷婷久久| 欧美变态tickling挠脚心| 一区二区三区在线视频播放| 国产激情91久久精品导航| 欧美蜜桃一区二区三区| 国产精品久久午夜| 国产又黄又大久久| 欧美一区二区在线免费观看| 最新国产の精品合集bt伙计| 美女一区二区在线观看| 欧美亚洲国产一区二区三区| 欧美国产乱子伦 | 老司机精品视频一区二区三区| 91性感美女视频| 亚洲国产精品99久久久久久久久| 天堂成人免费av电影一区| 一本大道综合伊人精品热热| 国产性色一区二区| 国内精品久久久久影院薰衣草 | 麻豆免费看一区二区三区| 欧美日韩另类一区| 亚洲情趣在线观看| 懂色av一区二区在线播放| 久久久噜噜噜久久中文字幕色伊伊| 日韩av电影天堂| 欧美色精品在线视频| 亚洲狠狠爱一区二区三区| 91国偷自产一区二区三区成为亚洲经典| 中文乱码免费一区二区| 国产成人在线网站| 国产亚洲一区二区三区在线观看| 黑人精品欧美一区二区蜜桃| 欧美一区二区观看视频| 奇米影视7777精品一区二区| 欧美一卡2卡3卡4卡| 麻豆免费精品视频| 精品国产3级a| 粉嫩高潮美女一区二区三区| 中文久久乱码一区二区| 99久久伊人精品| 一区二区成人在线观看| 欧美亚洲综合久久| 男男成人高潮片免费网站| 日韩欧美一卡二卡| 国产黄人亚洲片| 午夜视频在线观看一区| 7777精品伊人久久久大香线蕉| 免费欧美在线视频| 国产日本亚洲高清| 成人av在线影院| 亚洲国产精品一区二区久久恐怖片| 欧美日韩不卡一区| 韩国三级中文字幕hd久久精品| 久久精品在线观看| 91小视频免费看| 午夜精品爽啪视频| 久久午夜国产精品| 色婷婷精品大视频在线蜜桃视频 | 日韩久久免费av| 成人免费高清视频在线观看| 亚洲制服欧美中文字幕中文字幕| 777色狠狠一区二区三区| 国产精品一区二区黑丝| 亚洲丝袜精品丝袜在线| 欧美一区二区网站| 99视频精品全部免费在线| 日韩在线一区二区三区| 国产日韩av一区二区| 91成人免费电影| 免费高清在线视频一区·| 国产欧美视频一区二区三区| 欧美日韩精品一区二区三区蜜桃| 久久99精品久久久久久动态图| 亚洲色图制服诱惑 | 六月婷婷色综合| 亚洲欧美一区二区久久| 欧美第一区第二区| 欧美日韩三级视频| 不卡的电影网站| 国产中文一区二区三区| 亚洲一区在线观看免费观看电影高清 | 久久久久国产免费免费| 欧美性生交片4| 99久久精品免费| 国产真实精品久久二三区| 天天色 色综合| 国产精品久99| 国产香蕉久久精品综合网| 制服丝袜成人动漫| 欧美中文字幕一二三区视频| www..com久久爱| 国产麻豆成人精品| 久久99精品久久久久久动态图 | 美女被吸乳得到大胸91| 一区二区高清视频在线观看| 中文一区二区在线观看| 久久欧美中文字幕| 精品国产一区二区三区久久久蜜月 | 国产高清成人在线| 美国欧美日韩国产在线播放| 亚洲国产视频在线| 一区二区三区不卡视频| 亚洲色图欧美偷拍| 国产精品福利一区二区| 久久精品在线免费观看| 久久久五月婷婷| 亚洲精品一区二区三区影院| 日韩欧美不卡一区| 欧美成人精品3d动漫h| 欧美一二三区在线观看| 欧美一区二区啪啪| 日韩一区二区三区观看| 欧美精品亚洲二区| 欧美精品自拍偷拍| 欧美一区二区三区公司| 亚洲欧洲av在线| 中文字幕一区二区三区乱码在线| 国产精品美女久久久久久久久久久 | 五月婷婷久久丁香| 亚洲一区二区在线免费看| 亚洲国产wwwccc36天堂| 日韩国产欧美视频| 久久99精品国产麻豆不卡| 国产一级精品在线| 成人午夜精品在线| 欧洲激情一区二区| 在线成人av网站| 精品久久久久久综合日本欧美| 久久亚洲免费视频| 亚洲色图视频免费播放| 亚洲成人久久影院| 国产老肥熟一区二区三区| av欧美精品.com| 欧美日本一区二区| 国产欧美一区二区三区沐欲| 亚洲男女毛片无遮挡| 另类综合日韩欧美亚洲| 成人av在线一区二区三区| 欧美日韩国产精选| 中文字幕第一区二区| 亚洲国产中文字幕在线视频综合| 久久精品99久久久| 91蝌蚪porny| 精品伦理精品一区| 一区二区三区美女| 国产激情一区二区三区四区| 欧美日韩国产高清一区二区三区 | 成人综合激情网|