RosettaCode proposal: RFC diagram converter
qznc
qznc at web.de
Tue Oct 1 12:44:07 PDT 2013
On Monday, 30 September 2013 at 23:27:48 UTC, bearophile wrote:
> Inspired by a talk by Eden in the StrangeLoop 2013 conference,
> I'd like to create a new small Rosettacode Task. Perhaps
> someone here is able to review this task description a little,
> or even to implement the D solution:
>
> - - - - - - -TASK DESCRIPTION START- - - - - - - - -
>
> Task Title: ASCII art diagram converter
>
>
> Given the RFC 1035 message diagram from Section 4.1.1 (Header
> section format) as a string:
> http://www.ietf.org/rfc/rfc1035.txt
>
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
> | ID |
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
> |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
> | QDCOUNT |
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
> | ANCOUNT |
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
> | NSCOUNT |
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
> | ARCOUNT |
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
>
>
> Where:
>
> ID is 16 bits
> QR = Query (0) or Response (1)
> Opcode = Four bits defining kine of query:
> 0: a standard query (QUERY)
> 1: an inverse query (IQUERY)
> 2: a server status request (STATUS)
> 3-15: reserved for future use
> AA = Authoritative Answer bit
> TC = Truncation bit
> RD = Recursion Desired bit
> RA = Recursion Available bit
> Z = Reserved
> RCODE = Response code
> QC = Question Count
> ANC = Answer Count
> AUC = Authority Count
> ADC = Additional Count</pre>
>
> Write a function, member function, class or template that
> accepts a similar multi-line string as input to define a data
> structure or something else able to decode or store a header
> with that specified bit structure.
>
> If your language has macros, introspection, code generation, or
> powerful enough templates, then accept such string at
> compile-time to define the header data structure statically.
>
> Such "Header" function or template should accept a table with
> 8, 16, 32, 64 columns and any number of rows. The only allowed
> symbols to define the table are + - | (plus, minus, pipe), and
> whitespace. Lines of the input string composed just of
> whitespace should be ignored. Leading and trailing whitespace
> in the input string should be ignored, as well as before and
> after each table row. The box for each bit of the diagram takes
> four chars "+--+". The code should perform a little of
> validation of the input string, but for brevity a full
> validation is not required.
>
> - - - - - - -TASK DESCRIPTION END- - - - - - - - -
>
> I think such ASCII art inside the source code is easy to read,
> so in theory the D entry could be useful for more than just a
> Rosettacode Task.
>
> The usage syntax of the D entry:
>
>
> alias H1 = BitfieldsTable!"
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
> | ID |
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
> |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
> | QDCOUNT |
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
> | ANCOUNT |
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
> | NSCOUNT |
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
> | ARCOUNT |
> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+";
>
>
> Bye,
> bearophile
Nice idea! :)
I assume 1 column corresponds to 1 bit. This should probably be
mentioned explicitly in the task description.
More information about the Digitalmars-d-learn
mailing list