lampshir@airgun.wg.waii.com (gregory b. lampshir) (07/11/90)
To someone who knows lex....., I need to rewrite the input(), output(), and unput() macros that lex normally supplies so I can accept a binary file. I will strip out the funny control characters found in the binary file so I am not worried about any recognition problems. I am, however, having trouble rewriting the macros into functions. What I have know is this .... int filePointerIn; main() { filePointerIn=open(argv[1],O_RDONLY,0); while(1) yylex(); } char input() { int pos; char *ch; pos=read(filePointerIn,ch,1); /* Some code to strip the funny characters you get from reading binary files a character at a time. Yes there are ints and other misc. chars in the file, but the text is o.k. somewhere inside there. */ if(pos==0) return(0); /* needed by lex to signal eof */ else return(*ch); } void unput(c) char c; { lseek(filePointerIn,-1,L_INCR); } Can any of you lex wizards help me with this one? What am I doing wrong? gregory lampshire | Searching for the computer which can western geophysical | do it all.....
ronald@atcmp.nl (Ronald Pikkert) (07/16/90)
From article <859@airgun.wg.waii.com>, by lampshir@airgun.wg.waii.com (gregory b. lampshir): <> char input() <> { <> int pos; <> char *ch; <> <> pos=read(filePointerIn,ch,1); <> if(pos==0) return(0); /* needed by lex to signal eof */ <> else return(*ch); <> } <> <> Can any of you lex wizards help me with this one? What am I doing wrong? How about initialising the pointer ch? Or just write something like: char ch; if (read(filePointerIn,&ch,1)!=1) return(0); return(ch); By the way, how about not using a system call for every single character that is to be read? - Ronald Pikkert E-mail: ronald@atcmp.nl @ AT Computing b.v. Tel: 080 - 566880 Toernooiveld 6525 ED Nijmegen