ParsKey Smart Token (COM3) Driver



  • https://github.com/codewitch-honey-crisis/BuildPack>Download latest from GitHub

Introduction

There are plenty of parser generators out there for .NET, but no language agnostic parser with syntax directed actions (code in the grammar). Parsley is different. Parsley allows you to write your actions in a C# subset that is then converted to the target parser's generated language, so if someone wants to use your parser source code in VB they can, even though your code was C#. There are also very few recursive descent parser generators out there, most preferring the table generated approach. The advantage of recursive descent is it's far more intuitive than the table driven approach - the code is actually readable.

Parsl’s SmartTag and smart packaging enable inventory management that is powered by the simple tap of a mobile phone or other device. Secure handover of a physical product is assured when every movement is accurately recorded for your cannabis product at every step of the supply chain. Parsley is different. Parsley allows you to write your actions in a C# subset that is then converted to the target parser's generated language, so if someone wants to use your parser source code in VB they can, even though your code was C#. We would like to show you a description here but the site won’t allow us.

Update: Improved output code generation, added features. See below.

Parsley Smart Token (com3) Driver Update

Update 2: Bugfix in grammars, rewrite of part of article, feature adds

توکن امضای دیجیتال ParsKey یک توکن امضای دیجیتال بومی است که طراحی و تولید در شرکت هویتا صورت گرفته است.توکن امضای دیجیتال پارس کی دارای رتبه نخست توسط توکن امضای دیجیتال امنیتی است.از وظایف آن میتوان نگهداری امن زوج. Find new and used guns for sale at the largest online gun auction site GunBroker.com. Sell and buy firearms, accessories, collectibles such as handguns, shotguns, pistols, rifles and all hunting outdoor accessories.

Background

Parser generators build parsers which break down text into a meaningful hierarchy of symbols which can be easily processed programmatically. Compilers user parsers to parse your code. JSON libraries use parsers to parse JSON, and Excel uses a parser to decode the formulas in your cells.

