osdir.com
mailing list archive

Subject: Timeshare - msg#00036

List: linux.kernel.janitors

Date: Prev Next Index Thread: Prev Next Index
Sell or Rent your Timeshare!

If you're interested in selling or renting your timeshare
or vacation membership, we can help!

For a free consultation (click reply) and respond with
your name, telephone number and the name of the resort. We will contact you
shortly!












Removal Instructions:
To be removed from this list, please
reply with "remove" in the subject line.





-------------------------------------------------------
This sf.net email is sponsored by: Influence the future
of Java(TM) technology. Join the Java Community
Process(SM) (JCP(SM)) program now.
http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0004en


Was this page helpful?
Yes No
Thread at a glance:

Previous Message by Date: click to view message preview

[PATCH] region changes for sm.c hamradio soundmodem driver

Hi this is a small patch for sm.c soundmodem hamradio driver for Linux to 1) remove two calls to check_region using request_region instead 2) release allocated region resource in case of error. I don't have this hardware so compilation checked only. This patch removes all references to check_region in this driver. Patch also available at the following URL: http://www.chez.com/wstinson/linux/kernel/patch-hamradio-sm Comments and suggestions welcome William Stinson (wstinson@xxxxxxxxxx) --- linux-2.5.40/drivers/net/hamradio/soundmodem/sm.c Thu Oct 24 23:34:32 2002 +++ linux-local/drivers/net/hamradio/soundmodem/sm.c Thu Oct 24 23:41:50 2002 @@ -202,7 +202,7 @@ if (iobase <= 0 || iobase > 0x1000-SER_EXTENT) return c_uart_unknown; - if (check_region(iobase, SER_EXTENT)) + if (!request_region(iobase, SER_EXTENT, "sm ser ptt")) return c_uart_unknown; b1 = inb(UART_MCR(iobase)); outb(b1 | 0x10, UART_MCR(iobase)); /* loopback mode */ @@ -212,7 +212,7 @@ outb(b1, UART_MCR(iobase)); /* restore old values */ outb(b2, UART_MSR(iobase)); if (b3 != 0x90) - return c_uart_unknown; + goto err_out; inb(UART_RBR(iobase)); inb(UART_RBR(iobase)); outb(0x01, UART_FCR(iobase)); /* enable FIFOs */ @@ -226,6 +226,9 @@ u = c_uart_8250; } return u; +err_out: + release_region(iobase, SER_EXTENT); + return c_uart_unknown; } /* --------------------------------------------------------------------- */ @@ -238,23 +241,26 @@ if (iobase <= 0 || iobase > 0x1000-MIDI_EXTENT) return 0; - if (check_region(iobase, MIDI_EXTENT)) + if (!request_region(iobase, MIDI_EXTENT, "sm midi ptt")) return 0; timeout = jiffies + (HZ / 100); while (inb(MIDI_STATUS(iobase)) & MIDI_WRITE_EMPTY) if ((signed)(jiffies - timeout) > 0) - return 0; + goto err_out; save_flags(flags); cli(); outb(0xff, MIDI_DATA(iobase)); b = inb(MIDI_STATUS(iobase)); restore_flags(flags); if (!(b & MIDI_WRITE_EMPTY)) - return 0; + goto err_out; while (inb(MIDI_STATUS(iobase)) & MIDI_WRITE_EMPTY) if ((signed)(jiffies - timeout) > 0) - return 0; + goto err_out; return 1; + err_out: + release_region(iobase, MIDI_EXTENT); + return 0; } /* --------------------------------------------------------------------- */ @@ -289,7 +295,6 @@ sm->hdrv.ptt_out.seriobase <= 0x1000-SER_EXTENT && ((u = check_uart(sm->hdrv.ptt_out.seriobase))) != c_uart_unknown) { sm->hdrv.ptt_out.flags |= SP_SER; - request_region(sm->hdrv.ptt_out.seriobase, SER_EXTENT, "sm ser ptt"); outb(0, UART_IER(sm->hdrv.ptt_out.seriobase)); /* 5 bits, 1 stop, no parity, no break, Div latch access */ outb(0x80, UART_LCR(sm->hdrv.ptt_out.seriobase)); @@ -325,8 +330,6 @@ sm->hdrv.ptt_out.midiiobase <= 0x1000-MIDI_EXTENT && check_midi(sm->hdrv.ptt_out.midiiobase)) { sm->hdrv.ptt_out.flags |= SP_MIDI; - request_region(sm->hdrv.ptt_out.midiiobase, MIDI_EXTENT, - "sm midi ptt"); } sm_output_status(sm); ------------------------------------------------------- This sf.net email is sponsored by: Influence the future of Java(TM) technology. Join the Java Community Process(SM) (JCP(SM)) program now. http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0003en

