Patch title: Release 90 bulk changes
Abstract:
File: /language/stream/serial.pli
Key:
    Removed line
    Added line
   
# Copyright  Thomas Bakketun
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be us
# but WITHOUT ANY WARRANTY; without even the implied warrant
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public 
# version 2 along with this program; if not, write to the Fr
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 


  if not (name parse port)
    return failure
  speed := options option "speed" Int
  if speed=undefined
    speed := options option "baud" Int # just to be backward
# Copyright  Thomas Bakketun
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be us
# but WITHOUT ANY WARRANTY; without even the implied warrant
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public 
# version 2 along with this program; if not, write to the Fr
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 


  if not (name parse port)
    return failure
  speed := options option "speed" Int
  if speed=undefined
    speed := options option "baud" Int # just to be backward
  databits := options option "databits" Int
  databits := options option "databits" Int 8
  parity := options option "parity" Str
  parity := options option "parity" Str
  stopbits := options option "stopbits" Int
  stopbits := options option "stopbits" Int 1
  flowcontrol := options option "flowcontrol" Str
  if speed=undefined
    return failure
  if os_api="linux"
    var Int mode
    if (flags .and. in_out)=in
      mode := os_O_RDONLY
    else
      mode := os_O_RDWR
    var Int handle := os_open "/dev/ttyS"+string:port mode+o
    # var Int handle := os_open "/dev/ttyS"+string:port mode
    if handle<0
      return failure
    if restore
      var os_termios old
      tcgetattr handle old
    var os_termios ios
    memory_clear addressof:ios os_termios:size
    ios c_iflags := 0
    ios c_oflags := 0
    ios c_cflags := HUPCL + CREAD
    if (flags .and. nocache)<>nocache
      ios c_lflags := ICANON
    ios:c_cc VTIME := 0 # timeout in 1/10s
    ios:c_cc VMIN := 1 # minimum number of characters to be 


    # databits
    if debug
      console "data bits: " databits eol
  flowcontrol := options option "flowcontrol" Str
  if speed=undefined
    return failure
  if os_api="linux"
    var Int mode
    if (flags .and. in_out)=in
      mode := os_O_RDONLY
    else
      mode := os_O_RDWR
    var Int handle := os_open "/dev/ttyS"+string:port mode+o
    # var Int handle := os_open "/dev/ttyS"+string:port mode
    if handle<0
      return failure
    if restore
      var os_termios old
      tcgetattr handle old
    var os_termios ios
    memory_clear addressof:ios os_termios:size
    ios c_iflags := 0
    ios c_oflags := 0
    ios c_cflags := HUPCL + CREAD
    if (flags .and. nocache)<>nocache
      ios c_lflags := ICANON
    ios:c_cc VTIME := 0 # timeout in 1/10s
    ios:c_cc VMIN := 1 # minimum number of characters to be 


    # databits
    if debug
      console "data bits: " databits eol
    ios c_cflags += shunt databits=5 CS5 databits=6 CS6 data
    ios c_cflags += shunt databits=5 CS5 databits=6 CS6 databits=7 CS7 CS8


    dcb BaudRate := speed
    dcb ByteSize := databits


    dcb BaudRate := speed
    dcb ByteSize := databits
    if stopbits=2
      dcb StopBits := 2
    else
      dcb StopBits := 0  # = 1 stopbit
    dcb StopBits := shunt stopbits=2 2 0 # 0 -> 1 stopbit
    
    dcb flags := BINARY
    
    # parity
    if parity="odd" or parity="even"
      dcb flags += PARITY
      if parity="odd"
        dcb Parity := ODDPARITY
      else
        dcb Parity := EVENPARITY
    else
      dcb Parity := NOPARITY
    
    # flowcontrol
    if flowcontrol="hardware" or flowcontrol="both" or flowc
      dcb flags += OUTX_CTS_FLOW + OUTX_DSR_FLOW + DTR_CONTR
    if flowcontrol="software" or flowcontrol="both"
      dcb flags += OUTX + INX
    
    if not (os_SetCommState handle dcb)
      return failure


gvar SerialFileSystem serial_file_system
pliant_multi_file_system mount "serial:" "" serial_file_syst
    
    dcb flags := BINARY
    
    # parity
    if parity="odd" or parity="even"
      dcb flags += PARITY
      if parity="odd"
        dcb Parity := ODDPARITY
      else
        dcb Parity := EVENPARITY
    else
      dcb Parity := NOPARITY
    
    # flowcontrol
    if flowcontrol="hardware" or flowcontrol="both" or flowc
      dcb flags += OUTX_CTS_FLOW + OUTX_DSR_FLOW + DTR_CONTR
    if flowcontrol="software" or flowcontrol="both"
      dcb flags += OUTX + INX
    
    if not (os_SetCommState handle dcb)
      return failure


gvar SerialFileSystem serial_file_system
pliant_multi_file_system mount "serial:" "" serial_file_syst