Parsers come in a variety of algorithms, from simple LL(1), to the almost incomprehensible GLR parsing algorithm. Parsely is LL(1), which means it processes grammars from top to bottom creating a left derivation tree and one symbol of lookahead. The syntax, rather than the input directs the parse. This is the second most intuitive way to parse next to LL(k/*), which allows for arbitrary lookahead.

Using this Mess

Building this Mess

Parsley smart token (com3) driver download

This code is provided as part of my larger Build Tools project. I've stripped the binaries out of the distribution, and yet they are used to build the distribution. To bootstrap it, you'll have to build a couple of times in Release. You'll get locking errors the first time. That's okay. The second time, you may still have a warning in your Error Panel, but it's stale. The build succeeded with no warnings.

Installing this Mess

All of the tools included with this distro are useful in their own right. You may want to copy deslang, csbrick, rolex and parsley to <system-drive>Users<User>.dotnettools. That way, they'll be in your PATH. This makes it easier to use them in pre-build steps because you won't have to fully qualify the EXE path.

Running this Mess

Parsley operates as a command line tool. It takes an input file, an optional output file and various parameters dictating the generated code options. Here is the usage screen:

  • inputfile is the XBNF specification (explored below) that the parser will be generated from
  • outputfile is optional and specifies the output code file to generate. If it's not specified, the code will be dumped to the stdout.
  • rolexfile is optional and specifies the rolex lexer specification file to generate. If it's not specified, then no rolex specification will be generated.
  • codenamespace is the namespace under which to generate the code. If it's not specified, the code won't be generated under a namespace.
  • classname is the name of the parser class to use. If you don't specify one, it will be the same as the outputfile, unless that's not specified, in which case it will take the name from the start element in the XBNF grammar.
  • codelanguage is the language of the code to generate. If you don't specify one, it will be based on outputfile's file extension. If outputfile is not specified, it will default to C#.
  • noshared skips generating the shared code. This is important to specify for generating a second parser in the same project. The first parser should be generated without this switch, and subsequent parsers should be generated with this switch. If noshared is specified here, it should also be specified to rolex when rolex is used to generate the lexer/tokenizer code. You don't want duplicates of shared code in your source, because it will cause compile errors.
  • verbose emits all grammar transformation and validation messages, including messages about refactored rules. This can create huge dumps in the case of large grammars with lots of refactoring, but it allows you to see what changes it made. You can also see the changes in the doc comments of the generated code, regardless.
  • ifstale skips generating the output unless the input has been modified. This is useful for pre-build steps as it prevents the overhead of rebuilding the parser every time.

You'll probably want to use this tool in tandem with the included project, Rolex. This tool is a lexer/tokenizer generator. Almost all parsers (excepting PEG parsers particularly) require lexers/tokenizers and Parsley is no exception. For further reading, I wrote an article about https://www.codeproject.com/Articles/5252200/How-to-Build-a-Tokenizer-Lexer-Generator-in-Csharp>creating Rolex here though you should use this codebase since it's much newer and uses https://www.codeproject.com/Articles/5254092/Deslang-From-Code-to-CodeDOM-and-Back>Deslanged Slang technology to dramatically ease maintenance of the generated code while maintaining performance.

Coding this Mess

Coming back to Parsley, let's examine the XBNF grammar format, which I use for all my parsers:

The XBNF format is designed to be easy to learn if you know a little about composing grammars.

The productions take the form of:

So for example, here's a simple standards compliant JSON grammar:

The first thing to note is the Json production is marked with a start attribute. Since the value was not specified it is implicitly, start=true.

That tells the parser that Json is the start production. If it is not specified, the first non-terminal in the grammar will be used. Furthermore, this can cause a warning during generation since it's not a great idea to leave it implicit. Only the first occurrence of start will be honored.

Object | Array tells us the Json production is derived as an object or array. The Object production contains a repeat {} construct inside and optional [] construct, itself containing a reference to Field. Array is similar, except it uses '[' and ']' and it refers to Value instead of Field.

Expressions

  • ( ) parentheses allow you to create subexpressions like Foo (Bar|Baz)
  • [ ] optional expressions allow the subexpression to occur zero or once
  • { } this repeat construct repeats a subexpression zero or more times
  • { }+ this repeat construct repeats a subexpression one or more times
  • | this alternation construct derives any one of the subexpressions
  • Concatenation is implicit, separated by whitespace

Terminals

The terminals are all defined at the bottom but they can be anywhere in the document. XBNF considers any production that does not reference another production to be a terminal. You can force an element to be terminal with the terminal attribute (see below).

Regular expressions are between ' single quotes and literal expressions are between ' double quotes. You may declare a terminal by using XBNF constructs or by using regular expressions. The regular expressions follow a POSIX + std extensions paradigm but don't currently support all of POSIX. They support most of it. If a POSIX expression doesn't work, consider it a bug. Unicode will be supported in a future version. I've already started support for constructs like p and P but the regex engine needs further optimization before Rolex can create that lexer in a reasonable amount of time. The problem is Unicode's huge range of things like letters and numbers is choking my current implementation which is about 80% optimized for ranges. The other 20% is killing performance in this case, but optimizing it is non-trivial.

Attributes

ParsKey

The collapsed element tells Parsley that this node should not appear in the parse tree. Instead, its children will be propagated to its parent. This is helpful if the grammar needs a nonterminal or a terminal in order to resolve a construct, but it's not useful to the consumer of the parse tree. During LL(1) factoring, generated rules must be made, and their associated non-terminals are typically collapsed. Above, we've used it to significantly trim the parse tree of nodes we won't need including collapsing unnecessary terminals like : in the JSON grammar. This is because they don't help us define anything - they just help the parser recognize the input, so we can throw them out to make the parse tree smaller.

The hidden element tells Parsley that this terminal should be skipped. This is useful for things like comments and whitespace.

The blockEnd attribute is intended for terminals who have a multi character ending condition like C block comments, XML CDATA sections, and SGML/XML/HTML comments. If present, the lexer will continue until the literal specified as the blockEnd is matched.

The terminal attribute declares a production to be explicitly terminal. Such a production is considered terminal even if it references other productions. If it does, those other productions which will be included in their terminal form as though they were part of the original expression. This allows you to create composite terminals out of several terminal definitions.

The ignoreCase attribute specifies that case shouldn't matter for matching. This only applies to terminals.

The type attribute specifies a .NET type or intrinsic C# type of the associated code block (see below). Values returned from such 'typed' non-terminals are automatically converted to the target type, obviating the need to cast return values, or convert them using int.Parse() or the like. It will be handled for you.

Code Blocks

Code blocks are specified in the grammar using a lambda/anonymous method-like syntax. => { .. } at the end of a non-terminal production signifies a block of code to associate with that non-terminal. This code is for parse actions, triggered by the EvaluateXXXX() methods. In this code, you take a ParseNode object, indicated by node and evaluate it, returning the result. If you do not return a result, a default value will be returned. See the example below:

On grammar notation conventions: I use title case for the non-terminals in the grammar. This isn't necessary, but is better in the end because functions like ParseXXXX() and EvaluateXXXX() take the XXXX portion directly from the non-terminal name. Ergo, the non-terminal foo would end up generating Parsefoo() and Evaluatefoo(). This is obviously undesirable but it's not a show stopper. I thought about mangling the name to 'correct' this, but in the end I decided not to make unexpected changes to the code. This way, it was straightforward to know what the eventual names of these methods will be. The symbol constants are generated directly from the symbol names as well, so if you wanted to be consistent with Microsoft's naming guidelines, you'd name your terminals with Pascal case/.NET case as well. However, this is far from important, especially since unlike with non-terminals, their names aren't appended to anything.

Let's take a look at the grammar for an expression parser:

Now here's how the _ParseXXXX() methods that get generated work:

You can see it resolving based on context's current symbol, and then parsing the child nodes, one by one. Terminals are parsed inline, while non-terminals are forwarded to their appropriate _ParseXXXX() methods. Non-terminals with collapsed children generate a little differently, using List<ParseNode> instead of ParseNode[] to hold the children. This is because at the point when we're propagating children from the collapsed nodes, we can't know how many nodes there will be, unlike when the nodes are not collapsed. This is okay, as it only generates this alternative when necessary, and it only requires one additional copy. You'll note the appearance of Implicit3 and Implicit4. Those are the names of the tokens we have not defined yet. If you want better error messages, give them a name in the grammar.

This is fine for parsing but will do nothing for evaluation. That is to say, the above will add a Parse() method to the parser class, but there's not enough information in the grammar to create an Evaluate() method. Basically, we can get a parse tree back with the above, but we can't evaluate it. Lets fix that by adding some code to the grammar:

Note the code blocks indicated by => { .. } which tell our parser what to do with the parse tree we made.

This indicates an integer expression parser. Because there is code in the grammar, it creates a publicExpressionParser.Evaluate() method that can be used to call it, and thus evaluate a simple integer expression like 4+2*8.

Here is the code it generates for EvaluateLeaf(). You can see the code looks a lot like the associated code in the grammar above, with minor changes.

Here's that same code in VB.NET.

As you can see, the code block in the grammar was translated to the target language. This is Slang. Slang is still experimental, but it works well enough for doing simple evaluation inside code blocks. There's one problem here. EvaluateUnary() (and Evaluate() and all of the EvaluateXXXX() methods return object! This is an integer expression parser so returning int is far more appropriate. Fortunately, we can tell the parser what type to return using the type attribute. Here we add the type attributes to the elements we've changed the grammar, which I've put in bold:

Note that not only do we now have the attribute type='int' marked up on each non-terminal production, we also have changed the code (particularly in Leaf) slightly, from:

To:

This change wasn't necessary, but it simplifies things slightly. This uses Microsoft's TypeConverter framework in tandem with Convert.ChangeType() to automatically translate your return values to the target type.

We use this information, which does not identify individual users, to analyze trends, to administer the site, to track users movements around the site and to gather demographic information about our user base as a whole. Encore 2000 wdm midi device driver download. This information includes internet protocol (IP) addresses, browser type, internet service provider (ISP), referring/exit pages, operating system, date/time stamp, and clickstream data. Please note that certain features of the Cmedia website will not be available once cookies are disabled.As is true of most web sites, we gather certain information automatically and store it in log files. If, however, you prefer not to enable cookies, please go to www.CMedia.com/legal/privacy/aboutcookies.html, which explains step by step how you can disable cookies.

Regardless of all that code, using the generated code is pretty simple:

The reason creating the parser is a separate step than creating the tokenizer is because it's actually possible to use a tokenizer other than a Rolex tokenizer with this parser, but you'll have to provide your own Token struct and a class implementing IEnumerable<Token>. For performance reasons, there is no IToken interface. However, your token must have the following fields: (int) SymbolId, (string) Symbol, (string) Value, (int) Line, (int) Column, and (long) Position and the constructor taking all of these things. See the reference source under RolexSharedToken.cs. Modifying the original file will change the behavior of Rolex.

Finally, now we have Evaluate(), but there's one niggling issue to address, and that is variables, which were previously not implemented. We can implement variables using the state argument in Evaluate() which allows us to pass a user defined value in to our evaluation code. We'll have to change the code in the grammar in order to support it, so lets modify the grammar again.

Note we're now using the state variable to hold an IDictionary<string,int> instance which we use to hold our variables. We also pass state along to each of our evaluation methods. This is important, as the parser itself is stateless.

When we encounter an identifier, we resolve it using a simple dictionary lookup.

Parsley Smart Token (com3) Driver Download

We have to change the code we use to call it now, to pass in our variables:

And Bob's your uncle. There you go.

However, it's a bit complicated. So I've added some shorthand to simplify. For starters there are virtual variables named <Production>1 to <Production>N where <Production> is the name of a production in your grammar.

For the above grammar we have Unary1, Unary2, UnaryN, and Expression1, Expression2, ExpressionN, and Factor1 and Factor2 and so on. We also have SymbolId1, SymbolId2, etc.

The numbers are 1 based positions into the child nodes. SymbolId1 is an alias for node.Children[0].SymbolId. The terminals just point to node.Children[x].Value and the non-terminal productions call the associated evaluate method for the non-terminal at the specified position like, so Factor3 from the above grammar would resolve to ExpressionParser.EvaluateFactor(node.Children[2], state)!

You can also index in to these like Unary[i]. In addition there is a Child macro (Child1.ChildN, Child[i]) that gives you the ability to evaluate the node type at run time and it will call the appropriate EvaluateXXXX() method for you. This is useful in cases where we have collapsed nodes in the underlying grammar because sometimes that means we can't know which nodes we'll see in our evaluate function ahead of time. We'll visit this below:

Also, this may not seem very intuitive above until you look at the final grammar format:

Take a look at that! That's pretty easy to follow once you get the hang of it. The macros clear things right up and keep it simple


See the ParsleyDemo and ParsleyDemoVB projecta for more.

Parsley Smart Token (com3) Drivers

History

  • 19th December, 2019: Initial submission
  • 20th December, 2019: Update
  • 21st December, 2018: Update 2

Parsley Smart Token (com3) Driver Windows 10

I need some help installing drivers for my Agere Systems PCI Soft Modem (Com3) on Ubuntu. The thing is I am extremely new at this and know very very little about using Linux. I have obtained a .tar.gz (martian-full-20061203.tar.gz). I have tried installing it with some instructions I got from a friend which matched instructions I got from the internet in installing it, but alas, I encountered an and I don't know what it means. If anyone could please help me (maybe you also have this modem?) I need some really specific instructions on what to do as I have to access the internet via Vista. Hurray for dual booting. I will post the error I got below. I can make no sense of it.
Any help would be hugely appreciated, thanks.
main.c:575: warning: incompatible implicit declaration of built-in function ‘fprintf’
main.c:575: error: array subscript is not an integer
main.c:575: warning: passing argument 1 of ‘fprintf’ discards qualifiers from pointer target type
main.c:575: warning: format ‘%s’ expects type ‘char *’, but argument 4 has type ‘const struct <anonymous> *’
main.c:578: warning: incompatible implicit declaration of built-in function ‘fprintf’
main.c:578: error: array subscript is not an integer
main.c:578: warning: passing argument 1 of ‘fprintf’ discards qualifiers from pointer target type
main.c:578: warning: format ‘%s’ expects type ‘char *’, but argument 4 has type ‘const struct <anonymous> *’
main.c:579: warning: passing argument 1 of ‘fprintf’ discards qualifiers from pointer target type
main.c:330: warning: unused variable ‘options’
main.c: In function ‘setup_pin_timer’:
main.c:601: error: storage size of ‘ptyevent’ isn’t known
main.c:605: warning: implicit declaration of function ‘memset’
main.c:605: warning: incompatible implicit declaration of built-in function ‘memset’
main.c:605: warning: passing argument 3 of ‘memset’ makes integer from pointer without a cast
main.c:608: error: request for member ‘sigev_signo’ in something not a structure or union
main.c:608: error: ‘SIGRTMIN’ undeclared (first use in this function)
main.c:608: warning: statement with no effect
main.c:611: error: request for member ‘sigev_notify’ in something not a structure or union
main.c:611: error: ‘SIGEV_THREAD_ID’ undeclared (first use in this function)
main.c:611: warning: statement with no effect
main.c:612: error: request for member ‘_sigev_un’ in something not a structure or union
main.c:612: error: request for member ‘_tid’ in something not a structure or union
main.c:612: warning: statement with no effect
main.c:614: warning: implicit declaration of function ‘mtimer_create’
main.c:614: error: ‘CLOCK_REALTIME’ undeclared (first use in this function)
main.c:616: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:621: error: ‘mtimer_t’ has no member named ‘id’
main.c:621: warning: passing argument 1 of ‘logwarn’ from incompatible pointer type
main.c:622: warning: passing argument 2 of ‘logsyserror’ from incompatible pointer type
main.c:625: warning: passing argument 3 of ‘memset’ makes integer from pointer without a cast
main.c:628: error: request for member ‘sigev_signo’ in something not a structure or union
main.c:628: warning: statement with no effect
main.c:629: error: request for member ‘sigev_notify’ in something not a structure or union
main.c:629: error: ‘SIGEV_SIGNAL’ undeclared (first use in this function)
main.c:629: warning: statement with no effect
main.c:636: error: ‘mtimer_t’ has no member named ‘id’
main.c:636: warning: passing argument 1 of ‘logerr’ from incompatible pointer type
main.c:640: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:601: warning: unused variable ‘ptyevent’
main.c: At top level:
main.c:645: error: expected specifier-qualifier-list before ‘uint8_t’
main.c:658: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘io_uart_msr’
main.c:659: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘io_uart_status’
main.c:663: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘dp_dsp_status’
main.c:664: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘dp_wDspRetrainState’
main.c: In function ‘monitor_state’:
main.c:717: error: ‘io_uart_msr’ undeclared (first use in this function)
main.c:717: error: ‘struct _state’ has no member named ‘io_uart_msr’
main.c:717: warning: implicit declaration of function ‘sprintf’
main.c:717: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:717: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:717: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:717: warning: implicit declaration of function ‘__STRING’
main.c:717: error: expected ‘)’ before string constant
main.c:717: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast
main.c:717: error: ‘struct _state’ has no member named ‘io_uart_msr’
main.c:717: warning: statement with no effect
main.c:718: error: ‘io_uart_status’ undeclared (first use in this function)
main.c:718: error: ‘struct _state’ has no member named ‘io_uart_status’
main.c:718: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:718: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:718: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:718: error: expected ‘)’ before string constant
main.c:718: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast
main.c:718: error: ‘struct _state’ has no member named ‘io_uart_status’
main.c:718: warning: statement with no effect
main.c:719: error: ‘struct _state’ has no member named ‘x_modem_state’
main.c:719: warning: comparison between pointer and integer
main.c:719: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:719: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:719: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:719: error: expected ‘)’ before string constant
main.c:719: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast
main.c:719: error: ‘struct _state’ has no member named ‘x_modem_state’
main.c:719: warning: statement with no effect
main.c:720: error: ‘struct _state’ has no member named ‘x_modem_mode’
main.c:720: warning: comparison between pointer and integer
main.c:720: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:720: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:720: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:720: error: expected ‘)’ before string constant
main.c:720: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast
main.c:720: error: ‘struct _state’ has no member named ‘x_modem_mode’
main.c:720: warning: statement with no effect
main.c:721: error: ‘struct _state’ has no member named ‘x_line_rate’
main.c:721: warning: comparison between pointer and integer
main.c:721: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:721: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:721: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:721: error: expected ‘)’ before string constant
main.c:721: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast
main.c:721: error: ‘struct _state’ has no member named ‘x_line_rate’
main.c:721: warning: statement with no effect
main.c:722: error: ‘dp_dsp_status’ undeclared (first use in this function)
main.c:722: error: ‘struct _state’ has no member named ‘dp_dsp_status’
main.c:722: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:722: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:722: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:722: error: expected ‘)’ before string constant
main.c:722: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast
main.c:722: error: ‘struct _state’ has no member named ‘dp_dsp_status’
main.c:722: warning: statement with no effect
main.c:723: error: ‘struct _state’ has no member named ‘io_app_tx_count’
main.c:723: warning: comparison between pointer and integer
main.c:723: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:723: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:723: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:723: error: expected ‘)’ before string constant
main.c:723: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast
main.c:723: error: ‘struct _state’ has no member named ‘io_app_tx_count’
main.c:723: warning: statement with no effect
main.c:725: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:726: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:730: error: ‘struct _state’ has no member named ‘io_app_tx_bytes’
main.c:730: warning: comparison between pointer and integer
main.c:730: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:730: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:730: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:730: error: ‘io_app_tx’ undeclared (first use in this function)
main.c:730: error: expected ‘)’ before string constant
main.c:730: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast
main.c:730: error: ‘struct _state’ has no member named ‘io_app_tx_bytes’
main.c:730: warning: statement with no effect
main.c:731: error: ‘struct _state’ has no member named ‘io_dte_tx_bytes’
main.c:731: warning: comparison between pointer and integer
main.c:731: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:731: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:731: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:731: error: ‘io_dte_tx’ undeclared (first use in this function)
main.c:731: error: expected ‘)’ before string constant
main.c:731: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast
main.c:731: error: ‘struct _state’ has no member named ‘io_dte_tx_bytes’
main.c:731: warning: statement with no effect
main.c:732: error: ‘struct _state’ has no member named ‘io_dte_rx_bytes’
main.c:732: warning: comparison between pointer and integer
main.c:732: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:732: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:732: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:732: error: ‘io_dte_rx’ undeclared (first use in this function)
main.c:732: error: expected ‘)’ before string constant
main.c:732: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast
main.c:732: error: ‘struct _state’ has no member named ‘io_dte_rx_bytes’
main.c:732: warning: statement with no effect
main.c:733: error: ‘struct _state’ has no member named ‘io_dce_tx_bytes’
main.c:733: warning: comparison between pointer and integer
main.c:733: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:733: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:733: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:733: error: ‘io_dce_tx’ undeclared (first use in this function)
main.c:733: error: expected ‘)’ before string constant
main.c:733: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast
main.c:733: error: ‘struct _state’ has no member named ‘io_dce_tx_bytes’
main.c:733: warning: statement with no effect
main.c:734: error: ‘struct _state’ has no member named ‘io_dce_rx_bytes’
main.c:734: warning: comparison between pointer and integer
main.c:734: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:734: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:734: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:734: error: ‘io_dce_rx’ undeclared (first use in this function)
main.c:734: error: expected ‘)’ before string constant
main.c:734: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast
main.c:734: error: ‘struct _state’ has no member named ‘io_dce_rx_bytes’
main.c:734: warning: statement with no effect
main.c:736: warning: incompatible implicit declaration of built-in function ‘sprintf’
main.c:737: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c: In function ‘setup_pin_watcher’:
main.c:758: error: storage size of ‘timer_action’ isn’t known
main.c:760: error: request for member ‘sa_handler’ in something not a structure or union
main.c:760: warning: statement with no effect
main.c:761: error: request for member ‘sa_flags’ in something not a structure or union
main.c:761: warning: statement with no effect
main.c:762: warning: implicit declaration of function ‘sigemptyset’
main.c:762: error: request for member ‘sa_mask’ in something not a structure or union
main.c:763: warning: implicit declaration of function ‘sigaction’
main.c:763: error: ‘SIGRTMIN’ undeclared (first use in this function)
main.c:758: warning: unused variable ‘timer_action’
main.c:766:19: error: errno.h: No such file or directory
main.c: At top level:
main.c:769: error: expected ‘)’ before ‘*’ token
main.c: In function ‘main’:
main.c:837: error: ‘struct _config’ has no member named ‘syslog’
main.c:840: error: ‘struct _config’ has no member named ‘daemon’
main.c:841: warning: implicit declaration of function ‘daemon’
main.c:841: error: ‘struct _config’ has no member named ‘logfile’
main.c:843: warning: passing argument 2 of ‘logsyserror’ from incompatible pointer type
main.c:844: warning: passing argument 1 of ‘logwarn’ from incompatible pointer type
main.c:845: error: ‘struct _config’ has no member named ‘daemon’
main.c:845: warning: statement with no effect
main.c:848: error: ‘struct _config’ has no member named ‘daemon’
main.c:848: error: ‘struct _config’ has no member named ‘logfile’
main.c:849: error: ‘struct _config’ has no member named ‘syslog’
main.c:849: warning: statement with no effect
main.c:852: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:862: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:871: warning: implicit declaration of function ‘snprintf’
main.c:871: warning: incompatible implicit declaration of built-in function ‘snprintf’
main.c:874: warning: incompatible implicit declaration of built-in function ‘snprintf’
main.c:878: warning: incompatible implicit declaration of built-in function ‘snprintf’
main.c:880: warning: implicit declaration of function ‘strlen’
main.c:880: warning: incompatible implicit declaration of built-in function ‘strlen’
main.c:885: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:888: error: ‘struct _config’ has no member named ‘misr’
main.c:888: error: incompatible type for argument 1 of ‘misr_str’
main.c:888: error: ‘struct _config’ has no member named ‘realtime’
main.c:888: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:909: warning: passing argument 2 of ‘mthread_create’ discards qualifiers from pointer target type
main.c:910: warning: passing argument 1 of ‘logerr’ from incompatible pointer type
main.c:913: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:924: warning: passing argument 1 of ‘loginfo’ from incompatible pointer type
main.c:928: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:933: warning: implicit declaration of function ‘mkfifo’
main.c:934: error: ‘errno’ undeclared (first use in this function)
main.c:934: error: ‘EEXIST’ undeclared (first use in this function)
main.c:935: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:937: warning: passing argument 2 of ‘logsyserror’ from incompatible pointer type
main.c:940: error: ‘FILE’ undeclared (first use in this function)
main.c:940: error: ‘control’ undeclared (first use in this function)
main.c:940: error: invalid operands to binary *
main.c:940: warning: statement with no effect
main.c:943: warning: implicit declaration of function ‘fopen’
main.c:943: warning: statement with no effect
main.c:944: error: ‘EINTR’ undeclared (first use in this function)
main.c:950: warning: passing argument 2 of ‘logsyserror’ from incompatible pointer type
main.c:951: warning: passing argument 1 of ‘logwarn’ from incompatible pointer type
main.c:958: warning: implicit declaration of function ‘get_cmd’
main.c:961: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:962: warning: implicit declaration of function ‘fclose’
main.c:964: warning: statement with no effect
main.c:971: warning: passing argument 2 of ‘logsyserror’ from incompatible pointer type
main.c:972: warning: passing argument 1 of ‘logwarn’ from incompatible pointer type
main.c:978: warning: passing argument 1 of ‘loginfo’ from incompatible pointer type
main.c:984: error: ‘__u32’ undeclared (first use in this function)
main.c:984: error: expected expression before ‘)’ token
main.c:984: error: invalid operands to binary *
main.c:984: error: called object ‘<erroneous-expression>’ is not a function
main.c:984: error: assignment of read-only location
main.c:984: error: incompatible types in assignment
main.c:984: warning: statement with no effect
main.c:985: error: ‘__u16’ undeclared (first use in this function)
main.c:985: error: expected expression before ‘)’ token
main.c:985: error: invalid operands to binary *
main.c:985: error: called object ‘<erroneous-expression>’ is not a function
main.c:985: error: assignment of read-only location
main.c:985: error: incompatible types in assignment
main.c:985: warning: statement with no effect
main.c:992: warning: passing argument 1 of ‘loginfo’ from incompatible pointer type
main.c:993: warning: implicit declaration of function ‘ioctl’
main.c:993: warning: implicit declaration of function ‘_IO’
main.c:995: warning: passing argument 2 of ‘logsyserror’ from incompatible pointer type
main.c:999: warning: passing argument 1 of ‘loginfo’ from incompatible pointer type
main.c:1002: warning: passing argument 2 of ‘logsyserror’ from incompatible pointer type
main.c:1005: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:1013: warning: implicit declaration of function ‘pause’
main.c: In function ‘serve_port’:
main.c:1029: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:1031: error: ‘struct _config’ has no member named ‘realtime’
main.c:1041: warning: passing argument 1 of ‘logerr’ from incompatible pointer type
main.c:1042: warning: incompatible implicit declaration of built-in function ‘exit’
main.c:1047: warning: passing argument 1 of ‘logerr’ from incompatible pointer type
main.c:1050: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c:1055: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c: In function ‘mexit’:
main.c:1082: error: ‘struct _config’ has no member named ‘daemon’
main.c:1083: warning: passing argument 1 of ‘loginfo’ from incompatible pointer type
main.c:1085: warning: passing argument 1 of ‘loginfo’ from incompatible pointer type
main.c:1086: warning: incompatible implicit declaration of built-in function ‘exit’
main.c: In function ‘kbdint_handler’:
main.c:1093: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c: In function ‘setup_kbd_interrupt’:
main.c:1098: error: storage size of ‘timer_action’ isn’t known
main.c:1100: error: request for member ‘sa_handler’ in something not a structure or union
main.c:1100: warning: statement with no effect
main.c:1101: error: request for member ‘sa_flags’ in something not a structure or union
main.c:1101: warning: statement with no effect
main.c:1102: error: request for member ‘sa_mask’ in something not a structure or union
main.c:1103: error: ‘SIGINT’ undeclared (first use in this function)
main.c:1098: warning: unused variable ‘timer_action’
main.c: In function ‘sigterm_handler’:
main.c:1107: warning: passing argument 2 of ‘logdebug’ from incompatible pointer type
main.c: In function ‘setup_daemon_signals’:
main.c:1112: error: storage size of ‘timer_action’ isn’t known
main.c:1114: error: request for member ‘sa_handler’ in something not a structure or union
main.c:1114: warning: statement with no effect
main.c:1115: error: request for member ‘sa_flags’ in something not a structure or union
main.c:1115: warning: statement with no effect
main.c:1116: error: request for member ‘sa_mask’ in something not a structure or union
main.c:1117: error: ‘SIGTERM’ undeclared (first use in this function)
main.c:1112: warning: unused variable ‘timer_action’
main.c: In function ‘setup_segv’:
main.c:1124: error: storage size of ‘action’ isn’t known
main.c:1126: error: request for member ‘sa_handler’ in something not a structure or union
main.c:1126: warning: statement with no effect
main.c:1127: error: request for member ‘sa_flags’ in something not a structure or union
main.c:1127: warning: statement with no effect
main.c:1128: error: request for member ‘sa_mask’ in something not a structure or union
main.c:1129: error: ‘SIGSEGV’ undeclared (first use in this function)
main.c:1124: warning: unused variable ‘action’
main.c: In function ‘segv_handler’:
main.c:1133: error: storage size of ‘action’ isn’t known
main.c:1136: warning: incompatible implicit declaration of built-in function ‘printf’
main.c:1138: error: request for member ‘sa_handler’ in something not a structure or union
main.c:1138: error: ‘SIG_DFL’ undeclared (first use in this function)
main.c:1138: warning: statement with no effect
main.c:1139: error: request for member ‘sa_flags’ in something not a structure or union
main.c:1139: warning: statement with no effect
main.c:1140: error: request for member ‘sa_mask’ in something not a structure or union
main.c:1141: error: ‘SIGSEGV’ undeclared (first use in this function)
main.c:1133: warning: unused variable ‘action’
make[1]: *** [main.o] Error 1
make[1]: Leaving directory `/home/lance/martian/modem'
make: *** [all] Error 2
lance@Jim:~/martian$ make install
make -C kmodule/ install
make[1]: Entering directory `/home/lance/martian/kmodule'
make -C /lib/modules/2.6.20-15-generic/build M='/home/lance/martian/kmodule' modules_install
make[2]: Entering directory `/usr/src/linux-headers-2.6.20-15-generic'
mkdir: cannot create directory `/lib/modules/2.6.20-15-generic/extra': Permission denied
make[2]: *** [_emodinst_] Error 1
make[2]: Leaving directory `/usr/src/linux-headers-2.6.20-15-generic'
make[1]: *** [install] Error 2
make[1]: Leaving directory `/home/lance/martian/kmodule'
make: *** [install] Error 2
lance@Jim:~/martian$ install
install: missing file operand
Try `install --help' for more information.
lance@Jim:~/martian$ ls
ChangeLog INSTALL Makefile modem scripts
Concept kmodule martian.h README
lance@Jim:~/martian$ INSTALL
bash: INSTALL: command not found
lance@Jim:~/martian$ tar install
tar: invalid option -- a
Try `tar --help' or `tar --usage' for more information.
lance@Jim:~/martian$ install
install: missing file operand
Try `install --help' for more information.
lance@Jim:~/martian$ makefile
bash: makefile: command not found
lance@Jim:~/martian$ makefile
bash: makefile: command not found
lance@Jim:~/martian$ ./install
bash: ./install: No such file or directory
lance@Jim:~/martian$ modprobe martian_dev
FATAL: Module martian_dev not found.
lance@Jim:~/martian$ martian_modem
bash: martian_modem: command not found
lance@Jim:~/martian$ ls
ChangeLog INSTALL Makefile modem scripts
Concept kmodule martian.h README
lance@Jim:~/martian$ modem
bash: modem: command not found
lance@Jim:~/martian$ cd install
bash: cd: install: No such file or directory