Next Message by Date: click to view message preview

[PATCH] region changes for sm_sbc.c hamradio soundmodem driver

Hi this is a patch for sm_sbc.c soundmodem hamradio driver for Linux to 1) remove two calls to check_region using request_region instead 2) release allocated region resource in case of error. I don't have this hardware so compilation checked only. This patch removes all references to check_region in this driver. Patch also available at the following URL: http://www.chez.com/wstinson/linux/kernel/patch-hamradio-sm_sbc Comments and suggestions welcome William Stinson (wstinson@xxxxxxxxxx) --- linux-2.5.44/drivers/net/hamradio/soundmodem/sm_sbc.c Sat Oct 26 00:47:41 2002 +++ linux-local/drivers/net/hamradio/soundmodem/sm_sbc.c Sat Oct 26 01:11:45 2002 @@ -379,7 +379,7 @@ if (dev->base_addr <= 0 || dev->base_addr > 0x1000-SBC_EXTENT || dev->irq < 2 || dev->irq > 15 || dev->dma > 3) return -ENXIO; - if (check_region(dev->base_addr, SBC_EXTENT)) + if (!request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name)) return -EACCES; /* * check if a card is available @@ -387,30 +387,35 @@ if (!reset_dsp(dev)) { printk(KERN_ERR "%s: sbc: no card at io address 0x%lx\n", sm_drvname, dev->base_addr); - return -ENODEV; + err = -ENODEV; + goto err_out; } write_dsp(dev, SBC_GET_REVISION); if (!read_dsp(dev, &SCSTATE->revhi) || - !read_dsp(dev, &SCSTATE->revlo)) - return -ENODEV; + !read_dsp(dev, &SCSTATE->revlo)) { + err = -ENODEV; + goto err_out; + } printk(KERN_INFO "%s: SoundBlaster DSP revision %d.%d\n", sm_drvname, SCSTATE->revhi, SCSTATE->revlo); if (SCSTATE->revhi < 2) { printk(KERN_ERR "%s: your card is an antiquity, at least DSP " "rev 2.00 required\n", sm_drvname); - return -ENODEV; + err = -ENODEV; + goto err_out; } if (SCSTATE->revhi < 3 && (SCSTATE->fmt[0] >= 180 || SCSTATE->fmt[1] >= 180)) { printk(KERN_ERR "%s: sbc io 0x%lx: DSP rev %d.%02d too " "old, at least 3.00 required\n", sm_drvname, dev->base_addr, SCSTATE->revhi, SCSTATE->revlo); - return -ENODEV; + err = -ENODEV; + goto err_out; } if (SCSTATE->revhi >= 4 && (err = config_resources(dev, sm, 0))) { printk(KERN_ERR "%s: invalid IRQ and/or DMA specified\n", sm_drvname); - return err; + goto err_out; } /* * initialize some variables @@ -420,8 +425,10 @@ u = NUM_FRAGMENTS * sm->dma.ofragsz; if (u > dmasz) dmasz = u; - if (!(sm->dma.ibuf = sm->dma.obuf = kmalloc(dmasz, GFP_KERNEL | GFP_DMA))) - return -ENOMEM; + if (!(sm->dma.ibuf = sm->dma.obuf = kmalloc(dmasz, GFP_KERNEL | GFP_DMA))) { + err = -ENOMEM; + goto err_out; + } dma_init_transmit(sm); dma_init_receive(sm); @@ -433,18 +440,23 @@ sm->mode_rx->init(sm); if (request_dma(dev->dma, sm->hwdrv->hw_name)) { - kfree(sm->dma.obuf); - return -EBUSY; + err = -EBUSY; + goto err_out1; } if (request_irq(dev->irq, sbc_interrupt, SA_INTERRUPT, sm->hwdrv->hw_name, dev)) { - free_dma(dev->dma); - kfree(sm->dma.obuf); - return -EBUSY; + err = -EBUSY; + goto err_out2; } - request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name); setup_dma_dsp(dev, sm, 0); return 0; +err_out2: + free_dma(dev->dma); +err_out1: + kfree(sm->dma.obuf); +err_out: + release_region(dev->base_addr, SBC_EXTENT); + return err; } /* --------------------------------------------------------------------- */ @@ -761,7 +773,7 @@ if (dev->base_addr <= 0 || dev->base_addr > 0x1000-SBC_EXTENT || dev->irq < 2 || dev->irq > 15 || dev->dma > 3) return -ENXIO; - if (check_region(dev->base_addr, SBC_EXTENT)) + if (!request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name)) return -EACCES; /* * check if a card is available @@ -769,30 +781,36 @@ if (!reset_dsp(dev)) { printk(KERN_ERR "%s: sbc: no card at io address 0x%lx\n", sm_drvname, dev->base_addr); - return -ENODEV; + err = -ENODEV; + goto err_out; } write_dsp(dev, SBC_GET_REVISION); if (!read_dsp(dev, &SCSTATE->revhi) || - !read_dsp(dev, &SCSTATE->revlo)) - return -ENODEV; + !read_dsp(dev, &SCSTATE->revlo)) { + err = -ENODEV; + goto err_out; + } printk(KERN_INFO "%s: SoundBlaster DSP revision %d.%d\n", sm_drvname, SCSTATE->revhi, SCSTATE->revlo); if (SCSTATE->revhi < 4) { printk(KERN_ERR "%s: at least DSP rev 4.00 required\n", sm_drvname); - return -ENODEV; + err = -ENODEV; + goto err_out; } if ((err = config_resources(dev, sm, 1))) { printk(KERN_ERR "%s: invalid IRQ and/or DMA specified\n", sm_drvname); - return err; + goto err_out; } /* * initialize some variables */ - if (!(sm->dma.ibuf = kmalloc(sm->dma.ifragsz * (NUM_FRAGMENTS+1), GFP_KERNEL | GFP_DMA))) - return -ENOMEM; + if (!(sm->dma.ibuf = kmalloc(sm->dma.ifragsz * (NUM_FRAGMENTS+1), GFP_KERNEL | GFP_DMA))) { + err = -ENOMEM; + goto err_out; + } if (!(sm->dma.obuf = kmalloc(sm->dma.ofragsz * NUM_FRAGMENTS, GFP_KERNEL | GFP_DMA))) { - kfree(sm->dma.ibuf); - return -ENOMEM; + err = -ENOMEM; + goto err_out1; } dma_init_transmit(sm); dma_init_receive(sm); @@ -805,27 +823,31 @@ sm->mode_rx->init(sm); if (request_dma(dev->dma, sm->hwdrv->hw_name)) { - kfree(sm->dma.ibuf); - kfree(sm->dma.obuf); - return -EBUSY; + err = -EBUSY; + goto err_out2; } if (request_dma(sm->hdrv.ptt_out.dma2, sm->hwdrv->hw_name)) { - kfree(sm->dma.ibuf); - kfree(sm->dma.obuf); - free_dma(dev->dma); - return -EBUSY; + err = -EBUSY; + goto err_out3; } if (request_irq(dev->irq, sbcfdx_interrupt, SA_INTERRUPT, sm->hwdrv->hw_name, dev)) { - kfree(sm->dma.ibuf); - kfree(sm->dma.obuf); - free_dma(dev->dma); - free_dma(sm->hdrv.ptt_out.dma2); - return -EBUSY; + err = -EBUSY; + goto err_out4; } - request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name); setup_dma_fdx_dsp(dev, sm); return 0; +err_out4: + free_dma(sm->hdrv.ptt_out.dma2); +err_out3: + free_dma(dev->dma); +err_out2: + kfree(sm->dma.obuf); +err_out1: + kfree(sm->dma.ibuf); +err_out: + release_region(dev->base_addr, SBC_EXTENT); + return err; } /* --------------------------------------------------------------------- */ ------------------------------------------------------- This sf.net email is sponsored by: Influence the future of Java(TM) technology. Join the Java Community Process(SM) (JCP(SM)) program now. http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0004en

