home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.lang.lisp
- Path: sparky!uunet!think.com!rpi!batcomputer!cornell!raman
- From: raman@cs.cornell.edu (T. V. Raman)
- Subject: Weird foreign function interface problem:
- Message-ID: <1993Jan9.180146.29819@cs.cornell.edu>
- Summary: Weird error from Lucid:
- Keywords: Foreign functions C Lucid open
- Organization: Cornell Univ. CS Dept, Ithaca NY 14853
- Date: Sat, 9 Jan 1993 18:01:46 GMT
- Lines: 83
-
-
-
- I am having a weird problem with the foreign function interface in
- Lucid.
-
- I have a C function playnotes
- Synopsis:
-
- playnotes(volume, length, tone, decay, octave)
- int tone, length;
- float volume, decay;
- char octave[];
-
-
- Using the lcl:def-foreign-function I have defined:
-
- (lcl:def-foreign-function (play-notes-internal (:name "_playnotes")
- (:return-type :signed-32bit))
- (volume :double-float)
- (length :signed-32bit )
- (tone :signed-32bit)
- (decay :double-float)
- (octave :pointer :character)
- )
-
-
- The function works as expected.
-
- However if the audio device is busy, I get a segmentation fault from
- lucid, even though the C function opens the audio device as
-
- f = open("/dev/audio", O_WRONLY);
- if (f < 0) {
- fprintf(stderr, "Within playnotes:%s \n", progname);
- fprintf(stderr, "%s: Cannot open /dev/audio \n", progname);
- exit(1);
- }
-
- which blocks until the device becomes available when called from a C
- program.
-
- Thus if I write a C program `notes' which calls the above playnotes function,
- from one window do
- cat > /dev/audio
- and from another window call the C program `notes'
- then `notes' waits until the cat closes the /dev/audio and then plays the
- specified note.
-
- However if I try the same thing but with the lucid function instead of
- the C `notes' ie:
-
- From one window do
- cat > /dev/audio
- and in another window do
-
- (play-notes ...)
- Then I get the error:
-
- USER> (play-notes :length 5 :decay 0.09 :volume 100.0)
- >>Trap: Interrupt: segmentation violation
-
- PLAY-NOTES-INTERNAL:
- Required arg 0 (VOLUME): 100.0
- Required arg 1 (LENGTH): 5
- Required arg 2 (TONE): 0
- Required arg 3 (DECAY): 0.09
- Required arg 4 (OCTAVE): #<Foreign-Pointer 7E5AA8 (:POINTER :CHARACTER)>
- :A 0: Abort to Lisp Top Level
-
-
- ;;; Note: play-notes just calls play-notes-internal with default
- values
-
- So where is the bug?
-
- Thanks for the help,
-
- --Raman
- --
- T. V. Raman <raman@cs.cornell.edu>Tel: (607)255-9202 R 272-3649
- Office: 4116 Upson Hall,
- Department of Computer Science, Cornell University Ithaca NY 14853-6201
- Res: 226 Bryant Avenue Ithaca NY 14850
-