Jeff --

Thanks. Applied.

NOTE: flags issue not solved.


Regards,

-- Gregor

On Tue, 2001-10-30 at 22:58, Jeff wrote:
> Implements the following instructions:
> 
> 1) open(i|ic,i|ic,s|sc) - Filehandle in $1, r/w mode in $2 (permissions
> 644), filename in $3
> 2) read(s,i|ic,i|ic) - String register in $1, filehandle in $2, number
> of chars in $3
> 3) write(i,s) - Filehandle in $1, string register in $2
> 4) close(i) - Filehandle in $1
> 
> You'll need to determine constants for O_CREAT &c on a per-platform
> basis. The modes will probably need to be manifest constants. For
> instance, O_CREAT|O_WRONLY on Linux is 65.
> 
> On UNIX, the following program takes input from command line and echoes
> it:
> 
> read S0,1,80 ; take 80 characters from STDIN (Also will need to be a
> manifest constant
> print S1 ; print the string from STDIN
> end
> 
> Writing to a file looks like this:
> 
> open I0,65,"test" ; O_CREAT|O_WRONLY, write to file 'test'
> write I0,"Hey, here's some test data" ; Write some sample data in
> close I0
> end
> 
> This may not even vaguely resemble the I/O model we eventually adopt,
> but it's one idea. Albeit a simplistic model.
> 
> --
> Jeff
> <[EMAIL PROTECTED]>
> 
> ----
> 

> 7,9d6
> < #include <sys/types.h>
> < #include <sys/stat.h>
> < #include <fcntl.h>
> 75,139d71
> < 
> < 
> < ########################################
> < 
> < =item B<open>(i,i|ic,s|sc)
> < 
> < Open file with name (string, parameter 3) with mod (int, parameter 2), and
> < save the filenum into the register in parameter 1.
> < 
> < =cut
> < 
> < AUTO_OP open(i,i|ic,s|sc) {
> <   STRING *s = $3;
> <   $1 = open(s->bufstart,$2,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
> < }
> < 
> < 
> < ########################################
> < 
> < =item read(s,i|ic,i|ic)
> < 
> < Read $3 characters from filehandle $1 into string $2
> < 
> < =cut
> < 
> < AUTO_OP read(s,i|ic,i|ic) {
> <   char *tmp;
> <   STRING *s;
> <   INTVAL len = $3;
> < 
> <   string_destroy($1);
> <   tmp = malloc(len+1);
> <   read($2,tmp,len);
> <   s = string_make(interpreter,tmp,len,0,0,0);
> <   $1 = s;
> <   free(tmp);
> < }
> < 
> < 
> < ########################################
> < 
> < =item write(i,s)
> < 
> < Write the text at parameter 2 into filehandle with parameter 1.
> < 
> < =cut
> < 
> < AUTO_OP write(i,s) {
> <   STRING * s = $2;
> <   INTVAL count = string_length(s);
> <   write($1,s->bufstart,count);
> < }
> < 
> < 
> < ########################################
> < 
> < =item close(i)
> < 
> < Close file reserved on the filehandle in parameter 1.
> < 
> < =cut
> < 
> < AUTO_OP close(i) {
> <   close($1);
> < }
-- 
 _____________________________________________________________________ 
/     perl -e 'srand(-2091643526); print chr rand 90 for (0..4)'      \

   Gregor N. Purdy                          [EMAIL PROTECTED]
   Focus Research, Inc.                http://www.focusresearch.com/
   8080 Beckett Center Drive #203                   513-860-3570 vox
   West Chester, OH 45069                           513-860-3579 fax
\_____________________________________________________________________/

Reply via email to