Previous Message by Thread: click to view message preview

[PATCH] region changes for sm.c hamradio soundmodem driver

Hi this is a small patch for sm.c soundmodem hamradio driver for Linux to 1) remove two calls to check_region using request_region instead 2) release allocated region resource in case of error. I don't have this hardware so compilation checked only. This patch removes all references to check_region in this driver. Patch also available at the following URL: http://www.chez.com/wstinson/linux/kernel/patch-hamradio-sm Comments and suggestions welcome William Stinson (wstinson@xxxxxxxxxx) --- linux-2.5.40/drivers/net/hamradio/soundmodem/sm.c Thu Oct 24 23:34:32 2002 +++ linux-local/drivers/net/hamradio/soundmodem/sm.c Thu Oct 24 23:41:50 2002 @@ -202,7 +202,7 @@ if (iobase <= 0 || iobase > 0x1000-SER_EXTENT) return c_uart_unknown; - if (check_region(iobase, SER_EXTENT)) + if (!request_region(iobase, SER_EXTENT, "sm ser ptt")) return c_uart_unknown; b1 = inb(UART_MCR(iobase)); outb(b1 | 0x10, UART_MCR(iobase)); /* loopback mode */ @@ -212,7 +212,7 @@ outb(b1, UART_MCR(iobase)); /* restore old values */ outb(b2, UART_MSR(iobase)); if (b3 != 0x90) - return c_uart_unknown; + goto err_out; inb(UART_RBR(iobase)); inb(UART_RBR(iobase)); outb(0x01, UART_FCR(iobase)); /* enable FIFOs */ @@ -226,6 +226,9 @@ u = c_uart_8250; } return u; +err_out: + release_region(iobase, SER_EXTENT); + return c_uart_unknown; } /* --------------------------------------------------------------------- */ @@ -238,23 +241,26 @@ if (iobase <= 0 || iobase > 0x1000-MIDI_EXTENT) return 0; - if (check_region(iobase, MIDI_EXTENT)) + if (!request_region(iobase, MIDI_EXTENT, "sm midi ptt")) return 0; timeout = jiffies + (HZ / 100); while (inb(MIDI_STATUS(iobase)) & MIDI_WRITE_EMPTY) if ((signed)(jiffies - timeout) > 0) - return 0; + goto err_out; save_flags(flags); cli(); outb(0xff, MIDI_DATA(iobase)); b = inb(MIDI_STATUS(iobase)); restore_flags(flags); if (!(b & MIDI_WRITE_EMPTY)) - return 0; + goto err_out; while (inb(MIDI_STATUS(iobase)) & MIDI_WRITE_EMPTY) if ((signed)(jiffies - timeout) > 0) - return 0; + goto err_out; return 1; + err_out: + release_region(iobase, MIDI_EXTENT); + return 0; } /* --------------------------------------------------------------------- */ @@ -289,7 +295,6 @@ sm->hdrv.ptt_out.seriobase <= 0x1000-SER_EXTENT && ((u = check_uart(sm->hdrv.ptt_out.seriobase))) != c_uart_unknown) { sm->hdrv.ptt_out.flags |= SP_SER; - request_region(sm->hdrv.ptt_out.seriobase, SER_EXTENT, "sm ser ptt"); outb(0, UART_IER(sm->hdrv.ptt_out.seriobase)); /* 5 bits, 1 stop, no parity, no break, Div latch access */ outb(0x80, UART_LCR(sm->hdrv.ptt_out.seriobase)); @@ -325,8 +330,6 @@ sm->hdrv.ptt_out.midiiobase <= 0x1000-MIDI_EXTENT && check_midi(sm->hdrv.ptt_out.midiiobase)) { sm->hdrv.ptt_out.flags |= SP_MIDI; - request_region(sm->hdrv.ptt_out.midiiobase, MIDI_EXTENT, - "sm midi ptt"); } sm_output_status(sm); ------------------------------------------------------- This sf.net email is sponsored by: Influence the future of Java(TM) technology. Join the Java Community Process(SM) (JCP(SM)) program now. http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0003en

