Annotation of 43BSDReno/contrib/isode-beta/pepsy/doc/overview.ms, revision 1.1

1.1     ! root        1: .NH 1
        !             2: Overview of pepsy system
        !             3: .XS
        !             4: Overview of pepsy system
        !             5: .XE
        !             6: .PP
        !             7: This section describes how the various parts fit together to make
        !             8: the system work.
        !             9: The principle behind pepsy is fairly simple.
        !            10: The \fBASN.1\fR is summarised as tables of integers.
        !            11: These tables are read by driver routines which encode or decode
        !            12: data to or from the internal format that \fBISODE\fR \fBOSI\fR implementation uses.
        !            13: In \fBISODE\fR specific functions are generated for each \fBASN.1\fR type
        !            14: defined in contrast the pepsy merely generates a new table of data which
        !            15: is far far smaller.
        !            16: .PP
        !            17: As there is a great deal of effort invested in the \fBISODE\fR interface to the
        !            18: encoding/decoding routines pepsy automatically provides macros which map
        !            19: the original functions into the appropriate function call of a driver.
        !            20: This allows existing posy using code to switch to the
        !            21: pepsy system with \fBno changes\fR
        !            22: to the code \fBprovided\fR no function pointers are used to the original
        !            23: \fBISODE\fR functions.
        !            24: Even when there are function pointers used the changes are very simple and
        !            25: take only a few hours to implement.
        !            26: .NH 2
        !            27: Brief description of the use of the pepsy system.
        !            28: .XS
        !            29: A Brief description of the use of the pepsy system.
        !            30: .XE
        !            31: .NH 3
        !            32: Outline of the files produced under the pepsy system.
        !            33: .XS
        !            34: Outline of the files produced under the pepsy system.
        !            35: .XE
        !            36: .PP
        !            37: The pepsy system consists of a program called \fIposy\fR
        !            38: which translates \fBASN.1\fR modules into a set of tables, called \fIposy\fR at the moment,
        !            39: and library of driver routines, called \fIlibpepsy.a\fR.
        !            40: Running this \fIposy\fR program on the \fBASN.1\fR file will produce several
        !            41: files.
        !            42: If the name of the \fBASN.1\fR module is \fBMODULE\fR the following files
        !            43: are generated:
        !            44: .I
        !            45: .IP MODULE-types.h
        !            46: .R
        !            47: which contains \fBC\fR structure definitions.
        !            48: The user of the library provides data as a linked list of
        !            49: these \fBC\fR data structures and expects to receive data back as a similar
        !            50: linked list.
        !            51: These data structures are exactly the same as those produced by the original
        !            52: \fBISODE\fR \fIposy\fR so that existing software written for the old \fIposy\fR
        !            53: program needs no change.
        !            54: For details on the \fBC\fR data structures types generated
        !            55: see the documentation of the original \fIposy\fR program in
        !            56: volume 4 Chapter 5 of the \fBISODE\fR manuals.
        !            57: .I
        !            58: .IP MODULE_tables.c 
        !            59: .R
        !            60: This file contains the tables generated by the new \fIposy\fR program.
        !            61: These tables consist of three parts, the first which contains the summary of
        !            62: \fBASN.1\fR types.
        !            63: Each type is summarised as an array of a primitive type, \fBstruct pte\fR,
        !            64: for encoding and decoding, and \fBstruct ptpe\fR for printing.
        !            65: As implied there is one array for each type for each of encoding, decoding and
        !            66: printing as specified when \fIposy\fR is run.
        !            67: The next part contains up to three tables of pointers to these arrays.
        !            68: Each of the three different types of arrays, encoding, decoding and printing,
        !            69: has its own table of pointers.
        !            70: Finally there is the module type definition which contains contains pointers
        !            71: to these tables and some other useful information about the module such as its
        !            72: name.
        !            73: This module type structure, which is \fBtypedef\fRed to \fBmodtyp\fR,
        !            74: is the only piece of data which is global, all the
        !            75: rest of the data is static and is only addressable via the \fBmodtyp\fR
        !            76: data structure. 
        !            77: This provides a kind of object oriented approach to handling the tables.
        !            78: Once you are passed a pointer to an \fBASN.1\fR's \fBmodtyp\fR structure
        !            79: you can encode, decode and print any of its types by calling the appropriate
        !            80: \fBlibpepsy.a\fR routine with its type number.
        !            81: .I
        !            82: .IP MODULE_pre_defs.h
        !            83: .R
        !            84: This file contains \fB#define\fRs symbol of each of the \fBASN.1\fR types
        !            85: to its type number, which is used when calling a \fBlibpepsy.a\fR routine.
        !            86: Each symbol is \fB_Ztype-nameMODULE\fR where \fItype-name\fR is the name of
        !            87: the type with dashes (\fB-\fR) turned into underscores (\fB_\fR) and
        !            88: \fIMODULE\fR is the name of the module.
        !            89: For example of the \fBASN.1\fR universal type \fIGraphicString\fR would
        !            90: have the \fB#define\fR symbol \fB_ZGraphicStringUNIV\fR.
        !            91: The \fI_Z\fR is prepended to try to make the symbols unique.
        !            92: This file also contains and extern declaration for the \fBmodtyp\fR data
        !            93: for its module.
        !            94: .I
        !            95: .IP MODULE_defs.h
        !            96: .R
        !            97: This file contains macros for  all the encoding, decoding and printing
        !            98: functions that the \fIpepy\fR program would have for these \fBASN.1\fR
        !            99: types.
        !           100: This allows much of the code that uses the routines generated by running
        !           101: the old \fIposy\fR program and taking its output and running \fIpepy\fR on
        !           102: augmented \fBASN.1\fR output can be recompiled unchanged.
        !           103: If the code used pointers to these functions it is necessary to change it
        !           104: to pass around the type numbers instead and to call appropriately call
        !           105: a \fBlibpepsy.a\fR library routine with the type number.
        !           106: As pointers to the printing routines in ISODE are passed as arguments
        !           107: a \fB#define\fR is provided to turn the argument into the pair of arguments,
        !           108: type number and pointer to \fBmodtyp\fR structure, which are needed to allow
        !           109: the diagnostic printing code to work with no change for
        !           110: the current \fBISODE\fR stack.
        !           111: This file also contains a \fB#include\fR of the \fIMODULE_pre_defs.h\fR file.
        !           112: .PP
        !           113: As the \fIMODULE-types.h\fR file \fB#include\fR's the \fIMODULE_defs.h\fR
        !           114: file no further \fB#include\fRs need to be added to the files using the
        !           115: encoding/decoding/printing functions.
        !           116: This means that code written to use posy/pepy system may need no change at all
        !           117: and the only effort required is to change the Makefile to use the pepsy
        !           118: system.
        !           119: If there is code changes required it would most likely be because function
        !           120: pointers are used to reference the functions generated by posy.
        !           121: If only the \fIpepy\fR system was used,
        !           122: not posy then pepy,
        !           123: with code placed inside action statements then quite a large amount of work
        !           124: may be needed to change over to the new system, depending on how large and
        !           125: complex the \fIpepy\fR module is.
        !           126: .NH 3
        !           127: Outline of the pepsy library.
        !           128: .XS
        !           129: Outline of the pepsy library.
        !           130: .XE
        !           131: .IP enc.c
        !           132: This contains the routines that encode data from the \fBC\fR data structures
        !           133: into \fBISODE\fR's \fBPElement\fR linked list data structure which it
        !           134: uses for all presentation data.
        !           135: The most important function to pepsy users is \fBenc_f\fR which called to
        !           136: encode a particular type.
        !           137: It is passed the type number and a pointer to \fBmodtyp\fR structure for that
        !           138: module and then the rest of the arguments which are passed to an encode
        !           139: function generated by \fIposy\fR/\fIpepy\fR system.
        !           140: See the documentation in Volume 4, "The Applications Cookbook",
        !           141: Section 6.4 called "Pepy Environment".
        !           142: Most of these latter arguments are ignored, only \fBparm\fR and \fBpe\fR,
        !           143: are used.
        !           144: .PP
        !           145: Contrary to what the \fBISODE\fR documentation says these ignored parameters
        !           146: are hardly ever used by existing code.
        !           147: We have not found a single case where used for encoding a named type,
        !           148: which is all that the user can reference anyway,
        !           149: so we don't see any problems with ignoring these other parameters.
        !           150: Hopefully one day they can be thrown away entirely, until then they are
        !           151: actually passed the the encoding function.
        !           152: .PP
        !           153: The rest of the functions are mostly recursive routines which encode a
        !           154: particular type of table entry.
        !           155: For example \fBSEQUENCE\fR is encoded by \fBen_seq\fR which may call itself
        !           156: or others to encode the types from which it is built up.
        !           157: The function \fBen_type\fR builds up a simple type and \fBen_obj\fR encodes
        !           158: a new type (object) and so on with other functions.
        !           159: There are a few utility routines in the file such as \fBsame\fR which
        !           160: determines whether the value is the same as the default value also.
        !           161: .IP dec.c 
        !           162: This file contains the decoding routines that translate
        !           163: presentation data into \fBC\fR data structures defined in
        !           164: the \fBMODULE-types.h\fR
        !           165: is like \fIenc.c\fR.
        !           166: It is very much like the file \fIenc.c\fR except the routines do the
        !           167: reverse tasks
        !           168: The routines are structured in a very similar way.
        !           169: We have \fBdec_f\fR which is called by the user to decode a type
        !           170: and like \fBenc_f\fR takes the same arguments as the decoding functions
        !           171: generated by \fIposy\fR with two additions, the type number and a pointer
        !           172: to the \fBmodtyp\fR structure for that module.
        !           173: Likewise the other functions are very much like those of enc.c
        !           174: .IP prnt.c
        !           175: This file contains the routines that print the presentation data in a format
        !           176: similar to that generated by \fIpepy\fR's printing functions.
        !           177: It's main function \fBprnt_f\fR is takes the same arguments as the printing
        !           178: function generated by \fIpepy\fR as well as the now familiar type number
        !           179: and \fBmodtyp\fR pointer.
        !           180: The functions are modeled on the decoding routines as it has similar job to.
        !           181: The only difference is that instead of storing the decoded data
        !           182: into a \fBC\fR data structure it is nicely printed out.
        !           183: .IP fr.c
        !           184: This file contains code to free the data structures
        !           185: defined in \fBMODULE-types.h\fR.
        !           186: Likewise if the \fB-f\fR flag is given when generating the types file it also
        !           187: includes macros in the types file which replace the freeing functions generated
        !           188: by ISODE's \fIposy\fR.
        !           189: The function that the user calls us \fBfre_obj\fR which takes a pointer to
        !           190: the data structure, its decoding table entry and a pointer
        !           191: to the \fBmodtyp\fR structure for the module. 
        !           192: The freeing is based on the decoding routines except instead of decoding all
        !           193: it does is free each part of the data structure, which might involve recursive
        !           194: calls, then it frees the data structure at the end.
        !           195: .IP util.c
        !           196: This contains the utility routines used by more than one of the above files.
        !           197: This is mostly diagnostic routines at the moment, more general routines could
        !           198: be included in here.
        !           199: If there is an error at the moment which it can't recover from it just prints
        !           200: out a message on standard error and calls \fBexit\fR.
        !           201: Not perfect and this is something that will need work.
        !           202: .IP main.c
        !           203: This contains code to perform a series of tests on the \fIpepsy\fR library
        !           204: which is a useful check to see whether any of the routines has been broken
        !           205: by any changes made.
        !           206: It basically loops through a whole series of test cases.
        !           207: Each test case is encoded from some built in test data and then decoded
        !           208: and checked to see if the data has changed in the transfer.
        !           209: If it is compiled with \fI-DPRNT=1\fR the encoded data is also printed
        !           210: out to check the printing routines which generates a vast amount of output.
        !           211: Finally the free routines are used to free the allocated data, although it
        !           212: can not directly check the free routines to see if they work, it can be used
        !           213: with a malloc tracing package to check that the routines work.
        !           214: .IP test_table.h
        !           215: This contains the test cases that \fImain.c\fR program runs.
        !           216: Each entry in the table corresponds to a type.
        !           217: One of the fields is count of how many times that type is to be tested
        !           218: to try out the different possibly data values it might have.
        !           219: .IP "pep.h and pepdefs.h"
        !           220: These files contain the definition of types used for the tables that drive the
        !           221: encoding/decoding/printing routines.
        !           222: All the constants used in that table are defined here via \fB#define\fRs.
        !           223: The \fBmodtyp\fR structure is defined in \fIpepdefs.h\fR.
        !           224: .IP "t1.py and t2.py"
        !           225: These are test \fBASN.1\fR modules that are used by \fImain.c\fR routines
        !           226: to check the \fIpepsy\fR library.
        !           227: The file \fIt1.py\fR contains the majority of different types with
        !           228: a few of a different module provided in \fIt2.py\fR.
        !           229: This allows the testing of the code for handling \fBASN.1\fR
        !           230: external references, i.e. references to types defined in other, external,
        !           231: modules.
        !           232: .NH 3
        !           233: New files in the pepy directory
        !           234: .XS
        !           235: New files in the pepy directory
        !           236: .XE
        !           237: .IP "etabs.c, dtabs.c and ptabs.c"
        !           238: These files contain the code to generate the encoding/decoding/printing tables.
        !           239: The main routine in \fIetabs.c\fR is \fBtenc_typ\fR which is called
        !           240: on each \fBASN.1\fR type
        !           241: to generate an array of entries which describe how to encode that type.
        !           242: See the details section for more information about how the
        !           243: table entries function.
        !           244: Similarly \fIdtabs.c\fR contains the routine \fBtdec_typ\fR which is
        !           245: called on each type to generate its decoding table entries.
        !           246: Likewise \fBtprnt_typ\fR routine generates the arrays of table entries for
        !           247: the printing tables.
        !           248: This function is in \fIptabs.c\fR.
        !           249: .IP "dfns.c"
        !           250: This file contains miscellaneous string handling routines and hash table
        !           251: routines that don't really belong anywhere else.
        !           252: Some of the routines could be cleaned up in that they tend not to free memory
        !           253: they use.
        !           254: .IP mine.h
        !           255: This file contains the definitions for the hash table(s) that are used to keep
        !           256: track of the \fBASN.1\fR types.
        !           257: This could probably be done with out a hash table, should anyone want to
        !           258: clean this up, feel welcome.
        !           259: The lookup function is in \fIdfns.c\fR.
        !           260: .IP pass2.h
        !           261: This file has most of the \fB#define\fRs for the table generating program.
        !           262: Most of the prefixes and suffixes of function names and files names are defined
        !           263: here so, hopefully, the names can be changed by merely changing the definition.
        !           264: This contains most of the important definitions needed by the changes
        !           265: to the \fIposy\fR program needed to generate tables.
        !           266: .IP posy.h
        !           267: This contains the definition of a symbol which is now needed outside of the
        !           268: the main routine and the yacc file.
        !           269: By putting it here we can include it any file that needs to know it with out
        !           270: putting in any that doesn't need it and with out including all the other
        !           271: definitions that occur in \fIpepy.h\fR.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.