Next Message by Thread: click to view message preview

[PATCH] region changes for sm_sbc.c hamradio soundmodem driver

Hi this is a patch for sm_sbc.c soundmodem hamradio driver for Linux to 1) remove two calls to check_region using request_region instead 2) release allocated region resource in case of error. I don't have this hardware so compilation checked only. This patch removes all references to check_region in this driver. Patch also available at the following URL: http://www.chez.com/wstinson/linux/kernel/patch-hamradio-sm_sbc Comments and suggestions welcome William Stinson (wstinson@xxxxxxxxxx) --- linux-2.5.44/drivers/net/hamradio/soundmodem/sm_sbc.c Sat Oct 26 00:47:41 2002 +++ linux-local/drivers/net/hamradio/soundmodem/sm_sbc.c Sat Oct 26 01:11:45 2002 @@ -379,7 +379,7 @@ if (dev->base_addr <= 0 || dev->base_addr > 0x1000-SBC_EXTENT || dev->irq < 2 || dev->irq > 15 || dev->dma > 3) return -ENXIO; - if (check_region(dev->base_addr, SBC_EXTENT)) + if (!request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name)) return -EACCES; /* * check if a card is available @@ -387,30 +387,35 @@ if (!reset_dsp(dev)) { printk(KERN_ERR "%s: sbc: no card at io address 0x%lx\n", sm_drvname, dev->base_addr); - return -ENODEV; + err = -ENODEV; + goto err_out; } write_dsp(dev, SBC_GET_REVISION); if (!read_dsp(dev, &SCSTATE->revhi) || - !read_dsp(dev, &SCSTATE->revlo)) - return -ENODEV; + !read_dsp(dev, &SCSTATE->revlo)) { + err = -ENODEV; + goto err_out; + } printk(KERN_INFO "%s: SoundBlaster DSP revision %d.%d\n", sm_drvname, SCSTATE->revhi, SCSTATE->revlo); if (SCSTATE->revhi < 2) { printk(KERN_ERR "%s: your card is an antiquity, at least DSP " "rev 2.00 required\n", sm_drvname); - return -ENODEV; + err = -ENODEV; + goto err_out; } if (SCSTATE->revhi < 3 && (SCSTATE->fmt[0] >= 180 || SCSTATE->fmt[1] >= 180)) { printk(KERN_ERR "%s: sbc io 0x%lx: DSP rev %d.%02d too " "old, at least 3.00 required\n", sm_drvname, dev->base_addr, SCSTATE->revhi, SCSTATE->revlo); - return -ENODEV; + err = -ENODEV; + goto err_out; } if (SCSTATE->revhi >= 4 && (err = config_resources(dev, sm, 0))) { printk(KERN_ERR "%s: invalid IRQ and/or DMA specified\n", sm_drvname); - return err; + goto err_out; } /* * initialize some variables @@ -420,8 +425,10 @@ u = NUM_FRAGMENTS * sm->dma.ofragsz; if (u > dmasz) dmasz = u; - if (!(sm->dma.ibuf = sm->dma.obuf = kmalloc(dmasz, GFP_KERNEL | GFP_DMA))) - return -ENOMEM; + if (!(sm->dma.ibuf = sm->dma.obuf = kmalloc(dmasz, GFP_KERNEL | GFP_DMA))) { + err = -ENOMEM; + goto err_out; + } dma_init_transmit(sm); dma_init_receive(sm); @@ -433,18 +440,23 @@ sm->mode_rx->init(sm); if (request_dma(dev->dma, sm->hwdrv->hw_name)) { - kfree(sm->dma.obuf); - return -EBUSY; + err = -EBUSY; + goto err_out1; } if (request_irq(dev->irq, sbc_interrupt, SA_INTERRUPT, sm->hwdrv->hw_name, dev)) { - free_dma(dev->dma); - kfree(sm->dma.obuf); - return -EBUSY; + err = -EBUSY; + goto err_out2; } - request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name); setup_dma_dsp(dev, sm, 0); return 0; +err_out2: + free_dma(dev->dma); +err_out1: + kfree(sm->dma.obuf); +err_out: + release_region(dev->base_addr, SBC_EXTENT); + return err; } /* --------------------------------------------------------------------- */ @@ -761,7 +773,7 @@ if (dev->base_addr <= 0 || dev->base_addr > 0x1000-SBC_EXTENT || dev->irq < 2 || dev->irq > 15 || dev->dma > 3) return -ENXIO; - if (check_region(dev->base_addr, SBC_EXTENT)) + if (!request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name)) return -EACCES; /* * check if a card is available @@ -769,30 +781,36 @@ if (!reset_dsp(dev)) { printk(KERN_ERR "%s: sbc: no card at io address 0x%lx\n", sm_drvname, dev->base_addr); - return -ENODEV; + err = -ENODEV; + goto err_out; } write_dsp(dev, SBC_GET_REVISION); if (!read_dsp(dev, &SCSTATE->revhi) || - !read_dsp(dev, &SCSTATE->revlo)) - return -ENODEV; + !read_dsp(dev, &SCSTATE->revlo)) { + err = -ENODEV; + goto err_out; + } printk(KERN_INFO "%s: SoundBlaster DSP revision %d.%d\n", sm_drvname, SCSTATE->revhi, SCSTATE->revlo); if (SCSTATE->revhi < 4) { printk(KERN_ERR "%s: at least DSP rev 4.00 required\n", sm_drvname); - return -ENODEV; + err = -ENODEV; + goto err_out; } if ((err = config_resources(dev, sm, 1))) { printk(KERN_ERR "%s: invalid IRQ and/or DMA specified\n", sm_drvname); - return err; + goto err_out; } /* * initialize some variables */ - if (!(sm->dma.ibuf = kmalloc(sm->dma.ifragsz * (NUM_FRAGMENTS+1), GFP_KERNEL | GFP_DMA))) - return -ENOMEM; + if (!(sm->dma.ibuf = kmalloc(sm->dma.ifragsz * (NUM_FRAGMENTS+1), GFP_KERNEL | GFP_DMA))) { + err = -ENOMEM; + goto err_out; + } if (!(sm->dma.obuf = kmalloc(sm->dma.ofragsz * NUM_FRAGMENTS, GFP_KERNEL | GFP_DMA))) { - kfree(sm->dma.ibuf); - return -ENOMEM; + err = -ENOMEM; + goto err_out1; } dma_init_transmit(sm); dma_init_receive(sm); @@ -805,27 +823,31 @@ sm->mode_rx->init(sm); if (request_dma(dev->dma, sm->hwdrv->hw_name)) { - kfree(sm->dma.ibuf); - kfree(sm->dma.obuf); - return -EBUSY; + err = -EBUSY; + goto err_out2; } if (request_dma(sm->hdrv.ptt_out.dma2, sm->hwdrv->hw_name)) { - kfree(sm->dma.ibuf); - kfree(sm->dma.obuf); - free_dma(dev->dma); - return -EBUSY; + err = -EBUSY; + goto err_out3; } if (request_irq(dev->irq, sbcfdx_interrupt, SA_INTERRUPT, sm->hwdrv->hw_name, dev)) { - kfree(sm->dma.ibuf); - kfree(sm->dma.obuf); - free_dma(dev->dma); - free_dma(sm->hdrv.ptt_out.dma2); - return -EBUSY; + err = -EBUSY; + goto err_out4; } - request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name); setup_dma_fdx_dsp(dev, sm); return 0; +err_out4: + free_dma(sm->hdrv.ptt_out.dma2); +err_out3: + free_dma(dev->dma); +err_out2: + kfree(sm->dma.obuf); +err_out1: + kfree(sm->dma.ibuf); +err_out: + release_region(dev->base_addr, SBC_EXTENT); + return err; } /* --------------------------------------------------------------------- */ ------------------------------------------------------- This sf.net email is sponsored by: Influence the future of Java(TM) technology. Join the Java Community Process(SM) (JCP(SM)) program now. http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0004en
Sign up for updates to this mailing list. email:
Loading Comments...
Home | News | Patents | Sitemap | FAQ | advertise

Advertising by